From 96d11b79666a8fbf253255cfe0ce436b5206a141 Mon Sep 17 00:00:00 2001 From: Chelsea Boling Date: Mon, 7 Dec 2020 11:22:01 -0800 Subject: [PATCH 001/741] Create ServiceStack.qll --- cpp/ql/src/Microsoft/ServiceStack.qll | 86 +++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 cpp/ql/src/Microsoft/ServiceStack.qll diff --git a/cpp/ql/src/Microsoft/ServiceStack.qll b/cpp/ql/src/Microsoft/ServiceStack.qll new file mode 100644 index 00000000000..13b43be07f8 --- /dev/null +++ b/cpp/ql/src/Microsoft/ServiceStack.qll @@ -0,0 +1,86 @@ +/** + * Provides a taint-tracking configuration for reasoning about untrusted user input when using Service Stack framework + */ +import csharp + +module ServiceStackSQL { + import semmle.code.csharp.security.dataflow.SqlInjection::SqlInjection + + string getSourceType(DataFlow::Node node) { + result = node.(RemoteFlowSource).getSourceType() + or + result = node.(LocalFlowSource).getSourceType() + } + + predicate serviceStackRequests(Method m) { + exists(ValueOrRefType type, ServiceStackClass ssc | + type.fromSource() and + m = type.getAMethod() and + m = ssc.getAMember().getDeclaringType().getAMethod() and + + // verify other verb methods in service stack docs + m.getName() = ["Post","Get", "Put", "Delete","Any", "Option", "Head"] + // not reccommended match approach below + //.toLowerCase().regexpMatch("(Post|Get|Put|Delete)") + + ) + } + + class ServiceStackClass extends Class { + ServiceStackClass() { this.getBaseClass+().getName()="Service" } + } + + class ServiceStackRequestClass extends Class { + ServiceStackRequestClass() { + // Classes directly used in as param to request method + exists(Method m | + serviceStackRequests(m) and + this = m.getAParameter().getType()) or + // Classes of a property or field on another request class + exists(ServiceStackRequestClass outer | + this = outer.getAProperty().getType() or + this = outer.getAField().getType()) + } + } + + class ServiceClassSources extends RemoteFlowSource { + ServiceClassSources() { + exists(Method m | + serviceStackRequests(m) and + // keep this for primitive typed request params (string/int) + this.asParameter() = m.getAParameter()) or + exists(ServiceStackRequestClass reqClass | + // look for field reads on request classes + reqClass.getAProperty().getAnAccess() = this.asExpr() or + reqClass.getAField().getAnAccess() = this.asExpr()) + } + + override string getSourceType() { + result = "ServiceStackSources" + } + } + + class SqlSinks extends Sink { + SqlSinks() { this.asExpr() instanceof SqlInjectionExpr } + } + + class SqlStringMethod extends Method { + SqlStringMethod() { + this.getName() in [ + "Custom", "CustomSelect", "CustomInsert", "CustomUpdate", + "SqlScalar", "SqlList", "SqlColumn", "ColumnDistinct", + "PreCreateTable", "PostCreateTable", "PreDropTable", "PostDropTable", + "ExecuteSql", "ExecuteSqlAsync", + "UnsafeSelect", "UnsafeFrom", "UnsafeWhere", "UnsafeAnd", "UnsafeOr" + ] + } + } + + class SqlInjectionExpr extends Expr { + SqlInjectionExpr() { + exists(MethodCall mc | + mc.getTarget() instanceof SqlStringMethod and mc.getArgument(1) = this + ) + } + } +} From 188dbde2d6dc5c7fe3a59bc2740c85a856c18ca6 Mon Sep 17 00:00:00 2001 From: Chelsea Boling Date: Mon, 7 Dec 2020 11:29:59 -0800 Subject: [PATCH 002/741] Create SQLInjection.ql --- .../ServiceStack/SQL-Injection/SQLInjection.ql | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 csharp/ql/src/experimental/ServiceStack/SQL-Injection/SQLInjection.ql diff --git a/csharp/ql/src/experimental/ServiceStack/SQL-Injection/SQLInjection.ql b/csharp/ql/src/experimental/ServiceStack/SQL-Injection/SQLInjection.ql new file mode 100644 index 00000000000..a046c132249 --- /dev/null +++ b/csharp/ql/src/experimental/ServiceStack/SQL-Injection/SQLInjection.ql @@ -0,0 +1,15 @@ +/** + * @id test-id + * @name Test + * @description Test description + * @tags test + */ + +import csharp +import semmle.code.csharp.frameworks.microsoft.ServiceStack::ServiceStackSQL + +from TaintTrackingConfiguration c, DataFlow::PathNode source, DataFlow::PathNode sink +where c.hasFlowPath(source, sink) +select sink.getNode(), source, sink, "Query might include code from $@.", source, + ("this " + getSourceType(source.getNode())) + From dbe017024910f5b5e7c3c5659afffd1b5a476b91 Mon Sep 17 00:00:00 2001 From: Chelsea Boling Date: Mon, 7 Dec 2020 11:30:20 -0800 Subject: [PATCH 003/741] Add files via upload --- .../SQL-Injection/SQLInjection.cs | 61 +++++++++++++++++++ .../SQL-Injection/SQLInjection.qhelp | 35 +++++++++++ 2 files changed, 96 insertions(+) create mode 100644 csharp/ql/src/experimental/ServiceStack/SQL-Injection/SQLInjection.cs create mode 100644 csharp/ql/src/experimental/ServiceStack/SQL-Injection/SQLInjection.qhelp diff --git a/csharp/ql/src/experimental/ServiceStack/SQL-Injection/SQLInjection.cs b/csharp/ql/src/experimental/ServiceStack/SQL-Injection/SQLInjection.cs new file mode 100644 index 00000000000..e41cdb0ff7f --- /dev/null +++ b/csharp/ql/src/experimental/ServiceStack/SQL-Injection/SQLInjection.cs @@ -0,0 +1,61 @@ +using ServiceStack; +using ServiceStack.OrmLite; +using SqlServer.ServiceModel; +using SqlServer.ServiceModel.Types; + +namespace SqlServer.ServiceInterface +{ + public class CustomerService : Service + { + public GetCustomersResponse Get(GetCustomers request) + { + return new GetCustomersResponse { Results = Db.Select() }; + } + + public GetCustomerResponse Get(GetCustomer request) + { + //var customer = Db.SingleById(request.Id); + var customer = Db.SqlScalar("SELECT Id FROM Customer WHERE Id = " + request.Id + ";"); + if (customer == null) + throw HttpError.NotFound("Customer not found"); + + return new GetCustomerResponse + { + Result = Db.SingleById(request.Id) + }; + } + + public CreateCustomerResponse Post(CreateCustomer request) + { + var customer = new Customer { Name = request.Name }; + //Db.Save(customer); + Db.ExecuteSql("INSERT INTO Customer (Name) VALUES ('" + customer.Name + "')"); + return new CreateCustomerResponse + { + Result = customer + }; + } + + public UpdateCustomerResponse Put(UpdateCustomer request) + { + var customer = Db.SingleById(request.Id); + if (customer == null) + throw HttpError.NotFound("Customer '{0}' does not exist".Fmt(request.Id)); + + customer.Name = request.Name; + //Db.Update(customer); + Db.ExecuteSqlAsync("UPDATE Customer SET Name = '" + customer.Name + "' WHERE Id = " + request.Id); + return new UpdateCustomerResponse + { + Result = customer + }; + } + + public void Delete(DeleteCustomer request) + { + //Db.DeleteById(request.Id); + string q = @"DELETE FROM Customer WHERE Id = " + request.Id; + Db.ExecuteSql(q); + } + } +} diff --git a/csharp/ql/src/experimental/ServiceStack/SQL-Injection/SQLInjection.qhelp b/csharp/ql/src/experimental/ServiceStack/SQL-Injection/SQLInjection.qhelp new file mode 100644 index 00000000000..3b51f6a6d34 --- /dev/null +++ b/csharp/ql/src/experimental/ServiceStack/SQL-Injection/SQLInjection.qhelp @@ -0,0 +1,35 @@ + + + +

+If unsanitized user input is..... +

+ +
+ + +

+You can do better.... +

+

+If using some method, you should always pass... +

+
    +
  • Something must be set to this thing
  • +
+ +
+ + +

+In the following example.... +

+ +
+ + +
  • Services Stack: Documentation.
  • +
    +
    From cae6f91729b7a13874db9fb8edbed35404e6de02 Mon Sep 17 00:00:00 2001 From: Chelsea Boling Date: Mon, 7 Dec 2020 11:31:38 -0800 Subject: [PATCH 004/741] Create ServiceStack.qll --- .../frameworks/microsoft/ServiceStack.qll | 86 +++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 csharp/ql/src/semmle/code/csharp/frameworks/microsoft/ServiceStack.qll diff --git a/csharp/ql/src/semmle/code/csharp/frameworks/microsoft/ServiceStack.qll b/csharp/ql/src/semmle/code/csharp/frameworks/microsoft/ServiceStack.qll new file mode 100644 index 00000000000..13b43be07f8 --- /dev/null +++ b/csharp/ql/src/semmle/code/csharp/frameworks/microsoft/ServiceStack.qll @@ -0,0 +1,86 @@ +/** + * Provides a taint-tracking configuration for reasoning about untrusted user input when using Service Stack framework + */ +import csharp + +module ServiceStackSQL { + import semmle.code.csharp.security.dataflow.SqlInjection::SqlInjection + + string getSourceType(DataFlow::Node node) { + result = node.(RemoteFlowSource).getSourceType() + or + result = node.(LocalFlowSource).getSourceType() + } + + predicate serviceStackRequests(Method m) { + exists(ValueOrRefType type, ServiceStackClass ssc | + type.fromSource() and + m = type.getAMethod() and + m = ssc.getAMember().getDeclaringType().getAMethod() and + + // verify other verb methods in service stack docs + m.getName() = ["Post","Get", "Put", "Delete","Any", "Option", "Head"] + // not reccommended match approach below + //.toLowerCase().regexpMatch("(Post|Get|Put|Delete)") + + ) + } + + class ServiceStackClass extends Class { + ServiceStackClass() { this.getBaseClass+().getName()="Service" } + } + + class ServiceStackRequestClass extends Class { + ServiceStackRequestClass() { + // Classes directly used in as param to request method + exists(Method m | + serviceStackRequests(m) and + this = m.getAParameter().getType()) or + // Classes of a property or field on another request class + exists(ServiceStackRequestClass outer | + this = outer.getAProperty().getType() or + this = outer.getAField().getType()) + } + } + + class ServiceClassSources extends RemoteFlowSource { + ServiceClassSources() { + exists(Method m | + serviceStackRequests(m) and + // keep this for primitive typed request params (string/int) + this.asParameter() = m.getAParameter()) or + exists(ServiceStackRequestClass reqClass | + // look for field reads on request classes + reqClass.getAProperty().getAnAccess() = this.asExpr() or + reqClass.getAField().getAnAccess() = this.asExpr()) + } + + override string getSourceType() { + result = "ServiceStackSources" + } + } + + class SqlSinks extends Sink { + SqlSinks() { this.asExpr() instanceof SqlInjectionExpr } + } + + class SqlStringMethod extends Method { + SqlStringMethod() { + this.getName() in [ + "Custom", "CustomSelect", "CustomInsert", "CustomUpdate", + "SqlScalar", "SqlList", "SqlColumn", "ColumnDistinct", + "PreCreateTable", "PostCreateTable", "PreDropTable", "PostDropTable", + "ExecuteSql", "ExecuteSqlAsync", + "UnsafeSelect", "UnsafeFrom", "UnsafeWhere", "UnsafeAnd", "UnsafeOr" + ] + } + } + + class SqlInjectionExpr extends Expr { + SqlInjectionExpr() { + exists(MethodCall mc | + mc.getTarget() instanceof SqlStringMethod and mc.getArgument(1) = this + ) + } + } +} From a2615339f7788a58c58394e310c9578e65507f1f Mon Sep 17 00:00:00 2001 From: Chelsea Boling Date: Mon, 7 Dec 2020 11:32:28 -0800 Subject: [PATCH 005/741] Delete ServiceStack.qll --- cpp/ql/src/Microsoft/ServiceStack.qll | 86 --------------------------- 1 file changed, 86 deletions(-) delete mode 100644 cpp/ql/src/Microsoft/ServiceStack.qll diff --git a/cpp/ql/src/Microsoft/ServiceStack.qll b/cpp/ql/src/Microsoft/ServiceStack.qll deleted file mode 100644 index 13b43be07f8..00000000000 --- a/cpp/ql/src/Microsoft/ServiceStack.qll +++ /dev/null @@ -1,86 +0,0 @@ -/** - * Provides a taint-tracking configuration for reasoning about untrusted user input when using Service Stack framework - */ -import csharp - -module ServiceStackSQL { - import semmle.code.csharp.security.dataflow.SqlInjection::SqlInjection - - string getSourceType(DataFlow::Node node) { - result = node.(RemoteFlowSource).getSourceType() - or - result = node.(LocalFlowSource).getSourceType() - } - - predicate serviceStackRequests(Method m) { - exists(ValueOrRefType type, ServiceStackClass ssc | - type.fromSource() and - m = type.getAMethod() and - m = ssc.getAMember().getDeclaringType().getAMethod() and - - // verify other verb methods in service stack docs - m.getName() = ["Post","Get", "Put", "Delete","Any", "Option", "Head"] - // not reccommended match approach below - //.toLowerCase().regexpMatch("(Post|Get|Put|Delete)") - - ) - } - - class ServiceStackClass extends Class { - ServiceStackClass() { this.getBaseClass+().getName()="Service" } - } - - class ServiceStackRequestClass extends Class { - ServiceStackRequestClass() { - // Classes directly used in as param to request method - exists(Method m | - serviceStackRequests(m) and - this = m.getAParameter().getType()) or - // Classes of a property or field on another request class - exists(ServiceStackRequestClass outer | - this = outer.getAProperty().getType() or - this = outer.getAField().getType()) - } - } - - class ServiceClassSources extends RemoteFlowSource { - ServiceClassSources() { - exists(Method m | - serviceStackRequests(m) and - // keep this for primitive typed request params (string/int) - this.asParameter() = m.getAParameter()) or - exists(ServiceStackRequestClass reqClass | - // look for field reads on request classes - reqClass.getAProperty().getAnAccess() = this.asExpr() or - reqClass.getAField().getAnAccess() = this.asExpr()) - } - - override string getSourceType() { - result = "ServiceStackSources" - } - } - - class SqlSinks extends Sink { - SqlSinks() { this.asExpr() instanceof SqlInjectionExpr } - } - - class SqlStringMethod extends Method { - SqlStringMethod() { - this.getName() in [ - "Custom", "CustomSelect", "CustomInsert", "CustomUpdate", - "SqlScalar", "SqlList", "SqlColumn", "ColumnDistinct", - "PreCreateTable", "PostCreateTable", "PreDropTable", "PostDropTable", - "ExecuteSql", "ExecuteSqlAsync", - "UnsafeSelect", "UnsafeFrom", "UnsafeWhere", "UnsafeAnd", "UnsafeOr" - ] - } - } - - class SqlInjectionExpr extends Expr { - SqlInjectionExpr() { - exists(MethodCall mc | - mc.getTarget() instanceof SqlStringMethod and mc.getArgument(1) = this - ) - } - } -} From 386eb2d56b4780e2ba573015ca3aa46ad3f83d43 Mon Sep 17 00:00:00 2001 From: John Lugton Date: Tue, 15 Dec 2020 11:06:21 -0800 Subject: [PATCH 006/741] move ServiceStack out of microsoft --- .../src/experimental/ServiceStack/SQL-Injection/SQLInjection.ql | 2 +- .../code/csharp/frameworks/{microsoft => }/ServiceStack.qll | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename csharp/ql/src/semmle/code/csharp/frameworks/{microsoft => }/ServiceStack.qll (100%) diff --git a/csharp/ql/src/experimental/ServiceStack/SQL-Injection/SQLInjection.ql b/csharp/ql/src/experimental/ServiceStack/SQL-Injection/SQLInjection.ql index a046c132249..2d78074db7a 100644 --- a/csharp/ql/src/experimental/ServiceStack/SQL-Injection/SQLInjection.ql +++ b/csharp/ql/src/experimental/ServiceStack/SQL-Injection/SQLInjection.ql @@ -6,7 +6,7 @@ */ import csharp -import semmle.code.csharp.frameworks.microsoft.ServiceStack::ServiceStackSQL +import semmle.code.csharp.frameworks.ServiceStack::ServiceStackSQL from TaintTrackingConfiguration c, DataFlow::PathNode source, DataFlow::PathNode sink where c.hasFlowPath(source, sink) diff --git a/csharp/ql/src/semmle/code/csharp/frameworks/microsoft/ServiceStack.qll b/csharp/ql/src/semmle/code/csharp/frameworks/ServiceStack.qll similarity index 100% rename from csharp/ql/src/semmle/code/csharp/frameworks/microsoft/ServiceStack.qll rename to csharp/ql/src/semmle/code/csharp/frameworks/ServiceStack.qll From d408ae7e10719d8e9cf9e31b152a4369ceb32c64 Mon Sep 17 00:00:00 2001 From: John Lugton Date: Tue, 15 Dec 2020 11:29:22 -0800 Subject: [PATCH 007/741] Split ServiceStack into modules and incorporate into main lib --- .../code/csharp/frameworks/ServiceStack.qll | 67 ++++++++++--------- .../src/semmle/code/csharp/frameworks/Sql.qll | 1 + .../code/csharp/security/dataflow/XSS.qll | 1 + .../security/dataflow/flowsources/Remote.qll | 1 + 4 files changed, 40 insertions(+), 30 deletions(-) diff --git a/csharp/ql/src/semmle/code/csharp/frameworks/ServiceStack.qll b/csharp/ql/src/semmle/code/csharp/frameworks/ServiceStack.qll index 13b43be07f8..f878366d4f0 100644 --- a/csharp/ql/src/semmle/code/csharp/frameworks/ServiceStack.qll +++ b/csharp/ql/src/semmle/code/csharp/frameworks/ServiceStack.qll @@ -1,35 +1,11 @@ -/** - * Provides a taint-tracking configuration for reasoning about untrusted user input when using Service Stack framework - */ import csharp -module ServiceStackSQL { - import semmle.code.csharp.security.dataflow.SqlInjection::SqlInjection - - string getSourceType(DataFlow::Node node) { - result = node.(RemoteFlowSource).getSourceType() - or - result = node.(LocalFlowSource).getSourceType() +/** Provides definitions related to the namespace `ServiceStack`. */ +module ServiceStack { + class ServiceClass extends Class { + ServiceClass() { this.getBaseClass+().getName()="Service" } } - - predicate serviceStackRequests(Method m) { - exists(ValueOrRefType type, ServiceStackClass ssc | - type.fromSource() and - m = type.getAMethod() and - m = ssc.getAMember().getDeclaringType().getAMethod() and - - // verify other verb methods in service stack docs - m.getName() = ["Post","Get", "Put", "Delete","Any", "Option", "Head"] - // not reccommended match approach below - //.toLowerCase().regexpMatch("(Post|Get|Put|Delete)") - - ) - } - - class ServiceStackClass extends Class { - ServiceStackClass() { this.getBaseClass+().getName()="Service" } - } - + class ServiceStackRequestClass extends Class { ServiceStackRequestClass() { // Classes directly used in as param to request method @@ -42,7 +18,27 @@ module ServiceStackSQL { this = outer.getAField().getType()) } } - + + predicate serviceStackRequests(Method m) { + exists(ValueOrRefType type, ServiceClass ssc | + type.fromSource() and + m = type.getAMethod() and + m = ssc.getAMember().getDeclaringType().getAMethod() and + + // verify other verb methods in service stack docs + m.getName() = ["Post","Get", "Put", "Delete","Any", "Option", "Head"] + // not reccommended match approach below + //.toLowerCase().regexpMatch("(Post|Get|Put|Delete)") + + ) + } +} + +/** Flow sources for the ServiceStack framework */ +module Sources { + private import ServiceStack::ServiceStack + private import semmle.code.csharp.security.dataflow.flowsources.Remote + class ServiceClassSources extends RemoteFlowSource { ServiceClassSources() { exists(Method m | @@ -59,6 +55,12 @@ module ServiceStackSQL { result = "ServiceStackSources" } } +} + +/** SQL sinks for the ServiceStack framework */ +module SQL { + private import ServiceStack::ServiceStack + private import semmle.code.csharp.security.dataflow.SqlInjection::SqlInjection class SqlSinks extends Sink { SqlSinks() { this.asExpr() instanceof SqlInjectionExpr } @@ -84,3 +86,8 @@ module ServiceStackSQL { } } } + +/** XSS sinks for the ServiceStack framework */ +module XSS { + // TODO +} diff --git a/csharp/ql/src/semmle/code/csharp/frameworks/Sql.qll b/csharp/ql/src/semmle/code/csharp/frameworks/Sql.qll index b2b1eeef809..647fdfe3a54 100644 --- a/csharp/ql/src/semmle/code/csharp/frameworks/Sql.qll +++ b/csharp/ql/src/semmle/code/csharp/frameworks/Sql.qll @@ -5,6 +5,7 @@ private import semmle.code.csharp.frameworks.system.Data private import semmle.code.csharp.frameworks.system.data.SqlClient private import semmle.code.csharp.frameworks.EntityFramework private import semmle.code.csharp.frameworks.NHibernate +private import semmle.code.csharp.frameworks.ServiceStack::SQL /** An expression containing a SQL command. */ abstract class SqlExpr extends Expr { diff --git a/csharp/ql/src/semmle/code/csharp/security/dataflow/XSS.qll b/csharp/ql/src/semmle/code/csharp/security/dataflow/XSS.qll index 763fb46a4f1..6d5d8a336c1 100644 --- a/csharp/ql/src/semmle/code/csharp/security/dataflow/XSS.qll +++ b/csharp/ql/src/semmle/code/csharp/security/dataflow/XSS.qll @@ -10,6 +10,7 @@ module XSS { import semmle.code.csharp.frameworks.system.Net import semmle.code.csharp.frameworks.system.Web import semmle.code.csharp.frameworks.system.web.UI + import semmle.code.csharp.frameworks.ServiceStack::XSS import semmle.code.csharp.security.Sanitizers import semmle.code.csharp.security.dataflow.flowsinks.Html import semmle.code.csharp.security.dataflow.flowsinks.Remote diff --git a/csharp/ql/src/semmle/code/csharp/security/dataflow/flowsources/Remote.qll b/csharp/ql/src/semmle/code/csharp/security/dataflow/flowsources/Remote.qll index f8240583108..8ec6eed5ad0 100644 --- a/csharp/ql/src/semmle/code/csharp/security/dataflow/flowsources/Remote.qll +++ b/csharp/ql/src/semmle/code/csharp/security/dataflow/flowsources/Remote.qll @@ -12,6 +12,7 @@ private import semmle.code.csharp.frameworks.system.web.ui.WebControls private import semmle.code.csharp.frameworks.WCF private import semmle.code.csharp.frameworks.microsoft.Owin private import semmle.code.csharp.frameworks.microsoft.AspNetCore +import semmle.code.csharp.frameworks.ServiceStack::Sources /** A data flow source of remote user input. */ abstract class RemoteFlowSource extends DataFlow::Node { From 71a08c3237df28fb4590919191fc6240bdf7ca19 Mon Sep 17 00:00:00 2001 From: Chelsea Boling Date: Tue, 15 Dec 2020 14:08:34 -0800 Subject: [PATCH 008/741] Update servicestack lib --- .../code/csharp/frameworks/ServiceStack.qll | 27 ++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/csharp/ql/src/semmle/code/csharp/frameworks/ServiceStack.qll b/csharp/ql/src/semmle/code/csharp/frameworks/ServiceStack.qll index f878366d4f0..cc9c7333c5d 100644 --- a/csharp/ql/src/semmle/code/csharp/frameworks/ServiceStack.qll +++ b/csharp/ql/src/semmle/code/csharp/frameworks/ServiceStack.qll @@ -89,5 +89,30 @@ module SQL { /** XSS sinks for the ServiceStack framework */ module XSS { - // TODO + private import ServiceStack::ServiceStack + private import semmle.code.csharp.security.dataflow.flowsources.Remote + + class XssSinks extends RemoteFlowSource { + XssSinks() { + exists( Method m | + (( + this.asParameter() = m.getAParameter() and + serviceStackRequests(m) + ) or + // if object is tainted then the rest follows as well + ( serviceStackRequests(m) and + m.getAParameter().getType().(RefType).getAProperty().getAnAccess() = this.asExpr() + )) + // along with finding the right methods, find ones that return strings/object which are strings + and ( + m.getReturnType() instanceof ObjectType or + m.getReturnType() instanceof StringType + ) + ) + } + + override string getSourceType() { + result = "XssSinks" + } + } } From 5c7dedffb339a08d54adfe8f9f08a9d3938c5d93 Mon Sep 17 00:00:00 2001 From: Chelsea Boling Date: Tue, 15 Dec 2020 23:09:40 -0800 Subject: [PATCH 009/741] Update sinks --- .../code/csharp/frameworks/ServiceStack.qll | 44 +++++++++---------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/csharp/ql/src/semmle/code/csharp/frameworks/ServiceStack.qll b/csharp/ql/src/semmle/code/csharp/frameworks/ServiceStack.qll index cc9c7333c5d..eb7300a6741 100644 --- a/csharp/ql/src/semmle/code/csharp/frameworks/ServiceStack.qll +++ b/csharp/ql/src/semmle/code/csharp/frameworks/ServiceStack.qll @@ -90,29 +90,29 @@ module SQL { /** XSS sinks for the ServiceStack framework */ module XSS { private import ServiceStack::ServiceStack - private import semmle.code.csharp.security.dataflow.flowsources.Remote + private import semmle.code.csharp.security.dataflow.XSS::XSS - class XssSinks extends RemoteFlowSource { - XssSinks() { - exists( Method m | - (( - this.asParameter() = m.getAParameter() and - serviceStackRequests(m) - ) or - // if object is tainted then the rest follows as well - ( serviceStackRequests(m) and - m.getAParameter().getType().(RefType).getAProperty().getAnAccess() = this.asExpr() - )) - // along with finding the right methods, find ones that return strings/object which are strings - and ( - m.getReturnType() instanceof ObjectType or - m.getReturnType() instanceof StringType - ) - ) - } - - override string getSourceType() { - result = "XssSinks" + class XssSinks extends Sink { + XssSinks() { this.asExpr() instanceof XssExpr } + } + + class XssExpr extends Expr { + XssExpr() { + exists(ReturnStmt r, Method m | + this = r.getExpr() and + ( + ( + r.getExpr() instanceof ObjectCreation + and r.getExpr().getType().hasName("HttpResult") + //TODO check if we have a valid content type + //TODO write another check for the decorated version + ) + or + ( + r.getExpr().getType().hasName("String") + ) + ) + ) } } } From 12e8107492530dd3829a64b728c43b514173ba92 Mon Sep 17 00:00:00 2001 From: Chelsea Boling Date: Tue, 15 Dec 2020 23:11:00 -0800 Subject: [PATCH 010/741] Add example --- .../src/experimental/ServiceStack/XSS/XSS.cs | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 csharp/ql/src/experimental/ServiceStack/XSS/XSS.cs diff --git a/csharp/ql/src/experimental/ServiceStack/XSS/XSS.cs b/csharp/ql/src/experimental/ServiceStack/XSS/XSS.cs new file mode 100644 index 00000000000..5bb53450a9e --- /dev/null +++ b/csharp/ql/src/experimental/ServiceStack/XSS/XSS.cs @@ -0,0 +1,37 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Web; +using ServiceStack; +using ServiceStack.Web; +using SqlServer.ServiceModel; + +namespace SqlServer.ServiceInterface +{ + public class MyServices : Service + { + // public object Any(Hello request) + // { + // return new HelloResponse { Result = "Hello, {0}!".Fmt(request.Name) }; + // } + + //5. Using a Request or Response Filter + [AddHeader(ContentType = "text/plain")] + [AddHeader(ContentDisposition = "attachment; filename=hello.txt")] + public string Get(Hello request) + { + return $"Hello, {request.Name}!"; + } + + //6. Returning responses in a decorated HttpResult + public object Any(Hello request) + { + return new HttpResult($"Hello, {request.Name}!") { + ContentType = MimeTypes.PlainText, + Headers = { + [HttpHeaders.ContentDisposition] = "attachment; filename=\"hello.txt\"" + } + }; + } + } +} \ No newline at end of file From 3c493511e988d97b0872cc9ad8a05f8be62cd42d Mon Sep 17 00:00:00 2001 From: Chelsea Boling Date: Tue, 15 Dec 2020 23:13:46 -0800 Subject: [PATCH 011/741] Update file --- csharp/ql/src/semmle/code/csharp/frameworks/ServiceStack.qll | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/csharp/ql/src/semmle/code/csharp/frameworks/ServiceStack.qll b/csharp/ql/src/semmle/code/csharp/frameworks/ServiceStack.qll index eb7300a6741..99812dc9942 100644 --- a/csharp/ql/src/semmle/code/csharp/frameworks/ServiceStack.qll +++ b/csharp/ql/src/semmle/code/csharp/frameworks/ServiceStack.qll @@ -104,8 +104,7 @@ module XSS { ( r.getExpr() instanceof ObjectCreation and r.getExpr().getType().hasName("HttpResult") - //TODO check if we have a valid content type - //TODO write another check for the decorated version + //TODO write a content type check for this decorated version ) or ( From ba46eaa1438a2717a7d66fb7f919118da1fd9faf Mon Sep 17 00:00:00 2001 From: Chelsea Boling Date: Wed, 16 Dec 2020 10:50:14 -0800 Subject: [PATCH 012/741] Refactor sink --- .../semmle/code/csharp/frameworks/ServiceStack.qll | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/csharp/ql/src/semmle/code/csharp/frameworks/ServiceStack.qll b/csharp/ql/src/semmle/code/csharp/frameworks/ServiceStack.qll index 99812dc9942..0c80bf197ed 100644 --- a/csharp/ql/src/semmle/code/csharp/frameworks/ServiceStack.qll +++ b/csharp/ql/src/semmle/code/csharp/frameworks/ServiceStack.qll @@ -98,18 +98,17 @@ module XSS { class XssExpr extends Expr { XssExpr() { - exists(ReturnStmt r, Method m | - this = r.getExpr() and + exists(ReturnStmt r | + this = r.getExpr() and ( ( - r.getExpr() instanceof ObjectCreation - and r.getExpr().getType().hasName("HttpResult") + r.getExpr().(ObjectCreation).getType().hasName("HttpResult") //TODO write a content type check for this decorated version ) or ( - r.getExpr().getType().hasName("String") - ) + r.getExpr().getType() instanceof StringType + ) ) ) } From 4e0f3a30eef3cde996cf6672200d3cbace8d8375 Mon Sep 17 00:00:00 2001 From: Chelsea Boling Date: Wed, 16 Dec 2020 14:10:08 -0800 Subject: [PATCH 013/741] Update sink based on feedback --- .../code/csharp/frameworks/ServiceStack.qll | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/csharp/ql/src/semmle/code/csharp/frameworks/ServiceStack.qll b/csharp/ql/src/semmle/code/csharp/frameworks/ServiceStack.qll index 0c80bf197ed..f72ddd0fd42 100644 --- a/csharp/ql/src/semmle/code/csharp/frameworks/ServiceStack.qll +++ b/csharp/ql/src/semmle/code/csharp/frameworks/ServiceStack.qll @@ -98,18 +98,19 @@ module XSS { class XssExpr extends Expr { XssExpr() { - exists(ReturnStmt r | - this = r.getExpr() and + exists(ReturnStmt r, Expr arg | ( - ( - r.getExpr().(ObjectCreation).getType().hasName("HttpResult") - //TODO write a content type check for this decorated version - ) - or - ( - r.getExpr().getType() instanceof StringType - ) + r.getExpr().(ObjectCreation).getType().hasName("HttpResult") and + r.getExpr().(ObjectCreation).getAnArgument().getType() instanceof StringType and + arg = r.getExpr().(ObjectCreation).getAnArgument() ) + or + ( + r.getExpr().getType() instanceof StringType and + arg = r.getExpr() + ) + | + this = arg ) } } From 0a7e4b6840289c09cf55a5360d1d05b93abd2626 Mon Sep 17 00:00:00 2001 From: Chelsea Boling Date: Wed, 16 Dec 2020 17:04:08 -0800 Subject: [PATCH 014/741] Update sink based on feedback --- .../semmle/code/csharp/frameworks/ServiceStack.qll | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/csharp/ql/src/semmle/code/csharp/frameworks/ServiceStack.qll b/csharp/ql/src/semmle/code/csharp/frameworks/ServiceStack.qll index f72ddd0fd42..938ffd2ed46 100644 --- a/csharp/ql/src/semmle/code/csharp/frameworks/ServiceStack.qll +++ b/csharp/ql/src/semmle/code/csharp/frameworks/ServiceStack.qll @@ -99,18 +99,18 @@ module XSS { class XssExpr extends Expr { XssExpr() { exists(ReturnStmt r, Expr arg | - ( - r.getExpr().(ObjectCreation).getType().hasName("HttpResult") and - r.getExpr().(ObjectCreation).getAnArgument().getType() instanceof StringType and - arg = r.getExpr().(ObjectCreation).getAnArgument() - ) - or ( r.getExpr().getType() instanceof StringType and arg = r.getExpr() ) | this = arg + ) or + exists(ObjectCreation oc | + oc.getType().hasName("HttpResult") and + oc.getAnArgument().getType() instanceof StringType + | + this = oc.getAnArgument() ) } } From d4acccb13c9c55e525112c8f2fac82bdbfc2e8bd Mon Sep 17 00:00:00 2001 From: Chelsea Boling Date: Wed, 16 Dec 2020 20:33:09 -0800 Subject: [PATCH 015/741] Update sink --- .../src/semmle/code/csharp/frameworks/ServiceStack.qll | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/csharp/ql/src/semmle/code/csharp/frameworks/ServiceStack.qll b/csharp/ql/src/semmle/code/csharp/frameworks/ServiceStack.qll index 938ffd2ed46..2b4b8e89a7e 100644 --- a/csharp/ql/src/semmle/code/csharp/frameworks/ServiceStack.qll +++ b/csharp/ql/src/semmle/code/csharp/frameworks/ServiceStack.qll @@ -98,19 +98,18 @@ module XSS { class XssExpr extends Expr { XssExpr() { - exists(ReturnStmt r, Expr arg | + exists(ReturnStmt r | ( - r.getExpr().getType() instanceof StringType and - arg = r.getExpr() + r.getExpr().getType() instanceof StringType ) | - this = arg + this = r.getExpr() ) or exists(ObjectCreation oc | oc.getType().hasName("HttpResult") and oc.getAnArgument().getType() instanceof StringType | - this = oc.getAnArgument() + this = oc.getArgument(0) ) } } From 7d47bffd53a4a168f1b4e48ccafb434079ca3aef Mon Sep 17 00:00:00 2001 From: John Lugton Date: Tue, 15 Dec 2020 17:04:09 -0800 Subject: [PATCH 016/741] Tidy up ServiceStack.qll Use fully qualified names for classes Make util predicate private Make naming more consistent with rest of ql libs --- .../code/csharp/frameworks/ServiceStack.qll | 143 +++++++++++------- 1 file changed, 86 insertions(+), 57 deletions(-) diff --git a/csharp/ql/src/semmle/code/csharp/frameworks/ServiceStack.qll b/csharp/ql/src/semmle/code/csharp/frameworks/ServiceStack.qll index 2b4b8e89a7e..610c97ce59e 100644 --- a/csharp/ql/src/semmle/code/csharp/frameworks/ServiceStack.qll +++ b/csharp/ql/src/semmle/code/csharp/frameworks/ServiceStack.qll @@ -2,35 +2,33 @@ import csharp /** Provides definitions related to the namespace `ServiceStack`. */ module ServiceStack { + + /** A class representing a Service */ class ServiceClass extends Class { - ServiceClass() { this.getBaseClass+().getName()="Service" } - } - - class ServiceStackRequestClass extends Class { - ServiceStackRequestClass() { - // Classes directly used in as param to request method - exists(Method m | - serviceStackRequests(m) and - this = m.getAParameter().getType()) or - // Classes of a property or field on another request class - exists(ServiceStackRequestClass outer | - this = outer.getAProperty().getType() or - this = outer.getAField().getType()) + ServiceClass() { this.getBaseClass+().getQualifiedName()="ServiceStack.Service" } + + /** Get a method that handles incoming requests */ + Method getARequestMethod() { + result = this.getAMethod(["Post", "Get", "Put", "Delete", "Any", "Option", "Head"]) } } - - predicate serviceStackRequests(Method m) { - exists(ValueOrRefType type, ServiceClass ssc | - type.fromSource() and - m = type.getAMethod() and - m = ssc.getAMember().getDeclaringType().getAMethod() and - - // verify other verb methods in service stack docs - m.getName() = ["Post","Get", "Put", "Delete","Any", "Option", "Head"] - // not reccommended match approach below - //.toLowerCase().regexpMatch("(Post|Get|Put|Delete)") - - ) + + /** Top-level Request DTO types */ + class RequestDTO extends Class { + RequestDTO() { + this.getABaseInterface().getQualifiedName() = ["ServiceStack.IReturn", "ServieStack.IReturnVoid"] + } + } + + /** Top-level Response DTO types */ + class ResponseDTO extends Class { + ResponseDTO() { + exists(RequestDTO req, ConstructedGeneric respInterface | + req.getABaseInterface() = respInterface and + respInterface.getUndecoratedName() = "IReturn" and + respInterface.getATypeArgument() = this + ) + } } } @@ -38,21 +36,36 @@ module ServiceStack { module Sources { private import ServiceStack::ServiceStack private import semmle.code.csharp.security.dataflow.flowsources.Remote + private import semmle.code.csharp.commons.Collections - class ServiceClassSources extends RemoteFlowSource { - ServiceClassSources() { - exists(Method m | - serviceStackRequests(m) and - // keep this for primitive typed request params (string/int) - this.asParameter() = m.getAParameter()) or - exists(ServiceStackRequestClass reqClass | - // look for field reads on request classes - reqClass.getAProperty().getAnAccess() = this.asExpr() or - reqClass.getAField().getAnAccess() = this.asExpr()) + /** Types involved in a RequestDTO. Recurse through props and collection types */ + private predicate involvedInRequest(RefType c) { + c instanceof RequestDTO or + exists(RefType parent, RefType propType | involvedInRequest(parent) | + (propType = parent.getAProperty().getType() or propType = parent.getAField().getType()) and + if propType instanceof CollectionType then ( + c = propType.(ConstructedGeneric).getATypeArgument() or + c = propType.(ArrayType).getElementType() + ) else ( + c = propType + ) + ) + } + + class ServiceStackSource extends RemoteFlowSource { + ServiceStackSource() { + // Parameters are sources. In practice only interesting when they are string/primitive typed. + exists(ServiceClass service | + service.getARequestMethod().getAParameter() = this.asParameter()) or + // Field/property accesses on RequestDTOs and request involved types + // involved types aren't necessarily only from requests so may lead to FPs... + exists(RefType reqType | involvedInRequest(reqType) | + reqType.getAProperty().getAnAccess() = this.asExpr() or + reqType.getAField().getAnAccess() = this.asExpr()) } override string getSourceType() { - result = "ServiceStackSources" + result = "ServiceStack request DTO field" } } } @@ -62,28 +75,44 @@ module SQL { private import ServiceStack::ServiceStack private import semmle.code.csharp.security.dataflow.SqlInjection::SqlInjection - class SqlSinks extends Sink { - SqlSinks() { this.asExpr() instanceof SqlInjectionExpr } - } - - class SqlStringMethod extends Method { - SqlStringMethod() { - this.getName() in [ - "Custom", "CustomSelect", "CustomInsert", "CustomUpdate", - "SqlScalar", "SqlList", "SqlColumn", "ColumnDistinct", - "PreCreateTable", "PostCreateTable", "PreDropTable", "PostDropTable", - "ExecuteSql", "ExecuteSqlAsync", - "UnsafeSelect", "UnsafeFrom", "UnsafeWhere", "UnsafeAnd", "UnsafeOr" - ] + class ServiceStackSink extends Sink { + ServiceStackSink() { + exists(MethodCall mc, Method m, int p | + (mc.getTarget() = m.getAnOverrider*() or mc.getTarget() = m.getAnImplementor*()) and + sqlSinkParam(m, p) and + mc.getArgument(p) = this.asExpr()) } } - - class SqlInjectionExpr extends Expr { - SqlInjectionExpr() { - exists(MethodCall mc | - mc.getTarget() instanceof SqlStringMethod and mc.getArgument(1) = this - ) - } + + private predicate sqlSinkParam(Method m, int p) { + exists(RefType cls | cls = m.getDeclaringType() | + ( + // if using the typed query builder api, only need to worry about Unsafe variants + cls.getQualifiedName() = ["ServiceStack.OrmLite.SqlExpression", "ServiceStack.OrmLite.IUntypedSqlExpression"] and + m.getName().matches("Unsafe%") and + p = 0 + ) or ( + // Read api - all string typed 1st params are potential sql sinks. They should be templates, not directly user controlled. + cls.getQualifiedName() = ["ServiceStack.OrmLite.OrmLiteReadApi", "ServiceStack.OrmLite.OrmLiteReadExpressionsApi", "ServiceStack.OrmLite.OrmLiteReadApiAsync", "ServiceStack.OrmLite.OrmLiteReadExpressionsApiAsync"] and + m.getParameter(p).getType() instanceof StringType and + p = 1 + ) or ( + // Write API - only 2 methods that take string + cls.getQualifiedName() = ["ServiceStack.OrmLite.OrmLiteWriteApi", "ServiceStack.OrmLite.OrmLiteWriteApiAsync"] and + m.getName() = ["ExecuteSql", "ExecuteSqlAsync"] and + p = 1 + ) or ( + // NoSQL sinks in redis client. TODO should these be separate query? + cls.getQualifiedName() = "ServiceStack.Redis.IRedisClient" and + (m.getName() = ["Custom", "LoadLuaScript"] or (m.getName().matches("%Lua%") and not m.getName().matches("%Sha%"))) and + p = 0 + ) + // TODO + // ServiceStack.OrmLite.OrmLiteUtils.SqlColumn - what about other similar classes? + // couldn't find CustomSelect + // need to handle "PreCreateTable", "PostCreateTable", "PreDropTable", "PostDropTable" + + ) } } From 6d5f9035e6c14d8177fc2732e9a49129b7853f1b Mon Sep 17 00:00:00 2001 From: John Lugton Date: Thu, 17 Dec 2020 09:00:23 -0800 Subject: [PATCH 017/741] Minor fixes to XSS: Only want returns in request methods Also care about non-string 1st args to HttpResult e.g. streams --- .../semmle/code/csharp/frameworks/ServiceStack.qll | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/csharp/ql/src/semmle/code/csharp/frameworks/ServiceStack.qll b/csharp/ql/src/semmle/code/csharp/frameworks/ServiceStack.qll index 610c97ce59e..91169fd318e 100644 --- a/csharp/ql/src/semmle/code/csharp/frameworks/ServiceStack.qll +++ b/csharp/ql/src/semmle/code/csharp/frameworks/ServiceStack.qll @@ -127,17 +127,12 @@ module XSS { class XssExpr extends Expr { XssExpr() { - exists(ReturnStmt r | - ( - r.getExpr().getType() instanceof StringType - ) - | - this = r.getExpr() + exists(ServiceClass service, ReturnStmt r | + this = r.getExpr() and + r.getEnclosingCallable() = service.getARequestMethod() ) or exists(ObjectCreation oc | - oc.getType().hasName("HttpResult") and - oc.getAnArgument().getType() instanceof StringType - | + oc.getType().hasQualifiedName("ServiceStack.HttpResult") and this = oc.getArgument(0) ) } From 3f1f83f66765f93805c4e3ec63c005d9197019e8 Mon Sep 17 00:00:00 2001 From: John Lugton Date: Thu, 17 Dec 2020 16:24:52 -0800 Subject: [PATCH 018/741] remove experimental --- .../SQL-Injection/SQLInjection.cs | 61 ------------------- .../SQL-Injection/SQLInjection.qhelp | 35 ----------- .../SQL-Injection/SQLInjection.ql | 15 ----- .../src/experimental/ServiceStack/XSS/XSS.cs | 37 ----------- 4 files changed, 148 deletions(-) delete mode 100644 csharp/ql/src/experimental/ServiceStack/SQL-Injection/SQLInjection.cs delete mode 100644 csharp/ql/src/experimental/ServiceStack/SQL-Injection/SQLInjection.qhelp delete mode 100644 csharp/ql/src/experimental/ServiceStack/SQL-Injection/SQLInjection.ql delete mode 100644 csharp/ql/src/experimental/ServiceStack/XSS/XSS.cs diff --git a/csharp/ql/src/experimental/ServiceStack/SQL-Injection/SQLInjection.cs b/csharp/ql/src/experimental/ServiceStack/SQL-Injection/SQLInjection.cs deleted file mode 100644 index e41cdb0ff7f..00000000000 --- a/csharp/ql/src/experimental/ServiceStack/SQL-Injection/SQLInjection.cs +++ /dev/null @@ -1,61 +0,0 @@ -using ServiceStack; -using ServiceStack.OrmLite; -using SqlServer.ServiceModel; -using SqlServer.ServiceModel.Types; - -namespace SqlServer.ServiceInterface -{ - public class CustomerService : Service - { - public GetCustomersResponse Get(GetCustomers request) - { - return new GetCustomersResponse { Results = Db.Select() }; - } - - public GetCustomerResponse Get(GetCustomer request) - { - //var customer = Db.SingleById(request.Id); - var customer = Db.SqlScalar("SELECT Id FROM Customer WHERE Id = " + request.Id + ";"); - if (customer == null) - throw HttpError.NotFound("Customer not found"); - - return new GetCustomerResponse - { - Result = Db.SingleById(request.Id) - }; - } - - public CreateCustomerResponse Post(CreateCustomer request) - { - var customer = new Customer { Name = request.Name }; - //Db.Save(customer); - Db.ExecuteSql("INSERT INTO Customer (Name) VALUES ('" + customer.Name + "')"); - return new CreateCustomerResponse - { - Result = customer - }; - } - - public UpdateCustomerResponse Put(UpdateCustomer request) - { - var customer = Db.SingleById(request.Id); - if (customer == null) - throw HttpError.NotFound("Customer '{0}' does not exist".Fmt(request.Id)); - - customer.Name = request.Name; - //Db.Update(customer); - Db.ExecuteSqlAsync("UPDATE Customer SET Name = '" + customer.Name + "' WHERE Id = " + request.Id); - return new UpdateCustomerResponse - { - Result = customer - }; - } - - public void Delete(DeleteCustomer request) - { - //Db.DeleteById(request.Id); - string q = @"DELETE FROM Customer WHERE Id = " + request.Id; - Db.ExecuteSql(q); - } - } -} diff --git a/csharp/ql/src/experimental/ServiceStack/SQL-Injection/SQLInjection.qhelp b/csharp/ql/src/experimental/ServiceStack/SQL-Injection/SQLInjection.qhelp deleted file mode 100644 index 3b51f6a6d34..00000000000 --- a/csharp/ql/src/experimental/ServiceStack/SQL-Injection/SQLInjection.qhelp +++ /dev/null @@ -1,35 +0,0 @@ - - - -

    -If unsanitized user input is..... -

    - -
    - - -

    -You can do better.... -

    -

    -If using some method, you should always pass... -

    -
      -
    • Something must be set to this thing
    • -
    - -
    - - -

    -In the following example.... -

    - -
    - - -
  • Services Stack: Documentation.
  • -
    -
    diff --git a/csharp/ql/src/experimental/ServiceStack/SQL-Injection/SQLInjection.ql b/csharp/ql/src/experimental/ServiceStack/SQL-Injection/SQLInjection.ql deleted file mode 100644 index 2d78074db7a..00000000000 --- a/csharp/ql/src/experimental/ServiceStack/SQL-Injection/SQLInjection.ql +++ /dev/null @@ -1,15 +0,0 @@ -/** - * @id test-id - * @name Test - * @description Test description - * @tags test - */ - -import csharp -import semmle.code.csharp.frameworks.ServiceStack::ServiceStackSQL - -from TaintTrackingConfiguration c, DataFlow::PathNode source, DataFlow::PathNode sink -where c.hasFlowPath(source, sink) -select sink.getNode(), source, sink, "Query might include code from $@.", source, - ("this " + getSourceType(source.getNode())) - diff --git a/csharp/ql/src/experimental/ServiceStack/XSS/XSS.cs b/csharp/ql/src/experimental/ServiceStack/XSS/XSS.cs deleted file mode 100644 index 5bb53450a9e..00000000000 --- a/csharp/ql/src/experimental/ServiceStack/XSS/XSS.cs +++ /dev/null @@ -1,37 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Web; -using ServiceStack; -using ServiceStack.Web; -using SqlServer.ServiceModel; - -namespace SqlServer.ServiceInterface -{ - public class MyServices : Service - { - // public object Any(Hello request) - // { - // return new HelloResponse { Result = "Hello, {0}!".Fmt(request.Name) }; - // } - - //5. Using a Request or Response Filter - [AddHeader(ContentType = "text/plain")] - [AddHeader(ContentDisposition = "attachment; filename=hello.txt")] - public string Get(Hello request) - { - return $"Hello, {request.Name}!"; - } - - //6. Returning responses in a decorated HttpResult - public object Any(Hello request) - { - return new HttpResult($"Hello, {request.Name}!") { - ContentType = MimeTypes.PlainText, - Headers = { - [HttpHeaders.ContentDisposition] = "attachment; filename=\"hello.txt\"" - } - }; - } - } -} \ No newline at end of file From 563dc62c33c9ef9e412c9202b2a1654bf7353c25 Mon Sep 17 00:00:00 2001 From: John Lugton Date: Fri, 18 Dec 2020 08:23:27 -0800 Subject: [PATCH 019/741] Improve qldoc for ServiceStack.qll --- .../code/csharp/frameworks/ServiceStack.qll | 32 +++++++++++++------ 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/csharp/ql/src/semmle/code/csharp/frameworks/ServiceStack.qll b/csharp/ql/src/semmle/code/csharp/frameworks/ServiceStack.qll index 91169fd318e..fd3c7217b43 100644 --- a/csharp/ql/src/semmle/code/csharp/frameworks/ServiceStack.qll +++ b/csharp/ql/src/semmle/code/csharp/frameworks/ServiceStack.qll @@ -1,3 +1,10 @@ +/** + * General modelling of ServiceStack framework including separate modules for: + * - flow sources + * - SQLi sinks + * - XSS sinks + */ + import csharp /** Provides definitions related to the namespace `ServiceStack`. */ @@ -52,6 +59,13 @@ module Sources { ) } + /** + * Remote flow sources for ServiceStack + * + * Assumes all nested fields/properties on request DTOs are tainted, which is + * an overapproximation and may lead to FPs depending on how Service Stack app + * is configured. + */ class ServiceStackSource extends RemoteFlowSource { ServiceStackSource() { // Parameters are sources. In practice only interesting when they are string/primitive typed. @@ -70,11 +84,12 @@ module Sources { } } -/** SQL sinks for the ServiceStack framework */ +/** SQLi support for the ServiceStack framework */ module SQL { private import ServiceStack::ServiceStack private import semmle.code.csharp.security.dataflow.SqlInjection::SqlInjection + /** SQLi sinks for ServiceStack */ class ServiceStackSink extends Sink { ServiceStackSink() { exists(MethodCall mc, Method m, int p | @@ -116,24 +131,21 @@ module SQL { } } -/** XSS sinks for the ServiceStack framework */ +/** XSS support for ServiceStack framework */ module XSS { private import ServiceStack::ServiceStack private import semmle.code.csharp.security.dataflow.XSS::XSS - class XssSinks extends Sink { - XssSinks() { this.asExpr() instanceof XssExpr } - } - - class XssExpr extends Expr { - XssExpr() { + /** XSS sinks for ServiceStack */ + class XssSink extends Sink { + XssSink() { exists(ServiceClass service, ReturnStmt r | - this = r.getExpr() and + this.asExpr() = r.getExpr() and r.getEnclosingCallable() = service.getARequestMethod() ) or exists(ObjectCreation oc | oc.getType().hasQualifiedName("ServiceStack.HttpResult") and - this = oc.getArgument(0) + this.asExpr() = oc.getArgument(0) ) } } From 059d6b0e0fd523c79c9d89a481c7e89262678a5f Mon Sep 17 00:00:00 2001 From: John Lugton Date: Fri, 18 Dec 2020 08:34:06 -0800 Subject: [PATCH 020/741] Fix warning in ServiceStack.qll --- .../code/csharp/frameworks/ServiceStack.qll | 47 ++++++++----------- 1 file changed, 20 insertions(+), 27 deletions(-) diff --git a/csharp/ql/src/semmle/code/csharp/frameworks/ServiceStack.qll b/csharp/ql/src/semmle/code/csharp/frameworks/ServiceStack.qll index fd3c7217b43..07a771f7183 100644 --- a/csharp/ql/src/semmle/code/csharp/frameworks/ServiceStack.qll +++ b/csharp/ql/src/semmle/code/csharp/frameworks/ServiceStack.qll @@ -7,41 +7,36 @@ import csharp -/** Provides definitions related to the namespace `ServiceStack`. */ -module ServiceStack { +/** A class representing a Service */ +class ServiceClass extends Class { + ServiceClass() { this.getBaseClass+().getQualifiedName()="ServiceStack.Service" } - /** A class representing a Service */ - class ServiceClass extends Class { - ServiceClass() { this.getBaseClass+().getQualifiedName()="ServiceStack.Service" } - - /** Get a method that handles incoming requests */ - Method getARequestMethod() { - result = this.getAMethod(["Post", "Get", "Put", "Delete", "Any", "Option", "Head"]) - } + /** Get a method that handles incoming requests */ + Method getARequestMethod() { + result = this.getAMethod(["Post", "Get", "Put", "Delete", "Any", "Option", "Head"]) } +} - /** Top-level Request DTO types */ - class RequestDTO extends Class { - RequestDTO() { - this.getABaseInterface().getQualifiedName() = ["ServiceStack.IReturn", "ServieStack.IReturnVoid"] - } +/** Top-level Request DTO types */ +class RequestDTO extends Class { + RequestDTO() { + this.getABaseInterface().getQualifiedName() = ["ServiceStack.IReturn", "ServieStack.IReturnVoid"] } +} - /** Top-level Response DTO types */ - class ResponseDTO extends Class { - ResponseDTO() { - exists(RequestDTO req, ConstructedGeneric respInterface | - req.getABaseInterface() = respInterface and - respInterface.getUndecoratedName() = "IReturn" and - respInterface.getATypeArgument() = this - ) - } +/** Top-level Response DTO types */ +class ResponseDTO extends Class { + ResponseDTO() { + exists(RequestDTO req, ConstructedGeneric respInterface | + req.getABaseInterface() = respInterface and + respInterface.getUndecoratedName() = "IReturn" and + respInterface.getATypeArgument() = this + ) } } /** Flow sources for the ServiceStack framework */ module Sources { - private import ServiceStack::ServiceStack private import semmle.code.csharp.security.dataflow.flowsources.Remote private import semmle.code.csharp.commons.Collections @@ -86,7 +81,6 @@ module Sources { /** SQLi support for the ServiceStack framework */ module SQL { - private import ServiceStack::ServiceStack private import semmle.code.csharp.security.dataflow.SqlInjection::SqlInjection /** SQLi sinks for ServiceStack */ @@ -133,7 +127,6 @@ module SQL { /** XSS support for ServiceStack framework */ module XSS { - private import ServiceStack::ServiceStack private import semmle.code.csharp.security.dataflow.XSS::XSS /** XSS sinks for ServiceStack */ From 7de9214c992f068ccfcdc25bceac48896c14862e Mon Sep 17 00:00:00 2001 From: jorgectf Date: Thu, 18 Mar 2021 17:41:34 +0100 Subject: [PATCH 021/741] Upload LDAP Insecure authentication query and tests --- .../src/Security/CWE-090/LDAPInsecureAuth.ql | 191 ++++++++++++++++++ .../src/Security/CWE-090/tests/2_private.py | 66 ++++++ .../ql/src/Security/CWE-090/tests/2_remote.py | 66 ++++++ .../src/Security/CWE-090/tests/3_private.py | 105 ++++++++++ .../ql/src/Security/CWE-090/tests/3_remote.py | 146 +++++++++++++ 5 files changed, 574 insertions(+) create mode 100644 python/ql/src/Security/CWE-090/LDAPInsecureAuth.ql create mode 100644 python/ql/src/Security/CWE-090/tests/2_private.py create mode 100644 python/ql/src/Security/CWE-090/tests/2_remote.py create mode 100644 python/ql/src/Security/CWE-090/tests/3_private.py create mode 100644 python/ql/src/Security/CWE-090/tests/3_remote.py diff --git a/python/ql/src/Security/CWE-090/LDAPInsecureAuth.ql b/python/ql/src/Security/CWE-090/LDAPInsecureAuth.ql new file mode 100644 index 00000000000..b156cc2b036 --- /dev/null +++ b/python/ql/src/Security/CWE-090/LDAPInsecureAuth.ql @@ -0,0 +1,191 @@ +/** + * @name Python Insecure LDAP Authentication + * @description Python LDAP Insecure LDAP Authentication + * @kind path-problem + * @problem.severity error + * @id python/insecure-ldap-auth + * @tags experimental + * security + * external/cwe/cwe-090 + */ + +import python +import semmle.python.dataflow.new.RemoteFlowSources +import semmle.python.dataflow.new.DataFlow +import semmle.python.dataflow.new.TaintTracking +import semmle.python.dataflow.new.internal.TaintTrackingPublic +import DataFlow::PathGraph + +class FalseArg extends ControlFlowNode { + FalseArg() { this.getNode().(Expr).(BooleanLiteral) instanceof False } +} + +// From luchua-bc's Insecure LDAP authentication in Java (to reduce false positives) +string getFullHostRegex() { result = "(?i)ldap://[\\[a-zA-Z0-9].*" } + +string getSchemaRegex() { result = "(?i)ldap(://)?" } + +string getPrivateHostRegex() { + result = + "(?i)localhost(?:[:/?#].*)?|127\\.0\\.0\\.1(?:[:/?#].*)?|10(?:\\.[0-9]+){3}(?:[:/?#].*)?|172\\.16(?:\\.[0-9]+){2}(?:[:/?#].*)?|192.168(?:\\.[0-9]+){2}(?:[:/?#].*)?|\\[?0:0:0:0:0:0:0:1\\]?(?:[:/?#].*)?|\\[?::1\\]?(?:[:/?#].*)?" +} + +// "ldap://somethingon.theinternet.com" +class LDAPFullHost extends StrConst { + LDAPFullHost() { + exists(string s | + s = this.getText() and + s.regexpMatch(getFullHostRegex()) and + not s.substring(7, s.length()).regexpMatch(getPrivateHostRegex()) // No need to check for ldaps, would be SSL by default. + ) + } +} + +class LDAPSchema extends StrConst { + LDAPSchema() { this.getText().regexpMatch(getSchemaRegex()) } +} + +class LDAPPrivateHost extends StrConst { + LDAPPrivateHost() { this.getText().regexpMatch(getPrivateHostRegex()) } +} + +predicate concatAndCompareAgainstFullHostRegex(Expr schema, Expr host) { + schema instanceof LDAPSchema and + not host instanceof LDAPPrivateHost and + exists(string full_host | + full_host = schema.(StrConst).getText() + host.(StrConst).getText() and + full_host.regexpMatch(getFullHostRegex()) + ) +} + +// "ldap://" + "somethingon.theinternet.com" +class LDAPBothStrings extends BinaryExpr { + LDAPBothStrings() { concatAndCompareAgainstFullHostRegex(this.getLeft(), this.getRight()) } +} + +// schema + host +class LDAPBothVar extends BinaryExpr { + LDAPBothVar() { + exists(SsaVariable schemaVar, SsaVariable hostVar | + this.getLeft() = schemaVar.getVariable().getALoad() and // getAUse is incompatible with Expr + this.getRight() = hostVar.getVariable().getALoad() and + concatAndCompareAgainstFullHostRegex(schemaVar + .getDefinition() + .getImmediateDominator() + .getNode(), hostVar.getDefinition().getImmediateDominator().getNode()) + ) + } +} + +// schema + "somethingon.theinternet.com" +class LDAPVarString extends BinaryExpr { + LDAPVarString() { + exists(SsaVariable schemaVar | + this.getLeft() = schemaVar.getVariable().getALoad() and + concatAndCompareAgainstFullHostRegex(schemaVar + .getDefinition() + .getImmediateDominator() + .getNode(), this.getRight()) + ) + } +} + +// "ldap://" + host +class LDAPStringVar extends BinaryExpr { + LDAPStringVar() { + exists(SsaVariable hostVar | + this.getRight() = hostVar.getVariable().getALoad() and + concatAndCompareAgainstFullHostRegex(this.getLeft(), + hostVar.getDefinition().getImmediateDominator().getNode()) + ) + } +} + +class LDAPInsecureAuthSource extends DataFlow::Node { + LDAPInsecureAuthSource() { + this instanceof RemoteFlowSource or + this.asExpr() instanceof LDAPBothStrings or + this.asExpr() instanceof LDAPBothVar or + this.asExpr() instanceof LDAPVarString or + this.asExpr() instanceof LDAPStringVar + } +} + +class SafeLDAPOptions extends ControlFlowNode { + SafeLDAPOptions() { + this = Value::named("ldap.OPT_X_TLS_ALLOW").getAReference() or + this = Value::named("ldap.OPT_X_TLS_TRY").getAReference() or + this = Value::named("ldap.OPT_X_TLS_DEMAND").getAReference() or + this = Value::named("ldap.OPT_X_TLS_HARD").getAReference() + } +} + +// LDAP3 +class LDAPInsecureAuthSink extends DataFlow::Node { + LDAPInsecureAuthSink() { + exists(SsaVariable connVar, CallNode connCall, SsaVariable srvVar, CallNode srvCall | + // set connCall as a Call to ldap3.Connection + connCall = Value::named("ldap3.Connection").getACall() and + // get variable whose definition is a call to ldap3.Connection to correlate ldap3.Server and Connection.start_tls() + connVar.getDefinition().getImmediateDominator() = connCall and + // get connCall's first argument variable definition + srvVar.getAUse() = connCall.getArg(0) and + /* + * // restrict srvVar definition to a ldap3.Server Call + * srvCall = Value::named("ldap3.Server").getACall() and + * srvVar.getDefinition().getImmediateDominator() = srvCall + * // redundant? ldap3.Connection's first argument *must* be ldap3.Server + */ + + // set srvCall as srvVar definition's call + srvVar.getDefinition().getImmediateDominator() = srvCall and + // set ldap3.Server's 1st argument as sink + this.asExpr() = srvCall.getArg(0).getNode() and + ( + // check ldap3.Server call's 3rd argument (positional) is null and there's no use_ssl + count(srvCall.getAnArg()) < 3 and + count(srvCall.getArgByName("use_ssl")) = 0 + or + // check ldap3.Server call's 3rd argument is False + srvCall.getAnArg() instanceof FalseArg + or + // check ldap3.Server argByName "use_ssl" is False + srvCall.getArgByName("use_ssl") instanceof FalseArg + ) and + /* + * Avoid flow through any function (Server()) whose variable declaring it (srv) is the first + * argument in any function (Connection()) whose variable declaring it also calls .start_tls + */ + + /* + * host = schema + "somethingon.theinternet.com" + * srv = Server(host, port = 1337) + * conn = Connection(srv, "dn", "password") + * conn.start_tls() ! + */ + + not connVar + .getAUse() + .getImmediateDominator() + .(CallNode) + .getNode() + .getFunc() + .(Attribute) + .getName() + .matches("start_tls") + ) + } +} + +class LDAPInsecureAuthConfig extends TaintTracking::Configuration { + LDAPInsecureAuthConfig() { this = "LDAPInsecureAuthConfig" } + + override predicate isSource(DataFlow::Node source) { source instanceof LDAPInsecureAuthSource } + + override predicate isSink(DataFlow::Node sink) { sink instanceof LDAPInsecureAuthSink } +} + +from LDAPInsecureAuthConfig config, DataFlow::PathNode source, DataFlow::PathNode sink +where config.hasFlowPath(source, sink) +select sink.getNode(), source, sink, "$@ from $@ is authenticated insecurely.", source.getNode(), + "The host", sink.getNode(), "this LDAP query" diff --git a/python/ql/src/Security/CWE-090/tests/2_private.py b/python/ql/src/Security/CWE-090/tests/2_private.py new file mode 100644 index 00000000000..4e152cd93c2 --- /dev/null +++ b/python/ql/src/Security/CWE-090/tests/2_private.py @@ -0,0 +1,66 @@ +import ldap +from flask import request, Flask + +app = Flask(__name__) + +schema = "ldap://" +remote_host = "127.0.0.1" +full_host = "ldap://127.0.0.1" + + +# GOOD + +# SSL through ldap variable option +# host from variable + variable + +@app.route("/one") +def one(): + ldap_connection_1 = ldap.initialize(schema + remote_host) + ldap_connection_1.set_option(ldap.OPT_X_TLS_DEMAND, True) + ldap_connection_1.simple_bind_s('', '') + user = ldap_connection_1.search_s( + "dn", ldap.SCOPE_SUBTREE, "search_filter") + + return user + + +# SSL through ldap start_tls_s +# hardcoded host + +@app.route("/two") +def two(): + ldap_connection_2 = ldap.initialize("ldap://127.0.0.1") + ldap_connection_2.start_tls_s() + ldap_connection_2.simple_bind_s('', '') + user = ldap_connection_2.search_s( + "dn", ldap.SCOPE_SUBTREE, "search_filter") + + return user + + +# BAD (not a sink because it's private) + +@app.route("/one_bad") +def one_bad(): + ldap_connection_3 = ldap.initialize(schema + remote_host) + ldap_connection_3.set_option(ldap.OPT_X_TLS_DEMAND, False) + ldap_connection_3.simple_bind_s('', '') + user = ldap_connection_3.search_s( + "dn", ldap.SCOPE_SUBTREE, "search_filter") + + return user + + +@app.route("/one_bad_2") +def one_bad_2(): + ldap_connection_4 = ldap.initialize(schema + remote_host) + ldap_connection_4.set_option(ldap.OPT_X_TLS_NEVER) + ldap_connection_4.simple_bind_s('', '') + user = ldap_connection_4.search_s( + "dn", ldap.SCOPE_SUBTREE, "search_filter") + + return user + + +# if __name__ == "__main__": +# app.run(debug=True) diff --git a/python/ql/src/Security/CWE-090/tests/2_remote.py b/python/ql/src/Security/CWE-090/tests/2_remote.py new file mode 100644 index 00000000000..6f82f1dbfd1 --- /dev/null +++ b/python/ql/src/Security/CWE-090/tests/2_remote.py @@ -0,0 +1,66 @@ +import ldap +from flask import request, Flask + +app = Flask(__name__) + +schema = "ldap://" +remote_host = "somethingon.theinternet.com" +full_host = "ldap://somethingon.theinternet.com" + + +# GOOD + +# SSL through ldap variable option +# host from variable + variable + +@app.route("/one") +def one(): + ldap_connection_5 = ldap.initialize(schema + remote_host) + ldap_connection_5.set_option(ldap.OPT_X_TLS_DEMAND, True) + ldap_connection_5.simple_bind_s('', '') + user = ldap_connection_5.search_s( + "dn", ldap.SCOPE_SUBTREE, "search_filter") + + return user + + +# SSL through ldap start_tls_s +# hardcoded host + +@app.route("/two") +def two(): + ldap_connection_6 = ldap.initialize("ldap://somethingon.theinternet.com") + ldap_connection_6.start_tls_s() + ldap_connection_6.simple_bind_s('', '') + user = ldap_connection_6.search_s( + "dn", ldap.SCOPE_SUBTREE, "search_filter") + + return user + + +# BAD + +@app.route("/one_bad") +def one_bad(): + ldap_connection_7 = ldap.initialize(schema + remote_host) + ldap_connection_7.set_option(ldap.OPT_X_TLS_DEMAND, False) + ldap_connection_7.simple_bind_s('', '') + user = ldap_connection_7.search_s( + "dn", ldap.SCOPE_SUBTREE, "search_filter") + + return user + + +@app.route("/one_bad_2") +def one_bad_2(): + ldap_connection_8 = ldap.initialize(schema + remote_host) + ldap_connection_8.set_option(ldap.OPT_X_TLS_NEVER) + ldap_connection_8.simple_bind_s('', '') + user = ldap_connection_8.search_s( + "dn", ldap.SCOPE_SUBTREE, "search_filter") + + return user + + +# if __name__ == "__main__": +# app.run(debug=True) diff --git a/python/ql/src/Security/CWE-090/tests/3_private.py b/python/ql/src/Security/CWE-090/tests/3_private.py new file mode 100644 index 00000000000..7c4ede3f0e6 --- /dev/null +++ b/python/ql/src/Security/CWE-090/tests/3_private.py @@ -0,0 +1,105 @@ +from ldap3 import Server, Connection, ALL +from flask import request, Flask + +app = Flask(__name__) + +schema = "ldap://" +partial_host = "127.0.0.1" +full_host = "ldap://127.0.0.1" + + +# hardcoded host + +@app.route("/one") +def one(): + srv = Server("ldap://127.0.0.1", port=1337) + conn = Connection(srv, "dn", "password") + conn.search("dn", "search_filter") + return conn.response + + +# host from variable + +@app.route("/two") +def two(): + srv = Server(full_host, port=1337) + conn = Connection(srv, "dn", "password") + conn.search("dn", "search_filter") + return conn.response + + +# schema from string + variable + +@app.route("/three") +def three(): + host = "ldap://" + partial_host + + srv = Server(host, port=1337) + conn = Connection(srv, "dn", "password") + conn.search("dn", "search_filter") + return conn.response + + +# schema from variable + variable + +@app.route("/four") +def four(): + host = schema + partial_host + + srv = Server(host, port=1337) + conn = Connection(srv, "dn", "password") + conn.search("dn", "search_filter") + return conn.response + + +# schema from string + string + +@app.route("/five") +def five(): + host = "ldap://" + "127.0.0.1" + + srv = Server(host, port=1337) + conn = Connection(srv, "dn", "password") + conn.search("dn", "search_filter") + return conn.response + + +# schema from variable + hardcoded host + +@app.route("/six") +def six(): + host = schema + "127.0.0.1" + + srv = Server(host, port=1337) + conn = Connection(srv, "dn", "password") + conn.search("dn", "search_filter") + return conn.response + + +# use_ssl = True (positional argument) +# host from string + variable + +@app.route("/four") +def four(): + host = "ldap://" + partial_host + + srv = Server(host, port=1337, True) + conn = Connection(srv, "dn", "password") + conn.search("dn", "search_filter") + return conn.response + + +# use_ssl = True (argument by name) +# host from variable + variable + +@app.route("/five") +def five(): + host = schema + partial_host + + srv = Server(host, port=1337, use_ssl=True) + conn = Connection(srv, "dn", "password") + conn.search("dn", "search_filter") + + +# if __name__ == "__main__": +# app.run(debug=True) diff --git a/python/ql/src/Security/CWE-090/tests/3_remote.py b/python/ql/src/Security/CWE-090/tests/3_remote.py new file mode 100644 index 00000000000..366fce2b186 --- /dev/null +++ b/python/ql/src/Security/CWE-090/tests/3_remote.py @@ -0,0 +1,146 @@ +from ldap3 import Server, Connection, ALL +from flask import request, Flask + +app = Flask(__name__) + +schema = "ldap://" +remote_host = "somethingon.theinternet.com" +full_host = "ldap://somethingon.theinternet.com" + + +# use_ssl = True (positional argument) +# hardcoded host + +@app.route("/one") +def one(): + srv = Server("ldap://somethingon.theinternet.com", port=1337, True) + conn = Connection(srv, "dn", "password") + conn.search("dn", "search_filter") + return conn.response + + +# use_ssl = True (argument by name) +# host from variable + +@app.route("/two") +def two(): + srv = Server(full_host, port=1337, use_ssl=True) + conn = Connection(srv, "dn", "password") + conn.search("dn", "search_filter") + return conn.response + + +# use_ssl = True (argument by name) +# host from RFS + +@app.route("/three") +def three(): + srv = Server(request.args['host'], port=1337, use_ssl=True) + conn = Connection(srv, "dn", "password") + conn.search("dn", "search_filter") + return conn.response + + +# use_ssl = True (positional argument) +# host from string + variable + +@app.route("/four") +def four(): + host = "ldap://" + remote_host + + srv = Server(host, port=1337, True) + conn = Connection(srv, "dn", "password") + conn.search("dn", "search_filter") + return conn.response + + +# use_ssl = True (argument by name) +# host from variable + variable + +@app.route("/five") +def five(): + host = schema + remote_host + + srv = Server(host, port=1337, use_ssl=True) + conn = Connection(srv, "dn", "password") + conn.search("dn", "search_filter") + return conn.response + + +# use_ssl = True (argument by name) +# host from string + RFS + +@app.route("/six") +def six(): + host = "ldap://" + request.args['host'] + + srv = Server(host, port=1337, use_ssl=True) + conn = Connection(srv, "dn", "password") + conn.search("dn", "search_filter") + return conn.response + + +# use_ssl = True (positional argument) +# host from variable + RFS + +@app.route("/seven") +def seven(): + host = schema + request.args['host'] + + srv = Server(host, port=1337, True) + conn = Connection(srv, "dn", "password") + conn.search("dn", "search_filter") + return conn.response + + +# SSL through special method +# host from variable + hardcoded host + +@app.route("/eight") +def eight(): + host = schema + "somethingon.theinternet.com" + srv = Server(host, port=1337) + conn = Connection(srv, "dn", "password") + conn.start_tls() # ! + conn.search("dn", "search_filter") + return conn.response + + +# No SSL (to test sink) +# host from variable + hardcoded host + +@app.route("/nine") +def nine(): + host = schema + "somethingon.theinternet.com" + srv = Server(host, port=1337, False) + conn = Connection(srv, "dn", "password") + conn.search("dn", "search_filter") + return conn.response + + +# No SSL (to test sink) +# host from variable + variable + +@app.route("/ten") +def ten(): + host = schema + remote_host + srv = Server(host, port=1337, use_ssl=False) + conn = Connection(srv, "dn", "password") + conn.search("dn", "search_filter") + return conn.response + + +# No SSL (to test sink) +# host from variable + RFS + +@app.route("/eleven") +def eleven(): + host = schema + request.args['host'] + srv = Server(host, port=1337) + conn = Connection(srv, "dn", "password") + conn.search("dn", "search_filter") + return conn.response + + +# if __name__ == "__main__": +# app.run(debug=True) From 3ce0a9c8c08ed8091335267143fd2f25703fb425 Mon Sep 17 00:00:00 2001 From: jorgectf Date: Thu, 18 Mar 2021 20:20:04 +0100 Subject: [PATCH 022/741] Move to experimental folder --- .../src/{ => experimental}/Security/CWE-090/LDAPInsecureAuth.ql | 0 .../ql/src/{ => experimental}/Security/CWE-090/tests/2_private.py | 0 .../ql/src/{ => experimental}/Security/CWE-090/tests/2_remote.py | 0 .../ql/src/{ => experimental}/Security/CWE-090/tests/3_private.py | 0 .../ql/src/{ => experimental}/Security/CWE-090/tests/3_remote.py | 0 5 files changed, 0 insertions(+), 0 deletions(-) rename python/ql/src/{ => experimental}/Security/CWE-090/LDAPInsecureAuth.ql (100%) rename python/ql/src/{ => experimental}/Security/CWE-090/tests/2_private.py (100%) rename python/ql/src/{ => experimental}/Security/CWE-090/tests/2_remote.py (100%) rename python/ql/src/{ => experimental}/Security/CWE-090/tests/3_private.py (100%) rename python/ql/src/{ => experimental}/Security/CWE-090/tests/3_remote.py (100%) diff --git a/python/ql/src/Security/CWE-090/LDAPInsecureAuth.ql b/python/ql/src/experimental/Security/CWE-090/LDAPInsecureAuth.ql similarity index 100% rename from python/ql/src/Security/CWE-090/LDAPInsecureAuth.ql rename to python/ql/src/experimental/Security/CWE-090/LDAPInsecureAuth.ql diff --git a/python/ql/src/Security/CWE-090/tests/2_private.py b/python/ql/src/experimental/Security/CWE-090/tests/2_private.py similarity index 100% rename from python/ql/src/Security/CWE-090/tests/2_private.py rename to python/ql/src/experimental/Security/CWE-090/tests/2_private.py diff --git a/python/ql/src/Security/CWE-090/tests/2_remote.py b/python/ql/src/experimental/Security/CWE-090/tests/2_remote.py similarity index 100% rename from python/ql/src/Security/CWE-090/tests/2_remote.py rename to python/ql/src/experimental/Security/CWE-090/tests/2_remote.py diff --git a/python/ql/src/Security/CWE-090/tests/3_private.py b/python/ql/src/experimental/Security/CWE-090/tests/3_private.py similarity index 100% rename from python/ql/src/Security/CWE-090/tests/3_private.py rename to python/ql/src/experimental/Security/CWE-090/tests/3_private.py diff --git a/python/ql/src/Security/CWE-090/tests/3_remote.py b/python/ql/src/experimental/Security/CWE-090/tests/3_remote.py similarity index 100% rename from python/ql/src/Security/CWE-090/tests/3_remote.py rename to python/ql/src/experimental/Security/CWE-090/tests/3_remote.py From 957b3e1e85fd3c478b81ffbef7c4e6bed5e7d235 Mon Sep 17 00:00:00 2001 From: jorgectf Date: Thu, 18 Mar 2021 20:39:53 +0100 Subject: [PATCH 023/741] Precision warn --- python/ql/src/experimental/Security/CWE-090/LDAPInsecureAuth.ql | 1 + 1 file changed, 1 insertion(+) diff --git a/python/ql/src/experimental/Security/CWE-090/LDAPInsecureAuth.ql b/python/ql/src/experimental/Security/CWE-090/LDAPInsecureAuth.ql index b156cc2b036..ba31bb8a287 100644 --- a/python/ql/src/experimental/Security/CWE-090/LDAPInsecureAuth.ql +++ b/python/ql/src/experimental/Security/CWE-090/LDAPInsecureAuth.ql @@ -9,6 +9,7 @@ * external/cwe/cwe-090 */ +// Determine precision above import python import semmle.python.dataflow.new.RemoteFlowSources import semmle.python.dataflow.new.DataFlow From 858c0e67a11818dd1d90db44910f51eef9c59a2d Mon Sep 17 00:00:00 2001 From: mr-sherman <77112096+mr-sherman@users.noreply.github.com> Date: Mon, 22 Mar 2021 19:27:49 -0400 Subject: [PATCH 024/741] added support for remote flow sinks in the form of parameters to the function ServiceStack.IRestClient.Get() --- .../code/csharp/frameworks/ServiceStack.qll | 16 +++++++++++++++- .../security/dataflow/flowsinks/Remote.qll | 1 + 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/csharp/ql/src/semmle/code/csharp/frameworks/ServiceStack.qll b/csharp/ql/src/semmle/code/csharp/frameworks/ServiceStack.qll index 07a771f7183..2d29bee9e68 100644 --- a/csharp/ql/src/semmle/code/csharp/frameworks/ServiceStack.qll +++ b/csharp/ql/src/semmle/code/csharp/frameworks/ServiceStack.qll @@ -78,7 +78,21 @@ module Sources { } } } - +/** Flow Sinks for the ServiceStack framework */ +module Sinks { + private import semmle.code.csharp.security.dataflow.flowsinks.Remote + + /** RemoteFlow sinks for service stack */ + class ServiceStackRemoteRequestParameter extends RemoteFlowSink { + ServiceStackRemoteRequestParameter() { + exists(MethodCall mc | + mc.getTarget().hasQualifiedName("ServiceStack.IRestClient.Get") and + mc.getArgument(0) = this.asExpr() + ) + } + } + } + /** SQLi support for the ServiceStack framework */ module SQL { private import semmle.code.csharp.security.dataflow.SqlInjection::SqlInjection diff --git a/csharp/ql/src/semmle/code/csharp/security/dataflow/flowsinks/Remote.qll b/csharp/ql/src/semmle/code/csharp/security/dataflow/flowsinks/Remote.qll index 10885d52a16..ed5fceefb91 100644 --- a/csharp/ql/src/semmle/code/csharp/security/dataflow/flowsinks/Remote.qll +++ b/csharp/ql/src/semmle/code/csharp/security/dataflow/flowsinks/Remote.qll @@ -8,6 +8,7 @@ private import ExternalLocationSink private import Html private import semmle.code.csharp.security.dataflow.XSS private import semmle.code.csharp.frameworks.system.web.UI +import semmle.code.csharp.frameworks.ServiceStack::Sinks /** A data flow sink of remote user output. */ abstract class RemoteFlowSink extends DataFlow::Node { } From 3e889c398e47097addd46bd8c693b87a6ee69009 Mon Sep 17 00:00:00 2001 From: mr-sherman <77112096+mr-sherman@users.noreply.github.com> Date: Tue, 23 Mar 2021 10:09:30 -0400 Subject: [PATCH 025/741] updated document formatting --- .../code/csharp/frameworks/ServiceStack.qll | 245 +++++++++--------- 1 file changed, 129 insertions(+), 116 deletions(-) diff --git a/csharp/ql/src/semmle/code/csharp/frameworks/ServiceStack.qll b/csharp/ql/src/semmle/code/csharp/frameworks/ServiceStack.qll index 2d29bee9e68..cda710b839e 100644 --- a/csharp/ql/src/semmle/code/csharp/frameworks/ServiceStack.qll +++ b/csharp/ql/src/semmle/code/csharp/frameworks/ServiceStack.qll @@ -9,151 +9,164 @@ import csharp /** A class representing a Service */ class ServiceClass extends Class { - ServiceClass() { this.getBaseClass+().getQualifiedName()="ServiceStack.Service" } + ServiceClass() { this.getBaseClass+().getQualifiedName() = "ServiceStack.Service" } - /** Get a method that handles incoming requests */ - Method getARequestMethod() { - result = this.getAMethod(["Post", "Get", "Put", "Delete", "Any", "Option", "Head"]) - } + /** Get a method that handles incoming requests */ + Method getARequestMethod() { + result = this.getAMethod(["Post", "Get", "Put", "Delete", "Any", "Option", "Head"]) + } } /** Top-level Request DTO types */ class RequestDTO extends Class { - RequestDTO() { - this.getABaseInterface().getQualifiedName() = ["ServiceStack.IReturn", "ServieStack.IReturnVoid"] - } + RequestDTO() { + this.getABaseInterface().getQualifiedName() = + ["ServiceStack.IReturn", "ServieStack.IReturnVoid"] + } } /** Top-level Response DTO types */ class ResponseDTO extends Class { - ResponseDTO() { - exists(RequestDTO req, ConstructedGeneric respInterface | - req.getABaseInterface() = respInterface and - respInterface.getUndecoratedName() = "IReturn" and - respInterface.getATypeArgument() = this - ) - } + ResponseDTO() { + exists(RequestDTO req, ConstructedGeneric respInterface | + req.getABaseInterface() = respInterface and + respInterface.getUndecoratedName() = "IReturn" and + respInterface.getATypeArgument() = this + ) + } } /** Flow sources for the ServiceStack framework */ module Sources { - private import semmle.code.csharp.security.dataflow.flowsources.Remote - private import semmle.code.csharp.commons.Collections + private import semmle.code.csharp.security.dataflow.flowsources.Remote + private import semmle.code.csharp.commons.Collections - /** Types involved in a RequestDTO. Recurse through props and collection types */ - private predicate involvedInRequest(RefType c) { - c instanceof RequestDTO or - exists(RefType parent, RefType propType | involvedInRequest(parent) | - (propType = parent.getAProperty().getType() or propType = parent.getAField().getType()) and - if propType instanceof CollectionType then ( - c = propType.(ConstructedGeneric).getATypeArgument() or - c = propType.(ArrayType).getElementType() - ) else ( - c = propType - ) - ) + /** Types involved in a RequestDTO. Recurse through props and collection types */ + private predicate involvedInRequest(RefType c) { + c instanceof RequestDTO + or + exists(RefType parent, RefType propType | involvedInRequest(parent) | + (propType = parent.getAProperty().getType() or propType = parent.getAField().getType()) and + if propType instanceof CollectionType + then + c = propType.(ConstructedGeneric).getATypeArgument() or + c = propType.(ArrayType).getElementType() + else c = propType + ) + } + + /** + * Remote flow sources for ServiceStack + * + * Assumes all nested fields/properties on request DTOs are tainted, which is + * an overapproximation and may lead to FPs depending on how Service Stack app + * is configured. + */ + class ServiceStackSource extends RemoteFlowSource { + ServiceStackSource() { + // Parameters are sources. In practice only interesting when they are string/primitive typed. + exists(ServiceClass service | + service.getARequestMethod().getAParameter() = this.asParameter() + ) + or + // Field/property accesses on RequestDTOs and request involved types + // involved types aren't necessarily only from requests so may lead to FPs... + exists(RefType reqType | involvedInRequest(reqType) | + reqType.getAProperty().getAnAccess() = this.asExpr() or + reqType.getAField().getAnAccess() = this.asExpr() + ) } - /** - * Remote flow sources for ServiceStack - * - * Assumes all nested fields/properties on request DTOs are tainted, which is - * an overapproximation and may lead to FPs depending on how Service Stack app - * is configured. - */ - class ServiceStackSource extends RemoteFlowSource { - ServiceStackSource() { - // Parameters are sources. In practice only interesting when they are string/primitive typed. - exists(ServiceClass service | - service.getARequestMethod().getAParameter() = this.asParameter()) or - // Field/property accesses on RequestDTOs and request involved types - // involved types aren't necessarily only from requests so may lead to FPs... - exists(RefType reqType | involvedInRequest(reqType) | - reqType.getAProperty().getAnAccess() = this.asExpr() or - reqType.getAField().getAnAccess() = this.asExpr()) - } - - override string getSourceType() { - result = "ServiceStack request DTO field" - } - } + override string getSourceType() { result = "ServiceStack request DTO field" } + } } + /** Flow Sinks for the ServiceStack framework */ module Sinks { - private import semmle.code.csharp.security.dataflow.flowsinks.Remote - - /** RemoteFlow sinks for service stack */ - class ServiceStackRemoteRequestParameter extends RemoteFlowSink { - ServiceStackRemoteRequestParameter() { - exists(MethodCall mc | - mc.getTarget().hasQualifiedName("ServiceStack.IRestClient.Get") and - mc.getArgument(0) = this.asExpr() - ) - } + private import semmle.code.csharp.security.dataflow.flowsinks.Remote + + /** RemoteFlow sinks for service stack */ + class ServiceStackRemoteRequestParameter extends RemoteFlowSink { + ServiceStackRemoteRequestParameter() { + exists(MethodCall mc | + mc.getTarget().hasQualifiedName("ServiceStack.IRestClient.Get") and + mc.getArgument(0) = this.asExpr() + ) } } - +} + /** SQLi support for the ServiceStack framework */ module SQL { - private import semmle.code.csharp.security.dataflow.SqlInjection::SqlInjection - - /** SQLi sinks for ServiceStack */ - class ServiceStackSink extends Sink { - ServiceStackSink() { - exists(MethodCall mc, Method m, int p | - (mc.getTarget() = m.getAnOverrider*() or mc.getTarget() = m.getAnImplementor*()) and - sqlSinkParam(m, p) and - mc.getArgument(p) = this.asExpr()) - } - } + private import semmle.code.csharp.security.dataflow.SqlInjection::SqlInjection - private predicate sqlSinkParam(Method m, int p) { - exists(RefType cls | cls = m.getDeclaringType() | - ( - // if using the typed query builder api, only need to worry about Unsafe variants - cls.getQualifiedName() = ["ServiceStack.OrmLite.SqlExpression", "ServiceStack.OrmLite.IUntypedSqlExpression"] and - m.getName().matches("Unsafe%") and - p = 0 - ) or ( - // Read api - all string typed 1st params are potential sql sinks. They should be templates, not directly user controlled. - cls.getQualifiedName() = ["ServiceStack.OrmLite.OrmLiteReadApi", "ServiceStack.OrmLite.OrmLiteReadExpressionsApi", "ServiceStack.OrmLite.OrmLiteReadApiAsync", "ServiceStack.OrmLite.OrmLiteReadExpressionsApiAsync"] and - m.getParameter(p).getType() instanceof StringType and - p = 1 - ) or ( - // Write API - only 2 methods that take string - cls.getQualifiedName() = ["ServiceStack.OrmLite.OrmLiteWriteApi", "ServiceStack.OrmLite.OrmLiteWriteApiAsync"] and - m.getName() = ["ExecuteSql", "ExecuteSqlAsync"] and - p = 1 - ) or ( - // NoSQL sinks in redis client. TODO should these be separate query? - cls.getQualifiedName() = "ServiceStack.Redis.IRedisClient" and - (m.getName() = ["Custom", "LoadLuaScript"] or (m.getName().matches("%Lua%") and not m.getName().matches("%Sha%"))) and - p = 0 - ) - // TODO - // ServiceStack.OrmLite.OrmLiteUtils.SqlColumn - what about other similar classes? - // couldn't find CustomSelect - // need to handle "PreCreateTable", "PostCreateTable", "PreDropTable", "PostDropTable" - - ) + /** SQLi sinks for ServiceStack */ + class ServiceStackSink extends Sink { + ServiceStackSink() { + exists(MethodCall mc, Method m, int p | + (mc.getTarget() = m.getAnOverrider*() or mc.getTarget() = m.getAnImplementor*()) and + sqlSinkParam(m, p) and + mc.getArgument(p) = this.asExpr() + ) } + } + + private predicate sqlSinkParam(Method m, int p) { + exists(RefType cls | cls = m.getDeclaringType() | + // if using the typed query builder api, only need to worry about Unsafe variants + cls.getQualifiedName() = + ["ServiceStack.OrmLite.SqlExpression", "ServiceStack.OrmLite.IUntypedSqlExpression"] and + m.getName().matches("Unsafe%") and + p = 0 + or + // Read api - all string typed 1st params are potential sql sinks. They should be templates, not directly user controlled. + cls.getQualifiedName() = + [ + "ServiceStack.OrmLite.OrmLiteReadApi", "ServiceStack.OrmLite.OrmLiteReadExpressionsApi", + "ServiceStack.OrmLite.OrmLiteReadApiAsync", + "ServiceStack.OrmLite.OrmLiteReadExpressionsApiAsync" + ] and + m.getParameter(p).getType() instanceof StringType and + p = 1 + or + // Write API - only 2 methods that take string + cls.getQualifiedName() = + ["ServiceStack.OrmLite.OrmLiteWriteApi", "ServiceStack.OrmLite.OrmLiteWriteApiAsync"] and + m.getName() = ["ExecuteSql", "ExecuteSqlAsync"] and + p = 1 + or + // NoSQL sinks in redis client. TODO should these be separate query? + cls.getQualifiedName() = "ServiceStack.Redis.IRedisClient" and + ( + m.getName() = ["Custom", "LoadLuaScript"] + or + m.getName().matches("%Lua%") and not m.getName().matches("%Sha%") + ) and + p = 0 + // TODO + // ServiceStack.OrmLite.OrmLiteUtils.SqlColumn - what about other similar classes? + // couldn't find CustomSelect + // need to handle "PreCreateTable", "PostCreateTable", "PreDropTable", "PostDropTable" + ) + } } /** XSS support for ServiceStack framework */ module XSS { - private import semmle.code.csharp.security.dataflow.XSS::XSS + private import semmle.code.csharp.security.dataflow.XSS::XSS - /** XSS sinks for ServiceStack */ - class XssSink extends Sink { - XssSink() { - exists(ServiceClass service, ReturnStmt r | - this.asExpr() = r.getExpr() and - r.getEnclosingCallable() = service.getARequestMethod() - ) or - exists(ObjectCreation oc | - oc.getType().hasQualifiedName("ServiceStack.HttpResult") and - this.asExpr() = oc.getArgument(0) - ) - } + /** XSS sinks for ServiceStack */ + class XssSink extends Sink { + XssSink() { + exists(ServiceClass service, ReturnStmt r | + this.asExpr() = r.getExpr() and + r.getEnclosingCallable() = service.getARequestMethod() + ) + or + exists(ObjectCreation oc | + oc.getType().hasQualifiedName("ServiceStack.HttpResult") and + this.asExpr() = oc.getArgument(0) + ) } + } } From 13997caa32e018b4daef2ce16267292a79e21aeb Mon Sep 17 00:00:00 2001 From: mr-sherman <77112096+mr-sherman@users.noreply.github.com> Date: Fri, 26 Mar 2021 16:29:14 -0400 Subject: [PATCH 026/741] feedback from code review --- .../semmle/code/csharp/frameworks/ServiceStack.qll | 13 +++++++++---- .../dataflow/flowsinks/ExternalLocationSink.qll | 2 +- .../csharp/security/dataflow/flowsinks/Remote.qll | 2 +- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/csharp/ql/src/semmle/code/csharp/frameworks/ServiceStack.qll b/csharp/ql/src/semmle/code/csharp/frameworks/ServiceStack.qll index cda710b839e..9520b093a7e 100644 --- a/csharp/ql/src/semmle/code/csharp/frameworks/ServiceStack.qll +++ b/csharp/ql/src/semmle/code/csharp/frameworks/ServiceStack.qll @@ -83,14 +83,19 @@ module Sources { /** Flow Sinks for the ServiceStack framework */ module Sinks { - private import semmle.code.csharp.security.dataflow.flowsinks.Remote + private import semmle.code.csharp.security.dataflow.flowsinks.ExternalLocationSink /** RemoteFlow sinks for service stack */ - class ServiceStackRemoteRequestParameter extends RemoteFlowSink { + class ServiceStackRemoteRequestParameter extends ExternalLocationSink { ServiceStackRemoteRequestParameter() { exists(MethodCall mc | - mc.getTarget().hasQualifiedName("ServiceStack.IRestClient.Get") and - mc.getArgument(0) = this.asExpr() + mc.getTarget().getQualifiedName() in [ + "ServiceStack.IRestClient.Get", "ServiceStack.IRestClient.Put", + "ServiceStack.IRestClient.Post", "ServiceStack.IRestClient.Delete", + "ServiceStack.IRestClient.Post", "ServiceStack.IRestClient.Put", + "ServiceStack.IRestClient.Patch", "ServiceStack.IRestClient.Send" + ] and + this.asExpr() = mc.getAnArgument() ) } } diff --git a/csharp/ql/src/semmle/code/csharp/security/dataflow/flowsinks/ExternalLocationSink.qll b/csharp/ql/src/semmle/code/csharp/security/dataflow/flowsinks/ExternalLocationSink.qll index 25a50f3733c..63d1dfd04ce 100644 --- a/csharp/ql/src/semmle/code/csharp/security/dataflow/flowsinks/ExternalLocationSink.qll +++ b/csharp/ql/src/semmle/code/csharp/security/dataflow/flowsinks/ExternalLocationSink.qll @@ -6,7 +6,7 @@ import csharp private import Remote private import semmle.code.csharp.commons.Loggers private import semmle.code.csharp.frameworks.system.Web - +private import semmle.code.csharp.frameworks.ServiceStack::Sinks /** * An external location sink. * diff --git a/csharp/ql/src/semmle/code/csharp/security/dataflow/flowsinks/Remote.qll b/csharp/ql/src/semmle/code/csharp/security/dataflow/flowsinks/Remote.qll index ed5fceefb91..52685a50661 100644 --- a/csharp/ql/src/semmle/code/csharp/security/dataflow/flowsinks/Remote.qll +++ b/csharp/ql/src/semmle/code/csharp/security/dataflow/flowsinks/Remote.qll @@ -8,7 +8,7 @@ private import ExternalLocationSink private import Html private import semmle.code.csharp.security.dataflow.XSS private import semmle.code.csharp.frameworks.system.web.UI -import semmle.code.csharp.frameworks.ServiceStack::Sinks +private import semmle.code.csharp.frameworks.ServiceStack::Sinks /** A data flow sink of remote user output. */ abstract class RemoteFlowSink extends DataFlow::Node { } From bf2d7b3a16173d6588a47d457e3ba43e16783952 Mon Sep 17 00:00:00 2001 From: mr-sherman <77112096+mr-sherman@users.noreply.github.com> Date: Mon, 29 Mar 2021 14:37:51 -0400 Subject: [PATCH 027/741] Added IRestClientAsync methods to external location sink. Removed import from Remote.qll, as it is un-necessary now. --- .../ql/src/semmle/code/csharp/frameworks/ServiceStack.qll | 8 +++++--- .../code/csharp/security/dataflow/flowsinks/Remote.qll | 1 - 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/csharp/ql/src/semmle/code/csharp/frameworks/ServiceStack.qll b/csharp/ql/src/semmle/code/csharp/frameworks/ServiceStack.qll index 9520b093a7e..198fea63b0e 100644 --- a/csharp/ql/src/semmle/code/csharp/frameworks/ServiceStack.qll +++ b/csharp/ql/src/semmle/code/csharp/frameworks/ServiceStack.qll @@ -91,9 +91,11 @@ module Sinks { exists(MethodCall mc | mc.getTarget().getQualifiedName() in [ "ServiceStack.IRestClient.Get", "ServiceStack.IRestClient.Put", - "ServiceStack.IRestClient.Post", "ServiceStack.IRestClient.Delete", - "ServiceStack.IRestClient.Post", "ServiceStack.IRestClient.Put", - "ServiceStack.IRestClient.Patch", "ServiceStack.IRestClient.Send" + "ServiceStack.IRestClient.Post", "ServiceStack.IRestClient.Delete", + "ServiceStack.IRestClient.Patch", "ServiceStack.IRestClient.Send", + "ServiceStack.IRestClientAsync.GetAsync","ServiceStack.IRestClientAsync.DeleteAsync", + "ServiceStack.IRestClientAsync.PutAsync","ServiceStack.IRestClientAsync.PostAsync", + "ServiceStack.IRestClientAsync.PatchAsync","ServiceStack.IRestClientAsync.CustomMethodAsync" ] and this.asExpr() = mc.getAnArgument() ) diff --git a/csharp/ql/src/semmle/code/csharp/security/dataflow/flowsinks/Remote.qll b/csharp/ql/src/semmle/code/csharp/security/dataflow/flowsinks/Remote.qll index 52685a50661..10885d52a16 100644 --- a/csharp/ql/src/semmle/code/csharp/security/dataflow/flowsinks/Remote.qll +++ b/csharp/ql/src/semmle/code/csharp/security/dataflow/flowsinks/Remote.qll @@ -8,7 +8,6 @@ private import ExternalLocationSink private import Html private import semmle.code.csharp.security.dataflow.XSS private import semmle.code.csharp.frameworks.system.web.UI -private import semmle.code.csharp.frameworks.ServiceStack::Sinks /** A data flow sink of remote user output. */ abstract class RemoteFlowSink extends DataFlow::Node { } From fc7d340a898ce44f3f1f093f480c8356a195a56f Mon Sep 17 00:00:00 2001 From: luchua-bc Date: Fri, 7 May 2021 12:51:01 +0000 Subject: [PATCH 028/741] Query to detect hard-coded Azure credentials --- .../CWE-798/HardcodedAzureCredentials.java | 52 ++++++ .../CWE-798/HardcodedCredentialsApiCall.qhelp | 30 ++++ .../src/Security/CWE/CWE-798/SensitiveApi.qll | 10 +- .../tests/HardcodedAzureCredentials.java | 66 ++++++++ .../HardcodedCredentialsApiCall.expected | 37 +++++ .../HardcodedCredentialsSourceCall.expected | 28 ++++ .../security/CWE-798/semmle/tests/options | 2 +- .../core/credential/TokenCredential.java | 10 ++ .../identity/AadCredentialBuilderBase.java | 43 +++++ .../identity/ClientSecretCredential.java | 18 ++ .../ClientSecretCredentialBuilder.java | 63 +++++++ .../azure/identity/CredentialBuilderBase.java | 13 ++ .../TokenCachePersistenceOptions.java | 48 ++++++ .../identity/UsernamePasswordCredential.java | 14 ++ .../UsernamePasswordCredentialBuilder.java | 74 +++++++++ .../keyvault/secrets/SecretClient.java | 155 ++++++++++++++++++ .../keyvault/secrets/SecretClientBuilder.java | 92 +++++++++++ .../secrets/models/KeyVaultSecret.java | 78 +++++++++ .../secrets/models/SecretProperties.java | 145 ++++++++++++++++ 19 files changed, 974 insertions(+), 4 deletions(-) create mode 100644 java/ql/src/Security/CWE/CWE-798/HardcodedAzureCredentials.java create mode 100644 java/ql/test/query-tests/security/CWE-798/semmle/tests/HardcodedAzureCredentials.java create mode 100644 java/ql/test/stubs/azure-sdk-for-java/com/azure/core/credential/TokenCredential.java create mode 100644 java/ql/test/stubs/azure-sdk-for-java/com/azure/identity/AadCredentialBuilderBase.java create mode 100644 java/ql/test/stubs/azure-sdk-for-java/com/azure/identity/ClientSecretCredential.java create mode 100644 java/ql/test/stubs/azure-sdk-for-java/com/azure/identity/ClientSecretCredentialBuilder.java create mode 100644 java/ql/test/stubs/azure-sdk-for-java/com/azure/identity/CredentialBuilderBase.java create mode 100644 java/ql/test/stubs/azure-sdk-for-java/com/azure/identity/TokenCachePersistenceOptions.java create mode 100644 java/ql/test/stubs/azure-sdk-for-java/com/azure/identity/UsernamePasswordCredential.java create mode 100644 java/ql/test/stubs/azure-sdk-for-java/com/azure/identity/UsernamePasswordCredentialBuilder.java create mode 100644 java/ql/test/stubs/azure-sdk-for-java/com/azure/security/keyvault/secrets/SecretClient.java create mode 100644 java/ql/test/stubs/azure-sdk-for-java/com/azure/security/keyvault/secrets/SecretClientBuilder.java create mode 100644 java/ql/test/stubs/azure-sdk-for-java/com/azure/security/keyvault/secrets/models/KeyVaultSecret.java create mode 100644 java/ql/test/stubs/azure-sdk-for-java/com/azure/security/keyvault/secrets/models/SecretProperties.java diff --git a/java/ql/src/Security/CWE/CWE-798/HardcodedAzureCredentials.java b/java/ql/src/Security/CWE/CWE-798/HardcodedAzureCredentials.java new file mode 100644 index 00000000000..a8b52aa43a1 --- /dev/null +++ b/java/ql/src/Security/CWE/CWE-798/HardcodedAzureCredentials.java @@ -0,0 +1,52 @@ +public class HardcodedAzureCredentials { + private final String clientId = "81734019-15a3-50t8-3253-5abe78abc3a1"; + private final String username = "username@example.onmicrosoft.com"; + private final String clientSecret = "1n1.qAc~3Q-1t38aF79Xzv5AUEfR5-ct3_"; + private final String tenantId = "22f367ce-535x-357w-2179-a33517mn166h"; + + //BAD: hard-coded username/password credentials + public void testHardcodedUsernamePassword(String input) { + UsernamePasswordCredential usernamePasswordCredential = new UsernamePasswordCredentialBuilder() + .clientId(clientId) + .username(username) + .password(clientSecret) + .build(); + + SecretClient client = new SecretClientBuilder() + .vaultUrl("https://myKeyVault.vault.azure.net") + .credential(usernamePasswordCredential) + .buildClient(); + } + + //GOOD: username/password credentials stored as environment variables + public void testEnvironmentUsernamePassword(String input) { + UsernamePasswordCredential usernamePasswordCredential = new UsernamePasswordCredentialBuilder() + .clientId(clientId) + .username(System.getenv("myUsername")) + .password(System.getenv("mySuperSecurePass")) + .build(); + + SecretClient client = new SecretClientBuilder() + .vaultUrl("https://myKeyVault.vault.azure.net") + .credential(usernamePasswordCredential) + .buildClient(); + } + + //BAD: hard-coded client secret + public void testHardcodedClientSecret(String input) { + ClientSecretCredential defaultCredential = new ClientSecretCredentialBuilder() + .clientId(clientId) + .clientSecret(clientSecret) + .tenantId(tenantId) + .build(); + } + + //GOOD: client secret stored as environment variables + public void testEnvironmentClientSecret(String input) { + ClientSecretCredential defaultCredential = new ClientSecretCredentialBuilder() + .clientId(clientId) + .clientSecret(System.getenv("myClientSecret")) + .tenantId(tenantId) + .build(); + } +} \ No newline at end of file diff --git a/java/ql/src/Security/CWE/CWE-798/HardcodedCredentialsApiCall.qhelp b/java/ql/src/Security/CWE/CWE-798/HardcodedCredentialsApiCall.qhelp index 231140a287e..efcf6b15abf 100644 --- a/java/ql/src/Security/CWE/CWE-798/HardcodedCredentialsApiCall.qhelp +++ b/java/ql/src/Security/CWE/CWE-798/HardcodedCredentialsApiCall.qhelp @@ -32,6 +32,28 @@ Instead, the user name and password could be supplied through environment variables, which can be set externally without hard-coding credentials in the source code.

    + +

    + The following code example connects to AWS using a hard-coded access key ID and secret key: +

    + + + +

    + Instead, the access key ID and secret key could be supplied through environment variables, + which can be set externally without hard-coding credentials in the source code. +

    + +

    + The following code example connects to Azure using a hard-coded user name and password or client secret: +

    + + + +

    + Instead, the username and password or client secret could be supplied through environment variables, + which can be set externally without hard-coding credentials in the source code. +

    @@ -39,6 +61,14 @@ OWASP: Use of hard-coded password. +
  • +Microsoft: +Azure authentication with user credentials. +
  • +
  • +Amazon: +Working with AWS Credentials. +
  • diff --git a/java/ql/src/Security/CWE/CWE-798/SensitiveApi.qll b/java/ql/src/Security/CWE/CWE-798/SensitiveApi.qll index 56072496293..928a3562ec6 100644 --- a/java/ql/src/Security/CWE/CWE-798/SensitiveApi.qll +++ b/java/ql/src/Security/CWE/CWE-798/SensitiveApi.qll @@ -130,7 +130,8 @@ private predicate javaApiCallablePasswordParam(string s) { s = "sun.tools.jconsole.ProxyClient;getProxyClient(String, int, String, String);3" or s = "sun.tools.jconsole.ProxyClient;getProxyClient(String, String, String);2" or s = "sun.tools.jconsole.ProxyClient;getCacheKey(String, int, String, String);3" or - s = "com.amazonaws.auth.BasicAWSCredentials;BasicAWSCredentials(String, String);1" + s = "com.amazonaws.auth.BasicAWSCredentials;BasicAWSCredentials(String, String);1" or + s = "com.azure.identity.UsernamePasswordCredentialBuilder;password(String);0" } /** @@ -202,7 +203,8 @@ private predicate javaApiCallableUsernameParam(string s) { s = "sun.tools.jconsole.ProxyClient;getConnectionName(String, String);1" or s = "sun.tools.jconsole.ProxyClient;getProxyClient(String, int, String, String);2" or s = "sun.tools.jconsole.ProxyClient;getConnectionName(String, int, String);2" or - s = "com.amazonaws.auth.BasicAWSCredentials;BasicAWSCredentials(String, String);0" + s = "com.amazonaws.auth.BasicAWSCredentials;BasicAWSCredentials(String, String);0" or + s = "com.azure.identity.UsernamePasswordCredentialBuilder;username(String);0" } /** @@ -510,5 +512,7 @@ private predicate otherApiCallableCredentialParam(string s) { s = "org.springframework.security.core.userdetails.User;User(String, String, boolean, boolean, boolean, boolean, Collection);0" or s = - "org.springframework.security.core.userdetails.User;User(String, String, boolean, boolean, boolean, boolean, Collection);1" + "org.springframework.security.core.userdetails.User;User(String, String, boolean, boolean, boolean, boolean, Collection);1" or + s = "com.azure.identity.ClientSecretCredentialBuilder;clientSecret(String);0" + } diff --git a/java/ql/test/query-tests/security/CWE-798/semmle/tests/HardcodedAzureCredentials.java b/java/ql/test/query-tests/security/CWE-798/semmle/tests/HardcodedAzureCredentials.java new file mode 100644 index 00000000000..d243e18d608 --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-798/semmle/tests/HardcodedAzureCredentials.java @@ -0,0 +1,66 @@ +import com.azure.identity.ClientSecretCredential; +import com.azure.identity.ClientSecretCredentialBuilder; +import com.azure.identity.UsernamePasswordCredential; +import com.azure.identity.UsernamePasswordCredentialBuilder; +import com.azure.security.keyvault.secrets.SecretClient; +import com.azure.security.keyvault.secrets.SecretClientBuilder; + +public class HardcodedAzureCredentials { + private final String clientId = "81734019-15a3-50t8-3253-5abe78abc3a1"; + private final String username = "username@example.onmicrosoft.com"; + private final String clientSecret = "1n1.qAc~3Q-1t38aF79Xzv5AUEfR5-ct3_"; + private final String tenantId = "22f367ce-535x-357w-2179-a33517mn166h"; + + //BAD: hard-coded username/password credentials + public void testHardcodedUsernamePassword(String input) { + UsernamePasswordCredential usernamePasswordCredential = new UsernamePasswordCredentialBuilder() + .clientId(clientId) + .username(username) + .password(clientSecret) + .build(); + + SecretClient client = new SecretClientBuilder() + .vaultUrl("https://myKeyVault.vault.azure.net") + .credential(usernamePasswordCredential) + .buildClient(); + } + + //GOOD: username/password credentials stored as environment variables + public void testEnvironmentUsernamePassword(String input) { + UsernamePasswordCredential usernamePasswordCredential = new UsernamePasswordCredentialBuilder() + .clientId(clientId) + .username(System.getenv("myUsername")) + .password(System.getenv("mySuperSecurePass")) + .build(); + + SecretClient client = new SecretClientBuilder() + .vaultUrl("https://myKeyVault.vault.azure.net") + .credential(usernamePasswordCredential) + .buildClient(); + } + + //BAD: hard-coded client secret + public void testHardcodedClientSecret(String input) { + ClientSecretCredential defaultCredential = new ClientSecretCredentialBuilder() + .clientId(clientId) + .clientSecret(clientSecret) + .tenantId(tenantId) + .build(); + } + + //GOOD: client secret stored as environment variables + public void testEnvironmentClientSecret(String input) { + ClientSecretCredential defaultCredential = new ClientSecretCredentialBuilder() + .clientId(clientId) + .clientSecret(System.getenv("myClientSecret")) + .tenantId(tenantId) + .build(); + } + + public static void main(String[] args) { + new HardcodedAzureCredentials().testHardcodedUsernamePassword(args[0]); + new HardcodedAzureCredentials().testEnvironmentUsernamePassword(args[0]); + new HardcodedAzureCredentials().testHardcodedClientSecret(args[0]); + new HardcodedAzureCredentials().testEnvironmentClientSecret(args[0]); + } +} \ No newline at end of file diff --git a/java/ql/test/query-tests/security/CWE-798/semmle/tests/HardcodedCredentialsApiCall.expected b/java/ql/test/query-tests/security/CWE-798/semmle/tests/HardcodedCredentialsApiCall.expected index ccd0259322e..8c87565b553 100644 --- a/java/ql/test/query-tests/security/CWE-798/semmle/tests/HardcodedCredentialsApiCall.expected +++ b/java/ql/test/query-tests/security/CWE-798/semmle/tests/HardcodedCredentialsApiCall.expected @@ -10,6 +10,22 @@ edges | FileCredentialTest.java:13:14:13:20 | "admin" : String | FileCredentialTest.java:19:13:19:13 | u : String | | FileCredentialTest.java:19:13:19:13 | u : String | FileCredentialTest.java:22:38:22:45 | v : String | | FileCredentialTest.java:22:38:22:45 | v : String | FileCredentialTest.java:23:36:23:36 | v | +| HardcodedAzureCredentials.java:8:14:8:38 | this <.method> [post update] [clientSecret] : String | HardcodedAzureCredentials.java:61:3:61:33 | new HardcodedAzureCredentials(...) [clientSecret] : String | +| HardcodedAzureCredentials.java:8:14:8:38 | this <.method> [post update] [clientSecret] : String | HardcodedAzureCredentials.java:63:3:63:33 | new HardcodedAzureCredentials(...) [clientSecret] : String | +| HardcodedAzureCredentials.java:8:14:8:38 | this <.method> [post update] [username] : String | HardcodedAzureCredentials.java:61:3:61:33 | new HardcodedAzureCredentials(...) [username] : String | +| HardcodedAzureCredentials.java:10:2:10:68 | this <.field> [post update] [username] : String | HardcodedAzureCredentials.java:8:14:8:38 | this <.method> [post update] [username] : String | +| HardcodedAzureCredentials.java:10:34:10:67 | "username@example.onmicrosoft.com" : String | HardcodedAzureCredentials.java:10:2:10:68 | this <.field> [post update] [username] : String | +| HardcodedAzureCredentials.java:11:2:11:74 | this <.field> [post update] [clientSecret] : String | HardcodedAzureCredentials.java:8:14:8:38 | this <.method> [post update] [clientSecret] : String | +| HardcodedAzureCredentials.java:11:38:11:73 | "1n1.qAc~3Q-1t38aF79Xzv5AUEfR5-ct3_" : String | HardcodedAzureCredentials.java:11:2:11:74 | this <.field> [post update] [clientSecret] : String | +| HardcodedAzureCredentials.java:15:14:15:42 | parameter this [clientSecret] : String | HardcodedAzureCredentials.java:19:13:19:24 | this <.field> [clientSecret] : String | +| HardcodedAzureCredentials.java:15:14:15:42 | parameter this [username] : String | HardcodedAzureCredentials.java:18:13:18:20 | this <.field> [username] : String | +| HardcodedAzureCredentials.java:18:13:18:20 | this <.field> [username] : String | HardcodedAzureCredentials.java:18:13:18:20 | username | +| HardcodedAzureCredentials.java:19:13:19:24 | this <.field> [clientSecret] : String | HardcodedAzureCredentials.java:19:13:19:24 | clientSecret | +| HardcodedAzureCredentials.java:43:14:43:38 | parameter this [clientSecret] : String | HardcodedAzureCredentials.java:46:17:46:28 | this <.field> [clientSecret] : String | +| HardcodedAzureCredentials.java:46:17:46:28 | this <.field> [clientSecret] : String | HardcodedAzureCredentials.java:46:17:46:28 | clientSecret | +| HardcodedAzureCredentials.java:61:3:61:33 | new HardcodedAzureCredentials(...) [clientSecret] : String | HardcodedAzureCredentials.java:15:14:15:42 | parameter this [clientSecret] : String | +| HardcodedAzureCredentials.java:61:3:61:33 | new HardcodedAzureCredentials(...) [username] : String | HardcodedAzureCredentials.java:15:14:15:42 | parameter this [username] : String | +| HardcodedAzureCredentials.java:63:3:63:33 | new HardcodedAzureCredentials(...) [clientSecret] : String | HardcodedAzureCredentials.java:43:14:43:38 | parameter this [clientSecret] : String | | Test.java:9:16:9:22 | "admin" : String | Test.java:12:13:12:15 | usr : String | | Test.java:9:16:9:22 | "admin" : String | Test.java:15:36:15:38 | usr | | Test.java:9:16:9:22 | "admin" : String | Test.java:17:39:17:41 | usr | @@ -42,6 +58,24 @@ nodes | FileCredentialTest.java:23:36:23:36 | v | semmle.label | v | | HardcodedAWSCredentials.java:8:50:8:61 | "ACCESS_KEY" | semmle.label | "ACCESS_KEY" | | HardcodedAWSCredentials.java:8:64:8:75 | "SECRET_KEY" | semmle.label | "SECRET_KEY" | +| HardcodedAzureCredentials.java:8:14:8:38 | this <.method> [post update] [clientSecret] : String | semmle.label | this <.method> [post update] [clientSecret] : String | +| HardcodedAzureCredentials.java:8:14:8:38 | this <.method> [post update] [username] : String | semmle.label | this <.method> [post update] [username] : String | +| HardcodedAzureCredentials.java:10:2:10:68 | this <.field> [post update] [username] : String | semmle.label | this <.field> [post update] [username] : String | +| HardcodedAzureCredentials.java:10:34:10:67 | "username@example.onmicrosoft.com" : String | semmle.label | "username@example.onmicrosoft.com" : String | +| HardcodedAzureCredentials.java:11:2:11:74 | this <.field> [post update] [clientSecret] : String | semmle.label | this <.field> [post update] [clientSecret] : String | +| HardcodedAzureCredentials.java:11:38:11:73 | "1n1.qAc~3Q-1t38aF79Xzv5AUEfR5-ct3_" : String | semmle.label | "1n1.qAc~3Q-1t38aF79Xzv5AUEfR5-ct3_" : String | +| HardcodedAzureCredentials.java:15:14:15:42 | parameter this [clientSecret] : String | semmle.label | parameter this [clientSecret] : String | +| HardcodedAzureCredentials.java:15:14:15:42 | parameter this [username] : String | semmle.label | parameter this [username] : String | +| HardcodedAzureCredentials.java:18:13:18:20 | this <.field> [username] : String | semmle.label | this <.field> [username] : String | +| HardcodedAzureCredentials.java:18:13:18:20 | username | semmle.label | username | +| HardcodedAzureCredentials.java:19:13:19:24 | clientSecret | semmle.label | clientSecret | +| HardcodedAzureCredentials.java:19:13:19:24 | this <.field> [clientSecret] : String | semmle.label | this <.field> [clientSecret] : String | +| HardcodedAzureCredentials.java:43:14:43:38 | parameter this [clientSecret] : String | semmle.label | parameter this [clientSecret] : String | +| HardcodedAzureCredentials.java:46:17:46:28 | clientSecret | semmle.label | clientSecret | +| HardcodedAzureCredentials.java:46:17:46:28 | this <.field> [clientSecret] : String | semmle.label | this <.field> [clientSecret] : String | +| HardcodedAzureCredentials.java:61:3:61:33 | new HardcodedAzureCredentials(...) [clientSecret] : String | semmle.label | new HardcodedAzureCredentials(...) [clientSecret] : String | +| HardcodedAzureCredentials.java:61:3:61:33 | new HardcodedAzureCredentials(...) [username] : String | semmle.label | new HardcodedAzureCredentials(...) [username] : String | +| HardcodedAzureCredentials.java:63:3:63:33 | new HardcodedAzureCredentials(...) [clientSecret] : String | semmle.label | new HardcodedAzureCredentials(...) [clientSecret] : String | | Test.java:9:16:9:22 | "admin" : String | semmle.label | "admin" : String | | Test.java:10:17:10:24 | "123456" : String | semmle.label | "123456" : String | | Test.java:12:13:12:15 | usr : String | semmle.label | usr : String | @@ -72,6 +106,9 @@ nodes | FileCredentialTest.java:18:35:18:41 | "admin" | FileCredentialTest.java:18:35:18:41 | "admin" | FileCredentialTest.java:18:35:18:41 | "admin" | Hard-coded value flows to $@. | FileCredentialTest.java:18:35:18:41 | "admin" | sensitive API call | | HardcodedAWSCredentials.java:8:50:8:61 | "ACCESS_KEY" | HardcodedAWSCredentials.java:8:50:8:61 | "ACCESS_KEY" | HardcodedAWSCredentials.java:8:50:8:61 | "ACCESS_KEY" | Hard-coded value flows to $@. | HardcodedAWSCredentials.java:8:50:8:61 | "ACCESS_KEY" | sensitive API call | | HardcodedAWSCredentials.java:8:64:8:75 | "SECRET_KEY" | HardcodedAWSCredentials.java:8:64:8:75 | "SECRET_KEY" | HardcodedAWSCredentials.java:8:64:8:75 | "SECRET_KEY" | Hard-coded value flows to $@. | HardcodedAWSCredentials.java:8:64:8:75 | "SECRET_KEY" | sensitive API call | +| HardcodedAzureCredentials.java:10:34:10:67 | "username@example.onmicrosoft.com" | HardcodedAzureCredentials.java:10:34:10:67 | "username@example.onmicrosoft.com" : String | HardcodedAzureCredentials.java:18:13:18:20 | username | Hard-coded value flows to $@. | HardcodedAzureCredentials.java:18:13:18:20 | username | sensitive API call | +| HardcodedAzureCredentials.java:11:38:11:73 | "1n1.qAc~3Q-1t38aF79Xzv5AUEfR5-ct3_" | HardcodedAzureCredentials.java:11:38:11:73 | "1n1.qAc~3Q-1t38aF79Xzv5AUEfR5-ct3_" : String | HardcodedAzureCredentials.java:19:13:19:24 | clientSecret | Hard-coded value flows to $@. | HardcodedAzureCredentials.java:19:13:19:24 | clientSecret | sensitive API call | +| HardcodedAzureCredentials.java:11:38:11:73 | "1n1.qAc~3Q-1t38aF79Xzv5AUEfR5-ct3_" | HardcodedAzureCredentials.java:11:38:11:73 | "1n1.qAc~3Q-1t38aF79Xzv5AUEfR5-ct3_" : String | HardcodedAzureCredentials.java:46:17:46:28 | clientSecret | Hard-coded value flows to $@. | HardcodedAzureCredentials.java:46:17:46:28 | clientSecret | sensitive API call | | Test.java:9:16:9:22 | "admin" | Test.java:9:16:9:22 | "admin" : String | Test.java:15:36:15:38 | usr | Hard-coded value flows to $@. | Test.java:15:36:15:38 | usr | sensitive API call | | Test.java:9:16:9:22 | "admin" | Test.java:9:16:9:22 | "admin" : String | Test.java:17:39:17:41 | usr | Hard-coded value flows to $@. | Test.java:17:39:17:41 | usr | sensitive API call | | Test.java:9:16:9:22 | "admin" | Test.java:9:16:9:22 | "admin" : String | Test.java:18:39:18:41 | usr | Hard-coded value flows to $@. | Test.java:18:39:18:41 | usr | sensitive API call | diff --git a/java/ql/test/query-tests/security/CWE-798/semmle/tests/HardcodedCredentialsSourceCall.expected b/java/ql/test/query-tests/security/CWE-798/semmle/tests/HardcodedCredentialsSourceCall.expected index 05e47dacf3f..cabd4a20ca2 100644 --- a/java/ql/test/query-tests/security/CWE-798/semmle/tests/HardcodedCredentialsSourceCall.expected +++ b/java/ql/test/query-tests/security/CWE-798/semmle/tests/HardcodedCredentialsSourceCall.expected @@ -1,11 +1,39 @@ edges +| HardcodedAzureCredentials.java:8:14:8:38 | this <.method> [post update] [clientSecret] : String | HardcodedAzureCredentials.java:61:3:61:33 | new HardcodedAzureCredentials(...) [clientSecret] : String | +| HardcodedAzureCredentials.java:8:14:8:38 | this <.method> [post update] [username] : String | HardcodedAzureCredentials.java:61:3:61:33 | new HardcodedAzureCredentials(...) [username] : String | +| HardcodedAzureCredentials.java:10:2:10:68 | this <.field> [post update] [username] : String | HardcodedAzureCredentials.java:8:14:8:38 | this <.method> [post update] [username] : String | +| HardcodedAzureCredentials.java:10:34:10:67 | "username@example.onmicrosoft.com" : String | HardcodedAzureCredentials.java:10:2:10:68 | this <.field> [post update] [username] : String | +| HardcodedAzureCredentials.java:11:2:11:74 | this <.field> [post update] [clientSecret] : String | HardcodedAzureCredentials.java:8:14:8:38 | this <.method> [post update] [clientSecret] : String | +| HardcodedAzureCredentials.java:11:38:11:73 | "1n1.qAc~3Q-1t38aF79Xzv5AUEfR5-ct3_" : String | HardcodedAzureCredentials.java:11:2:11:74 | this <.field> [post update] [clientSecret] : String | +| HardcodedAzureCredentials.java:15:14:15:42 | parameter this [clientSecret] : String | HardcodedAzureCredentials.java:19:13:19:24 | this <.field> [clientSecret] : String | +| HardcodedAzureCredentials.java:15:14:15:42 | parameter this [username] : String | HardcodedAzureCredentials.java:18:13:18:20 | this <.field> [username] : String | +| HardcodedAzureCredentials.java:18:13:18:20 | this <.field> [username] : String | HardcodedAzureCredentials.java:18:13:18:20 | username | +| HardcodedAzureCredentials.java:19:13:19:24 | this <.field> [clientSecret] : String | HardcodedAzureCredentials.java:19:13:19:24 | clientSecret | +| HardcodedAzureCredentials.java:61:3:61:33 | new HardcodedAzureCredentials(...) [clientSecret] : String | HardcodedAzureCredentials.java:15:14:15:42 | parameter this [clientSecret] : String | +| HardcodedAzureCredentials.java:61:3:61:33 | new HardcodedAzureCredentials(...) [username] : String | HardcodedAzureCredentials.java:15:14:15:42 | parameter this [username] : String | | Test.java:10:17:10:24 | "123456" : String | Test.java:26:17:26:20 | pass | | User.java:2:43:2:50 | "123456" : String | User.java:5:15:5:24 | DEFAULT_PW | nodes +| HardcodedAzureCredentials.java:8:14:8:38 | this <.method> [post update] [clientSecret] : String | semmle.label | this <.method> [post update] [clientSecret] : String | +| HardcodedAzureCredentials.java:8:14:8:38 | this <.method> [post update] [username] : String | semmle.label | this <.method> [post update] [username] : String | +| HardcodedAzureCredentials.java:10:2:10:68 | this <.field> [post update] [username] : String | semmle.label | this <.field> [post update] [username] : String | +| HardcodedAzureCredentials.java:10:34:10:67 | "username@example.onmicrosoft.com" : String | semmle.label | "username@example.onmicrosoft.com" : String | +| HardcodedAzureCredentials.java:11:2:11:74 | this <.field> [post update] [clientSecret] : String | semmle.label | this <.field> [post update] [clientSecret] : String | +| HardcodedAzureCredentials.java:11:38:11:73 | "1n1.qAc~3Q-1t38aF79Xzv5AUEfR5-ct3_" : String | semmle.label | "1n1.qAc~3Q-1t38aF79Xzv5AUEfR5-ct3_" : String | +| HardcodedAzureCredentials.java:15:14:15:42 | parameter this [clientSecret] : String | semmle.label | parameter this [clientSecret] : String | +| HardcodedAzureCredentials.java:15:14:15:42 | parameter this [username] : String | semmle.label | parameter this [username] : String | +| HardcodedAzureCredentials.java:18:13:18:20 | this <.field> [username] : String | semmle.label | this <.field> [username] : String | +| HardcodedAzureCredentials.java:18:13:18:20 | username | semmle.label | username | +| HardcodedAzureCredentials.java:19:13:19:24 | clientSecret | semmle.label | clientSecret | +| HardcodedAzureCredentials.java:19:13:19:24 | this <.field> [clientSecret] : String | semmle.label | this <.field> [clientSecret] : String | +| HardcodedAzureCredentials.java:61:3:61:33 | new HardcodedAzureCredentials(...) [clientSecret] : String | semmle.label | new HardcodedAzureCredentials(...) [clientSecret] : String | +| HardcodedAzureCredentials.java:61:3:61:33 | new HardcodedAzureCredentials(...) [username] : String | semmle.label | new HardcodedAzureCredentials(...) [username] : String | | Test.java:10:17:10:24 | "123456" : String | semmle.label | "123456" : String | | Test.java:26:17:26:20 | pass | semmle.label | pass | | User.java:2:43:2:50 | "123456" : String | semmle.label | "123456" : String | | User.java:5:15:5:24 | DEFAULT_PW | semmle.label | DEFAULT_PW | #select +| HardcodedAzureCredentials.java:10:34:10:67 | "username@example.onmicrosoft.com" | HardcodedAzureCredentials.java:10:34:10:67 | "username@example.onmicrosoft.com" : String | HardcodedAzureCredentials.java:18:13:18:20 | username | Hard-coded value flows to $@. | HardcodedAzureCredentials.java:18:13:18:20 | username | sensitive call | +| HardcodedAzureCredentials.java:11:38:11:73 | "1n1.qAc~3Q-1t38aF79Xzv5AUEfR5-ct3_" | HardcodedAzureCredentials.java:11:38:11:73 | "1n1.qAc~3Q-1t38aF79Xzv5AUEfR5-ct3_" : String | HardcodedAzureCredentials.java:19:13:19:24 | clientSecret | Hard-coded value flows to $@. | HardcodedAzureCredentials.java:19:13:19:24 | clientSecret | sensitive call | | Test.java:10:17:10:24 | "123456" | Test.java:10:17:10:24 | "123456" : String | Test.java:26:17:26:20 | pass | Hard-coded value flows to $@. | Test.java:26:17:26:20 | pass | sensitive call | | User.java:2:43:2:50 | "123456" | User.java:2:43:2:50 | "123456" : String | User.java:5:15:5:24 | DEFAULT_PW | Hard-coded value flows to $@. | User.java:5:15:5:24 | DEFAULT_PW | sensitive call | diff --git a/java/ql/test/query-tests/security/CWE-798/semmle/tests/options b/java/ql/test/query-tests/security/CWE-798/semmle/tests/options index e13da5319f0..4e56d220d7e 100644 --- a/java/ql/test/query-tests/security/CWE-798/semmle/tests/options +++ b/java/ql/test/query-tests/security/CWE-798/semmle/tests/options @@ -1 +1 @@ -// semmle-extractor-options: --javac-args -cp ${testdir}/../../../../../stubs/amazon-aws-sdk-1.11.700 +// semmle-extractor-options: --javac-args -cp ${testdir}/../../../../../stubs/amazon-aws-sdk-1.11.700:${testdir}/../../../../../stubs/azure-sdk-for-java diff --git a/java/ql/test/stubs/azure-sdk-for-java/com/azure/core/credential/TokenCredential.java b/java/ql/test/stubs/azure-sdk-for-java/com/azure/core/credential/TokenCredential.java new file mode 100644 index 00000000000..bacaa46a251 --- /dev/null +++ b/java/ql/test/stubs/azure-sdk-for-java/com/azure/core/credential/TokenCredential.java @@ -0,0 +1,10 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +package com.azure.core.credential; + +/** + * The interface for credentials that can provide a token. + */ +public interface TokenCredential { +} \ No newline at end of file diff --git a/java/ql/test/stubs/azure-sdk-for-java/com/azure/identity/AadCredentialBuilderBase.java b/java/ql/test/stubs/azure-sdk-for-java/com/azure/identity/AadCredentialBuilderBase.java new file mode 100644 index 00000000000..bedaab87e69 --- /dev/null +++ b/java/ql/test/stubs/azure-sdk-for-java/com/azure/identity/AadCredentialBuilderBase.java @@ -0,0 +1,43 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +package com.azure.identity; + +/** + * The base class for credential builders that allow specifying a client ID and tenant ID for an Azure Active Directory. + * @param the type of the credential builder + */ +public abstract class AadCredentialBuilderBase> extends CredentialBuilderBase { + + /** + * Specifies the Azure Active Directory endpoint to acquire tokens. + * @param authorityHost the Azure Active Directory endpoint + * @return An updated instance of this builder with the authority host set as specified. + */ + @SuppressWarnings("unchecked") + public T authorityHost(String authorityHost) { + return null; + } + + /** + * Sets the client ID of the application. + * + * @param clientId the client ID of the application. + * @return An updated instance of this builder with the client id set as specified. + */ + @SuppressWarnings("unchecked") + public T clientId(String clientId) { + return null; + } + + /** + * Sets the tenant ID of the application. + * + * @param tenantId the tenant ID of the application. + * @return An updated instance of this builder with the tenant id set as specified. + */ + @SuppressWarnings("unchecked") + public T tenantId(String tenantId) { + return null; + } +} \ No newline at end of file diff --git a/java/ql/test/stubs/azure-sdk-for-java/com/azure/identity/ClientSecretCredential.java b/java/ql/test/stubs/azure-sdk-for-java/com/azure/identity/ClientSecretCredential.java new file mode 100644 index 00000000000..9b8182451b8 --- /dev/null +++ b/java/ql/test/stubs/azure-sdk-for-java/com/azure/identity/ClientSecretCredential.java @@ -0,0 +1,18 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +package com.azure.identity; + +import com.azure.core.credential.TokenCredential; + +/** + * An AAD credential that acquires a token with a client secret for an AAD application. + * + *

    Sample: Construct a simple ClientSecretCredential

    + * {@codesnippet com.azure.identity.credential.clientsecretcredential.construct} + * + *

    Sample: Construct a ClientSecretCredential behind a proxy

    + * {@codesnippet com.azure.identity.credential.clientsecretcredential.constructwithproxy} + */ +public class ClientSecretCredential implements TokenCredential { +} diff --git a/java/ql/test/stubs/azure-sdk-for-java/com/azure/identity/ClientSecretCredentialBuilder.java b/java/ql/test/stubs/azure-sdk-for-java/com/azure/identity/ClientSecretCredentialBuilder.java new file mode 100644 index 00000000000..85ab73c3060 --- /dev/null +++ b/java/ql/test/stubs/azure-sdk-for-java/com/azure/identity/ClientSecretCredentialBuilder.java @@ -0,0 +1,63 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +package com.azure.identity; + +/** + * Fluent credential builder for instantiating a {@link ClientSecretCredential}. + * + * @see ClientSecretCredential + */ +public class ClientSecretCredentialBuilder extends AadCredentialBuilderBase { + /** + * Sets the client secret for the authentication. + * @param clientSecret the secret value of the AAD application. + * @return An updated instance of this builder. + */ + public ClientSecretCredentialBuilder clientSecret(String clientSecret) { + return null; + } + + /** + * Enables the shared token cache which is disabled by default. If enabled, the credential will store tokens + * in a cache persisted to the machine, protected to the current user, which can be shared by other credentials + * and processes. + * + * @return An updated instance of this builder. + */ + ClientSecretCredentialBuilder enablePersistentCache() { + return null; + } + + /** + * Allows to use an unprotected file specified by cacheFileLocation() instead of + * Gnome keyring on Linux. This is restricted by default. + * + * @return An updated instance of this builder. + */ + ClientSecretCredentialBuilder allowUnencryptedCache() { + return null; + } + + /** + * Configures the persistent shared token cache options and enables the persistent token cache which is disabled + * by default. If configured, the credential will store tokens in a cache persisted to the machine, protected to + * the current user, which can be shared by other credentials and processes. + * + * @param tokenCachePersistenceOptions the token cache configuration options + * @return An updated instance of this builder with the token cache options configured. + */ + public ClientSecretCredentialBuilder tokenCachePersistenceOptions(TokenCachePersistenceOptions + tokenCachePersistenceOptions) { + return null; + } + + /** + * Creates a new {@link ClientCertificateCredential} with the current configurations. + * + * @return a {@link ClientSecretCredentialBuilder} with the current configurations. + */ + public ClientSecretCredential build() { + return null; + } +} diff --git a/java/ql/test/stubs/azure-sdk-for-java/com/azure/identity/CredentialBuilderBase.java b/java/ql/test/stubs/azure-sdk-for-java/com/azure/identity/CredentialBuilderBase.java new file mode 100644 index 00000000000..c1210942ea0 --- /dev/null +++ b/java/ql/test/stubs/azure-sdk-for-java/com/azure/identity/CredentialBuilderBase.java @@ -0,0 +1,13 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +package com.azure.identity; + +/** + * The base class for all the credential builders. + * @param the type of the credential builder + */ +public abstract class CredentialBuilderBase> { + CredentialBuilderBase() { + } +} \ No newline at end of file diff --git a/java/ql/test/stubs/azure-sdk-for-java/com/azure/identity/TokenCachePersistenceOptions.java b/java/ql/test/stubs/azure-sdk-for-java/com/azure/identity/TokenCachePersistenceOptions.java new file mode 100644 index 00000000000..d5580fb05f6 --- /dev/null +++ b/java/ql/test/stubs/azure-sdk-for-java/com/azure/identity/TokenCachePersistenceOptions.java @@ -0,0 +1,48 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. +package com.azure.identity; + +/** + * Represents the Persistence Token Cache options used to setup the persistent access token cache. + */ +public final class TokenCachePersistenceOptions { + + /** + * Allows to use an unprotected file specified by cacheFileLocation() instead of + * Gnome keyring on Linux. This is restricted by default. For other platforms this setting currently doesn't apply. + * + * @param unencryptedStorageAllowed The flag indicating if unencrypted storage is allowed for the cache or not. + * @return An updated instance of the options bag. + */ + public TokenCachePersistenceOptions setUnencryptedStorageAllowed(boolean unencryptedStorageAllowed) { + return null; + } + + /** + * Gets the status whether unencrypted storage is allowed for the persistent token cache. + * + * @return The status indicating if unencrypted storage is allowed for the persistent token cache. + */ + public boolean isUnencryptedStorageAllowed() { + return false; + } + + /** + * Set the name uniquely identifying the cache. + * + * @param name the name of the cache + * @return the updated instance of the cache. + */ + public TokenCachePersistenceOptions setName(String name) { + return null; + } + + /** + * Get the name uniquely identifying the cache. + * + * @return the name of the cache. + */ + public String getName() { + return null; + } +} diff --git a/java/ql/test/stubs/azure-sdk-for-java/com/azure/identity/UsernamePasswordCredential.java b/java/ql/test/stubs/azure-sdk-for-java/com/azure/identity/UsernamePasswordCredential.java new file mode 100644 index 00000000000..5cb9463eb95 --- /dev/null +++ b/java/ql/test/stubs/azure-sdk-for-java/com/azure/identity/UsernamePasswordCredential.java @@ -0,0 +1,14 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +package com.azure.identity; + +import com.azure.core.credential.TokenCredential; + +/** + * An AAD credential that acquires a token with a username and a password. Users with 2FA/MFA (Multi-factored auth) + * turned on will not be able to use this credential. Please use {@link DeviceCodeCredential} or {@link + * InteractiveBrowserCredential} instead, or create a service principal if you want to authenticate silently. + */ +public class UsernamePasswordCredential implements TokenCredential { +} diff --git a/java/ql/test/stubs/azure-sdk-for-java/com/azure/identity/UsernamePasswordCredentialBuilder.java b/java/ql/test/stubs/azure-sdk-for-java/com/azure/identity/UsernamePasswordCredentialBuilder.java new file mode 100644 index 00000000000..b6aa411ed84 --- /dev/null +++ b/java/ql/test/stubs/azure-sdk-for-java/com/azure/identity/UsernamePasswordCredentialBuilder.java @@ -0,0 +1,74 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +package com.azure.identity; + +import com.azure.security.keyvault.secrets.SecretClient; + +/** + * Fluent credential builder for instantiating a {@link UsernamePasswordCredential}. + * + * @see UsernamePasswordCredential + */ +public class UsernamePasswordCredentialBuilder extends AadCredentialBuilderBase { + /** + * Sets the username of the user. + * @param username the username of the user + * @return the UserCredentialBuilder itself + */ + public UsernamePasswordCredentialBuilder username(String username) { + return null; + } + + /** + * Sets the password of the user. + * @param password the password of the user + * @return the UserCredentialBuilder itself + */ + public UsernamePasswordCredentialBuilder password(String password) { + return null; + } + + /** + * Configures the persistent shared token cache options and enables the persistent token cache which is disabled + * by default. If configured, the credential will store tokens in a cache persisted to the machine, protected to + * the current user, which can be shared by other credentials and processes. + * + * @param tokenCachePersistenceOptions the token cache configuration options + * @return An updated instance of this builder with the token cache options configured. + */ + public UsernamePasswordCredentialBuilder tokenCachePersistenceOptions(TokenCachePersistenceOptions + tokenCachePersistenceOptions) { + return null; + } + + /** + * Allows to use an unprotected file specified by cacheFileLocation() instead of + * Gnome keyring on Linux. This is restricted by default. + * + * @return An updated instance of this builder. + */ + UsernamePasswordCredentialBuilder allowUnencryptedCache() { + return null; + } + + /** + * Enables the shared token cache which is disabled by default. If enabled, the credential will store tokens + * in a cache persisted to the machine, protected to the current user, which can be shared by other credentials + * and processes. + * + * @return An updated instance of this builder with if the shared token cache enabled specified. + */ + UsernamePasswordCredentialBuilder enablePersistentCache() { + return null; + } + + /** + * Creates a new {@link UsernamePasswordCredential} with the current configurations. + * + * @return a {@link UsernamePasswordCredential} with the current configurations. + */ + public UsernamePasswordCredential build() { + return null; + } +} diff --git a/java/ql/test/stubs/azure-sdk-for-java/com/azure/security/keyvault/secrets/SecretClient.java b/java/ql/test/stubs/azure-sdk-for-java/com/azure/security/keyvault/secrets/SecretClient.java new file mode 100644 index 00000000000..94cdc7d1be7 --- /dev/null +++ b/java/ql/test/stubs/azure-sdk-for-java/com/azure/security/keyvault/secrets/SecretClient.java @@ -0,0 +1,155 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +package com.azure.security.keyvault.secrets; + +import com.azure.security.keyvault.secrets.models.KeyVaultSecret; +import com.azure.security.keyvault.secrets.models.SecretProperties; + +/** + * The SecretClient provides synchronous methods to manage {@link KeyVaultSecret secrets} in the Azure Key Vault. The client + * supports creating, retrieving, updating, deleting, purging, backing up, restoring, and listing the {@link KeyVaultSecret + * secrets}. The client also supports listing {@link DeletedSecret deleted secrets} for a soft-delete enabled Azure Key + * Vault. + * + *

    Construct the sync client

    + * {@codesnippet com.azure.security.keyvault.secretclient.sync.construct} + * + * @see SecretClientBuilder + * @see PagedIterable + */ +public final class SecretClient { + + /** + * Gets the vault endpoint url to which service requests are sent to. + * @return the vault endpoint url. + */ + public String getVaultUrl() { + return null; + } + + /** + * Adds a secret to the key vault if it does not exist. If the named secret exists, a new version of the secret is + * created. This operation requires the {@code secrets/set} permission. + * + *

    The {@link SecretProperties#getExpiresOn() expires}, {@link SecretProperties#getContentType() contentType}, + * and {@link SecretProperties#getNotBefore() notBefore} values in {@code secret} are optional. + * If not specified, {@link SecretProperties#isEnabled() enabled} is set to true by key vault.

    + * + *

    Code sample

    + *

    Creates a new secret in the key vault. Prints out the details of the newly created secret returned in the + * response.

    + * {@codesnippet com.azure.security.keyvault.secretclient.setSecret#secret} + * + * @param secret The Secret object containing information about the secret and its properties. The properties + * {@link KeyVaultSecret#getName() secret.name} and {@link KeyVaultSecret#getValue() secret.value} cannot be + * null. + * @return The {@link KeyVaultSecret created secret}. + * @throws NullPointerException if {@code secret} is {@code null}. + * @throws ResourceModifiedException if {@code secret} is malformed. + * @throws HttpResponseException if {@link KeyVaultSecret#getName() name} or {@link KeyVaultSecret#getValue() value} + * is an empty string. + */ + public KeyVaultSecret setSecret(KeyVaultSecret secret) { + return null; + } + + /** + * Adds a secret to the key vault if it does not exist. If the named secret exists, a new version of the secret is + * created. This operation requires the {@code secrets/set} permission. + * + *

    Code sample

    + *

    Creates a new secret in the key vault. Prints out the details of the newly created secret returned in the + * response.

    + * {@codesnippet com.azure.security.keyvault.secretclient.setSecret#string-string} + * + * @param name The name of the secret. It is required and cannot be null. + * @param value The value of the secret. It is required and cannot be null. + * @return The {@link KeyVaultSecret created secret}. + * @throws ResourceModifiedException if invalid {@code name} or {@code value} is specified. + * @throws HttpResponseException if {@code name} or {@code value} is empty string. + */ + public KeyVaultSecret setSecret(String name, String value) { + return null; + } + + /** + * Gets the specified secret with specified version from the key vault. This operation requires the + * {@code secrets/get} permission. + * + *

    Code sample

    + *

    Gets a specific version of the secret in the key vault. Prints out the details of the returned secret.

    + * {@codesnippet com.azure.security.keyvault.secretclient.getSecret#string-string} + * + * @param name The name of the secret, cannot be null. + * @param version The version of the secret to retrieve. If this is an empty string or null, this call is + * equivalent to calling {@link #getSecret(String)}, with the latest version being retrieved. + * @return The requested {@link KeyVaultSecret secret}. + * @throws ResourceNotFoundException when a secret with {@code name} and {@code version} doesn't exist in the + * key vault. + * @throws HttpResponseException if {@code name} or {@code version} is empty string. + */ + public KeyVaultSecret getSecret(String name, String version) { + return null; + } + + /** + * Gets the latest version of the specified secret from the key vault. + * This operation requires the {@code secrets/get} permission. + * + *

    Code sample

    + *

    Gets the latest version of the secret in the key vault. Prints out the details of the returned secret.

    + * {@codesnippet com.azure.security.keyvault.secretclient.getSecret#string} + * + * @param name The name of the secret. + * @return The requested {@link KeyVaultSecret}. + * @throws ResourceNotFoundException when a secret with {@code name} doesn't exist in the key vault. + * @throws HttpResponseException if {@code name} is empty string. + */ + public KeyVaultSecret getSecret(String name) { + return null; + } + + /** + * Updates the attributes associated with the secret. The value of the secret in the key vault cannot be changed. + * Only attributes populated in {@code secretProperties} are changed. Attributes not specified in the request are + * not changed. This operation requires the {@code secrets/set} permission. + * + *

    The {@code secret} is required and its fields {@link SecretProperties#getName() name} and + * {@link SecretProperties#getVersion() version} cannot be null.

    + * + *

    Code sample

    + *

    Gets the latest version of the secret, changes its expiry time, and the updates the secret in the key + * vault.

    + * {@codesnippet com.azure.security.keyvault.secretclient.updateSecretProperties#secretProperties} + * + * @param secretProperties The {@link SecretProperties secret properties} object with updated properties. + * @return The {@link SecretProperties updated secret}. + * @throws NullPointerException if {@code secret} is {@code null}. + * @throws ResourceNotFoundException when a secret with {@link SecretProperties#getName() name} and {@link + * SecretProperties#getVersion() version} doesn't exist in the key vault. + * @throws HttpResponseException if {@link SecretProperties#getName() name} or {@link SecretProperties#getVersion() version} is + * empty string. + */ + public SecretProperties updateSecretProperties(SecretProperties secretProperties) { + return null; + } + + /** + * Requests a backup of the secret be downloaded to the client. All versions of the secret will be downloaded. + * This operation requires the {@code secrets/backup} permission. + * + *

    Code sample

    + *

    Backs up the secret from the key vault and prints out the length of the secret's backup byte array returned in + * the response

    + * {@codesnippet com.azure.security.keyvault.secretclient.backupSecret#string} + * + * @param name The name of the secret. + * @return A {@link Response} whose {@link Response#getValue() value} contains the backed up secret blob. + * @throws ResourceNotFoundException when a secret with {@code name} doesn't exist in the key vault. + * @throws HttpResponseException when a secret with {@code name} is empty string. + */ + public byte[] backupSecret(String name) { + return null; + } +} diff --git a/java/ql/test/stubs/azure-sdk-for-java/com/azure/security/keyvault/secrets/SecretClientBuilder.java b/java/ql/test/stubs/azure-sdk-for-java/com/azure/security/keyvault/secrets/SecretClientBuilder.java new file mode 100644 index 00000000000..0a90f44f8dd --- /dev/null +++ b/java/ql/test/stubs/azure-sdk-for-java/com/azure/security/keyvault/secrets/SecretClientBuilder.java @@ -0,0 +1,92 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +package com.azure.security.keyvault.secrets; + +import com.azure.core.credential.TokenCredential; + +/** + * This class provides a fluent builder API to help aid the configuration and instantiation of the {@link + * SecretAsyncClient secret async client} and {@link SecretClient secret client}, + * by calling {@link SecretClientBuilder#buildAsyncClient() buildAsyncClient} and {@link + * SecretClientBuilder#buildClient() buildClient} respectively. + * It constructs an instance of the desired client. + * + *

    The minimal configuration options required by {@link SecretClientBuilder secretClientBuilder} to build + * {@link SecretAsyncClient} are {@link String vaultUrl} and {@link TokenCredential credential}.

    + * + * {@codesnippet com.azure.security.keyvault.secrets.async.secretclient.construct} + * + *

    Samples to construct the sync client

    + * {@codesnippet com.azure.security.keyvault.secretclient.sync.construct} + * + *

    The {@link HttpLogDetailLevel log detail level}, multiple custom {@link HttpLoggingPolicy policies} and custom + * {@link HttpClient http client} can be optionally configured in the {@link SecretClientBuilder}.

    + * + * {@codesnippet com.azure.security.keyvault.secrets.async.secretclient.withhttpclient.instantiation} + * + *

    Alternatively, custom {@link HttpPipeline http pipeline} with custom {@link HttpPipelinePolicy} policies and + * {@link String vaultUrl} + * can be specified. It provides finer control over the construction of {@link SecretAsyncClient client}

    + * + * {@codesnippet com.azure.security.keyvault.secrets.async.secretclient.pipeline.instantiation} + * + * @see SecretClient + * @see SecretAsyncClient + */ +public final class SecretClientBuilder { + /** + * The constructor with defaults. + */ + public SecretClientBuilder() { + } + + /** + * Creates a {@link SecretClient} based on options set in the builder. + * Every time {@code buildClient()} is called, a new instance of {@link SecretClient} is created. + * + *

    If {@link SecretClientBuilder#pipeline(HttpPipeline) pipeline} is set, then the {@code pipeline} and + * {@link SecretClientBuilder#vaultUrl(String) serviceEndpoint} are used to create the + * {@link SecretClientBuilder client}. All other builder settings are ignored. If {@code pipeline} is not set, + * then {@link SecretClientBuilder#credential(TokenCredential) key vault credential}, and + * {@link SecretClientBuilder#vaultUrl(String)} key vault url are required to build the {@link SecretClient + * client}.

    + * + * @return A {@link SecretClient} with the options set from the builder. + * + * @throws IllegalStateException If {@link SecretClientBuilder#credential(TokenCredential)} or + * {@link SecretClientBuilder#vaultUrl(String)} have not been set. + */ + public SecretClient buildClient() { + return null; + } + + /** + * Sets the vault URL to send HTTP requests to. + * + * @param vaultUrl The vault url is used as destination on Azure to send requests to. If you have a secret + * identifier, create a new {@link KeyVaultSecretIdentifier} to parse it and obtain the {@code vaultUrl} and + * other information. + * + * @return The updated {@link SecretClientBuilder} object. + * + * @throws IllegalArgumentException If {@code vaultUrl} is null or it cannot be parsed into a valid URL. + * @throws NullPointerException If {@code vaultUrl} is {@code null}. + */ + public SecretClientBuilder vaultUrl(String vaultUrl) { + return null; + } + + /** + * Sets the credential to use when authenticating HTTP requests. + * + * @param credential The credential to use for authenticating HTTP requests. + * + * @return The updated {@link SecretClientBuilder} object. + * + * @throws NullPointerException If {@code credential} is {@code null}. + */ + public SecretClientBuilder credential(TokenCredential credential) { + return null; + } +} diff --git a/java/ql/test/stubs/azure-sdk-for-java/com/azure/security/keyvault/secrets/models/KeyVaultSecret.java b/java/ql/test/stubs/azure-sdk-for-java/com/azure/security/keyvault/secrets/models/KeyVaultSecret.java new file mode 100644 index 00000000000..1f2f252a323 --- /dev/null +++ b/java/ql/test/stubs/azure-sdk-for-java/com/azure/security/keyvault/secrets/models/KeyVaultSecret.java @@ -0,0 +1,78 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +package com.azure.security.keyvault.secrets.models; + +import com.azure.security.keyvault.secrets.SecretClient; + +import java.util.Map; +import java.util.Objects; + +/** + * Secret is the resource consisting of name, value and its attributes specified in {@link SecretProperties}. + * It is managed by Secret Service. + * + * @see SecretClient + * @see SecretAsyncClient + */ +public class KeyVaultSecret { + /** + * Creates an empty instance of the Secret. + */ + KeyVaultSecret() { + } + + /** + * Creates a Secret with {@code name} and {@code value}. + * + * @param name The name of the secret. + * @param value the value of the secret. + */ + public KeyVaultSecret(String name, String value) { + } + + /** + * Get the value of the secret. + * + * @return the secret value + */ + public String getValue() { + return null; + } + + /** + * Get the secret identifier. + * + * @return the secret identifier. + */ + public String getId() { + return null; + } + + /** + * Get the secret name. + * + * @return the secret name. + */ + public String getName() { + return null; + } + + /** + * Get the secret properties + * @return the Secret properties + */ + public SecretProperties getProperties() { + return null; + } + + /** + * Set the secret properties + * @param properties The Secret properties + * @throws NullPointerException if {@code properties} is null. + * @return the updated secret object + */ + public KeyVaultSecret setProperties(SecretProperties properties) { + return null; + } +} diff --git a/java/ql/test/stubs/azure-sdk-for-java/com/azure/security/keyvault/secrets/models/SecretProperties.java b/java/ql/test/stubs/azure-sdk-for-java/com/azure/security/keyvault/secrets/models/SecretProperties.java new file mode 100644 index 00000000000..750db3ff177 --- /dev/null +++ b/java/ql/test/stubs/azure-sdk-for-java/com/azure/security/keyvault/secrets/models/SecretProperties.java @@ -0,0 +1,145 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +package com.azure.security.keyvault.secrets.models; + +import java.util.Map; + +import com.azure.security.keyvault.secrets.SecretClient; + +/** + * SecretProperties is the resource containing all the properties of the secret except its value. + * It is managed by the Secret Service. + * + * @see SecretClient + * @see SecretAsyncClient + */ +public class SecretProperties { + SecretProperties(String secretName) { + } + + /** + * Creates empty instance of SecretProperties. + */ + public SecretProperties() { } + + /** + * Get the secret name. + * + * @return the name of the secret. + */ + public String getName() { + return null; + } + + /** + * Get the recovery level of the secret. + + * @return the recoveryLevel of the secret. + */ + public String getRecoveryLevel() { + return null; + } + + /** + * Get the enabled value. + * + * @return the enabled value + */ + public Boolean isEnabled() { + return false; + } + + /** + * Set the enabled value. + * + * @param enabled The enabled value to set + * @throws NullPointerException if {@code enabled} is null. + * @return the SecretProperties object itself. + */ + public SecretProperties setEnabled(Boolean enabled) { + return null; + } + + /** + * Get the secret identifier. + * + * @return the secret identifier. + */ + public String getId() { + return null; + } + + /** + * Get the content type. + * + * @return the content type. + */ + public String getContentType() { + return null; + } + + /** + * Set the contentType. + * + * @param contentType The contentType to set + * @return the updated SecretProperties object itself. + */ + public SecretProperties setContentType(String contentType) { + return null; + } + + /** + * Get the tags associated with the secret. + * + * @return the value of the tags. + */ + public Map getTags() { + return null; + } + + /** + * Set the tags to be associated with the secret. + * + * @param tags The tags to set + * @return the updated SecretProperties object itself. + */ + public SecretProperties setTags(Map tags) { + return null; + } + + /** + * Get the keyId identifier. + * + * @return the keyId identifier. + */ + public String getKeyId() { + return null; + } + + /** + * Get the managed value. + * + * @return the managed value + */ + public Boolean isManaged() { + return null; + } + + /** + * Get the version of the secret. + * + * @return the version of the secret. + */ + public String getVersion() { + return null; + } + + /** + * Gets the number of days a secret is retained before being deleted for a soft delete-enabled Key Vault. + * @return the recoverable days. + */ + public Integer getRecoverableDays() { + return null; + } +} From 4d014717b6a109d61ae3f9c803092f8df27ede07 Mon Sep 17 00:00:00 2001 From: luchua-bc Date: Wed, 12 May 2021 15:50:40 +0000 Subject: [PATCH 029/741] Add a change note and reset the qhelp file --- ...hardcoded-azure-credentials-in-api-call.md | 3 ++ .../CWE-798/HardcodedCredentialsApiCall.qhelp | 30 ------------------- 2 files changed, 3 insertions(+), 30 deletions(-) create mode 100644 java/change-notes/2021-05-12-hardcoded-azure-credentials-in-api-call.md diff --git a/java/change-notes/2021-05-12-hardcoded-azure-credentials-in-api-call.md b/java/change-notes/2021-05-12-hardcoded-azure-credentials-in-api-call.md new file mode 100644 index 00000000000..48cbc7c4760 --- /dev/null +++ b/java/change-notes/2021-05-12-hardcoded-azure-credentials-in-api-call.md @@ -0,0 +1,3 @@ +lgtm,codescanning +* The query "Hard-coded credential in API call" (`java/hardcoded-credential-api-call`) + now recognizes hard-coded authentication credentials with Azure SDK for Java. diff --git a/java/ql/src/Security/CWE/CWE-798/HardcodedCredentialsApiCall.qhelp b/java/ql/src/Security/CWE/CWE-798/HardcodedCredentialsApiCall.qhelp index efcf6b15abf..231140a287e 100644 --- a/java/ql/src/Security/CWE/CWE-798/HardcodedCredentialsApiCall.qhelp +++ b/java/ql/src/Security/CWE/CWE-798/HardcodedCredentialsApiCall.qhelp @@ -32,28 +32,6 @@ Instead, the user name and password could be supplied through environment variables, which can be set externally without hard-coding credentials in the source code.

    - -

    - The following code example connects to AWS using a hard-coded access key ID and secret key: -

    - - - -

    - Instead, the access key ID and secret key could be supplied through environment variables, - which can be set externally without hard-coding credentials in the source code. -

    - -

    - The following code example connects to Azure using a hard-coded user name and password or client secret: -

    - - - -

    - Instead, the username and password or client secret could be supplied through environment variables, - which can be set externally without hard-coding credentials in the source code. -

    @@ -61,14 +39,6 @@ OWASP: Use of hard-coded password. -
  • -Microsoft: -Azure authentication with user credentials. -
  • -
  • -Amazon: -Working with AWS Credentials. -
  • From 9ef58e378c14ec721d320f9e0e678207ce456d49 Mon Sep 17 00:00:00 2001 From: luchua-bc Date: Fri, 14 May 2021 11:01:25 +0000 Subject: [PATCH 030/741] Remove the sample Java file in the src folder --- .../CWE-798/HardcodedAzureCredentials.java | 52 ------------------- 1 file changed, 52 deletions(-) delete mode 100644 java/ql/src/Security/CWE/CWE-798/HardcodedAzureCredentials.java diff --git a/java/ql/src/Security/CWE/CWE-798/HardcodedAzureCredentials.java b/java/ql/src/Security/CWE/CWE-798/HardcodedAzureCredentials.java deleted file mode 100644 index a8b52aa43a1..00000000000 --- a/java/ql/src/Security/CWE/CWE-798/HardcodedAzureCredentials.java +++ /dev/null @@ -1,52 +0,0 @@ -public class HardcodedAzureCredentials { - private final String clientId = "81734019-15a3-50t8-3253-5abe78abc3a1"; - private final String username = "username@example.onmicrosoft.com"; - private final String clientSecret = "1n1.qAc~3Q-1t38aF79Xzv5AUEfR5-ct3_"; - private final String tenantId = "22f367ce-535x-357w-2179-a33517mn166h"; - - //BAD: hard-coded username/password credentials - public void testHardcodedUsernamePassword(String input) { - UsernamePasswordCredential usernamePasswordCredential = new UsernamePasswordCredentialBuilder() - .clientId(clientId) - .username(username) - .password(clientSecret) - .build(); - - SecretClient client = new SecretClientBuilder() - .vaultUrl("https://myKeyVault.vault.azure.net") - .credential(usernamePasswordCredential) - .buildClient(); - } - - //GOOD: username/password credentials stored as environment variables - public void testEnvironmentUsernamePassword(String input) { - UsernamePasswordCredential usernamePasswordCredential = new UsernamePasswordCredentialBuilder() - .clientId(clientId) - .username(System.getenv("myUsername")) - .password(System.getenv("mySuperSecurePass")) - .build(); - - SecretClient client = new SecretClientBuilder() - .vaultUrl("https://myKeyVault.vault.azure.net") - .credential(usernamePasswordCredential) - .buildClient(); - } - - //BAD: hard-coded client secret - public void testHardcodedClientSecret(String input) { - ClientSecretCredential defaultCredential = new ClientSecretCredentialBuilder() - .clientId(clientId) - .clientSecret(clientSecret) - .tenantId(tenantId) - .build(); - } - - //GOOD: client secret stored as environment variables - public void testEnvironmentClientSecret(String input) { - ClientSecretCredential defaultCredential = new ClientSecretCredentialBuilder() - .clientId(clientId) - .clientSecret(System.getenv("myClientSecret")) - .tenantId(tenantId) - .build(); - } -} \ No newline at end of file From 1a072f3bb96281bd10f467697775836236fd3a5f Mon Sep 17 00:00:00 2001 From: luchua-bc Date: Fri, 14 May 2021 20:38:23 +0000 Subject: [PATCH 031/741] Move APIs from predicates flagged auto-generated to the other section --- java/ql/src/Security/CWE/CWE-798/SensitiveApi.qll | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/java/ql/src/Security/CWE/CWE-798/SensitiveApi.qll b/java/ql/src/Security/CWE/CWE-798/SensitiveApi.qll index 928a3562ec6..afbefb7b878 100644 --- a/java/ql/src/Security/CWE/CWE-798/SensitiveApi.qll +++ b/java/ql/src/Security/CWE/CWE-798/SensitiveApi.qll @@ -129,9 +129,7 @@ private predicate javaApiCallablePasswordParam(string s) { s = "sun.tools.jconsole.ProxyClient;ProxyClient(String, int, String, String);3" or s = "sun.tools.jconsole.ProxyClient;getProxyClient(String, int, String, String);3" or s = "sun.tools.jconsole.ProxyClient;getProxyClient(String, String, String);2" or - s = "sun.tools.jconsole.ProxyClient;getCacheKey(String, int, String, String);3" or - s = "com.amazonaws.auth.BasicAWSCredentials;BasicAWSCredentials(String, String);1" or - s = "com.azure.identity.UsernamePasswordCredentialBuilder;password(String);0" + s = "sun.tools.jconsole.ProxyClient;getCacheKey(String, int, String, String);3" } /** @@ -202,9 +200,7 @@ private predicate javaApiCallableUsernameParam(string s) { s = "sun.tools.jconsole.ProxyClient;getProxyClient(String, String, String);1" or s = "sun.tools.jconsole.ProxyClient;getConnectionName(String, String);1" or s = "sun.tools.jconsole.ProxyClient;getProxyClient(String, int, String, String);2" or - s = "sun.tools.jconsole.ProxyClient;getConnectionName(String, int, String);2" or - s = "com.amazonaws.auth.BasicAWSCredentials;BasicAWSCredentials(String, String);0" or - s = "com.azure.identity.UsernamePasswordCredentialBuilder;username(String);0" + s = "sun.tools.jconsole.ProxyClient;getConnectionName(String, int, String);2" } /** @@ -513,6 +509,9 @@ private predicate otherApiCallableCredentialParam(string s) { "org.springframework.security.core.userdetails.User;User(String, String, boolean, boolean, boolean, boolean, Collection);0" or s = "org.springframework.security.core.userdetails.User;User(String, String, boolean, boolean, boolean, boolean, Collection);1" or + s = "com.amazonaws.auth.BasicAWSCredentials;BasicAWSCredentials(String, String);0" or + s = "com.amazonaws.auth.BasicAWSCredentials;BasicAWSCredentials(String, String);1" or + s = "com.azure.identity.UsernamePasswordCredentialBuilder;username(String);0" or + s = "com.azure.identity.UsernamePasswordCredentialBuilder;password(String);0" or s = "com.azure.identity.ClientSecretCredentialBuilder;clientSecret(String);0" - } From 7af198434863fac4364bb9ad5e44896239ec44ad Mon Sep 17 00:00:00 2001 From: luchua-bc Date: Mon, 17 May 2021 11:35:35 +0000 Subject: [PATCH 032/741] Update the change note --- .../2021-05-12-hardcoded-azure-credentials-in-api-call.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/change-notes/2021-05-12-hardcoded-azure-credentials-in-api-call.md b/java/change-notes/2021-05-12-hardcoded-azure-credentials-in-api-call.md index 48cbc7c4760..a5b55ba1b6d 100644 --- a/java/change-notes/2021-05-12-hardcoded-azure-credentials-in-api-call.md +++ b/java/change-notes/2021-05-12-hardcoded-azure-credentials-in-api-call.md @@ -1,3 +1,3 @@ lgtm,codescanning * The query "Hard-coded credential in API call" (`java/hardcoded-credential-api-call`) - now recognizes hard-coded authentication credentials with Azure SDK for Java. + now recognizes hard-coded authentication credentials passed to the Azure SDK for Java. From 092fbd60d9b433dc005519c76945d5df8549244b Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Tue, 22 Jun 2021 15:31:17 +0200 Subject: [PATCH 033/741] C++: Create a new SQL interface. --- cpp/ql/src/semmle/code/cpp/security/Sql.qll | 140 ++++++++++++++++++++ 1 file changed, 140 insertions(+) create mode 100644 cpp/ql/src/semmle/code/cpp/security/Sql.qll diff --git a/cpp/ql/src/semmle/code/cpp/security/Sql.qll b/cpp/ql/src/semmle/code/cpp/security/Sql.qll new file mode 100644 index 00000000000..cd94dd0995d --- /dev/null +++ b/cpp/ql/src/semmle/code/cpp/security/Sql.qll @@ -0,0 +1,140 @@ +/** + * This file provides classes for working with various SQL libraries and frameworks. + */ + +private import cpp +private import semmle.code.cpp.models.interfaces.FunctionInputsAndOutputs + +/** + * An abstract class that represents SQL parameters and escaping functions. + * + * To add support for a new SQL framework, extend this class with + * a subclass whose characteristic predicate is a unique singleton string. + * For example, write + * + * ```ql + * class MySqlFunctionality extends SqlFunctionality { + * MySqlFunctionality() { this = "MySqlFunctionality" } + * // Override `getAnSqlParameter`. + * // Optionally override `getAnEscapedParameter`. + * } + * ``` + */ +abstract class SqlFunctionality extends string { + bindingset[this] + SqlFunctionality() { any() } + + /** + * Holds if `input` to the function `func` represents data that is passed to an SQL server. + */ + abstract predicate getAnSqlParameter(Function func, FunctionInput input); + + /** + * Holds if the `output` from `func` escapes the SQL input `input` such that is it safe to pass to + * an SQL server. + */ + predicate getAnEscapedParameter(Function func, FunctionInput input, FunctionOutput output) { + none() + } +} + +private class MySqlFunctionality extends SqlFunctionality { + MySqlFunctionality() { this = "MySqlFunctionality" } + + override predicate getAnSqlParameter(Function func, FunctionInput input) { + func.hasName(["mysql_query", "mysql_real_query"]) and + input.isParameterDeref(1) + } +} + +private class SqLite3Functionality extends SqlFunctionality { + SqLite3Functionality() { this = "SqLite3Functionality" } + + override predicate getAnSqlParameter(Function func, FunctionInput input) { + func.hasName("sqlite3_exec") and + input.isParameterDeref(1) + } +} + +private module PostgreSql { + private predicate pqxxTransactionSqlArgument(string function, int arg) { + function = "exec" and arg = 0 + or + function = "exec0" and arg = 0 + or + function = "exec1" and arg = 0 + or + function = "exec_n" and arg = 1 + or + function = "exec_params" and arg = 0 + or + function = "exec_params0" and arg = 0 + or + function = "exec_params1" and arg = 0 + or + function = "exec_params_n" and arg = 1 + or + function = "query_value" and arg = 0 + or + function = "stream" and arg = 0 + } + + private predicate pqxxConnectionSqlArgument(string function, int arg) { + function = "prepare" and arg = 1 + } + + private predicate pqxxTransationClassNames(string className, string namespace) { + namespace = "pqxx" and + className in [ + "dbtransaction", "nontransaction", "basic_robusttransaction", "robusttransaction", + "subtransaction", "transaction", "basic_transaction", "transaction_base", "work" + ] + } + + private predicate pqxxConnectionClassNames(string className, string namespace) { + namespace = "pqxx" and + className in ["connection_base", "basic_connection", "connection"] + } + + private predicate pqxxEscapeArgument(string function, int arg) { + arg = 0 and + function in ["esc", "esc_raw", "quote", "quote_raw", "quote_name", "quote_table", "esc_like"] + } + + class PostgreSqlFunctionality extends SqlFunctionality { + PostgreSqlFunctionality() { this = "PostgreSqlFunctionality" } + + override predicate getAnSqlParameter(Function func, FunctionInput input) { + exists(int argIndex, UserType t | + func.getDeclaringType() = t and + // transaction exec and connection prepare variations + ( + pqxxTransationClassNames(t.getName(), t.getNamespace().getName()) and + pqxxTransactionSqlArgument(func.getName(), argIndex) + or + pqxxConnectionClassNames(t.getName(), t.getNamespace().getName()) and + pqxxConnectionSqlArgument(func.getName(), argIndex) + ) and + input.isParameterDeref(argIndex) + ) + } + + override predicate getAnEscapedParameter( + Function func, FunctionInput input, FunctionOutput output + ) { + exists(int argIndex, UserType t | + func.getDeclaringType() = t and + // transaction and connection escape functions + ( + pqxxTransationClassNames(t.getName(), t.getNamespace().getName()) or + pqxxConnectionClassNames(t.getName(), t.getNamespace().getName()) + ) and + pqxxEscapeArgument(func.getName(), argIndex) and + input.isParameterDeref(argIndex) and + output.isReturnValueDeref() + ) + } + } +} + +private import PostgreSql From 222cd41aa33dae33f9c5c97591ef9197656e076d Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Tue, 22 Jun 2021 15:33:10 +0200 Subject: [PATCH 034/741] C++: Use the new SQL interface in 'Security.qll' and 'SqlTainted.ql'. --- cpp/ql/src/Security/CWE/CWE-089/SqlTainted.ql | 11 ++++++++++- cpp/ql/src/semmle/code/cpp/security/Security.qll | 13 ++++++------- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/cpp/ql/src/Security/CWE/CWE-089/SqlTainted.ql b/cpp/ql/src/Security/CWE/CWE-089/SqlTainted.ql index a3f935170d7..b75371c705c 100644 --- a/cpp/ql/src/Security/CWE/CWE-089/SqlTainted.ql +++ b/cpp/ql/src/Security/CWE/CWE-089/SqlTainted.ql @@ -16,6 +16,7 @@ import cpp import semmle.code.cpp.security.Security import semmle.code.cpp.security.FunctionWithWrappers import semmle.code.cpp.security.TaintTracking +import semmle.code.cpp.security.Sql import TaintedWithPath class SQLLikeFunction extends FunctionWithWrappers { @@ -30,7 +31,15 @@ class Configuration extends TaintTrackingConfiguration { } override predicate isBarrier(Expr e) { - super.isBarrier(e) or e.getUnspecifiedType() instanceof IntegralType + super.isBarrier(e) + or + e.getUnspecifiedType() instanceof IntegralType + or + exists(SqlFunctionality sql, int arg, Function func, FunctionInput input | + e = func.getACallToThisFunction().getArgument(arg) and + input.isParameterDeref(arg) and + sql.getAnEscapedParameter(func, input, _) + ) } } diff --git a/cpp/ql/src/semmle/code/cpp/security/Security.qll b/cpp/ql/src/semmle/code/cpp/security/Security.qll index d39c13a25a0..ac1b5e9f280 100644 --- a/cpp/ql/src/semmle/code/cpp/security/Security.qll +++ b/cpp/ql/src/semmle/code/cpp/security/Security.qll @@ -7,6 +7,7 @@ import semmle.code.cpp.exprs.Expr import semmle.code.cpp.commons.Environment import semmle.code.cpp.security.SecurityOptions import semmle.code.cpp.models.interfaces.FlowSource +private import Sql /** * Extend this class to customize the security queries for @@ -34,13 +35,11 @@ class SecurityOptions extends string { * An argument to a function that is passed to a SQL server. */ predicate sqlArgument(string function, int arg) { - // MySQL C API - function = "mysql_query" and arg = 1 - or - function = "mysql_real_query" and arg = 1 - or - // SQLite3 C API - function = "sqlite3_exec" and arg = 1 + exists(Function func, FunctionInput input, SqlFunctionality sql | + func.hasName(function) and + input.isParameterDeref(arg) and + sql.getAnSqlParameter(func, input) + ) } /** From 440793b5ff2226a51b78e993db35dd63ab2ad9f2 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Tue, 22 Jun 2021 15:45:58 +0200 Subject: [PATCH 035/741] C++: Move the example from the experimental CWE-089 query into a test. --- .../CWE-089/SqlTainted/SqlTainted.expected | 18 +++++++ .../Security/CWE/CWE-089/SqlTainted/test.cpp | 48 +++++++++++++++++++ 2 files changed, 66 insertions(+) create mode 100644 cpp/ql/test/query-tests/Security/CWE/CWE-089/SqlTainted/test.cpp diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-089/SqlTainted/SqlTainted.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-089/SqlTainted/SqlTainted.expected index e267dd48bba..9c16adc2a11 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-089/SqlTainted/SqlTainted.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-089/SqlTainted/SqlTainted.expected @@ -5,6 +5,14 @@ edges | test.c:15:20:15:23 | argv | test.c:21:18:21:23 | query1 | | test.c:15:20:15:23 | argv | test.c:21:18:21:23 | query1 indirection | | test.c:15:20:15:23 | argv | test.c:21:18:21:23 | query1 indirection | +| test.cpp:44:27:44:30 | argv | test.cpp:44:27:44:33 | (const char *)... | +| test.cpp:44:27:44:30 | argv | test.cpp:44:27:44:33 | (const char *)... | +| test.cpp:44:27:44:30 | argv | test.cpp:44:27:44:33 | access to array | +| test.cpp:44:27:44:30 | argv | test.cpp:44:27:44:33 | access to array | +| test.cpp:44:27:44:30 | argv | test.cpp:44:27:44:33 | access to array | +| test.cpp:44:27:44:30 | argv | test.cpp:44:27:44:33 | access to array | +| test.cpp:44:27:44:30 | argv | test.cpp:44:27:44:33 | access to array indirection | +| test.cpp:44:27:44:30 | argv | test.cpp:44:27:44:33 | access to array indirection | nodes | test.c:15:20:15:23 | argv | semmle.label | argv | | test.c:15:20:15:23 | argv | semmle.label | argv | @@ -13,5 +21,15 @@ nodes | test.c:21:18:21:23 | query1 | semmle.label | query1 | | test.c:21:18:21:23 | query1 indirection | semmle.label | query1 indirection | | test.c:21:18:21:23 | query1 indirection | semmle.label | query1 indirection | +| test.cpp:44:27:44:30 | argv | semmle.label | argv | +| test.cpp:44:27:44:30 | argv | semmle.label | argv | +| test.cpp:44:27:44:33 | (const char *)... | semmle.label | (const char *)... | +| test.cpp:44:27:44:33 | (const char *)... | semmle.label | (const char *)... | +| test.cpp:44:27:44:33 | access to array | semmle.label | access to array | +| test.cpp:44:27:44:33 | access to array | semmle.label | access to array | +| test.cpp:44:27:44:33 | access to array | semmle.label | access to array | +| test.cpp:44:27:44:33 | access to array indirection | semmle.label | access to array indirection | +| test.cpp:44:27:44:33 | access to array indirection | semmle.label | access to array indirection | #select | test.c:21:18:21:23 | query1 | test.c:15:20:15:23 | argv | test.c:21:18:21:23 | query1 | This argument to a SQL query function is derived from $@ and then passed to mysql_query(sqlArg) | test.c:15:20:15:23 | argv | user input (argv) | +| test.cpp:44:27:44:33 | access to array | test.cpp:44:27:44:30 | argv | test.cpp:44:27:44:33 | access to array | This argument to a SQL query function is derived from $@ and then passed to pqxx::work::exec1((unnamed parameter 0)) | test.cpp:44:27:44:30 | argv | user input (argv) | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-089/SqlTainted/test.cpp b/cpp/ql/test/query-tests/Security/CWE/CWE-089/SqlTainted/test.cpp new file mode 100644 index 00000000000..8bdf7dded23 --- /dev/null +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-089/SqlTainted/test.cpp @@ -0,0 +1,48 @@ +int sprintf(char* str, const char* format, ...); + +namespace std +{ + template struct char_traits; + + template class allocator { + public: + allocator() throw(); + }; + + template, class Allocator = allocator > + class basic_string { + public: + explicit basic_string(const Allocator& a = Allocator()); + basic_string(const charT* s, const Allocator& a = Allocator()); + + const charT* c_str() const; + }; + + typedef basic_string string; +} + +namespace pqxx { + struct connection {}; + + struct row {}; + struct result {}; + + struct work { + work(connection&); + + row exec1(const char*); + result exec(const std::string&); + std::string quote(const char*); + }; +} + +int main(int argc, char** argv) { + pqxx::connection c; + pqxx::work w(c); + + pqxx::row r = w.exec1(argv[1]); // BAD + + pqxx::result r2 = w.exec(w.quote(argv[1])); // GOOD + + return 0; +} \ No newline at end of file From 2e2673aff649efbf04145899e035c08b6946e745 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Tue, 22 Jun 2021 15:46:26 +0200 Subject: [PATCH 036/741] C++: Delete the experimental SqlPqxxTainted query. --- .../Security/CWE/CWE-089/SqlPqxxTainted.cpp | 28 ----- .../Security/CWE/CWE-089/SqlPqxxTainted.qhelp | 31 ----- .../Security/CWE/CWE-089/SqlPqxxTainted.ql | 113 ------------------ 3 files changed, 172 deletions(-) delete mode 100644 cpp/ql/src/experimental/Security/CWE/CWE-089/SqlPqxxTainted.cpp delete mode 100644 cpp/ql/src/experimental/Security/CWE/CWE-089/SqlPqxxTainted.qhelp delete mode 100644 cpp/ql/src/experimental/Security/CWE/CWE-089/SqlPqxxTainted.ql diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-089/SqlPqxxTainted.cpp b/cpp/ql/src/experimental/Security/CWE/CWE-089/SqlPqxxTainted.cpp deleted file mode 100644 index 3b85835fff9..00000000000 --- a/cpp/ql/src/experimental/Security/CWE/CWE-089/SqlPqxxTainted.cpp +++ /dev/null @@ -1,28 +0,0 @@ -#include -#include -#include - -int main(int argc, char ** argv) { - - if (argc != 2) { - throw std::runtime_error("Give me a string!"); - } - - pqxx::connection c; - pqxx::work w(c); - - // BAD - char *userName = argv[1]; - char query1[1000] = {0}; - sprintf(query1, "SELECT UID FROM USERS where name = \"%s\"", userName); - pqxx::row r = w.exec1(query1); - w.commit(); - std::cout << r[0].as() << std::endl; - - // GOOD - pqxx::result r2 = w.exec("SELECT " + w.quote(argv[1])); - w.commit(); - std::cout << r2[0][0].c_str() << std::endl; - - return 0; -} diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-089/SqlPqxxTainted.qhelp b/cpp/ql/src/experimental/Security/CWE/CWE-089/SqlPqxxTainted.qhelp deleted file mode 100644 index 1c01b3e4f3a..00000000000 --- a/cpp/ql/src/experimental/Security/CWE/CWE-089/SqlPqxxTainted.qhelp +++ /dev/null @@ -1,31 +0,0 @@ - - - -

    The code passes user input as part of a SQL query without escaping special elements. -It generates a SQL query to Postgres using sprintf, -with the user-supplied data directly passed as an argument -to sprintf. This leaves the code vulnerable to attack by SQL Injection.

    - -
    - - -

    Use a library routine to escape characters in the user-supplied -string before converting it to SQL. Use esc and quote pqxx library functions.

    - -
    - - - - - - -
  • MSDN Library: SQL Injection.
  • - - - - -
    -
    diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-089/SqlPqxxTainted.ql b/cpp/ql/src/experimental/Security/CWE/CWE-089/SqlPqxxTainted.ql deleted file mode 100644 index 8de55953b15..00000000000 --- a/cpp/ql/src/experimental/Security/CWE/CWE-089/SqlPqxxTainted.ql +++ /dev/null @@ -1,113 +0,0 @@ -/** - * @name Uncontrolled data in SQL query to Postgres - * @description Including user-supplied data in a SQL query to Postgres - * without neutralizing special elements can make code - * vulnerable to SQL Injection. - * @kind path-problem - * @problem.severity error - * @precision high - * @id cpp/sql-injection-via-pqxx - * @tags security - * external/cwe/cwe-089 - */ - -import cpp -import semmle.code.cpp.security.Security -import semmle.code.cpp.dataflow.TaintTracking -import DataFlow::PathGraph - -predicate pqxxTransationClassNames(string className, string namespace) { - namespace = "pqxx" and - className in [ - "dbtransaction", "nontransaction", "basic_robusttransaction", "robusttransaction", - "subtransaction", "transaction", "basic_transaction", "transaction_base", "work" - ] -} - -predicate pqxxConnectionClassNames(string className, string namespace) { - namespace = "pqxx" and - className in ["connection_base", "basic_connection", "connection"] -} - -predicate pqxxTransactionSqlArgument(string function, int arg) { - function = "exec" and arg = 0 - or - function = "exec0" and arg = 0 - or - function = "exec1" and arg = 0 - or - function = "exec_n" and arg = 1 - or - function = "exec_params" and arg = 0 - or - function = "exec_params0" and arg = 0 - or - function = "exec_params1" and arg = 0 - or - function = "exec_params_n" and arg = 1 - or - function = "query_value" and arg = 0 - or - function = "stream" and arg = 0 -} - -predicate pqxxConnectionSqlArgument(string function, int arg) { function = "prepare" and arg = 1 } - -Expr getPqxxSqlArgument() { - exists(FunctionCall fc, Expr e, int argIndex, UserType t | - // examples: 'work' for 'work.exec(...)'; '->' for 'tx->exec()'. - e = fc.getQualifier() and - // to find ConnectionHandle/TransationHandle and similar classes which override '->' operator behavior - // and return pointer to a connection/transation object - e.getType().refersTo(t) and - // transaction exec and connection prepare variations - ( - pqxxTransationClassNames(t.getName(), t.getNamespace().getName()) and - pqxxTransactionSqlArgument(fc.getTarget().getName(), argIndex) - or - pqxxConnectionClassNames(t.getName(), t.getNamespace().getName()) and - pqxxConnectionSqlArgument(fc.getTarget().getName(), argIndex) - ) and - result = fc.getArgument(argIndex) - ) -} - -predicate pqxxEscapeArgument(string function, int arg) { - arg = 0 and - function in ["esc", "esc_raw", "quote", "quote_raw", "quote_name", "quote_table", "esc_like"] -} - -predicate isEscapedPqxxArgument(Expr argExpr) { - exists(FunctionCall fc, Expr e, int argIndex, UserType t | - // examples: 'work' for 'work.exec(...)'; '->' for 'tx->exec()'. - e = fc.getQualifier() and - // to find ConnectionHandle/TransationHandle and similar classes which override '->' operator behavior - // and return pointer to a connection/transation object - e.getType().refersTo(t) and - // transaction and connection escape functions - ( - pqxxTransationClassNames(t.getName(), t.getNamespace().getName()) or - pqxxConnectionClassNames(t.getName(), t.getNamespace().getName()) - ) and - pqxxEscapeArgument(fc.getTarget().getName(), argIndex) and - // is escaped arg == argExpr - argExpr = fc.getArgument(argIndex) - ) -} - -class Configuration extends TaintTracking::Configuration { - Configuration() { this = "SqlPqxxTainted" } - - override predicate isSource(DataFlow::Node source) { isUserInput(source.asExpr(), _) } - - override predicate isSink(DataFlow::Node sink) { sink.asExpr() = getPqxxSqlArgument() } - - override predicate isSanitizer(DataFlow::Node node) { isEscapedPqxxArgument(node.asExpr()) } -} - -from DataFlow::PathNode source, DataFlow::PathNode sink, Configuration config, string taintCause -where - config.hasFlowPath(source, sink) and - isUserInput(source.getNode().asExpr(), taintCause) -select sink, source, sink, "This argument to a SQL query function is derived from $@", source, - "user input (" + taintCause + ")" From 90fe5c5aca878225ad9275a12eaa96f12e1db49b Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Tue, 22 Jun 2021 15:59:43 +0200 Subject: [PATCH 037/741] C++: Add change-note. --- cpp/change-notes/2021-06-22-sql-tainted.md | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 cpp/change-notes/2021-06-22-sql-tainted.md diff --git a/cpp/change-notes/2021-06-22-sql-tainted.md b/cpp/change-notes/2021-06-22-sql-tainted.md new file mode 100644 index 00000000000..004f96ce25b --- /dev/null +++ b/cpp/change-notes/2021-06-22-sql-tainted.md @@ -0,0 +1,2 @@ +lgtm,codescanning +* The 'Uncontrolled data in SQL query' (cpp/sql-injection) query now supports the `libpqxx` library. \ No newline at end of file From 90633b9ce1317c876786f625bd271afb227e8a61 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Wed, 23 Jun 2021 11:31:28 +0200 Subject: [PATCH 038/741] C++: Make the new SQL abstract classes extend 'Function' instead. This is more in line with how we model RemoteFlowFunction. --- cpp/ql/src/Security/CWE/CWE-089/SqlTainted.ql | 7 +- cpp/ql/src/semmle/code/cpp/models/Models.qll | 3 + .../code/cpp/models/implementations/MySql.qll | 8 + .../cpp/models/implementations/PostgreSql.qll | 93 ++++++++++++ .../cpp/models/implementations/SqLite3.qll | 8 + .../semmle/code/cpp/models/interfaces/Sql.qll | 30 ++++ .../src/semmle/code/cpp/security/Security.qll | 8 +- cpp/ql/src/semmle/code/cpp/security/Sql.qll | 140 ------------------ .../CWE-089/SqlTainted/SqlTainted.expected | 36 ++--- 9 files changed, 167 insertions(+), 166 deletions(-) create mode 100644 cpp/ql/src/semmle/code/cpp/models/implementations/MySql.qll create mode 100644 cpp/ql/src/semmle/code/cpp/models/implementations/PostgreSql.qll create mode 100644 cpp/ql/src/semmle/code/cpp/models/implementations/SqLite3.qll create mode 100644 cpp/ql/src/semmle/code/cpp/models/interfaces/Sql.qll delete mode 100644 cpp/ql/src/semmle/code/cpp/security/Sql.qll diff --git a/cpp/ql/src/Security/CWE/CWE-089/SqlTainted.ql b/cpp/ql/src/Security/CWE/CWE-089/SqlTainted.ql index b75371c705c..c108d57db23 100644 --- a/cpp/ql/src/Security/CWE/CWE-089/SqlTainted.ql +++ b/cpp/ql/src/Security/CWE/CWE-089/SqlTainted.ql @@ -16,7 +16,6 @@ import cpp import semmle.code.cpp.security.Security import semmle.code.cpp.security.FunctionWithWrappers import semmle.code.cpp.security.TaintTracking -import semmle.code.cpp.security.Sql import TaintedWithPath class SQLLikeFunction extends FunctionWithWrappers { @@ -35,10 +34,10 @@ class Configuration extends TaintTrackingConfiguration { or e.getUnspecifiedType() instanceof IntegralType or - exists(SqlFunctionality sql, int arg, Function func, FunctionInput input | - e = func.getACallToThisFunction().getArgument(arg) and + exists(SqlBarrier sqlFunc, int arg, FunctionInput input | + e = sqlFunc.getACallToThisFunction().getArgument(arg) and input.isParameterDeref(arg) and - sql.getAnEscapedParameter(func, input, _) + sqlFunc.getAnEscapedParameter(input, _) ) } } diff --git a/cpp/ql/src/semmle/code/cpp/models/Models.qll b/cpp/ql/src/semmle/code/cpp/models/Models.qll index d5c7f50dde1..f6e40d140bd 100644 --- a/cpp/ql/src/semmle/code/cpp/models/Models.qll +++ b/cpp/ql/src/semmle/code/cpp/models/Models.qll @@ -33,3 +33,6 @@ private import implementations.Recv private import implementations.Accept private import implementations.Poll private import implementations.Select +private import implementations.MySql +private import implementations.SqLite3 +private import implementations.PostgreSql diff --git a/cpp/ql/src/semmle/code/cpp/models/implementations/MySql.qll b/cpp/ql/src/semmle/code/cpp/models/implementations/MySql.qll new file mode 100644 index 00000000000..58d0ebf8a70 --- /dev/null +++ b/cpp/ql/src/semmle/code/cpp/models/implementations/MySql.qll @@ -0,0 +1,8 @@ +private import semmle.code.cpp.models.interfaces.Sql +private import semmle.code.cpp.models.interfaces.FunctionInputsAndOutputs + +private class MySqlSink extends SqlSink { + MySqlSink() { this.hasName(["mysql_query", "mysql_real_query"]) } + + override predicate getAnSqlParameter(FunctionInput input) { input.isParameterDeref(1) } +} diff --git a/cpp/ql/src/semmle/code/cpp/models/implementations/PostgreSql.qll b/cpp/ql/src/semmle/code/cpp/models/implementations/PostgreSql.qll new file mode 100644 index 00000000000..b7c11ffc0e2 --- /dev/null +++ b/cpp/ql/src/semmle/code/cpp/models/implementations/PostgreSql.qll @@ -0,0 +1,93 @@ +private import semmle.code.cpp.models.interfaces.Sql +private import semmle.code.cpp.models.interfaces.FunctionInputsAndOutputs + +private predicate pqxxTransactionSqlArgument(string function, int arg) { + function = "exec" and arg = 0 + or + function = "exec0" and arg = 0 + or + function = "exec1" and arg = 0 + or + function = "exec_n" and arg = 1 + or + function = "exec_params" and arg = 0 + or + function = "exec_params0" and arg = 0 + or + function = "exec_params1" and arg = 0 + or + function = "exec_params_n" and arg = 1 + or + function = "query_value" and arg = 0 + or + function = "stream" and arg = 0 +} + +private predicate pqxxConnectionSqlArgument(string function, int arg) { + function = "prepare" and arg = 1 +} + +private predicate pqxxTransationClassNames(string className, string namespace) { + namespace = "pqxx" and + className in [ + "dbtransaction", "nontransaction", "basic_robusttransaction", "robusttransaction", + "subtransaction", "transaction", "basic_transaction", "transaction_base", "work" + ] +} + +private predicate pqxxConnectionClassNames(string className, string namespace) { + namespace = "pqxx" and + className in ["connection_base", "basic_connection", "connection"] +} + +private predicate pqxxEscapeArgument(string function, int arg) { + arg = 0 and + function in ["esc", "esc_raw", "quote", "quote_raw", "quote_name", "quote_table", "esc_like"] +} + +private class PostgreSqlSink extends SqlSink { + PostgreSqlSink() { + exists(Class c | + this.getDeclaringType() = c and + // transaction exec and connection prepare variations + ( + pqxxTransationClassNames(c.getName(), c.getNamespace().getName()) and + pqxxTransactionSqlArgument(this.getName(), _) + or + pqxxConnectionSqlArgument(this.getName(), _) and + pqxxConnectionClassNames(c.getName(), c.getNamespace().getName()) + ) + ) + } + + override predicate getAnSqlParameter(FunctionInput input) { + exists(int argIndex | + pqxxTransactionSqlArgument(this.getName(), argIndex) + or + pqxxConnectionSqlArgument(this.getName(), argIndex) + | + input.isParameterDeref(argIndex) + ) + } +} + +private class PostgreSqlBarrier extends SqlBarrier { + PostgreSqlBarrier() { + exists(Class c | + this.getDeclaringType() = c and + // transaction and connection escape functions + ( + pqxxTransationClassNames(c.getName(), c.getNamespace().getName()) or + pqxxConnectionClassNames(c.getName(), c.getNamespace().getName()) + ) and + pqxxEscapeArgument(this.getName(), _) + ) + } + + override predicate getAnEscapedParameter(FunctionInput input, FunctionOutput output) { + exists(int argIndex | + input.isParameterDeref(argIndex) and + output.isReturnValueDeref() + ) + } +} diff --git a/cpp/ql/src/semmle/code/cpp/models/implementations/SqLite3.qll b/cpp/ql/src/semmle/code/cpp/models/implementations/SqLite3.qll new file mode 100644 index 00000000000..51e8ace9f43 --- /dev/null +++ b/cpp/ql/src/semmle/code/cpp/models/implementations/SqLite3.qll @@ -0,0 +1,8 @@ +private import semmle.code.cpp.models.interfaces.Sql +private import semmle.code.cpp.models.interfaces.FunctionInputsAndOutputs + +private class SqLite3Sink extends SqlSink { + SqLite3Sink() { this.hasName("sqlite3_exec") } + + override predicate getAnSqlParameter(FunctionInput input) { input.isParameterDeref(1) } +} diff --git a/cpp/ql/src/semmle/code/cpp/models/interfaces/Sql.qll b/cpp/ql/src/semmle/code/cpp/models/interfaces/Sql.qll new file mode 100644 index 00000000000..8eae36f5972 --- /dev/null +++ b/cpp/ql/src/semmle/code/cpp/models/interfaces/Sql.qll @@ -0,0 +1,30 @@ +/** + * Provides abstract classes for modeling functions that execute and escape SQL query strings. + * To use this QL library, create a QL class extending `SqlSink` or `SqlBarrier` with a + * characteristic predicate that selects the function or set of functions you are modeling. + * Within that class, override the predicates provided by the class to match the way a + * parameter flows into the function and, in the case of `SqlBarrier`, out of the function. + */ + +private import cpp + +/** + * An abstract class that represents a function that executes an SQL query. + */ +abstract class SqlSink extends Function { + /** + * Holds if `input` to this function represents data that is passed to an SQL server. + */ + abstract predicate getAnSqlParameter(FunctionInput input); +} + +/** + * An abstract class that represents a function that escapes an SQL query string. + */ +abstract class SqlBarrier extends Function { + /** + * Holds if the `output` escapes the SQL input `input` such that is it safe to pass to + * an `SqlSink`. + */ + abstract predicate getAnEscapedParameter(FunctionInput input, FunctionOutput output); +} diff --git a/cpp/ql/src/semmle/code/cpp/security/Security.qll b/cpp/ql/src/semmle/code/cpp/security/Security.qll index ac1b5e9f280..9927d3397cf 100644 --- a/cpp/ql/src/semmle/code/cpp/security/Security.qll +++ b/cpp/ql/src/semmle/code/cpp/security/Security.qll @@ -7,7 +7,7 @@ import semmle.code.cpp.exprs.Expr import semmle.code.cpp.commons.Environment import semmle.code.cpp.security.SecurityOptions import semmle.code.cpp.models.interfaces.FlowSource -private import Sql +import semmle.code.cpp.models.interfaces.Sql /** * Extend this class to customize the security queries for @@ -35,10 +35,10 @@ class SecurityOptions extends string { * An argument to a function that is passed to a SQL server. */ predicate sqlArgument(string function, int arg) { - exists(Function func, FunctionInput input, SqlFunctionality sql | - func.hasName(function) and + exists(FunctionInput input, SqlSink sqlSink | + sqlSink.hasName(function) and input.isParameterDeref(arg) and - sql.getAnSqlParameter(func, input) + sqlSink.getAnSqlParameter(input) ) } diff --git a/cpp/ql/src/semmle/code/cpp/security/Sql.qll b/cpp/ql/src/semmle/code/cpp/security/Sql.qll deleted file mode 100644 index cd94dd0995d..00000000000 --- a/cpp/ql/src/semmle/code/cpp/security/Sql.qll +++ /dev/null @@ -1,140 +0,0 @@ -/** - * This file provides classes for working with various SQL libraries and frameworks. - */ - -private import cpp -private import semmle.code.cpp.models.interfaces.FunctionInputsAndOutputs - -/** - * An abstract class that represents SQL parameters and escaping functions. - * - * To add support for a new SQL framework, extend this class with - * a subclass whose characteristic predicate is a unique singleton string. - * For example, write - * - * ```ql - * class MySqlFunctionality extends SqlFunctionality { - * MySqlFunctionality() { this = "MySqlFunctionality" } - * // Override `getAnSqlParameter`. - * // Optionally override `getAnEscapedParameter`. - * } - * ``` - */ -abstract class SqlFunctionality extends string { - bindingset[this] - SqlFunctionality() { any() } - - /** - * Holds if `input` to the function `func` represents data that is passed to an SQL server. - */ - abstract predicate getAnSqlParameter(Function func, FunctionInput input); - - /** - * Holds if the `output` from `func` escapes the SQL input `input` such that is it safe to pass to - * an SQL server. - */ - predicate getAnEscapedParameter(Function func, FunctionInput input, FunctionOutput output) { - none() - } -} - -private class MySqlFunctionality extends SqlFunctionality { - MySqlFunctionality() { this = "MySqlFunctionality" } - - override predicate getAnSqlParameter(Function func, FunctionInput input) { - func.hasName(["mysql_query", "mysql_real_query"]) and - input.isParameterDeref(1) - } -} - -private class SqLite3Functionality extends SqlFunctionality { - SqLite3Functionality() { this = "SqLite3Functionality" } - - override predicate getAnSqlParameter(Function func, FunctionInput input) { - func.hasName("sqlite3_exec") and - input.isParameterDeref(1) - } -} - -private module PostgreSql { - private predicate pqxxTransactionSqlArgument(string function, int arg) { - function = "exec" and arg = 0 - or - function = "exec0" and arg = 0 - or - function = "exec1" and arg = 0 - or - function = "exec_n" and arg = 1 - or - function = "exec_params" and arg = 0 - or - function = "exec_params0" and arg = 0 - or - function = "exec_params1" and arg = 0 - or - function = "exec_params_n" and arg = 1 - or - function = "query_value" and arg = 0 - or - function = "stream" and arg = 0 - } - - private predicate pqxxConnectionSqlArgument(string function, int arg) { - function = "prepare" and arg = 1 - } - - private predicate pqxxTransationClassNames(string className, string namespace) { - namespace = "pqxx" and - className in [ - "dbtransaction", "nontransaction", "basic_robusttransaction", "robusttransaction", - "subtransaction", "transaction", "basic_transaction", "transaction_base", "work" - ] - } - - private predicate pqxxConnectionClassNames(string className, string namespace) { - namespace = "pqxx" and - className in ["connection_base", "basic_connection", "connection"] - } - - private predicate pqxxEscapeArgument(string function, int arg) { - arg = 0 and - function in ["esc", "esc_raw", "quote", "quote_raw", "quote_name", "quote_table", "esc_like"] - } - - class PostgreSqlFunctionality extends SqlFunctionality { - PostgreSqlFunctionality() { this = "PostgreSqlFunctionality" } - - override predicate getAnSqlParameter(Function func, FunctionInput input) { - exists(int argIndex, UserType t | - func.getDeclaringType() = t and - // transaction exec and connection prepare variations - ( - pqxxTransationClassNames(t.getName(), t.getNamespace().getName()) and - pqxxTransactionSqlArgument(func.getName(), argIndex) - or - pqxxConnectionClassNames(t.getName(), t.getNamespace().getName()) and - pqxxConnectionSqlArgument(func.getName(), argIndex) - ) and - input.isParameterDeref(argIndex) - ) - } - - override predicate getAnEscapedParameter( - Function func, FunctionInput input, FunctionOutput output - ) { - exists(int argIndex, UserType t | - func.getDeclaringType() = t and - // transaction and connection escape functions - ( - pqxxTransationClassNames(t.getName(), t.getNamespace().getName()) or - pqxxConnectionClassNames(t.getName(), t.getNamespace().getName()) - ) and - pqxxEscapeArgument(func.getName(), argIndex) and - input.isParameterDeref(argIndex) and - output.isReturnValueDeref() - ) - } - } -} - -private import PostgreSql diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-089/SqlTainted/SqlTainted.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-089/SqlTainted/SqlTainted.expected index 9c16adc2a11..744598ed70b 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-089/SqlTainted/SqlTainted.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-089/SqlTainted/SqlTainted.expected @@ -5,14 +5,14 @@ edges | test.c:15:20:15:23 | argv | test.c:21:18:21:23 | query1 | | test.c:15:20:15:23 | argv | test.c:21:18:21:23 | query1 indirection | | test.c:15:20:15:23 | argv | test.c:21:18:21:23 | query1 indirection | -| test.cpp:44:27:44:30 | argv | test.cpp:44:27:44:33 | (const char *)... | -| test.cpp:44:27:44:30 | argv | test.cpp:44:27:44:33 | (const char *)... | -| test.cpp:44:27:44:30 | argv | test.cpp:44:27:44:33 | access to array | -| test.cpp:44:27:44:30 | argv | test.cpp:44:27:44:33 | access to array | -| test.cpp:44:27:44:30 | argv | test.cpp:44:27:44:33 | access to array | -| test.cpp:44:27:44:30 | argv | test.cpp:44:27:44:33 | access to array | -| test.cpp:44:27:44:30 | argv | test.cpp:44:27:44:33 | access to array indirection | -| test.cpp:44:27:44:30 | argv | test.cpp:44:27:44:33 | access to array indirection | +| test.cpp:43:27:43:30 | argv | test.cpp:43:27:43:33 | (const char *)... | +| test.cpp:43:27:43:30 | argv | test.cpp:43:27:43:33 | (const char *)... | +| test.cpp:43:27:43:30 | argv | test.cpp:43:27:43:33 | access to array | +| test.cpp:43:27:43:30 | argv | test.cpp:43:27:43:33 | access to array | +| test.cpp:43:27:43:30 | argv | test.cpp:43:27:43:33 | access to array | +| test.cpp:43:27:43:30 | argv | test.cpp:43:27:43:33 | access to array | +| test.cpp:43:27:43:30 | argv | test.cpp:43:27:43:33 | access to array indirection | +| test.cpp:43:27:43:30 | argv | test.cpp:43:27:43:33 | access to array indirection | nodes | test.c:15:20:15:23 | argv | semmle.label | argv | | test.c:15:20:15:23 | argv | semmle.label | argv | @@ -21,15 +21,15 @@ nodes | test.c:21:18:21:23 | query1 | semmle.label | query1 | | test.c:21:18:21:23 | query1 indirection | semmle.label | query1 indirection | | test.c:21:18:21:23 | query1 indirection | semmle.label | query1 indirection | -| test.cpp:44:27:44:30 | argv | semmle.label | argv | -| test.cpp:44:27:44:30 | argv | semmle.label | argv | -| test.cpp:44:27:44:33 | (const char *)... | semmle.label | (const char *)... | -| test.cpp:44:27:44:33 | (const char *)... | semmle.label | (const char *)... | -| test.cpp:44:27:44:33 | access to array | semmle.label | access to array | -| test.cpp:44:27:44:33 | access to array | semmle.label | access to array | -| test.cpp:44:27:44:33 | access to array | semmle.label | access to array | -| test.cpp:44:27:44:33 | access to array indirection | semmle.label | access to array indirection | -| test.cpp:44:27:44:33 | access to array indirection | semmle.label | access to array indirection | +| test.cpp:43:27:43:30 | argv | semmle.label | argv | +| test.cpp:43:27:43:30 | argv | semmle.label | argv | +| test.cpp:43:27:43:33 | (const char *)... | semmle.label | (const char *)... | +| test.cpp:43:27:43:33 | (const char *)... | semmle.label | (const char *)... | +| test.cpp:43:27:43:33 | access to array | semmle.label | access to array | +| test.cpp:43:27:43:33 | access to array | semmle.label | access to array | +| test.cpp:43:27:43:33 | access to array | semmle.label | access to array | +| test.cpp:43:27:43:33 | access to array indirection | semmle.label | access to array indirection | +| test.cpp:43:27:43:33 | access to array indirection | semmle.label | access to array indirection | #select | test.c:21:18:21:23 | query1 | test.c:15:20:15:23 | argv | test.c:21:18:21:23 | query1 | This argument to a SQL query function is derived from $@ and then passed to mysql_query(sqlArg) | test.c:15:20:15:23 | argv | user input (argv) | -| test.cpp:44:27:44:33 | access to array | test.cpp:44:27:44:30 | argv | test.cpp:44:27:44:33 | access to array | This argument to a SQL query function is derived from $@ and then passed to pqxx::work::exec1((unnamed parameter 0)) | test.cpp:44:27:44:30 | argv | user input (argv) | +| test.cpp:43:27:43:33 | access to array | test.cpp:43:27:43:30 | argv | test.cpp:43:27:43:33 | access to array | This argument to a SQL query function is derived from $@ and then passed to pqxx::work::exec1((unnamed parameter 0)) | test.cpp:43:27:43:30 | argv | user input (argv) | From df8a6b984ac54c6fe553fe987de60c85e73b1bc4 Mon Sep 17 00:00:00 2001 From: Taus Date: Tue, 13 Jul 2021 17:37:33 +0000 Subject: [PATCH 039/741] Python: Add `import *` tests Moves the current test out of `test.py`, as otherwise any unknown global (like, say, `sink`) would _also_ be considered to be something potentially defined in `unknown`. --- .../experimental/dataflow/ApiGraphs/test.py | 6 ----- .../dataflow/ApiGraphs/test_import_star.py | 23 +++++++++++++++++++ .../dataflow/ApiGraphs/test_import_star2.py | 15 ++++++++++++ 3 files changed, 38 insertions(+), 6 deletions(-) create mode 100644 python/ql/test/experimental/dataflow/ApiGraphs/test_import_star.py create mode 100644 python/ql/test/experimental/dataflow/ApiGraphs/test_import_star2.py diff --git a/python/ql/test/experimental/dataflow/ApiGraphs/test.py b/python/ql/test/experimental/dataflow/ApiGraphs/test.py index f4988e41a0f..084ada0e801 100644 --- a/python/ql/test/experimental/dataflow/ApiGraphs/test.py +++ b/python/ql/test/experimental/dataflow/ApiGraphs/test.py @@ -74,12 +74,6 @@ def f(): change_foo() sink(foo) #$ use=moduleImport("danger").getMember("SOURCE") -# Star imports - -from unknown import * #$ use=moduleImport("unknown") - -hello() #$ MISSING: use=moduleImport("unknown").getMember("hello").getReturn() - # Subclasses diff --git a/python/ql/test/experimental/dataflow/ApiGraphs/test_import_star.py b/python/ql/test/experimental/dataflow/ApiGraphs/test_import_star.py new file mode 100644 index 00000000000..5dbf03cb294 --- /dev/null +++ b/python/ql/test/experimental/dataflow/ApiGraphs/test_import_star.py @@ -0,0 +1,23 @@ +# Star imports + +from unknown import * #$ use=moduleImport("unknown") + +# Currently missing, as we do not consider `hello` to be a `LocalSourceNode`, since it has flow +# going into it from its corresponding `GlobalSsaVariable`. +hello() #$ MISSING: use=moduleImport("unknown").getMember("hello").getReturn() + +non_module_member + +outer_bar = 5 +outer_bar + +def foo(): + world() #$ use=moduleImport("unknown").getMember("world").getReturn() + bar = 5 + bar + non_module_member + print(bar) #$ use=moduleImport("builtins").getMember("print").getReturn() + +def quux(): + global non_module_member + non_module_member = 5 diff --git a/python/ql/test/experimental/dataflow/ApiGraphs/test_import_star2.py b/python/ql/test/experimental/dataflow/ApiGraphs/test_import_star2.py new file mode 100644 index 00000000000..a73f1f43548 --- /dev/null +++ b/python/ql/test/experimental/dataflow/ApiGraphs/test_import_star2.py @@ -0,0 +1,15 @@ +# Star imports in local scope + +hello2() + +def foo(): + from unknown2 import * #$ use=moduleImport("unknown2") + world2() #$ use=moduleImport("unknown2").getMember("world2").getReturn() + bar2 = 5 + bar2 + non_module_member2 + print(bar2) #$ use=moduleImport("builtins").getMember("print").getReturn() + +def quux2(): + global non_module_member2 + non_module_member2 = 5 From 8b6b4dde6924fd6660ec792611c2825cfd79ad4b Mon Sep 17 00:00:00 2001 From: Taus Date: Tue, 13 Jul 2021 18:20:25 +0000 Subject: [PATCH 040/741] Python: Refactor built-ins logic This will make it possible to reuse for names defined in `import *`. --- python/ql/src/semmle/python/ApiGraphs.qll | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/python/ql/src/semmle/python/ApiGraphs.qll b/python/ql/src/semmle/python/ApiGraphs.qll index 2969d317576..4f45bedd8da 100644 --- a/python/ql/src/semmle/python/ApiGraphs.qll +++ b/python/ql/src/semmle/python/ApiGraphs.qll @@ -424,13 +424,8 @@ module API { * a value in the module `m`. */ private predicate possible_builtin_defined_in_module(string name, Module m) { - exists(NameNode n | - not exists(LocalVariable v | n.defines(v)) and - n.isStore() and - name = n.getId() and - name = getBuiltInName() and - m = n.getEnclosingModule() - ) + global_name_defined_in_module(name, m) and + name = getBuiltInName() } /** @@ -445,6 +440,16 @@ module API { m = n.getEnclosingModule() } + /** Holds if a global variable called `name` is assigned a value in the module `m`. */ + private predicate global_name_defined_in_module(string name, Module m) { + exists(NameNode n | + not exists(LocalVariable v | n.defines(v)) and + n.isStore() and + name = n.getId() and + m = n.getEnclosingModule() + ) + } + /** * Holds if `ref` is a use of a node that should have an incoming edge from `base` labeled * `lbl` in the API graph. From c3789811c86527cbcad4064055ab542ddafc2a2b Mon Sep 17 00:00:00 2001 From: Taus Date: Tue, 13 Jul 2021 18:22:51 +0000 Subject: [PATCH 041/741] Python: Support `import *` in API graphs --- python/ql/src/semmle/python/ApiGraphs.qll | 44 +++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/python/ql/src/semmle/python/ApiGraphs.qll b/python/ql/src/semmle/python/ApiGraphs.qll index 4f45bedd8da..e0b326958a1 100644 --- a/python/ql/src/semmle/python/ApiGraphs.qll +++ b/python/ql/src/semmle/python/ApiGraphs.qll @@ -440,6 +440,23 @@ module API { m = n.getEnclosingModule() } + /** + * Holds if `n` is an access of a variable called `name` (which is _not_ the name of a + * built-in, and which is _not_ a global defined in the enclosing module) inside the scope `s`. + */ + private predicate name_possibly_defined_in_import_star(NameNode n, string name, Scope s) { + n.isLoad() and + name = n.getId() and + // Not already defined in an enclosing scope. + not exists(LocalVariable v | + v.getId() = name and v.getScope().getEnclosingScope*() = n.getScope() + ) and + not name = getBuiltInName() and + s = n.getScope().getEnclosingScope*() and + exists(potential_import_star_base(s)) and + not global_name_defined_in_module(name, n.getEnclosingModule()) + } + /** Holds if a global variable called `name` is assigned a value in the module `m`. */ private predicate global_name_defined_in_module(string name, Module m) { exists(NameNode n | @@ -450,6 +467,24 @@ module API { ) } + /** + * Gets the API graph node for all modules imported with `from ... import *` inside the scope `s`. + * + * For example, given + * + * `from foo.bar import *` + * + * this would be the API graph node with the path + * + * `moduleImport("foo").getMember("bar")` + */ + private TApiNode potential_import_star_base(Scope s) { + exists(DataFlow::Node ref | + ref.asCfgNode() = any(ImportStarNode n | n.getScope() = s).getModule() and + use(result, ref) + ) + } + /** * Holds if `ref` is a use of a node that should have an incoming edge from `base` labeled * `lbl` in the API graph. @@ -492,6 +527,15 @@ module API { // Built-ins, treated as members of the module `builtins` base = MkModuleImport("builtins") and lbl = Label::member(any(string name | ref = likely_builtin(name))) + or + // Unknown variables that may belong to a module imported with `import *` + exists(Scope s | + base = potential_import_star_base(s) and + lbl = + Label::member(any(string name | + name_possibly_defined_in_import_star(ref.asCfgNode(), name, s) + )) + ) } /** From ec9063b4a52a8dde26256232c3c1b686ba63456d Mon Sep 17 00:00:00 2001 From: Taus Date: Wed, 14 Jul 2021 13:52:32 +0000 Subject: [PATCH 042/741] Python: Add test case for github/codeql#6227 --- .../generators/UnguardedNextInGenerator.expected | 1 + python/ql/test/query-tests/Exceptions/generators/test.py | 9 +++++++++ 2 files changed, 10 insertions(+) diff --git a/python/ql/test/query-tests/Exceptions/generators/UnguardedNextInGenerator.expected b/python/ql/test/query-tests/Exceptions/generators/UnguardedNextInGenerator.expected index 289b8fb5a0d..f9772afb8b7 100644 --- a/python/ql/test/query-tests/Exceptions/generators/UnguardedNextInGenerator.expected +++ b/python/ql/test/query-tests/Exceptions/generators/UnguardedNextInGenerator.expected @@ -1,2 +1,3 @@ | test.py:5:15:5:22 | ControlFlowNode for next() | Call to next() in a generator | | test.py:10:20:10:27 | ControlFlowNode for next() | Call to next() in a generator | +| test.py:62:19:62:28 | ControlFlowNode for next() | Call to next() in a generator | diff --git a/python/ql/test/query-tests/Exceptions/generators/test.py b/python/ql/test/query-tests/Exceptions/generators/test.py index 7b7ef8c7fe2..e8b3f0b2b34 100644 --- a/python/ql/test/query-tests/Exceptions/generators/test.py +++ b/python/ql/test/query-tests/Exceptions/generators/test.py @@ -53,3 +53,12 @@ def ok5(seq): def ok6(seq): yield next(iter([]), default='foo') + +# Handling for multiple exception types, one of which is `StopIteration` +# Reported as a false positive in github/codeql#6227 +def ok7(seq, ctx): + try: + with ctx: + yield next(iter) + except (StopIteration, MemoryError): + return From 5a9fca48e8f65c09cf92e297fff4dd9c50a10efe Mon Sep 17 00:00:00 2001 From: Taus Date: Wed, 14 Jul 2021 13:53:11 +0000 Subject: [PATCH 043/741] Python: Fix `ExceptStmt::getType` We were not supporting `except` statements handling multiple exception types (specified as a tuple) correctly, instead just returning the tuple itself as the "type" (which makes little sense). To fix this, we explicitly extract the elements of this node, in the case where it _is_ a tuple. This is a change that can potentially affect many queries (as `getType` is used in quite a few places), so some care should be taken to ensure that this does not adversely affect performance. --- python/ql/src/semmle/python/Stmts.qll | 6 ++++++ .../Exceptions/generators/UnguardedNextInGenerator.expected | 1 - 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/python/ql/src/semmle/python/Stmts.qll b/python/ql/src/semmle/python/Stmts.qll index 0aa34c2a3fe..56612ef7283 100644 --- a/python/ql/src/semmle/python/Stmts.qll +++ b/python/ql/src/semmle/python/Stmts.qll @@ -153,6 +153,12 @@ class ExceptStmt extends ExceptStmt_ { override Stmt getASubStatement() { result = this.getAStmt() } override Stmt getLastStatement() { result = this.getBody().getLastItem().getLastStatement() } + + override Expr getType() { + result = super.getType() and not result instanceof Tuple + or + result = super.getType().(Tuple).getAnElt() + } } /** An assert statement, such as `assert a == b, "A is not equal to b"` */ diff --git a/python/ql/test/query-tests/Exceptions/generators/UnguardedNextInGenerator.expected b/python/ql/test/query-tests/Exceptions/generators/UnguardedNextInGenerator.expected index f9772afb8b7..289b8fb5a0d 100644 --- a/python/ql/test/query-tests/Exceptions/generators/UnguardedNextInGenerator.expected +++ b/python/ql/test/query-tests/Exceptions/generators/UnguardedNextInGenerator.expected @@ -1,3 +1,2 @@ | test.py:5:15:5:22 | ControlFlowNode for next() | Call to next() in a generator | | test.py:10:20:10:27 | ControlFlowNode for next() | Call to next() in a generator | -| test.py:62:19:62:28 | ControlFlowNode for next() | Call to next() in a generator | From 04940a11052d04e2b452e3bac86879aa5eaaa6e7 Mon Sep 17 00:00:00 2001 From: mr-sherman <77112096+mr-sherman@users.noreply.github.com> Date: Wed, 14 Jul 2021 15:54:28 -0400 Subject: [PATCH 044/741] Create 2021-07-14-service-stack-support.md --- csharp/change-notes/2021-07-14-service-stack-support.md | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 csharp/change-notes/2021-07-14-service-stack-support.md diff --git a/csharp/change-notes/2021-07-14-service-stack-support.md b/csharp/change-notes/2021-07-14-service-stack-support.md new file mode 100644 index 00000000000..bbcf868ffc9 --- /dev/null +++ b/csharp/change-notes/2021-07-14-service-stack-support.md @@ -0,0 +1,2 @@ +lgtm,codescanning +* added support for service stack framework with support for SQL injection, XSS and external API calls From 3fd0ec74f08e675adebdebc7ae49ecd46bd18261 Mon Sep 17 00:00:00 2001 From: Taus Date: Fri, 16 Jul 2021 11:30:32 +0000 Subject: [PATCH 045/741] Python: Deprecate `importNode` Unsurprisingly, the only thing affected by this was the `import-helper` tests. These have lost all of the results relating to `ImportMember`s, but apart from that the underlying behaviour should be the same. I also limited the test to only `CfgNode`s, as a bunch of `EssaNode`s suddenly appeared when I switched to API graphs. Finally, I used `API::moduleImport` with a dotted name in the type tracking tests. This goes against the API graphs interface, but I think it's more correct for this use case, as these type trackers are doing the "module attribute lookup" bit manually. --- .../2021-07-16-deprecate-importnode.md | 4 ++++ .../dataflow/new/internal/DataFlowUtil.qll | 6 +++++- .../import-helper/ImportHelper.expected | 19 ++++++++++++------- .../dataflow/import-helper/ImportHelper.ql | 5 ++++- .../dataflow/typetracking/moduleattr.ql | 3 ++- .../dataflow/typetracking/tracked.ql | 7 ++++--- 6 files changed, 31 insertions(+), 13 deletions(-) create mode 100644 python/change-notes/2021-07-16-deprecate-importnode.md diff --git a/python/change-notes/2021-07-16-deprecate-importnode.md b/python/change-notes/2021-07-16-deprecate-importnode.md new file mode 100644 index 00000000000..4acd1243943 --- /dev/null +++ b/python/change-notes/2021-07-16-deprecate-importnode.md @@ -0,0 +1,4 @@ +lgtm,codescanning +* The `importNode` predicate from the data-flow library has been deprecated. In its place, we + recommend using the API graphs library, accessible via `import semmle.python.ApiGraphs`. + \ No newline at end of file diff --git a/python/ql/src/semmle/python/dataflow/new/internal/DataFlowUtil.qll b/python/ql/src/semmle/python/dataflow/new/internal/DataFlowUtil.qll index 174564db96b..6741092ff57 100644 --- a/python/ql/src/semmle/python/dataflow/new/internal/DataFlowUtil.qll +++ b/python/ql/src/semmle/python/dataflow/new/internal/DataFlowUtil.qll @@ -18,6 +18,10 @@ predicate localFlowStep(Node nodeFrom, Node nodeTo) { simpleLocalFlowStep(nodeFr predicate localFlow(Node source, Node sink) { localFlowStep*(source, sink) } /** + * DEPRECATED. Use the API graphs library instead. + * + * For a drop-in replacement, use `API::moduleImport(name).getAUse()`. + * * Gets a `Node` that refers to the module referenced by `name`. * Note that for the statement `import pkg.mod`, the new variable introduced is `pkg` that is a * reference to the module `pkg`. @@ -37,7 +41,7 @@ predicate localFlow(Node source, Node sink) { localFlowStep*(source, sink) } * `mypkg/foo.py` but the variable `foo` containing `42` -- however, `import mypkg.foo` will always cause `mypkg.foo` * to refer to the module. */ -Node importNode(string name) { +deprecated Node importNode(string name) { exists(Variable var, Import imp, Alias alias | alias = imp.getAName() and alias.getAsname() = var.getAStore() and diff --git a/python/ql/test/experimental/dataflow/import-helper/ImportHelper.expected b/python/ql/test/experimental/dataflow/import-helper/ImportHelper.expected index 11608b04ab8..4d65bc8f960 100644 --- a/python/ql/test/experimental/dataflow/import-helper/ImportHelper.expected +++ b/python/ql/test/experimental/dataflow/import-helper/ImportHelper.expected @@ -1,23 +1,28 @@ | test1.py:1:8:1:12 | ControlFlowNode for ImportExpr | mypkg | +| test1.py:2:7:2:11 | ControlFlowNode for mypkg | mypkg | +| test1.py:4:11:4:15 | ControlFlowNode for mypkg | mypkg | | test2.py:1:6:1:10 | ControlFlowNode for ImportExpr | mypkg | | test2.py:1:6:1:10 | ControlFlowNode for ImportExpr | mypkg | -| test2.py:1:19:1:21 | ControlFlowNode for ImportMember | mypkg.foo | -| test2.py:1:24:1:26 | ControlFlowNode for ImportMember | mypkg.bar | | test3.py:1:8:1:16 | ControlFlowNode for ImportExpr | mypkg | | test3.py:2:8:2:16 | ControlFlowNode for ImportExpr | mypkg | +| test3.py:3:7:3:11 | ControlFlowNode for mypkg | mypkg | +| test3.py:4:7:4:11 | ControlFlowNode for mypkg | mypkg | | test4.py:1:8:1:16 | ControlFlowNode for ImportExpr | mypkg.foo | | test4.py:2:8:2:16 | ControlFlowNode for ImportExpr | mypkg.bar | +| test4.py:3:7:3:10 | ControlFlowNode for _foo | mypkg.foo | +| test4.py:4:7:4:10 | ControlFlowNode for _bar | mypkg.bar | | test5.py:1:8:1:12 | ControlFlowNode for ImportExpr | mypkg | +| test5.py:3:7:3:11 | ControlFlowNode for mypkg | mypkg | +| test5.py:5:11:5:15 | ControlFlowNode for mypkg | mypkg | | test5.py:9:6:9:10 | ControlFlowNode for ImportExpr | mypkg | -| test5.py:9:19:9:29 | ControlFlowNode for ImportMember | mypkg.bar | +| test5.py:10:7:10:11 | ControlFlowNode for mypkg | mypkg | | test6.py:1:8:1:12 | ControlFlowNode for ImportExpr | mypkg | +| test6.py:3:7:3:11 | ControlFlowNode for mypkg | mypkg | | test6.py:5:8:5:16 | ControlFlowNode for ImportExpr | mypkg | +| test6.py:6:7:6:11 | ControlFlowNode for mypkg | mypkg | | test7.py:1:6:1:10 | ControlFlowNode for ImportExpr | mypkg | -| test7.py:1:19:1:21 | ControlFlowNode for ImportMember | mypkg.foo | | test7.py:5:8:5:16 | ControlFlowNode for ImportExpr | mypkg | +| test7.py:7:7:7:11 | ControlFlowNode for mypkg | mypkg | | test7.py:9:6:9:10 | ControlFlowNode for ImportExpr | mypkg | -| test7.py:9:19:9:21 | ControlFlowNode for ImportMember | mypkg.foo | | test_deep.py:1:6:1:21 | ControlFlowNode for ImportExpr | start.middle.end | | test_deep.py:1:6:1:21 | ControlFlowNode for ImportExpr | start.middle.end | -| test_deep.py:1:30:1:32 | ControlFlowNode for ImportMember | start.middle.end.foo | -| test_deep.py:1:35:1:37 | ControlFlowNode for ImportMember | start.middle.end.bar | diff --git a/python/ql/test/experimental/dataflow/import-helper/ImportHelper.ql b/python/ql/test/experimental/dataflow/import-helper/ImportHelper.ql index 0af7d88d87d..082c35c3070 100644 --- a/python/ql/test/experimental/dataflow/import-helper/ImportHelper.ql +++ b/python/ql/test/experimental/dataflow/import-helper/ImportHelper.ql @@ -1,4 +1,7 @@ import python import semmle.python.dataflow.new.DataFlow +import semmle.python.ApiGraphs -query predicate importNode(DataFlow::Node res, string name) { res = DataFlow::importNode(name) } +query predicate importNode(DataFlow::CfgNode res, string name) { + res = API::moduleImport(name).getAUse() +} diff --git a/python/ql/test/experimental/dataflow/typetracking/moduleattr.ql b/python/ql/test/experimental/dataflow/typetracking/moduleattr.ql index 49a2d49c3e2..e578670885b 100644 --- a/python/ql/test/experimental/dataflow/typetracking/moduleattr.ql +++ b/python/ql/test/experimental/dataflow/typetracking/moduleattr.ql @@ -1,10 +1,11 @@ import python import semmle.python.dataflow.new.DataFlow import semmle.python.dataflow.new.TypeTracker +import semmle.python.ApiGraphs private DataFlow::TypeTrackingNode module_tracker(TypeTracker t) { t.start() and - result = DataFlow::importNode("module") + result = API::moduleImport("module").getAUse() or exists(TypeTracker t2 | result = module_tracker(t2).track(t2, t)) } diff --git a/python/ql/test/experimental/dataflow/typetracking/tracked.ql b/python/ql/test/experimental/dataflow/typetracking/tracked.ql index 617ba63314e..5748d660e43 100644 --- a/python/ql/test/experimental/dataflow/typetracking/tracked.ql +++ b/python/ql/test/experimental/dataflow/typetracking/tracked.ql @@ -2,6 +2,7 @@ import python import semmle.python.dataflow.new.DataFlow import semmle.python.dataflow.new.TypeTracker import TestUtilities.InlineExpectationsTest +import semmle.python.ApiGraphs // ----------------------------------------------------------------------------- // tracked @@ -119,7 +120,7 @@ class TrackedSelfTest extends InlineExpectationsTest { /** Gets a reference to `foo` (fictive module). */ private DataFlow::TypeTrackingNode foo(DataFlow::TypeTracker t) { t.start() and - result = DataFlow::importNode("foo") + result = API::moduleImport("foo").getAUse() or exists(DataFlow::TypeTracker t2 | result = foo(t2).track(t2, t)) } @@ -130,7 +131,7 @@ DataFlow::Node foo() { foo(DataFlow::TypeTracker::end()).flowsTo(result) } /** Gets a reference to `foo.bar` (fictive module). */ private DataFlow::TypeTrackingNode foo_bar(DataFlow::TypeTracker t) { t.start() and - result = DataFlow::importNode("foo.bar") + result = API::moduleImport("foo.bar").getAUse() or t.startInAttr("bar") and result = foo() @@ -144,7 +145,7 @@ DataFlow::Node foo_bar() { foo_bar(DataFlow::TypeTracker::end()).flowsTo(result) /** Gets a reference to `foo.bar.baz` (fictive attribute on `foo.bar` module). */ private DataFlow::TypeTrackingNode foo_bar_baz(DataFlow::TypeTracker t) { t.start() and - result = DataFlow::importNode("foo.bar.baz") + result = API::moduleImport("foo.bar.baz").getAUse() or t.startInAttr("baz") and result = foo_bar() From 4f3f93f267c6224369bdc9d5f91224ea457687db Mon Sep 17 00:00:00 2001 From: Taus Date: Fri, 16 Jul 2021 12:22:24 +0000 Subject: [PATCH 046/741] Python: Autoformat --- .../semmle/python/dataflow/new/internal/DataFlowUtil.qll | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/python/ql/src/semmle/python/dataflow/new/internal/DataFlowUtil.qll b/python/ql/src/semmle/python/dataflow/new/internal/DataFlowUtil.qll index 6741092ff57..9bdb7ede42c 100644 --- a/python/ql/src/semmle/python/dataflow/new/internal/DataFlowUtil.qll +++ b/python/ql/src/semmle/python/dataflow/new/internal/DataFlowUtil.qll @@ -18,10 +18,10 @@ predicate localFlowStep(Node nodeFrom, Node nodeTo) { simpleLocalFlowStep(nodeFr predicate localFlow(Node source, Node sink) { localFlowStep*(source, sink) } /** - * DEPRECATED. Use the API graphs library instead. - * + * DEPRECATED. Use the API graphs library (`semmle.python.ApiGraphs`) instead. + * * For a drop-in replacement, use `API::moduleImport(name).getAUse()`. - * + * * Gets a `Node` that refers to the module referenced by `name`. * Note that for the statement `import pkg.mod`, the new variable introduced is `pkg` that is a * reference to the module `pkg`. From c6c925d67aba30f81c9f8f5538059396864fb38c Mon Sep 17 00:00:00 2001 From: Porcuiney Hairs Date: Tue, 20 Jul 2021 03:31:30 +0530 Subject: [PATCH 047/741] Python : Improve Xpath Injection Query --- .../Security/CWE-643-new/Xpath.ql | 36 ++++++ .../Security/CWE-643-new/XpathInjection.qll | 35 ++++++ .../XpathInjectionCustomizations.qll | 105 ++++++++++++++++++ 3 files changed, 176 insertions(+) create mode 100644 python/ql/src/experimental/Security/CWE-643-new/Xpath.ql create mode 100644 python/ql/src/experimental/Security/CWE-643-new/XpathInjection.qll create mode 100644 python/ql/src/experimental/Security/CWE-643-new/XpathInjectionCustomizations.qll diff --git a/python/ql/src/experimental/Security/CWE-643-new/Xpath.ql b/python/ql/src/experimental/Security/CWE-643-new/Xpath.ql new file mode 100644 index 00000000000..7299eaab1e1 --- /dev/null +++ b/python/ql/src/experimental/Security/CWE-643-new/Xpath.ql @@ -0,0 +1,36 @@ +/** + * @name XPath query built from user-controlled sources + * @description Building a XPath query from user-controlled sources is vulnerable to insertion of + * malicious Xpath code by the user. + * @kind path-problem + * @problem.severity error + * @precision high + * @id py/xpath-injection-new + * @tags security + * external/cwe/cwe-643 + */ + +private import python +private import semmle.python.Concepts +private import semmle.python.dataflow.new.TaintTracking +private import semmle.python.Concepts +private import semmle.python.ApiGraphs +private import semmle.python.dataflow.new.RemoteFlowSources +private import semmle.python.dataflow.new.BarrierGuards +import XpathInjection::XpathInjection + +class XpathInjectionConfiguration extends TaintTracking::Configuration { + XpathInjectionConfiguration() { this = "PathNotNormalizedConfiguration" } + + override predicate isSource(DataFlow::Node source) { source instanceof Source } + + override predicate isSink(DataFlow::Node sink) { sink instanceof Sink } + // override predicate isAdditionalTaintStep(DataFlow::Node node1, DataFlow::Node node2) { + // exists(AdditionalFlowStep af | af.isAdditionalTaintStep(node1, node2)) + // } +} + +from XpathInjectionConfiguration config, DataFlow::PathNode source, DataFlow::PathNode sink +where config.hasFlowPath(source, sink) +select sink, source, sink, "This Xpath query depends on $@.", source, + "a user-provided value" diff --git a/python/ql/src/experimental/Security/CWE-643-new/XpathInjection.qll b/python/ql/src/experimental/Security/CWE-643-new/XpathInjection.qll new file mode 100644 index 00000000000..e0a0815666a --- /dev/null +++ b/python/ql/src/experimental/Security/CWE-643-new/XpathInjection.qll @@ -0,0 +1,35 @@ +/** + * Provides a taint-tracking configuration for detecting "Xpath Injection" vulnerabilities. + * + * Note, for performance reasons: only import this file if + * `XpathInjection::Configuration` is needed, otherwise + * `XpathInjectionCustomizations` should be imported instead. + */ + +private import python +import semmle.python.dataflow.new.DataFlow +import semmle.python.dataflow.new.TaintTracking + +/** + * Provides a taint-tracking configuration for detecting "Xpath Injection" vulnerabilities. + */ +module XpathInjection { + import XpathInjectionCustomizations::XpathInjection + + /** + * A taint-tracking configuration for detecting "Xpath Injection" vulnerabilities. + */ + class Configuration extends TaintTracking::Configuration { + Configuration() { this = "Xpath Injection" } + + override predicate isSource(DataFlow::Node source) { source instanceof Source } + + override predicate isSink(DataFlow::Node sink) { sink instanceof Sink } + + override predicate isSanitizer(DataFlow::Node node) { node instanceof Sanitizer } + + override predicate isSanitizerGuard(DataFlow::BarrierGuard guard) { + guard instanceof SanitizerGuard + } + } +} diff --git a/python/ql/src/experimental/Security/CWE-643-new/XpathInjectionCustomizations.qll b/python/ql/src/experimental/Security/CWE-643-new/XpathInjectionCustomizations.qll new file mode 100644 index 00000000000..58b6f8dad84 --- /dev/null +++ b/python/ql/src/experimental/Security/CWE-643-new/XpathInjectionCustomizations.qll @@ -0,0 +1,105 @@ +/** + * Provides class and predicates to track external data that + * may represent malicious xpath query objects. + * + * This module is intended to be imported into a taint-tracking query. + */ + +private import python +private import semmle.python.Concepts +private import semmle.python.dataflow.new.TaintTracking +private import semmle.python.Concepts +private import semmle.python.ApiGraphs +private import semmle.python.dataflow.new.RemoteFlowSources +private import semmle.python.dataflow.new.BarrierGuards + +/** Models Xpath Injection related classes and functions */ +module XpathInjection { + /** + * A data flow source for "XPath injection" vulnerabilities. + */ + abstract class Source extends DataFlow::Node { } + + /** + * A data flow sink for "XPath injection" vulnerabilities. + */ + abstract class Sink extends DataFlow::Node { } + + /** + * A sanitizer for "XPath injection" vulnerabilities. + */ + abstract class Sanitizer extends DataFlow::Node { } + + /** + * A sanitizer guard for "XPath injection" vulnerabilities. + */ + abstract class SanitizerGuard extends DataFlow::BarrierGuard { } + + /** + * A source of remote user input, considered as a flow source. + */ + class RemoteFlowSourceAsSource extends Source, RemoteFlowSource { } + + /** Returns an API node referring to `lxml.etree` */ + API::Node etree() { result = API::moduleImport("lxml").getMember("etree") } + + /** Returns an API node referring to `lxml.etree` */ + API::Node etreeFromString() { result = etree().getMember("fromstring") } + + /** Returns an API node referring to `lxml.etree.parse` */ + API::Node etreeParse() { result = etree().getMember("parse") } + + /** Returns an API node referring to `lxml.etree.parse` */ + API::Node libxml2parseFile() { result = API::moduleImport("libxml2").getMember("parseFile") } + + /** + * A Sink representing an argument to `etree.XPath` or `etree.ETXpath` call. + * + * from lxml import etree + * root = etree.XML("") + * find_text = etree.XPath("`sink`") + * find_text = etree.ETXpath("`sink`") + */ + private class EtreeXpathArgument extends Sink { + EtreeXpathArgument() { this = etree().getMember(["XPath", "ETXpath"]).getACall().getArg(0) } + } + + /** + * A Sink representing an argument to the `etree.XPath` call. + * + * from lxml import etree + * root = etree.fromstring(file(XML_DB).read(), XMLParser()) + * find_text = root.xpath("`sink`") + */ + private class EtreeFromstringXpathArgument extends Sink { + EtreeFromstringXpathArgument() { + this = etreeFromString().getReturn().getMember("xpath").getACall().getArg(0) + } + } + + /** + * A Sink representing an argument to the `xpath` call to a parsed xml document. + * + * from lxml import etree + * from io import StringIO + * f = StringIO('') + * tree = etree.parse(f) + * r = tree.xpath('`sink`') + */ + private class ParseXpathArgument extends Sink { + ParseXpathArgument() { this = etreeParse().getReturn().getMember("xpath").getACall().getArg(0) } + } + + /** + * A Sink representing an argument to the `xpathEval` call to a parsed libxml2 document. + * + * import libxml2 + * tree = libxml2.parseFile("file.xml") + * r = tree.xpathEval('`sink`') + */ + private class ParseFileXpathEvalArgument extends Sink { + ParseFileXpathEvalArgument() { + this = libxml2parseFile().getReturn().getMember("xpathEval").getACall().getArg(0) + } + } +} From f91e82678158858af60ea15b8064c6b5882dec77 Mon Sep 17 00:00:00 2001 From: Taus Date: Tue, 20 Jul 2021 11:43:52 +0000 Subject: [PATCH 048/741] Python: Add test case --- .../Variables/undefined/UninitializedLocal.expected | 1 + .../query-tests/Variables/undefined/UninitializedLocal.py | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/python/ql/test/query-tests/Variables/undefined/UninitializedLocal.expected b/python/ql/test/query-tests/Variables/undefined/UninitializedLocal.expected index f2782e7e888..5cea4a323dc 100644 --- a/python/ql/test/query-tests/Variables/undefined/UninitializedLocal.expected +++ b/python/ql/test/query-tests/Variables/undefined/UninitializedLocal.expected @@ -11,4 +11,5 @@ | UninitializedLocal.py:163:7:163:7 | x | Local variable 'x' may be used before it is initialized. | | UninitializedLocal.py:176:16:176:16 | x | Local variable 'x' may be used before it is initialized. | | UninitializedLocal.py:178:16:178:16 | y | Local variable 'y' may be used before it is initialized. | +| UninitializedLocal.py:294:14:294:22 | annotated | Local variable 'annotated' may be used before it is initialized. | | odasa3987.py:11:8:11:10 | var | Local variable 'var' may be used before it is initialized. | diff --git a/python/ql/test/query-tests/Variables/undefined/UninitializedLocal.py b/python/ql/test/query-tests/Variables/undefined/UninitializedLocal.py index f8a8d76ad15..26e109af5a2 100644 --- a/python/ql/test/query-tests/Variables/undefined/UninitializedLocal.py +++ b/python/ql/test/query-tests/Variables/undefined/UninitializedLocal.py @@ -288,3 +288,8 @@ def avoid_redundant_split(a): var = False if var: foo.bar() #foo is defined here. + +def type_annotation_fp(): + annotated : annotation = [1,2,3] + for x in annotated: + print(x) From 8b3fa789da62cba67039a78b7e5fb355eedfcbad Mon Sep 17 00:00:00 2001 From: Taus Date: Tue, 20 Jul 2021 11:57:26 +0000 Subject: [PATCH 049/741] Python: Add `AnnAssign` `DefinitionNode` This was a source of false positives for the `py/uninitialized-local-variable` query, as exemplified by the test case. --- python/ql/src/semmle/python/Flow.qll | 5 +++++ .../Variables/undefined/UninitializedLocal.expected | 1 - 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/python/ql/src/semmle/python/Flow.qll b/python/ql/src/semmle/python/Flow.qll index 83a89b053a7..beda3cef1c4 100755 --- a/python/ql/src/semmle/python/Flow.qll +++ b/python/ql/src/semmle/python/Flow.qll @@ -653,6 +653,8 @@ class DefinitionNode extends ControlFlowNode { DefinitionNode() { exists(Assign a | a.getATarget().getAFlowNode() = this) or + exists(AnnAssign a | a.getTarget().getAFlowNode() = this and exists(a.getValue())) + or exists(Alias a | a.getAsname().getAFlowNode() = this) or augstore(_, this) @@ -795,6 +797,9 @@ private AstNode assigned_value(Expr lhs) { /* lhs = result */ exists(Assign a | a.getATarget() = lhs and result = a.getValue()) or + /* lhs : annotation = result */ + exists(AnnAssign a | a.getTarget() = lhs and result = a.getValue()) + or /* import result as lhs */ exists(Alias a | a.getAsname() = lhs and result = a.getValue()) or diff --git a/python/ql/test/query-tests/Variables/undefined/UninitializedLocal.expected b/python/ql/test/query-tests/Variables/undefined/UninitializedLocal.expected index 5cea4a323dc..f2782e7e888 100644 --- a/python/ql/test/query-tests/Variables/undefined/UninitializedLocal.expected +++ b/python/ql/test/query-tests/Variables/undefined/UninitializedLocal.expected @@ -11,5 +11,4 @@ | UninitializedLocal.py:163:7:163:7 | x | Local variable 'x' may be used before it is initialized. | | UninitializedLocal.py:176:16:176:16 | x | Local variable 'x' may be used before it is initialized. | | UninitializedLocal.py:178:16:178:16 | y | Local variable 'y' may be used before it is initialized. | -| UninitializedLocal.py:294:14:294:22 | annotated | Local variable 'annotated' may be used before it is initialized. | | odasa3987.py:11:8:11:10 | var | Local variable 'var' may be used before it is initialized. | From 233ae5a54b836970a0d8fdc2ef56438664491a85 Mon Sep 17 00:00:00 2001 From: Taus Date: Tue, 20 Jul 2021 12:13:44 +0000 Subject: [PATCH 050/741] Python: Fix FP in `py/unused-local-variable` This is only a temporary fix, as indicated by the TODO comment. The real underlying issue is the fact that `isUnused` is defined in terms of the underlying SSA variables (as these are only created for variables that are actually used), and the fact that annotated assignments are always considered to redefine their targets, which may not actually be the case. Thus, the correct fix would be to change the extractor to _disregard_ mere type annotations for the purposes of figuring out whether an SSA variable should be created or not. However, in the short term the present fix is likely sufficient. --- python/ql/src/Variables/UnusedLocalVariable.ql | 12 ++++++++++++ .../Variables/unused/UnusedLocalVariable.expected | 1 - 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/python/ql/src/Variables/UnusedLocalVariable.ql b/python/ql/src/Variables/UnusedLocalVariable.ql index de83345f62d..e52c7fccaff 100644 --- a/python/ql/src/Variables/UnusedLocalVariable.ql +++ b/python/ql/src/Variables/UnusedLocalVariable.ql @@ -19,6 +19,7 @@ predicate unused_local(Name unused, LocalVariable v) { def.getVariable() = v and def.isUnused() and not exists(def.getARedef()) and + not exists(annotation_without_assignment(v)) and def.isRelevant() and not v = any(Nonlocal n).getAVariable() and not exists(def.getNode().getParentNode().(FunctionDef).getDefinedFunction().getADecorator()) and @@ -26,6 +27,17 @@ predicate unused_local(Name unused, LocalVariable v) { ) } +/** + * Gets any annotation of the local variable `v` that does not also reassign its value. + * + * TODO: This predicate should not be needed. Rather, annotated "assignments" that do not actually + * assign a value should not result in the creation of an SSA variable (which then goes unused). + */ +private AnnAssign annotation_without_assignment(LocalVariable v) { + result.getTarget() = v.getAStore() and + not exists(result.getValue()) +} + from Name unused, LocalVariable v where unused_local(unused, v) and diff --git a/python/ql/test/query-tests/Variables/unused/UnusedLocalVariable.expected b/python/ql/test/query-tests/Variables/unused/UnusedLocalVariable.expected index 339a74432bc..a902cad04cb 100644 --- a/python/ql/test/query-tests/Variables/unused/UnusedLocalVariable.expected +++ b/python/ql/test/query-tests/Variables/unused/UnusedLocalVariable.expected @@ -1,4 +1,3 @@ -| type_annotation_fp.py:5:5:5:7 | foo | The value assigned to local variable 'foo' is never used. | | variables_test.py:29:5:29:5 | x | The value assigned to local variable 'x' is never used. | | variables_test.py:89:5:89:5 | a | The value assigned to local variable 'a' is never used. | | variables_test.py:89:7:89:7 | b | The value assigned to local variable 'b' is never used. | From bbcbcefedcbff4cfd7a16cbfa904b42462f1ee88 Mon Sep 17 00:00:00 2001 From: Taus Date: Tue, 20 Jul 2021 12:54:06 +0000 Subject: [PATCH 051/741] Python: Add false negative test case. --- .../test/query-tests/Variables/unused/type_annotation_fp.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/python/ql/test/query-tests/Variables/unused/type_annotation_fp.py b/python/ql/test/query-tests/Variables/unused/type_annotation_fp.py index 72293f232e5..4f10f6e333e 100644 --- a/python/ql/test/query-tests/Variables/unused/type_annotation_fp.py +++ b/python/ql/test/query-tests/Variables/unused/type_annotation_fp.py @@ -9,3 +9,8 @@ def type_annotation(x): else: foo : float do_other_stuff_with(foo) + +def type_annotation_fn(): + # False negative: the value of `bar` is never used, but this is masked by the presence of the type annotation. + bar = 5 + bar : int From e53b86fbbca889ca8fe6371b40906c185421b83a Mon Sep 17 00:00:00 2001 From: Taus Date: Tue, 20 Jul 2021 15:19:45 +0200 Subject: [PATCH 052/741] Python: Apply suggestions from code review Co-authored-by: Rasmus Wriedt Larsen --- python/ql/src/semmle/python/ApiGraphs.qll | 2 +- .../ql/test/experimental/dataflow/ApiGraphs/test_import_star.py | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/python/ql/src/semmle/python/ApiGraphs.qll b/python/ql/src/semmle/python/ApiGraphs.qll index e0b326958a1..42b699af6aa 100644 --- a/python/ql/src/semmle/python/ApiGraphs.qll +++ b/python/ql/src/semmle/python/ApiGraphs.qll @@ -449,7 +449,7 @@ module API { name = n.getId() and // Not already defined in an enclosing scope. not exists(LocalVariable v | - v.getId() = name and v.getScope().getEnclosingScope*() = n.getScope() + v.getId() = name and v.getScope() = n.getScope().getEnclosingScope*() ) and not name = getBuiltInName() and s = n.getScope().getEnclosingScope*() and diff --git a/python/ql/test/experimental/dataflow/ApiGraphs/test_import_star.py b/python/ql/test/experimental/dataflow/ApiGraphs/test_import_star.py index 5dbf03cb294..a1d044372ae 100644 --- a/python/ql/test/experimental/dataflow/ApiGraphs/test_import_star.py +++ b/python/ql/test/experimental/dataflow/ApiGraphs/test_import_star.py @@ -6,6 +6,8 @@ from unknown import * #$ use=moduleImport("unknown") # going into it from its corresponding `GlobalSsaVariable`. hello() #$ MISSING: use=moduleImport("unknown").getMember("hello").getReturn() +# We don't want our analysis to think that either `non_module_member` or `outer_bar` can +# come from `from unknown import *` non_module_member outer_bar = 5 From 6591a86aadc36fa0fe05f9a9f10933354ed35734 Mon Sep 17 00:00:00 2001 From: Taus Date: Tue, 20 Jul 2021 13:22:23 +0000 Subject: [PATCH 053/741] Python: Add test cases I debated whether to add a `MISSING: use=moduleImport("builtins").getMember("print").getReturn()` annotation to the last line. Ultimately, I decided to add it, as we likely _do_ want this information to propagate into inner functions (even if the value of `var2` may change before `func4` is called). --- .../dataflow/ApiGraphs/test_import_star.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/python/ql/test/experimental/dataflow/ApiGraphs/test_import_star.py b/python/ql/test/experimental/dataflow/ApiGraphs/test_import_star.py index a1d044372ae..63c2e6900fd 100644 --- a/python/ql/test/experimental/dataflow/ApiGraphs/test_import_star.py +++ b/python/ql/test/experimental/dataflow/ApiGraphs/test_import_star.py @@ -23,3 +23,13 @@ def foo(): def quux(): global non_module_member non_module_member = 5 + +def func1(): + var() #$ use=moduleImport("unknown").getMember("var").getReturn() + def func2(): + var = "FOO" + +def func3(): + var2 = print #$ use=moduleImport("builtins").getMember("print") + def func4(): + var2() #$ MISSING: use=moduleImport("builtins").getMember("print").getReturn() From a34d6d390ecb8387b3c68bf79cdf9ac3eb7b4a25 Mon Sep 17 00:00:00 2001 From: jorgectf Date: Thu, 22 Jul 2021 18:34:57 +0200 Subject: [PATCH 054/741] Port to ApiGraphs and finish the query --- .../Security/CWE-090/LDAPInsecureAuth.ql | 192 ------------------ .../Security/CWE-522/LDAPInsecureAuth.ql | 20 ++ .../experimental/semmle/python/Concepts.qll | 23 +++ .../semmle/python/frameworks/LDAP.qll | 54 +++++ .../python/security/LDAPInsecureAuth.qll | 108 ++++++++++ .../CWE-522/LDAPInsecureAuth.expected | 39 ++++ .../Security/CWE-522/LDAPInsecureAuth.qlref | 1 + .../Security/CWE-522/ldap2_private.py} | 0 .../Security/CWE-522/ldap2_remote.py} | 0 .../Security/CWE-522/ldap3_private.py} | 2 +- .../Security/CWE-522/ldap3_remote.py} | 0 11 files changed, 246 insertions(+), 193 deletions(-) delete mode 100644 python/ql/src/experimental/Security/CWE-090/LDAPInsecureAuth.ql create mode 100644 python/ql/src/experimental/Security/CWE-522/LDAPInsecureAuth.ql create mode 100644 python/ql/src/experimental/semmle/python/security/LDAPInsecureAuth.qll create mode 100644 python/ql/test/experimental/query-tests/Security/CWE-522/LDAPInsecureAuth.expected create mode 100644 python/ql/test/experimental/query-tests/Security/CWE-522/LDAPInsecureAuth.qlref rename python/ql/{src/experimental/Security/CWE-090/tests/2_private.py => test/experimental/query-tests/Security/CWE-522/ldap2_private.py} (100%) rename python/ql/{src/experimental/Security/CWE-090/tests/2_remote.py => test/experimental/query-tests/Security/CWE-522/ldap2_remote.py} (100%) rename python/ql/{src/experimental/Security/CWE-090/tests/3_private.py => test/experimental/query-tests/Security/CWE-522/ldap3_private.py} (98%) rename python/ql/{src/experimental/Security/CWE-090/tests/3_remote.py => test/experimental/query-tests/Security/CWE-522/ldap3_remote.py} (100%) diff --git a/python/ql/src/experimental/Security/CWE-090/LDAPInsecureAuth.ql b/python/ql/src/experimental/Security/CWE-090/LDAPInsecureAuth.ql deleted file mode 100644 index ba31bb8a287..00000000000 --- a/python/ql/src/experimental/Security/CWE-090/LDAPInsecureAuth.ql +++ /dev/null @@ -1,192 +0,0 @@ -/** - * @name Python Insecure LDAP Authentication - * @description Python LDAP Insecure LDAP Authentication - * @kind path-problem - * @problem.severity error - * @id python/insecure-ldap-auth - * @tags experimental - * security - * external/cwe/cwe-090 - */ - -// Determine precision above -import python -import semmle.python.dataflow.new.RemoteFlowSources -import semmle.python.dataflow.new.DataFlow -import semmle.python.dataflow.new.TaintTracking -import semmle.python.dataflow.new.internal.TaintTrackingPublic -import DataFlow::PathGraph - -class FalseArg extends ControlFlowNode { - FalseArg() { this.getNode().(Expr).(BooleanLiteral) instanceof False } -} - -// From luchua-bc's Insecure LDAP authentication in Java (to reduce false positives) -string getFullHostRegex() { result = "(?i)ldap://[\\[a-zA-Z0-9].*" } - -string getSchemaRegex() { result = "(?i)ldap(://)?" } - -string getPrivateHostRegex() { - result = - "(?i)localhost(?:[:/?#].*)?|127\\.0\\.0\\.1(?:[:/?#].*)?|10(?:\\.[0-9]+){3}(?:[:/?#].*)?|172\\.16(?:\\.[0-9]+){2}(?:[:/?#].*)?|192.168(?:\\.[0-9]+){2}(?:[:/?#].*)?|\\[?0:0:0:0:0:0:0:1\\]?(?:[:/?#].*)?|\\[?::1\\]?(?:[:/?#].*)?" -} - -// "ldap://somethingon.theinternet.com" -class LDAPFullHost extends StrConst { - LDAPFullHost() { - exists(string s | - s = this.getText() and - s.regexpMatch(getFullHostRegex()) and - not s.substring(7, s.length()).regexpMatch(getPrivateHostRegex()) // No need to check for ldaps, would be SSL by default. - ) - } -} - -class LDAPSchema extends StrConst { - LDAPSchema() { this.getText().regexpMatch(getSchemaRegex()) } -} - -class LDAPPrivateHost extends StrConst { - LDAPPrivateHost() { this.getText().regexpMatch(getPrivateHostRegex()) } -} - -predicate concatAndCompareAgainstFullHostRegex(Expr schema, Expr host) { - schema instanceof LDAPSchema and - not host instanceof LDAPPrivateHost and - exists(string full_host | - full_host = schema.(StrConst).getText() + host.(StrConst).getText() and - full_host.regexpMatch(getFullHostRegex()) - ) -} - -// "ldap://" + "somethingon.theinternet.com" -class LDAPBothStrings extends BinaryExpr { - LDAPBothStrings() { concatAndCompareAgainstFullHostRegex(this.getLeft(), this.getRight()) } -} - -// schema + host -class LDAPBothVar extends BinaryExpr { - LDAPBothVar() { - exists(SsaVariable schemaVar, SsaVariable hostVar | - this.getLeft() = schemaVar.getVariable().getALoad() and // getAUse is incompatible with Expr - this.getRight() = hostVar.getVariable().getALoad() and - concatAndCompareAgainstFullHostRegex(schemaVar - .getDefinition() - .getImmediateDominator() - .getNode(), hostVar.getDefinition().getImmediateDominator().getNode()) - ) - } -} - -// schema + "somethingon.theinternet.com" -class LDAPVarString extends BinaryExpr { - LDAPVarString() { - exists(SsaVariable schemaVar | - this.getLeft() = schemaVar.getVariable().getALoad() and - concatAndCompareAgainstFullHostRegex(schemaVar - .getDefinition() - .getImmediateDominator() - .getNode(), this.getRight()) - ) - } -} - -// "ldap://" + host -class LDAPStringVar extends BinaryExpr { - LDAPStringVar() { - exists(SsaVariable hostVar | - this.getRight() = hostVar.getVariable().getALoad() and - concatAndCompareAgainstFullHostRegex(this.getLeft(), - hostVar.getDefinition().getImmediateDominator().getNode()) - ) - } -} - -class LDAPInsecureAuthSource extends DataFlow::Node { - LDAPInsecureAuthSource() { - this instanceof RemoteFlowSource or - this.asExpr() instanceof LDAPBothStrings or - this.asExpr() instanceof LDAPBothVar or - this.asExpr() instanceof LDAPVarString or - this.asExpr() instanceof LDAPStringVar - } -} - -class SafeLDAPOptions extends ControlFlowNode { - SafeLDAPOptions() { - this = Value::named("ldap.OPT_X_TLS_ALLOW").getAReference() or - this = Value::named("ldap.OPT_X_TLS_TRY").getAReference() or - this = Value::named("ldap.OPT_X_TLS_DEMAND").getAReference() or - this = Value::named("ldap.OPT_X_TLS_HARD").getAReference() - } -} - -// LDAP3 -class LDAPInsecureAuthSink extends DataFlow::Node { - LDAPInsecureAuthSink() { - exists(SsaVariable connVar, CallNode connCall, SsaVariable srvVar, CallNode srvCall | - // set connCall as a Call to ldap3.Connection - connCall = Value::named("ldap3.Connection").getACall() and - // get variable whose definition is a call to ldap3.Connection to correlate ldap3.Server and Connection.start_tls() - connVar.getDefinition().getImmediateDominator() = connCall and - // get connCall's first argument variable definition - srvVar.getAUse() = connCall.getArg(0) and - /* - * // restrict srvVar definition to a ldap3.Server Call - * srvCall = Value::named("ldap3.Server").getACall() and - * srvVar.getDefinition().getImmediateDominator() = srvCall - * // redundant? ldap3.Connection's first argument *must* be ldap3.Server - */ - - // set srvCall as srvVar definition's call - srvVar.getDefinition().getImmediateDominator() = srvCall and - // set ldap3.Server's 1st argument as sink - this.asExpr() = srvCall.getArg(0).getNode() and - ( - // check ldap3.Server call's 3rd argument (positional) is null and there's no use_ssl - count(srvCall.getAnArg()) < 3 and - count(srvCall.getArgByName("use_ssl")) = 0 - or - // check ldap3.Server call's 3rd argument is False - srvCall.getAnArg() instanceof FalseArg - or - // check ldap3.Server argByName "use_ssl" is False - srvCall.getArgByName("use_ssl") instanceof FalseArg - ) and - /* - * Avoid flow through any function (Server()) whose variable declaring it (srv) is the first - * argument in any function (Connection()) whose variable declaring it also calls .start_tls - */ - - /* - * host = schema + "somethingon.theinternet.com" - * srv = Server(host, port = 1337) - * conn = Connection(srv, "dn", "password") - * conn.start_tls() ! - */ - - not connVar - .getAUse() - .getImmediateDominator() - .(CallNode) - .getNode() - .getFunc() - .(Attribute) - .getName() - .matches("start_tls") - ) - } -} - -class LDAPInsecureAuthConfig extends TaintTracking::Configuration { - LDAPInsecureAuthConfig() { this = "LDAPInsecureAuthConfig" } - - override predicate isSource(DataFlow::Node source) { source instanceof LDAPInsecureAuthSource } - - override predicate isSink(DataFlow::Node sink) { sink instanceof LDAPInsecureAuthSink } -} - -from LDAPInsecureAuthConfig config, DataFlow::PathNode source, DataFlow::PathNode sink -where config.hasFlowPath(source, sink) -select sink.getNode(), source, sink, "$@ from $@ is authenticated insecurely.", source.getNode(), - "The host", sink.getNode(), "this LDAP query" diff --git a/python/ql/src/experimental/Security/CWE-522/LDAPInsecureAuth.ql b/python/ql/src/experimental/Security/CWE-522/LDAPInsecureAuth.ql new file mode 100644 index 00000000000..9899eae932f --- /dev/null +++ b/python/ql/src/experimental/Security/CWE-522/LDAPInsecureAuth.ql @@ -0,0 +1,20 @@ +/** + * @name Python Insecure LDAP Authentication + * @description Python LDAP Insecure LDAP Authentication + * @kind path-problem + * @problem.severity error + * @id python/insecure-ldap-auth + * @tags experimental + * security + * external/cwe/cwe-522 + */ + +// determine precision above +import python +import DataFlow::PathGraph +import experimental.semmle.python.security.LDAPInsecureAuth + +from LDAPInsecureAuthConfig config, DataFlow::PathNode source, DataFlow::PathNode sink +where config.hasFlowPath(source, sink) +select sink.getNode(), source, sink, "$@ is authenticated insecurely.", sink.getNode(), + "This LDAP host" diff --git a/python/ql/src/experimental/semmle/python/Concepts.qll b/python/ql/src/experimental/semmle/python/Concepts.qll index 42af8abd64a..b848cb15381 100644 --- a/python/ql/src/experimental/semmle/python/Concepts.qll +++ b/python/ql/src/experimental/semmle/python/Concepts.qll @@ -156,10 +156,20 @@ module LDAPBind { * extend `LDAPBind` instead. */ abstract class Range extends DataFlow::Node { + /** + * Gets the argument containing the binding host. + */ + abstract DataFlow::Node getHost(); + /** * Gets the argument containing the binding expression. */ abstract DataFlow::Node getPassword(); + + /** + * Checks if the binding process use SSL. + */ + abstract predicate useSSL(); } } @@ -174,5 +184,18 @@ class LDAPBind extends DataFlow::Node { LDAPBind() { this = range } + /** + * Gets the argument containing the binding host. + */ + DataFlow::Node getHost() { result = range.getHost() } + + /** + * Gets the argument containing the binding expression. + */ DataFlow::Node getPassword() { result = range.getPassword() } + + /** + * Checks if the binding process use SSL. + */ + predicate useSSL() { range.useSSL() } } diff --git a/python/ql/src/experimental/semmle/python/frameworks/LDAP.qll b/python/ql/src/experimental/semmle/python/frameworks/LDAP.qll index 9d115959f19..ed2ba3a5817 100644 --- a/python/ql/src/experimental/semmle/python/frameworks/LDAP.qll +++ b/python/ql/src/experimental/semmle/python/frameworks/LDAP.qll @@ -99,6 +99,42 @@ private module LDAP { override DataFlow::Node getPassword() { result in [this.getArg(1), this.getArgByName("cred")] } + + override DataFlow::Node getHost() { + exists(DataFlow::CallCfgNode initialize | + this.getFunction().(DataFlow::AttrRead).getObject().getALocalSource() = initialize and + initialize = ldapInitialize().getACall() and + result = initialize.getArg(0) + ) + } + + override predicate useSSL() { + // use initialize to correlate `this` and so avoid FP in several instances + exists(DataFlow::CallCfgNode initialize | + this.getFunction().(DataFlow::AttrRead).getObject().getALocalSource() = initialize and + initialize = ldapInitialize().getACall() and + ( + // ldap_connection.start_tls_s() + exists(DataFlow::AttrRead startTLS | + startTLS.getObject().getALocalSource() = initialize and + startTLS.getAttributeName().matches("%start_tls%") + ) + or + // ldap_connection.set_option(ldap.OPT_X_TLS_%s, True) + // ldap_connection.set_option(ldap.OPT_X_TLS_%s) + exists(DataFlow::CallCfgNode setOption | + setOption.getFunction().(DataFlow::AttrRead).getObject().getALocalSource() = + initialize and + setOption.getFunction().(DataFlow::AttrRead).getAttributeName() = "set_option" and + setOption.getArg(0) = + ldap().getMember("OPT_X_TLS_" + ["ALLOW", "TRY", "DEMAND", "HARD"]).getAUse() and + not DataFlow::exprNode(any(False falseExpr)) + .(DataFlow::LocalSourceNode) + .flowsTo(setOption.getArg(1)) + ) + ) + ) + } } /** @@ -166,6 +202,24 @@ private module LDAP { override DataFlow::Node getPassword() { result in [this.getArg(2), this.getArgByName("password")] } + + override DataFlow::Node getHost() { + exists(DataFlow::CallCfgNode serverCall | + serverCall = ldap3Server().getACall() and + this.getArg(0).getALocalSource() = serverCall and + result = serverCall.getArg(0) + ) + } + + override predicate useSSL() { + exists(DataFlow::CallCfgNode serverCall | + serverCall = ldap3Server().getACall() and + this.getArg(0).getALocalSource() = serverCall and + DataFlow::exprNode(any(True trueExpr)) + .(DataFlow::LocalSourceNode) + .flowsTo([serverCall.getArg(2), serverCall.getArgByName("use_ssl")]) + ) + } } /** diff --git a/python/ql/src/experimental/semmle/python/security/LDAPInsecureAuth.qll b/python/ql/src/experimental/semmle/python/security/LDAPInsecureAuth.qll new file mode 100644 index 00000000000..53b3745cc62 --- /dev/null +++ b/python/ql/src/experimental/semmle/python/security/LDAPInsecureAuth.qll @@ -0,0 +1,108 @@ +/** + * Provides a taint-tracking configuration for detecting LDAP injection vulnerabilities + */ + +import python +import semmle.python.dataflow.new.DataFlow +import semmle.python.dataflow.new.TaintTracking +import semmle.python.dataflow.new.RemoteFlowSources +import experimental.semmle.python.Concepts + +string getFullHostRegex() { result = "(?i)ldap://[\\[a-zA-Z0-9].*" } + +string getSchemaRegex() { result = "(?i)ldap(://)?" } + +string getPrivateHostRegex() { + result = + "(?i)localhost(?:[:/?#].*)?|127\\.0\\.0\\.1(?:[:/?#].*)?|10(?:\\.[0-9]+){3}(?:[:/?#].*)?|172\\.16(?:\\.[0-9]+){2}(?:[:/?#].*)?|192.168(?:\\.[0-9]+){2}(?:[:/?#].*)?|\\[?0:0:0:0:0:0:0:1\\]?(?:[:/?#].*)?|\\[?::1\\]?(?:[:/?#].*)?" +} + +// "ldap://somethingon.theinternet.com" +class LDAPFullHost extends StrConst { + LDAPFullHost() { + exists(string s | + s = this.getText() and + s.regexpMatch(getFullHostRegex()) and + not s.substring(7, s.length()).regexpMatch(getPrivateHostRegex()) // No need to check for ldaps, it would be SSL by default. + ) + } +} + +class LDAPSchema extends StrConst { + LDAPSchema() { this.getText().regexpMatch(getSchemaRegex()) } +} + +class LDAPPrivateHost extends StrConst { + LDAPPrivateHost() { this.getText().regexpMatch(getPrivateHostRegex()) } +} + +predicate concatAndCompareAgainstFullHostRegex(Expr schema, Expr host) { + schema instanceof LDAPSchema and + not host instanceof LDAPPrivateHost and + exists(string full_host | + full_host = schema.(StrConst).getText() + host.(StrConst).getText() and + full_host.regexpMatch(getFullHostRegex()) + ) +} + +// "ldap://" + "somethingon.theinternet.com" +class LDAPBothStrings extends BinaryExpr { + LDAPBothStrings() { concatAndCompareAgainstFullHostRegex(this.getLeft(), this.getRight()) } +} + +// schema + host +class LDAPBothVar extends BinaryExpr { + LDAPBothVar() { + exists(SsaVariable schemaVar, SsaVariable hostVar | + this.getLeft() = schemaVar.getVariable().getALoad() and // getAUse is incompatible with Expr + this.getRight() = hostVar.getVariable().getALoad() and + concatAndCompareAgainstFullHostRegex(schemaVar + .getDefinition() + .getImmediateDominator() + .getNode(), hostVar.getDefinition().getImmediateDominator().getNode()) + ) + } +} + +// schema + "somethingon.theinternet.com" +class LDAPVarString extends BinaryExpr { + LDAPVarString() { + exists(SsaVariable schemaVar | + this.getLeft() = schemaVar.getVariable().getALoad() and + concatAndCompareAgainstFullHostRegex(schemaVar + .getDefinition() + .getImmediateDominator() + .getNode(), this.getRight()) + ) + } +} + +// "ldap://" + host +class LDAPStringVar extends BinaryExpr { + LDAPStringVar() { + exists(SsaVariable hostVar | + this.getRight() = hostVar.getVariable().getALoad() and + concatAndCompareAgainstFullHostRegex(this.getLeft(), + hostVar.getDefinition().getImmediateDominator().getNode()) + ) + } +} + +/** + * A taint-tracking configuration for detecting LDAP injections. + */ +class LDAPInsecureAuthConfig extends TaintTracking::Configuration { + LDAPInsecureAuthConfig() { this = "LDAPInsecureAuthConfig" } + + override predicate isSource(DataFlow::Node source) { + source instanceof RemoteFlowSource or + source.asExpr() instanceof LDAPBothStrings or + source.asExpr() instanceof LDAPBothVar or + source.asExpr() instanceof LDAPVarString or + source.asExpr() instanceof LDAPStringVar + } + + override predicate isSink(DataFlow::Node sink) { + exists(LDAPBind ldapBind | not ldapBind.useSSL() and sink = ldapBind.getHost()) + } +} diff --git a/python/ql/test/experimental/query-tests/Security/CWE-522/LDAPInsecureAuth.expected b/python/ql/test/experimental/query-tests/Security/CWE-522/LDAPInsecureAuth.expected new file mode 100644 index 00000000000..fdcb414b981 --- /dev/null +++ b/python/ql/test/experimental/query-tests/Security/CWE-522/LDAPInsecureAuth.expected @@ -0,0 +1,39 @@ +edges +| ldap3_remote.py:49:12:49:34 | ControlFlowNode for BinaryExpr | ldap3_remote.py:51:18:51:21 | ControlFlowNode for host | +| ldap3_remote.py:88:21:88:27 | ControlFlowNode for request | ldap3_remote.py:88:21:88:32 | ControlFlowNode for Attribute | +| ldap3_remote.py:88:21:88:32 | ControlFlowNode for Attribute | ldap3_remote.py:88:21:88:40 | ControlFlowNode for Subscript | +| ldap3_remote.py:88:21:88:40 | ControlFlowNode for Subscript | ldap3_remote.py:90:18:90:21 | ControlFlowNode for host | +| ldap3_remote.py:101:12:101:49 | ControlFlowNode for BinaryExpr | ldap3_remote.py:102:18:102:21 | ControlFlowNode for host | +| ldap3_remote.py:114:12:114:49 | ControlFlowNode for BinaryExpr | ldap3_remote.py:115:18:115:21 | ControlFlowNode for host | +| ldap3_remote.py:126:12:126:31 | ControlFlowNode for BinaryExpr | ldap3_remote.py:127:18:127:21 | ControlFlowNode for host | +| ldap3_remote.py:138:21:138:27 | ControlFlowNode for request | ldap3_remote.py:138:21:138:32 | ControlFlowNode for Attribute | +| ldap3_remote.py:138:21:138:32 | ControlFlowNode for Attribute | ldap3_remote.py:138:21:138:40 | ControlFlowNode for Subscript | +| ldap3_remote.py:138:21:138:40 | ControlFlowNode for Subscript | ldap3_remote.py:139:18:139:21 | ControlFlowNode for host | +nodes +| ldap2_remote.py:45:41:45:60 | ControlFlowNode for BinaryExpr | semmle.label | ControlFlowNode for BinaryExpr | +| ldap2_remote.py:56:41:56:60 | ControlFlowNode for BinaryExpr | semmle.label | ControlFlowNode for BinaryExpr | +| ldap3_remote.py:49:12:49:34 | ControlFlowNode for BinaryExpr | semmle.label | ControlFlowNode for BinaryExpr | +| ldap3_remote.py:51:18:51:21 | ControlFlowNode for host | semmle.label | ControlFlowNode for host | +| ldap3_remote.py:88:21:88:27 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| ldap3_remote.py:88:21:88:32 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | +| ldap3_remote.py:88:21:88:40 | ControlFlowNode for Subscript | semmle.label | ControlFlowNode for Subscript | +| ldap3_remote.py:90:18:90:21 | ControlFlowNode for host | semmle.label | ControlFlowNode for host | +| ldap3_remote.py:101:12:101:49 | ControlFlowNode for BinaryExpr | semmle.label | ControlFlowNode for BinaryExpr | +| ldap3_remote.py:102:18:102:21 | ControlFlowNode for host | semmle.label | ControlFlowNode for host | +| ldap3_remote.py:114:12:114:49 | ControlFlowNode for BinaryExpr | semmle.label | ControlFlowNode for BinaryExpr | +| ldap3_remote.py:115:18:115:21 | ControlFlowNode for host | semmle.label | ControlFlowNode for host | +| ldap3_remote.py:126:12:126:31 | ControlFlowNode for BinaryExpr | semmle.label | ControlFlowNode for BinaryExpr | +| ldap3_remote.py:127:18:127:21 | ControlFlowNode for host | semmle.label | ControlFlowNode for host | +| ldap3_remote.py:138:21:138:27 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| ldap3_remote.py:138:21:138:32 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | +| ldap3_remote.py:138:21:138:40 | ControlFlowNode for Subscript | semmle.label | ControlFlowNode for Subscript | +| ldap3_remote.py:139:18:139:21 | ControlFlowNode for host | semmle.label | ControlFlowNode for host | +#select +| ldap2_remote.py:45:41:45:60 | ControlFlowNode for BinaryExpr | ldap2_remote.py:45:41:45:60 | ControlFlowNode for BinaryExpr | ldap2_remote.py:45:41:45:60 | ControlFlowNode for BinaryExpr | $@ is authenticated insecurely. | ldap2_remote.py:45:41:45:60 | ControlFlowNode for BinaryExpr | This LDAP host | +| ldap2_remote.py:56:41:56:60 | ControlFlowNode for BinaryExpr | ldap2_remote.py:56:41:56:60 | ControlFlowNode for BinaryExpr | ldap2_remote.py:56:41:56:60 | ControlFlowNode for BinaryExpr | $@ is authenticated insecurely. | ldap2_remote.py:56:41:56:60 | ControlFlowNode for BinaryExpr | This LDAP host | +| ldap3_remote.py:51:18:51:21 | ControlFlowNode for host | ldap3_remote.py:49:12:49:34 | ControlFlowNode for BinaryExpr | ldap3_remote.py:51:18:51:21 | ControlFlowNode for host | $@ is authenticated insecurely. | ldap3_remote.py:51:18:51:21 | ControlFlowNode for host | This LDAP host | +| ldap3_remote.py:90:18:90:21 | ControlFlowNode for host | ldap3_remote.py:88:21:88:27 | ControlFlowNode for request | ldap3_remote.py:90:18:90:21 | ControlFlowNode for host | $@ is authenticated insecurely. | ldap3_remote.py:90:18:90:21 | ControlFlowNode for host | This LDAP host | +| ldap3_remote.py:102:18:102:21 | ControlFlowNode for host | ldap3_remote.py:101:12:101:49 | ControlFlowNode for BinaryExpr | ldap3_remote.py:102:18:102:21 | ControlFlowNode for host | $@ is authenticated insecurely. | ldap3_remote.py:102:18:102:21 | ControlFlowNode for host | This LDAP host | +| ldap3_remote.py:115:18:115:21 | ControlFlowNode for host | ldap3_remote.py:114:12:114:49 | ControlFlowNode for BinaryExpr | ldap3_remote.py:115:18:115:21 | ControlFlowNode for host | $@ is authenticated insecurely. | ldap3_remote.py:115:18:115:21 | ControlFlowNode for host | This LDAP host | +| ldap3_remote.py:127:18:127:21 | ControlFlowNode for host | ldap3_remote.py:126:12:126:31 | ControlFlowNode for BinaryExpr | ldap3_remote.py:127:18:127:21 | ControlFlowNode for host | $@ is authenticated insecurely. | ldap3_remote.py:127:18:127:21 | ControlFlowNode for host | This LDAP host | +| ldap3_remote.py:139:18:139:21 | ControlFlowNode for host | ldap3_remote.py:138:21:138:27 | ControlFlowNode for request | ldap3_remote.py:139:18:139:21 | ControlFlowNode for host | $@ is authenticated insecurely. | ldap3_remote.py:139:18:139:21 | ControlFlowNode for host | This LDAP host | diff --git a/python/ql/test/experimental/query-tests/Security/CWE-522/LDAPInsecureAuth.qlref b/python/ql/test/experimental/query-tests/Security/CWE-522/LDAPInsecureAuth.qlref new file mode 100644 index 00000000000..8bb2c1e9b52 --- /dev/null +++ b/python/ql/test/experimental/query-tests/Security/CWE-522/LDAPInsecureAuth.qlref @@ -0,0 +1 @@ +experimental/Security/CWE-522/LDAPInsecureAuth.ql \ No newline at end of file diff --git a/python/ql/src/experimental/Security/CWE-090/tests/2_private.py b/python/ql/test/experimental/query-tests/Security/CWE-522/ldap2_private.py similarity index 100% rename from python/ql/src/experimental/Security/CWE-090/tests/2_private.py rename to python/ql/test/experimental/query-tests/Security/CWE-522/ldap2_private.py diff --git a/python/ql/src/experimental/Security/CWE-090/tests/2_remote.py b/python/ql/test/experimental/query-tests/Security/CWE-522/ldap2_remote.py similarity index 100% rename from python/ql/src/experimental/Security/CWE-090/tests/2_remote.py rename to python/ql/test/experimental/query-tests/Security/CWE-522/ldap2_remote.py diff --git a/python/ql/src/experimental/Security/CWE-090/tests/3_private.py b/python/ql/test/experimental/query-tests/Security/CWE-522/ldap3_private.py similarity index 98% rename from python/ql/src/experimental/Security/CWE-090/tests/3_private.py rename to python/ql/test/experimental/query-tests/Security/CWE-522/ldap3_private.py index 7c4ede3f0e6..796ecbd01b0 100644 --- a/python/ql/src/experimental/Security/CWE-090/tests/3_private.py +++ b/python/ql/test/experimental/query-tests/Security/CWE-522/ldap3_private.py @@ -83,7 +83,7 @@ def six(): def four(): host = "ldap://" + partial_host - srv = Server(host, port=1337, True) + srv = Server(host, 1337, True) conn = Connection(srv, "dn", "password") conn.search("dn", "search_filter") return conn.response diff --git a/python/ql/src/experimental/Security/CWE-090/tests/3_remote.py b/python/ql/test/experimental/query-tests/Security/CWE-522/ldap3_remote.py similarity index 100% rename from python/ql/src/experimental/Security/CWE-090/tests/3_remote.py rename to python/ql/test/experimental/query-tests/Security/CWE-522/ldap3_remote.py From b03e75e3d1920135dbd396ee53acfe340a1e13bd Mon Sep 17 00:00:00 2001 From: jorgectf Date: Thu, 22 Jul 2021 18:42:41 +0200 Subject: [PATCH 055/741] Extend `ldap3`'s `start_tls` and fix tests --- .../ql/src/experimental/semmle/python/frameworks/LDAP.qll | 5 +++++ .../query-tests/Security/CWE-522/ldap3_remote.py | 6 +++--- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/python/ql/src/experimental/semmle/python/frameworks/LDAP.qll b/python/ql/src/experimental/semmle/python/frameworks/LDAP.qll index ed2ba3a5817..b36897deea7 100644 --- a/python/ql/src/experimental/semmle/python/frameworks/LDAP.qll +++ b/python/ql/src/experimental/semmle/python/frameworks/LDAP.qll @@ -219,6 +219,11 @@ private module LDAP { .(DataFlow::LocalSourceNode) .flowsTo([serverCall.getArg(2), serverCall.getArgByName("use_ssl")]) ) + or + exists(DataFlow::AttrRead startTLS | + startTLS.getAttributeName().matches("%start_tls%") and + startTLS.getObject().getALocalSource() = this + ) } } diff --git a/python/ql/test/experimental/query-tests/Security/CWE-522/ldap3_remote.py b/python/ql/test/experimental/query-tests/Security/CWE-522/ldap3_remote.py index 366fce2b186..09dadcfb0e0 100644 --- a/python/ql/test/experimental/query-tests/Security/CWE-522/ldap3_remote.py +++ b/python/ql/test/experimental/query-tests/Security/CWE-522/ldap3_remote.py @@ -48,7 +48,7 @@ def three(): def four(): host = "ldap://" + remote_host - srv = Server(host, port=1337, True) + srv = Server(host, 1337, True) conn = Connection(srv, "dn", "password") conn.search("dn", "search_filter") return conn.response @@ -87,7 +87,7 @@ def six(): def seven(): host = schema + request.args['host'] - srv = Server(host, port=1337, True) + srv = Server(host, 1337, True) conn = Connection(srv, "dn", "password") conn.search("dn", "search_filter") return conn.response @@ -112,7 +112,7 @@ def eight(): @app.route("/nine") def nine(): host = schema + "somethingon.theinternet.com" - srv = Server(host, port=1337, False) + srv = Server(host, 1337, False) conn = Connection(srv, "dn", "password") conn.search("dn", "search_filter") return conn.response From 9b6ae9029f51637c43d9cb283a99d937c9c908a6 Mon Sep 17 00:00:00 2001 From: Benjamin Muskalla Date: Wed, 28 Jul 2021 13:09:18 +0200 Subject: [PATCH 056/741] Introduce query for capture JDK API usage --- java/ql/src/Telemetry/APIUsage.qll | 20 ++++++++++++++++++++ java/ql/src/Telemetry/JDKUsage.ql | 15 +++++++++++++++ 2 files changed, 35 insertions(+) create mode 100644 java/ql/src/Telemetry/APIUsage.qll create mode 100644 java/ql/src/Telemetry/JDKUsage.ql diff --git a/java/ql/src/Telemetry/APIUsage.qll b/java/ql/src/Telemetry/APIUsage.qll new file mode 100644 index 00000000000..405e5d0ec17 --- /dev/null +++ b/java/ql/src/Telemetry/APIUsage.qll @@ -0,0 +1,20 @@ +import java + +private string jarName(CompilationUnit cu) { + result = cu.getParentContainer().toString().regexpCapture(".*/(.*\\.jar)/?.*", 1) +} + +predicate isJavaRuntime(Callable call) { + jarName(call.getCompilationUnit()) = "rt.jar" or + call.getCompilationUnit().getParentContainer().toString().substring(0, 14) = "/modules/java." +} + +// TODO Is this heuristic too broad? +predicate isInterestingAPI(Callable call) { + call.getNumberOfParameters() > 0 and + not ( + call.getReturnType() instanceof VoidType or + call.getReturnType() instanceof PrimitiveType or + call.getReturnType() instanceof BoxedType + ) +} diff --git a/java/ql/src/Telemetry/JDKUsage.ql b/java/ql/src/Telemetry/JDKUsage.ql new file mode 100644 index 00000000000..b163db667be --- /dev/null +++ b/java/ql/src/Telemetry/JDKUsage.ql @@ -0,0 +1,15 @@ +/** + * @name JDK API Usage + * @description A list of JDK APIs used in the source code. + * @id java/telemetry/jdk-apis + */ + +import java +import APIUsage + +from Callable call, CompilationUnit cu +where + cu = call.getCompilationUnit() and + isJavaRuntime(call) and + isInterestingAPI(call) +select cu, call as API, count(Call c | c.getCallee() = call) as calls order by calls desc From 18e3763f9098391afb85e68b5f7c75b6dd186e4a Mon Sep 17 00:00:00 2001 From: Benjamin Muskalla Date: Wed, 28 Jul 2021 13:12:23 +0200 Subject: [PATCH 057/741] Expose whether APIs are already supported --- java/ql/src/Telemetry/APIUsage.qll | 24 ++++++++++++++++++++++++ java/ql/src/Telemetry/JDKUsage.ql | 3 ++- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/java/ql/src/Telemetry/APIUsage.qll b/java/ql/src/Telemetry/APIUsage.qll index 405e5d0ec17..cde33411b63 100644 --- a/java/ql/src/Telemetry/APIUsage.qll +++ b/java/ql/src/Telemetry/APIUsage.qll @@ -1,4 +1,6 @@ import java +private import semmle.code.java.dataflow.FlowSteps +private import semmle.code.java.dataflow.ExternalFlow private string jarName(CompilationUnit cu) { result = cu.getParentContainer().toString().regexpCapture(".*/(.*\\.jar)/?.*", 1) @@ -18,3 +20,25 @@ predicate isInterestingAPI(Callable call) { call.getReturnType() instanceof BoxedType ) } + +// TODO [bm] Fails to detect Collection flow yet (e.g. Map#put) +string supportKind(Callable api) { + if api instanceof TaintPreservingCallable + then result = "taint-preserving" + else + if + summaryModel(api.getCompilationUnit().getPackage().toString(), + api.getDeclaringType().toString(), _, api.getName(), _, _, _, _, _) + then result = "summary" + else + if + sinkModel(api.getCompilationUnit().getPackage().toString(), + api.getDeclaringType().toString(), _, api.getName(), _, _, _, _) + then result = "sink" + else + if + sourceModel(api.getCompilationUnit().getPackage().toString(), + api.getDeclaringType().toString(), _, api.getName(), _, _, _, _) + then result = "source" + else result = "?" +} diff --git a/java/ql/src/Telemetry/JDKUsage.ql b/java/ql/src/Telemetry/JDKUsage.ql index b163db667be..ecedc0a1d2a 100644 --- a/java/ql/src/Telemetry/JDKUsage.ql +++ b/java/ql/src/Telemetry/JDKUsage.ql @@ -12,4 +12,5 @@ where cu = call.getCompilationUnit() and isJavaRuntime(call) and isInterestingAPI(call) -select cu, call as API, count(Call c | c.getCallee() = call) as calls order by calls desc +select cu, call as API, supportKind(call) as Kind, count(Call c | c.getCallee() = call) as calls + order by calls desc From 32f52ac30d5eac2cbcaf30b566929337893f0e64 Mon Sep 17 00:00:00 2001 From: Benjamin Muskalla Date: Wed, 28 Jul 2021 13:15:38 +0200 Subject: [PATCH 058/741] Improve column names --- java/ql/src/Telemetry/JDKUsage.ql | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/java/ql/src/Telemetry/JDKUsage.ql b/java/ql/src/Telemetry/JDKUsage.ql index ecedc0a1d2a..7d07a1d2b70 100644 --- a/java/ql/src/Telemetry/JDKUsage.ql +++ b/java/ql/src/Telemetry/JDKUsage.ql @@ -12,5 +12,5 @@ where cu = call.getCompilationUnit() and isJavaRuntime(call) and isInterestingAPI(call) -select cu, call as API, supportKind(call) as Kind, count(Call c | c.getCallee() = call) as calls - order by calls desc +select cu as Class, call as API, supportKind(call) as Kind, + count(Call c | c.getCallee() = call) as Usages order by Usages desc From b9f6b60c4d736ae3a0c68e4dd215c5528030c814 Mon Sep 17 00:00:00 2001 From: Benjamin Muskalla Date: Wed, 28 Jul 2021 13:19:40 +0200 Subject: [PATCH 059/741] Introduce query to capture external libraries --- java/ql/src/Telemetry/APIUsage.qll | 2 +- java/ql/src/Telemetry/ExternalAPI.qll | 40 +++++++++++++++++++ java/ql/src/Telemetry/ExternalLibraryUsage.ql | 16 ++++++++ 3 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 java/ql/src/Telemetry/ExternalAPI.qll create mode 100644 java/ql/src/Telemetry/ExternalLibraryUsage.ql diff --git a/java/ql/src/Telemetry/APIUsage.qll b/java/ql/src/Telemetry/APIUsage.qll index cde33411b63..816a18a0852 100644 --- a/java/ql/src/Telemetry/APIUsage.qll +++ b/java/ql/src/Telemetry/APIUsage.qll @@ -2,7 +2,7 @@ import java private import semmle.code.java.dataflow.FlowSteps private import semmle.code.java.dataflow.ExternalFlow -private string jarName(CompilationUnit cu) { +string jarName(CompilationUnit cu) { result = cu.getParentContainer().toString().regexpCapture(".*/(.*\\.jar)/?.*", 1) } diff --git a/java/ql/src/Telemetry/ExternalAPI.qll b/java/ql/src/Telemetry/ExternalAPI.qll new file mode 100644 index 00000000000..db83ea6f8e4 --- /dev/null +++ b/java/ql/src/Telemetry/ExternalAPI.qll @@ -0,0 +1,40 @@ +import java +import APIUsage +private import experimental.semmle.code.java.Logging + +class ExternalAPI extends Callable { + ExternalAPI() { + not this.fromSource() and + not this.getDeclaringType().getPackage().getName().matches("java.%") and + not isJavaRuntime(this) + } + + string jarName() { result = jarName(this.getCompilationUnit()) } + + string simpleName() { + result = getDeclaringType().getSourceDeclaration() + "#" + this.getStringSignature() + } +} + +// TODO [bm]: Shall we move this into LoggingCall or a LoggingSetup predicate? +predicate loggingRelated(Call call) { + call instanceof LoggingCall or + call.getCallee().getName() = "getLogger" or // getLogger is not a LoggingCall + call.getCallee().getName() = "isDebugEnabled" // org.slf4j.Logger#isDebugEnabled is not a LoggingCall +} + +class TestLibrary extends RefType { + TestLibrary() { + getPackage() + .getName() + .matches([ + "org.junit%", "junit.%", "org.mockito%", "org.assertj%", + "com.github.tomakehurst.wiremock%", "org.hamcrest%", "org.springframework.test.%", + "org.springframework.mock.%", "org.springframework.boot.test.%", "reactor.test%", + "org.xmlunit%", "org.testcontainers.%", "org.opentest4j%", "org.mockserver%", + "org.powermock%", "org.skyscreamer.jsonassert%", "org.rnorth.visibleassertions", + "org.openqa.selenium%", "com.gargoylesoftware.htmlunit%", + "org.jboss.arquillian.testng%", "org.testng%" + ]) + } +} diff --git a/java/ql/src/Telemetry/ExternalLibraryUsage.ql b/java/ql/src/Telemetry/ExternalLibraryUsage.ql new file mode 100644 index 00000000000..b47091462a8 --- /dev/null +++ b/java/ql/src/Telemetry/ExternalLibraryUsage.ql @@ -0,0 +1,16 @@ +/** + * @name External libraries + * @description A list of external libraries used in the code + * @id java/telemetry/external-libs + */ + +import java +import ExternalAPI + +from ExternalAPI api +where not api.getDeclaringType() instanceof TestLibrary +// TODO [bm]: the count is not aggregated and we have the same jar with multiple usages, e.g. +// 1 protobuf-java-3.17.3.jar 373 +// 2 protobuf-java-3.17.3.jar 48 +select api.jarName() as jarname, count(Call c | c.getCallee() = api) as Usages +order by Usages desc \ No newline at end of file From 07303ccbb3d155442456fea18dc9436575afd006 Mon Sep 17 00:00:00 2001 From: Benjamin Muskalla Date: Wed, 28 Jul 2021 13:20:02 +0200 Subject: [PATCH 060/741] Fix formatting --- java/ql/src/Telemetry/ExternalLibraryUsage.ql | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/java/ql/src/Telemetry/ExternalLibraryUsage.ql b/java/ql/src/Telemetry/ExternalLibraryUsage.ql index b47091462a8..50ba5ae4e5b 100644 --- a/java/ql/src/Telemetry/ExternalLibraryUsage.ql +++ b/java/ql/src/Telemetry/ExternalLibraryUsage.ql @@ -12,5 +12,4 @@ where not api.getDeclaringType() instanceof TestLibrary // TODO [bm]: the count is not aggregated and we have the same jar with multiple usages, e.g. // 1 protobuf-java-3.17.3.jar 373 // 2 protobuf-java-3.17.3.jar 48 -select api.jarName() as jarname, count(Call c | c.getCallee() = api) as Usages -order by Usages desc \ No newline at end of file +select api.jarName() as jarname, count(Call c | c.getCallee() = api) as Usages order by Usages desc From d9285e78c0c8e309c7dc29ebd8dcb875bf9d8560 Mon Sep 17 00:00:00 2001 From: Benjamin Muskalla Date: Wed, 28 Jul 2021 13:23:57 +0200 Subject: [PATCH 061/741] Add query to collect external API calls --- java/ql/src/Telemetry/ExternalAPIUsages.ql | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 java/ql/src/Telemetry/ExternalAPIUsages.ql diff --git a/java/ql/src/Telemetry/ExternalAPIUsages.ql b/java/ql/src/Telemetry/ExternalAPIUsages.ql new file mode 100644 index 00000000000..78bdbe95d9d --- /dev/null +++ b/java/ql/src/Telemetry/ExternalAPIUsages.ql @@ -0,0 +1,21 @@ +/** + * @name Usage of APIs coming from external libraries + * @description A list of 3rd party APIs used in the codebase. Excludes test and generated code. + * @id java/telemetry/external-libs + */ + +import java +import ExternalAPI +import semmle.code.java.GeneratedFiles + +from ExternalAPI api +where + not api.getDeclaringType() instanceof TestLibrary and + isInterestingAPI(api) +select api.simpleName() as API, + count(Call c | + c.getCallee() = api and + not c.getFile() instanceof GeneratedFile and + not loggingRelated(c) + ) as Usages, supportKind(api) as Kind, api.getReturnType() as ReturnType, + api.getDeclaringType().getPackage() as Package order by Usages desc From 722889e8818e9a1d212a259e8d704037e6914802 Mon Sep 17 00:00:00 2001 From: Benjamin Muskalla Date: Wed, 28 Jul 2021 15:13:17 +0200 Subject: [PATCH 062/741] Make id unique --- java/ql/src/Telemetry/ExternalAPIUsages.ql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/ql/src/Telemetry/ExternalAPIUsages.ql b/java/ql/src/Telemetry/ExternalAPIUsages.ql index 78bdbe95d9d..fc6fce55383 100644 --- a/java/ql/src/Telemetry/ExternalAPIUsages.ql +++ b/java/ql/src/Telemetry/ExternalAPIUsages.ql @@ -1,7 +1,7 @@ /** * @name Usage of APIs coming from external libraries * @description A list of 3rd party APIs used in the codebase. Excludes test and generated code. - * @id java/telemetry/external-libs + * @id java/telemetry/external-api */ import java From 0c04c9a2c22d2c35a2c8111caa173d68ce3eca43 Mon Sep 17 00:00:00 2001 From: Benjamin Muskalla Date: Mon, 2 Aug 2021 11:32:46 +0200 Subject: [PATCH 063/741] Fix aggregation of jar usages --- java/ql/src/Telemetry/APIUsage.qll | 6 +----- java/ql/src/Telemetry/ExternalAPI.qll | 2 -- java/ql/src/Telemetry/ExternalLibraryUsage.ql | 18 ++++++++++++------ 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/java/ql/src/Telemetry/APIUsage.qll b/java/ql/src/Telemetry/APIUsage.qll index 816a18a0852..809fd6878fd 100644 --- a/java/ql/src/Telemetry/APIUsage.qll +++ b/java/ql/src/Telemetry/APIUsage.qll @@ -2,12 +2,8 @@ import java private import semmle.code.java.dataflow.FlowSteps private import semmle.code.java.dataflow.ExternalFlow -string jarName(CompilationUnit cu) { - result = cu.getParentContainer().toString().regexpCapture(".*/(.*\\.jar)/?.*", 1) -} - predicate isJavaRuntime(Callable call) { - jarName(call.getCompilationUnit()) = "rt.jar" or + call.getCompilationUnit().getParentContainer*().getStem() = "rt" and call.getCompilationUnit().getParentContainer().toString().substring(0, 14) = "/modules/java." } diff --git a/java/ql/src/Telemetry/ExternalAPI.qll b/java/ql/src/Telemetry/ExternalAPI.qll index db83ea6f8e4..c5734c62785 100644 --- a/java/ql/src/Telemetry/ExternalAPI.qll +++ b/java/ql/src/Telemetry/ExternalAPI.qll @@ -9,8 +9,6 @@ class ExternalAPI extends Callable { not isJavaRuntime(this) } - string jarName() { result = jarName(this.getCompilationUnit()) } - string simpleName() { result = getDeclaringType().getSourceDeclaration() + "#" + this.getStringSignature() } diff --git a/java/ql/src/Telemetry/ExternalLibraryUsage.ql b/java/ql/src/Telemetry/ExternalLibraryUsage.ql index 50ba5ae4e5b..39023cb8874 100644 --- a/java/ql/src/Telemetry/ExternalLibraryUsage.ql +++ b/java/ql/src/Telemetry/ExternalLibraryUsage.ql @@ -1,15 +1,21 @@ /** * @name External libraries * @description A list of external libraries used in the code + * @kind diagnostic * @id java/telemetry/external-libs */ import java import ExternalAPI -from ExternalAPI api -where not api.getDeclaringType() instanceof TestLibrary -// TODO [bm]: the count is not aggregated and we have the same jar with multiple usages, e.g. -// 1 protobuf-java-3.17.3.jar 373 -// 2 protobuf-java-3.17.3.jar 48 -select api.jarName() as jarname, count(Call c | c.getCallee() = api) as Usages order by Usages desc +from int Usages, JarFile jar +where + jar = any(ExternalAPI api).getCompilationUnit().getParentContainer*() and + Usages = + strictcount(Call c, ExternalAPI a | + c.getCallee() = a and + not c.getFile() instanceof GeneratedFile and + a.getCompilationUnit().getParentContainer*() = jar and + not a.getDeclaringType() instanceof TestLibrary + ) +select jar.getFile().getStem() + "." + jar.getFile().getExtension(), Usages order by Usages desc From 2064915d3b2d8f81fe423ced2297adf695621544 Mon Sep 17 00:00:00 2001 From: Benjamin Muskalla Date: Mon, 2 Aug 2021 11:52:01 +0200 Subject: [PATCH 064/741] Fold JDK API query into external API query --- java/ql/src/Telemetry/APIUsage.qll | 5 ----- java/ql/src/Telemetry/ExternalAPI.qll | 11 +---------- java/ql/src/Telemetry/ExternalAPIUsages.ql | 3 +-- java/ql/src/Telemetry/JDKUsage.ql | 16 ---------------- 4 files changed, 2 insertions(+), 33 deletions(-) delete mode 100644 java/ql/src/Telemetry/JDKUsage.ql diff --git a/java/ql/src/Telemetry/APIUsage.qll b/java/ql/src/Telemetry/APIUsage.qll index 809fd6878fd..e7430fc540a 100644 --- a/java/ql/src/Telemetry/APIUsage.qll +++ b/java/ql/src/Telemetry/APIUsage.qll @@ -2,11 +2,6 @@ import java private import semmle.code.java.dataflow.FlowSteps private import semmle.code.java.dataflow.ExternalFlow -predicate isJavaRuntime(Callable call) { - call.getCompilationUnit().getParentContainer*().getStem() = "rt" and - call.getCompilationUnit().getParentContainer().toString().substring(0, 14) = "/modules/java." -} - // TODO Is this heuristic too broad? predicate isInterestingAPI(Callable call) { call.getNumberOfParameters() > 0 and diff --git a/java/ql/src/Telemetry/ExternalAPI.qll b/java/ql/src/Telemetry/ExternalAPI.qll index c5734c62785..622ab2392ab 100644 --- a/java/ql/src/Telemetry/ExternalAPI.qll +++ b/java/ql/src/Telemetry/ExternalAPI.qll @@ -4,9 +4,7 @@ private import experimental.semmle.code.java.Logging class ExternalAPI extends Callable { ExternalAPI() { - not this.fromSource() and - not this.getDeclaringType().getPackage().getName().matches("java.%") and - not isJavaRuntime(this) + not this.fromSource() } string simpleName() { @@ -14,13 +12,6 @@ class ExternalAPI extends Callable { } } -// TODO [bm]: Shall we move this into LoggingCall or a LoggingSetup predicate? -predicate loggingRelated(Call call) { - call instanceof LoggingCall or - call.getCallee().getName() = "getLogger" or // getLogger is not a LoggingCall - call.getCallee().getName() = "isDebugEnabled" // org.slf4j.Logger#isDebugEnabled is not a LoggingCall -} - class TestLibrary extends RefType { TestLibrary() { getPackage() diff --git a/java/ql/src/Telemetry/ExternalAPIUsages.ql b/java/ql/src/Telemetry/ExternalAPIUsages.ql index fc6fce55383..935bcd3197c 100644 --- a/java/ql/src/Telemetry/ExternalAPIUsages.ql +++ b/java/ql/src/Telemetry/ExternalAPIUsages.ql @@ -15,7 +15,6 @@ where select api.simpleName() as API, count(Call c | c.getCallee() = api and - not c.getFile() instanceof GeneratedFile and - not loggingRelated(c) + not c.getFile() instanceof GeneratedFile ) as Usages, supportKind(api) as Kind, api.getReturnType() as ReturnType, api.getDeclaringType().getPackage() as Package order by Usages desc diff --git a/java/ql/src/Telemetry/JDKUsage.ql b/java/ql/src/Telemetry/JDKUsage.ql deleted file mode 100644 index 7d07a1d2b70..00000000000 --- a/java/ql/src/Telemetry/JDKUsage.ql +++ /dev/null @@ -1,16 +0,0 @@ -/** - * @name JDK API Usage - * @description A list of JDK APIs used in the source code. - * @id java/telemetry/jdk-apis - */ - -import java -import APIUsage - -from Callable call, CompilationUnit cu -where - cu = call.getCompilationUnit() and - isJavaRuntime(call) and - isInterestingAPI(call) -select cu as Class, call as API, supportKind(call) as Kind, - count(Call c | c.getCallee() = call) as Usages order by Usages desc From aab633eced5748b6c76fa8eac355136542603b44 Mon Sep 17 00:00:00 2001 From: Benjamin Muskalla Date: Mon, 2 Aug 2021 11:52:16 +0200 Subject: [PATCH 065/741] Reformat --- java/ql/src/Telemetry/ExternalAPI.qll | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/java/ql/src/Telemetry/ExternalAPI.qll b/java/ql/src/Telemetry/ExternalAPI.qll index 622ab2392ab..b20b84e496e 100644 --- a/java/ql/src/Telemetry/ExternalAPI.qll +++ b/java/ql/src/Telemetry/ExternalAPI.qll @@ -3,9 +3,7 @@ import APIUsage private import experimental.semmle.code.java.Logging class ExternalAPI extends Callable { - ExternalAPI() { - not this.fromSource() - } + ExternalAPI() { not this.fromSource() } string simpleName() { result = getDeclaringType().getSourceDeclaration() + "#" + this.getStringSignature() From 33656342595b0a1533465f83471ecf6c17c89af6 Mon Sep 17 00:00:00 2001 From: Benjamin Muskalla Date: Mon, 2 Aug 2021 14:42:45 +0200 Subject: [PATCH 066/741] Expose csv parameter format predicate --- java/ql/src/semmle/code/java/dataflow/ExternalFlow.qll | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/java/ql/src/semmle/code/java/dataflow/ExternalFlow.qll b/java/ql/src/semmle/code/java/dataflow/ExternalFlow.qll index 9c8aaa6ce65..889a3901236 100644 --- a/java/ql/src/semmle/code/java/dataflow/ExternalFlow.qll +++ b/java/ql/src/semmle/code/java/dataflow/ExternalFlow.qll @@ -614,9 +614,13 @@ private string paramsStringPart(Callable c, int i) { i = 2 * c.getNumberOfParameters() and result = ")" } -private string paramsString(Callable c) { - result = concat(int i | | paramsStringPart(c, i) order by i) -} +/** + * Gets a parenthesized string containing all parameter types of this callable, separated by a comma. + * + * Returns the empty string if the callable has no parameters. + * Parameter types are represented by their type erasure. + */ +string paramsString(Callable c) { result = concat(int i | | paramsStringPart(c, i) order by i) } private Element interpretElement0( string namespace, string type, boolean subtypes, string name, string signature From 8595ae71f79797ee36bd108d0b544227cc61c346 Mon Sep 17 00:00:00 2001 From: Benjamin Muskalla Date: Mon, 2 Aug 2021 15:45:30 +0200 Subject: [PATCH 067/741] Simplify api coverage detection Fixes a bug that doesn't take super types into account when computing the usage of a specific API. --- java/ql/src/Telemetry/APIUsage.qll | 31 +++++++++++------------------- 1 file changed, 11 insertions(+), 20 deletions(-) diff --git a/java/ql/src/Telemetry/APIUsage.qll b/java/ql/src/Telemetry/APIUsage.qll index e7430fc540a..e2d4a4db068 100644 --- a/java/ql/src/Telemetry/APIUsage.qll +++ b/java/ql/src/Telemetry/APIUsage.qll @@ -2,34 +2,25 @@ import java private import semmle.code.java.dataflow.FlowSteps private import semmle.code.java.dataflow.ExternalFlow -// TODO Is this heuristic too broad? -predicate isInterestingAPI(Callable call) { - call.getNumberOfParameters() > 0 and - not ( - call.getReturnType() instanceof VoidType or - call.getReturnType() instanceof PrimitiveType or - call.getReturnType() instanceof BoxedType - ) -} - -// TODO [bm] Fails to detect Collection flow yet (e.g. Map#put) string supportKind(Callable api) { if api instanceof TaintPreservingCallable then result = "taint-preserving" else - if - summaryModel(api.getCompilationUnit().getPackage().toString(), - api.getDeclaringType().toString(), _, api.getName(), _, _, _, _, _) + if summaryModel(packageName(api), typeName(api), _, api.getName(), _, _, _, _, _) then result = "summary" else - if - sinkModel(api.getCompilationUnit().getPackage().toString(), - api.getDeclaringType().toString(), _, api.getName(), _, _, _, _) + if sinkModel(packageName(api), typeName(api), _, api.getName(), _, _, _, _) then result = "sink" else - if - sourceModel(api.getCompilationUnit().getPackage().toString(), - api.getDeclaringType().toString(), _, api.getName(), _, _, _, _) + if sourceModel(packageName(api), typeName(api), _, api.getName(), _, _, _, _) then result = "source" else result = "?" } + +private string packageName(Callable api) { + result = api.getCompilationUnit().getPackage().toString() +} + +private string typeName(Callable api) { + result = api.getDeclaringType().getAnAncestor().getSourceDeclaration().toString() +} From fda394858bf72b8c607e4ddb50c61ac0da0a10bb Mon Sep 17 00:00:00 2001 From: Benjamin Muskalla Date: Mon, 2 Aug 2021 15:52:45 +0200 Subject: [PATCH 068/741] Turn external API query into diagnostics query * Expose (partial) CSV model for the API * Rework and simplify predicates --- java/ql/src/Telemetry/ExternalAPI.qll | 25 ++++++++++++++----- java/ql/src/Telemetry/ExternalAPIUsages.ql | 14 +++++++---- java/ql/src/Telemetry/ExternalLibraryUsage.ql | 2 +- 3 files changed, 29 insertions(+), 12 deletions(-) diff --git a/java/ql/src/Telemetry/ExternalAPI.qll b/java/ql/src/Telemetry/ExternalAPI.qll index b20b84e496e..c1787ee1f39 100644 --- a/java/ql/src/Telemetry/ExternalAPI.qll +++ b/java/ql/src/Telemetry/ExternalAPI.qll @@ -1,16 +1,29 @@ -import java -import APIUsage -private import experimental.semmle.code.java.Logging +private import java +private import APIUsage +private import semmle.code.java.dataflow.ExternalFlow class ExternalAPI extends Callable { ExternalAPI() { not this.fromSource() } - string simpleName() { - result = getDeclaringType().getSourceDeclaration() + "#" + this.getStringSignature() + predicate isTestLibrary() { getDeclaringType() instanceof TestLibrary } + + predicate isInteresting() { + getNumberOfParameters() > 0 and + not ( + getReturnType() instanceof VoidType or + getReturnType() instanceof PrimitiveType or + getReturnType() instanceof BoxedType + ) + } + + string asCSV(ExternalAPI api) { + result = + api.getDeclaringType().getPackage() + ";?;" + api.getDeclaringType().getSourceDeclaration() + + ";" + api.getName() + ";" + paramsString(api) } } -class TestLibrary extends RefType { +private class TestLibrary extends RefType { TestLibrary() { getPackage() .getName() diff --git a/java/ql/src/Telemetry/ExternalAPIUsages.ql b/java/ql/src/Telemetry/ExternalAPIUsages.ql index 935bcd3197c..a95116ddcd9 100644 --- a/java/ql/src/Telemetry/ExternalAPIUsages.ql +++ b/java/ql/src/Telemetry/ExternalAPIUsages.ql @@ -2,19 +2,23 @@ * @name Usage of APIs coming from external libraries * @description A list of 3rd party APIs used in the codebase. Excludes test and generated code. * @id java/telemetry/external-api + * @kind diagnostic */ import java +import APIUsage import ExternalAPI import semmle.code.java.GeneratedFiles +// TODO [bm]: decide whether to drop the order by or +// turn Usage into string for diagnostic kind +// https://github.slack.com/archives/C01JJP3EF8E/p1627910071013000 from ExternalAPI api where - not api.getDeclaringType() instanceof TestLibrary and - isInterestingAPI(api) -select api.simpleName() as API, + not api.isTestLibrary() and + api.isInteresting() +select api.asCSV(api) as csv, count(Call c | c.getCallee() = api and not c.getFile() instanceof GeneratedFile - ) as Usages, supportKind(api) as Kind, api.getReturnType() as ReturnType, - api.getDeclaringType().getPackage() as Package order by Usages desc + ) as Usages, supportKind(api) as Kind order by Usages desc diff --git a/java/ql/src/Telemetry/ExternalLibraryUsage.ql b/java/ql/src/Telemetry/ExternalLibraryUsage.ql index 39023cb8874..cbf060dec6c 100644 --- a/java/ql/src/Telemetry/ExternalLibraryUsage.ql +++ b/java/ql/src/Telemetry/ExternalLibraryUsage.ql @@ -16,6 +16,6 @@ where c.getCallee() = a and not c.getFile() instanceof GeneratedFile and a.getCompilationUnit().getParentContainer*() = jar and - not a.getDeclaringType() instanceof TestLibrary + not a.isTestLibrary() ) select jar.getFile().getStem() + "." + jar.getFile().getExtension(), Usages order by Usages desc From 60c70036676257a535442a802270759dfd91ce70 Mon Sep 17 00:00:00 2001 From: Benjamin Muskalla Date: Mon, 2 Aug 2021 16:13:48 +0200 Subject: [PATCH 069/741] Optimize return type check --- java/ql/src/Telemetry/ExternalAPI.qll | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/java/ql/src/Telemetry/ExternalAPI.qll b/java/ql/src/Telemetry/ExternalAPI.qll index c1787ee1f39..b665bbb7fec 100644 --- a/java/ql/src/Telemetry/ExternalAPI.qll +++ b/java/ql/src/Telemetry/ExternalAPI.qll @@ -9,10 +9,10 @@ class ExternalAPI extends Callable { predicate isInteresting() { getNumberOfParameters() > 0 and - not ( - getReturnType() instanceof VoidType or - getReturnType() instanceof PrimitiveType or - getReturnType() instanceof BoxedType + exists(Type retType | retType = getReturnType() | + not retType instanceof VoidType and + not retType instanceof PrimitiveType and + not retType instanceof BoxedType ) } From e07516585a5faa60697951e23a3258da911e0501 Mon Sep 17 00:00:00 2001 From: Jordy Zomer Date: Tue, 3 Aug 2021 19:08:47 +0200 Subject: [PATCH 070/741] cpp: Add query to detect unsigned integer to signed integer conversions used in pointer arithmetics --- .../CWE-787/UnsignedToSignedPointerArith.ql | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 cpp/ql/src/experimental/Security/CWE/CWE-787/UnsignedToSignedPointerArith.ql diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-787/UnsignedToSignedPointerArith.ql b/cpp/ql/src/experimental/Security/CWE/CWE-787/UnsignedToSignedPointerArith.ql new file mode 100644 index 00000000000..3e50994c30c --- /dev/null +++ b/cpp/ql/src/experimental/Security/CWE/CWE-787/UnsignedToSignedPointerArith.ql @@ -0,0 +1,28 @@ +/** + * @author Jordy Zomer + * @name unsiged to signed used in pointer arithmetic + * @description finds unsigned to signed conversions used in pointer arithmetic, potentially causing an out-of-bound access + * @id cpp/out-of-bounds + * @kind problem + * @problem.severity warning + * @tags reliability + * security + * external/cwe/cwe-787 + */ + +import cpp +import semmle.code.cpp.dataflow.DataFlow +import semmle.code.cpp.security.Overflow + +from FunctionCall call, Function f, Parameter p, DataFlow::Node sink, PointerArithmeticOperation pao, Operation a, Operation b +where +f = call.getTarget() and +p = f.getAParameter() and +p.getType().getUnderlyingType().(IntegralType).isSigned() and +call.getArgument(p.getIndex()).getType().getUnderlyingType().(IntegralType).isUnsigned() and +pao.getAnOperand() = sink.asExpr() and +not guardedLesser(a, sink.asExpr()) and +not guardedGreater(b, call.getArgument(p.getIndex())) and +not call.getArgument(p.getIndex()).isConstant() and +DataFlow::localFlow(DataFlow::parameterNode(p), sink) +select call, "This call: $@ passes an unsigned int to a function that requires a signed int: $@. And then used in pointer arithmetic: $@", call, call.toString(), f, f.toString(), sink, sink.toString() From 19bb8e8c17316f9afc219c964edc59c2b81e36f8 Mon Sep 17 00:00:00 2001 From: Jordy Zomer Date: Tue, 3 Aug 2021 21:54:04 +0200 Subject: [PATCH 071/741] Make requested changes --- .../CWE/CWE-787/UnsignedToSignedPointerArith.ql | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-787/UnsignedToSignedPointerArith.ql b/cpp/ql/src/experimental/Security/CWE/CWE-787/UnsignedToSignedPointerArith.ql index 3e50994c30c..dffb262445d 100644 --- a/cpp/ql/src/experimental/Security/CWE/CWE-787/UnsignedToSignedPointerArith.ql +++ b/cpp/ql/src/experimental/Security/CWE/CWE-787/UnsignedToSignedPointerArith.ql @@ -2,7 +2,7 @@ * @author Jordy Zomer * @name unsiged to signed used in pointer arithmetic * @description finds unsigned to signed conversions used in pointer arithmetic, potentially causing an out-of-bound access - * @id cpp/out-of-bounds + * @id cpp/sign-conversion-pointer-arithmetic * @kind problem * @problem.severity warning * @tags reliability @@ -14,15 +14,15 @@ import cpp import semmle.code.cpp.dataflow.DataFlow import semmle.code.cpp.security.Overflow -from FunctionCall call, Function f, Parameter p, DataFlow::Node sink, PointerArithmeticOperation pao, Operation a, Operation b +from FunctionCall call, Function f, Parameter p, DataFlow::Node sink, PointerArithmeticOperation pao where f = call.getTarget() and p = f.getAParameter() and -p.getType().getUnderlyingType().(IntegralType).isSigned() and -call.getArgument(p.getIndex()).getType().getUnderlyingType().(IntegralType).isUnsigned() and +p.getUnspecifiedType().(IntegralType).isSigned() and +call.getArgument(p.getIndex()).getUnspecifiedType().(IntegralType).isUnsigned() and pao.getAnOperand() = sink.asExpr() and -not guardedLesser(a, sink.asExpr()) and -not guardedGreater(b, call.getArgument(p.getIndex())) and +not exists(Operation a | guardedLesser(a, sink.asExpr())) and +not exists(Operation b | guardedGreater(b, call.getArgument(p.getIndex()))) and not call.getArgument(p.getIndex()).isConstant() and DataFlow::localFlow(DataFlow::parameterNode(p), sink) select call, "This call: $@ passes an unsigned int to a function that requires a signed int: $@. And then used in pointer arithmetic: $@", call, call.toString(), f, f.toString(), sink, sink.toString() From 489ac04f86aa56372bcd6564bdebaa70763e331c Mon Sep 17 00:00:00 2001 From: Jordy Zomer Date: Thu, 5 Aug 2021 12:34:31 +0200 Subject: [PATCH 072/741] Remove author tag --- .../Security/CWE/CWE-787/UnsignedToSignedPointerArith.ql | 1 - 1 file changed, 1 deletion(-) diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-787/UnsignedToSignedPointerArith.ql b/cpp/ql/src/experimental/Security/CWE/CWE-787/UnsignedToSignedPointerArith.ql index dffb262445d..aea10c30e7f 100644 --- a/cpp/ql/src/experimental/Security/CWE/CWE-787/UnsignedToSignedPointerArith.ql +++ b/cpp/ql/src/experimental/Security/CWE/CWE-787/UnsignedToSignedPointerArith.ql @@ -1,5 +1,4 @@ /** - * @author Jordy Zomer * @name unsiged to signed used in pointer arithmetic * @description finds unsigned to signed conversions used in pointer arithmetic, potentially causing an out-of-bound access * @id cpp/sign-conversion-pointer-arithmetic From cf40d0ae4dafd7ad1e51c86887e54d2fd6aa0d57 Mon Sep 17 00:00:00 2001 From: Jordy Zomer Date: Thu, 5 Aug 2021 16:40:49 +0200 Subject: [PATCH 073/741] Fix a typo unsiged -> unsigned --- .../Security/CWE/CWE-787/UnsignedToSignedPointerArith.ql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-787/UnsignedToSignedPointerArith.ql b/cpp/ql/src/experimental/Security/CWE/CWE-787/UnsignedToSignedPointerArith.ql index aea10c30e7f..ffcc6b8f544 100644 --- a/cpp/ql/src/experimental/Security/CWE/CWE-787/UnsignedToSignedPointerArith.ql +++ b/cpp/ql/src/experimental/Security/CWE/CWE-787/UnsignedToSignedPointerArith.ql @@ -1,5 +1,5 @@ /** - * @name unsiged to signed used in pointer arithmetic + * @name unsinged to signed used in pointer arithmetic * @description finds unsigned to signed conversions used in pointer arithmetic, potentially causing an out-of-bound access * @id cpp/sign-conversion-pointer-arithmetic * @kind problem From a3bacc76f138980418bda28e4253a717535ffde1 Mon Sep 17 00:00:00 2001 From: Jordy Zomer Date: Thu, 5 Aug 2021 23:31:12 +0200 Subject: [PATCH 074/741] Update cpp/ql/src/experimental/Security/CWE/CWE-787/UnsignedToSignedPointerArith.ql Co-authored-by: intrigus-lgtm <60750685+intrigus-lgtm@users.noreply.github.com> --- .../Security/CWE/CWE-787/UnsignedToSignedPointerArith.ql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-787/UnsignedToSignedPointerArith.ql b/cpp/ql/src/experimental/Security/CWE/CWE-787/UnsignedToSignedPointerArith.ql index ffcc6b8f544..f656b791674 100644 --- a/cpp/ql/src/experimental/Security/CWE/CWE-787/UnsignedToSignedPointerArith.ql +++ b/cpp/ql/src/experimental/Security/CWE/CWE-787/UnsignedToSignedPointerArith.ql @@ -1,5 +1,5 @@ /** - * @name unsinged to signed used in pointer arithmetic + * @name unsigned to signed used in pointer arithmetic * @description finds unsigned to signed conversions used in pointer arithmetic, potentially causing an out-of-bound access * @id cpp/sign-conversion-pointer-arithmetic * @kind problem From 5b55a83aaa8161ca8c78e4981be6642d26a22428 Mon Sep 17 00:00:00 2001 From: Benjamin Muskalla Date: Tue, 10 Aug 2021 11:37:19 +0200 Subject: [PATCH 075/741] Use basename for jars --- java/ql/src/Telemetry/ExternalLibraryUsage.ql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/ql/src/Telemetry/ExternalLibraryUsage.ql b/java/ql/src/Telemetry/ExternalLibraryUsage.ql index cbf060dec6c..fea32243771 100644 --- a/java/ql/src/Telemetry/ExternalLibraryUsage.ql +++ b/java/ql/src/Telemetry/ExternalLibraryUsage.ql @@ -18,4 +18,4 @@ where a.getCompilationUnit().getParentContainer*() = jar and not a.isTestLibrary() ) -select jar.getFile().getStem() + "." + jar.getFile().getExtension(), Usages order by Usages desc +select jar.getFile().getBaseName(), Usages order by Usages desc From c48586ff8035a1ba803036537f0c20eb28fb6991 Mon Sep 17 00:00:00 2001 From: Benjamin Muskalla Date: Tue, 10 Aug 2021 11:38:01 +0200 Subject: [PATCH 076/741] Implement coverage tracking using dataflow nodes --- java/ql/src/Telemetry/APIUsage.qll | 36 ++++++++++++++++++++++++------ 1 file changed, 29 insertions(+), 7 deletions(-) diff --git a/java/ql/src/Telemetry/APIUsage.qll b/java/ql/src/Telemetry/APIUsage.qll index e2d4a4db068..478c99958c7 100644 --- a/java/ql/src/Telemetry/APIUsage.qll +++ b/java/ql/src/Telemetry/APIUsage.qll @@ -1,26 +1,48 @@ import java private import semmle.code.java.dataflow.FlowSteps private import semmle.code.java.dataflow.ExternalFlow +private import semmle.code.java.dataflow.FlowSummary +private import semmle.code.java.dataflow.DataFlow +private import semmle.code.java.dataflow.TaintTracking +private import semmle.code.java.dataflow.FlowSources string supportKind(Callable api) { if api instanceof TaintPreservingCallable then result = "taint-preserving" else - if summaryModel(packageName(api), typeName(api), _, api.getName(), _, _, _, _, _) + if summaryCall(api) then result = "summary" else - if sinkModel(packageName(api), typeName(api), _, api.getName(), _, _, _, _) + if sink(api) then result = "sink" else - if sourceModel(packageName(api), typeName(api), _, api.getName(), _, _, _, _) + if source(api) then result = "source" else result = "?" } -private string packageName(Callable api) { - result = api.getCompilationUnit().getPackage().toString() +predicate summaryCall(Callable api) { + api instanceof SummarizedCallable + or + exists(Call call, DataFlow::Node arg | + call.getCallee() = api and + [call.getAnArgument(), call.getQualifier()] = arg.asExpr() and + TaintTracking::localAdditionalTaintStep(arg, _) + ) } -private string typeName(Callable api) { - result = api.getDeclaringType().getAnAncestor().getSourceDeclaration().toString() +predicate sink(Callable api) { + exists(Call call, DataFlow::Node arg | + call.getCallee() = api and + [call.getAnArgument(), call.getQualifier()] = arg.asExpr() and + sinkNode(arg, _) + ) +} + +predicate source(Callable api) { + exists(Call call, DataFlow::Node arg | + call.getCallee() = api and + [call.getAnArgument(), call.getQualifier()] = arg.asExpr() and + arg instanceof RemoteFlowSource + ) } From 26d426907116636039df76eb1b2620e843a0fb51 Mon Sep 17 00:00:00 2001 From: Benjamin Muskalla Date: Tue, 10 Aug 2021 12:02:56 +0200 Subject: [PATCH 077/741] Use FlowSources for coverage tracking --- java/ql/src/Telemetry/APIUsage.qll | 33 ++++++++++-------------------- 1 file changed, 11 insertions(+), 22 deletions(-) diff --git a/java/ql/src/Telemetry/APIUsage.qll b/java/ql/src/Telemetry/APIUsage.qll index 478c99958c7..9c9670a1b16 100644 --- a/java/ql/src/Telemetry/APIUsage.qll +++ b/java/ql/src/Telemetry/APIUsage.qll @@ -1,9 +1,4 @@ import java -private import semmle.code.java.dataflow.FlowSteps -private import semmle.code.java.dataflow.ExternalFlow -private import semmle.code.java.dataflow.FlowSummary -private import semmle.code.java.dataflow.DataFlow -private import semmle.code.java.dataflow.TaintTracking private import semmle.code.java.dataflow.FlowSources string supportKind(Callable api) { @@ -22,27 +17,21 @@ string supportKind(Callable api) { } predicate summaryCall(Callable api) { - api instanceof SummarizedCallable - or - exists(Call call, DataFlow::Node arg | - call.getCallee() = api and - [call.getAnArgument(), call.getQualifier()] = arg.asExpr() and - TaintTracking::localAdditionalTaintStep(arg, _) - ) + summaryModel(packageName(api), typeName(api), _, api.getName(), _, _, _, _, _) } predicate sink(Callable api) { - exists(Call call, DataFlow::Node arg | - call.getCallee() = api and - [call.getAnArgument(), call.getQualifier()] = arg.asExpr() and - sinkNode(arg, _) - ) + sinkModel(packageName(api), typeName(api), _, api.getName(), _, _, _, _) } predicate source(Callable api) { - exists(Call call, DataFlow::Node arg | - call.getCallee() = api and - [call.getAnArgument(), call.getQualifier()] = arg.asExpr() and - arg instanceof RemoteFlowSource - ) + sourceModel(packageName(api), typeName(api), _, api.getName(), _, _, _, _) +} + +private string packageName(Callable api) { + result = api.getCompilationUnit().getPackage().toString() +} + +private string typeName(Callable api) { + result = api.getDeclaringType().getAnAncestor().getSourceDeclaration().toString() } From 8127f63b1eed60c25d97154d72a8183c4c0b0d4f Mon Sep 17 00:00:00 2001 From: Benjamin Muskalla Date: Tue, 10 Aug 2021 12:05:16 +0200 Subject: [PATCH 078/741] Only include APIs without support --- java/ql/src/Telemetry/ExternalAPI.qll | 2 ++ java/ql/src/Telemetry/ExternalAPIUsages.ql | 9 ++++----- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/java/ql/src/Telemetry/ExternalAPI.qll b/java/ql/src/Telemetry/ExternalAPI.qll index b665bbb7fec..7f78e63a013 100644 --- a/java/ql/src/Telemetry/ExternalAPI.qll +++ b/java/ql/src/Telemetry/ExternalAPI.qll @@ -21,6 +21,8 @@ class ExternalAPI extends Callable { api.getDeclaringType().getPackage() + ";?;" + api.getDeclaringType().getSourceDeclaration() + ";" + api.getName() + ";" + paramsString(api) } + + predicate isSupported() { not supportKind(this) = "?" } } private class TestLibrary extends RefType { diff --git a/java/ql/src/Telemetry/ExternalAPIUsages.ql b/java/ql/src/Telemetry/ExternalAPIUsages.ql index a95116ddcd9..e1a38cf549a 100644 --- a/java/ql/src/Telemetry/ExternalAPIUsages.ql +++ b/java/ql/src/Telemetry/ExternalAPIUsages.ql @@ -2,7 +2,8 @@ * @name Usage of APIs coming from external libraries * @description A list of 3rd party APIs used in the codebase. Excludes test and generated code. * @id java/telemetry/external-api - * @kind diagnostic + * @kind metric + * @metricType callable */ import java @@ -10,15 +11,13 @@ import APIUsage import ExternalAPI import semmle.code.java.GeneratedFiles -// TODO [bm]: decide whether to drop the order by or -// turn Usage into string for diagnostic kind -// https://github.slack.com/archives/C01JJP3EF8E/p1627910071013000 from ExternalAPI api where not api.isTestLibrary() and + not api.isSupported() and api.isInteresting() select api.asCSV(api) as csv, count(Call c | c.getCallee() = api and not c.getFile() instanceof GeneratedFile - ) as Usages, supportKind(api) as Kind order by Usages desc + ) as Usages order by Usages desc From ec7f4d18e187c92f881d7ffa571342bfa38fbfa5 Mon Sep 17 00:00:00 2001 From: Benjamin Muskalla Date: Wed, 11 Aug 2021 15:31:33 +0200 Subject: [PATCH 079/741] Avoid duplicates and support modular runtime --- java/ql/src/Telemetry/ExternalAPI.qll | 8 ++++++++ java/ql/src/Telemetry/ExternalLibraryUsage.ql | 11 ++++++----- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/java/ql/src/Telemetry/ExternalAPI.qll b/java/ql/src/Telemetry/ExternalAPI.qll index 7f78e63a013..af36d974557 100644 --- a/java/ql/src/Telemetry/ExternalAPI.qll +++ b/java/ql/src/Telemetry/ExternalAPI.qll @@ -23,6 +23,14 @@ class ExternalAPI extends Callable { } predicate isSupported() { not supportKind(this) = "?" } + + string jarContainer() { + result = containerAsJar(any(ExternalAPI api).getCompilationUnit().getParentContainer*()) + } + + private string containerAsJar(Container container) { + if container instanceof JarFile then result = container.getBaseName() else result = "rt.jar" + } } private class TestLibrary extends RefType { diff --git a/java/ql/src/Telemetry/ExternalLibraryUsage.ql b/java/ql/src/Telemetry/ExternalLibraryUsage.ql index fea32243771..58af3d8c8af 100644 --- a/java/ql/src/Telemetry/ExternalLibraryUsage.ql +++ b/java/ql/src/Telemetry/ExternalLibraryUsage.ql @@ -1,21 +1,22 @@ /** * @name External libraries * @description A list of external libraries used in the code - * @kind diagnostic + * @kind metric + * @metricType callable * @id java/telemetry/external-libs */ import java import ExternalAPI -from int Usages, JarFile jar +from int Usages, string jarname where - jar = any(ExternalAPI api).getCompilationUnit().getParentContainer*() and + jarname = any(ExternalAPI api).jarContainer() and Usages = strictcount(Call c, ExternalAPI a | c.getCallee() = a and not c.getFile() instanceof GeneratedFile and - a.getCompilationUnit().getParentContainer*() = jar and + a.jarContainer() = jarname and not a.isTestLibrary() ) -select jar.getFile().getBaseName(), Usages order by Usages desc +select jarname, Usages order by Usages desc From 6287e6d8e976f85fb4fa1edc6050c9b20107d91c Mon Sep 17 00:00:00 2001 From: Benjamin Muskalla Date: Wed, 11 Aug 2021 15:31:56 +0200 Subject: [PATCH 080/741] Filter unused API callsites --- java/ql/src/Telemetry/ExternalAPIUsages.ql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/ql/src/Telemetry/ExternalAPIUsages.ql b/java/ql/src/Telemetry/ExternalAPIUsages.ql index e1a38cf549a..24b7bc2a355 100644 --- a/java/ql/src/Telemetry/ExternalAPIUsages.ql +++ b/java/ql/src/Telemetry/ExternalAPIUsages.ql @@ -17,7 +17,7 @@ where not api.isSupported() and api.isInteresting() select api.asCSV(api) as csv, - count(Call c | + strictcount(Call c | c.getCallee() = api and not c.getFile() instanceof GeneratedFile ) as Usages order by Usages desc From 26ffe6c03d905c3073fe6886da20fa633a6178e3 Mon Sep 17 00:00:00 2001 From: Benjamin Muskalla Date: Wed, 11 Aug 2021 15:32:09 +0200 Subject: [PATCH 081/741] Add tests for telemetry queries --- .../ExternalAPIUsage.expected | 1 + .../ExternalAPIUsage/ExternalAPIUsage.qlref | 1 + .../Telemetry/ExternalAPIUsage/Test.java | 21 ++++++++++++++++++ .../ExternalLibraryUsage.class | Bin 0 -> 453 bytes .../ExternalLibraryUsage.expected | 1 + .../ExternalLibraryUsage.qlref | 1 + .../Telemetry/ExternalLibraryUsage/Test.java | 9 ++++++++ 7 files changed, 34 insertions(+) create mode 100644 java/ql/test/query-tests/Telemetry/ExternalAPIUsage/ExternalAPIUsage.expected create mode 100644 java/ql/test/query-tests/Telemetry/ExternalAPIUsage/ExternalAPIUsage.qlref create mode 100644 java/ql/test/query-tests/Telemetry/ExternalAPIUsage/Test.java create mode 100644 java/ql/test/query-tests/Telemetry/ExternalLibraryUsage/ExternalLibraryUsage.class create mode 100644 java/ql/test/query-tests/Telemetry/ExternalLibraryUsage/ExternalLibraryUsage.expected create mode 100644 java/ql/test/query-tests/Telemetry/ExternalLibraryUsage/ExternalLibraryUsage.qlref create mode 100644 java/ql/test/query-tests/Telemetry/ExternalLibraryUsage/Test.java diff --git a/java/ql/test/query-tests/Telemetry/ExternalAPIUsage/ExternalAPIUsage.expected b/java/ql/test/query-tests/Telemetry/ExternalAPIUsage/ExternalAPIUsage.expected new file mode 100644 index 00000000000..4ca6e36b95d --- /dev/null +++ b/java/ql/test/query-tests/Telemetry/ExternalAPIUsage/ExternalAPIUsage.expected @@ -0,0 +1 @@ +| java.time;?;Duration;ofMillis;(long) | 1 | \ No newline at end of file diff --git a/java/ql/test/query-tests/Telemetry/ExternalAPIUsage/ExternalAPIUsage.qlref b/java/ql/test/query-tests/Telemetry/ExternalAPIUsage/ExternalAPIUsage.qlref new file mode 100644 index 00000000000..db2c0b168b0 --- /dev/null +++ b/java/ql/test/query-tests/Telemetry/ExternalAPIUsage/ExternalAPIUsage.qlref @@ -0,0 +1 @@ +Telemetry/ExternalAPIUsages.ql \ No newline at end of file diff --git a/java/ql/test/query-tests/Telemetry/ExternalAPIUsage/Test.java b/java/ql/test/query-tests/Telemetry/ExternalAPIUsage/Test.java new file mode 100644 index 00000000000..c2497894e1c --- /dev/null +++ b/java/ql/test/query-tests/Telemetry/ExternalAPIUsage/Test.java @@ -0,0 +1,21 @@ +import java.time.Duration; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +class ExternalApiUsage { + public static void main(String[] args) { + List foo = new ArrayList(); // already supported + Map map = new HashMap<>(); + map.put("foo", new Object()); + + Duration d = java.time.Duration.ofMillis(1000); // not supported + + long l = "foo".length(); // not interesting + + System.out.println(d); + System.out.println(map); + System.out.println(foo); + } +} diff --git a/java/ql/test/query-tests/Telemetry/ExternalLibraryUsage/ExternalLibraryUsage.class b/java/ql/test/query-tests/Telemetry/ExternalLibraryUsage/ExternalLibraryUsage.class new file mode 100644 index 0000000000000000000000000000000000000000..aedd54176ac237196ddc031fa73d2c67fa610e99 GIT binary patch literal 453 zcmY*VTT8<*7(MB_b*pu&?&5Xg<5aM|`7jYg^r@(@DTq($3?ri#NmFq@OCKC4_yhb= z;@1tC3ncmS<(!;z^8NGi1>hJvHY~UnR%{q>D_BL{MgvU?EemT5r4t!TeacYi?AR*iX!XXa77_VRGP-Ea+{whdA#0ip3LbU;3@o-8tfw3lQm$s_U#yu5#lkL1^nLj- zXi^kVQmWdtGun&$6R=k*7?x-)O`9gc94u3vLyw4>lig1k_Y)NSH<$ foo = new ArrayList(); // Java Runtime + System.out.println(foo); + } +} From 8aba0b04bce7f26b4b1cd5c45c510cb3d0d6cff8 Mon Sep 17 00:00:00 2001 From: Benjamin Muskalla Date: Wed, 11 Aug 2021 16:07:24 +0200 Subject: [PATCH 082/741] Add QLDoc for all shared libraries --- java/ql/src/Telemetry/APIUsage.qll | 11 ++++++++--- java/ql/src/Telemetry/ExternalAPI.qll | 14 ++++++++++++++ 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/java/ql/src/Telemetry/APIUsage.qll b/java/ql/src/Telemetry/APIUsage.qll index 9c9670a1b16..424d6cb1852 100644 --- a/java/ql/src/Telemetry/APIUsage.qll +++ b/java/ql/src/Telemetry/APIUsage.qll @@ -1,6 +1,11 @@ +/** Provides classes and predicates related to support coverage of external libraries. */ + import java private import semmle.code.java.dataflow.FlowSources +/** + * Gets the coverage support for the given `Callable`. If the `Callable` is not supported, returns "?". + */ string supportKind(Callable api) { if api instanceof TaintPreservingCallable then result = "taint-preserving" @@ -16,15 +21,15 @@ string supportKind(Callable api) { else result = "?" } -predicate summaryCall(Callable api) { +private predicate summaryCall(Callable api) { summaryModel(packageName(api), typeName(api), _, api.getName(), _, _, _, _, _) } -predicate sink(Callable api) { +private predicate sink(Callable api) { sinkModel(packageName(api), typeName(api), _, api.getName(), _, _, _, _) } -predicate source(Callable api) { +private predicate source(Callable api) { sourceModel(packageName(api), typeName(api), _, api.getName(), _, _, _, _) } diff --git a/java/ql/src/Telemetry/ExternalAPI.qll b/java/ql/src/Telemetry/ExternalAPI.qll index af36d974557..e90679c4dc1 100644 --- a/java/ql/src/Telemetry/ExternalAPI.qll +++ b/java/ql/src/Telemetry/ExternalAPI.qll @@ -1,12 +1,19 @@ +/** Provides classes and predicates related to handling APIs from external libraries. */ + private import java private import APIUsage private import semmle.code.java.dataflow.ExternalFlow +/** + * An external API from either the Java Standard Library or a 3rd party library. + */ class ExternalAPI extends Callable { ExternalAPI() { not this.fromSource() } + /** Holds true if this API is part of a common testing library or framework */ predicate isTestLibrary() { getDeclaringType() instanceof TestLibrary } + /** Holds true if this API has inputs or outputs that are interesting to support by CodeQL. */ predicate isInteresting() { getNumberOfParameters() > 0 and exists(Type retType | retType = getReturnType() | @@ -16,14 +23,21 @@ class ExternalAPI extends Callable { ) } + /** + * Gets information about the external API in the form expected by the CSV modeling framework. + */ string asCSV(ExternalAPI api) { result = api.getDeclaringType().getPackage() + ";?;" + api.getDeclaringType().getSourceDeclaration() + ";" + api.getName() + ";" + paramsString(api) } + /** Holds true if this API is not yet supported by existing CodeQL libraries */ predicate isSupported() { not supportKind(this) = "?" } + /** + * Gets the jar file containing this API. Normalizes the Java Runtime to "rt.jar" despite the presence of modules. + */ string jarContainer() { result = containerAsJar(any(ExternalAPI api).getCompilationUnit().getParentContainer*()) } From 89f4a35273db3f94bc30cd0a395ce34d6be91f84 Mon Sep 17 00:00:00 2001 From: Benjamin Muskalla Date: Mon, 16 Aug 2021 15:40:53 +0200 Subject: [PATCH 083/741] Remove filter to see all unsupported APIs --- java/ql/src/Telemetry/ExternalAPI.qll | 10 ---------- java/ql/src/Telemetry/ExternalAPIUsages.ql | 3 +-- 2 files changed, 1 insertion(+), 12 deletions(-) diff --git a/java/ql/src/Telemetry/ExternalAPI.qll b/java/ql/src/Telemetry/ExternalAPI.qll index e90679c4dc1..bfdb3a6df4f 100644 --- a/java/ql/src/Telemetry/ExternalAPI.qll +++ b/java/ql/src/Telemetry/ExternalAPI.qll @@ -13,16 +13,6 @@ class ExternalAPI extends Callable { /** Holds true if this API is part of a common testing library or framework */ predicate isTestLibrary() { getDeclaringType() instanceof TestLibrary } - /** Holds true if this API has inputs or outputs that are interesting to support by CodeQL. */ - predicate isInteresting() { - getNumberOfParameters() > 0 and - exists(Type retType | retType = getReturnType() | - not retType instanceof VoidType and - not retType instanceof PrimitiveType and - not retType instanceof BoxedType - ) - } - /** * Gets information about the external API in the form expected by the CSV modeling framework. */ diff --git a/java/ql/src/Telemetry/ExternalAPIUsages.ql b/java/ql/src/Telemetry/ExternalAPIUsages.ql index 24b7bc2a355..4f5fb53d759 100644 --- a/java/ql/src/Telemetry/ExternalAPIUsages.ql +++ b/java/ql/src/Telemetry/ExternalAPIUsages.ql @@ -14,8 +14,7 @@ import semmle.code.java.GeneratedFiles from ExternalAPI api where not api.isTestLibrary() and - not api.isSupported() and - api.isInteresting() + not api.isSupported() select api.asCSV(api) as csv, strictcount(Call c | c.getCallee() = api and From 87ef540b52f309251f731f9941127cc764162505 Mon Sep 17 00:00:00 2001 From: Benjamin Muskalla Date: Mon, 16 Aug 2021 16:38:32 +0200 Subject: [PATCH 084/741] Split out queries showing supported APIs --- java/ql/src/Telemetry/APIUsage.qll | 6 +++++ .../src/Telemetry/SupportedExternalSinks.ql | 22 +++++++++++++++++++ .../src/Telemetry/SupportedExternalSources.ql | 22 +++++++++++++++++++ .../src/Telemetry/SupportedExternalTaint.ql | 22 +++++++++++++++++++ ...PIUsages.ql => UnsupportedExternalAPIs.ql} | 2 +- 5 files changed, 73 insertions(+), 1 deletion(-) create mode 100644 java/ql/src/Telemetry/SupportedExternalSinks.ql create mode 100644 java/ql/src/Telemetry/SupportedExternalSources.ql create mode 100644 java/ql/src/Telemetry/SupportedExternalTaint.ql rename java/ql/src/Telemetry/{ExternalAPIUsages.ql => UnsupportedExternalAPIs.ql} (91%) diff --git a/java/ql/src/Telemetry/APIUsage.qll b/java/ql/src/Telemetry/APIUsage.qll index 424d6cb1852..23d7a6ad49f 100644 --- a/java/ql/src/Telemetry/APIUsage.qll +++ b/java/ql/src/Telemetry/APIUsage.qll @@ -31,6 +31,12 @@ private predicate sink(Callable api) { private predicate source(Callable api) { sourceModel(packageName(api), typeName(api), _, api.getName(), _, _, _, _) + or + exists(Call call, DataFlow::Node arg | + call.getCallee() = api and + [call.getAnArgument(), call.getQualifier()] = arg.asExpr() and + arg instanceof RemoteFlowSource + ) } private string packageName(Callable api) { diff --git a/java/ql/src/Telemetry/SupportedExternalSinks.ql b/java/ql/src/Telemetry/SupportedExternalSinks.ql new file mode 100644 index 00000000000..adebe3f4533 --- /dev/null +++ b/java/ql/src/Telemetry/SupportedExternalSinks.ql @@ -0,0 +1,22 @@ +/** + * @name Supported sinks in external libraries + * @description A list of 3rd party APIs detected as sinks. Excludes test and generated code. + * @id java/telemetry/supported-external-api-sinks + * @kind metric + * @metricType callable + */ + +import java +import APIUsage +import ExternalAPI +import semmle.code.java.GeneratedFiles + +from ExternalAPI api +where + not api.isTestLibrary() and + supportKind(api) = "sink" +select api.asCSV(api) as csv, + strictcount(Call c | + c.getCallee() = api and + not c.getFile() instanceof GeneratedFile + ) as Usages order by Usages desc diff --git a/java/ql/src/Telemetry/SupportedExternalSources.ql b/java/ql/src/Telemetry/SupportedExternalSources.ql new file mode 100644 index 00000000000..d8fd21b8440 --- /dev/null +++ b/java/ql/src/Telemetry/SupportedExternalSources.ql @@ -0,0 +1,22 @@ +/** + * @name Supported sources in external libraries + * @description A list of 3rd party APIs detected as sources. Excludes test and generated code. + * @id java/telemetry/supported-external-api-sources + * @kind metric + * @metricType callable + */ + +import java +import APIUsage +import ExternalAPI +import semmle.code.java.GeneratedFiles + +from ExternalAPI api +where + not api.isTestLibrary() and + supportKind(api) = "source" +select api.asCSV(api) as csv, + strictcount(Call c | + c.getCallee() = api and + not c.getFile() instanceof GeneratedFile + ) as Usages order by Usages desc diff --git a/java/ql/src/Telemetry/SupportedExternalTaint.ql b/java/ql/src/Telemetry/SupportedExternalTaint.ql new file mode 100644 index 00000000000..a9da59823ad --- /dev/null +++ b/java/ql/src/Telemetry/SupportedExternalTaint.ql @@ -0,0 +1,22 @@ +/** + * @name Supported sinks in external libraries + * @description A list of 3rd party APIs detected as sinks. Excludes test and generated code. + * @id java/telemetry/supported-external-api-taint + * @kind metric + * @metricType callable + */ + +import java +import APIUsage +import ExternalAPI +import semmle.code.java.GeneratedFiles + +from ExternalAPI api +where + not api.isTestLibrary() and + supportKind(api) = ["summary", "taint-preserving"] +select api.asCSV(api) as csv, + strictcount(Call c | + c.getCallee() = api and + not c.getFile() instanceof GeneratedFile + ) as Usages order by Usages desc diff --git a/java/ql/src/Telemetry/ExternalAPIUsages.ql b/java/ql/src/Telemetry/UnsupportedExternalAPIs.ql similarity index 91% rename from java/ql/src/Telemetry/ExternalAPIUsages.ql rename to java/ql/src/Telemetry/UnsupportedExternalAPIs.ql index 4f5fb53d759..2af53c5b3e4 100644 --- a/java/ql/src/Telemetry/ExternalAPIUsages.ql +++ b/java/ql/src/Telemetry/UnsupportedExternalAPIs.ql @@ -1,7 +1,7 @@ /** * @name Usage of APIs coming from external libraries * @description A list of 3rd party APIs used in the codebase. Excludes test and generated code. - * @id java/telemetry/external-api + * @id java/telemetry/unsupported-external-api * @kind metric * @metricType callable */ From 1d3bcdf522186bbf40cc863e000c84578076f804 Mon Sep 17 00:00:00 2001 From: Benjamin Muskalla Date: Mon, 16 Aug 2021 21:55:00 +0200 Subject: [PATCH 085/741] Align tests with new query structure --- .../ExternalAPIUsage/ExternalAPIUsage.expected | 1 - .../Telemetry/ExternalAPIUsage/ExternalAPIUsage.qlref | 1 - .../ExternalLibraryUsage.expected | 2 +- .../SupportedExternalSinks.expected | 2 ++ .../SupportedExternalSinks.java | 11 +++++++++++ .../SupportedExternalSinks.qlref | 1 + .../SupportedExternalSources.expected | 1 + .../SupportedExternalSources.java | 9 +++++++++ .../SupportedExternalSources.qlref | 1 + .../SupportedExternalTaint.expected | 2 ++ .../SupportedExternalTaint.java | 7 +++++++ .../SupportedExternalTaint.qlref | 1 + .../Test.java | 0 .../UnsupportedExternalAPIs.expected | 6 ++++++ .../UnsupportedExternalAPIs.qlref | 1 + 15 files changed, 43 insertions(+), 3 deletions(-) delete mode 100644 java/ql/test/query-tests/Telemetry/ExternalAPIUsage/ExternalAPIUsage.expected delete mode 100644 java/ql/test/query-tests/Telemetry/ExternalAPIUsage/ExternalAPIUsage.qlref create mode 100644 java/ql/test/query-tests/Telemetry/SupportedExternalSinks/SupportedExternalSinks.expected create mode 100644 java/ql/test/query-tests/Telemetry/SupportedExternalSinks/SupportedExternalSinks.java create mode 100644 java/ql/test/query-tests/Telemetry/SupportedExternalSinks/SupportedExternalSinks.qlref create mode 100644 java/ql/test/query-tests/Telemetry/SupportedExternalSources/SupportedExternalSources.expected create mode 100644 java/ql/test/query-tests/Telemetry/SupportedExternalSources/SupportedExternalSources.java create mode 100644 java/ql/test/query-tests/Telemetry/SupportedExternalSources/SupportedExternalSources.qlref create mode 100644 java/ql/test/query-tests/Telemetry/SupportedExternalTaint/SupportedExternalTaint.expected create mode 100644 java/ql/test/query-tests/Telemetry/SupportedExternalTaint/SupportedExternalTaint.java create mode 100644 java/ql/test/query-tests/Telemetry/SupportedExternalTaint/SupportedExternalTaint.qlref rename java/ql/test/query-tests/Telemetry/{ExternalAPIUsage => UnsupportedExternalAPIs}/Test.java (100%) create mode 100644 java/ql/test/query-tests/Telemetry/UnsupportedExternalAPIs/UnsupportedExternalAPIs.expected create mode 100644 java/ql/test/query-tests/Telemetry/UnsupportedExternalAPIs/UnsupportedExternalAPIs.qlref diff --git a/java/ql/test/query-tests/Telemetry/ExternalAPIUsage/ExternalAPIUsage.expected b/java/ql/test/query-tests/Telemetry/ExternalAPIUsage/ExternalAPIUsage.expected deleted file mode 100644 index 4ca6e36b95d..00000000000 --- a/java/ql/test/query-tests/Telemetry/ExternalAPIUsage/ExternalAPIUsage.expected +++ /dev/null @@ -1 +0,0 @@ -| java.time;?;Duration;ofMillis;(long) | 1 | \ No newline at end of file diff --git a/java/ql/test/query-tests/Telemetry/ExternalAPIUsage/ExternalAPIUsage.qlref b/java/ql/test/query-tests/Telemetry/ExternalAPIUsage/ExternalAPIUsage.qlref deleted file mode 100644 index db2c0b168b0..00000000000 --- a/java/ql/test/query-tests/Telemetry/ExternalAPIUsage/ExternalAPIUsage.qlref +++ /dev/null @@ -1 +0,0 @@ -Telemetry/ExternalAPIUsages.ql \ No newline at end of file diff --git a/java/ql/test/query-tests/Telemetry/ExternalLibraryUsage/ExternalLibraryUsage.expected b/java/ql/test/query-tests/Telemetry/ExternalLibraryUsage/ExternalLibraryUsage.expected index d5f8d4b7002..dbba1054b8c 100644 --- a/java/ql/test/query-tests/Telemetry/ExternalLibraryUsage/ExternalLibraryUsage.expected +++ b/java/ql/test/query-tests/Telemetry/ExternalLibraryUsage/ExternalLibraryUsage.expected @@ -1 +1 @@ -rt.jar | 3 | \ No newline at end of file +| rt.jar | 3 | diff --git a/java/ql/test/query-tests/Telemetry/SupportedExternalSinks/SupportedExternalSinks.expected b/java/ql/test/query-tests/Telemetry/SupportedExternalSinks/SupportedExternalSinks.expected new file mode 100644 index 00000000000..3d595aa5353 --- /dev/null +++ b/java/ql/test/query-tests/Telemetry/SupportedExternalSinks/SupportedExternalSinks.expected @@ -0,0 +1,2 @@ +| java.io;?;FileWriter;FileWriter;(File) | 1 | +| java.net;?;URL;openStream;() | 1 | diff --git a/java/ql/test/query-tests/Telemetry/SupportedExternalSinks/SupportedExternalSinks.java b/java/ql/test/query-tests/Telemetry/SupportedExternalSinks/SupportedExternalSinks.java new file mode 100644 index 00000000000..affaf5314c6 --- /dev/null +++ b/java/ql/test/query-tests/Telemetry/SupportedExternalSinks/SupportedExternalSinks.java @@ -0,0 +1,11 @@ +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.net.URL; + +class SupportedExternalSinks { + public static void main(String[] args) throws Exception { + new FileWriter(new File("foo")); + new URL("http://foo").openStream(); + } +} diff --git a/java/ql/test/query-tests/Telemetry/SupportedExternalSinks/SupportedExternalSinks.qlref b/java/ql/test/query-tests/Telemetry/SupportedExternalSinks/SupportedExternalSinks.qlref new file mode 100644 index 00000000000..e8bd57fad50 --- /dev/null +++ b/java/ql/test/query-tests/Telemetry/SupportedExternalSinks/SupportedExternalSinks.qlref @@ -0,0 +1 @@ +Telemetry/SupportedExternalSinks.ql \ No newline at end of file diff --git a/java/ql/test/query-tests/Telemetry/SupportedExternalSources/SupportedExternalSources.expected b/java/ql/test/query-tests/Telemetry/SupportedExternalSources/SupportedExternalSources.expected new file mode 100644 index 00000000000..26d2efed5e5 --- /dev/null +++ b/java/ql/test/query-tests/Telemetry/SupportedExternalSources/SupportedExternalSources.expected @@ -0,0 +1 @@ +| java.net;?;URLConnection;getInputStream;() | 1 | diff --git a/java/ql/test/query-tests/Telemetry/SupportedExternalSources/SupportedExternalSources.java b/java/ql/test/query-tests/Telemetry/SupportedExternalSources/SupportedExternalSources.java new file mode 100644 index 00000000000..a9640bce62d --- /dev/null +++ b/java/ql/test/query-tests/Telemetry/SupportedExternalSources/SupportedExternalSources.java @@ -0,0 +1,9 @@ +import java.io.InputStream; +import java.net.URL; + +class SupportedExternalSources { + public static void main(String[] args) throws Exception { + URL github = new URL("https://www.github.com/"); + InputStream stream = github.openConnection().getInputStream(); + } +} diff --git a/java/ql/test/query-tests/Telemetry/SupportedExternalSources/SupportedExternalSources.qlref b/java/ql/test/query-tests/Telemetry/SupportedExternalSources/SupportedExternalSources.qlref new file mode 100644 index 00000000000..06b22c87004 --- /dev/null +++ b/java/ql/test/query-tests/Telemetry/SupportedExternalSources/SupportedExternalSources.qlref @@ -0,0 +1 @@ +Telemetry/SupportedExternalSources.ql \ No newline at end of file diff --git a/java/ql/test/query-tests/Telemetry/SupportedExternalTaint/SupportedExternalTaint.expected b/java/ql/test/query-tests/Telemetry/SupportedExternalTaint/SupportedExternalTaint.expected new file mode 100644 index 00000000000..18be8556005 --- /dev/null +++ b/java/ql/test/query-tests/Telemetry/SupportedExternalTaint/SupportedExternalTaint.expected @@ -0,0 +1,2 @@ +| java.lang;?;StringBuilder;append;(String) | 1 | +| java.lang;?;StringBuilder;toString;() | 1 | diff --git a/java/ql/test/query-tests/Telemetry/SupportedExternalTaint/SupportedExternalTaint.java b/java/ql/test/query-tests/Telemetry/SupportedExternalTaint/SupportedExternalTaint.java new file mode 100644 index 00000000000..ed9952ab0a1 --- /dev/null +++ b/java/ql/test/query-tests/Telemetry/SupportedExternalTaint/SupportedExternalTaint.java @@ -0,0 +1,7 @@ +class SupportedExternalTaint { + public static void main(String[] args) throws Exception { + StringBuilder builder = new StringBuilder(); + builder.append("foo"); + builder.toString(); + } +} diff --git a/java/ql/test/query-tests/Telemetry/SupportedExternalTaint/SupportedExternalTaint.qlref b/java/ql/test/query-tests/Telemetry/SupportedExternalTaint/SupportedExternalTaint.qlref new file mode 100644 index 00000000000..1a32b35f60d --- /dev/null +++ b/java/ql/test/query-tests/Telemetry/SupportedExternalTaint/SupportedExternalTaint.qlref @@ -0,0 +1 @@ +Telemetry/SupportedExternalTaint.ql \ No newline at end of file diff --git a/java/ql/test/query-tests/Telemetry/ExternalAPIUsage/Test.java b/java/ql/test/query-tests/Telemetry/UnsupportedExternalAPIs/Test.java similarity index 100% rename from java/ql/test/query-tests/Telemetry/ExternalAPIUsage/Test.java rename to java/ql/test/query-tests/Telemetry/UnsupportedExternalAPIs/Test.java diff --git a/java/ql/test/query-tests/Telemetry/UnsupportedExternalAPIs/UnsupportedExternalAPIs.expected b/java/ql/test/query-tests/Telemetry/UnsupportedExternalAPIs/UnsupportedExternalAPIs.expected new file mode 100644 index 00000000000..22cac276be6 --- /dev/null +++ b/java/ql/test/query-tests/Telemetry/UnsupportedExternalAPIs/UnsupportedExternalAPIs.expected @@ -0,0 +1,6 @@ +| java.io;?;PrintStream;println;(Object) | 3 | +| java.lang;?;Object;Object;() | 2 | +| java.lang;?;String;length;() | 1 | +| java.time;?;Duration;ofMillis;(long) | 1 | +| java.util;?;ArrayList;ArrayList<>;() | 1 | +| java.util;?;HashMap;HashMap;() | 1 | diff --git a/java/ql/test/query-tests/Telemetry/UnsupportedExternalAPIs/UnsupportedExternalAPIs.qlref b/java/ql/test/query-tests/Telemetry/UnsupportedExternalAPIs/UnsupportedExternalAPIs.qlref new file mode 100644 index 00000000000..1d25dceeec3 --- /dev/null +++ b/java/ql/test/query-tests/Telemetry/UnsupportedExternalAPIs/UnsupportedExternalAPIs.qlref @@ -0,0 +1 @@ +Telemetry/UnsupportedExternalAPIs.ql \ No newline at end of file From 035f7b57e918aac1315ffdc7581b2b797aad27a0 Mon Sep 17 00:00:00 2001 From: Benjamin Muskalla Date: Tue, 17 Aug 2021 16:25:49 +0200 Subject: [PATCH 086/741] Improve query name --- java/ql/src/Telemetry/UnsupportedExternalAPIs.ql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/ql/src/Telemetry/UnsupportedExternalAPIs.ql b/java/ql/src/Telemetry/UnsupportedExternalAPIs.ql index 2af53c5b3e4..4a97e139a81 100644 --- a/java/ql/src/Telemetry/UnsupportedExternalAPIs.ql +++ b/java/ql/src/Telemetry/UnsupportedExternalAPIs.ql @@ -1,5 +1,5 @@ /** - * @name Usage of APIs coming from external libraries + * @name Usage of unsupported APIs coming from external libraries * @description A list of 3rd party APIs used in the codebase. Excludes test and generated code. * @id java/telemetry/unsupported-external-api * @kind metric From 99e19e6d593566156fc7b98444c2cfcf98297f4c Mon Sep 17 00:00:00 2001 From: Benjamin Muskalla Date: Tue, 17 Aug 2021 16:26:08 +0200 Subject: [PATCH 087/741] Fix predicate to only match the current API --- java/ql/src/Telemetry/ExternalAPI.qll | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/java/ql/src/Telemetry/ExternalAPI.qll b/java/ql/src/Telemetry/ExternalAPI.qll index bfdb3a6df4f..89bf49c2d07 100644 --- a/java/ql/src/Telemetry/ExternalAPI.qll +++ b/java/ql/src/Telemetry/ExternalAPI.qll @@ -28,9 +28,7 @@ class ExternalAPI extends Callable { /** * Gets the jar file containing this API. Normalizes the Java Runtime to "rt.jar" despite the presence of modules. */ - string jarContainer() { - result = containerAsJar(any(ExternalAPI api).getCompilationUnit().getParentContainer*()) - } + string jarContainer() { result = containerAsJar(this.getCompilationUnit().getParentContainer*()) } private string containerAsJar(Container container) { if container instanceof JarFile then result = container.getBaseName() else result = "rt.jar" From babec9bf7972558cf7fee278d152e06d624eea35 Mon Sep 17 00:00:00 2001 From: james Date: Wed, 18 Aug 2021 11:26:51 +0100 Subject: [PATCH 088/741] add data flow debugging guide --- docs/codeql/writing-codeql-queries/codeql-queries.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/codeql/writing-codeql-queries/codeql-queries.rst b/docs/codeql/writing-codeql-queries/codeql-queries.rst index 0b1224ce15f..fb255857fc8 100644 --- a/docs/codeql/writing-codeql-queries/codeql-queries.rst +++ b/docs/codeql/writing-codeql-queries/codeql-queries.rst @@ -25,3 +25,4 @@ CodeQL queries are used in code scanning analyses to find problems in source cod - :doc:`About data flow analysis `: Data flow analysis is used to compute the possible values that a variable can hold at various points in a program, determining how those values propagate through the program and where they are used. - :doc:`Creating path queries `: You can create path queries to visualize the flow of information through a codebase. - :doc:`Troubleshooting query performance `: Improve the performance of your CodeQL queries by following a few simple guidelines. +- :doc:`Debugging data-flow queries using partial flow `: If a data-flow query unexpectedly produces no results, you can use partial flow to debug the problem. From ad2850dd5d01240da054e7d74e54622c6a1004a4 Mon Sep 17 00:00:00 2001 From: james Date: Wed, 18 Aug 2021 11:27:53 +0100 Subject: [PATCH 089/741] add new tutorial --- ...g-a-data-flow-query-using-partial-flow.rst | 102 ++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 docs/codeql/writing-codeql-queries/debugging-a-data-flow-query-using-partial-flow.rst diff --git a/docs/codeql/writing-codeql-queries/debugging-a-data-flow-query-using-partial-flow.rst b/docs/codeql/writing-codeql-queries/debugging-a-data-flow-query-using-partial-flow.rst new file mode 100644 index 00000000000..c8ab639d744 --- /dev/null +++ b/docs/codeql/writing-codeql-queries/debugging-a-data-flow-query-using-partial-flow.rst @@ -0,0 +1,102 @@ +.. _debugging-data-flow-queries-using-partial-flow + +Debugging data-flow queries using partial flow +============================================== + +If a data-flow query unexpectedly produces no results, you can use partial flow to debug the problem. + +A typical data-flow query looks like this: + +.. code-block:: ql + +:: + + class MyConfig extends TaintTracking::Configuration { + MyConfig() { this = "MyConfig" } + + override predicate isSource(DataFlow::Node node) { node instanceof MySource } + + override predicate isSink(DataFlow::Node node) { node instanceof MySink } + } + + from MyConfig config, DataFlow::PathNode source, DataFlow::PathNode sink + where config.hasFlowPath(source, sink) + select sink.getNode(), source, sink, "Sink is reached from $@.", source.getNode(), "here" + +Or slightly simpler without path explanations: + +.. code-block:: ql + + from MyConfig config, DataFlow::Node source, DataFlow::Node sink + where config.hasPath(source, sink) + select sink, "Sink is reached from $@.", source.getNode(), "here" + +Checking sources and sinks +-------------------------- + +As a first step, make sure that the source and sink definitions contain what you expect. If one of these is empty then there can never be any data flow. The easiest way to verify this is using quick evaluation: Select the text ``node instanceof MySource``, right-click, and choose "CodeQL: Quick Evaluation". This will evaluate the highlighted text, which in this case means the set of sources. + +If both source and sink definitions look good then we will need to look for missing flow steps. + +``fieldFlowBranchLimit`` +------------------------ + +Data-flow configurations contain a parameter called ``fieldFlowBranchLimit``. This is a slightly unfortunate, but currently necessary, performance trade-off, and a too low value can cause false negatives. It is worth a quick check to set this to a high value and see whether this causes the query to yield result. Try, for example, to add the following to your configuration: + +.. code-block:: ql + + override int fieldFlowBranchLimit() { result = 5000 } + +If there are still no results and performance did not degrade to complete uselessness, then it is best to leave this set to a high value while doing further debugging. + +Partial flow +------------ + +A naive next step could be to try changing the sink definition to ``any()``. This would mean that we would get a lot of flow to all the places that are reachable from the sources. While this approach makes sense and can work, it can be hard to get an overview of the results as they can be quite plentiful, and it does come with a couple of additional caveats: Performance might degrade to uselessness and we might not even see all the partial flow paths. The latter point is somewhat subtle and deserves elaboration. Since the data-flow library tries very hard to prune impossible paths and since field stores and reads must be evenly matched along a path, then we will never see paths going through a store that fail to reach a corresponding read. This can make it hard to see where flow actually stops. + +Because of this, a ``Configuration`` comes with a mechanism for exploring partial flow that tries to deal with these caveats. This is the ``Configuration.hasPartialFlow`` predicate: + +.. code-block:: ql + + /** + * Holds if there is a partial data flow path from `source` to `node`. The + * approximate distance between `node` and the closest source is `dist` and + * is restricted to be less than or equal to `explorationLimit()`. This + * predicate completely disregards sink definitions. + * + * This predicate is intended for dataflow exploration and debugging and may + * perform poorly if the number of sources is too big and/or the exploration + * limit is set too high without using barriers. + * + * This predicate is disabled (has no results) by default. Override + * `explorationLimit()` with a suitable number to enable this predicate. + * + * To use this in a `path-problem` query, import the module `PartialPathGraph`. + */ + final predicate hasPartialFlow(PartialPathNode source, PartialPathNode node, int dist) { + +As noted in the qldoc for ``hasPartialFlow`` one must first enable this by adding an override of ``explorationLimit``. For example: + +.. code-block:: ql + + override int explorationLimit() { result = 5 } + +This defines the exploration radius within which ``hasPartialFlow`` returns results. + +It is also generally useful to focus on a single source at a time as the starting point for the flow exploration. This is most easily done by adding some ad-hoc restriction in the ``isSource`` predicate. + +To do quick ad-hoc evaluations of partial flow it is often easiest to add a predicate to the query that is solely intended for quick evaluation (right-click the predicate name and choose "CodeQL: Quick Evaluation"). A good starting point is something like: + +.. code-block:: ql + + predicate adhocPartialFlow(Callable c, PartialPathNode n, Node src, int dist) { + exists(MyConfig conf, PartialPathNode source | + conf.hasPartialFlow(source, n, dist) and + src = source.getNode() and + c = n.getNode().getEnclosingCallable() + ) + } + +If you are focusing on a single source then the ``src`` column is of course superfluous, and you may of course also add other columns of interest based on ``n``, but including the enclosing callable and the distance to the source at the very least is generally recommended, as they can be useful columns to sort on to better inspect the results. + +A couple of advanced tips in order to focus the partial flow results: If flow travels a long distance following an expected path and the distance means that a lot of uninteresting flow gets included in the exploration radius then one can simply replace the source definition with a suitable node found along the way and restart the partial flow exploration from that point. Alternatively, creative use of barriers/sanitizers can be used to cut off flow paths that are uninteresting and thereby reduce the number of partial flow results to increase overview. From 429decd7b6b258ef060623ee409a5a11bed9ebd8 Mon Sep 17 00:00:00 2001 From: james Date: Wed, 18 Aug 2021 11:38:03 +0100 Subject: [PATCH 090/741] tweak sojme text --- .../debugging-a-data-flow-query-using-partial-flow.rst | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/docs/codeql/writing-codeql-queries/debugging-a-data-flow-query-using-partial-flow.rst b/docs/codeql/writing-codeql-queries/debugging-a-data-flow-query-using-partial-flow.rst index c8ab639d744..fb69703dad8 100644 --- a/docs/codeql/writing-codeql-queries/debugging-a-data-flow-query-using-partial-flow.rst +++ b/docs/codeql/writing-codeql-queries/debugging-a-data-flow-query-using-partial-flow.rst @@ -5,6 +5,7 @@ Debugging data-flow queries using partial flow If a data-flow query unexpectedly produces no results, you can use partial flow to debug the problem. +In CodeQL, you can use :ref:`data flow analysis ` to compute the possible values that a variable can hold at various points in a program. A typical data-flow query looks like this: .. code-block:: ql @@ -31,10 +32,13 @@ Or slightly simpler without path explanations: where config.hasPath(source, sink) select sink, "Sink is reached from $@.", source.getNode(), "here" +If a data-flow query that you have written does not produce any results when you expect it to, there may be a problem with your query. +You can try to debug the potential problem by following the steps described below. + Checking sources and sinks -------------------------- -As a first step, make sure that the source and sink definitions contain what you expect. If one of these is empty then there can never be any data flow. The easiest way to verify this is using quick evaluation: Select the text ``node instanceof MySource``, right-click, and choose "CodeQL: Quick Evaluation". This will evaluate the highlighted text, which in this case means the set of sources. +As a first step, make sure that the source and sink definitions contain what you expect. If one of these is empty then there can never be any data flow. The easiest way to verify this is using quick evaluation in CodeQL for VS Code: Select the text ``node instanceof MySource``, right-click, and choose "CodeQL: Quick Evaluation". This will evaluate the highlighted text, which in this case means the set of sources. If both source and sink definitions look good then we will need to look for missing flow steps. From 18b82444066ec84b28cbdde71a0af2ba072fb7ab Mon Sep 17 00:00:00 2001 From: james Date: Wed, 18 Aug 2021 11:47:16 +0100 Subject: [PATCH 091/741] fix link --- .../debugging-a-data-flow-query-using-partial-flow.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/codeql/writing-codeql-queries/debugging-a-data-flow-query-using-partial-flow.rst b/docs/codeql/writing-codeql-queries/debugging-a-data-flow-query-using-partial-flow.rst index fb69703dad8..c74b6bb635e 100644 --- a/docs/codeql/writing-codeql-queries/debugging-a-data-flow-query-using-partial-flow.rst +++ b/docs/codeql/writing-codeql-queries/debugging-a-data-flow-query-using-partial-flow.rst @@ -1,4 +1,4 @@ -.. _debugging-data-flow-queries-using-partial-flow +.. _debugging-data-flow-queries-using-partial-flow: Debugging data-flow queries using partial flow ============================================== From 8443d344a2aef8fce0d4fe59ee2d6e4c1fb1593e Mon Sep 17 00:00:00 2001 From: james Date: Wed, 18 Aug 2021 11:58:42 +0100 Subject: [PATCH 092/741] correct article name --- ...low.rst => debugging-data-flow-queries-using-partial-flow.rst} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename docs/codeql/writing-codeql-queries/{debugging-a-data-flow-query-using-partial-flow.rst => debugging-data-flow-queries-using-partial-flow.rst} (100%) diff --git a/docs/codeql/writing-codeql-queries/debugging-a-data-flow-query-using-partial-flow.rst b/docs/codeql/writing-codeql-queries/debugging-data-flow-queries-using-partial-flow.rst similarity index 100% rename from docs/codeql/writing-codeql-queries/debugging-a-data-flow-query-using-partial-flow.rst rename to docs/codeql/writing-codeql-queries/debugging-data-flow-queries-using-partial-flow.rst From dcbf76621703031a730456ec4cb12e395a437957 Mon Sep 17 00:00:00 2001 From: james Date: Wed, 18 Aug 2021 12:14:48 +0100 Subject: [PATCH 093/741] add new article to toc --- docs/codeql/writing-codeql-queries/codeql-queries.rst | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/codeql/writing-codeql-queries/codeql-queries.rst b/docs/codeql/writing-codeql-queries/codeql-queries.rst index fb255857fc8..7a31fc76296 100644 --- a/docs/codeql/writing-codeql-queries/codeql-queries.rst +++ b/docs/codeql/writing-codeql-queries/codeql-queries.rst @@ -16,6 +16,7 @@ CodeQL queries are used in code scanning analyses to find problems in source cod about-data-flow-analysis creating-path-queries troubleshooting-query-performance + debugging-data-flow-queries-using-partial-flow - :doc:`About CodeQL queries `: CodeQL queries are used to analyze code for issues related to security, correctness, maintainability, and readability. - :doc:`Metadata for CodeQL queries `: Metadata tells users important information about CodeQL queries. You must include the correct query metadata in a query to be able to view query results in source code. @@ -25,4 +26,4 @@ CodeQL queries are used in code scanning analyses to find problems in source cod - :doc:`About data flow analysis `: Data flow analysis is used to compute the possible values that a variable can hold at various points in a program, determining how those values propagate through the program and where they are used. - :doc:`Creating path queries `: You can create path queries to visualize the flow of information through a codebase. - :doc:`Troubleshooting query performance `: Improve the performance of your CodeQL queries by following a few simple guidelines. -- :doc:`Debugging data-flow queries using partial flow `: If a data-flow query unexpectedly produces no results, you can use partial flow to debug the problem. +- :doc:`Debugging data-flow queries using partial flow `: If a data-flow query unexpectedly produces no results, you can use partial flow to debug the problem. From dbf7487a9b300175cff605ebc930752993fbed1e Mon Sep 17 00:00:00 2001 From: james Date: Mon, 23 Aug 2021 11:34:48 +0100 Subject: [PATCH 094/741] address review comments --- docs/codeql/writing-codeql-queries/codeql-queries.rst | 2 +- .../debugging-data-flow-queries-using-partial-flow.rst | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/codeql/writing-codeql-queries/codeql-queries.rst b/docs/codeql/writing-codeql-queries/codeql-queries.rst index 7a31fc76296..9607e782355 100644 --- a/docs/codeql/writing-codeql-queries/codeql-queries.rst +++ b/docs/codeql/writing-codeql-queries/codeql-queries.rst @@ -26,4 +26,4 @@ CodeQL queries are used in code scanning analyses to find problems in source cod - :doc:`About data flow analysis `: Data flow analysis is used to compute the possible values that a variable can hold at various points in a program, determining how those values propagate through the program and where they are used. - :doc:`Creating path queries `: You can create path queries to visualize the flow of information through a codebase. - :doc:`Troubleshooting query performance `: Improve the performance of your CodeQL queries by following a few simple guidelines. -- :doc:`Debugging data-flow queries using partial flow `: If a data-flow query unexpectedly produces no results, you can use partial flow to debug the problem. +- :doc:`Debugging data-flow queries using partial flow `: If a data-flow query doesn't produce the results you expect to see, you can use partial flow to debug the problem.. diff --git a/docs/codeql/writing-codeql-queries/debugging-data-flow-queries-using-partial-flow.rst b/docs/codeql/writing-codeql-queries/debugging-data-flow-queries-using-partial-flow.rst index c74b6bb635e..afbd741e822 100644 --- a/docs/codeql/writing-codeql-queries/debugging-data-flow-queries-using-partial-flow.rst +++ b/docs/codeql/writing-codeql-queries/debugging-data-flow-queries-using-partial-flow.rst @@ -3,7 +3,7 @@ Debugging data-flow queries using partial flow ============================================== -If a data-flow query unexpectedly produces no results, you can use partial flow to debug the problem. +If a data-flow query doesn't produce the results you expect to see, you can use partial flow to debug the problem. In CodeQL, you can use :ref:`data flow analysis ` to compute the possible values that a variable can hold at various points in a program. A typical data-flow query looks like this: @@ -32,7 +32,7 @@ Or slightly simpler without path explanations: where config.hasPath(source, sink) select sink, "Sink is reached from $@.", source.getNode(), "here" -If a data-flow query that you have written does not produce any results when you expect it to, there may be a problem with your query. +If a data-flow query that you have written doesn't produce the results you expect it to, there may be a problem with your query. You can try to debug the potential problem by following the steps described below. Checking sources and sinks From 66bdbf4a283743082951cb471315b2c658a5eaa6 Mon Sep 17 00:00:00 2001 From: james Date: Mon, 23 Aug 2021 11:35:04 +0100 Subject: [PATCH 095/741] address review comments --- .../debugging-data-flow-queries-using-partial-flow.rst | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/codeql/writing-codeql-queries/debugging-data-flow-queries-using-partial-flow.rst b/docs/codeql/writing-codeql-queries/debugging-data-flow-queries-using-partial-flow.rst index afbd741e822..dfadf63ab4d 100644 --- a/docs/codeql/writing-codeql-queries/debugging-data-flow-queries-using-partial-flow.rst +++ b/docs/codeql/writing-codeql-queries/debugging-data-flow-queries-using-partial-flow.rst @@ -56,9 +56,9 @@ If there are still no results and performance did not degrade to complete useles Partial flow ------------ -A naive next step could be to try changing the sink definition to ``any()``. This would mean that we would get a lot of flow to all the places that are reachable from the sources. While this approach makes sense and can work, it can be hard to get an overview of the results as they can be quite plentiful, and it does come with a couple of additional caveats: Performance might degrade to uselessness and we might not even see all the partial flow paths. The latter point is somewhat subtle and deserves elaboration. Since the data-flow library tries very hard to prune impossible paths and since field stores and reads must be evenly matched along a path, then we will never see paths going through a store that fail to reach a corresponding read. This can make it hard to see where flow actually stops. +A naive next step could be to try changing the sink definition to ``any()``. This would mean that we would get a lot of flow to all the places that are reachable from the sources. While this approach makes sense and can work in some cases, you might find that it produces so many results that it's very hard to explore the findings, which can also dramtatically affect query performance. More importnatly, you might not even see all the partial flow paths. This is because the data-flow library tries very hard to prune impossible paths and, since field stores and reads must be evenly matched along a path, we will never see paths going through a store that fail to reach a corresponding read. This can make it hard to see where flow actually stops. -Because of this, a ``Configuration`` comes with a mechanism for exploring partial flow that tries to deal with these caveats. This is the ``Configuration.hasPartialFlow`` predicate: +To avoid these problems, a data-flow ``Configuration`` comes with a mechanism for exploring partial flow that tries to deal with these caveats. This is the ``Configuration.hasPartialFlow`` predicate: .. code-block:: ql @@ -79,7 +79,7 @@ Because of this, a ``Configuration`` comes with a mechanism for exploring partia */ final predicate hasPartialFlow(PartialPathNode source, PartialPathNode node, int dist) { -As noted in the qldoc for ``hasPartialFlow`` one must first enable this by adding an override of ``explorationLimit``. For example: +As noted in the documentation for ``hasPartialFlow`` (for example, in the `CodeQL for Java documentation __`) you must first enable this by adding an override of ``explorationLimit``. For example: .. code-block:: ql From 18440710b4b731a2d2ea781cf80aa7ad5b07ca51 Mon Sep 17 00:00:00 2001 From: james Date: Mon, 23 Aug 2021 14:02:53 +0100 Subject: [PATCH 096/741] fix typos --- .../debugging-data-flow-queries-using-partial-flow.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/codeql/writing-codeql-queries/debugging-data-flow-queries-using-partial-flow.rst b/docs/codeql/writing-codeql-queries/debugging-data-flow-queries-using-partial-flow.rst index dfadf63ab4d..9d5d83244a5 100644 --- a/docs/codeql/writing-codeql-queries/debugging-data-flow-queries-using-partial-flow.rst +++ b/docs/codeql/writing-codeql-queries/debugging-data-flow-queries-using-partial-flow.rst @@ -56,7 +56,7 @@ If there are still no results and performance did not degrade to complete useles Partial flow ------------ -A naive next step could be to try changing the sink definition to ``any()``. This would mean that we would get a lot of flow to all the places that are reachable from the sources. While this approach makes sense and can work in some cases, you might find that it produces so many results that it's very hard to explore the findings, which can also dramtatically affect query performance. More importnatly, you might not even see all the partial flow paths. This is because the data-flow library tries very hard to prune impossible paths and, since field stores and reads must be evenly matched along a path, we will never see paths going through a store that fail to reach a corresponding read. This can make it hard to see where flow actually stops. +A naive next step could be to try changing the sink definition to ``any()``. This would mean that we would get a lot of flow to all the places that are reachable from the sources. While this approach makes sense and can work in some cases, you might find that it produces so many results that it's very hard to explore the findings, which can also dramatically affect query performance. More importantly, you might not even see all the partial flow paths. This is because the data-flow library tries very hard to prune impossible paths and, since field stores and reads must be evenly matched along a path, we will never see paths going through a store that fail to reach a corresponding read. This can make it hard to see where flow actually stops. To avoid these problems, a data-flow ``Configuration`` comes with a mechanism for exploring partial flow that tries to deal with these caveats. This is the ``Configuration.hasPartialFlow`` predicate: From e3765ced7809ae800bdade1fb1543a1e598a3426 Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Mon, 23 Aug 2021 15:29:07 +0200 Subject: [PATCH 097/741] Python: Add tests for modification of defaults --- ...odificationOfParameterWithDefault.expected | 28 +++++++ .../ModificationOfParameterWithDefault.qlref | 1 + .../test.py | 80 +++++++++++++++++++ 3 files changed, 109 insertions(+) create mode 100644 python/ql/test/query-tests/Functions/ModificationOfParameterWithDefault/ModificationOfParameterWithDefault.expected create mode 100644 python/ql/test/query-tests/Functions/ModificationOfParameterWithDefault/ModificationOfParameterWithDefault.qlref create mode 100644 python/ql/test/query-tests/Functions/ModificationOfParameterWithDefault/test.py diff --git a/python/ql/test/query-tests/Functions/ModificationOfParameterWithDefault/ModificationOfParameterWithDefault.expected b/python/ql/test/query-tests/Functions/ModificationOfParameterWithDefault/ModificationOfParameterWithDefault.expected new file mode 100644 index 00000000000..bf51e172916 --- /dev/null +++ b/python/ql/test/query-tests/Functions/ModificationOfParameterWithDefault/ModificationOfParameterWithDefault.expected @@ -0,0 +1,28 @@ +edges +| test.py:2:12:2:12 | empty mutable value | test.py:3:5:3:5 | empty mutable value | +| test.py:7:14:7:14 | empty mutable value | test.py:9:14:9:14 | empty mutable value | +| test.py:9:5:9:15 | empty mutable value | test.py:10:5:10:5 | empty mutable value | +| test.py:9:14:9:14 | empty mutable value | test.py:9:5:9:15 | empty mutable value | +| test.py:13:13:13:13 | empty mutable value | test.py:14:5:14:5 | empty mutable value | +| test.py:18:14:18:14 | empty mutable value | test.py:19:13:19:13 | empty mutable value | +| test.py:19:13:19:13 | empty mutable value | test.py:13:13:13:13 | empty mutable value | +| test.py:23:14:23:14 | non-empty mutable value | test.py:24:5:24:5 | non-empty mutable value | +| test.py:52:17:52:17 | empty mutable value | test.py:53:5:53:5 | empty mutable value | +| test.py:57:26:57:26 | non-empty mutable value | test.py:58:5:58:5 | non-empty mutable value | +| test.py:62:35:62:35 | non-empty mutable value | test.py:63:5:63:5 | non-empty mutable value | +| test.py:66:21:66:21 | empty mutable value | test.py:67:5:67:5 | empty mutable value | +| test.py:71:26:71:26 | empty mutable value | test.py:72:21:72:21 | empty mutable value | +| test.py:72:21:72:21 | empty mutable value | test.py:66:21:66:21 | empty mutable value | +| test.py:76:19:76:19 | empty mutable value | test.py:78:14:78:14 | empty mutable value | +| test.py:78:5:78:15 | empty mutable value | test.py:79:5:79:5 | empty mutable value | +| test.py:78:14:78:14 | empty mutable value | test.py:78:5:78:15 | empty mutable value | +#select +| test.py:3:5:3:5 | l | test.py:2:12:2:12 | empty mutable value | test.py:3:5:3:5 | empty mutable value | $@ flows to here and is mutated. | test.py:2:12:2:12 | l | Default value | +| test.py:10:5:10:5 | x | test.py:7:14:7:14 | empty mutable value | test.py:10:5:10:5 | empty mutable value | $@ flows to here and is mutated. | test.py:7:14:7:14 | l | Default value | +| test.py:14:5:14:5 | l | test.py:18:14:18:14 | empty mutable value | test.py:14:5:14:5 | empty mutable value | $@ flows to here and is mutated. | test.py:18:14:18:14 | l | Default value | +| test.py:24:5:24:5 | l | test.py:23:14:23:14 | non-empty mutable value | test.py:24:5:24:5 | non-empty mutable value | $@ flows to here and is mutated. | test.py:23:14:23:14 | l | Default value | +| test.py:53:5:53:5 | d | test.py:52:17:52:17 | empty mutable value | test.py:53:5:53:5 | empty mutable value | $@ flows to here and is mutated. | test.py:52:17:52:17 | d | Default value | +| test.py:58:5:58:5 | d | test.py:57:26:57:26 | non-empty mutable value | test.py:58:5:58:5 | non-empty mutable value | $@ flows to here and is mutated. | test.py:57:26:57:26 | d | Default value | +| test.py:63:5:63:5 | d | test.py:62:35:62:35 | non-empty mutable value | test.py:63:5:63:5 | non-empty mutable value | $@ flows to here and is mutated. | test.py:62:35:62:35 | d | Default value | +| test.py:67:5:67:5 | d | test.py:71:26:71:26 | empty mutable value | test.py:67:5:67:5 | empty mutable value | $@ flows to here and is mutated. | test.py:71:26:71:26 | d | Default value | +| test.py:79:5:79:5 | x | test.py:76:19:76:19 | empty mutable value | test.py:79:5:79:5 | empty mutable value | $@ flows to here and is mutated. | test.py:76:19:76:19 | d | Default value | diff --git a/python/ql/test/query-tests/Functions/ModificationOfParameterWithDefault/ModificationOfParameterWithDefault.qlref b/python/ql/test/query-tests/Functions/ModificationOfParameterWithDefault/ModificationOfParameterWithDefault.qlref new file mode 100644 index 00000000000..8c4044e8fee --- /dev/null +++ b/python/ql/test/query-tests/Functions/ModificationOfParameterWithDefault/ModificationOfParameterWithDefault.qlref @@ -0,0 +1 @@ +Functions/ModificationOfParameterWithDefault.ql diff --git a/python/ql/test/query-tests/Functions/ModificationOfParameterWithDefault/test.py b/python/ql/test/query-tests/Functions/ModificationOfParameterWithDefault/test.py new file mode 100644 index 00000000000..239492f8ead --- /dev/null +++ b/python/ql/test/query-tests/Functions/ModificationOfParameterWithDefault/test.py @@ -0,0 +1,80 @@ +# Not OK +def simple(l = []): + l.append(1) + return l + +# OK +def includes(l = []): + x = [0] + x.extend(l) + x.extend([1]) # FP + return x + +def extends(l): + l.extend([1]) + return l + +# Not OK +def deferred(l = []): + extends(l) + return l + +# Not OK +def nonempty(l = [5]): + l.append(1) + return l + +# Not OK +def dict(d = {}): + d['a'] = 1 # FN + return d + +# Not OK +def dict_nonempty(d = {'a': 1}): + d['a'] = 2 # FN + return d + +# OK +def dict_nonempty_nochange(d = {'a': 1}): + d['a'] = 1 + return d + +def modifies(d): + d['a'] = 1 # FN + return d + +# Not OK +def dict_deferred(d = {}): + modifies(d) + return d + +# Not OK +def dict_method(d = {}): + d.update({'a': 1}) + return d + +# Not OK +def dict_method_nonempty(d = {'a': 1}): + d.update({'a': 2}) + return d + +# OK +def dict_method_nonempty_nochange(d = {'a': 1}): + d.update({'a': 1}) # FP + return d + +def modifies_method(d): + d.update({'a': 1}) + return d + +# Not OK +def dict_deferred_method(d = {}): + modifies_method(d) + return d + +# OK +def dict_includes(d = {}): + x = {} + x.update(d) + x.update({'a': 1}) # FP + return x From e865a290dee644a12a9cd7bdd377ecc5a9b3682b Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Tue, 24 Aug 2021 16:34:12 +0200 Subject: [PATCH 098/741] Python: straight port of query The old query uses `pointsTo` to limit the sinks to methods on lists and dictionaries. That constraint is omitted here which could hurt performance. --- .../ModificationOfParameterWithDefault.ql | 90 ++----------------- .../ModificationOfParameterWithDefault.qll | 34 +++++++ ...onOfParameterWithDefaultCustomizations.qll | 90 +++++++++++++++++++ ...odificationOfParameterWithDefault.expected | 63 +++++++------ .../test.py | 4 +- 5 files changed, 170 insertions(+), 111 deletions(-) create mode 100644 python/ql/src/semmle/python/functions/ModificationOfParameterWithDefault.qll create mode 100644 python/ql/src/semmle/python/functions/ModificationOfParameterWithDefaultCustomizations.qll diff --git a/python/ql/src/Functions/ModificationOfParameterWithDefault.ql b/python/ql/src/Functions/ModificationOfParameterWithDefault.ql index 03edc35fa17..9ff89d30e3f 100644 --- a/python/ql/src/Functions/ModificationOfParameterWithDefault.ql +++ b/python/ql/src/Functions/ModificationOfParameterWithDefault.ql @@ -12,88 +12,12 @@ */ import python -import semmle.python.security.Paths +import semmle.python.functions.ModificationOfParameterWithDefault +import DataFlow::PathGraph -predicate safe_method(string name) { - name = "count" or - name = "index" or - name = "copy" or - name = "get" or - name = "has_key" or - name = "items" or - name = "keys" or - name = "values" or - name = "iteritems" or - name = "iterkeys" or - name = "itervalues" or - name = "__contains__" or - name = "__getitem__" or - name = "__getattribute__" -} - -/** Gets the truthiness (non emptyness) of the default of `p` if that value is mutable */ -private boolean mutableDefaultValue(Parameter p) { - exists(Dict d | p.getDefault() = d | - exists(d.getAKey()) and result = true - or - not exists(d.getAKey()) and result = false - ) - or - exists(List l | p.getDefault() = l | - exists(l.getAnElt()) and result = true - or - not exists(l.getAnElt()) and result = false - ) -} - -class NonEmptyMutableValue extends TaintKind { - NonEmptyMutableValue() { this = "non-empty mutable value" } -} - -class EmptyMutableValue extends TaintKind { - EmptyMutableValue() { this = "empty mutable value" } - - override boolean booleanValue() { result = false } -} - -class MutableDefaultValue extends TaintSource { - boolean nonEmpty; - - MutableDefaultValue() { nonEmpty = mutableDefaultValue(this.(NameNode).getNode()) } - - override string toString() { result = "mutable default value" } - - override predicate isSourceOf(TaintKind kind) { - nonEmpty = false and kind instanceof EmptyMutableValue - or - nonEmpty = true and kind instanceof NonEmptyMutableValue - } -} - -private ClassValue mutable_class() { - result = Value::named("list") or - result = Value::named("dict") -} - -class Mutation extends TaintSink { - Mutation() { - exists(AugAssign a | a.getTarget().getAFlowNode() = this) - or - exists(Call c, Attribute a | c.getFunc() = a | - a.getObject().getAFlowNode() = this and - not safe_method(a.getName()) and - this.(ControlFlowNode).pointsTo().getClass() = mutable_class() - ) - } - - override predicate sinks(TaintKind kind) { - kind instanceof EmptyMutableValue - or - kind instanceof NonEmptyMutableValue - } -} - -from TaintedPathSource src, TaintedPathSink sink -where src.flowsTo(sink) -select sink.getSink(), src, sink, "$@ flows to here and is mutated.", src.getSource(), +from + ModificationOfParameterWithDefault::Configuration config, DataFlow::PathNode source, + DataFlow::PathNode sink +where config.hasFlowPath(source, sink) +select sink.getNode(), source, sink, "$@ flows to here and is mutated.", source.getNode(), "Default value" diff --git a/python/ql/src/semmle/python/functions/ModificationOfParameterWithDefault.qll b/python/ql/src/semmle/python/functions/ModificationOfParameterWithDefault.qll new file mode 100644 index 00000000000..914eb7a473e --- /dev/null +++ b/python/ql/src/semmle/python/functions/ModificationOfParameterWithDefault.qll @@ -0,0 +1,34 @@ +/** + * Provides a data-flow configuration for detecting modifications of a parameters default value. + * + * Note, for performance reasons: only import this file if + * `ModificationOfParameterWithDefault::Configuration` is needed, otherwise + * `ModificationOfParameterWithDefaultCustomizations` should be imported instead. + */ + +private import python +import semmle.python.dataflow.new.DataFlow + +/** + * Provides a data-flow configuration for detecting modifications of a parameters default value. + */ +module ModificationOfParameterWithDefault { + import ModificationOfParameterWithDefaultCustomizations::ModificationOfParameterWithDefault + + /** + * A data-flow configuration for detecting modifications of a parameters default value. + */ + class Configuration extends DataFlow::Configuration { + Configuration() { this = "ModificationOfParameterWithDefault" } + + override predicate isSource(DataFlow::Node source) { source instanceof Source } + + override predicate isSink(DataFlow::Node sink) { sink instanceof Sink } + + override predicate isBarrier(DataFlow::Node node) { node instanceof Barrier } + + override predicate isBarrierGuard(DataFlow::BarrierGuard guard) { + guard instanceof BarrierGuard + } + } +} diff --git a/python/ql/src/semmle/python/functions/ModificationOfParameterWithDefaultCustomizations.qll b/python/ql/src/semmle/python/functions/ModificationOfParameterWithDefaultCustomizations.qll new file mode 100644 index 00000000000..90ab83e6753 --- /dev/null +++ b/python/ql/src/semmle/python/functions/ModificationOfParameterWithDefaultCustomizations.qll @@ -0,0 +1,90 @@ +/** + * Provides default sources, sinks and sanitizers for detecting + * modifications of a parameters default value, as well as extension points for adding your own. + */ + +private import python +private import semmle.python.dataflow.new.DataFlow +private import semmle.python.dataflow.new.BarrierGuards + +/** + * Provides default sources, sinks and sanitizers for detecting + * "command injection" + * vulnerabilities, as well as extension points for adding your own. + */ +module ModificationOfParameterWithDefault { + /** + * A data flow source for detecting modifications of a parameters default value. + */ + abstract class Source extends DataFlow::Node { } + + /** + * A data flow sink for detecting modifications of a parameters default value. + */ + abstract class Sink extends DataFlow::Node { } + + /** + * A sanitizer for detecting modifications of a parameters default value. + */ + abstract class Barrier extends DataFlow::Node { } + + /** + * A sanitizer guard for detecting modifications of a parameters default value. + */ + abstract class BarrierGuard extends DataFlow::BarrierGuard { } + + /** Gets the truthiness (non emptyness) of the default of `p` if that value is mutable */ + private boolean mutableDefaultValue(Parameter p) { + exists(Dict d | p.getDefault() = d | + exists(d.getAKey()) and result = true + or + not exists(d.getAKey()) and result = false + ) + or + exists(List l | p.getDefault() = l | + exists(l.getAnElt()) and result = true + or + not exists(l.getAnElt()) and result = false + ) + } + + /** + * A source of remote user input, considered as a flow source. + */ + class MutableDefaultValue extends Source { + boolean nonEmpty; + + MutableDefaultValue() { nonEmpty = mutableDefaultValue(this.asCfgNode().(NameNode).getNode()) } + } + + predicate safe_method(string name) { + name = "count" or + name = "index" or + name = "copy" or + name = "get" or + name = "has_key" or + name = "items" or + name = "keys" or + name = "values" or + name = "iteritems" or + name = "iterkeys" or + name = "itervalues" or + name = "__contains__" or + name = "__getitem__" or + name = "__getattribute__" + } + + /** + * A mutation is considered a flow sink. + */ + class Mutation extends Sink { + Mutation() { + exists(AugAssign a | a.getTarget().getAFlowNode() = this.asCfgNode()) + or + exists(Call c, Attribute a | c.getFunc() = a | + a.getObject().getAFlowNode() = this.asCfgNode() and + not safe_method(a.getName()) + ) + } + } +} diff --git a/python/ql/test/query-tests/Functions/ModificationOfParameterWithDefault/ModificationOfParameterWithDefault.expected b/python/ql/test/query-tests/Functions/ModificationOfParameterWithDefault/ModificationOfParameterWithDefault.expected index bf51e172916..3032f6b1f80 100644 --- a/python/ql/test/query-tests/Functions/ModificationOfParameterWithDefault/ModificationOfParameterWithDefault.expected +++ b/python/ql/test/query-tests/Functions/ModificationOfParameterWithDefault/ModificationOfParameterWithDefault.expected @@ -1,28 +1,39 @@ edges -| test.py:2:12:2:12 | empty mutable value | test.py:3:5:3:5 | empty mutable value | -| test.py:7:14:7:14 | empty mutable value | test.py:9:14:9:14 | empty mutable value | -| test.py:9:5:9:15 | empty mutable value | test.py:10:5:10:5 | empty mutable value | -| test.py:9:14:9:14 | empty mutable value | test.py:9:5:9:15 | empty mutable value | -| test.py:13:13:13:13 | empty mutable value | test.py:14:5:14:5 | empty mutable value | -| test.py:18:14:18:14 | empty mutable value | test.py:19:13:19:13 | empty mutable value | -| test.py:19:13:19:13 | empty mutable value | test.py:13:13:13:13 | empty mutable value | -| test.py:23:14:23:14 | non-empty mutable value | test.py:24:5:24:5 | non-empty mutable value | -| test.py:52:17:52:17 | empty mutable value | test.py:53:5:53:5 | empty mutable value | -| test.py:57:26:57:26 | non-empty mutable value | test.py:58:5:58:5 | non-empty mutable value | -| test.py:62:35:62:35 | non-empty mutable value | test.py:63:5:63:5 | non-empty mutable value | -| test.py:66:21:66:21 | empty mutable value | test.py:67:5:67:5 | empty mutable value | -| test.py:71:26:71:26 | empty mutable value | test.py:72:21:72:21 | empty mutable value | -| test.py:72:21:72:21 | empty mutable value | test.py:66:21:66:21 | empty mutable value | -| test.py:76:19:76:19 | empty mutable value | test.py:78:14:78:14 | empty mutable value | -| test.py:78:5:78:15 | empty mutable value | test.py:79:5:79:5 | empty mutable value | -| test.py:78:14:78:14 | empty mutable value | test.py:78:5:78:15 | empty mutable value | +| test.py:2:12:2:12 | ControlFlowNode for l | test.py:3:5:3:5 | ControlFlowNode for l | +| test.py:13:13:13:13 | ControlFlowNode for l | test.py:14:5:14:5 | ControlFlowNode for l | +| test.py:18:14:18:14 | ControlFlowNode for l | test.py:19:13:19:13 | ControlFlowNode for l | +| test.py:19:13:19:13 | ControlFlowNode for l | test.py:13:13:13:13 | ControlFlowNode for l | +| test.py:23:14:23:14 | ControlFlowNode for l | test.py:24:5:24:5 | ControlFlowNode for l | +| test.py:52:17:52:17 | ControlFlowNode for d | test.py:53:5:53:5 | ControlFlowNode for d | +| test.py:57:26:57:26 | ControlFlowNode for d | test.py:58:5:58:5 | ControlFlowNode for d | +| test.py:62:35:62:35 | ControlFlowNode for d | test.py:63:5:63:5 | ControlFlowNode for d | +| test.py:66:21:66:21 | ControlFlowNode for d | test.py:67:5:67:5 | ControlFlowNode for d | +| test.py:71:26:71:26 | ControlFlowNode for d | test.py:72:21:72:21 | ControlFlowNode for d | +| test.py:72:21:72:21 | ControlFlowNode for d | test.py:66:21:66:21 | ControlFlowNode for d | +nodes +| test.py:2:12:2:12 | ControlFlowNode for l | semmle.label | ControlFlowNode for l | +| test.py:3:5:3:5 | ControlFlowNode for l | semmle.label | ControlFlowNode for l | +| test.py:13:13:13:13 | ControlFlowNode for l | semmle.label | ControlFlowNode for l | +| test.py:14:5:14:5 | ControlFlowNode for l | semmle.label | ControlFlowNode for l | +| test.py:18:14:18:14 | ControlFlowNode for l | semmle.label | ControlFlowNode for l | +| test.py:19:13:19:13 | ControlFlowNode for l | semmle.label | ControlFlowNode for l | +| test.py:23:14:23:14 | ControlFlowNode for l | semmle.label | ControlFlowNode for l | +| test.py:24:5:24:5 | ControlFlowNode for l | semmle.label | ControlFlowNode for l | +| test.py:52:17:52:17 | ControlFlowNode for d | semmle.label | ControlFlowNode for d | +| test.py:53:5:53:5 | ControlFlowNode for d | semmle.label | ControlFlowNode for d | +| test.py:57:26:57:26 | ControlFlowNode for d | semmle.label | ControlFlowNode for d | +| test.py:58:5:58:5 | ControlFlowNode for d | semmle.label | ControlFlowNode for d | +| test.py:62:35:62:35 | ControlFlowNode for d | semmle.label | ControlFlowNode for d | +| test.py:63:5:63:5 | ControlFlowNode for d | semmle.label | ControlFlowNode for d | +| test.py:66:21:66:21 | ControlFlowNode for d | semmle.label | ControlFlowNode for d | +| test.py:67:5:67:5 | ControlFlowNode for d | semmle.label | ControlFlowNode for d | +| test.py:71:26:71:26 | ControlFlowNode for d | semmle.label | ControlFlowNode for d | +| test.py:72:21:72:21 | ControlFlowNode for d | semmle.label | ControlFlowNode for d | #select -| test.py:3:5:3:5 | l | test.py:2:12:2:12 | empty mutable value | test.py:3:5:3:5 | empty mutable value | $@ flows to here and is mutated. | test.py:2:12:2:12 | l | Default value | -| test.py:10:5:10:5 | x | test.py:7:14:7:14 | empty mutable value | test.py:10:5:10:5 | empty mutable value | $@ flows to here and is mutated. | test.py:7:14:7:14 | l | Default value | -| test.py:14:5:14:5 | l | test.py:18:14:18:14 | empty mutable value | test.py:14:5:14:5 | empty mutable value | $@ flows to here and is mutated. | test.py:18:14:18:14 | l | Default value | -| test.py:24:5:24:5 | l | test.py:23:14:23:14 | non-empty mutable value | test.py:24:5:24:5 | non-empty mutable value | $@ flows to here and is mutated. | test.py:23:14:23:14 | l | Default value | -| test.py:53:5:53:5 | d | test.py:52:17:52:17 | empty mutable value | test.py:53:5:53:5 | empty mutable value | $@ flows to here and is mutated. | test.py:52:17:52:17 | d | Default value | -| test.py:58:5:58:5 | d | test.py:57:26:57:26 | non-empty mutable value | test.py:58:5:58:5 | non-empty mutable value | $@ flows to here and is mutated. | test.py:57:26:57:26 | d | Default value | -| test.py:63:5:63:5 | d | test.py:62:35:62:35 | non-empty mutable value | test.py:63:5:63:5 | non-empty mutable value | $@ flows to here and is mutated. | test.py:62:35:62:35 | d | Default value | -| test.py:67:5:67:5 | d | test.py:71:26:71:26 | empty mutable value | test.py:67:5:67:5 | empty mutable value | $@ flows to here and is mutated. | test.py:71:26:71:26 | d | Default value | -| test.py:79:5:79:5 | x | test.py:76:19:76:19 | empty mutable value | test.py:79:5:79:5 | empty mutable value | $@ flows to here and is mutated. | test.py:76:19:76:19 | d | Default value | +| test.py:3:5:3:5 | ControlFlowNode for l | test.py:2:12:2:12 | ControlFlowNode for l | test.py:3:5:3:5 | ControlFlowNode for l | $@ flows to here and is mutated. | test.py:2:12:2:12 | ControlFlowNode for l | Default value | +| test.py:14:5:14:5 | ControlFlowNode for l | test.py:18:14:18:14 | ControlFlowNode for l | test.py:14:5:14:5 | ControlFlowNode for l | $@ flows to here and is mutated. | test.py:18:14:18:14 | ControlFlowNode for l | Default value | +| test.py:24:5:24:5 | ControlFlowNode for l | test.py:23:14:23:14 | ControlFlowNode for l | test.py:24:5:24:5 | ControlFlowNode for l | $@ flows to here and is mutated. | test.py:23:14:23:14 | ControlFlowNode for l | Default value | +| test.py:53:5:53:5 | ControlFlowNode for d | test.py:52:17:52:17 | ControlFlowNode for d | test.py:53:5:53:5 | ControlFlowNode for d | $@ flows to here and is mutated. | test.py:52:17:52:17 | ControlFlowNode for d | Default value | +| test.py:58:5:58:5 | ControlFlowNode for d | test.py:57:26:57:26 | ControlFlowNode for d | test.py:58:5:58:5 | ControlFlowNode for d | $@ flows to here and is mutated. | test.py:57:26:57:26 | ControlFlowNode for d | Default value | +| test.py:63:5:63:5 | ControlFlowNode for d | test.py:62:35:62:35 | ControlFlowNode for d | test.py:63:5:63:5 | ControlFlowNode for d | $@ flows to here and is mutated. | test.py:62:35:62:35 | ControlFlowNode for d | Default value | +| test.py:67:5:67:5 | ControlFlowNode for d | test.py:71:26:71:26 | ControlFlowNode for d | test.py:67:5:67:5 | ControlFlowNode for d | $@ flows to here and is mutated. | test.py:71:26:71:26 | ControlFlowNode for d | Default value | diff --git a/python/ql/test/query-tests/Functions/ModificationOfParameterWithDefault/test.py b/python/ql/test/query-tests/Functions/ModificationOfParameterWithDefault/test.py index 239492f8ead..81319ed909f 100644 --- a/python/ql/test/query-tests/Functions/ModificationOfParameterWithDefault/test.py +++ b/python/ql/test/query-tests/Functions/ModificationOfParameterWithDefault/test.py @@ -7,7 +7,7 @@ def simple(l = []): def includes(l = []): x = [0] x.extend(l) - x.extend([1]) # FP + x.extend([1]) return x def extends(l): @@ -76,5 +76,5 @@ def dict_deferred_method(d = {}): def dict_includes(d = {}): x = {} x.update(d) - x.update({'a': 1}) # FP + x.update({'a': 1}) return x From 5bff5188ac32a656a1204eef6f5351ffe430a78e Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Wed, 25 Aug 2021 23:52:42 +0200 Subject: [PATCH 099/741] Python: switch from negative to positive list This should avoid potentially terrible performance. Also noted the missing syntactic constructs, as I went through the documnetation. --- ...onOfParameterWithDefaultCustomizations.qll | 56 ++++++++++++------- 1 file changed, 37 insertions(+), 19 deletions(-) diff --git a/python/ql/src/semmle/python/functions/ModificationOfParameterWithDefaultCustomizations.qll b/python/ql/src/semmle/python/functions/ModificationOfParameterWithDefaultCustomizations.qll index 90ab83e6753..c9be49b1fee 100644 --- a/python/ql/src/semmle/python/functions/ModificationOfParameterWithDefaultCustomizations.qll +++ b/python/ql/src/semmle/python/functions/ModificationOfParameterWithDefaultCustomizations.qll @@ -57,33 +57,51 @@ module ModificationOfParameterWithDefault { MutableDefaultValue() { nonEmpty = mutableDefaultValue(this.asCfgNode().(NameNode).getNode()) } } - predicate safe_method(string name) { - name = "count" or - name = "index" or - name = "copy" or - name = "get" or - name = "has_key" or - name = "items" or - name = "keys" or - name = "values" or - name = "iteritems" or - name = "iterkeys" or - name = "itervalues" or - name = "__contains__" or - name = "__getitem__" or - name = "__getattribute__" + /** + * A name of a list function that modifies the list. + * See https://docs.python.org/3/tutorial/datastructures.html#more-on-lists + */ + string list_modifying_method() { + result in ["append", "extend", "insert", "remove", "pop", "clear", "sort", "reverse"] } /** - * A mutation is considered a flow sink. + * A name of a dict function that modifies the dict. + * See https://docs.python.org/3/library/stdtypes.html#dict + */ + string dict_modifying_method() { result in ["clear", "pop", "popitem", "setdefault", "update"] } + + /** + * A mutation of the default value is a flow sink. + * + * Syntactic constructs that modify a list are: + * - s[i] = x + * - s[i:j] = t + * - del s[i:j] + * - s[i:j:k] = t + * - del s[i:j:k] + * - s += t + * - s *= n + * See https://docs.python.org/3/library/stdtypes.html#mutable-sequence-types + * + * Syntactic constructs that modify a dictionary are: + * - d[key] = value + * - del d[key] + * - d |= other + * See https://docs.python.org/3/library/stdtypes.html#dict + * + * These are all covered by: + * - assignment to a subscript (includes slices) + * - deletion of a subscript + * - augmented assignment to the value */ class Mutation extends Sink { Mutation() { exists(AugAssign a | a.getTarget().getAFlowNode() = this.asCfgNode()) or - exists(Call c, Attribute a | c.getFunc() = a | - a.getObject().getAFlowNode() = this.asCfgNode() and - not safe_method(a.getName()) + exists(DataFlow::CallCfgNode c, DataFlow::AttrRead a | c.getFunction() = a | + a.getObject() = this and + a.getAttributeName() in [list_modifying_method(), dict_modifying_method()] ) } } From 8614563b4284b293df0cd9cf71ac1a12fbdd80ee Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Thu, 26 Aug 2021 10:56:41 +0200 Subject: [PATCH 100/741] Python: More tests of syntactic constructs --- ...odificationOfParameterWithDefault.expected | 88 +++++++++++-------- .../test.py | 44 +++++++++- 2 files changed, 95 insertions(+), 37 deletions(-) diff --git a/python/ql/test/query-tests/Functions/ModificationOfParameterWithDefault/ModificationOfParameterWithDefault.expected b/python/ql/test/query-tests/Functions/ModificationOfParameterWithDefault/ModificationOfParameterWithDefault.expected index 3032f6b1f80..6bd668fe43f 100644 --- a/python/ql/test/query-tests/Functions/ModificationOfParameterWithDefault/ModificationOfParameterWithDefault.expected +++ b/python/ql/test/query-tests/Functions/ModificationOfParameterWithDefault/ModificationOfParameterWithDefault.expected @@ -1,39 +1,55 @@ edges -| test.py:2:12:2:12 | ControlFlowNode for l | test.py:3:5:3:5 | ControlFlowNode for l | -| test.py:13:13:13:13 | ControlFlowNode for l | test.py:14:5:14:5 | ControlFlowNode for l | -| test.py:18:14:18:14 | ControlFlowNode for l | test.py:19:13:19:13 | ControlFlowNode for l | -| test.py:19:13:19:13 | ControlFlowNode for l | test.py:13:13:13:13 | ControlFlowNode for l | -| test.py:23:14:23:14 | ControlFlowNode for l | test.py:24:5:24:5 | ControlFlowNode for l | -| test.py:52:17:52:17 | ControlFlowNode for d | test.py:53:5:53:5 | ControlFlowNode for d | -| test.py:57:26:57:26 | ControlFlowNode for d | test.py:58:5:58:5 | ControlFlowNode for d | -| test.py:62:35:62:35 | ControlFlowNode for d | test.py:63:5:63:5 | ControlFlowNode for d | -| test.py:66:21:66:21 | ControlFlowNode for d | test.py:67:5:67:5 | ControlFlowNode for d | -| test.py:71:26:71:26 | ControlFlowNode for d | test.py:72:21:72:21 | ControlFlowNode for d | -| test.py:72:21:72:21 | ControlFlowNode for d | test.py:66:21:66:21 | ControlFlowNode for d | +| test.py:17:15:17:15 | ControlFlowNode for l | test.py:18:5:18:5 | ControlFlowNode for l | +| test.py:22:15:22:15 | ControlFlowNode for l | test.py:23:5:23:5 | ControlFlowNode for l | +| test.py:27:12:27:12 | ControlFlowNode for l | test.py:28:5:28:5 | ControlFlowNode for l | +| test.py:38:13:38:13 | ControlFlowNode for l | test.py:39:5:39:5 | ControlFlowNode for l | +| test.py:43:14:43:14 | ControlFlowNode for l | test.py:44:13:44:13 | ControlFlowNode for l | +| test.py:44:13:44:13 | ControlFlowNode for l | test.py:38:13:38:13 | ControlFlowNode for l | +| test.py:48:14:48:14 | ControlFlowNode for l | test.py:49:5:49:5 | ControlFlowNode for l | +| test.py:77:17:77:17 | ControlFlowNode for d | test.py:78:5:78:5 | ControlFlowNode for d | +| test.py:82:26:82:26 | ControlFlowNode for d | test.py:83:5:83:5 | ControlFlowNode for d | +| test.py:87:35:87:35 | ControlFlowNode for d | test.py:88:5:88:5 | ControlFlowNode for d | +| test.py:91:21:91:21 | ControlFlowNode for d | test.py:92:5:92:5 | ControlFlowNode for d | +| test.py:96:26:96:26 | ControlFlowNode for d | test.py:97:21:97:21 | ControlFlowNode for d | +| test.py:97:21:97:21 | ControlFlowNode for d | test.py:91:21:91:21 | ControlFlowNode for d | +| test.py:113:20:113:20 | ControlFlowNode for d | test.py:115:5:115:5 | ControlFlowNode for d | +| test.py:119:29:119:29 | ControlFlowNode for d | test.py:121:5:121:5 | ControlFlowNode for d | nodes -| test.py:2:12:2:12 | ControlFlowNode for l | semmle.label | ControlFlowNode for l | -| test.py:3:5:3:5 | ControlFlowNode for l | semmle.label | ControlFlowNode for l | -| test.py:13:13:13:13 | ControlFlowNode for l | semmle.label | ControlFlowNode for l | -| test.py:14:5:14:5 | ControlFlowNode for l | semmle.label | ControlFlowNode for l | -| test.py:18:14:18:14 | ControlFlowNode for l | semmle.label | ControlFlowNode for l | -| test.py:19:13:19:13 | ControlFlowNode for l | semmle.label | ControlFlowNode for l | -| test.py:23:14:23:14 | ControlFlowNode for l | semmle.label | ControlFlowNode for l | -| test.py:24:5:24:5 | ControlFlowNode for l | semmle.label | ControlFlowNode for l | -| test.py:52:17:52:17 | ControlFlowNode for d | semmle.label | ControlFlowNode for d | -| test.py:53:5:53:5 | ControlFlowNode for d | semmle.label | ControlFlowNode for d | -| test.py:57:26:57:26 | ControlFlowNode for d | semmle.label | ControlFlowNode for d | -| test.py:58:5:58:5 | ControlFlowNode for d | semmle.label | ControlFlowNode for d | -| test.py:62:35:62:35 | ControlFlowNode for d | semmle.label | ControlFlowNode for d | -| test.py:63:5:63:5 | ControlFlowNode for d | semmle.label | ControlFlowNode for d | -| test.py:66:21:66:21 | ControlFlowNode for d | semmle.label | ControlFlowNode for d | -| test.py:67:5:67:5 | ControlFlowNode for d | semmle.label | ControlFlowNode for d | -| test.py:71:26:71:26 | ControlFlowNode for d | semmle.label | ControlFlowNode for d | -| test.py:72:21:72:21 | ControlFlowNode for d | semmle.label | ControlFlowNode for d | +| test.py:17:15:17:15 | ControlFlowNode for l | semmle.label | ControlFlowNode for l | +| test.py:18:5:18:5 | ControlFlowNode for l | semmle.label | ControlFlowNode for l | +| test.py:22:15:22:15 | ControlFlowNode for l | semmle.label | ControlFlowNode for l | +| test.py:23:5:23:5 | ControlFlowNode for l | semmle.label | ControlFlowNode for l | +| test.py:27:12:27:12 | ControlFlowNode for l | semmle.label | ControlFlowNode for l | +| test.py:28:5:28:5 | ControlFlowNode for l | semmle.label | ControlFlowNode for l | +| test.py:38:13:38:13 | ControlFlowNode for l | semmle.label | ControlFlowNode for l | +| test.py:39:5:39:5 | ControlFlowNode for l | semmle.label | ControlFlowNode for l | +| test.py:43:14:43:14 | ControlFlowNode for l | semmle.label | ControlFlowNode for l | +| test.py:44:13:44:13 | ControlFlowNode for l | semmle.label | ControlFlowNode for l | +| test.py:48:14:48:14 | ControlFlowNode for l | semmle.label | ControlFlowNode for l | +| test.py:49:5:49:5 | ControlFlowNode for l | semmle.label | ControlFlowNode for l | +| test.py:77:17:77:17 | ControlFlowNode for d | semmle.label | ControlFlowNode for d | +| test.py:78:5:78:5 | ControlFlowNode for d | semmle.label | ControlFlowNode for d | +| test.py:82:26:82:26 | ControlFlowNode for d | semmle.label | ControlFlowNode for d | +| test.py:83:5:83:5 | ControlFlowNode for d | semmle.label | ControlFlowNode for d | +| test.py:87:35:87:35 | ControlFlowNode for d | semmle.label | ControlFlowNode for d | +| test.py:88:5:88:5 | ControlFlowNode for d | semmle.label | ControlFlowNode for d | +| test.py:91:21:91:21 | ControlFlowNode for d | semmle.label | ControlFlowNode for d | +| test.py:92:5:92:5 | ControlFlowNode for d | semmle.label | ControlFlowNode for d | +| test.py:96:26:96:26 | ControlFlowNode for d | semmle.label | ControlFlowNode for d | +| test.py:97:21:97:21 | ControlFlowNode for d | semmle.label | ControlFlowNode for d | +| test.py:113:20:113:20 | ControlFlowNode for d | semmle.label | ControlFlowNode for d | +| test.py:115:5:115:5 | ControlFlowNode for d | semmle.label | ControlFlowNode for d | +| test.py:119:29:119:29 | ControlFlowNode for d | semmle.label | ControlFlowNode for d | +| test.py:121:5:121:5 | ControlFlowNode for d | semmle.label | ControlFlowNode for d | #select -| test.py:3:5:3:5 | ControlFlowNode for l | test.py:2:12:2:12 | ControlFlowNode for l | test.py:3:5:3:5 | ControlFlowNode for l | $@ flows to here and is mutated. | test.py:2:12:2:12 | ControlFlowNode for l | Default value | -| test.py:14:5:14:5 | ControlFlowNode for l | test.py:18:14:18:14 | ControlFlowNode for l | test.py:14:5:14:5 | ControlFlowNode for l | $@ flows to here and is mutated. | test.py:18:14:18:14 | ControlFlowNode for l | Default value | -| test.py:24:5:24:5 | ControlFlowNode for l | test.py:23:14:23:14 | ControlFlowNode for l | test.py:24:5:24:5 | ControlFlowNode for l | $@ flows to here and is mutated. | test.py:23:14:23:14 | ControlFlowNode for l | Default value | -| test.py:53:5:53:5 | ControlFlowNode for d | test.py:52:17:52:17 | ControlFlowNode for d | test.py:53:5:53:5 | ControlFlowNode for d | $@ flows to here and is mutated. | test.py:52:17:52:17 | ControlFlowNode for d | Default value | -| test.py:58:5:58:5 | ControlFlowNode for d | test.py:57:26:57:26 | ControlFlowNode for d | test.py:58:5:58:5 | ControlFlowNode for d | $@ flows to here and is mutated. | test.py:57:26:57:26 | ControlFlowNode for d | Default value | -| test.py:63:5:63:5 | ControlFlowNode for d | test.py:62:35:62:35 | ControlFlowNode for d | test.py:63:5:63:5 | ControlFlowNode for d | $@ flows to here and is mutated. | test.py:62:35:62:35 | ControlFlowNode for d | Default value | -| test.py:67:5:67:5 | ControlFlowNode for d | test.py:71:26:71:26 | ControlFlowNode for d | test.py:67:5:67:5 | ControlFlowNode for d | $@ flows to here and is mutated. | test.py:71:26:71:26 | ControlFlowNode for d | Default value | +| test.py:18:5:18:5 | ControlFlowNode for l | test.py:17:15:17:15 | ControlFlowNode for l | test.py:18:5:18:5 | ControlFlowNode for l | $@ flows to here and is mutated. | test.py:17:15:17:15 | ControlFlowNode for l | Default value | +| test.py:23:5:23:5 | ControlFlowNode for l | test.py:22:15:22:15 | ControlFlowNode for l | test.py:23:5:23:5 | ControlFlowNode for l | $@ flows to here and is mutated. | test.py:22:15:22:15 | ControlFlowNode for l | Default value | +| test.py:28:5:28:5 | ControlFlowNode for l | test.py:27:12:27:12 | ControlFlowNode for l | test.py:28:5:28:5 | ControlFlowNode for l | $@ flows to here and is mutated. | test.py:27:12:27:12 | ControlFlowNode for l | Default value | +| test.py:39:5:39:5 | ControlFlowNode for l | test.py:43:14:43:14 | ControlFlowNode for l | test.py:39:5:39:5 | ControlFlowNode for l | $@ flows to here and is mutated. | test.py:43:14:43:14 | ControlFlowNode for l | Default value | +| test.py:49:5:49:5 | ControlFlowNode for l | test.py:48:14:48:14 | ControlFlowNode for l | test.py:49:5:49:5 | ControlFlowNode for l | $@ flows to here and is mutated. | test.py:48:14:48:14 | ControlFlowNode for l | Default value | +| test.py:78:5:78:5 | ControlFlowNode for d | test.py:77:17:77:17 | ControlFlowNode for d | test.py:78:5:78:5 | ControlFlowNode for d | $@ flows to here and is mutated. | test.py:77:17:77:17 | ControlFlowNode for d | Default value | +| test.py:83:5:83:5 | ControlFlowNode for d | test.py:82:26:82:26 | ControlFlowNode for d | test.py:83:5:83:5 | ControlFlowNode for d | $@ flows to here and is mutated. | test.py:82:26:82:26 | ControlFlowNode for d | Default value | +| test.py:88:5:88:5 | ControlFlowNode for d | test.py:87:35:87:35 | ControlFlowNode for d | test.py:88:5:88:5 | ControlFlowNode for d | $@ flows to here and is mutated. | test.py:87:35:87:35 | ControlFlowNode for d | Default value | +| test.py:92:5:92:5 | ControlFlowNode for d | test.py:96:26:96:26 | ControlFlowNode for d | test.py:92:5:92:5 | ControlFlowNode for d | $@ flows to here and is mutated. | test.py:96:26:96:26 | ControlFlowNode for d | Default value | +| test.py:115:5:115:5 | ControlFlowNode for d | test.py:113:20:113:20 | ControlFlowNode for d | test.py:115:5:115:5 | ControlFlowNode for d | $@ flows to here and is mutated. | test.py:113:20:113:20 | ControlFlowNode for d | Default value | +| test.py:121:5:121:5 | ControlFlowNode for d | test.py:119:29:119:29 | ControlFlowNode for d | test.py:121:5:121:5 | ControlFlowNode for d | $@ flows to here and is mutated. | test.py:119:29:119:29 | ControlFlowNode for d | Default value | diff --git a/python/ql/test/query-tests/Functions/ModificationOfParameterWithDefault/test.py b/python/ql/test/query-tests/Functions/ModificationOfParameterWithDefault/test.py index 81319ed909f..60c3ff01b54 100644 --- a/python/ql/test/query-tests/Functions/ModificationOfParameterWithDefault/test.py +++ b/python/ql/test/query-tests/Functions/ModificationOfParameterWithDefault/test.py @@ -1,5 +1,30 @@ # Not OK -def simple(l = []): +def simple(l = [0]): + l[0] = 1 # FN + return l + +# Not OK +def slice(l = [0]): + l[0:1] = 1 # FN + return l + +# Not OK +def list_del(l = [0]): + del l[0] # FN + return l + +# Not OK +def append_op(l = []): + l += 1 + return l + +# Not OK +def repeat_op(l = [0]): + l *= 3 + return l + +# Not OK +def append(l = []): l.append(1) return l @@ -78,3 +103,20 @@ def dict_includes(d = {}): x.update(d) x.update({'a': 1}) return x + +# Not OK +def dict_del(d = {'a': 1}): + del d['a'] # FN + return d + +# Not OK +def dict_update_op(d = {}): + x = {'a': 1} + d |= x + return d + +# OK +def dict_update_op_nochange(d = {}): + x = {} + d |= x # FP + return d From d834cec9b93f5aaa9b5087cb4dd834070449fc03 Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Thu, 26 Aug 2021 11:31:20 +0200 Subject: [PATCH 101/741] Python: test simple sanitizer --- .../ModificationOfParameterWithDefault.expected | 4 ++++ .../Functions/ModificationOfParameterWithDefault/test.py | 6 ++++++ 2 files changed, 10 insertions(+) diff --git a/python/ql/test/query-tests/Functions/ModificationOfParameterWithDefault/ModificationOfParameterWithDefault.expected b/python/ql/test/query-tests/Functions/ModificationOfParameterWithDefault/ModificationOfParameterWithDefault.expected index 6bd668fe43f..c07a609dceb 100644 --- a/python/ql/test/query-tests/Functions/ModificationOfParameterWithDefault/ModificationOfParameterWithDefault.expected +++ b/python/ql/test/query-tests/Functions/ModificationOfParameterWithDefault/ModificationOfParameterWithDefault.expected @@ -14,6 +14,7 @@ edges | test.py:97:21:97:21 | ControlFlowNode for d | test.py:91:21:91:21 | ControlFlowNode for d | | test.py:113:20:113:20 | ControlFlowNode for d | test.py:115:5:115:5 | ControlFlowNode for d | | test.py:119:29:119:29 | ControlFlowNode for d | test.py:121:5:121:5 | ControlFlowNode for d | +| test.py:125:15:125:15 | ControlFlowNode for l | test.py:127:9:127:9 | ControlFlowNode for l | nodes | test.py:17:15:17:15 | ControlFlowNode for l | semmle.label | ControlFlowNode for l | | test.py:18:5:18:5 | ControlFlowNode for l | semmle.label | ControlFlowNode for l | @@ -41,6 +42,8 @@ nodes | test.py:115:5:115:5 | ControlFlowNode for d | semmle.label | ControlFlowNode for d | | test.py:119:29:119:29 | ControlFlowNode for d | semmle.label | ControlFlowNode for d | | test.py:121:5:121:5 | ControlFlowNode for d | semmle.label | ControlFlowNode for d | +| test.py:125:15:125:15 | ControlFlowNode for l | semmle.label | ControlFlowNode for l | +| test.py:127:9:127:9 | ControlFlowNode for l | semmle.label | ControlFlowNode for l | #select | test.py:18:5:18:5 | ControlFlowNode for l | test.py:17:15:17:15 | ControlFlowNode for l | test.py:18:5:18:5 | ControlFlowNode for l | $@ flows to here and is mutated. | test.py:17:15:17:15 | ControlFlowNode for l | Default value | | test.py:23:5:23:5 | ControlFlowNode for l | test.py:22:15:22:15 | ControlFlowNode for l | test.py:23:5:23:5 | ControlFlowNode for l | $@ flows to here and is mutated. | test.py:22:15:22:15 | ControlFlowNode for l | Default value | @@ -53,3 +56,4 @@ nodes | test.py:92:5:92:5 | ControlFlowNode for d | test.py:96:26:96:26 | ControlFlowNode for d | test.py:92:5:92:5 | ControlFlowNode for d | $@ flows to here and is mutated. | test.py:96:26:96:26 | ControlFlowNode for d | Default value | | test.py:115:5:115:5 | ControlFlowNode for d | test.py:113:20:113:20 | ControlFlowNode for d | test.py:115:5:115:5 | ControlFlowNode for d | $@ flows to here and is mutated. | test.py:113:20:113:20 | ControlFlowNode for d | Default value | | test.py:121:5:121:5 | ControlFlowNode for d | test.py:119:29:119:29 | ControlFlowNode for d | test.py:121:5:121:5 | ControlFlowNode for d | $@ flows to here and is mutated. | test.py:119:29:119:29 | ControlFlowNode for d | Default value | +| test.py:127:9:127:9 | ControlFlowNode for l | test.py:125:15:125:15 | ControlFlowNode for l | test.py:127:9:127:9 | ControlFlowNode for l | $@ flows to here and is mutated. | test.py:125:15:125:15 | ControlFlowNode for l | Default value | diff --git a/python/ql/test/query-tests/Functions/ModificationOfParameterWithDefault/test.py b/python/ql/test/query-tests/Functions/ModificationOfParameterWithDefault/test.py index 60c3ff01b54..25ad530310e 100644 --- a/python/ql/test/query-tests/Functions/ModificationOfParameterWithDefault/test.py +++ b/python/ql/test/query-tests/Functions/ModificationOfParameterWithDefault/test.py @@ -120,3 +120,9 @@ def dict_update_op_nochange(d = {}): x = {} d |= x # FP return d + +# OK +def sanitizer(l = []): + if not l == []: + l.append(1) # FP + return l From d458464e6b7a0563a3343fdc68b92ac118d7b95c Mon Sep 17 00:00:00 2001 From: Jorge <46056498+jorgectf@users.noreply.github.com> Date: Thu, 26 Aug 2021 12:20:09 +0200 Subject: [PATCH 102/741] Apply suggestions from code review Co-authored-by: Rasmus Wriedt Larsen --- .../ql/src/experimental/Security/CWE-522/LDAPInsecureAuth.ql | 1 + python/ql/src/experimental/semmle/python/Concepts.qll | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/python/ql/src/experimental/Security/CWE-522/LDAPInsecureAuth.ql b/python/ql/src/experimental/Security/CWE-522/LDAPInsecureAuth.ql index 9899eae932f..5daaae5ff39 100644 --- a/python/ql/src/experimental/Security/CWE-522/LDAPInsecureAuth.ql +++ b/python/ql/src/experimental/Security/CWE-522/LDAPInsecureAuth.ql @@ -7,6 +7,7 @@ * @tags experimental * security * external/cwe/cwe-522 + * external/cwe/cwe-523 */ // determine precision above diff --git a/python/ql/src/experimental/semmle/python/Concepts.qll b/python/ql/src/experimental/semmle/python/Concepts.qll index 3daacf53981..bdabebb804d 100644 --- a/python/ql/src/experimental/semmle/python/Concepts.qll +++ b/python/ql/src/experimental/semmle/python/Concepts.qll @@ -167,7 +167,7 @@ module LDAPBind { abstract DataFlow::Node getPassword(); /** - * Checks if the binding process use SSL. + * Holds if the binding process use SSL. */ abstract predicate useSSL(); } @@ -195,7 +195,7 @@ class LDAPBind extends DataFlow::Node { DataFlow::Node getPassword() { result = range.getPassword() } /** - * Checks if the binding process use SSL. + * Holds if the binding process use SSL. */ predicate useSSL() { range.useSSL() } } From 786edb72df5537b5a77df9d54057e47563f237e2 Mon Sep 17 00:00:00 2001 From: jorgectf Date: Thu, 26 Aug 2021 12:36:34 +0200 Subject: [PATCH 103/741] Update `.expected` --- .../Security/CWE-522/LDAPInsecureAuth.expected | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/python/ql/test/experimental/query-tests/Security/CWE-522/LDAPInsecureAuth.expected b/python/ql/test/experimental/query-tests/Security/CWE-522/LDAPInsecureAuth.expected index fdcb414b981..13b5ba7b7b7 100644 --- a/python/ql/test/experimental/query-tests/Security/CWE-522/LDAPInsecureAuth.expected +++ b/python/ql/test/experimental/query-tests/Security/CWE-522/LDAPInsecureAuth.expected @@ -1,9 +1,4 @@ edges -| ldap3_remote.py:49:12:49:34 | ControlFlowNode for BinaryExpr | ldap3_remote.py:51:18:51:21 | ControlFlowNode for host | -| ldap3_remote.py:88:21:88:27 | ControlFlowNode for request | ldap3_remote.py:88:21:88:32 | ControlFlowNode for Attribute | -| ldap3_remote.py:88:21:88:32 | ControlFlowNode for Attribute | ldap3_remote.py:88:21:88:40 | ControlFlowNode for Subscript | -| ldap3_remote.py:88:21:88:40 | ControlFlowNode for Subscript | ldap3_remote.py:90:18:90:21 | ControlFlowNode for host | -| ldap3_remote.py:101:12:101:49 | ControlFlowNode for BinaryExpr | ldap3_remote.py:102:18:102:21 | ControlFlowNode for host | | ldap3_remote.py:114:12:114:49 | ControlFlowNode for BinaryExpr | ldap3_remote.py:115:18:115:21 | ControlFlowNode for host | | ldap3_remote.py:126:12:126:31 | ControlFlowNode for BinaryExpr | ldap3_remote.py:127:18:127:21 | ControlFlowNode for host | | ldap3_remote.py:138:21:138:27 | ControlFlowNode for request | ldap3_remote.py:138:21:138:32 | ControlFlowNode for Attribute | @@ -12,14 +7,6 @@ edges nodes | ldap2_remote.py:45:41:45:60 | ControlFlowNode for BinaryExpr | semmle.label | ControlFlowNode for BinaryExpr | | ldap2_remote.py:56:41:56:60 | ControlFlowNode for BinaryExpr | semmle.label | ControlFlowNode for BinaryExpr | -| ldap3_remote.py:49:12:49:34 | ControlFlowNode for BinaryExpr | semmle.label | ControlFlowNode for BinaryExpr | -| ldap3_remote.py:51:18:51:21 | ControlFlowNode for host | semmle.label | ControlFlowNode for host | -| ldap3_remote.py:88:21:88:27 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | -| ldap3_remote.py:88:21:88:32 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | -| ldap3_remote.py:88:21:88:40 | ControlFlowNode for Subscript | semmle.label | ControlFlowNode for Subscript | -| ldap3_remote.py:90:18:90:21 | ControlFlowNode for host | semmle.label | ControlFlowNode for host | -| ldap3_remote.py:101:12:101:49 | ControlFlowNode for BinaryExpr | semmle.label | ControlFlowNode for BinaryExpr | -| ldap3_remote.py:102:18:102:21 | ControlFlowNode for host | semmle.label | ControlFlowNode for host | | ldap3_remote.py:114:12:114:49 | ControlFlowNode for BinaryExpr | semmle.label | ControlFlowNode for BinaryExpr | | ldap3_remote.py:115:18:115:21 | ControlFlowNode for host | semmle.label | ControlFlowNode for host | | ldap3_remote.py:126:12:126:31 | ControlFlowNode for BinaryExpr | semmle.label | ControlFlowNode for BinaryExpr | @@ -31,9 +18,6 @@ nodes #select | ldap2_remote.py:45:41:45:60 | ControlFlowNode for BinaryExpr | ldap2_remote.py:45:41:45:60 | ControlFlowNode for BinaryExpr | ldap2_remote.py:45:41:45:60 | ControlFlowNode for BinaryExpr | $@ is authenticated insecurely. | ldap2_remote.py:45:41:45:60 | ControlFlowNode for BinaryExpr | This LDAP host | | ldap2_remote.py:56:41:56:60 | ControlFlowNode for BinaryExpr | ldap2_remote.py:56:41:56:60 | ControlFlowNode for BinaryExpr | ldap2_remote.py:56:41:56:60 | ControlFlowNode for BinaryExpr | $@ is authenticated insecurely. | ldap2_remote.py:56:41:56:60 | ControlFlowNode for BinaryExpr | This LDAP host | -| ldap3_remote.py:51:18:51:21 | ControlFlowNode for host | ldap3_remote.py:49:12:49:34 | ControlFlowNode for BinaryExpr | ldap3_remote.py:51:18:51:21 | ControlFlowNode for host | $@ is authenticated insecurely. | ldap3_remote.py:51:18:51:21 | ControlFlowNode for host | This LDAP host | -| ldap3_remote.py:90:18:90:21 | ControlFlowNode for host | ldap3_remote.py:88:21:88:27 | ControlFlowNode for request | ldap3_remote.py:90:18:90:21 | ControlFlowNode for host | $@ is authenticated insecurely. | ldap3_remote.py:90:18:90:21 | ControlFlowNode for host | This LDAP host | -| ldap3_remote.py:102:18:102:21 | ControlFlowNode for host | ldap3_remote.py:101:12:101:49 | ControlFlowNode for BinaryExpr | ldap3_remote.py:102:18:102:21 | ControlFlowNode for host | $@ is authenticated insecurely. | ldap3_remote.py:102:18:102:21 | ControlFlowNode for host | This LDAP host | | ldap3_remote.py:115:18:115:21 | ControlFlowNode for host | ldap3_remote.py:114:12:114:49 | ControlFlowNode for BinaryExpr | ldap3_remote.py:115:18:115:21 | ControlFlowNode for host | $@ is authenticated insecurely. | ldap3_remote.py:115:18:115:21 | ControlFlowNode for host | This LDAP host | | ldap3_remote.py:127:18:127:21 | ControlFlowNode for host | ldap3_remote.py:126:12:126:31 | ControlFlowNode for BinaryExpr | ldap3_remote.py:127:18:127:21 | ControlFlowNode for host | $@ is authenticated insecurely. | ldap3_remote.py:127:18:127:21 | ControlFlowNode for host | This LDAP host | | ldap3_remote.py:139:18:139:21 | ControlFlowNode for host | ldap3_remote.py:138:21:138:27 | ControlFlowNode for request | ldap3_remote.py:139:18:139:21 | ControlFlowNode for host | $@ is authenticated insecurely. | ldap3_remote.py:139:18:139:21 | ControlFlowNode for host | This LDAP host | From 097c23e4379ed184320a908beada05869c81ff3c Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Thu, 26 Aug 2021 14:08:52 +0200 Subject: [PATCH 104/741] Python: add inline expectations test Consider removing the original test --- .../test.expected | 0 .../test.py | 38 +++++++++---------- .../test.ql | 24 ++++++++++++ 3 files changed, 43 insertions(+), 19 deletions(-) create mode 100644 python/ql/test/query-tests/Functions/ModificationOfParameterWithDefault/test.expected create mode 100644 python/ql/test/query-tests/Functions/ModificationOfParameterWithDefault/test.ql diff --git a/python/ql/test/query-tests/Functions/ModificationOfParameterWithDefault/test.expected b/python/ql/test/query-tests/Functions/ModificationOfParameterWithDefault/test.expected new file mode 100644 index 00000000000..e69de29bb2d diff --git a/python/ql/test/query-tests/Functions/ModificationOfParameterWithDefault/test.py b/python/ql/test/query-tests/Functions/ModificationOfParameterWithDefault/test.py index 25ad530310e..3c656611c59 100644 --- a/python/ql/test/query-tests/Functions/ModificationOfParameterWithDefault/test.py +++ b/python/ql/test/query-tests/Functions/ModificationOfParameterWithDefault/test.py @@ -1,31 +1,31 @@ # Not OK def simple(l = [0]): - l[0] = 1 # FN + l[0] = 1 #$ MISSING: modification=l return l # Not OK def slice(l = [0]): - l[0:1] = 1 # FN + l[0:1] = 1 #$ MISSING: modification=l return l # Not OK def list_del(l = [0]): - del l[0] # FN + del l[0] #$ MISSING: modification=l return l # Not OK def append_op(l = []): - l += 1 + l += 1 #$ modification=l return l # Not OK def repeat_op(l = [0]): - l *= 3 + l *= 3 #$ modification=l return l # Not OK def append(l = []): - l.append(1) + l.append(1) #$ modification=l return l # OK @@ -36,7 +36,7 @@ def includes(l = []): return x def extends(l): - l.extend([1]) + l.extend([1]) #$ modification=l return l # Not OK @@ -46,17 +46,17 @@ def deferred(l = []): # Not OK def nonempty(l = [5]): - l.append(1) + l.append(1) #$ modification=l return l # Not OK def dict(d = {}): - d['a'] = 1 # FN + d['a'] = 1 #$ MISSING: modification=d return d # Not OK def dict_nonempty(d = {'a': 1}): - d['a'] = 2 # FN + d['a'] = 2 #$ MISSING: modification=d return d # OK @@ -65,7 +65,7 @@ def dict_nonempty_nochange(d = {'a': 1}): return d def modifies(d): - d['a'] = 1 # FN + d['a'] = 1 #$ MISSING: modification=d return d # Not OK @@ -75,21 +75,21 @@ def dict_deferred(d = {}): # Not OK def dict_method(d = {}): - d.update({'a': 1}) + d.update({'a': 1}) #$ modification=d return d # Not OK def dict_method_nonempty(d = {'a': 1}): - d.update({'a': 2}) + d.update({'a': 2}) #$ modification=d return d # OK def dict_method_nonempty_nochange(d = {'a': 1}): - d.update({'a': 1}) # FP + d.update({'a': 1}) #$ SPURIOUS:modification=d return d def modifies_method(d): - d.update({'a': 1}) + d.update({'a': 1}) #$ modification=d return d # Not OK @@ -106,23 +106,23 @@ def dict_includes(d = {}): # Not OK def dict_del(d = {'a': 1}): - del d['a'] # FN + del d['a'] #$ MISSING: modification=d return d # Not OK def dict_update_op(d = {}): x = {'a': 1} - d |= x + d |= x #$ modification=d return d # OK def dict_update_op_nochange(d = {}): x = {} - d |= x # FP + d |= x #$ SPURIOUS: modification=d return d # OK def sanitizer(l = []): if not l == []: - l.append(1) # FP + l.append(1) #$ SPURIOUS: modification=l return l diff --git a/python/ql/test/query-tests/Functions/ModificationOfParameterWithDefault/test.ql b/python/ql/test/query-tests/Functions/ModificationOfParameterWithDefault/test.ql new file mode 100644 index 00000000000..cac05eebd22 --- /dev/null +++ b/python/ql/test/query-tests/Functions/ModificationOfParameterWithDefault/test.ql @@ -0,0 +1,24 @@ +import python +import semmle.python.dataflow.new.DataFlow +import TestUtilities.InlineExpectationsTest +import experimental.dataflow.TestUtil.PrintNode +import semmle.python.functions.ModificationOfParameterWithDefault + +class ModificationOfParameterWithDefaultTest extends InlineExpectationsTest { + ModificationOfParameterWithDefaultTest() { this = "ModificationOfParameterWithDefaultTest" } + + override string getARelevantTag() { result = "modification" } + + predicate relevant_node(DataFlow::Node sink) { + exists(ModificationOfParameterWithDefault::Configuration cfg | cfg.hasFlowTo(sink)) + } + + override predicate hasActualResult(Location location, string element, string tag, string value) { + exists(DataFlow::Node n | relevant_node(n) | + n.getLocation() = location and + tag = "modification" and + value = prettyNode(n) and + element = n.toString() + ) + } +} From 49ae549e892b20e254c3fe169638196d5d171a54 Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Thu, 26 Aug 2021 14:29:18 +0200 Subject: [PATCH 105/741] Python: Implement modifying syntax --- ...ationOfParameterWithDefaultCustomizations.qll | 8 ++++++++ .../ModificationOfParameterWithDefault/test.py | 16 ++++++++-------- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/python/ql/src/semmle/python/functions/ModificationOfParameterWithDefaultCustomizations.qll b/python/ql/src/semmle/python/functions/ModificationOfParameterWithDefaultCustomizations.qll index c9be49b1fee..12255c5a641 100644 --- a/python/ql/src/semmle/python/functions/ModificationOfParameterWithDefaultCustomizations.qll +++ b/python/ql/src/semmle/python/functions/ModificationOfParameterWithDefaultCustomizations.qll @@ -97,8 +97,16 @@ module ModificationOfParameterWithDefault { */ class Mutation extends Sink { Mutation() { + // assignment to a subscript (includes slices) + exists(DefinitionNode d | d.(SubscriptNode).getObject() = this.asCfgNode()) + or + // deletion of a subscript + exists(DeletionNode d | d.getTarget().(SubscriptNode).getObject() = this.asCfgNode()) + or + // augmented assignment to the value exists(AugAssign a | a.getTarget().getAFlowNode() = this.asCfgNode()) or + // modifying function call exists(DataFlow::CallCfgNode c, DataFlow::AttrRead a | c.getFunction() = a | a.getObject() = this and a.getAttributeName() in [list_modifying_method(), dict_modifying_method()] diff --git a/python/ql/test/query-tests/Functions/ModificationOfParameterWithDefault/test.py b/python/ql/test/query-tests/Functions/ModificationOfParameterWithDefault/test.py index 3c656611c59..09ad7ed986c 100644 --- a/python/ql/test/query-tests/Functions/ModificationOfParameterWithDefault/test.py +++ b/python/ql/test/query-tests/Functions/ModificationOfParameterWithDefault/test.py @@ -1,16 +1,16 @@ # Not OK def simple(l = [0]): - l[0] = 1 #$ MISSING: modification=l + l[0] = 1 #$ modification=l return l # Not OK def slice(l = [0]): - l[0:1] = 1 #$ MISSING: modification=l + l[0:1] = 1 #$ modification=l return l # Not OK def list_del(l = [0]): - del l[0] #$ MISSING: modification=l + del l[0] #$ modification=l return l # Not OK @@ -51,21 +51,21 @@ def nonempty(l = [5]): # Not OK def dict(d = {}): - d['a'] = 1 #$ MISSING: modification=d + d['a'] = 1 #$ modification=d return d # Not OK def dict_nonempty(d = {'a': 1}): - d['a'] = 2 #$ MISSING: modification=d + d['a'] = 2 #$ modification=d return d # OK def dict_nonempty_nochange(d = {'a': 1}): - d['a'] = 1 + d['a'] = 1 #$ SPURIOUS: modification=d return d def modifies(d): - d['a'] = 1 #$ MISSING: modification=d + d['a'] = 1 #$ modification=d return d # Not OK @@ -106,7 +106,7 @@ def dict_includes(d = {}): # Not OK def dict_del(d = {'a': 1}): - del d['a'] #$ MISSING: modification=d + del d['a'] #$ modification=d return d # Not OK From 64b305cf7a7c984737c90777dcdf72a7cec7d80c Mon Sep 17 00:00:00 2001 From: jorgectf Date: Thu, 26 Aug 2021 23:29:45 +0200 Subject: [PATCH 106/741] Add `.qhelp` along with its example --- .../Security/CWE-522/LDAPInsecureAuth.qhelp | 23 +++++++++++++++++++ .../CWE-522/examples/LDAPInsecureAuth.py | 20 ++++++++++++++++ .../Security/CWE-522/ldap3_remote.py | 2 +- 3 files changed, 44 insertions(+), 1 deletion(-) create mode 100644 python/ql/src/experimental/Security/CWE-522/LDAPInsecureAuth.qhelp create mode 100644 python/ql/src/experimental/Security/CWE-522/examples/LDAPInsecureAuth.py diff --git a/python/ql/src/experimental/Security/CWE-522/LDAPInsecureAuth.qhelp b/python/ql/src/experimental/Security/CWE-522/LDAPInsecureAuth.qhelp new file mode 100644 index 00000000000..cd568432d73 --- /dev/null +++ b/python/ql/src/experimental/Security/CWE-522/LDAPInsecureAuth.qhelp @@ -0,0 +1,23 @@ + + + + +

    Failing to ensure the utilization of SSL in an LDAP connection can cause the entire communication +to be sent in cleartext making it easier for an attacker to intercept it.

    +
    + + +

    Always set use_SSL to True, call start_tls_s() or set a proper option flag (ldap.OPT_X_TLS_XXXXXX).

    +
    + + +

    This example shows both good and bad ways to deal with this issue under Python 3.

    + +

    The first one sets use_SSL to true as a keyword argument whereas the second one fails to provide a value for it, so +the default one is used (False).

    + +
    + +
    diff --git a/python/ql/src/experimental/Security/CWE-522/examples/LDAPInsecureAuth.py b/python/ql/src/experimental/Security/CWE-522/examples/LDAPInsecureAuth.py new file mode 100644 index 00000000000..051ca07b0dc --- /dev/null +++ b/python/ql/src/experimental/Security/CWE-522/examples/LDAPInsecureAuth.py @@ -0,0 +1,20 @@ +from ldap3 import Server, Connection, ALL +from flask import request, Flask + +app = Flask(__name__) + + +@app.route("/good") +def good(): + srv = Server(host, port, use_ssl=True) + conn = Connection(srv, dn, password) + conn.search(dn, search_filter) + return conn.response + + +@app.route("/bad") +def bad(): + srv = Server(host, port) + conn = Connection(srv, dn, password) + conn.search(dn, search_filter) + return conn.response diff --git a/python/ql/test/experimental/query-tests/Security/CWE-522/ldap3_remote.py b/python/ql/test/experimental/query-tests/Security/CWE-522/ldap3_remote.py index 09dadcfb0e0..dc0ef9cf977 100644 --- a/python/ql/test/experimental/query-tests/Security/CWE-522/ldap3_remote.py +++ b/python/ql/test/experimental/query-tests/Security/CWE-522/ldap3_remote.py @@ -101,7 +101,7 @@ def eight(): host = schema + "somethingon.theinternet.com" srv = Server(host, port=1337) conn = Connection(srv, "dn", "password") - conn.start_tls() # ! + conn.start_tls() conn.search("dn", "search_filter") return conn.response From 285c659541158bda3449f774482adff7b1d83954 Mon Sep 17 00:00:00 2001 From: Erik Krogh Kristensen Date: Wed, 25 Aug 2021 12:54:15 +0200 Subject: [PATCH 107/741] add `src` as a potential unsafe DOM property name for `js/xss-through-dom` --- .../security/dataflow/XssThroughDomCustomizations.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/javascript/ql/lib/semmle/javascript/security/dataflow/XssThroughDomCustomizations.qll b/javascript/ql/lib/semmle/javascript/security/dataflow/XssThroughDomCustomizations.qll index efedee1477d..d9222337d34 100644 --- a/javascript/ql/lib/semmle/javascript/security/dataflow/XssThroughDomCustomizations.qll +++ b/javascript/ql/lib/semmle/javascript/security/dataflow/XssThroughDomCustomizations.qll @@ -30,7 +30,7 @@ module XssThroughDom { /** * Gets a DOM property name that could store user-controlled data. */ - string unsafeDomPropertyName() { result = ["innerText", "textContent", "value", "name"] } + string unsafeDomPropertyName() { result = ["innerText", "textContent", "value", "name", "src"] } /** * A source for text from the DOM from a JQuery method call. From 1b6e1dbd13f7b0a0e5c5c27398c94c97cbcde218 Mon Sep 17 00:00:00 2001 From: Erik Krogh Kristensen Date: Wed, 25 Aug 2021 12:54:42 +0200 Subject: [PATCH 108/741] include property writes in super-classes when reading a property in a sub-class --- javascript/ql/lib/semmle/javascript/dataflow/DataFlow.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/javascript/ql/lib/semmle/javascript/dataflow/DataFlow.qll b/javascript/ql/lib/semmle/javascript/dataflow/DataFlow.qll index c9061b5c5b9..b5d1290a516 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/DataFlow.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/DataFlow.qll @@ -1591,7 +1591,7 @@ module DataFlow { */ predicate localFieldStep(DataFlow::Node pred, DataFlow::Node succ) { exists(ClassNode cls, string prop | - pred = cls.getAReceiverNode().getAPropertyWrite(prop).getRhs() or + pred = cls.getADirectSuperClass*().getAReceiverNode().getAPropertyWrite(prop).getRhs() or pred = cls.getInstanceMethod(prop) | succ = cls.getAReceiverNode().getAPropertyRead(prop) From 81742528a2c5167500a7529937cf6b4f53def70b Mon Sep 17 00:00:00 2001 From: Erik Krogh Kristensen Date: Wed, 25 Aug 2021 12:55:06 +0200 Subject: [PATCH 109/741] add test --- .../CWE-079/XssThroughDom/XssThroughDom.expected | 9 +++++++++ .../CWE-079/XssThroughDom/xss-through-dom.js | 15 ++++++++++++++- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/javascript/ql/test/query-tests/Security/CWE-079/XssThroughDom/XssThroughDom.expected b/javascript/ql/test/query-tests/Security/CWE-079/XssThroughDom/XssThroughDom.expected index 5d088481711..032446f4935 100644 --- a/javascript/ql/test/query-tests/Security/CWE-079/XssThroughDom/XssThroughDom.expected +++ b/javascript/ql/test/query-tests/Security/CWE-079/XssThroughDom/XssThroughDom.expected @@ -118,6 +118,10 @@ nodes | xss-through-dom.js:96:17:96:47 | $("#foo ... ].value | | xss-through-dom.js:96:17:96:47 | $("#foo ... ].value | | xss-through-dom.js:96:17:96:47 | $("#foo ... ].value | +| xss-through-dom.js:109:31:109:70 | "" | +| xss-through-dom.js:109:31:109:70 | "" | +| xss-through-dom.js:109:45:109:55 | this.el.src | +| xss-through-dom.js:109:45:109:55 | this.el.src | edges | forms.js:8:23:8:28 | values | forms.js:9:31:9:36 | values | | forms.js:8:23:8:28 | values | forms.js:9:31:9:36 | values | @@ -186,6 +190,10 @@ edges | xss-through-dom.js:87:36:87:39 | text | xss-through-dom.js:87:16:87:40 | new ans ... s(text) | | xss-through-dom.js:93:16:93:46 | $("#foo ... ].value | xss-through-dom.js:93:16:93:46 | $("#foo ... ].value | | xss-through-dom.js:96:17:96:47 | $("#foo ... ].value | xss-through-dom.js:96:17:96:47 | $("#foo ... ].value | +| xss-through-dom.js:109:45:109:55 | this.el.src | xss-through-dom.js:109:31:109:70 | "" | +| xss-through-dom.js:109:45:109:55 | this.el.src | xss-through-dom.js:109:31:109:70 | "" | +| xss-through-dom.js:109:45:109:55 | this.el.src | xss-through-dom.js:109:31:109:70 | "" | +| xss-through-dom.js:109:45:109:55 | this.el.src | xss-through-dom.js:109:31:109:70 | "" | #select | forms.js:9:31:9:40 | values.foo | forms.js:8:23:8:28 | values | forms.js:9:31:9:40 | values.foo | $@ is reinterpreted as HTML without escaping meta-characters. | forms.js:8:23:8:28 | values | DOM text | | forms.js:12:31:12:40 | values.bar | forms.js:11:24:11:29 | values | forms.js:12:31:12:40 | values.bar | $@ is reinterpreted as HTML without escaping meta-characters. | forms.js:11:24:11:29 | values | DOM text | @@ -219,3 +227,4 @@ edges | xss-through-dom.js:87:16:87:40 | new ans ... s(text) | xss-through-dom.js:84:15:84:30 | $("text").text() | xss-through-dom.js:87:16:87:40 | new ans ... s(text) | $@ is reinterpreted as HTML without escaping meta-characters. | xss-through-dom.js:84:15:84:30 | $("text").text() | DOM text | | xss-through-dom.js:93:16:93:46 | $("#foo ... ].value | xss-through-dom.js:93:16:93:46 | $("#foo ... ].value | xss-through-dom.js:93:16:93:46 | $("#foo ... ].value | $@ is reinterpreted as HTML without escaping meta-characters. | xss-through-dom.js:93:16:93:46 | $("#foo ... ].value | DOM text | | xss-through-dom.js:96:17:96:47 | $("#foo ... ].value | xss-through-dom.js:96:17:96:47 | $("#foo ... ].value | xss-through-dom.js:96:17:96:47 | $("#foo ... ].value | $@ is reinterpreted as HTML without escaping meta-characters. | xss-through-dom.js:96:17:96:47 | $("#foo ... ].value | DOM text | +| xss-through-dom.js:109:31:109:70 | "" | xss-through-dom.js:109:45:109:55 | this.el.src | xss-through-dom.js:109:31:109:70 | "" | $@ is reinterpreted as HTML without escaping meta-characters. | xss-through-dom.js:109:45:109:55 | this.el.src | DOM text | diff --git a/javascript/ql/test/query-tests/Security/CWE-079/XssThroughDom/xss-through-dom.js b/javascript/ql/test/query-tests/Security/CWE-079/XssThroughDom/xss-through-dom.js index d7f6d6a8208..b6e23c11c02 100644 --- a/javascript/ql/test/query-tests/Security/CWE-079/XssThroughDom/xss-through-dom.js +++ b/javascript/ql/test/query-tests/Security/CWE-079/XssThroughDom/xss-through-dom.js @@ -95,4 +95,17 @@ for (var i = 0; i < foo.length; i++) { $("#id").html($("#foo").find(".bla")[i].value); // NOT OK. } -})(); \ No newline at end of file +})(); + +class Super { + constructor() { + this.el = $("#id").get(0); + } +} + +class Sub extends Super { + constructor() { + super(); + $("#id").get(0).innerHTML = "foo"; // NOT OK. Attack: `` + } +} \ No newline at end of file From a762373ad6565c5af8cfa987b6c105a414ada26f Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Mon, 30 Aug 2021 11:04:27 +0200 Subject: [PATCH 110/741] Python: Implement simple barrier guard The one found in the original test case --- .../ModificationOfParameterWithDefault.qll | 11 ++- ...onOfParameterWithDefaultCustomizations.qll | 53 +++++++++++++- ...odificationOfParameterWithDefault.expected | 36 ++++++++++ ...odificationOfParameterWithDefault.expected | 70 +++++++++++++------ 4 files changed, 143 insertions(+), 27 deletions(-) diff --git a/python/ql/src/semmle/python/functions/ModificationOfParameterWithDefault.qll b/python/ql/src/semmle/python/functions/ModificationOfParameterWithDefault.qll index 914eb7a473e..82acd10c3d7 100644 --- a/python/ql/src/semmle/python/functions/ModificationOfParameterWithDefault.qll +++ b/python/ql/src/semmle/python/functions/ModificationOfParameterWithDefault.qll @@ -19,16 +19,21 @@ module ModificationOfParameterWithDefault { * A data-flow configuration for detecting modifications of a parameters default value. */ class Configuration extends DataFlow::Configuration { - Configuration() { this = "ModificationOfParameterWithDefault" } + boolean nonEmpty; - override predicate isSource(DataFlow::Node source) { source instanceof Source } + Configuration() { + nonEmpty in [true, false] and + this = "ModificationOfParameterWithDefault:" + nonEmpty.toString() + } + + override predicate isSource(DataFlow::Node source) { source.(Source).isNonEmpty() = nonEmpty } override predicate isSink(DataFlow::Node sink) { sink instanceof Sink } override predicate isBarrier(DataFlow::Node node) { node instanceof Barrier } override predicate isBarrierGuard(DataFlow::BarrierGuard guard) { - guard instanceof BarrierGuard + guard.(BarrierGuard).blocksNonEmpty() = nonEmpty } } } diff --git a/python/ql/src/semmle/python/functions/ModificationOfParameterWithDefaultCustomizations.qll b/python/ql/src/semmle/python/functions/ModificationOfParameterWithDefaultCustomizations.qll index 12255c5a641..e7be292513e 100644 --- a/python/ql/src/semmle/python/functions/ModificationOfParameterWithDefaultCustomizations.qll +++ b/python/ql/src/semmle/python/functions/ModificationOfParameterWithDefaultCustomizations.qll @@ -16,7 +16,9 @@ module ModificationOfParameterWithDefault { /** * A data flow source for detecting modifications of a parameters default value. */ - abstract class Source extends DataFlow::Node { } + abstract class Source extends DataFlow::Node { + abstract boolean isNonEmpty(); + } /** * A data flow sink for detecting modifications of a parameters default value. @@ -31,7 +33,9 @@ module ModificationOfParameterWithDefault { /** * A sanitizer guard for detecting modifications of a parameters default value. */ - abstract class BarrierGuard extends DataFlow::BarrierGuard { } + abstract class BarrierGuard extends DataFlow::BarrierGuard { + abstract boolean blocksNonEmpty(); + } /** Gets the truthiness (non emptyness) of the default of `p` if that value is mutable */ private boolean mutableDefaultValue(Parameter p) { @@ -55,6 +59,8 @@ module ModificationOfParameterWithDefault { boolean nonEmpty; MutableDefaultValue() { nonEmpty = mutableDefaultValue(this.asCfgNode().(NameNode).getNode()) } + + override boolean isNonEmpty() { result = nonEmpty } } /** @@ -113,4 +119,47 @@ module ModificationOfParameterWithDefault { ) } } + + private class IdentityGuarded extends Expr { + boolean inverted; + + IdentityGuarded() { + this = any(If i).getTest() and + inverted = false + or + exists(IdentityGuarded ig, UnaryExpr notExp | + notExp.getOp() instanceof Not and + ig = notExp and + notExp.getOperand() = this + | + inverted = ig.isInverted().booleanNot() + ) + } + + boolean isInverted() { result = inverted } + } + + class IdentityGuard extends BarrierGuard { + ControlFlowNode checked_node; + boolean safe_branch; + boolean nonEmpty; + + IdentityGuard() { + nonEmpty in [true, false] and + exists(IdentityGuarded ig | + this.getNode() = ig and + checked_node = this and + // The raw guard is true if the value is non-empty + // So we are safe either if we are looking for a non-empty value + // or if we are looking for an empty value and the guard is inverted. + safe_branch = ig.isInverted().booleanXor(nonEmpty) + ) + } + + override predicate checks(ControlFlowNode node, boolean branch) { + node = checked_node and branch = safe_branch + } + + override boolean blocksNonEmpty() { result = nonEmpty } + } } diff --git a/python/ql/test/query-tests/Functions/ModificationOfParameterWithDefault/ModificationOfParameterWithDefault.expected b/python/ql/test/query-tests/Functions/ModificationOfParameterWithDefault/ModificationOfParameterWithDefault.expected index c07a609dceb..f5c6f3a6baa 100644 --- a/python/ql/test/query-tests/Functions/ModificationOfParameterWithDefault/ModificationOfParameterWithDefault.expected +++ b/python/ql/test/query-tests/Functions/ModificationOfParameterWithDefault/ModificationOfParameterWithDefault.expected @@ -1,4 +1,7 @@ edges +| test.py:2:12:2:12 | ControlFlowNode for l | test.py:3:5:3:5 | ControlFlowNode for l | +| test.py:7:11:7:11 | ControlFlowNode for l | test.py:8:5:8:5 | ControlFlowNode for l | +| test.py:12:14:12:14 | ControlFlowNode for l | test.py:13:9:13:9 | ControlFlowNode for l | | test.py:17:15:17:15 | ControlFlowNode for l | test.py:18:5:18:5 | ControlFlowNode for l | | test.py:22:15:22:15 | ControlFlowNode for l | test.py:23:5:23:5 | ControlFlowNode for l | | test.py:27:12:27:12 | ControlFlowNode for l | test.py:28:5:28:5 | ControlFlowNode for l | @@ -6,16 +9,29 @@ edges | test.py:43:14:43:14 | ControlFlowNode for l | test.py:44:13:44:13 | ControlFlowNode for l | | test.py:44:13:44:13 | ControlFlowNode for l | test.py:38:13:38:13 | ControlFlowNode for l | | test.py:48:14:48:14 | ControlFlowNode for l | test.py:49:5:49:5 | ControlFlowNode for l | +| test.py:53:10:53:10 | ControlFlowNode for d | test.py:54:5:54:5 | ControlFlowNode for d | +| test.py:58:19:58:19 | ControlFlowNode for d | test.py:59:5:59:5 | ControlFlowNode for d | +| test.py:63:28:63:28 | ControlFlowNode for d | test.py:64:5:64:5 | ControlFlowNode for d | +| test.py:67:14:67:14 | ControlFlowNode for d | test.py:68:5:68:5 | ControlFlowNode for d | +| test.py:72:19:72:19 | ControlFlowNode for d | test.py:73:14:73:14 | ControlFlowNode for d | +| test.py:73:14:73:14 | ControlFlowNode for d | test.py:67:14:67:14 | ControlFlowNode for d | | test.py:77:17:77:17 | ControlFlowNode for d | test.py:78:5:78:5 | ControlFlowNode for d | | test.py:82:26:82:26 | ControlFlowNode for d | test.py:83:5:83:5 | ControlFlowNode for d | | test.py:87:35:87:35 | ControlFlowNode for d | test.py:88:5:88:5 | ControlFlowNode for d | | test.py:91:21:91:21 | ControlFlowNode for d | test.py:92:5:92:5 | ControlFlowNode for d | | test.py:96:26:96:26 | ControlFlowNode for d | test.py:97:21:97:21 | ControlFlowNode for d | | test.py:97:21:97:21 | ControlFlowNode for d | test.py:91:21:91:21 | ControlFlowNode for d | +| test.py:108:14:108:14 | ControlFlowNode for d | test.py:109:9:109:9 | ControlFlowNode for d | | test.py:113:20:113:20 | ControlFlowNode for d | test.py:115:5:115:5 | ControlFlowNode for d | | test.py:119:29:119:29 | ControlFlowNode for d | test.py:121:5:121:5 | ControlFlowNode for d | | test.py:125:15:125:15 | ControlFlowNode for l | test.py:127:9:127:9 | ControlFlowNode for l | nodes +| test.py:2:12:2:12 | ControlFlowNode for l | semmle.label | ControlFlowNode for l | +| test.py:3:5:3:5 | ControlFlowNode for l | semmle.label | ControlFlowNode for l | +| test.py:7:11:7:11 | ControlFlowNode for l | semmle.label | ControlFlowNode for l | +| test.py:8:5:8:5 | ControlFlowNode for l | semmle.label | ControlFlowNode for l | +| test.py:12:14:12:14 | ControlFlowNode for l | semmle.label | ControlFlowNode for l | +| test.py:13:9:13:9 | ControlFlowNode for l | semmle.label | ControlFlowNode for l | | test.py:17:15:17:15 | ControlFlowNode for l | semmle.label | ControlFlowNode for l | | test.py:18:5:18:5 | ControlFlowNode for l | semmle.label | ControlFlowNode for l | | test.py:22:15:22:15 | ControlFlowNode for l | semmle.label | ControlFlowNode for l | @@ -28,6 +44,16 @@ nodes | test.py:44:13:44:13 | ControlFlowNode for l | semmle.label | ControlFlowNode for l | | test.py:48:14:48:14 | ControlFlowNode for l | semmle.label | ControlFlowNode for l | | test.py:49:5:49:5 | ControlFlowNode for l | semmle.label | ControlFlowNode for l | +| test.py:53:10:53:10 | ControlFlowNode for d | semmle.label | ControlFlowNode for d | +| test.py:54:5:54:5 | ControlFlowNode for d | semmle.label | ControlFlowNode for d | +| test.py:58:19:58:19 | ControlFlowNode for d | semmle.label | ControlFlowNode for d | +| test.py:59:5:59:5 | ControlFlowNode for d | semmle.label | ControlFlowNode for d | +| test.py:63:28:63:28 | ControlFlowNode for d | semmle.label | ControlFlowNode for d | +| test.py:64:5:64:5 | ControlFlowNode for d | semmle.label | ControlFlowNode for d | +| test.py:67:14:67:14 | ControlFlowNode for d | semmle.label | ControlFlowNode for d | +| test.py:68:5:68:5 | ControlFlowNode for d | semmle.label | ControlFlowNode for d | +| test.py:72:19:72:19 | ControlFlowNode for d | semmle.label | ControlFlowNode for d | +| test.py:73:14:73:14 | ControlFlowNode for d | semmle.label | ControlFlowNode for d | | test.py:77:17:77:17 | ControlFlowNode for d | semmle.label | ControlFlowNode for d | | test.py:78:5:78:5 | ControlFlowNode for d | semmle.label | ControlFlowNode for d | | test.py:82:26:82:26 | ControlFlowNode for d | semmle.label | ControlFlowNode for d | @@ -38,6 +64,8 @@ nodes | test.py:92:5:92:5 | ControlFlowNode for d | semmle.label | ControlFlowNode for d | | test.py:96:26:96:26 | ControlFlowNode for d | semmle.label | ControlFlowNode for d | | test.py:97:21:97:21 | ControlFlowNode for d | semmle.label | ControlFlowNode for d | +| test.py:108:14:108:14 | ControlFlowNode for d | semmle.label | ControlFlowNode for d | +| test.py:109:9:109:9 | ControlFlowNode for d | semmle.label | ControlFlowNode for d | | test.py:113:20:113:20 | ControlFlowNode for d | semmle.label | ControlFlowNode for d | | test.py:115:5:115:5 | ControlFlowNode for d | semmle.label | ControlFlowNode for d | | test.py:119:29:119:29 | ControlFlowNode for d | semmle.label | ControlFlowNode for d | @@ -45,15 +73,23 @@ nodes | test.py:125:15:125:15 | ControlFlowNode for l | semmle.label | ControlFlowNode for l | | test.py:127:9:127:9 | ControlFlowNode for l | semmle.label | ControlFlowNode for l | #select +| test.py:3:5:3:5 | ControlFlowNode for l | test.py:2:12:2:12 | ControlFlowNode for l | test.py:3:5:3:5 | ControlFlowNode for l | $@ flows to here and is mutated. | test.py:2:12:2:12 | ControlFlowNode for l | Default value | +| test.py:8:5:8:5 | ControlFlowNode for l | test.py:7:11:7:11 | ControlFlowNode for l | test.py:8:5:8:5 | ControlFlowNode for l | $@ flows to here and is mutated. | test.py:7:11:7:11 | ControlFlowNode for l | Default value | +| test.py:13:9:13:9 | ControlFlowNode for l | test.py:12:14:12:14 | ControlFlowNode for l | test.py:13:9:13:9 | ControlFlowNode for l | $@ flows to here and is mutated. | test.py:12:14:12:14 | ControlFlowNode for l | Default value | | test.py:18:5:18:5 | ControlFlowNode for l | test.py:17:15:17:15 | ControlFlowNode for l | test.py:18:5:18:5 | ControlFlowNode for l | $@ flows to here and is mutated. | test.py:17:15:17:15 | ControlFlowNode for l | Default value | | test.py:23:5:23:5 | ControlFlowNode for l | test.py:22:15:22:15 | ControlFlowNode for l | test.py:23:5:23:5 | ControlFlowNode for l | $@ flows to here and is mutated. | test.py:22:15:22:15 | ControlFlowNode for l | Default value | | test.py:28:5:28:5 | ControlFlowNode for l | test.py:27:12:27:12 | ControlFlowNode for l | test.py:28:5:28:5 | ControlFlowNode for l | $@ flows to here and is mutated. | test.py:27:12:27:12 | ControlFlowNode for l | Default value | | test.py:39:5:39:5 | ControlFlowNode for l | test.py:43:14:43:14 | ControlFlowNode for l | test.py:39:5:39:5 | ControlFlowNode for l | $@ flows to here and is mutated. | test.py:43:14:43:14 | ControlFlowNode for l | Default value | | test.py:49:5:49:5 | ControlFlowNode for l | test.py:48:14:48:14 | ControlFlowNode for l | test.py:49:5:49:5 | ControlFlowNode for l | $@ flows to here and is mutated. | test.py:48:14:48:14 | ControlFlowNode for l | Default value | +| test.py:54:5:54:5 | ControlFlowNode for d | test.py:53:10:53:10 | ControlFlowNode for d | test.py:54:5:54:5 | ControlFlowNode for d | $@ flows to here and is mutated. | test.py:53:10:53:10 | ControlFlowNode for d | Default value | +| test.py:59:5:59:5 | ControlFlowNode for d | test.py:58:19:58:19 | ControlFlowNode for d | test.py:59:5:59:5 | ControlFlowNode for d | $@ flows to here and is mutated. | test.py:58:19:58:19 | ControlFlowNode for d | Default value | +| test.py:64:5:64:5 | ControlFlowNode for d | test.py:63:28:63:28 | ControlFlowNode for d | test.py:64:5:64:5 | ControlFlowNode for d | $@ flows to here and is mutated. | test.py:63:28:63:28 | ControlFlowNode for d | Default value | +| test.py:68:5:68:5 | ControlFlowNode for d | test.py:72:19:72:19 | ControlFlowNode for d | test.py:68:5:68:5 | ControlFlowNode for d | $@ flows to here and is mutated. | test.py:72:19:72:19 | ControlFlowNode for d | Default value | | test.py:78:5:78:5 | ControlFlowNode for d | test.py:77:17:77:17 | ControlFlowNode for d | test.py:78:5:78:5 | ControlFlowNode for d | $@ flows to here and is mutated. | test.py:77:17:77:17 | ControlFlowNode for d | Default value | | test.py:83:5:83:5 | ControlFlowNode for d | test.py:82:26:82:26 | ControlFlowNode for d | test.py:83:5:83:5 | ControlFlowNode for d | $@ flows to here and is mutated. | test.py:82:26:82:26 | ControlFlowNode for d | Default value | | test.py:88:5:88:5 | ControlFlowNode for d | test.py:87:35:87:35 | ControlFlowNode for d | test.py:88:5:88:5 | ControlFlowNode for d | $@ flows to here and is mutated. | test.py:87:35:87:35 | ControlFlowNode for d | Default value | | test.py:92:5:92:5 | ControlFlowNode for d | test.py:96:26:96:26 | ControlFlowNode for d | test.py:92:5:92:5 | ControlFlowNode for d | $@ flows to here and is mutated. | test.py:96:26:96:26 | ControlFlowNode for d | Default value | +| test.py:109:9:109:9 | ControlFlowNode for d | test.py:108:14:108:14 | ControlFlowNode for d | test.py:109:9:109:9 | ControlFlowNode for d | $@ flows to here and is mutated. | test.py:108:14:108:14 | ControlFlowNode for d | Default value | | test.py:115:5:115:5 | ControlFlowNode for d | test.py:113:20:113:20 | ControlFlowNode for d | test.py:115:5:115:5 | ControlFlowNode for d | $@ flows to here and is mutated. | test.py:113:20:113:20 | ControlFlowNode for d | Default value | | test.py:121:5:121:5 | ControlFlowNode for d | test.py:119:29:119:29 | ControlFlowNode for d | test.py:121:5:121:5 | ControlFlowNode for d | $@ flows to here and is mutated. | test.py:119:29:119:29 | ControlFlowNode for d | Default value | | test.py:127:9:127:9 | ControlFlowNode for l | test.py:125:15:125:15 | ControlFlowNode for l | test.py:127:9:127:9 | ControlFlowNode for l | $@ flows to here and is mutated. | test.py:125:15:125:15 | ControlFlowNode for l | Default value | diff --git a/python/ql/test/query-tests/Functions/general/ModificationOfParameterWithDefault.expected b/python/ql/test/query-tests/Functions/general/ModificationOfParameterWithDefault.expected index 08586d02c10..c9460845e29 100644 --- a/python/ql/test/query-tests/Functions/general/ModificationOfParameterWithDefault.expected +++ b/python/ql/test/query-tests/Functions/general/ModificationOfParameterWithDefault.expected @@ -1,24 +1,50 @@ edges -| functions_test.py:39:9:39:9 | empty mutable value | functions_test.py:40:5:40:5 | empty mutable value | -| functions_test.py:133:15:133:15 | empty mutable value | functions_test.py:134:5:134:5 | empty mutable value | -| functions_test.py:151:25:151:25 | empty mutable value | functions_test.py:152:5:152:5 | empty mutable value | -| functions_test.py:154:21:154:21 | empty mutable value | functions_test.py:155:5:155:5 | empty mutable value | -| functions_test.py:157:27:157:27 | empty mutable value | functions_test.py:158:25:158:25 | empty mutable value | -| functions_test.py:157:27:157:27 | empty mutable value | functions_test.py:159:21:159:21 | empty mutable value | -| functions_test.py:158:25:158:25 | empty mutable value | functions_test.py:151:25:151:25 | empty mutable value | -| functions_test.py:159:21:159:21 | empty mutable value | functions_test.py:154:21:154:21 | empty mutable value | -| functions_test.py:175:28:175:28 | non-empty mutable value | functions_test.py:179:9:179:9 | non-empty mutable value | -| functions_test.py:175:28:175:28 | non-empty mutable value | functions_test.py:181:9:181:9 | non-empty mutable value | -| functions_test.py:188:18:188:18 | non-empty mutable value | functions_test.py:189:28:189:28 | non-empty mutable value | -| functions_test.py:189:28:189:28 | non-empty mutable value | functions_test.py:175:28:175:28 | non-empty mutable value | -| functions_test.py:191:18:191:18 | non-empty mutable value | functions_test.py:192:28:192:28 | non-empty mutable value | -| functions_test.py:192:28:192:28 | non-empty mutable value | functions_test.py:175:28:175:28 | non-empty mutable value | +| functions_test.py:39:9:39:9 | ControlFlowNode for x | functions_test.py:40:5:40:5 | ControlFlowNode for x | +| functions_test.py:133:15:133:15 | ControlFlowNode for x | functions_test.py:134:5:134:5 | ControlFlowNode for x | +| functions_test.py:151:25:151:25 | ControlFlowNode for x | functions_test.py:152:5:152:5 | ControlFlowNode for x | +| functions_test.py:154:21:154:21 | ControlFlowNode for x | functions_test.py:155:5:155:5 | ControlFlowNode for x | +| functions_test.py:157:27:157:27 | ControlFlowNode for y | functions_test.py:158:25:158:25 | ControlFlowNode for y | +| functions_test.py:157:27:157:27 | ControlFlowNode for y | functions_test.py:159:21:159:21 | ControlFlowNode for y | +| functions_test.py:158:25:158:25 | ControlFlowNode for y | functions_test.py:151:25:151:25 | ControlFlowNode for x | +| functions_test.py:159:21:159:21 | ControlFlowNode for y | functions_test.py:154:21:154:21 | ControlFlowNode for x | +| functions_test.py:166:21:166:25 | ControlFlowNode for param | functions_test.py:170:9:170:13 | ControlFlowNode for param | +| functions_test.py:166:21:166:25 | ControlFlowNode for param | functions_test.py:170:9:170:13 | ControlFlowNode for param | +| functions_test.py:175:28:175:28 | ControlFlowNode for x | functions_test.py:179:9:179:9 | ControlFlowNode for x | +| functions_test.py:175:28:175:28 | ControlFlowNode for x | functions_test.py:181:9:181:9 | ControlFlowNode for x | +| functions_test.py:188:18:188:18 | ControlFlowNode for x | functions_test.py:189:28:189:28 | ControlFlowNode for x | +| functions_test.py:189:28:189:28 | ControlFlowNode for x | functions_test.py:175:28:175:28 | ControlFlowNode for x | +| functions_test.py:191:18:191:18 | ControlFlowNode for x | functions_test.py:192:28:192:28 | ControlFlowNode for x | +| functions_test.py:192:28:192:28 | ControlFlowNode for x | functions_test.py:175:28:175:28 | ControlFlowNode for x | +nodes +| functions_test.py:39:9:39:9 | ControlFlowNode for x | semmle.label | ControlFlowNode for x | +| functions_test.py:40:5:40:5 | ControlFlowNode for x | semmle.label | ControlFlowNode for x | +| functions_test.py:133:15:133:15 | ControlFlowNode for x | semmle.label | ControlFlowNode for x | +| functions_test.py:134:5:134:5 | ControlFlowNode for x | semmle.label | ControlFlowNode for x | +| functions_test.py:151:25:151:25 | ControlFlowNode for x | semmle.label | ControlFlowNode for x | +| functions_test.py:152:5:152:5 | ControlFlowNode for x | semmle.label | ControlFlowNode for x | +| functions_test.py:154:21:154:21 | ControlFlowNode for x | semmle.label | ControlFlowNode for x | +| functions_test.py:155:5:155:5 | ControlFlowNode for x | semmle.label | ControlFlowNode for x | +| functions_test.py:157:27:157:27 | ControlFlowNode for y | semmle.label | ControlFlowNode for y | +| functions_test.py:158:25:158:25 | ControlFlowNode for y | semmle.label | ControlFlowNode for y | +| functions_test.py:159:21:159:21 | ControlFlowNode for y | semmle.label | ControlFlowNode for y | +| functions_test.py:166:21:166:25 | ControlFlowNode for param | semmle.label | ControlFlowNode for param | +| functions_test.py:170:9:170:13 | ControlFlowNode for param | semmle.label | ControlFlowNode for param | +| functions_test.py:170:9:170:13 | ControlFlowNode for param | semmle.label | ControlFlowNode for param | +| functions_test.py:175:28:175:28 | ControlFlowNode for x | semmle.label | ControlFlowNode for x | +| functions_test.py:179:9:179:9 | ControlFlowNode for x | semmle.label | ControlFlowNode for x | +| functions_test.py:181:9:181:9 | ControlFlowNode for x | semmle.label | ControlFlowNode for x | +| functions_test.py:188:18:188:18 | ControlFlowNode for x | semmle.label | ControlFlowNode for x | +| functions_test.py:189:28:189:28 | ControlFlowNode for x | semmle.label | ControlFlowNode for x | +| functions_test.py:191:18:191:18 | ControlFlowNode for x | semmle.label | ControlFlowNode for x | +| functions_test.py:192:28:192:28 | ControlFlowNode for x | semmle.label | ControlFlowNode for x | #select -| functions_test.py:40:5:40:5 | x | functions_test.py:39:9:39:9 | empty mutable value | functions_test.py:40:5:40:5 | empty mutable value | $@ flows to here and is mutated. | functions_test.py:39:9:39:9 | x | Default value | -| functions_test.py:134:5:134:5 | x | functions_test.py:133:15:133:15 | empty mutable value | functions_test.py:134:5:134:5 | empty mutable value | $@ flows to here and is mutated. | functions_test.py:133:15:133:15 | x | Default value | -| functions_test.py:152:5:152:5 | x | functions_test.py:157:27:157:27 | empty mutable value | functions_test.py:152:5:152:5 | empty mutable value | $@ flows to here and is mutated. | functions_test.py:157:27:157:27 | y | Default value | -| functions_test.py:155:5:155:5 | x | functions_test.py:157:27:157:27 | empty mutable value | functions_test.py:155:5:155:5 | empty mutable value | $@ flows to here and is mutated. | functions_test.py:157:27:157:27 | y | Default value | -| functions_test.py:179:9:179:9 | x | functions_test.py:188:18:188:18 | non-empty mutable value | functions_test.py:179:9:179:9 | non-empty mutable value | $@ flows to here and is mutated. | functions_test.py:188:18:188:18 | x | Default value | -| functions_test.py:179:9:179:9 | x | functions_test.py:191:18:191:18 | non-empty mutable value | functions_test.py:179:9:179:9 | non-empty mutable value | $@ flows to here and is mutated. | functions_test.py:191:18:191:18 | x | Default value | -| functions_test.py:181:9:181:9 | x | functions_test.py:188:18:188:18 | non-empty mutable value | functions_test.py:181:9:181:9 | non-empty mutable value | $@ flows to here and is mutated. | functions_test.py:188:18:188:18 | x | Default value | -| functions_test.py:181:9:181:9 | x | functions_test.py:191:18:191:18 | non-empty mutable value | functions_test.py:181:9:181:9 | non-empty mutable value | $@ flows to here and is mutated. | functions_test.py:191:18:191:18 | x | Default value | +| functions_test.py:40:5:40:5 | ControlFlowNode for x | functions_test.py:39:9:39:9 | ControlFlowNode for x | functions_test.py:40:5:40:5 | ControlFlowNode for x | $@ flows to here and is mutated. | functions_test.py:39:9:39:9 | ControlFlowNode for x | Default value | +| functions_test.py:134:5:134:5 | ControlFlowNode for x | functions_test.py:133:15:133:15 | ControlFlowNode for x | functions_test.py:134:5:134:5 | ControlFlowNode for x | $@ flows to here and is mutated. | functions_test.py:133:15:133:15 | ControlFlowNode for x | Default value | +| functions_test.py:152:5:152:5 | ControlFlowNode for x | functions_test.py:157:27:157:27 | ControlFlowNode for y | functions_test.py:152:5:152:5 | ControlFlowNode for x | $@ flows to here and is mutated. | functions_test.py:157:27:157:27 | ControlFlowNode for y | Default value | +| functions_test.py:155:5:155:5 | ControlFlowNode for x | functions_test.py:157:27:157:27 | ControlFlowNode for y | functions_test.py:155:5:155:5 | ControlFlowNode for x | $@ flows to here and is mutated. | functions_test.py:157:27:157:27 | ControlFlowNode for y | Default value | +| functions_test.py:170:9:170:13 | ControlFlowNode for param | functions_test.py:166:21:166:25 | ControlFlowNode for param | functions_test.py:170:9:170:13 | ControlFlowNode for param | $@ flows to here and is mutated. | functions_test.py:166:21:166:25 | ControlFlowNode for param | Default value | +| functions_test.py:170:9:170:13 | ControlFlowNode for param | functions_test.py:166:21:166:25 | ControlFlowNode for param | functions_test.py:170:9:170:13 | ControlFlowNode for param | $@ flows to here and is mutated. | functions_test.py:166:21:166:25 | ControlFlowNode for param | Default value | +| functions_test.py:179:9:179:9 | ControlFlowNode for x | functions_test.py:188:18:188:18 | ControlFlowNode for x | functions_test.py:179:9:179:9 | ControlFlowNode for x | $@ flows to here and is mutated. | functions_test.py:188:18:188:18 | ControlFlowNode for x | Default value | +| functions_test.py:179:9:179:9 | ControlFlowNode for x | functions_test.py:191:18:191:18 | ControlFlowNode for x | functions_test.py:179:9:179:9 | ControlFlowNode for x | $@ flows to here and is mutated. | functions_test.py:191:18:191:18 | ControlFlowNode for x | Default value | +| functions_test.py:181:9:181:9 | ControlFlowNode for x | functions_test.py:188:18:188:18 | ControlFlowNode for x | functions_test.py:181:9:181:9 | ControlFlowNode for x | $@ flows to here and is mutated. | functions_test.py:188:18:188:18 | ControlFlowNode for x | Default value | +| functions_test.py:181:9:181:9 | ControlFlowNode for x | functions_test.py:191:18:191:18 | ControlFlowNode for x | functions_test.py:181:9:181:9 | ControlFlowNode for x | $@ flows to here and is mutated. | functions_test.py:191:18:191:18 | ControlFlowNode for x | Default value | From 1903cb8f829949d38d10020c7986e9011866a105 Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Mon, 30 Aug 2021 11:27:55 +0200 Subject: [PATCH 111/741] Python: Add change note --- python/change-notes/2021-08-30-port-modifying-default-query.md | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 python/change-notes/2021-08-30-port-modifying-default-query.md diff --git a/python/change-notes/2021-08-30-port-modifying-default-query.md b/python/change-notes/2021-08-30-port-modifying-default-query.md new file mode 100644 index 00000000000..2fcd9a11ded --- /dev/null +++ b/python/change-notes/2021-08-30-port-modifying-default-query.md @@ -0,0 +1,2 @@ +lgtm,codescanning +* Updated _Modification of parameter with default_ (`py/modification-of-default-value`) query to use the new data flow library instead of the old taint tracking library and to remove the use of points-to analysis. You may see differences in the results found by the query, but overall this change should result in a more robust and accurate analysis. From 789e2e48cff835087d0adbd265abb155217ef907 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Wed, 18 Aug 2021 09:17:49 +0200 Subject: [PATCH 112/741] C#: Remove temporary dispatch restriction --- csharp/ql/lib/semmle/code/csharp/dispatch/Dispatch.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/csharp/ql/lib/semmle/code/csharp/dispatch/Dispatch.qll b/csharp/ql/lib/semmle/code/csharp/dispatch/Dispatch.qll index 37ed99c37bb..f06fbca375d 100644 --- a/csharp/ql/lib/semmle/code/csharp/dispatch/Dispatch.qll +++ b/csharp/ql/lib/semmle/code/csharp/dispatch/Dispatch.qll @@ -508,7 +508,7 @@ private module Internal { override RuntimeCallable getADynamicTarget() { result = getAViableInherited() or - result = getAViableOverrider() and strictcount(getAViableOverrider()) < 1000 + result = getAViableOverrider() or // Simple case: target method cannot be overridden result = getAStaticTarget() and From 0de621edf97253a215150e0d52d494fe7c2244c7 Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Mon, 30 Aug 2021 15:03:58 +0200 Subject: [PATCH 113/741] Python: Add qldoc --- .../ModificationOfParameterWithDefaultCustomizations.qll | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/python/ql/src/semmle/python/functions/ModificationOfParameterWithDefaultCustomizations.qll b/python/ql/src/semmle/python/functions/ModificationOfParameterWithDefaultCustomizations.qll index e7be292513e..96dd41adfcb 100644 --- a/python/ql/src/semmle/python/functions/ModificationOfParameterWithDefaultCustomizations.qll +++ b/python/ql/src/semmle/python/functions/ModificationOfParameterWithDefaultCustomizations.qll @@ -139,6 +139,9 @@ module ModificationOfParameterWithDefault { boolean isInverted() { result = inverted } } + /** + * A check for the value being truthy or falsy can guard against modifying the default value. + */ class IdentityGuard extends BarrierGuard { ControlFlowNode checked_node; boolean safe_branch; @@ -149,7 +152,7 @@ module ModificationOfParameterWithDefault { exists(IdentityGuarded ig | this.getNode() = ig and checked_node = this and - // The raw guard is true if the value is non-empty + // The raw guard is true if the value is non-empty. // So we are safe either if we are looking for a non-empty value // or if we are looking for an empty value and the guard is inverted. safe_branch = ig.isInverted().booleanXor(nonEmpty) From a855074588b1b007a771984ae5bd88364366e3a9 Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Mon, 30 Aug 2021 15:41:51 +0200 Subject: [PATCH 114/741] Python: Try to remove py2/3 differences --- python/ql/test/query-tests/Functions/general/options | 1 + 1 file changed, 1 insertion(+) create mode 100644 python/ql/test/query-tests/Functions/general/options diff --git a/python/ql/test/query-tests/Functions/general/options b/python/ql/test/query-tests/Functions/general/options new file mode 100644 index 00000000000..2032dd9e54c --- /dev/null +++ b/python/ql/test/query-tests/Functions/general/options @@ -0,0 +1 @@ +semmle-extractor-options: --max-import-depth=1 --dont-split-graph From 7fc536db1521165ee9adcd69695e3ed78a43bcdb Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Tue, 17 Aug 2021 13:09:45 +0200 Subject: [PATCH 115/741] Data flow: Add precise call contexts to stage 2 --- .../csharp/dataflow/internal/DataFlowImpl.qll | 29 ++++++++++--------- .../dataflow/internal/DataFlowImplCommon.qll | 22 +++++++++++--- 2 files changed, 33 insertions(+), 18 deletions(-) diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl.qll index 5c2dbb30084..f2c742a52ae 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl.qll @@ -923,28 +923,29 @@ private module Stage2 { ApOption apSome(Ap ap) { result = TBooleanSome(ap) } - class Cc = boolean; + class Cc = CallContext; - class CcCall extends Cc { - CcCall() { this = true } + class CcCall = CallContextCall; - /** Holds if this call context may be `call`. */ - predicate matchesCall(DataFlowCall call) { any() } - } + class CcNoCall = CallContextNoCall; - class CcNoCall extends Cc { - CcNoCall() { this = false } - } - - Cc ccNone() { result = false } + Cc ccNone() { result instanceof CallContextAny } private class LocalCc = Unit; bindingset[call, c, outercc] - private CcCall getCallContextCall(DataFlowCall call, DataFlowCallable c, Cc outercc) { any() } + private CcCall getCallContextCall(DataFlowCall call, DataFlowCallable c, Cc outercc) { + checkCallContextCall(outercc, call, c) and + if recordDataFlowCallSiteDispatch(call, c) + then result = TSpecificCall(call) + else result = TSomeCall() + } bindingset[call, c, innercc] - private CcNoCall getCallContextReturn(DataFlowCallable c, DataFlowCall call, Cc innercc) { any() } + private CcNoCall getCallContextReturn(DataFlowCallable c, DataFlowCall call, Cc innercc) { + checkCallContextReturn(innercc, c, call) and + if reducedViableImplInReturn(c, call) then result = TReturn(c, call) else result = ccNone() + } bindingset[node, cc, config] private LocalCc getLocalCc(NodeEx node, Cc cc, Configuration config) { any() } @@ -2117,7 +2118,7 @@ private module Stage3 { private predicate flowCandSummaryCtx(NodeEx node, AccessPathFront argApf, Configuration config) { exists(AccessPathFront apf | Stage3::revFlow(node, true, _, apf, config) and - Stage3::fwdFlow(node, true, TAccessPathFrontSome(argApf), apf, config) + Stage3::fwdFlow(node, any(Stage3::CcCall ccc), TAccessPathFrontSome(argApf), apf, config) ) } diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImplCommon.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImplCommon.qll index 728f7b56c42..f588a25a176 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImplCommon.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImplCommon.qll @@ -786,13 +786,18 @@ private module Cached { } /** - * Holds if the call context `call` either improves virtual dispatch in - * `callable` or if it allows us to prune unreachable nodes in `callable`. + * Holds if the call context `call` improves virtual dispatch in `callable`. */ cached - predicate recordDataFlowCallSite(DataFlowCall call, DataFlowCallable callable) { + predicate recordDataFlowCallSiteDispatch(DataFlowCall call, DataFlowCallable callable) { reducedViableImplInCallContext(_, callable, call) - or + } + + /** + * Holds if the call context `call` allows us to prune unreachable nodes in `callable`. + */ + cached + predicate recordDataFlowCallSiteUnreachable(DataFlowCall call, DataFlowCallable callable) { exists(Node n | getNodeEnclosingCallable(n) = callable | isUnreachableInCallCached(n, call)) } @@ -846,6 +851,15 @@ private module Cached { TAccessPathFrontSome(AccessPathFront apf) } +/** + * Holds if the call context `call` either improves virtual dispatch in + * `callable` or if it allows us to prune unreachable nodes in `callable`. + */ +predicate recordDataFlowCallSite(DataFlowCall call, DataFlowCallable callable) { + recordDataFlowCallSiteDispatch(call, callable) or + recordDataFlowCallSiteUnreachable(call, callable) +} + /** * A `Node` at which a cast can occur such that the type should be checked. */ From e0d978fd585031b0165735276112fb8e56f7abd4 Mon Sep 17 00:00:00 2001 From: Benjamin Muskalla Date: Wed, 11 Aug 2021 17:35:09 +0200 Subject: [PATCH 116/741] Migrate String constructor to model --- .../ql/lib/semmle/code/java/dataflow/FlowSteps.qll | 7 +------ java/ql/src/semmle/code/java/Strings.qll | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 6 deletions(-) create mode 100644 java/ql/src/semmle/code/java/Strings.qll diff --git a/java/ql/lib/semmle/code/java/dataflow/FlowSteps.qll b/java/ql/lib/semmle/code/java/dataflow/FlowSteps.qll index 5c58658cffd..f0bcb0d6a89 100644 --- a/java/ql/lib/semmle/code/java/dataflow/FlowSteps.qll +++ b/java/ql/lib/semmle/code/java/dataflow/FlowSteps.qll @@ -10,6 +10,7 @@ private import semmle.code.java.dataflow.DataFlow * ensuring that they are visible to the taint tracking library. */ private module Frameworks { + private import semmle.code.java.Strings private import semmle.code.java.frameworks.jackson.JacksonSerializability private import semmle.code.java.frameworks.android.Intent private import semmle.code.java.frameworks.android.SQLite @@ -108,12 +109,6 @@ private class StringTaintPreservingMethod extends TaintPreservingCallable { } } -private class StringTaintPreservingConstructor extends Constructor, TaintPreservingCallable { - StringTaintPreservingConstructor() { this.getDeclaringType() instanceof TypeString } - - override predicate returnsTaintFrom(int arg) { arg = 0 } -} - private class NumberTaintPreservingCallable extends TaintPreservingCallable { int argument; diff --git a/java/ql/src/semmle/code/java/Strings.qll b/java/ql/src/semmle/code/java/Strings.qll new file mode 100644 index 00000000000..452e85c5de0 --- /dev/null +++ b/java/ql/src/semmle/code/java/Strings.qll @@ -0,0 +1,14 @@ +/** Definitions of taint steps in String and String-related classes of the JDK */ + +import java +private import semmle.code.java.dataflow.ExternalFlow + +private class StringSummaryCsv extends SummaryModelCsv { + override predicate row(string row) { + row = + [ + //`namespace; type; subtypes; name; signature; ext; input; output; kind` + "java.lang;String;false;String;;;Argument[0];Argument[-1];taint" + ] + } +} From 5df5805d366367347f3d2648a367ec923da32b1f Mon Sep 17 00:00:00 2001 From: Benjamin Muskalla Date: Mon, 16 Aug 2021 10:41:27 +0200 Subject: [PATCH 117/741] Convert strings to summary model --- .../code/java/dataflow/ExternalFlow.qll | 1 + .../semmle/code/java/dataflow/FlowSteps.qll | 68 ------------------- java/ql/src/semmle/code/java/Strings.qll | 14 ---- .../semmle/code/java/frameworks/Strings.qll | 42 ++++++++++++ 4 files changed, 43 insertions(+), 82 deletions(-) delete mode 100644 java/ql/src/semmle/code/java/Strings.qll create mode 100644 java/ql/src/semmle/code/java/frameworks/Strings.qll diff --git a/java/ql/lib/semmle/code/java/dataflow/ExternalFlow.qll b/java/ql/lib/semmle/code/java/dataflow/ExternalFlow.qll index de6143154f4..0ac045c800f 100644 --- a/java/ql/lib/semmle/code/java/dataflow/ExternalFlow.qll +++ b/java/ql/lib/semmle/code/java/dataflow/ExternalFlow.qll @@ -89,6 +89,7 @@ private module Frameworks { private import semmle.code.java.frameworks.JsonJava private import semmle.code.java.frameworks.Objects private import semmle.code.java.frameworks.Optional + private import semmle.code.java.frameworks.Strings private import semmle.code.java.frameworks.spring.SpringCache private import semmle.code.java.frameworks.spring.SpringHttp private import semmle.code.java.frameworks.spring.SpringUtil diff --git a/java/ql/lib/semmle/code/java/dataflow/FlowSteps.qll b/java/ql/lib/semmle/code/java/dataflow/FlowSteps.qll index f0bcb0d6a89..0017582c0d9 100644 --- a/java/ql/lib/semmle/code/java/dataflow/FlowSteps.qll +++ b/java/ql/lib/semmle/code/java/dataflow/FlowSteps.qll @@ -10,7 +10,6 @@ private import semmle.code.java.dataflow.DataFlow * ensuring that they are visible to the taint tracking library. */ private module Frameworks { - private import semmle.code.java.Strings private import semmle.code.java.frameworks.jackson.JacksonSerializability private import semmle.code.java.frameworks.android.Intent private import semmle.code.java.frameworks.android.SQLite @@ -85,30 +84,6 @@ abstract class TaintPreservingCallable extends Callable { predicate transfersTaint(int src, int sink) { none() } } -private class StringTaintPreservingMethod extends TaintPreservingCallable { - StringTaintPreservingMethod() { - this.getDeclaringType() instanceof TypeString and - ( - this.hasName([ - "concat", "copyValueOf", "endsWith", "format", "formatted", "getBytes", "indent", - "intern", "join", "repeat", "split", "strip", "stripIndent", "stripLeading", - "stripTrailing", "substring", "toCharArray", "toLowerCase", "toString", "toUpperCase", - "trim" - ]) - or - this.hasName("valueOf") and this.getParameterType(0) instanceof Array - ) - } - - override predicate returnsTaintFrom(int arg) { - arg = -1 and not this.isStatic() - or - this.hasName(["concat", "copyValueOf", "valueOf"]) and arg = 0 - or - this.hasName(["format", "formatted", "join"]) and arg = [0 .. getNumberOfParameters()] - } -} - private class NumberTaintPreservingCallable extends TaintPreservingCallable { int argument; @@ -128,46 +103,3 @@ private class NumberTaintPreservingCallable extends TaintPreservingCallable { override predicate returnsTaintFrom(int arg) { arg = argument } } - -/** Holds for the types `StringBuilder`, `StringBuffer`, and `StringWriter`. */ -private predicate stringBuilderType(RefType t) { - t instanceof StringBuildingType or - t.hasQualifiedName("java.io", "StringWriter") -} - -private class StringBuilderTaintPreservingCallable extends TaintPreservingCallable { - StringBuilderTaintPreservingCallable() { - exists(Method m | - this.(Method).overrides*(m) and - stringBuilderType(m.getDeclaringType()) and - m.hasName(["append", "insert", "replace", "toString", "write"]) - ) - or - this.(Constructor).getParameterType(0) instanceof RefType and - stringBuilderType(this.getDeclaringType()) - } - - override predicate returnsTaintFrom(int arg) { - arg = -1 and - not this instanceof Constructor - or - this instanceof Constructor and arg = 0 - or - this.hasName("append") and arg = 0 - or - this.hasName("insert") and arg = 1 - or - this.hasName("replace") and arg = 2 - } - - override predicate transfersTaint(int src, int sink) { - returnsTaintFrom(src) and - sink = -1 and - src != -1 and - not this instanceof Constructor - or - this.hasName("write") and - src = 0 and - sink = -1 - } -} diff --git a/java/ql/src/semmle/code/java/Strings.qll b/java/ql/src/semmle/code/java/Strings.qll deleted file mode 100644 index 452e85c5de0..00000000000 --- a/java/ql/src/semmle/code/java/Strings.qll +++ /dev/null @@ -1,14 +0,0 @@ -/** Definitions of taint steps in String and String-related classes of the JDK */ - -import java -private import semmle.code.java.dataflow.ExternalFlow - -private class StringSummaryCsv extends SummaryModelCsv { - override predicate row(string row) { - row = - [ - //`namespace; type; subtypes; name; signature; ext; input; output; kind` - "java.lang;String;false;String;;;Argument[0];Argument[-1];taint" - ] - } -} diff --git a/java/ql/src/semmle/code/java/frameworks/Strings.qll b/java/ql/src/semmle/code/java/frameworks/Strings.qll new file mode 100644 index 00000000000..f4959a25989 --- /dev/null +++ b/java/ql/src/semmle/code/java/frameworks/Strings.qll @@ -0,0 +1,42 @@ +/** Definitions of taint steps in String and String-related classes of the JDK */ + +import java +private import semmle.code.java.dataflow.ExternalFlow + +private class StringSummaryCsv extends SummaryModelCsv { + override predicate row(string row) { + row = + [ + //`namespace; type; subtypes; name; signature; ext; input; output; kind` + "java.lang;String;false;concat;(String);;Argument[0];ReturnValue;taint", + "java.lang;String;false;copyValueOf;;;Argument[0];ReturnValue;taint", + "java.lang;String;false;endsWith;;;Argument[-1];ReturnValue;taint", + "java.lang;String;false;format;(Locale,String,Object[]);;Argument[1];ReturnValue;taint", + "java.lang;String;false;format;(Locale,String,Object[]);;ArrayElement of Argument[2];ReturnValue;taint", + "java.lang;String;false;format;(String,Object[]);;Argument[0];ReturnValue;taint", + "java.lang;String;false;format;(String,Object[]);;ArrayElement of Argument[1];ReturnValue;taint", + "java.lang;String;false;formatted;(Object[]);;Argument[-1];ReturnValue;taint", + "java.lang;String;false;formatted;(Object[]);;ArrayElement of Argument[0];ReturnValue;taint", + "java.lang;String;false;getBytes;;;Argument[-1];ReturnValue;taint", + "java.lang;String;false;indent;;;Argument[-1];ReturnValue;taint", + "java.lang;String;false;intern;;;Argument[-1];ReturnValue;taint", + "java.lang;String;false;join;;;Argument[0..1];ReturnValue;taint", + "java.lang;String;false;repeat;(int);;Argument[-1];ReturnValue;taint", + "java.lang;String;false;split;;;Argument[-1];ReturnValue;taint", + "java.lang;String;false;String;;;Argument[0];Argument[-1];value", + "java.lang;String;false;strip;;;Argument[-1];ReturnValue;taint", + "java.lang;String;false;stripIndent;;;Argument[-1];ReturnValue;taint", + "java.lang;String;false;stripLeading;;;Argument[-1];ReturnValue;taint", + "java.lang;String;false;stripTrailing;;;Argument[-1];ReturnValue;taint", + "java.lang;String;false;substring;;;Argument[-1];ReturnValue;taint", + "java.lang;String;false;toCharArray;;;Argument[-1];ReturnValue;taint", + "java.lang;String;false;toLowerCase;;;Argument[-1];ReturnValue;taint", + "java.lang;String;false;toString;;;Argument[-1];ReturnValue;value", + "java.lang;String;false;toUpperCase;;;Argument[-1];ReturnValue;taint", + "java.lang;String;false;trim;;;Argument[-1];ReturnValue;taint", + "java.lang;String;false;valueOf;(char);;Argument[0];ReturnValue;taint", + "java.lang;String;false;valueOf;(char[],int,int);;Argument[0];ReturnValue;taint", + "java.lang;String;false;valueOf;(char[]);;Argument[0];ReturnValue;taint" + ] + } +} From dab626270da3f3429ac280901af0d2c6d1a45e12 Mon Sep 17 00:00:00 2001 From: Benjamin Muskalla Date: Mon, 16 Aug 2021 10:41:43 +0200 Subject: [PATCH 118/741] Convert Objects API to csv model --- .../semmle/code/java/frameworks/Objects.qll | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 java/ql/src/semmle/code/java/frameworks/Objects.qll diff --git a/java/ql/src/semmle/code/java/frameworks/Objects.qll b/java/ql/src/semmle/code/java/frameworks/Objects.qll new file mode 100644 index 00000000000..60d9d3afac5 --- /dev/null +++ b/java/ql/src/semmle/code/java/frameworks/Objects.qll @@ -0,0 +1,19 @@ +/** Definitions of taint steps in Objects class of the JDK */ + +import java +private import semmle.code.java.dataflow.ExternalFlow + +private class ObjectsSummaryCsv extends SummaryModelCsv { + override predicate row(string row) { + row = + [ + //`namespace; type; subtypes; name; signature; ext; input; output; kind` + "java.util;Objects;false;requireNonNull;;;Argument[0];ReturnValue;value", + "java.util;Objects;false;requireNonNullElse;;;Argument[0];ReturnValue;value", + "java.util;Objects;false;requireNonNullElse;;;Argument[1];ReturnValue;value", + "java.util;Objects;false;requireNonNullElseGet;;;Argument[0];ReturnValue;value", + "java.util;Objects;false;requireNonNullElseGet;;;Argument[1];ReturnValue;value", + "java.util;Objects;false;toString;;;Argument[1];ReturnValue;value" + ] + } +} From b7e608abc93bdd7c90131b01b6a3707447367d5a Mon Sep 17 00:00:00 2001 From: Benjamin Muskalla Date: Mon, 16 Aug 2021 14:38:03 +0200 Subject: [PATCH 119/741] Model string builder APIs --- .../ql/src/semmle/code/java/frameworks/Strings.qll | 14 +++++++++++++- .../dataflow/taint-format/test.expected | 13 +++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/java/ql/src/semmle/code/java/frameworks/Strings.qll b/java/ql/src/semmle/code/java/frameworks/Strings.qll index f4959a25989..247a360c308 100644 --- a/java/ql/src/semmle/code/java/frameworks/Strings.qll +++ b/java/ql/src/semmle/code/java/frameworks/Strings.qll @@ -36,7 +36,19 @@ private class StringSummaryCsv extends SummaryModelCsv { "java.lang;String;false;trim;;;Argument[-1];ReturnValue;taint", "java.lang;String;false;valueOf;(char);;Argument[0];ReturnValue;taint", "java.lang;String;false;valueOf;(char[],int,int);;Argument[0];ReturnValue;taint", - "java.lang;String;false;valueOf;(char[]);;Argument[0];ReturnValue;taint" + "java.lang;String;false;valueOf;(char[]);;Argument[0];ReturnValue;taint", + "java.io;StringWriter;true;append;;;Argument[0];Argument[-1];taint", + "java.io;StringWriter;true;append;;;Argument[0];ReturnValue;taint", + "java.io;StringWriter;true;write;;;Argument[0];Argument[-1];taint", + "java.lang;AbstractStringBuilder;true;AbstractStringBuilder;(String);;Argument[0];Argument[-1];taint", + "java.lang;AbstractStringBuilder;true;append;;;Argument[0];Argument[-1];taint", + "java.lang;AbstractStringBuilder;true;append;;;Argument[-1];ReturnValue;taint", + "java.lang;AbstractStringBuilder;true;insert;;;Argument[1];Argument[-1];taint", + "java.lang;AbstractStringBuilder;true;insert;;;Argument[-1];ReturnValue;taint", + "java.lang;AbstractStringBuilder;true;toString;;;Argument[-1];ReturnValue;taint", + "java.lang;StringBuffer;true;StringBuffer;(CharSequence);;Argument[0];Argument[-1];taint", + "java.lang;StringBuffer;true;StringBuffer;(String);;Argument[0];Argument[-1];taint", + "java.lang;StringBuilder;true;StringBuilder;;;Argument[0];Argument[-1];taint" ] } } diff --git a/java/ql/test/library-tests/dataflow/taint-format/test.expected b/java/ql/test/library-tests/dataflow/taint-format/test.expected index ddc0f36d753..5ac6d5050dc 100644 --- a/java/ql/test/library-tests/dataflow/taint-format/test.expected +++ b/java/ql/test/library-tests/dataflow/taint-format/test.expected @@ -10,6 +10,13 @@ | A.java:10:22:10:28 | taint(...) | A.java:17:9:17:105 | format(...) | | A.java:10:22:10:28 | taint(...) | A.java:17:9:17:105 | new ..[] { .. } | | A.java:10:22:10:28 | taint(...) | A.java:17:102:17:104 | bad | +| A.java:10:22:10:28 | taint(...) | file:///modules/java.base/java/lang/String.class:0:0:0:0 | [summary] read: [] of argument 0 in formatted | +| A.java:10:22:10:28 | taint(...) | file:///modules/java.base/java/lang/String.class:0:0:0:0 | [summary] read: [] of argument 1 in format | +| A.java:10:22:10:28 | taint(...) | file:///modules/java.base/java/lang/String.class:0:0:0:0 | [summary] to write: return (return) in format | +| A.java:10:22:10:28 | taint(...) | file:///modules/java.base/java/lang/String.class:0:0:0:0 | [summary] to write: return (return) in formatted | +| A.java:10:22:10:28 | taint(...) | file:///modules/java.base/java/lang/String.class:0:0:0:0 | parameter this | +| A.java:10:22:10:28 | taint(...) | file://:0:0:0:0 | p0 | +| A.java:10:22:10:28 | taint(...) | file://:0:0:0:0 | p1 | | A.java:21:22:21:28 | taint(...) | A.java:21:22:21:28 | taint(...) | | A.java:21:22:21:28 | taint(...) | A.java:25:9:25:9 | f [post update] | | A.java:21:22:21:28 | taint(...) | A.java:25:9:25:27 | format(...) | @@ -26,6 +33,8 @@ | A.java:30:22:30:28 | taint(...) | A.java:35:24:35:26 | bad | | A.java:30:22:30:28 | taint(...) | A.java:36:9:36:10 | sb | | A.java:30:22:30:28 | taint(...) | A.java:36:9:36:21 | toString(...) | +| A.java:30:22:30:28 | taint(...) | file:///modules/java.base/java/lang/StringBuilder.class:0:0:0:0 | [summary] to write: return (return) in toString | +| A.java:30:22:30:28 | taint(...) | file:///modules/java.base/java/lang/StringBuilder.class:0:0:0:0 | parameter this | | A.java:40:22:40:28 | taint(...) | A.java:40:22:40:28 | taint(...) | | A.java:40:22:40:28 | taint(...) | A.java:43:9:43:10 | sb [post update] | | A.java:40:22:40:28 | taint(...) | A.java:43:9:43:22 | append(...) | @@ -34,3 +43,7 @@ | A.java:40:22:40:28 | taint(...) | A.java:45:9:45:38 | format(...) | | A.java:40:22:40:28 | taint(...) | A.java:45:9:45:49 | toString(...) | | A.java:40:22:40:28 | taint(...) | A.java:45:23:45:24 | sb | +| A.java:40:22:40:28 | taint(...) | file:///modules/java.base/java/lang/StringBuilder.class:0:0:0:0 | [summary] to write: argument -1 in append | +| A.java:40:22:40:28 | taint(...) | file:///modules/java.base/java/lang/StringBuilder.class:0:0:0:0 | [summary] to write: return (return) in append | +| A.java:40:22:40:28 | taint(...) | file:///modules/java.base/java/lang/StringBuilder.class:0:0:0:0 | parameter this | +| A.java:40:22:40:28 | taint(...) | file://:0:0:0:0 | p0 | From 3928ffd30d93eaedd88dadd3fe632312b7d62986 Mon Sep 17 00:00:00 2001 From: Benjamin Muskalla Date: Mon, 16 Aug 2021 15:23:03 +0200 Subject: [PATCH 120/741] Support CharSequence#subSequence --- java/ql/src/semmle/code/java/frameworks/Strings.qll | 3 ++- .../test/library-tests/dataflow/taint/CharSeq.java | 13 +++++++++++++ .../test/library-tests/dataflow/taint/test.expected | 2 ++ 3 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 java/ql/test/library-tests/dataflow/taint/CharSeq.java diff --git a/java/ql/src/semmle/code/java/frameworks/Strings.qll b/java/ql/src/semmle/code/java/frameworks/Strings.qll index 247a360c308..c1f7a4c29e1 100644 --- a/java/ql/src/semmle/code/java/frameworks/Strings.qll +++ b/java/ql/src/semmle/code/java/frameworks/Strings.qll @@ -48,7 +48,8 @@ private class StringSummaryCsv extends SummaryModelCsv { "java.lang;AbstractStringBuilder;true;toString;;;Argument[-1];ReturnValue;taint", "java.lang;StringBuffer;true;StringBuffer;(CharSequence);;Argument[0];Argument[-1];taint", "java.lang;StringBuffer;true;StringBuffer;(String);;Argument[0];Argument[-1];taint", - "java.lang;StringBuilder;true;StringBuilder;;;Argument[0];Argument[-1];taint" + "java.lang;StringBuilder;true;StringBuilder;;;Argument[0];Argument[-1];taint", + "java.lang;CharSequence;true;subSequence;;;Argument[-1];ReturnValue;taint" ] } } diff --git a/java/ql/test/library-tests/dataflow/taint/CharSeq.java b/java/ql/test/library-tests/dataflow/taint/CharSeq.java new file mode 100644 index 00000000000..d006dc900e5 --- /dev/null +++ b/java/ql/test/library-tests/dataflow/taint/CharSeq.java @@ -0,0 +1,13 @@ +public class CharSeq { + public static String taint() { return "tainted"; } + + public static void sink(Object o) { } + + void test1() { + CharSequence seq = taint().subSequence(0,1); + sink(seq); + + CharSequence seqFromSeq = seq.subSequence(0, 1); + sink(seqFromSeq); + } + } \ No newline at end of file diff --git a/java/ql/test/library-tests/dataflow/taint/test.expected b/java/ql/test/library-tests/dataflow/taint/test.expected index c17f3bc0399..a0ab3b4358b 100644 --- a/java/ql/test/library-tests/dataflow/taint/test.expected +++ b/java/ql/test/library-tests/dataflow/taint/test.expected @@ -37,6 +37,8 @@ | B.java:15:21:15:27 | taint(...) | B.java:143:10:143:44 | toURL(...) | | B.java:15:21:15:27 | taint(...) | B.java:146:10:146:37 | toPath(...) | | B.java:15:21:15:27 | taint(...) | B.java:149:10:149:46 | toFile(...) | +| CharSeq.java:7:26:7:32 | taint(...) | CharSeq.java:8:12:8:14 | seq | +| CharSeq.java:7:26:7:32 | taint(...) | CharSeq.java:11:12:11:21 | seqFromSeq | | MethodFlow.java:7:22:7:28 | taint(...) | MethodFlow.java:8:10:8:16 | tainted | | MethodFlow.java:9:31:9:37 | taint(...) | MethodFlow.java:10:10:10:17 | tainted2 | | MethodFlow.java:11:35:11:41 | taint(...) | MethodFlow.java:12:10:12:17 | tainted3 | From 7be179cf6cef4a986b94ea9325f9266fe863a03f Mon Sep 17 00:00:00 2001 From: Benjamin Muskalla Date: Mon, 16 Aug 2021 16:00:32 +0200 Subject: [PATCH 121/741] Mark String constructor as propagating taint --- java/ql/src/semmle/code/java/frameworks/Strings.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/ql/src/semmle/code/java/frameworks/Strings.qll b/java/ql/src/semmle/code/java/frameworks/Strings.qll index c1f7a4c29e1..c90a649a6cd 100644 --- a/java/ql/src/semmle/code/java/frameworks/Strings.qll +++ b/java/ql/src/semmle/code/java/frameworks/Strings.qll @@ -23,7 +23,7 @@ private class StringSummaryCsv extends SummaryModelCsv { "java.lang;String;false;join;;;Argument[0..1];ReturnValue;taint", "java.lang;String;false;repeat;(int);;Argument[-1];ReturnValue;taint", "java.lang;String;false;split;;;Argument[-1];ReturnValue;taint", - "java.lang;String;false;String;;;Argument[0];Argument[-1];value", + "java.lang;String;false;String;;;Argument[0];Argument[-1];taint", "java.lang;String;false;strip;;;Argument[-1];ReturnValue;taint", "java.lang;String;false;stripIndent;;;Argument[-1];ReturnValue;taint", "java.lang;String;false;stripLeading;;;Argument[-1];ReturnValue;taint", From 93bc8aa7b27b3dde2ac1054ff5531efcca26996f Mon Sep 17 00:00:00 2001 From: Benjamin Muskalla Date: Tue, 17 Aug 2021 10:29:34 +0200 Subject: [PATCH 122/741] Fix tests to take `trim` into account --- .../JakartaExpressionInjection.expected | 6 +++- .../security/CWE-094/JythonInjection.expected | 4 ++- .../security/CWE-094/ScriptInjection.expected | 4 ++- .../security/CWE-094/SpelInjection.expected | 36 +++++++++++++++---- .../semmle/examples/SqlTaintedLocal.expected | 9 +++++ ...alidationOfArrayConstructionLocal.expected | 8 +++-- ...properValidationOfArrayIndexLocal.expected | 6 +++- .../tests/ArithmeticTaintedLocal.expected | 26 +++++++++----- .../tests/NumericCastTaintedLocal.expected | 6 +++- 9 files changed, 83 insertions(+), 22 deletions(-) diff --git a/java/ql/test/experimental/query-tests/security/CWE-094/JakartaExpressionInjection.expected b/java/ql/test/experimental/query-tests/security/CWE-094/JakartaExpressionInjection.expected index b4f4e1f696b..dab245c67ae 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-094/JakartaExpressionInjection.expected +++ b/java/ql/test/experimental/query-tests/security/CWE-094/JakartaExpressionInjection.expected @@ -1,6 +1,8 @@ edges | JakartaExpressionInjection.java:23:25:23:47 | getInputStream(...) : InputStream | JakartaExpressionInjection.java:23:54:23:58 | bytes [post update] : byte[] | -| JakartaExpressionInjection.java:23:54:23:58 | bytes [post update] : byte[] | JakartaExpressionInjection.java:25:31:25:40 | expression : String | +| JakartaExpressionInjection.java:23:54:23:58 | bytes [post update] : byte[] | JakartaExpressionInjection.java:24:48:24:52 | bytes : byte[] | +| JakartaExpressionInjection.java:24:37:24:59 | new String(...) : String | JakartaExpressionInjection.java:25:31:25:40 | expression : String | +| JakartaExpressionInjection.java:24:48:24:52 | bytes : byte[] | JakartaExpressionInjection.java:24:37:24:59 | new String(...) : String | | JakartaExpressionInjection.java:25:31:25:40 | expression : String | JakartaExpressionInjection.java:32:24:32:33 | expression : String | | JakartaExpressionInjection.java:25:31:25:40 | expression : String | JakartaExpressionInjection.java:40:24:40:33 | expression : String | | JakartaExpressionInjection.java:25:31:25:40 | expression : String | JakartaExpressionInjection.java:48:24:48:33 | expression : String | @@ -20,6 +22,8 @@ edges nodes | JakartaExpressionInjection.java:23:25:23:47 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | | JakartaExpressionInjection.java:23:54:23:58 | bytes [post update] : byte[] | semmle.label | bytes [post update] : byte[] | +| JakartaExpressionInjection.java:24:37:24:59 | new String(...) : String | semmle.label | new String(...) : String | +| JakartaExpressionInjection.java:24:48:24:52 | bytes : byte[] | semmle.label | bytes : byte[] | | JakartaExpressionInjection.java:25:31:25:40 | expression : String | semmle.label | expression : String | | JakartaExpressionInjection.java:32:24:32:33 | expression : String | semmle.label | expression : String | | JakartaExpressionInjection.java:34:28:34:37 | expression | semmle.label | expression | diff --git a/java/ql/test/experimental/query-tests/security/CWE-094/JythonInjection.expected b/java/ql/test/experimental/query-tests/security/CWE-094/JythonInjection.expected index 4f66cc83fbd..e067fb506d9 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-094/JythonInjection.expected +++ b/java/ql/test/experimental/query-tests/security/CWE-094/JythonInjection.expected @@ -2,7 +2,8 @@ edges | JythonInjection.java:28:23:28:50 | getParameter(...) : String | JythonInjection.java:36:30:36:33 | code | | JythonInjection.java:53:23:53:50 | getParameter(...) : String | JythonInjection.java:58:44:58:47 | code | | JythonInjection.java:73:23:73:50 | getParameter(...) : String | JythonInjection.java:81:35:81:38 | code | -| JythonInjection.java:97:23:97:50 | getParameter(...) : String | JythonInjection.java:106:61:106:75 | getBytes(...) | +| JythonInjection.java:97:23:97:50 | getParameter(...) : String | JythonInjection.java:106:61:106:64 | code : String | +| JythonInjection.java:106:61:106:64 | code : String | JythonInjection.java:106:61:106:75 | getBytes(...) | nodes | JythonInjection.java:28:23:28:50 | getParameter(...) : String | semmle.label | getParameter(...) : String | | JythonInjection.java:36:30:36:33 | code | semmle.label | code | @@ -11,6 +12,7 @@ nodes | JythonInjection.java:73:23:73:50 | getParameter(...) : String | semmle.label | getParameter(...) : String | | JythonInjection.java:81:35:81:38 | code | semmle.label | code | | JythonInjection.java:97:23:97:50 | getParameter(...) : String | semmle.label | getParameter(...) : String | +| JythonInjection.java:106:61:106:64 | code : String | semmle.label | code : String | | JythonInjection.java:106:61:106:75 | getBytes(...) | semmle.label | getBytes(...) | | JythonInjection.java:131:40:131:63 | getInputStream(...) | semmle.label | getInputStream(...) | #select diff --git a/java/ql/test/experimental/query-tests/security/CWE-094/ScriptInjection.expected b/java/ql/test/experimental/query-tests/security/CWE-094/ScriptInjection.expected index 5f1d250e9a2..ec3a44de26f 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-094/ScriptInjection.expected +++ b/java/ql/test/experimental/query-tests/security/CWE-094/ScriptInjection.expected @@ -1,7 +1,8 @@ edges | RhinoServlet.java:28:23:28:50 | getParameter(...) : String | RhinoServlet.java:32:55:32:58 | code | | RhinoServlet.java:81:23:81:50 | getParameter(...) : String | RhinoServlet.java:83:54:83:57 | code | -| RhinoServlet.java:88:23:88:50 | getParameter(...) : String | RhinoServlet.java:89:74:89:88 | getBytes(...) | +| RhinoServlet.java:88:23:88:50 | getParameter(...) : String | RhinoServlet.java:89:74:89:77 | code : String | +| RhinoServlet.java:89:74:89:77 | code : String | RhinoServlet.java:89:74:89:88 | getBytes(...) | | ScriptEngineTest.java:20:44:20:55 | input : String | ScriptEngineTest.java:24:37:24:41 | input | | ScriptEngineTest.java:27:51:27:62 | input : String | ScriptEngineTest.java:31:31:31:35 | input | | ScriptEngineTest.java:35:58:35:69 | input : String | ScriptEngineTest.java:39:31:39:35 | input | @@ -26,6 +27,7 @@ nodes | RhinoServlet.java:81:23:81:50 | getParameter(...) : String | semmle.label | getParameter(...) : String | | RhinoServlet.java:83:54:83:57 | code | semmle.label | code | | RhinoServlet.java:88:23:88:50 | getParameter(...) : String | semmle.label | getParameter(...) : String | +| RhinoServlet.java:89:74:89:77 | code : String | semmle.label | code : String | | RhinoServlet.java:89:74:89:88 | getBytes(...) | semmle.label | getBytes(...) | | ScriptEngineTest.java:20:44:20:55 | input : String | semmle.label | input : String | | ScriptEngineTest.java:24:37:24:41 | input | semmle.label | input | diff --git a/java/ql/test/experimental/query-tests/security/CWE-094/SpelInjection.expected b/java/ql/test/experimental/query-tests/security/CWE-094/SpelInjection.expected index 83d1725237a..67b31d0b6b8 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-094/SpelInjection.expected +++ b/java/ql/test/experimental/query-tests/security/CWE-094/SpelInjection.expected @@ -1,46 +1,70 @@ edges | SpelInjection.java:15:22:15:44 | getInputStream(...) : InputStream | SpelInjection.java:18:13:18:14 | in : InputStream | | SpelInjection.java:18:13:18:14 | in : InputStream | SpelInjection.java:18:21:18:25 | bytes [post update] : byte[] | -| SpelInjection.java:18:21:18:25 | bytes [post update] : byte[] | SpelInjection.java:23:5:23:14 | expression | +| SpelInjection.java:18:21:18:25 | bytes [post update] : byte[] | SpelInjection.java:19:31:19:35 | bytes : byte[] | +| SpelInjection.java:19:20:19:42 | new String(...) : String | SpelInjection.java:23:5:23:14 | expression | +| SpelInjection.java:19:31:19:35 | bytes : byte[] | SpelInjection.java:19:20:19:42 | new String(...) : String | | SpelInjection.java:27:22:27:44 | getInputStream(...) : InputStream | SpelInjection.java:30:13:30:14 | in : InputStream | | SpelInjection.java:30:13:30:14 | in : InputStream | SpelInjection.java:30:21:30:25 | bytes [post update] : byte[] | -| SpelInjection.java:30:21:30:25 | bytes [post update] : byte[] | SpelInjection.java:34:5:34:14 | expression | +| SpelInjection.java:30:21:30:25 | bytes [post update] : byte[] | SpelInjection.java:31:31:31:35 | bytes : byte[] | +| SpelInjection.java:31:20:31:42 | new String(...) : String | SpelInjection.java:34:5:34:14 | expression | +| SpelInjection.java:31:31:31:35 | bytes : byte[] | SpelInjection.java:31:20:31:42 | new String(...) : String | | SpelInjection.java:38:22:38:44 | getInputStream(...) : InputStream | SpelInjection.java:41:13:41:14 | in : InputStream | | SpelInjection.java:41:13:41:14 | in : InputStream | SpelInjection.java:41:21:41:25 | bytes [post update] : byte[] | -| SpelInjection.java:41:21:41:25 | bytes [post update] : byte[] | SpelInjection.java:48:5:48:14 | expression | +| SpelInjection.java:41:21:41:25 | bytes [post update] : byte[] | SpelInjection.java:42:31:42:35 | bytes : byte[] | +| SpelInjection.java:42:20:42:42 | new String(...) : String | SpelInjection.java:48:5:48:14 | expression | +| SpelInjection.java:42:31:42:35 | bytes : byte[] | SpelInjection.java:42:20:42:42 | new String(...) : String | | SpelInjection.java:52:22:52:44 | getInputStream(...) : InputStream | SpelInjection.java:55:13:55:14 | in : InputStream | | SpelInjection.java:55:13:55:14 | in : InputStream | SpelInjection.java:55:21:55:25 | bytes [post update] : byte[] | -| SpelInjection.java:55:21:55:25 | bytes [post update] : byte[] | SpelInjection.java:59:5:59:14 | expression | +| SpelInjection.java:55:21:55:25 | bytes [post update] : byte[] | SpelInjection.java:56:31:56:35 | bytes : byte[] | +| SpelInjection.java:56:20:56:42 | new String(...) : String | SpelInjection.java:59:5:59:14 | expression | +| SpelInjection.java:56:31:56:35 | bytes : byte[] | SpelInjection.java:56:20:56:42 | new String(...) : String | | SpelInjection.java:63:22:63:44 | getInputStream(...) : InputStream | SpelInjection.java:66:13:66:14 | in : InputStream | | SpelInjection.java:66:13:66:14 | in : InputStream | SpelInjection.java:66:21:66:25 | bytes [post update] : byte[] | -| SpelInjection.java:66:21:66:25 | bytes [post update] : byte[] | SpelInjection.java:70:5:70:14 | expression | +| SpelInjection.java:66:21:66:25 | bytes [post update] : byte[] | SpelInjection.java:67:31:67:35 | bytes : byte[] | +| SpelInjection.java:67:20:67:42 | new String(...) : String | SpelInjection.java:70:5:70:14 | expression | +| SpelInjection.java:67:31:67:35 | bytes : byte[] | SpelInjection.java:67:20:67:42 | new String(...) : String | | SpelInjection.java:74:22:74:44 | getInputStream(...) : InputStream | SpelInjection.java:77:13:77:14 | in : InputStream | | SpelInjection.java:77:13:77:14 | in : InputStream | SpelInjection.java:77:21:77:25 | bytes [post update] : byte[] | -| SpelInjection.java:77:21:77:25 | bytes [post update] : byte[] | SpelInjection.java:83:5:83:14 | expression | +| SpelInjection.java:77:21:77:25 | bytes [post update] : byte[] | SpelInjection.java:78:31:78:35 | bytes : byte[] | +| SpelInjection.java:78:20:78:42 | new String(...) : String | SpelInjection.java:83:5:83:14 | expression | +| SpelInjection.java:78:31:78:35 | bytes : byte[] | SpelInjection.java:78:20:78:42 | new String(...) : String | nodes | SpelInjection.java:15:22:15:44 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | | SpelInjection.java:18:13:18:14 | in : InputStream | semmle.label | in : InputStream | | SpelInjection.java:18:21:18:25 | bytes [post update] : byte[] | semmle.label | bytes [post update] : byte[] | +| SpelInjection.java:19:20:19:42 | new String(...) : String | semmle.label | new String(...) : String | +| SpelInjection.java:19:31:19:35 | bytes : byte[] | semmle.label | bytes : byte[] | | SpelInjection.java:23:5:23:14 | expression | semmle.label | expression | | SpelInjection.java:27:22:27:44 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | | SpelInjection.java:30:13:30:14 | in : InputStream | semmle.label | in : InputStream | | SpelInjection.java:30:21:30:25 | bytes [post update] : byte[] | semmle.label | bytes [post update] : byte[] | +| SpelInjection.java:31:20:31:42 | new String(...) : String | semmle.label | new String(...) : String | +| SpelInjection.java:31:31:31:35 | bytes : byte[] | semmle.label | bytes : byte[] | | SpelInjection.java:34:5:34:14 | expression | semmle.label | expression | | SpelInjection.java:38:22:38:44 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | | SpelInjection.java:41:13:41:14 | in : InputStream | semmle.label | in : InputStream | | SpelInjection.java:41:21:41:25 | bytes [post update] : byte[] | semmle.label | bytes [post update] : byte[] | +| SpelInjection.java:42:20:42:42 | new String(...) : String | semmle.label | new String(...) : String | +| SpelInjection.java:42:31:42:35 | bytes : byte[] | semmle.label | bytes : byte[] | | SpelInjection.java:48:5:48:14 | expression | semmle.label | expression | | SpelInjection.java:52:22:52:44 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | | SpelInjection.java:55:13:55:14 | in : InputStream | semmle.label | in : InputStream | | SpelInjection.java:55:21:55:25 | bytes [post update] : byte[] | semmle.label | bytes [post update] : byte[] | +| SpelInjection.java:56:20:56:42 | new String(...) : String | semmle.label | new String(...) : String | +| SpelInjection.java:56:31:56:35 | bytes : byte[] | semmle.label | bytes : byte[] | | SpelInjection.java:59:5:59:14 | expression | semmle.label | expression | | SpelInjection.java:63:22:63:44 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | | SpelInjection.java:66:13:66:14 | in : InputStream | semmle.label | in : InputStream | | SpelInjection.java:66:21:66:25 | bytes [post update] : byte[] | semmle.label | bytes [post update] : byte[] | +| SpelInjection.java:67:20:67:42 | new String(...) : String | semmle.label | new String(...) : String | +| SpelInjection.java:67:31:67:35 | bytes : byte[] | semmle.label | bytes : byte[] | | SpelInjection.java:70:5:70:14 | expression | semmle.label | expression | | SpelInjection.java:74:22:74:44 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | | SpelInjection.java:77:13:77:14 | in : InputStream | semmle.label | in : InputStream | | SpelInjection.java:77:21:77:25 | bytes [post update] : byte[] | semmle.label | bytes [post update] : byte[] | +| SpelInjection.java:78:20:78:42 | new String(...) : String | semmle.label | new String(...) : String | +| SpelInjection.java:78:31:78:35 | bytes : byte[] | semmle.label | bytes : byte[] | | SpelInjection.java:83:5:83:14 | expression | semmle.label | expression | #select | SpelInjection.java:23:5:23:14 | expression | SpelInjection.java:15:22:15:44 | getInputStream(...) : InputStream | SpelInjection.java:23:5:23:14 | expression | SpEL injection from $@. | SpelInjection.java:15:22:15:44 | getInputStream(...) | this user input | diff --git a/java/ql/test/query-tests/security/CWE-089/semmle/examples/SqlTaintedLocal.expected b/java/ql/test/query-tests/security/CWE-089/semmle/examples/SqlTaintedLocal.expected index 4ecdc32c204..f024571cc60 100644 --- a/java/ql/test/query-tests/security/CWE-089/semmle/examples/SqlTaintedLocal.expected +++ b/java/ql/test/query-tests/security/CWE-089/semmle/examples/SqlTaintedLocal.expected @@ -4,9 +4,14 @@ edges | Test.java:29:30:29:42 | args : String[] | Test.java:36:47:36:52 | query1 | | Test.java:29:30:29:42 | args : String[] | Test.java:42:57:42:62 | query2 | | Test.java:29:30:29:42 | args : String[] | Test.java:50:62:50:67 | query3 | +| Test.java:29:30:29:42 | args : String[] | Test.java:58:19:58:26 | category : String | | Test.java:29:30:29:42 | args : String[] | Test.java:62:47:62:61 | querySbToString | | Test.java:29:30:29:42 | args : String[] | Test.java:70:40:70:44 | query | | Test.java:29:30:29:42 | args : String[] | Test.java:78:46:78:50 | query | +| Test.java:58:4:58:10 | querySb [post update] : StringBuilder | Test.java:60:29:60:35 | querySb : StringBuilder | +| Test.java:58:19:58:26 | category : String | Test.java:58:4:58:10 | querySb [post update] : StringBuilder | +| Test.java:60:29:60:35 | querySb : StringBuilder | Test.java:60:29:60:46 | toString(...) : String | +| Test.java:60:29:60:46 | toString(...) : String | Test.java:62:47:62:61 | querySbToString | | Test.java:183:33:183:45 | args : String[] | Test.java:209:47:209:68 | queryWithUserTableName | | Test.java:213:26:213:38 | args : String[] | Test.java:214:11:214:14 | args : String[] | | Test.java:213:26:213:38 | args : String[] | Test.java:218:14:218:17 | args : String[] | @@ -20,6 +25,10 @@ nodes | Test.java:36:47:36:52 | query1 | semmle.label | query1 | | Test.java:42:57:42:62 | query2 | semmle.label | query2 | | Test.java:50:62:50:67 | query3 | semmle.label | query3 | +| Test.java:58:4:58:10 | querySb [post update] : StringBuilder | semmle.label | querySb [post update] : StringBuilder | +| Test.java:58:19:58:26 | category : String | semmle.label | category : String | +| Test.java:60:29:60:35 | querySb : StringBuilder | semmle.label | querySb : StringBuilder | +| Test.java:60:29:60:46 | toString(...) : String | semmle.label | toString(...) : String | | Test.java:62:47:62:61 | querySbToString | semmle.label | querySbToString | | Test.java:70:40:70:44 | query | semmle.label | query | | Test.java:78:46:78:50 | query | semmle.label | query | diff --git a/java/ql/test/query-tests/security/CWE-129/semmle/tests/ImproperValidationOfArrayConstructionLocal.expected b/java/ql/test/query-tests/security/CWE-129/semmle/tests/ImproperValidationOfArrayConstructionLocal.expected index 4778b39b05c..1ea08a5d4c3 100644 --- a/java/ql/test/query-tests/security/CWE-129/semmle/tests/ImproperValidationOfArrayConstructionLocal.expected +++ b/java/ql/test/query-tests/security/CWE-129/semmle/tests/ImproperValidationOfArrayConstructionLocal.expected @@ -1,8 +1,12 @@ edges -| Test.java:76:27:76:60 | getProperty(...) : String | Test.java:80:31:80:34 | size | -| Test.java:76:27:76:60 | getProperty(...) : String | Test.java:86:34:86:37 | size | +| Test.java:76:27:76:60 | getProperty(...) : String | Test.java:78:37:78:48 | userProperty : String | +| Test.java:78:37:78:48 | userProperty : String | Test.java:78:37:78:55 | trim(...) : String | +| Test.java:78:37:78:55 | trim(...) : String | Test.java:80:31:80:34 | size | +| Test.java:78:37:78:55 | trim(...) : String | Test.java:86:34:86:37 | size | nodes | Test.java:76:27:76:60 | getProperty(...) : String | semmle.label | getProperty(...) : String | +| Test.java:78:37:78:48 | userProperty : String | semmle.label | userProperty : String | +| Test.java:78:37:78:55 | trim(...) : String | semmle.label | trim(...) : String | | Test.java:80:31:80:34 | size | semmle.label | size | | Test.java:86:34:86:37 | size | semmle.label | size | #select diff --git a/java/ql/test/query-tests/security/CWE-129/semmle/tests/ImproperValidationOfArrayIndexLocal.expected b/java/ql/test/query-tests/security/CWE-129/semmle/tests/ImproperValidationOfArrayIndexLocal.expected index dcd18ff8cbc..4997e7d656d 100644 --- a/java/ql/test/query-tests/security/CWE-129/semmle/tests/ImproperValidationOfArrayIndexLocal.expected +++ b/java/ql/test/query-tests/security/CWE-129/semmle/tests/ImproperValidationOfArrayIndexLocal.expected @@ -1,7 +1,11 @@ edges -| Test.java:14:27:14:60 | getProperty(...) : String | Test.java:19:34:19:38 | index | +| Test.java:14:27:14:60 | getProperty(...) : String | Test.java:16:38:16:49 | userProperty : String | +| Test.java:16:38:16:49 | userProperty : String | Test.java:16:38:16:56 | trim(...) : String | +| Test.java:16:38:16:56 | trim(...) : String | Test.java:19:34:19:38 | index | nodes | Test.java:14:27:14:60 | getProperty(...) : String | semmle.label | getProperty(...) : String | +| Test.java:16:38:16:49 | userProperty : String | semmle.label | userProperty : String | +| Test.java:16:38:16:56 | trim(...) : String | semmle.label | trim(...) : String | | Test.java:19:34:19:38 | index | semmle.label | index | #select | Test.java:19:34:19:38 | index | Test.java:14:27:14:60 | getProperty(...) : String | Test.java:19:34:19:38 | index | $@ flows to here and is used as an index causing an ArrayIndexOutOfBoundsException. | Test.java:14:27:14:60 | getProperty(...) | User-provided value | diff --git a/java/ql/test/query-tests/security/CWE-190/semmle/tests/ArithmeticTaintedLocal.expected b/java/ql/test/query-tests/security/CWE-190/semmle/tests/ArithmeticTaintedLocal.expected index 637b605a06f..1f5541aa7c2 100644 --- a/java/ql/test/query-tests/security/CWE-190/semmle/tests/ArithmeticTaintedLocal.expected +++ b/java/ql/test/query-tests/security/CWE-190/semmle/tests/ArithmeticTaintedLocal.expected @@ -9,15 +9,19 @@ edges | ArithmeticTainted.java:18:40:18:56 | readerInputStream : InputStreamReader | ArithmeticTainted.java:18:21:18:57 | new BufferedReader(...) : BufferedReader | | ArithmeticTainted.java:19:26:19:39 | readerBuffered : BufferedReader | ArithmeticTainted.java:19:26:19:50 | readLine(...) : String | | ArithmeticTainted.java:19:26:19:39 | readerBuffered : BufferedReader | ArithmeticTainted.java:19:26:19:50 | readLine(...) : String | -| ArithmeticTainted.java:19:26:19:50 | readLine(...) : String | ArithmeticTainted.java:32:17:32:20 | data | -| ArithmeticTainted.java:19:26:19:50 | readLine(...) : String | ArithmeticTainted.java:40:17:40:20 | data | -| ArithmeticTainted.java:19:26:19:50 | readLine(...) : String | ArithmeticTainted.java:50:17:50:20 | data | -| ArithmeticTainted.java:19:26:19:50 | readLine(...) : String | ArithmeticTainted.java:64:20:64:23 | data : Number | -| ArithmeticTainted.java:19:26:19:50 | readLine(...) : String | ArithmeticTainted.java:95:37:95:40 | data | -| ArithmeticTainted.java:19:26:19:50 | readLine(...) : String | ArithmeticTainted.java:118:9:118:12 | data : Number | -| ArithmeticTainted.java:19:26:19:50 | readLine(...) : String | ArithmeticTainted.java:119:10:119:13 | data : Number | -| ArithmeticTainted.java:19:26:19:50 | readLine(...) : String | ArithmeticTainted.java:120:10:120:13 | data : Number | -| ArithmeticTainted.java:19:26:19:50 | readLine(...) : String | ArithmeticTainted.java:121:10:121:13 | data : Number | +| ArithmeticTainted.java:19:26:19:50 | readLine(...) : String | ArithmeticTainted.java:21:29:21:40 | stringNumber : String | +| ArithmeticTainted.java:19:26:19:50 | readLine(...) : String | ArithmeticTainted.java:21:29:21:40 | stringNumber : String | +| ArithmeticTainted.java:21:29:21:40 | stringNumber : String | ArithmeticTainted.java:21:29:21:47 | trim(...) : String | +| ArithmeticTainted.java:21:29:21:40 | stringNumber : String | ArithmeticTainted.java:21:29:21:47 | trim(...) : String | +| ArithmeticTainted.java:21:29:21:47 | trim(...) : String | ArithmeticTainted.java:32:17:32:20 | data | +| ArithmeticTainted.java:21:29:21:47 | trim(...) : String | ArithmeticTainted.java:40:17:40:20 | data | +| ArithmeticTainted.java:21:29:21:47 | trim(...) : String | ArithmeticTainted.java:50:17:50:20 | data | +| ArithmeticTainted.java:21:29:21:47 | trim(...) : String | ArithmeticTainted.java:64:20:64:23 | data : Number | +| ArithmeticTainted.java:21:29:21:47 | trim(...) : String | ArithmeticTainted.java:95:37:95:40 | data | +| ArithmeticTainted.java:21:29:21:47 | trim(...) : String | ArithmeticTainted.java:118:9:118:12 | data : Number | +| ArithmeticTainted.java:21:29:21:47 | trim(...) : String | ArithmeticTainted.java:119:10:119:13 | data : Number | +| ArithmeticTainted.java:21:29:21:47 | trim(...) : String | ArithmeticTainted.java:120:10:120:13 | data : Number | +| ArithmeticTainted.java:21:29:21:47 | trim(...) : String | ArithmeticTainted.java:121:10:121:13 | data : Number | | ArithmeticTainted.java:64:4:64:10 | tainted [post update] [dat] : Number | ArithmeticTainted.java:66:18:66:24 | tainted [dat] : Number | | ArithmeticTainted.java:64:20:64:23 | data : Number | ArithmeticTainted.java:64:4:64:10 | tainted [post update] [dat] : Number | | ArithmeticTainted.java:66:18:66:24 | tainted [dat] : Number | ArithmeticTainted.java:66:18:66:34 | getData(...) : Number | @@ -43,6 +47,10 @@ nodes | ArithmeticTainted.java:19:26:19:39 | readerBuffered : BufferedReader | semmle.label | readerBuffered : BufferedReader | | ArithmeticTainted.java:19:26:19:50 | readLine(...) : String | semmle.label | readLine(...) : String | | ArithmeticTainted.java:19:26:19:50 | readLine(...) : String | semmle.label | readLine(...) : String | +| ArithmeticTainted.java:21:29:21:40 | stringNumber : String | semmle.label | stringNumber : String | +| ArithmeticTainted.java:21:29:21:40 | stringNumber : String | semmle.label | stringNumber : String | +| ArithmeticTainted.java:21:29:21:47 | trim(...) : String | semmle.label | trim(...) : String | +| ArithmeticTainted.java:21:29:21:47 | trim(...) : String | semmle.label | trim(...) : String | | ArithmeticTainted.java:32:17:32:20 | data | semmle.label | data | | ArithmeticTainted.java:40:17:40:20 | data | semmle.label | data | | ArithmeticTainted.java:50:17:50:20 | data | semmle.label | data | diff --git a/java/ql/test/query-tests/security/CWE-681/semmle/tests/NumericCastTaintedLocal.expected b/java/ql/test/query-tests/security/CWE-681/semmle/tests/NumericCastTaintedLocal.expected index 90e1b421f97..c939746e67a 100644 --- a/java/ql/test/query-tests/security/CWE-681/semmle/tests/NumericCastTaintedLocal.expected +++ b/java/ql/test/query-tests/security/CWE-681/semmle/tests/NumericCastTaintedLocal.expected @@ -3,13 +3,17 @@ edges | Test.java:11:6:11:46 | new InputStreamReader(...) : InputStreamReader | Test.java:10:36:11:47 | new BufferedReader(...) : BufferedReader | | Test.java:11:28:11:36 | System.in : InputStream | Test.java:11:6:11:46 | new InputStreamReader(...) : InputStreamReader | | Test.java:12:26:12:39 | readerBuffered : BufferedReader | Test.java:12:26:12:50 | readLine(...) : String | -| Test.java:12:26:12:50 | readLine(...) : String | Test.java:21:22:21:25 | data | +| Test.java:12:26:12:50 | readLine(...) : String | Test.java:14:27:14:38 | stringNumber : String | +| Test.java:14:27:14:38 | stringNumber : String | Test.java:14:27:14:45 | trim(...) : String | +| Test.java:14:27:14:45 | trim(...) : String | Test.java:21:22:21:25 | data | nodes | Test.java:10:36:11:47 | new BufferedReader(...) : BufferedReader | semmle.label | new BufferedReader(...) : BufferedReader | | Test.java:11:6:11:46 | new InputStreamReader(...) : InputStreamReader | semmle.label | new InputStreamReader(...) : InputStreamReader | | Test.java:11:28:11:36 | System.in : InputStream | semmle.label | System.in : InputStream | | Test.java:12:26:12:39 | readerBuffered : BufferedReader | semmle.label | readerBuffered : BufferedReader | | Test.java:12:26:12:50 | readLine(...) : String | semmle.label | readLine(...) : String | +| Test.java:14:27:14:38 | stringNumber : String | semmle.label | stringNumber : String | +| Test.java:14:27:14:45 | trim(...) : String | semmle.label | trim(...) : String | | Test.java:21:22:21:25 | data | semmle.label | data | #select | Test.java:21:17:21:25 | (...)... | Test.java:11:28:11:36 | System.in : InputStream | Test.java:21:22:21:25 | data | $@ flows to here and is cast to a narrower type, potentially causing truncation. | Test.java:11:28:11:36 | System.in | User-provided value | From d178fe4e5dc5d8cbc51332b3276ba646c2ecf92e Mon Sep 17 00:00:00 2001 From: Benjamin Muskalla Date: Tue, 17 Aug 2021 14:56:25 +0200 Subject: [PATCH 123/741] Fix failing tests --- ...ientSuppliedIpUsedInSecurityCheck.expected | 5 +-- .../security/CWE-759/HashWithoutSalt.expected | 8 +++-- .../security/CWE-090/LdapInjection.expected | 8 +++-- .../query-tests/security/CWE-611/XXE.expected | 32 ++++++++++++++----- 4 files changed, 39 insertions(+), 14 deletions(-) diff --git a/java/ql/test/experimental/query-tests/security/CWE-348/ClientSuppliedIpUsedInSecurityCheck.expected b/java/ql/test/experimental/query-tests/security/CWE-348/ClientSuppliedIpUsedInSecurityCheck.expected index 160654628fe..2f2f135cb05 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-348/ClientSuppliedIpUsedInSecurityCheck.expected +++ b/java/ql/test/experimental/query-tests/security/CWE-348/ClientSuppliedIpUsedInSecurityCheck.expected @@ -1,8 +1,8 @@ edges | ClientSuppliedIpUsedInSecurityCheck.java:16:21:16:33 | getClientIP(...) : String | ClientSuppliedIpUsedInSecurityCheck.java:17:37:17:38 | ip | | ClientSuppliedIpUsedInSecurityCheck.java:24:21:24:33 | getClientIP(...) : String | ClientSuppliedIpUsedInSecurityCheck.java:25:33:25:34 | ip | -| ClientSuppliedIpUsedInSecurityCheck.java:43:27:43:62 | getHeader(...) : String | ClientSuppliedIpUsedInSecurityCheck.java:47:16:47:34 | split(...) : String[] | -| ClientSuppliedIpUsedInSecurityCheck.java:43:27:43:62 | getHeader(...) : String | ClientSuppliedIpUsedInSecurityCheck.java:47:16:47:37 | ...[...] : String | +| ClientSuppliedIpUsedInSecurityCheck.java:43:27:43:62 | getHeader(...) : String | ClientSuppliedIpUsedInSecurityCheck.java:47:16:47:23 | xfHeader : String | +| ClientSuppliedIpUsedInSecurityCheck.java:47:16:47:23 | xfHeader : String | ClientSuppliedIpUsedInSecurityCheck.java:47:16:47:34 | split(...) : String[] | | ClientSuppliedIpUsedInSecurityCheck.java:47:16:47:34 | split(...) : String[] | ClientSuppliedIpUsedInSecurityCheck.java:47:16:47:37 | ...[...] : String | | ClientSuppliedIpUsedInSecurityCheck.java:47:16:47:37 | ...[...] : String | ClientSuppliedIpUsedInSecurityCheck.java:16:21:16:33 | getClientIP(...) : String | | ClientSuppliedIpUsedInSecurityCheck.java:47:16:47:37 | ...[...] : String | ClientSuppliedIpUsedInSecurityCheck.java:24:21:24:33 | getClientIP(...) : String | @@ -12,6 +12,7 @@ nodes | ClientSuppliedIpUsedInSecurityCheck.java:24:21:24:33 | getClientIP(...) : String | semmle.label | getClientIP(...) : String | | ClientSuppliedIpUsedInSecurityCheck.java:25:33:25:34 | ip | semmle.label | ip | | ClientSuppliedIpUsedInSecurityCheck.java:43:27:43:62 | getHeader(...) : String | semmle.label | getHeader(...) : String | +| ClientSuppliedIpUsedInSecurityCheck.java:47:16:47:23 | xfHeader : String | semmle.label | xfHeader : String | | ClientSuppliedIpUsedInSecurityCheck.java:47:16:47:34 | split(...) : String[] | semmle.label | split(...) : String[] | | ClientSuppliedIpUsedInSecurityCheck.java:47:16:47:37 | ...[...] : String | semmle.label | ...[...] : String | #select diff --git a/java/ql/test/experimental/query-tests/security/CWE-759/HashWithoutSalt.expected b/java/ql/test/experimental/query-tests/security/CWE-759/HashWithoutSalt.expected index b7a5ea8ee4a..1e232a68d77 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-759/HashWithoutSalt.expected +++ b/java/ql/test/experimental/query-tests/security/CWE-759/HashWithoutSalt.expected @@ -1,16 +1,20 @@ edges | HashWithoutSalt.java:10:36:10:43 | password : String | HashWithoutSalt.java:10:36:10:54 | getBytes(...) | | HashWithoutSalt.java:25:13:25:20 | password : String | HashWithoutSalt.java:25:13:25:31 | getBytes(...) | -| HashWithoutSalt.java:93:22:93:29 | password : String | HashWithoutSalt.java:94:17:94:25 | passBytes | -| HashWithoutSalt.java:111:22:111:29 | password : String | HashWithoutSalt.java:112:18:112:26 | passBytes | +| HashWithoutSalt.java:93:22:93:29 | password : String | HashWithoutSalt.java:93:22:93:40 | getBytes(...) : byte[] | +| HashWithoutSalt.java:93:22:93:40 | getBytes(...) : byte[] | HashWithoutSalt.java:94:17:94:25 | passBytes | +| HashWithoutSalt.java:111:22:111:29 | password : String | HashWithoutSalt.java:111:22:111:40 | getBytes(...) : byte[] | +| HashWithoutSalt.java:111:22:111:40 | getBytes(...) : byte[] | HashWithoutSalt.java:112:18:112:26 | passBytes | nodes | HashWithoutSalt.java:10:36:10:43 | password : String | semmle.label | password : String | | HashWithoutSalt.java:10:36:10:54 | getBytes(...) | semmle.label | getBytes(...) | | HashWithoutSalt.java:25:13:25:20 | password : String | semmle.label | password : String | | HashWithoutSalt.java:25:13:25:31 | getBytes(...) | semmle.label | getBytes(...) | | HashWithoutSalt.java:93:22:93:29 | password : String | semmle.label | password : String | +| HashWithoutSalt.java:93:22:93:40 | getBytes(...) : byte[] | semmle.label | getBytes(...) : byte[] | | HashWithoutSalt.java:94:17:94:25 | passBytes | semmle.label | passBytes | | HashWithoutSalt.java:111:22:111:29 | password : String | semmle.label | password : String | +| HashWithoutSalt.java:111:22:111:40 | getBytes(...) : byte[] | semmle.label | getBytes(...) : byte[] | | HashWithoutSalt.java:112:18:112:26 | passBytes | semmle.label | passBytes | #select | HashWithoutSalt.java:10:36:10:54 | getBytes(...) | HashWithoutSalt.java:10:36:10:43 | password : String | HashWithoutSalt.java:10:36:10:54 | getBytes(...) | $@ is hashed without a salt. | HashWithoutSalt.java:10:36:10:43 | password : String | The password | diff --git a/java/ql/test/query-tests/security/CWE-090/LdapInjection.expected b/java/ql/test/query-tests/security/CWE-090/LdapInjection.expected index 34e6033320c..e5843fea508 100644 --- a/java/ql/test/query-tests/security/CWE-090/LdapInjection.expected +++ b/java/ql/test/query-tests/security/CWE-090/LdapInjection.expected @@ -28,7 +28,8 @@ edges | LdapInjection.java:147:76:147:109 | uBadSRDNAsync : String | LdapInjection.java:151:19:151:19 | s | | LdapInjection.java:155:31:155:70 | uBadFilterCreateNOT : String | LdapInjection.java:156:58:156:115 | createNOTFilter(...) | | LdapInjection.java:160:31:160:75 | uBadFilterCreateToString : String | LdapInjection.java:161:58:161:107 | toString(...) | -| LdapInjection.java:165:32:165:82 | uBadFilterCreateToStringBuffer : String | LdapInjection.java:168:58:168:69 | toString(...) | +| LdapInjection.java:165:32:165:82 | uBadFilterCreateToStringBuffer : String | LdapInjection.java:168:58:168:58 | b : StringBuilder | +| LdapInjection.java:168:58:168:58 | b : StringBuilder | LdapInjection.java:168:58:168:69 | toString(...) | | LdapInjection.java:172:32:172:78 | uBadSearchRequestDuplicate : String | LdapInjection.java:176:14:176:26 | duplicate(...) | | LdapInjection.java:180:32:180:80 | uBadROSearchRequestDuplicate : String | LdapInjection.java:184:14:184:26 | duplicate(...) | | LdapInjection.java:188:32:188:74 | uBadSearchRequestSetDN : String | LdapInjection.java:192:14:192:14 | s | @@ -49,7 +50,8 @@ edges | LdapInjection.java:276:31:276:68 | sBadLdapQueryBase : String | LdapInjection.java:277:12:277:66 | base(...) | | LdapInjection.java:281:31:281:71 | sBadLdapQueryComplex : String | LdapInjection.java:282:24:282:98 | is(...) | | LdapInjection.java:286:31:286:69 | sBadFilterToString : String | LdapInjection.java:287:18:287:83 | toString(...) | -| LdapInjection.java:291:31:291:67 | sBadFilterEncode : String | LdapInjection.java:294:18:294:29 | toString(...) | +| LdapInjection.java:291:31:291:67 | sBadFilterEncode : String | LdapInjection.java:294:18:294:18 | s : StringBuffer | +| LdapInjection.java:294:18:294:18 | s : StringBuffer | LdapInjection.java:294:18:294:29 | toString(...) | | LdapInjection.java:314:30:314:54 | aBad : String | LdapInjection.java:316:36:316:55 | ... + ... | | LdapInjection.java:314:57:314:83 | aBadDN : String | LdapInjection.java:316:14:316:33 | ... + ... | | LdapInjection.java:320:30:320:54 | aBad : String | LdapInjection.java:322:65:322:84 | ... + ... | @@ -113,6 +115,7 @@ nodes | LdapInjection.java:160:31:160:75 | uBadFilterCreateToString : String | semmle.label | uBadFilterCreateToString : String | | LdapInjection.java:161:58:161:107 | toString(...) | semmle.label | toString(...) | | LdapInjection.java:165:32:165:82 | uBadFilterCreateToStringBuffer : String | semmle.label | uBadFilterCreateToStringBuffer : String | +| LdapInjection.java:168:58:168:58 | b : StringBuilder | semmle.label | b : StringBuilder | | LdapInjection.java:168:58:168:69 | toString(...) | semmle.label | toString(...) | | LdapInjection.java:172:32:172:78 | uBadSearchRequestDuplicate : String | semmle.label | uBadSearchRequestDuplicate : String | | LdapInjection.java:176:14:176:26 | duplicate(...) | semmle.label | duplicate(...) | @@ -155,6 +158,7 @@ nodes | LdapInjection.java:286:31:286:69 | sBadFilterToString : String | semmle.label | sBadFilterToString : String | | LdapInjection.java:287:18:287:83 | toString(...) | semmle.label | toString(...) | | LdapInjection.java:291:31:291:67 | sBadFilterEncode : String | semmle.label | sBadFilterEncode : String | +| LdapInjection.java:294:18:294:18 | s : StringBuffer | semmle.label | s : StringBuffer | | LdapInjection.java:294:18:294:29 | toString(...) | semmle.label | toString(...) | | LdapInjection.java:314:30:314:54 | aBad : String | semmle.label | aBad : String | | LdapInjection.java:314:57:314:83 | aBadDN : String | semmle.label | aBadDN : String | diff --git a/java/ql/test/query-tests/security/CWE-611/XXE.expected b/java/ql/test/query-tests/security/CWE-611/XXE.expected index e2fcffee125..09d6fe323e4 100644 --- a/java/ql/test/query-tests/security/CWE-611/XXE.expected +++ b/java/ql/test/query-tests/security/CWE-611/XXE.expected @@ -18,29 +18,37 @@ edges | SchemaTests.java:45:56:45:76 | getInputStream(...) : InputStream | SchemaTests.java:45:39:45:77 | new StreamSource(...) | | SimpleXMLTests.java:24:63:24:83 | getInputStream(...) : InputStream | SimpleXMLTests.java:24:41:24:84 | new InputStreamReader(...) | | SimpleXMLTests.java:30:5:30:25 | getInputStream(...) : InputStream | SimpleXMLTests.java:30:32:30:32 | b [post update] : byte[] | -| SimpleXMLTests.java:30:32:30:32 | b [post update] : byte[] | SimpleXMLTests.java:31:41:31:53 | new String(...) | +| SimpleXMLTests.java:30:32:30:32 | b [post update] : byte[] | SimpleXMLTests.java:31:52:31:52 | b : byte[] | +| SimpleXMLTests.java:31:52:31:52 | b : byte[] | SimpleXMLTests.java:31:41:31:53 | new String(...) | | SimpleXMLTests.java:37:5:37:25 | getInputStream(...) : InputStream | SimpleXMLTests.java:37:32:37:32 | b [post update] : byte[] | -| SimpleXMLTests.java:37:32:37:32 | b [post update] : byte[] | SimpleXMLTests.java:38:41:38:53 | new String(...) | +| SimpleXMLTests.java:37:32:37:32 | b [post update] : byte[] | SimpleXMLTests.java:38:52:38:52 | b : byte[] | +| SimpleXMLTests.java:38:52:38:52 | b : byte[] | SimpleXMLTests.java:38:41:38:53 | new String(...) | | SimpleXMLTests.java:43:63:43:83 | getInputStream(...) : InputStream | SimpleXMLTests.java:43:41:43:84 | new InputStreamReader(...) | | SimpleXMLTests.java:68:59:68:79 | getInputStream(...) : InputStream | SimpleXMLTests.java:68:37:68:80 | new InputStreamReader(...) | | SimpleXMLTests.java:73:59:73:79 | getInputStream(...) : InputStream | SimpleXMLTests.java:73:37:73:80 | new InputStreamReader(...) | | SimpleXMLTests.java:78:48:78:68 | getInputStream(...) : InputStream | SimpleXMLTests.java:78:26:78:69 | new InputStreamReader(...) | | SimpleXMLTests.java:83:48:83:68 | getInputStream(...) : InputStream | SimpleXMLTests.java:83:26:83:69 | new InputStreamReader(...) | | SimpleXMLTests.java:89:5:89:25 | getInputStream(...) : InputStream | SimpleXMLTests.java:89:32:89:32 | b [post update] : byte[] | -| SimpleXMLTests.java:89:32:89:32 | b [post update] : byte[] | SimpleXMLTests.java:90:37:90:49 | new String(...) | +| SimpleXMLTests.java:89:32:89:32 | b [post update] : byte[] | SimpleXMLTests.java:90:48:90:48 | b : byte[] | +| SimpleXMLTests.java:90:48:90:48 | b : byte[] | SimpleXMLTests.java:90:37:90:49 | new String(...) | | SimpleXMLTests.java:96:5:96:25 | getInputStream(...) : InputStream | SimpleXMLTests.java:96:32:96:32 | b [post update] : byte[] | -| SimpleXMLTests.java:96:32:96:32 | b [post update] : byte[] | SimpleXMLTests.java:97:37:97:49 | new String(...) | +| SimpleXMLTests.java:96:32:96:32 | b [post update] : byte[] | SimpleXMLTests.java:97:48:97:48 | b : byte[] | +| SimpleXMLTests.java:97:48:97:48 | b : byte[] | SimpleXMLTests.java:97:37:97:49 | new String(...) | | SimpleXMLTests.java:103:5:103:25 | getInputStream(...) : InputStream | SimpleXMLTests.java:103:32:103:32 | b [post update] : byte[] | -| SimpleXMLTests.java:103:32:103:32 | b [post update] : byte[] | SimpleXMLTests.java:104:26:104:38 | new String(...) | +| SimpleXMLTests.java:103:32:103:32 | b [post update] : byte[] | SimpleXMLTests.java:104:37:104:37 | b : byte[] | +| SimpleXMLTests.java:104:37:104:37 | b : byte[] | SimpleXMLTests.java:104:26:104:38 | new String(...) | | SimpleXMLTests.java:110:5:110:25 | getInputStream(...) : InputStream | SimpleXMLTests.java:110:32:110:32 | b [post update] : byte[] | -| SimpleXMLTests.java:110:32:110:32 | b [post update] : byte[] | SimpleXMLTests.java:111:26:111:38 | new String(...) | +| SimpleXMLTests.java:110:32:110:32 | b [post update] : byte[] | SimpleXMLTests.java:111:37:111:37 | b : byte[] | +| SimpleXMLTests.java:111:37:111:37 | b : byte[] | SimpleXMLTests.java:111:26:111:38 | new String(...) | | SimpleXMLTests.java:119:44:119:64 | getInputStream(...) : InputStream | SimpleXMLTests.java:119:22:119:65 | new InputStreamReader(...) | | SimpleXMLTests.java:129:44:129:64 | getInputStream(...) : InputStream | SimpleXMLTests.java:129:22:129:65 | new InputStreamReader(...) | | SimpleXMLTests.java:139:44:139:64 | getInputStream(...) : InputStream | SimpleXMLTests.java:139:22:139:65 | new InputStreamReader(...) | | SimpleXMLTests.java:145:5:145:25 | getInputStream(...) : InputStream | SimpleXMLTests.java:145:32:145:32 | b [post update] : byte[] | -| SimpleXMLTests.java:145:32:145:32 | b [post update] : byte[] | SimpleXMLTests.java:146:22:146:34 | new String(...) | +| SimpleXMLTests.java:145:32:145:32 | b [post update] : byte[] | SimpleXMLTests.java:146:33:146:33 | b : byte[] | +| SimpleXMLTests.java:146:33:146:33 | b : byte[] | SimpleXMLTests.java:146:22:146:34 | new String(...) | | SimpleXMLTests.java:152:5:152:25 | getInputStream(...) : InputStream | SimpleXMLTests.java:152:32:152:32 | b [post update] : byte[] | -| SimpleXMLTests.java:152:32:152:32 | b [post update] : byte[] | SimpleXMLTests.java:153:22:153:34 | new String(...) | +| SimpleXMLTests.java:152:32:152:32 | b [post update] : byte[] | SimpleXMLTests.java:153:33:153:33 | b : byte[] | +| SimpleXMLTests.java:153:33:153:33 | b : byte[] | SimpleXMLTests.java:153:22:153:34 | new String(...) | | TransformerTests.java:20:44:20:64 | getInputStream(...) : InputStream | TransformerTests.java:20:27:20:65 | new StreamSource(...) | | TransformerTests.java:21:40:21:60 | getInputStream(...) : InputStream | TransformerTests.java:21:23:21:61 | new StreamSource(...) | | TransformerTests.java:71:44:71:64 | getInputStream(...) : InputStream | TransformerTests.java:71:27:71:65 | new StreamSource(...) | @@ -123,9 +131,11 @@ nodes | SimpleXMLTests.java:30:5:30:25 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | | SimpleXMLTests.java:30:32:30:32 | b [post update] : byte[] | semmle.label | b [post update] : byte[] | | SimpleXMLTests.java:31:41:31:53 | new String(...) | semmle.label | new String(...) | +| SimpleXMLTests.java:31:52:31:52 | b : byte[] | semmle.label | b : byte[] | | SimpleXMLTests.java:37:5:37:25 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | | SimpleXMLTests.java:37:32:37:32 | b [post update] : byte[] | semmle.label | b [post update] : byte[] | | SimpleXMLTests.java:38:41:38:53 | new String(...) | semmle.label | new String(...) | +| SimpleXMLTests.java:38:52:38:52 | b : byte[] | semmle.label | b : byte[] | | SimpleXMLTests.java:43:41:43:84 | new InputStreamReader(...) | semmle.label | new InputStreamReader(...) | | SimpleXMLTests.java:43:63:43:83 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | | SimpleXMLTests.java:48:37:48:57 | getInputStream(...) | semmle.label | getInputStream(...) | @@ -143,15 +153,19 @@ nodes | SimpleXMLTests.java:89:5:89:25 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | | SimpleXMLTests.java:89:32:89:32 | b [post update] : byte[] | semmle.label | b [post update] : byte[] | | SimpleXMLTests.java:90:37:90:49 | new String(...) | semmle.label | new String(...) | +| SimpleXMLTests.java:90:48:90:48 | b : byte[] | semmle.label | b : byte[] | | SimpleXMLTests.java:96:5:96:25 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | | SimpleXMLTests.java:96:32:96:32 | b [post update] : byte[] | semmle.label | b [post update] : byte[] | | SimpleXMLTests.java:97:37:97:49 | new String(...) | semmle.label | new String(...) | +| SimpleXMLTests.java:97:48:97:48 | b : byte[] | semmle.label | b : byte[] | | SimpleXMLTests.java:103:5:103:25 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | | SimpleXMLTests.java:103:32:103:32 | b [post update] : byte[] | semmle.label | b [post update] : byte[] | | SimpleXMLTests.java:104:26:104:38 | new String(...) | semmle.label | new String(...) | +| SimpleXMLTests.java:104:37:104:37 | b : byte[] | semmle.label | b : byte[] | | SimpleXMLTests.java:110:5:110:25 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | | SimpleXMLTests.java:110:32:110:32 | b [post update] : byte[] | semmle.label | b [post update] : byte[] | | SimpleXMLTests.java:111:26:111:38 | new String(...) | semmle.label | new String(...) | +| SimpleXMLTests.java:111:37:111:37 | b : byte[] | semmle.label | b : byte[] | | SimpleXMLTests.java:115:22:115:42 | getInputStream(...) | semmle.label | getInputStream(...) | | SimpleXMLTests.java:119:22:119:65 | new InputStreamReader(...) | semmle.label | new InputStreamReader(...) | | SimpleXMLTests.java:119:44:119:64 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | @@ -164,9 +178,11 @@ nodes | SimpleXMLTests.java:145:5:145:25 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | | SimpleXMLTests.java:145:32:145:32 | b [post update] : byte[] | semmle.label | b [post update] : byte[] | | SimpleXMLTests.java:146:22:146:34 | new String(...) | semmle.label | new String(...) | +| SimpleXMLTests.java:146:33:146:33 | b : byte[] | semmle.label | b : byte[] | | SimpleXMLTests.java:152:5:152:25 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | | SimpleXMLTests.java:152:32:152:32 | b [post update] : byte[] | semmle.label | b [post update] : byte[] | | SimpleXMLTests.java:153:22:153:34 | new String(...) | semmle.label | new String(...) | +| SimpleXMLTests.java:153:33:153:33 | b : byte[] | semmle.label | b : byte[] | | TransformerTests.java:20:27:20:65 | new StreamSource(...) | semmle.label | new StreamSource(...) | | TransformerTests.java:20:44:20:64 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | | TransformerTests.java:21:23:21:61 | new StreamSource(...) | semmle.label | new StreamSource(...) | From 7ddf7ff211c6b9f2e1ca41ee3812f8e58caf7277 Mon Sep 17 00:00:00 2001 From: Benjamin Muskalla Date: Wed, 18 Aug 2021 13:56:16 +0200 Subject: [PATCH 124/741] Track taint from concatenated string --- .../semmle/code/java/frameworks/Strings.qll | 1 + .../test/library-tests/dataflow/taint/B.java | 3 ++ .../dataflow/taint/test.expected | 45 ++++++++++--------- 3 files changed, 27 insertions(+), 22 deletions(-) diff --git a/java/ql/src/semmle/code/java/frameworks/Strings.qll b/java/ql/src/semmle/code/java/frameworks/Strings.qll index c90a649a6cd..a9597a689e6 100644 --- a/java/ql/src/semmle/code/java/frameworks/Strings.qll +++ b/java/ql/src/semmle/code/java/frameworks/Strings.qll @@ -9,6 +9,7 @@ private class StringSummaryCsv extends SummaryModelCsv { [ //`namespace; type; subtypes; name; signature; ext; input; output; kind` "java.lang;String;false;concat;(String);;Argument[0];ReturnValue;taint", + "java.lang;String;false;concat;(String);;Argument[-1];ReturnValue;taint", "java.lang;String;false;copyValueOf;;;Argument[0];ReturnValue;taint", "java.lang;String;false;endsWith;;;Argument[-1];ReturnValue;taint", "java.lang;String;false;format;(Locale,String,Object[]);;Argument[1];ReturnValue;taint", diff --git a/java/ql/test/library-tests/dataflow/taint/B.java b/java/ql/test/library-tests/dataflow/taint/B.java index 155832897eb..b3564c7898b 100644 --- a/java/ql/test/library-tests/dataflow/taint/B.java +++ b/java/ql/test/library-tests/dataflow/taint/B.java @@ -46,6 +46,9 @@ public class B { // tainted - tokenized string String token = new StringTokenizer(badEscape).nextToken(); sink(token); + // tainted - fluent concatenation + String fluentConcat = "".concat("str").concat(token).concat("bar"); + sink(fluentConcat); // not tainted String safe = notTainty(complex); diff --git a/java/ql/test/library-tests/dataflow/taint/test.expected b/java/ql/test/library-tests/dataflow/taint/test.expected index a0ab3b4358b..78e5dceb5f1 100644 --- a/java/ql/test/library-tests/dataflow/taint/test.expected +++ b/java/ql/test/library-tests/dataflow/taint/test.expected @@ -14,29 +14,30 @@ | B.java:15:21:15:27 | taint(...) | B.java:42:10:42:25 | valueOfSubstring | | B.java:15:21:15:27 | taint(...) | B.java:45:10:45:18 | badEscape | | B.java:15:21:15:27 | taint(...) | B.java:48:10:48:14 | token | -| B.java:15:21:15:27 | taint(...) | B.java:65:10:65:13 | cond | -| B.java:15:21:15:27 | taint(...) | B.java:68:10:68:14 | logic | -| B.java:15:21:15:27 | taint(...) | B.java:70:10:70:39 | endsWith(...) | -| B.java:15:21:15:27 | taint(...) | B.java:73:10:73:14 | logic | +| B.java:15:21:15:27 | taint(...) | B.java:51:10:51:21 | fluentConcat | +| B.java:15:21:15:27 | taint(...) | B.java:68:10:68:13 | cond | +| B.java:15:21:15:27 | taint(...) | B.java:71:10:71:14 | logic | +| B.java:15:21:15:27 | taint(...) | B.java:73:10:73:39 | endsWith(...) | | B.java:15:21:15:27 | taint(...) | B.java:76:10:76:14 | logic | -| B.java:15:21:15:27 | taint(...) | B.java:84:10:84:16 | trimmed | -| B.java:15:21:15:27 | taint(...) | B.java:86:10:86:14 | split | -| B.java:15:21:15:27 | taint(...) | B.java:88:10:88:14 | lower | -| B.java:15:21:15:27 | taint(...) | B.java:90:10:90:14 | upper | -| B.java:15:21:15:27 | taint(...) | B.java:92:10:92:14 | bytes | -| B.java:15:21:15:27 | taint(...) | B.java:94:10:94:17 | toString | -| B.java:15:21:15:27 | taint(...) | B.java:96:10:96:13 | subs | -| B.java:15:21:15:27 | taint(...) | B.java:98:10:98:13 | repl | -| B.java:15:21:15:27 | taint(...) | B.java:100:10:100:16 | replAll | -| B.java:15:21:15:27 | taint(...) | B.java:102:10:102:18 | replFirst | -| B.java:15:21:15:27 | taint(...) | B.java:115:12:115:25 | serializedData | -| B.java:15:21:15:27 | taint(...) | B.java:127:12:127:27 | deserializedData | -| B.java:15:21:15:27 | taint(...) | B.java:136:10:136:21 | taintedArray | -| B.java:15:21:15:27 | taint(...) | B.java:138:10:138:22 | taintedArray2 | -| B.java:15:21:15:27 | taint(...) | B.java:140:10:140:22 | taintedArray3 | -| B.java:15:21:15:27 | taint(...) | B.java:143:10:143:44 | toURL(...) | -| B.java:15:21:15:27 | taint(...) | B.java:146:10:146:37 | toPath(...) | -| B.java:15:21:15:27 | taint(...) | B.java:149:10:149:46 | toFile(...) | +| B.java:15:21:15:27 | taint(...) | B.java:79:10:79:14 | logic | +| B.java:15:21:15:27 | taint(...) | B.java:87:10:87:16 | trimmed | +| B.java:15:21:15:27 | taint(...) | B.java:89:10:89:14 | split | +| B.java:15:21:15:27 | taint(...) | B.java:91:10:91:14 | lower | +| B.java:15:21:15:27 | taint(...) | B.java:93:10:93:14 | upper | +| B.java:15:21:15:27 | taint(...) | B.java:95:10:95:14 | bytes | +| B.java:15:21:15:27 | taint(...) | B.java:97:10:97:17 | toString | +| B.java:15:21:15:27 | taint(...) | B.java:99:10:99:13 | subs | +| B.java:15:21:15:27 | taint(...) | B.java:101:10:101:13 | repl | +| B.java:15:21:15:27 | taint(...) | B.java:103:10:103:16 | replAll | +| B.java:15:21:15:27 | taint(...) | B.java:105:10:105:18 | replFirst | +| B.java:15:21:15:27 | taint(...) | B.java:118:12:118:25 | serializedData | +| B.java:15:21:15:27 | taint(...) | B.java:130:12:130:27 | deserializedData | +| B.java:15:21:15:27 | taint(...) | B.java:139:10:139:21 | taintedArray | +| B.java:15:21:15:27 | taint(...) | B.java:141:10:141:22 | taintedArray2 | +| B.java:15:21:15:27 | taint(...) | B.java:143:10:143:22 | taintedArray3 | +| B.java:15:21:15:27 | taint(...) | B.java:146:10:146:44 | toURL(...) | +| B.java:15:21:15:27 | taint(...) | B.java:149:10:149:37 | toPath(...) | +| B.java:15:21:15:27 | taint(...) | B.java:152:10:152:46 | toFile(...) | | CharSeq.java:7:26:7:32 | taint(...) | CharSeq.java:8:12:8:14 | seq | | CharSeq.java:7:26:7:32 | taint(...) | CharSeq.java:11:12:11:21 | seqFromSeq | | MethodFlow.java:7:22:7:28 | taint(...) | MethodFlow.java:8:10:8:16 | tainted | From 190bf90bc898f3111cd7331aec48b37a886da1f4 Mon Sep 17 00:00:00 2001 From: Benjamin Muskalla Date: Mon, 23 Aug 2021 15:18:24 +0200 Subject: [PATCH 125/741] Replace stringbuilder step with model --- .../code/java/dataflow/internal/TaintTrackingUtil.qll | 11 ----------- java/ql/src/semmle/code/java/frameworks/Strings.qll | 5 ++++- .../security/CWE-601/SpringUrlRedirect.expected | 10 ++++++++-- 3 files changed, 12 insertions(+), 14 deletions(-) diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/TaintTrackingUtil.qll b/java/ql/lib/semmle/code/java/dataflow/internal/TaintTrackingUtil.qll index 8de8fc02bcb..55e22b8a164 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/TaintTrackingUtil.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/TaintTrackingUtil.qll @@ -147,8 +147,6 @@ private predicate localAdditionalTaintExprStep(Expr src, Expr sink) { or comparisonStep(src, sink) or - stringBuilderStep(src, sink) - or serializationStep(src, sink) or formatStep(src, sink) @@ -392,15 +390,6 @@ private predicate comparisonStep(Expr tracked, Expr sink) { ) } -/** Flow through a `StringBuilder`. */ -private predicate stringBuilderStep(Expr tracked, Expr sink) { - exists(StringBuilderVar sbvar, MethodAccess input, int arg | - input = sbvar.getAnInput(arg) and - tracked = input.getArgument(arg) and - sink = sbvar.getToStringCall() - ) -} - /** Flow through data serialization. */ private predicate serializationStep(Expr tracked, Expr sink) { exists(ObjectOutputStreamVar v, VariableAssign def | diff --git a/java/ql/src/semmle/code/java/frameworks/Strings.qll b/java/ql/src/semmle/code/java/frameworks/Strings.qll index a9597a689e6..9774b8f8df6 100644 --- a/java/ql/src/semmle/code/java/frameworks/Strings.qll +++ b/java/ql/src/semmle/code/java/frameworks/Strings.qll @@ -43,9 +43,12 @@ private class StringSummaryCsv extends SummaryModelCsv { "java.io;StringWriter;true;write;;;Argument[0];Argument[-1];taint", "java.lang;AbstractStringBuilder;true;AbstractStringBuilder;(String);;Argument[0];Argument[-1];taint", "java.lang;AbstractStringBuilder;true;append;;;Argument[0];Argument[-1];taint", - "java.lang;AbstractStringBuilder;true;append;;;Argument[-1];ReturnValue;taint", + "java.lang;AbstractStringBuilder;true;append;;;Argument[-1];ReturnValue;value", + "java.lang;AbstractStringBuilder;true;append;;;Argument[0];ReturnValue;taint", "java.lang;AbstractStringBuilder;true;insert;;;Argument[1];Argument[-1];taint", "java.lang;AbstractStringBuilder;true;insert;;;Argument[-1];ReturnValue;taint", + "java.lang;AbstractStringBuilder;true;replace;;;Argument[2];ReturnValue;taint", + "java.lang;AbstractStringBuilder;true;replace;;;Argument[2];Argument[-1];taint", "java.lang;AbstractStringBuilder;true;toString;;;Argument[-1];ReturnValue;taint", "java.lang;StringBuffer;true;StringBuffer;(CharSequence);;Argument[0];Argument[-1];taint", "java.lang;StringBuffer;true;StringBuffer;(String);;Argument[0];Argument[-1];taint", diff --git a/java/ql/test/experimental/query-tests/security/CWE-601/SpringUrlRedirect.expected b/java/ql/test/experimental/query-tests/security/CWE-601/SpringUrlRedirect.expected index 61213583d8d..44403c667d4 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-601/SpringUrlRedirect.expected +++ b/java/ql/test/experimental/query-tests/security/CWE-601/SpringUrlRedirect.expected @@ -5,8 +5,11 @@ edges | SpringUrlRedirect.java:36:30:36:47 | redirectUrl : String | SpringUrlRedirect.java:37:47:37:57 | redirectUrl | | SpringUrlRedirect.java:41:24:41:41 | redirectUrl : String | SpringUrlRedirect.java:44:29:44:39 | redirectUrl | | SpringUrlRedirect.java:49:24:49:41 | redirectUrl : String | SpringUrlRedirect.java:52:30:52:40 | redirectUrl | -| SpringUrlRedirect.java:57:24:57:41 | redirectUrl : String | SpringUrlRedirect.java:58:30:58:66 | format(...) | -| SpringUrlRedirect.java:62:24:62:41 | redirectUrl : String | SpringUrlRedirect.java:63:30:63:76 | format(...) | +| SpringUrlRedirect.java:57:24:57:41 | redirectUrl : String | SpringUrlRedirect.java:58:55:58:65 | redirectUrl : String | +| SpringUrlRedirect.java:58:30:58:66 | new ..[] { .. } [[]] : String | SpringUrlRedirect.java:58:30:58:66 | format(...) | +| SpringUrlRedirect.java:58:55:58:65 | redirectUrl : String | SpringUrlRedirect.java:58:30:58:66 | new ..[] { .. } [[]] : String | +| SpringUrlRedirect.java:62:24:62:41 | redirectUrl : String | SpringUrlRedirect.java:63:44:63:68 | ... + ... : String | +| SpringUrlRedirect.java:63:44:63:68 | ... + ... : String | SpringUrlRedirect.java:63:30:63:76 | format(...) | | SpringUrlRedirect.java:89:38:89:55 | redirectUrl : String | SpringUrlRedirect.java:91:38:91:48 | redirectUrl : String | | SpringUrlRedirect.java:91:38:91:48 | redirectUrl : String | SpringUrlRedirect.java:91:27:91:49 | create(...) | | SpringUrlRedirect.java:96:39:96:56 | redirectUrl : String | SpringUrlRedirect.java:98:44:98:54 | redirectUrl : String | @@ -45,8 +48,11 @@ nodes | SpringUrlRedirect.java:52:30:52:40 | redirectUrl | semmle.label | redirectUrl | | SpringUrlRedirect.java:57:24:57:41 | redirectUrl : String | semmle.label | redirectUrl : String | | SpringUrlRedirect.java:58:30:58:66 | format(...) | semmle.label | format(...) | +| SpringUrlRedirect.java:58:30:58:66 | new ..[] { .. } [[]] : String | semmle.label | new ..[] { .. } [[]] : String | +| SpringUrlRedirect.java:58:55:58:65 | redirectUrl : String | semmle.label | redirectUrl : String | | SpringUrlRedirect.java:62:24:62:41 | redirectUrl : String | semmle.label | redirectUrl : String | | SpringUrlRedirect.java:63:30:63:76 | format(...) | semmle.label | format(...) | +| SpringUrlRedirect.java:63:44:63:68 | ... + ... : String | semmle.label | ... + ... : String | | SpringUrlRedirect.java:89:38:89:55 | redirectUrl : String | semmle.label | redirectUrl : String | | SpringUrlRedirect.java:91:27:91:49 | create(...) | semmle.label | create(...) | | SpringUrlRedirect.java:91:38:91:48 | redirectUrl : String | semmle.label | redirectUrl : String | From c1d34d7d6f48076133a99937abe21ec013c4f15c Mon Sep 17 00:00:00 2001 From: Benjamin Muskalla Date: Wed, 1 Sep 2021 15:55:39 +0200 Subject: [PATCH 126/741] Move Strings to lib --- .../semmle/code/java/frameworks/Objects.qll | 4 +++- .../semmle/code/java/frameworks/Strings.qll | 0 .../semmle/code/java/frameworks/Objects.qll | 19 ------------------- 3 files changed, 3 insertions(+), 20 deletions(-) rename java/ql/{src => lib}/semmle/code/java/frameworks/Strings.qll (100%) delete mode 100644 java/ql/src/semmle/code/java/frameworks/Objects.qll diff --git a/java/ql/lib/semmle/code/java/frameworks/Objects.qll b/java/ql/lib/semmle/code/java/frameworks/Objects.qll index acb0aa6e1cf..60d9d3afac5 100644 --- a/java/ql/lib/semmle/code/java/frameworks/Objects.qll +++ b/java/ql/lib/semmle/code/java/frameworks/Objects.qll @@ -9,8 +9,10 @@ private class ObjectsSummaryCsv extends SummaryModelCsv { [ //`namespace; type; subtypes; name; signature; ext; input; output; kind` "java.util;Objects;false;requireNonNull;;;Argument[0];ReturnValue;value", - "java.util;Objects;false;requireNonNullElse;;;Argument[0..1];ReturnValue;value", + "java.util;Objects;false;requireNonNullElse;;;Argument[0];ReturnValue;value", + "java.util;Objects;false;requireNonNullElse;;;Argument[1];ReturnValue;value", "java.util;Objects;false;requireNonNullElseGet;;;Argument[0];ReturnValue;value", + "java.util;Objects;false;requireNonNullElseGet;;;Argument[1];ReturnValue;value", "java.util;Objects;false;toString;;;Argument[1];ReturnValue;value" ] } diff --git a/java/ql/src/semmle/code/java/frameworks/Strings.qll b/java/ql/lib/semmle/code/java/frameworks/Strings.qll similarity index 100% rename from java/ql/src/semmle/code/java/frameworks/Strings.qll rename to java/ql/lib/semmle/code/java/frameworks/Strings.qll diff --git a/java/ql/src/semmle/code/java/frameworks/Objects.qll b/java/ql/src/semmle/code/java/frameworks/Objects.qll deleted file mode 100644 index 60d9d3afac5..00000000000 --- a/java/ql/src/semmle/code/java/frameworks/Objects.qll +++ /dev/null @@ -1,19 +0,0 @@ -/** Definitions of taint steps in Objects class of the JDK */ - -import java -private import semmle.code.java.dataflow.ExternalFlow - -private class ObjectsSummaryCsv extends SummaryModelCsv { - override predicate row(string row) { - row = - [ - //`namespace; type; subtypes; name; signature; ext; input; output; kind` - "java.util;Objects;false;requireNonNull;;;Argument[0];ReturnValue;value", - "java.util;Objects;false;requireNonNullElse;;;Argument[0];ReturnValue;value", - "java.util;Objects;false;requireNonNullElse;;;Argument[1];ReturnValue;value", - "java.util;Objects;false;requireNonNullElseGet;;;Argument[0];ReturnValue;value", - "java.util;Objects;false;requireNonNullElseGet;;;Argument[1];ReturnValue;value", - "java.util;Objects;false;toString;;;Argument[1];ReturnValue;value" - ] - } -} From ee8958ba038a3baf9513c9ac9b73626f2b9038a7 Mon Sep 17 00:00:00 2001 From: Benjamin Muskalla Date: Wed, 1 Sep 2021 15:55:59 +0200 Subject: [PATCH 127/741] Fix nodes for local taint test --- .../security/CWE-089/semmle/examples/SqlTaintedLocal.expected | 1 - 1 file changed, 1 deletion(-) diff --git a/java/ql/test/query-tests/security/CWE-089/semmle/examples/SqlTaintedLocal.expected b/java/ql/test/query-tests/security/CWE-089/semmle/examples/SqlTaintedLocal.expected index f024571cc60..bdf11aa3f57 100644 --- a/java/ql/test/query-tests/security/CWE-089/semmle/examples/SqlTaintedLocal.expected +++ b/java/ql/test/query-tests/security/CWE-089/semmle/examples/SqlTaintedLocal.expected @@ -5,7 +5,6 @@ edges | Test.java:29:30:29:42 | args : String[] | Test.java:42:57:42:62 | query2 | | Test.java:29:30:29:42 | args : String[] | Test.java:50:62:50:67 | query3 | | Test.java:29:30:29:42 | args : String[] | Test.java:58:19:58:26 | category : String | -| Test.java:29:30:29:42 | args : String[] | Test.java:62:47:62:61 | querySbToString | | Test.java:29:30:29:42 | args : String[] | Test.java:70:40:70:44 | query | | Test.java:29:30:29:42 | args : String[] | Test.java:78:46:78:50 | query | | Test.java:58:4:58:10 | querySb [post update] : StringBuilder | Test.java:60:29:60:35 | querySb : StringBuilder | From 136c8b5192f43ea226c08a4771e4f3598f3ceb14 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Wed, 25 Aug 2021 11:02:45 +0200 Subject: [PATCH 128/741] Data flow: Improve `callMayFlowThroughFwd` join order Before: ``` [2021-08-25 09:56:29] (1395s) Tuple counts for DataFlowImpl2::Stage3::callMayFlowThroughFwd#ff/2@111fb3: 15495496 ~5% {5} r1 = SCAN DataFlowImpl2::Stage3::fwdFlowOutFromArg#fffff#reorder_0_2_4_1_3 OUTPUT In.3, In.4, In.2 'config', In.0 'call', In.1 1450611958 ~6335% {5} r2 = JOIN r1 WITH DataFlowImpl2::Stage3::fwdFlow#fffff_03412#join_rhs ON FIRST 3 OUTPUT Lhs.3 'call', Lhs.4, Lhs.2 'config', Rhs.3, Rhs.4 7043648 ~20415% {2} r3 = JOIN r2 WITH DataFlowImpl2::Stage3::fwdFlowIsEntered#fffff#reorder_0_3_4_1_2 ON FIRST 5 OUTPUT Lhs.0 'call', Lhs.2 'config' return r3 ``` After: ``` [2021-08-25 10:57:02] (2652s) Tuple counts for DataFlowImpl2::Stage3::callMayFlowThroughFwd#ff/2@d3e27b: 15495496 ~0% {6} r1 = SCAN DataFlowImpl2::Stage3::fwdFlowOutFromArg#fffff#reorder_0_2_4_1_3 OUTPUT In.0 'call', In.1, In.2 'config', In.3, In.4, In.2 'config' 9236888 ~22% {7} r2 = JOIN r1 WITH DataFlowImpl2::Stage3::fwdFlowIsEntered#fffff#reorder_0_3_4_1_2 ON FIRST 3 OUTPUT Lhs.3, Rhs.3, Rhs.4, Lhs.4, Lhs.5, Lhs.0 'call', Lhs.2 'config' 7043648 ~20415% {2} r3 = JOIN r2 WITH DataFlowImpl2::Stage3::fwdFlow#fffff ON FIRST 5 OUTPUT Lhs.5 'call', Lhs.6 'config' return r3 ``` --- .../csharp/dataflow/internal/DataFlowImpl.qll | 21 ++++++++----------- 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl.qll index f2c742a52ae..bd6ca5e996b 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl.qll @@ -1170,11 +1170,10 @@ private module Stage2 { pragma[nomagic] private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) { exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap | - fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap, - pragma[only_bind_into](config)) and + fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp), + pragma[only_bind_out](ap), pragma[only_bind_out](config)) and fwdFlowOutFromArg(call, out, argAp0, ap, config) and - fwdFlowIsEntered(call, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), argAp0, - pragma[only_bind_into](config)) + fwdFlowIsEntered(call, cc, argAp, argAp0, config) ) } @@ -1858,11 +1857,10 @@ private module Stage3 { pragma[nomagic] private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) { exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap | - fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap, - pragma[only_bind_into](config)) and + fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp), + pragma[only_bind_out](ap), pragma[only_bind_out](config)) and fwdFlowOutFromArg(call, out, argAp0, ap, config) and - fwdFlowIsEntered(call, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), argAp0, - pragma[only_bind_into](config)) + fwdFlowIsEntered(call, cc, argAp, argAp0, config) ) } @@ -2616,11 +2614,10 @@ private module Stage4 { pragma[nomagic] private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) { exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap | - fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap, - pragma[only_bind_into](config)) and + fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp), + pragma[only_bind_out](ap), pragma[only_bind_out](config)) and fwdFlowOutFromArg(call, out, argAp0, ap, config) and - fwdFlowIsEntered(call, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), argAp0, - pragma[only_bind_into](config)) + fwdFlowIsEntered(call, cc, argAp, argAp0, config) ) } From c3ecae503ba85620442e0635e14b83a758e3f63e Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Wed, 1 Sep 2021 19:57:44 +0200 Subject: [PATCH 129/741] Data flow: Sync files --- .../cpp/dataflow/internal/DataFlowImpl.qll | 50 +++++++++---------- .../cpp/dataflow/internal/DataFlowImpl2.qll | 50 +++++++++---------- .../cpp/dataflow/internal/DataFlowImpl3.qll | 50 +++++++++---------- .../cpp/dataflow/internal/DataFlowImpl4.qll | 50 +++++++++---------- .../dataflow/internal/DataFlowImplCommon.qll | 22 ++++++-- .../dataflow/internal/DataFlowImplLocal.qll | 50 +++++++++---------- .../cpp/ir/dataflow/internal/DataFlowImpl.qll | 50 +++++++++---------- .../ir/dataflow/internal/DataFlowImpl2.qll | 50 +++++++++---------- .../ir/dataflow/internal/DataFlowImpl3.qll | 50 +++++++++---------- .../ir/dataflow/internal/DataFlowImpl4.qll | 50 +++++++++---------- .../dataflow/internal/DataFlowImplCommon.qll | 22 ++++++-- .../dataflow/internal/DataFlowImpl2.qll | 50 +++++++++---------- .../dataflow/internal/DataFlowImpl3.qll | 50 +++++++++---------- .../dataflow/internal/DataFlowImpl4.qll | 50 +++++++++---------- .../dataflow/internal/DataFlowImpl5.qll | 50 +++++++++---------- .../java/dataflow/internal/DataFlowImpl.qll | 50 +++++++++---------- .../java/dataflow/internal/DataFlowImpl2.qll | 50 +++++++++---------- .../java/dataflow/internal/DataFlowImpl3.qll | 50 +++++++++---------- .../java/dataflow/internal/DataFlowImpl4.qll | 50 +++++++++---------- .../java/dataflow/internal/DataFlowImpl5.qll | 50 +++++++++---------- .../java/dataflow/internal/DataFlowImpl6.qll | 50 +++++++++---------- .../dataflow/internal/DataFlowImplCommon.qll | 22 ++++++-- .../DataFlowImplForSerializability.qll | 50 +++++++++---------- .../dataflow/new/internal/DataFlowImpl.qll | 50 +++++++++---------- .../dataflow/new/internal/DataFlowImpl2.qll | 50 +++++++++---------- .../dataflow/new/internal/DataFlowImpl3.qll | 50 +++++++++---------- .../dataflow/new/internal/DataFlowImpl4.qll | 50 +++++++++---------- .../new/internal/DataFlowImplCommon.qll | 22 ++++++-- 28 files changed, 648 insertions(+), 640 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl.qll index 5c2dbb30084..bd6ca5e996b 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl.qll @@ -923,28 +923,29 @@ private module Stage2 { ApOption apSome(Ap ap) { result = TBooleanSome(ap) } - class Cc = boolean; + class Cc = CallContext; - class CcCall extends Cc { - CcCall() { this = true } + class CcCall = CallContextCall; - /** Holds if this call context may be `call`. */ - predicate matchesCall(DataFlowCall call) { any() } - } + class CcNoCall = CallContextNoCall; - class CcNoCall extends Cc { - CcNoCall() { this = false } - } - - Cc ccNone() { result = false } + Cc ccNone() { result instanceof CallContextAny } private class LocalCc = Unit; bindingset[call, c, outercc] - private CcCall getCallContextCall(DataFlowCall call, DataFlowCallable c, Cc outercc) { any() } + private CcCall getCallContextCall(DataFlowCall call, DataFlowCallable c, Cc outercc) { + checkCallContextCall(outercc, call, c) and + if recordDataFlowCallSiteDispatch(call, c) + then result = TSpecificCall(call) + else result = TSomeCall() + } bindingset[call, c, innercc] - private CcNoCall getCallContextReturn(DataFlowCallable c, DataFlowCall call, Cc innercc) { any() } + private CcNoCall getCallContextReturn(DataFlowCallable c, DataFlowCall call, Cc innercc) { + checkCallContextReturn(innercc, c, call) and + if reducedViableImplInReturn(c, call) then result = TReturn(c, call) else result = ccNone() + } bindingset[node, cc, config] private LocalCc getLocalCc(NodeEx node, Cc cc, Configuration config) { any() } @@ -1169,11 +1170,10 @@ private module Stage2 { pragma[nomagic] private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) { exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap | - fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap, - pragma[only_bind_into](config)) and + fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp), + pragma[only_bind_out](ap), pragma[only_bind_out](config)) and fwdFlowOutFromArg(call, out, argAp0, ap, config) and - fwdFlowIsEntered(call, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), argAp0, - pragma[only_bind_into](config)) + fwdFlowIsEntered(call, cc, argAp, argAp0, config) ) } @@ -1857,11 +1857,10 @@ private module Stage3 { pragma[nomagic] private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) { exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap | - fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap, - pragma[only_bind_into](config)) and + fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp), + pragma[only_bind_out](ap), pragma[only_bind_out](config)) and fwdFlowOutFromArg(call, out, argAp0, ap, config) and - fwdFlowIsEntered(call, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), argAp0, - pragma[only_bind_into](config)) + fwdFlowIsEntered(call, cc, argAp, argAp0, config) ) } @@ -2117,7 +2116,7 @@ private module Stage3 { private predicate flowCandSummaryCtx(NodeEx node, AccessPathFront argApf, Configuration config) { exists(AccessPathFront apf | Stage3::revFlow(node, true, _, apf, config) and - Stage3::fwdFlow(node, true, TAccessPathFrontSome(argApf), apf, config) + Stage3::fwdFlow(node, any(Stage3::CcCall ccc), TAccessPathFrontSome(argApf), apf, config) ) } @@ -2615,11 +2614,10 @@ private module Stage4 { pragma[nomagic] private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) { exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap | - fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap, - pragma[only_bind_into](config)) and + fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp), + pragma[only_bind_out](ap), pragma[only_bind_out](config)) and fwdFlowOutFromArg(call, out, argAp0, ap, config) and - fwdFlowIsEntered(call, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), argAp0, - pragma[only_bind_into](config)) + fwdFlowIsEntered(call, cc, argAp, argAp0, config) ) } diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl2.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl2.qll index 5c2dbb30084..bd6ca5e996b 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl2.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl2.qll @@ -923,28 +923,29 @@ private module Stage2 { ApOption apSome(Ap ap) { result = TBooleanSome(ap) } - class Cc = boolean; + class Cc = CallContext; - class CcCall extends Cc { - CcCall() { this = true } + class CcCall = CallContextCall; - /** Holds if this call context may be `call`. */ - predicate matchesCall(DataFlowCall call) { any() } - } + class CcNoCall = CallContextNoCall; - class CcNoCall extends Cc { - CcNoCall() { this = false } - } - - Cc ccNone() { result = false } + Cc ccNone() { result instanceof CallContextAny } private class LocalCc = Unit; bindingset[call, c, outercc] - private CcCall getCallContextCall(DataFlowCall call, DataFlowCallable c, Cc outercc) { any() } + private CcCall getCallContextCall(DataFlowCall call, DataFlowCallable c, Cc outercc) { + checkCallContextCall(outercc, call, c) and + if recordDataFlowCallSiteDispatch(call, c) + then result = TSpecificCall(call) + else result = TSomeCall() + } bindingset[call, c, innercc] - private CcNoCall getCallContextReturn(DataFlowCallable c, DataFlowCall call, Cc innercc) { any() } + private CcNoCall getCallContextReturn(DataFlowCallable c, DataFlowCall call, Cc innercc) { + checkCallContextReturn(innercc, c, call) and + if reducedViableImplInReturn(c, call) then result = TReturn(c, call) else result = ccNone() + } bindingset[node, cc, config] private LocalCc getLocalCc(NodeEx node, Cc cc, Configuration config) { any() } @@ -1169,11 +1170,10 @@ private module Stage2 { pragma[nomagic] private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) { exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap | - fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap, - pragma[only_bind_into](config)) and + fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp), + pragma[only_bind_out](ap), pragma[only_bind_out](config)) and fwdFlowOutFromArg(call, out, argAp0, ap, config) and - fwdFlowIsEntered(call, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), argAp0, - pragma[only_bind_into](config)) + fwdFlowIsEntered(call, cc, argAp, argAp0, config) ) } @@ -1857,11 +1857,10 @@ private module Stage3 { pragma[nomagic] private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) { exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap | - fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap, - pragma[only_bind_into](config)) and + fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp), + pragma[only_bind_out](ap), pragma[only_bind_out](config)) and fwdFlowOutFromArg(call, out, argAp0, ap, config) and - fwdFlowIsEntered(call, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), argAp0, - pragma[only_bind_into](config)) + fwdFlowIsEntered(call, cc, argAp, argAp0, config) ) } @@ -2117,7 +2116,7 @@ private module Stage3 { private predicate flowCandSummaryCtx(NodeEx node, AccessPathFront argApf, Configuration config) { exists(AccessPathFront apf | Stage3::revFlow(node, true, _, apf, config) and - Stage3::fwdFlow(node, true, TAccessPathFrontSome(argApf), apf, config) + Stage3::fwdFlow(node, any(Stage3::CcCall ccc), TAccessPathFrontSome(argApf), apf, config) ) } @@ -2615,11 +2614,10 @@ private module Stage4 { pragma[nomagic] private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) { exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap | - fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap, - pragma[only_bind_into](config)) and + fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp), + pragma[only_bind_out](ap), pragma[only_bind_out](config)) and fwdFlowOutFromArg(call, out, argAp0, ap, config) and - fwdFlowIsEntered(call, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), argAp0, - pragma[only_bind_into](config)) + fwdFlowIsEntered(call, cc, argAp, argAp0, config) ) } diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl3.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl3.qll index 5c2dbb30084..bd6ca5e996b 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl3.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl3.qll @@ -923,28 +923,29 @@ private module Stage2 { ApOption apSome(Ap ap) { result = TBooleanSome(ap) } - class Cc = boolean; + class Cc = CallContext; - class CcCall extends Cc { - CcCall() { this = true } + class CcCall = CallContextCall; - /** Holds if this call context may be `call`. */ - predicate matchesCall(DataFlowCall call) { any() } - } + class CcNoCall = CallContextNoCall; - class CcNoCall extends Cc { - CcNoCall() { this = false } - } - - Cc ccNone() { result = false } + Cc ccNone() { result instanceof CallContextAny } private class LocalCc = Unit; bindingset[call, c, outercc] - private CcCall getCallContextCall(DataFlowCall call, DataFlowCallable c, Cc outercc) { any() } + private CcCall getCallContextCall(DataFlowCall call, DataFlowCallable c, Cc outercc) { + checkCallContextCall(outercc, call, c) and + if recordDataFlowCallSiteDispatch(call, c) + then result = TSpecificCall(call) + else result = TSomeCall() + } bindingset[call, c, innercc] - private CcNoCall getCallContextReturn(DataFlowCallable c, DataFlowCall call, Cc innercc) { any() } + private CcNoCall getCallContextReturn(DataFlowCallable c, DataFlowCall call, Cc innercc) { + checkCallContextReturn(innercc, c, call) and + if reducedViableImplInReturn(c, call) then result = TReturn(c, call) else result = ccNone() + } bindingset[node, cc, config] private LocalCc getLocalCc(NodeEx node, Cc cc, Configuration config) { any() } @@ -1169,11 +1170,10 @@ private module Stage2 { pragma[nomagic] private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) { exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap | - fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap, - pragma[only_bind_into](config)) and + fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp), + pragma[only_bind_out](ap), pragma[only_bind_out](config)) and fwdFlowOutFromArg(call, out, argAp0, ap, config) and - fwdFlowIsEntered(call, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), argAp0, - pragma[only_bind_into](config)) + fwdFlowIsEntered(call, cc, argAp, argAp0, config) ) } @@ -1857,11 +1857,10 @@ private module Stage3 { pragma[nomagic] private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) { exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap | - fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap, - pragma[only_bind_into](config)) and + fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp), + pragma[only_bind_out](ap), pragma[only_bind_out](config)) and fwdFlowOutFromArg(call, out, argAp0, ap, config) and - fwdFlowIsEntered(call, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), argAp0, - pragma[only_bind_into](config)) + fwdFlowIsEntered(call, cc, argAp, argAp0, config) ) } @@ -2117,7 +2116,7 @@ private module Stage3 { private predicate flowCandSummaryCtx(NodeEx node, AccessPathFront argApf, Configuration config) { exists(AccessPathFront apf | Stage3::revFlow(node, true, _, apf, config) and - Stage3::fwdFlow(node, true, TAccessPathFrontSome(argApf), apf, config) + Stage3::fwdFlow(node, any(Stage3::CcCall ccc), TAccessPathFrontSome(argApf), apf, config) ) } @@ -2615,11 +2614,10 @@ private module Stage4 { pragma[nomagic] private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) { exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap | - fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap, - pragma[only_bind_into](config)) and + fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp), + pragma[only_bind_out](ap), pragma[only_bind_out](config)) and fwdFlowOutFromArg(call, out, argAp0, ap, config) and - fwdFlowIsEntered(call, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), argAp0, - pragma[only_bind_into](config)) + fwdFlowIsEntered(call, cc, argAp, argAp0, config) ) } diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl4.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl4.qll index 5c2dbb30084..bd6ca5e996b 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl4.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl4.qll @@ -923,28 +923,29 @@ private module Stage2 { ApOption apSome(Ap ap) { result = TBooleanSome(ap) } - class Cc = boolean; + class Cc = CallContext; - class CcCall extends Cc { - CcCall() { this = true } + class CcCall = CallContextCall; - /** Holds if this call context may be `call`. */ - predicate matchesCall(DataFlowCall call) { any() } - } + class CcNoCall = CallContextNoCall; - class CcNoCall extends Cc { - CcNoCall() { this = false } - } - - Cc ccNone() { result = false } + Cc ccNone() { result instanceof CallContextAny } private class LocalCc = Unit; bindingset[call, c, outercc] - private CcCall getCallContextCall(DataFlowCall call, DataFlowCallable c, Cc outercc) { any() } + private CcCall getCallContextCall(DataFlowCall call, DataFlowCallable c, Cc outercc) { + checkCallContextCall(outercc, call, c) and + if recordDataFlowCallSiteDispatch(call, c) + then result = TSpecificCall(call) + else result = TSomeCall() + } bindingset[call, c, innercc] - private CcNoCall getCallContextReturn(DataFlowCallable c, DataFlowCall call, Cc innercc) { any() } + private CcNoCall getCallContextReturn(DataFlowCallable c, DataFlowCall call, Cc innercc) { + checkCallContextReturn(innercc, c, call) and + if reducedViableImplInReturn(c, call) then result = TReturn(c, call) else result = ccNone() + } bindingset[node, cc, config] private LocalCc getLocalCc(NodeEx node, Cc cc, Configuration config) { any() } @@ -1169,11 +1170,10 @@ private module Stage2 { pragma[nomagic] private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) { exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap | - fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap, - pragma[only_bind_into](config)) and + fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp), + pragma[only_bind_out](ap), pragma[only_bind_out](config)) and fwdFlowOutFromArg(call, out, argAp0, ap, config) and - fwdFlowIsEntered(call, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), argAp0, - pragma[only_bind_into](config)) + fwdFlowIsEntered(call, cc, argAp, argAp0, config) ) } @@ -1857,11 +1857,10 @@ private module Stage3 { pragma[nomagic] private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) { exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap | - fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap, - pragma[only_bind_into](config)) and + fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp), + pragma[only_bind_out](ap), pragma[only_bind_out](config)) and fwdFlowOutFromArg(call, out, argAp0, ap, config) and - fwdFlowIsEntered(call, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), argAp0, - pragma[only_bind_into](config)) + fwdFlowIsEntered(call, cc, argAp, argAp0, config) ) } @@ -2117,7 +2116,7 @@ private module Stage3 { private predicate flowCandSummaryCtx(NodeEx node, AccessPathFront argApf, Configuration config) { exists(AccessPathFront apf | Stage3::revFlow(node, true, _, apf, config) and - Stage3::fwdFlow(node, true, TAccessPathFrontSome(argApf), apf, config) + Stage3::fwdFlow(node, any(Stage3::CcCall ccc), TAccessPathFrontSome(argApf), apf, config) ) } @@ -2615,11 +2614,10 @@ private module Stage4 { pragma[nomagic] private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) { exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap | - fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap, - pragma[only_bind_into](config)) and + fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp), + pragma[only_bind_out](ap), pragma[only_bind_out](config)) and fwdFlowOutFromArg(call, out, argAp0, ap, config) and - fwdFlowIsEntered(call, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), argAp0, - pragma[only_bind_into](config)) + fwdFlowIsEntered(call, cc, argAp, argAp0, config) ) } diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplCommon.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplCommon.qll index 728f7b56c42..f588a25a176 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplCommon.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplCommon.qll @@ -786,13 +786,18 @@ private module Cached { } /** - * Holds if the call context `call` either improves virtual dispatch in - * `callable` or if it allows us to prune unreachable nodes in `callable`. + * Holds if the call context `call` improves virtual dispatch in `callable`. */ cached - predicate recordDataFlowCallSite(DataFlowCall call, DataFlowCallable callable) { + predicate recordDataFlowCallSiteDispatch(DataFlowCall call, DataFlowCallable callable) { reducedViableImplInCallContext(_, callable, call) - or + } + + /** + * Holds if the call context `call` allows us to prune unreachable nodes in `callable`. + */ + cached + predicate recordDataFlowCallSiteUnreachable(DataFlowCall call, DataFlowCallable callable) { exists(Node n | getNodeEnclosingCallable(n) = callable | isUnreachableInCallCached(n, call)) } @@ -846,6 +851,15 @@ private module Cached { TAccessPathFrontSome(AccessPathFront apf) } +/** + * Holds if the call context `call` either improves virtual dispatch in + * `callable` or if it allows us to prune unreachable nodes in `callable`. + */ +predicate recordDataFlowCallSite(DataFlowCall call, DataFlowCallable callable) { + recordDataFlowCallSiteDispatch(call, callable) or + recordDataFlowCallSiteUnreachable(call, callable) +} + /** * A `Node` at which a cast can occur such that the type should be checked. */ diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplLocal.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplLocal.qll index 5c2dbb30084..bd6ca5e996b 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplLocal.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplLocal.qll @@ -923,28 +923,29 @@ private module Stage2 { ApOption apSome(Ap ap) { result = TBooleanSome(ap) } - class Cc = boolean; + class Cc = CallContext; - class CcCall extends Cc { - CcCall() { this = true } + class CcCall = CallContextCall; - /** Holds if this call context may be `call`. */ - predicate matchesCall(DataFlowCall call) { any() } - } + class CcNoCall = CallContextNoCall; - class CcNoCall extends Cc { - CcNoCall() { this = false } - } - - Cc ccNone() { result = false } + Cc ccNone() { result instanceof CallContextAny } private class LocalCc = Unit; bindingset[call, c, outercc] - private CcCall getCallContextCall(DataFlowCall call, DataFlowCallable c, Cc outercc) { any() } + private CcCall getCallContextCall(DataFlowCall call, DataFlowCallable c, Cc outercc) { + checkCallContextCall(outercc, call, c) and + if recordDataFlowCallSiteDispatch(call, c) + then result = TSpecificCall(call) + else result = TSomeCall() + } bindingset[call, c, innercc] - private CcNoCall getCallContextReturn(DataFlowCallable c, DataFlowCall call, Cc innercc) { any() } + private CcNoCall getCallContextReturn(DataFlowCallable c, DataFlowCall call, Cc innercc) { + checkCallContextReturn(innercc, c, call) and + if reducedViableImplInReturn(c, call) then result = TReturn(c, call) else result = ccNone() + } bindingset[node, cc, config] private LocalCc getLocalCc(NodeEx node, Cc cc, Configuration config) { any() } @@ -1169,11 +1170,10 @@ private module Stage2 { pragma[nomagic] private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) { exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap | - fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap, - pragma[only_bind_into](config)) and + fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp), + pragma[only_bind_out](ap), pragma[only_bind_out](config)) and fwdFlowOutFromArg(call, out, argAp0, ap, config) and - fwdFlowIsEntered(call, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), argAp0, - pragma[only_bind_into](config)) + fwdFlowIsEntered(call, cc, argAp, argAp0, config) ) } @@ -1857,11 +1857,10 @@ private module Stage3 { pragma[nomagic] private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) { exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap | - fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap, - pragma[only_bind_into](config)) and + fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp), + pragma[only_bind_out](ap), pragma[only_bind_out](config)) and fwdFlowOutFromArg(call, out, argAp0, ap, config) and - fwdFlowIsEntered(call, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), argAp0, - pragma[only_bind_into](config)) + fwdFlowIsEntered(call, cc, argAp, argAp0, config) ) } @@ -2117,7 +2116,7 @@ private module Stage3 { private predicate flowCandSummaryCtx(NodeEx node, AccessPathFront argApf, Configuration config) { exists(AccessPathFront apf | Stage3::revFlow(node, true, _, apf, config) and - Stage3::fwdFlow(node, true, TAccessPathFrontSome(argApf), apf, config) + Stage3::fwdFlow(node, any(Stage3::CcCall ccc), TAccessPathFrontSome(argApf), apf, config) ) } @@ -2615,11 +2614,10 @@ private module Stage4 { pragma[nomagic] private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) { exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap | - fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap, - pragma[only_bind_into](config)) and + fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp), + pragma[only_bind_out](ap), pragma[only_bind_out](config)) and fwdFlowOutFromArg(call, out, argAp0, ap, config) and - fwdFlowIsEntered(call, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), argAp0, - pragma[only_bind_into](config)) + fwdFlowIsEntered(call, cc, argAp, argAp0, config) ) } diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl.qll index 5c2dbb30084..bd6ca5e996b 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl.qll @@ -923,28 +923,29 @@ private module Stage2 { ApOption apSome(Ap ap) { result = TBooleanSome(ap) } - class Cc = boolean; + class Cc = CallContext; - class CcCall extends Cc { - CcCall() { this = true } + class CcCall = CallContextCall; - /** Holds if this call context may be `call`. */ - predicate matchesCall(DataFlowCall call) { any() } - } + class CcNoCall = CallContextNoCall; - class CcNoCall extends Cc { - CcNoCall() { this = false } - } - - Cc ccNone() { result = false } + Cc ccNone() { result instanceof CallContextAny } private class LocalCc = Unit; bindingset[call, c, outercc] - private CcCall getCallContextCall(DataFlowCall call, DataFlowCallable c, Cc outercc) { any() } + private CcCall getCallContextCall(DataFlowCall call, DataFlowCallable c, Cc outercc) { + checkCallContextCall(outercc, call, c) and + if recordDataFlowCallSiteDispatch(call, c) + then result = TSpecificCall(call) + else result = TSomeCall() + } bindingset[call, c, innercc] - private CcNoCall getCallContextReturn(DataFlowCallable c, DataFlowCall call, Cc innercc) { any() } + private CcNoCall getCallContextReturn(DataFlowCallable c, DataFlowCall call, Cc innercc) { + checkCallContextReturn(innercc, c, call) and + if reducedViableImplInReturn(c, call) then result = TReturn(c, call) else result = ccNone() + } bindingset[node, cc, config] private LocalCc getLocalCc(NodeEx node, Cc cc, Configuration config) { any() } @@ -1169,11 +1170,10 @@ private module Stage2 { pragma[nomagic] private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) { exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap | - fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap, - pragma[only_bind_into](config)) and + fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp), + pragma[only_bind_out](ap), pragma[only_bind_out](config)) and fwdFlowOutFromArg(call, out, argAp0, ap, config) and - fwdFlowIsEntered(call, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), argAp0, - pragma[only_bind_into](config)) + fwdFlowIsEntered(call, cc, argAp, argAp0, config) ) } @@ -1857,11 +1857,10 @@ private module Stage3 { pragma[nomagic] private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) { exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap | - fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap, - pragma[only_bind_into](config)) and + fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp), + pragma[only_bind_out](ap), pragma[only_bind_out](config)) and fwdFlowOutFromArg(call, out, argAp0, ap, config) and - fwdFlowIsEntered(call, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), argAp0, - pragma[only_bind_into](config)) + fwdFlowIsEntered(call, cc, argAp, argAp0, config) ) } @@ -2117,7 +2116,7 @@ private module Stage3 { private predicate flowCandSummaryCtx(NodeEx node, AccessPathFront argApf, Configuration config) { exists(AccessPathFront apf | Stage3::revFlow(node, true, _, apf, config) and - Stage3::fwdFlow(node, true, TAccessPathFrontSome(argApf), apf, config) + Stage3::fwdFlow(node, any(Stage3::CcCall ccc), TAccessPathFrontSome(argApf), apf, config) ) } @@ -2615,11 +2614,10 @@ private module Stage4 { pragma[nomagic] private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) { exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap | - fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap, - pragma[only_bind_into](config)) and + fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp), + pragma[only_bind_out](ap), pragma[only_bind_out](config)) and fwdFlowOutFromArg(call, out, argAp0, ap, config) and - fwdFlowIsEntered(call, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), argAp0, - pragma[only_bind_into](config)) + fwdFlowIsEntered(call, cc, argAp, argAp0, config) ) } diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl2.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl2.qll index 5c2dbb30084..bd6ca5e996b 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl2.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl2.qll @@ -923,28 +923,29 @@ private module Stage2 { ApOption apSome(Ap ap) { result = TBooleanSome(ap) } - class Cc = boolean; + class Cc = CallContext; - class CcCall extends Cc { - CcCall() { this = true } + class CcCall = CallContextCall; - /** Holds if this call context may be `call`. */ - predicate matchesCall(DataFlowCall call) { any() } - } + class CcNoCall = CallContextNoCall; - class CcNoCall extends Cc { - CcNoCall() { this = false } - } - - Cc ccNone() { result = false } + Cc ccNone() { result instanceof CallContextAny } private class LocalCc = Unit; bindingset[call, c, outercc] - private CcCall getCallContextCall(DataFlowCall call, DataFlowCallable c, Cc outercc) { any() } + private CcCall getCallContextCall(DataFlowCall call, DataFlowCallable c, Cc outercc) { + checkCallContextCall(outercc, call, c) and + if recordDataFlowCallSiteDispatch(call, c) + then result = TSpecificCall(call) + else result = TSomeCall() + } bindingset[call, c, innercc] - private CcNoCall getCallContextReturn(DataFlowCallable c, DataFlowCall call, Cc innercc) { any() } + private CcNoCall getCallContextReturn(DataFlowCallable c, DataFlowCall call, Cc innercc) { + checkCallContextReturn(innercc, c, call) and + if reducedViableImplInReturn(c, call) then result = TReturn(c, call) else result = ccNone() + } bindingset[node, cc, config] private LocalCc getLocalCc(NodeEx node, Cc cc, Configuration config) { any() } @@ -1169,11 +1170,10 @@ private module Stage2 { pragma[nomagic] private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) { exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap | - fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap, - pragma[only_bind_into](config)) and + fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp), + pragma[only_bind_out](ap), pragma[only_bind_out](config)) and fwdFlowOutFromArg(call, out, argAp0, ap, config) and - fwdFlowIsEntered(call, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), argAp0, - pragma[only_bind_into](config)) + fwdFlowIsEntered(call, cc, argAp, argAp0, config) ) } @@ -1857,11 +1857,10 @@ private module Stage3 { pragma[nomagic] private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) { exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap | - fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap, - pragma[only_bind_into](config)) and + fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp), + pragma[only_bind_out](ap), pragma[only_bind_out](config)) and fwdFlowOutFromArg(call, out, argAp0, ap, config) and - fwdFlowIsEntered(call, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), argAp0, - pragma[only_bind_into](config)) + fwdFlowIsEntered(call, cc, argAp, argAp0, config) ) } @@ -2117,7 +2116,7 @@ private module Stage3 { private predicate flowCandSummaryCtx(NodeEx node, AccessPathFront argApf, Configuration config) { exists(AccessPathFront apf | Stage3::revFlow(node, true, _, apf, config) and - Stage3::fwdFlow(node, true, TAccessPathFrontSome(argApf), apf, config) + Stage3::fwdFlow(node, any(Stage3::CcCall ccc), TAccessPathFrontSome(argApf), apf, config) ) } @@ -2615,11 +2614,10 @@ private module Stage4 { pragma[nomagic] private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) { exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap | - fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap, - pragma[only_bind_into](config)) and + fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp), + pragma[only_bind_out](ap), pragma[only_bind_out](config)) and fwdFlowOutFromArg(call, out, argAp0, ap, config) and - fwdFlowIsEntered(call, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), argAp0, - pragma[only_bind_into](config)) + fwdFlowIsEntered(call, cc, argAp, argAp0, config) ) } diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl3.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl3.qll index 5c2dbb30084..bd6ca5e996b 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl3.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl3.qll @@ -923,28 +923,29 @@ private module Stage2 { ApOption apSome(Ap ap) { result = TBooleanSome(ap) } - class Cc = boolean; + class Cc = CallContext; - class CcCall extends Cc { - CcCall() { this = true } + class CcCall = CallContextCall; - /** Holds if this call context may be `call`. */ - predicate matchesCall(DataFlowCall call) { any() } - } + class CcNoCall = CallContextNoCall; - class CcNoCall extends Cc { - CcNoCall() { this = false } - } - - Cc ccNone() { result = false } + Cc ccNone() { result instanceof CallContextAny } private class LocalCc = Unit; bindingset[call, c, outercc] - private CcCall getCallContextCall(DataFlowCall call, DataFlowCallable c, Cc outercc) { any() } + private CcCall getCallContextCall(DataFlowCall call, DataFlowCallable c, Cc outercc) { + checkCallContextCall(outercc, call, c) and + if recordDataFlowCallSiteDispatch(call, c) + then result = TSpecificCall(call) + else result = TSomeCall() + } bindingset[call, c, innercc] - private CcNoCall getCallContextReturn(DataFlowCallable c, DataFlowCall call, Cc innercc) { any() } + private CcNoCall getCallContextReturn(DataFlowCallable c, DataFlowCall call, Cc innercc) { + checkCallContextReturn(innercc, c, call) and + if reducedViableImplInReturn(c, call) then result = TReturn(c, call) else result = ccNone() + } bindingset[node, cc, config] private LocalCc getLocalCc(NodeEx node, Cc cc, Configuration config) { any() } @@ -1169,11 +1170,10 @@ private module Stage2 { pragma[nomagic] private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) { exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap | - fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap, - pragma[only_bind_into](config)) and + fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp), + pragma[only_bind_out](ap), pragma[only_bind_out](config)) and fwdFlowOutFromArg(call, out, argAp0, ap, config) and - fwdFlowIsEntered(call, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), argAp0, - pragma[only_bind_into](config)) + fwdFlowIsEntered(call, cc, argAp, argAp0, config) ) } @@ -1857,11 +1857,10 @@ private module Stage3 { pragma[nomagic] private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) { exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap | - fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap, - pragma[only_bind_into](config)) and + fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp), + pragma[only_bind_out](ap), pragma[only_bind_out](config)) and fwdFlowOutFromArg(call, out, argAp0, ap, config) and - fwdFlowIsEntered(call, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), argAp0, - pragma[only_bind_into](config)) + fwdFlowIsEntered(call, cc, argAp, argAp0, config) ) } @@ -2117,7 +2116,7 @@ private module Stage3 { private predicate flowCandSummaryCtx(NodeEx node, AccessPathFront argApf, Configuration config) { exists(AccessPathFront apf | Stage3::revFlow(node, true, _, apf, config) and - Stage3::fwdFlow(node, true, TAccessPathFrontSome(argApf), apf, config) + Stage3::fwdFlow(node, any(Stage3::CcCall ccc), TAccessPathFrontSome(argApf), apf, config) ) } @@ -2615,11 +2614,10 @@ private module Stage4 { pragma[nomagic] private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) { exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap | - fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap, - pragma[only_bind_into](config)) and + fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp), + pragma[only_bind_out](ap), pragma[only_bind_out](config)) and fwdFlowOutFromArg(call, out, argAp0, ap, config) and - fwdFlowIsEntered(call, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), argAp0, - pragma[only_bind_into](config)) + fwdFlowIsEntered(call, cc, argAp, argAp0, config) ) } diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl4.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl4.qll index 5c2dbb30084..bd6ca5e996b 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl4.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl4.qll @@ -923,28 +923,29 @@ private module Stage2 { ApOption apSome(Ap ap) { result = TBooleanSome(ap) } - class Cc = boolean; + class Cc = CallContext; - class CcCall extends Cc { - CcCall() { this = true } + class CcCall = CallContextCall; - /** Holds if this call context may be `call`. */ - predicate matchesCall(DataFlowCall call) { any() } - } + class CcNoCall = CallContextNoCall; - class CcNoCall extends Cc { - CcNoCall() { this = false } - } - - Cc ccNone() { result = false } + Cc ccNone() { result instanceof CallContextAny } private class LocalCc = Unit; bindingset[call, c, outercc] - private CcCall getCallContextCall(DataFlowCall call, DataFlowCallable c, Cc outercc) { any() } + private CcCall getCallContextCall(DataFlowCall call, DataFlowCallable c, Cc outercc) { + checkCallContextCall(outercc, call, c) and + if recordDataFlowCallSiteDispatch(call, c) + then result = TSpecificCall(call) + else result = TSomeCall() + } bindingset[call, c, innercc] - private CcNoCall getCallContextReturn(DataFlowCallable c, DataFlowCall call, Cc innercc) { any() } + private CcNoCall getCallContextReturn(DataFlowCallable c, DataFlowCall call, Cc innercc) { + checkCallContextReturn(innercc, c, call) and + if reducedViableImplInReturn(c, call) then result = TReturn(c, call) else result = ccNone() + } bindingset[node, cc, config] private LocalCc getLocalCc(NodeEx node, Cc cc, Configuration config) { any() } @@ -1169,11 +1170,10 @@ private module Stage2 { pragma[nomagic] private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) { exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap | - fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap, - pragma[only_bind_into](config)) and + fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp), + pragma[only_bind_out](ap), pragma[only_bind_out](config)) and fwdFlowOutFromArg(call, out, argAp0, ap, config) and - fwdFlowIsEntered(call, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), argAp0, - pragma[only_bind_into](config)) + fwdFlowIsEntered(call, cc, argAp, argAp0, config) ) } @@ -1857,11 +1857,10 @@ private module Stage3 { pragma[nomagic] private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) { exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap | - fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap, - pragma[only_bind_into](config)) and + fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp), + pragma[only_bind_out](ap), pragma[only_bind_out](config)) and fwdFlowOutFromArg(call, out, argAp0, ap, config) and - fwdFlowIsEntered(call, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), argAp0, - pragma[only_bind_into](config)) + fwdFlowIsEntered(call, cc, argAp, argAp0, config) ) } @@ -2117,7 +2116,7 @@ private module Stage3 { private predicate flowCandSummaryCtx(NodeEx node, AccessPathFront argApf, Configuration config) { exists(AccessPathFront apf | Stage3::revFlow(node, true, _, apf, config) and - Stage3::fwdFlow(node, true, TAccessPathFrontSome(argApf), apf, config) + Stage3::fwdFlow(node, any(Stage3::CcCall ccc), TAccessPathFrontSome(argApf), apf, config) ) } @@ -2615,11 +2614,10 @@ private module Stage4 { pragma[nomagic] private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) { exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap | - fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap, - pragma[only_bind_into](config)) and + fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp), + pragma[only_bind_out](ap), pragma[only_bind_out](config)) and fwdFlowOutFromArg(call, out, argAp0, ap, config) and - fwdFlowIsEntered(call, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), argAp0, - pragma[only_bind_into](config)) + fwdFlowIsEntered(call, cc, argAp, argAp0, config) ) } diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImplCommon.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImplCommon.qll index 728f7b56c42..f588a25a176 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImplCommon.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImplCommon.qll @@ -786,13 +786,18 @@ private module Cached { } /** - * Holds if the call context `call` either improves virtual dispatch in - * `callable` or if it allows us to prune unreachable nodes in `callable`. + * Holds if the call context `call` improves virtual dispatch in `callable`. */ cached - predicate recordDataFlowCallSite(DataFlowCall call, DataFlowCallable callable) { + predicate recordDataFlowCallSiteDispatch(DataFlowCall call, DataFlowCallable callable) { reducedViableImplInCallContext(_, callable, call) - or + } + + /** + * Holds if the call context `call` allows us to prune unreachable nodes in `callable`. + */ + cached + predicate recordDataFlowCallSiteUnreachable(DataFlowCall call, DataFlowCallable callable) { exists(Node n | getNodeEnclosingCallable(n) = callable | isUnreachableInCallCached(n, call)) } @@ -846,6 +851,15 @@ private module Cached { TAccessPathFrontSome(AccessPathFront apf) } +/** + * Holds if the call context `call` either improves virtual dispatch in + * `callable` or if it allows us to prune unreachable nodes in `callable`. + */ +predicate recordDataFlowCallSite(DataFlowCall call, DataFlowCallable callable) { + recordDataFlowCallSiteDispatch(call, callable) or + recordDataFlowCallSiteUnreachable(call, callable) +} + /** * A `Node` at which a cast can occur such that the type should be checked. */ diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl2.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl2.qll index 5c2dbb30084..bd6ca5e996b 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl2.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl2.qll @@ -923,28 +923,29 @@ private module Stage2 { ApOption apSome(Ap ap) { result = TBooleanSome(ap) } - class Cc = boolean; + class Cc = CallContext; - class CcCall extends Cc { - CcCall() { this = true } + class CcCall = CallContextCall; - /** Holds if this call context may be `call`. */ - predicate matchesCall(DataFlowCall call) { any() } - } + class CcNoCall = CallContextNoCall; - class CcNoCall extends Cc { - CcNoCall() { this = false } - } - - Cc ccNone() { result = false } + Cc ccNone() { result instanceof CallContextAny } private class LocalCc = Unit; bindingset[call, c, outercc] - private CcCall getCallContextCall(DataFlowCall call, DataFlowCallable c, Cc outercc) { any() } + private CcCall getCallContextCall(DataFlowCall call, DataFlowCallable c, Cc outercc) { + checkCallContextCall(outercc, call, c) and + if recordDataFlowCallSiteDispatch(call, c) + then result = TSpecificCall(call) + else result = TSomeCall() + } bindingset[call, c, innercc] - private CcNoCall getCallContextReturn(DataFlowCallable c, DataFlowCall call, Cc innercc) { any() } + private CcNoCall getCallContextReturn(DataFlowCallable c, DataFlowCall call, Cc innercc) { + checkCallContextReturn(innercc, c, call) and + if reducedViableImplInReturn(c, call) then result = TReturn(c, call) else result = ccNone() + } bindingset[node, cc, config] private LocalCc getLocalCc(NodeEx node, Cc cc, Configuration config) { any() } @@ -1169,11 +1170,10 @@ private module Stage2 { pragma[nomagic] private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) { exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap | - fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap, - pragma[only_bind_into](config)) and + fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp), + pragma[only_bind_out](ap), pragma[only_bind_out](config)) and fwdFlowOutFromArg(call, out, argAp0, ap, config) and - fwdFlowIsEntered(call, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), argAp0, - pragma[only_bind_into](config)) + fwdFlowIsEntered(call, cc, argAp, argAp0, config) ) } @@ -1857,11 +1857,10 @@ private module Stage3 { pragma[nomagic] private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) { exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap | - fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap, - pragma[only_bind_into](config)) and + fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp), + pragma[only_bind_out](ap), pragma[only_bind_out](config)) and fwdFlowOutFromArg(call, out, argAp0, ap, config) and - fwdFlowIsEntered(call, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), argAp0, - pragma[only_bind_into](config)) + fwdFlowIsEntered(call, cc, argAp, argAp0, config) ) } @@ -2117,7 +2116,7 @@ private module Stage3 { private predicate flowCandSummaryCtx(NodeEx node, AccessPathFront argApf, Configuration config) { exists(AccessPathFront apf | Stage3::revFlow(node, true, _, apf, config) and - Stage3::fwdFlow(node, true, TAccessPathFrontSome(argApf), apf, config) + Stage3::fwdFlow(node, any(Stage3::CcCall ccc), TAccessPathFrontSome(argApf), apf, config) ) } @@ -2615,11 +2614,10 @@ private module Stage4 { pragma[nomagic] private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) { exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap | - fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap, - pragma[only_bind_into](config)) and + fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp), + pragma[only_bind_out](ap), pragma[only_bind_out](config)) and fwdFlowOutFromArg(call, out, argAp0, ap, config) and - fwdFlowIsEntered(call, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), argAp0, - pragma[only_bind_into](config)) + fwdFlowIsEntered(call, cc, argAp, argAp0, config) ) } diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl3.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl3.qll index 5c2dbb30084..bd6ca5e996b 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl3.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl3.qll @@ -923,28 +923,29 @@ private module Stage2 { ApOption apSome(Ap ap) { result = TBooleanSome(ap) } - class Cc = boolean; + class Cc = CallContext; - class CcCall extends Cc { - CcCall() { this = true } + class CcCall = CallContextCall; - /** Holds if this call context may be `call`. */ - predicate matchesCall(DataFlowCall call) { any() } - } + class CcNoCall = CallContextNoCall; - class CcNoCall extends Cc { - CcNoCall() { this = false } - } - - Cc ccNone() { result = false } + Cc ccNone() { result instanceof CallContextAny } private class LocalCc = Unit; bindingset[call, c, outercc] - private CcCall getCallContextCall(DataFlowCall call, DataFlowCallable c, Cc outercc) { any() } + private CcCall getCallContextCall(DataFlowCall call, DataFlowCallable c, Cc outercc) { + checkCallContextCall(outercc, call, c) and + if recordDataFlowCallSiteDispatch(call, c) + then result = TSpecificCall(call) + else result = TSomeCall() + } bindingset[call, c, innercc] - private CcNoCall getCallContextReturn(DataFlowCallable c, DataFlowCall call, Cc innercc) { any() } + private CcNoCall getCallContextReturn(DataFlowCallable c, DataFlowCall call, Cc innercc) { + checkCallContextReturn(innercc, c, call) and + if reducedViableImplInReturn(c, call) then result = TReturn(c, call) else result = ccNone() + } bindingset[node, cc, config] private LocalCc getLocalCc(NodeEx node, Cc cc, Configuration config) { any() } @@ -1169,11 +1170,10 @@ private module Stage2 { pragma[nomagic] private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) { exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap | - fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap, - pragma[only_bind_into](config)) and + fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp), + pragma[only_bind_out](ap), pragma[only_bind_out](config)) and fwdFlowOutFromArg(call, out, argAp0, ap, config) and - fwdFlowIsEntered(call, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), argAp0, - pragma[only_bind_into](config)) + fwdFlowIsEntered(call, cc, argAp, argAp0, config) ) } @@ -1857,11 +1857,10 @@ private module Stage3 { pragma[nomagic] private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) { exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap | - fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap, - pragma[only_bind_into](config)) and + fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp), + pragma[only_bind_out](ap), pragma[only_bind_out](config)) and fwdFlowOutFromArg(call, out, argAp0, ap, config) and - fwdFlowIsEntered(call, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), argAp0, - pragma[only_bind_into](config)) + fwdFlowIsEntered(call, cc, argAp, argAp0, config) ) } @@ -2117,7 +2116,7 @@ private module Stage3 { private predicate flowCandSummaryCtx(NodeEx node, AccessPathFront argApf, Configuration config) { exists(AccessPathFront apf | Stage3::revFlow(node, true, _, apf, config) and - Stage3::fwdFlow(node, true, TAccessPathFrontSome(argApf), apf, config) + Stage3::fwdFlow(node, any(Stage3::CcCall ccc), TAccessPathFrontSome(argApf), apf, config) ) } @@ -2615,11 +2614,10 @@ private module Stage4 { pragma[nomagic] private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) { exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap | - fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap, - pragma[only_bind_into](config)) and + fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp), + pragma[only_bind_out](ap), pragma[only_bind_out](config)) and fwdFlowOutFromArg(call, out, argAp0, ap, config) and - fwdFlowIsEntered(call, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), argAp0, - pragma[only_bind_into](config)) + fwdFlowIsEntered(call, cc, argAp, argAp0, config) ) } diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl4.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl4.qll index 5c2dbb30084..bd6ca5e996b 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl4.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl4.qll @@ -923,28 +923,29 @@ private module Stage2 { ApOption apSome(Ap ap) { result = TBooleanSome(ap) } - class Cc = boolean; + class Cc = CallContext; - class CcCall extends Cc { - CcCall() { this = true } + class CcCall = CallContextCall; - /** Holds if this call context may be `call`. */ - predicate matchesCall(DataFlowCall call) { any() } - } + class CcNoCall = CallContextNoCall; - class CcNoCall extends Cc { - CcNoCall() { this = false } - } - - Cc ccNone() { result = false } + Cc ccNone() { result instanceof CallContextAny } private class LocalCc = Unit; bindingset[call, c, outercc] - private CcCall getCallContextCall(DataFlowCall call, DataFlowCallable c, Cc outercc) { any() } + private CcCall getCallContextCall(DataFlowCall call, DataFlowCallable c, Cc outercc) { + checkCallContextCall(outercc, call, c) and + if recordDataFlowCallSiteDispatch(call, c) + then result = TSpecificCall(call) + else result = TSomeCall() + } bindingset[call, c, innercc] - private CcNoCall getCallContextReturn(DataFlowCallable c, DataFlowCall call, Cc innercc) { any() } + private CcNoCall getCallContextReturn(DataFlowCallable c, DataFlowCall call, Cc innercc) { + checkCallContextReturn(innercc, c, call) and + if reducedViableImplInReturn(c, call) then result = TReturn(c, call) else result = ccNone() + } bindingset[node, cc, config] private LocalCc getLocalCc(NodeEx node, Cc cc, Configuration config) { any() } @@ -1169,11 +1170,10 @@ private module Stage2 { pragma[nomagic] private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) { exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap | - fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap, - pragma[only_bind_into](config)) and + fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp), + pragma[only_bind_out](ap), pragma[only_bind_out](config)) and fwdFlowOutFromArg(call, out, argAp0, ap, config) and - fwdFlowIsEntered(call, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), argAp0, - pragma[only_bind_into](config)) + fwdFlowIsEntered(call, cc, argAp, argAp0, config) ) } @@ -1857,11 +1857,10 @@ private module Stage3 { pragma[nomagic] private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) { exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap | - fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap, - pragma[only_bind_into](config)) and + fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp), + pragma[only_bind_out](ap), pragma[only_bind_out](config)) and fwdFlowOutFromArg(call, out, argAp0, ap, config) and - fwdFlowIsEntered(call, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), argAp0, - pragma[only_bind_into](config)) + fwdFlowIsEntered(call, cc, argAp, argAp0, config) ) } @@ -2117,7 +2116,7 @@ private module Stage3 { private predicate flowCandSummaryCtx(NodeEx node, AccessPathFront argApf, Configuration config) { exists(AccessPathFront apf | Stage3::revFlow(node, true, _, apf, config) and - Stage3::fwdFlow(node, true, TAccessPathFrontSome(argApf), apf, config) + Stage3::fwdFlow(node, any(Stage3::CcCall ccc), TAccessPathFrontSome(argApf), apf, config) ) } @@ -2615,11 +2614,10 @@ private module Stage4 { pragma[nomagic] private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) { exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap | - fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap, - pragma[only_bind_into](config)) and + fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp), + pragma[only_bind_out](ap), pragma[only_bind_out](config)) and fwdFlowOutFromArg(call, out, argAp0, ap, config) and - fwdFlowIsEntered(call, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), argAp0, - pragma[only_bind_into](config)) + fwdFlowIsEntered(call, cc, argAp, argAp0, config) ) } diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl5.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl5.qll index 5c2dbb30084..bd6ca5e996b 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl5.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl5.qll @@ -923,28 +923,29 @@ private module Stage2 { ApOption apSome(Ap ap) { result = TBooleanSome(ap) } - class Cc = boolean; + class Cc = CallContext; - class CcCall extends Cc { - CcCall() { this = true } + class CcCall = CallContextCall; - /** Holds if this call context may be `call`. */ - predicate matchesCall(DataFlowCall call) { any() } - } + class CcNoCall = CallContextNoCall; - class CcNoCall extends Cc { - CcNoCall() { this = false } - } - - Cc ccNone() { result = false } + Cc ccNone() { result instanceof CallContextAny } private class LocalCc = Unit; bindingset[call, c, outercc] - private CcCall getCallContextCall(DataFlowCall call, DataFlowCallable c, Cc outercc) { any() } + private CcCall getCallContextCall(DataFlowCall call, DataFlowCallable c, Cc outercc) { + checkCallContextCall(outercc, call, c) and + if recordDataFlowCallSiteDispatch(call, c) + then result = TSpecificCall(call) + else result = TSomeCall() + } bindingset[call, c, innercc] - private CcNoCall getCallContextReturn(DataFlowCallable c, DataFlowCall call, Cc innercc) { any() } + private CcNoCall getCallContextReturn(DataFlowCallable c, DataFlowCall call, Cc innercc) { + checkCallContextReturn(innercc, c, call) and + if reducedViableImplInReturn(c, call) then result = TReturn(c, call) else result = ccNone() + } bindingset[node, cc, config] private LocalCc getLocalCc(NodeEx node, Cc cc, Configuration config) { any() } @@ -1169,11 +1170,10 @@ private module Stage2 { pragma[nomagic] private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) { exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap | - fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap, - pragma[only_bind_into](config)) and + fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp), + pragma[only_bind_out](ap), pragma[only_bind_out](config)) and fwdFlowOutFromArg(call, out, argAp0, ap, config) and - fwdFlowIsEntered(call, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), argAp0, - pragma[only_bind_into](config)) + fwdFlowIsEntered(call, cc, argAp, argAp0, config) ) } @@ -1857,11 +1857,10 @@ private module Stage3 { pragma[nomagic] private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) { exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap | - fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap, - pragma[only_bind_into](config)) and + fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp), + pragma[only_bind_out](ap), pragma[only_bind_out](config)) and fwdFlowOutFromArg(call, out, argAp0, ap, config) and - fwdFlowIsEntered(call, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), argAp0, - pragma[only_bind_into](config)) + fwdFlowIsEntered(call, cc, argAp, argAp0, config) ) } @@ -2117,7 +2116,7 @@ private module Stage3 { private predicate flowCandSummaryCtx(NodeEx node, AccessPathFront argApf, Configuration config) { exists(AccessPathFront apf | Stage3::revFlow(node, true, _, apf, config) and - Stage3::fwdFlow(node, true, TAccessPathFrontSome(argApf), apf, config) + Stage3::fwdFlow(node, any(Stage3::CcCall ccc), TAccessPathFrontSome(argApf), apf, config) ) } @@ -2615,11 +2614,10 @@ private module Stage4 { pragma[nomagic] private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) { exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap | - fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap, - pragma[only_bind_into](config)) and + fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp), + pragma[only_bind_out](ap), pragma[only_bind_out](config)) and fwdFlowOutFromArg(call, out, argAp0, ap, config) and - fwdFlowIsEntered(call, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), argAp0, - pragma[only_bind_into](config)) + fwdFlowIsEntered(call, cc, argAp, argAp0, config) ) } diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl.qll index 5c2dbb30084..bd6ca5e996b 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl.qll @@ -923,28 +923,29 @@ private module Stage2 { ApOption apSome(Ap ap) { result = TBooleanSome(ap) } - class Cc = boolean; + class Cc = CallContext; - class CcCall extends Cc { - CcCall() { this = true } + class CcCall = CallContextCall; - /** Holds if this call context may be `call`. */ - predicate matchesCall(DataFlowCall call) { any() } - } + class CcNoCall = CallContextNoCall; - class CcNoCall extends Cc { - CcNoCall() { this = false } - } - - Cc ccNone() { result = false } + Cc ccNone() { result instanceof CallContextAny } private class LocalCc = Unit; bindingset[call, c, outercc] - private CcCall getCallContextCall(DataFlowCall call, DataFlowCallable c, Cc outercc) { any() } + private CcCall getCallContextCall(DataFlowCall call, DataFlowCallable c, Cc outercc) { + checkCallContextCall(outercc, call, c) and + if recordDataFlowCallSiteDispatch(call, c) + then result = TSpecificCall(call) + else result = TSomeCall() + } bindingset[call, c, innercc] - private CcNoCall getCallContextReturn(DataFlowCallable c, DataFlowCall call, Cc innercc) { any() } + private CcNoCall getCallContextReturn(DataFlowCallable c, DataFlowCall call, Cc innercc) { + checkCallContextReturn(innercc, c, call) and + if reducedViableImplInReturn(c, call) then result = TReturn(c, call) else result = ccNone() + } bindingset[node, cc, config] private LocalCc getLocalCc(NodeEx node, Cc cc, Configuration config) { any() } @@ -1169,11 +1170,10 @@ private module Stage2 { pragma[nomagic] private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) { exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap | - fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap, - pragma[only_bind_into](config)) and + fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp), + pragma[only_bind_out](ap), pragma[only_bind_out](config)) and fwdFlowOutFromArg(call, out, argAp0, ap, config) and - fwdFlowIsEntered(call, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), argAp0, - pragma[only_bind_into](config)) + fwdFlowIsEntered(call, cc, argAp, argAp0, config) ) } @@ -1857,11 +1857,10 @@ private module Stage3 { pragma[nomagic] private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) { exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap | - fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap, - pragma[only_bind_into](config)) and + fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp), + pragma[only_bind_out](ap), pragma[only_bind_out](config)) and fwdFlowOutFromArg(call, out, argAp0, ap, config) and - fwdFlowIsEntered(call, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), argAp0, - pragma[only_bind_into](config)) + fwdFlowIsEntered(call, cc, argAp, argAp0, config) ) } @@ -2117,7 +2116,7 @@ private module Stage3 { private predicate flowCandSummaryCtx(NodeEx node, AccessPathFront argApf, Configuration config) { exists(AccessPathFront apf | Stage3::revFlow(node, true, _, apf, config) and - Stage3::fwdFlow(node, true, TAccessPathFrontSome(argApf), apf, config) + Stage3::fwdFlow(node, any(Stage3::CcCall ccc), TAccessPathFrontSome(argApf), apf, config) ) } @@ -2615,11 +2614,10 @@ private module Stage4 { pragma[nomagic] private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) { exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap | - fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap, - pragma[only_bind_into](config)) and + fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp), + pragma[only_bind_out](ap), pragma[only_bind_out](config)) and fwdFlowOutFromArg(call, out, argAp0, ap, config) and - fwdFlowIsEntered(call, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), argAp0, - pragma[only_bind_into](config)) + fwdFlowIsEntered(call, cc, argAp, argAp0, config) ) } diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl2.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl2.qll index 5c2dbb30084..bd6ca5e996b 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl2.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl2.qll @@ -923,28 +923,29 @@ private module Stage2 { ApOption apSome(Ap ap) { result = TBooleanSome(ap) } - class Cc = boolean; + class Cc = CallContext; - class CcCall extends Cc { - CcCall() { this = true } + class CcCall = CallContextCall; - /** Holds if this call context may be `call`. */ - predicate matchesCall(DataFlowCall call) { any() } - } + class CcNoCall = CallContextNoCall; - class CcNoCall extends Cc { - CcNoCall() { this = false } - } - - Cc ccNone() { result = false } + Cc ccNone() { result instanceof CallContextAny } private class LocalCc = Unit; bindingset[call, c, outercc] - private CcCall getCallContextCall(DataFlowCall call, DataFlowCallable c, Cc outercc) { any() } + private CcCall getCallContextCall(DataFlowCall call, DataFlowCallable c, Cc outercc) { + checkCallContextCall(outercc, call, c) and + if recordDataFlowCallSiteDispatch(call, c) + then result = TSpecificCall(call) + else result = TSomeCall() + } bindingset[call, c, innercc] - private CcNoCall getCallContextReturn(DataFlowCallable c, DataFlowCall call, Cc innercc) { any() } + private CcNoCall getCallContextReturn(DataFlowCallable c, DataFlowCall call, Cc innercc) { + checkCallContextReturn(innercc, c, call) and + if reducedViableImplInReturn(c, call) then result = TReturn(c, call) else result = ccNone() + } bindingset[node, cc, config] private LocalCc getLocalCc(NodeEx node, Cc cc, Configuration config) { any() } @@ -1169,11 +1170,10 @@ private module Stage2 { pragma[nomagic] private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) { exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap | - fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap, - pragma[only_bind_into](config)) and + fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp), + pragma[only_bind_out](ap), pragma[only_bind_out](config)) and fwdFlowOutFromArg(call, out, argAp0, ap, config) and - fwdFlowIsEntered(call, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), argAp0, - pragma[only_bind_into](config)) + fwdFlowIsEntered(call, cc, argAp, argAp0, config) ) } @@ -1857,11 +1857,10 @@ private module Stage3 { pragma[nomagic] private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) { exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap | - fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap, - pragma[only_bind_into](config)) and + fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp), + pragma[only_bind_out](ap), pragma[only_bind_out](config)) and fwdFlowOutFromArg(call, out, argAp0, ap, config) and - fwdFlowIsEntered(call, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), argAp0, - pragma[only_bind_into](config)) + fwdFlowIsEntered(call, cc, argAp, argAp0, config) ) } @@ -2117,7 +2116,7 @@ private module Stage3 { private predicate flowCandSummaryCtx(NodeEx node, AccessPathFront argApf, Configuration config) { exists(AccessPathFront apf | Stage3::revFlow(node, true, _, apf, config) and - Stage3::fwdFlow(node, true, TAccessPathFrontSome(argApf), apf, config) + Stage3::fwdFlow(node, any(Stage3::CcCall ccc), TAccessPathFrontSome(argApf), apf, config) ) } @@ -2615,11 +2614,10 @@ private module Stage4 { pragma[nomagic] private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) { exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap | - fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap, - pragma[only_bind_into](config)) and + fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp), + pragma[only_bind_out](ap), pragma[only_bind_out](config)) and fwdFlowOutFromArg(call, out, argAp0, ap, config) and - fwdFlowIsEntered(call, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), argAp0, - pragma[only_bind_into](config)) + fwdFlowIsEntered(call, cc, argAp, argAp0, config) ) } diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl3.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl3.qll index 5c2dbb30084..bd6ca5e996b 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl3.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl3.qll @@ -923,28 +923,29 @@ private module Stage2 { ApOption apSome(Ap ap) { result = TBooleanSome(ap) } - class Cc = boolean; + class Cc = CallContext; - class CcCall extends Cc { - CcCall() { this = true } + class CcCall = CallContextCall; - /** Holds if this call context may be `call`. */ - predicate matchesCall(DataFlowCall call) { any() } - } + class CcNoCall = CallContextNoCall; - class CcNoCall extends Cc { - CcNoCall() { this = false } - } - - Cc ccNone() { result = false } + Cc ccNone() { result instanceof CallContextAny } private class LocalCc = Unit; bindingset[call, c, outercc] - private CcCall getCallContextCall(DataFlowCall call, DataFlowCallable c, Cc outercc) { any() } + private CcCall getCallContextCall(DataFlowCall call, DataFlowCallable c, Cc outercc) { + checkCallContextCall(outercc, call, c) and + if recordDataFlowCallSiteDispatch(call, c) + then result = TSpecificCall(call) + else result = TSomeCall() + } bindingset[call, c, innercc] - private CcNoCall getCallContextReturn(DataFlowCallable c, DataFlowCall call, Cc innercc) { any() } + private CcNoCall getCallContextReturn(DataFlowCallable c, DataFlowCall call, Cc innercc) { + checkCallContextReturn(innercc, c, call) and + if reducedViableImplInReturn(c, call) then result = TReturn(c, call) else result = ccNone() + } bindingset[node, cc, config] private LocalCc getLocalCc(NodeEx node, Cc cc, Configuration config) { any() } @@ -1169,11 +1170,10 @@ private module Stage2 { pragma[nomagic] private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) { exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap | - fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap, - pragma[only_bind_into](config)) and + fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp), + pragma[only_bind_out](ap), pragma[only_bind_out](config)) and fwdFlowOutFromArg(call, out, argAp0, ap, config) and - fwdFlowIsEntered(call, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), argAp0, - pragma[only_bind_into](config)) + fwdFlowIsEntered(call, cc, argAp, argAp0, config) ) } @@ -1857,11 +1857,10 @@ private module Stage3 { pragma[nomagic] private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) { exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap | - fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap, - pragma[only_bind_into](config)) and + fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp), + pragma[only_bind_out](ap), pragma[only_bind_out](config)) and fwdFlowOutFromArg(call, out, argAp0, ap, config) and - fwdFlowIsEntered(call, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), argAp0, - pragma[only_bind_into](config)) + fwdFlowIsEntered(call, cc, argAp, argAp0, config) ) } @@ -2117,7 +2116,7 @@ private module Stage3 { private predicate flowCandSummaryCtx(NodeEx node, AccessPathFront argApf, Configuration config) { exists(AccessPathFront apf | Stage3::revFlow(node, true, _, apf, config) and - Stage3::fwdFlow(node, true, TAccessPathFrontSome(argApf), apf, config) + Stage3::fwdFlow(node, any(Stage3::CcCall ccc), TAccessPathFrontSome(argApf), apf, config) ) } @@ -2615,11 +2614,10 @@ private module Stage4 { pragma[nomagic] private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) { exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap | - fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap, - pragma[only_bind_into](config)) and + fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp), + pragma[only_bind_out](ap), pragma[only_bind_out](config)) and fwdFlowOutFromArg(call, out, argAp0, ap, config) and - fwdFlowIsEntered(call, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), argAp0, - pragma[only_bind_into](config)) + fwdFlowIsEntered(call, cc, argAp, argAp0, config) ) } diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl4.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl4.qll index 5c2dbb30084..bd6ca5e996b 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl4.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl4.qll @@ -923,28 +923,29 @@ private module Stage2 { ApOption apSome(Ap ap) { result = TBooleanSome(ap) } - class Cc = boolean; + class Cc = CallContext; - class CcCall extends Cc { - CcCall() { this = true } + class CcCall = CallContextCall; - /** Holds if this call context may be `call`. */ - predicate matchesCall(DataFlowCall call) { any() } - } + class CcNoCall = CallContextNoCall; - class CcNoCall extends Cc { - CcNoCall() { this = false } - } - - Cc ccNone() { result = false } + Cc ccNone() { result instanceof CallContextAny } private class LocalCc = Unit; bindingset[call, c, outercc] - private CcCall getCallContextCall(DataFlowCall call, DataFlowCallable c, Cc outercc) { any() } + private CcCall getCallContextCall(DataFlowCall call, DataFlowCallable c, Cc outercc) { + checkCallContextCall(outercc, call, c) and + if recordDataFlowCallSiteDispatch(call, c) + then result = TSpecificCall(call) + else result = TSomeCall() + } bindingset[call, c, innercc] - private CcNoCall getCallContextReturn(DataFlowCallable c, DataFlowCall call, Cc innercc) { any() } + private CcNoCall getCallContextReturn(DataFlowCallable c, DataFlowCall call, Cc innercc) { + checkCallContextReturn(innercc, c, call) and + if reducedViableImplInReturn(c, call) then result = TReturn(c, call) else result = ccNone() + } bindingset[node, cc, config] private LocalCc getLocalCc(NodeEx node, Cc cc, Configuration config) { any() } @@ -1169,11 +1170,10 @@ private module Stage2 { pragma[nomagic] private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) { exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap | - fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap, - pragma[only_bind_into](config)) and + fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp), + pragma[only_bind_out](ap), pragma[only_bind_out](config)) and fwdFlowOutFromArg(call, out, argAp0, ap, config) and - fwdFlowIsEntered(call, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), argAp0, - pragma[only_bind_into](config)) + fwdFlowIsEntered(call, cc, argAp, argAp0, config) ) } @@ -1857,11 +1857,10 @@ private module Stage3 { pragma[nomagic] private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) { exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap | - fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap, - pragma[only_bind_into](config)) and + fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp), + pragma[only_bind_out](ap), pragma[only_bind_out](config)) and fwdFlowOutFromArg(call, out, argAp0, ap, config) and - fwdFlowIsEntered(call, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), argAp0, - pragma[only_bind_into](config)) + fwdFlowIsEntered(call, cc, argAp, argAp0, config) ) } @@ -2117,7 +2116,7 @@ private module Stage3 { private predicate flowCandSummaryCtx(NodeEx node, AccessPathFront argApf, Configuration config) { exists(AccessPathFront apf | Stage3::revFlow(node, true, _, apf, config) and - Stage3::fwdFlow(node, true, TAccessPathFrontSome(argApf), apf, config) + Stage3::fwdFlow(node, any(Stage3::CcCall ccc), TAccessPathFrontSome(argApf), apf, config) ) } @@ -2615,11 +2614,10 @@ private module Stage4 { pragma[nomagic] private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) { exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap | - fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap, - pragma[only_bind_into](config)) and + fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp), + pragma[only_bind_out](ap), pragma[only_bind_out](config)) and fwdFlowOutFromArg(call, out, argAp0, ap, config) and - fwdFlowIsEntered(call, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), argAp0, - pragma[only_bind_into](config)) + fwdFlowIsEntered(call, cc, argAp, argAp0, config) ) } diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl5.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl5.qll index 5c2dbb30084..bd6ca5e996b 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl5.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl5.qll @@ -923,28 +923,29 @@ private module Stage2 { ApOption apSome(Ap ap) { result = TBooleanSome(ap) } - class Cc = boolean; + class Cc = CallContext; - class CcCall extends Cc { - CcCall() { this = true } + class CcCall = CallContextCall; - /** Holds if this call context may be `call`. */ - predicate matchesCall(DataFlowCall call) { any() } - } + class CcNoCall = CallContextNoCall; - class CcNoCall extends Cc { - CcNoCall() { this = false } - } - - Cc ccNone() { result = false } + Cc ccNone() { result instanceof CallContextAny } private class LocalCc = Unit; bindingset[call, c, outercc] - private CcCall getCallContextCall(DataFlowCall call, DataFlowCallable c, Cc outercc) { any() } + private CcCall getCallContextCall(DataFlowCall call, DataFlowCallable c, Cc outercc) { + checkCallContextCall(outercc, call, c) and + if recordDataFlowCallSiteDispatch(call, c) + then result = TSpecificCall(call) + else result = TSomeCall() + } bindingset[call, c, innercc] - private CcNoCall getCallContextReturn(DataFlowCallable c, DataFlowCall call, Cc innercc) { any() } + private CcNoCall getCallContextReturn(DataFlowCallable c, DataFlowCall call, Cc innercc) { + checkCallContextReturn(innercc, c, call) and + if reducedViableImplInReturn(c, call) then result = TReturn(c, call) else result = ccNone() + } bindingset[node, cc, config] private LocalCc getLocalCc(NodeEx node, Cc cc, Configuration config) { any() } @@ -1169,11 +1170,10 @@ private module Stage2 { pragma[nomagic] private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) { exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap | - fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap, - pragma[only_bind_into](config)) and + fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp), + pragma[only_bind_out](ap), pragma[only_bind_out](config)) and fwdFlowOutFromArg(call, out, argAp0, ap, config) and - fwdFlowIsEntered(call, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), argAp0, - pragma[only_bind_into](config)) + fwdFlowIsEntered(call, cc, argAp, argAp0, config) ) } @@ -1857,11 +1857,10 @@ private module Stage3 { pragma[nomagic] private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) { exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap | - fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap, - pragma[only_bind_into](config)) and + fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp), + pragma[only_bind_out](ap), pragma[only_bind_out](config)) and fwdFlowOutFromArg(call, out, argAp0, ap, config) and - fwdFlowIsEntered(call, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), argAp0, - pragma[only_bind_into](config)) + fwdFlowIsEntered(call, cc, argAp, argAp0, config) ) } @@ -2117,7 +2116,7 @@ private module Stage3 { private predicate flowCandSummaryCtx(NodeEx node, AccessPathFront argApf, Configuration config) { exists(AccessPathFront apf | Stage3::revFlow(node, true, _, apf, config) and - Stage3::fwdFlow(node, true, TAccessPathFrontSome(argApf), apf, config) + Stage3::fwdFlow(node, any(Stage3::CcCall ccc), TAccessPathFrontSome(argApf), apf, config) ) } @@ -2615,11 +2614,10 @@ private module Stage4 { pragma[nomagic] private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) { exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap | - fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap, - pragma[only_bind_into](config)) and + fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp), + pragma[only_bind_out](ap), pragma[only_bind_out](config)) and fwdFlowOutFromArg(call, out, argAp0, ap, config) and - fwdFlowIsEntered(call, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), argAp0, - pragma[only_bind_into](config)) + fwdFlowIsEntered(call, cc, argAp, argAp0, config) ) } diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl6.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl6.qll index 5c2dbb30084..bd6ca5e996b 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl6.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl6.qll @@ -923,28 +923,29 @@ private module Stage2 { ApOption apSome(Ap ap) { result = TBooleanSome(ap) } - class Cc = boolean; + class Cc = CallContext; - class CcCall extends Cc { - CcCall() { this = true } + class CcCall = CallContextCall; - /** Holds if this call context may be `call`. */ - predicate matchesCall(DataFlowCall call) { any() } - } + class CcNoCall = CallContextNoCall; - class CcNoCall extends Cc { - CcNoCall() { this = false } - } - - Cc ccNone() { result = false } + Cc ccNone() { result instanceof CallContextAny } private class LocalCc = Unit; bindingset[call, c, outercc] - private CcCall getCallContextCall(DataFlowCall call, DataFlowCallable c, Cc outercc) { any() } + private CcCall getCallContextCall(DataFlowCall call, DataFlowCallable c, Cc outercc) { + checkCallContextCall(outercc, call, c) and + if recordDataFlowCallSiteDispatch(call, c) + then result = TSpecificCall(call) + else result = TSomeCall() + } bindingset[call, c, innercc] - private CcNoCall getCallContextReturn(DataFlowCallable c, DataFlowCall call, Cc innercc) { any() } + private CcNoCall getCallContextReturn(DataFlowCallable c, DataFlowCall call, Cc innercc) { + checkCallContextReturn(innercc, c, call) and + if reducedViableImplInReturn(c, call) then result = TReturn(c, call) else result = ccNone() + } bindingset[node, cc, config] private LocalCc getLocalCc(NodeEx node, Cc cc, Configuration config) { any() } @@ -1169,11 +1170,10 @@ private module Stage2 { pragma[nomagic] private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) { exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap | - fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap, - pragma[only_bind_into](config)) and + fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp), + pragma[only_bind_out](ap), pragma[only_bind_out](config)) and fwdFlowOutFromArg(call, out, argAp0, ap, config) and - fwdFlowIsEntered(call, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), argAp0, - pragma[only_bind_into](config)) + fwdFlowIsEntered(call, cc, argAp, argAp0, config) ) } @@ -1857,11 +1857,10 @@ private module Stage3 { pragma[nomagic] private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) { exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap | - fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap, - pragma[only_bind_into](config)) and + fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp), + pragma[only_bind_out](ap), pragma[only_bind_out](config)) and fwdFlowOutFromArg(call, out, argAp0, ap, config) and - fwdFlowIsEntered(call, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), argAp0, - pragma[only_bind_into](config)) + fwdFlowIsEntered(call, cc, argAp, argAp0, config) ) } @@ -2117,7 +2116,7 @@ private module Stage3 { private predicate flowCandSummaryCtx(NodeEx node, AccessPathFront argApf, Configuration config) { exists(AccessPathFront apf | Stage3::revFlow(node, true, _, apf, config) and - Stage3::fwdFlow(node, true, TAccessPathFrontSome(argApf), apf, config) + Stage3::fwdFlow(node, any(Stage3::CcCall ccc), TAccessPathFrontSome(argApf), apf, config) ) } @@ -2615,11 +2614,10 @@ private module Stage4 { pragma[nomagic] private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) { exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap | - fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap, - pragma[only_bind_into](config)) and + fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp), + pragma[only_bind_out](ap), pragma[only_bind_out](config)) and fwdFlowOutFromArg(call, out, argAp0, ap, config) and - fwdFlowIsEntered(call, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), argAp0, - pragma[only_bind_into](config)) + fwdFlowIsEntered(call, cc, argAp, argAp0, config) ) } diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplCommon.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplCommon.qll index 728f7b56c42..f588a25a176 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplCommon.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplCommon.qll @@ -786,13 +786,18 @@ private module Cached { } /** - * Holds if the call context `call` either improves virtual dispatch in - * `callable` or if it allows us to prune unreachable nodes in `callable`. + * Holds if the call context `call` improves virtual dispatch in `callable`. */ cached - predicate recordDataFlowCallSite(DataFlowCall call, DataFlowCallable callable) { + predicate recordDataFlowCallSiteDispatch(DataFlowCall call, DataFlowCallable callable) { reducedViableImplInCallContext(_, callable, call) - or + } + + /** + * Holds if the call context `call` allows us to prune unreachable nodes in `callable`. + */ + cached + predicate recordDataFlowCallSiteUnreachable(DataFlowCall call, DataFlowCallable callable) { exists(Node n | getNodeEnclosingCallable(n) = callable | isUnreachableInCallCached(n, call)) } @@ -846,6 +851,15 @@ private module Cached { TAccessPathFrontSome(AccessPathFront apf) } +/** + * Holds if the call context `call` either improves virtual dispatch in + * `callable` or if it allows us to prune unreachable nodes in `callable`. + */ +predicate recordDataFlowCallSite(DataFlowCall call, DataFlowCallable callable) { + recordDataFlowCallSiteDispatch(call, callable) or + recordDataFlowCallSiteUnreachable(call, callable) +} + /** * A `Node` at which a cast can occur such that the type should be checked. */ diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplForSerializability.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplForSerializability.qll index 5c2dbb30084..bd6ca5e996b 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplForSerializability.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplForSerializability.qll @@ -923,28 +923,29 @@ private module Stage2 { ApOption apSome(Ap ap) { result = TBooleanSome(ap) } - class Cc = boolean; + class Cc = CallContext; - class CcCall extends Cc { - CcCall() { this = true } + class CcCall = CallContextCall; - /** Holds if this call context may be `call`. */ - predicate matchesCall(DataFlowCall call) { any() } - } + class CcNoCall = CallContextNoCall; - class CcNoCall extends Cc { - CcNoCall() { this = false } - } - - Cc ccNone() { result = false } + Cc ccNone() { result instanceof CallContextAny } private class LocalCc = Unit; bindingset[call, c, outercc] - private CcCall getCallContextCall(DataFlowCall call, DataFlowCallable c, Cc outercc) { any() } + private CcCall getCallContextCall(DataFlowCall call, DataFlowCallable c, Cc outercc) { + checkCallContextCall(outercc, call, c) and + if recordDataFlowCallSiteDispatch(call, c) + then result = TSpecificCall(call) + else result = TSomeCall() + } bindingset[call, c, innercc] - private CcNoCall getCallContextReturn(DataFlowCallable c, DataFlowCall call, Cc innercc) { any() } + private CcNoCall getCallContextReturn(DataFlowCallable c, DataFlowCall call, Cc innercc) { + checkCallContextReturn(innercc, c, call) and + if reducedViableImplInReturn(c, call) then result = TReturn(c, call) else result = ccNone() + } bindingset[node, cc, config] private LocalCc getLocalCc(NodeEx node, Cc cc, Configuration config) { any() } @@ -1169,11 +1170,10 @@ private module Stage2 { pragma[nomagic] private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) { exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap | - fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap, - pragma[only_bind_into](config)) and + fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp), + pragma[only_bind_out](ap), pragma[only_bind_out](config)) and fwdFlowOutFromArg(call, out, argAp0, ap, config) and - fwdFlowIsEntered(call, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), argAp0, - pragma[only_bind_into](config)) + fwdFlowIsEntered(call, cc, argAp, argAp0, config) ) } @@ -1857,11 +1857,10 @@ private module Stage3 { pragma[nomagic] private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) { exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap | - fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap, - pragma[only_bind_into](config)) and + fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp), + pragma[only_bind_out](ap), pragma[only_bind_out](config)) and fwdFlowOutFromArg(call, out, argAp0, ap, config) and - fwdFlowIsEntered(call, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), argAp0, - pragma[only_bind_into](config)) + fwdFlowIsEntered(call, cc, argAp, argAp0, config) ) } @@ -2117,7 +2116,7 @@ private module Stage3 { private predicate flowCandSummaryCtx(NodeEx node, AccessPathFront argApf, Configuration config) { exists(AccessPathFront apf | Stage3::revFlow(node, true, _, apf, config) and - Stage3::fwdFlow(node, true, TAccessPathFrontSome(argApf), apf, config) + Stage3::fwdFlow(node, any(Stage3::CcCall ccc), TAccessPathFrontSome(argApf), apf, config) ) } @@ -2615,11 +2614,10 @@ private module Stage4 { pragma[nomagic] private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) { exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap | - fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap, - pragma[only_bind_into](config)) and + fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp), + pragma[only_bind_out](ap), pragma[only_bind_out](config)) and fwdFlowOutFromArg(call, out, argAp0, ap, config) and - fwdFlowIsEntered(call, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), argAp0, - pragma[only_bind_into](config)) + fwdFlowIsEntered(call, cc, argAp, argAp0, config) ) } diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl.qll index 5c2dbb30084..bd6ca5e996b 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl.qll @@ -923,28 +923,29 @@ private module Stage2 { ApOption apSome(Ap ap) { result = TBooleanSome(ap) } - class Cc = boolean; + class Cc = CallContext; - class CcCall extends Cc { - CcCall() { this = true } + class CcCall = CallContextCall; - /** Holds if this call context may be `call`. */ - predicate matchesCall(DataFlowCall call) { any() } - } + class CcNoCall = CallContextNoCall; - class CcNoCall extends Cc { - CcNoCall() { this = false } - } - - Cc ccNone() { result = false } + Cc ccNone() { result instanceof CallContextAny } private class LocalCc = Unit; bindingset[call, c, outercc] - private CcCall getCallContextCall(DataFlowCall call, DataFlowCallable c, Cc outercc) { any() } + private CcCall getCallContextCall(DataFlowCall call, DataFlowCallable c, Cc outercc) { + checkCallContextCall(outercc, call, c) and + if recordDataFlowCallSiteDispatch(call, c) + then result = TSpecificCall(call) + else result = TSomeCall() + } bindingset[call, c, innercc] - private CcNoCall getCallContextReturn(DataFlowCallable c, DataFlowCall call, Cc innercc) { any() } + private CcNoCall getCallContextReturn(DataFlowCallable c, DataFlowCall call, Cc innercc) { + checkCallContextReturn(innercc, c, call) and + if reducedViableImplInReturn(c, call) then result = TReturn(c, call) else result = ccNone() + } bindingset[node, cc, config] private LocalCc getLocalCc(NodeEx node, Cc cc, Configuration config) { any() } @@ -1169,11 +1170,10 @@ private module Stage2 { pragma[nomagic] private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) { exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap | - fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap, - pragma[only_bind_into](config)) and + fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp), + pragma[only_bind_out](ap), pragma[only_bind_out](config)) and fwdFlowOutFromArg(call, out, argAp0, ap, config) and - fwdFlowIsEntered(call, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), argAp0, - pragma[only_bind_into](config)) + fwdFlowIsEntered(call, cc, argAp, argAp0, config) ) } @@ -1857,11 +1857,10 @@ private module Stage3 { pragma[nomagic] private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) { exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap | - fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap, - pragma[only_bind_into](config)) and + fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp), + pragma[only_bind_out](ap), pragma[only_bind_out](config)) and fwdFlowOutFromArg(call, out, argAp0, ap, config) and - fwdFlowIsEntered(call, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), argAp0, - pragma[only_bind_into](config)) + fwdFlowIsEntered(call, cc, argAp, argAp0, config) ) } @@ -2117,7 +2116,7 @@ private module Stage3 { private predicate flowCandSummaryCtx(NodeEx node, AccessPathFront argApf, Configuration config) { exists(AccessPathFront apf | Stage3::revFlow(node, true, _, apf, config) and - Stage3::fwdFlow(node, true, TAccessPathFrontSome(argApf), apf, config) + Stage3::fwdFlow(node, any(Stage3::CcCall ccc), TAccessPathFrontSome(argApf), apf, config) ) } @@ -2615,11 +2614,10 @@ private module Stage4 { pragma[nomagic] private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) { exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap | - fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap, - pragma[only_bind_into](config)) and + fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp), + pragma[only_bind_out](ap), pragma[only_bind_out](config)) and fwdFlowOutFromArg(call, out, argAp0, ap, config) and - fwdFlowIsEntered(call, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), argAp0, - pragma[only_bind_into](config)) + fwdFlowIsEntered(call, cc, argAp, argAp0, config) ) } diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl2.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl2.qll index 5c2dbb30084..bd6ca5e996b 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl2.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl2.qll @@ -923,28 +923,29 @@ private module Stage2 { ApOption apSome(Ap ap) { result = TBooleanSome(ap) } - class Cc = boolean; + class Cc = CallContext; - class CcCall extends Cc { - CcCall() { this = true } + class CcCall = CallContextCall; - /** Holds if this call context may be `call`. */ - predicate matchesCall(DataFlowCall call) { any() } - } + class CcNoCall = CallContextNoCall; - class CcNoCall extends Cc { - CcNoCall() { this = false } - } - - Cc ccNone() { result = false } + Cc ccNone() { result instanceof CallContextAny } private class LocalCc = Unit; bindingset[call, c, outercc] - private CcCall getCallContextCall(DataFlowCall call, DataFlowCallable c, Cc outercc) { any() } + private CcCall getCallContextCall(DataFlowCall call, DataFlowCallable c, Cc outercc) { + checkCallContextCall(outercc, call, c) and + if recordDataFlowCallSiteDispatch(call, c) + then result = TSpecificCall(call) + else result = TSomeCall() + } bindingset[call, c, innercc] - private CcNoCall getCallContextReturn(DataFlowCallable c, DataFlowCall call, Cc innercc) { any() } + private CcNoCall getCallContextReturn(DataFlowCallable c, DataFlowCall call, Cc innercc) { + checkCallContextReturn(innercc, c, call) and + if reducedViableImplInReturn(c, call) then result = TReturn(c, call) else result = ccNone() + } bindingset[node, cc, config] private LocalCc getLocalCc(NodeEx node, Cc cc, Configuration config) { any() } @@ -1169,11 +1170,10 @@ private module Stage2 { pragma[nomagic] private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) { exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap | - fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap, - pragma[only_bind_into](config)) and + fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp), + pragma[only_bind_out](ap), pragma[only_bind_out](config)) and fwdFlowOutFromArg(call, out, argAp0, ap, config) and - fwdFlowIsEntered(call, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), argAp0, - pragma[only_bind_into](config)) + fwdFlowIsEntered(call, cc, argAp, argAp0, config) ) } @@ -1857,11 +1857,10 @@ private module Stage3 { pragma[nomagic] private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) { exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap | - fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap, - pragma[only_bind_into](config)) and + fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp), + pragma[only_bind_out](ap), pragma[only_bind_out](config)) and fwdFlowOutFromArg(call, out, argAp0, ap, config) and - fwdFlowIsEntered(call, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), argAp0, - pragma[only_bind_into](config)) + fwdFlowIsEntered(call, cc, argAp, argAp0, config) ) } @@ -2117,7 +2116,7 @@ private module Stage3 { private predicate flowCandSummaryCtx(NodeEx node, AccessPathFront argApf, Configuration config) { exists(AccessPathFront apf | Stage3::revFlow(node, true, _, apf, config) and - Stage3::fwdFlow(node, true, TAccessPathFrontSome(argApf), apf, config) + Stage3::fwdFlow(node, any(Stage3::CcCall ccc), TAccessPathFrontSome(argApf), apf, config) ) } @@ -2615,11 +2614,10 @@ private module Stage4 { pragma[nomagic] private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) { exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap | - fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap, - pragma[only_bind_into](config)) and + fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp), + pragma[only_bind_out](ap), pragma[only_bind_out](config)) and fwdFlowOutFromArg(call, out, argAp0, ap, config) and - fwdFlowIsEntered(call, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), argAp0, - pragma[only_bind_into](config)) + fwdFlowIsEntered(call, cc, argAp, argAp0, config) ) } diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl3.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl3.qll index 5c2dbb30084..bd6ca5e996b 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl3.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl3.qll @@ -923,28 +923,29 @@ private module Stage2 { ApOption apSome(Ap ap) { result = TBooleanSome(ap) } - class Cc = boolean; + class Cc = CallContext; - class CcCall extends Cc { - CcCall() { this = true } + class CcCall = CallContextCall; - /** Holds if this call context may be `call`. */ - predicate matchesCall(DataFlowCall call) { any() } - } + class CcNoCall = CallContextNoCall; - class CcNoCall extends Cc { - CcNoCall() { this = false } - } - - Cc ccNone() { result = false } + Cc ccNone() { result instanceof CallContextAny } private class LocalCc = Unit; bindingset[call, c, outercc] - private CcCall getCallContextCall(DataFlowCall call, DataFlowCallable c, Cc outercc) { any() } + private CcCall getCallContextCall(DataFlowCall call, DataFlowCallable c, Cc outercc) { + checkCallContextCall(outercc, call, c) and + if recordDataFlowCallSiteDispatch(call, c) + then result = TSpecificCall(call) + else result = TSomeCall() + } bindingset[call, c, innercc] - private CcNoCall getCallContextReturn(DataFlowCallable c, DataFlowCall call, Cc innercc) { any() } + private CcNoCall getCallContextReturn(DataFlowCallable c, DataFlowCall call, Cc innercc) { + checkCallContextReturn(innercc, c, call) and + if reducedViableImplInReturn(c, call) then result = TReturn(c, call) else result = ccNone() + } bindingset[node, cc, config] private LocalCc getLocalCc(NodeEx node, Cc cc, Configuration config) { any() } @@ -1169,11 +1170,10 @@ private module Stage2 { pragma[nomagic] private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) { exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap | - fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap, - pragma[only_bind_into](config)) and + fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp), + pragma[only_bind_out](ap), pragma[only_bind_out](config)) and fwdFlowOutFromArg(call, out, argAp0, ap, config) and - fwdFlowIsEntered(call, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), argAp0, - pragma[only_bind_into](config)) + fwdFlowIsEntered(call, cc, argAp, argAp0, config) ) } @@ -1857,11 +1857,10 @@ private module Stage3 { pragma[nomagic] private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) { exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap | - fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap, - pragma[only_bind_into](config)) and + fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp), + pragma[only_bind_out](ap), pragma[only_bind_out](config)) and fwdFlowOutFromArg(call, out, argAp0, ap, config) and - fwdFlowIsEntered(call, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), argAp0, - pragma[only_bind_into](config)) + fwdFlowIsEntered(call, cc, argAp, argAp0, config) ) } @@ -2117,7 +2116,7 @@ private module Stage3 { private predicate flowCandSummaryCtx(NodeEx node, AccessPathFront argApf, Configuration config) { exists(AccessPathFront apf | Stage3::revFlow(node, true, _, apf, config) and - Stage3::fwdFlow(node, true, TAccessPathFrontSome(argApf), apf, config) + Stage3::fwdFlow(node, any(Stage3::CcCall ccc), TAccessPathFrontSome(argApf), apf, config) ) } @@ -2615,11 +2614,10 @@ private module Stage4 { pragma[nomagic] private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) { exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap | - fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap, - pragma[only_bind_into](config)) and + fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp), + pragma[only_bind_out](ap), pragma[only_bind_out](config)) and fwdFlowOutFromArg(call, out, argAp0, ap, config) and - fwdFlowIsEntered(call, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), argAp0, - pragma[only_bind_into](config)) + fwdFlowIsEntered(call, cc, argAp, argAp0, config) ) } diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl4.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl4.qll index 5c2dbb30084..bd6ca5e996b 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl4.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl4.qll @@ -923,28 +923,29 @@ private module Stage2 { ApOption apSome(Ap ap) { result = TBooleanSome(ap) } - class Cc = boolean; + class Cc = CallContext; - class CcCall extends Cc { - CcCall() { this = true } + class CcCall = CallContextCall; - /** Holds if this call context may be `call`. */ - predicate matchesCall(DataFlowCall call) { any() } - } + class CcNoCall = CallContextNoCall; - class CcNoCall extends Cc { - CcNoCall() { this = false } - } - - Cc ccNone() { result = false } + Cc ccNone() { result instanceof CallContextAny } private class LocalCc = Unit; bindingset[call, c, outercc] - private CcCall getCallContextCall(DataFlowCall call, DataFlowCallable c, Cc outercc) { any() } + private CcCall getCallContextCall(DataFlowCall call, DataFlowCallable c, Cc outercc) { + checkCallContextCall(outercc, call, c) and + if recordDataFlowCallSiteDispatch(call, c) + then result = TSpecificCall(call) + else result = TSomeCall() + } bindingset[call, c, innercc] - private CcNoCall getCallContextReturn(DataFlowCallable c, DataFlowCall call, Cc innercc) { any() } + private CcNoCall getCallContextReturn(DataFlowCallable c, DataFlowCall call, Cc innercc) { + checkCallContextReturn(innercc, c, call) and + if reducedViableImplInReturn(c, call) then result = TReturn(c, call) else result = ccNone() + } bindingset[node, cc, config] private LocalCc getLocalCc(NodeEx node, Cc cc, Configuration config) { any() } @@ -1169,11 +1170,10 @@ private module Stage2 { pragma[nomagic] private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) { exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap | - fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap, - pragma[only_bind_into](config)) and + fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp), + pragma[only_bind_out](ap), pragma[only_bind_out](config)) and fwdFlowOutFromArg(call, out, argAp0, ap, config) and - fwdFlowIsEntered(call, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), argAp0, - pragma[only_bind_into](config)) + fwdFlowIsEntered(call, cc, argAp, argAp0, config) ) } @@ -1857,11 +1857,10 @@ private module Stage3 { pragma[nomagic] private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) { exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap | - fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap, - pragma[only_bind_into](config)) and + fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp), + pragma[only_bind_out](ap), pragma[only_bind_out](config)) and fwdFlowOutFromArg(call, out, argAp0, ap, config) and - fwdFlowIsEntered(call, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), argAp0, - pragma[only_bind_into](config)) + fwdFlowIsEntered(call, cc, argAp, argAp0, config) ) } @@ -2117,7 +2116,7 @@ private module Stage3 { private predicate flowCandSummaryCtx(NodeEx node, AccessPathFront argApf, Configuration config) { exists(AccessPathFront apf | Stage3::revFlow(node, true, _, apf, config) and - Stage3::fwdFlow(node, true, TAccessPathFrontSome(argApf), apf, config) + Stage3::fwdFlow(node, any(Stage3::CcCall ccc), TAccessPathFrontSome(argApf), apf, config) ) } @@ -2615,11 +2614,10 @@ private module Stage4 { pragma[nomagic] private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) { exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap | - fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap, - pragma[only_bind_into](config)) and + fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp), + pragma[only_bind_out](ap), pragma[only_bind_out](config)) and fwdFlowOutFromArg(call, out, argAp0, ap, config) and - fwdFlowIsEntered(call, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), argAp0, - pragma[only_bind_into](config)) + fwdFlowIsEntered(call, cc, argAp, argAp0, config) ) } diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImplCommon.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImplCommon.qll index 728f7b56c42..f588a25a176 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImplCommon.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImplCommon.qll @@ -786,13 +786,18 @@ private module Cached { } /** - * Holds if the call context `call` either improves virtual dispatch in - * `callable` or if it allows us to prune unreachable nodes in `callable`. + * Holds if the call context `call` improves virtual dispatch in `callable`. */ cached - predicate recordDataFlowCallSite(DataFlowCall call, DataFlowCallable callable) { + predicate recordDataFlowCallSiteDispatch(DataFlowCall call, DataFlowCallable callable) { reducedViableImplInCallContext(_, callable, call) - or + } + + /** + * Holds if the call context `call` allows us to prune unreachable nodes in `callable`. + */ + cached + predicate recordDataFlowCallSiteUnreachable(DataFlowCall call, DataFlowCallable callable) { exists(Node n | getNodeEnclosingCallable(n) = callable | isUnreachableInCallCached(n, call)) } @@ -846,6 +851,15 @@ private module Cached { TAccessPathFrontSome(AccessPathFront apf) } +/** + * Holds if the call context `call` either improves virtual dispatch in + * `callable` or if it allows us to prune unreachable nodes in `callable`. + */ +predicate recordDataFlowCallSite(DataFlowCall call, DataFlowCallable callable) { + recordDataFlowCallSiteDispatch(call, callable) or + recordDataFlowCallSiteUnreachable(call, callable) +} + /** * A `Node` at which a cast can occur such that the type should be checked. */ From 9f4b7255aa8a9d9ec67a5b58debe7a1a800ed0c3 Mon Sep 17 00:00:00 2001 From: ihsinme Date: Thu, 2 Sep 2021 10:21:07 +0300 Subject: [PATCH 130/741] Add files via upload --- .../Security/CWE/CWE-675/DoubleRelease.c | 13 ++ .../Security/CWE/CWE-675/DoubleRelease.qhelp | 26 +++ .../Security/CWE/CWE-675/DoubleRelease.ql | 211 ++++++++++++++++++ 3 files changed, 250 insertions(+) create mode 100644 cpp/ql/src/experimental/Security/CWE/CWE-675/DoubleRelease.c create mode 100644 cpp/ql/src/experimental/Security/CWE/CWE-675/DoubleRelease.qhelp create mode 100644 cpp/ql/src/experimental/Security/CWE/CWE-675/DoubleRelease.ql diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-675/DoubleRelease.c b/cpp/ql/src/experimental/Security/CWE/CWE-675/DoubleRelease.c new file mode 100644 index 00000000000..22de8d4dde4 --- /dev/null +++ b/cpp/ql/src/experimental/Security/CWE/CWE-675/DoubleRelease.c @@ -0,0 +1,13 @@ +... + fs = socket(AF_UNIX, SOCK_STREAM, 0) +... + close(fs); + fs = -1; // GOOD +... + +... + fs = socket(AF_UNIX, SOCK_STREAM, 0) +... + close(fs); + if(fs) close(fs); // BAD +... diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-675/DoubleRelease.qhelp b/cpp/ql/src/experimental/Security/CWE/CWE-675/DoubleRelease.qhelp new file mode 100644 index 00000000000..8ec155e100f --- /dev/null +++ b/cpp/ql/src/experimental/Security/CWE/CWE-675/DoubleRelease.qhelp @@ -0,0 +1,26 @@ + + + +

    Double release of the descriptor can lead to a crash of the program. Requires the attention of developers.

    + +
    + +

    We recommend that you exclude situations of possible double release.

    + +
    + +

    The following example demonstrates an erroneous and corrected use of descriptor deallocation.

    + + +
    + + +
  • + CERT C Coding Standard: + FIO46-C. Do not access a closed file. +
  • + +
    +
    diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-675/DoubleRelease.ql b/cpp/ql/src/experimental/Security/CWE/CWE-675/DoubleRelease.ql new file mode 100644 index 00000000000..684ed9617b8 --- /dev/null +++ b/cpp/ql/src/experimental/Security/CWE/CWE-675/DoubleRelease.ql @@ -0,0 +1,211 @@ +/** + * @name Errors When Double Release + * @description Double release of the descriptor can lead to a crash of the program. + * @kind problem + * @id cpp/double-release + * @problem.severity warning + * @precision medium + * @tags security + * external/cwe/cwe-675 + * external/cwe/cwe-666 + */ + +import cpp +import semmle.code.cpp.commons.File +import semmle.code.cpp.valuenumbering.GlobalValueNumbering +import semmle.code.cpp.valuenumbering.HashCons + +/** + * A function call that potentially does not return (such as `exit`). + */ +class CallMayNotReturn extends FunctionCall { + CallMayNotReturn() { + // call that is known to not return + not exists(this.(ControlFlowNode).getASuccessor()) + or + // call to another function that may not return + exists(CallMayNotReturn exit | getTarget() = exit.getEnclosingFunction()) + or + exists(ThrowExpr tex | tex = this.(ControlFlowNode).getASuccessor()) + } +} + +/** Holds if there are no assignment expressions to the function argument. */ +pragma[inline] +predicate checkChangeVariable(FunctionCall fc0, FunctionCall fc1, FunctionCall fc2) { + not exists(Expr exptmp | + ( + exptmp = fc0.getArgument(0).(VariableAccess).getTarget().getAnAssignedValue() or + exptmp.(AddressOfExpr).getOperand() = + fc0.getArgument(0).(VariableAccess).getTarget().getAnAccess() + ) and + exptmp = fc1.getASuccessor*() and + exptmp = fc2.getAPredecessor*() + ) and + ( + ( + not fc0.getArgument(0) instanceof PointerFieldAccess and + not fc0.getArgument(0) instanceof ValueFieldAccess + or + fc0.getArgument(0).(VariableAccess).getQualifier() instanceof ThisExpr + ) + or + not exists(Expr exptmp | + ( + exptmp = + fc0.getArgument(0) + .(VariableAccess) + .getQualifier() + .(VariableAccess) + .getTarget() + .getAnAssignedValue() or + exptmp.(AddressOfExpr).getOperand() = + fc0.getArgument(0) + .(VariableAccess) + .getQualifier() + .(VariableAccess) + .getTarget() + .getAnAccess() + ) and + exptmp = fc1.getASuccessor*() and + exptmp = fc2.getAPredecessor*() + ) + ) +} + +/** Holds if the underlying expression is a call to the close function. Provided that the function parameter does not change after the call. */ +predicate closeReturn(FunctionCall fc) { + fcloseCall(fc, _) and + not exists(Expr exptmp | + ( + exptmp = fc.getArgument(0).(VariableAccess).getTarget().getAnAssignedValue() or + exptmp.(AddressOfExpr).getOperand() = + fc.getArgument(0).(VariableAccess).getTarget().getAnAccess() + ) and + exptmp = fc.getASuccessor*() + ) and + ( + ( + not fc.getArgument(0) instanceof PointerFieldAccess and + not fc.getArgument(0) instanceof ValueFieldAccess + or + fc.getArgument(0).(VariableAccess).getQualifier() instanceof ThisExpr + ) + or + not exists(Expr exptmp | + ( + exptmp = + fc.getArgument(0) + .(VariableAccess) + .getQualifier() + .(VariableAccess) + .getTarget() + .getAnAssignedValue() or + exptmp.(AddressOfExpr).getOperand() = + fc.getArgument(0) + .(VariableAccess) + .getQualifier() + .(VariableAccess) + .getTarget() + .getAnAccess() + ) and + exptmp = fc.getASuccessor*() + ) + ) +} + +/** Holds if the underlying expression is a call to the close function. Provided that the function parameter does not change before the call. */ +predicate closeWithoutChangeBefore(FunctionCall fc) { + fcloseCall(fc, _) and + not exists(Expr exptmp | + ( + exptmp = fc.getArgument(0).(VariableAccess).getTarget().getAnAssignedValue() or + exptmp.(AddressOfExpr).getOperand() = + fc.getArgument(0).(VariableAccess).getTarget().getAnAccess() + ) and + exptmp = fc.getAPredecessor*() + ) and + ( + ( + not fc.getArgument(0) instanceof PointerFieldAccess and + not fc.getArgument(0) instanceof ValueFieldAccess + or + fc.getArgument(0).(VariableAccess).getQualifier() instanceof ThisExpr + ) + or + not exists(Expr exptmp | + ( + exptmp = + fc.getArgument(0) + .(VariableAccess) + .getQualifier() + .(VariableAccess) + .getTarget() + .getAnAssignedValue() or + exptmp.(AddressOfExpr).getOperand() = + fc.getArgument(0) + .(VariableAccess) + .getQualifier() + .(VariableAccess) + .getTarget() + .getAnAccess() + ) and + exptmp = fc.getAPredecessor*() + ) + ) +} + +/** Holds, if a sequential call of the specified functions is possible, via a higher-level function call. */ +predicate callInOtherFunctions(FunctionCall fc, FunctionCall fc1) { + exists(FunctionCall fec1, FunctionCall fec2 | + // fec1.getTarget() != fec2.getTarget() and + fc.getEnclosingFunction() != fc1.getEnclosingFunction() and + fec1 = fc.getEnclosingFunction().getACallToThisFunction() and + fec2 = fc1.getEnclosingFunction().getACallToThisFunction() and + fec1.getASuccessor*() = fec2 and + checkChangeVariable(fc, fec1, fec2) + ) +} + +/** Holds if successive calls to close functions are possible. */ +predicate interDoubleCloseFunctions(FunctionCall fc, FunctionCall fc1) { + fcloseCall(fc, _) and + fcloseCall(fc1, _) and + fc != fc1 and + fc.getASuccessor*() = fc1 and + checkChangeVariable(fc, fc, fc1) +} + +/** Holds if the first arguments of the two functions are similar. */ +predicate similarArguments(FunctionCall fc, FunctionCall fc1) { + globalValueNumber(fc.getArgument(0)) = globalValueNumber(fc1.getArgument(0)) + or + fc.getArgument(0).(VariableAccess).getTarget() = fc1.getArgument(0).(VariableAccess).getTarget() and + ( + not fc.getArgument(0) instanceof PointerFieldAccess and + not fc.getArgument(0) instanceof ValueFieldAccess + or + fc.getArgument(0).(VariableAccess).getQualifier() instanceof ThisExpr + ) + or + fc.getArgument(0).(VariableAccess).getTarget() = fc1.getArgument(0).(VariableAccess).getTarget() and + ( + fc.getArgument(0) instanceof PointerFieldAccess or + fc.getArgument(0) instanceof ValueFieldAccess + ) and + hashCons(fc.getArgument(0)) = hashCons(fc1.getArgument(0)) +} + +from FunctionCall fc, FunctionCall fc1 +where + not exists(CallMayNotReturn fctmp | fctmp = fc.getASuccessor*()) and + not exists(IfStmt ifs | ifs.getCondition().getAChild*() = fc) and + ( + closeReturn(fc) and + closeWithoutChangeBefore(fc1) and + callInOtherFunctions(fc, fc1) + or + interDoubleCloseFunctions(fc, fc1) + ) and + similarArguments(fc, fc1) +select fc, "Second call to the $@ function is possible.", fc1, fc1.getTarget().getName() From 1e88470ad8e852caffcc2afc6edde0bd10e278f6 Mon Sep 17 00:00:00 2001 From: ihsinme Date: Thu, 2 Sep 2021 10:22:49 +0300 Subject: [PATCH 131/741] Add files via upload --- .../semmle/tests/DoubleRelease.expected | 3 + .../CWE-675/semmle/tests/DoubleRelease.qlref | 1 + .../CWE/CWE-675/semmle/tests/test.cpp | 83 +++++++++++++++++++ 3 files changed, 87 insertions(+) create mode 100644 cpp/ql/test/query-tests/Security/CWE/CWE-675/semmle/tests/DoubleRelease.expected create mode 100644 cpp/ql/test/query-tests/Security/CWE/CWE-675/semmle/tests/DoubleRelease.qlref create mode 100644 cpp/ql/test/query-tests/Security/CWE/CWE-675/semmle/tests/test.cpp diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-675/semmle/tests/DoubleRelease.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-675/semmle/tests/DoubleRelease.expected new file mode 100644 index 00000000000..8bed519ab4a --- /dev/null +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-675/semmle/tests/DoubleRelease.expected @@ -0,0 +1,3 @@ +| test.cpp:20:3:20:8 | call to fclose | Second call to the $@ function is possible. | test.cpp:21:3:21:8 | call to fclose | fclose | +| test.cpp:31:3:31:8 | call to fclose | Second call to the $@ function is possible. | test.cpp:32:3:32:8 | call to fclose | fclose | +| test.cpp:38:3:38:8 | call to fclose | Second call to the $@ function is possible. | test.cpp:44:3:44:8 | call to fclose | fclose | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-675/semmle/tests/DoubleRelease.qlref b/cpp/ql/test/query-tests/Security/CWE/CWE-675/semmle/tests/DoubleRelease.qlref new file mode 100644 index 00000000000..3edd226abaa --- /dev/null +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-675/semmle/tests/DoubleRelease.qlref @@ -0,0 +1 @@ +experimental/Security/CWE/CWE-675/DoubleRelease.ql \ No newline at end of file diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-675/semmle/tests/test.cpp b/cpp/ql/test/query-tests/Security/CWE/CWE-675/semmle/tests/test.cpp new file mode 100644 index 00000000000..986a95b1ce9 --- /dev/null +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-675/semmle/tests/test.cpp @@ -0,0 +1,83 @@ +#define NULL (0) +typedef int FILE; +FILE *fopen(const char *filename, const char *mode); +int fclose(FILE *stream); +extern FILE * fe; +void test1() +{ + FILE *f; + + f = fopen("myFile.txt", "wt"); + fclose(f); // GOOD + f = NULL; +} + +void test2() +{ + FILE *f; + + f = fopen("myFile.txt", "wt"); + fclose(f); // BAD + fclose(f); +} + +void test3() +{ + FILE *f; + FILE *g; + + f = fopen("myFile.txt", "wt"); + g = f; + fclose(f); // BAD + fclose(g); +} + +int fGtest4_1() +{ + fe = fopen("myFile.txt", "wt"); + fclose(fe); // BAD + return -1; +} + +int fGtest4_2() +{ + fclose(fe); + return -1; +} + +void Gtest4() +{ + fGtest4_1(); + fGtest4_2(); +} + +int fGtest5_1() +{ + fe = fopen("myFile.txt", "wt"); + fclose(fe); // GOOD + fe = NULL; + return -1; +} + +int fGtest5_2() +{ + fclose(fe); + return -1; +} + +void Gtest5() +{ + fGtest5_1(); + fGtest5_2(); +} + +int main(int argc, char *argv[]) +{ + test1(); + test2(); + test3(); + + Gtest4(); + Gtest5(); + return 0; +} From b39bb24fcffc82785ce92e824b0c6d1bdf95fa9b Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Tue, 31 Aug 2021 09:20:27 +0200 Subject: [PATCH 132/741] Python: Add more SQLAlchemy tests --- .../frameworks/sqlalchemy/new_tests.py | 402 ++++++++++++++++++ 1 file changed, 402 insertions(+) create mode 100644 python/ql/test/experimental/library-tests/frameworks/sqlalchemy/new_tests.py diff --git a/python/ql/test/experimental/library-tests/frameworks/sqlalchemy/new_tests.py b/python/ql/test/experimental/library-tests/frameworks/sqlalchemy/new_tests.py new file mode 100644 index 00000000000..aff8c0d2fca --- /dev/null +++ b/python/ql/test/experimental/library-tests/frameworks/sqlalchemy/new_tests.py @@ -0,0 +1,402 @@ +import sqlalchemy +import sqlalchemy.orm + +# SQLAlchemy is slowly migrating to a 2.0 version, and as part of 1.4 release have a 2.0 +# style (forwards compatible) API that _can_ be adopted. So these tests are marked with +# either v1.4 or v2.0, such that we cover both. + +raw_sql = "select 'FOO'" +text_sql = sqlalchemy.text(raw_sql) + +Base = sqlalchemy.orm.declarative_base() + +# ============================================================================== +# v1.4 +# ============================================================================== + +print("v1.4") + +# Engine see https://docs.sqlalchemy.org/en/14/core/connections.html#sqlalchemy.engine.Engine + +engine = sqlalchemy.create_engine("sqlite+pysqlite:///:memory:", echo=True) + +result = engine.execute(raw_sql) # $ MISSING: getSql=raw_sql +assert result.fetchall() == [("FOO",)] +result = engine.execute(statement=raw_sql) # $ MISSING: getSql=raw_sql +assert result.fetchall() == [("FOO",)] +result = engine.execute(text_sql) # $ MISSING: getSql=text_sql +assert result.fetchall() == [("FOO",)] + +scalar_result = engine.scalar(raw_sql) # $ getSql=raw_sql +assert scalar_result == "FOO" +scalar_result = engine.scalar(statement=raw_sql) # $ MISSING: getSql=raw_sql +assert scalar_result == "FOO" + +# engine with custom execution options +# see https://docs.sqlalchemy.org/en/14/core/connections.html#sqlalchemy.engine.Engine.execution_options +engine_with_custom_exe_opts = engine.execution_options(foo=42) +result = engine_with_custom_exe_opts.execute(raw_sql) # $ MISSING: getSql=raw_sql +assert result.fetchall() == [("FOO",)] + +even_more_opts = engine_with_custom_exe_opts.execution_options(bar=43) +result = even_more_opts.execute(raw_sql) # $ MISSING: getSql=raw_sql +assert result.fetchall() == [("FOO",)] + +# Connection see https://docs.sqlalchemy.org/en/14/core/connections.html#sqlalchemy.engine.Connection +conn = engine.connect() +conn: sqlalchemy.engine.base.Connection + +result = conn.execute(raw_sql) # $ getSql=raw_sql +assert result.fetchall() == [("FOO",)] +result = conn.execute(statement=raw_sql) # $ MISSING: getSql=raw_sql +assert result.fetchall() == [("FOO",)] + +result = conn.execute(text_sql) # $ getSql=text_sql +assert result.fetchall() == [("FOO",)] +result = conn.execute(statement=text_sql) # $ MISSING: getSql=text_sql +assert result.fetchall() == [("FOO",)] + +# scalar +scalar_result = conn.scalar(raw_sql) # $ MISSING: getSql=raw_sql +assert scalar_result == "FOO" +scalar_result = conn.scalar(object_=raw_sql) # $ MISSING: getSql=raw_sql +assert scalar_result == "FOO" + +scalar_result = conn.scalar(text_sql) # $ MISSING: getSql=text_sql +assert scalar_result == "FOO" +scalar_result = conn.scalar(object_=text_sql) # $ MISSING: getSql=text_sql +assert scalar_result == "FOO" + + +# exec_driver_sql +result = conn.exec_driver_sql(raw_sql) # $ MISSING: getSql=raw_sql +assert result.fetchall() == [("FOO",)] + +# construction by object +conn = sqlalchemy.engine.base.Connection(engine) +result = conn.execute(raw_sql) # $ MISSING: getSql=raw_sql +assert result.fetchall() == [("FOO",)] + +# branched connection +branched_conn = conn.connect() +result = branched_conn.execute(text_sql) # $ MISSING: getSql=text_sql +assert result.fetchall() == [("FOO",)] + +# raw connection +raw_conn = conn.connection +result = raw_conn.execute(raw_sql) # $ MISSING: getSql=raw_sql +assert result.fetchall() == [("FOO",)] + +cursor = raw_conn.cursor() +cursor.execute(raw_sql) # $ MISSING: getSql=raw_sql +assert cursor.fetchall() == [("FOO",)] +cursor.close() + +raw_conn = engine.raw_connection() +result = raw_conn.execute(raw_sql) # $ MISSING: getSql=raw_sql +assert result.fetchall() == [("FOO",)] + +# connection with custom execution options +conn_with_custom_exe_opts = conn.execution_options(bar=1337) +result = conn_with_custom_exe_opts.execute(text_sql) # $ MISSING: getSql=text_sql +assert result.fetchall() == [("FOO",)] + +# Session -- is what you use to work with the ORM layer +# see https://docs.sqlalchemy.org/en/14/orm/session_basics.html +# and https://docs.sqlalchemy.org/en/14/orm/session_api.html#sqlalchemy.orm.Session + +session = sqlalchemy.orm.Session(engine) + +result = session.execute(raw_sql) # $ MISSING: getSql=raw_sql +assert result.fetchall() == [("FOO",)] +result = session.execute(statement=raw_sql) # $ MISSING: getSql=raw_sql +assert result.fetchall() == [("FOO",)] + +result = session.execute(text_sql) # $ MISSING: getSql=text_sql +assert result.fetchall() == [("FOO",)] +result = session.execute(statement=text_sql) # $ MISSING: getSql=text_sql +assert result.fetchall() == [("FOO",)] + +# scalar +scalar_result = session.scalar(raw_sql) # $ MISSING: getSql=raw_sql +assert scalar_result == "FOO" +scalar_result = session.scalar(statement=raw_sql) # $ MISSING: getSql=raw_sql +assert scalar_result == "FOO" + +scalar_result = session.scalar(text_sql) # $ MISSING: getSql=text_sql +assert scalar_result == "FOO" +scalar_result = session.scalar(statement=text_sql) # $ MISSING: getSql=text_sql +assert scalar_result == "FOO" + +# other ways to construct a session +with sqlalchemy.orm.Session(engine) as session: + result = session.execute(raw_sql) # $ MISSING: getSql=raw_sql + assert result.fetchall() == [("FOO",)] + +Session = sqlalchemy.orm.sessionmaker(engine) +session = Session() + +result = session.execute(raw_sql) # $ MISSING: getSql=raw_sql +assert result.fetchall() == [("FOO",)] + +with Session() as session: + result = session.execute(raw_sql) # $ MISSING: getSql=raw_sql + assert result.fetchall() == [("FOO",)] + +with Session.begin() as session: + result = session.execute(raw_sql) # $ MISSING: getSql=raw_sql + assert result.fetchall() == [("FOO",)] + +# Querying (1.4) +# see https://docs.sqlalchemy.org/en/14/orm/session_basics.html#querying-1-x-style + +# to do so we first need a model + +class For14(Base): + __tablename__ = "for14" + + id = sqlalchemy.Column(sqlalchemy.Integer, primary_key=True) + description = sqlalchemy.Column(sqlalchemy.String) + +Base.metadata.create_all(engine) + +# add a test-entry +test_entry = For14(id=14, description="test") +session = sqlalchemy.orm.Session(engine) +session.add(test_entry) +session.commit() +assert session.query(For14).all()[0].id == 14 + +# and now we can do the actual querying + +text_foo = sqlalchemy.text("'FOO'") + +# filter_by is only vulnerable to injection if sqlalchemy.text is used, which is evident +# from the logs produced if this file is run +# that is, first filter_by results in the SQL +# +# SELECT for14.id AS for14_id, for14.description AS for14_description +# FROM for14 +# WHERE for14.description = ? +# +# which is then called with the argument `'FOO'` +# +# and the second filter_by results in the SQL +# +# SELECT for14.id AS for14_id, for14.description AS for14_description +# FROM for14 +# WHERE for14.description = 'FOO' +# +# which is then called without any arguments +assert session.query(For14).filter_by(description="'FOO'").all() == [] +query = session.query(For14).filter_by(description=text_foo) # $ MISSING: getSql=text_foo +assert query.all() == [] + +# `filter` provides more general filtering +# see https://docs.sqlalchemy.org/en/14/orm/tutorial.html#common-filter-operators +# and https://docs.sqlalchemy.org/en/14/orm/query.html#sqlalchemy.orm.Query.filter +assert session.query(For14).filter(For14.description == "'FOO'").all() == [] +query = session.query(For14).filter(For14.description == text_foo) # $ MISSING: getSql=text_foo +assert query.all() == [] + +assert session.query(For14).filter(For14.description.like("'FOO'")).all() == [] +query = session.query(For14).filter(For14.description.like(text_foo)) # $ MISSING: getSql=text_foo +assert query.all() == [] + +# `where` is alias for `filter` +assert session.query(For14).where(For14.description == "'FOO'").all() == [] +query = session.query(For14).where(For14.description == text_foo) # $ MISSING: getSql=text_foo +assert query.all() == [] + + +# not possible to do SQL injection on `.get` +try: + session.query(For14).get(text_foo) +except sqlalchemy.exc.InterfaceError: + pass + +# group_by +assert session.query(For14).group_by(For14.description).all() != [] +query = session.query(For14).group_by(text_foo) # $ MISSING: getSql=text_foo +assert query.all() != [] + +# having (only used in connection with group_by) +assert session.query(For14).group_by(For14.description).having( + sqlalchemy.func.count(For14.id) > 2 +).all() == [] +query = session.query(For14).group_by(For14.description).having(text_foo) # $ MISSING: getSql=text_foo +assert query.all() == [] + +# order_by +assert session.query(For14).order_by(For14.description).all() != [] +query = session.query(For14).order_by(text_foo) # $ MISSING: getSql=text_foo +assert query.all() != [] + +# TODO: likewise, it should be possible to target the criterion for: +# - `join` https://docs.sqlalchemy.org/en/14/orm/query.html#sqlalchemy.orm.Query.join +# - `outerjoin` https://docs.sqlalchemy.org/en/14/orm/query.html#sqlalchemy.orm.Query.outerjoin + +# specifying session later on +# see https://docs.sqlalchemy.org/en/14/orm/query.html#sqlalchemy.orm.Query.with_session +query = sqlalchemy.orm.Query(For14).filter(For14.description == text_foo) # $ MISSING: getSql=text_foo +assert query.with_session(session).all() == [] + +# ============================================================================== +# v2.0 +# ============================================================================== +import sqlalchemy.future + +print("-"*80) +print("v2.0 style") + +# For Engine, see https://docs.sqlalchemy.org/en/14/core/future.html#sqlalchemy.future.Engine +engine = sqlalchemy.create_engine("sqlite+pysqlite:///:memory:", echo=True, future=True) +future_engine = sqlalchemy.future.create_engine("sqlite+pysqlite:///:memory:", echo=True) + +# in 2.0 you are not allowed to execute things directly on the engine +try: + engine.execute(raw_sql) + raise Exception("above not allowed in 2.0") +except NotImplementedError: + pass +try: + engine.execute(text_sql) + raise Exception("above not allowed in 2.0") +except NotImplementedError: + pass + + +# `connect` returns a new Connection object. +# see https://docs.sqlalchemy.org/en/14/core/future.html#sqlalchemy.future.Connection +print("v2.0 engine.connect") +with engine.connect() as conn: + conn: sqlalchemy.future.Connection + + # in 2.0 you are not allowed to use raw strings like this: + try: + conn.execute(raw_sql) # $ SPURIOUS: getSql=raw_sql + raise Exception("above not allowed in 2.0") + except sqlalchemy.exc.ObjectNotExecutableError: + pass + + result = conn.execute(text_sql) # $ getSql=text_sql + assert result.fetchall() == [("FOO",)] + result = conn.execute(statement=text_sql) # $ MISSING: getSql=text_sql + assert result.fetchall() == [("FOO",)] + + result = conn.exec_driver_sql(raw_sql) # $ MISSING: getSql=raw_sql + assert result.fetchall() == [("FOO",)] + + raw_conn = conn.connection + result = raw_conn.execute(raw_sql) # $ MISSING: getSql=raw_sql + assert result.fetchall() == [("FOO",)] + + # branching not allowed in 2.0 + try: + branched_conn = conn.connect() + raise Exception("above not allowed in 2.0") + except NotImplementedError: + pass + + # connection with custom execution options + conn_with_custom_exe_opts = conn.execution_options(bar=1337) + result = conn_with_custom_exe_opts.execute(text_sql) # $ MISSING: getSql=text_sql + assert result.fetchall() == [("FOO",)] + + # `scalar` is shorthand helper + try: + conn.scalar(raw_sql) + except sqlalchemy.exc.ObjectNotExecutableError: + pass + scalar_result = conn.scalar(text_sql) # $ MISSING: getSql=text_sql + assert scalar_result == "FOO" + scalar_result = conn.scalar(statement=text_sql) # $ MISSING: getSql=text_sql + assert scalar_result == "FOO" + + # This is a contrived example + select = sqlalchemy.select(sqlalchemy.text("'BAR'")) + result = conn.execute(select) # $ getSql=select + assert result.fetchall() == [("BAR",)] + + # This is a contrived example + select = sqlalchemy.select(sqlalchemy.literal_column("'BAZ'")) + result = conn.execute(select) # $ getSql=select + assert result.fetchall() == [("BAZ",)] + +with future_engine.connect() as conn: + result = conn.execute(text_sql) # $ MISSING: getSql=text_sql + assert result.fetchall() == [("FOO",)] + +# `begin` returns a new Connection object with a transaction begun. +print("v2.0 engine.begin") +with engine.begin() as conn: + result = conn.execute(text_sql) # $ getSql=text_sql + assert result.fetchall() == [("FOO",)] + +# construction by object +conn = sqlalchemy.future.Connection(engine) +result = conn.execute(text_sql) # $ MISSING: getSql=text_sql +assert result.fetchall() == [("FOO",)] + +# raw_connection + +raw_conn = engine.raw_connection() +result = raw_conn.execute(raw_sql) # $ MISSING: getSql=raw_sql +assert result.fetchall() == [("FOO",)] + +cursor = raw_conn.cursor() +cursor.execute(raw_sql) # $ MISSING: getSql=raw_sql +assert cursor.fetchall() == [("FOO",)] +cursor.close() + +# Session (2.0) +session = sqlalchemy.orm.Session(engine, future=True) + +result = session.execute(raw_sql) # $ MISSING: getSql=raw_sql +assert result.fetchall() == [("FOO",)] +result = session.execute(statement=raw_sql) # $ MISSING: getSql=raw_sql +assert result.fetchall() == [("FOO",)] + +result = session.execute(text_sql) # $ MISSING: getSql=text_sql +assert result.fetchall() == [("FOO",)] +result = session.execute(statement=text_sql) # $ MISSING: getSql=text_sql +assert result.fetchall() == [("FOO",)] + +# scalar +scalar_result = session.scalar(raw_sql) # $ MISSING: getSql=raw_sql +assert scalar_result == "FOO" +scalar_result = session.scalar(statement=raw_sql) # $ MISSING: getSql=raw_sql +assert scalar_result == "FOO" + +scalar_result = session.scalar(text_sql) # $ MISSING: getSql=text_sql +assert scalar_result == "FOO" +scalar_result = session.scalar(statement=text_sql) # $ MISSING: getSql=text_sql +assert scalar_result == "FOO" + +# Querying (2.0) + +class For20(Base): + __tablename__ = "for20" + + id = sqlalchemy.Column(sqlalchemy.Integer, primary_key=True) + description = sqlalchemy.Column(sqlalchemy.String) + +For20.metadata.create_all(engine) + +# add a test-entry +test_entry = For20(id=20, description="test") +session = sqlalchemy.orm.Session(engine, future=True) +session.add(test_entry) +session.commit() +assert session.query(For20).all()[0].id == 20 + +# and now we can do the actual querying +# see https://docs.sqlalchemy.org/en/14/orm/session_basics.html#querying-2-0-style + +statement = sqlalchemy.select(For20) +result = session.execute(statement) +assert result.scalars().all()[0].id == 20 + +statement = sqlalchemy.select(For20).where(For20.description == text_foo) # $ MISSING: getSql=text_foo +result = session.execute(statement) +assert result.scalars().all() == [] From fe143c7dfad65a035e657c5706a864c2a3b6e363 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Wed, 1 Sep 2021 14:58:55 +0200 Subject: [PATCH 133/741] Python: Rewrite most of SQLAlchemy modeling --- .../semmle/python/frameworks/SqlAlchemy.qll | 332 +++++++++++++----- .../frameworks/sqlalchemy/new_tests.py | 86 ++--- 2 files changed, 290 insertions(+), 128 deletions(-) diff --git a/python/ql/src/experimental/semmle/python/frameworks/SqlAlchemy.qll b/python/ql/src/experimental/semmle/python/frameworks/SqlAlchemy.qll index 00d550d9844..c7f2d53040e 100644 --- a/python/ql/src/experimental/semmle/python/frameworks/SqlAlchemy.qll +++ b/python/ql/src/experimental/semmle/python/frameworks/SqlAlchemy.qll @@ -1,6 +1,8 @@ /** - * Provides classes modeling security-relevant aspects of the 'SqlAlchemy' package. - * See https://pypi.org/project/SQLAlchemy/. + * Provides classes modeling security-relevant aspects of the `SQLAlchemy` PyPI package. + * See + * - https://pypi.org/project/SQLAlchemy/ + * - https://docs.sqlalchemy.org/en/14/index.html */ private import python @@ -10,93 +12,209 @@ private import semmle.python.ApiGraphs private import semmle.python.Concepts private import experimental.semmle.python.Concepts +/** + * Provides models for the `SQLAlchemy` PyPI package. + * See + * - https://pypi.org/project/SQLAlchemy/ + * - https://docs.sqlalchemy.org/en/14/index.html + */ private module SqlAlchemy { /** - * Returns an instantization of a SqlAlchemy Session object. - * See https://docs.sqlalchemy.org/en/14/orm/session_api.html#sqlalchemy.orm.Session and - * https://docs.sqlalchemy.org/en/14/orm/session_api.html#sqlalchemy.orm.sessionmaker - */ - private API::Node getSqlAlchemySessionInstance() { - result = API::moduleImport("sqlalchemy.orm").getMember("Session").getReturn() or - result = API::moduleImport("sqlalchemy.orm").getMember("sessionmaker").getReturn().getReturn() - } - - /** - * Returns an instantization of a SqlAlchemy Engine object. - * See https://docs.sqlalchemy.org/en/14/core/engines.html#sqlalchemy.create_engine - */ - private API::Node getSqlAlchemyEngineInstance() { - result = API::moduleImport("sqlalchemy").getMember("create_engine").getReturn() - } - - /** - * Returns an instantization of a SqlAlchemy Query object. - * See https://docs.sqlalchemy.org/en/14/orm/query.html?highlight=query#sqlalchemy.orm.Query - */ - private API::Node getSqlAlchemyQueryInstance() { - result = getSqlAlchemySessionInstance().getMember("query").getReturn() - } - - /** - * A call to `execute` meant to execute an SQL expression - * See the following links: - * - https://docs.sqlalchemy.org/en/14/core/connections.html?highlight=execute#sqlalchemy.engine.Connection.execute - * - https://docs.sqlalchemy.org/en/14/core/connections.html?highlight=execute#sqlalchemy.engine.Engine.execute - * - https://docs.sqlalchemy.org/en/14/orm/session_api.html?highlight=execute#sqlalchemy.orm.Session.execute - */ - private class SqlAlchemyExecuteCall extends DataFlow::CallCfgNode, SqlExecution::Range { - SqlAlchemyExecuteCall() { - // new way - this = getSqlAlchemySessionInstance().getMember("execute").getACall() or - this = - getSqlAlchemyEngineInstance() - .getMember(["connect", "begin"]) - .getReturn() - .getMember("execute") - .getACall() - } - - override DataFlow::Node getSql() { result = this.getArg(0) } - } - - /** - * A call to `scalar` meant to execute an SQL expression - * See https://docs.sqlalchemy.org/en/14/orm/session_api.html#sqlalchemy.orm.Session.scalar and - * https://docs.sqlalchemy.org/en/14/core/connections.html?highlight=scalar#sqlalchemy.engine.Engine.scalar - */ - private class SqlAlchemyScalarCall extends DataFlow::CallCfgNode, SqlExecution::Range { - SqlAlchemyScalarCall() { - this = - [getSqlAlchemySessionInstance(), getSqlAlchemyEngineInstance()] - .getMember("scalar") - .getACall() - } - - override DataFlow::Node getSql() { result = this.getArg(0) } - } - - /** - * A call on a Query object - * See https://docs.sqlalchemy.org/en/14/orm/query.html?highlight=query#sqlalchemy.orm.Query - */ - private class SqlAlchemyQueryCall extends DataFlow::CallCfgNode, SqlExecution::Range { - SqlAlchemyQueryCall() { - this = - getSqlAlchemyQueryInstance() - .getMember(any(SqlAlchemyVulnerableMethodNames methodName)) - .getACall() - } - - override DataFlow::Node getSql() { result = this.getArg(0) } - } - - /** - * This class represents a list of methods vulnerable to sql injection. + * Provides models for the `sqlalchemy.engine.Engine` and `sqlalchemy.future.Engine` classes. * - * See https://github.com/jty-team/codeql/pull/2#issue-611592361 + * These are so similar that we model both in the same way. + * + * See + * - https://docs.sqlalchemy.org/en/14/core/connections.html#sqlalchemy.engine.Engine + * - https://docs.sqlalchemy.org/en/14/core/future.html#sqlalchemy.future.Engine */ - private class SqlAlchemyVulnerableMethodNames extends string { - SqlAlchemyVulnerableMethodNames() { this in ["filter", "filter_by", "group_by", "order_by"] } + module Engine { + /** Gets a reference to a SQLAlchemy Engine class. */ + private API::Node classRef() { + result = API::moduleImport("sqlalchemy").getMember("engine").getMember("Engine") + or + result = API::moduleImport("sqlalchemy").getMember("future").getMember("Engine") + } + + /** + * A source of instances of a SQLAlchemy Engine, extend this class to model new instances. + * + * This can include instantiations of the class, return values from function + * calls, or a special parameter that will be set when functions are called by an external + * library. + * + * Use the predicate `Engine::instance()` to get references to instances of a SQLAlchemy Engine. + */ + abstract class InstanceSource extends DataFlow::LocalSourceNode { } + + private class EngineConstruction extends InstanceSource, DataFlow::CallCfgNode { + EngineConstruction() { + this = classRef().getACall() + or + this = API::moduleImport("sqlalchemy").getMember("create_engine").getACall() + or + this = + API::moduleImport("sqlalchemy").getMember("future").getMember("create_engine").getACall() + or + this.(DataFlow::MethodCallNode).calls(instance(), "execution_options") + } + } + + /** Gets a reference to an instance of a SQLAlchemy Engine. */ + private DataFlow::TypeTrackingNode instance(DataFlow::TypeTracker t) { + t.start() and + result instanceof InstanceSource + or + exists(DataFlow::TypeTracker t2 | result = instance(t2).track(t2, t)) + } + + /** Gets a reference to an instance of a SQLAlchemy Engine. */ + DataFlow::Node instance() { instance(DataFlow::TypeTracker::end()).flowsTo(result) } + } + + /** + * Provides models for the `sqlalchemy.engine.base.Connection` and `sqlalchemy.future.Connection` classes. + * + * These are so similar that we model both in the same way. + * + * See + * - https://docs.sqlalchemy.org/en/14/core/connections.html#sqlalchemy.engine.Connection + * - https://docs.sqlalchemy.org/en/14/core/future.html#sqlalchemy.future.Connection + */ + module Connection { + /** Gets a reference to a SQLAlchemy Connection class. */ + private API::Node classRef() { + result = + API::moduleImport("sqlalchemy") + .getMember("engine") + .getMember("base") + .getMember("Connection") + or + result = API::moduleImport("sqlalchemy").getMember("future").getMember("Connection") + } + + /** + * A source of instances of a SQLAlchemy Connection, extend this class to model new instances. + * + * This can include instantiations of the class, return values from function + * calls, or a special parameter that will be set when functions are called by an external + * library. + * + * Use the predicate `Connection::instance()` to get references to instances of a SQLAlchemy Connection. + */ + abstract class InstanceSource extends DataFlow::LocalSourceNode { } + + private class ConnectionConstruction extends InstanceSource, DataFlow::CallCfgNode { + ConnectionConstruction() { + this = classRef().getACall() + or + this.(DataFlow::MethodCallNode).calls(Engine::instance(), ["begin", "connect"]) + or + this.(DataFlow::MethodCallNode).calls(instance(), "connect") + } + } + + /** Gets a reference to an instance of a SQLAlchemy Connection. */ + private DataFlow::TypeTrackingNode instance(DataFlow::TypeTracker t) { + t.start() and + result instanceof InstanceSource + or + exists(DataFlow::TypeTracker t2 | result = instance(t2).track(t2, t)) + } + + /** Gets a reference to an instance of a SQLAlchemy Connection. */ + DataFlow::Node instance() { instance(DataFlow::TypeTracker::end()).flowsTo(result) } + } + + /** + * Provides models for the `sqlalchemy.orm.Session` class + * + * See + * - https://docs.sqlalchemy.org/en/14/orm/session_api.html#sqlalchemy.orm.Session + * - https://docs.sqlalchemy.org/en/14/orm/session_basics.html + */ + module Session { + /** Gets a reference to the `sqlalchemy.orm.Session` class. */ + private API::Node classRef() { + result = API::moduleImport("sqlalchemy").getMember("orm").getMember("Session") + } + + /** + * A source of instances of `sqlalchemy.orm.Session`, extend this class to model new instances. + * + * This can include instantiations of the class, return values from function + * calls, or a special parameter that will be set when functions are called by an external + * library. + * + * Use the predicate `Session::instance()` to get references to instances of `sqlalchemy.orm.Session`. + */ + abstract class InstanceSource extends DataFlow::LocalSourceNode { } + + private class SessionConstruction extends InstanceSource, DataFlow::CallCfgNode { + SessionConstruction() { + this = classRef().getACall() + or + this = + API::moduleImport("sqlalchemy") + .getMember("orm") + .getMember("sessionmaker") + .getReturn() + .getACall() + } + } + + /** Gets a reference to an instance of `sqlalchemy.orm.Session`. */ + private DataFlow::TypeTrackingNode instance(DataFlow::TypeTracker t) { + t.start() and + result instanceof InstanceSource + or + exists(DataFlow::TypeTracker t2 | result = instance(t2).track(t2, t)) + } + + /** Gets a reference to an instance of `sqlalchemy.orm.Session`. */ + DataFlow::Node instance() { instance(DataFlow::TypeTracker::end()).flowsTo(result) } + } + + /** + * A call to `execute` on a SQLAlchemy Engine, Connection, or Session. + * See + * - https://docs.sqlalchemy.org/en/14/core/connections.html#sqlalchemy.engine.Engine.execute + * - https://docs.sqlalchemy.org/en/14/core/connections.html#sqlalchemy.engine.Connection.execute + * - https://docs.sqlalchemy.org/en/14/core/future.html#sqlalchemy.future.Connection.execute + * - https://docs.sqlalchemy.org/en/14/orm/session_api.html#sqlalchemy.orm.Session.execute + */ + private class SqlAlchemyExecuteCall extends DataFlow::MethodCallNode, SqlExecution::Range { + SqlAlchemyExecuteCall() { + this.calls(Engine::instance(), "execute") + or + this.calls(Connection::instance(), "execute") + or + this.calls(Session::instance(), "execute") + } + + override DataFlow::Node getSql() { result in [this.getArg(0), this.getArgByName("statement")] } + } + + /** + * A call to `scalar` on a SQLAlchemy Engine, Connection, or Session. + * See + * - https://docs.sqlalchemy.org/en/14/core/connections.html#sqlalchemy.engine.Engine.scalar + * - https://docs.sqlalchemy.org/en/14/core/connections.html#sqlalchemy.engine.Connection.scalar + * - https://docs.sqlalchemy.org/en/14/core/future.html#sqlalchemy.future.Connection.scalar + * - https://docs.sqlalchemy.org/en/14/orm/session_api.html#sqlalchemy.orm.Session.scalar + */ + private class SqlAlchemyScalarCall extends DataFlow::MethodCallNode, SqlExecution::Range { + SqlAlchemyScalarCall() { + this.calls(Engine::instance(), "scalar") + or + this.calls(Connection::instance(), "scalar") + or + this.calls(Session::instance(), "scalar") + } + + override DataFlow::Node getSql() { + result in [this.getArg(0), this.getArgByName("statement"), this.getArgByName("object_")] + } } /** @@ -146,3 +264,47 @@ private module SqlAlchemy { override DataFlow::Node getAnInput() { result = this.getArg(0) } } } + +private module OldModeling { + /** + * Returns an instantization of a SqlAlchemy Session object. + * See https://docs.sqlalchemy.org/en/14/orm/session_api.html#sqlalchemy.orm.Session and + * https://docs.sqlalchemy.org/en/14/orm/session_api.html#sqlalchemy.orm.sessionmaker + */ + private API::Node getSqlAlchemySessionInstance() { + result = API::moduleImport("sqlalchemy.orm").getMember("Session").getReturn() or + result = API::moduleImport("sqlalchemy.orm").getMember("sessionmaker").getReturn().getReturn() + } + + /** + * Returns an instantization of a SqlAlchemy Query object. + * See https://docs.sqlalchemy.org/en/14/orm/query.html?highlight=query#sqlalchemy.orm.Query + */ + private API::Node getSqlAlchemyQueryInstance() { + result = getSqlAlchemySessionInstance().getMember("query").getReturn() + } + + /** + * A call on a Query object + * See https://docs.sqlalchemy.org/en/14/orm/query.html?highlight=query#sqlalchemy.orm.Query + */ + private class SqlAlchemyQueryCall extends DataFlow::CallCfgNode, SqlExecution::Range { + SqlAlchemyQueryCall() { + this = + getSqlAlchemyQueryInstance() + .getMember(any(SqlAlchemyVulnerableMethodNames methodName)) + .getACall() + } + + override DataFlow::Node getSql() { result = this.getArg(0) } + } + + /** + * This class represents a list of methods vulnerable to sql injection. + * + * See https://github.com/jty-team/codeql/pull/2#issue-611592361 + */ + private class SqlAlchemyVulnerableMethodNames extends string { + SqlAlchemyVulnerableMethodNames() { this in ["filter", "filter_by", "group_by", "order_by"] } + } +} diff --git a/python/ql/test/experimental/library-tests/frameworks/sqlalchemy/new_tests.py b/python/ql/test/experimental/library-tests/frameworks/sqlalchemy/new_tests.py index aff8c0d2fca..4ff94966712 100644 --- a/python/ql/test/experimental/library-tests/frameworks/sqlalchemy/new_tests.py +++ b/python/ql/test/experimental/library-tests/frameworks/sqlalchemy/new_tests.py @@ -20,26 +20,26 @@ print("v1.4") engine = sqlalchemy.create_engine("sqlite+pysqlite:///:memory:", echo=True) -result = engine.execute(raw_sql) # $ MISSING: getSql=raw_sql +result = engine.execute(raw_sql) # $ getSql=raw_sql assert result.fetchall() == [("FOO",)] -result = engine.execute(statement=raw_sql) # $ MISSING: getSql=raw_sql +result = engine.execute(statement=raw_sql) # $ getSql=raw_sql assert result.fetchall() == [("FOO",)] -result = engine.execute(text_sql) # $ MISSING: getSql=text_sql +result = engine.execute(text_sql) # $ getSql=text_sql assert result.fetchall() == [("FOO",)] scalar_result = engine.scalar(raw_sql) # $ getSql=raw_sql assert scalar_result == "FOO" -scalar_result = engine.scalar(statement=raw_sql) # $ MISSING: getSql=raw_sql +scalar_result = engine.scalar(statement=raw_sql) # $ getSql=raw_sql assert scalar_result == "FOO" # engine with custom execution options # see https://docs.sqlalchemy.org/en/14/core/connections.html#sqlalchemy.engine.Engine.execution_options engine_with_custom_exe_opts = engine.execution_options(foo=42) -result = engine_with_custom_exe_opts.execute(raw_sql) # $ MISSING: getSql=raw_sql +result = engine_with_custom_exe_opts.execute(raw_sql) # $ getSql=raw_sql assert result.fetchall() == [("FOO",)] even_more_opts = engine_with_custom_exe_opts.execution_options(bar=43) -result = even_more_opts.execute(raw_sql) # $ MISSING: getSql=raw_sql +result = even_more_opts.execute(raw_sql) # $ getSql=raw_sql assert result.fetchall() == [("FOO",)] # Connection see https://docs.sqlalchemy.org/en/14/core/connections.html#sqlalchemy.engine.Connection @@ -48,23 +48,23 @@ conn: sqlalchemy.engine.base.Connection result = conn.execute(raw_sql) # $ getSql=raw_sql assert result.fetchall() == [("FOO",)] -result = conn.execute(statement=raw_sql) # $ MISSING: getSql=raw_sql +result = conn.execute(statement=raw_sql) # $ getSql=raw_sql assert result.fetchall() == [("FOO",)] result = conn.execute(text_sql) # $ getSql=text_sql assert result.fetchall() == [("FOO",)] -result = conn.execute(statement=text_sql) # $ MISSING: getSql=text_sql +result = conn.execute(statement=text_sql) # $ getSql=text_sql assert result.fetchall() == [("FOO",)] # scalar -scalar_result = conn.scalar(raw_sql) # $ MISSING: getSql=raw_sql +scalar_result = conn.scalar(raw_sql) # $ getSql=raw_sql assert scalar_result == "FOO" -scalar_result = conn.scalar(object_=raw_sql) # $ MISSING: getSql=raw_sql +scalar_result = conn.scalar(object_=raw_sql) # $ getSql=raw_sql assert scalar_result == "FOO" -scalar_result = conn.scalar(text_sql) # $ MISSING: getSql=text_sql +scalar_result = conn.scalar(text_sql) # $ getSql=text_sql assert scalar_result == "FOO" -scalar_result = conn.scalar(object_=text_sql) # $ MISSING: getSql=text_sql +scalar_result = conn.scalar(object_=text_sql) # $ getSql=text_sql assert scalar_result == "FOO" @@ -74,12 +74,12 @@ assert result.fetchall() == [("FOO",)] # construction by object conn = sqlalchemy.engine.base.Connection(engine) -result = conn.execute(raw_sql) # $ MISSING: getSql=raw_sql +result = conn.execute(raw_sql) # $ getSql=raw_sql assert result.fetchall() == [("FOO",)] # branched connection branched_conn = conn.connect() -result = branched_conn.execute(text_sql) # $ MISSING: getSql=text_sql +result = branched_conn.execute(text_sql) # $ getSql=text_sql assert result.fetchall() == [("FOO",)] # raw connection @@ -107,40 +107,40 @@ assert result.fetchall() == [("FOO",)] session = sqlalchemy.orm.Session(engine) -result = session.execute(raw_sql) # $ MISSING: getSql=raw_sql +result = session.execute(raw_sql) # $ getSql=raw_sql assert result.fetchall() == [("FOO",)] -result = session.execute(statement=raw_sql) # $ MISSING: getSql=raw_sql +result = session.execute(statement=raw_sql) # $ getSql=raw_sql assert result.fetchall() == [("FOO",)] -result = session.execute(text_sql) # $ MISSING: getSql=text_sql +result = session.execute(text_sql) # $ getSql=text_sql assert result.fetchall() == [("FOO",)] -result = session.execute(statement=text_sql) # $ MISSING: getSql=text_sql +result = session.execute(statement=text_sql) # $ getSql=text_sql assert result.fetchall() == [("FOO",)] # scalar -scalar_result = session.scalar(raw_sql) # $ MISSING: getSql=raw_sql +scalar_result = session.scalar(raw_sql) # $ getSql=raw_sql assert scalar_result == "FOO" -scalar_result = session.scalar(statement=raw_sql) # $ MISSING: getSql=raw_sql +scalar_result = session.scalar(statement=raw_sql) # $ getSql=raw_sql assert scalar_result == "FOO" -scalar_result = session.scalar(text_sql) # $ MISSING: getSql=text_sql +scalar_result = session.scalar(text_sql) # $ getSql=text_sql assert scalar_result == "FOO" -scalar_result = session.scalar(statement=text_sql) # $ MISSING: getSql=text_sql +scalar_result = session.scalar(statement=text_sql) # $ getSql=text_sql assert scalar_result == "FOO" # other ways to construct a session with sqlalchemy.orm.Session(engine) as session: - result = session.execute(raw_sql) # $ MISSING: getSql=raw_sql + result = session.execute(raw_sql) # $ getSql=raw_sql assert result.fetchall() == [("FOO",)] Session = sqlalchemy.orm.sessionmaker(engine) session = Session() -result = session.execute(raw_sql) # $ MISSING: getSql=raw_sql +result = session.execute(raw_sql) # $ getSql=raw_sql assert result.fetchall() == [("FOO",)] with Session() as session: - result = session.execute(raw_sql) # $ MISSING: getSql=raw_sql + result = session.execute(raw_sql) # $ getSql=raw_sql assert result.fetchall() == [("FOO",)] with Session.begin() as session: @@ -255,12 +255,12 @@ future_engine = sqlalchemy.future.create_engine("sqlite+pysqlite:///:memory:", e # in 2.0 you are not allowed to execute things directly on the engine try: - engine.execute(raw_sql) + engine.execute(raw_sql) # $ SPURIOUS: getSql=raw_sql raise Exception("above not allowed in 2.0") except NotImplementedError: pass try: - engine.execute(text_sql) + engine.execute(text_sql) # $ SPURIOUS: getSql=text_sql raise Exception("above not allowed in 2.0") except NotImplementedError: pass @@ -281,7 +281,7 @@ with engine.connect() as conn: result = conn.execute(text_sql) # $ getSql=text_sql assert result.fetchall() == [("FOO",)] - result = conn.execute(statement=text_sql) # $ MISSING: getSql=text_sql + result = conn.execute(statement=text_sql) # $ getSql=text_sql assert result.fetchall() == [("FOO",)] result = conn.exec_driver_sql(raw_sql) # $ MISSING: getSql=raw_sql @@ -305,12 +305,12 @@ with engine.connect() as conn: # `scalar` is shorthand helper try: - conn.scalar(raw_sql) + conn.scalar(raw_sql) # $ SPURIOUS: getSql=raw_sql except sqlalchemy.exc.ObjectNotExecutableError: pass - scalar_result = conn.scalar(text_sql) # $ MISSING: getSql=text_sql + scalar_result = conn.scalar(text_sql) # $ getSql=text_sql assert scalar_result == "FOO" - scalar_result = conn.scalar(statement=text_sql) # $ MISSING: getSql=text_sql + scalar_result = conn.scalar(statement=text_sql) # $ getSql=text_sql assert scalar_result == "FOO" # This is a contrived example @@ -324,7 +324,7 @@ with engine.connect() as conn: assert result.fetchall() == [("BAZ",)] with future_engine.connect() as conn: - result = conn.execute(text_sql) # $ MISSING: getSql=text_sql + result = conn.execute(text_sql) # $ getSql=text_sql assert result.fetchall() == [("FOO",)] # `begin` returns a new Connection object with a transaction begun. @@ -335,7 +335,7 @@ with engine.begin() as conn: # construction by object conn = sqlalchemy.future.Connection(engine) -result = conn.execute(text_sql) # $ MISSING: getSql=text_sql +result = conn.execute(text_sql) # $ getSql=text_sql assert result.fetchall() == [("FOO",)] # raw_connection @@ -352,25 +352,25 @@ cursor.close() # Session (2.0) session = sqlalchemy.orm.Session(engine, future=True) -result = session.execute(raw_sql) # $ MISSING: getSql=raw_sql +result = session.execute(raw_sql) # $ getSql=raw_sql assert result.fetchall() == [("FOO",)] -result = session.execute(statement=raw_sql) # $ MISSING: getSql=raw_sql +result = session.execute(statement=raw_sql) # $ getSql=raw_sql assert result.fetchall() == [("FOO",)] -result = session.execute(text_sql) # $ MISSING: getSql=text_sql +result = session.execute(text_sql) # $ getSql=text_sql assert result.fetchall() == [("FOO",)] -result = session.execute(statement=text_sql) # $ MISSING: getSql=text_sql +result = session.execute(statement=text_sql) # $ getSql=text_sql assert result.fetchall() == [("FOO",)] # scalar -scalar_result = session.scalar(raw_sql) # $ MISSING: getSql=raw_sql +scalar_result = session.scalar(raw_sql) # $ getSql=raw_sql assert scalar_result == "FOO" -scalar_result = session.scalar(statement=raw_sql) # $ MISSING: getSql=raw_sql +scalar_result = session.scalar(statement=raw_sql) # $ getSql=raw_sql assert scalar_result == "FOO" -scalar_result = session.scalar(text_sql) # $ MISSING: getSql=text_sql +scalar_result = session.scalar(text_sql) # $ getSql=text_sql assert scalar_result == "FOO" -scalar_result = session.scalar(statement=text_sql) # $ MISSING: getSql=text_sql +scalar_result = session.scalar(statement=text_sql) # $ getSql=text_sql assert scalar_result == "FOO" # Querying (2.0) @@ -394,9 +394,9 @@ assert session.query(For20).all()[0].id == 20 # see https://docs.sqlalchemy.org/en/14/orm/session_basics.html#querying-2-0-style statement = sqlalchemy.select(For20) -result = session.execute(statement) +result = session.execute(statement) # $ getSql=statement assert result.scalars().all()[0].id == 20 statement = sqlalchemy.select(For20).where(For20.description == text_foo) # $ MISSING: getSql=text_foo -result = session.execute(statement) +result = session.execute(statement) # $ getSql=statement assert result.scalars().all() == [] From 2acf518037014ed0b43f4ea85a7b93ecb80c5539 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Wed, 1 Sep 2021 15:00:52 +0200 Subject: [PATCH 134/741] Python: Model `exec_driver_sql` --- .../semmle/python/frameworks/SqlAlchemy.qll | 12 ++++++++++++ .../library-tests/frameworks/sqlalchemy/new_tests.py | 4 ++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/python/ql/src/experimental/semmle/python/frameworks/SqlAlchemy.qll b/python/ql/src/experimental/semmle/python/frameworks/SqlAlchemy.qll index c7f2d53040e..4a7ad47bc96 100644 --- a/python/ql/src/experimental/semmle/python/frameworks/SqlAlchemy.qll +++ b/python/ql/src/experimental/semmle/python/frameworks/SqlAlchemy.qll @@ -195,6 +195,18 @@ private module SqlAlchemy { override DataFlow::Node getSql() { result in [this.getArg(0), this.getArgByName("statement")] } } + /** + * A call to `exec_driver_sql` on a SQLAlchemy Connection. + * See + * - https://docs.sqlalchemy.org/en/14/core/connections.html#sqlalchemy.engine.Connection.exec_driver_sql + * - https://docs.sqlalchemy.org/en/14/core/future.html#sqlalchemy.future.Connection.exec_driver_sql + */ + private class SqlAlchemyExecDriverSqlCall extends DataFlow::MethodCallNode, SqlExecution::Range { + SqlAlchemyExecDriverSqlCall() { this.calls(Connection::instance(), "exec_driver_sql") } + + override DataFlow::Node getSql() { result in [this.getArg(0), this.getArgByName("statement")] } + } + /** * A call to `scalar` on a SQLAlchemy Engine, Connection, or Session. * See diff --git a/python/ql/test/experimental/library-tests/frameworks/sqlalchemy/new_tests.py b/python/ql/test/experimental/library-tests/frameworks/sqlalchemy/new_tests.py index 4ff94966712..a310ad87ef6 100644 --- a/python/ql/test/experimental/library-tests/frameworks/sqlalchemy/new_tests.py +++ b/python/ql/test/experimental/library-tests/frameworks/sqlalchemy/new_tests.py @@ -69,7 +69,7 @@ assert scalar_result == "FOO" # exec_driver_sql -result = conn.exec_driver_sql(raw_sql) # $ MISSING: getSql=raw_sql +result = conn.exec_driver_sql(raw_sql) # $ getSql=raw_sql assert result.fetchall() == [("FOO",)] # construction by object @@ -284,7 +284,7 @@ with engine.connect() as conn: result = conn.execute(statement=text_sql) # $ getSql=text_sql assert result.fetchall() == [("FOO",)] - result = conn.exec_driver_sql(raw_sql) # $ MISSING: getSql=raw_sql + result = conn.exec_driver_sql(raw_sql) # $ getSql=raw_sql assert result.fetchall() == [("FOO",)] raw_conn = conn.connection From 1ab04a72767515f7e3a1106a60ef461e165ca607 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Wed, 1 Sep 2021 15:03:13 +0200 Subject: [PATCH 135/741] Python: Model `Connection.execution_options` --- .../src/experimental/semmle/python/frameworks/SqlAlchemy.qll | 2 ++ .../library-tests/frameworks/sqlalchemy/new_tests.py | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/python/ql/src/experimental/semmle/python/frameworks/SqlAlchemy.qll b/python/ql/src/experimental/semmle/python/frameworks/SqlAlchemy.qll index 4a7ad47bc96..3389a1830dd 100644 --- a/python/ql/src/experimental/semmle/python/frameworks/SqlAlchemy.qll +++ b/python/ql/src/experimental/semmle/python/frameworks/SqlAlchemy.qll @@ -111,6 +111,8 @@ private module SqlAlchemy { this.(DataFlow::MethodCallNode).calls(Engine::instance(), ["begin", "connect"]) or this.(DataFlow::MethodCallNode).calls(instance(), "connect") + or + this.(DataFlow::MethodCallNode).calls(instance(), "execution_options") } } diff --git a/python/ql/test/experimental/library-tests/frameworks/sqlalchemy/new_tests.py b/python/ql/test/experimental/library-tests/frameworks/sqlalchemy/new_tests.py index a310ad87ef6..cc012951839 100644 --- a/python/ql/test/experimental/library-tests/frameworks/sqlalchemy/new_tests.py +++ b/python/ql/test/experimental/library-tests/frameworks/sqlalchemy/new_tests.py @@ -98,7 +98,7 @@ assert result.fetchall() == [("FOO",)] # connection with custom execution options conn_with_custom_exe_opts = conn.execution_options(bar=1337) -result = conn_with_custom_exe_opts.execute(text_sql) # $ MISSING: getSql=text_sql +result = conn_with_custom_exe_opts.execute(text_sql) # $ getSql=text_sql assert result.fetchall() == [("FOO",)] # Session -- is what you use to work with the ORM layer @@ -300,7 +300,7 @@ with engine.connect() as conn: # connection with custom execution options conn_with_custom_exe_opts = conn.execution_options(bar=1337) - result = conn_with_custom_exe_opts.execute(text_sql) # $ MISSING: getSql=text_sql + result = conn_with_custom_exe_opts.execute(text_sql) # $ getSql=text_sql assert result.fetchall() == [("FOO",)] # `scalar` is shorthand helper From feb2303e1f3222b5b0b68650392b1cd2b877cb5c Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Wed, 1 Sep 2021 15:13:11 +0200 Subject: [PATCH 136/741] Python: Model the underlying DB-API connection --- .../semmle/python/frameworks/SqlAlchemy.qll | 40 +++++++++++++++++++ .../frameworks/sqlalchemy/new_tests.py | 12 +++--- 2 files changed, 46 insertions(+), 6 deletions(-) diff --git a/python/ql/src/experimental/semmle/python/frameworks/SqlAlchemy.qll b/python/ql/src/experimental/semmle/python/frameworks/SqlAlchemy.qll index 3389a1830dd..78210ba3fb5 100644 --- a/python/ql/src/experimental/semmle/python/frameworks/SqlAlchemy.qll +++ b/python/ql/src/experimental/semmle/python/frameworks/SqlAlchemy.qll @@ -11,6 +11,9 @@ private import semmle.python.dataflow.new.TaintTracking private import semmle.python.ApiGraphs private import semmle.python.Concepts private import experimental.semmle.python.Concepts +// This import is done like this to avoid importing the deprecated top-level things that +// would pollute the namespace +private import semmle.python.frameworks.PEP249::PEP249 as PEP249 /** * Provides models for the `SQLAlchemy` PyPI package. @@ -128,6 +131,43 @@ private module SqlAlchemy { DataFlow::Node instance() { instance(DataFlow::TypeTracker::end()).flowsTo(result) } } + /** + * Provides models for the underlying DB-API Connection of a SQLAlchemy Connection. + * + * See https://docs.sqlalchemy.org/en/14/core/connections.html#dbapi-connections. + */ + module DBAPIConnection { + /** + * A source of instances of DB-API Connections, extend this class to model new instances. + * + * This can include instantiations of the class, return values from function + * calls, or a special parameter that will be set when functions are called by an external + * library. + * + * Use the predicate `DBAPIConnection::instance()` to get references to instances of DB-API Connections. + */ + abstract class InstanceSource extends DataFlow::LocalSourceNode { } + + private class DBAPIConnectionSources extends InstanceSource, PEP249::Connection::InstanceSource { + DBAPIConnectionSources() { + this.(DataFlow::MethodCallNode).calls(Engine::instance(), "raw_connection") + or + this.(DataFlow::AttrRead).accesses(Connection::instance(), "connection") + } + } + + /** Gets a reference to an instance of DB-API Connections. */ + private DataFlow::TypeTrackingNode instance(DataFlow::TypeTracker t) { + t.start() and + result instanceof InstanceSource + or + exists(DataFlow::TypeTracker t2 | result = instance(t2).track(t2, t)) + } + + /** Gets a reference to an instance of DB-API Connections. */ + DataFlow::Node instance() { instance(DataFlow::TypeTracker::end()).flowsTo(result) } + } + /** * Provides models for the `sqlalchemy.orm.Session` class * diff --git a/python/ql/test/experimental/library-tests/frameworks/sqlalchemy/new_tests.py b/python/ql/test/experimental/library-tests/frameworks/sqlalchemy/new_tests.py index cc012951839..64231db1f5f 100644 --- a/python/ql/test/experimental/library-tests/frameworks/sqlalchemy/new_tests.py +++ b/python/ql/test/experimental/library-tests/frameworks/sqlalchemy/new_tests.py @@ -84,16 +84,16 @@ assert result.fetchall() == [("FOO",)] # raw connection raw_conn = conn.connection -result = raw_conn.execute(raw_sql) # $ MISSING: getSql=raw_sql +result = raw_conn.execute(raw_sql) # $ getSql=raw_sql assert result.fetchall() == [("FOO",)] cursor = raw_conn.cursor() -cursor.execute(raw_sql) # $ MISSING: getSql=raw_sql +cursor.execute(raw_sql) # $ getSql=raw_sql assert cursor.fetchall() == [("FOO",)] cursor.close() raw_conn = engine.raw_connection() -result = raw_conn.execute(raw_sql) # $ MISSING: getSql=raw_sql +result = raw_conn.execute(raw_sql) # $ getSql=raw_sql assert result.fetchall() == [("FOO",)] # connection with custom execution options @@ -288,7 +288,7 @@ with engine.connect() as conn: assert result.fetchall() == [("FOO",)] raw_conn = conn.connection - result = raw_conn.execute(raw_sql) # $ MISSING: getSql=raw_sql + result = raw_conn.execute(raw_sql) # $ getSql=raw_sql assert result.fetchall() == [("FOO",)] # branching not allowed in 2.0 @@ -341,11 +341,11 @@ assert result.fetchall() == [("FOO",)] # raw_connection raw_conn = engine.raw_connection() -result = raw_conn.execute(raw_sql) # $ MISSING: getSql=raw_sql +result = raw_conn.execute(raw_sql) # $ getSql=raw_sql assert result.fetchall() == [("FOO",)] cursor = raw_conn.cursor() -cursor.execute(raw_sql) # $ MISSING: getSql=raw_sql +cursor.execute(raw_sql) # $ getSql=raw_sql assert cursor.fetchall() == [("FOO",)] cursor.close() From 91442e100c6179cd34a3c29e196ffba27f037f26 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Wed, 1 Sep 2021 15:14:31 +0200 Subject: [PATCH 137/741] Python: Model `sessionmaker().begin()` --- .../experimental/semmle/python/frameworks/SqlAlchemy.qll | 8 ++++++++ .../library-tests/frameworks/sqlalchemy/new_tests.py | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/python/ql/src/experimental/semmle/python/frameworks/SqlAlchemy.qll b/python/ql/src/experimental/semmle/python/frameworks/SqlAlchemy.qll index 78210ba3fb5..2712c756597 100644 --- a/python/ql/src/experimental/semmle/python/frameworks/SqlAlchemy.qll +++ b/python/ql/src/experimental/semmle/python/frameworks/SqlAlchemy.qll @@ -202,6 +202,14 @@ private module SqlAlchemy { .getMember("sessionmaker") .getReturn() .getACall() + or + this = + API::moduleImport("sqlalchemy") + .getMember("orm") + .getMember("sessionmaker") + .getReturn() + .getMember("begin") + .getACall() } } diff --git a/python/ql/test/experimental/library-tests/frameworks/sqlalchemy/new_tests.py b/python/ql/test/experimental/library-tests/frameworks/sqlalchemy/new_tests.py index 64231db1f5f..7e12fa60ee3 100644 --- a/python/ql/test/experimental/library-tests/frameworks/sqlalchemy/new_tests.py +++ b/python/ql/test/experimental/library-tests/frameworks/sqlalchemy/new_tests.py @@ -144,7 +144,7 @@ with Session() as session: assert result.fetchall() == [("FOO",)] with Session.begin() as session: - result = session.execute(raw_sql) # $ MISSING: getSql=raw_sql + result = session.execute(raw_sql) # $ getSql=raw_sql assert result.fetchall() == [("FOO",)] # Querying (1.4) From ba99e218754b6668fb8d1122f94efba8813dd4e1 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Wed, 1 Sep 2021 20:43:18 +0200 Subject: [PATCH 138/741] Python: Remove modeling of `sqlescapy` PyPI package I've never seen this being used in real code, and this library doesn't have a lot of traction, so I would rather not commit to supporting it (which includes verifying that it actually makes things safe). Personally I don't think this is the right approach for avoiding SQL injection either. --- .../semmle/python/frameworks/SqlAlchemy.qll | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/python/ql/src/experimental/semmle/python/frameworks/SqlAlchemy.qll b/python/ql/src/experimental/semmle/python/frameworks/SqlAlchemy.qll index 2712c756597..2967450f10d 100644 --- a/python/ql/src/experimental/semmle/python/frameworks/SqlAlchemy.qll +++ b/python/ql/src/experimental/semmle/python/frameworks/SqlAlchemy.qll @@ -312,19 +312,6 @@ private module SqlAlchemy { ) } } - - /** - * Gets a reference to `sqlescapy.sqlescape`. - * - * See https://pypi.org/project/sqlescapy/ - */ - class SQLEscapySanitizerCall extends DataFlow::CallCfgNode, SQLEscape::Range { - SQLEscapySanitizerCall() { - this = API::moduleImport("sqlescapy").getMember("sqlescape").getACall() - } - - override DataFlow::Node getAnInput() { result = this.getArg(0) } - } } private module OldModeling { From 81dbe36e9902277df14561c7a915506b2fc13f3c Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Wed, 1 Sep 2021 21:57:43 +0200 Subject: [PATCH 139/741] Python: Promote `SQLAlchemy` modeling Due to the split between `src/` and `lib/`, I was not really able to do the next step without having moved the SQLAlchemy modeling over to be in `lib/` as well. --- docs/codeql/support/reusables/frameworks.rst | 1 + python/change-notes/2021-09-02-add-SQLAlchemy-modeling.md | 2 ++ python/ql/lib/semmle/python/Frameworks.qll | 3 ++- .../semmle/python/frameworks/SqlAlchemy.qll | 1 - .../library-tests/frameworks/sqlalchemy/ConceptsTest.expected | 0 .../library-tests/frameworks/sqlalchemy/ConceptsTest.ql | 0 .../frameworks/sqlalchemy/InlineTaintTest.expected | 0 .../library-tests/frameworks/sqlalchemy/InlineTaintTest.ql | 0 .../library-tests/frameworks/sqlalchemy/SqlExecution.py | 0 .../library-tests/frameworks/sqlalchemy/new_tests.py | 0 .../library-tests/frameworks/sqlalchemy/taint_test.py | 0 11 files changed, 5 insertions(+), 2 deletions(-) create mode 100644 python/change-notes/2021-09-02-add-SQLAlchemy-modeling.md rename python/ql/{src/experimental => lib}/semmle/python/frameworks/SqlAlchemy.qll (99%) rename python/ql/test/{experimental => }/library-tests/frameworks/sqlalchemy/ConceptsTest.expected (100%) rename python/ql/test/{experimental => }/library-tests/frameworks/sqlalchemy/ConceptsTest.ql (100%) rename python/ql/test/{experimental => }/library-tests/frameworks/sqlalchemy/InlineTaintTest.expected (100%) rename python/ql/test/{experimental => }/library-tests/frameworks/sqlalchemy/InlineTaintTest.ql (100%) rename python/ql/test/{experimental => }/library-tests/frameworks/sqlalchemy/SqlExecution.py (100%) rename python/ql/test/{experimental => }/library-tests/frameworks/sqlalchemy/new_tests.py (100%) rename python/ql/test/{experimental => }/library-tests/frameworks/sqlalchemy/taint_test.py (100%) diff --git a/docs/codeql/support/reusables/frameworks.rst b/docs/codeql/support/reusables/frameworks.rst index 59899b8c58b..39c9cbba83b 100644 --- a/docs/codeql/support/reusables/frameworks.rst +++ b/docs/codeql/support/reusables/frameworks.rst @@ -177,6 +177,7 @@ Python built-in support psycopg2, Database sqlite3, Database peewee, Database ORM + SQLAlchemy, Database ORM cryptography, Cryptography library pycryptodome, Cryptography library pycryptodomex, Cryptography library diff --git a/python/change-notes/2021-09-02-add-SQLAlchemy-modeling.md b/python/change-notes/2021-09-02-add-SQLAlchemy-modeling.md new file mode 100644 index 00000000000..9ba7a72614b --- /dev/null +++ b/python/change-notes/2021-09-02-add-SQLAlchemy-modeling.md @@ -0,0 +1,2 @@ +lgtm,codescanning +* Added modeling of SQL execution in the `SQLAlchemy` PyPI package, resulting in additional sinks for the SQL Injection query (`py/sql-injection`). This modeling was originally [submitted as a contribution by @mrthankyou](https://github.com/github/codeql/pull/5680). diff --git a/python/ql/lib/semmle/python/Frameworks.qll b/python/ql/lib/semmle/python/Frameworks.qll index c6499e13508..591094ff208 100644 --- a/python/ql/lib/semmle/python/Frameworks.qll +++ b/python/ql/lib/semmle/python/Frameworks.qll @@ -20,13 +20,14 @@ private import semmle.python.frameworks.MarkupSafe private import semmle.python.frameworks.Multidict private import semmle.python.frameworks.Mysql private import semmle.python.frameworks.MySQLdb +private import semmle.python.frameworks.Peewee private import semmle.python.frameworks.Psycopg2 private import semmle.python.frameworks.PyMySQL private import semmle.python.frameworks.Rsa private import semmle.python.frameworks.Simplejson +private import semmle.python.frameworks.SqlAlchemy private import semmle.python.frameworks.Stdlib private import semmle.python.frameworks.Tornado -private import semmle.python.frameworks.Peewee private import semmle.python.frameworks.Twisted private import semmle.python.frameworks.Ujson private import semmle.python.frameworks.Yaml diff --git a/python/ql/src/experimental/semmle/python/frameworks/SqlAlchemy.qll b/python/ql/lib/semmle/python/frameworks/SqlAlchemy.qll similarity index 99% rename from python/ql/src/experimental/semmle/python/frameworks/SqlAlchemy.qll rename to python/ql/lib/semmle/python/frameworks/SqlAlchemy.qll index 2967450f10d..b06d91ab559 100644 --- a/python/ql/src/experimental/semmle/python/frameworks/SqlAlchemy.qll +++ b/python/ql/lib/semmle/python/frameworks/SqlAlchemy.qll @@ -10,7 +10,6 @@ private import semmle.python.dataflow.new.DataFlow private import semmle.python.dataflow.new.TaintTracking private import semmle.python.ApiGraphs private import semmle.python.Concepts -private import experimental.semmle.python.Concepts // This import is done like this to avoid importing the deprecated top-level things that // would pollute the namespace private import semmle.python.frameworks.PEP249::PEP249 as PEP249 diff --git a/python/ql/test/experimental/library-tests/frameworks/sqlalchemy/ConceptsTest.expected b/python/ql/test/library-tests/frameworks/sqlalchemy/ConceptsTest.expected similarity index 100% rename from python/ql/test/experimental/library-tests/frameworks/sqlalchemy/ConceptsTest.expected rename to python/ql/test/library-tests/frameworks/sqlalchemy/ConceptsTest.expected diff --git a/python/ql/test/experimental/library-tests/frameworks/sqlalchemy/ConceptsTest.ql b/python/ql/test/library-tests/frameworks/sqlalchemy/ConceptsTest.ql similarity index 100% rename from python/ql/test/experimental/library-tests/frameworks/sqlalchemy/ConceptsTest.ql rename to python/ql/test/library-tests/frameworks/sqlalchemy/ConceptsTest.ql diff --git a/python/ql/test/experimental/library-tests/frameworks/sqlalchemy/InlineTaintTest.expected b/python/ql/test/library-tests/frameworks/sqlalchemy/InlineTaintTest.expected similarity index 100% rename from python/ql/test/experimental/library-tests/frameworks/sqlalchemy/InlineTaintTest.expected rename to python/ql/test/library-tests/frameworks/sqlalchemy/InlineTaintTest.expected diff --git a/python/ql/test/experimental/library-tests/frameworks/sqlalchemy/InlineTaintTest.ql b/python/ql/test/library-tests/frameworks/sqlalchemy/InlineTaintTest.ql similarity index 100% rename from python/ql/test/experimental/library-tests/frameworks/sqlalchemy/InlineTaintTest.ql rename to python/ql/test/library-tests/frameworks/sqlalchemy/InlineTaintTest.ql diff --git a/python/ql/test/experimental/library-tests/frameworks/sqlalchemy/SqlExecution.py b/python/ql/test/library-tests/frameworks/sqlalchemy/SqlExecution.py similarity index 100% rename from python/ql/test/experimental/library-tests/frameworks/sqlalchemy/SqlExecution.py rename to python/ql/test/library-tests/frameworks/sqlalchemy/SqlExecution.py diff --git a/python/ql/test/experimental/library-tests/frameworks/sqlalchemy/new_tests.py b/python/ql/test/library-tests/frameworks/sqlalchemy/new_tests.py similarity index 100% rename from python/ql/test/experimental/library-tests/frameworks/sqlalchemy/new_tests.py rename to python/ql/test/library-tests/frameworks/sqlalchemy/new_tests.py diff --git a/python/ql/test/experimental/library-tests/frameworks/sqlalchemy/taint_test.py b/python/ql/test/library-tests/frameworks/sqlalchemy/taint_test.py similarity index 100% rename from python/ql/test/experimental/library-tests/frameworks/sqlalchemy/taint_test.py rename to python/ql/test/library-tests/frameworks/sqlalchemy/taint_test.py From c34d6d116274dec8891ec3ccbf8d7c32db517501 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Thu, 2 Sep 2021 10:13:12 +0200 Subject: [PATCH 140/741] Python: Add query to handle SQLAlchemy TextClause Injection instead of doing this via taint-steps. See description in code/tests. --- ...add-SQLAlchemyTextClauseInjection-query.md | 2 + .../semmle/python/frameworks/SqlAlchemy.qll | 130 ++++++++---------- .../dataflow/SQLAlchemyTextClause.qll | 35 +++++ .../SQLAlchemyTextClauseCustomizations.qll | 56 ++++++++ .../SQLAlchemyTextClauseInjection.qhelp | 52 +++++++ .../CWE-089/SQLAlchemyTextClauseInjection.ql | 23 ++++ .../sqlalchemy_textclause_injection.py | 34 +++++ .../frameworks/sqlalchemy/ConceptsTest.ql | 1 - .../frameworks/sqlalchemy/InlineTaintTest.ql | 1 - .../frameworks/sqlalchemy/SqlExecution.py | 8 +- .../frameworks/sqlalchemy/new_tests.py | 68 ++++----- .../frameworks/sqlalchemy/taint_test.py | 30 +++- .../SQLAlchemyTextClauseInjection.expected | 34 +++++ .../SQLAlchemyTextClauseInjection.qlref | 1 + .../test.py | 43 ++++++ 15 files changed, 391 insertions(+), 127 deletions(-) create mode 100644 python/change-notes/2021-09-02-add-SQLAlchemyTextClauseInjection-query.md create mode 100644 python/ql/lib/semmle/python/security/dataflow/SQLAlchemyTextClause.qll create mode 100644 python/ql/lib/semmle/python/security/dataflow/SQLAlchemyTextClauseCustomizations.qll create mode 100644 python/ql/src/Security/CWE-089/SQLAlchemyTextClauseInjection.qhelp create mode 100644 python/ql/src/Security/CWE-089/SQLAlchemyTextClauseInjection.ql create mode 100644 python/ql/src/Security/CWE-089/examples/sqlalchemy_textclause_injection.py create mode 100644 python/ql/test/query-tests/Security/CWE-089-SQLAlchemyTextClauseInjection/SQLAlchemyTextClauseInjection.expected create mode 100644 python/ql/test/query-tests/Security/CWE-089-SQLAlchemyTextClauseInjection/SQLAlchemyTextClauseInjection.qlref create mode 100644 python/ql/test/query-tests/Security/CWE-089-SQLAlchemyTextClauseInjection/test.py diff --git a/python/change-notes/2021-09-02-add-SQLAlchemyTextClauseInjection-query.md b/python/change-notes/2021-09-02-add-SQLAlchemyTextClauseInjection-query.md new file mode 100644 index 00000000000..ad842e60b63 --- /dev/null +++ b/python/change-notes/2021-09-02-add-SQLAlchemyTextClauseInjection-query.md @@ -0,0 +1,2 @@ +lgtm,codescanning +* Introduced a new query _SQLAlchemy TextClause built from user-controlled sources_ (`py/sqlalchemy-textclause-injection`) to alert if user-input is added to a TextClause from SQLAlchemy, since that can lead to SQL injection. diff --git a/python/ql/lib/semmle/python/frameworks/SqlAlchemy.qll b/python/ql/lib/semmle/python/frameworks/SqlAlchemy.qll index b06d91ab559..56a97ade24c 100644 --- a/python/ql/lib/semmle/python/frameworks/SqlAlchemy.qll +++ b/python/ql/lib/semmle/python/frameworks/SqlAlchemy.qll @@ -15,12 +15,14 @@ private import semmle.python.Concepts private import semmle.python.frameworks.PEP249::PEP249 as PEP249 /** + * INTERNAL: Do not use. + * * Provides models for the `SQLAlchemy` PyPI package. * See * - https://pypi.org/project/SQLAlchemy/ * - https://docs.sqlalchemy.org/en/14/index.html */ -private module SqlAlchemy { +module SqlAlchemy { /** * Provides models for the `sqlalchemy.engine.Engine` and `sqlalchemy.future.Engine` classes. * @@ -279,80 +281,62 @@ private module SqlAlchemy { } /** - * Additional taint-steps for `sqlalchemy.text()` + * Provides models for the `sqlalchemy.sql.expression.TextClause` class, + * which represents a textual SQL string directly. * - * See https://docs.sqlalchemy.org/en/14/core/sqlelement.html#sqlalchemy.sql.expression.text - * See https://docs.sqlalchemy.org/en/14/core/sqlelement.html#sqlalchemy.sql.expression.TextClause + * ```py + * session.query(For14).filter_by(description=sqlalchemy.text(f"'{user_input}'")).all() + * ``` + * + * Initially I wanted to add lots of additional taint steps for such that the normal + * SQL injection query would be able to find cases as the one above where an ORM query + * includes a TextClause that includes user-input directly... But that presented 2 + * problems: + * + * - which part of the query construction above should be marked as SQL to fit our + * `SqlExecution` concept. Nothing really fits this well, since all the SQL + * execution happens under the hood. + * - This would require a LOT of modeling for these additional taint steps, since + * there are many many constructs we would need to have models for. (see the 2 + * examples below) + * + * So instead we flag user-input to a TextClause with its' own query + * (`py/sqlalchemy-textclause-injection`). And so we don't highlight any parts of an + * ORM constructed query such as these as containing SQL, and don't need the additional + * taint steps either. + * + * See + * - https://docs.sqlalchemy.org/en/14/core/sqlelement.html#sqlalchemy.sql.expression.TextClause. + * - https://docs.sqlalchemy.org/en/14/core/sqlelement.html#sqlalchemy.sql.expression.text */ - class SqlAlchemyTextAdditionalTaintSteps extends TaintTracking::AdditionalTaintStep { - override predicate step(DataFlow::Node nodeFrom, DataFlow::Node nodeTo) { - exists(DataFlow::CallCfgNode call | - ( - call = API::moduleImport("sqlalchemy").getMember("text").getACall() - or - call = API::moduleImport("sqlalchemy").getMember("sql").getMember("text").getACall() - or - call = - API::moduleImport("sqlalchemy") - .getMember("sql") - .getMember("expression") - .getMember("text") - .getACall() - or - call = - API::moduleImport("sqlalchemy") - .getMember("sql") - .getMember("expression") - .getMember("TextClause") - .getACall() - ) and - nodeFrom in [call.getArg(0), call.getArgByName("text")] and - nodeTo = call - ) + module TextClause { + /** + * A construction of a `sqlalchemy.sql.expression.TextClause`, which represents a + * textual SQL string directly. + */ + class TextClauseConstruction extends DataFlow::CallCfgNode { + TextClauseConstruction() { + this = API::moduleImport("sqlalchemy").getMember("text").getACall() + or + this = API::moduleImport("sqlalchemy").getMember("sql").getMember("text").getACall() + or + this = + API::moduleImport("sqlalchemy") + .getMember("sql") + .getMember("expression") + .getMember("text") + .getACall() + or + this = + API::moduleImport("sqlalchemy") + .getMember("sql") + .getMember("expression") + .getMember("TextClause") + .getACall() + } + + /** Gets the argument that specifies the SQL text. */ + DataFlow::Node getTextArg() { result in [this.getArg(0), this.getArgByName("text")] } } } } - -private module OldModeling { - /** - * Returns an instantization of a SqlAlchemy Session object. - * See https://docs.sqlalchemy.org/en/14/orm/session_api.html#sqlalchemy.orm.Session and - * https://docs.sqlalchemy.org/en/14/orm/session_api.html#sqlalchemy.orm.sessionmaker - */ - private API::Node getSqlAlchemySessionInstance() { - result = API::moduleImport("sqlalchemy.orm").getMember("Session").getReturn() or - result = API::moduleImport("sqlalchemy.orm").getMember("sessionmaker").getReturn().getReturn() - } - - /** - * Returns an instantization of a SqlAlchemy Query object. - * See https://docs.sqlalchemy.org/en/14/orm/query.html?highlight=query#sqlalchemy.orm.Query - */ - private API::Node getSqlAlchemyQueryInstance() { - result = getSqlAlchemySessionInstance().getMember("query").getReturn() - } - - /** - * A call on a Query object - * See https://docs.sqlalchemy.org/en/14/orm/query.html?highlight=query#sqlalchemy.orm.Query - */ - private class SqlAlchemyQueryCall extends DataFlow::CallCfgNode, SqlExecution::Range { - SqlAlchemyQueryCall() { - this = - getSqlAlchemyQueryInstance() - .getMember(any(SqlAlchemyVulnerableMethodNames methodName)) - .getACall() - } - - override DataFlow::Node getSql() { result = this.getArg(0) } - } - - /** - * This class represents a list of methods vulnerable to sql injection. - * - * See https://github.com/jty-team/codeql/pull/2#issue-611592361 - */ - private class SqlAlchemyVulnerableMethodNames extends string { - SqlAlchemyVulnerableMethodNames() { this in ["filter", "filter_by", "group_by", "order_by"] } - } -} diff --git a/python/ql/lib/semmle/python/security/dataflow/SQLAlchemyTextClause.qll b/python/ql/lib/semmle/python/security/dataflow/SQLAlchemyTextClause.qll new file mode 100644 index 00000000000..a4e65fe3120 --- /dev/null +++ b/python/ql/lib/semmle/python/security/dataflow/SQLAlchemyTextClause.qll @@ -0,0 +1,35 @@ +/** + * Provides a taint-tracking configuration for detecting "SQLAlchemy TextClause injection" vulnerabilities. + * + * Note, for performance reasons: only import this file if + * `SQLAlchemyTextClause::Configuration` is needed, otherwise + * `SQLAlchemyTextClauseCustomizations` should be imported instead. + */ + +private import python +import semmle.python.dataflow.new.DataFlow +import semmle.python.dataflow.new.TaintTracking + +/** + * Provides a taint-tracking configuration for detecting "SQLAlchemy TextClause injection" vulnerabilities. + */ +module SQLAlchemyTextClause { + import SQLAlchemyTextClauseCustomizations::SQLAlchemyTextClause + + /** + * A taint-tracking configuration for detecting "SQLAlchemy TextClause injection" vulnerabilities. + */ + class Configuration extends TaintTracking::Configuration { + Configuration() { this = "SQLAlchemyTextClause" } + + override predicate isSource(DataFlow::Node source) { source instanceof Source } + + override predicate isSink(DataFlow::Node sink) { sink instanceof Sink } + + override predicate isSanitizer(DataFlow::Node node) { node instanceof Sanitizer } + + override predicate isSanitizerGuard(DataFlow::BarrierGuard guard) { + guard instanceof SanitizerGuard + } + } +} diff --git a/python/ql/lib/semmle/python/security/dataflow/SQLAlchemyTextClauseCustomizations.qll b/python/ql/lib/semmle/python/security/dataflow/SQLAlchemyTextClauseCustomizations.qll new file mode 100644 index 00000000000..fa75a543ade --- /dev/null +++ b/python/ql/lib/semmle/python/security/dataflow/SQLAlchemyTextClauseCustomizations.qll @@ -0,0 +1,56 @@ +/** + * Provides default sources, sinks and sanitizers for detecting + * "SQLAlchemy TextClause injection" + * vulnerabilities, as well as extension points for adding your own. + */ + +private import python +private import semmle.python.dataflow.new.DataFlow +private import semmle.python.Concepts +private import semmle.python.dataflow.new.RemoteFlowSources +private import semmle.python.dataflow.new.BarrierGuards +private import semmle.python.frameworks.SqlAlchemy + +/** + * Provides default sources, sinks and sanitizers for detecting + * "SQLAlchemy TextClause injection" + * vulnerabilities, as well as extension points for adding your own. + */ +module SQLAlchemyTextClause { + /** + * A data flow source for "SQLAlchemy TextClause injection" vulnerabilities. + */ + abstract class Source extends DataFlow::Node { } + + /** + * A data flow sink for "SQLAlchemy TextClause injection" vulnerabilities. + */ + abstract class Sink extends DataFlow::Node { } + + /** + * A sanitizer for "SQLAlchemy TextClause injection" vulnerabilities. + */ + abstract class Sanitizer extends DataFlow::Node { } + + /** + * A sanitizer guard for "SQLAlchemy TextClause injection" vulnerabilities. + */ + abstract class SanitizerGuard extends DataFlow::BarrierGuard { } + + /** + * A source of remote user input, considered as a flow source. + */ + class RemoteFlowSourceAsSource extends Source, RemoteFlowSource { } + + /** + * The text argument of a SQLAlchemy TextClause construction, considered as a flow sink. + */ + class TextArgAsSink extends Sink { + TextArgAsSink() { this = any(SqlAlchemy::TextClause::TextClauseConstruction tcc).getTextArg() } + } + + /** + * A comparison with a constant string, considered as a sanitizer-guard. + */ + class StringConstCompareAsSanitizerGuard extends SanitizerGuard, StringConstCompare { } +} diff --git a/python/ql/src/Security/CWE-089/SQLAlchemyTextClauseInjection.qhelp b/python/ql/src/Security/CWE-089/SQLAlchemyTextClauseInjection.qhelp new file mode 100644 index 00000000000..fd87df3882c --- /dev/null +++ b/python/ql/src/Security/CWE-089/SQLAlchemyTextClauseInjection.qhelp @@ -0,0 +1,52 @@ + + + + +

    +The TextClause class in the SQLAlchemy PyPI package represents +a textual SQL string directly. If user-input is added to it without sufficient +sanitization, a user may be able to run malicious database queries, since the +TextClause is inserted directly into the final SQL. + + + +

    +Don't allow user-input to be added to a TextClause, instead construct your +full query with constructs from the ORM, or use query parameters for user-input. +

    + + + +

    +In the following snippet, a user is fetched from the database using three +different queries. +

    + +

    +In the first case, the final query string is built by directly including a user-supplied +input. The parameter may include quote characters, so this code is vulnerable to a SQL +injection attack. +

    + +

    +In the second case, the query is built using ORM models, but part of it is using a +TextClause directly including a user-supplied input. Since the +TextClause is inserted directly into the final SQL, this code is vulnerable +to a SQL injection attack. +

    + +

    +In the third case, the query is built fully using the ORM models, so in the end, the +user-supplied input will passed passed to the database using query parameters. The +database connector library will take care of escaping and inserting quotes as needed. +

    + + +
    + + +
  • Official documentation of the text parameter.
  • +
    +
    diff --git a/python/ql/src/Security/CWE-089/SQLAlchemyTextClauseInjection.ql b/python/ql/src/Security/CWE-089/SQLAlchemyTextClauseInjection.ql new file mode 100644 index 00000000000..4e4f747bf20 --- /dev/null +++ b/python/ql/src/Security/CWE-089/SQLAlchemyTextClauseInjection.ql @@ -0,0 +1,23 @@ +/** + * @name SQLAlchemy TextClause built from user-controlled sources + * @description Building a TextClause query from user-controlled sources is vulnerable to insertion of + * malicious SQL code by the user. + * @kind path-problem + * @problem.severity error + * @security-severity 8.8 + * @precision high + * @id py/sqlalchemy-textclause-injection + * @tags security + * external/cwe/cwe-089 + * external/owasp/owasp-a1 + */ + +import python +import semmle.python.security.dataflow.SQLAlchemyTextClause +import DataFlow::PathGraph + +from SQLAlchemyTextClause::Configuration config, DataFlow::PathNode source, DataFlow::PathNode sink +where config.hasFlowPath(source, sink) +select sink.getNode(), source, sink, + "This SQLAlchemy TextClause depends on $@, which could lead to SQL injection.", source.getNode(), + "a user-provided value" diff --git a/python/ql/src/Security/CWE-089/examples/sqlalchemy_textclause_injection.py b/python/ql/src/Security/CWE-089/examples/sqlalchemy_textclause_injection.py new file mode 100644 index 00000000000..030c27202de --- /dev/null +++ b/python/ql/src/Security/CWE-089/examples/sqlalchemy_textclause_injection.py @@ -0,0 +1,34 @@ +from flask import Flask, request +import sqlalchemy +import sqlalchemy.orm + +app = Flask(__name__) +engine = sqlalchemy.create_engine(...) +Base = sqlalchemy.orm.declarative_base() + + +class User(Base): + __tablename__ = "users" + + id = sqlalchemy.Column(sqlalchemy.Integer, primary_key=True) + username = sqlalchemy.Column(sqlalchemy.String) + + +@app.route("/users/") +def show_user(username): + session = sqlalchemy.orm.Session(engine) + + # BAD, normal SQL injection + stmt = sqlalchemy.text("SELECT * FROM users WHERE username = '{}'".format(username)) + results = session.execute(stmt).fetchall() + + # BAD, allows SQL injection + username_formatted_for_sql = sqlalchemy.text("'{}'".format(username)) + stmt = sqlalchemy.select(User).where(User.username == username_formatted_for_sql) + results = session.execute(stmt).scalars().all() + + # GOOD, does not allow for SQL injection + stmt = sqlalchemy.select(User).where(User.username == username) + results = session.execute(stmt).scalars().all() + + ... diff --git a/python/ql/test/library-tests/frameworks/sqlalchemy/ConceptsTest.ql b/python/ql/test/library-tests/frameworks/sqlalchemy/ConceptsTest.ql index b097eb15648..b557a0bccb6 100644 --- a/python/ql/test/library-tests/frameworks/sqlalchemy/ConceptsTest.ql +++ b/python/ql/test/library-tests/frameworks/sqlalchemy/ConceptsTest.ql @@ -1,3 +1,2 @@ import python import experimental.meta.ConceptsTest -import experimental.semmle.python.frameworks.SqlAlchemy diff --git a/python/ql/test/library-tests/frameworks/sqlalchemy/InlineTaintTest.ql b/python/ql/test/library-tests/frameworks/sqlalchemy/InlineTaintTest.ql index 2ddb342c62f..027ad8667be 100644 --- a/python/ql/test/library-tests/frameworks/sqlalchemy/InlineTaintTest.ql +++ b/python/ql/test/library-tests/frameworks/sqlalchemy/InlineTaintTest.ql @@ -1,2 +1 @@ import experimental.meta.InlineTaintTest -import experimental.semmle.python.frameworks.SqlAlchemy diff --git a/python/ql/test/library-tests/frameworks/sqlalchemy/SqlExecution.py b/python/ql/test/library-tests/frameworks/sqlalchemy/SqlExecution.py index 7731e80e534..a7c9af9da32 100644 --- a/python/ql/test/library-tests/frameworks/sqlalchemy/SqlExecution.py +++ b/python/ql/test/library-tests/frameworks/sqlalchemy/SqlExecution.py @@ -47,10 +47,10 @@ with engine.begin() as connection: # Injection requiring the text() taint-step t = text("some sql") -session.query(User).filter(t) # $ getSql=t -session.query(User).group_by(User.id).having(t) # $ getSql=User.id MISSING: getSql=t -session.query(User).group_by(t).first() # $ getSql=t -session.query(User).order_by(t).first() # $ getSql=t +session.query(User).filter(t) +session.query(User).group_by(User.id).having(t) +session.query(User).group_by(t).first() +session.query(User).order_by(t).first() query = select(User).where(User.name == t) # $ MISSING: getSql=t with engine.connect() as conn: diff --git a/python/ql/test/library-tests/frameworks/sqlalchemy/new_tests.py b/python/ql/test/library-tests/frameworks/sqlalchemy/new_tests.py index 7e12fa60ee3..0946cc0da40 100644 --- a/python/ql/test/library-tests/frameworks/sqlalchemy/new_tests.py +++ b/python/ql/test/library-tests/frameworks/sqlalchemy/new_tests.py @@ -189,57 +189,41 @@ text_foo = sqlalchemy.text("'FOO'") # # which is then called without any arguments assert session.query(For14).filter_by(description="'FOO'").all() == [] -query = session.query(For14).filter_by(description=text_foo) # $ MISSING: getSql=text_foo +query = session.query(For14).filter_by(description=text_foo) assert query.all() == [] +# Initially I wanted to add lots of additional taint steps such that the normal SQL +# injection query would find these cases where an ORM query includes a TextClause that +# includes user-input directly... But that presented 2 problems: +# +# - which part of the query construction above should be marked as SQL to fit our +# `SqlExecution` concept. Nothing really fits this well, since all the SQL execution +# happens under the hood. +# - This would require a LOT of modeling for these additional taint steps, since there +# are many many constructs we would need to have models for. (see the 2 examples below) +# +# So instead we flag user-input to a TextClause with its' own query. And so we don't +# highlight any parts of an ORM constructed query such as these as containing SQL. + # `filter` provides more general filtering # see https://docs.sqlalchemy.org/en/14/orm/tutorial.html#common-filter-operators # and https://docs.sqlalchemy.org/en/14/orm/query.html#sqlalchemy.orm.Query.filter assert session.query(For14).filter(For14.description == "'FOO'").all() == [] -query = session.query(For14).filter(For14.description == text_foo) # $ MISSING: getSql=text_foo +query = session.query(For14).filter(For14.description == text_foo) assert query.all() == [] assert session.query(For14).filter(For14.description.like("'FOO'")).all() == [] -query = session.query(For14).filter(For14.description.like(text_foo)) # $ MISSING: getSql=text_foo +query = session.query(For14).filter(For14.description.like(text_foo)) assert query.all() == [] -# `where` is alias for `filter` -assert session.query(For14).where(For14.description == "'FOO'").all() == [] -query = session.query(For14).where(For14.description == text_foo) # $ MISSING: getSql=text_foo -assert query.all() == [] - - -# not possible to do SQL injection on `.get` -try: - session.query(For14).get(text_foo) -except sqlalchemy.exc.InterfaceError: - pass - -# group_by -assert session.query(For14).group_by(For14.description).all() != [] -query = session.query(For14).group_by(text_foo) # $ MISSING: getSql=text_foo -assert query.all() != [] - -# having (only used in connection with group_by) -assert session.query(For14).group_by(For14.description).having( - sqlalchemy.func.count(For14.id) > 2 -).all() == [] -query = session.query(For14).group_by(For14.description).having(text_foo) # $ MISSING: getSql=text_foo -assert query.all() == [] - -# order_by -assert session.query(For14).order_by(For14.description).all() != [] -query = session.query(For14).order_by(text_foo) # $ MISSING: getSql=text_foo -assert query.all() != [] - -# TODO: likewise, it should be possible to target the criterion for: -# - `join` https://docs.sqlalchemy.org/en/14/orm/query.html#sqlalchemy.orm.Query.join -# - `outerjoin` https://docs.sqlalchemy.org/en/14/orm/query.html#sqlalchemy.orm.Query.outerjoin - -# specifying session later on -# see https://docs.sqlalchemy.org/en/14/orm/query.html#sqlalchemy.orm.Query.with_session -query = sqlalchemy.orm.Query(For14).filter(For14.description == text_foo) # $ MISSING: getSql=text_foo -assert query.with_session(session).all() == [] +# There are many other possibilities for ending up with SQL injection, including the +# following (not an exhaustive list): +# - `where` (alias for `filter`) +# - `group_by` +# - `having` +# - `order_by` +# - `join` +# - `outerjoin` # ============================================================================== # v2.0 @@ -374,6 +358,8 @@ scalar_result = session.scalar(statement=text_sql) # $ getSql=text_sql assert scalar_result == "FOO" # Querying (2.0) +# uses a slightly different style than 1.4 -- see note about not modeling +# ORM query construction as SQL execution at the 1.4 query tests. class For20(Base): __tablename__ = "for20" @@ -397,6 +383,6 @@ statement = sqlalchemy.select(For20) result = session.execute(statement) # $ getSql=statement assert result.scalars().all()[0].id == 20 -statement = sqlalchemy.select(For20).where(For20.description == text_foo) # $ MISSING: getSql=text_foo +statement = sqlalchemy.select(For20).where(For20.description == text_foo) result = session.execute(statement) # $ getSql=statement assert result.scalars().all() == [] diff --git a/python/ql/test/library-tests/frameworks/sqlalchemy/taint_test.py b/python/ql/test/library-tests/frameworks/sqlalchemy/taint_test.py index 91f8987132f..9e9764a411f 100644 --- a/python/ql/test/library-tests/frameworks/sqlalchemy/taint_test.py +++ b/python/ql/test/library-tests/frameworks/sqlalchemy/taint_test.py @@ -1,12 +1,28 @@ import sqlalchemy +ensure_tainted = ensure_not_tainted = print +TAINTED_STRING = "TAINTED_STRING" + def test_taint(): ts = TAINTED_STRING - ensure_tainted( - ts, # $ tainted - sqlalchemy.text(ts), # $ tainted - sqlalchemy.sql.text(ts),# $ tainted - sqlalchemy.sql.expression.text(ts),# $ tainted - sqlalchemy.sql.expression.TextClause(ts),# $ tainted - ) + ensure_tainted(ts) # $ tainted + + t1 = sqlalchemy.text(ts) + t2 = sqlalchemy.text(text=ts) + t3 = sqlalchemy.sql.text(ts) + t4 = sqlalchemy.sql.text(text=ts) + t5 = sqlalchemy.sql.expression.text(ts) + t6 = sqlalchemy.sql.expression.text(text=ts) + t7 = sqlalchemy.sql.expression.TextClause(ts) + t8 = sqlalchemy.sql.expression.TextClause(text=ts) + + # Since we flag user-input to a TextClause with its' own query, we don't want to + # have a taint-step for it as that would lead to us also giving an alert for normal + # SQL-injection... and double alerting like this does not seem desireable. + ensure_not_tainted(t1, t2, t3, t4, t5, t6, t7, t8) + + for text in [t1, t2, t3, t4, t5, t6, t7, t8]: + assert isinstance(text, sqlalchemy.sql.expression.TextClause) + +test_taint() diff --git a/python/ql/test/query-tests/Security/CWE-089-SQLAlchemyTextClauseInjection/SQLAlchemyTextClauseInjection.expected b/python/ql/test/query-tests/Security/CWE-089-SQLAlchemyTextClauseInjection/SQLAlchemyTextClauseInjection.expected new file mode 100644 index 00000000000..c2b95826a90 --- /dev/null +++ b/python/ql/test/query-tests/Security/CWE-089-SQLAlchemyTextClauseInjection/SQLAlchemyTextClauseInjection.expected @@ -0,0 +1,34 @@ +edges +| test.py:18:15:18:22 | ControlFlowNode for username | test.py:22:28:22:87 | ControlFlowNode for Attribute() | +| test.py:18:15:18:22 | ControlFlowNode for username | test.py:26:50:26:72 | ControlFlowNode for Attribute() | +| test.py:18:15:18:22 | ControlFlowNode for username | test.py:36:26:36:33 | ControlFlowNode for username | +| test.py:18:15:18:22 | ControlFlowNode for username | test.py:37:31:37:38 | ControlFlowNode for username | +| test.py:18:15:18:22 | ControlFlowNode for username | test.py:38:30:38:37 | ControlFlowNode for username | +| test.py:18:15:18:22 | ControlFlowNode for username | test.py:39:35:39:42 | ControlFlowNode for username | +| test.py:18:15:18:22 | ControlFlowNode for username | test.py:40:41:40:48 | ControlFlowNode for username | +| test.py:18:15:18:22 | ControlFlowNode for username | test.py:41:46:41:53 | ControlFlowNode for username | +| test.py:18:15:18:22 | ControlFlowNode for username | test.py:42:47:42:54 | ControlFlowNode for username | +| test.py:18:15:18:22 | ControlFlowNode for username | test.py:43:52:43:59 | ControlFlowNode for username | +nodes +| test.py:18:15:18:22 | ControlFlowNode for username | semmle.label | ControlFlowNode for username | +| test.py:22:28:22:87 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | +| test.py:26:50:26:72 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | +| test.py:36:26:36:33 | ControlFlowNode for username | semmle.label | ControlFlowNode for username | +| test.py:37:31:37:38 | ControlFlowNode for username | semmle.label | ControlFlowNode for username | +| test.py:38:30:38:37 | ControlFlowNode for username | semmle.label | ControlFlowNode for username | +| test.py:39:35:39:42 | ControlFlowNode for username | semmle.label | ControlFlowNode for username | +| test.py:40:41:40:48 | ControlFlowNode for username | semmle.label | ControlFlowNode for username | +| test.py:41:46:41:53 | ControlFlowNode for username | semmle.label | ControlFlowNode for username | +| test.py:42:47:42:54 | ControlFlowNode for username | semmle.label | ControlFlowNode for username | +| test.py:43:52:43:59 | ControlFlowNode for username | semmle.label | ControlFlowNode for username | +#select +| test.py:22:28:22:87 | ControlFlowNode for Attribute() | test.py:18:15:18:22 | ControlFlowNode for username | test.py:22:28:22:87 | ControlFlowNode for Attribute() | This SQLAlchemy TextClause depends on $@, which could lead to SQL injection. | test.py:18:15:18:22 | ControlFlowNode for username | a user-provided value | +| test.py:26:50:26:72 | ControlFlowNode for Attribute() | test.py:18:15:18:22 | ControlFlowNode for username | test.py:26:50:26:72 | ControlFlowNode for Attribute() | This SQLAlchemy TextClause depends on $@, which could lead to SQL injection. | test.py:18:15:18:22 | ControlFlowNode for username | a user-provided value | +| test.py:36:26:36:33 | ControlFlowNode for username | test.py:18:15:18:22 | ControlFlowNode for username | test.py:36:26:36:33 | ControlFlowNode for username | This SQLAlchemy TextClause depends on $@, which could lead to SQL injection. | test.py:18:15:18:22 | ControlFlowNode for username | a user-provided value | +| test.py:37:31:37:38 | ControlFlowNode for username | test.py:18:15:18:22 | ControlFlowNode for username | test.py:37:31:37:38 | ControlFlowNode for username | This SQLAlchemy TextClause depends on $@, which could lead to SQL injection. | test.py:18:15:18:22 | ControlFlowNode for username | a user-provided value | +| test.py:38:30:38:37 | ControlFlowNode for username | test.py:18:15:18:22 | ControlFlowNode for username | test.py:38:30:38:37 | ControlFlowNode for username | This SQLAlchemy TextClause depends on $@, which could lead to SQL injection. | test.py:18:15:18:22 | ControlFlowNode for username | a user-provided value | +| test.py:39:35:39:42 | ControlFlowNode for username | test.py:18:15:18:22 | ControlFlowNode for username | test.py:39:35:39:42 | ControlFlowNode for username | This SQLAlchemy TextClause depends on $@, which could lead to SQL injection. | test.py:18:15:18:22 | ControlFlowNode for username | a user-provided value | +| test.py:40:41:40:48 | ControlFlowNode for username | test.py:18:15:18:22 | ControlFlowNode for username | test.py:40:41:40:48 | ControlFlowNode for username | This SQLAlchemy TextClause depends on $@, which could lead to SQL injection. | test.py:18:15:18:22 | ControlFlowNode for username | a user-provided value | +| test.py:41:46:41:53 | ControlFlowNode for username | test.py:18:15:18:22 | ControlFlowNode for username | test.py:41:46:41:53 | ControlFlowNode for username | This SQLAlchemy TextClause depends on $@, which could lead to SQL injection. | test.py:18:15:18:22 | ControlFlowNode for username | a user-provided value | +| test.py:42:47:42:54 | ControlFlowNode for username | test.py:18:15:18:22 | ControlFlowNode for username | test.py:42:47:42:54 | ControlFlowNode for username | This SQLAlchemy TextClause depends on $@, which could lead to SQL injection. | test.py:18:15:18:22 | ControlFlowNode for username | a user-provided value | +| test.py:43:52:43:59 | ControlFlowNode for username | test.py:18:15:18:22 | ControlFlowNode for username | test.py:43:52:43:59 | ControlFlowNode for username | This SQLAlchemy TextClause depends on $@, which could lead to SQL injection. | test.py:18:15:18:22 | ControlFlowNode for username | a user-provided value | diff --git a/python/ql/test/query-tests/Security/CWE-089-SQLAlchemyTextClauseInjection/SQLAlchemyTextClauseInjection.qlref b/python/ql/test/query-tests/Security/CWE-089-SQLAlchemyTextClauseInjection/SQLAlchemyTextClauseInjection.qlref new file mode 100644 index 00000000000..ae8c3cc69b6 --- /dev/null +++ b/python/ql/test/query-tests/Security/CWE-089-SQLAlchemyTextClauseInjection/SQLAlchemyTextClauseInjection.qlref @@ -0,0 +1 @@ +Security/CWE-089/SQLAlchemyTextClauseInjection.ql diff --git a/python/ql/test/query-tests/Security/CWE-089-SQLAlchemyTextClauseInjection/test.py b/python/ql/test/query-tests/Security/CWE-089-SQLAlchemyTextClauseInjection/test.py new file mode 100644 index 00000000000..4ec56b85853 --- /dev/null +++ b/python/ql/test/query-tests/Security/CWE-089-SQLAlchemyTextClauseInjection/test.py @@ -0,0 +1,43 @@ +from flask import Flask, request +import sqlalchemy +import sqlalchemy.orm + +app = Flask(__name__) +engine = sqlalchemy.create_engine(...) +Base = sqlalchemy.orm.declarative_base() + + +class User(Base): + __tablename__ = "users" + + id = sqlalchemy.Column(sqlalchemy.Integer, primary_key=True) + username = sqlalchemy.Column(sqlalchemy.String) + + +@app.route("/users/") +def show_user(username): + session = sqlalchemy.orm.Session(engine) + + # BAD, normal SQL injection + stmt = sqlalchemy.text("SELECT * FROM users WHERE username = '{}'".format(username)) + results = session.execute(stmt).fetchall() + + # BAD, allows SQL injection + username_formatted_for_sql = sqlalchemy.text("'{}'".format(username)) + stmt = sqlalchemy.select(User).where(User.username == username_formatted_for_sql) + results = session.execute(stmt).scalars().all() + + # GOOD, does not allow for SQL injection + stmt = sqlalchemy.select(User).where(User.username == username) + results = session.execute(stmt).scalars().all() + + + # All of these should be flagged by query + t1 = sqlalchemy.text(username) + t2 = sqlalchemy.text(text=username) + t3 = sqlalchemy.sql.text(username) + t4 = sqlalchemy.sql.text(text=username) + t5 = sqlalchemy.sql.expression.text(username) + t6 = sqlalchemy.sql.expression.text(text=username) + t7 = sqlalchemy.sql.expression.TextClause(username) + t8 = sqlalchemy.sql.expression.TextClause(text=username) From f1744890b17cf944f3c5c9996f8be3b3e52bc8ae Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Thu, 2 Sep 2021 10:36:23 +0200 Subject: [PATCH 141/741] Python: Add tests for `Flask-SQLAlchemy` --- .../flask_sqlalchemy/ConceptsTest.expected | 0 .../flask_sqlalchemy/ConceptsTest.ql | 2 + .../flask_sqlalchemy/InlineTaintTest.expected | 3 + .../flask_sqlalchemy/InlineTaintTest.ql | 1 + .../flask_sqlalchemy/SqlExecution.py | 51 +++++++++++++++ .../SQLAlchemyTextClauseInjection.expected | 62 +++++++++---------- .../test.py | 8 +++ 7 files changed, 96 insertions(+), 31 deletions(-) create mode 100644 python/ql/test/library-tests/frameworks/flask_sqlalchemy/ConceptsTest.expected create mode 100644 python/ql/test/library-tests/frameworks/flask_sqlalchemy/ConceptsTest.ql create mode 100644 python/ql/test/library-tests/frameworks/flask_sqlalchemy/InlineTaintTest.expected create mode 100644 python/ql/test/library-tests/frameworks/flask_sqlalchemy/InlineTaintTest.ql create mode 100644 python/ql/test/library-tests/frameworks/flask_sqlalchemy/SqlExecution.py diff --git a/python/ql/test/library-tests/frameworks/flask_sqlalchemy/ConceptsTest.expected b/python/ql/test/library-tests/frameworks/flask_sqlalchemy/ConceptsTest.expected new file mode 100644 index 00000000000..e69de29bb2d diff --git a/python/ql/test/library-tests/frameworks/flask_sqlalchemy/ConceptsTest.ql b/python/ql/test/library-tests/frameworks/flask_sqlalchemy/ConceptsTest.ql new file mode 100644 index 00000000000..b557a0bccb6 --- /dev/null +++ b/python/ql/test/library-tests/frameworks/flask_sqlalchemy/ConceptsTest.ql @@ -0,0 +1,2 @@ +import python +import experimental.meta.ConceptsTest diff --git a/python/ql/test/library-tests/frameworks/flask_sqlalchemy/InlineTaintTest.expected b/python/ql/test/library-tests/frameworks/flask_sqlalchemy/InlineTaintTest.expected new file mode 100644 index 00000000000..79d760d87f4 --- /dev/null +++ b/python/ql/test/library-tests/frameworks/flask_sqlalchemy/InlineTaintTest.expected @@ -0,0 +1,3 @@ +argumentToEnsureNotTaintedNotMarkedAsSpurious +untaintedArgumentToEnsureTaintedNotMarkedAsMissing +failures diff --git a/python/ql/test/library-tests/frameworks/flask_sqlalchemy/InlineTaintTest.ql b/python/ql/test/library-tests/frameworks/flask_sqlalchemy/InlineTaintTest.ql new file mode 100644 index 00000000000..027ad8667be --- /dev/null +++ b/python/ql/test/library-tests/frameworks/flask_sqlalchemy/InlineTaintTest.ql @@ -0,0 +1 @@ +import experimental.meta.InlineTaintTest diff --git a/python/ql/test/library-tests/frameworks/flask_sqlalchemy/SqlExecution.py b/python/ql/test/library-tests/frameworks/flask_sqlalchemy/SqlExecution.py new file mode 100644 index 00000000000..f0f7db6130e --- /dev/null +++ b/python/ql/test/library-tests/frameworks/flask_sqlalchemy/SqlExecution.py @@ -0,0 +1,51 @@ +# pip install Flask-SQLAlchemy +from flask import Flask +from flask_sqlalchemy import SQLAlchemy +import sqlalchemy + +app = Flask(__name__) +app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite+pysqlite:///:memory:" +db = SQLAlchemy(app) + +# re-exports all things from `sqlalchemy` and `sqlalchemy.orm` under instances of `SQLAlchemy` +# see +# - https://github.com/pallets/flask-sqlalchemy/blob/931ec00d1e27f51508e05706eef41cc4419a0b32/src/flask_sqlalchemy/__init__.py#L765 +# - https://github.com/pallets/flask-sqlalchemy/blob/931ec00d1e27f51508e05706eef41cc4419a0b32/src/flask_sqlalchemy/__init__.py#L99-L109 + +assert str(type(db.text("Foo"))) == "" + +# also has engine/session instantiated + +raw_sql = "SELECT 'Foo'" + +conn = db.engine.connect() +result = conn.execute(raw_sql) # $ MISSING: getSql=raw_sql +assert result.fetchall() == [("Foo",)] + +conn = db.get_engine().connect() +result = conn.execute(raw_sql) # $ MISSING: getSql=raw_sql +assert result.fetchall() == [("Foo",)] + +result = db.session.execute(raw_sql) # $ MISSING: getSql=raw_sql +assert result.fetchall() == [("Foo",)] + +Session = db.create_session(options={}) +session = Session() +result = session.execute(raw_sql) # $ MISSING: getSql=raw_sql +assert result.fetchall() == [("Foo",)] + +Session = db.create_session(options={}) +with Session.begin() as session: + result = session.execute(raw_sql) # $ MISSING: getSql=raw_sql + assert result.fetchall() == [("Foo",)] + +result = db.create_scoped_session().execute(raw_sql) # $ MISSING: getSql=raw_sql +assert result.fetchall() == [("Foo",)] + + +# text +t = db.text("foo") +assert isinstance(t, sqlalchemy.sql.expression.TextClause) + +t = db.text(text="foo") +assert isinstance(t, sqlalchemy.sql.expression.TextClause) diff --git a/python/ql/test/query-tests/Security/CWE-089-SQLAlchemyTextClauseInjection/SQLAlchemyTextClauseInjection.expected b/python/ql/test/query-tests/Security/CWE-089-SQLAlchemyTextClauseInjection/SQLAlchemyTextClauseInjection.expected index c2b95826a90..36c86ead3d5 100644 --- a/python/ql/test/query-tests/Security/CWE-089-SQLAlchemyTextClauseInjection/SQLAlchemyTextClauseInjection.expected +++ b/python/ql/test/query-tests/Security/CWE-089-SQLAlchemyTextClauseInjection/SQLAlchemyTextClauseInjection.expected @@ -1,34 +1,34 @@ edges -| test.py:18:15:18:22 | ControlFlowNode for username | test.py:22:28:22:87 | ControlFlowNode for Attribute() | -| test.py:18:15:18:22 | ControlFlowNode for username | test.py:26:50:26:72 | ControlFlowNode for Attribute() | -| test.py:18:15:18:22 | ControlFlowNode for username | test.py:36:26:36:33 | ControlFlowNode for username | -| test.py:18:15:18:22 | ControlFlowNode for username | test.py:37:31:37:38 | ControlFlowNode for username | -| test.py:18:15:18:22 | ControlFlowNode for username | test.py:38:30:38:37 | ControlFlowNode for username | -| test.py:18:15:18:22 | ControlFlowNode for username | test.py:39:35:39:42 | ControlFlowNode for username | -| test.py:18:15:18:22 | ControlFlowNode for username | test.py:40:41:40:48 | ControlFlowNode for username | -| test.py:18:15:18:22 | ControlFlowNode for username | test.py:41:46:41:53 | ControlFlowNode for username | -| test.py:18:15:18:22 | ControlFlowNode for username | test.py:42:47:42:54 | ControlFlowNode for username | -| test.py:18:15:18:22 | ControlFlowNode for username | test.py:43:52:43:59 | ControlFlowNode for username | +| test.py:23:15:23:22 | ControlFlowNode for username | test.py:27:28:27:87 | ControlFlowNode for Attribute() | +| test.py:23:15:23:22 | ControlFlowNode for username | test.py:31:50:31:72 | ControlFlowNode for Attribute() | +| test.py:23:15:23:22 | ControlFlowNode for username | test.py:41:26:41:33 | ControlFlowNode for username | +| test.py:23:15:23:22 | ControlFlowNode for username | test.py:42:31:42:38 | ControlFlowNode for username | +| test.py:23:15:23:22 | ControlFlowNode for username | test.py:43:30:43:37 | ControlFlowNode for username | +| test.py:23:15:23:22 | ControlFlowNode for username | test.py:44:35:44:42 | ControlFlowNode for username | +| test.py:23:15:23:22 | ControlFlowNode for username | test.py:45:41:45:48 | ControlFlowNode for username | +| test.py:23:15:23:22 | ControlFlowNode for username | test.py:46:46:46:53 | ControlFlowNode for username | +| test.py:23:15:23:22 | ControlFlowNode for username | test.py:47:47:47:54 | ControlFlowNode for username | +| test.py:23:15:23:22 | ControlFlowNode for username | test.py:48:52:48:59 | ControlFlowNode for username | nodes -| test.py:18:15:18:22 | ControlFlowNode for username | semmle.label | ControlFlowNode for username | -| test.py:22:28:22:87 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | -| test.py:26:50:26:72 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | -| test.py:36:26:36:33 | ControlFlowNode for username | semmle.label | ControlFlowNode for username | -| test.py:37:31:37:38 | ControlFlowNode for username | semmle.label | ControlFlowNode for username | -| test.py:38:30:38:37 | ControlFlowNode for username | semmle.label | ControlFlowNode for username | -| test.py:39:35:39:42 | ControlFlowNode for username | semmle.label | ControlFlowNode for username | -| test.py:40:41:40:48 | ControlFlowNode for username | semmle.label | ControlFlowNode for username | -| test.py:41:46:41:53 | ControlFlowNode for username | semmle.label | ControlFlowNode for username | -| test.py:42:47:42:54 | ControlFlowNode for username | semmle.label | ControlFlowNode for username | -| test.py:43:52:43:59 | ControlFlowNode for username | semmle.label | ControlFlowNode for username | +| test.py:23:15:23:22 | ControlFlowNode for username | semmle.label | ControlFlowNode for username | +| test.py:27:28:27:87 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | +| test.py:31:50:31:72 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | +| test.py:41:26:41:33 | ControlFlowNode for username | semmle.label | ControlFlowNode for username | +| test.py:42:31:42:38 | ControlFlowNode for username | semmle.label | ControlFlowNode for username | +| test.py:43:30:43:37 | ControlFlowNode for username | semmle.label | ControlFlowNode for username | +| test.py:44:35:44:42 | ControlFlowNode for username | semmle.label | ControlFlowNode for username | +| test.py:45:41:45:48 | ControlFlowNode for username | semmle.label | ControlFlowNode for username | +| test.py:46:46:46:53 | ControlFlowNode for username | semmle.label | ControlFlowNode for username | +| test.py:47:47:47:54 | ControlFlowNode for username | semmle.label | ControlFlowNode for username | +| test.py:48:52:48:59 | ControlFlowNode for username | semmle.label | ControlFlowNode for username | #select -| test.py:22:28:22:87 | ControlFlowNode for Attribute() | test.py:18:15:18:22 | ControlFlowNode for username | test.py:22:28:22:87 | ControlFlowNode for Attribute() | This SQLAlchemy TextClause depends on $@, which could lead to SQL injection. | test.py:18:15:18:22 | ControlFlowNode for username | a user-provided value | -| test.py:26:50:26:72 | ControlFlowNode for Attribute() | test.py:18:15:18:22 | ControlFlowNode for username | test.py:26:50:26:72 | ControlFlowNode for Attribute() | This SQLAlchemy TextClause depends on $@, which could lead to SQL injection. | test.py:18:15:18:22 | ControlFlowNode for username | a user-provided value | -| test.py:36:26:36:33 | ControlFlowNode for username | test.py:18:15:18:22 | ControlFlowNode for username | test.py:36:26:36:33 | ControlFlowNode for username | This SQLAlchemy TextClause depends on $@, which could lead to SQL injection. | test.py:18:15:18:22 | ControlFlowNode for username | a user-provided value | -| test.py:37:31:37:38 | ControlFlowNode for username | test.py:18:15:18:22 | ControlFlowNode for username | test.py:37:31:37:38 | ControlFlowNode for username | This SQLAlchemy TextClause depends on $@, which could lead to SQL injection. | test.py:18:15:18:22 | ControlFlowNode for username | a user-provided value | -| test.py:38:30:38:37 | ControlFlowNode for username | test.py:18:15:18:22 | ControlFlowNode for username | test.py:38:30:38:37 | ControlFlowNode for username | This SQLAlchemy TextClause depends on $@, which could lead to SQL injection. | test.py:18:15:18:22 | ControlFlowNode for username | a user-provided value | -| test.py:39:35:39:42 | ControlFlowNode for username | test.py:18:15:18:22 | ControlFlowNode for username | test.py:39:35:39:42 | ControlFlowNode for username | This SQLAlchemy TextClause depends on $@, which could lead to SQL injection. | test.py:18:15:18:22 | ControlFlowNode for username | a user-provided value | -| test.py:40:41:40:48 | ControlFlowNode for username | test.py:18:15:18:22 | ControlFlowNode for username | test.py:40:41:40:48 | ControlFlowNode for username | This SQLAlchemy TextClause depends on $@, which could lead to SQL injection. | test.py:18:15:18:22 | ControlFlowNode for username | a user-provided value | -| test.py:41:46:41:53 | ControlFlowNode for username | test.py:18:15:18:22 | ControlFlowNode for username | test.py:41:46:41:53 | ControlFlowNode for username | This SQLAlchemy TextClause depends on $@, which could lead to SQL injection. | test.py:18:15:18:22 | ControlFlowNode for username | a user-provided value | -| test.py:42:47:42:54 | ControlFlowNode for username | test.py:18:15:18:22 | ControlFlowNode for username | test.py:42:47:42:54 | ControlFlowNode for username | This SQLAlchemy TextClause depends on $@, which could lead to SQL injection. | test.py:18:15:18:22 | ControlFlowNode for username | a user-provided value | -| test.py:43:52:43:59 | ControlFlowNode for username | test.py:18:15:18:22 | ControlFlowNode for username | test.py:43:52:43:59 | ControlFlowNode for username | This SQLAlchemy TextClause depends on $@, which could lead to SQL injection. | test.py:18:15:18:22 | ControlFlowNode for username | a user-provided value | +| test.py:27:28:27:87 | ControlFlowNode for Attribute() | test.py:23:15:23:22 | ControlFlowNode for username | test.py:27:28:27:87 | ControlFlowNode for Attribute() | This SQLAlchemy TextClause depends on $@, which could lead to SQL injection. | test.py:23:15:23:22 | ControlFlowNode for username | a user-provided value | +| test.py:31:50:31:72 | ControlFlowNode for Attribute() | test.py:23:15:23:22 | ControlFlowNode for username | test.py:31:50:31:72 | ControlFlowNode for Attribute() | This SQLAlchemy TextClause depends on $@, which could lead to SQL injection. | test.py:23:15:23:22 | ControlFlowNode for username | a user-provided value | +| test.py:41:26:41:33 | ControlFlowNode for username | test.py:23:15:23:22 | ControlFlowNode for username | test.py:41:26:41:33 | ControlFlowNode for username | This SQLAlchemy TextClause depends on $@, which could lead to SQL injection. | test.py:23:15:23:22 | ControlFlowNode for username | a user-provided value | +| test.py:42:31:42:38 | ControlFlowNode for username | test.py:23:15:23:22 | ControlFlowNode for username | test.py:42:31:42:38 | ControlFlowNode for username | This SQLAlchemy TextClause depends on $@, which could lead to SQL injection. | test.py:23:15:23:22 | ControlFlowNode for username | a user-provided value | +| test.py:43:30:43:37 | ControlFlowNode for username | test.py:23:15:23:22 | ControlFlowNode for username | test.py:43:30:43:37 | ControlFlowNode for username | This SQLAlchemy TextClause depends on $@, which could lead to SQL injection. | test.py:23:15:23:22 | ControlFlowNode for username | a user-provided value | +| test.py:44:35:44:42 | ControlFlowNode for username | test.py:23:15:23:22 | ControlFlowNode for username | test.py:44:35:44:42 | ControlFlowNode for username | This SQLAlchemy TextClause depends on $@, which could lead to SQL injection. | test.py:23:15:23:22 | ControlFlowNode for username | a user-provided value | +| test.py:45:41:45:48 | ControlFlowNode for username | test.py:23:15:23:22 | ControlFlowNode for username | test.py:45:41:45:48 | ControlFlowNode for username | This SQLAlchemy TextClause depends on $@, which could lead to SQL injection. | test.py:23:15:23:22 | ControlFlowNode for username | a user-provided value | +| test.py:46:46:46:53 | ControlFlowNode for username | test.py:23:15:23:22 | ControlFlowNode for username | test.py:46:46:46:53 | ControlFlowNode for username | This SQLAlchemy TextClause depends on $@, which could lead to SQL injection. | test.py:23:15:23:22 | ControlFlowNode for username | a user-provided value | +| test.py:47:47:47:54 | ControlFlowNode for username | test.py:23:15:23:22 | ControlFlowNode for username | test.py:47:47:47:54 | ControlFlowNode for username | This SQLAlchemy TextClause depends on $@, which could lead to SQL injection. | test.py:23:15:23:22 | ControlFlowNode for username | a user-provided value | +| test.py:48:52:48:59 | ControlFlowNode for username | test.py:23:15:23:22 | ControlFlowNode for username | test.py:48:52:48:59 | ControlFlowNode for username | This SQLAlchemy TextClause depends on $@, which could lead to SQL injection. | test.py:23:15:23:22 | ControlFlowNode for username | a user-provided value | diff --git a/python/ql/test/query-tests/Security/CWE-089-SQLAlchemyTextClauseInjection/test.py b/python/ql/test/query-tests/Security/CWE-089-SQLAlchemyTextClauseInjection/test.py index 4ec56b85853..a54d64517d4 100644 --- a/python/ql/test/query-tests/Security/CWE-089-SQLAlchemyTextClauseInjection/test.py +++ b/python/ql/test/query-tests/Security/CWE-089-SQLAlchemyTextClauseInjection/test.py @@ -1,11 +1,16 @@ from flask import Flask, request import sqlalchemy import sqlalchemy.orm +from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) engine = sqlalchemy.create_engine(...) Base = sqlalchemy.orm.declarative_base() +app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite+pysqlite:///:memory:" +db = SQLAlchemy(app) + + class User(Base): __tablename__ = "users" @@ -41,3 +46,6 @@ def show_user(username): t6 = sqlalchemy.sql.expression.text(text=username) t7 = sqlalchemy.sql.expression.TextClause(username) t8 = sqlalchemy.sql.expression.TextClause(text=username) + + t9 = db.text(username) + t10 = db.text(text=username) From d55f18f8e3ed98ec37711ccef328610f0d2a8207 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Thu, 2 Sep 2021 10:48:24 +0200 Subject: [PATCH 142/741] Python: Add modeling of `Flask-SQLAlchemy` --- docs/codeql/support/reusables/frameworks.rst | 1 + ...021-09-02-add-Flask-SQLAlchemy-modeling.md | 2 + python/ql/lib/semmle/python/Frameworks.qll | 1 + .../python/frameworks/FlaskSqlAlchemy.qll | 56 +++++++++++++++++++ .../semmle/python/frameworks/SqlAlchemy.qll | 12 ++-- .../flask_sqlalchemy/SqlExecution.py | 12 ++-- 6 files changed, 73 insertions(+), 11 deletions(-) create mode 100644 python/change-notes/2021-09-02-add-Flask-SQLAlchemy-modeling.md create mode 100644 python/ql/lib/semmle/python/frameworks/FlaskSqlAlchemy.qll diff --git a/docs/codeql/support/reusables/frameworks.rst b/docs/codeql/support/reusables/frameworks.rst index 39c9cbba83b..0846786db63 100644 --- a/docs/codeql/support/reusables/frameworks.rst +++ b/docs/codeql/support/reusables/frameworks.rst @@ -176,6 +176,7 @@ Python built-in support mysqlclient, Database psycopg2, Database sqlite3, Database + Flask-SQLAlchemy, Database ORM peewee, Database ORM SQLAlchemy, Database ORM cryptography, Cryptography library diff --git a/python/change-notes/2021-09-02-add-Flask-SQLAlchemy-modeling.md b/python/change-notes/2021-09-02-add-Flask-SQLAlchemy-modeling.md new file mode 100644 index 00000000000..82c7dce9cfd --- /dev/null +++ b/python/change-notes/2021-09-02-add-Flask-SQLAlchemy-modeling.md @@ -0,0 +1,2 @@ +lgtm,codescanning +* Added modeling of SQL execution in the `Flask-SQLAlchemy` PyPI package, resulting in additional sinks for the SQL Injection query (`py/sql-injection`). diff --git a/python/ql/lib/semmle/python/Frameworks.qll b/python/ql/lib/semmle/python/Frameworks.qll index 591094ff208..b3ff235c3ee 100644 --- a/python/ql/lib/semmle/python/Frameworks.qll +++ b/python/ql/lib/semmle/python/Frameworks.qll @@ -13,6 +13,7 @@ private import semmle.python.frameworks.Dill private import semmle.python.frameworks.Django private import semmle.python.frameworks.Fabric private import semmle.python.frameworks.Flask +private import semmle.python.frameworks.FlaskSqlAlchemy private import semmle.python.frameworks.Idna private import semmle.python.frameworks.Invoke private import semmle.python.frameworks.Jmespath diff --git a/python/ql/lib/semmle/python/frameworks/FlaskSqlAlchemy.qll b/python/ql/lib/semmle/python/frameworks/FlaskSqlAlchemy.qll new file mode 100644 index 00000000000..08ba276e6ce --- /dev/null +++ b/python/ql/lib/semmle/python/frameworks/FlaskSqlAlchemy.qll @@ -0,0 +1,56 @@ +/** + * Provides classes modeling security-relevant aspects of the `Flask-SQLAlchemy` PyPI package + * (imported by `flask_sqlalchemy`). + * See + * - https://pypi.org/project/Flask-SQLAlchemy/ + * - https://flask-sqlalchemy.palletsprojects.com/en/2.x/ + */ + +private import python +private import semmle.python.dataflow.new.DataFlow +private import semmle.python.dataflow.new.TaintTracking +private import semmle.python.ApiGraphs +private import semmle.python.Concepts +private import semmle.python.frameworks.SqlAlchemy + +/** + * INTERNAL: Do not use. + * + * Provides models for the `Flask-SQLAlchemy` PyPI package (imported by `flask_sqlalchemy`). + * See + * - https://pypi.org/project/Flask-SQLAlchemy/ + * - https://flask-sqlalchemy.palletsprojects.com/en/2.x/ + */ +private module FlaskSqlAlchemy { + /** Gets an instance of `flask_sqlalchemy.SQLAlchemy` */ + private API::Node dbInstance() { + result = API::moduleImport("flask_sqlalchemy").getMember("SQLAlchemy").getReturn() + } + + /** A call to the `text` method on a DB. */ + private class DbTextCall extends SqlAlchemy::TextClause::TextClauseConstruction { + DbTextCall() { this = dbInstance().getMember("text").getACall() } + } + + /** Access on a DB resulting in an Engine */ + private class DbEngine extends SqlAlchemy::Engine::InstanceSource { + DbEngine() { + this = dbInstance().getMember("engine").getAUse() + or + this = dbInstance().getMember("get_engine").getACall() + } + } + + /** Access on a DB resulting in a Session */ + private class DbSession extends SqlAlchemy::Session::InstanceSource { + DbSession() { + this = dbInstance().getMember("session").getAUse() + or + this = dbInstance().getMember("create_session").getReturn().getACall() + or + this = dbInstance().getMember("create_session").getReturn().getMember("begin").getACall() + or + this = dbInstance().getMember("create_scoped_session").getACall() + } + } +} diff --git a/python/ql/lib/semmle/python/frameworks/SqlAlchemy.qll b/python/ql/lib/semmle/python/frameworks/SqlAlchemy.qll index 56a97ade24c..fa3da97bf29 100644 --- a/python/ql/lib/semmle/python/frameworks/SqlAlchemy.qll +++ b/python/ql/lib/semmle/python/frameworks/SqlAlchemy.qll @@ -314,8 +314,13 @@ module SqlAlchemy { * A construction of a `sqlalchemy.sql.expression.TextClause`, which represents a * textual SQL string directly. */ - class TextClauseConstruction extends DataFlow::CallCfgNode { - TextClauseConstruction() { + abstract class TextClauseConstruction extends DataFlow::CallCfgNode { + /** Gets the argument that specifies the SQL text. */ + DataFlow::Node getTextArg() { result in [this.getArg(0), this.getArgByName("text")] } + } + + class DefaultTextClauseConstruction extends TextClauseConstruction { + DefaultTextClauseConstruction() { this = API::moduleImport("sqlalchemy").getMember("text").getACall() or this = API::moduleImport("sqlalchemy").getMember("sql").getMember("text").getACall() @@ -334,9 +339,6 @@ module SqlAlchemy { .getMember("TextClause") .getACall() } - - /** Gets the argument that specifies the SQL text. */ - DataFlow::Node getTextArg() { result in [this.getArg(0), this.getArgByName("text")] } } } } diff --git a/python/ql/test/library-tests/frameworks/flask_sqlalchemy/SqlExecution.py b/python/ql/test/library-tests/frameworks/flask_sqlalchemy/SqlExecution.py index f0f7db6130e..7560aff2d30 100644 --- a/python/ql/test/library-tests/frameworks/flask_sqlalchemy/SqlExecution.py +++ b/python/ql/test/library-tests/frameworks/flask_sqlalchemy/SqlExecution.py @@ -19,27 +19,27 @@ assert str(type(db.text("Foo"))) == " Date: Thu, 2 Sep 2021 16:02:04 +0200 Subject: [PATCH 143/741] Python: Fix .qhelp --- .../ql/src/Security/CWE-089/SQLAlchemyTextClauseInjection.qhelp | 1 + 1 file changed, 1 insertion(+) diff --git a/python/ql/src/Security/CWE-089/SQLAlchemyTextClauseInjection.qhelp b/python/ql/src/Security/CWE-089/SQLAlchemyTextClauseInjection.qhelp index fd87df3882c..022fd4741da 100644 --- a/python/ql/src/Security/CWE-089/SQLAlchemyTextClauseInjection.qhelp +++ b/python/ql/src/Security/CWE-089/SQLAlchemyTextClauseInjection.qhelp @@ -9,6 +9,7 @@ The TextClause class in the SQLAlchemy PyPI package re a textual SQL string directly. If user-input is added to it without sufficient sanitization, a user may be able to run malicious database queries, since the TextClause is inserted directly into the final SQL. +

    From 414bf12f867b210fc72296bd1f4c021023b52cc7 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Thu, 2 Sep 2021 16:03:25 +0200 Subject: [PATCH 144/741] Python: Fix DefaultTextClauseConstruction --- python/ql/lib/semmle/python/frameworks/SqlAlchemy.qll | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/python/ql/lib/semmle/python/frameworks/SqlAlchemy.qll b/python/ql/lib/semmle/python/frameworks/SqlAlchemy.qll index fa3da97bf29..879456e4700 100644 --- a/python/ql/lib/semmle/python/frameworks/SqlAlchemy.qll +++ b/python/ql/lib/semmle/python/frameworks/SqlAlchemy.qll @@ -319,7 +319,8 @@ module SqlAlchemy { DataFlow::Node getTextArg() { result in [this.getArg(0), this.getArgByName("text")] } } - class DefaultTextClauseConstruction extends TextClauseConstruction { + /** `TextClause` constructions from the `sqlalchemy` package. */ + private class DefaultTextClauseConstruction extends TextClauseConstruction { DefaultTextClauseConstruction() { this = API::moduleImport("sqlalchemy").getMember("text").getACall() or From 9f590dbf2d3ed436bbdd24e475ae129fb0c5ff47 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Thu, 2 Sep 2021 16:04:25 +0200 Subject: [PATCH 145/741] Python: Fix `.expected` After we now model `db.text()` calls from Flask-SQLAlchemy --- .../SQLAlchemyTextClauseInjection.expected | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/python/ql/test/query-tests/Security/CWE-089-SQLAlchemyTextClauseInjection/SQLAlchemyTextClauseInjection.expected b/python/ql/test/query-tests/Security/CWE-089-SQLAlchemyTextClauseInjection/SQLAlchemyTextClauseInjection.expected index 36c86ead3d5..3c51294a467 100644 --- a/python/ql/test/query-tests/Security/CWE-089-SQLAlchemyTextClauseInjection/SQLAlchemyTextClauseInjection.expected +++ b/python/ql/test/query-tests/Security/CWE-089-SQLAlchemyTextClauseInjection/SQLAlchemyTextClauseInjection.expected @@ -9,6 +9,8 @@ edges | test.py:23:15:23:22 | ControlFlowNode for username | test.py:46:46:46:53 | ControlFlowNode for username | | test.py:23:15:23:22 | ControlFlowNode for username | test.py:47:47:47:54 | ControlFlowNode for username | | test.py:23:15:23:22 | ControlFlowNode for username | test.py:48:52:48:59 | ControlFlowNode for username | +| test.py:23:15:23:22 | ControlFlowNode for username | test.py:50:18:50:25 | ControlFlowNode for username | +| test.py:23:15:23:22 | ControlFlowNode for username | test.py:51:24:51:31 | ControlFlowNode for username | nodes | test.py:23:15:23:22 | ControlFlowNode for username | semmle.label | ControlFlowNode for username | | test.py:27:28:27:87 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | @@ -21,6 +23,8 @@ nodes | test.py:46:46:46:53 | ControlFlowNode for username | semmle.label | ControlFlowNode for username | | test.py:47:47:47:54 | ControlFlowNode for username | semmle.label | ControlFlowNode for username | | test.py:48:52:48:59 | ControlFlowNode for username | semmle.label | ControlFlowNode for username | +| test.py:50:18:50:25 | ControlFlowNode for username | semmle.label | ControlFlowNode for username | +| test.py:51:24:51:31 | ControlFlowNode for username | semmle.label | ControlFlowNode for username | #select | test.py:27:28:27:87 | ControlFlowNode for Attribute() | test.py:23:15:23:22 | ControlFlowNode for username | test.py:27:28:27:87 | ControlFlowNode for Attribute() | This SQLAlchemy TextClause depends on $@, which could lead to SQL injection. | test.py:23:15:23:22 | ControlFlowNode for username | a user-provided value | | test.py:31:50:31:72 | ControlFlowNode for Attribute() | test.py:23:15:23:22 | ControlFlowNode for username | test.py:31:50:31:72 | ControlFlowNode for Attribute() | This SQLAlchemy TextClause depends on $@, which could lead to SQL injection. | test.py:23:15:23:22 | ControlFlowNode for username | a user-provided value | @@ -32,3 +36,5 @@ nodes | test.py:46:46:46:53 | ControlFlowNode for username | test.py:23:15:23:22 | ControlFlowNode for username | test.py:46:46:46:53 | ControlFlowNode for username | This SQLAlchemy TextClause depends on $@, which could lead to SQL injection. | test.py:23:15:23:22 | ControlFlowNode for username | a user-provided value | | test.py:47:47:47:54 | ControlFlowNode for username | test.py:23:15:23:22 | ControlFlowNode for username | test.py:47:47:47:54 | ControlFlowNode for username | This SQLAlchemy TextClause depends on $@, which could lead to SQL injection. | test.py:23:15:23:22 | ControlFlowNode for username | a user-provided value | | test.py:48:52:48:59 | ControlFlowNode for username | test.py:23:15:23:22 | ControlFlowNode for username | test.py:48:52:48:59 | ControlFlowNode for username | This SQLAlchemy TextClause depends on $@, which could lead to SQL injection. | test.py:23:15:23:22 | ControlFlowNode for username | a user-provided value | +| test.py:50:18:50:25 | ControlFlowNode for username | test.py:23:15:23:22 | ControlFlowNode for username | test.py:50:18:50:25 | ControlFlowNode for username | This SQLAlchemy TextClause depends on $@, which could lead to SQL injection. | test.py:23:15:23:22 | ControlFlowNode for username | a user-provided value | +| test.py:51:24:51:31 | ControlFlowNode for username | test.py:23:15:23:22 | ControlFlowNode for username | test.py:51:24:51:31 | ControlFlowNode for username | This SQLAlchemy TextClause depends on $@, which could lead to SQL injection. | test.py:23:15:23:22 | ControlFlowNode for username | a user-provided value | From dbc95cadb4fba72d634ca64c6429a03b573d88bc Mon Sep 17 00:00:00 2001 From: Philip Ginsbach Date: Thu, 2 Sep 2021 14:39:51 +0100 Subject: [PATCH 146/741] language reference entry for non-extending subtypes --- docs/codeql/ql-language-reference/types.rst | 55 ++++++++++++++++++++- 1 file changed, 54 insertions(+), 1 deletion(-) diff --git a/docs/codeql/ql-language-reference/types.rst b/docs/codeql/ql-language-reference/types.rst index ae37230f05c..dcec60d099c 100644 --- a/docs/codeql/ql-language-reference/types.rst +++ b/docs/codeql/ql-language-reference/types.rst @@ -78,7 +78,7 @@ To define a class, you write: #. The keyword ``class``. #. The name of the class. This is an `identifier `_ starting with an uppercase letter. -#. The types to extend. +#. The base types that the class is derived from via `extends` and/or `instanceof` #. The :ref:`body of the class `, enclosed in braces. For example: @@ -112,6 +112,8 @@ the :ref:`class domain type `). A class inherits all member predic base types. A class can extend multiple types. For more information, see ":ref:`multiple-inheritance`." +Classes can also specialise other types without extending the class interface via `instanceof`, +see ":ref:`instanceof-extensions`.". To be valid, a class: - Must not extend itself. @@ -380,6 +382,57 @@ from ``OneTwoThree`` and ``int``. must :ref:`override ` those definitions to avoid ambiguity. :ref:`Super expressions ` are often useful in this situation. + +.. _instanceof-extensions: + +Non-extending subtypes +====================== + +Besides extending base types, classes can also declare `instanceof` relationships with other types. + +.. code-block:: ql + class Foo extends int { + Foo() { this in [1 .. 10] } + + string foo_method() { result = "foo" } + } + + class Bar extends int instanceof Foo { + string bar_method() { result = super.foo_method() } + } + +In this example, the characteristic predicate from `Foo` also applies to `Bar`. +However, `foo_method` is not exposed in `Bar`, so the query `select any(Bar b).foo_method()` +results in a compile time error. Note from the example that it is still possible to access +methods from instanceof supertypes from within the specialising class with the `super` keyword. + +Crucially, the base class methods are not just hidden. +Instead, the extension relationship is sewered. +This has deep implications on method resolution when complex class hierarchies are involved. +The following example demonstrates this. + + +.. code-block:: ql + class Interface extends int { + Interface() { this in [1 .. 100] } + string foo() { result = "" } + } + + class Foo extends Interface { + Foo() { this in [1 .. 10] } + override string foo() { result = "foo" } + } + + class Bar extends Interface instanceof Foo { + override string foo() { result = "bar" } + } + +Here, the method `Bar::foo` does not override `Foo::foo`. +Instead, it overrides only `Interface::foo`. +This means that `select any(Foo b).foo()` yields only `foo`. +Had `bar been defined as `extends Foo`, then `select any(Foo b).foo()` would yield `bar`. + + .. _character-types: .. _domain-types: From 81a9ce2baa325a8a5a0f864e4cc3bd43835b9010 Mon Sep 17 00:00:00 2001 From: james Date: Thu, 2 Sep 2021 16:40:29 +0100 Subject: [PATCH 147/741] polish text --- .../analyzing-your-projects.rst | 2 ++ ...g-data-flow-queries-using-partial-flow.rst | 29 +++++++++++++------ 2 files changed, 22 insertions(+), 9 deletions(-) diff --git a/docs/codeql/codeql-for-visual-studio-code/analyzing-your-projects.rst b/docs/codeql/codeql-for-visual-studio-code/analyzing-your-projects.rst index b9a275cfb41..5ddd6850644 100644 --- a/docs/codeql/codeql-for-visual-studio-code/analyzing-your-projects.rst +++ b/docs/codeql/codeql-for-visual-studio-code/analyzing-your-projects.rst @@ -79,6 +79,8 @@ You can see all quick queries that you've run in the current session in the Quer Once you're happy with your quick query, you should save it in a QL pack so you can access it later. For more information, see ":ref:`About QL packs `." +.. _running-a-specific-part-of-a-query-or-library: + Running a specific part of a query or library ---------------------------------------------- diff --git a/docs/codeql/writing-codeql-queries/debugging-data-flow-queries-using-partial-flow.rst b/docs/codeql/writing-codeql-queries/debugging-data-flow-queries-using-partial-flow.rst index 9d5d83244a5..e812b4d29dc 100644 --- a/docs/codeql/writing-codeql-queries/debugging-data-flow-queries-using-partial-flow.rst +++ b/docs/codeql/writing-codeql-queries/debugging-data-flow-queries-using-partial-flow.rst @@ -24,7 +24,7 @@ A typical data-flow query looks like this: where config.hasFlowPath(source, sink) select sink.getNode(), source, sink, "Sink is reached from $@.", source.getNode(), "here" -Or slightly simpler without path explanations: +The same query can be slightly simplified by rewriting it without :ref:`path explanations `: .. code-block:: ql @@ -38,25 +38,26 @@ You can try to debug the potential problem by following the steps described belo Checking sources and sinks -------------------------- -As a first step, make sure that the source and sink definitions contain what you expect. If one of these is empty then there can never be any data flow. The easiest way to verify this is using quick evaluation in CodeQL for VS Code: Select the text ``node instanceof MySource``, right-click, and choose "CodeQL: Quick Evaluation". This will evaluate the highlighted text, which in this case means the set of sources. +Initially, you should make sure that the ``source`` and ``sink`` definitions contain what you expect. If either the ``source`` or ``sink`` is empty then there can never be any data flow. The easiest way to check this is using quick evaluation in CodeQL for VS Code. Select the text ``node instanceof MySource``, right-click, and choose "CodeQL: Quick Evaluation". This will evaluate the highlighted text, which in this case means the set of sources. For more information, see :ref:`Analyzing your projects < +.. _running-a-specific-part-of-a-query-or-library>` in the CodeQL for VS Code help. If both source and sink definitions look good then we will need to look for missing flow steps. ``fieldFlowBranchLimit`` ------------------------ -Data-flow configurations contain a parameter called ``fieldFlowBranchLimit``. This is a slightly unfortunate, but currently necessary, performance trade-off, and a too low value can cause false negatives. It is worth a quick check to set this to a high value and see whether this causes the query to yield result. Try, for example, to add the following to your configuration: +Data-flow configurations contain a parameter called ``fieldFlowBranchLimit``. If the value is set too high, you may experience performance degradation, but if it's too low you may miss results. When debugging data flow try setting ``fieldFlowBranchLimit`` to a high value and see whether your query generates more results. For example, try adding the following to your configuration: .. code-block:: ql override int fieldFlowBranchLimit() { result = 5000 } -If there are still no results and performance did not degrade to complete uselessness, then it is best to leave this set to a high value while doing further debugging. +If there are still no results and performance is still useable, then it is best to leave this set to a high value while doing further debugging. Partial flow ------------ -A naive next step could be to try changing the sink definition to ``any()``. This would mean that we would get a lot of flow to all the places that are reachable from the sources. While this approach makes sense and can work in some cases, you might find that it produces so many results that it's very hard to explore the findings, which can also dramatically affect query performance. More importantly, you might not even see all the partial flow paths. This is because the data-flow library tries very hard to prune impossible paths and, since field stores and reads must be evenly matched along a path, we will never see paths going through a store that fail to reach a corresponding read. This can make it hard to see where flow actually stops. +A naive next step could be to change the ``sink`` definition to ``any()``. This would mean that we would get a lot of flow to all the places that are reachable from the ``source``\ s. While this approach may work in some cases, you might find that it produces so many results that it's very hard to explore the findings. It can can also dramatically affect query performance. More importantly, you might not even see all the partial flow paths. This is because the data-flow library tries very hard to prune impossible paths and, since field stores and reads must be evenly matched along a path, we will never see paths going through a store that fail to reach a corresponding read. This can make it hard to see where flow actually stops. To avoid these problems, a data-flow ``Configuration`` comes with a mechanism for exploring partial flow that tries to deal with these caveats. This is the ``Configuration.hasPartialFlow`` predicate: @@ -87,9 +88,9 @@ As noted in the documentation for ``hasPartialFlow`` (for example, in the `CodeQ This defines the exploration radius within which ``hasPartialFlow`` returns results. -It is also generally useful to focus on a single source at a time as the starting point for the flow exploration. This is most easily done by adding some ad-hoc restriction in the ``isSource`` predicate. +It is also useful to focus on a single ``source`` at a time as the starting point for the flow exploration. This is most easily done by adding a temporary restriction in the ``isSource`` predicate. -To do quick ad-hoc evaluations of partial flow it is often easiest to add a predicate to the query that is solely intended for quick evaluation (right-click the predicate name and choose "CodeQL: Quick Evaluation"). A good starting point is something like: +To do quick evaluations of partial flow it is often easiest to add a predicate to the query that is solely intended for quick evaluation (right-click the predicate name and choose "CodeQL: Quick Evaluation"). A good starting point is something like: .. code-block:: ql @@ -101,6 +102,16 @@ To do quick ad-hoc evaluations of partial flow it is often easiest to add a pred ) } -If you are focusing on a single source then the ``src`` column is of course superfluous, and you may of course also add other columns of interest based on ``n``, but including the enclosing callable and the distance to the source at the very least is generally recommended, as they can be useful columns to sort on to better inspect the results. +If you are focusing on a single ``source`` then the ``src`` column is meaningless. You may of course also add other columns of interest based on ``n``, but including the enclosing callable and the distance to the source at the very least is generally recommended, as they can be useful columns to sort on to better inspect the results. -A couple of advanced tips in order to focus the partial flow results: If flow travels a long distance following an expected path and the distance means that a lot of uninteresting flow gets included in the exploration radius then one can simply replace the source definition with a suitable node found along the way and restart the partial flow exploration from that point. Alternatively, creative use of barriers/sanitizers can be used to cut off flow paths that are uninteresting and thereby reduce the number of partial flow results to increase overview. + +If you see a large number of partial flow results, you can focus them in a couple of ways: + +- If flow travels a long distance following an expected path, that can result in a lot of uninteresting flow being included in the exploration radius. To reduce the amount of uninteresting flow, you can replace the ``source`` definition with a suitable ``node`` that appears along the path and restart the partial flow exploration from that point. +- Creative use of barriers and sanitizers can be used to cut off flow paths that are uninteresting. This also reduces the number of partial flow results to explore while debugging. + +Further reading +---------------- + +- :ref:`About data flow analysis ` +- :ref:`Creating path queries ` \ No newline at end of file From 2e995839bb45ea2b861f3851c45721470e9850a0 Mon Sep 17 00:00:00 2001 From: james Date: Thu, 2 Sep 2021 16:46:23 +0100 Subject: [PATCH 148/741] fix link --- .../debugging-data-flow-queries-using-partial-flow.rst | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/codeql/writing-codeql-queries/debugging-data-flow-queries-using-partial-flow.rst b/docs/codeql/writing-codeql-queries/debugging-data-flow-queries-using-partial-flow.rst index e812b4d29dc..b661a68fcd1 100644 --- a/docs/codeql/writing-codeql-queries/debugging-data-flow-queries-using-partial-flow.rst +++ b/docs/codeql/writing-codeql-queries/debugging-data-flow-queries-using-partial-flow.rst @@ -38,8 +38,7 @@ You can try to debug the potential problem by following the steps described belo Checking sources and sinks -------------------------- -Initially, you should make sure that the ``source`` and ``sink`` definitions contain what you expect. If either the ``source`` or ``sink`` is empty then there can never be any data flow. The easiest way to check this is using quick evaluation in CodeQL for VS Code. Select the text ``node instanceof MySource``, right-click, and choose "CodeQL: Quick Evaluation". This will evaluate the highlighted text, which in this case means the set of sources. For more information, see :ref:`Analyzing your projects < -.. _running-a-specific-part-of-a-query-or-library>` in the CodeQL for VS Code help. +Initially, you should make sure that the ``source`` and ``sink`` definitions contain what you expect. If either the ``source`` or ``sink`` is empty then there can never be any data flow. The easiest way to check this is using quick evaluation in CodeQL for VS Code. Select the text ``node instanceof MySource``, right-click, and choose "CodeQL: Quick Evaluation". This will evaluate the highlighted text, which in this case means the set of sources. For more information, see :ref:`Analyzing your projects ` in the CodeQL for VS Code help. If both source and sink definitions look good then we will need to look for missing flow steps. From dbda1bf5c0277aedcc0903a277d28d010b653cd1 Mon Sep 17 00:00:00 2001 From: Philip Ginsbach Date: Thu, 2 Sep 2021 17:30:36 +0100 Subject: [PATCH 149/741] Update docs/codeql/ql-language-reference/types.rst Co-authored-by: Chris Smowton --- docs/codeql/ql-language-reference/types.rst | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/codeql/ql-language-reference/types.rst b/docs/codeql/ql-language-reference/types.rst index dcec60d099c..784b8750862 100644 --- a/docs/codeql/ql-language-reference/types.rst +++ b/docs/codeql/ql-language-reference/types.rst @@ -406,8 +406,7 @@ However, `foo_method` is not exposed in `Bar`, so the query `select any(Bar b).f results in a compile time error. Note from the example that it is still possible to access methods from instanceof supertypes from within the specialising class with the `super` keyword. -Crucially, the base class methods are not just hidden. -Instead, the extension relationship is sewered. +Crucially, the base class methods are not just hidden. The extension relationship is severed. This has deep implications on method resolution when complex class hierarchies are involved. The following example demonstrates this. From ee13efbffd2098ab6796d2ec5c17030846bc6b86 Mon Sep 17 00:00:00 2001 From: Philip Ginsbach Date: Thu, 2 Sep 2021 17:31:55 +0100 Subject: [PATCH 150/741] some whitesapce fixes --- docs/codeql/ql-language-reference/types.rst | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/docs/codeql/ql-language-reference/types.rst b/docs/codeql/ql-language-reference/types.rst index 784b8750862..1216454bcf2 100644 --- a/docs/codeql/ql-language-reference/types.rst +++ b/docs/codeql/ql-language-reference/types.rst @@ -382,7 +382,6 @@ from ``OneTwoThree`` and ``int``. must :ref:`override ` those definitions to avoid ambiguity. :ref:`Super expressions ` are often useful in this situation. - .. _instanceof-extensions: Non-extending subtypes @@ -391,6 +390,7 @@ Non-extending subtypes Besides extending base types, classes can also declare `instanceof` relationships with other types. .. code-block:: ql + class Foo extends int { Foo() { this in [1 .. 10] } @@ -410,8 +410,8 @@ Crucially, the base class methods are not just hidden. The extension relationshi This has deep implications on method resolution when complex class hierarchies are involved. The following example demonstrates this. - .. code-block:: ql + class Interface extends int { Interface() { this in [1 .. 100] } string foo() { result = "" } @@ -431,7 +431,6 @@ Instead, it overrides only `Interface::foo`. This means that `select any(Foo b).foo()` yields only `foo`. Had `bar been defined as `extends Foo`, then `select any(Foo b).foo()` would yield `bar`. - .. _character-types: .. _domain-types: From 75d367a6c5cebae0b305b3c7c98964cf58e56f7c Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Wed, 1 Sep 2021 13:55:59 +0100 Subject: [PATCH 151/741] C++: Add ad-hoc SAMATE Juliet test cases (that were previously internal). Directory structures cleaned up in a few places. --- ..._Path_Traversal__char_console_fopen_11.cpp | 164 +++++ .../CWE/CWE-022/SAMATE/TaintedPath.expected | 17 + .../CWE/CWE-022/SAMATE/TaintedPath.qlref | 1 + .../CWE/CWE-078/SAMATE/ExecTainted.expected | 1 + .../CWE/CWE-078/SAMATE/ExecTainted.qlref | 1 + .../Security/CWE/CWE-078/SAMATE/tests.cpp | 58 ++ .../UncontrolledProcessOperation.expected | 30 + .../UncontrolledProcessOperation.qlref | 1 + .../UncontrolledProcessOperation/test.cpp | 132 ++++ .../CWE-119/SAMATE/BadlyBoundedWrite.expected | 4 + .../CWE-119/SAMATE/BadlyBoundedWrite.qlref | 1 + .../SAMATE/OffsetUseBeforeRangeCheck.expected | 0 .../SAMATE/OffsetUseBeforeRangeCheck.qlref | 1 + .../CWE-119/SAMATE/OverflowBuffer.expected | 19 + .../CWE/CWE-119/SAMATE/OverflowBuffer.qlref | 1 + .../SAMATE/OverflowDestination.expected | 0 .../CWE-119/SAMATE/OverflowDestination.qlref | 1 + .../CWE-119/SAMATE/OverflowStatic.expected | 2 + .../CWE/CWE-119/SAMATE/OverflowStatic.qlref | 1 + .../CWE/CWE-119/SAMATE/OverrunWrite.expected | 0 .../CWE/CWE-119/SAMATE/OverrunWrite.qlref | 1 + .../CWE-119/SAMATE/OverrunWriteFloat.expected | 0 .../CWE-119/SAMATE/OverrunWriteFloat.qlref | 1 + .../SAMATE/StrncpyFlippedArgs.expected | 3 + .../CWE-119/SAMATE/StrncpyFlippedArgs.qlref | 1 + .../CWE-119/SAMATE/UnboundedWrite.expected | 3 + .../CWE/CWE-119/SAMATE/UnboundedWrite.qlref | 1 + .../Security/CWE/CWE-119/SAMATE/tests.cpp | 673 ++++++++++++++++++ ...Based_Buffer_Overflow__c_CWE129_fgets_01.c | 65 ++ .../ImproperArrayIndexValidation.expected | 1 + .../ImproperArrayIndexValidation.qlref | 1 + .../connect_socket_w32_vsnprintf_01/test.c | 126 ++++ .../test.expected | 17 + .../test.qlref | 1 + .../CWE-134/SAMATE/console_fprintf_01/test.c | 161 +++++ .../SAMATE/console_fprintf_01/test.expected | 17 + .../SAMATE/console_fprintf_01/test.qlref | 1 + .../SAMATE/environment_fprintf_01/test.c | 136 ++++ .../environment_fprintf_01/test.expected | 17 + .../SAMATE/environment_fprintf_01/test.qlref | 1 + .../CWE-190/SAMATE/ArithmeticTainted.expected | 13 + .../CWE-190/SAMATE/ArithmeticTainted.qlref | 1 + .../SAMATE/ArithmeticUncontrolled.expected | 77 ++ .../SAMATE/ArithmeticUncontrolled.qlref | 1 + .../ArithmeticWithExtremeValues.expected | 0 .../SAMATE/ArithmeticWithExtremeValues.qlref | 1 + .../SAMATE/IntegerOverflowTainted.expected | 1 + .../SAMATE/IntegerOverflowTainted.qlref | 1 + .../Security/CWE/CWE-190/SAMATE/examples.cpp | 70 ++ .../SAMATE/IntegerOverflowTainted.expected | 1 + .../SAMATE/IntegerOverflowTainted.qlref | 1 + .../Security/CWE/CWE-197/SAMATE/tests.cpp | 74 ++ .../CWE-497/SAMATE/ExposedSystemData.expected | 1 + .../CWE-497/SAMATE/ExposedSystemData.qlref | 1 + .../CWE/CWE-497/SAMATE/OutputWrite.expected | 7 + .../CWE/CWE-497/SAMATE/OutputWrite.ql | 4 + .../Security/CWE/CWE-497/SAMATE/tests.c | 72 ++ .../DangerousUseOfCin.expected | 1 + .../DangerousUseOfCin/DangerousUseOfCin.qlref | 1 + .../CWE-676/SAMATE/DangerousUseOfCin/test.cpp | 69 ++ .../SAMATE/FileMayNotBeClosed.expected | 0 .../CWE-772/SAMATE/FileMayNotBeClosed.qlref | 1 + .../CWE-772/SAMATE/FileNeverClosed.expected | 3 + .../CWE/CWE-772/SAMATE/FileNeverClosed.qlref | 1 + .../SAMATE/MemoryMayNotBeFreed.expected | 2 + .../CWE-772/SAMATE/MemoryMayNotBeFreed.qlref | 1 + .../CWE-772/SAMATE/MemoryNeverFreed.expected | 2 + .../CWE/CWE-772/SAMATE/MemoryNeverFreed.qlref | 1 + .../Security/CWE/CWE-772/SAMATE/tests.cpp | 333 +++++++++ 69 files changed, 2403 insertions(+) create mode 100644 cpp/ql/test/query-tests/Security/CWE/CWE-022/SAMATE/CWE23_Relative_Path_Traversal__char_console_fopen_11.cpp create mode 100644 cpp/ql/test/query-tests/Security/CWE/CWE-022/SAMATE/TaintedPath.expected create mode 100644 cpp/ql/test/query-tests/Security/CWE/CWE-022/SAMATE/TaintedPath.qlref create mode 100644 cpp/ql/test/query-tests/Security/CWE/CWE-078/SAMATE/ExecTainted.expected create mode 100644 cpp/ql/test/query-tests/Security/CWE/CWE-078/SAMATE/ExecTainted.qlref create mode 100644 cpp/ql/test/query-tests/Security/CWE/CWE-078/SAMATE/tests.cpp create mode 100644 cpp/ql/test/query-tests/Security/CWE/CWE-114/SAMATE/UncontrolledProcessOperation/UncontrolledProcessOperation.expected create mode 100644 cpp/ql/test/query-tests/Security/CWE/CWE-114/SAMATE/UncontrolledProcessOperation/UncontrolledProcessOperation.qlref create mode 100644 cpp/ql/test/query-tests/Security/CWE/CWE-114/SAMATE/UncontrolledProcessOperation/test.cpp create mode 100644 cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/BadlyBoundedWrite.expected create mode 100644 cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/BadlyBoundedWrite.qlref create mode 100644 cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/OffsetUseBeforeRangeCheck.expected create mode 100644 cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/OffsetUseBeforeRangeCheck.qlref create mode 100644 cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/OverflowBuffer.expected create mode 100644 cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/OverflowBuffer.qlref create mode 100644 cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/OverflowDestination.expected create mode 100644 cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/OverflowDestination.qlref create mode 100644 cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/OverflowStatic.expected create mode 100644 cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/OverflowStatic.qlref create mode 100644 cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/OverrunWrite.expected create mode 100644 cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/OverrunWrite.qlref create mode 100644 cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/OverrunWriteFloat.expected create mode 100644 cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/OverrunWriteFloat.qlref create mode 100644 cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/StrncpyFlippedArgs.expected create mode 100644 cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/StrncpyFlippedArgs.qlref create mode 100644 cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/UnboundedWrite.expected create mode 100644 cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/UnboundedWrite.qlref create mode 100644 cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/tests.cpp create mode 100644 cpp/ql/test/query-tests/Security/CWE/CWE-129/SAMATE/ImproperArrayIndexValidation/CWE122_Heap_Based_Buffer_Overflow__c_CWE129_fgets_01.c create mode 100644 cpp/ql/test/query-tests/Security/CWE/CWE-129/SAMATE/ImproperArrayIndexValidation/ImproperArrayIndexValidation.expected create mode 100644 cpp/ql/test/query-tests/Security/CWE/CWE-129/SAMATE/ImproperArrayIndexValidation/ImproperArrayIndexValidation.qlref create mode 100644 cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/connect_socket_w32_vsnprintf_01/test.c create mode 100644 cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/connect_socket_w32_vsnprintf_01/test.expected create mode 100644 cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/connect_socket_w32_vsnprintf_01/test.qlref create mode 100644 cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/console_fprintf_01/test.c create mode 100644 cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/console_fprintf_01/test.expected create mode 100644 cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/console_fprintf_01/test.qlref create mode 100644 cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/environment_fprintf_01/test.c create mode 100644 cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/environment_fprintf_01/test.expected create mode 100644 cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/environment_fprintf_01/test.qlref create mode 100644 cpp/ql/test/query-tests/Security/CWE/CWE-190/SAMATE/ArithmeticTainted.expected create mode 100644 cpp/ql/test/query-tests/Security/CWE/CWE-190/SAMATE/ArithmeticTainted.qlref create mode 100644 cpp/ql/test/query-tests/Security/CWE/CWE-190/SAMATE/ArithmeticUncontrolled.expected create mode 100644 cpp/ql/test/query-tests/Security/CWE/CWE-190/SAMATE/ArithmeticUncontrolled.qlref create mode 100644 cpp/ql/test/query-tests/Security/CWE/CWE-190/SAMATE/ArithmeticWithExtremeValues.expected create mode 100644 cpp/ql/test/query-tests/Security/CWE/CWE-190/SAMATE/ArithmeticWithExtremeValues.qlref create mode 100644 cpp/ql/test/query-tests/Security/CWE/CWE-190/SAMATE/IntegerOverflowTainted.expected create mode 100644 cpp/ql/test/query-tests/Security/CWE/CWE-190/SAMATE/IntegerOverflowTainted.qlref create mode 100644 cpp/ql/test/query-tests/Security/CWE/CWE-190/SAMATE/examples.cpp create mode 100644 cpp/ql/test/query-tests/Security/CWE/CWE-197/SAMATE/IntegerOverflowTainted.expected create mode 100644 cpp/ql/test/query-tests/Security/CWE/CWE-197/SAMATE/IntegerOverflowTainted.qlref create mode 100644 cpp/ql/test/query-tests/Security/CWE/CWE-197/SAMATE/tests.cpp create mode 100644 cpp/ql/test/query-tests/Security/CWE/CWE-497/SAMATE/ExposedSystemData.expected create mode 100644 cpp/ql/test/query-tests/Security/CWE/CWE-497/SAMATE/ExposedSystemData.qlref create mode 100644 cpp/ql/test/query-tests/Security/CWE/CWE-497/SAMATE/OutputWrite.expected create mode 100644 cpp/ql/test/query-tests/Security/CWE/CWE-497/SAMATE/OutputWrite.ql create mode 100644 cpp/ql/test/query-tests/Security/CWE/CWE-497/SAMATE/tests.c create mode 100644 cpp/ql/test/query-tests/Security/CWE/CWE-676/SAMATE/DangerousUseOfCin/DangerousUseOfCin.expected create mode 100644 cpp/ql/test/query-tests/Security/CWE/CWE-676/SAMATE/DangerousUseOfCin/DangerousUseOfCin.qlref create mode 100644 cpp/ql/test/query-tests/Security/CWE/CWE-676/SAMATE/DangerousUseOfCin/test.cpp create mode 100644 cpp/ql/test/query-tests/Security/CWE/CWE-772/SAMATE/FileMayNotBeClosed.expected create mode 100644 cpp/ql/test/query-tests/Security/CWE/CWE-772/SAMATE/FileMayNotBeClosed.qlref create mode 100644 cpp/ql/test/query-tests/Security/CWE/CWE-772/SAMATE/FileNeverClosed.expected create mode 100644 cpp/ql/test/query-tests/Security/CWE/CWE-772/SAMATE/FileNeverClosed.qlref create mode 100644 cpp/ql/test/query-tests/Security/CWE/CWE-772/SAMATE/MemoryMayNotBeFreed.expected create mode 100644 cpp/ql/test/query-tests/Security/CWE/CWE-772/SAMATE/MemoryMayNotBeFreed.qlref create mode 100644 cpp/ql/test/query-tests/Security/CWE/CWE-772/SAMATE/MemoryNeverFreed.expected create mode 100644 cpp/ql/test/query-tests/Security/CWE/CWE-772/SAMATE/MemoryNeverFreed.qlref create mode 100644 cpp/ql/test/query-tests/Security/CWE/CWE-772/SAMATE/tests.cpp diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-022/SAMATE/CWE23_Relative_Path_Traversal__char_console_fopen_11.cpp b/cpp/ql/test/query-tests/Security/CWE/CWE-022/SAMATE/CWE23_Relative_Path_Traversal__char_console_fopen_11.cpp new file mode 100644 index 00000000000..216258fd707 --- /dev/null +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-022/SAMATE/CWE23_Relative_Path_Traversal__char_console_fopen_11.cpp @@ -0,0 +1,164 @@ +/** + * This test case is closely based on CWE23_Relative_Path_Traversal__char_console_fopen_11.cpp + * from the SAMATE test suite. + */ + +#define NULL (0) + +typedef size_t time_t; +time_t time(time_t *timer); +void srand(unsigned int seed); + +typedef struct {} FILE; +extern FILE *stdin; +FILE *fopen(const char *filename, const char *mode); +int fclose(FILE *stream); +#define FILENAME_MAX (4096) + +typedef unsigned long size_t; +size_t strlen(const char *s); +char *strcat(char *s1, const char *s2); +char *fgets(char *s, int n, FILE *stream); + +int globalReturnsTrue() +{ + return 1; +} + +int globalReturnsFalse() +{ + return 0; +} + +void printLine(const char *str); + +#define BASEPATH "c:\\temp\\" +#define FOPEN fopen + +namespace CWE23_Relative_Path_Traversal__char_console_fopen_11 +{ + +void bad() +{ + char * data; + char dataBuffer[FILENAME_MAX] = BASEPATH; + data = dataBuffer; + if(globalReturnsTrue()) + { + { + /* Read input from the console */ + size_t dataLen = strlen(data); + /* if there is room in data, read into it from the console */ + if (FILENAME_MAX-dataLen > 1) + { + /* POTENTIAL FLAW: Read data from the console */ + if (fgets(data+dataLen, (int)(FILENAME_MAX-dataLen), stdin) != NULL) + { + /* The next few lines remove the carriage return from the string that is + * inserted by fgets() */ + dataLen = strlen(data); + if (dataLen > 0 && data[dataLen-1] == '\n') + { + data[dataLen-1] = '\0'; + } + } + else + { + printLine("fgets() failed"); + /* Restore NUL terminator if fgets fails */ + data[dataLen] = '\0'; + } + } + } + } + { + FILE *pFile = NULL; + /* POTENTIAL FLAW: Possibly opening a file without validating the file name or path */ + pFile = FOPEN(data, "wb+"); + if (pFile != NULL) + { + fclose(pFile); + } + } +} + +/* goodG2B1() - use goodsource and badsink by changing the globalReturnsTrue() to globalReturnsFalse() */ +static void goodG2B1() +{ + char * data; + char dataBuffer[FILENAME_MAX] = BASEPATH; + data = dataBuffer; + if(globalReturnsFalse()) + { + /* INCIDENTAL: CWE 561 Dead Code, the code below will never run */ + printLine("Benign, fixed string"); + } + else + { + /* FIX: Use a fixed file name */ + strcat(data, "file.txt"); + } + { + FILE *pFile = NULL; + /* POTENTIAL FLAW: Possibly opening a file without validating the file name or path */ + pFile = FOPEN(data, "wb+"); + if (pFile != NULL) + { + fclose(pFile); + } + } +} + +/* goodG2B2() - use goodsource and badsink by reversing the blocks in the if statement */ +static void goodG2B2() +{ + char * data; + char dataBuffer[FILENAME_MAX] = BASEPATH; + data = dataBuffer; + if(globalReturnsTrue()) + { + /* FIX: Use a fixed file name */ + strcat(data, "file.txt"); + } + { + FILE *pFile = NULL; + /* POTENTIAL FLAW: Possibly opening a file without validating the file name or path */ + pFile = FOPEN(data, "wb+"); + if (pFile != NULL) + { + fclose(pFile); + } + } +} + +void good() +{ + goodG2B1(); + goodG2B2(); +} + +} /* close namespace */ + +/* Below is the main(). It is only used when building this testcase on + its own for testing or for building a binary to use in testing binary + analysis tools. It is not used when compiling all the testcases as one + application, which is how source code analysis tools are tested. */ + +using namespace CWE23_Relative_Path_Traversal__char_console_fopen_11; /* so that we can use good and bad easily */ + +int main(int argc, char * argv[]) +{ + /* seed randomness */ + srand( (unsigned)time(NULL) ); +#ifndef OMITGOOD + printLine("Calling good()..."); + good(); + printLine("Finished good()"); +#endif /* OMITGOOD */ +#ifndef OMITBAD + printLine("Calling bad()..."); + bad(); + printLine("Finished bad()"); +#endif /* OMITBAD */ + return 0; +} diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-022/SAMATE/TaintedPath.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-022/SAMATE/TaintedPath.expected new file mode 100644 index 00000000000..ebd575376fd --- /dev/null +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-022/SAMATE/TaintedPath.expected @@ -0,0 +1,17 @@ +edges +| CWE23_Relative_Path_Traversal__char_console_fopen_11.cpp:55:27:55:38 | ... + ... | CWE23_Relative_Path_Traversal__char_console_fopen_11.cpp:77:23:77:26 | (const char *)... | +| CWE23_Relative_Path_Traversal__char_console_fopen_11.cpp:55:27:55:38 | ... + ... | CWE23_Relative_Path_Traversal__char_console_fopen_11.cpp:77:23:77:26 | data | +| CWE23_Relative_Path_Traversal__char_console_fopen_11.cpp:55:27:55:38 | ... + ... | CWE23_Relative_Path_Traversal__char_console_fopen_11.cpp:77:23:77:26 | data indirection | +| CWE23_Relative_Path_Traversal__char_console_fopen_11.cpp:55:27:55:38 | fgets output argument | CWE23_Relative_Path_Traversal__char_console_fopen_11.cpp:77:23:77:26 | (const char *)... | +| CWE23_Relative_Path_Traversal__char_console_fopen_11.cpp:55:27:55:38 | fgets output argument | CWE23_Relative_Path_Traversal__char_console_fopen_11.cpp:77:23:77:26 | data | +| CWE23_Relative_Path_Traversal__char_console_fopen_11.cpp:55:27:55:38 | fgets output argument | CWE23_Relative_Path_Traversal__char_console_fopen_11.cpp:77:23:77:26 | data indirection | +nodes +| CWE23_Relative_Path_Traversal__char_console_fopen_11.cpp:55:27:55:38 | ... + ... | semmle.label | ... + ... | +| CWE23_Relative_Path_Traversal__char_console_fopen_11.cpp:55:27:55:38 | fgets output argument | semmle.label | fgets output argument | +| CWE23_Relative_Path_Traversal__char_console_fopen_11.cpp:77:23:77:26 | (const char *)... | semmle.label | (const char *)... | +| CWE23_Relative_Path_Traversal__char_console_fopen_11.cpp:77:23:77:26 | (const char *)... | semmle.label | (const char *)... | +| CWE23_Relative_Path_Traversal__char_console_fopen_11.cpp:77:23:77:26 | data | semmle.label | data | +| CWE23_Relative_Path_Traversal__char_console_fopen_11.cpp:77:23:77:26 | data indirection | semmle.label | data indirection | +| CWE23_Relative_Path_Traversal__char_console_fopen_11.cpp:77:23:77:26 | data indirection | semmle.label | data indirection | +#select +| CWE23_Relative_Path_Traversal__char_console_fopen_11.cpp:77:23:77:26 | data | CWE23_Relative_Path_Traversal__char_console_fopen_11.cpp:55:27:55:38 | ... + ... | CWE23_Relative_Path_Traversal__char_console_fopen_11.cpp:77:23:77:26 | data | This argument to a file access function is derived from $@ and then passed to fopen(filename) | CWE23_Relative_Path_Traversal__char_console_fopen_11.cpp:55:27:55:38 | ... + ... | user input (fgets) | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-022/SAMATE/TaintedPath.qlref b/cpp/ql/test/query-tests/Security/CWE/CWE-022/SAMATE/TaintedPath.qlref new file mode 100644 index 00000000000..1677939387d --- /dev/null +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-022/SAMATE/TaintedPath.qlref @@ -0,0 +1 @@ +Security/CWE/CWE-022/TaintedPath.ql \ No newline at end of file diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-078/SAMATE/ExecTainted.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-078/SAMATE/ExecTainted.expected new file mode 100644 index 00000000000..7a7858134ab --- /dev/null +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-078/SAMATE/ExecTainted.expected @@ -0,0 +1 @@ +| tests.cpp:55:16:55:19 | data | This argument to an OS command is derived from $@ and then passed to system(string) | tests.cpp:35:34:35:39 | call to getenv | user input (getenv) | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-078/SAMATE/ExecTainted.qlref b/cpp/ql/test/query-tests/Security/CWE/CWE-078/SAMATE/ExecTainted.qlref new file mode 100644 index 00000000000..9fe2347270f --- /dev/null +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-078/SAMATE/ExecTainted.qlref @@ -0,0 +1 @@ +Security/CWE/CWE-078/ExecTainted.ql \ No newline at end of file diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-078/SAMATE/tests.cpp b/cpp/ql/test/query-tests/Security/CWE/CWE-078/SAMATE/tests.cpp new file mode 100644 index 00000000000..4b9c1343f6c --- /dev/null +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-078/SAMATE/tests.cpp @@ -0,0 +1,58 @@ +//semmle-extractor-options: --edg --target --edg win64 + +// A selection of tests from the samate framework for rule CWE-78. + +// library types, functions etc +#define NULL (0) +typedef unsigned long size_t; +size_t strlen(const char *s); +char *strncat(char *s1, const char *s2, size_t n);n); +char *getenv(const char *name); +int system(const char *string); +void exit(int status); + +#define FULL_COMMAND "dir " +#define ENV_VARIABLE "ADD" +#define GETENV getenv +#define SYSTEM system + +void printLine(const char *str); + +// ---------- + +/* The static variable below is used to drive control flow in the source function */ +static int badStatic = 0; + +static char * badSource(char * data) +{ + if(badStatic) + { + { + /* Append input from an environment variable to data */ + size_t dataLen = strlen(data); + char * environment = GETENV(ENV_VARIABLE); + /* If there is data in the environment variable */ + if (environment != NULL) + { + /* POTENTIAL FLAW: Read data from an environment variable */ + strncat(data+dataLen, environment, 100-dataLen-1); + } + } + } + return data; +} + +void CWE78_OS_Command_Injection__char_environment_system_21_bad() +{ + char * data; + char data_buf[100] = FULL_COMMAND; + data = data_buf; + badStatic = 1; /* true */ + data = badSource(data); + /* POTENTIAL FLAW: Execute command in data possibly leading to command injection [NOT DETECTED] */ + if (SYSTEM(data) != 0) + { + printLine("command execution failed!"); + exit(1); + } +} diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-114/SAMATE/UncontrolledProcessOperation/UncontrolledProcessOperation.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-114/SAMATE/UncontrolledProcessOperation/UncontrolledProcessOperation.expected new file mode 100644 index 00000000000..bcaff619bd2 --- /dev/null +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-114/SAMATE/UncontrolledProcessOperation/UncontrolledProcessOperation.expected @@ -0,0 +1,30 @@ +edges +| test.cpp:35:73:35:76 | *data | test.cpp:41:32:41:35 | (LPCSTR)... | +| test.cpp:35:73:35:76 | *data | test.cpp:41:32:41:35 | data | +| test.cpp:35:73:35:76 | *data | test.cpp:41:32:41:35 | data indirection | +| test.cpp:35:73:35:76 | data | test.cpp:41:32:41:35 | (LPCSTR)... | +| test.cpp:35:73:35:76 | data | test.cpp:41:32:41:35 | data | +| test.cpp:35:73:35:76 | data | test.cpp:41:32:41:35 | data | +| test.cpp:35:73:35:76 | data | test.cpp:41:32:41:35 | data indirection | +| test.cpp:62:30:62:35 | call to getenv | test.cpp:71:17:71:22 | data | +| test.cpp:62:30:62:35 | call to getenv | test.cpp:71:17:71:22 | data | +| test.cpp:62:30:62:35 | call to getenv | test.cpp:71:24:71:27 | data indirection | +| test.cpp:62:30:62:35 | call to getenv | test.cpp:71:24:71:27 | data indirection | +| test.cpp:71:17:71:22 | data | test.cpp:35:73:35:76 | data | +| test.cpp:71:24:71:27 | data indirection | test.cpp:35:73:35:76 | *data | +nodes +| test.cpp:35:73:35:76 | *data | semmle.label | *data | +| test.cpp:35:73:35:76 | data | semmle.label | data | +| test.cpp:41:32:41:35 | (LPCSTR)... | semmle.label | (LPCSTR)... | +| test.cpp:41:32:41:35 | (LPCSTR)... | semmle.label | (LPCSTR)... | +| test.cpp:41:32:41:35 | data | semmle.label | data | +| test.cpp:41:32:41:35 | data | semmle.label | data | +| test.cpp:41:32:41:35 | data | semmle.label | data | +| test.cpp:41:32:41:35 | data indirection | semmle.label | data indirection | +| test.cpp:41:32:41:35 | data indirection | semmle.label | data indirection | +| test.cpp:62:30:62:35 | call to getenv | semmle.label | call to getenv | +| test.cpp:62:30:62:35 | call to getenv | semmle.label | call to getenv | +| test.cpp:71:17:71:22 | data | semmle.label | data | +| test.cpp:71:24:71:27 | data indirection | semmle.label | data indirection | +#select +| test.cpp:41:32:41:35 | data | test.cpp:62:30:62:35 | call to getenv | test.cpp:41:32:41:35 | data | The value of this argument may come from $@ and is being passed to LoadLibraryA | test.cpp:62:30:62:35 | call to getenv | call to getenv | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-114/SAMATE/UncontrolledProcessOperation/UncontrolledProcessOperation.qlref b/cpp/ql/test/query-tests/Security/CWE/CWE-114/SAMATE/UncontrolledProcessOperation/UncontrolledProcessOperation.qlref new file mode 100644 index 00000000000..a9ca1db5199 --- /dev/null +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-114/SAMATE/UncontrolledProcessOperation/UncontrolledProcessOperation.qlref @@ -0,0 +1 @@ +Security/CWE/CWE-114/UncontrolledProcessOperation.ql diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-114/SAMATE/UncontrolledProcessOperation/test.cpp b/cpp/ql/test/query-tests/Security/CWE/CWE-114/SAMATE/UncontrolledProcessOperation/test.cpp new file mode 100644 index 00000000000..cf1f98e1d53 --- /dev/null +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-114/SAMATE/UncontrolledProcessOperation/test.cpp @@ -0,0 +1,132 @@ +// Samate test cases for CWE-114 + +typedef unsigned long size_t; +typedef unsigned int BOOL; +typedef const char *LPCSTR; +typedef void *HMODULE; +#define NULL (0) + +size_t strlen(const char *s); +char *strncat(char *s1, const char *s2, size_t n); + +HMODULE LoadLibraryA(LPCSTR libname); +BOOL FreeLibrary(HMODULE hModule); + +char *getenv(const char *name); + +#define GETENV getenv +#define ENV_VARIABLE "ADD" + +void printLine(const char *msg); + +// --- CWE114_Process_Control__w32_char_environment_82 --- + +class CWE114_Process_Control__w32_char_environment_82_base +{ +public: + /* pure virtual function */ + virtual void action(char * data) = 0; +}; + +class CWE114_Process_Control__w32_char_environment_82_bad : public CWE114_Process_Control__w32_char_environment_82_base +{ +public: + void action(char * data); +}; + +void CWE114_Process_Control__w32_char_environment_82_bad::action(char * data) +{ + { + HMODULE hModule; + /* POTENTIAL FLAW: If the path to the library is not specified, an attacker may be able to + * replace his own file with the intended library */ + hModule = LoadLibraryA(data); + if (hModule != NULL) + { + FreeLibrary(hModule); + printLine("Library loaded and freed successfully"); + } + else + { + printLine("Unable to load library"); + } + } +} + +void bad() +{ + char * data; + char dataBuffer[100] = ""; + data = dataBuffer; + { + /* Append input from an environment variable to data */ + size_t dataLen = strlen(data); + char * environment = GETENV(ENV_VARIABLE); + /* If there is data in the environment variable */ + if (environment != NULL) + { + /* POTENTIAL FLAW: Read data from an environment variable */ + strncat(data+dataLen, environment, 100-dataLen-1); + } + } + CWE114_Process_Control__w32_char_environment_82_base* baseObject = new CWE114_Process_Control__w32_char_environment_82_bad; + baseObject->action(data); + delete baseObject; +} + +// --- CWE114_Process_Control__w32_char_console_33 --- + +typedef struct {} FILE; +char *fgets(char *s, int n, FILE *stream); +FILE *stdin; + +void CWE114_Process_Control__w32_char_console_33_bad() +{ + char * data; + char * &dataRef = data; + char dataBuffer[100] = ""; + data = dataBuffer; + { + /* Read input from the console */ + size_t dataLen = strlen(data); + /* if there is room in data, read into it from the console */ + if (100-dataLen > 1) + { + /* POTENTIAL FLAW: Read data from the console [NOT DETECTED] */ + if (fgets(data+dataLen, (int)(100-dataLen), stdin) != NULL) + { + /* The next few lines remove the carriage return from the string that is + * inserted by fgets() */ + dataLen = strlen(data); + if (dataLen > 0 && data[dataLen-1] == '\n') + { + data[dataLen-1] = '\0'; + } + } + else + { + printLine("fgets() failed"); + /* Restore NUL terminator if fgets fails */ + data[dataLen] = '\0'; + } + } + } + { + char * data = dataRef; + { + HMODULE hModule; + /* POTENTIAL FLAW: If the path to the library is not specified, an attacker may be able to + * replace his own file with the intended library */ + hModule = LoadLibraryA(data); + if (hModule != NULL) + { + FreeLibrary(hModule); + printLine("Library loaded and freed successfully"); + } + else + { + printLine("Unable to load library"); + } + } + } +} diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/BadlyBoundedWrite.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/BadlyBoundedWrite.expected new file mode 100644 index 00000000000..bd96138bb9f --- /dev/null +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/BadlyBoundedWrite.expected @@ -0,0 +1,4 @@ +| tests.cpp:352:13:352:19 | call to strncat | This 'call to strncat' operation is limited to 100 bytes but the destination is only 50 bytes. | +| tests.cpp:454:9:454:15 | call to wcsncpy | This 'call to wcsncpy' operation is limited to 198 bytes but the destination is only 100 bytes. | +| tests.cpp:483:9:483:16 | call to swprintf | This 'call to swprintf' operation is limited to 200 bytes but the destination is only 100 bytes. | +| tests.cpp:632:13:632:20 | call to swprintf | This 'call to swprintf' operation is limited to 200 bytes but the destination is only 100 bytes. | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/BadlyBoundedWrite.qlref b/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/BadlyBoundedWrite.qlref new file mode 100644 index 00000000000..9636c74d0a8 --- /dev/null +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/BadlyBoundedWrite.qlref @@ -0,0 +1 @@ +Security/CWE/CWE-120/BadlyBoundedWrite.ql \ No newline at end of file diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/OffsetUseBeforeRangeCheck.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/OffsetUseBeforeRangeCheck.expected new file mode 100644 index 00000000000..e69de29bb2d diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/OffsetUseBeforeRangeCheck.qlref b/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/OffsetUseBeforeRangeCheck.qlref new file mode 100644 index 00000000000..d934901f174 --- /dev/null +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/OffsetUseBeforeRangeCheck.qlref @@ -0,0 +1 @@ +Best Practices/Likely Errors/OffsetUseBeforeRangeCheck.ql \ No newline at end of file diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/OverflowBuffer.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/OverflowBuffer.expected new file mode 100644 index 00000000000..3621eb1d127 --- /dev/null +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/OverflowBuffer.expected @@ -0,0 +1,19 @@ +| tests.cpp:47:9:47:14 | call to memcpy | This 'memcpy' operation accesses 32 bytes but the $@ is only 16 bytes. | tests.cpp:34:10:34:18 | charFirst | destination buffer | +| tests.cpp:62:9:62:14 | call to memcpy | This 'memcpy' operation accesses 32 bytes but the $@ is only 16 bytes. | tests.cpp:34:10:34:18 | charFirst | destination buffer | +| tests.cpp:173:9:173:14 | call to memcpy | This 'memcpy' operation accesses 100 bytes but the $@ is only 50 bytes. | tests.cpp:166:20:166:25 | call to malloc | destination buffer | +| tests.cpp:174:9:174:19 | access to array | This array indexing operation accesses byte offset 99 but the $@ is only 50 bytes. | tests.cpp:166:20:166:25 | call to malloc | array | +| tests.cpp:194:9:194:14 | call to memcpy | This 'memcpy' operation accesses 100 bytes but the $@ is only 50 bytes. | tests.cpp:183:10:183:22 | dataBadBuffer | destination buffer | +| tests.cpp:194:9:194:14 | call to memcpy | This 'memcpy' operation accesses 100 bytes but the $@ is only 50 bytes. | tests.cpp:187:12:187:24 | dataBadBuffer | destination buffer | +| tests.cpp:195:9:195:19 | access to array | This array indexing operation accesses byte offset 99 but the $@ is only 50 bytes. | tests.cpp:183:10:183:22 | dataBadBuffer | array | +| tests.cpp:195:9:195:19 | access to array | This array indexing operation accesses byte offset 99 but the $@ is only 50 bytes. | tests.cpp:187:12:187:24 | dataBadBuffer | array | +| tests.cpp:214:9:214:14 | call to memcpy | This 'memcpy' operation accesses 100 bytes but the $@ is only 50 bytes. | tests.cpp:203:36:203:41 | call to alloca | destination buffer | +| tests.cpp:214:9:214:14 | call to memcpy | This 'memcpy' operation accesses 100 bytes but the $@ is only 50 bytes. | tests.cpp:207:12:207:24 | dataBadBuffer | destination buffer | +| tests.cpp:215:9:215:19 | access to array | This array indexing operation accesses byte offset 99 but the $@ is only 50 bytes. | tests.cpp:203:36:203:41 | call to alloca | array | +| tests.cpp:215:9:215:19 | access to array | This array indexing operation accesses byte offset 99 but the $@ is only 50 bytes. | tests.cpp:207:12:207:24 | dataBadBuffer | array | +| tests.cpp:239:9:239:19 | access to array | This array indexing operation accesses byte offset 99 but the $@ is only 50 bytes. | tests.cpp:223:36:223:41 | call to alloca | array | +| tests.cpp:239:9:239:19 | access to array | This array indexing operation accesses byte offset 99 but the $@ is only 50 bytes. | tests.cpp:227:12:227:24 | dataBadBuffer | array | +| tests.cpp:263:9:263:19 | access to array | This array indexing operation accesses byte offset 99 but the $@ is only 50 bytes. | tests.cpp:247:10:247:22 | dataBadBuffer | array | +| tests.cpp:263:9:263:19 | access to array | This array indexing operation accesses byte offset 99 but the $@ is only 50 bytes. | tests.cpp:251:12:251:24 | dataBadBuffer | array | +| tests.cpp:386:9:386:14 | call to memcpy | This 'memcpy' operation accesses 40 bytes but the $@ is only 10 bytes. | tests.cpp:382:19:382:24 | call to alloca | destination buffer | +| tests.cpp:436:9:436:19 | access to array | This array indexing operation accesses byte offset 199 but the $@ is only 100 bytes. | tests.cpp:424:12:424:26 | new[] | array | +| tests.cpp:455:9:455:19 | access to array | This array indexing operation accesses byte offset 199 but the $@ is only 100 bytes. | tests.cpp:447:12:447:26 | new[] | array | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/OverflowBuffer.qlref b/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/OverflowBuffer.qlref new file mode 100644 index 00000000000..5c2bacec579 --- /dev/null +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/OverflowBuffer.qlref @@ -0,0 +1 @@ +Security/CWE/CWE-119/OverflowBuffer.ql \ No newline at end of file diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/OverflowDestination.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/OverflowDestination.expected new file mode 100644 index 00000000000..e69de29bb2d diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/OverflowDestination.qlref b/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/OverflowDestination.qlref new file mode 100644 index 00000000000..a4213e22fcd --- /dev/null +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/OverflowDestination.qlref @@ -0,0 +1 @@ +Critical/OverflowDestination.ql \ No newline at end of file diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/OverflowStatic.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/OverflowStatic.expected new file mode 100644 index 00000000000..e9cf380d0e6 --- /dev/null +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/OverflowStatic.expected @@ -0,0 +1,2 @@ +| tests.cpp:47:51:47:72 | sizeof() | Potential buffer-overflow: 'charFirst' has size 16 not 32. | +| tests.cpp:62:52:62:74 | sizeof() | Potential buffer-overflow: 'charFirst' has size 16 not 32. | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/OverflowStatic.qlref b/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/OverflowStatic.qlref new file mode 100644 index 00000000000..9ff1c3b33dc --- /dev/null +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/OverflowStatic.qlref @@ -0,0 +1 @@ +Critical/OverflowStatic.ql \ No newline at end of file diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/OverrunWrite.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/OverrunWrite.expected new file mode 100644 index 00000000000..e69de29bb2d diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/OverrunWrite.qlref b/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/OverrunWrite.qlref new file mode 100644 index 00000000000..f6c962c1a7b --- /dev/null +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/OverrunWrite.qlref @@ -0,0 +1 @@ +Security/CWE/CWE-120/OverrunWrite.ql \ No newline at end of file diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/OverrunWriteFloat.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/OverrunWriteFloat.expected new file mode 100644 index 00000000000..e69de29bb2d diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/OverrunWriteFloat.qlref b/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/OverrunWriteFloat.qlref new file mode 100644 index 00000000000..757d1592e83 --- /dev/null +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/OverrunWriteFloat.qlref @@ -0,0 +1 @@ +Security/CWE/CWE-120/OverrunWriteFloat.ql \ No newline at end of file diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/StrncpyFlippedArgs.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/StrncpyFlippedArgs.expected new file mode 100644 index 00000000000..b376553baee --- /dev/null +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/StrncpyFlippedArgs.expected @@ -0,0 +1,3 @@ +| tests.cpp:292:13:292:19 | call to wcsncpy | Potentially unsafe call to wcsncpy; third argument should be size of destination. | +| tests.cpp:308:4:308:10 | call to wcsncpy | Potentially unsafe call to wcsncpy; third argument should be size of destination. | +| tests.cpp:454:9:454:15 | call to wcsncpy | Potentially unsafe call to wcsncpy; third argument should be size of destination. | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/StrncpyFlippedArgs.qlref b/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/StrncpyFlippedArgs.qlref new file mode 100644 index 00000000000..bf0bf1ea7d0 --- /dev/null +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/StrncpyFlippedArgs.qlref @@ -0,0 +1 @@ +Likely Bugs/Memory Management/StrncpyFlippedArgs.ql \ No newline at end of file diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/UnboundedWrite.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/UnboundedWrite.expected new file mode 100644 index 00000000000..58e3dda0964 --- /dev/null +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/UnboundedWrite.expected @@ -0,0 +1,3 @@ +edges +nodes +#select diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/UnboundedWrite.qlref b/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/UnboundedWrite.qlref new file mode 100644 index 00000000000..767f2ea4db9 --- /dev/null +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/UnboundedWrite.qlref @@ -0,0 +1 @@ +Security/CWE/CWE-120/UnboundedWrite.ql \ No newline at end of file diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/tests.cpp b/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/tests.cpp new file mode 100644 index 00000000000..364ef56b331 --- /dev/null +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/tests.cpp @@ -0,0 +1,673 @@ +//semmle-extractor-options: --edg --target --edg win64 + +// A sample of tests from the samate framework for rule CWE-119. + +// library types, functions etc +typedef unsigned long size_t; +void *malloc(size_t size); +void *alloca(size_t size); +void free(void *ptr); +#define ALLOCA alloca + +void *memcpy(void *s1, const void *s2, size_t n); +void *memset(void *s, int c, size_t n); +char *strcpy(char *s1, const char *s2); +size_t strlen(const char *s); + +void exit(int status); + +typedef unsigned int DWORD; +DWORD GetCurrentDirectoryA(DWORD bufferLength, char *buffer); +bool PathAppendA(char *path, const char *more); +#define MAX_PATH 4096 + +void printLine(const char *str); +void printSizeTLine(size_t val); +void printIntLine(int val); + +// ---------- + +#define SRC_STR "0123456789abcde0123" + +typedef struct _charVoid +{ + char charFirst[16]; + void * voidSecond; + void * voidThird; +} charVoid; + +void CWE121_Stack_Based_Buffer_Overflow__char_type_overrun_memcpy_01_bad() +{ + { + charVoid structCharVoid; + structCharVoid.voidSecond = (void *)SRC_STR; + /* Print the initial block pointed to by structCharVoid.voidSecond */ + printLine((char *)structCharVoid.voidSecond); + /* FLAW: Use the sizeof(structCharVoid) which will overwrite the pointer voidSecond */ + memcpy(structCharVoid.charFirst, SRC_STR, sizeof(structCharVoid)); + structCharVoid.charFirst[(sizeof(structCharVoid.charFirst)/sizeof(char))-1] = '\0'; /* null terminate the string */ + printLine((char *)structCharVoid.charFirst); + printLine((char *)structCharVoid.voidSecond); + } +} + +void CWE122_Heap_Based_Buffer_Overflow__char_type_overrun_memcpy_01_bad() +{ + { + charVoid * structCharVoid = (charVoid *)malloc(sizeof(charVoid)); + structCharVoid->voidSecond = (void *)SRC_STR; + /* Print the initial block pointed to by structCharVoid->voidSecond */ + printLine((char *)structCharVoid->voidSecond); + /* FLAW: Use the sizeof(*structCharVoid) which will overwrite the pointer y */ + memcpy(structCharVoid->charFirst, SRC_STR, sizeof(*structCharVoid)); + structCharVoid->charFirst[(sizeof(structCharVoid->charFirst)/sizeof(char))-1] = '\0'; /* null terminate the string */ + printLine((char *)structCharVoid->charFirst); + printLine((char *)structCharVoid->voidSecond); + free(structCharVoid); + } +} + +void CWE124_Buffer_Underwrite__char_alloca_cpy_01_bad() +{ + char * data; + char * dataBuffer = (char *)ALLOCA(100*sizeof(char)); + memset(dataBuffer, 'A', 100-1); + dataBuffer[100-1] = '\0'; + /* FLAW: Set data pointer to before the allocated memory buffer */ + data = dataBuffer - 8; + { + char source[100]; + memset(source, 'C', 100-1); /* fill with 'C's */ + source[100-1] = '\0'; /* null terminate */ + /* POTENTIAL FLAW: Possibly copying data to memory before the destination buffer */ + strcpy(data, source); // [NOT DETECTED] + printLine(data); + } +} + +void CWE126_Buffer_Overread__char_alloca_loop_01_bad() +{ + char * data; + char * dataBadBuffer = (char *)ALLOCA(50*sizeof(char)); + char * dataGoodBuffer = (char *)ALLOCA(100*sizeof(char)); + memset(dataBadBuffer, 'A', 50-1); /* fill with 'A's */ + dataBadBuffer[50-1] = '\0'; /* null terminate */ + memset(dataGoodBuffer, 'A', 100-1); /* fill with 'A's */ + dataGoodBuffer[100-1] = '\0'; /* null terminate */ + /* FLAW: Set data pointer to a small buffer */ + data = dataBadBuffer; + { + size_t i, destLen; + char dest[100]; + memset(dest, 'C', 100-1); + dest[100-1] = '\0'; /* null terminate */ + destLen = strlen(dest); + /* POTENTIAL FLAW: using length of the dest where data + * could be smaller than dest causing buffer overread */ + for (i = 0; i < destLen; i++) + { + dest[i] = data[i]; // [NOT DETECTED] + } + dest[100-1] = '\0'; + printLine(dest); + } +} + +void CWE127_Buffer_Underread__char_alloca_cpy_01_bad() +{ + char * data; + char * dataBuffer = (char *)ALLOCA(100*sizeof(char)); + memset(dataBuffer, 'A', 100-1); + dataBuffer[100-1] = '\0'; + /* FLAW: Set data pointer to before the allocated memory buffer */ + data = dataBuffer - 8; + { + char dest[100*2]; + memset(dest, 'C', 100*2-1); /* fill with 'C's */ + dest[100*2-1] = '\0'; /* null terminate */ + /* POTENTIAL FLAW: Possibly copy from a memory location located before the source buffer */ + strcpy(dest, data); // [NOT DETECTED] + printLine(dest); + } +} + +#define BAD_PATH_SIZE (MAX_PATH / 2) /* maintenance note: must be < MAX_PATH in order for 'bad' to be 'bad' */ + +void CWE785_Path_Manipulation_Function_Without_Max_Sized_Buffer__w32_01_bad() +{ + { + char path[BAD_PATH_SIZE]; + DWORD length; + length = GetCurrentDirectoryA(BAD_PATH_SIZE, path); + if (length == 0 || length >= BAD_PATH_SIZE) /* failure conditions for this API call */ + { + exit(1); + } + /* FLAW: PathAppend assumes the 'path' parameter is MAX_PATH */ + /* INCIDENTAL: CWE 121 stack based buffer overflow, which is intrinsic to + * this example identified on the CWE webpage */ + if (!PathAppendA(path, "AAAAAAAAAAAA")) // [NOT DETECTED] + { + exit(1); + } + printSizeTLine(strlen(path)); + printIntLine(BAD_PATH_SIZE); + printLine(path); + } +} + +#define NULL (0) + +void CWE122_Heap_Based_Buffer_Overflow__c_CWE805_char_memcpy_01_bad() +{ + char * data; + data = NULL; + /* FLAW: Allocate and point data to a small buffer that is smaller than the large buffer used in the sinks */ + data = (char *)malloc(50*sizeof(char)); + data[0] = '\0'; /* null terminate */ + { + char source[100]; + memset(source, 'C', 100-1); /* fill with 'C's */ + source[100-1] = '\0'; /* null terminate */ + /* POTENTIAL FLAW: Possible buffer overflow if source is larger than data */ + memcpy(data, source, 100*sizeof(char)); + data[100-1] = '\0'; /* Ensure the destination buffer is null terminated */ + printLine(data); + free(data); + } +} + +void CWE121_Stack_Based_Buffer_Overflow__CWE805_char_declare_memcpy_01_bad() +{ + char * data; + char dataBadBuffer[50]; + char dataGoodBuffer[100]; + /* FLAW: Set a pointer to a "small" buffer. This buffer will be used in the sinks as a destination + * buffer in various memory copying functions using a "large" source buffer. */ + data = dataBadBuffer; + data[0] = '\0'; /* null terminate */ + { + char source[100]; + memset(source, 'C', 100-1); /* fill with 'C's */ + source[100-1] = '\0'; /* null terminate */ + /* POTENTIAL FLAW: Possible buffer overflow if the size of data is less than the length of source */ + memcpy(data, source, 100*sizeof(char)); + data[100-1] = '\0'; /* Ensure the destination buffer is null terminated */ + printLine(data); + } +} + +void CWE121_Stack_Based_Buffer_Overflow__CWE805_char_alloca_memcpy_01_bad() +{ + char * data; + char * dataBadBuffer = (char *)ALLOCA(50*sizeof(char)); + char * dataGoodBuffer = (char *)ALLOCA(100*sizeof(char)); + /* FLAW: Set a pointer to a "small" buffer. This buffer will be used in the sinks as a destination + * buffer in various memory copying functions using a "large" source buffer. */ + data = dataBadBuffer; + data[0] = '\0'; /* null terminate */ + { + char source[100]; + memset(source, 'C', 100-1); /* fill with 'C's */ + source[100-1] = '\0'; /* null terminate */ + /* POTENTIAL FLAW: Possible buffer overflow if the size of data is less than the length of source */ + memcpy(data, source, 100*sizeof(char)); + data[100-1] = '\0'; /* Ensure the destination buffer is null terminated */ + printLine(data); + } +} + +void CWE121_Stack_Based_Buffer_Overflow__CWE805_char_alloca_loop_01_bad() +{ + char * data; + char * dataBadBuffer = (char *)ALLOCA(50*sizeof(char)); + char * dataGoodBuffer = (char *)ALLOCA(100*sizeof(char)); + /* FLAW: Set a pointer to a "small" buffer. This buffer will be used in the sinks as a destination + * buffer in various memory copying functions using a "large" source buffer. */ + data = dataBadBuffer; + data[0] = '\0'; /* null terminate */ + { + size_t i; + char source[100]; + memset(source, 'C', 100-1); /* fill with 'C's */ + source[100-1] = '\0'; /* null terminate */ + /* POTENTIAL FLAW: Possible buffer overflow if the size of data is less than the length of source */ + for (i = 0; i < 100; i++) + { + data[i] = source[i]; + } + data[100-1] = '\0'; /* Ensure the destination buffer is null terminated */ + printLine(data); + } +} + +void CWE121_Stack_Based_Buffer_Overflow__CWE805_char_declare_loop_01_bad() +{ + char * data; + char dataBadBuffer[50]; + char dataGoodBuffer[100]; + /* FLAW: Set a pointer to a "small" buffer. This buffer will be used in the sinks as a destination + * buffer in various memory copying functions using a "large" source buffer. */ + data = dataBadBuffer; + data[0] = '\0'; /* null terminate */ + { + size_t i; + char source[100]; + memset(source, 'C', 100-1); /* fill with 'C's */ + source[100-1] = '\0'; /* null terminate */ + /* POTENTIAL FLAW: Possible buffer overflow if the size of data is less than the length of source */ + for (i = 0; i < 100; i++) + { + data[i] = source[i]; + } + data[100-1] = '\0'; /* Ensure the destination buffer is null terminated */ + printLine(data); + } +} + +wchar_t *wcsncpy(wchar_t *destination, const wchar_t *source, size_t num); +size_t wcslen(const wchar_t *str); +char *strcat(char *destination, const char *source); +char *strncat(char *destination, const char *source, size_t num); + +void *memmove(void *destination, const void *source, size_t num); + +void printWLine(const wchar_t *line); + +/* MAINTENANCE NOTE: The length of this string should equal the 10 */ +#define SRC_STRING L"AAAAAAAAAA" + +namespace CWE122_Heap_Based_Buffer_Overflow__cpp_CWE193_wchar_t_ncpy_01 +{ + void bad() + { + wchar_t * data; + data = NULL; + /* FLAW: Did not leave space for a null terminator */ + data = new wchar_t[10]; + { + wchar_t source[10+1] = SRC_STRING; + /* Copy length + 1 to include NUL terminator from source */ + /* POTENTIAL FLAW: data may not have enough space to hold source */ + wcsncpy(data, source, wcslen(source) + 1); + printWLine(data); + delete [] data; + } + } + + static void goodG2B() + { + wchar_t * data; + data = NULL; + /* FIX: Allocate space for a null terminator */ + data = new wchar_t[10+1]; + { + wchar_t source[10+1] = SRC_STRING; + /* Copy length + 1 to include NUL terminator from source */ + /* POTENTIAL FLAW: data may not have enough space to hold source */ + wcsncpy(data, source, wcslen(source) + 1); // [FALSE POSITIVE RESULT] (debatable) + printWLine(data); + delete [] data; + } + } +} /* close namespace */ + +namespace CWE122_Heap_Based_Buffer_Overflow__cpp_CWE193_wchar_t_memmove_31 +{ + void bad() + { + wchar_t * data; + data = NULL; + /* FLAW: Did not leave space for a null terminator */ + data = new wchar_t[10]; + { + wchar_t * dataCopy = data; + wchar_t * data = dataCopy; + { + wchar_t source[10+1] = SRC_STRING; + /* Copy length + 1 to include NUL terminator from source */ + /* POTENTIAL FLAW: data may not have enough space to hold source */ + memmove(data, source, (wcslen(source) + 1) * sizeof(wchar_t)); // [NOT DETECTED] + printWLine(data); + delete [] data; + } + } + } +} /* close namespace */ + +namespace CWE122_Heap_Based_Buffer_Overflow__cpp_CWE805_char_ncat_01 +{ + void bad() + { + char * data; + data = NULL; + /* FLAW: Allocate using new[] and point data to a small buffer that is smaller than the large buffer used in the sinks */ + data = new char[50]; + data[0] = '\0'; /* null terminate */ + { + char source[100]; + memset(source, 'C', 100-1); /* fill with 'C's */ + source[100-1] = '\0'; /* null terminate */ + /* POTENTIAL FLAW: Possible buffer overflow if source is larger than sizeof(data)-strlen(data) */ + strncat(data, source, 100); + printLine(data); + delete [] data; + } + } +} /* close namespace */ + +void CWE122_Heap_Based_Buffer_Overflow__c_dest_char_cat_01_bad() +{ + char * data; + data = NULL; + /* FLAW: Allocate and point data to a small buffer that is smaller than the large buffer used in the sinks */ + data = (char *)malloc(50*sizeof(char)); + data[0] = '\0'; /* null terminate */ + { + char source[100]; + memset(source, 'C', 100-1); /* fill with 'C's */ + source[100-1] = '\0'; /* null terminate */ + /* POTENTIAL FLAW: Possible buffer overflow if source is larger than sizeof(data)-strlen(data) */ + strcat(data, source); // [NOT DETECTED] + printLine(data); + free(data); + } +} + +void CWE121_Stack_Based_Buffer_Overflow__CWE131_memcpy_01_bad() +{ + int * data; + data = NULL; + /* FLAW: Allocate memory without using sizeof(int) */ + data = (int *)ALLOCA(10); + { + int source[10] = {0}; + /* POTENTIAL FLAW: Possible buffer overflow if data was not allocated correctly in the source */ + memcpy(data, source, 10*sizeof(int)); + printIntLine(data[0]); + } +} + +typedef long long int64_t; +wchar_t *wmemset(wchar_t *dest, wchar_t c, size_t count); +void* calloc(size_t num, size_t size); + +void printLongLongLine(int64_t longLongIntNumber); +void printDoubleLine(double doubleNumber); + +void CWE122_Heap_Based_Buffer_Overflow__cpp_CWE805_int64_t_loop_01_bad() +{ + int64_t * data; + data = NULL; + /* FLAW: Allocate using new[] and point data to a small buffer that is smaller than the large buffer used in the sinks */ + data = new int64_t[50]; + { + int64_t source[100] = {0}; /* fill with 0's */ + { + size_t i; + /* POTENTIAL FLAW: Possible buffer overflow if data < 100 */ + for (i = 0; i < 100; i++) + { + data[i] = source[i]; // [NOT DETECTED] + } + printLongLongLine(data[0]); + delete [] data; + } + } +} + +void CWE122_Heap_Based_Buffer_Overflow__cpp_CWE805_wchar_t_loop_01_bad() +{ + wchar_t * data; + data = NULL; + /* FLAW: Allocate using new[] and point data to a small buffer that is smaller than the large buffer used in the sinks */ + data = new wchar_t[50]; + data[0] = L'\0'; /* null terminate */ + { + size_t i; + wchar_t source[100]; + wmemset(source, L'C', 100-1); /* fill with L'C's */ + source[100-1] = L'\0'; /* null terminate */ + /* POTENTIAL FLAW: Possible buffer overflow if source is larger than data */ + for (i = 0; i < 100; i++) + { + data[i] = source[i]; + } + data[100-1] = L'\0'; /* Ensure the destination buffer is null terminated */ + printWLine(data); + delete [] data; + } +} + +void CWE122_Heap_Based_Buffer_Overflow__cpp_CWE805_wchar_t_ncpy_01_bad() +{ + wchar_t * data; + data = NULL; + /* FLAW: Allocate using new[] and point data to a small buffer that is smaller than the large buffer used in the sinks */ + data = new wchar_t[50]; + data[0] = L'\0'; /* null terminate */ + { + wchar_t source[100]; + wmemset(source, L'C', 100-1); /* fill with L'C's */ + source[100-1] = L'\0'; /* null terminate */ + /* POTENTIAL FLAW: Possible buffer overflow if source is larger than data */ + wcsncpy(data, source, 100-1); + data[100-1] = L'\0'; /* Ensure the destination buffer is null terminated */ + printWLine(data); + delete [] data; + } +} + +#ifdef _WIN32 +int _snwprintf(wchar_t *buffer, size_t count, const wchar_t *format, ...); +#define SNPRINTF _snwprintf +#else +int snprintf(char *s, size_t n, const char *format, ...); +int swprintf(wchar_t *wcs, size_t maxlen, const wchar_t *format, ...); +//#define SNPRINTF snprintf --- original code; using snprintf appears to be a mistake in samate? +#define SNPRINTF swprintf +#endif + +void CWE122_Heap_Based_Buffer_Overflow__cpp_CWE805_wchar_t_snprintf_01_bad() +{ + wchar_t * data; + data = NULL; + /* FLAW: Allocate using new[] and point data to a small buffer that is smaller than the large buffer used in the sinks */ + data = new wchar_t[50]; + data[0] = L'\0'; /* null terminate */ + { + wchar_t source[100]; + wmemset(source, L'C', 100-1); /* fill with L'C's */ + source[100-1] = L'\0'; /* null terminate */ + /* POTENTIAL FLAW: Possible buffer overflow if source is larger than data */ + SNPRINTF(data, 100, L"%s", source); + printWLine(data); + delete [] data; + } +} + +/* classes used in some test cases as a custom type */ +class TwoIntsClass +{ + public: // Needed to access variables from label files + int intOne; + int intTwo; +}; + +class OneIntClass +{ + public: // Needed to access variables from label files + int intOne; +}; + +void *operator new(size_t size, void *ptr) throw(); // placement new (from #include ) + +void CWE122_Heap_Based_Buffer_Overflow__placement_new_01_bad() +{ + char * data; + char * dataBadBuffer = (char *)malloc(sizeof(OneIntClass)); + char * dataGoodBuffer = (char *)malloc(sizeof(TwoIntsClass)); + /* POTENTIAL FLAW: Initialize data to a buffer small than the sizeof(TwoIntsClass) */ + data = dataBadBuffer; + { + /* The Visual C++ compiler generates a warning if you initialize the class with (). + * This will cause the compile to default-initialize the object. + * See http://msdn.microsoft.com/en-us/library/wewb47ee%28v=VS.100%29.aspx + */ + /* POTENTIAL FLAW: data may not be large enough to hold a TwoIntsClass */ + TwoIntsClass * classTwo = new(data) TwoIntsClass; // [NOT DETECTED] + /* Initialize and make use of the class */ + classTwo->intOne = 5; + classTwo->intTwo = 10; /* POTENTIAL FLAW: If sizeof(data) < sizeof(TwoIntsClass) then this line will be a buffer overflow */ + printIntLine(classTwo->intOne); + /* skip printing classTwo->intTwo since that could be a buffer overread */ + free(data); + } +} + +void CWE122_Heap_Based_Buffer_Overflow__sizeof_double_01_bad() +{ + double * data; + /* Initialize data */ + data = NULL; + /* INCIDENTAL: CWE-467 (Use of sizeof() on a pointer type) */ + /* FLAW: Using sizeof the pointer and not the data type in malloc() */ + data = (double *)malloc(sizeof(data)); // [NOT DETECTED] + *data = 1.7E300; + /* POTENTIAL FLAW: Attempt to use data, which may not have enough memory allocated */ + printDoubleLine(*data); + free(data); +} + +int rand(void); +#define RAND32() ((rand()<<30) ^ (rand()<<15) ^ rand()) + +void CWE122_Heap_Based_Buffer_Overflow__c_CWE129_rand_01_bad() +{ + int data; + /* Initialize data */ + data = -1; + /* POTENTIAL FLAW: Set data to a random value */ + data = RAND32(); + { + int i; + int * buffer = (int *)malloc(10 * sizeof(int)); + /* initialize buffer */ + for (i = 0; i < 10; i++) + { + buffer[i] = 0; + } + /* POTENTIAL FLAW: Attempt to write to an index of the array that is above the upper bound + * This code does check to see if the array index is negative */ + if (data >= 0) + { + buffer[data] = 1; // [NOT DETECTED] + /* Print the array values */ + for(i = 0; i < 10; i++) + { + printIntLine(buffer[i]); + } + } + else + { + printLine("ERROR: Array index is negative."); + } + free(buffer); + } +} + +typedef struct FILE; +int fscanf(FILE *stream, const char *format, ...); +FILE *stdin; + +void CWE122_Heap_Based_Buffer_Overflow__c_CWE129_fscanf_01_bad() +{ + int data; + /* Initialize data */ + data = -1; + /* POTENTIAL FLAW: Read data from the console using fscanf() */ + fscanf(stdin, "%d", &data); + { + int i; + int * buffer = (int *)malloc(10 * sizeof(int)); + /* initialize buffer */ + for (i = 0; i < 10; i++) + { + buffer[i] = 0; + } + /* POTENTIAL FLAW: Attempt to write to an index of the array that is above the upper bound + * This code does check to see if the array index is negative */ + if (data >= 0) + { + buffer[data] = 1; // [NOT DETECTED] + /* Print the array values */ + for(i = 0; i < 10; i++) + { + printIntLine(buffer[i]); + } + } + else + { + printLine("ERROR: Array index is negative."); + } + free(buffer); + } +} + +void CWE122_Heap_Based_Buffer_Overflow__cpp_CWE805_wchar_t_snprintf_31_bad() +{ + wchar_t * data; + data = NULL; + /* FLAW: Allocate using new[] and point data to a small buffer that is smaller than the large buffer used in the sinks */ + data = new wchar_t[50]; + data[0] = L'\0'; /* null terminate */ + { + wchar_t * dataCopy = data; + wchar_t * data = dataCopy; + { + wchar_t source[100]; + wmemset(source, L'C', 100-1); /* fill with L'C's */ + source[100-1] = L'\0'; /* null terminate */ + /* POTENTIAL FLAW: Possible buffer overflow if source is larger than data */ + SNPRINTF(data, 100, L"%s", source); + printWLine(data); + delete [] data; + } + } +} + +int rand(void); + +int globalReturnsTrueOrFalse() +{ + return (rand() % 2); +} + +#define SRC_STRING "AAAAAAAAAA" + +void CWE121_Stack_Based_Buffer_Overflow__CWE193_char_declare_cpy_12_bad() +{ + char * data; + char dataBadBuffer[10]; + char dataGoodBuffer[10+1]; + if(globalReturnsTrueOrFalse()) + { + /* FLAW: Set a pointer to a buffer that does not leave room for a NULL terminator when performing + * string copies in the sinks */ + data = dataBadBuffer; + data[0] = '\0'; /* null terminate */ + } + else + { + /* FIX: Set a pointer to a buffer that leaves room for a NULL terminator when performing + * string copies in the sinks */ + data = dataGoodBuffer; + data[0] = '\0'; /* null terminate */ + } + { + char source[10+1] = SRC_STRING; + /* POTENTIAL FLAW: data may not have enough space to hold source */ // [NOT DETECTED] + strcpy(data, source); + printLine(data); + } +} diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-129/SAMATE/ImproperArrayIndexValidation/CWE122_Heap_Based_Buffer_Overflow__c_CWE129_fgets_01.c b/cpp/ql/test/query-tests/Security/CWE/CWE-129/SAMATE/ImproperArrayIndexValidation/CWE122_Heap_Based_Buffer_Overflow__c_CWE129_fgets_01.c new file mode 100644 index 00000000000..911e9987472 --- /dev/null +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-129/SAMATE/ImproperArrayIndexValidation/CWE122_Heap_Based_Buffer_Overflow__c_CWE129_fgets_01.c @@ -0,0 +1,65 @@ +// Snippet from an external (samate) test case for rule CWE-122 / CWE-129 +// CWE122_Heap_Based_Buffer_Overflow__c_CWE129_fgets_01.c + +typedef unsigned long size_t; +void *malloc(size_t size); +void free(void *ptr); +#define NULL (0) + +typedef struct {} FILE; +FILE *stdin; +char *fgets(char *s, int n, FILE *stream); + +int atoi(const char *nptr); + +void printLine(const char *str); +void printIntLine(int val); + +// --- + +#define CHAR_ARRAY_SIZE (64) + +void CWE122_Heap_Based_Buffer_Overflow__c_CWE129_fgets_01_bad() +{ + int data; + /* Initialize data */ + data = -1; + { + char inputBuffer[CHAR_ARRAY_SIZE] = ""; + /* POTENTIAL FLAW: Read data from the console using fgets() */ + if (fgets(inputBuffer, CHAR_ARRAY_SIZE, stdin) != NULL) + { + /* Convert to int */ + data = atoi(inputBuffer); + } + else + { + printLine("fgets() failed."); + } + } + { + int i; + int * buffer = (int *)malloc(10 * sizeof(int)); + /* initialize buffer */ + for (i = 0; i < 10; i++) + { + buffer[i] = 0; + } + /* POTENTIAL FLAW: Attempt to write to an index of the array that is above the upper bound + * This code does check to see if the array index is negative */ + if (data >= 0) + { + buffer[data] = 1; + /* Print the array values */ + for(i = 0; i < 10; i++) + { + printIntLine(buffer[i]); + } + } + else + { + printLine("ERROR: Array index is negative."); + } + free(buffer); + } +} \ No newline at end of file diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-129/SAMATE/ImproperArrayIndexValidation/ImproperArrayIndexValidation.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-129/SAMATE/ImproperArrayIndexValidation/ImproperArrayIndexValidation.expected new file mode 100644 index 00000000000..357b583436b --- /dev/null +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-129/SAMATE/ImproperArrayIndexValidation/ImproperArrayIndexValidation.expected @@ -0,0 +1 @@ +| CWE122_Heap_Based_Buffer_Overflow__c_CWE129_fgets_01.c:51:20:51:23 | data | $@ flows to here and is used in an array indexing expression, potentially causing an invalid access. | CWE122_Heap_Based_Buffer_Overflow__c_CWE129_fgets_01.c:29:19:29:29 | inputBuffer | User-provided value | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-129/SAMATE/ImproperArrayIndexValidation/ImproperArrayIndexValidation.qlref b/cpp/ql/test/query-tests/Security/CWE/CWE-129/SAMATE/ImproperArrayIndexValidation/ImproperArrayIndexValidation.qlref new file mode 100644 index 00000000000..f1d46d8f8d6 --- /dev/null +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-129/SAMATE/ImproperArrayIndexValidation/ImproperArrayIndexValidation.qlref @@ -0,0 +1 @@ +Security/CWE/CWE-129/ImproperArrayIndexValidation.ql \ No newline at end of file diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/connect_socket_w32_vsnprintf_01/test.c b/cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/connect_socket_w32_vsnprintf_01/test.c new file mode 100644 index 00000000000..ccba3e54840 --- /dev/null +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/connect_socket_w32_vsnprintf_01/test.c @@ -0,0 +1,126 @@ +// External test case from SAMATE's Juliet Test Suite for C/C++ +// (http://samate.nist.gov/SRD/testsuite.php) +// Associated with CWE-134: Uncontrolled format string. http://cwe.mitre.org/data/definitions/134.html +// This is a snippet with added declarations, not the entire test case. + +typedef unsigned long size_t; + +typedef void *va_list; +#define va_start(ap, parmN) +#define va_end(ap) +#define va_arg(ap, type) ((type)0) + +int vsnprintf(char *s, size_t n, const char *format, va_list arg); + +size_t strlen(const char *s); + +#define SOCKET int +#define INVALID_SOCKET (0) +#define SOCKET_ERROR (1) +#define AF_INET (2) +#define SOCK_STREAM (3) +#define IPPROTO_TCP (4) +#define IP_ADDRESS (5) +#define TCP_PORT (6) +typedef int in_addr_t; +struct in_addr { + in_addr_t s_addr; +}; +struct sockaddr_in { + int sin_family; + int sin_port; + struct in_addr sin_addr; +}; +in_addr_t inet_addr(const char *cp); + +#define IP_ADDRESS "0.0.0.0" + +void printLine(char *); + +static void badVaSink(char * data, ...) +{ + { + char dest[100] = ""; + va_list args; + va_start(args, data); + /* POTENTIAL FLAW: Do not specify the format allowing a possible format string vulnerability */ + vsnprintf(dest, 100-1, data, args); + va_end(args); + printLine(dest); + } +} + +void CWE134_Uncontrolled_Format_String__char_connect_socket_w32_vsnprintf_01_bad() +{ + char * data; + char dataBuffer[100] = ""; + data = dataBuffer; + { +#ifdef _WIN32 + WSADATA wsaData; + int wsaDataInit = 0; +#endif + int recvResult; + struct sockaddr_in service; + char *replace; + SOCKET connectSocket = INVALID_SOCKET; + size_t dataLen = strlen(data); + do + { +#ifdef _WIN32 + if (WSAStartup(MAKEWORD(2,2), &wsaData) != NO_ERROR) + { + break; + } + wsaDataInit = 1; +#endif + /* POTENTIAL FLAW: Read data using a connect socket */ + connectSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); + if (connectSocket == INVALID_SOCKET) + { + break; + } + memset(&service, 0, sizeof(service)); + service.sin_family = AF_INET; + service.sin_addr.s_addr = inet_addr(IP_ADDRESS); + service.sin_port = htons(TCP_PORT); + if (connect(connectSocket, (struct sockaddr*)&service, sizeof(service)) == SOCKET_ERROR) + { + break; + } + /* Abort on error or the connection was closed, make sure to recv one + * less char than is in the recv_buf in order to append a terminator */ + /* Abort on error or the connection was closed */ + recvResult = recv(connectSocket, (char *)(data + dataLen), sizeof(char) * (100 - dataLen - 1), 0); + if (recvResult == SOCKET_ERROR || recvResult == 0) + { + break; + } + /* Append null terminator */ + data[dataLen + recvResult / sizeof(char)] = '\0'; + /* Eliminate CRLF */ + replace = strchr(data, '\r'); + if (replace) + { + *replace = '\0'; + } + replace = strchr(data, '\n'); + if (replace) + { + *replace = '\0'; + } + } + while (0); + if (connectSocket != INVALID_SOCKET) + { + CLOSE_SOCKET(connectSocket); + } +#ifdef _WIN32 + if (wsaDataInit) + { + WSACleanup(); + } +#endif + } + badVaSink(data, data); +} diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/connect_socket_w32_vsnprintf_01/test.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/connect_socket_w32_vsnprintf_01/test.expected new file mode 100644 index 00000000000..46fc6b5a61d --- /dev/null +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/connect_socket_w32_vsnprintf_01/test.expected @@ -0,0 +1,17 @@ +edges +| test.c:93:46:93:69 | recv output argument | test.c:124:15:124:18 | data | +| test.c:93:46:93:69 | recv output argument | test.c:124:15:124:18 | data | +| test.c:93:46:93:69 | recv output argument | test.c:124:15:124:18 | data indirection | +| test.c:93:55:93:68 | ... + ... | test.c:124:15:124:18 | data | +| test.c:93:55:93:68 | ... + ... | test.c:124:15:124:18 | data | +| test.c:93:55:93:68 | ... + ... | test.c:124:15:124:18 | data indirection | +nodes +| test.c:93:46:93:69 | recv output argument | semmle.label | recv output argument | +| test.c:93:55:93:68 | ... + ... | semmle.label | ... + ... | +| test.c:124:15:124:18 | data | semmle.label | data | +| test.c:124:15:124:18 | data | semmle.label | data | +| test.c:124:15:124:18 | data | semmle.label | data | +| test.c:124:15:124:18 | data indirection | semmle.label | data indirection | +| test.c:124:15:124:18 | data indirection | semmle.label | data indirection | +#select +| test.c:124:15:124:18 | data | test.c:93:55:93:68 | ... + ... | test.c:124:15:124:18 | data | The value of this argument may come from $@ and is being used as a formatting argument to badVaSink(data), which calls vsnprintf(format) | test.c:93:55:93:68 | ... + ... | recv | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/connect_socket_w32_vsnprintf_01/test.qlref b/cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/connect_socket_w32_vsnprintf_01/test.qlref new file mode 100644 index 00000000000..079e0c8a7c0 --- /dev/null +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/connect_socket_w32_vsnprintf_01/test.qlref @@ -0,0 +1 @@ +Security/CWE/CWE-134/UncontrolledFormatString.ql \ No newline at end of file diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/console_fprintf_01/test.c b/cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/console_fprintf_01/test.c new file mode 100644 index 00000000000..af6affbd1ac --- /dev/null +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/console_fprintf_01/test.c @@ -0,0 +1,161 @@ +// External test case from SAMATE's Juliet Test Suite for C/C++ +// (http://samate.nist.gov/SRD/testsuite.php) +// Associated with CWE-134: Uncontrolled format string. http://cwe.mitre.org/data/definitions/134.html +// Examples amended to have all function declarations inlined. + +/* TEMPLATE GENERATED TESTCASE FILE +Filename: CWE134_Uncontrolled_Format_String__char_console_fprintf_01.c +Label Definition File: CWE134_Uncontrolled_Format_String.label.xml +Template File: sources-sinks-01.tmpl.c +*/ +/* + * @description + * CWE: 134 Uncontrolled Format String + * BadSource: console Read input from the console + * GoodSource: Copy a fixed string into data + * Sinks: fprintf + * GoodSink: fprintf with "%s" as the second argument and data as the third + * BadSink : fprintf with data as the second argument + * Flow Variant: 01 Baseline + * + * */ + +// Replaced with inlined functions +//#include "std_testcase.h" +// +//#ifndef _WIN32 +//# include +//#endif +#define NULL 0 +typedef unsigned long size_t; +typedef struct {} FILE; +extern FILE * stdin; +extern FILE * stdout; +size_t strlen(const char *s); +char *fgets(char *s, int n, FILE *stream); +int fprintf(FILE *stream, const char *format, ...); +char *strcpy(char *s1, const char *s2); +void srand(unsigned int seed); + +void printLine(char *); + +#ifndef OMITBAD + +void CWE134_Uncontrolled_Format_String__char_console_fprintf_01_bad() +{ + char * data; + char data_buf[100] = ""; + data = data_buf; + { + /* Read input from the console */ + size_t data_len = strlen(data); + /* if there is room in data, read into it from the console */ + /* POTENTIAL FLAW: Read data from the console */ + if(100-data_len > 1) + { + if (fgets(data+data_len, (int)(100-data_len), stdin) != NULL) + { + /* The next 3 lines remove the carriage return from the string that is + * inserted by fgets() */ + data_len = strlen(data); + if (data_len > 0 && data[data_len-1] == '\n') + { + data[data_len-1] = '\0'; + } + } + else + { + printLine("fgets() failed"); + /* Restore NUL terminator if fgets fails */ + data[data_len] = '\0'; + } + } + } + /* POTENTIAL FLAW: Do not specify the format allowing a possible format string vulnerability */ + fprintf(stdout, data); +} + +#endif /* OMITBAD */ + +#ifndef OMITGOOD + +/* goodG2B uses the GoodSource with the BadSink */ +static void goodG2B() +{ + char * data; + char data_buf[100] = ""; + data = data_buf; + /* FIX: Use a fixed string that does not contain a format specifier */ + strcpy(data, "fixedstringtest"); + /* POTENTIAL FLAW: Do not specify the format allowing a possible format string vulnerability */ + fprintf(stdout, data); +} + +/* goodB2G uses the BadSource with the GoodSink */ +static void goodB2G() +{ + char * data; + char data_buf[100] = ""; + data = data_buf; + { + /* Read input from the console */ + size_t data_len = strlen(data); + /* if there is room in data, read into it from the console */ + /* POTENTIAL FLAW: Read data from the console */ + if(100-data_len > 1) + { + if (fgets(data+data_len, (int)(100-data_len), stdin) != NULL) + { + /* The next 3 lines remove the carriage return from the string that is + * inserted by fgets() */ + data_len = strlen(data); + if (data_len > 0 && data[data_len-1] == '\n') + { + data[data_len-1] = '\0'; + } + } + else + { + printLine("fgets() failed"); + /* Restore NUL terminator if fgets fails */ + data[data_len] = '\0'; + } + } + } + /* FIX: Specify the format disallowing a format string vulnerability */ + fprintf(stdout, "%s\n", data); +} + +void CWE134_Uncontrolled_Format_String__char_console_fprintf_01_good() +{ + goodG2B(); + goodB2G(); +} + +#endif /* OMITGOOD */ + +/* Below is the main(). It is only used when building this testcase on + its own for testing or for building a binary to use in testing binary + analysis tools. It is not used when compiling all the testcases as one + application, which is how source code analysis tools are tested. */ + +#ifdef INCLUDEMAIN + +int main(int argc, char * argv[]) +{ + /* seed randomness */ + srand( (unsigned)time(NULL) ); +#ifndef OMITGOOD + printLine("Calling good()..."); + CWE134_Uncontrolled_Format_String__char_console_fprintf_01_good(); + printLine("Finished good()"); +#endif /* OMITGOOD */ +#ifndef OMITBAD + printLine("Calling bad()..."); + CWE134_Uncontrolled_Format_String__char_console_fprintf_01_bad(); + printLine("Finished bad()"); +#endif /* OMITBAD */ + return 0; +} + +#endif diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/console_fprintf_01/test.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/console_fprintf_01/test.expected new file mode 100644 index 00000000000..5e6af965119 --- /dev/null +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/console_fprintf_01/test.expected @@ -0,0 +1,17 @@ +edges +| test.c:56:23:56:35 | ... + ... | test.c:75:21:75:24 | (const char *)... | +| test.c:56:23:56:35 | ... + ... | test.c:75:21:75:24 | data | +| test.c:56:23:56:35 | ... + ... | test.c:75:21:75:24 | data indirection | +| test.c:56:23:56:35 | fgets output argument | test.c:75:21:75:24 | (const char *)... | +| test.c:56:23:56:35 | fgets output argument | test.c:75:21:75:24 | data | +| test.c:56:23:56:35 | fgets output argument | test.c:75:21:75:24 | data indirection | +nodes +| test.c:56:23:56:35 | ... + ... | semmle.label | ... + ... | +| test.c:56:23:56:35 | fgets output argument | semmle.label | fgets output argument | +| test.c:75:21:75:24 | (const char *)... | semmle.label | (const char *)... | +| test.c:75:21:75:24 | (const char *)... | semmle.label | (const char *)... | +| test.c:75:21:75:24 | data | semmle.label | data | +| test.c:75:21:75:24 | data indirection | semmle.label | data indirection | +| test.c:75:21:75:24 | data indirection | semmle.label | data indirection | +#select +| test.c:75:21:75:24 | data | test.c:56:23:56:35 | ... + ... | test.c:75:21:75:24 | data | The value of this argument may come from $@ and is being used as a formatting argument to fprintf(format) | test.c:56:23:56:35 | ... + ... | fgets | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/console_fprintf_01/test.qlref b/cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/console_fprintf_01/test.qlref new file mode 100644 index 00000000000..079e0c8a7c0 --- /dev/null +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/console_fprintf_01/test.qlref @@ -0,0 +1 @@ +Security/CWE/CWE-134/UncontrolledFormatString.ql \ No newline at end of file diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/environment_fprintf_01/test.c b/cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/environment_fprintf_01/test.c new file mode 100644 index 00000000000..753183ca31a --- /dev/null +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/environment_fprintf_01/test.c @@ -0,0 +1,136 @@ +// External test case from SAMATE's Juliet Test Suite for C/C++ +// (http://samate.nist.gov/SRD/testsuite.php) +// Associated with CWE-134: Uncontrolled format string. http://cwe.mitre.org/data/definitions/134.html +// Examples amended to have all function declarations inlined. + +/* TEMPLATE GENERATED TESTCASE FILE +Filename: CWE134_Uncontrolled_Format_String__char_environment_fprintf_01.c +Label Definition File: CWE134_Uncontrolled_Format_String.label.xml +Template File: sources-sinks-01.tmpl.c +*/ +/* + * @description + * CWE: 134 Uncontrolled Format String + * BadSource: environment Read input from an environment variable + * GoodSource: Copy a fixed string into data + * Sinks: fprintf + * GoodSink: fprintf with "%s" as the second argument and data as the third + * BadSink : fprintf with data as the second argument + * Flow Variant: 01 Baseline + * + * */ + +// Replaced with inlined functions +//#include "std_testcase.h" +// +//#ifndef _WIN32 +//# include +//#endif +#define NULL 0 +typedef struct {} FILE; +typedef unsigned long size_t; +extern FILE * stdout; +void srand(unsigned int seed); +size_t strlen(const char *s); +char *getenv(const char *name); +char *strcpy(char *s1, const char *s2); +char *strncat(char *s1, const char *s2, size_t n); +int fprintf(FILE *stream, const char *format, ...); + +void printLine(char *); + +#define ENV_VARIABLE "ADD" +#define GETENV getenv + +#ifndef OMITBAD + +void CWE134_Uncontrolled_Format_String__char_environment_fprintf_01_bad() +{ + char * data; + char data_buf[100] = ""; + data = data_buf; + { + /* Append input from an environment variable to data */ + size_t data_len = strlen(data); + char * environment = GETENV(ENV_VARIABLE); + /* If there is data in the environment variable */ + if (environment != NULL) + { + /* POTENTIAL FLAW: Read data from an environment variable */ + strncat(data+data_len, environment, 100-data_len-1); + } + } + /* POTENTIAL FLAW: Do not specify the format allowing a possible format string vulnerability */ + fprintf(stdout, data); +} + +#endif /* OMITBAD */ + +#ifndef OMITGOOD + +/* goodG2B uses the GoodSource with the BadSink */ +static void goodG2B() +{ + char * data; + char data_buf[100] = ""; + data = data_buf; + /* FIX: Use a fixed string that does not contain a format specifier */ + strcpy(data, "fixedstringtest"); + /* POTENTIAL FLAW: Do not specify the format allowing a possible format string vulnerability */ + fprintf(stdout, data); +} + +/* goodB2G uses the BadSource with the GoodSink */ +static void goodB2G() +{ + char * data; + char data_buf[100] = ""; + data = data_buf; + { + /* Append input from an environment variable to data */ + size_t data_len = strlen(data); + char * environment = GETENV(ENV_VARIABLE); + /* If there is data in the environment variable */ + if (environment != NULL) + { + /* POTENTIAL FLAW: Read data from an environment variable */ + strncat(data+data_len, environment, 100-data_len-1); + } + } + /* FIX: Specify the format disallowing a format string vulnerability */ + fprintf(stdout, "%s\n", data); +} + +void CWE134_Uncontrolled_Format_String__char_environment_fprintf_01_good() +{ + goodG2B(); + goodB2G(); +} + +#endif /* OMITGOOD */ + +/* Below is the main(). It is only used when building this testcase on + its own for testing or for building a binary to use in testing binary + analysis tools. It is not used when compiling all the testcases as one + application, which is how source code analysis tools are tested. */ + +#ifdef INCLUDEMAIN + +int main(int argc, char * argv[]) +{ + /* seed randomness */ + srand( (unsigned)time(NULL) ); +#ifndef OMITGOOD + printLine("Calling good()..."); + CWE134_Uncontrolled_Format_String__char_environment_fprintf_01_good(); + printLine("Finished good()"); +#endif /* OMITGOOD */ +#ifndef OMITBAD + printLine("Calling bad()..."); + CWE134_Uncontrolled_Format_String__char_environment_fprintf_01_bad(); + printLine("Finished bad()"); +#endif /* OMITBAD */ + return 0; +} + +#endif diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/environment_fprintf_01/test.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/environment_fprintf_01/test.expected new file mode 100644 index 00000000000..122dff5b3f0 --- /dev/null +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/environment_fprintf_01/test.expected @@ -0,0 +1,17 @@ +edges +| test.c:59:30:59:35 | call to getenv | test.c:68:21:68:24 | (const char *)... | +| test.c:59:30:59:35 | call to getenv | test.c:68:21:68:24 | (const char *)... | +| test.c:59:30:59:35 | call to getenv | test.c:68:21:68:24 | data | +| test.c:59:30:59:35 | call to getenv | test.c:68:21:68:24 | data | +| test.c:59:30:59:35 | call to getenv | test.c:68:21:68:24 | data indirection | +| test.c:59:30:59:35 | call to getenv | test.c:68:21:68:24 | data indirection | +nodes +| test.c:59:30:59:35 | call to getenv | semmle.label | call to getenv | +| test.c:59:30:59:35 | call to getenv | semmle.label | call to getenv | +| test.c:68:21:68:24 | (const char *)... | semmle.label | (const char *)... | +| test.c:68:21:68:24 | (const char *)... | semmle.label | (const char *)... | +| test.c:68:21:68:24 | data | semmle.label | data | +| test.c:68:21:68:24 | data indirection | semmle.label | data indirection | +| test.c:68:21:68:24 | data indirection | semmle.label | data indirection | +#select +| test.c:68:21:68:24 | data | test.c:59:30:59:35 | call to getenv | test.c:68:21:68:24 | data | The value of this argument may come from $@ and is being used as a formatting argument to fprintf(format) | test.c:59:30:59:35 | call to getenv | getenv | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/environment_fprintf_01/test.qlref b/cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/environment_fprintf_01/test.qlref new file mode 100644 index 00000000000..079e0c8a7c0 --- /dev/null +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/environment_fprintf_01/test.qlref @@ -0,0 +1 @@ +Security/CWE/CWE-134/UncontrolledFormatString.ql \ No newline at end of file diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-190/SAMATE/ArithmeticTainted.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-190/SAMATE/ArithmeticTainted.expected new file mode 100644 index 00000000000..858be731077 --- /dev/null +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-190/SAMATE/ArithmeticTainted.expected @@ -0,0 +1,13 @@ +edges +| examples.cpp:62:26:62:30 | & ... | examples.cpp:65:11:65:14 | data | +| examples.cpp:62:26:62:30 | & ... | examples.cpp:65:11:65:14 | data | +| examples.cpp:62:26:62:30 | fscanf output argument | examples.cpp:65:11:65:14 | data | +| examples.cpp:62:26:62:30 | fscanf output argument | examples.cpp:65:11:65:14 | data | +nodes +| examples.cpp:62:26:62:30 | & ... | semmle.label | & ... | +| examples.cpp:62:26:62:30 | fscanf output argument | semmle.label | fscanf output argument | +| examples.cpp:65:11:65:14 | data | semmle.label | data | +| examples.cpp:65:11:65:14 | data | semmle.label | data | +| examples.cpp:65:11:65:14 | data | semmle.label | data | +#select +| examples.cpp:65:11:65:14 | data | examples.cpp:62:26:62:30 | & ... | examples.cpp:65:11:65:14 | data | $@ flows to here and is used in arithmetic, potentially causing an underflow. | examples.cpp:62:26:62:30 | & ... | User-provided value | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-190/SAMATE/ArithmeticTainted.qlref b/cpp/ql/test/query-tests/Security/CWE/CWE-190/SAMATE/ArithmeticTainted.qlref new file mode 100644 index 00000000000..3939653db1c --- /dev/null +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-190/SAMATE/ArithmeticTainted.qlref @@ -0,0 +1 @@ +Security/CWE/CWE-190/ArithmeticTainted.ql diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-190/SAMATE/ArithmeticUncontrolled.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-190/SAMATE/ArithmeticUncontrolled.expected new file mode 100644 index 00000000000..14f313e62cf --- /dev/null +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-190/SAMATE/ArithmeticUncontrolled.expected @@ -0,0 +1,77 @@ +edges +| examples.cpp:21:26:21:33 | (unsigned int)... | examples.cpp:24:31:24:34 | data | +| examples.cpp:21:26:21:33 | (unsigned int)... | examples.cpp:24:31:24:34 | data | +| examples.cpp:21:26:21:33 | (unsigned int)... | examples.cpp:24:31:24:34 | data | +| examples.cpp:21:26:21:33 | (unsigned int)... | examples.cpp:24:31:24:34 | data | +| examples.cpp:21:26:21:33 | (unsigned int)... | examples.cpp:24:31:24:34 | data | +| examples.cpp:21:26:21:33 | (unsigned int)... | examples.cpp:24:31:24:34 | data | +| examples.cpp:21:26:21:33 | call to rand | examples.cpp:24:31:24:34 | data | +| examples.cpp:21:26:21:33 | call to rand | examples.cpp:24:31:24:34 | data | +| examples.cpp:21:26:21:33 | call to rand | examples.cpp:24:31:24:34 | data | +| examples.cpp:21:26:21:33 | call to rand | examples.cpp:24:31:24:34 | data | +| examples.cpp:21:26:21:33 | call to rand | examples.cpp:24:31:24:34 | data | +| examples.cpp:21:26:21:33 | call to rand | examples.cpp:24:31:24:34 | data | +| examples.cpp:34:26:34:33 | (unsigned int)... | examples.cpp:37:9:37:12 | data | +| examples.cpp:34:26:34:33 | (unsigned int)... | examples.cpp:37:9:37:12 | data | +| examples.cpp:34:26:34:33 | (unsigned int)... | examples.cpp:37:9:37:12 | data | +| examples.cpp:34:26:34:33 | (unsigned int)... | examples.cpp:37:9:37:12 | data | +| examples.cpp:34:26:34:33 | (unsigned int)... | examples.cpp:37:9:37:12 | data | +| examples.cpp:34:26:34:33 | (unsigned int)... | examples.cpp:37:9:37:12 | data | +| examples.cpp:34:26:34:33 | call to rand | examples.cpp:37:9:37:12 | data | +| examples.cpp:34:26:34:33 | call to rand | examples.cpp:37:9:37:12 | data | +| examples.cpp:34:26:34:33 | call to rand | examples.cpp:37:9:37:12 | data | +| examples.cpp:34:26:34:33 | call to rand | examples.cpp:37:9:37:12 | data | +| examples.cpp:34:26:34:33 | call to rand | examples.cpp:37:9:37:12 | data | +| examples.cpp:34:26:34:33 | call to rand | examples.cpp:37:9:37:12 | data | +nodes +| examples.cpp:21:26:21:33 | (unsigned int)... | semmle.label | (unsigned int)... | +| examples.cpp:21:26:21:33 | (unsigned int)... | semmle.label | (unsigned int)... | +| examples.cpp:21:26:21:33 | (unsigned int)... | semmle.label | (unsigned int)... | +| examples.cpp:21:26:21:33 | (unsigned int)... | semmle.label | (unsigned int)... | +| examples.cpp:21:26:21:33 | (unsigned int)... | semmle.label | (unsigned int)... | +| examples.cpp:21:26:21:33 | (unsigned int)... | semmle.label | (unsigned int)... | +| examples.cpp:21:26:21:33 | call to rand | semmle.label | call to rand | +| examples.cpp:21:26:21:33 | call to rand | semmle.label | call to rand | +| examples.cpp:21:26:21:33 | call to rand | semmle.label | call to rand | +| examples.cpp:21:26:21:33 | call to rand | semmle.label | call to rand | +| examples.cpp:21:26:21:33 | call to rand | semmle.label | call to rand | +| examples.cpp:21:26:21:33 | call to rand | semmle.label | call to rand | +| examples.cpp:24:31:24:34 | data | semmle.label | data | +| examples.cpp:34:26:34:33 | (unsigned int)... | semmle.label | (unsigned int)... | +| examples.cpp:34:26:34:33 | (unsigned int)... | semmle.label | (unsigned int)... | +| examples.cpp:34:26:34:33 | (unsigned int)... | semmle.label | (unsigned int)... | +| examples.cpp:34:26:34:33 | (unsigned int)... | semmle.label | (unsigned int)... | +| examples.cpp:34:26:34:33 | (unsigned int)... | semmle.label | (unsigned int)... | +| examples.cpp:34:26:34:33 | (unsigned int)... | semmle.label | (unsigned int)... | +| examples.cpp:34:26:34:33 | call to rand | semmle.label | call to rand | +| examples.cpp:34:26:34:33 | call to rand | semmle.label | call to rand | +| examples.cpp:34:26:34:33 | call to rand | semmle.label | call to rand | +| examples.cpp:34:26:34:33 | call to rand | semmle.label | call to rand | +| examples.cpp:34:26:34:33 | call to rand | semmle.label | call to rand | +| examples.cpp:34:26:34:33 | call to rand | semmle.label | call to rand | +| examples.cpp:37:9:37:12 | data | semmle.label | data | +#select +| examples.cpp:24:31:24:34 | data | examples.cpp:21:26:21:33 | (unsigned int)... | examples.cpp:24:31:24:34 | data | $@ flows to here and is used in arithmetic, potentially causing an underflow. | examples.cpp:21:26:21:33 | call to rand | Uncontrolled value | +| examples.cpp:24:31:24:34 | data | examples.cpp:21:26:21:33 | (unsigned int)... | examples.cpp:24:31:24:34 | data | $@ flows to here and is used in arithmetic, potentially causing an underflow. | examples.cpp:21:26:21:33 | call to rand | Uncontrolled value | +| examples.cpp:24:31:24:34 | data | examples.cpp:21:26:21:33 | (unsigned int)... | examples.cpp:24:31:24:34 | data | $@ flows to here and is used in arithmetic, potentially causing an underflow. | examples.cpp:21:26:21:33 | call to rand | Uncontrolled value | +| examples.cpp:24:31:24:34 | data | examples.cpp:21:26:21:33 | (unsigned int)... | examples.cpp:24:31:24:34 | data | $@ flows to here and is used in arithmetic, potentially causing an underflow. | examples.cpp:21:26:21:33 | call to rand | Uncontrolled value | +| examples.cpp:24:31:24:34 | data | examples.cpp:21:26:21:33 | (unsigned int)... | examples.cpp:24:31:24:34 | data | $@ flows to here and is used in arithmetic, potentially causing an underflow. | examples.cpp:21:26:21:33 | call to rand | Uncontrolled value | +| examples.cpp:24:31:24:34 | data | examples.cpp:21:26:21:33 | (unsigned int)... | examples.cpp:24:31:24:34 | data | $@ flows to here and is used in arithmetic, potentially causing an underflow. | examples.cpp:21:26:21:33 | call to rand | Uncontrolled value | +| examples.cpp:24:31:24:34 | data | examples.cpp:21:26:21:33 | call to rand | examples.cpp:24:31:24:34 | data | $@ flows to here and is used in arithmetic, potentially causing an underflow. | examples.cpp:21:26:21:33 | call to rand | Uncontrolled value | +| examples.cpp:24:31:24:34 | data | examples.cpp:21:26:21:33 | call to rand | examples.cpp:24:31:24:34 | data | $@ flows to here and is used in arithmetic, potentially causing an underflow. | examples.cpp:21:26:21:33 | call to rand | Uncontrolled value | +| examples.cpp:24:31:24:34 | data | examples.cpp:21:26:21:33 | call to rand | examples.cpp:24:31:24:34 | data | $@ flows to here and is used in arithmetic, potentially causing an underflow. | examples.cpp:21:26:21:33 | call to rand | Uncontrolled value | +| examples.cpp:24:31:24:34 | data | examples.cpp:21:26:21:33 | call to rand | examples.cpp:24:31:24:34 | data | $@ flows to here and is used in arithmetic, potentially causing an underflow. | examples.cpp:21:26:21:33 | call to rand | Uncontrolled value | +| examples.cpp:24:31:24:34 | data | examples.cpp:21:26:21:33 | call to rand | examples.cpp:24:31:24:34 | data | $@ flows to here and is used in arithmetic, potentially causing an underflow. | examples.cpp:21:26:21:33 | call to rand | Uncontrolled value | +| examples.cpp:24:31:24:34 | data | examples.cpp:21:26:21:33 | call to rand | examples.cpp:24:31:24:34 | data | $@ flows to here and is used in arithmetic, potentially causing an underflow. | examples.cpp:21:26:21:33 | call to rand | Uncontrolled value | +| examples.cpp:37:9:37:12 | data | examples.cpp:34:26:34:33 | (unsigned int)... | examples.cpp:37:9:37:12 | data | $@ flows to here and is used in arithmetic, potentially causing an underflow. | examples.cpp:34:26:34:33 | call to rand | Uncontrolled value | +| examples.cpp:37:9:37:12 | data | examples.cpp:34:26:34:33 | (unsigned int)... | examples.cpp:37:9:37:12 | data | $@ flows to here and is used in arithmetic, potentially causing an underflow. | examples.cpp:34:26:34:33 | call to rand | Uncontrolled value | +| examples.cpp:37:9:37:12 | data | examples.cpp:34:26:34:33 | (unsigned int)... | examples.cpp:37:9:37:12 | data | $@ flows to here and is used in arithmetic, potentially causing an underflow. | examples.cpp:34:26:34:33 | call to rand | Uncontrolled value | +| examples.cpp:37:9:37:12 | data | examples.cpp:34:26:34:33 | (unsigned int)... | examples.cpp:37:9:37:12 | data | $@ flows to here and is used in arithmetic, potentially causing an underflow. | examples.cpp:34:26:34:33 | call to rand | Uncontrolled value | +| examples.cpp:37:9:37:12 | data | examples.cpp:34:26:34:33 | (unsigned int)... | examples.cpp:37:9:37:12 | data | $@ flows to here and is used in arithmetic, potentially causing an underflow. | examples.cpp:34:26:34:33 | call to rand | Uncontrolled value | +| examples.cpp:37:9:37:12 | data | examples.cpp:34:26:34:33 | (unsigned int)... | examples.cpp:37:9:37:12 | data | $@ flows to here and is used in arithmetic, potentially causing an underflow. | examples.cpp:34:26:34:33 | call to rand | Uncontrolled value | +| examples.cpp:37:9:37:12 | data | examples.cpp:34:26:34:33 | call to rand | examples.cpp:37:9:37:12 | data | $@ flows to here and is used in arithmetic, potentially causing an underflow. | examples.cpp:34:26:34:33 | call to rand | Uncontrolled value | +| examples.cpp:37:9:37:12 | data | examples.cpp:34:26:34:33 | call to rand | examples.cpp:37:9:37:12 | data | $@ flows to here and is used in arithmetic, potentially causing an underflow. | examples.cpp:34:26:34:33 | call to rand | Uncontrolled value | +| examples.cpp:37:9:37:12 | data | examples.cpp:34:26:34:33 | call to rand | examples.cpp:37:9:37:12 | data | $@ flows to here and is used in arithmetic, potentially causing an underflow. | examples.cpp:34:26:34:33 | call to rand | Uncontrolled value | +| examples.cpp:37:9:37:12 | data | examples.cpp:34:26:34:33 | call to rand | examples.cpp:37:9:37:12 | data | $@ flows to here and is used in arithmetic, potentially causing an underflow. | examples.cpp:34:26:34:33 | call to rand | Uncontrolled value | +| examples.cpp:37:9:37:12 | data | examples.cpp:34:26:34:33 | call to rand | examples.cpp:37:9:37:12 | data | $@ flows to here and is used in arithmetic, potentially causing an underflow. | examples.cpp:34:26:34:33 | call to rand | Uncontrolled value | +| examples.cpp:37:9:37:12 | data | examples.cpp:34:26:34:33 | call to rand | examples.cpp:37:9:37:12 | data | $@ flows to here and is used in arithmetic, potentially causing an underflow. | examples.cpp:34:26:34:33 | call to rand | Uncontrolled value | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-190/SAMATE/ArithmeticUncontrolled.qlref b/cpp/ql/test/query-tests/Security/CWE/CWE-190/SAMATE/ArithmeticUncontrolled.qlref new file mode 100644 index 00000000000..1fcafc3ca1c --- /dev/null +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-190/SAMATE/ArithmeticUncontrolled.qlref @@ -0,0 +1 @@ +Security/CWE/CWE-190/ArithmeticUncontrolled.ql diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-190/SAMATE/ArithmeticWithExtremeValues.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-190/SAMATE/ArithmeticWithExtremeValues.expected new file mode 100644 index 00000000000..e69de29bb2d diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-190/SAMATE/ArithmeticWithExtremeValues.qlref b/cpp/ql/test/query-tests/Security/CWE/CWE-190/SAMATE/ArithmeticWithExtremeValues.qlref new file mode 100644 index 00000000000..ab2c35ce59b --- /dev/null +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-190/SAMATE/ArithmeticWithExtremeValues.qlref @@ -0,0 +1 @@ +Security/CWE/CWE-190/ArithmeticWithExtremeValues.ql diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-190/SAMATE/IntegerOverflowTainted.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-190/SAMATE/IntegerOverflowTainted.expected new file mode 100644 index 00000000000..9a9a0eba1ab --- /dev/null +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-190/SAMATE/IntegerOverflowTainted.expected @@ -0,0 +1 @@ +| examples.cpp:65:9:65:14 | -- ... | $@ flows to here and is used in an expression which might overflow negatively. | examples.cpp:62:26:62:30 | & ... | User-provided value | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-190/SAMATE/IntegerOverflowTainted.qlref b/cpp/ql/test/query-tests/Security/CWE/CWE-190/SAMATE/IntegerOverflowTainted.qlref new file mode 100644 index 00000000000..df42008c632 --- /dev/null +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-190/SAMATE/IntegerOverflowTainted.qlref @@ -0,0 +1 @@ +Security/CWE/CWE-190/IntegerOverflowTainted.ql diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-190/SAMATE/examples.cpp b/cpp/ql/test/query-tests/Security/CWE/CWE-190/SAMATE/examples.cpp new file mode 100644 index 00000000000..7a824748861 --- /dev/null +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-190/SAMATE/examples.cpp @@ -0,0 +1,70 @@ +// External test cases for rule CWE-190. + +///// Library functions ////// + +typedef struct {} FILE; +extern FILE *stdin; +int fscanf(FILE *stream, const char *format, ...); +int rand(void); + +#define URAND31() (((unsigned)rand()<<30) ^ ((unsigned)rand()<<15) ^ rand()) +#define RAND32() ((int)(rand() & 1 ? URAND31() : -URAND31() - 1)) + +void printUnsignedLine(unsigned unsignedNumber); + +//// Test code ///// + +void CWE191_Integer_Underflow__unsigned_int_rand_sub_01_bad() +{ + unsigned int data; + data = 0; + /* POTENTIAL FLAW: Use a random value */ + data = (unsigned int)RAND32(); + { + /* POTENTIAL FLAW: Subtracting 1 from data could cause an underflow */ + unsigned int result = data - 1; + printUnsignedLine(result); + } +} + +void CWE191_Integer_Underflow__unsigned_int_rand_postdec_01_bad() +{ + unsigned int data; + data = 0; + /* POTENTIAL FLAW: Use a random value */ + data = (unsigned int)RAND32(); + { + /* POTENTIAL FLAW: Decrementing data could cause an underflow */ + data--; + unsigned int result = data; + printUnsignedLine(result); + } +} + +void CWE191_Integer_Underflow__unsigned_int_min_postdec_01_bad() +{ + unsigned int data; + data = 0; + /* POTENTIAL FLAW: Use the minimum size of the data type */ + data = 0; + { + /* POTENTIAL FLAW: Decrementing data could cause an underflow [NOT DETECTED] */ + data--; + unsigned int result = data; + printUnsignedLine(result); + } +} + +void CWE191_Integer_Underflow__unsigned_int_fscanf_predec_01_bad() +{ + unsigned int data; + data = 0; + /* POTENTIAL FLAW: Use a value input from the console */ + fscanf (stdin, "%u", &data); + { + /* POTENTIAL FLAW: Decrementing data could cause an underflow */ + --data; + unsigned int result = data; + printUnsignedLine(result); + } +} diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-197/SAMATE/IntegerOverflowTainted.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-197/SAMATE/IntegerOverflowTainted.expected new file mode 100644 index 00000000000..f71dbfde719 --- /dev/null +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-197/SAMATE/IntegerOverflowTainted.expected @@ -0,0 +1 @@ +| tests.cpp:39:31:39:34 | data | $@ flows to here and is used in an expression which might overflow. | tests.cpp:58:27:58:31 | & ... | User-provided value | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-197/SAMATE/IntegerOverflowTainted.qlref b/cpp/ql/test/query-tests/Security/CWE/CWE-197/SAMATE/IntegerOverflowTainted.qlref new file mode 100644 index 00000000000..72ed7d53685 --- /dev/null +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-197/SAMATE/IntegerOverflowTainted.qlref @@ -0,0 +1 @@ +Security/CWE/CWE-190/IntegerOverflowTainted.ql \ No newline at end of file diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-197/SAMATE/tests.cpp b/cpp/ql/test/query-tests/Security/CWE/CWE-197/SAMATE/tests.cpp new file mode 100644 index 00000000000..f183df39eab --- /dev/null +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-197/SAMATE/tests.cpp @@ -0,0 +1,74 @@ +//semmle-extractor-options: --edg --target --edg win64 + +// A selection of tests from the samate framework for rule CWE-197. + +// library types, functions etc +typedef struct {} FILE; +int fscanf(FILE *stream, const char *format, ...); +#define CHAR_MAX (127) +FILE *stdin; + +void printHexCharLine(char charHex); + +// ---------- + +class CWE197_Numeric_Truncation_Error__short_fscanf_82_base +{ +public: + /* pure virtual function */ + virtual void action(short data) = 0; +}; + +class CWE197_Numeric_Truncation_Error__short_fscanf_82_bad : public CWE197_Numeric_Truncation_Error__short_fscanf_82_base +{ +public: + void action(short data); +}; + +class CWE197_Numeric_Truncation_Error__short_fscanf_82_goodG2B : public CWE197_Numeric_Truncation_Error__short_fscanf_82_base +{ +public: + void action(short data); +}; + +void CWE197_Numeric_Truncation_Error__short_fscanf_82_bad::action(short data) +{ + { + /* POTENTIAL FLAW: Convert data to a char, possibly causing a truncation error */ + char charData = (char)data; + printHexCharLine(charData); + } +} + +void CWE197_Numeric_Truncation_Error__short_fscanf_82_goodG2B::action(short data) +{ + { + char charData = (char)data; + printHexCharLine(charData); + } +} + +void bad() +{ + short data; + /* Initialize data */ + data = -1; + /* FLAW: Use a number input from the console using fscanf() */ + fscanf (stdin, "%hd", &data); + CWE197_Numeric_Truncation_Error__short_fscanf_82_base* baseObject = new CWE197_Numeric_Truncation_Error__short_fscanf_82_bad; + baseObject->action(data); + delete baseObject; +} + +/* goodG2B uses the GoodSource with the BadSink */ +static void goodG2B() +{ + short data; + /* Initialize data */ + data = -1; + /* FIX: Use a positive integer less than CHAR_MAX*/ + data = CHAR_MAX-5; + CWE197_Numeric_Truncation_Error__short_fscanf_82_base* baseObject = new CWE197_Numeric_Truncation_Error__short_fscanf_82_goodG2B; + baseObject->action(data); + delete baseObject; +} diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-497/SAMATE/ExposedSystemData.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-497/SAMATE/ExposedSystemData.expected new file mode 100644 index 00000000000..77a8ad6c533 --- /dev/null +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-497/SAMATE/ExposedSystemData.expected @@ -0,0 +1 @@ +| tests.c:76:9:76:15 | call to fprintf | This operation exposes system data from $@. | tests.c:60:13:60:22 | call to LogonUserA | call to LogonUserA | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-497/SAMATE/ExposedSystemData.qlref b/cpp/ql/test/query-tests/Security/CWE/CWE-497/SAMATE/ExposedSystemData.qlref new file mode 100644 index 00000000000..0c88835bf1f --- /dev/null +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-497/SAMATE/ExposedSystemData.qlref @@ -0,0 +1 @@ +Security/CWE/CWE-497/ExposedSystemData.ql \ No newline at end of file diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-497/SAMATE/OutputWrite.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-497/SAMATE/OutputWrite.expected new file mode 100644 index 00000000000..3f9eeda87db --- /dev/null +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-497/SAMATE/OutputWrite.expected @@ -0,0 +1,7 @@ +| tests.c:35:9:35:14 | call to printf | tests.c:35:16:35:21 | %s\n | +| tests.c:35:9:35:14 | call to printf | tests.c:35:24:35:27 | line | +| tests.c:49:13:49:21 | call to printLine | tests.c:49:23:49:38 | fgets() failed | +| tests.c:68:13:68:21 | call to printLine | tests.c:68:23:68:52 | User logged in successfully. | +| tests.c:73:13:73:21 | call to printLine | tests.c:73:23:73:40 | Unable to login. | +| tests.c:76:9:76:15 | call to fprintf | tests.c:76:25:76:67 | User attempted access with password: %s\n | +| tests.c:76:9:76:15 | call to fprintf | tests.c:76:70:76:77 | password | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-497/SAMATE/OutputWrite.ql b/cpp/ql/test/query-tests/Security/CWE/CWE-497/SAMATE/OutputWrite.ql new file mode 100644 index 00000000000..d9e67a944e9 --- /dev/null +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-497/SAMATE/OutputWrite.ql @@ -0,0 +1,4 @@ +import semmle.code.cpp.security.OutputWrite + +from OutputWrite ow +select ow, ow.getASource() diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-497/SAMATE/tests.c b/cpp/ql/test/query-tests/Security/CWE/CWE-497/SAMATE/tests.c new file mode 100644 index 00000000000..03248393f88 --- /dev/null +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-497/SAMATE/tests.c @@ -0,0 +1,72 @@ +// Semmle test cases for rule CWE-497 + +// library functions etc +typedef struct {} FILE; + +// define stdout, stderr in a similar style to MinGW +FILE std_files[2]; +#define stdin (&std_files[0]) +#define stderr (&std_files[1]) + +typedef unsigned long size_t; +size_t strlen(const char *s); +int printf(const char *format, ...); +int fprintf(FILE *stream, const char *format, ...); +char *fgets(char *s, int n, FILE *stream); + +typedef struct {} *HANDLE; +int LogonUserA(const char *lpszUserName, const char *lpszDomain, const char *lpszPassword, int dwLogonType, int dwLogonProvider, HANDLE *phToken); +void CloseHandle(HANDLE h); + +#define NULL (0) +#define LOGON32_LOGON_NETWORK (1) +#define LOGON32_PROVIDER_DEFAULT (2) + +void printLine(const char * line) +{ + if(line != NULL) + { + printf("%s\n", line); + } +} + +void CWE535_Info_Exposure_Shell_Error__w32_char_01_bad() +{ + { + char password[100] = ""; + size_t passwordLen = 0; + HANDLE pHandle; + char * username = "User"; + char * domain = "Domain"; + if (fgets(password, 100, stdin) == NULL) + { + printLine("fgets() failed"); + /* Restore NUL terminator if fgets fails */ + password[0] = '\0'; + } + /* Remove the carriage return from the string that is inserted by fgets() */ + passwordLen = strlen(password); + if (passwordLen > 0) + { + password[passwordLen-1] = '\0'; + } + /* Use the password in LogonUser() to establish that it is "sensitive" */ + if (LogonUserA( + username, + domain, + password, + LOGON32_LOGON_NETWORK, + LOGON32_PROVIDER_DEFAULT, + &pHandle) != 0) + { + printLine("User logged in successfully."); + CloseHandle(pHandle); + } + else + { + printLine("Unable to login."); + } + /* FLAW: Write sensitive data to stderr */ + fprintf(stderr, "User attempted access with password: %s\n", password); + } +} \ No newline at end of file diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-676/SAMATE/DangerousUseOfCin/DangerousUseOfCin.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-676/SAMATE/DangerousUseOfCin/DangerousUseOfCin.expected new file mode 100644 index 00000000000..311f82ad99d --- /dev/null +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-676/SAMATE/DangerousUseOfCin/DangerousUseOfCin.expected @@ -0,0 +1 @@ +| test.cpp:129:17:129:17 | call to operator>> | Use of 'cin' without specifying the length of the input may be dangerous. | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-676/SAMATE/DangerousUseOfCin/DangerousUseOfCin.qlref b/cpp/ql/test/query-tests/Security/CWE/CWE-676/SAMATE/DangerousUseOfCin/DangerousUseOfCin.qlref new file mode 100644 index 00000000000..5a35bf81fd9 --- /dev/null +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-676/SAMATE/DangerousUseOfCin/DangerousUseOfCin.qlref @@ -0,0 +1 @@ +Security/CWE/CWE-676/DangerousUseOfCin.ql diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-676/SAMATE/DangerousUseOfCin/test.cpp b/cpp/ql/test/query-tests/Security/CWE/CWE-676/SAMATE/DangerousUseOfCin/test.cpp new file mode 100644 index 00000000000..708ba5f05f9 --- /dev/null +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-676/SAMATE/DangerousUseOfCin/test.cpp @@ -0,0 +1,69 @@ +// Samate test case for rule DangerousUseOfCin.ql / CWE-676 + +// --- library types, functions etc --- + +namespace std +{ + // --- std::string --- + + // std::char_traits + template class char_traits; + + // --- std::istream --- + + // std::basic_istream + template > + class basic_istream /*: virtual public basic_ios - not needed for this test */ { + }; + + // operator>> std::basic_istream -> char* + template basic_istream& operator>>(basic_istream&, charT*); + + // std::istream + typedef basic_istream istream; + + // --- std::cin --- + + extern istream cin; +} + +void printLine(const char *str); + +// --- test cases --- + +using namespace std; + +#define CHAR_BUFFER_SIZE 10 + +void CWE676_Use_of_Potentially_Dangerous_Function__basic_17_bad() +{ + int j; + for(j = 0; j < 1; j++) + { + { + char charBuffer[CHAR_BUFFER_SIZE]; + /* FLAW: using cin in an inherently dangerous fashion */ + /* INCIDENTAL CWE120 Buffer Overflow since cin extraction is unbounded. */ + cin >> charBuffer; // BAD + charBuffer[CHAR_BUFFER_SIZE-1] = '\0'; + printLine(charBuffer); + } + } +} + +/* good1() changes the conditions on the for statements */ +static void CWE676_Use_of_Potentially_Dangerous_Function__basic_17_good1() +{ + int k; + for(k = 0; k < 1; k++) + { + { + char charBuffer[CHAR_BUFFER_SIZE]; + /* FIX: Use cin after specifying the length of the input */ + cin.width(CHAR_BUFFER_SIZE); + cin >> charBuffer; // GOOD + charBuffer[CHAR_BUFFER_SIZE-1] = '\0'; + printLine(charBuffer); + } + } +} diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-772/SAMATE/FileMayNotBeClosed.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-772/SAMATE/FileMayNotBeClosed.expected new file mode 100644 index 00000000000..e69de29bb2d diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-772/SAMATE/FileMayNotBeClosed.qlref b/cpp/ql/test/query-tests/Security/CWE/CWE-772/SAMATE/FileMayNotBeClosed.qlref new file mode 100644 index 00000000000..fd711c007f0 --- /dev/null +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-772/SAMATE/FileMayNotBeClosed.qlref @@ -0,0 +1 @@ +Critical/FileMayNotBeClosed.ql \ No newline at end of file diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-772/SAMATE/FileNeverClosed.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-772/SAMATE/FileNeverClosed.expected new file mode 100644 index 00000000000..31a7fe984bd --- /dev/null +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-772/SAMATE/FileNeverClosed.expected @@ -0,0 +1,3 @@ +| tests.cpp:248:12:248:16 | call to fopen | The file is never closed | +| tests.cpp:280:12:280:15 | call to open | The file is never closed | +| tests.cpp:306:12:306:21 | call to CreateFile | The file is never closed | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-772/SAMATE/FileNeverClosed.qlref b/cpp/ql/test/query-tests/Security/CWE/CWE-772/SAMATE/FileNeverClosed.qlref new file mode 100644 index 00000000000..825ac26f500 --- /dev/null +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-772/SAMATE/FileNeverClosed.qlref @@ -0,0 +1 @@ +Critical/FileNeverClosed.ql diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-772/SAMATE/MemoryMayNotBeFreed.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-772/SAMATE/MemoryMayNotBeFreed.expected new file mode 100644 index 00000000000..006eeb5aa4c --- /dev/null +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-772/SAMATE/MemoryMayNotBeFreed.expected @@ -0,0 +1,2 @@ +| tests.cpp:226:31:226:36 | call to malloc | The memory allocated here may not be released at $@. | tests.cpp:240:1:240:1 | return ... | this exit point | +| tests.cpp:353:5:353:68 | ... = ... | The memory allocated here may not be released at $@. | tests.cpp:361:1:361:1 | return ... | this exit point | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-772/SAMATE/MemoryMayNotBeFreed.qlref b/cpp/ql/test/query-tests/Security/CWE/CWE-772/SAMATE/MemoryMayNotBeFreed.qlref new file mode 100644 index 00000000000..33da8e296e2 --- /dev/null +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-772/SAMATE/MemoryMayNotBeFreed.qlref @@ -0,0 +1 @@ +Critical/MemoryMayNotBeFreed.ql \ No newline at end of file diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-772/SAMATE/MemoryNeverFreed.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-772/SAMATE/MemoryNeverFreed.expected new file mode 100644 index 00000000000..9c72dced70d --- /dev/null +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-772/SAMATE/MemoryNeverFreed.expected @@ -0,0 +1,2 @@ +| tests.cpp:99:20:99:26 | new | This memory is never freed | +| tests.cpp:164:24:164:29 | call to malloc | This memory is never freed | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-772/SAMATE/MemoryNeverFreed.qlref b/cpp/ql/test/query-tests/Security/CWE/CWE-772/SAMATE/MemoryNeverFreed.qlref new file mode 100644 index 00000000000..2d1336a55eb --- /dev/null +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-772/SAMATE/MemoryNeverFreed.qlref @@ -0,0 +1 @@ +Critical/MemoryNeverFreed.ql \ No newline at end of file diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-772/SAMATE/tests.cpp b/cpp/ql/test/query-tests/Security/CWE/CWE-772/SAMATE/tests.cpp new file mode 100644 index 00000000000..01e63310396 --- /dev/null +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-772/SAMATE/tests.cpp @@ -0,0 +1,333 @@ +// Sample of samate tests for CWE-772. + +// --- library types, functions etc --- + +#define NULL (0) +typedef unsigned long size_t; + +void *malloc(size_t size); +void *realloc(void *ptr, size_t size); +void *alloca(size_t size); +#define ALLOCA alloca +void free(void *ptr); + +typedef struct {} FILE; +FILE *fopen(const char *filename, const char *mode); +int fclose(FILE *stream); + +char *strcpy(char *s1, const char *s2); + +void printLine(const char *str); +void printIntLine(int val); + +// --- open --- + +typedef unsigned int mode_t; +int open(const char *path, int oflags, mode_t mode); +#define OPEN open +int close(int fd); +#define CLOSE close + +#define O_RDWR (1) +#define O_CREAT (2) +#define S_IREAD (3) +#define S_IWRITE (4) + +// --- Windows --- + +typedef unsigned int HANDLE; +#define INVALID_HANDLE_VALUE (-1) +typedef const char *LPCTSTR; +typedef unsigned long DWORD; +typedef struct _SECURITY_ATTRIBUTES {} *LPSECURITY_ATTRIBUTES; +typedef bool BOOL; +HANDLE CreateFile( + LPCTSTR lpFileName, + DWORD dwDesiredAccess, + DWORD dwShareMode, + LPSECURITY_ATTRIBUTES lpSecurityAttributes, + DWORD dwCreationDisposition, + DWORD dwFlagsAndAttributes, + HANDLE hTemplateFile); +BOOL CloseHandle(HANDLE hObject); + +#define GENERIC_READ (1) +#define GENERIC_WRITE (2) +#define OPEN_ALWAYS (3) +#define FILE_ATTRIBUTE_NORMAL (4) + +// --- test cases --- + +namespace CWE401_Memory_Leak__new_int_17 +{ + void bad() + { + int i,j; + int * data; + data = NULL; + for(i = 0; i < 1; i++) + { + /* POTENTIAL FLAW: Allocate memory on the heap */ + data = new int; // BAD + /* Initialize and make use of data */ + *data = 5; + printIntLine(*data); + } + for(j = 0; j < 1; j++) + { + /* POTENTIAL FLAW: No deallocation */ + ; /* empty statement needed for some flow variants */ + } + } + + /* goodB2G() - use badsource and goodsink in the for statements */ + static void goodB2G() + { + int i,k; + int * data; + data = NULL; + for(i = 0; i < 1; i++) + { + /* POTENTIAL FLAW: Allocate memory on the heap */ + data = new int; // GOOD + /* Initialize and make use of data */ + *data = 5; + printIntLine(*data); + } + for(k = 0; k < 1; k++) + { + /* FIX: Deallocate memory */ + delete data; + } + } + + /* goodG2B() - use goodsource and badsink in the for statements */ + static void goodG2B() + { + int h,j; + int * data; + data = NULL; + for(h = 0; h < 1; h++) + { + /* FIX: Use memory allocated on the stack */ + int dataGoodBuffer; // GOOD + data = &dataGoodBuffer; + /* Initialize and make use of data */ + *data = 5; + printIntLine(*data); + } + for(j = 0; j < 1; j++) + { + /* POTENTIAL FLAW: No deallocation */ + ; /* empty statement needed for some flow variants */ + } + } +} /* close namespace */ + +void CWE401_Memory_Leak__char_malloc_32_bad() +{ + char * data; + char * *dataPtr1 = &data; + char * *dataPtr2 = &data; + data = NULL; + { + char * data = *dataPtr1; + /* POTENTIAL FLAW: Allocate memory on the heap */ + data = (char *)malloc(100*sizeof(char)); // BAD + /* Initialize and make use of data */ + strcpy(data, "A String"); + printLine(data); + *dataPtr1 = data; + } + { + char * data = *dataPtr2; + /* POTENTIAL FLAW: No deallocation */ + ; /* empty statement needed for some flow variants */ + } +} + +/* goodG2B() uses the GoodSource with the BadSink */ +static void CWE401_Memory_Leak__char_malloc_32_goodG2B() +{ + char * data; + char * *dataPtr1 = &data; + char * *dataPtr2 = &data; + data = NULL; + { + char * data = *dataPtr1; + /* FIX: Use memory allocated on the stack with ALLOCA */ + data = (char *)ALLOCA(100*sizeof(char)); // GOOD + /* Initialize and make use of data */ + strcpy(data, "A String"); + printLine(data); + *dataPtr1 = data; + } + { + char * data = *dataPtr2; + /* POTENTIAL FLAW: No deallocation */ + ; /* empty statement needed for some flow variants */ + } +} + +/* goodB2G() uses the BadSource with the GoodSink */ +static void CWE401_Memory_Leak__char_malloc_32_goodB2G() +{ + char * data; + char * *dataPtr1 = &data; + char * *dataPtr2 = &data; + data = NULL; + { + char * data = *dataPtr1; + /* POTENTIAL FLAW: Allocate memory on the heap */ + data = (char *)malloc(100*sizeof(char)); // GOOD + /* Initialize and make use of data */ + strcpy(data, "A String"); + printLine(data); + *dataPtr1 = data; + } + { + char * data = *dataPtr2; + /* FIX: Deallocate memory */ + free(data); + } +} + +void CWE401_Memory_Leak__malloc_realloc_char_01_bad() +{ + { + char * data = (char *)malloc(100*sizeof(char)); // BAD + /* Initialize and make use of data */ + strcpy(data, "A String"); + printLine(data); + /* FLAW: If realloc() fails, the initial memory block will not be freed() */ + data = (char *)realloc(data, (130000)*sizeof(char)); + if (data != NULL) + { + /* Reinitialize and make use of data */ + strcpy(data, "New String"); + printLine(data); + free(data); + } + } +} + +void CWE775_Missing_Release_of_File_Descriptor_or_Handle__fopen_no_close_17_bad() +{ + int j; + FILE * data; + data = NULL; + /* POTENTIAL FLAW: Open a file without closing it */ + data = fopen("BadSource_fopen.txt", "w+"); // BAD + for(j = 0; j < 1; j++) + { + /* FLAW: No attempt to close the file */ + ; /* empty statement needed for some flow variants */ + } +} + +/* goodB2G() - use the goodsink in the for statement */ +static void CWE775_Missing_Release_of_File_Descriptor_or_Handle__fopen_no_close_17_goodB2G() +{ + int k; + FILE * data; + data = NULL; + /* POTENTIAL FLAW: Open a file without closing it */ + data = fopen("BadSource_fopen.txt", "w+"); // GOOD + for(k = 0; k < 1; k++) + { + /* FIX: If the file is still opened, close it */ + if (data != NULL) + { + fclose(data); + } + } +} + +void CWE775_Missing_Release_of_File_Descriptor_or_Handle__open_no_close_01_bad() +{ + int data; + /* Initialize data */ + data = -1; + /* POTENTIAL FLAW: Open a file without closing it */ + data = OPEN("BadSource_open.txt", O_RDWR|O_CREAT, S_IREAD|S_IWRITE); // BAD + /* FLAW: No attempt to close the file */ + ; /* empty statement needed for some flow variants */ +} + +/* goodB2G() uses the BadSource with the GoodSink */ +static void CWE775_Missing_Release_of_File_Descriptor_or_Handle__open_no_close_01_goodB2G() +{ + int data; + /* Initialize data */ + data = -1; + /* POTENTIAL FLAW: Open a file without closing it */ + data = OPEN("BadSource_open.txt", O_RDWR|O_CREAT, S_IREAD|S_IWRITE); // GOOD + /* FIX: If the file is still opened, close it */ + if (data != -1) + { + CLOSE(data); + } +} + +void CWE775_Missing_Release_of_File_Descriptor_or_Handle__w32CreateFile_no_close_01_bad() +{ + HANDLE data; + /* Initialize data */ + data = INVALID_HANDLE_VALUE; + /* POTENTIAL FLAW: Open a file without closing it */ + data = CreateFile("BadSource_w32CreateFile.txt", // BAD + (GENERIC_WRITE|GENERIC_READ), + 0, + NULL, + OPEN_ALWAYS, + FILE_ATTRIBUTE_NORMAL, + NULL); + /* FLAW: No attempt to close the file */ + ; /* empty statement needed for some flow variants */ +} + +/* goodB2G() uses the BadSource with the GoodSink */ +static void CWE775_Missing_Release_of_File_Descriptor_or_Handle__w32CreateFile_no_close_01_goodB2G() +{ + HANDLE data; + /* Initialize data */ + data = INVALID_HANDLE_VALUE; + /* POTENTIAL FLAW: Open a file without closing it */ + data = CreateFile("BadSource_w32CreateFile.txt", // GOOD + (GENERIC_WRITE|GENERIC_READ), + 0, + NULL, + OPEN_ALWAYS, + FILE_ATTRIBUTE_NORMAL, + NULL); + /* FIX: If the file is still opened, close it */ + if (data != INVALID_HANDLE_VALUE) + { + CloseHandle(data); + } +} + +void exit(int status); + +typedef struct _twoIntsStruct +{ + int intOne; + int intTwo; +} twoIntsStruct; + +void printStructLine(const twoIntsStruct * structTwoIntsStruct); + +void CWE401_Memory_Leak__twoIntsStruct_realloc_01_bad() +{ + twoIntsStruct * data; + data = NULL; + /* POTENTIAL FLAW: Allocate memory on the heap */ + data = (twoIntsStruct *)realloc(data, 100*sizeof(twoIntsStruct)); + if (data == NULL) {exit(-1);} + /* Initialize and make use of data */ + data[0].intOne = 0; + data[0].intTwo = 0; + printStructLine(&data[0]); + /* POTENTIAL FLAW: No deallocation */ + ; /* empty statement needed for some flow variants */ +} From fdb4a2acdb41ab38f254a3d8e6a933fa9b7f1156 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Wed, 1 Sep 2021 15:39:19 +0100 Subject: [PATCH 152/741] C++: Clean up header comments. --- ..._Path_Traversal__char_console_fopen_11.cpp | 2 +- .../Security/CWE/CWE-078/SAMATE/tests.cpp | 2 +- .../UncontrolledProcessOperation/test.cpp | 2 +- .../Security/CWE/CWE-119/SAMATE/tests.cpp | 2 +- ...Based_Buffer_Overflow__c_CWE129_fgets_01.c | 2 +- .../CWE-134/SAMATE/console_fprintf_01/test.c | 23 ------------------- .../SAMATE/environment_fprintf_01/test.c | 23 ------------------- .../Security/CWE/CWE-190/SAMATE/examples.cpp | 2 +- .../Security/CWE/CWE-197/SAMATE/tests.cpp | 2 +- .../Security/CWE/CWE-497/SAMATE/tests.c | 4 ++-- .../CWE-676/SAMATE/DangerousUseOfCin/test.cpp | 2 +- .../Security/CWE/CWE-772/SAMATE/tests.cpp | 2 +- 12 files changed, 11 insertions(+), 57 deletions(-) diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-022/SAMATE/CWE23_Relative_Path_Traversal__char_console_fopen_11.cpp b/cpp/ql/test/query-tests/Security/CWE/CWE-022/SAMATE/CWE23_Relative_Path_Traversal__char_console_fopen_11.cpp index 216258fd707..de67a38fd3e 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-022/SAMATE/CWE23_Relative_Path_Traversal__char_console_fopen_11.cpp +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-022/SAMATE/CWE23_Relative_Path_Traversal__char_console_fopen_11.cpp @@ -1,6 +1,6 @@ /** * This test case is closely based on CWE23_Relative_Path_Traversal__char_console_fopen_11.cpp - * from the SAMATE test suite. + * from the SAMATE Juliet test suite. */ #define NULL (0) diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-078/SAMATE/tests.cpp b/cpp/ql/test/query-tests/Security/CWE/CWE-078/SAMATE/tests.cpp index 4b9c1343f6c..3a78acdb3a0 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-078/SAMATE/tests.cpp +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-078/SAMATE/tests.cpp @@ -1,6 +1,6 @@ //semmle-extractor-options: --edg --target --edg win64 -// A selection of tests from the samate framework for rule CWE-78. +// A selection of tests from the SAMATE Juliet framework for rule CWE-78. // library types, functions etc #define NULL (0) diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-114/SAMATE/UncontrolledProcessOperation/test.cpp b/cpp/ql/test/query-tests/Security/CWE/CWE-114/SAMATE/UncontrolledProcessOperation/test.cpp index cf1f98e1d53..299e0372d4a 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-114/SAMATE/UncontrolledProcessOperation/test.cpp +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-114/SAMATE/UncontrolledProcessOperation/test.cpp @@ -1,4 +1,4 @@ -// Samate test cases for CWE-114 +// Some SAMATE Juliet test cases for CWE-114. typedef unsigned long size_t; typedef unsigned int BOOL; diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/tests.cpp b/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/tests.cpp index 364ef56b331..11510f5ef3c 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/tests.cpp +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/tests.cpp @@ -1,6 +1,6 @@ //semmle-extractor-options: --edg --target --edg win64 -// A sample of tests from the samate framework for rule CWE-119. +// A sample of tests from the SAMATE Juliet framework for rule CWE-119. // library types, functions etc typedef unsigned long size_t; diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-129/SAMATE/ImproperArrayIndexValidation/CWE122_Heap_Based_Buffer_Overflow__c_CWE129_fgets_01.c b/cpp/ql/test/query-tests/Security/CWE/CWE-129/SAMATE/ImproperArrayIndexValidation/CWE122_Heap_Based_Buffer_Overflow__c_CWE129_fgets_01.c index 911e9987472..2092902b665 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-129/SAMATE/ImproperArrayIndexValidation/CWE122_Heap_Based_Buffer_Overflow__c_CWE129_fgets_01.c +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-129/SAMATE/ImproperArrayIndexValidation/CWE122_Heap_Based_Buffer_Overflow__c_CWE129_fgets_01.c @@ -1,4 +1,4 @@ -// Snippet from an external (samate) test case for rule CWE-122 / CWE-129 +// Snippet from a SAMATE Juliet test case for rule CWE-122 / CWE-129 // CWE122_Heap_Based_Buffer_Overflow__c_CWE129_fgets_01.c typedef unsigned long size_t; diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/console_fprintf_01/test.c b/cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/console_fprintf_01/test.c index af6affbd1ac..d3d06c47087 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/console_fprintf_01/test.c +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/console_fprintf_01/test.c @@ -3,29 +3,6 @@ // Associated with CWE-134: Uncontrolled format string. http://cwe.mitre.org/data/definitions/134.html // Examples amended to have all function declarations inlined. -/* TEMPLATE GENERATED TESTCASE FILE -Filename: CWE134_Uncontrolled_Format_String__char_console_fprintf_01.c -Label Definition File: CWE134_Uncontrolled_Format_String.label.xml -Template File: sources-sinks-01.tmpl.c -*/ -/* - * @description - * CWE: 134 Uncontrolled Format String - * BadSource: console Read input from the console - * GoodSource: Copy a fixed string into data - * Sinks: fprintf - * GoodSink: fprintf with "%s" as the second argument and data as the third - * BadSink : fprintf with data as the second argument - * Flow Variant: 01 Baseline - * - * */ - -// Replaced with inlined functions -//#include "std_testcase.h" -// -//#ifndef _WIN32 -//# include -//#endif #define NULL 0 typedef unsigned long size_t; typedef struct {} FILE; diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/environment_fprintf_01/test.c b/cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/environment_fprintf_01/test.c index 753183ca31a..2d92469b0e5 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/environment_fprintf_01/test.c +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/environment_fprintf_01/test.c @@ -3,29 +3,6 @@ // Associated with CWE-134: Uncontrolled format string. http://cwe.mitre.org/data/definitions/134.html // Examples amended to have all function declarations inlined. -/* TEMPLATE GENERATED TESTCASE FILE -Filename: CWE134_Uncontrolled_Format_String__char_environment_fprintf_01.c -Label Definition File: CWE134_Uncontrolled_Format_String.label.xml -Template File: sources-sinks-01.tmpl.c -*/ -/* - * @description - * CWE: 134 Uncontrolled Format String - * BadSource: environment Read input from an environment variable - * GoodSource: Copy a fixed string into data - * Sinks: fprintf - * GoodSink: fprintf with "%s" as the second argument and data as the third - * BadSink : fprintf with data as the second argument - * Flow Variant: 01 Baseline - * - * */ - -// Replaced with inlined functions -//#include "std_testcase.h" -// -//#ifndef _WIN32 -//# include -//#endif #define NULL 0 typedef struct {} FILE; typedef unsigned long size_t; diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-190/SAMATE/examples.cpp b/cpp/ql/test/query-tests/Security/CWE/CWE-190/SAMATE/examples.cpp index 7a824748861..b2cdbbe7133 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-190/SAMATE/examples.cpp +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-190/SAMATE/examples.cpp @@ -1,4 +1,4 @@ -// External test cases for rule CWE-190. +// Some SAMATE Juliet test cases for rule CWE-190. ///// Library functions ////// diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-197/SAMATE/tests.cpp b/cpp/ql/test/query-tests/Security/CWE/CWE-197/SAMATE/tests.cpp index f183df39eab..79f9a79c97f 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-197/SAMATE/tests.cpp +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-197/SAMATE/tests.cpp @@ -1,6 +1,6 @@ //semmle-extractor-options: --edg --target --edg win64 -// A selection of tests from the samate framework for rule CWE-197. +// A selection of tests from the SAMATE Juliet framework for rule CWE-197. // library types, functions etc typedef struct {} FILE; diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-497/SAMATE/tests.c b/cpp/ql/test/query-tests/Security/CWE/CWE-497/SAMATE/tests.c index 03248393f88..4b1df2a96e1 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-497/SAMATE/tests.c +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-497/SAMATE/tests.c @@ -1,4 +1,4 @@ -// Semmle test cases for rule CWE-497 +// SAMATE Juliet test cases for rule CWE-497. // library functions etc typedef struct {} FILE; @@ -69,4 +69,4 @@ void CWE535_Info_Exposure_Shell_Error__w32_char_01_bad() /* FLAW: Write sensitive data to stderr */ fprintf(stderr, "User attempted access with password: %s\n", password); } -} \ No newline at end of file +} diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-676/SAMATE/DangerousUseOfCin/test.cpp b/cpp/ql/test/query-tests/Security/CWE/CWE-676/SAMATE/DangerousUseOfCin/test.cpp index 708ba5f05f9..7d01bd5929d 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-676/SAMATE/DangerousUseOfCin/test.cpp +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-676/SAMATE/DangerousUseOfCin/test.cpp @@ -1,4 +1,4 @@ -// Samate test case for rule DangerousUseOfCin.ql / CWE-676 +// SAMATE Juliet test case for rule DangerousUseOfCin.ql / CWE-676. // --- library types, functions etc --- diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-772/SAMATE/tests.cpp b/cpp/ql/test/query-tests/Security/CWE/CWE-772/SAMATE/tests.cpp index 01e63310396..e7b889deb08 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-772/SAMATE/tests.cpp +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-772/SAMATE/tests.cpp @@ -1,4 +1,4 @@ -// Sample of samate tests for CWE-772. +// Sample of SAMATE Juliet tests for CWE-772. // --- library types, functions etc --- From d1ab2d2e8cdca4081cd3f1f45f3c851e17838e8e Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Wed, 1 Sep 2021 19:11:31 +0100 Subject: [PATCH 153/741] C++: Remove some irrelevant macro logic and main functions. --- ..._Path_Traversal__char_console_fopen_11.cpp | 33 -------------- .../CWE-134/SAMATE/console_fprintf_01/test.c | 41 ------------------ .../SAMATE/environment_fprintf_01/test.c | 43 ------------------- 3 files changed, 117 deletions(-) diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-022/SAMATE/CWE23_Relative_Path_Traversal__char_console_fopen_11.cpp b/cpp/ql/test/query-tests/Security/CWE/CWE-022/SAMATE/CWE23_Relative_Path_Traversal__char_console_fopen_11.cpp index de67a38fd3e..db4d0e7b8a2 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-022/SAMATE/CWE23_Relative_Path_Traversal__char_console_fopen_11.cpp +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-022/SAMATE/CWE23_Relative_Path_Traversal__char_console_fopen_11.cpp @@ -7,7 +7,6 @@ typedef size_t time_t; time_t time(time_t *timer); -void srand(unsigned int seed); typedef struct {} FILE; extern FILE *stdin; @@ -130,35 +129,3 @@ static void goodG2B2() } } } - -void good() -{ - goodG2B1(); - goodG2B2(); -} - -} /* close namespace */ - -/* Below is the main(). It is only used when building this testcase on - its own for testing or for building a binary to use in testing binary - analysis tools. It is not used when compiling all the testcases as one - application, which is how source code analysis tools are tested. */ - -using namespace CWE23_Relative_Path_Traversal__char_console_fopen_11; /* so that we can use good and bad easily */ - -int main(int argc, char * argv[]) -{ - /* seed randomness */ - srand( (unsigned)time(NULL) ); -#ifndef OMITGOOD - printLine("Calling good()..."); - good(); - printLine("Finished good()"); -#endif /* OMITGOOD */ -#ifndef OMITBAD - printLine("Calling bad()..."); - bad(); - printLine("Finished bad()"); -#endif /* OMITBAD */ - return 0; -} diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/console_fprintf_01/test.c b/cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/console_fprintf_01/test.c index d3d06c47087..1af281b9f42 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/console_fprintf_01/test.c +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/console_fprintf_01/test.c @@ -12,12 +12,9 @@ size_t strlen(const char *s); char *fgets(char *s, int n, FILE *stream); int fprintf(FILE *stream, const char *format, ...); char *strcpy(char *s1, const char *s2); -void srand(unsigned int seed); void printLine(char *); -#ifndef OMITBAD - void CWE134_Uncontrolled_Format_String__char_console_fprintf_01_bad() { char * data; @@ -52,10 +49,6 @@ void CWE134_Uncontrolled_Format_String__char_console_fprintf_01_bad() fprintf(stdout, data); } -#endif /* OMITBAD */ - -#ifndef OMITGOOD - /* goodG2B uses the GoodSource with the BadSink */ static void goodG2B() { @@ -102,37 +95,3 @@ static void goodB2G() /* FIX: Specify the format disallowing a format string vulnerability */ fprintf(stdout, "%s\n", data); } - -void CWE134_Uncontrolled_Format_String__char_console_fprintf_01_good() -{ - goodG2B(); - goodB2G(); -} - -#endif /* OMITGOOD */ - -/* Below is the main(). It is only used when building this testcase on - its own for testing or for building a binary to use in testing binary - analysis tools. It is not used when compiling all the testcases as one - application, which is how source code analysis tools are tested. */ - -#ifdef INCLUDEMAIN - -int main(int argc, char * argv[]) -{ - /* seed randomness */ - srand( (unsigned)time(NULL) ); -#ifndef OMITGOOD - printLine("Calling good()..."); - CWE134_Uncontrolled_Format_String__char_console_fprintf_01_good(); - printLine("Finished good()"); -#endif /* OMITGOOD */ -#ifndef OMITBAD - printLine("Calling bad()..."); - CWE134_Uncontrolled_Format_String__char_console_fprintf_01_bad(); - printLine("Finished bad()"); -#endif /* OMITBAD */ - return 0; -} - -#endif diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/environment_fprintf_01/test.c b/cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/environment_fprintf_01/test.c index 2d92469b0e5..f759a9d8e61 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/environment_fprintf_01/test.c +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/environment_fprintf_01/test.c @@ -7,20 +7,15 @@ typedef struct {} FILE; typedef unsigned long size_t; extern FILE * stdout; -void srand(unsigned int seed); size_t strlen(const char *s); char *getenv(const char *name); char *strcpy(char *s1, const char *s2); char *strncat(char *s1, const char *s2, size_t n); int fprintf(FILE *stream, const char *format, ...); -void printLine(char *); - #define ENV_VARIABLE "ADD" #define GETENV getenv -#ifndef OMITBAD - void CWE134_Uncontrolled_Format_String__char_environment_fprintf_01_bad() { char * data; @@ -41,10 +36,6 @@ void CWE134_Uncontrolled_Format_String__char_environment_fprintf_01_bad() fprintf(stdout, data); } -#endif /* OMITBAD */ - -#ifndef OMITGOOD - /* goodG2B uses the GoodSource with the BadSink */ static void goodG2B() { @@ -77,37 +68,3 @@ static void goodB2G() /* FIX: Specify the format disallowing a format string vulnerability */ fprintf(stdout, "%s\n", data); } - -void CWE134_Uncontrolled_Format_String__char_environment_fprintf_01_good() -{ - goodG2B(); - goodB2G(); -} - -#endif /* OMITGOOD */ - -/* Below is the main(). It is only used when building this testcase on - its own for testing or for building a binary to use in testing binary - analysis tools. It is not used when compiling all the testcases as one - application, which is how source code analysis tools are tested. */ - -#ifdef INCLUDEMAIN - -int main(int argc, char * argv[]) -{ - /* seed randomness */ - srand( (unsigned)time(NULL) ); -#ifndef OMITGOOD - printLine("Calling good()..."); - CWE134_Uncontrolled_Format_String__char_environment_fprintf_01_good(); - printLine("Finished good()"); -#endif /* OMITGOOD */ -#ifndef OMITBAD - printLine("Calling bad()..."); - CWE134_Uncontrolled_Format_String__char_environment_fprintf_01_bad(); - printLine("Finished bad()"); -#endif /* OMITBAD */ - return 0; -} - -#endif From f755659f5deb4ba6b92af545a64ff73188bcf1f4 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Wed, 1 Sep 2021 19:31:53 +0100 Subject: [PATCH 154/741] C++: More directory structure consistency / cleanup. --- ...ve_Path_Traversal__char_console_fopen_11.cpp | 0 .../{ => TaintedPath}/TaintedPath.expected | 0 .../SAMATE/{ => TaintedPath}/TaintedPath.qlref | 0 .../{ => ExecTainted}/ExecTainted.expected | 0 .../SAMATE/{ => ExecTainted}/ExecTainted.qlref | 0 .../CWE-078/SAMATE/{ => ExecTainted}/tests.cpp | 0 ...pected => UncontrolledFormatString.expected} | 0 ...est.qlref => UncontrolledFormatString.qlref} | 0 ... char_connect_socket_w32_vsnprintf_01_bad.c} | 0 .../test.c => char_console_fprintf_01_bad.c} | 0 ...test.c => char_environment_fprintf_01_bad.c} | 0 .../SAMATE/console_fprintf_01/test.expected | 17 ----------------- .../SAMATE/console_fprintf_01/test.qlref | 1 - .../SAMATE/environment_fprintf_01/test.expected | 17 ----------------- .../SAMATE/environment_fprintf_01/test.qlref | 1 - .../IntegerOverflowTainted.expected | 0 .../IntegerOverflowTainted.qlref | 0 .../{ => IntegerOverflowTainted}/tests.cpp | 0 18 files changed, 36 deletions(-) rename cpp/ql/test/query-tests/Security/CWE/CWE-022/SAMATE/{ => TaintedPath}/CWE23_Relative_Path_Traversal__char_console_fopen_11.cpp (100%) rename cpp/ql/test/query-tests/Security/CWE/CWE-022/SAMATE/{ => TaintedPath}/TaintedPath.expected (100%) rename cpp/ql/test/query-tests/Security/CWE/CWE-022/SAMATE/{ => TaintedPath}/TaintedPath.qlref (100%) rename cpp/ql/test/query-tests/Security/CWE/CWE-078/SAMATE/{ => ExecTainted}/ExecTainted.expected (100%) rename cpp/ql/test/query-tests/Security/CWE/CWE-078/SAMATE/{ => ExecTainted}/ExecTainted.qlref (100%) rename cpp/ql/test/query-tests/Security/CWE/CWE-078/SAMATE/{ => ExecTainted}/tests.cpp (100%) rename cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/{connect_socket_w32_vsnprintf_01/test.expected => UncontrolledFormatString.expected} (100%) rename cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/{connect_socket_w32_vsnprintf_01/test.qlref => UncontrolledFormatString.qlref} (100%) rename cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/{connect_socket_w32_vsnprintf_01/test.c => char_connect_socket_w32_vsnprintf_01_bad.c} (100%) rename cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/{console_fprintf_01/test.c => char_console_fprintf_01_bad.c} (100%) rename cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/{environment_fprintf_01/test.c => char_environment_fprintf_01_bad.c} (100%) delete mode 100644 cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/console_fprintf_01/test.expected delete mode 100644 cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/console_fprintf_01/test.qlref delete mode 100644 cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/environment_fprintf_01/test.expected delete mode 100644 cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/environment_fprintf_01/test.qlref rename cpp/ql/test/query-tests/Security/CWE/CWE-197/SAMATE/{ => IntegerOverflowTainted}/IntegerOverflowTainted.expected (100%) rename cpp/ql/test/query-tests/Security/CWE/CWE-197/SAMATE/{ => IntegerOverflowTainted}/IntegerOverflowTainted.qlref (100%) rename cpp/ql/test/query-tests/Security/CWE/CWE-197/SAMATE/{ => IntegerOverflowTainted}/tests.cpp (100%) diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-022/SAMATE/CWE23_Relative_Path_Traversal__char_console_fopen_11.cpp b/cpp/ql/test/query-tests/Security/CWE/CWE-022/SAMATE/TaintedPath/CWE23_Relative_Path_Traversal__char_console_fopen_11.cpp similarity index 100% rename from cpp/ql/test/query-tests/Security/CWE/CWE-022/SAMATE/CWE23_Relative_Path_Traversal__char_console_fopen_11.cpp rename to cpp/ql/test/query-tests/Security/CWE/CWE-022/SAMATE/TaintedPath/CWE23_Relative_Path_Traversal__char_console_fopen_11.cpp diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-022/SAMATE/TaintedPath.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-022/SAMATE/TaintedPath/TaintedPath.expected similarity index 100% rename from cpp/ql/test/query-tests/Security/CWE/CWE-022/SAMATE/TaintedPath.expected rename to cpp/ql/test/query-tests/Security/CWE/CWE-022/SAMATE/TaintedPath/TaintedPath.expected diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-022/SAMATE/TaintedPath.qlref b/cpp/ql/test/query-tests/Security/CWE/CWE-022/SAMATE/TaintedPath/TaintedPath.qlref similarity index 100% rename from cpp/ql/test/query-tests/Security/CWE/CWE-022/SAMATE/TaintedPath.qlref rename to cpp/ql/test/query-tests/Security/CWE/CWE-022/SAMATE/TaintedPath/TaintedPath.qlref diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-078/SAMATE/ExecTainted.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-078/SAMATE/ExecTainted/ExecTainted.expected similarity index 100% rename from cpp/ql/test/query-tests/Security/CWE/CWE-078/SAMATE/ExecTainted.expected rename to cpp/ql/test/query-tests/Security/CWE/CWE-078/SAMATE/ExecTainted/ExecTainted.expected diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-078/SAMATE/ExecTainted.qlref b/cpp/ql/test/query-tests/Security/CWE/CWE-078/SAMATE/ExecTainted/ExecTainted.qlref similarity index 100% rename from cpp/ql/test/query-tests/Security/CWE/CWE-078/SAMATE/ExecTainted.qlref rename to cpp/ql/test/query-tests/Security/CWE/CWE-078/SAMATE/ExecTainted/ExecTainted.qlref diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-078/SAMATE/tests.cpp b/cpp/ql/test/query-tests/Security/CWE/CWE-078/SAMATE/ExecTainted/tests.cpp similarity index 100% rename from cpp/ql/test/query-tests/Security/CWE/CWE-078/SAMATE/tests.cpp rename to cpp/ql/test/query-tests/Security/CWE/CWE-078/SAMATE/ExecTainted/tests.cpp diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/connect_socket_w32_vsnprintf_01/test.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/UncontrolledFormatString.expected similarity index 100% rename from cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/connect_socket_w32_vsnprintf_01/test.expected rename to cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/UncontrolledFormatString.expected diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/connect_socket_w32_vsnprintf_01/test.qlref b/cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/UncontrolledFormatString.qlref similarity index 100% rename from cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/connect_socket_w32_vsnprintf_01/test.qlref rename to cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/UncontrolledFormatString.qlref diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/connect_socket_w32_vsnprintf_01/test.c b/cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/char_connect_socket_w32_vsnprintf_01_bad.c similarity index 100% rename from cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/connect_socket_w32_vsnprintf_01/test.c rename to cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/char_connect_socket_w32_vsnprintf_01_bad.c diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/console_fprintf_01/test.c b/cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/char_console_fprintf_01_bad.c similarity index 100% rename from cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/console_fprintf_01/test.c rename to cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/char_console_fprintf_01_bad.c diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/environment_fprintf_01/test.c b/cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/char_environment_fprintf_01_bad.c similarity index 100% rename from cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/environment_fprintf_01/test.c rename to cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/char_environment_fprintf_01_bad.c diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/console_fprintf_01/test.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/console_fprintf_01/test.expected deleted file mode 100644 index 5e6af965119..00000000000 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/console_fprintf_01/test.expected +++ /dev/null @@ -1,17 +0,0 @@ -edges -| test.c:56:23:56:35 | ... + ... | test.c:75:21:75:24 | (const char *)... | -| test.c:56:23:56:35 | ... + ... | test.c:75:21:75:24 | data | -| test.c:56:23:56:35 | ... + ... | test.c:75:21:75:24 | data indirection | -| test.c:56:23:56:35 | fgets output argument | test.c:75:21:75:24 | (const char *)... | -| test.c:56:23:56:35 | fgets output argument | test.c:75:21:75:24 | data | -| test.c:56:23:56:35 | fgets output argument | test.c:75:21:75:24 | data indirection | -nodes -| test.c:56:23:56:35 | ... + ... | semmle.label | ... + ... | -| test.c:56:23:56:35 | fgets output argument | semmle.label | fgets output argument | -| test.c:75:21:75:24 | (const char *)... | semmle.label | (const char *)... | -| test.c:75:21:75:24 | (const char *)... | semmle.label | (const char *)... | -| test.c:75:21:75:24 | data | semmle.label | data | -| test.c:75:21:75:24 | data indirection | semmle.label | data indirection | -| test.c:75:21:75:24 | data indirection | semmle.label | data indirection | -#select -| test.c:75:21:75:24 | data | test.c:56:23:56:35 | ... + ... | test.c:75:21:75:24 | data | The value of this argument may come from $@ and is being used as a formatting argument to fprintf(format) | test.c:56:23:56:35 | ... + ... | fgets | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/console_fprintf_01/test.qlref b/cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/console_fprintf_01/test.qlref deleted file mode 100644 index 079e0c8a7c0..00000000000 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/console_fprintf_01/test.qlref +++ /dev/null @@ -1 +0,0 @@ -Security/CWE/CWE-134/UncontrolledFormatString.ql \ No newline at end of file diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/environment_fprintf_01/test.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/environment_fprintf_01/test.expected deleted file mode 100644 index 122dff5b3f0..00000000000 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/environment_fprintf_01/test.expected +++ /dev/null @@ -1,17 +0,0 @@ -edges -| test.c:59:30:59:35 | call to getenv | test.c:68:21:68:24 | (const char *)... | -| test.c:59:30:59:35 | call to getenv | test.c:68:21:68:24 | (const char *)... | -| test.c:59:30:59:35 | call to getenv | test.c:68:21:68:24 | data | -| test.c:59:30:59:35 | call to getenv | test.c:68:21:68:24 | data | -| test.c:59:30:59:35 | call to getenv | test.c:68:21:68:24 | data indirection | -| test.c:59:30:59:35 | call to getenv | test.c:68:21:68:24 | data indirection | -nodes -| test.c:59:30:59:35 | call to getenv | semmle.label | call to getenv | -| test.c:59:30:59:35 | call to getenv | semmle.label | call to getenv | -| test.c:68:21:68:24 | (const char *)... | semmle.label | (const char *)... | -| test.c:68:21:68:24 | (const char *)... | semmle.label | (const char *)... | -| test.c:68:21:68:24 | data | semmle.label | data | -| test.c:68:21:68:24 | data indirection | semmle.label | data indirection | -| test.c:68:21:68:24 | data indirection | semmle.label | data indirection | -#select -| test.c:68:21:68:24 | data | test.c:59:30:59:35 | call to getenv | test.c:68:21:68:24 | data | The value of this argument may come from $@ and is being used as a formatting argument to fprintf(format) | test.c:59:30:59:35 | call to getenv | getenv | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/environment_fprintf_01/test.qlref b/cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/environment_fprintf_01/test.qlref deleted file mode 100644 index 079e0c8a7c0..00000000000 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/environment_fprintf_01/test.qlref +++ /dev/null @@ -1 +0,0 @@ -Security/CWE/CWE-134/UncontrolledFormatString.ql \ No newline at end of file diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-197/SAMATE/IntegerOverflowTainted.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-197/SAMATE/IntegerOverflowTainted/IntegerOverflowTainted.expected similarity index 100% rename from cpp/ql/test/query-tests/Security/CWE/CWE-197/SAMATE/IntegerOverflowTainted.expected rename to cpp/ql/test/query-tests/Security/CWE/CWE-197/SAMATE/IntegerOverflowTainted/IntegerOverflowTainted.expected diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-197/SAMATE/IntegerOverflowTainted.qlref b/cpp/ql/test/query-tests/Security/CWE/CWE-197/SAMATE/IntegerOverflowTainted/IntegerOverflowTainted.qlref similarity index 100% rename from cpp/ql/test/query-tests/Security/CWE/CWE-197/SAMATE/IntegerOverflowTainted.qlref rename to cpp/ql/test/query-tests/Security/CWE/CWE-197/SAMATE/IntegerOverflowTainted/IntegerOverflowTainted.qlref diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-197/SAMATE/tests.cpp b/cpp/ql/test/query-tests/Security/CWE/CWE-197/SAMATE/IntegerOverflowTainted/tests.cpp similarity index 100% rename from cpp/ql/test/query-tests/Security/CWE/CWE-197/SAMATE/tests.cpp rename to cpp/ql/test/query-tests/Security/CWE/CWE-197/SAMATE/IntegerOverflowTainted/tests.cpp From d73604d1c5f6387c7d0531421c15cb8064d71c9d Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Thu, 2 Sep 2021 11:35:30 +0100 Subject: [PATCH 155/741] C++: Fix a few glitches and accept line number changes in expected files. --- ..._Path_Traversal__char_console_fopen_11.cpp | 3 + .../SAMATE/ExecTainted/ExecTainted.expected | 2 +- .../CWE/CWE-078/SAMATE/ExecTainted/tests.cpp | 2 +- .../UncontrolledProcessOperation.expected | 54 +++++++++--------- .../CWE-119/SAMATE/BadlyBoundedWrite.expected | 8 +-- .../CWE-119/SAMATE/OverflowBuffer.expected | 38 ++++++------- .../CWE-119/SAMATE/OverflowStatic.expected | 4 +- .../SAMATE/StrncpyFlippedArgs.expected | 6 +- .../Security/CWE/CWE-119/SAMATE/tests.cpp | 2 - .../ImproperArrayIndexValidation.expected | 2 +- .../SAMATE/UncontrolledFormatString.expected | 56 ++++++++++++++----- .../IntegerOverflowTainted.expected | 2 +- .../CWE-497/SAMATE/ExposedSystemData.expected | 2 +- .../CWE/CWE-497/SAMATE/OutputWrite.expected | 14 ++--- .../DangerousUseOfCin.expected | 2 +- .../CWE-676/SAMATE/DangerousUseOfCin/test.cpp | 18 +++++- .../CWE-772/SAMATE/FileNeverClosed.expected | 6 +- .../SAMATE/MemoryMayNotBeFreed.expected | 4 +- .../CWE-772/SAMATE/MemoryNeverFreed.expected | 4 +- 19 files changed, 135 insertions(+), 94 deletions(-) diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-022/SAMATE/TaintedPath/CWE23_Relative_Path_Traversal__char_console_fopen_11.cpp b/cpp/ql/test/query-tests/Security/CWE/CWE-022/SAMATE/TaintedPath/CWE23_Relative_Path_Traversal__char_console_fopen_11.cpp index db4d0e7b8a2..876584c5117 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-022/SAMATE/TaintedPath/CWE23_Relative_Path_Traversal__char_console_fopen_11.cpp +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-022/SAMATE/TaintedPath/CWE23_Relative_Path_Traversal__char_console_fopen_11.cpp @@ -5,6 +5,7 @@ #define NULL (0) +typedef unsigned long size_t; typedef size_t time_t; time_t time(time_t *timer); @@ -129,3 +130,5 @@ static void goodG2B2() } } } + +} diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-078/SAMATE/ExecTainted/ExecTainted.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-078/SAMATE/ExecTainted/ExecTainted.expected index 7a7858134ab..6f011708465 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-078/SAMATE/ExecTainted/ExecTainted.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-078/SAMATE/ExecTainted/ExecTainted.expected @@ -1 +1 @@ -| tests.cpp:55:16:55:19 | data | This argument to an OS command is derived from $@ and then passed to system(string) | tests.cpp:35:34:35:39 | call to getenv | user input (getenv) | +| tests.cpp:53:16:53:19 | data | This argument to an OS command is derived from $@ and then passed to system(string) | tests.cpp:33:34:33:39 | call to getenv | user input (getenv) | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-078/SAMATE/ExecTainted/tests.cpp b/cpp/ql/test/query-tests/Security/CWE/CWE-078/SAMATE/ExecTainted/tests.cpp index 3a78acdb3a0..80f8221d903 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-078/SAMATE/ExecTainted/tests.cpp +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-078/SAMATE/ExecTainted/tests.cpp @@ -6,7 +6,7 @@ #define NULL (0) typedef unsigned long size_t; size_t strlen(const char *s); -char *strncat(char *s1, const char *s2, size_t n);n); +char *strncat(char *s1, const char *s2, size_t n); char *getenv(const char *name); int system(const char *string); void exit(int status); diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-114/SAMATE/UncontrolledProcessOperation/UncontrolledProcessOperation.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-114/SAMATE/UncontrolledProcessOperation/UncontrolledProcessOperation.expected index bcaff619bd2..1aa02436ddd 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-114/SAMATE/UncontrolledProcessOperation/UncontrolledProcessOperation.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-114/SAMATE/UncontrolledProcessOperation/UncontrolledProcessOperation.expected @@ -1,30 +1,30 @@ edges -| test.cpp:35:73:35:76 | *data | test.cpp:41:32:41:35 | (LPCSTR)... | -| test.cpp:35:73:35:76 | *data | test.cpp:41:32:41:35 | data | -| test.cpp:35:73:35:76 | *data | test.cpp:41:32:41:35 | data indirection | -| test.cpp:35:73:35:76 | data | test.cpp:41:32:41:35 | (LPCSTR)... | -| test.cpp:35:73:35:76 | data | test.cpp:41:32:41:35 | data | -| test.cpp:35:73:35:76 | data | test.cpp:41:32:41:35 | data | -| test.cpp:35:73:35:76 | data | test.cpp:41:32:41:35 | data indirection | -| test.cpp:62:30:62:35 | call to getenv | test.cpp:71:17:71:22 | data | -| test.cpp:62:30:62:35 | call to getenv | test.cpp:71:17:71:22 | data | -| test.cpp:62:30:62:35 | call to getenv | test.cpp:71:24:71:27 | data indirection | -| test.cpp:62:30:62:35 | call to getenv | test.cpp:71:24:71:27 | data indirection | -| test.cpp:71:17:71:22 | data | test.cpp:35:73:35:76 | data | -| test.cpp:71:24:71:27 | data indirection | test.cpp:35:73:35:76 | *data | +| test.cpp:37:73:37:76 | *data | test.cpp:43:32:43:35 | (LPCSTR)... | +| test.cpp:37:73:37:76 | *data | test.cpp:43:32:43:35 | data | +| test.cpp:37:73:37:76 | *data | test.cpp:43:32:43:35 | data indirection | +| test.cpp:37:73:37:76 | data | test.cpp:43:32:43:35 | (LPCSTR)... | +| test.cpp:37:73:37:76 | data | test.cpp:43:32:43:35 | data | +| test.cpp:37:73:37:76 | data | test.cpp:43:32:43:35 | data | +| test.cpp:37:73:37:76 | data | test.cpp:43:32:43:35 | data indirection | +| test.cpp:64:30:64:35 | call to getenv | test.cpp:73:17:73:22 | data | +| test.cpp:64:30:64:35 | call to getenv | test.cpp:73:17:73:22 | data | +| test.cpp:64:30:64:35 | call to getenv | test.cpp:73:24:73:27 | data indirection | +| test.cpp:64:30:64:35 | call to getenv | test.cpp:73:24:73:27 | data indirection | +| test.cpp:73:17:73:22 | data | test.cpp:37:73:37:76 | data | +| test.cpp:73:24:73:27 | data indirection | test.cpp:37:73:37:76 | *data | nodes -| test.cpp:35:73:35:76 | *data | semmle.label | *data | -| test.cpp:35:73:35:76 | data | semmle.label | data | -| test.cpp:41:32:41:35 | (LPCSTR)... | semmle.label | (LPCSTR)... | -| test.cpp:41:32:41:35 | (LPCSTR)... | semmle.label | (LPCSTR)... | -| test.cpp:41:32:41:35 | data | semmle.label | data | -| test.cpp:41:32:41:35 | data | semmle.label | data | -| test.cpp:41:32:41:35 | data | semmle.label | data | -| test.cpp:41:32:41:35 | data indirection | semmle.label | data indirection | -| test.cpp:41:32:41:35 | data indirection | semmle.label | data indirection | -| test.cpp:62:30:62:35 | call to getenv | semmle.label | call to getenv | -| test.cpp:62:30:62:35 | call to getenv | semmle.label | call to getenv | -| test.cpp:71:17:71:22 | data | semmle.label | data | -| test.cpp:71:24:71:27 | data indirection | semmle.label | data indirection | +| test.cpp:37:73:37:76 | *data | semmle.label | *data | +| test.cpp:37:73:37:76 | data | semmle.label | data | +| test.cpp:43:32:43:35 | (LPCSTR)... | semmle.label | (LPCSTR)... | +| test.cpp:43:32:43:35 | (LPCSTR)... | semmle.label | (LPCSTR)... | +| test.cpp:43:32:43:35 | data | semmle.label | data | +| test.cpp:43:32:43:35 | data | semmle.label | data | +| test.cpp:43:32:43:35 | data | semmle.label | data | +| test.cpp:43:32:43:35 | data indirection | semmle.label | data indirection | +| test.cpp:43:32:43:35 | data indirection | semmle.label | data indirection | +| test.cpp:64:30:64:35 | call to getenv | semmle.label | call to getenv | +| test.cpp:64:30:64:35 | call to getenv | semmle.label | call to getenv | +| test.cpp:73:17:73:22 | data | semmle.label | data | +| test.cpp:73:24:73:27 | data indirection | semmle.label | data indirection | #select -| test.cpp:41:32:41:35 | data | test.cpp:62:30:62:35 | call to getenv | test.cpp:41:32:41:35 | data | The value of this argument may come from $@ and is being passed to LoadLibraryA | test.cpp:62:30:62:35 | call to getenv | call to getenv | +| test.cpp:43:32:43:35 | data | test.cpp:64:30:64:35 | call to getenv | test.cpp:43:32:43:35 | data | The value of this argument may come from $@ and is being passed to LoadLibraryA | test.cpp:64:30:64:35 | call to getenv | call to getenv | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/BadlyBoundedWrite.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/BadlyBoundedWrite.expected index bd96138bb9f..bd60a176ca9 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/BadlyBoundedWrite.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/BadlyBoundedWrite.expected @@ -1,4 +1,4 @@ -| tests.cpp:352:13:352:19 | call to strncat | This 'call to strncat' operation is limited to 100 bytes but the destination is only 50 bytes. | -| tests.cpp:454:9:454:15 | call to wcsncpy | This 'call to wcsncpy' operation is limited to 198 bytes but the destination is only 100 bytes. | -| tests.cpp:483:9:483:16 | call to swprintf | This 'call to swprintf' operation is limited to 200 bytes but the destination is only 100 bytes. | -| tests.cpp:632:13:632:20 | call to swprintf | This 'call to swprintf' operation is limited to 200 bytes but the destination is only 100 bytes. | +| tests.cpp:350:13:350:19 | call to strncat | This 'call to strncat' operation is limited to 100 bytes but the destination is only 50 bytes. | +| tests.cpp:452:9:452:15 | call to wcsncpy | This 'call to wcsncpy' operation is limited to 396 bytes but the destination is only 200 bytes. | +| tests.cpp:481:9:481:16 | call to swprintf | This 'call to swprintf' operation is limited to 400 bytes but the destination is only 200 bytes. | +| tests.cpp:630:13:630:20 | call to swprintf | This 'call to swprintf' operation is limited to 400 bytes but the destination is only 200 bytes. | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/OverflowBuffer.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/OverflowBuffer.expected index 3621eb1d127..73f1b74db56 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/OverflowBuffer.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/OverflowBuffer.expected @@ -1,19 +1,19 @@ -| tests.cpp:47:9:47:14 | call to memcpy | This 'memcpy' operation accesses 32 bytes but the $@ is only 16 bytes. | tests.cpp:34:10:34:18 | charFirst | destination buffer | -| tests.cpp:62:9:62:14 | call to memcpy | This 'memcpy' operation accesses 32 bytes but the $@ is only 16 bytes. | tests.cpp:34:10:34:18 | charFirst | destination buffer | -| tests.cpp:173:9:173:14 | call to memcpy | This 'memcpy' operation accesses 100 bytes but the $@ is only 50 bytes. | tests.cpp:166:20:166:25 | call to malloc | destination buffer | -| tests.cpp:174:9:174:19 | access to array | This array indexing operation accesses byte offset 99 but the $@ is only 50 bytes. | tests.cpp:166:20:166:25 | call to malloc | array | -| tests.cpp:194:9:194:14 | call to memcpy | This 'memcpy' operation accesses 100 bytes but the $@ is only 50 bytes. | tests.cpp:183:10:183:22 | dataBadBuffer | destination buffer | -| tests.cpp:194:9:194:14 | call to memcpy | This 'memcpy' operation accesses 100 bytes but the $@ is only 50 bytes. | tests.cpp:187:12:187:24 | dataBadBuffer | destination buffer | -| tests.cpp:195:9:195:19 | access to array | This array indexing operation accesses byte offset 99 but the $@ is only 50 bytes. | tests.cpp:183:10:183:22 | dataBadBuffer | array | -| tests.cpp:195:9:195:19 | access to array | This array indexing operation accesses byte offset 99 but the $@ is only 50 bytes. | tests.cpp:187:12:187:24 | dataBadBuffer | array | -| tests.cpp:214:9:214:14 | call to memcpy | This 'memcpy' operation accesses 100 bytes but the $@ is only 50 bytes. | tests.cpp:203:36:203:41 | call to alloca | destination buffer | -| tests.cpp:214:9:214:14 | call to memcpy | This 'memcpy' operation accesses 100 bytes but the $@ is only 50 bytes. | tests.cpp:207:12:207:24 | dataBadBuffer | destination buffer | -| tests.cpp:215:9:215:19 | access to array | This array indexing operation accesses byte offset 99 but the $@ is only 50 bytes. | tests.cpp:203:36:203:41 | call to alloca | array | -| tests.cpp:215:9:215:19 | access to array | This array indexing operation accesses byte offset 99 but the $@ is only 50 bytes. | tests.cpp:207:12:207:24 | dataBadBuffer | array | -| tests.cpp:239:9:239:19 | access to array | This array indexing operation accesses byte offset 99 but the $@ is only 50 bytes. | tests.cpp:223:36:223:41 | call to alloca | array | -| tests.cpp:239:9:239:19 | access to array | This array indexing operation accesses byte offset 99 but the $@ is only 50 bytes. | tests.cpp:227:12:227:24 | dataBadBuffer | array | -| tests.cpp:263:9:263:19 | access to array | This array indexing operation accesses byte offset 99 but the $@ is only 50 bytes. | tests.cpp:247:10:247:22 | dataBadBuffer | array | -| tests.cpp:263:9:263:19 | access to array | This array indexing operation accesses byte offset 99 but the $@ is only 50 bytes. | tests.cpp:251:12:251:24 | dataBadBuffer | array | -| tests.cpp:386:9:386:14 | call to memcpy | This 'memcpy' operation accesses 40 bytes but the $@ is only 10 bytes. | tests.cpp:382:19:382:24 | call to alloca | destination buffer | -| tests.cpp:436:9:436:19 | access to array | This array indexing operation accesses byte offset 199 but the $@ is only 100 bytes. | tests.cpp:424:12:424:26 | new[] | array | -| tests.cpp:455:9:455:19 | access to array | This array indexing operation accesses byte offset 199 but the $@ is only 100 bytes. | tests.cpp:447:12:447:26 | new[] | array | +| tests.cpp:45:9:45:14 | call to memcpy | This 'memcpy' operation accesses 32 bytes but the $@ is only 16 bytes. | tests.cpp:32:10:32:18 | charFirst | destination buffer | +| tests.cpp:60:9:60:14 | call to memcpy | This 'memcpy' operation accesses 32 bytes but the $@ is only 16 bytes. | tests.cpp:32:10:32:18 | charFirst | destination buffer | +| tests.cpp:171:9:171:14 | call to memcpy | This 'memcpy' operation accesses 100 bytes but the $@ is only 50 bytes. | tests.cpp:164:20:164:25 | call to malloc | destination buffer | +| tests.cpp:172:9:172:19 | access to array | This array indexing operation accesses byte offset 99 but the $@ is only 50 bytes. | tests.cpp:164:20:164:25 | call to malloc | array | +| tests.cpp:192:9:192:14 | call to memcpy | This 'memcpy' operation accesses 100 bytes but the $@ is only 50 bytes. | tests.cpp:181:10:181:22 | dataBadBuffer | destination buffer | +| tests.cpp:192:9:192:14 | call to memcpy | This 'memcpy' operation accesses 100 bytes but the $@ is only 50 bytes. | tests.cpp:185:12:185:24 | dataBadBuffer | destination buffer | +| tests.cpp:193:9:193:19 | access to array | This array indexing operation accesses byte offset 99 but the $@ is only 50 bytes. | tests.cpp:181:10:181:22 | dataBadBuffer | array | +| tests.cpp:193:9:193:19 | access to array | This array indexing operation accesses byte offset 99 but the $@ is only 50 bytes. | tests.cpp:185:12:185:24 | dataBadBuffer | array | +| tests.cpp:212:9:212:14 | call to memcpy | This 'memcpy' operation accesses 100 bytes but the $@ is only 50 bytes. | tests.cpp:201:36:201:41 | call to alloca | destination buffer | +| tests.cpp:212:9:212:14 | call to memcpy | This 'memcpy' operation accesses 100 bytes but the $@ is only 50 bytes. | tests.cpp:205:12:205:24 | dataBadBuffer | destination buffer | +| tests.cpp:213:9:213:19 | access to array | This array indexing operation accesses byte offset 99 but the $@ is only 50 bytes. | tests.cpp:201:36:201:41 | call to alloca | array | +| tests.cpp:213:9:213:19 | access to array | This array indexing operation accesses byte offset 99 but the $@ is only 50 bytes. | tests.cpp:205:12:205:24 | dataBadBuffer | array | +| tests.cpp:237:9:237:19 | access to array | This array indexing operation accesses byte offset 99 but the $@ is only 50 bytes. | tests.cpp:221:36:221:41 | call to alloca | array | +| tests.cpp:237:9:237:19 | access to array | This array indexing operation accesses byte offset 99 but the $@ is only 50 bytes. | tests.cpp:225:12:225:24 | dataBadBuffer | array | +| tests.cpp:261:9:261:19 | access to array | This array indexing operation accesses byte offset 99 but the $@ is only 50 bytes. | tests.cpp:245:10:245:22 | dataBadBuffer | array | +| tests.cpp:261:9:261:19 | access to array | This array indexing operation accesses byte offset 99 but the $@ is only 50 bytes. | tests.cpp:249:12:249:24 | dataBadBuffer | array | +| tests.cpp:384:9:384:14 | call to memcpy | This 'memcpy' operation accesses 40 bytes but the $@ is only 10 bytes. | tests.cpp:380:19:380:24 | call to alloca | destination buffer | +| tests.cpp:434:9:434:19 | access to array | This array indexing operation accesses byte offset 399 but the $@ is only 200 bytes. | tests.cpp:422:12:422:26 | new[] | array | +| tests.cpp:453:9:453:19 | access to array | This array indexing operation accesses byte offset 399 but the $@ is only 200 bytes. | tests.cpp:445:12:445:26 | new[] | array | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/OverflowStatic.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/OverflowStatic.expected index e9cf380d0e6..ab9263b8544 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/OverflowStatic.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/OverflowStatic.expected @@ -1,2 +1,2 @@ -| tests.cpp:47:51:47:72 | sizeof() | Potential buffer-overflow: 'charFirst' has size 16 not 32. | -| tests.cpp:62:52:62:74 | sizeof() | Potential buffer-overflow: 'charFirst' has size 16 not 32. | +| tests.cpp:45:51:45:72 | sizeof() | Potential buffer-overflow: 'charFirst' has size 16 not 32. | +| tests.cpp:60:52:60:74 | sizeof() | Potential buffer-overflow: 'charFirst' has size 16 not 32. | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/StrncpyFlippedArgs.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/StrncpyFlippedArgs.expected index b376553baee..778adb97718 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/StrncpyFlippedArgs.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/StrncpyFlippedArgs.expected @@ -1,3 +1,3 @@ -| tests.cpp:292:13:292:19 | call to wcsncpy | Potentially unsafe call to wcsncpy; third argument should be size of destination. | -| tests.cpp:308:4:308:10 | call to wcsncpy | Potentially unsafe call to wcsncpy; third argument should be size of destination. | -| tests.cpp:454:9:454:15 | call to wcsncpy | Potentially unsafe call to wcsncpy; third argument should be size of destination. | +| tests.cpp:290:13:290:19 | call to wcsncpy | Potentially unsafe call to wcsncpy; third argument should be size of destination. | +| tests.cpp:306:4:306:10 | call to wcsncpy | Potentially unsafe call to wcsncpy; third argument should be size of destination. | +| tests.cpp:452:9:452:15 | call to wcsncpy | Potentially unsafe call to wcsncpy; third argument should be size of destination. | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/tests.cpp b/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/tests.cpp index 11510f5ef3c..1c7f9ad60f5 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/tests.cpp +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/tests.cpp @@ -1,5 +1,3 @@ -//semmle-extractor-options: --edg --target --edg win64 - // A sample of tests from the SAMATE Juliet framework for rule CWE-119. // library types, functions etc diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-129/SAMATE/ImproperArrayIndexValidation/ImproperArrayIndexValidation.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-129/SAMATE/ImproperArrayIndexValidation/ImproperArrayIndexValidation.expected index 357b583436b..008ff07b800 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-129/SAMATE/ImproperArrayIndexValidation/ImproperArrayIndexValidation.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-129/SAMATE/ImproperArrayIndexValidation/ImproperArrayIndexValidation.expected @@ -1 +1 @@ -| CWE122_Heap_Based_Buffer_Overflow__c_CWE129_fgets_01.c:51:20:51:23 | data | $@ flows to here and is used in an array indexing expression, potentially causing an invalid access. | CWE122_Heap_Based_Buffer_Overflow__c_CWE129_fgets_01.c:29:19:29:29 | inputBuffer | User-provided value | +| CWE122_Heap_Based_Buffer_Overflow__c_CWE129_fgets_01.c:52:20:52:23 | data | $@ flows to here and is used in an array indexing expression, potentially causing an invalid access. | CWE122_Heap_Based_Buffer_Overflow__c_CWE129_fgets_01.c:30:19:30:29 | inputBuffer | User-provided value | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/UncontrolledFormatString.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/UncontrolledFormatString.expected index 46fc6b5a61d..ba56fb478d6 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/UncontrolledFormatString.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/UncontrolledFormatString.expected @@ -1,17 +1,45 @@ edges -| test.c:93:46:93:69 | recv output argument | test.c:124:15:124:18 | data | -| test.c:93:46:93:69 | recv output argument | test.c:124:15:124:18 | data | -| test.c:93:46:93:69 | recv output argument | test.c:124:15:124:18 | data indirection | -| test.c:93:55:93:68 | ... + ... | test.c:124:15:124:18 | data | -| test.c:93:55:93:68 | ... + ... | test.c:124:15:124:18 | data | -| test.c:93:55:93:68 | ... + ... | test.c:124:15:124:18 | data indirection | +| char_connect_socket_w32_vsnprintf_01_bad.c:94:46:94:69 | recv output argument | char_connect_socket_w32_vsnprintf_01_bad.c:125:15:125:18 | data | +| char_connect_socket_w32_vsnprintf_01_bad.c:94:46:94:69 | recv output argument | char_connect_socket_w32_vsnprintf_01_bad.c:125:15:125:18 | data | +| char_connect_socket_w32_vsnprintf_01_bad.c:94:46:94:69 | recv output argument | char_connect_socket_w32_vsnprintf_01_bad.c:125:15:125:18 | data indirection | +| char_connect_socket_w32_vsnprintf_01_bad.c:94:55:94:68 | ... + ... | char_connect_socket_w32_vsnprintf_01_bad.c:125:15:125:18 | data | +| char_connect_socket_w32_vsnprintf_01_bad.c:94:55:94:68 | ... + ... | char_connect_socket_w32_vsnprintf_01_bad.c:125:15:125:18 | data | +| char_connect_socket_w32_vsnprintf_01_bad.c:94:55:94:68 | ... + ... | char_connect_socket_w32_vsnprintf_01_bad.c:125:15:125:18 | data indirection | +| char_console_fprintf_01_bad.c:30:23:30:35 | ... + ... | char_console_fprintf_01_bad.c:49:21:49:24 | (const char *)... | +| char_console_fprintf_01_bad.c:30:23:30:35 | ... + ... | char_console_fprintf_01_bad.c:49:21:49:24 | data | +| char_console_fprintf_01_bad.c:30:23:30:35 | ... + ... | char_console_fprintf_01_bad.c:49:21:49:24 | data indirection | +| char_console_fprintf_01_bad.c:30:23:30:35 | fgets output argument | char_console_fprintf_01_bad.c:49:21:49:24 | (const char *)... | +| char_console_fprintf_01_bad.c:30:23:30:35 | fgets output argument | char_console_fprintf_01_bad.c:49:21:49:24 | data | +| char_console_fprintf_01_bad.c:30:23:30:35 | fgets output argument | char_console_fprintf_01_bad.c:49:21:49:24 | data indirection | +| char_environment_fprintf_01_bad.c:27:30:27:35 | call to getenv | char_environment_fprintf_01_bad.c:36:21:36:24 | (const char *)... | +| char_environment_fprintf_01_bad.c:27:30:27:35 | call to getenv | char_environment_fprintf_01_bad.c:36:21:36:24 | (const char *)... | +| char_environment_fprintf_01_bad.c:27:30:27:35 | call to getenv | char_environment_fprintf_01_bad.c:36:21:36:24 | data | +| char_environment_fprintf_01_bad.c:27:30:27:35 | call to getenv | char_environment_fprintf_01_bad.c:36:21:36:24 | data | +| char_environment_fprintf_01_bad.c:27:30:27:35 | call to getenv | char_environment_fprintf_01_bad.c:36:21:36:24 | data indirection | +| char_environment_fprintf_01_bad.c:27:30:27:35 | call to getenv | char_environment_fprintf_01_bad.c:36:21:36:24 | data indirection | nodes -| test.c:93:46:93:69 | recv output argument | semmle.label | recv output argument | -| test.c:93:55:93:68 | ... + ... | semmle.label | ... + ... | -| test.c:124:15:124:18 | data | semmle.label | data | -| test.c:124:15:124:18 | data | semmle.label | data | -| test.c:124:15:124:18 | data | semmle.label | data | -| test.c:124:15:124:18 | data indirection | semmle.label | data indirection | -| test.c:124:15:124:18 | data indirection | semmle.label | data indirection | +| char_connect_socket_w32_vsnprintf_01_bad.c:94:46:94:69 | recv output argument | semmle.label | recv output argument | +| char_connect_socket_w32_vsnprintf_01_bad.c:94:55:94:68 | ... + ... | semmle.label | ... + ... | +| char_connect_socket_w32_vsnprintf_01_bad.c:125:15:125:18 | data | semmle.label | data | +| char_connect_socket_w32_vsnprintf_01_bad.c:125:15:125:18 | data | semmle.label | data | +| char_connect_socket_w32_vsnprintf_01_bad.c:125:15:125:18 | data | semmle.label | data | +| char_connect_socket_w32_vsnprintf_01_bad.c:125:15:125:18 | data indirection | semmle.label | data indirection | +| char_connect_socket_w32_vsnprintf_01_bad.c:125:15:125:18 | data indirection | semmle.label | data indirection | +| char_console_fprintf_01_bad.c:30:23:30:35 | ... + ... | semmle.label | ... + ... | +| char_console_fprintf_01_bad.c:30:23:30:35 | fgets output argument | semmle.label | fgets output argument | +| char_console_fprintf_01_bad.c:49:21:49:24 | (const char *)... | semmle.label | (const char *)... | +| char_console_fprintf_01_bad.c:49:21:49:24 | (const char *)... | semmle.label | (const char *)... | +| char_console_fprintf_01_bad.c:49:21:49:24 | data | semmle.label | data | +| char_console_fprintf_01_bad.c:49:21:49:24 | data indirection | semmle.label | data indirection | +| char_console_fprintf_01_bad.c:49:21:49:24 | data indirection | semmle.label | data indirection | +| char_environment_fprintf_01_bad.c:27:30:27:35 | call to getenv | semmle.label | call to getenv | +| char_environment_fprintf_01_bad.c:27:30:27:35 | call to getenv | semmle.label | call to getenv | +| char_environment_fprintf_01_bad.c:36:21:36:24 | (const char *)... | semmle.label | (const char *)... | +| char_environment_fprintf_01_bad.c:36:21:36:24 | (const char *)... | semmle.label | (const char *)... | +| char_environment_fprintf_01_bad.c:36:21:36:24 | data | semmle.label | data | +| char_environment_fprintf_01_bad.c:36:21:36:24 | data indirection | semmle.label | data indirection | +| char_environment_fprintf_01_bad.c:36:21:36:24 | data indirection | semmle.label | data indirection | #select -| test.c:124:15:124:18 | data | test.c:93:55:93:68 | ... + ... | test.c:124:15:124:18 | data | The value of this argument may come from $@ and is being used as a formatting argument to badVaSink(data), which calls vsnprintf(format) | test.c:93:55:93:68 | ... + ... | recv | +| char_connect_socket_w32_vsnprintf_01_bad.c:125:15:125:18 | data | char_connect_socket_w32_vsnprintf_01_bad.c:94:55:94:68 | ... + ... | char_connect_socket_w32_vsnprintf_01_bad.c:125:15:125:18 | data | The value of this argument may come from $@ and is being used as a formatting argument to badVaSink(data), which calls vsnprintf(format) | char_connect_socket_w32_vsnprintf_01_bad.c:94:55:94:68 | ... + ... | recv | +| char_console_fprintf_01_bad.c:49:21:49:24 | data | char_console_fprintf_01_bad.c:30:23:30:35 | ... + ... | char_console_fprintf_01_bad.c:49:21:49:24 | data | The value of this argument may come from $@ and is being used as a formatting argument to fprintf(format) | char_console_fprintf_01_bad.c:30:23:30:35 | ... + ... | fgets | +| char_environment_fprintf_01_bad.c:36:21:36:24 | data | char_environment_fprintf_01_bad.c:27:30:27:35 | call to getenv | char_environment_fprintf_01_bad.c:36:21:36:24 | data | The value of this argument may come from $@ and is being used as a formatting argument to fprintf(format) | char_environment_fprintf_01_bad.c:27:30:27:35 | call to getenv | getenv | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-197/SAMATE/IntegerOverflowTainted/IntegerOverflowTainted.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-197/SAMATE/IntegerOverflowTainted/IntegerOverflowTainted.expected index f71dbfde719..88b0b206cda 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-197/SAMATE/IntegerOverflowTainted/IntegerOverflowTainted.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-197/SAMATE/IntegerOverflowTainted/IntegerOverflowTainted.expected @@ -1 +1 @@ -| tests.cpp:39:31:39:34 | data | $@ flows to here and is used in an expression which might overflow. | tests.cpp:58:27:58:31 | & ... | User-provided value | +| tests.cpp:38:31:38:34 | data | $@ flows to here and is used in an expression which might overflow. | tests.cpp:57:27:57:31 | & ... | User-provided value | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-497/SAMATE/ExposedSystemData.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-497/SAMATE/ExposedSystemData.expected index 77a8ad6c533..b16a6cf1beb 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-497/SAMATE/ExposedSystemData.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-497/SAMATE/ExposedSystemData.expected @@ -1 +1 @@ -| tests.c:76:9:76:15 | call to fprintf | This operation exposes system data from $@. | tests.c:60:13:60:22 | call to LogonUserA | call to LogonUserA | +| tests.c:71:9:71:15 | call to fprintf | This operation exposes system data from $@. | tests.c:55:13:55:22 | call to LogonUserA | call to LogonUserA | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-497/SAMATE/OutputWrite.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-497/SAMATE/OutputWrite.expected index 3f9eeda87db..9f2f7d6ee3f 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-497/SAMATE/OutputWrite.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-497/SAMATE/OutputWrite.expected @@ -1,7 +1,7 @@ -| tests.c:35:9:35:14 | call to printf | tests.c:35:16:35:21 | %s\n | -| tests.c:35:9:35:14 | call to printf | tests.c:35:24:35:27 | line | -| tests.c:49:13:49:21 | call to printLine | tests.c:49:23:49:38 | fgets() failed | -| tests.c:68:13:68:21 | call to printLine | tests.c:68:23:68:52 | User logged in successfully. | -| tests.c:73:13:73:21 | call to printLine | tests.c:73:23:73:40 | Unable to login. | -| tests.c:76:9:76:15 | call to fprintf | tests.c:76:25:76:67 | User attempted access with password: %s\n | -| tests.c:76:9:76:15 | call to fprintf | tests.c:76:70:76:77 | password | +| tests.c:30:9:30:14 | call to printf | tests.c:30:16:30:21 | %s\n | +| tests.c:30:9:30:14 | call to printf | tests.c:30:24:30:27 | line | +| tests.c:44:13:44:21 | call to printLine | tests.c:44:23:44:38 | fgets() failed | +| tests.c:63:13:63:21 | call to printLine | tests.c:63:23:63:52 | User logged in successfully. | +| tests.c:68:13:68:21 | call to printLine | tests.c:68:23:68:40 | Unable to login. | +| tests.c:71:9:71:15 | call to fprintf | tests.c:71:25:71:67 | User attempted access with password: %s\n | +| tests.c:71:9:71:15 | call to fprintf | tests.c:71:70:71:77 | password | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-676/SAMATE/DangerousUseOfCin/DangerousUseOfCin.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-676/SAMATE/DangerousUseOfCin/DangerousUseOfCin.expected index 311f82ad99d..f5c0b85e28f 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-676/SAMATE/DangerousUseOfCin/DangerousUseOfCin.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-676/SAMATE/DangerousUseOfCin/DangerousUseOfCin.expected @@ -1 +1 @@ -| test.cpp:129:17:129:17 | call to operator>> | Use of 'cin' without specifying the length of the input may be dangerous. | +| test.cpp:59:17:59:17 | call to operator>> | Use of 'cin' without specifying the length of the input may be dangerous. | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-676/SAMATE/DangerousUseOfCin/test.cpp b/cpp/ql/test/query-tests/Security/CWE/CWE-676/SAMATE/DangerousUseOfCin/test.cpp index 7d01bd5929d..704c2a87b3f 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-676/SAMATE/DangerousUseOfCin/test.cpp +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-676/SAMATE/DangerousUseOfCin/test.cpp @@ -2,18 +2,30 @@ // --- library types, functions etc --- +typedef unsigned long size_t; + namespace std { - // --- std::string --- + // --- std::istream --- // std::char_traits template class char_traits; - // --- std::istream --- + typedef size_t streamsize; + + class ios_base { + public: + streamsize width(streamsize wide); + }; + + template > + class basic_ios : public ios_base { + public: + }; // std::basic_istream template > - class basic_istream /*: virtual public basic_ios - not needed for this test */ { + class basic_istream : virtual public basic_ios { }; // operator>> std::basic_istream -> char* diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-772/SAMATE/FileNeverClosed.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-772/SAMATE/FileNeverClosed.expected index 31a7fe984bd..a0c7281a6f4 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-772/SAMATE/FileNeverClosed.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-772/SAMATE/FileNeverClosed.expected @@ -1,3 +1,3 @@ -| tests.cpp:248:12:248:16 | call to fopen | The file is never closed | -| tests.cpp:280:12:280:15 | call to open | The file is never closed | -| tests.cpp:306:12:306:21 | call to CreateFile | The file is never closed | +| tests.cpp:223:12:223:16 | call to fopen | The file is never closed | +| tests.cpp:255:12:255:15 | call to open | The file is never closed | +| tests.cpp:281:12:281:21 | call to CreateFile | The file is never closed | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-772/SAMATE/MemoryMayNotBeFreed.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-772/SAMATE/MemoryMayNotBeFreed.expected index 006eeb5aa4c..b3d74dbf808 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-772/SAMATE/MemoryMayNotBeFreed.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-772/SAMATE/MemoryMayNotBeFreed.expected @@ -1,2 +1,2 @@ -| tests.cpp:226:31:226:36 | call to malloc | The memory allocated here may not be released at $@. | tests.cpp:240:1:240:1 | return ... | this exit point | -| tests.cpp:353:5:353:68 | ... = ... | The memory allocated here may not be released at $@. | tests.cpp:361:1:361:1 | return ... | this exit point | +| tests.cpp:201:31:201:36 | call to malloc | The memory allocated here may not be released at $@. | tests.cpp:215:1:215:1 | return ... | this exit point | +| tests.cpp:328:5:328:68 | ... = ... | The memory allocated here may not be released at $@. | tests.cpp:336:1:336:1 | return ... | this exit point | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-772/SAMATE/MemoryNeverFreed.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-772/SAMATE/MemoryNeverFreed.expected index 9c72dced70d..21657b90ace 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-772/SAMATE/MemoryNeverFreed.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-772/SAMATE/MemoryNeverFreed.expected @@ -1,2 +1,2 @@ -| tests.cpp:99:20:99:26 | new | This memory is never freed | -| tests.cpp:164:24:164:29 | call to malloc | This memory is never freed | +| tests.cpp:74:20:74:26 | new | This memory is never freed | +| tests.cpp:139:24:139:29 | call to malloc | This memory is never freed | From a0b712d44ba736b53640cc0af6088a3a97f89268 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Thu, 2 Sep 2021 13:50:50 +0100 Subject: [PATCH 156/741] C++: Add notice about the SAMATE Juliet tests. --- cpp/ql/test/query-tests/Security/CWE/notice.txt | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 cpp/ql/test/query-tests/Security/CWE/notice.txt diff --git a/cpp/ql/test/query-tests/Security/CWE/notice.txt b/cpp/ql/test/query-tests/Security/CWE/notice.txt new file mode 100644 index 00000000000..07a3835d4c6 --- /dev/null +++ b/cpp/ql/test/query-tests/Security/CWE/notice.txt @@ -0,0 +1,2 @@ + +Some of the the files in these tests contain source code copied or derived from the public domain "Juliet Test Suite for C/C++" (provided by NIST / SAMATE Team at https://samate.nist.gov/SARD/testsuite.php). Such tests are typically in subdirectories named "SAMATE". From c110508b4eeae5741a8b4fae6a8fd0d405a371f6 Mon Sep 17 00:00:00 2001 From: Anders Fugmann Date: Thu, 2 Sep 2021 21:20:33 +0200 Subject: [PATCH 157/741] C++: Add tests to expose potential improvements available to SimpleRangeAnalysis --- .../SimpleRangeAnalysis/lowerBound.expected | 31 +++++++++-------- .../SimpleRangeAnalysis/ternaryLower.expected | 4 +-- .../SimpleRangeAnalysis/ternaryUpper.expected | 4 +-- .../rangeanalysis/SimpleRangeAnalysis/test.c | 15 +++++++++ .../SimpleRangeAnalysis/test.cpp | 1 + .../SimpleRangeAnalysis/upperBound.expected | 33 +++++++++++-------- .../OverflowStatic/OverflowStatic.expected | 1 + .../Critical/OverflowStatic/test.cpp | 10 ++++++ .../PointlessComparison/PointlessComparison.c | 2 +- 9 files changed, 69 insertions(+), 32 deletions(-) diff --git a/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/lowerBound.expected b/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/lowerBound.expected index 7478060a95b..0f3e0af8653 100644 --- a/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/lowerBound.expected +++ b/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/lowerBound.expected @@ -594,6 +594,9 @@ | test.c:659:9:659:9 | u | 0 | | test.c:664:12:664:12 | s | -2147483648 | | test.c:665:7:665:8 | s2 | -4 | +| test.c:670:7:670:7 | x | -2147483648 | +| test.c:671:9:671:9 | y | -2147483648 | +| test.c:675:7:675:7 | y | -2147483648 | | test.cpp:10:7:10:7 | b | -2147483648 | | test.cpp:11:5:11:5 | x | -2147483648 | | test.cpp:13:10:13:10 | x | -2147483648 | @@ -647,16 +650,18 @@ | test.cpp:97:10:97:10 | i | -2147483648 | | test.cpp:97:22:97:22 | i | -2147483648 | | test.cpp:98:5:98:5 | i | -2147483648 | -| test.cpp:105:7:105:7 | n | -32768 | -| test.cpp:108:7:108:7 | n | 0 | -| test.cpp:109:5:109:5 | n | 1 | -| test.cpp:111:5:111:5 | n | 0 | -| test.cpp:114:8:114:8 | n | 0 | -| test.cpp:115:5:115:5 | n | 0 | -| test.cpp:117:5:117:5 | n | 1 | -| test.cpp:120:3:120:3 | n | 0 | -| test.cpp:120:8:120:8 | n | 1 | -| test.cpp:120:12:120:12 | n | 0 | -| test.cpp:121:4:121:4 | n | 0 | -| test.cpp:121:8:121:8 | n | 0 | -| test.cpp:121:12:121:12 | n | 1 | +| test.cpp:98:9:98:9 | i | -2147483648 | +| test.cpp:99:5:99:5 | i | -2147483648 | +| test.cpp:106:7:106:7 | n | -32768 | +| test.cpp:109:7:109:7 | n | 0 | +| test.cpp:110:5:110:5 | n | 1 | +| test.cpp:112:5:112:5 | n | 0 | +| test.cpp:115:8:115:8 | n | 0 | +| test.cpp:116:5:116:5 | n | 0 | +| test.cpp:118:5:118:5 | n | 1 | +| test.cpp:121:3:121:3 | n | 0 | +| test.cpp:121:8:121:8 | n | 1 | +| test.cpp:121:12:121:12 | n | 0 | +| test.cpp:122:4:122:4 | n | 0 | +| test.cpp:122:8:122:8 | n | 0 | +| test.cpp:122:12:122:12 | n | 1 | diff --git a/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/ternaryLower.expected b/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/ternaryLower.expected index fedd3853ce2..f012490f115 100644 --- a/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/ternaryLower.expected +++ b/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/ternaryLower.expected @@ -15,5 +15,5 @@ | test.c:394:20:394:36 | ... ? ... : ... | 0.0 | 0.0 | 100.0 | | test.c:606:5:606:14 | ... ? ... : ... | 0.0 | 1.0 | 0.0 | | test.c:607:5:607:14 | ... ? ... : ... | 0.0 | 0.0 | 1.0 | -| test.cpp:120:3:120:12 | ... ? ... : ... | 0.0 | 1.0 | 0.0 | -| test.cpp:121:3:121:12 | ... ? ... : ... | 0.0 | 0.0 | 1.0 | +| test.cpp:121:3:121:12 | ... ? ... : ... | 0.0 | 1.0 | 0.0 | +| test.cpp:122:3:122:12 | ... ? ... : ... | 0.0 | 0.0 | 1.0 | diff --git a/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/ternaryUpper.expected b/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/ternaryUpper.expected index 0b8fe8c1164..8a387c3ae46 100644 --- a/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/ternaryUpper.expected +++ b/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/ternaryUpper.expected @@ -15,5 +15,5 @@ | test.c:394:20:394:36 | ... ? ... : ... | 100.0 | 99.0 | 100.0 | | test.c:606:5:606:14 | ... ? ... : ... | 32767.0 | 32767.0 | 0.0 | | test.c:607:5:607:14 | ... ? ... : ... | 32767.0 | 0.0 | 32767.0 | -| test.cpp:120:3:120:12 | ... ? ... : ... | 32767.0 | 32767.0 | 0.0 | -| test.cpp:121:3:121:12 | ... ? ... : ... | 32767.0 | 0.0 | 32767.0 | +| test.cpp:121:3:121:12 | ... ? ... : ... | 32767.0 | 32767.0 | 0.0 | +| test.cpp:122:3:122:12 | ... ? ... : ... | 32767.0 | 0.0 | 32767.0 | diff --git a/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/test.c b/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/test.c index 40168c3e697..041ff9e5a86 100644 --- a/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/test.c +++ b/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/test.c @@ -664,3 +664,18 @@ void test_mod(int s) { int s2 = s % 5; out(s2); // -4 .. 4 } + +void exit(int); +void guard_with_exit(int x, int y) { + if (x) { + if (y != 0) { + exit(0); + } + } + out(y); // .. + + // This test ensures that we correctly identify + // that the upper bound for y is max_int when calling `out(y)`. + // The RangeSsa will place guardPhy on `out(y)`, and consequently there is no + // frontier phi node at out(y). +} diff --git a/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/test.cpp b/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/test.cpp index 515633f4f73..e5eb9554966 100644 --- a/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/test.cpp +++ b/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/test.cpp @@ -95,6 +95,7 @@ int ref_to_number(int &i, const int &ci, int &aliased) { return alias; for (; i <= 12345; i++) { // test that widening works for references + i = i; i; } diff --git a/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/upperBound.expected b/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/upperBound.expected index ce6bed728eb..202662f8896 100644 --- a/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/upperBound.expected +++ b/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/upperBound.expected @@ -594,6 +594,9 @@ | test.c:659:9:659:9 | u | 4294967295 | | test.c:664:12:664:12 | s | 2147483647 | | test.c:665:7:665:8 | s2 | 4 | +| test.c:670:7:670:7 | x | 2147483647 | +| test.c:671:9:671:9 | y | 2147483647 | +| test.c:675:7:675:7 | y | 2147483647 | | test.cpp:10:7:10:7 | b | 2147483647 | | test.cpp:11:5:11:5 | x | 2147483647 | | test.cpp:13:10:13:10 | x | 2147483647 | @@ -646,17 +649,19 @@ | test.cpp:95:12:95:16 | alias | 2147483647 | | test.cpp:97:10:97:10 | i | 65535 | | test.cpp:97:22:97:22 | i | 32767 | -| test.cpp:98:5:98:5 | i | 32767 | -| test.cpp:105:7:105:7 | n | 32767 | -| test.cpp:108:7:108:7 | n | 32767 | -| test.cpp:109:5:109:5 | n | 32767 | -| test.cpp:111:5:111:5 | n | 0 | -| test.cpp:114:8:114:8 | n | 32767 | -| test.cpp:115:5:115:5 | n | 0 | -| test.cpp:117:5:117:5 | n | 32767 | -| test.cpp:120:3:120:3 | n | 32767 | -| test.cpp:120:8:120:8 | n | 32767 | -| test.cpp:120:12:120:12 | n | 0 | -| test.cpp:121:4:121:4 | n | 32767 | -| test.cpp:121:8:121:8 | n | 0 | -| test.cpp:121:12:121:12 | n | 32767 | +| test.cpp:98:5:98:5 | i | 2147483647 | +| test.cpp:98:9:98:9 | i | 32767 | +| test.cpp:99:5:99:5 | i | 32767 | +| test.cpp:106:7:106:7 | n | 32767 | +| test.cpp:109:7:109:7 | n | 32767 | +| test.cpp:110:5:110:5 | n | 32767 | +| test.cpp:112:5:112:5 | n | 0 | +| test.cpp:115:8:115:8 | n | 32767 | +| test.cpp:116:5:116:5 | n | 0 | +| test.cpp:118:5:118:5 | n | 32767 | +| test.cpp:121:3:121:3 | n | 32767 | +| test.cpp:121:8:121:8 | n | 32767 | +| test.cpp:121:12:121:12 | n | 0 | +| test.cpp:122:4:122:4 | n | 32767 | +| test.cpp:122:8:122:8 | n | 0 | +| test.cpp:122:12:122:12 | n | 32767 | diff --git a/cpp/ql/test/query-tests/Critical/OverflowStatic/OverflowStatic.expected b/cpp/ql/test/query-tests/Critical/OverflowStatic/OverflowStatic.expected index 01a2dfc38b3..448e0d7cc05 100644 --- a/cpp/ql/test/query-tests/Critical/OverflowStatic/OverflowStatic.expected +++ b/cpp/ql/test/query-tests/Critical/OverflowStatic/OverflowStatic.expected @@ -14,3 +14,4 @@ | test.cpp:24:27:24:27 | 4 | Potential buffer-overflow: 'buffer1' has size 3 not 4. | | test.cpp:26:27:26:27 | 4 | Potential buffer-overflow: 'buffer2' has size 3 not 4. | | test.cpp:40:22:40:27 | amount | Potential buffer-overflow: 'buffer' has size 100 not 101. | +| test.cpp:55:13:55:21 | access to array | Potential buffer-overflow: counter 'i' <= 9 but 'buffer' has 5 elements. | diff --git a/cpp/ql/test/query-tests/Critical/OverflowStatic/test.cpp b/cpp/ql/test/query-tests/Critical/OverflowStatic/test.cpp index be9e14bd841..691936f3dae 100644 --- a/cpp/ql/test/query-tests/Critical/OverflowStatic/test.cpp +++ b/cpp/ql/test/query-tests/Critical/OverflowStatic/test.cpp @@ -46,3 +46,13 @@ void f2(char *src) ptr = &(buffer[1]); memcpy(ptr, src, 100); // BAD [NOT DETECTED] } + +void f3() { + int i; + char buffer[5]; + for (i=0; i<10; i++) { + if (i < 5) { + buffer[i] = 0; // GOOD [FALSE POSITIVE] + } + } +} diff --git a/cpp/ql/test/query-tests/Likely Bugs/Arithmetic/PointlessComparison/PointlessComparison.c b/cpp/ql/test/query-tests/Likely Bugs/Arithmetic/PointlessComparison/PointlessComparison.c index 9fc257e3eeb..fd1bc655051 100644 --- a/cpp/ql/test/query-tests/Likely Bugs/Arithmetic/PointlessComparison/PointlessComparison.c +++ b/cpp/ql/test/query-tests/Likely Bugs/Arithmetic/PointlessComparison/PointlessComparison.c @@ -115,7 +115,7 @@ int twoReasons(int a, int b) { if (a <= 0 && b > 5) { return a < b; } - if (a <= 100 && b > 105) { + if (a <= 100 && b > 105) { // BUG [Not detected - this clause is always false] return a > b; } return 0; From d962fc4ce10aa6d27b0f4c6c3eb9873efb76f580 Mon Sep 17 00:00:00 2001 From: Anders Fugmann Date: Thu, 2 Sep 2021 21:46:18 +0200 Subject: [PATCH 158/741] C++: Improve predicate upperBound in SimpleRangeAnalysis If an expression has an immediate guardPhi node, this is used as a strict upper bound --- .../2021-08-31-range-analysis-upper-bound.md | 4 ++++ .../code/cpp/rangeanalysis/RangeSSA.qll | 15 ++++++++++--- .../cpp/rangeanalysis/SimpleRangeAnalysis.qll | 22 ++++++++++++++++--- .../SimpleRangeAnalysis/upperBound.expected | 8 +++---- .../OverflowStatic/OverflowStatic.expected | 1 - 5 files changed, 39 insertions(+), 11 deletions(-) create mode 100644 cpp/change-notes/2021-08-31-range-analysis-upper-bound.md diff --git a/cpp/change-notes/2021-08-31-range-analysis-upper-bound.md b/cpp/change-notes/2021-08-31-range-analysis-upper-bound.md new file mode 100644 index 00000000000..f7ea800f719 --- /dev/null +++ b/cpp/change-notes/2021-08-31-range-analysis-upper-bound.md @@ -0,0 +1,4 @@ +lgtm,codescanning +* The `SimpleRangeAnalysis` library includes information from the + immediate guard for determining the upper bound of a stack + variable for improved accuracy. diff --git a/cpp/ql/src/semmle/code/cpp/rangeanalysis/RangeSSA.qll b/cpp/ql/src/semmle/code/cpp/rangeanalysis/RangeSSA.qll index 93dcf989590..69a397891f9 100644 --- a/cpp/ql/src/semmle/code/cpp/rangeanalysis/RangeSSA.qll +++ b/cpp/ql/src/semmle/code/cpp/rangeanalysis/RangeSSA.qll @@ -95,10 +95,19 @@ class RangeSsaDefinition extends ControlFlowNodeBase { /** * If this definition is a phi node corresponding to a guard, - * then return the variable and the guard. + * then return the variable access and the guard. */ - predicate isGuardPhi(VariableAccess v, Expr guard, boolean branch) { - guard_defn(v, guard, this, branch) + predicate isGuardPhi(VariableAccess va, Expr guard, boolean branch) { + guard_defn(va, guard, this, branch) + } + + /** + * If this definition is a phi node corresponding to a guard, + * then return the variable guarded, the variable access and the guard. + */ + predicate isGuardPhi(StackVariable v, VariableAccess va, Expr guard, boolean branch) { + guard_defn(va, guard, this, branch) and + va.getTarget() = v } /** Gets the primary location of this definition. */ diff --git a/cpp/ql/src/semmle/code/cpp/rangeanalysis/SimpleRangeAnalysis.qll b/cpp/ql/src/semmle/code/cpp/rangeanalysis/SimpleRangeAnalysis.qll index 187641559f4..80fdf87ac05 100644 --- a/cpp/ql/src/semmle/code/cpp/rangeanalysis/SimpleRangeAnalysis.qll +++ b/cpp/ql/src/semmle/code/cpp/rangeanalysis/SimpleRangeAnalysis.qll @@ -1530,6 +1530,22 @@ private predicate isUnsupportedGuardPhi(Variable v, RangeSsaDefinition phi, Vari ) } +/** + * Gets the upper bound of the expression, if the expression is guarded. + * An upper bound can only be found, if a guard phi node can be found, and the + * expression has only one immediate predecessor. + */ +private float getGuardedUpperBound(VariableAccess guardedAccess) { + exists( + RangeSsaDefinition def, StackVariable v, VariableAccess guardVa, Expr guard, boolean branch + | + def.isGuardPhi(v, guardVa, guard, branch) and + exists(unique(BasicBlock b | b = def.(BasicBlock).getAPredecessor())) and + guardedAccess = def.getAUse(v) and + result = max(float ub | upperBoundFromGuard(guard, guardVa, ub, branch)) + ) +} + cached private module SimpleRangeAnalysisCached { /** @@ -1565,9 +1581,9 @@ private module SimpleRangeAnalysisCached { */ cached float upperBound(Expr expr) { - // Combine the upper bounds returned by getTruncatedUpperBounds into a - // single maximum value. - result = max(float ub | ub = getTruncatedUpperBounds(expr) | ub) + // Combine the upper bounds returned by getTruncatedUpperBounds and + // getGuardedUpperBound into a single maximum value + result = min([max(getTruncatedUpperBounds(expr)), getGuardedUpperBound(expr)]) } /** diff --git a/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/upperBound.expected b/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/upperBound.expected index 202662f8896..11e67670dae 100644 --- a/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/upperBound.expected +++ b/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/upperBound.expected @@ -584,9 +584,9 @@ | test.c:639:9:639:10 | ss | 2 | | test.c:645:8:645:8 | s | 2147483647 | | test.c:645:15:645:15 | s | 127 | -| test.c:645:23:645:23 | s | 15 | -| test.c:646:18:646:18 | s | 15 | -| test.c:646:22:646:22 | s | 15 | +| test.c:645:23:645:23 | s | 9 | +| test.c:646:18:646:18 | s | 9 | +| test.c:646:22:646:22 | s | 9 | | test.c:647:9:647:14 | result | 127 | | test.c:653:7:653:7 | i | 0 | | test.c:654:9:654:9 | i | 2147483647 | @@ -650,7 +650,7 @@ | test.cpp:97:10:97:10 | i | 65535 | | test.cpp:97:22:97:22 | i | 32767 | | test.cpp:98:5:98:5 | i | 2147483647 | -| test.cpp:98:9:98:9 | i | 32767 | +| test.cpp:98:9:98:9 | i | 12345 | | test.cpp:99:5:99:5 | i | 32767 | | test.cpp:106:7:106:7 | n | 32767 | | test.cpp:109:7:109:7 | n | 32767 | diff --git a/cpp/ql/test/query-tests/Critical/OverflowStatic/OverflowStatic.expected b/cpp/ql/test/query-tests/Critical/OverflowStatic/OverflowStatic.expected index 448e0d7cc05..01a2dfc38b3 100644 --- a/cpp/ql/test/query-tests/Critical/OverflowStatic/OverflowStatic.expected +++ b/cpp/ql/test/query-tests/Critical/OverflowStatic/OverflowStatic.expected @@ -14,4 +14,3 @@ | test.cpp:24:27:24:27 | 4 | Potential buffer-overflow: 'buffer1' has size 3 not 4. | | test.cpp:26:27:26:27 | 4 | Potential buffer-overflow: 'buffer2' has size 3 not 4. | | test.cpp:40:22:40:27 | amount | Potential buffer-overflow: 'buffer' has size 100 not 101. | -| test.cpp:55:13:55:21 | access to array | Potential buffer-overflow: counter 'i' <= 9 but 'buffer' has 5 elements. | From f2047ee4d03abaef73b8d9935bdf6d5d11ecba60 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Fri, 3 Sep 2021 09:13:26 +0100 Subject: [PATCH 159/741] C++: Actually fix expected files after layout changes. --- .../CWE-190/SAMATE/ArithmeticTainted.expected | 20 +-- .../SAMATE/ArithmeticUncontrolled.expected | 148 +++++++++--------- .../SAMATE/IntegerOverflowTainted.expected | 2 +- .../CWE-497/SAMATE/ExposedSystemData.expected | 2 +- .../CWE/CWE-497/SAMATE/OutputWrite.expected | 14 +- .../CWE-772/SAMATE/FileNeverClosed.expected | 6 +- .../SAMATE/MemoryMayNotBeFreed.expected | 4 +- .../CWE-772/SAMATE/MemoryNeverFreed.expected | 4 +- 8 files changed, 100 insertions(+), 100 deletions(-) diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-190/SAMATE/ArithmeticTainted.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-190/SAMATE/ArithmeticTainted.expected index 858be731077..be606d4e1dd 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-190/SAMATE/ArithmeticTainted.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-190/SAMATE/ArithmeticTainted.expected @@ -1,13 +1,13 @@ edges -| examples.cpp:62:26:62:30 | & ... | examples.cpp:65:11:65:14 | data | -| examples.cpp:62:26:62:30 | & ... | examples.cpp:65:11:65:14 | data | -| examples.cpp:62:26:62:30 | fscanf output argument | examples.cpp:65:11:65:14 | data | -| examples.cpp:62:26:62:30 | fscanf output argument | examples.cpp:65:11:65:14 | data | +| examples.cpp:63:26:63:30 | & ... | examples.cpp:66:11:66:14 | data | +| examples.cpp:63:26:63:30 | & ... | examples.cpp:66:11:66:14 | data | +| examples.cpp:63:26:63:30 | fscanf output argument | examples.cpp:66:11:66:14 | data | +| examples.cpp:63:26:63:30 | fscanf output argument | examples.cpp:66:11:66:14 | data | nodes -| examples.cpp:62:26:62:30 | & ... | semmle.label | & ... | -| examples.cpp:62:26:62:30 | fscanf output argument | semmle.label | fscanf output argument | -| examples.cpp:65:11:65:14 | data | semmle.label | data | -| examples.cpp:65:11:65:14 | data | semmle.label | data | -| examples.cpp:65:11:65:14 | data | semmle.label | data | +| examples.cpp:63:26:63:30 | & ... | semmle.label | & ... | +| examples.cpp:63:26:63:30 | fscanf output argument | semmle.label | fscanf output argument | +| examples.cpp:66:11:66:14 | data | semmle.label | data | +| examples.cpp:66:11:66:14 | data | semmle.label | data | +| examples.cpp:66:11:66:14 | data | semmle.label | data | #select -| examples.cpp:65:11:65:14 | data | examples.cpp:62:26:62:30 | & ... | examples.cpp:65:11:65:14 | data | $@ flows to here and is used in arithmetic, potentially causing an underflow. | examples.cpp:62:26:62:30 | & ... | User-provided value | +| examples.cpp:66:11:66:14 | data | examples.cpp:63:26:63:30 | & ... | examples.cpp:66:11:66:14 | data | $@ flows to here and is used in arithmetic, potentially causing an underflow. | examples.cpp:63:26:63:30 | & ... | User-provided value | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-190/SAMATE/ArithmeticUncontrolled.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-190/SAMATE/ArithmeticUncontrolled.expected index 14f313e62cf..9ae2ff0ecff 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-190/SAMATE/ArithmeticUncontrolled.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-190/SAMATE/ArithmeticUncontrolled.expected @@ -1,77 +1,77 @@ edges -| examples.cpp:21:26:21:33 | (unsigned int)... | examples.cpp:24:31:24:34 | data | -| examples.cpp:21:26:21:33 | (unsigned int)... | examples.cpp:24:31:24:34 | data | -| examples.cpp:21:26:21:33 | (unsigned int)... | examples.cpp:24:31:24:34 | data | -| examples.cpp:21:26:21:33 | (unsigned int)... | examples.cpp:24:31:24:34 | data | -| examples.cpp:21:26:21:33 | (unsigned int)... | examples.cpp:24:31:24:34 | data | -| examples.cpp:21:26:21:33 | (unsigned int)... | examples.cpp:24:31:24:34 | data | -| examples.cpp:21:26:21:33 | call to rand | examples.cpp:24:31:24:34 | data | -| examples.cpp:21:26:21:33 | call to rand | examples.cpp:24:31:24:34 | data | -| examples.cpp:21:26:21:33 | call to rand | examples.cpp:24:31:24:34 | data | -| examples.cpp:21:26:21:33 | call to rand | examples.cpp:24:31:24:34 | data | -| examples.cpp:21:26:21:33 | call to rand | examples.cpp:24:31:24:34 | data | -| examples.cpp:21:26:21:33 | call to rand | examples.cpp:24:31:24:34 | data | -| examples.cpp:34:26:34:33 | (unsigned int)... | examples.cpp:37:9:37:12 | data | -| examples.cpp:34:26:34:33 | (unsigned int)... | examples.cpp:37:9:37:12 | data | -| examples.cpp:34:26:34:33 | (unsigned int)... | examples.cpp:37:9:37:12 | data | -| examples.cpp:34:26:34:33 | (unsigned int)... | examples.cpp:37:9:37:12 | data | -| examples.cpp:34:26:34:33 | (unsigned int)... | examples.cpp:37:9:37:12 | data | -| examples.cpp:34:26:34:33 | (unsigned int)... | examples.cpp:37:9:37:12 | data | -| examples.cpp:34:26:34:33 | call to rand | examples.cpp:37:9:37:12 | data | -| examples.cpp:34:26:34:33 | call to rand | examples.cpp:37:9:37:12 | data | -| examples.cpp:34:26:34:33 | call to rand | examples.cpp:37:9:37:12 | data | -| examples.cpp:34:26:34:33 | call to rand | examples.cpp:37:9:37:12 | data | -| examples.cpp:34:26:34:33 | call to rand | examples.cpp:37:9:37:12 | data | -| examples.cpp:34:26:34:33 | call to rand | examples.cpp:37:9:37:12 | data | +| examples.cpp:22:26:22:33 | (unsigned int)... | examples.cpp:25:31:25:34 | data | +| examples.cpp:22:26:22:33 | (unsigned int)... | examples.cpp:25:31:25:34 | data | +| examples.cpp:22:26:22:33 | (unsigned int)... | examples.cpp:25:31:25:34 | data | +| examples.cpp:22:26:22:33 | (unsigned int)... | examples.cpp:25:31:25:34 | data | +| examples.cpp:22:26:22:33 | (unsigned int)... | examples.cpp:25:31:25:34 | data | +| examples.cpp:22:26:22:33 | (unsigned int)... | examples.cpp:25:31:25:34 | data | +| examples.cpp:22:26:22:33 | call to rand | examples.cpp:25:31:25:34 | data | +| examples.cpp:22:26:22:33 | call to rand | examples.cpp:25:31:25:34 | data | +| examples.cpp:22:26:22:33 | call to rand | examples.cpp:25:31:25:34 | data | +| examples.cpp:22:26:22:33 | call to rand | examples.cpp:25:31:25:34 | data | +| examples.cpp:22:26:22:33 | call to rand | examples.cpp:25:31:25:34 | data | +| examples.cpp:22:26:22:33 | call to rand | examples.cpp:25:31:25:34 | data | +| examples.cpp:35:26:35:33 | (unsigned int)... | examples.cpp:38:9:38:12 | data | +| examples.cpp:35:26:35:33 | (unsigned int)... | examples.cpp:38:9:38:12 | data | +| examples.cpp:35:26:35:33 | (unsigned int)... | examples.cpp:38:9:38:12 | data | +| examples.cpp:35:26:35:33 | (unsigned int)... | examples.cpp:38:9:38:12 | data | +| examples.cpp:35:26:35:33 | (unsigned int)... | examples.cpp:38:9:38:12 | data | +| examples.cpp:35:26:35:33 | (unsigned int)... | examples.cpp:38:9:38:12 | data | +| examples.cpp:35:26:35:33 | call to rand | examples.cpp:38:9:38:12 | data | +| examples.cpp:35:26:35:33 | call to rand | examples.cpp:38:9:38:12 | data | +| examples.cpp:35:26:35:33 | call to rand | examples.cpp:38:9:38:12 | data | +| examples.cpp:35:26:35:33 | call to rand | examples.cpp:38:9:38:12 | data | +| examples.cpp:35:26:35:33 | call to rand | examples.cpp:38:9:38:12 | data | +| examples.cpp:35:26:35:33 | call to rand | examples.cpp:38:9:38:12 | data | nodes -| examples.cpp:21:26:21:33 | (unsigned int)... | semmle.label | (unsigned int)... | -| examples.cpp:21:26:21:33 | (unsigned int)... | semmle.label | (unsigned int)... | -| examples.cpp:21:26:21:33 | (unsigned int)... | semmle.label | (unsigned int)... | -| examples.cpp:21:26:21:33 | (unsigned int)... | semmle.label | (unsigned int)... | -| examples.cpp:21:26:21:33 | (unsigned int)... | semmle.label | (unsigned int)... | -| examples.cpp:21:26:21:33 | (unsigned int)... | semmle.label | (unsigned int)... | -| examples.cpp:21:26:21:33 | call to rand | semmle.label | call to rand | -| examples.cpp:21:26:21:33 | call to rand | semmle.label | call to rand | -| examples.cpp:21:26:21:33 | call to rand | semmle.label | call to rand | -| examples.cpp:21:26:21:33 | call to rand | semmle.label | call to rand | -| examples.cpp:21:26:21:33 | call to rand | semmle.label | call to rand | -| examples.cpp:21:26:21:33 | call to rand | semmle.label | call to rand | -| examples.cpp:24:31:24:34 | data | semmle.label | data | -| examples.cpp:34:26:34:33 | (unsigned int)... | semmle.label | (unsigned int)... | -| examples.cpp:34:26:34:33 | (unsigned int)... | semmle.label | (unsigned int)... | -| examples.cpp:34:26:34:33 | (unsigned int)... | semmle.label | (unsigned int)... | -| examples.cpp:34:26:34:33 | (unsigned int)... | semmle.label | (unsigned int)... | -| examples.cpp:34:26:34:33 | (unsigned int)... | semmle.label | (unsigned int)... | -| examples.cpp:34:26:34:33 | (unsigned int)... | semmle.label | (unsigned int)... | -| examples.cpp:34:26:34:33 | call to rand | semmle.label | call to rand | -| examples.cpp:34:26:34:33 | call to rand | semmle.label | call to rand | -| examples.cpp:34:26:34:33 | call to rand | semmle.label | call to rand | -| examples.cpp:34:26:34:33 | call to rand | semmle.label | call to rand | -| examples.cpp:34:26:34:33 | call to rand | semmle.label | call to rand | -| examples.cpp:34:26:34:33 | call to rand | semmle.label | call to rand | -| examples.cpp:37:9:37:12 | data | semmle.label | data | +| examples.cpp:22:26:22:33 | (unsigned int)... | semmle.label | (unsigned int)... | +| examples.cpp:22:26:22:33 | (unsigned int)... | semmle.label | (unsigned int)... | +| examples.cpp:22:26:22:33 | (unsigned int)... | semmle.label | (unsigned int)... | +| examples.cpp:22:26:22:33 | (unsigned int)... | semmle.label | (unsigned int)... | +| examples.cpp:22:26:22:33 | (unsigned int)... | semmle.label | (unsigned int)... | +| examples.cpp:22:26:22:33 | (unsigned int)... | semmle.label | (unsigned int)... | +| examples.cpp:22:26:22:33 | call to rand | semmle.label | call to rand | +| examples.cpp:22:26:22:33 | call to rand | semmle.label | call to rand | +| examples.cpp:22:26:22:33 | call to rand | semmle.label | call to rand | +| examples.cpp:22:26:22:33 | call to rand | semmle.label | call to rand | +| examples.cpp:22:26:22:33 | call to rand | semmle.label | call to rand | +| examples.cpp:22:26:22:33 | call to rand | semmle.label | call to rand | +| examples.cpp:25:31:25:34 | data | semmle.label | data | +| examples.cpp:35:26:35:33 | (unsigned int)... | semmle.label | (unsigned int)... | +| examples.cpp:35:26:35:33 | (unsigned int)... | semmle.label | (unsigned int)... | +| examples.cpp:35:26:35:33 | (unsigned int)... | semmle.label | (unsigned int)... | +| examples.cpp:35:26:35:33 | (unsigned int)... | semmle.label | (unsigned int)... | +| examples.cpp:35:26:35:33 | (unsigned int)... | semmle.label | (unsigned int)... | +| examples.cpp:35:26:35:33 | (unsigned int)... | semmle.label | (unsigned int)... | +| examples.cpp:35:26:35:33 | call to rand | semmle.label | call to rand | +| examples.cpp:35:26:35:33 | call to rand | semmle.label | call to rand | +| examples.cpp:35:26:35:33 | call to rand | semmle.label | call to rand | +| examples.cpp:35:26:35:33 | call to rand | semmle.label | call to rand | +| examples.cpp:35:26:35:33 | call to rand | semmle.label | call to rand | +| examples.cpp:35:26:35:33 | call to rand | semmle.label | call to rand | +| examples.cpp:38:9:38:12 | data | semmle.label | data | #select -| examples.cpp:24:31:24:34 | data | examples.cpp:21:26:21:33 | (unsigned int)... | examples.cpp:24:31:24:34 | data | $@ flows to here and is used in arithmetic, potentially causing an underflow. | examples.cpp:21:26:21:33 | call to rand | Uncontrolled value | -| examples.cpp:24:31:24:34 | data | examples.cpp:21:26:21:33 | (unsigned int)... | examples.cpp:24:31:24:34 | data | $@ flows to here and is used in arithmetic, potentially causing an underflow. | examples.cpp:21:26:21:33 | call to rand | Uncontrolled value | -| examples.cpp:24:31:24:34 | data | examples.cpp:21:26:21:33 | (unsigned int)... | examples.cpp:24:31:24:34 | data | $@ flows to here and is used in arithmetic, potentially causing an underflow. | examples.cpp:21:26:21:33 | call to rand | Uncontrolled value | -| examples.cpp:24:31:24:34 | data | examples.cpp:21:26:21:33 | (unsigned int)... | examples.cpp:24:31:24:34 | data | $@ flows to here and is used in arithmetic, potentially causing an underflow. | examples.cpp:21:26:21:33 | call to rand | Uncontrolled value | -| examples.cpp:24:31:24:34 | data | examples.cpp:21:26:21:33 | (unsigned int)... | examples.cpp:24:31:24:34 | data | $@ flows to here and is used in arithmetic, potentially causing an underflow. | examples.cpp:21:26:21:33 | call to rand | Uncontrolled value | -| examples.cpp:24:31:24:34 | data | examples.cpp:21:26:21:33 | (unsigned int)... | examples.cpp:24:31:24:34 | data | $@ flows to here and is used in arithmetic, potentially causing an underflow. | examples.cpp:21:26:21:33 | call to rand | Uncontrolled value | -| examples.cpp:24:31:24:34 | data | examples.cpp:21:26:21:33 | call to rand | examples.cpp:24:31:24:34 | data | $@ flows to here and is used in arithmetic, potentially causing an underflow. | examples.cpp:21:26:21:33 | call to rand | Uncontrolled value | -| examples.cpp:24:31:24:34 | data | examples.cpp:21:26:21:33 | call to rand | examples.cpp:24:31:24:34 | data | $@ flows to here and is used in arithmetic, potentially causing an underflow. | examples.cpp:21:26:21:33 | call to rand | Uncontrolled value | -| examples.cpp:24:31:24:34 | data | examples.cpp:21:26:21:33 | call to rand | examples.cpp:24:31:24:34 | data | $@ flows to here and is used in arithmetic, potentially causing an underflow. | examples.cpp:21:26:21:33 | call to rand | Uncontrolled value | -| examples.cpp:24:31:24:34 | data | examples.cpp:21:26:21:33 | call to rand | examples.cpp:24:31:24:34 | data | $@ flows to here and is used in arithmetic, potentially causing an underflow. | examples.cpp:21:26:21:33 | call to rand | Uncontrolled value | -| examples.cpp:24:31:24:34 | data | examples.cpp:21:26:21:33 | call to rand | examples.cpp:24:31:24:34 | data | $@ flows to here and is used in arithmetic, potentially causing an underflow. | examples.cpp:21:26:21:33 | call to rand | Uncontrolled value | -| examples.cpp:24:31:24:34 | data | examples.cpp:21:26:21:33 | call to rand | examples.cpp:24:31:24:34 | data | $@ flows to here and is used in arithmetic, potentially causing an underflow. | examples.cpp:21:26:21:33 | call to rand | Uncontrolled value | -| examples.cpp:37:9:37:12 | data | examples.cpp:34:26:34:33 | (unsigned int)... | examples.cpp:37:9:37:12 | data | $@ flows to here and is used in arithmetic, potentially causing an underflow. | examples.cpp:34:26:34:33 | call to rand | Uncontrolled value | -| examples.cpp:37:9:37:12 | data | examples.cpp:34:26:34:33 | (unsigned int)... | examples.cpp:37:9:37:12 | data | $@ flows to here and is used in arithmetic, potentially causing an underflow. | examples.cpp:34:26:34:33 | call to rand | Uncontrolled value | -| examples.cpp:37:9:37:12 | data | examples.cpp:34:26:34:33 | (unsigned int)... | examples.cpp:37:9:37:12 | data | $@ flows to here and is used in arithmetic, potentially causing an underflow. | examples.cpp:34:26:34:33 | call to rand | Uncontrolled value | -| examples.cpp:37:9:37:12 | data | examples.cpp:34:26:34:33 | (unsigned int)... | examples.cpp:37:9:37:12 | data | $@ flows to here and is used in arithmetic, potentially causing an underflow. | examples.cpp:34:26:34:33 | call to rand | Uncontrolled value | -| examples.cpp:37:9:37:12 | data | examples.cpp:34:26:34:33 | (unsigned int)... | examples.cpp:37:9:37:12 | data | $@ flows to here and is used in arithmetic, potentially causing an underflow. | examples.cpp:34:26:34:33 | call to rand | Uncontrolled value | -| examples.cpp:37:9:37:12 | data | examples.cpp:34:26:34:33 | (unsigned int)... | examples.cpp:37:9:37:12 | data | $@ flows to here and is used in arithmetic, potentially causing an underflow. | examples.cpp:34:26:34:33 | call to rand | Uncontrolled value | -| examples.cpp:37:9:37:12 | data | examples.cpp:34:26:34:33 | call to rand | examples.cpp:37:9:37:12 | data | $@ flows to here and is used in arithmetic, potentially causing an underflow. | examples.cpp:34:26:34:33 | call to rand | Uncontrolled value | -| examples.cpp:37:9:37:12 | data | examples.cpp:34:26:34:33 | call to rand | examples.cpp:37:9:37:12 | data | $@ flows to here and is used in arithmetic, potentially causing an underflow. | examples.cpp:34:26:34:33 | call to rand | Uncontrolled value | -| examples.cpp:37:9:37:12 | data | examples.cpp:34:26:34:33 | call to rand | examples.cpp:37:9:37:12 | data | $@ flows to here and is used in arithmetic, potentially causing an underflow. | examples.cpp:34:26:34:33 | call to rand | Uncontrolled value | -| examples.cpp:37:9:37:12 | data | examples.cpp:34:26:34:33 | call to rand | examples.cpp:37:9:37:12 | data | $@ flows to here and is used in arithmetic, potentially causing an underflow. | examples.cpp:34:26:34:33 | call to rand | Uncontrolled value | -| examples.cpp:37:9:37:12 | data | examples.cpp:34:26:34:33 | call to rand | examples.cpp:37:9:37:12 | data | $@ flows to here and is used in arithmetic, potentially causing an underflow. | examples.cpp:34:26:34:33 | call to rand | Uncontrolled value | -| examples.cpp:37:9:37:12 | data | examples.cpp:34:26:34:33 | call to rand | examples.cpp:37:9:37:12 | data | $@ flows to here and is used in arithmetic, potentially causing an underflow. | examples.cpp:34:26:34:33 | call to rand | Uncontrolled value | +| examples.cpp:25:31:25:34 | data | examples.cpp:22:26:22:33 | (unsigned int)... | examples.cpp:25:31:25:34 | data | $@ flows to here and is used in arithmetic, potentially causing an underflow. | examples.cpp:22:26:22:33 | call to rand | Uncontrolled value | +| examples.cpp:25:31:25:34 | data | examples.cpp:22:26:22:33 | (unsigned int)... | examples.cpp:25:31:25:34 | data | $@ flows to here and is used in arithmetic, potentially causing an underflow. | examples.cpp:22:26:22:33 | call to rand | Uncontrolled value | +| examples.cpp:25:31:25:34 | data | examples.cpp:22:26:22:33 | (unsigned int)... | examples.cpp:25:31:25:34 | data | $@ flows to here and is used in arithmetic, potentially causing an underflow. | examples.cpp:22:26:22:33 | call to rand | Uncontrolled value | +| examples.cpp:25:31:25:34 | data | examples.cpp:22:26:22:33 | (unsigned int)... | examples.cpp:25:31:25:34 | data | $@ flows to here and is used in arithmetic, potentially causing an underflow. | examples.cpp:22:26:22:33 | call to rand | Uncontrolled value | +| examples.cpp:25:31:25:34 | data | examples.cpp:22:26:22:33 | (unsigned int)... | examples.cpp:25:31:25:34 | data | $@ flows to here and is used in arithmetic, potentially causing an underflow. | examples.cpp:22:26:22:33 | call to rand | Uncontrolled value | +| examples.cpp:25:31:25:34 | data | examples.cpp:22:26:22:33 | (unsigned int)... | examples.cpp:25:31:25:34 | data | $@ flows to here and is used in arithmetic, potentially causing an underflow. | examples.cpp:22:26:22:33 | call to rand | Uncontrolled value | +| examples.cpp:25:31:25:34 | data | examples.cpp:22:26:22:33 | call to rand | examples.cpp:25:31:25:34 | data | $@ flows to here and is used in arithmetic, potentially causing an underflow. | examples.cpp:22:26:22:33 | call to rand | Uncontrolled value | +| examples.cpp:25:31:25:34 | data | examples.cpp:22:26:22:33 | call to rand | examples.cpp:25:31:25:34 | data | $@ flows to here and is used in arithmetic, potentially causing an underflow. | examples.cpp:22:26:22:33 | call to rand | Uncontrolled value | +| examples.cpp:25:31:25:34 | data | examples.cpp:22:26:22:33 | call to rand | examples.cpp:25:31:25:34 | data | $@ flows to here and is used in arithmetic, potentially causing an underflow. | examples.cpp:22:26:22:33 | call to rand | Uncontrolled value | +| examples.cpp:25:31:25:34 | data | examples.cpp:22:26:22:33 | call to rand | examples.cpp:25:31:25:34 | data | $@ flows to here and is used in arithmetic, potentially causing an underflow. | examples.cpp:22:26:22:33 | call to rand | Uncontrolled value | +| examples.cpp:25:31:25:34 | data | examples.cpp:22:26:22:33 | call to rand | examples.cpp:25:31:25:34 | data | $@ flows to here and is used in arithmetic, potentially causing an underflow. | examples.cpp:22:26:22:33 | call to rand | Uncontrolled value | +| examples.cpp:25:31:25:34 | data | examples.cpp:22:26:22:33 | call to rand | examples.cpp:25:31:25:34 | data | $@ flows to here and is used in arithmetic, potentially causing an underflow. | examples.cpp:22:26:22:33 | call to rand | Uncontrolled value | +| examples.cpp:38:9:38:12 | data | examples.cpp:35:26:35:33 | (unsigned int)... | examples.cpp:38:9:38:12 | data | $@ flows to here and is used in arithmetic, potentially causing an underflow. | examples.cpp:35:26:35:33 | call to rand | Uncontrolled value | +| examples.cpp:38:9:38:12 | data | examples.cpp:35:26:35:33 | (unsigned int)... | examples.cpp:38:9:38:12 | data | $@ flows to here and is used in arithmetic, potentially causing an underflow. | examples.cpp:35:26:35:33 | call to rand | Uncontrolled value | +| examples.cpp:38:9:38:12 | data | examples.cpp:35:26:35:33 | (unsigned int)... | examples.cpp:38:9:38:12 | data | $@ flows to here and is used in arithmetic, potentially causing an underflow. | examples.cpp:35:26:35:33 | call to rand | Uncontrolled value | +| examples.cpp:38:9:38:12 | data | examples.cpp:35:26:35:33 | (unsigned int)... | examples.cpp:38:9:38:12 | data | $@ flows to here and is used in arithmetic, potentially causing an underflow. | examples.cpp:35:26:35:33 | call to rand | Uncontrolled value | +| examples.cpp:38:9:38:12 | data | examples.cpp:35:26:35:33 | (unsigned int)... | examples.cpp:38:9:38:12 | data | $@ flows to here and is used in arithmetic, potentially causing an underflow. | examples.cpp:35:26:35:33 | call to rand | Uncontrolled value | +| examples.cpp:38:9:38:12 | data | examples.cpp:35:26:35:33 | (unsigned int)... | examples.cpp:38:9:38:12 | data | $@ flows to here and is used in arithmetic, potentially causing an underflow. | examples.cpp:35:26:35:33 | call to rand | Uncontrolled value | +| examples.cpp:38:9:38:12 | data | examples.cpp:35:26:35:33 | call to rand | examples.cpp:38:9:38:12 | data | $@ flows to here and is used in arithmetic, potentially causing an underflow. | examples.cpp:35:26:35:33 | call to rand | Uncontrolled value | +| examples.cpp:38:9:38:12 | data | examples.cpp:35:26:35:33 | call to rand | examples.cpp:38:9:38:12 | data | $@ flows to here and is used in arithmetic, potentially causing an underflow. | examples.cpp:35:26:35:33 | call to rand | Uncontrolled value | +| examples.cpp:38:9:38:12 | data | examples.cpp:35:26:35:33 | call to rand | examples.cpp:38:9:38:12 | data | $@ flows to here and is used in arithmetic, potentially causing an underflow. | examples.cpp:35:26:35:33 | call to rand | Uncontrolled value | +| examples.cpp:38:9:38:12 | data | examples.cpp:35:26:35:33 | call to rand | examples.cpp:38:9:38:12 | data | $@ flows to here and is used in arithmetic, potentially causing an underflow. | examples.cpp:35:26:35:33 | call to rand | Uncontrolled value | +| examples.cpp:38:9:38:12 | data | examples.cpp:35:26:35:33 | call to rand | examples.cpp:38:9:38:12 | data | $@ flows to here and is used in arithmetic, potentially causing an underflow. | examples.cpp:35:26:35:33 | call to rand | Uncontrolled value | +| examples.cpp:38:9:38:12 | data | examples.cpp:35:26:35:33 | call to rand | examples.cpp:38:9:38:12 | data | $@ flows to here and is used in arithmetic, potentially causing an underflow. | examples.cpp:35:26:35:33 | call to rand | Uncontrolled value | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-190/SAMATE/IntegerOverflowTainted.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-190/SAMATE/IntegerOverflowTainted.expected index 9a9a0eba1ab..9d1fa5388ff 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-190/SAMATE/IntegerOverflowTainted.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-190/SAMATE/IntegerOverflowTainted.expected @@ -1 +1 @@ -| examples.cpp:65:9:65:14 | -- ... | $@ flows to here and is used in an expression which might overflow negatively. | examples.cpp:62:26:62:30 | & ... | User-provided value | +| examples.cpp:66:9:66:14 | -- ... | $@ flows to here and is used in an expression which might overflow negatively. | examples.cpp:63:26:63:30 | & ... | User-provided value | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-497/SAMATE/ExposedSystemData.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-497/SAMATE/ExposedSystemData.expected index b16a6cf1beb..ffd6f77205e 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-497/SAMATE/ExposedSystemData.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-497/SAMATE/ExposedSystemData.expected @@ -1 +1 @@ -| tests.c:71:9:71:15 | call to fprintf | This operation exposes system data from $@. | tests.c:55:13:55:22 | call to LogonUserA | call to LogonUserA | +| tests.c:70:9:70:15 | call to fprintf | This operation exposes system data from $@. | tests.c:54:13:54:22 | call to LogonUserA | call to LogonUserA | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-497/SAMATE/OutputWrite.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-497/SAMATE/OutputWrite.expected index 9f2f7d6ee3f..fe7e5b34c77 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-497/SAMATE/OutputWrite.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-497/SAMATE/OutputWrite.expected @@ -1,7 +1,7 @@ -| tests.c:30:9:30:14 | call to printf | tests.c:30:16:30:21 | %s\n | -| tests.c:30:9:30:14 | call to printf | tests.c:30:24:30:27 | line | -| tests.c:44:13:44:21 | call to printLine | tests.c:44:23:44:38 | fgets() failed | -| tests.c:63:13:63:21 | call to printLine | tests.c:63:23:63:52 | User logged in successfully. | -| tests.c:68:13:68:21 | call to printLine | tests.c:68:23:68:40 | Unable to login. | -| tests.c:71:9:71:15 | call to fprintf | tests.c:71:25:71:67 | User attempted access with password: %s\n | -| tests.c:71:9:71:15 | call to fprintf | tests.c:71:70:71:77 | password | +| tests.c:29:9:29:14 | call to printf | tests.c:29:16:29:21 | %s\n | +| tests.c:29:9:29:14 | call to printf | tests.c:29:24:29:27 | line | +| tests.c:43:13:43:21 | call to printLine | tests.c:43:23:43:38 | fgets() failed | +| tests.c:62:13:62:21 | call to printLine | tests.c:62:23:62:52 | User logged in successfully. | +| tests.c:67:13:67:21 | call to printLine | tests.c:67:23:67:40 | Unable to login. | +| tests.c:70:9:70:15 | call to fprintf | tests.c:70:25:70:67 | User attempted access with password: %s\n | +| tests.c:70:9:70:15 | call to fprintf | tests.c:70:70:70:77 | password | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-772/SAMATE/FileNeverClosed.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-772/SAMATE/FileNeverClosed.expected index a0c7281a6f4..c328cee7ec9 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-772/SAMATE/FileNeverClosed.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-772/SAMATE/FileNeverClosed.expected @@ -1,3 +1,3 @@ -| tests.cpp:223:12:223:16 | call to fopen | The file is never closed | -| tests.cpp:255:12:255:15 | call to open | The file is never closed | -| tests.cpp:281:12:281:21 | call to CreateFile | The file is never closed | +| tests.cpp:220:12:220:16 | call to fopen | The file is never closed | +| tests.cpp:252:12:252:15 | call to open | The file is never closed | +| tests.cpp:278:12:278:21 | call to CreateFile | The file is never closed | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-772/SAMATE/MemoryMayNotBeFreed.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-772/SAMATE/MemoryMayNotBeFreed.expected index b3d74dbf808..11a19a071d0 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-772/SAMATE/MemoryMayNotBeFreed.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-772/SAMATE/MemoryMayNotBeFreed.expected @@ -1,2 +1,2 @@ -| tests.cpp:201:31:201:36 | call to malloc | The memory allocated here may not be released at $@. | tests.cpp:215:1:215:1 | return ... | this exit point | -| tests.cpp:328:5:328:68 | ... = ... | The memory allocated here may not be released at $@. | tests.cpp:336:1:336:1 | return ... | this exit point | +| tests.cpp:198:31:198:36 | call to malloc | The memory allocated here may not be released at $@. | tests.cpp:212:1:212:1 | return ... | this exit point | +| tests.cpp:325:5:325:68 | ... = ... | The memory allocated here may not be released at $@. | tests.cpp:333:1:333:1 | return ... | this exit point | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-772/SAMATE/MemoryNeverFreed.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-772/SAMATE/MemoryNeverFreed.expected index 21657b90ace..087186d9dc6 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-772/SAMATE/MemoryNeverFreed.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-772/SAMATE/MemoryNeverFreed.expected @@ -1,2 +1,2 @@ -| tests.cpp:74:20:74:26 | new | This memory is never freed | -| tests.cpp:139:24:139:29 | call to malloc | This memory is never freed | +| tests.cpp:71:20:71:26 | new | This memory is never freed | +| tests.cpp:136:24:136:29 | call to malloc | This memory is never freed | From 8c37e90a7776b3561c025c482e2527a74dd44af1 Mon Sep 17 00:00:00 2001 From: james Date: Fri, 3 Sep 2021 09:31:54 +0100 Subject: [PATCH 160/741] revert a couple of changes --- .../debugging-data-flow-queries-using-partial-flow.rst | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/codeql/writing-codeql-queries/debugging-data-flow-queries-using-partial-flow.rst b/docs/codeql/writing-codeql-queries/debugging-data-flow-queries-using-partial-flow.rst index b661a68fcd1..05a12ad98ee 100644 --- a/docs/codeql/writing-codeql-queries/debugging-data-flow-queries-using-partial-flow.rst +++ b/docs/codeql/writing-codeql-queries/debugging-data-flow-queries-using-partial-flow.rst @@ -38,7 +38,7 @@ You can try to debug the potential problem by following the steps described belo Checking sources and sinks -------------------------- -Initially, you should make sure that the ``source`` and ``sink`` definitions contain what you expect. If either the ``source`` or ``sink`` is empty then there can never be any data flow. The easiest way to check this is using quick evaluation in CodeQL for VS Code. Select the text ``node instanceof MySource``, right-click, and choose "CodeQL: Quick Evaluation". This will evaluate the highlighted text, which in this case means the set of sources. For more information, see :ref:`Analyzing your projects ` in the CodeQL for VS Code help. +Initially, you should make sure that the source and sink definitions contain what you expect. If either the source or sink is empty then there can never be any data flow. The easiest way to check this is using quick evaluation in CodeQL for VS Code. Select the text ``node instanceof MySource``, right-click, and choose "CodeQL: Quick Evaluation". This will evaluate the highlighted text, which in this case means the set of sources. For more information, see :ref:`Analyzing your projects ` in the CodeQL for VS Code help. If both source and sink definitions look good then we will need to look for missing flow steps. @@ -56,7 +56,7 @@ If there are still no results and performance is still useable, then it is best Partial flow ------------ -A naive next step could be to change the ``sink`` definition to ``any()``. This would mean that we would get a lot of flow to all the places that are reachable from the ``source``\ s. While this approach may work in some cases, you might find that it produces so many results that it's very hard to explore the findings. It can can also dramatically affect query performance. More importantly, you might not even see all the partial flow paths. This is because the data-flow library tries very hard to prune impossible paths and, since field stores and reads must be evenly matched along a path, we will never see paths going through a store that fail to reach a corresponding read. This can make it hard to see where flow actually stops. +A naive next step could be to change the sink definition to ``any()``. This would mean that we would get a lot of flow to all the places that are reachable from the sources. While this approach may work in some cases, you might find that it produces so many results that it's very hard to explore the findings. It can can also dramatically affect query performance. More importantly, you might not even see all the partial flow paths. This is because the data-flow library tries very hard to prune impossible paths and, since field stores and reads must be evenly matched along a path, we will never see paths going through a store that fail to reach a corresponding read. This can make it hard to see where flow actually stops. To avoid these problems, a data-flow ``Configuration`` comes with a mechanism for exploring partial flow that tries to deal with these caveats. This is the ``Configuration.hasPartialFlow`` predicate: @@ -87,7 +87,7 @@ As noted in the documentation for ``hasPartialFlow`` (for example, in the `CodeQ This defines the exploration radius within which ``hasPartialFlow`` returns results. -It is also useful to focus on a single ``source`` at a time as the starting point for the flow exploration. This is most easily done by adding a temporary restriction in the ``isSource`` predicate. +It is also useful to focus on a single source at a time as the starting point for the flow exploration. This is most easily done by adding a temporary restriction in the ``isSource`` predicate. To do quick evaluations of partial flow it is often easiest to add a predicate to the query that is solely intended for quick evaluation (right-click the predicate name and choose "CodeQL: Quick Evaluation"). A good starting point is something like: @@ -101,12 +101,12 @@ To do quick evaluations of partial flow it is often easiest to add a predicate t ) } -If you are focusing on a single ``source`` then the ``src`` column is meaningless. You may of course also add other columns of interest based on ``n``, but including the enclosing callable and the distance to the source at the very least is generally recommended, as they can be useful columns to sort on to better inspect the results. +If you are focusing on a single source then the ``src`` column is superfluous. You may of course also add other columns of interest based on ``n``, but including the enclosing callable and the distance to the source at the very least is generally recommended, as they can be useful columns to sort on to better inspect the results. If you see a large number of partial flow results, you can focus them in a couple of ways: -- If flow travels a long distance following an expected path, that can result in a lot of uninteresting flow being included in the exploration radius. To reduce the amount of uninteresting flow, you can replace the ``source`` definition with a suitable ``node`` that appears along the path and restart the partial flow exploration from that point. +- If flow travels a long distance following an expected path, that can result in a lot of uninteresting flow being included in the exploration radius. To reduce the amount of uninteresting flow, you can replace the source definition with a suitable ``node`` that appears along the path and restart the partial flow exploration from that point. - Creative use of barriers and sanitizers can be used to cut off flow paths that are uninteresting. This also reduces the number of partial flow results to explore while debugging. Further reading From 6ede08e3c95ae5c09fbd2cd28e3bc0d86c3d13fb Mon Sep 17 00:00:00 2001 From: Benjamin Muskalla Date: Fri, 3 Sep 2021 10:53:24 +0200 Subject: [PATCH 161/741] Remove dead code --- java/ql/src/Telemetry/ExternalLibraryUsage.ql | 1 - 1 file changed, 1 deletion(-) diff --git a/java/ql/src/Telemetry/ExternalLibraryUsage.ql b/java/ql/src/Telemetry/ExternalLibraryUsage.ql index 58af3d8c8af..814f25bac2b 100644 --- a/java/ql/src/Telemetry/ExternalLibraryUsage.ql +++ b/java/ql/src/Telemetry/ExternalLibraryUsage.ql @@ -11,7 +11,6 @@ import ExternalAPI from int Usages, string jarname where - jarname = any(ExternalAPI api).jarContainer() and Usages = strictcount(Call c, ExternalAPI a | c.getCallee() = a and From 2edb32f3447dd060bf5f986e3ff05311bf5947ad Mon Sep 17 00:00:00 2001 From: Benjamin Muskalla Date: Fri, 3 Sep 2021 10:59:35 +0200 Subject: [PATCH 162/741] Fix naming --- java/ql/src/Telemetry/ExternalAPI.qll | 2 +- java/ql/src/Telemetry/ExternalLibraryUsage.ql | 6 +++--- java/ql/src/Telemetry/SupportedExternalSinks.ql | 2 +- java/ql/src/Telemetry/SupportedExternalSources.ql | 2 +- java/ql/src/Telemetry/SupportedExternalTaint.ql | 2 +- java/ql/src/Telemetry/UnsupportedExternalAPIs.ql | 2 +- 6 files changed, 8 insertions(+), 8 deletions(-) diff --git a/java/ql/src/Telemetry/ExternalAPI.qll b/java/ql/src/Telemetry/ExternalAPI.qll index 89bf49c2d07..71b76cd56b2 100644 --- a/java/ql/src/Telemetry/ExternalAPI.qll +++ b/java/ql/src/Telemetry/ExternalAPI.qll @@ -16,7 +16,7 @@ class ExternalAPI extends Callable { /** * Gets information about the external API in the form expected by the CSV modeling framework. */ - string asCSV(ExternalAPI api) { + string asCsv(ExternalAPI api) { result = api.getDeclaringType().getPackage() + ";?;" + api.getDeclaringType().getSourceDeclaration() + ";" + api.getName() + ";" + paramsString(api) diff --git a/java/ql/src/Telemetry/ExternalLibraryUsage.ql b/java/ql/src/Telemetry/ExternalLibraryUsage.ql index 814f25bac2b..a5785e16917 100644 --- a/java/ql/src/Telemetry/ExternalLibraryUsage.ql +++ b/java/ql/src/Telemetry/ExternalLibraryUsage.ql @@ -9,13 +9,13 @@ import java import ExternalAPI -from int Usages, string jarname +from int usages, string jarname where - Usages = + usages = strictcount(Call c, ExternalAPI a | c.getCallee() = a and not c.getFile() instanceof GeneratedFile and a.jarContainer() = jarname and not a.isTestLibrary() ) -select jarname, Usages order by Usages desc +select jarname, usages order by usages desc diff --git a/java/ql/src/Telemetry/SupportedExternalSinks.ql b/java/ql/src/Telemetry/SupportedExternalSinks.ql index adebe3f4533..a3d96c82ca9 100644 --- a/java/ql/src/Telemetry/SupportedExternalSinks.ql +++ b/java/ql/src/Telemetry/SupportedExternalSinks.ql @@ -15,7 +15,7 @@ from ExternalAPI api where not api.isTestLibrary() and supportKind(api) = "sink" -select api.asCSV(api) as csv, +select api.asCsv(api) as csv, strictcount(Call c | c.getCallee() = api and not c.getFile() instanceof GeneratedFile diff --git a/java/ql/src/Telemetry/SupportedExternalSources.ql b/java/ql/src/Telemetry/SupportedExternalSources.ql index d8fd21b8440..e5ff28d25a3 100644 --- a/java/ql/src/Telemetry/SupportedExternalSources.ql +++ b/java/ql/src/Telemetry/SupportedExternalSources.ql @@ -15,7 +15,7 @@ from ExternalAPI api where not api.isTestLibrary() and supportKind(api) = "source" -select api.asCSV(api) as csv, +select api.asCsv(api) as csv, strictcount(Call c | c.getCallee() = api and not c.getFile() instanceof GeneratedFile diff --git a/java/ql/src/Telemetry/SupportedExternalTaint.ql b/java/ql/src/Telemetry/SupportedExternalTaint.ql index a9da59823ad..046aa46d53d 100644 --- a/java/ql/src/Telemetry/SupportedExternalTaint.ql +++ b/java/ql/src/Telemetry/SupportedExternalTaint.ql @@ -15,7 +15,7 @@ from ExternalAPI api where not api.isTestLibrary() and supportKind(api) = ["summary", "taint-preserving"] -select api.asCSV(api) as csv, +select api.asCsv(api) as csv, strictcount(Call c | c.getCallee() = api and not c.getFile() instanceof GeneratedFile diff --git a/java/ql/src/Telemetry/UnsupportedExternalAPIs.ql b/java/ql/src/Telemetry/UnsupportedExternalAPIs.ql index 4a97e139a81..5f14c7aeab8 100644 --- a/java/ql/src/Telemetry/UnsupportedExternalAPIs.ql +++ b/java/ql/src/Telemetry/UnsupportedExternalAPIs.ql @@ -15,7 +15,7 @@ from ExternalAPI api where not api.isTestLibrary() and not api.isSupported() -select api.asCSV(api) as csv, +select api.asCsv(api) as csv, strictcount(Call c | c.getCallee() = api and not c.getFile() instanceof GeneratedFile From d2f833d02cdb38f19cce3452eab1af8e7f712815 Mon Sep 17 00:00:00 2001 From: Philip Ginsbach Date: Fri, 3 Sep 2021 10:13:12 +0100 Subject: [PATCH 163/741] deep implications => implications --- docs/codeql/ql-language-reference/types.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/codeql/ql-language-reference/types.rst b/docs/codeql/ql-language-reference/types.rst index 1216454bcf2..6c0ea6cc7fe 100644 --- a/docs/codeql/ql-language-reference/types.rst +++ b/docs/codeql/ql-language-reference/types.rst @@ -407,7 +407,7 @@ results in a compile time error. Note from the example that it is still possible methods from instanceof supertypes from within the specialising class with the `super` keyword. Crucially, the base class methods are not just hidden. The extension relationship is severed. -This has deep implications on method resolution when complex class hierarchies are involved. +This has implications on method resolution when complex class hierarchies are involved. The following example demonstrates this. .. code-block:: ql From abaa0633d7e17b71883ce810d56fb5b7c149effd Mon Sep 17 00:00:00 2001 From: Philip Ginsbach Date: Fri, 3 Sep 2021 10:20:14 +0100 Subject: [PATCH 164/741] consistently distinguish base types and supertypes --- docs/codeql/ql-language-reference/types.rst | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/codeql/ql-language-reference/types.rst b/docs/codeql/ql-language-reference/types.rst index 6c0ea6cc7fe..30c028f0a0c 100644 --- a/docs/codeql/ql-language-reference/types.rst +++ b/docs/codeql/ql-language-reference/types.rst @@ -78,7 +78,7 @@ To define a class, you write: #. The keyword ``class``. #. The name of the class. This is an `identifier `_ starting with an uppercase letter. -#. The base types that the class is derived from via `extends` and/or `instanceof` +#. The supertypes that the class is derived from via `extends` and/or `instanceof` #. The :ref:`body of the class `, enclosed in braces. For example: @@ -106,10 +106,10 @@ This defines a class ``OneTwoThree``, which contains the values ``1``, ``2``, an .. index:: extends ``OneTwoThree`` extends ``int``, that is, it is a subtype of ``int``. A class in QL must always -extend at least one existing type. Those types are called the **base types** of the class. The -values of a class are contained within the intersection of the base types (that is, they are in -the :ref:`class domain type `). A class inherits all member predicates from its -base types. +have at least one supertype. Supertypes that are referenced with the `extends` keyword are called +the **base types** of the class. The values of a class are contained within the intersection of +the supertypes (that is, they are in the :ref:`class domain type `). +A class inherits all member predicates from its base types. A class can extend multiple types. For more information, see ":ref:`multiple-inheritance`." Classes can also specialise other types without extending the class interface via `instanceof`, @@ -230,7 +230,7 @@ Concrete classes The classes in the above examples are all **concrete** classes. They are defined by restricting the values in a larger type. The values in a concrete class are precisely those -values in the intersection of the base types that also satisfy the +values in the intersection of the supertypes that also satisfy the :ref:`characteristic predicate ` of the class. .. _abstract-classes: From 6e025186aba8da3f95fb9c727714d2eebb9088ff Mon Sep 17 00:00:00 2001 From: Philip Ginsbach Date: Fri, 3 Sep 2021 10:23:58 +0100 Subject: [PATCH 165/741] make clear that instanceof supertypes are not base types --- docs/codeql/ql-language-reference/types.rst | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/codeql/ql-language-reference/types.rst b/docs/codeql/ql-language-reference/types.rst index 30c028f0a0c..751e56d7d24 100644 --- a/docs/codeql/ql-language-reference/types.rst +++ b/docs/codeql/ql-language-reference/types.rst @@ -406,7 +406,9 @@ However, `foo_method` is not exposed in `Bar`, so the query `select any(Bar b).f results in a compile time error. Note from the example that it is still possible to access methods from instanceof supertypes from within the specialising class with the `super` keyword. -Crucially, the base class methods are not just hidden. The extension relationship is severed. +Crucially, the instanceof **supertypes** are not **base types**. +This means that these supertypes do not participate in overriding, and any fields of such +supertypes are not part of the new class. This has implications on method resolution when complex class hierarchies are involved. The following example demonstrates this. From 89ce04dcb943f3e0ebc2e06fc63067bf14ec5a67 Mon Sep 17 00:00:00 2001 From: Benjamin Muskalla Date: Fri, 3 Sep 2021 11:25:59 +0200 Subject: [PATCH 166/741] Pull usage count into where clause --- java/ql/src/Telemetry/SupportedExternalSources.ql | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/java/ql/src/Telemetry/SupportedExternalSources.ql b/java/ql/src/Telemetry/SupportedExternalSources.ql index e5ff28d25a3..48208f69adb 100644 --- a/java/ql/src/Telemetry/SupportedExternalSources.ql +++ b/java/ql/src/Telemetry/SupportedExternalSources.ql @@ -11,12 +11,13 @@ import APIUsage import ExternalAPI import semmle.code.java.GeneratedFiles -from ExternalAPI api +from ExternalAPI api, int usages where not api.isTestLibrary() and - supportKind(api) = "source" -select api.asCsv(api) as csv, - strictcount(Call c | - c.getCallee() = api and - not c.getFile() instanceof GeneratedFile - ) as Usages order by Usages desc + supportKind(api) = "source" and + usages = + strictcount(Call c | + c.getCallee() = api and + not c.getFile() instanceof GeneratedFile + ) +select api.asCsv(api) as csv, usages order by usages desc From 7d3131ca497f03765c1e587d7eab2c80e80dc8e4 Mon Sep 17 00:00:00 2001 From: Benjamin Muskalla Date: Fri, 3 Sep 2021 11:32:14 +0200 Subject: [PATCH 167/741] Move usage count into where clause --- java/ql/src/Telemetry/ExternalAPI.qll | 4 ++-- java/ql/src/Telemetry/SupportedExternalSinks.ql | 15 ++++++++------- java/ql/src/Telemetry/SupportedExternalSources.ql | 2 +- java/ql/src/Telemetry/SupportedExternalTaint.ql | 15 ++++++++------- java/ql/src/Telemetry/UnsupportedExternalAPIs.ql | 15 ++++++++------- 5 files changed, 27 insertions(+), 24 deletions(-) diff --git a/java/ql/src/Telemetry/ExternalAPI.qll b/java/ql/src/Telemetry/ExternalAPI.qll index 71b76cd56b2..3fee012ee6f 100644 --- a/java/ql/src/Telemetry/ExternalAPI.qll +++ b/java/ql/src/Telemetry/ExternalAPI.qll @@ -10,7 +10,7 @@ private import semmle.code.java.dataflow.ExternalFlow class ExternalAPI extends Callable { ExternalAPI() { not this.fromSource() } - /** Holds true if this API is part of a common testing library or framework */ + /** Holds if this API is part of a common testing library or framework */ predicate isTestLibrary() { getDeclaringType() instanceof TestLibrary } /** @@ -22,7 +22,7 @@ class ExternalAPI extends Callable { ";" + api.getName() + ";" + paramsString(api) } - /** Holds true if this API is not yet supported by existing CodeQL libraries */ + /** Holds if this API is not yet supported by existing CodeQL libraries */ predicate isSupported() { not supportKind(this) = "?" } /** diff --git a/java/ql/src/Telemetry/SupportedExternalSinks.ql b/java/ql/src/Telemetry/SupportedExternalSinks.ql index a3d96c82ca9..51778acb4d1 100644 --- a/java/ql/src/Telemetry/SupportedExternalSinks.ql +++ b/java/ql/src/Telemetry/SupportedExternalSinks.ql @@ -11,12 +11,13 @@ import APIUsage import ExternalAPI import semmle.code.java.GeneratedFiles -from ExternalAPI api +from ExternalAPI api, int usages where not api.isTestLibrary() and - supportKind(api) = "sink" -select api.asCsv(api) as csv, - strictcount(Call c | - c.getCallee() = api and - not c.getFile() instanceof GeneratedFile - ) as Usages order by Usages desc + supportKind(api) = "sink" and + usages = + strictcount(Call c | + c.getCallee().getSourceDeclaration() = api and + not c.getFile() instanceof GeneratedFile + ) +select api.asCsv(api) as csv, usages order by usages desc diff --git a/java/ql/src/Telemetry/SupportedExternalSources.ql b/java/ql/src/Telemetry/SupportedExternalSources.ql index 48208f69adb..7bb76e57602 100644 --- a/java/ql/src/Telemetry/SupportedExternalSources.ql +++ b/java/ql/src/Telemetry/SupportedExternalSources.ql @@ -17,7 +17,7 @@ where supportKind(api) = "source" and usages = strictcount(Call c | - c.getCallee() = api and + c.getCallee().getSourceDeclaration() = api and not c.getFile() instanceof GeneratedFile ) select api.asCsv(api) as csv, usages order by usages desc diff --git a/java/ql/src/Telemetry/SupportedExternalTaint.ql b/java/ql/src/Telemetry/SupportedExternalTaint.ql index 046aa46d53d..8de007ace9f 100644 --- a/java/ql/src/Telemetry/SupportedExternalTaint.ql +++ b/java/ql/src/Telemetry/SupportedExternalTaint.ql @@ -11,12 +11,13 @@ import APIUsage import ExternalAPI import semmle.code.java.GeneratedFiles -from ExternalAPI api +from ExternalAPI api, int usages where not api.isTestLibrary() and - supportKind(api) = ["summary", "taint-preserving"] -select api.asCsv(api) as csv, - strictcount(Call c | - c.getCallee() = api and - not c.getFile() instanceof GeneratedFile - ) as Usages order by Usages desc + supportKind(api) = ["summary", "taint-preserving"] and + usages = + strictcount(Call c | + c.getCallee().getSourceDeclaration() = api and + not c.getFile() instanceof GeneratedFile + ) +select api.asCsv(api) as csv, usages order by usages desc diff --git a/java/ql/src/Telemetry/UnsupportedExternalAPIs.ql b/java/ql/src/Telemetry/UnsupportedExternalAPIs.ql index 5f14c7aeab8..cf484929752 100644 --- a/java/ql/src/Telemetry/UnsupportedExternalAPIs.ql +++ b/java/ql/src/Telemetry/UnsupportedExternalAPIs.ql @@ -11,12 +11,13 @@ import APIUsage import ExternalAPI import semmle.code.java.GeneratedFiles -from ExternalAPI api +from ExternalAPI api, int usages where not api.isTestLibrary() and - not api.isSupported() -select api.asCsv(api) as csv, - strictcount(Call c | - c.getCallee() = api and - not c.getFile() instanceof GeneratedFile - ) as Usages order by Usages desc + not api.isSupported() and + usages = + strictcount(Call c | + c.getCallee().getSourceDeclaration() = api and + not c.getFile() instanceof GeneratedFile + ) +select api.asCsv(api) as csv, usages order by usages desc From 4b02e266fd7fe09883a27cf7251ec66651eb092c Mon Sep 17 00:00:00 2001 From: Benjamin Muskalla Date: Fri, 3 Sep 2021 11:37:39 +0200 Subject: [PATCH 168/741] Fix test as we support explicit collection types --- .../UnsupportedExternalAPIs/UnsupportedExternalAPIs.expected | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/java/ql/test/query-tests/Telemetry/UnsupportedExternalAPIs/UnsupportedExternalAPIs.expected b/java/ql/test/query-tests/Telemetry/UnsupportedExternalAPIs/UnsupportedExternalAPIs.expected index 22cac276be6..89637424297 100644 --- a/java/ql/test/query-tests/Telemetry/UnsupportedExternalAPIs/UnsupportedExternalAPIs.expected +++ b/java/ql/test/query-tests/Telemetry/UnsupportedExternalAPIs/UnsupportedExternalAPIs.expected @@ -1,6 +1,4 @@ | java.io;?;PrintStream;println;(Object) | 3 | | java.lang;?;Object;Object;() | 2 | | java.lang;?;String;length;() | 1 | -| java.time;?;Duration;ofMillis;(long) | 1 | -| java.util;?;ArrayList;ArrayList<>;() | 1 | -| java.util;?;HashMap;HashMap;() | 1 | +| java.time;?;Duration;ofMillis;(long) | 1 | \ No newline at end of file From 35b0e833708080d736fa77db2e2814f581cf8ca5 Mon Sep 17 00:00:00 2001 From: Philip Ginsbach Date: Fri, 3 Sep 2021 10:52:05 +0100 Subject: [PATCH 169/741] simpler first instanceof extension example --- docs/codeql/ql-language-reference/types.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/codeql/ql-language-reference/types.rst b/docs/codeql/ql-language-reference/types.rst index 751e56d7d24..9d3984b5f5e 100644 --- a/docs/codeql/ql-language-reference/types.rst +++ b/docs/codeql/ql-language-reference/types.rst @@ -397,8 +397,8 @@ Besides extending base types, classes can also declare `instanceof` relationship string foo_method() { result = "foo" } } - class Bar extends int instanceof Foo { - string bar_method() { result = super.foo_method() } + class Bar instanceof Foo { + string toString() { result = super.foo_method() } } In this example, the characteristic predicate from `Foo` also applies to `Bar`. From 9ed14b438e0b86bc4e4c2f0b3429dee4afa00a6c Mon Sep 17 00:00:00 2001 From: Benjamin Muskalla Date: Fri, 3 Sep 2021 11:53:18 +0200 Subject: [PATCH 170/741] Use readble format for APIs --- java/ql/src/Telemetry/ExternalAPI.qll | 6 +++--- java/ql/src/Telemetry/SupportedExternalSinks.ql | 2 +- java/ql/src/Telemetry/SupportedExternalSources.ql | 2 +- java/ql/src/Telemetry/SupportedExternalTaint.ql | 2 +- java/ql/src/Telemetry/UnsupportedExternalAPIs.ql | 2 +- .../SupportedExternalSinks.expected | 4 ++-- .../SupportedExternalSources.expected | 2 +- .../SupportedExternalTaint.expected | 4 ++-- .../UnsupportedExternalAPIs.expected | 8 ++++---- 9 files changed, 16 insertions(+), 16 deletions(-) diff --git a/java/ql/src/Telemetry/ExternalAPI.qll b/java/ql/src/Telemetry/ExternalAPI.qll index 3fee012ee6f..bf3630e7358 100644 --- a/java/ql/src/Telemetry/ExternalAPI.qll +++ b/java/ql/src/Telemetry/ExternalAPI.qll @@ -16,10 +16,10 @@ class ExternalAPI extends Callable { /** * Gets information about the external API in the form expected by the CSV modeling framework. */ - string asCsv(ExternalAPI api) { + string asHumanReadbleString(ExternalAPI api) { result = - api.getDeclaringType().getPackage() + ";?;" + api.getDeclaringType().getSourceDeclaration() + - ";" + api.getName() + ";" + paramsString(api) + api.getDeclaringType().getPackage() + "." + api.getDeclaringType().getSourceDeclaration() + + "#" + api.getName() + paramsString(api) } /** Holds if this API is not yet supported by existing CodeQL libraries */ diff --git a/java/ql/src/Telemetry/SupportedExternalSinks.ql b/java/ql/src/Telemetry/SupportedExternalSinks.ql index 51778acb4d1..7b8dffc392c 100644 --- a/java/ql/src/Telemetry/SupportedExternalSinks.ql +++ b/java/ql/src/Telemetry/SupportedExternalSinks.ql @@ -20,4 +20,4 @@ where c.getCallee().getSourceDeclaration() = api and not c.getFile() instanceof GeneratedFile ) -select api.asCsv(api) as csv, usages order by usages desc +select api.asHumanReadbleString(api) as apiname, usages order by usages desc diff --git a/java/ql/src/Telemetry/SupportedExternalSources.ql b/java/ql/src/Telemetry/SupportedExternalSources.ql index 7bb76e57602..2c039bdbece 100644 --- a/java/ql/src/Telemetry/SupportedExternalSources.ql +++ b/java/ql/src/Telemetry/SupportedExternalSources.ql @@ -20,4 +20,4 @@ where c.getCallee().getSourceDeclaration() = api and not c.getFile() instanceof GeneratedFile ) -select api.asCsv(api) as csv, usages order by usages desc +select api.asHumanReadbleString(api) as apiname, usages order by usages desc diff --git a/java/ql/src/Telemetry/SupportedExternalTaint.ql b/java/ql/src/Telemetry/SupportedExternalTaint.ql index 8de007ace9f..d89deacf724 100644 --- a/java/ql/src/Telemetry/SupportedExternalTaint.ql +++ b/java/ql/src/Telemetry/SupportedExternalTaint.ql @@ -20,4 +20,4 @@ where c.getCallee().getSourceDeclaration() = api and not c.getFile() instanceof GeneratedFile ) -select api.asCsv(api) as csv, usages order by usages desc +select api.asHumanReadbleString(api) as apiname, usages order by usages desc diff --git a/java/ql/src/Telemetry/UnsupportedExternalAPIs.ql b/java/ql/src/Telemetry/UnsupportedExternalAPIs.ql index cf484929752..c79bed20fe9 100644 --- a/java/ql/src/Telemetry/UnsupportedExternalAPIs.ql +++ b/java/ql/src/Telemetry/UnsupportedExternalAPIs.ql @@ -20,4 +20,4 @@ where c.getCallee().getSourceDeclaration() = api and not c.getFile() instanceof GeneratedFile ) -select api.asCsv(api) as csv, usages order by usages desc +select api.asHumanReadbleString(api) as apiname, usages order by usages desc diff --git a/java/ql/test/query-tests/Telemetry/SupportedExternalSinks/SupportedExternalSinks.expected b/java/ql/test/query-tests/Telemetry/SupportedExternalSinks/SupportedExternalSinks.expected index 3d595aa5353..6cb849601d5 100644 --- a/java/ql/test/query-tests/Telemetry/SupportedExternalSinks/SupportedExternalSinks.expected +++ b/java/ql/test/query-tests/Telemetry/SupportedExternalSinks/SupportedExternalSinks.expected @@ -1,2 +1,2 @@ -| java.io;?;FileWriter;FileWriter;(File) | 1 | -| java.net;?;URL;openStream;() | 1 | +| java.io.FileWriter#FileWriter(File) | 1 | +| java.net.URL#openStream() | 1 | diff --git a/java/ql/test/query-tests/Telemetry/SupportedExternalSources/SupportedExternalSources.expected b/java/ql/test/query-tests/Telemetry/SupportedExternalSources/SupportedExternalSources.expected index 26d2efed5e5..f83e018ea72 100644 --- a/java/ql/test/query-tests/Telemetry/SupportedExternalSources/SupportedExternalSources.expected +++ b/java/ql/test/query-tests/Telemetry/SupportedExternalSources/SupportedExternalSources.expected @@ -1 +1 @@ -| java.net;?;URLConnection;getInputStream;() | 1 | +| java.net.URLConnection#getInputStream() | 1 | \ No newline at end of file diff --git a/java/ql/test/query-tests/Telemetry/SupportedExternalTaint/SupportedExternalTaint.expected b/java/ql/test/query-tests/Telemetry/SupportedExternalTaint/SupportedExternalTaint.expected index 18be8556005..54f26d49a98 100644 --- a/java/ql/test/query-tests/Telemetry/SupportedExternalTaint/SupportedExternalTaint.expected +++ b/java/ql/test/query-tests/Telemetry/SupportedExternalTaint/SupportedExternalTaint.expected @@ -1,2 +1,2 @@ -| java.lang;?;StringBuilder;append;(String) | 1 | -| java.lang;?;StringBuilder;toString;() | 1 | +| java.lang.StringBuilder#append(String) | 1 | +| java.lang.StringBuilder#toString() | 1 | diff --git a/java/ql/test/query-tests/Telemetry/UnsupportedExternalAPIs/UnsupportedExternalAPIs.expected b/java/ql/test/query-tests/Telemetry/UnsupportedExternalAPIs/UnsupportedExternalAPIs.expected index 89637424297..e89dc4ba532 100644 --- a/java/ql/test/query-tests/Telemetry/UnsupportedExternalAPIs/UnsupportedExternalAPIs.expected +++ b/java/ql/test/query-tests/Telemetry/UnsupportedExternalAPIs/UnsupportedExternalAPIs.expected @@ -1,4 +1,4 @@ -| java.io;?;PrintStream;println;(Object) | 3 | -| java.lang;?;Object;Object;() | 2 | -| java.lang;?;String;length;() | 1 | -| java.time;?;Duration;ofMillis;(long) | 1 | \ No newline at end of file +| java.io.PrintStream#println(Object) | 3 | +| java.lang.Object#Object() | 2 | +| java.lang.String#length() | 1 | +| java.time.Duration#ofMillis(long) | 1 | From cd646c819dc7e4349f90fe75c4e91f74b764f5d1 Mon Sep 17 00:00:00 2001 From: Philip Ginsbach Date: Fri, 3 Sep 2021 10:55:03 +0100 Subject: [PATCH 171/741] explain instanceof extensions via charpred instanceof --- docs/codeql/ql-language-reference/types.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/codeql/ql-language-reference/types.rst b/docs/codeql/ql-language-reference/types.rst index 9d3984b5f5e..ddbd1bc04c4 100644 --- a/docs/codeql/ql-language-reference/types.rst +++ b/docs/codeql/ql-language-reference/types.rst @@ -388,6 +388,8 @@ Non-extending subtypes ====================== Besides extending base types, classes can also declare `instanceof` relationships with other types. +Declaring a class as `instanceof Foo` is roughly equivalent to saying `this instanceof Foo` the charpred. +The main differences are that you can call methods on Bar via `super` and you can get better optimisation. .. code-block:: ql From ab5c1d6bddd0a9a15b44bad4a4d8350ca707762c Mon Sep 17 00:00:00 2001 From: Benjamin Muskalla Date: Fri, 3 Sep 2021 13:38:01 +0200 Subject: [PATCH 172/741] Rework filter to exclude simple constructors --- java/ql/src/Telemetry/APIUsage.qll | 48 ----------------- java/ql/src/Telemetry/ExternalAPI.qll | 53 +++++++++++++++++-- java/ql/src/Telemetry/ExternalLibraryUsage.ql | 2 +- .../src/Telemetry/SupportedExternalSinks.ql | 5 +- .../src/Telemetry/SupportedExternalSources.ql | 5 +- .../src/Telemetry/SupportedExternalTaint.ql | 5 +- .../src/Telemetry/UnsupportedExternalAPIs.ql | 3 +- .../ExternalLibraryUsage.expected | 2 +- .../UnsupportedExternalAPIs.expected | 1 - 9 files changed, 57 insertions(+), 67 deletions(-) delete mode 100644 java/ql/src/Telemetry/APIUsage.qll diff --git a/java/ql/src/Telemetry/APIUsage.qll b/java/ql/src/Telemetry/APIUsage.qll deleted file mode 100644 index 23d7a6ad49f..00000000000 --- a/java/ql/src/Telemetry/APIUsage.qll +++ /dev/null @@ -1,48 +0,0 @@ -/** Provides classes and predicates related to support coverage of external libraries. */ - -import java -private import semmle.code.java.dataflow.FlowSources - -/** - * Gets the coverage support for the given `Callable`. If the `Callable` is not supported, returns "?". - */ -string supportKind(Callable api) { - if api instanceof TaintPreservingCallable - then result = "taint-preserving" - else - if summaryCall(api) - then result = "summary" - else - if sink(api) - then result = "sink" - else - if source(api) - then result = "source" - else result = "?" -} - -private predicate summaryCall(Callable api) { - summaryModel(packageName(api), typeName(api), _, api.getName(), _, _, _, _, _) -} - -private predicate sink(Callable api) { - sinkModel(packageName(api), typeName(api), _, api.getName(), _, _, _, _) -} - -private predicate source(Callable api) { - sourceModel(packageName(api), typeName(api), _, api.getName(), _, _, _, _) - or - exists(Call call, DataFlow::Node arg | - call.getCallee() = api and - [call.getAnArgument(), call.getQualifier()] = arg.asExpr() and - arg instanceof RemoteFlowSource - ) -} - -private string packageName(Callable api) { - result = api.getCompilationUnit().getPackage().toString() -} - -private string typeName(Callable api) { - result = api.getDeclaringType().getAnAncestor().getSourceDeclaration().toString() -} diff --git a/java/ql/src/Telemetry/ExternalAPI.qll b/java/ql/src/Telemetry/ExternalAPI.qll index bf3630e7358..23c61b01236 100644 --- a/java/ql/src/Telemetry/ExternalAPI.qll +++ b/java/ql/src/Telemetry/ExternalAPI.qll @@ -1,8 +1,13 @@ /** Provides classes and predicates related to handling APIs from external libraries. */ private import java -private import APIUsage +private import semmle.code.java.dataflow.DataFlow +private import semmle.code.java.dataflow.DataFlow private import semmle.code.java.dataflow.ExternalFlow +private import semmle.code.java.dataflow.FlowSources +private import semmle.code.java.dataflow.FlowSummary +private import semmle.code.java.dataflow.internal.DataFlowPrivate +private import semmle.code.java.dataflow.TaintTracking /** * An external API from either the Java Standard Library or a 3rd party library. @@ -10,8 +15,16 @@ private import semmle.code.java.dataflow.ExternalFlow class ExternalAPI extends Callable { ExternalAPI() { not this.fromSource() } + /** Holds if this API is a candidate worth supporting */ + predicate isWorthSupporting() { not isTestLibrary() and not isParameterlessConstructor() } + + /** Holds if this API is is a constructor without parameters */ + predicate isParameterlessConstructor() { + this instanceof Constructor and this.getNumberOfParameters() = 0 + } + /** Holds if this API is part of a common testing library or framework */ - predicate isTestLibrary() { getDeclaringType() instanceof TestLibrary } + private predicate isTestLibrary() { getDeclaringType() instanceof TestLibrary } /** * Gets information about the external API in the form expected by the CSV modeling framework. @@ -22,9 +35,6 @@ class ExternalAPI extends Callable { "#" + api.getName() + paramsString(api) } - /** Holds if this API is not yet supported by existing CodeQL libraries */ - predicate isSupported() { not supportKind(this) = "?" } - /** * Gets the jar file containing this API. Normalizes the Java Runtime to "rt.jar" despite the presence of modules. */ @@ -33,6 +43,39 @@ class ExternalAPI extends Callable { private string containerAsJar(Container container) { if container instanceof JarFile then result = container.getBaseName() else result = "rt.jar" } + + /** Gets a node that is an input to a call to this API. */ + private DataFlow::Node getAnInput() { + exists(Call call | call.getCallee().getSourceDeclaration() = this | + result.asExpr().(Argument).getCall() = call or + result.(ArgumentNode).getCall() = call + ) + } + + /** Gets a node that is an output from a call to this API. */ + private DataFlow::Node getAnOutput() { + exists(Call call | call.getCallee().getSourceDeclaration() = this | + result.asExpr() = call or + result.(DataFlow::PostUpdateNode).getPreUpdateNode().(ArgumentNode).getCall() = call + ) + } + + /** Holds if this API has a supported summary. */ + predicate hasSummary() { + this instanceof SummarizedCallable or + TaintTracking::localAdditionalTaintStep(this.getAnInput(), _) + } + + /** Holds if this API is a known source. */ + predicate isSource() { + this.getAnOutput() instanceof RemoteFlowSource or sourceNode(this.getAnOutput(), _) + } + + /** Holds if this API is a known sink. */ + predicate isSink() { sinkNode(this.getAnInput(), _) } + + /** Holds if this API is supported by existing CodeQL libraries, that is, it is either a recognized source or sink or has a flow summary. */ + predicate isSupported() { hasSummary() or isSource() or isSink() } } private class TestLibrary extends RefType { diff --git a/java/ql/src/Telemetry/ExternalLibraryUsage.ql b/java/ql/src/Telemetry/ExternalLibraryUsage.ql index a5785e16917..ad6bf6a91b1 100644 --- a/java/ql/src/Telemetry/ExternalLibraryUsage.ql +++ b/java/ql/src/Telemetry/ExternalLibraryUsage.ql @@ -16,6 +16,6 @@ where c.getCallee() = a and not c.getFile() instanceof GeneratedFile and a.jarContainer() = jarname and - not a.isTestLibrary() + a.isWorthSupporting() ) select jarname, usages order by usages desc diff --git a/java/ql/src/Telemetry/SupportedExternalSinks.ql b/java/ql/src/Telemetry/SupportedExternalSinks.ql index 7b8dffc392c..2d6db91939f 100644 --- a/java/ql/src/Telemetry/SupportedExternalSinks.ql +++ b/java/ql/src/Telemetry/SupportedExternalSinks.ql @@ -7,14 +7,13 @@ */ import java -import APIUsage import ExternalAPI import semmle.code.java.GeneratedFiles from ExternalAPI api, int usages where - not api.isTestLibrary() and - supportKind(api) = "sink" and + api.isWorthSupporting() and + api.isSink() and usages = strictcount(Call c | c.getCallee().getSourceDeclaration() = api and diff --git a/java/ql/src/Telemetry/SupportedExternalSources.ql b/java/ql/src/Telemetry/SupportedExternalSources.ql index 2c039bdbece..4c09aa299da 100644 --- a/java/ql/src/Telemetry/SupportedExternalSources.ql +++ b/java/ql/src/Telemetry/SupportedExternalSources.ql @@ -7,14 +7,13 @@ */ import java -import APIUsage import ExternalAPI import semmle.code.java.GeneratedFiles from ExternalAPI api, int usages where - not api.isTestLibrary() and - supportKind(api) = "source" and + api.isWorthSupporting() and + api.isSource() and usages = strictcount(Call c | c.getCallee().getSourceDeclaration() = api and diff --git a/java/ql/src/Telemetry/SupportedExternalTaint.ql b/java/ql/src/Telemetry/SupportedExternalTaint.ql index d89deacf724..0430f63c537 100644 --- a/java/ql/src/Telemetry/SupportedExternalTaint.ql +++ b/java/ql/src/Telemetry/SupportedExternalTaint.ql @@ -7,14 +7,13 @@ */ import java -import APIUsage import ExternalAPI import semmle.code.java.GeneratedFiles from ExternalAPI api, int usages where - not api.isTestLibrary() and - supportKind(api) = ["summary", "taint-preserving"] and + api.isWorthSupporting() and + api.hasSummary() and usages = strictcount(Call c | c.getCallee().getSourceDeclaration() = api and diff --git a/java/ql/src/Telemetry/UnsupportedExternalAPIs.ql b/java/ql/src/Telemetry/UnsupportedExternalAPIs.ql index c79bed20fe9..09cadfd0f2e 100644 --- a/java/ql/src/Telemetry/UnsupportedExternalAPIs.ql +++ b/java/ql/src/Telemetry/UnsupportedExternalAPIs.ql @@ -7,13 +7,12 @@ */ import java -import APIUsage import ExternalAPI import semmle.code.java.GeneratedFiles from ExternalAPI api, int usages where - not api.isTestLibrary() and + api.isWorthSupporting() and not api.isSupported() and usages = strictcount(Call c | diff --git a/java/ql/test/query-tests/Telemetry/ExternalLibraryUsage/ExternalLibraryUsage.expected b/java/ql/test/query-tests/Telemetry/ExternalLibraryUsage/ExternalLibraryUsage.expected index dbba1054b8c..d654e05d3c7 100644 --- a/java/ql/test/query-tests/Telemetry/ExternalLibraryUsage/ExternalLibraryUsage.expected +++ b/java/ql/test/query-tests/Telemetry/ExternalLibraryUsage/ExternalLibraryUsage.expected @@ -1 +1 @@ -| rt.jar | 3 | +| rt.jar | 1 | diff --git a/java/ql/test/query-tests/Telemetry/UnsupportedExternalAPIs/UnsupportedExternalAPIs.expected b/java/ql/test/query-tests/Telemetry/UnsupportedExternalAPIs/UnsupportedExternalAPIs.expected index e89dc4ba532..6171ccede3d 100644 --- a/java/ql/test/query-tests/Telemetry/UnsupportedExternalAPIs/UnsupportedExternalAPIs.expected +++ b/java/ql/test/query-tests/Telemetry/UnsupportedExternalAPIs/UnsupportedExternalAPIs.expected @@ -1,4 +1,3 @@ | java.io.PrintStream#println(Object) | 3 | -| java.lang.Object#Object() | 2 | | java.lang.String#length() | 1 | | java.time.Duration#ofMillis(long) | 1 | From c6eb795e76aaaa728eb3c61d5e0b1eef533c6284 Mon Sep 17 00:00:00 2001 From: yoff Date: Fri, 3 Sep 2021 14:23:57 +0200 Subject: [PATCH 173/741] Apply suggestions from code review Co-authored-by: Rasmus Wriedt Larsen --- .../ModificationOfParameterWithDefaultCustomizations.qll | 8 +++++++- .../Functions/ModificationOfParameterWithDefault/test.py | 4 ++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/python/ql/src/semmle/python/functions/ModificationOfParameterWithDefaultCustomizations.qll b/python/ql/src/semmle/python/functions/ModificationOfParameterWithDefaultCustomizations.qll index 96dd41adfcb..7cd16415dd9 100644 --- a/python/ql/src/semmle/python/functions/ModificationOfParameterWithDefaultCustomizations.qll +++ b/python/ql/src/semmle/python/functions/ModificationOfParameterWithDefaultCustomizations.qll @@ -53,7 +53,7 @@ module ModificationOfParameterWithDefault { } /** - * A source of remote user input, considered as a flow source. + * A mutable default value for a parameter, considered as a flow source. */ class MutableDefaultValue extends Source { boolean nonEmpty; @@ -120,6 +120,9 @@ module ModificationOfParameterWithDefault { } } + /** + * An expression that is checked directly in an `if`, possibly with `not`, such as `if x:` or `if not x:`. + */ private class IdentityGuarded extends Expr { boolean inverted; @@ -136,6 +139,9 @@ module ModificationOfParameterWithDefault { ) } + /** + * Whether this guard has been inverted. For `if x:` the result is `false`, and for `if not x:` the result is `true`. + */ boolean isInverted() { result = inverted } } diff --git a/python/ql/test/query-tests/Functions/ModificationOfParameterWithDefault/test.py b/python/ql/test/query-tests/Functions/ModificationOfParameterWithDefault/test.py index 09ad7ed986c..3246d7362a2 100644 --- a/python/ql/test/query-tests/Functions/ModificationOfParameterWithDefault/test.py +++ b/python/ql/test/query-tests/Functions/ModificationOfParameterWithDefault/test.py @@ -15,7 +15,7 @@ def list_del(l = [0]): # Not OK def append_op(l = []): - l += 1 #$ modification=l + l += [1, 2, 3] #$ modification=l return l # Not OK @@ -123,6 +123,6 @@ def dict_update_op_nochange(d = {}): # OK def sanitizer(l = []): - if not l == []: + if l: l.append(1) #$ SPURIOUS: modification=l return l From 913990bc6224ec0d1248bf373f9a713d0931611c Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Fri, 3 Sep 2021 14:40:16 +0200 Subject: [PATCH 174/741] Python: Add suggested comments and test case --- .../ModificationOfParameterWithDefaultCustomizations.qll | 6 ++++-- .../Functions/ModificationOfParameterWithDefault/test.py | 6 ++++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/python/ql/src/semmle/python/functions/ModificationOfParameterWithDefaultCustomizations.qll b/python/ql/src/semmle/python/functions/ModificationOfParameterWithDefaultCustomizations.qll index 7cd16415dd9..3aed2eeaf16 100644 --- a/python/ql/src/semmle/python/functions/ModificationOfParameterWithDefaultCustomizations.qll +++ b/python/ql/src/semmle/python/functions/ModificationOfParameterWithDefaultCustomizations.qll @@ -17,6 +17,7 @@ module ModificationOfParameterWithDefault { * A data flow source for detecting modifications of a parameters default value. */ abstract class Source extends DataFlow::Node { + /** Result is true if the default value is non-empty for this source and false if not. */ abstract boolean isNonEmpty(); } @@ -34,6 +35,7 @@ module ModificationOfParameterWithDefault { * A sanitizer guard for detecting modifications of a parameters default value. */ abstract class BarrierGuard extends DataFlow::BarrierGuard { + /** Result is true if this guard blocks non-empty values and false if it blocks empty values. */ abstract boolean blocksNonEmpty(); } @@ -120,7 +122,7 @@ module ModificationOfParameterWithDefault { } } - /** + /** * An expression that is checked directly in an `if`, possibly with `not`, such as `if x:` or `if not x:`. */ private class IdentityGuarded extends Expr { @@ -139,7 +141,7 @@ module ModificationOfParameterWithDefault { ) } - /** + /** * Whether this guard has been inverted. For `if x:` the result is `false`, and for `if not x:` the result is `true`. */ boolean isInverted() { result = inverted } diff --git a/python/ql/test/query-tests/Functions/ModificationOfParameterWithDefault/test.py b/python/ql/test/query-tests/Functions/ModificationOfParameterWithDefault/test.py index 3246d7362a2..d7aef0b24d0 100644 --- a/python/ql/test/query-tests/Functions/ModificationOfParameterWithDefault/test.py +++ b/python/ql/test/query-tests/Functions/ModificationOfParameterWithDefault/test.py @@ -124,5 +124,11 @@ def dict_update_op_nochange(d = {}): # OK def sanitizer(l = []): if l: + l.append(1) #$ modification=l + return l + +# OK +def sanitizer_negated(l = [1]): + if not l: l.append(1) #$ SPURIOUS: modification=l return l From 863eede75b0c1685b4181b2851b1b07246a5a8e9 Mon Sep 17 00:00:00 2001 From: Philip Ginsbach Date: Fri, 3 Sep 2021 16:12:52 +0100 Subject: [PATCH 175/741] easier second example for instanceof extensions --- docs/codeql/ql-language-reference/types.rst | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/codeql/ql-language-reference/types.rst b/docs/codeql/ql-language-reference/types.rst index ddbd1bc04c4..253d7dca61f 100644 --- a/docs/codeql/ql-language-reference/types.rst +++ b/docs/codeql/ql-language-reference/types.rst @@ -417,13 +417,13 @@ The following example demonstrates this. .. code-block:: ql class Interface extends int { - Interface() { this in [1 .. 100] } + Interface() { this in [1 .. 10] } string foo() { result = "" } } - class Foo extends Interface { - Foo() { this in [1 .. 10] } - override string foo() { result = "foo" } + class Foo extends int { + Foo() { this in [1 .. 5] } + string foo() { result = "foo" } } class Bar extends Interface instanceof Foo { @@ -432,8 +432,8 @@ The following example demonstrates this. Here, the method `Bar::foo` does not override `Foo::foo`. Instead, it overrides only `Interface::foo`. -This means that `select any(Foo b).foo()` yields only `foo`. -Had `bar been defined as `extends Foo`, then `select any(Foo b).foo()` would yield `bar`. +This means that `select any(Foo f).foo()` yields only `foo`. +Had `Bar` been defined as `extends Foo`, then `select any(Foo b)` would yield `bar`. .. _character-types: .. _domain-types: From 286c10235824086e94c77be59c2db6631e43c5c7 Mon Sep 17 00:00:00 2001 From: Andrew Eisenberg Date: Fri, 3 Sep 2021 12:49:38 -0700 Subject: [PATCH 176/741] Update the docs about qlpacks This is a first pass to fix obvious holes and outdated information, but we should rethink these docs completely. --- docs/codeql/codeql-cli/about-ql-packs.rst | 66 +++++++++++++++++------ 1 file changed, 51 insertions(+), 15 deletions(-) diff --git a/docs/codeql/codeql-cli/about-ql-packs.rst b/docs/codeql/codeql-cli/about-ql-packs.rst index 2cffc9942c0..8074958881a 100644 --- a/docs/codeql/codeql-cli/about-ql-packs.rst +++ b/docs/codeql/codeql-cli/about-ql-packs.rst @@ -81,7 +81,7 @@ The following properties are supported in ``qlpack.yml`` files. - All packs - A version number for this QL pack. This must be a valid semantic version that meets the `SemVer v2.0.0 specification `__. * - ``libraryPathDependencies`` - - ``codeql-javascript`` + - ``codeql/javascript-all`` - Optional - The names of any QL packs that this QL pack depends on, as a sequence. This gives the pack access to any libraries, database schema, and query suites defined in the dependency. * - ``suites`` @@ -104,7 +104,18 @@ The following properties are supported in ``qlpack.yml`` files. - ``.`` - Packs with upgrades - The path to a directory within the pack that contains upgrade scripts, defined relative to the pack directory. The ``database upgrade`` action uses these scripts to update databases that were created by an older version of an extractor so they're compatible with the current extractor (see `Upgrade scripts for a language <#upgrade-scripts-for-a-language>`__ below.) + * - ``dependencies`` + - .. code-block:: yaml + dependencies: + codeql/cpp-all: ^0.0.2 + + - Packs that define CodeQL package dependencies on other packs + - A map from pack references to the semantic version range that is compatible with this pack. + * - ``defaultSuiteFile`` + - ``defaultSuiteFile: cpp-code-scanning.qls`` + - Packs that export a set of default queries to run + - The path to a query suite file containing all of the queries that are run by default when this pack is passed to the ``codeql database analyze` command. .. _custom-ql-packs: @@ -138,7 +149,7 @@ and libraries may contain: libraryPathDependencies: codeql/cpp-all suites: my-custom-suites -where ``codeql-cpp`` is the name of the QL pack for C/C++ analysis included in +where ``codeql/cpp-all`` is the name of the QL pack for C/C++ analysis included in the CodeQL repository. .. pull-quote:: @@ -166,38 +177,61 @@ For more information about running tests, see ":doc:`Testing custom queries Examples of QL packs in the CodeQL repository --------------------------------------------- -Each of the languages in the CodeQL repository has three main QL packs: +Each of the languages in the CodeQL repository has four main QL packs: -- Core QL pack for the language, with the :ref:`database schema ` - used by the language, CodeQL libraries, and queries at ``ql//ql/src`` +- Core library pack for the language, with the :ref:`database schema ` + used by the language, and CodeQL libraries, and queries at ``ql//ql/lib`` +- Core query pack for the language that includes the default queries for the language, along + with their query suites at ``ql//ql/src`` - Tests for the core language libraries and queries pack at ``ql//ql/test`` - Upgrade scripts for the language at ``ql//upgrades`` -Core QL pack +Core library pack ~~~~~~~~~~~~ -The ``qlpack.yml`` file for a core QL pack uses the following properties: -``name``, ``version``, ``dbscheme``, and ``suites``. +The ``qlpack.yml`` file for a core library pack uses the following properties: +``name``, ``version``, ``dbscheme``. The ``dbscheme`` property should only be defined in the core QL pack for a language. -For example, the ``qlpack.yml`` file for `C/C++ analysis -`__ +For example, the ``qlpack.yml`` file for `C/C++ analysis libraries +`__ contains: .. code-block:: yaml - name: codeql-cpp + name: codeql/cpp-all version: 0.0.0 dbscheme: semmlecode.cpp.dbscheme + dependencies: + codeql/cpp-upgrades: "*" + +Core query pack +~~~~~~~~~~~~ + +The ``qlpack.yml`` file for a core query pack uses the following properties: +``name``, ``version``, ``suites``, ``defaultSuiteFile``, ``dependencies`` . + +For example, the ``qlpack.yml`` file for `C/C++ analysis queries +`__ +contains: + +.. code-block:: yaml + + name: codeql/cpp-queries + version: 0.0.0 suites: codeql-suites + defaultSuiteFile: codeql-suites/cpp-code-scanning.qls + dependencies: + codeql/cpp-all: "*" + codeql/suite-helpers: "*" Tests for the core QL pack ~~~~~~~~~~~~~~~~~~~~~~~~~~ The ``qlpack.yml`` file for the tests for the core QL packs use the following properties: ``name``, ``version``, and ``libraryPathDependencies``. -The ``libraryPathDependencies`` always specifies the core QL pack. +The ``dependencies`` always specifies the core QL pack. For example, the ``qlpack.yml`` file for `C/C++ analysis tests `__ @@ -205,9 +239,11 @@ contains: .. code-block:: yaml - name: codeql-cpp-tests + name: codeql/cpp-tests version: 0.0.0 - libraryPathDependencies: codeql/cpp-all + dependencies: + codeql/cpp-all: "*" + codeql/cpp-queries: "*" Notice that, unlike the example QL pack for custom tests, this file does not define an ``extractor`` or ``tests`` property. These properties have been added to @@ -229,5 +265,5 @@ contains: .. code-block:: yaml - name: codeql-cpp-upgrades + name: codeql/cpp-upgrades upgrades: . From 8b0d5a2e7bc864689ff00e366c8abe23f6de37e7 Mon Sep 17 00:00:00 2001 From: ihsinme Date: Sun, 5 Sep 2021 22:46:37 +0300 Subject: [PATCH 177/741] Update cpp/ql/src/experimental/Security/CWE/CWE-675/DoubleRelease.qhelp Co-authored-by: Geoffrey White <40627776+geoffw0@users.noreply.github.com> --- .../src/experimental/Security/CWE/CWE-675/DoubleRelease.qhelp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-675/DoubleRelease.qhelp b/cpp/ql/src/experimental/Security/CWE/CWE-675/DoubleRelease.qhelp index 8ec155e100f..2b590e025b8 100644 --- a/cpp/ql/src/experimental/Security/CWE/CWE-675/DoubleRelease.qhelp +++ b/cpp/ql/src/experimental/Security/CWE/CWE-675/DoubleRelease.qhelp @@ -12,7 +12,7 @@

    The following example demonstrates an erroneous and corrected use of descriptor deallocation.

    - +
    From e4d22ea6284a17f0a4cc57f6f9c1f5388c191fdb Mon Sep 17 00:00:00 2001 From: Anders Fugmann Date: Mon, 6 Sep 2021 10:31:32 +0200 Subject: [PATCH 178/741] C++: Add comment on why getGuardedUpperBound must have exactly one predecessor --- .../semmle/code/cpp/rangeanalysis/SimpleRangeAnalysis.qll | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/cpp/ql/src/semmle/code/cpp/rangeanalysis/SimpleRangeAnalysis.qll b/cpp/ql/src/semmle/code/cpp/rangeanalysis/SimpleRangeAnalysis.qll index 80fdf87ac05..a803f4f1941 100644 --- a/cpp/ql/src/semmle/code/cpp/rangeanalysis/SimpleRangeAnalysis.qll +++ b/cpp/ql/src/semmle/code/cpp/rangeanalysis/SimpleRangeAnalysis.qll @@ -1540,6 +1540,13 @@ private float getGuardedUpperBound(VariableAccess guardedAccess) { RangeSsaDefinition def, StackVariable v, VariableAccess guardVa, Expr guard, boolean branch | def.isGuardPhi(v, guardVa, guard, branch) and + // If the basic block for the variable access being examined has + // more than one predecessor, the guard phi node could originate + // from one of the predecessors. This is because the guard phi + // node is attached to the block at the end of the edge and not on + // the actual edge. It is therefore possible to determine which + // edge the guard phi node belongs to. The predicate below ensures + // that there is one predecessor, albeit somewhat conservative. exists(unique(BasicBlock b | b = def.(BasicBlock).getAPredecessor())) and guardedAccess = def.getAUse(v) and result = max(float ub | upperBoundFromGuard(guard, guardVa, ub, branch)) From 8d4af3ad81ae8056ac9af4a6e20d53c4f04aeed8 Mon Sep 17 00:00:00 2001 From: Erik Krogh Kristensen Date: Wed, 12 May 2021 16:49:43 +0200 Subject: [PATCH 179/741] convert field based range pattern to casting based range pattern --- .../ql/lib/semmle/javascript/Base64.qll | 16 +++--- .../ql/lib/semmle/javascript/Closure.qll | 16 +++--- .../lib/semmle/javascript/InclusionTests.qll | 10 ++-- .../javascript/MembershipCandidates.qll | 12 ++--- .../ql/lib/semmle/javascript/StringOps.qll | 32 +++++------ .../lib/semmle/javascript/dataflow/Nodes.qll | 54 +++++++++---------- .../semmle/javascript/frameworks/Cheerio.qll | 4 +- .../javascript/frameworks/ClientRequests.qll | 14 +++-- .../frameworks/ComposedFunctions.qll | 10 ++-- .../semmle/javascript/frameworks/Electron.qll | 2 +- .../javascript/frameworks/EventEmitter.qll | 36 ++++++------- .../lib/semmle/javascript/frameworks/HTTP.qll | 6 +-- .../javascript/frameworks/NodeJSLib.qll | 2 +- .../frameworks/PropertyProjection.qll | 10 ++-- .../semmle/javascript/frameworks/Redux.qll | 14 ++--- .../semmle/javascript/frameworks/ShellJS.qll | 6 +-- 16 files changed, 108 insertions(+), 136 deletions(-) diff --git a/javascript/ql/lib/semmle/javascript/Base64.qll b/javascript/ql/lib/semmle/javascript/Base64.qll index f2e91a7060c..d7a463da2b0 100644 --- a/javascript/ql/lib/semmle/javascript/Base64.qll +++ b/javascript/ql/lib/semmle/javascript/Base64.qll @@ -7,15 +7,13 @@ import javascript module Base64 { /** A call to a base64 encoder. */ class Encode extends DataFlow::Node { - Encode::Range encode; - - Encode() { this = encode } + Encode() { this instanceof Encode::Range } /** Gets the input passed to the encoder. */ - DataFlow::Node getInput() { result = encode.getInput() } + DataFlow::Node getInput() { result = this.(Encode::Range).getInput() } /** Gets the base64-encoded output of the encoder. */ - DataFlow::Node getOutput() { result = encode.getOutput() } + DataFlow::Node getOutput() { result = this.(Encode::Range).getOutput() } } module Encode { @@ -35,15 +33,13 @@ module Base64 { /** A call to a base64 decoder. */ class Decode extends DataFlow::Node { - Decode::Range encode; - - Decode() { this = encode } + Decode() { this instanceof Decode::Range } /** Gets the base64-encoded input passed to the decoder. */ - DataFlow::Node getInput() { result = encode.getInput() } + DataFlow::Node getInput() { result = this.(Decode::Range).getInput() } /** Gets the output of the decoder. */ - DataFlow::Node getOutput() { result = encode.getOutput() } + DataFlow::Node getOutput() { result = this.(Decode::Range).getOutput() } } module Decode { diff --git a/javascript/ql/lib/semmle/javascript/Closure.qll b/javascript/ql/lib/semmle/javascript/Closure.qll index 5a4e9b4c7e7..637dc6f9687 100644 --- a/javascript/ql/lib/semmle/javascript/Closure.qll +++ b/javascript/ql/lib/semmle/javascript/Closure.qll @@ -9,14 +9,14 @@ module Closure { * A reference to a Closure namespace. */ class ClosureNamespaceRef extends DataFlow::Node { - ClosureNamespaceRef::Range range; - - ClosureNamespaceRef() { this = range } + ClosureNamespaceRef() { this instanceof ClosureNamespaceRef::Range } /** * Gets the namespace being referenced. */ - string getClosureNamespace() { result = range.getClosureNamespace() } + string getClosureNamespace() { + result = this.(ClosureNamespaceRef::Range).getClosureNamespace() + } } module ClosureNamespaceRef { @@ -37,7 +37,7 @@ module Closure { * A data flow node that returns the value of a closure namespace. */ class ClosureNamespaceAccess extends ClosureNamespaceRef { - override ClosureNamespaceAccess::Range range; + ClosureNamespaceAccess() { this instanceof ClosureNamespaceAccess::Range } } module ClosureNamespaceAccess { @@ -81,7 +81,7 @@ module Closure { * A top-level call to `goog.provide`. */ class ClosureProvideCall extends ClosureNamespaceRef, DataFlow::MethodCallNode { - override DefaultClosureProvideCall range; + ClosureProvideCall() { this instanceof DefaultClosureProvideCall } } /** @@ -95,7 +95,7 @@ module Closure { * A call to `goog.require`. */ class ClosureRequireCall extends ClosureNamespaceAccess, DataFlow::MethodCallNode { - override DefaultClosureRequireCall range; + ClosureRequireCall() { this instanceof DefaultClosureRequireCall } } /** @@ -112,7 +112,7 @@ module Closure { * A top-level call to `goog.module` or `goog.declareModuleId`. */ class ClosureModuleDeclaration extends ClosureNamespaceRef, DataFlow::MethodCallNode { - override DefaultClosureModuleDeclaration range; + ClosureModuleDeclaration() { this instanceof DefaultClosureModuleDeclaration } } private GlobalVariable googVariable() { variables(result, "goog", any(GlobalScope sc)) } diff --git a/javascript/ql/lib/semmle/javascript/InclusionTests.qll b/javascript/ql/lib/semmle/javascript/InclusionTests.qll index 2d0cf1752a4..69f037a664d 100644 --- a/javascript/ql/lib/semmle/javascript/InclusionTests.qll +++ b/javascript/ql/lib/semmle/javascript/InclusionTests.qll @@ -17,15 +17,13 @@ private import javascript * ``` */ class InclusionTest extends DataFlow::Node { - InclusionTest::Range range; - - InclusionTest() { this = range } + InclusionTest() { this instanceof InclusionTest::Range } /** Gets the `A` in `A.includes(B)`. */ - DataFlow::Node getContainerNode() { result = range.getContainerNode() } + DataFlow::Node getContainerNode() { result = this.(InclusionTest::Range).getContainerNode() } /** Gets the `B` in `A.includes(B)`. */ - DataFlow::Node getContainedNode() { result = range.getContainedNode() } + DataFlow::Node getContainedNode() { result = this.(InclusionTest::Range).getContainedNode() } /** * Gets the polarity of the check. @@ -33,7 +31,7 @@ class InclusionTest extends DataFlow::Node { * If the polarity is `false` the check returns `true` if the container does not contain * the given element. */ - boolean getPolarity() { result = range.getPolarity() } + boolean getPolarity() { result = this.(InclusionTest::Range).getPolarity() } } module InclusionTest { diff --git a/javascript/ql/lib/semmle/javascript/MembershipCandidates.qll b/javascript/ql/lib/semmle/javascript/MembershipCandidates.qll index 89573252ab5..6cc6aa53fe1 100644 --- a/javascript/ql/lib/semmle/javascript/MembershipCandidates.qll +++ b/javascript/ql/lib/semmle/javascript/MembershipCandidates.qll @@ -10,26 +10,24 @@ import javascript * Additional candidates can be added by subclassing `MembershipCandidate::Range` */ class MembershipCandidate extends DataFlow::Node { - MembershipCandidate::Range range; - - MembershipCandidate() { this = range } + MembershipCandidate() { this instanceof MembershipCandidate::Range } /** * Gets the expression that performs the membership test, if any. */ - DataFlow::Node getTest() { result = range.getTest() } + DataFlow::Node getTest() { result = this.(MembershipCandidate::Range).getTest() } /** * Gets a string that this candidate is tested against, if * it can be determined. */ - string getAMemberString() { result = range.getAMemberString() } + string getAMemberString() { result = this.(MembershipCandidate::Range).getAMemberString() } /** * Gets a node that this candidate is tested against, if * it can be determined. */ - DataFlow::Node getAMemberNode() { result = range.getAMemberNode() } + DataFlow::Node getAMemberNode() { result = this.(MembershipCandidate::Range).getAMemberNode() } /** * Gets the polarity of the test. @@ -37,7 +35,7 @@ class MembershipCandidate extends DataFlow::Node { * If the polarity is `false` the test returns `true` if the * collection does not contain this candidate. */ - boolean getTestPolarity() { result = range.getTestPolarity() } + boolean getTestPolarity() { result = this.(MembershipCandidate::Range).getTestPolarity() } } /** diff --git a/javascript/ql/lib/semmle/javascript/StringOps.qll b/javascript/ql/lib/semmle/javascript/StringOps.qll index a82ffe95a13..78083720fcf 100644 --- a/javascript/ql/lib/semmle/javascript/StringOps.qll +++ b/javascript/ql/lib/semmle/javascript/StringOps.qll @@ -9,19 +9,17 @@ module StringOps { * A expression that is equivalent to `A.startsWith(B)` or `!A.startsWith(B)`. */ class StartsWith extends DataFlow::Node { - StartsWith::Range range; - - StartsWith() { range = this } + StartsWith() { this instanceof StartsWith::Range } /** * Gets the `A` in `A.startsWith(B)`. */ - DataFlow::Node getBaseString() { result = range.getBaseString() } + DataFlow::Node getBaseString() { result = this.(StartsWith::Range).getBaseString() } /** * Gets the `B` in `A.startsWith(B)`. */ - DataFlow::Node getSubstring() { result = range.getSubstring() } + DataFlow::Node getSubstring() { result = this.(StartsWith::Range).getSubstring() } /** * Gets the polarity of the check. @@ -29,7 +27,7 @@ module StringOps { * If the polarity is `false` the check returns `true` if the string does not start * with the given substring. */ - boolean getPolarity() { result = range.getPolarity() } + boolean getPolarity() { result = this.(StartsWith::Range).getPolarity() } } module StartsWith { @@ -238,19 +236,17 @@ module StringOps { * An expression that is equivalent to `A.endsWith(B)` or `!A.endsWith(B)`. */ class EndsWith extends DataFlow::Node { - EndsWith::Range range; - - EndsWith() { this = range } + EndsWith() { this instanceof EndsWith::Range } /** * Gets the `A` in `A.startsWith(B)`. */ - DataFlow::Node getBaseString() { result = range.getBaseString() } + DataFlow::Node getBaseString() { result = this.(EndsWith::Range).getBaseString() } /** * Gets the `B` in `A.startsWith(B)`. */ - DataFlow::Node getSubstring() { result = range.getSubstring() } + DataFlow::Node getSubstring() { result = this.(EndsWith::Range).getSubstring() } /** * Gets the polarity if the check. @@ -258,7 +254,7 @@ module StringOps { * If the polarity is `false` the check returns `true` if the string does not end * with the given substring. */ - boolean getPolarity() { result = range.getPolarity() } + boolean getPolarity() { result = this.(EndsWith::Range).getPolarity() } } module EndsWith { @@ -663,9 +659,7 @@ module StringOps { * ``` */ class RegExpTest extends DataFlow::Node { - RegExpTest::Range range; - - RegExpTest() { this = range } + RegExpTest() { this instanceof RegExpTest::Range } /** * Gets the AST of the regular expression used in the test, if it can be seen locally. @@ -673,7 +667,7 @@ module StringOps { RegExpTerm getRegExp() { result = getRegExpOperand().getALocalSource().(DataFlow::RegExpCreationNode).getRoot() or - result = range.getRegExpOperand(true).asExpr().(StringLiteral).asRegExp() + result = this.(RegExpTest::Range).getRegExpOperand(true).asExpr().(StringLiteral).asRegExp() } /** @@ -681,12 +675,12 @@ module StringOps { * * In some cases this represents a string value being coerced to a RegExp object. */ - DataFlow::Node getRegExpOperand() { result = range.getRegExpOperand(_) } + DataFlow::Node getRegExpOperand() { result = this.(RegExpTest::Range).getRegExpOperand(_) } /** * Gets the data flow node corresponding to the string being tested against the regular expression. */ - DataFlow::Node getStringOperand() { result = range.getStringOperand() } + DataFlow::Node getStringOperand() { result = this.(RegExpTest::Range).getStringOperand() } /** * Gets the return value indicating that the string matched the regular expression. @@ -694,7 +688,7 @@ module StringOps { * For example, for `regexp.exec(str) == null`, the polarity is `false`, and for * `regexp.exec(str) != null` the polarity is `true`. */ - boolean getPolarity() { result = range.getPolarity() } + boolean getPolarity() { result = this.(RegExpTest::Range).getPolarity() } } /** diff --git a/javascript/ql/lib/semmle/javascript/dataflow/Nodes.qll b/javascript/ql/lib/semmle/javascript/dataflow/Nodes.qll index 7c832e20aed..f8bdb6f46ad 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/Nodes.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/Nodes.qll @@ -703,12 +703,10 @@ class ArrayCreationNode extends DataFlow::ValueNode, DataFlow::SourceNode { * ``` */ class ModuleImportNode extends DataFlow::SourceNode { - ModuleImportNode::Range range; - - ModuleImportNode() { this = range } + ModuleImportNode() { this instanceof ModuleImportNode::Range } /** Gets the path of the imported module. */ - string getPath() { result = range.getPath() } + string getPath() { result = this.(ModuleImportNode::Range).getPath() } } module ModuleImportNode { @@ -845,24 +843,22 @@ module MemberKind { * Additional patterns can be recognized as class nodes, by extending `DataFlow::ClassNode::Range`. */ class ClassNode extends DataFlow::SourceNode { - ClassNode::Range impl; - - ClassNode() { this = impl } + ClassNode() { this instanceof ClassNode::Range } /** * Gets the unqualified name of the class, if it has one or one can be determined from the context. */ - string getName() { result = impl.getName() } + string getName() { result = this.(ClassNode::Range).getName() } /** * Gets a description of the class. */ - string describe() { result = impl.describe() } + string describe() { result = this.(ClassNode::Range).describe() } /** * Gets the constructor function of this class. */ - FunctionNode getConstructor() { result = impl.getConstructor() } + FunctionNode getConstructor() { result = this.(ClassNode::Range).getConstructor() } /** * Gets an instance method declared in this class, with the given name, if any. @@ -870,7 +866,7 @@ class ClassNode extends DataFlow::SourceNode { * Does not include methods from superclasses. */ FunctionNode getInstanceMethod(string name) { - result = impl.getInstanceMember(name, MemberKind::method()) + result = this.(ClassNode::Range).getInstanceMember(name, MemberKind::method()) } /** @@ -880,7 +876,9 @@ class ClassNode extends DataFlow::SourceNode { * * Does not include methods from superclasses. */ - FunctionNode getAnInstanceMethod() { result = impl.getAnInstanceMember(MemberKind::method()) } + FunctionNode getAnInstanceMethod() { + result = this.(ClassNode::Range).getAnInstanceMember(MemberKind::method()) + } /** * Gets the instance method, getter, or setter with the given name and kind. @@ -888,7 +886,7 @@ class ClassNode extends DataFlow::SourceNode { * Does not include members from superclasses. */ FunctionNode getInstanceMember(string name, MemberKind kind) { - result = impl.getInstanceMember(name, kind) + result = this.(ClassNode::Range).getInstanceMember(name, kind) } /** @@ -896,31 +894,35 @@ class ClassNode extends DataFlow::SourceNode { * * Does not include members from superclasses. */ - FunctionNode getAnInstanceMember(MemberKind kind) { result = impl.getAnInstanceMember(kind) } + FunctionNode getAnInstanceMember(MemberKind kind) { + result = this.(ClassNode::Range).getAnInstanceMember(kind) + } /** * Gets an instance method, getter, or setter declared in this class. * * Does not include members from superclasses. */ - FunctionNode getAnInstanceMember() { result = impl.getAnInstanceMember(_) } + FunctionNode getAnInstanceMember() { result = this.(ClassNode::Range).getAnInstanceMember(_) } /** * Gets the static method declared in this class with the given name. */ - FunctionNode getStaticMethod(string name) { result = impl.getStaticMethod(name) } + FunctionNode getStaticMethod(string name) { + result = this.(ClassNode::Range).getStaticMethod(name) + } /** * Gets a static method declared in this class. * * The constructor is not considered a static method. */ - FunctionNode getAStaticMethod() { result = impl.getAStaticMethod() } + FunctionNode getAStaticMethod() { result = this.(ClassNode::Range).getAStaticMethod() } /** * Gets a dataflow node that refers to the superclass of this class. */ - DataFlow::Node getASuperClassNode() { result = impl.getASuperClassNode() } + DataFlow::Node getASuperClassNode() { result = this.(ClassNode::Range).getASuperClassNode() } /** * Gets a direct super class of this class. @@ -1066,13 +1068,13 @@ class ClassNode extends DataFlow::SourceNode { * Gets the type annotation for the field `fieldName`, if any. */ TypeAnnotation getFieldTypeAnnotation(string fieldName) { - result = impl.getFieldTypeAnnotation(fieldName) + result = this.(ClassNode::Range).getFieldTypeAnnotation(fieldName) } /** * Gets a decorator applied to this class. */ - DataFlow::Node getADecorator() { result = impl.getADecorator() } + DataFlow::Node getADecorator() { result = this.(ClassNode::Range).getADecorator() } } module ClassNode { @@ -1359,9 +1361,7 @@ module ClassNode { * ``` */ class PartialInvokeNode extends DataFlow::Node { - PartialInvokeNode::Range range; - - PartialInvokeNode() { this = range } + PartialInvokeNode() { this instanceof PartialInvokeNode::Range } /** Gets a node holding a callback invoked by this partial invocation node. */ DataFlow::Node getACallbackNode() { @@ -1374,26 +1374,26 @@ class PartialInvokeNode extends DataFlow::Node { * Holds if `argument` is passed as argument `index` to the function in `callback`. */ predicate isPartialArgument(DataFlow::Node callback, DataFlow::Node argument, int index) { - range.isPartialArgument(callback, argument, index) + this.(PartialInvokeNode::Range).isPartialArgument(callback, argument, index) } /** * Gets a node referring to a bound version of `callback` with `boundArgs` arguments bound. */ DataFlow::SourceNode getBoundFunction(DataFlow::Node callback, int boundArgs) { - result = range.getBoundFunction(callback, boundArgs) + result = this.(PartialInvokeNode::Range).getBoundFunction(callback, boundArgs) } /** * Gets the node holding the receiver to be passed to the bound function, if specified. */ - DataFlow::Node getBoundReceiver() { result = range.getBoundReceiver(_) } + DataFlow::Node getBoundReceiver() { result = this.(PartialInvokeNode::Range).getBoundReceiver(_) } /** * Gets the node holding the receiver to be passed to the bound function, if specified. */ DataFlow::Node getBoundReceiver(DataFlow::Node callback) { - result = range.getBoundReceiver(callback) + result = this.(PartialInvokeNode::Range).getBoundReceiver(callback) } } diff --git a/javascript/ql/lib/semmle/javascript/frameworks/Cheerio.qll b/javascript/ql/lib/semmle/javascript/frameworks/Cheerio.qll index b9705aebfbd..182f760ac04 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/Cheerio.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/Cheerio.qll @@ -33,9 +33,7 @@ module Cheerio { * with an interface similar to that of a jQuery object. */ class CheerioObjectCreation extends DataFlow::SourceNode { - CheerioObjectCreation::Range range; - - CheerioObjectCreation() { this = range } + CheerioObjectCreation() { this instanceof CheerioObjectCreation::Range } } module CheerioObjectCreation { diff --git a/javascript/ql/lib/semmle/javascript/frameworks/ClientRequests.qll b/javascript/ql/lib/semmle/javascript/frameworks/ClientRequests.qll index 3d496f28177..f15821a403e 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/ClientRequests.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/ClientRequests.qll @@ -19,24 +19,22 @@ import javascript * predicates. */ class ClientRequest extends DataFlow::InvokeNode { - ClientRequest::Range self; - - ClientRequest() { this = self } + ClientRequest() { this instanceof ClientRequest::Range } /** * Gets the URL of the request. */ - DataFlow::Node getUrl() { result = self.getUrl() } + DataFlow::Node getUrl() { result = this.(ClientRequest::Range).getUrl() } /** * Gets the host of the request. */ - DataFlow::Node getHost() { result = self.getHost() } + DataFlow::Node getHost() { result = this.(ClientRequest::Range).getHost() } /** * Gets a node that contributes to the data-part this request. */ - DataFlow::Node getADataNode() { result = self.getADataNode() } + DataFlow::Node getADataNode() { result = this.(ClientRequest::Range).getADataNode() } /** * Gets a data flow node that refers to some representation of the response, possibly @@ -60,7 +58,7 @@ class ClientRequest extends DataFlow::InvokeNode { * - Any value provided by custom implementations of `ClientRequest::Range`. */ DataFlow::Node getAResponseDataNode(string responseType, boolean promise) { - result = self.getAResponseDataNode(responseType, promise) + result = this.(ClientRequest::Range).getAResponseDataNode(responseType, promise) } /** @@ -72,7 +70,7 @@ class ClientRequest extends DataFlow::InvokeNode { /** * Gets a data-flow node that determines where in the file-system the result of the request should be saved. */ - DataFlow::Node getASavePath() { result = self.getASavePath() } + DataFlow::Node getASavePath() { result = this.(ClientRequest::Range).getASavePath() } } deprecated class CustomClientRequest = ClientRequest::Range; diff --git a/javascript/ql/lib/semmle/javascript/frameworks/ComposedFunctions.qll b/javascript/ql/lib/semmle/javascript/frameworks/ComposedFunctions.qll index b1016ce56be..4cd2c9e3c65 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/ComposedFunctions.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/ComposedFunctions.qll @@ -9,9 +9,7 @@ import javascript * series of functions `f, g, h, ...`. */ class FunctionCompositionCall extends DataFlow::CallNode { - FunctionCompositionCall::Range range; - - FunctionCompositionCall() { this = range } + FunctionCompositionCall() { this instanceof FunctionCompositionCall::Range } /** * Gets the `i`th function in the composition `f(g(h(...)))`, counting from left to right. @@ -19,7 +17,9 @@ class FunctionCompositionCall extends DataFlow::CallNode { * Note that this is the opposite of the order in which the function are invoked, * that is, `g` occurs later than `f` in `f(g(...))` but is invoked before `f`. */ - DataFlow::Node getOperandNode(int i) { result = range.getOperandNode(i) } + DataFlow::Node getOperandNode(int i) { + result = this.(FunctionCompositionCall::Range).getOperandNode(i) + } /** Gets a node holding one of the functions to be composed. */ final DataFlow::Node getAnOperandNode() { result = getOperandNode(_) } @@ -38,7 +38,7 @@ class FunctionCompositionCall extends DataFlow::CallNode { final DataFlow::FunctionNode getAnOperandFunction() { result = getOperandFunction(_) } /** Gets the number of functions being composed. */ - int getNumOperand() { result = range.getNumOperand() } + int getNumOperand() { result = this.(FunctionCompositionCall::Range).getNumOperand() } } /** diff --git a/javascript/ql/lib/semmle/javascript/frameworks/Electron.qll b/javascript/ql/lib/semmle/javascript/frameworks/Electron.qll index 7d099932738..2c326e7cd31 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/Electron.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/Electron.qll @@ -182,7 +182,7 @@ module Electron { * A Node.js-style HTTP or HTTPS request made using an Electron module. */ class ElectronClientRequest extends NodeJSLib::NodeJSClientRequest { - override ElectronClientRequest::Range self; + ElectronClientRequest() { this instanceof ElectronClientRequest::Range } } module ElectronClientRequest { diff --git a/javascript/ql/lib/semmle/javascript/frameworks/EventEmitter.qll b/javascript/ql/lib/semmle/javascript/frameworks/EventEmitter.qll index f044d69524d..c428f070cd5 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/EventEmitter.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/EventEmitter.qll @@ -69,39 +69,41 @@ module EventEmitter { * Extend EventEmitter::Range to mark something as being an EventEmitter. */ class EventEmitter extends DataFlow::Node { - EventEmitter::Range range; - - EventEmitter() { this = range } + EventEmitter() { this instanceof EventEmitter::Range } } /** * A registration of an event handler on an EventEmitter. */ class EventRegistration extends DataFlow::Node { - EventRegistration::Range range; - - EventRegistration() { this = range } + EventRegistration() { this instanceof EventRegistration::Range } /** Gets the EventEmitter that the event handler is registered on. */ - final EventEmitter getEmitter() { result = range.getEmitter() } + final EventEmitter getEmitter() { result = this.(EventRegistration::Range).getEmitter() } /** Gets the name of the channel if possible. */ - string getChannel() { result = range.getChannel() } + string getChannel() { result = this.(EventRegistration::Range).getChannel() } /** Gets the `i`th parameter in the event handler. */ - DataFlow::Node getReceivedItem(int i) { result = range.getReceivedItem(i) } + DataFlow::Node getReceivedItem(int i) { + result = this.(EventRegistration::Range).getReceivedItem(i) + } /** * Gets a value that is returned by the event handler. * The default implementation is that no value can be returned. */ - DataFlow::Node getAReturnedValue() { result = range.getAReturnedValue() } + DataFlow::Node getAReturnedValue() { + result = this.(EventRegistration::Range).getAReturnedValue() + } /** * Get a dispatch that this event handler can return a value to. * The default implementation is that there exists no such dispatch. */ - EventDispatch getAReturnDispatch() { result = range.getAReturnDispatch() } + EventDispatch getAReturnDispatch() { + result = this.(EventRegistration::Range).getAReturnDispatch() + } } module EventRegistration { @@ -141,25 +143,23 @@ module EventRegistration { * A dispatch of an event on an EventEmitter. */ class EventDispatch extends DataFlow::Node { - EventDispatch::Range range; - - EventDispatch() { this = range } + EventDispatch() { this instanceof EventDispatch::Range } /** Gets the emitter that the event dispatch happens on. */ - EventEmitter getEmitter() { result = range.getEmitter() } + EventEmitter getEmitter() { result = this.(EventDispatch::Range).getEmitter() } /** Gets the name of the channel if possible. */ - string getChannel() { result = range.getChannel() } + string getChannel() { result = this.(EventDispatch::Range).getChannel() } /** Gets the `i`th argument that is send to the event handler. */ - DataFlow::Node getSentItem(int i) { result = range.getSentItem(i) } + DataFlow::Node getSentItem(int i) { result = this.(EventDispatch::Range).getSentItem(i) } /** * Get an EventRegistration that this event dispatch can send an event to. * The default implementation is that the emitters of the dispatch and registration have to be equal. * Channels are by default ignored. */ - EventRegistration getAReceiver() { result = range.getAReceiver() } + EventRegistration getAReceiver() { result = this.(EventDispatch::Range).getAReceiver() } } module EventDispatch { diff --git a/javascript/ql/lib/semmle/javascript/frameworks/HTTP.qll b/javascript/ql/lib/semmle/javascript/frameworks/HTTP.qll index 9475c32eeab..1154dff7452 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/HTTP.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/HTTP.qll @@ -541,15 +541,13 @@ module HTTP { * An object that contains one or more potential route handlers. */ class RouteHandlerCandidateContainer extends DataFlow::Node { - RouteHandlerCandidateContainer::Range self; - - RouteHandlerCandidateContainer() { this = self } + RouteHandlerCandidateContainer() { this instanceof RouteHandlerCandidateContainer::Range } /** * Gets the route handler in this container that is accessed at `access`. */ DataFlow::SourceNode getRouteHandler(DataFlow::SourceNode access) { - result = self.getRouteHandler(access) + result = this.(RouteHandlerCandidateContainer::Range).getRouteHandler(access) } } diff --git a/javascript/ql/lib/semmle/javascript/frameworks/NodeJSLib.qll b/javascript/ql/lib/semmle/javascript/frameworks/NodeJSLib.qll index fa753220005..41faffcf656 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/NodeJSLib.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/NodeJSLib.qll @@ -826,7 +826,7 @@ module NodeJSLib { * for example `http.request(url)`. */ class NodeJSClientRequest extends ClientRequest { - override NodeJSClientRequest::Range self; + NodeJSClientRequest() { this instanceof NodeJSClientRequest::Range } } module NodeJSClientRequest { diff --git a/javascript/ql/lib/semmle/javascript/frameworks/PropertyProjection.qll b/javascript/ql/lib/semmle/javascript/frameworks/PropertyProjection.qll index e3fe62be164..f6db62d5632 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/PropertyProjection.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/PropertyProjection.qll @@ -15,19 +15,17 @@ import javascript * predicates. */ class PropertyProjection extends DataFlow::CallNode { - PropertyProjection::Range self; - - PropertyProjection() { this = self } + PropertyProjection() { this instanceof PropertyProjection::Range } /** * Gets the argument for the object to project properties from, such as `o` in `_.get(o, 'a.b')`. */ - DataFlow::Node getObject() { result = self.getObject() } + DataFlow::Node getObject() { result = this.(PropertyProjection::Range).getObject() } /** * Gets an argument that selects the properties to project, such as `'a.b'` in `_.get(o, 'a.b')`. */ - DataFlow::Node getASelector() { result = self.getASelector() } + DataFlow::Node getASelector() { result = this.(PropertyProjection::Range).getASelector() } /** * Holds if this call returns the value of a single projected property, as opposed to an object that can contain multiple projected properties. @@ -36,7 +34,7 @@ class PropertyProjection extends DataFlow::CallNode { * - This predicate holds for `_.get({a: 'b'}, 'a')`, which returns `'b'`, * - This predicate does not hold for `_.pick({a: 'b', c: 'd'}}, 'a')`, which returns `{a: 'b'}`, */ - predicate isSingletonProjection() { self.isSingletonProjection() } + predicate isSingletonProjection() { this.(PropertyProjection::Range).isSingletonProjection() } } module PropertyProjection { diff --git a/javascript/ql/lib/semmle/javascript/frameworks/Redux.qll b/javascript/ql/lib/semmle/javascript/frameworks/Redux.qll index ad3f985c397..cc14e88712a 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/Redux.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/Redux.qll @@ -57,9 +57,7 @@ module Redux { * Creation of a redux store, usually via a call to `createStore`. */ class StoreCreation extends DataFlow::SourceNode { - StoreCreation::Range range; - - StoreCreation() { this = range } + StoreCreation() { this instanceof StoreCreation::Range } /** Gets a reference to the store. */ DataFlow::SourceNode ref() { result = asApiNode().getAUse() } @@ -68,7 +66,7 @@ module Redux { API::Node asApiNode() { result.getAnImmediateUse() = this } /** Gets the data flow node holding the root reducer for this store. */ - DataFlow::Node getReducerArg() { result = range.getReducerArg() } + DataFlow::Node getReducerArg() { result = this.(StoreCreation::Range).getReducerArg() } /** Gets a data flow node referring to the root reducer. */ DataFlow::SourceNode getAReducerSource() { result = getReducerArg().(ReducerArg).getASource() } @@ -424,12 +422,10 @@ module Redux { * at some point. We model all action creators as if they dispatch the action they create. */ class ActionCreator extends DataFlow::SourceNode { - ActionCreator::Range range; - - ActionCreator() { this = range } + ActionCreator() { this instanceof ActionCreator::Range } /** Gets the `type` property of actions created by this action creator, if it is known. */ - string getTypeTag() { result = range.getTypeTag() } + string getTypeTag() { result = this.(ActionCreator::Range).getTypeTag() } /** * Gets the middleware function that transforms arguments passed to this function into the @@ -442,7 +438,7 @@ module Redux { * the action payload. Otherwise, the return value is the payload itself. */ DataFlow::FunctionNode getMiddlewareFunction(boolean async) { - result = range.getMiddlewareFunction(async) + result = this.(ActionCreator::Range).getMiddlewareFunction(async) } /** Gets a data flow node referring to this action creator. */ diff --git a/javascript/ql/lib/semmle/javascript/frameworks/ShellJS.qll b/javascript/ql/lib/semmle/javascript/frameworks/ShellJS.qll index 3fc1644fdfd..385243436a1 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/ShellJS.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/ShellJS.qll @@ -15,12 +15,10 @@ module ShellJS { /** A member of the `shelljs` library. */ class Member extends DataFlow::SourceNode { - Member::Range range; - - Member() { this = range } + Member() { this instanceof Member::Range } /** Gets the name of `shelljs` member being referenced, such as `cat` in `shelljs.cat`. */ - string getName() { result = range.getName() } + string getName() { result = this.(Member::Range).getName() } } module Member { From 85e1c87d14801c60f36b9467680bead339aa18a6 Mon Sep 17 00:00:00 2001 From: Erik Krogh Kristensen Date: Mon, 6 Sep 2021 11:19:50 +0200 Subject: [PATCH 180/741] use the new non-extending-subtypes syntax --- .../ql/lib/semmle/javascript/Base64.qll | 16 +++--- .../ql/lib/semmle/javascript/Closure.qll | 11 ++-- .../lib/semmle/javascript/InclusionTests.qll | 10 ++-- .../javascript/MembershipCandidates.qll | 12 ++--- .../ql/lib/semmle/javascript/StringOps.qll | 32 +++++------ .../lib/semmle/javascript/dataflow/Nodes.qll | 54 ++++++++----------- .../semmle/javascript/frameworks/Cheerio.qll | 3 +- .../javascript/frameworks/ClientRequests.qll | 14 +++-- .../frameworks/ComposedFunctions.qll | 10 ++-- .../javascript/frameworks/EventEmitter.qll | 36 +++++-------- .../lib/semmle/javascript/frameworks/HTTP.qll | 6 +-- .../frameworks/PropertyProjection.qll | 10 ++-- .../semmle/javascript/frameworks/Redux.qll | 14 ++--- .../semmle/javascript/frameworks/ShellJS.qll | 6 +-- 14 files changed, 87 insertions(+), 147 deletions(-) diff --git a/javascript/ql/lib/semmle/javascript/Base64.qll b/javascript/ql/lib/semmle/javascript/Base64.qll index d7a463da2b0..b9743fb4ec2 100644 --- a/javascript/ql/lib/semmle/javascript/Base64.qll +++ b/javascript/ql/lib/semmle/javascript/Base64.qll @@ -6,14 +6,12 @@ import javascript module Base64 { /** A call to a base64 encoder. */ - class Encode extends DataFlow::Node { - Encode() { this instanceof Encode::Range } - + class Encode extends DataFlow::Node instanceof Encode::Range { /** Gets the input passed to the encoder. */ - DataFlow::Node getInput() { result = this.(Encode::Range).getInput() } + DataFlow::Node getInput() { result = super.getInput() } /** Gets the base64-encoded output of the encoder. */ - DataFlow::Node getOutput() { result = this.(Encode::Range).getOutput() } + DataFlow::Node getOutput() { result = super.getOutput() } } module Encode { @@ -32,14 +30,12 @@ module Base64 { } /** A call to a base64 decoder. */ - class Decode extends DataFlow::Node { - Decode() { this instanceof Decode::Range } - + class Decode extends DataFlow::Node instanceof Decode::Range { /** Gets the base64-encoded input passed to the decoder. */ - DataFlow::Node getInput() { result = this.(Decode::Range).getInput() } + DataFlow::Node getInput() { result = super.getInput() } /** Gets the output of the decoder. */ - DataFlow::Node getOutput() { result = this.(Decode::Range).getOutput() } + DataFlow::Node getOutput() { result = super.getOutput() } } module Decode { diff --git a/javascript/ql/lib/semmle/javascript/Closure.qll b/javascript/ql/lib/semmle/javascript/Closure.qll index 637dc6f9687..ca2c4a4fcd8 100644 --- a/javascript/ql/lib/semmle/javascript/Closure.qll +++ b/javascript/ql/lib/semmle/javascript/Closure.qll @@ -8,15 +8,11 @@ module Closure { /** * A reference to a Closure namespace. */ - class ClosureNamespaceRef extends DataFlow::Node { - ClosureNamespaceRef() { this instanceof ClosureNamespaceRef::Range } - + class ClosureNamespaceRef extends DataFlow::Node instanceof ClosureNamespaceRef::Range { /** * Gets the namespace being referenced. */ - string getClosureNamespace() { - result = this.(ClosureNamespaceRef::Range).getClosureNamespace() - } + string getClosureNamespace() { result = super.getClosureNamespace() } } module ClosureNamespaceRef { @@ -36,8 +32,7 @@ module Closure { /** * A data flow node that returns the value of a closure namespace. */ - class ClosureNamespaceAccess extends ClosureNamespaceRef { - ClosureNamespaceAccess() { this instanceof ClosureNamespaceAccess::Range } + class ClosureNamespaceAccess extends ClosureNamespaceRef instanceof ClosureNamespaceAccess::Range { } module ClosureNamespaceAccess { diff --git a/javascript/ql/lib/semmle/javascript/InclusionTests.qll b/javascript/ql/lib/semmle/javascript/InclusionTests.qll index 69f037a664d..b714c670b19 100644 --- a/javascript/ql/lib/semmle/javascript/InclusionTests.qll +++ b/javascript/ql/lib/semmle/javascript/InclusionTests.qll @@ -16,14 +16,12 @@ private import javascript * ~A.indexOf(B) * ``` */ -class InclusionTest extends DataFlow::Node { - InclusionTest() { this instanceof InclusionTest::Range } - +class InclusionTest extends DataFlow::Node instanceof InclusionTest::Range { /** Gets the `A` in `A.includes(B)`. */ - DataFlow::Node getContainerNode() { result = this.(InclusionTest::Range).getContainerNode() } + DataFlow::Node getContainerNode() { result = super.getContainerNode() } /** Gets the `B` in `A.includes(B)`. */ - DataFlow::Node getContainedNode() { result = this.(InclusionTest::Range).getContainedNode() } + DataFlow::Node getContainedNode() { result = super.getContainedNode() } /** * Gets the polarity of the check. @@ -31,7 +29,7 @@ class InclusionTest extends DataFlow::Node { * If the polarity is `false` the check returns `true` if the container does not contain * the given element. */ - boolean getPolarity() { result = this.(InclusionTest::Range).getPolarity() } + boolean getPolarity() { result = super.getPolarity() } } module InclusionTest { diff --git a/javascript/ql/lib/semmle/javascript/MembershipCandidates.qll b/javascript/ql/lib/semmle/javascript/MembershipCandidates.qll index 6cc6aa53fe1..fe46eff040e 100644 --- a/javascript/ql/lib/semmle/javascript/MembershipCandidates.qll +++ b/javascript/ql/lib/semmle/javascript/MembershipCandidates.qll @@ -9,25 +9,23 @@ import javascript * * Additional candidates can be added by subclassing `MembershipCandidate::Range` */ -class MembershipCandidate extends DataFlow::Node { - MembershipCandidate() { this instanceof MembershipCandidate::Range } - +class MembershipCandidate extends DataFlow::Node instanceof MembershipCandidate::Range { /** * Gets the expression that performs the membership test, if any. */ - DataFlow::Node getTest() { result = this.(MembershipCandidate::Range).getTest() } + DataFlow::Node getTest() { result = super.getTest() } /** * Gets a string that this candidate is tested against, if * it can be determined. */ - string getAMemberString() { result = this.(MembershipCandidate::Range).getAMemberString() } + string getAMemberString() { result = super.getAMemberString() } /** * Gets a node that this candidate is tested against, if * it can be determined. */ - DataFlow::Node getAMemberNode() { result = this.(MembershipCandidate::Range).getAMemberNode() } + DataFlow::Node getAMemberNode() { result = super.getAMemberNode() } /** * Gets the polarity of the test. @@ -35,7 +33,7 @@ class MembershipCandidate extends DataFlow::Node { * If the polarity is `false` the test returns `true` if the * collection does not contain this candidate. */ - boolean getTestPolarity() { result = this.(MembershipCandidate::Range).getTestPolarity() } + boolean getTestPolarity() { result = super.getTestPolarity() } } /** diff --git a/javascript/ql/lib/semmle/javascript/StringOps.qll b/javascript/ql/lib/semmle/javascript/StringOps.qll index 78083720fcf..53390c4230d 100644 --- a/javascript/ql/lib/semmle/javascript/StringOps.qll +++ b/javascript/ql/lib/semmle/javascript/StringOps.qll @@ -8,18 +8,16 @@ module StringOps { /** * A expression that is equivalent to `A.startsWith(B)` or `!A.startsWith(B)`. */ - class StartsWith extends DataFlow::Node { - StartsWith() { this instanceof StartsWith::Range } - + class StartsWith extends DataFlow::Node instanceof StartsWith::Range { /** * Gets the `A` in `A.startsWith(B)`. */ - DataFlow::Node getBaseString() { result = this.(StartsWith::Range).getBaseString() } + DataFlow::Node getBaseString() { result = super.getBaseString() } /** * Gets the `B` in `A.startsWith(B)`. */ - DataFlow::Node getSubstring() { result = this.(StartsWith::Range).getSubstring() } + DataFlow::Node getSubstring() { result = super.getSubstring() } /** * Gets the polarity of the check. @@ -27,7 +25,7 @@ module StringOps { * If the polarity is `false` the check returns `true` if the string does not start * with the given substring. */ - boolean getPolarity() { result = this.(StartsWith::Range).getPolarity() } + boolean getPolarity() { result = super.getPolarity() } } module StartsWith { @@ -235,18 +233,16 @@ module StringOps { /** * An expression that is equivalent to `A.endsWith(B)` or `!A.endsWith(B)`. */ - class EndsWith extends DataFlow::Node { - EndsWith() { this instanceof EndsWith::Range } - + class EndsWith extends DataFlow::Node instanceof EndsWith::Range { /** * Gets the `A` in `A.startsWith(B)`. */ - DataFlow::Node getBaseString() { result = this.(EndsWith::Range).getBaseString() } + DataFlow::Node getBaseString() { result = super.getBaseString() } /** * Gets the `B` in `A.startsWith(B)`. */ - DataFlow::Node getSubstring() { result = this.(EndsWith::Range).getSubstring() } + DataFlow::Node getSubstring() { result = super.getSubstring() } /** * Gets the polarity if the check. @@ -254,7 +250,7 @@ module StringOps { * If the polarity is `false` the check returns `true` if the string does not end * with the given substring. */ - boolean getPolarity() { result = this.(EndsWith::Range).getPolarity() } + boolean getPolarity() { result = super.getPolarity() } } module EndsWith { @@ -658,16 +654,14 @@ module StringOps { * if (!match) { ... } // <--- 'match' is the RegExpTest * ``` */ - class RegExpTest extends DataFlow::Node { - RegExpTest() { this instanceof RegExpTest::Range } - + class RegExpTest extends DataFlow::Node instanceof RegExpTest::Range { /** * Gets the AST of the regular expression used in the test, if it can be seen locally. */ RegExpTerm getRegExp() { result = getRegExpOperand().getALocalSource().(DataFlow::RegExpCreationNode).getRoot() or - result = this.(RegExpTest::Range).getRegExpOperand(true).asExpr().(StringLiteral).asRegExp() + result = super.getRegExpOperand(true).asExpr().(StringLiteral).asRegExp() } /** @@ -675,12 +669,12 @@ module StringOps { * * In some cases this represents a string value being coerced to a RegExp object. */ - DataFlow::Node getRegExpOperand() { result = this.(RegExpTest::Range).getRegExpOperand(_) } + DataFlow::Node getRegExpOperand() { result = super.getRegExpOperand(_) } /** * Gets the data flow node corresponding to the string being tested against the regular expression. */ - DataFlow::Node getStringOperand() { result = this.(RegExpTest::Range).getStringOperand() } + DataFlow::Node getStringOperand() { result = super.getStringOperand() } /** * Gets the return value indicating that the string matched the regular expression. @@ -688,7 +682,7 @@ module StringOps { * For example, for `regexp.exec(str) == null`, the polarity is `false`, and for * `regexp.exec(str) != null` the polarity is `true`. */ - boolean getPolarity() { result = this.(RegExpTest::Range).getPolarity() } + boolean getPolarity() { result = super.getPolarity() } } /** diff --git a/javascript/ql/lib/semmle/javascript/dataflow/Nodes.qll b/javascript/ql/lib/semmle/javascript/dataflow/Nodes.qll index f8bdb6f46ad..c697c43dcce 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/Nodes.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/Nodes.qll @@ -702,11 +702,9 @@ class ArrayCreationNode extends DataFlow::ValueNode, DataFlow::SourceNode { * define(["fs"], function(fs) { ... }); // AMD module * ``` */ -class ModuleImportNode extends DataFlow::SourceNode { - ModuleImportNode() { this instanceof ModuleImportNode::Range } - +class ModuleImportNode extends DataFlow::SourceNode instanceof ModuleImportNode::Range { /** Gets the path of the imported module. */ - string getPath() { result = this.(ModuleImportNode::Range).getPath() } + string getPath() { result = super.getPath() } } module ModuleImportNode { @@ -842,23 +840,21 @@ module MemberKind { * * Additional patterns can be recognized as class nodes, by extending `DataFlow::ClassNode::Range`. */ -class ClassNode extends DataFlow::SourceNode { - ClassNode() { this instanceof ClassNode::Range } - +class ClassNode extends DataFlow::SourceNode instanceof ClassNode::Range { /** * Gets the unqualified name of the class, if it has one or one can be determined from the context. */ - string getName() { result = this.(ClassNode::Range).getName() } + string getName() { result = super.getName() } /** * Gets a description of the class. */ - string describe() { result = this.(ClassNode::Range).describe() } + string describe() { result = super.describe() } /** * Gets the constructor function of this class. */ - FunctionNode getConstructor() { result = this.(ClassNode::Range).getConstructor() } + FunctionNode getConstructor() { result = super.getConstructor() } /** * Gets an instance method declared in this class, with the given name, if any. @@ -866,7 +862,7 @@ class ClassNode extends DataFlow::SourceNode { * Does not include methods from superclasses. */ FunctionNode getInstanceMethod(string name) { - result = this.(ClassNode::Range).getInstanceMember(name, MemberKind::method()) + result = super.getInstanceMember(name, MemberKind::method()) } /** @@ -876,9 +872,7 @@ class ClassNode extends DataFlow::SourceNode { * * Does not include methods from superclasses. */ - FunctionNode getAnInstanceMethod() { - result = this.(ClassNode::Range).getAnInstanceMember(MemberKind::method()) - } + FunctionNode getAnInstanceMethod() { result = super.getAnInstanceMember(MemberKind::method()) } /** * Gets the instance method, getter, or setter with the given name and kind. @@ -886,7 +880,7 @@ class ClassNode extends DataFlow::SourceNode { * Does not include members from superclasses. */ FunctionNode getInstanceMember(string name, MemberKind kind) { - result = this.(ClassNode::Range).getInstanceMember(name, kind) + result = super.getInstanceMember(name, kind) } /** @@ -894,35 +888,31 @@ class ClassNode extends DataFlow::SourceNode { * * Does not include members from superclasses. */ - FunctionNode getAnInstanceMember(MemberKind kind) { - result = this.(ClassNode::Range).getAnInstanceMember(kind) - } + FunctionNode getAnInstanceMember(MemberKind kind) { result = super.getAnInstanceMember(kind) } /** * Gets an instance method, getter, or setter declared in this class. * * Does not include members from superclasses. */ - FunctionNode getAnInstanceMember() { result = this.(ClassNode::Range).getAnInstanceMember(_) } + FunctionNode getAnInstanceMember() { result = super.getAnInstanceMember(_) } /** * Gets the static method declared in this class with the given name. */ - FunctionNode getStaticMethod(string name) { - result = this.(ClassNode::Range).getStaticMethod(name) - } + FunctionNode getStaticMethod(string name) { result = super.getStaticMethod(name) } /** * Gets a static method declared in this class. * * The constructor is not considered a static method. */ - FunctionNode getAStaticMethod() { result = this.(ClassNode::Range).getAStaticMethod() } + FunctionNode getAStaticMethod() { result = super.getAStaticMethod() } /** * Gets a dataflow node that refers to the superclass of this class. */ - DataFlow::Node getASuperClassNode() { result = this.(ClassNode::Range).getASuperClassNode() } + DataFlow::Node getASuperClassNode() { result = super.getASuperClassNode() } /** * Gets a direct super class of this class. @@ -1068,13 +1058,13 @@ class ClassNode extends DataFlow::SourceNode { * Gets the type annotation for the field `fieldName`, if any. */ TypeAnnotation getFieldTypeAnnotation(string fieldName) { - result = this.(ClassNode::Range).getFieldTypeAnnotation(fieldName) + result = super.getFieldTypeAnnotation(fieldName) } /** * Gets a decorator applied to this class. */ - DataFlow::Node getADecorator() { result = this.(ClassNode::Range).getADecorator() } + DataFlow::Node getADecorator() { result = super.getADecorator() } } module ClassNode { @@ -1360,9 +1350,7 @@ module ClassNode { * _.partial(fn, x, y, z) * ``` */ -class PartialInvokeNode extends DataFlow::Node { - PartialInvokeNode() { this instanceof PartialInvokeNode::Range } - +class PartialInvokeNode extends DataFlow::Node instanceof PartialInvokeNode::Range { /** Gets a node holding a callback invoked by this partial invocation node. */ DataFlow::Node getACallbackNode() { isPartialArgument(result, _, _) @@ -1374,26 +1362,26 @@ class PartialInvokeNode extends DataFlow::Node { * Holds if `argument` is passed as argument `index` to the function in `callback`. */ predicate isPartialArgument(DataFlow::Node callback, DataFlow::Node argument, int index) { - this.(PartialInvokeNode::Range).isPartialArgument(callback, argument, index) + super.isPartialArgument(callback, argument, index) } /** * Gets a node referring to a bound version of `callback` with `boundArgs` arguments bound. */ DataFlow::SourceNode getBoundFunction(DataFlow::Node callback, int boundArgs) { - result = this.(PartialInvokeNode::Range).getBoundFunction(callback, boundArgs) + result = super.getBoundFunction(callback, boundArgs) } /** * Gets the node holding the receiver to be passed to the bound function, if specified. */ - DataFlow::Node getBoundReceiver() { result = this.(PartialInvokeNode::Range).getBoundReceiver(_) } + DataFlow::Node getBoundReceiver() { result = super.getBoundReceiver(_) } /** * Gets the node holding the receiver to be passed to the bound function, if specified. */ DataFlow::Node getBoundReceiver(DataFlow::Node callback) { - result = this.(PartialInvokeNode::Range).getBoundReceiver(callback) + result = super.getBoundReceiver(callback) } } diff --git a/javascript/ql/lib/semmle/javascript/frameworks/Cheerio.qll b/javascript/ql/lib/semmle/javascript/frameworks/Cheerio.qll index 182f760ac04..beffe148ee3 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/Cheerio.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/Cheerio.qll @@ -32,8 +32,7 @@ module Cheerio { * Creation of `cheerio` object, a collection of virtual DOM elements * with an interface similar to that of a jQuery object. */ - class CheerioObjectCreation extends DataFlow::SourceNode { - CheerioObjectCreation() { this instanceof CheerioObjectCreation::Range } + class CheerioObjectCreation extends DataFlow::SourceNode instanceof CheerioObjectCreation::Range { } module CheerioObjectCreation { diff --git a/javascript/ql/lib/semmle/javascript/frameworks/ClientRequests.qll b/javascript/ql/lib/semmle/javascript/frameworks/ClientRequests.qll index f15821a403e..82670947d3d 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/ClientRequests.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/ClientRequests.qll @@ -18,23 +18,21 @@ import javascript * To model additional APIs, extend `ClientRequest::Range` and implement its abstract member * predicates. */ -class ClientRequest extends DataFlow::InvokeNode { - ClientRequest() { this instanceof ClientRequest::Range } - +class ClientRequest extends DataFlow::InvokeNode instanceof ClientRequest::Range { /** * Gets the URL of the request. */ - DataFlow::Node getUrl() { result = this.(ClientRequest::Range).getUrl() } + DataFlow::Node getUrl() { result = super.getUrl() } /** * Gets the host of the request. */ - DataFlow::Node getHost() { result = this.(ClientRequest::Range).getHost() } + DataFlow::Node getHost() { result = super.getHost() } /** * Gets a node that contributes to the data-part this request. */ - DataFlow::Node getADataNode() { result = this.(ClientRequest::Range).getADataNode() } + DataFlow::Node getADataNode() { result = super.getADataNode() } /** * Gets a data flow node that refers to some representation of the response, possibly @@ -58,7 +56,7 @@ class ClientRequest extends DataFlow::InvokeNode { * - Any value provided by custom implementations of `ClientRequest::Range`. */ DataFlow::Node getAResponseDataNode(string responseType, boolean promise) { - result = this.(ClientRequest::Range).getAResponseDataNode(responseType, promise) + result = super.getAResponseDataNode(responseType, promise) } /** @@ -70,7 +68,7 @@ class ClientRequest extends DataFlow::InvokeNode { /** * Gets a data-flow node that determines where in the file-system the result of the request should be saved. */ - DataFlow::Node getASavePath() { result = this.(ClientRequest::Range).getASavePath() } + DataFlow::Node getASavePath() { result = super.getASavePath() } } deprecated class CustomClientRequest = ClientRequest::Range; diff --git a/javascript/ql/lib/semmle/javascript/frameworks/ComposedFunctions.qll b/javascript/ql/lib/semmle/javascript/frameworks/ComposedFunctions.qll index 4cd2c9e3c65..6887758b064 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/ComposedFunctions.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/ComposedFunctions.qll @@ -8,18 +8,14 @@ import javascript * A call to a function that constructs a function composition `f(g(h(...)))` from a * series of functions `f, g, h, ...`. */ -class FunctionCompositionCall extends DataFlow::CallNode { - FunctionCompositionCall() { this instanceof FunctionCompositionCall::Range } - +class FunctionCompositionCall extends DataFlow::CallNode instanceof FunctionCompositionCall::Range { /** * Gets the `i`th function in the composition `f(g(h(...)))`, counting from left to right. * * Note that this is the opposite of the order in which the function are invoked, * that is, `g` occurs later than `f` in `f(g(...))` but is invoked before `f`. */ - DataFlow::Node getOperandNode(int i) { - result = this.(FunctionCompositionCall::Range).getOperandNode(i) - } + DataFlow::Node getOperandNode(int i) { result = super.getOperandNode(i) } /** Gets a node holding one of the functions to be composed. */ final DataFlow::Node getAnOperandNode() { result = getOperandNode(_) } @@ -38,7 +34,7 @@ class FunctionCompositionCall extends DataFlow::CallNode { final DataFlow::FunctionNode getAnOperandFunction() { result = getOperandFunction(_) } /** Gets the number of functions being composed. */ - int getNumOperand() { result = this.(FunctionCompositionCall::Range).getNumOperand() } + int getNumOperand() { result = super.getNumOperand() } } /** diff --git a/javascript/ql/lib/semmle/javascript/frameworks/EventEmitter.qll b/javascript/ql/lib/semmle/javascript/frameworks/EventEmitter.qll index c428f070cd5..67b746e4473 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/EventEmitter.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/EventEmitter.qll @@ -68,42 +68,32 @@ module EventEmitter { * An EventEmitter instance that implements the EventEmitter API. * Extend EventEmitter::Range to mark something as being an EventEmitter. */ -class EventEmitter extends DataFlow::Node { - EventEmitter() { this instanceof EventEmitter::Range } -} +class EventEmitter extends DataFlow::Node instanceof EventEmitter::Range { } /** * A registration of an event handler on an EventEmitter. */ -class EventRegistration extends DataFlow::Node { - EventRegistration() { this instanceof EventRegistration::Range } - +class EventRegistration extends DataFlow::Node instanceof EventRegistration::Range { /** Gets the EventEmitter that the event handler is registered on. */ - final EventEmitter getEmitter() { result = this.(EventRegistration::Range).getEmitter() } + final EventEmitter getEmitter() { result = super.getEmitter() } /** Gets the name of the channel if possible. */ - string getChannel() { result = this.(EventRegistration::Range).getChannel() } + string getChannel() { result = super.getChannel() } /** Gets the `i`th parameter in the event handler. */ - DataFlow::Node getReceivedItem(int i) { - result = this.(EventRegistration::Range).getReceivedItem(i) - } + DataFlow::Node getReceivedItem(int i) { result = super.getReceivedItem(i) } /** * Gets a value that is returned by the event handler. * The default implementation is that no value can be returned. */ - DataFlow::Node getAReturnedValue() { - result = this.(EventRegistration::Range).getAReturnedValue() - } + DataFlow::Node getAReturnedValue() { result = super.getAReturnedValue() } /** * Get a dispatch that this event handler can return a value to. * The default implementation is that there exists no such dispatch. */ - EventDispatch getAReturnDispatch() { - result = this.(EventRegistration::Range).getAReturnDispatch() - } + EventDispatch getAReturnDispatch() { result = super.getAReturnDispatch() } } module EventRegistration { @@ -142,24 +132,22 @@ module EventRegistration { /** * A dispatch of an event on an EventEmitter. */ -class EventDispatch extends DataFlow::Node { - EventDispatch() { this instanceof EventDispatch::Range } - +class EventDispatch extends DataFlow::Node instanceof EventDispatch::Range { /** Gets the emitter that the event dispatch happens on. */ - EventEmitter getEmitter() { result = this.(EventDispatch::Range).getEmitter() } + EventEmitter getEmitter() { result = super.getEmitter() } /** Gets the name of the channel if possible. */ - string getChannel() { result = this.(EventDispatch::Range).getChannel() } + string getChannel() { result = super.getChannel() } /** Gets the `i`th argument that is send to the event handler. */ - DataFlow::Node getSentItem(int i) { result = this.(EventDispatch::Range).getSentItem(i) } + DataFlow::Node getSentItem(int i) { result = super.getSentItem(i) } /** * Get an EventRegistration that this event dispatch can send an event to. * The default implementation is that the emitters of the dispatch and registration have to be equal. * Channels are by default ignored. */ - EventRegistration getAReceiver() { result = this.(EventDispatch::Range).getAReceiver() } + EventRegistration getAReceiver() { result = super.getAReceiver() } } module EventDispatch { diff --git a/javascript/ql/lib/semmle/javascript/frameworks/HTTP.qll b/javascript/ql/lib/semmle/javascript/frameworks/HTTP.qll index 1154dff7452..94f9c4245b1 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/HTTP.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/HTTP.qll @@ -540,14 +540,12 @@ module HTTP { /** * An object that contains one or more potential route handlers. */ - class RouteHandlerCandidateContainer extends DataFlow::Node { - RouteHandlerCandidateContainer() { this instanceof RouteHandlerCandidateContainer::Range } - + class RouteHandlerCandidateContainer extends DataFlow::Node instanceof RouteHandlerCandidateContainer::Range { /** * Gets the route handler in this container that is accessed at `access`. */ DataFlow::SourceNode getRouteHandler(DataFlow::SourceNode access) { - result = this.(RouteHandlerCandidateContainer::Range).getRouteHandler(access) + result = super.getRouteHandler(access) } } diff --git a/javascript/ql/lib/semmle/javascript/frameworks/PropertyProjection.qll b/javascript/ql/lib/semmle/javascript/frameworks/PropertyProjection.qll index f6db62d5632..730669abfaf 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/PropertyProjection.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/PropertyProjection.qll @@ -14,18 +14,16 @@ import javascript * To model additional APIs, extend `PropertyProjection::Range` and implement its abstract member * predicates. */ -class PropertyProjection extends DataFlow::CallNode { - PropertyProjection() { this instanceof PropertyProjection::Range } - +class PropertyProjection extends DataFlow::CallNode instanceof PropertyProjection::Range { /** * Gets the argument for the object to project properties from, such as `o` in `_.get(o, 'a.b')`. */ - DataFlow::Node getObject() { result = this.(PropertyProjection::Range).getObject() } + DataFlow::Node getObject() { result = super.getObject() } /** * Gets an argument that selects the properties to project, such as `'a.b'` in `_.get(o, 'a.b')`. */ - DataFlow::Node getASelector() { result = this.(PropertyProjection::Range).getASelector() } + DataFlow::Node getASelector() { result = super.getASelector() } /** * Holds if this call returns the value of a single projected property, as opposed to an object that can contain multiple projected properties. @@ -34,7 +32,7 @@ class PropertyProjection extends DataFlow::CallNode { * - This predicate holds for `_.get({a: 'b'}, 'a')`, which returns `'b'`, * - This predicate does not hold for `_.pick({a: 'b', c: 'd'}}, 'a')`, which returns `{a: 'b'}`, */ - predicate isSingletonProjection() { this.(PropertyProjection::Range).isSingletonProjection() } + predicate isSingletonProjection() { super.isSingletonProjection() } } module PropertyProjection { diff --git a/javascript/ql/lib/semmle/javascript/frameworks/Redux.qll b/javascript/ql/lib/semmle/javascript/frameworks/Redux.qll index cc14e88712a..d26982cef7f 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/Redux.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/Redux.qll @@ -56,9 +56,7 @@ module Redux { /** * Creation of a redux store, usually via a call to `createStore`. */ - class StoreCreation extends DataFlow::SourceNode { - StoreCreation() { this instanceof StoreCreation::Range } - + class StoreCreation extends DataFlow::SourceNode instanceof StoreCreation::Range { /** Gets a reference to the store. */ DataFlow::SourceNode ref() { result = asApiNode().getAUse() } @@ -66,7 +64,7 @@ module Redux { API::Node asApiNode() { result.getAnImmediateUse() = this } /** Gets the data flow node holding the root reducer for this store. */ - DataFlow::Node getReducerArg() { result = this.(StoreCreation::Range).getReducerArg() } + DataFlow::Node getReducerArg() { result = super.getReducerArg() } /** Gets a data flow node referring to the root reducer. */ DataFlow::SourceNode getAReducerSource() { result = getReducerArg().(ReducerArg).getASource() } @@ -421,11 +419,9 @@ module Redux { * Some action creators dispatch the action to a store, while for others, the value is returned and it is simply assumed to be dispatched * at some point. We model all action creators as if they dispatch the action they create. */ - class ActionCreator extends DataFlow::SourceNode { - ActionCreator() { this instanceof ActionCreator::Range } - + class ActionCreator extends DataFlow::SourceNode instanceof ActionCreator::Range { /** Gets the `type` property of actions created by this action creator, if it is known. */ - string getTypeTag() { result = this.(ActionCreator::Range).getTypeTag() } + string getTypeTag() { result = super.getTypeTag() } /** * Gets the middleware function that transforms arguments passed to this function into the @@ -438,7 +434,7 @@ module Redux { * the action payload. Otherwise, the return value is the payload itself. */ DataFlow::FunctionNode getMiddlewareFunction(boolean async) { - result = this.(ActionCreator::Range).getMiddlewareFunction(async) + result = super.getMiddlewareFunction(async) } /** Gets a data flow node referring to this action creator. */ diff --git a/javascript/ql/lib/semmle/javascript/frameworks/ShellJS.qll b/javascript/ql/lib/semmle/javascript/frameworks/ShellJS.qll index 385243436a1..4ba780b0480 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/ShellJS.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/ShellJS.qll @@ -14,11 +14,9 @@ module ShellJS { } /** A member of the `shelljs` library. */ - class Member extends DataFlow::SourceNode { - Member() { this instanceof Member::Range } - + class Member extends DataFlow::SourceNode instanceof Member::Range { /** Gets the name of `shelljs` member being referenced, such as `cat` in `shelljs.cat`. */ - string getName() { result = this.(Member::Range).getName() } + string getName() { result = super.getName() } } module Member { From 39a88d2e4376b122ea9e665d8a07ff90e11a01ba Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Tue, 17 Aug 2021 14:32:07 +0200 Subject: [PATCH 181/741] Fix dispatch library to handle summarized callables with no runtime target --- .../code/csharp/dataflow/internal/DataFlowDispatch.qll | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/csharp/ql/src/semmle/code/csharp/dataflow/internal/DataFlowDispatch.qll b/csharp/ql/src/semmle/code/csharp/dataflow/internal/DataFlowDispatch.qll index 0f233d7e92d..d38975f24bb 100644 --- a/csharp/ql/src/semmle/code/csharp/dataflow/internal/DataFlowDispatch.qll +++ b/csharp/ql/src/semmle/code/csharp/dataflow/internal/DataFlowDispatch.qll @@ -8,6 +8,7 @@ private import FlowSummaryImpl as FlowSummaryImpl private import semmle.code.csharp.dataflow.FlowSummary private import semmle.code.csharp.dataflow.ExternalFlow private import semmle.code.csharp.dispatch.Dispatch +private import semmle.code.csharp.dispatch.RuntimeCallable private import semmle.code.csharp.frameworks.system.Collections private import semmle.code.csharp.frameworks.system.collections.Generic @@ -275,6 +276,10 @@ class NonDelegateDataFlowCall extends DataFlowCall, TNonDelegateCall { override DataFlowCallable getARuntimeTarget() { result = getCallableForDataFlow(dc.getADynamicTarget()) + or + result = dc.getAStaticTarget().getUnboundDeclaration() and + summarizedCallable(result) and + not result instanceof RuntimeCallable } override ControlFlow::Nodes::ElementNode getControlFlowNode() { result = cfn } From 270b56af1bb161684474cecf9e6895b30b785c7d Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Tue, 17 Aug 2021 14:32:45 +0200 Subject: [PATCH 182/741] Extend runtime callables to interface members with default implementation --- .../ql/src/semmle/code/csharp/dispatch/RuntimeCallable.qll | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/csharp/ql/src/semmle/code/csharp/dispatch/RuntimeCallable.qll b/csharp/ql/src/semmle/code/csharp/dispatch/RuntimeCallable.qll index 22758fce4ab..bb279fcb4fb 100644 --- a/csharp/ql/src/semmle/code/csharp/dispatch/RuntimeCallable.qll +++ b/csharp/ql/src/semmle/code/csharp/dispatch/RuntimeCallable.qll @@ -15,7 +15,10 @@ private import dotnet class RuntimeCallable extends DotNet::Callable { RuntimeCallable() { not this.(Modifiable).isAbstract() and - not getDeclaringType() instanceof Interface + ( + not getDeclaringType() instanceof Interface or + this.(Virtualizable).isVirtual() + ) } } From e3a49f82131acfa7e46ac79767447b86da349a27 Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Wed, 11 Aug 2021 11:02:04 +0200 Subject: [PATCH 183/741] C#: improve stubbing to escape more member names (not just fields) --- csharp/ql/src/Stubs/Stubs.qll | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/csharp/ql/src/Stubs/Stubs.qll b/csharp/ql/src/Stubs/Stubs.qll index 4a178980a52..c1815520486 100644 --- a/csharp/ql/src/Stubs/Stubs.qll +++ b/csharp/ql/src/Stubs/Stubs.qll @@ -759,8 +759,9 @@ private string stubMethod(Method m, Assembly assembly) { then result = " " + stubModifiers(m) + stubClassName(m.(Method).getReturnType()) + " " + - stubExplicitImplementation(m) + m.getName() + stubGenericMethodParams(m) + "(" + - stubParameters(m) + ")" + stubTypeParametersConstraints(m) + stubImplementation(m) + ";\n" + stubExplicitImplementation(m) + escapeIfKeyword(m.getName()) + stubGenericMethodParams(m) + + "(" + stubParameters(m) + ")" + stubTypeParametersConstraints(m) + stubImplementation(m) + + ";\n" else result = " // Stub generator skipped method: " + m.getName() + "\n" } @@ -786,7 +787,7 @@ pragma[noinline] private string stubEnumConstant(EnumConstant ec, Assembly assembly) { ec instanceof GeneratedMember and ec.getALocation() = assembly and - result = " " + ec.getName() + ",\n" + result = " " + escapeIfKeyword(ec.getName()) + ",\n" } pragma[noinline] @@ -795,7 +796,7 @@ private string stubProperty(Property p, Assembly assembly) { p.getALocation() = assembly and result = " " + stubModifiers(p) + stubClassName(p.getType()) + " " + stubExplicitImplementation(p) + - p.getName() + " { " + stubGetter(p) + stubSetter(p) + "}\n" + escapeIfKeyword(p.getName()) + " { " + stubGetter(p) + stubSetter(p) + "}\n" } pragma[noinline] @@ -810,7 +811,7 @@ private string stubConstructor(Constructor c, Assembly assembly) { c.getNumberOfParameters() > 0 then result = - " " + stubModifiers(c) + c.getName() + "(" + stubParameters(c) + ")" + + " " + stubModifiers(c) + escapeIfKeyword(c.getName()) + "(" + stubParameters(c) + ")" + stubConstructorInitializer(c) + " => throw null;\n" else result = " // Stub generator skipped constructor \n" } @@ -844,7 +845,7 @@ private string stubEvent(Event e, Assembly assembly) { e.getALocation() = assembly and result = " " + stubModifiers(e) + "event " + stubClassName(e.getType()) + " " + - stubExplicitImplementation(e) + e.getName() + stubEventAccessors(e) + "\n" + stubExplicitImplementation(e) + escapeIfKeyword(e.getName()) + stubEventAccessors(e) + "\n" } pragma[nomagic] From 43ccc14162754cca30cc2bb5a3526263e08b2d41 Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Wed, 11 Aug 2021 11:05:58 +0200 Subject: [PATCH 184/741] Add ServiceStack stubs and empty test referencing it --- .../frameworks/ServiceStack/ServiceStack.cs | 9 + .../frameworks/ServiceStack/options | 1 + .../ServiceStack/remoteFlowSource.expected | 0 .../ServiceStack/remoteFlowSource.ql | 7 + .../5.11.0/ServiceStack.Client.cs | 1924 +++ .../5.11.0/ServiceStack.Client.csproj | 14 + .../5.11.0/ServiceStack.Common.cs | 5620 ++++++++ .../5.11.0/ServiceStack.Common.csproj | 14 + .../5.11.0/ServiceStack.Interfaces.cs | 5646 ++++++++ .../5.11.0/ServiceStack.Interfaces.csproj | 12 + .../5.11.0/ServiceStack.OrmLite.SqlServer.cs | 351 + .../ServiceStack.OrmLite.SqlServer.csproj | 15 + .../5.11.0/ServiceStack.OrmLite.cs | 3420 +++++ .../5.11.0/ServiceStack.OrmLite.csproj | 13 + .../5.11.0/ServiceStack.Redis.cs | 3016 ++++ .../5.11.0/ServiceStack.Redis.csproj | 13 + .../5.11.0/ServiceStack.Text.cs | 3867 ++++++ .../5.11.0/ServiceStack.Text.csproj | 12 + .../stubs/ServiceStack/5.11.0/ServiceStack.cs | 11544 ++++++++++++++++ .../ServiceStack/5.11.0/ServiceStack.csproj | 18 + .../4.7.0/System.Drawing.Common.cs | 3168 +++++ .../4.7.0/System.Drawing.Common.csproj | 12 + 22 files changed, 38696 insertions(+) create mode 100644 csharp/ql/test/library-tests/frameworks/ServiceStack/ServiceStack.cs create mode 100644 csharp/ql/test/library-tests/frameworks/ServiceStack/options create mode 100644 csharp/ql/test/library-tests/frameworks/ServiceStack/remoteFlowSource.expected create mode 100644 csharp/ql/test/library-tests/frameworks/ServiceStack/remoteFlowSource.ql create mode 100644 csharp/ql/test/resources/stubs/ServiceStack.Client/5.11.0/ServiceStack.Client.cs create mode 100644 csharp/ql/test/resources/stubs/ServiceStack.Client/5.11.0/ServiceStack.Client.csproj create mode 100644 csharp/ql/test/resources/stubs/ServiceStack.Common/5.11.0/ServiceStack.Common.cs create mode 100644 csharp/ql/test/resources/stubs/ServiceStack.Common/5.11.0/ServiceStack.Common.csproj create mode 100644 csharp/ql/test/resources/stubs/ServiceStack.Interfaces/5.11.0/ServiceStack.Interfaces.cs create mode 100644 csharp/ql/test/resources/stubs/ServiceStack.Interfaces/5.11.0/ServiceStack.Interfaces.csproj create mode 100644 csharp/ql/test/resources/stubs/ServiceStack.OrmLite.SqlServer/5.11.0/ServiceStack.OrmLite.SqlServer.cs create mode 100644 csharp/ql/test/resources/stubs/ServiceStack.OrmLite.SqlServer/5.11.0/ServiceStack.OrmLite.SqlServer.csproj create mode 100644 csharp/ql/test/resources/stubs/ServiceStack.OrmLite/5.11.0/ServiceStack.OrmLite.cs create mode 100644 csharp/ql/test/resources/stubs/ServiceStack.OrmLite/5.11.0/ServiceStack.OrmLite.csproj create mode 100644 csharp/ql/test/resources/stubs/ServiceStack.Redis/5.11.0/ServiceStack.Redis.cs create mode 100644 csharp/ql/test/resources/stubs/ServiceStack.Redis/5.11.0/ServiceStack.Redis.csproj create mode 100644 csharp/ql/test/resources/stubs/ServiceStack.Text/5.11.0/ServiceStack.Text.cs create mode 100644 csharp/ql/test/resources/stubs/ServiceStack.Text/5.11.0/ServiceStack.Text.csproj create mode 100644 csharp/ql/test/resources/stubs/ServiceStack/5.11.0/ServiceStack.cs create mode 100644 csharp/ql/test/resources/stubs/ServiceStack/5.11.0/ServiceStack.csproj create mode 100644 csharp/ql/test/resources/stubs/System.Drawing.Common/4.7.0/System.Drawing.Common.cs create mode 100644 csharp/ql/test/resources/stubs/System.Drawing.Common/4.7.0/System.Drawing.Common.csproj diff --git a/csharp/ql/test/library-tests/frameworks/ServiceStack/ServiceStack.cs b/csharp/ql/test/library-tests/frameworks/ServiceStack/ServiceStack.cs new file mode 100644 index 00000000000..ead17ae4813 --- /dev/null +++ b/csharp/ql/test/library-tests/frameworks/ServiceStack/ServiceStack.cs @@ -0,0 +1,9 @@ +using System.Collections.Generic; +using System.Linq; +using ServiceStack; + +namespace ServiceStackTest +{ + + +} diff --git a/csharp/ql/test/library-tests/frameworks/ServiceStack/options b/csharp/ql/test/library-tests/frameworks/ServiceStack/options new file mode 100644 index 00000000000..f2bcef4301f --- /dev/null +++ b/csharp/ql/test/library-tests/frameworks/ServiceStack/options @@ -0,0 +1 @@ +semmle-extractor-options: /nostdlib /noconfig --load-sources-from-project:../../../resources/stubs/ServiceStack/5.11.0/ServiceStack.csproj diff --git a/csharp/ql/test/library-tests/frameworks/ServiceStack/remoteFlowSource.expected b/csharp/ql/test/library-tests/frameworks/ServiceStack/remoteFlowSource.expected new file mode 100644 index 00000000000..e69de29bb2d diff --git a/csharp/ql/test/library-tests/frameworks/ServiceStack/remoteFlowSource.ql b/csharp/ql/test/library-tests/frameworks/ServiceStack/remoteFlowSource.ql new file mode 100644 index 00000000000..8bea4542dba --- /dev/null +++ b/csharp/ql/test/library-tests/frameworks/ServiceStack/remoteFlowSource.ql @@ -0,0 +1,7 @@ +import semmle.code.csharp.security.dataflow.flowsources.Remote + +from RemoteFlowSource source +where + source.getLocation().getFile().fromSource() and + not source.getLocation().getFile().getAbsolutePath().matches("%/resources/stubs/%") +select source, source.getSourceType() diff --git a/csharp/ql/test/resources/stubs/ServiceStack.Client/5.11.0/ServiceStack.Client.cs b/csharp/ql/test/resources/stubs/ServiceStack.Client/5.11.0/ServiceStack.Client.cs new file mode 100644 index 00000000000..2dc6766d47f --- /dev/null +++ b/csharp/ql/test/resources/stubs/ServiceStack.Client/5.11.0/ServiceStack.Client.cs @@ -0,0 +1,1924 @@ +// This file contains auto-generated code. + +namespace ServiceStack +{ + // Generated from `ServiceStack.AdminCreateUser` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class AdminCreateUser : ServiceStack.AdminUserBase, ServiceStack.IVerb, ServiceStack.IReturn, ServiceStack.IReturn, ServiceStack.IPost + { + public AdminCreateUser() => throw null; + public System.Collections.Generic.List Permissions { get => throw null; set => throw null; } + public System.Collections.Generic.List Roles { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.AdminDeleteUser` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class AdminDeleteUser : ServiceStack.IVerb, ServiceStack.IReturn, ServiceStack.IReturn, ServiceStack.IDelete + { + public AdminDeleteUser() => throw null; + public string Id { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.AdminDeleteUserResponse` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class AdminDeleteUserResponse : ServiceStack.IHasResponseStatus + { + public AdminDeleteUserResponse() => throw null; + public string Id { get => throw null; set => throw null; } + public ServiceStack.ResponseStatus ResponseStatus { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.AdminGetUser` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class AdminGetUser : ServiceStack.IVerb, ServiceStack.IReturn, ServiceStack.IReturn, ServiceStack.IGet + { + public AdminGetUser() => throw null; + public string Id { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.AdminQueryUsers` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class AdminQueryUsers : ServiceStack.IVerb, ServiceStack.IReturn, ServiceStack.IReturn, ServiceStack.IGet + { + public AdminQueryUsers() => throw null; + public string OrderBy { get => throw null; set => throw null; } + public string Query { get => throw null; set => throw null; } + public int? Skip { get => throw null; set => throw null; } + public int? Take { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.AdminUpdateUser` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class AdminUpdateUser : ServiceStack.AdminUserBase, ServiceStack.IVerb, ServiceStack.IReturn, ServiceStack.IReturn, ServiceStack.IPut + { + public System.Collections.Generic.List AddPermissions { get => throw null; set => throw null; } + public System.Collections.Generic.List AddRoles { get => throw null; set => throw null; } + public AdminUpdateUser() => throw null; + public string Id { get => throw null; set => throw null; } + public bool? LockUser { get => throw null; set => throw null; } + public System.Collections.Generic.List RemovePermissions { get => throw null; set => throw null; } + public System.Collections.Generic.List RemoveRoles { get => throw null; set => throw null; } + public bool? UnlockUser { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.AdminUserBase` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public abstract class AdminUserBase : ServiceStack.IMeta + { + protected AdminUserBase() => throw null; + public string DisplayName { get => throw null; set => throw null; } + public string Email { get => throw null; set => throw null; } + public string FirstName { get => throw null; set => throw null; } + public string LastName { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary Meta { get => throw null; set => throw null; } + public string Password { get => throw null; set => throw null; } + public string ProfileUrl { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary UserAuthProperties { get => throw null; set => throw null; } + public string UserName { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.AdminUserResponse` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class AdminUserResponse : ServiceStack.IHasResponseStatus + { + public AdminUserResponse() => throw null; + public string Id { get => throw null; set => throw null; } + public ServiceStack.ResponseStatus ResponseStatus { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary Result { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.AdminUsersResponse` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class AdminUsersResponse : ServiceStack.IHasResponseStatus + { + public AdminUsersResponse() => throw null; + public ServiceStack.ResponseStatus ResponseStatus { get => throw null; set => throw null; } + public System.Collections.Generic.List> Results { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.AesUtils` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class AesUtils + { + public const int BlockSize = default; + public const int BlockSizeBytes = default; + public static void CreateCryptAuthKeysAndIv(out System.Byte[] cryptKey, out System.Byte[] authKey, out System.Byte[] iv) => throw null; + public static System.Byte[] CreateIv() => throw null; + public static System.Byte[] CreateKey() => throw null; + public static void CreateKeyAndIv(out System.Byte[] cryptKey, out System.Byte[] iv) => throw null; + public static System.Security.Cryptography.SymmetricAlgorithm CreateSymmetricAlgorithm() => throw null; + public static string Decrypt(string encryptedBase64, System.Byte[] cryptKey, System.Byte[] iv) => throw null; + public static System.Byte[] Decrypt(System.Byte[] encryptedBytes, System.Byte[] cryptKey, System.Byte[] iv) => throw null; + public static string Encrypt(string text, System.Byte[] cryptKey, System.Byte[] iv) => throw null; + public static System.Byte[] Encrypt(System.Byte[] bytesToEncrypt, System.Byte[] cryptKey, System.Byte[] iv) => throw null; + public const int KeySize = default; + public const int KeySizeBytes = default; + } + + // Generated from `ServiceStack.AssignRoles` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class AssignRoles : ServiceStack.IVerb, ServiceStack.IReturn, ServiceStack.IReturn, ServiceStack.IPost, ServiceStack.IMeta + { + public AssignRoles() => throw null; + public System.Collections.Generic.Dictionary Meta { get => throw null; set => throw null; } + public System.Collections.Generic.List Permissions { get => throw null; set => throw null; } + public System.Collections.Generic.List Roles { get => throw null; set => throw null; } + public string UserName { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.AssignRolesResponse` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class AssignRolesResponse : ServiceStack.IMeta, ServiceStack.IHasResponseStatus + { + public System.Collections.Generic.List AllPermissions { get => throw null; set => throw null; } + public System.Collections.Generic.List AllRoles { get => throw null; set => throw null; } + public AssignRolesResponse() => throw null; + public System.Collections.Generic.Dictionary Meta { get => throw null; set => throw null; } + public ServiceStack.ResponseStatus ResponseStatus { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.AsyncServiceClient` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class AsyncServiceClient : ServiceStack.IHasVersion, ServiceStack.IHasSessionId, ServiceStack.IHasBearerToken + { + public bool AlwaysSendBasicAuthHeader { get => throw null; set => throw null; } + public AsyncServiceClient() => throw null; + public string BaseUri { get => throw null; set => throw null; } + public string BearerToken { get => throw null; set => throw null; } + public static int BufferSize; + public string ContentType { get => throw null; set => throw null; } + public System.Net.CookieContainer CookieContainer { get => throw null; set => throw null; } + public System.Net.ICredentials Credentials { get => throw null; set => throw null; } + public bool DisableAutoCompression { get => throw null; set => throw null; } + public static bool DisableTimer { get => throw null; set => throw null; } + public void Dispose() => throw null; + public bool EmulateHttpViaPost { get => throw null; set => throw null; } + public ServiceStack.ExceptionFilterDelegate ExceptionFilter { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary GetCookieValues() => throw null; + public static System.Action GlobalRequestFilter { get => throw null; set => throw null; } + public static System.Action GlobalResponseFilter { get => throw null; set => throw null; } + public System.Collections.Specialized.NameValueCollection Headers { get => throw null; set => throw null; } + public System.Action OnAuthenticationRequired { get => throw null; set => throw null; } + public ServiceStack.ProgressDelegate OnDownloadProgress { get => throw null; set => throw null; } + public ServiceStack.ProgressDelegate OnUploadProgress { get => throw null; set => throw null; } + public string Password { get => throw null; set => throw null; } + public System.Net.IWebProxy Proxy { get => throw null; set => throw null; } + public string RefreshToken { get => throw null; set => throw null; } + public string RefreshTokenUri { get => throw null; set => throw null; } + public string RequestCompressionType { get => throw null; set => throw null; } + public System.Action RequestFilter { get => throw null; set => throw null; } + public System.Action ResponseFilter { get => throw null; set => throw null; } + public ServiceStack.ResultsFilterDelegate ResultsFilter { get => throw null; set => throw null; } + public ServiceStack.ResultsFilterResponseDelegate ResultsFilterResponse { get => throw null; set => throw null; } + public System.Threading.Tasks.Task SendAsync(string httpMethod, string absoluteUrl, object request, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public string SessionId { get => throw null; set => throw null; } + public void SetCredentials(string userName, string password) => throw null; + public bool ShareCookiesWithBrowser { get => throw null; set => throw null; } + public bool StoreCookies { get => throw null; set => throw null; } + public ServiceStack.Web.StreamDeserializerDelegate StreamDeserializer { get => throw null; set => throw null; } + public ServiceStack.Web.StreamSerializerDelegate StreamSerializer { get => throw null; set => throw null; } + public System.TimeSpan? Timeout { get => throw null; set => throw null; } + public bool UseTokenCookie { get => throw null; set => throw null; } + public string UserAgent { get => throw null; set => throw null; } + public string UserName { get => throw null; set => throw null; } + public int Version { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.AsyncTimer` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class AsyncTimer : System.IDisposable, ServiceStack.ITimer + { + public AsyncTimer(System.Threading.Timer timer) => throw null; + public void Cancel() => throw null; + public void Dispose() => throw null; + public System.Threading.Timer Timer; + } + + // Generated from `ServiceStack.Authenticate` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class Authenticate : ServiceStack.IVerb, ServiceStack.IReturn, ServiceStack.IReturn, ServiceStack.IPost, ServiceStack.IMeta + { + public string AccessToken { get => throw null; set => throw null; } + public string AccessTokenSecret { get => throw null; set => throw null; } + public Authenticate() => throw null; + public string ErrorView { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary Meta { get => throw null; set => throw null; } + public string Password { get => throw null; set => throw null; } + public bool? RememberMe { get => throw null; set => throw null; } + public string State { get => throw null; set => throw null; } + public bool? UseTokenCookie { get => throw null; set => throw null; } + public string UserName { get => throw null; set => throw null; } + public string cnonce { get => throw null; set => throw null; } + public string nc { get => throw null; set => throw null; } + public string nonce { get => throw null; set => throw null; } + public string oauth_token { get => throw null; set => throw null; } + public string oauth_verifier { get => throw null; set => throw null; } + public string provider { get => throw null; set => throw null; } + public string qop { get => throw null; set => throw null; } + public string response { get => throw null; set => throw null; } + public string scope { get => throw null; set => throw null; } + public string uri { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.AuthenticateResponse` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class AuthenticateResponse : ServiceStack.IMeta, ServiceStack.IHasSessionId, ServiceStack.IHasBearerToken + { + public AuthenticateResponse() => throw null; + public string BearerToken { get => throw null; set => throw null; } + public string DisplayName { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary Meta { get => throw null; set => throw null; } + public System.Collections.Generic.List Permissions { get => throw null; set => throw null; } + public string ProfileUrl { get => throw null; set => throw null; } + public string ReferrerUrl { get => throw null; set => throw null; } + public string RefreshToken { get => throw null; set => throw null; } + public ServiceStack.ResponseStatus ResponseStatus { get => throw null; set => throw null; } + public System.Collections.Generic.List Roles { get => throw null; set => throw null; } + public string SessionId { get => throw null; set => throw null; } + public string UserId { get => throw null; set => throw null; } + public string UserName { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.AuthenticationException` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class AuthenticationException : System.Exception, ServiceStack.IHasStatusCode + { + public AuthenticationException(string message, System.Exception innerException) => throw null; + public AuthenticationException(string message) => throw null; + public AuthenticationException() => throw null; + public int StatusCode { get => throw null; } + } + + // Generated from `ServiceStack.AuthenticationInfo` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class AuthenticationInfo + { + public AuthenticationInfo(string authHeader) => throw null; + public override string ToString() => throw null; + public string cnonce { get => throw null; set => throw null; } + public string method { get => throw null; set => throw null; } + public int nc { get => throw null; set => throw null; } + public string nonce { get => throw null; set => throw null; } + public string opaque { get => throw null; set => throw null; } + public string qop { get => throw null; set => throw null; } + public string realm { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.CachedServiceClient` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class CachedServiceClient : System.IDisposable, ServiceStack.IServiceGatewayAsync, ServiceStack.IServiceGateway, ServiceStack.IServiceClientSync, ServiceStack.IServiceClientCommon, ServiceStack.IServiceClientAsync, ServiceStack.IServiceClient, ServiceStack.IRestServiceClient, ServiceStack.IRestClientSync, ServiceStack.IRestClientAsync, ServiceStack.IRestClient, ServiceStack.IReplyClient, ServiceStack.IOneWayClient, ServiceStack.IHttpRestClientAsync, ServiceStack.IHasVersion, ServiceStack.IHasSessionId, ServiceStack.IHasBearerToken, ServiceStack.ICachedServiceClient + { + public void AddHeader(string name, string value) => throw null; + public string BearerToken { get => throw null; set => throw null; } + public int CacheCount { get => throw null; } + public System.Int64 CacheHits { get => throw null; } + public CachedServiceClient(ServiceStack.ServiceClientBase client, System.Collections.Concurrent.ConcurrentDictionary cache) => throw null; + public CachedServiceClient(ServiceStack.ServiceClientBase client) => throw null; + public System.Int64 CachesAdded { get => throw null; } + public System.Int64 CachesRemoved { get => throw null; } + public int CleanCachesWhenCountExceeds { get => throw null; set => throw null; } + public System.TimeSpan? ClearCachesOlderThan { get => throw null; set => throw null; } + public void ClearCookies() => throw null; + public System.TimeSpan? ClearExpiredCachesOlderThan { get => throw null; set => throw null; } + public void CustomMethod(string httpVerb, ServiceStack.IReturnVoid requestDto) => throw null; + public TResponse CustomMethod(string httpVerb, object requestDto) => throw null; + public TResponse CustomMethod(string httpVerb, ServiceStack.IReturn requestDto) => throw null; + public System.Threading.Tasks.Task CustomMethodAsync(string httpVerb, string relativeOrAbsoluteUrl, object request, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task CustomMethodAsync(string httpVerb, object requestDto, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task CustomMethodAsync(string httpVerb, ServiceStack.IReturn requestDto, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task CustomMethodAsync(string httpVerb, ServiceStack.IReturnVoid requestDto, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public void Delete(ServiceStack.IReturnVoid requestDto) => throw null; + public TResponse Delete(string relativeOrAbsoluteUrl) => throw null; + public TResponse Delete(object request) => throw null; + public TResponse Delete(ServiceStack.IReturn request) => throw null; + public System.Threading.Tasks.Task DeleteAsync(string relativeOrAbsoluteUrl, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task DeleteAsync(object requestDto, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task DeleteAsync(ServiceStack.IReturn requestDto, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task DeleteAsync(ServiceStack.IReturnVoid requestDto, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public void Dispose() => throw null; + public System.Int64 ErrorFallbackHits { get => throw null; } + public void Get(ServiceStack.IReturnVoid request) => throw null; + public TResponse Get(string relativeOrAbsoluteUrl) => throw null; + public TResponse Get(object requestDto) => throw null; + public TResponse Get(ServiceStack.IReturn requestDto) => throw null; + public System.Threading.Tasks.Task GetAsync(string relativeOrAbsoluteUrl, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task GetAsync(object requestDto, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task GetAsync(ServiceStack.IReturn requestDto, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task GetAsync(ServiceStack.IReturnVoid requestDto, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Collections.Generic.Dictionary GetCookieValues() => throw null; + public System.Collections.Generic.IEnumerable GetLazy(ServiceStack.IReturn> queryDto) => throw null; + public System.Int64 NotModifiedHits { get => throw null; } + public object OnExceptionFilter(System.Net.WebException webEx, System.Net.WebResponse webRes, string requestUri, System.Type responseType) => throw null; + public void Patch(ServiceStack.IReturnVoid requestDto) => throw null; + public TResponse Patch(string relativeOrAbsoluteUrl, object requestDto) => throw null; + public TResponse Patch(object requestDto) => throw null; + public TResponse Patch(ServiceStack.IReturn requestDto) => throw null; + public System.Threading.Tasks.Task PatchAsync(object requestDto, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task PatchAsync(ServiceStack.IReturn requestDto, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task PatchAsync(ServiceStack.IReturnVoid requestDto, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public void Post(ServiceStack.IReturnVoid requestDto) => throw null; + public TResponse Post(string relativeOrAbsoluteUrl, object request) => throw null; + public TResponse Post(object requestDto) => throw null; + public TResponse Post(ServiceStack.IReturn requestDto) => throw null; + public System.Threading.Tasks.Task PostAsync(string relativeOrAbsoluteUrl, object request, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task PostAsync(object requestDto, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task PostAsync(ServiceStack.IReturn requestDto, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task PostAsync(ServiceStack.IReturnVoid requestDto, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public TResponse PostFile(string relativeOrAbsoluteUrl, System.IO.Stream fileToUpload, string fileName, string mimeType) => throw null; + public TResponse PostFileWithRequest(string relativeOrAbsoluteUrl, System.IO.Stream fileToUpload, string fileName, object request, string fieldName = default(string)) => throw null; + public TResponse PostFileWithRequest(System.IO.Stream fileToUpload, string fileName, object request, string fieldName = default(string)) => throw null; + public TResponse PostFilesWithRequest(string relativeOrAbsoluteUrl, object request, System.Collections.Generic.IEnumerable files) => throw null; + public TResponse PostFilesWithRequest(object request, System.Collections.Generic.IEnumerable files) => throw null; + public void Publish(object requestDto) => throw null; + public void PublishAll(System.Collections.Generic.IEnumerable requestDtos) => throw null; + public System.Threading.Tasks.Task PublishAllAsync(System.Collections.Generic.IEnumerable requestDtos, System.Threading.CancellationToken token) => throw null; + public System.Threading.Tasks.Task PublishAsync(object requestDto, System.Threading.CancellationToken token) => throw null; + public void Put(ServiceStack.IReturnVoid requestDto) => throw null; + public TResponse Put(string relativeOrAbsoluteUrl, object requestDto) => throw null; + public TResponse Put(object requestDto) => throw null; + public TResponse Put(ServiceStack.IReturn requestDto) => throw null; + public System.Threading.Tasks.Task PutAsync(string relativeOrAbsoluteUrl, object request, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task PutAsync(object requestDto, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task PutAsync(ServiceStack.IReturn requestDto, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task PutAsync(ServiceStack.IReturnVoid requestDto, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public int RemoveCachesOlderThan(System.TimeSpan age) => throw null; + public int RemoveExpiredCachesOlderThan(System.TimeSpan age) => throw null; + public TResponse Send(string httpMethod, string relativeOrAbsoluteUrl, object request) => throw null; + public TResponse Send(object request) => throw null; + public System.Collections.Generic.List SendAll(System.Collections.Generic.IEnumerable requests) => throw null; + public System.Threading.Tasks.Task> SendAllAsync(System.Collections.Generic.IEnumerable requests, System.Threading.CancellationToken token) => throw null; + public void SendAllOneWay(System.Collections.Generic.IEnumerable requests) => throw null; + public System.Threading.Tasks.Task SendAsync(string httpMethod, string absoluteUrl, object request, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task SendAsync(object requestDto, System.Threading.CancellationToken token) => throw null; + public void SendOneWay(string relativeOrAbsoluteUri, object requestDto) => throw null; + public void SendOneWay(object requestDto) => throw null; + public string SessionId { get => throw null; set => throw null; } + public void SetCache(System.Collections.Concurrent.ConcurrentDictionary cache) => throw null; + public void SetCookie(string name, string value, System.TimeSpan? expiresIn = default(System.TimeSpan?)) => throw null; + public void SetCredentials(string userName, string password) => throw null; + public int Version { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.CachedServiceClientExtensions` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class CachedServiceClientExtensions + { + public static ServiceStack.IServiceClient WithCache(this ServiceStack.ServiceClientBase client, System.Collections.Concurrent.ConcurrentDictionary cache) => throw null; + public static ServiceStack.IServiceClient WithCache(this ServiceStack.ServiceClientBase client) => throw null; + } + + // Generated from `ServiceStack.CancelRequest` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class CancelRequest : ServiceStack.IVerb, ServiceStack.IReturn, ServiceStack.IReturn, ServiceStack.IPost, ServiceStack.IMeta + { + public CancelRequest() => throw null; + public System.Collections.Generic.Dictionary Meta { get => throw null; set => throw null; } + public string Tag { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.CancelRequestResponse` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class CancelRequestResponse : ServiceStack.IMeta, ServiceStack.IHasResponseStatus + { + public CancelRequestResponse() => throw null; + public System.TimeSpan Elapsed { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary Meta { get => throw null; set => throw null; } + public ServiceStack.ResponseStatus ResponseStatus { get => throw null; set => throw null; } + public string Tag { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.CheckCrudEvents` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class CheckCrudEvents : ServiceStack.IReturn, ServiceStack.IReturn + { + public string AuthSecret { get => throw null; set => throw null; } + public CheckCrudEvents() => throw null; + public System.Collections.Generic.List Ids { get => throw null; set => throw null; } + public string Model { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.CheckCrudEventsResponse` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class CheckCrudEventsResponse : ServiceStack.IHasResponseStatus + { + public CheckCrudEventsResponse() => throw null; + public ServiceStack.ResponseStatus ResponseStatus { get => throw null; set => throw null; } + public System.Collections.Generic.List Results { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.ClientConfig` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class ClientConfig + { + public static void ConfigureTls12() => throw null; + public static string DefaultEncodeDispositionFileName(string fileName) => throw null; + public static System.Func EncodeDispositionFileName { get => throw null; set => throw null; } + public static bool SkipEmptyArrays { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.ClientFactory` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class ClientFactory + { + public static ServiceStack.IOneWayClient Create(string endpointUrl) => throw null; + } + + // Generated from `ServiceStack.ContentFormat` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class ContentFormat + { + public static System.Collections.Generic.Dictionary ContentTypeAliases; + public static string GetContentFormat(string contentType) => throw null; + public static string GetContentFormat(ServiceStack.Format format) => throw null; + public static ServiceStack.RequestAttributes GetEndpointAttributes(string contentType) => throw null; + public static string GetRealContentType(string contentType) => throw null; + public static ServiceStack.RequestAttributes GetRequestAttribute(string httpMethod) => throw null; + public static bool IsBinary(this string contentType) => throw null; + public static bool MatchesContentType(this string contentType, string matchesContentType) => throw null; + public static string NormalizeContentType(string contentType) => throw null; + public static string ToContentFormat(this string contentType) => throw null; + public static string ToContentType(this ServiceStack.Format formats) => throw null; + public static ServiceStack.Feature ToFeature(this string contentType) => throw null; + public const string Utf8Suffix = default; + } + + // Generated from `ServiceStack.ConvertSessionToToken` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ConvertSessionToToken : ServiceStack.IVerb, ServiceStack.IReturn, ServiceStack.IReturn, ServiceStack.IPost, ServiceStack.IMeta + { + public ConvertSessionToToken() => throw null; + public System.Collections.Generic.Dictionary Meta { get => throw null; set => throw null; } + public bool PreserveSession { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.ConvertSessionToTokenResponse` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ConvertSessionToTokenResponse : ServiceStack.IMeta + { + public string AccessToken { get => throw null; set => throw null; } + public ConvertSessionToTokenResponse() => throw null; + public System.Collections.Generic.Dictionary Meta { get => throw null; set => throw null; } + public string RefreshToken { get => throw null; set => throw null; } + public ServiceStack.ResponseStatus ResponseStatus { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.CrudEvent` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class CrudEvent : ServiceStack.IMeta + { + public CrudEvent() => throw null; + public System.DateTime EventDate { get => throw null; set => throw null; } + public string EventType { get => throw null; set => throw null; } + public System.Int64 Id { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary Meta { get => throw null; set => throw null; } + public string Model { get => throw null; set => throw null; } + public string ModelId { get => throw null; set => throw null; } + public int? RefId { get => throw null; set => throw null; } + public string RefIdStr { get => throw null; set => throw null; } + public string RemoteIp { get => throw null; set => throw null; } + public string RequestBody { get => throw null; set => throw null; } + public string RequestType { get => throw null; set => throw null; } + public System.Int64? RowsUpdated { get => throw null; set => throw null; } + public string Urn { get => throw null; set => throw null; } + public string UserAuthId { get => throw null; set => throw null; } + public string UserAuthName { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.CsvServiceClient` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class CsvServiceClient : ServiceStack.ServiceClientBase + { + public override string ContentType { get => throw null; } + public CsvServiceClient(string syncReplyBaseUri, string asyncOneWayBaseUri) => throw null; + public CsvServiceClient(string baseUri) => throw null; + public CsvServiceClient() => throw null; + public override T DeserializeFromStream(System.IO.Stream stream) => throw null; + public override string Format { get => throw null; } + public override void SerializeToStream(ServiceStack.Web.IRequest req, object request, System.IO.Stream stream) => throw null; + public override ServiceStack.Web.StreamDeserializerDelegate StreamDeserializer { get => throw null; } + } + + // Generated from `ServiceStack.DynamicRequest` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class DynamicRequest + { + public DynamicRequest() => throw null; + public System.Collections.Generic.Dictionary Params { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.EncryptedMessage` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class EncryptedMessage : ServiceStack.IReturn, ServiceStack.IReturn + { + public string EncryptedBody { get => throw null; set => throw null; } + public EncryptedMessage() => throw null; + public string EncryptedSymmetricKey { get => throw null; set => throw null; } + public string KeyId { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.EncryptedMessageResponse` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class EncryptedMessageResponse + { + public string EncryptedBody { get => throw null; set => throw null; } + public EncryptedMessageResponse() => throw null; + } + + // Generated from `ServiceStack.EncryptedServiceClient` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class EncryptedServiceClient : ServiceStack.IServiceGateway, ServiceStack.IReplyClient, ServiceStack.IHasVersion, ServiceStack.IHasSessionId, ServiceStack.IHasBearerToken, ServiceStack.IEncryptedClient + { + public string BearerToken { get => throw null; set => throw null; } + public ServiceStack.IJsonServiceClient Client { get => throw null; set => throw null; } + public ServiceStack.EncryptedMessage CreateEncryptedMessage(object request, string operationName, System.Byte[] cryptKey, System.Byte[] authKey, System.Byte[] iv, string verb = default(string)) => throw null; + public ServiceStack.WebServiceException DecryptedException(ServiceStack.WebServiceException ex, System.Byte[] cryptKey, System.Byte[] authKey) => throw null; + public EncryptedServiceClient(ServiceStack.IJsonServiceClient client, string publicKeyXml) => throw null; + public EncryptedServiceClient(ServiceStack.IJsonServiceClient client, System.Security.Cryptography.RSAParameters publicKey) => throw null; + public string KeyId { get => throw null; set => throw null; } + public System.Security.Cryptography.RSAParameters PublicKey { get => throw null; set => throw null; } + public void Publish(object request) => throw null; + public void PublishAll(System.Collections.Generic.IEnumerable requests) => throw null; + public TResponse Send(string httpMethod, object request) => throw null; + public TResponse Send(string httpMethod, ServiceStack.IReturn request) => throw null; + public TResponse Send(object request) => throw null; + public System.Collections.Generic.List SendAll(System.Collections.Generic.IEnumerable requests) => throw null; + public string ServerPublicKeyXml { get => throw null; set => throw null; } + public string SessionId { get => throw null; set => throw null; } + public int Version { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.ExceptionFilterDelegate` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public delegate object ExceptionFilterDelegate(System.Net.WebException webEx, System.Net.WebResponse webResponse, string requestUri, System.Type responseType); + + // Generated from `ServiceStack.FileContent` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class FileContent + { + public System.Byte[] Body { get => throw null; set => throw null; } + public FileContent() => throw null; + public int Length { get => throw null; set => throw null; } + public string Name { get => throw null; set => throw null; } + public ServiceStack.ResponseStatus ResponseStatus { get => throw null; set => throw null; } + public string Type { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.GetAccessToken` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class GetAccessToken : ServiceStack.IVerb, ServiceStack.IReturn, ServiceStack.IReturn, ServiceStack.IPost, ServiceStack.IMeta + { + public GetAccessToken() => throw null; + public System.Collections.Generic.Dictionary Meta { get => throw null; set => throw null; } + public string RefreshToken { get => throw null; set => throw null; } + public bool? UseTokenCookie { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.GetAccessTokenResponse` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class GetAccessTokenResponse : ServiceStack.IMeta, ServiceStack.IHasResponseStatus + { + public string AccessToken { get => throw null; set => throw null; } + public GetAccessTokenResponse() => throw null; + public System.Collections.Generic.Dictionary Meta { get => throw null; set => throw null; } + public ServiceStack.ResponseStatus ResponseStatus { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.GetApiKeys` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class GetApiKeys : ServiceStack.IVerb, ServiceStack.IReturn, ServiceStack.IReturn, ServiceStack.IMeta, ServiceStack.IGet + { + public string Environment { get => throw null; set => throw null; } + public GetApiKeys() => throw null; + public System.Collections.Generic.Dictionary Meta { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.GetApiKeysResponse` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class GetApiKeysResponse : ServiceStack.IMeta, ServiceStack.IHasResponseStatus + { + public GetApiKeysResponse() => throw null; + public System.Collections.Generic.Dictionary Meta { get => throw null; set => throw null; } + public ServiceStack.ResponseStatus ResponseStatus { get => throw null; set => throw null; } + public System.Collections.Generic.List Results { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.GetCrudEvents` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class GetCrudEvents : ServiceStack.QueryDb + { + public string AuthSecret { get => throw null; set => throw null; } + public GetCrudEvents() => throw null; + public string Model { get => throw null; set => throw null; } + public string ModelId { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.GetEventSubscribers` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class GetEventSubscribers : ServiceStack.IVerb, ServiceStack.IReturn>>, ServiceStack.IReturn, ServiceStack.IGet + { + public string[] Channels { get => throw null; set => throw null; } + public GetEventSubscribers() => throw null; + } + + // Generated from `ServiceStack.GetFile` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class GetFile : ServiceStack.IVerb, ServiceStack.IReturn, ServiceStack.IReturn, ServiceStack.IGet + { + public GetFile() => throw null; + public string Path { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.GetNavItems` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class GetNavItems : ServiceStack.IReturn, ServiceStack.IReturn + { + public GetNavItems() => throw null; + public string Name { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.GetNavItemsResponse` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class GetNavItemsResponse : ServiceStack.IMeta + { + public string BaseUrl { get => throw null; set => throw null; } + public GetNavItemsResponse() => throw null; + public System.Collections.Generic.Dictionary Meta { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary> NavItemsMap { get => throw null; set => throw null; } + public ServiceStack.ResponseStatus ResponseStatus { get => throw null; set => throw null; } + public System.Collections.Generic.List Results { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.GetPublicKey` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class GetPublicKey : ServiceStack.IReturn, ServiceStack.IReturn + { + public GetPublicKey() => throw null; + } + + // Generated from `ServiceStack.GetValidationRules` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class GetValidationRules : ServiceStack.IReturn, ServiceStack.IReturn + { + public string AuthSecret { get => throw null; set => throw null; } + public GetValidationRules() => throw null; + public string Type { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.GetValidationRulesResponse` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class GetValidationRulesResponse + { + public GetValidationRulesResponse() => throw null; + public ServiceStack.ResponseStatus ResponseStatus { get => throw null; set => throw null; } + public System.Collections.Generic.List Results { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.HashUtils` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class HashUtils + { + public static System.Security.Cryptography.HashAlgorithm GetHashAlgorithm(string hashAlgorithm) => throw null; + } + + // Generated from `ServiceStack.HmacUtils` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class HmacUtils + { + public static System.Byte[] Authenticate(System.Byte[] encryptedBytes, System.Byte[] authKey, System.Byte[] iv) => throw null; + public static System.Security.Cryptography.HMAC CreateHashAlgorithm(System.Byte[] authKey) => throw null; + public static System.Byte[] DecryptAuthenticated(System.Byte[] authEncryptedBytes, System.Byte[] cryptKey) => throw null; + public const int KeySize = default; + public const int KeySizeBytes = default; + public static bool Verify(System.Byte[] authEncryptedBytes, System.Byte[] authKey) => throw null; + } + + // Generated from `ServiceStack.HttpCacheEntry` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class HttpCacheEntry + { + public System.TimeSpan? Age { get => throw null; set => throw null; } + public bool CanUseCacheOnError() => throw null; + public System.Int64? ContentLength { get => throw null; set => throw null; } + public System.DateTime Created { get => throw null; set => throw null; } + public string ETag { get => throw null; set => throw null; } + public System.DateTime Expires { get => throw null; set => throw null; } + public bool HasExpired() => throw null; + public HttpCacheEntry(object response) => throw null; + public System.DateTime? LastModified { get => throw null; set => throw null; } + public System.TimeSpan MaxAge { get => throw null; set => throw null; } + public bool MustRevalidate { get => throw null; set => throw null; } + public bool NoCache { get => throw null; set => throw null; } + public object Response { get => throw null; set => throw null; } + public void SetMaxAge(System.TimeSpan maxAge) => throw null; + public bool ShouldRevalidate() => throw null; + } + + // Generated from `ServiceStack.HttpExt` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class HttpExt + { + public static string GetDispositionFileName(string fileName) => throw null; + public static bool HasNonAscii(string s) => throw null; + } + + // Generated from `ServiceStack.ICachedServiceClient` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface ICachedServiceClient : System.IDisposable, ServiceStack.IServiceGatewayAsync, ServiceStack.IServiceGateway, ServiceStack.IServiceClientSync, ServiceStack.IServiceClientCommon, ServiceStack.IServiceClientAsync, ServiceStack.IServiceClient, ServiceStack.IRestServiceClient, ServiceStack.IRestClientSync, ServiceStack.IRestClientAsync, ServiceStack.IRestClient, ServiceStack.IReplyClient, ServiceStack.IOneWayClient, ServiceStack.IHttpRestClientAsync, ServiceStack.IHasVersion, ServiceStack.IHasSessionId, ServiceStack.IHasBearerToken + { + int CacheCount { get; } + System.Int64 CacheHits { get; } + System.Int64 CachesAdded { get; } + System.Int64 CachesRemoved { get; } + System.Int64 ErrorFallbackHits { get; } + System.Int64 NotModifiedHits { get; } + int RemoveCachesOlderThan(System.TimeSpan age); + int RemoveExpiredCachesOlderThan(System.TimeSpan age); + void SetCache(System.Collections.Concurrent.ConcurrentDictionary cache); + } + + // Generated from `ServiceStack.ICachedServiceClientExtensions` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class ICachedServiceClientExtensions + { + public static void ClearCache(this ServiceStack.ICachedServiceClient client) => throw null; + public static System.Collections.Generic.Dictionary GetStats(this ServiceStack.ICachedServiceClient client) => throw null; + } + + // Generated from `ServiceStack.IHasCookieContainer` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IHasCookieContainer + { + System.Net.CookieContainer CookieContainer { get; } + } + + // Generated from `ServiceStack.IServiceClientMeta` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IServiceClientMeta + { + bool AlwaysSendBasicAuthHeader { get; } + string AsyncOneWayBaseUri { get; } + string BaseUri { get; set; } + string BearerToken { get; set; } + string Format { get; } + string Password { get; } + string RefreshToken { get; set; } + string RefreshTokenUri { get; set; } + string ResolveTypedUrl(string httpMethod, object requestDto); + string ResolveUrl(string httpMethod, string relativeOrAbsoluteUrl); + string SessionId { get; } + string SyncReplyBaseUri { get; } + string UserName { get; } + int Version { get; } + } + + // Generated from `ServiceStack.ITimer` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface ITimer : System.IDisposable + { + void Cancel(); + } + + // Generated from `ServiceStack.JsonServiceClient` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class JsonServiceClient : ServiceStack.ServiceClientBase, System.IDisposable, ServiceStack.IServiceGatewayAsync, ServiceStack.IServiceGateway, ServiceStack.IServiceClientSync, ServiceStack.IServiceClientCommon, ServiceStack.IServiceClientAsync, ServiceStack.IServiceClient, ServiceStack.IRestServiceClient, ServiceStack.IRestClientSync, ServiceStack.IRestClientAsync, ServiceStack.IRestClient, ServiceStack.IReplyClient, ServiceStack.IOneWayClient, ServiceStack.IJsonServiceClient, ServiceStack.IHttpRestClientAsync, ServiceStack.IHasVersion, ServiceStack.IHasSessionId, ServiceStack.IHasBearerToken + { + public override string ContentType { get => throw null; } + public override T DeserializeFromStream(System.IO.Stream stream) => throw null; + public override string Format { get => throw null; } + public JsonServiceClient(string syncReplyBaseUri, string asyncOneWayBaseUri) => throw null; + public JsonServiceClient(string baseUri) => throw null; + public JsonServiceClient() => throw null; + public override void SerializeToStream(ServiceStack.Web.IRequest req, object request, System.IO.Stream stream) => throw null; + public override ServiceStack.Web.StreamDeserializerDelegate StreamDeserializer { get => throw null; } + } + + // Generated from `ServiceStack.JsvServiceClient` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class JsvServiceClient : ServiceStack.ServiceClientBase + { + public override string ContentType { get => throw null; } + public override T DeserializeFromStream(System.IO.Stream stream) => throw null; + public override string Format { get => throw null; } + public JsvServiceClient(string syncReplyBaseUri, string asyncOneWayBaseUri) => throw null; + public JsvServiceClient(string baseUri) => throw null; + public JsvServiceClient() => throw null; + public override void SerializeToStream(ServiceStack.Web.IRequest req, object request, System.IO.Stream stream) => throw null; + public override ServiceStack.Web.StreamDeserializerDelegate StreamDeserializer { get => throw null; } + } + + // Generated from `ServiceStack.MessageExtensions` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class MessageExtensions + { + public static ServiceStack.Messaging.IMessageProducer CreateMessageProducer(this ServiceStack.Messaging.IMessageService mqServer) => throw null; + public static ServiceStack.Messaging.IMessageQueueClient CreateMessageQueueClient(this ServiceStack.Messaging.IMessageService mqServer) => throw null; + public static System.Byte[] ToBytes(this ServiceStack.Messaging.IMessage message) => throw null; + public static System.Byte[] ToBytes(this ServiceStack.Messaging.IMessage message) => throw null; + public static string ToDlqQueueName(this ServiceStack.Messaging.IMessage message) => throw null; + public static string ToInQueueName(this ServiceStack.Messaging.IMessage message) => throw null; + public static string ToInQueueName(this ServiceStack.Messaging.IMessage message) => throw null; + public static ServiceStack.Messaging.Message ToMessage(this System.Byte[] bytes) => throw null; + public static ServiceStack.Messaging.IMessage ToMessage(this System.Byte[] bytes, System.Type ofType) => throw null; + public static string ToString(System.Byte[] bytes) => throw null; + } + + // Generated from `ServiceStack.MetadataApp` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class MetadataApp + { + public MetadataApp() => throw null; + } + + // Generated from `ServiceStack.ModifyValidationRules` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ModifyValidationRules : ServiceStack.IReturnVoid, ServiceStack.IReturn + { + public string AuthSecret { get => throw null; set => throw null; } + public bool? ClearCache { get => throw null; set => throw null; } + public int[] DeleteRuleIds { get => throw null; set => throw null; } + public ModifyValidationRules() => throw null; + public System.Collections.Generic.List SaveRules { get => throw null; set => throw null; } + public int[] SuspendRuleIds { get => throw null; set => throw null; } + public int[] UnsuspendRuleIds { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.NameValueCollectionWrapperExtensions` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class NameValueCollectionWrapperExtensions + { + public static System.Collections.Generic.Dictionary ToDictionary(this System.Collections.Specialized.NameValueCollection nameValues) => throw null; + public static string ToFormUrlEncoded(this System.Collections.Specialized.NameValueCollection queryParams) => throw null; + public static System.Collections.Specialized.NameValueCollection ToNameValueCollection(this System.Collections.Generic.Dictionary map) => throw null; + } + + // Generated from `ServiceStack.NetStandardPclExportClient` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class NetStandardPclExportClient : ServiceStack.PclExportClient + { + public static ServiceStack.PclExportClient Configure() => throw null; + public override string GetHeader(System.Net.WebHeaderCollection headers, string name, System.Func valuePredicate) => throw null; + public NetStandardPclExportClient() => throw null; + public static ServiceStack.NetStandardPclExportClient Provider; + public override void SetIfModifiedSince(System.Net.HttpWebRequest webReq, System.DateTime lastModified) => throw null; + } + + // Generated from `ServiceStack.NewInstanceResolver` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class NewInstanceResolver : ServiceStack.Configuration.IResolver + { + public NewInstanceResolver() => throw null; + public T TryResolve() => throw null; + } + + // Generated from `ServiceStack.PclExportClient` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class PclExportClient + { + public virtual void AddHeader(System.Net.WebRequest webReq, System.Collections.Specialized.NameValueCollection headers) => throw null; + public virtual void CloseReadStream(System.IO.Stream stream) => throw null; + public virtual void CloseWriteStream(System.IO.Stream stream) => throw null; + public static void Configure(ServiceStack.PclExportClient instance) => throw null; + public static bool ConfigureProvider(string typeName) => throw null; + public virtual System.Exception CreateTimeoutException(System.Exception ex, string errorMsg) => throw null; + public virtual ServiceStack.ITimer CreateTimer(System.Threading.TimerCallback cb, System.TimeSpan timeOut, object state) => throw null; + public static System.Threading.Tasks.Task EmptyTask; + public virtual string GetHeader(System.Net.WebHeaderCollection headers, string name, System.Func valuePredicate) => throw null; + public virtual string HtmlAttributeEncode(string html) => throw null; + public virtual string HtmlDecode(string html) => throw null; + public virtual string HtmlEncode(string html) => throw null; + public static ServiceStack.PclExportClient Instance; + public virtual bool IsWebException(System.Net.WebException webEx) => throw null; + public System.Collections.Specialized.NameValueCollection NewNameValueCollection() => throw null; + public virtual System.Collections.Specialized.NameValueCollection ParseQueryString(string query) => throw null; + public PclExportClient() => throw null; + public virtual void RunOnUiThread(System.Action fn) => throw null; + public virtual void SetCookieContainer(System.Net.HttpWebRequest webRequest, ServiceStack.ServiceClientBase client) => throw null; + public virtual void SetCookieContainer(System.Net.HttpWebRequest webRequest, ServiceStack.AsyncServiceClient client) => throw null; + public virtual void SetIfModifiedSince(System.Net.HttpWebRequest webReq, System.DateTime lastModified) => throw null; + public virtual void SynchronizeCookies(ServiceStack.AsyncServiceClient client) => throw null; + public System.Threading.SynchronizationContext UiContext; + public virtual string UrlDecode(string url) => throw null; + public virtual string UrlEncode(string url) => throw null; + public virtual System.Threading.Tasks.Task WaitAsync(int waitForMs) => throw null; + } + + // Generated from `ServiceStack.PlatformRsaUtils` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class PlatformRsaUtils + { + public static System.Byte[] Decrypt(this System.Security.Cryptography.RSA rsa, System.Byte[] bytes) => throw null; + public static System.Byte[] Encrypt(this System.Security.Cryptography.RSA rsa, System.Byte[] bytes) => throw null; + public static string ExportToXml(System.Security.Cryptography.RSAParameters csp, bool includePrivateParameters) => throw null; + public static System.Security.Cryptography.RSAParameters ExtractFromXml(string xml) => throw null; + public static void FromXml(this System.Security.Cryptography.RSA rsa, string xml) => throw null; + public static System.Byte[] SignData(this System.Security.Cryptography.RSA rsa, System.Byte[] bytes, string hashAlgorithm) => throw null; + public static System.Security.Cryptography.HashAlgorithmName ToHashAlgorithmName(string hashAlgorithm) => throw null; + public static string ToXml(this System.Security.Cryptography.RSA rsa, bool includePrivateParameters) => throw null; + public static bool VerifyData(this System.Security.Cryptography.RSA rsa, System.Byte[] bytes, System.Byte[] signature, string hashAlgorithm) => throw null; + } + + // Generated from `ServiceStack.ProgressDelegate` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public delegate void ProgressDelegate(System.Int64 done, System.Int64 total); + + // Generated from `ServiceStack.RefreshTokenException` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class RefreshTokenException : ServiceStack.WebServiceException + { + public RefreshTokenException(string message, System.Exception innerException) => throw null; + public RefreshTokenException(string message) => throw null; + public RefreshTokenException(ServiceStack.WebServiceException webEx) => throw null; + } + + // Generated from `ServiceStack.RegenerateApiKeys` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class RegenerateApiKeys : ServiceStack.IVerb, ServiceStack.IReturn, ServiceStack.IReturn, ServiceStack.IPost, ServiceStack.IMeta + { + public string Environment { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary Meta { get => throw null; set => throw null; } + public RegenerateApiKeys() => throw null; + } + + // Generated from `ServiceStack.RegenerateApiKeysResponse` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class RegenerateApiKeysResponse : ServiceStack.IMeta, ServiceStack.IHasResponseStatus + { + public System.Collections.Generic.Dictionary Meta { get => throw null; set => throw null; } + public RegenerateApiKeysResponse() => throw null; + public ServiceStack.ResponseStatus ResponseStatus { get => throw null; set => throw null; } + public System.Collections.Generic.List Results { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.Register` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class Register : ServiceStack.IVerb, ServiceStack.IReturn, ServiceStack.IReturn, ServiceStack.IPost, ServiceStack.IMeta + { + public bool? AutoLogin { get => throw null; set => throw null; } + public string ConfirmPassword { get => throw null; set => throw null; } + public string DisplayName { get => throw null; set => throw null; } + public string Email { get => throw null; set => throw null; } + public string ErrorView { get => throw null; set => throw null; } + public string FirstName { get => throw null; set => throw null; } + public string LastName { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary Meta { get => throw null; set => throw null; } + public string Password { get => throw null; set => throw null; } + public Register() => throw null; + public string UserName { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.RegisterResponse` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class RegisterResponse : ServiceStack.IMeta + { + public string BearerToken { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary Meta { get => throw null; set => throw null; } + public string ReferrerUrl { get => throw null; set => throw null; } + public string RefreshToken { get => throw null; set => throw null; } + public RegisterResponse() => throw null; + public ServiceStack.ResponseStatus ResponseStatus { get => throw null; set => throw null; } + public string SessionId { get => throw null; set => throw null; } + public string UserId { get => throw null; set => throw null; } + public string UserName { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.ResponseStatusUtils` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class ResponseStatusUtils + { + public static ServiceStack.ResponseStatus CreateResponseStatus(string errorCode, string errorMessage, System.Collections.Generic.IEnumerable validationErrors = default(System.Collections.Generic.IEnumerable)) => throw null; + } + + // Generated from `ServiceStack.RestRoute` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class RestRoute + { + public ServiceStack.RouteResolutionResult Apply(object request, string httpMethod) => throw null; + public const string EmptyArray = default; + public string ErrorMsg { get => throw null; set => throw null; } + public static System.Func FormatQueryParameterValue; + public string FormatQueryParameters(object request) => throw null; + public static System.Func FormatVariable; + public string[] HttpMethods { get => throw null; } + public bool IsValid { get => throw null; } + public string Path { get => throw null; } + public int Priority { get => throw null; } + public System.Collections.Generic.List QueryStringVariables { get => throw null; } + public RestRoute(System.Type type, string path, string verbs, int priority) => throw null; + public System.Type Type { get => throw null; set => throw null; } + public System.Collections.Generic.ICollection Variables { get => throw null; } + } + + // Generated from `ServiceStack.ResultsFilterDelegate` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public delegate object ResultsFilterDelegate(System.Type responseType, string httpMethod, string requestUri, object request); + + // Generated from `ServiceStack.ResultsFilterResponseDelegate` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public delegate void ResultsFilterResponseDelegate(System.Net.WebResponse webResponse, object response, string httpMethod, string requestUri, object request); + + // Generated from `ServiceStack.RouteResolutionResult` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class RouteResolutionResult + { + public static ServiceStack.RouteResolutionResult Error(ServiceStack.RestRoute route, string errorMsg) => throw null; + public string FailReason { get => throw null; set => throw null; } + public bool Matches { get => throw null; } + public ServiceStack.RestRoute Route { get => throw null; set => throw null; } + public RouteResolutionResult() => throw null; + public static ServiceStack.RouteResolutionResult Success(ServiceStack.RestRoute route, string uri) => throw null; + public string Uri { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.RsaKeyLengths` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public enum RsaKeyLengths + { + Bit1024, + Bit2048, + Bit4096, + } + + // Generated from `ServiceStack.RsaKeyPair` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class RsaKeyPair + { + public string PrivateKey { get => throw null; set => throw null; } + public string PublicKey { get => throw null; set => throw null; } + public RsaKeyPair() => throw null; + } + + // Generated from `ServiceStack.RsaUtils` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class RsaUtils + { + public static System.Byte[] Authenticate(System.Byte[] dataToSign, System.Security.Cryptography.RSAParameters privateKey, string hashAlgorithm = default(string), ServiceStack.RsaKeyLengths rsaKeyLength = default(ServiceStack.RsaKeyLengths)) => throw null; + public static System.Security.Cryptography.RSAParameters CreatePrivateKeyParams(ServiceStack.RsaKeyLengths rsaKeyLength = default(ServiceStack.RsaKeyLengths)) => throw null; + public static ServiceStack.RsaKeyPair CreatePublicAndPrivateKeyPair(ServiceStack.RsaKeyLengths rsaKeyLength = default(ServiceStack.RsaKeyLengths)) => throw null; + public static string Decrypt(this string text) => throw null; + public static string Decrypt(string encryptedText, string privateKeyXml, ServiceStack.RsaKeyLengths rsaKeyLength = default(ServiceStack.RsaKeyLengths)) => throw null; + public static string Decrypt(string encryptedText, System.Security.Cryptography.RSAParameters privateKey, ServiceStack.RsaKeyLengths rsaKeyLength = default(ServiceStack.RsaKeyLengths)) => throw null; + public static System.Byte[] Decrypt(System.Byte[] encryptedBytes, string privateKeyXml, ServiceStack.RsaKeyLengths rsaKeyLength = default(ServiceStack.RsaKeyLengths)) => throw null; + public static System.Byte[] Decrypt(System.Byte[] encryptedBytes, System.Security.Cryptography.RSAParameters privateKey, ServiceStack.RsaKeyLengths rsaKeyLength = default(ServiceStack.RsaKeyLengths)) => throw null; + public static ServiceStack.RsaKeyPair DefaultKeyPair; + public static bool DoOAEPPadding; + public static string Encrypt(this string text) => throw null; + public static string Encrypt(string text, string publicKeyXml, ServiceStack.RsaKeyLengths rsaKeyLength = default(ServiceStack.RsaKeyLengths)) => throw null; + public static string Encrypt(string text, System.Security.Cryptography.RSAParameters publicKey, ServiceStack.RsaKeyLengths rsaKeyLength = default(ServiceStack.RsaKeyLengths)) => throw null; + public static System.Byte[] Encrypt(System.Byte[] bytes, string publicKeyXml, ServiceStack.RsaKeyLengths rsaKeyLength = default(ServiceStack.RsaKeyLengths)) => throw null; + public static System.Byte[] Encrypt(System.Byte[] bytes, System.Security.Cryptography.RSAParameters publicKey, ServiceStack.RsaKeyLengths rsaKeyLength = default(ServiceStack.RsaKeyLengths)) => throw null; + public static string FromPrivateRSAParameters(this System.Security.Cryptography.RSAParameters privateKey) => throw null; + public static string FromPublicRSAParameters(this System.Security.Cryptography.RSAParameters publicKey) => throw null; + public static ServiceStack.RsaKeyLengths KeyLength; + public static string ToPrivateKeyXml(this System.Security.Cryptography.RSAParameters privateKey) => throw null; + public static System.Security.Cryptography.RSAParameters ToPrivateRSAParameters(this string privateKeyXml) => throw null; + public static string ToPublicKeyXml(this System.Security.Cryptography.RSAParameters publicKey) => throw null; + public static System.Security.Cryptography.RSAParameters ToPublicRSAParameters(this string publicKeyXml) => throw null; + public static System.Security.Cryptography.RSAParameters ToPublicRsaParameters(this System.Security.Cryptography.RSAParameters privateKey) => throw null; + public static bool Verify(System.Byte[] dataToVerify, System.Byte[] signature, System.Security.Cryptography.RSAParameters publicKey, string hashAlgorithm = default(string), ServiceStack.RsaKeyLengths rsaKeyLength = default(ServiceStack.RsaKeyLengths)) => throw null; + } + + // Generated from `ServiceStack.ServerEventCallback` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public delegate void ServerEventCallback(ServiceStack.ServerEventsClient source, ServiceStack.ServerEventMessage args); + + // Generated from `ServiceStack.ServerEventClientExtensions` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class ServerEventClientExtensions + { + public static ServiceStack.AuthenticateResponse Authenticate(this ServiceStack.ServerEventsClient client, ServiceStack.Authenticate request) => throw null; + public static System.Threading.Tasks.Task AuthenticateAsync(this ServiceStack.ServerEventsClient client, ServiceStack.Authenticate request) => throw null; + public static System.Collections.Generic.List GetChannelSubscribers(this ServiceStack.ServerEventsClient client) => throw null; + public static System.Threading.Tasks.Task> GetChannelSubscribersAsync(this ServiceStack.ServerEventsClient client) => throw null; + public static T Populate(this T dst, ServiceStack.ServerEventMessage src, System.Collections.Generic.Dictionary msg) where T : ServiceStack.ServerEventMessage => throw null; + public static ServiceStack.ServerEventsClient RegisterHandlers(this ServiceStack.ServerEventsClient client, System.Collections.Generic.Dictionary handlers) => throw null; + public static void SubscribeToChannels(this ServiceStack.ServerEventsClient client, params string[] channels) => throw null; + public static System.Threading.Tasks.Task SubscribeToChannelsAsync(this ServiceStack.ServerEventsClient client, params string[] channels) => throw null; + public static void UnsubscribeFromChannels(this ServiceStack.ServerEventsClient client, params string[] channels) => throw null; + public static System.Threading.Tasks.Task UnsubscribeFromChannelsAsync(this ServiceStack.ServerEventsClient client, params string[] channels) => throw null; + public static void UpdateSubscriber(this ServiceStack.ServerEventsClient client, ServiceStack.UpdateEventSubscriber request) => throw null; + public static System.Threading.Tasks.Task UpdateSubscriberAsync(this ServiceStack.ServerEventsClient client, ServiceStack.UpdateEventSubscriber request) => throw null; + } + + // Generated from `ServiceStack.ServerEventCommand` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ServerEventCommand : ServiceStack.ServerEventMessage + { + public string[] Channels { get => throw null; set => throw null; } + public System.DateTime CreatedAt { get => throw null; set => throw null; } + public string DisplayName { get => throw null; set => throw null; } + public bool IsAuthenticated { get => throw null; set => throw null; } + public string ProfileUrl { get => throw null; set => throw null; } + public ServerEventCommand() => throw null; + public string UserId { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.ServerEventConnect` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ServerEventConnect : ServiceStack.ServerEventCommand + { + public System.Int64 HeartbeatIntervalMs { get => throw null; set => throw null; } + public string HeartbeatUrl { get => throw null; set => throw null; } + public string Id { get => throw null; set => throw null; } + public System.Int64 IdleTimeoutMs { get => throw null; set => throw null; } + public ServerEventConnect() => throw null; + public string UnRegisterUrl { get => throw null; set => throw null; } + public string UpdateSubscriberUrl { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.ServerEventHeartbeat` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ServerEventHeartbeat : ServiceStack.ServerEventCommand + { + public ServerEventHeartbeat() => throw null; + } + + // Generated from `ServiceStack.ServerEventJoin` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ServerEventJoin : ServiceStack.ServerEventCommand + { + public ServerEventJoin() => throw null; + } + + // Generated from `ServiceStack.ServerEventLeave` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ServerEventLeave : ServiceStack.ServerEventCommand + { + public ServerEventLeave() => throw null; + } + + // Generated from `ServiceStack.ServerEventMessage` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ServerEventMessage : ServiceStack.IMeta + { + public string Channel { get => throw null; set => throw null; } + public string CssSelector { get => throw null; set => throw null; } + public string Data { get => throw null; set => throw null; } + public System.Int64 EventId { get => throw null; set => throw null; } + public string Json { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary Meta { get => throw null; set => throw null; } + public string Op { get => throw null; set => throw null; } + public string Selector { get => throw null; set => throw null; } + public ServerEventMessage() => throw null; + public string Target { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.ServerEventReceiver` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ServerEventReceiver : ServiceStack.IReceiver + { + public ServiceStack.ServerEventsClient Client { get => throw null; set => throw null; } + public static ServiceStack.Logging.ILog Log; + public virtual void NoSuchMethod(string selector, object message) => throw null; + public ServiceStack.ServerEventMessage Request { get => throw null; set => throw null; } + public ServerEventReceiver() => throw null; + } + + // Generated from `ServiceStack.ServerEventUpdate` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ServerEventUpdate : ServiceStack.ServerEventCommand + { + public ServerEventUpdate() => throw null; + } + + // Generated from `ServiceStack.ServerEventUser` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ServerEventUser : ServiceStack.IMeta + { + public string[] Channels { get => throw null; set => throw null; } + public string DisplayName { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary Meta { get => throw null; set => throw null; } + public string ProfileUrl { get => throw null; set => throw null; } + public ServerEventUser() => throw null; + public string UserId { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.ServerEventsClient` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ServerEventsClient : System.IDisposable + { + public ServiceStack.ServerEventsClient AddListener(string eventName, System.Action handler) => throw null; + public System.Action AllRequestFilters { get => throw null; set => throw null; } + public string BaseUri { get => throw null; set => throw null; } + public static int BufferSize; + public string[] Channels { get => throw null; set => throw null; } + public System.Threading.Tasks.Task Connect() => throw null; + public string ConnectionDisplayName { get => throw null; } + public ServiceStack.ServerEventConnect ConnectionInfo { get => throw null; set => throw null; } + public void Dispose() => throw null; + public string EventStreamPath { get => throw null; set => throw null; } + public System.Action EventStreamRequestFilter { get => throw null; set => throw null; } + public string EventStreamUri { get => throw null; set => throw null; } + public virtual string GetStatsDescription() => throw null; + public System.Collections.Concurrent.ConcurrentDictionary Handlers { get => throw null; } + public bool HasListener(string eventName, System.Action handler) => throw null; + public bool HasListeners(string eventName) => throw null; + protected void Heartbeat(object state) => throw null; + public System.Action HeartbeatRequestFilter { get => throw null; set => throw null; } + public virtual System.Threading.Tasks.Task InternalStop() => throw null; + public bool IsStopped { get => throw null; } + public System.DateTime LastPulseAt { get => throw null; set => throw null; } + public System.Collections.Concurrent.ConcurrentDictionary NamedReceivers { get => throw null; } + public System.Action OnCommand; + protected void OnCommandReceived(ServiceStack.ServerEventCommand e) => throw null; + public System.Action OnConnect; + protected void OnConnectReceived() => throw null; + public System.Action OnException; + protected void OnExceptionReceived(System.Exception ex) => throw null; + public System.Action OnHeartbeat; + protected void OnHeartbeatReceived(ServiceStack.ServerEventHeartbeat e) => throw null; + public System.Action OnJoin; + protected void OnJoinReceived(ServiceStack.ServerEventJoin e) => throw null; + public System.Action OnLeave; + protected void OnLeaveReceived(ServiceStack.ServerEventLeave e) => throw null; + public System.Action OnMessage; + protected void OnMessageReceived(ServiceStack.ServerEventMessage e) => throw null; + public System.Action OnReconnect; + public System.Action OnUpdate; + protected void OnUpdateReceived(ServiceStack.ServerEventUpdate e) => throw null; + public void ProcessLine(string line) => throw null; + public void ProcessResponse(System.IO.Stream stream) => throw null; + public void RaiseEvent(string eventName, ServiceStack.ServerEventMessage message) => throw null; + public System.Collections.Generic.List ReceiverTypes { get => throw null; } + public ServiceStack.ServerEventsClient RegisterNamedReceiver(string receiverName) where T : ServiceStack.IReceiver => throw null; + public ServiceStack.ServerEventsClient RegisterReceiver() where T : ServiceStack.IReceiver => throw null; + public void RemoveAllListeners() => throw null; + public void RemoveAllRegistrations() => throw null; + public ServiceStack.ServerEventsClient RemoveListener(string eventName, System.Action handler) => throw null; + public ServiceStack.ServerEventsClient RemoveListeners(string eventName) => throw null; + public System.Func ResolveStreamUrl { get => throw null; set => throw null; } + public ServiceStack.Configuration.IResolver Resolver { get => throw null; set => throw null; } + public void Restart() => throw null; + public ServerEventsClient(string baseUri, params string[] channels) => throw null; + public ServiceStack.IServiceClient ServiceClient { get => throw null; set => throw null; } + public ServiceStack.ServerEventsClient Start() => throw null; + protected void StartNewHeartbeat() => throw null; + public string Status { get => throw null; } + public virtual System.Threading.Tasks.Task Stop() => throw null; + public bool StrictMode { get => throw null; set => throw null; } + public string SubscriptionId { get => throw null; } + public int TimesStarted { get => throw null; } + public static ServiceStack.ServerEventMessage ToTypedMessage(ServiceStack.ServerEventMessage e) => throw null; + public System.Action UnRegisterRequestFilter { get => throw null; set => throw null; } + public void Update(string[] subscribe = default(string[]), string[] unsubscribe = default(string[])) => throw null; + public System.Threading.Tasks.Task WaitForNextCommand() => throw null; + public System.Threading.Tasks.Task WaitForNextHeartbeat() => throw null; + public System.Threading.Tasks.Task WaitForNextMessage() => throw null; + } + + // Generated from `ServiceStack.ServiceClientBase` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public abstract class ServiceClientBase : System.IDisposable, ServiceStack.Messaging.IMessageProducer, ServiceStack.IServiceGatewayAsync, ServiceStack.IServiceGateway, ServiceStack.IServiceClientSync, ServiceStack.IServiceClientMeta, ServiceStack.IServiceClientCommon, ServiceStack.IServiceClientAsync, ServiceStack.IServiceClient, ServiceStack.IRestServiceClient, ServiceStack.IRestClientSync, ServiceStack.IRestClientAsync, ServiceStack.IRestClient, ServiceStack.IReplyClient, ServiceStack.IOneWayClient, ServiceStack.IHttpRestClientAsync, ServiceStack.IHasVersion, ServiceStack.IHasSessionId, ServiceStack.IHasCookieContainer, ServiceStack.IHasBearerToken + { + public virtual string Accept { get => throw null; } + public void AddHeader(string name, string value) => throw null; + public bool AllowAutoRedirect { get => throw null; set => throw null; } + public bool AlwaysSendBasicAuthHeader { get => throw null; set => throw null; } + public string AsyncOneWayBaseUri { get => throw null; set => throw null; } + public string BaseUri { get => throw null; set => throw null; } + public string BearerToken { get => throw null; set => throw null; } + public void ClearCookies() => throw null; + public abstract string ContentType { get; } + public System.Net.CookieContainer CookieContainer { get => throw null; set => throw null; } + public System.Net.ICredentials Credentials { get => throw null; set => throw null; } + public virtual void CustomMethod(string httpVerb, ServiceStack.IReturnVoid requestDto) => throw null; + public virtual TResponse CustomMethod(string httpVerb, string relativeOrAbsoluteUrl, object requestDto = default(object)) => throw null; + public virtual TResponse CustomMethod(string httpVerb, object requestDto) => throw null; + public virtual TResponse CustomMethod(string httpVerb, ServiceStack.IReturn requestDto) => throw null; + public virtual System.Net.HttpWebResponse CustomMethod(string httpVerb, string relativeOrAbsoluteUrl, object requestDto) => throw null; + public virtual System.Net.HttpWebResponse CustomMethod(string httpVerb, object requestDto) => throw null; + public virtual System.Threading.Tasks.Task CustomMethodAsync(string httpVerb, string relativeOrAbsoluteUrl, object request, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public virtual System.Threading.Tasks.Task CustomMethodAsync(string httpVerb, object requestDto, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public virtual System.Threading.Tasks.Task CustomMethodAsync(string httpVerb, ServiceStack.IReturn requestDto, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public virtual System.Threading.Tasks.Task CustomMethodAsync(string httpVerb, ServiceStack.IReturnVoid requestDto, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public const string DefaultHttpMethod = default; + public static string DefaultUserAgent; + public virtual void Delete(ServiceStack.IReturnVoid requestDto) => throw null; + public virtual TResponse Delete(string relativeOrAbsoluteUrl) => throw null; + public virtual TResponse Delete(object requestDto) => throw null; + public virtual TResponse Delete(ServiceStack.IReturn requestDto) => throw null; + public virtual System.Net.HttpWebResponse Delete(string relativeOrAbsoluteUrl) => throw null; + public virtual System.Net.HttpWebResponse Delete(object requestDto) => throw null; + public virtual System.Threading.Tasks.Task DeleteAsync(string relativeOrAbsoluteUrl, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public virtual System.Threading.Tasks.Task DeleteAsync(object requestDto, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public virtual System.Threading.Tasks.Task DeleteAsync(ServiceStack.IReturn requestDto, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public virtual System.Threading.Tasks.Task DeleteAsync(ServiceStack.IReturnVoid requestDto, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + protected T Deserialize(string text) => throw null; + public abstract T DeserializeFromStream(System.IO.Stream stream); + public bool DisableAutoCompression { get => throw null; set => throw null; } + public void Dispose() => throw null; + public System.Byte[] DownloadBytes(string httpMethod, string requestUri, object request) => throw null; + public System.Threading.Tasks.Task DownloadBytesAsync(string httpMethod, string requestUri, object request) => throw null; + public bool EmulateHttpViaPost { get => throw null; set => throw null; } + public ServiceStack.ExceptionFilterDelegate ExceptionFilter { get => throw null; set => throw null; } + public abstract string Format { get; } + public virtual void Get(ServiceStack.IReturnVoid requestDto) => throw null; + public virtual TResponse Get(string relativeOrAbsoluteUrl) => throw null; + public virtual TResponse Get(object requestDto) => throw null; + public virtual TResponse Get(ServiceStack.IReturn requestDto) => throw null; + public virtual System.Net.HttpWebResponse Get(string relativeOrAbsoluteUrl) => throw null; + public virtual System.Net.HttpWebResponse Get(object requestDto) => throw null; + public virtual System.Threading.Tasks.Task GetAsync(string relativeOrAbsoluteUrl, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public virtual System.Threading.Tasks.Task GetAsync(object requestDto, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public virtual System.Threading.Tasks.Task GetAsync(ServiceStack.IReturn requestDto, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public virtual System.Threading.Tasks.Task GetAsync(ServiceStack.IReturnVoid requestDto, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Collections.Generic.Dictionary GetCookieValues() => throw null; + public static string GetExplicitMethod(object request) => throw null; + public virtual System.Collections.Generic.IEnumerable GetLazy(ServiceStack.IReturn> queryDto) => throw null; + protected TResponse GetResponse(System.Net.WebResponse webResponse) => throw null; + public static System.Action GlobalRequestFilter { get => throw null; set => throw null; } + public static System.Action GlobalResponseFilter { get => throw null; set => throw null; } + protected virtual bool HandleResponseException(System.Exception ex, object request, string requestUri, System.Func createWebRequest, System.Func getResponse, out TResponse response) => throw null; + public virtual System.Net.HttpWebResponse Head(string relativeOrAbsoluteUrl) => throw null; + public virtual System.Net.HttpWebResponse Head(object requestDto) => throw null; + public virtual System.Net.HttpWebResponse Head(ServiceStack.IReturn requestDto) => throw null; + public System.Collections.Specialized.NameValueCollection Headers { get => throw null; set => throw null; } + public string HttpMethod { get => throw null; set => throw null; } + public System.Action OnAuthenticationRequired { get => throw null; set => throw null; } + public ServiceStack.ProgressDelegate OnDownloadProgress { get => throw null; set => throw null; } + public ServiceStack.ProgressDelegate OnUploadProgress { get => throw null; set => throw null; } + public string Password { get => throw null; set => throw null; } + public virtual void Patch(ServiceStack.IReturnVoid requestDto) => throw null; + public virtual TResponse Patch(string relativeOrAbsoluteUrl, object requestDto) => throw null; + public virtual TResponse Patch(object requestDto) => throw null; + public virtual TResponse Patch(ServiceStack.IReturn requestDto) => throw null; + public virtual System.Net.HttpWebResponse Patch(object requestDto) => throw null; + public virtual System.Threading.Tasks.Task PatchAsync(string relativeOrAbsoluteUrl, object request, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public virtual System.Threading.Tasks.Task PatchAsync(object requestDto, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public virtual System.Threading.Tasks.Task PatchAsync(ServiceStack.IReturn requestDto, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public virtual System.Threading.Tasks.Task PatchAsync(ServiceStack.IReturnVoid requestDto, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public virtual void Post(ServiceStack.IReturnVoid requestDto) => throw null; + public virtual TResponse Post(string relativeOrAbsoluteUrl, object requestDto) => throw null; + public virtual TResponse Post(object requestDto) => throw null; + public virtual TResponse Post(ServiceStack.IReturn requestDto) => throw null; + public virtual System.Net.HttpWebResponse Post(object requestDto) => throw null; + public virtual System.Threading.Tasks.Task PostAsync(string relativeOrAbsoluteUrl, object request, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public virtual System.Threading.Tasks.Task PostAsync(object requestDto, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public virtual System.Threading.Tasks.Task PostAsync(ServiceStack.IReturn requestDto, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public virtual System.Threading.Tasks.Task PostAsync(ServiceStack.IReturnVoid requestDto, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public virtual TResponse PostFile(string relativeOrAbsoluteUrl, System.IO.Stream fileToUpload, string fileName, string mimeType) => throw null; + public virtual TResponse PostFileWithRequest(string relativeOrAbsoluteUrl, System.IO.Stream fileToUpload, string fileName, object request, string fieldName = default(string)) => throw null; + public virtual TResponse PostFileWithRequest(System.IO.Stream fileToUpload, string fileName, object request, string fieldName = default(string)) => throw null; + public virtual TResponse PostFilesWithRequest(string relativeOrAbsoluteUrl, object request, System.Collections.Generic.IEnumerable files) => throw null; + public virtual TResponse PostFilesWithRequest(object request, System.Collections.Generic.IEnumerable files) => throw null; + protected System.Net.WebRequest PrepareWebRequest(string httpMethod, string requestUri, object request, System.Action sendRequestAction) => throw null; + public System.Net.IWebProxy Proxy { get => throw null; set => throw null; } + public void Publish(T requestDto) => throw null; + public void Publish(ServiceStack.Messaging.IMessage message) => throw null; + public virtual void Publish(object requestDto) => throw null; + public void PublishAll(System.Collections.Generic.IEnumerable requests) => throw null; + public System.Threading.Tasks.Task PublishAllAsync(System.Collections.Generic.IEnumerable requests, System.Threading.CancellationToken token) => throw null; + public System.Threading.Tasks.Task PublishAsync(object request, System.Threading.CancellationToken token) => throw null; + public virtual void Put(ServiceStack.IReturnVoid requestDto) => throw null; + public virtual TResponse Put(string relativeOrAbsoluteUrl, object requestDto) => throw null; + public virtual TResponse Put(object requestDto) => throw null; + public virtual TResponse Put(ServiceStack.IReturn requestDto) => throw null; + public virtual System.Net.HttpWebResponse Put(object requestDto) => throw null; + public virtual System.Threading.Tasks.Task PutAsync(string relativeOrAbsoluteUrl, object request, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public virtual System.Threading.Tasks.Task PutAsync(object requestDto, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public virtual System.Threading.Tasks.Task PutAsync(ServiceStack.IReturn requestDto, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public virtual System.Threading.Tasks.Task PutAsync(ServiceStack.IReturnVoid requestDto, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.TimeSpan? ReadWriteTimeout { get => throw null; set => throw null; } + public string RefreshToken { get => throw null; set => throw null; } + public string RefreshTokenUri { get => throw null; set => throw null; } + public string RequestCompressionType { get => throw null; set => throw null; } + public System.Action RequestFilter { get => throw null; set => throw null; } + public virtual string ResolveTypedUrl(string httpMethod, object requestDto) => throw null; + public virtual string ResolveUrl(string httpMethod, string relativeOrAbsoluteUrl) => throw null; + public System.Action ResponseFilter { get => throw null; set => throw null; } + public ServiceStack.ResultsFilterDelegate ResultsFilter { get => throw null; set => throw null; } + public ServiceStack.ResultsFilterResponseDelegate ResultsFilterResponse { get => throw null; set => throw null; } + public virtual TResponse Send(string httpMethod, string relativeOrAbsoluteUrl, object request) => throw null; + public virtual TResponse Send(object request) => throw null; + public virtual System.Collections.Generic.List SendAll(System.Collections.Generic.IEnumerable requests) => throw null; + public System.Threading.Tasks.Task> SendAllAsync(System.Collections.Generic.IEnumerable requests, System.Threading.CancellationToken token) => throw null; + public virtual void SendAllOneWay(System.Collections.Generic.IEnumerable requests) => throw null; + public virtual System.Threading.Tasks.Task SendAsync(object request, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task SendAsync(string httpMethod, string absoluteUrl, object request, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public virtual void SendOneWay(string relativeOrAbsoluteUrl, object request) => throw null; + public virtual void SendOneWay(string httpMethod, string relativeOrAbsoluteUrl, object requestDto) => throw null; + public virtual void SendOneWay(object request) => throw null; + protected virtual System.Net.WebRequest SendRequest(string httpMethod, string requestUri, object request) => throw null; + protected virtual void SerializeRequestToStream(object request, System.IO.Stream requestStream, bool keepOpen = default(bool)) => throw null; + public abstract void SerializeToStream(ServiceStack.Web.IRequest req, object request, System.IO.Stream stream); + protected ServiceClientBase(string syncReplyBaseUri, string asyncOneWayBaseUri) => throw null; + protected ServiceClientBase() => throw null; + public string SessionId { get => throw null; set => throw null; } + public void SetBaseUri(string baseUri) => throw null; + public void SetCookie(string name, string value, System.TimeSpan? expiresIn = default(System.TimeSpan?)) => throw null; + public void SetCredentials(string userName, string password) => throw null; + public bool ShareCookiesWithBrowser { get => throw null; set => throw null; } + public bool StoreCookies { get => throw null; set => throw null; } + public abstract ServiceStack.Web.StreamDeserializerDelegate StreamDeserializer { get; } + public string SyncReplyBaseUri { get => throw null; set => throw null; } + protected void ThrowResponseTypeException(object request, System.Exception ex, string requestUri) => throw null; + public void ThrowWebServiceException(System.Exception ex, string requestUri) => throw null; + public System.TimeSpan? Timeout { get => throw null; set => throw null; } + public virtual string ToAbsoluteUrl(string relativeOrAbsoluteUrl) => throw null; + public static string ToHttpMethod(System.Type requestType) => throw null; + public static ServiceStack.WebServiceException ToWebServiceException(System.Net.WebException webEx, System.Func parseDtoFn, string contentType) => throw null; + public ServiceStack.TypedUrlResolverDelegate TypedUrlResolver { get => throw null; set => throw null; } + public ServiceStack.UrlResolverDelegate UrlResolver { get => throw null; set => throw null; } + public bool UseTokenCookie { get => throw null; set => throw null; } + public string UserAgent { get => throw null; set => throw null; } + public string UserName { get => throw null; set => throw null; } + public int Version { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.ServiceClientExtensions` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class ServiceClientExtensions + { + public static TResponse Delete(this ServiceStack.IEncryptedClient client, ServiceStack.IReturn request) => throw null; + public static TResponse Get(this ServiceStack.IEncryptedClient client, ServiceStack.IReturn request) => throw null; + public static string GetCookieValue(this ServiceStack.AsyncServiceClient client, string name) => throw null; + public static ServiceStack.IEncryptedClient GetEncryptedClient(this ServiceStack.IJsonServiceClient client, string serverPublicKeyXml) => throw null; + public static ServiceStack.IEncryptedClient GetEncryptedClient(this ServiceStack.IJsonServiceClient client, System.Security.Cryptography.RSAParameters publicKey) => throw null; + public static string GetOptions(this ServiceStack.IServiceClient client) => throw null; + public static string GetPermanentSessionId(this ServiceStack.IServiceClient client) => throw null; + public static string GetRefreshTokenCookie(this System.Net.CookieContainer cookies, string baseUri) => throw null; + public static string GetRefreshTokenCookie(this ServiceStack.IServiceClient client) => throw null; + public static string GetRefreshTokenCookie(this ServiceStack.AsyncServiceClient client) => throw null; + public static string GetSessionId(this ServiceStack.IServiceClient client) => throw null; + public static string GetTokenCookie(this System.Net.CookieContainer cookies, string baseUri) => throw null; + public static string GetTokenCookie(this ServiceStack.IServiceClient client) => throw null; + public static string GetTokenCookie(this ServiceStack.AsyncServiceClient client) => throw null; + public static TResponse PatchBody(this ServiceStack.IServiceClient client, ServiceStack.IReturn toRequest, string requestBody) => throw null; + public static TResponse PatchBody(this ServiceStack.IServiceClient client, ServiceStack.IReturn toRequest, object requestBody) => throw null; + public static TResponse PatchBody(this ServiceStack.IServiceClient client, ServiceStack.IReturn toRequest, System.IO.Stream requestBody) => throw null; + public static TResponse PatchBody(this ServiceStack.IServiceClient client, ServiceStack.IReturn toRequest, System.Byte[] requestBody) => throw null; + public static System.Threading.Tasks.Task PatchBodyAsync(this ServiceStack.IServiceClient client, ServiceStack.IReturn toRequest, string requestBody, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task PatchBodyAsync(this ServiceStack.IServiceClient client, ServiceStack.IReturn toRequest, object requestBody, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task PatchBodyAsync(this ServiceStack.IServiceClient client, ServiceStack.IReturn toRequest, System.IO.Stream requestBody, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task PatchBodyAsync(this ServiceStack.IServiceClient client, ServiceStack.IReturn toRequest, System.Byte[] requestBody, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static void PopulateRequestMetadata(this ServiceStack.IHasSessionId client, object request) => throw null; + public static void PopulateRequestMetadatas(this ServiceStack.IHasSessionId client, System.Collections.Generic.IEnumerable requests) => throw null; + public static TResponse Post(this ServiceStack.IEncryptedClient client, ServiceStack.IReturn request) => throw null; + public static TResponse PostBody(this ServiceStack.IServiceClient client, ServiceStack.IReturn toRequest, string requestBody) => throw null; + public static TResponse PostBody(this ServiceStack.IServiceClient client, ServiceStack.IReturn toRequest, object requestBody) => throw null; + public static TResponse PostBody(this ServiceStack.IServiceClient client, ServiceStack.IReturn toRequest, System.IO.Stream requestBody) => throw null; + public static TResponse PostBody(this ServiceStack.IServiceClient client, ServiceStack.IReturn toRequest, System.Byte[] requestBody) => throw null; + public static System.Threading.Tasks.Task PostBodyAsync(this ServiceStack.IServiceClient client, ServiceStack.IReturn toRequest, string requestBody, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task PostBodyAsync(this ServiceStack.IServiceClient client, ServiceStack.IReturn toRequest, object requestBody, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task PostBodyAsync(this ServiceStack.IServiceClient client, ServiceStack.IReturn toRequest, System.IO.Stream requestBody, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task PostBodyAsync(this ServiceStack.IServiceClient client, ServiceStack.IReturn toRequest, System.Byte[] requestBody, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static TResponse PostFile(this ServiceStack.IRestClient client, string relativeOrAbsoluteUrl, System.IO.FileInfo fileToUpload, string mimeType) => throw null; + public static TResponse PostFileWithRequest(this ServiceStack.IRestClient client, string relativeOrAbsoluteUrl, System.IO.FileInfo fileToUpload, object request, string fieldName = default(string)) => throw null; + public static TResponse PostFileWithRequest(this ServiceStack.IRestClient client, System.IO.FileInfo fileToUpload, object request, string fieldName = default(string)) => throw null; + public static TResponse Put(this ServiceStack.IEncryptedClient client, ServiceStack.IReturn request) => throw null; + public static TResponse PutBody(this ServiceStack.IServiceClient client, ServiceStack.IReturn toRequest, string requestBody) => throw null; + public static TResponse PutBody(this ServiceStack.IServiceClient client, ServiceStack.IReturn toRequest, object requestBody) => throw null; + public static TResponse PutBody(this ServiceStack.IServiceClient client, ServiceStack.IReturn toRequest, System.IO.Stream requestBody) => throw null; + public static TResponse PutBody(this ServiceStack.IServiceClient client, ServiceStack.IReturn toRequest, System.Byte[] requestBody) => throw null; + public static System.Threading.Tasks.Task PutBodyAsync(this ServiceStack.IServiceClient client, ServiceStack.IReturn toRequest, string requestBody, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task PutBodyAsync(this ServiceStack.IServiceClient client, ServiceStack.IReturn toRequest, object requestBody, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task PutBodyAsync(this ServiceStack.IServiceClient client, ServiceStack.IReturn toRequest, System.IO.Stream requestBody, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task PutBodyAsync(this ServiceStack.IServiceClient client, ServiceStack.IReturn toRequest, System.Byte[] requestBody, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.IO.Stream ResponseStream(this System.Net.WebResponse webRes) => throw null; + public static void Send(this ServiceStack.IEncryptedClient client, ServiceStack.IReturnVoid request) => throw null; + public static void SetCookie(this System.Net.CookieContainer cookieContainer, System.Uri baseUri, string name, string value, System.DateTime? expiresAt, string path = default(string), bool? httpOnly = default(bool?), bool? secure = default(bool?)) => throw null; + public static void SetCookie(this ServiceStack.IServiceClient client, System.Uri baseUri, string name, string value, System.DateTime? expiresAt = default(System.DateTime?), string path = default(string), bool? httpOnly = default(bool?), bool? secure = default(bool?)) => throw null; + public static void SetOptions(this ServiceStack.IServiceClient client, string options) => throw null; + public static void SetPermanentSessionId(this ServiceStack.IServiceClient client, string sessionId) => throw null; + public static void SetRefreshTokenCookie(this System.Net.CookieContainer cookies, string baseUri, string token) => throw null; + public static void SetRefreshTokenCookie(this ServiceStack.IServiceClient client, string token) => throw null; + public static void SetSessionId(this ServiceStack.IServiceClient client, string sessionId) => throw null; + public static void SetTokenCookie(this System.Net.CookieContainer cookies, string baseUri, string token) => throw null; + public static void SetTokenCookie(this ServiceStack.IServiceClient client, string token) => throw null; + public static void SetUserAgent(this System.Net.HttpWebRequest req, string userAgent) => throw null; + public static System.Collections.Generic.Dictionary ToDictionary(this System.Net.CookieContainer cookies, string baseUri) => throw null; + } + + // Generated from `ServiceStack.ServiceGatewayAsyncWrappers` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class ServiceGatewayAsyncWrappers + { + public static System.Threading.Tasks.Task PublishAllAsync(this ServiceStack.IServiceGatewayAsync client, System.Collections.Generic.IEnumerable requestDtos, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task PublishAllAsync(this ServiceStack.IServiceGateway client, System.Collections.Generic.IEnumerable requestDtos, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task PublishAsync(this ServiceStack.IServiceGateway client, object requestDto, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task Send(this ServiceStack.IServiceClientAsync client, ServiceStack.IReturn requestDto, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task> SendAllAsync(this ServiceStack.IServiceGateway client, System.Collections.Generic.IEnumerable> requestDtos, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task> SendAllAsync(this ServiceStack.IServiceClientAsync client, System.Collections.Generic.List> requestDtos, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task> SendAllAsync(this ServiceStack.IServiceClientAsync client, ServiceStack.IReturn[] requestDtos, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task SendAsync(this ServiceStack.IServiceGateway client, object requestDto, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task SendAsync(this ServiceStack.IServiceGateway client, ServiceStack.IReturn requestDto, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task SendAsync(this ServiceStack.IServiceGateway client, ServiceStack.IReturnVoid requestDto, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + } + + // Generated from `ServiceStack.ServiceGatewayExtensions` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class ServiceGatewayExtensions + { + public static System.Type GetResponseType(this ServiceStack.IServiceGateway client, object request) => throw null; + public static void Send(this ServiceStack.IServiceGateway client, ServiceStack.IReturnVoid request) => throw null; + public static object Send(this ServiceStack.IServiceGateway client, System.Type responseType, object request) => throw null; + public static TResponse Send(this ServiceStack.IServiceGateway client, ServiceStack.IReturn request) => throw null; + public static System.Collections.Generic.List SendAll(this ServiceStack.IServiceGateway client, System.Collections.Generic.IEnumerable> request) => throw null; + public static System.Threading.Tasks.Task SendAsync(this ServiceStack.IServiceGateway client, System.Type responseType, object request, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + } + + // Generated from `ServiceStack.SingletonInstanceResolver` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class SingletonInstanceResolver : ServiceStack.Configuration.IResolver + { + public SingletonInstanceResolver() => throw null; + public T TryResolve() => throw null; + } + + // Generated from `ServiceStack.StreamExt` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class StreamExt + { + public static System.Byte[] Compress(this string text, string compressionType) => throw null; + public static System.Byte[] CompressBytes(this System.Byte[] bytes, string compressionType) => throw null; + public static System.IO.Stream CompressStream(this System.IO.Stream stream, string compressionType) => throw null; + public static string Decompress(this System.Byte[] gzBuffer, string compressionType) => throw null; + public static System.IO.Stream Decompress(this System.IO.Stream gzStream, string compressionType) => throw null; + public static System.Byte[] DecompressBytes(this System.Byte[] gzBuffer, string compressionType) => throw null; + public static System.Byte[] Deflate(this string text) => throw null; + public static ServiceStack.Caching.IDeflateProvider DeflateProvider; + public static string GUnzip(this System.Byte[] gzBuffer) => throw null; + public static System.Byte[] GZip(this string text) => throw null; + public static ServiceStack.Caching.IGZipProvider GZipProvider; + public static string Inflate(this System.Byte[] gzBuffer) => throw null; + public static System.Byte[] ToBytes(this System.IO.Stream stream) => throw null; + public static string ToUtf8String(this System.IO.Stream stream) => throw null; + public static void Write(this System.IO.Stream stream, string text) => throw null; + } + + // Generated from `ServiceStack.StreamFiles` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class StreamFiles : ServiceStack.IReturn, ServiceStack.IReturn + { + public System.Collections.Generic.List Paths { get => throw null; set => throw null; } + public StreamFiles() => throw null; + } + + // Generated from `ServiceStack.StreamServerEvents` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class StreamServerEvents : ServiceStack.IReturn, ServiceStack.IReturn + { + public string[] Channels { get => throw null; set => throw null; } + public StreamServerEvents() => throw null; + } + + // Generated from `ServiceStack.StreamServerEventsResponse` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class StreamServerEventsResponse + { + public string Channel { get => throw null; set => throw null; } + public string[] Channels { get => throw null; set => throw null; } + public System.Int64 CreatedAt { get => throw null; set => throw null; } + public string CssSelector { get => throw null; set => throw null; } + public string Data { get => throw null; set => throw null; } + public string DisplayName { get => throw null; set => throw null; } + public System.Int64 EventId { get => throw null; set => throw null; } + public System.Int64 HeartbeatIntervalMs { get => throw null; set => throw null; } + public string HeartbeatUrl { get => throw null; set => throw null; } + public string Id { get => throw null; set => throw null; } + public System.Int64 IdleTimeoutMs { get => throw null; set => throw null; } + public bool IsAuthenticated { get => throw null; set => throw null; } + public string Json { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary Meta { get => throw null; set => throw null; } + public string Op { get => throw null; set => throw null; } + public string ProfileUrl { get => throw null; set => throw null; } + public ServiceStack.ResponseStatus ResponseStatus { get => throw null; set => throw null; } + public string Selector { get => throw null; set => throw null; } + public StreamServerEventsResponse() => throw null; + public string Target { get => throw null; set => throw null; } + public string UnRegisterUrl { get => throw null; set => throw null; } + public string UpdateSubscriberUrl { get => throw null; set => throw null; } + public string UserId { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.TokenException` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class TokenException : ServiceStack.AuthenticationException + { + public TokenException(string message) => throw null; + } + + // Generated from `ServiceStack.TypedUrlResolverDelegate` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public delegate string TypedUrlResolverDelegate(ServiceStack.IServiceClientMeta client, string httpMethod, object requestDto); + + // Generated from `ServiceStack.UnAssignRoles` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class UnAssignRoles : ServiceStack.IVerb, ServiceStack.IReturn, ServiceStack.IReturn, ServiceStack.IPost, ServiceStack.IMeta + { + public System.Collections.Generic.Dictionary Meta { get => throw null; set => throw null; } + public System.Collections.Generic.List Permissions { get => throw null; set => throw null; } + public System.Collections.Generic.List Roles { get => throw null; set => throw null; } + public UnAssignRoles() => throw null; + public string UserName { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.UnAssignRolesResponse` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class UnAssignRolesResponse : ServiceStack.IMeta, ServiceStack.IHasResponseStatus + { + public System.Collections.Generic.List AllPermissions { get => throw null; set => throw null; } + public System.Collections.Generic.List AllRoles { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary Meta { get => throw null; set => throw null; } + public ServiceStack.ResponseStatus ResponseStatus { get => throw null; set => throw null; } + public UnAssignRolesResponse() => throw null; + } + + // Generated from `ServiceStack.UpdateEventSubscriber` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class UpdateEventSubscriber : ServiceStack.IVerb, ServiceStack.IReturn, ServiceStack.IReturn, ServiceStack.IPost + { + public string Id { get => throw null; set => throw null; } + public string[] SubscribeChannels { get => throw null; set => throw null; } + public string[] UnsubscribeChannels { get => throw null; set => throw null; } + public UpdateEventSubscriber() => throw null; + } + + // Generated from `ServiceStack.UpdateEventSubscriberResponse` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class UpdateEventSubscriberResponse + { + public ServiceStack.ResponseStatus ResponseStatus { get => throw null; set => throw null; } + public UpdateEventSubscriberResponse() => throw null; + } + + // Generated from `ServiceStack.UrlExtensions` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class UrlExtensions + { + public static string AsHttps(this string absoluteUrl) => throw null; + public static string ExpandGenericTypeName(System.Type type) => throw null; + public static string ExpandTypeName(this System.Type type) => throw null; + public static string GetFullyQualifiedName(this System.Type type) => throw null; + public static string GetMetadataPropertyType(this System.Type type) => throw null; + public static string GetOperationName(this System.Type type) => throw null; + public static System.Collections.Generic.Dictionary GetQueryPropertyTypes(this System.Type requestType) => throw null; + public static string ToDeleteUrl(this object requestDto) => throw null; + public static string ToGetUrl(this object requestDto) => throw null; + public static string ToOneWayUrl(this object requestDto, string format = default(string)) => throw null; + public static string ToOneWayUrlOnly(this object requestDto, string format = default(string)) => throw null; + public static string ToPostUrl(this object requestDto) => throw null; + public static string ToPutUrl(this object requestDto) => throw null; + public static string ToRelativeUri(this object requestDto, string httpMethod, string formatFallbackToPredefinedRoute = default(string)) => throw null; + public static string ToRelativeUri(this ServiceStack.IReturn requestDto, string httpMethod, string formatFallbackToPredefinedRoute = default(string)) => throw null; + public static string ToReplyUrl(this object requestDto, string format = default(string)) => throw null; + public static string ToReplyUrlOnly(this object requestDto, string format = default(string)) => throw null; + public static string ToUrl(this object requestDto, string httpMethod = default(string), string formatFallbackToPredefinedRoute = default(string)) => throw null; + public static string ToUrl(this ServiceStack.IReturn requestDto, string httpMethod, string formatFallbackToPredefinedRoute = default(string)) => throw null; + } + + // Generated from `ServiceStack.UrlResolverDelegate` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public delegate string UrlResolverDelegate(ServiceStack.IServiceClientMeta client, string httpMethod, string relativeOrAbsoluteUrl); + + // Generated from `ServiceStack.UserApiKey` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class UserApiKey : ServiceStack.IMeta + { + public System.DateTime? ExpiryDate { get => throw null; set => throw null; } + public string Key { get => throw null; set => throw null; } + public string KeyType { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary Meta { get => throw null; set => throw null; } + public UserApiKey() => throw null; + } + + // Generated from `ServiceStack.WebRequestUtils` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class WebRequestUtils + { + public static void AddApiKeyAuth(this System.Net.WebRequest client, string apiKey) => throw null; + public static void AddBasicAuth(this System.Net.WebRequest client, string userName, string password) => throw null; + public static void AddBearerToken(this System.Net.WebRequest client, string bearerToken) => throw null; + public static string CalculateMD5Hash(string input) => throw null; + public static System.Type GetErrorResponseDtoType(object request) => throw null; + public static System.Type GetErrorResponseDtoType(object request) => throw null; + public static System.Type GetErrorResponseDtoType(System.Type requestType) => throw null; + public static string GetResponseDtoName(System.Type requestType) => throw null; + public static ServiceStack.ResponseStatus GetResponseStatus(this object response) => throw null; + public static System.Net.HttpWebRequest InitWebRequest(string url, string method = default(string), System.Collections.Generic.Dictionary headers = default(System.Collections.Generic.Dictionary)) => throw null; + public const string ResponseDtoSuffix = default; + } + + // Generated from `ServiceStack.WebServiceException` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class WebServiceException : System.Exception, ServiceStack.Model.IResponseStatusConvertible, ServiceStack.IHasStatusDescription, ServiceStack.IHasStatusCode + { + public string ErrorCode { get => throw null; } + public string ErrorMessage { get => throw null; } + public System.Collections.Generic.List GetFieldErrors() => throw null; + public bool IsAny400() => throw null; + public bool IsAny500() => throw null; + public override string Message { get => throw null; } + public string ResponseBody { get => throw null; set => throw null; } + public object ResponseDto { get => throw null; set => throw null; } + public System.Net.WebHeaderCollection ResponseHeaders { get => throw null; set => throw null; } + public ServiceStack.ResponseStatus ResponseStatus { get => throw null; } + public string ServerStackTrace { get => throw null; } + public object State { get => throw null; set => throw null; } + public int StatusCode { get => throw null; set => throw null; } + public string StatusDescription { get => throw null; set => throw null; } + public ServiceStack.ResponseStatus ToResponseStatus() => throw null; + public override string ToString() => throw null; + public WebServiceException(string message, System.Exception innerException) => throw null; + public WebServiceException(string message) => throw null; + public WebServiceException() => throw null; + public static ServiceStack.Logging.ILog log; + } + + // Generated from `ServiceStack.XmlServiceClient` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class XmlServiceClient : ServiceStack.ServiceClientBase + { + public override string ContentType { get => throw null; } + public override T DeserializeFromStream(System.IO.Stream stream) => throw null; + public override string Format { get => throw null; } + public override void SerializeToStream(ServiceStack.Web.IRequest req, object request, System.IO.Stream stream) => throw null; + public override ServiceStack.Web.StreamDeserializerDelegate StreamDeserializer { get => throw null; } + public XmlServiceClient(string syncReplyBaseUri, string asyncOneWayBaseUri) => throw null; + public XmlServiceClient(string baseUri) => throw null; + public XmlServiceClient() => throw null; + } + + namespace Messaging + { + // Generated from `ServiceStack.Messaging.InMemoryMessageQueueClient` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class InMemoryMessageQueueClient : System.IDisposable, ServiceStack.Messaging.IMessageQueueClient, ServiceStack.Messaging.IMessageProducer, ServiceStack.IOneWayClient + { + public void Ack(ServiceStack.Messaging.IMessage message) => throw null; + public ServiceStack.Messaging.IMessage CreateMessage(object mqResponse) => throw null; + public void Dispose() => throw null; + public ServiceStack.Messaging.IMessage Get(string queueName, System.TimeSpan? timeOut = default(System.TimeSpan?)) => throw null; + public ServiceStack.Messaging.IMessage GetAsync(string queueName) => throw null; + public string GetTempQueueName() => throw null; + public InMemoryMessageQueueClient(ServiceStack.Messaging.MessageQueueClientFactory factory) => throw null; + public void Nak(ServiceStack.Messaging.IMessage message, bool requeue, System.Exception exception = default(System.Exception)) => throw null; + public void Notify(string queueName, ServiceStack.Messaging.IMessage message) => throw null; + public void Publish(T messageBody) => throw null; + public void Publish(ServiceStack.Messaging.IMessage message) => throw null; + public void Publish(string queueName, ServiceStack.Messaging.IMessage message) => throw null; + public void SendAllOneWay(System.Collections.Generic.IEnumerable requests) => throw null; + public void SendOneWay(string queueName, object requestDto) => throw null; + public void SendOneWay(object requestDto) => throw null; + } + + // Generated from `ServiceStack.Messaging.MessageQueueClientFactory` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class MessageQueueClientFactory : System.IDisposable, ServiceStack.Messaging.IMessageQueueClientFactory + { + public ServiceStack.Messaging.IMessageQueueClient CreateMessageQueueClient() => throw null; + public void Dispose() => throw null; + public System.Byte[] GetMessageAsync(string queueName) => throw null; + public MessageQueueClientFactory() => throw null; + public event System.EventHandler MessageReceived; + public void PublishMessage(string queueName, ServiceStack.Messaging.IMessage message) => throw null; + public void PublishMessage(string queueName, System.Byte[] messageBytes) => throw null; + } + + // Generated from `ServiceStack.Messaging.RedisMessageFactory` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class RedisMessageFactory : System.IDisposable, ServiceStack.Messaging.IMessageQueueClientFactory, ServiceStack.Messaging.IMessageFactory + { + public ServiceStack.Messaging.IMessageProducer CreateMessageProducer() => throw null; + public ServiceStack.Messaging.IMessageQueueClient CreateMessageQueueClient() => throw null; + public void Dispose() => throw null; + public RedisMessageFactory(ServiceStack.Redis.IRedisClientsManager clientsManager) => throw null; + } + + // Generated from `ServiceStack.Messaging.RedisMessageProducer` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class RedisMessageProducer : System.IDisposable, ServiceStack.Messaging.IMessageProducer, ServiceStack.IOneWayClient + { + public void Dispose() => throw null; + public void Publish(T messageBody) => throw null; + public void Publish(ServiceStack.Messaging.IMessage message) => throw null; + public void Publish(string queueName, ServiceStack.Messaging.IMessage message) => throw null; + public ServiceStack.Redis.IRedisNativeClient ReadWriteClient { get => throw null; } + public RedisMessageProducer(ServiceStack.Redis.IRedisClientsManager clientsManager, System.Action onPublishedCallback) => throw null; + public RedisMessageProducer(ServiceStack.Redis.IRedisClientsManager clientsManager) => throw null; + public void SendAllOneWay(System.Collections.Generic.IEnumerable requests) => throw null; + public void SendOneWay(string queueName, object requestDto) => throw null; + public void SendOneWay(object requestDto) => throw null; + } + + // Generated from `ServiceStack.Messaging.RedisMessageQueueClient` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class RedisMessageQueueClient : System.IDisposable, ServiceStack.Messaging.IMessageQueueClient, ServiceStack.Messaging.IMessageProducer, ServiceStack.IOneWayClient + { + public void Ack(ServiceStack.Messaging.IMessage message) => throw null; + public ServiceStack.Messaging.IMessage CreateMessage(object mqResponse) => throw null; + public void Dispose() => throw null; + public ServiceStack.Messaging.IMessage Get(string queueName, System.TimeSpan? timeOut = default(System.TimeSpan?)) => throw null; + public ServiceStack.Messaging.IMessage GetAsync(string queueName) => throw null; + public string GetTempQueueName() => throw null; + public int MaxSuccessQueueSize { get => throw null; set => throw null; } + public void Nak(ServiceStack.Messaging.IMessage message, bool requeue, System.Exception exception = default(System.Exception)) => throw null; + public void Notify(string queueName, ServiceStack.Messaging.IMessage message) => throw null; + public void Publish(T messageBody) => throw null; + public void Publish(ServiceStack.Messaging.IMessage message) => throw null; + public void Publish(string queueName, ServiceStack.Messaging.IMessage message) => throw null; + public ServiceStack.Redis.IRedisNativeClient ReadOnlyClient { get => throw null; } + public ServiceStack.Redis.IRedisNativeClient ReadWriteClient { get => throw null; } + public RedisMessageQueueClient(ServiceStack.Redis.IRedisClientsManager clientsManager, System.Action onPublishedCallback) => throw null; + public RedisMessageQueueClient(ServiceStack.Redis.IRedisClientsManager clientsManager) => throw null; + public void SendAllOneWay(System.Collections.Generic.IEnumerable requests) => throw null; + public void SendOneWay(string queueName, object requestDto) => throw null; + public void SendOneWay(object requestDto) => throw null; + } + + // Generated from `ServiceStack.Messaging.RedisMessageQueueClientFactory` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class RedisMessageQueueClientFactory : System.IDisposable, ServiceStack.Messaging.IMessageQueueClientFactory + { + public ServiceStack.Messaging.IMessageQueueClient CreateMessageQueueClient() => throw null; + public void Dispose() => throw null; + public RedisMessageQueueClientFactory(ServiceStack.Redis.IRedisClientsManager clientsManager, System.Action onPublishedCallback) => throw null; + } + + } + namespace Pcl + { + // Generated from `ServiceStack.Pcl.HttpUtility` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class HttpUtility + { + public HttpUtility() => throw null; + public static System.Collections.Specialized.NameValueCollection ParseQueryString(string query, System.Text.Encoding encoding) => throw null; + public static System.Collections.Specialized.NameValueCollection ParseQueryString(string query) => throw null; + } + + } + namespace Serialization + { + // Generated from `ServiceStack.Serialization.DataContractSerializer` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class DataContractSerializer : ServiceStack.Text.IStringSerializer + { + public System.Byte[] Compress(XmlDto from) => throw null; + public void CompressToStream(XmlDto from, System.IO.Stream stream) => throw null; + public DataContractSerializer(System.Xml.XmlDictionaryReaderQuotas quotas = default(System.Xml.XmlDictionaryReaderQuotas)) => throw null; + public object DeserializeFromStream(System.Type type, System.IO.Stream stream) => throw null; + public T DeserializeFromStream(System.IO.Stream stream) => throw null; + public object DeserializeFromString(string xml, System.Type type) => throw null; + public T DeserializeFromString(string xml) => throw null; + public static ServiceStack.Serialization.DataContractSerializer Instance; + public string Parse(XmlDto from, bool indentXml) => throw null; + public void SerializeToStream(object obj, System.IO.Stream stream) => throw null; + public string SerializeToString(XmlDto from) => throw null; + } + + // Generated from `ServiceStack.Serialization.IStringStreamSerializer` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IStringStreamSerializer + { + object DeserializeFromStream(System.Type type, System.IO.Stream stream); + T DeserializeFromStream(System.IO.Stream stream); + void SerializeToStream(T obj, System.IO.Stream stream); + } + + // Generated from `ServiceStack.Serialization.JsonDataContractSerializer` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class JsonDataContractSerializer : ServiceStack.Text.IStringSerializer + { + public static object BclDeserializeFromStream(System.Type type, System.IO.Stream stream) => throw null; + public static object BclDeserializeFromString(string json, System.Type returnType) => throw null; + public static void BclSerializeToStream(T obj, System.IO.Stream stream) => throw null; + public static string BclSerializeToString(T obj) => throw null; + public object DeserializeFromStream(System.Type type, System.IO.Stream stream) => throw null; + public T DeserializeFromStream(System.IO.Stream stream) => throw null; + public object DeserializeFromString(string json, System.Type returnType) => throw null; + public T DeserializeFromString(string json) => throw null; + public static ServiceStack.Serialization.JsonDataContractSerializer Instance; + public JsonDataContractSerializer() => throw null; + public void SerializeToStream(T obj, System.IO.Stream stream) => throw null; + public string SerializeToString(T obj) => throw null; + public ServiceStack.Text.IStringSerializer TextSerializer { get => throw null; set => throw null; } + public bool UseBcl { get => throw null; set => throw null; } + public static void UseSerializer(ServiceStack.Text.IStringSerializer textSerializer) => throw null; + } + + // Generated from `ServiceStack.Serialization.KeyValueDataContractDeserializer` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class KeyValueDataContractDeserializer + { + public static ServiceStack.Serialization.KeyValueDataContractDeserializer Instance; + public KeyValueDataContractDeserializer() => throw null; + public object Parse(System.Collections.Specialized.NameValueCollection nameValues, System.Type returnType) => throw null; + public object Parse(System.Collections.Generic.IDictionary keyValuePairs, System.Type returnType) => throw null; + public To Parse(System.Collections.Generic.IDictionary keyValuePairs) => throw null; + public object Populate(object instance, System.Collections.Specialized.NameValueCollection nameValues, System.Type returnType) => throw null; + } + + // Generated from `ServiceStack.Serialization.RequestBindingError` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class RequestBindingError + { + public string ErrorMessage { get => throw null; set => throw null; } + public string PropertyName { get => throw null; set => throw null; } + public System.Type PropertyType { get => throw null; set => throw null; } + public string PropertyValueString { get => throw null; set => throw null; } + public RequestBindingError() => throw null; + } + + // Generated from `ServiceStack.Serialization.StringMapTypeDeserializer` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class StringMapTypeDeserializer + { + public object CreateFromMap(System.Collections.Specialized.NameValueCollection nameValues) => throw null; + public object CreateFromMap(System.Collections.Generic.IDictionary keyValuePairs) => throw null; + public ServiceStack.Text.Common.ParseStringDelegate GetParseFn(System.Type propertyType) => throw null; + public object PopulateFromMap(object instance, System.Collections.Specialized.NameValueCollection nameValues, System.Collections.Generic.List ignoredWarningsOnPropertyNames = default(System.Collections.Generic.List)) => throw null; + public object PopulateFromMap(object instance, System.Collections.Generic.IDictionary keyValuePairs, System.Collections.Generic.List ignoredWarningsOnPropertyNames = default(System.Collections.Generic.List)) => throw null; + public StringMapTypeDeserializer(System.Type type) => throw null; + } + + // Generated from `ServiceStack.Serialization.XmlSerializableSerializer` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class XmlSerializableSerializer : ServiceStack.Text.IStringSerializer + { + public object DeserializeFromStream(System.Type type, System.IO.Stream stream) => throw null; + public object DeserializeFromString(string xml, System.Type type) => throw null; + public To DeserializeFromString(string xml) => throw null; + public static ServiceStack.Serialization.XmlSerializableSerializer Instance; + public To Parse(System.IO.TextReader from) => throw null; + public To Parse(System.IO.Stream from) => throw null; + public void SerializeToStream(object obj, System.IO.Stream stream) => throw null; + public string SerializeToString(XmlDto from) => throw null; + public XmlSerializableSerializer() => throw null; + public static System.Xml.XmlWriterSettings XmlWriterSettings { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.Serialization.XmlSerializerWrapper` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class XmlSerializerWrapper : System.Runtime.Serialization.XmlObjectSerializer + { + public static string GetNamespace(System.Type type) => throw null; + public override bool IsStartObject(System.Xml.XmlDictionaryReader reader) => throw null; + public override object ReadObject(System.Xml.XmlDictionaryReader reader, bool verifyObjectName) => throw null; + public override object ReadObject(System.Xml.XmlDictionaryReader reader) => throw null; + public override void WriteEndObject(System.Xml.XmlDictionaryWriter writer) => throw null; + public override void WriteObject(System.Xml.XmlDictionaryWriter writer, object graph) => throw null; + public override void WriteObjectContent(System.Xml.XmlDictionaryWriter writer, object graph) => throw null; + public override void WriteStartObject(System.Xml.XmlDictionaryWriter writer, object graph) => throw null; + public XmlSerializerWrapper(System.Type type, string name, string ns) => throw null; + public XmlSerializerWrapper(System.Type type) => throw null; + } + + } + namespace Support + { + // Generated from `ServiceStack.Support.NetDeflateProvider` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class NetDeflateProvider : ServiceStack.Caching.IDeflateProvider + { + public System.Byte[] Deflate(string text) => throw null; + public System.Byte[] Deflate(System.Byte[] bytes) => throw null; + public System.IO.Stream DeflateStream(System.IO.Stream outputStream) => throw null; + public string Inflate(System.Byte[] gzBuffer) => throw null; + public System.Byte[] InflateBytes(System.Byte[] gzBuffer) => throw null; + public System.IO.Stream InflateStream(System.IO.Stream inputStream) => throw null; + public NetDeflateProvider() => throw null; + } + + // Generated from `ServiceStack.Support.NetGZipProvider` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class NetGZipProvider : ServiceStack.Caching.IGZipProvider + { + public string GUnzip(System.Byte[] gzBuffer) => throw null; + public System.Byte[] GUnzipBytes(System.Byte[] gzBuffer) => throw null; + public System.IO.Stream GUnzipStream(System.IO.Stream gzStream) => throw null; + public System.Byte[] GZip(string text) => throw null; + public System.Byte[] GZip(System.Byte[] buffer) => throw null; + public System.IO.Stream GZipStream(System.IO.Stream outputStream) => throw null; + public NetGZipProvider() => throw null; + } + + } + namespace Validation + { + // Generated from `ServiceStack.Validation.ValidationError` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ValidationError : System.ArgumentException, ServiceStack.Model.IResponseStatusConvertible + { + public static ServiceStack.Validation.ValidationError CreateException(string errorCode, string errorMessage, string fieldName) => throw null; + public static ServiceStack.Validation.ValidationError CreateException(string errorCode, string errorMessage) => throw null; + public static ServiceStack.Validation.ValidationError CreateException(string errorCode) => throw null; + public static ServiceStack.Validation.ValidationError CreateException(System.Enum errorCode, string errorMessage, string fieldName) => throw null; + public static ServiceStack.Validation.ValidationError CreateException(System.Enum errorCode, string errorMessage) => throw null; + public static ServiceStack.Validation.ValidationError CreateException(System.Enum errorCode) => throw null; + public static ServiceStack.Validation.ValidationError CreateException(ServiceStack.Validation.ValidationErrorField error) => throw null; + public string ErrorCode { get => throw null; } + public string ErrorMessage { get => throw null; } + public override string Message { get => throw null; } + public static void ThrowIfNotValid(ServiceStack.Validation.ValidationErrorResult validationResult) => throw null; + public ServiceStack.ResponseStatus ToResponseStatus() => throw null; + public string ToXml() => throw null; + public ValidationError(string errorCode, string errorMessage) => throw null; + public ValidationError(string errorCode) => throw null; + public ValidationError(ServiceStack.Validation.ValidationErrorResult validationResult) => throw null; + public ValidationError(ServiceStack.Validation.ValidationErrorField validationError) => throw null; + public System.Collections.Generic.IList Violations { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.Validation.ValidationErrorField` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ValidationErrorField : ServiceStack.IMeta + { + public object AttemptedValue { get => throw null; set => throw null; } + public string ErrorCode { get => throw null; set => throw null; } + public string ErrorMessage { get => throw null; set => throw null; } + public string FieldName { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary Meta { get => throw null; set => throw null; } + public ValidationErrorField(string errorCode, string fieldName, string errorMessage, object attemptedValue) => throw null; + public ValidationErrorField(string errorCode, string fieldName, string errorMessage) => throw null; + public ValidationErrorField(string errorCode, string fieldName) => throw null; + public ValidationErrorField(string errorCode) => throw null; + public ValidationErrorField(System.Enum errorCode, string fieldName, string errorMessage) => throw null; + public ValidationErrorField(System.Enum errorCode, string fieldName) => throw null; + public ValidationErrorField(System.Enum errorCode) => throw null; + } + + // Generated from `ServiceStack.Validation.ValidationErrorResult` in `ServiceStack.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ValidationErrorResult + { + public string ErrorCode { get => throw null; set => throw null; } + public string ErrorMessage { get => throw null; set => throw null; } + public System.Collections.Generic.IList Errors { get => throw null; set => throw null; } + public virtual bool IsValid { get => throw null; } + public void Merge(ServiceStack.Validation.ValidationErrorResult result) => throw null; + public virtual string Message { get => throw null; } + public static ServiceStack.Validation.ValidationErrorResult Success { get => throw null; } + public string SuccessCode { get => throw null; set => throw null; } + public string SuccessMessage { get => throw null; set => throw null; } + public ValidationErrorResult(System.Collections.Generic.IList errors, string successCode, string errorCode) => throw null; + public ValidationErrorResult(System.Collections.Generic.IList errors) => throw null; + public ValidationErrorResult() => throw null; + } + + } +} diff --git a/csharp/ql/test/resources/stubs/ServiceStack.Client/5.11.0/ServiceStack.Client.csproj b/csharp/ql/test/resources/stubs/ServiceStack.Client/5.11.0/ServiceStack.Client.csproj new file mode 100644 index 00000000000..55204146344 --- /dev/null +++ b/csharp/ql/test/resources/stubs/ServiceStack.Client/5.11.0/ServiceStack.Client.csproj @@ -0,0 +1,14 @@ + + + net5.0 + true + bin\ + false + + + + + + + + diff --git a/csharp/ql/test/resources/stubs/ServiceStack.Common/5.11.0/ServiceStack.Common.cs b/csharp/ql/test/resources/stubs/ServiceStack.Common/5.11.0/ServiceStack.Common.cs new file mode 100644 index 00000000000..01925768074 --- /dev/null +++ b/csharp/ql/test/resources/stubs/ServiceStack.Common/5.11.0/ServiceStack.Common.cs @@ -0,0 +1,5620 @@ +// This file contains auto-generated code. + +namespace ServiceStack +{ + // Generated from `ServiceStack.ActionExecExtensions` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class ActionExecExtensions + { + public static void ExecAllAndWait(this System.Collections.Generic.ICollection actions, System.TimeSpan timeout) => throw null; + public static System.Collections.Generic.List ExecAsync(this System.Collections.Generic.IEnumerable actions) => throw null; + public static bool WaitAll(this System.Collections.Generic.List waitHandles, int timeoutMs) => throw null; + public static bool WaitAll(this System.Collections.Generic.List asyncResults, System.TimeSpan timeout) => throw null; + public static bool WaitAll(this System.Collections.Generic.ICollection waitHandles, int timeoutMs) => throw null; + public static bool WaitAll(this System.Collections.Generic.ICollection waitHandles, System.TimeSpan timeout) => throw null; + public static bool WaitAll(System.Threading.WaitHandle[] waitHandles, int timeOutMs) => throw null; + public static bool WaitAll(System.Threading.WaitHandle[] waitHandles, System.TimeSpan timeout) => throw null; + } + + // Generated from `ServiceStack.ActionInvoker` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public delegate void ActionInvoker(object instance, params object[] args); + + // Generated from `ServiceStack.AdminUsersInfo` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class AdminUsersInfo : ServiceStack.IMeta + { + public string AccessRole { get => throw null; set => throw null; } + public AdminUsersInfo() => throw null; + public System.Collections.Generic.List AllPermissions { get => throw null; set => throw null; } + public System.Collections.Generic.List AllRoles { get => throw null; set => throw null; } + public System.Collections.Generic.List Enabled { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary Meta { get => throw null; set => throw null; } + public System.Collections.Generic.List QueryUserAuthProperties { get => throw null; set => throw null; } + public ServiceStack.MetadataType UserAuth { get => throw null; set => throw null; } + public ServiceStack.MetadataType UserAuthDetails { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.AppInfo` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class AppInfo : ServiceStack.IMeta + { + public AppInfo() => throw null; + public string BackgroundColor { get => throw null; set => throw null; } + public string BackgroundImageUrl { get => throw null; set => throw null; } + public string BaseUrl { get => throw null; set => throw null; } + public string BrandImageUrl { get => throw null; set => throw null; } + public string BrandUrl { get => throw null; set => throw null; } + public string IconUrl { get => throw null; set => throw null; } + public string JsTextCase { get => throw null; set => throw null; } + public string LinkColor { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary Meta { get => throw null; set => throw null; } + public string ServiceDescription { get => throw null; set => throw null; } + public string ServiceIconUrl { get => throw null; set => throw null; } + public string ServiceName { get => throw null; set => throw null; } + public string ServiceStackVersion { get => throw null; } + public string TextColor { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.AppMetadata` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class AppMetadata : ServiceStack.IMeta + { + public ServiceStack.MetadataTypes Api { get => throw null; set => throw null; } + public ServiceStack.AppInfo App { get => throw null; set => throw null; } + public AppMetadata() => throw null; + public System.Collections.Generic.Dictionary ContentTypeFormats { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary CustomPlugins { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary Meta { get => throw null; set => throw null; } + public ServiceStack.PluginInfo Plugins { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.AssertExtensions` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class AssertExtensions + { + public static void ThrowIfNull(this object obj, string varName) => throw null; + public static void ThrowIfNull(this object obj) => throw null; + public static T ThrowIfNull(this T obj, string varName) => throw null; + public static string ThrowIfNullOrEmpty(this string strValue, string varName) => throw null; + public static string ThrowIfNullOrEmpty(this string strValue) => throw null; + public static System.Collections.ICollection ThrowIfNullOrEmpty(this System.Collections.ICollection collection, string varName) => throw null; + public static System.Collections.ICollection ThrowIfNullOrEmpty(this System.Collections.ICollection collection) => throw null; + public static System.Collections.Generic.ICollection ThrowIfNullOrEmpty(this System.Collections.Generic.ICollection collection, string varName) => throw null; + public static System.Collections.Generic.ICollection ThrowIfNullOrEmpty(this System.Collections.Generic.ICollection collection) => throw null; + public static void ThrowOnFirstNull(params object[] objs) => throw null; + } + + // Generated from `ServiceStack.AssertUtils` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class AssertUtils + { + public static void AreNotNull(params T[] fields) => throw null; + public static void AreNotNull(System.Collections.Generic.IDictionary fieldMap) => throw null; + } + + // Generated from `ServiceStack.AttributeExtensions` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class AttributeExtensions + { + public static string GetDescription(this System.Type type) => throw null; + public static string GetDescription(this System.Reflection.ParameterInfo pi) => throw null; + public static string GetDescription(this System.Reflection.MemberInfo mi) => throw null; + } + + // Generated from `ServiceStack.AuthInfo` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class AuthInfo : ServiceStack.IMeta + { + public AuthInfo() => throw null; + public System.Collections.Generic.List AuthProviders { get => throw null; set => throw null; } + public bool? HasAuthRepository { get => throw null; set => throw null; } + public bool? HasAuthSecret { get => throw null; set => throw null; } + public string HtmlRedirect { get => throw null; set => throw null; } + public bool? IncludesOAuthTokens { get => throw null; set => throw null; } + public bool? IncludesRoles { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary Meta { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary ServiceRoutes { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.AutoQueryConvention` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class AutoQueryConvention + { + public AutoQueryConvention() => throw null; + public string Name { get => throw null; set => throw null; } + public string Types { get => throw null; set => throw null; } + public string Value { get => throw null; set => throw null; } + public string ValueType { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.AutoQueryInfo` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class AutoQueryInfo : ServiceStack.IMeta + { + public string AccessRole { get => throw null; set => throw null; } + public bool? Async { get => throw null; set => throw null; } + public AutoQueryInfo() => throw null; + public bool? AutoQueryViewer { get => throw null; set => throw null; } + public bool? CrudEvents { get => throw null; set => throw null; } + public bool? CrudEventsServices { get => throw null; set => throw null; } + public int? MaxLimit { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary Meta { get => throw null; set => throw null; } + public string NamedConnection { get => throw null; set => throw null; } + public bool? OrderByPrimaryKey { get => throw null; set => throw null; } + public bool? RawSqlFilters { get => throw null; set => throw null; } + public bool? UntypedQueries { get => throw null; set => throw null; } + public System.Collections.Generic.List ViewerConventions { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.BundleOptions` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class BundleOptions + { + public bool Bundle { get => throw null; set => throw null; } + public BundleOptions() => throw null; + public bool Cache { get => throw null; set => throw null; } + public bool IIFE { get => throw null; set => throw null; } + public bool Minify { get => throw null; set => throw null; } + public string OutputTo { get => throw null; set => throw null; } + public string OutputWebPath { get => throw null; set => throw null; } + public string PathBase { get => throw null; set => throw null; } + public bool RegisterModuleInAmd { get => throw null; set => throw null; } + public bool SaveToDisk { get => throw null; set => throw null; } + public System.Collections.Generic.List Sources { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.ByteArrayComparer` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ByteArrayComparer : System.Collections.Generic.IEqualityComparer + { + public ByteArrayComparer() => throw null; + public bool Equals(System.Byte[] left, System.Byte[] right) => throw null; + public int GetHashCode(System.Byte[] key) => throw null; + public static ServiceStack.ByteArrayComparer Instance; + } + + // Generated from `ServiceStack.ByteArrayExtensions` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class ByteArrayExtensions + { + public static bool AreEqual(this System.Byte[] b1, System.Byte[] b2) => throw null; + public static System.Byte[] ToSha1Hash(this System.Byte[] bytes) => throw null; + } + + // Generated from `ServiceStack.CachedExpressionCompiler` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class CachedExpressionCompiler + { + public static System.Func Compile(this System.Linq.Expressions.Expression> lambdaExpression) => throw null; + public static object Evaluate(System.Linq.Expressions.Expression arg) => throw null; + } + + // Generated from `ServiceStack.Command` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class Command + { + public System.Collections.Generic.List> Args { get => throw null; set => throw null; } + public System.ReadOnlyMemory AsMemory() => throw null; + public Command() => throw null; + public int IndexOfMethodEnd(System.ReadOnlyMemory commandsString, int pos) => throw null; + public string Name { get => throw null; set => throw null; } + public System.ReadOnlyMemory Original { get => throw null; set => throw null; } + public System.ReadOnlyMemory Suffix { get => throw null; set => throw null; } + public virtual string ToDebugString() => throw null; + public override string ToString() => throw null; + } + + // Generated from `ServiceStack.CommandsUtils` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class CommandsUtils + { + public CommandsUtils() => throw null; + public static void ExecuteAsyncCommandExec(System.TimeSpan timeout, System.Collections.Generic.IEnumerable commands) => throw null; + public static System.Collections.Generic.List ExecuteAsyncCommandExec(System.Collections.Generic.IEnumerable commands) => throw null; + public static System.Collections.Generic.List ExecuteAsyncCommandList(System.TimeSpan timeout, params ServiceStack.Commands.ICommandList[] commands) => throw null; + public static System.Collections.Generic.List ExecuteAsyncCommandList(System.TimeSpan timeout, System.Collections.Generic.IEnumerable> commands) => throw null; + public static void WaitAll(System.Threading.WaitHandle[] waitHandles, System.TimeSpan timeout) => throw null; + } + + // Generated from `ServiceStack.ConnectionInfo` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ConnectionInfo + { + public ConnectionInfo() => throw null; + public string ConnectionString { get => throw null; set => throw null; } + public string NamedConnection { get => throw null; set => throw null; } + public string ProviderName { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.ContainerExtensions` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class ContainerExtensions + { + public static ServiceStack.IContainer AddSingleton(this ServiceStack.IContainer container, System.Func factory) => throw null; + public static ServiceStack.IContainer AddSingleton(this ServiceStack.IContainer container) => throw null; + public static ServiceStack.IContainer AddSingleton(this ServiceStack.IContainer container) where TImpl : TService => throw null; + public static ServiceStack.IContainer AddSingleton(this ServiceStack.IContainer container, System.Type type) => throw null; + public static ServiceStack.IContainer AddTransient(this ServiceStack.IContainer container, System.Func factory) => throw null; + public static ServiceStack.IContainer AddTransient(this ServiceStack.IContainer container) => throw null; + public static ServiceStack.IContainer AddTransient(this ServiceStack.IContainer container) where TImpl : TService => throw null; + public static ServiceStack.IContainer AddTransient(this ServiceStack.IContainer container, System.Type type) => throw null; + public static bool Exists(this ServiceStack.IContainer container) => throw null; + public static T Resolve(this ServiceStack.IContainer container) => throw null; + public static T Resolve(this ServiceStack.Configuration.IResolver container) => throw null; + } + + // Generated from `ServiceStack.CustomPlugin` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class CustomPlugin : ServiceStack.IMeta + { + public string AccessRole { get => throw null; set => throw null; } + public CustomPlugin() => throw null; + public System.Collections.Generic.List Enabled { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary Meta { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary ServiceRoutes { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.DictionaryExtensions` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class DictionaryExtensions + { + public static System.Collections.Generic.List ConvertAll(System.Collections.Generic.IDictionary map, System.Func createFn) => throw null; + public static void ForEach(this System.Collections.Generic.Dictionary dictionary, System.Action onEachFn) => throw null; + public static V GetOrAdd(this System.Collections.Generic.Dictionary map, K key, System.Func createFn) => throw null; + public static TValue GetValue(this System.Collections.Generic.Dictionary dictionary, TKey key, System.Func defaultValue) => throw null; + public static TValue GetValueOrDefault(this System.Collections.Generic.Dictionary dictionary, TKey key) => throw null; + public static bool IsNullOrEmpty(this System.Collections.IDictionary dictionary) => throw null; + public static System.Collections.Generic.Dictionary Merge(this System.Collections.Generic.IDictionary initial, params System.Collections.Generic.IEnumerable>[] withSources) => throw null; + public static System.Collections.Generic.Dictionary MoveKey(this System.Collections.Generic.Dictionary map, TKey oldKey, TKey newKey, System.Func valueFilter = default(System.Func)) => throw null; + public static System.Collections.Generic.KeyValuePair PairWith(this TKey key, TValue value) => throw null; + public static System.Collections.Generic.Dictionary RemoveKey(this System.Collections.Generic.Dictionary map, TKey key) => throw null; + public static System.Collections.Concurrent.ConcurrentDictionary ToConcurrentDictionary(this System.Collections.Generic.IDictionary from) => throw null; + public static System.Collections.Generic.Dictionary ToDictionary(this System.Collections.Concurrent.ConcurrentDictionary map) => throw null; + public static bool TryRemove(this System.Collections.Generic.Dictionary map, TKey key, out TValue value) => throw null; + public static bool UnorderedEquivalentTo(this System.Collections.Generic.IDictionary thisMap, System.Collections.Generic.IDictionary otherMap) => throw null; + } + + // Generated from `ServiceStack.DirectoryInfoExtensions` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class DirectoryInfoExtensions + { + public static System.Collections.Generic.IEnumerable GetMatchingFiles(this System.IO.DirectoryInfo rootDirPath, string fileSearchPattern) => throw null; + public static System.Collections.Generic.IEnumerable GetMatchingFiles(string rootDirPath, string fileSearchPattern) => throw null; + } + + // Generated from `ServiceStack.DisposableExtensions` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class DisposableExtensions + { + public static void Dispose(this System.Collections.Generic.IEnumerable resources, ServiceStack.Logging.ILog log) => throw null; + public static void Dispose(this System.Collections.Generic.IEnumerable resources) => throw null; + public static void Dispose(params System.IDisposable[] disposables) => throw null; + public static void Run(this T disposable, System.Action runActionThenDispose) where T : System.IDisposable => throw null; + } + + // Generated from `ServiceStack.EnumExtensions` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class EnumExtensions + { + public static T Add(this System.Enum @enum, T value) => throw null; + public static System.TypeCode GetTypeCode(this System.Enum @enum) => throw null; + public static bool Has(this System.Enum @enum, T value) => throw null; + public static bool Is(this System.Enum @enum, T value) => throw null; + public static T Remove(this System.Enum @enum, T value) => throw null; + public static string ToDescription(this System.Enum @enum) => throw null; + public static System.Collections.Generic.List> ToKeyValuePairs(this System.Collections.Generic.IEnumerable enums) where T : System.Enum => throw null; + public static System.Collections.Generic.List ToList(this System.Enum @enum) => throw null; + } + + // Generated from `ServiceStack.EnumUtils` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class EnumUtils + { + public static System.Collections.Generic.IEnumerable GetValues() where T : System.Enum => throw null; + } + + // Generated from `ServiceStack.EnumerableExtensions` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class EnumerableExtensions + { + public static System.Threading.Tasks.Task AllAsync(this System.Collections.Generic.IEnumerable source, System.Func> predicate) => throw null; + public static System.Threading.Tasks.Task AllAsync(this System.Collections.Generic.IEnumerable> source, System.Func predicate) => throw null; + public static System.Threading.Tasks.Task AnyAsync(this System.Collections.Generic.IEnumerable source, System.Func> predicate) => throw null; + public static System.Threading.Tasks.Task AnyAsync(this System.Collections.Generic.IEnumerable> source, System.Func predicate) => throw null; + public static System.Collections.Generic.IEnumerable BatchesOf(this System.Collections.Generic.IEnumerable sequence, int batchSize) => throw null; + public static void Each(this System.Collections.Generic.IDictionary map, System.Action action) => throw null; + public static void Each(this System.Collections.Generic.IEnumerable values, System.Action action) => throw null; + public static void Each(this System.Collections.Generic.IEnumerable values, System.Action action) => throw null; + public static bool EquivalentTo(this T[] array, T[] otherArray, System.Func comparer = default(System.Func)) => throw null; + public static bool EquivalentTo(this System.Collections.Generic.IEnumerable thisList, System.Collections.Generic.IEnumerable otherList, System.Func comparer = default(System.Func)) => throw null; + public static bool EquivalentTo(this System.Collections.Generic.IDictionary a, System.Collections.Generic.IDictionary b, System.Func comparer = default(System.Func)) => throw null; + public static bool EquivalentTo(this System.Byte[] bytes, System.Byte[] other) => throw null; + public static T FirstNonDefault(this System.Collections.Generic.IEnumerable values) => throw null; + public static string FirstNonDefaultOrEmpty(this System.Collections.Generic.IEnumerable values) => throw null; + public static bool IsEmpty(this T[] collection) => throw null; + public static bool IsEmpty(this System.Collections.Generic.ICollection collection) => throw null; + public static System.Collections.Generic.List Map(this System.Collections.IEnumerable items, System.Func converter) => throw null; + public static System.Collections.Generic.List Map(this System.Collections.Generic.IEnumerable items, System.Func converter) => throw null; + public static System.Collections.IEnumerable Safe(this System.Collections.IEnumerable enumerable) => throw null; + public static System.Collections.Generic.IEnumerable Safe(this System.Collections.Generic.IEnumerable enumerable) => throw null; + public static System.Collections.Generic.Dictionary ToDictionary(this System.Collections.Generic.IEnumerable list, System.Func> map) => throw null; + public static System.Collections.Generic.HashSet ToHashSet(this System.Collections.Generic.IEnumerable items) => throw null; + public static System.Collections.Generic.List ToObjects(this System.Collections.Generic.IEnumerable items) => throw null; + public static System.Collections.Generic.Dictionary ToSafeDictionary(this System.Collections.Generic.IEnumerable list, System.Func expr) => throw null; + public static System.Collections.Generic.HashSet ToSet(this System.Collections.Generic.IEnumerable items) => throw null; + } + + // Generated from `ServiceStack.EnumerableUtils` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class EnumerableUtils + { + public static int Count(System.Collections.IEnumerable items) => throw null; + public static object ElementAt(System.Collections.IEnumerable items, int index) => throw null; + public static object FirstOrDefault(System.Collections.IEnumerable items) => throw null; + public static bool IsEmpty(System.Collections.IEnumerable items) => throw null; + public static System.Collections.IEnumerable NullIfEmpty(System.Collections.IEnumerable items) => throw null; + public static System.Collections.Generic.List Skip(System.Collections.IEnumerable items, int count) => throw null; + public static System.Collections.Generic.List SplitOnFirst(System.Collections.IEnumerable items, out object first) => throw null; + public static System.Collections.Generic.List Take(System.Collections.IEnumerable items, int count) => throw null; + public static System.Collections.Generic.List ToList(System.Collections.IEnumerable items) => throw null; + } + + // Generated from `ServiceStack.ExecUtils` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class ExecUtils + { + public static int BaseDelayMs { get => throw null; set => throw null; } + public static int CalculateExponentialDelay(int retriesAttempted, int baseDelay, int maxBackOffMs) => throw null; + public static int CalculateExponentialDelay(int retriesAttempted) => throw null; + public static int CalculateFullJitterBackOffDelay(int retriesAttempted, int baseDelay, int maxBackOffMs) => throw null; + public static int CalculateFullJitterBackOffDelay(int retriesAttempted) => throw null; + public static int CalculateMemoryLockDelay(int retries) => throw null; + public static System.Threading.Tasks.Task DelayBackOffMultiplierAsync(int retriesAttempted) => throw null; + public static void ExecAll(this System.Collections.Generic.IEnumerable instances, System.Action action) => throw null; + public static System.Threading.Tasks.Task ExecAllAsync(this System.Collections.Generic.IEnumerable instances, System.Func action) => throw null; + public static System.Threading.Tasks.Task ExecAllReturnFirstAsync(this System.Collections.Generic.IEnumerable instances, System.Func> action) => throw null; + public static void ExecAllWithFirstOut(this System.Collections.Generic.IEnumerable instances, System.Func action, ref TReturn firstResult) => throw null; + public static TReturn ExecReturnFirstWithResult(this System.Collections.Generic.IEnumerable instances, System.Func action) => throw null; + public static System.Threading.Tasks.Task ExecReturnFirstWithResultAsync(this System.Collections.Generic.IEnumerable instances, System.Func> action) => throw null; + public static void LogError(System.Type declaringType, string clientMethodName, System.Exception ex) => throw null; + public static int MaxBackOffMs { get => throw null; set => throw null; } + public static int MaxRetries { get => throw null; set => throw null; } + public static void RetryOnException(System.Action action, int maxRetries) => throw null; + public static void RetryOnException(System.Action action, System.TimeSpan? timeOut) => throw null; + public static System.Threading.Tasks.Task RetryOnExceptionAsync(System.Func action, int maxRetries) => throw null; + public static System.Threading.Tasks.Task RetryOnExceptionAsync(System.Func action, System.TimeSpan? timeOut) => throw null; + public static void RetryUntilTrue(System.Func action, System.TimeSpan? timeOut = default(System.TimeSpan?)) => throw null; + public static System.Threading.Tasks.Task RetryUntilTrueAsync(System.Func> action, System.TimeSpan? timeOut = default(System.TimeSpan?)) => throw null; + public static string ShellExec(string command, System.Collections.Generic.Dictionary args = default(System.Collections.Generic.Dictionary)) => throw null; + public static void SleepBackOffMultiplier(int retriesAttempted) => throw null; + } + + // Generated from `ServiceStack.ExpressionUtils` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class ExpressionUtils + { + public static System.Collections.Generic.Dictionary AssignedValues(this System.Linq.Expressions.Expression> expr) => throw null; + public static string[] GetFieldNames(this System.Linq.Expressions.Expression> expr) => throw null; + public static System.Linq.Expressions.MemberExpression GetMemberExpression(System.Linq.Expressions.Expression> expr) => throw null; + public static string GetMemberName(System.Linq.Expressions.Expression> fieldExpr) => throw null; + public static object GetValue(this System.Linq.Expressions.MemberBinding binding) => throw null; + public static System.Reflection.PropertyInfo ToPropertyInfo(this System.Linq.Expressions.Expression fieldExpr) => throw null; + public static System.Reflection.PropertyInfo ToPropertyInfo(System.Linq.Expressions.MemberExpression m) => throw null; + public static System.Reflection.PropertyInfo ToPropertyInfo(System.Linq.Expressions.LambdaExpression lambda) => throw null; + } + + // Generated from `ServiceStack.FuncUtils` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class FuncUtils + { + public static bool TryExec(System.Action action) => throw null; + public static T TryExec(System.Func func, T defaultValue) => throw null; + public static T TryExec(System.Func func) => throw null; + public static void WaitWhile(System.Func condition, int millisecondTimeout, int millsecondPollPeriod = default(int)) => throw null; + } + + // Generated from `ServiceStack.Gist` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class Gist + { + public System.DateTime Created_At { get => throw null; set => throw null; } + public string Description { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary Files { get => throw null; set => throw null; } + public Gist() => throw null; + public string Html_Url { get => throw null; set => throw null; } + public string Id { get => throw null; set => throw null; } + public bool Public { get => throw null; set => throw null; } + public System.DateTime? Updated_At { get => throw null; set => throw null; } + public string Url { get => throw null; set => throw null; } + public string UserId { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.GistChangeStatus` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class GistChangeStatus + { + public int Additions { get => throw null; set => throw null; } + public int Deletions { get => throw null; set => throw null; } + public GistChangeStatus() => throw null; + public int Total { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.GistFile` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class GistFile + { + public string Content { get => throw null; set => throw null; } + public string Filename { get => throw null; set => throw null; } + public GistFile() => throw null; + public string Language { get => throw null; set => throw null; } + public string Raw_Url { get => throw null; set => throw null; } + public int Size { get => throw null; set => throw null; } + public bool Truncated { get => throw null; set => throw null; } + public string Type { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.GistHistory` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class GistHistory + { + public ServiceStack.GistChangeStatus Change_Status { get => throw null; set => throw null; } + public System.DateTime Committed_At { get => throw null; set => throw null; } + public GistHistory() => throw null; + public string Url { get => throw null; set => throw null; } + public ServiceStack.GithubUser User { get => throw null; set => throw null; } + public string Version { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.GistLink` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class GistLink + { + public string Description { get => throw null; set => throw null; } + public static ServiceStack.GistLink Get(System.Collections.Generic.List links, string gistAlias) => throw null; + public string GistId { get => throw null; set => throw null; } + public GistLink() => throw null; + public bool MatchesTag(string tagName) => throw null; + public System.Collections.Generic.Dictionary Modifiers { get => throw null; set => throw null; } + public string Name { get => throw null; set => throw null; } + public static System.Collections.Generic.List Parse(string md) => throw null; + public static string RenderLinks(System.Collections.Generic.List links) => throw null; + public string Repo { get => throw null; set => throw null; } + public string[] Tags { get => throw null; set => throw null; } + public string To { get => throw null; set => throw null; } + public string ToListItem() => throw null; + public override string ToString() => throw null; + public string ToTagsString() => throw null; + public static bool TryParseGitHubUrl(string url, out string gistId, out string user, out string repo) => throw null; + public string Url { get => throw null; set => throw null; } + public string User { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.GistUser` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class GistUser + { + public string Avatar_Url { get => throw null; set => throw null; } + public GistUser() => throw null; + public string Gists_Url { get => throw null; set => throw null; } + public string Gravatar_Id { get => throw null; set => throw null; } + public string Html_Url { get => throw null; set => throw null; } + public System.Int64 Id { get => throw null; set => throw null; } + public string Login { get => throw null; set => throw null; } + public bool Site_Admin { get => throw null; set => throw null; } + public string Type { get => throw null; set => throw null; } + public string Url { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.GitHubGateway` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class GitHubGateway : ServiceStack.IGitHubGateway, ServiceStack.IGistGateway + { + public string AccessToken { get => throw null; set => throw null; } + public const string ApiBaseUrl = default; + public virtual void ApplyRequestFilters(System.Net.HttpWebRequest req) => throw null; + protected virtual void AssertAccessToken() => throw null; + public virtual System.Tuple AssertRepo(string[] orgs, string name, bool useFork = default(bool)) => throw null; + public string BaseUrl { get => throw null; set => throw null; } + public virtual ServiceStack.Gist CreateGist(string description, bool isPublic, System.Collections.Generic.Dictionary textFiles) => throw null; + public virtual ServiceStack.Gist CreateGist(string description, bool isPublic, System.Collections.Generic.Dictionary files) => throw null; + public virtual void CreateGistFile(string gistId, string filePath, string contents) => throw null; + public virtual ServiceStack.GithubGist CreateGithubGist(string description, bool isPublic, System.Collections.Generic.Dictionary textFiles) => throw null; + public virtual ServiceStack.GithubGist CreateGithubGist(string description, bool isPublic, System.Collections.Generic.Dictionary files) => throw null; + public virtual void DeleteGistFiles(string gistId, params string[] filePaths) => throw null; + public virtual void DownloadFile(string downloadUrl, string fileName) => throw null; + public virtual System.Tuple FindRepo(string[] orgs, string name, bool useFork = default(bool)) => throw null; + public virtual ServiceStack.Gist GetGist(string gistId) => throw null; + public ServiceStack.Gist GetGist(string gistId, string version) => throw null; + public System.Threading.Tasks.Task GetGistAsync(string gistId, string version) => throw null; + public System.Threading.Tasks.Task GetGistAsync(string gistId) => throw null; + public virtual ServiceStack.GithubGist GetGithubGist(string gistId, string version) => throw null; + public virtual ServiceStack.GithubGist GetGithubGist(string gistId) => throw null; + public virtual string GetJson(string route) => throw null; + public virtual T GetJson(string route) => throw null; + public virtual System.Threading.Tasks.Task GetJsonAsync(string route) => throw null; + public virtual System.Threading.Tasks.Task GetJsonAsync(string route) => throw null; + public virtual System.Threading.Tasks.Task> GetJsonCollectionAsync(string route) => throw null; + public System.Func GetJsonFilter { get => throw null; set => throw null; } + public virtual System.Collections.Generic.List GetOrgRepos(string githubOrg) => throw null; + public virtual System.Threading.Tasks.Task> GetOrgReposAsync(string githubOrg) => throw null; + public ServiceStack.GithubRateLimits GetRateLimits() => throw null; + public System.Threading.Tasks.Task GetRateLimitsAsync() => throw null; + public virtual ServiceStack.GithubRepo GetRepo(string userOrOrg, string repo) => throw null; + public virtual System.Threading.Tasks.Task GetRepoAsync(string userOrOrg, string repo) => throw null; + public virtual System.Threading.Tasks.Task> GetSourceReposAsync(string orgName) => throw null; + public virtual string GetSourceZipUrl(string user, string repo) => throw null; + public virtual System.Threading.Tasks.Task GetSourceZipUrlAsync(string user, string repo) => throw null; + public virtual System.Threading.Tasks.Task> GetUserAndOrgReposAsync(string githubOrgOrUser) => throw null; + public virtual System.Collections.Generic.List GetUserRepos(string githubUser) => throw null; + public virtual System.Threading.Tasks.Task> GetUserReposAsync(string githubUser) => throw null; + public GitHubGateway(string accessToken) => throw null; + public GitHubGateway() => throw null; + public static bool IsDirSep(System.Char c) => throw null; + public virtual System.Collections.Generic.Dictionary ParseLinkUrls(string linkHeader) => throw null; + public virtual System.Collections.Generic.IEnumerable StreamJsonCollection(string route) => throw null; + public static System.Collections.Generic.Dictionary ToTextFiles(System.Collections.Generic.Dictionary files) => throw null; + public string UserAgent { get => throw null; set => throw null; } + public virtual void WriteGistFile(string gistId, string filePath, string contents) => throw null; + public virtual void WriteGistFiles(string gistId, System.Collections.Generic.Dictionary textFiles, string description = default(string), bool deleteMissing = default(bool)) => throw null; + public virtual void WriteGistFiles(string gistId, System.Collections.Generic.Dictionary files, string description = default(string), bool deleteMissing = default(bool)) => throw null; + } + + // Generated from `ServiceStack.GithubGist` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class GithubGist : ServiceStack.Gist + { + public int Comments { get => throw null; set => throw null; } + public string Comments_Url { get => throw null; set => throw null; } + public string Commits_Url { get => throw null; set => throw null; } + public string Forks_Url { get => throw null; set => throw null; } + public string Git_Pull_Url { get => throw null; set => throw null; } + public string Git_Push_Url { get => throw null; set => throw null; } + public GithubGist() => throw null; + public ServiceStack.GistHistory[] History { get => throw null; set => throw null; } + public string Node_Id { get => throw null; set => throw null; } + public ServiceStack.GithubUser Owner { get => throw null; set => throw null; } + public bool Truncated { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.GithubRateLimit` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class GithubRateLimit + { + public GithubRateLimit() => throw null; + public int Limit { get => throw null; set => throw null; } + public int Remaining { get => throw null; set => throw null; } + public System.Int64 Reset { get => throw null; set => throw null; } + public int Used { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.GithubRateLimits` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class GithubRateLimits + { + public GithubRateLimits() => throw null; + public ServiceStack.GithubResourcesRateLimits Resources { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.GithubRepo` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class GithubRepo + { + public System.DateTime Created_At { get => throw null; set => throw null; } + public string Description { get => throw null; set => throw null; } + public bool Fork { get => throw null; set => throw null; } + public string Full_Name { get => throw null; set => throw null; } + public GithubRepo() => throw null; + public bool Has_Downloads { get => throw null; set => throw null; } + public string Homepage { get => throw null; set => throw null; } + public string Html_Url { get => throw null; set => throw null; } + public int Id { get => throw null; set => throw null; } + public string Name { get => throw null; set => throw null; } + public ServiceStack.GithubRepo Parent { get => throw null; set => throw null; } + public bool Private { get => throw null; set => throw null; } + public int Size { get => throw null; set => throw null; } + public int Stargazers_Count { get => throw null; set => throw null; } + public System.DateTime? Updated_At { get => throw null; set => throw null; } + public string Url { get => throw null; set => throw null; } + public int Watchers_Count { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.GithubResourcesRateLimits` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class GithubResourcesRateLimits + { + public ServiceStack.GithubRateLimit Core { get => throw null; set => throw null; } + public GithubResourcesRateLimits() => throw null; + public ServiceStack.GithubRateLimit Graphql { get => throw null; set => throw null; } + public ServiceStack.GithubRateLimit Integration_Manifest { get => throw null; set => throw null; } + public ServiceStack.GithubRateLimit Search { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.GithubUser` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class GithubUser : ServiceStack.GistUser + { + public string Events_Url { get => throw null; set => throw null; } + public string Followers_Url { get => throw null; set => throw null; } + public string Following_Url { get => throw null; set => throw null; } + public GithubUser() => throw null; + public string Node_Id { get => throw null; set => throw null; } + public string Organizations_Url { get => throw null; set => throw null; } + public string Received_Events_Url { get => throw null; set => throw null; } + public string Repos_Url { get => throw null; set => throw null; } + public string Starred_Url { get => throw null; set => throw null; } + public string Subscriptions_Url { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.HtmlDumpOptions` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class HtmlDumpOptions + { + public string Caption { get => throw null; set => throw null; } + public string CaptionIfEmpty { get => throw null; set => throw null; } + public string ChildClass { get => throw null; set => throw null; } + public string ClassName { get => throw null; set => throw null; } + public ServiceStack.Script.DefaultScripts Defaults { get => throw null; set => throw null; } + public string Display { get => throw null; set => throw null; } + public ServiceStack.TextStyle HeaderStyle { get => throw null; set => throw null; } + public string HeaderTag { get => throw null; set => throw null; } + public HtmlDumpOptions() => throw null; + public string Id { get => throw null; set => throw null; } + public static ServiceStack.HtmlDumpOptions Parse(System.Collections.Generic.Dictionary options, ServiceStack.Script.DefaultScripts defaults = default(ServiceStack.Script.DefaultScripts)) => throw null; + } + + // Generated from `ServiceStack.IGistGateway` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IGistGateway + { + ServiceStack.Gist CreateGist(string description, bool isPublic, System.Collections.Generic.Dictionary textFiles); + ServiceStack.Gist CreateGist(string description, bool isPublic, System.Collections.Generic.Dictionary files); + void CreateGistFile(string gistId, string filePath, string contents); + void DeleteGistFiles(string gistId, params string[] filePaths); + ServiceStack.Gist GetGist(string gistId, string version); + ServiceStack.Gist GetGist(string gistId); + System.Threading.Tasks.Task GetGistAsync(string gistId, string version); + System.Threading.Tasks.Task GetGistAsync(string gistId); + void WriteGistFile(string gistId, string filePath, string contents); + void WriteGistFiles(string gistId, System.Collections.Generic.Dictionary textFiles, string description = default(string), bool deleteMissing = default(bool)); + void WriteGistFiles(string gistId, System.Collections.Generic.Dictionary files, string description = default(string), bool deleteMissing = default(bool)); + } + + // Generated from `ServiceStack.IGitHubGateway` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IGitHubGateway : ServiceStack.IGistGateway + { + void DownloadFile(string downloadUrl, string fileName); + System.Tuple FindRepo(string[] orgs, string name, bool useFork = default(bool)); + string GetJson(string route); + T GetJson(string route); + System.Threading.Tasks.Task GetJsonAsync(string route); + System.Threading.Tasks.Task GetJsonAsync(string route); + System.Threading.Tasks.Task> GetJsonCollectionAsync(string route); + System.Collections.Generic.List GetOrgRepos(string githubOrg); + System.Threading.Tasks.Task> GetOrgReposAsync(string githubOrg); + ServiceStack.GithubRepo GetRepo(string userOrOrg, string repo); + System.Threading.Tasks.Task GetRepoAsync(string userOrOrg, string repo); + System.Threading.Tasks.Task> GetSourceReposAsync(string orgName); + string GetSourceZipUrl(string user, string repo); + System.Threading.Tasks.Task GetSourceZipUrlAsync(string user, string repo); + System.Threading.Tasks.Task> GetUserAndOrgReposAsync(string githubOrgOrUser); + System.Collections.Generic.List GetUserRepos(string githubUser); + System.Threading.Tasks.Task> GetUserReposAsync(string githubUser); + System.Collections.Generic.IEnumerable StreamJsonCollection(string route); + } + + // Generated from `ServiceStack.IPAddressExtensions` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class IPAddressExtensions + { + public static System.Collections.Generic.Dictionary GetAllNetworkInterfaceIpv4Addresses() => throw null; + public static System.Collections.Generic.List GetAllNetworkInterfaceIpv6Addresses() => throw null; + public static System.Net.IPAddress GetBroadcastAddress(this System.Net.IPAddress address, System.Net.IPAddress subnetMask) => throw null; + public static System.Net.IPAddress GetNetworkAddress(this System.Net.IPAddress address, System.Net.IPAddress subnetMask) => throw null; + public static System.Byte[] GetNetworkAddressBytes(System.Byte[] ipAdressBytes, System.Byte[] subnetMaskBytes) => throw null; + public static bool IsInSameIpv4Subnet(this System.Net.IPAddress address2, System.Net.IPAddress address, System.Net.IPAddress subnetMask) => throw null; + public static bool IsInSameIpv4Subnet(this System.Byte[] address1Bytes, System.Byte[] address2Bytes, System.Byte[] subnetMaskBytes) => throw null; + public static bool IsInSameIpv6Subnet(this System.Net.IPAddress address2, System.Net.IPAddress address) => throw null; + public static bool IsInSameIpv6Subnet(this System.Byte[] address1Bytes, System.Byte[] address2Bytes) => throw null; + } + + // Generated from `ServiceStack.IdUtils` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class IdUtils + { + public static string CreateCacheKeyPath(string idValue) => throw null; + public static string CreateUrn(this T entity) => throw null; + public static string CreateUrn(object id) => throw null; + public static string CreateUrn(string type, object id) => throw null; + public static string CreateUrn(System.Type type, object id) => throw null; + public static object GetId(this T entity) => throw null; + public static System.Reflection.PropertyInfo GetIdProperty(this System.Type type) => throw null; + public static object GetObjectId(this object entity) => throw null; + public const string IdField = default; + public static object ToId(this T entity) => throw null; + public static string ToSafePathCacheKey(this string idValue) => throw null; + public static string ToUrn(this object id) => throw null; + public static string ToUrn(this T entity) => throw null; + } + + // Generated from `ServiceStack.IdUtils<>` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class IdUtils + { + public static object GetId(T entity) => throw null; + } + + // Generated from `ServiceStack.InputOptions` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class InputOptions + { + public string ErrorClass { get => throw null; set => throw null; } + public string Help { get => throw null; set => throw null; } + public bool Inline { get => throw null; set => throw null; } + public InputOptions() => throw null; + public System.Collections.Generic.IEnumerable> InputValues { set => throw null; } + public string Label { get => throw null; set => throw null; } + public string LabelClass { get => throw null; set => throw null; } + public bool PreserveValue { get => throw null; set => throw null; } + public bool ShowErrors { get => throw null; set => throw null; } + public string Size { get => throw null; set => throw null; } + public object Values { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.Inspect` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class Inspect + { + // Generated from `ServiceStack.Inspect+Config` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class Config + { + public static void DefaultVarsFilter(object anonArgs) => throw null; + public static System.Func DumpTableFilter { get => throw null; set => throw null; } + public static System.Action VarsFilter { get => throw null; set => throw null; } + public const string VarsName = default; + } + + + public static string dump(T instance) => throw null; + public static string dumpTable(object instance) => throw null; + public static void printDump(T instance) => throw null; + public static void printDumpTable(object instance) => throw null; + public static void vars(object anonArgs) => throw null; + } + + // Generated from `ServiceStack.InstanceMapper` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public delegate object InstanceMapper(object instance); + + // Generated from `ServiceStack.IntExtensions` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class IntExtensions + { + public static void Times(this int times, System.Action actionFn) => throw null; + public static void Times(this int times, System.Action actionFn) => throw null; + public static System.Collections.Generic.List Times(this int times, System.Func actionFn) => throw null; + public static System.Collections.Generic.List Times(this int times, System.Func actionFn) => throw null; + public static System.Collections.Generic.IEnumerable Times(this int times) => throw null; + public static System.Threading.Tasks.Task> TimesAsync(this int times, System.Func> actionFn, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task TimesAsync(this int times, System.Func actionFn, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Collections.Generic.List TimesAsync(this int times, System.Action actionFn) => throw null; + public static System.Collections.Generic.List TimesAsync(this int times, System.Action actionFn) => throw null; + } + + // Generated from `ServiceStack.JS` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class JS + { + public static void Configure() => throw null; + public static ServiceStack.Script.ScriptScopeContext CreateScope(System.Collections.Generic.Dictionary args = default(System.Collections.Generic.Dictionary), ServiceStack.Script.ScriptMethods functions = default(ServiceStack.Script.ScriptMethods)) => throw null; + public const string EvalAstCacheKeyPrefix = default; + public const string EvalCacheKeyPrefix = default; + public const string EvalScriptCacheKeyPrefix = default; + public static void UnConfigure() => throw null; + public static object eval(string js, ServiceStack.Script.ScriptScopeContext scope) => throw null; + public static object eval(string js) => throw null; + public static object eval(System.ReadOnlySpan js, ServiceStack.Script.ScriptScopeContext scope) => throw null; + public static object eval(ServiceStack.Script.ScriptContext context, string expr, System.Collections.Generic.Dictionary args = default(System.Collections.Generic.Dictionary)) => throw null; + public static object eval(ServiceStack.Script.ScriptContext context, System.ReadOnlySpan expr, System.Collections.Generic.Dictionary args = default(System.Collections.Generic.Dictionary)) => throw null; + public static object eval(ServiceStack.Script.ScriptContext context, ServiceStack.Script.JsToken token, System.Collections.Generic.Dictionary args = default(System.Collections.Generic.Dictionary)) => throw null; + public static object evalCached(ServiceStack.Script.ScriptContext context, string expr) => throw null; + public static ServiceStack.Script.JsToken expression(string js) => throw null; + public static ServiceStack.Script.JsToken expressionCached(ServiceStack.Script.ScriptContext context, string expr) => throw null; + public static ServiceStack.Script.SharpPage scriptCached(ServiceStack.Script.ScriptContext context, string evalCode) => throw null; + } + + // Generated from `ServiceStack.JSON` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class JSON + { + public static object parse(string json) => throw null; + public static object parseSpan(System.ReadOnlySpan json) => throw null; + public static string stringify(object value) => throw null; + } + + // Generated from `ServiceStack.MetaAuthProvider` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class MetaAuthProvider : ServiceStack.IMeta + { + public System.Collections.Generic.Dictionary Meta { get => throw null; set => throw null; } + public MetaAuthProvider() => throw null; + public string Name { get => throw null; set => throw null; } + public ServiceStack.NavItem NavItem { get => throw null; set => throw null; } + public string Type { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.MetadataAttribute` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class MetadataAttribute + { + public System.Collections.Generic.List Args { get => throw null; set => throw null; } + public System.Attribute Attribute { get => throw null; set => throw null; } + public System.Collections.Generic.List ConstructorArgs { get => throw null; set => throw null; } + public MetadataAttribute() => throw null; + public string Name { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.MetadataDataContract` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class MetadataDataContract + { + public MetadataDataContract() => throw null; + public string Name { get => throw null; set => throw null; } + public string Namespace { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.MetadataDataMember` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class MetadataDataMember + { + public bool? EmitDefaultValue { get => throw null; set => throw null; } + public bool? IsRequired { get => throw null; set => throw null; } + public MetadataDataMember() => throw null; + public string Name { get => throw null; set => throw null; } + public int? Order { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.MetadataOperationType` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class MetadataOperationType + { + public System.Collections.Generic.List Actions { get => throw null; set => throw null; } + public ServiceStack.MetadataTypeName DataModel { get => throw null; set => throw null; } + public MetadataOperationType() => throw null; + public ServiceStack.MetadataType Request { get => throw null; set => throw null; } + public System.Collections.Generic.List RequiredPermissions { get => throw null; set => throw null; } + public System.Collections.Generic.List RequiredRoles { get => throw null; set => throw null; } + public System.Collections.Generic.List RequiresAnyPermission { get => throw null; set => throw null; } + public System.Collections.Generic.List RequiresAnyRole { get => throw null; set => throw null; } + public bool RequiresAuth { get => throw null; set => throw null; } + public ServiceStack.MetadataType Response { get => throw null; set => throw null; } + public ServiceStack.MetadataTypeName ReturnType { get => throw null; set => throw null; } + public bool ReturnsVoid { get => throw null; set => throw null; } + public System.Collections.Generic.List Routes { get => throw null; set => throw null; } + public System.Collections.Generic.List Tags { get => throw null; set => throw null; } + public ServiceStack.MetadataTypeName ViewModel { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.MetadataPropertyType` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class MetadataPropertyType + { + public int? AllowableMax { get => throw null; set => throw null; } + public int? AllowableMin { get => throw null; set => throw null; } + public string[] AllowableValues { get => throw null; set => throw null; } + public System.Collections.Generic.List Attributes { get => throw null; set => throw null; } + public ServiceStack.MetadataDataMember DataMember { get => throw null; set => throw null; } + public string Description { get => throw null; set => throw null; } + public string DisplayType { get => throw null; set => throw null; } + public string[] GenericArgs { get => throw null; set => throw null; } + public bool? IsEnum { get => throw null; set => throw null; } + public bool? IsPrimaryKey { get => throw null; set => throw null; } + public bool? IsRequired { get => throw null; set => throw null; } + public bool? IsSystemType { get => throw null; set => throw null; } + public bool? IsValueType { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary Items { get => throw null; set => throw null; } + public MetadataPropertyType() => throw null; + public string Name { get => throw null; set => throw null; } + public string ParamType { get => throw null; set => throw null; } + public System.Reflection.PropertyInfo PropertyInfo { get => throw null; set => throw null; } + public System.Type PropertyType { get => throw null; set => throw null; } + public bool? ReadOnly { get => throw null; set => throw null; } + public string Type { get => throw null; set => throw null; } + public string TypeNamespace { get => throw null; set => throw null; } + public string Value { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.MetadataRoute` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class MetadataRoute + { + public MetadataRoute() => throw null; + public string Notes { get => throw null; set => throw null; } + public string Path { get => throw null; set => throw null; } + public ServiceStack.RouteAttribute RouteAttribute { get => throw null; set => throw null; } + public string Summary { get => throw null; set => throw null; } + public string Verbs { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.MetadataType` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class MetadataType : ServiceStack.IMeta + { + public System.Collections.Generic.List Attributes { get => throw null; set => throw null; } + public ServiceStack.MetadataDataContract DataContract { get => throw null; set => throw null; } + public string Description { get => throw null; set => throw null; } + public string DisplayType { get => throw null; set => throw null; } + public System.Collections.Generic.List EnumDescriptions { get => throw null; set => throw null; } + public System.Collections.Generic.List EnumMemberValues { get => throw null; set => throw null; } + public System.Collections.Generic.List EnumNames { get => throw null; set => throw null; } + public System.Collections.Generic.List EnumValues { get => throw null; set => throw null; } + public override bool Equals(object obj) => throw null; + protected bool Equals(ServiceStack.MetadataType other) => throw null; + public string[] GenericArgs { get => throw null; set => throw null; } + public string GetFullName() => throw null; + public override int GetHashCode() => throw null; + public ServiceStack.MetadataTypeName[] Implements { get => throw null; set => throw null; } + public ServiceStack.MetadataTypeName Inherits { get => throw null; set => throw null; } + public System.Collections.Generic.List InnerTypes { get => throw null; set => throw null; } + public bool? IsAbstract { get => throw null; set => throw null; } + public bool IsClass { get => throw null; } + public bool? IsEnum { get => throw null; set => throw null; } + public bool? IsEnumInt { get => throw null; set => throw null; } + public bool? IsInterface { get => throw null; set => throw null; } + public bool? IsNested { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary Items { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary Meta { get => throw null; set => throw null; } + public MetadataType() => throw null; + public string Name { get => throw null; set => throw null; } + public string Namespace { get => throw null; set => throw null; } + public System.Collections.Generic.List Properties { get => throw null; set => throw null; } + public ServiceStack.MetadataOperationType RequestType { get => throw null; set => throw null; } + public System.Type Type { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.MetadataTypeExtensions` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class MetadataTypeExtensions + { + public static System.Collections.Generic.List GetOperationsByTags(this ServiceStack.MetadataTypes types, string[] tags) => throw null; + public static System.Collections.Generic.List GetRoutes(this System.Collections.Generic.List operations, string typeName) => throw null; + public static System.Collections.Generic.List GetRoutes(this System.Collections.Generic.List operations, ServiceStack.MetadataType type) => throw null; + public static bool ImplementsAny(this ServiceStack.MetadataType type, params string[] typeNames) => throw null; + public static bool InheritsAny(this ServiceStack.MetadataType type, params string[] typeNames) => throw null; + public static bool IsSystemOrServiceStackType(this ServiceStack.MetadataTypeName metaRef) => throw null; + public static bool ReferencesAny(this ServiceStack.MetadataOperationType op, params string[] typeNames) => throw null; + public static string ToScriptSignature(this ServiceStack.ScriptMethodType method) => throw null; + } + + // Generated from `ServiceStack.MetadataTypeName` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class MetadataTypeName + { + public string[] GenericArgs { get => throw null; set => throw null; } + public MetadataTypeName() => throw null; + public string Name { get => throw null; set => throw null; } + public string Namespace { get => throw null; set => throw null; } + public System.Type Type { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.MetadataTypes` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class MetadataTypes + { + public ServiceStack.MetadataTypesConfig Config { get => throw null; set => throw null; } + public MetadataTypes() => throw null; + public System.Collections.Generic.List Namespaces { get => throw null; set => throw null; } + public System.Collections.Generic.List Operations { get => throw null; set => throw null; } + public System.Collections.Generic.List Types { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.MetadataTypesConfig` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class MetadataTypesConfig + { + public bool AddDataContractAttributes { get => throw null; set => throw null; } + public string AddDefaultXmlNamespace { get => throw null; set => throw null; } + public bool AddDescriptionAsComments { get => throw null; set => throw null; } + public bool AddGeneratedCodeAttributes { get => throw null; set => throw null; } + public int? AddImplicitVersion { get => throw null; set => throw null; } + public bool AddIndexesToDataMembers { get => throw null; set => throw null; } + public bool AddModelExtensions { get => throw null; set => throw null; } + public System.Collections.Generic.List AddNamespaces { get => throw null; set => throw null; } + public bool AddPropertyAccessors { get => throw null; set => throw null; } + public bool AddResponseStatus { get => throw null; set => throw null; } + public bool AddReturnMarker { get => throw null; set => throw null; } + public bool AddServiceStackTypes { get => throw null; set => throw null; } + public string BaseClass { get => throw null; set => throw null; } + public string BaseUrl { get => throw null; set => throw null; } + public System.Collections.Generic.List DefaultImports { get => throw null; set => throw null; } + public System.Collections.Generic.List DefaultNamespaces { get => throw null; set => throw null; } + public bool ExcludeGenericBaseTypes { get => throw null; set => throw null; } + public bool ExcludeImplementedInterfaces { get => throw null; set => throw null; } + public bool ExcludeNamespace { get => throw null; set => throw null; } + public System.Collections.Generic.List ExcludeTypes { get => throw null; set => throw null; } + public bool ExportAsTypes { get => throw null; set => throw null; } + public System.Collections.Generic.HashSet ExportAttributes { get => throw null; set => throw null; } + public System.Collections.Generic.HashSet ExportTypes { get => throw null; set => throw null; } + public bool ExportValueTypes { get => throw null; set => throw null; } + public string GlobalNamespace { get => throw null; set => throw null; } + public System.Collections.Generic.HashSet IgnoreTypes { get => throw null; set => throw null; } + public System.Collections.Generic.List IgnoreTypesInNamespaces { get => throw null; set => throw null; } + public System.Collections.Generic.List IncludeTypes { get => throw null; set => throw null; } + public bool InitializeCollections { get => throw null; set => throw null; } + public bool MakeDataContractsExtensible { get => throw null; set => throw null; } + public bool MakeInternal { get => throw null; set => throw null; } + public bool MakePartial { get => throw null; set => throw null; } + public bool MakePropertiesOptional { get => throw null; set => throw null; } + public bool MakeVirtual { get => throw null; set => throw null; } + public MetadataTypesConfig(string baseUrl = default(string), bool makePartial = default(bool), bool makeVirtual = default(bool), bool addReturnMarker = default(bool), bool convertDescriptionToComments = default(bool), bool addDataContractAttributes = default(bool), bool addIndexesToDataMembers = default(bool), bool addGeneratedCodeAttributes = default(bool), string addDefaultXmlNamespace = default(string), string baseClass = default(string), string package = default(string), bool addResponseStatus = default(bool), bool addServiceStackTypes = default(bool), bool addModelExtensions = default(bool), bool addPropertyAccessors = default(bool), bool excludeGenericBaseTypes = default(bool), bool settersReturnThis = default(bool), bool makePropertiesOptional = default(bool), bool makeDataContractsExtensible = default(bool), bool initializeCollections = default(bool), int? addImplicitVersion = default(int?)) => throw null; + public string Package { get => throw null; set => throw null; } + public bool SettersReturnThis { get => throw null; set => throw null; } + public System.Collections.Generic.List TreatTypesAsStrings { get => throw null; set => throw null; } + public string UsePath { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.MethodInvoker` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public delegate object MethodInvoker(object instance, params object[] args); + + // Generated from `ServiceStack.ModelConfig<>` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ModelConfig + { + public static void Id(ServiceStack.GetMemberDelegate getIdFn) => throw null; + public ModelConfig() => throw null; + } + + // Generated from `ServiceStack.NavButtonGroupDefaults` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class NavButtonGroupDefaults + { + public static ServiceStack.NavOptions Create() => throw null; + public static ServiceStack.NavOptions ForNavButtonGroup(this ServiceStack.NavOptions options) => throw null; + public static string NavClass { get => throw null; set => throw null; } + public static string NavItemClass { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.NavDefaults` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class NavDefaults + { + public static string ChildNavItemClass { get => throw null; set => throw null; } + public static string ChildNavLinkClass { get => throw null; set => throw null; } + public static string ChildNavMenuClass { get => throw null; set => throw null; } + public static string ChildNavMenuItemClass { get => throw null; set => throw null; } + public static ServiceStack.NavOptions Create() => throw null; + public static ServiceStack.NavOptions ForNav(this ServiceStack.NavOptions options) => throw null; + public static string NavClass { get => throw null; set => throw null; } + public static string NavItemClass { get => throw null; set => throw null; } + public static string NavLinkClass { get => throw null; set => throw null; } + public static ServiceStack.NavOptions OverrideDefaults(ServiceStack.NavOptions targets, ServiceStack.NavOptions source) => throw null; + } + + // Generated from `ServiceStack.NavLinkDefaults` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class NavLinkDefaults + { + public static ServiceStack.NavOptions ForNavLink(this ServiceStack.NavOptions options) => throw null; + } + + // Generated from `ServiceStack.NavOptions` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class NavOptions + { + public string ActivePath { get => throw null; set => throw null; } + public System.Collections.Generic.HashSet Attributes { get => throw null; set => throw null; } + public string BaseHref { get => throw null; set => throw null; } + public string ChildNavItemClass { get => throw null; set => throw null; } + public string ChildNavLinkClass { get => throw null; set => throw null; } + public string ChildNavMenuClass { get => throw null; set => throw null; } + public string ChildNavMenuItemClass { get => throw null; set => throw null; } + public string NavClass { get => throw null; set => throw null; } + public string NavItemClass { get => throw null; set => throw null; } + public string NavLinkClass { get => throw null; set => throw null; } + public NavOptions() => throw null; + } + + // Generated from `ServiceStack.NavbarDefaults` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class NavbarDefaults + { + public static ServiceStack.NavOptions Create() => throw null; + public static ServiceStack.NavOptions ForNavbar(this ServiceStack.NavOptions options) => throw null; + public static string NavClass { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.NetCoreExtensions` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class NetCoreExtensions + { + public static void Close(this System.Net.Sockets.Socket socket) => throw null; + public static void Close(this System.Data.Common.DbDataReader reader) => throw null; + } + + // Generated from `ServiceStack.ObjectActivator` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public delegate object ObjectActivator(params object[] args); + + // Generated from `ServiceStack.PerfUtils` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class PerfUtils + { + public static double Measure(System.Action fn, int times = default(int), int runForMs = default(int), System.Action setup = default(System.Action), System.Action warmup = default(System.Action), System.Action teardown = default(System.Action)) => throw null; + public static double MeasureFor(System.Action fn, int runForMs) => throw null; + public static System.TimeSpan ToTimeSpan(this System.Int64 fromTicks) => throw null; + } + + // Generated from `ServiceStack.PluginInfo` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class PluginInfo : ServiceStack.IMeta + { + public ServiceStack.AdminUsersInfo AdminUsers { get => throw null; set => throw null; } + public ServiceStack.AuthInfo Auth { get => throw null; set => throw null; } + public ServiceStack.AutoQueryInfo AutoQuery { get => throw null; set => throw null; } + public System.Collections.Generic.List Loaded { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary Meta { get => throw null; set => throw null; } + public PluginInfo() => throw null; + public ServiceStack.RequestLogsInfo RequestLogs { get => throw null; set => throw null; } + public ServiceStack.SharpPagesInfo SharpPages { get => throw null; set => throw null; } + public ServiceStack.ValidationInfo Validation { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.ProcessResult` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ProcessResult + { + public System.Int64? CallbackDurationMs { get => throw null; set => throw null; } + public System.Int64 DurationMs { get => throw null; set => throw null; } + public System.DateTime EndAt { get => throw null; set => throw null; } + public int? ExitCode { get => throw null; set => throw null; } + public ProcessResult() => throw null; + public System.DateTime StartAt { get => throw null; set => throw null; } + public string StdErr { get => throw null; set => throw null; } + public string StdOut { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.ProcessUtils` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class ProcessUtils + { + public static System.Diagnostics.ProcessStartInfo ConvertToCmdExec(this System.Diagnostics.ProcessStartInfo startInfo) => throw null; + public static ServiceStack.ProcessResult CreateErrorResult(System.Exception e) => throw null; + public static string FindExePath(string exeName) => throw null; + public static string Run(string fileName, string arguments = default(string), string workingDir = default(string)) => throw null; + public static System.Threading.Tasks.Task RunAsync(System.Diagnostics.ProcessStartInfo startInfo, int? timeoutMs = default(int?), System.Action onOut = default(System.Action), System.Action onError = default(System.Action)) => throw null; + public static string RunShell(string arguments, string workingDir = default(string)) => throw null; + } + + // Generated from `ServiceStack.RequestExtensions` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null; ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static partial class RequestExtensions + { + public static System.Collections.Generic.Dictionary GetRequestParams(this ServiceStack.Web.IRequest request) => throw null; + } + + // Generated from `ServiceStack.RequestLogsInfo` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class RequestLogsInfo : ServiceStack.IMeta + { + public System.Collections.Generic.Dictionary Meta { get => throw null; set => throw null; } + public string RequestLogger { get => throw null; set => throw null; } + public RequestLogsInfo() => throw null; + public string[] RequiredRoles { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary ServiceRoutes { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.ScriptMethodType` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ScriptMethodType + { + public string Name { get => throw null; set => throw null; } + public string[] ParamNames { get => throw null; set => throw null; } + public string[] ParamTypes { get => throw null; set => throw null; } + public string ReturnType { get => throw null; set => throw null; } + public ScriptMethodType() => throw null; + } + + // Generated from `ServiceStack.SharpPagesExtensions` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class SharpPagesExtensions + { + public static System.Threading.Tasks.Task RenderToStringAsync(this ServiceStack.Web.IStreamWriterAsync writer) => throw null; + } + + // Generated from `ServiceStack.SharpPagesInfo` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class SharpPagesInfo : ServiceStack.IMeta + { + public string ApiPath { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary Meta { get => throw null; set => throw null; } + public bool? MetadataDebug { get => throw null; set => throw null; } + public string MetadataDebugAdminRole { get => throw null; set => throw null; } + public string ScriptAdminRole { get => throw null; set => throw null; } + public SharpPagesInfo() => throw null; + public bool? SpaFallback { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.SimpleAppSettings` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class SimpleAppSettings : ServiceStack.Configuration.IAppSettings + { + public bool Exists(string key) => throw null; + public T Get(string key, T defaultValue) => throw null; + public T Get(string key) => throw null; + public System.Collections.Generic.Dictionary GetAll() => throw null; + public System.Collections.Generic.List GetAllKeys() => throw null; + public System.Collections.Generic.IDictionary GetDictionary(string key) => throw null; + public System.Collections.Generic.List> GetKeyValuePairs(string key) => throw null; + public System.Collections.Generic.IList GetList(string key) => throw null; + public string GetString(string key) => throw null; + public void Set(string key, T value) => throw null; + public SimpleAppSettings(System.Collections.Generic.Dictionary settings = default(System.Collections.Generic.Dictionary)) => throw null; + } + + // Generated from `ServiceStack.SimpleContainer` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class SimpleContainer : ServiceStack.IContainer, ServiceStack.Configuration.IResolver + { + public ServiceStack.IContainer AddSingleton(System.Type type, System.Func factory) => throw null; + public ServiceStack.IContainer AddTransient(System.Type type, System.Func factory) => throw null; + public System.Func CreateFactory(System.Type type) => throw null; + public void Dispose() => throw null; + public bool Exists(System.Type type) => throw null; + protected System.Collections.Concurrent.ConcurrentDictionary> Factory; + public System.Collections.Generic.HashSet IgnoreTypesNamed { get => throw null; } + protected virtual bool IncludeProperty(System.Reflection.PropertyInfo pi) => throw null; + protected System.Collections.Concurrent.ConcurrentDictionary InstanceCache; + public object RequiredResolve(System.Type type, System.Type ownerType) => throw null; + public object Resolve(System.Type type) => throw null; + protected virtual System.Reflection.ConstructorInfo ResolveBestConstructor(System.Type type) => throw null; + public SimpleContainer() => throw null; + public T TryResolve() => throw null; + } + + // Generated from `ServiceStack.SiteUtils` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class SiteUtils + { + public static System.Threading.Tasks.Task GetAppMetadataAsync(this string baseUrl) => throw null; + public static string ToUrlEncoded(System.Collections.Generic.List args) => throw null; + public static string UrlFromSlug(string slug) => throw null; + public static string UrlToSlug(string url) => throw null; + } + + // Generated from `ServiceStack.StaticActionInvoker` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public delegate void StaticActionInvoker(params object[] args); + + // Generated from `ServiceStack.StaticMethodInvoker` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public delegate object StaticMethodInvoker(params object[] args); + + // Generated from `ServiceStack.StopExecutionException` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class StopExecutionException : System.Exception + { + public StopExecutionException(string message, System.Exception innerException) => throw null; + public StopExecutionException(string message) => throw null; + public StopExecutionException() => throw null; + } + + // Generated from `ServiceStack.StringUtils` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class StringUtils + { + public static string ConvertHtmlCodes(this string html) => throw null; + public static System.Collections.Generic.Dictionary EscapedCharMap; + public static System.Collections.Generic.IDictionary HtmlCharacterCodes; + public static string HtmlDecode(this string html) => throw null; + public static string HtmlEncode(this string html) => throw null; + public static string HtmlEncodeLite(this string html) => throw null; + public static System.ReadOnlyMemory ParseArguments(System.ReadOnlyMemory argsString, out System.Collections.Generic.List> args) => throw null; + public static System.Collections.Generic.List ParseCommands(this string commandsString) => throw null; + public static System.Collections.Generic.List ParseCommands(this System.ReadOnlyMemory commandsString, System.Char separator = default(System.Char)) => throw null; + public static ServiceStack.TextNode ParseTypeIntoNodes(this string typeDef) => throw null; + public static string RemoveSuffix(string name, string suffix) => throw null; + public static string ReplaceOutsideOfQuotes(this string str, params string[] replaceStringsPairs) => throw null; + public static string ReplacePairs(string str, string[] replaceStringsPairs) => throw null; + public static string SafeInput(this string text) => throw null; + public static string SnakeCaseToPascalCase(string snakeCase) => throw null; + public static System.Collections.Generic.List SplitGenericArgs(string argList) => throw null; + public static string[] SplitVarNames(string fields) => throw null; + public static string ToChar(this int codePoint) => throw null; + public static string ToEscapedString(this string input) => throw null; + } + + // Generated from `ServiceStack.TaskExt` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class TaskExt + { + public static System.Threading.Tasks.Task AsTaskException(this System.Exception ex) => throw null; + public static System.Threading.Tasks.Task AsTaskException(this System.Exception ex) => throw null; + public static System.Threading.Tasks.Task AsTaskResult(this T result) => throw null; + public static System.Threading.Tasks.ValueTask AsValueTask(this System.Threading.Tasks.Task task) => throw null; + public static System.Threading.Tasks.ValueTask AsValueTask(this System.Threading.Tasks.Task task) => throw null; + public static object GetResult(this System.Threading.Tasks.Task task) => throw null; + public static T GetResult(this System.Threading.Tasks.Task task) => throw null; + public static void RunSync(System.Func task) => throw null; + public static TResult RunSync(System.Func> task) => throw null; + } + + // Generated from `ServiceStack.TextDumpOptions` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class TextDumpOptions + { + public string Caption { get => throw null; set => throw null; } + public string CaptionIfEmpty { get => throw null; set => throw null; } + public ServiceStack.Script.DefaultScripts Defaults { get => throw null; set => throw null; } + public ServiceStack.TextStyle HeaderStyle { get => throw null; set => throw null; } + public bool IncludeRowNumbers { get => throw null; set => throw null; } + public static ServiceStack.TextDumpOptions Parse(System.Collections.Generic.Dictionary options, ServiceStack.Script.DefaultScripts defaults = default(ServiceStack.Script.DefaultScripts)) => throw null; + public TextDumpOptions() => throw null; + } + + // Generated from `ServiceStack.TextNode` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class TextNode + { + public System.Collections.Generic.List Children { get => throw null; set => throw null; } + public string Text { get => throw null; set => throw null; } + public TextNode() => throw null; + } + + // Generated from `ServiceStack.TextStyle` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public enum TextStyle + { + CamelCase, + Humanize, + None, + PascalCase, + SplitCase, + TitleCase, + } + + // Generated from `ServiceStack.TypeExtensions` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class TypeExtensions + { + public static void AddReferencedTypes(System.Type type, System.Collections.Generic.HashSet refTypes) => throw null; + public static T ConvertFromObject(object value) => throw null; + public static object ConvertToObject(T value) => throw null; + public static System.Linq.Expressions.LambdaExpression CreatePropertyAccessorExpression(System.Type type, System.Reflection.PropertyInfo forProperty) => throw null; + public static ServiceStack.ActionInvoker GetActionInvoker(this System.Reflection.MethodInfo method) => throw null; + public static ServiceStack.ActionInvoker GetActionInvokerToCache(System.Reflection.MethodInfo method) => throw null; + public static ServiceStack.ObjectActivator GetActivator(this System.Reflection.ConstructorInfo ctor) => throw null; + public static ServiceStack.ObjectActivator GetActivatorToCache(System.Reflection.ConstructorInfo ctor) => throw null; + public static ServiceStack.MethodInvoker GetInvoker(this System.Reflection.MethodInfo method) => throw null; + public static System.Delegate GetInvokerDelegate(this System.Reflection.MethodInfo method) => throw null; + public static ServiceStack.MethodInvoker GetInvokerToCache(System.Reflection.MethodInfo method) => throw null; + public static System.Func GetPropertyAccessor(this System.Type type, System.Reflection.PropertyInfo forProperty) => throw null; + public static System.Type[] GetReferencedTypes(this System.Type type) => throw null; + public static ServiceStack.StaticActionInvoker GetStaticActionInvoker(this System.Reflection.MethodInfo method) => throw null; + public static ServiceStack.StaticActionInvoker GetStaticActionInvokerToCache(System.Reflection.MethodInfo method) => throw null; + public static ServiceStack.StaticMethodInvoker GetStaticInvoker(this System.Reflection.MethodInfo method) => throw null; + public static ServiceStack.StaticMethodInvoker GetStaticInvokerToCache(System.Reflection.MethodInfo method) => throw null; + public static bool? IsNotNullable(this System.Reflection.PropertyInfo property) => throw null; + public static bool? IsNotNullable(System.Type memberType, System.Reflection.MemberInfo declaringType, System.Collections.Generic.IEnumerable customAttributes) => throw null; + } + + // Generated from `ServiceStack.UrnId` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class UrnId + { + public static string Create(string idFieldValue) => throw null; + public static string Create(string idFieldName, string idFieldValue) => throw null; + public static string Create(object idFieldValue) => throw null; + public static string Create(string objectTypeName, string idFieldValue) => throw null; + public static string Create(System.Type objectType, string idFieldValue) => throw null; + public static string Create(System.Type objectType, string idFieldName, string idFieldValue) => throw null; + public static string CreateWithParts(params string[] keyParts) => throw null; + public static string CreateWithParts(string objectTypeName, params string[] keyParts) => throw null; + public static System.Guid GetGuidId(string urn) => throw null; + public static System.Int64 GetLongId(string urn) => throw null; + public static string GetStringId(string urn) => throw null; + public string IdFieldName { get => throw null; set => throw null; } + public string IdFieldValue { get => throw null; set => throw null; } + public static ServiceStack.UrnId Parse(string urnId) => throw null; + public string TypeName { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.ValidationInfo` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ValidationInfo : ServiceStack.IMeta + { + public string AccessRole { get => throw null; set => throw null; } + public bool? HasValidationSource { get => throw null; set => throw null; } + public bool? HasValidationSourceAdmin { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary Meta { get => throw null; set => throw null; } + public System.Collections.Generic.List PropertyValidators { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary ServiceRoutes { get => throw null; set => throw null; } + public System.Collections.Generic.List TypeValidators { get => throw null; set => throw null; } + public ValidationInfo() => throw null; + } + + // Generated from `ServiceStack.View` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class View + { + public static System.Collections.Generic.List GetNavItems(string key) => throw null; + public static void Load(ServiceStack.Configuration.IAppSettings settings) => throw null; + public static System.Collections.Generic.List NavItems { get => throw null; } + public static System.Collections.Generic.Dictionary> NavItemsMap { get => throw null; } + } + + // Generated from `ServiceStack.ViewUtils` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class ViewUtils + { + public static string BundleCss(string filterName, ServiceStack.IO.IVirtualPathProvider webVfs, ServiceStack.IO.IVirtualPathProvider contentVfs, ServiceStack.ICompressor cssCompressor, ServiceStack.BundleOptions options) => throw null; + public static string BundleHtml(string filterName, ServiceStack.IO.IVirtualPathProvider webVfs, ServiceStack.IO.IVirtualPathProvider contentVfs, ServiceStack.ICompressor htmlCompressor, ServiceStack.BundleOptions options) => throw null; + public static string BundleJs(string filterName, ServiceStack.IO.IVirtualPathProvider webVfs, ServiceStack.IO.IVirtualPathProvider contentVfs, ServiceStack.ICompressor jsCompressor, ServiceStack.BundleOptions options) => throw null; + public static string CssIncludes(ServiceStack.IO.IVirtualPathProvider vfs, System.Collections.Generic.List cssFiles) => throw null; + public static string DumpTable(this object target, ServiceStack.TextDumpOptions options) => throw null; + public static string DumpTable(this object target) => throw null; + public static string ErrorResponse(ServiceStack.ResponseStatus errorStatus, string fieldName) => throw null; + public static string ErrorResponseExcept(ServiceStack.ResponseStatus errorStatus, string fieldNames) => throw null; + public static string ErrorResponseExcept(ServiceStack.ResponseStatus errorStatus, System.Collections.Generic.ICollection fieldNames) => throw null; + public static string ErrorResponseSummary(ServiceStack.ResponseStatus errorStatus) => throw null; + public static bool FormCheckValue(ServiceStack.Web.IRequest req, string name) => throw null; + public static string FormControl(ServiceStack.Web.IRequest req, System.Collections.Generic.Dictionary args, string tagName, ServiceStack.InputOptions inputOptions) => throw null; + public static string FormQuery(ServiceStack.Web.IRequest req, string name) => throw null; + public static string[] FormQueryValues(ServiceStack.Web.IRequest req, string name) => throw null; + public static string FormValue(ServiceStack.Web.IRequest req, string name, string defaultValue) => throw null; + public static string FormValue(ServiceStack.Web.IRequest req, string name) => throw null; + public static string[] FormValues(ServiceStack.Web.IRequest req, string name) => throw null; + public static System.Collections.Generic.IEnumerable GetBundleFiles(string filterName, ServiceStack.IO.IVirtualPathProvider webVfs, ServiceStack.IO.IVirtualPathProvider contentVfs, System.Collections.Generic.IEnumerable virtualPaths, string assetExt) => throw null; + public static System.Globalization.CultureInfo GetDefaultCulture(this ServiceStack.Script.DefaultScripts defaultScripts) => throw null; + public static string GetDefaultTableClassName(this ServiceStack.Script.DefaultScripts defaultScripts) => throw null; + public static ServiceStack.ResponseStatus GetErrorStatus(ServiceStack.Web.IRequest req) => throw null; + public static System.Collections.Generic.List GetNavItems(string key) => throw null; + public static string GetParam(ServiceStack.Web.IRequest req, string name) => throw null; + public static bool HasErrorStatus(ServiceStack.Web.IRequest req) => throw null; + public static string HtmlDump(object target, ServiceStack.HtmlDumpOptions options) => throw null; + public static string HtmlDump(object target) => throw null; + public static string HtmlHiddenInputs(System.Collections.Generic.IEnumerable> inputValues) => throw null; + public static bool IsNull(object test) => throw null; + public static string JsIncludes(ServiceStack.IO.IVirtualPathProvider vfs, System.Collections.Generic.List jsFiles) => throw null; + public static void Load(ServiceStack.Configuration.IAppSettings settings) => throw null; + public static string Nav(System.Collections.Generic.List navItems, ServiceStack.NavOptions options) => throw null; + public static string NavButtonGroup(System.Collections.Generic.List navItems, ServiceStack.NavOptions options) => throw null; + public static string NavButtonGroup(ServiceStack.NavItem navItem, ServiceStack.NavOptions options) => throw null; + public static System.Collections.Generic.List NavItems { get => throw null; } + public static string NavItemsKey { get => throw null; set => throw null; } + public static System.Collections.Generic.Dictionary> NavItemsMap { get => throw null; } + public static string NavItemsMapKey { get => throw null; set => throw null; } + public static void NavLink(System.Text.StringBuilder sb, ServiceStack.NavItem navItem, ServiceStack.NavOptions options) => throw null; + public static string NavLink(ServiceStack.NavItem navItem, ServiceStack.NavOptions options) => throw null; + public static void NavLinkButton(System.Text.StringBuilder sb, ServiceStack.NavItem navItem, ServiceStack.NavOptions options) => throw null; + public static void PrintDumpTable(this object target, ServiceStack.TextDumpOptions options) => throw null; + public static void PrintDumpTable(this object target) => throw null; + public static bool ShowNav(this ServiceStack.NavItem navItem, System.Collections.Generic.HashSet attributes) => throw null; + public static System.Collections.Generic.List SplitStringList(System.Collections.IEnumerable strings) => throw null; + public static string StyleText(string text, ServiceStack.TextStyle textStyle) => throw null; + public static string TextDump(this object target, ServiceStack.TextDumpOptions options) => throw null; + public static string TextDump(this object target) => throw null; + public static System.Collections.Generic.List> ToKeyValues(object values) => throw null; + public static System.Collections.Generic.List ToStringList(System.Collections.IEnumerable strings) => throw null; + public static System.Collections.Generic.IEnumerable ToStrings(string filterName, object arg) => throw null; + public static System.Collections.Generic.List ToVarNames(string fieldNames) => throw null; + public static string ValidationSuccess(string message, System.Collections.Generic.Dictionary divAttrs) => throw null; + public static string ValidationSuccessCssClassNames; + public static string ValidationSummary(ServiceStack.ResponseStatus errorStatus, string exceptFor) => throw null; + public static string ValidationSummary(ServiceStack.ResponseStatus errorStatus, System.Collections.Generic.ICollection exceptFields, System.Collections.Generic.Dictionary divAttrs) => throw null; + public static string ValidationSummaryCssClassNames; + } + + // Generated from `ServiceStack.VirtualFileExtensions` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class VirtualFileExtensions + { + public static ServiceStack.IO.IVirtualDirectory[] GetAllRootDirectories(this ServiceStack.IO.IVirtualPathProvider vfs) => throw null; + public static System.Byte[] GetBytesContentsAsBytes(this ServiceStack.IO.IVirtualFile file) => throw null; + public static System.ReadOnlyMemory GetBytesContentsAsMemory(this ServiceStack.IO.IVirtualFile file) => throw null; + public static ServiceStack.IO.FileSystemVirtualFiles GetFileSystemVirtualFiles(this ServiceStack.IO.IVirtualPathProvider vfs) => throw null; + public static ServiceStack.IO.GistVirtualFiles GetGistVirtualFiles(this ServiceStack.IO.IVirtualPathProvider vfs) => throw null; + public static ServiceStack.IO.MemoryVirtualFiles GetMemoryVirtualFiles(this ServiceStack.IO.IVirtualPathProvider vfs) => throw null; + public static ServiceStack.IO.ResourceVirtualFiles GetResourceVirtualFiles(this ServiceStack.IO.IVirtualPathProvider vfs) => throw null; + public static System.ReadOnlyMemory GetTextContentsAsMemory(this ServiceStack.IO.IVirtualFile file) => throw null; + public static T GetVirtualFileSource(this ServiceStack.IO.IVirtualPathProvider vfs) where T : class => throw null; + public static bool ShouldSkipPath(this ServiceStack.IO.IVirtualNode node) => throw null; + } + + // Generated from `ServiceStack.VirtualPathUtils` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class VirtualPathUtils + { + public static bool Exists(this ServiceStack.IO.IVirtualNode node) => throw null; + public static ServiceStack.IO.IVirtualFile GetDefaultDocument(this ServiceStack.IO.IVirtualDirectory dir, System.Collections.Generic.List defaultDocuments) => throw null; + public static ServiceStack.IO.IVirtualNode GetVirtualNode(this ServiceStack.IO.IVirtualPathProvider pathProvider, string virtualPath) => throw null; + public static System.Collections.Generic.IEnumerable> GroupByFirstToken(this System.Collections.Generic.IEnumerable resourceNames, System.Char pathSeparator = default(System.Char)) => throw null; + public static bool IsDirectory(this ServiceStack.IO.IVirtualNode node) => throw null; + public static bool IsFile(this ServiceStack.IO.IVirtualNode node) => throw null; + public static System.TimeSpan MaxRetryOnExceptionTimeout { get => throw null; } + public static System.Byte[] ReadAllBytes(this ServiceStack.IO.IVirtualFile file) => throw null; + public static string SafeFileName(string uri) => throw null; + public static System.Collections.Generic.Stack TokenizeResourcePath(this string str, System.Char pathSeparator = default(System.Char)) => throw null; + public static System.Collections.Generic.Stack TokenizeVirtualPath(this string str, string virtualPathSeparator) => throw null; + public static System.Collections.Generic.Stack TokenizeVirtualPath(this string str, ServiceStack.IO.IVirtualPathProvider pathProvider) => throw null; + } + + // Generated from `ServiceStack.Words` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class Words + { + public static string Capitalize(string word) => throw null; + public static string Pluralize(string word) => throw null; + public static string Singularize(string word) => throw null; + } + + // Generated from `ServiceStack.XLinqExtensions` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class XLinqExtensions + { + public static System.Collections.Generic.IEnumerable AllElements(this System.Xml.Linq.XElement element, string name) => throw null; + public static System.Collections.Generic.IEnumerable AllElements(this System.Collections.Generic.IEnumerable elements, string name) => throw null; + public static System.Xml.Linq.XAttribute AnyAttribute(this System.Xml.Linq.XElement element, string name) => throw null; + public static System.Xml.Linq.XElement AnyElement(this System.Xml.Linq.XElement element, string name) => throw null; + public static System.Xml.Linq.XElement AnyElement(this System.Collections.Generic.IEnumerable elements, string name) => throw null; + public static void AssertElementHasValue(this System.Xml.Linq.XElement element, string name) => throw null; + public static System.Xml.Linq.XElement FirstElement(this System.Xml.Linq.XElement element) => throw null; + public static T GetAttributeValueOrDefault(this System.Xml.Linq.XAttribute attr, string name, System.Func converter) => throw null; + public static bool GetBool(this System.Xml.Linq.XElement el, string name) => throw null; + public static bool GetBoolOrDefault(this System.Xml.Linq.XElement el, string name) => throw null; + public static System.DateTime GetDateTime(this System.Xml.Linq.XElement el, string name) => throw null; + public static System.DateTime GetDateTimeOrDefault(this System.Xml.Linq.XElement el, string name) => throw null; + public static System.Decimal GetDecimal(this System.Xml.Linq.XElement el, string name) => throw null; + public static System.Decimal GetDecimalOrDefault(this System.Xml.Linq.XElement el, string name) => throw null; + public static System.Xml.Linq.XElement GetElement(this System.Xml.Linq.XElement element, string name) => throw null; + public static T GetElementValueOrDefault(this System.Xml.Linq.XElement element, string name, System.Func converter) => throw null; + public static System.Guid GetGuid(this System.Xml.Linq.XElement el, string name) => throw null; + public static System.Guid GetGuidOrDefault(this System.Xml.Linq.XElement el, string name) => throw null; + public static int GetInt(this System.Xml.Linq.XElement el, string name) => throw null; + public static int GetIntOrDefault(this System.Xml.Linq.XElement el, string name) => throw null; + public static System.Int64 GetLong(this System.Xml.Linq.XElement el, string name) => throw null; + public static System.Int64 GetLongOrDefault(this System.Xml.Linq.XElement el, string name) => throw null; + public static bool? GetNullableBool(this System.Xml.Linq.XElement el, string name) => throw null; + public static System.DateTime? GetNullableDateTime(this System.Xml.Linq.XElement el, string name) => throw null; + public static System.Decimal? GetNullableDecimal(this System.Xml.Linq.XElement el, string name) => throw null; + public static System.Guid? GetNullableGuid(this System.Xml.Linq.XElement el, string name) => throw null; + public static int? GetNullableInt(this System.Xml.Linq.XElement el, string name) => throw null; + public static System.Int64? GetNullableLong(this System.Xml.Linq.XElement el, string name) => throw null; + public static System.TimeSpan? GetNullableTimeSpan(this System.Xml.Linq.XElement el, string name) => throw null; + public static string GetString(this System.Xml.Linq.XElement el, string name) => throw null; + public static string GetStringAttributeOrDefault(this System.Xml.Linq.XElement element, string name) => throw null; + public static System.TimeSpan GetTimeSpan(this System.Xml.Linq.XElement el, string name) => throw null; + public static System.TimeSpan GetTimeSpanOrDefault(this System.Xml.Linq.XElement el, string name) => throw null; + public static System.Collections.Generic.List GetValues(this System.Collections.Generic.IEnumerable els) => throw null; + public static System.Xml.Linq.XElement NextElement(this System.Xml.Linq.XElement element) => throw null; + } + + namespace AsyncEx + { + // Generated from `ServiceStack.AsyncEx.AsyncManualResetEvent` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class AsyncManualResetEvent + { + public AsyncManualResetEvent(bool set) => throw null; + public AsyncManualResetEvent() => throw null; + public int Id { get => throw null; } + public bool IsSet { get => throw null; } + public void Reset() => throw null; + public void Set() => throw null; + public void Wait(System.Threading.CancellationToken cancellationToken) => throw null; + public void Wait() => throw null; + public System.Threading.Tasks.Task WaitAsync(System.Threading.CancellationToken cancellationToken) => throw null; + public System.Threading.Tasks.Task WaitAsync() => throw null; + } + + // Generated from `ServiceStack.AsyncEx.CancellationTokenTaskSource<>` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class CancellationTokenTaskSource : System.IDisposable + { + public CancellationTokenTaskSource(System.Threading.CancellationToken cancellationToken) => throw null; + public void Dispose() => throw null; + public System.Threading.Tasks.Task Task { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.AsyncEx.TaskCompletionSourceExtensions` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class TaskCompletionSourceExtensions + { + public static System.Threading.Tasks.TaskCompletionSource CreateAsyncTaskSource() => throw null; + public static bool TryCompleteFromCompletedTask(this System.Threading.Tasks.TaskCompletionSource @this, System.Threading.Tasks.Task task, System.Func resultFunc) => throw null; + public static bool TryCompleteFromCompletedTask(this System.Threading.Tasks.TaskCompletionSource @this, System.Threading.Tasks.Task task) where TSourceResult : TResult => throw null; + } + + // Generated from `ServiceStack.AsyncEx.TaskExtensions` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class TaskExtensions + { + public static void WaitAndUnwrapException(this System.Threading.Tasks.Task task, System.Threading.CancellationToken cancellationToken) => throw null; + public static void WaitAndUnwrapException(this System.Threading.Tasks.Task task) => throw null; + public static TResult WaitAndUnwrapException(this System.Threading.Tasks.Task task, System.Threading.CancellationToken cancellationToken) => throw null; + public static TResult WaitAndUnwrapException(this System.Threading.Tasks.Task task) => throw null; + public static System.Threading.Tasks.Task WaitAsync(this System.Threading.Tasks.Task @this, System.Threading.CancellationToken cancellationToken) => throw null; + public static void WaitWithoutException(this System.Threading.Tasks.Task task, System.Threading.CancellationToken cancellationToken) => throw null; + public static void WaitWithoutException(this System.Threading.Tasks.Task task) => throw null; + } + + } + namespace Data + { + // Generated from `ServiceStack.Data.DbConnectionFactory` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class DbConnectionFactory : ServiceStack.Data.IDbConnectionFactory + { + public System.Data.IDbConnection CreateDbConnection() => throw null; + public DbConnectionFactory(System.Func connectionFactoryFn) => throw null; + public System.Data.IDbConnection OpenDbConnection() => throw null; + } + + // Generated from `ServiceStack.Data.IDbConnectionFactory` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IDbConnectionFactory + { + System.Data.IDbConnection CreateDbConnection(); + System.Data.IDbConnection OpenDbConnection(); + } + + // Generated from `ServiceStack.Data.IDbConnectionFactoryExtended` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IDbConnectionFactoryExtended : ServiceStack.Data.IDbConnectionFactory + { + System.Data.IDbConnection OpenDbConnection(string namedConnection); + System.Data.IDbConnection OpenDbConnectionString(string connectionString, string providerName); + System.Data.IDbConnection OpenDbConnectionString(string connectionString); + } + + // Generated from `ServiceStack.Data.IHasDbCommand` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IHasDbCommand + { + System.Data.IDbCommand DbCommand { get; } + } + + // Generated from `ServiceStack.Data.IHasDbConnection` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IHasDbConnection + { + System.Data.IDbConnection DbConnection { get; } + } + + // Generated from `ServiceStack.Data.IHasDbTransaction` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IHasDbTransaction + { + System.Data.IDbTransaction DbTransaction { get; } + } + + } + namespace Extensions + { + // Generated from `ServiceStack.Extensions.UtilExtensions` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class UtilExtensions + { + } + + } + namespace IO + { + // Generated from `ServiceStack.IO.FileSystemVirtualFiles` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class FileSystemVirtualFiles : ServiceStack.VirtualPath.AbstractVirtualPathProviderBase, ServiceStack.IO.IVirtualPathProvider, ServiceStack.IO.IVirtualFiles + { + public void AppendFile(string filePath, string textContents) => throw null; + public void AppendFile(string filePath, System.IO.Stream stream) => throw null; + public static string AssertDirectory(string dirPath, int timeoutMs = default(int)) => throw null; + public static void DeleteDirectoryRecursive(string path) => throw null; + public void DeleteFile(string filePath) => throw null; + public void DeleteFiles(System.Collections.Generic.IEnumerable filePaths) => throw null; + public void DeleteFolder(string dirPath) => throw null; + public override bool DirectoryExists(string virtualPath) => throw null; + public string EnsureDirectory(string dirPath) => throw null; + public override bool FileExists(string virtualPath) => throw null; + public FileSystemVirtualFiles(string rootDirectoryPath) => throw null; + public FileSystemVirtualFiles(System.IO.DirectoryInfo rootDirInfo) => throw null; + protected override void Initialize() => throw null; + public override string RealPathSeparator { get => throw null; } + protected ServiceStack.VirtualPath.FileSystemVirtualDirectory RootDir; + protected System.IO.DirectoryInfo RootDirInfo; + public override ServiceStack.IO.IVirtualDirectory RootDirectory { get => throw null; } + public override string VirtualPathSeparator { get => throw null; } + public void WriteFile(string filePath, string textContents) => throw null; + public void WriteFile(string filePath, System.IO.Stream stream) => throw null; + public void WriteFiles(System.Collections.Generic.IEnumerable files, System.Func toPath = default(System.Func)) => throw null; + } + + // Generated from `ServiceStack.IO.GistVirtualDirectory` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class GistVirtualDirectory : ServiceStack.VirtualPath.AbstractVirtualDirectoryBase + { + public void AddFile(string virtualPath, string contents) => throw null; + public void AddFile(string virtualPath, System.IO.Stream stream) => throw null; + public System.DateTime DirLastModified { get => throw null; set => throw null; } + public string DirPath { get => throw null; set => throw null; } + public override System.Collections.Generic.IEnumerable Directories { get => throw null; } + public System.Collections.Generic.IEnumerable EnumerateFiles(string pattern) => throw null; + public override System.Collections.Generic.IEnumerable Files { get => throw null; } + public ServiceStack.IGistGateway Gateway { get => throw null; } + public override System.Collections.Generic.IEnumerable GetAllMatchingFiles(string globPattern, int maxDepth = default(int)) => throw null; + protected override ServiceStack.IO.IVirtualDirectory GetDirectoryFromBackingDirectoryOrDefault(string directoryName) => throw null; + public override System.Collections.Generic.IEnumerator GetEnumerator() => throw null; + public override ServiceStack.IO.IVirtualFile GetFile(string virtualPath) => throw null; + protected override ServiceStack.IO.IVirtualFile GetFileFromBackingDirectoryOrDefault(string fileName) => throw null; + protected override System.Collections.Generic.IEnumerable GetMatchingFilesInDir(string globPattern) => throw null; + public string GistId { get => throw null; } + public GistVirtualDirectory(ServiceStack.IO.GistVirtualFiles pathProvider, string dirPath, ServiceStack.IO.GistVirtualDirectory parentDir) : base(default(ServiceStack.IO.IVirtualPathProvider)) => throw null; + public override System.DateTime LastModified { get => throw null; } + public override string Name { get => throw null; } + public override string VirtualPath { get => throw null; } + } + + // Generated from `ServiceStack.IO.GistVirtualFile` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class GistVirtualFile : ServiceStack.VirtualPath.AbstractVirtualFileBase + { + public ServiceStack.IGistGateway Client { get => throw null; } + public System.Int64 ContentLength { get => throw null; set => throw null; } + public string ContentType { get => throw null; set => throw null; } + public string DirPath { get => throw null; } + public override string Extension { get => throw null; } + public System.DateTime FileLastModified { get => throw null; set => throw null; } + public string FilePath { get => throw null; set => throw null; } + public override object GetContents() => throw null; + public string GistId { get => throw null; } + public GistVirtualFile(ServiceStack.IO.GistVirtualFiles pathProvider, ServiceStack.IO.IVirtualDirectory directory) : base(default(ServiceStack.IO.IVirtualPathProvider), default(ServiceStack.IO.IVirtualDirectory)) => throw null; + public ServiceStack.IO.GistVirtualFile Init(string filePath, System.DateTime lastModified, string text, System.IO.MemoryStream stream) => throw null; + public override System.DateTime LastModified { get => throw null; } + public override System.Int64 Length { get => throw null; } + public override string Name { get => throw null; } + public override System.IO.Stream OpenRead() => throw null; + public override void Refresh() => throw null; + public System.IO.Stream Stream { get => throw null; set => throw null; } + public string Text { get => throw null; set => throw null; } + public override string VirtualPath { get => throw null; } + } + + // Generated from `ServiceStack.IO.GistVirtualFiles` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class GistVirtualFiles : ServiceStack.VirtualPath.AbstractVirtualPathProviderBase, ServiceStack.IO.IVirtualPathProvider, ServiceStack.IO.IVirtualFiles + { + public void AppendFile(string filePath, string textContents) => throw null; + public void AppendFile(string filePath, System.IO.Stream stream) => throw null; + public const string Base64Modifier = default; + public void ClearGist() => throw null; + public void DeleteFile(string filePath) => throw null; + public void DeleteFiles(System.Collections.Generic.IEnumerable virtualFilePaths) => throw null; + public void DeleteFolder(string dirPath) => throw null; + public const System.Char DirSep = default; + public override bool DirectoryExists(string virtualPath) => throw null; + public System.Collections.Generic.IEnumerable EnumerateFiles(string prefix = default(string)) => throw null; + public override bool FileExists(string virtualPath) => throw null; + public ServiceStack.IGistGateway Gateway { get => throw null; } + public override System.Collections.Generic.IEnumerable GetAllFiles() => throw null; + public string GetDirPath(string filePath) => throw null; + public override ServiceStack.IO.IVirtualDirectory GetDirectory(string virtualPath) => throw null; + public override ServiceStack.IO.IVirtualFile GetFile(string virtualPath) => throw null; + public static string GetFileName(string filePath) => throw null; + public ServiceStack.Gist GetGist(bool refresh = default(bool)) => throw null; + public System.Threading.Tasks.Task GetGistAsync(bool refresh = default(bool)) => throw null; + public static bool GetGistContents(string filePath, ServiceStack.Gist gist, out string text, out System.IO.MemoryStream stream) => throw null; + public static bool GetGistTextContents(string filePath, ServiceStack.Gist gist, out string text) => throw null; + public System.Collections.Generic.IEnumerable GetImmediateDirectories(string fromDirPath) => throw null; + public System.Collections.Generic.IEnumerable GetImmediateFiles(string fromDirPath) => throw null; + public string GetImmediateSubDirPath(string fromDirPath, string subDirPath) => throw null; + public string GistId { get => throw null; set => throw null; } + public GistVirtualFiles(string gistId, string accessToken) => throw null; + public GistVirtualFiles(string gistId, ServiceStack.IGistGateway gateway) => throw null; + public GistVirtualFiles(string gistId) => throw null; + public GistVirtualFiles(ServiceStack.Gist gist, string accessToken) => throw null; + public GistVirtualFiles(ServiceStack.Gist gist, ServiceStack.IGistGateway gateway) => throw null; + public GistVirtualFiles(ServiceStack.Gist gist) => throw null; + protected override void Initialize() => throw null; + public static bool IsDirSep(System.Char c) => throw null; + public System.DateTime LastRefresh { get => throw null; set => throw null; } + public System.Threading.Tasks.Task LoadAllTruncatedFilesAsync() => throw null; + public override string RealPathSeparator { get => throw null; } + public System.TimeSpan RefreshAfter { get => throw null; set => throw null; } + public string ResolveGistFileName(string filePath) => throw null; + public override ServiceStack.IO.IVirtualDirectory RootDirectory { get => throw null; } + public override string SanitizePath(string filePath) => throw null; + public static string ToBase64(System.IO.Stream stream) => throw null; + public static string ToBase64(System.Byte[] bytes) => throw null; + public override string VirtualPathSeparator { get => throw null; } + public void WriteFile(string virtualPath, string contents) => throw null; + public void WriteFile(string virtualPath, System.IO.Stream stream) => throw null; + public void WriteFiles(System.Collections.Generic.IEnumerable files, System.Func toPath = default(System.Func)) => throw null; + public override void WriteFiles(System.Collections.Generic.Dictionary textFiles) => throw null; + public override void WriteFiles(System.Collections.Generic.Dictionary files) => throw null; + } + + // Generated from `ServiceStack.IO.InMemoryVirtualDirectory` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class InMemoryVirtualDirectory : ServiceStack.VirtualPath.AbstractVirtualDirectoryBase + { + public void AddFile(string filePath, string contents) => throw null; + public void AddFile(string filePath, System.IO.Stream stream) => throw null; + public System.DateTime DirLastModified { get => throw null; set => throw null; } + public string DirPath { get => throw null; set => throw null; } + public override System.Collections.Generic.IEnumerable Directories { get => throw null; } + public System.Collections.Generic.IEnumerable EnumerateFiles(string pattern) => throw null; + public override System.Collections.Generic.IEnumerable Files { get => throw null; } + public override System.Collections.Generic.IEnumerable GetAllMatchingFiles(string globPattern, int maxDepth = default(int)) => throw null; + protected override ServiceStack.IO.IVirtualDirectory GetDirectoryFromBackingDirectoryOrDefault(string directoryName) => throw null; + public override System.Collections.Generic.IEnumerator GetEnumerator() => throw null; + public override ServiceStack.IO.IVirtualFile GetFile(string virtualPath) => throw null; + protected override ServiceStack.IO.IVirtualFile GetFileFromBackingDirectoryOrDefault(string fileName) => throw null; + protected override System.Collections.Generic.IEnumerable GetMatchingFilesInDir(string globPattern) => throw null; + public bool HasFiles() => throw null; + public InMemoryVirtualDirectory(ServiceStack.IO.MemoryVirtualFiles pathProvider, string dirPath, ServiceStack.IO.IVirtualDirectory parentDir = default(ServiceStack.IO.IVirtualDirectory)) : base(default(ServiceStack.IO.IVirtualPathProvider)) => throw null; + public override System.DateTime LastModified { get => throw null; } + public override string Name { get => throw null; } + public override string VirtualPath { get => throw null; } + } + + // Generated from `ServiceStack.IO.InMemoryVirtualFile` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class InMemoryVirtualFile : ServiceStack.VirtualPath.AbstractVirtualFileBase + { + public System.Byte[] ByteContents { get => throw null; set => throw null; } + public string DirPath { get => throw null; } + public System.DateTime FileLastModified { get => throw null; set => throw null; } + public string FilePath { get => throw null; set => throw null; } + public override object GetContents() => throw null; + public InMemoryVirtualFile(ServiceStack.IO.IVirtualPathProvider owningProvider, ServiceStack.IO.IVirtualDirectory directory) : base(default(ServiceStack.IO.IVirtualPathProvider), default(ServiceStack.IO.IVirtualDirectory)) => throw null; + public override System.DateTime LastModified { get => throw null; } + public override System.Int64 Length { get => throw null; } + public override string Name { get => throw null; } + public override System.IO.Stream OpenRead() => throw null; + public override void Refresh() => throw null; + public void SetContents(string text, System.Byte[] bytes) => throw null; + public string TextContents { get => throw null; set => throw null; } + public override string VirtualPath { get => throw null; } + } + + // Generated from `ServiceStack.IO.MemoryVirtualFiles` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class MemoryVirtualFiles : ServiceStack.VirtualPath.AbstractVirtualPathProviderBase, ServiceStack.IO.IVirtualPathProvider, ServiceStack.IO.IVirtualFiles + { + public void AddFile(ServiceStack.IO.InMemoryVirtualFile file) => throw null; + public void AppendFile(string filePath, string textContents) => throw null; + public void AppendFile(string filePath, System.IO.Stream stream) => throw null; + public void Clear() => throw null; + public void DeleteFile(string filePath) => throw null; + public void DeleteFiles(System.Collections.Generic.IEnumerable filePaths) => throw null; + public void DeleteFolder(string dirPath) => throw null; + public const System.Char DirSep = default; + public override bool DirectoryExists(string virtualPath) => throw null; + public System.Collections.Generic.List Files { get => throw null; } + public override System.Collections.Generic.IEnumerable GetAllFiles() => throw null; + public string GetDirPath(string filePath) => throw null; + public override ServiceStack.IO.IVirtualDirectory GetDirectory(string virtualPath) => throw null; + public ServiceStack.IO.IVirtualDirectory GetDirectory(string virtualPath, bool forceDir) => throw null; + public override ServiceStack.IO.IVirtualFile GetFile(string virtualPath) => throw null; + public System.Collections.Generic.IEnumerable GetImmediateDirectories(string fromDirPath) => throw null; + public System.Collections.Generic.IEnumerable GetImmediateFiles(string fromDirPath) => throw null; + public string GetImmediateSubDirPath(string fromDirPath, string subDirPath) => throw null; + public ServiceStack.IO.IVirtualDirectory GetParentDirectory(string dirPath) => throw null; + protected override void Initialize() => throw null; + public MemoryVirtualFiles() => throw null; + public override string RealPathSeparator { get => throw null; } + public override ServiceStack.IO.IVirtualDirectory RootDirectory { get => throw null; } + public override string VirtualPathSeparator { get => throw null; } + public void WriteFile(string filePath, string textContents) => throw null; + public void WriteFile(string filePath, System.IO.Stream stream) => throw null; + public void WriteFiles(System.Collections.Generic.IEnumerable files, System.Func toPath = default(System.Func)) => throw null; + } + + // Generated from `ServiceStack.IO.MultiVirtualDirectory` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class MultiVirtualDirectory : System.Collections.IEnumerable, System.Collections.Generic.IEnumerable, ServiceStack.IO.IVirtualNode, ServiceStack.IO.IVirtualDirectory + { + public System.Collections.Generic.IEnumerable Directories { get => throw null; } + public ServiceStack.IO.IVirtualDirectory Directory { get => throw null; } + public System.Collections.Generic.IEnumerable Files { get => throw null; } + public System.Collections.Generic.IEnumerable GetAllMatchingFiles(string globPattern, int maxDepth = default(int)) => throw null; + public ServiceStack.IO.IVirtualDirectory GetDirectory(string virtualPath) => throw null; + public ServiceStack.IO.IVirtualDirectory GetDirectory(System.Collections.Generic.Stack virtualPath) => throw null; + public System.Collections.Generic.IEnumerator GetEnumerator() => throw null; + System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() => throw null; + public ServiceStack.IO.IVirtualFile GetFile(string virtualPath) => throw null; + public ServiceStack.IO.IVirtualFile GetFile(System.Collections.Generic.Stack virtualPath) => throw null; + public bool IsDirectory { get => throw null; } + public bool IsRoot { get => throw null; } + public System.DateTime LastModified { get => throw null; } + public MultiVirtualDirectory(ServiceStack.IO.IVirtualDirectory[] dirs) => throw null; + public string Name { get => throw null; } + public ServiceStack.IO.IVirtualDirectory ParentDirectory { get => throw null; } + public string RealPath { get => throw null; } + public static ServiceStack.IO.IVirtualDirectory ToVirtualDirectory(System.Collections.Generic.IEnumerable dirs) => throw null; + public string VirtualPath { get => throw null; } + } + + // Generated from `ServiceStack.IO.MultiVirtualFiles` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class MultiVirtualFiles : ServiceStack.VirtualPath.AbstractVirtualPathProviderBase, ServiceStack.IO.IVirtualPathProvider, ServiceStack.IO.IVirtualFiles + { + public void AppendFile(string filePath, string textContents) => throw null; + public void AppendFile(string filePath, System.IO.Stream stream) => throw null; + public System.Collections.Generic.List ChildProviders { get => throw null; set => throw null; } + public System.Collections.Generic.IEnumerable ChildVirtualFiles { get => throw null; } + public override string CombineVirtualPath(string basePath, string relativePath) => throw null; + public void DeleteFile(string filePath) => throw null; + public void DeleteFiles(System.Collections.Generic.IEnumerable filePaths) => throw null; + public void DeleteFolder(string dirPath) => throw null; + public override bool DirectoryExists(string virtualPath) => throw null; + public override bool FileExists(string virtualPath) => throw null; + public override System.Collections.Generic.IEnumerable GetAllFiles() => throw null; + public override System.Collections.Generic.IEnumerable GetAllMatchingFiles(string globPattern, int maxDepth = default(int)) => throw null; + public override ServiceStack.IO.IVirtualDirectory GetDirectory(string virtualPath) => throw null; + public override ServiceStack.IO.IVirtualFile GetFile(string virtualPath) => throw null; + public override System.Collections.Generic.IEnumerable GetRootDirectories() => throw null; + public override System.Collections.Generic.IEnumerable GetRootFiles() => throw null; + protected override void Initialize() => throw null; + public override bool IsSharedFile(ServiceStack.IO.IVirtualFile virtualFile) => throw null; + public override bool IsViewFile(ServiceStack.IO.IVirtualFile virtualFile) => throw null; + public MultiVirtualFiles(params ServiceStack.IO.IVirtualPathProvider[] childProviders) => throw null; + public override string RealPathSeparator { get => throw null; } + public override ServiceStack.IO.IVirtualDirectory RootDirectory { get => throw null; } + public override string ToString() => throw null; + public override string VirtualPathSeparator { get => throw null; } + public void WriteFile(string filePath, string textContents) => throw null; + public void WriteFile(string filePath, System.IO.Stream stream) => throw null; + public void WriteFiles(System.Collections.Generic.IEnumerable files, System.Func toPath = default(System.Func)) => throw null; + } + + // Generated from `ServiceStack.IO.ResourceVirtualFiles` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ResourceVirtualFiles : ServiceStack.VirtualPath.AbstractVirtualPathProviderBase + { + protected System.Reflection.Assembly BackingAssembly; + public string CleanPath(string filePath) => throw null; + public override string CombineVirtualPath(string basePath, string relativePath) => throw null; + public override ServiceStack.IO.IVirtualFile GetFile(string virtualPath) => throw null; + protected override void Initialize() => throw null; + public System.DateTime LastModified { get => throw null; set => throw null; } + public static System.Collections.Generic.HashSet PartialFileNames { get => throw null; set => throw null; } + public override string RealPathSeparator { get => throw null; } + public ResourceVirtualFiles(System.Type baseTypeInAssembly) => throw null; + public ResourceVirtualFiles(System.Reflection.Assembly backingAssembly, string rootNamespace = default(string)) => throw null; + protected ServiceStack.VirtualPath.ResourceVirtualDirectory RootDir; + public override ServiceStack.IO.IVirtualDirectory RootDirectory { get => throw null; } + protected string RootNamespace; + public override string VirtualPathSeparator { get => throw null; } + } + + // Generated from `ServiceStack.IO.VirtualDirectoryExtensions` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class VirtualDirectoryExtensions + { + public static System.Collections.Generic.IEnumerable GetAllFiles(this ServiceStack.IO.IVirtualDirectory dir) => throw null; + public static System.Collections.Generic.IEnumerable GetDirectories(this ServiceStack.IO.IVirtualDirectory dir) => throw null; + public static System.Collections.Generic.IEnumerable GetFiles(this ServiceStack.IO.IVirtualDirectory dir) => throw null; + } + + // Generated from `ServiceStack.IO.VirtualFilesExtensions` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class VirtualFilesExtensions + { + public static void AppendFile(this ServiceStack.IO.IVirtualPathProvider pathProvider, string filePath, string textContents) => throw null; + public static void AppendFile(this ServiceStack.IO.IVirtualPathProvider pathProvider, string filePath, object contents) => throw null; + public static void AppendFile(this ServiceStack.IO.IVirtualPathProvider pathProvider, string filePath, System.ReadOnlyMemory text) => throw null; + public static void AppendFile(this ServiceStack.IO.IVirtualPathProvider pathProvider, string filePath, System.ReadOnlyMemory bytes) => throw null; + public static void AppendFile(this ServiceStack.IO.IVirtualPathProvider pathProvider, string filePath, System.IO.Stream stream) => throw null; + public static void AppendFile(this ServiceStack.IO.IVirtualPathProvider pathProvider, string filePath, System.Byte[] bytes) => throw null; + public static void CopyFrom(this ServiceStack.IO.IVirtualPathProvider pathProvider, System.Collections.Generic.IEnumerable srcFiles, System.Func toPath = default(System.Func)) => throw null; + public static void DeleteFile(this ServiceStack.IO.IVirtualPathProvider pathProvider, string filePath) => throw null; + public static void DeleteFile(this ServiceStack.IO.IVirtualPathProvider pathProvider, ServiceStack.IO.IVirtualFile file) => throw null; + public static void DeleteFiles(this ServiceStack.IO.IVirtualPathProvider pathProvider, System.Collections.Generic.IEnumerable filePaths) => throw null; + public static void DeleteFiles(this ServiceStack.IO.IVirtualPathProvider pathProvider, System.Collections.Generic.IEnumerable files) => throw null; + public static void DeleteFolder(this ServiceStack.IO.IVirtualPathProvider pathProvider, string dirPath) => throw null; + public static bool IsDirectory(this ServiceStack.IO.IVirtualPathProvider pathProvider, string filePath) => throw null; + public static bool IsFile(this ServiceStack.IO.IVirtualPathProvider pathProvider, string filePath) => throw null; + public static void WriteFile(this ServiceStack.IO.IVirtualPathProvider pathProvider, string filePath, string textContents) => throw null; + public static void WriteFile(this ServiceStack.IO.IVirtualPathProvider pathProvider, string filePath, object contents) => throw null; + public static void WriteFile(this ServiceStack.IO.IVirtualPathProvider pathProvider, string filePath, System.ReadOnlyMemory text) => throw null; + public static void WriteFile(this ServiceStack.IO.IVirtualPathProvider pathProvider, string filePath, System.ReadOnlyMemory bytes) => throw null; + public static void WriteFile(this ServiceStack.IO.IVirtualPathProvider pathProvider, string filePath, System.IO.Stream stream) => throw null; + public static void WriteFile(this ServiceStack.IO.IVirtualPathProvider pathProvider, string filePath, System.Byte[] bytes) => throw null; + public static void WriteFile(this ServiceStack.IO.IVirtualPathProvider pathProvider, ServiceStack.IO.IVirtualFile file, string filePath = default(string)) => throw null; + public static void WriteFiles(this ServiceStack.IO.IVirtualPathProvider pathProvider, System.Collections.Generic.IEnumerable srcFiles, System.Func toPath = default(System.Func)) => throw null; + public static void WriteFiles(this ServiceStack.IO.IVirtualPathProvider pathProvider, System.Collections.Generic.Dictionary textFiles) => throw null; + public static void WriteFiles(this ServiceStack.IO.IVirtualPathProvider pathProvider, System.Collections.Generic.Dictionary files) => throw null; + } + + } + namespace Logging + { + // Generated from `ServiceStack.Logging.ConsoleLogFactory` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ConsoleLogFactory : ServiceStack.Logging.ILogFactory + { + public static void Configure(bool debugEnabled = default(bool)) => throw null; + public ConsoleLogFactory(bool debugEnabled = default(bool)) => throw null; + public ServiceStack.Logging.ILog GetLogger(string typeName) => throw null; + public ServiceStack.Logging.ILog GetLogger(System.Type type) => throw null; + } + + // Generated from `ServiceStack.Logging.ConsoleLogger` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ConsoleLogger : ServiceStack.Logging.ILog + { + public ConsoleLogger(string type) => throw null; + public ConsoleLogger(System.Type type) => throw null; + public void Debug(object message, System.Exception exception) => throw null; + public void Debug(object message) => throw null; + public void DebugFormat(string format, params object[] args) => throw null; + public void Error(object message, System.Exception exception) => throw null; + public void Error(object message) => throw null; + public void ErrorFormat(string format, params object[] args) => throw null; + public void Fatal(object message, System.Exception exception) => throw null; + public void Fatal(object message) => throw null; + public void FatalFormat(string format, params object[] args) => throw null; + public void Info(object message, System.Exception exception) => throw null; + public void Info(object message) => throw null; + public void InfoFormat(string format, params object[] args) => throw null; + public bool IsDebugEnabled { get => throw null; set => throw null; } + public void Warn(object message, System.Exception exception) => throw null; + public void Warn(object message) => throw null; + public void WarnFormat(string format, params object[] args) => throw null; + } + + // Generated from `ServiceStack.Logging.DebugLogFactory` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class DebugLogFactory : ServiceStack.Logging.ILogFactory + { + public DebugLogFactory(bool debugEnabled = default(bool)) => throw null; + public ServiceStack.Logging.ILog GetLogger(string typeName) => throw null; + public ServiceStack.Logging.ILog GetLogger(System.Type type) => throw null; + } + + // Generated from `ServiceStack.Logging.DebugLogger` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class DebugLogger : ServiceStack.Logging.ILog + { + public void Debug(object message, System.Exception exception) => throw null; + public void Debug(object message) => throw null; + public void DebugFormat(string format, params object[] args) => throw null; + public DebugLogger(string type) => throw null; + public DebugLogger(System.Type type) => throw null; + public void Error(object message, System.Exception exception) => throw null; + public void Error(object message) => throw null; + public void ErrorFormat(string format, params object[] args) => throw null; + public void Fatal(object message, System.Exception exception) => throw null; + public void Fatal(object message) => throw null; + public void FatalFormat(string format, params object[] args) => throw null; + public void Info(object message, System.Exception exception) => throw null; + public void Info(object message) => throw null; + public void InfoFormat(string format, params object[] args) => throw null; + public bool IsDebugEnabled { get => throw null; set => throw null; } + public void Warn(object message, System.Exception exception) => throw null; + public void Warn(object message) => throw null; + public void WarnFormat(string format, params object[] args) => throw null; + } + + } + namespace MiniProfiler + { + namespace Data + { + // Generated from `ServiceStack.MiniProfiler.Data.ExecuteType` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public enum ExecuteType + { + NonQuery, + None, + Reader, + Scalar, + } + + // Generated from `ServiceStack.MiniProfiler.Data.IDbProfiler` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IDbProfiler + { + void ExecuteFinish(System.Data.Common.DbCommand profiledDbCommand, ServiceStack.MiniProfiler.Data.ExecuteType executeType, System.Data.Common.DbDataReader reader); + void ExecuteStart(System.Data.Common.DbCommand profiledDbCommand, ServiceStack.MiniProfiler.Data.ExecuteType executeType); + bool IsActive { get; } + void OnError(System.Data.Common.DbCommand profiledDbCommand, ServiceStack.MiniProfiler.Data.ExecuteType executeType, System.Exception exception); + void ReaderFinish(System.Data.Common.DbDataReader reader); + } + + // Generated from `ServiceStack.MiniProfiler.Data.ProfiledCommand` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ProfiledCommand : System.Data.Common.DbCommand, ServiceStack.Data.IHasDbCommand + { + public override void Cancel() => throw null; + public override string CommandText { get => throw null; set => throw null; } + public override int CommandTimeout { get => throw null; set => throw null; } + public override System.Data.CommandType CommandType { get => throw null; set => throw null; } + protected override System.Data.Common.DbParameter CreateDbParameter() => throw null; + public System.Data.Common.DbCommand DbCommand { get => throw null; set => throw null; } + System.Data.IDbCommand ServiceStack.Data.IHasDbCommand.DbCommand { get => throw null; } + protected override System.Data.Common.DbConnection DbConnection { get => throw null; set => throw null; } + protected override System.Data.Common.DbParameterCollection DbParameterCollection { get => throw null; } + protected ServiceStack.MiniProfiler.Data.IDbProfiler DbProfiler { get => throw null; set => throw null; } + protected override System.Data.Common.DbTransaction DbTransaction { get => throw null; set => throw null; } + public override bool DesignTimeVisible { get => throw null; set => throw null; } + protected override void Dispose(bool disposing) => throw null; + protected override System.Data.Common.DbDataReader ExecuteDbDataReader(System.Data.CommandBehavior behavior) => throw null; + public override int ExecuteNonQuery() => throw null; + public override object ExecuteScalar() => throw null; + public override void Prepare() => throw null; + public ProfiledCommand(System.Data.Common.DbCommand cmd, System.Data.Common.DbConnection conn, ServiceStack.MiniProfiler.Data.IDbProfiler profiler) => throw null; + public override System.Data.UpdateRowSource UpdatedRowSource { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.MiniProfiler.Data.ProfiledConnection` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ProfiledConnection : System.Data.Common.DbConnection, ServiceStack.Data.IHasDbConnection + { + protected bool AutoDisposeConnection { get => throw null; set => throw null; } + protected override System.Data.Common.DbTransaction BeginDbTransaction(System.Data.IsolationLevel isolationLevel) => throw null; + protected override bool CanRaiseEvents { get => throw null; } + public override void ChangeDatabase(string databaseName) => throw null; + public override void Close() => throw null; + public override string ConnectionString { get => throw null; set => throw null; } + public override int ConnectionTimeout { get => throw null; } + protected override System.Data.Common.DbCommand CreateDbCommand() => throw null; + public override string DataSource { get => throw null; } + public override string Database { get => throw null; } + public System.Data.IDbConnection DbConnection { get => throw null; } + protected override void Dispose(bool disposing) => throw null; + public System.Data.Common.DbConnection InnerConnection { get => throw null; set => throw null; } + public override void Open() => throw null; + public ProfiledConnection(System.Data.IDbConnection connection, ServiceStack.MiniProfiler.Data.IDbProfiler profiler, bool autoDisposeConnection = default(bool)) => throw null; + public ProfiledConnection(System.Data.Common.DbConnection connection, ServiceStack.MiniProfiler.Data.IDbProfiler profiler, bool autoDisposeConnection = default(bool)) => throw null; + public ServiceStack.MiniProfiler.Data.IDbProfiler Profiler { get => throw null; set => throw null; } + public override string ServerVersion { get => throw null; } + public override System.Data.ConnectionState State { get => throw null; } + public System.Data.Common.DbConnection WrappedConnection { get => throw null; } + } + + // Generated from `ServiceStack.MiniProfiler.Data.ProfiledDbDataReader` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ProfiledDbDataReader : System.Data.Common.DbDataReader + { + public override void Close() => throw null; + public override int Depth { get => throw null; } + public override int FieldCount { get => throw null; } + public override bool GetBoolean(int ordinal) => throw null; + public override System.Byte GetByte(int ordinal) => throw null; + public override System.Int64 GetBytes(int ordinal, System.Int64 dataOffset, System.Byte[] buffer, int bufferOffset, int length) => throw null; + public override System.Char GetChar(int ordinal) => throw null; + public override System.Int64 GetChars(int ordinal, System.Int64 dataOffset, System.Char[] buffer, int bufferOffset, int length) => throw null; + public override string GetDataTypeName(int ordinal) => throw null; + public override System.DateTime GetDateTime(int ordinal) => throw null; + public override System.Decimal GetDecimal(int ordinal) => throw null; + public override double GetDouble(int ordinal) => throw null; + public override System.Collections.IEnumerator GetEnumerator() => throw null; + public override System.Type GetFieldType(int ordinal) => throw null; + public override float GetFloat(int ordinal) => throw null; + public override System.Guid GetGuid(int ordinal) => throw null; + public override System.Int16 GetInt16(int ordinal) => throw null; + public override int GetInt32(int ordinal) => throw null; + public override System.Int64 GetInt64(int ordinal) => throw null; + public override string GetName(int ordinal) => throw null; + public override int GetOrdinal(string name) => throw null; + public override string GetString(int ordinal) => throw null; + public override object GetValue(int ordinal) => throw null; + public override int GetValues(object[] values) => throw null; + public override bool HasRows { get => throw null; } + public override bool IsClosed { get => throw null; } + public override bool IsDBNull(int ordinal) => throw null; + public override object this[string name] { get => throw null; } + public override object this[int ordinal] { get => throw null; } + public override bool NextResult() => throw null; + public ProfiledDbDataReader(System.Data.Common.DbDataReader reader, System.Data.Common.DbConnection connection, ServiceStack.MiniProfiler.Data.IDbProfiler profiler) => throw null; + public override bool Read() => throw null; + public override int RecordsAffected { get => throw null; } + } + + // Generated from `ServiceStack.MiniProfiler.Data.ProfiledDbTransaction` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ProfiledDbTransaction : System.Data.Common.DbTransaction, ServiceStack.Data.IHasDbTransaction + { + public override void Commit() => throw null; + protected override System.Data.Common.DbConnection DbConnection { get => throw null; } + public System.Data.IDbTransaction DbTransaction { get => throw null; } + protected override void Dispose(bool disposing) => throw null; + public override System.Data.IsolationLevel IsolationLevel { get => throw null; } + public ProfiledDbTransaction(System.Data.Common.DbTransaction transaction, ServiceStack.MiniProfiler.Data.ProfiledConnection connection) => throw null; + public override void Rollback() => throw null; + } + + // Generated from `ServiceStack.MiniProfiler.Data.ProfiledProviderFactory` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ProfiledProviderFactory : System.Data.Common.DbProviderFactory + { + public override System.Data.Common.DbCommand CreateCommand() => throw null; + public override System.Data.Common.DbConnection CreateConnection() => throw null; + public override System.Data.Common.DbConnectionStringBuilder CreateConnectionStringBuilder() => throw null; + public override System.Data.Common.DbParameter CreateParameter() => throw null; + public void InitProfiledDbProviderFactory(ServiceStack.MiniProfiler.Data.IDbProfiler profiler, System.Data.Common.DbProviderFactory wrappedFactory) => throw null; + public static ServiceStack.MiniProfiler.Data.ProfiledProviderFactory Instance; + public ProfiledProviderFactory(ServiceStack.MiniProfiler.Data.IDbProfiler profiler, System.Data.Common.DbProviderFactory wrappedFactory) => throw null; + protected ProfiledProviderFactory() => throw null; + protected ServiceStack.MiniProfiler.Data.IDbProfiler Profiler { get => throw null; set => throw null; } + protected System.Data.Common.DbProviderFactory WrappedFactory { get => throw null; set => throw null; } + } + + } + } + namespace Reflection + { + // Generated from `ServiceStack.Reflection.DelegateFactory` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class DelegateFactory + { + public static ServiceStack.Reflection.DelegateFactory.LateBoundMethod Create(System.Reflection.MethodInfo method) => throw null; + public static ServiceStack.Reflection.DelegateFactory.LateBoundVoid CreateVoid(System.Reflection.MethodInfo method) => throw null; + // Generated from `ServiceStack.Reflection.DelegateFactory+LateBoundMethod` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public delegate object LateBoundMethod(object target, object[] arguments); + + + // Generated from `ServiceStack.Reflection.DelegateFactory+LateBoundVoid` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public delegate void LateBoundVoid(object target, object[] arguments); + + + } + + } + namespace Script + { + // Generated from `ServiceStack.Script.BindingExpressionException` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class BindingExpressionException : System.Exception + { + public BindingExpressionException(string message, string member, string expression, System.Exception inner = default(System.Exception)) => throw null; + public string Expression { get => throw null; } + public string Member { get => throw null; } + } + + // Generated from `ServiceStack.Script.CallExpressionUtils` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class CallExpressionUtils + { + public static System.ReadOnlySpan ParseJsCallExpression(this System.ReadOnlySpan literal, out ServiceStack.Script.JsCallExpression expression, bool filterExpression = default(bool)) => throw null; + } + + // Generated from `ServiceStack.Script.CaptureScriptBlock` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class CaptureScriptBlock : ServiceStack.Script.ScriptBlock + { + public override ServiceStack.Script.ScriptLanguage Body { get => throw null; } + public CaptureScriptBlock() => throw null; + public override string Name { get => throw null; } + public override System.Threading.Tasks.Task WriteAsync(ServiceStack.Script.ScriptScopeContext scope, ServiceStack.Script.PageBlockFragment block, System.Threading.CancellationToken token) => throw null; + } + + // Generated from `ServiceStack.Script.CsvScriptBlock` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class CsvScriptBlock : ServiceStack.Script.ScriptBlock + { + public override ServiceStack.Script.ScriptLanguage Body { get => throw null; } + public CsvScriptBlock() => throw null; + public override string Name { get => throw null; } + public override System.Threading.Tasks.Task WriteAsync(ServiceStack.Script.ScriptScopeContext scope, ServiceStack.Script.PageBlockFragment block, System.Threading.CancellationToken ct) => throw null; + } + + // Generated from `ServiceStack.Script.DefaultScriptBlocks` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class DefaultScriptBlocks : ServiceStack.Script.IScriptPlugin + { + public DefaultScriptBlocks() => throw null; + public void Register(ServiceStack.Script.ScriptContext context) => throw null; + } + + // Generated from `ServiceStack.Script.DefaultScripts` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class DefaultScripts : ServiceStack.Script.ScriptMethods, ServiceStack.Script.IConfigureScriptContext + { + public bool AND(object lhs, object rhs) => throw null; + public int AssertWithinMaxQuota(int value) => throw null; + public void Configure(ServiceStack.Script.ScriptContext context) => throw null; + public static bool ContainsXss(string text) => throw null; + public DefaultScripts() => throw null; + public static System.Collections.Generic.List EvaluateWhenSkippingFilterExecution; + public static string GetVarNameFromStringOrArrowExpression(string filterName, object argExpr) => throw null; + public static ServiceStack.Script.DefaultScripts Instance; + public bool IsNullOrWhiteSpace(object target) => throw null; + public static bool MatchesStringValue(object target, System.Func match) => throw null; + public bool OR(object lhs, object rhs) => throw null; + public static System.Collections.Generic.List RemoveNewLinesFor { get => throw null; } + public static string TextDump(object target, ServiceStack.TextDumpOptions options) => throw null; + public static string TextList(System.Collections.IEnumerable items, ServiceStack.TextDumpOptions options) => throw null; + public static string[] XssFragments; + public double abs(double value) => throw null; + public double acos(double value) => throw null; + public object add(object lhs, object rhs) => throw null; + public System.DateTime addDays(System.DateTime target, int count) => throw null; + public string addHashParams(string url, object urlParams) => throw null; + public System.DateTime addHours(System.DateTime target, int count) => throw null; + public object addItem(object collection, object value) => throw null; + public System.DateTime addMilliseconds(System.DateTime target, int count) => throw null; + public System.DateTime addMinutes(System.DateTime target, int count) => throw null; + public System.DateTime addMonths(System.DateTime target, int count) => throw null; + public string addPath(string target, string pathToAppend) => throw null; + public string addPaths(string target, System.Collections.IEnumerable pathsToAppend) => throw null; + public string addQueryString(string url, object urlParams) => throw null; + public System.DateTime addSeconds(System.DateTime target, int count) => throw null; + public System.DateTime addTicks(System.DateTime target, int count) => throw null; + public ServiceStack.Script.IgnoreResult addTo(ServiceStack.Script.ScriptScopeContext scope, object value, object argExpr) => throw null; + public ServiceStack.Script.IgnoreResult addToGlobal(ServiceStack.Script.ScriptScopeContext scope, object value, object argExpr) => throw null; + public ServiceStack.Script.IgnoreResult addToStart(ServiceStack.Script.ScriptScopeContext scope, object value, object argExpr) => throw null; + public ServiceStack.Script.IgnoreResult addToStartGlobal(ServiceStack.Script.ScriptScopeContext scope, object value, object argExpr) => throw null; + public System.DateTime addYears(System.DateTime target, int count) => throw null; + public bool all(ServiceStack.Script.ScriptScopeContext scope, object target, object expression, object scopeOptions) => throw null; + public bool all(ServiceStack.Script.ScriptScopeContext scope, object target, object expression) => throw null; + public bool any(ServiceStack.Script.ScriptScopeContext scope, object target, object expression, object scopeOptions) => throw null; + public bool any(ServiceStack.Script.ScriptScopeContext scope, object target, object expression) => throw null; + public bool any(ServiceStack.Script.ScriptScopeContext scope, object target) => throw null; + public string appSetting(string name) => throw null; + public string append(string target, string suffix) => throw null; + public string appendFmt(string target, string format, object arg0, object arg1, object arg2) => throw null; + public string appendFmt(string target, string format, object arg0, object arg1) => throw null; + public string appendFmt(string target, string format, object arg) => throw null; + public string appendLine(string target) => throw null; + public ServiceStack.Script.IgnoreResult appendTo(ServiceStack.Script.ScriptScopeContext scope, string value, object argExpr) => throw null; + public ServiceStack.Script.IgnoreResult appendToGlobal(ServiceStack.Script.ScriptScopeContext scope, string value, object argExpr) => throw null; + public string asString(object target) => throw null; + public object assign(ServiceStack.Script.ScriptScopeContext scope, string argExpr, object value) => throw null; + public object assignError(ServiceStack.Script.ScriptScopeContext scope, string errorBinding) => throw null; + public object assignErrorAndContinueExecuting(ServiceStack.Script.ScriptScopeContext scope, string errorBinding) => throw null; + public object assignGlobal(ServiceStack.Script.ScriptScopeContext scope, string argExpr, object value) => throw null; + public System.Threading.Tasks.Task assignTo(ServiceStack.Script.ScriptScopeContext scope, object argExpr) => throw null; + public ServiceStack.Script.IgnoreResult assignTo(ServiceStack.Script.ScriptScopeContext scope, object value, object argExpr) => throw null; + public System.Threading.Tasks.Task assignToGlobal(ServiceStack.Script.ScriptScopeContext scope, object argExpr) => throw null; + public ServiceStack.Script.IgnoreResult assignToGlobal(ServiceStack.Script.ScriptScopeContext scope, object value, object argExpr) => throw null; + public double atan(double value) => throw null; + public double atan2(double y, double x) => throw null; + public double average(ServiceStack.Script.ScriptScopeContext scope, object target, object expression, object scopeOptions) => throw null; + public double average(ServiceStack.Script.ScriptScopeContext scope, object target, object expression) => throw null; + public double average(ServiceStack.Script.ScriptScopeContext scope, object target) => throw null; + public System.Threading.Tasks.Task buffer(ServiceStack.Script.ScriptScopeContext scope, object target) => throw null; + public string camelCase(string text) => throw null; + public object catchError(ServiceStack.Script.ScriptScopeContext scope, string errorBinding) => throw null; + public double ceiling(double value) => throw null; + public object coerce(string str) => throw null; + public int compareTo(string text, string other) => throw null; + public string concat(System.Collections.Generic.IEnumerable target) => throw null; + public System.Collections.Generic.IEnumerable concat(System.Collections.Generic.IEnumerable target, System.Collections.Generic.IEnumerable items) => throw null; + public bool contains(object target, object needle) => throw null; + public bool containsXss(object target) => throw null; + public string contentType(string fileOrExt) => throw null; + public object continueExecutingFiltersOnError(ServiceStack.Script.ScriptScopeContext scope, object ignoreTarget) => throw null; + public object continueExecutingFiltersOnError(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public double cos(double value) => throw null; + public int count(ServiceStack.Script.ScriptScopeContext scope, object target, object expression, object scopeOptions) => throw null; + public int count(ServiceStack.Script.ScriptScopeContext scope, object target, object expression) => throw null; + public int count(ServiceStack.Script.ScriptScopeContext scope, object target) => throw null; + public ServiceStack.IRawString cssIncludes(System.Collections.IEnumerable cssFiles) => throw null; + public System.Threading.Tasks.Task csv(ServiceStack.Script.ScriptScopeContext scope, object items) => throw null; + public ServiceStack.IRawString csv(object value) => throw null; + public string currency(System.Decimal decimalValue, string culture) => throw null; + public string currency(System.Decimal decimalValue) => throw null; + public System.DateTime date(int year, int month, int day, int hour, int min, int secs) => throw null; + public System.DateTime date(int year, int month, int day) => throw null; + public string dateFormat(System.DateTime dateValue, string format) => throw null; + public string dateFormat(System.DateTime dateValue) => throw null; + public string dateTimeFormat(System.DateTime dateValue) => throw null; + public object debugMode(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public System.Decimal decimalAdd(System.Decimal lhs, System.Decimal rhs) => throw null; + public System.Decimal decimalDiv(System.Decimal lhs, System.Decimal rhs) => throw null; + public System.Decimal decimalMul(System.Decimal lhs, System.Decimal rhs) => throw null; + public System.Decimal decimalSub(System.Decimal lhs, System.Decimal rhs) => throw null; + public System.Int64 decr(System.Int64 value) => throw null; + public System.Int64 decrBy(System.Int64 value, System.Int64 by) => throw null; + public System.Int64 decrement(System.Int64 value) => throw null; + public System.Int64 decrementBy(System.Int64 value, System.Int64 by) => throw null; + public object @default(object returnTarget, object elseReturn) => throw null; + public string dirPath(string filePath) => throw null; + public System.Collections.Generic.IEnumerable distinct(System.Collections.Generic.IEnumerable items) => throw null; + public double div(double lhs, double rhs) => throw null; + public double divide(double lhs, double rhs) => throw null; + public object @do(ServiceStack.Script.ScriptScopeContext scope, object expression) => throw null; + public System.Threading.Tasks.Task @do(ServiceStack.Script.ScriptScopeContext scope, object target, object expression, object scopeOptions) => throw null; + public System.Threading.Tasks.Task @do(ServiceStack.Script.ScriptScopeContext scope, object target, object expression) => throw null; + public object doIf(object test) => throw null; + public object doIf(object ignoreTarget, object test) => throw null; + public double doubleAdd(double lhs, double rhs) => throw null; + public double doubleDiv(double lhs, double rhs) => throw null; + public double doubleMul(double lhs, double rhs) => throw null; + public double doubleSub(double lhs, double rhs) => throw null; + public System.Threading.Tasks.Task dump(ServiceStack.Script.ScriptScopeContext scope, object items, string jsConfig) => throw null; + public System.Threading.Tasks.Task dump(ServiceStack.Script.ScriptScopeContext scope, object items) => throw null; + public ServiceStack.IRawString dump(object value) => throw null; + public double e() => throw null; + public object echo(object value) => throw null; + public object elementAt(System.Collections.IEnumerable target, int index) => throw null; + public System.Threading.Tasks.Task end(ServiceStack.Script.ScriptScopeContext scope, object ignore) => throw null; + public ServiceStack.Script.StopExecution end(object ignore) => throw null; + public ServiceStack.Script.StopExecution end() => throw null; + public object endIf(object test) => throw null; + public object endIf(object returnTarget, bool test) => throw null; + public object endIfAll(ServiceStack.Script.ScriptScopeContext scope, object target, object expression) => throw null; + public object endIfAny(ServiceStack.Script.ScriptScopeContext scope, object target, object expression) => throw null; + public object endIfDebug(object returnTarget) => throw null; + public object endIfEmpty(object target) => throw null; + public object endIfEmpty(object ignoreTarget, object target) => throw null; + public object endIfError(ServiceStack.Script.ScriptScopeContext scope, object value) => throw null; + public object endIfError(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public object endIfExists(object target) => throw null; + public object endIfExists(object ignoreTarget, object target) => throw null; + public object endIfFalsy(object target) => throw null; + public object endIfFalsy(object ignoreTarget, object target) => throw null; + public object endIfNotEmpty(object target) => throw null; + public object endIfNotEmpty(object ignoreTarget, object target) => throw null; + public object endIfNotNull(object target) => throw null; + public object endIfNotNull(object ignoreTarget, object target) => throw null; + public object endIfNull(object target) => throw null; + public object endIfNull(object ignoreTarget, object target) => throw null; + public object endIfTruthy(object target) => throw null; + public object endIfTruthy(object ignoreTarget, object target) => throw null; + public object endWhere(ServiceStack.Script.ScriptScopeContext scope, object target, object expression, object scopeOptions) => throw null; + public object endWhere(ServiceStack.Script.ScriptScopeContext scope, object target, object expression) => throw null; + public bool endsWith(string text, string needle) => throw null; + public object ensureAllArgsNotEmpty(ServiceStack.Script.ScriptScopeContext scope, object args, object options) => throw null; + public object ensureAllArgsNotEmpty(ServiceStack.Script.ScriptScopeContext scope, object args) => throw null; + public object ensureAllArgsNotNull(ServiceStack.Script.ScriptScopeContext scope, object args, object options) => throw null; + public object ensureAllArgsNotNull(ServiceStack.Script.ScriptScopeContext scope, object args) => throw null; + public object ensureAnyArgsNotEmpty(ServiceStack.Script.ScriptScopeContext scope, object args, object options) => throw null; + public object ensureAnyArgsNotEmpty(ServiceStack.Script.ScriptScopeContext scope, object args) => throw null; + public object ensureAnyArgsNotNull(ServiceStack.Script.ScriptScopeContext scope, object args, object options) => throw null; + public object ensureAnyArgsNotNull(ServiceStack.Script.ScriptScopeContext scope, object args) => throw null; + public bool eq(object target, object other) => throw null; + public bool equals(object target, object other) => throw null; + public bool equivalentTo(System.Collections.Generic.IEnumerable target, System.Collections.Generic.IEnumerable items) => throw null; + public string escapeBackticks(string text) => throw null; + public string escapeDoubleQuotes(string text) => throw null; + public string escapeNewLines(string text) => throw null; + public string escapePrimeQuotes(string text) => throw null; + public string escapeSingleQuotes(string text) => throw null; + public object eval(ServiceStack.Script.ScriptScopeContext scope, string js) => throw null; + public System.Threading.Tasks.Task evalScript(ServiceStack.Script.ScriptScopeContext scope, string source, System.Collections.Generic.Dictionary args) => throw null; + public System.Threading.Tasks.Task evalScript(ServiceStack.Script.ScriptScopeContext scope, string source) => throw null; + public System.Threading.Tasks.Task evalTemplate(ServiceStack.Script.ScriptScopeContext scope, string source, System.Collections.Generic.Dictionary args) => throw null; + public System.Threading.Tasks.Task evalTemplate(ServiceStack.Script.ScriptScopeContext scope, string source) => throw null; + public bool every(ServiceStack.Script.ScriptScopeContext scope, System.Collections.IList list, ServiceStack.Script.JsArrowFunctionExpression expression) => throw null; + public System.Collections.Generic.IEnumerable except(System.Collections.Generic.IEnumerable target, System.Collections.Generic.IEnumerable items) => throw null; + public bool exists(object test) => throw null; + public double exp(double value) => throw null; + public object falsy(object test, object returnIfFalsy) => throw null; + public object field(object target, string fieldName) => throw null; + public System.Reflection.FieldInfo[] fieldTypes(object o) => throw null; + public System.Collections.Generic.List fields(object o) => throw null; + public System.Collections.Generic.List filter(ServiceStack.Script.ScriptScopeContext scope, System.Collections.IList list, ServiceStack.Script.JsArrowFunctionExpression expression) => throw null; + public object find(ServiceStack.Script.ScriptScopeContext scope, System.Collections.IList list, ServiceStack.Script.JsArrowFunctionExpression expression) => throw null; + public int findIndex(ServiceStack.Script.ScriptScopeContext scope, System.Collections.IList list, ServiceStack.Script.JsArrowFunctionExpression expression) => throw null; + public object first(ServiceStack.Script.ScriptScopeContext scope, object target, object expression, object scopeOptions) => throw null; + public object first(ServiceStack.Script.ScriptScopeContext scope, object target, object expression) => throw null; + public object first(ServiceStack.Script.ScriptScopeContext scope, object target) => throw null; + public System.Collections.Generic.List flat(System.Collections.IList list, int depth) => throw null; + public System.Collections.Generic.List flat(System.Collections.IList list) => throw null; + public System.Collections.Generic.List flatMap(ServiceStack.Script.ScriptScopeContext scope, System.Collections.IList list, ServiceStack.Script.JsArrowFunctionExpression expression, int depth) => throw null; + public System.Collections.Generic.List flatMap(ServiceStack.Script.ScriptScopeContext scope, System.Collections.IList list, ServiceStack.Script.JsArrowFunctionExpression expression) => throw null; + public System.Collections.Generic.List flatten(object target, int depth) => throw null; + public System.Collections.Generic.List flatten(object target) => throw null; + public double floor(double value) => throw null; + public string fmt(string format, object arg0, object arg1, object arg2) => throw null; + public string fmt(string format, object arg0, object arg1) => throw null; + public string fmt(string format, object arg) => throw null; + public ServiceStack.Script.IgnoreResult forEach(ServiceStack.Script.ScriptScopeContext scope, object target, ServiceStack.Script.JsArrowFunctionExpression arrowExpr) => throw null; + public System.Collections.Specialized.NameValueCollection form(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public System.Collections.Generic.Dictionary formDictionary(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public string formQuery(ServiceStack.Script.ScriptScopeContext scope, string name) => throw null; + public string[] formQueryValues(ServiceStack.Script.ScriptScopeContext scope, string name) => throw null; + public string format(object obj, string format) => throw null; + public ServiceStack.IRawString formatRaw(object obj, string fmt) => throw null; + public System.Char fromCharCode(int charCode) => throw null; + public string fromUtf8Bytes(System.Byte[] target) => throw null; + public string generateSlug(string phrase) => throw null; + public object get(object target, object key) => throw null; + public string[] glob(System.Collections.Generic.IEnumerable strings, string pattern) => throw null; + public string globln(System.Collections.Generic.IEnumerable strings, string pattern) => throw null; + public bool greaterThan(object target, object other) => throw null; + public bool greaterThanEqual(object target, object other) => throw null; + public System.Collections.Generic.IEnumerable> groupBy(ServiceStack.Script.ScriptScopeContext scope, System.Collections.Generic.IEnumerable items, object expression, object scopeOptions) => throw null; + public System.Collections.Generic.IEnumerable> groupBy(ServiceStack.Script.ScriptScopeContext scope, System.Collections.Generic.IEnumerable items, object expression) => throw null; + public bool gt(object target, object other) => throw null; + public bool gte(object target, object other) => throw null; + public bool hasError(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public bool hasFlag(System.Enum source, object value) => throw null; + public bool hasMaxCount(object target, int maxCount) => throw null; + public bool hasMinCount(object target, int minCount) => throw null; + public string htmlDecode(string value) => throw null; + public string htmlEncode(string value) => throw null; + public string httpMethod(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public string httpParam(ServiceStack.Script.ScriptScopeContext scope, string name) => throw null; + public string httpPathInfo(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public string httpRequestUrl(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public string humanize(string text) => throw null; + public object @if(object test) => throw null; + public object @if(object returnTarget, object test) => throw null; + public object ifDebug(ServiceStack.Script.ScriptScopeContext scope, object ignoreTarget) => throw null; + public object ifDebug(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public object ifDo(object test) => throw null; + public object ifDo(object ignoreTarget, object test) => throw null; + public object ifElse(object returnTarget, object test, object defaultValue) => throw null; + public object ifEmpty(object returnTarget, object test) => throw null; + public object ifEnd(object ignoreTarget, bool test) => throw null; + public object ifEnd(bool test) => throw null; + public object ifError(ServiceStack.Script.ScriptScopeContext scope, object ignoreTarget) => throw null; + public object ifError(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public object ifExists(object target) => throw null; + public object ifExists(object returnTarget, object test) => throw null; + public object ifFalse(object returnTarget, object test) => throw null; + public object ifFalsy(object returnTarget, object test) => throw null; + public object ifHttpDelete(ServiceStack.Script.ScriptScopeContext scope, object ignoreTarget) => throw null; + public object ifHttpDelete(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public object ifHttpGet(ServiceStack.Script.ScriptScopeContext scope, object ignoreTarget) => throw null; + public object ifHttpGet(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public object ifHttpPatch(ServiceStack.Script.ScriptScopeContext scope, object ignoreTarget) => throw null; + public object ifHttpPatch(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public object ifHttpPost(ServiceStack.Script.ScriptScopeContext scope, object ignoreTarget) => throw null; + public object ifHttpPost(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public object ifHttpPut(ServiceStack.Script.ScriptScopeContext scope, object ignoreTarget) => throw null; + public object ifHttpPut(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public object ifMatchesPathInfo(ServiceStack.Script.ScriptScopeContext scope, object returnTarget, string pathInfo) => throw null; + public object ifNo(object returnTarget, object target) => throw null; + public object ifNoError(ServiceStack.Script.ScriptScopeContext scope, object value) => throw null; + public object ifNoError(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public object ifNot(object returnTarget, object test) => throw null; + public object ifNotElse(object returnTarget, object test, object defaultValue) => throw null; + public object ifNotEmpty(object target) => throw null; + public object ifNotEmpty(object returnTarget, object test) => throw null; + public object ifNotEnd(object ignoreTarget, bool test) => throw null; + public object ifNotEnd(bool test) => throw null; + public object ifNotExists(object returnTarget, object test) => throw null; + public object ifNotOnly(object ignoreTarget, bool test) => throw null; + public object ifNotOnly(bool test) => throw null; + public object ifOnly(object ignoreTarget, bool test) => throw null; + public object ifOnly(bool test) => throw null; + public object ifShow(object test, object useValue) => throw null; + public object ifShowRaw(object test, object useValue) => throw null; + public object ifThrow(ServiceStack.Script.ScriptScopeContext scope, bool test, string message, object options) => throw null; + public object ifThrow(ServiceStack.Script.ScriptScopeContext scope, bool test, string message) => throw null; + public object ifThrowArgumentException(ServiceStack.Script.ScriptScopeContext scope, bool test, string message, string paramName, object options) => throw null; + public object ifThrowArgumentException(ServiceStack.Script.ScriptScopeContext scope, bool test, string message, object options) => throw null; + public object ifThrowArgumentException(ServiceStack.Script.ScriptScopeContext scope, bool test, string message) => throw null; + public object ifThrowArgumentNullException(ServiceStack.Script.ScriptScopeContext scope, bool test, string paramName, object options) => throw null; + public object ifThrowArgumentNullException(ServiceStack.Script.ScriptScopeContext scope, bool test, string paramName) => throw null; + public object ifTrue(object returnTarget, object test) => throw null; + public object ifTruthy(object returnTarget, object test) => throw null; + public object ifUse(object test, object useValue) => throw null; + public object iif(object test, object ifTrue, object ifFalse) => throw null; + public object importRequestParams(ServiceStack.Script.ScriptScopeContext scope, System.Collections.IEnumerable onlyImportArgNames) => throw null; + public object importRequestParams(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public bool includes(System.Collections.IList list, object item, int fromIndex) => throw null; + public bool includes(System.Collections.IList list, object item) => throw null; + public System.Int64 incr(System.Int64 value) => throw null; + public System.Int64 incrBy(System.Int64 value, System.Int64 by) => throw null; + public System.Int64 increment(System.Int64 value) => throw null; + public System.Int64 incrementBy(System.Int64 value, System.Int64 by) => throw null; + public string indent() => throw null; + public ServiceStack.IRawString indentJson(object value, string jsconfig) => throw null; + public ServiceStack.IRawString indentJson(object value) => throw null; + public string indents(int count) => throw null; + public int indexOf(object target, object item, int startIndex) => throw null; + public int indexOf(object target, object item) => throw null; + public bool instanceOf(object target, object type) => throw null; + public int intAdd(int lhs, int rhs) => throw null; + public int intDiv(int lhs, int rhs) => throw null; + public int intMul(int lhs, int rhs) => throw null; + public int intSub(int lhs, int rhs) => throw null; + public System.Collections.Generic.IEnumerable intersect(System.Collections.Generic.IEnumerable target, System.Collections.Generic.IEnumerable items) => throw null; + public bool isAnonObject(object target) => throw null; + public bool isArray(object target) => throw null; + public bool isBinary(string fileOrExt) => throw null; + public bool isBool(object target) => throw null; + public bool isByte(object target) => throw null; + public bool isBytes(object target) => throw null; + public bool isChar(object target) => throw null; + public bool isChars(object target) => throw null; + public bool isClass(object target) => throw null; + public bool isDecimal(object target) => throw null; + public bool isDictionary(object target) => throw null; + public bool isDouble(object target) => throw null; + public bool isDto(object target) => throw null; + public bool isEmpty(object target) => throw null; + public bool isEnum(object target) => throw null; + public bool isEnum(System.Enum source, object value) => throw null; + public bool isEnumerable(object target) => throw null; + public bool isEven(int value) => throw null; + public static bool isFalsy(object target) => throw null; + public bool isFloat(object target) => throw null; + public bool isHttpDelete(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public bool isHttpGet(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public bool isHttpPatch(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public bool isHttpPost(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public bool isHttpPut(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public bool isInfinity(double value) => throw null; + public bool isInt(object target) => throw null; + public bool isInteger(object target) => throw null; + public bool isKeyValuePair(object target) => throw null; + public bool isList(object target) => throw null; + public bool isLong(object target) => throw null; + public bool isNaN(double value) => throw null; + public bool isNegative(double value) => throw null; + public bool isNotNull(object test) => throw null; + public bool isNull(object test) => throw null; + public bool isNumber(object target) => throw null; + public bool isObjectDictionary(object target) => throw null; + public bool isOdd(int value) => throw null; + public bool isPositive(double value) => throw null; + public bool isRealNumber(object target) => throw null; + public bool isString(object target) => throw null; + public bool isStringDictionary(object target) => throw null; + public static bool isTrue(object target) => throw null; + public static bool isTruthy(object target) => throw null; + public bool isTuple(object target) => throw null; + public bool isType(object target, string typeName) => throw null; + public bool isValueType(object target) => throw null; + public bool isZero(double value) => throw null; + public System.Collections.Generic.List itemsOf(int count, object target) => throw null; + public string join(System.Collections.Generic.IEnumerable values, string delimiter) => throw null; + public string join(System.Collections.Generic.IEnumerable values) => throw null; + public string joinln(System.Collections.Generic.IEnumerable values) => throw null; + public ServiceStack.IRawString jsIncludes(System.Collections.IEnumerable jsFiles) => throw null; + public ServiceStack.IRawString jsQuotedString(string text) => throw null; + public ServiceStack.IRawString jsString(string text) => throw null; + public System.Threading.Tasks.Task json(ServiceStack.Script.ScriptScopeContext scope, object items, string jsConfig) => throw null; + public System.Threading.Tasks.Task json(ServiceStack.Script.ScriptScopeContext scope, object items) => throw null; + public ServiceStack.IRawString json(object value, string jsconfig) => throw null; + public ServiceStack.IRawString json(object value) => throw null; + public ServiceStack.Text.JsonArrayObjects jsonToArrayObjects(string json) => throw null; + public ServiceStack.Text.JsonObject jsonToObject(string json) => throw null; + public System.Collections.Generic.Dictionary jsonToObjectDictionary(string json) => throw null; + public System.Collections.Generic.Dictionary jsonToStringDictionary(string json) => throw null; + public System.Threading.Tasks.Task jsv(ServiceStack.Script.ScriptScopeContext scope, object items, string jsConfig) => throw null; + public System.Threading.Tasks.Task jsv(ServiceStack.Script.ScriptScopeContext scope, object items) => throw null; + public ServiceStack.IRawString jsv(object value, string jsconfig) => throw null; + public ServiceStack.IRawString jsv(object value) => throw null; + public System.Collections.Generic.Dictionary jsvToObjectDictionary(string json) => throw null; + public System.Collections.Generic.Dictionary jsvToStringDictionary(string json) => throw null; + public string kebabCase(string text) => throw null; + public System.Collections.Generic.KeyValuePair keyValuePair(string key, object value) => throw null; + public System.Collections.ICollection keys(object target) => throw null; + public object last(ServiceStack.Script.ScriptScopeContext scope, object target) => throw null; + public System.Exception lastError(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public string lastErrorMessage(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public string lastErrorStackTrace(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public int lastIndexOf(object target, object item, int startIndex) => throw null; + public int lastIndexOf(object target, object item) => throw null; + public string lastLeftPart(string text, string needle) => throw null; + public string lastRightPart(string text, string needle) => throw null; + public string leftPart(string text, string needle) => throw null; + public int length(object target) => throw null; + public bool lessThan(object target, object other) => throw null; + public bool lessThanEqual(object target, object other) => throw null; + public object let(ServiceStack.Script.ScriptScopeContext scope, object target, object scopeBindings) => throw null; + public System.Collections.Generic.IEnumerable limit(ServiceStack.Script.ScriptScopeContext scope, System.Collections.Generic.IEnumerable original, object skipOrBinding, object takeOrBinding) => throw null; + public double log(double value) => throw null; + public double log(double a, double newBase) => throw null; + public double log10(double value) => throw null; + public double log2(double value) => throw null; + public System.Int64 longAdd(System.Int64 lhs, System.Int64 rhs) => throw null; + public System.Int64 longDiv(System.Int64 lhs, System.Int64 rhs) => throw null; + public System.Int64 longMul(System.Int64 lhs, System.Int64 rhs) => throw null; + public System.Int64 longSub(System.Int64 lhs, System.Int64 rhs) => throw null; + public string lower(string text) => throw null; + public bool lt(object target, object other) => throw null; + public bool lte(object target, object other) => throw null; + public object map(ServiceStack.Script.ScriptScopeContext scope, object target, object expression, object scopeOptions) => throw null; + public object map(ServiceStack.Script.ScriptScopeContext scope, object items, object expression) => throw null; + public bool matchesPathInfo(ServiceStack.Script.ScriptScopeContext scope, string pathInfo) => throw null; + public object max(ServiceStack.Script.ScriptScopeContext scope, object target, object expression, object scopeOptions) => throw null; + public object max(ServiceStack.Script.ScriptScopeContext scope, object target, object expression) => throw null; + public object max(ServiceStack.Script.ScriptScopeContext scope, object target) => throw null; + public object merge(object sources) => throw null; + public object merge(System.Collections.Generic.IDictionary target, object sources) => throw null; + public object min(ServiceStack.Script.ScriptScopeContext scope, object target, object expression, object scopeOptions) => throw null; + public object min(ServiceStack.Script.ScriptScopeContext scope, object target, object expression) => throw null; + public object min(ServiceStack.Script.ScriptScopeContext scope, object target) => throw null; + public System.Int64 mod(System.Int64 value, System.Int64 divisor) => throw null; + public object mul(object lhs, object rhs) => throw null; + public object multiply(object lhs, object rhs) => throw null; + public System.Collections.Generic.List navItems(string key) => throw null; + public System.Collections.Generic.List navItems() => throw null; + public string newLine(string target) => throw null; + public string newLine() => throw null; + public string newLines(int count) => throw null; + public System.Guid nguid() => throw null; + public bool not(object target, object other) => throw null; + public bool not(bool target) => throw null; + public bool notEquals(object target, object other) => throw null; + public System.DateTime now() => throw null; + public System.DateTimeOffset nowOffset() => throw null; + public System.Collections.IEnumerable of(ServiceStack.Script.ScriptScopeContext scope, System.Collections.IEnumerable target, object scopeOptions) => throw null; + public object onlyIf(object test) => throw null; + public object onlyIf(object returnTarget, bool test) => throw null; + public object onlyIfAll(ServiceStack.Script.ScriptScopeContext scope, object target, object expression) => throw null; + public object onlyIfAny(ServiceStack.Script.ScriptScopeContext scope, object target, object expression) => throw null; + public object onlyIfDebug(object returnTarget) => throw null; + public object onlyIfEmpty(object target) => throw null; + public object onlyIfEmpty(object ignoreTarget, object target) => throw null; + public object onlyIfExists(object target) => throw null; + public object onlyIfExists(object ignoreTarget, object target) => throw null; + public object onlyIfFalsy(object target) => throw null; + public object onlyIfFalsy(object ignoreTarget, object target) => throw null; + public object onlyIfNotEmpty(object target) => throw null; + public object onlyIfNotEmpty(object ignoreTarget, object target) => throw null; + public object onlyIfNotNull(object target) => throw null; + public object onlyIfNotNull(object ignoreTarget, object target) => throw null; + public object onlyIfNull(object target) => throw null; + public object onlyIfNull(object ignoreTarget, object target) => throw null; + public object onlyIfTruthy(object target) => throw null; + public object onlyIfTruthy(object ignoreTarget, object target) => throw null; + public object onlyWhere(ServiceStack.Script.ScriptScopeContext scope, object target, object expression, object scopeOptions) => throw null; + public object onlyWhere(ServiceStack.Script.ScriptScopeContext scope, object target, object expression) => throw null; + public System.Collections.Generic.IEnumerable orderBy(ServiceStack.Script.ScriptScopeContext scope, object target, object expression, object scopeOptions) => throw null; + public System.Collections.Generic.IEnumerable orderBy(ServiceStack.Script.ScriptScopeContext scope, object target, object expression) => throw null; + public System.Collections.Generic.IEnumerable orderByDesc(ServiceStack.Script.ScriptScopeContext scope, object target, object expression, object scopeOptions) => throw null; + public System.Collections.Generic.IEnumerable orderByDesc(ServiceStack.Script.ScriptScopeContext scope, object target, object expression) => throw null; + public System.Collections.Generic.IEnumerable orderByDescending(ServiceStack.Script.ScriptScopeContext scope, object target, object expression, object scopeOptions) => throw null; + public System.Collections.Generic.IEnumerable orderByDescending(ServiceStack.Script.ScriptScopeContext scope, object target, object expression) => throw null; + public static System.Collections.Generic.IEnumerable orderByInternal(string filterName, ServiceStack.Script.ScriptScopeContext scope, object target, object expression, object scopeOptions) => throw null; + public object otherwise(object returnTarget, object elseReturn) => throw null; + public object ownProps(System.Collections.Generic.IEnumerable> target) => throw null; + public string padLeft(string text, int totalWidth, System.Char padChar) => throw null; + public string padLeft(string text, int totalWidth) => throw null; + public string padRight(string text, int totalWidth, System.Char padChar) => throw null; + public string padRight(string text, int totalWidth) => throw null; + public System.Collections.Generic.KeyValuePair pair(string key, object value) => throw null; + public System.Collections.Generic.IEnumerable> parseAsKeyValues(string target, string delimiter) => throw null; + public System.Collections.Generic.IEnumerable> parseAsKeyValues(string target) => throw null; + public System.Collections.Generic.List> parseCsv(string csv) => throw null; + public object parseJson(string json) => throw null; + public System.Collections.Generic.Dictionary parseKeyValueText(string target, string delimiter) => throw null; + public System.Collections.Generic.Dictionary parseKeyValueText(string target) => throw null; + public System.Collections.Generic.List> parseKeyValues(string keyValuesText, string delimiter) => throw null; + public System.Collections.Generic.List> parseKeyValues(string keyValuesText) => throw null; + public System.Threading.Tasks.Task partial(ServiceStack.Script.ScriptScopeContext scope, object target, object scopedParams) => throw null; + public System.Threading.Tasks.Task partial(ServiceStack.Script.ScriptScopeContext scope, object target) => throw null; + public string pascalCase(string text) => throw null; + public ServiceStack.IRawString pass(string target) => throw null; + public double pi() => throw null; + public object pop(System.Collections.IList list) => throw null; + public double pow(double x, double y) => throw null; + public ServiceStack.Script.IgnoreResult prependTo(ServiceStack.Script.ScriptScopeContext scope, string value, object argExpr) => throw null; + public ServiceStack.Script.IgnoreResult prependToGlobal(ServiceStack.Script.ScriptScopeContext scope, string value, object argExpr) => throw null; + public System.Reflection.PropertyInfo[] propTypes(object o) => throw null; + public object property(object target, string propertyName) => throw null; + public System.Collections.Generic.List props(object o) => throw null; + public int push(System.Collections.IList list, object item) => throw null; + public object putItem(System.Collections.IDictionary dictionary, object key, object value) => throw null; + public System.Collections.Specialized.NameValueCollection qs(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public System.Collections.Specialized.NameValueCollection query(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public System.Collections.Generic.Dictionary queryDictionary(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public string queryString(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public System.Collections.Generic.IEnumerable range(int start, int count) => throw null; + public System.Collections.Generic.IEnumerable range(int count) => throw null; + public ServiceStack.IRawString raw(object value) => throw null; + public object rawBodyAsJson(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public string rawBodyAsString(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public System.Collections.Generic.IEnumerable readLines(string contents) => throw null; + public object reduce(ServiceStack.Script.ScriptScopeContext scope, object target, object expression, object scopeOptions) => throw null; + public object reduce(ServiceStack.Script.ScriptScopeContext scope, object target, object expression) => throw null; + public object remove(object target, object keysToRemove) => throw null; + public object removeKeyFromDictionary(System.Collections.IDictionary dictionary, object keyToRemove) => throw null; + public string repeat(string text, int times) => throw null; + public string repeating(int times, string text) => throw null; + public string replace(string text, string oldValue, string newValue) => throw null; + public System.IO.Stream requestBody(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public System.Threading.Tasks.Task requestBodyAsJson(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public System.Threading.Tasks.Task requestBodyAsString(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public object resolveArg(ServiceStack.Script.ScriptScopeContext scope, string name) => throw null; + public string resolveAsset(ServiceStack.Script.ScriptScopeContext scope, string virtualPath) => throw null; + public object resolveContextArg(ServiceStack.Script.ScriptScopeContext scope, string name) => throw null; + public object resolveGlobal(ServiceStack.Script.ScriptScopeContext scope, string name) => throw null; + public object resolvePageArg(ServiceStack.Script.ScriptScopeContext scope, string name) => throw null; + public ServiceStack.Script.StopExecution @return(ServiceStack.Script.ScriptScopeContext scope, object returnValue, System.Collections.Generic.Dictionary returnArgs) => throw null; + public ServiceStack.Script.StopExecution @return(ServiceStack.Script.ScriptScopeContext scope, object returnValue) => throw null; + public ServiceStack.Script.StopExecution @return(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public System.Collections.Generic.IEnumerable reverse(ServiceStack.Script.ScriptScopeContext scope, System.Collections.Generic.IEnumerable original) => throw null; + public string rightPart(string text, string needle) => throw null; + public double round(double value, int decimals) => throw null; + public double round(double value) => throw null; + public object scopeVars(object target) => throw null; + public System.Threading.Tasks.Task select(ServiceStack.Script.ScriptScopeContext scope, object target, object selectTemplate, object scopeOptions) => throw null; + public System.Threading.Tasks.Task select(ServiceStack.Script.ScriptScopeContext scope, object target, object selectTemplate) => throw null; + public System.Threading.Tasks.Task selectEach(ServiceStack.Script.ScriptScopeContext scope, object target, object items, object scopeOptions) => throw null; + public System.Threading.Tasks.Task selectEach(ServiceStack.Script.ScriptScopeContext scope, object target, object items) => throw null; + public object selectFields(object target, object names) => throw null; + public System.Threading.Tasks.Task selectPartial(ServiceStack.Script.ScriptScopeContext scope, object target, string pageName, object scopedParams) => throw null; + public System.Threading.Tasks.Task selectPartial(ServiceStack.Script.ScriptScopeContext scope, object target, string pageName) => throw null; + public bool sequenceEquals(System.Collections.IEnumerable a, System.Collections.IEnumerable b) => throw null; + public string setHashParams(string url, object urlParams) => throw null; + public string setQueryString(string url, object urlParams) => throw null; + public object shift(System.Collections.IList list) => throw null; + public object show(object ignoreTarget, object useValue) => throw null; + public object showFmt(object ignoreTarget, string format, object arg1, object arg2, object arg3) => throw null; + public object showFmt(object ignoreTarget, string format, object arg1, object arg2) => throw null; + public object showFmt(object ignoreTarget, string format, object arg) => throw null; + public ServiceStack.IRawString showFmtRaw(object ignoreTarget, string format, object arg1, object arg2, object arg3) => throw null; + public ServiceStack.IRawString showFmtRaw(object ignoreTarget, string format, object arg1, object arg2) => throw null; + public ServiceStack.IRawString showFmtRaw(object ignoreTarget, string format, object arg) => throw null; + public object showFormat(object ignoreTarget, object arg, string fmt) => throw null; + public object showIf(object useValue, object test) => throw null; + public object showIfExists(object useValue, object test) => throw null; + public ServiceStack.IRawString showRaw(object ignoreTarget, string content) => throw null; + public int sign(double value) => throw null; + public double sin(double value) => throw null; + public double sinh(double value) => throw null; + public System.Collections.Generic.IEnumerable skip(ServiceStack.Script.ScriptScopeContext scope, System.Collections.Generic.IEnumerable original, object countOrBinding) => throw null; + public object skipExecutingFiltersOnError(ServiceStack.Script.ScriptScopeContext scope, object ignoreTarget) => throw null; + public object skipExecutingFiltersOnError(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public System.Collections.Generic.IEnumerable skipWhile(ServiceStack.Script.ScriptScopeContext scope, object target, object expression, object scopeOptions) => throw null; + public System.Collections.Generic.IEnumerable skipWhile(ServiceStack.Script.ScriptScopeContext scope, object target, object expression) => throw null; + public System.Collections.Generic.List slice(System.Collections.IList list, int begin, int end) => throw null; + public System.Collections.Generic.List slice(System.Collections.IList list, int begin) => throw null; + public System.Collections.Generic.List slice(System.Collections.IList list) => throw null; + public string snakeCase(string text) => throw null; + public bool some(ServiceStack.Script.ScriptScopeContext scope, System.Collections.IList list, ServiceStack.Script.JsArrowFunctionExpression expression) => throw null; + public System.Collections.Generic.List sort(System.Collections.Generic.List list) => throw null; + public string space() => throw null; + public string spaces(int count) => throw null; + public object splice(System.Collections.IList list, int removeAt) => throw null; + public System.Collections.Generic.List splice(System.Collections.IList list, int removeAt, int deleteCount, System.Collections.Generic.List insertItems) => throw null; + public System.Collections.Generic.List splice(System.Collections.IList list, int removeAt, int deleteCount) => throw null; + public string[] split(string stringList, object delimiter) => throw null; + public string[] split(string stringList) => throw null; + public string splitCase(string text) => throw null; + public static string[] splitLines(string contents) => throw null; + public string[] splitOnFirst(string text, string needle) => throw null; + public string[] splitOnLast(string text, string needle) => throw null; + public System.Collections.Generic.List splitStringList(System.Collections.IEnumerable strings) => throw null; + public double sqrt(double value) => throw null; + public bool startsWith(string text, string needle) => throw null; + public bool startsWithPathInfo(ServiceStack.Script.ScriptScopeContext scope, string pathInfo) => throw null; + public System.Reflection.FieldInfo[] staticFieldTypes(object o) => throw null; + public System.Collections.Generic.List staticFields(object o) => throw null; + public System.Reflection.PropertyInfo[] staticPropTypes(object o) => throw null; + public System.Collections.Generic.List staticProps(object o) => throw null; + public System.Collections.Generic.List step(System.Collections.IEnumerable target, object scopeOptions) => throw null; + public object sub(object lhs, object rhs) => throw null; + public string substring(string text, int startIndex, int length) => throw null; + public string substring(string text, int startIndex) => throw null; + public string substringWithElipsis(string text, int startIndex, int length) => throw null; + public string substringWithElipsis(string text, int length) => throw null; + public string substringWithEllipsis(string text, int startIndex, int length) => throw null; + public string substringWithEllipsis(string text, int length) => throw null; + public object subtract(object lhs, object rhs) => throw null; + public object sum(ServiceStack.Script.ScriptScopeContext scope, object target, object expression, object scopeOptions) => throw null; + public object sum(ServiceStack.Script.ScriptScopeContext scope, object target, object expression) => throw null; + public object sum(ServiceStack.Script.ScriptScopeContext scope, object target) => throw null; + public object sync(object value) => throw null; + public System.Collections.Generic.IEnumerable take(ServiceStack.Script.ScriptScopeContext scope, System.Collections.Generic.IEnumerable original, object countOrBinding) => throw null; + public System.Collections.Generic.IEnumerable takeWhile(ServiceStack.Script.ScriptScopeContext scope, object target, object expression, object scopeOptions) => throw null; + public System.Collections.Generic.IEnumerable takeWhile(ServiceStack.Script.ScriptScopeContext scope, object target, object expression) => throw null; + public double tan(double value) => throw null; + public double tanh(double value) => throw null; + public ServiceStack.IRawString textDump(object target, System.Collections.Generic.Dictionary options) => throw null; + public ServiceStack.IRawString textDump(object target) => throw null; + public ServiceStack.IRawString textList(System.Collections.IEnumerable target, System.Collections.Generic.Dictionary options) => throw null; + public ServiceStack.IRawString textList(System.Collections.IEnumerable target) => throw null; + public string textStyle(string text, string headerStyle) => throw null; + public System.Collections.Generic.IEnumerable thenBy(ServiceStack.Script.ScriptScopeContext scope, object target, object expression, object scopeOptions) => throw null; + public System.Collections.Generic.IEnumerable thenBy(ServiceStack.Script.ScriptScopeContext scope, object target, object expression) => throw null; + public System.Collections.Generic.IEnumerable thenByDescending(ServiceStack.Script.ScriptScopeContext scope, object target, object expression, object scopeOptions) => throw null; + public System.Collections.Generic.IEnumerable thenByDescending(ServiceStack.Script.ScriptScopeContext scope, object target, object expression) => throw null; + public static System.Collections.Generic.IEnumerable thenByInternal(string filterName, ServiceStack.Script.ScriptScopeContext scope, object target, object expression, object scopeOptions) => throw null; + public object @throw(ServiceStack.Script.ScriptScopeContext scope, string message, object options) => throw null; + public object @throw(ServiceStack.Script.ScriptScopeContext scope, string message) => throw null; + public object throwArgumentException(ServiceStack.Script.ScriptScopeContext scope, string message, string options) => throw null; + public object throwArgumentException(ServiceStack.Script.ScriptScopeContext scope, string message) => throw null; + public object throwArgumentNullException(ServiceStack.Script.ScriptScopeContext scope, string paramName, object options) => throw null; + public object throwArgumentNullException(ServiceStack.Script.ScriptScopeContext scope, string paramName) => throw null; + public object throwArgumentNullExceptionIf(ServiceStack.Script.ScriptScopeContext scope, string paramName, bool test, object options) => throw null; + public object throwArgumentNullExceptionIf(ServiceStack.Script.ScriptScopeContext scope, string paramName, bool test) => throw null; + public System.Threading.Tasks.Task throwAsync(ServiceStack.Script.ScriptScopeContext scope, string message, object options) => throw null; + public System.Threading.Tasks.Task throwAsync(ServiceStack.Script.ScriptScopeContext scope, string message) => throw null; + public object throwFileNotFoundException(ServiceStack.Script.ScriptScopeContext scope, string message, object options) => throw null; + public object throwFileNotFoundException(ServiceStack.Script.ScriptScopeContext scope, string message) => throw null; + public object throwIf(ServiceStack.Script.ScriptScopeContext scope, string message, bool test, object options) => throw null; + public object throwIf(ServiceStack.Script.ScriptScopeContext scope, string message, bool test) => throw null; + public object throwNotImplementedException(ServiceStack.Script.ScriptScopeContext scope, string message, object options) => throw null; + public object throwNotImplementedException(ServiceStack.Script.ScriptScopeContext scope, string message) => throw null; + public object throwNotSupportedException(ServiceStack.Script.ScriptScopeContext scope, string message, object options) => throw null; + public object throwNotSupportedException(ServiceStack.Script.ScriptScopeContext scope, string message) => throw null; + public object throwOptimisticConcurrencyException(ServiceStack.Script.ScriptScopeContext scope, string message, object options) => throw null; + public object throwOptimisticConcurrencyException(ServiceStack.Script.ScriptScopeContext scope, string message) => throw null; + public object throwUnauthorizedAccessException(ServiceStack.Script.ScriptScopeContext scope, string message, object options) => throw null; + public object throwUnauthorizedAccessException(ServiceStack.Script.ScriptScopeContext scope, string message) => throw null; + public System.TimeSpan time(int hours, int mins, int secs) => throw null; + public System.TimeSpan time(int days, int hours, int mins, int secs) => throw null; + public string timeFormat(System.TimeSpan timeValue, string format) => throw null; + public string timeFormat(System.TimeSpan timeValue) => throw null; + public System.Collections.Generic.List times(int count) => throw null; + public string titleCase(string text) => throw null; + public System.Threading.Tasks.Task to(ServiceStack.Script.ScriptScopeContext scope, object argExpr) => throw null; + public ServiceStack.Script.IgnoreResult to(ServiceStack.Script.ScriptScopeContext scope, object value, object argExpr) => throw null; + public object[] toArray(System.Collections.IEnumerable target) => throw null; + public bool toBool(object target) => throw null; + public System.Byte toByte(object target) => throw null; + public System.Char toChar(object target) => throw null; + public int toCharCode(object target) => throw null; + public System.Char[] toChars(object target) => throw null; + public System.Collections.Generic.Dictionary toCoercedDictionary(object target) => throw null; + public System.DateTime toDateTime(object target) => throw null; + public System.Decimal toDecimal(object target) => throw null; + public System.Collections.Generic.Dictionary toDictionary(ServiceStack.Script.ScriptScopeContext scope, object target, object expression, object scopeOptions) => throw null; + public System.Collections.Generic.Dictionary toDictionary(ServiceStack.Script.ScriptScopeContext scope, object target, object expression) => throw null; + public double toDouble(object target) => throw null; + public float toFloat(object target) => throw null; + public System.Threading.Tasks.Task toGlobal(ServiceStack.Script.ScriptScopeContext scope, object argExpr) => throw null; + public ServiceStack.Script.IgnoreResult toGlobal(ServiceStack.Script.ScriptScopeContext scope, object value, object argExpr) => throw null; + public int toInt(object target) => throw null; + public System.Collections.Generic.List toKeys(object target) => throw null; + public System.Collections.Generic.List toList(System.Collections.IEnumerable target) => throw null; + public System.Int64 toLong(object target) => throw null; + public System.Collections.Generic.Dictionary toObjectDictionary(object target) => throw null; + public string toQueryString(object keyValuePairs) => throw null; + public string toString(object target) => throw null; + public System.Collections.Generic.Dictionary toStringDictionary(System.Collections.IDictionary map) => throw null; + public System.Collections.Generic.List toStringList(System.Collections.IEnumerable target) => throw null; + public System.TimeSpan toTimeSpan(object target) => throw null; + public System.Byte[] toUtf8Bytes(string target) => throw null; + public System.Collections.Generic.List toValues(object target) => throw null; + public System.Collections.Generic.List toVarNames(System.Collections.IEnumerable names) => throw null; + public string trim(string text, System.Char c) => throw null; + public string trim(string text) => throw null; + public string trimEnd(string text, System.Char c) => throw null; + public string trimEnd(string text) => throw null; + public string trimStart(string text, System.Char c) => throw null; + public string trimStart(string text) => throw null; + public double truncate(double value) => throw null; + public object truthy(object test, object returnIfTruthy) => throw null; + public ServiceStack.IRawString typeFullName(object target) => throw null; + public ServiceStack.IRawString typeName(object target) => throw null; + public System.Collections.Generic.IEnumerable union(System.Collections.Generic.IEnumerable target, System.Collections.Generic.IEnumerable items) => throw null; + public object unless(object returnTarget, object test) => throw null; + public object unlessElse(object returnTarget, object test, object defaultValue) => throw null; + public object unshift(System.Collections.IList list, object item) => throw null; + public object unwrap(object value) => throw null; + public string upper(string text) => throw null; + public string urlDecode(string value) => throw null; + public string urlEncode(string value, bool upperCase) => throw null; + public string urlEncode(string value) => throw null; + public object use(object ignoreTarget, object useValue) => throw null; + public object useFmt(object ignoreTarget, string format, object arg1, object arg2, object arg3) => throw null; + public object useFmt(object ignoreTarget, string format, object arg1, object arg2) => throw null; + public object useFmt(object ignoreTarget, string format, object arg) => throw null; + public object useFormat(object ignoreTarget, object arg, string fmt) => throw null; + public object useIf(object useValue, object test) => throw null; + public System.DateTime utcNow() => throw null; + public System.DateTimeOffset utcNowOffset() => throw null; + public System.Collections.ICollection values(object target) => throw null; + public object when(object returnTarget, object test) => throw null; + public System.Collections.Generic.IEnumerable where(ServiceStack.Script.ScriptScopeContext scope, object target, object expression, object scopeOptions) => throw null; + public System.Collections.Generic.IEnumerable where(ServiceStack.Script.ScriptScopeContext scope, object target, object expression) => throw null; + public object withKeys(System.Collections.Generic.IDictionary target, object keys) => throw null; + public object withoutEmptyValues(object target) => throw null; + public object withoutKeys(System.Collections.Generic.IDictionary target, object keys) => throw null; + public object withoutNullValues(object target) => throw null; + public ServiceStack.Script.IgnoreResult write(ServiceStack.Script.ScriptScopeContext scope, object value) => throw null; + public ServiceStack.Script.IgnoreResult writeln(ServiceStack.Script.ScriptScopeContext scope, object value) => throw null; + public System.Threading.Tasks.Task xml(ServiceStack.Script.ScriptScopeContext scope, object items) => throw null; + public System.Collections.Generic.List zip(ServiceStack.Script.ScriptScopeContext scope, System.Collections.IEnumerable original, object itemsOrBinding) => throw null; + } + + // Generated from `ServiceStack.Script.DefnScriptBlock` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class DefnScriptBlock : ServiceStack.Script.ScriptBlock + { + public override ServiceStack.Script.ScriptLanguage Body { get => throw null; } + public DefnScriptBlock() => throw null; + public override string Name { get => throw null; } + public override System.Threading.Tasks.Task WriteAsync(ServiceStack.Script.ScriptScopeContext scope, ServiceStack.Script.PageBlockFragment block, System.Threading.CancellationToken token) => throw null; + } + + // Generated from `ServiceStack.Script.DirectoryScripts` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class DirectoryScripts : ServiceStack.Script.IOScript + { + public ServiceStack.Script.IgnoreResult Copy(string from, string to) => throw null; + public static void CopyAllTo(string src, string dst, string[] excludePaths = default(string[])) => throw null; + public ServiceStack.Script.IgnoreResult CreateDirectory(string path) => throw null; + public ServiceStack.Script.IgnoreResult Delete(string path) => throw null; + public DirectoryScripts() => throw null; + public bool Exists(string path) => throw null; + public string GetCurrentDirectory() => throw null; + public string[] GetDirectories(string path) => throw null; + public string GetDirectoryRoot(string path) => throw null; + public string[] GetFileSystemEntries(string path) => throw null; + public string[] GetFiles(string path) => throw null; + public string[] GetLogicalDrives() => throw null; + public System.IO.DirectoryInfo GetParent(string path) => throw null; + public ServiceStack.Script.IgnoreResult Move(string from, string to) => throw null; + } + + // Generated from `ServiceStack.Script.EachScriptBlock` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class EachScriptBlock : ServiceStack.Script.ScriptBlock + { + public EachScriptBlock() => throw null; + public override string Name { get => throw null; } + public override System.Threading.Tasks.Task WriteAsync(ServiceStack.Script.ScriptScopeContext scope, ServiceStack.Script.PageBlockFragment block, System.Threading.CancellationToken token) => throw null; + } + + // Generated from `ServiceStack.Script.EvalScriptBlock` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class EvalScriptBlock : ServiceStack.Script.ScriptBlock + { + public override ServiceStack.Script.ScriptLanguage Body { get => throw null; } + public EvalScriptBlock() => throw null; + public override string Name { get => throw null; } + public override System.Threading.Tasks.Task WriteAsync(ServiceStack.Script.ScriptScopeContext scope, ServiceStack.Script.PageBlockFragment block, System.Threading.CancellationToken token) => throw null; + } + + // Generated from `ServiceStack.Script.FileScripts` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class FileScripts : ServiceStack.Script.IOScript + { + public ServiceStack.Script.IgnoreResult AppendAllLines(string path, string[] lines) => throw null; + public ServiceStack.Script.IgnoreResult AppendAllText(string path, string text) => throw null; + public ServiceStack.Script.IgnoreResult Copy(string from, string to) => throw null; + public ServiceStack.Script.IgnoreResult Create(string path) => throw null; + public ServiceStack.Script.IgnoreResult Decrypt(string path) => throw null; + public ServiceStack.Script.IgnoreResult Delete(string path) => throw null; + public ServiceStack.Script.IgnoreResult Encrypt(string path) => throw null; + public bool Exists(string path) => throw null; + public FileScripts() => throw null; + public ServiceStack.Script.IgnoreResult Move(string from, string to) => throw null; + public System.Byte[] ReadAllBytes(string path) => throw null; + public string[] ReadAllLines(string path) => throw null; + public string ReadAllText(string path) => throw null; + public ServiceStack.Script.IgnoreResult Replace(string from, string to, string backup) => throw null; + public ServiceStack.Script.IgnoreResult WriteAllBytes(string path, System.Byte[] bytes) => throw null; + public ServiceStack.Script.IgnoreResult WriteAllLines(string path, string[] lines) => throw null; + public ServiceStack.Script.IgnoreResult WriteAllText(string path, string text) => throw null; + } + + // Generated from `ServiceStack.Script.FunctionScriptBlock` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class FunctionScriptBlock : ServiceStack.Script.ScriptBlock + { + public override ServiceStack.Script.ScriptLanguage Body { get => throw null; } + public FunctionScriptBlock() => throw null; + public override string Name { get => throw null; } + public override System.Threading.Tasks.Task WriteAsync(ServiceStack.Script.ScriptScopeContext scope, ServiceStack.Script.PageBlockFragment block, System.Threading.CancellationToken token) => throw null; + } + + // Generated from `ServiceStack.Script.GitHubPlugin` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class GitHubPlugin : ServiceStack.Script.IScriptPlugin + { + public GitHubPlugin() => throw null; + public void Register(ServiceStack.Script.ScriptContext context) => throw null; + } + + // Generated from `ServiceStack.Script.GitHubScripts` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class GitHubScripts : ServiceStack.Script.ScriptMethods + { + public GitHubScripts() => throw null; + public ServiceStack.IO.GistVirtualFiles gistVirtualFiles(string gistId, string accessToken) => throw null; + public ServiceStack.IO.GistVirtualFiles gistVirtualFiles(string gistId) => throw null; + public ServiceStack.Script.IgnoreResult githuDeleteGistFiles(ServiceStack.GitHubGateway gateway, string gistId, string filePath) => throw null; + public ServiceStack.Script.IgnoreResult githuDeleteGistFiles(ServiceStack.GitHubGateway gateway, string gistId, System.Collections.Generic.IEnumerable filePaths) => throw null; + public ServiceStack.GithubGist githubCreateGist(ServiceStack.GitHubGateway gateway, string description, System.Collections.Generic.Dictionary files) => throw null; + public ServiceStack.GithubGist githubCreatePrivateGist(ServiceStack.GitHubGateway gateway, string description, System.Collections.Generic.Dictionary files) => throw null; + public ServiceStack.GitHubGateway githubGateway(string accessToken) => throw null; + public ServiceStack.GitHubGateway githubGateway() => throw null; + public ServiceStack.GithubGist githubGist(ServiceStack.GitHubGateway gateway, string gistId) => throw null; + public System.Collections.Generic.List githubOrgRepos(ServiceStack.GitHubGateway gateway, string githubOrg) => throw null; + public System.Threading.Tasks.Task githubSourceRepos(ServiceStack.GitHubGateway gateway, string orgName) => throw null; + public string githubSourceZipUrl(ServiceStack.GitHubGateway gateway, string orgNames, string name) => throw null; + public System.Threading.Tasks.Task githubUserAndOrgRepos(ServiceStack.GitHubGateway gateway, string githubOrgOrUser) => throw null; + public System.Collections.Generic.List githubUserRepos(ServiceStack.GitHubGateway gateway, string githubUser) => throw null; + public ServiceStack.Script.IgnoreResult githubWriteGistFile(ServiceStack.GitHubGateway gateway, string gistId, string filePath, string contents) => throw null; + public ServiceStack.Script.IgnoreResult githubWriteGistFiles(ServiceStack.GitHubGateway gateway, string gistId, System.Collections.Generic.Dictionary gistFiles) => throw null; + } + + // Generated from `ServiceStack.Script.HtmlPageFormat` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class HtmlPageFormat : ServiceStack.Script.PageFormat + { + public static System.Threading.Tasks.Task HtmlEncodeTransformer(System.IO.Stream stream) => throw null; + public static string HtmlEncodeValue(object value) => throw null; + public virtual object HtmlExpressionException(ServiceStack.Script.PageResult result, System.Exception ex) => throw null; + public HtmlPageFormat() => throw null; + public ServiceStack.Script.SharpPage HtmlResolveLayout(ServiceStack.Script.SharpPage page) => throw null; + } + + // Generated from `ServiceStack.Script.HtmlScriptBlocks` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class HtmlScriptBlocks : ServiceStack.Script.IScriptPlugin + { + public HtmlScriptBlocks() => throw null; + public void Register(ServiceStack.Script.ScriptContext context) => throw null; + } + + // Generated from `ServiceStack.Script.HtmlScripts` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class HtmlScripts : ServiceStack.Script.ScriptMethods, ServiceStack.Script.IConfigureScriptContext + { + public void Configure(ServiceStack.Script.ScriptContext context) => throw null; + public static System.Collections.Generic.List EvaluateWhenSkippingFilterExecution; + public static string HtmlDump(object target, ServiceStack.HtmlDumpOptions options) => throw null; + public static string HtmlList(System.Collections.IEnumerable items, ServiceStack.HtmlDumpOptions options) => throw null; + public HtmlScripts() => throw null; + public static System.Collections.Generic.HashSet VoidElements { get => throw null; } + public ServiceStack.IRawString htmlA(string innerHtml, System.Collections.Generic.Dictionary attrs) => throw null; + public ServiceStack.IRawString htmlA(System.Collections.Generic.Dictionary attrs) => throw null; + public string htmlAddClass(object target, string name) => throw null; + public ServiceStack.IRawString htmlAttrs(object target) => throw null; + public string htmlAttrsList(System.Collections.Generic.Dictionary attrs) => throw null; + public ServiceStack.IRawString htmlB(string text) => throw null; + public ServiceStack.IRawString htmlB(string innerHtml, System.Collections.Generic.Dictionary attrs) => throw null; + public ServiceStack.IRawString htmlButton(string innerHtml, System.Collections.Generic.Dictionary attrs) => throw null; + public ServiceStack.IRawString htmlButton(System.Collections.Generic.Dictionary attrs) => throw null; + public ServiceStack.IRawString htmlClass(object target) => throw null; + public string htmlClassList(object target) => throw null; + public ServiceStack.IRawString htmlDiv(string innerHtml, System.Collections.Generic.Dictionary attrs) => throw null; + public ServiceStack.IRawString htmlDiv(System.Collections.Generic.Dictionary attrs) => throw null; + public ServiceStack.IRawString htmlDump(object target, System.Collections.Generic.Dictionary options) => throw null; + public ServiceStack.IRawString htmlDump(object target) => throw null; + public ServiceStack.IRawString htmlEm(string text) => throw null; + public ServiceStack.IRawString htmlEm(string innerHtml, System.Collections.Generic.Dictionary attrs) => throw null; + public ServiceStack.IRawString htmlError(ServiceStack.Script.ScriptScopeContext scope, System.Exception ex, object options) => throw null; + public ServiceStack.IRawString htmlError(ServiceStack.Script.ScriptScopeContext scope, System.Exception ex) => throw null; + public ServiceStack.IRawString htmlError(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public ServiceStack.IRawString htmlErrorDebug(ServiceStack.Script.ScriptScopeContext scope, object ex) => throw null; + public ServiceStack.IRawString htmlErrorDebug(ServiceStack.Script.ScriptScopeContext scope, System.Exception ex, object options) => throw null; + public ServiceStack.IRawString htmlErrorDebug(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public ServiceStack.IRawString htmlErrorMessage(System.Exception ex, object options) => throw null; + public ServiceStack.IRawString htmlErrorMessage(System.Exception ex) => throw null; + public ServiceStack.IRawString htmlErrorMessage(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public ServiceStack.IRawString htmlForm(string innerHtml, System.Collections.Generic.Dictionary attrs) => throw null; + public ServiceStack.IRawString htmlForm(System.Collections.Generic.Dictionary attrs) => throw null; + public ServiceStack.IRawString htmlFormat(string htmlWithFormat, string arg) => throw null; + public ServiceStack.IRawString htmlH1(string innerHtml, System.Collections.Generic.Dictionary attrs) => throw null; + public ServiceStack.IRawString htmlH1(System.Collections.Generic.Dictionary attrs) => throw null; + public ServiceStack.IRawString htmlH2(string innerHtml, System.Collections.Generic.Dictionary attrs) => throw null; + public ServiceStack.IRawString htmlH2(System.Collections.Generic.Dictionary attrs) => throw null; + public ServiceStack.IRawString htmlH3(string innerHtml, System.Collections.Generic.Dictionary attrs) => throw null; + public ServiceStack.IRawString htmlH3(System.Collections.Generic.Dictionary attrs) => throw null; + public ServiceStack.IRawString htmlH4(string innerHtml, System.Collections.Generic.Dictionary attrs) => throw null; + public ServiceStack.IRawString htmlH4(System.Collections.Generic.Dictionary attrs) => throw null; + public ServiceStack.IRawString htmlH5(string innerHtml, System.Collections.Generic.Dictionary attrs) => throw null; + public ServiceStack.IRawString htmlH5(System.Collections.Generic.Dictionary attrs) => throw null; + public ServiceStack.IRawString htmlH6(string innerHtml, System.Collections.Generic.Dictionary attrs) => throw null; + public ServiceStack.IRawString htmlH6(System.Collections.Generic.Dictionary attrs) => throw null; + public bool htmlHasClass(object target, string name) => throw null; + public ServiceStack.IRawString htmlHiddenInputs(System.Collections.Generic.Dictionary inputValues) => throw null; + public ServiceStack.IRawString htmlImage(string src, System.Collections.Generic.Dictionary attrs) => throw null; + public ServiceStack.IRawString htmlImage(string src) => throw null; + public ServiceStack.IRawString htmlImg(string innerHtml, System.Collections.Generic.Dictionary attrs) => throw null; + public ServiceStack.IRawString htmlImg(System.Collections.Generic.Dictionary attrs) => throw null; + public ServiceStack.IRawString htmlInput(string innerHtml, System.Collections.Generic.Dictionary attrs) => throw null; + public ServiceStack.IRawString htmlInput(System.Collections.Generic.Dictionary attrs) => throw null; + public ServiceStack.IRawString htmlLabel(string innerHtml, System.Collections.Generic.Dictionary attrs) => throw null; + public ServiceStack.IRawString htmlLabel(System.Collections.Generic.Dictionary attrs) => throw null; + public ServiceStack.IRawString htmlLi(string innerHtml, System.Collections.Generic.Dictionary attrs) => throw null; + public ServiceStack.IRawString htmlLi(System.Collections.Generic.Dictionary attrs) => throw null; + public ServiceStack.IRawString htmlLink(string href, System.Collections.Generic.Dictionary attrs) => throw null; + public ServiceStack.IRawString htmlLink(string href) => throw null; + public ServiceStack.IRawString htmlList(System.Collections.IEnumerable target, System.Collections.Generic.Dictionary options) => throw null; + public ServiceStack.IRawString htmlList(System.Collections.IEnumerable target) => throw null; + public ServiceStack.IRawString htmlOl(string innerHtml, System.Collections.Generic.Dictionary attrs) => throw null; + public ServiceStack.IRawString htmlOl(System.Collections.Generic.Dictionary attrs) => throw null; + public ServiceStack.IRawString htmlOption(string text) => throw null; + public ServiceStack.IRawString htmlOption(string innerHtml, System.Collections.Generic.Dictionary attrs) => throw null; + public ServiceStack.IRawString htmlOptions(object values, object options) => throw null; + public ServiceStack.IRawString htmlOptions(object values) => throw null; + public ServiceStack.IRawString htmlSelect(string innerHtml, System.Collections.Generic.Dictionary attrs) => throw null; + public ServiceStack.IRawString htmlSelect(System.Collections.Generic.Dictionary attrs) => throw null; + public ServiceStack.IRawString htmlSpan(string innerHtml, System.Collections.Generic.Dictionary attrs) => throw null; + public ServiceStack.IRawString htmlSpan(System.Collections.Generic.Dictionary attrs) => throw null; + public ServiceStack.IRawString htmlTable(string innerHtml, System.Collections.Generic.Dictionary attrs) => throw null; + public ServiceStack.IRawString htmlTable(System.Collections.Generic.Dictionary attrs) => throw null; + public ServiceStack.IRawString htmlTag(string innerHtml, System.Collections.Generic.Dictionary attrs, string tag) => throw null; + public ServiceStack.IRawString htmlTag(System.Collections.Generic.Dictionary attrs, string tag) => throw null; + public ServiceStack.IRawString htmlTd(string innerHtml, System.Collections.Generic.Dictionary attrs) => throw null; + public ServiceStack.IRawString htmlTd(System.Collections.Generic.Dictionary attrs) => throw null; + public ServiceStack.IRawString htmlTextArea(string innerHtml, System.Collections.Generic.Dictionary attrs) => throw null; + public ServiceStack.IRawString htmlTextArea(System.Collections.Generic.Dictionary attrs) => throw null; + public ServiceStack.IRawString htmlTh(string innerHtml, System.Collections.Generic.Dictionary attrs) => throw null; + public ServiceStack.IRawString htmlTh(System.Collections.Generic.Dictionary attrs) => throw null; + public ServiceStack.IRawString htmlTr(string innerHtml, System.Collections.Generic.Dictionary attrs) => throw null; + public ServiceStack.IRawString htmlTr(System.Collections.Generic.Dictionary attrs) => throw null; + public ServiceStack.IRawString htmlUl(string innerHtml, System.Collections.Generic.Dictionary attrs) => throw null; + public ServiceStack.IRawString htmlUl(System.Collections.Generic.Dictionary attrs) => throw null; + } + + // Generated from `ServiceStack.Script.IConfigurePageResult` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IConfigurePageResult + { + void Configure(ServiceStack.Script.PageResult pageResult); + } + + // Generated from `ServiceStack.Script.IConfigureScriptContext` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IConfigureScriptContext + { + void Configure(ServiceStack.Script.ScriptContext context); + } + + // Generated from `ServiceStack.Script.IOScript` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IOScript + { + ServiceStack.Script.IgnoreResult Copy(string from, string to); + ServiceStack.Script.IgnoreResult Delete(string path); + bool Exists(string target); + ServiceStack.Script.IgnoreResult Move(string from, string to); + } + + // Generated from `ServiceStack.Script.IPageResult` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IPageResult + { + } + + // Generated from `ServiceStack.Script.IResultInstruction` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IResultInstruction + { + } + + // Generated from `ServiceStack.Script.IScriptPlugin` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IScriptPlugin + { + void Register(ServiceStack.Script.ScriptContext context); + } + + // Generated from `ServiceStack.Script.IScriptPluginAfter` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IScriptPluginAfter + { + void AfterPluginsLoaded(ServiceStack.Script.ScriptContext context); + } + + // Generated from `ServiceStack.Script.IScriptPluginBefore` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IScriptPluginBefore + { + void BeforePluginsLoaded(ServiceStack.Script.ScriptContext context); + } + + // Generated from `ServiceStack.Script.ISharpPages` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface ISharpPages + { + ServiceStack.Script.SharpPage AddPage(string virtualPath, ServiceStack.IO.IVirtualFile file); + ServiceStack.Script.SharpCodePage GetCodePage(string virtualPath); + System.DateTime GetLastModified(ServiceStack.Script.SharpPage page); + ServiceStack.Script.SharpPage GetPage(string virtualPath); + ServiceStack.Script.SharpPage OneTimePage(string contents, string ext, System.Action init); + ServiceStack.Script.SharpPage OneTimePage(string contents, string ext); + ServiceStack.Script.SharpPage ResolveLayoutPage(ServiceStack.Script.SharpPage page, string layout); + ServiceStack.Script.SharpPage ResolveLayoutPage(ServiceStack.Script.SharpCodePage page, string layout); + ServiceStack.Script.SharpPage TryGetPage(string path); + } + + // Generated from `ServiceStack.Script.IfScriptBlock` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class IfScriptBlock : ServiceStack.Script.ScriptBlock + { + public IfScriptBlock() => throw null; + public override string Name { get => throw null; } + public override System.Threading.Tasks.Task WriteAsync(ServiceStack.Script.ScriptScopeContext scope, ServiceStack.Script.PageBlockFragment block, System.Threading.CancellationToken token) => throw null; + } + + // Generated from `ServiceStack.Script.IgnoreResult` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class IgnoreResult : ServiceStack.Script.IResultInstruction + { + public static ServiceStack.Script.IgnoreResult Value; + } + + // Generated from `ServiceStack.Script.InvokerType` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public enum InvokerType + { + ContextBlock, + ContextFilter, + Filter, + } + + // Generated from `ServiceStack.Script.JsAddition` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class JsAddition : ServiceStack.Script.JsBinaryOperator + { + public override object Evaluate(object lhs, object rhs) => throw null; + public static ServiceStack.Script.JsAddition Operator; + public override string Token { get => throw null; } + } + + // Generated from `ServiceStack.Script.JsAnd` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class JsAnd : ServiceStack.Script.JsLogicOperator + { + public static ServiceStack.Script.JsAnd Operator; + public override bool Test(object lhs, object rhs) => throw null; + public override string Token { get => throw null; } + } + + // Generated from `ServiceStack.Script.JsArrayExpression` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class JsArrayExpression : ServiceStack.Script.JsExpression + { + public ServiceStack.Script.JsToken[] Elements { get => throw null; } + public override bool Equals(object obj) => throw null; + protected bool Equals(ServiceStack.Script.JsArrayExpression other) => throw null; + public override object Evaluate(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public override int GetHashCode() => throw null; + public JsArrayExpression(params ServiceStack.Script.JsToken[] elements) => throw null; + public JsArrayExpression(System.Collections.Generic.IEnumerable elements) => throw null; + public override System.Collections.Generic.Dictionary ToJsAst() => throw null; + public override string ToRawString() => throw null; + } + + // Generated from `ServiceStack.Script.JsArrowFunctionExpression` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class JsArrowFunctionExpression : ServiceStack.Script.JsExpression + { + public ServiceStack.Script.JsToken Body { get => throw null; } + public override bool Equals(object obj) => throw null; + protected bool Equals(ServiceStack.Script.JsArrowFunctionExpression other) => throw null; + public override object Evaluate(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public override int GetHashCode() => throw null; + public object Invoke(params object[] @params) => throw null; + public object Invoke(ServiceStack.Script.ScriptScopeContext scope, params object[] @params) => throw null; + public JsArrowFunctionExpression(ServiceStack.Script.JsIdentifier[] @params, ServiceStack.Script.JsToken body) => throw null; + public JsArrowFunctionExpression(ServiceStack.Script.JsIdentifier param, ServiceStack.Script.JsToken body) => throw null; + public ServiceStack.Script.JsIdentifier[] Params { get => throw null; } + public override System.Collections.Generic.Dictionary ToJsAst() => throw null; + public override string ToRawString() => throw null; + } + + // Generated from `ServiceStack.Script.JsAssignment` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class JsAssignment : ServiceStack.Script.JsBinaryOperator + { + public override object Evaluate(object lhs, object rhs) => throw null; + public static ServiceStack.Script.JsAssignment Operator; + public override string Token { get => throw null; } + } + + // Generated from `ServiceStack.Script.JsAssignmentExpression` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class JsAssignmentExpression : ServiceStack.Script.JsExpression + { + public override bool Equals(object obj) => throw null; + protected bool Equals(ServiceStack.Script.JsAssignmentExpression other) => throw null; + public override object Evaluate(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public override int GetHashCode() => throw null; + public JsAssignmentExpression(ServiceStack.Script.JsToken left, ServiceStack.Script.JsAssignment @operator, ServiceStack.Script.JsToken right) => throw null; + public ServiceStack.Script.JsToken Left { get => throw null; set => throw null; } + public ServiceStack.Script.JsAssignment Operator { get => throw null; set => throw null; } + public ServiceStack.Script.JsToken Right { get => throw null; set => throw null; } + public override System.Collections.Generic.Dictionary ToJsAst() => throw null; + public override string ToRawString() => throw null; + } + + // Generated from `ServiceStack.Script.JsBinaryExpression` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class JsBinaryExpression : ServiceStack.Script.JsExpression + { + public override bool Equals(object obj) => throw null; + protected bool Equals(ServiceStack.Script.JsBinaryExpression other) => throw null; + public override object Evaluate(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public override int GetHashCode() => throw null; + public JsBinaryExpression(ServiceStack.Script.JsToken left, ServiceStack.Script.JsBinaryOperator @operator, ServiceStack.Script.JsToken right) => throw null; + public ServiceStack.Script.JsToken Left { get => throw null; set => throw null; } + public ServiceStack.Script.JsBinaryOperator Operator { get => throw null; set => throw null; } + public ServiceStack.Script.JsToken Right { get => throw null; set => throw null; } + public override System.Collections.Generic.Dictionary ToJsAst() => throw null; + public override string ToRawString() => throw null; + } + + // Generated from `ServiceStack.Script.JsBinaryOperator` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public abstract class JsBinaryOperator : ServiceStack.Script.JsOperator + { + public abstract object Evaluate(object lhs, object rhs); + protected JsBinaryOperator() => throw null; + } + + // Generated from `ServiceStack.Script.JsBitwiseAnd` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class JsBitwiseAnd : ServiceStack.Script.JsBinaryOperator + { + public override object Evaluate(object lhs, object rhs) => throw null; + public static ServiceStack.Script.JsBitwiseAnd Operator; + public override string Token { get => throw null; } + } + + // Generated from `ServiceStack.Script.JsBitwiseLeftShift` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class JsBitwiseLeftShift : ServiceStack.Script.JsBinaryOperator + { + public override object Evaluate(object lhs, object rhs) => throw null; + public static ServiceStack.Script.JsBitwiseLeftShift Operator; + public override string Token { get => throw null; } + } + + // Generated from `ServiceStack.Script.JsBitwiseNot` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class JsBitwiseNot : ServiceStack.Script.JsUnaryOperator + { + public override object Evaluate(object target) => throw null; + public static ServiceStack.Script.JsBitwiseNot Operator; + public override string Token { get => throw null; } + } + + // Generated from `ServiceStack.Script.JsBitwiseOr` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class JsBitwiseOr : ServiceStack.Script.JsBinaryOperator + { + public override object Evaluate(object lhs, object rhs) => throw null; + public static ServiceStack.Script.JsBitwiseOr Operator; + public override string Token { get => throw null; } + } + + // Generated from `ServiceStack.Script.JsBitwiseRightShift` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class JsBitwiseRightShift : ServiceStack.Script.JsBinaryOperator + { + public override object Evaluate(object lhs, object rhs) => throw null; + public static ServiceStack.Script.JsBitwiseRightShift Operator; + public override string Token { get => throw null; } + } + + // Generated from `ServiceStack.Script.JsBitwiseXOr` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class JsBitwiseXOr : ServiceStack.Script.JsBinaryOperator + { + public override object Evaluate(object lhs, object rhs) => throw null; + public static ServiceStack.Script.JsBitwiseXOr Operator; + public override string Token { get => throw null; } + } + + // Generated from `ServiceStack.Script.JsBlockStatement` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class JsBlockStatement : ServiceStack.Script.JsStatement + { + public override bool Equals(object obj) => throw null; + protected bool Equals(ServiceStack.Script.JsBlockStatement other) => throw null; + public override int GetHashCode() => throw null; + public JsBlockStatement(ServiceStack.Script.JsStatement[] statements) => throw null; + public JsBlockStatement(ServiceStack.Script.JsStatement statement) => throw null; + public ServiceStack.Script.JsStatement[] Statements { get => throw null; } + } + + // Generated from `ServiceStack.Script.JsCallExpression` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class JsCallExpression : ServiceStack.Script.JsExpression + { + public ServiceStack.Script.JsToken[] Arguments { get => throw null; } + public ServiceStack.Script.JsToken Callee { get => throw null; } + public override bool Equals(object obj) => throw null; + protected bool Equals(ServiceStack.Script.JsCallExpression other) => throw null; + public override object Evaluate(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public static System.Collections.Generic.List EvaluateArgumentValues(ServiceStack.Script.ScriptScopeContext scope, ServiceStack.Script.JsToken[] args) => throw null; + public string GetDisplayName() => throw null; + public override int GetHashCode() => throw null; + public static object InvokeDelegate(System.Delegate fn, object target, bool isMemberExpr, System.Collections.Generic.List fnArgValues) => throw null; + public JsCallExpression(ServiceStack.Script.JsToken callee, params ServiceStack.Script.JsToken[] arguments) => throw null; + public string Name { get => throw null; } + public override System.Collections.Generic.Dictionary ToJsAst() => throw null; + public override string ToRawString() => throw null; + public override string ToString() => throw null; + } + + // Generated from `ServiceStack.Script.JsCoalescing` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class JsCoalescing : ServiceStack.Script.JsBinaryOperator + { + public override object Evaluate(object lhs, object rhs) => throw null; + public static ServiceStack.Script.JsCoalescing Operator; + public override string Token { get => throw null; } + } + + // Generated from `ServiceStack.Script.JsConditionalExpression` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class JsConditionalExpression : ServiceStack.Script.JsExpression + { + public ServiceStack.Script.JsToken Alternate { get => throw null; } + public ServiceStack.Script.JsToken Consequent { get => throw null; } + public override bool Equals(object obj) => throw null; + protected bool Equals(ServiceStack.Script.JsConditionalExpression other) => throw null; + public override object Evaluate(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public override int GetHashCode() => throw null; + public JsConditionalExpression(ServiceStack.Script.JsToken test, ServiceStack.Script.JsToken consequent, ServiceStack.Script.JsToken alternate) => throw null; + public ServiceStack.Script.JsToken Test { get => throw null; } + public override System.Collections.Generic.Dictionary ToJsAst() => throw null; + public override string ToRawString() => throw null; + } + + // Generated from `ServiceStack.Script.JsDeclaration` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class JsDeclaration : ServiceStack.Script.JsExpression + { + public override bool Equals(object obj) => throw null; + protected bool Equals(ServiceStack.Script.JsDeclaration other) => throw null; + public override object Evaluate(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public override int GetHashCode() => throw null; + public ServiceStack.Script.JsIdentifier Id { get => throw null; set => throw null; } + public ServiceStack.Script.JsToken Init { get => throw null; set => throw null; } + public JsDeclaration(ServiceStack.Script.JsIdentifier id, ServiceStack.Script.JsToken init) => throw null; + public override System.Collections.Generic.Dictionary ToJsAst() => throw null; + public override string ToRawString() => throw null; + } + + // Generated from `ServiceStack.Script.JsDivision` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class JsDivision : ServiceStack.Script.JsBinaryOperator + { + public override object Evaluate(object lhs, object rhs) => throw null; + public static ServiceStack.Script.JsDivision Operator; + public override string Token { get => throw null; } + } + + // Generated from `ServiceStack.Script.JsEquals` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class JsEquals : ServiceStack.Script.JsLogicOperator + { + public static ServiceStack.Script.JsEquals Operator; + public override bool Test(object lhs, object rhs) => throw null; + public override string Token { get => throw null; } + } + + // Generated from `ServiceStack.Script.JsExpression` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public abstract class JsExpression : ServiceStack.Script.JsToken + { + protected JsExpression() => throw null; + public abstract System.Collections.Generic.Dictionary ToJsAst(); + public virtual string ToJsAstType() => throw null; + } + + // Generated from `ServiceStack.Script.JsExpressionStatement` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class JsExpressionStatement : ServiceStack.Script.JsStatement + { + public override bool Equals(object obj) => throw null; + protected bool Equals(ServiceStack.Script.JsExpressionStatement other) => throw null; + public ServiceStack.Script.JsToken Expression { get => throw null; } + public override int GetHashCode() => throw null; + public JsExpressionStatement(ServiceStack.Script.JsToken expression) => throw null; + } + + // Generated from `ServiceStack.Script.JsExpressionUtils` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class JsExpressionUtils + { + public static ServiceStack.Script.JsExpression CreateJsExpression(ServiceStack.Script.JsToken lhs, ServiceStack.Script.JsBinaryOperator op, ServiceStack.Script.JsToken rhs) => throw null; + public static ServiceStack.Script.JsToken GetCachedJsExpression(this string expr, ServiceStack.Script.ScriptScopeContext scope) => throw null; + public static ServiceStack.Script.JsToken GetCachedJsExpression(this System.ReadOnlyMemory expr, ServiceStack.Script.ScriptScopeContext scope) => throw null; + public static object GetJsExpressionAndEvaluate(this System.ReadOnlyMemory expr, ServiceStack.Script.ScriptScopeContext scope, System.Action ifNone = default(System.Action)) => throw null; + public static System.Threading.Tasks.Task GetJsExpressionAndEvaluateAsync(this System.ReadOnlyMemory expr, ServiceStack.Script.ScriptScopeContext scope, System.Action ifNone = default(System.Action)) => throw null; + public static bool GetJsExpressionAndEvaluateToBool(this System.ReadOnlyMemory expr, ServiceStack.Script.ScriptScopeContext scope, System.Action ifNone = default(System.Action)) => throw null; + public static System.Threading.Tasks.Task GetJsExpressionAndEvaluateToBoolAsync(this System.ReadOnlyMemory expr, ServiceStack.Script.ScriptScopeContext scope, System.Action ifNone = default(System.Action)) => throw null; + public static System.ReadOnlySpan ParseBinaryExpression(this System.ReadOnlySpan literal, out ServiceStack.Script.JsExpression expr, bool filterExpression) => throw null; + public static System.ReadOnlySpan ParseJsExpression(this string literal, out ServiceStack.Script.JsToken token) => throw null; + public static System.ReadOnlySpan ParseJsExpression(this System.ReadOnlySpan literal, out ServiceStack.Script.JsToken token, bool filterExpression) => throw null; + public static System.ReadOnlySpan ParseJsExpression(this System.ReadOnlySpan literal, out ServiceStack.Script.JsToken token) => throw null; + public static System.ReadOnlySpan ParseJsExpression(this System.ReadOnlyMemory literal, out ServiceStack.Script.JsToken token) => throw null; + } + + // Generated from `ServiceStack.Script.JsFilterExpressionStatement` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class JsFilterExpressionStatement : ServiceStack.Script.JsStatement + { + public override bool Equals(object obj) => throw null; + protected bool Equals(ServiceStack.Script.JsFilterExpressionStatement other) => throw null; + public ServiceStack.Script.PageVariableFragment FilterExpression { get => throw null; } + public override int GetHashCode() => throw null; + public JsFilterExpressionStatement(string originalText, ServiceStack.Script.JsToken expr, params ServiceStack.Script.JsCallExpression[] filters) => throw null; + public JsFilterExpressionStatement(System.ReadOnlyMemory originalText, ServiceStack.Script.JsToken expr, System.Collections.Generic.List filters) => throw null; + } + + // Generated from `ServiceStack.Script.JsGreaterThan` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class JsGreaterThan : ServiceStack.Script.JsLogicOperator + { + public static ServiceStack.Script.JsGreaterThan Operator; + public override bool Test(object lhs, object rhs) => throw null; + public override string Token { get => throw null; } + } + + // Generated from `ServiceStack.Script.JsGreaterThanEqual` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class JsGreaterThanEqual : ServiceStack.Script.JsLogicOperator + { + public static ServiceStack.Script.JsGreaterThanEqual Operator; + public override bool Test(object lhs, object rhs) => throw null; + public override string Token { get => throw null; } + } + + // Generated from `ServiceStack.Script.JsIdentifier` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class JsIdentifier : ServiceStack.Script.JsExpression + { + public override bool Equals(object obj) => throw null; + protected bool Equals(ServiceStack.Script.JsIdentifier other) => throw null; + public override object Evaluate(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public override int GetHashCode() => throw null; + public JsIdentifier(string name) => throw null; + public JsIdentifier(System.ReadOnlySpan name) => throw null; + public string Name { get => throw null; } + public override System.Collections.Generic.Dictionary ToJsAst() => throw null; + public override string ToRawString() => throw null; + public override string ToString() => throw null; + } + + // Generated from `ServiceStack.Script.JsLessThan` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class JsLessThan : ServiceStack.Script.JsLogicOperator + { + public static ServiceStack.Script.JsLessThan Operator; + public override bool Test(object lhs, object rhs) => throw null; + public override string Token { get => throw null; } + } + + // Generated from `ServiceStack.Script.JsLessThanEqual` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class JsLessThanEqual : ServiceStack.Script.JsLogicOperator + { + public static ServiceStack.Script.JsLessThanEqual Operator; + public override bool Test(object lhs, object rhs) => throw null; + public override string Token { get => throw null; } + } + + // Generated from `ServiceStack.Script.JsLiteral` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class JsLiteral : ServiceStack.Script.JsExpression + { + public override bool Equals(object obj) => throw null; + protected bool Equals(ServiceStack.Script.JsLiteral other) => throw null; + public override object Evaluate(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public static ServiceStack.Script.JsLiteral False; + public override int GetHashCode() => throw null; + public JsLiteral(object value) => throw null; + public override System.Collections.Generic.Dictionary ToJsAst() => throw null; + public override string ToRawString() => throw null; + public override string ToString() => throw null; + public static ServiceStack.Script.JsLiteral True; + public object Value { get => throw null; } + } + + // Generated from `ServiceStack.Script.JsLogicOperator` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public abstract class JsLogicOperator : ServiceStack.Script.JsBinaryOperator + { + public override object Evaluate(object lhs, object rhs) => throw null; + protected JsLogicOperator() => throw null; + public abstract bool Test(object lhs, object rhs); + } + + // Generated from `ServiceStack.Script.JsLogicalExpression` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class JsLogicalExpression : ServiceStack.Script.JsExpression + { + public override bool Equals(object obj) => throw null; + protected bool Equals(ServiceStack.Script.JsLogicalExpression other) => throw null; + public override object Evaluate(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public override int GetHashCode() => throw null; + public JsLogicalExpression(ServiceStack.Script.JsToken left, ServiceStack.Script.JsLogicOperator @operator, ServiceStack.Script.JsToken right) => throw null; + public ServiceStack.Script.JsToken Left { get => throw null; set => throw null; } + public ServiceStack.Script.JsLogicOperator Operator { get => throw null; set => throw null; } + public ServiceStack.Script.JsToken Right { get => throw null; set => throw null; } + public override System.Collections.Generic.Dictionary ToJsAst() => throw null; + public override string ToRawString() => throw null; + } + + // Generated from `ServiceStack.Script.JsMemberExpression` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class JsMemberExpression : ServiceStack.Script.JsExpression + { + public bool Computed { get => throw null; } + public override bool Equals(object obj) => throw null; + protected bool Equals(ServiceStack.Script.JsMemberExpression other) => throw null; + public override object Evaluate(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public override int GetHashCode() => throw null; + public JsMemberExpression(ServiceStack.Script.JsToken @object, ServiceStack.Script.JsToken property, bool computed) => throw null; + public JsMemberExpression(ServiceStack.Script.JsToken @object, ServiceStack.Script.JsToken property) => throw null; + public ServiceStack.Script.JsToken Object { get => throw null; } + public ServiceStack.Script.JsToken Property { get => throw null; } + public override System.Collections.Generic.Dictionary ToJsAst() => throw null; + public override string ToRawString() => throw null; + } + + // Generated from `ServiceStack.Script.JsMinus` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class JsMinus : ServiceStack.Script.JsUnaryOperator + { + public override object Evaluate(object target) => throw null; + public static ServiceStack.Script.JsMinus Operator; + public override string Token { get => throw null; } + } + + // Generated from `ServiceStack.Script.JsMod` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class JsMod : ServiceStack.Script.JsBinaryOperator + { + public override object Evaluate(object lhs, object rhs) => throw null; + public static ServiceStack.Script.JsMod Operator; + public override string Token { get => throw null; } + } + + // Generated from `ServiceStack.Script.JsMultiplication` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class JsMultiplication : ServiceStack.Script.JsBinaryOperator + { + public override object Evaluate(object lhs, object rhs) => throw null; + public static ServiceStack.Script.JsMultiplication Operator; + public override string Token { get => throw null; } + } + + // Generated from `ServiceStack.Script.JsNot` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class JsNot : ServiceStack.Script.JsUnaryOperator + { + public override object Evaluate(object target) => throw null; + public static ServiceStack.Script.JsNot Operator; + public override string Token { get => throw null; } + } + + // Generated from `ServiceStack.Script.JsNotEquals` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class JsNotEquals : ServiceStack.Script.JsLogicOperator + { + public static ServiceStack.Script.JsNotEquals Operator; + public override bool Test(object lhs, object rhs) => throw null; + public override string Token { get => throw null; } + } + + // Generated from `ServiceStack.Script.JsNull` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class JsNull + { + public const string String = default; + public static ServiceStack.Script.JsLiteral Value; + } + + // Generated from `ServiceStack.Script.JsObjectExpression` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class JsObjectExpression : ServiceStack.Script.JsExpression + { + public override bool Equals(object obj) => throw null; + protected bool Equals(ServiceStack.Script.JsObjectExpression other) => throw null; + public override object Evaluate(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public override int GetHashCode() => throw null; + public static string GetKey(ServiceStack.Script.JsToken token) => throw null; + public JsObjectExpression(params ServiceStack.Script.JsProperty[] properties) => throw null; + public JsObjectExpression(System.Collections.Generic.IEnumerable properties) => throw null; + public ServiceStack.Script.JsProperty[] Properties { get => throw null; } + public override System.Collections.Generic.Dictionary ToJsAst() => throw null; + public override string ToRawString() => throw null; + } + + // Generated from `ServiceStack.Script.JsOperator` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public abstract class JsOperator : ServiceStack.Script.JsToken + { + public override object Evaluate(ServiceStack.Script.ScriptScopeContext scope) => throw null; + protected JsOperator() => throw null; + public override string ToRawString() => throw null; + public abstract string Token { get; } + } + + // Generated from `ServiceStack.Script.JsOr` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class JsOr : ServiceStack.Script.JsLogicOperator + { + public static ServiceStack.Script.JsOr Operator; + public override bool Test(object lhs, object rhs) => throw null; + public override string Token { get => throw null; } + } + + // Generated from `ServiceStack.Script.JsPageBlockFragmentStatement` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class JsPageBlockFragmentStatement : ServiceStack.Script.JsStatement + { + public ServiceStack.Script.PageBlockFragment Block { get => throw null; } + public override bool Equals(object obj) => throw null; + protected bool Equals(ServiceStack.Script.JsPageBlockFragmentStatement other) => throw null; + public override int GetHashCode() => throw null; + public JsPageBlockFragmentStatement(ServiceStack.Script.PageBlockFragment block) => throw null; + } + + // Generated from `ServiceStack.Script.JsPlus` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class JsPlus : ServiceStack.Script.JsUnaryOperator + { + public override object Evaluate(object target) => throw null; + public static ServiceStack.Script.JsPlus Operator; + public override string Token { get => throw null; } + } + + // Generated from `ServiceStack.Script.JsProperty` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class JsProperty + { + public override bool Equals(object obj) => throw null; + protected bool Equals(ServiceStack.Script.JsProperty other) => throw null; + public override int GetHashCode() => throw null; + public JsProperty(ServiceStack.Script.JsToken key, ServiceStack.Script.JsToken value, bool shorthand) => throw null; + public JsProperty(ServiceStack.Script.JsToken key, ServiceStack.Script.JsToken value) => throw null; + public ServiceStack.Script.JsToken Key { get => throw null; } + public bool Shorthand { get => throw null; } + public ServiceStack.Script.JsToken Value { get => throw null; } + } + + // Generated from `ServiceStack.Script.JsSpreadElement` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class JsSpreadElement : ServiceStack.Script.JsExpression + { + public ServiceStack.Script.JsToken Argument { get => throw null; } + public override bool Equals(object obj) => throw null; + protected bool Equals(ServiceStack.Script.JsSpreadElement other) => throw null; + public override object Evaluate(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public override int GetHashCode() => throw null; + public JsSpreadElement(ServiceStack.Script.JsToken argument) => throw null; + public override System.Collections.Generic.Dictionary ToJsAst() => throw null; + public override string ToRawString() => throw null; + } + + // Generated from `ServiceStack.Script.JsStatement` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public abstract class JsStatement + { + protected JsStatement() => throw null; + } + + // Generated from `ServiceStack.Script.JsStrictEquals` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class JsStrictEquals : ServiceStack.Script.JsLogicOperator + { + public static ServiceStack.Script.JsStrictEquals Operator; + public override bool Test(object lhs, object rhs) => throw null; + public override string Token { get => throw null; } + } + + // Generated from `ServiceStack.Script.JsStrictNotEquals` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class JsStrictNotEquals : ServiceStack.Script.JsLogicOperator + { + public static ServiceStack.Script.JsStrictNotEquals Operator; + public override bool Test(object lhs, object rhs) => throw null; + public override string Token { get => throw null; } + } + + // Generated from `ServiceStack.Script.JsSubtraction` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class JsSubtraction : ServiceStack.Script.JsBinaryOperator + { + public override object Evaluate(object lhs, object rhs) => throw null; + public static ServiceStack.Script.JsSubtraction Operator; + public override string Token { get => throw null; } + } + + // Generated from `ServiceStack.Script.JsTemplateElement` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class JsTemplateElement + { + public override bool Equals(object obj) => throw null; + protected bool Equals(ServiceStack.Script.JsTemplateElement other) => throw null; + public override int GetHashCode() => throw null; + public JsTemplateElement(string raw, string cooked, bool tail = default(bool)) => throw null; + public JsTemplateElement(ServiceStack.Script.JsTemplateElementValue value, bool tail) => throw null; + public bool Tail { get => throw null; } + public ServiceStack.Script.JsTemplateElementValue Value { get => throw null; } + } + + // Generated from `ServiceStack.Script.JsTemplateElementValue` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class JsTemplateElementValue + { + public string Cooked { get => throw null; } + public override bool Equals(object obj) => throw null; + protected bool Equals(ServiceStack.Script.JsTemplateElementValue other) => throw null; + public override int GetHashCode() => throw null; + public JsTemplateElementValue(string raw, string cooked) => throw null; + public string Raw { get => throw null; } + } + + // Generated from `ServiceStack.Script.JsTemplateLiteral` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class JsTemplateLiteral : ServiceStack.Script.JsExpression + { + public override bool Equals(object obj) => throw null; + protected bool Equals(ServiceStack.Script.JsTemplateLiteral other) => throw null; + public override object Evaluate(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public ServiceStack.Script.JsToken[] Expressions { get => throw null; } + public override int GetHashCode() => throw null; + public JsTemplateLiteral(string cooked) => throw null; + public JsTemplateLiteral(ServiceStack.Script.JsTemplateElement[] quasis = default(ServiceStack.Script.JsTemplateElement[]), ServiceStack.Script.JsToken[] expressions = default(ServiceStack.Script.JsToken[])) => throw null; + public ServiceStack.Script.JsTemplateElement[] Quasis { get => throw null; } + public override System.Collections.Generic.Dictionary ToJsAst() => throw null; + public override string ToRawString() => throw null; + public override string ToString() => throw null; + } + + // Generated from `ServiceStack.Script.JsToken` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public abstract class JsToken : ServiceStack.IRawString + { + public abstract object Evaluate(ServiceStack.Script.ScriptScopeContext scope); + protected JsToken() => throw null; + public string JsonValue(object value) => throw null; + public abstract string ToRawString(); + public override string ToString() => throw null; + public static object UnwrapValue(ServiceStack.Script.JsToken token) => throw null; + } + + // Generated from `ServiceStack.Script.JsTokenUtils` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class JsTokenUtils + { + public static System.ReadOnlySpan AdvancePastPipeOperator(this System.ReadOnlySpan literal) => throw null; + public static System.ReadOnlySpan Chop(this System.ReadOnlySpan literal, System.Char c) => throw null; + public static System.ReadOnlyMemory Chop(this System.ReadOnlyMemory literal, System.Char c) => throw null; + public static System.ReadOnlyMemory ChopNewLine(this System.ReadOnlyMemory literal) => throw null; + public static int CountPrecedingOccurrences(this System.ReadOnlySpan literal, int index, System.Char c) => throw null; + public static object Evaluate(this ServiceStack.Script.JsToken token) => throw null; + public static bool Evaluate(this ServiceStack.Script.JsToken token, ServiceStack.Script.ScriptScopeContext scope, out object result, out System.Threading.Tasks.Task asyncResult) => throw null; + public static System.Threading.Tasks.Task EvaluateAsync(this ServiceStack.Script.JsToken token, ServiceStack.Script.ScriptScopeContext scope) => throw null; + public static bool EvaluateToBool(this ServiceStack.Script.JsToken token, ServiceStack.Script.ScriptScopeContext scope, out bool? result, out System.Threading.Tasks.Task asyncResult) => throw null; + public static bool EvaluateToBool(this ServiceStack.Script.JsToken token, ServiceStack.Script.ScriptScopeContext scope) => throw null; + public static System.Threading.Tasks.Task EvaluateToBoolAsync(this ServiceStack.Script.JsToken token, ServiceStack.Script.ScriptScopeContext scope) => throw null; + public static bool FirstCharEquals(this string literal, System.Char c) => throw null; + public static bool FirstCharEquals(this System.ReadOnlySpan literal, System.Char c) => throw null; + public static int GetBinaryPrecedence(string token) => throw null; + public static ServiceStack.Script.JsUnaryOperator GetUnaryOperator(this System.Char c) => throw null; + public static int IndexOfQuotedString(this System.ReadOnlySpan literal, System.Char quoteChar, out bool hasEscapeChars) => throw null; + public static bool IsEnd(this System.Char c) => throw null; + public static bool IsExpressionTerminatorChar(this System.Char c) => throw null; + public static bool IsNumericChar(this System.Char c) => throw null; + public static bool IsOperatorChar(this System.Char c) => throw null; + public static bool IsValidVarNameChar(this System.Char c) => throw null; + public static System.Byte[] NewLineUtf8; + public static System.Collections.Generic.Dictionary OperatorPrecedence; + public static System.ReadOnlySpan ParseArgumentsList(this System.ReadOnlySpan literal, out System.Collections.Generic.List args) => throw null; + public static System.ReadOnlySpan ParseJsToken(this System.ReadOnlySpan literal, out ServiceStack.Script.JsToken token, bool filterExpression) => throw null; + public static System.ReadOnlySpan ParseJsToken(this System.ReadOnlySpan literal, out ServiceStack.Script.JsToken token) => throw null; + public static System.ReadOnlySpan ParseVarName(this System.ReadOnlySpan literal, out System.ReadOnlySpan varName) => throw null; + public static System.ReadOnlyMemory ParseVarName(this System.ReadOnlyMemory literal, out System.ReadOnlyMemory varName) => throw null; + public static bool SafeCharEquals(this System.ReadOnlySpan literal, int index, System.Char c) => throw null; + public static System.Char SafeGetChar(this System.ReadOnlySpan literal, int index) => throw null; + public static System.Char SafeGetChar(this System.ReadOnlyMemory literal, int index) => throw null; + public static System.Collections.Generic.Dictionary ToJsAst(this ServiceStack.Script.JsToken token) => throw null; + public static string ToJsAstString(this ServiceStack.Script.JsToken token) => throw null; + public static string ToJsAstType(this System.Type type) => throw null; + } + + // Generated from `ServiceStack.Script.JsUnaryExpression` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class JsUnaryExpression : ServiceStack.Script.JsExpression + { + public ServiceStack.Script.JsToken Argument { get => throw null; } + public override bool Equals(object obj) => throw null; + protected bool Equals(ServiceStack.Script.JsUnaryExpression other) => throw null; + public override object Evaluate(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public override int GetHashCode() => throw null; + public JsUnaryExpression(ServiceStack.Script.JsUnaryOperator @operator, ServiceStack.Script.JsToken argument) => throw null; + public ServiceStack.Script.JsUnaryOperator Operator { get => throw null; } + public override System.Collections.Generic.Dictionary ToJsAst() => throw null; + public override string ToRawString() => throw null; + } + + // Generated from `ServiceStack.Script.JsUnaryOperator` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public abstract class JsUnaryOperator : ServiceStack.Script.JsOperator + { + public abstract object Evaluate(object target); + protected JsUnaryOperator() => throw null; + } + + // Generated from `ServiceStack.Script.JsVariableDeclaration` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class JsVariableDeclaration : ServiceStack.Script.JsExpression + { + public ServiceStack.Script.JsDeclaration[] Declarations { get => throw null; } + public override bool Equals(object obj) => throw null; + protected bool Equals(ServiceStack.Script.JsVariableDeclaration other) => throw null; + public override object Evaluate(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public override int GetHashCode() => throw null; + public JsVariableDeclaration(ServiceStack.Script.JsVariableDeclarationKind kind, params ServiceStack.Script.JsDeclaration[] declarations) => throw null; + public ServiceStack.Script.JsVariableDeclarationKind Kind { get => throw null; } + public override System.Collections.Generic.Dictionary ToJsAst() => throw null; + public override string ToRawString() => throw null; + } + + // Generated from `ServiceStack.Script.JsVariableDeclarationKind` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public enum JsVariableDeclarationKind + { + Const, + Let, + Var, + } + + // Generated from `ServiceStack.Script.KeyValuesScriptBlock` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class KeyValuesScriptBlock : ServiceStack.Script.ScriptBlock + { + public override ServiceStack.Script.ScriptLanguage Body { get => throw null; } + public KeyValuesScriptBlock() => throw null; + public override string Name { get => throw null; } + public override System.Threading.Tasks.Task WriteAsync(ServiceStack.Script.ScriptScopeContext scope, ServiceStack.Script.PageBlockFragment block, System.Threading.CancellationToken ct) => throw null; + } + + // Generated from `ServiceStack.Script.Lisp` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class Lisp + { + public static bool AllowLoadingRemoteScripts { get => throw null; set => throw null; } + public static ServiceStack.Script.Lisp.Sym BOOL_FALSE; + public static ServiceStack.Script.Lisp.Sym BOOL_TRUE; + // Generated from `ServiceStack.Script.Lisp+BuiltInFunc` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class BuiltInFunc : ServiceStack.Script.Lisp.LispFunc + { + public ServiceStack.Script.Lisp.BuiltInFuncBody Body { get => throw null; } + public BuiltInFunc(string name, int carity, ServiceStack.Script.Lisp.BuiltInFuncBody body) : base(default(int)) => throw null; + public object EvalWith(ServiceStack.Script.Lisp.Interpreter interp, ServiceStack.Script.Lisp.Cell arg, ServiceStack.Script.Lisp.Cell interpEnv) => throw null; + public string Name { get => throw null; } + public override string ToString() => throw null; + } + + + // Generated from `ServiceStack.Script.Lisp+BuiltInFuncBody` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public delegate object BuiltInFuncBody(ServiceStack.Script.Lisp.Interpreter interp, object[] frame); + + + // Generated from `ServiceStack.Script.Lisp+Cell` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class Cell : System.Collections.IEnumerable + { + public object Car; + public object Cdr; + public Cell(object car, object cdr) => throw null; + public System.Collections.IEnumerator GetEnumerator() => throw null; + public int Length { get => throw null; } + public override string ToString() => throw null; + public void Walk(System.Action fn) => throw null; + } + + + public static ServiceStack.Script.Lisp.Interpreter CreateInterpreter() => throw null; + public const string Extensions = default; + public static void Import(string lisp) => throw null; + public static void Import(System.ReadOnlyMemory lisp) => throw null; + public static string IndexGistId { get => throw null; set => throw null; } + public static void Init() => throw null; + public static string InitScript; + // Generated from `ServiceStack.Script.Lisp+Interpreter` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class Interpreter + { + public ServiceStack.Script.ScriptScopeContext AssertScope() => throw null; + public System.IO.TextWriter COut { get => throw null; set => throw null; } + public void Def(string name, int carity, System.Func body) => throw null; + public void Def(string name, int carity, ServiceStack.Script.Lisp.BuiltInFuncBody body) => throw null; + public object Eval(object x, ServiceStack.Script.Lisp.Cell env) => throw null; + public object Eval(object x) => throw null; + public object Eval(System.Collections.Generic.IEnumerable sExpressions, ServiceStack.Script.Lisp.Cell env) => throw null; + public object Eval(System.Collections.Generic.IEnumerable sExpressions) => throw null; + public static object[] EvalArgs(ServiceStack.Script.Lisp.Cell arg, ServiceStack.Script.Lisp.Interpreter interp, ServiceStack.Script.Lisp.Cell env = default(ServiceStack.Script.Lisp.Cell)) => throw null; + public static System.Collections.Generic.Dictionary EvalMapArgs(ServiceStack.Script.Lisp.Cell arg, ServiceStack.Script.Lisp.Interpreter interp, ServiceStack.Script.Lisp.Cell env = default(ServiceStack.Script.Lisp.Cell)) => throw null; + public int Evaluations { get => throw null; set => throw null; } + public object GetSymbolValue(string name) => throw null; + public void InitGlobals() => throw null; + public Interpreter(ServiceStack.Script.Lisp.Interpreter globalInterp) => throw null; + public Interpreter() => throw null; + public string ReplEval(ServiceStack.Script.ScriptContext context, System.IO.Stream outputStream, string lisp, System.Collections.Generic.Dictionary args = default(System.Collections.Generic.Dictionary)) => throw null; + public ServiceStack.Script.ScriptScopeContext? Scope { get => throw null; set => throw null; } + public void SetSymbolValue(string name, object value) => throw null; + public static int TotalEvaluations { get => throw null; } + } + + + public const string LispCore = default; + // Generated from `ServiceStack.Script.Lisp+LispFunc` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public abstract class LispFunc + { + public int Carity { get => throw null; } + public void EvalFrame(object[] frame, ServiceStack.Script.Lisp.Interpreter interp, ServiceStack.Script.Lisp.Cell env) => throw null; + protected LispFunc(int carity) => throw null; + public object[] MakeFrame(ServiceStack.Script.Lisp.Cell arg) => throw null; + } + + + public static System.Collections.Generic.List Parse(string lisp) => throw null; + public static System.Collections.Generic.List Parse(System.ReadOnlyMemory lisp) => throw null; + public const string Prelude = default; + public static object QqExpand(object x) => throw null; + public static object QqQuote(object x) => throw null; + // Generated from `ServiceStack.Script.Lisp+Reader` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class Reader + { + public static object EOF; + public object Read() => throw null; + public Reader(System.ReadOnlyMemory source) => throw null; + } + + + public static void Reset() => throw null; + public static void RunRepl(ServiceStack.Script.ScriptContext context) => throw null; + public static void Set(string symbolName, object value) => throw null; + public static string Str(object x, bool quoteString = default(bool)) => throw null; + // Generated from `ServiceStack.Script.Lisp+Sym` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class Sym + { + public override int GetHashCode() => throw null; + public bool IsInterned { get => throw null; } + public string Name { get => throw null; } + public static ServiceStack.Script.Lisp.Sym New(string name) => throw null; + protected static ServiceStack.Script.Lisp.Sym New(string name, System.Func make) => throw null; + public Sym(string name) => throw null; + protected static System.Collections.Generic.Dictionary Table; + public override string ToString() => throw null; + } + + + public static ServiceStack.Script.Lisp.Sym TRUE; + public static ServiceStack.Script.Lisp.Cell ToCons(System.Collections.IEnumerable seq) => throw null; + } + + // Generated from `ServiceStack.Script.LispEvalException` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class LispEvalException : System.Exception + { + public LispEvalException(string msg, object x, bool quoteString = default(bool)) => throw null; + public override string ToString() => throw null; + public System.Collections.Generic.List Trace { get => throw null; } + } + + // Generated from `ServiceStack.Script.LispScriptMethods` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class LispScriptMethods : ServiceStack.Script.ScriptMethods + { + public LispScriptMethods() => throw null; + public System.Collections.Generic.List gistindex(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public System.Collections.Generic.List symbols(ServiceStack.Script.ScriptScopeContext scope) => throw null; + } + + // Generated from `ServiceStack.Script.LispStatements` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class LispStatements : ServiceStack.Script.JsStatement + { + public override bool Equals(object obj) => throw null; + protected bool Equals(ServiceStack.Script.LispStatements other) => throw null; + public override int GetHashCode() => throw null; + public LispStatements(object[] sExpressions) => throw null; + public object[] SExpressions { get => throw null; } + } + + // Generated from `ServiceStack.Script.MarkdownTable` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class MarkdownTable + { + public string Caption { get => throw null; set => throw null; } + public System.Collections.Generic.List Headers { get => throw null; } + public bool IncludeHeaders { get => throw null; set => throw null; } + public bool IncludeRowNumbers { get => throw null; set => throw null; } + public MarkdownTable() => throw null; + public string Render() => throw null; + public System.Collections.Generic.List> Rows { get => throw null; } + } + + // Generated from `ServiceStack.Script.NoopScriptBlock` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class NoopScriptBlock : ServiceStack.Script.ScriptBlock + { + public override ServiceStack.Script.ScriptLanguage Body { get => throw null; } + public override string Name { get => throw null; } + public NoopScriptBlock() => throw null; + public override System.Threading.Tasks.Task WriteAsync(ServiceStack.Script.ScriptScopeContext scope, ServiceStack.Script.PageBlockFragment block, System.Threading.CancellationToken token) => throw null; + } + + // Generated from `ServiceStack.Script.PageBlockFragment` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class PageBlockFragment : ServiceStack.Script.PageFragment + { + public System.ReadOnlyMemory Argument { get => throw null; } + public string ArgumentString { get => throw null; } + public ServiceStack.Script.PageFragment[] Body { get => throw null; } + public ServiceStack.Script.PageElseBlock[] ElseBlocks { get => throw null; } + public override bool Equals(object obj) => throw null; + protected bool Equals(ServiceStack.Script.PageBlockFragment other) => throw null; + public override int GetHashCode() => throw null; + public string Name { get => throw null; } + public System.ReadOnlyMemory OriginalText { get => throw null; set => throw null; } + public PageBlockFragment(string originalText, string name, string argument, System.Collections.Generic.List body, System.Collections.Generic.List elseStatements = default(System.Collections.Generic.List)) => throw null; + public PageBlockFragment(string originalText, string name, string argument, ServiceStack.Script.JsStatement body, System.Collections.Generic.IEnumerable elseStatements = default(System.Collections.Generic.IEnumerable)) => throw null; + public PageBlockFragment(string originalText, string name, string argument, ServiceStack.Script.JsBlockStatement body, System.Collections.Generic.IEnumerable elseStatements = default(System.Collections.Generic.IEnumerable)) => throw null; + public PageBlockFragment(string name, System.ReadOnlyMemory argument, System.Collections.Generic.List body, System.Collections.Generic.List elseStatements = default(System.Collections.Generic.List)) => throw null; + public PageBlockFragment(System.ReadOnlyMemory originalText, string name, System.ReadOnlyMemory argument, System.Collections.Generic.IEnumerable body, System.Collections.Generic.IEnumerable elseStatements = default(System.Collections.Generic.IEnumerable)) => throw null; + } + + // Generated from `ServiceStack.Script.PageElseBlock` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class PageElseBlock : ServiceStack.Script.PageFragment + { + public System.ReadOnlyMemory Argument { get => throw null; } + public ServiceStack.Script.PageFragment[] Body { get => throw null; } + public override bool Equals(object obj) => throw null; + protected bool Equals(ServiceStack.Script.PageElseBlock other) => throw null; + public override int GetHashCode() => throw null; + public PageElseBlock(string argument, System.Collections.Generic.List body) => throw null; + public PageElseBlock(string argument, ServiceStack.Script.JsStatement statement) => throw null; + public PageElseBlock(string argument, ServiceStack.Script.JsBlockStatement block) => throw null; + public PageElseBlock(System.ReadOnlyMemory argument, System.Collections.Generic.IEnumerable body) => throw null; + public PageElseBlock(System.ReadOnlyMemory argument, ServiceStack.Script.PageFragment[] body) => throw null; + } + + // Generated from `ServiceStack.Script.PageFormat` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class PageFormat + { + public string ArgsPrefix { get => throw null; set => throw null; } + public string ArgsSuffix { get => throw null; set => throw null; } + public string ContentType { get => throw null; set => throw null; } + public string DefaultEncodeValue(object value) => throw null; + public virtual object DefaultExpressionException(ServiceStack.Script.PageResult result, System.Exception ex) => throw null; + public ServiceStack.Script.SharpPage DefaultResolveLayout(ServiceStack.Script.SharpPage page) => throw null; + public virtual System.Threading.Tasks.Task DefaultViewException(ServiceStack.Script.PageResult pageResult, ServiceStack.Web.IRequest req, System.Exception ex) => throw null; + public System.Func EncodeValue { get => throw null; set => throw null; } + public string Extension { get => throw null; set => throw null; } + public System.Func OnExpressionException { get => throw null; set => throw null; } + public System.Func OnViewException { get => throw null; set => throw null; } + public PageFormat() => throw null; + public System.Func ResolveLayout { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.Script.PageFragment` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public abstract class PageFragment + { + protected PageFragment() => throw null; + } + + // Generated from `ServiceStack.Script.PageJsBlockStatementFragment` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class PageJsBlockStatementFragment : ServiceStack.Script.PageFragment + { + public ServiceStack.Script.JsBlockStatement Block { get => throw null; } + public override bool Equals(object obj) => throw null; + protected bool Equals(ServiceStack.Script.PageJsBlockStatementFragment other) => throw null; + public override int GetHashCode() => throw null; + public PageJsBlockStatementFragment(ServiceStack.Script.JsBlockStatement statement) => throw null; + public bool Quiet { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.Script.PageLispStatementFragment` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class PageLispStatementFragment : ServiceStack.Script.PageFragment + { + public override bool Equals(object obj) => throw null; + protected bool Equals(ServiceStack.Script.PageLispStatementFragment other) => throw null; + public override int GetHashCode() => throw null; + public ServiceStack.Script.LispStatements LispStatements { get => throw null; } + public PageLispStatementFragment(ServiceStack.Script.LispStatements statements) => throw null; + public bool Quiet { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.Script.PageResult` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class PageResult : System.IDisposable, ServiceStack.Web.IStreamWriterAsync, ServiceStack.Web.IHasOptions, ServiceStack.Script.IPageResult + { + public System.Collections.Generic.Dictionary Args { get => throw null; set => throw null; } + public void AssertNextEvaluation() => throw null; + public void AssertNextPartial() => throw null; + public ServiceStack.Script.PageResult AssignArgs(System.Collections.Generic.Dictionary args) => throw null; + public string AssignExceptionsTo { get => throw null; set => throw null; } + public string CatchExceptionsIn { get => throw null; set => throw null; } + public ServiceStack.Script.PageResult Clone(ServiceStack.Script.SharpPage page) => throw null; + public ServiceStack.Script.SharpCodePage CodePage { get => throw null; } + public string ContentType { get => throw null; set => throw null; } + public ServiceStack.Script.ScriptContext Context { get => throw null; } + public ServiceStack.Script.ScriptScopeContext CreateScope(System.IO.Stream outputStream = default(System.IO.Stream)) => throw null; + public bool DisableBuffering { get => throw null; set => throw null; } + public void Dispose() => throw null; + public object EvaluateIfToken(object value, ServiceStack.Script.ScriptScopeContext scope) => throw null; + public System.Int64 Evaluations { get => throw null; set => throw null; } + public System.Collections.Generic.HashSet ExcludeFiltersNamed { get => throw null; } + public ServiceStack.Script.PageResult Execute() => throw null; + public System.Collections.Generic.Dictionary>> FilterTransformers { get => throw null; set => throw null; } + public ServiceStack.Script.PageFormat Format { get => throw null; } + public ServiceStack.Script.ScriptBlock GetBlock(string name) => throw null; + public bool HaltExecution { get => throw null; set => throw null; } + public System.Threading.Tasks.Task Init() => throw null; + public System.Exception LastFilterError { get => throw null; set => throw null; } + public string[] LastFilterStackTrace { get => throw null; set => throw null; } + public string Layout { get => throw null; set => throw null; } + public ServiceStack.Script.SharpPage LayoutPage { get => throw null; set => throw null; } + public object Model { get => throw null; set => throw null; } + public bool NoLayout { get => throw null; set => throw null; } + public System.Collections.Generic.IDictionary Options { get => throw null; set => throw null; } + public System.Collections.Generic.List>> OutputTransformers { get => throw null; set => throw null; } + public ServiceStack.Script.SharpPage Page { get => throw null; } + public PageResult(ServiceStack.Script.SharpPage page) => throw null; + public PageResult(ServiceStack.Script.SharpCodePage page) => throw null; + public System.Collections.Generic.List>> PageTransformers { get => throw null; set => throw null; } + public System.ReadOnlySpan ParseJsExpression(ServiceStack.Script.ScriptScopeContext scope, System.ReadOnlySpan literal, out ServiceStack.Script.JsToken token) => throw null; + public int PartialStackDepth { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary Partials { get => throw null; set => throw null; } + public void ResetIterations() => throw null; + public string Result { get => throw null; } + public string ResultOutput { get => throw null; } + public bool RethrowExceptions { get => throw null; set => throw null; } + public ServiceStack.Script.ReturnValue ReturnValue { get => throw null; set => throw null; } + public System.Collections.Generic.List ScriptBlocks { get => throw null; set => throw null; } + public System.Collections.Generic.List ScriptMethods { get => throw null; set => throw null; } + public bool ShouldSkipFilterExecution(ServiceStack.Script.PageVariableFragment var) => throw null; + public bool ShouldSkipFilterExecution(ServiceStack.Script.PageFragment fragment) => throw null; + public bool ShouldSkipFilterExecution(ServiceStack.Script.JsStatement statement) => throw null; + public bool? SkipExecutingFiltersIfError { get => throw null; set => throw null; } + public bool SkipFilterExecution { get => throw null; set => throw null; } + public int StackDepth { get => throw null; set => throw null; } + public System.Collections.Generic.List TemplateBlocks { get => throw null; } + public System.Collections.Generic.List TemplateFilters { get => throw null; } + public ServiceStack.Script.ScriptBlock TryGetBlock(string name) => throw null; + public string VirtualPath { get => throw null; } + public System.Threading.Tasks.Task WriteCodePageAsync(ServiceStack.Script.SharpCodePage page, ServiceStack.Script.ScriptScopeContext scope, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task WritePageAsync(ServiceStack.Script.SharpPage page, ServiceStack.Script.SharpCodePage codePage, ServiceStack.Script.ScriptScopeContext scope, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task WritePageAsync(ServiceStack.Script.SharpPage page, ServiceStack.Script.ScriptScopeContext scope, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task WritePageFragmentAsync(ServiceStack.Script.ScriptScopeContext scope, ServiceStack.Script.PageFragment fragment, System.Threading.CancellationToken token) => throw null; + public System.Threading.Tasks.Task WriteStatementsAsync(ServiceStack.Script.ScriptScopeContext scope, System.Collections.Generic.IEnumerable blockStatements, string callTrace, System.Threading.CancellationToken token) => throw null; + public System.Threading.Tasks.Task WriteStatementsAsync(ServiceStack.Script.ScriptScopeContext scope, System.Collections.Generic.IEnumerable blockStatements, System.Threading.CancellationToken token) => throw null; + public System.Threading.Tasks.Task WriteToAsync(System.IO.Stream responseStream, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task WriteVarAsync(ServiceStack.Script.ScriptScopeContext scope, ServiceStack.Script.PageVariableFragment var, System.Threading.CancellationToken token) => throw null; + } + + // Generated from `ServiceStack.Script.PageStringFragment` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class PageStringFragment : ServiceStack.Script.PageFragment + { + public override bool Equals(object obj) => throw null; + protected bool Equals(ServiceStack.Script.PageStringFragment other) => throw null; + public override int GetHashCode() => throw null; + public PageStringFragment(string value) => throw null; + public PageStringFragment(System.ReadOnlyMemory value) => throw null; + public System.ReadOnlyMemory Value { get => throw null; set => throw null; } + public string ValueString { get => throw null; } + public System.ReadOnlyMemory ValueUtf8 { get => throw null; } + } + + // Generated from `ServiceStack.Script.PageVariableFragment` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class PageVariableFragment : ServiceStack.Script.PageFragment + { + public string Binding { get => throw null; } + public override bool Equals(object obj) => throw null; + protected bool Equals(ServiceStack.Script.PageVariableFragment other) => throw null; + public object Evaluate(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public ServiceStack.Script.JsToken Expression { get => throw null; } + public ServiceStack.Script.JsCallExpression[] FilterExpressions { get => throw null; } + public override int GetHashCode() => throw null; + public ServiceStack.Script.JsCallExpression InitialExpression { get => throw null; } + public object InitialValue { get => throw null; } + public System.ReadOnlyMemory OriginalText { get => throw null; set => throw null; } + public System.ReadOnlyMemory OriginalTextUtf8 { get => throw null; } + public PageVariableFragment(System.ReadOnlyMemory originalText, ServiceStack.Script.JsToken expr, System.Collections.Generic.List filterCommands) => throw null; + } + + // Generated from `ServiceStack.Script.ParseRealNumber` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public delegate object ParseRealNumber(System.ReadOnlySpan numLiteral); + + // Generated from `ServiceStack.Script.PartialScriptBlock` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class PartialScriptBlock : ServiceStack.Script.ScriptBlock + { + public override ServiceStack.Script.ScriptLanguage Body { get => throw null; } + public override string Name { get => throw null; } + public PartialScriptBlock() => throw null; + public override System.Threading.Tasks.Task WriteAsync(ServiceStack.Script.ScriptScopeContext scope, ServiceStack.Script.PageBlockFragment block, System.Threading.CancellationToken token) => throw null; + } + + // Generated from `ServiceStack.Script.ProtectedScriptBlocks` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ProtectedScriptBlocks : ServiceStack.Script.IScriptPlugin + { + public ProtectedScriptBlocks() => throw null; + public void Register(ServiceStack.Script.ScriptContext context) => throw null; + } + + // Generated from `ServiceStack.Script.ProtectedScripts` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ProtectedScripts : ServiceStack.Script.ScriptMethods + { + public ServiceStack.Script.IgnoreResult AppendAllLines(string path, string[] lines) => throw null; + public ServiceStack.Script.IgnoreResult AppendAllLines(ServiceStack.Script.FileScripts fs, string path, string[] lines) => throw null; + public ServiceStack.Script.IgnoreResult AppendAllText(string path, string text) => throw null; + public ServiceStack.Script.IgnoreResult AppendAllText(ServiceStack.Script.FileScripts fs, string path, string text) => throw null; + public System.Delegate C(string qualifiedMethodName) => throw null; + public ServiceStack.ObjectActivator Constructor(string qualifiedConstructorName) => throw null; + public ServiceStack.Script.IgnoreResult Copy(string from, string to) => throw null; + public ServiceStack.Script.IgnoreResult Copy(ServiceStack.Script.IOScript os, string from, string to) => throw null; + public ServiceStack.Script.IgnoreResult Create(string from, string to) => throw null; + public ServiceStack.Script.IgnoreResult Create(ServiceStack.Script.FileScripts fs, string from, string to) => throw null; + public static string CreateCacheKey(string url, System.Collections.Generic.Dictionary options = default(System.Collections.Generic.Dictionary)) => throw null; + public ServiceStack.Script.IgnoreResult CreateDirectory(string path) => throw null; + public ServiceStack.Script.IgnoreResult CreateDirectory(ServiceStack.Script.DirectoryScripts ds, string path) => throw null; + public ServiceStack.Script.IgnoreResult Decrypt(string path) => throw null; + public ServiceStack.Script.IgnoreResult Decrypt(ServiceStack.Script.FileScripts fs, string path) => throw null; + public ServiceStack.Script.IgnoreResult Delete(string path) => throw null; + public ServiceStack.Script.IgnoreResult Delete(ServiceStack.Script.IOScript os, string path) => throw null; + public ServiceStack.Script.DirectoryScripts Directory() => throw null; + public ServiceStack.Script.IgnoreResult Encrypt(string path) => throw null; + public ServiceStack.Script.IgnoreResult Encrypt(ServiceStack.Script.FileScripts fs, string path) => throw null; + public bool Exists(string path) => throw null; + public bool Exists(ServiceStack.Script.IOScript os, string path) => throw null; + public System.Delegate F(string qualifiedMethodName, System.Collections.Generic.List args) => throw null; + public System.Delegate F(string qualifiedMethodName) => throw null; + public ServiceStack.Script.FileScripts File() => throw null; + public System.Delegate Function(string qualifiedMethodName, System.Collections.Generic.List args) => throw null; + public System.Delegate Function(string qualifiedMethodName) => throw null; + public string GetCurrentDirectory(ServiceStack.Script.DirectoryScripts ds) => throw null; + public string GetCurrentDirectory() => throw null; + public string[] GetDirectories(string path) => throw null; + public string[] GetDirectories(ServiceStack.Script.DirectoryScripts ds, string path) => throw null; + public string GetDirectoryRoot(string path) => throw null; + public string GetDirectoryRoot(ServiceStack.Script.DirectoryScripts ds, string path) => throw null; + public string[] GetFiles(string path) => throw null; + public string[] GetFiles(ServiceStack.Script.DirectoryScripts ds, string path) => throw null; + public string[] GetLogicalDrives(ServiceStack.Script.DirectoryScripts ds) => throw null; + public string[] GetLogicalDrives() => throw null; + public static ServiceStack.Script.ProtectedScripts Instance; + public ServiceStack.Script.IgnoreResult Move(string from, string to) => throw null; + public ServiceStack.Script.IgnoreResult Move(ServiceStack.Script.IOScript os, string from, string to) => throw null; + public ProtectedScripts() => throw null; + public System.Byte[] ReadAllBytes(string path) => throw null; + public System.Byte[] ReadAllBytes(ServiceStack.Script.FileScripts fs, string path) => throw null; + public string[] ReadAllLines(string path) => throw null; + public string[] ReadAllLines(ServiceStack.Script.FileScripts fs, string path) => throw null; + public string ReadAllText(string path) => throw null; + public string ReadAllText(ServiceStack.Script.FileScripts fs, string path) => throw null; + public ServiceStack.Script.IgnoreResult Replace(string from, string to, string backup) => throw null; + public ServiceStack.Script.IgnoreResult Replace(ServiceStack.Script.FileScripts fs, string from, string to, string backup) => throw null; + public ServiceStack.IO.IVirtualFile ResolveFile(string filterName, ServiceStack.Script.ScriptScopeContext scope, string virtualPath) => throw null; + public ServiceStack.IO.IVirtualFile ResolveFile(ServiceStack.IO.IVirtualPathProvider virtualFiles, string fromVirtualPath, string virtualPath) => throw null; + public static string TypeNotFoundErrorMessage(string typeName) => throw null; + public ServiceStack.Script.IgnoreResult WriteAllBytes(string path, System.Byte[] bytes) => throw null; + public ServiceStack.Script.IgnoreResult WriteAllBytes(ServiceStack.Script.FileScripts fs, string path, System.Byte[] bytes) => throw null; + public ServiceStack.Script.IgnoreResult WriteAllLines(string path, string[] lines) => throw null; + public ServiceStack.Script.IgnoreResult WriteAllLines(ServiceStack.Script.FileScripts fs, string path, string[] lines) => throw null; + public ServiceStack.Script.IgnoreResult WriteAllText(string path, string text) => throw null; + public ServiceStack.Script.IgnoreResult WriteAllText(ServiceStack.Script.FileScripts fs, string path, string text) => throw null; + public System.Collections.Generic.IEnumerable allFiles(ServiceStack.IO.IVirtualPathProvider vfs) => throw null; + public System.Collections.Generic.IEnumerable allFiles() => throw null; + public System.Reflection.MemberInfo[] allMemberInfos(object o) => throw null; + public ServiceStack.Script.ScriptMethodInfo[] allMethodTypes(object o) => throw null; + public System.Collections.Generic.IEnumerable allRootDirectories(ServiceStack.IO.IVirtualPathProvider vfs) => throw null; + public System.Collections.Generic.IEnumerable allRootDirectories() => throw null; + public System.Collections.Generic.IEnumerable allRootFiles(ServiceStack.IO.IVirtualPathProvider vfs) => throw null; + public System.Collections.Generic.IEnumerable allRootFiles() => throw null; + public string appendToFile(string virtualPath, object contents) => throw null; + public string appendToFile(ServiceStack.IO.IVirtualPathProvider vfs, string virtualPath, object contents) => throw null; + public System.Type assertTypeOf(string name) => throw null; + public System.Byte[] bytesContent(ServiceStack.IO.IVirtualFile file) => throw null; + public object cacheClear(ServiceStack.Script.ScriptScopeContext scope, object cacheNames) => throw null; + public object call(object instance, string name, System.Collections.Generic.List args) => throw null; + public object call(object instance, string name) => throw null; + public string cat(ServiceStack.Script.ScriptScopeContext scope, string target) => throw null; + public string combinePath(string basePath, string relativePath) => throw null; + public string combinePath(ServiceStack.IO.IVirtualPathProvider vfs, string basePath, string relativePath) => throw null; + public string cp(ServiceStack.Script.ScriptScopeContext scope, string from, string to) => throw null; + public object createInstance(System.Type type, System.Collections.Generic.List constructorArgs) => throw null; + public object createInstance(System.Type type) => throw null; + public object @default(string typeName) => throw null; + public string deleteDirectory(string virtualPath) => throw null; + public string deleteDirectory(ServiceStack.IO.IVirtualPathProvider vfs, string virtualPath) => throw null; + public string deleteFile(string virtualPath) => throw null; + public string deleteFile(ServiceStack.IO.IVirtualPathProvider vfs, string virtualPath) => throw null; + public ServiceStack.IO.IVirtualDirectory dir(string virtualPath) => throw null; + public ServiceStack.IO.IVirtualDirectory dir(ServiceStack.IO.IVirtualPathProvider vfs, string virtualPath) => throw null; + public string dirDelete(string virtualPath) => throw null; + public System.Collections.Generic.IEnumerable dirDirectories(string dirPath) => throw null; + public System.Collections.Generic.IEnumerable dirDirectories(ServiceStack.IO.IVirtualPathProvider vfs, string dirPath) => throw null; + public ServiceStack.IO.IVirtualDirectory dirDirectory(string dirPath, string dirName) => throw null; + public ServiceStack.IO.IVirtualDirectory dirDirectory(ServiceStack.IO.IVirtualPathProvider vfs, string dirPath, string dirName) => throw null; + public bool dirExists(string virtualPath) => throw null; + public bool dirExists(ServiceStack.IO.IVirtualPathProvider vfs, string virtualPath) => throw null; + public ServiceStack.IO.IVirtualFile dirFile(string dirPath, string fileName) => throw null; + public ServiceStack.IO.IVirtualFile dirFile(ServiceStack.IO.IVirtualPathProvider vfs, string dirPath, string fileName) => throw null; + public System.Collections.Generic.IEnumerable dirFiles(string dirPath) => throw null; + public System.Collections.Generic.IEnumerable dirFiles(ServiceStack.IO.IVirtualPathProvider vfs, string dirPath) => throw null; + public System.Collections.Generic.IEnumerable dirFilesFind(string dirPath, string globPattern) => throw null; + public System.Collections.Generic.IEnumerable dirFindFiles(ServiceStack.IO.IVirtualDirectory dir, string globPattern, int maxDepth) => throw null; + public System.Collections.Generic.IEnumerable dirFindFiles(ServiceStack.IO.IVirtualDirectory dir, string globPattern) => throw null; + public string exePath(string exeName) => throw null; + public ServiceStack.Script.StopExecution exit(int exitCode) => throw null; + public ServiceStack.IO.IVirtualFile file(string virtualPath) => throw null; + public ServiceStack.IO.IVirtualFile file(ServiceStack.IO.IVirtualPathProvider vfs, string virtualPath) => throw null; + public string fileAppend(string virtualPath, object contents) => throw null; + public System.Byte[] fileBytesContent(string virtualPath) => throw null; + public System.Byte[] fileBytesContent(ServiceStack.IO.IVirtualPathProvider vfs, string virtualPath) => throw null; + public string fileContentType(ServiceStack.IO.IVirtualFile file) => throw null; + public object fileContents(object file) => throw null; + public object fileContents(ServiceStack.IO.IVirtualPathProvider vfs, string virtualPath) => throw null; + public System.Threading.Tasks.Task fileContentsWithCache(ServiceStack.Script.ScriptScopeContext scope, string virtualPath, object options) => throw null; + public System.Threading.Tasks.Task fileContentsWithCache(ServiceStack.Script.ScriptScopeContext scope, string virtualPath) => throw null; + public string fileDelete(string virtualPath) => throw null; + public bool fileExists(string virtualPath) => throw null; + public bool fileExists(ServiceStack.IO.IVirtualPathProvider vfs, string virtualPath) => throw null; + public string fileHash(string virtualPath) => throw null; + public string fileHash(ServiceStack.IO.IVirtualPathProvider vfs, string virtualPath) => throw null; + public string fileHash(ServiceStack.IO.IVirtualFile file) => throw null; + public bool fileIsBinary(ServiceStack.IO.IVirtualFile file) => throw null; + public string fileReadAll(string virtualPath) => throw null; + public System.Byte[] fileReadAllBytes(string virtualPath) => throw null; + public string fileTextContents(string virtualPath) => throw null; + public string fileTextContents(ServiceStack.IO.IVirtualPathProvider vfs, string virtualPath) => throw null; + public string fileWrite(string virtualPath, object contents) => throw null; + public System.Collections.Generic.IEnumerable filesFind(string globPattern) => throw null; + public System.Collections.Generic.IEnumerable findFiles(string globPattern) => throw null; + public System.Collections.Generic.IEnumerable findFiles(ServiceStack.IO.IVirtualPathProvider vfs, string globPattern, int maxDepth) => throw null; + public System.Collections.Generic.IEnumerable findFiles(ServiceStack.IO.IVirtualPathProvider vfs, string globPattern) => throw null; + public System.Collections.Generic.IEnumerable findFilesInDirectory(string dirPath, string globPattern) => throw null; + public System.Collections.Generic.IEnumerable findFilesInDirectory(ServiceStack.IO.IVirtualPathProvider vfs, string dirPath, string globPattern) => throw null; + public System.Type getType(object instance) => throw null; + public System.Threading.Tasks.Task ifDebugIncludeScript(ServiceStack.Script.ScriptScopeContext scope, string virtualPath) => throw null; + public System.Threading.Tasks.Task includeFile(ServiceStack.Script.ScriptScopeContext scope, string virtualPath) => throw null; + public System.Threading.Tasks.Task includeFileWithCache(ServiceStack.Script.ScriptScopeContext scope, string virtualPath, object options) => throw null; + public System.Threading.Tasks.Task includeFileWithCache(ServiceStack.Script.ScriptScopeContext scope, string virtualPath) => throw null; + public System.Threading.Tasks.Task includeUrl(ServiceStack.Script.ScriptScopeContext scope, string url, object options) => throw null; + public System.Threading.Tasks.Task includeUrl(ServiceStack.Script.ScriptScopeContext scope, string url) => throw null; + public System.Threading.Tasks.Task includeUrlWithCache(ServiceStack.Script.ScriptScopeContext scope, string url, object options) => throw null; + public System.Threading.Tasks.Task includeUrlWithCache(ServiceStack.Script.ScriptScopeContext scope, string url) => throw null; + public ServiceStack.Script.IgnoreResult inspectVars(object vars) => throw null; + public object invalidateAllCaches(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public ServiceStack.Script.ScriptMethodInfo[] methodTypes(object o) => throw null; + public System.Collections.Generic.List methods(object o) => throw null; + public string mkdir(ServiceStack.Script.ScriptScopeContext scope, string target) => throw null; + public string mv(ServiceStack.Script.ScriptScopeContext scope, string from, string to) => throw null; + public object @new(string typeName, System.Collections.Generic.List constructorArgs) => throw null; + public object @new(string typeName) => throw null; + public string osPaths(string path) => throw null; + public string proc(ServiceStack.Script.ScriptScopeContext scope, string fileName, System.Collections.Generic.Dictionary options) => throw null; + public string proc(ServiceStack.Script.ScriptScopeContext scope, string fileName) => throw null; + public object resolve(ServiceStack.Script.ScriptScopeContext scope, object type) => throw null; + public ServiceStack.IO.IVirtualFile resolveFile(ServiceStack.Script.ScriptScopeContext scope, string virtualPath) => throw null; + public string rm(ServiceStack.Script.ScriptScopeContext scope, string from, string to) => throw null; + public string rmdir(ServiceStack.Script.ScriptScopeContext scope, string target) => throw null; + public System.Collections.Generic.List scriptMethodNames(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public System.Collections.Generic.List scriptMethodSignatures(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public System.Collections.Generic.List scriptMethods(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public object set(object instance, System.Collections.Generic.Dictionary args) => throw null; + public string sh(ServiceStack.Script.ScriptScopeContext scope, string arguments, System.Collections.Generic.Dictionary options) => throw null; + public string sh(ServiceStack.Script.ScriptScopeContext scope, string arguments) => throw null; + public string sha1(object target) => throw null; + public string sha256(object target) => throw null; + public string sha512(object target) => throw null; + public ServiceStack.Script.ScriptMethodInfo[] staticMethodTypes(object o) => throw null; + public System.Collections.Generic.List staticMethods(object o) => throw null; + public string textContents(ServiceStack.IO.IVirtualFile file) => throw null; + public string touch(ServiceStack.Script.ScriptScopeContext scope, string target) => throw null; + public string typeQualifiedName(System.Type type) => throw null; + public System.Type @typeof(string typeName) => throw null; + public System.Type typeofProgId(string name) => throw null; + public System.ReadOnlyMemory urlBytesContents(ServiceStack.Script.ScriptScopeContext scope, string url, object options) => throw null; + public System.Threading.Tasks.Task urlContents(ServiceStack.Script.ScriptScopeContext scope, string url, object options) => throw null; + public System.Threading.Tasks.Task urlContents(ServiceStack.Script.ScriptScopeContext scope, string url) => throw null; + public System.Threading.Tasks.Task urlContentsWithCache(ServiceStack.Script.ScriptScopeContext scope, string url, object options) => throw null; + public System.Threading.Tasks.Task urlContentsWithCache(ServiceStack.Script.ScriptScopeContext scope, string url) => throw null; + public string urlTextContents(ServiceStack.Script.ScriptScopeContext scope, string url, object options) => throw null; + public string urlTextContents(ServiceStack.Script.ScriptScopeContext scope, string url) => throw null; + public System.Collections.Generic.IEnumerable vfsAllFiles() => throw null; + public System.Collections.Generic.IEnumerable vfsAllRootDirectories() => throw null; + public System.Collections.Generic.IEnumerable vfsAllRootFiles() => throw null; + public string vfsCombinePath(string basePath, string relativePath) => throw null; + public ServiceStack.IO.FileSystemVirtualFiles vfsFileSystem(string dirPath) => throw null; + public ServiceStack.IO.GistVirtualFiles vfsGist(string gistId, string accessToken) => throw null; + public ServiceStack.IO.GistVirtualFiles vfsGist(string gistId) => throw null; + public ServiceStack.IO.MemoryVirtualFiles vfsMemory() => throw null; + public string writeFile(string virtualPath, object contents) => throw null; + public string writeFile(ServiceStack.IO.IVirtualPathProvider vfs, string virtualPath, object contents) => throw null; + public object writeFiles(ServiceStack.IO.IVirtualPathProvider vfs, System.Collections.Generic.Dictionary files) => throw null; + public object writeTextFiles(ServiceStack.IO.IVirtualPathProvider vfs, System.Collections.Generic.Dictionary textFiles) => throw null; + public string xcopy(ServiceStack.Script.ScriptScopeContext scope, string from, string to) => throw null; + } + + // Generated from `ServiceStack.Script.RawScriptBlock` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class RawScriptBlock : ServiceStack.Script.ScriptBlock + { + public override ServiceStack.Script.ScriptLanguage Body { get => throw null; } + public override string Name { get => throw null; } + public RawScriptBlock() => throw null; + public override System.Threading.Tasks.Task WriteAsync(ServiceStack.Script.ScriptScopeContext scope, ServiceStack.Script.PageBlockFragment block, System.Threading.CancellationToken token) => throw null; + } + + // Generated from `ServiceStack.Script.RawString` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class RawString : ServiceStack.IRawString + { + public static ServiceStack.Script.RawString Empty; + public RawString(string value) => throw null; + public string ToRawString() => throw null; + } + + // Generated from `ServiceStack.Script.ReturnValue` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ReturnValue + { + public System.Collections.Generic.Dictionary Args { get => throw null; } + public object Result { get => throw null; } + public ReturnValue(object result, System.Collections.Generic.Dictionary args) => throw null; + } + + // Generated from `ServiceStack.Script.ScopeVars` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ScopeVars : System.Collections.Generic.Dictionary + { + public ScopeVars(int capacity, System.Collections.Generic.IEqualityComparer comparer) => throw null; + public ScopeVars(int capacity) => throw null; + public ScopeVars(System.Collections.Generic.IEqualityComparer comparer) => throw null; + public ScopeVars(System.Collections.Generic.IDictionary dictionary, System.Collections.Generic.IEqualityComparer comparer) => throw null; + public ScopeVars(System.Collections.Generic.IDictionary dictionary) => throw null; + public ScopeVars() => throw null; + } + + // Generated from `ServiceStack.Script.ScriptABlock` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ScriptABlock : ServiceStack.Script.ScriptHtmlBlock + { + public ScriptABlock() => throw null; + public override string Suffix { get => throw null; } + public override string Tag { get => throw null; } + } + + // Generated from `ServiceStack.Script.ScriptBBlock` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ScriptBBlock : ServiceStack.Script.ScriptHtmlBlock + { + public ScriptBBlock() => throw null; + public override string Suffix { get => throw null; } + public override string Tag { get => throw null; } + } + + // Generated from `ServiceStack.Script.ScriptBlock` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public abstract class ScriptBlock : ServiceStack.Script.IConfigureScriptContext + { + protected int AssertWithinMaxQuota(int value) => throw null; + public virtual ServiceStack.Script.ScriptLanguage Body { get => throw null; } + protected bool CanExportScopeArgs(object element) => throw null; + public void Configure(ServiceStack.Script.ScriptContext context) => throw null; + public ServiceStack.Script.ScriptContext Context { get => throw null; set => throw null; } + protected virtual string GetCallTrace(ServiceStack.Script.PageBlockFragment fragment) => throw null; + protected virtual string GetElseCallTrace(ServiceStack.Script.PageElseBlock fragment) => throw null; + public abstract string Name { get; } + public ServiceStack.Script.ISharpPages Pages { get => throw null; set => throw null; } + protected ScriptBlock() => throw null; + public abstract System.Threading.Tasks.Task WriteAsync(ServiceStack.Script.ScriptScopeContext scope, ServiceStack.Script.PageBlockFragment block, System.Threading.CancellationToken token); + protected virtual System.Threading.Tasks.Task WriteAsync(ServiceStack.Script.ScriptScopeContext scope, ServiceStack.Script.PageFragment[] body, string callTrace, System.Threading.CancellationToken cancel) => throw null; + protected virtual System.Threading.Tasks.Task WriteAsync(ServiceStack.Script.ScriptScopeContext scope, ServiceStack.Script.JsStatement[] body, string callTrace, System.Threading.CancellationToken cancel) => throw null; + protected virtual System.Threading.Tasks.Task WriteBodyAsync(ServiceStack.Script.ScriptScopeContext scope, ServiceStack.Script.PageBlockFragment fragment, System.Threading.CancellationToken token) => throw null; + protected virtual System.Threading.Tasks.Task WriteElseAsync(ServiceStack.Script.ScriptScopeContext scope, ServiceStack.Script.PageElseBlock fragment, System.Threading.CancellationToken token) => throw null; + protected System.Threading.Tasks.Task WriteElseAsync(ServiceStack.Script.ScriptScopeContext scope, ServiceStack.Script.PageElseBlock[] elseBlocks, System.Threading.CancellationToken cancel) => throw null; + } + + // Generated from `ServiceStack.Script.ScriptButtonBlock` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ScriptButtonBlock : ServiceStack.Script.ScriptHtmlBlock + { + public ScriptButtonBlock() => throw null; + public override string Tag { get => throw null; } + } + + // Generated from `ServiceStack.Script.ScriptCode` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ScriptCode : ServiceStack.Script.ScriptLanguage + { + public static ServiceStack.Script.ScriptLanguage Language; + public override string Name { get => throw null; } + public override System.Collections.Generic.List Parse(ServiceStack.Script.ScriptContext context, System.ReadOnlyMemory body, System.ReadOnlyMemory modifiers) => throw null; + public override System.Threading.Tasks.Task WritePageFragmentAsync(ServiceStack.Script.ScriptScopeContext scope, ServiceStack.Script.PageFragment fragment, System.Threading.CancellationToken token) => throw null; + public override System.Threading.Tasks.Task WriteStatementAsync(ServiceStack.Script.ScriptScopeContext scope, ServiceStack.Script.JsStatement statement, System.Threading.CancellationToken token) => throw null; + } + + // Generated from `ServiceStack.Script.ScriptCodeUtils` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class ScriptCodeUtils + { + public static ServiceStack.Script.SharpPage CodeBlock(this ServiceStack.Script.ScriptContext context, string code) => throw null; + public static ServiceStack.Script.SharpPage CodeSharpPage(this ServiceStack.Script.ScriptContext context, string code) => throw null; + public static string EnsureReturn(string code) => throw null; + public static object EvaluateCode(this ServiceStack.Script.ScriptContext context, string code, System.Collections.Generic.Dictionary args = default(System.Collections.Generic.Dictionary)) => throw null; + public static T EvaluateCode(this ServiceStack.Script.ScriptContext context, string code, System.Collections.Generic.Dictionary args = default(System.Collections.Generic.Dictionary)) => throw null; + public static System.Threading.Tasks.Task EvaluateCodeAsync(this ServiceStack.Script.ScriptContext context, string code, System.Collections.Generic.Dictionary args = default(System.Collections.Generic.Dictionary)) => throw null; + public static System.Threading.Tasks.Task EvaluateCodeAsync(this ServiceStack.Script.ScriptContext context, string code, System.Collections.Generic.Dictionary args = default(System.Collections.Generic.Dictionary)) => throw null; + public static ServiceStack.Script.JsBlockStatement ParseCode(this ServiceStack.Script.ScriptContext context, string code) => throw null; + public static ServiceStack.Script.JsBlockStatement ParseCode(this ServiceStack.Script.ScriptContext context, System.ReadOnlyMemory code) => throw null; + public static System.ReadOnlyMemory ParseCodeScriptBlock(this System.ReadOnlyMemory literal, ServiceStack.Script.ScriptContext context, out ServiceStack.Script.PageBlockFragment blockFragment) => throw null; + public static string RenderCode(this ServiceStack.Script.ScriptContext context, string code, System.Collections.Generic.Dictionary args = default(System.Collections.Generic.Dictionary)) => throw null; + public static System.Threading.Tasks.Task RenderCodeAsync(this ServiceStack.Script.ScriptContext context, string code, System.Collections.Generic.Dictionary args = default(System.Collections.Generic.Dictionary)) => throw null; + } + + // Generated from `ServiceStack.Script.ScriptConfig` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class ScriptConfig + { + public static bool AllowAssignmentExpressions { get => throw null; set => throw null; } + public static bool AllowUnixPipeSyntax { get => throw null; set => throw null; } + public static System.Collections.Generic.HashSet CaptureAndEvaluateExceptionsToNull { get => throw null; set => throw null; } + public static System.Globalization.CultureInfo CreateCulture() => throw null; + public static System.Globalization.CultureInfo DefaultCulture { get => throw null; set => throw null; } + public static string DefaultDateFormat { get => throw null; set => throw null; } + public static string DefaultDateTimeFormat { get => throw null; set => throw null; } + public static string DefaultErrorClassName { get => throw null; set => throw null; } + public static System.TimeSpan DefaultFileCacheExpiry { get => throw null; set => throw null; } + public static string DefaultIndent { get => throw null; set => throw null; } + public static string DefaultJsConfig { get => throw null; set => throw null; } + public static string DefaultNewLine { get => throw null; set => throw null; } + public static System.StringComparison DefaultStringComparison { get => throw null; set => throw null; } + public static string DefaultTableClassName { get => throw null; set => throw null; } + public static string DefaultTimeFormat { get => throw null; set => throw null; } + public static System.TimeSpan DefaultUrlCacheExpiry { get => throw null; set => throw null; } + public static System.Collections.Generic.HashSet FatalExceptions { get => throw null; set => throw null; } + public static ServiceStack.Script.ParseRealNumber ParseRealNumber; + } + + // Generated from `ServiceStack.Script.ScriptConstants` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class ScriptConstants + { + public const string AssetsBase = default; + public const string AssignError = default; + public const string BaseUrl = default; + public const string CatchError = default; + public const string Comparer = default; + public const string Debug = default; + public const string DefaultCulture = default; + public const string DefaultDateFormat = default; + public const string DefaultDateTimeFormat = default; + public const string DefaultErrorClassName = default; + public const string DefaultFileCacheExpiry = default; + public const string DefaultIndent = default; + public const string DefaultJsConfig = default; + public const string DefaultNewLine = default; + public const string DefaultStringComparison = default; + public const string DefaultTableClassName = default; + public const string DefaultTimeFormat = default; + public const string DefaultUrlCacheExpiry = default; + public const string Dto = default; + public static ServiceStack.IRawString EmptyRawString { get => throw null; } + public const string ErrorCode = default; + public const string ErrorMessage = default; + public static ServiceStack.IRawString FalseRawString { get => throw null; } + public const string Field = default; + public const string Format = default; + public const string Global = default; + public const string HtmlEncode = default; + public const string IfErrorReturn = default; + public const string Index = default; + public const string It = default; + public const string Map = default; + public const string Model = default; + public const string Page = default; + public const string Partial = default; + public const string PartialArg = default; + public const string PathArgs = default; + public const string PathBase = default; + public const string PathInfo = default; + public const string Request = default; + public const string Return = default; + public const string TempFilePath = default; + public static ServiceStack.IRawString TrueRawString { get => throw null; } + } + + // Generated from `ServiceStack.Script.ScriptContext` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ScriptContext : System.IDisposable + { + public bool AllowScriptingOfAllTypes { get => throw null; set => throw null; } + public ServiceStack.Configuration.IAppSettings AppSettings { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary Args { get => throw null; } + public ServiceStack.Script.ProtectedScripts AssertProtectedMethods() => throw null; + public string AssignExceptionsTo { get => throw null; set => throw null; } + public System.Collections.Concurrent.ConcurrentDictionary> AssignExpressionCache { get => throw null; } + public System.Collections.Concurrent.ConcurrentDictionary Cache { get => throw null; } + public ServiceStack.IO.IVirtualFiles CacheFiles { get => throw null; set => throw null; } + public System.Collections.Concurrent.ConcurrentDictionary, object> CacheMemory { get => throw null; } + public bool CheckForModifiedPages { get => throw null; set => throw null; } + public System.TimeSpan? CheckForModifiedPagesAfter { get => throw null; set => throw null; } + public System.Collections.Concurrent.ConcurrentDictionary> CodePageInvokers { get => throw null; } + public System.Collections.Generic.Dictionary CodePages { get => throw null; } + public ServiceStack.IContainer Container { get => throw null; set => throw null; } + public bool DebugMode { get => throw null; set => throw null; } + public ServiceStack.Script.DefaultScripts DefaultFilters { get => throw null; } + public string DefaultLayoutPage { get => throw null; set => throw null; } + public ServiceStack.Script.DefaultScripts DefaultMethods { get => throw null; } + public ServiceStack.Script.ScriptLanguage DefaultScriptLanguage { get => throw null; set => throw null; } + public void Dispose() => throw null; + public ServiceStack.IO.InMemoryVirtualFile EmptyFile { get => throw null; } + public ServiceStack.Script.SharpPage EmptyPage { get => throw null; } + public System.Collections.Generic.HashSet ExcludeFiltersNamed { get => throw null; } + public System.Collections.Concurrent.ConcurrentDictionary> ExpiringCache { get => throw null; } + public System.Collections.Generic.HashSet FileFilterNames { get => throw null; } + public System.Collections.Generic.Dictionary>> FilterTransformers { get => throw null; set => throw null; } + public System.Action GetAssignExpression(System.Type targetType, System.ReadOnlyMemory expression) => throw null; + public ServiceStack.Script.ScriptBlock GetBlock(string name) => throw null; + public ServiceStack.Script.SharpCodePage GetCodePage(string virtualPath) => throw null; + public ServiceStack.Script.PageFormat GetFormat(string extension) => throw null; + public void GetPage(string fromVirtualPath, string virtualPath, out ServiceStack.Script.SharpPage page, out ServiceStack.Script.SharpCodePage codePage) => throw null; + public ServiceStack.Script.SharpPage GetPage(string virtualPath) => throw null; + public string GetPathMapping(string prefix, string key) => throw null; + public ServiceStack.Script.ScriptLanguage GetScriptLanguage(string name) => throw null; + public bool HasInit { get => throw null; set => throw null; } + public ServiceStack.Script.HtmlScripts HtmlMethods { get => throw null; } + public string IndexPage { get => throw null; set => throw null; } + public ServiceStack.Script.ScriptContext Init() => throw null; + public System.Collections.Generic.List InsertPlugins { get => throw null; } + public System.Collections.Generic.List InsertScriptBlocks { get => throw null; } + public System.Collections.Generic.List InsertScriptMethods { get => throw null; } + public System.DateTime? InvalidateCachesBefore { get => throw null; set => throw null; } + public System.Collections.Concurrent.ConcurrentDictionary, ServiceStack.Script.JsToken> JsTokenCache { get => throw null; } + public ServiceStack.Logging.ILog Log { get => throw null; } + public System.Int64 MaxEvaluations { get => throw null; set => throw null; } + public int MaxQuota { get => throw null; set => throw null; } + public int MaxStackDepth { get => throw null; set => throw null; } + public System.Action OnAfterPlugins { get => throw null; set => throw null; } + public System.Action OnRenderException { get => throw null; set => throw null; } + public System.Func> OnUnhandledExpression { get => throw null; set => throw null; } + public ServiceStack.Script.SharpPage OneTimePage(string contents, string ext = default(string)) => throw null; + public System.Collections.Generic.HashSet OnlyEvaluateFiltersWhenSkippingPageFilterExecution { get => throw null; set => throw null; } + public System.Collections.Generic.List PageFormats { get => throw null; set => throw null; } + public ServiceStack.Script.ISharpPages Pages { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary ParseAsLanguage { get => throw null; set => throw null; } + public System.Collections.Concurrent.ConcurrentDictionary PathMappings { get => throw null; } + public System.Collections.Generic.List Plugins { get => throw null; } + public System.Collections.Generic.List> Preprocessors { get => throw null; } + public ServiceStack.Script.ProtectedScripts ProtectedFilters { get => throw null; } + public ServiceStack.Script.ProtectedScripts ProtectedMethods { get => throw null; } + public ServiceStack.Script.ScriptContext RemoveBlocks(System.Predicate match) => throw null; + public ServiceStack.Script.ScriptContext RemoveFilters(System.Predicate match) => throw null; + public System.Collections.Generic.HashSet RemoveNewLineAfterFiltersNamed { get => throw null; set => throw null; } + public void RemovePathMapping(string prefix, string mapPath) => throw null; + public ServiceStack.Script.ScriptContext RemovePlugins(System.Predicate match) => throw null; + public bool RenderExpressionExceptions { get => throw null; set => throw null; } + public System.Collections.Generic.List ScanAssemblies { get => throw null; set => throw null; } + public ServiceStack.Script.ScriptContext ScanType(System.Type type) => throw null; + public System.Collections.Generic.List ScanTypes { get => throw null; set => throw null; } + public System.Collections.Generic.List ScriptAssemblies { get => throw null; set => throw null; } + public System.Collections.Generic.List ScriptBlocks { get => throw null; } + public ScriptContext() => throw null; + public System.Collections.Generic.List ScriptLanguages { get => throw null; } + public System.Collections.Generic.List ScriptMethods { get => throw null; } + public System.Collections.Generic.List ScriptNamespaces { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary ScriptTypeNameMap { get => throw null; } + public System.Collections.Generic.Dictionary ScriptTypeQualifiedNameMap { get => throw null; } + public System.Collections.Generic.List ScriptTypes { get => throw null; set => throw null; } + public string SetPathMapping(string prefix, string mapPath, string toPath) => throw null; + public bool SkipExecutingFiltersIfError { get => throw null; set => throw null; } + public bool TryGetPage(string fromVirtualPath, string virtualPath, out ServiceStack.Script.SharpPage page, out ServiceStack.Script.SharpCodePage codePage) => throw null; + public ServiceStack.IO.IVirtualPathProvider VirtualFiles { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.Script.ScriptContextUtils` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class ScriptContextUtils + { + public static ServiceStack.Script.ScriptScopeContext CreateScope(this ServiceStack.Script.ScriptContext context, System.Collections.Generic.Dictionary args = default(System.Collections.Generic.Dictionary), ServiceStack.Script.ScriptMethods functions = default(ServiceStack.Script.ScriptMethods), ServiceStack.Script.ScriptBlock blocks = default(ServiceStack.Script.ScriptBlock)) => throw null; + public static string ErrorNoReturn; + public static bool EvaluateResult(this ServiceStack.Script.PageResult pageResult, out object returnValue) => throw null; + public static System.Threading.Tasks.Task> EvaluateResultAsync(this ServiceStack.Script.PageResult pageResult) => throw null; + public static System.Exception HandleException(System.Exception e, ServiceStack.Script.PageResult pageResult) => throw null; + public static System.Threading.Tasks.Task RenderAsync(this ServiceStack.Script.PageResult pageResult, System.IO.Stream stream, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static string RenderScript(this ServiceStack.Script.PageResult pageResult) => throw null; + public static System.Threading.Tasks.Task RenderScriptAsync(this ServiceStack.Script.PageResult pageResult, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static void RenderToStream(this ServiceStack.Script.PageResult pageResult, System.IO.Stream stream) => throw null; + public static System.Threading.Tasks.Task RenderToStreamAsync(this ServiceStack.Script.PageResult pageResult, System.IO.Stream stream) => throw null; + public static bool ShouldRethrow(System.Exception e) => throw null; + public static void ThrowNoReturn() => throw null; + } + + // Generated from `ServiceStack.Script.ScriptDdBlock` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ScriptDdBlock : ServiceStack.Script.ScriptHtmlBlock + { + public ScriptDdBlock() => throw null; + public override string Tag { get => throw null; } + } + + // Generated from `ServiceStack.Script.ScriptDivBlock` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ScriptDivBlock : ServiceStack.Script.ScriptHtmlBlock + { + public ScriptDivBlock() => throw null; + public override string Tag { get => throw null; } + } + + // Generated from `ServiceStack.Script.ScriptDlBlock` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ScriptDlBlock : ServiceStack.Script.ScriptHtmlBlock + { + public ScriptDlBlock() => throw null; + public override string Tag { get => throw null; } + } + + // Generated from `ServiceStack.Script.ScriptDtBlock` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ScriptDtBlock : ServiceStack.Script.ScriptHtmlBlock + { + public ScriptDtBlock() => throw null; + public override string Tag { get => throw null; } + } + + // Generated from `ServiceStack.Script.ScriptEmBlock` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ScriptEmBlock : ServiceStack.Script.ScriptHtmlBlock + { + public ScriptEmBlock() => throw null; + public override string Suffix { get => throw null; } + public override string Tag { get => throw null; } + } + + // Generated from `ServiceStack.Script.ScriptException` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ScriptException : System.Exception + { + public ServiceStack.Script.PageResult PageResult { get => throw null; } + public string PageStackTrace { get => throw null; } + public ScriptException(ServiceStack.Script.PageResult pageResult) => throw null; + } + + // Generated from `ServiceStack.Script.ScriptExtensions` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class ScriptExtensions + { + public static string AsString(this object str) => throw null; + public static object InStopFilter(this System.Exception ex, ServiceStack.Script.ScriptScopeContext scope, object options) => throw null; + } + + // Generated from `ServiceStack.Script.ScriptFormBlock` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ScriptFormBlock : ServiceStack.Script.ScriptHtmlBlock + { + public ScriptFormBlock() => throw null; + public override string Tag { get => throw null; } + } + + // Generated from `ServiceStack.Script.ScriptHtmlBlock` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public abstract class ScriptHtmlBlock : ServiceStack.Script.ScriptBlock + { + public override ServiceStack.Script.ScriptLanguage Body { get => throw null; } + public override string Name { get => throw null; } + protected ScriptHtmlBlock() => throw null; + public virtual string Suffix { get => throw null; } + public abstract string Tag { get; } + public override System.Threading.Tasks.Task WriteAsync(ServiceStack.Script.ScriptScopeContext scope, ServiceStack.Script.PageBlockFragment block, System.Threading.CancellationToken token) => throw null; + } + + // Generated from `ServiceStack.Script.ScriptIBlock` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ScriptIBlock : ServiceStack.Script.ScriptHtmlBlock + { + public ScriptIBlock() => throw null; + public override string Suffix { get => throw null; } + public override string Tag { get => throw null; } + } + + // Generated from `ServiceStack.Script.ScriptImgBlock` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ScriptImgBlock : ServiceStack.Script.ScriptHtmlBlock + { + public ScriptImgBlock() => throw null; + public override string Suffix { get => throw null; } + public override string Tag { get => throw null; } + } + + // Generated from `ServiceStack.Script.ScriptInputBlock` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ScriptInputBlock : ServiceStack.Script.ScriptHtmlBlock + { + public ScriptInputBlock() => throw null; + public override string Tag { get => throw null; } + } + + // Generated from `ServiceStack.Script.ScriptLanguage` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public abstract class ScriptLanguage + { + public virtual string LineComment { get => throw null; } + public abstract string Name { get; } + public abstract System.Collections.Generic.List Parse(ServiceStack.Script.ScriptContext context, System.ReadOnlyMemory body, System.ReadOnlyMemory modifiers); + public System.Collections.Generic.List Parse(ServiceStack.Script.ScriptContext context, System.ReadOnlyMemory body) => throw null; + public virtual ServiceStack.Script.PageBlockFragment ParseVerbatimBlock(string blockName, System.ReadOnlyMemory argument, System.ReadOnlyMemory body) => throw null; + protected ScriptLanguage() => throw null; + public static object UnwrapValue(object value) => throw null; + public static ServiceStack.Script.ScriptLanguage Verbatim { get => throw null; } + public virtual System.Threading.Tasks.Task WritePageFragmentAsync(ServiceStack.Script.ScriptScopeContext scope, ServiceStack.Script.PageFragment fragment, System.Threading.CancellationToken token) => throw null; + public virtual System.Threading.Tasks.Task WriteStatementAsync(ServiceStack.Script.ScriptScopeContext scope, ServiceStack.Script.JsStatement statement, System.Threading.CancellationToken token) => throw null; + } + + // Generated from `ServiceStack.Script.ScriptLiBlock` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ScriptLiBlock : ServiceStack.Script.ScriptHtmlBlock + { + public ScriptLiBlock() => throw null; + public override string Tag { get => throw null; } + } + + // Generated from `ServiceStack.Script.ScriptLinkBlock` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ScriptLinkBlock : ServiceStack.Script.ScriptHtmlBlock + { + public ScriptLinkBlock() => throw null; + public override string Suffix { get => throw null; } + public override string Tag { get => throw null; } + } + + // Generated from `ServiceStack.Script.ScriptLisp` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ScriptLisp : ServiceStack.Script.ScriptLanguage, ServiceStack.Script.IConfigureScriptContext + { + public void Configure(ServiceStack.Script.ScriptContext context) => throw null; + public static ServiceStack.Script.ScriptLanguage Language; + public override string LineComment { get => throw null; } + public override string Name { get => throw null; } + public override System.Collections.Generic.List Parse(ServiceStack.Script.ScriptContext context, System.ReadOnlyMemory body, System.ReadOnlyMemory modifiers) => throw null; + public override System.Threading.Tasks.Task WritePageFragmentAsync(ServiceStack.Script.ScriptScopeContext scope, ServiceStack.Script.PageFragment fragment, System.Threading.CancellationToken token) => throw null; + public override System.Threading.Tasks.Task WriteStatementAsync(ServiceStack.Script.ScriptScopeContext scope, ServiceStack.Script.JsStatement statement, System.Threading.CancellationToken token) => throw null; + } + + // Generated from `ServiceStack.Script.ScriptLispUtils` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class ScriptLispUtils + { + public static string EnsureReturn(string lisp) => throw null; + public static object EvaluateLisp(this ServiceStack.Script.ScriptContext context, string lisp, System.Collections.Generic.Dictionary args = default(System.Collections.Generic.Dictionary)) => throw null; + public static T EvaluateLisp(this ServiceStack.Script.ScriptContext context, string lisp, System.Collections.Generic.Dictionary args = default(System.Collections.Generic.Dictionary)) => throw null; + public static System.Threading.Tasks.Task EvaluateLispAsync(this ServiceStack.Script.ScriptContext context, string lisp, System.Collections.Generic.Dictionary args = default(System.Collections.Generic.Dictionary)) => throw null; + public static System.Threading.Tasks.Task EvaluateLispAsync(this ServiceStack.Script.ScriptContext context, string lisp, System.Collections.Generic.Dictionary args = default(System.Collections.Generic.Dictionary)) => throw null; + public static ServiceStack.Script.Lisp.Interpreter GetLispInterpreter(this ServiceStack.Script.ScriptScopeContext scope) => throw null; + public static ServiceStack.Script.Lisp.Interpreter GetLispInterpreter(this ServiceStack.Script.PageResult pageResult, ServiceStack.Script.ScriptScopeContext scope) => throw null; + public static ServiceStack.Script.SharpPage LispSharpPage(this ServiceStack.Script.ScriptContext context, string lisp) => throw null; + public static ServiceStack.Script.LispStatements ParseLisp(this ServiceStack.Script.ScriptContext context, string lisp) => throw null; + public static ServiceStack.Script.LispStatements ParseLisp(this ServiceStack.Script.ScriptContext context, System.ReadOnlyMemory lisp) => throw null; + public static string RenderLisp(this ServiceStack.Script.ScriptContext context, string lisp, System.Collections.Generic.Dictionary args = default(System.Collections.Generic.Dictionary)) => throw null; + public static System.Threading.Tasks.Task RenderLispAsync(this ServiceStack.Script.ScriptContext context, string lisp, System.Collections.Generic.Dictionary args = default(System.Collections.Generic.Dictionary)) => throw null; + } + + // Generated from `ServiceStack.Script.ScriptMetaBlock` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ScriptMetaBlock : ServiceStack.Script.ScriptHtmlBlock + { + public ScriptMetaBlock() => throw null; + public override string Suffix { get => throw null; } + public override string Tag { get => throw null; } + } + + // Generated from `ServiceStack.Script.ScriptMethodInfo` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ScriptMethodInfo + { + public string Body { get => throw null; } + public static ServiceStack.Script.ScriptMethodInfo Create(System.Reflection.MethodInfo mi) => throw null; + public string FirstParam { get => throw null; } + public string FirstParamType { get => throw null; } + public System.Reflection.MethodInfo GetMethodInfo() => throw null; + public static System.Collections.Generic.List GetScriptMethods(System.Type scriptMethodsType, System.Func where = default(System.Func)) => throw null; + public string Name { get => throw null; } + public int ParamCount { get => throw null; } + public string[] ParamNames { get => throw null; } + public string[] ParamTypes { get => throw null; } + public string[] RemainingParams { get => throw null; } + public string Return { get => throw null; } + public string ReturnType { get => throw null; } + public ScriptMethodInfo(System.Reflection.MethodInfo methodInfo, System.Reflection.ParameterInfo[] @params) => throw null; + public string ScriptSignature { get => throw null; } + public string Signature { get => throw null; } + public ServiceStack.ScriptMethodType ToScriptMethodType() => throw null; + public override string ToString() => throw null; + } + + // Generated from `ServiceStack.Script.ScriptMethods` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ScriptMethods + { + public ServiceStack.Script.ScriptContext Context { get => throw null; set => throw null; } + public ServiceStack.MethodInvoker GetInvoker(string name, int argsCount, ServiceStack.Script.InvokerType type) => throw null; + public System.Collections.Concurrent.ConcurrentDictionary InvokerCache { get => throw null; } + public ServiceStack.Script.ISharpPages Pages { get => throw null; set => throw null; } + public System.Collections.Generic.List QueryFilters(string filterName) => throw null; + public ScriptMethods() => throw null; + } + + // Generated from `ServiceStack.Script.ScriptOlBlock` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ScriptOlBlock : ServiceStack.Script.ScriptHtmlBlock + { + public ScriptOlBlock() => throw null; + public override string Tag { get => throw null; } + } + + // Generated from `ServiceStack.Script.ScriptOptionBlock` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ScriptOptionBlock : ServiceStack.Script.ScriptHtmlBlock + { + public ScriptOptionBlock() => throw null; + public override string Tag { get => throw null; } + } + + // Generated from `ServiceStack.Script.ScriptPBlock` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ScriptPBlock : ServiceStack.Script.ScriptHtmlBlock + { + public ScriptPBlock() => throw null; + public override string Tag { get => throw null; } + } + + // Generated from `ServiceStack.Script.ScriptPreprocessors` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class ScriptPreprocessors + { + public static string TransformCodeBlocks(string script) => throw null; + public static string TransformStatementBody(string body) => throw null; + } + + // Generated from `ServiceStack.Script.ScriptScopeContext` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public struct ScriptScopeContext + { + public ServiceStack.Script.ScriptScopeContext Clone() => throw null; + public ServiceStack.Script.SharpCodePage CodePage { get => throw null; } + public ServiceStack.Script.ScriptContext Context { get => throw null; } + public System.IO.Stream OutputStream { get => throw null; } + public ServiceStack.Script.SharpPage Page { get => throw null; } + public ServiceStack.Script.PageResult PageResult { get => throw null; } + public System.Collections.Generic.Dictionary ScopedParams { get => throw null; set => throw null; } + public ScriptScopeContext(ServiceStack.Script.ScriptContext context, System.Collections.Generic.Dictionary scopedParams) => throw null; + public ScriptScopeContext(ServiceStack.Script.PageResult pageResult, System.IO.Stream outputStream, System.Collections.Generic.Dictionary scopedParams) => throw null; + // Stub generator skipped constructor + public static implicit operator ServiceStack.Templates.TemplateScopeContext(ServiceStack.Script.ScriptScopeContext from) => throw null; + } + + // Generated from `ServiceStack.Script.ScriptScopeContextUtils` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class ScriptScopeContextUtils + { + public static ServiceStack.Script.ScriptScopeContext CreateScopedContext(this ServiceStack.Script.ScriptScopeContext scope, string template, System.Collections.Generic.Dictionary scopeParams = default(System.Collections.Generic.Dictionary), bool cachePage = default(bool)) => throw null; + public static object EvaluateExpression(this ServiceStack.Script.ScriptScopeContext scope, string expr) => throw null; + public static object GetArgument(this ServiceStack.Script.ScriptScopeContext scope, string name) => throw null; + public static object GetValue(this ServiceStack.Script.ScriptScopeContext scope, string name) => throw null; + public static void InvokeAssignExpression(this ServiceStack.Script.ScriptScopeContext scope, string assignExpr, object target, object value) => throw null; + public static ServiceStack.Script.StopExecution ReturnValue(this ServiceStack.Script.ScriptScopeContext scope, object returnValue, System.Collections.Generic.Dictionary returnArgs = default(System.Collections.Generic.Dictionary)) => throw null; + public static ServiceStack.Script.ScriptScopeContext ScopeWith(this ServiceStack.Script.ScriptScopeContext parentContext, System.Collections.Generic.Dictionary scopedParams = default(System.Collections.Generic.Dictionary), System.IO.Stream outputStream = default(System.IO.Stream)) => throw null; + public static ServiceStack.Script.ScriptScopeContext ScopeWithParams(this ServiceStack.Script.ScriptScopeContext parentContext, System.Collections.Generic.Dictionary scopedParams) => throw null; + public static ServiceStack.Script.ScriptScopeContext ScopeWithStream(this ServiceStack.Script.ScriptScopeContext scope, System.IO.Stream stream) => throw null; + public static bool TryGetMethod(this ServiceStack.Script.ScriptScopeContext scope, string name, int fnArgValuesCount, out System.Delegate fn, out ServiceStack.Script.ScriptMethods scriptMethod, out bool requiresScope) => throw null; + public static bool TryGetValue(this ServiceStack.Script.ScriptScopeContext scope, string name, out object value) => throw null; + public static System.Threading.Tasks.Task WritePageAsync(this ServiceStack.Script.ScriptScopeContext scope, ServiceStack.Script.SharpPage page, ServiceStack.Script.SharpCodePage codePage, System.Collections.Generic.Dictionary pageParams, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task WritePageAsync(this ServiceStack.Script.ScriptScopeContext scope) => throw null; + } + + // Generated from `ServiceStack.Script.ScriptScriptBlock` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ScriptScriptBlock : ServiceStack.Script.ScriptHtmlBlock + { + public ScriptScriptBlock() => throw null; + public override string Suffix { get => throw null; } + public override string Tag { get => throw null; } + } + + // Generated from `ServiceStack.Script.ScriptSelectBlock` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ScriptSelectBlock : ServiceStack.Script.ScriptHtmlBlock + { + public ScriptSelectBlock() => throw null; + public override string Tag { get => throw null; } + } + + // Generated from `ServiceStack.Script.ScriptSpanBlock` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ScriptSpanBlock : ServiceStack.Script.ScriptHtmlBlock + { + public ScriptSpanBlock() => throw null; + public override string Suffix { get => throw null; } + public override string Tag { get => throw null; } + } + + // Generated from `ServiceStack.Script.ScriptStrongBlock` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ScriptStrongBlock : ServiceStack.Script.ScriptHtmlBlock + { + public ScriptStrongBlock() => throw null; + public override string Suffix { get => throw null; } + public override string Tag { get => throw null; } + } + + // Generated from `ServiceStack.Script.ScriptStyleBlock` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ScriptStyleBlock : ServiceStack.Script.ScriptHtmlBlock + { + public ScriptStyleBlock() => throw null; + public override string Suffix { get => throw null; } + public override string Tag { get => throw null; } + } + + // Generated from `ServiceStack.Script.ScriptTBodyBlock` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ScriptTBodyBlock : ServiceStack.Script.ScriptHtmlBlock + { + public ScriptTBodyBlock() => throw null; + public override string Tag { get => throw null; } + } + + // Generated from `ServiceStack.Script.ScriptTFootBlock` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ScriptTFootBlock : ServiceStack.Script.ScriptHtmlBlock + { + public ScriptTFootBlock() => throw null; + public override string Tag { get => throw null; } + } + + // Generated from `ServiceStack.Script.ScriptTHeadBlock` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ScriptTHeadBlock : ServiceStack.Script.ScriptHtmlBlock + { + public ScriptTHeadBlock() => throw null; + public override string Tag { get => throw null; } + } + + // Generated from `ServiceStack.Script.ScriptTableBlock` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ScriptTableBlock : ServiceStack.Script.ScriptHtmlBlock + { + public ScriptTableBlock() => throw null; + public override string Tag { get => throw null; } + } + + // Generated from `ServiceStack.Script.ScriptTdBlock` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ScriptTdBlock : ServiceStack.Script.ScriptHtmlBlock + { + public ScriptTdBlock() => throw null; + public override string Tag { get => throw null; } + } + + // Generated from `ServiceStack.Script.ScriptTemplate` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ScriptTemplate : ServiceStack.Script.ScriptLanguage + { + public static ServiceStack.Script.ScriptLanguage Language; + public override string Name { get => throw null; } + public override System.Collections.Generic.List Parse(ServiceStack.Script.ScriptContext context, System.ReadOnlyMemory body, System.ReadOnlyMemory modifiers) => throw null; + public override System.Threading.Tasks.Task WritePageFragmentAsync(ServiceStack.Script.ScriptScopeContext scope, ServiceStack.Script.PageFragment fragment, System.Threading.CancellationToken token) => throw null; + } + + // Generated from `ServiceStack.Script.ScriptTemplateUtils` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class ScriptTemplateUtils + { + public static System.Collections.Concurrent.ConcurrentDictionary> BinderCache { get => throw null; } + public static System.Func Compile(System.Type type, System.ReadOnlyMemory expr) => throw null; + public static System.Action CompileAssign(System.Type type, System.ReadOnlyMemory expr) => throw null; + public static System.Reflection.MethodInfo CreateConvertMethod(System.Type toType) => throw null; + public static object Evaluate(this ServiceStack.Script.ScriptContext context, string script, System.Collections.Generic.Dictionary args = default(System.Collections.Generic.Dictionary)) => throw null; + public static T Evaluate(this ServiceStack.Script.ScriptContext context, string script, System.Collections.Generic.Dictionary args = default(System.Collections.Generic.Dictionary)) => throw null; + public static System.Threading.Tasks.Task EvaluateAsync(this ServiceStack.Script.ScriptContext context, string script, System.Collections.Generic.Dictionary args = default(System.Collections.Generic.Dictionary)) => throw null; + public static System.Threading.Tasks.Task EvaluateAsync(this ServiceStack.Script.ScriptContext context, string script, System.Collections.Generic.Dictionary args = default(System.Collections.Generic.Dictionary)) => throw null; + public static object EvaluateBinding(ServiceStack.Script.ScriptScopeContext scope, ServiceStack.Script.JsToken token) => throw null; + public static T EvaluateBindingAs(ServiceStack.Script.ScriptScopeContext scope, ServiceStack.Script.JsToken token) => throw null; + public static string EvaluateScript(this ServiceStack.Script.ScriptContext context, string script, out ServiceStack.Script.ScriptException error) => throw null; + public static string EvaluateScript(this ServiceStack.Script.ScriptContext context, string script, System.Collections.Generic.Dictionary args, out ServiceStack.Script.ScriptException error) => throw null; + public static string EvaluateScript(this ServiceStack.Script.ScriptContext context, string script, System.Collections.Generic.Dictionary args = default(System.Collections.Generic.Dictionary)) => throw null; + public static System.Threading.Tasks.Task EvaluateScriptAsync(this ServiceStack.Script.ScriptContext context, string script, System.Collections.Generic.Dictionary args = default(System.Collections.Generic.Dictionary)) => throw null; + public static System.Func GetMemberExpression(System.Type targetType, System.ReadOnlyMemory expression) => throw null; + public static bool IsWhiteSpace(this System.Char c) => throw null; + public static System.Collections.Generic.List ParseScript(this ServiceStack.Script.ScriptContext context, System.ReadOnlyMemory text) => throw null; + public static System.Collections.Generic.List ParseTemplate(this ServiceStack.Script.ScriptContext context, System.ReadOnlyMemory text) => throw null; + public static System.Collections.Generic.List ParseTemplate(string text) => throw null; + public static System.ReadOnlyMemory ParseTemplateBody(this System.ReadOnlyMemory literal, System.ReadOnlyMemory blockName, out System.ReadOnlyMemory body) => throw null; + public static System.ReadOnlyMemory ParseTemplateElseBlock(this System.ReadOnlyMemory literal, string blockName, out System.ReadOnlyMemory elseArgument, out System.ReadOnlyMemory elseBody) => throw null; + public static System.ReadOnlyMemory ParseTemplateScriptBlock(this System.ReadOnlyMemory literal, ServiceStack.Script.ScriptContext context, out ServiceStack.Script.PageBlockFragment blockFragment) => throw null; + public static string RenderScript(this ServiceStack.Script.ScriptContext context, string script, out ServiceStack.Script.ScriptException error) => throw null; + public static string RenderScript(this ServiceStack.Script.ScriptContext context, string script, System.Collections.Generic.Dictionary args, out ServiceStack.Script.ScriptException error) => throw null; + public static string RenderScript(this ServiceStack.Script.ScriptContext context, string script, System.Collections.Generic.Dictionary args = default(System.Collections.Generic.Dictionary)) => throw null; + public static System.Threading.Tasks.Task RenderScriptAsync(this ServiceStack.Script.ScriptContext context, string script, System.Collections.Generic.Dictionary args = default(System.Collections.Generic.Dictionary)) => throw null; + public static ServiceStack.Script.SharpPage SharpScriptPage(this ServiceStack.Script.ScriptContext context, string code) => throw null; + public static ServiceStack.Script.SharpPage TemplateSharpPage(this ServiceStack.Script.ScriptContext context, string code) => throw null; + public static ServiceStack.IRawString ToRawString(this string value) => throw null; + } + + // Generated from `ServiceStack.Script.ScriptTextAreaBlock` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ScriptTextAreaBlock : ServiceStack.Script.ScriptHtmlBlock + { + public ScriptTextAreaBlock() => throw null; + public override string Tag { get => throw null; } + } + + // Generated from `ServiceStack.Script.ScriptTrBlock` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ScriptTrBlock : ServiceStack.Script.ScriptHtmlBlock + { + public ScriptTrBlock() => throw null; + public override string Tag { get => throw null; } + } + + // Generated from `ServiceStack.Script.ScriptUlBlock` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ScriptUlBlock : ServiceStack.Script.ScriptHtmlBlock + { + public ScriptUlBlock() => throw null; + public override string Tag { get => throw null; } + } + + // Generated from `ServiceStack.Script.ScriptVerbatim` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ScriptVerbatim : ServiceStack.Script.ScriptLanguage + { + public static ServiceStack.Script.ScriptLanguage Language; + public override string Name { get => throw null; } + public override System.Collections.Generic.List Parse(ServiceStack.Script.ScriptContext context, System.ReadOnlyMemory body, System.ReadOnlyMemory modifiers) => throw null; + } + + // Generated from `ServiceStack.Script.SharpCodePage` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public abstract class SharpCodePage : System.IDisposable + { + public System.Collections.Generic.Dictionary Args { get => throw null; } + public ServiceStack.Script.ScriptContext Context { get => throw null; set => throw null; } + public virtual void Dispose() => throw null; + public ServiceStack.Script.PageFormat Format { get => throw null; set => throw null; } + public bool HasInit { get => throw null; set => throw null; } + public virtual ServiceStack.Script.SharpCodePage Init() => throw null; + public string Layout { get => throw null; set => throw null; } + public ServiceStack.Script.SharpPage LayoutPage { get => throw null; set => throw null; } + public ServiceStack.Script.ISharpPages Pages { get => throw null; set => throw null; } + public ServiceStack.Script.ScriptScopeContext Scope { get => throw null; set => throw null; } + protected SharpCodePage(string layout = default(string)) => throw null; + public string VirtualPath { get => throw null; set => throw null; } + public System.Threading.Tasks.Task WriteAsync(ServiceStack.Script.ScriptScopeContext scope) => throw null; + } + + // Generated from `ServiceStack.Script.SharpPage` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class SharpPage + { + public System.Collections.Generic.Dictionary Args { get => throw null; set => throw null; } + public System.ReadOnlyMemory BodyContents { get => throw null; set => throw null; } + public ServiceStack.Script.ScriptContext Context { get => throw null; } + public ServiceStack.IO.IVirtualFile File { get => throw null; } + public System.ReadOnlyMemory FileContents { get => throw null; set => throw null; } + public ServiceStack.Script.PageFormat Format { get => throw null; } + public bool HasInit { get => throw null; set => throw null; } + public virtual System.Threading.Tasks.Task Init() => throw null; + public bool IsImmutable { get => throw null; set => throw null; } + public bool IsLayout { get => throw null; set => throw null; } + public bool IsTempFile { get => throw null; } + public System.DateTime LastModified { get => throw null; set => throw null; } + public System.DateTime LastModifiedCheck { get => throw null; set => throw null; } + public ServiceStack.Script.SharpPage LayoutPage { get => throw null; set => throw null; } + public System.Threading.Tasks.Task Load() => throw null; + public ServiceStack.Script.PageFragment[] PageFragments { get => throw null; set => throw null; } + public ServiceStack.Script.ScriptLanguage ScriptLanguage { get => throw null; set => throw null; } + public SharpPage(ServiceStack.Script.ScriptContext context, ServiceStack.Script.PageFragment[] body) => throw null; + public SharpPage(ServiceStack.Script.ScriptContext context, ServiceStack.IO.IVirtualFile file, ServiceStack.Script.PageFormat format = default(ServiceStack.Script.PageFormat)) => throw null; + public string VirtualPath { get => throw null; } + } + + // Generated from `ServiceStack.Script.SharpPages` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class SharpPages : ServiceStack.Templates.ITemplatePages, ServiceStack.Script.ISharpPages + { + public virtual ServiceStack.Script.SharpPage AddPage(string virtualPath, ServiceStack.IO.IVirtualFile file) => throw null; + public ServiceStack.Script.ScriptContext Context { get => throw null; } + public ServiceStack.Script.SharpCodePage GetCodePage(string virtualPath) => throw null; + public System.DateTime GetLastModified(ServiceStack.Script.SharpPage page) => throw null; + public System.DateTime GetLastModifiedPage(ServiceStack.Script.SharpPage page) => throw null; + public virtual ServiceStack.Script.SharpPage GetPage(string pathInfo) => throw null; + public static string Layout; + public virtual ServiceStack.Script.SharpPage OneTimePage(string contents, string ext) => throw null; + public ServiceStack.Script.SharpPage OneTimePage(string contents, string ext, System.Action init) => throw null; + public virtual ServiceStack.Script.SharpPage ResolveLayoutPage(ServiceStack.Script.SharpPage page, string layout) => throw null; + public virtual ServiceStack.Script.SharpPage ResolveLayoutPage(ServiceStack.Script.SharpCodePage page, string layout) => throw null; + public SharpPages(ServiceStack.Script.ScriptContext context) => throw null; + public virtual ServiceStack.Script.SharpPage TryGetPage(string path) => throw null; + } + + // Generated from `ServiceStack.Script.SharpPartialPage` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class SharpPartialPage : ServiceStack.Script.SharpPage + { + public override System.Threading.Tasks.Task Init() => throw null; + public SharpPartialPage(ServiceStack.Script.ScriptContext context, string name, System.Collections.Generic.IEnumerable body, string format, System.Collections.Generic.Dictionary args = default(System.Collections.Generic.Dictionary)) : base(default(ServiceStack.Script.ScriptContext), default(ServiceStack.Script.PageFragment[])) => throw null; + } + + // Generated from `ServiceStack.Script.SharpScript` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class SharpScript : ServiceStack.Script.ScriptLanguage + { + public static ServiceStack.Script.ScriptLanguage Language; + public override string Name { get => throw null; } + public override System.Collections.Generic.List Parse(ServiceStack.Script.ScriptContext context, System.ReadOnlyMemory body, System.ReadOnlyMemory modifiers) => throw null; + } + + // Generated from `ServiceStack.Script.StopExecution` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class StopExecution : ServiceStack.Script.IResultInstruction + { + public static ServiceStack.Script.StopExecution Value; + } + + // Generated from `ServiceStack.Script.StopFilterExecutionException` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class StopFilterExecutionException : ServiceStack.StopExecutionException, ServiceStack.Model.IResponseStatusConvertible + { + public object Options { get => throw null; } + public ServiceStack.Script.ScriptScopeContext Scope { get => throw null; } + public StopFilterExecutionException(ServiceStack.Script.ScriptScopeContext scope, object options, System.Exception innerException) => throw null; + public ServiceStack.ResponseStatus ToResponseStatus() => throw null; + } + + // Generated from `ServiceStack.Script.SyntaxErrorException` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class SyntaxErrorException : System.ArgumentException + { + public SyntaxErrorException(string message, System.Exception innerException) => throw null; + public SyntaxErrorException(string message) => throw null; + public SyntaxErrorException() => throw null; + } + + // Generated from `ServiceStack.Script.TemplateFilterUtils` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class TemplateFilterUtils + { + public static ServiceStack.Script.ScriptScopeContext AddItemToScope(this ServiceStack.Script.ScriptScopeContext scope, string itemBinding, object item, int index) => throw null; + public static ServiceStack.Script.ScriptScopeContext AddItemToScope(this ServiceStack.Script.ScriptScopeContext scope, string itemBinding, object item) => throw null; + public static System.Collections.Generic.IEnumerable AssertEnumerable(this object items, string filterName) => throw null; + public static string AssertExpression(this ServiceStack.Script.ScriptScopeContext scope, string filterName, object expression) => throw null; + public static ServiceStack.Script.JsToken AssertExpression(this ServiceStack.Script.ScriptScopeContext scope, string filterName, object expression, object scopeOptions, out string itemBinding) => throw null; + public static object AssertNoCircularDeps(this object value) => throw null; + public static System.Collections.Generic.Dictionary AssertOptions(this object scopedParams, string filterName) => throw null; + public static System.Collections.Generic.Dictionary AssertOptions(this ServiceStack.Script.ScriptScopeContext scope, string filterName, object scopedParams) => throw null; + public static ServiceStack.Script.ScriptContext CreateNewContext(this ServiceStack.Script.ScriptScopeContext scope, System.Collections.Generic.Dictionary args) => throw null; + public static System.Collections.Generic.Dictionary GetParamsWithItemBinding(this ServiceStack.Script.ScriptScopeContext scope, string filterName, object scopedParams, out string itemBinding) => throw null; + public static System.Collections.Generic.Dictionary GetParamsWithItemBinding(this ServiceStack.Script.ScriptScopeContext scope, string filterName, ServiceStack.Script.SharpPage page, object scopedParams, out string itemBinding) => throw null; + public static System.Collections.Generic.Dictionary GetParamsWithItemBindingOnly(this ServiceStack.Script.ScriptScopeContext scope, string filterName, ServiceStack.Script.SharpPage page, object scopedParams, out string itemBinding) => throw null; + public static object GetValueOrEvaluateBinding(this ServiceStack.Script.ScriptScopeContext scope, object valueOrBinding, System.Type returnType) => throw null; + public static T GetValueOrEvaluateBinding(this ServiceStack.Script.ScriptScopeContext scope, object valueOrBinding) => throw null; + public static bool TryGetPage(this ServiceStack.Script.ScriptScopeContext scope, string virtualPath, out ServiceStack.Script.SharpPage page, out ServiceStack.Script.SharpCodePage codePage) => throw null; + } + + // Generated from `ServiceStack.Script.WhileScriptBlock` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class WhileScriptBlock : ServiceStack.Script.ScriptBlock + { + public override string Name { get => throw null; } + public WhileScriptBlock() => throw null; + public override System.Threading.Tasks.Task WriteAsync(ServiceStack.Script.ScriptScopeContext scope, ServiceStack.Script.PageBlockFragment block, System.Threading.CancellationToken ct) => throw null; + } + + // Generated from `ServiceStack.Script.WithScriptBlock` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class WithScriptBlock : ServiceStack.Script.ScriptBlock + { + public override string Name { get => throw null; } + public WithScriptBlock() => throw null; + public override System.Threading.Tasks.Task WriteAsync(ServiceStack.Script.ScriptScopeContext scope, ServiceStack.Script.PageBlockFragment block, System.Threading.CancellationToken token) => throw null; + } + + } + namespace Support + { + // Generated from `ServiceStack.Support.ActionExecHandler` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ActionExecHandler : ServiceStack.Commands.ICommandExec, ServiceStack.Commands.ICommand + { + public ActionExecHandler(System.Action action, System.Threading.AutoResetEvent waitHandle) => throw null; + public bool Execute() => throw null; + } + + // Generated from `ServiceStack.Support.AdapterBase` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public abstract class AdapterBase + { + protected AdapterBase() => throw null; + protected void Execute(System.Action action) => throw null; + protected T Execute(System.Func action) => throw null; + protected System.Threading.Tasks.Task ExecuteAsync(System.Func> action) => throw null; + protected System.Threading.Tasks.Task ExecuteAsync(System.Func> action, System.Threading.CancellationToken token) => throw null; + protected System.Threading.Tasks.Task ExecuteAsync(System.Func action) => throw null; + protected System.Threading.Tasks.Task ExecuteAsync(System.Func action, System.Threading.CancellationToken token) => throw null; + protected abstract ServiceStack.Logging.ILog Log { get; } + } + + // Generated from `ServiceStack.Support.CommandExecsHandler` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class CommandExecsHandler : ServiceStack.Commands.ICommandExec, ServiceStack.Commands.ICommand + { + public CommandExecsHandler(ServiceStack.Commands.ICommandExec command, System.Threading.AutoResetEvent waitHandle) => throw null; + public bool Execute() => throw null; + } + + // Generated from `ServiceStack.Support.CommandResultsHandler<>` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class CommandResultsHandler : ServiceStack.Commands.ICommandExec, ServiceStack.Commands.ICommand + { + public CommandResultsHandler(System.Collections.Generic.List results, ServiceStack.Commands.ICommandList command, System.Threading.AutoResetEvent waitHandle) => throw null; + public bool Execute() => throw null; + } + + // Generated from `ServiceStack.Support.InMemoryLog` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class InMemoryLog : ServiceStack.Logging.ILog + { + public System.Text.StringBuilder CombinedLog { get => throw null; set => throw null; } + public void Debug(object message, System.Exception exception) => throw null; + public void Debug(object message) => throw null; + public System.Collections.Generic.List DebugEntries { get => throw null; set => throw null; } + public System.Collections.Generic.List DebugExceptions { get => throw null; set => throw null; } + public void DebugFormat(string format, params object[] args) => throw null; + public void Error(object message, System.Exception exception) => throw null; + public void Error(object message) => throw null; + public System.Collections.Generic.List ErrorEntries { get => throw null; set => throw null; } + public System.Collections.Generic.List ErrorExceptions { get => throw null; set => throw null; } + public void ErrorFormat(string format, params object[] args) => throw null; + public void Fatal(object message, System.Exception exception) => throw null; + public void Fatal(object message) => throw null; + public System.Collections.Generic.List FatalEntries { get => throw null; set => throw null; } + public System.Collections.Generic.List FatalExceptions { get => throw null; set => throw null; } + public void FatalFormat(string format, params object[] args) => throw null; + public bool HasExceptions { get => throw null; } + public InMemoryLog(string loggerName) => throw null; + public void Info(object message, System.Exception exception) => throw null; + public void Info(object message) => throw null; + public System.Collections.Generic.List InfoEntries { get => throw null; set => throw null; } + public System.Collections.Generic.List InfoExceptions { get => throw null; set => throw null; } + public void InfoFormat(string format, params object[] args) => throw null; + public bool IsDebugEnabled { get => throw null; set => throw null; } + public string LoggerName { get => throw null; set => throw null; } + public void Warn(object message, System.Exception exception) => throw null; + public void Warn(object message) => throw null; + public System.Collections.Generic.List WarnEntries { get => throw null; set => throw null; } + public System.Collections.Generic.List WarnExceptions { get => throw null; set => throw null; } + public void WarnFormat(string format, params object[] args) => throw null; + } + + // Generated from `ServiceStack.Support.InMemoryLogFactory` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class InMemoryLogFactory : ServiceStack.Logging.ILogFactory + { + public ServiceStack.Logging.ILog GetLogger(string typeName) => throw null; + public ServiceStack.Logging.ILog GetLogger(System.Type type) => throw null; + public InMemoryLogFactory(bool debugEnabled = default(bool)) => throw null; + } + + } + namespace Templates + { + // Generated from `ServiceStack.Templates.ITemplatePages` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface ITemplatePages : ServiceStack.Script.ISharpPages + { + } + + // Generated from `ServiceStack.Templates.ITemplatePlugin` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface ITemplatePlugin : ServiceStack.Script.IScriptPlugin + { + } + + // Generated from `ServiceStack.Templates.TemplateBlock` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public abstract class TemplateBlock : ServiceStack.Script.ScriptBlock + { + protected TemplateBlock() => throw null; + public override System.Threading.Tasks.Task WriteAsync(ServiceStack.Script.ScriptScopeContext scope, ServiceStack.Script.PageBlockFragment block, System.Threading.CancellationToken token) => throw null; + public abstract System.Threading.Tasks.Task WriteAsync(ServiceStack.Templates.TemplateScopeContext scope, ServiceStack.Script.PageBlockFragment block, System.Threading.CancellationToken ct); + } + + // Generated from `ServiceStack.Templates.TemplateCodePage` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class TemplateCodePage : ServiceStack.Script.SharpCodePage + { + public TemplateCodePage() : base(default(string)) => throw null; + } + + // Generated from `ServiceStack.Templates.TemplateConfig` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class TemplateConfig + { + public static System.Collections.Generic.HashSet CaptureAndEvaluateExceptionsToNull { get => throw null; } + public static System.Globalization.CultureInfo CreateCulture() => throw null; + public static System.Globalization.CultureInfo DefaultCulture { get => throw null; } + public static string DefaultDateFormat { get => throw null; } + public static string DefaultDateTimeFormat { get => throw null; } + public static string DefaultErrorClassName { get => throw null; } + public static System.TimeSpan DefaultFileCacheExpiry { get => throw null; } + public static string DefaultIndent { get => throw null; } + public static string DefaultJsConfig { get => throw null; } + public static string DefaultNewLine { get => throw null; } + public static System.StringComparison DefaultStringComparison { get => throw null; } + public static string DefaultTableClassName { get => throw null; } + public static string DefaultTimeFormat { get => throw null; } + public static System.TimeSpan DefaultUrlCacheExpiry { get => throw null; } + public static System.Collections.Generic.HashSet FatalExceptions { get => throw null; } + public static int MaxQuota { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.Templates.TemplateConstants` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class TemplateConstants + { + public const string AssetsBase = default; + public const string AssignError = default; + public const string CatchError = default; + public const string Comparer = default; + public const string Debug = default; + public const string DefaultCulture = default; + public const string DefaultDateFormat = default; + public const string DefaultDateTimeFormat = default; + public const string DefaultErrorClassName = default; + public const string DefaultFileCacheExpiry = default; + public const string DefaultIndent = default; + public const string DefaultJsConfig = default; + public const string DefaultNewLine = default; + public const string DefaultStringComparison = default; + public const string DefaultTableClassName = default; + public const string DefaultTimeFormat = default; + public const string DefaultUrlCacheExpiry = default; + public static ServiceStack.IRawString EmptyRawString { get => throw null; } + public static ServiceStack.IRawString FalseRawString { get => throw null; } + public const string Format = default; + public const string HtmlEncode = default; + public const string Index = default; + public const string Map = default; + public const string Model = default; + public const string Page = default; + public const string Partial = default; + public const string PathArgs = default; + public const string PathInfo = default; + public const string Request = default; + public const string TempFilePath = default; + public static ServiceStack.IRawString TrueRawString { get => throw null; } + } + + // Generated from `ServiceStack.Templates.TemplateContext` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class TemplateContext : ServiceStack.Script.ScriptContext + { + public ServiceStack.Script.DefaultScripts DefaultFilters { get => throw null; } + public ServiceStack.Script.HtmlScripts HtmlFilters { get => throw null; } + public ServiceStack.Templates.TemplateContext Init() => throw null; + public ServiceStack.Script.ProtectedScripts ProtectedFilters { get => throw null; } + public System.Collections.Generic.List TemplateBlocks { get => throw null; } + public TemplateContext() => throw null; + public System.Collections.Generic.List TemplateFilters { get => throw null; } + } + + // Generated from `ServiceStack.Templates.TemplateContextExtensions` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class TemplateContextExtensions + { + public static string EvaluateTemplate(this ServiceStack.Templates.TemplateContext context, string script, System.Collections.Generic.Dictionary args = default(System.Collections.Generic.Dictionary)) => throw null; + public static System.Threading.Tasks.Task EvaluateTemplateAsync(this ServiceStack.Templates.TemplateContext context, string script, System.Collections.Generic.Dictionary args = default(System.Collections.Generic.Dictionary)) => throw null; + } + + // Generated from `ServiceStack.Templates.TemplateDefaultFilters` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class TemplateDefaultFilters : ServiceStack.Script.DefaultScripts + { + public TemplateDefaultFilters() => throw null; + } + + // Generated from `ServiceStack.Templates.TemplateFilter` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class TemplateFilter : ServiceStack.Script.ScriptMethods + { + public TemplateFilter() => throw null; + } + + // Generated from `ServiceStack.Templates.TemplateHtmlFilters` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class TemplateHtmlFilters : ServiceStack.Script.HtmlScripts + { + public TemplateHtmlFilters() => throw null; + } + + // Generated from `ServiceStack.Templates.TemplatePage` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class TemplatePage : ServiceStack.Script.SharpPage + { + public TemplatePage(ServiceStack.Templates.TemplateContext context, ServiceStack.IO.IVirtualFile file, ServiceStack.Script.PageFormat format = default(ServiceStack.Script.PageFormat)) : base(default(ServiceStack.Script.ScriptContext), default(ServiceStack.Script.PageFragment[])) => throw null; + } + + // Generated from `ServiceStack.Templates.TemplateProtectedFilters` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class TemplateProtectedFilters : ServiceStack.Script.ProtectedScripts + { + public TemplateProtectedFilters() => throw null; + } + + // Generated from `ServiceStack.Templates.TemplateScopeContext` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public struct TemplateScopeContext + { + public ServiceStack.Script.SharpCodePage CodePage { get => throw null; } + public ServiceStack.Script.ScriptContext Context { get => throw null; } + public System.IO.Stream OutputStream { get => throw null; } + public ServiceStack.Script.SharpPage Page { get => throw null; } + public ServiceStack.Script.PageResult PageResult { get => throw null; } + public System.Collections.Generic.Dictionary ScopedParams { get => throw null; set => throw null; } + public TemplateScopeContext(ServiceStack.Script.PageResult pageResult, System.IO.Stream outputStream, System.Collections.Generic.Dictionary scopedParams) => throw null; + // Stub generator skipped constructor + public static implicit operator ServiceStack.Script.ScriptScopeContext(ServiceStack.Templates.TemplateScopeContext from) => throw null; + } + + } + namespace VirtualPath + { + // Generated from `ServiceStack.VirtualPath.AbstractVirtualDirectoryBase` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public abstract class AbstractVirtualDirectoryBase : System.Collections.IEnumerable, System.Collections.Generic.IEnumerable, ServiceStack.IO.IVirtualNode, ServiceStack.IO.IVirtualDirectory + { + protected AbstractVirtualDirectoryBase(ServiceStack.IO.IVirtualPathProvider owningProvider, ServiceStack.IO.IVirtualDirectory parentDirectory) => throw null; + protected AbstractVirtualDirectoryBase(ServiceStack.IO.IVirtualPathProvider owningProvider) => throw null; + public abstract System.Collections.Generic.IEnumerable Directories { get; } + public ServiceStack.IO.IVirtualDirectory Directory { get => throw null; } + public override bool Equals(object obj) => throw null; + public abstract System.Collections.Generic.IEnumerable Files { get; } + public virtual System.Collections.Generic.IEnumerable GetAllMatchingFiles(string globPattern, int maxDepth = default(int)) => throw null; + public virtual ServiceStack.IO.IVirtualDirectory GetDirectory(string virtualPath) => throw null; + public virtual ServiceStack.IO.IVirtualDirectory GetDirectory(System.Collections.Generic.Stack virtualPath) => throw null; + protected abstract ServiceStack.IO.IVirtualDirectory GetDirectoryFromBackingDirectoryOrDefault(string directoryName); + public abstract System.Collections.Generic.IEnumerator GetEnumerator(); + System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() => throw null; + public virtual ServiceStack.IO.IVirtualFile GetFile(string virtualPath) => throw null; + public virtual ServiceStack.IO.IVirtualFile GetFile(System.Collections.Generic.Stack virtualPath) => throw null; + protected abstract ServiceStack.IO.IVirtualFile GetFileFromBackingDirectoryOrDefault(string fileName); + public override int GetHashCode() => throw null; + protected abstract System.Collections.Generic.IEnumerable GetMatchingFilesInDir(string globPattern); + protected virtual string GetPathToRoot(string separator, System.Func pathSel) => throw null; + protected virtual string GetRealPathToRoot() => throw null; + protected virtual string GetVirtualPathToRoot() => throw null; + public virtual bool IsDirectory { get => throw null; } + public virtual bool IsRoot { get => throw null; } + public abstract System.DateTime LastModified { get; } + public abstract string Name { get; } + public ServiceStack.IO.IVirtualDirectory ParentDirectory { get => throw null; set => throw null; } + public virtual string RealPath { get => throw null; } + public override string ToString() => throw null; + public virtual string VirtualPath { get => throw null; } + protected ServiceStack.IO.IVirtualPathProvider VirtualPathProvider; + } + + // Generated from `ServiceStack.VirtualPath.AbstractVirtualFileBase` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public abstract class AbstractVirtualFileBase : ServiceStack.IO.IVirtualNode, ServiceStack.IO.IVirtualFile + { + protected AbstractVirtualFileBase(ServiceStack.IO.IVirtualPathProvider owningProvider, ServiceStack.IO.IVirtualDirectory directory) => throw null; + public ServiceStack.IO.IVirtualDirectory Directory { get => throw null; set => throw null; } + public override bool Equals(object obj) => throw null; + public virtual string Extension { get => throw null; } + public virtual object GetContents() => throw null; + public virtual string GetFileHash() => throw null; + public override int GetHashCode() => throw null; + protected virtual string GetPathToRoot(string separator, System.Func pathSel) => throw null; + protected virtual string GetRealPathToRoot() => throw null; + protected virtual string GetVirtualPathToRoot() => throw null; + public virtual bool IsDirectory { get => throw null; } + public abstract System.DateTime LastModified { get; } + public abstract System.Int64 Length { get; } + public abstract string Name { get; } + public abstract System.IO.Stream OpenRead(); + public virtual System.IO.StreamReader OpenText() => throw null; + public virtual System.Byte[] ReadAllBytes() => throw null; + public virtual string ReadAllText() => throw null; + public virtual string RealPath { get => throw null; } + public virtual void Refresh() => throw null; + public static System.Collections.Generic.List ScanSkipPaths { get => throw null; set => throw null; } + public override string ToString() => throw null; + public virtual string VirtualPath { get => throw null; } + public ServiceStack.IO.IVirtualPathProvider VirtualPathProvider { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.VirtualPath.AbstractVirtualPathProviderBase` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public abstract class AbstractVirtualPathProviderBase : ServiceStack.IO.IVirtualPathProvider + { + protected AbstractVirtualPathProviderBase() => throw null; + public virtual void AppendFile(string path, object contents) => throw null; + public virtual void AppendFile(string path, System.ReadOnlyMemory text) => throw null; + public virtual void AppendFile(string path, System.ReadOnlyMemory bytes) => throw null; + public virtual string CombineVirtualPath(string basePath, string relativePath) => throw null; + protected System.NotSupportedException CreateContentNotSupportedException(object value) => throw null; + public virtual bool DirectoryExists(string virtualPath) => throw null; + public virtual bool FileExists(string virtualPath) => throw null; + public virtual System.Collections.Generic.IEnumerable GetAllFiles() => throw null; + public virtual System.Collections.Generic.IEnumerable GetAllMatchingFiles(string globPattern, int maxDepth = default(int)) => throw null; + public virtual ServiceStack.IO.IVirtualDirectory GetDirectory(string virtualPath) => throw null; + public virtual ServiceStack.IO.IVirtualFile GetFile(string virtualPath) => throw null; + public virtual string GetFileHash(string virtualPath) => throw null; + public virtual string GetFileHash(ServiceStack.IO.IVirtualFile virtualFile) => throw null; + public virtual System.Collections.Generic.IEnumerable GetRootDirectories() => throw null; + public virtual System.Collections.Generic.IEnumerable GetRootFiles() => throw null; + protected abstract void Initialize(); + public virtual bool IsSharedFile(ServiceStack.IO.IVirtualFile virtualFile) => throw null; + public virtual bool IsViewFile(ServiceStack.IO.IVirtualFile virtualFile) => throw null; + public abstract string RealPathSeparator { get; } + public abstract ServiceStack.IO.IVirtualDirectory RootDirectory { get; } + public virtual string SanitizePath(string filePath) => throw null; + public override string ToString() => throw null; + public abstract string VirtualPathSeparator { get; } + public virtual void WriteFile(string path, object contents) => throw null; + public virtual void WriteFile(string path, System.ReadOnlyMemory text) => throw null; + public virtual void WriteFile(string path, System.ReadOnlyMemory bytes) => throw null; + public virtual void WriteFiles(System.Collections.Generic.Dictionary textFiles) => throw null; + public virtual void WriteFiles(System.Collections.Generic.Dictionary files) => throw null; + } + + // Generated from `ServiceStack.VirtualPath.FileSystemMapping` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class FileSystemMapping : ServiceStack.VirtualPath.AbstractVirtualPathProviderBase + { + public string Alias { get => throw null; set => throw null; } + public FileSystemMapping(string alias, string rootDirectoryPath) => throw null; + public FileSystemMapping(string alias, System.IO.DirectoryInfo rootDirInfo) => throw null; + public override ServiceStack.IO.IVirtualDirectory GetDirectory(string virtualPath) => throw null; + public override ServiceStack.IO.IVirtualFile GetFile(string virtualPath) => throw null; + public string GetRealVirtualPath(string virtualPath) => throw null; + public override System.Collections.Generic.IEnumerable GetRootDirectories() => throw null; + public override System.Collections.Generic.IEnumerable GetRootFiles() => throw null; + protected override void Initialize() => throw null; + public override string RealPathSeparator { get => throw null; } + protected ServiceStack.VirtualPath.FileSystemVirtualDirectory RootDir; + protected System.IO.DirectoryInfo RootDirInfo; + public override ServiceStack.IO.IVirtualDirectory RootDirectory { get => throw null; } + public override string VirtualPathSeparator { get => throw null; } + } + + // Generated from `ServiceStack.VirtualPath.FileSystemVirtualDirectory` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class FileSystemVirtualDirectory : ServiceStack.VirtualPath.AbstractVirtualDirectoryBase + { + protected System.IO.DirectoryInfo BackingDirInfo; + public override System.Collections.Generic.IEnumerable Directories { get => throw null; } + public System.Collections.Generic.IEnumerable EnumerateDirectories(string dirName) => throw null; + public System.Collections.Generic.IEnumerable EnumerateFiles(string pattern) => throw null; + public FileSystemVirtualDirectory(ServiceStack.IO.IVirtualPathProvider owningProvider, ServiceStack.IO.IVirtualDirectory parentDirectory, System.IO.DirectoryInfo dInfo) : base(default(ServiceStack.IO.IVirtualPathProvider)) => throw null; + public override System.Collections.Generic.IEnumerable Files { get => throw null; } + protected override ServiceStack.IO.IVirtualDirectory GetDirectoryFromBackingDirectoryOrDefault(string dName) => throw null; + public override System.Collections.Generic.IEnumerator GetEnumerator() => throw null; + protected override ServiceStack.IO.IVirtualFile GetFileFromBackingDirectoryOrDefault(string fName) => throw null; + protected override System.Collections.Generic.IEnumerable GetMatchingFilesInDir(string globPattern) => throw null; + public override System.DateTime LastModified { get => throw null; } + public override string Name { get => throw null; } + public override string RealPath { get => throw null; } + } + + // Generated from `ServiceStack.VirtualPath.FileSystemVirtualFile` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class FileSystemVirtualFile : ServiceStack.VirtualPath.AbstractVirtualFileBase + { + protected System.IO.FileInfo BackingFile; + public FileSystemVirtualFile(ServiceStack.IO.IVirtualPathProvider owningProvider, ServiceStack.IO.IVirtualDirectory directory, System.IO.FileInfo fInfo) : base(default(ServiceStack.IO.IVirtualPathProvider), default(ServiceStack.IO.IVirtualDirectory)) => throw null; + public override System.DateTime LastModified { get => throw null; } + public override System.Int64 Length { get => throw null; } + public override string Name { get => throw null; } + public override System.IO.Stream OpenRead() => throw null; + public override string RealPath { get => throw null; } + public override void Refresh() => throw null; + } + + // Generated from `ServiceStack.VirtualPath.ResourceVirtualDirectory` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ResourceVirtualDirectory : ServiceStack.VirtualPath.AbstractVirtualDirectoryBase + { + protected virtual ServiceStack.VirtualPath.ResourceVirtualDirectory ConsumeTokensForVirtualDir(System.Collections.Generic.Stack resourceTokens) => throw null; + protected virtual ServiceStack.VirtualPath.ResourceVirtualDirectory CreateVirtualDirectory(System.Linq.IGrouping subResources) => throw null; + protected virtual ServiceStack.VirtualPath.ResourceVirtualFile CreateVirtualFile(string resourceName) => throw null; + public override System.Collections.Generic.IEnumerable Directories { get => throw null; } + public string DirectoryName { get => throw null; set => throw null; } + public static System.Collections.Generic.HashSet EmbeddedResourceTreatAsFiles { get => throw null; set => throw null; } + public override System.Collections.Generic.IEnumerable Files { get => throw null; } + protected override ServiceStack.IO.IVirtualDirectory GetDirectoryFromBackingDirectoryOrDefault(string directoryName) => throw null; + public override System.Collections.Generic.IEnumerator GetEnumerator() => throw null; + protected override ServiceStack.IO.IVirtualFile GetFileFromBackingDirectoryOrDefault(string fileName) => throw null; + protected override System.Collections.Generic.IEnumerable GetMatchingFilesInDir(string globPattern) => throw null; + protected override string GetRealPathToRoot() => throw null; + public static System.Collections.Generic.List GetResourceNames(System.Reflection.Assembly asm, string basePath) => throw null; + protected void InitializeDirectoryStructure(System.Collections.Generic.List manifestResourceNames) => throw null; + public override System.DateTime LastModified { get => throw null; } + public override string Name { get => throw null; } + public ResourceVirtualDirectory(ServiceStack.IO.IVirtualPathProvider owningProvider, ServiceStack.IO.IVirtualDirectory parentDir, System.Reflection.Assembly backingAsm, System.DateTime lastModified, string rootNamespace, string directoryName, System.Collections.Generic.List manifestResourceNames) : base(default(ServiceStack.IO.IVirtualPathProvider)) => throw null; + public ResourceVirtualDirectory(ServiceStack.IO.IVirtualPathProvider owningProvider, ServiceStack.IO.IVirtualDirectory parentDir, System.Reflection.Assembly backingAsm, System.DateTime lastModified, string rootNamespace) : base(default(ServiceStack.IO.IVirtualPathProvider)) => throw null; + protected System.Collections.Generic.List SubDirectories; + protected System.Collections.Generic.List SubFiles; + protected System.Reflection.Assembly backingAssembly; + public string rootNamespace { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.VirtualPath.ResourceVirtualFile` in `ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ResourceVirtualFile : ServiceStack.VirtualPath.AbstractVirtualFileBase + { + protected System.Reflection.Assembly BackingAssembly; + protected string FileName; + public override System.DateTime LastModified { get => throw null; } + public override System.Int64 Length { get => throw null; } + public override string Name { get => throw null; } + public override System.IO.Stream OpenRead() => throw null; + public override string RealPath { get => throw null; } + public ResourceVirtualFile(ServiceStack.IO.IVirtualPathProvider owningProvider, ServiceStack.VirtualPath.ResourceVirtualDirectory directory, string fileName) : base(default(ServiceStack.IO.IVirtualPathProvider), default(ServiceStack.IO.IVirtualDirectory)) => throw null; + public override string VirtualPath { get => throw null; } + } + + } +} +namespace System +{ + namespace Runtime + { + namespace CompilerServices + { + /* Duplicate type 'IsReadOnlyAttribute' is not stubbed in this assembly 'ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null'. */ + + } + } +} diff --git a/csharp/ql/test/resources/stubs/ServiceStack.Common/5.11.0/ServiceStack.Common.csproj b/csharp/ql/test/resources/stubs/ServiceStack.Common/5.11.0/ServiceStack.Common.csproj new file mode 100644 index 00000000000..55204146344 --- /dev/null +++ b/csharp/ql/test/resources/stubs/ServiceStack.Common/5.11.0/ServiceStack.Common.csproj @@ -0,0 +1,14 @@ + + + net5.0 + true + bin\ + false + + + + + + + + diff --git a/csharp/ql/test/resources/stubs/ServiceStack.Interfaces/5.11.0/ServiceStack.Interfaces.cs b/csharp/ql/test/resources/stubs/ServiceStack.Interfaces/5.11.0/ServiceStack.Interfaces.cs new file mode 100644 index 00000000000..2f2456c8d5d --- /dev/null +++ b/csharp/ql/test/resources/stubs/ServiceStack.Interfaces/5.11.0/ServiceStack.Interfaces.cs @@ -0,0 +1,5646 @@ +// This file contains auto-generated code. + +namespace ServiceStack +{ + // Generated from `ServiceStack.ApiAllowableValuesAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ApiAllowableValuesAttribute : ServiceStack.AttributeBase + { + public ApiAllowableValuesAttribute(string[] values) => throw null; + public ApiAllowableValuesAttribute(string name, params string[] values) => throw null; + public ApiAllowableValuesAttribute(string name, int min, int max) => throw null; + public ApiAllowableValuesAttribute(string name, System.Type enumType) => throw null; + public ApiAllowableValuesAttribute(string name, System.Func listAction) => throw null; + public ApiAllowableValuesAttribute(string name) => throw null; + public ApiAllowableValuesAttribute(int min, int max) => throw null; + public ApiAllowableValuesAttribute(System.Type enumType) => throw null; + public ApiAllowableValuesAttribute(System.Func listAction) => throw null; + public ApiAllowableValuesAttribute() => throw null; + public int? Max { get => throw null; set => throw null; } + public int? Min { get => throw null; set => throw null; } + public string Name { get => throw null; set => throw null; } + public string Type { get => throw null; set => throw null; } + public string[] Values { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.ApiAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ApiAttribute : ServiceStack.AttributeBase + { + public ApiAttribute(string description, int generateBodyParameter, bool isRequired) => throw null; + public ApiAttribute(string description, int generateBodyParameter) => throw null; + public ApiAttribute(string description) => throw null; + public ApiAttribute() => throw null; + public int BodyParameter { get => throw null; set => throw null; } + public string Description { get => throw null; set => throw null; } + public bool IsRequired { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.ApiMemberAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ApiMemberAttribute : ServiceStack.AttributeBase + { + public bool AllowMultiple { get => throw null; set => throw null; } + public ApiMemberAttribute() => throw null; + public string DataType { get => throw null; set => throw null; } + public string Description { get => throw null; set => throw null; } + public bool ExcludeInSchema { get => throw null; set => throw null; } + public string Format { get => throw null; set => throw null; } + public bool IsRequired { get => throw null; set => throw null; } + public string Name { get => throw null; set => throw null; } + public string ParameterType { get => throw null; set => throw null; } + public string Route { get => throw null; set => throw null; } + public string Verb { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.ApiResponseAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ApiResponseAttribute : ServiceStack.AttributeBase, ServiceStack.IApiResponseDescription + { + public ApiResponseAttribute(int statusCode, string description) => throw null; + public ApiResponseAttribute(System.Net.HttpStatusCode statusCode, string description) => throw null; + public ApiResponseAttribute() => throw null; + public string Description { get => throw null; set => throw null; } + public bool IsDefaultResponse { get => throw null; set => throw null; } + public System.Type ResponseType { get => throw null; set => throw null; } + public int StatusCode { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.ApplyTo` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + [System.Flags] + public enum ApplyTo + { + Acl, + All, + BaseLineControl, + CheckIn, + CheckOut, + Connect, + Copy, + Delete, + Get, + Head, + Label, + Lock, + Merge, + MkActivity, + MkCol, + MkWorkSpace, + Move, + None, + Options, + OrderPatch, + Patch, + Post, + PropFind, + PropPatch, + Put, + Report, + Search, + Trace, + UnCheckOut, + UnLock, + Update, + VersionControl, + } + + // Generated from `ServiceStack.ArrayOfGuid` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ArrayOfGuid : System.Collections.Generic.List + { + public ArrayOfGuid(params System.Guid[] args) => throw null; + public ArrayOfGuid(System.Collections.Generic.IEnumerable collection) => throw null; + public ArrayOfGuid() => throw null; + } + + // Generated from `ServiceStack.ArrayOfGuidId` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ArrayOfGuidId : System.Collections.Generic.List + { + public ArrayOfGuidId(params System.Guid[] args) => throw null; + public ArrayOfGuidId(System.Collections.Generic.IEnumerable collection) => throw null; + public ArrayOfGuidId() => throw null; + } + + // Generated from `ServiceStack.ArrayOfInt` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ArrayOfInt : System.Collections.Generic.List + { + public ArrayOfInt(params int[] args) => throw null; + public ArrayOfInt(System.Collections.Generic.IEnumerable collection) => throw null; + public ArrayOfInt() => throw null; + } + + // Generated from `ServiceStack.ArrayOfIntId` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ArrayOfIntId : System.Collections.Generic.List + { + public ArrayOfIntId(params int[] args) => throw null; + public ArrayOfIntId(System.Collections.Generic.IEnumerable collection) => throw null; + public ArrayOfIntId() => throw null; + } + + // Generated from `ServiceStack.ArrayOfLong` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ArrayOfLong : System.Collections.Generic.List + { + public ArrayOfLong(params System.Int64[] args) => throw null; + public ArrayOfLong(System.Collections.Generic.IEnumerable collection) => throw null; + public ArrayOfLong() => throw null; + } + + // Generated from `ServiceStack.ArrayOfLongId` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ArrayOfLongId : System.Collections.Generic.List + { + public ArrayOfLongId(params System.Int64[] args) => throw null; + public ArrayOfLongId(System.Collections.Generic.IEnumerable collection) => throw null; + public ArrayOfLongId() => throw null; + } + + // Generated from `ServiceStack.ArrayOfString` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ArrayOfString : System.Collections.Generic.List + { + public ArrayOfString(params string[] args) => throw null; + public ArrayOfString(System.Collections.Generic.IEnumerable collection) => throw null; + public ArrayOfString() => throw null; + } + + // Generated from `ServiceStack.ArrayOfStringId` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ArrayOfStringId : System.Collections.Generic.List + { + public ArrayOfStringId(params string[] args) => throw null; + public ArrayOfStringId(System.Collections.Generic.IEnumerable collection) => throw null; + public ArrayOfStringId() => throw null; + } + + // Generated from `ServiceStack.AttributeBase` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class AttributeBase : System.Attribute + { + public AttributeBase() => throw null; + protected System.Guid typeId; + } + + // Generated from `ServiceStack.AuditBase` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public abstract class AuditBase + { + protected AuditBase() => throw null; + public string CreatedBy { get => throw null; set => throw null; } + public System.DateTime CreatedDate { get => throw null; set => throw null; } + public string DeletedBy { get => throw null; set => throw null; } + public System.DateTime? DeletedDate { get => throw null; set => throw null; } + public string ModifiedBy { get => throw null; set => throw null; } + public System.DateTime ModifiedDate { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.AutoApplyAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class AutoApplyAttribute : ServiceStack.AttributeBase + { + public string[] Args { get => throw null; } + public AutoApplyAttribute(string name, params string[] args) => throw null; + public string Name { get => throw null; } + } + + // Generated from `ServiceStack.AutoDefaultAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class AutoDefaultAttribute : ServiceStack.ScriptValueAttribute + { + public AutoDefaultAttribute() => throw null; + } + + // Generated from `ServiceStack.AutoFilterAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class AutoFilterAttribute : ServiceStack.ScriptValueAttribute + { + public AutoFilterAttribute(string field, string template) => throw null; + public AutoFilterAttribute(string field) => throw null; + public AutoFilterAttribute(ServiceStack.QueryTerm term, string field, string template) => throw null; + public AutoFilterAttribute(ServiceStack.QueryTerm term, string field) => throw null; + public string Field { get => throw null; set => throw null; } + public string Operand { get => throw null; set => throw null; } + public string Template { get => throw null; set => throw null; } + public ServiceStack.QueryTerm Term { get => throw null; set => throw null; } + public string ValueFormat { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.AutoIgnoreAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class AutoIgnoreAttribute : ServiceStack.AttributeBase + { + public AutoIgnoreAttribute() => throw null; + } + + // Generated from `ServiceStack.AutoMapAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class AutoMapAttribute : ServiceStack.AttributeBase + { + public AutoMapAttribute(string to) => throw null; + public string To { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.AutoPopulateAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class AutoPopulateAttribute : ServiceStack.ScriptValueAttribute + { + public AutoPopulateAttribute(string field) => throw null; + public string Field { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.AutoQueryViewerAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class AutoQueryViewerAttribute : ServiceStack.AttributeBase + { + public AutoQueryViewerAttribute() => throw null; + public string BackgroundColor { get => throw null; set => throw null; } + public string BackgroundImageUrl { get => throw null; set => throw null; } + public string BrandImageUrl { get => throw null; set => throw null; } + public string BrandUrl { get => throw null; set => throw null; } + public string DefaultFields { get => throw null; set => throw null; } + public string DefaultSearchField { get => throw null; set => throw null; } + public string DefaultSearchText { get => throw null; set => throw null; } + public string DefaultSearchType { get => throw null; set => throw null; } + public string Description { get => throw null; set => throw null; } + public string IconUrl { get => throw null; set => throw null; } + public string LinkColor { get => throw null; set => throw null; } + public string Name { get => throw null; set => throw null; } + public string TextColor { get => throw null; set => throw null; } + public string Title { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.AutoQueryViewerFieldAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class AutoQueryViewerFieldAttribute : ServiceStack.AttributeBase + { + public AutoQueryViewerFieldAttribute() => throw null; + public string Description { get => throw null; set => throw null; } + public bool HideInSummary { get => throw null; set => throw null; } + public string LayoutHint { get => throw null; set => throw null; } + public string Title { get => throw null; set => throw null; } + public string ValueFormat { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.AutoUpdateAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class AutoUpdateAttribute : ServiceStack.AttributeBase + { + public AutoUpdateAttribute(ServiceStack.AutoUpdateStyle style) => throw null; + public ServiceStack.AutoUpdateStyle Style { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.AutoUpdateStyle` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public enum AutoUpdateStyle + { + Always, + NonDefaults, + } + + // Generated from `ServiceStack.Behavior` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class Behavior + { + public const string AuditCreate = default; + public const string AuditDelete = default; + public const string AuditModify = default; + public const string AuditQuery = default; + public const string AuditSoftDelete = default; + } + + // Generated from `ServiceStack.CallStyle` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public enum CallStyle + { + OneWay, + Reply, + } + + // Generated from `ServiceStack.EmitCSharp` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class EmitCSharp : ServiceStack.EmitCodeAttribute + { + public EmitCSharp(params string[] statements) : base(default(ServiceStack.Lang), default(string)) => throw null; + } + + // Generated from `ServiceStack.EmitCodeAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class EmitCodeAttribute : ServiceStack.AttributeBase + { + public EmitCodeAttribute(ServiceStack.Lang lang, string[] statements) => throw null; + public EmitCodeAttribute(ServiceStack.Lang lang, string statement) => throw null; + public ServiceStack.Lang Lang { get => throw null; set => throw null; } + public string[] Statements { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.EmitDart` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class EmitDart : ServiceStack.EmitCodeAttribute + { + public EmitDart(params string[] statements) : base(default(ServiceStack.Lang), default(string)) => throw null; + } + + // Generated from `ServiceStack.EmitFSharp` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class EmitFSharp : ServiceStack.EmitCodeAttribute + { + public EmitFSharp(params string[] statements) : base(default(ServiceStack.Lang), default(string)) => throw null; + } + + // Generated from `ServiceStack.EmitJava` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class EmitJava : ServiceStack.EmitCodeAttribute + { + public EmitJava(params string[] statements) : base(default(ServiceStack.Lang), default(string)) => throw null; + } + + // Generated from `ServiceStack.EmitKotlin` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class EmitKotlin : ServiceStack.EmitCodeAttribute + { + public EmitKotlin(params string[] statements) : base(default(ServiceStack.Lang), default(string)) => throw null; + } + + // Generated from `ServiceStack.EmitSwift` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class EmitSwift : ServiceStack.EmitCodeAttribute + { + public EmitSwift(params string[] statements) : base(default(ServiceStack.Lang), default(string)) => throw null; + } + + // Generated from `ServiceStack.EmitTypeScript` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class EmitTypeScript : ServiceStack.EmitCodeAttribute + { + public EmitTypeScript(params string[] statements) : base(default(ServiceStack.Lang), default(string)) => throw null; + } + + // Generated from `ServiceStack.EmitVb` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class EmitVb : ServiceStack.EmitCodeAttribute + { + public EmitVb(params string[] statements) : base(default(ServiceStack.Lang), default(string)) => throw null; + } + + // Generated from `ServiceStack.EmptyResponse` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class EmptyResponse : ServiceStack.IHasResponseStatus + { + public EmptyResponse() => throw null; + public ServiceStack.ResponseStatus ResponseStatus { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.Endpoint` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public enum Endpoint + { + Http, + Mq, + Other, + Tcp, + } + + // Generated from `ServiceStack.ErrorResponse` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ErrorResponse : ServiceStack.IHasResponseStatus + { + public ErrorResponse() => throw null; + public ServiceStack.ResponseStatus ResponseStatus { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.FallbackRouteAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class FallbackRouteAttribute : ServiceStack.RouteAttribute + { + public FallbackRouteAttribute(string path, string verbs) : base(default(string)) => throw null; + public FallbackRouteAttribute(string path) : base(default(string)) => throw null; + } + + // Generated from `ServiceStack.Feature` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + [System.Flags] + public enum Feature + { + All, + Csv, + CustomFormat, + Grpc, + Html, + Json, + Jsv, + Markdown, + Metadata, + MsgPack, + None, + PredefinedRoutes, + ProtoBuf, + Razor, + RequestInfo, + ServiceDiscovery, + Soap, + Soap11, + Soap12, + Wire, + Xml, + } + + // Generated from `ServiceStack.Format` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public enum Format + { + Csv, + Html, + Json, + Jsv, + MsgPack, + Other, + ProtoBuf, + Soap11, + Soap12, + Wire, + Xml, + } + + // Generated from `ServiceStack.GenerateBodyParameter` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class GenerateBodyParameter + { + public const int Always = default; + public const int IfNotDisabled = default; + public const int Never = default; + } + + // Generated from `ServiceStack.Http` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public enum Http + { + Delete, + Get, + Head, + Options, + Other, + Patch, + Post, + Put, + } + + // Generated from `ServiceStack.IAny<>` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IAny + { + object Any(T request); + } + + // Generated from `ServiceStack.IAnyVoid<>` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IAnyVoid + { + void Any(T request); + } + + // Generated from `ServiceStack.IApiResponseDescription` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IApiResponseDescription + { + string Description { get; } + int StatusCode { get; } + } + + // Generated from `ServiceStack.ICompressor` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface ICompressor + { + string Compress(string source); + } + + // Generated from `ServiceStack.IContainer` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IContainer + { + ServiceStack.IContainer AddSingleton(System.Type type, System.Func factory); + ServiceStack.IContainer AddTransient(System.Type type, System.Func factory); + System.Func CreateFactory(System.Type type); + bool Exists(System.Type type); + object Resolve(System.Type type); + } + + // Generated from `ServiceStack.ICreateDb<>` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface ICreateDb : ServiceStack.ICrud + { + } + + // Generated from `ServiceStack.ICrud` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface ICrud + { + } + + // Generated from `ServiceStack.IDelete` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IDelete : ServiceStack.IVerb + { + } + + // Generated from `ServiceStack.IDelete<>` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IDelete + { + object Delete(T request); + } + + // Generated from `ServiceStack.IDeleteDb<>` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IDeleteDb
    : ServiceStack.ICrud + { + } + + // Generated from `ServiceStack.IDeleteVoid<>` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IDeleteVoid + { + void Delete(T request); + } + + // Generated from `ServiceStack.IEncryptedClient` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IEncryptedClient : ServiceStack.IServiceGateway, ServiceStack.IReplyClient, ServiceStack.IHasVersion, ServiceStack.IHasSessionId, ServiceStack.IHasBearerToken + { + ServiceStack.IJsonServiceClient Client { get; } + TResponse Send(string httpMethod, object request); + TResponse Send(string httpMethod, ServiceStack.IReturn request); + string ServerPublicKeyXml { get; } + } + + // Generated from `ServiceStack.IGet` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IGet : ServiceStack.IVerb + { + } + + // Generated from `ServiceStack.IGet<>` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IGet + { + object Get(T request); + } + + // Generated from `ServiceStack.IGetVoid<>` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IGetVoid + { + void Get(T request); + } + + // Generated from `ServiceStack.IHasBearerToken` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IHasBearerToken + { + string BearerToken { get; set; } + } + + // Generated from `ServiceStack.IHasErrorCode` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IHasErrorCode + { + string ErrorCode { get; } + } + + // Generated from `ServiceStack.IHasResponseStatus` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IHasResponseStatus + { + ServiceStack.ResponseStatus ResponseStatus { get; set; } + } + + // Generated from `ServiceStack.IHasSessionId` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IHasSessionId + { + string SessionId { get; set; } + } + + // Generated from `ServiceStack.IHasVersion` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IHasVersion + { + int Version { get; set; } + } + + // Generated from `ServiceStack.IHtmlString` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IHtmlString + { + string ToHtmlString(); + } + + // Generated from `ServiceStack.IHttpRestClientAsync` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IHttpRestClientAsync : System.IDisposable, ServiceStack.IServiceClientCommon, ServiceStack.IRestClientAsync + { + System.Threading.Tasks.Task CustomMethodAsync(string httpVerb, string relativeOrAbsoluteUrl, object request, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task DeleteAsync(string relativeOrAbsoluteUrl, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task GetAsync(string relativeOrAbsoluteUrl, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task PostAsync(string relativeOrAbsoluteUrl, object request, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task PutAsync(string relativeOrAbsoluteUrl, object request, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task SendAsync(string httpMethod, string absoluteUrl, object request, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + } + + // Generated from `ServiceStack.IJoin` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IJoin + { + } + + // Generated from `ServiceStack.IJoin<,,,,>` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IJoin : ServiceStack.IJoin + { + } + + // Generated from `ServiceStack.IJoin<,,,>` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IJoin : ServiceStack.IJoin + { + } + + // Generated from `ServiceStack.IJoin<,,>` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IJoin : ServiceStack.IJoin + { + } + + // Generated from `ServiceStack.IJoin<,>` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IJoin : ServiceStack.IJoin + { + } + + // Generated from `ServiceStack.IJsonServiceClient` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IJsonServiceClient : System.IDisposable, ServiceStack.IServiceGatewayAsync, ServiceStack.IServiceGateway, ServiceStack.IServiceClientSync, ServiceStack.IServiceClientCommon, ServiceStack.IServiceClientAsync, ServiceStack.IServiceClient, ServiceStack.IRestServiceClient, ServiceStack.IRestClientSync, ServiceStack.IRestClientAsync, ServiceStack.IRestClient, ServiceStack.IReplyClient, ServiceStack.IOneWayClient, ServiceStack.IHttpRestClientAsync, ServiceStack.IHasVersion, ServiceStack.IHasSessionId, ServiceStack.IHasBearerToken + { + } + + // Generated from `ServiceStack.ILeftJoin<,,,,>` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface ILeftJoin : ServiceStack.IJoin + { + } + + // Generated from `ServiceStack.ILeftJoin<,,,>` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface ILeftJoin : ServiceStack.IJoin + { + } + + // Generated from `ServiceStack.ILeftJoin<,,>` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface ILeftJoin : ServiceStack.IJoin + { + } + + // Generated from `ServiceStack.ILeftJoin<,>` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface ILeftJoin : ServiceStack.IJoin + { + } + + // Generated from `ServiceStack.IMeta` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IMeta + { + System.Collections.Generic.Dictionary Meta { get; set; } + } + + // Generated from `ServiceStack.IOneWayClient` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IOneWayClient + { + void SendAllOneWay(System.Collections.Generic.IEnumerable requests); + void SendOneWay(string relativeOrAbsoluteUri, object requestDto); + void SendOneWay(object requestDto); + } + + // Generated from `ServiceStack.IOptions` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IOptions : ServiceStack.IVerb + { + } + + // Generated from `ServiceStack.IOptions<>` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IOptions + { + object Options(T request); + } + + // Generated from `ServiceStack.IOptionsVoid<>` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IOptionsVoid + { + void Options(T request); + } + + // Generated from `ServiceStack.IPatch` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IPatch : ServiceStack.IVerb + { + } + + // Generated from `ServiceStack.IPatch<>` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IPatch + { + object Patch(T request); + } + + // Generated from `ServiceStack.IPatchDb<>` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IPatchDb
    : ServiceStack.ICrud + { + } + + // Generated from `ServiceStack.IPatchVoid<>` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IPatchVoid + { + void Patch(T request); + } + + // Generated from `ServiceStack.IPost` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IPost : ServiceStack.IVerb + { + } + + // Generated from `ServiceStack.IPost<>` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IPost + { + object Post(T request); + } + + // Generated from `ServiceStack.IPostVoid<>` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IPostVoid + { + void Post(T request); + } + + // Generated from `ServiceStack.IPut` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IPut : ServiceStack.IVerb + { + } + + // Generated from `ServiceStack.IPut<>` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IPut + { + object Put(T request); + } + + // Generated from `ServiceStack.IPutVoid<>` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IPutVoid + { + void Put(T request); + } + + // Generated from `ServiceStack.IQuery` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IQuery : ServiceStack.IMeta + { + string Fields { get; set; } + string Include { get; set; } + string OrderBy { get; set; } + string OrderByDesc { get; set; } + int? Skip { get; set; } + int? Take { get; set; } + } + + // Generated from `ServiceStack.IQueryData` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IQueryData : ServiceStack.IQuery, ServiceStack.IMeta + { + } + + // Generated from `ServiceStack.IQueryData<,>` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IQueryData : ServiceStack.IQueryData, ServiceStack.IQuery, ServiceStack.IMeta + { + } + + // Generated from `ServiceStack.IQueryData<>` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IQueryData : ServiceStack.IQueryData, ServiceStack.IQuery, ServiceStack.IMeta + { + } + + // Generated from `ServiceStack.IQueryDb` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IQueryDb : ServiceStack.IQuery, ServiceStack.IMeta + { + } + + // Generated from `ServiceStack.IQueryDb<,>` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IQueryDb : ServiceStack.IQueryDb, ServiceStack.IQuery, ServiceStack.IMeta + { + } + + // Generated from `ServiceStack.IQueryDb<>` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IQueryDb : ServiceStack.IQueryDb, ServiceStack.IQuery, ServiceStack.IMeta + { + } + + // Generated from `ServiceStack.IQueryResponse` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IQueryResponse : ServiceStack.IMeta, ServiceStack.IHasResponseStatus + { + int Offset { get; set; } + int Total { get; set; } + } + + // Generated from `ServiceStack.IRawString` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IRawString + { + string ToRawString(); + } + + // Generated from `ServiceStack.IReceiver` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IReceiver + { + void NoSuchMethod(string selector, object message); + } + + // Generated from `ServiceStack.IReflectAttributeConverter` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IReflectAttributeConverter + { + ServiceStack.ReflectAttribute ToReflectAttribute(); + } + + // Generated from `ServiceStack.IReplyClient` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IReplyClient : ServiceStack.IServiceGateway + { + } + + // Generated from `ServiceStack.IRequiresSchema` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IRequiresSchema + { + void InitSchema(); + } + + // Generated from `ServiceStack.IRequiresSchemaAsync` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IRequiresSchemaAsync + { + System.Threading.Tasks.Task InitSchemaAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + } + + // Generated from `ServiceStack.IResponseStatus` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IResponseStatus + { + string ErrorCode { get; set; } + string ErrorMessage { get; set; } + bool IsSuccess { get; } + string StackTrace { get; set; } + } + + // Generated from `ServiceStack.IRestClient` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IRestClient : System.IDisposable, ServiceStack.IServiceClientCommon, ServiceStack.IRestClientSync + { + void AddHeader(string name, string value); + void ClearCookies(); + TResponse Delete(string relativeOrAbsoluteUrl); + TResponse Get(string relativeOrAbsoluteUrl); + System.Collections.Generic.Dictionary GetCookieValues(); + System.Collections.Generic.IEnumerable GetLazy(ServiceStack.IReturn> queryDto); + TResponse Patch(string relativeOrAbsoluteUrl, object requestDto); + TResponse Post(string relativeOrAbsoluteUrl, object request); + TResponse PostFile(string relativeOrAbsoluteUrl, System.IO.Stream fileToUpload, string fileName, string mimeType); + TResponse PostFileWithRequest(string relativeOrAbsoluteUrl, System.IO.Stream fileToUpload, string fileName, object request, string fieldName = default(string)); + TResponse PostFileWithRequest(System.IO.Stream fileToUpload, string fileName, object request, string fieldName = default(string)); + TResponse PostFilesWithRequest(string relativeOrAbsoluteUrl, object request, System.Collections.Generic.IEnumerable files); + TResponse PostFilesWithRequest(object request, System.Collections.Generic.IEnumerable files); + TResponse Put(string relativeOrAbsoluteUrl, object requestDto); + TResponse Send(string httpMethod, string relativeOrAbsoluteUrl, object request); + void SetCookie(string name, string value, System.TimeSpan? expiresIn = default(System.TimeSpan?)); + } + + // Generated from `ServiceStack.IRestClientAsync` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IRestClientAsync : System.IDisposable, ServiceStack.IServiceClientCommon + { + System.Threading.Tasks.Task CustomMethodAsync(string httpVerb, object requestDto, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task CustomMethodAsync(string httpVerb, ServiceStack.IReturn requestDto, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task CustomMethodAsync(string httpVerb, ServiceStack.IReturnVoid requestDto, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task DeleteAsync(object requestDto, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task DeleteAsync(ServiceStack.IReturn requestDto, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task DeleteAsync(ServiceStack.IReturnVoid requestDto, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task GetAsync(object requestDto, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task GetAsync(ServiceStack.IReturn requestDto, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task GetAsync(ServiceStack.IReturnVoid requestDto, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task PatchAsync(object requestDto, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task PatchAsync(ServiceStack.IReturn requestDto, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task PatchAsync(ServiceStack.IReturnVoid requestDto, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task PostAsync(object requestDto, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task PostAsync(ServiceStack.IReturn requestDto, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task PostAsync(ServiceStack.IReturnVoid requestDto, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task PutAsync(object requestDto, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task PutAsync(ServiceStack.IReturn requestDto, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task PutAsync(ServiceStack.IReturnVoid requestDto, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + } + + // Generated from `ServiceStack.IRestClientSync` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IRestClientSync : System.IDisposable, ServiceStack.IServiceClientCommon + { + void CustomMethod(string httpVerb, ServiceStack.IReturnVoid requestDto); + TResponse CustomMethod(string httpVerb, object requestDto); + TResponse CustomMethod(string httpVerb, ServiceStack.IReturn requestDto); + void Delete(ServiceStack.IReturnVoid requestDto); + TResponse Delete(object requestDto); + TResponse Delete(ServiceStack.IReturn requestDto); + void Get(ServiceStack.IReturnVoid requestDto); + TResponse Get(object requestDto); + TResponse Get(ServiceStack.IReturn requestDto); + void Patch(ServiceStack.IReturnVoid requestDto); + TResponse Patch(object requestDto); + TResponse Patch(ServiceStack.IReturn requestDto); + void Post(ServiceStack.IReturnVoid requestDto); + TResponse Post(object requestDto); + TResponse Post(ServiceStack.IReturn requestDto); + void Put(ServiceStack.IReturnVoid requestDto); + TResponse Put(object requestDto); + TResponse Put(ServiceStack.IReturn requestDto); + } + + // Generated from `ServiceStack.IRestGateway` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IRestGateway + { + T Delete(ServiceStack.IReturn request); + T Get(ServiceStack.IReturn request); + T Post(ServiceStack.IReturn request); + T Put(ServiceStack.IReturn request); + T Send(ServiceStack.IReturn request); + } + + // Generated from `ServiceStack.IRestGatewayAsync` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IRestGatewayAsync + { + System.Threading.Tasks.Task DeleteAsync(ServiceStack.IReturn request, System.Threading.CancellationToken token); + System.Threading.Tasks.Task GetAsync(ServiceStack.IReturn request, System.Threading.CancellationToken token); + System.Threading.Tasks.Task PostAsync(ServiceStack.IReturn request, System.Threading.CancellationToken token); + System.Threading.Tasks.Task PutAsync(ServiceStack.IReturn request, System.Threading.CancellationToken token); + System.Threading.Tasks.Task SendAsync(ServiceStack.IReturn request, System.Threading.CancellationToken token); + } + + // Generated from `ServiceStack.IRestServiceClient` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IRestServiceClient : System.IDisposable, ServiceStack.IServiceGatewayAsync, ServiceStack.IServiceGateway, ServiceStack.IServiceClientSync, ServiceStack.IServiceClientCommon, ServiceStack.IServiceClientAsync, ServiceStack.IRestClientSync, ServiceStack.IRestClientAsync, ServiceStack.IHasVersion, ServiceStack.IHasSessionId, ServiceStack.IHasBearerToken + { + } + + // Generated from `ServiceStack.IReturn` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IReturn + { + } + + // Generated from `ServiceStack.IReturn<>` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IReturn : ServiceStack.IReturn + { + } + + // Generated from `ServiceStack.IReturnVoid` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IReturnVoid : ServiceStack.IReturn + { + } + + // Generated from `ServiceStack.ISaveDb<>` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface ISaveDb
    : ServiceStack.ICrud + { + } + + // Generated from `ServiceStack.IScriptValue` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IScriptValue + { + string Eval { get; set; } + string Expression { get; set; } + bool NoCache { get; set; } + object Value { get; set; } + } + + // Generated from `ServiceStack.ISequenceSource` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface ISequenceSource : ServiceStack.IRequiresSchema + { + System.Int64 Increment(string key, System.Int64 amount = default(System.Int64)); + void Reset(string key, System.Int64 startingAt = default(System.Int64)); + } + + // Generated from `ServiceStack.ISequenceSourceAsync` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface ISequenceSourceAsync : ServiceStack.IRequiresSchema + { + System.Threading.Tasks.Task IncrementAsync(string key, System.Int64 amount = default(System.Int64), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task ResetAsync(string key, System.Int64 startingAt = default(System.Int64), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + } + + // Generated from `ServiceStack.IService` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IService + { + } + + // Generated from `ServiceStack.IServiceAfterFilter` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IServiceAfterFilter + { + object OnAfterExecute(object response); + } + + // Generated from `ServiceStack.IServiceAfterFilterAsync` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IServiceAfterFilterAsync + { + System.Threading.Tasks.Task OnAfterExecuteAsync(object response); + } + + // Generated from `ServiceStack.IServiceBeforeFilter` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IServiceBeforeFilter + { + void OnBeforeExecute(object requestDto); + } + + // Generated from `ServiceStack.IServiceBeforeFilterAsync` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IServiceBeforeFilterAsync + { + System.Threading.Tasks.Task OnBeforeExecuteAsync(object requestDto); + } + + // Generated from `ServiceStack.IServiceClient` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IServiceClient : System.IDisposable, ServiceStack.IServiceGatewayAsync, ServiceStack.IServiceGateway, ServiceStack.IServiceClientSync, ServiceStack.IServiceClientCommon, ServiceStack.IServiceClientAsync, ServiceStack.IRestServiceClient, ServiceStack.IRestClientSync, ServiceStack.IRestClientAsync, ServiceStack.IRestClient, ServiceStack.IReplyClient, ServiceStack.IOneWayClient, ServiceStack.IHttpRestClientAsync, ServiceStack.IHasVersion, ServiceStack.IHasSessionId, ServiceStack.IHasBearerToken + { + } + + // Generated from `ServiceStack.IServiceClientAsync` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IServiceClientAsync : System.IDisposable, ServiceStack.IServiceGatewayAsync, ServiceStack.IServiceClientCommon, ServiceStack.IRestClientAsync + { + } + + // Generated from `ServiceStack.IServiceClientCommon` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IServiceClientCommon : System.IDisposable + { + void SetCredentials(string userName, string password); + } + + // Generated from `ServiceStack.IServiceClientSync` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IServiceClientSync : System.IDisposable, ServiceStack.IServiceGateway, ServiceStack.IServiceClientCommon, ServiceStack.IRestClientSync + { + } + + // Generated from `ServiceStack.IServiceErrorFilter` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IServiceErrorFilter + { + System.Threading.Tasks.Task OnExceptionAsync(object requestDto, System.Exception ex); + } + + // Generated from `ServiceStack.IServiceFilters` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IServiceFilters : ServiceStack.IServiceErrorFilter, ServiceStack.IServiceBeforeFilter, ServiceStack.IServiceAfterFilter + { + } + + // Generated from `ServiceStack.IServiceGateway` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IServiceGateway + { + void Publish(object requestDto); + void PublishAll(System.Collections.Generic.IEnumerable requestDtos); + TResponse Send(object requestDto); + System.Collections.Generic.List SendAll(System.Collections.Generic.IEnumerable requestDtos); + } + + // Generated from `ServiceStack.IServiceGatewayAsync` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IServiceGatewayAsync + { + System.Threading.Tasks.Task PublishAllAsync(System.Collections.Generic.IEnumerable requestDtos, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task PublishAsync(object requestDto, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task> SendAllAsync(System.Collections.Generic.IEnumerable requestDtos, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task SendAsync(object requestDto, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + } + + // Generated from `ServiceStack.IStream` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IStream : ServiceStack.IVerb + { + } + + // Generated from `ServiceStack.IUpdateDb<>` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IUpdateDb
    : ServiceStack.ICrud + { + } + + // Generated from `ServiceStack.IUrlFilter` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IUrlFilter + { + string ToUrl(string absoluteUrl); + } + + // Generated from `ServiceStack.IValidateRule` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IValidateRule + { + string Condition { get; set; } + string ErrorCode { get; set; } + string Message { get; set; } + string Validator { get; set; } + } + + // Generated from `ServiceStack.IValidationSource` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IValidationSource + { + System.Collections.Generic.IEnumerable> GetValidationRules(System.Type type); + } + + // Generated from `ServiceStack.IValidationSourceAdmin` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IValidationSourceAdmin + { + System.Threading.Tasks.Task ClearCacheAsync(); + System.Threading.Tasks.Task DeleteValidationRulesAsync(params int[] ids); + System.Threading.Tasks.Task> GetAllValidateRulesAsync(string typeName); + System.Threading.Tasks.Task> GetValidateRulesByIdsAsync(params int[] ids); + System.Threading.Tasks.Task SaveValidationRulesAsync(System.Collections.Generic.List validateRules); + } + + // Generated from `ServiceStack.IVerb` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IVerb + { + } + + // Generated from `ServiceStack.IdResponse` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class IdResponse : ServiceStack.IHasResponseStatus + { + public string Id { get => throw null; set => throw null; } + public IdResponse() => throw null; + public ServiceStack.ResponseStatus ResponseStatus { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.Lang` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + [System.Flags] + public enum Lang + { + CSharp, + Dart, + FSharp, + Java, + Kotlin, + Swift, + TypeScript, + Vb, + } + + // Generated from `ServiceStack.NamedConnectionAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class NamedConnectionAttribute : ServiceStack.AttributeBase + { + public string Name { get => throw null; set => throw null; } + public NamedConnectionAttribute(string name) => throw null; + } + + // Generated from `ServiceStack.NavItem` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class NavItem : ServiceStack.IMeta + { + public System.Collections.Generic.List Children { get => throw null; set => throw null; } + public string ClassName { get => throw null; set => throw null; } + public bool? Exact { get => throw null; set => throw null; } + public string Hide { get => throw null; set => throw null; } + public string Href { get => throw null; set => throw null; } + public string IconClass { get => throw null; set => throw null; } + public string Id { get => throw null; set => throw null; } + public string Label { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary Meta { get => throw null; set => throw null; } + public NavItem() => throw null; + public string Show { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.Network` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public enum Network + { + External, + LocalSubnet, + Localhost, + } + + // Generated from `ServiceStack.PageArgAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class PageArgAttribute : ServiceStack.AttributeBase + { + public string Name { get => throw null; set => throw null; } + public PageArgAttribute(string name, string value) => throw null; + public string Value { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.PageAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class PageAttribute : ServiceStack.AttributeBase + { + public string Layout { get => throw null; set => throw null; } + public PageAttribute(string virtualPath, string layout = default(string)) => throw null; + public string VirtualPath { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.PriorityAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class PriorityAttribute : ServiceStack.AttributeBase + { + public PriorityAttribute(int value) => throw null; + public int Value { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.Properties` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class Properties : System.Collections.Generic.List + { + public Properties(System.Collections.Generic.IEnumerable collection) => throw null; + public Properties() => throw null; + } + + // Generated from `ServiceStack.Property` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class Property + { + public string Name { get => throw null; set => throw null; } + public Property() => throw null; + public string Value { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.QueryBase` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public abstract class QueryBase : ServiceStack.IQuery, ServiceStack.IMeta + { + public virtual string Fields { get => throw null; set => throw null; } + public virtual string Include { get => throw null; set => throw null; } + public virtual System.Collections.Generic.Dictionary Meta { get => throw null; set => throw null; } + public virtual string OrderBy { get => throw null; set => throw null; } + public virtual string OrderByDesc { get => throw null; set => throw null; } + protected QueryBase() => throw null; + public virtual int? Skip { get => throw null; set => throw null; } + public virtual int? Take { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.QueryData<,>` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public abstract class QueryData : ServiceStack.QueryBase, ServiceStack.IReturn>, ServiceStack.IReturn, ServiceStack.IQueryData, ServiceStack.IQueryData, ServiceStack.IQuery, ServiceStack.IMeta + { + protected QueryData() => throw null; + } + + // Generated from `ServiceStack.QueryData<>` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public abstract class QueryData : ServiceStack.QueryBase, ServiceStack.IReturn>, ServiceStack.IReturn, ServiceStack.IQueryData, ServiceStack.IQueryData, ServiceStack.IQuery, ServiceStack.IMeta + { + protected QueryData() => throw null; + } + + // Generated from `ServiceStack.QueryDataAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class QueryDataAttribute : ServiceStack.AttributeBase + { + public ServiceStack.QueryTerm DefaultTerm { get => throw null; set => throw null; } + public QueryDataAttribute(ServiceStack.QueryTerm defaultTerm) => throw null; + public QueryDataAttribute() => throw null; + } + + // Generated from `ServiceStack.QueryDataFieldAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class QueryDataFieldAttribute : ServiceStack.AttributeBase + { + public string Condition { get => throw null; set => throw null; } + public string Field { get => throw null; set => throw null; } + public QueryDataFieldAttribute() => throw null; + public ServiceStack.QueryTerm Term { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.QueryDb<,>` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public abstract class QueryDb : ServiceStack.QueryBase, ServiceStack.IReturn>, ServiceStack.IReturn, ServiceStack.IQueryDb, ServiceStack.IQueryDb, ServiceStack.IQuery, ServiceStack.IMeta + { + protected QueryDb() => throw null; + } + + // Generated from `ServiceStack.QueryDb<>` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public abstract class QueryDb : ServiceStack.QueryBase, ServiceStack.IReturn>, ServiceStack.IReturn, ServiceStack.IQueryDb, ServiceStack.IQueryDb, ServiceStack.IQuery, ServiceStack.IMeta + { + protected QueryDb() => throw null; + } + + // Generated from `ServiceStack.QueryDbAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class QueryDbAttribute : ServiceStack.AttributeBase + { + public ServiceStack.QueryTerm DefaultTerm { get => throw null; set => throw null; } + public QueryDbAttribute(ServiceStack.QueryTerm defaultTerm) => throw null; + public QueryDbAttribute() => throw null; + } + + // Generated from `ServiceStack.QueryDbFieldAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class QueryDbFieldAttribute : ServiceStack.AttributeBase + { + public string Field { get => throw null; set => throw null; } + public string Operand { get => throw null; set => throw null; } + public QueryDbFieldAttribute() => throw null; + public string Template { get => throw null; set => throw null; } + public ServiceStack.QueryTerm Term { get => throw null; set => throw null; } + public int ValueArity { get => throw null; set => throw null; } + public string ValueFormat { get => throw null; set => throw null; } + public ServiceStack.ValueStyle ValueStyle { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.QueryResponse<>` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class QueryResponse : ServiceStack.IQueryResponse, ServiceStack.IMeta, ServiceStack.IHasResponseStatus + { + public virtual System.Collections.Generic.Dictionary Meta { get => throw null; set => throw null; } + public virtual int Offset { get => throw null; set => throw null; } + public QueryResponse() => throw null; + public virtual ServiceStack.ResponseStatus ResponseStatus { get => throw null; set => throw null; } + public virtual System.Collections.Generic.List Results { get => throw null; set => throw null; } + public virtual int Total { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.QueryTerm` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public enum QueryTerm + { + And, + Default, + Ensure, + Or, + } + + // Generated from `ServiceStack.ReflectAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ReflectAttribute + { + public System.Collections.Generic.List> ConstructorArgs { get => throw null; set => throw null; } + public string Name { get => throw null; set => throw null; } + public System.Collections.Generic.List> PropertyArgs { get => throw null; set => throw null; } + public ReflectAttribute() => throw null; + } + + // Generated from `ServiceStack.RequestAttributes` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + [System.Flags] + public enum RequestAttributes + { + Any, + AnyCallStyle, + AnyEndpoint, + AnyFormat, + AnyHttpMethod, + AnyNetworkAccessType, + AnySecurityMode, + Csv, + EndpointOther, + External, + FormatOther, + Grpc, + Html, + Http, + HttpDelete, + HttpGet, + HttpHead, + HttpOptions, + HttpOther, + HttpPatch, + HttpPost, + HttpPut, + InProcess, + InSecure, + InternalNetworkAccess, + Json, + Jsv, + LocalSubnet, + Localhost, + MessageQueue, + MsgPack, + None, + OneWay, + ProtoBuf, + Reply, + Secure, + Soap11, + Soap12, + Tcp, + Wire, + Xml, + } + + // Generated from `ServiceStack.RequestAttributesExtensions` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class RequestAttributesExtensions + { + public static string FromFormat(this ServiceStack.Format format) => throw null; + public static bool IsExternal(this ServiceStack.RequestAttributes attrs) => throw null; + public static bool IsLocalSubnet(this ServiceStack.RequestAttributes attrs) => throw null; + public static bool IsLocalhost(this ServiceStack.RequestAttributes attrs) => throw null; + public static ServiceStack.Feature ToFeature(this ServiceStack.Format format) => throw null; + public static ServiceStack.Format ToFormat(this string format) => throw null; + public static ServiceStack.Format ToFormat(this ServiceStack.Feature feature) => throw null; + public static ServiceStack.Feature ToSoapFeature(this ServiceStack.RequestAttributes attributes) => throw null; + } + + // Generated from `ServiceStack.RequestLogEntry` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class RequestLogEntry : ServiceStack.IMeta + { + public string AbsoluteUri { get => throw null; set => throw null; } + public System.DateTime DateTime { get => throw null; set => throw null; } + public object ErrorResponse { get => throw null; set => throw null; } + public System.Collections.IDictionary ExceptionData { get => throw null; set => throw null; } + public string ExceptionSource { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary FormData { get => throw null; set => throw null; } + public string ForwardedFor { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary Headers { get => throw null; set => throw null; } + public string HttpMethod { get => throw null; set => throw null; } + public System.Int64 Id { get => throw null; set => throw null; } + public string IpAddress { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary Items { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary Meta { get => throw null; set => throw null; } + public string PathInfo { get => throw null; set => throw null; } + public string Referer { get => throw null; set => throw null; } + public string RequestBody { get => throw null; set => throw null; } + public object RequestDto { get => throw null; set => throw null; } + public System.TimeSpan RequestDuration { get => throw null; set => throw null; } + public RequestLogEntry() => throw null; + public object ResponseDto { get => throw null; set => throw null; } + public object Session { get => throw null; set => throw null; } + public string SessionId { get => throw null; set => throw null; } + public int StatusCode { get => throw null; set => throw null; } + public string StatusDescription { get => throw null; set => throw null; } + public string UserAuthId { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.ResponseError` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ResponseError : ServiceStack.IMeta + { + public string ErrorCode { get => throw null; set => throw null; } + public string FieldName { get => throw null; set => throw null; } + public string Message { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary Meta { get => throw null; set => throw null; } + public ResponseError() => throw null; + } + + // Generated from `ServiceStack.ResponseStatus` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ResponseStatus : ServiceStack.IMeta + { + public string ErrorCode { get => throw null; set => throw null; } + public System.Collections.Generic.List Errors { get => throw null; set => throw null; } + public string Message { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary Meta { get => throw null; set => throw null; } + public ResponseStatus(string errorCode, string message) => throw null; + public ResponseStatus(string errorCode) => throw null; + public ResponseStatus() => throw null; + public string StackTrace { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.RestrictAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class RestrictAttribute : ServiceStack.AttributeBase + { + public ServiceStack.RequestAttributes AccessTo { get => throw null; set => throw null; } + public ServiceStack.RequestAttributes[] AccessibleToAny { get => throw null; set => throw null; } + public bool CanShowTo(ServiceStack.RequestAttributes restrictions) => throw null; + public bool ExternalOnly { get => throw null; set => throw null; } + public bool HasAccessTo(ServiceStack.RequestAttributes restrictions) => throw null; + public bool HasNoAccessRestrictions { get => throw null; } + public bool HasNoVisibilityRestrictions { get => throw null; } + public bool InternalOnly { get => throw null; set => throw null; } + public bool LocalhostOnly { get => throw null; set => throw null; } + public RestrictAttribute(params ServiceStack.RequestAttributes[] restrictAccessAndVisibilityToScenarios) => throw null; + public RestrictAttribute(ServiceStack.RequestAttributes[] allowedAccessScenarios, ServiceStack.RequestAttributes[] visibleToScenarios) => throw null; + public RestrictAttribute() => throw null; + public ServiceStack.RequestAttributes VisibilityTo { get => throw null; set => throw null; } + public bool VisibleInternalOnly { get => throw null; set => throw null; } + public bool VisibleLocalhostOnly { get => throw null; set => throw null; } + public ServiceStack.RequestAttributes[] VisibleToAny { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.RestrictExtensions` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class RestrictExtensions + { + public static bool HasAnyRestrictionsOf(ServiceStack.RequestAttributes allRestrictions, ServiceStack.RequestAttributes restrictions) => throw null; + public static ServiceStack.RequestAttributes ToAllowedFlagsSet(this ServiceStack.RequestAttributes restrictTo) => throw null; + } + + // Generated from `ServiceStack.RouteAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class RouteAttribute : ServiceStack.AttributeBase, ServiceStack.IReflectAttributeConverter + { + public override bool Equals(object obj) => throw null; + protected bool Equals(ServiceStack.RouteAttribute other) => throw null; + public override int GetHashCode() => throw null; + public string Matches { get => throw null; set => throw null; } + public string Notes { get => throw null; set => throw null; } + public string Path { get => throw null; set => throw null; } + public int Priority { get => throw null; set => throw null; } + public RouteAttribute(string path, string verbs) => throw null; + public RouteAttribute(string path) => throw null; + public string Summary { get => throw null; set => throw null; } + public ServiceStack.ReflectAttribute ToReflectAttribute() => throw null; + public string Verbs { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.ScriptValue` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public struct ScriptValue : ServiceStack.IScriptValue + { + public string Eval { get => throw null; set => throw null; } + public string Expression { get => throw null; set => throw null; } + public bool NoCache { get => throw null; set => throw null; } + // Stub generator skipped constructor + public object Value { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.ScriptValueAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public abstract class ScriptValueAttribute : ServiceStack.AttributeBase, ServiceStack.IScriptValue + { + public string Eval { get => throw null; set => throw null; } + public string Expression { get => throw null; set => throw null; } + public bool NoCache { get => throw null; set => throw null; } + protected ScriptValueAttribute() => throw null; + public object Value { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.Security` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public enum Security + { + InSecure, + Secure, + } + + // Generated from `ServiceStack.SqlTemplate` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class SqlTemplate + { + public const string CaseInsensitiveLike = default; + public const string CaseSensitiveLike = default; + public const string GreaterThan = default; + public const string GreaterThanOrEqual = default; + public const string IsNotNull = default; + public const string IsNull = default; + public const string LessThan = default; + public const string LessThanOrEqual = default; + public const string NotEqual = default; + } + + // Generated from `ServiceStack.StrictModeException` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class StrictModeException : System.ArgumentException + { + public string Code { get => throw null; set => throw null; } + public StrictModeException(string message, string paramName, string code = default(string)) => throw null; + public StrictModeException(string message, string code = default(string)) => throw null; + public StrictModeException(string message, System.Exception innerException, string code = default(string)) => throw null; + public StrictModeException() => throw null; + } + + // Generated from `ServiceStack.StringResponse` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class StringResponse : ServiceStack.IMeta, ServiceStack.IHasResponseStatus + { + public System.Collections.Generic.Dictionary Meta { get => throw null; set => throw null; } + public ServiceStack.ResponseStatus ResponseStatus { get => throw null; set => throw null; } + public string Results { get => throw null; set => throw null; } + public StringResponse() => throw null; + } + + // Generated from `ServiceStack.StringsResponse` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class StringsResponse : ServiceStack.IMeta, ServiceStack.IHasResponseStatus + { + public System.Collections.Generic.Dictionary Meta { get => throw null; set => throw null; } + public ServiceStack.ResponseStatus ResponseStatus { get => throw null; set => throw null; } + public System.Collections.Generic.List Results { get => throw null; set => throw null; } + public StringsResponse() => throw null; + } + + // Generated from `ServiceStack.SwaggerType` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class SwaggerType + { + public const string Array = default; + public const string Boolean = default; + public const string Byte = default; + public const string Date = default; + public const string Double = default; + public const string Float = default; + public const string Int = default; + public const string Long = default; + public const string String = default; + } + + // Generated from `ServiceStack.SynthesizeAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class SynthesizeAttribute : ServiceStack.AttributeBase + { + public SynthesizeAttribute() => throw null; + } + + // Generated from `ServiceStack.TagAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class TagAttribute : ServiceStack.AttributeBase + { + public ServiceStack.ApplyTo ApplyTo { get => throw null; set => throw null; } + public string Name { get => throw null; set => throw null; } + public TagAttribute(string name, ServiceStack.ApplyTo applyTo) => throw null; + public TagAttribute(string name) => throw null; + public TagAttribute() => throw null; + } + + // Generated from `ServiceStack.UploadFile` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class UploadFile + { + public string ContentType { get => throw null; set => throw null; } + public string FieldName { get => throw null; set => throw null; } + public string FileName { get => throw null; set => throw null; } + public System.IO.Stream Stream { get => throw null; set => throw null; } + public UploadFile(string fileName, System.IO.Stream stream, string fieldName, string contentType) => throw null; + public UploadFile(string fileName, System.IO.Stream stream, string fieldName) => throw null; + public UploadFile(string fileName, System.IO.Stream stream) => throw null; + public UploadFile(System.IO.Stream stream) => throw null; + } + + // Generated from `ServiceStack.ValidateAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ValidateAttribute : ServiceStack.AttributeBase, ServiceStack.IValidateRule, ServiceStack.IReflectAttributeConverter + { + public string[] AllConditions { get => throw null; set => throw null; } + public string[] AnyConditions { get => throw null; set => throw null; } + public static string Combine(string comparand, params string[] conditions) => throw null; + public string Condition { get => throw null; set => throw null; } + public string ErrorCode { get => throw null; set => throw null; } + public string Message { get => throw null; set => throw null; } + public ServiceStack.ReflectAttribute ToReflectAttribute() => throw null; + public ValidateAttribute(string validator) => throw null; + public ValidateAttribute() => throw null; + public string Validator { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.ValidateCreditCardAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ValidateCreditCardAttribute : ServiceStack.ValidateAttribute + { + public ValidateCreditCardAttribute() => throw null; + } + + // Generated from `ServiceStack.ValidateEmailAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ValidateEmailAttribute : ServiceStack.ValidateAttribute + { + public ValidateEmailAttribute() => throw null; + } + + // Generated from `ServiceStack.ValidateEmptyAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ValidateEmptyAttribute : ServiceStack.ValidateAttribute + { + public ValidateEmptyAttribute() => throw null; + } + + // Generated from `ServiceStack.ValidateEqualAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ValidateEqualAttribute : ServiceStack.ValidateAttribute + { + public ValidateEqualAttribute(string value) => throw null; + public ValidateEqualAttribute(int value) => throw null; + } + + // Generated from `ServiceStack.ValidateExactLengthAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ValidateExactLengthAttribute : ServiceStack.ValidateAttribute + { + public ValidateExactLengthAttribute(int length) => throw null; + } + + // Generated from `ServiceStack.ValidateExclusiveBetweenAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ValidateExclusiveBetweenAttribute : ServiceStack.ValidateAttribute + { + public ValidateExclusiveBetweenAttribute(string from, string to) => throw null; + public ValidateExclusiveBetweenAttribute(int from, int to) => throw null; + public ValidateExclusiveBetweenAttribute(System.Char from, System.Char to) => throw null; + } + + // Generated from `ServiceStack.ValidateGreaterThanAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ValidateGreaterThanAttribute : ServiceStack.ValidateAttribute + { + public ValidateGreaterThanAttribute(int value) => throw null; + } + + // Generated from `ServiceStack.ValidateGreaterThanOrEqualAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ValidateGreaterThanOrEqualAttribute : ServiceStack.ValidateAttribute + { + public ValidateGreaterThanOrEqualAttribute(int value) => throw null; + } + + // Generated from `ServiceStack.ValidateHasPermissionAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ValidateHasPermissionAttribute : ServiceStack.ValidateRequestAttribute + { + public ValidateHasPermissionAttribute(string permission) => throw null; + } + + // Generated from `ServiceStack.ValidateHasRoleAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ValidateHasRoleAttribute : ServiceStack.ValidateRequestAttribute + { + public ValidateHasRoleAttribute(string role) => throw null; + } + + // Generated from `ServiceStack.ValidateInclusiveBetweenAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ValidateInclusiveBetweenAttribute : ServiceStack.ValidateAttribute + { + public ValidateInclusiveBetweenAttribute(string from, string to) => throw null; + public ValidateInclusiveBetweenAttribute(int from, int to) => throw null; + public ValidateInclusiveBetweenAttribute(System.Char from, System.Char to) => throw null; + } + + // Generated from `ServiceStack.ValidateIsAdminAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ValidateIsAdminAttribute : ServiceStack.ValidateRequestAttribute + { + public ValidateIsAdminAttribute() => throw null; + } + + // Generated from `ServiceStack.ValidateIsAuthenticatedAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ValidateIsAuthenticatedAttribute : ServiceStack.ValidateRequestAttribute + { + public ValidateIsAuthenticatedAttribute() => throw null; + } + + // Generated from `ServiceStack.ValidateLengthAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ValidateLengthAttribute : ServiceStack.ValidateAttribute + { + public ValidateLengthAttribute(int min, int max) => throw null; + } + + // Generated from `ServiceStack.ValidateLessThanAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ValidateLessThanAttribute : ServiceStack.ValidateAttribute + { + public ValidateLessThanAttribute(int value) => throw null; + } + + // Generated from `ServiceStack.ValidateLessThanOrEqualAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ValidateLessThanOrEqualAttribute : ServiceStack.ValidateAttribute + { + public ValidateLessThanOrEqualAttribute(int value) => throw null; + } + + // Generated from `ServiceStack.ValidateMaximumLengthAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ValidateMaximumLengthAttribute : ServiceStack.ValidateAttribute + { + public ValidateMaximumLengthAttribute(int max) => throw null; + } + + // Generated from `ServiceStack.ValidateMinimumLengthAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ValidateMinimumLengthAttribute : ServiceStack.ValidateAttribute + { + public ValidateMinimumLengthAttribute(int min) => throw null; + } + + // Generated from `ServiceStack.ValidateNotEmptyAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ValidateNotEmptyAttribute : ServiceStack.ValidateAttribute + { + public ValidateNotEmptyAttribute() => throw null; + } + + // Generated from `ServiceStack.ValidateNotEqualAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ValidateNotEqualAttribute : ServiceStack.ValidateAttribute + { + public ValidateNotEqualAttribute(string value) => throw null; + public ValidateNotEqualAttribute(int value) => throw null; + } + + // Generated from `ServiceStack.ValidateNotNullAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ValidateNotNullAttribute : ServiceStack.ValidateAttribute + { + public ValidateNotNullAttribute() => throw null; + } + + // Generated from `ServiceStack.ValidateNullAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ValidateNullAttribute : ServiceStack.ValidateAttribute + { + public ValidateNullAttribute() => throw null; + } + + // Generated from `ServiceStack.ValidateRegularExpressionAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ValidateRegularExpressionAttribute : ServiceStack.ValidateAttribute + { + public ValidateRegularExpressionAttribute(string pattern) => throw null; + } + + // Generated from `ServiceStack.ValidateRequestAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ValidateRequestAttribute : ServiceStack.AttributeBase, ServiceStack.IValidateRule, ServiceStack.IReflectAttributeConverter + { + public string[] AllConditions { get => throw null; set => throw null; } + public string[] AnyConditions { get => throw null; set => throw null; } + public string Condition { get => throw null; set => throw null; } + public string[] Conditions { get => throw null; set => throw null; } + public string ErrorCode { get => throw null; set => throw null; } + public string Message { get => throw null; set => throw null; } + public int StatusCode { get => throw null; set => throw null; } + public ServiceStack.ReflectAttribute ToReflectAttribute() => throw null; + public ValidateRequestAttribute(string validator) => throw null; + public ValidateRequestAttribute() => throw null; + public string Validator { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.ValidateRule` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ValidateRule : ServiceStack.IValidateRule + { + public string Condition { get => throw null; set => throw null; } + public string ErrorCode { get => throw null; set => throw null; } + public string Message { get => throw null; set => throw null; } + public ValidateRule() => throw null; + public string Validator { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.ValidateScalePrecisionAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ValidateScalePrecisionAttribute : ServiceStack.ValidateAttribute + { + public ValidateScalePrecisionAttribute(int scale, int precision) => throw null; + } + + // Generated from `ServiceStack.ValidationRule` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ValidationRule : ServiceStack.ValidateRule + { + public string CreatedBy { get => throw null; set => throw null; } + public System.DateTime? CreatedDate { get => throw null; set => throw null; } + public override bool Equals(object obj) => throw null; + protected bool Equals(ServiceStack.ValidationRule other) => throw null; + public string Field { get => throw null; set => throw null; } + public override int GetHashCode() => throw null; + public int Id { get => throw null; set => throw null; } + public string ModifiedBy { get => throw null; set => throw null; } + public System.DateTime? ModifiedDate { get => throw null; set => throw null; } + public string Notes { get => throw null; set => throw null; } + public string SuspendedBy { get => throw null; set => throw null; } + public System.DateTime? SuspendedDate { get => throw null; set => throw null; } + public string Type { get => throw null; set => throw null; } + public ValidationRule() => throw null; + } + + // Generated from `ServiceStack.ValueStyle` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public enum ValueStyle + { + List, + Multiple, + Single, + } + + namespace Auth + { + // Generated from `ServiceStack.Auth.IAuthTokens` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IAuthTokens : ServiceStack.Auth.IUserAuthDetailsExtended + { + string AccessToken { get; set; } + string AccessTokenSecret { get; set; } + System.Collections.Generic.Dictionary Items { get; set; } + string Provider { get; set; } + string RefreshToken { get; set; } + System.DateTime? RefreshTokenExpiry { get; set; } + string RequestToken { get; set; } + string RequestTokenSecret { get; set; } + string UserId { get; set; } + } + + // Generated from `ServiceStack.Auth.IPasswordHasher` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IPasswordHasher + { + string HashPassword(string password); + bool VerifyPassword(string hashedPassword, string providedPassword, out bool needsRehash); + System.Byte Version { get; } + } + + // Generated from `ServiceStack.Auth.IUserAuth` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IUserAuth : ServiceStack.IMeta, ServiceStack.Auth.IUserAuthDetailsExtended + { + System.DateTime CreatedDate { get; set; } + string DigestHa1Hash { get; set; } + int Id { get; set; } + int InvalidLoginAttempts { get; set; } + System.DateTime? LastLoginAttempt { get; set; } + System.DateTime? LockedDate { get; set; } + System.DateTime ModifiedDate { get; set; } + string PasswordHash { get; set; } + System.Collections.Generic.List Permissions { get; set; } + string PrimaryEmail { get; set; } + int? RefId { get; set; } + string RefIdStr { get; set; } + System.Collections.Generic.List Roles { get; set; } + string Salt { get; set; } + } + + // Generated from `ServiceStack.Auth.IUserAuthDetails` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IUserAuthDetails : ServiceStack.IMeta, ServiceStack.Auth.IUserAuthDetailsExtended, ServiceStack.Auth.IAuthTokens + { + System.DateTime CreatedDate { get; set; } + int Id { get; set; } + System.DateTime ModifiedDate { get; set; } + int? RefId { get; set; } + string RefIdStr { get; set; } + int UserAuthId { get; set; } + } + + // Generated from `ServiceStack.Auth.IUserAuthDetailsExtended` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IUserAuthDetailsExtended + { + string Address { get; set; } + string Address2 { get; set; } + System.DateTime? BirthDate { get; set; } + string BirthDateRaw { get; set; } + string City { get; set; } + string Company { get; set; } + string Country { get; set; } + string Culture { get; set; } + string DisplayName { get; set; } + string Email { get; set; } + string FirstName { get; set; } + string FullName { get; set; } + string Gender { get; set; } + string Language { get; set; } + string LastName { get; set; } + string MailAddress { get; set; } + string Nickname { get; set; } + string PhoneNumber { get; set; } + string PostalCode { get; set; } + string State { get; set; } + string TimeZone { get; set; } + string UserName { get; set; } + } + + } + namespace Caching + { + // Generated from `ServiceStack.Caching.ICacheClient` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface ICacheClient : System.IDisposable + { + bool Add(string key, T value, System.TimeSpan expiresIn); + bool Add(string key, T value, System.DateTime expiresAt); + bool Add(string key, T value); + System.Int64 Decrement(string key, System.UInt32 amount); + void FlushAll(); + T Get(string key); + System.Collections.Generic.IDictionary GetAll(System.Collections.Generic.IEnumerable keys); + System.Int64 Increment(string key, System.UInt32 amount); + bool Remove(string key); + void RemoveAll(System.Collections.Generic.IEnumerable keys); + bool Replace(string key, T value, System.TimeSpan expiresIn); + bool Replace(string key, T value, System.DateTime expiresAt); + bool Replace(string key, T value); + bool Set(string key, T value, System.TimeSpan expiresIn); + bool Set(string key, T value, System.DateTime expiresAt); + bool Set(string key, T value); + void SetAll(System.Collections.Generic.IDictionary values); + } + + // Generated from `ServiceStack.Caching.ICacheClientAsync` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface ICacheClientAsync : System.IAsyncDisposable + { + System.Threading.Tasks.Task AddAsync(string key, T value, System.TimeSpan expiresIn, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task AddAsync(string key, T value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task AddAsync(string key, T value, System.DateTime expiresAt, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task DecrementAsync(string key, System.UInt32 amount, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task FlushAllAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task> GetAllAsync(System.Collections.Generic.IEnumerable keys, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task GetAsync(string key, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Collections.Generic.IAsyncEnumerable GetKeysByPatternAsync(string pattern, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task GetTimeToLiveAsync(string key, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task IncrementAsync(string key, System.UInt32 amount, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task RemoveAllAsync(System.Collections.Generic.IEnumerable keys, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task RemoveAsync(string key, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task RemoveExpiredEntriesAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task ReplaceAsync(string key, T value, System.TimeSpan expiresIn, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task ReplaceAsync(string key, T value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task ReplaceAsync(string key, T value, System.DateTime expiresAt, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task SetAllAsync(System.Collections.Generic.IDictionary values, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task SetAsync(string key, T value, System.TimeSpan expiresIn, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task SetAsync(string key, T value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task SetAsync(string key, T value, System.DateTime expiresAt, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + } + + // Generated from `ServiceStack.Caching.ICacheClientExtended` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface ICacheClientExtended : System.IDisposable, ServiceStack.Caching.ICacheClient + { + System.Collections.Generic.IEnumerable GetKeysByPattern(string pattern); + System.TimeSpan? GetTimeToLive(string key); + void RemoveExpiredEntries(); + } + + // Generated from `ServiceStack.Caching.IDeflateProvider` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IDeflateProvider + { + System.Byte[] Deflate(string text); + System.Byte[] Deflate(System.Byte[] bytes); + System.IO.Stream DeflateStream(System.IO.Stream outputStream); + string Inflate(System.Byte[] gzBuffer); + System.Byte[] InflateBytes(System.Byte[] gzBuffer); + System.IO.Stream InflateStream(System.IO.Stream inputStream); + } + + // Generated from `ServiceStack.Caching.IGZipProvider` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IGZipProvider + { + string GUnzip(System.Byte[] gzBuffer); + System.Byte[] GUnzipBytes(System.Byte[] gzBuffer); + System.IO.Stream GUnzipStream(System.IO.Stream gzStream); + System.Byte[] GZip(string text); + System.Byte[] GZip(System.Byte[] bytes); + System.IO.Stream GZipStream(System.IO.Stream outputStream); + } + + // Generated from `ServiceStack.Caching.IMemcachedClient` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IMemcachedClient : System.IDisposable + { + bool Add(string key, object value, System.DateTime expiresAt); + bool Add(string key, object value); + bool CheckAndSet(string key, object value, System.UInt64 lastModifiedValue, System.DateTime expiresAt); + bool CheckAndSet(string key, object value, System.UInt64 lastModifiedValue); + System.Int64 Decrement(string key, System.UInt32 amount); + void FlushAll(); + object Get(string key, out System.UInt64 lastModifiedValue); + object Get(string key); + System.Collections.Generic.IDictionary GetAll(System.Collections.Generic.IEnumerable keys, out System.Collections.Generic.IDictionary lastModifiedValues); + System.Collections.Generic.IDictionary GetAll(System.Collections.Generic.IEnumerable keys); + System.Int64 Increment(string key, System.UInt32 amount); + bool Remove(string key); + void RemoveAll(System.Collections.Generic.IEnumerable keys); + bool Replace(string key, object value, System.DateTime expiresAt); + bool Replace(string key, object value); + bool Set(string key, object value, System.DateTime expiresAt); + bool Set(string key, object value); + } + + // Generated from `ServiceStack.Caching.IRemoveByPattern` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IRemoveByPattern + { + void RemoveByPattern(string pattern); + void RemoveByRegex(string regex); + } + + // Generated from `ServiceStack.Caching.IRemoveByPatternAsync` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IRemoveByPatternAsync + { + System.Threading.Tasks.Task RemoveByPatternAsync(string pattern, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task RemoveByRegexAsync(string regex, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + } + + // Generated from `ServiceStack.Caching.ISession` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface ISession + { + T Get(string key); + object this[string key] { get; set; } + bool Remove(string key); + void RemoveAll(); + void Set(string key, T value); + } + + // Generated from `ServiceStack.Caching.ISessionAsync` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface ISessionAsync + { + System.Threading.Tasks.Task GetAsync(string key, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task RemoveAllAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task RemoveAsync(string key, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task SetAsync(string key, T value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + } + + // Generated from `ServiceStack.Caching.ISessionFactory` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface ISessionFactory + { + ServiceStack.Caching.ISession CreateSession(string sessionId); + ServiceStack.Caching.ISessionAsync CreateSessionAsync(string sessionId); + ServiceStack.Caching.ISession GetOrCreateSession(ServiceStack.Web.IRequest httpReq, ServiceStack.Web.IResponse httpRes); + ServiceStack.Caching.ISession GetOrCreateSession(); + ServiceStack.Caching.ISessionAsync GetOrCreateSessionAsync(ServiceStack.Web.IRequest httpReq, ServiceStack.Web.IResponse httpRes); + ServiceStack.Caching.ISessionAsync GetOrCreateSessionAsync(); + } + + } + namespace Commands + { + // Generated from `ServiceStack.Commands.ICommand` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface ICommand + { + void Execute(); + } + + // Generated from `ServiceStack.Commands.ICommand<>` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface ICommand + { + ReturnType Execute(); + } + + // Generated from `ServiceStack.Commands.ICommandExec` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface ICommandExec : ServiceStack.Commands.ICommand + { + } + + // Generated from `ServiceStack.Commands.ICommandList<>` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface ICommandList : ServiceStack.Commands.ICommand> + { + } + + } + namespace Configuration + { + // Generated from `ServiceStack.Configuration.IAppSettings` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IAppSettings + { + bool Exists(string key); + T Get(string name, T defaultValue); + T Get(string name); + System.Collections.Generic.Dictionary GetAll(); + System.Collections.Generic.List GetAllKeys(); + System.Collections.Generic.IDictionary GetDictionary(string key); + System.Collections.Generic.List> GetKeyValuePairs(string key); + System.Collections.Generic.IList GetList(string key); + string GetString(string name); + void Set(string key, T value); + } + + // Generated from `ServiceStack.Configuration.IContainerAdapter` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IContainerAdapter : ServiceStack.Configuration.IResolver + { + T Resolve(); + } + + // Generated from `ServiceStack.Configuration.IHasResolver` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IHasResolver + { + ServiceStack.Configuration.IResolver Resolver { get; } + } + + // Generated from `ServiceStack.Configuration.IRelease` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IRelease + { + void Release(object instance); + } + + // Generated from `ServiceStack.Configuration.IResolver` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IResolver + { + T TryResolve(); + } + + // Generated from `ServiceStack.Configuration.IRuntimeAppSettings` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IRuntimeAppSettings + { + T Get(ServiceStack.Web.IRequest request, string name, T defaultValue); + } + + // Generated from `ServiceStack.Configuration.ITypeFactory` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface ITypeFactory + { + object CreateInstance(ServiceStack.Configuration.IResolver resolver, System.Type type); + } + + } + namespace Data + { + // Generated from `ServiceStack.Data.DataException` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class DataException : System.Exception + { + public DataException(string message, System.Exception innerException) => throw null; + public DataException(string message) => throw null; + public DataException() => throw null; + } + + // Generated from `ServiceStack.Data.IEntityStore` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IEntityStore : System.IDisposable + { + void Delete(T entity); + void DeleteAll(); + void DeleteById(object id); + void DeleteByIds(System.Collections.ICollection ids); + T GetById(object id); + System.Collections.Generic.IList GetByIds(System.Collections.ICollection ids); + T Store(T entity); + void StoreAll(System.Collections.Generic.IEnumerable entities); + } + + // Generated from `ServiceStack.Data.IEntityStore<>` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IEntityStore + { + void Delete(T entity); + void DeleteAll(); + void DeleteById(object id); + void DeleteByIds(System.Collections.IEnumerable ids); + System.Collections.Generic.IList GetAll(); + T GetById(object id); + System.Collections.Generic.IList GetByIds(System.Collections.IEnumerable ids); + T Store(T entity); + void StoreAll(System.Collections.Generic.IEnumerable entities); + } + + // Generated from `ServiceStack.Data.IEntityStoreAsync` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IEntityStoreAsync + { + System.Threading.Tasks.Task DeleteAllAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task DeleteAsync(T entity, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task DeleteByIdAsync(object id, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task DeleteByIdsAsync(System.Collections.ICollection ids, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task GetByIdAsync(object id, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task> GetByIdsAsync(System.Collections.ICollection ids, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task StoreAllAsync(System.Collections.Generic.IEnumerable entities, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task StoreAsync(T entity, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + } + + // Generated from `ServiceStack.Data.IEntityStoreAsync<>` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IEntityStoreAsync + { + System.Threading.Tasks.Task DeleteAllAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task DeleteAsync(T entity, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task DeleteByIdAsync(object id, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task DeleteByIdsAsync(System.Collections.IEnumerable ids, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task> GetAllAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task GetByIdAsync(object id, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task> GetByIdsAsync(System.Collections.IEnumerable ids, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task StoreAllAsync(System.Collections.Generic.IEnumerable entities, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task StoreAsync(T entity, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + } + + // Generated from `ServiceStack.Data.OptimisticConcurrencyException` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class OptimisticConcurrencyException : ServiceStack.Data.DataException + { + public OptimisticConcurrencyException(string message, System.Exception innerException) => throw null; + public OptimisticConcurrencyException(string message) => throw null; + public OptimisticConcurrencyException() => throw null; + } + + } + namespace DataAnnotations + { + // Generated from `ServiceStack.DataAnnotations.AliasAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class AliasAttribute : ServiceStack.AttributeBase + { + public AliasAttribute(string name) => throw null; + public string Name { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.DataAnnotations.AutoIdAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class AutoIdAttribute : ServiceStack.AttributeBase + { + public AutoIdAttribute() => throw null; + } + + // Generated from `ServiceStack.DataAnnotations.AutoIncrementAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class AutoIncrementAttribute : ServiceStack.AttributeBase + { + public AutoIncrementAttribute() => throw null; + } + + // Generated from `ServiceStack.DataAnnotations.BelongToAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class BelongToAttribute : ServiceStack.AttributeBase + { + public BelongToAttribute(System.Type belongToTableType) => throw null; + public System.Type BelongToTableType { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.DataAnnotations.CheckConstraintAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class CheckConstraintAttribute : ServiceStack.AttributeBase + { + public CheckConstraintAttribute(string constraint) => throw null; + public string Constraint { get => throw null; } + } + + // Generated from `ServiceStack.DataAnnotations.CompositeIndexAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class CompositeIndexAttribute : ServiceStack.AttributeBase + { + public CompositeIndexAttribute(params string[] fieldNames) => throw null; + public CompositeIndexAttribute(bool unique, params string[] fieldNames) => throw null; + public CompositeIndexAttribute() => throw null; + public System.Collections.Generic.List FieldNames { get => throw null; set => throw null; } + public string Name { get => throw null; set => throw null; } + public bool Unique { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.DataAnnotations.CompositeKeyAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class CompositeKeyAttribute : ServiceStack.AttributeBase + { + public CompositeKeyAttribute(params string[] fieldNames) => throw null; + public CompositeKeyAttribute() => throw null; + public System.Collections.Generic.List FieldNames { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.DataAnnotations.ComputeAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ComputeAttribute : ServiceStack.AttributeBase + { + public ComputeAttribute(string expression) => throw null; + public ComputeAttribute() => throw null; + public string Expression { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.DataAnnotations.ComputedAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ComputedAttribute : ServiceStack.AttributeBase + { + public ComputedAttribute() => throw null; + } + + // Generated from `ServiceStack.DataAnnotations.CustomFieldAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class CustomFieldAttribute : ServiceStack.AttributeBase + { + public CustomFieldAttribute(string sql) => throw null; + public string Sql { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.DataAnnotations.CustomInsertAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class CustomInsertAttribute : ServiceStack.AttributeBase + { + public CustomInsertAttribute(string sql) => throw null; + public string Sql { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.DataAnnotations.CustomSelectAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class CustomSelectAttribute : ServiceStack.AttributeBase + { + public CustomSelectAttribute(string sql) => throw null; + public string Sql { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.DataAnnotations.CustomUpdateAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class CustomUpdateAttribute : ServiceStack.AttributeBase + { + public CustomUpdateAttribute(string sql) => throw null; + public string Sql { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.DataAnnotations.DecimalLengthAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class DecimalLengthAttribute : ServiceStack.AttributeBase + { + public DecimalLengthAttribute(int precision, int scale) => throw null; + public DecimalLengthAttribute(int precision) => throw null; + public DecimalLengthAttribute() => throw null; + public int Precision { get => throw null; set => throw null; } + public int Scale { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.DataAnnotations.DefaultAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class DefaultAttribute : ServiceStack.AttributeBase + { + public DefaultAttribute(string defaultValue) => throw null; + public DefaultAttribute(int intValue) => throw null; + public DefaultAttribute(double doubleValue) => throw null; + public DefaultAttribute(System.Type defaultType, string defaultValue) => throw null; + public System.Type DefaultType { get => throw null; set => throw null; } + public string DefaultValue { get => throw null; set => throw null; } + public double DoubleValue { get => throw null; set => throw null; } + public int IntValue { get => throw null; set => throw null; } + public bool OnUpdate { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.DataAnnotations.DescriptionAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class DescriptionAttribute : ServiceStack.AttributeBase + { + public string Description { get => throw null; set => throw null; } + public DescriptionAttribute(string description) => throw null; + } + + // Generated from `ServiceStack.DataAnnotations.EnumAsCharAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class EnumAsCharAttribute : ServiceStack.AttributeBase + { + public EnumAsCharAttribute() => throw null; + } + + // Generated from `ServiceStack.DataAnnotations.EnumAsIntAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class EnumAsIntAttribute : ServiceStack.AttributeBase + { + public EnumAsIntAttribute() => throw null; + } + + // Generated from `ServiceStack.DataAnnotations.ExcludeAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ExcludeAttribute : ServiceStack.AttributeBase + { + public ExcludeAttribute(ServiceStack.Feature feature) => throw null; + public ServiceStack.Feature Feature { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.DataAnnotations.ExcludeMetadataAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ExcludeMetadataAttribute : ServiceStack.DataAnnotations.ExcludeAttribute + { + public ExcludeMetadataAttribute() : base(default(ServiceStack.Feature)) => throw null; + } + + // Generated from `ServiceStack.DataAnnotations.ForeignKeyAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ForeignKeyAttribute : ServiceStack.DataAnnotations.ReferencesAttribute + { + public ForeignKeyAttribute(System.Type type) : base(default(System.Type)) => throw null; + public string ForeignKeyName { get => throw null; set => throw null; } + public string OnDelete { get => throw null; set => throw null; } + public string OnUpdate { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.DataAnnotations.HashKeyAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class HashKeyAttribute : ServiceStack.AttributeBase + { + public HashKeyAttribute() => throw null; + } + + // Generated from `ServiceStack.DataAnnotations.IdAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class IdAttribute : ServiceStack.AttributeBase + { + public int Id { get => throw null; } + public IdAttribute(int id) => throw null; + } + + // Generated from `ServiceStack.DataAnnotations.IgnoreAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class IgnoreAttribute : ServiceStack.AttributeBase + { + public IgnoreAttribute() => throw null; + } + + // Generated from `ServiceStack.DataAnnotations.IgnoreOnInsertAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class IgnoreOnInsertAttribute : ServiceStack.AttributeBase + { + public IgnoreOnInsertAttribute() => throw null; + } + + // Generated from `ServiceStack.DataAnnotations.IgnoreOnSelectAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class IgnoreOnSelectAttribute : ServiceStack.AttributeBase + { + public IgnoreOnSelectAttribute() => throw null; + } + + // Generated from `ServiceStack.DataAnnotations.IgnoreOnUpdateAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class IgnoreOnUpdateAttribute : ServiceStack.AttributeBase + { + public IgnoreOnUpdateAttribute() => throw null; + } + + // Generated from `ServiceStack.DataAnnotations.IndexAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class IndexAttribute : ServiceStack.AttributeBase + { + public bool Clustered { get => throw null; set => throw null; } + public IndexAttribute(bool unique) => throw null; + public IndexAttribute() => throw null; + public string Name { get => throw null; set => throw null; } + public bool NonClustered { get => throw null; set => throw null; } + public bool Unique { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.DataAnnotations.MetaAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class MetaAttribute : ServiceStack.AttributeBase + { + public MetaAttribute(string name, string value) => throw null; + public string Name { get => throw null; set => throw null; } + public string Value { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.DataAnnotations.PersistedAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class PersistedAttribute : ServiceStack.AttributeBase + { + public PersistedAttribute() => throw null; + } + + // Generated from `ServiceStack.DataAnnotations.PgSqlBigIntArrayAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class PgSqlBigIntArrayAttribute : ServiceStack.DataAnnotations.PgSqlLongArrayAttribute + { + public PgSqlBigIntArrayAttribute() => throw null; + } + + // Generated from `ServiceStack.DataAnnotations.PgSqlDecimalArrayAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class PgSqlDecimalArrayAttribute : ServiceStack.DataAnnotations.CustomFieldAttribute + { + public PgSqlDecimalArrayAttribute() : base(default(string)) => throw null; + } + + // Generated from `ServiceStack.DataAnnotations.PgSqlDoubleArrayAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class PgSqlDoubleArrayAttribute : ServiceStack.DataAnnotations.CustomFieldAttribute + { + public PgSqlDoubleArrayAttribute() : base(default(string)) => throw null; + } + + // Generated from `ServiceStack.DataAnnotations.PgSqlFloatArrayAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class PgSqlFloatArrayAttribute : ServiceStack.DataAnnotations.CustomFieldAttribute + { + public PgSqlFloatArrayAttribute() : base(default(string)) => throw null; + } + + // Generated from `ServiceStack.DataAnnotations.PgSqlHStoreAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class PgSqlHStoreAttribute : ServiceStack.DataAnnotations.CustomFieldAttribute + { + public PgSqlHStoreAttribute() : base(default(string)) => throw null; + } + + // Generated from `ServiceStack.DataAnnotations.PgSqlIntArrayAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class PgSqlIntArrayAttribute : ServiceStack.DataAnnotations.CustomFieldAttribute + { + public PgSqlIntArrayAttribute() : base(default(string)) => throw null; + } + + // Generated from `ServiceStack.DataAnnotations.PgSqlJsonAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class PgSqlJsonAttribute : ServiceStack.DataAnnotations.CustomFieldAttribute + { + public PgSqlJsonAttribute() : base(default(string)) => throw null; + } + + // Generated from `ServiceStack.DataAnnotations.PgSqlJsonBAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class PgSqlJsonBAttribute : ServiceStack.DataAnnotations.CustomFieldAttribute + { + public PgSqlJsonBAttribute() : base(default(string)) => throw null; + } + + // Generated from `ServiceStack.DataAnnotations.PgSqlLongArrayAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class PgSqlLongArrayAttribute : ServiceStack.DataAnnotations.CustomFieldAttribute + { + public PgSqlLongArrayAttribute() : base(default(string)) => throw null; + } + + // Generated from `ServiceStack.DataAnnotations.PgSqlShortArrayAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class PgSqlShortArrayAttribute : ServiceStack.DataAnnotations.CustomFieldAttribute + { + public PgSqlShortArrayAttribute() : base(default(string)) => throw null; + } + + // Generated from `ServiceStack.DataAnnotations.PgSqlTextArrayAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class PgSqlTextArrayAttribute : ServiceStack.DataAnnotations.CustomFieldAttribute + { + public PgSqlTextArrayAttribute() : base(default(string)) => throw null; + } + + // Generated from `ServiceStack.DataAnnotations.PgSqlTimestampArrayAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class PgSqlTimestampArrayAttribute : ServiceStack.DataAnnotations.CustomFieldAttribute + { + public PgSqlTimestampArrayAttribute() : base(default(string)) => throw null; + } + + // Generated from `ServiceStack.DataAnnotations.PgSqlTimestampAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class PgSqlTimestampAttribute : ServiceStack.DataAnnotations.CustomFieldAttribute + { + public PgSqlTimestampAttribute() : base(default(string)) => throw null; + } + + // Generated from `ServiceStack.DataAnnotations.PgSqlTimestampTzArrayAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class PgSqlTimestampTzArrayAttribute : ServiceStack.DataAnnotations.CustomFieldAttribute + { + public PgSqlTimestampTzArrayAttribute() : base(default(string)) => throw null; + } + + // Generated from `ServiceStack.DataAnnotations.PgSqlTimestampTzAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class PgSqlTimestampTzAttribute : ServiceStack.DataAnnotations.CustomFieldAttribute + { + public PgSqlTimestampTzAttribute() : base(default(string)) => throw null; + } + + // Generated from `ServiceStack.DataAnnotations.PostCreateTableAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class PostCreateTableAttribute : ServiceStack.AttributeBase + { + public PostCreateTableAttribute(string sql) => throw null; + public string Sql { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.DataAnnotations.PostDropTableAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class PostDropTableAttribute : ServiceStack.AttributeBase + { + public PostDropTableAttribute(string sql) => throw null; + public string Sql { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.DataAnnotations.PreCreateTableAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class PreCreateTableAttribute : ServiceStack.AttributeBase + { + public PreCreateTableAttribute(string sql) => throw null; + public string Sql { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.DataAnnotations.PreDropTableAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class PreDropTableAttribute : ServiceStack.AttributeBase + { + public PreDropTableAttribute(string sql) => throw null; + public string Sql { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.DataAnnotations.PrimaryKeyAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class PrimaryKeyAttribute : ServiceStack.AttributeBase + { + public PrimaryKeyAttribute() => throw null; + } + + // Generated from `ServiceStack.DataAnnotations.RangeAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class RangeAttribute : ServiceStack.AttributeBase + { + public object Maximum { get => throw null; set => throw null; } + public object Minimum { get => throw null; set => throw null; } + public System.Type OperandType { get => throw null; set => throw null; } + public RangeAttribute(int minimum, int maximum) => throw null; + public RangeAttribute(double minimum, double maximum) => throw null; + public RangeAttribute(System.Type type, string minimum, string maximum) => throw null; + } + + // Generated from `ServiceStack.DataAnnotations.RangeKeyAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class RangeKeyAttribute : ServiceStack.AttributeBase + { + public RangeKeyAttribute() => throw null; + } + + // Generated from `ServiceStack.DataAnnotations.ReferenceAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ReferenceAttribute : ServiceStack.AttributeBase + { + public ReferenceAttribute() => throw null; + } + + // Generated from `ServiceStack.DataAnnotations.ReferencesAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ReferencesAttribute : ServiceStack.AttributeBase + { + public ReferencesAttribute(System.Type type) => throw null; + public System.Type Type { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.DataAnnotations.RequiredAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class RequiredAttribute : ServiceStack.AttributeBase + { + public RequiredAttribute() => throw null; + } + + // Generated from `ServiceStack.DataAnnotations.ReturnOnInsertAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ReturnOnInsertAttribute : ServiceStack.AttributeBase + { + public ReturnOnInsertAttribute() => throw null; + } + + // Generated from `ServiceStack.DataAnnotations.RowVersionAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class RowVersionAttribute : ServiceStack.AttributeBase + { + public RowVersionAttribute() => throw null; + } + + // Generated from `ServiceStack.DataAnnotations.SchemaAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class SchemaAttribute : ServiceStack.AttributeBase + { + public string Name { get => throw null; set => throw null; } + public SchemaAttribute(string name) => throw null; + } + + // Generated from `ServiceStack.DataAnnotations.SequenceAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class SequenceAttribute : ServiceStack.AttributeBase + { + public string Name { get => throw null; set => throw null; } + public SequenceAttribute(string name) => throw null; + } + + // Generated from `ServiceStack.DataAnnotations.SqlServerBucketCountAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class SqlServerBucketCountAttribute : ServiceStack.AttributeBase + { + public int Count { get => throw null; set => throw null; } + public SqlServerBucketCountAttribute(int count) => throw null; + } + + // Generated from `ServiceStack.DataAnnotations.SqlServerCollateAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class SqlServerCollateAttribute : ServiceStack.AttributeBase + { + public string Collation { get => throw null; set => throw null; } + public SqlServerCollateAttribute(string collation) => throw null; + } + + // Generated from `ServiceStack.DataAnnotations.SqlServerDurability` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public enum SqlServerDurability + { + SchemaAndData, + SchemaOnly, + } + + // Generated from `ServiceStack.DataAnnotations.SqlServerFileTableAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class SqlServerFileTableAttribute : ServiceStack.AttributeBase + { + public string FileTableCollateFileName { get => throw null; set => throw null; } + public string FileTableDirectory { get => throw null; set => throw null; } + public SqlServerFileTableAttribute(string directory, string collateFileName = default(string)) => throw null; + public SqlServerFileTableAttribute() => throw null; + } + + // Generated from `ServiceStack.DataAnnotations.SqlServerMemoryOptimizedAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class SqlServerMemoryOptimizedAttribute : ServiceStack.AttributeBase + { + public ServiceStack.DataAnnotations.SqlServerDurability? Durability { get => throw null; set => throw null; } + public SqlServerMemoryOptimizedAttribute(ServiceStack.DataAnnotations.SqlServerDurability durability) => throw null; + public SqlServerMemoryOptimizedAttribute() => throw null; + } + + // Generated from `ServiceStack.DataAnnotations.StringLengthAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class StringLengthAttribute : ServiceStack.AttributeBase + { + public const int MaxText = default; + public int MaximumLength { get => throw null; set => throw null; } + public int MinimumLength { get => throw null; set => throw null; } + public StringLengthAttribute(int minimumLength, int maximumLength) => throw null; + public StringLengthAttribute(int maximumLength) => throw null; + } + + // Generated from `ServiceStack.DataAnnotations.UniqueAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class UniqueAttribute : ServiceStack.AttributeBase + { + public UniqueAttribute() => throw null; + } + + // Generated from `ServiceStack.DataAnnotations.UniqueConstraintAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class UniqueConstraintAttribute : ServiceStack.AttributeBase + { + public System.Collections.Generic.List FieldNames { get => throw null; set => throw null; } + public string Name { get => throw null; set => throw null; } + public UniqueConstraintAttribute(params string[] fieldNames) => throw null; + public UniqueConstraintAttribute() => throw null; + } + + // Generated from `ServiceStack.DataAnnotations.UniqueIdAttribute` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class UniqueIdAttribute : ServiceStack.AttributeBase + { + public int Id { get => throw null; } + public UniqueIdAttribute(int id) => throw null; + } + + } + namespace IO + { + // Generated from `ServiceStack.IO.IEndpoint` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IEndpoint + { + string Host { get; } + int Port { get; } + } + + // Generated from `ServiceStack.IO.IHasVirtualFiles` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IHasVirtualFiles + { + ServiceStack.IO.IVirtualDirectory GetDirectory(); + ServiceStack.IO.IVirtualFile GetFile(); + bool IsDirectory { get; } + bool IsFile { get; } + } + + // Generated from `ServiceStack.IO.IVirtualDirectory` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IVirtualDirectory : System.Collections.IEnumerable, System.Collections.Generic.IEnumerable, ServiceStack.IO.IVirtualNode + { + System.Collections.Generic.IEnumerable Directories { get; } + System.Collections.Generic.IEnumerable Files { get; } + System.Collections.Generic.IEnumerable GetAllMatchingFiles(string globPattern, int maxDepth = default(int)); + ServiceStack.IO.IVirtualDirectory GetDirectory(string virtualPath); + ServiceStack.IO.IVirtualDirectory GetDirectory(System.Collections.Generic.Stack virtualPath); + ServiceStack.IO.IVirtualFile GetFile(string virtualPath); + ServiceStack.IO.IVirtualFile GetFile(System.Collections.Generic.Stack virtualPath); + bool IsRoot { get; } + ServiceStack.IO.IVirtualDirectory ParentDirectory { get; } + } + + // Generated from `ServiceStack.IO.IVirtualFile` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IVirtualFile : ServiceStack.IO.IVirtualNode + { + string Extension { get; } + object GetContents(); + string GetFileHash(); + System.Int64 Length { get; } + System.IO.Stream OpenRead(); + System.IO.StreamReader OpenText(); + string ReadAllText(); + void Refresh(); + ServiceStack.IO.IVirtualPathProvider VirtualPathProvider { get; } + } + + // Generated from `ServiceStack.IO.IVirtualFiles` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IVirtualFiles : ServiceStack.IO.IVirtualPathProvider + { + void AppendFile(string filePath, string textContents); + void AppendFile(string filePath, object contents); + void AppendFile(string filePath, System.IO.Stream stream); + void DeleteFile(string filePath); + void DeleteFiles(System.Collections.Generic.IEnumerable filePaths); + void DeleteFolder(string dirPath); + void WriteFile(string filePath, string textContents); + void WriteFile(string filePath, object contents); + void WriteFile(string filePath, System.IO.Stream stream); + void WriteFiles(System.Collections.Generic.IEnumerable files, System.Func toPath = default(System.Func)); + void WriteFiles(System.Collections.Generic.Dictionary textFiles); + void WriteFiles(System.Collections.Generic.Dictionary files); + } + + // Generated from `ServiceStack.IO.IVirtualFilesAsync` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IVirtualFilesAsync : ServiceStack.IO.IVirtualPathProvider, ServiceStack.IO.IVirtualFiles + { + System.Threading.Tasks.Task AppendFileAsync(string filePath, string textContents); + System.Threading.Tasks.Task AppendFileAsync(string filePath, System.IO.Stream stream); + System.Threading.Tasks.Task DeleteFileAsync(string filePath); + System.Threading.Tasks.Task DeleteFilesAsync(System.Collections.Generic.IEnumerable filePaths); + System.Threading.Tasks.Task DeleteFolderAsync(string dirPath); + System.Threading.Tasks.Task WriteFileAsync(string filePath, string textContents); + System.Threading.Tasks.Task WriteFileAsync(string filePath, System.IO.Stream stream); + System.Threading.Tasks.Task WriteFilesAsync(System.Collections.Generic.IEnumerable files, System.Func toPath = default(System.Func)); + } + + // Generated from `ServiceStack.IO.IVirtualNode` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IVirtualNode + { + ServiceStack.IO.IVirtualDirectory Directory { get; } + bool IsDirectory { get; } + System.DateTime LastModified { get; } + string Name { get; } + string RealPath { get; } + string VirtualPath { get; } + } + + // Generated from `ServiceStack.IO.IVirtualPathProvider` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IVirtualPathProvider + { + string CombineVirtualPath(string basePath, string relativePath); + bool DirectoryExists(string virtualPath); + bool FileExists(string virtualPath); + System.Collections.Generic.IEnumerable GetAllFiles(); + System.Collections.Generic.IEnumerable GetAllMatchingFiles(string globPattern, int maxDepth = default(int)); + ServiceStack.IO.IVirtualDirectory GetDirectory(string virtualPath); + ServiceStack.IO.IVirtualFile GetFile(string virtualPath); + string GetFileHash(string virtualPath); + string GetFileHash(ServiceStack.IO.IVirtualFile virtualFile); + System.Collections.Generic.IEnumerable GetRootDirectories(); + System.Collections.Generic.IEnumerable GetRootFiles(); + bool IsSharedFile(ServiceStack.IO.IVirtualFile virtualFile); + bool IsViewFile(ServiceStack.IO.IVirtualFile virtualFile); + string RealPathSeparator { get; } + ServiceStack.IO.IVirtualDirectory RootDirectory { get; } + string VirtualPathSeparator { get; } + } + + } + namespace Logging + { + // Generated from `ServiceStack.Logging.GenericLogFactory` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class GenericLogFactory : ServiceStack.Logging.ILogFactory + { + public GenericLogFactory(System.Action onMessage) => throw null; + public ServiceStack.Logging.ILog GetLogger(string typeName) => throw null; + public ServiceStack.Logging.ILog GetLogger(System.Type type) => throw null; + public System.Action OnMessage; + } + + // Generated from `ServiceStack.Logging.GenericLogger` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class GenericLogger : ServiceStack.Logging.ILog + { + public bool CaptureLogs { get => throw null; set => throw null; } + public void Debug(object message, System.Exception exception) => throw null; + public void Debug(object message) => throw null; + public void DebugFormat(string format, params object[] args) => throw null; + public void Error(object message, System.Exception exception) => throw null; + public void Error(object message) => throw null; + public void ErrorFormat(string format, params object[] args) => throw null; + public void Fatal(object message, System.Exception exception) => throw null; + public void Fatal(object message) => throw null; + public void FatalFormat(string format, params object[] args) => throw null; + public GenericLogger(string type) => throw null; + public GenericLogger(System.Type type) => throw null; + public void Info(object message, System.Exception exception) => throw null; + public void Info(object message) => throw null; + public void InfoFormat(string format, params object[] args) => throw null; + public bool IsDebugEnabled { get => throw null; set => throw null; } + public virtual void Log(object message, System.Exception exception) => throw null; + public virtual void Log(object message) => throw null; + public virtual void LogFormat(object message, params object[] args) => throw null; + public System.Text.StringBuilder Logs; + public virtual void OnLog(string message) => throw null; + public System.Action OnMessage; + public void Warn(object message, System.Exception exception) => throw null; + public void Warn(object message) => throw null; + public void WarnFormat(string format, params object[] args) => throw null; + } + + // Generated from `ServiceStack.Logging.ILog` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface ILog + { + void Debug(object message, System.Exception exception); + void Debug(object message); + void DebugFormat(string format, params object[] args); + void Error(object message, System.Exception exception); + void Error(object message); + void ErrorFormat(string format, params object[] args); + void Fatal(object message, System.Exception exception); + void Fatal(object message); + void FatalFormat(string format, params object[] args); + void Info(object message, System.Exception exception); + void Info(object message); + void InfoFormat(string format, params object[] args); + bool IsDebugEnabled { get; } + void Warn(object message, System.Exception exception); + void Warn(object message); + void WarnFormat(string format, params object[] args); + } + + // Generated from `ServiceStack.Logging.ILogFactory` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface ILogFactory + { + ServiceStack.Logging.ILog GetLogger(string typeName); + ServiceStack.Logging.ILog GetLogger(System.Type type); + } + + // Generated from `ServiceStack.Logging.ILogWithContext` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface ILogWithContext : ServiceStack.Logging.ILogWithException, ServiceStack.Logging.ILog + { + System.IDisposable PushProperty(string key, object value); + } + + // Generated from `ServiceStack.Logging.ILogWithContextExtensions` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class ILogWithContextExtensions + { + public static System.IDisposable PushProperty(this ServiceStack.Logging.ILog logger, string key, object value) => throw null; + } + + // Generated from `ServiceStack.Logging.ILogWithException` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface ILogWithException : ServiceStack.Logging.ILog + { + void Debug(System.Exception exception, string format, params object[] args); + void Error(System.Exception exception, string format, params object[] args); + void Fatal(System.Exception exception, string format, params object[] args); + void Info(System.Exception exception, string format, params object[] args); + void Warn(System.Exception exception, string format, params object[] args); + } + + // Generated from `ServiceStack.Logging.ILogWithExceptionExtensions` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class ILogWithExceptionExtensions + { + public static void Debug(this ServiceStack.Logging.ILog logger, System.Exception exception, string format, params object[] args) => throw null; + public static void Error(this ServiceStack.Logging.ILog logger, System.Exception exception, string format, params object[] args) => throw null; + public static void Fatal(this ServiceStack.Logging.ILog logger, System.Exception exception, string format, params object[] args) => throw null; + public static void Info(this ServiceStack.Logging.ILog logger, System.Exception exception, string format, params object[] args) => throw null; + public static void Warn(this ServiceStack.Logging.ILog logger, System.Exception exception, string format, params object[] args) => throw null; + } + + // Generated from `ServiceStack.Logging.LogManager` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class LogManager + { + public static ServiceStack.Logging.ILog GetLogger(string typeName) => throw null; + public static ServiceStack.Logging.ILog GetLogger(System.Type type) => throw null; + public static ServiceStack.Logging.ILogFactory LogFactory { get => throw null; set => throw null; } + public LogManager() => throw null; + } + + // Generated from `ServiceStack.Logging.NullDebugLogger` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class NullDebugLogger : ServiceStack.Logging.ILog + { + public void Debug(object message, System.Exception exception) => throw null; + public void Debug(object message) => throw null; + public void DebugFormat(string format, params object[] args) => throw null; + public void Error(object message, System.Exception exception) => throw null; + public void Error(object message) => throw null; + public void ErrorFormat(string format, params object[] args) => throw null; + public void Fatal(object message, System.Exception exception) => throw null; + public void Fatal(object message) => throw null; + public void FatalFormat(string format, params object[] args) => throw null; + public void Info(object message, System.Exception exception) => throw null; + public void Info(object message) => throw null; + public void InfoFormat(string format, params object[] args) => throw null; + public bool IsDebugEnabled { get => throw null; set => throw null; } + public NullDebugLogger(string type) => throw null; + public NullDebugLogger(System.Type type) => throw null; + public void Warn(object message, System.Exception exception) => throw null; + public void Warn(object message) => throw null; + public void WarnFormat(string format, params object[] args) => throw null; + } + + // Generated from `ServiceStack.Logging.NullLogFactory` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class NullLogFactory : ServiceStack.Logging.ILogFactory + { + public ServiceStack.Logging.ILog GetLogger(string typeName) => throw null; + public ServiceStack.Logging.ILog GetLogger(System.Type type) => throw null; + public NullLogFactory(bool debugEnabled = default(bool)) => throw null; + } + + // Generated from `ServiceStack.Logging.StringBuilderLog` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class StringBuilderLog : ServiceStack.Logging.ILog + { + public void Debug(object message, System.Exception exception) => throw null; + public void Debug(object message) => throw null; + public void DebugFormat(string format, params object[] args) => throw null; + public void Error(object message, System.Exception exception) => throw null; + public void Error(object message) => throw null; + public void ErrorFormat(string format, params object[] args) => throw null; + public void Fatal(object message, System.Exception exception) => throw null; + public void Fatal(object message) => throw null; + public void FatalFormat(string format, params object[] args) => throw null; + public void Info(object message, System.Exception exception) => throw null; + public void Info(object message) => throw null; + public void InfoFormat(string format, params object[] args) => throw null; + public bool IsDebugEnabled { get => throw null; set => throw null; } + public StringBuilderLog(string type, System.Text.StringBuilder logs) => throw null; + public StringBuilderLog(System.Type type, System.Text.StringBuilder logs) => throw null; + public void Warn(object message, System.Exception exception) => throw null; + public void Warn(object message) => throw null; + public void WarnFormat(string format, params object[] args) => throw null; + } + + // Generated from `ServiceStack.Logging.StringBuilderLogFactory` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class StringBuilderLogFactory : ServiceStack.Logging.ILogFactory + { + public void ClearLogs() => throw null; + public ServiceStack.Logging.ILog GetLogger(string typeName) => throw null; + public ServiceStack.Logging.ILog GetLogger(System.Type type) => throw null; + public string GetLogs() => throw null; + public StringBuilderLogFactory(bool debugEnabled = default(bool)) => throw null; + } + + // Generated from `ServiceStack.Logging.TestLogFactory` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class TestLogFactory : ServiceStack.Logging.ILogFactory + { + public ServiceStack.Logging.ILog GetLogger(string typeName) => throw null; + public ServiceStack.Logging.ILog GetLogger(System.Type type) => throw null; + public TestLogFactory(bool debugEnabled = default(bool)) => throw null; + } + + // Generated from `ServiceStack.Logging.TestLogger` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class TestLogger : ServiceStack.Logging.ILog + { + public void Debug(object message, System.Exception exception) => throw null; + public void Debug(object message) => throw null; + public void DebugFormat(string format, params object[] args) => throw null; + public void Error(object message, System.Exception exception) => throw null; + public void Error(object message) => throw null; + public void ErrorFormat(string format, params object[] args) => throw null; + public void Fatal(object message, System.Exception exception) => throw null; + public void Fatal(object message) => throw null; + public void FatalFormat(string format, params object[] args) => throw null; + public static System.Collections.Generic.IList> GetLogs() => throw null; + public void Info(object message, System.Exception exception) => throw null; + public void Info(object message) => throw null; + public void InfoFormat(string format, params object[] args) => throw null; + public bool IsDebugEnabled { get => throw null; set => throw null; } + // Generated from `ServiceStack.Logging.TestLogger+Levels` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public enum Levels + { + DEBUG, + ERROR, + FATAL, + INFO, + WARN, + } + + + public TestLogger(string type) => throw null; + public TestLogger(System.Type type) => throw null; + public void Warn(object message, System.Exception exception) => throw null; + public void Warn(object message) => throw null; + public void WarnFormat(string format, params object[] args) => throw null; + } + + } + namespace Messaging + { + // Generated from `ServiceStack.Messaging.IMessage` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IMessage : ServiceStack.Model.IHasId, ServiceStack.IMeta + { + object Body { get; set; } + System.DateTime CreatedDate { get; } + ServiceStack.ResponseStatus Error { get; set; } + int Options { get; set; } + System.Int64 Priority { get; set; } + System.Guid? ReplyId { get; set; } + string ReplyTo { get; set; } + int RetryAttempts { get; set; } + string Tag { get; set; } + } + + // Generated from `ServiceStack.Messaging.IMessage<>` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IMessage : ServiceStack.Model.IHasId, ServiceStack.Messaging.IMessage, ServiceStack.IMeta + { + T GetBody(); + } + + // Generated from `ServiceStack.Messaging.IMessageFactory` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IMessageFactory : System.IDisposable, ServiceStack.Messaging.IMessageQueueClientFactory + { + ServiceStack.Messaging.IMessageProducer CreateMessageProducer(); + } + + // Generated from `ServiceStack.Messaging.IMessageHandler` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IMessageHandler + { + ServiceStack.Messaging.IMessageHandlerStats GetStats(); + System.Type MessageType { get; } + ServiceStack.Messaging.IMessageQueueClient MqClient { get; } + void Process(ServiceStack.Messaging.IMessageQueueClient mqClient); + void ProcessMessage(ServiceStack.Messaging.IMessageQueueClient mqClient, object mqResponse); + int ProcessQueue(ServiceStack.Messaging.IMessageQueueClient mqClient, string queueName, System.Func doNext = default(System.Func)); + } + + // Generated from `ServiceStack.Messaging.IMessageHandlerStats` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IMessageHandlerStats + { + void Add(ServiceStack.Messaging.IMessageHandlerStats stats); + System.DateTime? LastMessageProcessed { get; } + string Name { get; } + int TotalMessagesFailed { get; } + int TotalMessagesProcessed { get; } + int TotalNormalMessagesReceived { get; } + int TotalPriorityMessagesReceived { get; } + int TotalRetries { get; } + } + + // Generated from `ServiceStack.Messaging.IMessageProducer` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IMessageProducer : System.IDisposable + { + void Publish(T messageBody); + void Publish(ServiceStack.Messaging.IMessage message); + } + + // Generated from `ServiceStack.Messaging.IMessageQueueClient` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IMessageQueueClient : System.IDisposable, ServiceStack.Messaging.IMessageProducer + { + void Ack(ServiceStack.Messaging.IMessage message); + ServiceStack.Messaging.IMessage CreateMessage(object mqResponse); + ServiceStack.Messaging.IMessage Get(string queueName, System.TimeSpan? timeOut = default(System.TimeSpan?)); + ServiceStack.Messaging.IMessage GetAsync(string queueName); + string GetTempQueueName(); + void Nak(ServiceStack.Messaging.IMessage message, bool requeue, System.Exception exception = default(System.Exception)); + void Notify(string queueName, ServiceStack.Messaging.IMessage message); + void Publish(string queueName, ServiceStack.Messaging.IMessage message); + } + + // Generated from `ServiceStack.Messaging.IMessageQueueClientFactory` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IMessageQueueClientFactory : System.IDisposable + { + ServiceStack.Messaging.IMessageQueueClient CreateMessageQueueClient(); + } + + // Generated from `ServiceStack.Messaging.IMessageService` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IMessageService : System.IDisposable + { + ServiceStack.Messaging.IMessageHandlerStats GetStats(); + string GetStatsDescription(); + string GetStatus(); + ServiceStack.Messaging.IMessageFactory MessageFactory { get; } + void RegisterHandler(System.Func, object> processMessageFn, int noOfThreads); + void RegisterHandler(System.Func, object> processMessageFn, System.Action, System.Exception> processExceptionEx, int noOfThreads); + void RegisterHandler(System.Func, object> processMessageFn, System.Action, System.Exception> processExceptionEx); + void RegisterHandler(System.Func, object> processMessageFn); + System.Collections.Generic.List RegisteredTypes { get; } + void Start(); + void Stop(); + } + + // Generated from `ServiceStack.Messaging.Message` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class Message : ServiceStack.Model.IHasId, ServiceStack.Messaging.IMessage, ServiceStack.IMeta + { + public object Body { get => throw null; set => throw null; } + public System.DateTime CreatedDate { get => throw null; set => throw null; } + public ServiceStack.ResponseStatus Error { get => throw null; set => throw null; } + public System.Guid Id { get => throw null; set => throw null; } + public Message() => throw null; + public System.Collections.Generic.Dictionary Meta { get => throw null; set => throw null; } + public int Options { get => throw null; set => throw null; } + public System.Int64 Priority { get => throw null; set => throw null; } + public System.Guid? ReplyId { get => throw null; set => throw null; } + public string ReplyTo { get => throw null; set => throw null; } + public int RetryAttempts { get => throw null; set => throw null; } + public string Tag { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.Messaging.Message<>` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class Message : ServiceStack.Messaging.Message, ServiceStack.Model.IHasId, ServiceStack.Messaging.IMessage, ServiceStack.Messaging.IMessage, ServiceStack.IMeta + { + public static ServiceStack.Messaging.IMessage Create(object oBody) => throw null; + public T GetBody() => throw null; + public Message(T body) => throw null; + public Message() => throw null; + public override string ToString() => throw null; + } + + // Generated from `ServiceStack.Messaging.MessageFactory` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class MessageFactory + { + public static ServiceStack.Messaging.IMessage Create(object response) => throw null; + } + + // Generated from `ServiceStack.Messaging.MessageHandlerStats` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class MessageHandlerStats : ServiceStack.Messaging.IMessageHandlerStats + { + public virtual void Add(ServiceStack.Messaging.IMessageHandlerStats stats) => throw null; + public System.DateTime? LastMessageProcessed { get => throw null; set => throw null; } + public MessageHandlerStats(string name, int totalMessagesProcessed, int totalMessagesFailed, int totalRetries, int totalNormalMessagesReceived, int totalPriorityMessagesReceived, System.DateTime? lastMessageProcessed) => throw null; + public MessageHandlerStats(string name) => throw null; + public string Name { get => throw null; set => throw null; } + public override string ToString() => throw null; + public int TotalMessagesFailed { get => throw null; set => throw null; } + public int TotalMessagesProcessed { get => throw null; set => throw null; } + public int TotalNormalMessagesReceived { get => throw null; set => throw null; } + public int TotalPriorityMessagesReceived { get => throw null; set => throw null; } + public int TotalRetries { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.Messaging.MessageHandlerStatsExtensions` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class MessageHandlerStatsExtensions + { + public static ServiceStack.Messaging.IMessageHandlerStats CombineStats(this System.Collections.Generic.IEnumerable stats) => throw null; + } + + // Generated from `ServiceStack.Messaging.MessageOption` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + [System.Flags] + public enum MessageOption + { + All, + None, + NotifyOneWay, + } + + // Generated from `ServiceStack.Messaging.MessagingException` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class MessagingException : System.Exception, ServiceStack.Model.IResponseStatusConvertible, ServiceStack.IHasResponseStatus + { + public MessagingException(string message, System.Exception innerException) => throw null; + public MessagingException(string message) => throw null; + public MessagingException(ServiceStack.ResponseStatus responseStatus, object responseDto, System.Exception innerException = default(System.Exception)) => throw null; + public MessagingException(ServiceStack.ResponseStatus responseStatus, System.Exception innerException = default(System.Exception)) => throw null; + public MessagingException() => throw null; + public object ResponseDto { get => throw null; set => throw null; } + public ServiceStack.ResponseStatus ResponseStatus { get => throw null; set => throw null; } + public ServiceStack.ResponseStatus ToResponseStatus() => throw null; + } + + // Generated from `ServiceStack.Messaging.QueueNames` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class QueueNames + { + public string Dlq { get => throw null; } + public static string Exchange; + public static string ExchangeDlq; + public static string ExchangeTopic; + public static string GetTempQueueName() => throw null; + public string In { get => throw null; } + public static bool IsTempQueue(string queueName) => throw null; + public static string MqPrefix; + public string Out { get => throw null; } + public string Priority { get => throw null; } + public QueueNames(System.Type messageType) => throw null; + public static string QueuePrefix; + public static string ResolveQueueName(string typeName, string queueSuffix) => throw null; + public static System.Func ResolveQueueNameFn; + public static void SetQueuePrefix(string prefix) => throw null; + public static string TempMqPrefix; + public static string TopicIn; + public static string TopicOut; + } + + // Generated from `ServiceStack.Messaging.QueueNames<>` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class QueueNames + { + public static string[] AllQueueNames { get => throw null; } + public static string Dlq { get => throw null; set => throw null; } + public static string In { get => throw null; set => throw null; } + public static string Out { get => throw null; set => throw null; } + public static string Priority { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.Messaging.UnRetryableMessagingException` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class UnRetryableMessagingException : ServiceStack.Messaging.MessagingException + { + public UnRetryableMessagingException(string message, System.Exception innerException) => throw null; + public UnRetryableMessagingException(string message) => throw null; + public UnRetryableMessagingException() => throw null; + } + + // Generated from `ServiceStack.Messaging.WorkerStatus` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class WorkerStatus + { + public const int Disposed = default; + public const int Started = default; + public const int Starting = default; + public const int Stopped = default; + public const int Stopping = default; + public static string ToString(int workerStatus) => throw null; + } + + } + namespace Model + { + // Generated from `ServiceStack.Model.ICacheByDateModified` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface ICacheByDateModified + { + System.DateTime? LastModified { get; } + } + + // Generated from `ServiceStack.Model.ICacheByEtag` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface ICacheByEtag + { + string Etag { get; } + } + + // Generated from `ServiceStack.Model.IHasAction` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IHasAction + { + string Action { get; } + } + + // Generated from `ServiceStack.Model.IHasGuidId` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IHasGuidId : ServiceStack.Model.IHasId + { + } + + // Generated from `ServiceStack.Model.IHasId<>` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IHasId + { + T Id { get; } + } + + // Generated from `ServiceStack.Model.IHasIntId` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IHasIntId : ServiceStack.Model.IHasId + { + } + + // Generated from `ServiceStack.Model.IHasLongId` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IHasLongId : ServiceStack.Model.IHasId + { + } + + // Generated from `ServiceStack.Model.IHasNamed<>` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IHasNamed + { + T this[string listId] { get; set; } + } + + // Generated from `ServiceStack.Model.IHasNamedCollection<>` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IHasNamedCollection : ServiceStack.Model.IHasNamed> + { + } + + // Generated from `ServiceStack.Model.IHasNamedList<>` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IHasNamedList : ServiceStack.Model.IHasNamed> + { + } + + // Generated from `ServiceStack.Model.IHasStringId` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IHasStringId : ServiceStack.Model.IHasId + { + } + + // Generated from `ServiceStack.Model.IResponseStatusConvertible` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IResponseStatusConvertible + { + ServiceStack.ResponseStatus ToResponseStatus(); + } + + } + namespace Redis + { + // Generated from `ServiceStack.Redis.IRedisClient` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IRedisClient : System.IDisposable, ServiceStack.Data.IEntityStore, ServiceStack.Caching.IRemoveByPattern, ServiceStack.Caching.ICacheClientExtended, ServiceStack.Caching.ICacheClient + { + System.IDisposable AcquireLock(string key, System.TimeSpan timeOut); + System.IDisposable AcquireLock(string key); + System.Int64 AddGeoMember(string key, double longitude, double latitude, string member); + System.Int64 AddGeoMembers(string key, params ServiceStack.Redis.RedisGeo[] geoPoints); + void AddItemToList(string listId, string value); + void AddItemToSet(string setId, string item); + bool AddItemToSortedSet(string setId, string value, double score); + bool AddItemToSortedSet(string setId, string value); + void AddRangeToList(string listId, System.Collections.Generic.List values); + void AddRangeToSet(string setId, System.Collections.Generic.List items); + bool AddRangeToSortedSet(string setId, System.Collections.Generic.List values, double score); + bool AddRangeToSortedSet(string setId, System.Collections.Generic.List values, System.Int64 score); + bool AddToHyperLog(string key, params string[] elements); + System.Int64 AppendToValue(string key, string value); + ServiceStack.Redis.Generic.IRedisTypedClient As(); + string BlockingDequeueItemFromList(string listId, System.TimeSpan? timeOut); + ServiceStack.Redis.ItemRef BlockingDequeueItemFromLists(string[] listIds, System.TimeSpan? timeOut); + string BlockingPopAndPushItemBetweenLists(string fromListId, string toListId, System.TimeSpan? timeOut); + string BlockingPopItemFromList(string listId, System.TimeSpan? timeOut); + ServiceStack.Redis.ItemRef BlockingPopItemFromLists(string[] listIds, System.TimeSpan? timeOut); + string BlockingRemoveStartFromList(string listId, System.TimeSpan? timeOut); + ServiceStack.Redis.ItemRef BlockingRemoveStartFromLists(string[] listIds, System.TimeSpan? timeOut); + double CalculateDistanceBetweenGeoMembers(string key, string fromMember, string toMember, string unit = default(string)); + string CalculateSha1(string luaBody); + int ConnectTimeout { get; set; } + bool ContainsKey(string key); + System.Int64 CountHyperLog(string key); + ServiceStack.Redis.Pipeline.IRedisPipeline CreatePipeline(); + ServiceStack.Redis.IRedisSubscription CreateSubscription(); + ServiceStack.Redis.IRedisTransaction CreateTransaction(); + ServiceStack.Redis.RedisText Custom(params object[] cmdWithArgs); + System.Int64 Db { get; set; } + System.Int64 DbSize { get; } + System.Int64 DecrementValue(string key); + System.Int64 DecrementValueBy(string key, int count); + string DequeueItemFromList(string listId); + string Echo(string text); + void EnqueueItemOnList(string listId, string value); + T ExecCachedLua(string scriptBody, System.Func scriptSha1); + ServiceStack.Redis.RedisText ExecLua(string luaBody, string[] keys, string[] args); + ServiceStack.Redis.RedisText ExecLua(string body, params string[] args); + System.Int64 ExecLuaAsInt(string luaBody, string[] keys, string[] args); + System.Int64 ExecLuaAsInt(string luaBody, params string[] args); + System.Collections.Generic.List ExecLuaAsList(string luaBody, string[] keys, string[] args); + System.Collections.Generic.List ExecLuaAsList(string luaBody, params string[] args); + string ExecLuaAsString(string luaBody, string[] keys, string[] args); + string ExecLuaAsString(string luaBody, params string[] args); + ServiceStack.Redis.RedisText ExecLuaSha(string sha1, string[] keys, string[] args); + ServiceStack.Redis.RedisText ExecLuaSha(string sha1, params string[] args); + System.Int64 ExecLuaShaAsInt(string sha1, string[] keys, string[] args); + System.Int64 ExecLuaShaAsInt(string sha1, params string[] args); + System.Collections.Generic.List ExecLuaShaAsList(string sha1, string[] keys, string[] args); + System.Collections.Generic.List ExecLuaShaAsList(string sha1, params string[] args); + string ExecLuaShaAsString(string sha1, string[] keys, string[] args); + string ExecLuaShaAsString(string sha1, params string[] args); + bool ExpireEntryAt(string key, System.DateTime expireAt); + bool ExpireEntryIn(string key, System.TimeSpan expireIn); + string[] FindGeoMembersInRadius(string key, string member, double radius, string unit); + string[] FindGeoMembersInRadius(string key, double longitude, double latitude, double radius, string unit); + System.Collections.Generic.List FindGeoResultsInRadius(string key, string member, double radius, string unit, int? count = default(int?), bool? sortByNearest = default(bool?)); + System.Collections.Generic.List FindGeoResultsInRadius(string key, double longitude, double latitude, double radius, string unit, int? count = default(int?), bool? sortByNearest = default(bool?)); + void FlushDb(); + System.Collections.Generic.Dictionary GetAllEntriesFromHash(string hashId); + System.Collections.Generic.List GetAllItemsFromList(string listId); + System.Collections.Generic.HashSet GetAllItemsFromSet(string setId); + System.Collections.Generic.List GetAllItemsFromSortedSet(string setId); + System.Collections.Generic.List GetAllItemsFromSortedSetDesc(string setId); + System.Collections.Generic.List GetAllKeys(); + System.Collections.Generic.IDictionary GetAllWithScoresFromSortedSet(string setId); + string GetAndSetValue(string key, string value); + string GetClient(); + System.Collections.Generic.List> GetClientsInfo(); + string GetConfig(string item); + System.Collections.Generic.HashSet GetDifferencesFromSet(string fromSetId, params string[] withSetIds); + ServiceStack.Redis.RedisKeyType GetEntryType(string key); + T GetFromHash(object id); + System.Collections.Generic.List GetGeoCoordinates(string key, params string[] members); + string[] GetGeohashes(string key, params string[] members); + System.Int64 GetHashCount(string hashId); + System.Collections.Generic.List GetHashKeys(string hashId); + System.Collections.Generic.List GetHashValues(string hashId); + System.Collections.Generic.HashSet GetIntersectFromSets(params string[] setIds); + string GetItemFromList(string listId, int listIndex); + System.Int64 GetItemIndexInSortedSet(string setId, string value); + System.Int64 GetItemIndexInSortedSetDesc(string setId, string value); + double GetItemScoreInSortedSet(string setId, string value); + System.Int64 GetListCount(string listId); + string GetRandomItemFromSet(string setId); + string GetRandomKey(); + System.Collections.Generic.List GetRangeFromList(string listId, int startingFrom, int endingAt); + System.Collections.Generic.List GetRangeFromSortedList(string listId, int startingFrom, int endingAt); + System.Collections.Generic.List GetRangeFromSortedSet(string setId, int fromRank, int toRank); + System.Collections.Generic.List GetRangeFromSortedSetByHighestScore(string setId, string fromStringScore, string toStringScore, int? skip, int? take); + System.Collections.Generic.List GetRangeFromSortedSetByHighestScore(string setId, string fromStringScore, string toStringScore); + System.Collections.Generic.List GetRangeFromSortedSetByHighestScore(string setId, double fromScore, double toScore, int? skip, int? take); + System.Collections.Generic.List GetRangeFromSortedSetByHighestScore(string setId, double fromScore, double toScore); + System.Collections.Generic.List GetRangeFromSortedSetByHighestScore(string setId, System.Int64 fromScore, System.Int64 toScore, int? skip, int? take); + System.Collections.Generic.List GetRangeFromSortedSetByHighestScore(string setId, System.Int64 fromScore, System.Int64 toScore); + System.Collections.Generic.List GetRangeFromSortedSetByLowestScore(string setId, string fromStringScore, string toStringScore, int? skip, int? take); + System.Collections.Generic.List GetRangeFromSortedSetByLowestScore(string setId, string fromStringScore, string toStringScore); + System.Collections.Generic.List GetRangeFromSortedSetByLowestScore(string setId, double fromScore, double toScore, int? skip, int? take); + System.Collections.Generic.List GetRangeFromSortedSetByLowestScore(string setId, double fromScore, double toScore); + System.Collections.Generic.List GetRangeFromSortedSetByLowestScore(string setId, System.Int64 fromScore, System.Int64 toScore, int? skip, int? take); + System.Collections.Generic.List GetRangeFromSortedSetByLowestScore(string setId, System.Int64 fromScore, System.Int64 toScore); + System.Collections.Generic.List GetRangeFromSortedSetDesc(string setId, int fromRank, int toRank); + System.Collections.Generic.IDictionary GetRangeWithScoresFromSortedSet(string setId, int fromRank, int toRank); + System.Collections.Generic.IDictionary GetRangeWithScoresFromSortedSetByHighestScore(string setId, string fromStringScore, string toStringScore, int? skip, int? take); + System.Collections.Generic.IDictionary GetRangeWithScoresFromSortedSetByHighestScore(string setId, string fromStringScore, string toStringScore); + System.Collections.Generic.IDictionary GetRangeWithScoresFromSortedSetByHighestScore(string setId, double fromScore, double toScore, int? skip, int? take); + System.Collections.Generic.IDictionary GetRangeWithScoresFromSortedSetByHighestScore(string setId, double fromScore, double toScore); + System.Collections.Generic.IDictionary GetRangeWithScoresFromSortedSetByHighestScore(string setId, System.Int64 fromScore, System.Int64 toScore, int? skip, int? take); + System.Collections.Generic.IDictionary GetRangeWithScoresFromSortedSetByHighestScore(string setId, System.Int64 fromScore, System.Int64 toScore); + System.Collections.Generic.IDictionary GetRangeWithScoresFromSortedSetByLowestScore(string setId, string fromStringScore, string toStringScore, int? skip, int? take); + System.Collections.Generic.IDictionary GetRangeWithScoresFromSortedSetByLowestScore(string setId, string fromStringScore, string toStringScore); + System.Collections.Generic.IDictionary GetRangeWithScoresFromSortedSetByLowestScore(string setId, double fromScore, double toScore, int? skip, int? take); + System.Collections.Generic.IDictionary GetRangeWithScoresFromSortedSetByLowestScore(string setId, double fromScore, double toScore); + System.Collections.Generic.IDictionary GetRangeWithScoresFromSortedSetByLowestScore(string setId, System.Int64 fromScore, System.Int64 toScore, int? skip, int? take); + System.Collections.Generic.IDictionary GetRangeWithScoresFromSortedSetByLowestScore(string setId, System.Int64 fromScore, System.Int64 toScore); + System.Collections.Generic.IDictionary GetRangeWithScoresFromSortedSetDesc(string setId, int fromRank, int toRank); + ServiceStack.Redis.RedisServerRole GetServerRole(); + ServiceStack.Redis.RedisText GetServerRoleInfo(); + System.DateTime GetServerTime(); + System.Int64 GetSetCount(string setId); + System.Collections.Generic.List GetSortedEntryValues(string key, int startingFrom, int endingAt); + System.Collections.Generic.List GetSortedItemsFromList(string listId, ServiceStack.Redis.SortOptions sortOptions); + System.Int64 GetSortedSetCount(string setId, string fromStringScore, string toStringScore); + System.Int64 GetSortedSetCount(string setId, double fromScore, double toScore); + System.Int64 GetSortedSetCount(string setId, System.Int64 fromScore, System.Int64 toScore); + System.Int64 GetSortedSetCount(string setId); + System.Int64 GetStringCount(string key); + System.Collections.Generic.HashSet GetUnionFromSets(params string[] setIds); + string GetValue(string key); + string GetValueFromHash(string hashId, string key); + System.Collections.Generic.List GetValues(System.Collections.Generic.List keys); + System.Collections.Generic.List GetValues(System.Collections.Generic.List keys); + System.Collections.Generic.List GetValuesFromHash(string hashId, params string[] keys); + System.Collections.Generic.Dictionary GetValuesMap(System.Collections.Generic.List keys); + System.Collections.Generic.Dictionary GetValuesMap(System.Collections.Generic.List keys); + bool HadExceptions { get; } + bool HasLuaScript(string sha1Ref); + bool HashContainsEntry(string hashId, string key); + ServiceStack.Model.IHasNamed Hashes { get; set; } + string Host { get; } + double IncrementItemInSortedSet(string setId, string value, double incrementBy); + double IncrementItemInSortedSet(string setId, string value, System.Int64 incrementBy); + System.Int64 IncrementValue(string key); + double IncrementValueBy(string key, double count); + System.Int64 IncrementValueBy(string key, int count); + System.Int64 IncrementValueBy(string key, System.Int64 count); + double IncrementValueInHash(string hashId, string key, double incrementBy); + System.Int64 IncrementValueInHash(string hashId, string key, int incrementBy); + System.Collections.Generic.Dictionary Info { get; } + string this[string key] { get; set; } + void KillClient(string address); + System.Int64 KillClients(string fromAddress = default(string), string withId = default(string), ServiceStack.Redis.RedisClientType? ofType = default(ServiceStack.Redis.RedisClientType?), bool? skipMe = default(bool?)); + void KillRunningLuaScript(); + System.DateTime LastSave { get; } + ServiceStack.Model.IHasNamed Lists { get; set; } + string LoadLuaScript(string body); + void MergeHyperLogs(string toKey, params string[] fromKeys); + void MoveBetweenSets(string fromSetId, string toSetId, string item); + string Password { get; set; } + void PauseAllClients(System.TimeSpan duration); + bool Ping(); + string PopAndPushItemBetweenLists(string fromListId, string toListId); + string PopItemFromList(string listId); + string PopItemFromSet(string setId); + string PopItemWithHighestScoreFromSortedSet(string setId); + string PopItemWithLowestScoreFromSortedSet(string setId); + System.Collections.Generic.List PopItemsFromSet(string setId, int count); + int Port { get; } + void PrependItemToList(string listId, string value); + void PrependRangeToList(string listId, System.Collections.Generic.List values); + System.Int64 PublishMessage(string toChannel, string message); + void PushItemToList(string listId, string value); + void RemoveAllFromList(string listId); + void RemoveAllLuaScripts(); + string RemoveEndFromList(string listId); + bool RemoveEntry(params string[] args); + bool RemoveEntryFromHash(string hashId, string key); + System.Int64 RemoveItemFromList(string listId, string value, int noOfMatches); + System.Int64 RemoveItemFromList(string listId, string value); + void RemoveItemFromSet(string setId, string item); + bool RemoveItemFromSortedSet(string setId, string value); + System.Int64 RemoveItemsFromSortedSet(string setId, System.Collections.Generic.List values); + System.Int64 RemoveRangeFromSortedSet(string setId, int minRank, int maxRank); + System.Int64 RemoveRangeFromSortedSetByScore(string setId, double fromScore, double toScore); + System.Int64 RemoveRangeFromSortedSetByScore(string setId, System.Int64 fromScore, System.Int64 toScore); + System.Int64 RemoveRangeFromSortedSetBySearch(string setId, string start = default(string), string end = default(string)); + string RemoveStartFromList(string listId); + void RenameKey(string fromName, string toName); + void ResetInfoStats(); + int RetryCount { get; set; } + int RetryTimeout { get; set; } + void RewriteAppendOnlyFileAsync(); + void Save(); + void SaveAsync(); + void SaveConfig(); + System.Collections.Generic.IEnumerable> ScanAllHashEntries(string hashId, string pattern = default(string), int pageSize = default(int)); + System.Collections.Generic.IEnumerable ScanAllKeys(string pattern = default(string), int pageSize = default(int)); + System.Collections.Generic.IEnumerable ScanAllSetItems(string setId, string pattern = default(string), int pageSize = default(int)); + System.Collections.Generic.IEnumerable> ScanAllSortedSetItems(string setId, string pattern = default(string), int pageSize = default(int)); + System.Collections.Generic.List SearchKeys(string pattern); + System.Collections.Generic.List SearchSortedSet(string setId, string start = default(string), string end = default(string), int? skip = default(int?), int? take = default(int?)); + System.Int64 SearchSortedSetCount(string setId, string start = default(string), string end = default(string)); + int SendTimeout { get; set; } + void SetAll(System.Collections.Generic.IEnumerable keys, System.Collections.Generic.IEnumerable values); + void SetAll(System.Collections.Generic.Dictionary map); + void SetClient(string name); + void SetConfig(string item, string value); + bool SetContainsItem(string setId, string item); + bool SetEntryInHash(string hashId, string key, string value); + bool SetEntryInHashIfNotExists(string hashId, string key, string value); + void SetItemInList(string listId, int listIndex, string value); + void SetRangeInHash(string hashId, System.Collections.Generic.IEnumerable> keyValuePairs); + void SetValue(string key, string value, System.TimeSpan expireIn); + void SetValue(string key, string value); + bool SetValueIfExists(string key, string value, System.TimeSpan expireIn); + bool SetValueIfExists(string key, string value); + bool SetValueIfNotExists(string key, string value, System.TimeSpan expireIn); + bool SetValueIfNotExists(string key, string value); + void SetValues(System.Collections.Generic.Dictionary map); + ServiceStack.Model.IHasNamed Sets { get; set; } + void Shutdown(); + void ShutdownNoSave(); + bool SortedSetContainsItem(string setId, string value); + ServiceStack.Model.IHasNamed SortedSets { get; set; } + void StoreAsHash(T entity); + void StoreDifferencesFromSet(string intoSetId, string fromSetId, params string[] withSetIds); + void StoreIntersectFromSets(string intoSetId, params string[] setIds); + System.Int64 StoreIntersectFromSortedSets(string intoSetId, string[] setIds, string[] args); + System.Int64 StoreIntersectFromSortedSets(string intoSetId, params string[] setIds); + object StoreObject(object entity); + void StoreUnionFromSets(string intoSetId, params string[] setIds); + System.Int64 StoreUnionFromSortedSets(string intoSetId, string[] setIds, string[] args); + System.Int64 StoreUnionFromSortedSets(string intoSetId, params string[] setIds); + void TrimList(string listId, int keepStartingFrom, int keepEndingAt); + string Type(string key); + void UnWatch(); + string UrnKey(object id); + string UrnKey(T value); + string UrnKey(System.Type type, object id); + void Watch(params string[] keys); + System.Collections.Generic.Dictionary WhichLuaScriptsExists(params string[] sha1Refs); + void WriteAll(System.Collections.Generic.IEnumerable entities); + } + + // Generated from `ServiceStack.Redis.IRedisClientAsync` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IRedisClientAsync : System.IAsyncDisposable, ServiceStack.Data.IEntityStoreAsync, ServiceStack.Caching.IRemoveByPatternAsync, ServiceStack.Caching.ICacheClientAsync + { + System.Threading.Tasks.ValueTask AcquireLockAsync(string key, System.TimeSpan? timeOut = default(System.TimeSpan?), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask AddGeoMemberAsync(string key, double longitude, double latitude, string member, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask AddGeoMembersAsync(string key, params ServiceStack.Redis.RedisGeo[] geoPoints); + System.Threading.Tasks.ValueTask AddGeoMembersAsync(string key, ServiceStack.Redis.RedisGeo[] geoPoints, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask AddItemToListAsync(string listId, string value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask AddItemToSetAsync(string setId, string item, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask AddItemToSortedSetAsync(string setId, string value, double score, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask AddItemToSortedSetAsync(string setId, string value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask AddRangeToListAsync(string listId, System.Collections.Generic.List values, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask AddRangeToSetAsync(string setId, System.Collections.Generic.List items, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask AddRangeToSortedSetAsync(string setId, System.Collections.Generic.List values, double score, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask AddRangeToSortedSetAsync(string setId, System.Collections.Generic.List values, System.Int64 score, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask AddToHyperLogAsync(string key, string[] elements, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask AddToHyperLogAsync(string key, params string[] elements); + System.Threading.Tasks.ValueTask AppendToValueAsync(string key, string value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + ServiceStack.Redis.Generic.IRedisTypedClientAsync As(); + System.Threading.Tasks.ValueTask BackgroundRewriteAppendOnlyFileAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask BackgroundSaveAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask BlockingDequeueItemFromListAsync(string listId, System.TimeSpan? timeOut, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask BlockingDequeueItemFromListsAsync(string[] listIds, System.TimeSpan? timeOut, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask BlockingPopAndPushItemBetweenListsAsync(string fromListId, string toListId, System.TimeSpan? timeOut, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask BlockingPopItemFromListAsync(string listId, System.TimeSpan? timeOut, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask BlockingPopItemFromListsAsync(string[] listIds, System.TimeSpan? timeOut, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask BlockingRemoveStartFromListAsync(string listId, System.TimeSpan? timeOut, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask BlockingRemoveStartFromListsAsync(string[] listIds, System.TimeSpan? timeOut, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask CalculateDistanceBetweenGeoMembersAsync(string key, string fromMember, string toMember, string unit = default(string), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask CalculateSha1Async(string luaBody, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + int ConnectTimeout { get; set; } + System.Threading.Tasks.ValueTask ContainsKeyAsync(string key, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask CountHyperLogAsync(string key, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + ServiceStack.Redis.Pipeline.IRedisPipelineAsync CreatePipeline(); + System.Threading.Tasks.ValueTask CreateSubscriptionAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask CreateTransactionAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask CustomAsync(params object[] cmdWithArgs); + System.Threading.Tasks.ValueTask CustomAsync(object[] cmdWithArgs, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Int64 Db { get; } + System.Threading.Tasks.ValueTask DbSizeAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask DecrementValueAsync(string key, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask DecrementValueByAsync(string key, int count, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask DequeueItemFromListAsync(string listId, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask EchoAsync(string text, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask EnqueueItemOnListAsync(string listId, string value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask ExecCachedLuaAsync(string scriptBody, System.Func> scriptSha1, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask ExecLuaAsIntAsync(string luaBody, string[] keys, string[] args, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask ExecLuaAsIntAsync(string luaBody, string[] args, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask ExecLuaAsIntAsync(string luaBody, params string[] args); + System.Threading.Tasks.ValueTask> ExecLuaAsListAsync(string luaBody, string[] keys, string[] args, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> ExecLuaAsListAsync(string luaBody, string[] args, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> ExecLuaAsListAsync(string luaBody, params string[] args); + System.Threading.Tasks.ValueTask ExecLuaAsStringAsync(string luaBody, string[] keys, string[] args, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask ExecLuaAsStringAsync(string luaBody, string[] args, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask ExecLuaAsStringAsync(string luaBody, params string[] args); + System.Threading.Tasks.ValueTask ExecLuaAsync(string luaBody, string[] keys, string[] args, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask ExecLuaAsync(string body, string[] args, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask ExecLuaAsync(string body, params string[] args); + System.Threading.Tasks.ValueTask ExecLuaShaAsIntAsync(string sha1, string[] keys, string[] args, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask ExecLuaShaAsIntAsync(string sha1, string[] args, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask ExecLuaShaAsIntAsync(string sha1, params string[] args); + System.Threading.Tasks.ValueTask> ExecLuaShaAsListAsync(string sha1, string[] keys, string[] args, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> ExecLuaShaAsListAsync(string sha1, string[] args, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> ExecLuaShaAsListAsync(string sha1, params string[] args); + System.Threading.Tasks.ValueTask ExecLuaShaAsStringAsync(string sha1, string[] keys, string[] args, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask ExecLuaShaAsStringAsync(string sha1, string[] args, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask ExecLuaShaAsStringAsync(string sha1, params string[] args); + System.Threading.Tasks.ValueTask ExecLuaShaAsync(string sha1, string[] keys, string[] args, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask ExecLuaShaAsync(string sha1, string[] args, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask ExecLuaShaAsync(string sha1, params string[] args); + System.Threading.Tasks.ValueTask ExpireEntryAtAsync(string key, System.DateTime expireAt, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask ExpireEntryInAsync(string key, System.TimeSpan expireIn, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask FindGeoMembersInRadiusAsync(string key, string member, double radius, string unit, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask FindGeoMembersInRadiusAsync(string key, double longitude, double latitude, double radius, string unit, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> FindGeoResultsInRadiusAsync(string key, string member, double radius, string unit, int? count = default(int?), bool? sortByNearest = default(bool?), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> FindGeoResultsInRadiusAsync(string key, double longitude, double latitude, double radius, string unit, int? count = default(int?), bool? sortByNearest = default(bool?), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask FlushDbAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask ForegroundSaveAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetAllEntriesFromHashAsync(string hashId, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetAllItemsFromListAsync(string listId, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetAllItemsFromSetAsync(string setId, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetAllItemsFromSortedSetAsync(string setId, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetAllItemsFromSortedSetDescAsync(string setId, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetAllKeysAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetAllWithScoresFromSortedSetAsync(string setId, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask GetAndSetValueAsync(string key, string value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask GetClientAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask>> GetClientsInfoAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask GetConfigAsync(string item, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetDifferencesFromSetAsync(string fromSetId, string[] withSetIds, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetDifferencesFromSetAsync(string fromSetId, params string[] withSetIds); + System.Threading.Tasks.ValueTask GetEntryTypeAsync(string key, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask GetFromHashAsync(object id, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetGeoCoordinatesAsync(string key, string[] members, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetGeoCoordinatesAsync(string key, params string[] members); + System.Threading.Tasks.ValueTask GetGeohashesAsync(string key, string[] members, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask GetGeohashesAsync(string key, params string[] members); + System.Threading.Tasks.ValueTask GetHashCountAsync(string hashId, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetHashKeysAsync(string hashId, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetHashValuesAsync(string hashId, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetIntersectFromSetsAsync(string[] setIds, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetIntersectFromSetsAsync(params string[] setIds); + System.Threading.Tasks.ValueTask GetItemFromListAsync(string listId, int listIndex, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask GetItemIndexInSortedSetAsync(string setId, string value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask GetItemIndexInSortedSetDescAsync(string setId, string value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask GetItemScoreInSortedSetAsync(string setId, string value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask GetListCountAsync(string listId, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask GetRandomItemFromSetAsync(string setId, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask GetRandomKeyAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetRangeFromListAsync(string listId, int startingFrom, int endingAt, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetRangeFromSortedListAsync(string listId, int startingFrom, int endingAt, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetRangeFromSortedSetAsync(string setId, int fromRank, int toRank, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetRangeFromSortedSetByHighestScoreAsync(string setId, string fromStringScore, string toStringScore, int? skip, int? take, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetRangeFromSortedSetByHighestScoreAsync(string setId, string fromStringScore, string toStringScore, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetRangeFromSortedSetByHighestScoreAsync(string setId, double fromScore, double toScore, int? skip, int? take, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetRangeFromSortedSetByHighestScoreAsync(string setId, double fromScore, double toScore, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetRangeFromSortedSetByHighestScoreAsync(string setId, System.Int64 fromScore, System.Int64 toScore, int? skip, int? take, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetRangeFromSortedSetByHighestScoreAsync(string setId, System.Int64 fromScore, System.Int64 toScore, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetRangeFromSortedSetByLowestScoreAsync(string setId, string fromStringScore, string toStringScore, int? skip, int? take, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetRangeFromSortedSetByLowestScoreAsync(string setId, string fromStringScore, string toStringScore, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetRangeFromSortedSetByLowestScoreAsync(string setId, double fromScore, double toScore, int? skip, int? take, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetRangeFromSortedSetByLowestScoreAsync(string setId, double fromScore, double toScore, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetRangeFromSortedSetByLowestScoreAsync(string setId, System.Int64 fromScore, System.Int64 toScore, int? skip, int? take, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetRangeFromSortedSetByLowestScoreAsync(string setId, System.Int64 fromScore, System.Int64 toScore, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetRangeFromSortedSetDescAsync(string setId, int fromRank, int toRank, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetRangeWithScoresFromSortedSetAsync(string setId, int fromRank, int toRank, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetRangeWithScoresFromSortedSetByHighestScoreAsync(string setId, string fromStringScore, string toStringScore, int? skip, int? take, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetRangeWithScoresFromSortedSetByHighestScoreAsync(string setId, string fromStringScore, string toStringScore, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetRangeWithScoresFromSortedSetByHighestScoreAsync(string setId, double fromScore, double toScore, int? skip, int? take, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetRangeWithScoresFromSortedSetByHighestScoreAsync(string setId, double fromScore, double toScore, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetRangeWithScoresFromSortedSetByHighestScoreAsync(string setId, System.Int64 fromScore, System.Int64 toScore, int? skip, int? take, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetRangeWithScoresFromSortedSetByHighestScoreAsync(string setId, System.Int64 fromScore, System.Int64 toScore, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetRangeWithScoresFromSortedSetByLowestScoreAsync(string setId, string fromStringScore, string toStringScore, int? skip, int? take, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetRangeWithScoresFromSortedSetByLowestScoreAsync(string setId, string fromStringScore, string toStringScore, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetRangeWithScoresFromSortedSetByLowestScoreAsync(string setId, double fromScore, double toScore, int? skip, int? take, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetRangeWithScoresFromSortedSetByLowestScoreAsync(string setId, double fromScore, double toScore, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetRangeWithScoresFromSortedSetByLowestScoreAsync(string setId, System.Int64 fromScore, System.Int64 toScore, int? skip, int? take, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetRangeWithScoresFromSortedSetByLowestScoreAsync(string setId, System.Int64 fromScore, System.Int64 toScore, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetRangeWithScoresFromSortedSetDescAsync(string setId, int fromRank, int toRank, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask GetServerRoleAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask GetServerRoleInfoAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask GetServerTimeAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask GetSetCountAsync(string setId, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask GetSlowlogAsync(int? numberOfRecords = default(int?), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetSortedEntryValuesAsync(string key, int startingFrom, int endingAt, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetSortedItemsFromListAsync(string listId, ServiceStack.Redis.SortOptions sortOptions, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask GetSortedSetCountAsync(string setId, string fromStringScore, string toStringScore, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask GetSortedSetCountAsync(string setId, double fromScore, double toScore, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask GetSortedSetCountAsync(string setId, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask GetSortedSetCountAsync(string setId, System.Int64 fromScore, System.Int64 toScore, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask GetStringCountAsync(string key, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetUnionFromSetsAsync(string[] setIds, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetUnionFromSetsAsync(params string[] setIds); + System.Threading.Tasks.ValueTask GetValueAsync(string key, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask GetValueFromHashAsync(string hashId, string key, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetValuesAsync(System.Collections.Generic.List keys, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetValuesAsync(System.Collections.Generic.List keys, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetValuesFromHashAsync(string hashId, string[] keys, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetValuesFromHashAsync(string hashId, params string[] keys); + System.Threading.Tasks.ValueTask> GetValuesMapAsync(System.Collections.Generic.List keys, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetValuesMapAsync(System.Collections.Generic.List keys, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + bool HadExceptions { get; } + System.Threading.Tasks.ValueTask HasLuaScriptAsync(string sha1Ref, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask HashContainsEntryAsync(string hashId, string key, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + ServiceStack.Model.IHasNamed Hashes { get; } + string Host { get; } + System.Threading.Tasks.ValueTask IncrementItemInSortedSetAsync(string setId, string value, double incrementBy, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask IncrementItemInSortedSetAsync(string setId, string value, System.Int64 incrementBy, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask IncrementValueAsync(string key, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask IncrementValueByAsync(string key, double count, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask IncrementValueByAsync(string key, int count, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask IncrementValueByAsync(string key, System.Int64 count, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask IncrementValueInHashAsync(string hashId, string key, double incrementBy, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask IncrementValueInHashAsync(string hashId, string key, int incrementBy, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> InfoAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask KillClientAsync(string address, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask KillClientsAsync(string fromAddress = default(string), string withId = default(string), ServiceStack.Redis.RedisClientType? ofType = default(ServiceStack.Redis.RedisClientType?), bool? skipMe = default(bool?), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask KillRunningLuaScriptAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask LastSaveAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + ServiceStack.Model.IHasNamed Lists { get; } + System.Threading.Tasks.ValueTask LoadLuaScriptAsync(string body, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask MergeHyperLogsAsync(string toKey, string[] fromKeys, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask MergeHyperLogsAsync(string toKey, params string[] fromKeys); + System.Threading.Tasks.ValueTask MoveBetweenSetsAsync(string fromSetId, string toSetId, string item, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + string Password { get; set; } + System.Threading.Tasks.ValueTask PauseAllClientsAsync(System.TimeSpan duration, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask PingAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask PopAndPushItemBetweenListsAsync(string fromListId, string toListId, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask PopItemFromListAsync(string listId, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask PopItemFromSetAsync(string setId, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask PopItemWithHighestScoreFromSortedSetAsync(string setId, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask PopItemWithLowestScoreFromSortedSetAsync(string setId, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> PopItemsFromSetAsync(string setId, int count, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + int Port { get; } + System.Threading.Tasks.ValueTask PrependItemToListAsync(string listId, string value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask PrependRangeToListAsync(string listId, System.Collections.Generic.List values, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask PublishMessageAsync(string toChannel, string message, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask PushItemToListAsync(string listId, string value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask RemoveAllFromListAsync(string listId, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask RemoveAllLuaScriptsAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask RemoveEndFromListAsync(string listId, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask RemoveEntryAsync(string[] args, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask RemoveEntryAsync(params string[] args); + System.Threading.Tasks.ValueTask RemoveEntryFromHashAsync(string hashId, string key, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask RemoveItemFromListAsync(string listId, string value, int noOfMatches, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask RemoveItemFromListAsync(string listId, string value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask RemoveItemFromSetAsync(string setId, string item, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask RemoveItemFromSortedSetAsync(string setId, string value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask RemoveItemsFromSortedSetAsync(string setId, System.Collections.Generic.List values, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask RemoveRangeFromSortedSetAsync(string setId, int minRank, int maxRank, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask RemoveRangeFromSortedSetByScoreAsync(string setId, double fromScore, double toScore, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask RemoveRangeFromSortedSetByScoreAsync(string setId, System.Int64 fromScore, System.Int64 toScore, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask RemoveRangeFromSortedSetBySearchAsync(string setId, string start = default(string), string end = default(string), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask RemoveStartFromListAsync(string listId, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask RenameKeyAsync(string fromName, string toName, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask ResetInfoStatsAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + int RetryCount { get; set; } + int RetryTimeout { get; set; } + System.Threading.Tasks.ValueTask SaveConfigAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Collections.Generic.IAsyncEnumerable> ScanAllHashEntriesAsync(string hashId, string pattern = default(string), int pageSize = default(int), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Collections.Generic.IAsyncEnumerable ScanAllKeysAsync(string pattern = default(string), int pageSize = default(int), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Collections.Generic.IAsyncEnumerable ScanAllSetItemsAsync(string setId, string pattern = default(string), int pageSize = default(int), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Collections.Generic.IAsyncEnumerable> ScanAllSortedSetItemsAsync(string setId, string pattern = default(string), int pageSize = default(int), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> SearchKeysAsync(string pattern, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> SearchSortedSetAsync(string setId, string start = default(string), string end = default(string), int? skip = default(int?), int? take = default(int?), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask SearchSortedSetCountAsync(string setId, string start = default(string), string end = default(string), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask SelectAsync(System.Int64 db, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + int SendTimeout { get; set; } + System.Threading.Tasks.ValueTask SetAllAsync(System.Collections.Generic.IEnumerable keys, System.Collections.Generic.IEnumerable values, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask SetAllAsync(System.Collections.Generic.IDictionary map, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask SetClientAsync(string name, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask SetConfigAsync(string item, string value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask SetContainsItemAsync(string setId, string item, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask SetEntryInHashAsync(string hashId, string key, string value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask SetEntryInHashIfNotExistsAsync(string hashId, string key, string value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask SetItemInListAsync(string listId, int listIndex, string value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask SetRangeInHashAsync(string hashId, System.Collections.Generic.IEnumerable> keyValuePairs, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask SetValueAsync(string key, string value, System.TimeSpan expireIn, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask SetValueAsync(string key, string value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask SetValueIfExistsAsync(string key, string value, System.TimeSpan? expireIn = default(System.TimeSpan?), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask SetValueIfNotExistsAsync(string key, string value, System.TimeSpan? expireIn = default(System.TimeSpan?), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask SetValuesAsync(System.Collections.Generic.IDictionary map, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + ServiceStack.Model.IHasNamed Sets { get; } + System.Threading.Tasks.ValueTask ShutdownAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask ShutdownNoSaveAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask SlowlogResetAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask SortedSetContainsItemAsync(string setId, string value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + ServiceStack.Model.IHasNamed SortedSets { get; } + System.Threading.Tasks.ValueTask StoreAsHashAsync(T entity, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask StoreDifferencesFromSetAsync(string intoSetId, string fromSetId, string[] withSetIds, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask StoreDifferencesFromSetAsync(string intoSetId, string fromSetId, params string[] withSetIds); + System.Threading.Tasks.ValueTask StoreIntersectFromSetsAsync(string intoSetId, string[] setIds, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask StoreIntersectFromSetsAsync(string intoSetId, params string[] setIds); + System.Threading.Tasks.ValueTask StoreIntersectFromSortedSetsAsync(string intoSetId, string[] setIds, string[] args, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask StoreIntersectFromSortedSetsAsync(string intoSetId, string[] setIds, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask StoreIntersectFromSortedSetsAsync(string intoSetId, params string[] setIds); + System.Threading.Tasks.ValueTask StoreObjectAsync(object entity, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask StoreUnionFromSetsAsync(string intoSetId, string[] setIds, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask StoreUnionFromSetsAsync(string intoSetId, params string[] setIds); + System.Threading.Tasks.ValueTask StoreUnionFromSortedSetsAsync(string intoSetId, string[] setIds, string[] args, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask StoreUnionFromSortedSetsAsync(string intoSetId, string[] setIds, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask StoreUnionFromSortedSetsAsync(string intoSetId, params string[] setIds); + System.Threading.Tasks.ValueTask TrimListAsync(string listId, int keepStartingFrom, int keepEndingAt, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask TypeAsync(string key, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask UnWatchAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + string UrnKey(object id); + string UrnKey(T value); + string UrnKey(System.Type type, object id); + System.Threading.Tasks.ValueTask WatchAsync(string[] keys, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask WatchAsync(params string[] keys); + System.Threading.Tasks.ValueTask> WhichLuaScriptsExistsAsync(string[] sha1Refs, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> WhichLuaScriptsExistsAsync(params string[] sha1Refs); + System.Threading.Tasks.ValueTask WriteAllAsync(System.Collections.Generic.IEnumerable entities, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + } + + // Generated from `ServiceStack.Redis.IRedisClientCacheManager` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IRedisClientCacheManager : System.IDisposable + { + ServiceStack.Caching.ICacheClient GetCacheClient(); + ServiceStack.Redis.IRedisClient GetClient(); + ServiceStack.Caching.ICacheClient GetReadOnlyCacheClient(); + ServiceStack.Redis.IRedisClient GetReadOnlyClient(); + } + + // Generated from `ServiceStack.Redis.IRedisClientsManager` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IRedisClientsManager : System.IDisposable + { + ServiceStack.Caching.ICacheClient GetCacheClient(); + ServiceStack.Redis.IRedisClient GetClient(); + ServiceStack.Caching.ICacheClient GetReadOnlyCacheClient(); + ServiceStack.Redis.IRedisClient GetReadOnlyClient(); + } + + // Generated from `ServiceStack.Redis.IRedisClientsManagerAsync` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IRedisClientsManagerAsync : System.IAsyncDisposable + { + System.Threading.Tasks.ValueTask GetCacheClientAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask GetClientAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask GetReadOnlyCacheClientAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask GetReadOnlyClientAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + } + + // Generated from `ServiceStack.Redis.IRedisHash` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IRedisHash : System.Collections.IEnumerable, System.Collections.Generic.IEnumerable>, System.Collections.Generic.IDictionary, System.Collections.Generic.ICollection>, ServiceStack.Model.IHasStringId, ServiceStack.Model.IHasId + { + bool AddIfNotExists(System.Collections.Generic.KeyValuePair item); + void AddRange(System.Collections.Generic.IEnumerable> items); + System.Int64 IncrementValue(string key, int incrementBy); + } + + // Generated from `ServiceStack.Redis.IRedisHashAsync` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IRedisHashAsync : System.Collections.Generic.IAsyncEnumerable>, ServiceStack.Model.IHasStringId, ServiceStack.Model.IHasId + { + System.Threading.Tasks.ValueTask AddAsync(string key, string value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask AddAsync(System.Collections.Generic.KeyValuePair item, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask AddIfNotExistsAsync(System.Collections.Generic.KeyValuePair item, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask AddRangeAsync(System.Collections.Generic.IEnumerable> items, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask ClearAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask ContainsKeyAsync(string key, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask CountAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask IncrementValueAsync(string key, int incrementBy, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask RemoveAsync(string key, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + } + + // Generated from `ServiceStack.Redis.IRedisList` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IRedisList : System.Collections.IEnumerable, System.Collections.Generic.IList, System.Collections.Generic.IEnumerable, System.Collections.Generic.ICollection, ServiceStack.Model.IHasStringId, ServiceStack.Model.IHasId + { + void Append(string value); + string BlockingDequeue(System.TimeSpan? timeOut); + string BlockingPop(System.TimeSpan? timeOut); + string BlockingRemoveStart(System.TimeSpan? timeOut); + string Dequeue(); + void Enqueue(string value); + System.Collections.Generic.List GetAll(); + System.Collections.Generic.List GetRange(int startingFrom, int endingAt); + System.Collections.Generic.List GetRangeFromSortedList(int startingFrom, int endingAt); + string Pop(); + string PopAndPush(ServiceStack.Redis.IRedisList toList); + void Prepend(string value); + void Push(string value); + void RemoveAll(); + string RemoveEnd(); + string RemoveStart(); + System.Int64 RemoveValue(string value, int noOfMatches); + System.Int64 RemoveValue(string value); + void Trim(int keepStartingFrom, int keepEndingAt); + } + + // Generated from `ServiceStack.Redis.IRedisListAsync` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IRedisListAsync : System.Collections.Generic.IAsyncEnumerable, ServiceStack.Model.IHasStringId, ServiceStack.Model.IHasId + { + System.Threading.Tasks.ValueTask AddAsync(string item, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask AppendAsync(string value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask BlockingDequeueAsync(System.TimeSpan? timeOut, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask BlockingPopAsync(System.TimeSpan? timeOut, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask BlockingRemoveStartAsync(System.TimeSpan? timeOut, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask ClearAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask ContainsAsync(string item, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask CountAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask DequeueAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask ElementAtAsync(int index, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask EnqueueAsync(string value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetAllAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetRangeAsync(int startingFrom, int endingAt, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetRangeFromSortedListAsync(int startingFrom, int endingAt, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask IndexOfAsync(string item, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask PopAndPushAsync(ServiceStack.Redis.IRedisListAsync toList, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask PopAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask PrependAsync(string value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask PushAsync(string value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask RemoveAllAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask RemoveAsync(string item, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask RemoveAtAsync(int index, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask RemoveEndAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask RemoveStartAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask RemoveValueAsync(string value, int noOfMatches, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask RemoveValueAsync(string value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask SetValueAsync(int index, string value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask TrimAsync(int keepStartingFrom, int keepEndingAt, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + } + + // Generated from `ServiceStack.Redis.IRedisNativeClient` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IRedisNativeClient : System.IDisposable + { + System.Int64 Append(string key, System.Byte[] value); + System.Byte[][] BLPop(string[] listIds, int timeOutSecs); + System.Byte[][] BLPop(string listId, int timeOutSecs); + System.Byte[][] BLPopValue(string[] listIds, int timeOutSecs); + System.Byte[] BLPopValue(string listId, int timeOutSecs); + System.Byte[][] BRPop(string[] listIds, int timeOutSecs); + System.Byte[][] BRPop(string listId, int timeOutSecs); + System.Byte[] BRPopLPush(string fromListId, string toListId, int timeOutSecs); + System.Byte[][] BRPopValue(string[] listIds, int timeOutSecs); + System.Byte[] BRPopValue(string listId, int timeOutSecs); + void BgRewriteAof(); + void BgSave(); + string CalculateSha1(string luaBody); + string ClientGetName(); + void ClientKill(string host); + System.Int64 ClientKill(string addr = default(string), string id = default(string), string type = default(string), string skipMe = default(string)); + System.Byte[] ClientList(); + void ClientPause(int timeOutMs); + void ClientSetName(string client); + System.Byte[][] ConfigGet(string pattern); + void ConfigResetStat(); + void ConfigRewrite(); + void ConfigSet(string item, System.Byte[] value); + ServiceStack.Redis.IRedisSubscription CreateSubscription(); + System.Int64 Db { get; set; } + System.Int64 DbSize { get; } + void DebugSegfault(); + System.Int64 Decr(string key); + System.Int64 DecrBy(string key, int decrBy); + System.Int64 Del(string key); + System.Int64 Del(params string[] keys); + System.Byte[] Dump(string key); + string Echo(string text); + System.Byte[][] Eval(string luaBody, int numberOfKeys, params System.Byte[][] keysAndArgs); + ServiceStack.Redis.RedisData EvalCommand(string luaBody, int numberKeysInArgs, params System.Byte[][] keys); + System.Int64 EvalInt(string luaBody, int numberOfKeys, params System.Byte[][] keysAndArgs); + System.Byte[][] EvalSha(string sha1, int numberOfKeys, params System.Byte[][] keysAndArgs); + ServiceStack.Redis.RedisData EvalShaCommand(string sha1, int numberKeysInArgs, params System.Byte[][] keys); + System.Int64 EvalShaInt(string sha1, int numberOfKeys, params System.Byte[][] keysAndArgs); + string EvalShaStr(string sha1, int numberOfKeys, params System.Byte[][] keysAndArgs); + string EvalStr(string luaBody, int numberOfKeys, params System.Byte[][] keysAndArgs); + System.Int64 Exists(string key); + bool Expire(string key, int seconds); + bool ExpireAt(string key, System.Int64 unixTime); + void FlushAll(); + void FlushDb(); + System.Int64 GeoAdd(string key, params ServiceStack.Redis.RedisGeo[] geoPoints); + System.Int64 GeoAdd(string key, double longitude, double latitude, string member); + double GeoDist(string key, string fromMember, string toMember, string unit = default(string)); + string[] GeoHash(string key, params string[] members); + System.Collections.Generic.List GeoPos(string key, params string[] members); + System.Collections.Generic.List GeoRadius(string key, double longitude, double latitude, double radius, string unit, bool withCoords = default(bool), bool withDist = default(bool), bool withHash = default(bool), int? count = default(int?), bool? asc = default(bool?)); + System.Collections.Generic.List GeoRadiusByMember(string key, string member, double radius, string unit, bool withCoords = default(bool), bool withDist = default(bool), bool withHash = default(bool), int? count = default(int?), bool? asc = default(bool?)); + System.Byte[] Get(string key); + System.Int64 GetBit(string key, int offset); + System.Byte[] GetRange(string key, int fromIndex, int toIndex); + System.Byte[] GetSet(string key, System.Byte[] value); + System.Int64 HDel(string hashId, System.Byte[] key); + System.Int64 HExists(string hashId, System.Byte[] key); + System.Byte[] HGet(string hashId, System.Byte[] key); + System.Byte[][] HGetAll(string hashId); + System.Int64 HIncrby(string hashId, System.Byte[] key, int incrementBy); + double HIncrbyFloat(string hashId, System.Byte[] key, double incrementBy); + System.Byte[][] HKeys(string hashId); + System.Int64 HLen(string hashId); + System.Byte[][] HMGet(string hashId, params System.Byte[][] keysAndArgs); + void HMSet(string hashId, System.Byte[][] keys, System.Byte[][] values); + ServiceStack.Redis.ScanResult HScan(string hashId, System.UInt64 cursor, int count = default(int), string match = default(string)); + System.Int64 HSet(string hashId, System.Byte[] key, System.Byte[] value); + System.Int64 HSetNX(string hashId, System.Byte[] key, System.Byte[] value); + System.Byte[][] HVals(string hashId); + System.Int64 Incr(string key); + System.Int64 IncrBy(string key, int incrBy); + double IncrByFloat(string key, double incrBy); + System.Collections.Generic.Dictionary Info { get; } + System.Byte[][] Keys(string pattern); + System.Byte[] LIndex(string listId, int listIndex); + void LInsert(string listId, bool insertBefore, System.Byte[] pivot, System.Byte[] value); + System.Int64 LLen(string listId); + System.Byte[] LPop(string listId); + System.Int64 LPush(string listId, System.Byte[] value); + System.Int64 LPushX(string listId, System.Byte[] value); + System.Byte[][] LRange(string listId, int startingFrom, int endingAt); + System.Int64 LRem(string listId, int removeNoOfMatches, System.Byte[] value); + void LSet(string listId, int listIndex, System.Byte[] value); + void LTrim(string listId, int keepStartingFrom, int keepEndingAt); + System.DateTime LastSave { get; } + System.Byte[][] MGet(params string[] keys); + System.Byte[][] MGet(params System.Byte[][] keysAndArgs); + void MSet(string[] keys, System.Byte[][] values); + void MSet(System.Byte[][] keys, System.Byte[][] values); + bool MSetNx(string[] keys, System.Byte[][] values); + bool MSetNx(System.Byte[][] keys, System.Byte[][] values); + void Migrate(string host, int port, string key, int destinationDb, System.Int64 timeoutMs); + bool Move(string key, int db); + System.Int64 ObjectIdleTime(string key); + bool PExpire(string key, System.Int64 ttlMs); + bool PExpireAt(string key, System.Int64 unixTimeMs); + void PSetEx(string key, System.Int64 expireInMs, System.Byte[] value); + System.Byte[][] PSubscribe(params string[] toChannelsMatchingPatterns); + System.Int64 PTtl(string key); + System.Byte[][] PUnSubscribe(params string[] toChannelsMatchingPatterns); + bool Persist(string key); + bool PfAdd(string key, params System.Byte[][] elements); + System.Int64 PfCount(string key); + void PfMerge(string toKeyId, params string[] fromKeys); + bool Ping(); + System.Int64 Publish(string toChannel, System.Byte[] message); + void Quit(); + System.Byte[] RPop(string listId); + System.Byte[] RPopLPush(string fromListId, string toListId); + System.Int64 RPush(string listId, System.Byte[] value); + System.Int64 RPushX(string listId, System.Byte[] value); + string RandomKey(); + ServiceStack.Redis.RedisData RawCommand(params object[] cmdWithArgs); + ServiceStack.Redis.RedisData RawCommand(params System.Byte[][] cmdWithBinaryArgs); + System.Byte[][] ReceiveMessages(); + void Rename(string oldKeyname, string newKeyname); + bool RenameNx(string oldKeyname, string newKeyname); + System.Byte[] Restore(string key, System.Int64 expireMs, System.Byte[] dumpValue); + ServiceStack.Redis.RedisText Role(); + System.Int64 SAdd(string setId, System.Byte[][] value); + System.Int64 SAdd(string setId, System.Byte[] value); + System.Int64 SCard(string setId); + System.Byte[][] SDiff(string fromSetId, params string[] withSetIds); + void SDiffStore(string intoSetId, string fromSetId, params string[] withSetIds); + System.Byte[][] SInter(params string[] setIds); + void SInterStore(string intoSetId, params string[] setIds); + System.Int64 SIsMember(string setId, System.Byte[] value); + System.Byte[][] SMembers(string setId); + void SMove(string fromSetId, string toSetId, System.Byte[] value); + System.Byte[][] SPop(string setId, int count); + System.Byte[] SPop(string setId); + System.Byte[] SRandMember(string setId); + System.Int64 SRem(string setId, System.Byte[] value); + ServiceStack.Redis.ScanResult SScan(string setId, System.UInt64 cursor, int count = default(int), string match = default(string)); + System.Byte[][] SUnion(params string[] setIds); + void SUnionStore(string intoSetId, params string[] setIds); + void Save(); + ServiceStack.Redis.ScanResult Scan(System.UInt64 cursor, int count = default(int), string match = default(string)); + System.Byte[][] ScriptExists(params System.Byte[][] sha1Refs); + void ScriptFlush(); + void ScriptKill(); + System.Byte[] ScriptLoad(string body); + void Set(string key, System.Byte[] value); + System.Int64 SetBit(string key, int offset, int value); + void SetEx(string key, int expireInSeconds, System.Byte[] value); + System.Int64 SetNX(string key, System.Byte[] value); + System.Int64 SetRange(string key, int offset, System.Byte[] value); + void Shutdown(); + void SlaveOf(string hostname, int port); + void SlaveOfNoOne(); + System.Byte[][] Sort(string listOrSetId, ServiceStack.Redis.SortOptions sortOptions); + System.Int64 StrLen(string key); + System.Byte[][] Subscribe(params string[] toChannels); + System.Byte[][] Time(); + System.Int64 Ttl(string key); + string Type(string key); + System.Byte[][] UnSubscribe(params string[] toChannels); + void UnWatch(); + void Watch(params string[] keys); + System.Int64 ZAdd(string setId, double score, System.Byte[] value); + System.Int64 ZAdd(string setId, System.Int64 score, System.Byte[] value); + System.Int64 ZCard(string setId); + double ZIncrBy(string setId, double incrBy, System.Byte[] value); + double ZIncrBy(string setId, System.Int64 incrBy, System.Byte[] value); + System.Int64 ZInterStore(string intoSetId, params string[] setIds); + System.Int64 ZLexCount(string setId, string min, string max); + System.Byte[][] ZRange(string setId, int min, int max); + System.Byte[][] ZRangeByLex(string setId, string min, string max, int? skip = default(int?), int? take = default(int?)); + System.Byte[][] ZRangeByScore(string setId, double min, double max, int? skip, int? take); + System.Byte[][] ZRangeByScore(string setId, System.Int64 min, System.Int64 max, int? skip, int? take); + System.Byte[][] ZRangeByScoreWithScores(string setId, double min, double max, int? skip, int? take); + System.Byte[][] ZRangeByScoreWithScores(string setId, System.Int64 min, System.Int64 max, int? skip, int? take); + System.Byte[][] ZRangeWithScores(string setId, int min, int max); + System.Int64 ZRank(string setId, System.Byte[] value); + System.Int64 ZRem(string setId, System.Byte[][] values); + System.Int64 ZRem(string setId, System.Byte[] value); + System.Int64 ZRemRangeByLex(string setId, string min, string max); + System.Int64 ZRemRangeByRank(string setId, int min, int max); + System.Int64 ZRemRangeByScore(string setId, double fromScore, double toScore); + System.Int64 ZRemRangeByScore(string setId, System.Int64 fromScore, System.Int64 toScore); + System.Byte[][] ZRevRange(string setId, int min, int max); + System.Byte[][] ZRevRangeByScore(string setId, double min, double max, int? skip, int? take); + System.Byte[][] ZRevRangeByScore(string setId, System.Int64 min, System.Int64 max, int? skip, int? take); + System.Byte[][] ZRevRangeByScoreWithScores(string setId, double min, double max, int? skip, int? take); + System.Byte[][] ZRevRangeByScoreWithScores(string setId, System.Int64 min, System.Int64 max, int? skip, int? take); + System.Byte[][] ZRevRangeWithScores(string setId, int min, int max); + System.Int64 ZRevRank(string setId, System.Byte[] value); + ServiceStack.Redis.ScanResult ZScan(string setId, System.UInt64 cursor, int count = default(int), string match = default(string)); + double ZScore(string setId, System.Byte[] value); + System.Int64 ZUnionStore(string intoSetId, params string[] setIds); + } + + // Generated from `ServiceStack.Redis.IRedisNativeClientAsync` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IRedisNativeClientAsync : System.IAsyncDisposable + { + System.Threading.Tasks.ValueTask AppendAsync(string key, System.Byte[] value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask BLPopAsync(string[] listIds, int timeOutSecs, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask BLPopAsync(string listId, int timeOutSecs, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask BLPopValueAsync(string[] listIds, int timeOutSecs, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask BLPopValueAsync(string listId, int timeOutSecs, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask BRPopAsync(string[] listIds, int timeOutSecs, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask BRPopAsync(string listId, int timeOutSecs, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask BRPopLPushAsync(string fromListId, string toListId, int timeOutSecs, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask BRPopValueAsync(string[] listIds, int timeOutSecs, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask BRPopValueAsync(string listId, int timeOutSecs, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask BgRewriteAofAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask BgSaveAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask BitCountAsync(string key, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask CalculateSha1Async(string luaBody, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask ClientGetNameAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask ClientKillAsync(string addr = default(string), string id = default(string), string type = default(string), string skipMe = default(string), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask ClientKillAsync(string host, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask ClientListAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask ClientPauseAsync(int timeOutMs, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask ClientSetNameAsync(string client, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask ConfigGetAsync(string pattern, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask ConfigResetStatAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask ConfigRewriteAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask ConfigSetAsync(string item, System.Byte[] value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask CreateSubscriptionAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Int64 Db { get; } + System.Threading.Tasks.ValueTask DbSizeAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask DebugSegfaultAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask DecrAsync(string key, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask DecrByAsync(string key, System.Int64 decrBy, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask DelAsync(string[] keys, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask DelAsync(string key, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask DelAsync(params string[] keys); + System.Threading.Tasks.ValueTask DumpAsync(string key, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask EchoAsync(string text, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask EvalAsync(string luaBody, int numberOfKeys, params System.Byte[][] keysAndArgs); + System.Threading.Tasks.ValueTask EvalAsync(string luaBody, int numberOfKeys, System.Byte[][] keysAndArgs, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask EvalCommandAsync(string luaBody, int numberKeysInArgs, params System.Byte[][] keys); + System.Threading.Tasks.ValueTask EvalCommandAsync(string luaBody, int numberKeysInArgs, System.Byte[][] keys, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask EvalIntAsync(string luaBody, int numberOfKeys, params System.Byte[][] keysAndArgs); + System.Threading.Tasks.ValueTask EvalIntAsync(string luaBody, int numberOfKeys, System.Byte[][] keysAndArgs, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask EvalShaAsync(string sha1, int numberOfKeys, params System.Byte[][] keysAndArgs); + System.Threading.Tasks.ValueTask EvalShaAsync(string sha1, int numberOfKeys, System.Byte[][] keysAndArgs, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask EvalShaCommandAsync(string sha1, int numberKeysInArgs, params System.Byte[][] keys); + System.Threading.Tasks.ValueTask EvalShaCommandAsync(string sha1, int numberKeysInArgs, System.Byte[][] keys, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask EvalShaIntAsync(string sha1, int numberOfKeys, params System.Byte[][] keysAndArgs); + System.Threading.Tasks.ValueTask EvalShaIntAsync(string sha1, int numberOfKeys, System.Byte[][] keysAndArgs, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask EvalShaStrAsync(string sha1, int numberOfKeys, params System.Byte[][] keysAndArgs); + System.Threading.Tasks.ValueTask EvalShaStrAsync(string sha1, int numberOfKeys, System.Byte[][] keysAndArgs, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask EvalStrAsync(string luaBody, int numberOfKeys, params System.Byte[][] keysAndArgs); + System.Threading.Tasks.ValueTask EvalStrAsync(string luaBody, int numberOfKeys, System.Byte[][] keysAndArgs, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask ExistsAsync(string key, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask ExpireAsync(string key, int seconds, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask ExpireAtAsync(string key, System.Int64 unixTime, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask FlushAllAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask FlushDbAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask GeoAddAsync(string key, params ServiceStack.Redis.RedisGeo[] geoPoints); + System.Threading.Tasks.ValueTask GeoAddAsync(string key, double longitude, double latitude, string member, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask GeoAddAsync(string key, ServiceStack.Redis.RedisGeo[] geoPoints, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask GeoDistAsync(string key, string fromMember, string toMember, string unit = default(string), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask GeoHashAsync(string key, string[] members, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask GeoHashAsync(string key, params string[] members); + System.Threading.Tasks.ValueTask> GeoPosAsync(string key, string[] members, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GeoPosAsync(string key, params string[] members); + System.Threading.Tasks.ValueTask> GeoRadiusAsync(string key, double longitude, double latitude, double radius, string unit, bool withCoords = default(bool), bool withDist = default(bool), bool withHash = default(bool), int? count = default(int?), bool? asc = default(bool?), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GeoRadiusByMemberAsync(string key, string member, double radius, string unit, bool withCoords = default(bool), bool withDist = default(bool), bool withHash = default(bool), int? count = default(int?), bool? asc = default(bool?), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask GetAsync(string key, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask GetBitAsync(string key, int offset, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask GetRangeAsync(string key, int fromIndex, int toIndex, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask GetSetAsync(string key, System.Byte[] value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask HDelAsync(string hashId, System.Byte[] key, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask HExistsAsync(string hashId, System.Byte[] key, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask HGetAllAsync(string hashId, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask HGetAsync(string hashId, System.Byte[] key, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask HIncrbyAsync(string hashId, System.Byte[] key, int incrementBy, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask HIncrbyFloatAsync(string hashId, System.Byte[] key, double incrementBy, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask HKeysAsync(string hashId, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask HLenAsync(string hashId, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask HMGetAsync(string hashId, params System.Byte[][] keysAndArgs); + System.Threading.Tasks.ValueTask HMGetAsync(string hashId, System.Byte[][] keysAndArgs, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask HMSetAsync(string hashId, System.Byte[][] keys, System.Byte[][] values, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask HScanAsync(string hashId, System.UInt64 cursor, int count = default(int), string match = default(string), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask HSetAsync(string hashId, System.Byte[] key, System.Byte[] value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask HSetNXAsync(string hashId, System.Byte[] key, System.Byte[] value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask HValsAsync(string hashId, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask IncrAsync(string key, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask IncrByAsync(string key, System.Int64 incrBy, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask IncrByFloatAsync(string key, double incrBy, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> InfoAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask KeysAsync(string pattern, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask LIndexAsync(string listId, int listIndex, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask LInsertAsync(string listId, bool insertBefore, System.Byte[] pivot, System.Byte[] value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask LLenAsync(string listId, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask LPopAsync(string listId, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask LPushAsync(string listId, System.Byte[] value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask LPushXAsync(string listId, System.Byte[] value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask LRangeAsync(string listId, int startingFrom, int endingAt, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask LRemAsync(string listId, int removeNoOfMatches, System.Byte[] value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask LSetAsync(string listId, int listIndex, System.Byte[] value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask LTrimAsync(string listId, int keepStartingFrom, int keepEndingAt, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask LastSaveAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask MGetAsync(string[] keys, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask MGetAsync(params string[] keys); + System.Threading.Tasks.ValueTask MGetAsync(params System.Byte[][] keysAndArgs); + System.Threading.Tasks.ValueTask MGetAsync(System.Byte[][] keysAndArgs, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask MSetAsync(string[] keys, System.Byte[][] values, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask MSetAsync(System.Byte[][] keys, System.Byte[][] values, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask MSetNxAsync(string[] keys, System.Byte[][] values, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask MSetNxAsync(System.Byte[][] keys, System.Byte[][] values, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask MigrateAsync(string host, int port, string key, int destinationDb, System.Int64 timeoutMs, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask MoveAsync(string key, int db, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask ObjectIdleTimeAsync(string key, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask PExpireAsync(string key, System.Int64 ttlMs, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask PExpireAtAsync(string key, System.Int64 unixTimeMs, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask PSetExAsync(string key, System.Int64 expireInMs, System.Byte[] value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask PSubscribeAsync(string[] toChannelsMatchingPatterns, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask PSubscribeAsync(params string[] toChannelsMatchingPatterns); + System.Threading.Tasks.ValueTask PTtlAsync(string key, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask PUnSubscribeAsync(string[] toChannelsMatchingPatterns, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask PUnSubscribeAsync(params string[] toChannelsMatchingPatterns); + System.Threading.Tasks.ValueTask PersistAsync(string key, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask PfAddAsync(string key, params System.Byte[][] elements); + System.Threading.Tasks.ValueTask PfAddAsync(string key, System.Byte[][] elements, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask PfCountAsync(string key, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask PfMergeAsync(string toKeyId, string[] fromKeys, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask PfMergeAsync(string toKeyId, params string[] fromKeys); + System.Threading.Tasks.ValueTask PingAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask PublishAsync(string toChannel, System.Byte[] message, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask QuitAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask RPopAsync(string listId, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask RPopLPushAsync(string fromListId, string toListId, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask RPushAsync(string listId, System.Byte[] value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask RPushXAsync(string listId, System.Byte[] value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask RandomKeyAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask RawCommandAsync(params object[] cmdWithArgs); + System.Threading.Tasks.ValueTask RawCommandAsync(params System.Byte[][] cmdWithBinaryArgs); + System.Threading.Tasks.ValueTask RawCommandAsync(object[] cmdWithArgs, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask RawCommandAsync(System.Byte[][] cmdWithBinaryArgs, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask ReceiveMessagesAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask RenameAsync(string oldKeyname, string newKeyname, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask RenameNxAsync(string oldKeyname, string newKeyname, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask RestoreAsync(string key, System.Int64 expireMs, System.Byte[] dumpValue, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask RoleAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask SAddAsync(string setId, System.Byte[][] value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask SAddAsync(string setId, System.Byte[] value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask SCardAsync(string setId, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask SDiffAsync(string fromSetId, string[] withSetIds, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask SDiffAsync(string fromSetId, params string[] withSetIds); + System.Threading.Tasks.ValueTask SDiffStoreAsync(string intoSetId, string fromSetId, string[] withSetIds, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask SDiffStoreAsync(string intoSetId, string fromSetId, params string[] withSetIds); + System.Threading.Tasks.ValueTask SInterAsync(string[] setIds, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask SInterAsync(params string[] setIds); + System.Threading.Tasks.ValueTask SInterStoreAsync(string intoSetId, string[] setIds, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask SInterStoreAsync(string intoSetId, params string[] setIds); + System.Threading.Tasks.ValueTask SIsMemberAsync(string setId, System.Byte[] value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask SMembersAsync(string setId, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask SMoveAsync(string fromSetId, string toSetId, System.Byte[] value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask SPopAsync(string setId, int count, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask SPopAsync(string setId, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask SRandMemberAsync(string setId, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask SRemAsync(string setId, System.Byte[] value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask SScanAsync(string setId, System.UInt64 cursor, int count = default(int), string match = default(string), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask SUnionAsync(string[] setIds, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask SUnionAsync(params string[] setIds); + System.Threading.Tasks.ValueTask SUnionStoreAsync(string intoSetId, string[] setIds, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask SUnionStoreAsync(string intoSetId, params string[] setIds); + System.Threading.Tasks.ValueTask SaveAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask ScanAsync(System.UInt64 cursor, int count = default(int), string match = default(string), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask ScriptExistsAsync(params System.Byte[][] sha1Refs); + System.Threading.Tasks.ValueTask ScriptExistsAsync(System.Byte[][] sha1Refs, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask ScriptFlushAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask ScriptKillAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask ScriptLoadAsync(string body, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask SelectAsync(System.Int64 db, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask SetAsync(string key, System.Byte[] value, bool exists, System.Int64 expirySeconds = default(System.Int64), System.Int64 expiryMilliseconds = default(System.Int64), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask SetAsync(string key, System.Byte[] value, System.Int64 expirySeconds = default(System.Int64), System.Int64 expiryMilliseconds = default(System.Int64), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask SetBitAsync(string key, int offset, int value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask SetExAsync(string key, int expireInSeconds, System.Byte[] value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask SetNXAsync(string key, System.Byte[] value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask SetRangeAsync(string key, int offset, System.Byte[] value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask ShutdownAsync(bool noSave = default(bool), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask SlaveOfAsync(string hostname, int port, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask SlaveOfNoOneAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask SlowlogGetAsync(int? top = default(int?), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask SlowlogResetAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask SortAsync(string listOrSetId, ServiceStack.Redis.SortOptions sortOptions, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask StrLenAsync(string key, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask SubscribeAsync(string[] toChannels, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask SubscribeAsync(params string[] toChannels); + System.Threading.Tasks.ValueTask TimeAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask TtlAsync(string key, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask TypeAsync(string key, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask UnSubscribeAsync(string[] toChannels, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask UnSubscribeAsync(params string[] toChannels); + System.Threading.Tasks.ValueTask UnWatchAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask WatchAsync(string[] keys, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask WatchAsync(params string[] keys); + System.Threading.Tasks.ValueTask ZAddAsync(string setId, double score, System.Byte[] value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask ZAddAsync(string setId, System.Int64 score, System.Byte[] value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask ZCardAsync(string setId, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask ZCountAsync(string setId, double min, double max, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask ZIncrByAsync(string setId, double incrBy, System.Byte[] value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask ZIncrByAsync(string setId, System.Int64 incrBy, System.Byte[] value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask ZInterStoreAsync(string intoSetId, string[] setIds, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask ZInterStoreAsync(string intoSetId, params string[] setIds); + System.Threading.Tasks.ValueTask ZLexCountAsync(string setId, string min, string max, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask ZRangeAsync(string setId, int min, int max, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask ZRangeByLexAsync(string setId, string min, string max, int? skip = default(int?), int? take = default(int?), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask ZRangeByScoreAsync(string setId, double min, double max, int? skip, int? take, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask ZRangeByScoreAsync(string setId, System.Int64 min, System.Int64 max, int? skip, int? take, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask ZRangeByScoreWithScoresAsync(string setId, double min, double max, int? skip, int? take, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask ZRangeByScoreWithScoresAsync(string setId, System.Int64 min, System.Int64 max, int? skip, int? take, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask ZRangeWithScoresAsync(string setId, int min, int max, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask ZRankAsync(string setId, System.Byte[] value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask ZRemAsync(string setId, System.Byte[][] values, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask ZRemAsync(string setId, System.Byte[] value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask ZRemRangeByLexAsync(string setId, string min, string max, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask ZRemRangeByRankAsync(string setId, int min, int max, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask ZRemRangeByScoreAsync(string setId, double fromScore, double toScore, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask ZRemRangeByScoreAsync(string setId, System.Int64 fromScore, System.Int64 toScore, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask ZRevRangeAsync(string setId, int min, int max, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask ZRevRangeByScoreAsync(string setId, double min, double max, int? skip, int? take, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask ZRevRangeByScoreAsync(string setId, System.Int64 min, System.Int64 max, int? skip, int? take, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask ZRevRangeByScoreWithScoresAsync(string setId, double min, double max, int? skip, int? take, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask ZRevRangeByScoreWithScoresAsync(string setId, System.Int64 min, System.Int64 max, int? skip, int? take, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask ZRevRangeWithScoresAsync(string setId, int min, int max, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask ZRevRankAsync(string setId, System.Byte[] value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask ZScanAsync(string setId, System.UInt64 cursor, int count = default(int), string match = default(string), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask ZScoreAsync(string setId, System.Byte[] value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask ZUnionStoreAsync(string intoSetId, string[] setIds, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask ZUnionStoreAsync(string intoSetId, params string[] setIds); + } + + // Generated from `ServiceStack.Redis.IRedisPubSubServer` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IRedisPubSubServer : System.IDisposable + { + string[] Channels { get; } + ServiceStack.Redis.IRedisClientsManager ClientsManager { get; } + System.DateTime CurrentServerTime { get; } + string GetStatsDescription(); + string GetStatus(); + System.Action OnDispose { get; set; } + System.Action OnError { get; set; } + System.Action OnFailover { get; set; } + System.Action OnInit { get; set; } + System.Action OnMessage { get; set; } + System.Action OnStart { get; set; } + System.Action OnStop { get; set; } + System.Action OnUnSubscribe { get; set; } + void Restart(); + ServiceStack.Redis.IRedisPubSubServer Start(); + void Stop(); + System.TimeSpan? WaitBeforeNextRestart { get; set; } + } + + // Generated from `ServiceStack.Redis.IRedisSet` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IRedisSet : System.Collections.IEnumerable, System.Collections.Generic.IEnumerable, System.Collections.Generic.ICollection, ServiceStack.Model.IHasStringId, ServiceStack.Model.IHasId + { + System.Collections.Generic.HashSet Diff(ServiceStack.Redis.IRedisSet[] withSets); + System.Collections.Generic.HashSet GetAll(); + string GetRandomEntry(); + System.Collections.Generic.List GetRangeFromSortedSet(int startingFrom, int endingAt); + System.Collections.Generic.HashSet Intersect(params ServiceStack.Redis.IRedisSet[] withSets); + void Move(string value, ServiceStack.Redis.IRedisSet toSet); + string Pop(); + void StoreDiff(ServiceStack.Redis.IRedisSet fromSet, params ServiceStack.Redis.IRedisSet[] withSets); + void StoreIntersect(params ServiceStack.Redis.IRedisSet[] withSets); + void StoreUnion(params ServiceStack.Redis.IRedisSet[] withSets); + System.Collections.Generic.HashSet Union(params ServiceStack.Redis.IRedisSet[] withSets); + } + + // Generated from `ServiceStack.Redis.IRedisSetAsync` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IRedisSetAsync : System.Collections.Generic.IAsyncEnumerable, ServiceStack.Model.IHasStringId, ServiceStack.Model.IHasId + { + System.Threading.Tasks.ValueTask AddAsync(string item, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask ClearAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask ContainsAsync(string item, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask CountAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> DiffAsync(ServiceStack.Redis.IRedisSetAsync[] withSets, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetAllAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask GetRandomEntryAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetRangeFromSortedSetAsync(int startingFrom, int endingAt, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> IntersectAsync(params ServiceStack.Redis.IRedisSetAsync[] withSets); + System.Threading.Tasks.ValueTask> IntersectAsync(ServiceStack.Redis.IRedisSetAsync[] withSets, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask MoveAsync(string value, ServiceStack.Redis.IRedisSetAsync toSet, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask PopAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask RemoveAsync(string item, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask StoreDiffAsync(ServiceStack.Redis.IRedisSetAsync fromSet, params ServiceStack.Redis.IRedisSetAsync[] withSets); + System.Threading.Tasks.ValueTask StoreDiffAsync(ServiceStack.Redis.IRedisSetAsync fromSet, ServiceStack.Redis.IRedisSetAsync[] withSets, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask StoreIntersectAsync(params ServiceStack.Redis.IRedisSetAsync[] withSets); + System.Threading.Tasks.ValueTask StoreIntersectAsync(ServiceStack.Redis.IRedisSetAsync[] withSets, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask StoreUnionAsync(params ServiceStack.Redis.IRedisSetAsync[] withSets); + System.Threading.Tasks.ValueTask StoreUnionAsync(ServiceStack.Redis.IRedisSetAsync[] withSets, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> UnionAsync(params ServiceStack.Redis.IRedisSetAsync[] withSets); + System.Threading.Tasks.ValueTask> UnionAsync(ServiceStack.Redis.IRedisSetAsync[] withSets, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + } + + // Generated from `ServiceStack.Redis.IRedisSortedSet` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IRedisSortedSet : System.Collections.IEnumerable, System.Collections.Generic.IEnumerable, System.Collections.Generic.ICollection, ServiceStack.Model.IHasStringId, ServiceStack.Model.IHasId + { + System.Collections.Generic.List GetAll(); + System.Int64 GetItemIndex(string value); + double GetItemScore(string value); + System.Collections.Generic.List GetRange(int startingRank, int endingRank); + System.Collections.Generic.List GetRangeByScore(string fromStringScore, string toStringScore, int? skip, int? take); + System.Collections.Generic.List GetRangeByScore(string fromStringScore, string toStringScore); + System.Collections.Generic.List GetRangeByScore(double fromScore, double toScore, int? skip, int? take); + System.Collections.Generic.List GetRangeByScore(double fromScore, double toScore); + void IncrementItemScore(string value, double incrementByScore); + string PopItemWithHighestScore(); + string PopItemWithLowestScore(); + void RemoveRange(int fromRank, int toRank); + void RemoveRangeByScore(double fromScore, double toScore); + void StoreFromIntersect(params ServiceStack.Redis.IRedisSortedSet[] ofSets); + void StoreFromUnion(params ServiceStack.Redis.IRedisSortedSet[] ofSets); + } + + // Generated from `ServiceStack.Redis.IRedisSortedSetAsync` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IRedisSortedSetAsync : System.Collections.Generic.IAsyncEnumerable, ServiceStack.Model.IHasStringId, ServiceStack.Model.IHasId + { + System.Threading.Tasks.ValueTask AddAsync(string item, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask ClearAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask ContainsAsync(string item, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask CountAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetAllAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask GetItemIndexAsync(string value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask GetItemScoreAsync(string value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetRangeAsync(int startingRank, int endingRank, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetRangeByScoreAsync(string fromStringScore, string toStringScore, int? skip, int? take, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetRangeByScoreAsync(string fromStringScore, string toStringScore, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetRangeByScoreAsync(double fromScore, double toScore, int? skip, int? take, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetRangeByScoreAsync(double fromScore, double toScore, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask IncrementItemScoreAsync(string value, double incrementByScore, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask PopItemWithHighestScoreAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask PopItemWithLowestScoreAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask RemoveAsync(string item, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask RemoveRangeAsync(int fromRank, int toRank, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask RemoveRangeByScoreAsync(double fromScore, double toScore, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask StoreFromIntersectAsync(params ServiceStack.Redis.IRedisSortedSetAsync[] ofSets); + System.Threading.Tasks.ValueTask StoreFromIntersectAsync(ServiceStack.Redis.IRedisSortedSetAsync[] ofSets, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask StoreFromUnionAsync(params ServiceStack.Redis.IRedisSortedSetAsync[] ofSets); + System.Threading.Tasks.ValueTask StoreFromUnionAsync(ServiceStack.Redis.IRedisSortedSetAsync[] ofSets, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + } + + // Generated from `ServiceStack.Redis.IRedisSubscription` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IRedisSubscription : System.IDisposable + { + System.Action OnMessage { get; set; } + System.Action OnMessageBytes { get; set; } + System.Action OnSubscribe { get; set; } + System.Action OnUnSubscribe { get; set; } + void SubscribeToChannels(params string[] channels); + void SubscribeToChannelsMatching(params string[] patterns); + System.Int64 SubscriptionCount { get; } + void UnSubscribeFromAllChannels(); + void UnSubscribeFromChannels(params string[] channels); + void UnSubscribeFromChannelsMatching(params string[] patterns); + } + + // Generated from `ServiceStack.Redis.IRedisSubscriptionAsync` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IRedisSubscriptionAsync : System.IAsyncDisposable + { + event System.Func OnMessageAsync; + event System.Func OnMessageBytesAsync; + event System.Func OnSubscribeAsync; + event System.Func OnUnSubscribeAsync; + System.Threading.Tasks.ValueTask SubscribeToChannelsAsync(string[] channels, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask SubscribeToChannelsAsync(params string[] channels); + System.Threading.Tasks.ValueTask SubscribeToChannelsMatchingAsync(string[] patterns, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask SubscribeToChannelsMatchingAsync(params string[] patterns); + System.Int64 SubscriptionCount { get; } + System.Threading.Tasks.ValueTask UnSubscribeFromAllChannelsAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask UnSubscribeFromChannelsAsync(string[] channels, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask UnSubscribeFromChannelsAsync(params string[] channels); + System.Threading.Tasks.ValueTask UnSubscribeFromChannelsMatchingAsync(string[] patterns, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask UnSubscribeFromChannelsMatchingAsync(params string[] patterns); + } + + // Generated from `ServiceStack.Redis.IRedisTransaction` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IRedisTransaction : System.IDisposable, ServiceStack.Redis.Pipeline.IRedisQueueableOperation, ServiceStack.Redis.Pipeline.IRedisQueueCompletableOperation, ServiceStack.Redis.Pipeline.IRedisPipelineShared, ServiceStack.Redis.IRedisTransactionBase + { + bool Commit(); + void Rollback(); + } + + // Generated from `ServiceStack.Redis.IRedisTransactionAsync` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IRedisTransactionAsync : System.IAsyncDisposable, ServiceStack.Redis.Pipeline.IRedisQueueableOperationAsync, ServiceStack.Redis.Pipeline.IRedisQueueCompletableOperationAsync, ServiceStack.Redis.Pipeline.IRedisPipelineSharedAsync, ServiceStack.Redis.IRedisTransactionBaseAsync + { + System.Threading.Tasks.ValueTask CommitAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask RollbackAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + } + + // Generated from `ServiceStack.Redis.IRedisTransactionBase` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IRedisTransactionBase : System.IDisposable, ServiceStack.Redis.Pipeline.IRedisQueueCompletableOperation, ServiceStack.Redis.Pipeline.IRedisPipelineShared + { + } + + // Generated from `ServiceStack.Redis.IRedisTransactionBaseAsync` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IRedisTransactionBaseAsync : System.IAsyncDisposable, ServiceStack.Redis.Pipeline.IRedisQueueCompletableOperationAsync, ServiceStack.Redis.Pipeline.IRedisPipelineSharedAsync + { + } + + // Generated from `ServiceStack.Redis.ItemRef` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ItemRef + { + public string Id { get => throw null; set => throw null; } + public string Item { get => throw null; set => throw null; } + public ItemRef() => throw null; + } + + // Generated from `ServiceStack.Redis.RedisClientType` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public enum RedisClientType + { + Normal, + PubSub, + Slave, + } + + // Generated from `ServiceStack.Redis.RedisData` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class RedisData + { + public System.Collections.Generic.List Children { get => throw null; set => throw null; } + public System.Byte[] Data { get => throw null; set => throw null; } + public RedisData() => throw null; + } + + // Generated from `ServiceStack.Redis.RedisGeo` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class RedisGeo + { + public double Latitude { get => throw null; set => throw null; } + public double Longitude { get => throw null; set => throw null; } + public string Member { get => throw null; set => throw null; } + public RedisGeo(double longitude, double latitude, string member) => throw null; + public RedisGeo() => throw null; + } + + // Generated from `ServiceStack.Redis.RedisGeoResult` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class RedisGeoResult + { + public double Distance { get => throw null; set => throw null; } + public System.Int64 Hash { get => throw null; set => throw null; } + public double Latitude { get => throw null; set => throw null; } + public double Longitude { get => throw null; set => throw null; } + public string Member { get => throw null; set => throw null; } + public RedisGeoResult() => throw null; + public string Unit { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.Redis.RedisGeoUnit` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class RedisGeoUnit + { + public const string Feet = default; + public const string Kilometers = default; + public const string Meters = default; + public const string Miles = default; + } + + // Generated from `ServiceStack.Redis.RedisKeyType` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public enum RedisKeyType + { + Hash, + List, + None, + Set, + SortedSet, + String, + } + + // Generated from `ServiceStack.Redis.RedisServerRole` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public enum RedisServerRole + { + Master, + Sentinel, + Slave, + Unknown, + } + + // Generated from `ServiceStack.Redis.RedisText` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class RedisText + { + public System.Collections.Generic.List Children { get => throw null; set => throw null; } + public RedisText() => throw null; + public string Text { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.Redis.ScanResult` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ScanResult + { + public System.UInt64 Cursor { get => throw null; set => throw null; } + public System.Collections.Generic.List Results { get => throw null; set => throw null; } + public ScanResult() => throw null; + } + + // Generated from `ServiceStack.Redis.SlowlogItem` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class SlowlogItem + { + public string[] Arguments { get => throw null; set => throw null; } + public int Duration { get => throw null; set => throw null; } + public int Id { get => throw null; set => throw null; } + public SlowlogItem(int id, System.DateTime timeStamp, int duration, string[] arguments) => throw null; + public System.DateTime Timestamp { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.Redis.SortOptions` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class SortOptions + { + public string GetPattern { get => throw null; set => throw null; } + public int? Skip { get => throw null; set => throw null; } + public bool SortAlpha { get => throw null; set => throw null; } + public bool SortDesc { get => throw null; set => throw null; } + public SortOptions() => throw null; + public string SortPattern { get => throw null; set => throw null; } + public string StoreAtKey { get => throw null; set => throw null; } + public int? Take { get => throw null; set => throw null; } + } + + namespace Generic + { + // Generated from `ServiceStack.Redis.Generic.IRedisHash<,>` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IRedisHash : System.Collections.IEnumerable, System.Collections.Generic.IEnumerable>, System.Collections.Generic.IDictionary, System.Collections.Generic.ICollection>, ServiceStack.Model.IHasStringId, ServiceStack.Model.IHasId + { + System.Collections.Generic.Dictionary GetAll(); + } + + // Generated from `ServiceStack.Redis.Generic.IRedisHashAsync<,>` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IRedisHashAsync : System.Collections.Generic.IAsyncEnumerable>, ServiceStack.Model.IHasStringId, ServiceStack.Model.IHasId + { + System.Threading.Tasks.ValueTask AddAsync(TKey key, TValue value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask AddAsync(System.Collections.Generic.KeyValuePair item, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask ClearAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask ContainsKeyAsync(TKey key, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask CountAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetAllAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask RemoveAsync(TKey key, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + } + + // Generated from `ServiceStack.Redis.Generic.IRedisList<>` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IRedisList : System.Collections.IEnumerable, System.Collections.Generic.IList, System.Collections.Generic.IEnumerable, System.Collections.Generic.ICollection, ServiceStack.Model.IHasStringId, ServiceStack.Model.IHasId + { + void AddRange(System.Collections.Generic.IEnumerable values); + void Append(T value); + T BlockingDequeue(System.TimeSpan? timeOut); + T BlockingPop(System.TimeSpan? timeOut); + T BlockingRemoveStart(System.TimeSpan? timeOut); + T Dequeue(); + void Enqueue(T value); + System.Collections.Generic.List GetAll(); + System.Collections.Generic.List GetRange(int startingFrom, int endingAt); + System.Collections.Generic.List GetRangeFromSortedList(int startingFrom, int endingAt); + T Pop(); + T PopAndPush(ServiceStack.Redis.Generic.IRedisList toList); + void Prepend(T value); + void Push(T value); + void RemoveAll(); + T RemoveEnd(); + T RemoveStart(); + System.Int64 RemoveValue(T value, int noOfMatches); + System.Int64 RemoveValue(T value); + void Trim(int keepStartingFrom, int keepEndingAt); + } + + // Generated from `ServiceStack.Redis.Generic.IRedisListAsync<>` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IRedisListAsync : System.Collections.Generic.IAsyncEnumerable, ServiceStack.Model.IHasStringId, ServiceStack.Model.IHasId + { + System.Threading.Tasks.ValueTask AddAsync(T item, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask AddRangeAsync(System.Collections.Generic.IEnumerable values, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask AppendAsync(T value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask BlockingDequeueAsync(System.TimeSpan? timeOut, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask BlockingPopAsync(System.TimeSpan? timeOut, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask BlockingRemoveStartAsync(System.TimeSpan? timeOut, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask ClearAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask ContainsAsync(T item, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask CountAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask DequeueAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask ElementAtAsync(int index, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask EnqueueAsync(T value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetAllAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetRangeAsync(int startingFrom, int endingAt, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetRangeFromSortedListAsync(int startingFrom, int endingAt, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask IndexOfAsync(T item, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask PopAndPushAsync(ServiceStack.Redis.Generic.IRedisListAsync toList, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask PopAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask PrependAsync(T value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask PushAsync(T value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask RemoveAllAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask RemoveAsync(T item, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask RemoveAtAsync(int index, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask RemoveEndAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask RemoveStartAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask RemoveValueAsync(T value, int noOfMatches, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask RemoveValueAsync(T value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask SetValueAsync(int index, T value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask TrimAsync(int keepStartingFrom, int keepEndingAt, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + } + + // Generated from `ServiceStack.Redis.Generic.IRedisSet<>` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IRedisSet : System.Collections.IEnumerable, System.Collections.Generic.IEnumerable, System.Collections.Generic.ICollection, ServiceStack.Model.IHasStringId, ServiceStack.Model.IHasId + { + System.Collections.Generic.HashSet GetAll(); + void GetDifferences(params ServiceStack.Redis.Generic.IRedisSet[] withSets); + T GetRandomItem(); + void MoveTo(T item, ServiceStack.Redis.Generic.IRedisSet toSet); + T PopRandomItem(); + void PopulateWithDifferencesOf(ServiceStack.Redis.Generic.IRedisSet fromSet, params ServiceStack.Redis.Generic.IRedisSet[] withSets); + void PopulateWithIntersectOf(params ServiceStack.Redis.Generic.IRedisSet[] sets); + void PopulateWithUnionOf(params ServiceStack.Redis.Generic.IRedisSet[] sets); + System.Collections.Generic.List Sort(int startingFrom, int endingAt); + } + + // Generated from `ServiceStack.Redis.Generic.IRedisSetAsync<>` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IRedisSetAsync : System.Collections.Generic.IAsyncEnumerable, ServiceStack.Model.IHasStringId, ServiceStack.Model.IHasId + { + System.Threading.Tasks.ValueTask AddAsync(T item, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask ClearAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask ContainsAsync(T item, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask CountAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetAllAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask GetDifferencesAsync(params ServiceStack.Redis.Generic.IRedisSetAsync[] withSets); + System.Threading.Tasks.ValueTask GetDifferencesAsync(ServiceStack.Redis.Generic.IRedisSetAsync[] withSets, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask GetRandomItemAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask MoveToAsync(T item, ServiceStack.Redis.Generic.IRedisSetAsync toSet, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask PopRandomItemAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask PopulateWithDifferencesOfAsync(ServiceStack.Redis.Generic.IRedisSetAsync fromSet, params ServiceStack.Redis.Generic.IRedisSetAsync[] withSets); + System.Threading.Tasks.ValueTask PopulateWithDifferencesOfAsync(ServiceStack.Redis.Generic.IRedisSetAsync fromSet, ServiceStack.Redis.Generic.IRedisSetAsync[] withSets, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask PopulateWithIntersectOfAsync(params ServiceStack.Redis.Generic.IRedisSetAsync[] sets); + System.Threading.Tasks.ValueTask PopulateWithIntersectOfAsync(ServiceStack.Redis.Generic.IRedisSetAsync[] sets, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask PopulateWithUnionOfAsync(params ServiceStack.Redis.Generic.IRedisSetAsync[] sets); + System.Threading.Tasks.ValueTask PopulateWithUnionOfAsync(ServiceStack.Redis.Generic.IRedisSetAsync[] sets, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask RemoveAsync(T item, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> SortAsync(int startingFrom, int endingAt, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + } + + // Generated from `ServiceStack.Redis.Generic.IRedisSortedSet<>` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IRedisSortedSet : System.Collections.IEnumerable, System.Collections.Generic.IEnumerable, System.Collections.Generic.ICollection, ServiceStack.Model.IHasStringId, ServiceStack.Model.IHasId + { + void Add(T item, double score); + System.Collections.Generic.List GetAll(); + System.Collections.Generic.List GetAllDescending(); + double GetItemScore(T item); + System.Collections.Generic.List GetRange(int fromRank, int toRank); + System.Collections.Generic.List GetRangeByHighestScore(double fromScore, double toScore, int? skip, int? take); + System.Collections.Generic.List GetRangeByHighestScore(double fromScore, double toScore); + System.Collections.Generic.List GetRangeByLowestScore(double fromScore, double toScore, int? skip, int? take); + System.Collections.Generic.List GetRangeByLowestScore(double fromScore, double toScore); + double IncrementItem(T item, double incrementBy); + int IndexOf(T item); + System.Int64 IndexOfDescending(T item); + T PopItemWithHighestScore(); + T PopItemWithLowestScore(); + System.Int64 PopulateWithIntersectOf(params ServiceStack.Redis.Generic.IRedisSortedSet[] setIds); + System.Int64 PopulateWithIntersectOf(ServiceStack.Redis.Generic.IRedisSortedSet[] setIds, string[] args); + System.Int64 PopulateWithUnionOf(params ServiceStack.Redis.Generic.IRedisSortedSet[] setIds); + System.Int64 PopulateWithUnionOf(ServiceStack.Redis.Generic.IRedisSortedSet[] setIds, string[] args); + System.Int64 RemoveRange(int minRank, int maxRank); + System.Int64 RemoveRangeByScore(double fromScore, double toScore); + } + + // Generated from `ServiceStack.Redis.Generic.IRedisSortedSetAsync<>` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IRedisSortedSetAsync : System.Collections.Generic.IAsyncEnumerable, ServiceStack.Model.IHasStringId, ServiceStack.Model.IHasId + { + System.Threading.Tasks.ValueTask AddAsync(T item, double score, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask AddAsync(T item, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask ClearAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask ContainsAsync(T item, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask CountAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetAllAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetAllDescendingAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask GetItemScoreAsync(T item, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetRangeAsync(int fromRank, int toRank, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetRangeByHighestScoreAsync(double fromScore, double toScore, int? skip, int? take, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetRangeByHighestScoreAsync(double fromScore, double toScore, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetRangeByLowestScoreAsync(double fromScore, double toScore, int? skip, int? take, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetRangeByLowestScoreAsync(double fromScore, double toScore, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask IncrementItemAsync(T item, double incrementBy, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask IndexOfAsync(T item, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask IndexOfDescendingAsync(T item, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask PopItemWithHighestScoreAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask PopItemWithLowestScoreAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask PopulateWithIntersectOfAsync(params ServiceStack.Redis.Generic.IRedisSortedSetAsync[] setIds); + System.Threading.Tasks.ValueTask PopulateWithIntersectOfAsync(ServiceStack.Redis.Generic.IRedisSortedSetAsync[] setIds, string[] args, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask PopulateWithIntersectOfAsync(ServiceStack.Redis.Generic.IRedisSortedSetAsync[] setIds, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask PopulateWithUnionOfAsync(params ServiceStack.Redis.Generic.IRedisSortedSetAsync[] setIds); + System.Threading.Tasks.ValueTask PopulateWithUnionOfAsync(ServiceStack.Redis.Generic.IRedisSortedSetAsync[] setIds, string[] args, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask PopulateWithUnionOfAsync(ServiceStack.Redis.Generic.IRedisSortedSetAsync[] setIds, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask RemoveAsync(T item, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask RemoveRangeAsync(int minRank, int maxRank, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask RemoveRangeByScoreAsync(double fromScore, double toScore, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + } + + // Generated from `ServiceStack.Redis.Generic.IRedisTypedClient<>` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IRedisTypedClient : ServiceStack.Data.IEntityStore + { + System.IDisposable AcquireLock(System.TimeSpan timeOut); + System.IDisposable AcquireLock(); + void AddItemToList(ServiceStack.Redis.Generic.IRedisList fromList, T value); + void AddItemToSet(ServiceStack.Redis.Generic.IRedisSet toSet, T item); + void AddItemToSortedSet(ServiceStack.Redis.Generic.IRedisSortedSet toSet, T value, double score); + void AddItemToSortedSet(ServiceStack.Redis.Generic.IRedisSortedSet toSet, T value); + void AddToRecentsList(T value); + T BlockingDequeueItemFromList(ServiceStack.Redis.Generic.IRedisList fromList, System.TimeSpan? timeOut); + T BlockingPopAndPushItemBetweenLists(ServiceStack.Redis.Generic.IRedisList fromList, ServiceStack.Redis.Generic.IRedisList toList, System.TimeSpan? timeOut); + T BlockingPopItemFromList(ServiceStack.Redis.Generic.IRedisList fromList, System.TimeSpan? timeOut); + T BlockingRemoveStartFromList(ServiceStack.Redis.Generic.IRedisList fromList, System.TimeSpan? timeOut); + bool ContainsKey(string key); + ServiceStack.Redis.Generic.IRedisTypedPipeline CreatePipeline(); + ServiceStack.Redis.Generic.IRedisTypedTransaction CreateTransaction(); + System.Int64 Db { get; set; } + System.Int64 DecrementValue(string key); + System.Int64 DecrementValueBy(string key, int count); + void DeleteRelatedEntities(object parentId); + void DeleteRelatedEntity(object parentId, object childId); + T DequeueItemFromList(ServiceStack.Redis.Generic.IRedisList fromList); + void EnqueueItemOnList(ServiceStack.Redis.Generic.IRedisList fromList, T item); + bool ExpireAt(object id, System.DateTime dateTime); + bool ExpireEntryAt(string key, System.DateTime dateTime); + bool ExpireEntryIn(string key, System.TimeSpan expiresAt); + bool ExpireIn(object id, System.TimeSpan expiresAt); + void FlushAll(); + void FlushDb(); + System.Collections.Generic.Dictionary GetAllEntriesFromHash(ServiceStack.Redis.Generic.IRedisHash hash); + System.Collections.Generic.List GetAllItemsFromList(ServiceStack.Redis.Generic.IRedisList fromList); + System.Collections.Generic.HashSet GetAllItemsFromSet(ServiceStack.Redis.Generic.IRedisSet fromSet); + System.Collections.Generic.List GetAllItemsFromSortedSet(ServiceStack.Redis.Generic.IRedisSortedSet set); + System.Collections.Generic.List GetAllItemsFromSortedSetDesc(ServiceStack.Redis.Generic.IRedisSortedSet set); + System.Collections.Generic.List GetAllKeys(); + System.Collections.Generic.IDictionary GetAllWithScoresFromSortedSet(ServiceStack.Redis.Generic.IRedisSortedSet set); + T GetAndSetValue(string key, T value); + System.Collections.Generic.HashSet GetDifferencesFromSet(ServiceStack.Redis.Generic.IRedisSet fromSet, params ServiceStack.Redis.Generic.IRedisSet[] withSets); + System.Collections.Generic.List GetEarliestFromRecentsList(int skip, int take); + ServiceStack.Redis.RedisKeyType GetEntryType(string key); + T GetFromHash(object id); + ServiceStack.Redis.Generic.IRedisHash GetHash(string hashId); + System.Int64 GetHashCount(ServiceStack.Redis.Generic.IRedisHash hash); + System.Collections.Generic.List GetHashKeys(ServiceStack.Redis.Generic.IRedisHash hash); + System.Collections.Generic.List GetHashValues(ServiceStack.Redis.Generic.IRedisHash hash); + System.Collections.Generic.HashSet GetIntersectFromSets(params ServiceStack.Redis.Generic.IRedisSet[] sets); + T GetItemFromList(ServiceStack.Redis.Generic.IRedisList fromList, int listIndex); + System.Int64 GetItemIndexInSortedSet(ServiceStack.Redis.Generic.IRedisSortedSet set, T value); + System.Int64 GetItemIndexInSortedSetDesc(ServiceStack.Redis.Generic.IRedisSortedSet set, T value); + double GetItemScoreInSortedSet(ServiceStack.Redis.Generic.IRedisSortedSet set, T value); + System.Collections.Generic.List GetLatestFromRecentsList(int skip, int take); + System.Int64 GetListCount(ServiceStack.Redis.Generic.IRedisList fromList); + System.Int64 GetNextSequence(int incrBy); + System.Int64 GetNextSequence(); + T GetRandomItemFromSet(ServiceStack.Redis.Generic.IRedisSet fromSet); + string GetRandomKey(); + System.Collections.Generic.List GetRangeFromList(ServiceStack.Redis.Generic.IRedisList fromList, int startingFrom, int endingAt); + System.Collections.Generic.List GetRangeFromSortedSet(ServiceStack.Redis.Generic.IRedisSortedSet set, int fromRank, int toRank); + System.Collections.Generic.List GetRangeFromSortedSetByHighestScore(ServiceStack.Redis.Generic.IRedisSortedSet set, string fromStringScore, string toStringScore, int? skip, int? take); + System.Collections.Generic.List GetRangeFromSortedSetByHighestScore(ServiceStack.Redis.Generic.IRedisSortedSet set, string fromStringScore, string toStringScore); + System.Collections.Generic.List GetRangeFromSortedSetByHighestScore(ServiceStack.Redis.Generic.IRedisSortedSet set, double fromScore, double toScore, int? skip, int? take); + System.Collections.Generic.List GetRangeFromSortedSetByHighestScore(ServiceStack.Redis.Generic.IRedisSortedSet set, double fromScore, double toScore); + System.Collections.Generic.List GetRangeFromSortedSetByLowestScore(ServiceStack.Redis.Generic.IRedisSortedSet set, string fromStringScore, string toStringScore, int? skip, int? take); + System.Collections.Generic.List GetRangeFromSortedSetByLowestScore(ServiceStack.Redis.Generic.IRedisSortedSet set, string fromStringScore, string toStringScore); + System.Collections.Generic.List GetRangeFromSortedSetByLowestScore(ServiceStack.Redis.Generic.IRedisSortedSet set, double fromScore, double toScore, int? skip, int? take); + System.Collections.Generic.List GetRangeFromSortedSetByLowestScore(ServiceStack.Redis.Generic.IRedisSortedSet set, double fromScore, double toScore); + System.Collections.Generic.List GetRangeFromSortedSetDesc(ServiceStack.Redis.Generic.IRedisSortedSet set, int fromRank, int toRank); + System.Collections.Generic.IDictionary GetRangeWithScoresFromSortedSet(ServiceStack.Redis.Generic.IRedisSortedSet set, int fromRank, int toRank); + System.Collections.Generic.IDictionary GetRangeWithScoresFromSortedSetByHighestScore(ServiceStack.Redis.Generic.IRedisSortedSet set, string fromStringScore, string toStringScore, int? skip, int? take); + System.Collections.Generic.IDictionary GetRangeWithScoresFromSortedSetByHighestScore(ServiceStack.Redis.Generic.IRedisSortedSet set, string fromStringScore, string toStringScore); + System.Collections.Generic.IDictionary GetRangeWithScoresFromSortedSetByHighestScore(ServiceStack.Redis.Generic.IRedisSortedSet set, double fromScore, double toScore, int? skip, int? take); + System.Collections.Generic.IDictionary GetRangeWithScoresFromSortedSetByHighestScore(ServiceStack.Redis.Generic.IRedisSortedSet set, double fromScore, double toScore); + System.Collections.Generic.IDictionary GetRangeWithScoresFromSortedSetByLowestScore(ServiceStack.Redis.Generic.IRedisSortedSet set, string fromStringScore, string toStringScore, int? skip, int? take); + System.Collections.Generic.IDictionary GetRangeWithScoresFromSortedSetByLowestScore(ServiceStack.Redis.Generic.IRedisSortedSet set, string fromStringScore, string toStringScore); + System.Collections.Generic.IDictionary GetRangeWithScoresFromSortedSetByLowestScore(ServiceStack.Redis.Generic.IRedisSortedSet set, double fromScore, double toScore, int? skip, int? take); + System.Collections.Generic.IDictionary GetRangeWithScoresFromSortedSetByLowestScore(ServiceStack.Redis.Generic.IRedisSortedSet set, double fromScore, double toScore); + System.Collections.Generic.IDictionary GetRangeWithScoresFromSortedSetDesc(ServiceStack.Redis.Generic.IRedisSortedSet set, int fromRank, int toRank); + System.Collections.Generic.List GetRelatedEntities(object parentId); + System.Int64 GetRelatedEntitiesCount(object parentId); + System.Int64 GetSetCount(ServiceStack.Redis.Generic.IRedisSet set); + System.Collections.Generic.List GetSortedEntryValues(ServiceStack.Redis.Generic.IRedisSet fromSet, int startingFrom, int endingAt); + System.Int64 GetSortedSetCount(ServiceStack.Redis.Generic.IRedisSortedSet set); + System.TimeSpan GetTimeToLive(string key); + System.Collections.Generic.HashSet GetUnionFromSets(params ServiceStack.Redis.Generic.IRedisSet[] sets); + T GetValue(string key); + T GetValueFromHash(ServiceStack.Redis.Generic.IRedisHash hash, TKey key); + System.Collections.Generic.List GetValues(System.Collections.Generic.List keys); + bool HashContainsEntry(ServiceStack.Redis.Generic.IRedisHash hash, TKey key); + double IncrementItemInSortedSet(ServiceStack.Redis.Generic.IRedisSortedSet set, T value, double incrementBy); + System.Int64 IncrementValue(string key); + System.Int64 IncrementValueBy(string key, int count); + void InsertAfterItemInList(ServiceStack.Redis.Generic.IRedisList toList, T pivot, T value); + void InsertBeforeItemInList(ServiceStack.Redis.Generic.IRedisList toList, T pivot, T value); + T this[string key] { get; set; } + ServiceStack.Model.IHasNamed> Lists { get; set; } + void MoveBetweenSets(ServiceStack.Redis.Generic.IRedisSet fromSet, ServiceStack.Redis.Generic.IRedisSet toSet, T item); + T PopAndPushItemBetweenLists(ServiceStack.Redis.Generic.IRedisList fromList, ServiceStack.Redis.Generic.IRedisList toList); + T PopItemFromList(ServiceStack.Redis.Generic.IRedisList fromList); + T PopItemFromSet(ServiceStack.Redis.Generic.IRedisSet fromSet); + T PopItemWithHighestScoreFromSortedSet(ServiceStack.Redis.Generic.IRedisSortedSet fromSet); + T PopItemWithLowestScoreFromSortedSet(ServiceStack.Redis.Generic.IRedisSortedSet fromSet); + void PrependItemToList(ServiceStack.Redis.Generic.IRedisList fromList, T value); + void PushItemToList(ServiceStack.Redis.Generic.IRedisList fromList, T item); + ServiceStack.Redis.IRedisClient RedisClient { get; } + void RemoveAllFromList(ServiceStack.Redis.Generic.IRedisList fromList); + T RemoveEndFromList(ServiceStack.Redis.Generic.IRedisList fromList); + bool RemoveEntry(string key); + bool RemoveEntry(params string[] args); + bool RemoveEntry(params ServiceStack.Model.IHasStringId[] entities); + bool RemoveEntryFromHash(ServiceStack.Redis.Generic.IRedisHash hash, TKey key); + System.Int64 RemoveItemFromList(ServiceStack.Redis.Generic.IRedisList fromList, T value, int noOfMatches); + System.Int64 RemoveItemFromList(ServiceStack.Redis.Generic.IRedisList fromList, T value); + void RemoveItemFromSet(ServiceStack.Redis.Generic.IRedisSet fromSet, T item); + bool RemoveItemFromSortedSet(ServiceStack.Redis.Generic.IRedisSortedSet fromSet, T value); + System.Int64 RemoveRangeFromSortedSet(ServiceStack.Redis.Generic.IRedisSortedSet set, int minRank, int maxRank); + System.Int64 RemoveRangeFromSortedSetByScore(ServiceStack.Redis.Generic.IRedisSortedSet set, double fromScore, double toScore); + T RemoveStartFromList(ServiceStack.Redis.Generic.IRedisList fromList); + void Save(); + void SaveAsync(); + T[] SearchKeys(string pattern); + string SequenceKey { get; set; } + bool SetContainsItem(ServiceStack.Redis.Generic.IRedisSet set, T item); + bool SetEntryInHash(ServiceStack.Redis.Generic.IRedisHash hash, TKey key, T value); + bool SetEntryInHashIfNotExists(ServiceStack.Redis.Generic.IRedisHash hash, TKey key, T value); + void SetItemInList(ServiceStack.Redis.Generic.IRedisList toList, int listIndex, T value); + void SetRangeInHash(ServiceStack.Redis.Generic.IRedisHash hash, System.Collections.Generic.IEnumerable> keyValuePairs); + void SetSequence(int value); + void SetValue(string key, T entity, System.TimeSpan expireIn); + void SetValue(string key, T entity); + bool SetValueIfExists(string key, T entity); + bool SetValueIfNotExists(string key, T entity); + ServiceStack.Model.IHasNamed> Sets { get; set; } + System.Collections.Generic.List SortList(ServiceStack.Redis.Generic.IRedisList fromList, int startingFrom, int endingAt); + bool SortedSetContainsItem(ServiceStack.Redis.Generic.IRedisSortedSet set, T value); + ServiceStack.Model.IHasNamed> SortedSets { get; set; } + T Store(T entity, System.TimeSpan expireIn); + void StoreAsHash(T entity); + void StoreDifferencesFromSet(ServiceStack.Redis.Generic.IRedisSet intoSet, ServiceStack.Redis.Generic.IRedisSet fromSet, params ServiceStack.Redis.Generic.IRedisSet[] withSets); + void StoreIntersectFromSets(ServiceStack.Redis.Generic.IRedisSet intoSet, params ServiceStack.Redis.Generic.IRedisSet[] sets); + System.Int64 StoreIntersectFromSortedSets(ServiceStack.Redis.Generic.IRedisSortedSet intoSetId, params ServiceStack.Redis.Generic.IRedisSortedSet[] setIds); + System.Int64 StoreIntersectFromSortedSets(ServiceStack.Redis.Generic.IRedisSortedSet intoSetId, ServiceStack.Redis.Generic.IRedisSortedSet[] setIds, string[] args); + void StoreRelatedEntities(object parentId, params TChild[] children); + void StoreRelatedEntities(object parentId, System.Collections.Generic.List children); + void StoreUnionFromSets(ServiceStack.Redis.Generic.IRedisSet intoSet, params ServiceStack.Redis.Generic.IRedisSet[] sets); + System.Int64 StoreUnionFromSortedSets(ServiceStack.Redis.Generic.IRedisSortedSet intoSetId, params ServiceStack.Redis.Generic.IRedisSortedSet[] setIds); + System.Int64 StoreUnionFromSortedSets(ServiceStack.Redis.Generic.IRedisSortedSet intoSetId, ServiceStack.Redis.Generic.IRedisSortedSet[] setIds, string[] args); + void TrimList(ServiceStack.Redis.Generic.IRedisList fromList, int keepStartingFrom, int keepEndingAt); + ServiceStack.Redis.IRedisSet TypeIdsSet { get; } + string UrnKey(T value); + } + + // Generated from `ServiceStack.Redis.Generic.IRedisTypedClientAsync<>` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IRedisTypedClientAsync : ServiceStack.Data.IEntityStoreAsync + { + System.Threading.Tasks.ValueTask AcquireLockAsync(System.TimeSpan? timeOut = default(System.TimeSpan?), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask AddItemToListAsync(ServiceStack.Redis.Generic.IRedisListAsync fromList, T value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask AddItemToSetAsync(ServiceStack.Redis.Generic.IRedisSetAsync toSet, T item, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask AddItemToSortedSetAsync(ServiceStack.Redis.Generic.IRedisSortedSetAsync toSet, T value, double score, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask AddItemToSortedSetAsync(ServiceStack.Redis.Generic.IRedisSortedSetAsync toSet, T value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask AddToRecentsListAsync(T value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask BackgroundSaveAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask BlockingDequeueItemFromListAsync(ServiceStack.Redis.Generic.IRedisListAsync fromList, System.TimeSpan? timeOut, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask BlockingPopAndPushItemBetweenListsAsync(ServiceStack.Redis.Generic.IRedisListAsync fromList, ServiceStack.Redis.Generic.IRedisListAsync toList, System.TimeSpan? timeOut, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask BlockingPopItemFromListAsync(ServiceStack.Redis.Generic.IRedisListAsync fromList, System.TimeSpan? timeOut, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask BlockingRemoveStartFromListAsync(ServiceStack.Redis.Generic.IRedisListAsync fromList, System.TimeSpan? timeOut, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask ContainsKeyAsync(string key, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + ServiceStack.Redis.Generic.IRedisTypedPipelineAsync CreatePipeline(); + System.Threading.Tasks.ValueTask> CreateTransactionAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Int64 Db { get; } + System.Threading.Tasks.ValueTask DecrementValueAsync(string key, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask DecrementValueByAsync(string key, int count, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask DeleteRelatedEntitiesAsync(object parentId, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask DeleteRelatedEntityAsync(object parentId, object childId, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask DequeueItemFromListAsync(ServiceStack.Redis.Generic.IRedisListAsync fromList, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask EnqueueItemOnListAsync(ServiceStack.Redis.Generic.IRedisListAsync fromList, T item, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask ExpireAtAsync(object id, System.DateTime dateTime, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask ExpireEntryAtAsync(string key, System.DateTime dateTime, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask ExpireEntryInAsync(string key, System.TimeSpan expiresAt, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask ExpireInAsync(object id, System.TimeSpan expiresAt, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask FlushAllAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask FlushDbAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask ForegroundSaveAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetAllEntriesFromHashAsync(ServiceStack.Redis.Generic.IRedisHashAsync hash, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetAllItemsFromListAsync(ServiceStack.Redis.Generic.IRedisListAsync fromList, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetAllItemsFromSetAsync(ServiceStack.Redis.Generic.IRedisSetAsync fromSet, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetAllItemsFromSortedSetAsync(ServiceStack.Redis.Generic.IRedisSortedSetAsync set, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetAllItemsFromSortedSetDescAsync(ServiceStack.Redis.Generic.IRedisSortedSetAsync set, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetAllKeysAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetAllWithScoresFromSortedSetAsync(ServiceStack.Redis.Generic.IRedisSortedSetAsync set, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask GetAndSetValueAsync(string key, T value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetDifferencesFromSetAsync(ServiceStack.Redis.Generic.IRedisSetAsync fromSet, params ServiceStack.Redis.Generic.IRedisSetAsync[] withSets); + System.Threading.Tasks.ValueTask> GetDifferencesFromSetAsync(ServiceStack.Redis.Generic.IRedisSetAsync fromSet, ServiceStack.Redis.Generic.IRedisSetAsync[] withSets, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetEarliestFromRecentsListAsync(int skip, int take, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask GetEntryTypeAsync(string key, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask GetFromHashAsync(object id, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + ServiceStack.Redis.Generic.IRedisHashAsync GetHash(string hashId); + System.Threading.Tasks.ValueTask GetHashCountAsync(ServiceStack.Redis.Generic.IRedisHashAsync hash, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetHashKeysAsync(ServiceStack.Redis.Generic.IRedisHashAsync hash, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetHashValuesAsync(ServiceStack.Redis.Generic.IRedisHashAsync hash, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetIntersectFromSetsAsync(params ServiceStack.Redis.Generic.IRedisSetAsync[] sets); + System.Threading.Tasks.ValueTask> GetIntersectFromSetsAsync(ServiceStack.Redis.Generic.IRedisSetAsync[] sets, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask GetItemFromListAsync(ServiceStack.Redis.Generic.IRedisListAsync fromList, int listIndex, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask GetItemIndexInSortedSetAsync(ServiceStack.Redis.Generic.IRedisSortedSetAsync set, T value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask GetItemIndexInSortedSetDescAsync(ServiceStack.Redis.Generic.IRedisSortedSetAsync set, T value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask GetItemScoreInSortedSetAsync(ServiceStack.Redis.Generic.IRedisSortedSetAsync set, T value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetLatestFromRecentsListAsync(int skip, int take, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask GetListCountAsync(ServiceStack.Redis.Generic.IRedisListAsync fromList, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask GetNextSequenceAsync(int incrBy, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask GetNextSequenceAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask GetRandomItemFromSetAsync(ServiceStack.Redis.Generic.IRedisSetAsync fromSet, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask GetRandomKeyAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetRangeFromListAsync(ServiceStack.Redis.Generic.IRedisListAsync fromList, int startingFrom, int endingAt, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetRangeFromSortedSetAsync(ServiceStack.Redis.Generic.IRedisSortedSetAsync set, int fromRank, int toRank, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetRangeFromSortedSetByHighestScoreAsync(ServiceStack.Redis.Generic.IRedisSortedSetAsync set, string fromStringScore, string toStringScore, int? skip, int? take, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetRangeFromSortedSetByHighestScoreAsync(ServiceStack.Redis.Generic.IRedisSortedSetAsync set, string fromStringScore, string toStringScore, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetRangeFromSortedSetByHighestScoreAsync(ServiceStack.Redis.Generic.IRedisSortedSetAsync set, double fromScore, double toScore, int? skip, int? take, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetRangeFromSortedSetByHighestScoreAsync(ServiceStack.Redis.Generic.IRedisSortedSetAsync set, double fromScore, double toScore, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetRangeFromSortedSetByLowestScoreAsync(ServiceStack.Redis.Generic.IRedisSortedSetAsync set, string fromStringScore, string toStringScore, int? skip, int? take, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetRangeFromSortedSetByLowestScoreAsync(ServiceStack.Redis.Generic.IRedisSortedSetAsync set, string fromStringScore, string toStringScore, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetRangeFromSortedSetByLowestScoreAsync(ServiceStack.Redis.Generic.IRedisSortedSetAsync set, double fromScore, double toScore, int? skip, int? take, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetRangeFromSortedSetByLowestScoreAsync(ServiceStack.Redis.Generic.IRedisSortedSetAsync set, double fromScore, double toScore, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetRangeFromSortedSetDescAsync(ServiceStack.Redis.Generic.IRedisSortedSetAsync set, int fromRank, int toRank, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetRangeWithScoresFromSortedSetAsync(ServiceStack.Redis.Generic.IRedisSortedSetAsync set, int fromRank, int toRank, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetRangeWithScoresFromSortedSetByHighestScoreAsync(ServiceStack.Redis.Generic.IRedisSortedSetAsync set, string fromStringScore, string toStringScore, int? skip, int? take, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetRangeWithScoresFromSortedSetByHighestScoreAsync(ServiceStack.Redis.Generic.IRedisSortedSetAsync set, string fromStringScore, string toStringScore, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetRangeWithScoresFromSortedSetByHighestScoreAsync(ServiceStack.Redis.Generic.IRedisSortedSetAsync set, double fromScore, double toScore, int? skip, int? take, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetRangeWithScoresFromSortedSetByHighestScoreAsync(ServiceStack.Redis.Generic.IRedisSortedSetAsync set, double fromScore, double toScore, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetRangeWithScoresFromSortedSetByLowestScoreAsync(ServiceStack.Redis.Generic.IRedisSortedSetAsync set, string fromStringScore, string toStringScore, int? skip, int? take, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetRangeWithScoresFromSortedSetByLowestScoreAsync(ServiceStack.Redis.Generic.IRedisSortedSetAsync set, string fromStringScore, string toStringScore, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetRangeWithScoresFromSortedSetByLowestScoreAsync(ServiceStack.Redis.Generic.IRedisSortedSetAsync set, double fromScore, double toScore, int? skip, int? take, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetRangeWithScoresFromSortedSetByLowestScoreAsync(ServiceStack.Redis.Generic.IRedisSortedSetAsync set, double fromScore, double toScore, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetRangeWithScoresFromSortedSetDescAsync(ServiceStack.Redis.Generic.IRedisSortedSetAsync set, int fromRank, int toRank, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetRelatedEntitiesAsync(object parentId, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask GetRelatedEntitiesCountAsync(object parentId, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask GetSetCountAsync(ServiceStack.Redis.Generic.IRedisSetAsync set, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetSortedEntryValuesAsync(ServiceStack.Redis.Generic.IRedisSetAsync fromSet, int startingFrom, int endingAt, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask GetSortedSetCountAsync(ServiceStack.Redis.Generic.IRedisSortedSetAsync set, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask GetTimeToLiveAsync(string key, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetUnionFromSetsAsync(params ServiceStack.Redis.Generic.IRedisSetAsync[] sets); + System.Threading.Tasks.ValueTask> GetUnionFromSetsAsync(ServiceStack.Redis.Generic.IRedisSetAsync[] sets, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask GetValueAsync(string key, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask GetValueFromHashAsync(ServiceStack.Redis.Generic.IRedisHashAsync hash, TKey key, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask> GetValuesAsync(System.Collections.Generic.List keys, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask HashContainsEntryAsync(ServiceStack.Redis.Generic.IRedisHashAsync hash, TKey key, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask IncrementItemInSortedSetAsync(ServiceStack.Redis.Generic.IRedisSortedSetAsync set, T value, double incrementBy, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask IncrementValueAsync(string key, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask IncrementValueByAsync(string key, int count, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask InsertAfterItemInListAsync(ServiceStack.Redis.Generic.IRedisListAsync toList, T pivot, T value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask InsertBeforeItemInListAsync(ServiceStack.Redis.Generic.IRedisListAsync toList, T pivot, T value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + ServiceStack.Model.IHasNamed> Lists { get; } + System.Threading.Tasks.ValueTask MoveBetweenSetsAsync(ServiceStack.Redis.Generic.IRedisSetAsync fromSet, ServiceStack.Redis.Generic.IRedisSetAsync toSet, T item, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask PopAndPushItemBetweenListsAsync(ServiceStack.Redis.Generic.IRedisListAsync fromList, ServiceStack.Redis.Generic.IRedisListAsync toList, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask PopItemFromListAsync(ServiceStack.Redis.Generic.IRedisListAsync fromList, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask PopItemFromSetAsync(ServiceStack.Redis.Generic.IRedisSetAsync fromSet, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask PopItemWithHighestScoreFromSortedSetAsync(ServiceStack.Redis.Generic.IRedisSortedSetAsync fromSet, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask PopItemWithLowestScoreFromSortedSetAsync(ServiceStack.Redis.Generic.IRedisSortedSetAsync fromSet, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask PrependItemToListAsync(ServiceStack.Redis.Generic.IRedisListAsync fromList, T value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask PushItemToListAsync(ServiceStack.Redis.Generic.IRedisListAsync fromList, T item, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + ServiceStack.Redis.IRedisClientAsync RedisClient { get; } + System.Threading.Tasks.ValueTask RemoveAllFromListAsync(ServiceStack.Redis.Generic.IRedisListAsync fromList, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask RemoveEndFromListAsync(ServiceStack.Redis.Generic.IRedisListAsync fromList, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask RemoveEntryAsync(string[] args, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask RemoveEntryAsync(string key, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask RemoveEntryAsync(params string[] args); + System.Threading.Tasks.ValueTask RemoveEntryAsync(params ServiceStack.Model.IHasStringId[] entities); + System.Threading.Tasks.ValueTask RemoveEntryAsync(ServiceStack.Model.IHasStringId[] entities, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask RemoveEntryFromHashAsync(ServiceStack.Redis.Generic.IRedisHashAsync hash, TKey key, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask RemoveItemFromListAsync(ServiceStack.Redis.Generic.IRedisListAsync fromList, T value, int noOfMatches, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask RemoveItemFromListAsync(ServiceStack.Redis.Generic.IRedisListAsync fromList, T value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask RemoveItemFromSetAsync(ServiceStack.Redis.Generic.IRedisSetAsync fromSet, T item, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask RemoveItemFromSortedSetAsync(ServiceStack.Redis.Generic.IRedisSortedSetAsync fromSet, T value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask RemoveRangeFromSortedSetAsync(ServiceStack.Redis.Generic.IRedisSortedSetAsync set, int minRank, int maxRank, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask RemoveRangeFromSortedSetByScoreAsync(ServiceStack.Redis.Generic.IRedisSortedSetAsync set, double fromScore, double toScore, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask RemoveStartFromListAsync(ServiceStack.Redis.Generic.IRedisListAsync fromList, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask SearchKeysAsync(string pattern, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask SelectAsync(System.Int64 db, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + string SequenceKey { get; set; } + System.Threading.Tasks.ValueTask SetContainsItemAsync(ServiceStack.Redis.Generic.IRedisSetAsync set, T item, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask SetEntryInHashAsync(ServiceStack.Redis.Generic.IRedisHashAsync hash, TKey key, T value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask SetEntryInHashIfNotExistsAsync(ServiceStack.Redis.Generic.IRedisHashAsync hash, TKey key, T value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask SetItemInListAsync(ServiceStack.Redis.Generic.IRedisListAsync toList, int listIndex, T value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask SetRangeInHashAsync(ServiceStack.Redis.Generic.IRedisHashAsync hash, System.Collections.Generic.IEnumerable> keyValuePairs, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask SetSequenceAsync(int value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask SetValueAsync(string key, T entity, System.TimeSpan expireIn, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask SetValueAsync(string key, T entity, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask SetValueIfExistsAsync(string key, T entity, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask SetValueIfNotExistsAsync(string key, T entity, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + ServiceStack.Model.IHasNamed> Sets { get; } + System.Threading.Tasks.ValueTask> SortListAsync(ServiceStack.Redis.Generic.IRedisListAsync fromList, int startingFrom, int endingAt, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask SortedSetContainsItemAsync(ServiceStack.Redis.Generic.IRedisSortedSetAsync set, T value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + ServiceStack.Model.IHasNamed> SortedSets { get; } + System.Threading.Tasks.ValueTask StoreAsHashAsync(T entity, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask StoreAsync(T entity, System.TimeSpan expireIn, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask StoreDifferencesFromSetAsync(ServiceStack.Redis.Generic.IRedisSetAsync intoSet, ServiceStack.Redis.Generic.IRedisSetAsync fromSet, params ServiceStack.Redis.Generic.IRedisSetAsync[] withSets); + System.Threading.Tasks.ValueTask StoreDifferencesFromSetAsync(ServiceStack.Redis.Generic.IRedisSetAsync intoSet, ServiceStack.Redis.Generic.IRedisSetAsync fromSet, ServiceStack.Redis.Generic.IRedisSetAsync[] withSets, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask StoreIntersectFromSetsAsync(ServiceStack.Redis.Generic.IRedisSetAsync intoSet, params ServiceStack.Redis.Generic.IRedisSetAsync[] sets); + System.Threading.Tasks.ValueTask StoreIntersectFromSetsAsync(ServiceStack.Redis.Generic.IRedisSetAsync intoSet, ServiceStack.Redis.Generic.IRedisSetAsync[] sets, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask StoreIntersectFromSortedSetsAsync(ServiceStack.Redis.Generic.IRedisSortedSetAsync intoSetId, params ServiceStack.Redis.Generic.IRedisSortedSetAsync[] setIds); + System.Threading.Tasks.ValueTask StoreIntersectFromSortedSetsAsync(ServiceStack.Redis.Generic.IRedisSortedSetAsync intoSetId, ServiceStack.Redis.Generic.IRedisSortedSetAsync[] setIds, string[] args, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask StoreIntersectFromSortedSetsAsync(ServiceStack.Redis.Generic.IRedisSortedSetAsync intoSetId, ServiceStack.Redis.Generic.IRedisSortedSetAsync[] setIds, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask StoreRelatedEntitiesAsync(object parentId, params TChild[] children); + System.Threading.Tasks.ValueTask StoreRelatedEntitiesAsync(object parentId, TChild[] children, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask StoreRelatedEntitiesAsync(object parentId, System.Collections.Generic.List children, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask StoreUnionFromSetsAsync(ServiceStack.Redis.Generic.IRedisSetAsync intoSet, params ServiceStack.Redis.Generic.IRedisSetAsync[] sets); + System.Threading.Tasks.ValueTask StoreUnionFromSetsAsync(ServiceStack.Redis.Generic.IRedisSetAsync intoSet, ServiceStack.Redis.Generic.IRedisSetAsync[] sets, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask StoreUnionFromSortedSetsAsync(ServiceStack.Redis.Generic.IRedisSortedSetAsync intoSetId, params ServiceStack.Redis.Generic.IRedisSortedSetAsync[] setIds); + System.Threading.Tasks.ValueTask StoreUnionFromSortedSetsAsync(ServiceStack.Redis.Generic.IRedisSortedSetAsync intoSetId, ServiceStack.Redis.Generic.IRedisSortedSetAsync[] setIds, string[] args, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask StoreUnionFromSortedSetsAsync(ServiceStack.Redis.Generic.IRedisSortedSetAsync intoSetId, ServiceStack.Redis.Generic.IRedisSortedSetAsync[] setIds, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask TrimListAsync(ServiceStack.Redis.Generic.IRedisListAsync fromList, int keepStartingFrom, int keepEndingAt, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + ServiceStack.Redis.IRedisSetAsync TypeIdsSet { get; } + string UrnKey(T value); + } + + // Generated from `ServiceStack.Redis.Generic.IRedisTypedPipeline<>` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IRedisTypedPipeline : System.IDisposable, ServiceStack.Redis.Pipeline.IRedisQueueCompletableOperation, ServiceStack.Redis.Pipeline.IRedisPipelineShared, ServiceStack.Redis.Generic.IRedisTypedQueueableOperation + { + } + + // Generated from `ServiceStack.Redis.Generic.IRedisTypedPipelineAsync<>` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IRedisTypedPipelineAsync : System.IAsyncDisposable, ServiceStack.Redis.Pipeline.IRedisQueueCompletableOperationAsync, ServiceStack.Redis.Pipeline.IRedisPipelineSharedAsync, ServiceStack.Redis.Generic.IRedisTypedQueueableOperationAsync + { + } + + // Generated from `ServiceStack.Redis.Generic.IRedisTypedQueueableOperation<>` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IRedisTypedQueueableOperation + { + void QueueCommand(System.Func, string> command, System.Action onSuccessCallback, System.Action onErrorCallback); + void QueueCommand(System.Func, string> command, System.Action onSuccessCallback); + void QueueCommand(System.Func, string> command); + void QueueCommand(System.Func, int> command, System.Action onSuccessCallback, System.Action onErrorCallback); + void QueueCommand(System.Func, int> command, System.Action onSuccessCallback); + void QueueCommand(System.Func, int> command); + void QueueCommand(System.Func, double> command, System.Action onSuccessCallback, System.Action onErrorCallback); + void QueueCommand(System.Func, double> command, System.Action onSuccessCallback); + void QueueCommand(System.Func, double> command); + void QueueCommand(System.Func, bool> command, System.Action onSuccessCallback, System.Action onErrorCallback); + void QueueCommand(System.Func, bool> command, System.Action onSuccessCallback); + void QueueCommand(System.Func, bool> command); + void QueueCommand(System.Func, T> command, System.Action onSuccessCallback, System.Action onErrorCallback); + void QueueCommand(System.Func, T> command, System.Action onSuccessCallback); + void QueueCommand(System.Func, T> command); + void QueueCommand(System.Func, System.Int64> command, System.Action onSuccessCallback, System.Action onErrorCallback); + void QueueCommand(System.Func, System.Int64> command, System.Action onSuccessCallback); + void QueueCommand(System.Func, System.Int64> command); + void QueueCommand(System.Func, System.Collections.Generic.List> command, System.Action> onSuccessCallback, System.Action onErrorCallback); + void QueueCommand(System.Func, System.Collections.Generic.List> command, System.Action> onSuccessCallback); + void QueueCommand(System.Func, System.Collections.Generic.List> command); + void QueueCommand(System.Func, System.Collections.Generic.List> command, System.Action> onSuccessCallback, System.Action onErrorCallback); + void QueueCommand(System.Func, System.Collections.Generic.List> command, System.Action> onSuccessCallback); + void QueueCommand(System.Func, System.Collections.Generic.List> command); + void QueueCommand(System.Func, System.Collections.Generic.HashSet> command, System.Action> onSuccessCallback, System.Action onErrorCallback); + void QueueCommand(System.Func, System.Collections.Generic.HashSet> command, System.Action> onSuccessCallback); + void QueueCommand(System.Func, System.Collections.Generic.HashSet> command); + void QueueCommand(System.Func, System.Byte[]> command, System.Action onSuccessCallback, System.Action onErrorCallback); + void QueueCommand(System.Func, System.Byte[]> command, System.Action onSuccessCallback); + void QueueCommand(System.Func, System.Byte[]> command); + void QueueCommand(System.Action> command, System.Action onSuccessCallback, System.Action onErrorCallback); + void QueueCommand(System.Action> command, System.Action onSuccessCallback); + void QueueCommand(System.Action> command); + } + + // Generated from `ServiceStack.Redis.Generic.IRedisTypedQueueableOperationAsync<>` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IRedisTypedQueueableOperationAsync + { + void QueueCommand(System.Func, System.Threading.Tasks.ValueTask> command, System.Action onSuccessCallback = default(System.Action), System.Action onErrorCallback = default(System.Action)); + void QueueCommand(System.Func, System.Threading.Tasks.ValueTask> command, System.Action onSuccessCallback = default(System.Action), System.Action onErrorCallback = default(System.Action)); + void QueueCommand(System.Func, System.Threading.Tasks.ValueTask> command, System.Action onSuccessCallback = default(System.Action), System.Action onErrorCallback = default(System.Action)); + void QueueCommand(System.Func, System.Threading.Tasks.ValueTask> command, System.Action onSuccessCallback = default(System.Action), System.Action onErrorCallback = default(System.Action)); + void QueueCommand(System.Func, System.Threading.Tasks.ValueTask> command, System.Action onSuccessCallback = default(System.Action), System.Action onErrorCallback = default(System.Action)); + void QueueCommand(System.Func, System.Threading.Tasks.ValueTask> command, System.Action onSuccessCallback = default(System.Action), System.Action onErrorCallback = default(System.Action)); + void QueueCommand(System.Func, System.Threading.Tasks.ValueTask> command, System.Action onSuccessCallback = default(System.Action), System.Action onErrorCallback = default(System.Action)); + void QueueCommand(System.Func, System.Threading.Tasks.ValueTask>> command, System.Action> onSuccessCallback = default(System.Action>), System.Action onErrorCallback = default(System.Action)); + void QueueCommand(System.Func, System.Threading.Tasks.ValueTask>> command, System.Action> onSuccessCallback = default(System.Action>), System.Action onErrorCallback = default(System.Action)); + void QueueCommand(System.Func, System.Threading.Tasks.ValueTask>> command, System.Action> onSuccessCallback = default(System.Action>), System.Action onErrorCallback = default(System.Action)); + void QueueCommand(System.Func, System.Threading.Tasks.ValueTask> command, System.Action onSuccessCallback = default(System.Action), System.Action onErrorCallback = default(System.Action)); + } + + // Generated from `ServiceStack.Redis.Generic.IRedisTypedTransaction<>` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IRedisTypedTransaction : System.IDisposable, ServiceStack.Redis.Generic.IRedisTypedQueueableOperation + { + bool Commit(); + void Rollback(); + } + + // Generated from `ServiceStack.Redis.Generic.IRedisTypedTransactionAsync<>` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IRedisTypedTransactionAsync : System.IAsyncDisposable, ServiceStack.Redis.Generic.IRedisTypedQueueableOperationAsync + { + System.Threading.Tasks.ValueTask CommitAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask RollbackAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + } + + } + namespace Pipeline + { + // Generated from `ServiceStack.Redis.Pipeline.IRedisPipeline` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IRedisPipeline : System.IDisposable, ServiceStack.Redis.Pipeline.IRedisQueueableOperation, ServiceStack.Redis.Pipeline.IRedisQueueCompletableOperation, ServiceStack.Redis.Pipeline.IRedisPipelineShared + { + } + + // Generated from `ServiceStack.Redis.Pipeline.IRedisPipelineAsync` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IRedisPipelineAsync : System.IAsyncDisposable, ServiceStack.Redis.Pipeline.IRedisQueueableOperationAsync, ServiceStack.Redis.Pipeline.IRedisQueueCompletableOperationAsync, ServiceStack.Redis.Pipeline.IRedisPipelineSharedAsync + { + } + + // Generated from `ServiceStack.Redis.Pipeline.IRedisPipelineShared` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IRedisPipelineShared : System.IDisposable, ServiceStack.Redis.Pipeline.IRedisQueueCompletableOperation + { + void Flush(); + bool Replay(); + } + + // Generated from `ServiceStack.Redis.Pipeline.IRedisPipelineSharedAsync` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IRedisPipelineSharedAsync : System.IAsyncDisposable, ServiceStack.Redis.Pipeline.IRedisQueueCompletableOperationAsync + { + System.Threading.Tasks.ValueTask FlushAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask ReplayAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + } + + // Generated from `ServiceStack.Redis.Pipeline.IRedisQueueCompletableOperation` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IRedisQueueCompletableOperation + { + void CompleteBytesQueuedCommand(System.Func bytesReadCommand); + void CompleteDoubleQueuedCommand(System.Func doubleReadCommand); + void CompleteIntQueuedCommand(System.Func intReadCommand); + void CompleteLongQueuedCommand(System.Func longReadCommand); + void CompleteMultiBytesQueuedCommand(System.Func multiBytesReadCommand); + void CompleteMultiStringQueuedCommand(System.Func> multiStringReadCommand); + void CompleteRedisDataQueuedCommand(System.Func redisDataReadCommand); + void CompleteStringQueuedCommand(System.Func stringReadCommand); + void CompleteVoidQueuedCommand(System.Action voidReadCommand); + } + + // Generated from `ServiceStack.Redis.Pipeline.IRedisQueueCompletableOperationAsync` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IRedisQueueCompletableOperationAsync + { + void CompleteBytesQueuedCommandAsync(System.Func> bytesReadCommand); + void CompleteDoubleQueuedCommandAsync(System.Func> doubleReadCommand); + void CompleteIntQueuedCommandAsync(System.Func> intReadCommand); + void CompleteLongQueuedCommandAsync(System.Func> longReadCommand); + void CompleteMultiBytesQueuedCommandAsync(System.Func> multiBytesReadCommand); + void CompleteMultiStringQueuedCommandAsync(System.Func>> multiStringReadCommand); + void CompleteRedisDataQueuedCommandAsync(System.Func> redisDataReadCommand); + void CompleteStringQueuedCommandAsync(System.Func> stringReadCommand); + void CompleteVoidQueuedCommandAsync(System.Func voidReadCommand); + } + + // Generated from `ServiceStack.Redis.Pipeline.IRedisQueueableOperation` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IRedisQueueableOperation + { + void QueueCommand(System.Func command, System.Action onSuccessCallback, System.Action onErrorCallback); + void QueueCommand(System.Func command, System.Action onSuccessCallback); + void QueueCommand(System.Func command); + void QueueCommand(System.Func command, System.Action onSuccessCallback, System.Action onErrorCallback); + void QueueCommand(System.Func command, System.Action onSuccessCallback); + void QueueCommand(System.Func command); + void QueueCommand(System.Func command, System.Action onSuccessCallback, System.Action onErrorCallback); + void QueueCommand(System.Func command, System.Action onSuccessCallback); + void QueueCommand(System.Func command); + void QueueCommand(System.Func command, System.Action onSuccessCallback, System.Action onErrorCallback); + void QueueCommand(System.Func command, System.Action onSuccessCallback); + void QueueCommand(System.Func command); + void QueueCommand(System.Func command, System.Action onSuccessCallback, System.Action onErrorCallback); + void QueueCommand(System.Func command, System.Action onSuccessCallback); + void QueueCommand(System.Func command); + void QueueCommand(System.Func> command, System.Action> onSuccessCallback, System.Action onErrorCallback); + void QueueCommand(System.Func> command, System.Action> onSuccessCallback); + void QueueCommand(System.Func> command); + void QueueCommand(System.Func> command, System.Action> onSuccessCallback, System.Action onErrorCallback); + void QueueCommand(System.Func> command, System.Action> onSuccessCallback); + void QueueCommand(System.Func> command); + void QueueCommand(System.Func> command, System.Action> onSuccessCallback, System.Action onErrorCallback); + void QueueCommand(System.Func> command, System.Action> onSuccessCallback); + void QueueCommand(System.Func> command); + void QueueCommand(System.Func command, System.Action onSuccessCallback, System.Action onErrorCallback); + void QueueCommand(System.Func command, System.Action onSuccessCallback); + void QueueCommand(System.Func command); + void QueueCommand(System.Func command, System.Action onSuccessCallback, System.Action onErrorCallback); + void QueueCommand(System.Func command, System.Action onSuccessCallback); + void QueueCommand(System.Func command); + void QueueCommand(System.Func command, System.Action onSuccessCallback, System.Action onErrorCallback); + void QueueCommand(System.Func command, System.Action onSuccessCallback); + void QueueCommand(System.Func command); + void QueueCommand(System.Func command, System.Action onSuccessCallback, System.Action onErrorCallback); + void QueueCommand(System.Func command, System.Action onSuccessCallback); + void QueueCommand(System.Func command); + void QueueCommand(System.Action command, System.Action onSuccessCallback, System.Action onErrorCallback); + void QueueCommand(System.Action command, System.Action onSuccessCallback); + void QueueCommand(System.Action command); + } + + // Generated from `ServiceStack.Redis.Pipeline.IRedisQueueableOperationAsync` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IRedisQueueableOperationAsync + { + void QueueCommand(System.Func command, System.Action onSuccessCallback = default(System.Action), System.Action onErrorCallback = default(System.Action)); + void QueueCommand(System.Func> command, System.Action onSuccessCallback = default(System.Action), System.Action onErrorCallback = default(System.Action)); + void QueueCommand(System.Func> command, System.Action onSuccessCallback = default(System.Action), System.Action onErrorCallback = default(System.Action)); + void QueueCommand(System.Func> command, System.Action onSuccessCallback = default(System.Action), System.Action onErrorCallback = default(System.Action)); + void QueueCommand(System.Func> command, System.Action onSuccessCallback = default(System.Action), System.Action onErrorCallback = default(System.Action)); + void QueueCommand(System.Func> command, System.Action onSuccessCallback = default(System.Action), System.Action onErrorCallback = default(System.Action)); + void QueueCommand(System.Func>> command, System.Action> onSuccessCallback = default(System.Action>), System.Action onErrorCallback = default(System.Action)); + void QueueCommand(System.Func>> command, System.Action> onSuccessCallback = default(System.Action>), System.Action onErrorCallback = default(System.Action)); + void QueueCommand(System.Func>> command, System.Action> onSuccessCallback = default(System.Action>), System.Action onErrorCallback = default(System.Action)); + void QueueCommand(System.Func> command, System.Action onSuccessCallback = default(System.Action), System.Action onErrorCallback = default(System.Action)); + void QueueCommand(System.Func> command, System.Action onSuccessCallback = default(System.Action), System.Action onErrorCallback = default(System.Action)); + void QueueCommand(System.Func> command, System.Action onSuccessCallback = default(System.Action), System.Action onErrorCallback = default(System.Action)); + void QueueCommand(System.Func> command, System.Action onSuccessCallback = default(System.Action), System.Action onErrorCallback = default(System.Action)); + } + + } + } + namespace Web + { + // Generated from `ServiceStack.Web.IContentTypeReader` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IContentTypeReader + { + object DeserializeFromStream(string contentType, System.Type type, System.IO.Stream requestStream); + object DeserializeFromString(string contentType, System.Type type, string request); + ServiceStack.Web.StreamDeserializerDelegate GetStreamDeserializer(string contentType); + ServiceStack.Web.StreamDeserializerDelegateAsync GetStreamDeserializerAsync(string contentType); + } + + // Generated from `ServiceStack.Web.IContentTypeWriter` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IContentTypeWriter + { + ServiceStack.Web.StreamSerializerDelegateAsync GetStreamSerializerAsync(string contentType); + System.Byte[] SerializeToBytes(ServiceStack.Web.IRequest req, object response); + System.Threading.Tasks.Task SerializeToStreamAsync(ServiceStack.Web.IRequest requestContext, object response, System.IO.Stream toStream); + string SerializeToString(ServiceStack.Web.IRequest req, object response); + } + + // Generated from `ServiceStack.Web.IContentTypes` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IContentTypes : ServiceStack.Web.IContentTypeWriter, ServiceStack.Web.IContentTypeReader + { + System.Collections.Generic.Dictionary ContentTypeFormats { get; } + string GetFormatContentType(string format); + void Register(string contentType, ServiceStack.Web.StreamSerializerDelegate streamSerializer, ServiceStack.Web.StreamDeserializerDelegate streamDeserializer); + void RegisterAsync(string contentType, ServiceStack.Web.StreamSerializerDelegateAsync responseSerializer, ServiceStack.Web.StreamDeserializerDelegateAsync streamDeserializer); + void Remove(string contentType); + } + + // Generated from `ServiceStack.Web.ICookies` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface ICookies + { + void AddPermanentCookie(string cookieName, string cookieValue, bool? secureOnly = default(bool?)); + void AddSessionCookie(string cookieName, string cookieValue, bool? secureOnly = default(bool?)); + void DeleteCookie(string cookieName); + } + + // Generated from `ServiceStack.Web.IExpirable` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IExpirable + { + System.DateTime? LastModified { get; } + } + + // Generated from `ServiceStack.Web.IHasHeaders` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IHasHeaders + { + System.Collections.Generic.Dictionary Headers { get; } + } + + // Generated from `ServiceStack.Web.IHasOptions` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IHasOptions + { + System.Collections.Generic.IDictionary Options { get; } + } + + // Generated from `ServiceStack.Web.IHasRequestFilter` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IHasRequestFilter : ServiceStack.Web.IRequestFilterBase + { + void RequestFilter(ServiceStack.Web.IRequest req, ServiceStack.Web.IResponse res, object requestDto); + } + + // Generated from `ServiceStack.Web.IHasRequestFilterAsync` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IHasRequestFilterAsync : ServiceStack.Web.IRequestFilterBase + { + System.Threading.Tasks.Task RequestFilterAsync(ServiceStack.Web.IRequest req, ServiceStack.Web.IResponse res, object requestDto); + } + + // Generated from `ServiceStack.Web.IHasResponseFilter` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IHasResponseFilter : ServiceStack.Web.IResponseFilterBase + { + void ResponseFilter(ServiceStack.Web.IRequest req, ServiceStack.Web.IResponse res, object response); + } + + // Generated from `ServiceStack.Web.IHasResponseFilterAsync` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IHasResponseFilterAsync : ServiceStack.Web.IResponseFilterBase + { + System.Threading.Tasks.Task ResponseFilterAsync(ServiceStack.Web.IRequest req, ServiceStack.Web.IResponse res, object response); + } + + // Generated from `ServiceStack.Web.IHttpError` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IHttpError : ServiceStack.Web.IHttpResult, ServiceStack.Web.IHasOptions + { + string ErrorCode { get; } + string Message { get; } + string StackTrace { get; } + } + + // Generated from `ServiceStack.Web.IHttpFile` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IHttpFile + { + System.Int64 ContentLength { get; } + string ContentType { get; } + string FileName { get; } + System.IO.Stream InputStream { get; } + string Name { get; } + } + + // Generated from `ServiceStack.Web.IHttpRequest` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IHttpRequest : ServiceStack.Web.IRequest, ServiceStack.Configuration.IResolver + { + string Accept { get; } + string HttpMethod { get; } + ServiceStack.Web.IHttpResponse HttpResponse { get; } + string XForwardedFor { get; } + int? XForwardedPort { get; } + string XForwardedProtocol { get; } + string XRealIp { get; } + } + + // Generated from `ServiceStack.Web.IHttpResponse` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IHttpResponse : ServiceStack.Web.IResponse + { + void ClearCookies(); + ServiceStack.Web.ICookies Cookies { get; } + void SetCookie(System.Net.Cookie cookie); + } + + // Generated from `ServiceStack.Web.IHttpResult` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IHttpResult : ServiceStack.Web.IHasOptions + { + string ContentType { get; set; } + System.Collections.Generic.List Cookies { get; } + System.Collections.Generic.Dictionary Headers { get; } + int PaddingLength { get; set; } + ServiceStack.Web.IRequest RequestContext { get; set; } + object Response { get; set; } + ServiceStack.Web.IContentTypeWriter ResponseFilter { get; set; } + System.Func ResultScope { get; set; } + int Status { get; set; } + System.Net.HttpStatusCode StatusCode { get; set; } + string StatusDescription { get; set; } + } + + // Generated from `ServiceStack.Web.IPartialWriter` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IPartialWriter + { + bool IsPartialRequest { get; } + void WritePartialTo(ServiceStack.Web.IResponse response); + } + + // Generated from `ServiceStack.Web.IPartialWriterAsync` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IPartialWriterAsync + { + bool IsPartialRequest { get; } + System.Threading.Tasks.Task WritePartialToAsync(ServiceStack.Web.IResponse response, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + } + + // Generated from `ServiceStack.Web.IRequest` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IRequest : ServiceStack.Configuration.IResolver + { + string AbsoluteUri { get; } + string[] AcceptTypes { get; } + string Authorization { get; } + System.Int64 ContentLength { get; } + string ContentType { get; } + System.Collections.Generic.IDictionary Cookies { get; } + object Dto { get; set; } + ServiceStack.Web.IHttpFile[] Files { get; } + System.Collections.Specialized.NameValueCollection FormData { get; } + string GetRawBody(); + System.Threading.Tasks.Task GetRawBodyAsync(); + bool HasExplicitResponseContentType { get; } + System.Collections.Specialized.NameValueCollection Headers { get; } + System.IO.Stream InputStream { get; } + bool IsLocal { get; } + bool IsSecureConnection { get; } + System.Collections.Generic.Dictionary Items { get; } + string OperationName { get; set; } + string OriginalPathInfo { get; } + object OriginalRequest { get; } + string PathInfo { get; } + System.Collections.Specialized.NameValueCollection QueryString { get; } + string RawUrl { get; } + string RemoteIp { get; } + ServiceStack.RequestAttributes RequestAttributes { get; set; } + ServiceStack.Web.IRequestPreferences RequestPreferences { get; } + ServiceStack.Web.IResponse Response { get; } + string ResponseContentType { get; set; } + System.Uri UrlReferrer { get; } + bool UseBufferedStream { get; set; } + string UserAgent { get; } + string UserHostAddress { get; } + string Verb { get; } + } + + // Generated from `ServiceStack.Web.IRequestFilterBase` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IRequestFilterBase + { + ServiceStack.Web.IRequestFilterBase Copy(); + int Priority { get; } + } + + // Generated from `ServiceStack.Web.IRequestLogger` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IRequestLogger + { + System.Func CurrentDateFn { get; set; } + bool EnableErrorTracking { get; set; } + bool EnableRequestBodyTracking { get; set; } + bool EnableResponseTracking { get; set; } + bool EnableSessionTracking { get; set; } + System.Type[] ExcludeRequestDtoTypes { get; set; } + System.Collections.Generic.List GetLatestLogs(int? take); + System.Type[] HideRequestBodyForRequestDtoTypes { get; set; } + System.Func IgnoreFilter { get; set; } + bool LimitToServiceRequests { get; set; } + void Log(ServiceStack.Web.IRequest request, object requestDto, object response, System.TimeSpan elapsed); + System.Action RequestLogFilter { get; set; } + string[] RequiredRoles { get; set; } + System.Func SkipLogging { get; set; } + } + + // Generated from `ServiceStack.Web.IRequestPreferences` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IRequestPreferences + { + bool AcceptsDeflate { get; } + bool AcceptsGzip { get; } + } + + // Generated from `ServiceStack.Web.IRequiresRequest` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IRequiresRequest + { + ServiceStack.Web.IRequest Request { get; set; } + } + + // Generated from `ServiceStack.Web.IRequiresRequestStream` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IRequiresRequestStream + { + System.IO.Stream RequestStream { get; set; } + } + + // Generated from `ServiceStack.Web.IResponse` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IResponse + { + void AddHeader(string name, string value); + void Close(); + System.Threading.Tasks.Task CloseAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + string ContentType { get; set; } + object Dto { get; set; } + void End(); + void Flush(); + System.Threading.Tasks.Task FlushAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + string GetHeader(string name); + bool HasStarted { get; } + bool IsClosed { get; } + System.Collections.Generic.Dictionary Items { get; } + bool KeepAlive { get; set; } + object OriginalResponse { get; } + System.IO.Stream OutputStream { get; } + void Redirect(string url); + void RemoveHeader(string name); + ServiceStack.Web.IRequest Request { get; } + void SetContentLength(System.Int64 contentLength); + int StatusCode { get; set; } + string StatusDescription { get; set; } + bool UseBufferedStream { get; set; } + } + + // Generated from `ServiceStack.Web.IResponseFilterBase` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IResponseFilterBase + { + ServiceStack.Web.IResponseFilterBase Copy(); + int Priority { get; } + } + + // Generated from `ServiceStack.Web.IRestPath` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IRestPath + { + object CreateRequest(string pathInfo, System.Collections.Generic.Dictionary queryStringAndFormData, object fromInstance); + bool IsWildCardPath { get; } + System.Type RequestType { get; } + } + + // Generated from `ServiceStack.Web.IServiceController` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IServiceController : ServiceStack.Web.IServiceExecutor + { + object Execute(object requestDto, ServiceStack.Web.IRequest request, bool applyFilters); + object Execute(object requestDto, ServiceStack.Web.IRequest request); + object Execute(object requestDto); + object Execute(ServiceStack.Web.IRequest request, bool applyFilters); + object ExecuteMessage(ServiceStack.Messaging.IMessage mqMessage); + object ExecuteMessage(ServiceStack.Messaging.IMessage dto, ServiceStack.Web.IRequest request); + System.Threading.Tasks.Task GatewayExecuteAsync(object requestDto, ServiceStack.Web.IRequest req, bool applyFilters); + ServiceStack.Web.IRestPath GetRestPathForRequest(string httpMethod, string pathInfo); + } + + // Generated from `ServiceStack.Web.IServiceExecutor` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IServiceExecutor + { + System.Threading.Tasks.Task ExecuteAsync(object requestDto, ServiceStack.Web.IRequest request); + } + + // Generated from `ServiceStack.Web.IServiceGatewayFactory` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IServiceGatewayFactory + { + ServiceStack.IServiceGateway GetServiceGateway(ServiceStack.Web.IRequest request); + } + + // Generated from `ServiceStack.Web.IServiceRoutes` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IServiceRoutes + { + ServiceStack.Web.IServiceRoutes Add(string restPath, string verbs); + ServiceStack.Web.IServiceRoutes Add(string restPath); + ServiceStack.Web.IServiceRoutes Add(System.Type requestType, string restPath, string verbs, string summary, string notes, string matches); + ServiceStack.Web.IServiceRoutes Add(System.Type requestType, string restPath, string verbs, string summary, string notes); + ServiceStack.Web.IServiceRoutes Add(System.Type requestType, string restPath, string verbs, int priority); + ServiceStack.Web.IServiceRoutes Add(System.Type requestType, string restPath, string verbs); + } + + // Generated from `ServiceStack.Web.IServiceRunner` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IServiceRunner + { + object Process(ServiceStack.Web.IRequest requestContext, object instance, object request); + } + + // Generated from `ServiceStack.Web.IServiceRunner<>` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IServiceRunner : ServiceStack.Web.IServiceRunner + { + object Execute(ServiceStack.Web.IRequest req, object instance, ServiceStack.Messaging.IMessage request); + System.Threading.Tasks.Task ExecuteAsync(ServiceStack.Web.IRequest req, object instance, TRequest requestDto); + object ExecuteOneWay(ServiceStack.Web.IRequest req, object instance, TRequest requestDto); + System.Threading.Tasks.Task HandleExceptionAsync(ServiceStack.Web.IRequest req, TRequest requestDto, System.Exception ex, object instance); + object OnAfterExecute(ServiceStack.Web.IRequest req, object response, object service); + void OnBeforeExecute(ServiceStack.Web.IRequest req, TRequest request, object service); + } + + // Generated from `ServiceStack.Web.IStreamWriter` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IStreamWriter + { + void WriteTo(System.IO.Stream responseStream); + } + + // Generated from `ServiceStack.Web.IStreamWriterAsync` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IStreamWriterAsync + { + System.Threading.Tasks.Task WriteToAsync(System.IO.Stream responseStream, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + } + + // Generated from `ServiceStack.Web.StreamDeserializerDelegate` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public delegate object StreamDeserializerDelegate(System.Type type, System.IO.Stream fromStream); + + // Generated from `ServiceStack.Web.StreamDeserializerDelegateAsync` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public delegate System.Threading.Tasks.Task StreamDeserializerDelegateAsync(System.Type type, System.IO.Stream fromStream); + + // Generated from `ServiceStack.Web.StreamSerializerDelegate` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public delegate void StreamSerializerDelegate(ServiceStack.Web.IRequest req, object dto, System.IO.Stream outputStream); + + // Generated from `ServiceStack.Web.StreamSerializerDelegateAsync` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public delegate System.Threading.Tasks.Task StreamSerializerDelegateAsync(ServiceStack.Web.IRequest req, object dto, System.IO.Stream outputStream); + + // Generated from `ServiceStack.Web.StringDeserializerDelegate` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public delegate object StringDeserializerDelegate(string contents, System.Type type); + + // Generated from `ServiceStack.Web.StringSerializerDelegate` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public delegate string StringSerializerDelegate(ServiceStack.Web.IRequest req, object dto); + + // Generated from `ServiceStack.Web.TextDeserializerDelegate` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public delegate object TextDeserializerDelegate(System.Type type, string dto); + + // Generated from `ServiceStack.Web.TextSerializerDelegate` in `ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public delegate string TextSerializerDelegate(object dto); + + } +} +namespace System +{ + namespace Runtime + { + namespace CompilerServices + { + /* Duplicate type 'IsReadOnlyAttribute' is not stubbed in this assembly 'ServiceStack.Interfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null'. */ + + } + } +} diff --git a/csharp/ql/test/resources/stubs/ServiceStack.Interfaces/5.11.0/ServiceStack.Interfaces.csproj b/csharp/ql/test/resources/stubs/ServiceStack.Interfaces/5.11.0/ServiceStack.Interfaces.csproj new file mode 100644 index 00000000000..36eddf7809c --- /dev/null +++ b/csharp/ql/test/resources/stubs/ServiceStack.Interfaces/5.11.0/ServiceStack.Interfaces.csproj @@ -0,0 +1,12 @@ + + + net5.0 + true + bin\ + false + + + + + + diff --git a/csharp/ql/test/resources/stubs/ServiceStack.OrmLite.SqlServer/5.11.0/ServiceStack.OrmLite.SqlServer.cs b/csharp/ql/test/resources/stubs/ServiceStack.OrmLite.SqlServer/5.11.0/ServiceStack.OrmLite.SqlServer.cs new file mode 100644 index 00000000000..228cdcfdf09 --- /dev/null +++ b/csharp/ql/test/resources/stubs/ServiceStack.OrmLite.SqlServer/5.11.0/ServiceStack.OrmLite.SqlServer.cs @@ -0,0 +1,351 @@ +// This file contains auto-generated code. + +namespace ServiceStack +{ + namespace OrmLite + { + // Generated from `ServiceStack.OrmLite.SqlServer2008Dialect` in `ServiceStack.OrmLite.SqlServer, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class SqlServer2008Dialect + { + public static ServiceStack.OrmLite.SqlServer.SqlServer2008OrmLiteDialectProvider Instance { get => throw null; } + public static ServiceStack.OrmLite.IOrmLiteDialectProvider Provider { get => throw null; } + } + + // Generated from `ServiceStack.OrmLite.SqlServer2012Dialect` in `ServiceStack.OrmLite.SqlServer, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class SqlServer2012Dialect + { + public static ServiceStack.OrmLite.SqlServer.SqlServer2012OrmLiteDialectProvider Instance { get => throw null; } + public static ServiceStack.OrmLite.IOrmLiteDialectProvider Provider { get => throw null; } + } + + // Generated from `ServiceStack.OrmLite.SqlServer2014Dialect` in `ServiceStack.OrmLite.SqlServer, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class SqlServer2014Dialect + { + public static ServiceStack.OrmLite.SqlServer.SqlServer2014OrmLiteDialectProvider Instance { get => throw null; } + public static ServiceStack.OrmLite.IOrmLiteDialectProvider Provider { get => throw null; } + } + + // Generated from `ServiceStack.OrmLite.SqlServer2016Dialect` in `ServiceStack.OrmLite.SqlServer, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class SqlServer2016Dialect + { + public static ServiceStack.OrmLite.SqlServer.SqlServer2016OrmLiteDialectProvider Instance { get => throw null; } + public static ServiceStack.OrmLite.IOrmLiteDialectProvider Provider { get => throw null; } + } + + // Generated from `ServiceStack.OrmLite.SqlServer2017Dialect` in `ServiceStack.OrmLite.SqlServer, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class SqlServer2017Dialect + { + public static ServiceStack.OrmLite.SqlServer.SqlServer2017OrmLiteDialectProvider Instance { get => throw null; } + public static ServiceStack.OrmLite.IOrmLiteDialectProvider Provider { get => throw null; } + } + + // Generated from `ServiceStack.OrmLite.SqlServer2019Dialect` in `ServiceStack.OrmLite.SqlServer, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class SqlServer2019Dialect + { + public static ServiceStack.OrmLite.SqlServer.SqlServer2019OrmLiteDialectProvider Instance { get => throw null; } + public static ServiceStack.OrmLite.IOrmLiteDialectProvider Provider { get => throw null; } + } + + // Generated from `ServiceStack.OrmLite.SqlServerDialect` in `ServiceStack.OrmLite.SqlServer, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class SqlServerDialect + { + public static ServiceStack.OrmLite.SqlServer.SqlServerOrmLiteDialectProvider Instance { get => throw null; } + public static ServiceStack.OrmLite.IOrmLiteDialectProvider Provider { get => throw null; } + } + + namespace SqlServer + { + // Generated from `ServiceStack.OrmLite.SqlServer.SqlServer2008OrmLiteDialectProvider` in `ServiceStack.OrmLite.SqlServer, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class SqlServer2008OrmLiteDialectProvider : ServiceStack.OrmLite.SqlServer.SqlServerOrmLiteDialectProvider + { + public static ServiceStack.OrmLite.SqlServer.SqlServer2008OrmLiteDialectProvider Instance; + public override string SqlConcat(System.Collections.Generic.IEnumerable args) => throw null; + public SqlServer2008OrmLiteDialectProvider() => throw null; + } + + // Generated from `ServiceStack.OrmLite.SqlServer.SqlServer2012OrmLiteDialectProvider` in `ServiceStack.OrmLite.SqlServer, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class SqlServer2012OrmLiteDialectProvider : ServiceStack.OrmLite.SqlServer.SqlServerOrmLiteDialectProvider + { + public override void AppendFieldCondition(System.Text.StringBuilder sqlFilter, ServiceStack.OrmLite.FieldDefinition fieldDef, System.Data.IDbCommand cmd) => throw null; + public override void AppendNullFieldCondition(System.Text.StringBuilder sqlFilter, ServiceStack.OrmLite.FieldDefinition fieldDef) => throw null; + public override bool DoesSequenceExist(System.Data.IDbCommand dbCmd, string sequenceName) => throw null; + public override System.Threading.Tasks.Task DoesSequenceExistAsync(System.Data.IDbCommand dbCmd, string sequenceName, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + protected override string GetAutoIncrementDefinition(ServiceStack.OrmLite.FieldDefinition fieldDef) => throw null; + public override string GetColumnDefinition(ServiceStack.OrmLite.FieldDefinition fieldDef) => throw null; + public static ServiceStack.OrmLite.SqlServer.SqlServer2012OrmLiteDialectProvider Instance; + public override System.Collections.Generic.List SequenceList(System.Type tableType) => throw null; + protected override bool ShouldSkipInsert(ServiceStack.OrmLite.FieldDefinition fieldDef) => throw null; + public SqlServer2012OrmLiteDialectProvider() => throw null; + protected override bool SupportsSequences(ServiceStack.OrmLite.FieldDefinition fieldDef) => throw null; + public override string ToCreateSequenceStatement(System.Type tableType, string sequenceName) => throw null; + public override System.Collections.Generic.List ToCreateSequenceStatements(System.Type tableType) => throw null; + public override string ToCreateTableStatement(System.Type tableType) => throw null; + public override string ToSelectStatement(ServiceStack.OrmLite.ModelDefinition modelDef, string selectExpression, string bodyExpression, string orderByExpression = default(string), int? offset = default(int?), int? rows = default(int?)) => throw null; + } + + // Generated from `ServiceStack.OrmLite.SqlServer.SqlServer2014OrmLiteDialectProvider` in `ServiceStack.OrmLite.SqlServer, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class SqlServer2014OrmLiteDialectProvider : ServiceStack.OrmLite.SqlServer.SqlServer2012OrmLiteDialectProvider + { + public override string GetColumnDefinition(ServiceStack.OrmLite.FieldDefinition fieldDef) => throw null; + public static ServiceStack.OrmLite.SqlServer.SqlServer2014OrmLiteDialectProvider Instance; + public SqlServer2014OrmLiteDialectProvider() => throw null; + public override string ToCreateTableStatement(System.Type tableType) => throw null; + } + + // Generated from `ServiceStack.OrmLite.SqlServer.SqlServer2016Expression<>` in `ServiceStack.OrmLite.SqlServer, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class SqlServer2016Expression : ServiceStack.OrmLite.SqlServer.SqlServerExpression + { + public SqlServer2016Expression(ServiceStack.OrmLite.IOrmLiteDialectProvider dialectProvider) : base(default(ServiceStack.OrmLite.IOrmLiteDialectProvider)) => throw null; + protected override object VisitSqlMethodCall(System.Linq.Expressions.MethodCallExpression m) => throw null; + } + + // Generated from `ServiceStack.OrmLite.SqlServer.SqlServer2016OrmLiteDialectProvider` in `ServiceStack.OrmLite.SqlServer, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class SqlServer2016OrmLiteDialectProvider : ServiceStack.OrmLite.SqlServer.SqlServer2014OrmLiteDialectProvider + { + public static ServiceStack.OrmLite.SqlServer.SqlServer2016OrmLiteDialectProvider Instance; + public override ServiceStack.OrmLite.SqlExpression SqlExpression() => throw null; + public SqlServer2016OrmLiteDialectProvider() => throw null; + } + + // Generated from `ServiceStack.OrmLite.SqlServer.SqlServer2017OrmLiteDialectProvider` in `ServiceStack.OrmLite.SqlServer, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class SqlServer2017OrmLiteDialectProvider : ServiceStack.OrmLite.SqlServer.SqlServer2016OrmLiteDialectProvider + { + public static ServiceStack.OrmLite.SqlServer.SqlServer2017OrmLiteDialectProvider Instance; + public SqlServer2017OrmLiteDialectProvider() => throw null; + } + + // Generated from `ServiceStack.OrmLite.SqlServer.SqlServer2019OrmLiteDialectProvider` in `ServiceStack.OrmLite.SqlServer, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class SqlServer2019OrmLiteDialectProvider : ServiceStack.OrmLite.SqlServer.SqlServer2017OrmLiteDialectProvider + { + public static ServiceStack.OrmLite.SqlServer.SqlServer2019OrmLiteDialectProvider Instance; + public SqlServer2019OrmLiteDialectProvider() => throw null; + } + + // Generated from `ServiceStack.OrmLite.SqlServer.SqlServerExpression<>` in `ServiceStack.OrmLite.SqlServer, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class SqlServerExpression : ServiceStack.OrmLite.SqlExpression + { + protected override void ConvertToPlaceholderAndParameter(ref object right) => throw null; + public override string GetSubstringSql(object quotedColumn, int startIndex, int? length = default(int?)) => throw null; + public override void PrepareUpdateStatement(System.Data.IDbCommand dbCmd, T item, bool excludeDefaults = default(bool)) => throw null; + public SqlServerExpression(ServiceStack.OrmLite.IOrmLiteDialectProvider dialectProvider) : base(default(ServiceStack.OrmLite.IOrmLiteDialectProvider)) => throw null; + public override string ToDeleteRowStatement() => throw null; + protected override ServiceStack.OrmLite.PartialSqlString ToLengthPartialString(object arg) => throw null; + protected override void VisitFilter(string operand, object originalLeft, object originalRight, ref object left, ref object right) => throw null; + } + + // Generated from `ServiceStack.OrmLite.SqlServer.SqlServerOrmLiteDialectProvider` in `ServiceStack.OrmLite.SqlServer, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class SqlServerOrmLiteDialectProvider : ServiceStack.OrmLite.OrmLiteDialectProviderBase + { + public override System.Data.IDbConnection CreateConnection(string connectionString, System.Collections.Generic.Dictionary options) => throw null; + public override System.Data.IDbDataParameter CreateParam() => throw null; + public override void DisableForeignKeysCheck(System.Data.IDbCommand cmd) => throw null; + public override System.Threading.Tasks.Task DisableForeignKeysCheckAsync(System.Data.IDbCommand cmd, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public override void DisableIdentityInsert(System.Data.IDbCommand cmd) => throw null; + public override System.Threading.Tasks.Task DisableIdentityInsertAsync(System.Data.IDbCommand cmd, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public override bool DoesColumnExist(System.Data.IDbConnection db, string columnName, string tableName, string schema = default(string)) => throw null; + public override System.Threading.Tasks.Task DoesColumnExistAsync(System.Data.IDbConnection db, string columnName, string tableName, string schema = default(string), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public override bool DoesSchemaExist(System.Data.IDbCommand dbCmd, string schemaName) => throw null; + public override System.Threading.Tasks.Task DoesSchemaExistAsync(System.Data.IDbCommand dbCmd, string schemaName, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public override bool DoesTableExist(System.Data.IDbCommand dbCmd, string tableName, string schema = default(string)) => throw null; + public override System.Threading.Tasks.Task DoesTableExistAsync(System.Data.IDbCommand dbCmd, string tableName, string schema = default(string), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public override void EnableForeignKeysCheck(System.Data.IDbCommand cmd) => throw null; + public override System.Threading.Tasks.Task EnableForeignKeysCheckAsync(System.Data.IDbCommand cmd, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public override void EnableIdentityInsert(System.Data.IDbCommand cmd) => throw null; + public override System.Threading.Tasks.Task EnableIdentityInsertAsync(System.Data.IDbCommand cmd, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public override System.Threading.Tasks.Task ExecuteNonQueryAsync(System.Data.IDbCommand cmd, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public override System.Threading.Tasks.Task ExecuteReaderAsync(System.Data.IDbCommand cmd, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public override System.Threading.Tasks.Task ExecuteScalarAsync(System.Data.IDbCommand cmd, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public override string GetAutoIdDefaultValue(ServiceStack.OrmLite.FieldDefinition fieldDef) => throw null; + protected virtual string GetAutoIncrementDefinition(ServiceStack.OrmLite.FieldDefinition fieldDef) => throw null; + public override string GetColumnDefinition(ServiceStack.OrmLite.FieldDefinition fieldDef) => throw null; + public override string GetDropForeignKeyConstraints(ServiceStack.OrmLite.ModelDefinition modelDef) => throw null; + public override string GetForeignKeyOnDeleteClause(ServiceStack.OrmLite.ForeignKeyConstraint foreignKey) => throw null; + public override string GetForeignKeyOnUpdateClause(ServiceStack.OrmLite.ForeignKeyConstraint foreignKey) => throw null; + public override string GetLoadChildrenSubSelect(ServiceStack.OrmLite.SqlExpression expr) => throw null; + public override string GetQuotedValue(string paramValue) => throw null; + public override bool HasInsertReturnValues(ServiceStack.OrmLite.ModelDefinition modelDef) => throw null; + public static ServiceStack.OrmLite.SqlServer.SqlServerOrmLiteDialectProvider Instance; + public override System.Threading.Tasks.Task OpenAsync(System.Data.IDbConnection db, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public override void PrepareInsertRowStatement(System.Data.IDbCommand dbCmd, System.Collections.Generic.Dictionary args) => throw null; + public override void PrepareParameterizedInsertStatement(System.Data.IDbCommand cmd, System.Collections.Generic.ICollection insertFields = default(System.Collections.Generic.ICollection), System.Func shouldInclude = default(System.Func)) => throw null; + public override System.Threading.Tasks.Task ReadAsync(System.Data.IDataReader reader, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public override System.Threading.Tasks.Task> ReaderEach(System.Data.IDataReader reader, System.Func fn, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public override System.Threading.Tasks.Task ReaderEach(System.Data.IDataReader reader, System.Action fn, Return source, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public override System.Threading.Tasks.Task ReaderRead(System.Data.IDataReader reader, System.Func fn, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + protected string Sequence(string schema, string sequence) => throw null; + protected virtual bool ShouldReturnOnInsert(ServiceStack.OrmLite.ModelDefinition modelDef, ServiceStack.OrmLite.FieldDefinition fieldDef) => throw null; + protected override bool ShouldSkipInsert(ServiceStack.OrmLite.FieldDefinition fieldDef) => throw null; + public override string SqlBool(bool value) => throw null; + public override string SqlCast(object fieldOrValue, string castAs) => throw null; + public override string SqlCurrency(string fieldOrValue, string currencySymbol) => throw null; + public override ServiceStack.OrmLite.SqlExpression SqlExpression() => throw null; + public override string SqlLimit(int? offset = default(int?), int? rows = default(int?)) => throw null; + public override string SqlRandom { get => throw null; } + public SqlServerOrmLiteDialectProvider() => throw null; + protected virtual bool SupportsSequences(ServiceStack.OrmLite.FieldDefinition fieldDef) => throw null; + public override string ToAddColumnStatement(System.Type modelType, ServiceStack.OrmLite.FieldDefinition fieldDef) => throw null; + public override string ToAlterColumnStatement(System.Type modelType, ServiceStack.OrmLite.FieldDefinition fieldDef) => throw null; + public override string ToChangeColumnNameStatement(System.Type modelType, ServiceStack.OrmLite.FieldDefinition fieldDef, string oldColumnName) => throw null; + public override string ToCreateSchemaStatement(string schemaName) => throw null; + public override string ToInsertRowStatement(System.Data.IDbCommand cmd, object objWithProperties, System.Collections.Generic.ICollection insertFields = default(System.Collections.Generic.ICollection)) => throw null; + public override string ToSelectStatement(ServiceStack.OrmLite.ModelDefinition modelDef, string selectExpression, string bodyExpression, string orderByExpression = default(string), int? offset = default(int?), int? rows = default(int?)) => throw null; + public override string ToTableNamesStatement(string schema) => throw null; + public override string ToTableNamesWithRowCountsStatement(bool live, string schema) => throw null; + protected System.Data.SqlClient.SqlDataReader Unwrap(System.Data.IDataReader reader) => throw null; + protected System.Data.SqlClient.SqlConnection Unwrap(System.Data.IDbConnection db) => throw null; + protected System.Data.SqlClient.SqlCommand Unwrap(System.Data.IDbCommand cmd) => throw null; + public static string UseAliasesOrStripTablePrefixes(string selectExpression) => throw null; + } + + // Generated from `ServiceStack.OrmLite.SqlServer.SqlServerTableHint` in `ServiceStack.OrmLite.SqlServer, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class SqlServerTableHint + { + public static ServiceStack.OrmLite.JoinFormatDelegate NoLock; + public static ServiceStack.OrmLite.JoinFormatDelegate ReadCommitted; + public static ServiceStack.OrmLite.JoinFormatDelegate ReadPast; + public static ServiceStack.OrmLite.JoinFormatDelegate ReadUncommitted; + public static ServiceStack.OrmLite.JoinFormatDelegate RepeatableRead; + public static ServiceStack.OrmLite.JoinFormatDelegate Serializable; + public SqlServerTableHint() => throw null; + } + + namespace Converters + { + // Generated from `ServiceStack.OrmLite.SqlServer.Converters.SqlJsonAttribute` in `ServiceStack.OrmLite.SqlServer, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class SqlJsonAttribute : System.Attribute + { + public SqlJsonAttribute() => throw null; + } + + // Generated from `ServiceStack.OrmLite.SqlServer.Converters.SqlServerBoolConverter` in `ServiceStack.OrmLite.SqlServer, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class SqlServerBoolConverter : ServiceStack.OrmLite.Converters.BoolConverter + { + public override string ColumnDefinition { get => throw null; } + public override System.Data.DbType DbType { get => throw null; } + public override object FromDbValue(System.Type fieldType, object value) => throw null; + public SqlServerBoolConverter() => throw null; + public override object ToDbValue(System.Type fieldType, object value) => throw null; + public override string ToQuotedString(System.Type fieldType, object value) => throw null; + } + + // Generated from `ServiceStack.OrmLite.SqlServer.Converters.SqlServerByteArrayConverter` in `ServiceStack.OrmLite.SqlServer, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class SqlServerByteArrayConverter : ServiceStack.OrmLite.Converters.ByteArrayConverter + { + public override string ColumnDefinition { get => throw null; } + public SqlServerByteArrayConverter() => throw null; + public override string ToQuotedString(System.Type fieldType, object value) => throw null; + } + + // Generated from `ServiceStack.OrmLite.SqlServer.Converters.SqlServerDateTime2Converter` in `ServiceStack.OrmLite.SqlServer, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class SqlServerDateTime2Converter : ServiceStack.OrmLite.SqlServer.Converters.SqlServerDateTimeConverter + { + public override string ColumnDefinition { get => throw null; } + public override System.Data.DbType DbType { get => throw null; } + public override object FromDbValue(System.Type fieldType, object value) => throw null; + public SqlServerDateTime2Converter() => throw null; + public override string ToQuotedString(System.Type fieldType, object value) => throw null; + } + + // Generated from `ServiceStack.OrmLite.SqlServer.Converters.SqlServerDateTimeConverter` in `ServiceStack.OrmLite.SqlServer, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class SqlServerDateTimeConverter : ServiceStack.OrmLite.Converters.DateTimeConverter + { + public override object FromDbValue(System.Type fieldType, object value) => throw null; + public SqlServerDateTimeConverter() => throw null; + public override string ToQuotedString(System.Type fieldType, object value) => throw null; + } + + // Generated from `ServiceStack.OrmLite.SqlServer.Converters.SqlServerDecimalConverter` in `ServiceStack.OrmLite.SqlServer, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class SqlServerDecimalConverter : ServiceStack.OrmLite.Converters.DecimalConverter + { + public SqlServerDecimalConverter() => throw null; + } + + // Generated from `ServiceStack.OrmLite.SqlServer.Converters.SqlServerDoubleConverter` in `ServiceStack.OrmLite.SqlServer, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class SqlServerDoubleConverter : ServiceStack.OrmLite.Converters.DoubleConverter + { + public override string ColumnDefinition { get => throw null; } + public SqlServerDoubleConverter() => throw null; + } + + // Generated from `ServiceStack.OrmLite.SqlServer.Converters.SqlServerFloatConverter` in `ServiceStack.OrmLite.SqlServer, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class SqlServerFloatConverter : ServiceStack.OrmLite.Converters.FloatConverter + { + public override string ColumnDefinition { get => throw null; } + public SqlServerFloatConverter() => throw null; + } + + // Generated from `ServiceStack.OrmLite.SqlServer.Converters.SqlServerGuidConverter` in `ServiceStack.OrmLite.SqlServer, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class SqlServerGuidConverter : ServiceStack.OrmLite.Converters.GuidConverter + { + public override string ColumnDefinition { get => throw null; } + public SqlServerGuidConverter() => throw null; + public override string ToQuotedString(System.Type fieldType, object value) => throw null; + } + + // Generated from `ServiceStack.OrmLite.SqlServer.Converters.SqlServerJsonStringConverter` in `ServiceStack.OrmLite.SqlServer, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class SqlServerJsonStringConverter : ServiceStack.OrmLite.SqlServer.Converters.SqlServerStringConverter + { + public override object FromDbValue(System.Type fieldType, object value) => throw null; + public SqlServerJsonStringConverter() => throw null; + public override object ToDbValue(System.Type fieldType, object value) => throw null; + } + + // Generated from `ServiceStack.OrmLite.SqlServer.Converters.SqlServerRowVersionConverter` in `ServiceStack.OrmLite.SqlServer, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class SqlServerRowVersionConverter : ServiceStack.OrmLite.Converters.RowVersionConverter + { + public override string ColumnDefinition { get => throw null; } + public SqlServerRowVersionConverter() => throw null; + } + + // Generated from `ServiceStack.OrmLite.SqlServer.Converters.SqlServerSByteConverter` in `ServiceStack.OrmLite.SqlServer, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class SqlServerSByteConverter : ServiceStack.OrmLite.Converters.SByteConverter + { + public override System.Data.DbType DbType { get => throw null; } + public SqlServerSByteConverter() => throw null; + } + + // Generated from `ServiceStack.OrmLite.SqlServer.Converters.SqlServerStringConverter` in `ServiceStack.OrmLite.SqlServer, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class SqlServerStringConverter : ServiceStack.OrmLite.Converters.StringConverter + { + public override string GetColumnDefinition(int? stringLength) => throw null; + public override void InitDbParam(System.Data.IDbDataParameter p, System.Type fieldType) => throw null; + public override string MaxColumnDefinition { get => throw null; } + public override int MaxVarCharLength { get => throw null; } + public SqlServerStringConverter() => throw null; + } + + // Generated from `ServiceStack.OrmLite.SqlServer.Converters.SqlServerTimeConverter` in `ServiceStack.OrmLite.SqlServer, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class SqlServerTimeConverter : ServiceStack.OrmLite.OrmLiteConverter + { + public override string ColumnDefinition { get => throw null; } + public override System.Data.DbType DbType { get => throw null; } + public int? Precision { get => throw null; set => throw null; } + public SqlServerTimeConverter() => throw null; + public override object ToDbValue(System.Type fieldType, object value) => throw null; + } + + // Generated from `ServiceStack.OrmLite.SqlServer.Converters.SqlServerUInt16Converter` in `ServiceStack.OrmLite.SqlServer, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class SqlServerUInt16Converter : ServiceStack.OrmLite.Converters.UInt16Converter + { + public override System.Data.DbType DbType { get => throw null; } + public SqlServerUInt16Converter() => throw null; + } + + // Generated from `ServiceStack.OrmLite.SqlServer.Converters.SqlServerUInt32Converter` in `ServiceStack.OrmLite.SqlServer, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class SqlServerUInt32Converter : ServiceStack.OrmLite.Converters.UInt32Converter + { + public override System.Data.DbType DbType { get => throw null; } + public SqlServerUInt32Converter() => throw null; + } + + // Generated from `ServiceStack.OrmLite.SqlServer.Converters.SqlServerUInt64Converter` in `ServiceStack.OrmLite.SqlServer, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class SqlServerUInt64Converter : ServiceStack.OrmLite.Converters.UInt64Converter + { + public override System.Data.DbType DbType { get => throw null; } + public SqlServerUInt64Converter() => throw null; + } + + } + } + } +} diff --git a/csharp/ql/test/resources/stubs/ServiceStack.OrmLite.SqlServer/5.11.0/ServiceStack.OrmLite.SqlServer.csproj b/csharp/ql/test/resources/stubs/ServiceStack.OrmLite.SqlServer/5.11.0/ServiceStack.OrmLite.SqlServer.csproj new file mode 100644 index 00000000000..28ab0bdded8 --- /dev/null +++ b/csharp/ql/test/resources/stubs/ServiceStack.OrmLite.SqlServer/5.11.0/ServiceStack.OrmLite.SqlServer.csproj @@ -0,0 +1,15 @@ + + + net5.0 + true + bin\ + false + + + + + + + + + diff --git a/csharp/ql/test/resources/stubs/ServiceStack.OrmLite/5.11.0/ServiceStack.OrmLite.cs b/csharp/ql/test/resources/stubs/ServiceStack.OrmLite/5.11.0/ServiceStack.OrmLite.cs new file mode 100644 index 00000000000..4510d61e49e --- /dev/null +++ b/csharp/ql/test/resources/stubs/ServiceStack.OrmLite/5.11.0/ServiceStack.OrmLite.cs @@ -0,0 +1,3420 @@ +// This file contains auto-generated code. + +namespace ServiceStack +{ + namespace OrmLite + { + // Generated from `ServiceStack.OrmLite.AliasNamingStrategy` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class AliasNamingStrategy : ServiceStack.OrmLite.OrmLiteNamingStrategyBase + { + public AliasNamingStrategy() => throw null; + public System.Collections.Generic.Dictionary ColumnAliases; + public override string GetColumnName(string name) => throw null; + public override string GetTableName(string name) => throw null; + public System.Collections.Generic.Dictionary TableAliases; + public ServiceStack.OrmLite.INamingStrategy UseNamingStrategy { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.OrmLite.CaptureSqlFilter` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class CaptureSqlFilter : ServiceStack.OrmLite.OrmLiteResultsFilter + { + public CaptureSqlFilter() : base(default(System.Collections.IEnumerable)) => throw null; + public System.Collections.Generic.List SqlCommandHistory { get => throw null; set => throw null; } + public System.Collections.Generic.List SqlStatements { get => throw null; } + } + + // Generated from `ServiceStack.OrmLite.ColumnSchema` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ColumnSchema + { + public bool AllowDBNull { get => throw null; set => throw null; } + public string BaseCatalogName { get => throw null; set => throw null; } + public string BaseColumnName { get => throw null; set => throw null; } + public string BaseSchemaName { get => throw null; set => throw null; } + public string BaseServerName { get => throw null; set => throw null; } + public string BaseTableName { get => throw null; set => throw null; } + public string CollationType { get => throw null; set => throw null; } + public string ColumnDefinition { get => throw null; } + public string ColumnName { get => throw null; set => throw null; } + public int ColumnOrdinal { get => throw null; set => throw null; } + public ColumnSchema() => throw null; + public int ColumnSize { get => throw null; set => throw null; } + public System.Type DataType { get => throw null; set => throw null; } + public string DataTypeName { get => throw null; set => throw null; } + public object DefaultValue { get => throw null; set => throw null; } + public bool IsAliased { get => throw null; set => throw null; } + public bool IsAutoIncrement { get => throw null; set => throw null; } + public bool IsExpression { get => throw null; set => throw null; } + public bool IsHidden { get => throw null; set => throw null; } + public bool IsKey { get => throw null; set => throw null; } + public bool IsLong { get => throw null; set => throw null; } + public bool IsReadOnly { get => throw null; set => throw null; } + public bool IsRowVersion { get => throw null; set => throw null; } + public bool IsUnique { get => throw null; set => throw null; } + public int NumericPrecision { get => throw null; set => throw null; } + public int NumericScale { get => throw null; set => throw null; } + public System.Type ProviderSpecificDataType { get => throw null; set => throw null; } + public int ProviderType { get => throw null; set => throw null; } + public override string ToString() => throw null; + } + + // Generated from `ServiceStack.OrmLite.ConflictResolution` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ConflictResolution + { + public ConflictResolution() => throw null; + public const string Ignore = default; + } + + // Generated from `ServiceStack.OrmLite.DbDataParameterExtensions` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class DbDataParameterExtensions + { + public static System.Data.IDbDataParameter AddParam(this ServiceStack.OrmLite.IOrmLiteDialectProvider dialectProvider, System.Data.IDbCommand dbCmd, object value, ServiceStack.OrmLite.FieldDefinition fieldDef, System.Action paramFilter) => throw null; + public static System.Data.IDbDataParameter AddQueryParam(this ServiceStack.OrmLite.IOrmLiteDialectProvider dialectProvider, System.Data.IDbCommand dbCmd, object value, ServiceStack.OrmLite.FieldDefinition fieldDef) => throw null; + public static System.Data.IDbDataParameter AddUpdateParam(this ServiceStack.OrmLite.IOrmLiteDialectProvider dialectProvider, System.Data.IDbCommand dbCmd, object value, ServiceStack.OrmLite.FieldDefinition fieldDef) => throw null; + public static System.Data.IDbDataParameter CreateParam(this System.Data.IDbConnection db, string name, object value = default(object), System.Type fieldType = default(System.Type), System.Data.DbType? dbType = default(System.Data.DbType?), System.Byte? precision = default(System.Byte?), System.Byte? scale = default(System.Byte?), int? size = default(int?)) => throw null; + public static System.Data.IDbDataParameter CreateParam(this ServiceStack.OrmLite.IOrmLiteDialectProvider dialectProvider, string name, object value = default(object), System.Type fieldType = default(System.Type), System.Data.DbType? dbType = default(System.Data.DbType?), System.Byte? precision = default(System.Byte?), System.Byte? scale = default(System.Byte?), int? size = default(int?)) => throw null; + public static string GetInsertParam(this ServiceStack.OrmLite.IOrmLiteDialectProvider dialectProvider, System.Data.IDbCommand dbCmd, object value, ServiceStack.OrmLite.FieldDefinition fieldDef) => throw null; + public static string GetUpdateParam(this ServiceStack.OrmLite.IOrmLiteDialectProvider dialectProvider, System.Data.IDbCommand dbCmd, object value, ServiceStack.OrmLite.FieldDefinition fieldDef) => throw null; + } + + // Generated from `ServiceStack.OrmLite.DbScripts` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class DbScripts : ServiceStack.Script.ScriptMethods + { + public ServiceStack.Data.IDbConnectionFactory DbFactory { get => throw null; set => throw null; } + public DbScripts() => throw null; + public System.Data.IDbConnection OpenDbConnection(ServiceStack.Script.ScriptScopeContext scope, System.Collections.Generic.Dictionary options) => throw null; + public string[] dbColumnNames(ServiceStack.Script.ScriptScopeContext scope, string tableName, object options) => throw null; + public string[] dbColumnNames(ServiceStack.Script.ScriptScopeContext scope, string tableName) => throw null; + public ServiceStack.OrmLite.ColumnSchema[] dbColumns(ServiceStack.Script.ScriptScopeContext scope, string tableName, object options) => throw null; + public ServiceStack.OrmLite.ColumnSchema[] dbColumns(ServiceStack.Script.ScriptScopeContext scope, string tableName) => throw null; + public System.Int64 dbCount(ServiceStack.Script.ScriptScopeContext scope, string sql, System.Collections.Generic.Dictionary args, object options) => throw null; + public System.Int64 dbCount(ServiceStack.Script.ScriptScopeContext scope, string sql, System.Collections.Generic.Dictionary args) => throw null; + public System.Int64 dbCount(ServiceStack.Script.ScriptScopeContext scope, string sql) => throw null; + public ServiceStack.OrmLite.ColumnSchema[] dbDesc(ServiceStack.Script.ScriptScopeContext scope, string sql, object options) => throw null; + public ServiceStack.OrmLite.ColumnSchema[] dbDesc(ServiceStack.Script.ScriptScopeContext scope, string sql) => throw null; + public int dbExec(ServiceStack.Script.ScriptScopeContext scope, string sql, System.Collections.Generic.Dictionary args, object options) => throw null; + public int dbExec(ServiceStack.Script.ScriptScopeContext scope, string sql, System.Collections.Generic.Dictionary args) => throw null; + public int dbExec(ServiceStack.Script.ScriptScopeContext scope, string sql) => throw null; + public bool dbExists(ServiceStack.Script.ScriptScopeContext scope, string sql, System.Collections.Generic.Dictionary args, object options) => throw null; + public bool dbExists(ServiceStack.Script.ScriptScopeContext scope, string sql, System.Collections.Generic.Dictionary args) => throw null; + public bool dbExists(ServiceStack.Script.ScriptScopeContext scope, string sql) => throw null; + public System.Collections.Generic.List dbNamedConnections() => throw null; + public object dbScalar(ServiceStack.Script.ScriptScopeContext scope, string sql, System.Collections.Generic.Dictionary args, object options) => throw null; + public object dbScalar(ServiceStack.Script.ScriptScopeContext scope, string sql, System.Collections.Generic.Dictionary args) => throw null; + public object dbScalar(ServiceStack.Script.ScriptScopeContext scope, string sql) => throw null; + public object dbSelect(ServiceStack.Script.ScriptScopeContext scope, string sql, System.Collections.Generic.Dictionary args, object options) => throw null; + public object dbSelect(ServiceStack.Script.ScriptScopeContext scope, string sql, System.Collections.Generic.Dictionary args) => throw null; + public object dbSelect(ServiceStack.Script.ScriptScopeContext scope, string sql) => throw null; + public object dbSingle(ServiceStack.Script.ScriptScopeContext scope, string sql, System.Collections.Generic.Dictionary args, object options) => throw null; + public object dbSingle(ServiceStack.Script.ScriptScopeContext scope, string sql, System.Collections.Generic.Dictionary args) => throw null; + public object dbSingle(ServiceStack.Script.ScriptScopeContext scope, string sql) => throw null; + public System.Collections.Generic.List dbTableNames(ServiceStack.Script.ScriptScopeContext scope, System.Collections.Generic.Dictionary args, object options) => throw null; + public System.Collections.Generic.List dbTableNames(ServiceStack.Script.ScriptScopeContext scope, System.Collections.Generic.Dictionary args) => throw null; + public System.Collections.Generic.List dbTableNames(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public System.Collections.Generic.List> dbTableNamesWithRowCounts(ServiceStack.Script.ScriptScopeContext scope, System.Collections.Generic.Dictionary args, object options) => throw null; + public System.Collections.Generic.List> dbTableNamesWithRowCounts(ServiceStack.Script.ScriptScopeContext scope, System.Collections.Generic.Dictionary args) => throw null; + public System.Collections.Generic.List> dbTableNamesWithRowCounts(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public bool isUnsafeSql(string sql) => throw null; + public bool isUnsafeSqlFragment(string sql) => throw null; + public string ormliteVar(ServiceStack.Script.ScriptScopeContext scope, string name) => throw null; + public string sqlBool(ServiceStack.Script.ScriptScopeContext scope, bool value) => throw null; + public string sqlCast(ServiceStack.Script.ScriptScopeContext scope, object fieldOrValue, string castAs) => throw null; + public string sqlConcat(ServiceStack.Script.ScriptScopeContext scope, System.Collections.Generic.IEnumerable values) => throw null; + public string sqlCurrency(ServiceStack.Script.ScriptScopeContext scope, string fieldOrValue, string symbol) => throw null; + public string sqlCurrency(ServiceStack.Script.ScriptScopeContext scope, string fieldOrValue) => throw null; + public string sqlFalse(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public string sqlLimit(ServiceStack.Script.ScriptScopeContext scope, int? offset, int? limit) => throw null; + public string sqlLimit(ServiceStack.Script.ScriptScopeContext scope, int? limit) => throw null; + public string sqlOrderByFields(ServiceStack.Script.ScriptScopeContext scope, string orderBy) => throw null; + public string sqlQuote(ServiceStack.Script.ScriptScopeContext scope, string name) => throw null; + public string sqlSkip(ServiceStack.Script.ScriptScopeContext scope, int? offset) => throw null; + public string sqlTake(ServiceStack.Script.ScriptScopeContext scope, int? limit) => throw null; + public string sqlTrue(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public string sqlVerifyFragment(string sql) => throw null; + public ServiceStack.Script.IgnoreResult useDb(ServiceStack.Script.ScriptScopeContext scope, System.Collections.Generic.Dictionary dbConnOptions) => throw null; + } + + // Generated from `ServiceStack.OrmLite.DbScriptsAsync` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class DbScriptsAsync : ServiceStack.Script.ScriptMethods + { + public ServiceStack.Data.IDbConnectionFactory DbFactory { get => throw null; set => throw null; } + public DbScriptsAsync() => throw null; + public System.Threading.Tasks.Task OpenDbConnectionAsync(ServiceStack.Script.ScriptScopeContext scope, System.Collections.Generic.Dictionary options) => throw null; + public System.Threading.Tasks.Task dbColumnNames(ServiceStack.Script.ScriptScopeContext scope, string tableName, object options) => throw null; + public System.Threading.Tasks.Task dbColumnNames(ServiceStack.Script.ScriptScopeContext scope, string tableName) => throw null; + public string[] dbColumnNamesSync(ServiceStack.Script.ScriptScopeContext scope, string tableName, object options) => throw null; + public string[] dbColumnNamesSync(ServiceStack.Script.ScriptScopeContext scope, string tableName) => throw null; + public System.Threading.Tasks.Task dbColumns(ServiceStack.Script.ScriptScopeContext scope, string tableName, object options) => throw null; + public System.Threading.Tasks.Task dbColumns(ServiceStack.Script.ScriptScopeContext scope, string tableName) => throw null; + public ServiceStack.OrmLite.ColumnSchema[] dbColumnsSync(ServiceStack.Script.ScriptScopeContext scope, string tableName, object options) => throw null; + public ServiceStack.OrmLite.ColumnSchema[] dbColumnsSync(ServiceStack.Script.ScriptScopeContext scope, string tableName) => throw null; + public System.Threading.Tasks.Task dbCount(ServiceStack.Script.ScriptScopeContext scope, string sql, System.Collections.Generic.Dictionary args, object options) => throw null; + public System.Threading.Tasks.Task dbCount(ServiceStack.Script.ScriptScopeContext scope, string sql, System.Collections.Generic.Dictionary args) => throw null; + public System.Threading.Tasks.Task dbCount(ServiceStack.Script.ScriptScopeContext scope, string sql) => throw null; + public System.Int64 dbCountSync(ServiceStack.Script.ScriptScopeContext scope, string sql, System.Collections.Generic.Dictionary args, object options) => throw null; + public System.Int64 dbCountSync(ServiceStack.Script.ScriptScopeContext scope, string sql, System.Collections.Generic.Dictionary args) => throw null; + public System.Int64 dbCountSync(ServiceStack.Script.ScriptScopeContext scope, string sql) => throw null; + public System.Threading.Tasks.Task dbDesc(ServiceStack.Script.ScriptScopeContext scope, string sql, object options) => throw null; + public System.Threading.Tasks.Task dbDesc(ServiceStack.Script.ScriptScopeContext scope, string sql) => throw null; + public ServiceStack.OrmLite.ColumnSchema[] dbDescSync(ServiceStack.Script.ScriptScopeContext scope, string sql, object options) => throw null; + public ServiceStack.OrmLite.ColumnSchema[] dbDescSync(ServiceStack.Script.ScriptScopeContext scope, string sql) => throw null; + public System.Threading.Tasks.Task dbExec(ServiceStack.Script.ScriptScopeContext scope, string sql, System.Collections.Generic.Dictionary args, object options) => throw null; + public System.Threading.Tasks.Task dbExec(ServiceStack.Script.ScriptScopeContext scope, string sql, System.Collections.Generic.Dictionary args) => throw null; + public System.Threading.Tasks.Task dbExec(ServiceStack.Script.ScriptScopeContext scope, string sql) => throw null; + public int dbExecSync(ServiceStack.Script.ScriptScopeContext scope, string sql, System.Collections.Generic.Dictionary args, object options) => throw null; + public int dbExecSync(ServiceStack.Script.ScriptScopeContext scope, string sql, System.Collections.Generic.Dictionary args) => throw null; + public int dbExecSync(ServiceStack.Script.ScriptScopeContext scope, string sql) => throw null; + public System.Threading.Tasks.Task dbExists(ServiceStack.Script.ScriptScopeContext scope, string sql, System.Collections.Generic.Dictionary args, object options) => throw null; + public System.Threading.Tasks.Task dbExists(ServiceStack.Script.ScriptScopeContext scope, string sql, System.Collections.Generic.Dictionary args) => throw null; + public System.Threading.Tasks.Task dbExists(ServiceStack.Script.ScriptScopeContext scope, string sql) => throw null; + public bool dbExistsSync(ServiceStack.Script.ScriptScopeContext scope, string sql, System.Collections.Generic.Dictionary args, object options) => throw null; + public bool dbExistsSync(ServiceStack.Script.ScriptScopeContext scope, string sql, System.Collections.Generic.Dictionary args) => throw null; + public bool dbExistsSync(ServiceStack.Script.ScriptScopeContext scope, string sql) => throw null; + public System.Collections.Generic.List dbNamedConnections() => throw null; + public System.Threading.Tasks.Task dbScalar(ServiceStack.Script.ScriptScopeContext scope, string sql, System.Collections.Generic.Dictionary args, object options) => throw null; + public System.Threading.Tasks.Task dbScalar(ServiceStack.Script.ScriptScopeContext scope, string sql, System.Collections.Generic.Dictionary args) => throw null; + public System.Threading.Tasks.Task dbScalar(ServiceStack.Script.ScriptScopeContext scope, string sql) => throw null; + public object dbScalarSync(ServiceStack.Script.ScriptScopeContext scope, string sql, System.Collections.Generic.Dictionary args, object options) => throw null; + public object dbScalarSync(ServiceStack.Script.ScriptScopeContext scope, string sql, System.Collections.Generic.Dictionary args) => throw null; + public object dbScalarSync(ServiceStack.Script.ScriptScopeContext scope, string sql) => throw null; + public System.Threading.Tasks.Task dbSelect(ServiceStack.Script.ScriptScopeContext scope, string sql, System.Collections.Generic.Dictionary args, object options) => throw null; + public System.Threading.Tasks.Task dbSelect(ServiceStack.Script.ScriptScopeContext scope, string sql, System.Collections.Generic.Dictionary args) => throw null; + public System.Threading.Tasks.Task dbSelect(ServiceStack.Script.ScriptScopeContext scope, string sql) => throw null; + public object dbSelectSync(ServiceStack.Script.ScriptScopeContext scope, string sql, System.Collections.Generic.Dictionary args, object options) => throw null; + public object dbSelectSync(ServiceStack.Script.ScriptScopeContext scope, string sql, System.Collections.Generic.Dictionary args) => throw null; + public object dbSelectSync(ServiceStack.Script.ScriptScopeContext scope, string sql) => throw null; + public System.Threading.Tasks.Task dbSingle(ServiceStack.Script.ScriptScopeContext scope, string sql, System.Collections.Generic.Dictionary args, object options) => throw null; + public System.Threading.Tasks.Task dbSingle(ServiceStack.Script.ScriptScopeContext scope, string sql, System.Collections.Generic.Dictionary args) => throw null; + public System.Threading.Tasks.Task dbSingle(ServiceStack.Script.ScriptScopeContext scope, string sql) => throw null; + public object dbSingleSync(ServiceStack.Script.ScriptScopeContext scope, string sql, System.Collections.Generic.Dictionary args, object options) => throw null; + public object dbSingleSync(ServiceStack.Script.ScriptScopeContext scope, string sql, System.Collections.Generic.Dictionary args) => throw null; + public object dbSingleSync(ServiceStack.Script.ScriptScopeContext scope, string sql) => throw null; + public System.Threading.Tasks.Task dbTableNames(ServiceStack.Script.ScriptScopeContext scope, System.Collections.Generic.Dictionary args, object options) => throw null; + public System.Threading.Tasks.Task dbTableNames(ServiceStack.Script.ScriptScopeContext scope, System.Collections.Generic.Dictionary args) => throw null; + public System.Threading.Tasks.Task dbTableNames(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public System.Collections.Generic.List dbTableNamesSync(ServiceStack.Script.ScriptScopeContext scope, System.Collections.Generic.Dictionary args, object options) => throw null; + public System.Collections.Generic.List dbTableNamesSync(ServiceStack.Script.ScriptScopeContext scope, System.Collections.Generic.Dictionary args) => throw null; + public System.Collections.Generic.List dbTableNamesSync(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public System.Threading.Tasks.Task dbTableNamesWithRowCounts(ServiceStack.Script.ScriptScopeContext scope, System.Collections.Generic.Dictionary args, object options) => throw null; + public System.Threading.Tasks.Task dbTableNamesWithRowCounts(ServiceStack.Script.ScriptScopeContext scope, System.Collections.Generic.Dictionary args) => throw null; + public System.Threading.Tasks.Task dbTableNamesWithRowCounts(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public System.Collections.Generic.List> dbTableNamesWithRowCountsSync(ServiceStack.Script.ScriptScopeContext scope, System.Collections.Generic.Dictionary args, object options) => throw null; + public System.Collections.Generic.List> dbTableNamesWithRowCountsSync(ServiceStack.Script.ScriptScopeContext scope, System.Collections.Generic.Dictionary args) => throw null; + public System.Collections.Generic.List> dbTableNamesWithRowCountsSync(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public bool isUnsafeSql(string sql) => throw null; + public bool isUnsafeSqlFragment(string sql) => throw null; + public string ormliteVar(ServiceStack.Script.ScriptScopeContext scope, string name) => throw null; + public string sqlBool(ServiceStack.Script.ScriptScopeContext scope, bool value) => throw null; + public string sqlCast(ServiceStack.Script.ScriptScopeContext scope, object fieldOrValue, string castAs) => throw null; + public string sqlConcat(ServiceStack.Script.ScriptScopeContext scope, System.Collections.Generic.IEnumerable values) => throw null; + public string sqlCurrency(ServiceStack.Script.ScriptScopeContext scope, string fieldOrValue, string symbol) => throw null; + public string sqlCurrency(ServiceStack.Script.ScriptScopeContext scope, string fieldOrValue) => throw null; + public string sqlFalse(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public string sqlLimit(ServiceStack.Script.ScriptScopeContext scope, int? offset, int? limit) => throw null; + public string sqlLimit(ServiceStack.Script.ScriptScopeContext scope, int? limit) => throw null; + public string sqlOrderByFields(ServiceStack.Script.ScriptScopeContext scope, string orderBy) => throw null; + public string sqlQuote(ServiceStack.Script.ScriptScopeContext scope, string name) => throw null; + public string sqlSkip(ServiceStack.Script.ScriptScopeContext scope, int? offset) => throw null; + public string sqlTake(ServiceStack.Script.ScriptScopeContext scope, int? limit) => throw null; + public string sqlTrue(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public string sqlVerifyFragment(string sql) => throw null; + public ServiceStack.Script.IgnoreResult useDb(ServiceStack.Script.ScriptScopeContext scope, System.Collections.Generic.Dictionary dbConnOptions) => throw null; + } + + // Generated from `ServiceStack.OrmLite.DbTypes<>` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class DbTypes where TDialect : ServiceStack.OrmLite.IOrmLiteDialectProvider + { + public System.Collections.Generic.Dictionary ColumnDbTypeMap; + public System.Collections.Generic.Dictionary ColumnTypeMap; + public System.Data.DbType DbType; + public DbTypes() => throw null; + public void Set(System.Data.DbType dbType, string fieldDefinition) => throw null; + public bool ShouldQuoteValue; + public string TextDefinition; + } + + // Generated from `ServiceStack.OrmLite.DictionaryRow` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public struct DictionaryRow : ServiceStack.OrmLite.IDynamicRow>, ServiceStack.OrmLite.IDynamicRow + { + public DictionaryRow(System.Type type, System.Collections.Generic.Dictionary fields) => throw null; + // Stub generator skipped constructor + public System.Collections.Generic.Dictionary Fields { get => throw null; } + public System.Type Type { get => throw null; } + } + + // Generated from `ServiceStack.OrmLite.DynamicRowUtils` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class DynamicRowUtils + { + } + + // Generated from `ServiceStack.OrmLite.EnumMemberAccess` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class EnumMemberAccess : ServiceStack.OrmLite.PartialSqlString + { + public EnumMemberAccess(string text, System.Type enumType) : base(default(string)) => throw null; + public System.Type EnumType { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.OrmLite.FieldDefinition` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class FieldDefinition + { + public string Alias { get => throw null; set => throw null; } + public bool AutoId { get => throw null; set => throw null; } + public bool AutoIncrement { get => throw null; set => throw null; } + public string BelongToModelName { get => throw null; set => throw null; } + public string CheckConstraint { get => throw null; set => throw null; } + public ServiceStack.OrmLite.FieldDefinition Clone(System.Action modifier = default(System.Action)) => throw null; + public System.Type ColumnType { get => throw null; } + public string ComputeExpression { get => throw null; set => throw null; } + public string CustomFieldDefinition { get => throw null; set => throw null; } + public string CustomInsert { get => throw null; set => throw null; } + public string CustomSelect { get => throw null; set => throw null; } + public string CustomUpdate { get => throw null; set => throw null; } + public string DefaultValue { get => throw null; set => throw null; } + public FieldDefinition() => throw null; + public int? FieldLength { get => throw null; set => throw null; } + public string FieldName { get => throw null; } + public System.Type FieldType { get => throw null; set => throw null; } + public object FieldTypeDefaultValue { get => throw null; set => throw null; } + public ServiceStack.OrmLite.ForeignKeyConstraint ForeignKey { get => throw null; set => throw null; } + public string GetQuotedName(ServiceStack.OrmLite.IOrmLiteDialectProvider dialectProvider) => throw null; + public string GetQuotedValue(object fromInstance, ServiceStack.OrmLite.IOrmLiteDialectProvider dialect = default(ServiceStack.OrmLite.IOrmLiteDialectProvider)) => throw null; + public object GetValue(object instance) => throw null; + public ServiceStack.GetMemberDelegate GetValueFn { get => throw null; set => throw null; } + public bool IgnoreOnInsert { get => throw null; set => throw null; } + public bool IgnoreOnUpdate { get => throw null; set => throw null; } + public string IndexName { get => throw null; set => throw null; } + public bool IsClustered { get => throw null; set => throw null; } + public bool IsComputed { get => throw null; set => throw null; } + public bool IsIndexed { get => throw null; set => throw null; } + public bool IsNonClustered { get => throw null; set => throw null; } + public bool IsNullable { get => throw null; set => throw null; } + public bool IsPersisted { get => throw null; set => throw null; } + public bool IsPrimaryKey { get => throw null; set => throw null; } + public bool IsRefType { get => throw null; set => throw null; } + public bool IsReference { get => throw null; set => throw null; } + public bool IsRowVersion { get => throw null; set => throw null; } + public bool IsSelfRefField(string name) => throw null; + public bool IsSelfRefField(ServiceStack.OrmLite.FieldDefinition fieldDef) => throw null; + public bool IsUniqueConstraint { get => throw null; set => throw null; } + public bool IsUniqueIndex { get => throw null; set => throw null; } + public string Name { get => throw null; set => throw null; } + public System.Reflection.PropertyInfo PropertyInfo { get => throw null; set => throw null; } + public bool RequiresAlias { get => throw null; } + public bool ReturnOnInsert { get => throw null; set => throw null; } + public int? Scale { get => throw null; set => throw null; } + public string Sequence { get => throw null; set => throw null; } + public void SetValue(object instance, object value) => throw null; + public ServiceStack.SetMemberDelegate SetValueFn { get => throw null; set => throw null; } + public bool ShouldSkipDelete() => throw null; + public bool ShouldSkipInsert() => throw null; + public bool ShouldSkipUpdate() => throw null; + public override string ToString() => throw null; + public System.Type TreatAsType { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.OrmLite.ForeignKeyConstraint` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ForeignKeyConstraint + { + public ForeignKeyConstraint(System.Type type, string onDelete = default(string), string onUpdate = default(string), string foreignKeyName = default(string)) => throw null; + public string ForeignKeyName { get => throw null; set => throw null; } + public string GetForeignKeyName(ServiceStack.OrmLite.ModelDefinition modelDef, ServiceStack.OrmLite.ModelDefinition refModelDef, ServiceStack.OrmLite.INamingStrategy namingStrategy, ServiceStack.OrmLite.FieldDefinition fieldDef) => throw null; + public string OnDelete { get => throw null; set => throw null; } + public string OnUpdate { get => throw null; set => throw null; } + public System.Type ReferenceType { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.OrmLite.GetValueDelegate` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public delegate object GetValueDelegate(int i); + + // Generated from `ServiceStack.OrmLite.IDynamicRow` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IDynamicRow + { + System.Type Type { get; } + } + + // Generated from `ServiceStack.OrmLite.IDynamicRow<>` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IDynamicRow : ServiceStack.OrmLite.IDynamicRow + { + T Fields { get; } + } + + // Generated from `ServiceStack.OrmLite.IHasColumnDefinitionLength` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IHasColumnDefinitionLength + { + string GetColumnDefinition(int? length); + } + + // Generated from `ServiceStack.OrmLite.IHasColumnDefinitionPrecision` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IHasColumnDefinitionPrecision + { + string GetColumnDefinition(int? precision, int? scale); + } + + // Generated from `ServiceStack.OrmLite.IHasDialectProvider` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IHasDialectProvider + { + ServiceStack.OrmLite.IOrmLiteDialectProvider DialectProvider { get; } + } + + // Generated from `ServiceStack.OrmLite.IHasUntypedSqlExpression` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IHasUntypedSqlExpression + { + ServiceStack.OrmLite.IUntypedSqlExpression GetUntyped(); + } + + // Generated from `ServiceStack.OrmLite.INamingStrategy` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface INamingStrategy + { + string ApplyNameRestrictions(string name); + string GetColumnName(string name); + string GetSchemaName(string name); + string GetSchemaName(ServiceStack.OrmLite.ModelDefinition modelDef); + string GetSequenceName(string modelName, string fieldName); + string GetTableName(string name); + string GetTableName(ServiceStack.OrmLite.ModelDefinition modelDef); + } + + // Generated from `ServiceStack.OrmLite.IOrmLiteConverter` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IOrmLiteConverter + { + string ColumnDefinition { get; } + System.Data.DbType DbType { get; } + ServiceStack.OrmLite.IOrmLiteDialectProvider DialectProvider { get; set; } + object FromDbValue(System.Type fieldType, object value); + object GetValue(System.Data.IDataReader reader, int columnIndex, object[] values); + void InitDbParam(System.Data.IDbDataParameter p, System.Type fieldType); + object ToDbValue(System.Type fieldType, object value); + string ToQuotedString(System.Type fieldType, object value); + } + + // Generated from `ServiceStack.OrmLite.IOrmLiteDialectProvider` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IOrmLiteDialectProvider + { + System.Data.IDbConnection CreateConnection(string filePath, System.Collections.Generic.Dictionary options); + System.Data.IDbDataParameter CreateParam(); + System.Data.IDbCommand CreateParameterizedDeleteStatement(System.Data.IDbConnection connection, object objWithProperties); + void DisableForeignKeysCheck(System.Data.IDbCommand cmd); + System.Threading.Tasks.Task DisableForeignKeysCheckAsync(System.Data.IDbCommand cmd, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + void DisableIdentityInsert(System.Data.IDbCommand cmd); + System.Threading.Tasks.Task DisableIdentityInsertAsync(System.Data.IDbCommand cmd, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + bool DoesColumnExist(System.Data.IDbConnection db, string columnName, string tableName, string schema = default(string)); + System.Threading.Tasks.Task DoesColumnExistAsync(System.Data.IDbConnection db, string columnName, string tableName, string schema = default(string), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + bool DoesSchemaExist(System.Data.IDbCommand dbCmd, string schema); + System.Threading.Tasks.Task DoesSchemaExistAsync(System.Data.IDbCommand dbCmd, string schema, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + bool DoesSequenceExist(System.Data.IDbCommand dbCmd, string sequenceName); + System.Threading.Tasks.Task DoesSequenceExistAsync(System.Data.IDbCommand dbCmd, string sequenceName, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + bool DoesTableExist(System.Data.IDbConnection db, string tableName, string schema = default(string)); + bool DoesTableExist(System.Data.IDbCommand dbCmd, string tableName, string schema = default(string)); + System.Threading.Tasks.Task DoesTableExistAsync(System.Data.IDbConnection db, string tableName, string schema = default(string), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task DoesTableExistAsync(System.Data.IDbCommand dbCmd, string tableName, string schema = default(string), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + void DropColumn(System.Data.IDbConnection db, System.Type modelType, string columnName); + void EnableForeignKeysCheck(System.Data.IDbCommand cmd); + System.Threading.Tasks.Task EnableForeignKeysCheckAsync(System.Data.IDbCommand cmd, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + void EnableIdentityInsert(System.Data.IDbCommand cmd); + System.Threading.Tasks.Task EnableIdentityInsertAsync(System.Data.IDbCommand cmd, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + string EscapeWildcards(string value); + ServiceStack.OrmLite.IOrmLiteExecFilter ExecFilter { get; set; } + System.Threading.Tasks.Task ExecuteNonQueryAsync(System.Data.IDbCommand cmd, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task ExecuteReaderAsync(System.Data.IDbCommand cmd, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task ExecuteScalarAsync(System.Data.IDbCommand cmd, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + object FromDbRowVersion(System.Type fieldType, object value); + object FromDbValue(object value, System.Type type); + string GetColumnDefinition(ServiceStack.OrmLite.FieldDefinition fieldDef); + string GetColumnNames(ServiceStack.OrmLite.ModelDefinition modelDef); + ServiceStack.OrmLite.SelectItem[] GetColumnNames(ServiceStack.OrmLite.ModelDefinition modelDef, string tablePrefix); + ServiceStack.OrmLite.IOrmLiteConverter GetConverter(System.Type type); + ServiceStack.OrmLite.IOrmLiteConverter GetConverterBestMatch(System.Type type); + ServiceStack.OrmLite.IOrmLiteConverter GetConverterBestMatch(ServiceStack.OrmLite.FieldDefinition fieldDef); + string GetDefaultValue(System.Type tableType, string fieldName); + string GetDefaultValue(ServiceStack.OrmLite.FieldDefinition fieldDef); + string GetDropForeignKeyConstraints(ServiceStack.OrmLite.ModelDefinition modelDef); + System.Collections.Generic.Dictionary GetFieldDefinitionMap(ServiceStack.OrmLite.ModelDefinition modelDef); + object GetFieldValue(System.Type fieldType, object value); + object GetFieldValue(ServiceStack.OrmLite.FieldDefinition fieldDef, object value); + System.Int64 GetLastInsertId(System.Data.IDbCommand command); + string GetLastInsertIdSqlSuffix(); + string GetLoadChildrenSubSelect(ServiceStack.OrmLite.SqlExpression expr); + object GetParamValue(object value, System.Type fieldType); + string GetQuotedColumnName(string columnName); + string GetQuotedName(string name, string schema); + string GetQuotedName(string name); + string GetQuotedTableName(string tableName, string schema, bool useStrategy); + string GetQuotedTableName(string tableName, string schema = default(string)); + string GetQuotedTableName(ServiceStack.OrmLite.ModelDefinition modelDef); + string GetQuotedValue(string paramValue); + string GetQuotedValue(object value, System.Type fieldType); + string GetRowVersionColumn(ServiceStack.OrmLite.FieldDefinition field, string tablePrefix = default(string)); + ServiceStack.OrmLite.SelectItem GetRowVersionSelectColumn(ServiceStack.OrmLite.FieldDefinition field, string tablePrefix = default(string)); + string GetTableName(string table, string schema, bool useStrategy); + string GetTableName(string table, string schema = default(string)); + string GetTableName(ServiceStack.OrmLite.ModelDefinition modelDef, bool useStrategy); + string GetTableName(ServiceStack.OrmLite.ModelDefinition modelDef); + object GetValue(System.Data.IDataReader reader, int columnIndex, System.Type type); + int GetValues(System.Data.IDataReader reader, object[] values); + bool HasInsertReturnValues(ServiceStack.OrmLite.ModelDefinition modelDef); + void InitQueryParam(System.Data.IDbDataParameter param); + void InitUpdateParam(System.Data.IDbDataParameter param); + System.Threading.Tasks.Task InsertAndGetLastInsertIdAsync(System.Data.IDbCommand dbCmd, System.Threading.CancellationToken token); + string MergeParamsIntoSql(string sql, System.Collections.Generic.IEnumerable dbParams); + ServiceStack.OrmLite.INamingStrategy NamingStrategy { get; set; } + System.Action OnOpenConnection { get; set; } + System.Threading.Tasks.Task OpenAsync(System.Data.IDbConnection db, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Func ParamNameFilter { get; set; } + string ParamString { get; set; } + void PrepareInsertRowStatement(System.Data.IDbCommand dbCmd, System.Collections.Generic.Dictionary args); + bool PrepareParameterizedDeleteStatement(System.Data.IDbCommand cmd, System.Collections.Generic.IDictionary deleteFieldValues); + void PrepareParameterizedInsertStatement(System.Data.IDbCommand cmd, System.Collections.Generic.ICollection insertFields = default(System.Collections.Generic.ICollection), System.Func shouldInclude = default(System.Func)); + bool PrepareParameterizedUpdateStatement(System.Data.IDbCommand cmd, System.Collections.Generic.ICollection updateFields = default(System.Collections.Generic.ICollection)); + void PrepareStoredProcedureStatement(System.Data.IDbCommand cmd, T obj); + void PrepareUpdateRowAddStatement(System.Data.IDbCommand dbCmd, System.Collections.Generic.Dictionary args, string sqlFilter); + void PrepareUpdateRowStatement(System.Data.IDbCommand dbCmd, System.Collections.Generic.Dictionary args, string sqlFilter); + void PrepareUpdateRowStatement(System.Data.IDbCommand dbCmd, object objWithProperties, System.Collections.Generic.ICollection updateFields = default(System.Collections.Generic.ICollection)); + System.Threading.Tasks.Task ReadAsync(System.Data.IDataReader reader, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task> ReaderEach(System.Data.IDataReader reader, System.Func fn, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task ReaderEach(System.Data.IDataReader reader, System.Action fn, Return source, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task ReaderRead(System.Data.IDataReader reader, System.Func fn, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + void RegisterConverter(ServiceStack.OrmLite.IOrmLiteConverter converter); + string SanitizeFieldNameForParamName(string fieldName); + System.Collections.Generic.List SequenceList(System.Type tableType); + System.Threading.Tasks.Task> SequenceListAsync(System.Type tableType, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + void SetParameter(ServiceStack.OrmLite.FieldDefinition fieldDef, System.Data.IDbDataParameter p); + void SetParameterValues(System.Data.IDbCommand dbCmd, object obj); + string SqlBool(bool value); + string SqlCast(object fieldOrValue, string castAs); + string SqlConcat(System.Collections.Generic.IEnumerable args); + string SqlConflict(string sql, string conflictResolution); + string SqlCurrency(string fieldOrValue, string currencySymbol); + string SqlCurrency(string fieldOrValue); + ServiceStack.OrmLite.SqlExpression SqlExpression(); + string SqlLimit(int? offset = default(int?), int? rows = default(int?)); + string SqlRandom { get; } + ServiceStack.Text.IStringSerializer StringSerializer { get; set; } + string ToAddColumnStatement(System.Type modelType, ServiceStack.OrmLite.FieldDefinition fieldDef); + string ToAddForeignKeyStatement(System.Linq.Expressions.Expression> field, System.Linq.Expressions.Expression> foreignField, ServiceStack.OrmLite.OnFkOption onUpdate, ServiceStack.OrmLite.OnFkOption onDelete, string foreignKeyName = default(string)); + string ToAlterColumnStatement(System.Type modelType, ServiceStack.OrmLite.FieldDefinition fieldDef); + string ToChangeColumnNameStatement(System.Type modelType, ServiceStack.OrmLite.FieldDefinition fieldDef, string oldColumnName); + string ToCreateIndexStatement(System.Linq.Expressions.Expression> field, string indexName = default(string), bool unique = default(bool)); + System.Collections.Generic.List ToCreateIndexStatements(System.Type tableType); + string ToCreateSchemaStatement(string schema); + string ToCreateSequenceStatement(System.Type tableType, string sequenceName); + System.Collections.Generic.List ToCreateSequenceStatements(System.Type tableType); + string ToCreateTableStatement(System.Type tableType); + object ToDbValue(object value, System.Type type); + string ToDeleteStatement(System.Type tableType, string sqlFilter, params object[] filterParams); + string ToExecuteProcedureStatement(object objWithProperties); + string ToExistStatement(System.Type fromTableType, object objWithProperties, string sqlFilter, params object[] filterParams); + string ToInsertRowStatement(System.Data.IDbCommand cmd, object objWithProperties, System.Collections.Generic.ICollection insertFields = default(System.Collections.Generic.ICollection)); + string ToInsertStatement(System.Data.IDbCommand dbCmd, T item, System.Collections.Generic.ICollection insertFields = default(System.Collections.Generic.ICollection)); + string ToPostCreateTableStatement(ServiceStack.OrmLite.ModelDefinition modelDef); + string ToPostDropTableStatement(ServiceStack.OrmLite.ModelDefinition modelDef); + string ToRowCountStatement(string innerSql); + string ToSelectFromProcedureStatement(object fromObjWithProperties, System.Type outputModelType, string sqlFilter, params object[] filterParams); + string ToSelectStatement(System.Type tableType, string sqlFilter, params object[] filterParams); + string ToSelectStatement(ServiceStack.OrmLite.ModelDefinition modelDef, string selectExpression, string bodyExpression, string orderByExpression = default(string), int? offset = default(int?), int? rows = default(int?)); + string ToTableNamesStatement(string schema); + string ToTableNamesWithRowCountsStatement(bool live, string schema); + string ToUpdateStatement(System.Data.IDbCommand dbCmd, T item, System.Collections.Generic.ICollection updateFields = default(System.Collections.Generic.ICollection)); + System.Collections.Generic.Dictionary Variables { get; } + } + + // Generated from `ServiceStack.OrmLite.IOrmLiteExecFilter` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IOrmLiteExecFilter + { + System.Data.IDbCommand CreateCommand(System.Data.IDbConnection dbConn); + void DisposeCommand(System.Data.IDbCommand dbCmd, System.Data.IDbConnection dbConn); + void Exec(System.Data.IDbConnection dbConn, System.Action filter); + T Exec(System.Data.IDbConnection dbConn, System.Func filter); + System.Threading.Tasks.Task Exec(System.Data.IDbConnection dbConn, System.Func> filter); + System.Threading.Tasks.Task Exec(System.Data.IDbConnection dbConn, System.Func> filter); + System.Threading.Tasks.Task Exec(System.Data.IDbConnection dbConn, System.Func filter); + System.Data.IDbCommand Exec(System.Data.IDbConnection dbConn, System.Func filter); + System.Collections.Generic.IEnumerable ExecLazy(System.Data.IDbConnection dbConn, System.Func> filter); + ServiceStack.OrmLite.SqlExpression SqlExpression(System.Data.IDbConnection dbConn); + } + + // Generated from `ServiceStack.OrmLite.IOrmLiteResultsFilter` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IOrmLiteResultsFilter + { + int ExecuteSql(System.Data.IDbCommand dbCmd); + System.Collections.Generic.List GetColumn(System.Data.IDbCommand dbCmd); + System.Collections.Generic.HashSet GetColumnDistinct(System.Data.IDbCommand dbCmd); + System.Collections.Generic.Dictionary GetDictionary(System.Data.IDbCommand dbCmd); + System.Collections.Generic.List> GetKeyValuePairs(System.Data.IDbCommand dbCmd); + System.Int64 GetLastInsertId(System.Data.IDbCommand dbCmd); + System.Collections.Generic.List GetList(System.Data.IDbCommand dbCmd); + System.Int64 GetLongScalar(System.Data.IDbCommand dbCmd); + System.Collections.Generic.Dictionary> GetLookup(System.Data.IDbCommand dbCmd); + System.Collections.IList GetRefList(System.Data.IDbCommand dbCmd, System.Type refType); + object GetRefSingle(System.Data.IDbCommand dbCmd, System.Type refType); + object GetScalar(System.Data.IDbCommand dbCmd); + T GetScalar(System.Data.IDbCommand dbCmd); + T GetSingle(System.Data.IDbCommand dbCmd); + } + + // Generated from `ServiceStack.OrmLite.IPropertyInvoker` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IPropertyInvoker + { + System.Func ConvertValueFn { get; set; } + object GetPropertyValue(System.Reflection.PropertyInfo propertyInfo, object fromInstance); + void SetPropertyValue(System.Reflection.PropertyInfo propertyInfo, System.Type fieldType, object onInstance, object withValue); + } + + // Generated from `ServiceStack.OrmLite.ISetDbTransaction` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + internal interface ISetDbTransaction + { + System.Data.IDbTransaction Transaction { get; set; } + } + + // Generated from `ServiceStack.OrmLite.ISqlExpression` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface ISqlExpression + { + System.Collections.Generic.List Params { get; } + string SelectInto(); + string ToSelectStatement(); + } + + // Generated from `ServiceStack.OrmLite.IUntypedApi` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IUntypedApi + { + System.Collections.IEnumerable Cast(System.Collections.IEnumerable results); + System.Data.IDbConnection Db { get; set; } + System.Data.IDbCommand DbCmd { get; set; } + int Delete(object obj, object anonType); + int DeleteAll(); + int DeleteById(object id); + int DeleteByIds(System.Collections.IEnumerable idValues); + int DeleteNonDefaults(object obj, object filter); + System.Int64 Insert(object obj, bool selectIdentity = default(bool)); + System.Int64 Insert(object obj, System.Action commandFilter, bool selectIdentity = default(bool)); + void InsertAll(System.Collections.IEnumerable objs, System.Action commandFilter); + void InsertAll(System.Collections.IEnumerable objs); + bool Save(object obj); + int SaveAll(System.Collections.IEnumerable objs); + System.Threading.Tasks.Task SaveAllAsync(System.Collections.IEnumerable objs, System.Threading.CancellationToken token); + System.Threading.Tasks.Task SaveAsync(object obj, System.Threading.CancellationToken token); + int Update(object obj); + int UpdateAll(System.Collections.IEnumerable objs, System.Action commandFilter); + int UpdateAll(System.Collections.IEnumerable objs); + } + + // Generated from `ServiceStack.OrmLite.IUntypedSqlExpression` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IUntypedSqlExpression : ServiceStack.OrmLite.ISqlExpression + { + ServiceStack.OrmLite.IUntypedSqlExpression AddCondition(string condition, string sqlFilter, params object[] filterParams); + ServiceStack.OrmLite.IUntypedSqlExpression And(System.Linq.Expressions.Expression> predicate); + ServiceStack.OrmLite.IUntypedSqlExpression And(System.Linq.Expressions.Expression> predicate); + ServiceStack.OrmLite.IUntypedSqlExpression And(string sqlFilter, params object[] filterParams); + string BodyExpression { get; } + ServiceStack.OrmLite.IUntypedSqlExpression ClearLimits(); + ServiceStack.OrmLite.IUntypedSqlExpression Clone(); + System.Data.IDbDataParameter CreateParam(string name, object value = default(object), System.Data.ParameterDirection direction = default(System.Data.ParameterDirection), System.Data.DbType? dbType = default(System.Data.DbType?)); + ServiceStack.OrmLite.IUntypedSqlExpression CrossJoin(System.Linq.Expressions.Expression> joinExpr = default(System.Linq.Expressions.Expression>)); + ServiceStack.OrmLite.IUntypedSqlExpression CustomJoin(string joinString); + ServiceStack.OrmLite.IOrmLiteDialectProvider DialectProvider { get; set; } + ServiceStack.OrmLite.IUntypedSqlExpression Ensure(System.Linq.Expressions.Expression> predicate); + ServiceStack.OrmLite.IUntypedSqlExpression Ensure(System.Linq.Expressions.Expression> predicate); + ServiceStack.OrmLite.IUntypedSqlExpression Ensure(string sqlFilter, params object[] filterParams); + System.Tuple FirstMatchingField(string fieldName); + ServiceStack.OrmLite.IUntypedSqlExpression From(string tables); + string FromExpression { get; set; } + ServiceStack.OrmLite.IUntypedSqlExpression FullJoin(System.Linq.Expressions.Expression> joinExpr = default(System.Linq.Expressions.Expression>)); + System.Collections.Generic.IList GetAllFields(); + ServiceStack.OrmLite.ModelDefinition GetModelDefinition(ServiceStack.OrmLite.FieldDefinition fieldDef); + ServiceStack.OrmLite.IUntypedSqlExpression GroupBy(string groupBy); + ServiceStack.OrmLite.IUntypedSqlExpression GroupBy(); + string GroupByExpression { get; set; } + ServiceStack.OrmLite.IUntypedSqlExpression Having(string sqlFilter, params object[] filterParams); + ServiceStack.OrmLite.IUntypedSqlExpression Having(); + string HavingExpression { get; set; } + ServiceStack.OrmLite.IUntypedSqlExpression Insert(System.Collections.Generic.List insertFields); + ServiceStack.OrmLite.IUntypedSqlExpression Insert(); + System.Collections.Generic.List InsertFields { get; set; } + ServiceStack.OrmLite.IUntypedSqlExpression Join(System.Linq.Expressions.Expression> joinExpr = default(System.Linq.Expressions.Expression>)); + ServiceStack.OrmLite.IUntypedSqlExpression Join(System.Type sourceType, System.Type targetType, System.Linq.Expressions.Expression joinExpr = default(System.Linq.Expressions.Expression)); + ServiceStack.OrmLite.IUntypedSqlExpression LeftJoin(System.Linq.Expressions.Expression> joinExpr = default(System.Linq.Expressions.Expression>)); + ServiceStack.OrmLite.IUntypedSqlExpression LeftJoin(System.Type sourceType, System.Type targetType, System.Linq.Expressions.Expression joinExpr = default(System.Linq.Expressions.Expression)); + ServiceStack.OrmLite.IUntypedSqlExpression Limit(int? skip, int? rows); + ServiceStack.OrmLite.IUntypedSqlExpression Limit(int skip, int rows); + ServiceStack.OrmLite.IUntypedSqlExpression Limit(int rows); + ServiceStack.OrmLite.IUntypedSqlExpression Limit(); + ServiceStack.OrmLite.ModelDefinition ModelDef { get; } + int? Offset { get; set; } + ServiceStack.OrmLite.IUntypedSqlExpression Or(System.Linq.Expressions.Expression> predicate); + ServiceStack.OrmLite.IUntypedSqlExpression Or(System.Linq.Expressions.Expression> predicate); + ServiceStack.OrmLite.IUntypedSqlExpression Or(string sqlFilter, params object[] filterParams); + ServiceStack.OrmLite.IUntypedSqlExpression OrderBy
    (System.Linq.Expressions.Expression> keySelector); + ServiceStack.OrmLite.IUntypedSqlExpression OrderBy(string orderBy); + ServiceStack.OrmLite.IUntypedSqlExpression OrderBy(); + ServiceStack.OrmLite.IUntypedSqlExpression OrderByDescending
    (System.Linq.Expressions.Expression> keySelector); + ServiceStack.OrmLite.IUntypedSqlExpression OrderByDescending(string orderBy); + string OrderByExpression { get; set; } + ServiceStack.OrmLite.IUntypedSqlExpression OrderByFields(params string[] fieldNames); + ServiceStack.OrmLite.IUntypedSqlExpression OrderByFields(params ServiceStack.OrmLite.FieldDefinition[] fields); + ServiceStack.OrmLite.IUntypedSqlExpression OrderByFieldsDescending(params string[] fieldNames); + ServiceStack.OrmLite.IUntypedSqlExpression OrderByFieldsDescending(params ServiceStack.OrmLite.FieldDefinition[] fields); + bool PrefixFieldWithTableName { get; set; } + ServiceStack.OrmLite.IUntypedSqlExpression RightJoin(System.Linq.Expressions.Expression> joinExpr = default(System.Linq.Expressions.Expression>)); + int? Rows { get; set; } + ServiceStack.OrmLite.IUntypedSqlExpression Select(System.Linq.Expressions.Expression> fields); + ServiceStack.OrmLite.IUntypedSqlExpression Select(System.Linq.Expressions.Expression> fields); + ServiceStack.OrmLite.IUntypedSqlExpression Select(string selectExpression); + ServiceStack.OrmLite.IUntypedSqlExpression Select(); + ServiceStack.OrmLite.IUntypedSqlExpression SelectDistinct(System.Linq.Expressions.Expression> fields); + ServiceStack.OrmLite.IUntypedSqlExpression SelectDistinct(System.Linq.Expressions.Expression> fields); + ServiceStack.OrmLite.IUntypedSqlExpression SelectDistinct(); + string SelectExpression { get; set; } + ServiceStack.OrmLite.IUntypedSqlExpression Skip(int? skip = default(int?)); + string SqlColumn(string columnName); + string SqlTable(ServiceStack.OrmLite.ModelDefinition modelDef); + string TableAlias { get; set; } + ServiceStack.OrmLite.IUntypedSqlExpression Take(int? take = default(int?)); + ServiceStack.OrmLite.IUntypedSqlExpression ThenBy
    (System.Linq.Expressions.Expression> keySelector); + ServiceStack.OrmLite.IUntypedSqlExpression ThenBy(string orderBy); + ServiceStack.OrmLite.IUntypedSqlExpression ThenByDescending
    (System.Linq.Expressions.Expression> keySelector); + ServiceStack.OrmLite.IUntypedSqlExpression ThenByDescending(string orderBy); + string ToCountStatement(); + string ToDeleteRowStatement(); + ServiceStack.OrmLite.IUntypedSqlExpression UnsafeAnd(string rawSql, params object[] filterParams); + ServiceStack.OrmLite.IUntypedSqlExpression UnsafeFrom(string rawFrom); + ServiceStack.OrmLite.IUntypedSqlExpression UnsafeOr(string rawSql, params object[] filterParams); + ServiceStack.OrmLite.IUntypedSqlExpression UnsafeSelect(string rawSelect); + ServiceStack.OrmLite.IUntypedSqlExpression UnsafeWhere(string rawSql, params object[] filterParams); + ServiceStack.OrmLite.IUntypedSqlExpression Update(System.Collections.Generic.List updateFields); + ServiceStack.OrmLite.IUntypedSqlExpression Update(); + System.Collections.Generic.List UpdateFields { get; set; } + ServiceStack.OrmLite.IUntypedSqlExpression Where(System.Linq.Expressions.Expression> predicate); + ServiceStack.OrmLite.IUntypedSqlExpression Where(System.Linq.Expressions.Expression> predicate); + ServiceStack.OrmLite.IUntypedSqlExpression Where(string sqlFilter, params object[] filterParams); + ServiceStack.OrmLite.IUntypedSqlExpression Where(); + string WhereExpression { get; set; } + bool WhereStatementWithoutWhereString { get; set; } + } + + // Generated from `ServiceStack.OrmLite.IndexFieldsCacheKey` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class IndexFieldsCacheKey + { + public ServiceStack.OrmLite.IOrmLiteDialectProvider Dialect { get => throw null; set => throw null; } + public override bool Equals(object obj) => throw null; + public System.Collections.Generic.List Fields { get => throw null; set => throw null; } + public override int GetHashCode() => throw null; + public IndexFieldsCacheKey(System.Data.IDataReader reader, ServiceStack.OrmLite.ModelDefinition modelDefinition, ServiceStack.OrmLite.IOrmLiteDialectProvider dialect) => throw null; + public ServiceStack.OrmLite.ModelDefinition ModelDefinition { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.OrmLite.JoinFormatDelegate` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public delegate string JoinFormatDelegate(ServiceStack.OrmLite.IOrmLiteDialectProvider dialect, ServiceStack.OrmLite.ModelDefinition tableDef, string joinExpr); + + // Generated from `ServiceStack.OrmLite.LowercaseUnderscoreNamingStrategy` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class LowercaseUnderscoreNamingStrategy : ServiceStack.OrmLite.OrmLiteNamingStrategyBase + { + public override string GetColumnName(string name) => throw null; + public override string GetTableName(string name) => throw null; + public LowercaseUnderscoreNamingStrategy() => throw null; + } + + // Generated from `ServiceStack.OrmLite.Messages` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class Messages + { + public const string LegacyApi = default; + } + + // Generated from `ServiceStack.OrmLite.ModelDefinition` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ModelDefinition + { + public void AfterInit() => throw null; + public string Alias { get => throw null; set => throw null; } + public ServiceStack.OrmLite.FieldDefinition[] AllFieldDefinitionsArray { get => throw null; set => throw null; } + public ServiceStack.OrmLite.FieldDefinition AssertFieldDefinition(string fieldName, System.Func sanitizeFieldName) => throw null; + public ServiceStack.OrmLite.FieldDefinition AssertFieldDefinition(string fieldName) => throw null; + public ServiceStack.OrmLite.FieldDefinition[] AutoIdFields { get => throw null; set => throw null; } + public System.Collections.Generic.List CompositeIndexes { get => throw null; set => throw null; } + public System.Collections.Generic.List FieldDefinitions { get => throw null; set => throw null; } + public ServiceStack.OrmLite.FieldDefinition[] FieldDefinitionsArray { get => throw null; set => throw null; } + public ServiceStack.OrmLite.FieldDefinition[] FieldDefinitionsWithAliases { get => throw null; set => throw null; } + public System.Collections.Generic.List GetAutoIdFieldDefinitions() => throw null; + public ServiceStack.OrmLite.FieldDefinition GetFieldDefinition(System.Linq.Expressions.Expression> field) => throw null; + public ServiceStack.OrmLite.FieldDefinition GetFieldDefinition(string fieldName, System.Func sanitizeFieldName) => throw null; + public ServiceStack.OrmLite.FieldDefinition GetFieldDefinition(string fieldName) => throw null; + public ServiceStack.OrmLite.FieldDefinition GetFieldDefinition(System.Func predicate) => throw null; + public System.Collections.Generic.Dictionary GetFieldDefinitionMap(System.Func sanitizeFieldName) => throw null; + public ServiceStack.OrmLite.FieldDefinition[] GetOrderedFieldDefinitions(System.Collections.Generic.ICollection fieldNames, System.Func sanitizeFieldName = default(System.Func)) => throw null; + public object GetPrimaryKey(object instance) => throw null; + public string GetQuotedName(string fieldName, ServiceStack.OrmLite.IOrmLiteDialectProvider dialectProvider) => throw null; + public bool HasAutoIncrementId { get => throw null; } + public bool HasSequenceAttribute { get => throw null; } + public System.Collections.Generic.List IgnoredFieldDefinitions { get => throw null; set => throw null; } + public ServiceStack.OrmLite.FieldDefinition[] IgnoredFieldDefinitionsArray { get => throw null; set => throw null; } + public bool IsInSchema { get => throw null; } + public bool IsRefField(ServiceStack.OrmLite.FieldDefinition fieldDef) => throw null; + public ModelDefinition() => throw null; + public string ModelName { get => throw null; } + public System.Type ModelType { get => throw null; set => throw null; } + public string Name { get => throw null; set => throw null; } + public string PostCreateTableSql { get => throw null; set => throw null; } + public string PostDropTableSql { get => throw null; set => throw null; } + public string PreCreateTableSql { get => throw null; set => throw null; } + public string PreDropTableSql { get => throw null; set => throw null; } + public ServiceStack.OrmLite.FieldDefinition PrimaryKey { get => throw null; } + public ServiceStack.OrmLite.FieldDefinition RowVersion { get => throw null; set => throw null; } + public const string RowVersionName = default; + public string Schema { get => throw null; set => throw null; } + public override string ToString() => throw null; + public System.Collections.Generic.List UniqueConstraints { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.OrmLite.ModelDefinition<>` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class ModelDefinition + { + public static ServiceStack.OrmLite.ModelDefinition Definition { get => throw null; } + public static string PrimaryKeyName { get => throw null; } + } + + // Generated from `ServiceStack.OrmLite.NativeValueOrmLiteConverter` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public abstract class NativeValueOrmLiteConverter : ServiceStack.OrmLite.OrmLiteConverter + { + protected NativeValueOrmLiteConverter() => throw null; + public override string ToQuotedString(System.Type fieldType, object value) => throw null; + } + + // Generated from `ServiceStack.OrmLite.ObjectRow` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public struct ObjectRow : ServiceStack.OrmLite.IDynamicRow, ServiceStack.OrmLite.IDynamicRow + { + public object Fields { get => throw null; } + public ObjectRow(System.Type type, object fields) => throw null; + // Stub generator skipped constructor + public System.Type Type { get => throw null; } + } + + // Generated from `ServiceStack.OrmLite.OnFkOption` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public enum OnFkOption + { + Cascade, + NoAction, + Restrict, + SetDefault, + SetNull, + } + + // Generated from `ServiceStack.OrmLite.OrmLiteCommand` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class OrmLiteCommand : System.IDisposable, System.Data.IDbCommand, ServiceStack.OrmLite.IHasDialectProvider, ServiceStack.Data.IHasDbCommand + { + public void Cancel() => throw null; + public string CommandText { get => throw null; set => throw null; } + public int CommandTimeout { get => throw null; set => throw null; } + public System.Data.CommandType CommandType { get => throw null; set => throw null; } + public System.Data.IDbConnection Connection { get => throw null; set => throw null; } + public System.Data.IDbDataParameter CreateParameter() => throw null; + public System.Data.IDbCommand DbCommand { get => throw null; } + public ServiceStack.OrmLite.IOrmLiteDialectProvider DialectProvider { get => throw null; set => throw null; } + public void Dispose() => throw null; + public int ExecuteNonQuery() => throw null; + public System.Data.IDataReader ExecuteReader(System.Data.CommandBehavior behavior) => throw null; + public System.Data.IDataReader ExecuteReader() => throw null; + public object ExecuteScalar() => throw null; + public bool IsDisposed { get => throw null; set => throw null; } + public OrmLiteCommand(ServiceStack.OrmLite.OrmLiteConnection dbConn, System.Data.IDbCommand dbCmd) => throw null; + public System.Data.IDataParameterCollection Parameters { get => throw null; } + public void Prepare() => throw null; + public System.Data.IDbTransaction Transaction { get => throw null; set => throw null; } + public System.Data.UpdateRowSource UpdatedRowSource { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.OrmLite.OrmLiteConfig` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class OrmLiteConfig + { + public static System.Action AfterExecFilter { get => throw null; set => throw null; } + public static System.Action BeforeExecFilter { get => throw null; set => throw null; } + public static void ClearCache() => throw null; + public static int CommandTimeout { get => throw null; set => throw null; } + public static bool DeoptimizeReader { get => throw null; set => throw null; } + public static ServiceStack.OrmLite.IOrmLiteDialectProvider Dialect(this System.Data.IDbConnection db) => throw null; + public static ServiceStack.OrmLite.IOrmLiteDialectProvider Dialect(this System.Data.IDbCommand dbCmd) => throw null; + public static ServiceStack.OrmLite.IOrmLiteDialectProvider DialectProvider { get => throw null; set => throw null; } + public static bool DisableColumnGuessFallback { get => throw null; set => throw null; } + public static System.Action ExceptionFilter { get => throw null; set => throw null; } + public static ServiceStack.OrmLite.IOrmLiteExecFilter ExecFilter { get => throw null; set => throw null; } + public static ServiceStack.OrmLite.IOrmLiteDialectProvider GetDialectProvider(this System.Data.IDbConnection db) => throw null; + public static ServiceStack.OrmLite.IOrmLiteDialectProvider GetDialectProvider(this System.Data.IDbCommand dbCmd) => throw null; + public static ServiceStack.OrmLite.IOrmLiteExecFilter GetExecFilter(this System.Data.IDbConnection db) => throw null; + public static ServiceStack.OrmLite.IOrmLiteExecFilter GetExecFilter(this System.Data.IDbCommand dbCmd) => throw null; + public static ServiceStack.OrmLite.IOrmLiteExecFilter GetExecFilter(this ServiceStack.OrmLite.IOrmLiteDialectProvider dialectProvider) => throw null; + public static ServiceStack.OrmLite.ModelDefinition GetModelMetadata(this System.Type modelType) => throw null; + public const string IdField = default; + public static bool IncludeTablePrefixes { get => throw null; set => throw null; } + public static System.Action InsertFilter { get => throw null; set => throw null; } + public static bool IsCaseInsensitive { get => throw null; set => throw null; } + public static System.Func LoadReferenceSelectFilter { get => throw null; set => throw null; } + public static System.Func OnDbNullFilter { get => throw null; set => throw null; } + public static System.Action OnModelDefinitionInit { get => throw null; set => throw null; } + public static System.Data.IDbConnection OpenDbConnection(this string dbConnectionStringOrFilePath) => throw null; + public static System.Data.IDbConnection OpenReadOnlyDbConnection(this string dbConnectionStringOrFilePath) => throw null; + public static System.Func ParamNameFilter { get => throw null; set => throw null; } + public static System.Action PopulatedObjectFilter { get => throw null; set => throw null; } + public static void ResetLogFactory(ServiceStack.Logging.ILogFactory logFactory = default(ServiceStack.Logging.ILogFactory)) => throw null; + public static ServiceStack.OrmLite.IOrmLiteResultsFilter ResultsFilter { get => throw null; set => throw null; } + public static System.Func SanitizeFieldNameForParamNameFn; + public static void SetCommandTimeout(this System.Data.IDbConnection db, int? commandTimeout) => throw null; + public static void SetLastCommandText(this System.Data.IDbConnection db, string sql) => throw null; + public static bool SkipForeignKeys { get => throw null; set => throw null; } + public static System.Action SqlExpressionInitFilter { get => throw null; set => throw null; } + public static System.Action SqlExpressionSelectFilter { get => throw null; set => throw null; } + public static System.Func StringFilter { get => throw null; set => throw null; } + public static bool StripUpperInLike { get => throw null; set => throw null; } + public static bool ThrowOnError { get => throw null; set => throw null; } + public static System.Data.IDbConnection ToDbConnection(this string dbConnectionStringOrFilePath, ServiceStack.OrmLite.IOrmLiteDialectProvider dialectProvider) => throw null; + public static System.Data.IDbConnection ToDbConnection(this string dbConnectionStringOrFilePath) => throw null; + public static System.Action UpdateFilter { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.OrmLite.OrmLiteConflictResolutions` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class OrmLiteConflictResolutions + { + public static void OnConflict(this System.Data.IDbCommand dbCmd, string conflictResolution) => throw null; + public static void OnConflictIgnore(this System.Data.IDbCommand dbCmd) => throw null; + } + + // Generated from `ServiceStack.OrmLite.OrmLiteConnection` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class OrmLiteConnection : System.IDisposable, System.Data.IDbConnection, ServiceStack.OrmLite.IHasDialectProvider, ServiceStack.Data.IHasDbTransaction, ServiceStack.Data.IHasDbConnection + { + public bool AutoDisposeConnection { get => throw null; set => throw null; } + public System.Data.IDbTransaction BeginTransaction(System.Data.IsolationLevel isolationLevel) => throw null; + public System.Data.IDbTransaction BeginTransaction() => throw null; + public void ChangeDatabase(string databaseName) => throw null; + public void Close() => throw null; + public int? CommandTimeout { get => throw null; set => throw null; } + public string ConnectionString { get => throw null; set => throw null; } + public int ConnectionTimeout { get => throw null; } + public System.Data.IDbCommand CreateCommand() => throw null; + public string Database { get => throw null; } + public System.Data.IDbConnection DbConnection { get => throw null; } + public System.Data.IDbTransaction DbTransaction { get => throw null; } + public ServiceStack.OrmLite.IOrmLiteDialectProvider DialectProvider { get => throw null; set => throw null; } + public void Dispose() => throw null; + public ServiceStack.OrmLite.OrmLiteConnectionFactory Factory; + public string LastCommandText { get => throw null; set => throw null; } + public void Open() => throw null; + public System.Threading.Tasks.Task OpenAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public OrmLiteConnection(ServiceStack.OrmLite.OrmLiteConnectionFactory factory) => throw null; + public System.Data.ConnectionState State { get => throw null; } + public System.Data.IDbTransaction Transaction { get => throw null; set => throw null; } + public static explicit operator System.Data.Common.DbConnection(ServiceStack.OrmLite.OrmLiteConnection dbConn) => throw null; + } + + // Generated from `ServiceStack.OrmLite.OrmLiteConnectionFactory` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class OrmLiteConnectionFactory : ServiceStack.Data.IDbConnectionFactoryExtended, ServiceStack.Data.IDbConnectionFactory + { + public System.Data.IDbCommand AlwaysReturnCommand { get => throw null; set => throw null; } + public System.Data.IDbTransaction AlwaysReturnTransaction { get => throw null; set => throw null; } + public bool AutoDisposeConnection { get => throw null; set => throw null; } + public System.Func ConnectionFilter { get => throw null; set => throw null; } + public string ConnectionString { get => throw null; set => throw null; } + public virtual System.Data.IDbConnection CreateDbConnection() => throw null; + public static System.Data.IDbConnection CreateDbConnection(string namedConnection) => throw null; + public ServiceStack.OrmLite.IOrmLiteDialectProvider DialectProvider { get => throw null; set => throw null; } + public static System.Collections.Generic.Dictionary DialectProviders { get => throw null; } + public static System.Collections.Generic.Dictionary NamedConnections { get => throw null; } + public System.Action OnDispose { get => throw null; set => throw null; } + public virtual System.Data.IDbConnection OpenDbConnection(string namedConnection) => throw null; + public virtual System.Data.IDbConnection OpenDbConnection() => throw null; + public virtual System.Threading.Tasks.Task OpenDbConnectionAsync(string namedConnection, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public virtual System.Threading.Tasks.Task OpenDbConnectionAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public virtual System.Data.IDbConnection OpenDbConnectionString(string connectionString, string providerName) => throw null; + public virtual System.Data.IDbConnection OpenDbConnectionString(string connectionString) => throw null; + public virtual System.Threading.Tasks.Task OpenDbConnectionStringAsync(string connectionString, string providerName, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public virtual System.Threading.Tasks.Task OpenDbConnectionStringAsync(string connectionString, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public OrmLiteConnectionFactory(string connectionString, ServiceStack.OrmLite.IOrmLiteDialectProvider dialectProvider, bool setGlobalDialectProvider) => throw null; + public OrmLiteConnectionFactory(string connectionString, ServiceStack.OrmLite.IOrmLiteDialectProvider dialectProvider) => throw null; + public OrmLiteConnectionFactory(string connectionString) => throw null; + public OrmLiteConnectionFactory() => throw null; + public virtual void RegisterConnection(string namedConnection, string connectionString, ServiceStack.OrmLite.IOrmLiteDialectProvider dialectProvider) => throw null; + public virtual void RegisterConnection(string namedConnection, ServiceStack.OrmLite.OrmLiteConnectionFactory connectionFactory) => throw null; + public virtual void RegisterDialectProvider(string providerName, ServiceStack.OrmLite.IOrmLiteDialectProvider dialectProvider) => throw null; + } + + // Generated from `ServiceStack.OrmLite.OrmLiteConnectionFactoryExtensions` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class OrmLiteConnectionFactoryExtensions + { + public static ServiceStack.OrmLite.IOrmLiteDialectProvider GetDialectProvider(this ServiceStack.Data.IDbConnectionFactory connectionFactory, string providerName = default(string), string namedConnection = default(string)) => throw null; + public static ServiceStack.OrmLite.IOrmLiteDialectProvider GetDialectProvider(this ServiceStack.Data.IDbConnectionFactory connectionFactory, ServiceStack.ConnectionInfo dbInfo) => throw null; + public static System.Data.IDbConnection Open(this ServiceStack.Data.IDbConnectionFactory connectionFactory, string namedConnection) => throw null; + public static System.Data.IDbConnection Open(this ServiceStack.Data.IDbConnectionFactory connectionFactory) => throw null; + public static System.Threading.Tasks.Task OpenAsync(this ServiceStack.Data.IDbConnectionFactory connectionFactory, string namedConnection, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task OpenAsync(this ServiceStack.Data.IDbConnectionFactory connectionFactory, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Data.IDbConnection OpenDbConnection(this ServiceStack.Data.IDbConnectionFactory dbFactory, ServiceStack.ConnectionInfo connInfo) => throw null; + public static System.Data.IDbConnection OpenDbConnection(this ServiceStack.Data.IDbConnectionFactory connectionFactory, string namedConnection) => throw null; + public static System.Threading.Tasks.Task OpenDbConnectionAsync(this ServiceStack.Data.IDbConnectionFactory dbFactory, ServiceStack.ConnectionInfo connInfo) => throw null; + public static System.Threading.Tasks.Task OpenDbConnectionAsync(this ServiceStack.Data.IDbConnectionFactory connectionFactory, string namedConnection, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task OpenDbConnectionAsync(this ServiceStack.Data.IDbConnectionFactory connectionFactory, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Data.IDbConnection OpenDbConnectionString(this ServiceStack.Data.IDbConnectionFactory connectionFactory, string connectionString, string providerName) => throw null; + public static System.Data.IDbConnection OpenDbConnectionString(this ServiceStack.Data.IDbConnectionFactory connectionFactory, string connectionString) => throw null; + public static System.Threading.Tasks.Task OpenDbConnectionStringAsync(this ServiceStack.Data.IDbConnectionFactory connectionFactory, string connectionString, string providerName, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task OpenDbConnectionStringAsync(this ServiceStack.Data.IDbConnectionFactory connectionFactory, string connectionString, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static void RegisterConnection(this ServiceStack.Data.IDbConnectionFactory dbFactory, string namedConnection, string connectionString, ServiceStack.OrmLite.IOrmLiteDialectProvider dialectProvider) => throw null; + public static void RegisterConnection(this ServiceStack.Data.IDbConnectionFactory dbFactory, string namedConnection, ServiceStack.OrmLite.OrmLiteConnectionFactory connectionFactory) => throw null; + public static System.Data.IDbCommand ToDbCommand(this System.Data.IDbCommand dbCmd) => throw null; + public static System.Data.IDbConnection ToDbConnection(this System.Data.IDbConnection db) => throw null; + public static System.Data.IDbTransaction ToDbTransaction(this System.Data.IDbTransaction dbTrans) => throw null; + } + + // Generated from `ServiceStack.OrmLite.OrmLiteConnectionUtils` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class OrmLiteConnectionUtils + { + public static System.Data.IDbTransaction GetTransaction(this System.Data.IDbConnection db) => throw null; + public static bool InTransaction(this System.Data.IDbConnection db) => throw null; + } + + // Generated from `ServiceStack.OrmLite.OrmLiteContext` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class OrmLiteContext + { + public void ClearItems() => throw null; + public static System.Collections.IDictionary ContextItems; + public static ServiceStack.OrmLite.OrmLiteState CreateNewState() => throw null; + public T GetOrCreate(System.Func createFn) => throw null; + public static ServiceStack.OrmLite.OrmLiteState GetOrCreateState() => throw null; + public static ServiceStack.OrmLite.OrmLiteContext Instance; + public virtual System.Collections.IDictionary Items { get => throw null; set => throw null; } + public OrmLiteContext() => throw null; + public static ServiceStack.OrmLite.OrmLiteState OrmLiteState { get => throw null; set => throw null; } + public static bool UseThreadStatic; + } + + // Generated from `ServiceStack.OrmLite.OrmLiteConverter` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public abstract class OrmLiteConverter : ServiceStack.OrmLite.IOrmLiteConverter + { + public abstract string ColumnDefinition { get; } + public virtual System.Data.DbType DbType { get => throw null; } + public ServiceStack.OrmLite.IOrmLiteDialectProvider DialectProvider { get => throw null; set => throw null; } + public virtual object FromDbValue(System.Type fieldType, object value) => throw null; + public virtual object GetValue(System.Data.IDataReader reader, int columnIndex, object[] values) => throw null; + public virtual void InitDbParam(System.Data.IDbDataParameter p, System.Type fieldType) => throw null; + public static ServiceStack.Logging.ILog Log; + protected OrmLiteConverter() => throw null; + public virtual object ToDbValue(System.Type fieldType, object value) => throw null; + public virtual string ToQuotedString(System.Type fieldType, object value) => throw null; + } + + // Generated from `ServiceStack.OrmLite.OrmLiteConverterExtensions` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class OrmLiteConverterExtensions + { + public static object ConvertNumber(this ServiceStack.OrmLite.IOrmLiteDialectProvider dialectProvider, System.Type toIntegerType, object value) => throw null; + public static object ConvertNumber(this ServiceStack.OrmLite.IOrmLiteConverter converter, System.Type toIntegerType, object value) => throw null; + } + + // Generated from `ServiceStack.OrmLite.OrmLiteDataParameter` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class OrmLiteDataParameter : System.Data.IDbDataParameter, System.Data.IDataParameter + { + public System.Data.DbType DbType { get => throw null; set => throw null; } + public System.Data.ParameterDirection Direction { get => throw null; set => throw null; } + public bool IsNullable { get => throw null; set => throw null; } + public OrmLiteDataParameter() => throw null; + public string ParameterName { get => throw null; set => throw null; } + public System.Byte Precision { get => throw null; set => throw null; } + public System.Byte Scale { get => throw null; set => throw null; } + public int Size { get => throw null; set => throw null; } + public string SourceColumn { get => throw null; set => throw null; } + public System.Data.DataRowVersion SourceVersion { get => throw null; set => throw null; } + public object Value { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.OrmLite.OrmLiteDialectProviderBase<>` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public abstract class OrmLiteDialectProviderBase : ServiceStack.OrmLite.IOrmLiteDialectProvider where TDialect : ServiceStack.OrmLite.IOrmLiteDialectProvider + { + protected System.Data.IDbDataParameter AddParameter(System.Data.IDbCommand cmd, ServiceStack.OrmLite.FieldDefinition fieldDef) => throw null; + public virtual void AppendFieldCondition(System.Text.StringBuilder sqlFilter, ServiceStack.OrmLite.FieldDefinition fieldDef, System.Data.IDbCommand cmd) => throw null; + public virtual void AppendNullFieldCondition(System.Text.StringBuilder sqlFilter, ServiceStack.OrmLite.FieldDefinition fieldDef) => throw null; + public string AutoIncrementDefinition; + public virtual string ColumnNameOnly(string columnExpr) => throw null; + public System.Collections.Generic.Dictionary Converters; + public abstract System.Data.IDbConnection CreateConnection(string filePath, System.Collections.Generic.Dictionary options); + public abstract System.Data.IDbDataParameter CreateParam(); + public System.Data.IDbCommand CreateParameterizedDeleteStatement(System.Data.IDbConnection connection, object objWithProperties) => throw null; + public System.Func> CreateTableFieldsStrategy { get => throw null; set => throw null; } + public ServiceStack.OrmLite.Converters.DecimalConverter DecimalConverter { get => throw null; } + public string DefaultValueFormat; + public virtual void DisableForeignKeysCheck(System.Data.IDbCommand cmd) => throw null; + public virtual System.Threading.Tasks.Task DisableForeignKeysCheckAsync(System.Data.IDbCommand cmd, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public virtual void DisableIdentityInsert(System.Data.IDbCommand cmd) => throw null; + public virtual System.Threading.Tasks.Task DisableIdentityInsertAsync(System.Data.IDbCommand cmd, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public virtual bool DoesColumnExist(System.Data.IDbConnection db, string columnName, string tableName, string schema = default(string)) => throw null; + public virtual System.Threading.Tasks.Task DoesColumnExistAsync(System.Data.IDbConnection db, string columnName, string tableName, string schema = default(string), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public abstract bool DoesSchemaExist(System.Data.IDbCommand dbCmd, string schemaName); + public virtual System.Threading.Tasks.Task DoesSchemaExistAsync(System.Data.IDbCommand dbCmd, string schema, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public virtual bool DoesSequenceExist(System.Data.IDbCommand dbCmd, string sequenceName) => throw null; + public virtual System.Threading.Tasks.Task DoesSequenceExistAsync(System.Data.IDbCommand dbCmd, string sequenceName, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public virtual bool DoesTableExist(System.Data.IDbConnection db, string tableName, string schema = default(string)) => throw null; + public virtual bool DoesTableExist(System.Data.IDbCommand dbCmd, string tableName, string schema = default(string)) => throw null; + public virtual System.Threading.Tasks.Task DoesTableExistAsync(System.Data.IDbConnection db, string tableName, string schema = default(string), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public virtual System.Threading.Tasks.Task DoesTableExistAsync(System.Data.IDbCommand dbCmd, string tableName, string schema = default(string), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public virtual void DropColumn(System.Data.IDbConnection db, System.Type modelType, string columnName) => throw null; + public virtual void EnableForeignKeysCheck(System.Data.IDbCommand cmd) => throw null; + public virtual System.Threading.Tasks.Task EnableForeignKeysCheckAsync(System.Data.IDbCommand cmd, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public virtual void EnableIdentityInsert(System.Data.IDbCommand cmd) => throw null; + public virtual System.Threading.Tasks.Task EnableIdentityInsertAsync(System.Data.IDbCommand cmd, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public ServiceStack.OrmLite.Converters.EnumConverter EnumConverter { get => throw null; set => throw null; } + public virtual string EscapeWildcards(string value) => throw null; + public ServiceStack.OrmLite.IOrmLiteExecFilter ExecFilter { get => throw null; set => throw null; } + public virtual System.Threading.Tasks.Task ExecuteNonQueryAsync(System.Data.IDbCommand cmd, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public virtual System.Threading.Tasks.Task ExecuteReaderAsync(System.Data.IDbCommand cmd, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public virtual System.Threading.Tasks.Task ExecuteScalarAsync(System.Data.IDbCommand cmd, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + protected virtual string FkOptionToString(ServiceStack.OrmLite.OnFkOption option) => throw null; + public virtual object FromDbRowVersion(System.Type fieldType, object value) => throw null; + public virtual object FromDbValue(object value, System.Type type) => throw null; + public virtual string GetAutoIdDefaultValue(ServiceStack.OrmLite.FieldDefinition fieldDef) => throw null; + public virtual string GetCheckConstraint(ServiceStack.OrmLite.ModelDefinition modelDef, ServiceStack.OrmLite.FieldDefinition fieldDef) => throw null; + public virtual string GetColumnDefinition(ServiceStack.OrmLite.FieldDefinition fieldDef) => throw null; + public virtual string GetColumnNames(ServiceStack.OrmLite.ModelDefinition modelDef) => throw null; + public virtual ServiceStack.OrmLite.SelectItem[] GetColumnNames(ServiceStack.OrmLite.ModelDefinition modelDef, string tablePrefix) => throw null; + public string GetColumnTypeDefinition(System.Type columnType, int? fieldLength, int? scale) => throw null; + protected virtual string GetCompositeIndexName(ServiceStack.DataAnnotations.CompositeIndexAttribute compositeIndex, ServiceStack.OrmLite.ModelDefinition modelDef) => throw null; + protected virtual string GetCompositeIndexNameWithSchema(ServiceStack.DataAnnotations.CompositeIndexAttribute compositeIndex, ServiceStack.OrmLite.ModelDefinition modelDef) => throw null; + public ServiceStack.OrmLite.IOrmLiteConverter GetConverter(System.Type type) => throw null; + public virtual ServiceStack.OrmLite.IOrmLiteConverter GetConverterBestMatch(ServiceStack.OrmLite.FieldDefinition fieldDef) => throw null; + public ServiceStack.OrmLite.IOrmLiteConverter GetConverterBestMatch(System.Type type) => throw null; + public virtual string GetDefaultValue(ServiceStack.OrmLite.FieldDefinition fieldDef) => throw null; + public string GetDefaultValue(System.Type tableType, string fieldName) => throw null; + public virtual string GetDropForeignKeyConstraints(ServiceStack.OrmLite.ModelDefinition modelDef) => throw null; + public System.Collections.Generic.Dictionary GetFieldDefinitionMap(ServiceStack.OrmLite.ModelDefinition modelDef) => throw null; + public static System.Collections.Generic.List GetFieldDefinitions(ServiceStack.OrmLite.ModelDefinition modelDef) => throw null; + public object GetFieldValue(System.Type fieldType, object value) => throw null; + public object GetFieldValue(ServiceStack.OrmLite.FieldDefinition fieldDef, object value) => throw null; + public virtual string GetForeignKeyOnDeleteClause(ServiceStack.OrmLite.ForeignKeyConstraint foreignKey) => throw null; + public virtual string GetForeignKeyOnUpdateClause(ServiceStack.OrmLite.ForeignKeyConstraint foreignKey) => throw null; + protected virtual string GetIndexName(bool isUnique, string modelName, string fieldName) => throw null; + protected virtual object GetInsertDefaultValue(ServiceStack.OrmLite.FieldDefinition fieldDef) => throw null; + public virtual ServiceStack.OrmLite.FieldDefinition[] GetInsertFieldDefinitions(ServiceStack.OrmLite.ModelDefinition modelDef, System.Collections.Generic.ICollection insertFields) => throw null; + public virtual System.Int64 GetLastInsertId(System.Data.IDbCommand dbCmd) => throw null; + public virtual string GetLastInsertIdSqlSuffix() => throw null; + public virtual string GetLoadChildrenSubSelect(ServiceStack.OrmLite.SqlExpression expr) => throw null; + protected static ServiceStack.OrmLite.ModelDefinition GetModel(System.Type modelType) => throw null; + public virtual object GetParamValue(object value, System.Type fieldType) => throw null; + public virtual string GetQuotedColumnName(string columnName) => throw null; + public virtual string GetQuotedName(string name, string schema) => throw null; + public virtual string GetQuotedName(string name) => throw null; + public virtual string GetQuotedTableName(string tableName, string schema, bool useStrategy) => throw null; + public virtual string GetQuotedTableName(string tableName, string schema = default(string)) => throw null; + public virtual string GetQuotedTableName(ServiceStack.OrmLite.ModelDefinition modelDef) => throw null; + public virtual string GetQuotedValue(string paramValue) => throw null; + public virtual string GetQuotedValue(object value, System.Type fieldType) => throw null; + protected virtual object GetQuotedValueOrDbNull(ServiceStack.OrmLite.FieldDefinition fieldDef, object obj) => throw null; + public virtual string GetRowVersionColumn(ServiceStack.OrmLite.FieldDefinition field, string tablePrefix = default(string)) => throw null; + public virtual ServiceStack.OrmLite.SelectItem GetRowVersionSelectColumn(ServiceStack.OrmLite.FieldDefinition field, string tablePrefix = default(string)) => throw null; + public virtual string GetSchemaName(string schema) => throw null; + public virtual string GetTableName(string table, string schema, bool useStrategy) => throw null; + public virtual string GetTableName(string table, string schema = default(string)) => throw null; + public virtual string GetTableName(ServiceStack.OrmLite.ModelDefinition modelDef, bool useStrategy) => throw null; + public virtual string GetTableName(ServiceStack.OrmLite.ModelDefinition modelDef) => throw null; + protected virtual string GetUniqueConstraintName(ServiceStack.DataAnnotations.UniqueConstraintAttribute constraint, string tableName) => throw null; + public virtual string GetUniqueConstraints(ServiceStack.OrmLite.ModelDefinition modelDef) => throw null; + public object GetValue(System.Data.IDataReader reader, int columnIndex, System.Type type) => throw null; + protected virtual object GetValue(ServiceStack.OrmLite.FieldDefinition fieldDef, object obj) => throw null; + protected virtual object GetValueOrDbNull(ServiceStack.OrmLite.FieldDefinition fieldDef, object obj) => throw null; + public virtual int GetValues(System.Data.IDataReader reader, object[] values) => throw null; + public virtual bool HasInsertReturnValues(ServiceStack.OrmLite.ModelDefinition modelDef) => throw null; + protected void InitColumnTypeMap() => throw null; + public virtual void InitDbParam(System.Data.IDbDataParameter dbParam, System.Type columnType) => throw null; + public virtual void InitQueryParam(System.Data.IDbDataParameter param) => throw null; + public virtual void InitUpdateParam(System.Data.IDbDataParameter param) => throw null; + public virtual System.Threading.Tasks.Task InsertAndGetLastInsertIdAsync(System.Data.IDbCommand dbCmd, System.Threading.CancellationToken token) => throw null; + public virtual bool IsFullSelectStatement(string sql) => throw null; + protected static ServiceStack.Logging.ILog Log; + public virtual string MergeParamsIntoSql(string sql, System.Collections.Generic.IEnumerable dbParams) => throw null; + public ServiceStack.OrmLite.INamingStrategy NamingStrategy { get => throw null; set => throw null; } + public System.Action OnOpenConnection { get => throw null; set => throw null; } + public virtual System.Threading.Tasks.Task OpenAsync(System.Data.IDbConnection db, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + protected OrmLiteDialectProviderBase() => throw null; + public System.Func ParamNameFilter { get => throw null; set => throw null; } + public string ParamString { get => throw null; set => throw null; } + public virtual void PrepareInsertRowStatement(System.Data.IDbCommand dbCmd, System.Collections.Generic.Dictionary args) => throw null; + public virtual bool PrepareParameterizedDeleteStatement(System.Data.IDbCommand cmd, System.Collections.Generic.IDictionary deleteFieldValues) => throw null; + public virtual void PrepareParameterizedInsertStatement(System.Data.IDbCommand cmd, System.Collections.Generic.ICollection insertFields = default(System.Collections.Generic.ICollection), System.Func shouldInclude = default(System.Func)) => throw null; + public virtual bool PrepareParameterizedUpdateStatement(System.Data.IDbCommand cmd, System.Collections.Generic.ICollection updateFields = default(System.Collections.Generic.ICollection)) => throw null; + public virtual void PrepareStoredProcedureStatement(System.Data.IDbCommand cmd, T obj) => throw null; + public virtual void PrepareUpdateRowAddStatement(System.Data.IDbCommand dbCmd, System.Collections.Generic.Dictionary args, string sqlFilter) => throw null; + public virtual void PrepareUpdateRowStatement(System.Data.IDbCommand dbCmd, System.Collections.Generic.Dictionary args, string sqlFilter) => throw null; + public virtual void PrepareUpdateRowStatement(System.Data.IDbCommand dbCmd, object objWithProperties, System.Collections.Generic.ICollection updateFields = default(System.Collections.Generic.ICollection)) => throw null; + public virtual string QuoteIfRequired(string name) => throw null; + public virtual System.Threading.Tasks.Task ReadAsync(System.Data.IDataReader reader, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public virtual System.Threading.Tasks.Task> ReaderEach(System.Data.IDataReader reader, System.Func fn, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public virtual System.Threading.Tasks.Task ReaderEach(System.Data.IDataReader reader, System.Action fn, Return source, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public virtual System.Threading.Tasks.Task ReaderRead(System.Data.IDataReader reader, System.Func fn, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public ServiceStack.OrmLite.Converters.ReferenceTypeConverter ReferenceTypeConverter { get => throw null; set => throw null; } + public void RegisterConverter(ServiceStack.OrmLite.IOrmLiteConverter converter) => throw null; + public void RemoveConverter() => throw null; + public virtual string ResolveFragment(string sql) => throw null; + public ServiceStack.OrmLite.Converters.RowVersionConverter RowVersionConverter { get => throw null; set => throw null; } + public virtual string SanitizeFieldNameForParamName(string fieldName) => throw null; + public virtual string SelectIdentitySql { get => throw null; set => throw null; } + public virtual System.Collections.Generic.List SequenceList(System.Type tableType) => throw null; + public virtual System.Threading.Tasks.Task> SequenceListAsync(System.Type tableType, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public virtual void SetParameter(ServiceStack.OrmLite.FieldDefinition fieldDef, System.Data.IDbDataParameter p) => throw null; + public virtual void SetParameterValue(ServiceStack.OrmLite.FieldDefinition fieldDef, System.Data.IDataParameter p, object obj) => throw null; + public virtual void SetParameterValues(System.Data.IDbCommand dbCmd, object obj) => throw null; + public virtual bool ShouldQuote(string name) => throw null; + public virtual bool ShouldQuoteValue(System.Type fieldType) => throw null; + protected virtual bool ShouldSkipInsert(ServiceStack.OrmLite.FieldDefinition fieldDef) => throw null; + public virtual string SqlBool(bool value) => throw null; + public virtual string SqlCast(object fieldOrValue, string castAs) => throw null; + public virtual string SqlConcat(System.Collections.Generic.IEnumerable args) => throw null; + public virtual string SqlConflict(string sql, string conflictResolution) => throw null; + public virtual string SqlCurrency(string fieldOrValue, string currencySymbol) => throw null; + public virtual string SqlCurrency(string fieldOrValue) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression SqlExpression() => throw null; + public virtual string SqlLimit(int? offset = default(int?), int? rows = default(int?)) => throw null; + public virtual string SqlRandom { get => throw null; } + public ServiceStack.OrmLite.Converters.StringConverter StringConverter { get => throw null; } + public ServiceStack.Text.IStringSerializer StringSerializer { get => throw null; set => throw null; } + public virtual string ToAddColumnStatement(System.Type modelType, ServiceStack.OrmLite.FieldDefinition fieldDef) => throw null; + public virtual string ToAddForeignKeyStatement(System.Linq.Expressions.Expression> field, System.Linq.Expressions.Expression> foreignField, ServiceStack.OrmLite.OnFkOption onUpdate, ServiceStack.OrmLite.OnFkOption onDelete, string foreignKeyName = default(string)) => throw null; + public virtual string ToAlterColumnStatement(System.Type modelType, ServiceStack.OrmLite.FieldDefinition fieldDef) => throw null; + public virtual string ToChangeColumnNameStatement(System.Type modelType, ServiceStack.OrmLite.FieldDefinition fieldDef, string oldColumnName) => throw null; + public virtual string ToCreateIndexStatement(System.Linq.Expressions.Expression> field, string indexName = default(string), bool unique = default(bool)) => throw null; + protected virtual string ToCreateIndexStatement(bool isUnique, string indexName, ServiceStack.OrmLite.ModelDefinition modelDef, string fieldName, bool isCombined = default(bool), ServiceStack.OrmLite.FieldDefinition fieldDef = default(ServiceStack.OrmLite.FieldDefinition)) => throw null; + public virtual System.Collections.Generic.List ToCreateIndexStatements(System.Type tableType) => throw null; + public abstract string ToCreateSchemaStatement(string schemaName); + public virtual string ToCreateSequenceStatement(System.Type tableType, string sequenceName) => throw null; + public virtual System.Collections.Generic.List ToCreateSequenceStatements(System.Type tableType) => throw null; + public virtual string ToCreateTableStatement(System.Type tableType) => throw null; + public virtual object ToDbValue(object value, System.Type type) => throw null; + public virtual string ToDeleteStatement(System.Type tableType, string sqlFilter, params object[] filterParams) => throw null; + protected virtual string ToDropColumnStatement(System.Type modelType, string columnName, ServiceStack.OrmLite.IOrmLiteDialectProvider provider) => throw null; + public virtual string ToExecuteProcedureStatement(object objWithProperties) => throw null; + public virtual string ToExistStatement(System.Type fromTableType, object objWithProperties, string sqlFilter, params object[] filterParams) => throw null; + public virtual string ToInsertRowStatement(System.Data.IDbCommand cmd, object objWithProperties, System.Collections.Generic.ICollection insertFields = default(System.Collections.Generic.ICollection)) => throw null; + public virtual string ToInsertStatement(System.Data.IDbCommand dbCmd, T item, System.Collections.Generic.ICollection insertFields = default(System.Collections.Generic.ICollection)) => throw null; + public virtual string ToPostCreateTableStatement(ServiceStack.OrmLite.ModelDefinition modelDef) => throw null; + public virtual string ToPostDropTableStatement(ServiceStack.OrmLite.ModelDefinition modelDef) => throw null; + public virtual string ToRowCountStatement(string innerSql) => throw null; + public virtual string ToSelectFromProcedureStatement(object fromObjWithProperties, System.Type outputModelType, string sqlFilter, params object[] filterParams) => throw null; + public virtual string ToSelectStatement(System.Type tableType, string sqlFilter, params object[] filterParams) => throw null; + public virtual string ToSelectStatement(ServiceStack.OrmLite.ModelDefinition modelDef, string selectExpression, string bodyExpression, string orderByExpression = default(string), int? offset = default(int?), int? rows = default(int?)) => throw null; + public virtual string ToTableNamesStatement(string schema) => throw null; + public virtual string ToTableNamesWithRowCountsStatement(bool live, string schema) => throw null; + public virtual string ToUpdateStatement(System.Data.IDbCommand dbCmd, T item, System.Collections.Generic.ICollection updateFields = default(System.Collections.Generic.ICollection)) => throw null; + public ServiceStack.OrmLite.Converters.ValueTypeConverter ValueTypeConverter { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary Variables { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.OrmLite.OrmLiteDialectProviderExtensions` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class OrmLiteDialectProviderExtensions + { + public static string FmtColumn(this string columnName, ServiceStack.OrmLite.IOrmLiteDialectProvider dialect = default(ServiceStack.OrmLite.IOrmLiteDialectProvider)) => throw null; + public static string FmtTable(this string tableName, ServiceStack.OrmLite.IOrmLiteDialectProvider dialect = default(ServiceStack.OrmLite.IOrmLiteDialectProvider)) => throw null; + public static object FromDbValue(this ServiceStack.OrmLite.IOrmLiteDialectProvider dialect, System.Data.IDataReader reader, int columnIndex, System.Type type) => throw null; + public static ServiceStack.OrmLite.IOrmLiteConverter GetConverter(this ServiceStack.OrmLite.IOrmLiteDialectProvider dialect) => throw null; + public static ServiceStack.OrmLite.Converters.DateTimeConverter GetDateTimeConverter(this ServiceStack.OrmLite.IOrmLiteDialectProvider dialect) => throw null; + public static ServiceStack.OrmLite.Converters.DecimalConverter GetDecimalConverter(this ServiceStack.OrmLite.IOrmLiteDialectProvider dialect) => throw null; + public static string GetParam(this ServiceStack.OrmLite.IOrmLiteDialectProvider dialect, string name, string format) => throw null; + public static string GetParam(this ServiceStack.OrmLite.IOrmLiteDialectProvider dialect, string name) => throw null; + public static string GetParam(this ServiceStack.OrmLite.IOrmLiteDialectProvider dialect, int indexNo = default(int)) => throw null; + public static string GetQuotedColumnName(this ServiceStack.OrmLite.IOrmLiteDialectProvider dialect, ServiceStack.OrmLite.ModelDefinition tableDef, string tableAlias, string fieldName) => throw null; + public static string GetQuotedColumnName(this ServiceStack.OrmLite.IOrmLiteDialectProvider dialect, ServiceStack.OrmLite.ModelDefinition tableDef, string tableAlias, ServiceStack.OrmLite.FieldDefinition fieldDef) => throw null; + public static string GetQuotedColumnName(this ServiceStack.OrmLite.IOrmLiteDialectProvider dialect, ServiceStack.OrmLite.ModelDefinition tableDef, string fieldName) => throw null; + public static string GetQuotedColumnName(this ServiceStack.OrmLite.IOrmLiteDialectProvider dialect, ServiceStack.OrmLite.ModelDefinition tableDef, ServiceStack.OrmLite.FieldDefinition fieldDef) => throw null; + public static string GetQuotedColumnName(this ServiceStack.OrmLite.IOrmLiteDialectProvider dialect, ServiceStack.OrmLite.FieldDefinition fieldDef) => throw null; + public static ServiceStack.OrmLite.Converters.StringConverter GetStringConverter(this ServiceStack.OrmLite.IOrmLiteDialectProvider dialect) => throw null; + public static bool HasConverter(this ServiceStack.OrmLite.IOrmLiteDialectProvider dialect, System.Type type) => throw null; + public static void InitDbParam(this ServiceStack.OrmLite.IOrmLiteDialectProvider dialect, System.Data.IDbDataParameter dbParam, System.Type columnType, object value) => throw null; + public static void InitDbParam(this ServiceStack.OrmLite.IOrmLiteDialectProvider dialect, System.Data.IDbDataParameter dbParam, System.Type columnType) => throw null; + public static bool IsMySqlConnector(this ServiceStack.OrmLite.IOrmLiteDialectProvider dialect) => throw null; + public static string SqlSpread(this ServiceStack.OrmLite.IOrmLiteDialectProvider dialect, params T[] values) => throw null; + public static string ToFieldName(this ServiceStack.OrmLite.IOrmLiteDialectProvider dialect, string paramName) => throw null; + } + + // Generated from `ServiceStack.OrmLite.OrmLiteExecFilter` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class OrmLiteExecFilter : ServiceStack.OrmLite.IOrmLiteExecFilter + { + public virtual System.Data.IDbCommand CreateCommand(System.Data.IDbConnection dbConn) => throw null; + public virtual void DisposeCommand(System.Data.IDbCommand dbCmd, System.Data.IDbConnection dbConn) => throw null; + public virtual void Exec(System.Data.IDbConnection dbConn, System.Action filter) => throw null; + public virtual T Exec(System.Data.IDbConnection dbConn, System.Func filter) => throw null; + public virtual System.Threading.Tasks.Task Exec(System.Data.IDbConnection dbConn, System.Func> filter) => throw null; + public virtual System.Threading.Tasks.Task Exec(System.Data.IDbConnection dbConn, System.Func> filter) => throw null; + public virtual System.Threading.Tasks.Task Exec(System.Data.IDbConnection dbConn, System.Func filter) => throw null; + public virtual System.Data.IDbCommand Exec(System.Data.IDbConnection dbConn, System.Func filter) => throw null; + public virtual System.Collections.Generic.IEnumerable ExecLazy(System.Data.IDbConnection dbConn, System.Func> filter) => throw null; + public OrmLiteExecFilter() => throw null; + public virtual ServiceStack.OrmLite.SqlExpression SqlExpression(System.Data.IDbConnection dbConn) => throw null; + } + + // Generated from `ServiceStack.OrmLite.OrmLiteNamingStrategyBase` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class OrmLiteNamingStrategyBase : ServiceStack.OrmLite.INamingStrategy + { + public virtual string ApplyNameRestrictions(string name) => throw null; + public virtual string GetColumnName(string name) => throw null; + public virtual string GetSchemaName(string name) => throw null; + public virtual string GetSchemaName(ServiceStack.OrmLite.ModelDefinition modelDef) => throw null; + public virtual string GetSequenceName(string modelName, string fieldName) => throw null; + public virtual string GetTableName(string name) => throw null; + public virtual string GetTableName(ServiceStack.OrmLite.ModelDefinition modelDef) => throw null; + public OrmLiteNamingStrategyBase() => throw null; + } + + // Generated from `ServiceStack.OrmLite.OrmLitePersistenceProvider` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class OrmLitePersistenceProvider : System.IDisposable, ServiceStack.Data.IEntityStore + { + public System.Data.IDbConnection Connection { get => throw null; } + protected string ConnectionString { get => throw null; set => throw null; } + public void Delete(T entity) => throw null; + public void DeleteAll() => throw null; + public void DeleteById(object id) => throw null; + public void DeleteByIds(System.Collections.ICollection ids) => throw null; + public void Dispose() => throw null; + protected bool DisposeConnection; + public T GetById(object id) => throw null; + public System.Collections.Generic.IList GetByIds(System.Collections.ICollection ids) => throw null; + public OrmLitePersistenceProvider(string connectionString) => throw null; + public OrmLitePersistenceProvider(System.Data.IDbConnection connection) => throw null; + public T Store(T entity) => throw null; + public void StoreAll(System.Collections.Generic.IEnumerable entities) => throw null; + protected System.Data.IDbConnection connection; + } + + // Generated from `ServiceStack.OrmLite.OrmLiteReadApi` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class OrmLiteReadApi + { + public static System.Collections.Generic.List Column(this System.Data.IDbConnection dbConn, string sql, object anonType = default(object)) => throw null; + public static System.Collections.Generic.List Column(this System.Data.IDbConnection dbConn, string sql, System.Collections.Generic.IEnumerable sqlParams) => throw null; + public static System.Collections.Generic.List Column(this System.Data.IDbConnection dbConn, ServiceStack.OrmLite.ISqlExpression query) => throw null; + public static System.Collections.Generic.HashSet ColumnDistinct(this System.Data.IDbConnection dbConn, string sql, object anonType = default(object)) => throw null; + public static System.Collections.Generic.HashSet ColumnDistinct(this System.Data.IDbConnection dbConn, string sql, System.Collections.Generic.IEnumerable sqlParams) => throw null; + public static System.Collections.Generic.HashSet ColumnDistinct(this System.Data.IDbConnection dbConn, ServiceStack.OrmLite.ISqlExpression query) => throw null; + public static System.Collections.Generic.IEnumerable ColumnLazy(this System.Data.IDbConnection dbConn, string sql, object anonType = default(object)) => throw null; + public static System.Collections.Generic.IEnumerable ColumnLazy(this System.Data.IDbConnection dbConn, string sql, System.Collections.Generic.IEnumerable sqlParams) => throw null; + public static System.Collections.Generic.IEnumerable ColumnLazy(this System.Data.IDbConnection dbConn, ServiceStack.OrmLite.ISqlExpression query) => throw null; + public static System.Collections.Generic.Dictionary Dictionary(this System.Data.IDbConnection dbConn, string sql, object anonType = default(object)) => throw null; + public static System.Collections.Generic.Dictionary Dictionary(this System.Data.IDbConnection dbConn, ServiceStack.OrmLite.ISqlExpression query) => throw null; + public static int ExecuteNonQuery(this System.Data.IDbConnection dbConn, string sql, object anonType) => throw null; + public static int ExecuteNonQuery(this System.Data.IDbConnection dbConn, string sql, System.Collections.Generic.Dictionary dict) => throw null; + public static int ExecuteNonQuery(this System.Data.IDbConnection dbConn, string sql, System.Action dbCmdFilter) => throw null; + public static int ExecuteNonQuery(this System.Data.IDbConnection dbConn, string sql) => throw null; + public static bool Exists(this System.Data.IDbConnection dbConn, string sql, object anonType = default(object)) => throw null; + public static bool Exists(this System.Data.IDbConnection dbConn, object anonType) => throw null; + public static bool Exists(this System.Data.IDbConnection dbConn, System.Linq.Expressions.Expression> expression) => throw null; + public static bool Exists(this System.Data.IDbConnection dbConn, ServiceStack.OrmLite.SqlExpression expression) => throw null; + public static System.Collections.Generic.List> KeyValuePairs(this System.Data.IDbConnection dbConn, string sql, object anonType = default(object)) => throw null; + public static System.Collections.Generic.List> KeyValuePairs(this System.Data.IDbConnection dbConn, ServiceStack.OrmLite.ISqlExpression query) => throw null; + public static System.Int64 LastInsertId(this System.Data.IDbConnection dbConn) => throw null; + public static void LoadReferences(this System.Data.IDbConnection dbConn, T instance) => throw null; + public static T LoadSingleById(this System.Data.IDbConnection dbConn, object idValue, string[] include = default(string[])) => throw null; + public static T LoadSingleById(this System.Data.IDbConnection dbConn, object idValue, System.Linq.Expressions.Expression> include) => throw null; + public static System.Int64 LongScalar(this System.Data.IDbConnection dbConn) => throw null; + public static System.Collections.Generic.Dictionary> Lookup(this System.Data.IDbConnection dbConn, string sql, object anonType = default(object)) => throw null; + public static System.Collections.Generic.Dictionary> Lookup(this System.Data.IDbConnection dbConn, string sql, System.Collections.Generic.IEnumerable sqlParams) => throw null; + public static System.Collections.Generic.Dictionary> Lookup(this System.Data.IDbConnection dbConn, ServiceStack.OrmLite.ISqlExpression sqlExpression) => throw null; + public static T Scalar(this System.Data.IDbConnection dbConn, string sql, object anonType = default(object)) => throw null; + public static T Scalar(this System.Data.IDbConnection dbConn, string sql, System.Collections.Generic.IEnumerable sqlParams) => throw null; + public static T Scalar(this System.Data.IDbConnection dbConn, ServiceStack.OrmLite.ISqlExpression sqlExpression) => throw null; + public static System.Collections.Generic.List Select(this System.Data.IDbConnection dbConn, System.Type fromTableType, string sql, object anonType) => throw null; + public static System.Collections.Generic.List Select(this System.Data.IDbConnection dbConn, System.Type fromTableType) => throw null; + public static System.Collections.Generic.List Select(this System.Data.IDbConnection dbConn, string sql, object anonType) => throw null; + public static System.Collections.Generic.List Select(this System.Data.IDbConnection dbConn, string sql, System.Collections.Generic.IEnumerable sqlParams) => throw null; + public static System.Collections.Generic.List Select(this System.Data.IDbConnection dbConn, string sql, System.Collections.Generic.Dictionary dict) => throw null; + public static System.Collections.Generic.List Select(this System.Data.IDbConnection dbConn, string sql) => throw null; + public static System.Collections.Generic.List Select(this System.Data.IDbConnection dbConn) => throw null; + public static System.Collections.Generic.List SelectByIds(this System.Data.IDbConnection dbConn, System.Collections.IEnumerable idValues) => throw null; + public static System.Collections.Generic.IEnumerable SelectLazy(this System.Data.IDbConnection dbConn, string sql, object anonType = default(object)) => throw null; + public static System.Collections.Generic.IEnumerable SelectLazy(this System.Data.IDbConnection dbConn, ServiceStack.OrmLite.SqlExpression expression) => throw null; + public static System.Collections.Generic.IEnumerable SelectLazy(this System.Data.IDbConnection dbConn) => throw null; + public static System.Collections.Generic.List SelectNonDefaults(this System.Data.IDbConnection dbConn, string sql, T filter) => throw null; + public static System.Collections.Generic.List SelectNonDefaults(this System.Data.IDbConnection dbConn, T filter) => throw null; + public static T Single(this System.Data.IDbConnection dbConn, string sql, object anonType = default(object)) => throw null; + public static T Single(this System.Data.IDbConnection dbConn, string sql, System.Collections.Generic.IEnumerable sqlParams) => throw null; + public static T Single(this System.Data.IDbConnection dbConn, object anonType) => throw null; + public static T SingleById(this System.Data.IDbConnection dbConn, object idValue) => throw null; + public static T SingleWhere(this System.Data.IDbConnection dbConn, string name, object value) => throw null; + public static System.Collections.Generic.List SqlColumn(this System.Data.IDbConnection dbConn, string sql, object anonType = default(object)) => throw null; + public static System.Collections.Generic.List SqlColumn(this System.Data.IDbConnection dbConn, string sql, System.Collections.Generic.IEnumerable sqlParams) => throw null; + public static System.Collections.Generic.List SqlColumn(this System.Data.IDbConnection dbConn, string sql, System.Collections.Generic.Dictionary dict) => throw null; + public static System.Collections.Generic.List SqlColumn(this System.Data.IDbConnection dbConn, ServiceStack.OrmLite.ISqlExpression sqlExpression) => throw null; + public static System.Collections.Generic.List SqlList(this System.Data.IDbConnection dbConn, string sql, object anonType = default(object)) => throw null; + public static System.Collections.Generic.List SqlList(this System.Data.IDbConnection dbConn, string sql, System.Collections.Generic.IEnumerable sqlParams) => throw null; + public static System.Collections.Generic.List SqlList(this System.Data.IDbConnection dbConn, string sql, System.Collections.Generic.Dictionary dict) => throw null; + public static System.Collections.Generic.List SqlList(this System.Data.IDbConnection dbConn, string sql, System.Action dbCmdFilter) => throw null; + public static System.Collections.Generic.List SqlList(this System.Data.IDbConnection dbConn, ServiceStack.OrmLite.ISqlExpression sqlExpression) => throw null; + public static System.Data.IDbCommand SqlProc(this System.Data.IDbConnection dbConn, string name, object inParams = default(object), bool excludeDefaults = default(bool)) => throw null; + public static System.Collections.Generic.List SqlProcedure(this System.Data.IDbConnection dbConn, object anonType, string sqlFilter, params object[] filterParams) where TOutputModel : new() => throw null; + public static System.Collections.Generic.List SqlProcedure(this System.Data.IDbConnection dbConn, object anonType) => throw null; + public static T SqlScalar(this System.Data.IDbConnection dbConn, string sql, object anonType = default(object)) => throw null; + public static T SqlScalar(this System.Data.IDbConnection dbConn, string sql, System.Collections.Generic.IEnumerable sqlParams) => throw null; + public static T SqlScalar(this System.Data.IDbConnection dbConn, string sql, System.Collections.Generic.Dictionary dict) => throw null; + public static T SqlScalar(this System.Data.IDbConnection dbConn, ServiceStack.OrmLite.ISqlExpression sqlExpression) => throw null; + public static System.Collections.Generic.List Where(this System.Data.IDbConnection dbConn, string name, object value) => throw null; + public static System.Collections.Generic.List Where(this System.Data.IDbConnection dbConn, object anonType) => throw null; + public static System.Collections.Generic.IEnumerable WhereLazy(this System.Data.IDbConnection dbConn, object anonType) => throw null; + } + + // Generated from `ServiceStack.OrmLite.OrmLiteReadApiAsync` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class OrmLiteReadApiAsync + { + public static System.Threading.Tasks.Task> ColumnAsync(this System.Data.IDbConnection dbConn, string sql, object anonType = default(object), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task> ColumnAsync(this System.Data.IDbConnection dbConn, string sql, System.Collections.Generic.IEnumerable sqlParams, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task> ColumnAsync(this System.Data.IDbConnection dbConn, ServiceStack.OrmLite.ISqlExpression query, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task> ColumnDistinctAsync(this System.Data.IDbConnection dbConn, string sql, object anonType = default(object), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task> ColumnDistinctAsync(this System.Data.IDbConnection dbConn, string sql, System.Collections.Generic.IEnumerable sqlParams, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task> ColumnDistinctAsync(this System.Data.IDbConnection dbConn, ServiceStack.OrmLite.ISqlExpression query, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task> DictionaryAsync(this System.Data.IDbConnection dbConn, string sql, object anonType = default(object), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task> DictionaryAsync(this System.Data.IDbConnection dbConn, string sql, System.Collections.Generic.IEnumerable sqlParams, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task> DictionaryAsync(this System.Data.IDbConnection dbConn, ServiceStack.OrmLite.ISqlExpression query, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task ExecuteNonQueryAsync(this System.Data.IDbConnection dbConn, string sql, object anonType, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task ExecuteNonQueryAsync(this System.Data.IDbConnection dbConn, string sql, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task ExecuteNonQueryAsync(this System.Data.IDbConnection dbConn, string sql, System.Collections.Generic.Dictionary dict, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task ExistsAsync(this System.Data.IDbConnection dbConn, string sql, object anonType = default(object), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task ExistsAsync(this System.Data.IDbConnection dbConn, object anonType, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task ExistsAsync(this System.Data.IDbConnection dbConn, System.Linq.Expressions.Expression> expression, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task ExistsAsync(this System.Data.IDbConnection dbConn, ServiceStack.OrmLite.SqlExpression expression, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task>> KeyValuePairsAsync(this System.Data.IDbConnection dbConn, string sql, object anonType = default(object), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task>> KeyValuePairsAsync(this System.Data.IDbConnection dbConn, string sql, System.Collections.Generic.IEnumerable sqlParams, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task>> KeyValuePairsAsync(this System.Data.IDbConnection dbConn, ServiceStack.OrmLite.ISqlExpression query, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task LoadReferencesAsync(this System.Data.IDbConnection dbConn, T instance, string[] include = default(string[]), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task LoadSingleByIdAsync(this System.Data.IDbConnection dbConn, object idValue, string[] include = default(string[]), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task LoadSingleByIdAsync(this System.Data.IDbConnection dbConn, object idValue, System.Linq.Expressions.Expression> include, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task LongScalarAsync(this System.Data.IDbConnection dbConn, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task>> LookupAsync(this System.Data.IDbConnection dbConn, string sql, object anonType = default(object), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task>> LookupAsync(this System.Data.IDbConnection dbConn, string sql, System.Collections.Generic.IEnumerable sqlParams, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task>> LookupAsync(this System.Data.IDbConnection dbConn, ServiceStack.OrmLite.ISqlExpression sqlExpression, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static T ScalarAsync(this System.Data.IDbCommand dbCmd, string sql, System.Collections.Generic.IEnumerable sqlParams) => throw null; + public static System.Threading.Tasks.Task ScalarAsync(this System.Data.IDbConnection dbConn, string sql, object anonType = default(object), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task ScalarAsync(this System.Data.IDbConnection dbConn, string sql, System.Collections.Generic.IEnumerable sqlParams, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task ScalarAsync(this System.Data.IDbConnection dbConn, ServiceStack.OrmLite.ISqlExpression sqlExpression, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task> SelectAsync(this System.Data.IDbConnection dbConn, System.Type fromTableType, string sqlFilter, object anonType = default(object), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task> SelectAsync(this System.Data.IDbConnection dbConn, System.Type fromTableType, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task> SelectAsync(this System.Data.IDbConnection dbConn, string sql, object anonType, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task> SelectAsync(this System.Data.IDbConnection dbConn, string sql, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task> SelectAsync(this System.Data.IDbConnection dbConn, string sql, System.Collections.Generic.IEnumerable sqlParams, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task> SelectAsync(this System.Data.IDbConnection dbConn, string sql, System.Collections.Generic.Dictionary dict, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task> SelectAsync(this System.Data.IDbConnection dbConn, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task> SelectByIdsAsync(this System.Data.IDbConnection dbConn, System.Collections.IEnumerable idValues, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task> SelectNonDefaultsAsync(this System.Data.IDbConnection dbConn, string sql, T filter, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task> SelectNonDefaultsAsync(this System.Data.IDbConnection dbConn, T filter, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task SingleAsync(this System.Data.IDbConnection dbConn, string sql, object anonType = default(object), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task SingleAsync(this System.Data.IDbConnection dbConn, string sql, System.Collections.Generic.IEnumerable sqlParams, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task SingleAsync(this System.Data.IDbConnection dbConn, object anonType, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task SingleByIdAsync(this System.Data.IDbConnection dbConn, object idValue, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task SingleWhereAsync(this System.Data.IDbConnection dbConn, string name, object value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task> SqlColumnAsync(this System.Data.IDbConnection dbConn, string sql, object anonType = default(object), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task> SqlColumnAsync(this System.Data.IDbConnection dbConn, string sql, System.Collections.Generic.IEnumerable sqlParams, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task> SqlColumnAsync(this System.Data.IDbConnection dbConn, string sql, System.Collections.Generic.Dictionary dict, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task> SqlColumnAsync(this System.Data.IDbConnection dbConn, ServiceStack.OrmLite.ISqlExpression sqlExpression, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task> SqlListAsync(this System.Data.IDbConnection dbConn, string sql, object anonType = default(object), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task> SqlListAsync(this System.Data.IDbConnection dbConn, string sql, System.Collections.Generic.IEnumerable sqlParams, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task> SqlListAsync(this System.Data.IDbConnection dbConn, string sql, System.Collections.Generic.Dictionary dict, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task> SqlListAsync(this System.Data.IDbConnection dbConn, string sql, System.Action dbCmdFilter, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task> SqlListAsync(this System.Data.IDbConnection dbConn, ServiceStack.OrmLite.ISqlExpression sqlExpression, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task> SqlProcedureAsync(this System.Data.IDbConnection dbConn, object anonType, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task SqlScalarAsync(this System.Data.IDbConnection dbConn, string sql, object anonType = default(object), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task SqlScalarAsync(this System.Data.IDbConnection dbConn, string sql, System.Collections.Generic.IEnumerable sqlParams, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task SqlScalarAsync(this System.Data.IDbConnection dbConn, string sql, System.Collections.Generic.Dictionary dict, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task SqlScalarAsync(this System.Data.IDbConnection dbConn, ServiceStack.OrmLite.ISqlExpression sqlExpression, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task> WhereAsync(this System.Data.IDbConnection dbConn, string name, object value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task> WhereAsync(this System.Data.IDbConnection dbConn, object anonType, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + } + + // Generated from `ServiceStack.OrmLite.OrmLiteReadCommandExtensions` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class OrmLiteReadCommandExtensions + { + public static System.Data.IDbDataParameter AddParam(this System.Data.IDbCommand dbCmd, string name, object value = default(object), System.Data.ParameterDirection direction = default(System.Data.ParameterDirection), System.Data.DbType? dbType = default(System.Data.DbType?), System.Byte? precision = default(System.Byte?), System.Byte? scale = default(System.Byte?), int? size = default(int?), System.Action paramFilter = default(System.Action)) => throw null; + public static void ClearFilters(this System.Data.IDbCommand dbCmd) => throw null; + public static System.Data.IDbDataParameter CreateParam(this System.Data.IDbCommand dbCmd, string name, object value = default(object), System.Data.ParameterDirection direction = default(System.Data.ParameterDirection), System.Data.DbType? dbType = default(System.Data.DbType?), System.Byte? precision = default(System.Byte?), System.Byte? scale = default(System.Byte?), int? size = default(int?)) => throw null; + public static ServiceStack.OrmLite.FieldDefinition GetRefFieldDef(this ServiceStack.OrmLite.ModelDefinition modelDef, ServiceStack.OrmLite.ModelDefinition refModelDef, System.Type refType) => throw null; + public static ServiceStack.OrmLite.FieldDefinition GetRefFieldDefIfExists(this ServiceStack.OrmLite.ModelDefinition modelDef, ServiceStack.OrmLite.ModelDefinition refModelDef) => throw null; + public static ServiceStack.OrmLite.FieldDefinition GetSelfRefFieldDefIfExists(this ServiceStack.OrmLite.ModelDefinition modelDef, ServiceStack.OrmLite.ModelDefinition refModelDef, ServiceStack.OrmLite.FieldDefinition fieldDef) => throw null; + public static void LoadReferences(this System.Data.IDbCommand dbCmd, T instance, System.Collections.Generic.IEnumerable include = default(System.Collections.Generic.IEnumerable)) => throw null; + public static System.Int64 LongScalar(this System.Data.IDbCommand dbCmd) => throw null; + public static System.Data.IDbCommand SetFilters(this System.Data.IDbCommand dbCmd, object anonType) => throw null; + public const string UseDbConnectionExtensions = default; + } + + // Generated from `ServiceStack.OrmLite.OrmLiteReadExpressionsApi` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class OrmLiteReadExpressionsApi + { + public static System.Int64 Count(this System.Data.IDbConnection dbConn, System.Linq.Expressions.Expression> expression) => throw null; + public static System.Int64 Count(this System.Data.IDbConnection dbConn, ServiceStack.OrmLite.SqlExpression expression) => throw null; + public static System.Int64 Count(this System.Data.IDbConnection dbConn) => throw null; + public static void DisableForeignKeysCheck(this System.Data.IDbConnection dbConn) => throw null; + public static void EnableForeignKeysCheck(this System.Data.IDbConnection dbConn) => throw null; + public static void Exec(this System.Data.IDbConnection dbConn, System.Action filter) => throw null; + public static T Exec(this System.Data.IDbConnection dbConn, System.Func filter) => throw null; + public static System.Threading.Tasks.Task Exec(this System.Data.IDbConnection dbConn, System.Func> filter) => throw null; + public static System.Threading.Tasks.Task Exec(this System.Data.IDbConnection dbConn, System.Func> filter) => throw null; + public static System.Threading.Tasks.Task Exec(this System.Data.IDbConnection dbConn, System.Func filter) => throw null; + public static System.Data.IDbCommand Exec(this System.Data.IDbConnection dbConn, System.Func filter) => throw null; + public static System.Collections.Generic.IEnumerable ExecLazy(this System.Data.IDbConnection dbConn, System.Func> filter) => throw null; + public static ServiceStack.OrmLite.SqlExpression From(this System.Data.IDbConnection dbConn, string fromExpression) => throw null; + public static ServiceStack.OrmLite.SqlExpression From(this System.Data.IDbConnection dbConn, System.Action> options) => throw null; + public static ServiceStack.OrmLite.SqlExpression From(this System.Data.IDbConnection dbConn, ServiceStack.OrmLite.TableOptions tableOptions, System.Action> options) => throw null; + public static ServiceStack.OrmLite.SqlExpression From(this System.Data.IDbConnection dbConn, ServiceStack.OrmLite.TableOptions tableOptions) => throw null; + public static ServiceStack.OrmLite.SqlExpression From(this System.Data.IDbConnection dbConn) => throw null; + public static ServiceStack.OrmLite.SqlExpression From(this System.Data.IDbConnection dbConn, System.Linq.Expressions.Expression> joinExpr = default(System.Linq.Expressions.Expression>)) => throw null; + public static string GetQuotedTableName(this System.Data.IDbConnection db) => throw null; + public static System.Data.DataTable GetSchemaTable(this System.Data.IDbConnection dbConn, string sql) => throw null; + public static ServiceStack.OrmLite.ColumnSchema[] GetTableColumns(this System.Data.IDbConnection dbConn) => throw null; + public static ServiceStack.OrmLite.ColumnSchema[] GetTableColumns(this System.Data.IDbConnection dbConn, string sql) => throw null; + public static ServiceStack.OrmLite.ColumnSchema[] GetTableColumns(this System.Data.IDbConnection dbConn, System.Type type) => throw null; + public static string GetTableName(this System.Data.IDbConnection db) => throw null; + public static System.Collections.Generic.List GetTableNames(this System.Data.IDbConnection db, string schema) => throw null; + public static System.Collections.Generic.List GetTableNames(this System.Data.IDbConnection db) => throw null; + public static System.Threading.Tasks.Task> GetTableNamesAsync(this System.Data.IDbConnection db, string schema) => throw null; + public static System.Threading.Tasks.Task> GetTableNamesAsync(this System.Data.IDbConnection db) => throw null; + public static System.Collections.Generic.List> GetTableNamesWithRowCounts(this System.Data.IDbConnection db, bool live = default(bool), string schema = default(string)) => throw null; + public static System.Threading.Tasks.Task>> GetTableNamesWithRowCountsAsync(this System.Data.IDbConnection db, bool live = default(bool), string schema = default(string)) => throw null; + public static ServiceStack.OrmLite.JoinFormatDelegate JoinAlias(this System.Data.IDbConnection db, string alias) => throw null; + public static System.Collections.Generic.List LoadSelect(this System.Data.IDbConnection dbConn, System.Linq.Expressions.Expression> predicate, string[] include = default(string[])) => throw null; + public static System.Collections.Generic.List LoadSelect(this System.Data.IDbConnection dbConn, System.Linq.Expressions.Expression> predicate, System.Linq.Expressions.Expression> include) => throw null; + public static System.Collections.Generic.List LoadSelect(this System.Data.IDbConnection dbConn, ServiceStack.OrmLite.SqlExpression expression, System.Linq.Expressions.Expression> include) => throw null; + public static System.Collections.Generic.List LoadSelect(this System.Data.IDbConnection dbConn, ServiceStack.OrmLite.SqlExpression expression, System.Collections.Generic.IEnumerable include) => throw null; + public static System.Collections.Generic.List LoadSelect(this System.Data.IDbConnection dbConn, ServiceStack.OrmLite.SqlExpression expression = default(ServiceStack.OrmLite.SqlExpression), string[] include = default(string[])) => throw null; + public static System.Collections.Generic.List LoadSelect(this System.Data.IDbConnection dbConn, ServiceStack.OrmLite.SqlExpression expression, string[] include = default(string[])) => throw null; + public static System.Collections.Generic.List LoadSelect(this System.Data.IDbConnection dbConn, ServiceStack.OrmLite.SqlExpression expression, System.Linq.Expressions.Expression> include) => throw null; + public static System.Collections.Generic.List LoadSelect(this System.Data.IDbConnection dbConn, ServiceStack.OrmLite.SqlExpression expression, System.Collections.Generic.IEnumerable include) => throw null; + public static System.Data.IDbCommand OpenCommand(this System.Data.IDbConnection dbConn) => throw null; + public static System.Data.IDbTransaction OpenTransaction(this System.Data.IDbConnection dbConn, System.Data.IsolationLevel isolationLevel) => throw null; + public static System.Data.IDbTransaction OpenTransaction(this System.Data.IDbConnection dbConn) => throw null; + public static System.Data.IDbTransaction OpenTransactionIfNotExists(this System.Data.IDbConnection dbConn, System.Data.IsolationLevel isolationLevel) => throw null; + public static System.Data.IDbTransaction OpenTransactionIfNotExists(this System.Data.IDbConnection dbConn) => throw null; + public static System.Int64 RowCount(this System.Data.IDbConnection dbConn, ServiceStack.OrmLite.SqlExpression expression) => throw null; + public static System.Int64 RowCount(this System.Data.IDbConnection dbConn, string sql, object anonType = default(object)) => throw null; + public static System.Int64 RowCount(this System.Data.IDbConnection dbConn, string sql, System.Collections.Generic.IEnumerable sqlParams) => throw null; + public static TKey Scalar(this System.Data.IDbConnection dbConn, System.Linq.Expressions.Expression> field, System.Linq.Expressions.Expression> predicate) => throw null; + public static TKey Scalar(this System.Data.IDbConnection dbConn, System.Linq.Expressions.Expression> field) => throw null; + public static System.Collections.Generic.List Select(this System.Data.IDbConnection dbConn, System.Linq.Expressions.Expression> predicate) => throw null; + public static System.Collections.Generic.List Select(this System.Data.IDbConnection dbConn, ServiceStack.OrmLite.SqlExpression expression) => throw null; + public static System.Collections.Generic.List Select(this System.Data.IDbConnection dbConn, ServiceStack.OrmLite.ISqlExpression expression, object anonType = default(object)) => throw null; + public static System.Collections.Generic.List> SelectMulti(this System.Data.IDbConnection dbConn, ServiceStack.OrmLite.SqlExpression expression, string[] tableSelects) => throw null; + public static System.Collections.Generic.List> SelectMulti(this System.Data.IDbConnection dbConn, ServiceStack.OrmLite.SqlExpression expression) => throw null; + public static System.Collections.Generic.List> SelectMulti(this System.Data.IDbConnection dbConn, ServiceStack.OrmLite.SqlExpression expression, string[] tableSelects) => throw null; + public static System.Collections.Generic.List> SelectMulti(this System.Data.IDbConnection dbConn, ServiceStack.OrmLite.SqlExpression expression) => throw null; + public static System.Collections.Generic.List> SelectMulti(this System.Data.IDbConnection dbConn, ServiceStack.OrmLite.SqlExpression expression, string[] tableSelects) => throw null; + public static System.Collections.Generic.List> SelectMulti(this System.Data.IDbConnection dbConn, ServiceStack.OrmLite.SqlExpression expression) => throw null; + public static System.Collections.Generic.List> SelectMulti(this System.Data.IDbConnection dbConn, ServiceStack.OrmLite.SqlExpression expression, string[] tableSelects) => throw null; + public static System.Collections.Generic.List> SelectMulti(this System.Data.IDbConnection dbConn, ServiceStack.OrmLite.SqlExpression expression) => throw null; + public static System.Collections.Generic.List> SelectMulti(this System.Data.IDbConnection dbConn, ServiceStack.OrmLite.SqlExpression expression, string[] tableSelects) => throw null; + public static System.Collections.Generic.List> SelectMulti(this System.Data.IDbConnection dbConn, ServiceStack.OrmLite.SqlExpression expression) => throw null; + public static System.Collections.Generic.List> SelectMulti(this System.Data.IDbConnection dbConn, ServiceStack.OrmLite.SqlExpression expression, string[] tableSelects) => throw null; + public static System.Collections.Generic.List> SelectMulti(this System.Data.IDbConnection dbConn, ServiceStack.OrmLite.SqlExpression expression) => throw null; + public static T Single(this System.Data.IDbConnection dbConn, System.Linq.Expressions.Expression> predicate) => throw null; + public static T Single(this System.Data.IDbConnection dbConn, ServiceStack.OrmLite.SqlExpression expression) => throw null; + public static T Single(this System.Data.IDbConnection dbConn, ServiceStack.OrmLite.ISqlExpression expression) => throw null; + public static ServiceStack.OrmLite.TableOptions TableAlias(this System.Data.IDbConnection db, string alias) => throw null; + } + + // Generated from `ServiceStack.OrmLite.OrmLiteReadExpressionsApiAsync` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class OrmLiteReadExpressionsApiAsync + { + public static System.Threading.Tasks.Task CountAsync(this System.Data.IDbConnection dbConn, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task CountAsync(this System.Data.IDbConnection dbConn, System.Linq.Expressions.Expression> expression, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task CountAsync(this System.Data.IDbConnection dbConn, ServiceStack.OrmLite.SqlExpression expression, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task DisableForeignKeysCheckAsync(this System.Data.IDbConnection dbConn, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task EnableForeignKeysCheckAsync(this System.Data.IDbConnection dbConn, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task GetSchemaTableAsync(this System.Data.IDbConnection dbConn, string sql, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task GetTableColumnsAsync(this System.Data.IDbConnection dbConn, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task GetTableColumnsAsync(this System.Data.IDbConnection dbConn, string sql, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task GetTableColumnsAsync(this System.Data.IDbConnection dbConn, System.Type type, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task> LoadSelectAsync(this System.Data.IDbConnection dbConn, System.Linq.Expressions.Expression> predicate, string[] include = default(string[]), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task> LoadSelectAsync(this System.Data.IDbConnection dbConn, System.Linq.Expressions.Expression> predicate, System.Linq.Expressions.Expression> include) => throw null; + public static System.Threading.Tasks.Task> LoadSelectAsync(this System.Data.IDbConnection dbConn, ServiceStack.OrmLite.SqlExpression expression, string[] include = default(string[]), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task> LoadSelectAsync(this System.Data.IDbConnection dbConn, ServiceStack.OrmLite.SqlExpression expression, System.Collections.Generic.IEnumerable include, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task> LoadSelectAsync(this System.Data.IDbConnection dbConn, ServiceStack.OrmLite.SqlExpression expression, string[] include = default(string[]), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task> LoadSelectAsync(this System.Data.IDbConnection dbConn, ServiceStack.OrmLite.SqlExpression expression, System.Linq.Expressions.Expression> include) => throw null; + public static System.Threading.Tasks.Task> LoadSelectAsync(this System.Data.IDbConnection dbConn, ServiceStack.OrmLite.SqlExpression expression, System.Collections.Generic.IEnumerable include, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task RowCountAsync(this System.Data.IDbConnection dbConn, ServiceStack.OrmLite.SqlExpression expression, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task RowCountAsync(this System.Data.IDbConnection dbConn, string sql, object anonType = default(object), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task ScalarAsync(this System.Data.IDbConnection dbConn, System.Linq.Expressions.Expression> field, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task ScalarAsync(this System.Data.IDbConnection dbConn, System.Linq.Expressions.Expression> field, System.Linq.Expressions.Expression> predicate, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task> SelectAsync(this System.Data.IDbConnection dbConn, System.Linq.Expressions.Expression> predicate, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task> SelectAsync(this System.Data.IDbConnection dbConn, ServiceStack.OrmLite.SqlExpression expression, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task> SelectAsync(this System.Data.IDbConnection dbConn, ServiceStack.OrmLite.ISqlExpression expression, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task> SelectAsync(this System.Data.IDbConnection dbConn, ServiceStack.OrmLite.SqlExpression expression, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task>> SelectMultiAsync(this System.Data.IDbConnection dbConn, ServiceStack.OrmLite.SqlExpression expression, string[] tableSelects, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task>> SelectMultiAsync(this System.Data.IDbConnection dbConn, ServiceStack.OrmLite.SqlExpression expression, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task>> SelectMultiAsync(this System.Data.IDbConnection dbConn, ServiceStack.OrmLite.SqlExpression expression, string[] tableSelects, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task>> SelectMultiAsync(this System.Data.IDbConnection dbConn, ServiceStack.OrmLite.SqlExpression expression, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task>> SelectMultiAsync(this System.Data.IDbConnection dbConn, ServiceStack.OrmLite.SqlExpression expression, string[] tableSelects, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task>> SelectMultiAsync(this System.Data.IDbConnection dbConn, ServiceStack.OrmLite.SqlExpression expression, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task>> SelectMultiAsync(this System.Data.IDbConnection dbConn, ServiceStack.OrmLite.SqlExpression expression, string[] tableSelects, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task>> SelectMultiAsync(this System.Data.IDbConnection dbConn, ServiceStack.OrmLite.SqlExpression expression, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task>> SelectMultiAsync(this System.Data.IDbConnection dbConn, ServiceStack.OrmLite.SqlExpression expression, string[] tableSelects, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task>> SelectMultiAsync(this System.Data.IDbConnection dbConn, ServiceStack.OrmLite.SqlExpression expression, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task>> SelectMultiAsync(this System.Data.IDbConnection dbConn, ServiceStack.OrmLite.SqlExpression expression, string[] tableSelects, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task>> SelectMultiAsync(this System.Data.IDbConnection dbConn, ServiceStack.OrmLite.SqlExpression expression, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task SingleAsync(this System.Data.IDbConnection dbConn, System.Linq.Expressions.Expression> predicate, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task SingleAsync(this System.Data.IDbConnection dbConn, ServiceStack.OrmLite.SqlExpression expression, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task SingleAsync(this System.Data.IDbConnection dbConn, ServiceStack.OrmLite.ISqlExpression expression, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + } + + // Generated from `ServiceStack.OrmLite.OrmLiteResultsFilter` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class OrmLiteResultsFilter : System.IDisposable, ServiceStack.OrmLite.IOrmLiteResultsFilter + { + public System.Collections.IEnumerable ColumnDistinctResults { get => throw null; set => throw null; } + public System.Func ColumnDistinctResultsFn { get => throw null; set => throw null; } + public System.Collections.IEnumerable ColumnResults { get => throw null; set => throw null; } + public System.Func ColumnResultsFn { get => throw null; set => throw null; } + public System.Collections.IDictionary DictionaryResults { get => throw null; set => throw null; } + public System.Func DictionaryResultsFn { get => throw null; set => throw null; } + public void Dispose() => throw null; + public int ExecuteSql(System.Data.IDbCommand dbCmd) => throw null; + public System.Func ExecuteSqlFn { get => throw null; set => throw null; } + public int ExecuteSqlResult { get => throw null; set => throw null; } + public System.Collections.Generic.List GetColumn(System.Data.IDbCommand dbCmd) => throw null; + public System.Collections.Generic.HashSet GetColumnDistinct(System.Data.IDbCommand dbCmd) => throw null; + public System.Collections.Generic.Dictionary GetDictionary(System.Data.IDbCommand dbCmd) => throw null; + public System.Collections.Generic.List> GetKeyValuePairs(System.Data.IDbCommand dbCmd) => throw null; + public System.Int64 GetLastInsertId(System.Data.IDbCommand dbCmd) => throw null; + public System.Collections.Generic.List GetList(System.Data.IDbCommand dbCmd) => throw null; + public System.Int64 GetLongScalar(System.Data.IDbCommand dbCmd) => throw null; + public System.Collections.Generic.Dictionary> GetLookup(System.Data.IDbCommand dbCmd) => throw null; + public System.Collections.IList GetRefList(System.Data.IDbCommand dbCmd, System.Type refType) => throw null; + public object GetRefSingle(System.Data.IDbCommand dbCmd, System.Type refType) => throw null; + public object GetScalar(System.Data.IDbCommand dbCmd) => throw null; + public T GetScalar(System.Data.IDbCommand dbCmd) => throw null; + public T GetSingle(System.Data.IDbCommand dbCmd) => throw null; + public System.Int64 LastInsertId { get => throw null; set => throw null; } + public System.Func LastInsertIdFn { get => throw null; set => throw null; } + public System.Int64 LongScalarResult { get => throw null; set => throw null; } + public System.Func LongScalarResultFn { get => throw null; set => throw null; } + public System.Collections.IDictionary LookupResults { get => throw null; set => throw null; } + public System.Func LookupResultsFn { get => throw null; set => throw null; } + public OrmLiteResultsFilter(System.Collections.IEnumerable results = default(System.Collections.IEnumerable)) => throw null; + public bool PrintSql { get => throw null; set => throw null; } + public System.Collections.IEnumerable RefResults { get => throw null; set => throw null; } + public System.Func RefResultsFn { get => throw null; set => throw null; } + public object RefSingleResult { get => throw null; set => throw null; } + public System.Func RefSingleResultFn { get => throw null; set => throw null; } + public System.Collections.IEnumerable Results { get => throw null; set => throw null; } + public System.Func ResultsFn { get => throw null; set => throw null; } + public object ScalarResult { get => throw null; set => throw null; } + public System.Func ScalarResultFn { get => throw null; set => throw null; } + public object SingleResult { get => throw null; set => throw null; } + public System.Func SingleResultFn { get => throw null; set => throw null; } + public System.Action SqlCommandFilter { get => throw null; set => throw null; } + public System.Action SqlFilter { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.OrmLite.OrmLiteResultsFilterExtensions` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class OrmLiteResultsFilterExtensions + { + public static T ConvertTo(this System.Data.IDbCommand dbCmd, string sql = default(string)) => throw null; + public static System.Collections.IList ConvertToList(this System.Data.IDbCommand dbCmd, System.Type refType, string sql = default(string)) => throw null; + public static System.Collections.Generic.List ConvertToList(this System.Data.IDbCommand dbCmd, string sql = default(string)) => throw null; + public static System.Int64 ExecLongScalar(this System.Data.IDbCommand dbCmd, string sql = default(string)) => throw null; + public static int ExecNonQuery(this System.Data.IDbCommand dbCmd, string sql, object anonType = default(object)) => throw null; + public static int ExecNonQuery(this System.Data.IDbCommand dbCmd, string sql, System.Collections.Generic.Dictionary dict) => throw null; + public static int ExecNonQuery(this System.Data.IDbCommand dbCmd, string sql, System.Action dbCmdFilter) => throw null; + public static int ExecNonQuery(this System.Data.IDbCommand dbCmd) => throw null; + public static System.Data.IDbDataParameter PopulateWith(this System.Data.IDbDataParameter to, System.Data.IDbDataParameter from) => throw null; + public static object Scalar(this System.Data.IDbCommand dbCmd, string sql = default(string)) => throw null; + public static object Scalar(this System.Data.IDbCommand dbCmd, ServiceStack.OrmLite.ISqlExpression sqlExpression) => throw null; + } + + // Generated from `ServiceStack.OrmLite.OrmLiteResultsFilterExtensionsAsync` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class OrmLiteResultsFilterExtensionsAsync + { + public static System.Threading.Tasks.Task ConvertToAsync(this System.Data.IDbCommand dbCmd, string sql, System.Threading.CancellationToken token) => throw null; + public static System.Threading.Tasks.Task ConvertToAsync(this System.Data.IDbCommand dbCmd) => throw null; + public static System.Threading.Tasks.Task ConvertToListAsync(this System.Data.IDbCommand dbCmd, System.Type refType, string sql, System.Threading.CancellationToken token) => throw null; + public static System.Threading.Tasks.Task ConvertToListAsync(this System.Data.IDbCommand dbCmd, System.Type refType) => throw null; + public static System.Threading.Tasks.Task> ConvertToListAsync(this System.Data.IDbCommand dbCmd, string sql, System.Threading.CancellationToken token) => throw null; + public static System.Threading.Tasks.Task> ConvertToListAsync(this System.Data.IDbCommand dbCmd) => throw null; + public static System.Threading.Tasks.Task ExecLongScalarAsync(this System.Data.IDbCommand dbCmd, string sql, System.Threading.CancellationToken token) => throw null; + public static System.Threading.Tasks.Task ExecLongScalarAsync(this System.Data.IDbCommand dbCmd) => throw null; + public static System.Threading.Tasks.Task ExecNonQueryAsync(this System.Data.IDbCommand dbCmd, string sql, object anonType, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task ExecNonQueryAsync(this System.Data.IDbCommand dbCmd, string sql, System.Collections.Generic.Dictionary dict, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task ExecNonQueryAsync(this System.Data.IDbCommand dbCmd, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task ScalarAsync(this System.Data.IDbCommand dbCmd, string sql, System.Threading.CancellationToken token) => throw null; + public static System.Threading.Tasks.Task ScalarAsync(this System.Data.IDbCommand dbCmd, ServiceStack.OrmLite.ISqlExpression expression, System.Threading.CancellationToken token) => throw null; + public static System.Threading.Tasks.Task ScalarAsync(this System.Data.IDbCommand dbCmd) => throw null; + public static System.Threading.Tasks.Task ScalarAsync(this System.Data.IDbCommand dbCmd, string sql, System.Threading.CancellationToken token) => throw null; + public static System.Threading.Tasks.Task ScalarAsync(this System.Data.IDbCommand dbCmd, string sql, System.Collections.Generic.IEnumerable sqlParams, System.Threading.CancellationToken token) => throw null; + public static System.Threading.Tasks.Task ScalarAsync(this System.Data.IDbCommand dbCmd) => throw null; + } + + // Generated from `ServiceStack.OrmLite.OrmLiteSPStatement` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class OrmLiteSPStatement : System.IDisposable + { + public System.Collections.Generic.List ConvertFirstColumnToList() => throw null; + public System.Collections.Generic.HashSet ConvertFirstColumnToListDistinct() => throw null; + public T ConvertTo() => throw null; + public System.Collections.Generic.List ConvertToList() => throw null; + public T ConvertToScalar() => throw null; + public System.Collections.Generic.List ConvertToScalarList() => throw null; + public void Dispose() => throw null; + public int ExecuteNonQuery() => throw null; + public bool HasResult() => throw null; + public OrmLiteSPStatement(System.Data.IDbConnection db, System.Data.IDbCommand dbCmd) => throw null; + public OrmLiteSPStatement(System.Data.IDbCommand dbCmd) => throw null; + public int ReturnValue { get => throw null; } + public bool TryGetParameterValue(string parameterName, out object value) => throw null; + } + + // Generated from `ServiceStack.OrmLite.OrmLiteSchemaApi` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class OrmLiteSchemaApi + { + public static bool ColumnExists(this System.Data.IDbConnection dbConn, System.Linq.Expressions.Expression> field) => throw null; + public static bool ColumnExists(this System.Data.IDbConnection dbConn, string columnName, string tableName, string schema = default(string)) => throw null; + public static System.Threading.Tasks.Task ColumnExistsAsync(this System.Data.IDbConnection dbConn, System.Linq.Expressions.Expression> field, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task ColumnExistsAsync(this System.Data.IDbConnection dbConn, string columnName, string tableName, string schema = default(string), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static void CreateSchema(this System.Data.IDbConnection dbConn) => throw null; + public static bool CreateSchema(this System.Data.IDbConnection dbConn, string schemaName) => throw null; + public static void CreateTable(this System.Data.IDbConnection dbConn, bool overwrite = default(bool)) => throw null; + public static void CreateTable(this System.Data.IDbConnection dbConn, bool overwrite, System.Type modelType) => throw null; + public static void CreateTableIfNotExists(this System.Data.IDbConnection dbConn, params System.Type[] tableTypes) => throw null; + public static bool CreateTableIfNotExists(this System.Data.IDbConnection dbConn) => throw null; + public static bool CreateTableIfNotExists(this System.Data.IDbConnection dbConn, System.Type modelType) => throw null; + public static void CreateTables(this System.Data.IDbConnection dbConn, bool overwrite, params System.Type[] tableTypes) => throw null; + public static void DropAndCreateTable(this System.Data.IDbConnection dbConn) => throw null; + public static void DropAndCreateTable(this System.Data.IDbConnection dbConn, System.Type modelType) => throw null; + public static void DropAndCreateTables(this System.Data.IDbConnection dbConn, params System.Type[] tableTypes) => throw null; + public static void DropTable(this System.Data.IDbConnection dbConn) => throw null; + public static void DropTable(this System.Data.IDbConnection dbConn, System.Type modelType) => throw null; + public static void DropTables(this System.Data.IDbConnection dbConn, params System.Type[] tableTypes) => throw null; + public static bool TableExists(this System.Data.IDbConnection dbConn) => throw null; + public static bool TableExists(this System.Data.IDbConnection dbConn, string tableName, string schema = default(string)) => throw null; + public static System.Threading.Tasks.Task TableExistsAsync(this System.Data.IDbConnection dbConn, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task TableExistsAsync(this System.Data.IDbConnection dbConn, string tableName, string schema = default(string), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + } + + // Generated from `ServiceStack.OrmLite.OrmLiteSchemaModifyApi` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class OrmLiteSchemaModifyApi + { + public static void AddColumn(this System.Data.IDbConnection dbConn, System.Linq.Expressions.Expression> field) => throw null; + public static void AddColumn(this System.Data.IDbConnection dbConn, System.Type modelType, ServiceStack.OrmLite.FieldDefinition fieldDef) => throw null; + public static void AddForeignKey(this System.Data.IDbConnection dbConn, System.Linq.Expressions.Expression> field, System.Linq.Expressions.Expression> foreignField, ServiceStack.OrmLite.OnFkOption onUpdate, ServiceStack.OrmLite.OnFkOption onDelete, string foreignKeyName = default(string)) => throw null; + public static void AlterColumn(this System.Data.IDbConnection dbConn, System.Linq.Expressions.Expression> field) => throw null; + public static void AlterColumn(this System.Data.IDbConnection dbConn, System.Type modelType, ServiceStack.OrmLite.FieldDefinition fieldDef) => throw null; + public static void AlterTable(this System.Data.IDbConnection dbConn, string command) => throw null; + public static void AlterTable(this System.Data.IDbConnection dbConn, System.Type modelType, string command) => throw null; + public static void ChangeColumnName(this System.Data.IDbConnection dbConn, System.Linq.Expressions.Expression> field, string oldColumnName) => throw null; + public static void ChangeColumnName(this System.Data.IDbConnection dbConn, System.Type modelType, ServiceStack.OrmLite.FieldDefinition fieldDef, string oldColumnName) => throw null; + public static void CreateIndex(this System.Data.IDbConnection dbConn, System.Linq.Expressions.Expression> field, string indexName = default(string), bool unique = default(bool)) => throw null; + public static void DropColumn(this System.Data.IDbConnection dbConn, string columnName) => throw null; + public static void DropColumn(this System.Data.IDbConnection dbConn, System.Linq.Expressions.Expression> field) => throw null; + public static void DropColumn(this System.Data.IDbConnection dbConn, System.Type modelType, string columnName) => throw null; + public static void DropForeignKey(this System.Data.IDbConnection dbConn, string foreignKeyName) => throw null; + public static void DropIndex(this System.Data.IDbConnection dbConn, string indexName) => throw null; + } + + // Generated from `ServiceStack.OrmLite.OrmLiteState` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class OrmLiteState + { + public System.Int64 Id; + public OrmLiteState() => throw null; + public ServiceStack.OrmLite.IOrmLiteResultsFilter ResultsFilter; + public System.Data.IDbTransaction TSTransaction; + public override string ToString() => throw null; + } + + // Generated from `ServiceStack.OrmLite.OrmLiteTransaction` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class OrmLiteTransaction : System.IDisposable, System.Data.IDbTransaction, ServiceStack.Data.IHasDbTransaction + { + public void Commit() => throw null; + public System.Data.IDbConnection Connection { get => throw null; } + public System.Data.IDbTransaction DbTransaction { get => throw null; } + public void Dispose() => throw null; + public System.Data.IsolationLevel IsolationLevel { get => throw null; } + public OrmLiteTransaction(System.Data.IDbConnection db, System.Data.IDbTransaction transaction) => throw null; + public void Rollback() => throw null; + public System.Data.IDbTransaction Transaction { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.OrmLite.OrmLiteUtils` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class OrmLiteUtils + { + public static string AliasOrColumn(this string quotedExpr) => throw null; + public static string[] AllAnonFields(this System.Type type) => throw null; + public static void AssertNotAnonType() => throw null; + public static void CaptureSql(System.Text.StringBuilder sb) => throw null; + public static System.Text.StringBuilder CaptureSql() => throw null; + public static object ConvertTo(this System.Data.IDataReader reader, ServiceStack.OrmLite.IOrmLiteDialectProvider dialectProvider, System.Type type) => throw null; + public static T ConvertTo(this System.Data.IDataReader reader, ServiceStack.OrmLite.IOrmLiteDialectProvider dialectProvider, System.Collections.Generic.HashSet onlyFields = default(System.Collections.Generic.HashSet)) => throw null; + public static System.Collections.Generic.Dictionary ConvertToDictionaryObjects(this System.Data.IDataReader dataReader) => throw null; + public static System.Collections.Generic.IDictionary ConvertToExpandoObject(this System.Data.IDataReader dataReader) => throw null; + public static System.Collections.IList ConvertToList(this System.Data.IDataReader reader, ServiceStack.OrmLite.IOrmLiteDialectProvider dialectProvider, System.Type type) => throw null; + public static System.Collections.Generic.List ConvertToList(this System.Data.IDataReader reader, ServiceStack.OrmLite.IOrmLiteDialectProvider dialectProvider, System.Collections.Generic.HashSet onlyFields = default(System.Collections.Generic.HashSet)) => throw null; + public static System.Collections.Generic.List ConvertToListObjects(this System.Data.IDataReader dataReader) => throw null; + public static System.UInt64 ConvertToULong(System.Byte[] bytes) => throw null; + public static T ConvertToValueTuple(this System.Data.IDataReader reader, object[] values, ServiceStack.OrmLite.IOrmLiteDialectProvider dialectProvider) => throw null; + public static T CreateInstance() => throw null; + public static void DebugCommand(this ServiceStack.Logging.ILog log, System.Data.IDbCommand cmd) => throw null; + public static T EvalFactoryFn(this System.Linq.Expressions.Expression> expr) => throw null; + public static string GetColumnNames(this ServiceStack.OrmLite.ModelDefinition modelDef, ServiceStack.OrmLite.IOrmLiteDialectProvider dialect) => throw null; + public static string GetDebugString(this System.Data.IDbCommand cmd) => throw null; + public static System.Tuple[] GetIndexFieldsCache(this System.Data.IDataReader reader, ServiceStack.OrmLite.ModelDefinition modelDefinition, ServiceStack.OrmLite.IOrmLiteDialectProvider dialect, System.Collections.Generic.HashSet onlyFields = default(System.Collections.Generic.HashSet), int startPos = default(int), int? endPos = default(int?)) => throw null; + public static ServiceStack.OrmLite.ModelDefinition GetModelDefinition(System.Type modelType) => throw null; + public static System.Collections.Generic.List GetNonDefaultValueInsertFields(this ServiceStack.OrmLite.IOrmLiteDialectProvider dialectProvider, object obj) => throw null; + public static System.Collections.Generic.List GetNonDefaultValueInsertFields(T obj) => throw null; + public static void HandleException(System.Exception ex, string message = default(string)) => throw null; + public static string[] IllegalSqlFragmentTokens; + public static bool IsRefType(this System.Type fieldType) => throw null; + public static bool IsScalar() => throw null; + public static ServiceStack.OrmLite.JoinFormatDelegate JoinAlias(string alias) => throw null; + public static System.Collections.Generic.List Merge(this System.Collections.Generic.List parents, System.Collections.Generic.List children) => throw null; + public static System.Collections.Generic.List Merge(this Parent parent, System.Collections.Generic.List children) => throw null; + public static string OrderByFields(ServiceStack.OrmLite.IOrmLiteDialectProvider dialect, string orderBy) => throw null; + public static System.Collections.Generic.List ParseTokens(this string expr) => throw null; + public static void PrintSql() => throw null; + public static string QuotedLiteral(string text) => throw null; + public static string SqlColumn(this string columnName, ServiceStack.OrmLite.IOrmLiteDialectProvider dialect = default(ServiceStack.OrmLite.IOrmLiteDialectProvider)) => throw null; + public static string SqlColumnRaw(this string columnName, ServiceStack.OrmLite.IOrmLiteDialectProvider dialect = default(ServiceStack.OrmLite.IOrmLiteDialectProvider)) => throw null; + public static string SqlFmt(this string sqlText, params object[] sqlParams) => throw null; + public static string SqlFmt(this string sqlText, ServiceStack.OrmLite.IOrmLiteDialectProvider dialect, params object[] sqlParams) => throw null; + public static string SqlInParams(this T[] values, ServiceStack.OrmLite.IOrmLiteDialectProvider dialect = default(ServiceStack.OrmLite.IOrmLiteDialectProvider)) => throw null; + public static ServiceStack.OrmLite.SqlInValues SqlInValues(this T[] values, ServiceStack.OrmLite.IOrmLiteDialectProvider dialect = default(ServiceStack.OrmLite.IOrmLiteDialectProvider)) => throw null; + public static string SqlJoin(this System.Collections.Generic.List values, ServiceStack.OrmLite.IOrmLiteDialectProvider dialect = default(ServiceStack.OrmLite.IOrmLiteDialectProvider)) => throw null; + public static string SqlJoin(System.Collections.IEnumerable values, ServiceStack.OrmLite.IOrmLiteDialectProvider dialect = default(ServiceStack.OrmLite.IOrmLiteDialectProvider)) => throw null; + public static string SqlParam(this string paramValue) => throw null; + public static string SqlTable(this string tableName, ServiceStack.OrmLite.IOrmLiteDialectProvider dialect = default(ServiceStack.OrmLite.IOrmLiteDialectProvider)) => throw null; + public static string SqlTableRaw(this string tableName, ServiceStack.OrmLite.IOrmLiteDialectProvider dialect = default(ServiceStack.OrmLite.IOrmLiteDialectProvider)) => throw null; + public static string SqlValue(this object value) => throw null; + public static string SqlVerifyFragment(this string sqlFragment, System.Collections.Generic.IEnumerable illegalFragments) => throw null; + public static string SqlVerifyFragment(this string sqlFragment) => throw null; + public static System.Func SqlVerifyFragmentFn { get => throw null; set => throw null; } + public static string StripDbQuotes(this string quotedExpr) => throw null; + public static string StripQuotedStrings(this string text, System.Char quote = default(System.Char)) => throw null; + public static string StripTablePrefixes(this string selectExpression) => throw null; + public static string ToSelectString(this System.Collections.Generic.IEnumerable items) => throw null; + public static void UnCaptureSql() => throw null; + public static string UnCaptureSqlAndFree(System.Text.StringBuilder sb) => throw null; + public static void UnPrintSql() => throw null; + public static string UnquotedColumnName(string columnExpr) => throw null; + public static System.Text.RegularExpressions.Regex VerifyFragmentRegEx; + public static System.Text.RegularExpressions.Regex VerifySqlRegEx; + public static bool isUnsafeSql(string sql, System.Text.RegularExpressions.Regex verifySql) => throw null; + } + + // Generated from `ServiceStack.OrmLite.OrmLiteVariables` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class OrmLiteVariables + { + public const string False = default; + public const string MaxText = default; + public const string MaxTextUnicode = default; + public const string SystemUtc = default; + public const string True = default; + } + + // Generated from `ServiceStack.OrmLite.OrmLiteWriteApi` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class OrmLiteWriteApi + { + public static int Delete(this System.Data.IDbConnection dbConn, string sqlFilter, object anonType) => throw null; + public static int Delete(this System.Data.IDbConnection dbConn, params T[] allFieldsFilters) => throw null; + public static int Delete(this System.Data.IDbConnection dbConn, object anonFilter, System.Action commandFilter = default(System.Action)) => throw null; + public static int Delete(this System.Data.IDbConnection dbConn, T allFieldsFilter, System.Action commandFilter = default(System.Action)) => throw null; + public static int Delete(this System.Data.IDbConnection dbConn, System.Collections.Generic.Dictionary filters) => throw null; + public static int Delete(this System.Data.IDbConnection dbConn, System.Type tableType, string sqlFilter, object anonType) => throw null; + public static int DeleteAll(this System.Data.IDbConnection dbConn, System.Collections.Generic.IEnumerable rows) => throw null; + public static int DeleteAll(this System.Data.IDbConnection dbConn) => throw null; + public static int DeleteAll(this System.Data.IDbConnection dbConn, System.Type tableType) => throw null; + public static void DeleteById(this System.Data.IDbConnection dbConn, object id, System.UInt64 rowVersion, System.Action commandFilter = default(System.Action)) => throw null; + public static int DeleteById(this System.Data.IDbConnection dbConn, object id, System.Action commandFilter = default(System.Action)) => throw null; + public static int DeleteByIds(this System.Data.IDbConnection dbConn, System.Collections.IEnumerable idValues) => throw null; + public static int DeleteNonDefaults(this System.Data.IDbConnection dbConn, params T[] nonDefaultsFilters) => throw null; + public static int DeleteNonDefaults(this System.Data.IDbConnection dbConn, T nonDefaultsFilter) => throw null; + public static void ExecuteProcedure(this System.Data.IDbConnection dbConn, T obj) => throw null; + public static int ExecuteSql(this System.Data.IDbConnection dbConn, string sql, object dbParams) => throw null; + public static int ExecuteSql(this System.Data.IDbConnection dbConn, string sql, System.Collections.Generic.Dictionary dbParams) => throw null; + public static int ExecuteSql(this System.Data.IDbConnection dbConn, string sql) => throw null; + public static string GetLastSql(this System.Data.IDbConnection dbConn) => throw null; + public static string GetLastSqlAndParams(this System.Data.IDbCommand dbCmd) => throw null; + public static object GetRowVersion(this System.Data.IDbConnection dbConn, object id) => throw null; + public static object GetRowVersion(this System.Data.IDbConnection dbConn, System.Type modelType, object id) => throw null; + public static void Insert(this System.Data.IDbConnection dbConn, params T[] objs) => throw null; + public static void Insert(this System.Data.IDbConnection dbConn, System.Action commandFilter, params T[] objs) => throw null; + public static System.Int64 Insert(this System.Data.IDbConnection dbConn, T obj, bool selectIdentity = default(bool)) => throw null; + public static System.Int64 Insert(this System.Data.IDbConnection dbConn, T obj, System.Action commandFilter, bool selectIdentity = default(bool)) => throw null; + public static System.Int64 Insert(this System.Data.IDbConnection dbConn, System.Collections.Generic.Dictionary obj, bool selectIdentity = default(bool)) => throw null; + public static System.Int64 Insert(this System.Data.IDbConnection dbConn, System.Action commandFilter, System.Collections.Generic.Dictionary obj, bool selectIdentity = default(bool)) => throw null; + public static void InsertAll(this System.Data.IDbConnection dbConn, System.Collections.Generic.IEnumerable objs, System.Action commandFilter) => throw null; + public static void InsertAll(this System.Data.IDbConnection dbConn, System.Collections.Generic.IEnumerable objs) => throw null; + public static System.Int64 InsertIntoSelect(this System.Data.IDbConnection dbConn, ServiceStack.OrmLite.ISqlExpression query, System.Action commandFilter) => throw null; + public static System.Int64 InsertIntoSelect(this System.Data.IDbConnection dbConn, ServiceStack.OrmLite.ISqlExpression query) => throw null; + public static void InsertUsingDefaults(this System.Data.IDbConnection dbConn, params T[] objs) => throw null; + public static int Save(this System.Data.IDbConnection dbConn, params T[] objs) => throw null; + public static bool Save(this System.Data.IDbConnection dbConn, T obj, bool references = default(bool)) => throw null; + public static int SaveAll(this System.Data.IDbConnection dbConn, System.Collections.Generic.IEnumerable objs) => throw null; + public static void SaveAllReferences(this System.Data.IDbConnection dbConn, T instance) => throw null; + public static void SaveReferences(this System.Data.IDbConnection dbConn, T instance, params TRef[] refs) => throw null; + public static void SaveReferences(this System.Data.IDbConnection dbConn, T instance, System.Collections.Generic.List refs) => throw null; + public static void SaveReferences(this System.Data.IDbConnection dbConn, T instance, System.Collections.Generic.IEnumerable refs) => throw null; + public static string ToInsertStatement(this System.Data.IDbConnection dbConn, T item, System.Collections.Generic.ICollection insertFields = default(System.Collections.Generic.ICollection)) => throw null; + public static string ToUpdateStatement(this System.Data.IDbConnection dbConn, T item, System.Collections.Generic.ICollection updateFields = default(System.Collections.Generic.ICollection)) => throw null; + public static int Update(this System.Data.IDbConnection dbConn, params T[] objs) => throw null; + public static int Update(this System.Data.IDbConnection dbConn, T obj, System.Action commandFilter = default(System.Action)) => throw null; + public static int Update(this System.Data.IDbConnection dbConn, System.Collections.Generic.Dictionary obj, System.Action commandFilter = default(System.Action)) => throw null; + public static int Update(this System.Data.IDbConnection dbConn, System.Action commandFilter, params T[] objs) => throw null; + public static int UpdateAll(this System.Data.IDbConnection dbConn, System.Collections.Generic.IEnumerable objs, System.Action commandFilter = default(System.Action)) => throw null; + } + + // Generated from `ServiceStack.OrmLite.OrmLiteWriteApiAsync` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class OrmLiteWriteApiAsync + { + public static System.Threading.Tasks.Task DeleteAllAsync(this System.Data.IDbConnection dbConn, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task DeleteAllAsync(this System.Data.IDbConnection dbConn, System.Type tableType, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task DeleteAsync(this System.Data.IDbConnection dbConn, string sqlFilter, object anonType, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task DeleteAsync(this System.Data.IDbConnection dbConn, object anonFilter, System.Action commandFilter = default(System.Action), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task DeleteAsync(this System.Data.IDbConnection dbConn, T allFieldsFilter, System.Action commandFilter = default(System.Action), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task DeleteAsync(this System.Data.IDbConnection dbConn, System.Collections.Generic.Dictionary filters, System.Action commandFilter = default(System.Action), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task DeleteAsync(this System.Data.IDbConnection dbConn, System.Action commandFilter = default(System.Action), params T[] allFieldsFilters) => throw null; + public static System.Threading.Tasks.Task DeleteAsync(this System.Data.IDbConnection dbConn, System.Action commandFilter = default(System.Action), System.Threading.CancellationToken token = default(System.Threading.CancellationToken), params T[] allFieldsFilters) => throw null; + public static System.Threading.Tasks.Task DeleteAsync(this System.Data.IDbConnection dbConn, System.Type tableType, string sqlFilter, object anonType, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task DeleteByIdAsync(this System.Data.IDbConnection dbConn, object id, System.Action commandFilter = default(System.Action), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task DeleteByIdAsync(this System.Data.IDbConnection dbConn, object id, System.UInt64 rowVersion, System.Action commandFilter = default(System.Action), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task DeleteByIdsAsync(this System.Data.IDbConnection dbConn, System.Collections.IEnumerable idValues, System.Action commandFilter = default(System.Action), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task DeleteNonDefaultsAsync(this System.Data.IDbConnection dbConn, params T[] nonDefaultsFilters) => throw null; + public static System.Threading.Tasks.Task DeleteNonDefaultsAsync(this System.Data.IDbConnection dbConn, T nonDefaultsFilter, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task DeleteNonDefaultsAsync(this System.Data.IDbConnection dbConn, System.Threading.CancellationToken token, params T[] nonDefaultsFilters) => throw null; + public static System.Threading.Tasks.Task ExecuteProcedureAsync(this System.Data.IDbConnection dbConn, T obj, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task ExecuteSqlAsync(this System.Data.IDbConnection dbConn, string sql, object dbParams, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task ExecuteSqlAsync(this System.Data.IDbConnection dbConn, string sql, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task GetRowVersionAsync(this System.Data.IDbConnection dbConn, object id, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task GetRowVersionAsync(this System.Data.IDbConnection dbConn, System.Type modelType, object id, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task InsertAllAsync(this System.Data.IDbConnection dbConn, System.Collections.Generic.IEnumerable objs, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task InsertAllAsync(this System.Data.IDbConnection dbConn, System.Collections.Generic.IEnumerable objs, System.Action commandFilter, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task InsertAsync(this System.Data.IDbConnection dbConn, T obj, bool selectIdentity = default(bool), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task InsertAsync(this System.Data.IDbConnection dbConn, T obj, System.Action commandFilter, bool selectIdentity = default(bool), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task InsertAsync(this System.Data.IDbConnection dbConn, System.Collections.Generic.Dictionary obj, bool selectIdentity = default(bool), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task InsertAsync(this System.Data.IDbConnection dbConn, System.Action commandFilter, System.Collections.Generic.Dictionary obj, bool selectIdentity = default(bool), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task InsertAsync(this System.Data.IDbConnection dbConn, params T[] objs) => throw null; + public static System.Threading.Tasks.Task InsertAsync(this System.Data.IDbConnection dbConn, System.Threading.CancellationToken token, params T[] objs) => throw null; + public static System.Threading.Tasks.Task InsertAsync(this System.Data.IDbConnection dbConn, System.Action commandFilter, System.Threading.CancellationToken token, params T[] objs) => throw null; + public static System.Threading.Tasks.Task InsertIntoSelectAsync(this System.Data.IDbConnection dbConn, ServiceStack.OrmLite.ISqlExpression query, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task InsertIntoSelectAsync(this System.Data.IDbConnection dbConn, ServiceStack.OrmLite.ISqlExpression query, System.Action commandFilter, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task InsertUsingDefaultsAsync(this System.Data.IDbConnection dbConn, T[] objs, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task SaveAllAsync(this System.Data.IDbConnection dbConn, System.Collections.Generic.IEnumerable objs, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task SaveAllReferencesAsync(this System.Data.IDbConnection dbConn, T instance, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task SaveAsync(this System.Data.IDbConnection dbConn, params T[] objs) => throw null; + public static System.Threading.Tasks.Task SaveAsync(this System.Data.IDbConnection dbConn, System.Threading.CancellationToken token, params T[] objs) => throw null; + public static System.Threading.Tasks.Task SaveAsync(this System.Data.IDbConnection dbConn, T obj, bool references = default(bool), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task SaveReferencesAsync(this System.Data.IDbConnection dbConn, T instance, params TRef[] refs) => throw null; + public static System.Threading.Tasks.Task SaveReferencesAsync(this System.Data.IDbConnection dbConn, T instance, System.Collections.Generic.List refs, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task SaveReferencesAsync(this System.Data.IDbConnection dbConn, T instance, System.Collections.Generic.IEnumerable refs, System.Threading.CancellationToken token) => throw null; + public static System.Threading.Tasks.Task SaveReferencesAsync(this System.Data.IDbConnection dbConn, System.Threading.CancellationToken token, T instance, params TRef[] refs) => throw null; + public static System.Threading.Tasks.Task UpdateAllAsync(this System.Data.IDbConnection dbConn, System.Collections.Generic.IEnumerable objs, System.Action commandFilter = default(System.Action), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task UpdateAsync(this System.Data.IDbConnection dbConn, params T[] objs) => throw null; + public static System.Threading.Tasks.Task UpdateAsync(this System.Data.IDbConnection dbConn, T obj, System.Action commandFilter = default(System.Action), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task UpdateAsync(this System.Data.IDbConnection dbConn, System.Threading.CancellationToken token, params T[] objs) => throw null; + public static System.Threading.Tasks.Task UpdateAsync(this System.Data.IDbConnection dbConn, System.Collections.Generic.Dictionary obj, System.Action commandFilter = default(System.Action), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task UpdateAsync(this System.Data.IDbConnection dbConn, System.Action commandFilter, params T[] objs) => throw null; + public static System.Threading.Tasks.Task UpdateAsync(this System.Data.IDbConnection dbConn, System.Action commandFilter, System.Threading.CancellationToken token, params T[] objs) => throw null; + } + + // Generated from `ServiceStack.OrmLite.OrmLiteWriteCommandExtensions` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class OrmLiteWriteCommandExtensions + { + public static int GetColumnIndex(this System.Data.IDataReader reader, ServiceStack.OrmLite.IOrmLiteDialectProvider dialectProvider, string fieldName) => throw null; + public static void PopulateObjectWithSqlReader(this ServiceStack.OrmLite.IOrmLiteDialectProvider dialectProvider, object objWithProperties, System.Data.IDataReader reader, System.Tuple[] indexCache, object[] values) => throw null; + public static T PopulateWithSqlReader(this T objWithProperties, ServiceStack.OrmLite.IOrmLiteDialectProvider dialectProvider, System.Data.IDataReader reader, System.Tuple[] indexCache, object[] values) => throw null; + public static T PopulateWithSqlReader(this T objWithProperties, ServiceStack.OrmLite.IOrmLiteDialectProvider dialectProvider, System.Data.IDataReader reader) => throw null; + } + + // Generated from `ServiceStack.OrmLite.OrmLiteWriteExpressionsApi` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class OrmLiteWriteExpressionsApi + { + public static int Delete(this System.Data.IDbConnection dbConn, System.Linq.Expressions.Expression> where, System.Action commandFilter = default(System.Action)) => throw null; + public static int Delete(this System.Data.IDbConnection dbConn, ServiceStack.OrmLite.SqlExpression where, System.Action commandFilter = default(System.Action)) => throw null; + public static int DeleteWhere(this System.Data.IDbConnection dbConn, string whereFilter, object[] whereParams) => throw null; + public static System.Int64 InsertOnly(this System.Data.IDbConnection dbConn, T obj, string[] onlyFields, bool selectIdentity = default(bool)) => throw null; + public static System.Int64 InsertOnly(this System.Data.IDbConnection dbConn, T obj, System.Linq.Expressions.Expression> onlyFields, bool selectIdentity = default(bool)) => throw null; + public static System.Int64 InsertOnly(this System.Data.IDbConnection dbConn, System.Linq.Expressions.Expression> insertFields, bool selectIdentity = default(bool)) => throw null; + public static int Update(this System.Data.IDbConnection dbConn, object updateOnly, System.Linq.Expressions.Expression> where, System.Action commandFilter = default(System.Action)) => throw null; + public static int Update(this System.Data.IDbConnection dbConn, T item, System.Linq.Expressions.Expression> where, System.Action commandFilter = default(System.Action)) => throw null; + public static int UpdateAdd(this System.Data.IDbConnection dbConn, System.Linq.Expressions.Expression> updateFields, System.Linq.Expressions.Expression> where = default(System.Linq.Expressions.Expression>), System.Action commandFilter = default(System.Action)) => throw null; + public static int UpdateAdd(this System.Data.IDbConnection dbConn, System.Linq.Expressions.Expression> updateFields, ServiceStack.OrmLite.SqlExpression q, System.Action commandFilter = default(System.Action)) => throw null; + public static int UpdateNonDefaults(this System.Data.IDbConnection dbConn, T item, System.Linq.Expressions.Expression> obj) => throw null; + public static int UpdateOnly(this System.Data.IDbConnection dbConn, T obj, string[] onlyFields, System.Linq.Expressions.Expression> where = default(System.Linq.Expressions.Expression>), System.Action commandFilter = default(System.Action)) => throw null; + public static int UpdateOnly(this System.Data.IDbConnection dbConn, T obj, System.Linq.Expressions.Expression> onlyFields = default(System.Linq.Expressions.Expression>), System.Linq.Expressions.Expression> where = default(System.Linq.Expressions.Expression>), System.Action commandFilter = default(System.Action)) => throw null; + public static int UpdateOnly(this System.Data.IDbConnection dbConn, T model, ServiceStack.OrmLite.SqlExpression onlyFields, System.Action commandFilter = default(System.Action)) => throw null; + public static int UpdateOnly(this System.Data.IDbConnection dbConn, System.Linq.Expressions.Expression> updateFields, string whereExpression, System.Collections.Generic.IEnumerable sqlParams, System.Action commandFilter = default(System.Action)) => throw null; + public static int UpdateOnly(this System.Data.IDbConnection dbConn, System.Linq.Expressions.Expression> updateFields, System.Linq.Expressions.Expression> where = default(System.Linq.Expressions.Expression>), System.Action commandFilter = default(System.Action)) => throw null; + public static int UpdateOnly(this System.Data.IDbConnection dbConn, System.Linq.Expressions.Expression> updateFields, ServiceStack.OrmLite.SqlExpression q, System.Action commandFilter = default(System.Action)) => throw null; + public static int UpdateOnly(this System.Data.IDbConnection dbConn, System.Collections.Generic.Dictionary updateFields, string whereExpression, object[] whereParams, System.Action commandFilter = default(System.Action)) => throw null; + public static int UpdateOnly(this System.Data.IDbConnection dbConn, System.Collections.Generic.Dictionary updateFields, System.Linq.Expressions.Expression> obj) => throw null; + public static int UpdateOnly(this System.Data.IDbConnection dbConn, System.Collections.Generic.Dictionary updateFields, System.Action commandFilter = default(System.Action)) => throw null; + } + + // Generated from `ServiceStack.OrmLite.OrmLiteWriteExpressionsApiAsync` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class OrmLiteWriteExpressionsApiAsync + { + public static System.Threading.Tasks.Task DeleteAsync(this System.Data.IDbConnection dbConn, System.Linq.Expressions.Expression> where, System.Action commandFilter = default(System.Action), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task DeleteAsync(this System.Data.IDbConnection dbConn, ServiceStack.OrmLite.SqlExpression where, System.Action commandFilter = default(System.Action), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task DeleteWhereAsync(this System.Data.IDbConnection dbConn, string whereFilter, object[] whereParams, System.Action commandFilter = default(System.Action), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task InsertOnlyAsync(this System.Data.IDbConnection dbConn, System.Linq.Expressions.Expression> insertFields, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task InsertOnlyAsync(this System.Data.IDbConnection dbConn, T obj, string[] onlyFields, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task InsertOnlyAsync(this System.Data.IDbConnection dbConn, T obj, System.Linq.Expressions.Expression> onlyFields, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task UpdateAddAsync(this System.Data.IDbConnection dbConn, System.Linq.Expressions.Expression> updateFields, System.Linq.Expressions.Expression> where = default(System.Linq.Expressions.Expression>), System.Action commandFilter = default(System.Action), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task UpdateAddAsync(this System.Data.IDbConnection dbConn, System.Linq.Expressions.Expression> updateFields, ServiceStack.OrmLite.SqlExpression q, System.Action commandFilter = default(System.Action), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task UpdateAsync(this System.Data.IDbConnection dbConn, object updateOnly, System.Linq.Expressions.Expression> where = default(System.Linq.Expressions.Expression>), System.Action commandFilter = default(System.Action), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task UpdateAsync(this System.Data.IDbConnection dbConn, T item, System.Linq.Expressions.Expression> where, System.Action commandFilter = default(System.Action), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task UpdateNonDefaultsAsync(this System.Data.IDbConnection dbConn, T item, System.Linq.Expressions.Expression> obj, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task UpdateOnlyAsync(this System.Data.IDbConnection dbConn, T obj, string[] onlyFields, System.Linq.Expressions.Expression> where = default(System.Linq.Expressions.Expression>), System.Action commandFilter = default(System.Action), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task UpdateOnlyAsync(this System.Data.IDbConnection dbConn, T obj, System.Linq.Expressions.Expression> onlyFields = default(System.Linq.Expressions.Expression>), System.Linq.Expressions.Expression> where = default(System.Linq.Expressions.Expression>), System.Action commandFilter = default(System.Action), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task UpdateOnlyAsync(this System.Data.IDbConnection dbConn, T model, ServiceStack.OrmLite.SqlExpression onlyFields, System.Action commandFilter = default(System.Action), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task UpdateOnlyAsync(this System.Data.IDbConnection dbConn, System.Linq.Expressions.Expression> updateFields, string whereExpression, System.Collections.Generic.IEnumerable sqlParams, System.Action commandFilter = default(System.Action), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task UpdateOnlyAsync(this System.Data.IDbConnection dbConn, System.Linq.Expressions.Expression> updateFields, System.Linq.Expressions.Expression> where = default(System.Linq.Expressions.Expression>), System.Action commandFilter = default(System.Action), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task UpdateOnlyAsync(this System.Data.IDbConnection dbConn, System.Linq.Expressions.Expression> updateFields, ServiceStack.OrmLite.SqlExpression q, System.Action commandFilter = default(System.Action), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task UpdateOnlyAsync(this System.Data.IDbConnection dbConn, System.Collections.Generic.Dictionary updateFields, string whereExpression, object[] whereParams, System.Action commandFilter = default(System.Action), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task UpdateOnlyAsync(this System.Data.IDbConnection dbConn, System.Collections.Generic.Dictionary updateFields, System.Linq.Expressions.Expression> where, System.Action commandFilter = default(System.Action), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task UpdateOnlyAsync(this System.Data.IDbConnection dbConn, System.Collections.Generic.Dictionary updateFields, System.Action commandFilter = default(System.Action), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + } + + // Generated from `ServiceStack.OrmLite.ParameterRebinder` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ParameterRebinder : ServiceStack.OrmLite.SqlExpressionVisitor + { + public ParameterRebinder(System.Collections.Generic.Dictionary map) => throw null; + public static System.Linq.Expressions.Expression ReplaceParameters(System.Collections.Generic.Dictionary map, System.Linq.Expressions.Expression exp) => throw null; + protected override System.Linq.Expressions.Expression VisitParameter(System.Linq.Expressions.ParameterExpression p) => throw null; + } + + // Generated from `ServiceStack.OrmLite.PartialSqlString` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class PartialSqlString + { + public override bool Equals(object obj) => throw null; + protected bool Equals(ServiceStack.OrmLite.PartialSqlString other) => throw null; + public override int GetHashCode() => throw null; + public static ServiceStack.OrmLite.PartialSqlString Null; + public PartialSqlString(string text) => throw null; + public string Text { get => throw null; set => throw null; } + public override string ToString() => throw null; + } + + // Generated from `ServiceStack.OrmLite.PredicateBuilder` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class PredicateBuilder + { + public static System.Linq.Expressions.Expression> And(this System.Linq.Expressions.Expression> first, System.Linq.Expressions.Expression> second) => throw null; + public static System.Linq.Expressions.Expression> Create(System.Linq.Expressions.Expression> predicate) => throw null; + public static System.Linq.Expressions.Expression> False() => throw null; + public static System.Linq.Expressions.Expression> Not(this System.Linq.Expressions.Expression> expression) => throw null; + public static System.Linq.Expressions.Expression> Or(this System.Linq.Expressions.Expression> first, System.Linq.Expressions.Expression> second) => throw null; + public static System.Linq.Expressions.Expression> True() => throw null; + } + + // Generated from `ServiceStack.OrmLite.SelectItem` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public abstract class SelectItem + { + public string Alias { get => throw null; set => throw null; } + protected ServiceStack.OrmLite.IOrmLiteDialectProvider DialectProvider { get => throw null; set => throw null; } + protected SelectItem(ServiceStack.OrmLite.IOrmLiteDialectProvider dialectProvider, string alias) => throw null; + public abstract override string ToString(); + } + + // Generated from `ServiceStack.OrmLite.SelectItemColumn` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class SelectItemColumn : ServiceStack.OrmLite.SelectItem + { + public string ColumnName { get => throw null; set => throw null; } + public string QuotedTableAlias { get => throw null; set => throw null; } + public SelectItemColumn(ServiceStack.OrmLite.IOrmLiteDialectProvider dialectProvider, string columnName, string columnAlias = default(string), string quotedTableAlias = default(string)) : base(default(ServiceStack.OrmLite.IOrmLiteDialectProvider), default(string)) => throw null; + public override string ToString() => throw null; + } + + // Generated from `ServiceStack.OrmLite.SelectItemExpression` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class SelectItemExpression : ServiceStack.OrmLite.SelectItem + { + public string SelectExpression { get => throw null; set => throw null; } + public SelectItemExpression(ServiceStack.OrmLite.IOrmLiteDialectProvider dialectProvider, string selectExpression, string alias) : base(default(ServiceStack.OrmLite.IOrmLiteDialectProvider), default(string)) => throw null; + public override string ToString() => throw null; + } + + // Generated from `ServiceStack.OrmLite.Sql` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class Sql + { + public static T AllFields(T item) => throw null; + public static string As(T value, object asValue) => throw null; + public static string Avg(string value) => throw null; + public static T Avg(T value) => throw null; + public static string Cast(object value, string castAs) => throw null; + public static string Count(string value) => throw null; + public static T Count(T value) => throw null; + public static T CountDistinct(T value) => throw null; + public static string Custom(string customSql) => throw null; + public static T Custom(string customSql) => throw null; + public static string Desc(T value) => throw null; + public const string EOT = default; + public static System.Collections.Generic.List Flatten(System.Collections.IEnumerable list) => throw null; + public static bool In(T value, params TItem[] list) => throw null; + public static bool In(T value, ServiceStack.OrmLite.SqlExpression query) => throw null; + public static bool? IsJson(string expression) => throw null; + public static string JoinAlias(string property, string tableAlias) => throw null; + public static T JoinAlias(T property, string tableAlias) => throw null; + public static string JsonQuery(string expression, string path) => throw null; + public static string JsonQuery(string expression) => throw null; + public static T JsonQuery(string expression, string path) => throw null; + public static T JsonQuery(string expression) => throw null; + public static string JsonValue(string expression, string path) => throw null; + public static T JsonValue(string expression, string path) => throw null; + public static string Max(string value) => throw null; + public static T Max(T value) => throw null; + public static string Min(string value) => throw null; + public static T Min(T value) => throw null; + public static string Sum(string value) => throw null; + public static T Sum(T value) => throw null; + public static string TableAlias(string property, string tableAlias) => throw null; + public static T TableAlias(T property, string tableAlias) => throw null; + public static string VARCHAR; + } + + // Generated from `ServiceStack.OrmLite.SqlBuilder` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class SqlBuilder + { + public ServiceStack.OrmLite.SqlBuilder AddParameters(object parameters) => throw null; + public ServiceStack.OrmLite.SqlBuilder.Template AddTemplate(string sql, object parameters = default(object)) => throw null; + public ServiceStack.OrmLite.SqlBuilder Join(string sql, object parameters = default(object)) => throw null; + public ServiceStack.OrmLite.SqlBuilder LeftJoin(string sql, object parameters = default(object)) => throw null; + public ServiceStack.OrmLite.SqlBuilder OrderBy(string sql, object parameters = default(object)) => throw null; + public ServiceStack.OrmLite.SqlBuilder Select(string sql, object parameters = default(object)) => throw null; + public SqlBuilder() => throw null; + // Generated from `ServiceStack.OrmLite.SqlBuilder+Template` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class Template : ServiceStack.OrmLite.ISqlExpression + { + public object Parameters { get => throw null; } + public System.Collections.Generic.List Params { get => throw null; set => throw null; } + public string RawSql { get => throw null; } + public string SelectInto() => throw null; + public Template(ServiceStack.OrmLite.SqlBuilder builder, string sql, object parameters) => throw null; + public string ToSelectStatement() => throw null; + } + + + public ServiceStack.OrmLite.SqlBuilder Where(string sql, object parameters = default(object)) => throw null; + } + + // Generated from `ServiceStack.OrmLite.SqlCommandDetails` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class SqlCommandDetails + { + public System.Collections.Generic.Dictionary Parameters { get => throw null; set => throw null; } + public string Sql { get => throw null; set => throw null; } + public SqlCommandDetails(System.Data.IDbCommand command) => throw null; + } + + // Generated from `ServiceStack.OrmLite.SqlExpression<>` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public abstract class SqlExpression : ServiceStack.OrmLite.ISqlExpression, ServiceStack.OrmLite.IHasUntypedSqlExpression, ServiceStack.OrmLite.IHasDialectProvider + { + public virtual ServiceStack.OrmLite.SqlExpression AddCondition(string condition, string sqlFilter, params object[] filterParams) => throw null; + public virtual System.Data.IDbDataParameter AddParam(object value) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression And(System.Linq.Expressions.Expression> predicate) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression And(System.Linq.Expressions.Expression> predicate) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression And(System.Linq.Expressions.Expression> predicate) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression And(System.Linq.Expressions.Expression> predicate) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression And(System.Linq.Expressions.Expression> predicate) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression And(System.Linq.Expressions.Expression> predicate) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression And(System.Linq.Expressions.Expression> predicate) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression And(System.Linq.Expressions.Expression> predicate) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression And(System.Linq.Expressions.Expression> predicate) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression And(System.Linq.Expressions.Expression> predicate) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression And(System.Linq.Expressions.Expression> predicate) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression And(System.Linq.Expressions.Expression> predicate) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression And(System.Linq.Expressions.Expression> predicate) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression And(System.Linq.Expressions.Expression> predicate) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression And(System.Linq.Expressions.Expression> predicate) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression And(string sqlFilter, params object[] filterParams) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression And(System.Linq.Expressions.Expression> predicate, params object[] filterParams) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression And(System.Linq.Expressions.Expression> predicate) => throw null; + protected ServiceStack.OrmLite.SqlExpression AppendToEnsure(System.Linq.Expressions.Expression predicate) => throw null; + protected ServiceStack.OrmLite.SqlExpression AppendToWhere(string condition, string sqlExpression) => throw null; + protected ServiceStack.OrmLite.SqlExpression AppendToWhere(string condition, System.Linq.Expressions.Expression predicate, object[] filterParams) => throw null; + protected ServiceStack.OrmLite.SqlExpression AppendToWhere(string condition, System.Linq.Expressions.Expression predicate) => throw null; + protected virtual string BindOperant(System.Linq.Expressions.ExpressionType e) => throw null; + public string BodyExpression { get => throw null; } + protected bool CheckExpressionForTypes(System.Linq.Expressions.Expression e, System.Linq.Expressions.ExpressionType[] types) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression ClearLimits() => throw null; + public ServiceStack.OrmLite.SqlExpression Clone() => throw null; + public string ComputeHash(bool includeParams = default(bool)) => throw null; + protected string ConvertInExpressionToSql(System.Linq.Expressions.MethodCallExpression m, object quotedColName) => throw null; + public string ConvertToParam(object value) => throw null; + protected virtual void ConvertToPlaceholderAndParameter(ref object right) => throw null; + public virtual void CopyParamsTo(System.Data.IDbCommand dbCmd) => throw null; + protected virtual ServiceStack.OrmLite.SqlExpression CopyTo(ServiceStack.OrmLite.SqlExpression to) => throw null; + protected virtual string CreateInSubQuerySql(object quotedColName, string subSelect) => throw null; + public System.Data.IDbDataParameter CreateParam(string name, object value = default(object), System.Data.ParameterDirection direction = default(System.Data.ParameterDirection), System.Data.DbType? dbType = default(System.Data.DbType?), System.Data.DataRowVersion sourceVersion = default(System.Data.DataRowVersion)) => throw null; + public ServiceStack.OrmLite.SqlExpression CrossJoin(System.Linq.Expressions.Expression> joinExpr = default(System.Linq.Expressions.Expression>)) => throw null; + public ServiceStack.OrmLite.SqlExpression CrossJoin(System.Linq.Expressions.Expression> joinExpr = default(System.Linq.Expressions.Expression>)) => throw null; + public ServiceStack.OrmLite.SqlExpression CustomJoin(string joinString) => throw null; + protected bool CustomSelect { get => throw null; set => throw null; } + public ServiceStack.OrmLite.IOrmLiteDialectProvider DialectProvider { get => throw null; set => throw null; } + public string Dump(bool includeParams) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression Ensure(System.Linq.Expressions.Expression> predicate) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression Ensure(System.Linq.Expressions.Expression> predicate) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression Ensure(System.Linq.Expressions.Expression> predicate) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression Ensure(System.Linq.Expressions.Expression> predicate) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression Ensure(System.Linq.Expressions.Expression> predicate) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression Ensure(System.Linq.Expressions.Expression> predicate) => throw null; + public ServiceStack.OrmLite.SqlExpression Ensure(string sqlFilter, params object[] filterParams) => throw null; + public const string FalseLiteral = default; + public System.Tuple FirstMatchingField(string fieldName) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression From(string tables) => throw null; + public string FromExpression { get => throw null; set => throw null; } + public ServiceStack.OrmLite.SqlExpression FullJoin(System.Linq.Expressions.Expression> joinExpr = default(System.Linq.Expressions.Expression>)) => throw null; + public ServiceStack.OrmLite.SqlExpression FullJoin(System.Linq.Expressions.Expression> joinExpr = default(System.Linq.Expressions.Expression>)) => throw null; + public ServiceStack.OrmLite.SqlExpression FullJoin(System.Linq.Expressions.Expression> joinExpr) => throw null; + public ServiceStack.OrmLite.SqlExpression FullJoin(System.Linq.Expressions.Expression> joinExpr) => throw null; + public System.Collections.Generic.IList GetAllFields() => throw null; + protected string GetColumnName(string fieldName) => throw null; + protected object GetFalseExpression() => throw null; + protected virtual object GetMemberExpression(System.Linq.Expressions.MemberExpression m) => throw null; + public ServiceStack.OrmLite.ModelDefinition GetModelDefinition(ServiceStack.OrmLite.FieldDefinition fieldDef) => throw null; + protected virtual string GetQuotedColumnName(ServiceStack.OrmLite.ModelDefinition tableDef, string tableAlias, string memberName) => throw null; + protected virtual string GetQuotedColumnName(ServiceStack.OrmLite.ModelDefinition tableDef, string memberName) => throw null; + protected object GetQuotedFalseValue() => throw null; + protected object GetQuotedTrueValue() => throw null; + public virtual string GetSubstringSql(object quotedColumn, int startIndex, int? length = default(int?)) => throw null; + protected virtual string GetTableAlias(System.Linq.Expressions.MemberExpression m) => throw null; + protected object GetTrueExpression() => throw null; + public ServiceStack.OrmLite.IUntypedSqlExpression GetUntyped() => throw null; + public virtual object GetValue(object value, System.Type type) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression GroupBy
    (System.Linq.Expressions.Expression> keySelector) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression GroupBy(System.Linq.Expressions.Expression> keySelector) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression GroupBy(System.Linq.Expressions.Expression> keySelector) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression GroupBy(System.Linq.Expressions.Expression> keySelector) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression GroupBy(string groupBy) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression GroupBy(System.Linq.Expressions.Expression> keySelector) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression GroupBy() => throw null; + public string GroupByExpression { get => throw null; set => throw null; } + public virtual ServiceStack.OrmLite.SqlExpression Having(string sqlFilter, params object[] filterParams) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression Having(System.Linq.Expressions.Expression> predicate) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression Having() => throw null; + public string HavingExpression { get => throw null; set => throw null; } + public virtual ServiceStack.OrmLite.SqlExpression IncludeTablePrefix() => throw null; + public virtual ServiceStack.OrmLite.SqlExpression Insert(System.Linq.Expressions.Expression> fields) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression Insert(System.Collections.Generic.List insertFields) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression Insert() => throw null; + public System.Collections.Generic.List InsertFields { get => throw null; set => throw null; } + protected virtual ServiceStack.OrmLite.SqlExpression InternalJoin(string joinType, System.Linq.Expressions.Expression joinExpr, ServiceStack.OrmLite.ModelDefinition sourceDef, ServiceStack.OrmLite.ModelDefinition targetDef, ServiceStack.OrmLite.TableOptions options = default(ServiceStack.OrmLite.TableOptions)) => throw null; + protected ServiceStack.OrmLite.SqlExpression InternalJoin(string joinType, System.Linq.Expressions.Expression> joinExpr, ServiceStack.OrmLite.TableOptions options = default(ServiceStack.OrmLite.TableOptions)) => throw null; + protected ServiceStack.OrmLite.SqlExpression InternalJoin(string joinType, System.Linq.Expressions.Expression> joinExpr, ServiceStack.OrmLite.JoinFormatDelegate joinFormat) => throw null; + protected ServiceStack.OrmLite.SqlExpression InternalJoin(string joinType, System.Linq.Expressions.Expression joinExpr) => throw null; + protected virtual bool IsBooleanComparison(System.Linq.Expressions.Expression e) => throw null; + protected virtual bool IsColumnAccess(System.Linq.Expressions.MethodCallExpression m) => throw null; + protected virtual bool IsConstantExpression(System.Linq.Expressions.Expression e) => throw null; + protected virtual bool IsFieldName(object quotedExp) => throw null; + public bool IsJoinedTable(System.Type type) => throw null; + protected virtual bool IsParameterAccess(System.Linq.Expressions.Expression e) => throw null; + protected virtual bool IsParameterOrConvertAccess(System.Linq.Expressions.Expression e) => throw null; + public static bool IsSqlClass(object obj) => throw null; + protected virtual bool IsStaticArrayMethod(System.Linq.Expressions.MethodCallExpression m) => throw null; + protected virtual bool IsStaticStringMethod(System.Linq.Expressions.MethodCallExpression m) => throw null; + public ServiceStack.OrmLite.SqlExpression Join(System.Linq.Expressions.Expression> joinExpr, ServiceStack.OrmLite.TableOptions options) => throw null; + public ServiceStack.OrmLite.SqlExpression Join(System.Linq.Expressions.Expression> joinExpr, ServiceStack.OrmLite.JoinFormatDelegate joinFormat) => throw null; + public ServiceStack.OrmLite.SqlExpression Join(System.Linq.Expressions.Expression> joinExpr = default(System.Linq.Expressions.Expression>)) => throw null; + public ServiceStack.OrmLite.SqlExpression Join(System.Linq.Expressions.Expression> joinExpr, ServiceStack.OrmLite.TableOptions options) => throw null; + public ServiceStack.OrmLite.SqlExpression Join(System.Linq.Expressions.Expression> joinExpr, ServiceStack.OrmLite.JoinFormatDelegate joinFormat) => throw null; + public ServiceStack.OrmLite.SqlExpression Join(System.Linq.Expressions.Expression> joinExpr = default(System.Linq.Expressions.Expression>)) => throw null; + public ServiceStack.OrmLite.SqlExpression Join(System.Linq.Expressions.Expression> joinExpr) => throw null; + public ServiceStack.OrmLite.SqlExpression Join(System.Linq.Expressions.Expression> joinExpr) => throw null; + public ServiceStack.OrmLite.SqlExpression Join(System.Type sourceType, System.Type targetType, System.Linq.Expressions.Expression joinExpr = default(System.Linq.Expressions.Expression)) => throw null; + public ServiceStack.OrmLite.SqlExpression LeftJoin(System.Linq.Expressions.Expression> joinExpr, ServiceStack.OrmLite.TableOptions options) => throw null; + public ServiceStack.OrmLite.SqlExpression LeftJoin(System.Linq.Expressions.Expression> joinExpr, ServiceStack.OrmLite.JoinFormatDelegate joinFormat) => throw null; + public ServiceStack.OrmLite.SqlExpression LeftJoin(System.Linq.Expressions.Expression> joinExpr = default(System.Linq.Expressions.Expression>)) => throw null; + public ServiceStack.OrmLite.SqlExpression LeftJoin(System.Linq.Expressions.Expression> joinExpr, ServiceStack.OrmLite.TableOptions options) => throw null; + public ServiceStack.OrmLite.SqlExpression LeftJoin(System.Linq.Expressions.Expression> joinExpr, ServiceStack.OrmLite.JoinFormatDelegate joinFormat) => throw null; + public ServiceStack.OrmLite.SqlExpression LeftJoin(System.Linq.Expressions.Expression> joinExpr = default(System.Linq.Expressions.Expression>)) => throw null; + public ServiceStack.OrmLite.SqlExpression LeftJoin(System.Linq.Expressions.Expression> joinExpr) => throw null; + public ServiceStack.OrmLite.SqlExpression LeftJoin(System.Linq.Expressions.Expression> joinExpr) => throw null; + public ServiceStack.OrmLite.SqlExpression LeftJoin(System.Type sourceType, System.Type targetType, System.Linq.Expressions.Expression joinExpr = default(System.Linq.Expressions.Expression)) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression Limit(int? skip, int? rows) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression Limit(int skip, int rows) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression Limit(int rows) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression Limit() => throw null; + public ServiceStack.OrmLite.ModelDefinition ModelDef { get => throw null; set => throw null; } + public int? Offset { get => throw null; set => throw null; } + protected virtual void OnVisitMemberType(System.Type modelType) => throw null; + public System.Collections.Generic.HashSet OnlyFields { get => throw null; set => throw null; } + public virtual ServiceStack.OrmLite.SqlExpression Or(System.Linq.Expressions.Expression> predicate) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression Or(System.Linq.Expressions.Expression> predicate) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression Or(System.Linq.Expressions.Expression> predicate) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression Or(System.Linq.Expressions.Expression> predicate) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression Or(System.Linq.Expressions.Expression> predicate) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression Or(System.Linq.Expressions.Expression> predicate) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression Or(System.Linq.Expressions.Expression> predicate) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression Or(System.Linq.Expressions.Expression> predicate) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression Or(System.Linq.Expressions.Expression> predicate) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression Or(System.Linq.Expressions.Expression> predicate) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression Or(System.Linq.Expressions.Expression> predicate) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression Or(System.Linq.Expressions.Expression> predicate) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression Or(System.Linq.Expressions.Expression> predicate) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression Or(System.Linq.Expressions.Expression> predicate) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression Or(System.Linq.Expressions.Expression> predicate) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression Or(string sqlFilter, params object[] filterParams) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression Or(System.Linq.Expressions.Expression> predicate, params object[] filterParams) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression Or(System.Linq.Expressions.Expression> predicate) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression OrderBy
    (System.Linq.Expressions.Expression> fields) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression OrderBy(System.Linq.Expressions.Expression> fields) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression OrderBy(System.Linq.Expressions.Expression> fields) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression OrderBy(System.Linq.Expressions.Expression> fields) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression OrderBy(System.Linq.Expressions.Expression> fields) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression OrderBy(string orderBy) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression OrderBy(System.Linq.Expressions.Expression> keySelector) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression OrderBy(System.Int64 columnIndex) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression OrderBy() => throw null; + public virtual ServiceStack.OrmLite.SqlExpression OrderByDescending
    (System.Linq.Expressions.Expression> keySelector) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression OrderByDescending(System.Linq.Expressions.Expression> fields) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression OrderByDescending(System.Linq.Expressions.Expression> fields) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression OrderByDescending(System.Linq.Expressions.Expression> fields) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression OrderByDescending(System.Linq.Expressions.Expression> fields) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression OrderByDescending(string orderBy) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression OrderByDescending(System.Linq.Expressions.Expression> keySelector) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression OrderByDescending(System.Int64 columnIndex) => throw null; + public string OrderByExpression { get => throw null; set => throw null; } + public virtual ServiceStack.OrmLite.SqlExpression OrderByFields(params string[] fieldNames) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression OrderByFields(params ServiceStack.OrmLite.FieldDefinition[] fields) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression OrderByFieldsDescending(params string[] fieldNames) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression OrderByFieldsDescending(params ServiceStack.OrmLite.FieldDefinition[] fields) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression OrderByRandom() => throw null; + public System.Collections.Generic.List Params { get => throw null; set => throw null; } + public bool PrefixFieldWithTableName { get => throw null; set => throw null; } + public virtual void PrepareUpdateStatement(System.Data.IDbCommand dbCmd, T item, bool excludeDefaults = default(bool)) => throw null; + public virtual void PrepareUpdateStatement(System.Data.IDbCommand dbCmd, System.Collections.Generic.Dictionary updateFields) => throw null; + protected string RemoveQuoteFromAlias(string exp) => throw null; + public ServiceStack.OrmLite.SqlExpression RightJoin(System.Linq.Expressions.Expression> joinExpr, ServiceStack.OrmLite.TableOptions options) => throw null; + public ServiceStack.OrmLite.SqlExpression RightJoin(System.Linq.Expressions.Expression> joinExpr, ServiceStack.OrmLite.JoinFormatDelegate joinFormat) => throw null; + public ServiceStack.OrmLite.SqlExpression RightJoin(System.Linq.Expressions.Expression> joinExpr = default(System.Linq.Expressions.Expression>)) => throw null; + public ServiceStack.OrmLite.SqlExpression RightJoin(System.Linq.Expressions.Expression> joinExpr, ServiceStack.OrmLite.TableOptions options) => throw null; + public ServiceStack.OrmLite.SqlExpression RightJoin(System.Linq.Expressions.Expression> joinExpr, ServiceStack.OrmLite.JoinFormatDelegate joinFormat) => throw null; + public ServiceStack.OrmLite.SqlExpression RightJoin(System.Linq.Expressions.Expression> joinExpr = default(System.Linq.Expressions.Expression>)) => throw null; + public ServiceStack.OrmLite.SqlExpression RightJoin(System.Linq.Expressions.Expression> joinExpr) => throw null; + public ServiceStack.OrmLite.SqlExpression RightJoin(System.Linq.Expressions.Expression> joinExpr) => throw null; + public int? Rows { get => throw null; set => throw null; } + public virtual ServiceStack.OrmLite.SqlExpression Select(System.Linq.Expressions.Expression> fields) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression Select(System.Linq.Expressions.Expression> fields) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression Select(System.Linq.Expressions.Expression> fields) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression Select(System.Linq.Expressions.Expression> fields) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression Select(System.Linq.Expressions.Expression> fields) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression Select(System.Linq.Expressions.Expression> fields) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression Select(System.Linq.Expressions.Expression> fields) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression Select(System.Linq.Expressions.Expression> fields) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression Select(System.Linq.Expressions.Expression> fields) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression Select(System.Linq.Expressions.Expression> fields) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression Select(System.Linq.Expressions.Expression> fields) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression Select(System.Linq.Expressions.Expression> fields) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression Select(string[] fields) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression Select(string selectExpression) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression Select(System.Linq.Expressions.Expression> fields) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression Select() => throw null; + public virtual ServiceStack.OrmLite.SqlExpression SelectDistinct(System.Linq.Expressions.Expression> fields) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression SelectDistinct(System.Linq.Expressions.Expression> fields) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression SelectDistinct(System.Linq.Expressions.Expression> fields) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression SelectDistinct(System.Linq.Expressions.Expression> fields) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression SelectDistinct(System.Linq.Expressions.Expression> fields) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression SelectDistinct(System.Linq.Expressions.Expression> fields) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression SelectDistinct(System.Linq.Expressions.Expression> fields) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression SelectDistinct(System.Linq.Expressions.Expression> fields) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression SelectDistinct(System.Linq.Expressions.Expression> fields) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression SelectDistinct(System.Linq.Expressions.Expression> fields) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression SelectDistinct(System.Linq.Expressions.Expression> fields) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression SelectDistinct(System.Linq.Expressions.Expression> fields) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression SelectDistinct(string[] fields) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression SelectDistinct(string selectExpression) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression SelectDistinct(System.Linq.Expressions.Expression> fields) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression SelectDistinct() => throw null; + public string SelectExpression { get => throw null; set => throw null; } + public static System.Action> SelectFilter { get => throw null; set => throw null; } + public string SelectInto() => throw null; + protected string Sep { get => throw null; } + public virtual ServiceStack.OrmLite.SqlExpression SetTableAlias(string tableAlias) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression Skip(int? skip = default(int?)) => throw null; + public string SqlColumn(string columnName) => throw null; + protected SqlExpression(ServiceStack.OrmLite.IOrmLiteDialectProvider dialectProvider) => throw null; + public System.Func SqlFilter { get => throw null; set => throw null; } + public string SqlTable(ServiceStack.OrmLite.ModelDefinition modelDef) => throw null; + public string TableAlias { get => throw null; set => throw null; } + public virtual ServiceStack.OrmLite.SqlExpression Take(int? take = default(int?)) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression ThenBy
    (System.Linq.Expressions.Expression> fields) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression ThenBy(System.Linq.Expressions.Expression> fields) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression ThenBy(System.Linq.Expressions.Expression> fields) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression ThenBy(System.Linq.Expressions.Expression> fields) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression ThenBy(System.Linq.Expressions.Expression> fields) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression ThenBy(string orderBy) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression ThenBy(System.Linq.Expressions.Expression> keySelector) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression ThenByDescending
    (System.Linq.Expressions.Expression> fields) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression ThenByDescending(System.Linq.Expressions.Expression> fields) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression ThenByDescending(System.Linq.Expressions.Expression> fields) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression ThenByDescending(System.Linq.Expressions.Expression> fields) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression ThenByDescending(System.Linq.Expressions.Expression> fields) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression ThenByDescending(string orderBy) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression ThenByDescending(System.Linq.Expressions.Expression> keySelector) => throw null; + protected virtual string ToCast(string quotedColName) => throw null; + protected virtual ServiceStack.OrmLite.PartialSqlString ToComparePartialString(System.Collections.Generic.List args) => throw null; + protected ServiceStack.OrmLite.PartialSqlString ToConcatPartialString(System.Collections.Generic.List args) => throw null; + public virtual string ToCountStatement() => throw null; + public virtual string ToDeleteRowStatement() => throw null; + protected virtual ServiceStack.OrmLite.PartialSqlString ToLengthPartialString(object arg) => throw null; + public virtual string ToMergedParamsSelectStatement() => throw null; + public virtual string ToSelectStatement() => throw null; + public const string TrueLiteral = default; + public virtual ServiceStack.OrmLite.SqlExpression UnsafeAnd(string rawSql, params object[] filterParams) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression UnsafeFrom(string rawFrom) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression UnsafeGroupBy(string groupBy) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression UnsafeHaving(string sqlFilter, params object[] filterParams) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression UnsafeOr(string rawSql, params object[] filterParams) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression UnsafeOrderBy(string orderBy) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression UnsafeSelect(string rawSelect, bool distinct) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression UnsafeSelect(string rawSelect) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression UnsafeWhere(string rawSql, params object[] filterParams) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression Update(System.Linq.Expressions.Expression> fields) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression Update(System.Collections.Generic.List updateFields) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression Update(System.Collections.Generic.IEnumerable updateFields) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression Update() => throw null; + public System.Collections.Generic.List UpdateFields { get => throw null; set => throw null; } + protected internal bool UseFieldName { get => throw null; set => throw null; } + public bool UseSelectPropertiesAsAliases { get => throw null; set => throw null; } + public virtual object Visit(System.Linq.Expressions.Expression exp) => throw null; + protected virtual object VisitBinary(System.Linq.Expressions.BinaryExpression b) => throw null; + protected virtual object VisitColumnAccessMethod(System.Linq.Expressions.MethodCallExpression m) => throw null; + protected virtual object VisitConditional(System.Linq.Expressions.ConditionalExpression e) => throw null; + protected virtual object VisitConstant(System.Linq.Expressions.ConstantExpression c) => throw null; + protected virtual object VisitEnumerableMethodCall(System.Linq.Expressions.MethodCallExpression m) => throw null; + protected virtual System.Collections.Generic.List VisitExpressionList(System.Collections.ObjectModel.ReadOnlyCollection original) => throw null; + protected virtual void VisitFilter(string operand, object originalLeft, object originalRight, ref object left, ref object right) => throw null; + protected virtual System.Collections.Generic.List VisitInSqlExpressionList(System.Collections.ObjectModel.ReadOnlyCollection original) => throw null; + protected virtual object VisitIndexExpression(System.Linq.Expressions.IndexExpression e) => throw null; + protected internal virtual object VisitJoin(System.Linq.Expressions.Expression exp) => throw null; + protected virtual object VisitLambda(System.Linq.Expressions.LambdaExpression lambda) => throw null; + protected virtual object VisitMemberAccess(System.Linq.Expressions.MemberExpression m) => throw null; + protected virtual object VisitMemberInit(System.Linq.Expressions.MemberInitExpression exp) => throw null; + protected virtual object VisitMethodCall(System.Linq.Expressions.MethodCallExpression m) => throw null; + protected virtual object VisitNew(System.Linq.Expressions.NewExpression nex) => throw null; + protected virtual object VisitNewArray(System.Linq.Expressions.NewArrayExpression na) => throw null; + protected virtual System.Collections.Generic.List VisitNewArrayFromExpressionList(System.Linq.Expressions.NewArrayExpression na) => throw null; + protected virtual object VisitParameter(System.Linq.Expressions.ParameterExpression p) => throw null; + protected virtual object VisitSqlMethodCall(System.Linq.Expressions.MethodCallExpression m) => throw null; + protected virtual object VisitStaticArrayMethodCall(System.Linq.Expressions.MethodCallExpression m) => throw null; + protected virtual object VisitStaticStringMethodCall(System.Linq.Expressions.MethodCallExpression m) => throw null; + protected virtual object VisitUnary(System.Linq.Expressions.UnaryExpression u) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression Where(System.Linq.Expressions.Expression> predicate) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression Where(System.Linq.Expressions.Expression> predicate) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression Where(System.Linq.Expressions.Expression> predicate) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression Where(System.Linq.Expressions.Expression> predicate) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression Where(System.Linq.Expressions.Expression> predicate) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression Where(System.Linq.Expressions.Expression> predicate) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression Where(System.Linq.Expressions.Expression> predicate) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression Where(System.Linq.Expressions.Expression> predicate) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression Where(System.Linq.Expressions.Expression> predicate) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression Where(System.Linq.Expressions.Expression> predicate) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression Where(System.Linq.Expressions.Expression> predicate) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression Where(System.Linq.Expressions.Expression> predicate) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression Where(System.Linq.Expressions.Expression> predicate) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression Where(System.Linq.Expressions.Expression> predicate) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression Where(System.Linq.Expressions.Expression> predicate) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression Where(string sqlFilter, params object[] filterParams) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression Where(System.Linq.Expressions.Expression> predicate, params object[] filterParams) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression Where(System.Linq.Expressions.Expression> predicate) => throw null; + public virtual ServiceStack.OrmLite.SqlExpression Where() => throw null; + public string WhereExpression { get => throw null; set => throw null; } + public bool WhereStatementWithoutWhereString { get => throw null; set => throw null; } + public virtual ServiceStack.OrmLite.SqlExpression WithSqlFilter(System.Func sqlFilter) => throw null; + protected ServiceStack.OrmLite.ModelDefinition modelDef; + protected bool selectDistinct; + protected bool skipParameterizationForThisExpression; + protected System.Collections.Generic.List tableDefs; + protected bool useFieldName; + protected bool visitedExpressionIsTableColumn; + } + + // Generated from `ServiceStack.OrmLite.SqlExpressionExtensions` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class SqlExpressionExtensions + { + public static string Column
    (this ServiceStack.OrmLite.ISqlExpression sqlExpression, string propertyName, bool prefixTable = default(bool)) => throw null; + public static string Column
    (this ServiceStack.OrmLite.ISqlExpression sqlExpression, System.Linq.Expressions.Expression> propertyExpression, bool prefixTable = default(bool)) => throw null; + public static string Column
    (this ServiceStack.OrmLite.IOrmLiteDialectProvider dialect, string propertyName, bool prefixTable = default(bool)) => throw null; + public static string Column
    (this ServiceStack.OrmLite.IOrmLiteDialectProvider dialect, System.Linq.Expressions.Expression> propertyExpression, bool prefixTable = default(bool)) => throw null; + public static ServiceStack.OrmLite.IUntypedSqlExpression GetUntypedSqlExpression(this ServiceStack.OrmLite.ISqlExpression sqlExpression) => throw null; + public static string Table(this ServiceStack.OrmLite.ISqlExpression sqlExpression) => throw null; + public static string Table(this ServiceStack.OrmLite.IOrmLiteDialectProvider dialect) => throw null; + public static ServiceStack.OrmLite.IOrmLiteDialectProvider ToDialectProvider(this ServiceStack.OrmLite.ISqlExpression sqlExpression) => throw null; + } + + // Generated from `ServiceStack.OrmLite.SqlExpressionVisitor` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public abstract class SqlExpressionVisitor + { + protected SqlExpressionVisitor() => throw null; + protected virtual System.Linq.Expressions.Expression Visit(System.Linq.Expressions.Expression exp) => throw null; + protected virtual System.Linq.Expressions.Expression VisitBinary(System.Linq.Expressions.BinaryExpression b) => throw null; + protected virtual System.Linq.Expressions.MemberBinding VisitBinding(System.Linq.Expressions.MemberBinding binding) => throw null; + protected virtual System.Collections.Generic.IEnumerable VisitBindingList(System.Collections.ObjectModel.ReadOnlyCollection original) => throw null; + protected virtual System.Linq.Expressions.Expression VisitConditional(System.Linq.Expressions.ConditionalExpression c) => throw null; + protected virtual System.Linq.Expressions.Expression VisitConstant(System.Linq.Expressions.ConstantExpression c) => throw null; + protected virtual System.Linq.Expressions.ElementInit VisitElementInitializer(System.Linq.Expressions.ElementInit initializer) => throw null; + protected virtual System.Collections.Generic.IEnumerable VisitElementInitializerList(System.Collections.ObjectModel.ReadOnlyCollection original) => throw null; + protected virtual System.Collections.ObjectModel.ReadOnlyCollection VisitExpressionList(System.Collections.ObjectModel.ReadOnlyCollection original) => throw null; + protected virtual System.Linq.Expressions.Expression VisitInvocation(System.Linq.Expressions.InvocationExpression iv) => throw null; + protected virtual System.Linq.Expressions.Expression VisitLambda(System.Linq.Expressions.LambdaExpression lambda) => throw null; + protected virtual System.Linq.Expressions.Expression VisitListInit(System.Linq.Expressions.ListInitExpression init) => throw null; + protected virtual System.Linq.Expressions.Expression VisitMemberAccess(System.Linq.Expressions.MemberExpression m) => throw null; + protected virtual System.Linq.Expressions.MemberAssignment VisitMemberAssignment(System.Linq.Expressions.MemberAssignment assignment) => throw null; + protected virtual System.Linq.Expressions.Expression VisitMemberInit(System.Linq.Expressions.MemberInitExpression init) => throw null; + protected virtual System.Linq.Expressions.MemberListBinding VisitMemberListBinding(System.Linq.Expressions.MemberListBinding binding) => throw null; + protected virtual System.Linq.Expressions.MemberMemberBinding VisitMemberMemberBinding(System.Linq.Expressions.MemberMemberBinding binding) => throw null; + protected virtual System.Linq.Expressions.Expression VisitMethodCall(System.Linq.Expressions.MethodCallExpression m) => throw null; + protected virtual System.Linq.Expressions.NewExpression VisitNew(System.Linq.Expressions.NewExpression nex) => throw null; + protected virtual System.Linq.Expressions.Expression VisitNewArray(System.Linq.Expressions.NewArrayExpression na) => throw null; + protected virtual System.Linq.Expressions.Expression VisitParameter(System.Linq.Expressions.ParameterExpression p) => throw null; + protected virtual System.Linq.Expressions.Expression VisitTypeIs(System.Linq.Expressions.TypeBinaryExpression b) => throw null; + protected virtual System.Linq.Expressions.Expression VisitUnary(System.Linq.Expressions.UnaryExpression u) => throw null; + } + + // Generated from `ServiceStack.OrmLite.SqlInValues` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class SqlInValues + { + public int Count { get => throw null; } + public const string EmptyIn = default; + public System.Collections.IEnumerable GetValues() => throw null; + public SqlInValues(System.Collections.IEnumerable values, ServiceStack.OrmLite.IOrmLiteDialectProvider dialectProvider = default(ServiceStack.OrmLite.IOrmLiteDialectProvider)) => throw null; + public string ToSqlInString() => throw null; + } + + // Generated from `ServiceStack.OrmLite.TableOptions` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class TableOptions + { + public string Alias { get => throw null; set => throw null; } + public string Expression { get => throw null; set => throw null; } + public TableOptions() => throw null; + } + + // Generated from `ServiceStack.OrmLite.TemplateDbFilters` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class TemplateDbFilters : ServiceStack.OrmLite.DbScripts + { + public TemplateDbFilters() => throw null; + } + + // Generated from `ServiceStack.OrmLite.TemplateDbFiltersAsync` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class TemplateDbFiltersAsync : ServiceStack.OrmLite.DbScriptsAsync + { + public TemplateDbFiltersAsync() => throw null; + } + + // Generated from `ServiceStack.OrmLite.UntypedApi<>` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class UntypedApi : ServiceStack.OrmLite.IUntypedApi + { + public System.Collections.IEnumerable Cast(System.Collections.IEnumerable results) => throw null; + public System.Data.IDbConnection Db { get => throw null; set => throw null; } + public System.Data.IDbCommand DbCmd { get => throw null; set => throw null; } + public int Delete(object obj, object anonType) => throw null; + public int DeleteAll() => throw null; + public int DeleteById(object id) => throw null; + public int DeleteByIds(System.Collections.IEnumerable idValues) => throw null; + public int DeleteNonDefaults(object obj, object filter) => throw null; + public void Exec(System.Action filter) => throw null; + public TReturn Exec(System.Func filter) => throw null; + public System.Int64 Insert(object obj, bool selectIdentity = default(bool)) => throw null; + public System.Int64 Insert(object obj, System.Action commandFilter, bool selectIdentity = default(bool)) => throw null; + public void InsertAll(System.Collections.IEnumerable objs, System.Action commandFilter) => throw null; + public void InsertAll(System.Collections.IEnumerable objs) => throw null; + public bool Save(object obj) => throw null; + public int SaveAll(System.Collections.IEnumerable objs) => throw null; + public System.Threading.Tasks.Task SaveAllAsync(System.Collections.IEnumerable objs, System.Threading.CancellationToken token) => throw null; + public System.Threading.Tasks.Task SaveAsync(object obj, System.Threading.CancellationToken token) => throw null; + public UntypedApi() => throw null; + public int Update(object obj, System.Action commandFilter) => throw null; + public int Update(object obj) => throw null; + public int UpdateAll(System.Collections.IEnumerable objs, System.Action commandFilter) => throw null; + public int UpdateAll(System.Collections.IEnumerable objs) => throw null; + } + + // Generated from `ServiceStack.OrmLite.UntypedApiExtensions` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class UntypedApiExtensions + { + public static ServiceStack.OrmLite.IUntypedApi CreateTypedApi(this System.Type forType) => throw null; + public static ServiceStack.OrmLite.IUntypedApi CreateTypedApi(this System.Data.IDbConnection db, System.Type forType) => throw null; + public static ServiceStack.OrmLite.IUntypedApi CreateTypedApi(this System.Data.IDbCommand dbCmd, System.Type forType) => throw null; + } + + // Generated from `ServiceStack.OrmLite.UntypedSqlExpressionProxy<>` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class UntypedSqlExpressionProxy : ServiceStack.OrmLite.IUntypedSqlExpression, ServiceStack.OrmLite.ISqlExpression + { + public ServiceStack.OrmLite.IUntypedSqlExpression AddCondition(string condition, string sqlFilter, params object[] filterParams) => throw null; + public ServiceStack.OrmLite.IUntypedSqlExpression And(System.Linq.Expressions.Expression> predicate) => throw null; + public ServiceStack.OrmLite.IUntypedSqlExpression And(System.Linq.Expressions.Expression> predicate) => throw null; + public ServiceStack.OrmLite.IUntypedSqlExpression And(string sqlFilter, params object[] filterParams) => throw null; + public string BodyExpression { get => throw null; } + public ServiceStack.OrmLite.IUntypedSqlExpression ClearLimits() => throw null; + public ServiceStack.OrmLite.IUntypedSqlExpression Clone() => throw null; + public System.Data.IDbDataParameter CreateParam(string name, object value = default(object), System.Data.ParameterDirection direction = default(System.Data.ParameterDirection), System.Data.DbType? dbType = default(System.Data.DbType?)) => throw null; + public ServiceStack.OrmLite.IUntypedSqlExpression CrossJoin(System.Linq.Expressions.Expression> joinExpr = default(System.Linq.Expressions.Expression>)) => throw null; + public ServiceStack.OrmLite.IUntypedSqlExpression CustomJoin(string joinString) => throw null; + public ServiceStack.OrmLite.IOrmLiteDialectProvider DialectProvider { get => throw null; set => throw null; } + public ServiceStack.OrmLite.IUntypedSqlExpression Ensure(System.Linq.Expressions.Expression> predicate) => throw null; + public ServiceStack.OrmLite.IUntypedSqlExpression Ensure(System.Linq.Expressions.Expression> predicate) => throw null; + public ServiceStack.OrmLite.IUntypedSqlExpression Ensure(string sqlFilter, params object[] filterParams) => throw null; + public System.Tuple FirstMatchingField(string fieldName) => throw null; + public ServiceStack.OrmLite.IUntypedSqlExpression From(string tables) => throw null; + public string FromExpression { get => throw null; set => throw null; } + public ServiceStack.OrmLite.IUntypedSqlExpression FullJoin(System.Linq.Expressions.Expression> joinExpr = default(System.Linq.Expressions.Expression>)) => throw null; + public System.Collections.Generic.IList GetAllFields() => throw null; + public ServiceStack.OrmLite.ModelDefinition GetModelDefinition(ServiceStack.OrmLite.FieldDefinition fieldDef) => throw null; + public ServiceStack.OrmLite.IUntypedSqlExpression GroupBy(string groupBy) => throw null; + public ServiceStack.OrmLite.IUntypedSqlExpression GroupBy() => throw null; + public string GroupByExpression { get => throw null; set => throw null; } + public ServiceStack.OrmLite.IUntypedSqlExpression Having(string sqlFilter, params object[] filterParams) => throw null; + public ServiceStack.OrmLite.IUntypedSqlExpression Having() => throw null; + public string HavingExpression { get => throw null; set => throw null; } + public ServiceStack.OrmLite.IUntypedSqlExpression Insert(System.Collections.Generic.List insertFields) => throw null; + public ServiceStack.OrmLite.IUntypedSqlExpression Insert() => throw null; + public System.Collections.Generic.List InsertFields { get => throw null; set => throw null; } + public ServiceStack.OrmLite.IUntypedSqlExpression Join(System.Linq.Expressions.Expression> joinExpr = default(System.Linq.Expressions.Expression>)) => throw null; + public ServiceStack.OrmLite.IUntypedSqlExpression Join(System.Type sourceType, System.Type targetType, System.Linq.Expressions.Expression joinExpr = default(System.Linq.Expressions.Expression)) => throw null; + public ServiceStack.OrmLite.IUntypedSqlExpression LeftJoin(System.Linq.Expressions.Expression> joinExpr = default(System.Linq.Expressions.Expression>)) => throw null; + public ServiceStack.OrmLite.IUntypedSqlExpression LeftJoin(System.Type sourceType, System.Type targetType, System.Linq.Expressions.Expression joinExpr = default(System.Linq.Expressions.Expression)) => throw null; + public ServiceStack.OrmLite.IUntypedSqlExpression Limit(int? skip, int? rows) => throw null; + public ServiceStack.OrmLite.IUntypedSqlExpression Limit(int skip, int rows) => throw null; + public ServiceStack.OrmLite.IUntypedSqlExpression Limit(int rows) => throw null; + public ServiceStack.OrmLite.IUntypedSqlExpression Limit() => throw null; + public ServiceStack.OrmLite.ModelDefinition ModelDef { get => throw null; } + public int? Offset { get => throw null; set => throw null; } + public ServiceStack.OrmLite.IUntypedSqlExpression Or(System.Linq.Expressions.Expression> predicate) => throw null; + public ServiceStack.OrmLite.IUntypedSqlExpression Or(System.Linq.Expressions.Expression> predicate) => throw null; + public ServiceStack.OrmLite.IUntypedSqlExpression Or(string sqlFilter, params object[] filterParams) => throw null; + public ServiceStack.OrmLite.IUntypedSqlExpression OrderBy
    (System.Linq.Expressions.Expression> keySelector) => throw null; + public ServiceStack.OrmLite.IUntypedSqlExpression OrderBy(string orderBy) => throw null; + public ServiceStack.OrmLite.IUntypedSqlExpression OrderBy() => throw null; + public ServiceStack.OrmLite.IUntypedSqlExpression OrderByDescending
    (System.Linq.Expressions.Expression> keySelector) => throw null; + public ServiceStack.OrmLite.IUntypedSqlExpression OrderByDescending(string orderBy) => throw null; + public string OrderByExpression { get => throw null; set => throw null; } + public ServiceStack.OrmLite.IUntypedSqlExpression OrderByFields(params string[] fieldNames) => throw null; + public ServiceStack.OrmLite.IUntypedSqlExpression OrderByFields(params ServiceStack.OrmLite.FieldDefinition[] fields) => throw null; + public ServiceStack.OrmLite.IUntypedSqlExpression OrderByFieldsDescending(params string[] fieldNames) => throw null; + public ServiceStack.OrmLite.IUntypedSqlExpression OrderByFieldsDescending(params ServiceStack.OrmLite.FieldDefinition[] fields) => throw null; + public System.Collections.Generic.List Params { get => throw null; set => throw null; } + public bool PrefixFieldWithTableName { get => throw null; set => throw null; } + public ServiceStack.OrmLite.IUntypedSqlExpression RightJoin(System.Linq.Expressions.Expression> joinExpr = default(System.Linq.Expressions.Expression>)) => throw null; + public int? Rows { get => throw null; set => throw null; } + public ServiceStack.OrmLite.IUntypedSqlExpression Select(System.Linq.Expressions.Expression> fields) => throw null; + public ServiceStack.OrmLite.IUntypedSqlExpression Select(System.Linq.Expressions.Expression> fields) => throw null; + public ServiceStack.OrmLite.IUntypedSqlExpression Select(string selectExpression) => throw null; + public ServiceStack.OrmLite.IUntypedSqlExpression Select() => throw null; + public ServiceStack.OrmLite.IUntypedSqlExpression SelectDistinct(System.Linq.Expressions.Expression> fields) => throw null; + public ServiceStack.OrmLite.IUntypedSqlExpression SelectDistinct(System.Linq.Expressions.Expression> fields) => throw null; + public ServiceStack.OrmLite.IUntypedSqlExpression SelectDistinct() => throw null; + public string SelectExpression { get => throw null; set => throw null; } + public string SelectInto() => throw null; + public ServiceStack.OrmLite.IUntypedSqlExpression Skip(int? skip = default(int?)) => throw null; + public string SqlColumn(string columnName) => throw null; + public string SqlTable(ServiceStack.OrmLite.ModelDefinition modelDef) => throw null; + public string TableAlias { get => throw null; set => throw null; } + public ServiceStack.OrmLite.IUntypedSqlExpression Take(int? take = default(int?)) => throw null; + public ServiceStack.OrmLite.IUntypedSqlExpression ThenBy
    (System.Linq.Expressions.Expression> keySelector) => throw null; + public ServiceStack.OrmLite.IUntypedSqlExpression ThenBy(string orderBy) => throw null; + public ServiceStack.OrmLite.IUntypedSqlExpression ThenByDescending
    (System.Linq.Expressions.Expression> keySelector) => throw null; + public ServiceStack.OrmLite.IUntypedSqlExpression ThenByDescending(string orderBy) => throw null; + public string ToCountStatement() => throw null; + public string ToDeleteRowStatement() => throw null; + public string ToSelectStatement() => throw null; + public ServiceStack.OrmLite.IUntypedSqlExpression UnsafeAnd(string rawSql, params object[] filterParams) => throw null; + public ServiceStack.OrmLite.IUntypedSqlExpression UnsafeFrom(string rawFrom) => throw null; + public ServiceStack.OrmLite.IUntypedSqlExpression UnsafeOr(string rawSql, params object[] filterParams) => throw null; + public ServiceStack.OrmLite.IUntypedSqlExpression UnsafeSelect(string rawSelect) => throw null; + public ServiceStack.OrmLite.IUntypedSqlExpression UnsafeWhere(string rawSql, params object[] filterParams) => throw null; + public UntypedSqlExpressionProxy(ServiceStack.OrmLite.SqlExpression q) => throw null; + public ServiceStack.OrmLite.IUntypedSqlExpression Update(System.Collections.Generic.List updateFields) => throw null; + public ServiceStack.OrmLite.IUntypedSqlExpression Update() => throw null; + public System.Collections.Generic.List UpdateFields { get => throw null; set => throw null; } + public ServiceStack.OrmLite.IUntypedSqlExpression Where(System.Linq.Expressions.Expression> predicate) => throw null; + public ServiceStack.OrmLite.IUntypedSqlExpression Where(System.Linq.Expressions.Expression> predicate) => throw null; + public ServiceStack.OrmLite.IUntypedSqlExpression Where(string sqlFilter, params object[] filterParams) => throw null; + public ServiceStack.OrmLite.IUntypedSqlExpression Where() => throw null; + public string WhereExpression { get => throw null; set => throw null; } + public bool WhereStatementWithoutWhereString { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.OrmLite.UpperCaseNamingStrategy` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class UpperCaseNamingStrategy : ServiceStack.OrmLite.OrmLiteNamingStrategyBase + { + public override string GetColumnName(string name) => throw null; + public override string GetTableName(string name) => throw null; + public UpperCaseNamingStrategy() => throw null; + } + + // Generated from `ServiceStack.OrmLite.XmlValue` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public struct XmlValue + { + public override bool Equals(object obj) => throw null; + public bool Equals(ServiceStack.OrmLite.XmlValue other) => throw null; + public override int GetHashCode() => throw null; + public override string ToString() => throw null; + public string Xml { get => throw null; } + public XmlValue(string xml) => throw null; + // Stub generator skipped constructor + public static implicit operator ServiceStack.OrmLite.XmlValue(string expandedName) => throw null; + } + + namespace Converters + { + // Generated from `ServiceStack.OrmLite.Converters.BoolAsIntConverter` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class BoolAsIntConverter : ServiceStack.OrmLite.Converters.BoolConverter + { + public BoolAsIntConverter() => throw null; + public override object ToDbValue(System.Type fieldType, object value) => throw null; + public override string ToQuotedString(System.Type fieldType, object value) => throw null; + } + + // Generated from `ServiceStack.OrmLite.Converters.BoolConverter` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class BoolConverter : ServiceStack.OrmLite.NativeValueOrmLiteConverter + { + public BoolConverter() => throw null; + public override string ColumnDefinition { get => throw null; } + public override System.Data.DbType DbType { get => throw null; } + public override object FromDbValue(System.Type fieldType, object value) => throw null; + } + + // Generated from `ServiceStack.OrmLite.Converters.ByteArrayConverter` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ByteArrayConverter : ServiceStack.OrmLite.OrmLiteConverter + { + public ByteArrayConverter() => throw null; + public override string ColumnDefinition { get => throw null; } + public override System.Data.DbType DbType { get => throw null; } + } + + // Generated from `ServiceStack.OrmLite.Converters.ByteConverter` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ByteConverter : ServiceStack.OrmLite.Converters.IntegerConverter + { + public ByteConverter() => throw null; + public override System.Data.DbType DbType { get => throw null; } + } + + // Generated from `ServiceStack.OrmLite.Converters.CharArrayConverter` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class CharArrayConverter : ServiceStack.OrmLite.Converters.StringConverter + { + public CharArrayConverter(int stringLength) => throw null; + public CharArrayConverter() => throw null; + public override object FromDbValue(System.Type fieldType, object value) => throw null; + public override object ToDbValue(System.Type fieldType, object value) => throw null; + } + + // Generated from `ServiceStack.OrmLite.Converters.CharConverter` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class CharConverter : ServiceStack.OrmLite.Converters.StringConverter + { + public CharConverter() => throw null; + public override string ColumnDefinition { get => throw null; } + public override System.Data.DbType DbType { get => throw null; } + public override object FromDbValue(System.Type fieldType, object value) => throw null; + public override string GetColumnDefinition(int? stringLength) => throw null; + public override object ToDbValue(System.Type fieldType, object value) => throw null; + } + + // Generated from `ServiceStack.OrmLite.Converters.DateTimeConverter` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class DateTimeConverter : ServiceStack.OrmLite.OrmLiteConverter + { + public override string ColumnDefinition { get => throw null; } + public System.DateTimeKind DateStyle { get => throw null; set => throw null; } + public DateTimeConverter() => throw null; + public virtual string DateTimeFmt(System.DateTime dateTime, string dateTimeFormat) => throw null; + public override System.Data.DbType DbType { get => throw null; } + public virtual object FromDbValue(object value) => throw null; + public override object FromDbValue(System.Type fieldType, object value) => throw null; + public override object ToDbValue(System.Type fieldType, object value) => throw null; + public override string ToQuotedString(System.Type fieldType, object value) => throw null; + } + + // Generated from `ServiceStack.OrmLite.Converters.DateTimeOffsetConverter` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class DateTimeOffsetConverter : ServiceStack.OrmLite.OrmLiteConverter + { + public override string ColumnDefinition { get => throw null; } + public DateTimeOffsetConverter() => throw null; + public override System.Data.DbType DbType { get => throw null; } + public override object FromDbValue(System.Type fieldType, object value) => throw null; + } + + // Generated from `ServiceStack.OrmLite.Converters.DecimalConverter` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class DecimalConverter : ServiceStack.OrmLite.Converters.FloatConverter, ServiceStack.OrmLite.IHasColumnDefinitionPrecision + { + public override string ColumnDefinition { get => throw null; } + public override System.Data.DbType DbType { get => throw null; } + public DecimalConverter(int precision, int scale) => throw null; + public DecimalConverter() => throw null; + public virtual string GetColumnDefinition(int? precision, int? scale) => throw null; + public int Precision { get => throw null; set => throw null; } + public int Scale { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.OrmLite.Converters.DoubleConverter` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class DoubleConverter : ServiceStack.OrmLite.Converters.FloatConverter + { + public override System.Data.DbType DbType { get => throw null; } + public DoubleConverter() => throw null; + } + + // Generated from `ServiceStack.OrmLite.Converters.EnumConverter` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class EnumConverter : ServiceStack.OrmLite.Converters.StringConverter + { + public EnumConverter() => throw null; + public override object FromDbValue(System.Type fieldType, object value) => throw null; + public static ServiceStack.OrmLite.Converters.EnumKind GetEnumKind(System.Type enumType) => throw null; + public static bool HasEnumMembers(System.Type enumType) => throw null; + public override void InitDbParam(System.Data.IDbDataParameter p, System.Type fieldType) => throw null; + public static bool IsIntEnum(System.Type fieldType) => throw null; + public static System.Char ToCharValue(object value) => throw null; + public override object ToDbValue(System.Type fieldType, object value) => throw null; + public override string ToQuotedString(System.Type fieldType, object value) => throw null; + } + + // Generated from `ServiceStack.OrmLite.Converters.EnumKind` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public enum EnumKind + { + Char, + EnumMember, + Int, + String, + } + + // Generated from `ServiceStack.OrmLite.Converters.FloatConverter` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class FloatConverter : ServiceStack.OrmLite.NativeValueOrmLiteConverter + { + public override string ColumnDefinition { get => throw null; } + public override System.Data.DbType DbType { get => throw null; } + public FloatConverter() => throw null; + public override object FromDbValue(System.Type fieldType, object value) => throw null; + public override object ToDbValue(System.Type fieldType, object value) => throw null; + public override string ToQuotedString(System.Type fieldType, object value) => throw null; + } + + // Generated from `ServiceStack.OrmLite.Converters.GuidConverter` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class GuidConverter : ServiceStack.OrmLite.OrmLiteConverter + { + public override string ColumnDefinition { get => throw null; } + public override System.Data.DbType DbType { get => throw null; } + public GuidConverter() => throw null; + } + + // Generated from `ServiceStack.OrmLite.Converters.Int16Converter` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class Int16Converter : ServiceStack.OrmLite.Converters.IntegerConverter + { + public override System.Data.DbType DbType { get => throw null; } + public Int16Converter() => throw null; + } + + // Generated from `ServiceStack.OrmLite.Converters.Int32Converter` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class Int32Converter : ServiceStack.OrmLite.Converters.IntegerConverter + { + public Int32Converter() => throw null; + } + + // Generated from `ServiceStack.OrmLite.Converters.Int64Converter` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class Int64Converter : ServiceStack.OrmLite.Converters.IntegerConverter + { + public override string ColumnDefinition { get => throw null; } + public override System.Data.DbType DbType { get => throw null; } + public Int64Converter() => throw null; + } + + // Generated from `ServiceStack.OrmLite.Converters.IntegerConverter` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public abstract class IntegerConverter : ServiceStack.OrmLite.NativeValueOrmLiteConverter + { + public override string ColumnDefinition { get => throw null; } + public override System.Data.DbType DbType { get => throw null; } + public override object FromDbValue(System.Type fieldType, object value) => throw null; + protected IntegerConverter() => throw null; + public override object ToDbValue(System.Type fieldType, object value) => throw null; + } + + // Generated from `ServiceStack.OrmLite.Converters.ReferenceTypeConverter` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ReferenceTypeConverter : ServiceStack.OrmLite.Converters.StringConverter + { + public override string ColumnDefinition { get => throw null; } + public override object FromDbValue(System.Type fieldType, object value) => throw null; + public override string GetColumnDefinition(int? stringLength) => throw null; + public override string MaxColumnDefinition { get => throw null; } + public ReferenceTypeConverter() => throw null; + public override object ToDbValue(System.Type fieldType, object value) => throw null; + public override string ToQuotedString(System.Type fieldType, object value) => throw null; + } + + // Generated from `ServiceStack.OrmLite.Converters.RowVersionConverter` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class RowVersionConverter : ServiceStack.OrmLite.OrmLiteConverter + { + public override string ColumnDefinition { get => throw null; } + public override System.Data.DbType DbType { get => throw null; } + public override object FromDbValue(System.Type fieldType, object value) => throw null; + public RowVersionConverter() => throw null; + } + + // Generated from `ServiceStack.OrmLite.Converters.SByteConverter` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class SByteConverter : ServiceStack.OrmLite.Converters.IntegerConverter + { + public override System.Data.DbType DbType { get => throw null; } + public SByteConverter() => throw null; + } + + // Generated from `ServiceStack.OrmLite.Converters.StringConverter` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class StringConverter : ServiceStack.OrmLite.OrmLiteConverter, ServiceStack.OrmLite.IHasColumnDefinitionLength + { + public override string ColumnDefinition { get => throw null; } + public override object FromDbValue(System.Type fieldType, object value) => throw null; + public virtual string GetColumnDefinition(int? stringLength) => throw null; + public override void InitDbParam(System.Data.IDbDataParameter p, System.Type fieldType) => throw null; + public virtual string MaxColumnDefinition { get => throw null; set => throw null; } + public virtual int MaxVarCharLength { get => throw null; } + public StringConverter(int stringLength) => throw null; + public StringConverter() => throw null; + public int StringLength { get => throw null; set => throw null; } + public bool UseUnicode { get => throw null; set => throw null; } + protected string maxColumnDefinition; + } + + // Generated from `ServiceStack.OrmLite.Converters.TimeSpanAsIntConverter` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class TimeSpanAsIntConverter : ServiceStack.OrmLite.OrmLiteConverter + { + public override string ColumnDefinition { get => throw null; } + public override System.Data.DbType DbType { get => throw null; } + public override object FromDbValue(System.Type fieldType, object value) => throw null; + public TimeSpanAsIntConverter() => throw null; + public override object ToDbValue(System.Type fieldType, object value) => throw null; + public override string ToQuotedString(System.Type fieldType, object value) => throw null; + } + + // Generated from `ServiceStack.OrmLite.Converters.UInt16Converter` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class UInt16Converter : ServiceStack.OrmLite.Converters.IntegerConverter + { + public override System.Data.DbType DbType { get => throw null; } + public UInt16Converter() => throw null; + } + + // Generated from `ServiceStack.OrmLite.Converters.UInt32Converter` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class UInt32Converter : ServiceStack.OrmLite.Converters.IntegerConverter + { + public override System.Data.DbType DbType { get => throw null; } + public UInt32Converter() => throw null; + } + + // Generated from `ServiceStack.OrmLite.Converters.UInt64Converter` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class UInt64Converter : ServiceStack.OrmLite.Converters.IntegerConverter + { + public override string ColumnDefinition { get => throw null; } + public override System.Data.DbType DbType { get => throw null; } + public UInt64Converter() => throw null; + } + + // Generated from `ServiceStack.OrmLite.Converters.ValueTypeConverter` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ValueTypeConverter : ServiceStack.OrmLite.Converters.StringConverter + { + public override string ColumnDefinition { get => throw null; } + public override object FromDbValue(System.Type fieldType, object value) => throw null; + public override string GetColumnDefinition(int? stringLength) => throw null; + public override string MaxColumnDefinition { get => throw null; } + public override object ToDbValue(System.Type fieldType, object value) => throw null; + public override string ToQuotedString(System.Type fieldType, object value) => throw null; + public ValueTypeConverter() => throw null; + } + + } + namespace Dapper + { + // Generated from `ServiceStack.OrmLite.Dapper.CommandDefinition` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public struct CommandDefinition + { + public bool Buffered { get => throw null; } + public System.Threading.CancellationToken CancellationToken { get => throw null; } + public CommandDefinition(string commandText, object parameters = default(object), System.Data.IDbTransaction transaction = default(System.Data.IDbTransaction), int? commandTimeout = default(int?), System.Data.CommandType? commandType = default(System.Data.CommandType?), ServiceStack.OrmLite.Dapper.CommandFlags flags = default(ServiceStack.OrmLite.Dapper.CommandFlags), System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) => throw null; + // Stub generator skipped constructor + public string CommandText { get => throw null; } + public int? CommandTimeout { get => throw null; } + public System.Data.CommandType? CommandType { get => throw null; } + public ServiceStack.OrmLite.Dapper.CommandFlags Flags { get => throw null; } + public object Parameters { get => throw null; } + public bool Pipelined { get => throw null; } + public System.Data.IDbTransaction Transaction { get => throw null; } + } + + // Generated from `ServiceStack.OrmLite.Dapper.CommandFlags` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + [System.Flags] + public enum CommandFlags + { + Buffered, + NoCache, + None, + Pipelined, + } + + // Generated from `ServiceStack.OrmLite.Dapper.CustomPropertyTypeMap` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class CustomPropertyTypeMap : ServiceStack.OrmLite.Dapper.SqlMapper.ITypeMap + { + public CustomPropertyTypeMap(System.Type type, System.Func propertySelector) => throw null; + public System.Reflection.ConstructorInfo FindConstructor(string[] names, System.Type[] types) => throw null; + public System.Reflection.ConstructorInfo FindExplicitConstructor() => throw null; + public ServiceStack.OrmLite.Dapper.SqlMapper.IMemberMap GetConstructorParameter(System.Reflection.ConstructorInfo constructor, string columnName) => throw null; + public ServiceStack.OrmLite.Dapper.SqlMapper.IMemberMap GetMember(string columnName) => throw null; + } + + // Generated from `ServiceStack.OrmLite.Dapper.DbString` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class DbString : ServiceStack.OrmLite.Dapper.SqlMapper.ICustomQueryParameter + { + public void AddParameter(System.Data.IDbCommand command, string name) => throw null; + public DbString() => throw null; + public const int DefaultLength = default; + public bool IsAnsi { get => throw null; set => throw null; } + public static bool IsAnsiDefault { get => throw null; set => throw null; } + public bool IsFixedLength { get => throw null; set => throw null; } + public int Length { get => throw null; set => throw null; } + public string Value { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.OrmLite.Dapper.DefaultTypeMap` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class DefaultTypeMap : ServiceStack.OrmLite.Dapper.SqlMapper.ITypeMap + { + public DefaultTypeMap(System.Type type) => throw null; + public System.Reflection.ConstructorInfo FindConstructor(string[] names, System.Type[] types) => throw null; + public System.Reflection.ConstructorInfo FindExplicitConstructor() => throw null; + public ServiceStack.OrmLite.Dapper.SqlMapper.IMemberMap GetConstructorParameter(System.Reflection.ConstructorInfo constructor, string columnName) => throw null; + public ServiceStack.OrmLite.Dapper.SqlMapper.IMemberMap GetMember(string columnName) => throw null; + public static bool MatchNamesWithUnderscores { get => throw null; set => throw null; } + public System.Collections.Generic.List Properties { get => throw null; } + } + + // Generated from `ServiceStack.OrmLite.Dapper.DynamicParameters` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class DynamicParameters : ServiceStack.OrmLite.Dapper.SqlMapper.IParameterLookup, ServiceStack.OrmLite.Dapper.SqlMapper.IParameterCallbacks, ServiceStack.OrmLite.Dapper.SqlMapper.IDynamicParameters + { + public void Add(string name, object value, System.Data.DbType? dbType, System.Data.ParameterDirection? direction, int? size) => throw null; + public void Add(string name, object value = default(object), System.Data.DbType? dbType = default(System.Data.DbType?), System.Data.ParameterDirection? direction = default(System.Data.ParameterDirection?), int? size = default(int?), System.Byte? precision = default(System.Byte?), System.Byte? scale = default(System.Byte?)) => throw null; + public void AddDynamicParams(object param) => throw null; + void ServiceStack.OrmLite.Dapper.SqlMapper.IDynamicParameters.AddParameters(System.Data.IDbCommand command, ServiceStack.OrmLite.Dapper.SqlMapper.Identity identity) => throw null; + protected void AddParameters(System.Data.IDbCommand command, ServiceStack.OrmLite.Dapper.SqlMapper.Identity identity) => throw null; + public DynamicParameters(object template) => throw null; + public DynamicParameters() => throw null; + public T Get(string name) => throw null; + object ServiceStack.OrmLite.Dapper.SqlMapper.IParameterLookup.this[string name] { get => throw null; } + void ServiceStack.OrmLite.Dapper.SqlMapper.IParameterCallbacks.OnCompleted() => throw null; + public ServiceStack.OrmLite.Dapper.DynamicParameters Output(T target, System.Linq.Expressions.Expression> expression, System.Data.DbType? dbType = default(System.Data.DbType?), int? size = default(int?)) => throw null; + public System.Collections.Generic.IEnumerable ParameterNames { get => throw null; } + public bool RemoveUnused { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.OrmLite.Dapper.ExplicitConstructorAttribute` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ExplicitConstructorAttribute : System.Attribute + { + public ExplicitConstructorAttribute() => throw null; + } + + // Generated from `ServiceStack.OrmLite.Dapper.IWrappedDataReader` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IWrappedDataReader : System.IDisposable, System.Data.IDataRecord, System.Data.IDataReader + { + System.Data.IDbCommand Command { get; } + System.Data.IDataReader Reader { get; } + } + + // Generated from `ServiceStack.OrmLite.Dapper.SqlMapper` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class SqlMapper + { + public static void AddTypeHandler(ServiceStack.OrmLite.Dapper.SqlMapper.TypeHandler handler) => throw null; + public static void AddTypeHandler(System.Type type, ServiceStack.OrmLite.Dapper.SqlMapper.ITypeHandler handler) => throw null; + public static void AddTypeHandlerImpl(System.Type type, ServiceStack.OrmLite.Dapper.SqlMapper.ITypeHandler handler, bool clone) => throw null; + public static void AddTypeMap(System.Type type, System.Data.DbType dbType) => throw null; + public static System.Collections.Generic.List AsList(this System.Collections.Generic.IEnumerable source) => throw null; + public static ServiceStack.OrmLite.Dapper.SqlMapper.ICustomQueryParameter AsTableValuedParameter(this System.Collections.Generic.IEnumerable list, string typeName = default(string)) where T : System.Data.IDataRecord => throw null; + public static ServiceStack.OrmLite.Dapper.SqlMapper.ICustomQueryParameter AsTableValuedParameter(this System.Data.DataTable table, string typeName = default(string)) => throw null; + public static System.Collections.Generic.IEqualityComparer ConnectionStringComparer { get => throw null; set => throw null; } + public static System.Action CreateParamInfoGenerator(ServiceStack.OrmLite.Dapper.SqlMapper.Identity identity, bool checkForDuplicates, bool removeUnused) => throw null; + public static int Execute(this System.Data.IDbConnection cnn, string sql, object param = default(object), System.Data.IDbTransaction transaction = default(System.Data.IDbTransaction), int? commandTimeout = default(int?), System.Data.CommandType? commandType = default(System.Data.CommandType?)) => throw null; + public static int Execute(this System.Data.IDbConnection cnn, ServiceStack.OrmLite.Dapper.CommandDefinition command) => throw null; + public static System.Threading.Tasks.Task ExecuteAsync(this System.Data.IDbConnection cnn, string sql, object param = default(object), System.Data.IDbTransaction transaction = default(System.Data.IDbTransaction), int? commandTimeout = default(int?), System.Data.CommandType? commandType = default(System.Data.CommandType?)) => throw null; + public static System.Threading.Tasks.Task ExecuteAsync(this System.Data.IDbConnection cnn, ServiceStack.OrmLite.Dapper.CommandDefinition command) => throw null; + public static System.Data.IDataReader ExecuteReader(this System.Data.IDbConnection cnn, string sql, object param = default(object), System.Data.IDbTransaction transaction = default(System.Data.IDbTransaction), int? commandTimeout = default(int?), System.Data.CommandType? commandType = default(System.Data.CommandType?)) => throw null; + public static System.Data.IDataReader ExecuteReader(this System.Data.IDbConnection cnn, ServiceStack.OrmLite.Dapper.CommandDefinition command, System.Data.CommandBehavior commandBehavior) => throw null; + public static System.Data.IDataReader ExecuteReader(this System.Data.IDbConnection cnn, ServiceStack.OrmLite.Dapper.CommandDefinition command) => throw null; + public static System.Threading.Tasks.Task ExecuteReaderAsync(this System.Data.IDbConnection cnn, string sql, object param = default(object), System.Data.IDbTransaction transaction = default(System.Data.IDbTransaction), int? commandTimeout = default(int?), System.Data.CommandType? commandType = default(System.Data.CommandType?)) => throw null; + public static System.Threading.Tasks.Task ExecuteReaderAsync(this System.Data.IDbConnection cnn, ServiceStack.OrmLite.Dapper.CommandDefinition command, System.Data.CommandBehavior commandBehavior) => throw null; + public static System.Threading.Tasks.Task ExecuteReaderAsync(this System.Data.IDbConnection cnn, ServiceStack.OrmLite.Dapper.CommandDefinition command) => throw null; + public static System.Threading.Tasks.Task ExecuteReaderAsync(this System.Data.Common.DbConnection cnn, string sql, object param = default(object), System.Data.IDbTransaction transaction = default(System.Data.IDbTransaction), int? commandTimeout = default(int?), System.Data.CommandType? commandType = default(System.Data.CommandType?)) => throw null; + public static System.Threading.Tasks.Task ExecuteReaderAsync(this System.Data.Common.DbConnection cnn, ServiceStack.OrmLite.Dapper.CommandDefinition command, System.Data.CommandBehavior commandBehavior) => throw null; + public static System.Threading.Tasks.Task ExecuteReaderAsync(this System.Data.Common.DbConnection cnn, ServiceStack.OrmLite.Dapper.CommandDefinition command) => throw null; + public static object ExecuteScalar(this System.Data.IDbConnection cnn, string sql, object param = default(object), System.Data.IDbTransaction transaction = default(System.Data.IDbTransaction), int? commandTimeout = default(int?), System.Data.CommandType? commandType = default(System.Data.CommandType?)) => throw null; + public static object ExecuteScalar(this System.Data.IDbConnection cnn, ServiceStack.OrmLite.Dapper.CommandDefinition command) => throw null; + public static T ExecuteScalar(this System.Data.IDbConnection cnn, string sql, object param = default(object), System.Data.IDbTransaction transaction = default(System.Data.IDbTransaction), int? commandTimeout = default(int?), System.Data.CommandType? commandType = default(System.Data.CommandType?)) => throw null; + public static T ExecuteScalar(this System.Data.IDbConnection cnn, ServiceStack.OrmLite.Dapper.CommandDefinition command) => throw null; + public static System.Threading.Tasks.Task ExecuteScalarAsync(this System.Data.IDbConnection cnn, string sql, object param = default(object), System.Data.IDbTransaction transaction = default(System.Data.IDbTransaction), int? commandTimeout = default(int?), System.Data.CommandType? commandType = default(System.Data.CommandType?)) => throw null; + public static System.Threading.Tasks.Task ExecuteScalarAsync(this System.Data.IDbConnection cnn, ServiceStack.OrmLite.Dapper.CommandDefinition command) => throw null; + public static System.Threading.Tasks.Task ExecuteScalarAsync(this System.Data.IDbConnection cnn, string sql, object param = default(object), System.Data.IDbTransaction transaction = default(System.Data.IDbTransaction), int? commandTimeout = default(int?), System.Data.CommandType? commandType = default(System.Data.CommandType?)) => throw null; + public static System.Threading.Tasks.Task ExecuteScalarAsync(this System.Data.IDbConnection cnn, ServiceStack.OrmLite.Dapper.CommandDefinition command) => throw null; + public static System.Data.IDbDataParameter FindOrAddParameter(System.Data.IDataParameterCollection parameters, System.Data.IDbCommand command, string name) => throw null; + public static string Format(object value) => throw null; + public static System.Collections.Generic.IEnumerable> GetCachedSQL(int ignoreHitCountAbove = default(int)) => throw null; + public static int GetCachedSQLCount() => throw null; + public static System.Data.DbType GetDbType(object value) => throw null; + public static System.Collections.Generic.IEnumerable> GetHashCollissions() => throw null; + public static System.Func GetRowParser(this System.Data.IDataReader reader, System.Type type, int startIndex = default(int), int length = default(int), bool returnNullIfFirstMissing = default(bool)) => throw null; + public static System.Func GetRowParser(this System.Data.IDataReader reader, System.Type concreteType = default(System.Type), int startIndex = default(int), int length = default(int), bool returnNullIfFirstMissing = default(bool)) => throw null; + public static System.Func GetTypeDeserializer(System.Type type, System.Data.IDataReader reader, int startBound = default(int), int length = default(int), bool returnNullIfFirstMissing = default(bool)) => throw null; + public static ServiceStack.OrmLite.Dapper.SqlMapper.ITypeMap GetTypeMap(System.Type type) => throw null; + public static string GetTypeName(this System.Data.DataTable table) => throw null; + // Generated from `ServiceStack.OrmLite.Dapper.SqlMapper+GridReader` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class GridReader : System.IDisposable + { + public System.Data.IDbCommand Command { get => throw null; set => throw null; } + public void Dispose() => throw null; + public bool IsConsumed { get => throw null; set => throw null; } + public System.Collections.Generic.IEnumerable Read(System.Type type, bool buffered = default(bool)) => throw null; + public System.Collections.Generic.IEnumerable Read(bool buffered = default(bool)) => throw null; + public System.Collections.Generic.IEnumerable Read(System.Type[] types, System.Func map, string splitOn = default(string), bool buffered = default(bool)) => throw null; + public System.Collections.Generic.IEnumerable Read(System.Func func, string splitOn = default(string), bool buffered = default(bool)) => throw null; + public System.Collections.Generic.IEnumerable Read(System.Func func, string splitOn = default(string), bool buffered = default(bool)) => throw null; + public System.Collections.Generic.IEnumerable Read(System.Func func, string splitOn = default(string), bool buffered = default(bool)) => throw null; + public System.Collections.Generic.IEnumerable Read(System.Func func, string splitOn = default(string), bool buffered = default(bool)) => throw null; + public System.Collections.Generic.IEnumerable Read(System.Func func, string splitOn = default(string), bool buffered = default(bool)) => throw null; + public System.Collections.Generic.IEnumerable Read(System.Func func, string splitOn = default(string), bool buffered = default(bool)) => throw null; + public System.Collections.Generic.IEnumerable Read(bool buffered = default(bool)) => throw null; + public System.Threading.Tasks.Task> ReadAsync(System.Type type, bool buffered = default(bool)) => throw null; + public System.Threading.Tasks.Task> ReadAsync(bool buffered = default(bool)) => throw null; + public System.Threading.Tasks.Task> ReadAsync(bool buffered = default(bool)) => throw null; + public object ReadFirst(System.Type type) => throw null; + public dynamic ReadFirst() => throw null; + public T ReadFirst() => throw null; + public System.Threading.Tasks.Task ReadFirstAsync(System.Type type) => throw null; + public System.Threading.Tasks.Task ReadFirstAsync() => throw null; + public System.Threading.Tasks.Task ReadFirstAsync() => throw null; + public object ReadFirstOrDefault(System.Type type) => throw null; + public dynamic ReadFirstOrDefault() => throw null; + public T ReadFirstOrDefault() => throw null; + public System.Threading.Tasks.Task ReadFirstOrDefaultAsync(System.Type type) => throw null; + public System.Threading.Tasks.Task ReadFirstOrDefaultAsync() => throw null; + public System.Threading.Tasks.Task ReadFirstOrDefaultAsync() => throw null; + public object ReadSingle(System.Type type) => throw null; + public dynamic ReadSingle() => throw null; + public T ReadSingle() => throw null; + public System.Threading.Tasks.Task ReadSingleAsync(System.Type type) => throw null; + public System.Threading.Tasks.Task ReadSingleAsync() => throw null; + public System.Threading.Tasks.Task ReadSingleAsync() => throw null; + public object ReadSingleOrDefault(System.Type type) => throw null; + public dynamic ReadSingleOrDefault() => throw null; + public T ReadSingleOrDefault() => throw null; + public System.Threading.Tasks.Task ReadSingleOrDefaultAsync(System.Type type) => throw null; + public System.Threading.Tasks.Task ReadSingleOrDefaultAsync() => throw null; + public System.Threading.Tasks.Task ReadSingleOrDefaultAsync() => throw null; + } + + + // Generated from `ServiceStack.OrmLite.Dapper.SqlMapper+ICustomQueryParameter` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface ICustomQueryParameter + { + void AddParameter(System.Data.IDbCommand command, string name); + } + + + // Generated from `ServiceStack.OrmLite.Dapper.SqlMapper+IDynamicParameters` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IDynamicParameters + { + void AddParameters(System.Data.IDbCommand command, ServiceStack.OrmLite.Dapper.SqlMapper.Identity identity); + } + + + // Generated from `ServiceStack.OrmLite.Dapper.SqlMapper+IMemberMap` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IMemberMap + { + string ColumnName { get; } + System.Reflection.FieldInfo Field { get; } + System.Type MemberType { get; } + System.Reflection.ParameterInfo Parameter { get; } + System.Reflection.PropertyInfo Property { get; } + } + + + // Generated from `ServiceStack.OrmLite.Dapper.SqlMapper+IParameterCallbacks` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IParameterCallbacks : ServiceStack.OrmLite.Dapper.SqlMapper.IDynamicParameters + { + void OnCompleted(); + } + + + // Generated from `ServiceStack.OrmLite.Dapper.SqlMapper+IParameterLookup` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IParameterLookup : ServiceStack.OrmLite.Dapper.SqlMapper.IDynamicParameters + { + object this[string name] { get; } + } + + + // Generated from `ServiceStack.OrmLite.Dapper.SqlMapper+ITypeHandler` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface ITypeHandler + { + object Parse(System.Type destinationType, object value); + void SetValue(System.Data.IDbDataParameter parameter, object value); + } + + + // Generated from `ServiceStack.OrmLite.Dapper.SqlMapper+ITypeMap` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface ITypeMap + { + System.Reflection.ConstructorInfo FindConstructor(string[] names, System.Type[] types); + System.Reflection.ConstructorInfo FindExplicitConstructor(); + ServiceStack.OrmLite.Dapper.SqlMapper.IMemberMap GetConstructorParameter(System.Reflection.ConstructorInfo constructor, string columnName); + ServiceStack.OrmLite.Dapper.SqlMapper.IMemberMap GetMember(string columnName); + } + + + // Generated from `ServiceStack.OrmLite.Dapper.SqlMapper+Identity` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class Identity : System.IEquatable + { + public override bool Equals(object obj) => throw null; + public bool Equals(ServiceStack.OrmLite.Dapper.SqlMapper.Identity other) => throw null; + public ServiceStack.OrmLite.Dapper.SqlMapper.Identity ForDynamicParameters(System.Type type) => throw null; + public override int GetHashCode() => throw null; + internal Identity(string sql, System.Data.CommandType? commandType, System.Data.IDbConnection connection, System.Type type, System.Type parametersType) => throw null; + public override string ToString() => throw null; + public System.Data.CommandType? commandType; + public string connectionString; + public int gridIndex; + public int hashCode; + public System.Type parametersType; + public string sql; + public System.Type type; + } + + + public static System.Data.DbType LookupDbType(System.Type type, string name, bool demand, out ServiceStack.OrmLite.Dapper.SqlMapper.ITypeHandler handler) => throw null; + public static void PackListParameters(System.Data.IDbCommand command, string namePrefix, object value) => throw null; + public static System.Collections.Generic.IEnumerable Parse(this System.Data.IDataReader reader, System.Type type) => throw null; + public static System.Collections.Generic.IEnumerable Parse(this System.Data.IDataReader reader) => throw null; + public static System.Collections.Generic.IEnumerable Parse(this System.Data.IDataReader reader) => throw null; + public static void PurgeQueryCache() => throw null; + public static System.Collections.Generic.IEnumerable Query(this System.Data.IDbConnection cnn, System.Type type, string sql, object param = default(object), System.Data.IDbTransaction transaction = default(System.Data.IDbTransaction), bool buffered = default(bool), int? commandTimeout = default(int?), System.Data.CommandType? commandType = default(System.Data.CommandType?)) => throw null; + public static System.Collections.Generic.IEnumerable Query(this System.Data.IDbConnection cnn, string sql, object param = default(object), System.Data.IDbTransaction transaction = default(System.Data.IDbTransaction), bool buffered = default(bool), int? commandTimeout = default(int?), System.Data.CommandType? commandType = default(System.Data.CommandType?)) => throw null; + public static System.Collections.Generic.IEnumerable Query(this System.Data.IDbConnection cnn, string sql, System.Type[] types, System.Func map, object param = default(object), System.Data.IDbTransaction transaction = default(System.Data.IDbTransaction), bool buffered = default(bool), string splitOn = default(string), int? commandTimeout = default(int?), System.Data.CommandType? commandType = default(System.Data.CommandType?)) => throw null; + public static System.Collections.Generic.IEnumerable Query(this System.Data.IDbConnection cnn, string sql, System.Func map, object param = default(object), System.Data.IDbTransaction transaction = default(System.Data.IDbTransaction), bool buffered = default(bool), string splitOn = default(string), int? commandTimeout = default(int?), System.Data.CommandType? commandType = default(System.Data.CommandType?)) => throw null; + public static System.Collections.Generic.IEnumerable Query(this System.Data.IDbConnection cnn, string sql, System.Func map, object param = default(object), System.Data.IDbTransaction transaction = default(System.Data.IDbTransaction), bool buffered = default(bool), string splitOn = default(string), int? commandTimeout = default(int?), System.Data.CommandType? commandType = default(System.Data.CommandType?)) => throw null; + public static System.Collections.Generic.IEnumerable Query(this System.Data.IDbConnection cnn, string sql, System.Func map, object param = default(object), System.Data.IDbTransaction transaction = default(System.Data.IDbTransaction), bool buffered = default(bool), string splitOn = default(string), int? commandTimeout = default(int?), System.Data.CommandType? commandType = default(System.Data.CommandType?)) => throw null; + public static System.Collections.Generic.IEnumerable Query(this System.Data.IDbConnection cnn, string sql, System.Func map, object param = default(object), System.Data.IDbTransaction transaction = default(System.Data.IDbTransaction), bool buffered = default(bool), string splitOn = default(string), int? commandTimeout = default(int?), System.Data.CommandType? commandType = default(System.Data.CommandType?)) => throw null; + public static System.Collections.Generic.IEnumerable Query(this System.Data.IDbConnection cnn, string sql, System.Func map, object param = default(object), System.Data.IDbTransaction transaction = default(System.Data.IDbTransaction), bool buffered = default(bool), string splitOn = default(string), int? commandTimeout = default(int?), System.Data.CommandType? commandType = default(System.Data.CommandType?)) => throw null; + public static System.Collections.Generic.IEnumerable Query(this System.Data.IDbConnection cnn, string sql, System.Func map, object param = default(object), System.Data.IDbTransaction transaction = default(System.Data.IDbTransaction), bool buffered = default(bool), string splitOn = default(string), int? commandTimeout = default(int?), System.Data.CommandType? commandType = default(System.Data.CommandType?)) => throw null; + public static System.Collections.Generic.IEnumerable Query(this System.Data.IDbConnection cnn, string sql, object param = default(object), System.Data.IDbTransaction transaction = default(System.Data.IDbTransaction), bool buffered = default(bool), int? commandTimeout = default(int?), System.Data.CommandType? commandType = default(System.Data.CommandType?)) => throw null; + public static System.Collections.Generic.IEnumerable Query(this System.Data.IDbConnection cnn, ServiceStack.OrmLite.Dapper.CommandDefinition command) => throw null; + public static System.Threading.Tasks.Task> QueryAsync(this System.Data.IDbConnection cnn, System.Type type, string sql, object param = default(object), System.Data.IDbTransaction transaction = default(System.Data.IDbTransaction), int? commandTimeout = default(int?), System.Data.CommandType? commandType = default(System.Data.CommandType?)) => throw null; + public static System.Threading.Tasks.Task> QueryAsync(this System.Data.IDbConnection cnn, System.Type type, ServiceStack.OrmLite.Dapper.CommandDefinition command) => throw null; + public static System.Threading.Tasks.Task> QueryAsync(this System.Data.IDbConnection cnn, string sql, object param = default(object), System.Data.IDbTransaction transaction = default(System.Data.IDbTransaction), int? commandTimeout = default(int?), System.Data.CommandType? commandType = default(System.Data.CommandType?)) => throw null; + public static System.Threading.Tasks.Task> QueryAsync(this System.Data.IDbConnection cnn, ServiceStack.OrmLite.Dapper.CommandDefinition command) => throw null; + public static System.Threading.Tasks.Task> QueryAsync(this System.Data.IDbConnection cnn, string sql, System.Type[] types, System.Func map, object param = default(object), System.Data.IDbTransaction transaction = default(System.Data.IDbTransaction), bool buffered = default(bool), string splitOn = default(string), int? commandTimeout = default(int?), System.Data.CommandType? commandType = default(System.Data.CommandType?)) => throw null; + public static System.Threading.Tasks.Task> QueryAsync(this System.Data.IDbConnection cnn, string sql, System.Func map, object param = default(object), System.Data.IDbTransaction transaction = default(System.Data.IDbTransaction), bool buffered = default(bool), string splitOn = default(string), int? commandTimeout = default(int?), System.Data.CommandType? commandType = default(System.Data.CommandType?)) => throw null; + public static System.Threading.Tasks.Task> QueryAsync(this System.Data.IDbConnection cnn, ServiceStack.OrmLite.Dapper.CommandDefinition command, System.Func map, string splitOn = default(string)) => throw null; + public static System.Threading.Tasks.Task> QueryAsync(this System.Data.IDbConnection cnn, string sql, System.Func map, object param = default(object), System.Data.IDbTransaction transaction = default(System.Data.IDbTransaction), bool buffered = default(bool), string splitOn = default(string), int? commandTimeout = default(int?), System.Data.CommandType? commandType = default(System.Data.CommandType?)) => throw null; + public static System.Threading.Tasks.Task> QueryAsync(this System.Data.IDbConnection cnn, ServiceStack.OrmLite.Dapper.CommandDefinition command, System.Func map, string splitOn = default(string)) => throw null; + public static System.Threading.Tasks.Task> QueryAsync(this System.Data.IDbConnection cnn, string sql, System.Func map, object param = default(object), System.Data.IDbTransaction transaction = default(System.Data.IDbTransaction), bool buffered = default(bool), string splitOn = default(string), int? commandTimeout = default(int?), System.Data.CommandType? commandType = default(System.Data.CommandType?)) => throw null; + public static System.Threading.Tasks.Task> QueryAsync(this System.Data.IDbConnection cnn, ServiceStack.OrmLite.Dapper.CommandDefinition command, System.Func map, string splitOn = default(string)) => throw null; + public static System.Threading.Tasks.Task> QueryAsync(this System.Data.IDbConnection cnn, string sql, System.Func map, object param = default(object), System.Data.IDbTransaction transaction = default(System.Data.IDbTransaction), bool buffered = default(bool), string splitOn = default(string), int? commandTimeout = default(int?), System.Data.CommandType? commandType = default(System.Data.CommandType?)) => throw null; + public static System.Threading.Tasks.Task> QueryAsync(this System.Data.IDbConnection cnn, ServiceStack.OrmLite.Dapper.CommandDefinition command, System.Func map, string splitOn = default(string)) => throw null; + public static System.Threading.Tasks.Task> QueryAsync(this System.Data.IDbConnection cnn, string sql, System.Func map, object param = default(object), System.Data.IDbTransaction transaction = default(System.Data.IDbTransaction), bool buffered = default(bool), string splitOn = default(string), int? commandTimeout = default(int?), System.Data.CommandType? commandType = default(System.Data.CommandType?)) => throw null; + public static System.Threading.Tasks.Task> QueryAsync(this System.Data.IDbConnection cnn, ServiceStack.OrmLite.Dapper.CommandDefinition command, System.Func map, string splitOn = default(string)) => throw null; + public static System.Threading.Tasks.Task> QueryAsync(this System.Data.IDbConnection cnn, string sql, System.Func map, object param = default(object), System.Data.IDbTransaction transaction = default(System.Data.IDbTransaction), bool buffered = default(bool), string splitOn = default(string), int? commandTimeout = default(int?), System.Data.CommandType? commandType = default(System.Data.CommandType?)) => throw null; + public static System.Threading.Tasks.Task> QueryAsync(this System.Data.IDbConnection cnn, ServiceStack.OrmLite.Dapper.CommandDefinition command, System.Func map, string splitOn = default(string)) => throw null; + public static System.Threading.Tasks.Task> QueryAsync(this System.Data.IDbConnection cnn, string sql, object param = default(object), System.Data.IDbTransaction transaction = default(System.Data.IDbTransaction), int? commandTimeout = default(int?), System.Data.CommandType? commandType = default(System.Data.CommandType?)) => throw null; + public static System.Threading.Tasks.Task> QueryAsync(this System.Data.IDbConnection cnn, ServiceStack.OrmLite.Dapper.CommandDefinition command) => throw null; + public static event System.EventHandler QueryCachePurged; + public static object QueryFirst(this System.Data.IDbConnection cnn, System.Type type, string sql, object param = default(object), System.Data.IDbTransaction transaction = default(System.Data.IDbTransaction), int? commandTimeout = default(int?), System.Data.CommandType? commandType = default(System.Data.CommandType?)) => throw null; + public static dynamic QueryFirst(this System.Data.IDbConnection cnn, string sql, object param = default(object), System.Data.IDbTransaction transaction = default(System.Data.IDbTransaction), int? commandTimeout = default(int?), System.Data.CommandType? commandType = default(System.Data.CommandType?)) => throw null; + public static T QueryFirst(this System.Data.IDbConnection cnn, string sql, object param = default(object), System.Data.IDbTransaction transaction = default(System.Data.IDbTransaction), int? commandTimeout = default(int?), System.Data.CommandType? commandType = default(System.Data.CommandType?)) => throw null; + public static T QueryFirst(this System.Data.IDbConnection cnn, ServiceStack.OrmLite.Dapper.CommandDefinition command) => throw null; + public static System.Threading.Tasks.Task QueryFirstAsync(this System.Data.IDbConnection cnn, System.Type type, string sql, object param = default(object), System.Data.IDbTransaction transaction = default(System.Data.IDbTransaction), int? commandTimeout = default(int?), System.Data.CommandType? commandType = default(System.Data.CommandType?)) => throw null; + public static System.Threading.Tasks.Task QueryFirstAsync(this System.Data.IDbConnection cnn, System.Type type, ServiceStack.OrmLite.Dapper.CommandDefinition command) => throw null; + public static System.Threading.Tasks.Task QueryFirstAsync(this System.Data.IDbConnection cnn, string sql, object param = default(object), System.Data.IDbTransaction transaction = default(System.Data.IDbTransaction), int? commandTimeout = default(int?), System.Data.CommandType? commandType = default(System.Data.CommandType?)) => throw null; + public static System.Threading.Tasks.Task QueryFirstAsync(this System.Data.IDbConnection cnn, ServiceStack.OrmLite.Dapper.CommandDefinition command) => throw null; + public static System.Threading.Tasks.Task QueryFirstAsync(this System.Data.IDbConnection cnn, string sql, object param = default(object), System.Data.IDbTransaction transaction = default(System.Data.IDbTransaction), int? commandTimeout = default(int?), System.Data.CommandType? commandType = default(System.Data.CommandType?)) => throw null; + public static System.Threading.Tasks.Task QueryFirstAsync(this System.Data.IDbConnection cnn, ServiceStack.OrmLite.Dapper.CommandDefinition command) => throw null; + public static object QueryFirstOrDefault(this System.Data.IDbConnection cnn, System.Type type, string sql, object param = default(object), System.Data.IDbTransaction transaction = default(System.Data.IDbTransaction), int? commandTimeout = default(int?), System.Data.CommandType? commandType = default(System.Data.CommandType?)) => throw null; + public static dynamic QueryFirstOrDefault(this System.Data.IDbConnection cnn, string sql, object param = default(object), System.Data.IDbTransaction transaction = default(System.Data.IDbTransaction), int? commandTimeout = default(int?), System.Data.CommandType? commandType = default(System.Data.CommandType?)) => throw null; + public static T QueryFirstOrDefault(this System.Data.IDbConnection cnn, string sql, object param = default(object), System.Data.IDbTransaction transaction = default(System.Data.IDbTransaction), int? commandTimeout = default(int?), System.Data.CommandType? commandType = default(System.Data.CommandType?)) => throw null; + public static T QueryFirstOrDefault(this System.Data.IDbConnection cnn, ServiceStack.OrmLite.Dapper.CommandDefinition command) => throw null; + public static System.Threading.Tasks.Task QueryFirstOrDefaultAsync(this System.Data.IDbConnection cnn, System.Type type, string sql, object param = default(object), System.Data.IDbTransaction transaction = default(System.Data.IDbTransaction), int? commandTimeout = default(int?), System.Data.CommandType? commandType = default(System.Data.CommandType?)) => throw null; + public static System.Threading.Tasks.Task QueryFirstOrDefaultAsync(this System.Data.IDbConnection cnn, System.Type type, ServiceStack.OrmLite.Dapper.CommandDefinition command) => throw null; + public static System.Threading.Tasks.Task QueryFirstOrDefaultAsync(this System.Data.IDbConnection cnn, string sql, object param = default(object), System.Data.IDbTransaction transaction = default(System.Data.IDbTransaction), int? commandTimeout = default(int?), System.Data.CommandType? commandType = default(System.Data.CommandType?)) => throw null; + public static System.Threading.Tasks.Task QueryFirstOrDefaultAsync(this System.Data.IDbConnection cnn, ServiceStack.OrmLite.Dapper.CommandDefinition command) => throw null; + public static System.Threading.Tasks.Task QueryFirstOrDefaultAsync(this System.Data.IDbConnection cnn, string sql, object param = default(object), System.Data.IDbTransaction transaction = default(System.Data.IDbTransaction), int? commandTimeout = default(int?), System.Data.CommandType? commandType = default(System.Data.CommandType?)) => throw null; + public static System.Threading.Tasks.Task QueryFirstOrDefaultAsync(this System.Data.IDbConnection cnn, ServiceStack.OrmLite.Dapper.CommandDefinition command) => throw null; + public static ServiceStack.OrmLite.Dapper.SqlMapper.GridReader QueryMultiple(this System.Data.IDbConnection cnn, string sql, object param = default(object), System.Data.IDbTransaction transaction = default(System.Data.IDbTransaction), int? commandTimeout = default(int?), System.Data.CommandType? commandType = default(System.Data.CommandType?)) => throw null; + public static ServiceStack.OrmLite.Dapper.SqlMapper.GridReader QueryMultiple(this System.Data.IDbConnection cnn, ServiceStack.OrmLite.Dapper.CommandDefinition command) => throw null; + public static System.Threading.Tasks.Task QueryMultipleAsync(this System.Data.IDbConnection cnn, string sql, object param = default(object), System.Data.IDbTransaction transaction = default(System.Data.IDbTransaction), int? commandTimeout = default(int?), System.Data.CommandType? commandType = default(System.Data.CommandType?)) => throw null; + public static System.Threading.Tasks.Task QueryMultipleAsync(this System.Data.IDbConnection cnn, ServiceStack.OrmLite.Dapper.CommandDefinition command) => throw null; + public static object QuerySingle(this System.Data.IDbConnection cnn, System.Type type, string sql, object param = default(object), System.Data.IDbTransaction transaction = default(System.Data.IDbTransaction), int? commandTimeout = default(int?), System.Data.CommandType? commandType = default(System.Data.CommandType?)) => throw null; + public static dynamic QuerySingle(this System.Data.IDbConnection cnn, string sql, object param = default(object), System.Data.IDbTransaction transaction = default(System.Data.IDbTransaction), int? commandTimeout = default(int?), System.Data.CommandType? commandType = default(System.Data.CommandType?)) => throw null; + public static T QuerySingle(this System.Data.IDbConnection cnn, string sql, object param = default(object), System.Data.IDbTransaction transaction = default(System.Data.IDbTransaction), int? commandTimeout = default(int?), System.Data.CommandType? commandType = default(System.Data.CommandType?)) => throw null; + public static T QuerySingle(this System.Data.IDbConnection cnn, ServiceStack.OrmLite.Dapper.CommandDefinition command) => throw null; + public static System.Threading.Tasks.Task QuerySingleAsync(this System.Data.IDbConnection cnn, System.Type type, string sql, object param = default(object), System.Data.IDbTransaction transaction = default(System.Data.IDbTransaction), int? commandTimeout = default(int?), System.Data.CommandType? commandType = default(System.Data.CommandType?)) => throw null; + public static System.Threading.Tasks.Task QuerySingleAsync(this System.Data.IDbConnection cnn, System.Type type, ServiceStack.OrmLite.Dapper.CommandDefinition command) => throw null; + public static System.Threading.Tasks.Task QuerySingleAsync(this System.Data.IDbConnection cnn, string sql, object param = default(object), System.Data.IDbTransaction transaction = default(System.Data.IDbTransaction), int? commandTimeout = default(int?), System.Data.CommandType? commandType = default(System.Data.CommandType?)) => throw null; + public static System.Threading.Tasks.Task QuerySingleAsync(this System.Data.IDbConnection cnn, ServiceStack.OrmLite.Dapper.CommandDefinition command) => throw null; + public static System.Threading.Tasks.Task QuerySingleAsync(this System.Data.IDbConnection cnn, string sql, object param = default(object), System.Data.IDbTransaction transaction = default(System.Data.IDbTransaction), int? commandTimeout = default(int?), System.Data.CommandType? commandType = default(System.Data.CommandType?)) => throw null; + public static System.Threading.Tasks.Task QuerySingleAsync(this System.Data.IDbConnection cnn, ServiceStack.OrmLite.Dapper.CommandDefinition command) => throw null; + public static object QuerySingleOrDefault(this System.Data.IDbConnection cnn, System.Type type, string sql, object param = default(object), System.Data.IDbTransaction transaction = default(System.Data.IDbTransaction), int? commandTimeout = default(int?), System.Data.CommandType? commandType = default(System.Data.CommandType?)) => throw null; + public static dynamic QuerySingleOrDefault(this System.Data.IDbConnection cnn, string sql, object param = default(object), System.Data.IDbTransaction transaction = default(System.Data.IDbTransaction), int? commandTimeout = default(int?), System.Data.CommandType? commandType = default(System.Data.CommandType?)) => throw null; + public static T QuerySingleOrDefault(this System.Data.IDbConnection cnn, string sql, object param = default(object), System.Data.IDbTransaction transaction = default(System.Data.IDbTransaction), int? commandTimeout = default(int?), System.Data.CommandType? commandType = default(System.Data.CommandType?)) => throw null; + public static T QuerySingleOrDefault(this System.Data.IDbConnection cnn, ServiceStack.OrmLite.Dapper.CommandDefinition command) => throw null; + public static System.Threading.Tasks.Task QuerySingleOrDefaultAsync(this System.Data.IDbConnection cnn, System.Type type, string sql, object param = default(object), System.Data.IDbTransaction transaction = default(System.Data.IDbTransaction), int? commandTimeout = default(int?), System.Data.CommandType? commandType = default(System.Data.CommandType?)) => throw null; + public static System.Threading.Tasks.Task QuerySingleOrDefaultAsync(this System.Data.IDbConnection cnn, System.Type type, ServiceStack.OrmLite.Dapper.CommandDefinition command) => throw null; + public static System.Threading.Tasks.Task QuerySingleOrDefaultAsync(this System.Data.IDbConnection cnn, string sql, object param = default(object), System.Data.IDbTransaction transaction = default(System.Data.IDbTransaction), int? commandTimeout = default(int?), System.Data.CommandType? commandType = default(System.Data.CommandType?)) => throw null; + public static System.Threading.Tasks.Task QuerySingleOrDefaultAsync(this System.Data.IDbConnection cnn, ServiceStack.OrmLite.Dapper.CommandDefinition command) => throw null; + public static System.Threading.Tasks.Task QuerySingleOrDefaultAsync(this System.Data.IDbConnection cnn, string sql, object param = default(object), System.Data.IDbTransaction transaction = default(System.Data.IDbTransaction), int? commandTimeout = default(int?), System.Data.CommandType? commandType = default(System.Data.CommandType?)) => throw null; + public static System.Threading.Tasks.Task QuerySingleOrDefaultAsync(this System.Data.IDbConnection cnn, ServiceStack.OrmLite.Dapper.CommandDefinition command) => throw null; + public static System.Char ReadChar(object value) => throw null; + public static System.Char? ReadNullableChar(object value) => throw null; + public static void RemoveTypeMap(System.Type type) => throw null; + public static void ReplaceLiterals(this ServiceStack.OrmLite.Dapper.SqlMapper.IParameterLookup parameters, System.Data.IDbCommand command) => throw null; + public static void ResetTypeHandlers() => throw null; + public static object SanitizeParameterValue(object value) => throw null; + public static void SetTypeMap(System.Type type, ServiceStack.OrmLite.Dapper.SqlMapper.ITypeMap map) => throw null; + public static void SetTypeName(this System.Data.DataTable table, string typeName) => throw null; + // Generated from `ServiceStack.OrmLite.Dapper.SqlMapper+Settings` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class Settings + { + public static bool ApplyNullValues { get => throw null; set => throw null; } + public static int? CommandTimeout { get => throw null; set => throw null; } + public static int InListStringSplitCount { get => throw null; set => throw null; } + public static bool PadListExpansions { get => throw null; set => throw null; } + public static void SetDefaults() => throw null; + public static bool UseSingleResultOptimization { get => throw null; set => throw null; } + public static bool UseSingleRowOptimization { get => throw null; set => throw null; } + } + + + // Generated from `ServiceStack.OrmLite.Dapper.SqlMapper+StringTypeHandler<>` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public abstract class StringTypeHandler : ServiceStack.OrmLite.Dapper.SqlMapper.TypeHandler + { + protected abstract string Format(T xml); + public override T Parse(object value) => throw null; + protected abstract T Parse(string xml); + public override void SetValue(System.Data.IDbDataParameter parameter, T value) => throw null; + protected StringTypeHandler() => throw null; + } + + + public static void ThrowDataException(System.Exception ex, int index, System.Data.IDataReader reader, object value) => throw null; + // Generated from `ServiceStack.OrmLite.Dapper.SqlMapper+TypeHandler<>` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public abstract class TypeHandler : ServiceStack.OrmLite.Dapper.SqlMapper.ITypeHandler + { + public abstract T Parse(object value); + object ServiceStack.OrmLite.Dapper.SqlMapper.ITypeHandler.Parse(System.Type destinationType, object value) => throw null; + void ServiceStack.OrmLite.Dapper.SqlMapper.ITypeHandler.SetValue(System.Data.IDbDataParameter parameter, object value) => throw null; + public abstract void SetValue(System.Data.IDbDataParameter parameter, T value); + protected TypeHandler() => throw null; + } + + + // Generated from `ServiceStack.OrmLite.Dapper.SqlMapper+TypeHandlerCache<>` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class TypeHandlerCache + { + public static T Parse(object value) => throw null; + public static void SetValue(System.Data.IDbDataParameter parameter, object value) => throw null; + } + + + public static System.Func TypeMapProvider; + // Generated from `ServiceStack.OrmLite.Dapper.SqlMapper+UdtTypeHandler` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class UdtTypeHandler : ServiceStack.OrmLite.Dapper.SqlMapper.ITypeHandler + { + object ServiceStack.OrmLite.Dapper.SqlMapper.ITypeHandler.Parse(System.Type destinationType, object value) => throw null; + void ServiceStack.OrmLite.Dapper.SqlMapper.ITypeHandler.SetValue(System.Data.IDbDataParameter parameter, object value) => throw null; + public UdtTypeHandler(string udtTypeName) => throw null; + } + + + } + + } + namespace Legacy + { + // Generated from `ServiceStack.OrmLite.Legacy.OrmLiteReadApiAsyncLegacy` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class OrmLiteReadApiAsyncLegacy + { + public static System.Threading.Tasks.Task> ColumnDistinctFmtAsync(this System.Data.IDbConnection dbConn, string sqlFormat, params object[] sqlParams) => throw null; + public static System.Threading.Tasks.Task> ColumnDistinctFmtAsync(this System.Data.IDbConnection dbConn, System.Threading.CancellationToken token, string sqlFormat, params object[] sqlParams) => throw null; + public static System.Threading.Tasks.Task> ColumnFmtAsync(this System.Data.IDbConnection dbConn, string sqlFormat, params object[] sqlParams) => throw null; + public static System.Threading.Tasks.Task> ColumnFmtAsync(this System.Data.IDbConnection dbConn, System.Threading.CancellationToken token, string sqlFormat, params object[] sqlParams) => throw null; + public static System.Threading.Tasks.Task> DictionaryFmtAsync(this System.Data.IDbConnection dbConn, string sqlFormat, params object[] sqlParams) => throw null; + public static System.Threading.Tasks.Task> DictionaryFmtAsync(this System.Data.IDbConnection dbConn, System.Threading.CancellationToken token, string sqlFormat, params object[] sqlParams) => throw null; + public static System.Threading.Tasks.Task ExistsAsync(this System.Data.IDbConnection dbConn, System.Func, ServiceStack.OrmLite.SqlExpression> expression, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task ExistsFmtAsync(this System.Data.IDbConnection dbConn, string sqlFormat, params object[] filterParams) => throw null; + public static System.Threading.Tasks.Task ExistsFmtAsync(this System.Data.IDbConnection dbConn, System.Threading.CancellationToken token, string sqlFormat, params object[] filterParams) => throw null; + public static System.Threading.Tasks.Task>> LookupFmtAsync(this System.Data.IDbConnection dbConn, string sqlFormat, params object[] sqlParams) => throw null; + public static System.Threading.Tasks.Task>> LookupFmtAsync(this System.Data.IDbConnection dbConn, System.Threading.CancellationToken token, string sqlFormat, params object[] sqlParams) => throw null; + public static System.Threading.Tasks.Task ScalarFmtAsync(this System.Data.IDbConnection dbConn, string sqlFormat, params object[] sqlParams) => throw null; + public static System.Threading.Tasks.Task ScalarFmtAsync(this System.Data.IDbConnection dbConn, System.Threading.CancellationToken token, string sqlFormat, params object[] sqlParams) => throw null; + public static System.Threading.Tasks.Task> SelectFmtAsync(this System.Data.IDbConnection dbConn, System.Type fromTableType, string sqlFormat, params object[] filterParams) => throw null; + public static System.Threading.Tasks.Task> SelectFmtAsync(this System.Data.IDbConnection dbConn, System.Threading.CancellationToken token, System.Type fromTableType, string sqlFormat, params object[] filterParams) => throw null; + public static System.Threading.Tasks.Task> SelectFmtAsync(this System.Data.IDbConnection dbConn, string sqlFormat, params object[] filterParams) => throw null; + public static System.Threading.Tasks.Task> SelectFmtAsync(this System.Data.IDbConnection dbConn, System.Threading.CancellationToken token, string sqlFormat, params object[] filterParams) => throw null; + public static System.Threading.Tasks.Task> SqlProcedureFmtAsync(this System.Data.IDbConnection dbConn, System.Threading.CancellationToken token, object anonType, string sqlFilter, params object[] filterParams) where TOutputModel : new() => throw null; + } + + // Generated from `ServiceStack.OrmLite.Legacy.OrmLiteReadApiLegacy` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class OrmLiteReadApiLegacy + { + public static System.Collections.Generic.HashSet ColumnDistinctFmt(this System.Data.IDbConnection dbConn, string sqlFormat, params object[] sqlParams) => throw null; + public static System.Collections.Generic.List ColumnFmt(this System.Data.IDbConnection dbConn, string sqlFormat, params object[] sqlParams) => throw null; + public static System.Collections.Generic.Dictionary DictionaryFmt(this System.Data.IDbConnection dbConn, string sqlFormat, params object[] sqlParams) => throw null; + public static bool Exists(this System.Data.IDbConnection dbConn, System.Func, ServiceStack.OrmLite.SqlExpression> expression) => throw null; + public static bool ExistsFmt(this System.Data.IDbConnection dbConn, string sqlFormat, params object[] filterParams) => throw null; + public static System.Collections.Generic.Dictionary> LookupFmt(this System.Data.IDbConnection dbConn, string sqlFormat, params object[] sqlParams) => throw null; + public static T ScalarFmt(this System.Data.IDbConnection dbConn, string sqlFormat, params object[] sqlParams) => throw null; + public static System.Collections.Generic.List SelectFmt(this System.Data.IDbConnection dbConn, System.Type fromTableType, string sqlFormat, params object[] filterParams) => throw null; + public static System.Collections.Generic.List SelectFmt(this System.Data.IDbConnection dbConn, string sqlFormat, params object[] filterParams) => throw null; + public static System.Collections.Generic.IEnumerable SelectLazyFmt(this System.Data.IDbConnection dbConn, string sqlFormat, params object[] filterParams) => throw null; + public static T SingleFmt(this System.Data.IDbConnection dbConn, string sqlFormat, params object[] filterParams) => throw null; + } + + // Generated from `ServiceStack.OrmLite.Legacy.OrmLiteReadExpressionsApiAsyncLegacy` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class OrmLiteReadExpressionsApiAsyncLegacy + { + public static System.Threading.Tasks.Task CountAsync(this System.Data.IDbConnection dbConn, System.Func, ServiceStack.OrmLite.SqlExpression> expression, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task> LoadSelectAsync(this System.Data.IDbConnection dbConn, System.Func, ServiceStack.OrmLite.SqlExpression> expression, string[] include = default(string[]), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task> SelectAsync(this System.Data.IDbConnection dbConn, System.Func, ServiceStack.OrmLite.SqlExpression> expression, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task> SelectAsync(this System.Data.IDbConnection dbConn, System.Func, ServiceStack.OrmLite.SqlExpression> expression, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task SingleAsync(this System.Data.IDbConnection dbConn, System.Func, ServiceStack.OrmLite.SqlExpression> expression, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task SingleFmtAsync(this System.Data.IDbConnection dbConn, string sqlFormat, params object[] filterParams) => throw null; + public static System.Threading.Tasks.Task SingleFmtAsync(this System.Data.IDbConnection dbConn, System.Threading.CancellationToken token, string sqlFormat, params object[] filterParams) => throw null; + } + + // Generated from `ServiceStack.OrmLite.Legacy.OrmLiteReadExpressionsApiLegacy` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class OrmLiteReadExpressionsApiLegacy + { + public static System.Int64 Count(this System.Data.IDbConnection dbConn, System.Func, ServiceStack.OrmLite.SqlExpression> expression) => throw null; + public static System.Collections.Generic.List LoadSelect(this System.Data.IDbConnection dbConn, System.Func, ServiceStack.OrmLite.SqlExpression> expression, System.Func include) => throw null; + public static System.Collections.Generic.List LoadSelect(this System.Data.IDbConnection dbConn, System.Func, ServiceStack.OrmLite.SqlExpression> expression, System.Collections.Generic.IEnumerable include = default(System.Collections.Generic.IEnumerable)) => throw null; + public static System.Collections.Generic.List Select(this System.Data.IDbConnection dbConn, System.Func, ServiceStack.OrmLite.SqlExpression> expression) => throw null; + public static System.Collections.Generic.List Select(this System.Data.IDbConnection dbConn, System.Func, ServiceStack.OrmLite.SqlExpression> expression) => throw null; + public static System.Collections.Generic.List Select(this System.Data.IDbConnection dbConn, ServiceStack.OrmLite.SqlExpression expression) => throw null; + public static T Single(this System.Data.IDbConnection dbConn, System.Func, ServiceStack.OrmLite.SqlExpression> expression) => throw null; + public static ServiceStack.OrmLite.SqlExpression SqlExpression(this System.Data.IDbConnection dbConn) => throw null; + } + + // Generated from `ServiceStack.OrmLite.Legacy.OrmLiteWriteApiAsyncLegacy` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class OrmLiteWriteApiAsyncLegacy + { + public static System.Threading.Tasks.Task DeleteFmtAsync(this System.Data.IDbConnection dbConn, string sqlFilter, params object[] filterParams) => throw null; + public static System.Threading.Tasks.Task DeleteFmtAsync(this System.Data.IDbConnection dbConn, System.Threading.CancellationToken token, string sqlFilter, params object[] filterParams) => throw null; + public static System.Threading.Tasks.Task DeleteFmtAsync(this System.Data.IDbConnection dbConn, System.Type tableType, string sqlFilter, params object[] filterParams) => throw null; + public static System.Threading.Tasks.Task DeleteFmtAsync(this System.Data.IDbConnection dbConn, System.Threading.CancellationToken token, System.Type tableType, string sqlFilter, params object[] filterParams) => throw null; + } + + // Generated from `ServiceStack.OrmLite.Legacy.OrmLiteWriteCommandExtensionsLegacy` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class OrmLiteWriteCommandExtensionsLegacy + { + public static int DeleteFmt(this System.Data.IDbConnection dbConn, string sqlFilter, params object[] filterParams) => throw null; + public static int DeleteFmt(this System.Data.IDbConnection dbConn, System.Type tableType, string sqlFilter, params object[] filterParams) => throw null; + } + + // Generated from `ServiceStack.OrmLite.Legacy.OrmLiteWriteExpressionsApiAsyncLegacy` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class OrmLiteWriteExpressionsApiAsyncLegacy + { + public static System.Threading.Tasks.Task DeleteAsync(this System.Data.IDbConnection dbConn, System.Func, ServiceStack.OrmLite.SqlExpression> where, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task DeleteFmtAsync(this System.Data.IDbConnection dbConn, string where, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task DeleteFmtAsync(this System.Data.IDbConnection dbConn, string where = default(string)) => throw null; + public static System.Threading.Tasks.Task DeleteFmtAsync(this System.Data.IDbConnection dbConn, string table = default(string), string where = default(string), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task InsertOnlyAsync(this System.Data.IDbConnection dbConn, T obj, System.Func, ServiceStack.OrmLite.SqlExpression> onlyFields, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task InsertOnlyAsync(this System.Data.IDbConnection dbConn, T obj, ServiceStack.OrmLite.SqlExpression onlyFields, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task UpdateFmtAsync(this System.Data.IDbConnection dbConn, string set = default(string), string where = default(string), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task UpdateFmtAsync(this System.Data.IDbConnection dbConn, string table = default(string), string set = default(string), string where = default(string), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task UpdateOnlyAsync(this System.Data.IDbConnection dbConn, T model, System.Func, ServiceStack.OrmLite.SqlExpression> onlyFields, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + } + + // Generated from `ServiceStack.OrmLite.Legacy.OrmLiteWriteExpressionsApiLegacy` in `ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class OrmLiteWriteExpressionsApiLegacy + { + public static int Delete(this System.Data.IDbConnection dbConn, System.Func, ServiceStack.OrmLite.SqlExpression> where) => throw null; + public static int DeleteFmt(this System.Data.IDbConnection dbConn, string where = default(string)) => throw null; + public static int DeleteFmt(this System.Data.IDbConnection dbConn, string table = default(string), string where = default(string)) => throw null; + public static void InsertOnly(this System.Data.IDbConnection dbConn, T obj, System.Func, ServiceStack.OrmLite.SqlExpression> onlyFields) => throw null; + public static void InsertOnly(this System.Data.IDbConnection dbConn, T obj, ServiceStack.OrmLite.SqlExpression onlyFields) => throw null; + public static int UpdateFmt(this System.Data.IDbConnection dbConn, string set = default(string), string where = default(string)) => throw null; + public static int UpdateFmt(this System.Data.IDbConnection dbConn, string table = default(string), string set = default(string), string where = default(string)) => throw null; + public static int UpdateOnly(this System.Data.IDbConnection dbConn, T model, System.Func, ServiceStack.OrmLite.SqlExpression> onlyFields) => throw null; + } + + } + } +} +namespace System +{ + namespace Runtime + { + namespace CompilerServices + { + /* Duplicate type 'IsReadOnlyAttribute' is not stubbed in this assembly 'ServiceStack.OrmLite, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null'. */ + + } + } +} diff --git a/csharp/ql/test/resources/stubs/ServiceStack.OrmLite/5.11.0/ServiceStack.OrmLite.csproj b/csharp/ql/test/resources/stubs/ServiceStack.OrmLite/5.11.0/ServiceStack.OrmLite.csproj new file mode 100644 index 00000000000..8892d1db1e6 --- /dev/null +++ b/csharp/ql/test/resources/stubs/ServiceStack.OrmLite/5.11.0/ServiceStack.OrmLite.csproj @@ -0,0 +1,13 @@ + + + net5.0 + true + bin\ + false + + + + + + + diff --git a/csharp/ql/test/resources/stubs/ServiceStack.Redis/5.11.0/ServiceStack.Redis.cs b/csharp/ql/test/resources/stubs/ServiceStack.Redis/5.11.0/ServiceStack.Redis.cs new file mode 100644 index 00000000000..9ec8f920c31 --- /dev/null +++ b/csharp/ql/test/resources/stubs/ServiceStack.Redis/5.11.0/ServiceStack.Redis.cs @@ -0,0 +1,3016 @@ +// This file contains auto-generated code. + +// Generated from `SentinelInfo` in `ServiceStack.Redis, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` +public class SentinelInfo +{ + public string MasterName { get => throw null; set => throw null; } + public string[] RedisMasters { get => throw null; set => throw null; } + public string[] RedisSlaves { get => throw null; set => throw null; } + public SentinelInfo(string masterName, System.Collections.Generic.IEnumerable redisMasters, System.Collections.Generic.IEnumerable redisReplicas) => throw null; + public override string ToString() => throw null; +} + +namespace ServiceStack +{ + namespace Redis + { + // Generated from `ServiceStack.Redis.BasicRedisClientManager` in `ServiceStack.Redis, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class BasicRedisClientManager : System.IDisposable, System.IAsyncDisposable, ServiceStack.Redis.IRedisFailover, ServiceStack.Redis.IRedisClientsManagerAsync, ServiceStack.Redis.IRedisClientsManager, ServiceStack.Redis.IHasRedisResolver, ServiceStack.Caching.ICacheClientAsync, ServiceStack.Caching.ICacheClient + { + public bool Add(string key, T value, System.TimeSpan expiresIn) => throw null; + public bool Add(string key, T value, System.DateTime expiresAt) => throw null; + public bool Add(string key, T value) => throw null; + System.Threading.Tasks.Task ServiceStack.Caching.ICacheClientAsync.AddAsync(string key, T value, System.TimeSpan expiresIn, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.Task ServiceStack.Caching.ICacheClientAsync.AddAsync(string key, T value, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.Task ServiceStack.Caching.ICacheClientAsync.AddAsync(string key, T value, System.DateTime expiresAt, System.Threading.CancellationToken token) => throw null; + public BasicRedisClientManager(params string[] readWriteHosts) => throw null; + public BasicRedisClientManager(int initialDb, params string[] readWriteHosts) => throw null; + public BasicRedisClientManager(System.Collections.Generic.IEnumerable readWriteHosts, System.Collections.Generic.IEnumerable readOnlyHosts, System.Int64? initalDb = default(System.Int64?)) => throw null; + public BasicRedisClientManager(System.Collections.Generic.IEnumerable readWriteHosts, System.Collections.Generic.IEnumerable readOnlyHosts, System.Int64? initalDb = default(System.Int64?)) => throw null; + public BasicRedisClientManager() => throw null; + public System.Func ClientFactory { get => throw null; set => throw null; } + public int? ConnectTimeout { get => throw null; set => throw null; } + public System.Action ConnectionFilter { get => throw null; set => throw null; } + public System.Int64? Db { get => throw null; set => throw null; } + public System.Int64 Decrement(string key, System.UInt32 amount) => throw null; + System.Threading.Tasks.Task ServiceStack.Caching.ICacheClientAsync.DecrementAsync(string key, System.UInt32 amount, System.Threading.CancellationToken token) => throw null; + public void Dispose() => throw null; + System.Threading.Tasks.ValueTask System.IAsyncDisposable.DisposeAsync() => throw null; + public void FailoverTo(params string[] readWriteHosts) => throw null; + public void FailoverTo(System.Collections.Generic.IEnumerable readWriteHosts, System.Collections.Generic.IEnumerable readOnlyHosts) => throw null; + public void FlushAll() => throw null; + System.Threading.Tasks.Task ServiceStack.Caching.ICacheClientAsync.FlushAllAsync(System.Threading.CancellationToken token) => throw null; + public T Get(string key) => throw null; + public System.Collections.Generic.IDictionary GetAll(System.Collections.Generic.IEnumerable keys) => throw null; + System.Threading.Tasks.Task> ServiceStack.Caching.ICacheClientAsync.GetAllAsync(System.Collections.Generic.IEnumerable keys, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.Task ServiceStack.Caching.ICacheClientAsync.GetAsync(string key, System.Threading.CancellationToken token) => throw null; + public ServiceStack.Caching.ICacheClient GetCacheClient() => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientsManagerAsync.GetCacheClientAsync(System.Threading.CancellationToken token) => throw null; + public ServiceStack.Redis.IRedisClient GetClient() => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientsManagerAsync.GetClientAsync(System.Threading.CancellationToken token) => throw null; + System.Collections.Generic.IAsyncEnumerable ServiceStack.Caching.ICacheClientAsync.GetKeysByPatternAsync(string pattern, System.Threading.CancellationToken token) => throw null; + public ServiceStack.Caching.ICacheClient GetReadOnlyCacheClient() => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientsManagerAsync.GetReadOnlyCacheClientAsync(System.Threading.CancellationToken token) => throw null; + public virtual ServiceStack.Redis.IRedisClient GetReadOnlyClient() => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientsManagerAsync.GetReadOnlyClientAsync(System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.Task ServiceStack.Caching.ICacheClientAsync.GetTimeToLiveAsync(string key, System.Threading.CancellationToken token) => throw null; + public int? IdleTimeOutSecs { get => throw null; set => throw null; } + public System.Int64 Increment(string key, System.UInt32 amount) => throw null; + System.Threading.Tasks.Task ServiceStack.Caching.ICacheClientAsync.IncrementAsync(string key, System.UInt32 amount, System.Threading.CancellationToken token) => throw null; + public static ServiceStack.Logging.ILog Log; + public string NamespacePrefix { get => throw null; set => throw null; } + public System.Collections.Generic.List> OnFailover { get => throw null; set => throw null; } + protected virtual void OnStart() => throw null; + protected int RedisClientCounter; + public ServiceStack.Redis.IRedisResolver RedisResolver { get => throw null; set => throw null; } + public bool Remove(string key) => throw null; + public void RemoveAll(System.Collections.Generic.IEnumerable keys) => throw null; + System.Threading.Tasks.Task ServiceStack.Caching.ICacheClientAsync.RemoveAllAsync(System.Collections.Generic.IEnumerable keys, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.Task ServiceStack.Caching.ICacheClientAsync.RemoveAsync(string key, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.Task ServiceStack.Caching.ICacheClientAsync.RemoveExpiredEntriesAsync(System.Threading.CancellationToken token) => throw null; + public bool Replace(string key, T value, System.TimeSpan expiresIn) => throw null; + public bool Replace(string key, T value, System.DateTime expiresAt) => throw null; + public bool Replace(string key, T value) => throw null; + System.Threading.Tasks.Task ServiceStack.Caching.ICacheClientAsync.ReplaceAsync(string key, T value, System.TimeSpan expiresIn, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.Task ServiceStack.Caching.ICacheClientAsync.ReplaceAsync(string key, T value, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.Task ServiceStack.Caching.ICacheClientAsync.ReplaceAsync(string key, T value, System.DateTime expiresAt, System.Threading.CancellationToken token) => throw null; + public bool Set(string key, T value, System.TimeSpan expiresIn) => throw null; + public bool Set(string key, T value, System.DateTime expiresAt) => throw null; + public bool Set(string key, T value) => throw null; + public void SetAll(System.Collections.Generic.IDictionary values) => throw null; + System.Threading.Tasks.Task ServiceStack.Caching.ICacheClientAsync.SetAllAsync(System.Collections.Generic.IDictionary values, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.Task ServiceStack.Caching.ICacheClientAsync.SetAsync(string key, T value, System.TimeSpan expiresIn, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.Task ServiceStack.Caching.ICacheClientAsync.SetAsync(string key, T value, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.Task ServiceStack.Caching.ICacheClientAsync.SetAsync(string key, T value, System.DateTime expiresAt, System.Threading.CancellationToken token) => throw null; + public int? SocketReceiveTimeout { get => throw null; set => throw null; } + public int? SocketSendTimeout { get => throw null; set => throw null; } + public void Start() => throw null; + } + + // Generated from `ServiceStack.Redis.BasicRedisResolver` in `ServiceStack.Redis, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class BasicRedisResolver : ServiceStack.Redis.IRedisResolverExtended, ServiceStack.Redis.IRedisResolver + { + public BasicRedisResolver(System.Collections.Generic.IEnumerable masters, System.Collections.Generic.IEnumerable replicas) => throw null; + public System.Func ClientFactory { get => throw null; set => throw null; } + public ServiceStack.Redis.RedisClient CreateMasterClient(int desiredIndex) => throw null; + public ServiceStack.Redis.RedisClient CreateRedisClient(ServiceStack.Redis.RedisEndpoint config, bool master) => throw null; + public ServiceStack.Redis.RedisClient CreateSlaveClient(int desiredIndex) => throw null; + public ServiceStack.Redis.RedisEndpoint GetReadOnlyHost(int desiredIndex) => throw null; + public ServiceStack.Redis.RedisEndpoint GetReadWriteHost(int desiredIndex) => throw null; + public ServiceStack.Redis.RedisEndpoint[] Masters { get => throw null; } + public int ReadOnlyHostsCount { get => throw null; set => throw null; } + public int ReadWriteHostsCount { get => throw null; set => throw null; } + public ServiceStack.Redis.RedisEndpoint[] Replicas { get => throw null; } + public virtual void ResetMasters(System.Collections.Generic.List newMasters) => throw null; + public virtual void ResetMasters(System.Collections.Generic.IEnumerable hosts) => throw null; + public virtual void ResetSlaves(System.Collections.Generic.List newReplicas) => throw null; + public virtual void ResetSlaves(System.Collections.Generic.IEnumerable hosts) => throw null; + } + + // Generated from `ServiceStack.Redis.Commands` in `ServiceStack.Redis, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class Commands + { + public static System.Byte[] Addr; + public static System.Byte[] After; + public static System.Byte[] Alpha; + public static System.Byte[] Append; + public static System.Byte[] Asc; + public static System.Byte[] Auth; + public static System.Byte[] BLPop; + public static System.Byte[] BRPop; + public static System.Byte[] BRPopLPush; + public static System.Byte[] Before; + public static System.Byte[] BgRewriteAof; + public static System.Byte[] BgSave; + public static System.Byte[] BitCount; + public static System.Byte[] By; + public static System.Byte[] Client; + public static System.Byte[] Config; + public static System.Byte[] Count; + public static System.Byte[] DbSize; + public static System.Byte[] Debug; + public static System.Byte[] Decr; + public static System.Byte[] DecrBy; + public static System.Byte[] Del; + public static System.Byte[] Desc; + public static System.Byte[] Discard; + public static System.Byte[] Dump; + public static System.Byte[] Echo; + public static System.Byte[] Eval; + public static System.Byte[] EvalSha; + public static System.Byte[] Ex; + public static System.Byte[] Exec; + public static System.Byte[] Exists; + public static System.Byte[] Expire; + public static System.Byte[] ExpireAt; + public static System.Byte[] Failover; + public static System.Byte[] Feet; + public static System.Byte[] Flush; + public static System.Byte[] FlushAll; + public static System.Byte[] FlushDb; + public static System.Byte[] GeoAdd; + public static System.Byte[] GeoDist; + public static System.Byte[] GeoHash; + public static System.Byte[] GeoPos; + public static System.Byte[] GeoRadius; + public static System.Byte[] GeoRadiusByMember; + public static System.Byte[] Get; + public static System.Byte[] GetBit; + public static System.Byte[] GetMasterAddrByName; + public static System.Byte[] GetName; + public static System.Byte[] GetRange; + public static System.Byte[] GetSet; + public static System.Byte[] GetUnit(string unit) => throw null; + public static System.Byte[] HDel; + public static System.Byte[] HExists; + public static System.Byte[] HGet; + public static System.Byte[] HGetAll; + public static System.Byte[] HIncrBy; + public static System.Byte[] HIncrByFloat; + public static System.Byte[] HKeys; + public static System.Byte[] HLen; + public static System.Byte[] HMGet; + public static System.Byte[] HMSet; + public static System.Byte[] HScan; + public static System.Byte[] HSet; + public static System.Byte[] HSetNx; + public static System.Byte[] HVals; + public static System.Byte[] Id; + public static System.Byte[] IdleTime; + public static System.Byte[] Incr; + public static System.Byte[] IncrBy; + public static System.Byte[] IncrByFloat; + public static System.Byte[] Info; + public static System.Byte[] Keys; + public static System.Byte[] Kill; + public static System.Byte[] Kilometers; + public static System.Byte[] LIndex; + public static System.Byte[] LInsert; + public static System.Byte[] LLen; + public static System.Byte[] LPop; + public static System.Byte[] LPush; + public static System.Byte[] LPushX; + public static System.Byte[] LRange; + public static System.Byte[] LRem; + public static System.Byte[] LSet; + public static System.Byte[] LTrim; + public static System.Byte[] LastSave; + public static System.Byte[] Limit; + public static System.Byte[] List; + public static System.Byte[] Load; + public static System.Byte[] MGet; + public static System.Byte[] MSet; + public static System.Byte[] MSetNx; + public static System.Byte[] Master; + public static System.Byte[] Masters; + public static System.Byte[] Match; + public static System.Byte[] Meters; + public static System.Byte[] Migrate; + public static System.Byte[] Miles; + public static System.Byte[] Monitor; + public static System.Byte[] Move; + public static System.Byte[] Multi; + public static System.Byte[] No; + public static System.Byte[] NoSave; + public static System.Byte[] Nx; + public static System.Byte[] Object; + public static System.Byte[] One; + public static System.Byte[] PExpire; + public static System.Byte[] PExpireAt; + public static System.Byte[] PSetEx; + public static System.Byte[] PSubscribe; + public static System.Byte[] PTtl; + public static System.Byte[] PUnSubscribe; + public static System.Byte[] Pause; + public static System.Byte[] Persist; + public static System.Byte[] PfAdd; + public static System.Byte[] PfCount; + public static System.Byte[] PfMerge; + public static System.Byte[] Ping; + public static System.Byte[] Publish; + public static System.Byte[] Px; + public static System.Byte[] Quit; + public static System.Byte[] RPop; + public static System.Byte[] RPopLPush; + public static System.Byte[] RPush; + public static System.Byte[] RPushX; + public static System.Byte[] RandomKey; + public static System.Byte[] Rename; + public static System.Byte[] RenameNx; + public static System.Byte[] ResetStat; + public static System.Byte[] Restore; + public static System.Byte[] Rewrite; + public static System.Byte[] Role; + public static System.Byte[] SAdd; + public static System.Byte[] SCard; + public static System.Byte[] SDiff; + public static System.Byte[] SDiffStore; + public static System.Byte[] SInter; + public static System.Byte[] SInterStore; + public static System.Byte[] SIsMember; + public static System.Byte[] SMembers; + public static System.Byte[] SMove; + public static System.Byte[] SPop; + public static System.Byte[] SRandMember; + public static System.Byte[] SRem; + public static System.Byte[] SScan; + public static System.Byte[] SUnion; + public static System.Byte[] SUnionStore; + public static System.Byte[] Save; + public static System.Byte[] Scan; + public static System.Byte[] Script; + public static System.Byte[] Segfault; + public static System.Byte[] Select; + public static System.Byte[] Sentinel; + public static System.Byte[] Sentinels; + public static System.Byte[] Set; + public static System.Byte[] SetBit; + public static System.Byte[] SetEx; + public static System.Byte[] SetName; + public static System.Byte[] SetNx; + public static System.Byte[] SetRange; + public static System.Byte[] Shutdown; + public static System.Byte[] SkipMe; + public static System.Byte[] SlaveOf; + public static System.Byte[] Slaves; + public static System.Byte[] Sleep; + public static System.Byte[] Slowlog; + public static System.Byte[] Sort; + public static System.Byte[] Store; + public static System.Byte[] StrLen; + public static System.Byte[] Subscribe; + public static System.Byte[] Time; + public static System.Byte[] Ttl; + public static System.Byte[] Type; + public static System.Byte[] UnSubscribe; + public static System.Byte[] UnWatch; + public static System.Byte[] Watch; + public static System.Byte[] WithCoord; + public static System.Byte[] WithDist; + public static System.Byte[] WithHash; + public static System.Byte[] WithScores; + public static System.Byte[] Xx; + public static System.Byte[] ZAdd; + public static System.Byte[] ZCard; + public static System.Byte[] ZCount; + public static System.Byte[] ZIncrBy; + public static System.Byte[] ZInterStore; + public static System.Byte[] ZLexCount; + public static System.Byte[] ZRange; + public static System.Byte[] ZRangeByLex; + public static System.Byte[] ZRangeByScore; + public static System.Byte[] ZRank; + public static System.Byte[] ZRem; + public static System.Byte[] ZRemRangeByLex; + public static System.Byte[] ZRemRangeByRank; + public static System.Byte[] ZRemRangeByScore; + public static System.Byte[] ZRevRange; + public static System.Byte[] ZRevRangeByScore; + public static System.Byte[] ZRevRank; + public static System.Byte[] ZScan; + public static System.Byte[] ZScore; + public static System.Byte[] ZUnionStore; + } + + // Generated from `ServiceStack.Redis.IHandleClientDispose` in `ServiceStack.Redis, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IHandleClientDispose + { + void DisposeClient(ServiceStack.Redis.RedisNativeClient client); + } + + // Generated from `ServiceStack.Redis.IHasRedisResolver` in `ServiceStack.Redis, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IHasRedisResolver + { + ServiceStack.Redis.IRedisResolver RedisResolver { get; set; } + } + + // Generated from `ServiceStack.Redis.IRedisFailover` in `ServiceStack.Redis, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IRedisFailover + { + void FailoverTo(params string[] readWriteHosts); + void FailoverTo(System.Collections.Generic.IEnumerable readWriteHosts, System.Collections.Generic.IEnumerable readOnlyHosts); + System.Collections.Generic.List> OnFailover { get; } + } + + // Generated from `ServiceStack.Redis.IRedisResolver` in `ServiceStack.Redis, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IRedisResolver + { + System.Func ClientFactory { get; set; } + ServiceStack.Redis.RedisClient CreateMasterClient(int desiredIndex); + ServiceStack.Redis.RedisClient CreateSlaveClient(int desiredIndex); + int ReadOnlyHostsCount { get; } + int ReadWriteHostsCount { get; } + void ResetMasters(System.Collections.Generic.IEnumerable hosts); + void ResetSlaves(System.Collections.Generic.IEnumerable hosts); + } + + // Generated from `ServiceStack.Redis.IRedisResolverExtended` in `ServiceStack.Redis, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IRedisResolverExtended : ServiceStack.Redis.IRedisResolver + { + ServiceStack.Redis.RedisClient CreateRedisClient(ServiceStack.Redis.RedisEndpoint config, bool master); + ServiceStack.Redis.RedisEndpoint GetReadOnlyHost(int desiredIndex); + ServiceStack.Redis.RedisEndpoint GetReadWriteHost(int desiredIndex); + } + + // Generated from `ServiceStack.Redis.IRedisSentinel` in `ServiceStack.Redis, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IRedisSentinel : System.IDisposable + { + ServiceStack.Redis.IRedisClientsManager Start(); + } + + // Generated from `ServiceStack.Redis.InvalidAccessException` in `ServiceStack.Redis, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class InvalidAccessException : ServiceStack.Redis.RedisException + { + public InvalidAccessException(int threadId, string stackTrace) : base(default(string)) => throw null; + } + + // Generated from `ServiceStack.Redis.PooledRedisClientManager` in `ServiceStack.Redis, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class PooledRedisClientManager : System.IDisposable, System.IAsyncDisposable, ServiceStack.Redis.IRedisFailover, ServiceStack.Redis.IRedisClientsManagerAsync, ServiceStack.Redis.IRedisClientsManager, ServiceStack.Redis.IRedisClientCacheManager, ServiceStack.Redis.IHasRedisResolver, ServiceStack.Redis.IHandleClientDispose + { + public bool AssertAccessOnlyOnSameThread { get => throw null; set => throw null; } + protected ServiceStack.Redis.RedisClientManagerConfig Config { get => throw null; set => throw null; } + public int? ConnectTimeout { get => throw null; set => throw null; } + public System.Action ConnectionFilter { get => throw null; set => throw null; } + public System.Int64? Db { get => throw null; set => throw null; } + // Generated from `ServiceStack.Redis.PooledRedisClientManager+DisposablePooledClient<>` in `ServiceStack.Redis, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class DisposablePooledClient : System.IDisposable where T : ServiceStack.Redis.RedisNativeClient + { + public T Client { get => throw null; } + public DisposablePooledClient(ServiceStack.Redis.PooledRedisClientManager clientManager) => throw null; + public void Dispose() => throw null; + } + + + public void Dispose() => throw null; + protected void Dispose(ServiceStack.Redis.RedisClient redisClient) => throw null; + protected virtual void Dispose(bool disposing) => throw null; + System.Threading.Tasks.ValueTask System.IAsyncDisposable.DisposeAsync() => throw null; + public void DisposeClient(ServiceStack.Redis.RedisNativeClient client) => throw null; + public void DisposeReadOnlyClient(ServiceStack.Redis.RedisNativeClient client) => throw null; + public void DisposeWriteClient(ServiceStack.Redis.RedisNativeClient client) => throw null; + public void FailoverTo(params string[] readWriteHosts) => throw null; + public void FailoverTo(System.Collections.Generic.IEnumerable readWriteHosts, System.Collections.Generic.IEnumerable readOnlyHosts) => throw null; + public ServiceStack.Caching.ICacheClient GetCacheClient() => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientsManagerAsync.GetCacheClientAsync(System.Threading.CancellationToken token) => throw null; + public ServiceStack.Redis.IRedisClient GetClient() => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientsManagerAsync.GetClientAsync(System.Threading.CancellationToken token) => throw null; + public int[] GetClientPoolActiveStates() => throw null; + public ServiceStack.Redis.PooledRedisClientManager.DisposablePooledClient GetDisposableClient() where T : ServiceStack.Redis.RedisNativeClient => throw null; + public ServiceStack.Caching.ICacheClient GetReadOnlyCacheClient() => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientsManagerAsync.GetReadOnlyCacheClientAsync(System.Threading.CancellationToken token) => throw null; + public virtual ServiceStack.Redis.IRedisClient GetReadOnlyClient() => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientsManagerAsync.GetReadOnlyClientAsync(System.Threading.CancellationToken token) => throw null; + public int[] GetReadOnlyClientPoolActiveStates() => throw null; + public System.Collections.Generic.Dictionary GetStats() => throw null; + public int? IdleTimeOutSecs { get => throw null; set => throw null; } + public string NamespacePrefix { get => throw null; set => throw null; } + public System.Collections.Generic.List> OnFailover { get => throw null; set => throw null; } + protected virtual void OnStart() => throw null; + protected int PoolSizeMultiplier; + public int? PoolTimeout { get => throw null; set => throw null; } + public PooledRedisClientManager(params string[] readWriteHosts) => throw null; + public PooledRedisClientManager(int poolSize, int poolTimeOutSeconds, params string[] readWriteHosts) => throw null; + public PooledRedisClientManager(System.Int64 initialDb, params string[] readWriteHosts) => throw null; + public PooledRedisClientManager(System.Collections.Generic.IEnumerable readWriteHosts, System.Collections.Generic.IEnumerable readOnlyHosts, System.Int64 initialDb) => throw null; + public PooledRedisClientManager(System.Collections.Generic.IEnumerable readWriteHosts, System.Collections.Generic.IEnumerable readOnlyHosts, ServiceStack.Redis.RedisClientManagerConfig config, System.Int64? initialDb, int? poolSizeMultiplier, int? poolTimeOutSeconds) => throw null; + public PooledRedisClientManager(System.Collections.Generic.IEnumerable readWriteHosts, System.Collections.Generic.IEnumerable readOnlyHosts, ServiceStack.Redis.RedisClientManagerConfig config) => throw null; + public PooledRedisClientManager(System.Collections.Generic.IEnumerable readWriteHosts, System.Collections.Generic.IEnumerable readOnlyHosts) => throw null; + public PooledRedisClientManager() => throw null; + protected int ReadPoolIndex; + public int RecheckPoolAfterMs; + protected int RedisClientCounter; + public ServiceStack.Redis.IRedisResolver RedisResolver { get => throw null; set => throw null; } + public int? SocketReceiveTimeout { get => throw null; set => throw null; } + public int? SocketSendTimeout { get => throw null; set => throw null; } + public void Start() => throw null; + public static bool UseGetClientBlocking; + protected int WritePoolIndex; + // ERR: Stub generator didn't handle member: ~PooledRedisClientManager + } + + // Generated from `ServiceStack.Redis.RedisAllPurposePipeline` in `ServiceStack.Redis, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class RedisAllPurposePipeline : ServiceStack.Redis.RedisCommandQueue, System.IDisposable, System.IAsyncDisposable, ServiceStack.Redis.Pipeline.IRedisQueueableOperationAsync, ServiceStack.Redis.Pipeline.IRedisQueueableOperation, ServiceStack.Redis.Pipeline.IRedisQueueCompletableOperationAsync, ServiceStack.Redis.Pipeline.IRedisQueueCompletableOperation, ServiceStack.Redis.Pipeline.IRedisPipelineSharedAsync, ServiceStack.Redis.Pipeline.IRedisPipelineShared, ServiceStack.Redis.Pipeline.IRedisPipelineAsync, ServiceStack.Redis.Pipeline.IRedisPipeline + { + protected void ClosePipeline() => throw null; + void ServiceStack.Redis.Pipeline.IRedisQueueCompletableOperationAsync.CompleteBytesQueuedCommandAsync(System.Func> bytesReadCommand) => throw null; + void ServiceStack.Redis.Pipeline.IRedisQueueCompletableOperationAsync.CompleteDoubleQueuedCommandAsync(System.Func> doubleReadCommand) => throw null; + void ServiceStack.Redis.Pipeline.IRedisQueueCompletableOperationAsync.CompleteIntQueuedCommandAsync(System.Func> intReadCommand) => throw null; + void ServiceStack.Redis.Pipeline.IRedisQueueCompletableOperationAsync.CompleteLongQueuedCommandAsync(System.Func> longReadCommand) => throw null; + void ServiceStack.Redis.Pipeline.IRedisQueueCompletableOperationAsync.CompleteMultiBytesQueuedCommandAsync(System.Func> multiBytesReadCommand) => throw null; + void ServiceStack.Redis.Pipeline.IRedisQueueCompletableOperationAsync.CompleteMultiStringQueuedCommandAsync(System.Func>> multiStringReadCommand) => throw null; + void ServiceStack.Redis.Pipeline.IRedisQueueCompletableOperationAsync.CompleteRedisDataQueuedCommandAsync(System.Func> redisDataReadCommand) => throw null; + void ServiceStack.Redis.Pipeline.IRedisQueueCompletableOperationAsync.CompleteStringQueuedCommandAsync(System.Func> stringReadCommand) => throw null; + void ServiceStack.Redis.Pipeline.IRedisQueueCompletableOperationAsync.CompleteVoidQueuedCommandAsync(System.Func voidReadCommand) => throw null; + public virtual void Dispose() => throw null; + System.Threading.Tasks.ValueTask System.IAsyncDisposable.DisposeAsync() => throw null; + protected void Execute() => throw null; + protected System.Threading.Tasks.ValueTask ExecuteAsync() => throw null; + public void Flush() => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Pipeline.IRedisPipelineSharedAsync.FlushAsync(System.Threading.CancellationToken token) => throw null; + protected virtual void Init() => throw null; + void ServiceStack.Redis.Pipeline.IRedisQueueableOperationAsync.QueueCommand(System.Func command, System.Action onSuccessCallback, System.Action onErrorCallback) => throw null; + void ServiceStack.Redis.Pipeline.IRedisQueueableOperationAsync.QueueCommand(System.Func> command, System.Action onSuccessCallback, System.Action onErrorCallback) => throw null; + void ServiceStack.Redis.Pipeline.IRedisQueueableOperationAsync.QueueCommand(System.Func> command, System.Action onSuccessCallback, System.Action onErrorCallback) => throw null; + void ServiceStack.Redis.Pipeline.IRedisQueueableOperationAsync.QueueCommand(System.Func> command, System.Action onSuccessCallback, System.Action onErrorCallback) => throw null; + void ServiceStack.Redis.Pipeline.IRedisQueueableOperationAsync.QueueCommand(System.Func> command, System.Action onSuccessCallback, System.Action onErrorCallback) => throw null; + void ServiceStack.Redis.Pipeline.IRedisQueueableOperationAsync.QueueCommand(System.Func> command, System.Action onSuccessCallback, System.Action onErrorCallback) => throw null; + void ServiceStack.Redis.Pipeline.IRedisQueueableOperationAsync.QueueCommand(System.Func>> command, System.Action> onSuccessCallback, System.Action onErrorCallback) => throw null; + void ServiceStack.Redis.Pipeline.IRedisQueueableOperationAsync.QueueCommand(System.Func>> command, System.Action> onSuccessCallback, System.Action onErrorCallback) => throw null; + void ServiceStack.Redis.Pipeline.IRedisQueueableOperationAsync.QueueCommand(System.Func>> command, System.Action> onSuccessCallback, System.Action onErrorCallback) => throw null; + void ServiceStack.Redis.Pipeline.IRedisQueueableOperationAsync.QueueCommand(System.Func> command, System.Action onSuccessCallback, System.Action onErrorCallback) => throw null; + void ServiceStack.Redis.Pipeline.IRedisQueueableOperationAsync.QueueCommand(System.Func> command, System.Action onSuccessCallback, System.Action onErrorCallback) => throw null; + void ServiceStack.Redis.Pipeline.IRedisQueueableOperationAsync.QueueCommand(System.Func> command, System.Action onSuccessCallback, System.Action onErrorCallback) => throw null; + void ServiceStack.Redis.Pipeline.IRedisQueueableOperationAsync.QueueCommand(System.Func> command, System.Action onSuccessCallback, System.Action onErrorCallback) => throw null; + public RedisAllPurposePipeline(ServiceStack.Redis.RedisClient redisClient) : base(default(ServiceStack.Redis.RedisClient)) => throw null; + public virtual bool Replay() => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Pipeline.IRedisPipelineSharedAsync.ReplayAsync(System.Threading.CancellationToken token) => throw null; + } + + // Generated from `ServiceStack.Redis.RedisClient` in `ServiceStack.Redis, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class RedisClient : ServiceStack.Redis.RedisNativeClient, System.IDisposable, System.IAsyncDisposable, ServiceStack.Redis.IRedisClientAsync, ServiceStack.Redis.IRedisClient, ServiceStack.Data.IEntityStoreAsync, ServiceStack.Data.IEntityStore, ServiceStack.Caching.IRemoveByPatternAsync, ServiceStack.Caching.IRemoveByPattern, ServiceStack.Caching.ICacheClientExtended, ServiceStack.Caching.ICacheClientAsync, ServiceStack.Caching.ICacheClient + { + public System.IDisposable AcquireLock(string key, System.TimeSpan timeOut) => throw null; + public System.IDisposable AcquireLock(string key) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.AcquireLockAsync(string key, System.TimeSpan? timeOut, System.Threading.CancellationToken token) => throw null; + public bool Add(string key, T value, System.TimeSpan expiresIn) => throw null; + public bool Add(string key, T value, System.DateTime expiresAt) => throw null; + public bool Add(string key, T value) => throw null; + System.Threading.Tasks.Task ServiceStack.Caching.ICacheClientAsync.AddAsync(string key, T value, System.TimeSpan expiresIn, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.Task ServiceStack.Caching.ICacheClientAsync.AddAsync(string key, T value, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.Task ServiceStack.Caching.ICacheClientAsync.AddAsync(string key, T value, System.DateTime expiresAt, System.Threading.CancellationToken token) => throw null; + public System.Int64 AddGeoMember(string key, double longitude, double latitude, string member) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.AddGeoMemberAsync(string key, double longitude, double latitude, string member, System.Threading.CancellationToken token) => throw null; + public System.Int64 AddGeoMembers(string key, params ServiceStack.Redis.RedisGeo[] geoPoints) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.AddGeoMembersAsync(string key, params ServiceStack.Redis.RedisGeo[] geoPoints) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.AddGeoMembersAsync(string key, ServiceStack.Redis.RedisGeo[] geoPoints, System.Threading.CancellationToken token) => throw null; + public void AddItemToList(string listId, string value) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.AddItemToListAsync(string listId, string value, System.Threading.CancellationToken token) => throw null; + public void AddItemToSet(string setId, string item) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.AddItemToSetAsync(string setId, string item, System.Threading.CancellationToken token) => throw null; + public bool AddItemToSortedSet(string setId, string value, double score) => throw null; + public bool AddItemToSortedSet(string setId, string value, System.Int64 score) => throw null; + public bool AddItemToSortedSet(string setId, string value) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.AddItemToSortedSetAsync(string setId, string value, double score, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.AddItemToSortedSetAsync(string setId, string value, System.Threading.CancellationToken token) => throw null; + public void AddRangeToList(string listId, System.Collections.Generic.List values) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.AddRangeToListAsync(string listId, System.Collections.Generic.List values, System.Threading.CancellationToken token) => throw null; + public void AddRangeToSet(string setId, System.Collections.Generic.List items) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.AddRangeToSetAsync(string setId, System.Collections.Generic.List items, System.Threading.CancellationToken token) => throw null; + public bool AddRangeToSortedSet(string setId, System.Collections.Generic.List values, double score) => throw null; + public bool AddRangeToSortedSet(string setId, System.Collections.Generic.List values, System.Int64 score) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.AddRangeToSortedSetAsync(string setId, System.Collections.Generic.List values, double score, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.AddRangeToSortedSetAsync(string setId, System.Collections.Generic.List values, System.Int64 score, System.Threading.CancellationToken token) => throw null; + public bool AddToHyperLog(string key, params string[] elements) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.AddToHyperLogAsync(string key, string[] elements, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.AddToHyperLogAsync(string key, params string[] elements) => throw null; + public System.Int64 AppendToValue(string key, string value) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.AppendToValueAsync(string key, string value, System.Threading.CancellationToken token) => throw null; + public ServiceStack.Redis.Generic.IRedisTypedClient As() => throw null; + ServiceStack.Redis.Generic.IRedisTypedClientAsync ServiceStack.Redis.IRedisClientAsync.As() => throw null; + public ServiceStack.Redis.IRedisClientAsync AsAsync() => throw null; + public void AssertNotInTransaction() => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.BackgroundRewriteAppendOnlyFileAsync(System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.BackgroundSaveAsync(System.Threading.CancellationToken token) => throw null; + public string BlockingDequeueItemFromList(string listId, System.TimeSpan? timeOut) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.BlockingDequeueItemFromListAsync(string listId, System.TimeSpan? timeOut, System.Threading.CancellationToken token) => throw null; + public ServiceStack.Redis.ItemRef BlockingDequeueItemFromLists(string[] listIds, System.TimeSpan? timeOut) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.BlockingDequeueItemFromListsAsync(string[] listIds, System.TimeSpan? timeOut, System.Threading.CancellationToken token) => throw null; + public string BlockingPopAndPushItemBetweenLists(string fromListId, string toListId, System.TimeSpan? timeOut) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.BlockingPopAndPushItemBetweenListsAsync(string fromListId, string toListId, System.TimeSpan? timeOut, System.Threading.CancellationToken token) => throw null; + public string BlockingPopItemFromList(string listId, System.TimeSpan? timeOut) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.BlockingPopItemFromListAsync(string listId, System.TimeSpan? timeOut, System.Threading.CancellationToken token) => throw null; + public ServiceStack.Redis.ItemRef BlockingPopItemFromLists(string[] listIds, System.TimeSpan? timeOut) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.BlockingPopItemFromListsAsync(string[] listIds, System.TimeSpan? timeOut, System.Threading.CancellationToken token) => throw null; + public string BlockingRemoveStartFromList(string listId, System.TimeSpan? timeOut) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.BlockingRemoveStartFromListAsync(string listId, System.TimeSpan? timeOut, System.Threading.CancellationToken token) => throw null; + public ServiceStack.Redis.ItemRef BlockingRemoveStartFromLists(string[] listIds, System.TimeSpan? timeOut) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.BlockingRemoveStartFromListsAsync(string[] listIds, System.TimeSpan? timeOut, System.Threading.CancellationToken token) => throw null; + public double CalculateDistanceBetweenGeoMembers(string key, string fromMember, string toMember, string unit = default(string)) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.CalculateDistanceBetweenGeoMembersAsync(string key, string fromMember, string toMember, string unit, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.CalculateSha1Async(string luaBody, System.Threading.CancellationToken token) => throw null; + public ServiceStack.Redis.RedisClient CloneClient() => throw null; + public bool ContainsKey(string key) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.ContainsKeyAsync(string key, System.Threading.CancellationToken token) => throw null; + public static System.Func> ConvertToHashFn; + public System.DateTime ConvertToServerDate(System.DateTime expiresAt) => throw null; + public System.Int64 CountHyperLog(string key) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.CountHyperLogAsync(string key, System.Threading.CancellationToken token) => throw null; + public ServiceStack.Redis.Pipeline.IRedisPipeline CreatePipeline() => throw null; + ServiceStack.Redis.Pipeline.IRedisPipelineAsync ServiceStack.Redis.IRedisClientAsync.CreatePipeline() => throw null; + public override ServiceStack.Redis.IRedisSubscription CreateSubscription() => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.CreateSubscriptionAsync(System.Threading.CancellationToken token) => throw null; + public ServiceStack.Redis.IRedisTransaction CreateTransaction() => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.CreateTransactionAsync(System.Threading.CancellationToken token) => throw null; + public ServiceStack.Redis.RedisText Custom(params object[] cmdWithArgs) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.CustomAsync(params object[] cmdWithArgs) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.CustomAsync(object[] cmdWithArgs, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.DbSizeAsync(System.Threading.CancellationToken token) => throw null; + public System.Int64 Decrement(string key, System.UInt32 amount) => throw null; + System.Threading.Tasks.Task ServiceStack.Caching.ICacheClientAsync.DecrementAsync(string key, System.UInt32 amount, System.Threading.CancellationToken token) => throw null; + public System.Int64 DecrementValue(string key) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.DecrementValueAsync(string key, System.Threading.CancellationToken token) => throw null; + public System.Int64 DecrementValueBy(string key, int count) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.DecrementValueByAsync(string key, int count, System.Threading.CancellationToken token) => throw null; + public void Delete(T entity) => throw null; + public void DeleteAll() => throw null; + System.Threading.Tasks.Task ServiceStack.Data.IEntityStoreAsync.DeleteAllAsync(System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.Task ServiceStack.Data.IEntityStoreAsync.DeleteAsync(T entity, System.Threading.CancellationToken token) => throw null; + public void DeleteById(object id) => throw null; + System.Threading.Tasks.Task ServiceStack.Data.IEntityStoreAsync.DeleteByIdAsync(object id, System.Threading.CancellationToken token) => throw null; + public void DeleteByIds(System.Collections.ICollection ids) => throw null; + System.Threading.Tasks.Task ServiceStack.Data.IEntityStoreAsync.DeleteByIdsAsync(System.Collections.ICollection ids, System.Threading.CancellationToken token) => throw null; + public string DequeueItemFromList(string listId) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.DequeueItemFromListAsync(string listId, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask System.IAsyncDisposable.DisposeAsync() => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.EchoAsync(string text, System.Threading.CancellationToken token) => throw null; + public void EnqueueItemOnList(string listId, string value) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.EnqueueItemOnListAsync(string listId, string value, System.Threading.CancellationToken token) => throw null; + public void Exec(System.Action action) => throw null; + public T Exec(System.Func action) => throw null; + public T ExecCachedLua(string scriptBody, System.Func scriptSha1) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.ExecCachedLuaAsync(string scriptBody, System.Func> scriptSha1, System.Threading.CancellationToken token) => throw null; + public ServiceStack.Redis.RedisText ExecLua(string luaBody, string[] keys, string[] args) => throw null; + public ServiceStack.Redis.RedisText ExecLua(string body, params string[] args) => throw null; + public System.Int64 ExecLuaAsInt(string luaBody, string[] keys, string[] args) => throw null; + public System.Int64 ExecLuaAsInt(string body, params string[] args) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.ExecLuaAsIntAsync(string luaBody, params string[] args) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.ExecLuaAsIntAsync(string body, string[] keys, string[] args, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.ExecLuaAsIntAsync(string body, string[] args, System.Threading.CancellationToken token) => throw null; + public System.Collections.Generic.List ExecLuaAsList(string luaBody, string[] keys, string[] args) => throw null; + public System.Collections.Generic.List ExecLuaAsList(string body, params string[] args) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.IRedisClientAsync.ExecLuaAsListAsync(string luaBody, params string[] args) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.IRedisClientAsync.ExecLuaAsListAsync(string body, string[] keys, string[] args, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.IRedisClientAsync.ExecLuaAsListAsync(string body, string[] args, System.Threading.CancellationToken token) => throw null; + public string ExecLuaAsString(string sha1, string[] keys, string[] args) => throw null; + public string ExecLuaAsString(string body, params string[] args) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.ExecLuaAsStringAsync(string luaBody, string[] keys, string[] args, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.ExecLuaAsStringAsync(string luaBody, params string[] args) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.ExecLuaAsStringAsync(string body, string[] args, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.ExecLuaAsync(string luaBody, string[] keys, string[] args, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.ExecLuaAsync(string body, string[] args, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.ExecLuaAsync(string body, params string[] args) => throw null; + public ServiceStack.Redis.RedisText ExecLuaSha(string sha1, string[] keys, string[] args) => throw null; + public ServiceStack.Redis.RedisText ExecLuaSha(string sha1, params string[] args) => throw null; + public System.Int64 ExecLuaShaAsInt(string sha1, string[] keys, string[] args) => throw null; + public System.Int64 ExecLuaShaAsInt(string sha1, params string[] args) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.ExecLuaShaAsIntAsync(string sha1, string[] keys, string[] args, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.ExecLuaShaAsIntAsync(string sha1, string[] args, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.ExecLuaShaAsIntAsync(string sha1, params string[] args) => throw null; + public System.Collections.Generic.List ExecLuaShaAsList(string sha1, string[] keys, string[] args) => throw null; + public System.Collections.Generic.List ExecLuaShaAsList(string sha1, params string[] args) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.IRedisClientAsync.ExecLuaShaAsListAsync(string sha1, string[] keys, string[] args, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.IRedisClientAsync.ExecLuaShaAsListAsync(string sha1, string[] args, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.IRedisClientAsync.ExecLuaShaAsListAsync(string sha1, params string[] args) => throw null; + public string ExecLuaShaAsString(string sha1, string[] keys, string[] args) => throw null; + public string ExecLuaShaAsString(string sha1, params string[] args) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.ExecLuaShaAsStringAsync(string sha1, string[] keys, string[] args, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.ExecLuaShaAsStringAsync(string sha1, string[] args, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.ExecLuaShaAsStringAsync(string sha1, params string[] args) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.ExecLuaShaAsync(string sha1, string[] keys, string[] args, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.ExecLuaShaAsync(string sha1, string[] args, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.ExecLuaShaAsync(string sha1, params string[] args) => throw null; + public bool ExpireEntryAt(string key, System.DateTime expireAt) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.ExpireEntryAtAsync(string key, System.DateTime expireAt, System.Threading.CancellationToken token) => throw null; + public bool ExpireEntryIn(string key, System.TimeSpan expireIn) => throw null; + public bool ExpireEntryIn(System.Byte[] key, System.TimeSpan expireIn) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.ExpireEntryInAsync(string key, System.TimeSpan expireIn, System.Threading.CancellationToken token) => throw null; + public string[] FindGeoMembersInRadius(string key, string member, double radius, string unit) => throw null; + public string[] FindGeoMembersInRadius(string key, double longitude, double latitude, double radius, string unit) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.FindGeoMembersInRadiusAsync(string key, string member, double radius, string unit, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.FindGeoMembersInRadiusAsync(string key, double longitude, double latitude, double radius, string unit, System.Threading.CancellationToken token) => throw null; + public System.Collections.Generic.List FindGeoResultsInRadius(string key, string member, double radius, string unit, int? count = default(int?), bool? sortByNearest = default(bool?)) => throw null; + public System.Collections.Generic.List FindGeoResultsInRadius(string key, double longitude, double latitude, double radius, string unit, int? count = default(int?), bool? sortByNearest = default(bool?)) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.IRedisClientAsync.FindGeoResultsInRadiusAsync(string key, string member, double radius, string unit, int? count, bool? sortByNearest, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.IRedisClientAsync.FindGeoResultsInRadiusAsync(string key, double longitude, double latitude, double radius, string unit, int? count, bool? sortByNearest, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.Task ServiceStack.Caching.ICacheClientAsync.FlushAllAsync(System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.FlushDbAsync(System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.ForegroundSaveAsync(System.Threading.CancellationToken token) => throw null; + public T Get(string key) => throw null; + public System.Collections.Generic.IList GetAll() => throw null; + public System.Collections.Generic.IDictionary GetAll(System.Collections.Generic.IEnumerable keys) => throw null; + System.Threading.Tasks.Task> ServiceStack.Caching.ICacheClientAsync.GetAllAsync(System.Collections.Generic.IEnumerable keys, System.Threading.CancellationToken token) => throw null; + public System.Collections.Generic.Dictionary GetAllEntriesFromHash(string hashId) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.IRedisClientAsync.GetAllEntriesFromHashAsync(string hashId, System.Threading.CancellationToken token) => throw null; + public System.Collections.Generic.List GetAllItemsFromList(string listId) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.IRedisClientAsync.GetAllItemsFromListAsync(string listId, System.Threading.CancellationToken token) => throw null; + public System.Collections.Generic.HashSet GetAllItemsFromSet(string setId) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.IRedisClientAsync.GetAllItemsFromSetAsync(string setId, System.Threading.CancellationToken token) => throw null; + public System.Collections.Generic.List GetAllItemsFromSortedSet(string setId) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.IRedisClientAsync.GetAllItemsFromSortedSetAsync(string setId, System.Threading.CancellationToken token) => throw null; + public System.Collections.Generic.List GetAllItemsFromSortedSetDesc(string setId) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.IRedisClientAsync.GetAllItemsFromSortedSetDescAsync(string setId, System.Threading.CancellationToken token) => throw null; + public System.Collections.Generic.List GetAllKeys() => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.IRedisClientAsync.GetAllKeysAsync(System.Threading.CancellationToken token) => throw null; + public System.Collections.Generic.IDictionary GetAllWithScoresFromSortedSet(string setId) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.IRedisClientAsync.GetAllWithScoresFromSortedSetAsync(string setId, System.Threading.CancellationToken token) => throw null; + public string GetAndSetValue(string key, string value) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.GetAndSetValueAsync(string key, string value, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.Task ServiceStack.Caching.ICacheClientAsync.GetAsync(string key, System.Threading.CancellationToken token) => throw null; + public T GetById(object id) => throw null; + System.Threading.Tasks.Task ServiceStack.Data.IEntityStoreAsync.GetByIdAsync(object id, System.Threading.CancellationToken token) => throw null; + public System.Collections.Generic.IList GetByIds(System.Collections.ICollection ids) => throw null; + System.Threading.Tasks.Task> ServiceStack.Data.IEntityStoreAsync.GetByIdsAsync(System.Collections.ICollection ids, System.Threading.CancellationToken token) => throw null; + public string GetClient() => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.GetClientAsync(System.Threading.CancellationToken token) => throw null; + public System.Collections.Generic.List> GetClientsInfo() => throw null; + System.Threading.Tasks.ValueTask>> ServiceStack.Redis.IRedisClientAsync.GetClientsInfoAsync(System.Threading.CancellationToken token) => throw null; + public string GetConfig(string configItem) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.GetConfigAsync(string configItem, System.Threading.CancellationToken token) => throw null; + public System.Collections.Generic.HashSet GetDifferencesFromSet(string fromSetId, params string[] withSetIds) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.IRedisClientAsync.GetDifferencesFromSetAsync(string fromSetId, string[] withSetIds, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.IRedisClientAsync.GetDifferencesFromSetAsync(string fromSetId, params string[] withSetIds) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.GetEntryTypeAsync(string key, System.Threading.CancellationToken token) => throw null; + public T GetFromHash(object id) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.GetFromHashAsync(object id, System.Threading.CancellationToken token) => throw null; + public System.Collections.Generic.List GetGeoCoordinates(string key, params string[] members) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.IRedisClientAsync.GetGeoCoordinatesAsync(string key, string[] members, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.IRedisClientAsync.GetGeoCoordinatesAsync(string key, params string[] members) => throw null; + public string[] GetGeohashes(string key, params string[] members) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.GetGeohashesAsync(string key, string[] members, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.GetGeohashesAsync(string key, params string[] members) => throw null; + public System.Int64 GetHashCount(string hashId) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.GetHashCountAsync(string hashId, System.Threading.CancellationToken token) => throw null; + public System.Collections.Generic.List GetHashKeys(string hashId) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.IRedisClientAsync.GetHashKeysAsync(string hashId, System.Threading.CancellationToken token) => throw null; + public System.Collections.Generic.List GetHashValues(string hashId) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.IRedisClientAsync.GetHashValuesAsync(string hashId, System.Threading.CancellationToken token) => throw null; + public System.Collections.Generic.HashSet GetIntersectFromSets(params string[] setIds) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.IRedisClientAsync.GetIntersectFromSetsAsync(string[] setIds, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.IRedisClientAsync.GetIntersectFromSetsAsync(params string[] setIds) => throw null; + public string GetItemFromList(string listId, int listIndex) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.GetItemFromListAsync(string listId, int listIndex, System.Threading.CancellationToken token) => throw null; + public System.Int64 GetItemIndexInSortedSet(string setId, string value) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.GetItemIndexInSortedSetAsync(string setId, string value, System.Threading.CancellationToken token) => throw null; + public System.Int64 GetItemIndexInSortedSetDesc(string setId, string value) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.GetItemIndexInSortedSetDescAsync(string setId, string value, System.Threading.CancellationToken token) => throw null; + public double GetItemScoreInSortedSet(string setId, string value) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.GetItemScoreInSortedSetAsync(string setId, string value, System.Threading.CancellationToken token) => throw null; + public System.Collections.Generic.IEnumerable GetKeysByPattern(string pattern) => throw null; + System.Collections.Generic.IAsyncEnumerable ServiceStack.Caching.ICacheClientAsync.GetKeysByPatternAsync(string pattern, System.Threading.CancellationToken token) => throw null; + public static double GetLexicalScore(string value) => throw null; + public System.Int64 GetListCount(string listId) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.GetListCountAsync(string listId, System.Threading.CancellationToken token) => throw null; + public string GetRandomItemFromSet(string setId) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.GetRandomItemFromSetAsync(string setId, System.Threading.CancellationToken token) => throw null; + public string GetRandomKey() => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.GetRandomKeyAsync(System.Threading.CancellationToken token) => throw null; + public System.Collections.Generic.List GetRangeFromList(string listId, int startingFrom, int endingAt) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.IRedisClientAsync.GetRangeFromListAsync(string listId, int startingFrom, int endingAt, System.Threading.CancellationToken token) => throw null; + public System.Collections.Generic.List GetRangeFromSortedList(string listId, int startingFrom, int endingAt) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.IRedisClientAsync.GetRangeFromSortedListAsync(string listId, int startingFrom, int endingAt, System.Threading.CancellationToken token) => throw null; + public System.Collections.Generic.List GetRangeFromSortedSet(string setId, int fromRank, int toRank) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.IRedisClientAsync.GetRangeFromSortedSetAsync(string setId, int fromRank, int toRank, System.Threading.CancellationToken token) => throw null; + public System.Collections.Generic.List GetRangeFromSortedSetByHighestScore(string setId, string fromStringScore, string toStringScore, int? skip, int? take) => throw null; + public System.Collections.Generic.List GetRangeFromSortedSetByHighestScore(string setId, string fromStringScore, string toStringScore) => throw null; + public System.Collections.Generic.List GetRangeFromSortedSetByHighestScore(string setId, double fromScore, double toScore, int? skip, int? take) => throw null; + public System.Collections.Generic.List GetRangeFromSortedSetByHighestScore(string setId, double fromScore, double toScore) => throw null; + public System.Collections.Generic.List GetRangeFromSortedSetByHighestScore(string setId, System.Int64 fromScore, System.Int64 toScore, int? skip, int? take) => throw null; + public System.Collections.Generic.List GetRangeFromSortedSetByHighestScore(string setId, System.Int64 fromScore, System.Int64 toScore) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.IRedisClientAsync.GetRangeFromSortedSetByHighestScoreAsync(string setId, string fromStringScore, string toStringScore, int? skip, int? take, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.IRedisClientAsync.GetRangeFromSortedSetByHighestScoreAsync(string setId, string fromStringScore, string toStringScore, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.IRedisClientAsync.GetRangeFromSortedSetByHighestScoreAsync(string setId, double fromScore, double toScore, int? skip, int? take, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.IRedisClientAsync.GetRangeFromSortedSetByHighestScoreAsync(string setId, double fromScore, double toScore, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.IRedisClientAsync.GetRangeFromSortedSetByHighestScoreAsync(string setId, System.Int64 fromScore, System.Int64 toScore, int? skip, int? take, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.IRedisClientAsync.GetRangeFromSortedSetByHighestScoreAsync(string setId, System.Int64 fromScore, System.Int64 toScore, System.Threading.CancellationToken token) => throw null; + public System.Collections.Generic.List GetRangeFromSortedSetByLowestScore(string setId, string fromStringScore, string toStringScore, int? skip, int? take) => throw null; + public System.Collections.Generic.List GetRangeFromSortedSetByLowestScore(string setId, string fromStringScore, string toStringScore) => throw null; + public System.Collections.Generic.List GetRangeFromSortedSetByLowestScore(string setId, double fromScore, double toScore, int? skip, int? take) => throw null; + public System.Collections.Generic.List GetRangeFromSortedSetByLowestScore(string setId, double fromScore, double toScore) => throw null; + public System.Collections.Generic.List GetRangeFromSortedSetByLowestScore(string setId, System.Int64 fromScore, System.Int64 toScore, int? skip, int? take) => throw null; + public System.Collections.Generic.List GetRangeFromSortedSetByLowestScore(string setId, System.Int64 fromScore, System.Int64 toScore) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.IRedisClientAsync.GetRangeFromSortedSetByLowestScoreAsync(string setId, string fromStringScore, string toStringScore, int? skip, int? take, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.IRedisClientAsync.GetRangeFromSortedSetByLowestScoreAsync(string setId, string fromStringScore, string toStringScore, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.IRedisClientAsync.GetRangeFromSortedSetByLowestScoreAsync(string setId, double fromScore, double toScore, int? skip, int? take, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.IRedisClientAsync.GetRangeFromSortedSetByLowestScoreAsync(string setId, double fromScore, double toScore, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.IRedisClientAsync.GetRangeFromSortedSetByLowestScoreAsync(string setId, System.Int64 fromScore, System.Int64 toScore, int? skip, int? take, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.IRedisClientAsync.GetRangeFromSortedSetByLowestScoreAsync(string setId, System.Int64 fromScore, System.Int64 toScore, System.Threading.CancellationToken token) => throw null; + public System.Collections.Generic.List GetRangeFromSortedSetDesc(string setId, int fromRank, int toRank) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.IRedisClientAsync.GetRangeFromSortedSetDescAsync(string setId, int fromRank, int toRank, System.Threading.CancellationToken token) => throw null; + public System.Collections.Generic.IDictionary GetRangeWithScoresFromSortedSet(string setId, int fromRank, int toRank) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.IRedisClientAsync.GetRangeWithScoresFromSortedSetAsync(string setId, int fromRank, int toRank, System.Threading.CancellationToken token) => throw null; + public System.Collections.Generic.IDictionary GetRangeWithScoresFromSortedSetByHighestScore(string setId, string fromStringScore, string toStringScore, int? skip, int? take) => throw null; + public System.Collections.Generic.IDictionary GetRangeWithScoresFromSortedSetByHighestScore(string setId, string fromStringScore, string toStringScore) => throw null; + public System.Collections.Generic.IDictionary GetRangeWithScoresFromSortedSetByHighestScore(string setId, double fromScore, double toScore, int? skip, int? take) => throw null; + public System.Collections.Generic.IDictionary GetRangeWithScoresFromSortedSetByHighestScore(string setId, double fromScore, double toScore) => throw null; + public System.Collections.Generic.IDictionary GetRangeWithScoresFromSortedSetByHighestScore(string setId, System.Int64 fromScore, System.Int64 toScore, int? skip, int? take) => throw null; + public System.Collections.Generic.IDictionary GetRangeWithScoresFromSortedSetByHighestScore(string setId, System.Int64 fromScore, System.Int64 toScore) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.IRedisClientAsync.GetRangeWithScoresFromSortedSetByHighestScoreAsync(string setId, string fromStringScore, string toStringScore, int? skip, int? take, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.IRedisClientAsync.GetRangeWithScoresFromSortedSetByHighestScoreAsync(string setId, string fromStringScore, string toStringScore, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.IRedisClientAsync.GetRangeWithScoresFromSortedSetByHighestScoreAsync(string setId, double fromScore, double toScore, int? skip, int? take, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.IRedisClientAsync.GetRangeWithScoresFromSortedSetByHighestScoreAsync(string setId, double fromScore, double toScore, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.IRedisClientAsync.GetRangeWithScoresFromSortedSetByHighestScoreAsync(string setId, System.Int64 fromScore, System.Int64 toScore, int? skip, int? take, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.IRedisClientAsync.GetRangeWithScoresFromSortedSetByHighestScoreAsync(string setId, System.Int64 fromScore, System.Int64 toScore, System.Threading.CancellationToken token) => throw null; + public System.Collections.Generic.IDictionary GetRangeWithScoresFromSortedSetByLowestScore(string setId, string fromStringScore, string toStringScore, int? skip, int? take) => throw null; + public System.Collections.Generic.IDictionary GetRangeWithScoresFromSortedSetByLowestScore(string setId, string fromStringScore, string toStringScore) => throw null; + public System.Collections.Generic.IDictionary GetRangeWithScoresFromSortedSetByLowestScore(string setId, double fromScore, double toScore, int? skip, int? take) => throw null; + public System.Collections.Generic.IDictionary GetRangeWithScoresFromSortedSetByLowestScore(string setId, double fromScore, double toScore) => throw null; + public System.Collections.Generic.IDictionary GetRangeWithScoresFromSortedSetByLowestScore(string setId, System.Int64 fromScore, System.Int64 toScore, int? skip, int? take) => throw null; + public System.Collections.Generic.IDictionary GetRangeWithScoresFromSortedSetByLowestScore(string setId, System.Int64 fromScore, System.Int64 toScore) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.IRedisClientAsync.GetRangeWithScoresFromSortedSetByLowestScoreAsync(string setId, string fromStringScore, string toStringScore, int? skip, int? take, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.IRedisClientAsync.GetRangeWithScoresFromSortedSetByLowestScoreAsync(string setId, string fromStringScore, string toStringScore, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.IRedisClientAsync.GetRangeWithScoresFromSortedSetByLowestScoreAsync(string setId, double fromScore, double toScore, int? skip, int? take, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.IRedisClientAsync.GetRangeWithScoresFromSortedSetByLowestScoreAsync(string setId, double fromScore, double toScore, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.IRedisClientAsync.GetRangeWithScoresFromSortedSetByLowestScoreAsync(string setId, System.Int64 fromScore, System.Int64 toScore, int? skip, int? take, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.IRedisClientAsync.GetRangeWithScoresFromSortedSetByLowestScoreAsync(string setId, System.Int64 fromScore, System.Int64 toScore, System.Threading.CancellationToken token) => throw null; + public System.Collections.Generic.IDictionary GetRangeWithScoresFromSortedSetDesc(string setId, int fromRank, int toRank) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.IRedisClientAsync.GetRangeWithScoresFromSortedSetDescAsync(string setId, int fromRank, int toRank, System.Threading.CancellationToken token) => throw null; + public ServiceStack.Redis.RedisServerRole GetServerRole() => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.GetServerRoleAsync(System.Threading.CancellationToken token) => throw null; + public ServiceStack.Redis.RedisText GetServerRoleInfo() => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.GetServerRoleInfoAsync(System.Threading.CancellationToken token) => throw null; + public System.DateTime GetServerTime() => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.GetServerTimeAsync(System.Threading.CancellationToken token) => throw null; + public System.Int64 GetSetCount(string setId) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.GetSetCountAsync(string setId, System.Threading.CancellationToken token) => throw null; + public System.Collections.Generic.IEnumerable GetSlowlog(int? numberOfRecords = default(int?)) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.GetSlowlogAsync(int? numberOfRecords, System.Threading.CancellationToken token) => throw null; + public System.Collections.Generic.List GetSortedEntryValues(string setId, int startingFrom, int endingAt) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.IRedisClientAsync.GetSortedEntryValuesAsync(string setId, int startingFrom, int endingAt, System.Threading.CancellationToken token) => throw null; + public System.Collections.Generic.List GetSortedItemsFromList(string listId, ServiceStack.Redis.SortOptions sortOptions) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.IRedisClientAsync.GetSortedItemsFromListAsync(string listId, ServiceStack.Redis.SortOptions sortOptions, System.Threading.CancellationToken token) => throw null; + public System.Int64 GetSortedSetCount(string setId, string fromStringScore, string toStringScore) => throw null; + public System.Int64 GetSortedSetCount(string setId, double fromScore, double toScore) => throw null; + public System.Int64 GetSortedSetCount(string setId, System.Int64 fromScore, System.Int64 toScore) => throw null; + public System.Int64 GetSortedSetCount(string setId) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.GetSortedSetCountAsync(string setId, string fromStringScore, string toStringScore, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.GetSortedSetCountAsync(string setId, double fromScore, double toScore, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.GetSortedSetCountAsync(string setId, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.GetSortedSetCountAsync(string setId, System.Int64 fromScore, System.Int64 toScore, System.Threading.CancellationToken token) => throw null; + public System.Int64 GetStringCount(string key) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.GetStringCountAsync(string key, System.Threading.CancellationToken token) => throw null; + public System.TimeSpan? GetTimeToLive(string key) => throw null; + System.Threading.Tasks.Task ServiceStack.Caching.ICacheClientAsync.GetTimeToLiveAsync(string key, System.Threading.CancellationToken token) => throw null; + public string GetTypeIdsSetKey() => throw null; + public string GetTypeIdsSetKey(System.Type type) => throw null; + public string GetTypeSequenceKey() => throw null; + public System.Collections.Generic.HashSet GetUnionFromSets(params string[] setIds) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.IRedisClientAsync.GetUnionFromSetsAsync(string[] setIds, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.IRedisClientAsync.GetUnionFromSetsAsync(params string[] setIds) => throw null; + public string GetValue(string key) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.GetValueAsync(string key, System.Threading.CancellationToken token) => throw null; + public string GetValueFromHash(string hashId, string key) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.GetValueFromHashAsync(string hashId, string key, System.Threading.CancellationToken token) => throw null; + public System.Collections.Generic.List GetValues(System.Collections.Generic.List keys) => throw null; + public System.Collections.Generic.List GetValues(System.Collections.Generic.List keys) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.IRedisClientAsync.GetValuesAsync(System.Collections.Generic.List keys, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.IRedisClientAsync.GetValuesAsync(System.Collections.Generic.List keys, System.Threading.CancellationToken token) => throw null; + public System.Collections.Generic.List GetValuesFromHash(string hashId, params string[] keys) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.IRedisClientAsync.GetValuesFromHashAsync(string hashId, string[] keys, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.IRedisClientAsync.GetValuesFromHashAsync(string hashId, params string[] keys) => throw null; + public System.Collections.Generic.Dictionary GetValuesMap(System.Collections.Generic.List keys) => throw null; + public System.Collections.Generic.Dictionary GetValuesMap(System.Collections.Generic.List keys) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.IRedisClientAsync.GetValuesMapAsync(System.Collections.Generic.List keys, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.IRedisClientAsync.GetValuesMapAsync(System.Collections.Generic.List keys, System.Threading.CancellationToken token) => throw null; + public bool HasLuaScript(string sha1Ref) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.HasLuaScriptAsync(string sha1Ref, System.Threading.CancellationToken token) => throw null; + public bool HashContainsEntry(string hashId, string key) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.HashContainsEntryAsync(string hashId, string key, System.Threading.CancellationToken token) => throw null; + public ServiceStack.Model.IHasNamed Hashes { get => throw null; set => throw null; } + ServiceStack.Model.IHasNamed ServiceStack.Redis.IRedisClientAsync.Hashes { get => throw null; } + public System.Int64 Increment(string key, System.UInt32 amount) => throw null; + System.Threading.Tasks.Task ServiceStack.Caching.ICacheClientAsync.IncrementAsync(string key, System.UInt32 amount, System.Threading.CancellationToken token) => throw null; + public double IncrementItemInSortedSet(string setId, string value, double incrementBy) => throw null; + public double IncrementItemInSortedSet(string setId, string value, System.Int64 incrementBy) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.IncrementItemInSortedSetAsync(string setId, string value, double incrementBy, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.IncrementItemInSortedSetAsync(string setId, string value, System.Int64 incrementBy, System.Threading.CancellationToken token) => throw null; + public System.Int64 IncrementValue(string key) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.IncrementValueAsync(string key, System.Threading.CancellationToken token) => throw null; + public double IncrementValueBy(string key, double count) => throw null; + public System.Int64 IncrementValueBy(string key, int count) => throw null; + public System.Int64 IncrementValueBy(string key, System.Int64 count) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.IncrementValueByAsync(string key, double count, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.IncrementValueByAsync(string key, int count, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.IncrementValueByAsync(string key, System.Int64 count, System.Threading.CancellationToken token) => throw null; + public double IncrementValueInHash(string hashId, string key, double incrementBy) => throw null; + public System.Int64 IncrementValueInHash(string hashId, string key, int incrementBy) => throw null; + public System.Int64 IncrementValueInHash(string hashId, string key, System.Int64 incrementBy) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.IncrementValueInHashAsync(string hashId, string key, double incrementBy, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.IncrementValueInHashAsync(string hashId, string key, int incrementBy, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.IRedisClientAsync.InfoAsync(System.Threading.CancellationToken token) => throw null; + public void Init() => throw null; + public string this[string key] { get => throw null; set => throw null; } + public void KillClient(string address) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.KillClientAsync(string address, System.Threading.CancellationToken token) => throw null; + public System.Int64 KillClients(string fromAddress = default(string), string withId = default(string), ServiceStack.Redis.RedisClientType? ofType = default(ServiceStack.Redis.RedisClientType?), bool? skipMe = default(bool?)) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.KillClientsAsync(string fromAddress, string withId, ServiceStack.Redis.RedisClientType? ofType, bool? skipMe, System.Threading.CancellationToken token) => throw null; + public void KillRunningLuaScript() => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.KillRunningLuaScriptAsync(System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.LastSaveAsync(System.Threading.CancellationToken token) => throw null; + public ServiceStack.Model.IHasNamed Lists { get => throw null; set => throw null; } + ServiceStack.Model.IHasNamed ServiceStack.Redis.IRedisClientAsync.Lists { get => throw null; } + public string LoadLuaScript(string body) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.LoadLuaScriptAsync(string body, System.Threading.CancellationToken token) => throw null; + public void MergeHyperLogs(string toKey, params string[] fromKeys) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.MergeHyperLogsAsync(string toKey, string[] fromKeys, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.MergeHyperLogsAsync(string toKey, params string[] fromKeys) => throw null; + public void MoveBetweenSets(string fromSetId, string toSetId, string item) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.MoveBetweenSetsAsync(string fromSetId, string toSetId, string item, System.Threading.CancellationToken token) => throw null; + public static ServiceStack.Redis.RedisClient New() => throw null; + public static System.Func NewFactoryFn; + public override void OnConnected() => throw null; + public void PauseAllClients(System.TimeSpan duration) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.PauseAllClientsAsync(System.TimeSpan duration, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.PingAsync(System.Threading.CancellationToken token) => throw null; + public string PopAndPushItemBetweenLists(string fromListId, string toListId) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.PopAndPushItemBetweenListsAsync(string fromListId, string toListId, System.Threading.CancellationToken token) => throw null; + public string PopItemFromList(string listId) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.PopItemFromListAsync(string listId, System.Threading.CancellationToken token) => throw null; + public string PopItemFromSet(string setId) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.PopItemFromSetAsync(string setId, System.Threading.CancellationToken token) => throw null; + public string PopItemWithHighestScoreFromSortedSet(string setId) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.PopItemWithHighestScoreFromSortedSetAsync(string setId, System.Threading.CancellationToken token) => throw null; + public string PopItemWithLowestScoreFromSortedSet(string setId) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.PopItemWithLowestScoreFromSortedSetAsync(string setId, System.Threading.CancellationToken token) => throw null; + public System.Collections.Generic.List PopItemsFromSet(string setId, int count) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.IRedisClientAsync.PopItemsFromSetAsync(string setId, int count, System.Threading.CancellationToken token) => throw null; + public void PrependItemToList(string listId, string value) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.PrependItemToListAsync(string listId, string value, System.Threading.CancellationToken token) => throw null; + public void PrependRangeToList(string listId, System.Collections.Generic.List values) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.PrependRangeToListAsync(string listId, System.Collections.Generic.List values, System.Threading.CancellationToken token) => throw null; + public System.Int64 PublishMessage(string toChannel, string message) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.PublishMessageAsync(string toChannel, string message, System.Threading.CancellationToken token) => throw null; + public void PushItemToList(string listId, string value) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.PushItemToListAsync(string listId, string value, System.Threading.CancellationToken token) => throw null; + public RedisClient(string host, int port, string password = default(string), System.Int64 db = default(System.Int64)) => throw null; + public RedisClient(string host, int port) => throw null; + public RedisClient(string host) => throw null; + public RedisClient(System.Uri uri) => throw null; + public RedisClient(ServiceStack.Redis.RedisEndpoint config) => throw null; + public RedisClient() => throw null; + public bool Remove(string key) => throw null; + public bool Remove(System.Byte[] key) => throw null; + public void RemoveAll(System.Collections.Generic.IEnumerable keys) => throw null; + System.Threading.Tasks.Task ServiceStack.Caching.ICacheClientAsync.RemoveAllAsync(System.Collections.Generic.IEnumerable keys, System.Threading.CancellationToken token) => throw null; + public void RemoveAllFromList(string listId) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.RemoveAllFromListAsync(string listId, System.Threading.CancellationToken token) => throw null; + public void RemoveAllLuaScripts() => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.RemoveAllLuaScriptsAsync(System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.Task ServiceStack.Caching.ICacheClientAsync.RemoveAsync(string key, System.Threading.CancellationToken token) => throw null; + public void RemoveByPattern(string pattern) => throw null; + System.Threading.Tasks.Task ServiceStack.Caching.IRemoveByPatternAsync.RemoveByPatternAsync(string pattern, System.Threading.CancellationToken token) => throw null; + public void RemoveByRegex(string pattern) => throw null; + System.Threading.Tasks.Task ServiceStack.Caching.IRemoveByPatternAsync.RemoveByRegexAsync(string regex, System.Threading.CancellationToken token) => throw null; + public string RemoveEndFromList(string listId) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.RemoveEndFromListAsync(string listId, System.Threading.CancellationToken token) => throw null; + public bool RemoveEntry(params string[] keys) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.RemoveEntryAsync(string[] keys, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.RemoveEntryAsync(params string[] args) => throw null; + public bool RemoveEntryFromHash(string hashId, string key) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.RemoveEntryFromHashAsync(string hashId, string key, System.Threading.CancellationToken token) => throw null; + public void RemoveExpiredEntries() => throw null; + System.Threading.Tasks.Task ServiceStack.Caching.ICacheClientAsync.RemoveExpiredEntriesAsync(System.Threading.CancellationToken token) => throw null; + public System.Int64 RemoveItemFromList(string listId, string value, int noOfMatches) => throw null; + public System.Int64 RemoveItemFromList(string listId, string value) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.RemoveItemFromListAsync(string listId, string value, int noOfMatches, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.RemoveItemFromListAsync(string listId, string value, System.Threading.CancellationToken token) => throw null; + public void RemoveItemFromSet(string setId, string item) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.RemoveItemFromSetAsync(string setId, string item, System.Threading.CancellationToken token) => throw null; + public bool RemoveItemFromSortedSet(string setId, string value) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.RemoveItemFromSortedSetAsync(string setId, string value, System.Threading.CancellationToken token) => throw null; + public System.Int64 RemoveItemsFromSortedSet(string setId, System.Collections.Generic.List values) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.RemoveItemsFromSortedSetAsync(string setId, System.Collections.Generic.List values, System.Threading.CancellationToken token) => throw null; + public System.Int64 RemoveRangeFromSortedSet(string setId, int minRank, int maxRank) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.RemoveRangeFromSortedSetAsync(string setId, int minRank, int maxRank, System.Threading.CancellationToken token) => throw null; + public System.Int64 RemoveRangeFromSortedSetByScore(string setId, double fromScore, double toScore) => throw null; + public System.Int64 RemoveRangeFromSortedSetByScore(string setId, System.Int64 fromScore, System.Int64 toScore) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.RemoveRangeFromSortedSetByScoreAsync(string setId, double fromScore, double toScore, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.RemoveRangeFromSortedSetByScoreAsync(string setId, System.Int64 fromScore, System.Int64 toScore, System.Threading.CancellationToken token) => throw null; + public System.Int64 RemoveRangeFromSortedSetBySearch(string setId, string start = default(string), string end = default(string)) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.RemoveRangeFromSortedSetBySearchAsync(string setId, string start, string end, System.Threading.CancellationToken token) => throw null; + public string RemoveStartFromList(string listId) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.RemoveStartFromListAsync(string listId, System.Threading.CancellationToken token) => throw null; + public void RenameKey(string fromName, string toName) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.RenameKeyAsync(string fromName, string toName, System.Threading.CancellationToken token) => throw null; + public bool Replace(string key, T value, System.TimeSpan expiresIn) => throw null; + public bool Replace(string key, T value, System.DateTime expiresAt) => throw null; + public bool Replace(string key, T value) => throw null; + System.Threading.Tasks.Task ServiceStack.Caching.ICacheClientAsync.ReplaceAsync(string key, T value, System.TimeSpan expiresIn, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.Task ServiceStack.Caching.ICacheClientAsync.ReplaceAsync(string key, T value, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.Task ServiceStack.Caching.ICacheClientAsync.ReplaceAsync(string key, T value, System.DateTime expiresAt, System.Threading.CancellationToken token) => throw null; + public void ResetInfoStats() => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.ResetInfoStatsAsync(System.Threading.CancellationToken token) => throw null; + public void RewriteAppendOnlyFileAsync() => throw null; + public void SaveConfig() => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.SaveConfigAsync(System.Threading.CancellationToken token) => throw null; + public System.Collections.Generic.IEnumerable> ScanAllHashEntries(string hashId, string pattern = default(string), int pageSize = default(int)) => throw null; + System.Collections.Generic.IAsyncEnumerable> ServiceStack.Redis.IRedisClientAsync.ScanAllHashEntriesAsync(string hashId, string pattern, int pageSize, System.Threading.CancellationToken token) => throw null; + public System.Collections.Generic.IEnumerable ScanAllKeys(string pattern = default(string), int pageSize = default(int)) => throw null; + System.Collections.Generic.IAsyncEnumerable ServiceStack.Redis.IRedisClientAsync.ScanAllKeysAsync(string pattern, int pageSize, System.Threading.CancellationToken token) => throw null; + public System.Collections.Generic.IEnumerable ScanAllSetItems(string setId, string pattern = default(string), int pageSize = default(int)) => throw null; + System.Collections.Generic.IAsyncEnumerable ServiceStack.Redis.IRedisClientAsync.ScanAllSetItemsAsync(string setId, string pattern, int pageSize, System.Threading.CancellationToken token) => throw null; + public System.Collections.Generic.IEnumerable> ScanAllSortedSetItems(string setId, string pattern = default(string), int pageSize = default(int)) => throw null; + System.Collections.Generic.IAsyncEnumerable> ServiceStack.Redis.IRedisClientAsync.ScanAllSortedSetItemsAsync(string setId, string pattern, int pageSize, System.Threading.CancellationToken token) => throw null; + public System.Collections.Generic.List SearchKeys(string pattern) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.IRedisClientAsync.SearchKeysAsync(string pattern, System.Threading.CancellationToken token) => throw null; + public System.Collections.Generic.List SearchSortedSet(string setId, string start = default(string), string end = default(string), int? skip = default(int?), int? take = default(int?)) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.IRedisClientAsync.SearchSortedSetAsync(string setId, string start, string end, int? skip, int? take, System.Threading.CancellationToken token) => throw null; + public System.Int64 SearchSortedSetCount(string setId, string start = default(string), string end = default(string)) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.SearchSortedSetCountAsync(string setId, string start, string end, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.SelectAsync(System.Int64 db, System.Threading.CancellationToken token) => throw null; + public static System.Byte[] SerializeToUtf8Bytes(T value) => throw null; + public bool Set(string key, T value, System.TimeSpan expiresIn) => throw null; + public bool Set(string key, T value, System.DateTime expiresAt) => throw null; + public bool Set(string key, T value) => throw null; + public void SetAll(System.Collections.Generic.IDictionary values) => throw null; + public void SetAll(System.Collections.Generic.IEnumerable keys, System.Collections.Generic.IEnumerable values) => throw null; + public void SetAll(System.Collections.Generic.Dictionary map) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.SetAllAsync(System.Collections.Generic.IEnumerable keys, System.Collections.Generic.IEnumerable values, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.SetAllAsync(System.Collections.Generic.IDictionary map, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.Task ServiceStack.Caching.ICacheClientAsync.SetAllAsync(System.Collections.Generic.IDictionary values, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.Task ServiceStack.Caching.ICacheClientAsync.SetAsync(string key, T value, System.TimeSpan expiresIn, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.Task ServiceStack.Caching.ICacheClientAsync.SetAsync(string key, T value, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.Task ServiceStack.Caching.ICacheClientAsync.SetAsync(string key, T value, System.DateTime expiresAt, System.Threading.CancellationToken token) => throw null; + public void SetClient(string name) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.SetClientAsync(string name, System.Threading.CancellationToken token) => throw null; + public void SetConfig(string configItem, string value) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.SetConfigAsync(string configItem, string value, System.Threading.CancellationToken token) => throw null; + public bool SetContainsItem(string setId, string item) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.SetContainsItemAsync(string setId, string item, System.Threading.CancellationToken token) => throw null; + public bool SetEntryInHash(string hashId, string key, string value) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.SetEntryInHashAsync(string hashId, string key, string value, System.Threading.CancellationToken token) => throw null; + public bool SetEntryInHashIfNotExists(string hashId, string key, string value) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.SetEntryInHashIfNotExistsAsync(string hashId, string key, string value, System.Threading.CancellationToken token) => throw null; + public void SetItemInList(string listId, int listIndex, string value) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.SetItemInListAsync(string listId, int listIndex, string value, System.Threading.CancellationToken token) => throw null; + public void SetRangeInHash(string hashId, System.Collections.Generic.IEnumerable> keyValuePairs) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.SetRangeInHashAsync(string hashId, System.Collections.Generic.IEnumerable> keyValuePairs, System.Threading.CancellationToken token) => throw null; + public void SetValue(string key, string value, System.TimeSpan expireIn) => throw null; + public void SetValue(string key, string value) => throw null; + public bool SetValue(System.Byte[] key, System.Byte[] value, System.TimeSpan expireIn) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.SetValueAsync(string key, string value, System.TimeSpan expireIn, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.SetValueAsync(string key, string value, System.Threading.CancellationToken token) => throw null; + public bool SetValueIfExists(string key, string value, System.TimeSpan expireIn) => throw null; + public bool SetValueIfExists(string key, string value) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.SetValueIfExistsAsync(string key, string value, System.TimeSpan? expireIn, System.Threading.CancellationToken token) => throw null; + public bool SetValueIfNotExists(string key, string value, System.TimeSpan expireIn) => throw null; + public bool SetValueIfNotExists(string key, string value) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.SetValueIfNotExistsAsync(string key, string value, System.TimeSpan? expireIn, System.Threading.CancellationToken token) => throw null; + public void SetValues(System.Collections.Generic.Dictionary map) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.SetValuesAsync(System.Collections.Generic.IDictionary map, System.Threading.CancellationToken token) => throw null; + public ServiceStack.Model.IHasNamed Sets { get => throw null; set => throw null; } + ServiceStack.Model.IHasNamed ServiceStack.Redis.IRedisClientAsync.Sets { get => throw null; } + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.ShutdownAsync(System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.ShutdownNoSaveAsync(System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.SlowlogResetAsync(System.Threading.CancellationToken token) => throw null; + public bool SortedSetContainsItem(string setId, string value) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.SortedSetContainsItemAsync(string setId, string value, System.Threading.CancellationToken token) => throw null; + public ServiceStack.Model.IHasNamed SortedSets { get => throw null; set => throw null; } + ServiceStack.Model.IHasNamed ServiceStack.Redis.IRedisClientAsync.SortedSets { get => throw null; } + public T Store(T entity) => throw null; + public void StoreAll(System.Collections.Generic.IEnumerable entities) => throw null; + System.Threading.Tasks.Task ServiceStack.Data.IEntityStoreAsync.StoreAllAsync(System.Collections.Generic.IEnumerable entities, System.Threading.CancellationToken token) => throw null; + public void StoreAsHash(T entity) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.StoreAsHashAsync(T entity, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.Task ServiceStack.Data.IEntityStoreAsync.StoreAsync(T entity, System.Threading.CancellationToken token) => throw null; + public void StoreDifferencesFromSet(string intoSetId, string fromSetId, params string[] withSetIds) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.StoreDifferencesFromSetAsync(string intoSetId, string fromSetId, string[] withSetIds, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.StoreDifferencesFromSetAsync(string intoSetId, string fromSetId, params string[] withSetIds) => throw null; + public void StoreIntersectFromSets(string intoSetId, params string[] setIds) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.StoreIntersectFromSetsAsync(string intoSetId, string[] setIds, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.StoreIntersectFromSetsAsync(string intoSetId, params string[] setIds) => throw null; + public System.Int64 StoreIntersectFromSortedSets(string intoSetId, string[] setIds, string[] args) => throw null; + public System.Int64 StoreIntersectFromSortedSets(string intoSetId, params string[] setIds) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.StoreIntersectFromSortedSetsAsync(string intoSetId, string[] setIds, string[] args, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.StoreIntersectFromSortedSetsAsync(string intoSetId, string[] setIds, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.StoreIntersectFromSortedSetsAsync(string intoSetId, params string[] setIds) => throw null; + public object StoreObject(object entity) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.StoreObjectAsync(object entity, System.Threading.CancellationToken token) => throw null; + public void StoreUnionFromSets(string intoSetId, params string[] setIds) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.StoreUnionFromSetsAsync(string intoSetId, string[] setIds, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.StoreUnionFromSetsAsync(string intoSetId, params string[] setIds) => throw null; + public System.Int64 StoreUnionFromSortedSets(string intoSetId, string[] setIds, string[] args) => throw null; + public System.Int64 StoreUnionFromSortedSets(string intoSetId, params string[] setIds) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.StoreUnionFromSortedSetsAsync(string intoSetId, string[] setIds, string[] args, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.StoreUnionFromSortedSetsAsync(string intoSetId, string[] setIds, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.StoreUnionFromSortedSetsAsync(string intoSetId, params string[] setIds) => throw null; + public void TrimList(string listId, int keepStartingFrom, int keepEndingAt) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.TrimListAsync(string listId, int keepStartingFrom, int keepEndingAt, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.TypeAsync(string key, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.UnWatchAsync(System.Threading.CancellationToken token) => throw null; + public string UrnKey(object id) => throw null; + public string UrnKey(T value) => throw null; + public string UrnKey(System.Type type, object id) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.WatchAsync(string[] keys, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.WatchAsync(params string[] keys) => throw null; + public System.Collections.Generic.Dictionary WhichLuaScriptsExists(params string[] sha1Refs) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.IRedisClientAsync.WhichLuaScriptsExistsAsync(string[] sha1Refs, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.IRedisClientAsync.WhichLuaScriptsExistsAsync(params string[] sha1Refs) => throw null; + public void WriteAll(System.Collections.Generic.IEnumerable entities) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientAsync.WriteAllAsync(System.Collections.Generic.IEnumerable entities, System.Threading.CancellationToken token) => throw null; + } + + // Generated from `ServiceStack.Redis.RedisClientExtensions` in `ServiceStack.Redis, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class RedisClientExtensions + { + public static string GetHostString(this ServiceStack.Redis.RedisEndpoint config) => throw null; + public static string GetHostString(this ServiceStack.Redis.IRedisClient redis) => throw null; + } + + // Generated from `ServiceStack.Redis.RedisClientManagerCacheClient` in `ServiceStack.Redis, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class RedisClientManagerCacheClient : System.IDisposable, System.IAsyncDisposable, ServiceStack.Caching.IRemoveByPatternAsync, ServiceStack.Caching.IRemoveByPattern, ServiceStack.Caching.ICacheClientExtended, ServiceStack.Caching.ICacheClientAsync, ServiceStack.Caching.ICacheClient + { + public bool Add(string key, T value, System.TimeSpan expiresIn) => throw null; + public bool Add(string key, T value, System.DateTime expiresAt) => throw null; + public bool Add(string key, T value) => throw null; + System.Threading.Tasks.Task ServiceStack.Caching.ICacheClientAsync.AddAsync(string key, T value, System.TimeSpan expiresIn, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.Task ServiceStack.Caching.ICacheClientAsync.AddAsync(string key, T value, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.Task ServiceStack.Caching.ICacheClientAsync.AddAsync(string key, T value, System.DateTime expiresAt, System.Threading.CancellationToken token) => throw null; + public System.Int64 Decrement(string key, System.UInt32 amount) => throw null; + System.Threading.Tasks.Task ServiceStack.Caching.ICacheClientAsync.DecrementAsync(string key, System.UInt32 amount, System.Threading.CancellationToken token) => throw null; + public void Dispose() => throw null; + System.Threading.Tasks.ValueTask System.IAsyncDisposable.DisposeAsync() => throw null; + public void FlushAll() => throw null; + System.Threading.Tasks.Task ServiceStack.Caching.ICacheClientAsync.FlushAllAsync(System.Threading.CancellationToken token) => throw null; + public T Get(string key) => throw null; + public System.Collections.Generic.IDictionary GetAll(System.Collections.Generic.IEnumerable keys) => throw null; + System.Threading.Tasks.Task> ServiceStack.Caching.ICacheClientAsync.GetAllAsync(System.Collections.Generic.IEnumerable keys, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.Task ServiceStack.Caching.ICacheClientAsync.GetAsync(string key, System.Threading.CancellationToken token) => throw null; + public ServiceStack.Caching.ICacheClient GetClient() => throw null; + public System.Collections.Generic.IEnumerable GetKeysByPattern(string pattern) => throw null; + System.Collections.Generic.IAsyncEnumerable ServiceStack.Caching.ICacheClientAsync.GetKeysByPatternAsync(string pattern, System.Threading.CancellationToken token) => throw null; + public System.TimeSpan? GetTimeToLive(string key) => throw null; + System.Threading.Tasks.Task ServiceStack.Caching.ICacheClientAsync.GetTimeToLiveAsync(string key, System.Threading.CancellationToken token) => throw null; + public System.Int64 Increment(string key, System.UInt32 amount) => throw null; + System.Threading.Tasks.Task ServiceStack.Caching.ICacheClientAsync.IncrementAsync(string key, System.UInt32 amount, System.Threading.CancellationToken token) => throw null; + public bool ReadOnly { get => throw null; set => throw null; } + public RedisClientManagerCacheClient(ServiceStack.Redis.IRedisClientsManager redisManager) => throw null; + public bool Remove(string key) => throw null; + public void RemoveAll(System.Collections.Generic.IEnumerable keys) => throw null; + System.Threading.Tasks.Task ServiceStack.Caching.ICacheClientAsync.RemoveAllAsync(System.Collections.Generic.IEnumerable keys, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.Task ServiceStack.Caching.ICacheClientAsync.RemoveAsync(string key, System.Threading.CancellationToken token) => throw null; + public void RemoveByPattern(string pattern) => throw null; + System.Threading.Tasks.Task ServiceStack.Caching.IRemoveByPatternAsync.RemoveByPatternAsync(string pattern, System.Threading.CancellationToken token) => throw null; + public void RemoveByRegex(string pattern) => throw null; + System.Threading.Tasks.Task ServiceStack.Caching.IRemoveByPatternAsync.RemoveByRegexAsync(string regex, System.Threading.CancellationToken token) => throw null; + public void RemoveExpiredEntries() => throw null; + System.Threading.Tasks.Task ServiceStack.Caching.ICacheClientAsync.RemoveExpiredEntriesAsync(System.Threading.CancellationToken token) => throw null; + public bool Replace(string key, T value, System.TimeSpan expiresIn) => throw null; + public bool Replace(string key, T value, System.DateTime expiresAt) => throw null; + public bool Replace(string key, T value) => throw null; + System.Threading.Tasks.Task ServiceStack.Caching.ICacheClientAsync.ReplaceAsync(string key, T value, System.TimeSpan expiresIn, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.Task ServiceStack.Caching.ICacheClientAsync.ReplaceAsync(string key, T value, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.Task ServiceStack.Caching.ICacheClientAsync.ReplaceAsync(string key, T value, System.DateTime expiresAt, System.Threading.CancellationToken token) => throw null; + public bool Set(string key, T value, System.TimeSpan expiresIn) => throw null; + public bool Set(string key, T value, System.DateTime expiresAt) => throw null; + public bool Set(string key, T value) => throw null; + public void SetAll(System.Collections.Generic.IDictionary values) => throw null; + System.Threading.Tasks.Task ServiceStack.Caching.ICacheClientAsync.SetAllAsync(System.Collections.Generic.IDictionary values, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.Task ServiceStack.Caching.ICacheClientAsync.SetAsync(string key, T value, System.TimeSpan expiresIn, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.Task ServiceStack.Caching.ICacheClientAsync.SetAsync(string key, T value, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.Task ServiceStack.Caching.ICacheClientAsync.SetAsync(string key, T value, System.DateTime expiresAt, System.Threading.CancellationToken token) => throw null; + } + + // Generated from `ServiceStack.Redis.RedisClientManagerConfig` in `ServiceStack.Redis, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class RedisClientManagerConfig + { + public bool AutoStart { get => throw null; set => throw null; } + public System.Int64? DefaultDb { get => throw null; set => throw null; } + public int MaxReadPoolSize { get => throw null; set => throw null; } + public int MaxWritePoolSize { get => throw null; set => throw null; } + public RedisClientManagerConfig() => throw null; + } + + // Generated from `ServiceStack.Redis.RedisClientsManagerExtensions` in `ServiceStack.Redis, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class RedisClientsManagerExtensions + { + public static ServiceStack.Redis.IRedisPubSubServer CreatePubSubServer(this ServiceStack.Redis.IRedisClientsManager redisManager, string channel, System.Action onMessage = default(System.Action), System.Action onError = default(System.Action), System.Action onInit = default(System.Action), System.Action onStart = default(System.Action), System.Action onStop = default(System.Action)) => throw null; + public static void Exec(this ServiceStack.Redis.IRedisClientsManager redisManager, System.Action lambda) => throw null; + public static string Exec(this ServiceStack.Redis.IRedisClientsManager redisManager, System.Func lambda) => throw null; + public static int Exec(this ServiceStack.Redis.IRedisClientsManager redisManager, System.Func lambda) => throw null; + public static double Exec(this ServiceStack.Redis.IRedisClientsManager redisManager, System.Func lambda) => throw null; + public static bool Exec(this ServiceStack.Redis.IRedisClientsManager redisManager, System.Func lambda) => throw null; + public static System.Int64 Exec(this ServiceStack.Redis.IRedisClientsManager redisManager, System.Func lambda) => throw null; + public static void ExecAs(this ServiceStack.Redis.IRedisClientsManager redisManager, System.Action> lambda) => throw null; + public static T ExecAs(this ServiceStack.Redis.IRedisClientsManager redisManager, System.Func, T> lambda) => throw null; + public static System.Collections.Generic.List ExecAs(this ServiceStack.Redis.IRedisClientsManager redisManager, System.Func, System.Collections.Generic.List> lambda) => throw null; + public static System.Collections.Generic.IList ExecAs(this ServiceStack.Redis.IRedisClientsManager redisManager, System.Func, System.Collections.Generic.IList> lambda) => throw null; + public static System.Threading.Tasks.ValueTask ExecAsAsync(this ServiceStack.Redis.IRedisClientsManager redisManager, System.Func, System.Threading.Tasks.ValueTask> lambda) => throw null; + public static System.Threading.Tasks.ValueTask> ExecAsAsync(this ServiceStack.Redis.IRedisClientsManager redisManager, System.Func, System.Threading.Tasks.ValueTask>> lambda) => throw null; + public static System.Threading.Tasks.ValueTask> ExecAsAsync(this ServiceStack.Redis.IRedisClientsManager redisManager, System.Func, System.Threading.Tasks.ValueTask>> lambda) => throw null; + public static System.Threading.Tasks.ValueTask ExecAsAsync(this ServiceStack.Redis.IRedisClientsManager redisManager, System.Func, System.Threading.Tasks.ValueTask> lambda) => throw null; + public static System.Threading.Tasks.ValueTask ExecAsync(this ServiceStack.Redis.IRedisClientsManager redisManager, System.Func> lambda) => throw null; + public static System.Threading.Tasks.ValueTask ExecAsync(this ServiceStack.Redis.IRedisClientsManager redisManager, System.Func lambda) => throw null; + public static void ExecTrans(this ServiceStack.Redis.IRedisClientsManager redisManager, System.Action lambda) => throw null; + public static System.Threading.Tasks.ValueTask GetCacheClientAsync(this ServiceStack.Redis.IRedisClientsManager redisManager, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.ValueTask GetClientAsync(this ServiceStack.Redis.IRedisClientsManager redisManager, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.ValueTask GetReadOnlyCacheClientAsync(this ServiceStack.Redis.IRedisClientsManager redisManager, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.ValueTask GetReadOnlyClientAsync(this ServiceStack.Redis.IRedisClientsManager redisManager, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + } + + // Generated from `ServiceStack.Redis.RedisCommandQueue` in `ServiceStack.Redis, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class RedisCommandQueue : ServiceStack.Redis.RedisQueueCompletableOperation + { + public void QueueCommand(System.Func command, System.Action onSuccessCallback) => throw null; + public void QueueCommand(System.Func command) => throw null; + public void QueueCommand(System.Func command, System.Action onSuccessCallback) => throw null; + public void QueueCommand(System.Func command) => throw null; + public void QueueCommand(System.Func command, System.Action onSuccessCallback) => throw null; + public void QueueCommand(System.Func command) => throw null; + public void QueueCommand(System.Func command, System.Action onSuccessCallback) => throw null; + public void QueueCommand(System.Func command) => throw null; + public void QueueCommand(System.Func command, System.Action onSuccessCallback) => throw null; + public void QueueCommand(System.Func command) => throw null; + public void QueueCommand(System.Func> command, System.Action> onSuccessCallback) => throw null; + public void QueueCommand(System.Func> command) => throw null; + public void QueueCommand(System.Func> command, System.Action> onSuccessCallback) => throw null; + public void QueueCommand(System.Func> command) => throw null; + public void QueueCommand(System.Func> command, System.Action> onSuccessCallback, System.Action onErrorCallback) => throw null; + public void QueueCommand(System.Func> command, System.Action> onSuccessCallback) => throw null; + public void QueueCommand(System.Func> command) => throw null; + public void QueueCommand(System.Func command, System.Action onSuccessCallback) => throw null; + public void QueueCommand(System.Func command) => throw null; + public void QueueCommand(System.Func command, System.Action onSuccessCallback) => throw null; + public void QueueCommand(System.Func command) => throw null; + public void QueueCommand(System.Func command, System.Action onSuccessCallback, System.Action onErrorCallback) => throw null; + public void QueueCommand(System.Func command, System.Action onSuccessCallback) => throw null; + public void QueueCommand(System.Func command) => throw null; + public void QueueCommand(System.Func command, System.Action onSuccessCallback, System.Action onErrorCallback) => throw null; + public void QueueCommand(System.Func command, System.Action onSuccessCallback) => throw null; + public void QueueCommand(System.Func command) => throw null; + public void QueueCommand(System.Action command, System.Action onSuccessCallback) => throw null; + public void QueueCommand(System.Action command) => throw null; + public virtual void QueueCommand(System.Func command, System.Action onSuccessCallback, System.Action onErrorCallback) => throw null; + public virtual void QueueCommand(System.Func command, System.Action onSuccessCallback, System.Action onErrorCallback) => throw null; + public virtual void QueueCommand(System.Func command, System.Action onSuccessCallback, System.Action onErrorCallback) => throw null; + public virtual void QueueCommand(System.Func command, System.Action onSuccessCallback, System.Action onErrorCallback) => throw null; + public virtual void QueueCommand(System.Func command, System.Action onSuccessCallback, System.Action onErrorCallback) => throw null; + public virtual void QueueCommand(System.Func> command, System.Action> onSuccessCallback, System.Action onErrorCallback) => throw null; + public virtual void QueueCommand(System.Func> command, System.Action> onSuccessCallback, System.Action onErrorCallback) => throw null; + public virtual void QueueCommand(System.Func command, System.Action onSuccessCallback, System.Action onErrorCallback) => throw null; + public virtual void QueueCommand(System.Func command, System.Action onSuccessCallback, System.Action onErrorCallback) => throw null; + public virtual void QueueCommand(System.Action command, System.Action onSuccessCallback, System.Action onErrorCallback) => throw null; + protected ServiceStack.Redis.RedisClient RedisClient; + public RedisCommandQueue(ServiceStack.Redis.RedisClient redisClient) => throw null; + } + + // Generated from `ServiceStack.Redis.RedisConfig` in `ServiceStack.Redis, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class RedisConfig + { + public static bool AssertAccessOnlyOnSameThread; + public static int? AssumeServerVersion; + public static int BackOffMultiplier; + public static int BufferLength { get => throw null; } + public static int BufferPoolMaxSize; + public static System.Net.Security.LocalCertificateSelectionCallback CertificateSelectionCallback { get => throw null; set => throw null; } + public static System.Net.Security.RemoteCertificateValidationCallback CertificateValidationCallback { get => throw null; set => throw null; } + public static System.Func ClientFactory; + public static System.TimeSpan DeactivatedClientsExpiry; + public static int DefaultConnectTimeout; + public const System.Int64 DefaultDb = default; + public const string DefaultHost = default; + public static int DefaultIdleTimeOutSecs; + public static int? DefaultMaxPoolSize; + public static int DefaultPoolSizeMultiplier; + public const int DefaultPort = default; + public const int DefaultPortSentinel = default; + public const int DefaultPortSsl = default; + public static int DefaultReceiveTimeout; + public static int DefaultRetryTimeout; + public static int DefaultSendTimeout; + public static bool DisableVerboseLogging { get => throw null; set => throw null; } + public static bool EnableVerboseLogging; + public static int HostLookupTimeoutMs; + public RedisConfig() => throw null; + public static void Reset() => throw null; + public static bool RetryReconnectOnFailedMasters; + public static bool VerifyMasterConnections; + } + + // Generated from `ServiceStack.Redis.RedisDataExtensions` in `ServiceStack.Redis, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class RedisDataExtensions + { + public static string GetResult(this ServiceStack.Redis.RedisText from) => throw null; + public static T GetResult(this ServiceStack.Redis.RedisText from) => throw null; + public static System.Collections.Generic.List GetResults(this ServiceStack.Redis.RedisText from) => throw null; + public static System.Collections.Generic.List GetResults(this ServiceStack.Redis.RedisText from) => throw null; + public static double ToDouble(this ServiceStack.Redis.RedisData data) => throw null; + public static System.Int64 ToInt64(this ServiceStack.Redis.RedisData data) => throw null; + public static ServiceStack.Redis.RedisText ToRedisText(this ServiceStack.Redis.RedisData data) => throw null; + } + + // Generated from `ServiceStack.Redis.RedisDataInfoExtensions` in `ServiceStack.Redis, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class RedisDataInfoExtensions + { + public static string ToJsonInfo(this ServiceStack.Redis.RedisText redisText) => throw null; + } + + // Generated from `ServiceStack.Redis.RedisEndpoint` in `ServiceStack.Redis, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class RedisEndpoint : ServiceStack.IO.IEndpoint + { + public string Client { get => throw null; set => throw null; } + public int ConnectTimeout { get => throw null; set => throw null; } + public System.Int64 Db { get => throw null; set => throw null; } + public override bool Equals(object obj) => throw null; + protected bool Equals(ServiceStack.Redis.RedisEndpoint other) => throw null; + public override int GetHashCode() => throw null; + public string Host { get => throw null; set => throw null; } + public int IdleTimeOutSecs { get => throw null; set => throw null; } + public string NamespacePrefix { get => throw null; set => throw null; } + public string Password { get => throw null; set => throw null; } + public int Port { get => throw null; set => throw null; } + public int ReceiveTimeout { get => throw null; set => throw null; } + public RedisEndpoint(string host, int port, string password = default(string), System.Int64 db = default(System.Int64)) => throw null; + public RedisEndpoint() => throw null; + public bool RequiresAuth { get => throw null; } + public int RetryTimeout { get => throw null; set => throw null; } + public int SendTimeout { get => throw null; set => throw null; } + public bool Ssl { get => throw null; set => throw null; } + public System.Security.Authentication.SslProtocols? SslProtocols { get => throw null; set => throw null; } + public override string ToString() => throw null; + } + + // Generated from `ServiceStack.Redis.RedisException` in `ServiceStack.Redis, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class RedisException : System.Exception + { + public RedisException(string message, System.Exception innerException) => throw null; + public RedisException(string message) => throw null; + } + + // Generated from `ServiceStack.Redis.RedisExtensions` in `ServiceStack.Redis, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class RedisExtensions + { + public static System.Collections.Generic.List ToRedisEndPoints(this System.Collections.Generic.IEnumerable hosts) => throw null; + public static ServiceStack.Redis.RedisEndpoint ToRedisEndpoint(this string connectionString, int? defaultPort = default(int?)) => throw null; + } + + // Generated from `ServiceStack.Redis.RedisLock` in `ServiceStack.Redis, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class RedisLock : System.IDisposable, System.IAsyncDisposable + { + public void Dispose() => throw null; + System.Threading.Tasks.ValueTask System.IAsyncDisposable.DisposeAsync() => throw null; + public RedisLock(ServiceStack.Redis.IRedisClient redisClient, string key, System.TimeSpan? timeOut) => throw null; + } + + // Generated from `ServiceStack.Redis.RedisManagerPool` in `ServiceStack.Redis, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class RedisManagerPool : System.IDisposable, System.IAsyncDisposable, ServiceStack.Redis.IRedisFailover, ServiceStack.Redis.IRedisClientsManagerAsync, ServiceStack.Redis.IRedisClientsManager, ServiceStack.Redis.IRedisClientCacheManager, ServiceStack.Redis.IHasRedisResolver, ServiceStack.Redis.IHandleClientDispose + { + public bool AssertAccessOnlyOnSameThread { get => throw null; set => throw null; } + public System.Func ClientFactory { get => throw null; set => throw null; } + public System.Action ConnectionFilter { get => throw null; set => throw null; } + public void Dispose() => throw null; + protected void Dispose(ServiceStack.Redis.RedisClient redisClient) => throw null; + protected virtual void Dispose(bool disposing) => throw null; + System.Threading.Tasks.ValueTask System.IAsyncDisposable.DisposeAsync() => throw null; + public void DisposeClient(ServiceStack.Redis.RedisNativeClient client) => throw null; + public void DisposeWriteClient(ServiceStack.Redis.RedisNativeClient client) => throw null; + public void FailoverTo(params string[] readWriteHosts) => throw null; + public void FailoverTo(System.Collections.Generic.IEnumerable readWriteHosts, System.Collections.Generic.IEnumerable readOnlyHosts) => throw null; + public ServiceStack.Caching.ICacheClient GetCacheClient() => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientsManagerAsync.GetCacheClientAsync(System.Threading.CancellationToken token) => throw null; + public ServiceStack.Redis.IRedisClient GetClient() => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientsManagerAsync.GetClientAsync(System.Threading.CancellationToken token) => throw null; + public int[] GetClientPoolActiveStates() => throw null; + public ServiceStack.Caching.ICacheClient GetReadOnlyCacheClient() => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientsManagerAsync.GetReadOnlyCacheClientAsync(System.Threading.CancellationToken token) => throw null; + public ServiceStack.Redis.IRedisClient GetReadOnlyClient() => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisClientsManagerAsync.GetReadOnlyClientAsync(System.Threading.CancellationToken token) => throw null; + public System.Collections.Generic.Dictionary GetStats() => throw null; + public int MaxPoolSize { get => throw null; set => throw null; } + public System.Collections.Generic.List> OnFailover { get => throw null; set => throw null; } + public int RecheckPoolAfterMs; + protected int RedisClientCounter; + public RedisManagerPool(string host, ServiceStack.Redis.RedisPoolConfig config) => throw null; + public RedisManagerPool(string host) => throw null; + public RedisManagerPool(System.Collections.Generic.IEnumerable hosts, ServiceStack.Redis.RedisPoolConfig config) => throw null; + public RedisManagerPool(System.Collections.Generic.IEnumerable hosts) => throw null; + public RedisManagerPool() => throw null; + public ServiceStack.Redis.IRedisResolver RedisResolver { get => throw null; set => throw null; } + protected int poolIndex; + // ERR: Stub generator didn't handle member: ~RedisManagerPool + } + + // Generated from `ServiceStack.Redis.RedisNativeClient` in `ServiceStack.Redis, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class RedisNativeClient : System.IDisposable, System.IAsyncDisposable, ServiceStack.Redis.IRedisNativeClientAsync, ServiceStack.Redis.IRedisNativeClient + { + public System.Int64 Append(string key, System.Byte[] value) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.AppendAsync(string key, System.Byte[] value, System.Threading.CancellationToken token) => throw null; + public int AssertServerVersionNumber() => throw null; + public System.Byte[][] BLPop(string[] listIds, int timeOutSecs) => throw null; + public System.Byte[][] BLPop(string listId, int timeOutSecs) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.BLPopAsync(string[] listIds, int timeOutSecs, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.BLPopAsync(string listId, int timeOutSecs, System.Threading.CancellationToken token) => throw null; + public System.Byte[][] BLPopValue(string[] listIds, int timeOutSecs) => throw null; + public System.Byte[] BLPopValue(string listId, int timeOutSecs) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.BLPopValueAsync(string[] listIds, int timeOutSecs, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.BLPopValueAsync(string listId, int timeOutSecs, System.Threading.CancellationToken token) => throw null; + public System.Byte[][] BRPop(string[] listIds, int timeOutSecs) => throw null; + public System.Byte[][] BRPop(string listId, int timeOutSecs) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.BRPopAsync(string[] listIds, int timeOutSecs, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.BRPopAsync(string listId, int timeOutSecs, System.Threading.CancellationToken token) => throw null; + public System.Byte[] BRPopLPush(string fromListId, string toListId, int timeOutSecs) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.BRPopLPushAsync(string fromListId, string toListId, int timeOutSecs, System.Threading.CancellationToken token) => throw null; + public System.Byte[][] BRPopValue(string[] listIds, int timeOutSecs) => throw null; + public System.Byte[] BRPopValue(string listId, int timeOutSecs) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.BRPopValueAsync(string[] listIds, int timeOutSecs, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.BRPopValueAsync(string listId, int timeOutSecs, System.Threading.CancellationToken token) => throw null; + public void BgRewriteAof() => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.BgRewriteAofAsync(System.Threading.CancellationToken token) => throw null; + public void BgSave() => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.BgSaveAsync(System.Threading.CancellationToken token) => throw null; + public System.Int64 BitCount(string key) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.BitCountAsync(string key, System.Threading.CancellationToken token) => throw null; + protected System.IO.BufferedStream Bstream; + public string CalculateSha1(string luaBody) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.CalculateSha1Async(string luaBody, System.Threading.CancellationToken token) => throw null; + public void ChangeDb(System.Int64 db) => throw null; + public string Client { get => throw null; set => throw null; } + public string ClientGetName() => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.ClientGetNameAsync(System.Threading.CancellationToken token) => throw null; + public System.Int64 ClientId { get => throw null; } + public void ClientKill(string clientAddr) => throw null; + public System.Int64 ClientKill(string addr = default(string), string id = default(string), string type = default(string), string skipMe = default(string)) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.ClientKillAsync(string addr, string id, string type, string skipMe, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.ClientKillAsync(string clientAddr, System.Threading.CancellationToken token) => throw null; + public System.Byte[] ClientList() => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.ClientListAsync(System.Threading.CancellationToken token) => throw null; + public void ClientPause(int timeOutMs) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.ClientPauseAsync(int timeOutMs, System.Threading.CancellationToken token) => throw null; + public void ClientSetName(string name) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.ClientSetNameAsync(string name, System.Threading.CancellationToken token) => throw null; + protected void CmdLog(System.Byte[][] args) => throw null; + public System.Byte[][] ConfigGet(string pattern) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.ConfigGetAsync(string pattern, System.Threading.CancellationToken token) => throw null; + public void ConfigResetStat() => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.ConfigResetStatAsync(System.Threading.CancellationToken token) => throw null; + public void ConfigRewrite() => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.ConfigRewriteAsync(System.Threading.CancellationToken token) => throw null; + public void ConfigSet(string item, System.Byte[] value) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.ConfigSetAsync(string item, System.Byte[] value, System.Threading.CancellationToken token) => throw null; + public int ConnectTimeout { get => throw null; set => throw null; } + public System.Action ConnectionFilter { get => throw null; set => throw null; } + protected System.Byte[][] ConvertToBytes(string[] keys) => throw null; + public ServiceStack.Redis.Pipeline.RedisPipelineCommand CreatePipelineCommand() => throw null; + public virtual ServiceStack.Redis.IRedisSubscription CreateSubscription() => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.CreateSubscriptionAsync(System.Threading.CancellationToken token) => throw null; + public System.Int64 Db { get => throw null; set => throw null; } + public System.Int64 DbSize { get => throw null; } + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.DbSizeAsync(System.Threading.CancellationToken token) => throw null; + public System.DateTime? DeactivatedAt { get => throw null; set => throw null; } + public void DebugSegfault() => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.DebugSegfaultAsync(System.Threading.CancellationToken token) => throw null; + public void DebugSleep(double durationSecs) => throw null; + public System.Int64 Decr(string key) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.DecrAsync(string key, System.Threading.CancellationToken token) => throw null; + public System.Int64 DecrBy(string key, int count) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.DecrByAsync(string key, System.Int64 count, System.Threading.CancellationToken token) => throw null; + public System.Int64 Del(string key) => throw null; + public System.Int64 Del(params string[] keys) => throw null; + public System.Int64 Del(System.Byte[] key) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.DelAsync(string[] keys, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.DelAsync(string key, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.DelAsync(params string[] keys) => throw null; + public virtual void Dispose() => throw null; + protected virtual void Dispose(bool disposing) => throw null; + System.Threading.Tasks.ValueTask System.IAsyncDisposable.DisposeAsync() => throw null; + public static void DisposeTimers() => throw null; + public System.Byte[] Dump(string key) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.DumpAsync(string key, System.Threading.CancellationToken token) => throw null; + public string Echo(string text) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.EchoAsync(string text, System.Threading.CancellationToken token) => throw null; + public static string ErrorConnect; + public System.Byte[][] Eval(string luaBody, int numberKeysInArgs, params System.Byte[][] keys) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.EvalAsync(string luaBody, int numberOfKeys, params System.Byte[][] keysAndArgs) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.EvalAsync(string luaBody, int numberOfKeys, System.Byte[][] keysAndArgs, System.Threading.CancellationToken token) => throw null; + public ServiceStack.Redis.RedisData EvalCommand(string luaBody, int numberKeysInArgs, params System.Byte[][] keys) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.EvalCommandAsync(string luaBody, int numberKeysInArgs, params System.Byte[][] keys) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.EvalCommandAsync(string luaBody, int numberKeysInArgs, System.Byte[][] keys, System.Threading.CancellationToken token) => throw null; + public System.Int64 EvalInt(string luaBody, int numberKeysInArgs, params System.Byte[][] keys) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.EvalIntAsync(string luaBody, int numberOfKeys, params System.Byte[][] keysAndArgs) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.EvalIntAsync(string luaBody, int numberOfKeys, System.Byte[][] keysAndArgs, System.Threading.CancellationToken token) => throw null; + public System.Byte[][] EvalSha(string sha1, int numberKeysInArgs, params System.Byte[][] keys) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.EvalShaAsync(string sha1, int numberOfKeys, params System.Byte[][] keysAndArgs) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.EvalShaAsync(string sha1, int numberOfKeys, System.Byte[][] keysAndArgs, System.Threading.CancellationToken token) => throw null; + public ServiceStack.Redis.RedisData EvalShaCommand(string sha1, int numberKeysInArgs, params System.Byte[][] keys) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.EvalShaCommandAsync(string sha1, int numberKeysInArgs, params System.Byte[][] keys) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.EvalShaCommandAsync(string sha1, int numberKeysInArgs, System.Byte[][] keys, System.Threading.CancellationToken token) => throw null; + public System.Int64 EvalShaInt(string sha1, int numberKeysInArgs, params System.Byte[][] keys) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.EvalShaIntAsync(string sha1, int numberOfKeys, params System.Byte[][] keysAndArgs) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.EvalShaIntAsync(string sha1, int numberOfKeys, System.Byte[][] keysAndArgs, System.Threading.CancellationToken token) => throw null; + public string EvalShaStr(string sha1, int numberKeysInArgs, params System.Byte[][] keys) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.EvalShaStrAsync(string sha1, int numberOfKeys, params System.Byte[][] keysAndArgs) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.EvalShaStrAsync(string sha1, int numberOfKeys, System.Byte[][] keysAndArgs, System.Threading.CancellationToken token) => throw null; + public string EvalStr(string luaBody, int numberKeysInArgs, params System.Byte[][] keys) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.EvalStrAsync(string luaBody, int numberOfKeys, params System.Byte[][] keysAndArgs) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.EvalStrAsync(string luaBody, int numberOfKeys, System.Byte[][] keysAndArgs, System.Threading.CancellationToken token) => throw null; + public System.Int64 Exists(string key) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.ExistsAsync(string key, System.Threading.CancellationToken token) => throw null; + protected void ExpectSuccess() => throw null; + protected System.Int64 ExpectSuccessFn() => throw null; + public bool Expire(string key, int seconds) => throw null; + public bool Expire(System.Byte[] key, int seconds) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.ExpireAsync(string key, int seconds, System.Threading.CancellationToken token) => throw null; + public bool ExpireAt(string key, System.Int64 unixTime) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.ExpireAtAsync(string key, System.Int64 unixTime, System.Threading.CancellationToken token) => throw null; + public void FlushAll() => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.FlushAllAsync(System.Threading.CancellationToken token) => throw null; + public void FlushDb() => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.FlushDbAsync(System.Threading.CancellationToken token) => throw null; + public System.Int64 GeoAdd(string key, params ServiceStack.Redis.RedisGeo[] geoPoints) => throw null; + public System.Int64 GeoAdd(string key, double longitude, double latitude, string member) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.GeoAddAsync(string key, params ServiceStack.Redis.RedisGeo[] geoPoints) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.GeoAddAsync(string key, double longitude, double latitude, string member, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.GeoAddAsync(string key, ServiceStack.Redis.RedisGeo[] geoPoints, System.Threading.CancellationToken token) => throw null; + public double GeoDist(string key, string fromMember, string toMember, string unit = default(string)) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.GeoDistAsync(string key, string fromMember, string toMember, string unit, System.Threading.CancellationToken token) => throw null; + public string[] GeoHash(string key, params string[] members) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.GeoHashAsync(string key, string[] members, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.GeoHashAsync(string key, params string[] members) => throw null; + public System.Collections.Generic.List GeoPos(string key, params string[] members) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.IRedisNativeClientAsync.GeoPosAsync(string key, string[] members, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.IRedisNativeClientAsync.GeoPosAsync(string key, params string[] members) => throw null; + public System.Collections.Generic.List GeoRadius(string key, double longitude, double latitude, double radius, string unit, bool withCoords = default(bool), bool withDist = default(bool), bool withHash = default(bool), int? count = default(int?), bool? asc = default(bool?)) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.IRedisNativeClientAsync.GeoRadiusAsync(string key, double longitude, double latitude, double radius, string unit, bool withCoords, bool withDist, bool withHash, int? count, bool? asc, System.Threading.CancellationToken token) => throw null; + public System.Collections.Generic.List GeoRadiusByMember(string key, string member, double radius, string unit, bool withCoords = default(bool), bool withDist = default(bool), bool withHash = default(bool), int? count = default(int?), bool? asc = default(bool?)) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.IRedisNativeClientAsync.GeoRadiusByMemberAsync(string key, string member, double radius, string unit, bool withCoords, bool withDist, bool withHash, int? count, bool? asc, System.Threading.CancellationToken token) => throw null; + public System.Byte[] Get(string key) => throw null; + public System.Byte[] Get(System.Byte[] key) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.GetAsync(string key, System.Threading.CancellationToken token) => throw null; + public System.Int64 GetBit(string key, int offset) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.GetBitAsync(string key, int offset, System.Threading.CancellationToken token) => throw null; + public System.Byte[] GetBytes(string key) => throw null; + public ServiceStack.Redis.RedisKeyType GetEntryType(string key) => throw null; + public System.Byte[] GetRange(string key, int fromIndex, int toIndex) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.GetRangeAsync(string key, int fromIndex, int toIndex, System.Threading.CancellationToken token) => throw null; + public System.Byte[] GetSet(string key, System.Byte[] value) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.GetSetAsync(string key, System.Byte[] value, System.Threading.CancellationToken token) => throw null; + public System.Int64 HDel(string hashId, System.Byte[][] keys) => throw null; + public System.Int64 HDel(string hashId, System.Byte[] key) => throw null; + public System.Int64 HDel(System.Byte[] hashId, System.Byte[] key) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.HDelAsync(string hashId, System.Byte[] key, System.Threading.CancellationToken token) => throw null; + public System.Int64 HExists(string hashId, System.Byte[] key) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.HExistsAsync(string hashId, System.Byte[] key, System.Threading.CancellationToken token) => throw null; + public System.Byte[] HGet(string hashId, System.Byte[] key) => throw null; + public System.Byte[] HGet(System.Byte[] hashId, System.Byte[] key) => throw null; + public System.Byte[][] HGetAll(string hashId) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.HGetAllAsync(string hashId, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.HGetAsync(string hashId, System.Byte[] key, System.Threading.CancellationToken token) => throw null; + public System.Int64 HIncrby(string hashId, System.Byte[] key, int incrementBy) => throw null; + public System.Int64 HIncrby(string hashId, System.Byte[] key, System.Int64 incrementBy) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.HIncrbyAsync(string hashId, System.Byte[] key, int incrementBy, System.Threading.CancellationToken token) => throw null; + public double HIncrbyFloat(string hashId, System.Byte[] key, double incrementBy) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.HIncrbyFloatAsync(string hashId, System.Byte[] key, double incrementBy, System.Threading.CancellationToken token) => throw null; + public System.Byte[][] HKeys(string hashId) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.HKeysAsync(string hashId, System.Threading.CancellationToken token) => throw null; + public System.Int64 HLen(string hashId) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.HLenAsync(string hashId, System.Threading.CancellationToken token) => throw null; + public System.Byte[][] HMGet(string hashId, params System.Byte[][] keys) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.HMGetAsync(string hashId, params System.Byte[][] keysAndArgs) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.HMGetAsync(string hashId, System.Byte[][] keys, System.Threading.CancellationToken token) => throw null; + public void HMSet(string hashId, System.Byte[][] keys, System.Byte[][] values) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.HMSetAsync(string hashId, System.Byte[][] keys, System.Byte[][] values, System.Threading.CancellationToken token) => throw null; + public ServiceStack.Redis.ScanResult HScan(string hashId, System.UInt64 cursor, int count = default(int), string match = default(string)) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.HScanAsync(string hashId, System.UInt64 cursor, int count, string match, System.Threading.CancellationToken token) => throw null; + public System.Int64 HSet(string hashId, System.Byte[] key, System.Byte[] value) => throw null; + public System.Int64 HSet(System.Byte[] hashId, System.Byte[] key, System.Byte[] value) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.HSetAsync(string hashId, System.Byte[] key, System.Byte[] value, System.Threading.CancellationToken token) => throw null; + public System.Int64 HSetNX(string hashId, System.Byte[] key, System.Byte[] value) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.HSetNXAsync(string hashId, System.Byte[] key, System.Byte[] value, System.Threading.CancellationToken token) => throw null; + public System.Byte[][] HVals(string hashId) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.HValsAsync(string hashId, System.Threading.CancellationToken token) => throw null; + public bool HadExceptions { get => throw null; } + public bool HasConnected { get => throw null; } + public string Host { get => throw null; set => throw null; } + public System.Int64 Id { get => throw null; set => throw null; } + public int IdleTimeOutSecs { get => throw null; set => throw null; } + public System.Int64 Incr(string key) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.IncrAsync(string key, System.Threading.CancellationToken token) => throw null; + public System.Int64 IncrBy(string key, int count) => throw null; + public System.Int64 IncrBy(string key, System.Int64 count) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.IncrByAsync(string key, System.Int64 count, System.Threading.CancellationToken token) => throw null; + public double IncrByFloat(string key, double incrBy) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.IncrByFloatAsync(string key, double incrBy, System.Threading.CancellationToken token) => throw null; + public System.Collections.Generic.Dictionary Info { get => throw null; } + System.Threading.Tasks.ValueTask> ServiceStack.Redis.IRedisNativeClientAsync.InfoAsync(System.Threading.CancellationToken token) => throw null; + public bool IsManagedClient { get => throw null; } + public bool IsSocketConnected() => throw null; + public System.Byte[][] Keys(string pattern) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.KeysAsync(string pattern, System.Threading.CancellationToken token) => throw null; + public System.Byte[] LIndex(string listId, int listIndex) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.LIndexAsync(string listId, int listIndex, System.Threading.CancellationToken token) => throw null; + public void LInsert(string listId, bool insertBefore, System.Byte[] pivot, System.Byte[] value) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.LInsertAsync(string listId, bool insertBefore, System.Byte[] pivot, System.Byte[] value, System.Threading.CancellationToken token) => throw null; + public System.Int64 LLen(string listId) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.LLenAsync(string listId, System.Threading.CancellationToken token) => throw null; + public System.Byte[] LPop(string listId) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.LPopAsync(string listId, System.Threading.CancellationToken token) => throw null; + public System.Int64 LPush(string listId, System.Byte[][] values) => throw null; + public System.Int64 LPush(string listId, System.Byte[] value) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.LPushAsync(string listId, System.Byte[] value, System.Threading.CancellationToken token) => throw null; + public System.Int64 LPushX(string listId, System.Byte[] value) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.LPushXAsync(string listId, System.Byte[] value, System.Threading.CancellationToken token) => throw null; + public System.Byte[][] LRange(string listId, int startingFrom, int endingAt) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.LRangeAsync(string listId, int startingFrom, int endingAt, System.Threading.CancellationToken token) => throw null; + public System.Int64 LRem(string listId, int removeNoOfMatches, System.Byte[] value) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.LRemAsync(string listId, int removeNoOfMatches, System.Byte[] value, System.Threading.CancellationToken token) => throw null; + public void LSet(string listId, int listIndex, System.Byte[] value) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.LSetAsync(string listId, int listIndex, System.Byte[] value, System.Threading.CancellationToken token) => throw null; + public void LTrim(string listId, int keepStartingFrom, int keepEndingAt) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.LTrimAsync(string listId, int keepStartingFrom, int keepEndingAt, System.Threading.CancellationToken token) => throw null; + public System.DateTime LastSave { get => throw null; } + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.LastSaveAsync(System.Threading.CancellationToken token) => throw null; + protected void Log(string fmt, params object[] args) => throw null; + public System.Byte[][] MGet(params string[] keys) => throw null; + public System.Byte[][] MGet(params System.Byte[][] keys) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.MGetAsync(string[] keys, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.MGetAsync(params string[] keys) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.MGetAsync(params System.Byte[][] keysAndArgs) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.MGetAsync(System.Byte[][] keys, System.Threading.CancellationToken token) => throw null; + public void MSet(string[] keys, System.Byte[][] values) => throw null; + public void MSet(System.Byte[][] keys, System.Byte[][] values) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.MSetAsync(string[] keys, System.Byte[][] values, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.MSetAsync(System.Byte[][] keys, System.Byte[][] values, System.Threading.CancellationToken token) => throw null; + public bool MSetNx(string[] keys, System.Byte[][] values) => throw null; + public bool MSetNx(System.Byte[][] keys, System.Byte[][] values) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.MSetNxAsync(string[] keys, System.Byte[][] values, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.MSetNxAsync(System.Byte[][] keys, System.Byte[][] values, System.Threading.CancellationToken token) => throw null; + protected System.Byte[][] MergeAndConvertToBytes(string[] keys, string[] args) => throw null; + public void Migrate(string host, int port, string key, int destinationDb, System.Int64 timeoutMs) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.MigrateAsync(string host, int port, string key, int destinationDb, System.Int64 timeoutMs, System.Threading.CancellationToken token) => throw null; + public bool Move(string key, int db) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.MoveAsync(string key, int db, System.Threading.CancellationToken token) => throw null; + public string NamespacePrefix { get => throw null; set => throw null; } + public System.Int64 ObjectIdleTime(string key) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.ObjectIdleTimeAsync(string key, System.Threading.CancellationToken token) => throw null; + public System.Action OnBeforeFlush { get => throw null; set => throw null; } + public virtual void OnConnected() => throw null; + public bool PExpire(string key, System.Int64 ttlMs) => throw null; + public bool PExpire(System.Byte[] key, System.Int64 ttlMs) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.PExpireAsync(string key, System.Int64 ttlMs, System.Threading.CancellationToken token) => throw null; + public bool PExpireAt(string key, System.Int64 unixTimeMs) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.PExpireAtAsync(string key, System.Int64 unixTimeMs, System.Threading.CancellationToken token) => throw null; + public void PSetEx(string key, System.Int64 expireInMs, System.Byte[] value) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.PSetExAsync(string key, System.Int64 expireInMs, System.Byte[] value, System.Threading.CancellationToken token) => throw null; + public System.Byte[][] PSubscribe(params string[] toChannelsMatchingPatterns) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.PSubscribeAsync(string[] toChannelsMatchingPatterns, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.PSubscribeAsync(params string[] toChannelsMatchingPatterns) => throw null; + public System.Int64 PTtl(string key) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.PTtlAsync(string key, System.Threading.CancellationToken token) => throw null; + public System.Byte[][] PUnSubscribe(params string[] fromChannelsMatchingPatterns) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.PUnSubscribeAsync(string[] fromChannelsMatchingPatterns, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.PUnSubscribeAsync(params string[] toChannelsMatchingPatterns) => throw null; + public static double ParseDouble(System.Byte[] doubleBytes) => throw null; + public string Password { get => throw null; set => throw null; } + public bool Persist(string key) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.PersistAsync(string key, System.Threading.CancellationToken token) => throw null; + public bool PfAdd(string key, params System.Byte[][] elements) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.PfAddAsync(string key, params System.Byte[][] elements) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.PfAddAsync(string key, System.Byte[][] elements, System.Threading.CancellationToken token) => throw null; + public System.Int64 PfCount(string key) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.PfCountAsync(string key, System.Threading.CancellationToken token) => throw null; + public void PfMerge(string toKeyId, params string[] fromKeys) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.PfMergeAsync(string toKeyId, string[] fromKeys, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.PfMergeAsync(string toKeyId, params string[] fromKeys) => throw null; + public bool Ping() => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.PingAsync(System.Threading.CancellationToken token) => throw null; + public int Port { get => throw null; set => throw null; } + public System.Int64 Publish(string toChannel, System.Byte[] message) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.PublishAsync(string toChannel, System.Byte[] message, System.Threading.CancellationToken token) => throw null; + public void Quit() => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.QuitAsync(System.Threading.CancellationToken token) => throw null; + public System.Byte[] RPop(string listId) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.RPopAsync(string listId, System.Threading.CancellationToken token) => throw null; + public System.Byte[] RPopLPush(string fromListId, string toListId) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.RPopLPushAsync(string fromListId, string toListId, System.Threading.CancellationToken token) => throw null; + public System.Int64 RPush(string listId, System.Byte[][] values) => throw null; + public System.Int64 RPush(string listId, System.Byte[] value) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.RPushAsync(string listId, System.Byte[] value, System.Threading.CancellationToken token) => throw null; + public System.Int64 RPushX(string listId, System.Byte[] value) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.RPushXAsync(string listId, System.Byte[] value, System.Threading.CancellationToken token) => throw null; + public string RandomKey() => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.RandomKeyAsync(System.Threading.CancellationToken token) => throw null; + public ServiceStack.Redis.RedisData RawCommand(params object[] cmdWithArgs) => throw null; + public ServiceStack.Redis.RedisData RawCommand(params System.Byte[][] cmdWithBinaryArgs) => throw null; + protected System.Threading.Tasks.ValueTask RawCommandAsync(System.Threading.CancellationToken token, params object[] cmdWithArgs) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.RawCommandAsync(params object[] cmdWithArgs) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.RawCommandAsync(params System.Byte[][] cmdWithBinaryArgs) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.RawCommandAsync(object[] cmdWithArgs, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.RawCommandAsync(System.Byte[][] cmdWithBinaryArgs, System.Threading.CancellationToken token) => throw null; + public double ReadDouble() => throw null; + protected string ReadLine() => throw null; + public System.Int64 ReadLong() => throw null; + public System.Byte[][] ReceiveMessages() => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.ReceiveMessagesAsync(System.Threading.CancellationToken token) => throw null; + public int ReceiveTimeout { get => throw null; set => throw null; } + public RedisNativeClient(string host, int port, string password = default(string), System.Int64 db = default(System.Int64)) => throw null; + public RedisNativeClient(string host, int port) => throw null; + public RedisNativeClient(string connectionString) => throw null; + public RedisNativeClient(ServiceStack.Redis.RedisEndpoint config) => throw null; + public RedisNativeClient() => throw null; + public void Rename(string oldKeyname, string newKeyname) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.RenameAsync(string oldKeyName, string newKeyName, System.Threading.CancellationToken token) => throw null; + public bool RenameNx(string oldKeyname, string newKeyname) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.RenameNxAsync(string oldKeyName, string newKeyName, System.Threading.CancellationToken token) => throw null; + public static int RequestsPerHour { get => throw null; } + public void ResetSendBuffer() => throw null; + public System.Byte[] Restore(string key, System.Int64 expireMs, System.Byte[] dumpValue) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.RestoreAsync(string key, System.Int64 expireMs, System.Byte[] dumpValue, System.Threading.CancellationToken token) => throw null; + public int RetryCount { get => throw null; set => throw null; } + public int RetryTimeout { get => throw null; set => throw null; } + public ServiceStack.Redis.RedisText Role() => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.RoleAsync(System.Threading.CancellationToken token) => throw null; + public System.Int64 SAdd(string setId, System.Byte[][] values) => throw null; + public System.Int64 SAdd(string setId, System.Byte[] value) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.SAddAsync(string setId, System.Byte[][] values, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.SAddAsync(string setId, System.Byte[] value, System.Threading.CancellationToken token) => throw null; + public System.Int64 SCard(string setId) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.SCardAsync(string setId, System.Threading.CancellationToken token) => throw null; + public System.Byte[][] SDiff(string fromSetId, params string[] withSetIds) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.SDiffAsync(string fromSetId, string[] withSetIds, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.SDiffAsync(string fromSetId, params string[] withSetIds) => throw null; + public void SDiffStore(string intoSetId, string fromSetId, params string[] withSetIds) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.SDiffStoreAsync(string intoSetId, string fromSetId, string[] withSetIds, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.SDiffStoreAsync(string intoSetId, string fromSetId, params string[] withSetIds) => throw null; + public System.Byte[][] SInter(params string[] setIds) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.SInterAsync(string[] setIds, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.SInterAsync(params string[] setIds) => throw null; + public void SInterStore(string intoSetId, params string[] setIds) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.SInterStoreAsync(string intoSetId, string[] setIds, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.SInterStoreAsync(string intoSetId, params string[] setIds) => throw null; + public System.Int64 SIsMember(string setId, System.Byte[] value) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.SIsMemberAsync(string setId, System.Byte[] value, System.Threading.CancellationToken token) => throw null; + public System.Byte[][] SMembers(string setId) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.SMembersAsync(string setId, System.Threading.CancellationToken token) => throw null; + public void SMove(string fromSetId, string toSetId, System.Byte[] value) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.SMoveAsync(string fromSetId, string toSetId, System.Byte[] value, System.Threading.CancellationToken token) => throw null; + public System.Byte[][] SPop(string setId, int count) => throw null; + public System.Byte[] SPop(string setId) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.SPopAsync(string setId, int count, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.SPopAsync(string setId, System.Threading.CancellationToken token) => throw null; + public System.Byte[][] SRandMember(string setId, int count) => throw null; + public System.Byte[] SRandMember(string setId) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.SRandMemberAsync(string setId, System.Threading.CancellationToken token) => throw null; + public System.Int64 SRem(string setId, System.Byte[][] values) => throw null; + public System.Int64 SRem(string setId, System.Byte[] value) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.SRemAsync(string setId, System.Byte[] value, System.Threading.CancellationToken token) => throw null; + public ServiceStack.Redis.ScanResult SScan(string setId, System.UInt64 cursor, int count = default(int), string match = default(string)) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.SScanAsync(string setId, System.UInt64 cursor, int count, string match, System.Threading.CancellationToken token) => throw null; + public System.Byte[][] SUnion(params string[] setIds) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.SUnionAsync(string[] setIds, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.SUnionAsync(params string[] setIds) => throw null; + public void SUnionStore(string intoSetId, params string[] setIds) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.SUnionStoreAsync(string intoSetId, string[] setIds, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.SUnionStoreAsync(string intoSetId, params string[] setIds) => throw null; + public void Save() => throw null; + public void SaveAsync() => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.SaveAsync(System.Threading.CancellationToken token) => throw null; + public ServiceStack.Redis.ScanResult Scan(System.UInt64 cursor, int count = default(int), string match = default(string)) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.ScanAsync(System.UInt64 cursor, int count, string match, System.Threading.CancellationToken token) => throw null; + public System.Byte[][] ScriptExists(params System.Byte[][] sha1Refs) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.ScriptExistsAsync(params System.Byte[][] sha1Refs) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.ScriptExistsAsync(System.Byte[][] sha1Refs, System.Threading.CancellationToken token) => throw null; + public void ScriptFlush() => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.ScriptFlushAsync(System.Threading.CancellationToken token) => throw null; + public void ScriptKill() => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.ScriptKillAsync(System.Threading.CancellationToken token) => throw null; + public System.Byte[] ScriptLoad(string luaBody) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.ScriptLoadAsync(string body, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.SelectAsync(System.Int64 db, System.Threading.CancellationToken token) => throw null; + protected string SendExpectCode(params System.Byte[][] cmdWithBinaryArgs) => throw null; + protected ServiceStack.Redis.RedisData SendExpectComplexResponse(params System.Byte[][] cmdWithBinaryArgs) => throw null; + protected System.Threading.Tasks.ValueTask SendExpectComplexResponseAsync(System.Threading.CancellationToken token, params System.Byte[][] cmdWithBinaryArgs) => throw null; + protected System.Byte[] SendExpectData(params System.Byte[][] cmdWithBinaryArgs) => throw null; + protected object[] SendExpectDeeplyNestedMultiData(params System.Byte[][] cmdWithBinaryArgs) => throw null; + protected double SendExpectDouble(params System.Byte[][] cmdWithBinaryArgs) => throw null; + protected System.Int64 SendExpectLong(params System.Byte[][] cmdWithBinaryArgs) => throw null; + protected System.Byte[][] SendExpectMultiData(params System.Byte[][] cmdWithBinaryArgs) => throw null; + protected string SendExpectString(params System.Byte[][] cmdWithBinaryArgs) => throw null; + protected System.Threading.Tasks.ValueTask SendExpectStringAsync(System.Threading.CancellationToken token, params System.Byte[][] cmdWithBinaryArgs) => throw null; + protected System.Collections.Generic.List> SendExpectStringDictionaryList(params System.Byte[][] cmdWithBinaryArgs) => throw null; + protected void SendExpectSuccess(params System.Byte[][] cmdWithBinaryArgs) => throw null; + protected T SendReceive(System.Byte[][] cmdWithBinaryArgs, System.Func fn, System.Action> completePipelineFn = default(System.Action>), bool sendWithoutRead = default(bool)) => throw null; + public int SendTimeout { get => throw null; set => throw null; } + protected void SendUnmanagedExpectSuccess(params System.Byte[][] cmdWithBinaryArgs) => throw null; + protected void SendWithoutRead(params System.Byte[][] cmdWithBinaryArgs) => throw null; + protected System.Threading.Tasks.ValueTask SendWithoutReadAsync(System.Threading.CancellationToken token, params System.Byte[][] cmdWithBinaryArgs) => throw null; + public void SentinelFailover(string masterName) => throw null; + public System.Collections.Generic.List SentinelGetMasterAddrByName(string masterName) => throw null; + public System.Collections.Generic.Dictionary SentinelMaster(string masterName) => throw null; + public System.Collections.Generic.List> SentinelMasters() => throw null; + public System.Collections.Generic.List> SentinelSentinels(string masterName) => throw null; + public System.Collections.Generic.List> SentinelSlaves(string masterName) => throw null; + public string ServerVersion { get => throw null; } + public static int ServerVersionNumber { get => throw null; set => throw null; } + public void Set(string key, System.Byte[] value, int expirySeconds, System.Int64 expiryMs = default(System.Int64)) => throw null; + public void Set(string key, System.Byte[] value) => throw null; + public void Set(System.Byte[] key, System.Byte[] value, int expirySeconds, System.Int64 expiryMs = default(System.Int64)) => throw null; + public bool Set(string key, System.Byte[] value, bool exists, int expirySeconds = default(int), System.Int64 expiryMs = default(System.Int64)) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.SetAsync(string key, System.Byte[] value, bool exists, System.Int64 expirySeconds, System.Int64 expiryMilliseconds, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.SetAsync(string key, System.Byte[] value, System.Int64 expirySeconds, System.Int64 expiryMilliseconds, System.Threading.CancellationToken token) => throw null; + public System.Int64 SetBit(string key, int offset, int value) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.SetBitAsync(string key, int offset, int value, System.Threading.CancellationToken token) => throw null; + public void SetEx(string key, int expireInSeconds, System.Byte[] value) => throw null; + public void SetEx(System.Byte[] key, int expireInSeconds, System.Byte[] value) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.SetExAsync(string key, int expireInSeconds, System.Byte[] value, System.Threading.CancellationToken token) => throw null; + public System.Int64 SetNX(string key, System.Byte[] value) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.SetNXAsync(string key, System.Byte[] value, System.Threading.CancellationToken token) => throw null; + public System.Int64 SetRange(string key, int offset, System.Byte[] value) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.SetRangeAsync(string key, int offset, System.Byte[] value, System.Threading.CancellationToken token) => throw null; + public void Shutdown() => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.ShutdownAsync(bool noSave, System.Threading.CancellationToken token) => throw null; + public void ShutdownNoSave() => throw null; + public void SlaveOf(string hostname, int port) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.SlaveOfAsync(string hostname, int port, System.Threading.CancellationToken token) => throw null; + public void SlaveOfNoOne() => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.SlaveOfNoOneAsync(System.Threading.CancellationToken token) => throw null; + public object[] Slowlog(int? top) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.SlowlogGetAsync(int? top, System.Threading.CancellationToken token) => throw null; + public void SlowlogReset() => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.SlowlogResetAsync(System.Threading.CancellationToken token) => throw null; + public System.Byte[][] Sort(string listOrSetId, ServiceStack.Redis.SortOptions sortOptions) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.SortAsync(string listOrSetId, ServiceStack.Redis.SortOptions sortOptions, System.Threading.CancellationToken token) => throw null; + public bool Ssl { get => throw null; set => throw null; } + public System.Security.Authentication.SslProtocols? SslProtocols { get => throw null; set => throw null; } + public System.Int64 StrLen(string key) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.StrLenAsync(string key, System.Threading.CancellationToken token) => throw null; + public System.Byte[][] Subscribe(params string[] toChannels) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.SubscribeAsync(string[] toChannels, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.SubscribeAsync(params string[] toChannels) => throw null; + public System.Byte[][] Time() => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.TimeAsync(System.Threading.CancellationToken token) => throw null; + public System.Int64 Ttl(string key) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.TtlAsync(string key, System.Threading.CancellationToken token) => throw null; + public string Type(string key) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.TypeAsync(string key, System.Threading.CancellationToken token) => throw null; + public System.Byte[][] UnSubscribe(params string[] fromChannels) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.UnSubscribeAsync(string[] fromChannels, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.UnSubscribeAsync(params string[] toChannels) => throw null; + public void UnWatch() => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.UnWatchAsync(System.Threading.CancellationToken token) => throw null; + public void Watch(params string[] keys) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.WatchAsync(string[] keys, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.WatchAsync(params string[] keys) => throw null; + public void WriteAllToSendBuffer(params System.Byte[][] cmdWithBinaryArgs) => throw null; + protected void WriteCommandToSendBuffer(params System.Byte[][] cmdWithBinaryArgs) => throw null; + public void WriteToSendBuffer(System.Byte[] cmdBytes) => throw null; + public System.Int64 ZAdd(string setId, double score, System.Byte[] value) => throw null; + public System.Int64 ZAdd(string setId, System.Int64 score, System.Byte[] value) => throw null; + public System.Int64 ZAdd(string setId, System.Collections.Generic.List> pairs) => throw null; + public System.Int64 ZAdd(string setId, System.Collections.Generic.List> pairs) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.ZAddAsync(string setId, double score, System.Byte[] value, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.ZAddAsync(string setId, System.Int64 score, System.Byte[] value, System.Threading.CancellationToken token) => throw null; + public System.Int64 ZCard(string setId) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.ZCardAsync(string setId, System.Threading.CancellationToken token) => throw null; + public System.Int64 ZCount(string setId, double min, double max) => throw null; + public System.Int64 ZCount(string setId, System.Int64 min, System.Int64 max) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.ZCountAsync(string setId, double min, double max, System.Threading.CancellationToken token) => throw null; + public double ZIncrBy(string setId, double incrBy, System.Byte[] value) => throw null; + public double ZIncrBy(string setId, System.Int64 incrBy, System.Byte[] value) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.ZIncrByAsync(string setId, double incrBy, System.Byte[] value, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.ZIncrByAsync(string setId, System.Int64 incrBy, System.Byte[] value, System.Threading.CancellationToken token) => throw null; + public System.Int64 ZInterStore(string intoSetId, string[] setIds, string[] args) => throw null; + public System.Int64 ZInterStore(string intoSetId, params string[] setIds) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.ZInterStoreAsync(string intoSetId, string[] setIds, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.ZInterStoreAsync(string intoSetId, params string[] setIds) => throw null; + public System.Int64 ZLexCount(string setId, string min, string max) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.ZLexCountAsync(string setId, string min, string max, System.Threading.CancellationToken token) => throw null; + public System.Byte[][] ZRange(string setId, int min, int max) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.ZRangeAsync(string setId, int min, int max, System.Threading.CancellationToken token) => throw null; + public System.Byte[][] ZRangeByLex(string setId, string min, string max, int? skip = default(int?), int? take = default(int?)) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.ZRangeByLexAsync(string setId, string min, string max, int? skip, int? take, System.Threading.CancellationToken token) => throw null; + public System.Byte[][] ZRangeByScore(string setId, double min, double max, int? skip, int? take) => throw null; + public System.Byte[][] ZRangeByScore(string setId, System.Int64 min, System.Int64 max, int? skip, int? take) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.ZRangeByScoreAsync(string setId, double min, double max, int? skip, int? take, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.ZRangeByScoreAsync(string setId, System.Int64 min, System.Int64 max, int? skip, int? take, System.Threading.CancellationToken token) => throw null; + public System.Byte[][] ZRangeByScoreWithScores(string setId, double min, double max, int? skip, int? take) => throw null; + public System.Byte[][] ZRangeByScoreWithScores(string setId, System.Int64 min, System.Int64 max, int? skip, int? take) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.ZRangeByScoreWithScoresAsync(string setId, double min, double max, int? skip, int? take, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.ZRangeByScoreWithScoresAsync(string setId, System.Int64 min, System.Int64 max, int? skip, int? take, System.Threading.CancellationToken token) => throw null; + public System.Byte[][] ZRangeWithScores(string setId, int min, int max) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.ZRangeWithScoresAsync(string setId, int min, int max, System.Threading.CancellationToken token) => throw null; + public System.Int64 ZRank(string setId, System.Byte[] value) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.ZRankAsync(string setId, System.Byte[] value, System.Threading.CancellationToken token) => throw null; + public System.Int64 ZRem(string setId, System.Byte[][] values) => throw null; + public System.Int64 ZRem(string setId, System.Byte[] value) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.ZRemAsync(string setId, System.Byte[][] values, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.ZRemAsync(string setId, System.Byte[] value, System.Threading.CancellationToken token) => throw null; + public System.Int64 ZRemRangeByLex(string setId, string min, string max) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.ZRemRangeByLexAsync(string setId, string min, string max, System.Threading.CancellationToken token) => throw null; + public System.Int64 ZRemRangeByRank(string setId, int min, int max) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.ZRemRangeByRankAsync(string setId, int min, int max, System.Threading.CancellationToken token) => throw null; + public System.Int64 ZRemRangeByScore(string setId, double fromScore, double toScore) => throw null; + public System.Int64 ZRemRangeByScore(string setId, System.Int64 fromScore, System.Int64 toScore) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.ZRemRangeByScoreAsync(string setId, double fromScore, double toScore, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.ZRemRangeByScoreAsync(string setId, System.Int64 fromScore, System.Int64 toScore, System.Threading.CancellationToken token) => throw null; + public System.Byte[][] ZRevRange(string setId, int min, int max) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.ZRevRangeAsync(string setId, int min, int max, System.Threading.CancellationToken token) => throw null; + public System.Byte[][] ZRevRangeByScore(string setId, double min, double max, int? skip, int? take) => throw null; + public System.Byte[][] ZRevRangeByScore(string setId, System.Int64 min, System.Int64 max, int? skip, int? take) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.ZRevRangeByScoreAsync(string setId, double min, double max, int? skip, int? take, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.ZRevRangeByScoreAsync(string setId, System.Int64 min, System.Int64 max, int? skip, int? take, System.Threading.CancellationToken token) => throw null; + public System.Byte[][] ZRevRangeByScoreWithScores(string setId, double min, double max, int? skip, int? take) => throw null; + public System.Byte[][] ZRevRangeByScoreWithScores(string setId, System.Int64 min, System.Int64 max, int? skip, int? take) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.ZRevRangeByScoreWithScoresAsync(string setId, double min, double max, int? skip, int? take, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.ZRevRangeByScoreWithScoresAsync(string setId, System.Int64 min, System.Int64 max, int? skip, int? take, System.Threading.CancellationToken token) => throw null; + public System.Byte[][] ZRevRangeWithScores(string setId, int min, int max) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.ZRevRangeWithScoresAsync(string setId, int min, int max, System.Threading.CancellationToken token) => throw null; + public System.Int64 ZRevRank(string setId, System.Byte[] value) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.ZRevRankAsync(string setId, System.Byte[] value, System.Threading.CancellationToken token) => throw null; + public ServiceStack.Redis.ScanResult ZScan(string setId, System.UInt64 cursor, int count = default(int), string match = default(string)) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.ZScanAsync(string setId, System.UInt64 cursor, int count, string match, System.Threading.CancellationToken token) => throw null; + public double ZScore(string setId, System.Byte[] value) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.ZScoreAsync(string setId, System.Byte[] value, System.Threading.CancellationToken token) => throw null; + public System.Int64 ZUnionStore(string intoSetId, string[] setIds, string[] args) => throw null; + public System.Int64 ZUnionStore(string intoSetId, params string[] setIds) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.ZUnionStoreAsync(string intoSetId, string[] setIds, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisNativeClientAsync.ZUnionStoreAsync(string intoSetId, params string[] setIds) => throw null; + protected System.Net.Sockets.Socket socket; + protected System.Net.Security.SslStream sslStream; + // ERR: Stub generator didn't handle member: ~RedisNativeClient + } + + // Generated from `ServiceStack.Redis.RedisPoolConfig` in `ServiceStack.Redis, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class RedisPoolConfig + { + public static int DefaultMaxPoolSize; + public int MaxPoolSize { get => throw null; set => throw null; } + public RedisPoolConfig() => throw null; + } + + // Generated from `ServiceStack.Redis.RedisPubSubServer` in `ServiceStack.Redis, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class RedisPubSubServer : System.IDisposable, ServiceStack.Redis.IRedisPubSubServer + { + public const string AllChannelsWildCard = default; + public bool AutoRestart { get => throw null; set => throw null; } + public System.Int64 BgThreadCount { get => throw null; } + public string[] Channels { get => throw null; set => throw null; } + public string[] ChannelsMatching { get => throw null; set => throw null; } + public ServiceStack.Redis.IRedisClientsManager ClientsManager { get => throw null; set => throw null; } + // Generated from `ServiceStack.Redis.RedisPubSubServer+ControlCommand` in `ServiceStack.Redis, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class ControlCommand + { + public const string Control = default; + public const string Pulse = default; + } + + + public System.DateTime CurrentServerTime { get => throw null; } + public virtual void Dispose() => throw null; + public string GetStatsDescription() => throw null; + public string GetStatus() => throw null; + public System.TimeSpan? HeartbeatInterval; + public System.TimeSpan HeartbeatTimeout; + public bool IsSentinelSubscription { get => throw null; set => throw null; } + public System.Action OnControlCommand { get => throw null; set => throw null; } + public System.Action OnDispose { get => throw null; set => throw null; } + public System.Action OnError { get => throw null; set => throw null; } + public System.Action OnFailover { get => throw null; set => throw null; } + public System.Action OnHeartbeatReceived { get => throw null; set => throw null; } + public System.Action OnHeartbeatSent { get => throw null; set => throw null; } + public System.Action OnInit { get => throw null; set => throw null; } + public System.Action OnMessage { get => throw null; set => throw null; } + public System.Action OnMessageBytes { get => throw null; set => throw null; } + public System.Action OnStart { get => throw null; set => throw null; } + public System.Action OnStop { get => throw null; set => throw null; } + public System.Action OnUnSubscribe { get => throw null; set => throw null; } + // Generated from `ServiceStack.Redis.RedisPubSubServer+Operation` in `ServiceStack.Redis, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class Operation + { + public static string GetName(int op) => throw null; + public const int NoOp = default; + public const int Reset = default; + public const int Restart = default; + public const int Stop = default; + } + + + public RedisPubSubServer(ServiceStack.Redis.IRedisClientsManager clientsManager, params string[] channels) => throw null; + public void Restart() => throw null; + public ServiceStack.Redis.IRedisPubSubServer Start() => throw null; + public void Stop() => throw null; + public System.TimeSpan? WaitBeforeNextRestart { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.Redis.RedisQueueCompletableOperation` in `ServiceStack.Redis, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class RedisQueueCompletableOperation + { + protected virtual void AddCurrentQueuedOperation() => throw null; + public virtual void CompleteBytesQueuedCommand(System.Func bytesReadCommand) => throw null; + public virtual void CompleteDoubleQueuedCommand(System.Func doubleReadCommand) => throw null; + public virtual void CompleteIntQueuedCommand(System.Func intReadCommand) => throw null; + public virtual void CompleteLongQueuedCommand(System.Func longReadCommand) => throw null; + public virtual void CompleteMultiBytesQueuedCommand(System.Func multiBytesReadCommand) => throw null; + public virtual void CompleteMultiStringQueuedCommand(System.Func> multiStringReadCommand) => throw null; + public virtual void CompleteRedisDataQueuedCommand(System.Func redisDataReadCommand) => throw null; + public virtual void CompleteStringQueuedCommand(System.Func stringReadCommand) => throw null; + public virtual void CompleteVoidQueuedCommand(System.Action voidReadCommand) => throw null; + public RedisQueueCompletableOperation() => throw null; + } + + // Generated from `ServiceStack.Redis.RedisResolver` in `ServiceStack.Redis, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class RedisResolver : ServiceStack.Redis.IRedisResolverExtended, ServiceStack.Redis.IRedisResolver + { + public System.Func ClientFactory { get => throw null; set => throw null; } + public ServiceStack.Redis.RedisClient CreateMasterClient(int desiredIndex) => throw null; + public virtual ServiceStack.Redis.RedisClient CreateRedisClient(ServiceStack.Redis.RedisEndpoint config, bool master) => throw null; + public ServiceStack.Redis.RedisClient CreateSlaveClient(int desiredIndex) => throw null; + public ServiceStack.Redis.RedisEndpoint GetReadOnlyHost(int desiredIndex) => throw null; + public ServiceStack.Redis.RedisEndpoint GetReadWriteHost(int desiredIndex) => throw null; + protected ServiceStack.Redis.RedisClient GetValidMaster(ServiceStack.Redis.RedisClient client, ServiceStack.Redis.RedisEndpoint config) => throw null; + public ServiceStack.Redis.RedisEndpoint[] Masters { get => throw null; } + public int ReadOnlyHostsCount { get => throw null; set => throw null; } + public int ReadWriteHostsCount { get => throw null; set => throw null; } + public RedisResolver(System.Collections.Generic.IEnumerable masters, System.Collections.Generic.IEnumerable replicas) => throw null; + public RedisResolver(System.Collections.Generic.IEnumerable masters, System.Collections.Generic.IEnumerable replicas) => throw null; + public RedisResolver() => throw null; + public virtual void ResetMasters(System.Collections.Generic.List newMasters) => throw null; + public virtual void ResetMasters(System.Collections.Generic.IEnumerable hosts) => throw null; + public virtual void ResetSlaves(System.Collections.Generic.List newReplicas) => throw null; + public virtual void ResetSlaves(System.Collections.Generic.IEnumerable hosts) => throw null; + public ServiceStack.Redis.RedisEndpoint[] Slaves { get => throw null; } + } + + // Generated from `ServiceStack.Redis.RedisResolverExtensions` in `ServiceStack.Redis, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class RedisResolverExtensions + { + public static ServiceStack.Redis.RedisClient CreateRedisClient(this ServiceStack.Redis.IRedisResolver resolver, ServiceStack.Redis.RedisEndpoint config, bool master) => throw null; + public static ServiceStack.Redis.RedisEndpoint GetReadOnlyHost(this ServiceStack.Redis.IRedisResolver resolver, int desiredIndex) => throw null; + public static ServiceStack.Redis.RedisEndpoint GetReadWriteHost(this ServiceStack.Redis.IRedisResolver resolver, int desiredIndex) => throw null; + } + + // Generated from `ServiceStack.Redis.RedisResponseException` in `ServiceStack.Redis, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class RedisResponseException : ServiceStack.Redis.RedisException + { + public string Code { get => throw null; set => throw null; } + public RedisResponseException(string message, string code) : base(default(string)) => throw null; + public RedisResponseException(string message) : base(default(string)) => throw null; + } + + // Generated from `ServiceStack.Redis.RedisRetryableException` in `ServiceStack.Redis, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class RedisRetryableException : ServiceStack.Redis.RedisException + { + public string Code { get => throw null; set => throw null; } + public RedisRetryableException(string message, string code) : base(default(string)) => throw null; + public RedisRetryableException(string message) : base(default(string)) => throw null; + } + + // Generated from `ServiceStack.Redis.RedisScripts` in `ServiceStack.Redis, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class RedisScripts : ServiceStack.Script.ScriptMethods + { + public ServiceStack.Redis.IRedisClientsManager RedisManager { get => throw null; set => throw null; } + public RedisScripts() => throw null; + public object redisCall(ServiceStack.Script.ScriptScopeContext scope, object redisCommand, object options) => throw null; + public object redisCall(ServiceStack.Script.ScriptScopeContext scope, object redisCommand) => throw null; + public string redisChangeConnection(ServiceStack.Script.ScriptScopeContext scope, object newConnection, object options) => throw null; + public string redisChangeConnection(ServiceStack.Script.ScriptScopeContext scope, object newConnection) => throw null; + public System.Collections.Generic.Dictionary redisConnection(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public string redisConnectionString(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public System.Collections.Generic.Dictionary redisInfo(ServiceStack.Script.ScriptScopeContext scope, object options) => throw null; + public System.Collections.Generic.Dictionary redisInfo(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public System.Collections.Generic.List redisSearchKeys(ServiceStack.Script.ScriptScopeContext scope, string query, object options) => throw null; + public System.Collections.Generic.List redisSearchKeys(ServiceStack.Script.ScriptScopeContext scope, string query) => throw null; + public string redisSearchKeysAsJson(ServiceStack.Script.ScriptScopeContext scope, string query, object options) => throw null; + public string redisToConnectionString(ServiceStack.Script.ScriptScopeContext scope, object connectionInfo, object options) => throw null; + public string redisToConnectionString(ServiceStack.Script.ScriptScopeContext scope, object connectionInfo) => throw null; + public ServiceStack.Script.IgnoreResult useRedis(ServiceStack.Script.ScriptScopeContext scope, string redisConnection) => throw null; + } + + // Generated from `ServiceStack.Redis.RedisSearchCursorResult` in `ServiceStack.Redis, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class RedisSearchCursorResult + { + public int Cursor { get => throw null; set => throw null; } + public RedisSearchCursorResult() => throw null; + public System.Collections.Generic.List Results { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.Redis.RedisSearchResult` in `ServiceStack.Redis, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class RedisSearchResult + { + public string Id { get => throw null; set => throw null; } + public RedisSearchResult() => throw null; + public System.Int64 Size { get => throw null; set => throw null; } + public System.Int64 Ttl { get => throw null; set => throw null; } + public string Type { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.Redis.RedisSentinel` in `ServiceStack.Redis, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class RedisSentinel : System.IDisposable, ServiceStack.Redis.IRedisSentinel + { + public static string DefaultAddress; + public static string DefaultMasterName; + public void Dispose() => throw null; + public void ForceMasterFailover() => throw null; + public System.Collections.Generic.List GetActiveSentinelHosts(System.Collections.Generic.IEnumerable sentinelHosts) => throw null; + public ServiceStack.Redis.RedisEndpoint GetMaster() => throw null; + public ServiceStack.Redis.IRedisClientsManager GetRedisManager() => throw null; + public SentinelInfo GetSentinelInfo() => throw null; + public System.Collections.Generic.List GetSlaves() => throw null; + public System.Func HostFilter { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary IpAddressMap { get => throw null; set => throw null; } + protected static ServiceStack.Logging.ILog Log; + public string MasterName { get => throw null; } + public System.TimeSpan MaxWaitBetweenFailedHosts { get => throw null; set => throw null; } + public System.Action OnFailover { get => throw null; set => throw null; } + public System.Action OnSentinelMessageReceived { get => throw null; set => throw null; } + public System.Action OnWorkerError { get => throw null; set => throw null; } + public ServiceStack.Redis.IRedisClientsManager RedisManager { get => throw null; set => throw null; } + public System.Func RedisManagerFactory { get => throw null; set => throw null; } + public RedisSentinel(string sentinelHost = default(string), string masterName = default(string)) => throw null; + public RedisSentinel(System.Collections.Generic.IEnumerable sentinelHosts, string masterName = default(string)) => throw null; + public void RefreshActiveSentinels() => throw null; + public System.TimeSpan RefreshSentinelHostsAfter { get => throw null; set => throw null; } + public SentinelInfo ResetClients() => throw null; + public bool ResetWhenObjectivelyDown { get => throw null; set => throw null; } + public bool ResetWhenSubjectivelyDown { get => throw null; set => throw null; } + public bool ScanForOtherSentinels { get => throw null; set => throw null; } + public System.Func SentinelHostFilter { get => throw null; set => throw null; } + public System.Collections.Generic.List SentinelHosts { get => throw null; set => throw null; } + public int SentinelWorkerConnectTimeoutMs { get => throw null; set => throw null; } + public int SentinelWorkerReceiveTimeoutMs { get => throw null; set => throw null; } + public int SentinelWorkerSendTimeoutMs { get => throw null; set => throw null; } + public ServiceStack.Redis.IRedisClientsManager Start() => throw null; + public System.TimeSpan WaitBeforeForcingMasterFailover { get => throw null; set => throw null; } + public System.TimeSpan WaitBetweenFailedHosts { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.Redis.RedisSentinelResolver` in `ServiceStack.Redis, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class RedisSentinelResolver : ServiceStack.Redis.IRedisResolverExtended, ServiceStack.Redis.IRedisResolver + { + public System.Func ClientFactory { get => throw null; set => throw null; } + public ServiceStack.Redis.RedisClient CreateMasterClient(int desiredIndex) => throw null; + public virtual ServiceStack.Redis.RedisClient CreateRedisClient(ServiceStack.Redis.RedisEndpoint config, bool master) => throw null; + public ServiceStack.Redis.RedisClient CreateSlaveClient(int desiredIndex) => throw null; + public ServiceStack.Redis.RedisEndpoint GetReadOnlyHost(int desiredIndex) => throw null; + public ServiceStack.Redis.RedisEndpoint GetReadWriteHost(int desiredIndex) => throw null; + public ServiceStack.Redis.RedisEndpoint[] Masters { get => throw null; } + public int ReadOnlyHostsCount { get => throw null; set => throw null; } + public int ReadWriteHostsCount { get => throw null; set => throw null; } + public RedisSentinelResolver(ServiceStack.Redis.RedisSentinel sentinel, System.Collections.Generic.IEnumerable masters, System.Collections.Generic.IEnumerable replicas) => throw null; + public RedisSentinelResolver(ServiceStack.Redis.RedisSentinel sentinel, System.Collections.Generic.IEnumerable masters, System.Collections.Generic.IEnumerable replicas) => throw null; + public RedisSentinelResolver(ServiceStack.Redis.RedisSentinel sentinel) => throw null; + public virtual void ResetMasters(System.Collections.Generic.List newMasters) => throw null; + public virtual void ResetMasters(System.Collections.Generic.IEnumerable hosts) => throw null; + public virtual void ResetSlaves(System.Collections.Generic.List newReplicas) => throw null; + public virtual void ResetSlaves(System.Collections.Generic.IEnumerable hosts) => throw null; + public ServiceStack.Redis.RedisEndpoint[] Slaves { get => throw null; } + } + + // Generated from `ServiceStack.Redis.RedisStats` in `ServiceStack.Redis, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class RedisStats + { + public static void Reset() => throw null; + public static System.Collections.Generic.Dictionary ToDictionary() => throw null; + public static System.Int64 TotalClientsCreated { get => throw null; } + public static System.Int64 TotalClientsCreatedOutsidePool { get => throw null; } + public static System.Int64 TotalCommandsSent { get => throw null; } + public static System.Int64 TotalDeactivatedClients { get => throw null; } + public static System.Int64 TotalFailedSentinelWorkers { get => throw null; } + public static System.Int64 TotalFailovers { get => throw null; } + public static System.Int64 TotalForcedMasterFailovers { get => throw null; } + public static System.Int64 TotalInvalidMasters { get => throw null; } + public static System.Int64 TotalNoMastersFound { get => throw null; } + public static System.Int64 TotalObjectiveServersDown { get => throw null; } + public static System.Int64 TotalPendingDeactivatedClients { get => throw null; } + public static System.Int64 TotalRetryCount { get => throw null; } + public static System.Int64 TotalRetrySuccess { get => throw null; } + public static System.Int64 TotalRetryTimedout { get => throw null; } + public static System.Int64 TotalSubjectiveServersDown { get => throw null; } + } + + // Generated from `ServiceStack.Redis.RedisSubscription` in `ServiceStack.Redis, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class RedisSubscription : System.IDisposable, System.IAsyncDisposable, ServiceStack.Redis.IRedisSubscriptionAsync, ServiceStack.Redis.IRedisSubscription + { + public void Dispose() => throw null; + System.Threading.Tasks.ValueTask System.IAsyncDisposable.DisposeAsync() => throw null; + public bool IsPSubscription { get => throw null; set => throw null; } + public System.Action OnMessage { get => throw null; set => throw null; } + event System.Func ServiceStack.Redis.IRedisSubscriptionAsync.OnMessageAsync { add => throw null; remove => throw null; } + public System.Action OnMessageBytes { get => throw null; set => throw null; } + event System.Func ServiceStack.Redis.IRedisSubscriptionAsync.OnMessageBytesAsync { add => throw null; remove => throw null; } + public System.Action OnSubscribe { get => throw null; set => throw null; } + event System.Func ServiceStack.Redis.IRedisSubscriptionAsync.OnSubscribeAsync { add => throw null; remove => throw null; } + public System.Action OnUnSubscribe { get => throw null; set => throw null; } + event System.Func ServiceStack.Redis.IRedisSubscriptionAsync.OnUnSubscribeAsync { add => throw null; remove => throw null; } + public RedisSubscription(ServiceStack.Redis.IRedisNativeClient redisClient) => throw null; + public void SubscribeToChannels(params string[] channels) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisSubscriptionAsync.SubscribeToChannelsAsync(string[] channels, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisSubscriptionAsync.SubscribeToChannelsAsync(params string[] channels) => throw null; + public void SubscribeToChannelsMatching(params string[] patterns) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisSubscriptionAsync.SubscribeToChannelsMatchingAsync(string[] patterns, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisSubscriptionAsync.SubscribeToChannelsMatchingAsync(params string[] patterns) => throw null; + public System.Int64 SubscriptionCount { get => throw null; set => throw null; } + public void UnSubscribeFromAllChannels() => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisSubscriptionAsync.UnSubscribeFromAllChannelsAsync(System.Threading.CancellationToken token) => throw null; + public void UnSubscribeFromAllChannelsMatchingAnyPatterns() => throw null; + public void UnSubscribeFromChannels(params string[] channels) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisSubscriptionAsync.UnSubscribeFromChannelsAsync(string[] channels, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisSubscriptionAsync.UnSubscribeFromChannelsAsync(params string[] channels) => throw null; + public void UnSubscribeFromChannelsMatching(params string[] patterns) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisSubscriptionAsync.UnSubscribeFromChannelsMatchingAsync(string[] patterns, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisSubscriptionAsync.UnSubscribeFromChannelsMatchingAsync(params string[] patterns) => throw null; + } + + // Generated from `ServiceStack.Redis.RedisTransaction` in `ServiceStack.Redis, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class RedisTransaction : ServiceStack.Redis.RedisAllPurposePipeline, System.IDisposable, System.IAsyncDisposable, ServiceStack.Redis.Pipeline.IRedisQueueableOperationAsync, ServiceStack.Redis.Pipeline.IRedisQueueableOperation, ServiceStack.Redis.Pipeline.IRedisQueueCompletableOperationAsync, ServiceStack.Redis.Pipeline.IRedisQueueCompletableOperation, ServiceStack.Redis.Pipeline.IRedisPipelineSharedAsync, ServiceStack.Redis.Pipeline.IRedisPipelineShared, ServiceStack.Redis.IRedisTransactionBaseAsync, ServiceStack.Redis.IRedisTransactionBase, ServiceStack.Redis.IRedisTransactionAsync, ServiceStack.Redis.IRedisTransaction + { + protected override void AddCurrentQueuedOperation() => throw null; + public bool Commit() => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisTransactionAsync.CommitAsync(System.Threading.CancellationToken token) => throw null; + public override void Dispose() => throw null; + protected override void Init() => throw null; + public RedisTransaction(ServiceStack.Redis.RedisClient redisClient) : base(default(ServiceStack.Redis.RedisClient)) => throw null; + internal RedisTransaction(ServiceStack.Redis.RedisClient redisClient, bool isAsync) : base(default(ServiceStack.Redis.RedisClient)) => throw null; + public override bool Replay() => throw null; + public void Rollback() => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.IRedisTransactionAsync.RollbackAsync(System.Threading.CancellationToken token) => throw null; + } + + // Generated from `ServiceStack.Redis.RedisTransactionFailedException` in `ServiceStack.Redis, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class RedisTransactionFailedException : System.Exception + { + public RedisTransactionFailedException() => throw null; + } + + // Generated from `ServiceStack.Redis.RedisTypedPipeline<>` in `ServiceStack.Redis, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class RedisTypedPipeline : ServiceStack.Redis.Generic.RedisTypedCommandQueue, System.IDisposable, System.IAsyncDisposable, ServiceStack.Redis.Pipeline.IRedisQueueCompletableOperationAsync, ServiceStack.Redis.Pipeline.IRedisQueueCompletableOperation, ServiceStack.Redis.Pipeline.IRedisPipelineSharedAsync, ServiceStack.Redis.Pipeline.IRedisPipelineShared, ServiceStack.Redis.Generic.IRedisTypedQueueableOperationAsync, ServiceStack.Redis.Generic.IRedisTypedQueueableOperation, ServiceStack.Redis.Generic.IRedisTypedPipelineAsync, ServiceStack.Redis.Generic.IRedisTypedPipeline + { + protected void ClosePipeline() => throw null; + void ServiceStack.Redis.Pipeline.IRedisQueueCompletableOperationAsync.CompleteBytesQueuedCommandAsync(System.Func> bytesReadCommand) => throw null; + void ServiceStack.Redis.Pipeline.IRedisQueueCompletableOperationAsync.CompleteDoubleQueuedCommandAsync(System.Func> doubleReadCommand) => throw null; + void ServiceStack.Redis.Pipeline.IRedisQueueCompletableOperationAsync.CompleteIntQueuedCommandAsync(System.Func> intReadCommand) => throw null; + void ServiceStack.Redis.Pipeline.IRedisQueueCompletableOperationAsync.CompleteLongQueuedCommandAsync(System.Func> longReadCommand) => throw null; + void ServiceStack.Redis.Pipeline.IRedisQueueCompletableOperationAsync.CompleteMultiBytesQueuedCommandAsync(System.Func> multiBytesReadCommand) => throw null; + void ServiceStack.Redis.Pipeline.IRedisQueueCompletableOperationAsync.CompleteMultiStringQueuedCommandAsync(System.Func>> multiStringReadCommand) => throw null; + void ServiceStack.Redis.Pipeline.IRedisQueueCompletableOperationAsync.CompleteRedisDataQueuedCommandAsync(System.Func> redisDataReadCommand) => throw null; + void ServiceStack.Redis.Pipeline.IRedisQueueCompletableOperationAsync.CompleteStringQueuedCommandAsync(System.Func> stringReadCommand) => throw null; + void ServiceStack.Redis.Pipeline.IRedisQueueCompletableOperationAsync.CompleteVoidQueuedCommandAsync(System.Func voidReadCommand) => throw null; + public virtual void Dispose() => throw null; + System.Threading.Tasks.ValueTask System.IAsyncDisposable.DisposeAsync() => throw null; + protected void Execute() => throw null; + public void Flush() => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Pipeline.IRedisPipelineSharedAsync.FlushAsync(System.Threading.CancellationToken token) => throw null; + protected virtual void Init() => throw null; + void ServiceStack.Redis.Generic.IRedisTypedQueueableOperationAsync.QueueCommand(System.Func, System.Threading.Tasks.ValueTask> command, System.Action onSuccessCallback, System.Action onErrorCallback) => throw null; + void ServiceStack.Redis.Generic.IRedisTypedQueueableOperationAsync.QueueCommand(System.Func, System.Threading.Tasks.ValueTask> command, System.Action onSuccessCallback, System.Action onErrorCallback) => throw null; + void ServiceStack.Redis.Generic.IRedisTypedQueueableOperationAsync.QueueCommand(System.Func, System.Threading.Tasks.ValueTask> command, System.Action onSuccessCallback, System.Action onErrorCallback) => throw null; + void ServiceStack.Redis.Generic.IRedisTypedQueueableOperationAsync.QueueCommand(System.Func, System.Threading.Tasks.ValueTask> command, System.Action onSuccessCallback, System.Action onErrorCallback) => throw null; + void ServiceStack.Redis.Generic.IRedisTypedQueueableOperationAsync.QueueCommand(System.Func, System.Threading.Tasks.ValueTask> command, System.Action onSuccessCallback, System.Action onErrorCallback) => throw null; + void ServiceStack.Redis.Generic.IRedisTypedQueueableOperationAsync.QueueCommand(System.Func, System.Threading.Tasks.ValueTask> command, System.Action onSuccessCallback, System.Action onErrorCallback) => throw null; + void ServiceStack.Redis.Generic.IRedisTypedQueueableOperationAsync.QueueCommand(System.Func, System.Threading.Tasks.ValueTask> command, System.Action onSuccessCallback, System.Action onErrorCallback) => throw null; + void ServiceStack.Redis.Generic.IRedisTypedQueueableOperationAsync.QueueCommand(System.Func, System.Threading.Tasks.ValueTask>> command, System.Action> onSuccessCallback, System.Action onErrorCallback) => throw null; + void ServiceStack.Redis.Generic.IRedisTypedQueueableOperationAsync.QueueCommand(System.Func, System.Threading.Tasks.ValueTask>> command, System.Action> onSuccessCallback, System.Action onErrorCallback) => throw null; + void ServiceStack.Redis.Generic.IRedisTypedQueueableOperationAsync.QueueCommand(System.Func, System.Threading.Tasks.ValueTask>> command, System.Action> onSuccessCallback, System.Action onErrorCallback) => throw null; + void ServiceStack.Redis.Generic.IRedisTypedQueueableOperationAsync.QueueCommand(System.Func, System.Threading.Tasks.ValueTask> command, System.Action onSuccessCallback, System.Action onErrorCallback) => throw null; + internal RedisTypedPipeline(ServiceStack.Redis.Generic.RedisTypedClient redisClient) : base(default(ServiceStack.Redis.Generic.RedisTypedClient)) => throw null; + public virtual bool Replay() => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Pipeline.IRedisPipelineSharedAsync.ReplayAsync(System.Threading.CancellationToken token) => throw null; + } + + // Generated from `ServiceStack.Redis.ScanResultExtensions` in `ServiceStack.Redis, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class ScanResultExtensions + { + public static System.Collections.Generic.Dictionary AsItemsWithScores(this ServiceStack.Redis.ScanResult result) => throw null; + public static System.Collections.Generic.Dictionary AsKeyValues(this ServiceStack.Redis.ScanResult result) => throw null; + public static System.Collections.Generic.List AsStrings(this ServiceStack.Redis.ScanResult result) => throw null; + } + + // Generated from `ServiceStack.Redis.ShardedConnectionPool` in `ServiceStack.Redis, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ShardedConnectionPool : ServiceStack.Redis.PooledRedisClientManager + { + public override int GetHashCode() => throw null; + public ShardedConnectionPool(string name, int weight, params string[] readWriteHosts) => throw null; + public string name; + public int weight; + } + + // Generated from `ServiceStack.Redis.ShardedRedisClientManager` in `ServiceStack.Redis, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ShardedRedisClientManager + { + public ServiceStack.Redis.ShardedConnectionPool GetConnectionPool(string key) => throw null; + public ShardedRedisClientManager(params ServiceStack.Redis.ShardedConnectionPool[] connectionPools) => throw null; + } + + // Generated from `ServiceStack.Redis.TemplateRedisFilters` in `ServiceStack.Redis, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class TemplateRedisFilters : ServiceStack.Redis.RedisScripts + { + public TemplateRedisFilters() => throw null; + } + + namespace Generic + { + // Generated from `ServiceStack.Redis.Generic.ManagedList<>` in `ServiceStack.Redis, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ManagedList : System.Collections.IEnumerable, System.Collections.Generic.IList, System.Collections.Generic.IEnumerable, System.Collections.Generic.ICollection + { + public void Add(T item) => throw null; + public void Clear() => throw null; + public bool Contains(T item) => throw null; + public void CopyTo(T[] array, int arrayIndex) => throw null; + public int Count { get => throw null; } + public System.Collections.Generic.IEnumerator GetEnumerator() => throw null; + System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() => throw null; + public int IndexOf(T item) => throw null; + public void Insert(int index, T item) => throw null; + public bool IsReadOnly { get => throw null; } + public T this[int index] { get => throw null; set => throw null; } + public ManagedList(ServiceStack.Redis.IRedisClientsManager manager, string key) => throw null; + public bool Remove(T item) => throw null; + public void RemoveAt(int index) => throw null; + } + + // Generated from `ServiceStack.Redis.Generic.RedisClientsManagerExtensionsGeneric` in `ServiceStack.Redis, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class RedisClientsManagerExtensionsGeneric + { + public static ServiceStack.Redis.Generic.ManagedList GetManagedList(this ServiceStack.Redis.IRedisClientsManager manager, string key) => throw null; + } + + // Generated from `ServiceStack.Redis.Generic.RedisTypedClient<>` in `ServiceStack.Redis, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class RedisTypedClient : ServiceStack.Redis.Generic.IRedisTypedClientAsync, ServiceStack.Redis.Generic.IRedisTypedClient, ServiceStack.Data.IEntityStoreAsync, ServiceStack.Data.IEntityStore + { + public System.IDisposable AcquireLock(System.TimeSpan timeOut) => throw null; + public System.IDisposable AcquireLock() => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.AcquireLockAsync(System.TimeSpan? timeOut, System.Threading.CancellationToken token) => throw null; + public void AddItemToList(ServiceStack.Redis.Generic.IRedisList fromList, T value) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.AddItemToListAsync(ServiceStack.Redis.Generic.IRedisListAsync fromList, T value, System.Threading.CancellationToken token) => throw null; + public void AddItemToSet(ServiceStack.Redis.Generic.IRedisSet toSet, T item) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.AddItemToSetAsync(ServiceStack.Redis.Generic.IRedisSetAsync toSet, T item, System.Threading.CancellationToken token) => throw null; + public void AddItemToSortedSet(ServiceStack.Redis.Generic.IRedisSortedSet toSet, T value, double score) => throw null; + public void AddItemToSortedSet(ServiceStack.Redis.Generic.IRedisSortedSet toSet, T value) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.AddItemToSortedSetAsync(ServiceStack.Redis.Generic.IRedisSortedSetAsync toSet, T value, double score, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.AddItemToSortedSetAsync(ServiceStack.Redis.Generic.IRedisSortedSetAsync toSet, T value, System.Threading.CancellationToken token) => throw null; + public void AddRangeToList(ServiceStack.Redis.Generic.IRedisList fromList, System.Collections.Generic.IEnumerable values) => throw null; + public void AddToRecentsList(T value) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.AddToRecentsListAsync(T value, System.Threading.CancellationToken token) => throw null; + public ServiceStack.Redis.Generic.IRedisTypedClientAsync AsAsync() => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.BackgroundSaveAsync(System.Threading.CancellationToken token) => throw null; + public T BlockingDequeueItemFromList(ServiceStack.Redis.Generic.IRedisList fromList, System.TimeSpan? timeOut) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.BlockingDequeueItemFromListAsync(ServiceStack.Redis.Generic.IRedisListAsync fromList, System.TimeSpan? timeOut, System.Threading.CancellationToken token) => throw null; + public T BlockingPopAndPushItemBetweenLists(ServiceStack.Redis.Generic.IRedisList fromList, ServiceStack.Redis.Generic.IRedisList toList, System.TimeSpan? timeOut) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.BlockingPopAndPushItemBetweenListsAsync(ServiceStack.Redis.Generic.IRedisListAsync fromList, ServiceStack.Redis.Generic.IRedisListAsync toList, System.TimeSpan? timeOut, System.Threading.CancellationToken token) => throw null; + public T BlockingPopItemFromList(ServiceStack.Redis.Generic.IRedisList fromList, System.TimeSpan? timeOut) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.BlockingPopItemFromListAsync(ServiceStack.Redis.Generic.IRedisListAsync fromList, System.TimeSpan? timeOut, System.Threading.CancellationToken token) => throw null; + public T BlockingRemoveStartFromList(ServiceStack.Redis.Generic.IRedisList fromList, System.TimeSpan? timeOut) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.BlockingRemoveStartFromListAsync(ServiceStack.Redis.Generic.IRedisListAsync fromList, System.TimeSpan? timeOut, System.Threading.CancellationToken token) => throw null; + public bool ContainsKey(string key) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.ContainsKeyAsync(string key, System.Threading.CancellationToken token) => throw null; + public static System.Collections.Generic.Dictionary ConvertEachTo(System.Collections.Generic.IDictionary map) => throw null; + public ServiceStack.Redis.Generic.IRedisTypedPipeline CreatePipeline() => throw null; + ServiceStack.Redis.Generic.IRedisTypedPipelineAsync ServiceStack.Redis.Generic.IRedisTypedClientAsync.CreatePipeline() => throw null; + public ServiceStack.Redis.Generic.IRedisTypedTransaction CreateTransaction() => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.Generic.IRedisTypedClientAsync.CreateTransactionAsync(System.Threading.CancellationToken token) => throw null; + public System.Int64 Db { get => throw null; set => throw null; } + System.Int64 ServiceStack.Redis.Generic.IRedisTypedClientAsync.Db { get => throw null; } + public System.Int64 DecrementValue(string key) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.DecrementValueAsync(string key, System.Threading.CancellationToken token) => throw null; + public System.Int64 DecrementValueBy(string key, int count) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.DecrementValueByAsync(string key, int count, System.Threading.CancellationToken token) => throw null; + public void Delete(T entity) => throw null; + public void DeleteAll() => throw null; + System.Threading.Tasks.Task ServiceStack.Data.IEntityStoreAsync.DeleteAllAsync(System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.Task ServiceStack.Data.IEntityStoreAsync.DeleteAsync(T entity, System.Threading.CancellationToken token) => throw null; + public void DeleteById(object id) => throw null; + System.Threading.Tasks.Task ServiceStack.Data.IEntityStoreAsync.DeleteByIdAsync(object id, System.Threading.CancellationToken token) => throw null; + public void DeleteByIds(System.Collections.IEnumerable ids) => throw null; + System.Threading.Tasks.Task ServiceStack.Data.IEntityStoreAsync.DeleteByIdsAsync(System.Collections.IEnumerable ids, System.Threading.CancellationToken token) => throw null; + public void DeleteRelatedEntities(object parentId) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.DeleteRelatedEntitiesAsync(object parentId, System.Threading.CancellationToken token) => throw null; + public void DeleteRelatedEntity(object parentId, object childId) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.DeleteRelatedEntityAsync(object parentId, object childId, System.Threading.CancellationToken token) => throw null; + public T DequeueItemFromList(ServiceStack.Redis.Generic.IRedisList fromList) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.DequeueItemFromListAsync(ServiceStack.Redis.Generic.IRedisListAsync fromList, System.Threading.CancellationToken token) => throw null; + public static T DeserializeFromString(string serializedObj) => throw null; + public T DeserializeValue(System.Byte[] value) => throw null; + public void Discard() => throw null; + public void EnqueueItemOnList(ServiceStack.Redis.Generic.IRedisList fromList, T item) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.EnqueueItemOnListAsync(ServiceStack.Redis.Generic.IRedisListAsync fromList, T item, System.Threading.CancellationToken token) => throw null; + public void Exec() => throw null; + public bool ExpireAt(object id, System.DateTime expireAt) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.ExpireAtAsync(object id, System.DateTime expireAt, System.Threading.CancellationToken token) => throw null; + public bool ExpireEntryAt(string key, System.DateTime expireAt) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.ExpireEntryAtAsync(string key, System.DateTime expireAt, System.Threading.CancellationToken token) => throw null; + public bool ExpireEntryIn(string key, System.TimeSpan expireIn) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.ExpireEntryInAsync(string key, System.TimeSpan expireIn, System.Threading.CancellationToken token) => throw null; + public bool ExpireIn(object id, System.TimeSpan expireIn) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.ExpireInAsync(object id, System.TimeSpan expiresIn, System.Threading.CancellationToken token) => throw null; + public void FlushAll() => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.FlushAllAsync(System.Threading.CancellationToken token) => throw null; + public void FlushDb() => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.FlushDbAsync(System.Threading.CancellationToken token) => throw null; + public void FlushSendBuffer() => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.ForegroundSaveAsync(System.Threading.CancellationToken token) => throw null; + public System.Collections.Generic.IList GetAll() => throw null; + System.Threading.Tasks.Task> ServiceStack.Data.IEntityStoreAsync.GetAllAsync(System.Threading.CancellationToken token) => throw null; + public System.Collections.Generic.Dictionary GetAllEntriesFromHash(ServiceStack.Redis.Generic.IRedisHash hash) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.Generic.IRedisTypedClientAsync.GetAllEntriesFromHashAsync(ServiceStack.Redis.Generic.IRedisHashAsync hash, System.Threading.CancellationToken token) => throw null; + public System.Collections.Generic.List GetAllItemsFromList(ServiceStack.Redis.Generic.IRedisList fromList) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.Generic.IRedisTypedClientAsync.GetAllItemsFromListAsync(ServiceStack.Redis.Generic.IRedisListAsync fromList, System.Threading.CancellationToken token) => throw null; + public System.Collections.Generic.HashSet GetAllItemsFromSet(ServiceStack.Redis.Generic.IRedisSet fromSet) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.Generic.IRedisTypedClientAsync.GetAllItemsFromSetAsync(ServiceStack.Redis.Generic.IRedisSetAsync fromSet, System.Threading.CancellationToken token) => throw null; + public System.Collections.Generic.List GetAllItemsFromSortedSet(ServiceStack.Redis.Generic.IRedisSortedSet set) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.Generic.IRedisTypedClientAsync.GetAllItemsFromSortedSetAsync(ServiceStack.Redis.Generic.IRedisSortedSetAsync set, System.Threading.CancellationToken token) => throw null; + public System.Collections.Generic.List GetAllItemsFromSortedSetDesc(ServiceStack.Redis.Generic.IRedisSortedSet set) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.Generic.IRedisTypedClientAsync.GetAllItemsFromSortedSetDescAsync(ServiceStack.Redis.Generic.IRedisSortedSetAsync set, System.Threading.CancellationToken token) => throw null; + public System.Collections.Generic.List GetAllKeys() => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.Generic.IRedisTypedClientAsync.GetAllKeysAsync(System.Threading.CancellationToken token) => throw null; + public System.Collections.Generic.IDictionary GetAllWithScoresFromSortedSet(ServiceStack.Redis.Generic.IRedisSortedSet set) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.Generic.IRedisTypedClientAsync.GetAllWithScoresFromSortedSetAsync(ServiceStack.Redis.Generic.IRedisSortedSetAsync set, System.Threading.CancellationToken token) => throw null; + public T GetAndSetValue(string key, T value) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.GetAndSetValueAsync(string key, T value, System.Threading.CancellationToken token) => throw null; + public T GetById(object id) => throw null; + System.Threading.Tasks.Task ServiceStack.Data.IEntityStoreAsync.GetByIdAsync(object id, System.Threading.CancellationToken token) => throw null; + public System.Collections.Generic.IList GetByIds(System.Collections.IEnumerable ids) => throw null; + System.Threading.Tasks.Task> ServiceStack.Data.IEntityStoreAsync.GetByIdsAsync(System.Collections.IEnumerable ids, System.Threading.CancellationToken token) => throw null; + public System.Collections.Generic.HashSet GetDifferencesFromSet(ServiceStack.Redis.Generic.IRedisSet fromSet, params ServiceStack.Redis.Generic.IRedisSet[] withSets) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.Generic.IRedisTypedClientAsync.GetDifferencesFromSetAsync(ServiceStack.Redis.Generic.IRedisSetAsync fromSet, params ServiceStack.Redis.Generic.IRedisSetAsync[] withSets) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.Generic.IRedisTypedClientAsync.GetDifferencesFromSetAsync(ServiceStack.Redis.Generic.IRedisSetAsync fromSet, ServiceStack.Redis.Generic.IRedisSetAsync[] withSets, System.Threading.CancellationToken token) => throw null; + public System.Collections.Generic.List GetEarliestFromRecentsList(int skip, int take) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.Generic.IRedisTypedClientAsync.GetEarliestFromRecentsListAsync(int skip, int take, System.Threading.CancellationToken token) => throw null; + public ServiceStack.Redis.RedisKeyType GetEntryType(string key) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.GetEntryTypeAsync(string key, System.Threading.CancellationToken token) => throw null; + public T GetFromHash(object id) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.GetFromHashAsync(object id, System.Threading.CancellationToken token) => throw null; + public ServiceStack.Redis.Generic.IRedisHash GetHash(string hashId) => throw null; + ServiceStack.Redis.Generic.IRedisHashAsync ServiceStack.Redis.Generic.IRedisTypedClientAsync.GetHash(string hashId) => throw null; + public System.Int64 GetHashCount(ServiceStack.Redis.Generic.IRedisHash hash) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.GetHashCountAsync(ServiceStack.Redis.Generic.IRedisHashAsync hash, System.Threading.CancellationToken token) => throw null; + public System.Collections.Generic.List GetHashKeys(ServiceStack.Redis.Generic.IRedisHash hash) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.Generic.IRedisTypedClientAsync.GetHashKeysAsync(ServiceStack.Redis.Generic.IRedisHashAsync hash, System.Threading.CancellationToken token) => throw null; + public System.Collections.Generic.List GetHashValues(ServiceStack.Redis.Generic.IRedisHash hash) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.Generic.IRedisTypedClientAsync.GetHashValuesAsync(ServiceStack.Redis.Generic.IRedisHashAsync hash, System.Threading.CancellationToken token) => throw null; + public System.Collections.Generic.HashSet GetIntersectFromSets(params ServiceStack.Redis.Generic.IRedisSet[] sets) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.Generic.IRedisTypedClientAsync.GetIntersectFromSetsAsync(params ServiceStack.Redis.Generic.IRedisSetAsync[] sets) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.Generic.IRedisTypedClientAsync.GetIntersectFromSetsAsync(ServiceStack.Redis.Generic.IRedisSetAsync[] sets, System.Threading.CancellationToken token) => throw null; + public T GetItemFromList(ServiceStack.Redis.Generic.IRedisList fromList, int listIndex) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.GetItemFromListAsync(ServiceStack.Redis.Generic.IRedisListAsync fromList, int listIndex, System.Threading.CancellationToken token) => throw null; + public System.Int64 GetItemIndexInSortedSet(ServiceStack.Redis.Generic.IRedisSortedSet set, T value) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.GetItemIndexInSortedSetAsync(ServiceStack.Redis.Generic.IRedisSortedSetAsync set, T value, System.Threading.CancellationToken token) => throw null; + public System.Int64 GetItemIndexInSortedSetDesc(ServiceStack.Redis.Generic.IRedisSortedSet set, T value) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.GetItemIndexInSortedSetDescAsync(ServiceStack.Redis.Generic.IRedisSortedSetAsync set, T value, System.Threading.CancellationToken token) => throw null; + public double GetItemScoreInSortedSet(ServiceStack.Redis.Generic.IRedisSortedSet set, T value) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.GetItemScoreInSortedSetAsync(ServiceStack.Redis.Generic.IRedisSortedSetAsync set, T value, System.Threading.CancellationToken token) => throw null; + public System.Collections.Generic.List GetLatestFromRecentsList(int skip, int take) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.Generic.IRedisTypedClientAsync.GetLatestFromRecentsListAsync(int skip, int take, System.Threading.CancellationToken token) => throw null; + public System.Int64 GetListCount(ServiceStack.Redis.Generic.IRedisList fromList) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.GetListCountAsync(ServiceStack.Redis.Generic.IRedisListAsync fromList, System.Threading.CancellationToken token) => throw null; + public System.Int64 GetNextSequence(int incrBy) => throw null; + public System.Int64 GetNextSequence() => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.GetNextSequenceAsync(int incrBy, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.GetNextSequenceAsync(System.Threading.CancellationToken token) => throw null; + public T GetRandomItemFromSet(ServiceStack.Redis.Generic.IRedisSet fromSet) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.GetRandomItemFromSetAsync(ServiceStack.Redis.Generic.IRedisSetAsync fromSet, System.Threading.CancellationToken token) => throw null; + public string GetRandomKey() => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.GetRandomKeyAsync(System.Threading.CancellationToken token) => throw null; + public System.Collections.Generic.List GetRangeFromList(ServiceStack.Redis.Generic.IRedisList fromList, int startingFrom, int endingAt) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.Generic.IRedisTypedClientAsync.GetRangeFromListAsync(ServiceStack.Redis.Generic.IRedisListAsync fromList, int startingFrom, int endingAt, System.Threading.CancellationToken token) => throw null; + public System.Collections.Generic.List GetRangeFromSortedSet(ServiceStack.Redis.Generic.IRedisSortedSet set, int fromRank, int toRank) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.Generic.IRedisTypedClientAsync.GetRangeFromSortedSetAsync(ServiceStack.Redis.Generic.IRedisSortedSetAsync set, int fromRank, int toRank, System.Threading.CancellationToken token) => throw null; + public System.Collections.Generic.List GetRangeFromSortedSetByHighestScore(ServiceStack.Redis.Generic.IRedisSortedSet set, string fromStringScore, string toStringScore, int? skip, int? take) => throw null; + public System.Collections.Generic.List GetRangeFromSortedSetByHighestScore(ServiceStack.Redis.Generic.IRedisSortedSet set, string fromStringScore, string toStringScore) => throw null; + public System.Collections.Generic.List GetRangeFromSortedSetByHighestScore(ServiceStack.Redis.Generic.IRedisSortedSet set, double fromScore, double toScore, int? skip, int? take) => throw null; + public System.Collections.Generic.List GetRangeFromSortedSetByHighestScore(ServiceStack.Redis.Generic.IRedisSortedSet set, double fromScore, double toScore) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.Generic.IRedisTypedClientAsync.GetRangeFromSortedSetByHighestScoreAsync(ServiceStack.Redis.Generic.IRedisSortedSetAsync set, string fromStringScore, string toStringScore, int? skip, int? take, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.Generic.IRedisTypedClientAsync.GetRangeFromSortedSetByHighestScoreAsync(ServiceStack.Redis.Generic.IRedisSortedSetAsync set, string fromStringScore, string toStringScore, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.Generic.IRedisTypedClientAsync.GetRangeFromSortedSetByHighestScoreAsync(ServiceStack.Redis.Generic.IRedisSortedSetAsync set, double fromScore, double toScore, int? skip, int? take, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.Generic.IRedisTypedClientAsync.GetRangeFromSortedSetByHighestScoreAsync(ServiceStack.Redis.Generic.IRedisSortedSetAsync set, double fromScore, double toScore, System.Threading.CancellationToken token) => throw null; + public System.Collections.Generic.List GetRangeFromSortedSetByLowestScore(ServiceStack.Redis.Generic.IRedisSortedSet set, string fromStringScore, string toStringScore, int? skip, int? take) => throw null; + public System.Collections.Generic.List GetRangeFromSortedSetByLowestScore(ServiceStack.Redis.Generic.IRedisSortedSet set, string fromStringScore, string toStringScore) => throw null; + public System.Collections.Generic.List GetRangeFromSortedSetByLowestScore(ServiceStack.Redis.Generic.IRedisSortedSet set, double fromScore, double toScore, int? skip, int? take) => throw null; + public System.Collections.Generic.List GetRangeFromSortedSetByLowestScore(ServiceStack.Redis.Generic.IRedisSortedSet set, double fromScore, double toScore) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.Generic.IRedisTypedClientAsync.GetRangeFromSortedSetByLowestScoreAsync(ServiceStack.Redis.Generic.IRedisSortedSetAsync set, string fromStringScore, string toStringScore, int? skip, int? take, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.Generic.IRedisTypedClientAsync.GetRangeFromSortedSetByLowestScoreAsync(ServiceStack.Redis.Generic.IRedisSortedSetAsync set, string fromStringScore, string toStringScore, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.Generic.IRedisTypedClientAsync.GetRangeFromSortedSetByLowestScoreAsync(ServiceStack.Redis.Generic.IRedisSortedSetAsync set, double fromScore, double toScore, int? skip, int? take, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.Generic.IRedisTypedClientAsync.GetRangeFromSortedSetByLowestScoreAsync(ServiceStack.Redis.Generic.IRedisSortedSetAsync set, double fromScore, double toScore, System.Threading.CancellationToken token) => throw null; + public System.Collections.Generic.List GetRangeFromSortedSetDesc(ServiceStack.Redis.Generic.IRedisSortedSet set, int fromRank, int toRank) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.Generic.IRedisTypedClientAsync.GetRangeFromSortedSetDescAsync(ServiceStack.Redis.Generic.IRedisSortedSetAsync set, int fromRank, int toRank, System.Threading.CancellationToken token) => throw null; + public System.Collections.Generic.IDictionary GetRangeWithScoresFromSortedSet(ServiceStack.Redis.Generic.IRedisSortedSet set, int fromRank, int toRank) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.Generic.IRedisTypedClientAsync.GetRangeWithScoresFromSortedSetAsync(ServiceStack.Redis.Generic.IRedisSortedSetAsync set, int fromRank, int toRank, System.Threading.CancellationToken token) => throw null; + public System.Collections.Generic.IDictionary GetRangeWithScoresFromSortedSetByHighestScore(ServiceStack.Redis.Generic.IRedisSortedSet set, string fromStringScore, string toStringScore, int? skip, int? take) => throw null; + public System.Collections.Generic.IDictionary GetRangeWithScoresFromSortedSetByHighestScore(ServiceStack.Redis.Generic.IRedisSortedSet set, string fromStringScore, string toStringScore) => throw null; + public System.Collections.Generic.IDictionary GetRangeWithScoresFromSortedSetByHighestScore(ServiceStack.Redis.Generic.IRedisSortedSet set, double fromScore, double toScore, int? skip, int? take) => throw null; + public System.Collections.Generic.IDictionary GetRangeWithScoresFromSortedSetByHighestScore(ServiceStack.Redis.Generic.IRedisSortedSet set, double fromScore, double toScore) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.Generic.IRedisTypedClientAsync.GetRangeWithScoresFromSortedSetByHighestScoreAsync(ServiceStack.Redis.Generic.IRedisSortedSetAsync set, string fromStringScore, string toStringScore, int? skip, int? take, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.Generic.IRedisTypedClientAsync.GetRangeWithScoresFromSortedSetByHighestScoreAsync(ServiceStack.Redis.Generic.IRedisSortedSetAsync set, string fromStringScore, string toStringScore, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.Generic.IRedisTypedClientAsync.GetRangeWithScoresFromSortedSetByHighestScoreAsync(ServiceStack.Redis.Generic.IRedisSortedSetAsync set, double fromScore, double toScore, int? skip, int? take, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.Generic.IRedisTypedClientAsync.GetRangeWithScoresFromSortedSetByHighestScoreAsync(ServiceStack.Redis.Generic.IRedisSortedSetAsync set, double fromScore, double toScore, System.Threading.CancellationToken token) => throw null; + public System.Collections.Generic.IDictionary GetRangeWithScoresFromSortedSetByLowestScore(ServiceStack.Redis.Generic.IRedisSortedSet set, string fromStringScore, string toStringScore, int? skip, int? take) => throw null; + public System.Collections.Generic.IDictionary GetRangeWithScoresFromSortedSetByLowestScore(ServiceStack.Redis.Generic.IRedisSortedSet set, string fromStringScore, string toStringScore) => throw null; + public System.Collections.Generic.IDictionary GetRangeWithScoresFromSortedSetByLowestScore(ServiceStack.Redis.Generic.IRedisSortedSet set, double fromScore, double toScore, int? skip, int? take) => throw null; + public System.Collections.Generic.IDictionary GetRangeWithScoresFromSortedSetByLowestScore(ServiceStack.Redis.Generic.IRedisSortedSet set, double fromScore, double toScore) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.Generic.IRedisTypedClientAsync.GetRangeWithScoresFromSortedSetByLowestScoreAsync(ServiceStack.Redis.Generic.IRedisSortedSetAsync set, string fromStringScore, string toStringScore, int? skip, int? take, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.Generic.IRedisTypedClientAsync.GetRangeWithScoresFromSortedSetByLowestScoreAsync(ServiceStack.Redis.Generic.IRedisSortedSetAsync set, string fromStringScore, string toStringScore, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.Generic.IRedisTypedClientAsync.GetRangeWithScoresFromSortedSetByLowestScoreAsync(ServiceStack.Redis.Generic.IRedisSortedSetAsync set, double fromScore, double toScore, int? skip, int? take, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.Generic.IRedisTypedClientAsync.GetRangeWithScoresFromSortedSetByLowestScoreAsync(ServiceStack.Redis.Generic.IRedisSortedSetAsync set, double fromScore, double toScore, System.Threading.CancellationToken token) => throw null; + public System.Collections.Generic.IDictionary GetRangeWithScoresFromSortedSetDesc(ServiceStack.Redis.Generic.IRedisSortedSet set, int fromRank, int toRank) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.Generic.IRedisTypedClientAsync.GetRangeWithScoresFromSortedSetDescAsync(ServiceStack.Redis.Generic.IRedisSortedSetAsync set, int fromRank, int toRank, System.Threading.CancellationToken token) => throw null; + public System.Collections.Generic.List GetRelatedEntities(object parentId) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.Generic.IRedisTypedClientAsync.GetRelatedEntitiesAsync(object parentId, System.Threading.CancellationToken token) => throw null; + public System.Int64 GetRelatedEntitiesCount(object parentId) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.GetRelatedEntitiesCountAsync(object parentId, System.Threading.CancellationToken token) => throw null; + public System.Int64 GetSetCount(ServiceStack.Redis.Generic.IRedisSet set) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.GetSetCountAsync(ServiceStack.Redis.Generic.IRedisSetAsync set, System.Threading.CancellationToken token) => throw null; + public System.Collections.Generic.List GetSortedEntryValues(ServiceStack.Redis.Generic.IRedisSet fromSet, int startingFrom, int endingAt) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.Generic.IRedisTypedClientAsync.GetSortedEntryValuesAsync(ServiceStack.Redis.Generic.IRedisSetAsync fromSet, int startingFrom, int endingAt, System.Threading.CancellationToken token) => throw null; + public System.Int64 GetSortedSetCount(ServiceStack.Redis.Generic.IRedisSortedSet set) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.GetSortedSetCountAsync(ServiceStack.Redis.Generic.IRedisSortedSetAsync set, System.Threading.CancellationToken token) => throw null; + public System.TimeSpan GetTimeToLive(string key) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.GetTimeToLiveAsync(string key, System.Threading.CancellationToken token) => throw null; + public System.Collections.Generic.HashSet GetUnionFromSets(params ServiceStack.Redis.Generic.IRedisSet[] sets) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.Generic.IRedisTypedClientAsync.GetUnionFromSetsAsync(params ServiceStack.Redis.Generic.IRedisSetAsync[] sets) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.Generic.IRedisTypedClientAsync.GetUnionFromSetsAsync(ServiceStack.Redis.Generic.IRedisSetAsync[] sets, System.Threading.CancellationToken token) => throw null; + public T GetValue(string key) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.GetValueAsync(string key, System.Threading.CancellationToken token) => throw null; + public T GetValueFromHash(ServiceStack.Redis.Generic.IRedisHash hash, TKey key) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.GetValueFromHashAsync(ServiceStack.Redis.Generic.IRedisHashAsync hash, TKey key, System.Threading.CancellationToken token) => throw null; + public System.Collections.Generic.List GetValues(System.Collections.Generic.List keys) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.Generic.IRedisTypedClientAsync.GetValuesAsync(System.Collections.Generic.List keys, System.Threading.CancellationToken token) => throw null; + public bool HashContainsEntry(ServiceStack.Redis.Generic.IRedisHash hash, TKey key) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.HashContainsEntryAsync(ServiceStack.Redis.Generic.IRedisHashAsync hash, TKey key, System.Threading.CancellationToken token) => throw null; + public double IncrementItemInSortedSet(ServiceStack.Redis.Generic.IRedisSortedSet set, T value, double incrementBy) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.IncrementItemInSortedSetAsync(ServiceStack.Redis.Generic.IRedisSortedSetAsync set, T value, double incrementBy, System.Threading.CancellationToken token) => throw null; + public System.Int64 IncrementValue(string key) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.IncrementValueAsync(string key, System.Threading.CancellationToken token) => throw null; + public System.Int64 IncrementValueBy(string key, int count) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.IncrementValueByAsync(string key, int count, System.Threading.CancellationToken token) => throw null; + public void InsertAfterItemInList(ServiceStack.Redis.Generic.IRedisList toList, T pivot, T value) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.InsertAfterItemInListAsync(ServiceStack.Redis.Generic.IRedisListAsync toList, T pivot, T value, System.Threading.CancellationToken token) => throw null; + public void InsertBeforeItemInList(ServiceStack.Redis.Generic.IRedisList toList, T pivot, T value) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.InsertBeforeItemInListAsync(ServiceStack.Redis.Generic.IRedisListAsync toList, T pivot, T value, System.Threading.CancellationToken token) => throw null; + public T this[string key] { get => throw null; set => throw null; } + public ServiceStack.Model.IHasNamed> Lists { get => throw null; set => throw null; } + ServiceStack.Model.IHasNamed> ServiceStack.Redis.Generic.IRedisTypedClientAsync.Lists { get => throw null; } + public void MoveBetweenSets(ServiceStack.Redis.Generic.IRedisSet fromSet, ServiceStack.Redis.Generic.IRedisSet toSet, T item) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.MoveBetweenSetsAsync(ServiceStack.Redis.Generic.IRedisSetAsync fromSet, ServiceStack.Redis.Generic.IRedisSetAsync toSet, T item, System.Threading.CancellationToken token) => throw null; + public void Multi() => throw null; + public ServiceStack.Redis.IRedisNativeClient NativeClient { get => throw null; } + public ServiceStack.Redis.Pipeline.IRedisPipelineShared Pipeline { get => throw null; set => throw null; } + public T PopAndPushItemBetweenLists(ServiceStack.Redis.Generic.IRedisList fromList, ServiceStack.Redis.Generic.IRedisList toList) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.PopAndPushItemBetweenListsAsync(ServiceStack.Redis.Generic.IRedisListAsync fromList, ServiceStack.Redis.Generic.IRedisListAsync toList, System.Threading.CancellationToken token) => throw null; + public T PopItemFromList(ServiceStack.Redis.Generic.IRedisList fromList) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.PopItemFromListAsync(ServiceStack.Redis.Generic.IRedisListAsync fromList, System.Threading.CancellationToken token) => throw null; + public T PopItemFromSet(ServiceStack.Redis.Generic.IRedisSet fromSet) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.PopItemFromSetAsync(ServiceStack.Redis.Generic.IRedisSetAsync fromSet, System.Threading.CancellationToken token) => throw null; + public T PopItemWithHighestScoreFromSortedSet(ServiceStack.Redis.Generic.IRedisSortedSet fromSet) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.PopItemWithHighestScoreFromSortedSetAsync(ServiceStack.Redis.Generic.IRedisSortedSetAsync fromSet, System.Threading.CancellationToken token) => throw null; + public T PopItemWithLowestScoreFromSortedSet(ServiceStack.Redis.Generic.IRedisSortedSet fromSet) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.PopItemWithLowestScoreFromSortedSetAsync(ServiceStack.Redis.Generic.IRedisSortedSetAsync fromSet, System.Threading.CancellationToken token) => throw null; + public void PrependItemToList(ServiceStack.Redis.Generic.IRedisList fromList, T value) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.PrependItemToListAsync(ServiceStack.Redis.Generic.IRedisListAsync fromList, T value, System.Threading.CancellationToken token) => throw null; + public void PushItemToList(ServiceStack.Redis.Generic.IRedisList fromList, T item) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.PushItemToListAsync(ServiceStack.Redis.Generic.IRedisListAsync fromList, T item, System.Threading.CancellationToken token) => throw null; + public ServiceStack.Redis.IRedisClient RedisClient { get => throw null; } + ServiceStack.Redis.IRedisClientAsync ServiceStack.Redis.Generic.IRedisTypedClientAsync.RedisClient { get => throw null; } + public RedisTypedClient(ServiceStack.Redis.RedisClient client) => throw null; + public void RemoveAllFromList(ServiceStack.Redis.Generic.IRedisList fromList) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.RemoveAllFromListAsync(ServiceStack.Redis.Generic.IRedisListAsync fromList, System.Threading.CancellationToken token) => throw null; + public T RemoveEndFromList(ServiceStack.Redis.Generic.IRedisList fromList) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.RemoveEndFromListAsync(ServiceStack.Redis.Generic.IRedisListAsync fromList, System.Threading.CancellationToken token) => throw null; + public bool RemoveEntry(string key) => throw null; + public bool RemoveEntry(params string[] keys) => throw null; + public bool RemoveEntry(params ServiceStack.Model.IHasStringId[] entities) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.RemoveEntryAsync(string[] keys, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.RemoveEntryAsync(string key, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.RemoveEntryAsync(params string[] args) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.RemoveEntryAsync(params ServiceStack.Model.IHasStringId[] entities) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.RemoveEntryAsync(ServiceStack.Model.IHasStringId[] entities, System.Threading.CancellationToken token) => throw null; + public bool RemoveEntryFromHash(ServiceStack.Redis.Generic.IRedisHash hash, TKey key) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.RemoveEntryFromHashAsync(ServiceStack.Redis.Generic.IRedisHashAsync hash, TKey key, System.Threading.CancellationToken token) => throw null; + public System.Int64 RemoveItemFromList(ServiceStack.Redis.Generic.IRedisList fromList, T value, int noOfMatches) => throw null; + public System.Int64 RemoveItemFromList(ServiceStack.Redis.Generic.IRedisList fromList, T value) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.RemoveItemFromListAsync(ServiceStack.Redis.Generic.IRedisListAsync fromList, T value, int noOfMatches, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.RemoveItemFromListAsync(ServiceStack.Redis.Generic.IRedisListAsync fromList, T value, System.Threading.CancellationToken token) => throw null; + public void RemoveItemFromSet(ServiceStack.Redis.Generic.IRedisSet fromSet, T item) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.RemoveItemFromSetAsync(ServiceStack.Redis.Generic.IRedisSetAsync fromSet, T item, System.Threading.CancellationToken token) => throw null; + public bool RemoveItemFromSortedSet(ServiceStack.Redis.Generic.IRedisSortedSet fromSet, T value) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.RemoveItemFromSortedSetAsync(ServiceStack.Redis.Generic.IRedisSortedSetAsync fromSet, T value, System.Threading.CancellationToken token) => throw null; + public System.Int64 RemoveRangeFromSortedSet(ServiceStack.Redis.Generic.IRedisSortedSet set, int minRank, int maxRank) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.RemoveRangeFromSortedSetAsync(ServiceStack.Redis.Generic.IRedisSortedSetAsync set, int minRank, int maxRank, System.Threading.CancellationToken token) => throw null; + public System.Int64 RemoveRangeFromSortedSetByScore(ServiceStack.Redis.Generic.IRedisSortedSet set, double fromScore, double toScore) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.RemoveRangeFromSortedSetByScoreAsync(ServiceStack.Redis.Generic.IRedisSortedSetAsync set, double fromScore, double toScore, System.Threading.CancellationToken token) => throw null; + public T RemoveStartFromList(ServiceStack.Redis.Generic.IRedisList fromList) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.RemoveStartFromListAsync(ServiceStack.Redis.Generic.IRedisListAsync fromList, System.Threading.CancellationToken token) => throw null; + public void ResetSendBuffer() => throw null; + public void Save() => throw null; + public void SaveAsync() => throw null; + public T[] SearchKeys(string pattern) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.SearchKeysAsync(string pattern, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.SelectAsync(System.Int64 db, System.Threading.CancellationToken token) => throw null; + public string SequenceKey { get => throw null; set => throw null; } + public System.Byte[] SerializeValue(T value) => throw null; + public bool SetContainsItem(ServiceStack.Redis.Generic.IRedisSet set, T item) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.SetContainsItemAsync(ServiceStack.Redis.Generic.IRedisSetAsync set, T item, System.Threading.CancellationToken token) => throw null; + public bool SetEntryInHash(ServiceStack.Redis.Generic.IRedisHash hash, TKey key, T value) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.SetEntryInHashAsync(ServiceStack.Redis.Generic.IRedisHashAsync hash, TKey key, T value, System.Threading.CancellationToken token) => throw null; + public bool SetEntryInHashIfNotExists(ServiceStack.Redis.Generic.IRedisHash hash, TKey key, T value) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.SetEntryInHashIfNotExistsAsync(ServiceStack.Redis.Generic.IRedisHashAsync hash, TKey key, T value, System.Threading.CancellationToken token) => throw null; + public void SetItemInList(ServiceStack.Redis.Generic.IRedisList toList, int listIndex, T value) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.SetItemInListAsync(ServiceStack.Redis.Generic.IRedisListAsync toList, int listIndex, T value, System.Threading.CancellationToken token) => throw null; + public void SetRangeInHash(ServiceStack.Redis.Generic.IRedisHash hash, System.Collections.Generic.IEnumerable> keyValuePairs) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.SetRangeInHashAsync(ServiceStack.Redis.Generic.IRedisHashAsync hash, System.Collections.Generic.IEnumerable> keyValuePairs, System.Threading.CancellationToken token) => throw null; + public void SetSequence(int value) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.SetSequenceAsync(int value, System.Threading.CancellationToken token) => throw null; + public void SetValue(string key, T entity, System.TimeSpan expireIn) => throw null; + public void SetValue(string key, T entity) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.SetValueAsync(string key, T entity, System.TimeSpan expireIn, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.SetValueAsync(string key, T entity, System.Threading.CancellationToken token) => throw null; + public bool SetValueIfExists(string key, T entity) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.SetValueIfExistsAsync(string key, T entity, System.Threading.CancellationToken token) => throw null; + public bool SetValueIfNotExists(string key, T entity) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.SetValueIfNotExistsAsync(string key, T entity, System.Threading.CancellationToken token) => throw null; + public ServiceStack.Model.IHasNamed> Sets { get => throw null; set => throw null; } + ServiceStack.Model.IHasNamed> ServiceStack.Redis.Generic.IRedisTypedClientAsync.Sets { get => throw null; } + public System.Collections.Generic.List SortList(ServiceStack.Redis.Generic.IRedisList fromList, int startingFrom, int endingAt) => throw null; + System.Threading.Tasks.ValueTask> ServiceStack.Redis.Generic.IRedisTypedClientAsync.SortListAsync(ServiceStack.Redis.Generic.IRedisListAsync fromList, int startingFrom, int endingAt, System.Threading.CancellationToken token) => throw null; + public bool SortedSetContainsItem(ServiceStack.Redis.Generic.IRedisSortedSet set, T value) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.SortedSetContainsItemAsync(ServiceStack.Redis.Generic.IRedisSortedSetAsync set, T value, System.Threading.CancellationToken token) => throw null; + public ServiceStack.Model.IHasNamed> SortedSets { get => throw null; set => throw null; } + ServiceStack.Model.IHasNamed> ServiceStack.Redis.Generic.IRedisTypedClientAsync.SortedSets { get => throw null; } + public T Store(T entity, System.TimeSpan expireIn) => throw null; + public T Store(T entity) => throw null; + public void StoreAll(System.Collections.Generic.IEnumerable entities) => throw null; + System.Threading.Tasks.Task ServiceStack.Data.IEntityStoreAsync.StoreAllAsync(System.Collections.Generic.IEnumerable entities, System.Threading.CancellationToken token) => throw null; + public void StoreAsHash(T entity) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.StoreAsHashAsync(T entity, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.StoreAsync(T entity, System.TimeSpan expireIn, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.Task ServiceStack.Data.IEntityStoreAsync.StoreAsync(T entity, System.Threading.CancellationToken token) => throw null; + public void StoreDifferencesFromSet(ServiceStack.Redis.Generic.IRedisSet intoSet, ServiceStack.Redis.Generic.IRedisSet fromSet, params ServiceStack.Redis.Generic.IRedisSet[] withSets) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.StoreDifferencesFromSetAsync(ServiceStack.Redis.Generic.IRedisSetAsync intoSet, ServiceStack.Redis.Generic.IRedisSetAsync fromSet, params ServiceStack.Redis.Generic.IRedisSetAsync[] withSets) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.StoreDifferencesFromSetAsync(ServiceStack.Redis.Generic.IRedisSetAsync intoSet, ServiceStack.Redis.Generic.IRedisSetAsync fromSet, ServiceStack.Redis.Generic.IRedisSetAsync[] withSets, System.Threading.CancellationToken token) => throw null; + public void StoreIntersectFromSets(ServiceStack.Redis.Generic.IRedisSet intoSet, params ServiceStack.Redis.Generic.IRedisSet[] sets) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.StoreIntersectFromSetsAsync(ServiceStack.Redis.Generic.IRedisSetAsync intoSet, params ServiceStack.Redis.Generic.IRedisSetAsync[] sets) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.StoreIntersectFromSetsAsync(ServiceStack.Redis.Generic.IRedisSetAsync intoSet, ServiceStack.Redis.Generic.IRedisSetAsync[] sets, System.Threading.CancellationToken token) => throw null; + public System.Int64 StoreIntersectFromSortedSets(ServiceStack.Redis.Generic.IRedisSortedSet intoSetId, params ServiceStack.Redis.Generic.IRedisSortedSet[] setIds) => throw null; + public System.Int64 StoreIntersectFromSortedSets(ServiceStack.Redis.Generic.IRedisSortedSet intoSetId, ServiceStack.Redis.Generic.IRedisSortedSet[] setIds, string[] args) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.StoreIntersectFromSortedSetsAsync(ServiceStack.Redis.Generic.IRedisSortedSetAsync intoSetId, params ServiceStack.Redis.Generic.IRedisSortedSetAsync[] setIds) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.StoreIntersectFromSortedSetsAsync(ServiceStack.Redis.Generic.IRedisSortedSetAsync intoSetId, ServiceStack.Redis.Generic.IRedisSortedSetAsync[] setIds, string[] args, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.StoreIntersectFromSortedSetsAsync(ServiceStack.Redis.Generic.IRedisSortedSetAsync intoSetId, ServiceStack.Redis.Generic.IRedisSortedSetAsync[] setIds, System.Threading.CancellationToken token) => throw null; + public void StoreRelatedEntities(object parentId, params TChild[] children) => throw null; + public void StoreRelatedEntities(object parentId, System.Collections.Generic.List children) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.StoreRelatedEntitiesAsync(object parentId, params TChild[] children) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.StoreRelatedEntitiesAsync(object parentId, TChild[] children, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.StoreRelatedEntitiesAsync(object parentId, System.Collections.Generic.List children, System.Threading.CancellationToken token) => throw null; + public void StoreUnionFromSets(ServiceStack.Redis.Generic.IRedisSet intoSet, params ServiceStack.Redis.Generic.IRedisSet[] sets) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.StoreUnionFromSetsAsync(ServiceStack.Redis.Generic.IRedisSetAsync intoSet, params ServiceStack.Redis.Generic.IRedisSetAsync[] sets) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.StoreUnionFromSetsAsync(ServiceStack.Redis.Generic.IRedisSetAsync intoSet, ServiceStack.Redis.Generic.IRedisSetAsync[] sets, System.Threading.CancellationToken token) => throw null; + public System.Int64 StoreUnionFromSortedSets(ServiceStack.Redis.Generic.IRedisSortedSet intoSetId, params ServiceStack.Redis.Generic.IRedisSortedSet[] setIds) => throw null; + public System.Int64 StoreUnionFromSortedSets(ServiceStack.Redis.Generic.IRedisSortedSet intoSetId, ServiceStack.Redis.Generic.IRedisSortedSet[] setIds, string[] args) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.StoreUnionFromSortedSetsAsync(ServiceStack.Redis.Generic.IRedisSortedSetAsync intoSetId, params ServiceStack.Redis.Generic.IRedisSortedSetAsync[] setIds) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.StoreUnionFromSortedSetsAsync(ServiceStack.Redis.Generic.IRedisSortedSetAsync intoSetId, ServiceStack.Redis.Generic.IRedisSortedSetAsync[] setIds, string[] args, System.Threading.CancellationToken token) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.StoreUnionFromSortedSetsAsync(ServiceStack.Redis.Generic.IRedisSortedSetAsync intoSetId, ServiceStack.Redis.Generic.IRedisSortedSetAsync[] setIds, System.Threading.CancellationToken token) => throw null; + public ServiceStack.Redis.IRedisTransactionBase Transaction { get => throw null; set => throw null; } + public void TrimList(ServiceStack.Redis.Generic.IRedisList fromList, int keepStartingFrom, int keepEndingAt) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Generic.IRedisTypedClientAsync.TrimListAsync(ServiceStack.Redis.Generic.IRedisListAsync fromList, int keepStartingFrom, int keepEndingAt, System.Threading.CancellationToken token) => throw null; + public ServiceStack.Redis.IRedisSet TypeIdsSet { get => throw null; } + ServiceStack.Redis.IRedisSetAsync ServiceStack.Redis.Generic.IRedisTypedClientAsync.TypeIdsSet { get => throw null; } + public string TypeIdsSetKey { get => throw null; set => throw null; } + public string TypeLockKey { get => throw null; set => throw null; } + public void UnWatch() => throw null; + public string UrnKey(T entity) => throw null; + public void Watch(params string[] keys) => throw null; + } + + // Generated from `ServiceStack.Redis.Generic.RedisTypedCommandQueue<>` in `ServiceStack.Redis, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class RedisTypedCommandQueue : ServiceStack.Redis.RedisQueueCompletableOperation + { + public void QueueCommand(System.Func, string> command, System.Action onSuccessCallback, System.Action onErrorCallback) => throw null; + public void QueueCommand(System.Func, string> command, System.Action onSuccessCallback) => throw null; + public void QueueCommand(System.Func, string> command) => throw null; + public void QueueCommand(System.Func, int> command, System.Action onSuccessCallback, System.Action onErrorCallback) => throw null; + public void QueueCommand(System.Func, int> command, System.Action onSuccessCallback) => throw null; + public void QueueCommand(System.Func, int> command) => throw null; + public void QueueCommand(System.Func, double> command, System.Action onSuccessCallback, System.Action onErrorCallback) => throw null; + public void QueueCommand(System.Func, double> command, System.Action onSuccessCallback) => throw null; + public void QueueCommand(System.Func, double> command) => throw null; + public void QueueCommand(System.Func, bool> command, System.Action onSuccessCallback, System.Action onErrorCallback) => throw null; + public void QueueCommand(System.Func, bool> command, System.Action onSuccessCallback) => throw null; + public void QueueCommand(System.Func, bool> command) => throw null; + public void QueueCommand(System.Func, T> command, System.Action onSuccessCallback, System.Action onErrorCallback) => throw null; + public void QueueCommand(System.Func, T> command, System.Action onSuccessCallback) => throw null; + public void QueueCommand(System.Func, T> command) => throw null; + public void QueueCommand(System.Func, System.Int64> command, System.Action onSuccessCallback, System.Action onErrorCallback) => throw null; + public void QueueCommand(System.Func, System.Int64> command, System.Action onSuccessCallback) => throw null; + public void QueueCommand(System.Func, System.Int64> command) => throw null; + public void QueueCommand(System.Func, System.Collections.Generic.List> command, System.Action> onSuccessCallback, System.Action onErrorCallback) => throw null; + public void QueueCommand(System.Func, System.Collections.Generic.List> command, System.Action> onSuccessCallback) => throw null; + public void QueueCommand(System.Func, System.Collections.Generic.List> command) => throw null; + public void QueueCommand(System.Func, System.Collections.Generic.List> command, System.Action> onSuccessCallback, System.Action onErrorCallback) => throw null; + public void QueueCommand(System.Func, System.Collections.Generic.List> command, System.Action> onSuccessCallback) => throw null; + public void QueueCommand(System.Func, System.Collections.Generic.List> command) => throw null; + public void QueueCommand(System.Func, System.Collections.Generic.HashSet> command, System.Action> onSuccessCallback, System.Action onErrorCallback) => throw null; + public void QueueCommand(System.Func, System.Collections.Generic.HashSet> command, System.Action> onSuccessCallback) => throw null; + public void QueueCommand(System.Func, System.Collections.Generic.HashSet> command) => throw null; + public void QueueCommand(System.Func, System.Collections.Generic.HashSet> command, System.Action> onSuccessCallback, System.Action onErrorCallback) => throw null; + public void QueueCommand(System.Func, System.Collections.Generic.HashSet> command, System.Action> onSuccessCallback) => throw null; + public void QueueCommand(System.Func, System.Collections.Generic.HashSet> command) => throw null; + public void QueueCommand(System.Func, System.Byte[][]> command, System.Action onSuccessCallback, System.Action onErrorCallback) => throw null; + public void QueueCommand(System.Func, System.Byte[][]> command, System.Action onSuccessCallback) => throw null; + public void QueueCommand(System.Func, System.Byte[][]> command) => throw null; + public void QueueCommand(System.Func, System.Byte[]> command, System.Action onSuccessCallback, System.Action onErrorCallback) => throw null; + public void QueueCommand(System.Func, System.Byte[]> command, System.Action onSuccessCallback) => throw null; + public void QueueCommand(System.Func, System.Byte[]> command) => throw null; + public void QueueCommand(System.Action> command, System.Action onSuccessCallback, System.Action onErrorCallback) => throw null; + public void QueueCommand(System.Action> command, System.Action onSuccessCallback) => throw null; + public void QueueCommand(System.Action> command) => throw null; + internal RedisTypedCommandQueue(ServiceStack.Redis.Generic.RedisTypedClient redisClient) => throw null; + } + + } + namespace Pipeline + { + // Generated from `ServiceStack.Redis.Pipeline.RedisPipelineCommand` in `ServiceStack.Redis, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class RedisPipelineCommand + { + public void Flush() => throw null; + public System.Collections.Generic.List ReadAllAsInts() => throw null; + public bool ReadAllAsIntsHaveSuccess() => throw null; + public RedisPipelineCommand(ServiceStack.Redis.RedisNativeClient client) => throw null; + public void WriteCommand(params System.Byte[][] cmdWithBinaryArgs) => throw null; + } + + } + namespace Support + { + // Generated from `ServiceStack.Redis.Support.ConsistentHash<>` in `ServiceStack.Redis, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ConsistentHash + { + public void AddTarget(T node, int weight) => throw null; + public ConsistentHash(System.Collections.Generic.IEnumerable> nodes, System.Func hashFunction) => throw null; + public ConsistentHash(System.Collections.Generic.IEnumerable> nodes) => throw null; + public ConsistentHash() => throw null; + public T GetTarget(string key) => throw null; + public static System.UInt64 Md5Hash(string key) => throw null; + public static System.UInt64 ModifiedBinarySearch(System.UInt64[] sortedArray, System.UInt64 val) => throw null; + } + + // Generated from `ServiceStack.Redis.Support.IOrderedDictionary<,>` in `ServiceStack.Redis, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IOrderedDictionary : System.Collections.Specialized.IOrderedDictionary, System.Collections.IEnumerable, System.Collections.IDictionary, System.Collections.ICollection, System.Collections.Generic.IEnumerable>, System.Collections.Generic.IDictionary, System.Collections.Generic.ICollection> + { + int Add(TKey key, TValue value); + void Insert(int index, TKey key, TValue value); + TValue this[int index] { get; set; } + } + + // Generated from `ServiceStack.Redis.Support.ISerializer` in `ServiceStack.Redis, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface ISerializer + { + object Deserialize(System.Byte[] someBytes); + System.Byte[] Serialize(object value); + } + + // Generated from `ServiceStack.Redis.Support.ObjectSerializer` in `ServiceStack.Redis, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ObjectSerializer : ServiceStack.Redis.Support.ISerializer + { + public virtual object Deserialize(System.Byte[] someBytes) => throw null; + public ObjectSerializer() => throw null; + public virtual System.Byte[] Serialize(object value) => throw null; + protected System.Runtime.Serialization.Formatters.Binary.BinaryFormatter bf; + } + + // Generated from `ServiceStack.Redis.Support.OptimizedObjectSerializer` in `ServiceStack.Redis, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class OptimizedObjectSerializer : ServiceStack.Redis.Support.ObjectSerializer + { + public override object Deserialize(System.Byte[] someBytes) => throw null; + public OptimizedObjectSerializer() => throw null; + public override System.Byte[] Serialize(object value) => throw null; + } + + // Generated from `ServiceStack.Redis.Support.OrderedDictionary<,>` in `ServiceStack.Redis, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class OrderedDictionary : System.Collections.Specialized.IOrderedDictionary, System.Collections.IEnumerable, System.Collections.IDictionary, System.Collections.ICollection, System.Collections.Generic.IEnumerable>, System.Collections.Generic.IDictionary, System.Collections.Generic.ICollection>, ServiceStack.Redis.Support.IOrderedDictionary + { + void System.Collections.IDictionary.Add(object key, object value) => throw null; + void System.Collections.Generic.IDictionary.Add(TKey key, TValue value) => throw null; + void System.Collections.Generic.ICollection>.Add(System.Collections.Generic.KeyValuePair item) => throw null; + public int Add(TKey key, TValue value) => throw null; + public void Clear() => throw null; + bool System.Collections.IDictionary.Contains(object key) => throw null; + bool System.Collections.Generic.ICollection>.Contains(System.Collections.Generic.KeyValuePair item) => throw null; + public bool ContainsKey(TKey key) => throw null; + void System.Collections.ICollection.CopyTo(System.Array array, int index) => throw null; + void System.Collections.Generic.ICollection>.CopyTo(System.Collections.Generic.KeyValuePair[] array, int arrayIndex) => throw null; + public int Count { get => throw null; } + System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() => throw null; + System.Collections.IDictionaryEnumerator System.Collections.Specialized.IOrderedDictionary.GetEnumerator() => throw null; + System.Collections.IDictionaryEnumerator System.Collections.IDictionary.GetEnumerator() => throw null; + System.Collections.Generic.IEnumerator> System.Collections.Generic.IEnumerable>.GetEnumerator() => throw null; + public int IndexOfKey(TKey key) => throw null; + void System.Collections.Specialized.IOrderedDictionary.Insert(int index, object key, object value) => throw null; + public void Insert(int index, TKey key, TValue value) => throw null; + bool System.Collections.IDictionary.IsFixedSize { get => throw null; } + public bool IsReadOnly { get => throw null; } + bool System.Collections.ICollection.IsSynchronized { get => throw null; } + public TValue this[int index] { get => throw null; set => throw null; } + public TValue this[TKey key] { get => throw null; set => throw null; } + object System.Collections.Specialized.IOrderedDictionary.this[int index] { get => throw null; set => throw null; } + object System.Collections.IDictionary.this[object key] { get => throw null; set => throw null; } + public System.Collections.Generic.ICollection Keys { get => throw null; } + System.Collections.ICollection System.Collections.IDictionary.Keys { get => throw null; } + public OrderedDictionary(int capacity, System.Collections.Generic.IEqualityComparer comparer) => throw null; + public OrderedDictionary(int capacity) => throw null; + public OrderedDictionary(System.Collections.Generic.IEqualityComparer comparer) => throw null; + public OrderedDictionary() => throw null; + void System.Collections.IDictionary.Remove(object key) => throw null; + public bool Remove(TKey key) => throw null; + bool System.Collections.Generic.ICollection>.Remove(System.Collections.Generic.KeyValuePair item) => throw null; + public void RemoveAt(int index) => throw null; + object System.Collections.ICollection.SyncRoot { get => throw null; } + public bool TryGetValue(TKey key, out TValue value) => throw null; + public System.Collections.Generic.ICollection Values { get => throw null; } + System.Collections.ICollection System.Collections.IDictionary.Values { get => throw null; } + } + + // Generated from `ServiceStack.Redis.Support.RedisNamespace` in `ServiceStack.Redis, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class RedisNamespace + { + public System.Int64 GetGeneration() => throw null; + public string GetGenerationKey() => throw null; + public string GetGlobalKeysKey() => throw null; + public string GlobalCacheKey(object key) => throw null; + public string GlobalKey(object key, int numUniquePrefixes) => throw null; + public string GlobalLockKey(object key) => throw null; + public const string KeyTag = default; + public ServiceStack.Redis.Support.Locking.ILockingStrategy LockingStrategy { get => throw null; set => throw null; } + public const string NamespaceTag = default; + public const string NamespacesGarbageKey = default; + public const int NumTagsForKey = default; + public const int NumTagsForLockKey = default; + public RedisNamespace(string name) => throw null; + public void SetGeneration(System.Int64 generation) => throw null; + } + + // Generated from `ServiceStack.Redis.Support.SerializedObjectWrapper` in `ServiceStack.Redis, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public struct SerializedObjectWrapper + { + public System.ArraySegment Data { get => throw null; set => throw null; } + public System.UInt16 Flags { get => throw null; set => throw null; } + public SerializedObjectWrapper(System.UInt16 flags, System.ArraySegment data) => throw null; + // Stub generator skipped constructor + } + + namespace Diagnostic + { + // Generated from `ServiceStack.Redis.Support.Diagnostic.InvokeEventArgs` in `ServiceStack.Redis, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class InvokeEventArgs : System.EventArgs + { + public InvokeEventArgs(System.Reflection.MethodInfo methodInfo) => throw null; + public System.Reflection.MethodInfo MethodInfo { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.Redis.Support.Diagnostic.TrackingFrame` in `ServiceStack.Redis, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class TrackingFrame : System.IEquatable + { + public override bool Equals(object obj) => throw null; + public bool Equals(ServiceStack.Redis.Support.Diagnostic.TrackingFrame other) => throw null; + public override int GetHashCode() => throw null; + public System.Guid Id { get => throw null; set => throw null; } + public System.DateTime Initialised { get => throw null; set => throw null; } + public System.Type ProvidedToInstanceOfType { get => throw null; set => throw null; } + public TrackingFrame() => throw null; + } + + } + namespace Locking + { + // Generated from `ServiceStack.Redis.Support.Locking.DisposableDistributedLock` in `ServiceStack.Redis, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class DisposableDistributedLock : System.IDisposable + { + public DisposableDistributedLock(ServiceStack.Redis.IRedisClient client, string globalLockKey, int acquisitionTimeout, int lockTimeout) => throw null; + public void Dispose() => throw null; + public System.Int64 LockExpire { get => throw null; } + public System.Int64 LockState { get => throw null; } + } + + // Generated from `ServiceStack.Redis.Support.Locking.DistributedLock` in `ServiceStack.Redis, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class DistributedLock : ServiceStack.Redis.Support.Locking.IDistributedLockAsync, ServiceStack.Redis.Support.Locking.IDistributedLock + { + public ServiceStack.Redis.Support.Locking.IDistributedLockAsync AsAsync() => throw null; + public DistributedLock() => throw null; + public const int LOCK_ACQUIRED = default; + public const int LOCK_NOT_ACQUIRED = default; + public const int LOCK_RECOVERED = default; + public virtual System.Int64 Lock(string key, int acquisitionTimeout, int lockTimeout, out System.Int64 lockExpire, ServiceStack.Redis.IRedisClient client) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Support.Locking.IDistributedLockAsync.LockAsync(string key, int acquisitionTimeout, int lockTimeout, ServiceStack.Redis.IRedisClientAsync client, System.Threading.CancellationToken token) => throw null; + public virtual bool Unlock(string key, System.Int64 lockExpire, ServiceStack.Redis.IRedisClient client) => throw null; + System.Threading.Tasks.ValueTask ServiceStack.Redis.Support.Locking.IDistributedLockAsync.UnlockAsync(string key, System.Int64 lockExpire, ServiceStack.Redis.IRedisClientAsync client, System.Threading.CancellationToken token) => throw null; + } + + // Generated from `ServiceStack.Redis.Support.Locking.IDistributedLock` in `ServiceStack.Redis, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IDistributedLock + { + System.Int64 Lock(string key, int acquisitionTimeout, int lockTimeout, out System.Int64 lockExpire, ServiceStack.Redis.IRedisClient client); + bool Unlock(string key, System.Int64 lockExpire, ServiceStack.Redis.IRedisClient client); + } + + // Generated from `ServiceStack.Redis.Support.Locking.IDistributedLockAsync` in `ServiceStack.Redis, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IDistributedLockAsync + { + System.Threading.Tasks.ValueTask LockAsync(string key, int acquisitionTimeout, int lockTimeout, ServiceStack.Redis.IRedisClientAsync client, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.ValueTask UnlockAsync(string key, System.Int64 lockExpire, ServiceStack.Redis.IRedisClientAsync client, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + } + + // Generated from `ServiceStack.Redis.Support.Locking.ILockingStrategy` in `ServiceStack.Redis, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface ILockingStrategy + { + System.IDisposable ReadLock(); + System.IDisposable WriteLock(); + } + + // Generated from `ServiceStack.Redis.Support.Locking.LockState` in `ServiceStack.Redis, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public struct LockState + { + public void Deconstruct(out System.Int64 result, out System.Int64 expiration) => throw null; + public override bool Equals(object obj) => throw null; + public System.Int64 Expiration { get => throw null; } + public override int GetHashCode() => throw null; + public LockState(System.Int64 result, System.Int64 expiration) => throw null; + // Stub generator skipped constructor + public System.Int64 Result { get => throw null; } + public override string ToString() => throw null; + } + + // Generated from `ServiceStack.Redis.Support.Locking.NoLockingStrategy` in `ServiceStack.Redis, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class NoLockingStrategy : ServiceStack.Redis.Support.Locking.ILockingStrategy + { + public NoLockingStrategy() => throw null; + public System.IDisposable ReadLock() => throw null; + public System.IDisposable WriteLock() => throw null; + } + + // Generated from `ServiceStack.Redis.Support.Locking.ReadLock` in `ServiceStack.Redis, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ReadLock : System.IDisposable + { + public void Dispose() => throw null; + public ReadLock(System.Threading.ReaderWriterLockSlim lockObject) => throw null; + } + + // Generated from `ServiceStack.Redis.Support.Locking.ReaderWriterLockingStrategy` in `ServiceStack.Redis, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ReaderWriterLockingStrategy : ServiceStack.Redis.Support.Locking.ILockingStrategy + { + public System.IDisposable ReadLock() => throw null; + public ReaderWriterLockingStrategy() => throw null; + public System.IDisposable WriteLock() => throw null; + } + + // Generated from `ServiceStack.Redis.Support.Locking.WriteLock` in `ServiceStack.Redis, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class WriteLock : System.IDisposable + { + public void Dispose() => throw null; + public WriteLock(System.Threading.ReaderWriterLockSlim lockObject) => throw null; + } + + } + namespace Queue + { + // Generated from `ServiceStack.Redis.Support.Queue.IChronologicalWorkQueue<>` in `ServiceStack.Redis, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IChronologicalWorkQueue : System.IDisposable where T : class + { + System.Collections.Generic.IList> Dequeue(double minTime, double maxTime, int maxBatchSize); + void Enqueue(string workItemId, T workItem, double time); + } + + // Generated from `ServiceStack.Redis.Support.Queue.ISequentialData<>` in `ServiceStack.Redis, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface ISequentialData + { + string DequeueId { get; } + System.Collections.Generic.IList DequeueItems { get; } + void DoneProcessedWorkItem(); + void PopAndUnlock(); + void UpdateNextUnprocessed(T newWorkItem); + } + + // Generated from `ServiceStack.Redis.Support.Queue.ISequentialWorkQueue<>` in `ServiceStack.Redis, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface ISequentialWorkQueue : System.IDisposable where T : class + { + ServiceStack.Redis.Support.Queue.ISequentialData Dequeue(int maxBatchSize); + void Enqueue(string workItemId, T workItem); + bool HarvestZombies(); + bool PrepareNextWorkItem(); + void Update(string workItemId, int index, T newWorkItem); + } + + // Generated from `ServiceStack.Redis.Support.Queue.ISimpleWorkQueue<>` in `ServiceStack.Redis, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface ISimpleWorkQueue : System.IDisposable where T : class + { + System.Collections.Generic.IList Dequeue(int maxBatchSize); + void Enqueue(T workItem); + } + + namespace Implementation + { + // Generated from `ServiceStack.Redis.Support.Queue.Implementation.RedisChronologicalWorkQueue<>` in `ServiceStack.Redis, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class RedisChronologicalWorkQueue : ServiceStack.Redis.Support.Queue.Implementation.RedisWorkQueue, System.IDisposable, ServiceStack.Redis.Support.Queue.IChronologicalWorkQueue where T : class + { + public System.Collections.Generic.IList> Dequeue(double minTime, double maxTime, int maxBatchSize) => throw null; + public void Enqueue(string workItemId, T workItem, double time) => throw null; + public RedisChronologicalWorkQueue(int maxReadPoolSize, int maxWritePoolSize, string host, int port, string queueName) : base(default(int), default(int), default(string), default(int)) => throw null; + public RedisChronologicalWorkQueue(int maxReadPoolSize, int maxWritePoolSize, string host, int port) : base(default(int), default(int), default(string), default(int)) => throw null; + } + + // Generated from `ServiceStack.Redis.Support.Queue.Implementation.RedisSequentialWorkQueue<>` in `ServiceStack.Redis, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class RedisSequentialWorkQueue : ServiceStack.Redis.Support.Queue.Implementation.RedisWorkQueue, System.IDisposable, ServiceStack.Redis.Support.Queue.ISequentialWorkQueue where T : class + { + protected const double CONVENIENTLY_SIZED_FLOAT = default; + public ServiceStack.Redis.Support.Queue.ISequentialData Dequeue(int maxBatchSize) => throw null; + // Generated from `ServiceStack.Redis.Support.Queue.Implementation.RedisSequentialWorkQueue<>+DequeueManager` in `ServiceStack.Redis, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class DequeueManager + { + public DequeueManager(ServiceStack.Redis.PooledRedisClientManager clientManager, ServiceStack.Redis.Support.Queue.Implementation.RedisSequentialWorkQueue workQueue, string workItemId, string dequeueLockKey, int numberOfDequeuedItems, int dequeueLockTimeout) => throw null; + public void DoneProcessedWorkItem() => throw null; + public System.Int64 Lock(int acquisitionTimeout, ServiceStack.Redis.IRedisClient client) => throw null; + public bool PopAndUnlock(int numProcessed, ServiceStack.Redis.IRedisClient client) => throw null; + public bool PopAndUnlock(int numProcessed) => throw null; + public bool Unlock(ServiceStack.Redis.IRedisClient client) => throw null; + public void UpdateNextUnprocessed(T newWorkItem) => throw null; + protected ServiceStack.Redis.PooledRedisClientManager clientManager; + protected int numberOfDequeuedItems; + protected int numberOfProcessedItems; + protected string workItemId; + protected ServiceStack.Redis.Support.Queue.Implementation.RedisSequentialWorkQueue workQueue; + } + + + public void Enqueue(string workItemId, T workItem) => throw null; + public bool HarvestZombies() => throw null; + public bool PrepareNextWorkItem() => throw null; + public RedisSequentialWorkQueue(int maxReadPoolSize, int maxWritePoolSize, string host, int port, string queueName, int dequeueLockTimeout) : base(default(int), default(int), default(string), default(int)) => throw null; + public RedisSequentialWorkQueue(int maxReadPoolSize, int maxWritePoolSize, string host, int port, int dequeueLockTimeout) : base(default(int), default(int), default(string), default(int)) => throw null; + public bool TryForceReleaseLock(ServiceStack.Redis.Support.Queue.Implementation.SerializingRedisClient client, string workItemId) => throw null; + public void Update(string workItemId, int index, T newWorkItem) => throw null; + } + + // Generated from `ServiceStack.Redis.Support.Queue.Implementation.RedisSimpleWorkQueue<>` in `ServiceStack.Redis, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class RedisSimpleWorkQueue : ServiceStack.Redis.Support.Queue.Implementation.RedisWorkQueue, System.IDisposable, ServiceStack.Redis.Support.Queue.ISimpleWorkQueue where T : class + { + public System.Collections.Generic.IList Dequeue(int maxBatchSize) => throw null; + public void Enqueue(T msg) => throw null; + public RedisSimpleWorkQueue(int maxReadPoolSize, int maxWritePoolSize, string host, int port, string queueName) : base(default(int), default(int), default(string), default(int)) => throw null; + public RedisSimpleWorkQueue(int maxReadPoolSize, int maxWritePoolSize, string host, int port) : base(default(int), default(int), default(string), default(int)) => throw null; + } + + // Generated from `ServiceStack.Redis.Support.Queue.Implementation.RedisWorkQueue<>` in `ServiceStack.Redis, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class RedisWorkQueue + { + public void Dispose() => throw null; + public RedisWorkQueue(int maxReadPoolSize, int maxWritePoolSize, string host, int port, string queueName) => throw null; + public RedisWorkQueue(int maxReadPoolSize, int maxWritePoolSize, string host, int port) => throw null; + protected ServiceStack.Redis.PooledRedisClientManager clientManager; + protected string pendingWorkItemIdQueue; + protected ServiceStack.Redis.Support.RedisNamespace queueNamespace; + protected string workQueue; + } + + // Generated from `ServiceStack.Redis.Support.Queue.Implementation.SequentialData<>` in `ServiceStack.Redis, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class SequentialData : ServiceStack.Redis.Support.Queue.ISequentialData where T : class + { + public string DequeueId { get => throw null; } + public System.Collections.Generic.IList DequeueItems { get => throw null; } + public void DoneProcessedWorkItem() => throw null; + public void PopAndUnlock() => throw null; + public SequentialData(string dequeueId, System.Collections.Generic.IList _dequeueItems, ServiceStack.Redis.Support.Queue.Implementation.RedisSequentialWorkQueue.DequeueManager _dequeueManager) => throw null; + public void UpdateNextUnprocessed(T newWorkItem) => throw null; + } + + // Generated from `ServiceStack.Redis.Support.Queue.Implementation.SerializingRedisClient` in `ServiceStack.Redis, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class SerializingRedisClient : ServiceStack.Redis.RedisClient + { + public object Deserialize(System.Byte[] someBytes) => throw null; + public System.Collections.IList Deserialize(System.Byte[][] byteArray) => throw null; + public System.Collections.Generic.List Serialize(object[] values) => throw null; + public System.Byte[] Serialize(object value) => throw null; + public ServiceStack.Redis.Support.ISerializer Serializer { set => throw null; } + public SerializingRedisClient(string host, int port) => throw null; + public SerializingRedisClient(string host) => throw null; + public SerializingRedisClient(ServiceStack.Redis.RedisEndpoint config) => throw null; + } + + } + } + } + } +} diff --git a/csharp/ql/test/resources/stubs/ServiceStack.Redis/5.11.0/ServiceStack.Redis.csproj b/csharp/ql/test/resources/stubs/ServiceStack.Redis/5.11.0/ServiceStack.Redis.csproj new file mode 100644 index 00000000000..8892d1db1e6 --- /dev/null +++ b/csharp/ql/test/resources/stubs/ServiceStack.Redis/5.11.0/ServiceStack.Redis.csproj @@ -0,0 +1,13 @@ + + + net5.0 + true + bin\ + false + + + + + + + diff --git a/csharp/ql/test/resources/stubs/ServiceStack.Text/5.11.0/ServiceStack.Text.cs b/csharp/ql/test/resources/stubs/ServiceStack.Text/5.11.0/ServiceStack.Text.cs new file mode 100644 index 00000000000..cd1918ac454 --- /dev/null +++ b/csharp/ql/test/resources/stubs/ServiceStack.Text/5.11.0/ServiceStack.Text.cs @@ -0,0 +1,3867 @@ +// This file contains auto-generated code. + +namespace ServiceStack +{ + // Generated from `ServiceStack.AssignmentEntry` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class AssignmentEntry + { + public AssignmentEntry(string name, ServiceStack.AssignmentMember from, ServiceStack.AssignmentMember to) => throw null; + public ServiceStack.GetMemberDelegate ConvertValueFn; + public ServiceStack.AssignmentMember From; + public ServiceStack.GetMemberDelegate GetValueFn; + public string Name; + public ServiceStack.SetMemberDelegate SetValueFn; + public ServiceStack.AssignmentMember To; + } + + // Generated from `ServiceStack.AssignmentMember` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class AssignmentMember + { + public AssignmentMember(System.Type type, System.Reflection.PropertyInfo propertyInfo) => throw null; + public AssignmentMember(System.Type type, System.Reflection.MethodInfo methodInfo) => throw null; + public AssignmentMember(System.Type type, System.Reflection.FieldInfo fieldInfo) => throw null; + public ServiceStack.GetMemberDelegate CreateGetter() => throw null; + public ServiceStack.SetMemberDelegate CreateSetter() => throw null; + public System.Reflection.FieldInfo FieldInfo; + public System.Reflection.MethodInfo MethodInfo; + public System.Reflection.PropertyInfo PropertyInfo; + public System.Type Type; + } + + // Generated from `ServiceStack.AutoMapping` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class AutoMapping + { + public static void IgnoreMapping() => throw null; + public static void IgnoreMapping(System.Type fromType, System.Type toType) => throw null; + public static void RegisterConverter(System.Func converter) => throw null; + public static void RegisterPopulator(System.Action populator) => throw null; + } + + // Generated from `ServiceStack.AutoMappingUtils` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class AutoMappingUtils + { + public static bool CanCast(System.Type toType, System.Type fromType) => throw null; + public static object ChangeTo(this string strValue, System.Type type) => throw null; + public static object ChangeValueType(object from, System.Type toType) => throw null; + public static object ConvertTo(this object from, System.Type toType, bool skipConverters) => throw null; + public static object ConvertTo(this object from, System.Type toType) => throw null; + public static T ConvertTo(this object from, bool skipConverters) => throw null; + public static T ConvertTo(this object from, T defaultValue) => throw null; + public static T ConvertTo(this object from) => throw null; + public static T CreateCopy(this T from) => throw null; + public static object CreateDefaultValue(System.Type type, System.Collections.Generic.Dictionary recursionInfo) => throw null; + public static object[] CreateDefaultValues(System.Collections.Generic.IEnumerable types, System.Collections.Generic.Dictionary recursionInfo) => throw null; + public static string GetAssemblyPath(this System.Type source) => throw null; + public static ServiceStack.GetMemberDelegate GetConverter(System.Type fromType, System.Type toType) => throw null; + public static object GetDefaultValue(this System.Type type) => throw null; + public static System.Reflection.MethodInfo GetExplicitCastMethod(System.Type fromType, System.Type toType) => throw null; + public static System.Reflection.MethodInfo GetImplicitCastMethod(System.Type fromType, System.Type toType) => throw null; + public static ServiceStack.PopulateMemberDelegate GetPopulator(System.Type targetType, System.Type sourceType) => throw null; + public static object GetProperty(this System.Reflection.PropertyInfo propertyInfo, object obj) => throw null; + public static System.Collections.Generic.IEnumerable> GetPropertyAttributes(System.Type fromType) => throw null; + public static System.Collections.Generic.List GetPropertyNames(this System.Type type) => throw null; + public static bool IsDebugBuild(this System.Reflection.Assembly assembly) => throw null; + public static bool IsDefaultValue(object value, System.Type valueType) => throw null; + public static bool IsDefaultValue(object value) => throw null; + public static bool IsUnsettableValue(System.Reflection.FieldInfo fieldInfo, System.Reflection.PropertyInfo propertyInfo) => throw null; + public static System.Array PopulateArray(System.Type type, System.Collections.Generic.Dictionary recursionInfo) => throw null; + public static To PopulateFromPropertiesWithAttribute(this To to, From from, System.Type attributeType) => throw null; + public static To PopulateFromPropertiesWithoutAttribute(this To to, From from, System.Type attributeType) => throw null; + public static object PopulateWith(object obj) => throw null; + public static To PopulateWith(this To to, From from) => throw null; + public static To PopulateWithNonDefaultValues(this To to, From from) => throw null; + public static void Reset() => throw null; + public static void SetGenericCollection(System.Type realizedListType, object genericObj, System.Collections.Generic.Dictionary recursionInfo) => throw null; + public static void SetProperty(this System.Reflection.PropertyInfo propertyInfo, object obj, object value) => throw null; + public static void SetValue(System.Reflection.FieldInfo fieldInfo, System.Reflection.PropertyInfo propertyInfo, object obj, object value) => throw null; + public static bool ShouldIgnoreMapping(System.Type fromType, System.Type toType) => throw null; + public static To ThenDo(this To to, System.Action fn) => throw null; + public static object TryConvertCollections(System.Type fromType, System.Type toType, object fromValue) => throw null; + } + + // Generated from `ServiceStack.CollectionExtensions` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class CollectionExtensions + { + public static object Convert(object objCollection, System.Type toCollectionType) => throw null; + public static System.Collections.Generic.ICollection CreateAndPopulate(System.Type ofCollectionType, T[] withItems) => throw null; + public static T[] ToArray(this System.Collections.Generic.ICollection collection) => throw null; + } + + // Generated from `ServiceStack.CompressionTypes` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class CompressionTypes + { + public static string[] AllCompressionTypes; + public static void AssertIsValid(string compressionType) => throw null; + public const string Default = default; + public const string Deflate = default; + public const string GZip = default; + public static string GetExtension(string compressionType) => throw null; + public static bool IsValid(string compressionType) => throw null; + } + + // Generated from `ServiceStack.CustomHttpResult` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class CustomHttpResult + { + public CustomHttpResult() => throw null; + } + + // Generated from `ServiceStack.Defer` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public struct Defer : System.IDisposable + { + public Defer(System.Action fn) => throw null; + // Stub generator skipped constructor + public void Dispose() => throw null; + } + + // Generated from `ServiceStack.DeserializeDynamic<>` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class DeserializeDynamic where TSerializer : ServiceStack.Text.Common.ITypeSerializer + { + public static ServiceStack.Text.Common.ParseStringDelegate Parse { get => throw null; } + public static System.Dynamic.IDynamicMetaObjectProvider ParseDynamic(string value) => throw null; + public static System.Dynamic.IDynamicMetaObjectProvider ParseDynamic(System.ReadOnlySpan value) => throw null; + public static ServiceStack.Text.Common.ParseStringSpanDelegate ParseStringSpan { get => throw null; } + } + + // Generated from `ServiceStack.DynamicByte` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class DynamicByte : ServiceStack.IDynamicNumber + { + public System.Byte Convert(object value) => throw null; + public object ConvertFrom(object value) => throw null; + public object DefaultValue { get => throw null; } + public DynamicByte() => throw null; + public static ServiceStack.DynamicByte Instance; + public string ToString(object value) => throw null; + public bool TryParse(string str, out object result) => throw null; + public System.Type Type { get => throw null; } + public object add(object lhs, object rhs) => throw null; + public object bitwiseAnd(object lhs, object rhs) => throw null; + public object bitwiseLeftShift(object lhs, object rhs) => throw null; + public object bitwiseNot(object target) => throw null; + public object bitwiseOr(object lhs, object rhs) => throw null; + public object bitwiseRightShift(object lhs, object rhs) => throw null; + public object bitwiseXOr(object lhs, object rhs) => throw null; + public int compareTo(object lhs, object rhs) => throw null; + public object div(object lhs, object rhs) => throw null; + public object log(object lhs, object rhs) => throw null; + public object max(object lhs, object rhs) => throw null; + public object min(object lhs, object rhs) => throw null; + public object mod(object lhs, object rhs) => throw null; + public object mul(object lhs, object rhs) => throw null; + public object pow(object lhs, object rhs) => throw null; + public object sub(object lhs, object rhs) => throw null; + } + + // Generated from `ServiceStack.DynamicDecimal` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class DynamicDecimal : ServiceStack.IDynamicNumber + { + public System.Decimal Convert(object value) => throw null; + public object ConvertFrom(object value) => throw null; + public object DefaultValue { get => throw null; } + public DynamicDecimal() => throw null; + public static ServiceStack.DynamicDecimal Instance; + public string ToString(object value) => throw null; + public bool TryParse(string str, out object result) => throw null; + public System.Type Type { get => throw null; } + public object add(object lhs, object rhs) => throw null; + public object bitwiseAnd(object lhs, object rhs) => throw null; + public object bitwiseLeftShift(object lhs, object rhs) => throw null; + public object bitwiseNot(object target) => throw null; + public object bitwiseOr(object lhs, object rhs) => throw null; + public object bitwiseRightShift(object lhs, object rhs) => throw null; + public object bitwiseXOr(object lhs, object rhs) => throw null; + public int compareTo(object lhs, object rhs) => throw null; + public object div(object lhs, object rhs) => throw null; + public object log(object lhs, object rhs) => throw null; + public object max(object lhs, object rhs) => throw null; + public object min(object lhs, object rhs) => throw null; + public object mod(object lhs, object rhs) => throw null; + public object mul(object lhs, object rhs) => throw null; + public object pow(object lhs, object rhs) => throw null; + public object sub(object lhs, object rhs) => throw null; + } + + // Generated from `ServiceStack.DynamicDouble` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class DynamicDouble : ServiceStack.IDynamicNumber + { + public double Convert(object value) => throw null; + public object ConvertFrom(object value) => throw null; + public object DefaultValue { get => throw null; } + public DynamicDouble() => throw null; + public static ServiceStack.DynamicDouble Instance; + public string ToString(object value) => throw null; + public bool TryParse(string str, out object result) => throw null; + public System.Type Type { get => throw null; } + public object add(object lhs, object rhs) => throw null; + public object bitwiseAnd(object lhs, object rhs) => throw null; + public object bitwiseLeftShift(object lhs, object rhs) => throw null; + public object bitwiseNot(object target) => throw null; + public object bitwiseOr(object lhs, object rhs) => throw null; + public object bitwiseRightShift(object lhs, object rhs) => throw null; + public object bitwiseXOr(object lhs, object rhs) => throw null; + public int compareTo(object lhs, object rhs) => throw null; + public object div(object lhs, object rhs) => throw null; + public object log(object lhs, object rhs) => throw null; + public object max(object lhs, object rhs) => throw null; + public object min(object lhs, object rhs) => throw null; + public object mod(object lhs, object rhs) => throw null; + public object mul(object lhs, object rhs) => throw null; + public object pow(object lhs, object rhs) => throw null; + public object sub(object lhs, object rhs) => throw null; + } + + // Generated from `ServiceStack.DynamicFloat` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class DynamicFloat : ServiceStack.IDynamicNumber + { + public float Convert(object value) => throw null; + public object ConvertFrom(object value) => throw null; + public object DefaultValue { get => throw null; } + public DynamicFloat() => throw null; + public static ServiceStack.DynamicFloat Instance; + public string ToString(object value) => throw null; + public bool TryParse(string str, out object result) => throw null; + public System.Type Type { get => throw null; } + public object add(object lhs, object rhs) => throw null; + public object bitwiseAnd(object lhs, object rhs) => throw null; + public object bitwiseLeftShift(object lhs, object rhs) => throw null; + public object bitwiseNot(object target) => throw null; + public object bitwiseOr(object lhs, object rhs) => throw null; + public object bitwiseRightShift(object lhs, object rhs) => throw null; + public object bitwiseXOr(object lhs, object rhs) => throw null; + public int compareTo(object lhs, object rhs) => throw null; + public object div(object lhs, object rhs) => throw null; + public object log(object lhs, object rhs) => throw null; + public object max(object lhs, object rhs) => throw null; + public object min(object lhs, object rhs) => throw null; + public object mod(object lhs, object rhs) => throw null; + public object mul(object lhs, object rhs) => throw null; + public object pow(object lhs, object rhs) => throw null; + public object sub(object lhs, object rhs) => throw null; + } + + // Generated from `ServiceStack.DynamicInt` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class DynamicInt : ServiceStack.IDynamicNumber + { + public int Convert(object value) => throw null; + public object ConvertFrom(object value) => throw null; + public object DefaultValue { get => throw null; } + public DynamicInt() => throw null; + public static ServiceStack.DynamicInt Instance; + public string ToString(object value) => throw null; + public bool TryParse(string str, out object result) => throw null; + public System.Type Type { get => throw null; } + public object add(object lhs, object rhs) => throw null; + public object bitwiseAnd(object lhs, object rhs) => throw null; + public object bitwiseLeftShift(object lhs, object rhs) => throw null; + public object bitwiseNot(object target) => throw null; + public object bitwiseOr(object lhs, object rhs) => throw null; + public object bitwiseRightShift(object lhs, object rhs) => throw null; + public object bitwiseXOr(object lhs, object rhs) => throw null; + public int compareTo(object lhs, object rhs) => throw null; + public object div(object lhs, object rhs) => throw null; + public object log(object lhs, object rhs) => throw null; + public object max(object lhs, object rhs) => throw null; + public object min(object lhs, object rhs) => throw null; + public object mod(object lhs, object rhs) => throw null; + public object mul(object lhs, object rhs) => throw null; + public object pow(object lhs, object rhs) => throw null; + public object sub(object lhs, object rhs) => throw null; + } + + // Generated from `ServiceStack.DynamicJson` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class DynamicJson : System.Dynamic.DynamicObject + { + public static dynamic Deserialize(string json) => throw null; + public DynamicJson(System.Collections.Generic.IEnumerable> hash) => throw null; + public static string Serialize(dynamic instance) => throw null; + public override string ToString() => throw null; + public override bool TryGetMember(System.Dynamic.GetMemberBinder binder, out object result) => throw null; + public override bool TrySetMember(System.Dynamic.SetMemberBinder binder, object value) => throw null; + } + + // Generated from `ServiceStack.DynamicLong` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class DynamicLong : ServiceStack.IDynamicNumber + { + public System.Int64 Convert(object value) => throw null; + public object ConvertFrom(object value) => throw null; + public object DefaultValue { get => throw null; } + public DynamicLong() => throw null; + public static ServiceStack.DynamicLong Instance; + public string ToString(object value) => throw null; + public bool TryParse(string str, out object result) => throw null; + public System.Type Type { get => throw null; } + public object add(object lhs, object rhs) => throw null; + public object bitwiseAnd(object lhs, object rhs) => throw null; + public object bitwiseLeftShift(object lhs, object rhs) => throw null; + public object bitwiseNot(object target) => throw null; + public object bitwiseOr(object lhs, object rhs) => throw null; + public object bitwiseRightShift(object lhs, object rhs) => throw null; + public object bitwiseXOr(object lhs, object rhs) => throw null; + public int compareTo(object lhs, object rhs) => throw null; + public object div(object lhs, object rhs) => throw null; + public object log(object lhs, object rhs) => throw null; + public object max(object lhs, object rhs) => throw null; + public object min(object lhs, object rhs) => throw null; + public object mod(object lhs, object rhs) => throw null; + public object mul(object lhs, object rhs) => throw null; + public object pow(object lhs, object rhs) => throw null; + public object sub(object lhs, object rhs) => throw null; + } + + // Generated from `ServiceStack.DynamicNumber` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class DynamicNumber + { + public static object Add(object lhs, object rhs) => throw null; + public static ServiceStack.IDynamicNumber AssertNumbers(string name, object lhs, object rhs) => throw null; + public static object BitwiseAnd(object lhs, object rhs) => throw null; + public static object BitwiseLeftShift(object lhs, object rhs) => throw null; + public static object BitwiseNot(object lhs) => throw null; + public static object BitwiseOr(object lhs, object rhs) => throw null; + public static object BitwiseRightShift(object lhs, object rhs) => throw null; + public static object BitwiseXOr(object lhs, object rhs) => throw null; + public static int CompareTo(object lhs, object rhs) => throw null; + public static object Div(object lhs, object rhs) => throw null; + public static object Divide(object lhs, object rhs) => throw null; + public static ServiceStack.IDynamicNumber Get(object obj) => throw null; + public static ServiceStack.IDynamicNumber GetNumber(object lhs, object rhs) => throw null; + public static ServiceStack.IDynamicNumber GetNumber(System.Type type) => throw null; + public static bool IsNumber(System.Type type) => throw null; + public static object Log(object lhs, object rhs) => throw null; + public static object Max(object lhs, object rhs) => throw null; + public static object Min(object lhs, object rhs) => throw null; + public static object Mod(object lhs, object rhs) => throw null; + public static object Mul(object lhs, object rhs) => throw null; + public static object Multiply(object lhs, object rhs) => throw null; + public static object Pow(object lhs, object rhs) => throw null; + public static object Sub(object lhs, object rhs) => throw null; + public static object Subtract(object lhs, object rhs) => throw null; + public static bool TryGetRanking(System.Type type, out int ranking) => throw null; + public static bool TryParse(string strValue, out object result) => throw null; + public static bool TryParseIntoBestFit(string strValue, out object result) => throw null; + } + + // Generated from `ServiceStack.DynamicSByte` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class DynamicSByte : ServiceStack.IDynamicNumber + { + public System.SByte Convert(object value) => throw null; + public object ConvertFrom(object value) => throw null; + public object DefaultValue { get => throw null; } + public DynamicSByte() => throw null; + public static ServiceStack.DynamicSByte Instance; + public string ToString(object value) => throw null; + public bool TryParse(string str, out object result) => throw null; + public System.Type Type { get => throw null; } + public object add(object lhs, object rhs) => throw null; + public object bitwiseAnd(object lhs, object rhs) => throw null; + public object bitwiseLeftShift(object lhs, object rhs) => throw null; + public object bitwiseNot(object target) => throw null; + public object bitwiseOr(object lhs, object rhs) => throw null; + public object bitwiseRightShift(object lhs, object rhs) => throw null; + public object bitwiseXOr(object lhs, object rhs) => throw null; + public int compareTo(object lhs, object rhs) => throw null; + public object div(object lhs, object rhs) => throw null; + public object log(object lhs, object rhs) => throw null; + public object max(object lhs, object rhs) => throw null; + public object min(object lhs, object rhs) => throw null; + public object mod(object lhs, object rhs) => throw null; + public object mul(object lhs, object rhs) => throw null; + public object pow(object lhs, object rhs) => throw null; + public object sub(object lhs, object rhs) => throw null; + } + + // Generated from `ServiceStack.DynamicShort` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class DynamicShort : ServiceStack.IDynamicNumber + { + public System.Int16 Convert(object value) => throw null; + public object ConvertFrom(object value) => throw null; + public object DefaultValue { get => throw null; } + public DynamicShort() => throw null; + public static ServiceStack.DynamicShort Instance; + public string ToString(object value) => throw null; + public bool TryParse(string str, out object result) => throw null; + public System.Type Type { get => throw null; } + public object add(object lhs, object rhs) => throw null; + public object bitwiseAnd(object lhs, object rhs) => throw null; + public object bitwiseLeftShift(object lhs, object rhs) => throw null; + public object bitwiseNot(object target) => throw null; + public object bitwiseOr(object lhs, object rhs) => throw null; + public object bitwiseRightShift(object lhs, object rhs) => throw null; + public object bitwiseXOr(object lhs, object rhs) => throw null; + public int compareTo(object lhs, object rhs) => throw null; + public object div(object lhs, object rhs) => throw null; + public object log(object lhs, object rhs) => throw null; + public object max(object lhs, object rhs) => throw null; + public object min(object lhs, object rhs) => throw null; + public object mod(object lhs, object rhs) => throw null; + public object mul(object lhs, object rhs) => throw null; + public object pow(object lhs, object rhs) => throw null; + public object sub(object lhs, object rhs) => throw null; + } + + // Generated from `ServiceStack.DynamicUInt` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class DynamicUInt : ServiceStack.IDynamicNumber + { + public System.UInt32 Convert(object value) => throw null; + public object ConvertFrom(object value) => throw null; + public object DefaultValue { get => throw null; } + public DynamicUInt() => throw null; + public static ServiceStack.DynamicUInt Instance; + public string ToString(object value) => throw null; + public bool TryParse(string str, out object result) => throw null; + public System.Type Type { get => throw null; } + public object add(object lhs, object rhs) => throw null; + public object bitwiseAnd(object lhs, object rhs) => throw null; + public object bitwiseLeftShift(object lhs, object rhs) => throw null; + public object bitwiseNot(object target) => throw null; + public object bitwiseOr(object lhs, object rhs) => throw null; + public object bitwiseRightShift(object lhs, object rhs) => throw null; + public object bitwiseXOr(object lhs, object rhs) => throw null; + public int compareTo(object lhs, object rhs) => throw null; + public object div(object lhs, object rhs) => throw null; + public object log(object lhs, object rhs) => throw null; + public object max(object lhs, object rhs) => throw null; + public object min(object lhs, object rhs) => throw null; + public object mod(object lhs, object rhs) => throw null; + public object mul(object lhs, object rhs) => throw null; + public object pow(object lhs, object rhs) => throw null; + public object sub(object lhs, object rhs) => throw null; + } + + // Generated from `ServiceStack.DynamicULong` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class DynamicULong : ServiceStack.IDynamicNumber + { + public System.UInt64 Convert(object value) => throw null; + public object ConvertFrom(object value) => throw null; + public object DefaultValue { get => throw null; } + public DynamicULong() => throw null; + public static ServiceStack.DynamicULong Instance; + public string ToString(object value) => throw null; + public bool TryParse(string str, out object result) => throw null; + public System.Type Type { get => throw null; } + public object add(object lhs, object rhs) => throw null; + public object bitwiseAnd(object lhs, object rhs) => throw null; + public object bitwiseLeftShift(object lhs, object rhs) => throw null; + public object bitwiseNot(object target) => throw null; + public object bitwiseOr(object lhs, object rhs) => throw null; + public object bitwiseRightShift(object lhs, object rhs) => throw null; + public object bitwiseXOr(object lhs, object rhs) => throw null; + public int compareTo(object lhs, object rhs) => throw null; + public object div(object lhs, object rhs) => throw null; + public object log(object lhs, object rhs) => throw null; + public object max(object lhs, object rhs) => throw null; + public object min(object lhs, object rhs) => throw null; + public object mod(object lhs, object rhs) => throw null; + public object mul(object lhs, object rhs) => throw null; + public object pow(object lhs, object rhs) => throw null; + public object sub(object lhs, object rhs) => throw null; + } + + // Generated from `ServiceStack.DynamicUShort` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class DynamicUShort : ServiceStack.IDynamicNumber + { + public System.UInt16 Convert(object value) => throw null; + public object ConvertFrom(object value) => throw null; + public object DefaultValue { get => throw null; } + public DynamicUShort() => throw null; + public static ServiceStack.DynamicUShort Instance; + public string ToString(object value) => throw null; + public bool TryParse(string str, out object result) => throw null; + public System.Type Type { get => throw null; } + public object add(object lhs, object rhs) => throw null; + public object bitwiseAnd(object lhs, object rhs) => throw null; + public object bitwiseLeftShift(object lhs, object rhs) => throw null; + public object bitwiseNot(object target) => throw null; + public object bitwiseOr(object lhs, object rhs) => throw null; + public object bitwiseRightShift(object lhs, object rhs) => throw null; + public object bitwiseXOr(object lhs, object rhs) => throw null; + public int compareTo(object lhs, object rhs) => throw null; + public object div(object lhs, object rhs) => throw null; + public object log(object lhs, object rhs) => throw null; + public object max(object lhs, object rhs) => throw null; + public object min(object lhs, object rhs) => throw null; + public object mod(object lhs, object rhs) => throw null; + public object mul(object lhs, object rhs) => throw null; + public object pow(object lhs, object rhs) => throw null; + public object sub(object lhs, object rhs) => throw null; + } + + // Generated from `ServiceStack.EmptyCtorDelegate` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public delegate object EmptyCtorDelegate(); + + // Generated from `ServiceStack.EmptyCtorFactoryDelegate` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public delegate ServiceStack.EmptyCtorDelegate EmptyCtorFactoryDelegate(System.Type type); + + // Generated from `ServiceStack.FieldAccessor` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class FieldAccessor + { + public FieldAccessor(System.Reflection.FieldInfo fieldInfo, ServiceStack.GetMemberDelegate publicGetter, ServiceStack.SetMemberDelegate publicSetter, ServiceStack.SetMemberRefDelegate publicSetterRef) => throw null; + public System.Reflection.FieldInfo FieldInfo { get => throw null; } + public ServiceStack.GetMemberDelegate PublicGetter { get => throw null; } + public ServiceStack.SetMemberDelegate PublicSetter { get => throw null; } + public ServiceStack.SetMemberRefDelegate PublicSetterRef { get => throw null; } + } + + // Generated from `ServiceStack.FieldInvoker` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class FieldInvoker + { + public static ServiceStack.GetMemberDelegate CreateGetter(this System.Reflection.FieldInfo fieldInfo) => throw null; + public static ServiceStack.GetMemberDelegate CreateGetter(this System.Reflection.FieldInfo fieldInfo) => throw null; + public static ServiceStack.SetMemberDelegate CreateSetter(this System.Reflection.FieldInfo fieldInfo) => throw null; + public static ServiceStack.SetMemberDelegate CreateSetter(this System.Reflection.FieldInfo fieldInfo) => throw null; + public static ServiceStack.SetMemberRefDelegate SetExpressionRef(this System.Reflection.FieldInfo fieldInfo) => throw null; + } + + // Generated from `ServiceStack.GetMemberDelegate` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public delegate object GetMemberDelegate(object instance); + + // Generated from `ServiceStack.GetMemberDelegate<>` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public delegate object GetMemberDelegate(T instance); + + // Generated from `ServiceStack.HttpHeaders` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class HttpHeaders + { + public const string Accept = default; + public const string AcceptCharset = default; + public const string AcceptEncoding = default; + public const string AcceptLanguage = default; + public const string AcceptRanges = default; + public const string AccessControlMaxAge = default; + public const string Age = default; + public const string Allow = default; + public const string AllowCredentials = default; + public const string AllowHeaders = default; + public const string AllowMethods = default; + public const string AllowOrigin = default; + public const string Authorization = default; + public const string CacheControl = default; + public const string Connection = default; + public const string ContentDisposition = default; + public const string ContentEncoding = default; + public const string ContentLanguage = default; + public const string ContentLength = default; + public const string ContentRange = default; + public const string ContentType = default; + public const string Cookie = default; + public const string Date = default; + public const string ETag = default; + public const string Expect = default; + public const string Expires = default; + public const string ExposeHeaders = default; + public const string Host = default; + public const string IfMatch = default; + public const string IfModifiedSince = default; + public const string IfNoneMatch = default; + public const string IfUnmodifiedSince = default; + public const string LastModified = default; + public const string Location = default; + public const string Origin = default; + public const string Pragma = default; + public const string ProxyAuthenticate = default; + public const string ProxyAuthorization = default; + public const string ProxyConnection = default; + public const string Range = default; + public const string Referer = default; + public const string RequestHeaders = default; + public const string RequestMethod = default; + public static System.Collections.Generic.HashSet RestrictedHeaders; + public const string SOAPAction = default; + public const string SetCookie = default; + public const string SetCookie2 = default; + public const string TE = default; + public const string Trailer = default; + public const string TransferEncoding = default; + public const string Upgrade = default; + public const string UserAgent = default; + public const string Vary = default; + public const string Via = default; + public const string Warning = default; + public const string WwwAuthenticate = default; + public const string XAutoBatchCompleted = default; + public const string XForwardedFor = default; + public const string XForwardedPort = default; + public const string XForwardedProtocol = default; + public const string XHttpMethodOverride = default; + public const string XLocation = default; + public const string XParamOverridePrefix = default; + public const string XPoweredBy = default; + public const string XRealIp = default; + public const string XStatus = default; + public const string XTag = default; + public const string XTrigger = default; + public const string XUserAuthId = default; + } + + // Generated from `ServiceStack.HttpMethods` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class HttpMethods + { + public static System.Collections.Generic.HashSet AllVerbs; + public const string Delete = default; + public static bool Exists(string httpMethod) => throw null; + public const string Get = default; + public static bool HasVerb(string httpVerb) => throw null; + public const string Head = default; + public const string Options = default; + public const string Patch = default; + public const string Post = default; + public const string Put = default; + } + + // Generated from `ServiceStack.HttpResultsFilter` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class HttpResultsFilter : System.IDisposable, ServiceStack.IHttpResultsFilter + { + public System.Byte[] BytesResult { get => throw null; set => throw null; } + public System.Func BytesResultFn { get => throw null; set => throw null; } + public void Dispose() => throw null; + public System.Byte[] GetBytes(System.Net.HttpWebRequest webReq, System.Byte[] reqBody) => throw null; + public string GetString(System.Net.HttpWebRequest webReq, string reqBody) => throw null; + public HttpResultsFilter(string stringResult = default(string), System.Byte[] bytesResult = default(System.Byte[])) => throw null; + public string StringResult { get => throw null; set => throw null; } + public System.Func StringResultFn { get => throw null; set => throw null; } + public System.Action UploadFileFn { get => throw null; set => throw null; } + public void UploadStream(System.Net.HttpWebRequest webRequest, System.IO.Stream fileStream, string fileName) => throw null; + } + + // Generated from `ServiceStack.HttpStatus` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class HttpStatus + { + public static string GetStatusDescription(int statusCode) => throw null; + } + + // Generated from `ServiceStack.HttpUtils` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class HttpUtils + { + public static string AddHashParam(this string url, string key, string val) => throw null; + public static string AddHashParam(this string url, string key, object val) => throw null; + public static string AddQueryParam(this string url, string key, string val, bool encode = default(bool)) => throw null; + public static string AddQueryParam(this string url, string key, object val, bool encode = default(bool)) => throw null; + public static string AddQueryParam(this string url, object key, string val, bool encode = default(bool)) => throw null; + public static System.Threading.Tasks.Task ConvertTo(this System.Threading.Tasks.Task task) where TDerived : TBase => throw null; + public static string DeleteFromUrl(this string url, string accept = default(string), System.Action requestFilter = default(System.Action), System.Action responseFilter = default(System.Action)) => throw null; + public static System.Threading.Tasks.Task DeleteFromUrlAsync(this string url, string accept = default(string), System.Action requestFilter = default(System.Action), System.Action responseFilter = default(System.Action), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Byte[] GetBytesFromUrl(this string url, string accept = default(string), System.Action requestFilter = default(System.Action), System.Action responseFilter = default(System.Action)) => throw null; + public static System.Threading.Tasks.Task GetBytesFromUrlAsync(this string url, string accept = default(string), System.Action requestFilter = default(System.Action), System.Action responseFilter = default(System.Action), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static string GetCsvFromUrl(this string url, System.Action requestFilter = default(System.Action), System.Action responseFilter = default(System.Action)) => throw null; + public static System.Threading.Tasks.Task GetCsvFromUrlAsync(this string url, System.Action requestFilter = default(System.Action), System.Action responseFilter = default(System.Action), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Net.HttpWebResponse GetErrorResponse(this string url) => throw null; + public static System.Threading.Tasks.Task GetErrorResponseAsync(this string url) => throw null; + public static string GetJsonFromUrl(this string url, System.Action requestFilter = default(System.Action), System.Action responseFilter = default(System.Action)) => throw null; + public static System.Threading.Tasks.Task GetJsonFromUrlAsync(this string url, System.Action requestFilter = default(System.Action), System.Action responseFilter = default(System.Action), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task GetRequestStreamAsync(this System.Net.WebRequest request) => throw null; + public static System.Threading.Tasks.Task GetRequestStreamAsync(this System.Net.HttpWebRequest request) => throw null; + public static System.Threading.Tasks.Task GetResponseAsync(this System.Net.WebRequest request) => throw null; + public static System.Threading.Tasks.Task GetResponseAsync(this System.Net.HttpWebRequest request) => throw null; + public static string GetResponseBody(this System.Exception ex) => throw null; + public static System.Threading.Tasks.Task GetResponseBodyAsync(this System.Exception ex, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Net.HttpStatusCode? GetResponseStatus(this string url) => throw null; + public static System.Net.HttpStatusCode? GetStatus(this System.Net.WebException webEx) => throw null; + public static System.Net.HttpStatusCode? GetStatus(this System.Exception ex) => throw null; + public static System.IO.Stream GetStreamFromUrl(this string url, string accept = default(string), System.Action requestFilter = default(System.Action), System.Action responseFilter = default(System.Action)) => throw null; + public static System.Threading.Tasks.Task GetStreamFromUrlAsync(this string url, string accept = default(string), System.Action requestFilter = default(System.Action), System.Action responseFilter = default(System.Action), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static string GetStringFromUrl(this string url, string accept = default(string), System.Action requestFilter = default(System.Action), System.Action responseFilter = default(System.Action)) => throw null; + public static System.Threading.Tasks.Task GetStringFromUrlAsync(this string url, string accept = default(string), System.Action requestFilter = default(System.Action), System.Action responseFilter = default(System.Action), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static string GetXmlFromUrl(this string url, System.Action requestFilter = default(System.Action), System.Action responseFilter = default(System.Action)) => throw null; + public static System.Threading.Tasks.Task GetXmlFromUrlAsync(this string url, System.Action requestFilter = default(System.Action), System.Action responseFilter = default(System.Action), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static bool HasRequestBody(string httpMethod) => throw null; + public static bool HasStatus(this System.Exception ex, System.Net.HttpStatusCode statusCode) => throw null; + public static string HeadFromUrl(this string url, string accept = default(string), System.Action requestFilter = default(System.Action), System.Action responseFilter = default(System.Action)) => throw null; + public static System.Threading.Tasks.Task HeadFromUrlAsync(this string url, string accept = default(string), System.Action requestFilter = default(System.Action), System.Action responseFilter = default(System.Action), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static bool IsAny300(this System.Exception ex) => throw null; + public static bool IsAny400(this System.Exception ex) => throw null; + public static bool IsAny500(this System.Exception ex) => throw null; + public static bool IsBadRequest(this System.Exception ex) => throw null; + public static bool IsForbidden(this System.Exception ex) => throw null; + public static bool IsInternalServerError(this System.Exception ex) => throw null; + public static bool IsNotFound(this System.Exception ex) => throw null; + public static bool IsNotModified(this System.Exception ex) => throw null; + public static bool IsUnauthorized(this System.Exception ex) => throw null; + public static string OptionsFromUrl(this string url, string accept = default(string), System.Action requestFilter = default(System.Action), System.Action responseFilter = default(System.Action)) => throw null; + public static System.Threading.Tasks.Task OptionsFromUrlAsync(this string url, string accept = default(string), System.Action requestFilter = default(System.Action), System.Action responseFilter = default(System.Action), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static string PatchJsonToUrl(this string url, string json, System.Action requestFilter = default(System.Action), System.Action responseFilter = default(System.Action)) => throw null; + public static string PatchJsonToUrl(this string url, object data, System.Action requestFilter = default(System.Action), System.Action responseFilter = default(System.Action)) => throw null; + public static System.Threading.Tasks.Task PatchJsonToUrlAsync(this string url, string json, System.Action requestFilter = default(System.Action), System.Action responseFilter = default(System.Action), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task PatchJsonToUrlAsync(this string url, object data, System.Action requestFilter = default(System.Action), System.Action responseFilter = default(System.Action), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static string PatchStringToUrl(this string url, string requestBody = default(string), string contentType = default(string), string accept = default(string), System.Action requestFilter = default(System.Action), System.Action responseFilter = default(System.Action)) => throw null; + public static System.Threading.Tasks.Task PatchStringToUrlAsync(this string url, string requestBody = default(string), string contentType = default(string), string accept = default(string), System.Action requestFilter = default(System.Action), System.Action responseFilter = default(System.Action), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static string PatchToUrl(this string url, string formData = default(string), string accept = default(string), System.Action requestFilter = default(System.Action), System.Action responseFilter = default(System.Action)) => throw null; + public static string PatchToUrl(this string url, object formData = default(object), string accept = default(string), System.Action requestFilter = default(System.Action), System.Action responseFilter = default(System.Action)) => throw null; + public static System.Threading.Tasks.Task PatchToUrlAsync(this string url, string formData = default(string), string accept = default(string), System.Action requestFilter = default(System.Action), System.Action responseFilter = default(System.Action), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task PatchToUrlAsync(this string url, object formData = default(object), string accept = default(string), System.Action requestFilter = default(System.Action), System.Action responseFilter = default(System.Action), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Byte[] PostBytesToUrl(this string url, System.Byte[] requestBody = default(System.Byte[]), string contentType = default(string), string accept = default(string), System.Action requestFilter = default(System.Action), System.Action responseFilter = default(System.Action)) => throw null; + public static System.Threading.Tasks.Task PostBytesToUrlAsync(this string url, System.Byte[] requestBody = default(System.Byte[]), string contentType = default(string), string accept = default(string), System.Action requestFilter = default(System.Action), System.Action responseFilter = default(System.Action), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static string PostCsvToUrl(this string url, string csv, System.Action requestFilter = default(System.Action), System.Action responseFilter = default(System.Action)) => throw null; + public static string PostCsvToUrl(this string url, object data, System.Action requestFilter = default(System.Action), System.Action responseFilter = default(System.Action)) => throw null; + public static System.Threading.Tasks.Task PostCsvToUrlAsync(this string url, string csv, System.Action requestFilter = default(System.Action), System.Action responseFilter = default(System.Action), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Net.WebResponse PostFileToUrl(this string url, System.IO.FileInfo uploadFileInfo, string uploadFileMimeType, string accept = default(string), System.Action requestFilter = default(System.Action)) => throw null; + public static System.Threading.Tasks.Task PostFileToUrlAsync(this string url, System.IO.FileInfo uploadFileInfo, string uploadFileMimeType, string accept = default(string), System.Action requestFilter = default(System.Action), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static string PostJsonToUrl(this string url, string json, System.Action requestFilter = default(System.Action), System.Action responseFilter = default(System.Action)) => throw null; + public static string PostJsonToUrl(this string url, object data, System.Action requestFilter = default(System.Action), System.Action responseFilter = default(System.Action)) => throw null; + public static System.Threading.Tasks.Task PostJsonToUrlAsync(this string url, string json, System.Action requestFilter = default(System.Action), System.Action responseFilter = default(System.Action), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task PostJsonToUrlAsync(this string url, object data, System.Action requestFilter = default(System.Action), System.Action responseFilter = default(System.Action), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.IO.Stream PostStreamToUrl(this string url, System.IO.Stream requestBody = default(System.IO.Stream), string contentType = default(string), string accept = default(string), System.Action requestFilter = default(System.Action), System.Action responseFilter = default(System.Action)) => throw null; + public static System.Threading.Tasks.Task PostStreamToUrlAsync(this string url, System.IO.Stream requestBody = default(System.IO.Stream), string contentType = default(string), string accept = default(string), System.Action requestFilter = default(System.Action), System.Action responseFilter = default(System.Action), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static string PostStringToUrl(this string url, string requestBody = default(string), string contentType = default(string), string accept = default(string), System.Action requestFilter = default(System.Action), System.Action responseFilter = default(System.Action)) => throw null; + public static System.Threading.Tasks.Task PostStringToUrlAsync(this string url, string requestBody = default(string), string contentType = default(string), string accept = default(string), System.Action requestFilter = default(System.Action), System.Action responseFilter = default(System.Action), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static string PostToUrl(this string url, string formData = default(string), string accept = default(string), System.Action requestFilter = default(System.Action), System.Action responseFilter = default(System.Action)) => throw null; + public static string PostToUrl(this string url, object formData = default(object), string accept = default(string), System.Action requestFilter = default(System.Action), System.Action responseFilter = default(System.Action)) => throw null; + public static System.Threading.Tasks.Task PostToUrlAsync(this string url, string formData = default(string), string accept = default(string), System.Action requestFilter = default(System.Action), System.Action responseFilter = default(System.Action), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task PostToUrlAsync(this string url, object formData = default(object), string accept = default(string), System.Action requestFilter = default(System.Action), System.Action responseFilter = default(System.Action), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static string PostXmlToUrl(this string url, string xml, System.Action requestFilter = default(System.Action), System.Action responseFilter = default(System.Action)) => throw null; + public static string PostXmlToUrl(this string url, object data, System.Action requestFilter = default(System.Action), System.Action responseFilter = default(System.Action)) => throw null; + public static System.Threading.Tasks.Task PostXmlToUrlAsync(this string url, string xml, System.Action requestFilter = default(System.Action), System.Action responseFilter = default(System.Action), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Byte[] PutBytesToUrl(this string url, System.Byte[] requestBody = default(System.Byte[]), string contentType = default(string), string accept = default(string), System.Action requestFilter = default(System.Action), System.Action responseFilter = default(System.Action)) => throw null; + public static System.Threading.Tasks.Task PutBytesToUrlAsync(this string url, System.Byte[] requestBody = default(System.Byte[]), string contentType = default(string), string accept = default(string), System.Action requestFilter = default(System.Action), System.Action responseFilter = default(System.Action), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static string PutCsvToUrl(this string url, string csv, System.Action requestFilter = default(System.Action), System.Action responseFilter = default(System.Action)) => throw null; + public static string PutCsvToUrl(this string url, object data, System.Action requestFilter = default(System.Action), System.Action responseFilter = default(System.Action)) => throw null; + public static System.Threading.Tasks.Task PutCsvToUrlAsync(this string url, string csv, System.Action requestFilter = default(System.Action), System.Action responseFilter = default(System.Action), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Net.WebResponse PutFileToUrl(this string url, System.IO.FileInfo uploadFileInfo, string uploadFileMimeType, string accept = default(string), System.Action requestFilter = default(System.Action)) => throw null; + public static System.Threading.Tasks.Task PutFileToUrlAsync(this string url, System.IO.FileInfo uploadFileInfo, string uploadFileMimeType, string accept = default(string), System.Action requestFilter = default(System.Action), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static string PutJsonToUrl(this string url, string json, System.Action requestFilter = default(System.Action), System.Action responseFilter = default(System.Action)) => throw null; + public static string PutJsonToUrl(this string url, object data, System.Action requestFilter = default(System.Action), System.Action responseFilter = default(System.Action)) => throw null; + public static System.Threading.Tasks.Task PutJsonToUrlAsync(this string url, string json, System.Action requestFilter = default(System.Action), System.Action responseFilter = default(System.Action), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task PutJsonToUrlAsync(this string url, object data, System.Action requestFilter = default(System.Action), System.Action responseFilter = default(System.Action), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.IO.Stream PutStreamToUrl(this string url, System.IO.Stream requestBody = default(System.IO.Stream), string contentType = default(string), string accept = default(string), System.Action requestFilter = default(System.Action), System.Action responseFilter = default(System.Action)) => throw null; + public static System.Threading.Tasks.Task PutStreamToUrlAsync(this string url, System.IO.Stream requestBody = default(System.IO.Stream), string contentType = default(string), string accept = default(string), System.Action requestFilter = default(System.Action), System.Action responseFilter = default(System.Action), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static string PutStringToUrl(this string url, string requestBody = default(string), string contentType = default(string), string accept = default(string), System.Action requestFilter = default(System.Action), System.Action responseFilter = default(System.Action)) => throw null; + public static System.Threading.Tasks.Task PutStringToUrlAsync(this string url, string requestBody = default(string), string contentType = default(string), string accept = default(string), System.Action requestFilter = default(System.Action), System.Action responseFilter = default(System.Action), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static string PutToUrl(this string url, string formData = default(string), string accept = default(string), System.Action requestFilter = default(System.Action), System.Action responseFilter = default(System.Action)) => throw null; + public static string PutToUrl(this string url, object formData = default(object), string accept = default(string), System.Action requestFilter = default(System.Action), System.Action responseFilter = default(System.Action)) => throw null; + public static System.Threading.Tasks.Task PutToUrlAsync(this string url, string formData = default(string), string accept = default(string), System.Action requestFilter = default(System.Action), System.Action responseFilter = default(System.Action), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task PutToUrlAsync(this string url, object formData = default(object), string accept = default(string), System.Action requestFilter = default(System.Action), System.Action responseFilter = default(System.Action), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static string PutXmlToUrl(this string url, string xml, System.Action requestFilter = default(System.Action), System.Action responseFilter = default(System.Action)) => throw null; + public static string PutXmlToUrl(this string url, object data, System.Action requestFilter = default(System.Action), System.Action responseFilter = default(System.Action)) => throw null; + public static System.Threading.Tasks.Task PutXmlToUrlAsync(this string url, string xml, System.Action requestFilter = default(System.Action), System.Action responseFilter = default(System.Action), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Collections.Generic.IEnumerable ReadLines(this System.Net.WebResponse webRes) => throw null; + public static string ReadToEnd(this System.Net.WebResponse webRes) => throw null; + public static System.Threading.Tasks.Task ReadToEndAsync(this System.Net.WebResponse webRes) => throw null; + public static ServiceStack.IHttpResultsFilter ResultsFilter; + public static System.Byte[] SendBytesToUrl(this string url, string method = default(string), System.Byte[] requestBody = default(System.Byte[]), string contentType = default(string), string accept = default(string), System.Action requestFilter = default(System.Action), System.Action responseFilter = default(System.Action)) => throw null; + public static System.Threading.Tasks.Task SendBytesToUrlAsync(this string url, string method = default(string), System.Byte[] requestBody = default(System.Byte[]), string contentType = default(string), string accept = default(string), System.Action requestFilter = default(System.Action), System.Action responseFilter = default(System.Action), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.IO.Stream SendStreamToUrl(this string url, string method = default(string), System.IO.Stream requestBody = default(System.IO.Stream), string contentType = default(string), string accept = default(string), System.Action requestFilter = default(System.Action), System.Action responseFilter = default(System.Action)) => throw null; + public static System.Threading.Tasks.Task SendStreamToUrlAsync(this string url, string method = default(string), System.IO.Stream requestBody = default(System.IO.Stream), string contentType = default(string), string accept = default(string), System.Action requestFilter = default(System.Action), System.Action responseFilter = default(System.Action), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static string SendStringToUrl(this string url, string method = default(string), string requestBody = default(string), string contentType = default(string), string accept = default(string), System.Action requestFilter = default(System.Action), System.Action responseFilter = default(System.Action)) => throw null; + public static System.Threading.Tasks.Task SendStringToUrlAsync(this string url, string method = default(string), string requestBody = default(string), string contentType = default(string), string accept = default(string), System.Action requestFilter = default(System.Action), System.Action responseFilter = default(System.Action), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static string SetHashParam(this string url, string key, string val) => throw null; + public static string SetQueryParam(this string url, string key, string val) => throw null; + public static void UploadFile(this System.Net.WebRequest webRequest, System.IO.Stream fileStream, string fileName, string mimeType, string accept = default(string), System.Action requestFilter = default(System.Action), string method = default(string), string field = default(string)) => throw null; + public static void UploadFile(this System.Net.WebRequest webRequest, System.IO.Stream fileStream, string fileName) => throw null; + public static System.Net.WebResponse UploadFile(this System.Net.WebRequest webRequest, System.IO.FileInfo uploadFileInfo, string uploadFileMimeType) => throw null; + public static System.Threading.Tasks.Task UploadFileAsync(this System.Net.WebRequest webRequest, System.IO.FileInfo uploadFileInfo, string uploadFileMimeType) => throw null; + public static System.Threading.Tasks.Task UploadFileAsync(this System.Net.WebRequest webRequest, System.IO.Stream fileStream, string fileName, string mimeType, string accept = default(string), System.Action requestFilter = default(System.Action), string method = default(string), string field = default(string), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task UploadFileAsync(this System.Net.WebRequest webRequest, System.IO.Stream fileStream, string fileName, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Text.Encoding UseEncoding { get => throw null; set => throw null; } + public static string UserAgent; + } + + // Generated from `ServiceStack.IDynamicNumber` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IDynamicNumber + { + object ConvertFrom(object value); + object DefaultValue { get; } + string ToString(object value); + bool TryParse(string str, out object result); + System.Type Type { get; } + object add(object lhs, object rhs); + object bitwiseAnd(object lhs, object rhs); + object bitwiseLeftShift(object lhs, object rhs); + object bitwiseNot(object target); + object bitwiseOr(object lhs, object rhs); + object bitwiseRightShift(object lhs, object rhs); + object bitwiseXOr(object lhs, object rhs); + int compareTo(object lhs, object rhs); + object div(object lhs, object rhs); + object log(object lhs, object rhs); + object max(object lhs, object rhs); + object min(object lhs, object rhs); + object mod(object lhs, object rhs); + object mul(object lhs, object rhs); + object pow(object lhs, object rhs); + object sub(object lhs, object rhs); + } + + // Generated from `ServiceStack.IHasStatusCode` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IHasStatusCode + { + int StatusCode { get; } + } + + // Generated from `ServiceStack.IHasStatusDescription` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IHasStatusDescription + { + string StatusDescription { get; } + } + + // Generated from `ServiceStack.IHttpResultsFilter` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IHttpResultsFilter : System.IDisposable + { + System.Byte[] GetBytes(System.Net.HttpWebRequest webReq, System.Byte[] reqBody); + string GetString(System.Net.HttpWebRequest webReq, string reqBody); + void UploadStream(System.Net.HttpWebRequest webRequest, System.IO.Stream fileStream, string fileName); + } + + // Generated from `ServiceStack.KeyValuePairs` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class KeyValuePairs : System.Collections.Generic.List> + { + public static System.Collections.Generic.KeyValuePair Create(string key, object value) => throw null; + public KeyValuePairs(int capacity) => throw null; + public KeyValuePairs(System.Collections.Generic.IEnumerable> collection) => throw null; + public KeyValuePairs() => throw null; + } + + // Generated from `ServiceStack.KeyValueStrings` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class KeyValueStrings : System.Collections.Generic.List> + { + public static System.Collections.Generic.KeyValuePair Create(string key, string value) => throw null; + public KeyValueStrings(int capacity) => throw null; + public KeyValueStrings(System.Collections.Generic.IEnumerable> collection) => throw null; + public KeyValueStrings() => throw null; + } + + // Generated from `ServiceStack.LicenseException` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class LicenseException : System.Exception + { + public LicenseException(string message, System.Exception innerException) => throw null; + public LicenseException(string message) => throw null; + } + + // Generated from `ServiceStack.LicenseFeature` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + [System.Flags] + public enum LicenseFeature + { + Admin, + All, + Aws, + AwsSku, + Client, + Common, + Free, + None, + OrmLite, + OrmLiteSku, + Premium, + Razor, + Redis, + RedisSku, + Server, + ServiceStack, + Text, + } + + // Generated from `ServiceStack.LicenseKey` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class LicenseKey + { + public System.DateTime Expiry { get => throw null; set => throw null; } + public string Hash { get => throw null; set => throw null; } + public LicenseKey() => throw null; + public System.Int64 Meta { get => throw null; set => throw null; } + public string Name { get => throw null; set => throw null; } + public string Ref { get => throw null; set => throw null; } + public ServiceStack.LicenseType Type { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.LicenseMeta` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + [System.Flags] + public enum LicenseMeta + { + Cores, + None, + Subscription, + } + + // Generated from `ServiceStack.LicenseType` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public enum LicenseType + { + AwsBusiness, + AwsIndie, + Business, + Enterprise, + Free, + Indie, + OrmLiteBusiness, + OrmLiteIndie, + OrmLiteSite, + RedisBusiness, + RedisIndie, + RedisSite, + Site, + TextBusiness, + TextIndie, + TextSite, + Trial, + } + + // Generated from `ServiceStack.LicenseUtils` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class LicenseUtils + { + public static ServiceStack.LicenseFeature ActivatedLicenseFeatures() => throw null; + public static void ApprovedUsage(ServiceStack.LicenseFeature licenseFeature, ServiceStack.LicenseFeature requestedFeature, int allowedUsage, int actualUsage, string message) => throw null; + public static void AssertEvaluationLicense() => throw null; + public static void AssertValidUsage(ServiceStack.LicenseFeature feature, ServiceStack.QuotaType quotaType, int count) => throw null; + // Generated from `ServiceStack.LicenseUtils+ErrorMessages` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class ErrorMessages + { + public const string UnauthorizedAccessRequest = default; + } + + + // Generated from `ServiceStack.LicenseUtils+FreeQuotas` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class FreeQuotas + { + public const int AwsTables = default; + public const int OrmLiteTables = default; + public const int PremiumFeature = default; + public const int RedisRequestPerHour = default; + public const int RedisTypes = default; + public const int ServiceStackOperations = default; + public const int TypeFields = default; + } + + + public static string GetHashKeyToSign(this ServiceStack.LicenseKey key) => throw null; + public static System.Exception GetInnerMostException(this System.Exception ex) => throw null; + public static ServiceStack.LicenseFeature GetLicensedFeatures(this ServiceStack.LicenseKey key) => throw null; + public static bool HasInit { get => throw null; set => throw null; } + public static bool HasLicensedFeature(ServiceStack.LicenseFeature feature) => throw null; + public static void Init() => throw null; + public const string LicensePublicKey = default; + public static string LicenseWarningMessage { get => throw null; set => throw null; } + public static void RegisterLicense(string licenseKeyText) => throw null; + public static void RemoveLicense() => throw null; + public const string RuntimePublicKey = default; + public static ServiceStack.LicenseKey ToLicenseKey(this string licenseKeyText) => throw null; + public static ServiceStack.LicenseKey ToLicenseKeyFallback(this string licenseKeyText) => throw null; + public static bool VerifyLicenseKeyText(this string licenseKeyText, out ServiceStack.LicenseKey key) => throw null; + public static ServiceStack.LicenseKey VerifyLicenseKeyText(string licenseKeyText) => throw null; + public static bool VerifyLicenseKeyTextFallback(this string licenseKeyText, out ServiceStack.LicenseKey key) => throw null; + public static bool VerifySha1Data(this System.Security.Cryptography.RSACryptoServiceProvider RSAalg, System.Byte[] unsignedData, System.Byte[] encryptedData) => throw null; + public static bool VerifySignedHash(System.Byte[] DataToVerify, System.Byte[] SignedData, System.Security.Cryptography.RSAParameters Key) => throw null; + } + + // Generated from `ServiceStack.Licensing` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class Licensing + { + public static void RegisterLicense(string licenseKeyText) => throw null; + public static void RegisterLicenseFromFile(string filePath) => throw null; + public static void RegisterLicenseFromFileIfExists(string filePath) => throw null; + } + + // Generated from `ServiceStack.ListExtensions` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class ListExtensions + { + public static System.Collections.Generic.List Add(this System.Collections.Generic.List types) => throw null; + public static void AddIfNotExists(this System.Collections.Generic.List list, T item) => throw null; + public static T[] InArray(this T value) => throw null; + public static System.Collections.Generic.List InList(this T value) => throw null; + public static bool IsNullOrEmpty(this System.Collections.Generic.List list) => throw null; + public static string Join(this System.Collections.Generic.IEnumerable values, string seperator) => throw null; + public static string Join(this System.Collections.Generic.IEnumerable values) => throw null; + public static T[] NewArray(this T[] array, T with = default(T), T without = default(T)) where T : class => throw null; + public static int NullableCount(this System.Collections.Generic.List list) => throw null; + public static System.Collections.Generic.IEnumerable SafeWhere(this System.Collections.Generic.List list, System.Func predicate) => throw null; + } + + // Generated from `ServiceStack.MapExtensions` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class MapExtensions + { + public static string Join(this System.Collections.Generic.Dictionary values, string itemSeperator, string keySeperator) => throw null; + public static string Join(this System.Collections.Generic.Dictionary values) => throw null; + } + + // Generated from `ServiceStack.MimeTypes` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class MimeTypes + { + public const string Binary = default; + public const string Bson = default; + public const string Cert = default; + public const string Compressed = default; + public const string Css = default; + public const string Csv = default; + public const string Dmg = default; + public const string Excel = default; + public static System.Collections.Generic.Dictionary ExtensionMimeTypes; + public const string FormUrlEncoded = default; + public static string GetExtension(string mimeType) => throw null; + public static string GetMimeType(string fileNameOrExt) => throw null; + public static string GetRealContentType(string contentType) => throw null; + public const string Html = default; + public const string HtmlUtf8 = default; + public const string ImageGif = default; + public const string ImageJpg = default; + public const string ImagePng = default; + public const string ImageSvg = default; + public static bool IsBinary(string contentType) => throw null; + public static System.Func IsBinaryFilter { get => throw null; set => throw null; } + public const string Jar = default; + public const string JavaScript = default; + public const string Json = default; + public const string JsonReport = default; + public const string JsonText = default; + public const string Jsv = default; + public const string JsvText = default; + public const string MarkdownText = default; + public static bool MatchesContentType(string contentType, string matchesContentType) => throw null; + public const string MsWord = default; + public const string MsgPack = default; + public const string MultiPartFormData = default; + public const string NetSerializer = default; + public const string Pkg = default; + public const string PlainText = default; + public const string ProblemJson = default; + public const string ProtoBuf = default; + public const string ServerSentEvents = default; + public const string Soap11 = default; + public const string Soap12 = default; + public const string Utf8Suffix = default; + public const string WebAssembly = default; + public const string Wire = default; + public const string Xml = default; + public const string XmlText = default; + public const string Yaml = default; + public const string YamlText = default; + } + + // Generated from `ServiceStack.NetCorePclExport` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class NetCorePclExport : ServiceStack.NetStandardPclExport + { + public override ServiceStack.Text.Common.ParseStringDelegate GetJsReaderParseMethod(System.Type type) => throw null; + public override ServiceStack.Text.Common.ParseStringSpanDelegate GetJsReaderParseStringSpanMethod(System.Type type) => throw null; + public NetCorePclExport() => throw null; + } + + // Generated from `ServiceStack.NetStandardPclExport` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class NetStandardPclExport : ServiceStack.PclExport + { + public override void AddCompression(System.Net.WebRequest webReq) => throw null; + public override void AddHeader(System.Net.WebRequest webReq, string name, string value) => throw null; + public const string AppSettingsKey = default; + public override void Config(System.Net.HttpWebRequest req, bool? allowAutoRedirect = default(bool?), System.TimeSpan? timeout = default(System.TimeSpan?), System.TimeSpan? readWriteTimeout = default(System.TimeSpan?), string userAgent = default(string), bool? preAuthenticate = default(bool?)) => throw null; + public static ServiceStack.PclExport Configure() => throw null; + public override void CreateDirectory(string dirPath) => throw null; + public override bool DirectoryExists(string dirPath) => throw null; + public const string EnvironmentKey = default; + public override bool FileExists(string filePath) => throw null; + public override System.Reflection.Assembly[] GetAllAssemblies() => throw null; + public override System.Byte[] GetAsciiBytes(string str) => throw null; + public override string GetAsciiString(System.Byte[] bytes, int index, int count) => throw null; + public override string GetAssemblyCodeBase(System.Reflection.Assembly assembly) => throw null; + public override string GetAssemblyPath(System.Type source) => throw null; + public override string[] GetDirectoryNames(string dirPath, string searchPattern = default(string)) => throw null; + public override string GetEnvironmentVariable(string name) => throw null; + public override string[] GetFileNames(string dirPath, string searchPattern = default(string)) => throw null; + public override System.Type GetGenericCollectionType(System.Type type) => throw null; + public override ServiceStack.Text.Common.ParseStringDelegate GetSpecializedCollectionParseMethod(System.Type type) => throw null; + public override ServiceStack.Text.Common.ParseStringSpanDelegate GetSpecializedCollectionParseStringSpanMethod(System.Type type) => throw null; + public override string GetStackTrace() => throw null; + public override bool InSameAssembly(System.Type t1, System.Type t2) => throw null; + public static void InitForAot() => throw null; + public override void InitHttpWebRequest(System.Net.HttpWebRequest httpReq, System.Int64? contentLength = default(System.Int64?), bool allowAutoRedirect = default(bool), bool keepAlive = default(bool)) => throw null; + public override string MapAbsolutePath(string relativePath, string appendPartialPathModifier) => throw null; + public NetStandardPclExport() => throw null; + public override System.DateTime ParseXsdDateTimeAsUtc(string dateTimeStr) => throw null; + public static ServiceStack.NetStandardPclExport Provider; + public override string ReadAllText(string filePath) => throw null; + public static int RegisterElement() => throw null; + public override void RegisterForAot() => throw null; + public override void RegisterLicenseFromConfig() => throw null; + public static void RegisterQueryStringWriter() => throw null; + public static void RegisterTypeForAot() => throw null; + public override void SetAllowAutoRedirect(System.Net.HttpWebRequest httpReq, bool value) => throw null; + public override void SetContentLength(System.Net.HttpWebRequest httpReq, System.Int64 value) => throw null; + public override void SetKeepAlive(System.Net.HttpWebRequest httpReq, bool value) => throw null; + public override void SetUserAgent(System.Net.HttpWebRequest httpReq, string value) => throw null; + public override void WriteLine(string line) => throw null; + public override void WriteLine(string format, params object[] args) => throw null; + } + + // Generated from `ServiceStack.ObjectDictionary` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ObjectDictionary : System.Collections.Generic.Dictionary + { + public ObjectDictionary(int capacity, System.Collections.Generic.IEqualityComparer comparer) => throw null; + public ObjectDictionary(int capacity) => throw null; + public ObjectDictionary(System.Collections.Generic.IEqualityComparer comparer) => throw null; + public ObjectDictionary(System.Collections.Generic.IDictionary dictionary, System.Collections.Generic.IEqualityComparer comparer) => throw null; + public ObjectDictionary(System.Collections.Generic.IDictionary dictionary) => throw null; + public ObjectDictionary() => throw null; + protected ObjectDictionary(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) => throw null; + } + + // Generated from `ServiceStack.PathUtils` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class PathUtils + { + public static void AppendPaths(System.Text.StringBuilder sb, string[] paths) => throw null; + public static string AssertDir(this string dirPath) => throw null; + public static string CombinePaths(params string[] paths) => throw null; + public static string CombineWith(this string path, string withPath) => throw null; + public static string CombineWith(this string path, params string[] thesePaths) => throw null; + public static string CombineWith(this string path, params object[] thesePaths) => throw null; + public static string MapAbsolutePath(this string relativePath, string appendPartialPathModifier) => throw null; + public static string MapAbsolutePath(this string relativePath) => throw null; + public static string MapHostAbsolutePath(this string relativePath) => throw null; + public static string MapProjectPath(this string relativePath) => throw null; + public static string MapProjectPlatformPath(this string relativePath) => throw null; + public static string ResolvePaths(this string path) => throw null; + public static string[] ToStrings(object[] thesePaths) => throw null; + } + + // Generated from `ServiceStack.PclExport` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public abstract class PclExport + { + public virtual void AddCompression(System.Net.WebRequest webRequest) => throw null; + public virtual void AddHeader(System.Net.WebRequest webReq, string name, string value) => throw null; + public System.Char AltDirSep; + public virtual void BeginThreadAffinity() => throw null; + public virtual void CloseStream(System.IO.Stream stream) => throw null; + public virtual void Config(System.Net.HttpWebRequest req, bool? allowAutoRedirect = default(bool?), System.TimeSpan? timeout = default(System.TimeSpan?), System.TimeSpan? readWriteTimeout = default(System.TimeSpan?), string userAgent = default(string), bool? preAuthenticate = default(bool?)) => throw null; + public static void Configure(ServiceStack.PclExport instance) => throw null; + public static bool ConfigureProvider(string typeName) => throw null; + public virtual void CreateDirectory(string dirPath) => throw null; + public virtual ServiceStack.GetMemberDelegate CreateGetter(System.Reflection.FieldInfo fieldInfo) => throw null; + public virtual ServiceStack.GetMemberDelegate CreateGetter(System.Reflection.FieldInfo fieldInfo) => throw null; + public ServiceStack.GetMemberDelegate CreateGetter(System.Reflection.PropertyInfo propertyInfo) => throw null; + public ServiceStack.GetMemberDelegate CreateGetter(System.Reflection.PropertyInfo propertyInfo) => throw null; + public virtual ServiceStack.SetMemberDelegate CreateSetter(System.Reflection.FieldInfo fieldInfo) => throw null; + public virtual ServiceStack.SetMemberDelegate CreateSetter(System.Reflection.FieldInfo fieldInfo) => throw null; + public ServiceStack.SetMemberDelegate CreateSetter(System.Reflection.PropertyInfo propertyInfo) => throw null; + public ServiceStack.SetMemberDelegate CreateSetter(System.Reflection.PropertyInfo propertyInfo) => throw null; + public virtual System.Net.HttpWebRequest CreateWebRequest(string requestUri, bool? emulateHttpViaPost = default(bool?)) => throw null; + public System.Char DirSep; + public static System.Char[] DirSeps; + public virtual bool DirectoryExists(string dirPath) => throw null; + public System.Threading.Tasks.Task EmptyTask; + public virtual void EndThreadAffinity() => throw null; + public virtual bool FileExists(string filePath) => throw null; + public virtual System.Type FindType(string typeName, string assemblyName) => throw null; + public virtual System.Reflection.Assembly[] GetAllAssemblies() => throw null; + public virtual System.Byte[] GetAsciiBytes(string str) => throw null; + public virtual string GetAsciiString(System.Byte[] bytes, int index, int count) => throw null; + public virtual string GetAsciiString(System.Byte[] bytes) => throw null; + public virtual string GetAssemblyCodeBase(System.Reflection.Assembly assembly) => throw null; + public virtual string GetAssemblyPath(System.Type source) => throw null; + public virtual ServiceStack.Text.Common.ParseStringDelegate GetDictionaryParseMethod(System.Type type) where TSerializer : ServiceStack.Text.Common.ITypeSerializer => throw null; + public virtual ServiceStack.Text.Common.ParseStringSpanDelegate GetDictionaryParseStringSpanMethod(System.Type type) where TSerializer : ServiceStack.Text.Common.ITypeSerializer => throw null; + public virtual string[] GetDirectoryNames(string dirPath, string searchPattern = default(string)) => throw null; + public virtual string GetEnvironmentVariable(string name) => throw null; + public virtual string[] GetFileNames(string dirPath, string searchPattern = default(string)) => throw null; + public virtual System.Type GetGenericCollectionType(System.Type type) => throw null; + public virtual ServiceStack.Text.Common.ParseStringDelegate GetJsReaderParseMethod(System.Type type) where TSerializer : ServiceStack.Text.Common.ITypeSerializer => throw null; + public virtual ServiceStack.Text.Common.ParseStringSpanDelegate GetJsReaderParseStringSpanMethod(System.Type type) where TSerializer : ServiceStack.Text.Common.ITypeSerializer => throw null; + public virtual System.IO.Stream GetRequestStream(System.Net.WebRequest webRequest) => throw null; + public virtual System.Net.WebResponse GetResponse(System.Net.WebRequest webRequest) => throw null; + public virtual System.Threading.Tasks.Task GetResponseAsync(System.Net.WebRequest webRequest) => throw null; + public virtual ServiceStack.Text.Common.ParseStringDelegate GetSpecializedCollectionParseMethod(System.Type type) where TSerializer : ServiceStack.Text.Common.ITypeSerializer => throw null; + public virtual ServiceStack.Text.Common.ParseStringSpanDelegate GetSpecializedCollectionParseStringSpanMethod(System.Type type) where TSerializer : ServiceStack.Text.Common.ITypeSerializer => throw null; + public virtual string GetStackTrace() => throw null; + public virtual System.Text.Encoding GetUTF8Encoding(bool emitBom = default(bool)) => throw null; + public virtual System.Runtime.Serialization.DataContractAttribute GetWeakDataContract(System.Type type) => throw null; + public virtual System.Runtime.Serialization.DataMemberAttribute GetWeakDataMember(System.Reflection.PropertyInfo pi) => throw null; + public virtual System.Runtime.Serialization.DataMemberAttribute GetWeakDataMember(System.Reflection.FieldInfo pi) => throw null; + public virtual bool InSameAssembly(System.Type t1, System.Type t2) => throw null; + public virtual void InitHttpWebRequest(System.Net.HttpWebRequest httpReq, System.Int64? contentLength = default(System.Int64?), bool allowAutoRedirect = default(bool), bool keepAlive = default(bool)) => throw null; + public static ServiceStack.PclExport Instance; + public System.StringComparer InvariantComparer; + public System.StringComparer InvariantComparerIgnoreCase; + public System.StringComparison InvariantComparison; + public System.StringComparison InvariantComparisonIgnoreCase; + public virtual bool IsAnonymousType(System.Type type) => throw null; + public virtual bool IsDebugBuild(System.Reflection.Assembly assembly) => throw null; + public virtual System.Reflection.Assembly LoadAssembly(string assemblyPath) => throw null; + public virtual string MapAbsolutePath(string relativePath, string appendPartialPathModifier) => throw null; + public virtual System.DateTime ParseXsdDateTime(string dateTimeStr) => throw null; + public virtual System.DateTime ParseXsdDateTimeAsUtc(string dateTimeStr) => throw null; + protected PclExport() => throw null; + public string PlatformName; + // Generated from `ServiceStack.PclExport+Platforms` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class Platforms + { + public const string Net45 = default; + public const string NetCore = default; + public const string NetStandard = default; + } + + + public abstract string ReadAllText(string filePath); + public static ServiceStack.Text.ReflectionOptimizer Reflection { get => throw null; } + public System.Text.RegularExpressions.RegexOptions RegexOptions; + public virtual void RegisterForAot() => throw null; + public virtual void RegisterLicenseFromConfig() => throw null; + public virtual void ResetStream(System.IO.Stream stream) => throw null; + public virtual void SetAllowAutoRedirect(System.Net.HttpWebRequest httpReq, bool value) => throw null; + public virtual void SetContentLength(System.Net.HttpWebRequest httpReq, System.Int64 value) => throw null; + public virtual void SetKeepAlive(System.Net.HttpWebRequest httpReq, bool value) => throw null; + public virtual void SetUserAgent(System.Net.HttpWebRequest httpReq, string value) => throw null; + public virtual string ToInvariantUpper(System.Char value) => throw null; + public virtual string ToLocalXsdDateTimeString(System.DateTime dateTime) => throw null; + public virtual System.DateTime ToStableUniversalTime(System.DateTime dateTime) => throw null; + public virtual string ToXsdDateTimeString(System.DateTime dateTime) => throw null; + public virtual ServiceStack.LicenseKey VerifyLicenseKeyText(string licenseKeyText) => throw null; + public virtual ServiceStack.LicenseKey VerifyLicenseKeyTextFallback(string licenseKeyText) => throw null; + public virtual System.Threading.Tasks.Task WriteAndFlushAsync(System.IO.Stream stream, System.Byte[] bytes) => throw null; + public virtual void WriteLine(string line, params object[] args) => throw null; + public virtual void WriteLine(string line) => throw null; + } + + // Generated from `ServiceStack.PlatformExtensions` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class PlatformExtensions + { + public static System.Type AddAttributes(this System.Type type, params System.Attribute[] attrs) => throw null; + public static System.Reflection.PropertyInfo AddAttributes(this System.Reflection.PropertyInfo propertyInfo, params System.Attribute[] attrs) => throw null; + public static object[] AllAttributes(this System.Type type, System.Type attrType) => throw null; + public static object[] AllAttributes(this System.Type type) => throw null; + public static object[] AllAttributes(this System.Reflection.PropertyInfo propertyInfo, System.Type attrType) => throw null; + public static object[] AllAttributes(this System.Reflection.PropertyInfo propertyInfo) => throw null; + public static object[] AllAttributes(this System.Reflection.ParameterInfo paramInfo, System.Type attrType) => throw null; + public static object[] AllAttributes(this System.Reflection.ParameterInfo paramInfo) => throw null; + public static object[] AllAttributes(this System.Reflection.MemberInfo memberInfo, System.Type attrType) => throw null; + public static object[] AllAttributes(this System.Reflection.MemberInfo memberInfo) => throw null; + public static object[] AllAttributes(this System.Reflection.FieldInfo fieldInfo, System.Type attrType) => throw null; + public static object[] AllAttributes(this System.Reflection.FieldInfo fieldInfo) => throw null; + public static object[] AllAttributes(this System.Reflection.Assembly assembly) => throw null; + public static TAttr[] AllAttributes(this System.Type type) => throw null; + public static TAttr[] AllAttributes(this System.Reflection.PropertyInfo pi) => throw null; + public static TAttr[] AllAttributes(this System.Reflection.ParameterInfo pi) => throw null; + public static TAttr[] AllAttributes(this System.Reflection.MemberInfo mi) => throw null; + public static TAttr[] AllAttributes(this System.Reflection.FieldInfo fi) => throw null; + public static System.Collections.Generic.IEnumerable AllAttributesLazy(this System.Type type) => throw null; + public static System.Collections.Generic.IEnumerable AllAttributesLazy(this System.Reflection.PropertyInfo propertyInfo, System.Type attrType) => throw null; + public static System.Collections.Generic.IEnumerable AllAttributesLazy(this System.Reflection.PropertyInfo propertyInfo) => throw null; + public static System.Collections.Generic.IEnumerable AllAttributesLazy(this System.Type type) => throw null; + public static System.Collections.Generic.IEnumerable AllAttributesLazy(this System.Reflection.PropertyInfo pi) => throw null; + public static System.Reflection.PropertyInfo[] AllProperties(this System.Type type) => throw null; + public static bool AssignableFrom(this System.Type type, System.Type fromType) => throw null; + public static System.Type BaseType(this System.Type type) => throw null; + public static void ClearRuntimeAttributes() => throw null; + public static bool ContainsGenericParameters(this System.Type type) => throw null; + public static System.Delegate CreateDelegate(this System.Reflection.MethodInfo methodInfo, System.Type delegateType, object target) => throw null; + public static System.Delegate CreateDelegate(this System.Reflection.MethodInfo methodInfo, System.Type delegateType) => throw null; + public static System.Reflection.ConstructorInfo[] DeclaredConstructors(this System.Type type) => throw null; + public static System.Type ElementType(this System.Type type) => throw null; + public static System.Reflection.FieldInfo[] Fields(this System.Type type) => throw null; + public static TAttribute FirstAttribute(this System.Reflection.PropertyInfo propertyInfo) => throw null; + public static TAttribute FirstAttribute(this System.Reflection.ParameterInfo paramInfo) => throw null; + public static TAttribute FirstAttribute(this System.Reflection.MemberInfo memberInfo) => throw null; + public static TAttr FirstAttribute(this System.Type type) where TAttr : class => throw null; + public static System.Type FirstGenericTypeDefinition(this System.Type type) => throw null; + public static object FromObjectDictionary(this System.Collections.Generic.IEnumerable> values, System.Type type) => throw null; + public static T FromObjectDictionary(this System.Collections.Generic.IEnumerable> values) => throw null; + public static System.Type[] GenericTypeArguments(this System.Type type) => throw null; + public static System.Type GenericTypeDefinition(this System.Type type) => throw null; + public static System.Collections.Generic.IEnumerable GetAllConstructors(this System.Type type) => throw null; + public static System.Reflection.FieldInfo[] GetAllFields(this System.Type type) => throw null; + public static System.Reflection.MemberInfo[] GetAllPublicMembers(this System.Type type) => throw null; + public static System.Reflection.Assembly GetAssembly(this System.Type type) => throw null; + public static System.Collections.Generic.List GetAttributes(this System.Reflection.PropertyInfo propertyInfo) => throw null; + public static System.Collections.Generic.List GetAttributes(this System.Reflection.PropertyInfo propertyInfo, System.Type attrType) => throw null; + public static System.Collections.Generic.List GetAttributes(this System.Reflection.PropertyInfo propertyInfo) => throw null; + public static System.Type GetCachedGenericType(this System.Type type, params System.Type[] argTypes) => throw null; + public static System.Type GetCollectionType(this System.Type type) => throw null; + public static string GetDeclaringTypeName(this System.Type type) => throw null; + public static string GetDeclaringTypeName(this System.Reflection.MemberInfo mi) => throw null; + public static System.Reflection.ConstructorInfo GetEmptyConstructor(this System.Type type) => throw null; + public static System.Reflection.FieldInfo GetFieldInfo(this System.Type type, string fieldName) => throw null; + public static System.Reflection.MethodInfo GetInstanceMethod(this System.Type type, string methodName) => throw null; + public static System.Reflection.MethodInfo[] GetInstanceMethods(this System.Type type) => throw null; + public static System.Type GetKeyValuePairTypeDef(this System.Type genericEnumType) => throw null; + public static bool GetKeyValuePairTypes(this System.Type kvpType, out System.Type keyType, out System.Type valueType) => throw null; + public static System.Type GetKeyValuePairsTypeDef(this System.Type dictType) => throw null; + public static bool GetKeyValuePairsTypes(this System.Type dictType, out System.Type keyType, out System.Type valueType, out System.Type kvpType) => throw null; + public static bool GetKeyValuePairsTypes(this System.Type dictType, out System.Type keyType, out System.Type valueType) => throw null; + public static System.Reflection.MethodInfo GetMethodInfo(this System.Type type, string methodName, System.Type[] types = default(System.Type[])) => throw null; + public static System.Reflection.MethodInfo GetMethodInfo(this System.Reflection.PropertyInfo pi, bool nonPublic = default(bool)) => throw null; + public static System.Reflection.MethodInfo[] GetMethodInfos(this System.Type type) => throw null; + public static System.Reflection.PropertyInfo GetPropertyInfo(this System.Type type, string propertyName) => throw null; + public static System.Reflection.PropertyInfo[] GetPropertyInfos(this System.Type type) => throw null; + public static System.Reflection.FieldInfo[] GetPublicFields(this System.Type type) => throw null; + public static System.Reflection.MemberInfo[] GetPublicMembers(this System.Type type) => throw null; + public static System.Reflection.FieldInfo GetPublicStaticField(this System.Type type, string fieldName) => throw null; + public static System.Reflection.MethodInfo GetStaticMethod(this System.Type type, string methodName, System.Type[] types) => throw null; + public static System.Reflection.MethodInfo GetStaticMethod(this System.Type type, string methodName) => throw null; + public static System.Type[] GetTypeGenericArguments(this System.Type type) => throw null; + public static System.Type[] GetTypeInterfaces(this System.Type type) => throw null; + public static System.Reflection.FieldInfo[] GetWritableFields(this System.Type type) => throw null; + public static bool HasAttribute(this System.Type type) => throw null; + public static bool HasAttribute(this System.Reflection.PropertyInfo pi) => throw null; + public static bool HasAttribute(this System.Reflection.MethodInfo mi) => throw null; + public static bool HasAttribute(this System.Reflection.FieldInfo fi) => throw null; + public static bool HasAttributeCached(this System.Reflection.MemberInfo memberInfo) => throw null; + public static bool HasAttributeNamed(this System.Type type, string name) => throw null; + public static bool HasAttributeNamed(this System.Reflection.PropertyInfo pi, string name) => throw null; + public static bool HasAttributeNamed(this System.Reflection.MemberInfo mi, string name) => throw null; + public static bool HasAttributeNamed(this System.Reflection.FieldInfo fi, string name) => throw null; + public static bool HasAttributeOf(this System.Type type) => throw null; + public static bool HasAttributeOf(this System.Reflection.PropertyInfo pi) => throw null; + public static bool HasAttributeOf(this System.Reflection.MethodInfo mi) => throw null; + public static bool HasAttributeOf(this System.Reflection.FieldInfo fi) => throw null; + public static bool HasAttributeOfCached(this System.Reflection.MemberInfo memberInfo) => throw null; + public static bool InstanceOfType(this System.Type type, object instance) => throw null; + public static System.Type[] Interfaces(this System.Type type) => throw null; + public static object InvokeMethod(this System.Delegate fn, object instance, object[] parameters = default(object[])) => throw null; + public static bool IsAbstract(this System.Type type) => throw null; + public static bool IsArray(this System.Type type) => throw null; + public static bool IsAssignableFromType(this System.Type type, System.Type fromType) => throw null; + public static bool IsClass(this System.Type type) => throw null; + public static bool IsDto(this System.Type type) => throw null; + public static bool IsDynamic(this System.Reflection.Assembly assembly) => throw null; + public static bool IsEnum(this System.Type type) => throw null; + public static bool IsEnumFlags(this System.Type type) => throw null; + public static bool IsGeneric(this System.Type type) => throw null; + public static bool IsGenericType(this System.Type type) => throw null; + public static bool IsGenericTypeDefinition(this System.Type type) => throw null; + public static bool IsInterface(this System.Type type) => throw null; + public static bool IsStandardClass(this System.Type type) => throw null; + public static bool IsUnderlyingEnum(this System.Type type) => throw null; + public static bool IsValueType(this System.Type type) => throw null; + public static System.Delegate MakeDelegate(this System.Reflection.MethodInfo mi, System.Type delegateType, bool throwOnBindFailure = default(bool)) => throw null; + public static System.Collections.Generic.Dictionary MergeIntoObjectDictionary(this object obj, params object[] sources) => throw null; + public static System.Reflection.MethodInfo Method(this System.Delegate fn) => throw null; + public static void PopulateInstance(this System.Collections.Generic.IEnumerable> values, object instance) => throw null; + public static void PopulateInstance(this System.Collections.Generic.IEnumerable> values, object instance) => throw null; + public static System.Reflection.PropertyInfo[] Properties(this System.Type type) => throw null; + public static System.Reflection.MethodInfo PropertyGetMethod(this System.Reflection.PropertyInfo pi, bool nonPublic = default(bool)) => throw null; + public static System.Type ReflectedType(this System.Reflection.PropertyInfo pi) => throw null; + public static System.Type ReflectedType(this System.Reflection.FieldInfo fi) => throw null; + public static System.Reflection.PropertyInfo ReplaceAttribute(this System.Reflection.PropertyInfo propertyInfo, System.Attribute attr) => throw null; + public static System.Reflection.MethodInfo SetMethod(this System.Reflection.PropertyInfo pi, bool nonPublic = default(bool)) => throw null; + public static System.Collections.Generic.Dictionary ToObjectDictionary(this object obj, System.Func mapper) => throw null; + public static System.Collections.Generic.Dictionary ToObjectDictionary(this object obj) => throw null; + public static System.Collections.Generic.Dictionary ToSafePartialObjectDictionary(this T instance) => throw null; + public static System.Collections.Generic.Dictionary ToStringDictionary(this System.Collections.Generic.IEnumerable> from, System.Collections.Generic.IEqualityComparer comparer) => throw null; + public static System.Collections.Generic.Dictionary ToStringDictionary(this System.Collections.Generic.IEnumerable> from) => throw null; + } + + // Generated from `ServiceStack.PopulateMemberDelegate` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public delegate void PopulateMemberDelegate(object target, object source); + + // Generated from `ServiceStack.PropertyAccessor` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class PropertyAccessor + { + public PropertyAccessor(System.Reflection.PropertyInfo propertyInfo, ServiceStack.GetMemberDelegate publicGetter, ServiceStack.SetMemberDelegate publicSetter) => throw null; + public System.Reflection.PropertyInfo PropertyInfo { get => throw null; } + public ServiceStack.GetMemberDelegate PublicGetter { get => throw null; } + public ServiceStack.SetMemberDelegate PublicSetter { get => throw null; } + } + + // Generated from `ServiceStack.PropertyInvoker` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class PropertyInvoker + { + public static ServiceStack.GetMemberDelegate CreateGetter(this System.Reflection.PropertyInfo propertyInfo) => throw null; + public static ServiceStack.GetMemberDelegate CreateGetter(this System.Reflection.PropertyInfo propertyInfo) => throw null; + public static ServiceStack.SetMemberDelegate CreateSetter(this System.Reflection.PropertyInfo propertyInfo) => throw null; + public static ServiceStack.SetMemberDelegate CreateSetter(this System.Reflection.PropertyInfo propertyInfo) => throw null; + } + + // Generated from `ServiceStack.QueryStringSerializer` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class QueryStringSerializer + { + public static ServiceStack.WriteComplexTypeDelegate ComplexTypeStrategy { get => throw null; set => throw null; } + public static void InitAot() => throw null; + public static string SerializeToString(T value) => throw null; + public static void WriteLateBoundObject(System.IO.TextWriter writer, object value) => throw null; + } + + // Generated from `ServiceStack.QueryStringStrategy` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class QueryStringStrategy + { + public static bool FormUrlEncoded(System.IO.TextWriter writer, string propertyName, object obj) => throw null; + } + + // Generated from `ServiceStack.QueryStringWriter<>` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class QueryStringWriter + { + public static ServiceStack.Text.Common.WriteObjectDelegate WriteFn() => throw null; + public static void WriteIDictionary(System.IO.TextWriter writer, object oMap) => throw null; + public static void WriteObject(System.IO.TextWriter writer, object value) => throw null; + } + + // Generated from `ServiceStack.QuotaType` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public enum QuotaType + { + Fields, + Operations, + PremiumFeature, + RequestsPerHour, + Tables, + Types, + } + + // Generated from `ServiceStack.ReflectionExtensions` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class ReflectionExtensions + { + public static bool AllHaveInterfacesOfType(this System.Type assignableFromType, params System.Type[] types) => throw null; + public static bool AreAllStringOrValueTypes(params System.Type[] types) => throw null; + public static object CreateInstance() => throw null; + public static object CreateInstance(this System.Type type) => throw null; + public static object CreateInstance(string typeName) => throw null; + public static T CreateInstance(this System.Type type) => throw null; + public const string DataMember = default; + public static System.Type FirstGenericType(this System.Type type) => throw null; + public static System.Reflection.PropertyInfo[] GetAllProperties(this System.Type type) => throw null; + public static ServiceStack.EmptyCtorDelegate GetConstructorMethod(string typeName) => throw null; + public static ServiceStack.EmptyCtorDelegate GetConstructorMethod(System.Type type) => throw null; + public static ServiceStack.EmptyCtorDelegate GetConstructorMethodToCache(System.Type type) => throw null; + public static System.Runtime.Serialization.DataContractAttribute GetDataContract(this System.Type type) => throw null; + public static System.Runtime.Serialization.DataMemberAttribute GetDataMember(this System.Reflection.PropertyInfo pi) => throw null; + public static System.Runtime.Serialization.DataMemberAttribute GetDataMember(this System.Reflection.FieldInfo pi) => throw null; + public static string GetDataMemberName(this System.Reflection.PropertyInfo pi) => throw null; + public static string GetDataMemberName(this System.Reflection.FieldInfo fi) => throw null; + public static ServiceStack.Text.Support.TypePair GetGenericArgumentsIfBothHaveConvertibleGenericDefinitionTypeAndArguments(this System.Type assignableFromType, System.Type typeA, System.Type typeB) => throw null; + public static System.Type[] GetGenericArgumentsIfBothHaveSameGenericDefinitionTypeAndArguments(this System.Type assignableFromType, System.Type typeA, System.Type typeB) => throw null; + public static System.Reflection.Module GetModule(this System.Type type) => throw null; + public static System.Func GetOnDeserializing() => throw null; + public static System.Reflection.PropertyInfo[] GetPublicProperties(this System.Type type) => throw null; + public static System.Reflection.FieldInfo[] GetSerializableFields(this System.Type type) => throw null; + public static System.Reflection.PropertyInfo[] GetSerializableProperties(this System.Type type) => throw null; + public static System.TypeCode GetTypeCode(this System.Type type) => throw null; + public static System.Type GetTypeWithGenericInterfaceOf(this System.Type type, System.Type genericInterfaceType) => throw null; + public static System.Type GetTypeWithGenericTypeDefinitionOf(this System.Type type, System.Type genericTypeDefinition) => throw null; + public static System.Type GetTypeWithGenericTypeDefinitionOfAny(this System.Type type, params System.Type[] genericTypeDefinitions) => throw null; + public static System.Type GetTypeWithInterfaceOf(this System.Type type, System.Type interfaceType) => throw null; + public static System.TypeCode GetUnderlyingTypeCode(this System.Type type) => throw null; + public static bool HasAnyTypeDefinitionsOf(this System.Type genericType, params System.Type[] theseGenericTypes) => throw null; + public static bool HasGenericType(this System.Type type) => throw null; + public static bool HasInterface(this System.Type type, System.Type interfaceType) => throw null; + public static bool IsInstanceOf(this System.Type type, System.Type thisOrBaseType) => throw null; + public static bool IsIntegerType(this System.Type type) => throw null; + public static bool IsNullableType(this System.Type type) => throw null; + public static bool IsNumericType(this System.Type type) => throw null; + public static bool IsOrHasGenericInterfaceTypeOf(this System.Type type, System.Type genericTypeDefinition) => throw null; + public static bool IsRealNumberType(this System.Type type) => throw null; + public static object New(this System.Type type) => throw null; + public static T New(this System.Type type) => throw null; + public static System.Reflection.PropertyInfo[] OnlySerializableProperties(this System.Reflection.PropertyInfo[] properties, System.Type type = default(System.Type)) => throw null; + } + + // Generated from `ServiceStack.SetMemberDelegate` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public delegate void SetMemberDelegate(object instance, object value); + + // Generated from `ServiceStack.SetMemberDelegate<>` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public delegate void SetMemberDelegate(T instance, object value); + + // Generated from `ServiceStack.SetMemberRefDelegate` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public delegate void SetMemberRefDelegate(ref object instance, object propertyValue); + + // Generated from `ServiceStack.SetMemberRefDelegate<>` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public delegate void SetMemberRefDelegate(ref T instance, object value); + + // Generated from `ServiceStack.StreamExtensions` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class StreamExtensions + { + public static int AsyncBufferSize; + public static string CollapseWhitespace(this string str) => throw null; + public static System.Byte[] Combine(this System.Byte[] bytes, params System.Byte[][] withBytes) => throw null; + public static System.Int64 CopyTo(this System.IO.Stream input, System.IO.Stream output, int bufferSize) => throw null; + public static System.Int64 CopyTo(this System.IO.Stream input, System.IO.Stream output, System.Byte[] buffer) => throw null; + public static System.Int64 CopyTo(this System.IO.Stream input, System.IO.Stream output) => throw null; + public static System.Threading.Tasks.Task CopyToAsync(this System.IO.Stream input, System.IO.Stream output, System.Byte[] buffer, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task CopyToAsync(this System.IO.Stream input, System.IO.Stream output, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.IO.MemoryStream CopyToNewMemoryStream(this System.IO.Stream stream) => throw null; + public static System.Threading.Tasks.Task CopyToNewMemoryStreamAsync(this System.IO.Stream stream) => throw null; + public const int DefaultBufferSize = default; + public static System.Byte[] GetBufferAsBytes(this System.IO.MemoryStream ms) => throw null; + public static System.ReadOnlyMemory GetBufferAsMemory(this System.IO.MemoryStream ms) => throw null; + public static System.ReadOnlySpan GetBufferAsSpan(this System.IO.MemoryStream ms) => throw null; + public static System.IO.MemoryStream InMemoryStream(this System.Byte[] bytes) => throw null; + public static System.Byte[] ReadExactly(this System.IO.Stream input, int bytesToRead) => throw null; + public static System.Byte[] ReadExactly(this System.IO.Stream input, System.Byte[] buffer, int startIndex, int bytesToRead) => throw null; + public static System.Byte[] ReadExactly(this System.IO.Stream input, System.Byte[] buffer, int bytesToRead) => throw null; + public static System.Byte[] ReadExactly(this System.IO.Stream input, System.Byte[] buffer) => throw null; + public static System.Byte[] ReadFully(this System.IO.Stream input, int bufferSize) => throw null; + public static System.Byte[] ReadFully(this System.IO.Stream input, System.Byte[] buffer) => throw null; + public static System.Byte[] ReadFully(this System.IO.Stream input) => throw null; + public static System.ReadOnlyMemory ReadFullyAsMemory(this System.IO.Stream input, int bufferSize) => throw null; + public static System.ReadOnlyMemory ReadFullyAsMemory(this System.IO.Stream input, System.Byte[] buffer) => throw null; + public static System.ReadOnlyMemory ReadFullyAsMemory(this System.IO.Stream input) => throw null; + public static System.Threading.Tasks.Task> ReadFullyAsMemoryAsync(this System.IO.Stream input, int bufferSize, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task> ReadFullyAsMemoryAsync(this System.IO.Stream input, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task> ReadFullyAsMemoryAsync(this System.IO.Stream input, System.Byte[] buffer, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task ReadFullyAsync(this System.IO.Stream input, int bufferSize, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task ReadFullyAsync(this System.IO.Stream input, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task ReadFullyAsync(this System.IO.Stream input, System.Byte[] buffer, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Collections.Generic.IEnumerable ReadLines(this System.IO.Stream stream) => throw null; + public static string ReadToEnd(this System.IO.Stream stream, System.Text.Encoding encoding) => throw null; + public static string ReadToEnd(this System.IO.Stream stream) => throw null; + public static string ReadToEnd(this System.IO.MemoryStream ms, System.Text.Encoding encoding) => throw null; + public static string ReadToEnd(this System.IO.MemoryStream ms) => throw null; + public static System.Threading.Tasks.Task ReadToEndAsync(this System.IO.Stream stream, System.Text.Encoding encoding) => throw null; + public static System.Threading.Tasks.Task ReadToEndAsync(this System.IO.Stream stream) => throw null; + public static System.Threading.Tasks.Task ReadToEndAsync(this System.IO.MemoryStream ms, System.Text.Encoding encoding) => throw null; + public static System.Threading.Tasks.Task ReadToEndAsync(this System.IO.MemoryStream ms) => throw null; + public static string ToMd5Hash(this System.IO.Stream stream) => throw null; + public static string ToMd5Hash(this System.Byte[] bytes) => throw null; + public static System.Threading.Tasks.Task WriteAsync(this System.IO.Stream stream, string text, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task WriteAsync(this System.IO.Stream stream, System.ReadOnlyMemory value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task WriteAsync(this System.IO.Stream stream, System.Byte[] bytes, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Int64 WriteTo(this System.IO.Stream inStream, System.IO.Stream outStream) => throw null; + public static System.Threading.Tasks.Task WriteToAsync(this System.IO.Stream stream, System.IO.Stream output, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task WriteToAsync(this System.IO.Stream stream, System.IO.Stream output, System.Text.Encoding encoding, System.Threading.CancellationToken token) => throw null; + public static System.Threading.Tasks.Task WriteToAsync(this System.IO.MemoryStream stream, System.IO.Stream output, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task WriteToAsync(this System.IO.MemoryStream stream, System.IO.Stream output, System.Text.Encoding encoding, System.Threading.CancellationToken token) => throw null; + } + + // Generated from `ServiceStack.StringDictionary` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class StringDictionary : System.Collections.Generic.Dictionary + { + public StringDictionary(int capacity, System.Collections.Generic.IEqualityComparer comparer) => throw null; + public StringDictionary(int capacity) => throw null; + public StringDictionary(System.Collections.Generic.IEqualityComparer comparer) => throw null; + public StringDictionary(System.Collections.Generic.IDictionary dictionary, System.Collections.Generic.IEqualityComparer comparer) => throw null; + public StringDictionary(System.Collections.Generic.IDictionary dictionary) => throw null; + public StringDictionary() => throw null; + protected StringDictionary(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) => throw null; + } + + // Generated from `ServiceStack.StringExtensions` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class StringExtensions + { + public static string AppendPath(this string uri, params string[] uriComponents) => throw null; + public static string AppendUrlPaths(this string uri, params string[] uriComponents) => throw null; + public static string AppendUrlPathsRaw(this string uri, params string[] uriComponents) => throw null; + public static string BaseConvert(this string source, int from, int to) => throw null; + public static int CompareIgnoreCase(this string strA, string strB) => throw null; + public static bool ContainsAny(this string text, string[] testMatches, System.StringComparison comparisonType) => throw null; + public static bool ContainsAny(this string text, params string[] testMatches) => throw null; + public static int CountOccurrencesOf(this string text, System.Char needle) => throw null; + public static void CreateDirectory(this string dirPath) => throw null; + public static string DecodeJsv(this string value) => throw null; + public static bool DirectoryExists(this string dirPath) => throw null; + public static string EncodeJson(this string value) => throw null; + public static string EncodeJsv(this string value) => throw null; + public static string EncodeXml(this string value) => throw null; + public static bool EndsWithIgnoreCase(this string text, string endsWith) => throw null; + public static bool EndsWithInvariant(this string str, string endsWith) => throw null; + public static bool EqualsIgnoreCase(this string value, string other) => throw null; + public static string ExtractContents(this string fromText, string uniqueMarker, string startAfter, string endAt) => throw null; + public static string ExtractContents(this string fromText, string startAfter, string endAt) => throw null; + public static bool FileExists(this string filePath) => throw null; + public static string Fmt(this string text, params object[] args) => throw null; + public static string Fmt(this string text, object arg1, object arg2, object arg3) => throw null; + public static string Fmt(this string text, object arg1, object arg2) => throw null; + public static string Fmt(this string text, object arg1) => throw null; + public static string Fmt(this string text, System.IFormatProvider provider, params object[] args) => throw null; + public static string FormatWith(this string text, params object[] args) => throw null; + public static string FromAsciiBytes(this System.Byte[] bytes) => throw null; + public static System.Byte[] FromBase64UrlSafe(this string input) => throw null; + public static T FromCsv(this string csv) => throw null; + public static T FromJson(this string json) => throw null; + public static T FromJsonSpan(this System.ReadOnlySpan json) => throw null; + public static T FromJsv(this string jsv) => throw null; + public static T FromJsvSpan(this System.ReadOnlySpan jsv) => throw null; + public static string FromUtf8Bytes(this System.Byte[] bytes) => throw null; + public static T FromXml(this string json) => throw null; + public static string GetExtension(this string filePath) => throw null; + public static bool Glob(this string value, string pattern) => throw null; + public static bool GlobPath(this string filePath, string pattern) => throw null; + public static string HexEscape(this string text, params System.Char[] anyCharOf) => throw null; + public static string HexUnescape(this string text, params System.Char[] anyCharOf) => throw null; + public static int IndexOfAny(this string text, params string[] needles) => throw null; + public static int IndexOfAny(this string text, int startIndex, params string[] needles) => throw null; + public static bool IsAnonymousType(this System.Type type) => throw null; + public static bool IsEmpty(this string value) => throw null; + public static bool IsInt(this string text) => throw null; + public static bool IsNullOrEmpty(this string value) => throw null; + public static bool IsSystemType(this System.Type type) => throw null; + public static bool IsTuple(this System.Type type) => throw null; + public static bool IsUserEnum(this System.Type type) => throw null; + public static bool IsUserType(this System.Type type) => throw null; + public static bool IsValidVarName(this string name) => throw null; + public static bool IsValidVarRef(this string name) => throw null; + public static string Join(this System.Collections.Generic.List items, string delimeter) => throw null; + public static string Join(this System.Collections.Generic.List items) => throw null; + public static string LastLeftPart(this string strVal, string needle) => throw null; + public static string LastLeftPart(this string strVal, System.Char needle) => throw null; + public static string LastRightPart(this string strVal, string needle) => throw null; + public static string LastRightPart(this string strVal, System.Char needle) => throw null; + public static string LeftPart(this string strVal, string needle) => throw null; + public static string LeftPart(this string strVal, System.Char needle) => throw null; + public static bool Matches(this string value, string pattern) => throw null; + public static string NormalizeNewLines(this string text) => throw null; + public static string ParentDirectory(this string filePath) => throw null; + public static System.Collections.Generic.List> ParseAsKeyValues(this string text, string delimiter = default(string)) => throw null; + public static System.Collections.Generic.Dictionary ParseKeyValueText(this string text, string delimiter = default(string)) => throw null; + public static string Quoted(this string text) => throw null; + public static string ReadAllText(this string filePath) => throw null; + public static System.Collections.Generic.IEnumerable ReadLines(this string text) => throw null; + public static string RemoveCharFlags(this string text, bool[] charFlags) => throw null; + public static string ReplaceAll(this string haystack, string needle, string replacement) => throw null; + public static string ReplaceFirst(this string haystack, string needle, string replacement) => throw null; + public static string RightPart(this string strVal, string needle) => throw null; + public static string RightPart(this string strVal, System.Char needle) => throw null; + public static string SafeSubstring(this string value, int startIndex, int length) => throw null; + public static string SafeSubstring(this string value, int startIndex) => throw null; + public static string SafeVarName(this string text) => throw null; + public static string SafeVarRef(this string text) => throw null; + public static string SplitCamelCase(this string value) => throw null; + public static string[] SplitOnFirst(this string strVal, string needle) => throw null; + public static string[] SplitOnFirst(this string strVal, System.Char needle) => throw null; + public static string[] SplitOnLast(this string strVal, string needle) => throw null; + public static string[] SplitOnLast(this string strVal, System.Char needle) => throw null; + public static bool StartsWithIgnoreCase(this string text, string startsWith) => throw null; + public static string StripHtml(this string html) => throw null; + public static string StripMarkdownMarkup(this string markdown) => throw null; + public static string StripQuotes(this string text) => throw null; + public static string SubstringWithElipsis(this string value, int startIndex, int length) => throw null; + public static string SubstringWithEllipsis(this string value, int startIndex, int length) => throw null; + public static System.Byte[] ToAsciiBytes(this string value) => throw null; + public static string ToBase64UrlSafe(this System.IO.MemoryStream ms) => throw null; + public static string ToBase64UrlSafe(this System.Byte[] input) => throw null; + public static string ToCamelCase(this string value) => throw null; + public static string ToCsv(this T obj) => throw null; + public static System.Decimal ToDecimal(this string text, System.Decimal defaultValue) => throw null; + public static System.Decimal ToDecimal(this string text) => throw null; + public static System.Decimal ToDecimalInvariant(this string text) => throw null; + public static double ToDouble(this string text, double defaultValue) => throw null; + public static double ToDouble(this string text) => throw null; + public static double ToDoubleInvariant(this string text) => throw null; + public static string ToEnglish(this string camelCase) => throw null; + public static T ToEnum(this string value) => throw null; + public static T ToEnumOrDefault(this string value, T defaultValue) => throw null; + public static float ToFloat(this string text, float defaultValue) => throw null; + public static float ToFloat(this string text) => throw null; + public static float ToFloatInvariant(this string text) => throw null; + public static string ToHex(this System.Byte[] hashBytes, bool upper = default(bool)) => throw null; + public static string ToHttps(this string url) => throw null; + public static int ToInt(this string text, int defaultValue) => throw null; + public static int ToInt(this string text) => throw null; + public static System.Int64 ToInt64(this string text, System.Int64 defaultValue) => throw null; + public static System.Int64 ToInt64(this string text) => throw null; + public static string ToInvariantUpper(this System.Char value) => throw null; + public static string ToJson(this T obj) => throw null; + public static string ToJsv(this T obj) => throw null; + public static System.Int64 ToLong(this string text, System.Int64 defaultValue) => throw null; + public static System.Int64 ToLong(this string text) => throw null; + public static string ToLowerSafe(this string value) => throw null; + public static string ToLowercaseUnderscore(this string value) => throw null; + public static string ToNullIfEmpty(this string text) => throw null; + public static string ToParentPath(this string path) => throw null; + public static string ToPascalCase(this string value) => throw null; + public static string ToRot13(this string value) => throw null; + public static string ToSafeJson(this T obj) => throw null; + public static string ToSafeJsv(this T obj) => throw null; + public static string ToTitleCase(this string value) => throw null; + public static string ToUpperSafe(this string value) => throw null; + public static System.Byte[] ToUtf8Bytes(this string value) => throw null; + public static System.Byte[] ToUtf8Bytes(this int intVal) => throw null; + public static System.Byte[] ToUtf8Bytes(this double doubleVal) => throw null; + public static System.Byte[] ToUtf8Bytes(this System.UInt64 ulongVal) => throw null; + public static System.Byte[] ToUtf8Bytes(this System.Int64 longVal) => throw null; + public static string ToXml(this T obj) => throw null; + public static string TrimPrefixes(this string fromString, params string[] prefixes) => throw null; + public static string UrlDecode(this string text) => throw null; + public static string UrlEncode(this string text, bool upperCase = default(bool)) => throw null; + public static string UrlFormat(this string url, params string[] urlComponents) => throw null; + public static string UrlWithTrailingSlash(this string url) => throw null; + public static string WithTrailingSlash(this string path) => throw null; + public static string WithoutBom(this string value) => throw null; + public static string WithoutExtension(this string filePath) => throw null; + } + + // Generated from `ServiceStack.TaskExtensions` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class TaskExtensions + { + public static System.Threading.Tasks.Task Error(this System.Threading.Tasks.Task task, System.Action fn, bool onUiThread = default(bool), System.Threading.Tasks.TaskContinuationOptions taskOptions = default(System.Threading.Tasks.TaskContinuationOptions)) => throw null; + public static System.Threading.Tasks.Task Error(this System.Threading.Tasks.Task task, System.Action fn, bool onUiThread = default(bool), System.Threading.Tasks.TaskContinuationOptions taskOptions = default(System.Threading.Tasks.TaskContinuationOptions)) => throw null; + public static System.Threading.Tasks.Task Success(this System.Threading.Tasks.Task task, System.Action fn, bool onUiThread = default(bool), System.Threading.Tasks.TaskContinuationOptions taskOptions = default(System.Threading.Tasks.TaskContinuationOptions)) => throw null; + public static System.Threading.Tasks.Task Success(this System.Threading.Tasks.Task task, System.Action fn, bool onUiThread = default(bool), System.Threading.Tasks.TaskContinuationOptions taskOptions = default(System.Threading.Tasks.TaskContinuationOptions)) => throw null; + public static System.Exception UnwrapIfSingleException(this System.Threading.Tasks.Task task) => throw null; + public static System.Exception UnwrapIfSingleException(this System.Threading.Tasks.Task task) => throw null; + public static System.Exception UnwrapIfSingleException(this System.Exception ex) => throw null; + } + + // Generated from `ServiceStack.TaskResult` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class TaskResult + { + public static System.Threading.Tasks.Task Canceled; + public static System.Threading.Tasks.Task False; + public static System.Threading.Tasks.Task Finished; + public static System.Threading.Tasks.Task One; + public static System.Threading.Tasks.Task True; + public static System.Threading.Tasks.Task Zero; + } + + // Generated from `ServiceStack.TaskUtils` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class TaskUtils + { + public static System.Threading.Tasks.Task Cast(this System.Threading.Tasks.Task task) where To : From => throw null; + public static System.Threading.Tasks.Task EachAsync(this System.Collections.Generic.IEnumerable items, System.Func fn) => throw null; + public static System.Threading.Tasks.Task FromResult(T result) => throw null; + public static System.Threading.Tasks.Task InTask(this T result) => throw null; + public static System.Threading.Tasks.Task InTask(this System.Exception ex) => throw null; + public static bool IsSuccess(this System.Threading.Tasks.Task task) => throw null; + public static System.Threading.Tasks.TaskScheduler SafeTaskScheduler() => throw null; + public static void Sleep(int timeMs) => throw null; + public static void Sleep(System.TimeSpan time) => throw null; + public static System.Threading.Tasks.Task Then(this System.Threading.Tasks.Task task, System.Func fn) => throw null; + public static System.Threading.Tasks.Task Then(this System.Threading.Tasks.Task task, System.Func fn) => throw null; + } + + // Generated from `ServiceStack.TextExtensions` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class TextExtensions + { + public static string FromCsvField(this string text) => throw null; + public static string[] FromCsvFields(params string[] texts) => throw null; + public static System.Collections.Generic.List FromCsvFields(this System.Collections.Generic.IEnumerable texts) => throw null; + public static string SerializeToString(this T value) => throw null; + public static string ToCsvField(this string text) => throw null; + public static object ToCsvField(this object text) => throw null; + } + + // Generated from `ServiceStack.TypeConstants` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class TypeConstants + { + public static bool[] EmptyBoolArray; + public static System.Collections.Generic.List EmptyBoolList; + public static System.Byte[] EmptyByteArray; + public static System.Byte[][] EmptyByteArrayArray; + public static System.Collections.Generic.List EmptyByteList; + public static System.Char[] EmptyCharArray; + public static System.Collections.Generic.List EmptyCharList; + public static System.Reflection.FieldInfo[] EmptyFieldInfoArray; + public static System.Collections.Generic.List EmptyFieldInfoList; + public static int[] EmptyIntArray; + public static System.Collections.Generic.List EmptyIntList; + public static System.Int64[] EmptyLongArray; + public static System.Collections.Generic.List EmptyLongList; + public static object EmptyObject; + public static object[] EmptyObjectArray; + public static System.Collections.Generic.Dictionary EmptyObjectDictionary; + public static System.Collections.Generic.List EmptyObjectList; + public static System.Reflection.PropertyInfo[] EmptyPropertyInfoArray; + public static System.Collections.Generic.List EmptyPropertyInfoList; + public static string[] EmptyStringArray; + public static System.Collections.Generic.Dictionary EmptyStringDictionary; + public static System.Collections.Generic.List EmptyStringList; + public static System.ReadOnlyMemory EmptyStringMemory { get => throw null; } + public static System.ReadOnlySpan EmptyStringSpan { get => throw null; } + public static System.Threading.Tasks.Task EmptyTask; + public static System.Type[] EmptyTypeArray; + public static System.Collections.Generic.List EmptyTypeList; + public static System.Threading.Tasks.Task FalseTask; + public const System.Char NonWidthWhiteSpace = default; + public static System.Char[] NonWidthWhiteSpaceChars; + public static System.ReadOnlyMemory NullStringMemory { get => throw null; } + public static System.ReadOnlySpan NullStringSpan { get => throw null; } + public static System.Threading.Tasks.Task TrueTask; + public static System.Threading.Tasks.Task ZeroTask; + } + + // Generated from `ServiceStack.TypeConstants<>` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class TypeConstants + { + public static T[] EmptyArray; + public static System.Collections.Generic.HashSet EmptyHashSet; + public static System.Collections.Generic.List EmptyList; + } + + // Generated from `ServiceStack.TypeFields` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public abstract class TypeFields + { + public static System.Type FactoryType; + public System.Collections.Generic.Dictionary FieldsMap; + public static ServiceStack.TypeFields Get(System.Type type) => throw null; + public ServiceStack.FieldAccessor GetAccessor(string propertyName) => throw null; + public virtual System.Reflection.FieldInfo GetPublicField(string name) => throw null; + public virtual ServiceStack.GetMemberDelegate GetPublicGetter(string name) => throw null; + public virtual ServiceStack.GetMemberDelegate GetPublicGetter(System.Reflection.FieldInfo fi) => throw null; + public virtual ServiceStack.SetMemberDelegate GetPublicSetter(string name) => throw null; + public virtual ServiceStack.SetMemberDelegate GetPublicSetter(System.Reflection.FieldInfo fi) => throw null; + public virtual ServiceStack.SetMemberRefDelegate GetPublicSetterRef(string name) => throw null; + public System.Reflection.FieldInfo[] PublicFieldInfos { get => throw null; set => throw null; } + public System.Type Type { get => throw null; set => throw null; } + protected TypeFields() => throw null; + } + + // Generated from `ServiceStack.TypeFields<>` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class TypeFields : ServiceStack.TypeFields + { + public static ServiceStack.FieldAccessor GetAccessor(string propertyName) => throw null; + public static ServiceStack.TypeFields Instance; + public TypeFields() => throw null; + } + + // Generated from `ServiceStack.TypeProperties` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public abstract class TypeProperties + { + public static System.Type FactoryType; + public static ServiceStack.TypeProperties Get(System.Type type) => throw null; + public ServiceStack.PropertyAccessor GetAccessor(string propertyName) => throw null; + public ServiceStack.GetMemberDelegate GetPublicGetter(string name) => throw null; + public ServiceStack.GetMemberDelegate GetPublicGetter(System.Reflection.PropertyInfo pi) => throw null; + public System.Reflection.PropertyInfo GetPublicProperty(string name) => throw null; + public ServiceStack.SetMemberDelegate GetPublicSetter(string name) => throw null; + public ServiceStack.SetMemberDelegate GetPublicSetter(System.Reflection.PropertyInfo pi) => throw null; + public System.Collections.Generic.Dictionary PropertyMap; + public System.Reflection.PropertyInfo[] PublicPropertyInfos { get => throw null; set => throw null; } + public System.Type Type { get => throw null; set => throw null; } + protected TypeProperties() => throw null; + } + + // Generated from `ServiceStack.TypeProperties<>` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class TypeProperties : ServiceStack.TypeProperties + { + public static ServiceStack.PropertyAccessor GetAccessor(string propertyName) => throw null; + public static ServiceStack.TypeProperties Instance; + public TypeProperties() => throw null; + } + + // Generated from `ServiceStack.WriteComplexTypeDelegate` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public delegate bool WriteComplexTypeDelegate(System.IO.TextWriter writer, string propertyName, object obj); + + namespace Extensions + { + // Generated from `ServiceStack.Extensions.ServiceStackExtensions` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class ServiceStackExtensions + { + public static System.ReadOnlyMemory Trim(this System.ReadOnlyMemory span) => throw null; + public static System.ReadOnlyMemory TrimEnd(this System.ReadOnlyMemory value) => throw null; + public static System.ReadOnlyMemory TrimStart(this System.ReadOnlyMemory value) => throw null; + } + + } + namespace Memory + { + // Generated from `ServiceStack.Memory.NetCoreMemory` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class NetCoreMemory : ServiceStack.Text.MemoryProvider + { + public override System.Text.StringBuilder Append(System.Text.StringBuilder sb, System.ReadOnlySpan value) => throw null; + public static void Configure() => throw null; + public override object Deserialize(System.IO.Stream stream, System.Type type, ServiceStack.Text.Common.DeserializeStringSpanDelegate deserializer) => throw null; + public override System.Threading.Tasks.Task DeserializeAsync(System.IO.Stream stream, System.Type type, ServiceStack.Text.Common.DeserializeStringSpanDelegate deserializer) => throw null; + public override int FromUtf8(System.ReadOnlySpan source, System.Span destination) => throw null; + public override System.ReadOnlyMemory FromUtf8(System.ReadOnlySpan source) => throw null; + public override string FromUtf8Bytes(System.ReadOnlySpan source) => throw null; + public override int GetUtf8ByteCount(System.ReadOnlySpan chars) => throw null; + public override int GetUtf8CharCount(System.ReadOnlySpan bytes) => throw null; + public override System.Byte[] ParseBase64(System.ReadOnlySpan value) => throw null; + public override bool ParseBoolean(System.ReadOnlySpan value) => throw null; + public override System.Byte ParseByte(System.ReadOnlySpan value) => throw null; + public override System.Decimal ParseDecimal(System.ReadOnlySpan value, bool allowThousands) => throw null; + public override System.Decimal ParseDecimal(System.ReadOnlySpan value) => throw null; + public override double ParseDouble(System.ReadOnlySpan value) => throw null; + public override float ParseFloat(System.ReadOnlySpan value) => throw null; + public override System.Guid ParseGuid(System.ReadOnlySpan value) => throw null; + public override System.Int16 ParseInt16(System.ReadOnlySpan value) => throw null; + public override int ParseInt32(System.ReadOnlySpan value) => throw null; + public override System.Int64 ParseInt64(System.ReadOnlySpan value) => throw null; + public override System.SByte ParseSByte(System.ReadOnlySpan value) => throw null; + public override System.UInt16 ParseUInt16(System.ReadOnlySpan value) => throw null; + public override System.UInt32 ParseUInt32(System.ReadOnlySpan value, System.Globalization.NumberStyles style) => throw null; + public override System.UInt32 ParseUInt32(System.ReadOnlySpan value) => throw null; + public override System.UInt64 ParseUInt64(System.ReadOnlySpan value) => throw null; + public static ServiceStack.Memory.NetCoreMemory Provider { get => throw null; } + public override string ToBase64(System.ReadOnlyMemory value) => throw null; + public override System.IO.MemoryStream ToMemoryStream(System.ReadOnlySpan source) => throw null; + public override int ToUtf8(System.ReadOnlySpan source, System.Span destination) => throw null; + public override System.ReadOnlyMemory ToUtf8(System.ReadOnlySpan source) => throw null; + public override System.Byte[] ToUtf8Bytes(System.ReadOnlySpan source) => throw null; + public override bool TryParseBoolean(System.ReadOnlySpan value, out bool result) => throw null; + public override bool TryParseDecimal(System.ReadOnlySpan value, out System.Decimal result) => throw null; + public override bool TryParseDouble(System.ReadOnlySpan value, out double result) => throw null; + public override bool TryParseFloat(System.ReadOnlySpan value, out float result) => throw null; + public override void Write(System.IO.Stream stream, System.ReadOnlyMemory value) => throw null; + public override void Write(System.IO.Stream stream, System.ReadOnlyMemory value) => throw null; + public override System.Threading.Tasks.Task WriteAsync(System.IO.Stream stream, System.ReadOnlySpan value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public override System.Threading.Tasks.Task WriteAsync(System.IO.Stream stream, System.ReadOnlyMemory value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public override System.Threading.Tasks.Task WriteAsync(System.IO.Stream stream, System.ReadOnlyMemory value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + } + + } + namespace Text + { + // Generated from `ServiceStack.Text.AssemblyUtils` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class AssemblyUtils + { + public static System.Type FindType(string typeName, string assemblyName) => throw null; + public static System.Type FindType(string typeName) => throw null; + public static System.Type FindTypeFromLoadedAssemblies(string typeName) => throw null; + public static string GetAssemblyBinPath(System.Reflection.Assembly assembly) => throw null; + public static System.Reflection.Assembly LoadAssembly(string assemblyPath) => throw null; + public static System.Type MainInterface() => throw null; + public static string ToTypeString(this System.Type type) => throw null; + public static string WriteType(System.Type type) => throw null; + } + + // Generated from `ServiceStack.Text.CachedTypeInfo` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class CachedTypeInfo + { + public CachedTypeInfo(System.Type type) => throw null; + public ServiceStack.Text.EnumInfo EnumInfo { get => throw null; } + public static ServiceStack.Text.CachedTypeInfo Get(System.Type type) => throw null; + } + + // Generated from `ServiceStack.Text.CharMemoryExtensions` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class CharMemoryExtensions + { + public static System.ReadOnlyMemory Advance(this System.ReadOnlyMemory text, int to) => throw null; + public static System.ReadOnlyMemory AdvancePastChar(this System.ReadOnlyMemory literal, System.Char delim) => throw null; + public static System.ReadOnlyMemory AdvancePastWhitespace(this System.ReadOnlyMemory literal) => throw null; + public static bool EndsWith(this System.ReadOnlyMemory value, string other, System.StringComparison comparison) => throw null; + public static bool EndsWith(this System.ReadOnlyMemory value, string other) => throw null; + public static bool EqualsOrdinal(this System.ReadOnlyMemory value, string other) => throw null; + public static bool EqualsOrdinal(this System.ReadOnlyMemory value, System.ReadOnlyMemory other) => throw null; + public static System.ReadOnlyMemory FromUtf8(this System.ReadOnlyMemory bytes) => throw null; + public static int IndexOf(this System.ReadOnlyMemory value, string needle, int start) => throw null; + public static int IndexOf(this System.ReadOnlyMemory value, string needle) => throw null; + public static int IndexOf(this System.ReadOnlyMemory value, System.Char needle, int start) => throw null; + public static int IndexOf(this System.ReadOnlyMemory value, System.Char needle) => throw null; + public static bool IsNullOrEmpty(this System.ReadOnlyMemory value) => throw null; + public static bool IsNullOrWhiteSpace(this System.ReadOnlyMemory value) => throw null; + public static bool IsWhiteSpace(this System.ReadOnlyMemory value) => throw null; + public static int LastIndexOf(this System.ReadOnlyMemory value, string needle, int start) => throw null; + public static int LastIndexOf(this System.ReadOnlyMemory value, string needle) => throw null; + public static int LastIndexOf(this System.ReadOnlyMemory value, System.Char needle, int start) => throw null; + public static int LastIndexOf(this System.ReadOnlyMemory value, System.Char needle) => throw null; + public static System.ReadOnlyMemory LastLeftPart(this System.ReadOnlyMemory strVal, string needle) => throw null; + public static System.ReadOnlyMemory LastLeftPart(this System.ReadOnlyMemory strVal, System.Char needle) => throw null; + public static System.ReadOnlyMemory LastRightPart(this System.ReadOnlyMemory strVal, string needle) => throw null; + public static System.ReadOnlyMemory LastRightPart(this System.ReadOnlyMemory strVal, System.Char needle) => throw null; + public static System.ReadOnlyMemory LeftPart(this System.ReadOnlyMemory strVal, string needle) => throw null; + public static System.ReadOnlyMemory LeftPart(this System.ReadOnlyMemory strVal, System.Char needle) => throw null; + public static bool ParseBoolean(this System.ReadOnlyMemory value) => throw null; + public static System.Byte ParseByte(this System.ReadOnlyMemory value) => throw null; + public static System.Decimal ParseDecimal(this System.ReadOnlyMemory value) => throw null; + public static double ParseDouble(this System.ReadOnlyMemory value) => throw null; + public static float ParseFloat(this System.ReadOnlyMemory value) => throw null; + public static System.Guid ParseGuid(this System.ReadOnlyMemory value) => throw null; + public static System.Int16 ParseInt16(this System.ReadOnlyMemory value) => throw null; + public static int ParseInt32(this System.ReadOnlyMemory value) => throw null; + public static System.Int64 ParseInt64(this System.ReadOnlyMemory value) => throw null; + public static System.SByte ParseSByte(this System.ReadOnlyMemory value) => throw null; + public static System.UInt16 ParseUInt16(this System.ReadOnlyMemory value) => throw null; + public static System.UInt32 ParseUInt32(this System.ReadOnlyMemory value) => throw null; + public static System.UInt64 ParseUInt64(this System.ReadOnlyMemory value) => throw null; + public static System.ReadOnlyMemory RightPart(this System.ReadOnlyMemory strVal, string needle) => throw null; + public static System.ReadOnlyMemory RightPart(this System.ReadOnlyMemory strVal, System.Char needle) => throw null; + public static System.ReadOnlyMemory SafeSlice(this System.ReadOnlyMemory value, int startIndex, int length) => throw null; + public static System.ReadOnlyMemory SafeSlice(this System.ReadOnlyMemory value, int startIndex) => throw null; + public static void SplitOnFirst(this System.ReadOnlyMemory strVal, System.ReadOnlyMemory needle, out System.ReadOnlyMemory first, out System.ReadOnlyMemory last) => throw null; + public static void SplitOnFirst(this System.ReadOnlyMemory strVal, System.Char needle, out System.ReadOnlyMemory first, out System.ReadOnlyMemory last) => throw null; + public static void SplitOnLast(this System.ReadOnlyMemory strVal, System.ReadOnlyMemory needle, out System.ReadOnlyMemory first, out System.ReadOnlyMemory last) => throw null; + public static void SplitOnLast(this System.ReadOnlyMemory strVal, System.Char needle, out System.ReadOnlyMemory first, out System.ReadOnlyMemory last) => throw null; + public static bool StartsWith(this System.ReadOnlyMemory value, string other, System.StringComparison comparison) => throw null; + public static bool StartsWith(this System.ReadOnlyMemory value, string other) => throw null; + public static string SubstringWithEllipsis(this System.ReadOnlyMemory value, int startIndex, int length) => throw null; + public static System.ReadOnlyMemory ToUtf8(this System.ReadOnlyMemory chars) => throw null; + public static bool TryParseBoolean(this System.ReadOnlyMemory value, out bool result) => throw null; + public static bool TryParseDecimal(this System.ReadOnlyMemory value, out System.Decimal result) => throw null; + public static bool TryParseDouble(this System.ReadOnlyMemory value, out double result) => throw null; + public static bool TryParseFloat(this System.ReadOnlyMemory value, out float result) => throw null; + public static bool TryReadLine(this System.ReadOnlyMemory text, out System.ReadOnlyMemory line, ref int startIndex) => throw null; + public static bool TryReadPart(this System.ReadOnlyMemory text, System.ReadOnlyMemory needle, out System.ReadOnlyMemory part, ref int startIndex) => throw null; + } + + // Generated from `ServiceStack.Text.Config` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class Config + { + public bool AlwaysUseUtc { get => throw null; set => throw null; } + public bool AppendUtcOffset { get => throw null; set => throw null; } + public static ServiceStack.Text.Config AssertNotInit() => throw null; + public bool AssumeUtc { get => throw null; set => throw null; } + public Config() => throw null; + public bool ConvertObjectTypesIntoStringDictionary { get => throw null; set => throw null; } + public ServiceStack.Text.DateHandler DateHandler { get => throw null; set => throw null; } + public string DateTimeFormat { get => throw null; set => throw null; } + public static ServiceStack.Text.Config Defaults { get => throw null; } + public bool EmitCamelCaseNames { get => throw null; set => throw null; } + public bool EmitLowercaseUnderscoreNames { get => throw null; set => throw null; } + public bool EscapeHtmlChars { get => throw null; set => throw null; } + public bool EscapeUnicode { get => throw null; set => throw null; } + public bool ExcludeDefaultValues { get => throw null; set => throw null; } + public string[] ExcludePropertyReferences { get => throw null; set => throw null; } + public bool ExcludeTypeInfo { get => throw null; set => throw null; } + public System.Collections.Generic.HashSet ExcludeTypeNames { get => throw null; set => throw null; } + public System.Collections.Generic.HashSet ExcludeTypes { get => throw null; set => throw null; } + public bool IncludeDefaultEnums { get => throw null; set => throw null; } + public bool IncludeNullValues { get => throw null; set => throw null; } + public bool IncludeNullValuesInDictionaries { get => throw null; set => throw null; } + public bool IncludePublicFields { get => throw null; set => throw null; } + public bool IncludeTypeInfo { get => throw null; set => throw null; } + public static void Init(ServiceStack.Text.Config config) => throw null; + public static void Init() => throw null; + public int MaxDepth { get => throw null; set => throw null; } + public ServiceStack.EmptyCtorFactoryDelegate ModelFactory { get => throw null; set => throw null; } + public ServiceStack.Text.Common.DeserializationErrorDelegate OnDeserializationError { get => throw null; set => throw null; } + public ServiceStack.Text.ParseAsType ParsePrimitiveFloatingPointTypes { get => throw null; set => throw null; } + public System.Func ParsePrimitiveFn { get => throw null; set => throw null; } + public ServiceStack.Text.ParseAsType ParsePrimitiveIntegerTypes { get => throw null; set => throw null; } + public ServiceStack.Text.Config Populate(ServiceStack.Text.Config config) => throw null; + public bool PreferInterfaces { get => throw null; set => throw null; } + public ServiceStack.Text.PropertyConvention PropertyConvention { get => throw null; set => throw null; } + public bool SkipDateTimeConversion { get => throw null; set => throw null; } + public ServiceStack.Text.TextCase TextCase { get => throw null; set => throw null; } + public bool ThrowOnError { get => throw null; set => throw null; } + public ServiceStack.Text.TimeSpanHandler TimeSpanHandler { get => throw null; set => throw null; } + public bool TreatEnumAsInteger { get => throw null; set => throw null; } + public bool TryParseIntoBestFit { get => throw null; set => throw null; } + public bool TryToParseNumericType { get => throw null; set => throw null; } + public bool TryToParsePrimitiveTypeValues { get => throw null; set => throw null; } + public string TypeAttr { get => throw null; set => throw null; } + public System.ReadOnlyMemory TypeAttrMemory { get => throw null; } + public System.Func TypeFinder { get => throw null; set => throw null; } + public System.Func TypeWriter { get => throw null; set => throw null; } + public static void UnsafeInit(ServiceStack.Text.Config config) => throw null; + } + + // Generated from `ServiceStack.Text.ConvertibleTypeKey` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ConvertibleTypeKey + { + public ConvertibleTypeKey(System.Type toInstanceType, System.Type fromElementType) => throw null; + public ConvertibleTypeKey() => throw null; + public override bool Equals(object obj) => throw null; + public bool Equals(ServiceStack.Text.ConvertibleTypeKey other) => throw null; + public System.Type FromElementType { get => throw null; set => throw null; } + public override int GetHashCode() => throw null; + public System.Type ToInstanceType { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.Text.CsvAttribute` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class CsvAttribute : System.Attribute + { + public CsvAttribute(ServiceStack.Text.CsvBehavior csvBehavior) => throw null; + public ServiceStack.Text.CsvBehavior CsvBehavior { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.Text.CsvBehavior` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public enum CsvBehavior + { + FirstEnumerable, + } + + // Generated from `ServiceStack.Text.CsvConfig` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class CsvConfig + { + public static string[] EscapeStrings { get => throw null; set => throw null; } + public static string ItemDelimiterString { get => throw null; set => throw null; } + public static string ItemSeperatorString { get => throw null; set => throw null; } + public static System.Globalization.CultureInfo RealNumberCultureInfo { get => throw null; set => throw null; } + public static void Reset() => throw null; + public static string RowSeparatorString { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.Text.CsvConfig<>` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class CsvConfig + { + public static object CustomHeaders { set => throw null; } + public static System.Collections.Generic.Dictionary CustomHeadersMap { get => throw null; set => throw null; } + public static bool OmitHeaders { get => throw null; set => throw null; } + public static void Reset() => throw null; + } + + // Generated from `ServiceStack.Text.CsvReader` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class CsvReader + { + public CsvReader() => throw null; + public static string EatValue(string value, ref int i) => throw null; + public static System.Collections.Generic.List ParseFields(string line, System.Func parseFn) => throw null; + public static System.Collections.Generic.List ParseFields(string line) => throw null; + public static System.Collections.Generic.List ParseLines(string csv) => throw null; + } + + // Generated from `ServiceStack.Text.CsvReader<>` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class CsvReader + { + public CsvReader() => throw null; + public static System.Collections.Generic.List GetRows(System.Collections.Generic.IEnumerable records) => throw null; + public static System.Collections.Generic.List Headers { get => throw null; set => throw null; } + public static System.Collections.Generic.List Read(System.Collections.Generic.List rows) => throw null; + public static object ReadObject(string csv) => throw null; + public static object ReadObjectRow(string csv) => throw null; + public static T ReadRow(string value) => throw null; + public static System.Collections.Generic.List> ReadStringDictionary(System.Collections.Generic.IEnumerable rows) => throw null; + } + + // Generated from `ServiceStack.Text.CsvSerializer` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class CsvSerializer + { + public CsvSerializer() => throw null; + public static T DeserializeFromReader(System.IO.TextReader reader) => throw null; + public static object DeserializeFromStream(System.Type type, System.IO.Stream stream) => throw null; + public static T DeserializeFromStream(System.IO.Stream stream) => throw null; + public static object DeserializeFromString(System.Type type, string text) => throw null; + public static T DeserializeFromString(string text) => throw null; + public static void InitAot() => throw null; + public static System.Action OnSerialize { get => throw null; set => throw null; } + public static object ReadLateBoundObject(System.Type type, string value) => throw null; + public static string SerializeToCsv(System.Collections.Generic.IEnumerable records) => throw null; + public static void SerializeToStream(T value, System.IO.Stream stream) => throw null; + public static void SerializeToStream(object obj, System.IO.Stream stream) => throw null; + public static string SerializeToString(T value) => throw null; + public static void SerializeToWriter(T value, System.IO.TextWriter writer) => throw null; + public static System.Text.Encoding UseEncoding { get => throw null; set => throw null; } + public static void WriteLateBoundObject(System.IO.TextWriter writer, object value) => throw null; + } + + // Generated from `ServiceStack.Text.CsvSerializer<>` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class CsvSerializer + { + public static object ReadEnumerableProperty(string row) => throw null; + public static object ReadEnumerableType(string value) => throw null; + public static ServiceStack.Text.Common.ParseStringDelegate ReadFn() => throw null; + public static object ReadNonEnumerableType(string row) => throw null; + public static object ReadObject(string value) => throw null; + public static object ReadSelf(string value) => throw null; + public static void WriteEnumerableProperty(System.IO.TextWriter writer, object obj) => throw null; + public static void WriteEnumerableType(System.IO.TextWriter writer, object obj) => throw null; + public static ServiceStack.Text.Common.WriteObjectDelegate WriteFn() => throw null; + public static void WriteNonEnumerableType(System.IO.TextWriter writer, object obj) => throw null; + public static void WriteObject(System.IO.TextWriter writer, object value) => throw null; + public static void WriteSelf(System.IO.TextWriter writer, object obj) => throw null; + } + + // Generated from `ServiceStack.Text.CsvStreamExtensions` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class CsvStreamExtensions + { + public static void WriteCsv(this System.IO.TextWriter writer, System.Collections.Generic.IEnumerable records) => throw null; + public static void WriteCsv(this System.IO.Stream outputStream, System.Collections.Generic.IEnumerable records) => throw null; + } + + // Generated from `ServiceStack.Text.CsvWriter` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class CsvWriter + { + public static bool HasAnyEscapeChars(string value) => throw null; + } + + // Generated from `ServiceStack.Text.CsvWriter<>` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class CsvWriter + { + public CsvWriter() => throw null; + public const System.Char DelimiterChar = default; + public static System.Collections.Generic.List> GetRows(System.Collections.Generic.IEnumerable records) => throw null; + public static System.Collections.Generic.List Headers { get => throw null; set => throw null; } + public static void Write(System.IO.TextWriter writer, System.Collections.Generic.IEnumerable records) => throw null; + public static void Write(System.IO.TextWriter writer, System.Collections.Generic.IEnumerable> rows) => throw null; + public static void WriteObject(System.IO.TextWriter writer, object records) => throw null; + public static void WriteObjectRow(System.IO.TextWriter writer, object record) => throw null; + public static void WriteRow(System.IO.TextWriter writer, T row) => throw null; + public static void WriteRow(System.IO.TextWriter writer, System.Collections.Generic.IEnumerable row) => throw null; + } + + // Generated from `ServiceStack.Text.DateHandler` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public enum DateHandler + { + DCJSCompatible, + ISO8601, + ISO8601DateOnly, + ISO8601DateTime, + RFC1123, + TimestampOffset, + UnixTime, + UnixTimeMs, + } + + // Generated from `ServiceStack.Text.DateTimeExtensions` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class DateTimeExtensions + { + public static System.DateTime EndOfLastMonth(this System.DateTime from) => throw null; + public static string FmtSortableDate(this System.DateTime from) => throw null; + public static string FmtSortableDateTime(this System.DateTime from) => throw null; + public static System.DateTime FromShortestXsdDateTimeString(this string xsdDateTime) => throw null; + public static System.TimeSpan FromTimeOffsetString(this string offsetString) => throw null; + public static System.DateTime FromUnixTime(this int unixTime) => throw null; + public static System.DateTime FromUnixTime(this double unixTime) => throw null; + public static System.DateTime FromUnixTime(this System.Int64 unixTime) => throw null; + public static System.DateTime FromUnixTimeMs(this double msSince1970, System.TimeSpan offset) => throw null; + public static System.DateTime FromUnixTimeMs(this double msSince1970) => throw null; + public static System.DateTime FromUnixTimeMs(this System.Int64 msSince1970, System.TimeSpan offset) => throw null; + public static System.DateTime FromUnixTimeMs(this System.Int64 msSince1970) => throw null; + public static System.DateTime FromUnixTimeMs(string msSince1970, System.TimeSpan offset) => throw null; + public static System.DateTime FromUnixTimeMs(string msSince1970) => throw null; + public static bool IsEqualToTheSecond(this System.DateTime dateTime, System.DateTime otherDateTime) => throw null; + public static System.DateTime LastMonday(this System.DateTime from) => throw null; + public static System.DateTime RoundToMs(this System.DateTime dateTime) => throw null; + public static System.DateTime RoundToSecond(this System.DateTime dateTime) => throw null; + public static System.DateTime StartOfLastMonth(this System.DateTime from) => throw null; + public static string ToShortestXsdDateTimeString(this System.DateTime dateTime) => throw null; + public static System.DateTime ToStableUniversalTime(this System.DateTime dateTime) => throw null; + public static string ToTimeOffsetString(this System.TimeSpan offset, string seperator = default(string)) => throw null; + public static System.Int64 ToUnixTime(this System.DateTime dateTime) => throw null; + public static System.Int64 ToUnixTimeMs(this System.Int64 ticks) => throw null; + public static System.Int64 ToUnixTimeMs(this System.DateTime dateTime) => throw null; + public static System.Int64 ToUnixTimeMsAlt(this System.DateTime dateTime) => throw null; + public static System.DateTime Truncate(this System.DateTime dateTime, System.TimeSpan timeSpan) => throw null; + public const System.Int64 UnixEpoch = default; + } + + // Generated from `ServiceStack.Text.DefaultMemory` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class DefaultMemory : ServiceStack.Text.MemoryProvider + { + public override System.Text.StringBuilder Append(System.Text.StringBuilder sb, System.ReadOnlySpan value) => throw null; + public static void Configure() => throw null; + public override object Deserialize(System.IO.Stream stream, System.Type type, ServiceStack.Text.Common.DeserializeStringSpanDelegate deserializer) => throw null; + public override System.Threading.Tasks.Task DeserializeAsync(System.IO.Stream stream, System.Type type, ServiceStack.Text.Common.DeserializeStringSpanDelegate deserializer) => throw null; + public override int FromUtf8(System.ReadOnlySpan source, System.Span destination) => throw null; + public override System.ReadOnlyMemory FromUtf8(System.ReadOnlySpan source) => throw null; + public override string FromUtf8Bytes(System.ReadOnlySpan source) => throw null; + public override int GetUtf8ByteCount(System.ReadOnlySpan chars) => throw null; + public override int GetUtf8CharCount(System.ReadOnlySpan bytes) => throw null; + public override System.Byte[] ParseBase64(System.ReadOnlySpan value) => throw null; + public override bool ParseBoolean(System.ReadOnlySpan value) => throw null; + public override System.Byte ParseByte(System.ReadOnlySpan value) => throw null; + public override System.Decimal ParseDecimal(System.ReadOnlySpan value, bool allowThousands) => throw null; + public override System.Decimal ParseDecimal(System.ReadOnlySpan value) => throw null; + public override double ParseDouble(System.ReadOnlySpan value) => throw null; + public override float ParseFloat(System.ReadOnlySpan value) => throw null; + public override System.Guid ParseGuid(System.ReadOnlySpan value) => throw null; + public override System.Int16 ParseInt16(System.ReadOnlySpan value) => throw null; + public override int ParseInt32(System.ReadOnlySpan value) => throw null; + public override System.Int64 ParseInt64(System.ReadOnlySpan value) => throw null; + public override System.SByte ParseSByte(System.ReadOnlySpan value) => throw null; + public override System.UInt16 ParseUInt16(System.ReadOnlySpan value) => throw null; + public override System.UInt32 ParseUInt32(System.ReadOnlySpan value, System.Globalization.NumberStyles style) => throw null; + public override System.UInt32 ParseUInt32(System.ReadOnlySpan value) => throw null; + public override System.UInt64 ParseUInt64(System.ReadOnlySpan value) => throw null; + public static ServiceStack.Text.DefaultMemory Provider { get => throw null; } + public override string ToBase64(System.ReadOnlyMemory value) => throw null; + public override System.IO.MemoryStream ToMemoryStream(System.ReadOnlySpan source) => throw null; + public override int ToUtf8(System.ReadOnlySpan source, System.Span destination) => throw null; + public override System.ReadOnlyMemory ToUtf8(System.ReadOnlySpan source) => throw null; + public override System.Byte[] ToUtf8Bytes(System.ReadOnlySpan source) => throw null; + public override bool TryParseBoolean(System.ReadOnlySpan value, out bool result) => throw null; + public static bool TryParseDecimal(System.ReadOnlySpan value, bool allowThousands, out System.Decimal result) => throw null; + public override bool TryParseDecimal(System.ReadOnlySpan value, out System.Decimal result) => throw null; + public override bool TryParseDouble(System.ReadOnlySpan value, out double result) => throw null; + public override bool TryParseFloat(System.ReadOnlySpan value, out float result) => throw null; + public override void Write(System.IO.Stream stream, System.ReadOnlyMemory value) => throw null; + public override void Write(System.IO.Stream stream, System.ReadOnlyMemory value) => throw null; + public override System.Threading.Tasks.Task WriteAsync(System.IO.Stream stream, System.ReadOnlySpan value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public override System.Threading.Tasks.Task WriteAsync(System.IO.Stream stream, System.ReadOnlyMemory value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public override System.Threading.Tasks.Task WriteAsync(System.IO.Stream stream, System.ReadOnlyMemory value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + } + + // Generated from `ServiceStack.Text.DirectStreamWriter` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class DirectStreamWriter : System.IO.TextWriter + { + public DirectStreamWriter(System.IO.Stream stream, System.Text.Encoding encoding) => throw null; + public override System.Text.Encoding Encoding { get => throw null; } + public override void Flush() => throw null; + public override void Write(string s) => throw null; + public override void Write(System.Char c) => throw null; + } + + // Generated from `ServiceStack.Text.DynamicProxy` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class DynamicProxy + { + public static void BindProperty(System.Reflection.Emit.TypeBuilder typeBuilder, System.Reflection.MethodInfo methodInfo) => throw null; + public static object GetInstanceFor(System.Type targetType) => throw null; + public static T GetInstanceFor() => throw null; + } + + // Generated from `ServiceStack.Text.EmitReflectionOptimizer` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class EmitReflectionOptimizer : ServiceStack.Text.ReflectionOptimizer + { + public override ServiceStack.EmptyCtorDelegate CreateConstructor(System.Type type) => throw null; + public override ServiceStack.GetMemberDelegate CreateGetter(System.Reflection.PropertyInfo propertyInfo) => throw null; + public override ServiceStack.GetMemberDelegate CreateGetter(System.Reflection.FieldInfo fieldInfo) => throw null; + public override ServiceStack.GetMemberDelegate CreateGetter(System.Reflection.PropertyInfo propertyInfo) => throw null; + public override ServiceStack.GetMemberDelegate CreateGetter(System.Reflection.FieldInfo fieldInfo) => throw null; + public override ServiceStack.SetMemberDelegate CreateSetter(System.Reflection.PropertyInfo propertyInfo) => throw null; + public override ServiceStack.SetMemberDelegate CreateSetter(System.Reflection.FieldInfo fieldInfo) => throw null; + public override ServiceStack.SetMemberDelegate CreateSetter(System.Reflection.PropertyInfo propertyInfo) => throw null; + public override ServiceStack.SetMemberDelegate CreateSetter(System.Reflection.FieldInfo fieldInfo) => throw null; + public override ServiceStack.SetMemberRefDelegate CreateSetterRef(System.Reflection.FieldInfo fieldInfo) => throw null; + public override bool IsDynamic(System.Reflection.Assembly assembly) => throw null; + public static ServiceStack.Text.EmitReflectionOptimizer Provider { get => throw null; } + public override System.Type UseType(System.Type type) => throw null; + } + + // Generated from `ServiceStack.Text.EnumInfo` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class EnumInfo + { + public static ServiceStack.Text.EnumInfo GetEnumInfo(System.Type type) => throw null; + public object GetSerializedValue(object enumValue) => throw null; + public object Parse(string serializedValue) => throw null; + } + + // Generated from `ServiceStack.Text.Env` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class Env + { + public static System.Runtime.CompilerServices.ConfiguredValueTaskAwaitable ConfigAwait(this System.Threading.Tasks.ValueTask task) => throw null; + public static System.Runtime.CompilerServices.ConfiguredValueTaskAwaitable ConfigAwait(this System.Threading.Tasks.ValueTask task) => throw null; + public static System.Runtime.CompilerServices.ConfiguredTaskAwaitable ConfigAwait(this System.Threading.Tasks.Task task) => throw null; + public static System.Runtime.CompilerServices.ConfiguredTaskAwaitable ConfigAwait(this System.Threading.Tasks.Task task) => throw null; + public const bool ContinueOnCapturedContext = default; + public static System.DateTime GetReleaseDate() => throw null; + public static bool HasMultiplePlatformTargets { get => throw null; set => throw null; } + public static bool IsAndroid { get => throw null; set => throw null; } + public static bool IsIOS { get => throw null; set => throw null; } + public static bool IsLinux { get => throw null; set => throw null; } + public static bool IsMono { get => throw null; set => throw null; } + public static bool IsNetCore { get => throw null; set => throw null; } + public static bool IsNetCore21 { get => throw null; set => throw null; } + public static bool IsNetCore3 { get => throw null; set => throw null; } + public static bool IsNetFramework { get => throw null; set => throw null; } + public static bool IsNetNative { get => throw null; set => throw null; } + public static bool IsNetStandard { get => throw null; set => throw null; } + public static bool IsNetStandard20 { get => throw null; set => throw null; } + public static bool IsOSX { get => throw null; set => throw null; } + public static bool IsUWP { get => throw null; set => throw null; } + public static bool IsUnix { get => throw null; set => throw null; } + public static bool IsWindows { get => throw null; set => throw null; } + public static string ReferenceAssemblyPath { get => throw null; set => throw null; } + public static string ReferenceAssembyPath { get => throw null; } + public static string ServerUserAgent { get => throw null; set => throw null; } + public static System.Decimal ServiceStackVersion; + public static bool StrictMode { get => throw null; set => throw null; } + public static bool SupportsDynamic { get => throw null; set => throw null; } + public static bool SupportsEmit { get => throw null; set => throw null; } + public static bool SupportsExpressions { get => throw null; set => throw null; } + public static string VersionString { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.Text.ExpressionReflectionOptimizer` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ExpressionReflectionOptimizer : ServiceStack.Text.ReflectionOptimizer + { + public override ServiceStack.EmptyCtorDelegate CreateConstructor(System.Type type) => throw null; + public override ServiceStack.GetMemberDelegate CreateGetter(System.Reflection.PropertyInfo propertyInfo) => throw null; + public override ServiceStack.GetMemberDelegate CreateGetter(System.Reflection.FieldInfo fieldInfo) => throw null; + public override ServiceStack.GetMemberDelegate CreateGetter(System.Reflection.PropertyInfo propertyInfo) => throw null; + public override ServiceStack.GetMemberDelegate CreateGetter(System.Reflection.FieldInfo fieldInfo) => throw null; + public override ServiceStack.SetMemberDelegate CreateSetter(System.Reflection.PropertyInfo propertyInfo) => throw null; + public override ServiceStack.SetMemberDelegate CreateSetter(System.Reflection.FieldInfo fieldInfo) => throw null; + public override ServiceStack.SetMemberDelegate CreateSetter(System.Reflection.PropertyInfo propertyInfo) => throw null; + public override ServiceStack.SetMemberDelegate CreateSetter(System.Reflection.FieldInfo fieldInfo) => throw null; + public override ServiceStack.SetMemberRefDelegate CreateSetterRef(System.Reflection.FieldInfo fieldInfo) => throw null; + public static System.Linq.Expressions.Expression GetExpressionLambda(System.Reflection.PropertyInfo propertyInfo) => throw null; + public static System.Linq.Expressions.Expression> GetExpressionLambda(System.Reflection.PropertyInfo propertyInfo) => throw null; + public override bool IsDynamic(System.Reflection.Assembly assembly) => throw null; + public static ServiceStack.Text.ExpressionReflectionOptimizer Provider { get => throw null; } + public static System.Linq.Expressions.Expression> SetExpressionLambda(System.Reflection.PropertyInfo propertyInfo) => throw null; + public override System.Type UseType(System.Type type) => throw null; + } + + // Generated from `ServiceStack.Text.IRuntimeSerializable` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IRuntimeSerializable + { + } + + // Generated from `ServiceStack.Text.IStringSerializer` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IStringSerializer + { + object DeserializeFromString(string serializedText, System.Type type); + To DeserializeFromString(string serializedText); + string SerializeToString(TFrom from); + } + + // Generated from `ServiceStack.Text.ITracer` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface ITracer + { + void WriteDebug(string format, params object[] args); + void WriteDebug(string error); + void WriteError(string format, params object[] args); + void WriteError(string error); + void WriteError(System.Exception ex); + void WriteWarning(string warning); + void WriteWarning(string format, params object[] args); + } + + // Generated from `ServiceStack.Text.ITypeSerializer<>` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface ITypeSerializer + { + bool CanCreateFromString(System.Type type); + T DeserializeFromReader(System.IO.TextReader reader); + T DeserializeFromString(string value); + string SerializeToString(T value); + void SerializeToWriter(T value, System.IO.TextWriter writer); + } + + // Generated from `ServiceStack.Text.IValueWriter` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IValueWriter + { + void WriteTo(ServiceStack.Text.Common.ITypeSerializer serializer, System.IO.TextWriter writer); + } + + // Generated from `ServiceStack.Text.JsConfig` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class JsConfig + { + public static System.Func AllowRuntimeType { get => throw null; set => throw null; } + public static System.Collections.Generic.HashSet AllowRuntimeTypeInTypes { get => throw null; set => throw null; } + public static System.Collections.Generic.HashSet AllowRuntimeTypeInTypesWithNamespaces { get => throw null; set => throw null; } + public static System.Collections.Generic.HashSet AllowRuntimeTypeWithAttributesNamed { get => throw null; set => throw null; } + public static System.Collections.Generic.HashSet AllowRuntimeTypeWithInterfacesNamed { get => throw null; set => throw null; } + public static bool AlwaysUseUtc { get => throw null; set => throw null; } + public static bool AppendUtcOffset { get => throw null; set => throw null; } + public static bool AssumeUtc { get => throw null; set => throw null; } + public static ServiceStack.Text.JsConfigScope BeginScope() => throw null; + public static bool ConvertObjectTypesIntoStringDictionary { get => throw null; set => throw null; } + public static ServiceStack.Text.JsConfigScope CreateScope(string config, ServiceStack.Text.JsConfigScope scope = default(ServiceStack.Text.JsConfigScope)) => throw null; + public static ServiceStack.Text.DateHandler DateHandler { get => throw null; set => throw null; } + public static string DateTimeFormat { get => throw null; set => throw null; } + public static bool EmitCamelCaseNames { get => throw null; set => throw null; } + public static bool EmitLowercaseUnderscoreNames { get => throw null; set => throw null; } + public static bool EscapeHtmlChars { get => throw null; set => throw null; } + public static bool EscapeUnicode { get => throw null; set => throw null; } + public static bool ExcludeDefaultValues { get => throw null; set => throw null; } + public static string[] ExcludePropertyReferences { get => throw null; set => throw null; } + public static bool ExcludeTypeInfo { get => throw null; set => throw null; } + public static System.Collections.Generic.HashSet ExcludeTypeNames { get => throw null; set => throw null; } + public static System.Collections.Generic.HashSet ExcludeTypes { get => throw null; set => throw null; } + public static ServiceStack.Text.Config GetConfig() => throw null; + public static bool HasInit { get => throw null; } + public static string[] IgnoreAttributesNamed { get => throw null; set => throw null; } + public static bool IncludeDefaultEnums { get => throw null; set => throw null; } + public static bool IncludeNullValues { get => throw null; set => throw null; } + public static bool IncludeNullValuesInDictionaries { get => throw null; set => throw null; } + public static bool IncludePublicFields { get => throw null; set => throw null; } + public static bool IncludeTypeInfo { get => throw null; set => throw null; } + public static void Init(ServiceStack.Text.Config config) => throw null; + public static void Init() => throw null; + public static void InitStatics() => throw null; + public static int MaxDepth { get => throw null; set => throw null; } + public static ServiceStack.EmptyCtorFactoryDelegate ModelFactory { get => throw null; set => throw null; } + public static ServiceStack.Text.Common.DeserializationErrorDelegate OnDeserializationError { get => throw null; set => throw null; } + public static ServiceStack.Text.ParseAsType ParsePrimitiveFloatingPointTypes { get => throw null; set => throw null; } + public static System.Func ParsePrimitiveFn { get => throw null; set => throw null; } + public static ServiceStack.Text.ParseAsType ParsePrimitiveIntegerTypes { get => throw null; set => throw null; } + public static bool PreferInterfaces { get => throw null; set => throw null; } + public static ServiceStack.Text.PropertyConvention PropertyConvention { get => throw null; set => throw null; } + public static void Reset() => throw null; + public static bool SkipDateTimeConversion { get => throw null; set => throw null; } + public static ServiceStack.Text.TextCase TextCase { get => throw null; set => throw null; } + public static bool ThrowOnDeserializationError { get => throw null; set => throw null; } + public static bool ThrowOnError { get => throw null; set => throw null; } + public static ServiceStack.Text.TimeSpanHandler TimeSpanHandler { get => throw null; set => throw null; } + public static bool TreatEnumAsInteger { get => throw null; set => throw null; } + public static System.Collections.Generic.HashSet TreatValueAsRefTypes; + public static bool TryParseIntoBestFit { get => throw null; set => throw null; } + public static bool TryToParseNumericType { get => throw null; set => throw null; } + public static bool TryToParsePrimitiveTypeValues { get => throw null; set => throw null; } + public static string TypeAttr { get => throw null; set => throw null; } + public static System.Func TypeFinder { get => throw null; set => throw null; } + public static System.Func TypeWriter { get => throw null; set => throw null; } + public static System.Text.UTF8Encoding UTF8Encoding { get => throw null; set => throw null; } + public static ServiceStack.Text.JsConfigScope With(bool? convertObjectTypesIntoStringDictionary = default(bool?), bool? tryToParsePrimitiveTypeValues = default(bool?), bool? tryToParseNumericType = default(bool?), ServiceStack.Text.ParseAsType? parsePrimitiveFloatingPointTypes = default(ServiceStack.Text.ParseAsType?), ServiceStack.Text.ParseAsType? parsePrimitiveIntegerTypes = default(ServiceStack.Text.ParseAsType?), bool? excludeDefaultValues = default(bool?), bool? includeNullValues = default(bool?), bool? includeNullValuesInDictionaries = default(bool?), bool? includeDefaultEnums = default(bool?), bool? excludeTypeInfo = default(bool?), bool? includeTypeInfo = default(bool?), bool? emitCamelCaseNames = default(bool?), bool? emitLowercaseUnderscoreNames = default(bool?), ServiceStack.Text.DateHandler? dateHandler = default(ServiceStack.Text.DateHandler?), ServiceStack.Text.TimeSpanHandler? timeSpanHandler = default(ServiceStack.Text.TimeSpanHandler?), ServiceStack.Text.PropertyConvention? propertyConvention = default(ServiceStack.Text.PropertyConvention?), bool? preferInterfaces = default(bool?), bool? throwOnDeserializationError = default(bool?), string typeAttr = default(string), string dateTimeFormat = default(string), System.Func typeWriter = default(System.Func), System.Func typeFinder = default(System.Func), bool? treatEnumAsInteger = default(bool?), bool? skipDateTimeConversion = default(bool?), bool? alwaysUseUtc = default(bool?), bool? assumeUtc = default(bool?), bool? appendUtcOffset = default(bool?), bool? escapeUnicode = default(bool?), bool? includePublicFields = default(bool?), int? maxDepth = default(int?), ServiceStack.EmptyCtorFactoryDelegate modelFactory = default(ServiceStack.EmptyCtorFactoryDelegate), string[] excludePropertyReferences = default(string[]), bool? useSystemParseMethods = default(bool?)) => throw null; + public static ServiceStack.Text.JsConfigScope With(ServiceStack.Text.Config config) => throw null; + } + + // Generated from `ServiceStack.Text.JsConfig<>` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class JsConfig + { + public static System.Func DeSerializeFn { get => throw null; set => throw null; } + public static bool? EmitCamelCaseNames { get => throw null; set => throw null; } + public static bool? EmitLowercaseUnderscoreNames { get => throw null; set => throw null; } + public static string[] ExcludePropertyNames; + public static bool? ExcludeTypeInfo; + public static bool HasDeserializeFn { get => throw null; } + public static bool HasDeserializingFn { get => throw null; } + public static bool HasSerializeFn { get => throw null; } + public static bool IncludeDefaultValue { get => throw null; set => throw null; } + public static bool? IncludeTypeInfo; + public JsConfig() => throw null; + public static System.Func OnDeserializedFn { get => throw null; set => throw null; } + public static System.Func OnDeserializingFn { get => throw null; set => throw null; } + public static System.Action OnSerializedFn { get => throw null; set => throw null; } + public static System.Func OnSerializingFn { get => throw null; set => throw null; } + public static object ParseFn(string str) => throw null; + public static System.Func RawDeserializeFn { get => throw null; set => throw null; } + public static System.Func RawSerializeFn { get => throw null; set => throw null; } + public static void RefreshRead() => throw null; + public static void RefreshWrite() => throw null; + public static void Reset() => throw null; + public static System.Func SerializeFn { get => throw null; set => throw null; } + public static ServiceStack.Text.TextCase TextCase { get => throw null; set => throw null; } + public static bool TreatValueAsRefType { get => throw null; set => throw null; } + public static void WriteFn(System.IO.TextWriter writer, object obj) => throw null; + } + + // Generated from `ServiceStack.Text.JsConfigScope` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class JsConfigScope : ServiceStack.Text.Config, System.IDisposable + { + public void Dispose() => throw null; + } + + // Generated from `ServiceStack.Text.JsonArrayObjects` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class JsonArrayObjects : System.Collections.Generic.List + { + public JsonArrayObjects() => throw null; + public static ServiceStack.Text.JsonArrayObjects Parse(string json) => throw null; + } + + // Generated from `ServiceStack.Text.JsonExtensions` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class JsonExtensions + { + public static ServiceStack.Text.JsonArrayObjects ArrayObjects(this string json) => throw null; + public static System.Collections.Generic.List ConvertAll(this ServiceStack.Text.JsonArrayObjects jsonArrayObjects, System.Func converter) => throw null; + public static T ConvertTo(this ServiceStack.Text.JsonObject jsonObject, System.Func convertFn) => throw null; + public static string Get(this System.Collections.Generic.Dictionary map, string key) => throw null; + public static T Get(this System.Collections.Generic.Dictionary map, string key, T defaultValue = default(T)) => throw null; + public static T[] GetArray(this System.Collections.Generic.Dictionary map, string key) => throw null; + public static T JsonTo(this System.Collections.Generic.Dictionary map, string key) => throw null; + public static System.Collections.Generic.Dictionary ToDictionary(this ServiceStack.Text.JsonObject jsonObject) => throw null; + } + + // Generated from `ServiceStack.Text.JsonObject` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class JsonObject : System.Collections.Generic.Dictionary + { + public ServiceStack.Text.JsonArrayObjects ArrayObjects(string propertyName) => throw null; + public string Child(string key) => throw null; + public object ConvertTo(System.Type type) => throw null; + public T ConvertTo() => throw null; + public string GetUnescaped(string key) => throw null; + public string this[string key] { get => throw null; set => throw null; } + public JsonObject() => throw null; + public ServiceStack.Text.JsonObject Object(string propertyName) => throw null; + public static ServiceStack.Text.JsonObject Parse(string json) => throw null; + public static ServiceStack.Text.JsonArrayObjects ParseArray(string json) => throw null; + public static void WriteValue(System.IO.TextWriter writer, object value) => throw null; + } + + // Generated from `ServiceStack.Text.JsonSerializer` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class JsonSerializer + { + public static int BufferSize; + public static object DeserializeFromReader(System.IO.TextReader reader, System.Type type) => throw null; + public static T DeserializeFromReader(System.IO.TextReader reader) => throw null; + public static object DeserializeFromSpan(System.Type type, System.ReadOnlySpan value) => throw null; + public static T DeserializeFromSpan(System.ReadOnlySpan value) => throw null; + public static object DeserializeFromStream(System.Type type, System.IO.Stream stream) => throw null; + public static T DeserializeFromStream(System.IO.Stream stream) => throw null; + public static System.Threading.Tasks.Task DeserializeFromStreamAsync(System.Type type, System.IO.Stream stream) => throw null; + public static System.Threading.Tasks.Task DeserializeFromStreamAsync(System.IO.Stream stream) => throw null; + public static object DeserializeFromString(string value, System.Type type) => throw null; + public static T DeserializeFromString(string value) => throw null; + public static object DeserializeRequest(System.Type type, System.Net.WebRequest webRequest) => throw null; + public static T DeserializeRequest(System.Net.WebRequest webRequest) => throw null; + public static object DeserializeResponse(System.Type type, System.Net.WebRequest webRequest) => throw null; + public static object DeserializeResponse(System.Type type, System.Net.WebResponse webResponse) => throw null; + public static T DeserializeResponse(System.Net.WebResponse webResponse) => throw null; + public static T DeserializeResponse(System.Net.WebRequest webRequest) => throw null; + public static System.Action OnSerialize { get => throw null; set => throw null; } + public static void SerializeToStream(T value, System.IO.Stream stream) => throw null; + public static void SerializeToStream(object value, System.Type type, System.IO.Stream stream) => throw null; + public static string SerializeToString(T value) => throw null; + public static string SerializeToString(object value, System.Type type) => throw null; + public static void SerializeToWriter(T value, System.IO.TextWriter writer) => throw null; + public static void SerializeToWriter(object value, System.Type type, System.IO.TextWriter writer) => throw null; + public static System.Text.UTF8Encoding UTF8Encoding { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.Text.JsonSerializer<>` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class JsonSerializer : ServiceStack.Text.ITypeSerializer + { + public bool CanCreateFromString(System.Type type) => throw null; + public T DeserializeFromReader(System.IO.TextReader reader) => throw null; + public T DeserializeFromString(string value) => throw null; + public JsonSerializer() => throw null; + public string SerializeToString(T value) => throw null; + public void SerializeToWriter(T value, System.IO.TextWriter writer) => throw null; + } + + // Generated from `ServiceStack.Text.JsonStringSerializer` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class JsonStringSerializer : ServiceStack.Text.IStringSerializer + { + public object DeserializeFromString(string serializedText, System.Type type) => throw null; + public To DeserializeFromString(string serializedText) => throw null; + public JsonStringSerializer() => throw null; + public string SerializeToString(TFrom from) => throw null; + } + + // Generated from `ServiceStack.Text.JsonValue` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public struct JsonValue : ServiceStack.Text.IValueWriter + { + public T As() => throw null; + public JsonValue(string json) => throw null; + // Stub generator skipped constructor + public override string ToString() => throw null; + public void WriteTo(ServiceStack.Text.Common.ITypeSerializer serializer, System.IO.TextWriter writer) => throw null; + } + + // Generated from `ServiceStack.Text.JsvFormatter` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class JsvFormatter + { + public static string Format(string serializedText) => throw null; + } + + // Generated from `ServiceStack.Text.JsvStringSerializer` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class JsvStringSerializer : ServiceStack.Text.IStringSerializer + { + public object DeserializeFromString(string serializedText, System.Type type) => throw null; + public To DeserializeFromString(string serializedText) => throw null; + public JsvStringSerializer() => throw null; + public string SerializeToString(TFrom from) => throw null; + } + + // Generated from `ServiceStack.Text.MemoryProvider` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public abstract class MemoryProvider + { + public abstract System.Text.StringBuilder Append(System.Text.StringBuilder sb, System.ReadOnlySpan value); + public abstract object Deserialize(System.IO.Stream stream, System.Type type, ServiceStack.Text.Common.DeserializeStringSpanDelegate deserializer); + public abstract System.Threading.Tasks.Task DeserializeAsync(System.IO.Stream stream, System.Type type, ServiceStack.Text.Common.DeserializeStringSpanDelegate deserializer); + public abstract int FromUtf8(System.ReadOnlySpan source, System.Span destination); + public abstract System.ReadOnlyMemory FromUtf8(System.ReadOnlySpan source); + public abstract string FromUtf8Bytes(System.ReadOnlySpan source); + public abstract int GetUtf8ByteCount(System.ReadOnlySpan chars); + public abstract int GetUtf8CharCount(System.ReadOnlySpan bytes); + public static ServiceStack.Text.MemoryProvider Instance; + protected MemoryProvider() => throw null; + public abstract System.Byte[] ParseBase64(System.ReadOnlySpan value); + public abstract bool ParseBoolean(System.ReadOnlySpan value); + public abstract System.Byte ParseByte(System.ReadOnlySpan value); + public abstract System.Decimal ParseDecimal(System.ReadOnlySpan value, bool allowThousands); + public abstract System.Decimal ParseDecimal(System.ReadOnlySpan value); + public abstract double ParseDouble(System.ReadOnlySpan value); + public abstract float ParseFloat(System.ReadOnlySpan value); + public abstract System.Guid ParseGuid(System.ReadOnlySpan value); + public abstract System.Int16 ParseInt16(System.ReadOnlySpan value); + public abstract int ParseInt32(System.ReadOnlySpan value); + public abstract System.Int64 ParseInt64(System.ReadOnlySpan value); + public abstract System.SByte ParseSByte(System.ReadOnlySpan value); + public abstract System.UInt16 ParseUInt16(System.ReadOnlySpan value); + public abstract System.UInt32 ParseUInt32(System.ReadOnlySpan value, System.Globalization.NumberStyles style); + public abstract System.UInt32 ParseUInt32(System.ReadOnlySpan value); + public abstract System.UInt64 ParseUInt64(System.ReadOnlySpan value); + public abstract string ToBase64(System.ReadOnlyMemory value); + public abstract System.IO.MemoryStream ToMemoryStream(System.ReadOnlySpan source); + public abstract int ToUtf8(System.ReadOnlySpan source, System.Span destination); + public abstract System.ReadOnlyMemory ToUtf8(System.ReadOnlySpan source); + public abstract System.Byte[] ToUtf8Bytes(System.ReadOnlySpan source); + public abstract bool TryParseBoolean(System.ReadOnlySpan value, out bool result); + public abstract bool TryParseDecimal(System.ReadOnlySpan value, out System.Decimal result); + public abstract bool TryParseDouble(System.ReadOnlySpan value, out double result); + public abstract bool TryParseFloat(System.ReadOnlySpan value, out float result); + public abstract void Write(System.IO.Stream stream, System.ReadOnlyMemory value); + public abstract void Write(System.IO.Stream stream, System.ReadOnlyMemory value); + public abstract System.Threading.Tasks.Task WriteAsync(System.IO.Stream stream, System.ReadOnlySpan value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + public abstract System.Threading.Tasks.Task WriteAsync(System.IO.Stream stream, System.ReadOnlyMemory value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + public abstract System.Threading.Tasks.Task WriteAsync(System.IO.Stream stream, System.ReadOnlyMemory value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + } + + // Generated from `ServiceStack.Text.MemoryStreamFactory` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class MemoryStreamFactory + { + public static System.IO.MemoryStream GetStream(int capacity) => throw null; + public static System.IO.MemoryStream GetStream(System.Byte[] bytes, int index, int count) => throw null; + public static System.IO.MemoryStream GetStream(System.Byte[] bytes) => throw null; + public static System.IO.MemoryStream GetStream() => throw null; + public static ServiceStack.Text.RecyclableMemoryStreamManager RecyclableInstance; + public static bool UseRecyclableMemoryStream { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.Text.MurmurHash2` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class MurmurHash2 + { + public static System.UInt32 Hash(string data) => throw null; + public static System.UInt32 Hash(System.Byte[] data, System.UInt32 seed) => throw null; + public static System.UInt32 Hash(System.Byte[] data) => throw null; + public MurmurHash2() => throw null; + } + + // Generated from `ServiceStack.Text.ParseAsType` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + [System.Flags] + public enum ParseAsType + { + Bool, + Byte, + Decimal, + Double, + Int16, + Int32, + Int64, + None, + SByte, + Single, + UInt16, + UInt32, + UInt64, + } + + // Generated from `ServiceStack.Text.PropertyConvention` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public enum PropertyConvention + { + Lenient, + Strict, + } + + // Generated from `ServiceStack.Text.RecyclableMemoryStream` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class RecyclableMemoryStream : System.IO.MemoryStream + { + public override bool CanRead { get => throw null; } + public override bool CanSeek { get => throw null; } + public override bool CanTimeout { get => throw null; } + public override bool CanWrite { get => throw null; } + public override int Capacity { get => throw null; set => throw null; } + public override void Close() => throw null; + protected override void Dispose(bool disposing) => throw null; + public override System.Byte[] GetBuffer() => throw null; + public override System.Int64 Length { get => throw null; } + public override System.Int64 Position { get => throw null; set => throw null; } + public override int Read(System.Span buffer) => throw null; + public override int Read(System.Byte[] buffer, int offset, int count) => throw null; + public override int ReadByte() => throw null; + public RecyclableMemoryStream(ServiceStack.Text.RecyclableMemoryStreamManager memoryManager, string tag, int requestedSize) => throw null; + public RecyclableMemoryStream(ServiceStack.Text.RecyclableMemoryStreamManager memoryManager, string tag) => throw null; + public RecyclableMemoryStream(ServiceStack.Text.RecyclableMemoryStreamManager memoryManager, System.Guid id, string tag, int requestedSize) => throw null; + public RecyclableMemoryStream(ServiceStack.Text.RecyclableMemoryStreamManager memoryManager, System.Guid id, string tag) => throw null; + public RecyclableMemoryStream(ServiceStack.Text.RecyclableMemoryStreamManager memoryManager, System.Guid id) => throw null; + public RecyclableMemoryStream(ServiceStack.Text.RecyclableMemoryStreamManager memoryManager) => throw null; + public int SafeRead(System.Span buffer, ref int streamPosition) => throw null; + public int SafeRead(System.Byte[] buffer, int offset, int count, ref int streamPosition) => throw null; + public int SafeReadByte(ref int streamPosition) => throw null; + public override System.Int64 Seek(System.Int64 offset, System.IO.SeekOrigin loc) => throw null; + public override void SetLength(System.Int64 value) => throw null; + public override System.Byte[] ToArray() => throw null; + public override string ToString() => throw null; + public override bool TryGetBuffer(out System.ArraySegment buffer) => throw null; + public override void Write(System.ReadOnlySpan source) => throw null; + public override void Write(System.Byte[] buffer, int offset, int count) => throw null; + public override void WriteByte(System.Byte value) => throw null; + public void WriteTo(System.IO.Stream stream, int offset, int count) => throw null; + public override void WriteTo(System.IO.Stream stream) => throw null; + // ERR: Stub generator didn't handle member: ~RecyclableMemoryStream + } + + // Generated from `ServiceStack.Text.RecyclableMemoryStreamManager` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class RecyclableMemoryStreamManager + { + public bool AggressiveBufferReturn { get => throw null; set => throw null; } + public event ServiceStack.Text.RecyclableMemoryStreamManager.EventHandler BlockCreated; + public event ServiceStack.Text.RecyclableMemoryStreamManager.EventHandler BlockDiscarded; + public int BlockSize { get => throw null; } + public const int DefaultBlockSize = default; + public const int DefaultLargeBufferMultiple = default; + public const int DefaultMaximumBufferSize = default; + // Generated from `ServiceStack.Text.RecyclableMemoryStreamManager+EventHandler` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public delegate void EventHandler(); + + + // Generated from `ServiceStack.Text.RecyclableMemoryStreamManager+Events` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class Events : System.Diagnostics.Tracing.EventSource + { + public Events() => throw null; + // Generated from `ServiceStack.Text.RecyclableMemoryStreamManager+Events+MemoryStreamBufferType` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public enum MemoryStreamBufferType + { + Large, + Small, + } + + + public void MemoryStreamCreated(System.Guid guid, string tag, int requestedSize) => throw null; + public void MemoryStreamDiscardBuffer(ServiceStack.Text.RecyclableMemoryStreamManager.Events.MemoryStreamBufferType bufferType, string tag, ServiceStack.Text.RecyclableMemoryStreamManager.Events.MemoryStreamDiscardReason reason) => throw null; + // Generated from `ServiceStack.Text.RecyclableMemoryStreamManager+Events+MemoryStreamDiscardReason` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public enum MemoryStreamDiscardReason + { + EnoughFree, + TooLarge, + } + + + public void MemoryStreamDisposed(System.Guid guid, string tag) => throw null; + public void MemoryStreamDoubleDispose(System.Guid guid, string tag, string allocationStack, string disposeStack1, string disposeStack2) => throw null; + public void MemoryStreamFinalized(System.Guid guid, string tag, string allocationStack) => throw null; + public void MemoryStreamManagerInitialized(int blockSize, int largeBufferMultiple, int maximumBufferSize) => throw null; + public void MemoryStreamNewBlockCreated(System.Int64 smallPoolInUseBytes) => throw null; + public void MemoryStreamNewLargeBufferCreated(int requiredSize, System.Int64 largePoolInUseBytes) => throw null; + public void MemoryStreamNonPooledLargeBufferCreated(int requiredSize, string tag, string allocationStack) => throw null; + public void MemoryStreamOverCapacity(int requestedCapacity, System.Int64 maxCapacity, string tag, string allocationStack) => throw null; + public void MemoryStreamToArray(System.Guid guid, string tag, string stack, int size) => throw null; + public static ServiceStack.Text.RecyclableMemoryStreamManager.Events Writer; + } + + + public bool GenerateCallStacks { get => throw null; set => throw null; } + public System.IO.MemoryStream GetStream(string tag, int requiredSize, bool asContiguousBuffer) => throw null; + public System.IO.MemoryStream GetStream(string tag, int requiredSize) => throw null; + public System.IO.MemoryStream GetStream(string tag, System.Memory buffer) => throw null; + public System.IO.MemoryStream GetStream(string tag, System.Byte[] buffer, int offset, int count) => throw null; + public System.IO.MemoryStream GetStream(string tag) => throw null; + public System.IO.MemoryStream GetStream(System.Memory buffer) => throw null; + public System.IO.MemoryStream GetStream(System.Guid id, string tag, int requiredSize, bool asContiguousBuffer) => throw null; + public System.IO.MemoryStream GetStream(System.Guid id, string tag, int requiredSize) => throw null; + public System.IO.MemoryStream GetStream(System.Guid id, string tag, System.Memory buffer) => throw null; + public System.IO.MemoryStream GetStream(System.Guid id, string tag, System.Byte[] buffer, int offset, int count) => throw null; + public System.IO.MemoryStream GetStream(System.Guid id, string tag) => throw null; + public System.IO.MemoryStream GetStream(System.Guid id) => throw null; + public System.IO.MemoryStream GetStream(System.Byte[] buffer) => throw null; + public System.IO.MemoryStream GetStream() => throw null; + public event ServiceStack.Text.RecyclableMemoryStreamManager.EventHandler LargeBufferCreated; + public event ServiceStack.Text.RecyclableMemoryStreamManager.LargeBufferDiscardedEventHandler LargeBufferDiscarded; + // Generated from `ServiceStack.Text.RecyclableMemoryStreamManager+LargeBufferDiscardedEventHandler` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public delegate void LargeBufferDiscardedEventHandler(ServiceStack.Text.RecyclableMemoryStreamManager.Events.MemoryStreamDiscardReason reason); + + + public int LargeBufferMultiple { get => throw null; } + public System.Int64 LargeBuffersFree { get => throw null; } + public System.Int64 LargePoolFreeSize { get => throw null; } + public System.Int64 LargePoolInUseSize { get => throw null; } + public int MaximumBufferSize { get => throw null; } + public System.Int64 MaximumFreeLargePoolBytes { get => throw null; set => throw null; } + public System.Int64 MaximumFreeSmallPoolBytes { get => throw null; set => throw null; } + public System.Int64 MaximumStreamCapacity { get => throw null; set => throw null; } + public RecyclableMemoryStreamManager(int blockSize, int largeBufferMultiple, int maximumBufferSize, bool useExponentialLargeBuffer) => throw null; + public RecyclableMemoryStreamManager(int blockSize, int largeBufferMultiple, int maximumBufferSize) => throw null; + public RecyclableMemoryStreamManager() => throw null; + public System.Int64 SmallBlocksFree { get => throw null; } + public System.Int64 SmallPoolFreeSize { get => throw null; } + public System.Int64 SmallPoolInUseSize { get => throw null; } + public event ServiceStack.Text.RecyclableMemoryStreamManager.EventHandler StreamConvertedToArray; + public event ServiceStack.Text.RecyclableMemoryStreamManager.EventHandler StreamCreated; + public event ServiceStack.Text.RecyclableMemoryStreamManager.EventHandler StreamDisposed; + public event ServiceStack.Text.RecyclableMemoryStreamManager.EventHandler StreamFinalized; + public event ServiceStack.Text.RecyclableMemoryStreamManager.StreamLengthReportHandler StreamLength; + // Generated from `ServiceStack.Text.RecyclableMemoryStreamManager+StreamLengthReportHandler` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public delegate void StreamLengthReportHandler(System.Int64 bytes); + + + public bool ThrowExceptionOnToArray { get => throw null; set => throw null; } + public event ServiceStack.Text.RecyclableMemoryStreamManager.UsageReportEventHandler UsageReport; + // Generated from `ServiceStack.Text.RecyclableMemoryStreamManager+UsageReportEventHandler` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public delegate void UsageReportEventHandler(System.Int64 smallPoolInUseBytes, System.Int64 smallPoolFreeBytes, System.Int64 largePoolInUseBytes, System.Int64 largePoolFreeBytes); + + + public bool UseExponentialLargeBuffer { get => throw null; } + public bool UseMultipleLargeBuffer { get => throw null; } + } + + // Generated from `ServiceStack.Text.ReflectionOptimizer` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public abstract class ReflectionOptimizer + { + public abstract ServiceStack.EmptyCtorDelegate CreateConstructor(System.Type type); + public abstract ServiceStack.GetMemberDelegate CreateGetter(System.Reflection.PropertyInfo propertyInfo); + public abstract ServiceStack.GetMemberDelegate CreateGetter(System.Reflection.FieldInfo fieldInfo); + public abstract ServiceStack.GetMemberDelegate CreateGetter(System.Reflection.PropertyInfo propertyInfo); + public abstract ServiceStack.GetMemberDelegate CreateGetter(System.Reflection.FieldInfo fieldInfo); + public abstract ServiceStack.SetMemberDelegate CreateSetter(System.Reflection.PropertyInfo propertyInfo); + public abstract ServiceStack.SetMemberDelegate CreateSetter(System.Reflection.FieldInfo fieldInfo); + public abstract ServiceStack.SetMemberDelegate CreateSetter(System.Reflection.PropertyInfo propertyInfo); + public abstract ServiceStack.SetMemberDelegate CreateSetter(System.Reflection.FieldInfo fieldInfo); + public abstract ServiceStack.SetMemberRefDelegate CreateSetterRef(System.Reflection.FieldInfo fieldInfo); + public static ServiceStack.Text.ReflectionOptimizer Instance; + public abstract bool IsDynamic(System.Reflection.Assembly assembly); + protected ReflectionOptimizer() => throw null; + public abstract System.Type UseType(System.Type type); + } + + // Generated from `ServiceStack.Text.RuntimeReflectionOptimizer` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class RuntimeReflectionOptimizer : ServiceStack.Text.ReflectionOptimizer + { + public override ServiceStack.EmptyCtorDelegate CreateConstructor(System.Type type) => throw null; + public override ServiceStack.GetMemberDelegate CreateGetter(System.Reflection.PropertyInfo propertyInfo) => throw null; + public override ServiceStack.GetMemberDelegate CreateGetter(System.Reflection.FieldInfo fieldInfo) => throw null; + public override ServiceStack.GetMemberDelegate CreateGetter(System.Reflection.PropertyInfo propertyInfo) => throw null; + public override ServiceStack.GetMemberDelegate CreateGetter(System.Reflection.FieldInfo fieldInfo) => throw null; + public override ServiceStack.SetMemberDelegate CreateSetter(System.Reflection.PropertyInfo propertyInfo) => throw null; + public override ServiceStack.SetMemberDelegate CreateSetter(System.Reflection.FieldInfo fieldInfo) => throw null; + public override ServiceStack.SetMemberDelegate CreateSetter(System.Reflection.PropertyInfo propertyInfo) => throw null; + public override ServiceStack.SetMemberDelegate CreateSetter(System.Reflection.FieldInfo fieldInfo) => throw null; + public override ServiceStack.SetMemberRefDelegate CreateSetterRef(System.Reflection.FieldInfo fieldInfo) => throw null; + public override bool IsDynamic(System.Reflection.Assembly assembly) => throw null; + public static ServiceStack.Text.RuntimeReflectionOptimizer Provider { get => throw null; } + public override System.Type UseType(System.Type type) => throw null; + } + + // Generated from `ServiceStack.Text.RuntimeSerializableAttribute` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class RuntimeSerializableAttribute : System.Attribute + { + public RuntimeSerializableAttribute() => throw null; + } + + // Generated from `ServiceStack.Text.StringBuilderCache` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class StringBuilderCache + { + public static System.Text.StringBuilder Allocate() => throw null; + public static void Free(System.Text.StringBuilder sb) => throw null; + public static string ReturnAndFree(System.Text.StringBuilder sb) => throw null; + } + + // Generated from `ServiceStack.Text.StringBuilderCacheAlt` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class StringBuilderCacheAlt + { + public static System.Text.StringBuilder Allocate() => throw null; + public static void Free(System.Text.StringBuilder sb) => throw null; + public static string ReturnAndFree(System.Text.StringBuilder sb) => throw null; + } + + // Generated from `ServiceStack.Text.StringSpanExtensions` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class StringSpanExtensions + { + public static System.ReadOnlySpan Advance(this System.ReadOnlySpan text, int to) => throw null; + public static System.ReadOnlySpan AdvancePastChar(this System.ReadOnlySpan literal, System.Char delim) => throw null; + public static System.ReadOnlySpan AdvancePastWhitespace(this System.ReadOnlySpan literal) => throw null; + public static System.Text.StringBuilder Append(this System.Text.StringBuilder sb, System.ReadOnlySpan value) => throw null; + public static bool CompareIgnoreCase(this System.ReadOnlySpan value, System.ReadOnlySpan text) => throw null; + public static int CountOccurrencesOf(this System.ReadOnlySpan value, System.Char needle) => throw null; + public static bool EndsWith(this System.ReadOnlySpan value, string other, System.StringComparison comparison) => throw null; + public static bool EndsWith(this System.ReadOnlySpan value, string other) => throw null; + public static bool EndsWithIgnoreCase(this System.ReadOnlySpan value, System.ReadOnlySpan other) => throw null; + public static bool EqualTo(this System.ReadOnlySpan value, string other) => throw null; + public static bool EqualTo(this System.ReadOnlySpan value, System.ReadOnlySpan other) => throw null; + public static bool EqualsIgnoreCase(this System.ReadOnlySpan value, System.ReadOnlySpan other) => throw null; + public static bool EqualsOrdinal(this System.ReadOnlySpan value, string other) => throw null; + public static System.ReadOnlySpan FromCsvField(this System.ReadOnlySpan text) => throw null; + public static System.ReadOnlyMemory FromUtf8(this System.ReadOnlySpan value) => throw null; + public static string FromUtf8Bytes(this System.ReadOnlySpan value) => throw null; + public static System.Char GetChar(this System.ReadOnlySpan value, int index) => throw null; + public static System.ReadOnlySpan GetExtension(this System.ReadOnlySpan filePath) => throw null; + public static int IndexOf(this System.ReadOnlySpan value, string other) => throw null; + public static int IndexOf(this System.ReadOnlySpan value, string needle, int start) => throw null; + public static bool IsNullOrEmpty(this System.ReadOnlySpan value) => throw null; + public static bool IsNullOrWhiteSpace(this System.ReadOnlySpan value) => throw null; + public static int LastIndexOf(this System.ReadOnlySpan value, string other) => throw null; + public static int LastIndexOf(this System.ReadOnlySpan value, string needle, int start) => throw null; + public static System.ReadOnlySpan LastLeftPart(this System.ReadOnlySpan strVal, string needle) => throw null; + public static System.ReadOnlySpan LastLeftPart(this System.ReadOnlySpan strVal, System.Char needle) => throw null; + public static System.ReadOnlySpan LastRightPart(this System.ReadOnlySpan strVal, string needle) => throw null; + public static System.ReadOnlySpan LastRightPart(this System.ReadOnlySpan strVal, System.Char needle) => throw null; + public static System.ReadOnlySpan LeftPart(this System.ReadOnlySpan strVal, string needle) => throw null; + public static System.ReadOnlySpan LeftPart(this System.ReadOnlySpan strVal, System.Char needle) => throw null; + public static System.ReadOnlySpan ParentDirectory(this System.ReadOnlySpan filePath) => throw null; + public static System.Byte[] ParseBase64(this System.ReadOnlySpan value) => throw null; + public static bool ParseBoolean(this System.ReadOnlySpan value) => throw null; + public static System.Byte ParseByte(this System.ReadOnlySpan value) => throw null; + public static System.Decimal ParseDecimal(this System.ReadOnlySpan value, bool allowThousands) => throw null; + public static System.Decimal ParseDecimal(this System.ReadOnlySpan value) => throw null; + public static double ParseDouble(this System.ReadOnlySpan value) => throw null; + public static float ParseFloat(this System.ReadOnlySpan value) => throw null; + public static System.Guid ParseGuid(this System.ReadOnlySpan value) => throw null; + public static System.Int16 ParseInt16(this System.ReadOnlySpan value) => throw null; + public static int ParseInt32(this System.ReadOnlySpan value) => throw null; + public static System.Int64 ParseInt64(this System.ReadOnlySpan value) => throw null; + public static System.SByte ParseSByte(this System.ReadOnlySpan value) => throw null; + public static object ParseSignedInteger(this System.ReadOnlySpan value) => throw null; + public static System.UInt16 ParseUInt16(this System.ReadOnlySpan value) => throw null; + public static System.UInt32 ParseUInt32(this System.ReadOnlySpan value) => throw null; + public static System.UInt64 ParseUInt64(this System.ReadOnlySpan value) => throw null; + public static System.ReadOnlySpan RightPart(this System.ReadOnlySpan strVal, string needle) => throw null; + public static System.ReadOnlySpan RightPart(this System.ReadOnlySpan strVal, System.Char needle) => throw null; + public static System.ReadOnlySpan SafeSlice(this System.ReadOnlySpan value, int startIndex, int length) => throw null; + public static System.ReadOnlySpan SafeSlice(this System.ReadOnlySpan value, int startIndex) => throw null; + public static System.ReadOnlySpan SafeSubstring(this System.ReadOnlySpan value, int startIndex, int length) => throw null; + public static System.ReadOnlySpan SafeSubstring(this System.ReadOnlySpan value, int startIndex) => throw null; + public static void SplitOnFirst(this System.ReadOnlySpan strVal, string needle, out System.ReadOnlySpan first, out System.ReadOnlySpan last) => throw null; + public static void SplitOnFirst(this System.ReadOnlySpan strVal, System.Char needle, out System.ReadOnlySpan first, out System.ReadOnlySpan last) => throw null; + public static void SplitOnLast(this System.ReadOnlySpan strVal, string needle, out System.ReadOnlySpan first, out System.ReadOnlySpan last) => throw null; + public static void SplitOnLast(this System.ReadOnlySpan strVal, System.Char needle, out System.ReadOnlySpan first, out System.ReadOnlySpan last) => throw null; + public static bool StartsWith(this System.ReadOnlySpan value, string other, System.StringComparison comparison) => throw null; + public static bool StartsWith(this System.ReadOnlySpan value, string other) => throw null; + public static bool StartsWithIgnoreCase(this System.ReadOnlySpan value, System.ReadOnlySpan other) => throw null; + public static System.ReadOnlySpan Subsegment(this System.ReadOnlySpan text, int startPos, int length) => throw null; + public static System.ReadOnlySpan Subsegment(this System.ReadOnlySpan text, int startPos) => throw null; + public static string Substring(this System.ReadOnlySpan value, int pos, int length) => throw null; + public static string Substring(this System.ReadOnlySpan value, int pos) => throw null; + public static string SubstringWithEllipsis(this System.ReadOnlySpan value, int startIndex, int length) => throw null; + public static System.Collections.Generic.List ToStringList(this System.Collections.Generic.IEnumerable> from) => throw null; + public static System.ReadOnlyMemory ToUtf8(this System.ReadOnlySpan value) => throw null; + public static System.Byte[] ToUtf8Bytes(this System.ReadOnlySpan value) => throw null; + public static System.ReadOnlySpan TrimEnd(this System.ReadOnlySpan value, params System.Char[] trimChars) => throw null; + public static bool TryParseBoolean(this System.ReadOnlySpan value, out bool result) => throw null; + public static bool TryParseDecimal(this System.ReadOnlySpan value, out System.Decimal result) => throw null; + public static bool TryParseDouble(this System.ReadOnlySpan value, out double result) => throw null; + public static bool TryParseFloat(this System.ReadOnlySpan value, out float result) => throw null; + public static bool TryReadLine(this System.ReadOnlySpan text, out System.ReadOnlySpan line, ref int startIndex) => throw null; + public static bool TryReadPart(this System.ReadOnlySpan text, string needle, out System.ReadOnlySpan part, ref int startIndex) => throw null; + public static string Value(this System.ReadOnlySpan value) => throw null; + public static System.ReadOnlySpan WithoutBom(this System.ReadOnlySpan value) => throw null; + public static System.ReadOnlySpan WithoutBom(this System.ReadOnlySpan value) => throw null; + public static System.ReadOnlySpan WithoutExtension(this System.ReadOnlySpan filePath) => throw null; + public static System.Threading.Tasks.Task WriteAsync(this System.IO.Stream stream, System.ReadOnlySpan value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + } + + // Generated from `ServiceStack.Text.StringTextExtensions` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class StringTextExtensions + { + public static object To(this string value, System.Type type) => throw null; + public static T To(this string value, T defaultValue) => throw null; + public static T To(this string value) => throw null; + public static T ToOrDefaultValue(this string value) => throw null; + } + + // Generated from `ServiceStack.Text.StringWriterCache` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class StringWriterCache + { + public static System.IO.StringWriter Allocate() => throw null; + public static void Free(System.IO.StringWriter writer) => throw null; + public static string ReturnAndFree(System.IO.StringWriter writer) => throw null; + } + + // Generated from `ServiceStack.Text.StringWriterCacheAlt` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class StringWriterCacheAlt + { + public static System.IO.StringWriter Allocate() => throw null; + public static void Free(System.IO.StringWriter writer) => throw null; + public static string ReturnAndFree(System.IO.StringWriter writer) => throw null; + } + + // Generated from `ServiceStack.Text.SystemTime` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class SystemTime + { + public static System.DateTime Now { get => throw null; } + public static System.Func UtcDateTimeResolver; + public static System.DateTime UtcNow { get => throw null; } + } + + // Generated from `ServiceStack.Text.TextCase` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public enum TextCase + { + CamelCase, + Default, + PascalCase, + SnakeCase, + } + + // Generated from `ServiceStack.Text.TimeSpanHandler` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public enum TimeSpanHandler + { + DurationFormat, + StandardFormat, + } + + // Generated from `ServiceStack.Text.Tracer` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class Tracer + { + // Generated from `ServiceStack.Text.Tracer+ConsoleTracer` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ConsoleTracer : ServiceStack.Text.ITracer + { + public ConsoleTracer() => throw null; + public void WriteDebug(string format, params object[] args) => throw null; + public void WriteDebug(string error) => throw null; + public void WriteError(string format, params object[] args) => throw null; + public void WriteError(string error) => throw null; + public void WriteError(System.Exception ex) => throw null; + public void WriteWarning(string warning) => throw null; + public void WriteWarning(string format, params object[] args) => throw null; + } + + + public static ServiceStack.Text.ITracer Instance; + // Generated from `ServiceStack.Text.Tracer+NullTracer` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class NullTracer : ServiceStack.Text.ITracer + { + public NullTracer() => throw null; + public void WriteDebug(string format, params object[] args) => throw null; + public void WriteDebug(string error) => throw null; + public void WriteError(string format, params object[] args) => throw null; + public void WriteError(string error) => throw null; + public void WriteError(System.Exception ex) => throw null; + public void WriteWarning(string warning) => throw null; + public void WriteWarning(string format, params object[] args) => throw null; + } + + + public Tracer() => throw null; + } + + // Generated from `ServiceStack.Text.TracerExceptions` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class TracerExceptions + { + public static T Trace(this T ex) where T : System.Exception => throw null; + } + + // Generated from `ServiceStack.Text.TranslateListWithConvertibleElements<,>` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class TranslateListWithConvertibleElements + { + public static object LateBoundTranslateToGenericICollection(object fromList, System.Type toInstanceOfType) => throw null; + public TranslateListWithConvertibleElements() => throw null; + public static System.Collections.Generic.ICollection TranslateToGenericICollection(System.Collections.Generic.ICollection fromList, System.Type toInstanceOfType) => throw null; + } + + // Generated from `ServiceStack.Text.TranslateListWithElements` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class TranslateListWithElements + { + public static object TranslateToConvertibleGenericICollectionCache(object from, System.Type toInstanceOfType, System.Type fromElementType) => throw null; + public static object TranslateToGenericICollectionCache(object from, System.Type toInstanceOfType, System.Type elementType) => throw null; + public static object TryTranslateCollections(System.Type fromPropertyType, System.Type toPropertyType, object fromValue) => throw null; + } + + // Generated from `ServiceStack.Text.TranslateListWithElements<>` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class TranslateListWithElements + { + public static object CreateInstance(System.Type toInstanceOfType) => throw null; + public static object LateBoundTranslateToGenericICollection(object fromList, System.Type toInstanceOfType) => throw null; + public TranslateListWithElements() => throw null; + public static System.Collections.Generic.ICollection TranslateToGenericICollection(System.Collections.IEnumerable fromList, System.Type toInstanceOfType) => throw null; + public static System.Collections.IList TranslateToIList(System.Collections.IList fromList, System.Type toInstanceOfType) => throw null; + } + + // Generated from `ServiceStack.Text.TypeConfig<>` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class TypeConfig + { + public static bool EnableAnonymousFieldSetters { get => throw null; set => throw null; } + public static System.Reflection.FieldInfo[] Fields { get => throw null; set => throw null; } + public static bool IsUserType { get => throw null; set => throw null; } + public static System.Func OnDeserializing { get => throw null; set => throw null; } + public static System.Reflection.PropertyInfo[] Properties { get => throw null; set => throw null; } + public static void Reset() => throw null; + } + + // Generated from `ServiceStack.Text.TypeSerializer` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class TypeSerializer + { + public static bool CanCreateFromString(System.Type type) => throw null; + public static T Clone(T value) => throw null; + public static object DeserializeFromReader(System.IO.TextReader reader, System.Type type) => throw null; + public static T DeserializeFromReader(System.IO.TextReader reader) => throw null; + public static object DeserializeFromSpan(System.Type type, System.ReadOnlySpan value) => throw null; + public static T DeserializeFromSpan(System.ReadOnlySpan value) => throw null; + public static object DeserializeFromStream(System.Type type, System.IO.Stream stream) => throw null; + public static T DeserializeFromStream(System.IO.Stream stream) => throw null; + public static System.Threading.Tasks.Task DeserializeFromStreamAsync(System.Type type, System.IO.Stream stream) => throw null; + public static System.Threading.Tasks.Task DeserializeFromStreamAsync(System.IO.Stream stream) => throw null; + public static object DeserializeFromString(string value, System.Type type) => throw null; + public static T DeserializeFromString(string value) => throw null; + public const string DoubleQuoteString = default; + public static string Dump(this T instance) => throw null; + public static string Dump(this System.Delegate fn) => throw null; + public static bool HasCircularReferences(object value) => throw null; + public static string IndentJson(this string json) => throw null; + public static System.Action OnSerialize { get => throw null; set => throw null; } + public static void Print(this string text, params object[] args) => throw null; + public static void Print(this int intValue) => throw null; + public static void Print(this System.Int64 longValue) => throw null; + public static void PrintDump(this T instance) => throw null; + public static string SerializeAndFormat(this T instance) => throw null; + public static void SerializeToStream(T value, System.IO.Stream stream) => throw null; + public static void SerializeToStream(object value, System.Type type, System.IO.Stream stream) => throw null; + public static string SerializeToString(T value) => throw null; + public static string SerializeToString(object value, System.Type type) => throw null; + public static void SerializeToWriter(T value, System.IO.TextWriter writer) => throw null; + public static void SerializeToWriter(object value, System.Type type, System.IO.TextWriter writer) => throw null; + public static System.Collections.Generic.Dictionary ToStringDictionary(this object obj) => throw null; + public static System.Text.UTF8Encoding UTF8Encoding { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.Text.TypeSerializer<>` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class TypeSerializer : ServiceStack.Text.ITypeSerializer + { + public bool CanCreateFromString(System.Type type) => throw null; + public T DeserializeFromReader(System.IO.TextReader reader) => throw null; + public T DeserializeFromString(string value) => throw null; + public string SerializeToString(T value) => throw null; + public void SerializeToWriter(T value, System.IO.TextWriter writer) => throw null; + public TypeSerializer() => throw null; + } + + // Generated from `ServiceStack.Text.XmlSerializer` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class XmlSerializer + { + public static T DeserializeFromReader(System.IO.TextReader reader) => throw null; + public static object DeserializeFromStream(System.Type type, System.IO.Stream stream) => throw null; + public static T DeserializeFromStream(System.IO.Stream stream) => throw null; + public static object DeserializeFromString(string xml, System.Type type) => throw null; + public static T DeserializeFromString(string xml) => throw null; + public static ServiceStack.Text.XmlSerializer Instance; + public static void SerializeToStream(object obj, System.IO.Stream stream) => throw null; + public static string SerializeToString(T from) => throw null; + public static void SerializeToWriter(T value, System.IO.TextWriter writer) => throw null; + public static System.Xml.XmlReaderSettings XmlReaderSettings; + public XmlSerializer(bool omitXmlDeclaration = default(bool), int maxCharsInDocument = default(int)) => throw null; + public static System.Xml.XmlWriterSettings XmlWriterSettings; + } + + namespace Common + { + // Generated from `ServiceStack.Text.Common.ConvertInstanceDelegate` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public delegate object ConvertInstanceDelegate(object obj, System.Type type); + + // Generated from `ServiceStack.Text.Common.ConvertObjectDelegate` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public delegate object ConvertObjectDelegate(object fromObject); + + // Generated from `ServiceStack.Text.Common.DateTimeSerializer` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class DateTimeSerializer + { + public const string CondensedDateTimeFormat = default; + public const string DateTimeFormatSecondsNoOffset = default; + public const string DateTimeFormatSecondsUtcOffset = default; + public const string DateTimeFormatTicksNoUtcOffset = default; + public const string DateTimeFormatTicksUtcOffset = default; + public const string DefaultDateTimeFormat = default; + public const string DefaultDateTimeFormatWithFraction = default; + public const string EscapedWcfJsonPrefix = default; + public const string EscapedWcfJsonSuffix = default; + public static System.TimeZoneInfo GetLocalTimeZoneInfo() => throw null; + public static System.Func OnParseErrorFn { get => throw null; set => throw null; } + public static System.DateTime ParseDateTime(string dateTimeStr) => throw null; + public static System.DateTimeOffset ParseDateTimeOffset(string dateTimeOffsetStr) => throw null; + public static System.DateTime? ParseManual(string dateTimeStr, System.DateTimeKind dateKind) => throw null; + public static System.DateTime? ParseManual(string dateTimeStr) => throw null; + public static System.TimeSpan ParseNSTimeInterval(string doubleInSecs) => throw null; + public static System.DateTimeOffset? ParseNullableDateTimeOffset(string dateTimeOffsetStr) => throw null; + public static System.TimeSpan? ParseNullableTimeSpan(string dateTimeStr) => throw null; + public static System.DateTime ParseRFC1123DateTime(string dateTimeStr) => throw null; + public static System.DateTime? ParseShortestNullableXsdDateTime(string dateTimeStr) => throw null; + public static System.DateTime ParseShortestXsdDateTime(string dateTimeStr) => throw null; + public static System.TimeSpan ParseTimeSpan(string dateTimeStr) => throw null; + public static System.DateTime ParseWcfJsonDate(string wcfJsonDate) => throw null; + public static System.DateTimeOffset ParseWcfJsonDateOffset(string wcfJsonDate) => throw null; + public static System.DateTime ParseXsdDateTime(string dateTimeStr) => throw null; + public static System.TimeSpan? ParseXsdNullableTimeSpan(string dateTimeStr) => throw null; + public static System.TimeSpan ParseXsdTimeSpan(string dateTimeStr) => throw null; + public static System.DateTime Prepare(this System.DateTime dateTime, bool parsedAsUtc = default(bool)) => throw null; + public const string ShortDateTimeFormat = default; + public static string ToDateTimeString(System.DateTime dateTime) => throw null; + public static string ToLocalXsdDateTimeString(System.DateTime dateTime) => throw null; + public static string ToShortestXsdDateTimeString(System.DateTime dateTime) => throw null; + public static string ToWcfJsonDate(System.DateTime dateTime) => throw null; + public static string ToWcfJsonDateTimeOffset(System.DateTimeOffset dateTimeOffset) => throw null; + public static string ToXsdDateTimeString(System.DateTime dateTime) => throw null; + public static string ToXsdTimeSpanString(System.TimeSpan? timeSpan) => throw null; + public static string ToXsdTimeSpanString(System.TimeSpan timeSpan) => throw null; + public const string UnspecifiedOffset = default; + public const string UtcOffset = default; + public const string WcfJsonPrefix = default; + public const System.Char WcfJsonSuffix = default; + public static void WriteWcfJsonDate(System.IO.TextWriter writer, System.DateTime dateTime) => throw null; + public static void WriteWcfJsonDateTimeOffset(System.IO.TextWriter writer, System.DateTimeOffset dateTimeOffset) => throw null; + public const string XsdDateTimeFormat = default; + public const string XsdDateTimeFormat3F = default; + public const string XsdDateTimeFormatSeconds = default; + } + + // Generated from `ServiceStack.Text.Common.DeserializationErrorDelegate` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public delegate void DeserializationErrorDelegate(object instance, System.Type propertyType, string propertyName, string propertyValueStr, System.Exception ex); + + // Generated from `ServiceStack.Text.Common.DeserializeArrayWithElements<,>` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class DeserializeArrayWithElements where TSerializer : ServiceStack.Text.Common.ITypeSerializer + { + public static T[] ParseGenericArray(string value, ServiceStack.Text.Common.ParseStringDelegate elementParseFn) => throw null; + public static T[] ParseGenericArray(System.ReadOnlySpan value, ServiceStack.Text.Common.ParseStringSpanDelegate elementParseFn) => throw null; + } + + // Generated from `ServiceStack.Text.Common.DeserializeArrayWithElements<>` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class DeserializeArrayWithElements where TSerializer : ServiceStack.Text.Common.ITypeSerializer + { + public static System.Func GetParseFn(System.Type type) => throw null; + public static ServiceStack.Text.Common.DeserializeArrayWithElements.ParseArrayOfElementsDelegate GetParseStringSpanFn(System.Type type) => throw null; + // Generated from `ServiceStack.Text.Common.DeserializeArrayWithElements<>+ParseArrayOfElementsDelegate` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public delegate object ParseArrayOfElementsDelegate(System.ReadOnlySpan value, ServiceStack.Text.Common.ParseStringSpanDelegate parseFn); + + + } + + // Generated from `ServiceStack.Text.Common.DeserializeBuiltin<>` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class DeserializeBuiltin + { + public static ServiceStack.Text.Common.ParseStringDelegate Parse { get => throw null; } + public static ServiceStack.Text.Common.ParseStringSpanDelegate ParseStringSpan { get => throw null; } + } + + // Generated from `ServiceStack.Text.Common.DeserializeDictionary<>` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class DeserializeDictionary where TSerializer : ServiceStack.Text.Common.ITypeSerializer + { + public static ServiceStack.Text.Common.ParseStringDelegate GetParseMethod(System.Type type) => throw null; + public static ServiceStack.Text.Common.ParseStringSpanDelegate GetParseStringSpanMethod(System.Type type) => throw null; + public static System.Collections.Generic.IDictionary ParseDictionary(string value, System.Type createMapType, ServiceStack.Text.Common.ParseStringDelegate parseKeyFn, ServiceStack.Text.Common.ParseStringDelegate parseValueFn) => throw null; + public static System.Collections.Generic.IDictionary ParseDictionary(System.ReadOnlySpan value, System.Type createMapType, ServiceStack.Text.Common.ParseStringSpanDelegate parseKeyFn, ServiceStack.Text.Common.ParseStringSpanDelegate parseValueFn) => throw null; + public static object ParseDictionaryType(string value, System.Type createMapType, System.Type[] argTypes, ServiceStack.Text.Common.ParseStringDelegate keyParseFn, ServiceStack.Text.Common.ParseStringDelegate valueParseFn) => throw null; + public static object ParseDictionaryType(System.ReadOnlySpan value, System.Type createMapType, System.Type[] argTypes, ServiceStack.Text.Common.ParseStringSpanDelegate keyParseFn, ServiceStack.Text.Common.ParseStringSpanDelegate valueParseFn) => throw null; + public static System.Collections.IDictionary ParseIDictionary(string value, System.Type dictType) => throw null; + public static System.Collections.IDictionary ParseIDictionary(System.ReadOnlySpan value, System.Type dictType) => throw null; + public static T ParseInheritedJsonObject(System.ReadOnlySpan value) where T : ServiceStack.Text.JsonObject, new() => throw null; + public static ServiceStack.Text.JsonObject ParseJsonObject(string value) => throw null; + public static ServiceStack.Text.JsonObject ParseJsonObject(System.ReadOnlySpan value) => throw null; + public static System.Collections.Generic.Dictionary ParseStringDictionary(string value) => throw null; + public static System.Collections.Generic.Dictionary ParseStringDictionary(System.ReadOnlySpan value) => throw null; + } + + // Generated from `ServiceStack.Text.Common.DeserializeList<,>` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class DeserializeList where TSerializer : ServiceStack.Text.Common.ITypeSerializer + { + public static ServiceStack.Text.Common.ParseStringDelegate GetParseFn() => throw null; + public static ServiceStack.Text.Common.ParseStringSpanDelegate GetParseStringSpanFn() => throw null; + public static ServiceStack.Text.Common.ParseStringDelegate Parse { get => throw null; } + public static ServiceStack.Text.Common.ParseStringSpanDelegate ParseStringSpan { get => throw null; } + } + + // Generated from `ServiceStack.Text.Common.DeserializeListWithElements<,>` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class DeserializeListWithElements where TSerializer : ServiceStack.Text.Common.ITypeSerializer + { + public static System.Collections.Generic.ICollection ParseGenericList(string value, System.Type createListType, ServiceStack.Text.Common.ParseStringDelegate parseFn) => throw null; + public static System.Collections.Generic.ICollection ParseGenericList(System.ReadOnlySpan value, System.Type createListType, ServiceStack.Text.Common.ParseStringSpanDelegate parseFn) => throw null; + } + + // Generated from `ServiceStack.Text.Common.DeserializeListWithElements<>` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class DeserializeListWithElements where TSerializer : ServiceStack.Text.Common.ITypeSerializer + { + public static System.Func GetListTypeParseFn(System.Type createListType, System.Type elementType, ServiceStack.Text.Common.ParseStringDelegate parseFn) => throw null; + public static ServiceStack.Text.Common.DeserializeListWithElements.ParseListDelegate GetListTypeParseStringSpanFn(System.Type createListType, System.Type elementType, ServiceStack.Text.Common.ParseStringSpanDelegate parseFn) => throw null; + public static System.Collections.Generic.List ParseByteList(string value) => throw null; + public static System.Collections.Generic.List ParseByteList(System.ReadOnlySpan value) => throw null; + public static System.Collections.Generic.List ParseIntList(string value) => throw null; + public static System.Collections.Generic.List ParseIntList(System.ReadOnlySpan value) => throw null; + // Generated from `ServiceStack.Text.Common.DeserializeListWithElements<>+ParseListDelegate` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public delegate object ParseListDelegate(System.ReadOnlySpan value, System.Type createListType, ServiceStack.Text.Common.ParseStringSpanDelegate parseFn); + + + public static System.Collections.Generic.List ParseStringList(string value) => throw null; + public static System.Collections.Generic.List ParseStringList(System.ReadOnlySpan value) => throw null; + public static System.ReadOnlySpan StripList(System.ReadOnlySpan value) => throw null; + } + + // Generated from `ServiceStack.Text.Common.DeserializeStringSpanDelegate` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public delegate object DeserializeStringSpanDelegate(System.Type type, System.ReadOnlySpan source); + + // Generated from `ServiceStack.Text.Common.DeserializeType<>` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class DeserializeType where TSerializer : ServiceStack.Text.Common.ITypeSerializer + { + public static System.Type ExtractType(string strType) => throw null; + public static System.Type ExtractType(System.ReadOnlySpan strType) => throw null; + public static object ObjectStringToType(System.ReadOnlySpan strType) => throw null; + public static object ParseAbstractType(System.ReadOnlySpan value) => throw null; + public static object ParsePrimitive(string value) => throw null; + public static object ParsePrimitive(System.ReadOnlySpan value) => throw null; + public static object ParseQuotedPrimitive(string value) => throw null; + } + + // Generated from `ServiceStack.Text.Common.DeserializeTypeExensions` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class DeserializeTypeExensions + { + public static bool Has(this ServiceStack.Text.ParseAsType flags, ServiceStack.Text.ParseAsType flag) => throw null; + public static object ParseNumber(this System.ReadOnlySpan value, bool bestFit) => throw null; + public static object ParseNumber(this System.ReadOnlySpan value) => throw null; + } + + // Generated from `ServiceStack.Text.Common.DeserializeTypeUtils` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class DeserializeTypeUtils + { + public DeserializeTypeUtils() => throw null; + public static ServiceStack.Text.Common.ParseStringDelegate GetParseMethod(System.Type type) => throw null; + public static ServiceStack.Text.Common.ParseStringSpanDelegate GetParseStringSpanMethod(System.Type type) => throw null; + public static System.Reflection.ConstructorInfo GetTypeStringConstructor(System.Type type) => throw null; + } + + // Generated from `ServiceStack.Text.Common.ITypeSerializer` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface ITypeSerializer + { + bool EatItemSeperatorOrMapEndChar(string value, ref int i); + bool EatItemSeperatorOrMapEndChar(System.ReadOnlySpan value, ref int i); + string EatMapKey(string value, ref int i); + System.ReadOnlySpan EatMapKey(System.ReadOnlySpan value, ref int i); + bool EatMapKeySeperator(string value, ref int i); + bool EatMapKeySeperator(System.ReadOnlySpan value, ref int i); + bool EatMapStartChar(string value, ref int i); + bool EatMapStartChar(System.ReadOnlySpan value, ref int i); + string EatTypeValue(string value, ref int i); + System.ReadOnlySpan EatTypeValue(System.ReadOnlySpan value, ref int i); + string EatValue(string value, ref int i); + System.ReadOnlySpan EatValue(System.ReadOnlySpan value, ref int i); + void EatWhitespace(string value, ref int i); + void EatWhitespace(System.ReadOnlySpan value, ref int i); + ServiceStack.Text.Common.ParseStringDelegate GetParseFn(); + ServiceStack.Text.Common.ParseStringDelegate GetParseFn(System.Type type); + ServiceStack.Text.Common.ParseStringSpanDelegate GetParseStringSpanFn(); + ServiceStack.Text.Common.ParseStringSpanDelegate GetParseStringSpanFn(System.Type type); + ServiceStack.Text.Json.TypeInfo GetTypeInfo(System.Type type); + ServiceStack.Text.Common.WriteObjectDelegate GetWriteFn(); + ServiceStack.Text.Common.WriteObjectDelegate GetWriteFn(System.Type type); + bool IncludeNullValues { get; } + bool IncludeNullValuesInDictionaries { get; } + ServiceStack.Text.Common.ObjectDeserializerDelegate ObjectDeserializer { get; set; } + string ParseRawString(string value); + string ParseString(string value); + string ParseString(System.ReadOnlySpan value); + string TypeAttrInObject { get; } + string UnescapeSafeString(string value); + System.ReadOnlySpan UnescapeSafeString(System.ReadOnlySpan value); + string UnescapeString(string value); + System.ReadOnlySpan UnescapeString(System.ReadOnlySpan value); + object UnescapeStringAsObject(System.ReadOnlySpan value); + void WriteBool(System.IO.TextWriter writer, object boolValue); + void WriteBuiltIn(System.IO.TextWriter writer, object value); + void WriteByte(System.IO.TextWriter writer, object byteValue); + void WriteBytes(System.IO.TextWriter writer, object oByteValue); + void WriteChar(System.IO.TextWriter writer, object charValue); + void WriteDateTime(System.IO.TextWriter writer, object oDateTime); + void WriteDateTimeOffset(System.IO.TextWriter writer, object oDateTimeOffset); + void WriteDecimal(System.IO.TextWriter writer, object decimalValue); + void WriteDouble(System.IO.TextWriter writer, object doubleValue); + void WriteEnum(System.IO.TextWriter writer, object enumValue); + void WriteException(System.IO.TextWriter writer, object value); + void WriteFloat(System.IO.TextWriter writer, object floatValue); + void WriteFormattableObjectString(System.IO.TextWriter writer, object value); + void WriteGuid(System.IO.TextWriter writer, object oValue); + void WriteInt16(System.IO.TextWriter writer, object intValue); + void WriteInt32(System.IO.TextWriter writer, object intValue); + void WriteInt64(System.IO.TextWriter writer, object longValue); + void WriteNullableDateTime(System.IO.TextWriter writer, object dateTime); + void WriteNullableDateTimeOffset(System.IO.TextWriter writer, object dateTimeOffset); + void WriteNullableGuid(System.IO.TextWriter writer, object oValue); + void WriteNullableTimeSpan(System.IO.TextWriter writer, object dateTimeOffset); + void WriteObjectString(System.IO.TextWriter writer, object value); + void WritePropertyName(System.IO.TextWriter writer, string value); + void WriteRawString(System.IO.TextWriter writer, string value); + void WriteSByte(System.IO.TextWriter writer, object sbyteValue); + void WriteString(System.IO.TextWriter writer, string value); + void WriteTimeSpan(System.IO.TextWriter writer, object dateTimeOffset); + void WriteUInt16(System.IO.TextWriter writer, object intValue); + void WriteUInt32(System.IO.TextWriter writer, object uintValue); + void WriteUInt64(System.IO.TextWriter writer, object ulongValue); + } + + // Generated from `ServiceStack.Text.Common.JsReader<>` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class JsReader where TSerializer : ServiceStack.Text.Common.ITypeSerializer + { + public ServiceStack.Text.Common.ParseStringDelegate GetParseFn() => throw null; + public ServiceStack.Text.Common.ParseStringSpanDelegate GetParseStringSpanFn() => throw null; + public static void InitAot() => throw null; + public JsReader() => throw null; + } + + // Generated from `ServiceStack.Text.Common.JsWriter` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class JsWriter + { + public static void AssertAllowedRuntimeType(System.Type type) => throw null; + public static System.Char[] CsvChars; + public const string EmptyMap = default; + public static System.Char[] EscapeChars; + public const string EscapedQuoteString = default; + public static ServiceStack.Text.Common.ITypeSerializer GetTypeSerializer() => throw null; + public static bool HasAnyEscapeChars(string value) => throw null; + public const System.Char ItemSeperator = default; + public const string ItemSeperatorString = default; + public const System.Char LineFeedChar = default; + public const System.Char ListEndChar = default; + public const System.Char ListStartChar = default; + public const System.Char MapEndChar = default; + public const System.Char MapKeySeperator = default; + public const string MapKeySeperatorString = default; + public const string MapNullValue = default; + public const System.Char MapStartChar = default; + public const System.Char QuoteChar = default; + public const string QuoteString = default; + public const System.Char ReturnChar = default; + public static bool ShouldAllowRuntimeType(System.Type type) => throw null; + public const string TypeAttr = default; + public static void WriteDynamic(System.Action callback) => throw null; + public static void WriteEnumFlags(System.IO.TextWriter writer, object enumFlagValue) => throw null; + } + + // Generated from `ServiceStack.Text.Common.JsWriter<>` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class JsWriter where TSerializer : ServiceStack.Text.Common.ITypeSerializer + { + public ServiceStack.Text.Common.WriteObjectDelegate GetSpecialWriteFn(System.Type type) => throw null; + public ServiceStack.Text.Common.WriteObjectDelegate GetValueTypeToStringMethod(System.Type type) => throw null; + public ServiceStack.Text.Common.WriteObjectDelegate GetWriteFn() => throw null; + public static void InitAot() => throw null; + public JsWriter() => throw null; + public System.Collections.Generic.Dictionary SpecialTypes; + public void WriteType(System.IO.TextWriter writer, object value) => throw null; + public void WriteValue(System.IO.TextWriter writer, object value) => throw null; + } + + // Generated from `ServiceStack.Text.Common.ObjectDeserializerDelegate` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public delegate object ObjectDeserializerDelegate(System.ReadOnlySpan value); + + // Generated from `ServiceStack.Text.Common.ParseStringDelegate` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public delegate object ParseStringDelegate(string stringValue); + + // Generated from `ServiceStack.Text.Common.ParseStringSpanDelegate` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public delegate object ParseStringSpanDelegate(System.ReadOnlySpan value); + + // Generated from `ServiceStack.Text.Common.StaticParseMethod<>` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class StaticParseMethod + { + public static ServiceStack.Text.Common.ParseStringDelegate Parse { get => throw null; } + public static ServiceStack.Text.Common.ParseStringSpanDelegate ParseStringSpan { get => throw null; } + } + + // Generated from `ServiceStack.Text.Common.ToStringDictionaryMethods<,,>` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class ToStringDictionaryMethods where TSerializer : ServiceStack.Text.Common.ITypeSerializer + { + public static void WriteGenericIDictionary(System.IO.TextWriter writer, System.Collections.Generic.IDictionary map, ServiceStack.Text.Common.WriteObjectDelegate writeKeyFn, ServiceStack.Text.Common.WriteObjectDelegate writeValueFn) => throw null; + public static void WriteIDictionary(System.IO.TextWriter writer, object oMap, ServiceStack.Text.Common.WriteObjectDelegate writeKeyFn, ServiceStack.Text.Common.WriteObjectDelegate writeValueFn) => throw null; + } + + // Generated from `ServiceStack.Text.Common.WriteListsOfElements<,>` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class WriteListsOfElements where TSerializer : ServiceStack.Text.Common.ITypeSerializer + { + public static void WriteArray(System.IO.TextWriter writer, object oArrayValue) => throw null; + public static void WriteEnumerable(System.IO.TextWriter writer, object oEnumerable) => throw null; + public static void WriteGenericArray(System.IO.TextWriter writer, System.Array array) => throw null; + public static void WriteGenericArrayValueType(System.IO.TextWriter writer, object oArray) => throw null; + public static void WriteGenericArrayValueType(System.IO.TextWriter writer, T[] array) => throw null; + public static void WriteGenericEnumerable(System.IO.TextWriter writer, System.Collections.Generic.IEnumerable enumerable) => throw null; + public static void WriteGenericEnumerableValueType(System.IO.TextWriter writer, System.Collections.Generic.IEnumerable enumerable) => throw null; + public static void WriteGenericIList(System.IO.TextWriter writer, System.Collections.Generic.IList list) => throw null; + public static void WriteGenericIListValueType(System.IO.TextWriter writer, System.Collections.Generic.IList list) => throw null; + public static void WriteGenericList(System.IO.TextWriter writer, System.Collections.Generic.List list) => throw null; + public static void WriteGenericListValueType(System.IO.TextWriter writer, System.Collections.Generic.List list) => throw null; + public static void WriteIList(System.IO.TextWriter writer, object oList) => throw null; + public static void WriteIListValueType(System.IO.TextWriter writer, object list) => throw null; + public static void WriteList(System.IO.TextWriter writer, object oList) => throw null; + public static void WriteListValueType(System.IO.TextWriter writer, object list) => throw null; + } + + // Generated from `ServiceStack.Text.Common.WriteListsOfElements<>` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class WriteListsOfElements where TSerializer : ServiceStack.Text.Common.ITypeSerializer + { + public static ServiceStack.Text.Common.WriteObjectDelegate GetGenericWriteArray(System.Type elementType) => throw null; + public static ServiceStack.Text.Common.WriteObjectDelegate GetGenericWriteEnumerable(System.Type elementType) => throw null; + public static ServiceStack.Text.Common.WriteObjectDelegate GetIListWriteFn(System.Type elementType) => throw null; + public static ServiceStack.Text.Common.WriteObjectDelegate GetListWriteFn(System.Type elementType) => throw null; + public static ServiceStack.Text.Common.WriteObjectDelegate GetWriteIListValueType(System.Type elementType) => throw null; + public static ServiceStack.Text.Common.WriteObjectDelegate GetWriteListValueType(System.Type elementType) => throw null; + public static void WriteIEnumerable(System.IO.TextWriter writer, object oValueCollection) => throw null; + } + + // Generated from `ServiceStack.Text.Common.WriteObjectDelegate` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public delegate void WriteObjectDelegate(System.IO.TextWriter writer, object obj); + + } + namespace Controller + { + // Generated from `ServiceStack.Text.Controller.CommandProcessor` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class CommandProcessor + { + public CommandProcessor(object[] controllers) => throw null; + public void Invoke(string commandUri) => throw null; + } + + // Generated from `ServiceStack.Text.Controller.PathInfo` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class PathInfo + { + public string ActionName { get => throw null; set => throw null; } + public System.Collections.Generic.List Arguments { get => throw null; set => throw null; } + public string ControllerName { get => throw null; set => throw null; } + public string FirstArgument { get => throw null; } + public T GetArgumentValue(int index) => throw null; + public System.Collections.Generic.Dictionary Options { get => throw null; set => throw null; } + public static ServiceStack.Text.Controller.PathInfo Parse(string pathUri) => throw null; + public PathInfo(string actionName, params string[] arguments) => throw null; + public PathInfo(string actionName, System.Collections.Generic.List arguments, System.Collections.Generic.Dictionary options) => throw null; + } + + } + namespace Json + { + // Generated from `ServiceStack.Text.Json.JsonReader` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class JsonReader + { + public static void InitAot() => throw null; + public static ServiceStack.Text.Common.JsReader Instance; + } + + // Generated from `ServiceStack.Text.Json.JsonTypeSerializer` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public struct JsonTypeSerializer : ServiceStack.Text.Common.ITypeSerializer + { + public static string ConvertFromUtf32(int utf32) => throw null; + public bool EatItemSeperatorOrMapEndChar(string value, ref int i) => throw null; + public bool EatItemSeperatorOrMapEndChar(System.ReadOnlySpan value, ref int i) => throw null; + public string EatMapKey(string value, ref int i) => throw null; + public System.ReadOnlySpan EatMapKey(System.ReadOnlySpan value, ref int i) => throw null; + public bool EatMapKeySeperator(string value, ref int i) => throw null; + public bool EatMapKeySeperator(System.ReadOnlySpan value, ref int i) => throw null; + public bool EatMapStartChar(string value, ref int i) => throw null; + public bool EatMapStartChar(System.ReadOnlySpan value, ref int i) => throw null; + public string EatTypeValue(string value, ref int i) => throw null; + public System.ReadOnlySpan EatTypeValue(System.ReadOnlySpan value, ref int i) => throw null; + public string EatValue(string value, ref int i) => throw null; + public System.ReadOnlySpan EatValue(System.ReadOnlySpan value, ref int i) => throw null; + public void EatWhitespace(string value, ref int i) => throw null; + public void EatWhitespace(System.ReadOnlySpan value, ref int i) => throw null; + public ServiceStack.Text.Common.ParseStringDelegate GetParseFn() => throw null; + public ServiceStack.Text.Common.ParseStringDelegate GetParseFn(System.Type type) => throw null; + public ServiceStack.Text.Common.ParseStringSpanDelegate GetParseStringSpanFn() => throw null; + public ServiceStack.Text.Common.ParseStringSpanDelegate GetParseStringSpanFn(System.Type type) => throw null; + public ServiceStack.Text.Json.TypeInfo GetTypeInfo(System.Type type) => throw null; + public ServiceStack.Text.Common.WriteObjectDelegate GetWriteFn() => throw null; + public ServiceStack.Text.Common.WriteObjectDelegate GetWriteFn(System.Type type) => throw null; + public bool IncludeNullValues { get => throw null; } + public bool IncludeNullValuesInDictionaries { get => throw null; } + public static ServiceStack.Text.Common.ITypeSerializer Instance; + public static bool IsEmptyMap(System.ReadOnlySpan value, int i = default(int)) => throw null; + // Stub generator skipped constructor + public ServiceStack.Text.Common.ObjectDeserializerDelegate ObjectDeserializer { get => throw null; set => throw null; } + public string ParseRawString(string value) => throw null; + public string ParseString(string value) => throw null; + public string ParseString(System.ReadOnlySpan value) => throw null; + public string TypeAttrInObject { get => throw null; } + public static string Unescape(string input, bool removeQuotes) => throw null; + public static string Unescape(string input) => throw null; + public static System.ReadOnlySpan Unescape(System.ReadOnlySpan input, bool removeQuotes, System.Char quoteChar) => throw null; + public static System.ReadOnlySpan Unescape(System.ReadOnlySpan input, bool removeQuotes) => throw null; + public static System.ReadOnlySpan Unescape(System.ReadOnlySpan input) => throw null; + public static System.ReadOnlySpan UnescapeJsString(System.ReadOnlySpan json, System.Char quoteChar, bool removeQuotes, ref int index) => throw null; + public static System.ReadOnlySpan UnescapeJsString(System.ReadOnlySpan json, System.Char quoteChar) => throw null; + public string UnescapeSafeString(string value) => throw null; + public System.ReadOnlySpan UnescapeSafeString(System.ReadOnlySpan value) => throw null; + public string UnescapeString(string value) => throw null; + public System.ReadOnlySpan UnescapeString(System.ReadOnlySpan value) => throw null; + public object UnescapeStringAsObject(System.ReadOnlySpan value) => throw null; + public void WriteBool(System.IO.TextWriter writer, object boolValue) => throw null; + public void WriteBuiltIn(System.IO.TextWriter writer, object value) => throw null; + public void WriteByte(System.IO.TextWriter writer, object byteValue) => throw null; + public void WriteBytes(System.IO.TextWriter writer, object oByteValue) => throw null; + public void WriteChar(System.IO.TextWriter writer, object charValue) => throw null; + public void WriteDateTime(System.IO.TextWriter writer, object oDateTime) => throw null; + public void WriteDateTimeOffset(System.IO.TextWriter writer, object oDateTimeOffset) => throw null; + public void WriteDecimal(System.IO.TextWriter writer, object decimalValue) => throw null; + public void WriteDouble(System.IO.TextWriter writer, object doubleValue) => throw null; + public void WriteEnum(System.IO.TextWriter writer, object enumValue) => throw null; + public void WriteException(System.IO.TextWriter writer, object value) => throw null; + public void WriteFloat(System.IO.TextWriter writer, object floatValue) => throw null; + public void WriteFormattableObjectString(System.IO.TextWriter writer, object value) => throw null; + public void WriteGuid(System.IO.TextWriter writer, object oValue) => throw null; + public void WriteInt16(System.IO.TextWriter writer, object intValue) => throw null; + public void WriteInt32(System.IO.TextWriter writer, object intValue) => throw null; + public void WriteInt64(System.IO.TextWriter writer, object integerValue) => throw null; + public void WriteNullableDateTime(System.IO.TextWriter writer, object dateTime) => throw null; + public void WriteNullableDateTimeOffset(System.IO.TextWriter writer, object dateTimeOffset) => throw null; + public void WriteNullableGuid(System.IO.TextWriter writer, object oValue) => throw null; + public void WriteNullableTimeSpan(System.IO.TextWriter writer, object oTimeSpan) => throw null; + public void WriteObjectString(System.IO.TextWriter writer, object value) => throw null; + public void WritePropertyName(System.IO.TextWriter writer, string value) => throw null; + public void WriteRawString(System.IO.TextWriter writer, string value) => throw null; + public void WriteSByte(System.IO.TextWriter writer, object sbyteValue) => throw null; + public void WriteString(System.IO.TextWriter writer, string value) => throw null; + public void WriteTimeSpan(System.IO.TextWriter writer, object oTimeSpan) => throw null; + public void WriteUInt16(System.IO.TextWriter writer, object intValue) => throw null; + public void WriteUInt32(System.IO.TextWriter writer, object uintValue) => throw null; + public void WriteUInt64(System.IO.TextWriter writer, object ulongValue) => throw null; + } + + // Generated from `ServiceStack.Text.Json.JsonUtils` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class JsonUtils + { + public const System.Char BackspaceChar = default; + public const System.Char CarriageReturnChar = default; + public const System.Char EscapeChar = default; + public const string False = default; + public const System.Char FormFeedChar = default; + public static void IntToHex(int intValue, System.Char[] hex) => throw null; + public static bool IsJsArray(string value) => throw null; + public static bool IsJsArray(System.ReadOnlySpan value) => throw null; + public static bool IsJsObject(string value) => throw null; + public static bool IsJsObject(System.ReadOnlySpan value) => throw null; + public static bool IsWhiteSpace(System.Char c) => throw null; + public const System.Char LineFeedChar = default; + public const System.Int64 MaxInteger = default; + public const System.Int64 MinInteger = default; + public const string Null = default; + public const System.Char QuoteChar = default; + public const System.Char SpaceChar = default; + public const System.Char TabChar = default; + public const string True = default; + public static System.Char[] WhiteSpaceChars; + public static void WriteString(System.IO.TextWriter writer, string value) => throw null; + } + + // Generated from `ServiceStack.Text.Json.JsonWriter` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class JsonWriter + { + public static void InitAot() => throw null; + public static ServiceStack.Text.Common.JsWriter Instance; + } + + // Generated from `ServiceStack.Text.Json.JsonWriter<>` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class JsonWriter + { + public static ServiceStack.Text.Json.TypeInfo GetTypeInfo() => throw null; + public static void Refresh() => throw null; + public static void Reset() => throw null; + public static ServiceStack.Text.Common.WriteObjectDelegate WriteFn() => throw null; + public static void WriteObject(System.IO.TextWriter writer, object value) => throw null; + public static void WriteRootObject(System.IO.TextWriter writer, object value) => throw null; + } + + // Generated from `ServiceStack.Text.Json.TypeInfo` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class TypeInfo + { + public TypeInfo() => throw null; + } + + } + namespace Jsv + { + // Generated from `ServiceStack.Text.Jsv.JsvReader` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class JsvReader + { + public static ServiceStack.Text.Common.ParseStringDelegate GetParseFn(System.Type type) => throw null; + public static ServiceStack.Text.Common.ParseStringSpanDelegate GetParseSpanFn(System.Type type) => throw null; + public static ServiceStack.Text.Common.ParseStringSpanDelegate GetParseStringSpanFn(System.Type type) => throw null; + public static void InitAot() => throw null; + } + + // Generated from `ServiceStack.Text.Jsv.JsvTypeSerializer` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public struct JsvTypeSerializer : ServiceStack.Text.Common.ITypeSerializer + { + public bool EatItemSeperatorOrMapEndChar(string value, ref int i) => throw null; + public bool EatItemSeperatorOrMapEndChar(System.ReadOnlySpan value, ref int i) => throw null; + public string EatMapKey(string value, ref int i) => throw null; + public System.ReadOnlySpan EatMapKey(System.ReadOnlySpan value, ref int i) => throw null; + public bool EatMapKeySeperator(string value, ref int i) => throw null; + public bool EatMapKeySeperator(System.ReadOnlySpan value, ref int i) => throw null; + public bool EatMapStartChar(string value, ref int i) => throw null; + public bool EatMapStartChar(System.ReadOnlySpan value, ref int i) => throw null; + public string EatTypeValue(string value, ref int i) => throw null; + public System.ReadOnlySpan EatTypeValue(System.ReadOnlySpan value, ref int i) => throw null; + public string EatValue(string value, ref int i) => throw null; + public System.ReadOnlySpan EatValue(System.ReadOnlySpan value, ref int i) => throw null; + public void EatWhitespace(string value, ref int i) => throw null; + public void EatWhitespace(System.ReadOnlySpan value, ref int i) => throw null; + public ServiceStack.Text.Common.ParseStringDelegate GetParseFn() => throw null; + public ServiceStack.Text.Common.ParseStringDelegate GetParseFn(System.Type type) => throw null; + public ServiceStack.Text.Common.ParseStringSpanDelegate GetParseStringSpanFn() => throw null; + public ServiceStack.Text.Common.ParseStringSpanDelegate GetParseStringSpanFn(System.Type type) => throw null; + public ServiceStack.Text.Json.TypeInfo GetTypeInfo(System.Type type) => throw null; + public ServiceStack.Text.Common.WriteObjectDelegate GetWriteFn() => throw null; + public ServiceStack.Text.Common.WriteObjectDelegate GetWriteFn(System.Type type) => throw null; + public bool IncludeNullValues { get => throw null; } + public bool IncludeNullValuesInDictionaries { get => throw null; } + public static ServiceStack.Text.Common.ITypeSerializer Instance; + // Stub generator skipped constructor + public ServiceStack.Text.Common.ObjectDeserializerDelegate ObjectDeserializer { get => throw null; set => throw null; } + public string ParseRawString(string value) => throw null; + public string ParseString(string value) => throw null; + public string ParseString(System.ReadOnlySpan value) => throw null; + public string TypeAttrInObject { get => throw null; } + public string UnescapeSafeString(string value) => throw null; + public System.ReadOnlySpan UnescapeSafeString(System.ReadOnlySpan value) => throw null; + public string UnescapeString(string value) => throw null; + public System.ReadOnlySpan UnescapeString(System.ReadOnlySpan value) => throw null; + public object UnescapeStringAsObject(System.ReadOnlySpan value) => throw null; + public void WriteBool(System.IO.TextWriter writer, object boolValue) => throw null; + public void WriteBuiltIn(System.IO.TextWriter writer, object value) => throw null; + public void WriteByte(System.IO.TextWriter writer, object byteValue) => throw null; + public void WriteBytes(System.IO.TextWriter writer, object oByteValue) => throw null; + public void WriteChar(System.IO.TextWriter writer, object charValue) => throw null; + public void WriteDateTime(System.IO.TextWriter writer, object oDateTime) => throw null; + public void WriteDateTimeOffset(System.IO.TextWriter writer, object oDateTimeOffset) => throw null; + public void WriteDecimal(System.IO.TextWriter writer, object decimalValue) => throw null; + public void WriteDouble(System.IO.TextWriter writer, object doubleValue) => throw null; + public void WriteEnum(System.IO.TextWriter writer, object enumValue) => throw null; + public void WriteException(System.IO.TextWriter writer, object value) => throw null; + public void WriteFloat(System.IO.TextWriter writer, object floatValue) => throw null; + public void WriteFormattableObjectString(System.IO.TextWriter writer, object value) => throw null; + public void WriteGuid(System.IO.TextWriter writer, object oValue) => throw null; + public void WriteInt16(System.IO.TextWriter writer, object intValue) => throw null; + public void WriteInt32(System.IO.TextWriter writer, object intValue) => throw null; + public void WriteInt64(System.IO.TextWriter writer, object longValue) => throw null; + public void WriteNullableDateTime(System.IO.TextWriter writer, object dateTime) => throw null; + public void WriteNullableDateTimeOffset(System.IO.TextWriter writer, object dateTimeOffset) => throw null; + public void WriteNullableGuid(System.IO.TextWriter writer, object oValue) => throw null; + public void WriteNullableTimeSpan(System.IO.TextWriter writer, object oTimeSpan) => throw null; + public void WriteObjectString(System.IO.TextWriter writer, object value) => throw null; + public void WritePropertyName(System.IO.TextWriter writer, string value) => throw null; + public void WriteRawString(System.IO.TextWriter writer, string value) => throw null; + public void WriteSByte(System.IO.TextWriter writer, object sbyteValue) => throw null; + public void WriteString(System.IO.TextWriter writer, string value) => throw null; + public void WriteTimeSpan(System.IO.TextWriter writer, object oTimeSpan) => throw null; + public void WriteUInt16(System.IO.TextWriter writer, object intValue) => throw null; + public void WriteUInt32(System.IO.TextWriter writer, object uintValue) => throw null; + public void WriteUInt64(System.IO.TextWriter writer, object ulongValue) => throw null; + } + + // Generated from `ServiceStack.Text.Jsv.JsvWriter` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class JsvWriter + { + public static ServiceStack.Text.Common.WriteObjectDelegate GetValueTypeToStringMethod(System.Type type) => throw null; + public static ServiceStack.Text.Common.WriteObjectDelegate GetWriteFn(System.Type type) => throw null; + public static void InitAot() => throw null; + public static ServiceStack.Text.Common.JsWriter Instance; + public static void WriteLateBoundObject(System.IO.TextWriter writer, object value) => throw null; + } + + // Generated from `ServiceStack.Text.Jsv.JsvWriter<>` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class JsvWriter + { + public static void Refresh() => throw null; + public static void Reset() => throw null; + public static ServiceStack.Text.Common.WriteObjectDelegate WriteFn() => throw null; + public static void WriteObject(System.IO.TextWriter writer, object value) => throw null; + public static void WriteRootObject(System.IO.TextWriter writer, object value) => throw null; + } + + } + namespace Pools + { + // Generated from `ServiceStack.Text.Pools.BufferPool` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class BufferPool + { + public const int BUFFER_LENGTH = default; + public static void Flush() => throw null; + public static System.Byte[] GetBuffer(int minSize) => throw null; + public static System.Byte[] GetBuffer() => throw null; + public static System.Byte[] GetCachedBuffer(int minSize) => throw null; + public static void ReleaseBufferToPool(ref System.Byte[] buffer) => throw null; + public static void ResizeAndFlushLeft(ref System.Byte[] buffer, int toFitAtLeastBytes, int copyFromIndex, int copyBytes) => throw null; + } + + // Generated from `ServiceStack.Text.Pools.CharPool` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class CharPool + { + public const int BUFFER_LENGTH = default; + public static void Flush() => throw null; + public static System.Char[] GetBuffer(int minSize) => throw null; + public static System.Char[] GetBuffer() => throw null; + public static System.Char[] GetCachedBuffer(int minSize) => throw null; + public static void ReleaseBufferToPool(ref System.Char[] buffer) => throw null; + public static void ResizeAndFlushLeft(ref System.Char[] buffer, int toFitAtLeastchars, int copyFromIndex, int copychars) => throw null; + } + + // Generated from `ServiceStack.Text.Pools.ObjectPool<>` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ObjectPool where T : class + { + public T Allocate() => throw null; + // Generated from `ServiceStack.Text.Pools.ObjectPool<>+Factory` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public delegate T Factory(); + + + public void ForgetTrackedObject(T old, T replacement = default(T)) => throw null; + public void Free(T obj) => throw null; + public ObjectPool(ServiceStack.Text.Pools.ObjectPool.Factory factory, int size) => throw null; + public ObjectPool(ServiceStack.Text.Pools.ObjectPool.Factory factory) => throw null; + } + + // Generated from `ServiceStack.Text.Pools.PooledObject<>` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public struct PooledObject : System.IDisposable where T : class + { + public static ServiceStack.Text.Pools.PooledObject Create(ServiceStack.Text.Pools.ObjectPool pool) => throw null; + public static ServiceStack.Text.Pools.PooledObject> Create(ServiceStack.Text.Pools.ObjectPool> pool) => throw null; + public static ServiceStack.Text.Pools.PooledObject> Create(ServiceStack.Text.Pools.ObjectPool> pool) => throw null; + public static ServiceStack.Text.Pools.PooledObject> Create(ServiceStack.Text.Pools.ObjectPool> pool) => throw null; + public static ServiceStack.Text.Pools.PooledObject> Create(ServiceStack.Text.Pools.ObjectPool> pool) => throw null; + public static ServiceStack.Text.Pools.PooledObject> Create(ServiceStack.Text.Pools.ObjectPool> pool) => throw null; + public void Dispose() => throw null; + public T Object { get => throw null; } + public PooledObject(ServiceStack.Text.Pools.ObjectPool pool, System.Func, T> allocator, System.Action, T> releaser) => throw null; + // Stub generator skipped constructor + } + + // Generated from `ServiceStack.Text.Pools.SharedPools` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class SharedPools + { + public static ServiceStack.Text.Pools.ObjectPool AsyncByteArray; + public static ServiceStack.Text.Pools.ObjectPool BigDefault() where T : class, new() => throw null; + public static ServiceStack.Text.Pools.ObjectPool ByteArray; + public const int ByteBufferSize = default; + public static ServiceStack.Text.Pools.ObjectPool Default() where T : class, new() => throw null; + public static ServiceStack.Text.Pools.ObjectPool> StringHashSet; + public static ServiceStack.Text.Pools.ObjectPool> StringIgnoreCaseDictionary() => throw null; + public static ServiceStack.Text.Pools.ObjectPool> StringIgnoreCaseHashSet; + } + + // Generated from `ServiceStack.Text.Pools.StringBuilderPool` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class StringBuilderPool + { + public static System.Text.StringBuilder Allocate() => throw null; + public static void Free(System.Text.StringBuilder builder) => throw null; + public static string ReturnAndFree(System.Text.StringBuilder builder) => throw null; + } + + } + namespace Support + { + // Generated from `ServiceStack.Text.Support.DoubleConverter` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class DoubleConverter + { + public DoubleConverter() => throw null; + public static string ToExactString(double d) => throw null; + } + + // Generated from `ServiceStack.Text.Support.TimeSpanConverter` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class TimeSpanConverter + { + public static System.TimeSpan FromXsdDuration(string xsdDuration) => throw null; + public TimeSpanConverter() => throw null; + public static string ToXsdDuration(System.TimeSpan timeSpan) => throw null; + } + + // Generated from `ServiceStack.Text.Support.TypePair` in `ServiceStack.Text, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class TypePair + { + public System.Type[] Arg2 { get => throw null; set => throw null; } + public System.Type[] Args1 { get => throw null; set => throw null; } + public override bool Equals(object obj) => throw null; + public bool Equals(ServiceStack.Text.Support.TypePair other) => throw null; + public override int GetHashCode() => throw null; + public TypePair(System.Type[] arg1, System.Type[] arg2) => throw null; + } + + } + } +} diff --git a/csharp/ql/test/resources/stubs/ServiceStack.Text/5.11.0/ServiceStack.Text.csproj b/csharp/ql/test/resources/stubs/ServiceStack.Text/5.11.0/ServiceStack.Text.csproj new file mode 100644 index 00000000000..36eddf7809c --- /dev/null +++ b/csharp/ql/test/resources/stubs/ServiceStack.Text/5.11.0/ServiceStack.Text.csproj @@ -0,0 +1,12 @@ + + + net5.0 + true + bin\ + false + + + + + + diff --git a/csharp/ql/test/resources/stubs/ServiceStack/5.11.0/ServiceStack.cs b/csharp/ql/test/resources/stubs/ServiceStack/5.11.0/ServiceStack.cs new file mode 100644 index 00000000000..55683691d0a --- /dev/null +++ b/csharp/ql/test/resources/stubs/ServiceStack/5.11.0/ServiceStack.cs @@ -0,0 +1,11544 @@ +// This file contains auto-generated code. + +namespace Funq +{ + // Generated from `Funq.Container` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class Container : System.IServiceProvider, System.IDisposable, ServiceStack.IContainer, ServiceStack.Configuration.IResolver + { + public ServiceStack.Configuration.IContainerAdapter Adapter { get => throw null; set => throw null; } + public ServiceStack.IContainer AddSingleton(System.Type type, System.Func factory) => throw null; + public ServiceStack.IContainer AddTransient(System.Type type, System.Func factory) => throw null; + public void AutoWire(object instance) => throw null; + public void AutoWire(Funq.Container container, object instance) => throw null; + public bool CheckAdapterFirst { get => throw null; set => throw null; } + public static System.Linq.Expressions.NewExpression ConstructorExpression(System.Reflection.MethodInfo resolveMethodInfo, System.Type type, System.Linq.Expressions.Expression lambdaParam) => throw null; + public Container() => throw null; + public Funq.Container CreateChildContainer() => throw null; + public System.Func CreateFactory(System.Type type) => throw null; + public Funq.Owner DefaultOwner { get => throw null; set => throw null; } + public Funq.ReuseScope DefaultReuse { get => throw null; set => throw null; } + public virtual void Dispose() => throw null; + public bool Exists() => throw null; + public bool Exists(System.Type type) => throw null; + public bool ExistsNamed(string name) => throw null; + public static System.Func GenerateAutoWireFn() => throw null; + public static System.Reflection.ConstructorInfo GetConstructorWithMostParams(System.Type type) => throw null; + protected virtual Funq.ServiceEntry GetEntry(string serviceName, bool throwIfMissing) => throw null; + public object GetLazyResolver(params System.Type[] types) => throw null; + public object GetService(System.Type serviceType) => throw null; + public Funq.ServiceEntry> GetServiceEntry() => throw null; + public Funq.ServiceEntry> GetServiceEntryNamed(string name) => throw null; + public static System.Collections.Generic.HashSet IgnorePropertyTypeFullNames; + protected virtual Funq.Container InstantiateChildContainer() => throw null; + public System.Func LazyResolve(string name) => throw null; + public System.Func LazyResolve() => throw null; + public System.Func LazyResolve(string name) => throw null; + public System.Func LazyResolve() => throw null; + public System.Func LazyResolve(string name) => throw null; + public System.Func LazyResolve() => throw null; + public System.Func LazyResolve(string name) => throw null; + public System.Func LazyResolve() => throw null; + public System.Func LazyResolve(string name) => throw null; + public System.Func LazyResolve() => throw null; + public Funq.Func LazyResolve(string name) => throw null; + public Funq.Func LazyResolve() => throw null; + public Funq.Func LazyResolve(string name) => throw null; + public Funq.Func LazyResolve() => throw null; + public void Register(string name, TService instance) => throw null; + public void Register(TService instance) => throw null; + public Funq.IRegistration Register(string name, System.Func factory) => throw null; + public Funq.IRegistration Register(System.Func factory) => throw null; + public Funq.IRegistration Register(string name, System.Func factory) => throw null; + public Funq.IRegistration Register(System.Func factory) => throw null; + public Funq.IRegistration Register(string name, System.Func factory) => throw null; + public Funq.IRegistration Register(System.Func factory) => throw null; + public Funq.IRegistration Register(string name, System.Func factory) => throw null; + public Funq.IRegistration Register(System.Func factory) => throw null; + public Funq.IRegistration Register(string name, Funq.Func factory) => throw null; + public Funq.IRegistration Register(Funq.Func factory) => throw null; + public Funq.IRegistration Register(string name, Funq.Func factory) => throw null; + public Funq.IRegistration Register(Funq.Func factory) => throw null; + public Funq.IRegistration Register(string name, Funq.Func factory) => throw null; + public Funq.IRegistration Register(Funq.Func factory) => throw null; + public Funq.IRegistration RegisterAs(string name) where T : TAs => throw null; + public Funq.IRegistration RegisterAs() where T : TAs => throw null; + public Funq.IRegistration RegisterAutoWired(string name) => throw null; + public Funq.IRegistration RegisterAutoWired() => throw null; + public Funq.IRegistration RegisterAutoWiredAs(string name) where T : TAs => throw null; + public Funq.IRegistration RegisterAutoWiredAs() where T : TAs => throw null; + public Funq.IRegistration RegisterFactory(System.Func factory) => throw null; + public object RequiredResolve(System.Type type, System.Type ownerType) => throw null; + public object Resolve(System.Type type) => throw null; + public TService Resolve() => throw null; + public TService Resolve(TArg arg) => throw null; + public TService Resolve(TArg1 arg1, TArg2 arg2) => throw null; + public TService Resolve(TArg1 arg1, TArg2 arg2, TArg3 arg3) => throw null; + public TService Resolve(TArg1 arg1, TArg2 arg2, TArg3 arg3, TArg4 arg4) => throw null; + public TService Resolve(TArg1 arg1, TArg2 arg2, TArg3 arg3, TArg4 arg4, TArg5 arg5) => throw null; + public TService Resolve(TArg1 arg1, TArg2 arg2, TArg3 arg3, TArg4 arg4, TArg5 arg5, TArg6 arg6) => throw null; + public TService ResolveNamed(string name) => throw null; + public TService ResolveNamed(string name, TArg arg) => throw null; + public TService ResolveNamed(string name, TArg1 arg1, TArg2 arg2) => throw null; + public TService ResolveNamed(string name, TArg1 arg1, TArg2 arg2, TArg3 arg3) => throw null; + public TService ResolveNamed(string name, TArg1 arg1, TArg2 arg2, TArg3 arg3, TArg4 arg4) => throw null; + public TService ResolveNamed(string name, TArg1 arg1, TArg2 arg2, TArg3 arg3, TArg4 arg4, TArg5 arg5) => throw null; + public TService ResolveNamed(string name, TArg1 arg1, TArg2 arg2, TArg3 arg3, TArg4 arg4, TArg5 arg5, TArg6 arg6) => throw null; + public System.Func ReverseLazyResolve() => throw null; + public System.Func ReverseLazyResolve() => throw null; + public System.Func ReverseLazyResolve() => throw null; + public System.Func ReverseLazyResolve() => throw null; + public object TryResolve(System.Type type) => throw null; + public TService TryResolve() => throw null; + public TService TryResolve(TArg arg) => throw null; + public TService TryResolve(TArg1 arg1, TArg2 arg2) => throw null; + public TService TryResolve(TArg1 arg1, TArg2 arg2, TArg3 arg3) => throw null; + public TService TryResolve(TArg1 arg1, TArg2 arg2, TArg3 arg3, TArg4 arg4) => throw null; + public TService TryResolve(TArg1 arg1, TArg2 arg2, TArg3 arg3, TArg4 arg4, TArg5 arg5) => throw null; + public TService TryResolve(TArg1 arg1, TArg2 arg2, TArg3 arg3, TArg4 arg4, TArg5 arg5, TArg6 arg6) => throw null; + public TService TryResolveNamed(string name) => throw null; + public TService TryResolveNamed(string name, TArg arg) => throw null; + public TService TryResolveNamed(string name, TArg1 arg1, TArg2 arg2) => throw null; + public TService TryResolveNamed(string name, TArg1 arg1, TArg2 arg2, TArg3 arg3) => throw null; + public TService TryResolveNamed(string name, TArg1 arg1, TArg2 arg2, TArg3 arg3, TArg4 arg4) => throw null; + public TService TryResolveNamed(string name, TArg1 arg1, TArg2 arg2, TArg3 arg3, TArg4 arg4, TArg5 arg5) => throw null; + public TService TryResolveNamed(string name, TArg1 arg1, TArg2 arg2, TArg3 arg3, TArg4 arg4, TArg5 arg5, TArg6 arg6) => throw null; + public int disposablesCount { get => throw null; } + } + + // Generated from `Funq.Func<,,,,,,,>` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public delegate TResult Func(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7); + + // Generated from `Funq.Func<,,,,,,>` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public delegate TResult Func(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6); + + // Generated from `Funq.Func<,,,,,>` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public delegate TResult Func(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5); + + // Generated from `Funq.IContainerModule` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IContainerModule : Funq.IFunqlet + { + } + + // Generated from `Funq.IFluentInterface` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IFluentInterface + { + bool Equals(object obj); + int GetHashCode(); + System.Type GetType(); + string ToString(); + } + + // Generated from `Funq.IFunqlet` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IFunqlet + { + void Configure(Funq.Container container); + } + + // Generated from `Funq.IHasContainer` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IHasContainer + { + Funq.Container Container { get; } + } + + // Generated from `Funq.IInitializable<>` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IInitializable : Funq.IFluentInterface + { + Funq.IReusedOwned InitializedBy(System.Action initializer); + } + + // Generated from `Funq.IOwned` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IOwned : Funq.IFluentInterface + { + void OwnedBy(Funq.Owner owner); + } + + // Generated from `Funq.IRegistration` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IRegistration : Funq.IReusedOwned, Funq.IReused, Funq.IOwned, Funq.IFluentInterface + { + } + + // Generated from `Funq.IRegistration<>` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IRegistration : Funq.IReusedOwned, Funq.IReused, Funq.IRegistration, Funq.IOwned, Funq.IInitializable, Funq.IFluentInterface + { + } + + // Generated from `Funq.IReused` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IReused : Funq.IFluentInterface + { + Funq.IOwned ReusedWithin(Funq.ReuseScope scope); + } + + // Generated from `Funq.IReusedOwned` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IReusedOwned : Funq.IReused, Funq.IOwned, Funq.IFluentInterface + { + } + + // Generated from `Funq.Owner` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public enum Owner + { + Container, + Default, + External, + } + + // Generated from `Funq.ResolutionException` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ResolutionException : System.Exception + { + public ResolutionException(string message) => throw null; + public ResolutionException(System.Type missingServiceType, string missingServiceName) => throw null; + public ResolutionException(System.Type missingServiceType) => throw null; + } + + // Generated from `Funq.ReuseScope` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public enum ReuseScope + { + Container, + Default, + Hierarchy, + None, + Request, + } + + // Generated from `Funq.ServiceEntry` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ServiceEntry : Funq.IReusedOwned, Funq.IReused, Funq.IRegistration, Funq.IOwned, Funq.IFluentInterface + { + public Funq.Container Container; + public virtual object GetInstance() => throw null; + System.Type Funq.IFluentInterface.GetType() => throw null; + public void OwnedBy(Funq.Owner owner) => throw null; + public Funq.Owner Owner; + public Funq.ReuseScope Reuse; + public Funq.IOwned ReusedWithin(Funq.ReuseScope scope) => throw null; + protected ServiceEntry() => throw null; + } + + // Generated from `Funq.ServiceEntry<,>` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ServiceEntry : Funq.ServiceEntry, Funq.IReusedOwned, Funq.IReused, Funq.IRegistration, Funq.IRegistration, Funq.IOwned, Funq.IInitializable, Funq.IFluentInterface + { + public System.IDisposable AquireLockIfNeeded() => throw null; + public Funq.ServiceEntry CloneFor(Funq.Container newContainer) => throw null; + public TFunc Factory; + public override object GetInstance() => throw null; + System.Type Funq.IFluentInterface.GetType() => throw null; + public Funq.IReusedOwned InitializedBy(System.Action initializer) => throw null; + public ServiceEntry(TFunc factory) => throw null; + } + +} +namespace MarkdownDeep +{ + // Generated from `MarkdownDeep.BlockProcessor` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class BlockProcessor : MarkdownDeep.StringScanner + { + public BlockProcessor(MarkdownDeep.Markdown m, bool MarkdownInHtml) => throw null; + } + + // Generated from `MarkdownDeep.HtmlTag` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class HtmlTag + { + public MarkdownDeep.HtmlTagFlags Flags { get => throw null; } + public HtmlTag(string name) => throw null; + public bool IsSafe() => throw null; + public static MarkdownDeep.HtmlTag Parse(string str, ref int pos) => throw null; + public static MarkdownDeep.HtmlTag Parse(MarkdownDeep.StringScanner p) => throw null; + public void RenderClosing(System.Text.StringBuilder dest) => throw null; + public void RenderOpening(System.Text.StringBuilder dest) => throw null; + public System.Collections.Generic.Dictionary attributes { get => throw null; } + public bool closed { get => throw null; set => throw null; } + public bool closing { get => throw null; } + public string name { get => throw null; } + } + + // Generated from `MarkdownDeep.HtmlTagFlags` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + [System.Flags] + public enum HtmlTagFlags + { + Block, + ContentAsSpan, + Inline, + NoClosing, + } + + // Generated from `MarkdownDeep.ImageInfo` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ImageInfo + { + public ImageInfo() => throw null; + public int height; + public bool titled_image; + public string url; + public int width; + } + + // Generated from `MarkdownDeep.LinkDefinition` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class LinkDefinition + { + public LinkDefinition(string id, string url, string title) => throw null; + public LinkDefinition(string id, string url) => throw null; + public LinkDefinition(string id) => throw null; + public string id { get => throw null; set => throw null; } + public string title { get => throw null; set => throw null; } + public string url { get => throw null; set => throw null; } + } + + // Generated from `MarkdownDeep.Markdown` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class Markdown + { + public bool AutoHeadingIDs { get => throw null; set => throw null; } + public string DocumentLocation { get => throw null; set => throw null; } + public string DocumentRoot { get => throw null; set => throw null; } + public bool ExtraMode { get => throw null; set => throw null; } + public bool ExtractHeadBlocks { get => throw null; set => throw null; } + public System.Func FormatCodeBlock; + public System.Func GetImageSize; + public MarkdownDeep.LinkDefinition GetLinkDefinition(string id) => throw null; + public string HeadBlockContent { get => throw null; set => throw null; } + public string HtmlClassFootnotes { get => throw null; set => throw null; } + public string HtmlClassTitledImages { get => throw null; set => throw null; } + public static string JoinSections(System.Collections.Generic.List sections) => throw null; + public static string JoinUserSections(System.Collections.Generic.List sections) => throw null; + public Markdown() => throw null; + public bool MarkdownInHtml { get => throw null; set => throw null; } + public int MaxImageWidth { get => throw null; set => throw null; } + public bool NewWindowForExternalLinks { get => throw null; set => throw null; } + public bool NewWindowForLocalLinks { get => throw null; set => throw null; } + public bool NoFollowLinks { get => throw null; set => throw null; } + public virtual bool OnGetImageSize(string url, bool TitledImage, out int width, out int height) => throw null; + public virtual void OnPrepareImage(MarkdownDeep.HtmlTag tag, bool TitledImage) => throw null; + public virtual void OnPrepareLink(MarkdownDeep.HtmlTag tag) => throw null; + public virtual string OnQualifyUrl(string url) => throw null; + public virtual void OnSectionFooter(System.Text.StringBuilder dest, int Index) => throw null; + public virtual void OnSectionHeader(System.Text.StringBuilder dest, int Index) => throw null; + public virtual void OnSectionHeadingSuffix(System.Text.StringBuilder dest, int Index) => throw null; + public System.Func PrepareImage; + public System.Func PrepareLink; + public System.Func QualifyUrl; + public bool SafeMode { get => throw null; set => throw null; } + public string SectionFooter { get => throw null; set => throw null; } + public string SectionHeader { get => throw null; set => throw null; } + public string SectionHeadingSuffix { get => throw null; set => throw null; } + public static System.Collections.Generic.List SplitSections(string markdown) => throw null; + public static System.Collections.Generic.List SplitUserSections(string markdown) => throw null; + public int SummaryLength { get => throw null; set => throw null; } + public string Transform(string str, out System.Collections.Generic.Dictionary definitions) => throw null; + public string Transform(string str) => throw null; + public string UrlBaseLocation { get => throw null; set => throw null; } + public string UrlRootLocation { get => throw null; set => throw null; } + public bool UserBreaks { get => throw null; set => throw null; } + } + + // Generated from `MarkdownDeep.MarkdownDeepTransformer` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class MarkdownDeepTransformer : ServiceStack.IMarkdownTransformer + { + public MarkdownDeepTransformer() => throw null; + public string Transform(string markdown) => throw null; + } + + // Generated from `MarkdownDeep.StringScanner` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class StringScanner + { + public System.Char CharAtOffset(int offset) => throw null; + public bool DoesMatch(string str) => throw null; + public bool DoesMatch(int offset, System.Char ch) => throw null; + public bool DoesMatch(System.Char ch) => throw null; + public bool DoesMatchAny(int offset, System.Char[] chars) => throw null; + public bool DoesMatchAny(System.Char[] chars) => throw null; + public bool DoesMatchI(string str) => throw null; + public string Extract() => throw null; + public bool Find(string find) => throw null; + public bool Find(System.Char ch) => throw null; + public bool FindAny(System.Char[] chars) => throw null; + public bool FindI(string find) => throw null; + public static bool IsLineEnd(System.Char ch) => throw null; + public static bool IsLineSpace(System.Char ch) => throw null; + public void Mark() => throw null; + public void Reset(string str, int pos, int len) => throw null; + public void Reset(string str, int pos) => throw null; + public void Reset(string str) => throw null; + public bool SkipChar(System.Char ch) => throw null; + public bool SkipEol() => throw null; + public bool SkipFootnoteID(out string id) => throw null; + public void SkipForward(int characters) => throw null; + public bool SkipHtmlEntity(ref string entity) => throw null; + public bool SkipIdentifier(ref string identifier) => throw null; + public bool SkipLinespace() => throw null; + public bool SkipString(string str) => throw null; + public bool SkipStringI(string str) => throw null; + public void SkipToEof() => throw null; + public void SkipToEol() => throw null; + public void SkipToNextLine() => throw null; + public bool SkipWhitespace() => throw null; + public StringScanner(string str, int pos, int len) => throw null; + public StringScanner(string str, int pos) => throw null; + public StringScanner(string str) => throw null; + public StringScanner() => throw null; + public string Substring(int start, int len) => throw null; + public string Substring(int start) => throw null; + public bool bof { get => throw null; } + public System.Char current { get => throw null; } + public bool eof { get => throw null; } + public bool eol { get => throw null; } + public string input { get => throw null; } + public int position { get => throw null; set => throw null; } + public string remainder { get => throw null; } + } + +} +namespace ServiceStack +{ + // Generated from `ServiceStack.AddHeaderAttribute` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class AddHeaderAttribute : ServiceStack.RequestFilterAttribute + { + public AddHeaderAttribute(string name, string value) => throw null; + public AddHeaderAttribute(System.Net.HttpStatusCode status, string statusDescription = default(string)) => throw null; + public AddHeaderAttribute() => throw null; + public string CacheControl { get => throw null; set => throw null; } + public string ContentDisposition { get => throw null; set => throw null; } + public string ContentEncoding { get => throw null; set => throw null; } + public string ContentLength { get => throw null; set => throw null; } + public string ContentType { get => throw null; set => throw null; } + public string DefaultContentType { get => throw null; set => throw null; } + public string ETag { get => throw null; set => throw null; } + public override void Execute(ServiceStack.Web.IRequest req, ServiceStack.Web.IResponse res, object requestDto) => throw null; + public string LastModified { get => throw null; set => throw null; } + public string Location { get => throw null; set => throw null; } + public string Name { get => throw null; set => throw null; } + public string SetCookie { get => throw null; set => throw null; } + public System.Net.HttpStatusCode Status { get => throw null; set => throw null; } + public int? StatusCode { get => throw null; set => throw null; } + public string StatusDescription { get => throw null; set => throw null; } + public string Value { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.AlwaysFalseCondition` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class AlwaysFalseCondition : ServiceStack.QueryCondition + { + public override string Alias { get => throw null; } + public AlwaysFalseCondition() => throw null; + public static ServiceStack.AlwaysFalseCondition Instance; + public override bool Match(object a, object b) => throw null; + } + + // Generated from `ServiceStack.ApiKeyAuthProviderExtensions` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class ApiKeyAuthProviderExtensions + { + public static ServiceStack.Auth.ApiKey GetApiKey(this ServiceStack.Web.IRequest req) => throw null; + } + + // Generated from `ServiceStack.ApiPages` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ApiPages + { + public ApiPages() => throw null; + public string PageName { get => throw null; set => throw null; } + public string PathInfo { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.AppHostBase` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public abstract class AppHostBase : ServiceStack.ServiceStackHost, ServiceStack.IRequireConfiguration, ServiceStack.IConfigureServices, ServiceStack.IAppHostNetCore, ServiceStack.IAppHost, ServiceStack.Configuration.IResolver + { + public Microsoft.AspNetCore.Builder.IApplicationBuilder App { get => throw null; } + protected AppHostBase(string serviceName, params System.Reflection.Assembly[] assembliesWithServices) : base(default(string), default(System.Reflection.Assembly[])) => throw null; + public System.IServiceProvider ApplicationServices { get => throw null; } + public System.Func BeforeNextMiddleware { get => throw null; set => throw null; } + public virtual void Bind(Microsoft.AspNetCore.Builder.IApplicationBuilder app) => throw null; + public static void BindHost(ServiceStack.ServiceStackHost appHost, Microsoft.AspNetCore.Builder.IApplicationBuilder app) => throw null; + public Microsoft.Extensions.Configuration.IConfiguration Configuration { get => throw null; set => throw null; } + public virtual void Configure(Microsoft.Extensions.DependencyInjection.IServiceCollection services) => throw null; + protected override void Dispose(bool disposing) => throw null; + public static ServiceStack.Web.IRequest GetOrCreateRequest(Microsoft.AspNetCore.Http.IHttpContextAccessor httpContextAccessor) => throw null; + public static ServiceStack.Web.IRequest GetOrCreateRequest(Microsoft.AspNetCore.Http.HttpContext httpContext) => throw null; + public override string GetWebRootPath() => throw null; + public Microsoft.AspNetCore.Hosting.IHostingEnvironment HostingEnvironment { get => throw null; } + public bool InjectRequestContext { get => throw null; set => throw null; } + public override string MapProjectPath(string relativePath) => throw null; + public System.Func> NetCoreHandler { get => throw null; set => throw null; } + public override void OnConfigLoad() => throw null; + public override string PathBase { get => throw null; set => throw null; } + public virtual System.Threading.Tasks.Task ProcessRequest(Microsoft.AspNetCore.Http.HttpContext context, System.Func next) => throw null; + public static void RegisterLicenseFromAppSettings(ServiceStack.Configuration.IAppSettings appSettings) => throw null; + public override ServiceStack.Web.IRequest TryGetCurrentRequest() => throw null; + } + + // Generated from `ServiceStack.AppHostExtensions` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class AppHostExtensions + { + public static System.Collections.Generic.List AddIfNotExists(this System.Collections.Generic.List plugins, T plugin, System.Action configure) where T : class, ServiceStack.IPlugin => throw null; + public static System.Collections.Generic.List AddIfNotExists(this System.Collections.Generic.List plugins, T plugin) where T : class, ServiceStack.IPlugin => throw null; + public static void AddPluginsFromAssembly(this ServiceStack.IAppHost appHost, params System.Reflection.Assembly[] assembliesWithPlugins) => throw null; + public static T AssertPlugin(this ServiceStack.IAppHost appHost) where T : class, ServiceStack.IPlugin => throw null; + public static Funq.Container GetContainer(this ServiceStack.IAppHost appHost) => throw null; + public static T GetPlugin(this ServiceStack.IAppHost appHost) where T : class, ServiceStack.IPlugin => throw null; + public static bool HasMultiplePlugins(this ServiceStack.IAppHost appHost) where T : class, ServiceStack.IPlugin => throw null; + public static bool HasPlugin(this ServiceStack.IAppHost appHost) where T : class, ServiceStack.IPlugin => throw null; + public static string Localize(this string text, ServiceStack.Web.IRequest request = default(ServiceStack.Web.IRequest)) => throw null; + public static string LocalizeFmt(this string text, params object[] args) => throw null; + public static string LocalizeFmt(this string text, ServiceStack.Web.IRequest request, params object[] args) => throw null; + public static bool NotifyStartupException(this ServiceStack.IAppHost appHost, System.Exception ex) => throw null; + public static void RegisterRequestBinder(this ServiceStack.IAppHost appHost, System.Func binder) => throw null; + public static void RegisterService(this ServiceStack.IAppHost appHost, params string[] atRestPaths) => throw null; + public static void RegisterServices(this ServiceStack.IAppHost appHost, System.Collections.Generic.Dictionary serviceRoutes) => throw null; + public static System.Collections.Generic.Dictionary RemoveService(this System.Collections.Generic.Dictionary serviceRoutes) => throw null; + public static string ResolveStaticBaseUrl(this ServiceStack.IAppHost appHost) => throw null; + public static ServiceStack.IAppHost Start(this ServiceStack.IAppHost appHost, System.Collections.Generic.IEnumerable urlBases) => throw null; + } + + // Generated from `ServiceStack.AppUtils` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class AppUtils + { + public static T DbContextExec(this System.IServiceProvider services, System.Func dbResolver, System.Func fn) => throw null; + public static T GetIdentityUserById(this System.Data.IDbConnection db, string userId, string sqlGetUser) => throw null; + public static T GetIdentityUserById(this System.Data.IDbConnection db, string userId) => throw null; + public static System.Collections.Generic.Dictionary GetIdentityUserById(this System.Data.IDbConnection db, string userId, string sqlGetUser) => throw null; + public static System.Collections.Generic.Dictionary GetIdentityUserById(this System.Data.IDbConnection db, string userId) => throw null; + public static System.Collections.Generic.List GetIdentityUserRolesById(this System.Data.IDbConnection db, string userId, string sqlGetUserRoles) => throw null; + public static System.Collections.Generic.List GetIdentityUserRolesById(this System.Data.IDbConnection db, string userId) => throw null; + public static T NewScope(this System.IServiceProvider services, System.Func fn) => throw null; + public static System.Collections.Generic.Dictionary ToObjectDictionary(this System.Data.IDataReader reader, System.Func mapper = default(System.Func)) => throw null; + } + + // Generated from `ServiceStack.ApplyToUtils` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class ApplyToUtils + { + public static System.Collections.Generic.Dictionary ApplyToVerbs; + public static ServiceStack.ApplyTo HttpMethodAsApplyTo(this ServiceStack.Web.IRequest req) => throw null; + public static System.Collections.Generic.Dictionary VerbsApplyTo; + } + + // Generated from `ServiceStack.AsyncContext` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class AsyncContext + { + public AsyncContext() => throw null; + public virtual System.Threading.Tasks.Task ContinueWith(System.Threading.Tasks.Task task, System.Action fn, System.Threading.Tasks.TaskContinuationOptions continuationOptions) => throw null; + public virtual System.Threading.Tasks.Task ContinueWith(System.Threading.Tasks.Task task, System.Action fn) => throw null; + } + + // Generated from `ServiceStack.AuthFeature` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class AuthFeature : ServiceStack.Model.IHasStringId, ServiceStack.Model.IHasId, ServiceStack.IPostInitPlugin, ServiceStack.IPlugin + { + public ServiceStack.AuthFeature AddAuthenticateAliasRoutes() => throw null; + public void AfterPluginsLoaded(ServiceStack.IAppHost appHost) => throw null; + public static void AllowAllRedirects(ServiceStack.Web.IRequest req, string redirect) => throw null; + public System.Func AllowGetAuthenticateRequests { get => throw null; set => throw null; } + public System.Collections.Generic.List AuthEvents { get => throw null; set => throw null; } + public AuthFeature(System.Func sessionFactory, ServiceStack.Auth.IAuthProvider[] authProviders, string htmlRedirect = default(string)) => throw null; + public ServiceStack.Auth.IAuthProvider[] AuthProviders { get => throw null; } + public System.Func AuthResponseDecorator { get => throw null; set => throw null; } + public ServiceStack.Auth.IAuthSession AuthSecretSession { get => throw null; set => throw null; } + public bool CreateDigestAuthHashes { get => throw null; set => throw null; } + public static bool DefaultAllowGetAuthenticateRequests(ServiceStack.Web.IRequest req) => throw null; + public bool DeleteSessionCookiesOnLogout { get => throw null; set => throw null; } + public bool GenerateNewSessionCookiesOnAuthentication { get => throw null; set => throw null; } + public string HtmlLogoutRedirect { get => throw null; set => throw null; } + public string HtmlRedirect { get => throw null; set => throw null; } + public string HtmlRedirectAccessDenied { get => throw null; set => throw null; } + public string HtmlRedirectReturnParam { get => throw null; set => throw null; } + public bool HtmlRedirectReturnPathOnly { get => throw null; set => throw null; } + public string Id { get => throw null; set => throw null; } + public bool IncludeAssignRoleServices { set => throw null; } + public bool IncludeAuthMetadataProvider { get => throw null; set => throw null; } + public bool IncludeDefaultLogin { get => throw null; set => throw null; } + public bool IncludeOAuthTokensInAuthenticateResponse { get => throw null; set => throw null; } + public bool IncludeRegistrationService { set => throw null; } + public bool IncludeRolesInAuthenticateResponse { get => throw null; set => throw null; } + public System.Func IsValidUsernameFn { get => throw null; set => throw null; } + public int? MaxLoginAttempts { get => throw null; set => throw null; } + public static void NoExternalRedirects(ServiceStack.Web.IRequest req, string redirect) => throw null; + public System.Func OnAuthenticateValidate { get => throw null; set => throw null; } + public System.TimeSpan? PermanentSessionExpiry { get => throw null; set => throw null; } + public void Register(ServiceStack.IAppHost appHost) => throw null; + public void RegisterAuthProvider(ServiceStack.Auth.IAuthProvider authProvider) => throw null; + public System.Collections.Generic.List RegisterPlugins { get => throw null; set => throw null; } + public ServiceStack.AuthFeature RemoveAuthenticateAliasRoutes() => throw null; + public bool SaveUserNamesInLowerCase { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary ServiceRoutes { get => throw null; set => throw null; } + public System.TimeSpan? SessionExpiry { get => throw null; set => throw null; } + public System.Text.RegularExpressions.Regex ValidUserNameRegEx; + public ServiceStack.Auth.ValidateFn ValidateFn { get => throw null; set => throw null; } + public System.Action ValidateRedirectLinks { get => throw null; set => throw null; } + public bool ValidateUniqueEmails { get => throw null; set => throw null; } + public bool ValidateUniqueUserNames { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.AuthFeatureExtensions` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class AuthFeatureExtensions + { + public static string GetHtmlRedirect(this ServiceStack.AuthFeature feature) => throw null; + public static bool IsValidUsername(this ServiceStack.AuthFeature feature, string userName) => throw null; + public static ServiceStack.Web.IHttpResult SuccessAuthResult(this ServiceStack.Web.IHttpResult result, ServiceStack.IServiceBase service, ServiceStack.Auth.IAuthSession session) => throw null; + public static System.Threading.Tasks.Task SuccessAuthResultAsync(this ServiceStack.Web.IHttpResult result, ServiceStack.IServiceBase service, ServiceStack.Auth.IAuthSession session) => throw null; + public static System.Text.RegularExpressions.Regex ValidUserNameRegEx; + } + + // Generated from `ServiceStack.AuthSessionExtensions` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class AuthSessionExtensions + { + public static void AddAuthToken(this ServiceStack.Auth.IAuthSession session, ServiceStack.Auth.IAuthTokens tokens) => throw null; + public static System.Collections.Generic.List GetAuthTokens(this ServiceStack.Auth.IAuthSession session) => throw null; + public static ServiceStack.Auth.IAuthTokens GetAuthTokens(this ServiceStack.Auth.IAuthSession session, string provider) => throw null; + public static string GetProfileUrl(this ServiceStack.Auth.IAuthSession authSession, string defaultUrl = default(string)) => throw null; + public static string GetSafeDisplayName(this ServiceStack.Auth.IAuthSession authSession) => throw null; + } + + // Generated from `ServiceStack.AuthUserSession` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class AuthUserSession : ServiceStack.IMeta, ServiceStack.Auth.IAuthSessionExtended, ServiceStack.Auth.IAuthSession + { + public string Address { get => throw null; set => throw null; } + public string Address2 { get => throw null; set => throw null; } + public System.Collections.Generic.List Audiences { get => throw null; set => throw null; } + public string AuthProvider { get => throw null; set => throw null; } + public AuthUserSession() => throw null; + public System.DateTime? BirthDate { get => throw null; set => throw null; } + public string BirthDateRaw { get => throw null; set => throw null; } + public string City { get => throw null; set => throw null; } + public string Company { get => throw null; set => throw null; } + public string Country { get => throw null; set => throw null; } + public System.DateTime CreatedAt { get => throw null; set => throw null; } + public string Culture { get => throw null; set => throw null; } + public string DisplayName { get => throw null; set => throw null; } + public string Dns { get => throw null; set => throw null; } + public string Email { get => throw null; set => throw null; } + public bool? EmailConfirmed { get => throw null; set => throw null; } + public string FacebookUserId { get => throw null; set => throw null; } + public string FacebookUserName { get => throw null; set => throw null; } + public string FirstName { get => throw null; set => throw null; } + public bool FromToken { get => throw null; set => throw null; } + public string FullName { get => throw null; set => throw null; } + public string Gender { get => throw null; set => throw null; } + public virtual bool HasPermission(string permission, ServiceStack.Auth.IAuthRepository authRepo) => throw null; + public virtual System.Threading.Tasks.Task HasPermissionAsync(string permission, ServiceStack.Auth.IAuthRepositoryAsync authRepo, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public virtual bool HasRole(string role, ServiceStack.Auth.IAuthRepository authRepo) => throw null; + public virtual System.Threading.Tasks.Task HasRoleAsync(string role, ServiceStack.Auth.IAuthRepositoryAsync authRepo, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public string Hash { get => throw null; set => throw null; } + public string HomePhone { get => throw null; set => throw null; } + public string Id { get => throw null; set => throw null; } + public bool IsAuthenticated { get => throw null; set => throw null; } + public virtual bool IsAuthorized(string provider) => throw null; + public string Language { get => throw null; set => throw null; } + public System.DateTime LastModified { get => throw null; set => throw null; } + public string LastName { get => throw null; set => throw null; } + public string MailAddress { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary Meta { get => throw null; set => throw null; } + public string MobilePhone { get => throw null; set => throw null; } + public string Nickname { get => throw null; set => throw null; } + public virtual void OnAuthenticated(ServiceStack.IServiceBase authService, ServiceStack.Auth.IAuthSession session, ServiceStack.Auth.IAuthTokens tokens, System.Collections.Generic.Dictionary authInfo) => throw null; + public virtual System.Threading.Tasks.Task OnAuthenticatedAsync(ServiceStack.IServiceBase authService, ServiceStack.Auth.IAuthSession session, ServiceStack.Auth.IAuthTokens tokens, System.Collections.Generic.Dictionary authInfo, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public virtual void OnCreated(ServiceStack.Web.IRequest httpReq) => throw null; + public virtual void OnLoad(ServiceStack.Web.IRequest httpReq) => throw null; + public virtual void OnLogout(ServiceStack.IServiceBase authService) => throw null; + public virtual System.Threading.Tasks.Task OnLogoutAsync(ServiceStack.IServiceBase authService, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public virtual void OnRegistered(ServiceStack.Web.IRequest httpReq, ServiceStack.Auth.IAuthSession session, ServiceStack.IServiceBase service) => throw null; + public virtual System.Threading.Tasks.Task OnRegisteredAsync(ServiceStack.Web.IRequest httpReq, ServiceStack.Auth.IAuthSession session, ServiceStack.IServiceBase service, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Collections.Generic.List Permissions { get => throw null; set => throw null; } + public string PhoneNumber { get => throw null; set => throw null; } + public bool? PhoneNumberConfirmed { get => throw null; set => throw null; } + public string PostalCode { get => throw null; set => throw null; } + public string PrimaryEmail { get => throw null; set => throw null; } + public string ProfileUrl { get => throw null; set => throw null; } + public System.Collections.Generic.List ProviderOAuthAccess { get => throw null; set => throw null; } + public string ReferrerUrl { get => throw null; set => throw null; } + public string RequestTokenSecret { get => throw null; set => throw null; } + public System.Collections.Generic.List Roles { get => throw null; set => throw null; } + public string Rsa { get => throw null; set => throw null; } + public System.Collections.Generic.List Scopes { get => throw null; set => throw null; } + public string SecurityStamp { get => throw null; set => throw null; } + public string Sequence { get => throw null; set => throw null; } + public string Sid { get => throw null; set => throw null; } + public string State { get => throw null; set => throw null; } + public System.Int64 Tag { get => throw null; set => throw null; } + public string TimeZone { get => throw null; set => throw null; } + public string TwitterScreenName { get => throw null; set => throw null; } + public string TwitterUserId { get => throw null; set => throw null; } + public bool? TwoFactorEnabled { get => throw null; set => throw null; } + public string Type { get => throw null; set => throw null; } + public string UserAuthId { get => throw null; set => throw null; } + public string UserAuthName { get => throw null; set => throw null; } + public string UserName { get => throw null; set => throw null; } + public virtual ServiceStack.Web.IHttpResult Validate(ServiceStack.IServiceBase authService, ServiceStack.Auth.IAuthSession session, ServiceStack.Auth.IAuthTokens tokens, System.Collections.Generic.Dictionary authInfo) => throw null; + public virtual System.Threading.Tasks.Task ValidateAsync(ServiceStack.IServiceBase authService, ServiceStack.Auth.IAuthSession session, ServiceStack.Auth.IAuthTokens tokens, System.Collections.Generic.Dictionary authInfo, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public string Webpage { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.AuthenticateAttribute` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class AuthenticateAttribute : ServiceStack.RequestFilterAsyncAttribute + { + public static void AssertAuthenticated(ServiceStack.Web.IRequest req, object requestDto = default(object), ServiceStack.Auth.IAuthSession session = default(ServiceStack.Auth.IAuthSession), ServiceStack.Auth.IAuthProvider[] authProviders = default(ServiceStack.Auth.IAuthProvider[])) => throw null; + public static System.Threading.Tasks.Task AssertAuthenticatedAsync(ServiceStack.Web.IRequest req, object requestDto = default(object), ServiceStack.Auth.IAuthSession session = default(ServiceStack.Auth.IAuthSession), ServiceStack.Auth.IAuthProvider[] authProviders = default(ServiceStack.Auth.IAuthProvider[])) => throw null; + public static bool Authenticate(ServiceStack.Web.IRequest req, object requestDto = default(object), ServiceStack.Auth.IAuthSession session = default(ServiceStack.Auth.IAuthSession), ServiceStack.Auth.IAuthProvider[] authProviders = default(ServiceStack.Auth.IAuthProvider[])) => throw null; + public static System.Threading.Tasks.Task AuthenticateAsync(ServiceStack.Web.IRequest req, object requestDto = default(object), ServiceStack.Auth.IAuthSession session = default(ServiceStack.Auth.IAuthSession), ServiceStack.Auth.IAuthProvider[] authProviders = default(ServiceStack.Auth.IAuthProvider[])) => throw null; + public AuthenticateAttribute(string provider) => throw null; + public AuthenticateAttribute(ServiceStack.ApplyTo applyTo, string provider) => throw null; + public AuthenticateAttribute(ServiceStack.ApplyTo applyTo) => throw null; + public AuthenticateAttribute() => throw null; + public static void DoHtmlRedirect(string redirectUrl, ServiceStack.Web.IRequest req, ServiceStack.Web.IResponse res, bool includeRedirectParam) => throw null; + protected bool DoHtmlRedirectAccessDeniedIfConfigured(ServiceStack.Web.IRequest req, ServiceStack.Web.IResponse res, bool includeRedirectParam = default(bool)) => throw null; + protected bool DoHtmlRedirectIfConfigured(ServiceStack.Web.IRequest req, ServiceStack.Web.IResponse res, bool includeRedirectParam = default(bool)) => throw null; + public override bool Equals(object obj) => throw null; + protected bool Equals(ServiceStack.AuthenticateAttribute other) => throw null; + public override System.Threading.Tasks.Task ExecuteAsync(ServiceStack.Web.IRequest req, ServiceStack.Web.IResponse res, object requestDto) => throw null; + public override int GetHashCode() => throw null; + public static string GetHtmlRedirectUrl(ServiceStack.Web.IRequest req, string redirectUrl, bool includeRedirectParam) => throw null; + public static string GetHtmlRedirectUrl(ServiceStack.Web.IRequest req) => throw null; + public string HtmlRedirect { get => throw null; set => throw null; } + public string Provider { get => throw null; set => throw null; } + public static void ThrowInvalidPermission(ServiceStack.Web.IRequest req = default(ServiceStack.Web.IRequest)) => throw null; + public static void ThrowInvalidRole(ServiceStack.Web.IRequest req = default(ServiceStack.Web.IRequest)) => throw null; + public static void ThrowNotAuthenticated(ServiceStack.Web.IRequest req = default(ServiceStack.Web.IRequest)) => throw null; + } + + // Generated from `ServiceStack.AuthenticationHeaderType` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public enum AuthenticationHeaderType + { + Basic, + Digest, + } + + // Generated from `ServiceStack.AutoCrudOperation` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class AutoCrudOperation + { + public static System.Collections.Generic.HashSet All { get => throw null; } + public static ServiceStack.AutoQueryDtoType AssertAutoCrudDtoType(System.Type requestType) => throw null; + public const string Create = default; + public static System.Collections.Generic.List CrudInterfaceMetadataNames(System.Collections.Generic.List operations = default(System.Collections.Generic.List)) => throw null; + public static System.Collections.Generic.List Default { get => throw null; } + public const string Delete = default; + public static ServiceStack.AutoQueryDtoType? GetAutoCrudDtoType(System.Type requestType) => throw null; + public static ServiceStack.AutoQueryDtoType? GetAutoQueryDtoType(System.Type requestType) => throw null; + public static ServiceStack.AutoQueryDtoType? GetAutoQueryGenericDefTypes(System.Type requestType, System.Type opType) => throw null; + public static System.Type GetModelType(System.Type requestType) => throw null; + public static System.Type GetViewModelType(System.Type requestType, System.Type responseType) => throw null; + public static bool IsCrud(this ServiceStack.MetadataOperationType op) => throw null; + public static bool IsCrudRead(this ServiceStack.MetadataOperationType op) => throw null; + public static bool IsCrudWrite(this ServiceStack.MetadataOperationType op) => throw null; + public static bool IsOperation(string operation) => throw null; + public const string Patch = default; + public const string Query = default; + public static System.Collections.Generic.List Read { get => throw null; } + public static string[] ReadInterfaces { get => throw null; } + public const string Save = default; + public static string ToHttpMethod(string operation) => throw null; + public static string ToHttpMethod(System.Type requestType) => throw null; + public static string ToOperation(System.Type genericDef) => throw null; + public const string Update = default; + public static System.Collections.Generic.List Write { get => throw null; } + public static string[] WriteInterfaces { get => throw null; } + } + + // Generated from `ServiceStack.AutoQueryData` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class AutoQueryData : ServiceStack.IAutoQueryDataOptions, ServiceStack.IAutoQueryData + { + public AutoQueryData() => throw null; + public ServiceStack.QueryDataContext CreateContext(ServiceStack.IQueryData requestDto, System.Collections.Generic.Dictionary dynamicParams, ServiceStack.Web.IRequest req) => throw null; + public ServiceStack.IDataQuery CreateQuery(ServiceStack.IQueryData requestDto, System.Collections.Generic.Dictionary dynamicParams, ServiceStack.Web.IRequest req = default(ServiceStack.Web.IRequest), ServiceStack.IQueryDataSource db = default(ServiceStack.IQueryDataSource)) => throw null; + public ServiceStack.DataQuery CreateQuery(ServiceStack.IQueryData dto, System.Collections.Generic.Dictionary dynamicParams, ServiceStack.Web.IRequest req = default(ServiceStack.Web.IRequest), ServiceStack.IQueryDataSource db = default(ServiceStack.IQueryDataSource)) => throw null; + public ServiceStack.DataQuery CreateQuery(ServiceStack.IQueryData dto, System.Collections.Generic.Dictionary dynamicParams, ServiceStack.Web.IRequest req = default(ServiceStack.Web.IRequest), ServiceStack.IQueryDataSource db = default(ServiceStack.IQueryDataSource)) => throw null; + public bool EnableUntypedQueries { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary EndsWithConventions { get => throw null; set => throw null; } + public ServiceStack.QueryResponse Execute(ServiceStack.IQueryData dto, ServiceStack.DataQuery q, ServiceStack.Web.IRequest req = default(ServiceStack.Web.IRequest), ServiceStack.IQueryDataSource db = default(ServiceStack.IQueryDataSource)) => throw null; + public ServiceStack.QueryResponse Execute(ServiceStack.IQueryData dto, ServiceStack.DataQuery q, ServiceStack.Web.IRequest req = default(ServiceStack.Web.IRequest), ServiceStack.IQueryDataSource db = default(ServiceStack.IQueryDataSource)) => throw null; + public ServiceStack.IQueryResponse Execute(ServiceStack.IQueryData request, ServiceStack.IDataQuery q, ServiceStack.IQueryDataSource db) => throw null; + public ServiceStack.IDataQuery Filter(ServiceStack.IDataQuery q, ServiceStack.IQueryData dto, ServiceStack.Web.IRequest req) => throw null; + public ServiceStack.DataQuery Filter(ServiceStack.IDataQuery q, ServiceStack.IQueryData dto, ServiceStack.Web.IRequest req) => throw null; + public ServiceStack.IQueryDataSource GetDb(ServiceStack.QueryDataContext ctx) => throw null; + public ServiceStack.IQueryDataSource GetDb(ServiceStack.QueryDataContext ctx, System.Type type) => throw null; + public System.Type GetFromType(System.Type requestDtoType) => throw null; + public ServiceStack.ITypedQueryData GetTypedQuery(System.Type requestDtoType, System.Type fromType) => throw null; + public ServiceStack.QueryDataFilterDelegate GlobalQueryFilter { get => throw null; set => throw null; } + public System.Collections.Generic.HashSet IgnoreProperties { get => throw null; set => throw null; } + public bool IncludeTotal { get => throw null; set => throw null; } + public int? MaxLimit { get => throw null; set => throw null; } + public bool OrderByPrimaryKeyOnLimitQuery { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary QueryFilters { get => throw null; set => throw null; } + public string RequiredRoleForRawSqlFilters { get => throw null; set => throw null; } + public ServiceStack.QueryResponse ResponseFilter(ServiceStack.IQueryDataSource db, ServiceStack.QueryResponse response, ServiceStack.DataQuery expr, ServiceStack.IQueryData dto) => throw null; + public System.Collections.Generic.List> ResponseFilters { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary StartsWithConventions { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.AutoQueryDataExtensions` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class AutoQueryDataExtensions + { + public static void And(this ServiceStack.IDataQuery q, System.Linq.Expressions.Expression> fieldExpr, ServiceStack.QueryCondition condition, object value) => throw null; + public static ServiceStack.DataQuery CreateQuery(this ServiceStack.IAutoQueryData autoQuery, ServiceStack.IQueryData model, ServiceStack.Web.IRequest request, ServiceStack.IQueryDataSource db = default(ServiceStack.IQueryDataSource)) => throw null; + public static ServiceStack.DataQuery CreateQuery(this ServiceStack.IAutoQueryData autoQuery, ServiceStack.IQueryData model, ServiceStack.Web.IRequest request, ServiceStack.IQueryDataSource db = default(ServiceStack.IQueryDataSource)) => throw null; + public static ServiceStack.IQueryDataSource MemorySource(this ServiceStack.QueryDataContext ctx, System.Func> sourceFn, ServiceStack.Caching.ICacheClient cache, System.TimeSpan? expiresIn = default(System.TimeSpan?), string cacheKey = default(string)) => throw null; + public static ServiceStack.IQueryDataSource MemorySource(this ServiceStack.QueryDataContext ctx, System.Collections.Generic.IEnumerable source) => throw null; + public static void Or(this ServiceStack.IDataQuery q, System.Linq.Expressions.Expression> fieldExpr, ServiceStack.QueryCondition condition, object value) => throw null; + public static ServiceStack.QueryDataField ToField(this ServiceStack.QueryDataFieldAttribute attr, System.Reflection.PropertyInfo pi, ServiceStack.AutoQueryDataFeature feature) => throw null; + } + + // Generated from `ServiceStack.AutoQueryDataFeature` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class AutoQueryDataFeature : ServiceStack.Model.IHasStringId, ServiceStack.Model.IHasId, ServiceStack.IPostInitPlugin, ServiceStack.IPlugin + { + public ServiceStack.AutoQueryDataFeature AddDataSource(System.Func dataSourceFactory) => throw null; + public ServiceStack.AutoQueryDataFeature AddDataSource(System.Func> dataSourceFactory) => throw null; + public ServiceStack.AutoQueryDataFeature AddDataSource(System.Type type, System.Func dataSourceFactory) => throw null; + public void AfterPluginsLoaded(ServiceStack.IAppHost appHost) => throw null; + public AutoQueryDataFeature() => throw null; + public System.Type AutoQueryServiceBaseType { get => throw null; set => throw null; } + public System.Collections.Generic.List Conditions; + public System.Collections.Generic.Dictionary ConditionsAliases; + public System.Collections.Concurrent.ConcurrentDictionary> DataSources { get => throw null; set => throw null; } + public bool EnableAutoQueryViewer { get => throw null; set => throw null; } + public bool EnableUntypedQueries { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary EndsWithConventions; + public System.Action GenerateServiceFilter { get => throw null; set => throw null; } + public System.Func GetDataSource(System.Type type) => throw null; + public ServiceStack.QueryDataFilterDelegate GlobalQueryFilter { get => throw null; set => throw null; } + public string Id { get => throw null; set => throw null; } + public System.Collections.Generic.HashSet IgnoreProperties { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary ImplicitConventions; + public void IncludeAggregates(ServiceStack.QueryDataFilterContext ctx) => throw null; + public bool IncludeTotal { get => throw null; set => throw null; } + public System.Collections.Generic.HashSet LoadFromAssemblies { get => throw null; set => throw null; } + public int? MaxLimit { get => throw null; set => throw null; } + public bool OrderByPrimaryKeyOnPagedQuery { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary QueryFilters { get => throw null; set => throw null; } + public void Register(ServiceStack.IAppHost appHost) => throw null; + public ServiceStack.AutoQueryDataFeature RegisterQueryFilter(System.Action filterFn) => throw null; + public System.Collections.Generic.List> ResponseFilters { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary StartsWithConventions; + } + + // Generated from `ServiceStack.AutoQueryDataServiceBase` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public abstract class AutoQueryDataServiceBase : ServiceStack.Service + { + public ServiceStack.IAutoQueryData AutoQuery { get => throw null; set => throw null; } + protected AutoQueryDataServiceBase() => throw null; + public virtual object Exec(ServiceStack.IQueryData dto) => throw null; + public virtual object Exec(ServiceStack.IQueryData dto) => throw null; + } + + // Generated from `ServiceStack.AutoQueryDataServiceSource` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class AutoQueryDataServiceSource + { + public static System.Collections.Generic.List GetResults(object response) => throw null; + public static System.Collections.Generic.IEnumerable GetResults(object response) => throw null; + public static ServiceStack.QueryDataSource ServiceSource(this ServiceStack.QueryDataContext ctx, object requestDto, ServiceStack.Caching.ICacheClient cache, System.TimeSpan? expiresIn = default(System.TimeSpan?), string cacheKey = default(string)) => throw null; + public static ServiceStack.MemoryDataSource ServiceSource(this ServiceStack.QueryDataContext ctx, object requestDto) => throw null; + } + + // Generated from `ServiceStack.AutoQueryDtoType` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public struct AutoQueryDtoType + { + public AutoQueryDtoType(System.Type genericType, System.Type genericDefType) => throw null; + // Stub generator skipped constructor + public System.Type GenericDefType { get => throw null; } + public System.Type GenericType { get => throw null; } + public bool IsRead { get => throw null; } + public bool IsWrite { get => throw null; } + public System.Type ModelIntoType { get => throw null; } + public System.Type ModelType { get => throw null; } + public string Operation { get => throw null; } + } + + // Generated from `ServiceStack.AutoQueryMetadata` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class AutoQueryMetadata : ServiceStack.IReturn, ServiceStack.IReturn + { + public AutoQueryMetadata() => throw null; + } + + // Generated from `ServiceStack.AutoQueryMetadataFeature` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class AutoQueryMetadataFeature : ServiceStack.Model.IHasStringId, ServiceStack.Model.IHasId, ServiceStack.IPlugin + { + public AutoQueryMetadataFeature() => throw null; + public ServiceStack.AutoQueryViewerConfig AutoQueryViewerConfig { get => throw null; set => throw null; } + public System.Collections.Generic.List ExportTypes { get => throw null; set => throw null; } + public string Id { get => throw null; set => throw null; } + public int? MaxLimit { get => throw null; set => throw null; } + public System.Action MetadataFilter { get => throw null; set => throw null; } + public void Register(ServiceStack.IAppHost appHost) => throw null; + } + + // Generated from `ServiceStack.AutoQueryMetadataResponse` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class AutoQueryMetadataResponse : ServiceStack.IMeta + { + public AutoQueryMetadataResponse() => throw null; + public ServiceStack.AutoQueryViewerConfig Config { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary Meta { get => throw null; set => throw null; } + public System.Collections.Generic.List Operations { get => throw null; set => throw null; } + public ServiceStack.ResponseStatus ResponseStatus { get => throw null; set => throw null; } + public System.Collections.Generic.List Types { get => throw null; set => throw null; } + public ServiceStack.AutoQueryViewerUserInfo UserInfo { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.AutoQueryMetadataService` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class AutoQueryMetadataService : ServiceStack.Service + { + public object Any(ServiceStack.AutoQueryMetadata request) => throw null; + public AutoQueryMetadataService() => throw null; + public ServiceStack.NativeTypes.INativeTypesMetadata NativeTypesMetadata { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.AutoQueryOperation` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class AutoQueryOperation : ServiceStack.IMeta + { + public AutoQueryOperation() => throw null; + public string From { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary Meta { get => throw null; set => throw null; } + public string Request { get => throw null; set => throw null; } + public System.Collections.Generic.List Routes { get => throw null; set => throw null; } + public string To { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.AutoQueryViewerConfig` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class AutoQueryViewerConfig : ServiceStack.AppInfo + { + public AutoQueryViewerConfig() => throw null; + public string DefaultSearchField { get => throw null; set => throw null; } + public string DefaultSearchText { get => throw null; set => throw null; } + public string DefaultSearchType { get => throw null; set => throw null; } + public string[] Formats { get => throw null; set => throw null; } + public System.Collections.Generic.List ImplicitConventions { get => throw null; set => throw null; } + public bool IsPublic { get => throw null; set => throw null; } + public int? MaxLimit { get => throw null; set => throw null; } + public bool OnlyShowAnnotatedServices { get => throw null; set => throw null; } + public string ServiceBaseUrl { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.AutoQueryViewerUserInfo` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class AutoQueryViewerUserInfo : ServiceStack.IMeta + { + public AutoQueryViewerUserInfo() => throw null; + public bool IsAuthenticated { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary Meta { get => throw null; set => throw null; } + public int QueryCount { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.BootstrapScripts` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class BootstrapScripts : ServiceStack.Script.ScriptMethods + { + public BootstrapScripts() => throw null; + public ServiceStack.IRawString ValidationSuccess(ServiceStack.Script.ScriptScopeContext scope, string message, System.Collections.Generic.Dictionary divAttrs) => throw null; + public ServiceStack.IRawString ValidationSuccess(ServiceStack.Script.ScriptScopeContext scope, string message) => throw null; + public ServiceStack.IRawString formControl(ServiceStack.Script.ScriptScopeContext scope, object inputAttrs, string tagName, object inputOptions) => throw null; + public ServiceStack.IRawString formInput(ServiceStack.Script.ScriptScopeContext scope, object inputAttrs, object inputOptions) => throw null; + public ServiceStack.IRawString formInput(ServiceStack.Script.ScriptScopeContext scope, object args) => throw null; + public ServiceStack.IRawString formSelect(ServiceStack.Script.ScriptScopeContext scope, object inputAttrs, object inputOptions) => throw null; + public ServiceStack.IRawString formSelect(ServiceStack.Script.ScriptScopeContext scope, object args) => throw null; + public ServiceStack.IRawString formTextarea(ServiceStack.Script.ScriptScopeContext scope, object inputAttrs, object inputOptions) => throw null; + public ServiceStack.IRawString formTextarea(ServiceStack.Script.ScriptScopeContext scope, object args) => throw null; + public ServiceStack.IRawString nav(ServiceStack.Script.ScriptScopeContext scope, System.Collections.Generic.List navItems, System.Collections.Generic.Dictionary options) => throw null; + public ServiceStack.IRawString nav(ServiceStack.Script.ScriptScopeContext scope, System.Collections.Generic.List navItems) => throw null; + public ServiceStack.IRawString nav(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public ServiceStack.IRawString navButtonGroup(ServiceStack.Script.ScriptScopeContext scope, System.Collections.Generic.List navItems, System.Collections.Generic.Dictionary options) => throw null; + public ServiceStack.IRawString navButtonGroup(ServiceStack.Script.ScriptScopeContext scope, System.Collections.Generic.List navItems) => throw null; + public ServiceStack.IRawString navButtonGroup(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public ServiceStack.IRawString navLink(ServiceStack.Script.ScriptScopeContext scope, ServiceStack.NavItem navItem, System.Collections.Generic.Dictionary options) => throw null; + public ServiceStack.IRawString navLink(ServiceStack.Script.ScriptScopeContext scope, ServiceStack.NavItem navItem) => throw null; + public ServiceStack.IRawString navbar(ServiceStack.Script.ScriptScopeContext scope, System.Collections.Generic.List navItems, System.Collections.Generic.Dictionary options) => throw null; + public ServiceStack.IRawString navbar(ServiceStack.Script.ScriptScopeContext scope, System.Collections.Generic.List navItems) => throw null; + public ServiceStack.IRawString navbar(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public ServiceStack.IRawString validationSummary(ServiceStack.Script.ScriptScopeContext scope, System.Collections.IEnumerable exceptFields, object htmlAttrs) => throw null; + public ServiceStack.IRawString validationSummary(ServiceStack.Script.ScriptScopeContext scope, System.Collections.IEnumerable exceptFields) => throw null; + public ServiceStack.IRawString validationSummary(ServiceStack.Script.ScriptScopeContext scope) => throw null; + } + + // Generated from `ServiceStack.CacheClientExtensions` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class CacheClientExtensions + { + public static object Cache(this ServiceStack.Caching.ICacheClient cache, string cacheKey, object responseDto, ServiceStack.Web.IRequest req, System.TimeSpan? expireCacheIn = default(System.TimeSpan?)) => throw null; + public static System.Threading.Tasks.Task CacheAsync(this ServiceStack.Caching.ICacheClientAsync cache, string cacheKey, object responseDto, ServiceStack.Web.IRequest req, System.TimeSpan? expireCacheIn = default(System.TimeSpan?), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static void ClearCaches(this ServiceStack.Caching.ICacheClient cache, params string[] cacheKeys) => throw null; + public static System.Threading.Tasks.Task ClearCachesAsync(this ServiceStack.Caching.ICacheClientAsync cache, string[] cacheKeys, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Collections.Generic.IEnumerable GetAllKeys(this ServiceStack.Caching.ICacheClient cache) => throw null; + public static System.Collections.Generic.IAsyncEnumerable GetAllKeysAsync(this ServiceStack.Caching.ICacheClientAsync cache) => throw null; + public static string GetCacheKeyForCompressed(string cacheKeySerialized, string compressionType) => throw null; + public static string GetCacheKeyForSerialized(string cacheKey, string mimeType, string modifiers) => throw null; + public static System.DateTime? GetDate(this ServiceStack.Web.IRequest req) => throw null; + public static System.DateTime? GetIfModifiedSince(this ServiceStack.Web.IRequest req) => throw null; + public static System.Collections.Generic.IEnumerable GetKeysByPattern(this ServiceStack.Caching.ICacheClient cache, string pattern) => throw null; + public static System.Collections.Generic.IAsyncEnumerable GetKeysByPatternAsync(this ServiceStack.Caching.ICacheClientAsync cache, string pattern) => throw null; + public static System.Collections.Generic.IEnumerable GetKeysStartingWith(this ServiceStack.Caching.ICacheClient cache, string prefix) => throw null; + public static System.Collections.Generic.IAsyncEnumerable GetKeysStartingWithAsync(this ServiceStack.Caching.ICacheClientAsync cache, string prefix) => throw null; + public static T GetOrCreate(this ServiceStack.Caching.ICacheClient cache, string key, System.TimeSpan expiresIn, System.Func createFn) => throw null; + public static T GetOrCreate(this ServiceStack.Caching.ICacheClient cache, string key, System.Func createFn) => throw null; + public static System.Threading.Tasks.Task GetOrCreateAsync(this ServiceStack.Caching.ICacheClientAsync cache, string key, System.TimeSpan expiresIn, System.Func> createFn) => throw null; + public static System.Threading.Tasks.Task GetOrCreateAsync(this ServiceStack.Caching.ICacheClientAsync cache, string key, System.Func> createFn) => throw null; + public static System.TimeSpan? GetTimeToLive(this ServiceStack.Caching.ICacheClient cache, string key) => throw null; + public static bool HasValidCache(this ServiceStack.Caching.ICacheClient cache, ServiceStack.Web.IRequest req, string cacheKey, System.DateTime? checkLastModified, out System.DateTime? lastModified) => throw null; + public static System.Threading.Tasks.Task HasValidCacheAsync(this ServiceStack.Caching.ICacheClientAsync cache, ServiceStack.Web.IRequest req, string cacheKey, System.DateTime? checkLastModified, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static void RemoveByPattern(this ServiceStack.Caching.ICacheClient cacheClient, string pattern) => throw null; + public static System.Threading.Tasks.Task RemoveByPatternAsync(this ServiceStack.Caching.ICacheClientAsync cacheClient, string pattern, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static void RemoveByRegex(this ServiceStack.Caching.ICacheClient cacheClient, string regex) => throw null; + public static System.Threading.Tasks.Task RemoveByRegexAsync(this ServiceStack.Caching.ICacheClientAsync cacheClient, string regex) => throw null; + public static object ResolveFromCache(this ServiceStack.Caching.ICacheClient cache, string cacheKey, ServiceStack.Web.IRequest req) => throw null; + public static System.Threading.Tasks.Task ResolveFromCacheAsync(this ServiceStack.Caching.ICacheClientAsync cache, string cacheKey, ServiceStack.Web.IRequest req, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static void Set(this ServiceStack.Caching.ICacheClient cache, string cacheKey, T value, System.TimeSpan? expireCacheIn) => throw null; + public static System.Threading.Tasks.Task SetAsync(this ServiceStack.Caching.ICacheClientAsync cache, string cacheKey, T value, System.TimeSpan? expireCacheIn, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + // Generated from `ServiceStack.CacheClientExtensions+ValidCache` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public struct ValidCache + { + public bool IsValid { get => throw null; } + public System.DateTime LastModified { get => throw null; } + public static ServiceStack.CacheClientExtensions.ValidCache NotValid; + public ValidCache(bool isValid, System.DateTime lastModified) => throw null; + // Stub generator skipped constructor + } + + + } + + // Generated from `ServiceStack.CacheControl` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + [System.Flags] + public enum CacheControl + { + MustRevalidate, + NoCache, + NoStore, + NoTransform, + None, + Private, + ProxyRevalidate, + Public, + } + + // Generated from `ServiceStack.CacheInfo` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class CacheInfo + { + public System.TimeSpan? Age { get => throw null; set => throw null; } + public ServiceStack.CacheControl CacheControl { get => throw null; set => throw null; } + public CacheInfo() => throw null; + public string CacheKey { get => throw null; } + public string ETag { get => throw null; set => throw null; } + public System.TimeSpan? ExpiresIn { get => throw null; set => throw null; } + public string KeyBase { get => throw null; set => throw null; } + public string KeyModifiers { get => throw null; set => throw null; } + public System.DateTime? LastModified { get => throw null; set => throw null; } + public bool LocalCache { get => throw null; set => throw null; } + public System.TimeSpan? MaxAge { get => throw null; set => throw null; } + public bool NoCompression { get => throw null; set => throw null; } + public bool VaryByUser { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.CacheInfoExtensions` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class CacheInfoExtensions + { + public static ServiceStack.CacheInfo ToCacheInfo(this ServiceStack.HttpResult httpResult) => throw null; + } + + // Generated from `ServiceStack.CacheResponseAttribute` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class CacheResponseAttribute : ServiceStack.RequestFilterAsyncAttribute + { + public ServiceStack.CacheControl CacheControl { get => throw null; set => throw null; } + public CacheResponseAttribute() => throw null; + public int Duration { get => throw null; set => throw null; } + public override System.Threading.Tasks.Task ExecuteAsync(ServiceStack.Web.IRequest req, ServiceStack.Web.IResponse res, object requestDto) => throw null; + public bool LocalCache { get => throw null; set => throw null; } + public int MaxAge { get => throw null; set => throw null; } + public bool NoCompression { get => throw null; set => throw null; } + public string[] VaryByHeaders { get => throw null; set => throw null; } + public string[] VaryByRoles { get => throw null; set => throw null; } + public bool VaryByUser { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.CacheResponseExtensions` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class CacheResponseExtensions + { + public static System.Threading.Tasks.Task HandleValidCache(this ServiceStack.Web.IRequest req, ServiceStack.CacheInfo cacheInfo, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static string LastModifiedKey(this ServiceStack.CacheInfo cacheInfo) => throw null; + } + + // Generated from `ServiceStack.CancellableRequestService` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class CancellableRequestService : ServiceStack.Service + { + public object Any(ServiceStack.CancelRequest request) => throw null; + public CancellableRequestService() => throw null; + } + + // Generated from `ServiceStack.CancellableRequestsExtensions` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class CancellableRequestsExtensions + { + public static ServiceStack.ICancellableRequest CreateCancellableRequest(this ServiceStack.Web.IRequest req) => throw null; + public static ServiceStack.ICancellableRequest GetCancellableRequest(this ServiceStack.Web.IRequest req, string tag) => throw null; + } + + // Generated from `ServiceStack.CancellableRequestsFeature` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class CancellableRequestsFeature : ServiceStack.Model.IHasStringId, ServiceStack.Model.IHasId, ServiceStack.IPlugin + { + public string AtPath { get => throw null; set => throw null; } + public CancellableRequestsFeature() => throw null; + public string Id { get => throw null; set => throw null; } + public void Register(ServiceStack.IAppHost appHost) => throw null; + } + + // Generated from `ServiceStack.CaseInsensitiveEqualCondition` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class CaseInsensitiveEqualCondition : ServiceStack.QueryCondition + { + public override string Alias { get => throw null; } + public CaseInsensitiveEqualCondition() => throw null; + public override bool Match(object a, object b) => throw null; + } + + // Generated from `ServiceStack.ClientCanSwapTemplatesAttribute` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ClientCanSwapTemplatesAttribute : ServiceStack.RequestFilterAttribute + { + public ClientCanSwapTemplatesAttribute() => throw null; + public override void Execute(ServiceStack.Web.IRequest req, ServiceStack.Web.IResponse res, object requestDto) => throw null; + } + + // Generated from `ServiceStack.CompareTypeUtils` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class CompareTypeUtils + { + public static object Add(object a, object b) => throw null; + public static object Aggregate(System.Collections.IEnumerable source, System.Func fn, object seed = default(object)) => throw null; + public static double? CoerceDouble(object o) => throw null; + public static System.Int64? CoerceLong(object o) => throw null; + public static string CoerceString(object o) => throw null; + public static int CompareTo(object a, object b) => throw null; + public static object Max(object a, object b) => throw null; + public static object Min(object a, object b) => throw null; + public static object Sum(System.Collections.IEnumerable values) => throw null; + } + + // Generated from `ServiceStack.CompressResponseAttribute` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class CompressResponseAttribute : ServiceStack.ResponseFilterAsyncAttribute + { + public CompressResponseAttribute() => throw null; + public override System.Threading.Tasks.Task ExecuteAsync(ServiceStack.Web.IRequest req, ServiceStack.Web.IResponse res, object response) => throw null; + } + + // Generated from `ServiceStack.CompressedFileResult` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class CompressedFileResult : ServiceStack.Web.IStreamWriterAsync, ServiceStack.Web.IHasOptions + { + public const int Adler32ChecksumLength = default; + public CompressedFileResult(string filePath, string compressionType, string contentMimeType) => throw null; + public CompressedFileResult(string filePath, string compressionType) => throw null; + public CompressedFileResult(string filePath) => throw null; + public const string DefaultContentType = default; + public string FilePath { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary Headers { get => throw null; set => throw null; } + public System.Collections.Generic.IDictionary Options { get => throw null; } + public System.Threading.Tasks.Task WriteToAsync(System.IO.Stream responseStream, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + } + + // Generated from `ServiceStack.CompressedResult` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class CompressedResult : ServiceStack.Web.IStreamWriterAsync, ServiceStack.Web.IHttpResult, ServiceStack.Web.IHasOptions + { + public const int Adler32ChecksumLength = default; + public CompressedResult(System.Byte[] contents, string compressionType, string contentMimeType) => throw null; + public CompressedResult(System.Byte[] contents, string compressionType) => throw null; + public CompressedResult(System.Byte[] contents) => throw null; + public string ContentType { get => throw null; set => throw null; } + public System.Byte[] Contents { get => throw null; } + public System.Collections.Generic.List Cookies { get => throw null; } + public const string DefaultContentType = default; + public System.Collections.Generic.Dictionary Headers { get => throw null; } + public System.DateTime? LastModified { set => throw null; } + public System.Collections.Generic.IDictionary Options { get => throw null; } + public int PaddingLength { get => throw null; set => throw null; } + public ServiceStack.Web.IRequest RequestContext { get => throw null; set => throw null; } + public object Response { get => throw null; set => throw null; } + public ServiceStack.Web.IContentTypeWriter ResponseFilter { get => throw null; set => throw null; } + public System.Func ResultScope { get => throw null; set => throw null; } + public int Status { get => throw null; set => throw null; } + public System.Net.HttpStatusCode StatusCode { get => throw null; set => throw null; } + public string StatusDescription { get => throw null; set => throw null; } + public System.Threading.Tasks.Task WriteToAsync(System.IO.Stream responseStream, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + } + + // Generated from `ServiceStack.ConditionAlias` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class ConditionAlias + { + public const string Between = default; + public const string Contains = default; + public const string EndsWith = default; + public const string Equals = default; + public const string False = default; + public const string Greater = default; + public const string GreaterEqual = default; + public const string In = default; + public const string Less = default; + public const string LessEqual = default; + public const string Like = default; + public const string NotEqual = default; + public const string StartsWith = default; + } + + // Generated from `ServiceStack.ConfigurationErrorsException` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ConfigurationErrorsException : System.Exception + { + public ConfigurationErrorsException(string message, System.Exception innerException) => throw null; + public ConfigurationErrorsException(string message) => throw null; + public ConfigurationErrorsException() => throw null; + } + + // Generated from `ServiceStack.ConnectionInfoAttribute` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ConnectionInfoAttribute : ServiceStack.RequestFilterAttribute + { + public ConnectionInfoAttribute() => throw null; + public string ConnectionString { get => throw null; set => throw null; } + public override void Execute(ServiceStack.Web.IRequest req, ServiceStack.Web.IResponse res, object requestDto) => throw null; + public string NamedConnection { get => throw null; set => throw null; } + public string ProviderName { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.ContainerNetCoreExtensions` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class ContainerNetCoreExtensions + { + public static Funq.Container AddScoped(this Funq.Container services, System.Func implementationFactory) where TService : class => throw null; + public static Funq.Container AddScoped(this Funq.Container services) where TService : class => throw null; + public static Funq.Container AddScoped(this Funq.Container services, System.Func implementationFactory) where TImplementation : class, TService where TService : class => throw null; + public static Funq.Container AddScoped(this Funq.Container services) where TImplementation : class, TService where TService : class => throw null; + public static Funq.Container AddScoped(this Funq.Container services, System.Type serviceType, System.Type implementationType) => throw null; + public static Funq.Container AddScoped(this Funq.Container services, System.Type serviceType) => throw null; + public static Funq.Container AddSingleton(this Funq.Container services, TService implementationInstance) where TService : class => throw null; + public static Funq.Container AddSingleton(this Funq.Container services, System.Func implementationFactory) where TService : class => throw null; + public static Funq.Container AddSingleton(this Funq.Container services) where TService : class => throw null; + public static Funq.Container AddSingleton(this Funq.Container services, System.Func implementationFactory) where TImplementation : class, TService where TService : class => throw null; + public static Funq.Container AddSingleton(this Funq.Container services) where TImplementation : class, TService where TService : class => throw null; + public static Funq.Container AddSingleton(this Funq.Container services, System.Type serviceType, System.Type implementationType) => throw null; + public static Funq.Container AddSingleton(this Funq.Container services, System.Type serviceType) => throw null; + public static Funq.Container AddTransient(this Funq.Container services, System.Func implementationFactory) where TService : class => throw null; + public static Funq.Container AddTransient(this Funq.Container services) where TService : class => throw null; + public static Funq.Container AddTransient(this Funq.Container services, System.Func implementationFactory) where TImplementation : class, TService where TService : class => throw null; + public static Funq.Container AddTransient(this Funq.Container services) where TImplementation : class, TService where TService : class => throw null; + public static Funq.Container AddTransient(this Funq.Container services, System.Type serviceType, System.Type implementationType) => throw null; + public static Funq.Container AddTransient(this Funq.Container services, System.Type serviceType) => throw null; + } + + // Generated from `ServiceStack.ContainerTypeExtensions` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class ContainerTypeExtensions + { + public static Funq.Container Register(this Funq.Container container, object instance, System.Type asType) => throw null; + public static void RegisterAutoWiredType(this Funq.Container container, string name, System.Type serviceType, System.Type inFunqAsType, Funq.ReuseScope scope = default(Funq.ReuseScope)) => throw null; + public static void RegisterAutoWiredType(this Funq.Container container, string name, System.Type serviceType, Funq.ReuseScope scope = default(Funq.ReuseScope)) => throw null; + public static void RegisterAutoWiredType(this Funq.Container container, System.Type serviceType, System.Type inFunqAsType, Funq.ReuseScope scope = default(Funq.ReuseScope)) => throw null; + public static void RegisterAutoWiredType(this Funq.Container container, System.Type serviceType, Funq.ReuseScope scope = default(Funq.ReuseScope)) => throw null; + public static void RegisterAutoWiredTypes(this Funq.Container container, System.Collections.Generic.IEnumerable serviceTypes, Funq.ReuseScope scope = default(Funq.ReuseScope)) => throw null; + } + + // Generated from `ServiceStack.ContainsCondition` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ContainsCondition : ServiceStack.QueryCondition + { + public override string Alias { get => throw null; } + public ContainsCondition() => throw null; + public override bool Match(object a, object b) => throw null; + } + + // Generated from `ServiceStack.CorsFeature` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class CorsFeature : ServiceStack.Model.IHasStringId, ServiceStack.Model.IHasId, ServiceStack.IPlugin + { + public System.Collections.Generic.ICollection AllowOriginWhitelist { get => throw null; } + public bool AutoHandleOptionsRequests { get => throw null; set => throw null; } + public CorsFeature(string allowedOrigins = default(string), string allowedMethods = default(string), string allowedHeaders = default(string), bool allowCredentials = default(bool), string exposeHeaders = default(string), int? maxAge = default(int?)) => throw null; + public CorsFeature(System.Collections.Generic.ICollection allowOriginWhitelist, string allowedMethods = default(string), string allowedHeaders = default(string), bool allowCredentials = default(bool), string exposeHeaders = default(string), int? maxAge = default(int?)) => throw null; + public const string DefaultHeaders = default; + public const string DefaultMethods = default; + public const string DefaultOrigin = default; + public string Id { get => throw null; set => throw null; } + public void Register(ServiceStack.IAppHost appHost) => throw null; + } + + // Generated from `ServiceStack.CsvOnly` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class CsvOnly : ServiceStack.RequestFilterAttribute + { + public CsvOnly() => throw null; + public override void Execute(ServiceStack.Web.IRequest req, ServiceStack.Web.IResponse res, object requestDto) => throw null; + } + + // Generated from `ServiceStack.CsvRequestLogger` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class CsvRequestLogger : ServiceStack.Host.InMemoryRollingRequestLogger + { + public CsvRequestLogger(ServiceStack.IO.IVirtualFiles files = default(ServiceStack.IO.IVirtualFiles), string requestLogsPattern = default(string), string errorLogsPattern = default(string), System.TimeSpan? appendEvery = default(System.TimeSpan?)) => throw null; + public override System.Collections.Generic.List GetLatestLogs(int? take) => throw null; + public string GetLogFilePath(string logFilePattern, System.DateTime forDate) => throw null; + public override void Log(ServiceStack.Web.IRequest request, object requestDto, object response, System.TimeSpan requestDuration) => throw null; + protected virtual void OnFlush(object state) => throw null; + public System.Action OnReadLastEntryError { get => throw null; set => throw null; } + public System.Action, System.Exception> OnWriteLogsError { get => throw null; set => throw null; } + public virtual void WriteLogs(System.Collections.Generic.List logs, string logFile) => throw null; + } + + // Generated from `ServiceStack.CustomRequestFilter` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class CustomRequestFilter : ServiceStack.IPlugin + { + public bool ApplyToMessaging { get => throw null; set => throw null; } + public CustomRequestFilter(System.Action filter) => throw null; + public void Register(ServiceStack.IAppHost appHost) => throw null; + } + + // Generated from `ServiceStack.CustomResponseFilter` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class CustomResponseFilter : ServiceStack.IPlugin + { + public bool ApplyToMessaging { get => throw null; set => throw null; } + public CustomResponseFilter(System.Action filter) => throw null; + public void Register(ServiceStack.IAppHost appHost) => throw null; + } + + // Generated from `ServiceStack.DataConditionExpression` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class DataConditionExpression + { + public System.Collections.Generic.IEnumerable Apply(System.Collections.Generic.IEnumerable source, System.Collections.Generic.IEnumerable original) => throw null; + public DataConditionExpression() => throw null; + public System.Reflection.PropertyInfo Field { get => throw null; set => throw null; } + public ServiceStack.GetMemberDelegate FieldGetter { get => throw null; set => throw null; } + public object GetFieldValue(object instance) => throw null; + public ServiceStack.QueryCondition QueryCondition { get => throw null; set => throw null; } + public ServiceStack.QueryTerm Term { get => throw null; set => throw null; } + public object Value { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.DataQuery<>` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class DataQuery : ServiceStack.IDataQuery + { + public virtual void AddCondition(ServiceStack.QueryTerm term, System.Reflection.PropertyInfo field, ServiceStack.QueryCondition condition, object value) => throw null; + public virtual void And(string field, ServiceStack.QueryCondition condition, string value) => throw null; + public System.Collections.Generic.List Conditions { get => throw null; set => throw null; } + public DataQuery(ServiceStack.QueryDataContext context) => throw null; + public ServiceStack.IQueryData Dto { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary DynamicParams { get => throw null; set => throw null; } + public virtual System.Tuple FirstMatchingField(string field) => throw null; + public virtual bool HasConditions { get => throw null; } + public virtual void Join(System.Type joinType, System.Type type) => throw null; + public virtual void LeftJoin(System.Type joinType, System.Type type) => throw null; + public virtual void Limit(int? skip, int? take) => throw null; + public int? Offset { get => throw null; set => throw null; } + public System.Collections.Generic.HashSet OnlyFields { get => throw null; set => throw null; } + public virtual void Or(string field, ServiceStack.QueryCondition condition, string value) => throw null; + public ServiceStack.OrderByExpression OrderBy { get => throw null; set => throw null; } + public virtual void OrderByFields(params string[] fieldNames) => throw null; + public virtual void OrderByFieldsDescending(params string[] fieldNames) => throw null; + public virtual void OrderByPrimaryKey() => throw null; + public int? Rows { get => throw null; set => throw null; } + public virtual void Select(string[] fields) => throw null; + public void Take(int take) => throw null; + } + + // Generated from `ServiceStack.DefaultRequestAttribute` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class DefaultRequestAttribute : ServiceStack.AttributeBase + { + public DefaultRequestAttribute(System.Type requestType) => throw null; + public System.Type RequestType { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.DefaultViewAttribute` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class DefaultViewAttribute : ServiceStack.RequestFilterAttribute + { + public DefaultViewAttribute(string view, string template) => throw null; + public DefaultViewAttribute(string view) => throw null; + public DefaultViewAttribute() => throw null; + public override void Execute(ServiceStack.Web.IRequest req, ServiceStack.Web.IResponse res, object requestDto) => throw null; + public string Template { get => throw null; set => throw null; } + public string View { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.DisposableTracker` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class DisposableTracker : System.IDisposable + { + public void Add(System.IDisposable instance) => throw null; + public DisposableTracker() => throw null; + public void Dispose() => throw null; + public const string HashId = default; + } + + // Generated from `ServiceStack.DtoUtils` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class DtoUtils + { + public static object CreateErrorResponse(string errorCode, string errorMessage, System.Collections.Generic.IEnumerable validationErrors) => throw null; + public static object CreateErrorResponse(object request, System.Exception ex, ServiceStack.ResponseStatus responseStatus) => throw null; + public static object CreateErrorResponse(object request, System.Exception ex) => throw null; + public static object CreateErrorResponse(object request, ServiceStack.Validation.ValidationErrorResult validationError) => throw null; + public static object CreateResponseDto(object request, ServiceStack.ResponseStatus responseStatus) => throw null; + public static ServiceStack.ResponseStatus CreateResponseStatus(string errorCode, string errorMessage) => throw null; + public static ServiceStack.ResponseStatus CreateResponseStatus(string errorCode) => throw null; + public static ServiceStack.ResponseStatus CreateResponseStatus(System.Exception ex, object request = default(object), bool debugMode = default(bool)) => throw null; + public static ServiceStack.ResponseStatus CreateSuccessResponse(string message) => throw null; + public const string ResponseStatusPropertyName = default; + public static ServiceStack.ResponseStatus ToResponseStatus(this System.Exception exception, object requestDto = default(object)) => throw null; + public static ServiceStack.ResponseStatus ToResponseStatus(this ServiceStack.Validation.ValidationErrorResult validationResult) => throw null; + public static ServiceStack.ResponseStatus ToResponseStatus(this ServiceStack.Validation.ValidationError validationException) => throw null; + } + + // Generated from `ServiceStack.EnableCorsAttribute` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class EnableCorsAttribute : ServiceStack.AttributeBase, ServiceStack.Web.IRequestFilterBase, ServiceStack.Web.IHasRequestFilterAsync + { + public bool AutoHandleOptionRequests { get => throw null; set => throw null; } + public ServiceStack.Web.IRequestFilterBase Copy() => throw null; + public EnableCorsAttribute(string allowedOrigins = default(string), string allowedMethods = default(string), string allowedHeaders = default(string), bool allowCredentials = default(bool)) => throw null; + public int Priority { get => throw null; set => throw null; } + public System.Threading.Tasks.Task RequestFilterAsync(ServiceStack.Web.IRequest req, ServiceStack.Web.IResponse res, object requestDto) => throw null; + } + + // Generated from `ServiceStack.EncryptedMessagesFeature` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class EncryptedMessagesFeature : ServiceStack.Model.IHasStringId, ServiceStack.Model.IHasId, ServiceStack.IPlugin + { + public static System.TimeSpan DefaultMaxMaxRequestAge; + public EncryptedMessagesFeature() => throw null; + public static string ErrorInvalidMessage; + public static string ErrorKeyNotFound; + public static string ErrorNonceSeen; + public static string ErrorRequestTooOld; + public System.Collections.Generic.List FallbackPrivateKeys { get => throw null; set => throw null; } + public string Id { get => throw null; set => throw null; } + public System.TimeSpan MaxRequestAge { get => throw null; set => throw null; } + public System.Security.Cryptography.RSAParameters? PrivateKey { get => throw null; set => throw null; } + protected System.Collections.Generic.Dictionary PrivateKeyModulusMap { get => throw null; set => throw null; } + public string PrivateKeyXml { get => throw null; set => throw null; } + public string PublicKeyPath { get => throw null; set => throw null; } + public void Register(ServiceStack.IAppHost appHost) => throw null; + public static string RequestItemsAuthKey; + public static string RequestItemsCryptKey; + public static string RequestItemsIv; + public static System.Threading.Tasks.Task WriteEncryptedError(ServiceStack.Web.IRequest req, System.Byte[] cryptKey, System.Byte[] authKey, System.Byte[] iv, System.Exception ex, string description = default(string)) => throw null; + } + + // Generated from `ServiceStack.EncryptedMessagesFeatureExtensions` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class EncryptedMessagesFeatureExtensions + { + public static bool IsEncryptedMessage(this ServiceStack.Web.IRequest req) => throw null; + } + + // Generated from `ServiceStack.EncryptedMessagesService` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class EncryptedMessagesService : ServiceStack.Service + { + public object Any(ServiceStack.GetPublicKey request) => throw null; + public object Any(ServiceStack.EncryptedMessage request) => throw null; + public EncryptedMessagesService() => throw null; + } + + // Generated from `ServiceStack.EndsWithCondition` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class EndsWithCondition : ServiceStack.QueryCondition + { + public override string Alias { get => throw null; } + public EndsWithCondition() => throw null; + public override bool Match(object a, object b) => throw null; + } + + // Generated from `ServiceStack.EnsureHttpsAttribute` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class EnsureHttpsAttribute : ServiceStack.RequestFilterAttribute + { + public EnsureHttpsAttribute() => throw null; + public override void Execute(ServiceStack.Web.IRequest req, ServiceStack.Web.IResponse res, object requestDto) => throw null; + public bool SkipIfDebugMode { get => throw null; set => throw null; } + public bool SkipIfXForwardedFor { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.EqualsCondition` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class EqualsCondition : ServiceStack.QueryCondition + { + public override string Alias { get => throw null; } + public EqualsCondition() => throw null; + public static ServiceStack.EqualsCondition Instance; + public override bool Match(object a, object b) => throw null; + } + + // Generated from `ServiceStack.ErrorMessages` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class ErrorMessages + { + public static string ApiKeyDoesNotExist; + public static string ApiKeyHasBeenCancelled; + public static string ApiKeyHasExpired; + public static string ApiKeyIsInvalid; + public static string ApiKeyRequiresSecureConnection; + public static string AppSettingNotFoundFmt; + public static string AuthRepositoryNotExists; + public static string CacheFeatureMustBeEnabled; + public static string ClaimDoesNotExistFmt; + public static string ConnectionStringNotFoundFmt; + public static string ConstructorNotFoundForType; + public static string ContentTypeNotSupportedFmt; + public static string EmailAlreadyExists; + public static string EmailAlreadyExistsFmt; + public static string FileNotExistsFmt; + public static string HostDoesNotSupportSingletonRequest; + public static string IllegalUsername; + public static string InvalidAccessToken; + public static string InvalidBasicAuthCredentials; + public static string InvalidPermission; + public static string InvalidRole; + public static string InvalidUsernameOrPassword; + public static string JwtRequiresSecureConnection; + public static string NoExternalRedirects; + public static string NotAuthenticated; + public static string OnlyAllowedInAspNetHosts; + public static string PasswordsShouldMatch; + public static string PrimaryKeyRequired; + public static string RefreshTokenInvalid; + public static string RegisterUpdatesDisabled; + public static string RequestAlreadyProcessedFmt; + public static string ShouldNotRegisterAuthSession; + public static string SubscriptionForbiddenFmt; + public static string SubscriptionNotExistsFmt; + public static string TokenExpired; + public static string TokenInvalid; + public static string TokenInvalidAudienceFmt; + public static string TokenInvalidNotBefore; + public static string TokenInvalidated; + public static string UnknownAuthProviderFmt; + public static string UserAccountLocked; + public static string UserAlreadyExistsFmt; + public static string UserForApiKeyDoesNotExist; + public static string UserNotExists; + public static string UsernameAlreadyExists; + public static string UsernameOrEmailRequired; + public static string WindowsAuthFailed; + } + + // Generated from `ServiceStack.ErrorViewAttribute` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ErrorViewAttribute : ServiceStack.RequestFilterAttribute + { + public ErrorViewAttribute(string fieldName) => throw null; + public ErrorViewAttribute() => throw null; + public override void Execute(ServiceStack.Web.IRequest req, ServiceStack.Web.IResponse res, object requestDto) => throw null; + public string FieldName { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.EventSubscription` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class EventSubscription : ServiceStack.SubscriptionInfo, System.IDisposable, ServiceStack.IEventSubscription + { + public void Dispose() => throw null; + public static int DisposeMaxWaitMs { get => throw null; set => throw null; } + public EventSubscription(ServiceStack.Web.IResponse response) => throw null; + public bool IsClosed { get => throw null; } + public bool IsDisposed { get => throw null; } + public bool IsLocked { get => throw null; } + public string JsonArgs { get => throw null; } + public System.Int64 LastMessageId { get => throw null; } + public System.DateTime LastPulseAt { get => throw null; set => throw null; } + public string[] MergedChannels { get => throw null; set => throw null; } + public System.Action OnDispose { get => throw null; set => throw null; } + public System.Action OnError { get => throw null; set => throw null; } + public System.Action OnHungConnection { get => throw null; set => throw null; } + public System.Action OnPublish { get => throw null; set => throw null; } + public System.Func OnPublishAsync { get => throw null; set => throw null; } + public System.Action OnUnsubscribe { get => throw null; set => throw null; } + public System.Func OnUnsubscribeAsync { get => throw null; set => throw null; } + public void Publish(string selector, string message) => throw null; + public void Publish(string selector) => throw null; + public System.Threading.Tasks.Task PublishAsync(string selector, string message, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public void PublishRaw(string frame) => throw null; + public System.Threading.Tasks.Task PublishRawAsync(string frame, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public void Pulse() => throw null; + public void Release() => throw null; + public ServiceStack.Web.IRequest Request { get => throw null; } + public ServiceStack.Web.IResponse Response { get => throw null; } + public static string SerializeDictionary(System.Collections.Generic.IDictionary map) => throw null; + public static string[] UnknownChannel; + public void Unsubscribe() => throw null; + public System.Threading.Tasks.Task UnsubscribeAsync() => throw null; + public void UpdateChannels(string[] channels) => throw null; + public System.Action WriteEvent { get => throw null; set => throw null; } + public System.Func WriteEventAsync { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.FileExtensions` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class FileExtensions + { + public static bool IsRelativePath(this string relativeOrAbsolutePath) => throw null; + public static string MapServerPath(this string relativePath) => throw null; + public static string ReadAllText(this System.IO.FileInfo file) => throw null; + public static System.Byte[] ReadFully(this System.IO.FileInfo file) => throw null; + public static void SaveTo(this ServiceStack.Web.IHttpFile httpFile, string filePath) => throw null; + public static void SaveTo(this ServiceStack.Web.IHttpFile httpFile, ServiceStack.IO.IVirtualFiles vfs, string filePath) => throw null; + public static void WriteTo(this ServiceStack.Web.IHttpFile httpFile, System.IO.Stream stream) => throw null; + } + + // Generated from `ServiceStack.FilterExpression` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public abstract class FilterExpression + { + public abstract System.Collections.Generic.IEnumerable Apply(System.Collections.Generic.IEnumerable source); + protected FilterExpression() => throw null; + } + + // Generated from `ServiceStack.GenericAppHost` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class GenericAppHost : ServiceStack.ServiceStackHost + { + public System.Action ConfigFilter { get => throw null; set => throw null; } + public override void Configure(Funq.Container container) => throw null; + public System.Action ConfigureAppHost { get => throw null; set => throw null; } + public System.Action ConfigureContainer { get => throw null; set => throw null; } + public GenericAppHost(params System.Reflection.Assembly[] serviceAssemblies) : base(default(string), default(System.Reflection.Assembly[])) => throw null; + public override ServiceStack.IServiceGateway GetServiceGateway(ServiceStack.Web.IRequest req) => throw null; + public override void OnConfigLoad() => throw null; + } + + // Generated from `ServiceStack.GetFileService` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class GetFileService : ServiceStack.Service + { + public object Get(ServiceStack.GetFile request) => throw null; + public GetFileService() => throw null; + } + + // Generated from `ServiceStack.GreaterCondition` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class GreaterCondition : ServiceStack.QueryCondition + { + public override string Alias { get => throw null; } + public GreaterCondition() => throw null; + public override bool Match(object a, object b) => throw null; + } + + // Generated from `ServiceStack.GreaterEqualCondition` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class GreaterEqualCondition : ServiceStack.QueryCondition + { + public override string Alias { get => throw null; } + public GreaterEqualCondition() => throw null; + public static ServiceStack.GreaterEqualCondition Instance; + public override bool Match(object a, object b) => throw null; + } + + // Generated from `ServiceStack.HasPermissionsValidator` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class HasPermissionsValidator : ServiceStack.TypeValidator, ServiceStack.IAuthTypeValidator + { + public static string DefaultErrorMessage { get => throw null; set => throw null; } + public HasPermissionsValidator(string[] permissions) : base(default(string), default(string), default(int?)) => throw null; + public HasPermissionsValidator(string permission) : base(default(string), default(string), default(int?)) => throw null; + public override System.Threading.Tasks.Task IsValidAsync(object dto, ServiceStack.Web.IRequest request) => throw null; + public string[] Permissions { get => throw null; } + public override System.Threading.Tasks.Task ThrowIfNotValidAsync(object dto, ServiceStack.Web.IRequest request) => throw null; + } + + // Generated from `ServiceStack.HasRolesValidator` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class HasRolesValidator : ServiceStack.TypeValidator, ServiceStack.IAuthTypeValidator + { + public static string DefaultErrorMessage { get => throw null; set => throw null; } + public HasRolesValidator(string[] roles) : base(default(string), default(string), default(int?)) => throw null; + public HasRolesValidator(string role) : base(default(string), default(string), default(int?)) => throw null; + public override System.Threading.Tasks.Task IsValidAsync(object dto, ServiceStack.Web.IRequest request) => throw null; + public string[] Roles { get => throw null; } + public override System.Threading.Tasks.Task ThrowIfNotValidAsync(object dto, ServiceStack.Web.IRequest request) => throw null; + } + + // Generated from `ServiceStack.HelpMessages` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class HelpMessages + { + public static string NativeTypesDtoOptionsTip; + } + + // Generated from `ServiceStack.HostConfig` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class HostConfig + { + public System.Collections.Generic.Dictionary AddMaxAgeForStaticMimeTypes { get => throw null; set => throw null; } + public bool AddRedirectParamsToQueryString { get => throw null; set => throw null; } + public string AdminAuthSecret { get => throw null; set => throw null; } + public bool AllowAclUrlReservation { get => throw null; set => throw null; } + public System.Collections.Generic.HashSet AllowFileExtensions { get => throw null; set => throw null; } + public System.Collections.Generic.List AllowFilePaths { get => throw null; set => throw null; } + public bool AllowJsConfig { get => throw null; set => throw null; } + public bool AllowJsonpRequests { get => throw null; set => throw null; } + public bool AllowNonHttpOnlyCookies { set => throw null; } + public bool AllowPartialResponses { get => throw null; set => throw null; } + public bool AllowRouteContentTypeExtensions { get => throw null; set => throw null; } + public bool AllowSessionCookies { get => throw null; set => throw null; } + public bool AllowSessionIdsInHttpParams { get => throw null; set => throw null; } + public string ApiVersion { get => throw null; set => throw null; } + public ServiceStack.AppInfo AppInfo { get => throw null; set => throw null; } + public System.Collections.Generic.HashSet AppendUtf8CharsetOnContentTypes { get => throw null; set => throw null; } + public bool BufferSyncSerializers { get => throw null; set => throw null; } + public System.Int64? CompressFilesLargerThanBytes { get => throw null; set => throw null; } + public System.Collections.Generic.HashSet CompressFilesWithExtensions { get => throw null; set => throw null; } + public string DebugAspNetHostEnvironment { get => throw null; set => throw null; } + public string DebugHttpListenerHostEnvironment { get => throw null; set => throw null; } + public bool DebugMode { get => throw null; set => throw null; } + public string DefaultContentType { get => throw null; set => throw null; } + public System.Collections.Generic.List DefaultDocuments { get => throw null; set => throw null; } + public System.TimeSpan DefaultJsonpCacheExpiration { get => throw null; set => throw null; } + public string DefaultRedirectPath { get => throw null; set => throw null; } + public const string DefaultWsdlNamespace = default; + public bool DisposeDependenciesAfterUse { get => throw null; set => throw null; } + public System.Collections.Generic.List EmbeddedResourceBaseTypes { get => throw null; set => throw null; } + public System.Collections.Generic.List EmbeddedResourceSources { get => throw null; set => throw null; } + public System.Collections.Generic.HashSet EmbeddedResourceTreatAsFiles { get => throw null; set => throw null; } + public bool EnableAccessRestrictions { get => throw null; set => throw null; } + public bool EnableAutoHtmlResponses { get => throw null; set => throw null; } + public ServiceStack.Feature EnableFeatures { get => throw null; set => throw null; } + public bool EnableOptimizations { get => throw null; set => throw null; } + public System.Collections.Generic.List FallbackPasswordHashers { get => throw null; set => throw null; } + public ServiceStack.Host.FallbackRestPathDelegate FallbackRestPath { get => throw null; set => throw null; } + public System.Collections.Generic.List ForbiddenPaths { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary GlobalResponseHeaders { get => throw null; set => throw null; } + public string HandlerFactoryPath { get => throw null; set => throw null; } + public HostConfig() => throw null; + public System.Collections.Generic.Dictionary HtmlReplaceTokens { get => throw null; set => throw null; } + public System.Collections.Generic.HashSet IgnoreFormatsInMetadata { get => throw null; set => throw null; } + public bool IgnoreWarningsOnAllProperties { get => throw null; set => throw null; } + public System.Collections.Generic.List IgnoreWarningsOnPropertyNames { get => throw null; set => throw null; } + public static ServiceStack.HostConfig Instance { get => throw null; } + public System.Text.RegularExpressions.Regex IsMobileRegex { get => throw null; set => throw null; } + public ServiceStack.Logging.ILogFactory LogFactory { get => throw null; set => throw null; } + public bool LogUnobservedTaskExceptions { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary MapExceptionToStatusCode { get => throw null; set => throw null; } + public string MetadataRedirectPath { get => throw null; set => throw null; } + public ServiceStack.RequestAttributes MetadataVisibility { get => throw null; set => throw null; } + public static ServiceStack.HostConfig NewInstance() => throw null; + public bool OnlySendSessionCookiesSecurely { set => throw null; } + public string PathBase { get => throw null; set => throw null; } + public System.Collections.Generic.List PreferredContentTypes { get => throw null; set => throw null; } + public System.Collections.Generic.HashSet RazorNamespaces { get => throw null; } + public bool RedirectDirectoriesToTrailingSlashes { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary RedirectPaths { get => throw null; set => throw null; } + public bool RedirectToDefaultDocuments { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary> RequestRules { get => throw null; set => throw null; } + public static ServiceStack.HostConfig ResetInstance() => throw null; + public string RestrictAllCookiesToDomain { get => throw null; set => throw null; } + public bool Return204NoContentForEmptyResponse { get => throw null; set => throw null; } + public bool ReturnsInnerException { get => throw null; set => throw null; } + public System.Collections.Generic.List RouteNamingConventions { get => throw null; set => throw null; } + public System.Collections.Generic.List ScanSkipPaths { get => throw null; set => throw null; } + public ServiceStack.Metadata.ServiceEndpointsMetadataConfig ServiceEndpointsMetadataConfig { get => throw null; set => throw null; } + public static string ServiceStackPath; + public bool SkipFormDataInCreatingRequest { get => throw null; set => throw null; } + public string SoapServiceName { get => throw null; set => throw null; } + public bool? StrictMode { get => throw null; set => throw null; } + public bool StripApplicationVirtualPath { get => throw null; set => throw null; } + public bool TreatNonNullableRefTypesAsRequired { get => throw null; set => throw null; } + public bool UseBclJsonSerializers { get => throw null; set => throw null; } + public bool UseCamelCase { get => throw null; set => throw null; } + public bool UseHttpOnlyCookies { get => throw null; set => throw null; } + public bool UseHttpsLinks { get => throw null; set => throw null; } + public bool UseJsObject { get => throw null; set => throw null; } + public bool UseSaltedHash { get => throw null; set => throw null; } + public bool? UseSameSiteCookies { get => throw null; set => throw null; } + public bool UseSecureCookies { get => throw null; set => throw null; } + public string WebHostPhysicalPath { get => throw null; set => throw null; } + public string WebHostUrl { get => throw null; set => throw null; } + public bool WriteErrorsToResponse { get => throw null; set => throw null; } + public string WsdlServiceNamespace { get => throw null; set => throw null; } + public System.Xml.XmlWriterSettings XmlWriterSettings { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.HostContext` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class HostContext + { + public static ServiceStack.ServiceStackHost AppHost { get => throw null; } + public static ServiceStack.Configuration.IAppSettings AppSettings { get => throw null; } + public static bool ApplyCustomHandlerRequestFilters(ServiceStack.Web.IRequest httpReq, ServiceStack.Web.IResponse httpRes) => throw null; + public static bool ApplyPreRequestFilters(ServiceStack.Web.IRequest httpReq, ServiceStack.Web.IResponse httpRes) => throw null; + public static System.Threading.Tasks.Task ApplyRequestFiltersAsync(ServiceStack.Web.IRequest httpReq, ServiceStack.Web.IResponse httpRes, object requestDto) => throw null; + public static System.Threading.Tasks.Task ApplyResponseFiltersAsync(ServiceStack.Web.IRequest httpReq, ServiceStack.Web.IResponse httpRes, object response) => throw null; + public static ServiceStack.ServiceStackHost AssertAppHost() => throw null; + public static T AssertPlugin() where T : class, ServiceStack.IPlugin => throw null; + public static ServiceStack.AsyncContext Async; + public static ServiceStack.Caching.ICacheClient Cache { get => throw null; } + public static ServiceStack.Caching.ICacheClientAsync CacheClientAsync { get => throw null; } + public static ServiceStack.HostConfig Config { get => throw null; } + public static Funq.Container Container { get => throw null; } + public static ServiceStack.IO.IVirtualDirectory ContentRootDirectory { get => throw null; } + public static ServiceStack.Web.IContentTypes ContentTypes { get => throw null; } + public static ServiceStack.Web.IServiceRunner CreateServiceRunner(ServiceStack.Host.ActionContext actionContext) => throw null; + public static bool DebugMode { get => throw null; } + public static string DefaultOperationNamespace { get => throw null; set => throw null; } + public static ServiceStack.IO.FileSystemVirtualFiles FileSystemVirtualFiles { get => throw null; } + public static int FindFreeTcpPort(int startingFrom = default(int), int endingAt = default(int)) => throw null; + public static ServiceStack.Web.IRequest GetCurrentRequest() => throw null; + public static string GetDefaultNamespace() => throw null; + public static T GetPlugin() where T : class, ServiceStack.IPlugin => throw null; + public static ServiceStack.IO.GistVirtualFiles GistVirtualFiles { get => throw null; } + public static bool HasFeature(ServiceStack.Feature feature) => throw null; + public static bool HasPlugin() where T : class, ServiceStack.IPlugin => throw null; + public static bool HasValidAuthSecret(ServiceStack.Web.IRequest httpReq) => throw null; + public static bool IsAspNetHost { get => throw null; } + public static bool IsHttpListenerHost { get => throw null; } + public static bool IsNetCore { get => throw null; } + public static ServiceStack.Caching.MemoryCacheClient LocalCache { get => throw null; } + public static ServiceStack.IO.MemoryVirtualFiles MemoryVirtualFiles { get => throw null; } + public static ServiceStack.Host.ServiceMetadata Metadata { get => throw null; } + public static ServiceStack.Metadata.MetadataPagesConfig MetadataPagesConfig { get => throw null; } + public static System.Threading.Tasks.Task RaiseAndHandleException(ServiceStack.Web.IRequest httpReq, ServiceStack.Web.IResponse httpRes, string operationName, System.Exception ex) => throw null; + public static System.Threading.Tasks.Task RaiseGatewayException(ServiceStack.Web.IRequest httpReq, object request, System.Exception ex) => throw null; + public static System.Threading.Tasks.Task RaiseServiceException(ServiceStack.Web.IRequest httpReq, object request, System.Exception ex) => throw null; + public static System.Threading.Tasks.Task RaiseUncaughtException(ServiceStack.Web.IRequest httpReq, ServiceStack.Web.IResponse httpRes, string operationName, System.Exception ex) => throw null; + public static void Release(object service) => throw null; + public static ServiceStack.RequestContext RequestContext { get => throw null; } + public static T Resolve() => throw null; + public static string ResolveAbsoluteUrl(string virtualPath, ServiceStack.Web.IRequest httpReq) => throw null; + public static string ResolveLocalizedString(string text, ServiceStack.Web.IRequest request = default(ServiceStack.Web.IRequest)) => throw null; + public static string ResolvePhysicalPath(string virtualPath, ServiceStack.Web.IRequest httpReq) => throw null; + public static T ResolveService(ServiceStack.Web.IRequest httpReq, T service) => throw null; + public static T ResolveService(ServiceStack.Web.IRequest httpReq) where T : class, ServiceStack.Web.IRequiresRequest => throw null; + public static ServiceStack.IO.IVirtualDirectory RootDirectory { get => throw null; } + public static ServiceStack.Host.ServiceController ServiceController { get => throw null; } + public static string ServiceName { get => throw null; } + public static bool StrictMode { get => throw null; } + public static bool TestMode { get => throw null; set => throw null; } + public static ServiceStack.Web.IRequest TryGetCurrentRequest() => throw null; + public static T TryResolve() => throw null; + public static System.UnauthorizedAccessException UnauthorizedAccess(ServiceStack.RequestAttributes requestAttrs) => throw null; + public static ServiceStack.IO.IVirtualPathProvider VirtualFileSources { get => throw null; } + public static ServiceStack.IO.IVirtualFiles VirtualFiles { get => throw null; } + } + + // Generated from `ServiceStack.HotReloadFeature` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class HotReloadFeature : ServiceStack.Model.IHasStringId, ServiceStack.Model.IHasId, ServiceStack.IPlugin + { + public string DefaultPattern { set => throw null; } + public HotReloadFeature() => throw null; + public string Id { get => throw null; set => throw null; } + public void Register(ServiceStack.IAppHost appHost) => throw null; + public ServiceStack.IO.IVirtualPathProvider VirtualFiles { set => throw null; } + } + + // Generated from `ServiceStack.HotReloadFiles` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class HotReloadFiles : ServiceStack.IReturn, ServiceStack.IReturn + { + public string ETag { get => throw null; set => throw null; } + public HotReloadFiles() => throw null; + public string Pattern { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.HotReloadFilesService` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class HotReloadFilesService : ServiceStack.Service + { + public System.Threading.Tasks.Task Any(ServiceStack.HotReloadFiles request) => throw null; + public static System.TimeSpan CheckDelay; + public static string DefaultPattern { get => throw null; set => throw null; } + public static System.Collections.Generic.List ExcludePatterns { get => throw null; } + public HotReloadFilesService() => throw null; + public static System.TimeSpan LongPollDuration; + public static System.TimeSpan ModifiedDelay; + public static ServiceStack.IO.IVirtualPathProvider UseVirtualFiles { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.HotReloadPage` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class HotReloadPage : ServiceStack.IReturn, ServiceStack.IReturn + { + public string ETag { get => throw null; set => throw null; } + public HotReloadPage() => throw null; + public string Path { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.HotReloadPageResponse` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class HotReloadPageResponse + { + public string ETag { get => throw null; set => throw null; } + public HotReloadPageResponse() => throw null; + public string LastUpdatedPath { get => throw null; set => throw null; } + public bool Reload { get => throw null; set => throw null; } + public ServiceStack.ResponseStatus ResponseStatus { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.HotReloadPageService` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class HotReloadPageService : ServiceStack.Service + { + public System.Threading.Tasks.Task Any(ServiceStack.HotReloadPage request) => throw null; + public static System.TimeSpan CheckDelay; + public HotReloadPageService() => throw null; + public static System.TimeSpan LongPollDuration; + public static System.TimeSpan ModifiedDelay; + public ServiceStack.Script.ISharpPages Pages { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.HtmlOnly` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class HtmlOnly : ServiceStack.RequestFilterAttribute + { + public override void Execute(ServiceStack.Web.IRequest req, ServiceStack.Web.IResponse res, object requestDto) => throw null; + public HtmlOnly() => throw null; + } + + // Generated from `ServiceStack.HttpCacheExtensions` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class HttpCacheExtensions + { + public static bool ETagMatch(this ServiceStack.Web.IRequest req, string eTag) => throw null; + public static void EndNotModified(this ServiceStack.Web.IResponse res, string description = default(string)) => throw null; + public static bool Has(this ServiceStack.CacheControl cache, ServiceStack.CacheControl flag) => throw null; + public static bool HasValidCache(this ServiceStack.Web.IRequest req, string eTag, System.DateTime? lastModified) => throw null; + public static bool HasValidCache(this ServiceStack.Web.IRequest req, string eTag) => throw null; + public static bool HasValidCache(this ServiceStack.Web.IRequest req, System.DateTime? lastModified) => throw null; + public static bool NotModifiedSince(this ServiceStack.Web.IRequest req, System.DateTime? lastModified) => throw null; + public static bool ShouldAddLastModifiedToOptimizedResults(this ServiceStack.HttpCacheFeature feature) => throw null; + } + + // Generated from `ServiceStack.HttpCacheFeature` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class HttpCacheFeature : ServiceStack.Model.IHasStringId, ServiceStack.Model.IHasId, ServiceStack.IPlugin + { + public string BuildCacheControlHeader(ServiceStack.CacheInfo cacheInfo) => throw null; + public System.Func CacheControlFilter { get => throw null; set => throw null; } + public string CacheControlForOptimizedResults { get => throw null; set => throw null; } + public System.TimeSpan DefaultExpiresIn { get => throw null; set => throw null; } + public System.TimeSpan DefaultMaxAge { get => throw null; set => throw null; } + public bool DisableCaching { get => throw null; set => throw null; } + public System.Threading.Tasks.Task HandleCacheResponses(ServiceStack.Web.IRequest req, ServiceStack.Web.IResponse res, object response) => throw null; + public HttpCacheFeature() => throw null; + public string Id { get => throw null; set => throw null; } + public void Register(ServiceStack.IAppHost appHost) => throw null; + } + + // Generated from `ServiceStack.HttpError` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class HttpError : System.Exception, ServiceStack.Web.IHttpResult, ServiceStack.Web.IHttpError, ServiceStack.Web.IHasOptions, ServiceStack.Model.IResponseStatusConvertible, ServiceStack.IHasResponseStatus, ServiceStack.IHasErrorCode + { + public static System.Exception BadRequest(string message) => throw null; + public static System.Exception BadRequest(string errorCode, string message) => throw null; + public static System.Exception Conflict(string message) => throw null; + public string ContentType { get => throw null; set => throw null; } + public System.Collections.Generic.List Cookies { get => throw null; set => throw null; } + public string ErrorCode { get => throw null; set => throw null; } + public static System.Exception ExpectationFailed(string message) => throw null; + public static System.Exception Forbidden(string message) => throw null; + public System.Collections.Generic.List GetFieldErrors() => throw null; + public System.Collections.Generic.Dictionary Headers { get => throw null; set => throw null; } + public HttpError(string message, System.Exception innerException) => throw null; + public HttpError(string message) => throw null; + public HttpError(object responseDto, int statusCode, string errorCode, string errorMessage = default(string), System.Exception innerException = default(System.Exception)) => throw null; + public HttpError(object responseDto, System.Net.HttpStatusCode statusCode, string errorCode, string errorMessage) => throw null; + public HttpError(int statusCode, string errorCode, string errorMessage, System.Exception innerException = default(System.Exception)) => throw null; + public HttpError(int statusCode, string errorCode) => throw null; + public HttpError(System.Net.HttpStatusCode statusCode, string errorMessage) => throw null; + public HttpError(System.Net.HttpStatusCode statusCode, string errorCode, string errorMessage) => throw null; + public HttpError(System.Net.HttpStatusCode statusCode, System.Exception innerException) => throw null; + public HttpError(System.Net.HttpStatusCode statusCode) => throw null; + public HttpError() => throw null; + public static System.Exception MethodNotAllowed(string message) => throw null; + public static System.Exception NotFound(string message) => throw null; + public static System.Exception NotImplemented(string message) => throw null; + public System.Collections.Generic.IDictionary Options { get => throw null; } + public int PaddingLength { get => throw null; set => throw null; } + public static System.Exception PreconditionFailed(string message) => throw null; + public ServiceStack.Web.IRequest RequestContext { get => throw null; set => throw null; } + public object Response { get => throw null; set => throw null; } + public ServiceStack.Web.IContentTypeWriter ResponseFilter { get => throw null; set => throw null; } + public ServiceStack.ResponseStatus ResponseStatus { get => throw null; set => throw null; } + public System.Func ResultScope { get => throw null; set => throw null; } + public static System.Exception ServiceUnavailable(string message) => throw null; + public int Status { get => throw null; set => throw null; } + public System.Net.HttpStatusCode StatusCode { get => throw null; set => throw null; } + public string StatusDescription { get => throw null; set => throw null; } + public ServiceStack.ResponseStatus ToResponseStatus() => throw null; + public static System.Exception Unauthorized(string message) => throw null; + public static System.Exception Validation(string errorCode, string errorMessage, string fieldName) => throw null; + } + + // Generated from `ServiceStack.HttpExtensions` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class HttpExtensions + { + public static void EndHttpHandlerRequest(this ServiceStack.Web.IResponse httpRes, bool skipHeaders = default(bool), bool skipClose = default(bool), System.Action afterHeaders = default(System.Action)) => throw null; + public static System.Threading.Tasks.Task EndHttpHandlerRequestAsync(this ServiceStack.Web.IResponse httpRes, bool skipHeaders = default(bool), bool skipClose = default(bool), System.Func afterHeaders = default(System.Func)) => throw null; + public static void EndMqRequest(this ServiceStack.Web.IResponse httpRes, bool skipClose = default(bool)) => throw null; + public static void EndRequest(this ServiceStack.Web.IResponse httpRes, bool skipHeaders = default(bool)) => throw null; + public static System.Threading.Tasks.Task EndRequestAsync(this ServiceStack.Web.IResponse httpRes, bool skipHeaders = default(bool), System.Func afterHeaders = default(System.Func)) => throw null; + public static void EndRequestWithNoContent(this ServiceStack.Web.IResponse httpRes) => throw null; + public static string ToAbsoluteUri(this string relativeUrl, ServiceStack.Web.IRequest req = default(ServiceStack.Web.IRequest)) => throw null; + public static string ToAbsoluteUri(this object requestDto, string httpMethod = default(string), string formatFallbackToPredefinedRoute = default(string)) => throw null; + public static string ToAbsoluteUri(this object requestDto, ServiceStack.Web.IRequest req, string httpMethod = default(string), string formatFallbackToPredefinedRoute = default(string)) => throw null; + public static string ToAbsoluteUri(this ServiceStack.IReturn requestDto, string httpMethod = default(string), string formatFallbackToPredefinedRoute = default(string)) => throw null; + } + + // Generated from `ServiceStack.HttpHandlerFactory` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class HttpHandlerFactory : ServiceStack.Host.IHttpHandlerFactory + { + public static string DebugLastHandlerArgs; + public static ServiceStack.Host.IHttpHandler DefaultHttpHandler; + public static string DefaultRootFileName; + public static ServiceStack.Host.IHttpHandler ForbiddenHttpHandler; + public static ServiceStack.Host.IHttpHandler GetHandler(ServiceStack.Web.IHttpRequest httpReq) => throw null; + public static ServiceStack.Host.IHttpHandler GetHandlerForPathInfo(ServiceStack.Web.IHttpRequest httpReq, string filePath) => throw null; + public HttpHandlerFactory() => throw null; + public static ServiceStack.Host.Handlers.RedirectHttpHandler NonRootModeDefaultHttpHandler; + public static ServiceStack.Host.IHttpHandler NotFoundHttpHandler; + public void ReleaseHandler(ServiceStack.Host.IHttpHandler handler) => throw null; + public static bool ShouldAllow(string pathInfo) => throw null; + public static ServiceStack.Host.IHttpHandler StaticFilesHandler; + public static string WebHostPhysicalPath; + } + + // Generated from `ServiceStack.HttpRequestExtensions` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class HttpRequestExtensions + { + public static bool CanReadRequestBody(this ServiceStack.Web.IRequest req) => throw null; + public static System.Collections.Generic.Dictionary CookiesAsDictionary(this ServiceStack.Web.IRequest httpReq) => throw null; + public static bool DidReturn304NotModified(this ServiceStack.Web.IRequest httpReq, System.DateTime? dateTime, ServiceStack.Web.IResponse httpRes) => throw null; + public static void EachRequest(this ServiceStack.Web.IRequest httpReq, System.Action action) => throw null; + public static string GetAbsolutePath(this ServiceStack.Web.IRequest httpReq) => throw null; + public static string GetAbsoluteUrl(this ServiceStack.Web.IRequest httpReq, string url) => throw null; + public static string GetApplicationUrl(this ServiceStack.Web.IRequest httpReq) => throw null; + public static ServiceStack.RequestAttributes GetAttributes(this ServiceStack.Web.IRequest request) => throw null; + public static ServiceStack.RequestAttributes GetAttributes(System.Net.IPAddress ipAddress) => throw null; + public static string GetBaseUrl(this ServiceStack.Web.IRequest httpReq) => throw null; + public static System.Collections.Generic.IEnumerable GetClaims(this ServiceStack.Web.IRequest req) => throw null; + public static string GetDirectoryPath(this ServiceStack.Web.IRequest request) => throw null; + public static string GetErrorView(this ServiceStack.Web.IRequest httpReq) => throw null; + public static System.Collections.Generic.Dictionary GetFlattenedRequestParams(this ServiceStack.Web.IRequest request) => throw null; + public static string GetFormatModifier(this ServiceStack.Web.IRequest httpReq) => throw null; + public static string GetHttpMethodOverride(this ServiceStack.Web.IRequest httpReq) => throw null; + public static string GetItemOrCookie(this ServiceStack.Web.IRequest httpReq, string name) => throw null; + public static string GetJsonpCallback(this ServiceStack.Web.IRequest httpReq) => throw null; + public static string GetLastPathInfo(this Microsoft.AspNetCore.Http.HttpRequest request) => throw null; + public static string GetLeftAuthority(this System.Uri uri) => throw null; + public static string GetOperationName(this Microsoft.AspNetCore.Http.HttpRequest request) => throw null; + public static string GetOperationNameFromLastPathInfo(string lastPathInfo) => throw null; + public static System.Type GetOperationType(this ServiceStack.Web.IRequest req) => throw null; + public static string GetParam(this ServiceStack.Web.IRequest httpReq, string name) => throw null; + public static string GetParentAbsolutePath(this ServiceStack.Web.IRequest httpReq) => throw null; + public static string GetParentBaseUrl(this ServiceStack.Web.IRequest request) => throw null; + public static string GetParentPathUrl(this ServiceStack.Web.IRequest httpReq) => throw null; + public static string GetPathAndQuery(this Microsoft.AspNetCore.Http.HttpRequest request) => throw null; + public static string GetPathInfo(string fullPath, string mode, string appPath) => throw null; + public static string GetPathUrl(this ServiceStack.Web.IRequest httpReq) => throw null; + public static string GetPhysicalPath(this ServiceStack.Web.IRequest httpReq) => throw null; + public static string GetQueryStringContentType(this ServiceStack.Web.IRequest httpReq) => throw null; + public static string GetQueryStringOrForm(this ServiceStack.Web.IRequest httpReq, string name) => throw null; + public static string GetRawUrl(this ServiceStack.Web.IRequest httpReq) => throw null; + public static string GetRequestValue(this ServiceStack.Web.IHttpRequest req, string name) => throw null; + public static string GetResponseContentType(this ServiceStack.Web.IRequest httpReq) => throw null; + public static string GetReturnUrl(this ServiceStack.Web.IRequest req) => throw null; + public static ServiceStack.Host.RestPath GetRoute(this ServiceStack.Web.IRequest req) => throw null; + public static string GetTemplate(this ServiceStack.Web.IRequest httpReq) => throw null; + public static string GetUrlHostName(this ServiceStack.Web.IRequest httpReq) => throw null; + public static string GetView(this ServiceStack.Web.IRequest httpReq) => throw null; + public static ServiceStack.IO.IVirtualNode GetVirtualNode(this ServiceStack.Web.IRequest httpReq) => throw null; + public static bool HasAnyOfContentTypes(this ServiceStack.Web.IRequest request, params string[] contentTypes) => throw null; + public static bool HasClaim(this System.Collections.Generic.IEnumerable claims, string type, string value) => throw null; + public static bool HasNotModifiedSince(this ServiceStack.Web.IRequest httpReq, System.DateTime? dateTime) => throw null; + public static bool HasRole(this System.Collections.Generic.IEnumerable claims, string role) => throw null; + public static bool HasScope(this System.Collections.Generic.IEnumerable claims, string scope) => throw null; + public static string InferBaseUrl(this string absoluteUri, string fromPathInfo = default(string)) => throw null; + public static bool IsContentType(this ServiceStack.Web.IRequest request, string contentType) => throw null; + public static bool IsHtml(this ServiceStack.Web.IRequest req) => throw null; + public static bool IsInLocalSubnet(this System.Net.IPAddress ipAddress) => throw null; + public static bool IsMultiRequest(this ServiceStack.Web.IRequest req) => throw null; + public static string NormalizeScheme(this string url, bool useHttps) => throw null; + public static string ResolveAbsoluteUrl(this ServiceStack.Web.IRequest httpReq, string virtualPath = default(string)) => throw null; + public static object ResolveItem(this ServiceStack.Web.IRequest httpReq, string itemKey, System.Func resolveFn) => throw null; + public static string ResolvePathInfoFromMappedPath(string fullPath, string mappedPathRoot) => throw null; + public static void SetAutoBatchCompletedHeader(this ServiceStack.Web.IRequest req, int completed) => throw null; + public static void SetErrorView(this ServiceStack.Web.IRequest httpReq, string viewName) => throw null; + public static void SetRoute(this ServiceStack.Web.IRequest req, ServiceStack.Host.RestPath route) => throw null; + public static void SetTemplate(this ServiceStack.Web.IRequest httpReq, string templateName) => throw null; + public static void SetView(this ServiceStack.Web.IRequest httpReq, string viewName) => throw null; + public static string ToErrorCode(this System.Exception ex) => throw null; + public static ServiceStack.RequestAttributes ToRequestAttributes(string[] attrNames) => throw null; + public static int ToStatusCode(this System.Exception ex) => throw null; + public static ServiceStack.WebServiceException ToWebServiceException(this ServiceStack.HttpError error) => throw null; + public static ServiceStack.WebServiceException ToWebServiceException(this ServiceStack.FluentValidation.Results.ValidationResult validationResult, object requestDto, ServiceStack.Validation.ValidationFeature feature) => throw null; + public static bool UseHttps(this ServiceStack.Web.IRequest httpReq) => throw null; + } + + // Generated from `ServiceStack.HttpResponseExtensions` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class HttpResponseExtensions + { + public static void AddHeaderLastModified(this ServiceStack.Web.IResponse httpRes, System.DateTime? lastModified) => throw null; + public static string AddParam(this string url, string key, string val) => throw null; + public static string AddParam(this string url, string key, object val) => throw null; + public static ServiceStack.Web.IResponse AllowSyncIO(this ServiceStack.Web.IResponse res) => throw null; + public static ServiceStack.Web.IRequest AllowSyncIO(this ServiceStack.Web.IRequest req) => throw null; + public static Microsoft.AspNetCore.Http.HttpRequest AllowSyncIO(this Microsoft.AspNetCore.Http.HttpRequest req) => throw null; + public static Microsoft.AspNetCore.Http.HttpContext AllowSyncIO(this Microsoft.AspNetCore.Http.HttpContext ctx) => throw null; + public static void ClearCookies(this ServiceStack.Web.IResponse response) => throw null; + public static System.Collections.Generic.Dictionary CookiesAsDictionary(this ServiceStack.Web.IResponse httpRes) => throw null; + public static void DeleteCookie(this ServiceStack.Web.IResponse response, string cookieName) => throw null; + public static void EndWith(this ServiceStack.Web.IResponse res, System.Net.HttpStatusCode code, string description = default(string)) => throw null; + public static bool IsHttpListener; + public static bool IsMonoFastCgi; + public static bool IsNetCore; + public static void Redirect(this ServiceStack.Web.IResponse httpRes, string url) => throw null; + public static void RedirectToUrl(this ServiceStack.Web.IResponse httpRes, string url, System.Net.HttpStatusCode redirectStatusCode = default(System.Net.HttpStatusCode)) => throw null; + public static System.Threading.Tasks.Task ReturnAuthRequired(this ServiceStack.Web.IResponse httpRes, string authRealm) => throw null; + public static System.Threading.Tasks.Task ReturnAuthRequired(this ServiceStack.Web.IResponse httpRes, ServiceStack.AuthenticationHeaderType AuthType, string authRealm) => throw null; + public static System.Threading.Tasks.Task ReturnAuthRequired(this ServiceStack.Web.IResponse httpRes) => throw null; + public static System.Threading.Tasks.Task ReturnFailedAuthentication(this ServiceStack.Auth.IAuthSession session, ServiceStack.Web.IRequest request) => throw null; + public static void SetCookie(this ServiceStack.Web.IResponse response, string cookieName, string cookieValue, System.TimeSpan expiresIn, string path = default(string)) => throw null; + public static void SetCookie(this ServiceStack.Web.IResponse response, string cookieName, string cookieValue, System.DateTime expiresAt, string path = default(string)) => throw null; + public static void SetCookie(this ServiceStack.Web.IResponse response, System.Net.Cookie cookie) => throw null; + public static string SetParam(this string url, string key, string val) => throw null; + public static string SetParam(this string url, string key, object val) => throw null; + public static void SetPermanentCookie(this ServiceStack.Web.IResponse response, string cookieName, string cookieValue) => throw null; + public static void SetSessionCookie(this ServiceStack.Web.IResponse response, string cookieName, string cookieValue) => throw null; + public static void TransmitFile(this ServiceStack.Web.IResponse httpRes, string filePath) => throw null; + public static void Write(this ServiceStack.Web.IResponse response, string contents) => throw null; + public static System.Threading.Tasks.Task WriteAsync(this ServiceStack.Web.IResponse response, string contents) => throw null; + public static void WriteFile(this ServiceStack.Web.IResponse httpRes, string filePath) => throw null; + } + + // Generated from `ServiceStack.HttpResponseExtensionsInternal` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class HttpResponseExtensionsInternal + { + public static void ApplyGlobalResponseHeaders(this ServiceStack.Web.IResponse httpRes) => throw null; + public static bool ShouldWriteGlobalHeaders(ServiceStack.Web.IResponse httpRes) => throw null; + public static System.Threading.Tasks.Task WriteBytesToResponse(this ServiceStack.Web.IResponse res, System.Byte[] responseBytes, string contentType, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task WriteError(this ServiceStack.Web.IResponse httpRes, object dto, string errorMessage) => throw null; + public static System.Threading.Tasks.Task WriteError(this ServiceStack.Web.IResponse httpRes, System.Exception ex, int statusCode = default(int), string errorMessage = default(string), string contentType = default(string)) => throw null; + public static System.Threading.Tasks.Task WriteError(this ServiceStack.Web.IResponse httpRes, ServiceStack.Web.IRequest httpReq, object dto, string errorMessage) => throw null; + public static System.Threading.Tasks.Task WriteErrorBody(this ServiceStack.Web.IResponse httpRes, System.Exception ex) => throw null; + public static System.Threading.Tasks.Task WriteErrorToResponse(this ServiceStack.Web.IResponse httpRes, ServiceStack.Web.IRequest httpReq, string contentType, string operationName, string errorMessage, System.Exception ex, int statusCode) => throw null; + public static bool WriteToOutputStream(ServiceStack.Web.IResponse response, object result, System.Byte[] bodyPrefix, System.Byte[] bodySuffix) => throw null; + public static System.Threading.Tasks.Task WriteToOutputStreamAsync(ServiceStack.Web.IResponse response, object result, System.Byte[] bodyPrefix, System.Byte[] bodySuffix, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task WriteToResponse(this ServiceStack.Web.IResponse response, object result, ServiceStack.Web.StreamSerializerDelegateAsync defaultAction, ServiceStack.Web.IRequest request, System.Byte[] bodyPrefix, System.Byte[] bodySuffix, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task WriteToResponse(this ServiceStack.Web.IResponse httpRes, object result, string contentType, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task WriteToResponse(this ServiceStack.Web.IResponse httpRes, object result, ServiceStack.Web.StreamSerializerDelegateAsync serializer, ServiceStack.Web.IRequest serializationContext, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task WriteToResponse(this ServiceStack.Web.IResponse httpRes, ServiceStack.Web.IRequest httpReq, object result, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task WriteToResponse(this ServiceStack.Web.IResponse httpRes, ServiceStack.Web.IRequest httpReq, object result, System.Byte[] bodyPrefix, System.Byte[] bodySuffix, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + } + + // Generated from `ServiceStack.HttpResult` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class HttpResult : System.IDisposable, ServiceStack.Web.IStreamWriterAsync, ServiceStack.Web.IPartialWriterAsync, ServiceStack.Web.IHttpResult, ServiceStack.Web.IHasOptions + { + public System.TimeSpan? Age { get => throw null; set => throw null; } + public bool AllowsPartialResponse { get => throw null; set => throw null; } + public ServiceStack.CacheControl CacheControl { get => throw null; set => throw null; } + public string ContentType { get => throw null; set => throw null; } + public System.Collections.Generic.List Cookies { get => throw null; } + public void DeleteCookie(string name) => throw null; + public void Dispose() => throw null; + public string ETag { get => throw null; set => throw null; } + public System.DateTime? Expires { get => throw null; set => throw null; } + public System.IO.FileInfo FileInfo { get => throw null; } + public System.Int64? GetContentLength() => throw null; + public System.Collections.Generic.Dictionary Headers { get => throw null; } + public HttpResult(string responseText, string contentType) => throw null; + public HttpResult(object response, string contentType, System.Net.HttpStatusCode statusCode) => throw null; + public HttpResult(object response, string contentType) => throw null; + public HttpResult(object response, System.Net.HttpStatusCode statusCode) => throw null; + public HttpResult(object response) => throw null; + public HttpResult(System.Net.HttpStatusCode statusCode, string statusDescription) => throw null; + public HttpResult(System.IO.Stream responseStream, string contentType) => throw null; + public HttpResult(System.IO.FileInfo fileResponse, string contentType = default(string), bool asAttachment = default(bool)) => throw null; + public HttpResult(System.IO.FileInfo fileResponse, bool asAttachment) => throw null; + public HttpResult(System.Byte[] responseBytes, string contentType) => throw null; + public HttpResult(ServiceStack.IO.IVirtualFile fileResponse, string contentType = default(string), bool asAttachment = default(bool)) => throw null; + public HttpResult(ServiceStack.IO.IVirtualFile fileResponse, bool asAttachment) => throw null; + public HttpResult() => throw null; + public bool IsPartialRequest { get => throw null; } + public System.DateTime? LastModified { get => throw null; set => throw null; } + public string Location { set => throw null; } + public System.TimeSpan? MaxAge { get => throw null; set => throw null; } + public static ServiceStack.HttpResult NotModified(string description = default(string), ServiceStack.CacheControl? cacheControl = default(ServiceStack.CacheControl?), System.TimeSpan? maxAge = default(System.TimeSpan?), string eTag = default(string), System.DateTime? lastModified = default(System.DateTime?)) => throw null; + public System.Collections.Generic.IDictionary Options { get => throw null; } + public int PaddingLength { get => throw null; set => throw null; } + public static ServiceStack.HttpResult Redirect(string newLocationUri, System.Net.HttpStatusCode redirectStatus = default(System.Net.HttpStatusCode)) => throw null; + public ServiceStack.Web.IRequest RequestContext { get => throw null; set => throw null; } + public object Response { get => throw null; set => throw null; } + public ServiceStack.Web.IContentTypeWriter ResponseFilter { get => throw null; set => throw null; } + public System.IO.Stream ResponseStream { get => throw null; set => throw null; } + public string ResponseText { get => throw null; } + public System.Func ResultScope { get => throw null; set => throw null; } + public void SetCookie(string name, string value, System.TimeSpan expiresIn, string path) => throw null; + public void SetCookie(string name, string value, System.DateTime expiresAt, string path, bool secure = default(bool), bool httpOnly = default(bool)) => throw null; + public void SetPermanentCookie(string name, string value, string path) => throw null; + public void SetPermanentCookie(string name, string value) => throw null; + public void SetSessionCookie(string name, string value, string path) => throw null; + public void SetSessionCookie(string name, string value) => throw null; + public static ServiceStack.HttpResult SoftRedirect(string newLocationUri, object response = default(object)) => throw null; + public int Status { get => throw null; set => throw null; } + public static ServiceStack.HttpResult Status201Created(object response, string newLocationUri) => throw null; + public System.Net.HttpStatusCode StatusCode { get => throw null; set => throw null; } + public string StatusDescription { get => throw null; set => throw null; } + public string Template { get => throw null; set => throw null; } + public static ServiceStack.HttpResult TriggerEvent(object response, string eventName, string value = default(string)) => throw null; + public string View { get => throw null; set => throw null; } + public System.Threading.Tasks.Task WritePartialToAsync(ServiceStack.Web.IResponse response, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task WriteToAsync(System.IO.Stream responseStream, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + } + + // Generated from `ServiceStack.HttpResultExtensions` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class HttpResultExtensions + { + public static ServiceStack.Web.IHttpResult AddCookie(this ServiceStack.Web.IHttpResult httpResult, ServiceStack.Web.IRequest req, System.Net.Cookie cookie) => throw null; + } + + // Generated from `ServiceStack.HttpResultUtils` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class HttpResultUtils + { + public static void AddHttpRangeResponseHeaders(this ServiceStack.Web.IResponse response, System.Int64 rangeStart, System.Int64 rangeEnd, System.Int64 contentLength) => throw null; + public static object CreateErrorResponse(this ServiceStack.Web.IHttpError httpError) => throw null; + public static void ExtractHttpRanges(this string rangeHeader, System.Int64 contentLength, out System.Int64 rangeStart, out System.Int64 rangeEnd) => throw null; + public static object GetDto(this object response) => throw null; + public static TResponse GetDto(this object response) where TResponse : class => throw null; + public static object GetResponseDto(this object response) => throw null; + public static TResponse GetResponseDto(this object response) where TResponse : class => throw null; + public static bool IsErrorResponse(this object response) => throw null; + public static void WritePartialTo(this System.IO.Stream fromStream, System.IO.Stream toStream, System.Int64 start, System.Int64 end) => throw null; + public static System.Threading.Tasks.Task WritePartialToAsync(this System.IO.Stream fromStream, System.IO.Stream toStream, System.Int64 start, System.Int64 end, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + } + + // Generated from `ServiceStack.IAfterInitAppHost` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IAfterInitAppHost + { + void AfterInit(ServiceStack.IAppHost appHost); + } + + // Generated from `ServiceStack.IAppHost` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IAppHost : ServiceStack.Configuration.IResolver + { + System.Collections.Generic.List AddVirtualFileSources { get; } + System.Collections.Generic.List> AfterInitCallbacks { get; } + ServiceStack.Configuration.IAppSettings AppSettings { get; } + System.Collections.Generic.List CatchAllHandlers { get; } + ServiceStack.HostConfig Config { get; } + ServiceStack.IO.IVirtualDirectory ContentRootDirectory { get; } + ServiceStack.Web.IContentTypes ContentTypes { get; } + ServiceStack.Web.IServiceRunner CreateServiceRunner(ServiceStack.Host.ActionContext actionContext); + System.Collections.Generic.Dictionary CustomErrorHttpHandlers { get; } + object EvalExpression(string expr); + object EvalExpressionCached(string expr); + object EvalScriptValue(ServiceStack.IScriptValue scriptValue, ServiceStack.Web.IRequest req = default(ServiceStack.Web.IRequest), System.Collections.Generic.Dictionary args = default(System.Collections.Generic.Dictionary)); + System.Threading.Tasks.Task EvalScriptValueAsync(ServiceStack.IScriptValue scriptValue, ServiceStack.Web.IRequest req = default(ServiceStack.Web.IRequest), System.Collections.Generic.Dictionary args = default(System.Collections.Generic.Dictionary)); + object ExecuteMessage(ServiceStack.Messaging.IMessage mqMessage); + System.Threading.Tasks.Task ExecuteMessageAsync(ServiceStack.Messaging.IMessage mqMessage, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Collections.Generic.List FallbackHandlers { get; } + System.Collections.Generic.List GatewayExceptionHandlers { get; } + System.Collections.Generic.List GatewayExceptionHandlersAsync { get; } + System.Collections.Generic.List> GatewayRequestFilters { get; } + System.Collections.Generic.List> GatewayResponseFilters { get; } + T GetRuntimeConfig(ServiceStack.Web.IRequest req, string name, T defaultValue); + ServiceStack.Host.Handlers.IServiceStackHandler GlobalHtmlErrorHttpHandler { get; } + System.Collections.Generic.List> GlobalMessageRequestFilters { get; } + System.Collections.Generic.List> GlobalMessageRequestFiltersAsync { get; } + System.Collections.Generic.List> GlobalMessageResponseFilters { get; } + System.Collections.Generic.List> GlobalMessageResponseFiltersAsync { get; } + System.Collections.Generic.List> GlobalRequestFilters { get; } + System.Collections.Generic.List> GlobalRequestFiltersAsync { get; } + System.Collections.Generic.List> GlobalResponseFilters { get; } + System.Collections.Generic.List> GlobalResponseFiltersAsync { get; set; } + System.Collections.Generic.List InsertVirtualFileSources { get; set; } + void LoadPlugin(params ServiceStack.IPlugin[] plugins); + string MapProjectPath(string relativePath); + ServiceStack.Host.ServiceMetadata Metadata { get; } + System.Collections.Generic.List> OnDisposeCallbacks { get; } + void OnEndRequest(ServiceStack.Web.IRequest request = default(ServiceStack.Web.IRequest)); + System.Collections.Generic.List> OnEndRequestCallbacks { get; } + string PathBase { get; } + System.Collections.Generic.List Plugins { get; } + System.Collections.Generic.List> PreRequestFilters { get; } + void PublishMessage(ServiceStack.Messaging.IMessageProducer messageProducer, T message); + System.Collections.Generic.List> RawHttpHandlers { get; } + void Register(T instance); + void RegisterAs() where T : TAs; + void RegisterService(System.Type serviceType, params string[] atRestPaths); + void RegisterServicesInAssembly(System.Reflection.Assembly assembly); + void RegisterTypedMessageRequestFilter(System.Action filterFn); + void RegisterTypedMessageResponseFilter(System.Action filterFn); + void RegisterTypedRequestFilter(System.Func> filter); + void RegisterTypedRequestFilter(System.Action filterFn); + void RegisterTypedRequestFilterAsync(System.Func filterFn); + void RegisterTypedRequestFilterAsync(System.Func> filter); + void RegisterTypedResponseFilter(System.Func> filter); + void RegisterTypedResponseFilter(System.Action filterFn); + void RegisterTypedResponseFilterAsync(System.Func filterFn); + void RegisterTypedResponseFilterAsync(System.Func> filter); + void Release(object instance); + System.Collections.Generic.Dictionary> RequestBinders { get; } + System.Collections.Generic.List>> RequestConverters { get; } + string ResolveAbsoluteUrl(string virtualPath, ServiceStack.Web.IRequest httpReq); + string ResolveLocalizedString(string text, ServiceStack.Web.IRequest request); + System.Collections.Generic.List>> ResponseConverters { get; } + ServiceStack.IO.IVirtualDirectory RootDirectory { get; } + ServiceStack.Web.IServiceRoutes Routes { get; } + ServiceStack.Script.ScriptContext ScriptContext { get; } + System.Collections.Generic.List ServiceAssemblies { get; } + ServiceStack.Host.ServiceController ServiceController { get; } + System.Collections.Generic.List ServiceExceptionHandlers { get; } + System.Collections.Generic.List ServiceExceptionHandlersAsync { get; } + System.Collections.Generic.List UncaughtExceptionHandlers { get; } + System.Collections.Generic.List UncaughtExceptionHandlersAsync { get; } + System.Collections.Generic.List ViewEngines { get; } + ServiceStack.IO.IVirtualPathProvider VirtualFileSources { get; set; } + ServiceStack.IO.IVirtualFiles VirtualFiles { get; set; } + } + + // Generated from `ServiceStack.IAppHostNetCore` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IAppHostNetCore : ServiceStack.IRequireConfiguration, ServiceStack.IAppHost, ServiceStack.Configuration.IResolver + { + Microsoft.AspNetCore.Builder.IApplicationBuilder App { get; } + Microsoft.AspNetCore.Hosting.IHostingEnvironment HostingEnvironment { get; } + } + + // Generated from `ServiceStack.IAuthPlugin` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IAuthPlugin + { + void Register(ServiceStack.IAppHost appHost, ServiceStack.AuthFeature feature); + } + + // Generated from `ServiceStack.IAuthTypeValidator` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IAuthTypeValidator + { + } + + // Generated from `ServiceStack.IAutoQueryData` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IAutoQueryData + { + ServiceStack.QueryDataContext CreateContext(ServiceStack.IQueryData requestDto, System.Collections.Generic.Dictionary dynamicParams, ServiceStack.Web.IRequest req); + ServiceStack.IDataQuery CreateQuery(ServiceStack.IQueryData dto, System.Collections.Generic.Dictionary dynamicParams, ServiceStack.Web.IRequest req, ServiceStack.IQueryDataSource db); + ServiceStack.DataQuery CreateQuery(ServiceStack.IQueryData dto, System.Collections.Generic.Dictionary dynamicParams, ServiceStack.Web.IRequest req = default(ServiceStack.Web.IRequest), ServiceStack.IQueryDataSource db = default(ServiceStack.IQueryDataSource)); + ServiceStack.DataQuery CreateQuery(ServiceStack.IQueryData dto, System.Collections.Generic.Dictionary dynamicParams, ServiceStack.Web.IRequest req = default(ServiceStack.Web.IRequest), ServiceStack.IQueryDataSource db = default(ServiceStack.IQueryDataSource)); + ServiceStack.QueryResponse Execute(ServiceStack.IQueryData request, ServiceStack.DataQuery q, ServiceStack.Web.IRequest req = default(ServiceStack.Web.IRequest), ServiceStack.IQueryDataSource db = default(ServiceStack.IQueryDataSource)); + ServiceStack.QueryResponse Execute(ServiceStack.IQueryData request, ServiceStack.DataQuery q, ServiceStack.Web.IRequest req = default(ServiceStack.Web.IRequest), ServiceStack.IQueryDataSource db = default(ServiceStack.IQueryDataSource)); + ServiceStack.IQueryResponse Execute(ServiceStack.IQueryData request, ServiceStack.IDataQuery q, ServiceStack.IQueryDataSource db); + ServiceStack.IQueryDataSource GetDb(ServiceStack.QueryDataContext ctx); + ServiceStack.IQueryDataSource GetDb(ServiceStack.QueryDataContext ctx, System.Type type); + System.Type GetFromType(System.Type requestDtoType); + ServiceStack.ITypedQueryData GetTypedQuery(System.Type requestDtoType, System.Type fromType); + } + + // Generated from `ServiceStack.IAutoQueryDataOptions` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IAutoQueryDataOptions + { + bool EnableUntypedQueries { get; set; } + System.Collections.Generic.Dictionary EndsWithConventions { get; set; } + System.Collections.Generic.HashSet IgnoreProperties { get; set; } + bool IncludeTotal { get; set; } + int? MaxLimit { get; set; } + bool OrderByPrimaryKeyOnLimitQuery { get; set; } + System.Collections.Generic.Dictionary StartsWithConventions { get; set; } + } + + // Generated from `ServiceStack.IAutoQueryDbFilters` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IAutoQueryDbFilters + { + object sendToAutoQuery(ServiceStack.Script.ScriptScopeContext scope, object dto, string requestName, object options); + } + + // Generated from `ServiceStack.ICancellableRequest` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface ICancellableRequest : System.IDisposable + { + System.TimeSpan Elapsed { get; } + System.Threading.CancellationToken Token { get; } + System.Threading.CancellationTokenSource TokenSource { get; } + } + + // Generated from `ServiceStack.IConfigureApp` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IConfigureApp + { + void Configure(Microsoft.AspNetCore.Builder.IApplicationBuilder app); + } + + // Generated from `ServiceStack.IConfigureAppHost` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IConfigureAppHost + { + void Configure(ServiceStack.IAppHost appHost); + } + + // Generated from `ServiceStack.IConfigureServices` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IConfigureServices + { + void Configure(Microsoft.Extensions.DependencyInjection.IServiceCollection services); + } + + // Generated from `ServiceStack.IDataQuery` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IDataQuery + { + void AddCondition(ServiceStack.QueryTerm defaultTerm, System.Reflection.PropertyInfo field, ServiceStack.QueryCondition condition, object value); + void And(string field, ServiceStack.QueryCondition condition, string value); + System.Collections.Generic.List Conditions { get; } + ServiceStack.IQueryData Dto { get; } + System.Collections.Generic.Dictionary DynamicParams { get; } + System.Tuple FirstMatchingField(string name); + bool HasConditions { get; } + void Join(System.Type joinType, System.Type type); + void LeftJoin(System.Type joinType, System.Type type); + void Limit(int? skip, int? take); + int? Offset { get; } + System.Collections.Generic.HashSet OnlyFields { get; } + void Or(string field, ServiceStack.QueryCondition condition, string value); + ServiceStack.OrderByExpression OrderBy { get; } + void OrderByFields(string[] fieldNames); + void OrderByFieldsDescending(string[] fieldNames); + void OrderByPrimaryKey(); + int? Rows { get; } + void Select(string[] fields); + } + + // Generated from `ServiceStack.IEventSubscription` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IEventSubscription : System.IDisposable + { + string[] Channels { get; } + System.Collections.Generic.Dictionary ConnectArgs { get; set; } + System.DateTime CreatedAt { get; set; } + string DisplayName { get; } + bool IsAuthenticated { get; set; } + bool IsClosed { get; } + string JsonArgs { get; } + System.Int64 LastMessageId { get; } + System.DateTime LastPulseAt { get; set; } + string[] MergedChannels { get; } + System.Collections.Concurrent.ConcurrentDictionary Meta { get; set; } + System.Action OnUnsubscribe { get; set; } + System.Func OnUnsubscribeAsync { get; set; } + void Publish(string selector, string message); + System.Threading.Tasks.Task PublishAsync(string selector, string message, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + void PublishRaw(string frame); + System.Threading.Tasks.Task PublishRawAsync(string frame, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + void Pulse(); + System.Collections.Generic.Dictionary ServerArgs { get; set; } + string SessionId { get; } + string SubscriptionId { get; } + void Unsubscribe(); + System.Threading.Tasks.Task UnsubscribeAsync(); + void UpdateChannels(string[] channels); + string UserAddress { get; set; } + string UserId { get; } + string UserName { get; } + } + + // Generated from `ServiceStack.IHasAppHost` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IHasAppHost + { + ServiceStack.IAppHost AppHost { get; } + } + + // Generated from `ServiceStack.IHasServiceScope` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IHasServiceScope : System.IServiceProvider + { + Microsoft.Extensions.DependencyInjection.IServiceScope ServiceScope { get; set; } + } + + // Generated from `ServiceStack.IHasServiceStackProvider` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IHasServiceStackProvider + { + ServiceStack.IServiceStackProvider ServiceStackProvider { get; } + } + + // Generated from `ServiceStack.IHasTypeValidators` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IHasTypeValidators + { + System.Collections.Generic.List TypeValidators { get; } + } + + // Generated from `ServiceStack.ILogic` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface ILogic : ServiceStack.IRepository + { + ServiceStack.Caching.ICacheClient Cache { get; } + ServiceStack.Messaging.IMessageFactory MessageFactory { get; } + ServiceStack.Messaging.IMessageProducer MessageProducer { get; } + void PublishMessage(T message); + ServiceStack.Redis.IRedisClient Redis { get; } + ServiceStack.Redis.IRedisClientsManager RedisManager { get; } + } + + // Generated from `ServiceStack.IMarkdownTransformer` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IMarkdownTransformer + { + string Transform(string markdown); + } + + // Generated from `ServiceStack.IMsgPackPlugin` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IMsgPackPlugin + { + } + + // Generated from `ServiceStack.INetSerializerPlugin` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface INetSerializerPlugin + { + } + + // Generated from `ServiceStack.IPlugin` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IPlugin + { + void Register(ServiceStack.IAppHost appHost); + } + + // Generated from `ServiceStack.IPostInitPlugin` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IPostInitPlugin + { + void AfterPluginsLoaded(ServiceStack.IAppHost appHost); + } + + // Generated from `ServiceStack.IPreConfigureAppHost` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IPreConfigureAppHost + { + void PreConfigure(ServiceStack.IAppHost appHost); + } + + // Generated from `ServiceStack.IPreInitPlugin` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IPreInitPlugin + { + void BeforePluginsLoaded(ServiceStack.IAppHost appHost); + } + + // Generated from `ServiceStack.IProtoBufPlugin` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IProtoBufPlugin + { + string GetProto(System.Type type); + } + + // Generated from `ServiceStack.IQueryDataSource` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IQueryDataSource : System.IDisposable + { + int Count(ServiceStack.IDataQuery q); + ServiceStack.IDataQuery From(); + System.Collections.Generic.List LoadSelect(ServiceStack.IDataQuery q); + object SelectAggregate(ServiceStack.IDataQuery q, string name, System.Collections.Generic.IEnumerable args); + } + + // Generated from `ServiceStack.IQueryDataSource<>` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IQueryDataSource : System.IDisposable, ServiceStack.IQueryDataSource + { + } + + // Generated from `ServiceStack.IQueryMultiple` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IQueryMultiple + { + } + + // Generated from `ServiceStack.IRazorPlugin` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IRazorPlugin + { + } + + // Generated from `ServiceStack.IRepository` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IRepository + { + System.Data.IDbConnection Db { get; } + ServiceStack.Data.IDbConnectionFactory DbFactory { get; } + } + + // Generated from `ServiceStack.IRequireConfiguration` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IRequireConfiguration + { + Microsoft.Extensions.Configuration.IConfiguration Configuration { get; set; } + } + + // Generated from `ServiceStack.IServerEvents` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IServerEvents : System.IDisposable + { + System.Collections.Generic.List GetAllSubscriptionInfos(); + System.Collections.Generic.List> GetAllSubscriptionsDetails(); + ServiceStack.MemoryServerEvents GetMemoryServerEvents(); + System.Int64 GetNextSequence(string sequenceId); + System.Collections.Generic.Dictionary GetStats(); + ServiceStack.SubscriptionInfo GetSubscriptionInfo(string id); + System.Collections.Generic.List GetSubscriptionInfosByUserId(string userId); + System.Collections.Generic.List> GetSubscriptionsDetails(params string[] channels); + void NotifyAll(string selector, object message); + System.Threading.Tasks.Task NotifyAllAsync(string selector, object message, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task NotifyAllJsonAsync(string selector, string json, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + void NotifyChannel(string channel, string selector, object message); + System.Threading.Tasks.Task NotifyChannelAsync(string channel, string selector, object message, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task NotifyChannelJsonAsync(string channel, string selector, string json, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + void NotifySession(string sessionId, string selector, object message, string channel = default(string)); + System.Threading.Tasks.Task NotifySessionAsync(string sessionId, string selector, object message, string channel = default(string), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task NotifySessionJsonAsync(string sessionId, string selector, string json, string channel = default(string), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + void NotifySubscription(string subscriptionId, string selector, object message, string channel = default(string)); + System.Threading.Tasks.Task NotifySubscriptionAsync(string subscriptionId, string selector, object message, string channel = default(string), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task NotifySubscriptionJsonAsync(string subscriptionId, string selector, string json, string channel = default(string), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + void NotifyUserId(string userId, string selector, object message, string channel = default(string)); + System.Threading.Tasks.Task NotifyUserIdAsync(string userId, string selector, object message, string channel = default(string), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task NotifyUserIdJsonAsync(string userId, string selector, string json, string channel = default(string), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + void NotifyUserName(string userName, string selector, object message, string channel = default(string)); + System.Threading.Tasks.Task NotifyUserNameAsync(string userName, string selector, object message, string channel = default(string), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task NotifyUserNameJsonAsync(string userName, string selector, string json, string channel = default(string), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task PulseAsync(string subscriptionId, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + void QueueAsyncTask(System.Func task); + System.Threading.Tasks.Task RegisterAsync(ServiceStack.IEventSubscription subscription, System.Collections.Generic.Dictionary connectArgs = default(System.Collections.Generic.Dictionary), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + int RemoveExpiredSubscriptions(); + System.Threading.Tasks.Task RemoveExpiredSubscriptionsAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + void Reset(); + void Start(); + void Stop(); + System.Threading.Tasks.Task StopAsync(); + void SubscribeToChannels(string subscriptionId, string[] channels); + System.Threading.Tasks.Task SubscribeToChannelsAsync(string subscriptionId, string[] channels, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task UnRegisterAsync(string subscriptionId, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + void UnsubscribeFromChannels(string subscriptionId, string[] channels); + System.Threading.Tasks.Task UnsubscribeFromChannelsAsync(string subscriptionId, string[] channels, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + } + + // Generated from `ServiceStack.IServiceBase` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IServiceBase : ServiceStack.Web.IRequiresRequest, ServiceStack.Configuration.IResolver + { + ServiceStack.Configuration.IResolver GetResolver(); + T ResolveService(); + } + + // Generated from `ServiceStack.IServiceStackProvider` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IServiceStackProvider : System.IDisposable + { + ServiceStack.Configuration.IAppSettings AppSettings { get; } + ServiceStack.Auth.IAuthRepository AuthRepository { get; } + ServiceStack.Auth.IAuthRepositoryAsync AuthRepositoryAsync { get; } + ServiceStack.Caching.ICacheClient Cache { get; } + ServiceStack.Caching.ICacheClientAsync CacheAsync { get; } + void ClearSession(); + System.Threading.Tasks.Task ClearSessionAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Data.IDbConnection Db { get; } + object Execute(object requestDto); + object Execute(ServiceStack.Web.IRequest request); + TResponse Execute(ServiceStack.IReturn requestDto); + ServiceStack.IServiceGateway Gateway { get; } + System.Threading.Tasks.ValueTask GetRedisAsync(); + ServiceStack.Configuration.IResolver GetResolver(); + ServiceStack.Auth.IAuthSession GetSession(bool reload = default(bool)); + System.Threading.Tasks.Task GetSessionAsync(bool reload = default(bool), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + bool IsAuthenticated { get; } + ServiceStack.Messaging.IMessageProducer MessageProducer { get; } + void PublishMessage(T message); + ServiceStack.Redis.IRedisClient Redis { get; } + ServiceStack.Web.IHttpRequest Request { get; } + T ResolveService(); + ServiceStack.Web.IHttpResponse Response { get; } + ServiceStack.RpcGateway RpcGateway { get; } + TUserSession SessionAs(); + System.Threading.Tasks.Task SessionAsAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + ServiceStack.Caching.ISession SessionBag { get; } + ServiceStack.Caching.ISessionAsync SessionBagAsync { get; } + ServiceStack.Caching.ISessionFactory SessionFactory { get; } + void SetResolver(ServiceStack.Configuration.IResolver resolver); + T TryResolve(); + } + + // Generated from `ServiceStack.ITypeValidator` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface ITypeValidator + { + string ErrorCode { get; set; } + System.Threading.Tasks.Task IsValidAsync(object dto, ServiceStack.Web.IRequest request); + string Message { get; set; } + int? StatusCode { get; set; } + System.Threading.Tasks.Task ThrowIfNotValidAsync(object dto, ServiceStack.Web.IRequest request); + } + + // Generated from `ServiceStack.ITypedQueryData` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface ITypedQueryData + { + ServiceStack.IDataQuery AddToQuery(ServiceStack.IDataQuery q, ServiceStack.IQueryData request, System.Collections.Generic.Dictionary dynamicParams, ServiceStack.IAutoQueryDataOptions options = default(ServiceStack.IAutoQueryDataOptions)); + ServiceStack.IDataQuery CreateQuery(ServiceStack.IQueryDataSource db); + ServiceStack.QueryResponse Execute(ServiceStack.IQueryDataSource db, ServiceStack.IDataQuery query); + } + + // Generated from `ServiceStack.IWirePlugin` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IWirePlugin + { + } + + // Generated from `ServiceStack.IWriteEvent` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IWriteEvent + { + void WriteEvent(string msg); + } + + // Generated from `ServiceStack.IWriteEventAsync` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IWriteEventAsync + { + System.Threading.Tasks.Task WriteEventAsync(string msg, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + } + + // Generated from `ServiceStack.ImageExtensions` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class ImageExtensions + { + public static System.IO.MemoryStream CropToPng(this System.Drawing.Image img, int newWidth, int newHeight, int startX = default(int), int startY = default(int)) => throw null; + public static System.IO.MemoryStream ResizeToPng(this System.Drawing.Image img, int newWidth, int newHeight) => throw null; + } + + // Generated from `ServiceStack.InBetweenCondition` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class InBetweenCondition : ServiceStack.QueryCondition, ServiceStack.IQueryMultiple + { + public override string Alias { get => throw null; } + public InBetweenCondition() => throw null; + public override bool Match(object a, object b) => throw null; + } + + // Generated from `ServiceStack.InCollectionCondition` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class InCollectionCondition : ServiceStack.QueryCondition, ServiceStack.IQueryMultiple + { + public override string Alias { get => throw null; } + public InCollectionCondition() => throw null; + public static ServiceStack.InCollectionCondition Instance; + public override bool Match(object a, object b) => throw null; + } + + // Generated from `ServiceStack.InProcessServiceGateway` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class InProcessServiceGateway : ServiceStack.IServiceGatewayAsync, ServiceStack.IServiceGateway + { + public InProcessServiceGateway(ServiceStack.Web.IRequest req) => throw null; + public void Publish(object requestDto) => throw null; + public void PublishAll(System.Collections.Generic.IEnumerable requestDtos) => throw null; + public System.Threading.Tasks.Task PublishAllAsync(System.Collections.Generic.IEnumerable requestDtos, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task PublishAsync(object requestDto, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public ServiceStack.Web.IRequest Request { get => throw null; } + public TResponse Send(object requestDto) => throw null; + public System.Collections.Generic.List SendAll(System.Collections.Generic.IEnumerable requestDtos) => throw null; + public System.Threading.Tasks.Task> SendAllAsync(System.Collections.Generic.IEnumerable requestDtos, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task SendAsync(object requestDto, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + } + + // Generated from `ServiceStack.InfoScripts` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class InfoScripts : ServiceStack.Script.ScriptMethods + { + public InfoScripts() => throw null; + public string env(string variable) => throw null; + public string envCommandLine() => throw null; + public string[] envCommandLineArgs() => throw null; + public string envCurrentDirectory() => throw null; + public string envExpandVariables(string name) => throw null; + public string envFrameworkDescription() => throw null; + public bool envIs64BitOperatingSystem() => throw null; + public bool envIs64BitProcess() => throw null; + public bool envIsAndroid() => throw null; + public bool envIsIOS() => throw null; + public bool envIsLinux() => throw null; + public bool envIsMono() => throw null; + public bool envIsOSX() => throw null; + public bool envIsWindows() => throw null; + public string[] envLogicalDrives() => throw null; + public string envMachineName() => throw null; + public System.Runtime.InteropServices.Architecture envOSArchitecture() => throw null; + public string envOSDescription() => throw null; + public System.OperatingSystem envOSVersion() => throw null; + public System.Char envPathSeparator() => throw null; + public int envProcessorCount() => throw null; + public string envServerUserAgent() => throw null; + public System.Decimal envServiceStackVersion() => throw null; + public string envStackTrace() => throw null; + public string envSystemDirectory() => throw null; + public int envTickCount() => throw null; + public string envUserDomainName() => throw null; + public string envUserName() => throw null; + public string envVariable(string variable) => throw null; + public System.Collections.IDictionary envVariables() => throw null; + public System.Version envVersion() => throw null; + public ServiceStack.HostConfig hostConfig(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public string hostServiceName(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public bool isUnix() => throw null; + public bool isWin() => throw null; + public string licensedFeatures() => throw null; + public System.Collections.Generic.List metaAllDtoNames() => throw null; + public System.Collections.Generic.HashSet metaAllDtos() => throw null; + public System.Collections.Generic.List metaAllOperationNames() => throw null; + public System.Collections.Generic.List metaAllOperationTypes() => throw null; + public System.Collections.Generic.IEnumerable metaAllOperations() => throw null; + public ServiceStack.Host.Operation metaOperation(string name) => throw null; + public System.Collections.Generic.List networkIpv4Addresses() => throw null; + public System.Collections.Generic.List networkIpv6Addresses() => throw null; + public System.Collections.Generic.List plugins() => throw null; + public string userEmail(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public bool userHasPermission(ServiceStack.Script.ScriptScopeContext scope, string permission) => throw null; + public bool userHasRole(ServiceStack.Script.ScriptScopeContext scope, string role) => throw null; + public string userId(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public string userName(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public string userPermanentSessionId(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public ServiceStack.Auth.IAuthSession userSession(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public string userSessionId(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public System.Collections.Generic.HashSet userSessionOptions(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public string userTempSessionId(ServiceStack.Script.ScriptScopeContext scope) => throw null; + } + + // Generated from `ServiceStack.IsAuthenticatedValidator` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class IsAuthenticatedValidator : ServiceStack.TypeValidator, ServiceStack.IAuthTypeValidator + { + public static string DefaultErrorMessage { get => throw null; set => throw null; } + public static ServiceStack.IsAuthenticatedValidator Instance { get => throw null; } + public IsAuthenticatedValidator(string provider) : base(default(string), default(string), default(int?)) => throw null; + public IsAuthenticatedValidator() : base(default(string), default(string), default(int?)) => throw null; + public override System.Threading.Tasks.Task IsValidAsync(object dto, ServiceStack.Web.IRequest request) => throw null; + public string Provider { get => throw null; } + } + + // Generated from `ServiceStack.JsonOnly` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class JsonOnly : ServiceStack.RequestFilterAttribute + { + public override void Execute(ServiceStack.Web.IRequest req, ServiceStack.Web.IResponse res, object requestDto) => throw null; + public JsonOnly() => throw null; + } + + // Generated from `ServiceStack.JsvOnly` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class JsvOnly : ServiceStack.RequestFilterAttribute + { + public override void Execute(ServiceStack.Web.IRequest req, ServiceStack.Web.IResponse res, object requestDto) => throw null; + public JsvOnly() => throw null; + } + + // Generated from `ServiceStack.Keywords` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class Keywords + { + public const string AccessTokenAuth = default; + public const string Allows = default; + public const string ApiKey = default; + public static string ApiKeyParam; + public const string Attributes = default; + public static string AuthSecret; + public const string Authorization = default; + public static string AutoBatchIndex; + public static string Bare; + public const string CacheInfo = default; + public static string Callback; + public const string Code = default; + public static string Continue; + public const string Count = default; + public const string DbInfo = default; + public static string Debug; + public const string DidAuthenticate = default; + public const string Dynamic = default; + public const string Embed = default; + public const string Error = default; + public const string ErrorStatus = default; + public const string ErrorView = default; + public const string EventModelId = default; + public static string Format; + public const string GrpcResponseStatus = default; + public const string HasGlobalHeaders = default; + public const string HasLogged = default; + public const string HasPreAuthenticated = default; + public const string HttpStatus = default; + public const string IRequest = default; + public const string Id = default; + public static string Ignore; + public const string IgnoreEvent = default; + public static string IgnorePlaceHolder; + public const string InvokeVerb = default; + public static string JsConfig; + public const string Model = default; + public static string NoRedirect; + public static string PermanentSessionId; + public static string Redirect; + public static string RefreshTokenCookie; + public const string RequestDuration = default; + public static string RequestInfo; + public const string Reset = default; + public const string Result = default; + public static string ReturnUrl; + public const string Route = default; + public const string RowVersion = default; + public const string Session = default; + public static string SessionId; + public static string SessionOptionsKey; + public static string SoapMessage; + public const string State = default; + public const string Template = default; + public static string TokenCookie; + public static string Version; + public static string VersionAbbr; + public const string View = default; + public static string XCookies; + public const string reset = default; + } + + // Generated from `ServiceStack.LessCondition` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class LessCondition : ServiceStack.QueryCondition + { + public override string Alias { get => throw null; } + public LessCondition() => throw null; + public override bool Match(object a, object b) => throw null; + } + + // Generated from `ServiceStack.LessEqualCondition` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class LessEqualCondition : ServiceStack.QueryCondition + { + public override string Alias { get => throw null; } + public static ServiceStack.LessEqualCondition Instance; + public LessEqualCondition() => throw null; + public override bool Match(object a, object b) => throw null; + } + + // Generated from `ServiceStack.LispReplTcpServer` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class LispReplTcpServer : System.IDisposable, ServiceStack.Model.IHasStringId, ServiceStack.Model.IHasId, ServiceStack.IPreInitPlugin, ServiceStack.IPlugin, ServiceStack.IAfterInitAppHost + { + public void AfterInit(ServiceStack.IAppHost appHost) => throw null; + public bool? AllowScriptingOfAllTypes { get => throw null; set => throw null; } + public void BeforePluginsLoaded(ServiceStack.IAppHost appHost) => throw null; + public void Dispose() => throw null; + public string Id { get => throw null; set => throw null; } + public LispReplTcpServer(string localIp, int port) => throw null; + public LispReplTcpServer(int port) => throw null; + public LispReplTcpServer(System.Net.IPAddress localIp, int port) => throw null; + public LispReplTcpServer() => throw null; + public void Register(ServiceStack.IAppHost appHost) => throw null; + public bool RequireAuthSecret { get => throw null; set => throw null; } + public System.Collections.Generic.List ScanAssemblies { get => throw null; set => throw null; } + public System.Collections.Generic.List ScanTypes { get => throw null; set => throw null; } + public System.Collections.Generic.List ScriptAssemblies { get => throw null; set => throw null; } + public System.Collections.Generic.List ScriptBlocks { get => throw null; set => throw null; } + public ServiceStack.Script.ScriptContext ScriptContext { get => throw null; set => throw null; } + public System.Collections.Generic.List ScriptMethods { get => throw null; set => throw null; } + public System.Collections.Generic.List ScriptNamespaces { get => throw null; set => throw null; } + public System.Collections.Generic.List ScriptTypes { get => throw null; set => throw null; } + public void Start() => throw null; + public void StartListening() => throw null; + public void Stop() => throw null; + } + + // Generated from `ServiceStack.LocalizedStrings` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class LocalizedStrings + { + public const string AssignRoles = default; + public const string Auth = default; + public const string Authenticate = default; + public const string Login = default; + public const string NotModified = default; + public const string Redirect = default; + public const string UnassignRoles = default; + } + + // Generated from `ServiceStack.LogExtensions` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class LogExtensions + { + public static void ErrorStrict(this ServiceStack.Logging.ILog log, string message, System.Exception ex) => throw null; + public static bool IsNullOrNullLogFactory(this ServiceStack.Logging.ILogFactory factory) => throw null; + } + + // Generated from `ServiceStack.LogicBase` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public abstract class LogicBase : ServiceStack.RepositoryBase, ServiceStack.IRepository, ServiceStack.ILogic + { + public virtual ServiceStack.Caching.ICacheClient Cache { get => throw null; set => throw null; } + public override void Dispose() => throw null; + protected LogicBase() => throw null; + public virtual ServiceStack.Messaging.IMessageFactory MessageFactory { get => throw null; set => throw null; } + public virtual ServiceStack.Messaging.IMessageProducer MessageProducer { get => throw null; set => throw null; } + public virtual void PublishMessage(T message) => throw null; + public virtual ServiceStack.Redis.IRedisClient Redis { get => throw null; } + public virtual ServiceStack.Redis.IRedisClientsManager RedisManager { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.MarkdownConfig` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class MarkdownConfig + { + public static string Transform(string html) => throw null; + public static ServiceStack.IMarkdownTransformer Transformer { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.MarkdownPageFormat` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class MarkdownPageFormat : ServiceStack.Script.PageFormat + { + public MarkdownPageFormat() => throw null; + public static System.Threading.Tasks.Task TransformToHtml(System.IO.Stream markdownStream) => throw null; + } + + // Generated from `ServiceStack.MarkdownScriptBlock` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class MarkdownScriptBlock : ServiceStack.Script.ScriptBlock + { + public override ServiceStack.Script.ScriptLanguage Body { get => throw null; } + public MarkdownScriptBlock() => throw null; + public override string Name { get => throw null; } + public override System.Threading.Tasks.Task WriteAsync(ServiceStack.Script.ScriptScopeContext scope, ServiceStack.Script.PageBlockFragment block, System.Threading.CancellationToken token) => throw null; + } + + // Generated from `ServiceStack.MarkdownScriptMethods` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class MarkdownScriptMethods : ServiceStack.Script.ScriptMethods + { + public MarkdownScriptMethods() => throw null; + public ServiceStack.IRawString markdown(string markdown) => throw null; + } + + // Generated from `ServiceStack.MarkdownScriptPlugin` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class MarkdownScriptPlugin : ServiceStack.Script.IScriptPlugin + { + public MarkdownScriptPlugin() => throw null; + public void Register(ServiceStack.Script.ScriptContext context) => throw null; + public bool RegisterPageFormat { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.MarkdownTemplateFilter` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class MarkdownTemplateFilter : ServiceStack.MarkdownScriptMethods + { + public MarkdownTemplateFilter() => throw null; + } + + // Generated from `ServiceStack.MarkdownTemplatePlugin` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class MarkdownTemplatePlugin : ServiceStack.MarkdownScriptPlugin + { + public MarkdownTemplatePlugin() => throw null; + } + + // Generated from `ServiceStack.MemoryDataSource<>` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class MemoryDataSource : ServiceStack.QueryDataSource + { + public System.Collections.Generic.IEnumerable Data { get => throw null; } + public override System.Collections.Generic.IEnumerable GetDataSource(ServiceStack.IDataQuery q) => throw null; + public MemoryDataSource(System.Collections.Generic.IEnumerable data, ServiceStack.IQueryData dto, ServiceStack.Web.IRequest req) : base(default(ServiceStack.QueryDataContext)) => throw null; + public MemoryDataSource(ServiceStack.QueryDataContext context, System.Collections.Generic.IEnumerable data) : base(default(ServiceStack.QueryDataContext)) => throw null; + } + + // Generated from `ServiceStack.MemoryServerEvents` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class MemoryServerEvents : System.IDisposable, ServiceStack.IServerEvents + { + public System.Collections.Concurrent.ConcurrentDictionary> ChannelSubscriptions; + public void Dispose() => throw null; + public System.Threading.Tasks.Task DisposeAsync() => throw null; + protected System.Threading.Tasks.Task FlushNopAsync(System.Collections.Concurrent.ConcurrentDictionary> map, string key, string channel = default(string), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static bool FlushNopOnSubscription; + public System.Threading.Tasks.Task FlushNopToChannelsAsync(string[] channels, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Collections.Generic.List GetAllSubscriptionInfos() => throw null; + public System.Collections.Generic.List> GetAllSubscriptionsDetails() => throw null; + public ServiceStack.MemoryServerEvents GetMemoryServerEvents() => throw null; + public System.Int64 GetNextSequence(string sequenceId) => throw null; + public System.Collections.Generic.Dictionary GetStats() => throw null; + public ServiceStack.IEventSubscription GetSubscription(string id) => throw null; + public ServiceStack.SubscriptionInfo GetSubscriptionInfo(string id) => throw null; + public System.Collections.Generic.List GetSubscriptionInfosByUserId(string userId) => throw null; + public System.Collections.Generic.List> GetSubscriptionsDetails(params string[] channels) => throw null; + public System.TimeSpan HouseKeepingInterval { get => throw null; set => throw null; } + public System.TimeSpan IdleTimeout { get => throw null; set => throw null; } + public MemoryServerEvents() => throw null; + protected void Notify(System.Collections.Concurrent.ConcurrentDictionary> map, string key, string selector, object message, string channel = default(string)) => throw null; + protected void Notify(System.Collections.Concurrent.ConcurrentDictionary map, string key, string selector, object message, string channel = default(string)) => throw null; + public void NotifyAll(string selector, object message) => throw null; + public System.Threading.Tasks.Task NotifyAllAsync(string selector, object message, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task NotifyAllJsonAsync(string selector, string json, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + protected System.Threading.Tasks.Task NotifyAsync(System.Collections.Concurrent.ConcurrentDictionary> map, string key, string selector, object message, string channel = default(string), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + protected System.Threading.Tasks.Task NotifyAsync(System.Collections.Concurrent.ConcurrentDictionary map, string key, string selector, object message, string channel = default(string), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public void NotifyChannel(string channel, string selector, object message) => throw null; + public System.Threading.Tasks.Task NotifyChannelAsync(string channel, string selector, object message, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task NotifyChannelJsonAsync(string channel, string selector, string json, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public bool NotifyChannelOfSubscriptions { get => throw null; set => throw null; } + public System.Threading.Tasks.Task NotifyChannelsAsync(string[] channels, string selector, string body, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Func NotifyHeartbeatAsync { get => throw null; set => throw null; } + public System.Func NotifyJoinAsync { get => throw null; set => throw null; } + public System.Func NotifyLeaveAsync { get => throw null; set => throw null; } + protected void NotifyRaw(System.Collections.Concurrent.ConcurrentDictionary> map, string key, string selector, string body, string channel = default(string)) => throw null; + protected System.Threading.Tasks.Task NotifyRawAsync(System.Collections.Concurrent.ConcurrentDictionary> map, string key, string selector, string body, string channel = default(string), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + protected System.Threading.Tasks.Task NotifyRawAsync(System.Collections.Concurrent.ConcurrentDictionary map, string key, string selector, string body, string channel = default(string), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public void NotifySession(string sessionId, string selector, object message, string channel = default(string)) => throw null; + public System.Threading.Tasks.Task NotifySessionAsync(string sessionId, string selector, object message, string channel = default(string), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task NotifySessionJsonAsync(string sessionId, string selector, string json, string channel = default(string), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public void NotifySubscription(string subscriptionId, string selector, object message, string channel = default(string)) => throw null; + public System.Threading.Tasks.Task NotifySubscriptionAsync(string subscriptionId, string selector, object message, string channel = default(string), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task NotifySubscriptionJsonAsync(string subscriptionId, string selector, string json, string channel = default(string), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Func NotifyUpdateAsync { get => throw null; set => throw null; } + public void NotifyUserId(string userId, string selector, object message, string channel = default(string)) => throw null; + public System.Threading.Tasks.Task NotifyUserIdAsync(string userId, string selector, object message, string channel = default(string), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task NotifyUserIdJsonAsync(string userId, string selector, string json, string channel = default(string), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public void NotifyUserName(string userName, string selector, object message, string channel = default(string)) => throw null; + public System.Threading.Tasks.Task NotifyUserNameAsync(string userName, string selector, object message, string channel = default(string), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task NotifyUserNameJsonAsync(string userName, string selector, string json, string channel = default(string), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Action OnError { get => throw null; set => throw null; } + public System.Func OnSubscribeAsync { get => throw null; set => throw null; } + public System.Func OnUnsubscribeAsync { get => throw null; set => throw null; } + public System.Func OnUpdateAsync { get => throw null; set => throw null; } + public bool Pulse(string id) => throw null; + public System.Threading.Tasks.Task PulseAsync(string id, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public void QueueAsyncTask(System.Func task) => throw null; + public System.Threading.Tasks.Task RegisterAsync(ServiceStack.IEventSubscription subscription, System.Collections.Generic.Dictionary connectArgs = default(System.Collections.Generic.Dictionary), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public void RegisterHungConnection(ServiceStack.IEventSubscription sub) => throw null; + public int RemoveExpiredSubscriptions() => throw null; + public System.Threading.Tasks.Task RemoveExpiredSubscriptionsAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public void Reset() => throw null; + public System.Func Serialize { get => throw null; set => throw null; } + public System.Collections.Concurrent.ConcurrentDictionary> SessionSubscriptions; + public void Start() => throw null; + public void Stop() => throw null; + public System.Threading.Tasks.Task StopAsync() => throw null; + public void SubscribeToChannels(string subscriptionId, string[] channels) => throw null; + public System.Threading.Tasks.Task SubscribeToChannelsAsync(string subscriptionId, string[] channels, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Collections.Concurrent.ConcurrentDictionary Subscriptions; + public void UnRegister(string subscriptionId, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task UnRegisterAsync(string subscriptionId, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public void UnsubscribeFromChannels(string subscriptionId, string[] channels) => throw null; + public System.Threading.Tasks.Task UnsubscribeFromChannelsAsync(string subscriptionId, string[] channels, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Collections.Concurrent.ConcurrentDictionary> UserIdSubscriptions; + public System.Collections.Concurrent.ConcurrentDictionary> UserNameSubscriptions; + } + + // Generated from `ServiceStack.MemoryValidationSource` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class MemoryValidationSource : ServiceStack.IValidationSourceAdmin, ServiceStack.IValidationSource, ServiceStack.Auth.IClearable + { + public void Clear() => throw null; + public System.Threading.Tasks.Task ClearCacheAsync() => throw null; + public System.Threading.Tasks.Task DeleteValidationRulesAsync(params int[] ids) => throw null; + public System.Threading.Tasks.Task> GetAllValidateRulesAsync(string typeName) => throw null; + public System.Threading.Tasks.Task> GetValidateRulesByIdsAsync(params int[] ids) => throw null; + public System.Collections.Generic.IEnumerable> GetValidationRules(System.Type type) => throw null; + public MemoryValidationSource() => throw null; + public System.Threading.Tasks.Task SaveValidationRulesAsync(System.Collections.Generic.List validateRules) => throw null; + public static System.Collections.Concurrent.ConcurrentDictionary[]> TypeRulesMap; + } + + // Generated from `ServiceStack.MetadataAppService` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class MetadataAppService : ServiceStack.Service + { + public ServiceStack.AppMetadata Any(ServiceStack.MetadataApp request) => throw null; + public MetadataAppService() => throw null; + public ServiceStack.NativeTypes.INativeTypesMetadata NativeTypesMetadata { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.MetadataDebug` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class MetadataDebug : ServiceStack.IReturn, ServiceStack.IReturn + { + public string AuthSecret { get => throw null; set => throw null; } + public MetadataDebug() => throw null; + public string Script { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.MetadataDebugService` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class MetadataDebugService : ServiceStack.Service + { + public System.Threading.Tasks.Task Any(ServiceStack.MetadataDebug request) => throw null; + public static string DefaultTemplate; + public System.Threading.Tasks.Task GetHtml(ServiceStack.MetadataDebug request) => throw null; + public MetadataDebugService() => throw null; + public static string Route; + } + + // Generated from `ServiceStack.MetadataFeature` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class MetadataFeature : ServiceStack.Model.IHasStringId, ServiceStack.Model.IHasId, ServiceStack.IPlugin + { + public System.Collections.Generic.List> AppMetadataFilters { get => throw null; } + public System.Collections.Generic.Dictionary DebugLinks { get => throw null; set => throw null; } + public string DebugLinksTitle { get => throw null; set => throw null; } + public System.Action DetailPageFilter { get => throw null; set => throw null; } + public bool EnableAppMetadata { get => throw null; set => throw null; } + public bool EnableNav { get => throw null; set => throw null; } + public System.Collections.Generic.List ExportTypes { get => throw null; } + public string Id { get => throw null; set => throw null; } + public System.Action IndexPageFilter { get => throw null; set => throw null; } + public MetadataFeature() => throw null; + public System.Collections.Generic.Dictionary PluginLinks { get => throw null; set => throw null; } + public string PluginLinksTitle { get => throw null; set => throw null; } + public virtual ServiceStack.Host.IHttpHandler ProcessRequest(string httpMethod, string pathInfo, string filePath) => throw null; + public void Register(ServiceStack.IAppHost appHost) => throw null; + public System.Collections.Generic.Dictionary ServiceRoutes { get => throw null; set => throw null; } + public bool ShowResponseStatusInMetadataPages { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.MetadataFeatureExtensions` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class MetadataFeatureExtensions + { + public static ServiceStack.MetadataFeature AddDebugLink(this ServiceStack.MetadataFeature metadata, string href, string title) => throw null; + public static ServiceStack.MetadataFeature AddPluginLink(this ServiceStack.MetadataFeature metadata, string href, string title) => throw null; + public static ServiceStack.MetadataFeature RemoveDebugLink(this ServiceStack.MetadataFeature metadata, string href) => throw null; + public static ServiceStack.MetadataFeature RemovePluginLink(this ServiceStack.MetadataFeature metadata, string href) => throw null; + } + + // Generated from `ServiceStack.MetadataNavService` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class MetadataNavService : ServiceStack.Service + { + public object Get(ServiceStack.GetNavItems request) => throw null; + public MetadataNavService() => throw null; + } + + // Generated from `ServiceStack.MinifyCssScriptBlock` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class MinifyCssScriptBlock : ServiceStack.MinifyScriptBlockBase + { + public override ServiceStack.ICompressor Minifier { get => throw null; } + public MinifyCssScriptBlock() => throw null; + public override string Name { get => throw null; } + } + + // Generated from `ServiceStack.MinifyHtmlScriptBlock` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class MinifyHtmlScriptBlock : ServiceStack.MinifyScriptBlockBase + { + public override ServiceStack.ICompressor Minifier { get => throw null; } + public MinifyHtmlScriptBlock() => throw null; + public override string Name { get => throw null; } + } + + // Generated from `ServiceStack.MinifyJsScriptBlock` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class MinifyJsScriptBlock : ServiceStack.MinifyScriptBlockBase + { + public override ServiceStack.ICompressor Minifier { get => throw null; } + public MinifyJsScriptBlock() => throw null; + public override string Name { get => throw null; } + } + + // Generated from `ServiceStack.MinifyScriptBlockBase` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public abstract class MinifyScriptBlockBase : ServiceStack.Script.ScriptBlock + { + public override ServiceStack.Script.ScriptLanguage Body { get => throw null; } + public System.ReadOnlyMemory GetMinifiedOutputCache(System.ReadOnlyMemory contents) => throw null; + public abstract ServiceStack.ICompressor Minifier { get; } + protected MinifyScriptBlockBase() => throw null; + public override System.Threading.Tasks.Task WriteAsync(ServiceStack.Script.ScriptScopeContext scope, ServiceStack.Script.PageBlockFragment block, System.Threading.CancellationToken token) => throw null; + } + + // Generated from `ServiceStack.ModularExtensions` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class ModularExtensions + { + public static System.Collections.Generic.List PriorityBelowZero(this System.Collections.Generic.List> instances) => throw null; + public static System.Collections.Generic.List PriorityOrdered(this System.Collections.Generic.List> instances) => throw null; + public static System.Collections.Generic.List PriorityZeroOrAbove(this System.Collections.Generic.List> instances) => throw null; + public static Microsoft.AspNetCore.Hosting.IWebHostBuilder UseModularStartup(this Microsoft.AspNetCore.Hosting.IWebHostBuilder hostBuilder) where TStartup : class => throw null; + public static Microsoft.AspNetCore.Hosting.IWebHostBuilder UseModularStartup(this Microsoft.AspNetCore.Hosting.IWebHostBuilder hostBuilder) where TStartup : class => throw null; + public static System.Collections.Generic.List> WithPriority(this System.Collections.Generic.IEnumerable instances) => throw null; + } + + // Generated from `ServiceStack.ModularStartup` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public abstract class ModularStartup : Microsoft.AspNetCore.Hosting.IStartup + { + public Microsoft.Extensions.Configuration.IConfiguration Configuration { get => throw null; set => throw null; } + public void Configure(Microsoft.AspNetCore.Builder.IApplicationBuilder app) => throw null; + public System.IServiceProvider ConfigureServices(Microsoft.Extensions.DependencyInjection.IServiceCollection services) => throw null; + public static System.Type Create() => throw null; + public object CreateStartupInstance(System.Type type) => throw null; + public System.Collections.Generic.List> GetPriorityInstances() => throw null; + public System.Collections.Generic.List IgnoreTypes { get => throw null; set => throw null; } + public static ServiceStack.ModularStartup Instance { get => throw null; set => throw null; } + public virtual bool LoadType(System.Type startupType) => throw null; + public System.Collections.Generic.List LoadedConfigurations { get => throw null; set => throw null; } + protected ModularStartup(Microsoft.Extensions.Configuration.IConfiguration configuration, params System.Reflection.Assembly[] assemblies) => throw null; + protected ModularStartup(Microsoft.Extensions.Configuration.IConfiguration configuration, System.Type[] types) => throw null; + protected ModularStartup(Microsoft.Extensions.Configuration.IConfiguration configuration, System.Func> typesResolver) => throw null; + protected ModularStartup() => throw null; + public System.Collections.Generic.List ScanAssemblies { get => throw null; } + public System.Func> TypeResolver { get => throw null; } + } + + // Generated from `ServiceStack.ModularStartupActivator` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ModularStartupActivator + { + protected Microsoft.Extensions.Configuration.IConfiguration Configuration { get => throw null; } + public virtual void Configure(Microsoft.AspNetCore.Builder.IApplicationBuilder app) => throw null; + public virtual void ConfigureServices(Microsoft.Extensions.DependencyInjection.IServiceCollection services) => throw null; + protected ServiceStack.ModularStartup Instance; + public ModularStartupActivator(Microsoft.Extensions.Configuration.IConfiguration configuration) => throw null; + public static System.Type StartupType { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.MqExtensions` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class MqExtensions + { + public static System.Collections.Generic.Dictionary ToHeaders(this ServiceStack.Messaging.IMessage message) => throw null; + } + + // Generated from `ServiceStack.NativeTypesFeature` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class NativeTypesFeature : ServiceStack.Model.IHasStringId, ServiceStack.Model.IHasId, ServiceStack.IPlugin + { + public ServiceStack.NativeTypes.MetadataTypesGenerator DefaultGenerator { get => throw null; set => throw null; } + public static bool DisableTokenVerification { get => throw null; set => throw null; } + public void ExportAttribute(System.Func converter) => throw null; + public void ExportAttribute(System.Type attributeType, System.Func converter) => throw null; + public ServiceStack.NativeTypes.MetadataTypesGenerator GetGenerator() => throw null; + public string Id { get => throw null; set => throw null; } + public ServiceStack.MetadataTypesConfig MetadataTypesConfig { get => throw null; set => throw null; } + public NativeTypesFeature() => throw null; + public void Register(ServiceStack.IAppHost appHost) => throw null; + } + + // Generated from `ServiceStack.NetCoreAppHostExtensions` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class NetCoreAppHostExtensions + { + public static Microsoft.Extensions.DependencyInjection.IServiceScope CreateScope(this ServiceStack.Web.IRequest req) => throw null; + public static Microsoft.AspNetCore.Builder.IApplicationBuilder GetApp(this ServiceStack.IAppHost appHost) => throw null; + public static System.IServiceProvider GetApplicationServices(this ServiceStack.IAppHost appHost) => throw null; + public static Microsoft.Extensions.Configuration.IConfiguration GetConfiguration(this ServiceStack.IAppHost appHost) => throw null; + public static Microsoft.AspNetCore.Hosting.IHostingEnvironment GetHostingEnvironment(this ServiceStack.IAppHost appHost) => throw null; + public static System.Collections.Generic.IEnumerable GetServices(this ServiceStack.Web.IRequest req, System.Type type) => throw null; + public static System.Collections.Generic.IEnumerable GetServices(this ServiceStack.Web.IRequest req) => throw null; + public static bool IsDevelopmentEnvironment(this ServiceStack.IAppHost appHost) => throw null; + public static bool IsProductionEnvironment(this ServiceStack.IAppHost appHost) => throw null; + public static bool IsStagingEnvironment(this ServiceStack.IAppHost appHost) => throw null; + public static T Resolve(this System.IServiceProvider provider) => throw null; + public static object ResolveScoped(this ServiceStack.Web.IRequest req, System.Type type) => throw null; + public static T ResolveScoped(this ServiceStack.Web.IRequest req) => throw null; + public static ServiceStack.Web.IHttpRequest ToRequest(this Microsoft.AspNetCore.Http.HttpRequest request, string operationName = default(string)) => throw null; + public static ServiceStack.Web.IHttpRequest ToRequest(this Microsoft.AspNetCore.Http.HttpContext httpContext, string operationName = default(string)) => throw null; + public static T TryResolve(this System.IServiceProvider provider) => throw null; + public static object TryResolveScoped(this ServiceStack.Web.IRequest req, System.Type type) => throw null; + public static T TryResolveScoped(this ServiceStack.Web.IRequest req) => throw null; + public static Microsoft.AspNetCore.Builder.IApplicationBuilder Use(this Microsoft.AspNetCore.Builder.IApplicationBuilder app, ServiceStack.Host.IHttpAsyncHandler httpHandler) => throw null; + public static Microsoft.AspNetCore.Builder.IApplicationBuilder UseServiceStack(this Microsoft.AspNetCore.Builder.IApplicationBuilder app, ServiceStack.AppHostBase appHost) => throw null; + } + + // Generated from `ServiceStack.NetCoreAppSettings` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class NetCoreAppSettings : ServiceStack.Configuration.IAppSettings + { + public Microsoft.Extensions.Configuration.IConfiguration Configuration { get => throw null; } + public bool Exists(string key) => throw null; + public T Get(string name, T defaultValue) => throw null; + public T Get(string name) => throw null; + public System.Collections.Generic.Dictionary GetAll() => throw null; + public System.Collections.Generic.List GetAllKeys() => throw null; + public System.Collections.Generic.IDictionary GetDictionary(string key) => throw null; + public System.Collections.Generic.List> GetKeyValuePairs(string key) => throw null; + public System.Collections.Generic.IList GetList(string key) => throw null; + public string GetString(string name) => throw null; + public NetCoreAppSettings(Microsoft.Extensions.Configuration.IConfiguration configuration) => throw null; + public void Set(string key, T value) => throw null; + } + + // Generated from `ServiceStack.NotEqualCondition` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class NotEqualCondition : ServiceStack.QueryCondition + { + public override string Alias { get => throw null; } + public override bool Match(object a, object b) => throw null; + public NotEqualCondition() => throw null; + } + + // Generated from `ServiceStack.OrderByExpression` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class OrderByExpression : ServiceStack.FilterExpression + { + public override System.Collections.Generic.IEnumerable Apply(System.Collections.Generic.IEnumerable source) => throw null; + public ServiceStack.GetMemberDelegate[] FieldGetters { get => throw null; set => throw null; } + public string[] FieldNames { get => throw null; set => throw null; } + public bool[] OrderAsc { get => throw null; set => throw null; } + public OrderByExpression(string[] fieldNames, ServiceStack.GetMemberDelegate[] fieldGetters, bool[] orderAsc) => throw null; + public OrderByExpression(string fieldName, ServiceStack.GetMemberDelegate fieldGetter, bool orderAsc = default(bool)) => throw null; + } + + // Generated from `ServiceStack.Platform` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class Platform + { + public virtual string GetAppConfigPath() => throw null; + public virtual string GetAppSetting(string key, string defaultValue) => throw null; + public virtual string GetAppSetting(string key) => throw null; + public virtual T GetAppSetting(string key, T defaultValue) => throw null; + public virtual string GetConnectionString(string key) => throw null; + public virtual System.Collections.Generic.Dictionary GetCookiesAsDictionary(ServiceStack.Web.IResponse httpRes) => throw null; + public virtual System.Collections.Generic.Dictionary GetCookiesAsDictionary(ServiceStack.Web.IRequest httpReq) => throw null; + public virtual string GetNullableAppSetting(string key) => throw null; + public virtual System.Collections.Generic.HashSet GetRazorNamespaces() => throw null; + public virtual void InitHostConfig(ServiceStack.HostConfig config) => throw null; + public static ServiceStack.Platform Instance; + public static T ParseTextValue(string textValue) => throw null; + public Platform() => throw null; + } + + // Generated from `ServiceStack.Plugins` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class Plugins + { + public static void AddToAppMetadata(this ServiceStack.IAppHost appHost, System.Action fn) => throw null; + public const string AdminUsers = default; + public const string Auth = default; + public const string AutoQuery = default; + public const string AutoQueryData = default; + public const string AutoQueryMetadata = default; + public const string CancelRequests = default; + public const string Cors = default; + public const string Csv = default; + public const string Desktop = default; + public const string EncryptedMessaging = default; + public const string Grpc = default; + public const string HotReload = default; + public const string Html = default; + public const string HttpCache = default; + public const string LispTcpServer = default; + public const string Metadata = default; + public const string MiniProfiler = default; + public const string MsgPack = default; + public const string NativeTypes = default; + public const string OpenApi = default; + public const string Postman = default; + public const string PredefinedRoutes = default; + public const string ProtoBuf = default; + public const string Proxy = default; + public const string Razor = default; + public const string RedisErrorLogs = default; + public const string Register = default; + public const string RequestInfo = default; + public const string RequestLogs = default; + public const string ServerEvents = default; + public const string Session = default; + public const string SharpPages = default; + public const string Sitemap = default; + public const string Soap = default; + public const string Svg = default; + public const string Swagger = default; + public const string Validation = default; + public const string WebSudo = default; + } + + // Generated from `ServiceStack.Postman` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class Postman + { + public bool ExportSession { get => throw null; set => throw null; } + public System.Collections.Generic.List Label { get => throw null; set => throw null; } + public Postman() => throw null; + public string ssid { get => throw null; set => throw null; } + public string ssopt { get => throw null; set => throw null; } + public string sspid { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.PostmanCollection` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class PostmanCollection + { + public PostmanCollection() => throw null; + public string id { get => throw null; set => throw null; } + public string name { get => throw null; set => throw null; } + public System.Collections.Generic.List requests { get => throw null; set => throw null; } + public System.Int64 timestamp { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.PostmanData` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class PostmanData + { + public PostmanData() => throw null; + public string key { get => throw null; set => throw null; } + public string type { get => throw null; set => throw null; } + public string value { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.PostmanExtensions` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class PostmanExtensions + { + public static System.Collections.Generic.List ApplyPropertyTypes(this System.Collections.Generic.List data, System.Collections.Generic.Dictionary typeMap, string defaultValue = default(string)) => throw null; + public static System.Collections.Generic.Dictionary ApplyPropertyTypes(this System.Collections.Generic.IEnumerable names, System.Collections.Generic.Dictionary typeMap, string defaultValue = default(string)) => throw null; + public static string AsFriendlyName(this System.Type type, ServiceStack.PostmanFeature feature) => throw null; + public static string ToPostmanPathVariables(this string path) => throw null; + } + + // Generated from `ServiceStack.PostmanFeature` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class PostmanFeature : ServiceStack.Model.IHasStringId, ServiceStack.Model.IHasId, ServiceStack.IPlugin + { + public string AtRestPath { get => throw null; set => throw null; } + public System.Collections.Generic.List DefaultLabelFmt { get => throw null; set => throw null; } + public System.Collections.Generic.List DefaultVerbsForAny { get => throw null; set => throw null; } + public bool? EnableSessionExport { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary FriendlyTypeNames; + public string Headers { get => throw null; set => throw null; } + public string Id { get => throw null; set => throw null; } + public PostmanFeature() => throw null; + public void Register(ServiceStack.IAppHost appHost) => throw null; + } + + // Generated from `ServiceStack.PostmanRequest` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class PostmanRequest + { + public PostmanRequest() => throw null; + public string collectionId { get => throw null; set => throw null; } + public System.Collections.Generic.List data { get => throw null; set => throw null; } + public string dataMode { get => throw null; set => throw null; } + public string description { get => throw null; set => throw null; } + public string headers { get => throw null; set => throw null; } + public string id { get => throw null; set => throw null; } + public string method { get => throw null; set => throw null; } + public string name { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary pathVariables { get => throw null; set => throw null; } + public System.Collections.Generic.List responses { get => throw null; set => throw null; } + public System.Int64 time { get => throw null; set => throw null; } + public string url { get => throw null; set => throw null; } + public int version { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.PostmanService` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class PostmanService : ServiceStack.Service + { + public object Any(ServiceStack.Postman request) => throw null; + public string GetName(ServiceStack.PostmanFeature feature, ServiceStack.Postman request, System.Type requestType, string virtualPath) => throw null; + public System.Collections.Generic.List GetRequests(ServiceStack.Postman request, string parentId, System.Collections.Generic.IEnumerable operations) => throw null; + public PostmanService() => throw null; + } + + // Generated from `ServiceStack.PredefinedRoutesFeature` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class PredefinedRoutesFeature : ServiceStack.Model.IHasStringId, ServiceStack.Model.IHasId, ServiceStack.IPlugin + { + public System.Collections.Generic.Dictionary> HandlerMappings { get => throw null; } + public string Id { get => throw null; set => throw null; } + public PredefinedRoutesFeature() => throw null; + public ServiceStack.Host.IHttpHandler ProcessRequest(string httpMethod, string pathInfo, string filePath) => throw null; + public void Register(ServiceStack.IAppHost appHost) => throw null; + } + + // Generated from `ServiceStack.ProxyFeature` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ProxyFeature : ServiceStack.Model.IHasStringId, ServiceStack.Model.IHasId, ServiceStack.IPlugin + { + public string Id { get => throw null; set => throw null; } + public System.Collections.Generic.HashSet IgnoreResponseHeaders; + public ProxyFeature(System.Func matchingRequests, System.Func resolveUrl) => throw null; + public System.Action ProxyRequestFilter { get => throw null; set => throw null; } + public System.Action ProxyResponseFilter { get => throw null; set => throw null; } + public void Register(ServiceStack.IAppHost appHost) => throw null; + public System.Func ResolveUrl; + public System.Func> TransformRequest { get => throw null; set => throw null; } + public System.Func> TransformResponse { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.ProxyFeatureHandler` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ProxyFeatureHandler : ServiceStack.Host.Handlers.HttpAsyncTaskHandler + { + public virtual System.Threading.Tasks.Task CopyToResponse(ServiceStack.Web.IHttpResponse res, System.Net.HttpWebResponse webRes) => throw null; + public System.Collections.Generic.HashSet IgnoreResponseHeaders { get => throw null; set => throw null; } + public static void InitWebRequest(ServiceStack.Web.IHttpRequest httpReq, System.Net.HttpWebRequest webReq) => throw null; + public override System.Threading.Tasks.Task ProcessRequestAsync(ServiceStack.Web.IRequest req, ServiceStack.Web.IResponse response, string operationName) => throw null; + public ProxyFeatureHandler() => throw null; + public virtual System.Threading.Tasks.Task ProxyRequestAsync(ServiceStack.Web.IHttpRequest httpReq, string url) => throw null; + public System.Threading.Tasks.Task ProxyRequestAsync(ServiceStack.Web.IHttpRequest httpReq, System.Net.HttpWebRequest webReq) => throw null; + public System.Action ProxyRequestFilter { get => throw null; set => throw null; } + public System.Action ProxyResponseFilter { get => throw null; set => throw null; } + public System.Threading.Tasks.Task ProxyToResponse(ServiceStack.Web.IHttpResponse res, System.Net.HttpWebRequest webReq) => throw null; + public System.Func ResolveUrl { get => throw null; set => throw null; } + public override bool RunAsAsync() => throw null; + public System.Func> TransformRequest { get => throw null; set => throw null; } + public System.Func> TransformResponse { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.QueryCondition` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public abstract class QueryCondition + { + public abstract string Alias { get; } + public virtual int CompareTo(object a, object b) => throw null; + public abstract bool Match(object a, object b); + protected QueryCondition() => throw null; + public ServiceStack.QueryTerm Term { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.QueryDataContext` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class QueryDataContext + { + public ServiceStack.IQueryData Dto { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary DynamicParams { get => throw null; set => throw null; } + public QueryDataContext() => throw null; + public ServiceStack.Web.IRequest Request { get => throw null; set => throw null; } + public ServiceStack.ITypedQueryData TypedQuery { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.QueryDataField` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class QueryDataField + { + public string Condition { get => throw null; set => throw null; } + public string Field { get => throw null; set => throw null; } + public ServiceStack.QueryCondition QueryCondition { get => throw null; set => throw null; } + public QueryDataField() => throw null; + public ServiceStack.QueryTerm Term { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.QueryDataFilterContext` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class QueryDataFilterContext + { + public System.Collections.Generic.List Commands { get => throw null; set => throw null; } + public ServiceStack.IQueryDataSource Db { get => throw null; set => throw null; } + public ServiceStack.IQueryData Dto { get => throw null; set => throw null; } + public ServiceStack.IDataQuery Query { get => throw null; set => throw null; } + public QueryDataFilterContext() => throw null; + public ServiceStack.IQueryResponse Response { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.QueryDataFilterDelegate` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public delegate void QueryDataFilterDelegate(ServiceStack.IDataQuery q, ServiceStack.IQueryData dto, ServiceStack.Web.IRequest req); + + // Generated from `ServiceStack.QueryDataSource<>` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public abstract class QueryDataSource : System.IDisposable, ServiceStack.IQueryDataSource, ServiceStack.IQueryDataSource + { + public virtual System.Collections.Generic.IEnumerable ApplyConditions(System.Collections.Generic.IEnumerable data, System.Collections.Generic.IEnumerable conditions) => throw null; + public virtual System.Collections.Generic.IEnumerable ApplyLimits(System.Collections.Generic.IEnumerable source, int? skip, int? take) => throw null; + public virtual System.Collections.Generic.IEnumerable ApplySorting(System.Collections.Generic.IEnumerable source, ServiceStack.OrderByExpression orderBy) => throw null; + public virtual int Count(ServiceStack.IDataQuery q) => throw null; + public virtual void Dispose() => throw null; + public virtual ServiceStack.IDataQuery From() => throw null; + public abstract System.Collections.Generic.IEnumerable GetDataSource(ServiceStack.IDataQuery q); + public virtual System.Collections.Generic.List LoadSelect(ServiceStack.IDataQuery q) => throw null; + protected QueryDataSource(ServiceStack.QueryDataContext context) => throw null; + public virtual object SelectAggregate(ServiceStack.IDataQuery q, string name, System.Collections.Generic.IEnumerable args) => throw null; + } + + // Generated from `ServiceStack.RedisErrorLoggerFeature` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class RedisErrorLoggerFeature : ServiceStack.Model.IHasStringId, ServiceStack.Model.IHasId, ServiceStack.IPlugin + { + public const string CombinedServiceLogId = default; + public object HandleServiceException(ServiceStack.Web.IRequest httpReq, object request, System.Exception ex) => throw null; + public void HandleUncaughtException(ServiceStack.Web.IRequest httpReq, ServiceStack.Web.IResponse httpRes, string operationName, System.Exception ex) => throw null; + public string Id { get => throw null; set => throw null; } + public RedisErrorLoggerFeature(ServiceStack.Redis.IRedisClientsManager redisManager) => throw null; + public void Register(ServiceStack.IAppHost appHost) => throw null; + public const string UrnServiceErrorType = default; + } + + // Generated from `ServiceStack.RegistrationFeature` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class RegistrationFeature : ServiceStack.Model.IHasStringId, ServiceStack.Model.IHasId, ServiceStack.IPlugin + { + public bool AllowUpdates { get => throw null; set => throw null; } + public string AtRestPath { get => throw null; set => throw null; } + public string Id { get => throw null; set => throw null; } + public void Register(ServiceStack.IAppHost appHost) => throw null; + public RegistrationFeature() => throw null; + public ServiceStack.Auth.ValidateFn ValidateFn { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.RepositoryBase` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public abstract class RepositoryBase : System.IDisposable, ServiceStack.IRepository + { + public virtual System.Data.IDbConnection Db { get => throw null; } + public virtual ServiceStack.Data.IDbConnectionFactory DbFactory { get => throw null; set => throw null; } + public virtual void Dispose() => throw null; + protected RepositoryBase() => throw null; + } + + // Generated from `ServiceStack.RequestContext` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class RequestContext + { + public static System.Threading.AsyncLocal AsyncRequestItems; + public void EndRequest() => throw null; + public T GetOrCreate(System.Func createFn) => throw null; + public static ServiceStack.RequestContext Instance; + public virtual System.Collections.IDictionary Items { get => throw null; set => throw null; } + public bool ReleaseDisposables() => throw null; + public RequestContext() => throw null; + public void StartRequestContext() => throw null; + public void TrackDisposable(System.IDisposable instance) => throw null; + } + + // Generated from `ServiceStack.RequestExtensions` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null; ServiceStack.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static partial class RequestExtensions + { + public static string GetCompressionType(this ServiceStack.Web.IRequest request) => throw null; + public static string GetContentEncoding(this ServiceStack.Web.IRequest request) => throw null; + public static ServiceStack.IO.IVirtualDirectory GetDirectory(this ServiceStack.Web.IRequest request) => throw null; + public static ServiceStack.IO.IVirtualFile GetFile(this ServiceStack.Web.IRequest request) => throw null; + public static string GetHeader(this ServiceStack.Web.IRequest request, string headerName) => throw null; + public static System.IO.Stream GetInputStream(this ServiceStack.Web.IRequest req, System.IO.Stream stream) => throw null; + public static object GetItem(this ServiceStack.Web.IRequest httpReq, string key) => throw null; + public static string GetParamInRequestHeader(this ServiceStack.Web.IRequest request, string name) => throw null; + public static T GetRuntimeConfig(this ServiceStack.Web.IRequest req, string name, T defaultValue) => throw null; + public static System.Threading.Tasks.Task GetSessionFromSourceAsync(this ServiceStack.Web.IRequest request, string userAuthId, System.Func validator, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static bool IsDirectory(this ServiceStack.Web.IRequest request) => throw null; + public static bool IsFile(this ServiceStack.Web.IRequest request) => throw null; + public static bool IsInProcessRequest(this ServiceStack.Web.IRequest httpReq) => throw null; + public static void RegisterForDispose(this ServiceStack.Web.IRequest request, System.IDisposable disposable) => throw null; + public static void ReleaseIfInProcessRequest(this ServiceStack.Web.IRequest httpReq) => throw null; + public static ServiceStack.AuthUserSession ReloadSession(this ServiceStack.Web.IRequest request) => throw null; + public static void SetInProcessRequest(this ServiceStack.Web.IRequest httpReq) => throw null; + public static void SetItem(this ServiceStack.Web.IRequest httpReq, string key, object value) => throw null; + public static object ToOptimizedResult(this ServiceStack.Web.IRequest request, object dto) => throw null; + public static System.Threading.Tasks.Task ToOptimizedResultAsync(this ServiceStack.Web.IRequest request, object dto) => throw null; + public static object ToOptimizedResultUsingCache(this ServiceStack.Web.IRequest req, ServiceStack.Caching.ICacheClient cacheClient, string cacheKey, System.TimeSpan? expireCacheIn, System.Func factoryFn) => throw null; + public static object ToOptimizedResultUsingCache(this ServiceStack.Web.IRequest req, ServiceStack.Caching.ICacheClient cacheClient, string cacheKey, System.Func factoryFn) => throw null; + public static System.Threading.Tasks.Task ToOptimizedResultUsingCacheAsync(this ServiceStack.Web.IRequest req, ServiceStack.Caching.ICacheClientAsync cacheClient, string cacheKey, System.TimeSpan? expireCacheIn, System.Func factoryFn, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task ToOptimizedResultUsingCacheAsync(this ServiceStack.Web.IRequest req, ServiceStack.Caching.ICacheClientAsync cacheClient, string cacheKey, System.Func factoryFn, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + } + + // Generated from `ServiceStack.RequestFilterAsyncAttribute` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public abstract class RequestFilterAsyncAttribute : ServiceStack.AttributeBase, ServiceStack.Web.IRequestFilterBase, ServiceStack.Web.IHasRequestFilterAsync + { + public ServiceStack.ApplyTo ApplyTo { get => throw null; set => throw null; } + public virtual ServiceStack.Web.IRequestFilterBase Copy() => throw null; + public abstract System.Threading.Tasks.Task ExecuteAsync(ServiceStack.Web.IRequest req, ServiceStack.Web.IResponse res, object requestDto); + public int Priority { get => throw null; set => throw null; } + public System.Threading.Tasks.Task RequestFilterAsync(ServiceStack.Web.IRequest req, ServiceStack.Web.IResponse res, object requestDto) => throw null; + public RequestFilterAsyncAttribute(ServiceStack.ApplyTo applyTo) => throw null; + public RequestFilterAsyncAttribute() => throw null; + } + + // Generated from `ServiceStack.RequestFilterAttribute` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public abstract class RequestFilterAttribute : ServiceStack.AttributeBase, ServiceStack.Web.IRequestFilterBase, ServiceStack.Web.IHasRequestFilter + { + public ServiceStack.ApplyTo ApplyTo { get => throw null; set => throw null; } + public virtual ServiceStack.Web.IRequestFilterBase Copy() => throw null; + public abstract void Execute(ServiceStack.Web.IRequest req, ServiceStack.Web.IResponse res, object requestDto); + public int Priority { get => throw null; set => throw null; } + public void RequestFilter(ServiceStack.Web.IRequest req, ServiceStack.Web.IResponse res, object requestDto) => throw null; + public RequestFilterAttribute(ServiceStack.ApplyTo applyTo) => throw null; + public RequestFilterAttribute() => throw null; + } + + // Generated from `ServiceStack.RequestFilterPriority` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public enum RequestFilterPriority + { + Authenticate, + RequiredPermission, + RequiredRole, + } + + // Generated from `ServiceStack.RequestInfoFeature` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class RequestInfoFeature : ServiceStack.Model.IHasStringId, ServiceStack.Model.IHasId, ServiceStack.IPlugin + { + public string Id { get => throw null; set => throw null; } + public ServiceStack.Host.IHttpHandler ProcessRequest(string httpMethod, string pathInfo, string filePath) => throw null; + public void Register(ServiceStack.IAppHost appHost) => throw null; + public RequestInfoFeature() => throw null; + } + + // Generated from `ServiceStack.RequestLogsFeature` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class RequestLogsFeature : ServiceStack.Model.IHasStringId, ServiceStack.Model.IHasId, ServiceStack.IPlugin + { + public string AtRestPath { get => throw null; set => throw null; } + public int? Capacity { get => throw null; set => throw null; } + public System.Func CurrentDateFn { get => throw null; set => throw null; } + public bool DefaultIgnoreFilter(object o) => throw null; + public bool EnableErrorTracking { get => throw null; set => throw null; } + public bool EnableRequestBodyTracking { get => throw null; set => throw null; } + public bool EnableResponseTracking { get => throw null; set => throw null; } + public bool EnableSessionTracking { get => throw null; set => throw null; } + public System.Type[] ExcludeRequestDtoTypes { get => throw null; set => throw null; } + public System.Type[] HideRequestBodyForRequestDtoTypes { get => throw null; set => throw null; } + public string Id { get => throw null; set => throw null; } + public System.Func IgnoreFilter { get => throw null; set => throw null; } + public System.Collections.Generic.List IgnoreTypes { get => throw null; set => throw null; } + public bool LimitToServiceRequests { get => throw null; set => throw null; } + public void Register(ServiceStack.IAppHost appHost) => throw null; + public System.Action RequestLogFilter { get => throw null; set => throw null; } + public ServiceStack.Web.IRequestLogger RequestLogger { get => throw null; set => throw null; } + public RequestLogsFeature(int capacity) => throw null; + public RequestLogsFeature() => throw null; + public string[] RequiredRoles { get => throw null; set => throw null; } + public System.Func SkipLogging { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.RequestUtils` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class RequestUtils + { + public static System.Threading.Tasks.Task AssertAccessRoleAsync(ServiceStack.Web.IRequest req, string accessRole = default(string), string authSecret = default(string), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task AssertAccessRoleOrDebugModeAsync(ServiceStack.Web.IRequest req, string accessRole = default(string), string authSecret = default(string), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + } + + // Generated from `ServiceStack.RequiredClaimAttribute` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class RequiredClaimAttribute : ServiceStack.AuthenticateAttribute + { + public override bool Equals(object obj) => throw null; + protected bool Equals(ServiceStack.RequiredClaimAttribute other) => throw null; + public override System.Threading.Tasks.Task ExecuteAsync(ServiceStack.Web.IRequest req, ServiceStack.Web.IResponse res, object requestDto) => throw null; + public override int GetHashCode() => throw null; + public static bool HasClaim(ServiceStack.Web.IRequest req, string type, string value) => throw null; + public RequiredClaimAttribute(string type, string value) => throw null; + public RequiredClaimAttribute(ServiceStack.ApplyTo applyTo, string type, string value) => throw null; + public string Type { get => throw null; set => throw null; } + public string Value { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.RequiredPermissionAttribute` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class RequiredPermissionAttribute : ServiceStack.AuthenticateAttribute + { + public static void AssertRequiredPermissions(ServiceStack.Web.IRequest req, params string[] requiredPermissions) => throw null; + public static System.Threading.Tasks.Task AssertRequiredPermissionsAsync(ServiceStack.Web.IRequest req, string[] requiredPermissions, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public override bool Equals(object obj) => throw null; + protected bool Equals(ServiceStack.RequiredPermissionAttribute other) => throw null; + public override System.Threading.Tasks.Task ExecuteAsync(ServiceStack.Web.IRequest req, ServiceStack.Web.IResponse res, object requestDto) => throw null; + public override int GetHashCode() => throw null; + public static bool HasAllPermissions(ServiceStack.Web.IRequest req, ServiceStack.Auth.IAuthSession session, System.Collections.Generic.ICollection requiredPermissions) => throw null; + public bool HasAllPermissions(ServiceStack.Web.IRequest req, ServiceStack.Auth.IAuthSession session, ServiceStack.Auth.IAuthRepository authRepo) => throw null; + public static System.Threading.Tasks.Task HasAllPermissionsAsync(ServiceStack.Web.IRequest req, ServiceStack.Auth.IAuthSession session, System.Collections.Generic.ICollection requiredPermissions, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task HasAllPermissionsAsync(ServiceStack.Web.IRequest req, ServiceStack.Auth.IAuthSession session, ServiceStack.Auth.IAuthRepositoryAsync authRepo) => throw null; + public static bool HasRequiredPermissions(ServiceStack.Web.IRequest req, string[] requiredPermissions) => throw null; + public static System.Threading.Tasks.Task HasRequiredPermissionsAsync(ServiceStack.Web.IRequest req, string[] requiredPermissions) => throw null; + public RequiredPermissionAttribute(params string[] permissions) => throw null; + public RequiredPermissionAttribute(ServiceStack.ApplyTo applyTo, params string[] permissions) => throw null; + public System.Collections.Generic.List RequiredPermissions { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.RequiredRoleAttribute` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class RequiredRoleAttribute : ServiceStack.AuthenticateAttribute + { + public static System.Threading.Tasks.Task AssertRequiredRoleAsync(ServiceStack.Web.IRequest req, string requiredRole, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static void AssertRequiredRoles(ServiceStack.Web.IRequest req, params string[] requiredRoles) => throw null; + public static System.Threading.Tasks.Task AssertRequiredRolesAsync(ServiceStack.Web.IRequest req, string[] requiredRoles, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public override bool Equals(object obj) => throw null; + protected bool Equals(ServiceStack.RequiredRoleAttribute other) => throw null; + public override System.Threading.Tasks.Task ExecuteAsync(ServiceStack.Web.IRequest req, ServiceStack.Web.IResponse res, object requestDto) => throw null; + public override int GetHashCode() => throw null; + public static bool HasAllRoles(ServiceStack.Web.IRequest req, ServiceStack.Auth.IAuthSession session, System.Collections.Generic.ICollection requiredRoles) => throw null; + public bool HasAllRoles(ServiceStack.Web.IRequest req, ServiceStack.Auth.IAuthSession session, ServiceStack.Auth.IAuthRepository authRepo) => throw null; + public static System.Threading.Tasks.Task HasAllRolesAsync(ServiceStack.Web.IRequest req, ServiceStack.Auth.IAuthSession session, System.Collections.Generic.ICollection requiredRoles, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task HasAllRolesAsync(ServiceStack.Web.IRequest req, ServiceStack.Auth.IAuthSession session, ServiceStack.Auth.IAuthRepositoryAsync authRepo) => throw null; + public static bool HasRequiredRoles(ServiceStack.Web.IRequest req, string[] requiredRoles) => throw null; + public static System.Threading.Tasks.Task HasRequiredRolesAsync(ServiceStack.Web.IRequest req, string[] requiredRoles) => throw null; + public RequiredRoleAttribute(params string[] roles) => throw null; + public RequiredRoleAttribute(ServiceStack.ApplyTo applyTo, params string[] roles) => throw null; + public System.Collections.Generic.List RequiredRoles { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.RequiresAnyPermissionAttribute` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class RequiresAnyPermissionAttribute : ServiceStack.AuthenticateAttribute + { + public override System.Threading.Tasks.Task ExecuteAsync(ServiceStack.Web.IRequest req, ServiceStack.Web.IResponse res, object requestDto) => throw null; + public virtual bool HasAnyPermissions(ServiceStack.Auth.IAuthSession session, ServiceStack.Auth.IAuthRepository authRepo) => throw null; + public bool HasAnyPermissions(ServiceStack.Web.IRequest req, ServiceStack.Auth.IAuthSession session, ServiceStack.Auth.IAuthRepository authRepo) => throw null; + public virtual System.Threading.Tasks.Task HasAnyPermissionsAsync(ServiceStack.Auth.IAuthSession session, ServiceStack.Auth.IAuthRepositoryAsync authRepo) => throw null; + public System.Threading.Tasks.Task HasAnyPermissionsAsync(ServiceStack.Web.IRequest req, ServiceStack.Auth.IAuthSession session, ServiceStack.Auth.IAuthRepositoryAsync authRepo) => throw null; + public System.Collections.Generic.List RequiredPermissions { get => throw null; set => throw null; } + public RequiresAnyPermissionAttribute(params string[] permissions) => throw null; + public RequiresAnyPermissionAttribute(ServiceStack.ApplyTo applyTo, params string[] permissions) => throw null; + } + + // Generated from `ServiceStack.RequiresAnyRoleAttribute` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class RequiresAnyRoleAttribute : ServiceStack.AuthenticateAttribute + { + public static void AssertRequiredRoles(ServiceStack.Web.IRequest req, params string[] requiredRoles) => throw null; + public override System.Threading.Tasks.Task ExecuteAsync(ServiceStack.Web.IRequest req, ServiceStack.Web.IResponse res, object requestDto) => throw null; + public virtual bool HasAnyRoles(ServiceStack.Web.IRequest req, ServiceStack.Auth.IAuthSession session, ServiceStack.Auth.IAuthRepository authRepo) => throw null; + public virtual bool HasAnyRoles(ServiceStack.Auth.IAuthSession session, ServiceStack.Auth.IAuthRepository authRepo) => throw null; + public virtual System.Threading.Tasks.Task HasAnyRolesAsync(ServiceStack.Web.IRequest req, ServiceStack.Auth.IAuthSession session, ServiceStack.Auth.IAuthRepositoryAsync authRepo) => throw null; + public virtual System.Threading.Tasks.Task HasAnyRolesAsync(ServiceStack.Auth.IAuthSession session, ServiceStack.Auth.IAuthRepositoryAsync authRepo) => throw null; + public System.Collections.Generic.List RequiredRoles { get => throw null; set => throw null; } + public RequiresAnyRoleAttribute(params string[] roles) => throw null; + public RequiresAnyRoleAttribute(ServiceStack.ApplyTo applyTo, params string[] roles) => throw null; + } + + // Generated from `ServiceStack.RequiresSchemaProviders` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class RequiresSchemaProviders + { + public static void InitSchema(this ServiceStack.Caching.ICacheClient cache) => throw null; + public static void InitSchema(this ServiceStack.Auth.IAuthRepositoryAsync authRepo) => throw null; + public static void InitSchema(this ServiceStack.Auth.IAuthRepository authRepo) => throw null; + } + + // Generated from `ServiceStack.ResponseFilterAsyncAttribute` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public abstract class ResponseFilterAsyncAttribute : ServiceStack.AttributeBase, ServiceStack.Web.IResponseFilterBase, ServiceStack.Web.IHasResponseFilterAsync + { + public ServiceStack.ApplyTo ApplyTo { get => throw null; set => throw null; } + public virtual ServiceStack.Web.IResponseFilterBase Copy() => throw null; + public abstract System.Threading.Tasks.Task ExecuteAsync(ServiceStack.Web.IRequest req, ServiceStack.Web.IResponse res, object responseDto); + public int Priority { get => throw null; set => throw null; } + public System.Threading.Tasks.Task ResponseFilterAsync(ServiceStack.Web.IRequest req, ServiceStack.Web.IResponse res, object response) => throw null; + public ResponseFilterAsyncAttribute(ServiceStack.ApplyTo applyTo) => throw null; + public ResponseFilterAsyncAttribute() => throw null; + } + + // Generated from `ServiceStack.ResponseFilterAttribute` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public abstract class ResponseFilterAttribute : ServiceStack.AttributeBase, ServiceStack.Web.IResponseFilterBase, ServiceStack.Web.IHasResponseFilter + { + public ServiceStack.ApplyTo ApplyTo { get => throw null; set => throw null; } + public virtual ServiceStack.Web.IResponseFilterBase Copy() => throw null; + public abstract void Execute(ServiceStack.Web.IRequest req, ServiceStack.Web.IResponse res, object responseDto); + public int Priority { get => throw null; set => throw null; } + public void ResponseFilter(ServiceStack.Web.IRequest req, ServiceStack.Web.IResponse res, object response) => throw null; + public ResponseFilterAttribute(ServiceStack.ApplyTo applyTo) => throw null; + public ResponseFilterAttribute() => throw null; + } + + // Generated from `ServiceStack.ReturnExceptionsInJsonAttribute` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ReturnExceptionsInJsonAttribute : ServiceStack.ResponseFilterAttribute + { + public override void Execute(ServiceStack.Web.IRequest req, ServiceStack.Web.IResponse res, object responseDto) => throw null; + public ReturnExceptionsInJsonAttribute() => throw null; + } + + // Generated from `ServiceStack.RpcGateway` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class RpcGateway + { + public static ServiceStack.HttpError CreateError(ServiceStack.Web.IResponse res, string errorCode = default(string), string errorMessage = default(string)) => throw null; + public static TResponse CreateErrorResponse(ServiceStack.Web.IResponse res, System.Exception ex) => throw null; + public virtual System.Threading.Tasks.Task ExecuteAsync(object requestDto, ServiceStack.Web.IRequest req) => throw null; + public virtual System.Threading.Tasks.Task ExecuteAsync(ServiceStack.IReturn requestDto, ServiceStack.Web.IRequest req) => throw null; + public static TResponse GetResponse(ServiceStack.Web.IResponse res, object ret) => throw null; + public RpcGateway(ServiceStack.ServiceStackHost appHost, ServiceStack.Web.IServiceExecutor executor) => throw null; + public RpcGateway(ServiceStack.ServiceStackHost appHost) => throw null; + } + + // Generated from `ServiceStack.ScriptAdmin` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ScriptAdmin : ServiceStack.IReturn, ServiceStack.IReturn + { + public string Actions { get => throw null; set => throw null; } + public ScriptAdmin() => throw null; + } + + // Generated from `ServiceStack.ScriptAdminResponse` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ScriptAdminResponse + { + public ServiceStack.ResponseStatus ResponseStatus { get => throw null; set => throw null; } + public string[] Results { get => throw null; set => throw null; } + public ScriptAdminResponse() => throw null; + } + + // Generated from `ServiceStack.ScriptAdminService` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ScriptAdminService : ServiceStack.Service + { + public static string[] Actions; + public System.Threading.Tasks.Task Any(ServiceStack.ScriptAdmin request) => throw null; + public static string[] Routes { get => throw null; set => throw null; } + public ScriptAdminService() => throw null; + } + + // Generated from `ServiceStack.ScriptConditionValidator` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ScriptConditionValidator : ServiceStack.FluentValidation.Validators.PropertyValidator, ServiceStack.FluentValidation.Validators.IPropertyValidator, ServiceStack.FluentValidation.Validators.IPredicateValidator + { + public ServiceStack.Script.SharpPage Code { get => throw null; } + protected override bool IsValid(ServiceStack.FluentValidation.Validators.PropertyValidatorContext context) => throw null; + protected override System.Threading.Tasks.Task IsValidAsync(ServiceStack.FluentValidation.Validators.PropertyValidatorContext context, System.Threading.CancellationToken cancellation) => throw null; + public ScriptConditionValidator(ServiceStack.Script.SharpPage code) => throw null; + public override bool ShouldValidateAsynchronously(ServiceStack.FluentValidation.IValidationContext context) => throw null; + } + + // Generated from `ServiceStack.ScriptValidator` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ScriptValidator : ServiceStack.TypeValidator + { + public ServiceStack.Script.SharpPage Code { get => throw null; } + public string Condition { get => throw null; } + public override System.Threading.Tasks.Task IsValidAsync(object dto, ServiceStack.Web.IRequest request) => throw null; + public ScriptValidator(ServiceStack.Script.SharpPage code, string condition) : base(default(string), default(string), default(int?)) => throw null; + } + + // Generated from `ServiceStack.Selector` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class Selector + { + public static string Id() => throw null; + public static string Id(System.Type type) => throw null; + } + + // Generated from `ServiceStack.ServerEventExtensions` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class ServerEventExtensions + { + public static ServiceStack.SubscriptionInfo GetInfo(this ServiceStack.IEventSubscription sub) => throw null; + public static bool HasAnyChannel(this ServiceStack.IEventSubscription sub, string[] channels) => throw null; + public static bool HasChannel(this ServiceStack.IEventSubscription sub, string channel) => throw null; + public static void NotifyAll(this ServiceStack.IServerEvents server, object message) => throw null; + public static System.Threading.Tasks.Task NotifyAllAsync(this ServiceStack.IServerEvents server, object message, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static void NotifyChannel(this ServiceStack.IServerEvents server, string channel, object message) => throw null; + public static System.Threading.Tasks.Task NotifyChannelAsync(this ServiceStack.IServerEvents server, string channel, object message, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static void NotifySession(this ServiceStack.IServerEvents server, string sspid, object message, string channel = default(string)) => throw null; + public static System.Threading.Tasks.Task NotifySessionAsync(this ServiceStack.IServerEvents server, string sspid, object message, string channel = default(string), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static void NotifySubscription(this ServiceStack.IServerEvents server, string subscriptionId, object message, string channel = default(string)) => throw null; + public static System.Threading.Tasks.Task NotifySubscriptionAsync(this ServiceStack.IServerEvents server, string subscriptionId, object message, string channel = default(string), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static void NotifyUserId(this ServiceStack.IServerEvents server, string userId, object message, string channel = default(string)) => throw null; + public static System.Threading.Tasks.Task NotifyUserIdAsync(this ServiceStack.IServerEvents server, string userId, object message, string channel = default(string), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static void NotifyUserName(this ServiceStack.IServerEvents server, string userName, object message, string channel = default(string)) => throw null; + public static System.Threading.Tasks.Task NotifyUserNameAsync(this ServiceStack.IServerEvents server, string userName, object message, string channel = default(string), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + } + + // Generated from `ServiceStack.ServerEventsFeature` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ServerEventsFeature : ServiceStack.Model.IHasStringId, ServiceStack.Model.IHasId, ServiceStack.IPlugin + { + public System.TimeSpan HeartbeatInterval { get => throw null; set => throw null; } + public string HeartbeatPath { get => throw null; set => throw null; } + public System.TimeSpan HouseKeepingInterval { get => throw null; set => throw null; } + public string Id { get => throw null; set => throw null; } + public System.TimeSpan IdleTimeout { get => throw null; set => throw null; } + public bool LimitToAuthenticatedUsers { get => throw null; set => throw null; } + public bool NotifyChannelOfSubscriptions { get => throw null; set => throw null; } + public System.Action> OnConnect { get => throw null; set => throw null; } + public System.Action OnCreated { get => throw null; set => throw null; } + public System.Action OnDispose { get => throw null; set => throw null; } + public System.Action OnError { get => throw null; set => throw null; } + public System.Action OnHeartbeatInit { get => throw null; set => throw null; } + public System.Action OnHungConnection { get => throw null; set => throw null; } + public System.Action OnInit { get => throw null; set => throw null; } + public System.Action OnPublish { get => throw null; set => throw null; } + public System.Func OnPublishAsync { get => throw null; set => throw null; } + public System.Action OnSubscribe { get => throw null; set => throw null; } + public System.Func OnSubscribeAsync { get => throw null; set => throw null; } + public System.Action OnUnsubscribe { get => throw null; set => throw null; } + public System.Func OnUnsubscribeAsync { get => throw null; set => throw null; } + public System.Func OnUpdateAsync { get => throw null; set => throw null; } + public void Register(ServiceStack.IAppHost appHost) => throw null; + public System.Func Serialize { get => throw null; set => throw null; } + public ServerEventsFeature() => throw null; + public string StreamPath { get => throw null; set => throw null; } + public string SubscribersPath { get => throw null; set => throw null; } + public string UnRegisterPath { get => throw null; set => throw null; } + public bool ValidateUserAddress { get => throw null; set => throw null; } + public System.Action WriteEvent { get => throw null; set => throw null; } + public System.Func WriteEventAsync { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.ServerEventsHandler` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ServerEventsHandler : ServiceStack.Host.Handlers.HttpAsyncTaskHandler + { + public override System.Threading.Tasks.Task ProcessRequestAsync(ServiceStack.Web.IRequest req, ServiceStack.Web.IResponse res, string operationName) => throw null; + public static int RemoveExpiredSubscriptionsEvery { get => throw null; } + public override bool RunAsAsync() => throw null; + public ServerEventsHandler() => throw null; + } + + // Generated from `ServiceStack.ServerEventsHeartbeatHandler` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ServerEventsHeartbeatHandler : ServiceStack.Host.Handlers.HttpAsyncTaskHandler + { + public override System.Threading.Tasks.Task ProcessRequestAsync(ServiceStack.Web.IRequest req, ServiceStack.Web.IResponse res, string operationName) => throw null; + public override bool RunAsAsync() => throw null; + public ServerEventsHeartbeatHandler() => throw null; + } + + // Generated from `ServiceStack.ServerEventsSubscribersService` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ServerEventsSubscribersService : ServiceStack.Service + { + public object Any(ServiceStack.GetEventSubscribers request) => throw null; + public ServiceStack.IServerEvents ServerEvents { get => throw null; set => throw null; } + public ServerEventsSubscribersService() => throw null; + } + + // Generated from `ServiceStack.ServerEventsUnRegisterService` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ServerEventsUnRegisterService : ServiceStack.Service + { + public System.Threading.Tasks.Task Any(ServiceStack.UpdateEventSubscriber request) => throw null; + public System.Threading.Tasks.Task Any(ServiceStack.UnRegisterEventSubscriber request) => throw null; + public ServiceStack.IServerEvents ServerEvents { get => throw null; set => throw null; } + public ServerEventsUnRegisterService() => throw null; + } + + // Generated from `ServiceStack.Service` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class Service : System.IDisposable, System.IAsyncDisposable, ServiceStack.Web.IRequiresRequest, ServiceStack.IServiceFilters, ServiceStack.IServiceErrorFilter, ServiceStack.IServiceBeforeFilter, ServiceStack.IServiceBase, ServiceStack.IServiceAfterFilter, ServiceStack.IService, ServiceStack.Configuration.IResolver + { + public T AssertPlugin() where T : class, ServiceStack.IPlugin => throw null; + public virtual ServiceStack.Auth.IAuthRepository AuthRepository { get => throw null; } + public virtual ServiceStack.Auth.IAuthRepositoryAsync AuthRepositoryAsync { get => throw null; } + public virtual ServiceStack.Caching.ICacheClient Cache { get => throw null; } + public virtual ServiceStack.Caching.ICacheClientAsync CacheAsync { get => throw null; } + public virtual System.Data.IDbConnection Db { get => throw null; } + public virtual void Dispose() => throw null; + public System.Threading.Tasks.ValueTask DisposeAsync() => throw null; + public virtual ServiceStack.IServiceGateway Gateway { get => throw null; } + public T GetPlugin() where T : class, ServiceStack.IPlugin => throw null; + public virtual System.Threading.Tasks.ValueTask GetRedisAsync() => throw null; + public virtual ServiceStack.Configuration.IResolver GetResolver() => throw null; + public virtual ServiceStack.Auth.IAuthSession GetSession(bool reload = default(bool)) => throw null; + public virtual System.Threading.Tasks.Task GetSessionAsync(bool reload = default(bool), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static ServiceStack.Configuration.IResolver GlobalResolver { get => throw null; set => throw null; } + public virtual bool IsAuthenticated { get => throw null; } + public virtual ServiceStack.Caching.MemoryCacheClient LocalCache { get => throw null; } + public virtual ServiceStack.Messaging.IMessageProducer MessageProducer { get => throw null; } + public virtual object OnAfterExecute(object response) => throw null; + public virtual void OnBeforeExecute(object requestDto) => throw null; + public virtual System.Threading.Tasks.Task OnExceptionAsync(object requestDto, System.Exception ex) => throw null; + public virtual void PublishMessage(T message) => throw null; + public virtual ServiceStack.Redis.IRedisClient Redis { get => throw null; } + public ServiceStack.Web.IRequest Request { get => throw null; set => throw null; } + public virtual T ResolveService() => throw null; + protected virtual ServiceStack.Web.IResponse Response { get => throw null; } + public Service() => throw null; + protected virtual TUserSession SessionAs() => throw null; + protected virtual System.Threading.Tasks.Task SessionAsAsync() => throw null; + public virtual ServiceStack.Caching.ISession SessionBag { get => throw null; } + public virtual ServiceStack.Caching.ISessionAsync SessionBagAsync { get => throw null; } + public virtual ServiceStack.Caching.ISessionFactory SessionFactory { get => throw null; } + public virtual ServiceStack.Service SetResolver(ServiceStack.Configuration.IResolver resolver) => throw null; + public virtual T TryResolve() => throw null; + public ServiceStack.IO.IVirtualPathProvider VirtualFileSources { get => throw null; } + public ServiceStack.IO.IVirtualFiles VirtualFiles { get => throw null; } + } + + // Generated from `ServiceStack.ServiceExtensions` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class ServiceExtensions + { + public static ServiceStack.Web.IHttpResult AuthenticationRequired(this ServiceStack.IServiceBase service) => throw null; + public static void CacheSet(this ServiceStack.Caching.ICacheClient cache, string key, T value, System.TimeSpan? expiresIn) => throw null; + public static System.Threading.Tasks.Task CacheSetAsync(this ServiceStack.Caching.ICacheClientAsync cache, string key, T value, System.TimeSpan? expiresIn, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static ServiceStack.Caching.ICacheClient GetCacheClient(this ServiceStack.Web.IRequest request) => throw null; + public static ServiceStack.Caching.ICacheClientAsync GetCacheClientAsync(this ServiceStack.Web.IRequest request) => throw null; + public static ServiceStack.Caching.ICacheClient GetMemoryCacheClient(this ServiceStack.Web.IRequest request) => throw null; + public static ServiceStack.Auth.IAuthSession GetSession(this ServiceStack.Web.IRequest httpReq, bool reload = default(bool)) => throw null; + public static ServiceStack.Auth.IAuthSession GetSession(this ServiceStack.IServiceBase service, bool reload = default(bool)) => throw null; + public static System.Threading.Tasks.Task GetSessionAsync(this ServiceStack.Web.IRequest httpReq, bool reload = default(bool), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task GetSessionAsync(this ServiceStack.IServiceBase service, bool reload = default(bool), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static string GetSessionId(this ServiceStack.IServiceBase service) => throw null; + public static System.TimeSpan? GetSessionTimeToLive(this ServiceStack.Web.IRequest httpReq) => throw null; + public static System.TimeSpan? GetSessionTimeToLive(this ServiceStack.Caching.ICacheClient cache, string sessionId) => throw null; + public static System.Threading.Tasks.Task GetSessionTimeToLiveAsync(this ServiceStack.Web.IRequest httpReq, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task GetSessionTimeToLiveAsync(this ServiceStack.Caching.ICacheClientAsync cache, string sessionId, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static bool IsAuthenticated(this ServiceStack.Web.IRequest req) => throw null; + public static System.Threading.Tasks.Task IsAuthenticatedAsync(this ServiceStack.Web.IRequest req) => throw null; + public static ServiceStack.Logging.ILog Log; + public static ServiceStack.Web.IHttpResult Redirect(this ServiceStack.IServiceBase service, string url, string message) => throw null; + public static ServiceStack.Web.IHttpResult Redirect(this ServiceStack.IServiceBase service, string url) => throw null; + public static void RemoveSession(this ServiceStack.Web.IRequest httpReq, string sessionId) => throw null; + public static void RemoveSession(this ServiceStack.Web.IRequest httpReq) => throw null; + public static void RemoveSession(this ServiceStack.Service service) => throw null; + public static void RemoveSession(this ServiceStack.IServiceBase service) => throw null; + public static System.Threading.Tasks.Task RemoveSessionAsync(this ServiceStack.Web.IRequest httpReq, string sessionId, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task RemoveSessionAsync(this ServiceStack.Web.IRequest httpReq, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task RemoveSessionAsync(this ServiceStack.Service service, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task RemoveSessionAsync(this ServiceStack.IServiceBase service, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static object RunAction(this TService service, TRequest request, System.Func invokeAction, ServiceStack.Web.IRequest requestContext = default(ServiceStack.Web.IRequest)) where TService : ServiceStack.IService => throw null; + public static void SaveSession(this ServiceStack.Web.IRequest httpReq, ServiceStack.Auth.IAuthSession session, System.TimeSpan? expiresIn = default(System.TimeSpan?)) => throw null; + public static void SaveSession(this ServiceStack.IServiceBase service, ServiceStack.Auth.IAuthSession session, System.TimeSpan? expiresIn = default(System.TimeSpan?)) => throw null; + public static System.Threading.Tasks.Task SaveSessionAsync(this ServiceStack.Web.IRequest httpReq, ServiceStack.Auth.IAuthSession session, System.TimeSpan? expiresIn = default(System.TimeSpan?), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task SaveSessionAsync(this ServiceStack.IServiceBase service, ServiceStack.Auth.IAuthSession session, System.TimeSpan? expiresIn = default(System.TimeSpan?), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static TUserSession SessionAs(this ServiceStack.Web.IRequest req) => throw null; + public static System.Threading.Tasks.Task SessionAsAsync(this ServiceStack.Web.IRequest req, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + } + + // Generated from `ServiceStack.ServiceGatewayFactoryBase` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public abstract class ServiceGatewayFactoryBase : ServiceStack.Web.IServiceGatewayFactory, ServiceStack.IServiceGatewayAsync, ServiceStack.IServiceGateway + { + public abstract ServiceStack.IServiceGateway GetGateway(System.Type requestType); + protected virtual ServiceStack.IServiceGatewayAsync GetGatewayAsync(System.Type requestType) => throw null; + public virtual ServiceStack.IServiceGateway GetServiceGateway(ServiceStack.Web.IRequest request) => throw null; + public void Publish(object requestDto) => throw null; + public void PublishAll(System.Collections.Generic.IEnumerable requestDtos) => throw null; + public System.Threading.Tasks.Task PublishAllAsync(System.Collections.Generic.IEnumerable requestDtos, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task PublishAsync(object requestDto, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public ServiceStack.Web.IRequest Request { get => throw null; set => throw null; } + public TResponse Send(object requestDto) => throw null; + public System.Collections.Generic.List SendAll(System.Collections.Generic.IEnumerable requestDtos) => throw null; + public System.Threading.Tasks.Task> SendAllAsync(System.Collections.Generic.IEnumerable requestDtos, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task SendAsync(object requestDto, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + protected ServiceGatewayFactoryBase() => throw null; + protected ServiceStack.InProcessServiceGateway localGateway; + } + + // Generated from `ServiceStack.ServiceResponseException` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ServiceResponseException : System.Exception + { + public string ErrorCode { get => throw null; set => throw null; } + public ServiceResponseException(string message) => throw null; + public ServiceResponseException(string errorCode, string errorMessage, string serviceStackTrace) => throw null; + public ServiceResponseException(string errorCode, string errorMessage) => throw null; + public ServiceResponseException(ServiceStack.ResponseStatus responseStatus) => throw null; + public ServiceResponseException() => throw null; + public string ServiceStackTrace { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.ServiceRoutesExtensions` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class ServiceRoutesExtensions + { + public static ServiceStack.Web.IServiceRoutes Add(this ServiceStack.Web.IServiceRoutes routes, string restPath, ServiceStack.ApplyTo verbs) => throw null; + public static ServiceStack.Web.IServiceRoutes Add(this ServiceStack.Web.IServiceRoutes serviceRoutes, string restPath, ServiceStack.ApplyTo verbs, params System.Linq.Expressions.Expression>[] propertyExpressions) => throw null; + public static ServiceStack.Web.IServiceRoutes Add(this ServiceStack.Web.IServiceRoutes routes, System.Type requestType, string restPath, ServiceStack.ApplyTo verbs) => throw null; + public static ServiceStack.Web.IServiceRoutes AddFromAssembly(this ServiceStack.Web.IServiceRoutes routes, params System.Reflection.Assembly[] assembliesWithServices) => throw null; + public static bool IsSubclassOfRawGeneric(this System.Type toCheck, System.Type generic) => throw null; + } + + // Generated from `ServiceStack.ServiceScopeExtensions` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class ServiceScopeExtensions + { + public static Microsoft.Extensions.DependencyInjection.IServiceScope StartScope(this ServiceStack.Web.IRequest request) => throw null; + } + + // Generated from `ServiceStack.ServiceStackCodePage` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public abstract class ServiceStackCodePage : ServiceStack.Script.SharpCodePage, ServiceStack.Web.IRequiresRequest + { + public virtual ServiceStack.Auth.IAuthRepository AuthRepository { get => throw null; } + public virtual ServiceStack.Caching.ICacheClient Cache { get => throw null; } + public virtual System.Data.IDbConnection Db { get => throw null; } + public override void Dispose() => throw null; + public virtual ServiceStack.IServiceGateway Gateway { get => throw null; } + public virtual ServiceStack.Configuration.IResolver GetResolver() => throw null; + public virtual ServiceStack.Auth.IAuthSession GetSession(bool reload = default(bool)) => throw null; + public virtual bool IsAuthenticated { get => throw null; } + public virtual ServiceStack.Caching.MemoryCacheClient LocalCache { get => throw null; } + public virtual ServiceStack.Messaging.IMessageProducer MessageProducer { get => throw null; } + public virtual void PublishMessage(T message) => throw null; + public virtual ServiceStack.Redis.IRedisClient Redis { get => throw null; } + public ServiceStack.Web.IRequest Request { get => throw null; set => throw null; } + public virtual T ResolveService() => throw null; + protected virtual ServiceStack.Web.IResponse Response { get => throw null; } + protected ServiceStackCodePage() : base(default(string)) => throw null; + protected virtual TUserSession SessionAs() => throw null; + public virtual ServiceStack.Caching.ISession SessionBag { get => throw null; } + public virtual ServiceStack.Caching.ISessionFactory SessionFactory { get => throw null; } + public virtual T TryResolve() => throw null; + public ServiceStack.IO.IVirtualPathProvider VirtualFileSources { get => throw null; } + public ServiceStack.IO.IVirtualFiles VirtualFiles { get => throw null; } + } + + // Generated from `ServiceStack.ServiceStackHost` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public abstract class ServiceStackHost : System.IDisposable, ServiceStack.IAppHost, ServiceStack.Configuration.IResolver, Funq.IHasContainer, Funq.IFunqlet + { + public System.Collections.Generic.List AddVirtualFileSources { get => throw null; set => throw null; } + public System.Collections.Generic.List> AfterConfigure { get => throw null; set => throw null; } + public System.DateTime? AfterInitAt { get => throw null; set => throw null; } + public System.Collections.Generic.List> AfterInitCallbacks { get => throw null; set => throw null; } + protected virtual bool AllowSetCookie(ServiceStack.Web.IRequest req, string cookieName) => throw null; + public ServiceStack.Configuration.IAppSettings AppSettings { get => throw null; set => throw null; } + public bool ApplyCustomHandlerRequestFilters(ServiceStack.Web.IRequest httpReq, ServiceStack.Web.IResponse httpRes) => throw null; + public bool ApplyMessageRequestFilters(ServiceStack.Web.IRequest req, ServiceStack.Web.IResponse res, object requestDto) => throw null; + public bool ApplyMessageResponseFilters(ServiceStack.Web.IRequest req, ServiceStack.Web.IResponse res, object response) => throw null; + public virtual System.Threading.Tasks.Task ApplyPreAuthenticateFiltersAsync(ServiceStack.Web.IRequest httpReq, ServiceStack.Web.IResponse httpRes) => throw null; + public bool ApplyPreRequestFilters(ServiceStack.Web.IRequest httpReq, ServiceStack.Web.IResponse httpRes) => throw null; + public System.Threading.Tasks.Task ApplyRequestConvertersAsync(ServiceStack.Web.IRequest req, object requestDto) => throw null; + public bool ApplyRequestFilters(ServiceStack.Web.IRequest req, ServiceStack.Web.IResponse res, object requestDto) => throw null; + public System.Threading.Tasks.Task ApplyRequestFiltersAsync(ServiceStack.Web.IRequest req, ServiceStack.Web.IResponse res, object requestDto) => throw null; + protected System.Threading.Tasks.Task ApplyRequestFiltersSingleAsync(ServiceStack.Web.IRequest req, ServiceStack.Web.IResponse res, object requestDto) => throw null; + public System.Threading.Tasks.Task ApplyResponseConvertersAsync(ServiceStack.Web.IRequest req, object responseDto) => throw null; + public bool ApplyResponseFilters(ServiceStack.Web.IRequest req, ServiceStack.Web.IResponse res, object response) => throw null; + public System.Threading.Tasks.Task ApplyResponseFiltersAsync(ServiceStack.Web.IRequest req, ServiceStack.Web.IResponse res, object response) => throw null; + protected System.Threading.Tasks.Task ApplyResponseFiltersSingleAsync(ServiceStack.Web.IRequest req, ServiceStack.Web.IResponse res, object response) => throw null; + public void AssertContentType(string contentType) => throw null; + public void AssertFeatures(ServiceStack.Feature usesFeatures) => throw null; + public System.Collections.Generic.List AsyncErrors { get => throw null; set => throw null; } + public System.Collections.Generic.List> BeforeConfigure { get => throw null; set => throw null; } + public System.Collections.Generic.List CatchAllHandlers { get => throw null; set => throw null; } + public ServiceStack.HostConfig Config { get => throw null; set => throw null; } + public abstract void Configure(Funq.Container container); + public virtual Funq.Container Container { get => throw null; set => throw null; } + public ServiceStack.IO.IVirtualDirectory ContentRootDirectory { get => throw null; } + public ServiceStack.Web.IContentTypes ContentTypes { get => throw null; set => throw null; } + public virtual void CookieOptionsFilter(System.Net.Cookie cookie, Microsoft.AspNetCore.Http.CookieOptions cookieOptions) => throw null; + public virtual ServiceStack.ErrorResponse CreateErrorResponse(System.Exception ex, object request = default(object)) => throw null; + public virtual ServiceStack.ResponseStatus CreateResponseStatus(System.Exception ex, object request = default(object)) => throw null; + protected virtual ServiceStack.Host.ServiceController CreateServiceController(params System.Type[] serviceTypes) => throw null; + protected virtual ServiceStack.Host.ServiceController CreateServiceController(params System.Reflection.Assembly[] assembliesWithServices) => throw null; + public virtual ServiceStack.Web.IServiceRunner CreateServiceRunner(ServiceStack.Host.ActionContext actionContext) => throw null; + public System.Collections.Generic.Dictionary CustomErrorHttpHandlers { get => throw null; set => throw null; } + public ServiceStack.Script.ScriptContext DefaultScriptContext { get => throw null; set => throw null; } + public void Dispose() => throw null; + protected virtual void Dispose(bool disposing) => throw null; + public virtual object EvalExpression(string expr) => throw null; + public virtual object EvalExpressionCached(string expr) => throw null; + public virtual object EvalScript(ServiceStack.Script.PageResult pageResult, ServiceStack.Web.IRequest req = default(ServiceStack.Web.IRequest), System.Collections.Generic.Dictionary args = default(System.Collections.Generic.Dictionary)) => throw null; + public virtual System.Threading.Tasks.Task EvalScriptAsync(ServiceStack.Script.PageResult pageResult, ServiceStack.Web.IRequest req = default(ServiceStack.Web.IRequest), System.Collections.Generic.Dictionary args = default(System.Collections.Generic.Dictionary)) => throw null; + public virtual object EvalScriptValue(ServiceStack.IScriptValue scriptValue, ServiceStack.Web.IRequest req = default(ServiceStack.Web.IRequest), System.Collections.Generic.Dictionary args = default(System.Collections.Generic.Dictionary)) => throw null; + public virtual System.Threading.Tasks.Task EvalScriptValueAsync(ServiceStack.IScriptValue scriptValue, ServiceStack.Web.IRequest req = default(ServiceStack.Web.IRequest), System.Collections.Generic.Dictionary args = default(System.Collections.Generic.Dictionary)) => throw null; + public System.Collections.Generic.HashSet ExcludeAutoRegisteringServiceTypes { get => throw null; set => throw null; } + public void ExecTypedFilters(System.Collections.Generic.Dictionary typedFilters, ServiceStack.Web.IRequest req, ServiceStack.Web.IResponse res, object dto) => throw null; + public System.Threading.Tasks.Task ExecTypedFiltersAsync(System.Collections.Generic.Dictionary typedFilters, ServiceStack.Web.IRequest req, ServiceStack.Web.IResponse res, object dto) => throw null; + public virtual object ExecuteMessage(ServiceStack.Messaging.IMessage mqMessage) => throw null; + public virtual object ExecuteMessage(ServiceStack.Messaging.IMessage dto, ServiceStack.Web.IRequest req) => throw null; + public System.Threading.Tasks.Task ExecuteMessageAsync(ServiceStack.Messaging.IMessage mqMessage, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task ExecuteMessageAsync(ServiceStack.Messaging.IMessage mqMessage, ServiceStack.Web.IRequest req, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public virtual object ExecuteService(object requestDto, ServiceStack.Web.IRequest req) => throw null; + public virtual object ExecuteService(object requestDto, ServiceStack.RequestAttributes requestAttributes) => throw null; + public virtual object ExecuteService(object requestDto) => throw null; + public virtual System.Threading.Tasks.Task ExecuteServiceAsync(object requestDto, ServiceStack.Web.IRequest req) => throw null; + public System.Collections.Generic.List FallbackHandlers { get => throw null; set => throw null; } + public System.Collections.Generic.List GatewayExceptionHandlers { get => throw null; set => throw null; } + public System.Collections.Generic.List GatewayExceptionHandlersAsync { get => throw null; set => throw null; } + public System.Collections.Generic.List> GatewayRequestFilters { get => throw null; set => throw null; } + public System.Collections.Generic.List> GatewayRequestFiltersAsync { get => throw null; set => throw null; } + public System.Collections.Generic.List> GatewayResponseFilters { get => throw null; set => throw null; } + public System.Collections.Generic.List> GatewayResponseFiltersAsync { get => throw null; set => throw null; } + public virtual string GenerateWsdl(ServiceStack.Metadata.WsdlTemplateBase wsdlTemplate) => throw null; + public virtual ServiceStack.Auth.IAuthRepository GetAuthRepository(ServiceStack.Web.IRequest req = default(ServiceStack.Web.IRequest)) => throw null; + public virtual ServiceStack.Auth.IAuthRepositoryAsync GetAuthRepositoryAsync(ServiceStack.Web.IRequest req = default(ServiceStack.Web.IRequest)) => throw null; + public virtual string GetAuthorization(ServiceStack.Web.IRequest req) => throw null; + public virtual string GetBaseUrl(ServiceStack.Web.IRequest httpReq) => throw null; + public virtual string GetBearerToken(ServiceStack.Web.IRequest req) => throw null; + public virtual ServiceStack.Caching.ICacheClient GetCacheClient(ServiceStack.Web.IRequest req = default(ServiceStack.Web.IRequest)) => throw null; + public virtual ServiceStack.Caching.ICacheClientAsync GetCacheClientAsync(ServiceStack.Web.IRequest req = default(ServiceStack.Web.IRequest)) => throw null; + public virtual ServiceStack.Web.ICookies GetCookies(ServiceStack.Web.IHttpResponse res) => throw null; + public ServiceStack.Host.Handlers.IServiceStackHandler GetCustomErrorHandler(int errorStatusCode) => throw null; + public ServiceStack.Host.Handlers.IServiceStackHandler GetCustomErrorHandler(System.Net.HttpStatusCode errorStatus) => throw null; + public ServiceStack.Host.IHttpHandler GetCustomErrorHttpHandler(System.Net.HttpStatusCode errorStatus) => throw null; + public virtual System.Data.IDbConnection GetDbConnection(ServiceStack.Web.IRequest req = default(ServiceStack.Web.IRequest)) => throw null; + public virtual System.TimeSpan GetDefaultSessionExpiry(ServiceStack.Web.IRequest req) => throw null; + public virtual string GetJwtToken(ServiceStack.Web.IRequest req) => throw null; + public virtual ServiceStack.Caching.MemoryCacheClient GetMemoryCacheClient(ServiceStack.Web.IRequest req = default(ServiceStack.Web.IRequest)) => throw null; + public virtual ServiceStack.Messaging.IMessageProducer GetMessageProducer(ServiceStack.Web.IRequest req = default(ServiceStack.Web.IRequest)) => throw null; + public virtual System.Collections.Generic.List GetMetadataPluginIds() => throw null; + public ServiceStack.Host.Handlers.IServiceStackHandler GetNotFoundHandler() => throw null; + public T GetPlugin() where T : class, ServiceStack.IPlugin => throw null; + public virtual ServiceStack.Redis.IRedisClient GetRedisClient(ServiceStack.Web.IRequest req = default(ServiceStack.Web.IRequest)) => throw null; + public virtual System.Threading.Tasks.ValueTask GetRedisClientAsync(ServiceStack.Web.IRequest req = default(ServiceStack.Web.IRequest)) => throw null; + public virtual ServiceStack.RouteAttribute[] GetRouteAttributes(System.Type requestType) => throw null; + public virtual T GetRuntimeConfig(ServiceStack.Web.IRequest req, string name, T defaultValue) => throw null; + public virtual ServiceStack.IServiceGateway GetServiceGateway(ServiceStack.Web.IRequest req) => throw null; + public virtual ServiceStack.IServiceGateway GetServiceGateway() => throw null; + public virtual ServiceStack.MetadataTypesConfig GetTypesConfigForMetadata(ServiceStack.Web.IRequest req) => throw null; + public virtual System.Collections.Generic.List GetVirtualFileSources() => throw null; + public virtual string GetWebRootPath() => throw null; + public ServiceStack.Host.Handlers.IServiceStackHandler GlobalHtmlErrorHttpHandler { get => throw null; set => throw null; } + public System.Collections.Generic.List> GlobalMessageRequestFilters { get => throw null; } + public System.Collections.Generic.List> GlobalMessageRequestFiltersAsync { get => throw null; } + public System.Collections.Generic.List> GlobalMessageResponseFilters { get => throw null; } + public System.Collections.Generic.List> GlobalMessageResponseFiltersAsync { get => throw null; } + public System.Collections.Generic.List> GlobalRequestFilters { get => throw null; set => throw null; } + public System.Collections.Generic.List> GlobalRequestFiltersAsync { get => throw null; set => throw null; } + public System.Collections.Generic.List> GlobalResponseFilters { get => throw null; set => throw null; } + public System.Collections.Generic.List> GlobalResponseFiltersAsync { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary GlobalTypedMessageRequestFilters { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary GlobalTypedMessageResponseFilters { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary GlobalTypedRequestFilters { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary GlobalTypedRequestFiltersAsync { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary GlobalTypedResponseFilters { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary GlobalTypedResponseFiltersAsync { get => throw null; set => throw null; } + public void HandleErrorResponse(ServiceStack.Web.IRequest httpReq, ServiceStack.Web.IResponse httpRes, System.Net.HttpStatusCode errorStatus, string errorStatusDescription = default(string)) => throw null; + public virtual System.Threading.Tasks.Task HandleResponseException(ServiceStack.Web.IRequest httpReq, ServiceStack.Web.IResponse httpRes, string operationName, System.Exception ex) => throw null; + public virtual System.Threading.Tasks.Task HandleShortCircuitedErrors(ServiceStack.Web.IRequest req, ServiceStack.Web.IResponse res, object requestDto) => throw null; + protected virtual System.Threading.Tasks.Task HandleUncaughtException(ServiceStack.Web.IRequest httpReq, ServiceStack.Web.IResponse httpRes, string operationName, System.Exception ex) => throw null; + public bool HasAccessToMetadata(ServiceStack.Web.IRequest httpReq, ServiceStack.Web.IResponse httpRes) => throw null; + public bool HasFeature(ServiceStack.Feature feature) => throw null; + public bool HasPlugin() where T : class, ServiceStack.IPlugin => throw null; + public bool HasStarted { get => throw null; } + public bool HasValidAuthSecret(ServiceStack.Web.IRequest httpReq) => throw null; + public virtual ServiceStack.ServiceStackHost Init() => throw null; + public System.Collections.Generic.List InsertVirtualFileSources { get => throw null; set => throw null; } + public static ServiceStack.ServiceStackHost Instance { get => throw null; set => throw null; } + public bool IsDebugLogEnabled { get => throw null; } + public static bool IsReady() => throw null; + public virtual void LoadPlugin(params ServiceStack.IPlugin[] plugins) => throw null; + public virtual string MapProjectPath(string relativePath) => throw null; + public ServiceStack.Host.ServiceMetadata Metadata { get => throw null; set => throw null; } + public ServiceStack.Metadata.MetadataPagesConfig MetadataPagesConfig { get => throw null; } + public static string NormalizePathInfo(string pathInfo, string mode) => throw null; + public virtual void OnAfterConfigChanged() => throw null; + public virtual object OnAfterExecute(ServiceStack.Web.IRequest req, object requestDto, object response) => throw null; + public virtual void OnAfterInit() => throw null; + public virtual void OnApplicationStopping() => throw null; + public virtual void OnBeforeInit() => throw null; + public virtual void OnConfigLoad() => throw null; + public System.Collections.Generic.List> OnDisposeCallbacks { get => throw null; set => throw null; } + public virtual void OnEndRequest(ServiceStack.Web.IRequest request = default(ServiceStack.Web.IRequest)) => throw null; + public System.Collections.Generic.List> OnEndRequestCallbacks { get => throw null; set => throw null; } + public virtual void OnExceptionTypeFilter(System.Exception ex, ServiceStack.ResponseStatus responseStatus) => throw null; + public virtual System.Threading.Tasks.Task OnGatewayException(ServiceStack.Web.IRequest httpReq, object request, System.Exception ex) => throw null; + public virtual void OnLogError(System.Type type, string message, System.Exception innerEx = default(System.Exception)) => throw null; + public virtual object OnPostExecuteServiceFilter(ServiceStack.IService service, object response, ServiceStack.Web.IRequest httpReq, ServiceStack.Web.IResponse httpRes) => throw null; + public virtual object OnPreExecuteServiceFilter(ServiceStack.IService service, object request, ServiceStack.Web.IRequest httpReq, ServiceStack.Web.IResponse httpRes) => throw null; + public virtual void OnSaveSession(ServiceStack.Web.IRequest httpReq, ServiceStack.Auth.IAuthSession session, System.TimeSpan? expiresIn = default(System.TimeSpan?)) => throw null; + public virtual System.Threading.Tasks.Task OnSaveSessionAsync(ServiceStack.Web.IRequest httpReq, ServiceStack.Auth.IAuthSession session, System.TimeSpan? expiresIn = default(System.TimeSpan?), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public virtual System.Threading.Tasks.Task OnServiceException(ServiceStack.Web.IRequest httpReq, object request, System.Exception ex) => throw null; + public virtual ServiceStack.Auth.IAuthSession OnSessionFilter(ServiceStack.Web.IRequest req, ServiceStack.Auth.IAuthSession session, string withSessionId) => throw null; + public virtual void OnStartupException(System.Exception ex) => throw null; + public virtual System.Threading.Tasks.Task OnUncaughtException(ServiceStack.Web.IRequest httpReq, ServiceStack.Web.IResponse httpRes, string operationName, System.Exception ex) => throw null; + public virtual string PathBase { get => throw null; set => throw null; } + public System.Collections.Generic.List Plugins { get => throw null; set => throw null; } + public System.Collections.Generic.List PluginsLoaded { get => throw null; set => throw null; } + protected void PopulateArrayFilters() => throw null; + public System.Collections.Generic.List> PreRequestFilters { get => throw null; set => throw null; } + public virtual void PublishMessage(ServiceStack.Messaging.IMessageProducer messageProducer, T message) => throw null; + public System.Collections.Generic.List> RawHttpHandlers { get => throw null; set => throw null; } + public System.DateTime? ReadyAt { get => throw null; set => throw null; } + public virtual void Register(T instance) => throw null; + public virtual void RegisterAs() where T : TAs => throw null; + protected virtual void RegisterLicenseKey(string licenseKeyText) => throw null; + public virtual void RegisterService(params string[] atRestPaths) where T : ServiceStack.IService => throw null; + public virtual void RegisterService(System.Type serviceType, params string[] atRestPaths) => throw null; + public void RegisterServicesInAssembly(System.Reflection.Assembly assembly) => throw null; + public void RegisterTypedMessageRequestFilter(System.Action filterFn) => throw null; + public void RegisterTypedMessageResponseFilter(System.Action filterFn) => throw null; + public void RegisterTypedRequestFilter(System.Func> filter) => throw null; + public void RegisterTypedRequestFilter(System.Action filterFn) => throw null; + public void RegisterTypedRequestFilterAsync(System.Func filterFn) => throw null; + public void RegisterTypedRequestFilterAsync(System.Func> filter) => throw null; + public void RegisterTypedResponseFilter(System.Func> filter) => throw null; + public void RegisterTypedResponseFilter(System.Action filterFn) => throw null; + public void RegisterTypedResponseFilterAsync(System.Func filterFn) => throw null; + public void RegisterTypedResponseFilterAsync(System.Func> filter) => throw null; + public virtual void Release(object instance) => throw null; + public System.Collections.Generic.Dictionary> RequestBinders { get => throw null; } + public System.Collections.Generic.List>> RequestConverters { get => throw null; set => throw null; } + public virtual T Resolve() => throw null; + public virtual string ResolveAbsoluteUrl(string virtualPath, ServiceStack.Web.IRequest httpReq) => throw null; + public virtual string ResolveLocalizedString(string text, ServiceStack.Web.IRequest request = default(ServiceStack.Web.IRequest)) => throw null; + public virtual string ResolveLocalizedStringFormat(string text, object[] args, ServiceStack.Web.IRequest request = default(ServiceStack.Web.IRequest)) => throw null; + public virtual string ResolvePathInfo(ServiceStack.Web.IRequest request, string originalPathInfo) => throw null; + public virtual string ResolvePhysicalPath(string virtualPath, ServiceStack.Web.IRequest httpReq) => throw null; + public System.Collections.Generic.List>> ResponseConverters { get => throw null; set => throw null; } + public System.Collections.Generic.List RestPaths { get => throw null; set => throw null; } + public virtual ServiceStack.Host.IHttpHandler ReturnRedirectHandler(ServiceStack.Web.IHttpRequest httpReq) => throw null; + public virtual ServiceStack.Host.IHttpHandler ReturnRequestInfoHandler(ServiceStack.Web.IHttpRequest httpReq) => throw null; + public ServiceStack.IO.IVirtualDirectory RootDirectory { get => throw null; } + public ServiceStack.Web.IServiceRoutes Routes { get => throw null; set => throw null; } + public ServiceStack.RpcGateway RpcGateway { get => throw null; set => throw null; } + public ServiceStack.Script.ScriptContext ScriptContext { get => throw null; } + public System.Collections.Generic.List ServiceAssemblies { get => throw null; set => throw null; } + public ServiceStack.Host.ServiceController ServiceController { get => throw null; set => throw null; } + public System.Collections.Generic.List ServiceExceptionHandlers { get => throw null; set => throw null; } + public System.Collections.Generic.List ServiceExceptionHandlersAsync { get => throw null; set => throw null; } + public string ServiceName { get => throw null; set => throw null; } + protected ServiceStackHost(string serviceName, params System.Reflection.Assembly[] assembliesWithServices) => throw null; + public virtual void SetConfig(ServiceStack.HostConfig config) => throw null; + public virtual bool SetCookieFilter(ServiceStack.Web.IRequest req, System.Net.Cookie cookie) => throw null; + public virtual bool ShouldCompressFile(ServiceStack.IO.IVirtualFile file) => throw null; + public virtual ServiceStack.ServiceStackHost Start(string urlBase) => throw null; + public System.Collections.Generic.List StartUpErrors { get => throw null; set => throw null; } + public System.DateTime StartedAt { get => throw null; set => throw null; } + public bool TestMode { get => throw null; set => throw null; } + public virtual ServiceStack.Web.IRequest TryGetCurrentRequest() => throw null; + public virtual void TryGetNativeCacheClient(ServiceStack.Web.IRequest req, out ServiceStack.Caching.ICacheClient cacheSync, out ServiceStack.Caching.ICacheClientAsync cacheAsync) => throw null; + public virtual T TryResolve() => throw null; + public System.Collections.Generic.List UncaughtExceptionHandlers { get => throw null; set => throw null; } + public System.Collections.Generic.List UncaughtExceptionHandlersAsync { get => throw null; set => throw null; } + public System.Exception UseException(System.Exception ex) => throw null; + public virtual bool UseHttps(ServiceStack.Web.IRequest httpReq) => throw null; + public System.Collections.Generic.List ViewEngines { get => throw null; set => throw null; } + public ServiceStack.IO.IVirtualPathProvider VirtualFileSources { get => throw null; set => throw null; } + public ServiceStack.IO.IVirtualFiles VirtualFiles { get => throw null; set => throw null; } + public virtual System.Threading.Tasks.Task WriteAutoHtmlResponseAsync(ServiceStack.Web.IRequest request, object response, string html, System.IO.Stream outputStream) => throw null; + // ERR: Stub generator didn't handle member: ~ServiceStackHost + } + + // Generated from `ServiceStack.ServiceStackHttpHandler` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ServiceStackHttpHandler : ServiceStack.Host.Handlers.HttpAsyncTaskHandler + { + public override void ProcessRequest(ServiceStack.Web.IRequest httpReq, ServiceStack.Web.IResponse httpRes, string operationName) => throw null; + public ServiceStackHttpHandler(ServiceStack.Host.Handlers.IServiceStackHandler servicestackHandler) => throw null; + } + + // Generated from `ServiceStack.ServiceStackProvider` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ServiceStackProvider : System.IDisposable, ServiceStack.IServiceStackProvider + { + public ServiceStack.Configuration.IAppSettings AppSettings { get => throw null; } + public ServiceStack.Auth.IAuthRepository AuthRepository { get => throw null; } + public ServiceStack.Auth.IAuthRepositoryAsync AuthRepositoryAsync { get => throw null; } + public virtual ServiceStack.Caching.ICacheClient Cache { get => throw null; } + public virtual ServiceStack.Caching.ICacheClientAsync CacheAsync { get => throw null; } + public virtual void ClearSession() => throw null; + public System.Threading.Tasks.Task ClearSessionAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public virtual System.Data.IDbConnection Db { get => throw null; } + public virtual void Dispose() => throw null; + public System.Threading.Tasks.ValueTask DisposeAsync() => throw null; + public object Execute(object requestDto) => throw null; + public object Execute(ServiceStack.Web.IRequest request) => throw null; + public TResponse Execute(ServiceStack.IReturn requestDto) => throw null; + public object ForwardRequest() => throw null; + public virtual ServiceStack.IServiceGateway Gateway { get => throw null; } + public virtual System.Threading.Tasks.ValueTask GetRedisAsync() => throw null; + public virtual ServiceStack.Configuration.IResolver GetResolver() => throw null; + public virtual ServiceStack.Auth.IAuthSession GetSession(bool reload = default(bool)) => throw null; + public virtual System.Threading.Tasks.Task GetSessionAsync(bool reload = default(bool), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public virtual bool IsAuthenticated { get => throw null; } + public virtual ServiceStack.Messaging.IMessageProducer MessageProducer { get => throw null; } + public virtual void PublishMessage(T message) => throw null; + public virtual ServiceStack.Redis.IRedisClient Redis { get => throw null; } + public virtual ServiceStack.Web.IHttpRequest Request { get => throw null; } + public virtual T ResolveService() => throw null; + public virtual ServiceStack.Web.IHttpResponse Response { get => throw null; } + public ServiceStack.RpcGateway RpcGateway { get => throw null; } + public ServiceStackProvider(ServiceStack.Web.IHttpRequest request, ServiceStack.Configuration.IResolver resolver = default(ServiceStack.Configuration.IResolver)) => throw null; + public virtual TUserSession SessionAs() => throw null; + public virtual System.Threading.Tasks.Task SessionAsAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public virtual ServiceStack.Caching.ISession SessionBag { get => throw null; } + public virtual ServiceStack.Caching.ISessionAsync SessionBagAsync { get => throw null; } + public virtual ServiceStack.Caching.ISessionFactory SessionFactory { get => throw null; } + public virtual void SetResolver(ServiceStack.Configuration.IResolver resolver) => throw null; + public virtual T TryResolve() => throw null; + } + + // Generated from `ServiceStack.ServiceStackProviderExtensions` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class ServiceStackProviderExtensions + { + public static bool HasAccess(this ServiceStack.IHasServiceStackProvider hasProvider, System.Collections.Generic.ICollection roleAttrs, System.Collections.Generic.ICollection anyRoleAttrs, System.Collections.Generic.ICollection permAttrs, System.Collections.Generic.ICollection anyPermAttrs) => throw null; + public static bool IsAuthorized(this ServiceStack.IHasServiceStackProvider hasProvider, ServiceStack.AuthenticateAttribute authAttr) => throw null; + public static ServiceStack.FluentValidation.IValidator ResolveValidator(this ServiceStack.IHasServiceStackProvider provider) => throw null; + } + + // Generated from `ServiceStack.ServiceStackScriptBlocks` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ServiceStackScriptBlocks : ServiceStack.Script.IScriptPlugin + { + public void Register(ServiceStack.Script.ScriptContext context) => throw null; + public ServiceStackScriptBlocks() => throw null; + } + + // Generated from `ServiceStack.ServiceStackScriptUtils` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class ServiceStackScriptUtils + { + public static ServiceStack.ResponseStatus GetErrorStatus(this ServiceStack.Script.ScriptScopeContext scope) => throw null; + public static ServiceStack.Web.IHttpRequest GetHttpRequest(this ServiceStack.Script.ScriptScopeContext scope) => throw null; + public static ServiceStack.Web.IRequest GetRequest(this ServiceStack.Script.ScriptScopeContext scope) => throw null; + public static System.Collections.Generic.HashSet GetUserAttributes(this ServiceStack.Web.IRequest request) => throw null; + public static string ResolveUrl(this ServiceStack.Script.ScriptScopeContext scope, string url) => throw null; + public static ServiceStack.NavOptions WithDefaults(this ServiceStack.NavOptions options, ServiceStack.Web.IRequest request) => throw null; + } + + // Generated from `ServiceStack.ServiceStackScripts` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ServiceStackScripts : ServiceStack.Script.ScriptMethods, ServiceStack.Script.IConfigureScriptContext + { + public void Configure(ServiceStack.Script.ScriptContext context) => throw null; + public static ServiceStack.Logging.ILog Log; + public static System.Collections.Generic.List RemoveNewLinesFor { get => throw null; } + public ServiceStackScripts() => throw null; + public static ServiceStack.HttpResult ToHttpResult(System.Collections.Generic.Dictionary args) => throw null; + public object assertPermission(ServiceStack.Script.ScriptScopeContext scope, string permission, System.Collections.Generic.Dictionary options) => throw null; + public object assertPermission(ServiceStack.Script.ScriptScopeContext scope, string permission) => throw null; + public object assertRole(ServiceStack.Script.ScriptScopeContext scope, string role, System.Collections.Generic.Dictionary options) => throw null; + public object assertRole(ServiceStack.Script.ScriptScopeContext scope, string role) => throw null; + public ServiceStack.Auth.IAuthRepository authRepo(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public object baseUrl(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public ServiceStack.IRawString bundleCss(object virtualPaths, object options) => throw null; + public ServiceStack.IRawString bundleCss(object virtualPaths) => throw null; + public ServiceStack.IRawString bundleHtml(object virtualPaths, object options) => throw null; + public ServiceStack.IRawString bundleHtml(object virtualPaths) => throw null; + public ServiceStack.IRawString bundleJs(object virtualPaths, object options) => throw null; + public ServiceStack.IRawString bundleJs(object virtualPaths) => throw null; + public ServiceStack.Auth.IUserAuth createUserAuth(ServiceStack.Auth.IAuthRepository authRepo, ServiceStack.Auth.IUserAuth newUser, string password) => throw null; + public ServiceStack.Script.IgnoreResult deleteUserAuth(ServiceStack.Auth.IAuthRepository authRepo, string userAuthId) => throw null; + public object endIfAuthenticated(ServiceStack.Script.ScriptScopeContext scope, object value) => throw null; + public string errorResponse(ServiceStack.Script.ScriptScopeContext scope, string fieldName) => throw null; + public string errorResponse(ServiceStack.Script.ScriptScopeContext scope, ServiceStack.ResponseStatus errorStatus, string fieldName) => throw null; + public string errorResponse(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public string errorResponseExcept(ServiceStack.Script.ScriptScopeContext scope, System.Collections.IEnumerable fields) => throw null; + public string errorResponseExcept(ServiceStack.Script.ScriptScopeContext scope, ServiceStack.ResponseStatus errorStatus, System.Collections.IEnumerable fields) => throw null; + public string errorResponseSummary(ServiceStack.Script.ScriptScopeContext scope, ServiceStack.ResponseStatus errorStatus) => throw null; + public string errorResponseSummary(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public object execService(ServiceStack.Script.ScriptScopeContext scope, string requestName, object options) => throw null; + public object execService(ServiceStack.Script.ScriptScopeContext scope, string requestName) => throw null; + public bool formCheckValue(ServiceStack.Script.ScriptScopeContext scope, string name) => throw null; + public string formValue(ServiceStack.Script.ScriptScopeContext scope, string name, string defaultValue) => throw null; + public string formValue(ServiceStack.Script.ScriptScopeContext scope, string name) => throw null; + public string[] formValues(ServiceStack.Script.ScriptScopeContext scope, string name) => throw null; + public ServiceStack.ResponseStatus getErrorStatus(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public ServiceStack.Web.IHttpResult getHttpResult(ServiceStack.Script.ScriptScopeContext scope, object options) => throw null; + public ServiceStack.Auth.IUserAuth getUserAuth(ServiceStack.Auth.IAuthRepository authRepo, string userAuthId) => throw null; + public ServiceStack.Auth.IUserAuth getUserAuthByUserName(ServiceStack.Auth.IAuthRepository authRepo, string userNameOrEmail) => throw null; + public System.Collections.Generic.List getUserAuths(ServiceStack.Auth.IAuthRepository authRepo, System.Collections.Generic.Dictionary options) => throw null; + public System.Collections.Generic.List getUserAuths(ServiceStack.Auth.IAuthRepository authRepo) => throw null; + public object getUserSession(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public bool hasErrorStatus(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public object hasPermission(ServiceStack.Script.ScriptScopeContext scope, string permission) => throw null; + public object hasRole(ServiceStack.Script.ScriptScopeContext scope, string role) => throw null; + public ServiceStack.IO.FileSystemVirtualFiles hostVfsFileSystem() => throw null; + public ServiceStack.IO.GistVirtualFiles hostVfsGist() => throw null; + public ServiceStack.IO.MemoryVirtualFiles hostVfsMemory() => throw null; + public ServiceStack.Web.IHttpRequest httpRequest(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public ServiceStack.HttpResult httpResult(ServiceStack.Script.ScriptScopeContext scope, object options) => throw null; + public object ifAuthenticated(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public object ifNotAuthenticated(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public bool isAuthenticated(ServiceStack.Script.ScriptScopeContext scope, string provider) => throw null; + public bool isAuthenticated(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public ServiceStack.Auth.IUserAuth newUserAuth(ServiceStack.Auth.IAuthRepository authRepo) => throw null; + public ServiceStack.Auth.IUserAuthDetails newUserAuthDetails(ServiceStack.Auth.IAuthRepository authRepo) => throw null; + public object onlyIfAuthenticated(ServiceStack.Script.ScriptScopeContext scope, object value) => throw null; + public ServiceStack.Script.IgnoreResult publishMessage(ServiceStack.Script.ScriptScopeContext scope, string requestName, object dto, object options) => throw null; + public ServiceStack.Script.IgnoreResult publishMessage(ServiceStack.Script.ScriptScopeContext scope, string requestName, object dto) => throw null; + public object publishToGateway(ServiceStack.Script.ScriptScopeContext scope, string requestName) => throw null; + public object publishToGateway(ServiceStack.Script.ScriptScopeContext scope, object dto, string requestName, object options) => throw null; + public object publishToGateway(ServiceStack.Script.ScriptScopeContext scope, object dto, string requestName) => throw null; + public object redirectIfNotAuthenticated(ServiceStack.Script.ScriptScopeContext scope, string path) => throw null; + public object redirectIfNotAuthenticated(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public object redirectTo(ServiceStack.Script.ScriptScopeContext scope, string path) => throw null; + public object requestItem(ServiceStack.Script.ScriptScopeContext scope, string key) => throw null; + public object resolveUrl(ServiceStack.Script.ScriptScopeContext scope, string virtualPath) => throw null; + public ServiceStack.Script.IgnoreResult saveUserAuth(ServiceStack.Auth.IAuthRepository authRepo, ServiceStack.Auth.IUserAuth userAuth) => throw null; + public System.Collections.Generic.List searchUserAuths(ServiceStack.Auth.IAuthRepository authRepo, System.Collections.Generic.Dictionary options) => throw null; + public object sendToAutoQuery(ServiceStack.Script.ScriptScopeContext scope, string requestName) => throw null; + public object sendToAutoQuery(ServiceStack.Script.ScriptScopeContext scope, object dto, string requestName, object options) => throw null; + public object sendToAutoQuery(ServiceStack.Script.ScriptScopeContext scope, object dto, string requestName) => throw null; + public object sendToGateway(ServiceStack.Script.ScriptScopeContext scope, string requestName) => throw null; + public object sendToGateway(ServiceStack.Script.ScriptScopeContext scope, object dto, string requestName, object options) => throw null; + public object sendToGateway(ServiceStack.Script.ScriptScopeContext scope, object dto, string requestName) => throw null; + public ServiceStack.IRawString serviceStackLogoDataUri(string color) => throw null; + public ServiceStack.IRawString serviceStackLogoDataUri() => throw null; + public ServiceStack.IRawString serviceStackLogoDataUriLight() => throw null; + public ServiceStack.IRawString serviceStackLogoSvg(string color) => throw null; + public ServiceStack.IRawString serviceStackLogoSvg() => throw null; + public string serviceUrl(ServiceStack.Script.ScriptScopeContext scope, string requestName, System.Collections.Generic.Dictionary properties, string httpMethod) => throw null; + public string serviceUrl(ServiceStack.Script.ScriptScopeContext scope, string requestName, System.Collections.Generic.Dictionary properties) => throw null; + public string serviceUrl(ServiceStack.Script.ScriptScopeContext scope, string requestName) => throw null; + public ServiceStack.Script.IgnoreResult svgAdd(string svg, string name, string cssFile) => throw null; + public ServiceStack.Script.IgnoreResult svgAdd(string svg, string name) => throw null; + public ServiceStack.Script.IgnoreResult svgAddFile(ServiceStack.Script.ScriptScopeContext scope, string svgPath, string name, string cssFile) => throw null; + public ServiceStack.Script.IgnoreResult svgAddFile(ServiceStack.Script.ScriptScopeContext scope, string svgPath, string name) => throw null; + public ServiceStack.IRawString svgBackgroundImageCss(string name, string fillColor) => throw null; + public ServiceStack.IRawString svgBackgroundImageCss(string name) => throw null; + public string svgBaseUrl(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public System.Collections.Generic.Dictionary> svgCssFiles() => throw null; + public ServiceStack.IRawString svgDataUri(string name, string fillColor) => throw null; + public ServiceStack.IRawString svgDataUri(string name) => throw null; + public System.Collections.Generic.Dictionary svgDataUris() => throw null; + public ServiceStack.IRawString svgFill(string svg, string color) => throw null; + public ServiceStack.IRawString svgImage(string name, string fillColor) => throw null; + public ServiceStack.IRawString svgImage(string name) => throw null; + public System.Collections.Generic.Dictionary svgImages() => throw null; + public ServiceStack.IRawString svgInBackgroundImageCss(string svg) => throw null; + public object toResults(object dto) => throw null; + public ServiceStack.Auth.IUserAuth tryAuthenticate(ServiceStack.Script.ScriptScopeContext scope, ServiceStack.Auth.IAuthRepository authRepo, string userName, string password) => throw null; + public ServiceStack.Script.IgnoreResult updateUserAuth(ServiceStack.Auth.IAuthRepository authRepo, ServiceStack.Auth.IUserAuth existingUser, ServiceStack.Auth.IUserAuth newUser, string password) => throw null; + public ServiceStack.Auth.IUserAuth updateUserAuth(ServiceStack.Auth.IAuthRepository authRepo, ServiceStack.Auth.IUserAuth existingUser, ServiceStack.Auth.IUserAuth newUser) => throw null; + public System.Collections.Generic.HashSet userAttributes(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public string userAuthId(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public string userAuthName(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public string userProfileUrl(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public ServiceStack.Auth.IAuthSession userSession(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public ServiceStack.IO.IVirtualFiles vfsContent() => throw null; + } + + // Generated from `ServiceStack.SessionExtensions` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class SessionExtensions + { + public static System.Collections.Generic.HashSet AddSessionOptions(this ServiceStack.Web.IRequest req, params string[] options) => throw null; + public static bool Base64StringContainsUrlUnfriendlyChars(string base64) => throw null; + public static void ClearSession(this ServiceStack.Caching.ICacheClient cache, ServiceStack.Web.IRequest httpReq = default(ServiceStack.Web.IRequest)) => throw null; + public static System.Threading.Tasks.Task ClearSessionAsync(this ServiceStack.Caching.ICacheClientAsync cache, ServiceStack.Web.IRequest httpReq = default(ServiceStack.Web.IRequest), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static string CreatePermanentSessionId(this ServiceStack.Web.IResponse res, ServiceStack.Web.IRequest req) => throw null; + public static string CreatePermanentSessionId(this ServiceStack.Web.IRequest req, string sessionId) => throw null; + public static string CreateRandomBase62Id(int size) => throw null; + public static string CreateRandomBase64Id(int size = default(int)) => throw null; + public static string CreateRandomSessionId() => throw null; + public static string CreateSessionId(this ServiceStack.Web.IResponse res, ServiceStack.Web.IRequest req) => throw null; + public static string CreateSessionId(this ServiceStack.Web.IRequest req, ServiceStack.Web.IResponse res, string sessionKey, string sessionId) => throw null; + public static string CreateSessionIds(this ServiceStack.Web.IResponse res, ServiceStack.Web.IRequest req) => throw null; + public static string CreateTemporarySessionId(this ServiceStack.Web.IResponse res, ServiceStack.Web.IRequest req) => throw null; + public static string CreateTemporarySessionId(this ServiceStack.Web.IRequest req, string sessionId) => throw null; + public static void DeleteJwtCookie(this ServiceStack.Web.IResponse response) => throw null; + public static void DeleteSessionCookies(this ServiceStack.Web.IResponse response) => throw null; + public static System.Threading.Tasks.Task GenerateNewSessionCookiesAsync(this ServiceStack.Web.IRequest req, ServiceStack.Auth.IAuthSession session, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static T Get(this ServiceStack.Caching.ISession session) => throw null; + public static System.Threading.Tasks.Task GetAsync(this ServiceStack.Caching.ISessionAsync session, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static string GetOrCreateSessionId(this ServiceStack.Web.IRequest httpReq) => throw null; + public static string GetPermanentSessionId(this ServiceStack.Web.IRequest httpReq) => throw null; + public static ServiceStack.Caching.ISession GetSessionBag(this ServiceStack.Web.IRequest request) => throw null; + public static ServiceStack.Caching.ISession GetSessionBag(this ServiceStack.IServiceBase service) => throw null; + public static ServiceStack.Caching.ISessionAsync GetSessionBagAsync(this ServiceStack.Web.IRequest request, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static ServiceStack.Caching.ISessionAsync GetSessionBagAsync(this ServiceStack.IServiceBase service, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static string GetSessionId(this ServiceStack.Web.IRequest req) => throw null; + public static string GetSessionKey(ServiceStack.Web.IRequest httpReq = default(ServiceStack.Web.IRequest)) => throw null; + public static System.Collections.Generic.HashSet GetSessionOptions(this ServiceStack.Web.IRequest httpReq) => throw null; + public static string GetSessionParam(this ServiceStack.Web.IRequest httpReq, string sessionKey) => throw null; + public static string GetTemporarySessionId(this ServiceStack.Web.IRequest httpReq) => throw null; + public static ServiceStack.Auth.IAuthSession GetUntypedSession(this ServiceStack.Caching.ICacheClient cache, ServiceStack.Web.IRequest httpReq = default(ServiceStack.Web.IRequest), ServiceStack.Web.IResponse httpRes = default(ServiceStack.Web.IResponse)) => throw null; + public static System.Threading.Tasks.Task GetUntypedSessionAsync(this ServiceStack.Caching.ICacheClientAsync cache, ServiceStack.Web.IRequest httpReq = default(ServiceStack.Web.IRequest), ServiceStack.Web.IResponse httpRes = default(ServiceStack.Web.IResponse), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static string GetUserAuthIdOrName(this ServiceStack.Auth.IAuthSession session) => throw null; + public static string GetUserAuthName(this ServiceStack.Auth.IAuthSession session) => throw null; + public static bool IsPermanentSession(this ServiceStack.Web.IRequest req) => throw null; + public static void PopulateWithSecureRandomBytes(System.Byte[] bytes) => throw null; + public static void Remove(this ServiceStack.Caching.ISession session) => throw null; + public static System.Threading.Tasks.Task RemoveAsync(this ServiceStack.Caching.ISessionAsync session, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static TUserSession SessionAs(this ServiceStack.Caching.ICacheClient cache, ServiceStack.Web.IRequest httpReq = default(ServiceStack.Web.IRequest), ServiceStack.Web.IResponse httpRes = default(ServiceStack.Web.IResponse)) => throw null; + public static System.Threading.Tasks.Task SessionAsAsync(this ServiceStack.Caching.ICacheClientAsync cache, ServiceStack.Web.IRequest httpReq = default(ServiceStack.Web.IRequest), ServiceStack.Web.IResponse httpRes = default(ServiceStack.Web.IResponse), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static void Set(this ServiceStack.Caching.ISession session, T value) => throw null; + public static System.Threading.Tasks.Task SetAsync(this ServiceStack.Caching.ISessionAsync session, T value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static void SetSessionId(this ServiceStack.Web.IRequest req, string sessionId) => throw null; + public static void UpdateFromUserAuthRepo(this ServiceStack.Auth.IAuthSession session, ServiceStack.Web.IRequest req, ServiceStack.Auth.IAuthRepository authRepo = default(ServiceStack.Auth.IAuthRepository)) => throw null; + public static System.Threading.Tasks.Task UpdateFromUserAuthRepoAsync(this ServiceStack.Auth.IAuthSession session, ServiceStack.Web.IRequest req, ServiceStack.Auth.IAuthRepositoryAsync authRepo = default(ServiceStack.Auth.IAuthRepositoryAsync)) => throw null; + public static void UpdateSession(this ServiceStack.Auth.IAuthSession session, ServiceStack.Auth.IUserAuth userAuth) => throw null; + } + + // Generated from `ServiceStack.SessionFactory` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class SessionFactory : ServiceStack.Caching.ISessionFactory + { + public ServiceStack.Caching.ISession CreateSession(string sessionId) => throw null; + public ServiceStack.Caching.ISessionAsync CreateSessionAsync(string sessionId) => throw null; + public ServiceStack.Caching.ISession GetOrCreateSession(ServiceStack.Web.IRequest httpReq, ServiceStack.Web.IResponse httpRes) => throw null; + public ServiceStack.Caching.ISession GetOrCreateSession() => throw null; + public ServiceStack.Caching.ISessionAsync GetOrCreateSessionAsync(ServiceStack.Web.IRequest httpReq, ServiceStack.Web.IResponse httpRes) => throw null; + public ServiceStack.Caching.ISessionAsync GetOrCreateSessionAsync() => throw null; + // Generated from `ServiceStack.SessionFactory+SessionCacheClient` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class SessionCacheClient : ServiceStack.Caching.ISession + { + public T Get(string key) => throw null; + public object this[string key] { get => throw null; set => throw null; } + public bool Remove(string key) => throw null; + public void RemoveAll() => throw null; + public SessionCacheClient(ServiceStack.Caching.ICacheClient cacheClient, string sessionId) => throw null; + public void Set(string key, T value) => throw null; + } + + + // Generated from `ServiceStack.SessionFactory+SessionCacheClientAsync` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class SessionCacheClientAsync : ServiceStack.Caching.ISessionAsync + { + public System.Threading.Tasks.Task GetAsync(string key, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task RemoveAllAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task RemoveAsync(string key, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public SessionCacheClientAsync(ServiceStack.Caching.ICacheClientAsync cacheClient, string sessionId) => throw null; + public System.Threading.Tasks.Task SetAsync(string key, T value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + } + + + public SessionFactory(ServiceStack.Caching.ICacheClient cacheClient, ServiceStack.Caching.ICacheClientAsync cacheClientAsync) => throw null; + public SessionFactory(ServiceStack.Caching.ICacheClient cacheClient) => throw null; + } + + // Generated from `ServiceStack.SessionFeature` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class SessionFeature : ServiceStack.Model.IHasStringId, ServiceStack.Model.IHasId, ServiceStack.IPlugin + { + public static void AddSessionIdToRequestFilter(ServiceStack.Web.IRequest req, ServiceStack.Web.IResponse res, object requestDto) => throw null; + public static ServiceStack.Auth.IAuthSession CreateNewSession(ServiceStack.Web.IRequest httpReq, string sessionId) => throw null; + public static ServiceStack.Auth.IAuthSession CreateNewSession(ServiceStack.Web.IRequest httpReq) => throw null; + public static string CreateSessionIds(ServiceStack.Web.IRequest httpReq = default(ServiceStack.Web.IRequest), ServiceStack.Web.IResponse httpRes = default(ServiceStack.Web.IResponse)) => throw null; + public static System.TimeSpan DefaultPermanentSessionExpiry; + public static System.TimeSpan DefaultSessionExpiry; + public static T GetOrCreateSession(ServiceStack.Caching.ICacheClient cache = default(ServiceStack.Caching.ICacheClient), ServiceStack.Web.IRequest httpReq = default(ServiceStack.Web.IRequest), ServiceStack.Web.IResponse httpRes = default(ServiceStack.Web.IResponse)) => throw null; + public static System.Threading.Tasks.Task GetOrCreateSessionAsync(ServiceStack.Caching.ICacheClientAsync cache = default(ServiceStack.Caching.ICacheClientAsync), ServiceStack.Web.IRequest httpReq = default(ServiceStack.Web.IRequest), ServiceStack.Web.IResponse httpRes = default(ServiceStack.Web.IResponse), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static string GetSessionKey(string sessionId) => throw null; + public static string GetSessionKey(ServiceStack.Web.IRequest httpReq = default(ServiceStack.Web.IRequest)) => throw null; + public string Id { get => throw null; set => throw null; } + public System.TimeSpan? PermanentSessionExpiry { get => throw null; set => throw null; } + public const string PermanentSessionId = default; + public void Register(ServiceStack.IAppHost appHost) => throw null; + public System.TimeSpan? SessionBagExpiry { get => throw null; set => throw null; } + public System.TimeSpan? SessionExpiry { get => throw null; set => throw null; } + public SessionFeature() => throw null; + public const string SessionId = default; + public const string SessionOptionsKey = default; + public const string XUserAuthId = default; + } + + // Generated from `ServiceStack.SessionOptions` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class SessionOptions + { + public const string Permanent = default; + public SessionOptions() => throw null; + public const string Temporary = default; + } + + // Generated from `ServiceStack.SessionSourceResult` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class SessionSourceResult + { + public System.Collections.Generic.IEnumerable Permissions { get => throw null; } + public System.Collections.Generic.IEnumerable Roles { get => throw null; } + public ServiceStack.Auth.IAuthSession Session { get => throw null; } + public SessionSourceResult(ServiceStack.Auth.IAuthSession session, System.Collections.Generic.IEnumerable roles, System.Collections.Generic.IEnumerable permissions) => throw null; + } + + // Generated from `ServiceStack.SetStatusAttribute` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class SetStatusAttribute : ServiceStack.RequestFilterAttribute + { + public string Description { get => throw null; set => throw null; } + public override void Execute(ServiceStack.Web.IRequest req, ServiceStack.Web.IResponse res, object requestDto) => throw null; + public SetStatusAttribute(int status, string description) => throw null; + public SetStatusAttribute(System.Net.HttpStatusCode statusCode, string description) => throw null; + public SetStatusAttribute() => throw null; + public int? Status { get => throw null; set => throw null; } + public System.Net.HttpStatusCode? StatusCode { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.SharpApiService` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class SharpApiService : ServiceStack.Service + { + public System.Threading.Tasks.Task Any(ServiceStack.ApiPages request) => throw null; + public SharpApiService() => throw null; + } + + // Generated from `ServiceStack.SharpCodePageHandler` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class SharpCodePageHandler : ServiceStack.Host.Handlers.HttpAsyncTaskHandler + { + public System.Collections.Generic.Dictionary Args { get => throw null; set => throw null; } + public object Model { get => throw null; set => throw null; } + public System.IO.Stream OutputStream { get => throw null; set => throw null; } + public override System.Threading.Tasks.Task ProcessRequestAsync(ServiceStack.Web.IRequest httpReq, ServiceStack.Web.IResponse httpRes, string operationName) => throw null; + public SharpCodePageHandler(ServiceStack.Script.SharpCodePage page, ServiceStack.Script.SharpPage layoutPage = default(ServiceStack.Script.SharpPage)) => throw null; + } + + // Generated from `ServiceStack.SharpPageHandler` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class SharpPageHandler : ServiceStack.Host.Handlers.HttpAsyncTaskHandler + { + public System.Collections.Generic.Dictionary Args { get => throw null; set => throw null; } + public ServiceStack.Script.ScriptContext Context { get => throw null; set => throw null; } + public ServiceStack.Script.SharpPage LayoutPage { get => throw null; set => throw null; } + public object Model { get => throw null; set => throw null; } + public static ServiceStack.Script.ScriptContext NewContext(ServiceStack.IAppHost appHost) => throw null; + public System.IO.Stream OutputStream { get => throw null; set => throw null; } + public ServiceStack.Script.SharpPage Page { get => throw null; set => throw null; } + public override System.Threading.Tasks.Task ProcessRequestAsync(ServiceStack.Web.IRequest httpReq, ServiceStack.Web.IResponse httpRes, string operationName) => throw null; + public SharpPageHandler(string pagePath, string layoutPath = default(string)) => throw null; + public SharpPageHandler(ServiceStack.Script.SharpPage page, ServiceStack.Script.SharpPage layoutPage = default(ServiceStack.Script.SharpPage)) => throw null; + public System.Func ValidateFn { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.SharpPagesFeature` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class SharpPagesFeature : ServiceStack.Script.ScriptContext, ServiceStack.Model.IHasStringId, ServiceStack.Model.IHasId, ServiceStack.IPlugin, ServiceStack.Html.IViewEngine + { + public string ApiDefaultContentType { get => throw null; set => throw null; } + public string ApiPath { get => throw null; set => throw null; } + public string DebugDefaultTemplate { get => throw null; set => throw null; } + public bool DisablePageBasedRouting { get => throw null; set => throw null; } + public bool? EnableHotReload { get => throw null; set => throw null; } + public bool? EnableSpaFallback { get => throw null; set => throw null; } + public bool ExcludeProtectedFilters { set => throw null; } + public ServiceStack.Script.SharpPage GetRoutingPage(string pathInfo, out System.Collections.Generic.Dictionary routingArgs) => throw null; + public ServiceStack.Script.SharpPage GetViewPage(string viewName) => throw null; + public bool HasView(string viewName, ServiceStack.Web.IRequest httpReq = default(ServiceStack.Web.IRequest)) => throw null; + public string HtmlExtension { get => throw null; set => throw null; } + public string Id { get => throw null; set => throw null; } + public System.Collections.Generic.List IgnorePaths { get => throw null; set => throw null; } + public bool ImportRequestParams { get => throw null; set => throw null; } + public string MetadataDebugAdminRole { get => throw null; set => throw null; } + protected virtual ServiceStack.Host.IHttpHandler PageBasedRoutingHandler(string httpMethod, string pathInfo, string requestFilePath) => throw null; + public System.Threading.Tasks.Task ProcessRequestAsync(ServiceStack.Web.IRequest req, object dto, System.IO.Stream outputStream) => throw null; + public virtual void Register(ServiceStack.IAppHost appHost) => throw null; + public string RenderPartial(string pageName, object model, bool renderHtml, System.IO.StreamWriter writer = default(System.IO.StreamWriter), ServiceStack.Html.IHtmlContext htmlHelper = default(ServiceStack.Html.IHtmlContext)) => throw null; + protected virtual ServiceStack.Host.IHttpHandler RequestHandler(string httpMethod, string pathInfo, string filePath) => throw null; + public string RunInitPage() => throw null; + public string ScriptAdminRole { get => throw null; set => throw null; } + public ServiceStack.ServiceStackScripts ServiceStackScripts { get => throw null; } + public SharpPagesFeature() => throw null; + } + + // Generated from `ServiceStack.SharpPagesFeatureExtensions` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class SharpPagesFeatureExtensions + { + public static ServiceStack.Script.PageResult BindRequest(this ServiceStack.Script.PageResult result, ServiceStack.Web.IRequest request) => throw null; + public static System.Collections.Generic.Dictionary CreateRequestArgs(System.Collections.Generic.Dictionary args) => throw null; + public static ServiceStack.Script.SharpCodePage GetCodePage(this ServiceStack.Web.IRequest request, string virtualPath) => throw null; + public static ServiceStack.Script.SharpPage GetPage(this ServiceStack.Web.IRequest request, string virtualPath) => throw null; + public static ServiceStack.Script.PageResult GetPageResult(this ServiceStack.Web.IRequest request, string virtualPath, System.Collections.Generic.Dictionary args = default(System.Collections.Generic.Dictionary)) => throw null; + public static System.Collections.Generic.Dictionary GetScriptRequestParams(this ServiceStack.Web.IRequest request, bool importRequestParams = default(bool)) => throw null; + public static ServiceStack.ServiceStackScripts GetServiceStackFilters(this ServiceStack.Script.ScriptContext context) => throw null; + public static ServiceStack.Script.ScriptContext InitForSharpPages(this ServiceStack.Script.ScriptContext context, ServiceStack.IAppHost appHost) => throw null; + public static ServiceStack.Script.SharpPage OneTimePage(this ServiceStack.Web.IRequest request, string contents, string ext = default(string)) => throw null; + public static System.Collections.Generic.Dictionary SetRequestArgs(System.Collections.Generic.Dictionary args, ServiceStack.Web.IRequest request) => throw null; + public static ServiceStack.Script.ScriptContext UseAppHost(this ServiceStack.Script.ScriptContext context, ServiceStack.IAppHost appHost) => throw null; + public static ServiceStack.Script.SharpCodePage With(this ServiceStack.Script.SharpCodePage page, ServiceStack.Web.IRequest request) => throw null; + } + + // Generated from `ServiceStack.Sitemap` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class Sitemap + { + public string AtPath { get => throw null; set => throw null; } + public string CustomXml { get => throw null; set => throw null; } + public System.DateTime? LastModified { get => throw null; set => throw null; } + public string Location { get => throw null; set => throw null; } + public Sitemap() => throw null; + public System.Collections.Generic.List UrlSet { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.SitemapCustomXml` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class SitemapCustomXml + { + public SitemapCustomXml() => throw null; + public string SitemapIndexFooterXml { get => throw null; set => throw null; } + public string SitemapIndexHeaderXml { get => throw null; set => throw null; } + public string UrlSetFooterXml { get => throw null; set => throw null; } + public string UrlSetHeaderXml { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.SitemapFeature` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class SitemapFeature : ServiceStack.Model.IHasStringId, ServiceStack.Model.IHasId, ServiceStack.IPlugin + { + public string AtPath { get => throw null; set => throw null; } + public ServiceStack.SitemapCustomXml CustomXml { get => throw null; set => throw null; } + public string Id { get => throw null; set => throw null; } + public void Register(ServiceStack.IAppHost appHost) => throw null; + public SitemapFeature() => throw null; + public System.Collections.Generic.List SitemapIndex { get => throw null; set => throw null; } + // Generated from `ServiceStack.SitemapFeature+SitemapIndexHandler` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class SitemapIndexHandler : ServiceStack.Host.Handlers.HttpAsyncTaskHandler + { + public override System.Threading.Tasks.Task ProcessRequestAsync(ServiceStack.Web.IRequest httpReq, ServiceStack.Web.IResponse httpRes, string operationName) => throw null; + public SitemapIndexHandler(ServiceStack.SitemapFeature feature) => throw null; + } + + + public System.Collections.Generic.Dictionary SitemapIndexNamespaces { get => throw null; set => throw null; } + // Generated from `ServiceStack.SitemapFeature+SitemapUrlSetHandler` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class SitemapUrlSetHandler : ServiceStack.Host.Handlers.HttpAsyncTaskHandler + { + public override System.Threading.Tasks.Task ProcessRequestAsync(ServiceStack.Web.IRequest httpReq, ServiceStack.Web.IResponse httpRes, string operationName) => throw null; + public SitemapUrlSetHandler(ServiceStack.SitemapFeature feature, System.Collections.Generic.List urlSet) => throw null; + } + + + public System.Collections.Generic.List UrlSet { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary UrlSetNamespaces { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.SitemapFrequency` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public enum SitemapFrequency + { + Always, + Daily, + Hourly, + Monthly, + Never, + Weekly, + Yearly, + } + + // Generated from `ServiceStack.SitemapUrl` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class SitemapUrl + { + public ServiceStack.SitemapFrequency? ChangeFrequency { get => throw null; set => throw null; } + public string CustomXml { get => throw null; set => throw null; } + public System.DateTime? LastModified { get => throw null; set => throw null; } + public string Location { get => throw null; set => throw null; } + public System.Decimal? Priority { get => throw null; set => throw null; } + public SitemapUrl() => throw null; + } + + // Generated from `ServiceStack.SpaFallback` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class SpaFallback : ServiceStack.IReturn, ServiceStack.IReturn + { + public string PathInfo { get => throw null; set => throw null; } + public SpaFallback() => throw null; + } + + // Generated from `ServiceStack.SpaFallbackService` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class SpaFallbackService : ServiceStack.Service + { + public object Any(ServiceStack.SpaFallback request) => throw null; + public SpaFallbackService() => throw null; + } + + // Generated from `ServiceStack.StartsWithCondition` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class StartsWithCondition : ServiceStack.QueryCondition + { + public override string Alias { get => throw null; } + public override bool Match(object a, object b) => throw null; + public StartsWithCondition() => throw null; + } + + // Generated from `ServiceStack.StrictModeCodes` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class StrictModeCodes + { + public const string CyclicalUserSession = default; + public const string ReturnsValueType = default; + } + + // Generated from `ServiceStack.SubscriptionInfo` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class SubscriptionInfo + { + public string[] Channels { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary ConnectArgs { get => throw null; set => throw null; } + public System.DateTime CreatedAt { get => throw null; set => throw null; } + public string DisplayName { get => throw null; set => throw null; } + public bool IsAuthenticated { get => throw null; set => throw null; } + public System.Collections.Concurrent.ConcurrentDictionary Meta { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary ServerArgs { get => throw null; set => throw null; } + public string SessionId { get => throw null; set => throw null; } + public string SubscriptionId { get => throw null; set => throw null; } + public SubscriptionInfo() => throw null; + public string UserAddress { get => throw null; set => throw null; } + public string UserId { get => throw null; set => throw null; } + public string UserName { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.Svg` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class Svg + { + public static void AddImage(string svg, string name, string cssFile = default(string)) => throw null; + public static System.Collections.Generic.Dictionary AdjacentCssRules { get => throw null; set => throw null; } + public static System.Collections.Generic.Dictionary AppendToCssFiles { get => throw null; set => throw null; } + public static System.Collections.Generic.Dictionary> CssFiles { get => throw null; set => throw null; } + public static System.Collections.Generic.Dictionary CssFillColor { get => throw null; set => throw null; } + public static System.Collections.Generic.Dictionary DataUris { get => throw null; set => throw null; } + public static string Encode(string svg) => throw null; + public static string Fill(string svg, string fillColor) => throw null; + public static string[] FillColors { get => throw null; set => throw null; } + public static string GetBackgroundImageCss(string name, string fillColor) => throw null; + public static string GetBackgroundImageCss(string name) => throw null; + public static string GetDataUri(string name, string fillColor) => throw null; + public static string GetDataUri(string name) => throw null; + public static string GetImage(string name, string fillColor) => throw null; + public static string GetImage(string name) => throw null; + // Generated from `ServiceStack.Svg+Icons` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class Icons + { + public const string DefaultProfile = default; + public const string Female = default; + public const string FemaleBusiness = default; + public const string FemaleColor = default; + public const string Male = default; + public const string MaleBusiness = default; + public const string MaleColor = default; + public const string Users = default; + } + + + public static System.Collections.Generic.Dictionary Images { get => throw null; set => throw null; } + public static string InBackgroundImageCss(string svg) => throw null; + public static string LightColor { get => throw null; set => throw null; } + public static void Load(ServiceStack.IO.IVirtualDirectory svgDir) => throw null; + // Generated from `ServiceStack.Svg+Logos` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class Logos + { + public const string Apple = default; + public const string Facebook = default; + public const string GitHub = default; + public const string Google = default; + public const string LinkedIn = default; + public const string Microsoft = default; + public const string ServiceStack = default; + public const string Twitter = default; + } + + + public static string ToDataUri(string svg) => throw null; + } + + // Generated from `ServiceStack.SvgFeature` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class SvgFeature : ServiceStack.Model.IHasStringId, ServiceStack.Model.IHasId, ServiceStack.IPostInitPlugin, ServiceStack.IPlugin + { + public void AfterPluginsLoaded(ServiceStack.IAppHost appHost) => throw null; + public string Id { get => throw null; set => throw null; } + public void Register(ServiceStack.IAppHost appHost) => throw null; + public string RoutePath { get => throw null; set => throw null; } + public SvgFeature() => throw null; + public System.Func ValidateFn { get => throw null; set => throw null; } + public static void WriteAdjacentCss(System.Text.StringBuilder sb, System.Collections.Generic.List dataUris, System.Collections.Generic.Dictionary adjacentCssRules) => throw null; + public static void WriteDataUris(System.Text.StringBuilder sb, System.Collections.Generic.List dataUris) => throw null; + public static void WriteSvgCssFile(ServiceStack.IO.IVirtualFiles vfs, string name, System.Collections.Generic.List dataUris, System.Collections.Generic.Dictionary adjacentCssRules = default(System.Collections.Generic.Dictionary), System.Collections.Generic.Dictionary appendToCssFiles = default(System.Collections.Generic.Dictionary)) => throw null; + } + + // Generated from `ServiceStack.SvgFormatHandler` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class SvgFormatHandler : ServiceStack.Host.Handlers.HttpAsyncTaskHandler + { + public string Fill { get => throw null; set => throw null; } + public string Format { get => throw null; set => throw null; } + public string Id { get => throw null; set => throw null; } + public override System.Threading.Tasks.Task ProcessRequestAsync(ServiceStack.Web.IRequest httpReq, ServiceStack.Web.IResponse httpRes, string operationName) => throw null; + public SvgFormatHandler(string fileName) => throw null; + public SvgFormatHandler() => throw null; + } + + // Generated from `ServiceStack.SvgScriptBlock` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class SvgScriptBlock : ServiceStack.Script.ScriptBlock + { + public override ServiceStack.Script.ScriptLanguage Body { get => throw null; } + public override string Name { get => throw null; } + public SvgScriptBlock() => throw null; + public override System.Threading.Tasks.Task WriteAsync(ServiceStack.Script.ScriptScopeContext scope, ServiceStack.Script.PageBlockFragment block, System.Threading.CancellationToken token) => throw null; + } + + // Generated from `ServiceStack.TemplateInfoFilters` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class TemplateInfoFilters : ServiceStack.InfoScripts + { + public TemplateInfoFilters() => throw null; + } + + // Generated from `ServiceStack.TemplateMarkdownBlock` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class TemplateMarkdownBlock : ServiceStack.MarkdownScriptBlock + { + public TemplateMarkdownBlock() => throw null; + } + + // Generated from `ServiceStack.TemplatePagesFeature` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class TemplatePagesFeature : ServiceStack.SharpPagesFeature + { + public ServiceStack.Script.DefaultScripts DefaultFilters { get => throw null; } + public ServiceStack.Script.HtmlScripts HtmlFilters { get => throw null; } + public ServiceStack.Script.ProtectedScripts ProtectedFilters { get => throw null; } + public override void Register(ServiceStack.IAppHost appHost) => throw null; + public System.Collections.Generic.List TemplateBlocks { get => throw null; } + public System.Collections.Generic.List TemplateFilters { get => throw null; } + public TemplatePagesFeature() => throw null; + } + + // Generated from `ServiceStack.TemplateServiceStackFilters` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class TemplateServiceStackFilters : ServiceStack.ServiceStackScripts + { + public TemplateServiceStackFilters() => throw null; + } + + // Generated from `ServiceStack.TypeValidator` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public abstract class TypeValidator : ServiceStack.ITypeValidator + { + public System.Collections.Generic.Dictionary ContextArgs { get => throw null; set => throw null; } + public string DefaultErrorCode { get => throw null; set => throw null; } + public string DefaultMessage { get => throw null; set => throw null; } + public int? DefaultStatusCode { get => throw null; set => throw null; } + public string ErrorCode { get => throw null; set => throw null; } + public virtual bool IsValid(object dto, ServiceStack.Web.IRequest request) => throw null; + public virtual System.Threading.Tasks.Task IsValidAsync(object dto, ServiceStack.Web.IRequest request) => throw null; + public string Message { get => throw null; set => throw null; } + protected string ResolveErrorCode() => throw null; + protected string ResolveErrorMessage(ServiceStack.Web.IRequest request, object dto) => throw null; + protected int ResolveStatusCode() => throw null; + public int? StatusCode { get => throw null; set => throw null; } + public virtual System.Threading.Tasks.Task ThrowIfNotValidAsync(object dto, ServiceStack.Web.IRequest request) => throw null; + protected TypeValidator(string errorCode = default(string), string message = default(string), int? statusCode = default(int?)) => throw null; + } + + // Generated from `ServiceStack.TypedQueryData<,>` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class TypedQueryData : ServiceStack.ITypedQueryData + { + public ServiceStack.IDataQuery AddToQuery(ServiceStack.IDataQuery q, ServiceStack.IQueryData request, System.Collections.Generic.Dictionary dynamicParams, ServiceStack.IAutoQueryDataOptions options = default(ServiceStack.IAutoQueryDataOptions)) => throw null; + public ServiceStack.IDataQuery CreateQuery(ServiceStack.IQueryDataSource db) => throw null; + public ServiceStack.QueryResponse Execute(ServiceStack.IQueryDataSource db, ServiceStack.IDataQuery query) => throw null; + public System.Type FromType { get => throw null; } + public System.Type QueryType { get => throw null; } + public TypedQueryData() => throw null; + } + + // Generated from `ServiceStack.UnRegisterEventSubscriber` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class UnRegisterEventSubscriber : ServiceStack.IReturn>, ServiceStack.IReturn + { + public string Id { get => throw null; set => throw null; } + public UnRegisterEventSubscriber() => throw null; + } + + // Generated from `ServiceStack.ValidateScripts` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ValidateScripts : ServiceStack.Script.ScriptMethods + { + public ServiceStack.FluentValidation.Validators.IPropertyValidator CreditCard() => throw null; + public ServiceStack.FluentValidation.Validators.IPropertyValidator Email() => throw null; + public ServiceStack.FluentValidation.Validators.IPropertyValidator Empty(object defaultValue) => throw null; + public ServiceStack.FluentValidation.Validators.IPropertyValidator Empty() => throw null; + public ServiceStack.FluentValidation.Validators.IPropertyValidator Enum(System.Type enumType) => throw null; + public ServiceStack.FluentValidation.Validators.IPropertyValidator Equal(object value) => throw null; + public ServiceStack.FluentValidation.Validators.IPropertyValidator ExactLength(int length) => throw null; + public ServiceStack.FluentValidation.Validators.IPropertyValidator ExclusiveBetween(System.IComparable from, System.IComparable to) => throw null; + public ServiceStack.FluentValidation.Validators.IPropertyValidator GreaterThan(int value) => throw null; + public ServiceStack.FluentValidation.Validators.IPropertyValidator GreaterThanOrEqual(int value) => throw null; + public ServiceStack.ITypeValidator HasPermission(string permission) => throw null; + public ServiceStack.ITypeValidator HasPermissions(string[] permission) => throw null; + public ServiceStack.ITypeValidator HasRole(string role) => throw null; + public ServiceStack.ITypeValidator HasRoles(string[] roles) => throw null; + public ServiceStack.FluentValidation.Validators.IPropertyValidator InclusiveBetween(System.IComparable from, System.IComparable to) => throw null; + public static ServiceStack.ValidateScripts Instance; + public ServiceStack.ITypeValidator IsAdmin() => throw null; + public ServiceStack.ITypeValidator IsAuthenticated(string provider) => throw null; + public ServiceStack.ITypeValidator IsAuthenticated() => throw null; + public ServiceStack.FluentValidation.Validators.IPropertyValidator Length(int min, int max) => throw null; + public ServiceStack.FluentValidation.Validators.IPropertyValidator LessThan(int value) => throw null; + public ServiceStack.FluentValidation.Validators.IPropertyValidator LessThanOrEqual(int value) => throw null; + public ServiceStack.FluentValidation.Validators.IPropertyValidator MaximumLength(int max) => throw null; + public ServiceStack.FluentValidation.Validators.IPropertyValidator MinimumLength(int min) => throw null; + public ServiceStack.FluentValidation.Validators.IPropertyValidator NotEmpty(object defaultValue) => throw null; + public ServiceStack.FluentValidation.Validators.IPropertyValidator NotEmpty() => throw null; + public ServiceStack.FluentValidation.Validators.IPropertyValidator NotEqual(object value) => throw null; + public ServiceStack.FluentValidation.Validators.IPropertyValidator NotNull() => throw null; + public ServiceStack.FluentValidation.Validators.IPropertyValidator Null() => throw null; + public ServiceStack.FluentValidation.Validators.IPropertyValidator RegularExpression(string regex) => throw null; + public static System.Collections.Generic.HashSet RequiredValidators { get => throw null; } + public ServiceStack.FluentValidation.Validators.IPropertyValidator ScalePrecision(int scale, int precision) => throw null; + public ValidateScripts() => throw null; + } + + // Generated from `ServiceStack.ValidationResultExtensions` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class ValidationResultExtensions + { + public static ServiceStack.Validation.ValidationErrorResult ToErrorResult(this ServiceStack.FluentValidation.Results.ValidationResult result) => throw null; + public static ServiceStack.Validation.ValidationError ToException(this ServiceStack.FluentValidation.Results.ValidationResult result) => throw null; + } + + // Generated from `ServiceStack.ValidationSourceUtils` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class ValidationSourceUtils + { + public static System.Threading.Tasks.Task ClearCacheAsync(this ServiceStack.IValidationSource source, params int[] ids) => throw null; + public static System.Threading.Tasks.Task DeleteValidationRulesAsync(this ServiceStack.IValidationSource source, params int[] ids) => throw null; + public static System.Threading.Tasks.Task> GetAllValidateRulesAsync(this ServiceStack.IValidationSource source, string typeName) => throw null; + public static System.Threading.Tasks.Task> GetValidateRulesByIdsAsync(this ServiceStack.IValidationSource source, params int[] ids) => throw null; + public static void InitSchema(this ServiceStack.IValidationSource source) => throw null; + public static System.Threading.Tasks.Task SaveValidationRulesAsync(this ServiceStack.IValidationSource source, System.Collections.Generic.List validateRules) => throw null; + } + + // Generated from `ServiceStack.ValidatorUtils` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class ValidatorUtils + { + public static ServiceStack.ITypeValidator Init(this ServiceStack.ITypeValidator validator, ServiceStack.IValidateRule rule) => throw null; + } + + // Generated from `ServiceStack.Validators` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class Validators + { + public static void AddRule(this System.Collections.Generic.List validators, System.Reflection.PropertyInfo pi, ServiceStack.IValidateRule propRule) => throw null; + public static void AddRule(System.Type type, string name, ServiceStack.ValidateAttribute attr) => throw null; + public static void AddRule(System.Type type, System.Reflection.PropertyInfo pi, ServiceStack.ValidateAttribute attr) => throw null; + public static void AddTypeValidator(System.Collections.Generic.List to, ServiceStack.IValidateRule attr) => throw null; + public static void AppendDefaultValueOnEmptyValidators(System.Reflection.PropertyInfo pi, ServiceStack.IValidateRule rule) => throw null; + public static System.Threading.Tasks.Task AssertTypeValidatorsAsync(ServiceStack.Web.IRequest req, object requestDto, System.Type requestType) => throw null; + public static System.Collections.Generic.Dictionary ConditionErrorCodes { get => throw null; set => throw null; } + public static ServiceStack.FluentValidation.IValidationRule CreateCollectionPropertyRule(System.Type type, System.Reflection.PropertyInfo pi) => throw null; + public static ServiceStack.FluentValidation.IValidationRule CreatePropertyRule(System.Type type, System.Reflection.PropertyInfo pi) => throw null; + public static System.Collections.Generic.Dictionary ErrorCodeMessages { get => throw null; set => throw null; } + public static System.Collections.Generic.List GetPropertyRules(System.Type type) => throw null; + public static System.Collections.Generic.List GetTypeRules(System.Type type) => throw null; + public static bool HasValidateAttributes(System.Type type) => throw null; + public static bool HasValidateRequestAttributes(System.Type type) => throw null; + public static ServiceStack.Script.SharpPage ParseCondition(ServiceStack.Script.ScriptContext context, string condition) => throw null; + public static bool RegisterPropertyRulesFor(System.Type type) => throw null; + public static bool RegisterRequestRulesFor(System.Type type) => throw null; + public static System.Collections.Generic.List> RuleFilters { get => throw null; } + public static ServiceStack.Script.PageResult ToPageResult(this ServiceStack.FluentValidation.Validators.PropertyValidatorContext context, ServiceStack.Script.SharpPage page) => throw null; + public static System.Collections.Generic.Dictionary> TypePropertyRulesMap { get => throw null; set => throw null; } + public static System.Collections.Generic.Dictionary> TypeRulesMap { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.WebSudoAuthUserSession` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class WebSudoAuthUserSession : ServiceStack.AuthUserSession, ServiceStack.Auth.IWebSudoAuthSession, ServiceStack.Auth.IAuthSession + { + public System.DateTime AuthenticatedAt { get => throw null; set => throw null; } + public int AuthenticatedCount { get => throw null; set => throw null; } + public System.DateTime? AuthenticatedWebSudoUntil { get => throw null; set => throw null; } + public WebSudoAuthUserSession() => throw null; + } + + // Generated from `ServiceStack.WebSudoFeature` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class WebSudoFeature : ServiceStack.Auth.AuthEvents, ServiceStack.Model.IHasStringId, ServiceStack.Model.IHasId, ServiceStack.IPlugin + { + public string Id { get => throw null; set => throw null; } + public override void OnAuthenticated(ServiceStack.Web.IRequest httpReq, ServiceStack.Auth.IAuthSession session, ServiceStack.IServiceBase authService, ServiceStack.Auth.IAuthTokens tokens, System.Collections.Generic.Dictionary authInfo) => throw null; + public override void OnCreated(ServiceStack.Web.IRequest httpReq, ServiceStack.Auth.IAuthSession session) => throw null; + public void Register(ServiceStack.IAppHost appHost) => throw null; + public const string SessionCopyRequestItemKey = default; + public System.TimeSpan WebSudoDuration { get => throw null; set => throw null; } + public WebSudoFeature() => throw null; + } + + // Generated from `ServiceStack.WebSudoRequiredAttribute` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class WebSudoRequiredAttribute : ServiceStack.AuthenticateAttribute + { + public override System.Threading.Tasks.Task ExecuteAsync(ServiceStack.Web.IRequest req, ServiceStack.Web.IResponse res, object requestDto) => throw null; + public bool HasWebSudo(ServiceStack.Web.IRequest req, ServiceStack.Auth.IWebSudoAuthSession session) => throw null; + public WebSudoRequiredAttribute(ServiceStack.ApplyTo applyTo) => throw null; + public WebSudoRequiredAttribute() => throw null; + } + + // Generated from `ServiceStack.XmlOnly` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class XmlOnly : ServiceStack.RequestFilterAttribute + { + public override void Execute(ServiceStack.Web.IRequest req, ServiceStack.Web.IResponse res, object requestDto) => throw null; + public XmlOnly() => throw null; + } + + namespace Admin + { + // Generated from `ServiceStack.Admin.AdminUsersFeature` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class AdminUsersFeature : ServiceStack.Model.IHasStringId, ServiceStack.Model.IHasId, ServiceStack.IPlugin, ServiceStack.IAfterInitAppHost + { + public string AdminRole { get => throw null; set => throw null; } + public AdminUsersFeature() => throw null; + public void AfterInit(ServiceStack.IAppHost appHost) => throw null; + public string Id { get => throw null; set => throw null; } + public System.Collections.Generic.List IncludeUserAuthDetailsProperties { get => throw null; set => throw null; } + public System.Collections.Generic.List IncludeUserAuthProperties { get => throw null; set => throw null; } + public System.Func OnAfterCreateUser { get => throw null; set => throw null; } + public System.Func OnAfterDeleteUser { get => throw null; set => throw null; } + public System.Func OnAfterUpdateUser { get => throw null; set => throw null; } + public System.Func OnBeforeCreateUser { get => throw null; set => throw null; } + public System.Func OnBeforeDeleteUser { get => throw null; set => throw null; } + public System.Func OnBeforeUpdateUser { get => throw null; set => throw null; } + public System.Collections.Generic.List QueryUserAuthProperties { get => throw null; set => throw null; } + public void Register(ServiceStack.IAppHost appHost) => throw null; + public System.Collections.Generic.List RestrictedUserAuthProperties { get => throw null; set => throw null; } + public ServiceStack.Auth.ValidateAsyncFn ValidateFn { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.Admin.AdminUsersService` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class AdminUsersService : ServiceStack.Service + { + public AdminUsersService() => throw null; + public System.Threading.Tasks.Task Delete(ServiceStack.AdminDeleteUser request) => throw null; + public System.Threading.Tasks.Task Get(ServiceStack.AdminQueryUsers request) => throw null; + public System.Threading.Tasks.Task Get(ServiceStack.AdminGetUser request) => throw null; + public System.Threading.Tasks.Task Post(ServiceStack.AdminCreateUser request) => throw null; + public System.Threading.Tasks.Task Put(ServiceStack.AdminUpdateUser request) => throw null; + } + + // Generated from `ServiceStack.Admin.RequestLogs` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class RequestLogs + { + public int? AfterId { get => throw null; set => throw null; } + public int? AfterSecs { get => throw null; set => throw null; } + public int? BeforeId { get => throw null; set => throw null; } + public int? BeforeSecs { get => throw null; set => throw null; } + public System.TimeSpan? DurationLessThan { get => throw null; set => throw null; } + public System.TimeSpan? DurationLongerThan { get => throw null; set => throw null; } + public bool? EnableErrorTracking { get => throw null; set => throw null; } + public bool? EnableResponseTracking { get => throw null; set => throw null; } + public bool? EnableSessionTracking { get => throw null; set => throw null; } + public string ForwardedFor { get => throw null; set => throw null; } + public bool? HasResponse { get => throw null; set => throw null; } + public System.Int64[] Ids { get => throw null; set => throw null; } + public string IpAddress { get => throw null; set => throw null; } + public string PathInfo { get => throw null; set => throw null; } + public string Referer { get => throw null; set => throw null; } + public RequestLogs() => throw null; + public string SessionId { get => throw null; set => throw null; } + public int Skip { get => throw null; set => throw null; } + public int? Take { get => throw null; set => throw null; } + public string UserAuthId { get => throw null; set => throw null; } + public bool? WithErrors { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.Admin.RequestLogsResponse` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class RequestLogsResponse + { + public RequestLogsResponse() => throw null; + public ServiceStack.ResponseStatus ResponseStatus { get => throw null; set => throw null; } + public System.Collections.Generic.List Results { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary Usage { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.Admin.RequestLogsService` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class RequestLogsService : ServiceStack.Service + { + public System.Threading.Tasks.Task Any(ServiceStack.Admin.RequestLogs request) => throw null; + public ServiceStack.Web.IRequestLogger RequestLogger { get => throw null; set => throw null; } + public RequestLogsService() => throw null; + } + + } + namespace Auth + { + // Generated from `ServiceStack.Auth.ApiKey` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ApiKey : ServiceStack.IMeta + { + public ApiKey() => throw null; + public System.DateTime? CancelledDate { get => throw null; set => throw null; } + public System.DateTime CreatedDate { get => throw null; set => throw null; } + public string Environment { get => throw null; set => throw null; } + public System.DateTime? ExpiryDate { get => throw null; set => throw null; } + public string Id { get => throw null; set => throw null; } + public string KeyType { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary Meta { get => throw null; set => throw null; } + public string Notes { get => throw null; set => throw null; } + public int? RefId { get => throw null; set => throw null; } + public string RefIdStr { get => throw null; set => throw null; } + public string UserAuthId { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.Auth.ApiKeyAuthProvider` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ApiKeyAuthProvider : ServiceStack.Auth.AuthProvider, ServiceStack.IAuthPlugin, ServiceStack.Auth.IAuthWithRequest + { + public bool AllowInHttpParams { get => throw null; set => throw null; } + public ApiKeyAuthProvider(ServiceStack.Configuration.IAppSettings appSettings) => throw null; + public ApiKeyAuthProvider() => throw null; + public override System.Threading.Tasks.Task AuthenticateAsync(ServiceStack.IServiceBase authService, ServiceStack.Auth.IAuthSession session, ServiceStack.Authenticate request, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public virtual System.Threading.Tasks.Task CacheSessionAsync(ServiceStack.Web.IRequest req, string apiSessionKey) => throw null; + public virtual string CreateApiKey(string environment, string keyType, int sizeBytes) => throw null; + public System.Action CreateApiKeyFilter { get => throw null; set => throw null; } + public static string[] DefaultEnvironments; + public static int DefaultKeySizeBytes; + public static string[] DefaultTypes; + public string[] Environments { get => throw null; set => throw null; } + public System.TimeSpan? ExpireKeysAfter { get => throw null; set => throw null; } + public ServiceStack.Auth.CreateApiKeyDelegate GenerateApiKey { get => throw null; set => throw null; } + public System.Collections.Generic.List GenerateNewApiKeys(string userId, params string[] environments) => throw null; + protected virtual ServiceStack.Auth.ApiKey GetApiKey(ServiceStack.Web.IRequest req, string apiKey) => throw null; + public static string GetSessionKey(string apiKey) => throw null; + public virtual System.Threading.Tasks.Task HasCachedSessionAsync(ServiceStack.Web.IRequest req, string apiSessionKey) => throw null; + protected virtual void Init(ServiceStack.Configuration.IAppSettings appSettings = default(ServiceStack.Configuration.IAppSettings)) => throw null; + public bool InitSchema { get => throw null; set => throw null; } + public override bool IsAuthorized(ServiceStack.Auth.IAuthSession session, ServiceStack.Auth.IAuthTokens tokens, ServiceStack.Authenticate request = default(ServiceStack.Authenticate)) => throw null; + public int KeySizeBytes { get => throw null; set => throw null; } + public string[] KeyTypes { get => throw null; set => throw null; } + public const string Name = default; + public override System.Threading.Tasks.Task OnFailedAuthentication(ServiceStack.Auth.IAuthSession session, ServiceStack.Web.IRequest httpReq, ServiceStack.Web.IResponse httpRes) => throw null; + public System.Threading.Tasks.Task PreAuthenticateAsync(ServiceStack.Web.IRequest req, ServiceStack.Web.IResponse res) => throw null; + public System.Threading.Tasks.Task PreAuthenticateWithApiKeyAsync(ServiceStack.Web.IRequest req, ServiceStack.Web.IResponse res, ServiceStack.Auth.ApiKey apiKey) => throw null; + public const string Realm = default; + public override void Register(ServiceStack.IAppHost appHost, ServiceStack.AuthFeature feature) => throw null; + public bool RequireSecureConnection { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary ServiceRoutes { get => throw null; set => throw null; } + public System.TimeSpan? SessionCacheDuration { get => throw null; set => throw null; } + public override string Type { get => throw null; } + public virtual void ValidateApiKey(ServiceStack.Web.IRequest req, ServiceStack.Auth.ApiKey apiKey) => throw null; + } + + // Generated from `ServiceStack.Auth.AssignRolesService` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class AssignRolesService : ServiceStack.Service + { + public AssignRolesService() => throw null; + public System.Threading.Tasks.Task Post(ServiceStack.AssignRoles request) => throw null; + } + + // Generated from `ServiceStack.Auth.AuthContext` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class AuthContext : ServiceStack.IMeta + { + public AuthContext() => throw null; + public System.Collections.Generic.Dictionary AuthInfo { get => throw null; set => throw null; } + public ServiceStack.Auth.AuthProvider AuthProvider { get => throw null; set => throw null; } + public ServiceStack.Auth.AuthProviderSync AuthProviderSync { get => throw null; set => throw null; } + public ServiceStack.Auth.IAuthRepository AuthRepository { get => throw null; set => throw null; } + public ServiceStack.Auth.IAuthRepositoryAsync AuthRepositoryAsync { get => throw null; set => throw null; } + public ServiceStack.Auth.IAuthTokens AuthTokens { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary Meta { get => throw null; set => throw null; } + public ServiceStack.Web.IRequest Request { get => throw null; set => throw null; } + public ServiceStack.IServiceBase Service { get => throw null; set => throw null; } + public ServiceStack.Auth.IAuthSession Session { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.Auth.AuthEvents` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class AuthEvents : ServiceStack.Auth.IAuthEventsAsync, ServiceStack.Auth.IAuthEvents + { + public AuthEvents() => throw null; + public virtual void OnAuthenticated(ServiceStack.Web.IRequest httpReq, ServiceStack.Auth.IAuthSession session, ServiceStack.IServiceBase authService, ServiceStack.Auth.IAuthTokens tokens, System.Collections.Generic.Dictionary authInfo) => throw null; + public virtual System.Threading.Tasks.Task OnAuthenticatedAsync(ServiceStack.Web.IRequest httpReq, ServiceStack.Auth.IAuthSession session, ServiceStack.IServiceBase authService, ServiceStack.Auth.IAuthTokens tokens, System.Collections.Generic.Dictionary authInfo, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public virtual void OnCreated(ServiceStack.Web.IRequest httpReq, ServiceStack.Auth.IAuthSession session) => throw null; + public virtual System.Threading.Tasks.Task OnCreatedAsync(ServiceStack.Web.IRequest httpReq, ServiceStack.Auth.IAuthSession session, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public virtual void OnLogout(ServiceStack.Web.IRequest httpReq, ServiceStack.Auth.IAuthSession session, ServiceStack.IServiceBase authService) => throw null; + public virtual System.Threading.Tasks.Task OnLogoutAsync(ServiceStack.Web.IRequest httpReq, ServiceStack.Auth.IAuthSession session, ServiceStack.IServiceBase authService, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public virtual void OnRegistered(ServiceStack.Web.IRequest httpReq, ServiceStack.Auth.IAuthSession session, ServiceStack.IServiceBase registrationService) => throw null; + public virtual System.Threading.Tasks.Task OnRegisteredAsync(ServiceStack.Web.IRequest httpReq, ServiceStack.Auth.IAuthSession session, ServiceStack.IServiceBase registrationService, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public virtual ServiceStack.Web.IHttpResult Validate(ServiceStack.IServiceBase authService, ServiceStack.Auth.IAuthSession session, ServiceStack.Auth.IAuthTokens tokens, System.Collections.Generic.Dictionary authInfo) => throw null; + public virtual System.Threading.Tasks.Task ValidateAsync(ServiceStack.IServiceBase authService, ServiceStack.Auth.IAuthSession session, ServiceStack.Auth.IAuthTokens tokens, System.Collections.Generic.Dictionary authInfo, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + } + + // Generated from `ServiceStack.Auth.AuthFilterContext` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class AuthFilterContext + { + public bool AlreadyAuthenticated { get => throw null; set => throw null; } + public AuthFilterContext() => throw null; + public ServiceStack.Auth.IAuthProvider AuthProvider { get => throw null; set => throw null; } + public ServiceStack.Authenticate AuthRequest { get => throw null; set => throw null; } + public ServiceStack.AuthenticateResponse AuthResponse { get => throw null; set => throw null; } + public ServiceStack.Auth.AuthenticateService AuthService { get => throw null; set => throw null; } + public bool DidAuthenticate { get => throw null; set => throw null; } + public string ReferrerUrl { get => throw null; set => throw null; } + public ServiceStack.Auth.IAuthSession Session { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.Auth.AuthHttpGateway` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class AuthHttpGateway : ServiceStack.Auth.IAuthHttpGateway + { + public AuthHttpGateway() => throw null; + public string CreateMicrosoftPhotoUrl(string accessToken, string savePhotoSize = default(string)) => throw null; + public System.Threading.Tasks.Task CreateMicrosoftPhotoUrlAsync(string accessToken, string savePhotoSize = default(string), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public string DownloadFacebookUserInfo(string facebookCode, params string[] fields) => throw null; + public System.Threading.Tasks.Task DownloadFacebookUserInfoAsync(string facebookCode, string[] fields, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public string DownloadGithubUserEmailsInfo(string accessToken) => throw null; + public System.Threading.Tasks.Task DownloadGithubUserEmailsInfoAsync(string accessToken, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public string DownloadGithubUserInfo(string accessToken) => throw null; + public System.Threading.Tasks.Task DownloadGithubUserInfoAsync(string accessToken, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public string DownloadGoogleUserInfo(string accessToken) => throw null; + public System.Threading.Tasks.Task DownloadGoogleUserInfoAsync(string accessToken, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public string DownloadMicrosoftUserInfo(string accessToken) => throw null; + public System.Threading.Tasks.Task DownloadMicrosoftUserInfoAsync(string accessToken, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public string DownloadTwitterUserInfo(string consumerKey, string consumerSecret, string accessToken, string accessTokenSecret, string twitterUserId) => throw null; + public System.Threading.Tasks.Task DownloadTwitterUserInfoAsync(string consumerKey, string consumerSecret, string accessToken, string accessTokenSecret, string twitterUserId, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public string DownloadYammerUserInfo(string yammerUserId) => throw null; + public System.Threading.Tasks.Task DownloadYammerUserInfoAsync(string yammerUserId) => throw null; + public static string FacebookUserUrl; + public static string FacebookVerifyTokenUrl; + public string GetJsonFromGitHub(string url, string accessToken) => throw null; + public System.Threading.Tasks.Task GetJsonFromGitHubAsync(string url, string accessToken, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static string GetJsonFromOAuthUrl(string consumerKey, string consumerSecret, string accessToken, string accessTokenSecret, string url, string data = default(string)) => throw null; + public static System.Threading.Tasks.Task GetJsonFromOAuthUrlAsync(string consumerKey, string consumerSecret, string accessToken, string accessTokenSecret, string url, string data = default(string), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static string GithubUserEmailsUrl; + public static string GithubUserUrl; + protected static ServiceStack.Logging.ILog Log; + public static string TwitterUserUrl; + public static string TwitterVerifyCredentialsUrl; + public bool VerifyFacebookAccessToken(string appId, string accessToken) => throw null; + public System.Threading.Tasks.Task VerifyFacebookAccessTokenAsync(string appId, string accessToken, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public bool VerifyTwitterAccessToken(string consumerKey, string consumerSecret, string accessToken, string accessTokenSecret, out string userId, out string email) => throw null; + public System.Threading.Tasks.Task VerifyTwitterAccessTokenAsync(string consumerKey, string consumerSecret, string accessToken, string accessTokenSecret, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static string YammerUserUrl; + } + + // Generated from `ServiceStack.Auth.AuthId` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class AuthId + { + public AuthId() => throw null; + public string Email { get => throw null; set => throw null; } + public string UserId { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.Auth.AuthMetadataProvider` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class AuthMetadataProvider : ServiceStack.Auth.IAuthMetadataProvider + { + public virtual void AddMetadata(ServiceStack.Auth.IAuthTokens tokens, System.Collections.Generic.Dictionary authInfo) => throw null; + public virtual void AddProfileUrl(ServiceStack.Auth.IAuthTokens tokens, System.Collections.Generic.Dictionary authInfo) => throw null; + public AuthMetadataProvider() => throw null; + public virtual string GetProfileUrl(ServiceStack.Auth.IAuthSession authSession, string defaultUrl = default(string)) => throw null; + public static string GetRedirectUrlIfAny(string url) => throw null; + public string NoProfileImgUrl { get => throw null; set => throw null; } + public const string ProfileUrlKey = default; + } + + // Generated from `ServiceStack.Auth.AuthMetadataProviderExtensions` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class AuthMetadataProviderExtensions + { + public static void SafeAddMetadata(this ServiceStack.Auth.IAuthMetadataProvider provider, ServiceStack.Auth.IAuthTokens tokens, System.Collections.Generic.Dictionary authInfo) => throw null; + } + + // Generated from `ServiceStack.Auth.AuthProvider` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public abstract class AuthProvider : ServiceStack.IAuthPlugin, ServiceStack.Auth.IAuthProvider + { + public System.Func AccessTokenUrlFilter; + public System.Func AccountLockedValidator { get => throw null; set => throw null; } + public ServiceStack.Auth.IAuthEvents AuthEvents { get => throw null; } + protected AuthProvider(ServiceStack.Configuration.IAppSettings appSettings, string authRealm, string oAuthProvider) => throw null; + protected AuthProvider() => throw null; + public string AuthRealm { get => throw null; set => throw null; } + public abstract System.Threading.Tasks.Task AuthenticateAsync(ServiceStack.IServiceBase authService, ServiceStack.Auth.IAuthSession session, ServiceStack.Authenticate request, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + public string CallbackUrl { get => throw null; set => throw null; } + protected virtual object ConvertToClientError(object failedResult, bool isHtml) => throw null; + protected virtual ServiceStack.Auth.AuthContext CreateAuthContext(ServiceStack.IServiceBase authService = default(ServiceStack.IServiceBase), ServiceStack.Auth.IAuthSession session = default(ServiceStack.Auth.IAuthSession), ServiceStack.Auth.IAuthTokens tokens = default(ServiceStack.Auth.IAuthTokens)) => throw null; + public virtual string CreateOrMergeAuthSession(ServiceStack.Auth.IAuthSession session, ServiceStack.Auth.IAuthTokens tokens) => throw null; + public System.Func CustomValidationFilter { get => throw null; set => throw null; } + protected virtual System.Threading.Tasks.Task EmailAlreadyExistsAsync(ServiceStack.Auth.IAuthRepositoryAsync authRepo, ServiceStack.Auth.IUserAuth userAuth, ServiceStack.Auth.IAuthTokens tokens = default(ServiceStack.Auth.IAuthTokens), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Collections.Generic.HashSet ExcludeAuthInfoItems { get => throw null; set => throw null; } + public System.Func FailedRedirectUrlFilter; + protected string FallbackConfig(string fallback) => throw null; + protected virtual string GetAuthRedirectUrl(ServiceStack.IServiceBase authService, ServiceStack.Auth.IAuthSession session) => throw null; + protected virtual ServiceStack.Auth.IAuthRepository GetAuthRepository(ServiceStack.Web.IRequest req) => throw null; + protected virtual ServiceStack.Auth.IAuthRepositoryAsync GetAuthRepositoryAsync(ServiceStack.Web.IRequest req) => throw null; + protected virtual string GetReferrerUrl(ServiceStack.IServiceBase authService, ServiceStack.Auth.IAuthSession session, ServiceStack.Authenticate request = default(ServiceStack.Authenticate)) => throw null; + public ServiceStack.Auth.IUserAuthRepositoryAsync GetUserAuthRepositoryAsync(ServiceStack.Web.IRequest request) => throw null; + public static System.Threading.Tasks.Task HandleFailedAuth(ServiceStack.Auth.IAuthProvider authProvider, ServiceStack.Auth.IAuthSession session, ServiceStack.Web.IRequest httpReq, ServiceStack.Web.IResponse httpRes) => throw null; + public virtual System.Threading.Tasks.Task IsAccountLockedAsync(ServiceStack.Auth.IAuthRepositoryAsync authRepoAsync, ServiceStack.Auth.IUserAuth userAuth, ServiceStack.Auth.IAuthTokens tokens = default(ServiceStack.Auth.IAuthTokens), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public abstract bool IsAuthorized(ServiceStack.Auth.IAuthSession session, ServiceStack.Auth.IAuthTokens tokens, ServiceStack.Authenticate request = default(ServiceStack.Authenticate)); + public System.Action> LoadUserAuthFilter { get => throw null; set => throw null; } + protected void LoadUserAuthInfo(ServiceStack.AuthUserSession userSession, ServiceStack.Auth.IAuthTokens tokens, System.Collections.Generic.Dictionary authInfo) => throw null; + protected virtual System.Threading.Tasks.Task LoadUserAuthInfoAsync(ServiceStack.AuthUserSession userSession, ServiceStack.Auth.IAuthTokens tokens, System.Collections.Generic.Dictionary authInfo, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Func, System.Threading.CancellationToken, System.Threading.Tasks.Task> LoadUserAuthInfoFilterAsync { get => throw null; set => throw null; } + protected static ServiceStack.Logging.ILog Log; + protected static bool LoginMatchesSession(ServiceStack.Auth.IAuthSession session, string userName) => throw null; + public virtual System.Threading.Tasks.Task LogoutAsync(ServiceStack.IServiceBase service, ServiceStack.Authenticate request, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Func LogoutUrlFilter; + public virtual System.Collections.Generic.Dictionary Meta { get => throw null; } + public ServiceStack.NavItem NavItem { get => throw null; set => throw null; } + public virtual System.Threading.Tasks.Task OnAuthenticatedAsync(ServiceStack.IServiceBase authService, ServiceStack.Auth.IAuthSession session, ServiceStack.Auth.IAuthTokens tokens, System.Collections.Generic.Dictionary authInfo, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public virtual System.Threading.Tasks.Task OnFailedAuthentication(ServiceStack.Auth.IAuthSession session, ServiceStack.Web.IRequest httpReq, ServiceStack.Web.IResponse httpRes) => throw null; + public bool PersistSession { get => throw null; set => throw null; } + public System.Func PreAuthUrlFilter; + public string Provider { get => throw null; set => throw null; } + public string RedirectUrl { get => throw null; set => throw null; } + public virtual void Register(ServiceStack.IAppHost appHost, ServiceStack.AuthFeature feature) => throw null; + public bool? RestoreSessionFromState { get => throw null; set => throw null; } + public bool SaveExtendedUserInfo { get => throw null; set => throw null; } + public System.TimeSpan? SessionExpiry { get => throw null; set => throw null; } + public System.Func SuccessRedirectUrlFilter; + public virtual string Type { get => throw null; } + public static string UrlFilter(ServiceStack.Auth.AuthContext provider, string url) => throw null; + protected virtual System.Threading.Tasks.Task UserNameAlreadyExistsAsync(ServiceStack.Auth.IAuthRepositoryAsync authRepo, ServiceStack.Auth.IUserAuth userAuth, ServiceStack.Auth.IAuthTokens tokens = default(ServiceStack.Auth.IAuthTokens), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + protected virtual System.Threading.Tasks.Task ValidateAccountAsync(ServiceStack.IServiceBase authService, ServiceStack.Auth.IAuthRepositoryAsync authRepo, ServiceStack.Auth.IAuthSession session, ServiceStack.Auth.IAuthTokens tokens, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + } + + // Generated from `ServiceStack.Auth.AuthProviderExtensions` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class AuthProviderExtensions + { + public static bool IsAuthorizedSafe(this ServiceStack.Auth.IAuthProvider authProvider, ServiceStack.Auth.IAuthSession session, ServiceStack.Auth.IAuthTokens tokens) => throw null; + public static void PopulatePasswordHashes(this ServiceStack.Auth.IUserAuth newUser, string password, ServiceStack.Auth.IUserAuth existingUser = default(ServiceStack.Auth.IUserAuth)) => throw null; + public static bool PopulateRequestDtoIfAuthenticated(this ServiceStack.Web.IRequest req, object requestDto) => throw null; + public static string SanitizeOAuthUrl(this string url) => throw null; + public static void SaveSession(this ServiceStack.Auth.IAuthProvider provider, ServiceStack.IServiceBase authService, ServiceStack.Auth.IAuthSession session, System.TimeSpan? sessionExpiry = default(System.TimeSpan?)) => throw null; + public static System.Threading.Tasks.Task SaveSessionAsync(this ServiceStack.Auth.IAuthProvider provider, ServiceStack.IServiceBase authService, ServiceStack.Auth.IAuthSession session, System.TimeSpan? sessionExpiry = default(System.TimeSpan?), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static bool VerifyDigestAuth(this ServiceStack.Auth.IUserAuth userAuth, System.Collections.Generic.Dictionary digestHeaders, string privateKey, int nonceTimeOut, string sequence) => throw null; + public static bool VerifyPassword(this ServiceStack.Auth.IUserAuth userAuth, string providedPassword, out bool needsRehash) => throw null; + } + + // Generated from `ServiceStack.Auth.AuthProviderSync` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public abstract class AuthProviderSync : ServiceStack.IAuthPlugin, ServiceStack.Auth.IAuthProvider + { + public System.Func AccessTokenUrlFilter; + public System.Func AccountLockedValidator { get => throw null; set => throw null; } + public ServiceStack.Auth.IAuthEvents AuthEvents { get => throw null; } + protected AuthProviderSync(ServiceStack.Configuration.IAppSettings appSettings, string authRealm, string oAuthProvider) => throw null; + protected AuthProviderSync() => throw null; + public string AuthRealm { get => throw null; set => throw null; } + public abstract object Authenticate(ServiceStack.IServiceBase authService, ServiceStack.Auth.IAuthSession session, ServiceStack.Authenticate request); + public System.Threading.Tasks.Task AuthenticateAsync(ServiceStack.IServiceBase authService, ServiceStack.Auth.IAuthSession session, ServiceStack.Authenticate request, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public string CallbackUrl { get => throw null; set => throw null; } + protected virtual object ConvertToClientError(object failedResult, bool isHtml) => throw null; + public virtual string CreateOrMergeAuthSession(ServiceStack.Auth.IAuthSession session, ServiceStack.Auth.IAuthTokens tokens) => throw null; + public System.Func CustomValidationFilter { get => throw null; set => throw null; } + protected virtual bool EmailAlreadyExists(ServiceStack.Auth.IAuthRepository authRepo, ServiceStack.Auth.IUserAuth userAuth, ServiceStack.Auth.IAuthTokens tokens = default(ServiceStack.Auth.IAuthTokens)) => throw null; + public System.Collections.Generic.HashSet ExcludeAuthInfoItems { get => throw null; set => throw null; } + public System.Func FailedRedirectUrlFilter; + protected string FallbackConfig(string fallback) => throw null; + protected virtual string GetAuthRedirectUrl(ServiceStack.IServiceBase authService, ServiceStack.Auth.IAuthSession session) => throw null; + protected virtual ServiceStack.Auth.IAuthRepository GetAuthRepository(ServiceStack.Web.IRequest req) => throw null; + protected virtual string GetReferrerUrl(ServiceStack.IServiceBase authService, ServiceStack.Auth.IAuthSession session, ServiceStack.Authenticate request = default(ServiceStack.Authenticate)) => throw null; + public static System.Threading.Tasks.Task HandleFailedAuth(ServiceStack.Auth.IAuthProvider authProvider, ServiceStack.Auth.IAuthSession session, ServiceStack.Web.IRequest httpReq, ServiceStack.Web.IResponse httpRes) => throw null; + public virtual bool IsAccountLocked(ServiceStack.Auth.IAuthRepository authRepo, ServiceStack.Auth.IUserAuth userAuth, ServiceStack.Auth.IAuthTokens tokens = default(ServiceStack.Auth.IAuthTokens)) => throw null; + public abstract bool IsAuthorized(ServiceStack.Auth.IAuthSession session, ServiceStack.Auth.IAuthTokens tokens, ServiceStack.Authenticate request = default(ServiceStack.Authenticate)); + public System.Action> LoadUserAuthFilter { get => throw null; set => throw null; } + protected virtual void LoadUserAuthInfo(ServiceStack.AuthUserSession userSession, ServiceStack.Auth.IAuthTokens tokens, System.Collections.Generic.Dictionary authInfo) => throw null; + protected static ServiceStack.Logging.ILog Log; + protected static bool LoginMatchesSession(ServiceStack.Auth.IAuthSession session, string userName) => throw null; + public virtual object Logout(ServiceStack.IServiceBase service, ServiceStack.Authenticate request) => throw null; + public System.Threading.Tasks.Task LogoutAsync(ServiceStack.IServiceBase service, ServiceStack.Authenticate request, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Func LogoutUrlFilter; + public virtual System.Collections.Generic.Dictionary Meta { get => throw null; } + public ServiceStack.NavItem NavItem { get => throw null; set => throw null; } + public virtual ServiceStack.Web.IHttpResult OnAuthenticated(ServiceStack.IServiceBase authService, ServiceStack.Auth.IAuthSession session, ServiceStack.Auth.IAuthTokens tokens, System.Collections.Generic.Dictionary authInfo) => throw null; + public virtual System.Threading.Tasks.Task OnFailedAuthentication(ServiceStack.Auth.IAuthSession session, ServiceStack.Web.IRequest httpReq, ServiceStack.Web.IResponse httpRes) => throw null; + public bool PersistSession { get => throw null; set => throw null; } + public System.Func PreAuthUrlFilter; + public string Provider { get => throw null; set => throw null; } + public string RedirectUrl { get => throw null; set => throw null; } + public virtual void Register(ServiceStack.IAppHost appHost, ServiceStack.AuthFeature feature) => throw null; + public bool? RestoreSessionFromState { get => throw null; set => throw null; } + public bool SaveExtendedUserInfo { get => throw null; set => throw null; } + public System.TimeSpan? SessionExpiry { get => throw null; set => throw null; } + public System.Func SuccessRedirectUrlFilter; + public virtual string Type { get => throw null; } + public static string UrlFilter(ServiceStack.Auth.AuthProviderSync provider, string url) => throw null; + protected virtual bool UserNameAlreadyExists(ServiceStack.Auth.IAuthRepository authRepo, ServiceStack.Auth.IUserAuth userAuth, ServiceStack.Auth.IAuthTokens tokens = default(ServiceStack.Auth.IAuthTokens)) => throw null; + protected virtual ServiceStack.Web.IHttpResult ValidateAccount(ServiceStack.IServiceBase authService, ServiceStack.Auth.IAuthRepository authRepo, ServiceStack.Auth.IAuthSession session, ServiceStack.Auth.IAuthTokens tokens) => throw null; + } + + // Generated from `ServiceStack.Auth.AuthRepositoryUtils` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class AuthRepositoryUtils + { + public static string ParseOrderBy(string orderBy, out bool desc) => throw null; + public static System.Collections.Generic.IEnumerable SortAndPage(this System.Collections.Generic.IEnumerable q, string orderBy, int? skip, int? take) where TUserAuth : ServiceStack.Auth.IUserAuth => throw null; + } + + // Generated from `ServiceStack.Auth.AuthResultContext` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class AuthResultContext + { + public AuthResultContext() => throw null; + public ServiceStack.Web.IRequest Request { get => throw null; set => throw null; } + public ServiceStack.Web.IHttpResult Result { get => throw null; set => throw null; } + public ServiceStack.IServiceBase Service { get => throw null; set => throw null; } + public ServiceStack.Auth.IAuthSession Session { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.Auth.AuthTokens` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class AuthTokens : ServiceStack.Auth.IUserAuthDetailsExtended, ServiceStack.Auth.IAuthTokens + { + public string AccessToken { get => throw null; set => throw null; } + public string AccessTokenSecret { get => throw null; set => throw null; } + public string Address { get => throw null; set => throw null; } + public string Address2 { get => throw null; set => throw null; } + public AuthTokens() => throw null; + public System.DateTime? BirthDate { get => throw null; set => throw null; } + public string BirthDateRaw { get => throw null; set => throw null; } + public string City { get => throw null; set => throw null; } + public string Company { get => throw null; set => throw null; } + public string Country { get => throw null; set => throw null; } + public string Culture { get => throw null; set => throw null; } + public string DisplayName { get => throw null; set => throw null; } + public string Email { get => throw null; set => throw null; } + public string FirstName { get => throw null; set => throw null; } + public string FullName { get => throw null; set => throw null; } + public string Gender { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary Items { get => throw null; set => throw null; } + public string Language { get => throw null; set => throw null; } + public string LastName { get => throw null; set => throw null; } + public string MailAddress { get => throw null; set => throw null; } + public string Nickname { get => throw null; set => throw null; } + public string PhoneNumber { get => throw null; set => throw null; } + public string PostalCode { get => throw null; set => throw null; } + public string Provider { get => throw null; set => throw null; } + public string RefreshToken { get => throw null; set => throw null; } + public System.DateTime? RefreshTokenExpiry { get => throw null; set => throw null; } + public string RequestToken { get => throw null; set => throw null; } + public string RequestTokenSecret { get => throw null; set => throw null; } + public string State { get => throw null; set => throw null; } + public string TimeZone { get => throw null; set => throw null; } + public string UserId { get => throw null; set => throw null; } + public string UserName { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.Auth.AuthenticateService` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class AuthenticateService : ServiceStack.Service + { + public const string ApiKeyProvider = default; + public static System.Func AuthResponseDecorator { get => throw null; set => throw null; } + public ServiceStack.AuthenticateResponse Authenticate(ServiceStack.Authenticate request) => throw null; + public System.Threading.Tasks.Task AuthenticateAsync(ServiceStack.Authenticate request, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public AuthenticateService() => throw null; + public const string BasicProvider = default; + public const string CredentialsAliasProvider = default; + public const string CredentialsProvider = default; + public static System.Func CurrentSessionFactory { get => throw null; set => throw null; } + public static string DefaultOAuthProvider { get => throw null; set => throw null; } + public static string DefaultOAuthRealm { get => throw null; set => throw null; } + public System.Threading.Tasks.Task DeleteAsync(ServiceStack.Authenticate request) => throw null; + public const string DigestProvider = default; + public System.Threading.Tasks.Task GetAsync(ServiceStack.Authenticate request) => throw null; + public static ServiceStack.Auth.IAuthProvider GetAuthProvider(string provider) => throw null; + public static ServiceStack.Auth.IAuthProvider[] GetAuthProviders(string provider = default(string)) => throw null; + public static ServiceStack.Auth.JwtAuthProviderReader GetJwtAuthProvider() => throw null; + public static ServiceStack.Auth.JwtAuthProviderReader GetRequiredJwtAuthProvider() => throw null; + public static ServiceStack.Auth.IUserSessionSource GetUserSessionSource() => throw null; + public static ServiceStack.Auth.IUserSessionSourceAsync GetUserSessionSourceAsync() => throw null; + public static string HtmlRedirect { get => throw null; set => throw null; } + public static string HtmlRedirectAccessDenied { get => throw null; set => throw null; } + public static string HtmlRedirectReturnParam { get => throw null; set => throw null; } + public static bool HtmlRedirectReturnPathOnly { get => throw null; set => throw null; } + public const string IdentityProvider = default; + public static void Init(System.Func sessionFactory, params ServiceStack.Auth.IAuthProvider[] authProviders) => throw null; + public const string JwtProvider = default; + public const string LogoutAction = default; + public void Options(ServiceStack.Authenticate request) => throw null; + public object Post(ServiceStack.Authenticate request) => throw null; + public System.Threading.Tasks.Task PostAsync(ServiceStack.Authenticate request) => throw null; + public static ServiceStack.Auth.ValidateFn ValidateFn { get => throw null; set => throw null; } + public const string WindowsAuthProvider = default; + } + + // Generated from `ServiceStack.Auth.BasicAuthProvider` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class BasicAuthProvider : ServiceStack.Auth.CredentialsAuthProvider, ServiceStack.Auth.IAuthWithRequest + { + public override System.Threading.Tasks.Task AuthenticateAsync(ServiceStack.IServiceBase authService, ServiceStack.Auth.IAuthSession session, ServiceStack.Authenticate request, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public BasicAuthProvider(ServiceStack.Configuration.IAppSettings appSettings) => throw null; + public BasicAuthProvider() => throw null; + public static string Name; + public virtual System.Threading.Tasks.Task PreAuthenticateAsync(ServiceStack.Web.IRequest req, ServiceStack.Web.IResponse res) => throw null; + public static string Realm; + public override string Type { get => throw null; } + } + + // Generated from `ServiceStack.Auth.BasicAuthProviderSync` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class BasicAuthProviderSync : ServiceStack.Auth.CredentialsAuthProviderSync, ServiceStack.Auth.IAuthWithRequestSync + { + public override object Authenticate(ServiceStack.IServiceBase authService, ServiceStack.Auth.IAuthSession session, ServiceStack.Authenticate request) => throw null; + public BasicAuthProviderSync(ServiceStack.Configuration.IAppSettings appSettings) => throw null; + public BasicAuthProviderSync() => throw null; + public static string Name; + public virtual void PreAuthenticate(ServiceStack.Web.IRequest req, ServiceStack.Web.IResponse res) => throw null; + public static string Realm; + public override string Type { get => throw null; } + } + + // Generated from `ServiceStack.Auth.ConvertSessionToTokenService` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ConvertSessionToTokenService : ServiceStack.Service + { + public object Any(ServiceStack.ConvertSessionToToken request) => throw null; + public ConvertSessionToTokenService() => throw null; + } + + // Generated from `ServiceStack.Auth.CreateApiKeyDelegate` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public delegate string CreateApiKeyDelegate(string environment, string keyType, int keySizeBytes); + + // Generated from `ServiceStack.Auth.CredentialsAuthProvider` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class CredentialsAuthProvider : ServiceStack.Auth.AuthProvider + { + public override System.Threading.Tasks.Task AuthenticateAsync(ServiceStack.IServiceBase authService, ServiceStack.Auth.IAuthSession session, ServiceStack.Authenticate request, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + protected System.Threading.Tasks.Task AuthenticateAsync(ServiceStack.IServiceBase authService, ServiceStack.Auth.IAuthSession session, string userName, string password, string referrerUrl, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + protected virtual System.Threading.Tasks.Task AuthenticatePrivateRequestAsync(ServiceStack.IServiceBase authService, ServiceStack.Auth.IAuthSession session, string userName, string password, string referrerUrl, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public CredentialsAuthProvider(ServiceStack.Configuration.IAppSettings appSettings, string authRealm, string oAuthProvider) => throw null; + public CredentialsAuthProvider(ServiceStack.Configuration.IAppSettings appSettings) => throw null; + public CredentialsAuthProvider() => throw null; + public override bool IsAuthorized(ServiceStack.Auth.IAuthSession session, ServiceStack.Auth.IAuthTokens tokens, ServiceStack.Authenticate request = default(ServiceStack.Authenticate)) => throw null; + public static string Name; + public static string Realm; + protected virtual System.Threading.Tasks.Task ResetSessionBeforeLoginAsync(ServiceStack.IServiceBase authService, ServiceStack.Auth.IAuthSession session, string userName, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public bool SkipPasswordVerificationForInProcessRequests { get => throw null; set => throw null; } + public virtual System.Threading.Tasks.Task TryAuthenticateAsync(ServiceStack.IServiceBase authService, string userName, string password, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public override string Type { get => throw null; } + } + + // Generated from `ServiceStack.Auth.CredentialsAuthProviderSync` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class CredentialsAuthProviderSync : ServiceStack.Auth.AuthProviderSync + { + public override object Authenticate(ServiceStack.IServiceBase authService, ServiceStack.Auth.IAuthSession session, ServiceStack.Authenticate request) => throw null; + protected object Authenticate(ServiceStack.IServiceBase authService, ServiceStack.Auth.IAuthSession session, string userName, string password, string referrerUrl) => throw null; + protected object Authenticate(ServiceStack.IServiceBase authService, ServiceStack.Auth.IAuthSession session, string userName, string password) => throw null; + protected virtual object AuthenticatePrivateRequest(ServiceStack.IServiceBase authService, ServiceStack.Auth.IAuthSession session, string userName, string password, string referrerUrl) => throw null; + public CredentialsAuthProviderSync(ServiceStack.Configuration.IAppSettings appSettings, string authRealm, string oAuthProvider) => throw null; + public CredentialsAuthProviderSync(ServiceStack.Configuration.IAppSettings appSettings) => throw null; + public CredentialsAuthProviderSync() => throw null; + public ServiceStack.Auth.IUserAuthRepository GetUserAuthRepository(ServiceStack.Web.IRequest request) => throw null; + public override bool IsAuthorized(ServiceStack.Auth.IAuthSession session, ServiceStack.Auth.IAuthTokens tokens, ServiceStack.Authenticate request = default(ServiceStack.Authenticate)) => throw null; + public static string Name; + public override ServiceStack.Web.IHttpResult OnAuthenticated(ServiceStack.IServiceBase authService, ServiceStack.Auth.IAuthSession session, ServiceStack.Auth.IAuthTokens tokens, System.Collections.Generic.Dictionary authInfo) => throw null; + public static string Realm; + protected virtual ServiceStack.Auth.IAuthSession ResetSessionBeforeLogin(ServiceStack.IServiceBase authService, ServiceStack.Auth.IAuthSession session, string userName) => throw null; + public bool SkipPasswordVerificationForInProcessRequests { get => throw null; set => throw null; } + public virtual bool TryAuthenticate(ServiceStack.IServiceBase authService, string userName, string password) => throw null; + public override string Type { get => throw null; } + } + + // Generated from `ServiceStack.Auth.DigestAuthFunctions` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class DigestAuthFunctions + { + public string Base64Decode(string StringToDecode) => throw null; + public string Base64Encode(string StringToEncode) => throw null; + public string ConvertToHexString(System.Collections.Generic.IEnumerable hash) => throw null; + public string CreateAuthResponse(System.Collections.Generic.Dictionary digestHeaders, string Ha1, string Ha2) => throw null; + public string CreateAuthResponse(System.Collections.Generic.Dictionary digestHeaders, string Ha1) => throw null; + public string CreateHa1(string Username, string Realm, string Password) => throw null; + public string CreateHa1(System.Collections.Generic.Dictionary digestHeaders, string password) => throw null; + public string CreateHa2(System.Collections.Generic.Dictionary digestHeaders) => throw null; + public DigestAuthFunctions() => throw null; + public string GetNonce(string IPAddress, string PrivateKey) => throw null; + public string[] GetNonceParts(string nonce) => throw null; + public string PrivateHashEncode(string TimeStamp, string IPAddress, string PrivateKey) => throw null; + public bool StaleNonce(string nonce, int Timeout) => throw null; + public bool ValidateNonce(string nonce, string IPAddress, string PrivateKey) => throw null; + public bool ValidateResponse(System.Collections.Generic.Dictionary digestInfo, string PrivateKey, int NonceTimeOut, string DigestHA1, string sequence) => throw null; + } + + // Generated from `ServiceStack.Auth.DigestAuthProvider` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class DigestAuthProvider : ServiceStack.Auth.AuthProvider, ServiceStack.Auth.IAuthWithRequest + { + public ServiceStack.Configuration.IAppSettings AppSettings { get => throw null; set => throw null; } + public override System.Threading.Tasks.Task AuthenticateAsync(ServiceStack.IServiceBase authService, ServiceStack.Auth.IAuthSession session, ServiceStack.Authenticate request, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + protected System.Threading.Tasks.Task AuthenticateAsync(ServiceStack.IServiceBase authService, ServiceStack.Auth.IAuthSession session, string userName, string password, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public DigestAuthProvider(ServiceStack.Configuration.IAppSettings appSettings, string authRealm, string oAuthProvider) => throw null; + public DigestAuthProvider(ServiceStack.Configuration.IAppSettings appSettings) => throw null; + public DigestAuthProvider() => throw null; + public override bool IsAuthorized(ServiceStack.Auth.IAuthSession session, ServiceStack.Auth.IAuthTokens tokens, ServiceStack.Authenticate request = default(ServiceStack.Authenticate)) => throw null; + public static string Name; + public static int NonceTimeOut; + public override System.Threading.Tasks.Task OnAuthenticatedAsync(ServiceStack.IServiceBase authService, ServiceStack.Auth.IAuthSession session, ServiceStack.Auth.IAuthTokens tokens, System.Collections.Generic.Dictionary authInfo, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public override System.Threading.Tasks.Task OnFailedAuthentication(ServiceStack.Auth.IAuthSession session, ServiceStack.Web.IRequest httpReq, ServiceStack.Web.IResponse httpRes) => throw null; + public System.Threading.Tasks.Task PreAuthenticateAsync(ServiceStack.Web.IRequest req, ServiceStack.Web.IResponse res) => throw null; + public string PrivateKey; + public static string Realm; + public virtual bool TryAuthenticate(ServiceStack.IServiceBase authService, string userName, string password) => throw null; + public override string Type { get => throw null; } + } + + // Generated from `ServiceStack.Auth.EmailAddresses` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class EmailAddresses + { + public string Address { get => throw null; set => throw null; } + public EmailAddresses() => throw null; + public string Type { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.Auth.FacebookAuthProvider` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class FacebookAuthProvider : ServiceStack.Auth.OAuthProvider + { + public string AppId { get => throw null; set => throw null; } + public string AppSecret { get => throw null; set => throw null; } + public override System.Threading.Tasks.Task AuthenticateAsync(ServiceStack.IServiceBase authService, ServiceStack.Auth.IAuthSession session, ServiceStack.Authenticate request, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + protected virtual System.Threading.Tasks.Task AuthenticateWithAccessTokenAsync(ServiceStack.IServiceBase authService, ServiceStack.Auth.IAuthSession session, ServiceStack.Auth.IAuthTokens tokens, string accessToken, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static string[] DefaultFields; + public FacebookAuthProvider(ServiceStack.Configuration.IAppSettings appSettings) => throw null; + public string[] Fields { get => throw null; set => throw null; } + protected override System.Threading.Tasks.Task LoadUserAuthInfoAsync(ServiceStack.AuthUserSession userSession, ServiceStack.Auth.IAuthTokens tokens, System.Collections.Generic.Dictionary authInfo, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public override void LoadUserOAuthProvider(ServiceStack.Auth.IAuthSession authSession, ServiceStack.Auth.IAuthTokens tokens) => throw null; + public override System.Collections.Generic.Dictionary Meta { get => throw null; } + public const string Name = default; + public string[] Permissions { get => throw null; set => throw null; } + public static string PreAuthUrl; + public static string Realm; + public bool RetrieveUserPicture { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.Auth.FullRegistrationValidator` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class FullRegistrationValidator : ServiceStack.Auth.RegistrationValidator + { + public FullRegistrationValidator() => throw null; + } + + // Generated from `ServiceStack.Auth.GetAccessTokenService` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class GetAccessTokenService : ServiceStack.Service + { + public System.Threading.Tasks.Task Any(ServiceStack.GetAccessToken request) => throw null; + public GetAccessTokenService() => throw null; + } + + // Generated from `ServiceStack.Auth.GetApiKeysService` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class GetApiKeysService : ServiceStack.Service + { + public object Any(ServiceStack.GetApiKeys request) => throw null; + public GetApiKeysService() => throw null; + } + + // Generated from `ServiceStack.Auth.GithubAuthProvider` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class GithubAuthProvider : ServiceStack.Auth.OAuthProvider + { + public override System.Threading.Tasks.Task AuthenticateAsync(ServiceStack.IServiceBase authService, ServiceStack.Auth.IAuthSession session, ServiceStack.Authenticate request, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + protected virtual System.Threading.Tasks.Task AuthenticateWithAccessTokenAsync(ServiceStack.IServiceBase authService, ServiceStack.Auth.IAuthSession session, ServiceStack.Auth.IAuthTokens tokens, string accessToken, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public string ClientId { get => throw null; set => throw null; } + public string ClientSecret { get => throw null; set => throw null; } + public const string DefaultPreAuthUrl = default; + public const string DefaultVerifyAccessTokenUrl = default; + public GithubAuthProvider(ServiceStack.Configuration.IAppSettings appSettings) => throw null; + protected override System.Threading.Tasks.Task LoadUserAuthInfoAsync(ServiceStack.AuthUserSession userSession, ServiceStack.Auth.IAuthTokens tokens, System.Collections.Generic.Dictionary authInfo, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public override void LoadUserOAuthProvider(ServiceStack.Auth.IAuthSession authSession, ServiceStack.Auth.IAuthTokens tokens) => throw null; + public override System.Collections.Generic.Dictionary Meta { get => throw null; } + public const string Name = default; + public string PreAuthUrl { get => throw null; set => throw null; } + public static string Realm; + public string[] Scopes { get => throw null; set => throw null; } + public string VerifyAccessTokenUrl { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.Auth.GoogleAuthProvider` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class GoogleAuthProvider : ServiceStack.Auth.OAuth2Provider + { + protected override System.Threading.Tasks.Task AuthenticateWithAccessTokenAsync(ServiceStack.IServiceBase authService, ServiceStack.Auth.IAuthSession session, ServiceStack.Auth.IAuthTokens tokens, string accessToken, System.Collections.Generic.Dictionary authInfo = default(System.Collections.Generic.Dictionary), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + protected override System.Threading.Tasks.Task> CreateAuthInfoAsync(string accessToken, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public const string DefaultAccessTokenUrl = default; + public const string DefaultAuthorizeUrl = default; + public const string DefaultUserProfileUrl = default; + public const string DefaultVerifyTokenUrl = default; + public GoogleAuthProvider(ServiceStack.Configuration.IAppSettings appSettings) : base(default(ServiceStack.Configuration.IAppSettings), default(string), default(string)) => throw null; + public const string Name = default; + public virtual System.Threading.Tasks.Task OnVerifyAccessTokenAsync(string accessToken, ServiceStack.Auth.AuthContext ctx) => throw null; + public static string Realm; + } + + // Generated from `ServiceStack.Auth.HashExtensions` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class HashExtensions + { + public static string HexHash(System.Security.Cryptography.HashAlgorithm hash, string s) => throw null; + public static string HexHash(System.Security.Cryptography.HashAlgorithm hash, System.Byte[] bytes) => throw null; + public static string ToSha1Hash(this string value) => throw null; + public static System.Byte[] ToSha1HashBytes(this System.Byte[] bytes) => throw null; + public static string ToSha256Hash(this string value) => throw null; + public static System.Byte[] ToSha256HashBytes(this System.Byte[] bytes) => throw null; + public static string ToSha512Hash(this string value) => throw null; + public static System.Byte[] ToSha512HashBytes(this System.Byte[] bytes) => throw null; + } + + // Generated from `ServiceStack.Auth.IAuthEvents` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IAuthEvents + { + void OnAuthenticated(ServiceStack.Web.IRequest httpReq, ServiceStack.Auth.IAuthSession session, ServiceStack.IServiceBase authService, ServiceStack.Auth.IAuthTokens tokens, System.Collections.Generic.Dictionary authInfo); + void OnCreated(ServiceStack.Web.IRequest httpReq, ServiceStack.Auth.IAuthSession session); + void OnLogout(ServiceStack.Web.IRequest httpReq, ServiceStack.Auth.IAuthSession session, ServiceStack.IServiceBase authService); + void OnRegistered(ServiceStack.Web.IRequest httpReq, ServiceStack.Auth.IAuthSession session, ServiceStack.IServiceBase registrationService); + ServiceStack.Web.IHttpResult Validate(ServiceStack.IServiceBase authService, ServiceStack.Auth.IAuthSession session, ServiceStack.Auth.IAuthTokens tokens, System.Collections.Generic.Dictionary authInfo); + } + + // Generated from `ServiceStack.Auth.IAuthEventsAsync` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IAuthEventsAsync + { + System.Threading.Tasks.Task OnAuthenticatedAsync(ServiceStack.Web.IRequest httpReq, ServiceStack.Auth.IAuthSession session, ServiceStack.IServiceBase authService, ServiceStack.Auth.IAuthTokens tokens, System.Collections.Generic.Dictionary authInfo, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task OnLogoutAsync(ServiceStack.Web.IRequest httpReq, ServiceStack.Auth.IAuthSession session, ServiceStack.IServiceBase authService, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task OnRegisteredAsync(ServiceStack.Web.IRequest httpReq, ServiceStack.Auth.IAuthSession session, ServiceStack.IServiceBase registrationService, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task ValidateAsync(ServiceStack.IServiceBase authService, ServiceStack.Auth.IAuthSession session, ServiceStack.Auth.IAuthTokens tokens, System.Collections.Generic.Dictionary authInfo, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + } + + // Generated from `ServiceStack.Auth.IAuthHttpGateway` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IAuthHttpGateway + { + string CreateMicrosoftPhotoUrl(string accessToken, string savePhotoSize = default(string)); + System.Threading.Tasks.Task CreateMicrosoftPhotoUrlAsync(string accessToken, string savePhotoSize = default(string), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + string DownloadFacebookUserInfo(string facebookCode, params string[] fields); + System.Threading.Tasks.Task DownloadFacebookUserInfoAsync(string facebookCode, string[] fields, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + string DownloadGithubUserEmailsInfo(string accessToken); + System.Threading.Tasks.Task DownloadGithubUserEmailsInfoAsync(string accessToken, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + string DownloadGithubUserInfo(string accessToken); + System.Threading.Tasks.Task DownloadGithubUserInfoAsync(string accessToken, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + string DownloadGoogleUserInfo(string accessToken); + System.Threading.Tasks.Task DownloadGoogleUserInfoAsync(string accessToken, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + string DownloadMicrosoftUserInfo(string accessToken); + System.Threading.Tasks.Task DownloadMicrosoftUserInfoAsync(string accessToken, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + string DownloadTwitterUserInfo(string consumerKey, string consumerSecret, string accessToken, string accessTokenSecret, string twitterUserId); + System.Threading.Tasks.Task DownloadTwitterUserInfoAsync(string consumerKey, string consumerSecret, string accessToken, string accessTokenSecret, string twitterUserId, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + string DownloadYammerUserInfo(string yammerUserId); + System.Threading.Tasks.Task DownloadYammerUserInfoAsync(string yammerUserId); + bool VerifyFacebookAccessToken(string appId, string accessToken); + System.Threading.Tasks.Task VerifyFacebookAccessTokenAsync(string appId, string accessToken, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + bool VerifyTwitterAccessToken(string consumerKey, string consumerSecret, string accessToken, string accessTokenSecret, out string userId, out string email); + System.Threading.Tasks.Task VerifyTwitterAccessTokenAsync(string consumerKey, string consumerSecret, string accessToken, string accessTokenSecret, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + } + + // Generated from `ServiceStack.Auth.IAuthMetadataProvider` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IAuthMetadataProvider + { + void AddMetadata(ServiceStack.Auth.IAuthTokens tokens, System.Collections.Generic.Dictionary authInfo); + string GetProfileUrl(ServiceStack.Auth.IAuthSession authSession, string defaultUrl = default(string)); + } + + // Generated from `ServiceStack.Auth.IAuthProvider` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IAuthProvider + { + string AuthRealm { get; set; } + System.Threading.Tasks.Task AuthenticateAsync(ServiceStack.IServiceBase authService, ServiceStack.Auth.IAuthSession session, ServiceStack.Authenticate request, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + string CallbackUrl { get; set; } + bool IsAuthorized(ServiceStack.Auth.IAuthSession session, ServiceStack.Auth.IAuthTokens tokens, ServiceStack.Authenticate request = default(ServiceStack.Authenticate)); + System.Threading.Tasks.Task LogoutAsync(ServiceStack.IServiceBase service, ServiceStack.Authenticate request, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Collections.Generic.Dictionary Meta { get; } + string Provider { get; set; } + string Type { get; } + } + + // Generated from `ServiceStack.Auth.IAuthRepository` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IAuthRepository + { + ServiceStack.Auth.IUserAuthDetails CreateOrMergeAuthSession(ServiceStack.Auth.IAuthSession authSession, ServiceStack.Auth.IAuthTokens tokens); + ServiceStack.Auth.IUserAuth GetUserAuth(ServiceStack.Auth.IAuthSession authSession, ServiceStack.Auth.IAuthTokens tokens); + ServiceStack.Auth.IUserAuth GetUserAuthByUserName(string userNameOrEmail); + System.Collections.Generic.List GetUserAuthDetails(string userAuthId); + void LoadUserAuth(ServiceStack.Auth.IAuthSession session, ServiceStack.Auth.IAuthTokens tokens); + void SaveUserAuth(ServiceStack.Auth.IUserAuth userAuth); + void SaveUserAuth(ServiceStack.Auth.IAuthSession authSession); + bool TryAuthenticate(string userName, string password, out ServiceStack.Auth.IUserAuth userAuth); + bool TryAuthenticate(System.Collections.Generic.Dictionary digestHeaders, string privateKey, int nonceTimeOut, string sequence, out ServiceStack.Auth.IUserAuth userAuth); + } + + // Generated from `ServiceStack.Auth.IAuthRepositoryAsync` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IAuthRepositoryAsync + { + System.Threading.Tasks.Task CreateOrMergeAuthSessionAsync(ServiceStack.Auth.IAuthSession authSession, ServiceStack.Auth.IAuthTokens tokens, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task GetUserAuthAsync(ServiceStack.Auth.IAuthSession authSession, ServiceStack.Auth.IAuthTokens tokens, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task GetUserAuthByUserNameAsync(string userNameOrEmail, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task> GetUserAuthDetailsAsync(string userAuthId, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task LoadUserAuthAsync(ServiceStack.Auth.IAuthSession session, ServiceStack.Auth.IAuthTokens tokens, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task SaveUserAuthAsync(ServiceStack.Auth.IUserAuth userAuth, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task SaveUserAuthAsync(ServiceStack.Auth.IAuthSession authSession, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task TryAuthenticateAsync(string userName, string password, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task TryAuthenticateAsync(System.Collections.Generic.Dictionary digestHeaders, string privateKey, int nonceTimeOut, string sequence, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + } + + // Generated from `ServiceStack.Auth.IAuthResponseFilter` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IAuthResponseFilter + { + void Execute(ServiceStack.Auth.AuthFilterContext authContext); + System.Threading.Tasks.Task ResultFilterAsync(ServiceStack.Auth.AuthResultContext authContext, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + } + + // Generated from `ServiceStack.Auth.IAuthSession` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IAuthSession + { + string AuthProvider { get; set; } + System.DateTime CreatedAt { get; set; } + string DisplayName { get; set; } + string Email { get; set; } + string FirstName { get; set; } + bool FromToken { get; set; } + bool HasPermission(string permission, ServiceStack.Auth.IAuthRepository authRepo); + System.Threading.Tasks.Task HasPermissionAsync(string permission, ServiceStack.Auth.IAuthRepositoryAsync authRepo, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + bool HasRole(string role, ServiceStack.Auth.IAuthRepository authRepo); + System.Threading.Tasks.Task HasRoleAsync(string role, ServiceStack.Auth.IAuthRepositoryAsync authRepo, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + string Id { get; set; } + bool IsAuthenticated { get; set; } + bool IsAuthorized(string provider); + System.DateTime LastModified { get; set; } + string LastName { get; set; } + void OnAuthenticated(ServiceStack.IServiceBase authService, ServiceStack.Auth.IAuthSession session, ServiceStack.Auth.IAuthTokens tokens, System.Collections.Generic.Dictionary authInfo); + void OnCreated(ServiceStack.Web.IRequest httpReq); + void OnLogout(ServiceStack.IServiceBase authService); + void OnRegistered(ServiceStack.Web.IRequest httpReq, ServiceStack.Auth.IAuthSession session, ServiceStack.IServiceBase service); + System.Collections.Generic.List Permissions { get; set; } + string ProfileUrl { get; set; } + System.Collections.Generic.List ProviderOAuthAccess { get; set; } + string ReferrerUrl { get; set; } + System.Collections.Generic.List Roles { get; set; } + string Sequence { get; set; } + string UserAuthId { get; set; } + string UserAuthName { get; set; } + string UserName { get; set; } + } + + // Generated from `ServiceStack.Auth.IAuthSessionExtended` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IAuthSessionExtended : ServiceStack.Auth.IAuthSession + { + string Address { get; set; } + string Address2 { get; set; } + System.Collections.Generic.List Audiences { get; set; } + System.DateTime? BirthDate { get; set; } + string BirthDateRaw { get; set; } + string City { get; set; } + string Company { get; set; } + string Country { get; set; } + string Dns { get; set; } + bool? EmailConfirmed { get; set; } + string Gender { get; set; } + string Hash { get; set; } + string HomePhone { get; set; } + string MobilePhone { get; set; } + System.Threading.Tasks.Task OnAuthenticatedAsync(ServiceStack.IServiceBase authService, ServiceStack.Auth.IAuthSession session, ServiceStack.Auth.IAuthTokens tokens, System.Collections.Generic.Dictionary authInfo, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + void OnLoad(ServiceStack.Web.IRequest httpReq); + System.Threading.Tasks.Task OnLogoutAsync(ServiceStack.IServiceBase authService, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task OnRegisteredAsync(ServiceStack.Web.IRequest httpReq, ServiceStack.Auth.IAuthSession session, ServiceStack.IServiceBase service, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + string PhoneNumber { get; set; } + bool? PhoneNumberConfirmed { get; set; } + string PostalCode { get; set; } + string PrimaryEmail { get; set; } + string Rsa { get; set; } + System.Collections.Generic.List Scopes { get; set; } + string SecurityStamp { get; set; } + string Sid { get; set; } + string State { get; set; } + bool? TwoFactorEnabled { get; set; } + string Type { get; set; } + ServiceStack.Web.IHttpResult Validate(ServiceStack.IServiceBase authService, ServiceStack.Auth.IAuthSession session, ServiceStack.Auth.IAuthTokens tokens, System.Collections.Generic.Dictionary authInfo); + System.Threading.Tasks.Task ValidateAsync(ServiceStack.IServiceBase authService, ServiceStack.Auth.IAuthSession session, ServiceStack.Auth.IAuthTokens tokens, System.Collections.Generic.Dictionary authInfo, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + string Webpage { get; set; } + } + + // Generated from `ServiceStack.Auth.IAuthWithRequest` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IAuthWithRequest + { + System.Threading.Tasks.Task PreAuthenticateAsync(ServiceStack.Web.IRequest req, ServiceStack.Web.IResponse res); + } + + // Generated from `ServiceStack.Auth.IAuthWithRequestSync` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IAuthWithRequestSync + { + void PreAuthenticate(ServiceStack.Web.IRequest req, ServiceStack.Web.IResponse res); + } + + // Generated from `ServiceStack.Auth.IClearable` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IClearable + { + void Clear(); + } + + // Generated from `ServiceStack.Auth.IClearableAsync` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IClearableAsync + { + System.Threading.Tasks.Task ClearAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + } + + // Generated from `ServiceStack.Auth.ICustomUserAuth` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface ICustomUserAuth + { + ServiceStack.Auth.IUserAuth CreateUserAuth(); + ServiceStack.Auth.IUserAuthDetails CreateUserAuthDetails(); + } + + // Generated from `ServiceStack.Auth.IHashProvider` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IHashProvider + { + void GetHashAndSaltString(string Data, out string Hash, out string Salt); + bool VerifyHashString(string Data, string Hash, string Salt); + } + + // Generated from `ServiceStack.Auth.IManageApiKeys` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IManageApiKeys + { + bool ApiKeyExists(string apiKey); + ServiceStack.Auth.ApiKey GetApiKey(string apiKey); + System.Collections.Generic.List GetUserApiKeys(string userId); + void InitApiKeySchema(); + void StoreAll(System.Collections.Generic.IEnumerable apiKeys); + } + + // Generated from `ServiceStack.Auth.IManageApiKeysAsync` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IManageApiKeysAsync + { + System.Threading.Tasks.Task ApiKeyExistsAsync(string apiKey, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task GetApiKeyAsync(string apiKey, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task> GetUserApiKeysAsync(string userId, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + void InitApiKeySchema(); + System.Threading.Tasks.Task StoreAllAsync(System.Collections.Generic.IEnumerable apiKeys, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + } + + // Generated from `ServiceStack.Auth.IManageRoles` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IManageRoles + { + void AssignRoles(string userAuthId, System.Collections.Generic.ICollection roles = default(System.Collections.Generic.ICollection), System.Collections.Generic.ICollection permissions = default(System.Collections.Generic.ICollection)); + System.Collections.Generic.ICollection GetPermissions(string userAuthId); + System.Collections.Generic.ICollection GetRoles(string userAuthId); + void GetRolesAndPermissions(string userAuthId, out System.Collections.Generic.ICollection roles, out System.Collections.Generic.ICollection permissions); + bool HasPermission(string userAuthId, string permission); + bool HasRole(string userAuthId, string role); + void UnAssignRoles(string userAuthId, System.Collections.Generic.ICollection roles = default(System.Collections.Generic.ICollection), System.Collections.Generic.ICollection permissions = default(System.Collections.Generic.ICollection)); + } + + // Generated from `ServiceStack.Auth.IManageRolesAsync` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IManageRolesAsync + { + System.Threading.Tasks.Task AssignRolesAsync(string userAuthId, System.Collections.Generic.ICollection roles = default(System.Collections.Generic.ICollection), System.Collections.Generic.ICollection permissions = default(System.Collections.Generic.ICollection), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task> GetPermissionsAsync(string userAuthId, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task, System.Collections.Generic.ICollection>> GetRolesAndPermissionsAsync(string userAuthId, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task> GetRolesAsync(string userAuthId, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task HasPermissionAsync(string userAuthId, string permission, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task HasRoleAsync(string userAuthId, string role, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task UnAssignRolesAsync(string userAuthId, System.Collections.Generic.ICollection roles = default(System.Collections.Generic.ICollection), System.Collections.Generic.ICollection permissions = default(System.Collections.Generic.ICollection), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + } + + // Generated from `ServiceStack.Auth.IMemoryAuthRepository` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IMemoryAuthRepository : ServiceStack.Auth.IUserAuthRepository, ServiceStack.Auth.IManageApiKeys, ServiceStack.Auth.ICustomUserAuth, ServiceStack.Auth.IClearable, ServiceStack.Auth.IAuthRepository + { + System.Collections.Generic.Dictionary> Hashes { get; } + System.Collections.Generic.Dictionary> Sets { get; } + } + + // Generated from `ServiceStack.Auth.IOAuthProvider` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IOAuthProvider : ServiceStack.Auth.IAuthProvider + { + string AccessTokenUrl { get; set; } + ServiceStack.Auth.IAuthHttpGateway AuthHttpGateway { get; set; } + string AuthorizeUrl { get; set; } + string ConsumerKey { get; set; } + string ConsumerSecret { get; set; } + string RequestTokenUrl { get; set; } + } + + // Generated from `ServiceStack.Auth.IQueryUserAuth` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IQueryUserAuth + { + System.Collections.Generic.List GetUserAuths(string orderBy = default(string), int? skip = default(int?), int? take = default(int?)); + System.Collections.Generic.List SearchUserAuths(string query, string orderBy = default(string), int? skip = default(int?), int? take = default(int?)); + } + + // Generated from `ServiceStack.Auth.IQueryUserAuthAsync` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IQueryUserAuthAsync + { + System.Threading.Tasks.Task> GetUserAuthsAsync(string orderBy = default(string), int? skip = default(int?), int? take = default(int?), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task> SearchUserAuthsAsync(string query, string orderBy = default(string), int? skip = default(int?), int? take = default(int?), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + } + + // Generated from `ServiceStack.Auth.IRedisClientFacade` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IRedisClientFacade : System.IDisposable + { + void AddItemToSet(string setId, string item); + ServiceStack.Auth.ITypedRedisClientFacade As(); + void DeleteById(string id); + System.Collections.Generic.HashSet GetAllItemsFromSet(string setId); + string GetValueFromHash(string hashId, string key); + void RemoveEntryFromHash(string hashId, string key); + void SetEntryInHash(string hashId, string key, string value); + void Store(T item); + } + + // Generated from `ServiceStack.Auth.IRedisClientFacadeAsync` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IRedisClientFacadeAsync : System.IAsyncDisposable + { + System.Threading.Tasks.Task AddItemToSetAsync(string setId, string item, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + ServiceStack.Auth.ITypedRedisClientFacadeAsync AsAsync(); + System.Threading.Tasks.Task DeleteByIdAsync(string id, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task> GetAllItemsFromSetAsync(string setId, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task GetValueFromHashAsync(string hashId, string key, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task RemoveEntryFromHashAsync(string hashId, string key, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task SetEntryInHashAsync(string hashId, string key, string value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task StoreAsync(T item, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + } + + // Generated from `ServiceStack.Auth.IRedisClientManagerFacade` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IRedisClientManagerFacade : ServiceStack.Auth.IClearableAsync, ServiceStack.Auth.IClearable + { + ServiceStack.Auth.IRedisClientFacade GetClient(); + System.Threading.Tasks.Task GetClientAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + } + + // Generated from `ServiceStack.Auth.ITypedRedisClientFacade<>` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface ITypedRedisClientFacade + { + void DeleteById(string id); + void DeleteByIds(System.Collections.IEnumerable ids); + System.Collections.Generic.List GetAll(int? skip = default(int?), int? take = default(int?)); + T GetById(object id); + System.Collections.Generic.List GetByIds(System.Collections.IEnumerable ids); + int GetNextSequence(); + } + + // Generated from `ServiceStack.Auth.ITypedRedisClientFacadeAsync<>` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface ITypedRedisClientFacadeAsync + { + System.Threading.Tasks.Task DeleteByIdAsync(string id, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task DeleteByIdsAsync(System.Collections.IEnumerable ids, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task> GetAllAsync(int? skip = default(int?), int? take = default(int?), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task GetByIdAsync(object id, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task> GetByIdsAsync(System.Collections.IEnumerable ids, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task GetNextSequenceAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + } + + // Generated from `ServiceStack.Auth.IUserAuthRepository` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IUserAuthRepository : ServiceStack.Auth.IAuthRepository + { + ServiceStack.Auth.IUserAuth CreateUserAuth(ServiceStack.Auth.IUserAuth newUser, string password); + void DeleteUserAuth(string userAuthId); + ServiceStack.Auth.IUserAuth GetUserAuth(string userAuthId); + ServiceStack.Auth.IUserAuth UpdateUserAuth(ServiceStack.Auth.IUserAuth existingUser, ServiceStack.Auth.IUserAuth newUser, string password); + ServiceStack.Auth.IUserAuth UpdateUserAuth(ServiceStack.Auth.IUserAuth existingUser, ServiceStack.Auth.IUserAuth newUser); + } + + // Generated from `ServiceStack.Auth.IUserAuthRepositoryAsync` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IUserAuthRepositoryAsync : ServiceStack.Auth.IAuthRepositoryAsync + { + System.Threading.Tasks.Task CreateUserAuthAsync(ServiceStack.Auth.IUserAuth newUser, string password, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task DeleteUserAuthAsync(string userAuthId, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task GetUserAuthAsync(string userAuthId, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task UpdateUserAuthAsync(ServiceStack.Auth.IUserAuth existingUser, ServiceStack.Auth.IUserAuth newUser, string password, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task UpdateUserAuthAsync(ServiceStack.Auth.IUserAuth existingUser, ServiceStack.Auth.IUserAuth newUser, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + } + + // Generated from `ServiceStack.Auth.IUserSessionSource` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IUserSessionSource + { + ServiceStack.Auth.IAuthSession GetUserSession(string userAuthId); + } + + // Generated from `ServiceStack.Auth.IUserSessionSourceAsync` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IUserSessionSourceAsync + { + System.Threading.Tasks.Task GetUserSessionAsync(string userAuthId, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + } + + // Generated from `ServiceStack.Auth.IWebSudoAuthSession` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IWebSudoAuthSession : ServiceStack.Auth.IAuthSession + { + System.DateTime AuthenticatedAt { get; set; } + int AuthenticatedCount { get; set; } + System.DateTime? AuthenticatedWebSudoUntil { get; set; } + } + + // Generated from `ServiceStack.Auth.InMemoryAuthRepository` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class InMemoryAuthRepository : ServiceStack.Auth.InMemoryAuthRepository + { + public InMemoryAuthRepository() => throw null; + } + + // Generated from `ServiceStack.Auth.InMemoryAuthRepository<,>` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class InMemoryAuthRepository : ServiceStack.Auth.RedisAuthRepository, ServiceStack.Auth.IUserAuthRepository, ServiceStack.Auth.IMemoryAuthRepository, ServiceStack.Auth.IManageApiKeys, ServiceStack.Auth.ICustomUserAuth, ServiceStack.Auth.IClearable, ServiceStack.Auth.IAuthRepository where TUserAuth : class, ServiceStack.Auth.IUserAuth where TUserAuthDetails : class, ServiceStack.Auth.IUserAuthDetails + { + public System.Collections.Generic.Dictionary> Hashes { get => throw null; set => throw null; } + public InMemoryAuthRepository() : base(default(ServiceStack.Auth.IRedisClientManagerFacade)) => throw null; + public static ServiceStack.Auth.InMemoryAuthRepository Instance; + public System.Collections.Generic.Dictionary> Sets { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.Auth.JwtAuthProvider` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class JwtAuthProvider : ServiceStack.Auth.JwtAuthProviderReader, ServiceStack.Auth.IAuthResponseFilter + { + public static string CreateEncryptedJweToken(ServiceStack.Text.JsonObject jwtPayload, System.Security.Cryptography.RSAParameters publicKey) => throw null; + public static string CreateJwt(ServiceStack.Text.JsonObject jwtHeader, ServiceStack.Text.JsonObject jwtPayload, System.Func signData) => throw null; + public string CreateJwtBearerToken(ServiceStack.Web.IRequest req, ServiceStack.Auth.IAuthSession session, System.Collections.Generic.IEnumerable roles = default(System.Collections.Generic.IEnumerable), System.Collections.Generic.IEnumerable perms = default(System.Collections.Generic.IEnumerable)) => throw null; + public string CreateJwtBearerToken(ServiceStack.Auth.IAuthSession session, System.Collections.Generic.IEnumerable roles = default(System.Collections.Generic.IEnumerable), System.Collections.Generic.IEnumerable perms = default(System.Collections.Generic.IEnumerable)) => throw null; + public static ServiceStack.Text.JsonObject CreateJwtHeader(string algorithm, string keyId = default(string)) => throw null; + public static ServiceStack.Text.JsonObject CreateJwtPayload(ServiceStack.Auth.IAuthSession session, string issuer, System.TimeSpan expireIn, System.Collections.Generic.IEnumerable audiences = default(System.Collections.Generic.IEnumerable), System.Collections.Generic.IEnumerable roles = default(System.Collections.Generic.IEnumerable), System.Collections.Generic.IEnumerable permissions = default(System.Collections.Generic.IEnumerable)) => throw null; + public string CreateJwtRefreshToken(string userId, System.TimeSpan expireRefreshTokenIn) => throw null; + public string CreateJwtRefreshToken(ServiceStack.Web.IRequest req, string userId, System.TimeSpan expireRefreshTokenIn) => throw null; + public static string Dump(string jwt) => throw null; + protected virtual bool EnableRefreshToken() => throw null; + public void Execute(ServiceStack.Auth.AuthFilterContext authContext) => throw null; + public System.Func GetHashAlgorithm(ServiceStack.Web.IRequest req) => throw null; + public System.Func GetHashAlgorithm() => throw null; + public override void Init(ServiceStack.Configuration.IAppSettings appSettings = default(ServiceStack.Configuration.IAppSettings)) => throw null; + public JwtAuthProvider(ServiceStack.Configuration.IAppSettings appSettings) => throw null; + public JwtAuthProvider() => throw null; + public static void PrintDump(string jwt) => throw null; + public System.Threading.Tasks.Task ResultFilterAsync(ServiceStack.Auth.AuthResultContext authContext, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public bool SetBearerTokenOnAuthenticateResponse { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.Auth.JwtAuthProviderReader` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class JwtAuthProviderReader : ServiceStack.Auth.AuthProvider, ServiceStack.IAuthPlugin, ServiceStack.Auth.IAuthWithRequest + { + public bool AllowInFormData { get => throw null; set => throw null; } + public bool AllowInQueryString { get => throw null; set => throw null; } + public void AssertJwtPayloadIsValid(ServiceStack.Text.JsonObject jwtPayload) => throw null; + public void AssertRefreshJwtPayloadIsValid(ServiceStack.Text.JsonObject jwtPayload) => throw null; + public string Audience { get => throw null; set => throw null; } + public System.Collections.Generic.List Audiences { get => throw null; set => throw null; } + public System.Byte[] AuthKey { get => throw null; set => throw null; } + public string AuthKeyBase64 { set => throw null; } + public override System.Threading.Tasks.Task AuthenticateAsync(ServiceStack.IServiceBase authService, ServiceStack.Auth.IAuthSession session, ServiceStack.Authenticate request, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public object AuthenticateResponseDecorator(ServiceStack.Auth.AuthFilterContext authCtx) => throw null; + public virtual ServiceStack.Auth.IAuthSession ConvertJwtToSession(ServiceStack.Web.IRequest req, string jwt) => throw null; + public System.Action CreateHeaderFilter { get => throw null; set => throw null; } + public System.Action CreatePayloadFilter { get => throw null; set => throw null; } + public static ServiceStack.Auth.IAuthSession CreateSessionFromJwt(ServiceStack.Web.IRequest req) => throw null; + public virtual ServiceStack.Auth.IAuthSession CreateSessionFromPayload(ServiceStack.Web.IRequest req, ServiceStack.Text.JsonObject jwtPayload) => throw null; + public static System.Int64 DefaultResolveUnixTime(System.DateTime dateTime) => throw null; + public bool EncryptPayload { get => throw null; set => throw null; } + public System.TimeSpan ExpireRefreshTokensIn { get => throw null; set => throw null; } + public System.TimeSpan ExpireTokensIn { get => throw null; set => throw null; } + public int ExpireTokensInDays { set => throw null; } + public static System.Collections.Generic.Dictionary ExtractPayload(string jwt) => throw null; + public System.Collections.Generic.List FallbackAuthKeys { get => throw null; set => throw null; } + public System.Collections.Generic.List FallbackPrivateKeys { get => throw null; set => throw null; } + public System.Collections.Generic.List FallbackPublicKeys { get => throw null; set => throw null; } + public System.Byte[] GetAuthKey(ServiceStack.Web.IRequest req = default(ServiceStack.Web.IRequest)) => throw null; + public System.Collections.Generic.List GetFallbackAuthKeys(ServiceStack.Web.IRequest req = default(ServiceStack.Web.IRequest)) => throw null; + public System.Collections.Generic.List GetFallbackPrivateKeys(ServiceStack.Web.IRequest req = default(ServiceStack.Web.IRequest)) => throw null; + public System.Collections.Generic.List GetFallbackPublicKeys(ServiceStack.Web.IRequest req = default(ServiceStack.Web.IRequest)) => throw null; + public virtual string GetInvalidJwtPayloadError(ServiceStack.Text.JsonObject jwtPayload) => throw null; + public virtual string GetInvalidRefreshJwtPayloadError(ServiceStack.Text.JsonObject jwtPayload) => throw null; + public virtual string GetKeyId(ServiceStack.Web.IRequest req) => throw null; + public System.Security.Cryptography.RSAParameters? GetPrivateKey(ServiceStack.Web.IRequest req = default(ServiceStack.Web.IRequest)) => throw null; + public System.Security.Cryptography.RSAParameters? GetPublicKey(ServiceStack.Web.IRequest req = default(ServiceStack.Web.IRequest)) => throw null; + public static System.Int64? GetUnixTime(System.Collections.Generic.Dictionary jwtPayload, string key) => throw null; + public virtual ServiceStack.Text.JsonObject GetValidJwtPayload(ServiceStack.Web.IRequest req, string jwt) => throw null; + public virtual ServiceStack.Text.JsonObject GetValidJwtPayload(ServiceStack.Web.IRequest req) => throw null; + public ServiceStack.Text.JsonObject GetValidJwtPayload(string jwt) => throw null; + public virtual ServiceStack.Text.JsonObject GetVerifiedJwePayload(ServiceStack.Web.IRequest req, string[] parts) => throw null; + public virtual ServiceStack.Text.JsonObject GetVerifiedJwtPayload(ServiceStack.Web.IRequest req, string[] parts) => throw null; + public virtual bool HasBeenInvalidated(ServiceStack.Text.JsonObject jwtPayload, System.Int64 unixTime) => throw null; + public virtual bool HasExpired(ServiceStack.Text.JsonObject jwtPayload) => throw null; + public virtual bool HasInvalidAudience(ServiceStack.Text.JsonObject jwtPayload, out string audience) => throw null; + public virtual bool HasInvalidNotBefore(ServiceStack.Text.JsonObject jwtPayload) => throw null; + public virtual bool HasInvalidatedId(ServiceStack.Text.JsonObject jwtPayload) => throw null; + public string HashAlgorithm { get => throw null; set => throw null; } + public static System.Collections.Generic.Dictionary> HmacAlgorithms; + public static System.Collections.Generic.HashSet IgnoreForOperationTypes; + public bool IncludeJwtInConvertSessionToTokenResponse { get => throw null; set => throw null; } + public virtual void Init(ServiceStack.Configuration.IAppSettings appSettings = default(ServiceStack.Configuration.IAppSettings)) => throw null; + public System.Collections.Generic.HashSet InvalidateJwtIds { get => throw null; set => throw null; } + public System.DateTime? InvalidateRefreshTokensIssuedBefore { get => throw null; set => throw null; } + public System.DateTime? InvalidateTokensIssuedBefore { get => throw null; set => throw null; } + public override bool IsAuthorized(ServiceStack.Auth.IAuthSession session, ServiceStack.Auth.IAuthTokens tokens, ServiceStack.Authenticate request = default(ServiceStack.Authenticate)) => throw null; + public bool IsJwtValid(string jwt) => throw null; + public bool IsJwtValid(ServiceStack.Web.IRequest req, string jwt) => throw null; + public bool IsJwtValid(ServiceStack.Web.IRequest req) => throw null; + public string Issuer { get => throw null; set => throw null; } + public JwtAuthProviderReader(ServiceStack.Configuration.IAppSettings appSettings) => throw null; + public JwtAuthProviderReader() => throw null; + public string KeyId { get => throw null; set => throw null; } + public string LastJwtId() => throw null; + public string LastRefreshJwtId() => throw null; + public const string Name = default; + public string NextJwtId() => throw null; + public string NextRefreshJwtId() => throw null; + public System.Action PopulateSessionFilter { get => throw null; set => throw null; } + public System.Threading.Tasks.Task PreAuthenticateAsync(ServiceStack.Web.IRequest req, ServiceStack.Web.IResponse res) => throw null; + public System.Func, string> PreValidateJwtPayloadFilter { get => throw null; set => throw null; } + public System.Security.Cryptography.RSAParameters? PrivateKey { get => throw null; set => throw null; } + public string PrivateKeyXml { get => throw null; set => throw null; } + public System.Security.Cryptography.RSAParameters? PublicKey { get => throw null; set => throw null; } + public string PublicKeyXml { get => throw null; set => throw null; } + public const string Realm = default; + public override void Register(ServiceStack.IAppHost appHost, ServiceStack.AuthFeature feature) => throw null; + public bool RemoveInvalidTokenCookie { get => throw null; set => throw null; } + public bool RequireHashAlgorithm { get => throw null; set => throw null; } + public bool RequireSecureConnection { get => throw null; set => throw null; } + public bool RequiresAudience { get => throw null; set => throw null; } + public System.Func ResolveJwtId { get => throw null; set => throw null; } + public System.Func ResolveRefreshJwtId { get => throw null; set => throw null; } + public System.Func ResolveUnixTime { get => throw null; set => throw null; } + public static System.Collections.Generic.Dictionary> RsaSignAlgorithms; + public static System.Collections.Generic.Dictionary> RsaVerifyAlgorithms; + public System.Collections.Generic.Dictionary ServiceRoutes { get => throw null; set => throw null; } + public override string Type { get => throw null; } + public bool? UseRefreshTokenCookie { get => throw null; set => throw null; } + public static ServiceStack.RsaKeyLengths UseRsaKeyLength; + public bool UseTokenCookie { get => throw null; set => throw null; } + public System.Func ValidateRefreshToken { get => throw null; set => throw null; } + public System.Func ValidateToken { get => throw null; set => throw null; } + public virtual bool VerifyJwePayload(ServiceStack.Web.IRequest req, string[] parts, out System.Byte[] iv, out System.Byte[] cipherText, out System.Byte[] cryptKey) => throw null; + public virtual bool VerifyPayload(ServiceStack.Web.IRequest req, string algorithm, System.Byte[] bytesToSign, System.Byte[] sentSignatureBytes) => throw null; + } + + // Generated from `ServiceStack.Auth.LinkedInAuthProvider` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class LinkedInAuthProvider : ServiceStack.Auth.OAuth2Provider + { + protected override System.Threading.Tasks.Task> CreateAuthInfoAsync(string accessToken, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public const string DefaultAccessTokenUrl = default; + public const string DefaultAuthorizeUrl = default; + public const string DefaultUserProfileUrl = default; + public LinkedInAuthProvider(ServiceStack.Configuration.IAppSettings appSettings) : base(default(ServiceStack.Configuration.IAppSettings), default(string), default(string)) => throw null; + public const string Name = default; + public const string Realm = default; + } + + // Generated from `ServiceStack.Auth.MicrosoftGraphAuthProvider` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class MicrosoftGraphAuthProvider : ServiceStack.Auth.OAuth2Provider + { + public string AppId { get => throw null; set => throw null; } + public string AppSecret { get => throw null; set => throw null; } + protected override System.Threading.Tasks.Task> CreateAuthInfoAsync(string accessToken, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public const string DefaultUserProfileUrl = default; + protected override System.Threading.Tasks.Task GetAccessTokenJsonAsync(string code, ServiceStack.Auth.AuthContext ctx, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public override void LoadUserOAuthProvider(ServiceStack.Auth.IAuthSession authSession, ServiceStack.Auth.IAuthTokens tokens) => throw null; + public MicrosoftGraphAuthProvider(ServiceStack.Configuration.IAppSettings appSettings) : base(default(ServiceStack.Configuration.IAppSettings), default(string), default(string)) => throw null; + public const string Name = default; + public static string PhotoUrl { get => throw null; set => throw null; } + public const string Realm = default; + public bool SavePhoto { get => throw null; set => throw null; } + public string SavePhotoSize { get => throw null; set => throw null; } + public string Tenant { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.Auth.MultiAuthEvents` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class MultiAuthEvents : ServiceStack.Auth.IAuthEvents + { + public System.Collections.Generic.List ChildEvents { get => throw null; set => throw null; } + public System.Collections.Generic.List ChildEventsAsync { get => throw null; set => throw null; } + public MultiAuthEvents(System.Collections.Generic.IEnumerable authEvents = default(System.Collections.Generic.IEnumerable)) => throw null; + public void OnAuthenticated(ServiceStack.Web.IRequest httpReq, ServiceStack.Auth.IAuthSession session, ServiceStack.IServiceBase authService, ServiceStack.Auth.IAuthTokens tokens, System.Collections.Generic.Dictionary authInfo) => throw null; + public System.Threading.Tasks.Task OnAuthenticatedAsync(ServiceStack.Web.IRequest httpReq, ServiceStack.Auth.IAuthSession session, ServiceStack.IServiceBase authService, ServiceStack.Auth.IAuthTokens tokens, System.Collections.Generic.Dictionary authInfo, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public void OnCreated(ServiceStack.Web.IRequest httpReq, ServiceStack.Auth.IAuthSession session) => throw null; + public void OnLogout(ServiceStack.Web.IRequest httpReq, ServiceStack.Auth.IAuthSession session, ServiceStack.IServiceBase authService) => throw null; + public System.Threading.Tasks.Task OnLogoutAsync(ServiceStack.Web.IRequest httpReq, ServiceStack.Auth.IAuthSession session, ServiceStack.IServiceBase authService, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public void OnRegistered(ServiceStack.Web.IRequest httpReq, ServiceStack.Auth.IAuthSession session, ServiceStack.IServiceBase registrationService) => throw null; + public System.Threading.Tasks.Task OnRegisteredAsync(ServiceStack.Web.IRequest httpReq, ServiceStack.Auth.IAuthSession session, ServiceStack.IServiceBase registrationService, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public ServiceStack.Web.IHttpResult Validate(ServiceStack.IServiceBase authService, ServiceStack.Auth.IAuthSession session, ServiceStack.Auth.IAuthTokens tokens, System.Collections.Generic.Dictionary authInfo) => throw null; + public System.Threading.Tasks.Task ValidateAsync(ServiceStack.IServiceBase authService, ServiceStack.Auth.IAuthSession session, ServiceStack.Auth.IAuthTokens tokens, System.Collections.Generic.Dictionary authInfo, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + } + + // Generated from `ServiceStack.Auth.NetCoreIdentityAuthProvider` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class NetCoreIdentityAuthProvider : ServiceStack.Auth.AuthProvider, ServiceStack.IAuthPlugin, ServiceStack.Auth.IAuthWithRequest + { + public System.Collections.Generic.List AdminRoles { get => throw null; set => throw null; } + public override System.Threading.Tasks.Task AuthenticateAsync(ServiceStack.IServiceBase authService, ServiceStack.Auth.IAuthSession session, ServiceStack.Authenticate request, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public string AuthenticationType { get => throw null; set => throw null; } + public bool AutoSignInSessions { get => throw null; set => throw null; } + public System.Func AutoSignInSessionsMatching { get => throw null; set => throw null; } + public System.Func, ServiceStack.Auth.IAuthSession, ServiceStack.Web.IRequest, System.Security.Claims.ClaimsPrincipal> CreateClaimsPrincipal { get => throw null; set => throw null; } + public bool DefaultAutoSignInSessionsMatching(ServiceStack.Web.IRequest req) => throw null; + public string IdClaimType { get => throw null; set => throw null; } + public System.Collections.Generic.List IdClaimTypes { get => throw null; set => throw null; } + public System.Collections.Generic.HashSet IgnoreAutoSignInForExtensions { get => throw null; set => throw null; } + public override bool IsAuthorized(ServiceStack.Auth.IAuthSession session, ServiceStack.Auth.IAuthTokens tokens, ServiceStack.Authenticate request = default(ServiceStack.Authenticate)) => throw null; + public string Issuer { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary MapClaimsToSession { get => throw null; set => throw null; } + public const string Name = default; + public NetCoreIdentityAuthProvider(ServiceStack.Configuration.IAppSettings appSettings) => throw null; + public bool OverrideHtmlRedirect { get => throw null; set => throw null; } + public string PermissionClaimType { get => throw null; set => throw null; } + public System.Action PopulateSessionFilter { get => throw null; set => throw null; } + public virtual System.Threading.Tasks.Task PreAuthenticateAsync(ServiceStack.Web.IRequest req, ServiceStack.Web.IResponse res) => throw null; + public const string Realm = default; + public override void Register(ServiceStack.IAppHost appHost, ServiceStack.AuthFeature authFeature) => throw null; + public System.Collections.Generic.List RestrictToClientIds { get => throw null; set => throw null; } + public string RoleClaimType { get => throw null; set => throw null; } + public System.Threading.Tasks.Task SignInAuthenticatedSessions(ServiceStack.Host.NetCore.NetCoreRequest req) => throw null; + public override string Type { get => throw null; } + } + + // Generated from `ServiceStack.Auth.OAuth2Provider` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public abstract class OAuth2Provider : ServiceStack.Auth.OAuthProvider + { + protected virtual void AssertAccessTokenUrl() => throw null; + protected virtual void AssertAuthorizeUrl() => throw null; + protected override void AssertValidState() => throw null; + public override System.Threading.Tasks.Task AuthenticateAsync(ServiceStack.IServiceBase authService, ServiceStack.Auth.IAuthSession session, ServiceStack.Authenticate request, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + protected virtual System.Threading.Tasks.Task AuthenticateWithAccessTokenAsync(ServiceStack.IServiceBase authService, ServiceStack.Auth.IAuthSession session, ServiceStack.Auth.IAuthTokens tokens, string accessToken, System.Collections.Generic.Dictionary authInfo = default(System.Collections.Generic.Dictionary), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + protected abstract System.Threading.Tasks.Task> CreateAuthInfoAsync(string accessToken, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + protected virtual System.Threading.Tasks.Task GetAccessTokenJsonAsync(string code, ServiceStack.Auth.AuthContext ctx, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + protected virtual string GetUserAuthName(ServiceStack.Auth.IAuthTokens tokens, System.Collections.Generic.Dictionary authInfo) => throw null; + protected override System.Threading.Tasks.Task LoadUserAuthInfoAsync(ServiceStack.AuthUserSession userSession, ServiceStack.Auth.IAuthTokens tokens, System.Collections.Generic.Dictionary authInfo, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public override void LoadUserOAuthProvider(ServiceStack.Auth.IAuthSession authSession, ServiceStack.Auth.IAuthTokens tokens) => throw null; + public OAuth2Provider(ServiceStack.Configuration.IAppSettings appSettings, string authRealm, string oAuthProvider, string consumerKeyName, string consumerSecretName) => throw null; + public OAuth2Provider(ServiceStack.Configuration.IAppSettings appSettings, string authRealm, string oAuthProvider) => throw null; + public System.Func ResolveUnknownDisplayName { get => throw null; set => throw null; } + public string ResponseMode { get => throw null; set => throw null; } + public string[] Scopes { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.Auth.OAuth2ProviderSync` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public abstract class OAuth2ProviderSync : ServiceStack.Auth.OAuthProviderSync + { + protected virtual void AssertAccessTokenUrl() => throw null; + protected virtual void AssertAuthorizeUrl() => throw null; + protected override void AssertValidState() => throw null; + public override object Authenticate(ServiceStack.IServiceBase authService, ServiceStack.Auth.IAuthSession session, ServiceStack.Authenticate request) => throw null; + protected virtual object AuthenticateWithAccessToken(ServiceStack.IServiceBase authService, ServiceStack.Auth.IAuthSession session, ServiceStack.Auth.IAuthTokens tokens, string accessToken, System.Collections.Generic.Dictionary authInfo = default(System.Collections.Generic.Dictionary)) => throw null; + protected abstract System.Collections.Generic.Dictionary CreateAuthInfo(string accessToken); + protected virtual string GetAccessTokenJson(string code) => throw null; + protected virtual string GetUserAuthName(ServiceStack.Auth.IAuthTokens tokens, System.Collections.Generic.Dictionary authInfo) => throw null; + protected override void LoadUserAuthInfo(ServiceStack.AuthUserSession userSession, ServiceStack.Auth.IAuthTokens tokens, System.Collections.Generic.Dictionary authInfo) => throw null; + public override void LoadUserOAuthProvider(ServiceStack.Auth.IAuthSession authSession, ServiceStack.Auth.IAuthTokens tokens) => throw null; + public OAuth2ProviderSync(ServiceStack.Configuration.IAppSettings appSettings, string authRealm, string oAuthProvider, string consumerKeyName, string consumerSecretName) => throw null; + public OAuth2ProviderSync(ServiceStack.Configuration.IAppSettings appSettings, string authRealm, string oAuthProvider) => throw null; + public string ResponseMode { get => throw null; set => throw null; } + public string[] Scopes { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.Auth.OAuthAuthorizer` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class OAuthAuthorizer + { + public string AccessToken; + public string AccessTokenSecret; + public bool AcquireAccessToken(string requestTokenSecret, string authorizationToken, string authorizationVerifier) => throw null; + public bool AcquireRequestToken() => throw null; + public System.Collections.Generic.Dictionary AuthInfo; + public string AuthorizationToken; + public string AuthorizationVerifier; + public static string AuthorizeRequest(string consumerKey, string consumerSecret, string oauthToken, string oauthTokenSecret, string method, System.Uri uri, string data) => throw null; + public static string AuthorizeRequest(ServiceStack.Auth.OAuthProvider provider, string oauthToken, string oauthTokenSecret, string method, System.Uri uri, string data) => throw null; + public static void AuthorizeTwitPic(ServiceStack.Auth.OAuthProvider provider, System.Net.HttpWebRequest wc, string oauthToken, string oauthTokenSecret) => throw null; + public OAuthAuthorizer(ServiceStack.Auth.IOAuthProvider provider) => throw null; + public static bool OrderHeadersLexically; + public string RequestToken; + public string RequestTokenSecret; + public string xAuthPassword; + public string xAuthUsername; + } + + // Generated from `ServiceStack.Auth.OAuthProvider` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public abstract class OAuthProvider : ServiceStack.Auth.AuthProvider, ServiceStack.Auth.IOAuthProvider, ServiceStack.Auth.IAuthProvider + { + public string AccessTokenUrl { get => throw null; set => throw null; } + protected virtual void AssertConsumerKey() => throw null; + protected virtual void AssertConsumerSecret() => throw null; + protected virtual void AssertValidState() => throw null; + public ServiceStack.Auth.IAuthHttpGateway AuthHttpGateway { get => throw null; set => throw null; } + public abstract override System.Threading.Tasks.Task AuthenticateAsync(ServiceStack.IServiceBase authService, ServiceStack.Auth.IAuthSession session, ServiceStack.Authenticate request, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)); + public string AuthorizeUrl { get => throw null; set => throw null; } + public string ConsumerKey { get => throw null; set => throw null; } + protected string ConsumerKeyName; + public string ConsumerSecret { get => throw null; set => throw null; } + protected string ConsumerSecretName; + protected ServiceStack.Auth.IAuthTokens Init(ServiceStack.IServiceBase authService, ref ServiceStack.Auth.IAuthSession session, ServiceStack.Authenticate request) => throw null; + public override bool IsAuthorized(ServiceStack.Auth.IAuthSession session, ServiceStack.Auth.IAuthTokens tokens, ServiceStack.Authenticate request = default(ServiceStack.Authenticate)) => throw null; + public string IssuerSigningKeysUrl { get => throw null; set => throw null; } + public virtual void LoadUserOAuthProvider(ServiceStack.Auth.IAuthSession userSession, ServiceStack.Auth.IAuthTokens tokens) => throw null; + public override System.Collections.Generic.Dictionary Meta { get => throw null; } + public OAuthProvider(ServiceStack.Configuration.IAppSettings appSettings, string authRealm, string oAuthProvider, string consumerKeyName = default(string), string consumerSecretName = default(string)) => throw null; + public OAuthProvider() => throw null; + public ServiceStack.Auth.OAuthAuthorizer OAuthUtils { get => throw null; set => throw null; } + public string RequestTokenUrl { get => throw null; set => throw null; } + public override string Type { get => throw null; } + public string UserProfileUrl { get => throw null; set => throw null; } + public System.Func> VerifyAccessTokenAsync { get => throw null; set => throw null; } + public string VerifyTokenUrl { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.Auth.OAuthProviderSync` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public abstract class OAuthProviderSync : ServiceStack.Auth.AuthProviderSync, ServiceStack.Auth.IOAuthProvider, ServiceStack.Auth.IAuthProvider + { + public string AccessTokenUrl { get => throw null; set => throw null; } + protected virtual void AssertConsumerKey() => throw null; + protected virtual void AssertConsumerSecret() => throw null; + protected virtual void AssertValidState() => throw null; + public ServiceStack.Auth.IAuthHttpGateway AuthHttpGateway { get => throw null; set => throw null; } + public abstract override object Authenticate(ServiceStack.IServiceBase authService, ServiceStack.Auth.IAuthSession session, ServiceStack.Authenticate request); + public string AuthorizeUrl { get => throw null; set => throw null; } + public string ConsumerKey { get => throw null; set => throw null; } + protected string ConsumerKeyName; + public string ConsumerSecret { get => throw null; set => throw null; } + protected string ConsumerSecretName; + protected ServiceStack.Auth.IAuthTokens Init(ServiceStack.IServiceBase authService, ref ServiceStack.Auth.IAuthSession session, ServiceStack.Authenticate request) => throw null; + public override bool IsAuthorized(ServiceStack.Auth.IAuthSession session, ServiceStack.Auth.IAuthTokens tokens, ServiceStack.Authenticate request = default(ServiceStack.Authenticate)) => throw null; + public string IssuerSigningKeysUrl { get => throw null; set => throw null; } + public virtual void LoadUserOAuthProvider(ServiceStack.Auth.IAuthSession userSession, ServiceStack.Auth.IAuthTokens tokens) => throw null; + public override System.Collections.Generic.Dictionary Meta { get => throw null; } + public OAuthProviderSync(ServiceStack.Configuration.IAppSettings appSettings, string authRealm, string oAuthProvider, string consumerKeyName, string consumerSecretName) => throw null; + public OAuthProviderSync(ServiceStack.Configuration.IAppSettings appSettings, string authRealm, string oAuthProvider) => throw null; + public OAuthProviderSync() => throw null; + public ServiceStack.Auth.OAuthAuthorizer OAuthUtils { get => throw null; set => throw null; } + public string RequestTokenUrl { get => throw null; set => throw null; } + public override string Type { get => throw null; } + public string UserProfileUrl { get => throw null; set => throw null; } + public System.Func VerifyAccessToken { get => throw null; set => throw null; } + public string VerifyTokenUrl { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.Auth.OAuthUtils` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class OAuthUtils + { + public static string PercentEncode(string s) => throw null; + } + + // Generated from `ServiceStack.Auth.OdnoklassnikiAuthProvider` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class OdnoklassnikiAuthProvider : ServiceStack.Auth.OAuthProvider + { + public string ApplicationId { get => throw null; set => throw null; } + public override System.Threading.Tasks.Task AuthenticateAsync(ServiceStack.IServiceBase authService, ServiceStack.Auth.IAuthSession session, ServiceStack.Authenticate request, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + protected override System.Threading.Tasks.Task LoadUserAuthInfoAsync(ServiceStack.AuthUserSession userSession, ServiceStack.Auth.IAuthTokens tokens, System.Collections.Generic.Dictionary authInfo, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public override void LoadUserOAuthProvider(ServiceStack.Auth.IAuthSession authSession, ServiceStack.Auth.IAuthTokens tokens) => throw null; + public const string Name = default; + public OdnoklassnikiAuthProvider(ServiceStack.Configuration.IAppSettings appSettings) => throw null; + public static string PreAuthUrl; + public string PublicKey { get => throw null; set => throw null; } + public static string Realm; + protected virtual void RequestFilter(System.Net.HttpWebRequest request) => throw null; + public string SecretKey { get => throw null; set => throw null; } + public static string TokenUrl; + } + + // Generated from `ServiceStack.Auth.PasswordHasher` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class PasswordHasher : ServiceStack.Auth.IPasswordHasher + { + public const int DefaultIterationCount = default; + public virtual string HashPassword(string password) => throw null; + public int IterationCount { get => throw null; } + public static ServiceStack.Logging.ILog Log; + public PasswordHasher(int iterationCount) => throw null; + public PasswordHasher() => throw null; + public bool VerifyPassword(string hashedPassword, string providedPassword, out bool needsRehash) => throw null; + public System.Byte Version { get => throw null; } + } + + // Generated from `ServiceStack.Auth.Pbkdf2DeriveKeyDelegate` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public delegate System.Byte[] Pbkdf2DeriveKeyDelegate(string password, System.Byte[] salt, Microsoft.AspNetCore.Cryptography.KeyDerivation.KeyDerivationPrf prf, int iterationCount, int numBytesRequested); + + // Generated from `ServiceStack.Auth.Pbkdf2Provider` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class Pbkdf2Provider + { + public static ServiceStack.Auth.Pbkdf2DeriveKeyDelegate DeriveKey { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.Auth.RedisAuthRepository` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class RedisAuthRepository : ServiceStack.Auth.RedisAuthRepository, ServiceStack.Auth.IUserAuthRepository, ServiceStack.Auth.IAuthRepository + { + public RedisAuthRepository(ServiceStack.Redis.IRedisClientsManager factory) : base(default(ServiceStack.Auth.IRedisClientManagerFacade)) => throw null; + public RedisAuthRepository(ServiceStack.Auth.IRedisClientManagerFacade factory) : base(default(ServiceStack.Auth.IRedisClientManagerFacade)) => throw null; + } + + // Generated from `ServiceStack.Auth.RedisAuthRepository<,>` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class RedisAuthRepository : ServiceStack.Auth.IUserAuthRepositoryAsync, ServiceStack.Auth.IUserAuthRepository, ServiceStack.Auth.IQueryUserAuthAsync, ServiceStack.Auth.IQueryUserAuth, ServiceStack.Auth.IManageApiKeysAsync, ServiceStack.Auth.IManageApiKeys, ServiceStack.Auth.ICustomUserAuth, ServiceStack.Auth.IClearableAsync, ServiceStack.Auth.IClearable, ServiceStack.Auth.IAuthRepositoryAsync, ServiceStack.Auth.IAuthRepository where TUserAuth : class, ServiceStack.Auth.IUserAuth where TUserAuthDetails : class, ServiceStack.Auth.IUserAuthDetails + { + public virtual bool ApiKeyExists(string apiKey) => throw null; + public virtual System.Threading.Tasks.Task ApiKeyExistsAsync(string apiKey, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public virtual void Clear() => throw null; + public virtual System.Threading.Tasks.Task ClearAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public virtual ServiceStack.Auth.IUserAuthDetails CreateOrMergeAuthSession(ServiceStack.Auth.IAuthSession authSession, ServiceStack.Auth.IAuthTokens tokens) => throw null; + public virtual System.Threading.Tasks.Task CreateOrMergeAuthSessionAsync(ServiceStack.Auth.IAuthSession authSession, ServiceStack.Auth.IAuthTokens tokens, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public virtual ServiceStack.Auth.IUserAuth CreateUserAuth(ServiceStack.Auth.IUserAuth newUser, string password) => throw null; + public ServiceStack.Auth.IUserAuth CreateUserAuth() => throw null; + public virtual System.Threading.Tasks.Task CreateUserAuthAsync(ServiceStack.Auth.IUserAuth newUser, string password, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public ServiceStack.Auth.IUserAuthDetails CreateUserAuthDetails() => throw null; + public virtual void DeleteUserAuth(string userAuthId) => throw null; + public virtual System.Threading.Tasks.Task DeleteUserAuthAsync(string userAuthId, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public virtual ServiceStack.Auth.ApiKey GetApiKey(string apiKey) => throw null; + public virtual System.Threading.Tasks.Task GetApiKeyAsync(string apiKey, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public virtual System.Collections.Generic.List GetUserApiKeys(string userId) => throw null; + public virtual System.Threading.Tasks.Task> GetUserApiKeysAsync(string userId, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public virtual ServiceStack.Auth.IUserAuth GetUserAuth(string userAuthId) => throw null; + public virtual ServiceStack.Auth.IUserAuth GetUserAuth(ServiceStack.Auth.IAuthSession authSession, ServiceStack.Auth.IAuthTokens tokens) => throw null; + public virtual System.Threading.Tasks.Task GetUserAuthAsync(string userAuthId, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public virtual System.Threading.Tasks.Task GetUserAuthAsync(ServiceStack.Auth.IAuthSession authSession, ServiceStack.Auth.IAuthTokens tokens, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public virtual ServiceStack.Auth.IUserAuth GetUserAuthByUserName(string userNameOrEmail) => throw null; + public virtual System.Threading.Tasks.Task GetUserAuthByUserNameAsync(string userNameOrEmail, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public virtual System.Collections.Generic.List GetUserAuthDetails(string userAuthId) => throw null; + public virtual System.Threading.Tasks.Task> GetUserAuthDetailsAsync(string userAuthId, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Collections.Generic.List GetUserAuths(string orderBy = default(string), int? skip = default(int?), int? take = default(int?)) => throw null; + public System.Threading.Tasks.Task> GetUserAuthsAsync(string orderBy = default(string), int? skip = default(int?), int? take = default(int?), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public virtual void InitApiKeySchema() => throw null; + public virtual System.Threading.Tasks.Task InitApiKeySchemaAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public virtual void LoadUserAuth(ServiceStack.Auth.IAuthSession session, ServiceStack.Auth.IAuthTokens tokens) => throw null; + public virtual System.Threading.Tasks.Task LoadUserAuthAsync(ServiceStack.Auth.IAuthSession session, ServiceStack.Auth.IAuthTokens tokens, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public string NamespacePrefix { get => throw null; set => throw null; } + public virtual System.Collections.Generic.List QueryUserAuths(System.Collections.Generic.List results, string query = default(string), string orderBy = default(string), int? skip = default(int?), int? take = default(int?)) => throw null; + public RedisAuthRepository(ServiceStack.Redis.IRedisClientsManager factory) => throw null; + public RedisAuthRepository(ServiceStack.Auth.IRedisClientManagerFacade factory) => throw null; + public void SaveUserAuth(ServiceStack.Auth.IUserAuth userAuth) => throw null; + public virtual void SaveUserAuth(ServiceStack.Auth.IAuthSession authSession) => throw null; + public virtual System.Threading.Tasks.Task SaveUserAuthAsync(ServiceStack.Auth.IAuthSession authSession, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task SaveUserAuthAsync(ServiceStack.Auth.IUserAuth userAuth, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Collections.Generic.List SearchUserAuths(string query, string orderBy = default(string), int? skip = default(int?), int? take = default(int?)) => throw null; + public System.Threading.Tasks.Task> SearchUserAuthsAsync(string query, string orderBy = default(string), int? skip = default(int?), int? take = default(int?), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public virtual void StoreAll(System.Collections.Generic.IEnumerable apiKeys) => throw null; + public virtual System.Threading.Tasks.Task StoreAllAsync(System.Collections.Generic.IEnumerable apiKeys, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public virtual bool TryAuthenticate(string userName, string password, out ServiceStack.Auth.IUserAuth userAuth) => throw null; + public bool TryAuthenticate(System.Collections.Generic.Dictionary digestHeaders, string privateKey, int nonceTimeOut, string sequence, out ServiceStack.Auth.IUserAuth userAuth) => throw null; + public virtual System.Threading.Tasks.Task TryAuthenticateAsync(string userName, string password, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task TryAuthenticateAsync(System.Collections.Generic.Dictionary digestHeaders, string privateKey, int nonceTimeOut, string sequence, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public virtual ServiceStack.Auth.IUserAuth UpdateUserAuth(ServiceStack.Auth.IUserAuth existingUser, ServiceStack.Auth.IUserAuth newUser, string password) => throw null; + public virtual ServiceStack.Auth.IUserAuth UpdateUserAuth(ServiceStack.Auth.IUserAuth existingUser, ServiceStack.Auth.IUserAuth newUser) => throw null; + public virtual System.Threading.Tasks.Task UpdateUserAuthAsync(ServiceStack.Auth.IUserAuth existingUser, ServiceStack.Auth.IUserAuth newUser, string password, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public virtual System.Threading.Tasks.Task UpdateUserAuthAsync(ServiceStack.Auth.IUserAuth existingUser, ServiceStack.Auth.IUserAuth newUser, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + } + + // Generated from `ServiceStack.Auth.RedisClientManagerFacade` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class RedisClientManagerFacade : ServiceStack.Auth.IRedisClientManagerFacade, ServiceStack.Auth.IClearableAsync, ServiceStack.Auth.IClearable + { + public void Clear() => throw null; + public System.Threading.Tasks.Task ClearAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public ServiceStack.Auth.IRedisClientFacade GetClient() => throw null; + public System.Threading.Tasks.Task GetClientAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public RedisClientManagerFacade(ServiceStack.Redis.IRedisClientsManager redisManager) => throw null; + } + + // Generated from `ServiceStack.Auth.RegenerateApiKeysService` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class RegenerateApiKeysService : ServiceStack.Service + { + public object Any(ServiceStack.RegenerateApiKeys request) => throw null; + public RegenerateApiKeysService() => throw null; + } + + // Generated from `ServiceStack.Auth.RegisterService` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class RegisterService : ServiceStack.Service + { + public static bool AllowUpdates { get => throw null; set => throw null; } + public ServiceStack.Auth.IAuthEvents AuthEvents { get => throw null; set => throw null; } + public object Post(ServiceStack.Register request) => throw null; + public System.Threading.Tasks.Task PostAsync(ServiceStack.Register request) => throw null; + public System.Threading.Tasks.Task PutAsync(ServiceStack.Register request) => throw null; + public RegisterService() => throw null; + public ServiceStack.FluentValidation.IValidator RegistrationValidator { get => throw null; set => throw null; } + public static ServiceStack.Auth.IUserAuth ToUserAuth(ServiceStack.Auth.ICustomUserAuth customUserAuth, ServiceStack.Register request) => throw null; + public object UpdateUserAuth(ServiceStack.Register request) => throw null; + public System.Threading.Tasks.Task UpdateUserAuthAsync(ServiceStack.Register request) => throw null; + public static ServiceStack.Auth.ValidateFn ValidateFn { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.Auth.RegistrationValidator` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class RegistrationValidator : ServiceStack.FluentValidation.AbstractValidator + { + public RegistrationValidator() => throw null; + } + + // Generated from `ServiceStack.Auth.SaltedHash` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class SaltedHash : ServiceStack.Auth.IHashProvider + { + public void GetHashAndSalt(System.Byte[] Data, out System.Byte[] Hash, out System.Byte[] Salt) => throw null; + public void GetHashAndSaltString(string Data, out string Hash, out string Salt) => throw null; + public SaltedHash(System.Security.Cryptography.HashAlgorithm HashAlgorithm, int theSaltLength) => throw null; + public SaltedHash() => throw null; + public bool VerifyHash(System.Byte[] Data, System.Byte[] Hash, System.Byte[] Salt) => throw null; + public bool VerifyHashString(string Data, string Hash, string Salt) => throw null; + } + + // Generated from `ServiceStack.Auth.SocialExtensions` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class SocialExtensions + { + public static string ToGravatarUrl(this string email, int size = default(int)) => throw null; + } + + // Generated from `ServiceStack.Auth.TwitterAuthProvider` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class TwitterAuthProvider : ServiceStack.Auth.OAuthProvider + { + public override System.Threading.Tasks.Task AuthenticateAsync(ServiceStack.IServiceBase authService, ServiceStack.Auth.IAuthSession session, ServiceStack.Authenticate request, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public const string DefaultAuthorizeUrl = default; + protected override System.Threading.Tasks.Task LoadUserAuthInfoAsync(ServiceStack.AuthUserSession userSession, ServiceStack.Auth.IAuthTokens tokens, System.Collections.Generic.Dictionary authInfo, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public override void LoadUserOAuthProvider(ServiceStack.Auth.IAuthSession authSession, ServiceStack.Auth.IAuthTokens tokens) => throw null; + public override System.Collections.Generic.Dictionary Meta { get => throw null; } + public const string Name = default; + public static string Realm; + public bool RetrieveEmail { get => throw null; set => throw null; } + public TwitterAuthProvider(ServiceStack.Configuration.IAppSettings appSettings) => throw null; + } + + // Generated from `ServiceStack.Auth.UnAssignRolesService` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class UnAssignRolesService : ServiceStack.Service + { + public System.Threading.Tasks.Task Post(ServiceStack.UnAssignRoles request) => throw null; + public UnAssignRolesService() => throw null; + } + + // Generated from `ServiceStack.Auth.UserAuth` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class UserAuth : ServiceStack.IMeta, ServiceStack.Auth.IUserAuthDetailsExtended, ServiceStack.Auth.IUserAuth + { + public virtual string Address { get => throw null; set => throw null; } + public virtual string Address2 { get => throw null; set => throw null; } + public virtual System.DateTime? BirthDate { get => throw null; set => throw null; } + public virtual string BirthDateRaw { get => throw null; set => throw null; } + public virtual string City { get => throw null; set => throw null; } + public virtual string Company { get => throw null; set => throw null; } + public virtual string Country { get => throw null; set => throw null; } + public virtual System.DateTime CreatedDate { get => throw null; set => throw null; } + public virtual string Culture { get => throw null; set => throw null; } + public virtual string DigestHa1Hash { get => throw null; set => throw null; } + public virtual string DisplayName { get => throw null; set => throw null; } + public virtual string Email { get => throw null; set => throw null; } + public virtual string FirstName { get => throw null; set => throw null; } + public virtual string FullName { get => throw null; set => throw null; } + public virtual string Gender { get => throw null; set => throw null; } + public virtual int Id { get => throw null; set => throw null; } + public virtual int InvalidLoginAttempts { get => throw null; set => throw null; } + public virtual string Language { get => throw null; set => throw null; } + public virtual System.DateTime? LastLoginAttempt { get => throw null; set => throw null; } + public virtual string LastName { get => throw null; set => throw null; } + public virtual System.DateTime? LockedDate { get => throw null; set => throw null; } + public virtual string MailAddress { get => throw null; set => throw null; } + public virtual System.Collections.Generic.Dictionary Meta { get => throw null; set => throw null; } + public virtual System.DateTime ModifiedDate { get => throw null; set => throw null; } + public virtual string Nickname { get => throw null; set => throw null; } + public virtual string PasswordHash { get => throw null; set => throw null; } + public virtual System.Collections.Generic.List Permissions { get => throw null; set => throw null; } + public virtual string PhoneNumber { get => throw null; set => throw null; } + public virtual string PostalCode { get => throw null; set => throw null; } + public virtual string PrimaryEmail { get => throw null; set => throw null; } + public virtual string RecoveryToken { get => throw null; set => throw null; } + public virtual int? RefId { get => throw null; set => throw null; } + public virtual string RefIdStr { get => throw null; set => throw null; } + public virtual System.Collections.Generic.List Roles { get => throw null; set => throw null; } + public virtual string Salt { get => throw null; set => throw null; } + public virtual string State { get => throw null; set => throw null; } + public virtual string TimeZone { get => throw null; set => throw null; } + public UserAuth() => throw null; + public virtual string UserName { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.Auth.UserAuthDetails` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class UserAuthDetails : ServiceStack.IMeta, ServiceStack.Auth.IUserAuthDetailsExtended, ServiceStack.Auth.IUserAuthDetails, ServiceStack.Auth.IAuthTokens + { + public virtual string AccessToken { get => throw null; set => throw null; } + public virtual string AccessTokenSecret { get => throw null; set => throw null; } + public virtual string Address { get => throw null; set => throw null; } + public virtual string Address2 { get => throw null; set => throw null; } + public virtual System.DateTime? BirthDate { get => throw null; set => throw null; } + public virtual string BirthDateRaw { get => throw null; set => throw null; } + public virtual string City { get => throw null; set => throw null; } + public virtual string Company { get => throw null; set => throw null; } + public virtual string Country { get => throw null; set => throw null; } + public virtual System.DateTime CreatedDate { get => throw null; set => throw null; } + public virtual string Culture { get => throw null; set => throw null; } + public virtual string DisplayName { get => throw null; set => throw null; } + public virtual string Email { get => throw null; set => throw null; } + public virtual string FirstName { get => throw null; set => throw null; } + public virtual string FullName { get => throw null; set => throw null; } + public virtual string Gender { get => throw null; set => throw null; } + public virtual int Id { get => throw null; set => throw null; } + public virtual System.Collections.Generic.Dictionary Items { get => throw null; set => throw null; } + public virtual string Language { get => throw null; set => throw null; } + public virtual string LastName { get => throw null; set => throw null; } + public virtual string MailAddress { get => throw null; set => throw null; } + public virtual System.Collections.Generic.Dictionary Meta { get => throw null; set => throw null; } + public virtual System.DateTime ModifiedDate { get => throw null; set => throw null; } + public virtual string Nickname { get => throw null; set => throw null; } + public virtual string PhoneNumber { get => throw null; set => throw null; } + public virtual string PostalCode { get => throw null; set => throw null; } + public virtual string Provider { get => throw null; set => throw null; } + public virtual int? RefId { get => throw null; set => throw null; } + public virtual string RefIdStr { get => throw null; set => throw null; } + public virtual string RefreshToken { get => throw null; set => throw null; } + public virtual System.DateTime? RefreshTokenExpiry { get => throw null; set => throw null; } + public virtual string RequestToken { get => throw null; set => throw null; } + public virtual string RequestTokenSecret { get => throw null; set => throw null; } + public virtual string State { get => throw null; set => throw null; } + public virtual string TimeZone { get => throw null; set => throw null; } + public UserAuthDetails() => throw null; + public virtual int UserAuthId { get => throw null; set => throw null; } + public virtual string UserId { get => throw null; set => throw null; } + public virtual string UserName { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.Auth.UserAuthExtensions` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class UserAuthExtensions + { + public static System.Collections.Generic.List ConvertSessionToClaims(this ServiceStack.Auth.IAuthSession session, string issuer = default(string), string roleClaimType = default(string), string permissionClaimType = default(string)) => throw null; + public static T Get(this ServiceStack.IMeta instance) => throw null; + public static void PopulateFromMap(this ServiceStack.Auth.IAuthSession session, System.Collections.Generic.Dictionary map) => throw null; + public static void PopulateMissing(this ServiceStack.Auth.IUserAuthDetails instance, ServiceStack.Auth.IAuthTokens tokens, bool overwriteReserved = default(bool)) => throw null; + public static void PopulateMissingExtended(this ServiceStack.Auth.IUserAuthDetailsExtended instance, ServiceStack.Auth.IUserAuthDetailsExtended other, bool overwriteReserved = default(bool)) => throw null; + public static void RecordInvalidLoginAttempt(this ServiceStack.Auth.IUserAuthRepository repo, ServiceStack.Auth.IUserAuth userAuth) => throw null; + public static System.Threading.Tasks.Task RecordInvalidLoginAttemptAsync(this ServiceStack.Auth.IUserAuthRepositoryAsync repo, ServiceStack.Auth.IUserAuth userAuth, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static void RecordSuccessfulLogin(this ServiceStack.Auth.IUserAuthRepository repo, ServiceStack.Auth.IUserAuth userAuth, bool rehashPassword, string password) => throw null; + public static void RecordSuccessfulLogin(this ServiceStack.Auth.IUserAuthRepository repo, ServiceStack.Auth.IUserAuth userAuth) => throw null; + public static System.Threading.Tasks.Task RecordSuccessfulLoginAsync(this ServiceStack.Auth.IUserAuthRepositoryAsync repo, ServiceStack.Auth.IUserAuth userAuth, bool rehashPassword, string password, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task RecordSuccessfulLoginAsync(this ServiceStack.Auth.IUserAuthRepositoryAsync repo, ServiceStack.Auth.IUserAuth userAuth, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static T Set(this ServiceStack.IMeta instance, T value) => throw null; + public static ServiceStack.Auth.AuthTokens ToAuthTokens(this ServiceStack.Auth.IAuthTokens from) => throw null; + public static bool TryGet(this ServiceStack.IMeta instance, out T value) => throw null; + } + + // Generated from `ServiceStack.Auth.UserAuthRepositoryAsyncManageRolesWrapper` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class UserAuthRepositoryAsyncManageRolesWrapper : ServiceStack.Auth.UserAuthRepositoryAsyncWrapper, ServiceStack.Auth.IManageRolesAsync + { + public System.Threading.Tasks.Task AssignRolesAsync(string userAuthId, System.Collections.Generic.ICollection roles = default(System.Collections.Generic.ICollection), System.Collections.Generic.ICollection permissions = default(System.Collections.Generic.ICollection), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task> GetPermissionsAsync(string userAuthId, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task, System.Collections.Generic.ICollection>> GetRolesAndPermissionsAsync(string userAuthId, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task> GetRolesAsync(string userAuthId, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task HasPermissionAsync(string userAuthId, string permission, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task HasRoleAsync(string userAuthId, string role, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task UnAssignRolesAsync(string userAuthId, System.Collections.Generic.ICollection roles = default(System.Collections.Generic.ICollection), System.Collections.Generic.ICollection permissions = default(System.Collections.Generic.ICollection), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public UserAuthRepositoryAsyncManageRolesWrapper(ServiceStack.Auth.IAuthRepository authRepo) : base(default(ServiceStack.Auth.IAuthRepository)) => throw null; + } + + // Generated from `ServiceStack.Auth.UserAuthRepositoryAsyncWrapper` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class UserAuthRepositoryAsyncWrapper : ServiceStack.IRequiresSchema, ServiceStack.Auth.IUserAuthRepositoryAsync, ServiceStack.Auth.IQueryUserAuthAsync, ServiceStack.Auth.ICustomUserAuth, ServiceStack.Auth.IAuthRepositoryAsync + { + public ServiceStack.Auth.IAuthRepository AuthRepo { get => throw null; } + public System.Threading.Tasks.Task CreateOrMergeAuthSessionAsync(ServiceStack.Auth.IAuthSession authSession, ServiceStack.Auth.IAuthTokens tokens, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public ServiceStack.Auth.IUserAuth CreateUserAuth() => throw null; + public System.Threading.Tasks.Task CreateUserAuthAsync(ServiceStack.Auth.IUserAuth newUser, string password, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public ServiceStack.Auth.IUserAuthDetails CreateUserAuthDetails() => throw null; + public System.Threading.Tasks.Task DeleteUserAuthAsync(string userAuthId, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task GetUserAuthAsync(string userAuthId, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task GetUserAuthAsync(ServiceStack.Auth.IAuthSession authSession, ServiceStack.Auth.IAuthTokens tokens, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task GetUserAuthByUserNameAsync(string userNameOrEmail, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task> GetUserAuthDetailsAsync(string userAuthId, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task> GetUserAuthsAsync(string orderBy = default(string), int? skip = default(int?), int? take = default(int?), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public void InitSchema() => throw null; + public System.Threading.Tasks.Task LoadUserAuthAsync(ServiceStack.Auth.IAuthSession session, ServiceStack.Auth.IAuthTokens tokens, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task SaveUserAuthAsync(ServiceStack.Auth.IUserAuth userAuth, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task SaveUserAuthAsync(ServiceStack.Auth.IAuthSession authSession, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task> SearchUserAuthsAsync(string query, string orderBy = default(string), int? skip = default(int?), int? take = default(int?), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task TryAuthenticateAsync(string userName, string password, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task TryAuthenticateAsync(System.Collections.Generic.Dictionary digestHeaders, string privateKey, int nonceTimeOut, string sequence, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task UpdateUserAuthAsync(ServiceStack.Auth.IUserAuth existingUser, ServiceStack.Auth.IUserAuth newUser, string password, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task UpdateUserAuthAsync(ServiceStack.Auth.IUserAuth existingUser, ServiceStack.Auth.IUserAuth newUser, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public UserAuthRepositoryAsyncWrapper(ServiceStack.Auth.IAuthRepository authRepo) => throw null; + } + + // Generated from `ServiceStack.Auth.UserAuthRepositoryAsyncWrapperExtensions` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class UserAuthRepositoryAsyncWrapperExtensions + { + public static ServiceStack.Auth.IAuthRepositoryAsync AsAsync(this ServiceStack.Auth.IAuthRepository authRepo) => throw null; + public static bool TryGetNativeQueryAuth(this ServiceStack.Auth.IAuthRepository syncRepo, ServiceStack.Auth.IAuthRepositoryAsync asyncRepo, out ServiceStack.Auth.IQueryUserAuth queryUserAuth, out ServiceStack.Auth.IQueryUserAuthAsync queryUserAuthAsync) => throw null; + public static ServiceStack.Auth.IAuthRepository UnwrapAuthRepository(this ServiceStack.Auth.IAuthRepositoryAsync asyncRepo) => throw null; + } + + // Generated from `ServiceStack.Auth.UserAuthRepositoryExtensions` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class UserAuthRepositoryExtensions + { + public static void AssignRoles(this ServiceStack.Auth.IManageRoles manageRoles, int userAuthId, System.Collections.Generic.ICollection roles = default(System.Collections.Generic.ICollection), System.Collections.Generic.ICollection permissions = default(System.Collections.Generic.ICollection)) => throw null; + public static void AssignRoles(this ServiceStack.Auth.IAuthRepository userAuthRepo, ServiceStack.Auth.IUserAuth userAuth, System.Collections.Generic.ICollection roles = default(System.Collections.Generic.ICollection), System.Collections.Generic.ICollection permissions = default(System.Collections.Generic.ICollection)) => throw null; + public static System.Threading.Tasks.Task AssignRolesAsync(this ServiceStack.Auth.IManageRolesAsync manageRoles, int userAuthId, System.Collections.Generic.ICollection roles = default(System.Collections.Generic.ICollection), System.Collections.Generic.ICollection permissions = default(System.Collections.Generic.ICollection), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task AssignRolesAsync(this ServiceStack.Auth.IAuthRepositoryAsync userAuthRepo, ServiceStack.Auth.IUserAuth userAuth, System.Collections.Generic.ICollection roles = default(System.Collections.Generic.ICollection), System.Collections.Generic.ICollection permissions = default(System.Collections.Generic.ICollection), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static ServiceStack.Auth.IUserAuth CreateUserAuth(this ServiceStack.Auth.IAuthRepository authRepo, ServiceStack.Auth.IUserAuth newUser, string password) => throw null; + public static System.Threading.Tasks.Task CreateUserAuthAsync(this ServiceStack.Auth.IAuthRepositoryAsync authRepo, ServiceStack.Auth.IUserAuth newUser, string password, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static void DeleteUserAuth(this ServiceStack.Auth.IUserAuthRepository authRepo, int userAuthId) => throw null; + public static void DeleteUserAuth(this ServiceStack.Auth.IAuthRepository authRepo, string userAuthId) => throw null; + public static System.Threading.Tasks.Task DeleteUserAuthAsync(this ServiceStack.Auth.IUserAuthRepositoryAsync authRepo, int userAuthId, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task DeleteUserAuthAsync(this ServiceStack.Auth.IAuthRepositoryAsync authRepo, string userAuthId, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Collections.Generic.List GetAuthTokens(this ServiceStack.Auth.IAuthRepository repo, string userAuthId) => throw null; + public static System.Threading.Tasks.Task> GetAuthTokensAsync(this ServiceStack.Auth.IAuthRepositoryAsync repo, string userAuthId, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Collections.Generic.ICollection GetPermissions(this ServiceStack.Auth.IManageRoles manageRoles, int userAuthId) => throw null; + public static System.Collections.Generic.ICollection GetPermissions(this ServiceStack.Auth.IAuthRepository userAuthRepo, ServiceStack.Auth.IUserAuth userAuth) => throw null; + public static System.Threading.Tasks.Task> GetPermissionsAsync(this ServiceStack.Auth.IManageRolesAsync manageRoles, int userAuthId, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task> GetPermissionsAsync(this ServiceStack.Auth.IAuthRepositoryAsync userAuthRepo, ServiceStack.Auth.IUserAuth userAuth, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Collections.Generic.ICollection GetRoles(this ServiceStack.Auth.IManageRoles manageRoles, int userAuthId) => throw null; + public static System.Collections.Generic.ICollection GetRoles(this ServiceStack.Auth.IAuthRepository userAuthRepo, ServiceStack.Auth.IUserAuth userAuth) => throw null; + public static System.Threading.Tasks.Task> GetRolesAsync(this ServiceStack.Auth.IManageRolesAsync manageRoles, int userAuthId, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task> GetRolesAsync(this ServiceStack.Auth.IAuthRepositoryAsync userAuthRepo, ServiceStack.Auth.IUserAuth userAuth, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static ServiceStack.Auth.IUserAuth GetUserAuth(this ServiceStack.Auth.IUserAuthRepository authRepo, int userAuthId) => throw null; + public static ServiceStack.Auth.IUserAuth GetUserAuth(this ServiceStack.Auth.IAuthRepository authRepo, string userAuthId) => throw null; + public static System.Threading.Tasks.Task GetUserAuthAsync(this ServiceStack.Auth.IUserAuthRepositoryAsync authRepo, int userAuthId, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task GetUserAuthAsync(this ServiceStack.Auth.IAuthRepositoryAsync authRepo, string userAuthId, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Collections.Generic.List GetUserAuthDetails(this ServiceStack.Auth.IAuthRepository authRepo, int userAuthId) => throw null; + public static System.Threading.Tasks.Task> GetUserAuthDetailsAsync(this ServiceStack.Auth.IAuthRepositoryAsync authRepo, int userAuthId, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Collections.Generic.List GetUserAuths(this ServiceStack.Auth.IAuthRepository authRepo, string orderBy = default(string), int? skip = default(int?), int? take = default(int?)) => throw null; + public static System.Threading.Tasks.Task> GetUserAuthsAsync(this ServiceStack.Auth.IAuthRepositoryAsync authRepo, string orderBy = default(string), int? skip = default(int?), int? take = default(int?), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static bool HasPermission(this ServiceStack.Auth.IManageRoles manageRoles, int userAuthId, string permission) => throw null; + public static System.Threading.Tasks.Task HasPermissionAsync(this ServiceStack.Auth.IManageRolesAsync manageRoles, int userAuthId, string permission, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static bool HasRole(this ServiceStack.Auth.IManageRoles manageRoles, int userAuthId, string role) => throw null; + public static System.Threading.Tasks.Task HasRoleAsync(this ServiceStack.Auth.IManageRolesAsync manageRoles, int userAuthId, string role, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static void PopulateSession(this ServiceStack.Auth.IAuthSession session, ServiceStack.Auth.IUserAuth userAuth, ServiceStack.Auth.IAuthRepository authRepo = default(ServiceStack.Auth.IAuthRepository)) => throw null; + public static System.Threading.Tasks.Task PopulateSessionAsync(this ServiceStack.Auth.IAuthSession session, ServiceStack.Auth.IUserAuth userAuth, ServiceStack.Auth.IAuthRepositoryAsync authRepo = default(ServiceStack.Auth.IAuthRepositoryAsync), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Collections.Generic.List SearchUserAuths(this ServiceStack.Auth.IAuthRepository authRepo, string query, string orderBy = default(string), int? skip = default(int?), int? take = default(int?)) => throw null; + public static System.Threading.Tasks.Task> SearchUserAuthsAsync(this ServiceStack.Auth.IAuthRepositoryAsync authRepo, string query, string orderBy = default(string), int? skip = default(int?), int? take = default(int?), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static void UnAssignRoles(this ServiceStack.Auth.IManageRoles manageRoles, int userAuthId, System.Collections.Generic.ICollection roles = default(System.Collections.Generic.ICollection), System.Collections.Generic.ICollection permissions = default(System.Collections.Generic.ICollection)) => throw null; + public static void UnAssignRoles(this ServiceStack.Auth.IAuthRepository userAuthRepo, ServiceStack.Auth.IUserAuth userAuth, System.Collections.Generic.ICollection roles = default(System.Collections.Generic.ICollection), System.Collections.Generic.ICollection permissions = default(System.Collections.Generic.ICollection)) => throw null; + public static System.Threading.Tasks.Task UnAssignRolesAsync(this ServiceStack.Auth.IManageRolesAsync manageRoles, int userAuthId, System.Collections.Generic.ICollection roles = default(System.Collections.Generic.ICollection), System.Collections.Generic.ICollection permissions = default(System.Collections.Generic.ICollection), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task UnAssignRolesAsync(this ServiceStack.Auth.IAuthRepositoryAsync userAuthRepo, ServiceStack.Auth.IUserAuth userAuth, System.Collections.Generic.ICollection roles = default(System.Collections.Generic.ICollection), System.Collections.Generic.ICollection permissions = default(System.Collections.Generic.ICollection), System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static ServiceStack.Auth.IUserAuth UpdateUserAuth(this ServiceStack.Auth.IAuthRepository authRepo, ServiceStack.Auth.IUserAuth existingUser, ServiceStack.Auth.IUserAuth newUser, string password) => throw null; + public static ServiceStack.Auth.IUserAuth UpdateUserAuth(this ServiceStack.Auth.IAuthRepository authRepo, ServiceStack.Auth.IUserAuth existingUser, ServiceStack.Auth.IUserAuth newUser) => throw null; + public static System.Threading.Tasks.Task UpdateUserAuthAsync(this ServiceStack.Auth.IAuthRepositoryAsync authRepo, ServiceStack.Auth.IUserAuth existingUser, ServiceStack.Auth.IUserAuth newUser, string password, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task UpdateUserAuthAsync(this ServiceStack.Auth.IAuthRepositoryAsync authRepo, ServiceStack.Auth.IUserAuth existingUser, ServiceStack.Auth.IUserAuth newUser, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public static void ValidateNewUser(this ServiceStack.Auth.IUserAuth newUser, string password) => throw null; + public static void ValidateNewUser(this ServiceStack.Auth.IUserAuth newUser) => throw null; + } + + // Generated from `ServiceStack.Auth.UserAuthRole` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class UserAuthRole : ServiceStack.IMeta + { + public virtual System.DateTime CreatedDate { get => throw null; set => throw null; } + public virtual int Id { get => throw null; set => throw null; } + public virtual System.Collections.Generic.Dictionary Meta { get => throw null; set => throw null; } + public virtual System.DateTime ModifiedDate { get => throw null; set => throw null; } + public virtual string Permission { get => throw null; set => throw null; } + public virtual int? RefId { get => throw null; set => throw null; } + public virtual string RefIdStr { get => throw null; set => throw null; } + public virtual string Role { get => throw null; set => throw null; } + public virtual int UserAuthId { get => throw null; set => throw null; } + public UserAuthRole() => throw null; + } + + // Generated from `ServiceStack.Auth.ValidateAsyncFn` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public delegate System.Threading.Tasks.Task ValidateAsyncFn(ServiceStack.IServiceBase service, string httpMethod, object requestDto); + + // Generated from `ServiceStack.Auth.ValidateFn` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public delegate object ValidateFn(ServiceStack.IServiceBase service, string httpMethod, object requestDto); + + // Generated from `ServiceStack.Auth.VkAuthProvider` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class VkAuthProvider : ServiceStack.Auth.OAuthProvider + { + public string ApiVersion { get => throw null; set => throw null; } + public string ApplicationId { get => throw null; set => throw null; } + public override System.Threading.Tasks.Task AuthenticateAsync(ServiceStack.IServiceBase authService, ServiceStack.Auth.IAuthSession session, ServiceStack.Authenticate request, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + protected virtual System.Threading.Tasks.Task AuthenticateWithAccessTokenAsync(ServiceStack.IServiceBase authService, ServiceStack.Auth.IAuthSession session, ServiceStack.Auth.IAuthTokens tokens, string accessToken) => throw null; + protected override System.Threading.Tasks.Task LoadUserAuthInfoAsync(ServiceStack.AuthUserSession userSession, ServiceStack.Auth.IAuthTokens tokens, System.Collections.Generic.Dictionary authInfo, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public override void LoadUserOAuthProvider(ServiceStack.Auth.IAuthSession authSession, ServiceStack.Auth.IAuthTokens tokens) => throw null; + public const string Name = default; + public static string PreAuthUrl; + public static string Realm; + protected virtual void RequestFilter(System.Net.HttpWebRequest request) => throw null; + public string Scope { get => throw null; set => throw null; } + public string SecureKey { get => throw null; set => throw null; } + public static string TokenUrl; + public VkAuthProvider(ServiceStack.Configuration.IAppSettings appSettings) => throw null; + } + + // Generated from `ServiceStack.Auth.YammerAuthProvider` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class YammerAuthProvider : ServiceStack.Auth.OAuthProvider + { + public override System.Threading.Tasks.Task AuthenticateAsync(ServiceStack.IServiceBase authService, ServiceStack.Auth.IAuthSession session, ServiceStack.Authenticate request, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public string ClientId { get => throw null; set => throw null; } + public string ClientSecret { get => throw null; set => throw null; } + protected override System.Threading.Tasks.Task LoadUserAuthInfoAsync(ServiceStack.AuthUserSession userSession, ServiceStack.Auth.IAuthTokens tokens, System.Collections.Generic.Dictionary authInfo, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public override void LoadUserOAuthProvider(ServiceStack.Auth.IAuthSession authSession, ServiceStack.Auth.IAuthTokens tokens) => throw null; + public const string Name = default; + public string PreAuthUrl { get => throw null; set => throw null; } + public YammerAuthProvider(ServiceStack.Configuration.IAppSettings appSettings) => throw null; + } + + // Generated from `ServiceStack.Auth.YandexAuthProvider` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class YandexAuthProvider : ServiceStack.Auth.OAuthProvider + { + public string ApplicationId { get => throw null; set => throw null; } + public string ApplicationPassword { get => throw null; set => throw null; } + public override System.Threading.Tasks.Task AuthenticateAsync(ServiceStack.IServiceBase authService, ServiceStack.Auth.IAuthSession session, ServiceStack.Authenticate request, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + protected override System.Threading.Tasks.Task LoadUserAuthInfoAsync(ServiceStack.AuthUserSession userSession, ServiceStack.Auth.IAuthTokens tokens, System.Collections.Generic.Dictionary authInfo, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public override void LoadUserOAuthProvider(ServiceStack.Auth.IAuthSession authSession, ServiceStack.Auth.IAuthTokens tokens) => throw null; + public const string Name = default; + public static string PreAuthUrl; + public static string Realm; + public static string TokenUrl; + public YandexAuthProvider(ServiceStack.Configuration.IAppSettings appSettings) => throw null; + } + + } + namespace Caching + { + // Generated from `ServiceStack.Caching.CacheClientAsyncExtensions` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class CacheClientAsyncExtensions + { + public static ServiceStack.Caching.ICacheClientAsync AsAsync(this ServiceStack.Caching.ICacheClient cache) => throw null; + public static ServiceStack.Caching.ICacheClient AsSync(this ServiceStack.Caching.ICacheClientAsync cache) => throw null; + public static ServiceStack.Caching.ICacheClient Unwrap(this ServiceStack.Caching.ICacheClientAsync cache) => throw null; + } + + // Generated from `ServiceStack.Caching.CacheClientAsyncWrapper` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class CacheClientAsyncWrapper : System.IAsyncDisposable, ServiceStack.Caching.IRemoveByPatternAsync, ServiceStack.Caching.ICacheClientAsync + { + public System.Threading.Tasks.Task AddAsync(string key, T value, System.TimeSpan expiresIn, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task AddAsync(string key, T value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task AddAsync(string key, T value, System.DateTime expiresAt, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public ServiceStack.Caching.ICacheClient Cache { get => throw null; } + public CacheClientAsyncWrapper(ServiceStack.Caching.ICacheClient cache) => throw null; + public System.Threading.Tasks.Task DecrementAsync(string key, System.UInt32 amount, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.ValueTask DisposeAsync() => throw null; + public System.Threading.Tasks.Task FlushAllAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task> GetAllAsync(System.Collections.Generic.IEnumerable keys, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task GetAsync(string key, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Collections.Generic.IAsyncEnumerable GetKeysByPatternAsync(string pattern, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task GetTimeToLiveAsync(string key, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task IncrementAsync(string key, System.UInt32 amount, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task RemoveAllAsync(System.Collections.Generic.IEnumerable keys, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task RemoveAsync(string key, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task RemoveByPatternAsync(string pattern, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task RemoveByRegexAsync(string regex, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task RemoveExpiredEntriesAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task ReplaceAsync(string key, T value, System.TimeSpan expiresIn, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task ReplaceAsync(string key, T value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task ReplaceAsync(string key, T value, System.DateTime expiresAt, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task SetAllAsync(System.Collections.Generic.IDictionary values, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task SetAsync(string key, T value, System.TimeSpan expiresIn, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task SetAsync(string key, T value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task SetAsync(string key, T value, System.DateTime expiresAt, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + } + + // Generated from `ServiceStack.Caching.CacheClientWithPrefix` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class CacheClientWithPrefix : System.IDisposable, ServiceStack.Caching.IRemoveByPattern, ServiceStack.Caching.ICacheClientExtended, ServiceStack.Caching.ICacheClient + { + public bool Add(string key, T value, System.TimeSpan expiresIn) => throw null; + public bool Add(string key, T value, System.DateTime expiresAt) => throw null; + public bool Add(string key, T value) => throw null; + public CacheClientWithPrefix(ServiceStack.Caching.ICacheClient cache, string prefix) => throw null; + public System.Int64 Decrement(string key, System.UInt32 amount) => throw null; + public void Dispose() => throw null; + public void FlushAll() => throw null; + public T Get(string key) => throw null; + public System.Collections.Generic.IDictionary GetAll(System.Collections.Generic.IEnumerable keys) => throw null; + public System.Collections.Generic.IEnumerable GetKeysByPattern(string pattern) => throw null; + public System.TimeSpan? GetTimeToLive(string key) => throw null; + public System.Int64 Increment(string key, System.UInt32 amount) => throw null; + public string Prefix { get => throw null; } + public bool Remove(string key) => throw null; + public void RemoveAll(System.Collections.Generic.IEnumerable keys) => throw null; + public void RemoveByPattern(string pattern) => throw null; + public void RemoveByRegex(string regex) => throw null; + public void RemoveExpiredEntries() => throw null; + public bool Replace(string key, T value, System.TimeSpan expiresIn) => throw null; + public bool Replace(string key, T value, System.DateTime expiresAt) => throw null; + public bool Replace(string key, T value) => throw null; + public bool Set(string key, T value, System.TimeSpan expiresIn) => throw null; + public bool Set(string key, T value, System.DateTime expiresAt) => throw null; + public bool Set(string key, T value) => throw null; + public void SetAll(System.Collections.Generic.IDictionary values) => throw null; + } + + // Generated from `ServiceStack.Caching.CacheClientWithPrefixAsync` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class CacheClientWithPrefixAsync : System.IAsyncDisposable, ServiceStack.Caching.IRemoveByPatternAsync, ServiceStack.Caching.ICacheClientAsync + { + public System.Threading.Tasks.Task AddAsync(string key, T value, System.TimeSpan expiresIn, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task AddAsync(string key, T value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task AddAsync(string key, T value, System.DateTime expiresAt, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public CacheClientWithPrefixAsync(ServiceStack.Caching.ICacheClientAsync cache, string prefix) => throw null; + public System.Threading.Tasks.Task DecrementAsync(string key, System.UInt32 amount, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.ValueTask DisposeAsync() => throw null; + public System.Threading.Tasks.Task FlushAllAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task> GetAllAsync(System.Collections.Generic.IEnumerable keys, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task GetAsync(string key, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Collections.Generic.IAsyncEnumerable GetKeysByPatternAsync(string pattern, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task GetTimeToLiveAsync(string key, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task IncrementAsync(string key, System.UInt32 amount, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public string Prefix { get => throw null; } + public System.Threading.Tasks.Task RemoveAllAsync(System.Collections.Generic.IEnumerable keys, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task RemoveAsync(string key, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task RemoveByPatternAsync(string pattern, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task RemoveByRegexAsync(string regex, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task RemoveExpiredEntriesAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task ReplaceAsync(string key, T value, System.TimeSpan expiresIn, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task ReplaceAsync(string key, T value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task ReplaceAsync(string key, T value, System.DateTime expiresAt, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task SetAllAsync(System.Collections.Generic.IDictionary values, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task SetAsync(string key, T value, System.TimeSpan expiresIn, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task SetAsync(string key, T value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task SetAsync(string key, T value, System.DateTime expiresAt, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + } + + // Generated from `ServiceStack.Caching.CacheClientWithPrefixAsyncExtensions` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class CacheClientWithPrefixAsyncExtensions + { + public static ServiceStack.Caching.ICacheClientAsync WithPrefix(this ServiceStack.Caching.ICacheClientAsync cache, string prefix) => throw null; + } + + // Generated from `ServiceStack.Caching.CacheClientWithPrefixExtensions` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class CacheClientWithPrefixExtensions + { + public static ServiceStack.Caching.ICacheClient WithPrefix(this ServiceStack.Caching.ICacheClient cache, string prefix) => throw null; + } + + // Generated from `ServiceStack.Caching.MemoryCacheClient` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class MemoryCacheClient : System.IDisposable, ServiceStack.Caching.IRemoveByPattern, ServiceStack.Caching.ICacheClientExtended, ServiceStack.Caching.ICacheClient + { + public bool Add(string key, T value, System.TimeSpan expiresIn) => throw null; + public bool Add(string key, T value, System.DateTime expiresAt) => throw null; + public bool Add(string key, T value) => throw null; + public System.Int64 CleaningInterval { get => throw null; set => throw null; } + public System.Int64 Decrement(string key, System.UInt32 amount) => throw null; + public void Dispose() => throw null; + public void FlushAll() => throw null; + public bool FlushOnDispose { get => throw null; set => throw null; } + public object Get(string key, out System.Int64 lastModifiedTicks) => throw null; + public object Get(string key) => throw null; + public T Get(string key) => throw null; + public System.Collections.Generic.IDictionary GetAll(System.Collections.Generic.IEnumerable keys) => throw null; + public System.Collections.Generic.IEnumerable GetKeysByPattern(string pattern) => throw null; + public System.Collections.Generic.List GetKeysByRegex(string pattern) => throw null; + public System.TimeSpan? GetTimeToLive(string key) => throw null; + public System.Int64 Increment(string key, System.UInt32 amount) => throw null; + public MemoryCacheClient() => throw null; + public bool Remove(string key) => throw null; + public void RemoveAll(System.Collections.Generic.IEnumerable keys) => throw null; + public void RemoveByPattern(string pattern) => throw null; + public void RemoveByRegex(string pattern) => throw null; + public void RemoveExpiredEntries() => throw null; + public bool Replace(string key, T value, System.TimeSpan expiresIn) => throw null; + public bool Replace(string key, T value, System.DateTime expiresAt) => throw null; + public bool Replace(string key, T value) => throw null; + public bool Set(string key, T value, System.TimeSpan expiresIn) => throw null; + public bool Set(string key, T value, System.DateTime expiresAt) => throw null; + public bool Set(string key, T value) => throw null; + public void SetAll(System.Collections.Generic.IDictionary values) => throw null; + } + + // Generated from `ServiceStack.Caching.MultiCacheClient` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class MultiCacheClient : System.IDisposable, System.IAsyncDisposable, ServiceStack.Caching.ICacheClientAsync, ServiceStack.Caching.ICacheClient + { + public bool Add(string key, T value, System.TimeSpan expiresIn) => throw null; + public bool Add(string key, T value, System.DateTime expiresAt) => throw null; + public bool Add(string key, T value) => throw null; + public System.Threading.Tasks.Task AddAsync(string key, T value, System.TimeSpan expiresIn, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task AddAsync(string key, T value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task AddAsync(string key, T value, System.DateTime expiresAt, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Int64 Decrement(string key, System.UInt32 amount) => throw null; + public System.Threading.Tasks.Task DecrementAsync(string key, System.UInt32 amount, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public void Dispose() => throw null; + public System.Threading.Tasks.ValueTask DisposeAsync() => throw null; + public void FlushAll() => throw null; + public System.Threading.Tasks.Task FlushAllAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public T Get(string key) => throw null; + public System.Collections.Generic.IDictionary GetAll(System.Collections.Generic.IEnumerable keys) => throw null; + public System.Threading.Tasks.Task> GetAllAsync(System.Collections.Generic.IEnumerable keys, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task GetAsync(string key, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Collections.Generic.IAsyncEnumerable GetKeysByPatternAsync(string pattern, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task GetTimeToLiveAsync(string key, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Int64 Increment(string key, System.UInt32 amount) => throw null; + public System.Threading.Tasks.Task IncrementAsync(string key, System.UInt32 amount, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public MultiCacheClient(params ServiceStack.Caching.ICacheClient[] cacheClients) => throw null; + public MultiCacheClient(System.Collections.Generic.List cacheClients, System.Collections.Generic.List cacheClientsAsync) => throw null; + public bool Remove(string key) => throw null; + public void RemoveAll(System.Collections.Generic.IEnumerable keys) => throw null; + public System.Threading.Tasks.Task RemoveAllAsync(System.Collections.Generic.IEnumerable keys, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task RemoveAsync(string key, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task RemoveExpiredEntriesAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public bool Replace(string key, T value, System.TimeSpan expiresIn) => throw null; + public bool Replace(string key, T value, System.DateTime expiresAt) => throw null; + public bool Replace(string key, T value) => throw null; + public System.Threading.Tasks.Task ReplaceAsync(string key, T value, System.TimeSpan expiresIn, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task ReplaceAsync(string key, T value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task ReplaceAsync(string key, T value, System.DateTime expiresAt, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public bool Set(string key, T value, System.TimeSpan expiresIn) => throw null; + public bool Set(string key, T value, System.DateTime expiresAt) => throw null; + public bool Set(string key, T value) => throw null; + public void SetAll(System.Collections.Generic.IDictionary values) => throw null; + public System.Threading.Tasks.Task SetAllAsync(System.Collections.Generic.IDictionary values, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task SetAsync(string key, T value, System.TimeSpan expiresIn, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task SetAsync(string key, T value, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task SetAsync(string key, T value, System.DateTime expiresAt, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + } + + } + namespace Configuration + { + // Generated from `ServiceStack.Configuration.AppSettings` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class AppSettings : ServiceStack.Configuration.AppSettingsBase + { + public AppSettings(string tier = default(string)) : base(default(ServiceStack.Configuration.ISettings)) => throw null; + public override string GetString(string name) => throw null; + } + + // Generated from `ServiceStack.Configuration.AppSettingsBase` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class AppSettingsBase : ServiceStack.Configuration.ISettingsWriter, ServiceStack.Configuration.ISettings, ServiceStack.Configuration.IAppSettings + { + public AppSettingsBase(ServiceStack.Configuration.ISettings settings = default(ServiceStack.Configuration.ISettings)) => throw null; + public virtual bool Exists(string key) => throw null; + public virtual T Get(string name, T defaultValue) => throw null; + public virtual T Get(string name) => throw null; + public string Get(string name) => throw null; + public virtual System.Collections.Generic.Dictionary GetAll() => throw null; + public virtual System.Collections.Generic.List GetAllKeys() => throw null; + public virtual System.Collections.Generic.IDictionary GetDictionary(string key) => throw null; + public virtual System.Collections.Generic.List> GetKeyValuePairs(string key) => throw null; + public virtual System.Collections.Generic.IList GetList(string key) => throw null; + public virtual string GetNullableString(string name) => throw null; + public virtual string GetRequiredString(string name) => throw null; + public virtual string GetString(string name) => throw null; + protected void Init(ServiceStack.Configuration.ISettings settings) => throw null; + public ServiceStack.Configuration.ParsingStrategyDelegate ParsingStrategy { get => throw null; set => throw null; } + public virtual void Set(string key, T value) => throw null; + public string Tier { get => throw null; set => throw null; } + protected ServiceStack.Configuration.ISettings settings; + protected ServiceStack.Configuration.ISettingsWriter settingsWriter; + } + + // Generated from `ServiceStack.Configuration.AppSettingsStrategy` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class AppSettingsStrategy + { + public static string CollapseNewLines(string originalSetting) => throw null; + } + + // Generated from `ServiceStack.Configuration.AppSettingsUtils` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class AppSettingsUtils + { + public static string GetConnectionString(this ServiceStack.Configuration.IAppSettings appSettings, string name) => throw null; + public static string GetNullableString(this ServiceStack.Configuration.IAppSettings settings, string name) => throw null; + public static string GetRequiredString(this ServiceStack.Configuration.IAppSettings settings, string name) => throw null; + } + + // Generated from `ServiceStack.Configuration.Config` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class Config + { + public Config() => throw null; + public const string DefaultNamespace = default; + } + + // Generated from `ServiceStack.Configuration.ConfigUtils` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ConfigUtils + { + public ConfigUtils() => throw null; + public static string GetAppSetting(string key, string defaultValue) => throw null; + public static string GetAppSetting(string key) => throw null; + public static T GetAppSetting(string key, T defaultValue) => throw null; + public static System.Collections.Generic.Dictionary GetAppSettingsMap() => throw null; + public static string GetConnectionString(string key) => throw null; + public static System.Collections.Generic.Dictionary GetDictionaryFromAppSetting(string key) => throw null; + public static System.Collections.Generic.Dictionary GetDictionaryFromAppSettingValue(string appSettingValue) => throw null; + public static System.Collections.Generic.List> GetKeyValuePairsFromAppSettingValue(string appSettingValue) => throw null; + public static System.Collections.Generic.List GetListFromAppSetting(string key) => throw null; + public static System.Collections.Generic.List GetListFromAppSettingValue(string appSettingValue) => throw null; + public static string GetNullableAppSetting(string key) => throw null; + public const System.Char ItemSeperator = default; + public const System.Char KeyValueSeperator = default; + } + + // Generated from `ServiceStack.Configuration.DictionarySettings` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class DictionarySettings : ServiceStack.Configuration.AppSettingsBase, ServiceStack.Configuration.ISettings + { + public DictionarySettings(System.Collections.Generic.IEnumerable> map) : base(default(ServiceStack.Configuration.ISettings)) => throw null; + public DictionarySettings(System.Collections.Generic.Dictionary map = default(System.Collections.Generic.Dictionary)) : base(default(ServiceStack.Configuration.ISettings)) => throw null; + public override System.Collections.Generic.Dictionary GetAll() => throw null; + } + + // Generated from `ServiceStack.Configuration.EnvironmentVariableSettings` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class EnvironmentVariableSettings : ServiceStack.Configuration.AppSettingsBase + { + public EnvironmentVariableSettings() : base(default(ServiceStack.Configuration.ISettings)) => throw null; + public override string GetString(string name) => throw null; + } + + // Generated from `ServiceStack.Configuration.ISettings` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface ISettings + { + string Get(string key); + System.Collections.Generic.List GetAllKeys(); + } + + // Generated from `ServiceStack.Configuration.ISettingsWriter` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface ISettingsWriter : ServiceStack.Configuration.ISettings + { + void Set(string key, T value); + } + + // Generated from `ServiceStack.Configuration.MultiAppSettings` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class MultiAppSettings : ServiceStack.Configuration.AppSettingsBase, ServiceStack.Configuration.ISettings + { + public ServiceStack.Configuration.IAppSettings[] AppSettings { get => throw null; } + public override T Get(string name, T defaultValue) => throw null; + public override T Get(string name) => throw null; + public MultiAppSettings(params ServiceStack.Configuration.IAppSettings[] appSettings) : base(default(ServiceStack.Configuration.ISettings)) => throw null; + } + + // Generated from `ServiceStack.Configuration.MultiAppSettingsBuilder` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class MultiAppSettingsBuilder + { + public ServiceStack.Configuration.MultiAppSettingsBuilder AddAppSettings(string tier) => throw null; + public ServiceStack.Configuration.MultiAppSettingsBuilder AddAppSettings() => throw null; + public ServiceStack.Configuration.MultiAppSettingsBuilder AddDictionarySettings(System.Collections.Generic.Dictionary map) => throw null; + public ServiceStack.Configuration.MultiAppSettingsBuilder AddEnvironmentalVariables(string tier) => throw null; + public ServiceStack.Configuration.MultiAppSettingsBuilder AddEnvironmentalVariables() => throw null; + public ServiceStack.Configuration.MultiAppSettingsBuilder AddNetCore(Microsoft.Extensions.Configuration.IConfiguration configuration) => throw null; + public ServiceStack.Configuration.MultiAppSettingsBuilder AddTextFile(string path, string delimeter, string tier) => throw null; + public ServiceStack.Configuration.MultiAppSettingsBuilder AddTextFile(string path, string delimeter) => throw null; + public ServiceStack.Configuration.MultiAppSettingsBuilder AddTextFile(string path) => throw null; + public ServiceStack.Configuration.IAppSettings Build() => throw null; + public MultiAppSettingsBuilder(string tier = default(string)) => throw null; + } + + // Generated from `ServiceStack.Configuration.ParsingStrategyDelegate` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public delegate string ParsingStrategyDelegate(string originalSetting); + + // Generated from `ServiceStack.Configuration.RoleNames` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class RoleNames + { + public static string Admin; + public static string AllowAnon; + public static string AllowAnyUser; + } + + // Generated from `ServiceStack.Configuration.RuntimeAppSettings` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class RuntimeAppSettings : ServiceStack.Configuration.IRuntimeAppSettings + { + public T Get(ServiceStack.Web.IRequest request, string name, T defaultValue) => throw null; + public RuntimeAppSettings() => throw null; + public System.Collections.Generic.Dictionary> Settings { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.Configuration.TextFileSettings` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class TextFileSettings : ServiceStack.Configuration.DictionarySettings + { + public TextFileSettings(string filePath, string delimiter = default(string)) : base(default(System.Collections.Generic.Dictionary)) => throw null; + } + + } + namespace FluentValidation + { + // Generated from `ServiceStack.FluentValidation.AbstractValidator<>` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public abstract class AbstractValidator : System.Collections.IEnumerable, System.Collections.Generic.IEnumerable, ServiceStack.Web.IRequiresRequest, ServiceStack.IHasTypeValidators, ServiceStack.FluentValidation.IValidator, ServiceStack.FluentValidation.IValidator, ServiceStack.FluentValidation.IServiceStackValidator + { + protected AbstractValidator() => throw null; + protected void AddRule(ServiceStack.FluentValidation.IValidationRule rule) => throw null; + bool ServiceStack.FluentValidation.IValidator.CanValidateInstancesOfType(System.Type type) => throw null; + public ServiceStack.FluentValidation.CascadeMode CascadeMode { get => throw null; set => throw null; } + public virtual ServiceStack.FluentValidation.IValidatorDescriptor CreateDescriptor() => throw null; + protected virtual void EnsureInstanceNotNull(object instanceToValidate) => throw null; + public virtual ServiceStack.IServiceGateway Gateway { get => throw null; } + public System.Collections.Generic.IEnumerator GetEnumerator() => throw null; + System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() => throw null; + public void Include(System.Func rulesToInclude) where TValidator : ServiceStack.FluentValidation.IValidator => throw null; + public void Include(ServiceStack.FluentValidation.IValidator rulesToInclude) => throw null; + protected virtual bool PreValidate(ServiceStack.FluentValidation.ValidationContext context, ServiceStack.FluentValidation.Results.ValidationResult result) => throw null; + protected virtual void RaiseValidationException(ServiceStack.FluentValidation.ValidationContext context, ServiceStack.FluentValidation.Results.ValidationResult result) => throw null; + public void RemovePropertyRules(System.Func where) => throw null; + public virtual ServiceStack.Web.IRequest Request { get => throw null; set => throw null; } + public ServiceStack.FluentValidation.IRuleBuilderInitial RuleFor(System.Linq.Expressions.Expression> expression) => throw null; + public ServiceStack.FluentValidation.IRuleBuilderInitialCollection RuleForEach(System.Linq.Expressions.Expression>> expression) => throw null; + public void RuleSet(string ruleSetName, System.Action action) => throw null; + public void RuleSet(ServiceStack.ApplyTo appliesTo, System.Action action) => throw null; + public ServiceStack.FluentValidation.IRuleBuilderInitial Transform(System.Linq.Expressions.Expression> from, System.Func to) => throw null; + public ServiceStack.FluentValidation.IRuleBuilderInitial Transform(System.Linq.Expressions.Expression> from, System.Func to) => throw null; + public ServiceStack.FluentValidation.IRuleBuilderInitialCollection TransformForEach(System.Linq.Expressions.Expression>> expression, System.Func to) => throw null; + public ServiceStack.FluentValidation.IRuleBuilderInitialCollection TransformForEach(System.Linq.Expressions.Expression>> expression, System.Func to) => throw null; + public System.Collections.Generic.List TypeValidators { get => throw null; } + public ServiceStack.FluentValidation.IConditionBuilder Unless(System.Func predicate, System.Action action) => throw null; + public ServiceStack.FluentValidation.IConditionBuilder Unless(System.Func, bool> predicate, System.Action action) => throw null; + public ServiceStack.FluentValidation.IConditionBuilder UnlessAsync(System.Func> predicate, System.Action action) => throw null; + public ServiceStack.FluentValidation.IConditionBuilder UnlessAsync(System.Func, System.Threading.CancellationToken, System.Threading.Tasks.Task> predicate, System.Action action) => throw null; + public virtual ServiceStack.FluentValidation.Results.ValidationResult Validate(ServiceStack.FluentValidation.ValidationContext context) => throw null; + public ServiceStack.FluentValidation.Results.ValidationResult Validate(T instance) => throw null; + ServiceStack.FluentValidation.Results.ValidationResult ServiceStack.FluentValidation.IValidator.Validate(ServiceStack.FluentValidation.IValidationContext context) => throw null; + public virtual System.Threading.Tasks.Task ValidateAsync(ServiceStack.FluentValidation.ValidationContext context, System.Threading.CancellationToken cancellation = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task ValidateAsync(T instance, System.Threading.CancellationToken cancellation = default(System.Threading.CancellationToken)) => throw null; + System.Threading.Tasks.Task ServiceStack.FluentValidation.IValidator.ValidateAsync(ServiceStack.FluentValidation.IValidationContext context, System.Threading.CancellationToken cancellation) => throw null; + public ServiceStack.FluentValidation.IConditionBuilder When(System.Func predicate, System.Action action) => throw null; + public ServiceStack.FluentValidation.IConditionBuilder When(System.Func, bool> predicate, System.Action action) => throw null; + public ServiceStack.FluentValidation.IConditionBuilder WhenAsync(System.Func> predicate, System.Action action) => throw null; + public ServiceStack.FluentValidation.IConditionBuilder WhenAsync(System.Func, System.Threading.CancellationToken, System.Threading.Tasks.Task> predicate, System.Action action) => throw null; + } + + // Generated from `ServiceStack.FluentValidation.ApplyConditionTo` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public enum ApplyConditionTo + { + AllValidators, + CurrentValidator, + } + + // Generated from `ServiceStack.FluentValidation.AssemblyScanner` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class AssemblyScanner : System.Collections.IEnumerable, System.Collections.Generic.IEnumerable + { + // Generated from `ServiceStack.FluentValidation.AssemblyScanner+AssemblyScanResult` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class AssemblyScanResult + { + public AssemblyScanResult(System.Type interfaceType, System.Type validatorType) => throw null; + public System.Type InterfaceType { get => throw null; set => throw null; } + public System.Type ValidatorType { get => throw null; set => throw null; } + } + + + public AssemblyScanner(System.Collections.Generic.IEnumerable types) => throw null; + public static ServiceStack.FluentValidation.AssemblyScanner FindValidatorsInAssemblies(System.Collections.Generic.IEnumerable assemblies) => throw null; + public static ServiceStack.FluentValidation.AssemblyScanner FindValidatorsInAssembly(System.Reflection.Assembly assembly) => throw null; + public static ServiceStack.FluentValidation.AssemblyScanner FindValidatorsInAssemblyContaining() => throw null; + public static ServiceStack.FluentValidation.AssemblyScanner FindValidatorsInAssemblyContaining(System.Type type) => throw null; + public void ForEach(System.Action action) => throw null; + public System.Collections.Generic.IEnumerator GetEnumerator() => throw null; + System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() => throw null; + } + + // Generated from `ServiceStack.FluentValidation.CascadeMode` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public enum CascadeMode + { + Continue, + Stop, + StopOnFirstFailure, + } + + // Generated from `ServiceStack.FluentValidation.DefaultValidator<>` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class DefaultValidator : ServiceStack.FluentValidation.AbstractValidator, ServiceStack.FluentValidation.IDefaultValidator + { + public DefaultValidator() => throw null; + } + + // Generated from `ServiceStack.FluentValidation.DefaultValidatorExtensions` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class DefaultValidatorExtensions + { + public static ServiceStack.FluentValidation.IRuleBuilderOptions ChildRules(this ServiceStack.FluentValidation.IRuleBuilder ruleBuilder, System.Action> action) => throw null; + public static ServiceStack.FluentValidation.IRuleBuilderOptions CreditCard(this ServiceStack.FluentValidation.IRuleBuilder ruleBuilder) => throw null; + public static ServiceStack.FluentValidation.IRuleBuilderInitial Custom(this ServiceStack.FluentValidation.IRuleBuilder ruleBuilder, System.Action action) => throw null; + public static ServiceStack.FluentValidation.IRuleBuilderInitial CustomAsync(this ServiceStack.FluentValidation.IRuleBuilder ruleBuilder, System.Func action) => throw null; + public static ServiceStack.FluentValidation.IRuleBuilderOptions EmailAddress(this ServiceStack.FluentValidation.IRuleBuilder ruleBuilder, ServiceStack.FluentValidation.Validators.EmailValidationMode mode = default(ServiceStack.FluentValidation.Validators.EmailValidationMode)) => throw null; + public static ServiceStack.FluentValidation.IRuleBuilderOptions Empty(this ServiceStack.FluentValidation.IRuleBuilder ruleBuilder) => throw null; + public static ServiceStack.FluentValidation.IRuleBuilderOptions Equal(this ServiceStack.FluentValidation.IRuleBuilder ruleBuilder, TProperty toCompare, System.Collections.IEqualityComparer comparer = default(System.Collections.IEqualityComparer)) => throw null; + public static ServiceStack.FluentValidation.IRuleBuilderOptions Equal(this ServiceStack.FluentValidation.IRuleBuilder ruleBuilder, System.Linq.Expressions.Expression> expression, System.Collections.IEqualityComparer comparer = default(System.Collections.IEqualityComparer)) => throw null; + public static ServiceStack.FluentValidation.IRuleBuilderOptions ExclusiveBetween(this ServiceStack.FluentValidation.IRuleBuilder ruleBuilder, TProperty from, TProperty to) where TProperty : struct, System.IComparable, System.IComparable => throw null; + public static ServiceStack.FluentValidation.IRuleBuilderOptions ExclusiveBetween(this ServiceStack.FluentValidation.IRuleBuilder ruleBuilder, TProperty from, TProperty to) where TProperty : System.IComparable, System.IComparable => throw null; + public static ServiceStack.FluentValidation.IRuleBuilderOptions> ForEach(this ServiceStack.FluentValidation.IRuleBuilder> ruleBuilder, System.Action, TElement>> action) => throw null; + public static ServiceStack.FluentValidation.IRuleBuilderOptions GreaterThan(this ServiceStack.FluentValidation.IRuleBuilder ruleBuilder, TProperty valueToCompare) where TProperty : struct, System.IComparable, System.IComparable => throw null; + public static ServiceStack.FluentValidation.IRuleBuilderOptions GreaterThan(this ServiceStack.FluentValidation.IRuleBuilder ruleBuilder, System.Linq.Expressions.Expression> expression) where TProperty : struct, System.IComparable, System.IComparable => throw null; + public static ServiceStack.FluentValidation.IRuleBuilderOptions GreaterThan(this ServiceStack.FluentValidation.IRuleBuilder ruleBuilder, System.Linq.Expressions.Expression> expression) where TProperty : struct, System.IComparable, System.IComparable => throw null; + public static ServiceStack.FluentValidation.IRuleBuilderOptions GreaterThan(this ServiceStack.FluentValidation.IRuleBuilder ruleBuilder, TProperty valueToCompare) where TProperty : System.IComparable, System.IComparable => throw null; + public static ServiceStack.FluentValidation.IRuleBuilderOptions GreaterThan(this ServiceStack.FluentValidation.IRuleBuilder ruleBuilder, System.Linq.Expressions.Expression> expression) where TProperty : struct, System.IComparable, System.IComparable => throw null; + public static ServiceStack.FluentValidation.IRuleBuilderOptions GreaterThan(this ServiceStack.FluentValidation.IRuleBuilder ruleBuilder, System.Linq.Expressions.Expression> expression) where TProperty : System.IComparable, System.IComparable => throw null; + public static ServiceStack.FluentValidation.IRuleBuilderOptions GreaterThanOrEqualTo(this ServiceStack.FluentValidation.IRuleBuilder ruleBuilder, TProperty valueToCompare) where TProperty : struct, System.IComparable, System.IComparable => throw null; + public static ServiceStack.FluentValidation.IRuleBuilderOptions GreaterThanOrEqualTo(this ServiceStack.FluentValidation.IRuleBuilder ruleBuilder, System.Linq.Expressions.Expression> valueToCompare) where TProperty : struct, System.IComparable, System.IComparable => throw null; + public static ServiceStack.FluentValidation.IRuleBuilderOptions GreaterThanOrEqualTo(this ServiceStack.FluentValidation.IRuleBuilder ruleBuilder, System.Linq.Expressions.Expression> valueToCompare) where TProperty : struct, System.IComparable, System.IComparable => throw null; + public static ServiceStack.FluentValidation.IRuleBuilderOptions GreaterThanOrEqualTo(this ServiceStack.FluentValidation.IRuleBuilder ruleBuilder, TProperty valueToCompare) where TProperty : System.IComparable, System.IComparable => throw null; + public static ServiceStack.FluentValidation.IRuleBuilderOptions GreaterThanOrEqualTo(this ServiceStack.FluentValidation.IRuleBuilder ruleBuilder, System.Linq.Expressions.Expression> valueToCompare) where TProperty : struct, System.IComparable, System.IComparable => throw null; + public static ServiceStack.FluentValidation.IRuleBuilderOptions GreaterThanOrEqualTo(this ServiceStack.FluentValidation.IRuleBuilder ruleBuilder, System.Linq.Expressions.Expression> valueToCompare) where TProperty : System.IComparable, System.IComparable => throw null; + public static ServiceStack.FluentValidation.IRuleBuilderOptions InclusiveBetween(this ServiceStack.FluentValidation.IRuleBuilder ruleBuilder, TProperty from, TProperty to) where TProperty : struct, System.IComparable, System.IComparable => throw null; + public static ServiceStack.FluentValidation.IRuleBuilderOptions InclusiveBetween(this ServiceStack.FluentValidation.IRuleBuilder ruleBuilder, TProperty from, TProperty to) where TProperty : System.IComparable, System.IComparable => throw null; + public static ServiceStack.FluentValidation.IRuleBuilderOptions IsEnumName(this ServiceStack.FluentValidation.IRuleBuilder ruleBuilder, System.Type enumType, bool caseSensitive = default(bool)) => throw null; + public static ServiceStack.FluentValidation.IRuleBuilderOptions IsInEnum(this ServiceStack.FluentValidation.IRuleBuilder ruleBuilder) => throw null; + public static ServiceStack.FluentValidation.IRuleBuilderOptions Length(this ServiceStack.FluentValidation.IRuleBuilder ruleBuilder, int min, int max) => throw null; + public static ServiceStack.FluentValidation.IRuleBuilderOptions Length(this ServiceStack.FluentValidation.IRuleBuilder ruleBuilder, int exactLength) => throw null; + public static ServiceStack.FluentValidation.IRuleBuilderOptions Length(this ServiceStack.FluentValidation.IRuleBuilder ruleBuilder, System.Func min, System.Func max) => throw null; + public static ServiceStack.FluentValidation.IRuleBuilderOptions Length(this ServiceStack.FluentValidation.IRuleBuilder ruleBuilder, System.Func exactLength) => throw null; + public static ServiceStack.FluentValidation.IRuleBuilderOptions LessThan(this ServiceStack.FluentValidation.IRuleBuilder ruleBuilder, TProperty valueToCompare) where TProperty : struct, System.IComparable, System.IComparable => throw null; + public static ServiceStack.FluentValidation.IRuleBuilderOptions LessThan(this ServiceStack.FluentValidation.IRuleBuilder ruleBuilder, System.Linq.Expressions.Expression> expression) where TProperty : struct, System.IComparable, System.IComparable => throw null; + public static ServiceStack.FluentValidation.IRuleBuilderOptions LessThan(this ServiceStack.FluentValidation.IRuleBuilder ruleBuilder, System.Linq.Expressions.Expression> expression) where TProperty : struct, System.IComparable, System.IComparable => throw null; + public static ServiceStack.FluentValidation.IRuleBuilderOptions LessThan(this ServiceStack.FluentValidation.IRuleBuilder ruleBuilder, TProperty valueToCompare) where TProperty : System.IComparable, System.IComparable => throw null; + public static ServiceStack.FluentValidation.IRuleBuilderOptions LessThan(this ServiceStack.FluentValidation.IRuleBuilder ruleBuilder, System.Linq.Expressions.Expression> expression) where TProperty : struct, System.IComparable, System.IComparable => throw null; + public static ServiceStack.FluentValidation.IRuleBuilderOptions LessThan(this ServiceStack.FluentValidation.IRuleBuilder ruleBuilder, System.Linq.Expressions.Expression> expression) where TProperty : System.IComparable, System.IComparable => throw null; + public static ServiceStack.FluentValidation.IRuleBuilderOptions LessThanOrEqualTo(this ServiceStack.FluentValidation.IRuleBuilder ruleBuilder, TProperty valueToCompare) where TProperty : struct, System.IComparable, System.IComparable => throw null; + public static ServiceStack.FluentValidation.IRuleBuilderOptions LessThanOrEqualTo(this ServiceStack.FluentValidation.IRuleBuilder ruleBuilder, System.Linq.Expressions.Expression> expression) where TProperty : struct, System.IComparable, System.IComparable => throw null; + public static ServiceStack.FluentValidation.IRuleBuilderOptions LessThanOrEqualTo(this ServiceStack.FluentValidation.IRuleBuilder ruleBuilder, System.Linq.Expressions.Expression> expression) where TProperty : struct, System.IComparable, System.IComparable => throw null; + public static ServiceStack.FluentValidation.IRuleBuilderOptions LessThanOrEqualTo(this ServiceStack.FluentValidation.IRuleBuilder ruleBuilder, TProperty valueToCompare) where TProperty : System.IComparable, System.IComparable => throw null; + public static ServiceStack.FluentValidation.IRuleBuilderOptions LessThanOrEqualTo(this ServiceStack.FluentValidation.IRuleBuilder ruleBuilder, System.Linq.Expressions.Expression> expression) where TProperty : struct, System.IComparable, System.IComparable => throw null; + public static ServiceStack.FluentValidation.IRuleBuilderOptions LessThanOrEqualTo(this ServiceStack.FluentValidation.IRuleBuilder ruleBuilder, System.Linq.Expressions.Expression> expression) where TProperty : System.IComparable, System.IComparable => throw null; + public static ServiceStack.FluentValidation.IRuleBuilderOptions Matches(this ServiceStack.FluentValidation.IRuleBuilder ruleBuilder, string expression, System.Text.RegularExpressions.RegexOptions options) => throw null; + public static ServiceStack.FluentValidation.IRuleBuilderOptions Matches(this ServiceStack.FluentValidation.IRuleBuilder ruleBuilder, string expression) => throw null; + public static ServiceStack.FluentValidation.IRuleBuilderOptions Matches(this ServiceStack.FluentValidation.IRuleBuilder ruleBuilder, System.Text.RegularExpressions.Regex regex) => throw null; + public static ServiceStack.FluentValidation.IRuleBuilderOptions Matches(this ServiceStack.FluentValidation.IRuleBuilder ruleBuilder, System.Func expression, System.Text.RegularExpressions.RegexOptions options) => throw null; + public static ServiceStack.FluentValidation.IRuleBuilderOptions Matches(this ServiceStack.FluentValidation.IRuleBuilder ruleBuilder, System.Func expression) => throw null; + public static ServiceStack.FluentValidation.IRuleBuilderOptions Matches(this ServiceStack.FluentValidation.IRuleBuilder ruleBuilder, System.Func regex) => throw null; + public static ServiceStack.FluentValidation.IRuleBuilderOptions MaximumLength(this ServiceStack.FluentValidation.IRuleBuilder ruleBuilder, int maximumLength) => throw null; + public static ServiceStack.FluentValidation.IRuleBuilderOptions MinimumLength(this ServiceStack.FluentValidation.IRuleBuilder ruleBuilder, int minimumLength) => throw null; + public static ServiceStack.FluentValidation.IRuleBuilderOptions Must(this ServiceStack.FluentValidation.IRuleBuilder ruleBuilder, System.Func predicate) => throw null; + public static ServiceStack.FluentValidation.IRuleBuilderOptions Must(this ServiceStack.FluentValidation.IRuleBuilder ruleBuilder, System.Func predicate) => throw null; + public static ServiceStack.FluentValidation.IRuleBuilderOptions Must(this ServiceStack.FluentValidation.IRuleBuilder ruleBuilder, System.Func predicate) => throw null; + public static ServiceStack.FluentValidation.IRuleBuilderOptions MustAsync(this ServiceStack.FluentValidation.IRuleBuilder ruleBuilder, System.Func> predicate) => throw null; + public static ServiceStack.FluentValidation.IRuleBuilderOptions MustAsync(this ServiceStack.FluentValidation.IRuleBuilder ruleBuilder, System.Func> predicate) => throw null; + public static ServiceStack.FluentValidation.IRuleBuilderOptions MustAsync(this ServiceStack.FluentValidation.IRuleBuilder ruleBuilder, System.Func> predicate) => throw null; + public static ServiceStack.FluentValidation.IRuleBuilderOptions NotEmpty(this ServiceStack.FluentValidation.IRuleBuilder ruleBuilder) => throw null; + public static ServiceStack.FluentValidation.IRuleBuilderOptions NotEqual(this ServiceStack.FluentValidation.IRuleBuilder ruleBuilder, TProperty toCompare, System.Collections.IEqualityComparer comparer = default(System.Collections.IEqualityComparer)) => throw null; + public static ServiceStack.FluentValidation.IRuleBuilderOptions NotEqual(this ServiceStack.FluentValidation.IRuleBuilder ruleBuilder, System.Linq.Expressions.Expression> expression, System.Collections.IEqualityComparer comparer = default(System.Collections.IEqualityComparer)) => throw null; + public static ServiceStack.FluentValidation.IRuleBuilderOptions NotNull(this ServiceStack.FluentValidation.IRuleBuilder ruleBuilder) => throw null; + public static ServiceStack.FluentValidation.IRuleBuilderOptions Null(this ServiceStack.FluentValidation.IRuleBuilder ruleBuilder) => throw null; + public static ServiceStack.FluentValidation.IRuleBuilderOptions ScalePrecision(this ServiceStack.FluentValidation.IRuleBuilder ruleBuilder, int scale, int precision, bool ignoreTrailingZeros = default(bool)) => throw null; + public static ServiceStack.FluentValidation.IRuleBuilderOptions ScalePrecision(this ServiceStack.FluentValidation.IRuleBuilder ruleBuilder, int scale, int precision, bool ignoreTrailingZeros = default(bool)) => throw null; + public static ServiceStack.FluentValidation.IRuleBuilderOptions SetInheritanceValidator(this ServiceStack.FluentValidation.IRuleBuilder ruleBuilder, System.Action> validatorConfiguration) => throw null; + public static ServiceStack.FluentValidation.Results.ValidationResult Validate(this ServiceStack.FluentValidation.IValidator validator, T instance, params string[] properties) => throw null; + public static ServiceStack.FluentValidation.Results.ValidationResult Validate(this ServiceStack.FluentValidation.IValidator validator, T instance, params System.Linq.Expressions.Expression>[] propertyExpressions) => throw null; + public static ServiceStack.FluentValidation.Results.ValidationResult Validate(this ServiceStack.FluentValidation.IValidator validator, T instance, System.Action> options) => throw null; + public static ServiceStack.FluentValidation.Results.ValidationResult Validate(this ServiceStack.FluentValidation.IValidator validator, T instance, ServiceStack.FluentValidation.Internal.IValidatorSelector selector = default(ServiceStack.FluentValidation.Internal.IValidatorSelector), string ruleSet = default(string)) => throw null; + public static void ValidateAndThrow(this ServiceStack.FluentValidation.IValidator validator, T instance, string ruleSet) => throw null; + public static void ValidateAndThrow(this ServiceStack.FluentValidation.IValidator validator, T instance) => throw null; + public static System.Threading.Tasks.Task ValidateAndThrowAsync(this ServiceStack.FluentValidation.IValidator validator, T instance, string ruleSet, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task ValidateAndThrowAsync(this ServiceStack.FluentValidation.IValidator validator, T instance, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) => throw null; + public static System.Threading.Tasks.Task ValidateAsync(this ServiceStack.FluentValidation.IValidator validator, T instance, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken), params string[] properties) => throw null; + public static System.Threading.Tasks.Task ValidateAsync(this ServiceStack.FluentValidation.IValidator validator, T instance, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken), params System.Linq.Expressions.Expression>[] propertyExpressions) => throw null; + public static System.Threading.Tasks.Task ValidateAsync(this ServiceStack.FluentValidation.IValidator validator, T instance, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken), ServiceStack.FluentValidation.Internal.IValidatorSelector selector = default(ServiceStack.FluentValidation.Internal.IValidatorSelector), string ruleSet = default(string)) => throw null; + public static System.Threading.Tasks.Task ValidateAsync(this ServiceStack.FluentValidation.IValidator validator, T instance, System.Action> options, System.Threading.CancellationToken cancellation = default(System.Threading.CancellationToken)) => throw null; + } + + // Generated from `ServiceStack.FluentValidation.DefaultValidatorExtensionsServiceStack` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class DefaultValidatorExtensionsServiceStack + { + public static void ValidateAndThrow(this ServiceStack.FluentValidation.IValidator validator, T instance, ServiceStack.ApplyTo ruleSet) => throw null; + public static System.Threading.Tasks.Task ValidateAndThrowAsync(this ServiceStack.FluentValidation.IValidator validator, T instance, ServiceStack.ApplyTo ruleSet) => throw null; + } + + // Generated from `ServiceStack.FluentValidation.DefaultValidatorOptions` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class DefaultValidatorOptions + { + public static ServiceStack.FluentValidation.IRuleBuilderInitialCollection Cascade(this ServiceStack.FluentValidation.IRuleBuilderInitialCollection ruleBuilder, ServiceStack.FluentValidation.CascadeMode cascadeMode) => throw null; + public static ServiceStack.FluentValidation.IRuleBuilderInitial Cascade(this ServiceStack.FluentValidation.IRuleBuilderInitial ruleBuilder, ServiceStack.FluentValidation.CascadeMode cascadeMode) => throw null; + public static ServiceStack.FluentValidation.IRuleBuilderOptions DependentRules(this ServiceStack.FluentValidation.IRuleBuilderOptions rule, System.Action action) => throw null; + public static string GetStringForValidator(this ServiceStack.FluentValidation.Resources.ILanguageManager languageManager) => throw null; + public static ServiceStack.FluentValidation.IRuleBuilderOptions OnAnyFailure(this ServiceStack.FluentValidation.IRuleBuilderOptions rule, System.Action onFailure) => throw null; + public static ServiceStack.FluentValidation.IRuleBuilderOptions OnAnyFailure(this ServiceStack.FluentValidation.IRuleBuilderOptions rule, System.Action> onFailure) => throw null; + public static ServiceStack.FluentValidation.IRuleBuilderOptions OnFailure(this ServiceStack.FluentValidation.IRuleBuilderOptions rule, System.Action onFailure) => throw null; + public static ServiceStack.FluentValidation.IRuleBuilderOptions OnFailure(this ServiceStack.FluentValidation.IRuleBuilderOptions rule, System.Action onFailure) => throw null; + public static ServiceStack.FluentValidation.IRuleBuilderOptions OnFailure(this ServiceStack.FluentValidation.IRuleBuilderOptions rule, System.Action onFailure) => throw null; + public static ServiceStack.FluentValidation.IRuleBuilderInitialCollection OverrideIndexer(this ServiceStack.FluentValidation.IRuleBuilderInitialCollection rule, System.Func, TCollectionElement, int, string> callback) => throw null; + public static ServiceStack.FluentValidation.IRuleBuilderOptions OverridePropertyName(this ServiceStack.FluentValidation.IRuleBuilderOptions rule, string propertyName) => throw null; + public static ServiceStack.FluentValidation.IRuleBuilderOptions OverridePropertyName(this ServiceStack.FluentValidation.IRuleBuilderOptions rule, System.Linq.Expressions.Expression> expr) => throw null; + public static ServiceStack.FluentValidation.IRuleBuilderOptions Unless(this ServiceStack.FluentValidation.IRuleBuilderOptions rule, System.Func predicate, ServiceStack.FluentValidation.ApplyConditionTo applyConditionTo = default(ServiceStack.FluentValidation.ApplyConditionTo)) => throw null; + public static ServiceStack.FluentValidation.IRuleBuilderOptions Unless(this ServiceStack.FluentValidation.IRuleBuilderOptions rule, System.Func, bool> predicate, ServiceStack.FluentValidation.ApplyConditionTo applyConditionTo = default(ServiceStack.FluentValidation.ApplyConditionTo)) => throw null; + public static ServiceStack.FluentValidation.IRuleBuilderOptions UnlessAsync(this ServiceStack.FluentValidation.IRuleBuilderOptions rule, System.Func> predicate, ServiceStack.FluentValidation.ApplyConditionTo applyConditionTo = default(ServiceStack.FluentValidation.ApplyConditionTo)) => throw null; + public static ServiceStack.FluentValidation.IRuleBuilderOptions UnlessAsync(this ServiceStack.FluentValidation.IRuleBuilderOptions rule, System.Func, System.Threading.CancellationToken, System.Threading.Tasks.Task> predicate, ServiceStack.FluentValidation.ApplyConditionTo applyConditionTo = default(ServiceStack.FluentValidation.ApplyConditionTo)) => throw null; + public static ServiceStack.FluentValidation.IRuleBuilderOptions When(this ServiceStack.FluentValidation.IRuleBuilderOptions rule, System.Func predicate, ServiceStack.FluentValidation.ApplyConditionTo applyConditionTo = default(ServiceStack.FluentValidation.ApplyConditionTo)) => throw null; + public static ServiceStack.FluentValidation.IRuleBuilderOptions When(this ServiceStack.FluentValidation.IRuleBuilderOptions rule, System.Func, bool> predicate, ServiceStack.FluentValidation.ApplyConditionTo applyConditionTo = default(ServiceStack.FluentValidation.ApplyConditionTo)) => throw null; + public static ServiceStack.FluentValidation.IRuleBuilderOptions WhenAsync(this ServiceStack.FluentValidation.IRuleBuilderOptions rule, System.Func> predicate, ServiceStack.FluentValidation.ApplyConditionTo applyConditionTo = default(ServiceStack.FluentValidation.ApplyConditionTo)) => throw null; + public static ServiceStack.FluentValidation.IRuleBuilderOptions WhenAsync(this ServiceStack.FluentValidation.IRuleBuilderOptions rule, System.Func, System.Threading.CancellationToken, System.Threading.Tasks.Task> predicate, ServiceStack.FluentValidation.ApplyConditionTo applyConditionTo = default(ServiceStack.FluentValidation.ApplyConditionTo)) => throw null; + public static ServiceStack.FluentValidation.IRuleBuilderInitialCollection Where(this ServiceStack.FluentValidation.IRuleBuilderInitialCollection rule, System.Func predicate) => throw null; + public static ServiceStack.FluentValidation.IRuleBuilderOptions WithErrorCode(this ServiceStack.FluentValidation.IRuleBuilderOptions rule, string errorCode) => throw null; + public static ServiceStack.FluentValidation.IRuleBuilderOptions WithMessage(this ServiceStack.FluentValidation.IRuleBuilderOptions rule, string errorMessage) => throw null; + public static ServiceStack.FluentValidation.IRuleBuilderOptions WithMessage(this ServiceStack.FluentValidation.IRuleBuilderOptions rule, System.Func messageProvider) => throw null; + public static ServiceStack.FluentValidation.IRuleBuilderOptions WithMessage(this ServiceStack.FluentValidation.IRuleBuilderOptions rule, System.Func messageProvider) => throw null; + public static ServiceStack.FluentValidation.IRuleBuilderOptions WithName(this ServiceStack.FluentValidation.IRuleBuilderOptions rule, string overridePropertyName) => throw null; + public static ServiceStack.FluentValidation.IRuleBuilderOptions WithName(this ServiceStack.FluentValidation.IRuleBuilderOptions rule, System.Func nameProvider) => throw null; + public static ServiceStack.FluentValidation.IRuleBuilderOptions WithSeverity(this ServiceStack.FluentValidation.IRuleBuilderOptions rule, System.Func severityProvider) => throw null; + public static ServiceStack.FluentValidation.IRuleBuilderOptions WithSeverity(this ServiceStack.FluentValidation.IRuleBuilderOptions rule, System.Func severityProvider) => throw null; + public static ServiceStack.FluentValidation.IRuleBuilderOptions WithSeverity(this ServiceStack.FluentValidation.IRuleBuilderOptions rule, ServiceStack.FluentValidation.Severity severity) => throw null; + public static ServiceStack.FluentValidation.IRuleBuilderOptions WithState(this ServiceStack.FluentValidation.IRuleBuilderOptions rule, System.Func stateProvider) => throw null; + public static ServiceStack.FluentValidation.IRuleBuilderOptions WithState(this ServiceStack.FluentValidation.IRuleBuilderOptions rule, System.Func stateProvider) => throw null; + } + + // Generated from `ServiceStack.FluentValidation.ICommonContext` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface ICommonContext + { + object InstanceToValidate { get; } + ServiceStack.FluentValidation.ICommonContext ParentContext { get; } + object PropertyValue { get; } + } + + // Generated from `ServiceStack.FluentValidation.IConditionBuilder` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IConditionBuilder + { + void Otherwise(System.Action action); + } + + // Generated from `ServiceStack.FluentValidation.IDefaultValidator` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IDefaultValidator + { + } + + // Generated from `ServiceStack.FluentValidation.IParameterValidatorFactory` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IParameterValidatorFactory + { + ServiceStack.FluentValidation.IValidator GetValidator(System.Reflection.ParameterInfo parameterInfo); + } + + // Generated from `ServiceStack.FluentValidation.IRuleBuilder<,>` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IRuleBuilder + { + ServiceStack.FluentValidation.IRuleBuilderOptions SetValidator(System.Func validatorProvider, params string[] ruleSets) where TValidator : ServiceStack.FluentValidation.IValidator; + ServiceStack.FluentValidation.IRuleBuilderOptions SetValidator(System.Func validatorProvider, params string[] ruleSets) where TValidator : ServiceStack.FluentValidation.IValidator; + ServiceStack.FluentValidation.IRuleBuilderOptions SetValidator(ServiceStack.FluentValidation.Validators.IPropertyValidator validator); + ServiceStack.FluentValidation.IRuleBuilderOptions SetValidator(ServiceStack.FluentValidation.IValidator validator, params string[] ruleSets); + } + + // Generated from `ServiceStack.FluentValidation.IRuleBuilderInitial<,>` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IRuleBuilderInitial : ServiceStack.FluentValidation.Internal.IConfigurable>, ServiceStack.FluentValidation.IRuleBuilder + { + ServiceStack.FluentValidation.IRuleBuilderInitial Transform(System.Func transformationFunc); + } + + // Generated from `ServiceStack.FluentValidation.IRuleBuilderInitialCollection<,>` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IRuleBuilderInitialCollection : ServiceStack.FluentValidation.Internal.IConfigurable, ServiceStack.FluentValidation.IRuleBuilderInitialCollection>, ServiceStack.FluentValidation.IRuleBuilder + { + ServiceStack.FluentValidation.IRuleBuilderInitial Transform(System.Func transformationFunc); + } + + // Generated from `ServiceStack.FluentValidation.IRuleBuilderOptions<,>` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IRuleBuilderOptions : ServiceStack.FluentValidation.Internal.IConfigurable>, ServiceStack.FluentValidation.IRuleBuilder + { + } + + // Generated from `ServiceStack.FluentValidation.IServiceStackValidator` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IServiceStackValidator + { + void RemovePropertyRules(System.Func where); + } + + // Generated from `ServiceStack.FluentValidation.IValidationContext` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IValidationContext : ServiceStack.FluentValidation.ICommonContext + { + bool IsChildCollectionContext { get; } + bool IsChildContext { get; } + ServiceStack.FluentValidation.Internal.PropertyChain PropertyChain { get; } + ServiceStack.Web.IRequest Request { get; set; } + System.Collections.Generic.IDictionary RootContextData { get; } + ServiceStack.FluentValidation.Internal.IValidatorSelector Selector { get; } + } + + // Generated from `ServiceStack.FluentValidation.IValidationRule` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IValidationRule + { + void ApplyAsyncCondition(System.Func> predicate, ServiceStack.FluentValidation.ApplyConditionTo applyConditionTo = default(ServiceStack.FluentValidation.ApplyConditionTo)); + void ApplyCondition(System.Func predicate, ServiceStack.FluentValidation.ApplyConditionTo applyConditionTo = default(ServiceStack.FluentValidation.ApplyConditionTo)); + void ApplySharedAsyncCondition(System.Func> condition); + void ApplySharedCondition(System.Func condition); + string[] RuleSets { get; set; } + System.Collections.Generic.IEnumerable Validate(ServiceStack.FluentValidation.IValidationContext context); + System.Threading.Tasks.Task> ValidateAsync(ServiceStack.FluentValidation.IValidationContext context, System.Threading.CancellationToken cancellation); + System.Collections.Generic.IEnumerable Validators { get; } + } + + // Generated from `ServiceStack.FluentValidation.IValidator` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IValidator + { + bool CanValidateInstancesOfType(System.Type type); + ServiceStack.FluentValidation.IValidatorDescriptor CreateDescriptor(); + ServiceStack.FluentValidation.Results.ValidationResult Validate(ServiceStack.FluentValidation.IValidationContext context); + System.Threading.Tasks.Task ValidateAsync(ServiceStack.FluentValidation.IValidationContext context, System.Threading.CancellationToken cancellation = default(System.Threading.CancellationToken)); + } + + // Generated from `ServiceStack.FluentValidation.IValidator<>` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IValidator : ServiceStack.FluentValidation.IValidator + { + ServiceStack.FluentValidation.CascadeMode CascadeMode { get; set; } + ServiceStack.FluentValidation.Results.ValidationResult Validate(T instance); + System.Threading.Tasks.Task ValidateAsync(T instance, System.Threading.CancellationToken cancellation = default(System.Threading.CancellationToken)); + } + + // Generated from `ServiceStack.FluentValidation.IValidatorDescriptor` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IValidatorDescriptor + { + System.Linq.ILookup GetMembersWithValidators(); + string GetName(string property); + System.Collections.Generic.IEnumerable GetRulesForMember(string name); + System.Collections.Generic.IEnumerable GetValidatorsForMember(string name); + } + + // Generated from `ServiceStack.FluentValidation.IValidatorFactory` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IValidatorFactory + { + ServiceStack.FluentValidation.IValidator GetValidator(); + ServiceStack.FluentValidation.IValidator GetValidator(System.Type type); + } + + // Generated from `ServiceStack.FluentValidation.InlineValidator<>` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class InlineValidator : ServiceStack.FluentValidation.AbstractValidator + { + public void Add(System.Func, ServiceStack.FluentValidation.IRuleBuilderOptions> ruleCreator) => throw null; + public InlineValidator() => throw null; + } + + // Generated from `ServiceStack.FluentValidation.PropertyValidatorOptions` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class PropertyValidatorOptions + { + public void ApplyAsyncCondition(System.Func> condition) => throw null; + public void ApplyCondition(System.Func condition) => throw null; + public System.Func> AsyncCondition { get => throw null; set => throw null; } + public System.Func Condition { get => throw null; set => throw null; } + public System.Func CustomStateProvider { get => throw null; set => throw null; } + public string ErrorCode { get => throw null; set => throw null; } + public ServiceStack.FluentValidation.Resources.IStringSource ErrorCodeSource { get => throw null; set => throw null; } + public ServiceStack.FluentValidation.Resources.IStringSource ErrorMessageSource { get => throw null; set => throw null; } + protected virtual string GetDefaultMessageTemplate() => throw null; + public string GetErrorMessageTemplate(ServiceStack.FluentValidation.Validators.PropertyValidatorContext context) => throw null; + public bool HasAsyncCondition { get => throw null; } + public bool HasCondition { get => throw null; } + public PropertyValidatorOptions() => throw null; + public void SetErrorMessage(string errorMessage) => throw null; + public void SetErrorMessage(System.Func errorFactory) => throw null; + public System.Func SeverityProvider { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.FluentValidation.Severity` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public enum Severity + { + Error, + Info, + Warning, + } + + // Generated from `ServiceStack.FluentValidation.ValidationContext<>` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ValidationContext : ServiceStack.FluentValidation.IValidationContext, ServiceStack.FluentValidation.ICommonContext + { + public ServiceStack.FluentValidation.ValidationContext CloneForChildCollectionValidator(TNew instanceToValidate, bool preserveParentContext = default(bool)) => throw null; + public ServiceStack.FluentValidation.ValidationContext CloneForChildValidator(TChild instanceToValidate, bool preserveParentContext = default(bool), ServiceStack.FluentValidation.Internal.IValidatorSelector selector = default(ServiceStack.FluentValidation.Internal.IValidatorSelector)) => throw null; + public static ServiceStack.FluentValidation.ValidationContext CreateWithOptions(T instanceToValidate, System.Action> options) => throw null; + public static ServiceStack.FluentValidation.ValidationContext GetFromNonGenericContext(ServiceStack.FluentValidation.IValidationContext context) => throw null; + public T InstanceToValidate { get => throw null; set => throw null; } + object ServiceStack.FluentValidation.ICommonContext.InstanceToValidate { get => throw null; } + public virtual bool IsChildCollectionContext { get => throw null; set => throw null; } + public virtual bool IsChildContext { get => throw null; set => throw null; } + ServiceStack.FluentValidation.ICommonContext ServiceStack.FluentValidation.ICommonContext.ParentContext { get => throw null; } + public ServiceStack.FluentValidation.Internal.PropertyChain PropertyChain { get => throw null; set => throw null; } + object ServiceStack.FluentValidation.ICommonContext.PropertyValue { get => throw null; } + public ServiceStack.Web.IRequest Request { get => throw null; set => throw null; } + public System.Collections.Generic.IDictionary RootContextData { get => throw null; set => throw null; } + public ServiceStack.FluentValidation.Internal.IValidatorSelector Selector { get => throw null; set => throw null; } + public bool ThrowOnFailures { get => throw null; set => throw null; } + public ValidationContext(T instanceToValidate, ServiceStack.FluentValidation.Internal.PropertyChain propertyChain, ServiceStack.FluentValidation.Internal.IValidatorSelector validatorSelector) => throw null; + public ValidationContext(T instanceToValidate) => throw null; + } + + // Generated from `ServiceStack.FluentValidation.ValidationErrors` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class ValidationErrors + { + public const string CreditCard = default; + public const string Email = default; + public const string Empty = default; + public const string Enum = default; + public const string Equal = default; + public const string ExclusiveBetween = default; + public const string GreaterThan = default; + public const string GreaterThanOrEqual = default; + public const string InclusiveBetween = default; + public const string Length = default; + public const string LessThan = default; + public const string LessThanOrEqual = default; + public const string NotEmpty = default; + public const string NotEqual = default; + public const string NotNull = default; + public const string Null = default; + public const string Predicate = default; + public const string RegularExpression = default; + public const string ScalePrecision = default; + } + + // Generated from `ServiceStack.FluentValidation.ValidationException` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ValidationException : System.Exception, ServiceStack.Model.IResponseStatusConvertible + { + public System.Collections.Generic.IEnumerable Errors { get => throw null; set => throw null; } + public override void GetObjectData(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) => throw null; + public ServiceStack.ResponseStatus ToResponseStatus() => throw null; + public ValidationException(string message, System.Collections.Generic.IEnumerable errors, bool appendDefaultMessage) => throw null; + public ValidationException(string message, System.Collections.Generic.IEnumerable errors) => throw null; + public ValidationException(string message) => throw null; + public ValidationException(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) => throw null; + public ValidationException(System.Collections.Generic.IEnumerable errors) => throw null; + } + + // Generated from `ServiceStack.FluentValidation.ValidatorConfiguration` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ValidatorConfiguration + { + public ServiceStack.FluentValidation.CascadeMode CascadeMode { get => throw null; set => throw null; } + public bool DisableAccessorCache { get => throw null; set => throw null; } + public System.Func DisplayNameResolver { get => throw null; set => throw null; } + public System.Func ErrorCodeResolver { get => throw null; set => throw null; } + public ServiceStack.FluentValidation.Resources.ILanguageManager LanguageManager { get => throw null; set => throw null; } + public System.Func MessageFormatterFactory { get => throw null; set => throw null; } + public string PropertyChainSeparator { get => throw null; set => throw null; } + public System.Func PropertyNameResolver { get => throw null; set => throw null; } + public ValidatorConfiguration() => throw null; + public ServiceStack.FluentValidation.ValidatorSelectorOptions ValidatorSelectors { get => throw null; } + } + + // Generated from `ServiceStack.FluentValidation.ValidatorDescriptor<>` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ValidatorDescriptor : ServiceStack.FluentValidation.IValidatorDescriptor + { + public virtual System.Linq.ILookup GetMembersWithValidators() => throw null; + public virtual string GetName(string property) => throw null; + public virtual string GetName(System.Linq.Expressions.Expression> propertyExpression) => throw null; + public System.Collections.Generic.IEnumerable.RulesetMetadata> GetRulesByRuleset() => throw null; + public System.Collections.Generic.IEnumerable GetRulesForMember(string name) => throw null; + public System.Collections.Generic.IEnumerable GetValidatorsForMember(ServiceStack.FluentValidation.Internal.MemberAccessor accessor) => throw null; + public System.Collections.Generic.IEnumerable GetValidatorsForMember(string name) => throw null; + protected System.Collections.Generic.IEnumerable Rules { get => throw null; set => throw null; } + // Generated from `ServiceStack.FluentValidation.ValidatorDescriptor<>+RulesetMetadata` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class RulesetMetadata + { + public string Name { get => throw null; set => throw null; } + public System.Collections.Generic.IEnumerable Rules { get => throw null; set => throw null; } + public RulesetMetadata(string name, System.Collections.Generic.IEnumerable rules) => throw null; + } + + + public ValidatorDescriptor(System.Collections.Generic.IEnumerable ruleBuilders) => throw null; + } + + // Generated from `ServiceStack.FluentValidation.ValidatorFactoryBase` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public abstract class ValidatorFactoryBase : ServiceStack.FluentValidation.IValidatorFactory + { + public abstract ServiceStack.FluentValidation.IValidator CreateInstance(System.Type validatorType); + public ServiceStack.FluentValidation.IValidator GetValidator() => throw null; + public ServiceStack.FluentValidation.IValidator GetValidator(System.Type type) => throw null; + protected ValidatorFactoryBase() => throw null; + } + + // Generated from `ServiceStack.FluentValidation.ValidatorOptions` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class ValidatorOptions + { + public static ServiceStack.FluentValidation.CascadeMode CascadeMode { get => throw null; set => throw null; } + public static bool DisableAccessorCache { get => throw null; set => throw null; } + public static System.Func DisplayNameResolver { get => throw null; set => throw null; } + public static System.Func ErrorCodeResolver { get => throw null; set => throw null; } + public static ServiceStack.FluentValidation.ValidatorConfiguration Global { get => throw null; } + public static ServiceStack.FluentValidation.Resources.ILanguageManager LanguageManager { get => throw null; set => throw null; } + public static System.Func MessageFormatterFactory { get => throw null; set => throw null; } + public static string PropertyChainSeparator { get => throw null; set => throw null; } + public static System.Func PropertyNameResolver { get => throw null; set => throw null; } + public static ServiceStack.FluentValidation.ValidatorSelectorOptions ValidatorSelectors { get => throw null; } + } + + // Generated from `ServiceStack.FluentValidation.ValidatorSelectorOptions` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ValidatorSelectorOptions + { + public System.Func DefaultValidatorSelectorFactory { get => throw null; set => throw null; } + public System.Func MemberNameValidatorSelectorFactory { get => throw null; set => throw null; } + public System.Func RulesetValidatorSelectorFactory { get => throw null; set => throw null; } + public ValidatorSelectorOptions() => throw null; + } + + namespace Attributes + { + // Generated from `ServiceStack.FluentValidation.Attributes.AttributedValidatorFactory` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class AttributedValidatorFactory : ServiceStack.FluentValidation.IValidatorFactory, ServiceStack.FluentValidation.IParameterValidatorFactory + { + public AttributedValidatorFactory(System.Func instanceFactory) => throw null; + public AttributedValidatorFactory() => throw null; + public virtual ServiceStack.FluentValidation.IValidator GetValidator(System.Type type) => throw null; + public virtual ServiceStack.FluentValidation.IValidator GetValidator(System.Reflection.ParameterInfo parameterInfo) => throw null; + public ServiceStack.FluentValidation.IValidator GetValidator() => throw null; + } + + // Generated from `ServiceStack.FluentValidation.Attributes.ValidatorAttribute` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ValidatorAttribute : System.Attribute + { + public ValidatorAttribute(System.Type validatorType) => throw null; + public System.Type ValidatorType { get => throw null; } + } + + } + namespace Internal + { + // Generated from `ServiceStack.FluentValidation.Internal.AccessorCache<>` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class AccessorCache + { + public static void Clear() => throw null; + public static System.Func GetCachedAccessor(System.Reflection.MemberInfo member, System.Linq.Expressions.Expression> expression, bool bypassCache = default(bool)) => throw null; + } + + // Generated from `ServiceStack.FluentValidation.Internal.CollectionPropertyRule<,>` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class CollectionPropertyRule : ServiceStack.FluentValidation.Internal.PropertyRule + { + public CollectionPropertyRule(System.Reflection.MemberInfo member, System.Func propertyFunc, System.Linq.Expressions.LambdaExpression expression, System.Func cascadeModeThunk, System.Type typeToValidate, System.Type containerType) : base(default(System.Reflection.MemberInfo), default(System.Func), default(System.Linq.Expressions.LambdaExpression), default(System.Func), default(System.Type), default(System.Type)) => throw null; + public static ServiceStack.FluentValidation.Internal.CollectionPropertyRule Create(System.Linq.Expressions.Expression>> expression, System.Func cascadeModeThunk) => throw null; + public System.Func Filter { get => throw null; set => throw null; } + public System.Func, TElement, int, string> IndexBuilder { get => throw null; set => throw null; } + protected override System.Collections.Generic.IEnumerable InvokePropertyValidator(ServiceStack.FluentValidation.IValidationContext context, ServiceStack.FluentValidation.Validators.IPropertyValidator validator, string propertyName) => throw null; + protected override System.Threading.Tasks.Task> InvokePropertyValidatorAsync(ServiceStack.FluentValidation.IValidationContext context, ServiceStack.FluentValidation.Validators.IPropertyValidator validator, string propertyName, System.Threading.CancellationToken cancellation) => throw null; + } + + // Generated from `ServiceStack.FluentValidation.Internal.Comparer` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class Comparer + { + public static int GetComparisonResult(System.IComparable value, System.IComparable valueToCompare) => throw null; + public static bool GetEqualsResult(System.IComparable value, System.IComparable valueToCompare) => throw null; + public static bool TryCompare(System.IComparable value, System.IComparable valueToCompare, out int result) => throw null; + } + + // Generated from `ServiceStack.FluentValidation.Internal.DefaultValidatorSelector` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class DefaultValidatorSelector : ServiceStack.FluentValidation.Internal.IValidatorSelector + { + public bool CanExecute(ServiceStack.FluentValidation.IValidationRule rule, string propertyPath, ServiceStack.FluentValidation.IValidationContext context) => throw null; + public DefaultValidatorSelector() => throw null; + } + + // Generated from `ServiceStack.FluentValidation.Internal.Extensions` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class Extensions + { + public static System.Func CoerceToNonGeneric(this System.Func func) => throw null; + public static System.Func CoerceToNonGeneric(this System.Func func) => throw null; + public static System.Func CoerceToNonGeneric(this System.Func func) => throw null; + public static System.Func CoerceToNonGeneric(this System.Func func) => throw null; + public static System.Func> CoerceToNonGeneric(this System.Func> func) => throw null; + public static System.Func> CoerceToNonGeneric(this System.Func> func) => throw null; + public static System.Func CoerceToNonGeneric(this System.Func func) => throw null; + public static System.Func CoerceToNonGeneric(this System.Func func) => throw null; + public static System.Action CoerceToNonGeneric(this System.Action action) => throw null; + public static System.Reflection.MemberInfo GetMember(this System.Linq.Expressions.Expression> expression) => throw null; + public static System.Reflection.MemberInfo GetMember(this System.Linq.Expressions.LambdaExpression expression) => throw null; + public static bool IsAsync(this ServiceStack.FluentValidation.IValidationContext ctx) => throw null; + public static bool IsParameterExpression(this System.Linq.Expressions.LambdaExpression expression) => throw null; + public static string SplitPascalCase(this string input) => throw null; + } + + // Generated from `ServiceStack.FluentValidation.Internal.IConfigurable<,>` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IConfigurable + { + TNext Configure(System.Action configurator); + } + + // Generated from `ServiceStack.FluentValidation.Internal.IExposesParentValidator<>` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + internal interface IExposesParentValidator + { + } + + // Generated from `ServiceStack.FluentValidation.Internal.IIncludeRule` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IIncludeRule + { + } + + // Generated from `ServiceStack.FluentValidation.Internal.IValidatorSelector` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IValidatorSelector + { + bool CanExecute(ServiceStack.FluentValidation.IValidationRule rule, string propertyPath, ServiceStack.FluentValidation.IValidationContext context); + } + + // Generated from `ServiceStack.FluentValidation.Internal.IncludeRule<>` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class IncludeRule : ServiceStack.FluentValidation.Internal.PropertyRule, ServiceStack.FluentValidation.Internal.IIncludeRule + { + public static ServiceStack.FluentValidation.Internal.IncludeRule Create(System.Func func, System.Func cascadeModeThunk) where TValidator : ServiceStack.FluentValidation.IValidator => throw null; + public static ServiceStack.FluentValidation.Internal.IncludeRule Create(ServiceStack.FluentValidation.IValidator validator, System.Func cascadeModeThunk) => throw null; + public IncludeRule(System.Func> func, System.Func cascadeModeThunk, System.Type typeToValidate, System.Type containerType, System.Type validatorType) : base(default(System.Reflection.MemberInfo), default(System.Func), default(System.Linq.Expressions.LambdaExpression), default(System.Func), default(System.Type), default(System.Type)) => throw null; + public IncludeRule(ServiceStack.FluentValidation.IValidator validator, System.Func cascadeModeThunk, System.Type typeToValidate, System.Type containerType) : base(default(System.Reflection.MemberInfo), default(System.Func), default(System.Linq.Expressions.LambdaExpression), default(System.Func), default(System.Type), default(System.Type)) => throw null; + public override System.Collections.Generic.IEnumerable Validate(ServiceStack.FluentValidation.IValidationContext context) => throw null; + public override System.Threading.Tasks.Task> ValidateAsync(ServiceStack.FluentValidation.IValidationContext context, System.Threading.CancellationToken cancellation) => throw null; + } + + // Generated from `ServiceStack.FluentValidation.Internal.MemberAccessor<,>` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class MemberAccessor + { + public override bool Equals(object obj) => throw null; + protected bool Equals(ServiceStack.FluentValidation.Internal.MemberAccessor other) => throw null; + public TValue Get(TObject target) => throw null; + public override int GetHashCode() => throw null; + public System.Reflection.MemberInfo Member { get => throw null; set => throw null; } + public MemberAccessor(System.Linq.Expressions.Expression> getExpression, bool writeable) => throw null; + public void Set(TObject target, TValue value) => throw null; + public static implicit operator System.Linq.Expressions.Expression>(ServiceStack.FluentValidation.Internal.MemberAccessor @this) => throw null; + public static implicit operator ServiceStack.FluentValidation.Internal.MemberAccessor(System.Linq.Expressions.Expression> @this) => throw null; + } + + // Generated from `ServiceStack.FluentValidation.Internal.MemberNameValidatorSelector` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class MemberNameValidatorSelector : ServiceStack.FluentValidation.Internal.IValidatorSelector + { + public bool CanExecute(ServiceStack.FluentValidation.IValidationRule rule, string propertyPath, ServiceStack.FluentValidation.IValidationContext context) => throw null; + public static ServiceStack.FluentValidation.Internal.MemberNameValidatorSelector FromExpressions(params System.Linq.Expressions.Expression>[] propertyExpressions) => throw null; + public MemberNameValidatorSelector(System.Collections.Generic.IEnumerable memberNames) => throw null; + public System.Collections.Generic.IEnumerable MemberNames { get => throw null; } + public static string[] MemberNamesFromExpressions(params System.Linq.Expressions.Expression>[] propertyExpressions) => throw null; + } + + // Generated from `ServiceStack.FluentValidation.Internal.MessageBuilderContext` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class MessageBuilderContext : ServiceStack.FluentValidation.ICommonContext + { + public string DisplayName { get => throw null; } + public ServiceStack.FluentValidation.Resources.IStringSource ErrorSource { get => throw null; } + public string GetDefaultMessage() => throw null; + public object InstanceToValidate { get => throw null; } + public MessageBuilderContext(ServiceStack.FluentValidation.Validators.PropertyValidatorContext innerContext, ServiceStack.FluentValidation.Validators.IPropertyValidator propertyValidator) => throw null; + public MessageBuilderContext(ServiceStack.FluentValidation.Validators.PropertyValidatorContext innerContext, ServiceStack.FluentValidation.Resources.IStringSource errorSource, ServiceStack.FluentValidation.Validators.IPropertyValidator propertyValidator) => throw null; + public ServiceStack.FluentValidation.Internal.MessageFormatter MessageFormatter { get => throw null; } + public ServiceStack.FluentValidation.IValidationContext ParentContext { get => throw null; } + ServiceStack.FluentValidation.ICommonContext ServiceStack.FluentValidation.ICommonContext.ParentContext { get => throw null; } + public string PropertyName { get => throw null; } + public ServiceStack.FluentValidation.Validators.IPropertyValidator PropertyValidator { get => throw null; } + public object PropertyValue { get => throw null; } + public ServiceStack.FluentValidation.Internal.PropertyRule Rule { get => throw null; } + public static implicit operator ServiceStack.FluentValidation.Validators.PropertyValidatorContext(ServiceStack.FluentValidation.Internal.MessageBuilderContext ctx) => throw null; + } + + // Generated from `ServiceStack.FluentValidation.Internal.MessageFormatter` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class MessageFormatter + { + public object[] AdditionalArguments { get => throw null; } + public ServiceStack.FluentValidation.Internal.MessageFormatter AppendAdditionalArguments(params object[] additionalArgs) => throw null; + public ServiceStack.FluentValidation.Internal.MessageFormatter AppendArgument(string name, object value) => throw null; + public ServiceStack.FluentValidation.Internal.MessageFormatter AppendPropertyName(string name) => throw null; + public ServiceStack.FluentValidation.Internal.MessageFormatter AppendPropertyValue(object value) => throw null; + public virtual string BuildMessage(string messageTemplate) => throw null; + public MessageFormatter() => throw null; + public System.Collections.Generic.Dictionary PlaceholderValues { get => throw null; } + public const string PropertyName = default; + public const string PropertyValue = default; + protected virtual string ReplacePlaceholdersWithValues(string template, System.Collections.Generic.IDictionary values) => throw null; + } + + // Generated from `ServiceStack.FluentValidation.Internal.PropertyChain` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class PropertyChain + { + public void Add(string propertyName) => throw null; + public void Add(System.Reflection.MemberInfo member) => throw null; + public void AddIndexer(object indexer, bool surroundWithBrackets = default(bool)) => throw null; + public string BuildPropertyName(string propertyName) => throw null; + public int Count { get => throw null; } + public static ServiceStack.FluentValidation.Internal.PropertyChain FromExpression(System.Linq.Expressions.LambdaExpression expression) => throw null; + public bool IsChildChainOf(ServiceStack.FluentValidation.Internal.PropertyChain parentChain) => throw null; + public PropertyChain(System.Collections.Generic.IEnumerable memberNames) => throw null; + public PropertyChain(ServiceStack.FluentValidation.Internal.PropertyChain parent) => throw null; + public PropertyChain() => throw null; + public override string ToString() => throw null; + } + + // Generated from `ServiceStack.FluentValidation.Internal.PropertyRule` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class PropertyRule : ServiceStack.FluentValidation.IValidationRule + { + public void AddValidator(ServiceStack.FluentValidation.Validators.IPropertyValidator validator) => throw null; + public void ApplyAsyncCondition(System.Func> predicate, ServiceStack.FluentValidation.ApplyConditionTo applyConditionTo = default(ServiceStack.FluentValidation.ApplyConditionTo)) => throw null; + public void ApplyCondition(System.Func predicate, ServiceStack.FluentValidation.ApplyConditionTo applyConditionTo = default(ServiceStack.FluentValidation.ApplyConditionTo)) => throw null; + public void ApplySharedAsyncCondition(System.Func> condition) => throw null; + public void ApplySharedCondition(System.Func condition) => throw null; + public System.Func> AsyncCondition { get => throw null; } + public ServiceStack.FluentValidation.CascadeMode CascadeMode { get => throw null; set => throw null; } + public void ClearValidators() => throw null; + public System.Func Condition { get => throw null; } + public static ServiceStack.FluentValidation.Internal.PropertyRule Create(System.Linq.Expressions.Expression> expression, System.Func cascadeModeThunk, bool bypassCache = default(bool)) => throw null; + public static ServiceStack.FluentValidation.Internal.PropertyRule Create(System.Linq.Expressions.Expression> expression) => throw null; + public ServiceStack.FluentValidation.Validators.IPropertyValidator CurrentValidator { get => throw null; } + public System.Collections.Generic.List DependentRules { get => throw null; } + public ServiceStack.FluentValidation.Resources.IStringSource DisplayName { get => throw null; set => throw null; } + public System.Linq.Expressions.LambdaExpression Expression { get => throw null; } + public string GetDisplayName(ServiceStack.FluentValidation.ICommonContext context) => throw null; + public string GetDisplayName() => throw null; + public bool HasAsyncCondition { get => throw null; } + public bool HasCondition { get => throw null; } + protected virtual System.Collections.Generic.IEnumerable InvokePropertyValidator(ServiceStack.FluentValidation.IValidationContext context, ServiceStack.FluentValidation.Validators.IPropertyValidator validator, string propertyName) => throw null; + protected virtual System.Threading.Tasks.Task> InvokePropertyValidatorAsync(ServiceStack.FluentValidation.IValidationContext context, ServiceStack.FluentValidation.Validators.IPropertyValidator validator, string propertyName, System.Threading.CancellationToken cancellation) => throw null; + public System.Reflection.MemberInfo Member { get => throw null; } + public System.Func MessageBuilder { get => throw null; set => throw null; } + public System.Action> OnFailure { get => throw null; set => throw null; } + public System.Func PropertyFunc { get => throw null; } + public string PropertyName { get => throw null; set => throw null; } + public PropertyRule(System.Reflection.MemberInfo member, System.Func propertyFunc, System.Linq.Expressions.LambdaExpression expression, System.Func cascadeModeThunk, System.Type typeToValidate, System.Type containerType) => throw null; + public void RemoveValidator(ServiceStack.FluentValidation.Validators.IPropertyValidator original) => throw null; + public void ReplaceValidator(ServiceStack.FluentValidation.Validators.IPropertyValidator original, ServiceStack.FluentValidation.Validators.IPropertyValidator newValidator) => throw null; + public string[] RuleSets { get => throw null; set => throw null; } + public void SetDisplayName(string name) => throw null; + public void SetDisplayName(System.Func factory) => throw null; + public System.Func Transformer { get => throw null; set => throw null; } + public System.Type TypeToValidate { get => throw null; } + public virtual System.Collections.Generic.IEnumerable Validate(ServiceStack.FluentValidation.IValidationContext context) => throw null; + public virtual System.Threading.Tasks.Task> ValidateAsync(ServiceStack.FluentValidation.IValidationContext context, System.Threading.CancellationToken cancellation) => throw null; + public System.Collections.Generic.IEnumerable Validators { get => throw null; } + } + + // Generated from `ServiceStack.FluentValidation.Internal.RuleBuilder<,>` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class RuleBuilder : ServiceStack.FluentValidation.Internal.IConfigurable>, ServiceStack.FluentValidation.Internal.IConfigurable>, ServiceStack.FluentValidation.Internal.IConfigurable, ServiceStack.FluentValidation.IRuleBuilderInitialCollection>, ServiceStack.FluentValidation.IRuleBuilderOptions, ServiceStack.FluentValidation.IRuleBuilderInitialCollection, ServiceStack.FluentValidation.IRuleBuilderInitial, ServiceStack.FluentValidation.IRuleBuilder + { + ServiceStack.FluentValidation.IRuleBuilderOptions ServiceStack.FluentValidation.Internal.IConfigurable>.Configure(System.Action configurator) => throw null; + ServiceStack.FluentValidation.IRuleBuilderInitialCollection ServiceStack.FluentValidation.Internal.IConfigurable, ServiceStack.FluentValidation.IRuleBuilderInitialCollection>.Configure(System.Action> configurator) => throw null; + ServiceStack.FluentValidation.IRuleBuilderInitial ServiceStack.FluentValidation.Internal.IConfigurable>.Configure(System.Action configurator) => throw null; + public ServiceStack.FluentValidation.IValidator ParentValidator { get => throw null; } + public ServiceStack.FluentValidation.Internal.PropertyRule Rule { get => throw null; } + public RuleBuilder(ServiceStack.FluentValidation.Internal.PropertyRule rule, ServiceStack.FluentValidation.IValidator parent) => throw null; + public ServiceStack.FluentValidation.IRuleBuilderOptions SetValidator(System.Func validatorProvider, params string[] ruleSets) where TValidator : ServiceStack.FluentValidation.IValidator => throw null; + public ServiceStack.FluentValidation.IRuleBuilderOptions SetValidator(System.Func validatorProvider, params string[] ruleSets) where TValidator : ServiceStack.FluentValidation.IValidator => throw null; + public ServiceStack.FluentValidation.IRuleBuilderOptions SetValidator(System.Func validatorProvider) where TValidator : ServiceStack.FluentValidation.IValidator => throw null; + public ServiceStack.FluentValidation.IRuleBuilderOptions SetValidator(ServiceStack.FluentValidation.Validators.IPropertyValidator validator) => throw null; + public ServiceStack.FluentValidation.IRuleBuilderOptions SetValidator(ServiceStack.FluentValidation.IValidator validator, params string[] ruleSets) => throw null; + public ServiceStack.FluentValidation.IRuleBuilderInitial Transform(System.Func transformationFunc) => throw null; + } + + // Generated from `ServiceStack.FluentValidation.Internal.RulesetValidatorSelector` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class RulesetValidatorSelector : ServiceStack.FluentValidation.Internal.IValidatorSelector + { + public virtual bool CanExecute(ServiceStack.FluentValidation.IValidationRule rule, string propertyPath, ServiceStack.FluentValidation.IValidationContext context) => throw null; + public const string DefaultRuleSetName = default; + protected bool IsIncludeRule(ServiceStack.FluentValidation.IValidationRule rule) => throw null; + public string[] RuleSets { get => throw null; } + public RulesetValidatorSelector(params string[] rulesetsToExecute) => throw null; + public const string WildcardRuleSetName = default; + } + + // Generated from `ServiceStack.FluentValidation.Internal.ValidationStrategy<>` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ValidationStrategy + { + public ServiceStack.FluentValidation.Internal.ValidationStrategy IncludeAllRuleSets() => throw null; + public ServiceStack.FluentValidation.Internal.ValidationStrategy IncludeProperties(params string[] properties) => throw null; + public ServiceStack.FluentValidation.Internal.ValidationStrategy IncludeProperties(params System.Linq.Expressions.Expression>[] propertyExpressions) => throw null; + public ServiceStack.FluentValidation.Internal.ValidationStrategy IncludeRuleSets(params string[] ruleSets) => throw null; + public ServiceStack.FluentValidation.Internal.ValidationStrategy IncludeRulesNotInRuleSet() => throw null; + public ServiceStack.FluentValidation.Internal.ValidationStrategy ThrowOnFailures() => throw null; + public ServiceStack.FluentValidation.Internal.ValidationStrategy UseCustomSelector(ServiceStack.FluentValidation.Internal.IValidatorSelector selector) => throw null; + } + + } + namespace Resources + { + // Generated from `ServiceStack.FluentValidation.Resources.FluentValidationMessageFormatException` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class FluentValidationMessageFormatException : System.Exception + { + public FluentValidationMessageFormatException(string message, System.Exception innerException) => throw null; + public FluentValidationMessageFormatException(string message) => throw null; + } + + // Generated from `ServiceStack.FluentValidation.Resources.IContextAwareStringSource` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IContextAwareStringSource + { + } + + // Generated from `ServiceStack.FluentValidation.Resources.ILanguageManager` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface ILanguageManager + { + System.Globalization.CultureInfo Culture { get; set; } + bool Enabled { get; set; } + string GetString(string key, System.Globalization.CultureInfo culture = default(System.Globalization.CultureInfo)); + } + + // Generated from `ServiceStack.FluentValidation.Resources.IStringSource` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IStringSource + { + string GetString(ServiceStack.FluentValidation.ICommonContext context); + } + + // Generated from `ServiceStack.FluentValidation.Resources.Language` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public abstract class Language + { + public virtual string GetTranslation(string key) => throw null; + protected Language() => throw null; + public abstract string Name { get; } + public void Translate(string message) => throw null; + public virtual void Translate(string key, string message) => throw null; + } + + // Generated from `ServiceStack.FluentValidation.Resources.LanguageManager` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class LanguageManager : ServiceStack.FluentValidation.Resources.ILanguageManager + { + public void AddTranslation(string language, string key, string message) => throw null; + public void Clear() => throw null; + public System.Globalization.CultureInfo Culture { get => throw null; set => throw null; } + public bool Enabled { get => throw null; set => throw null; } + public virtual string GetString(string key, System.Globalization.CultureInfo culture = default(System.Globalization.CultureInfo)) => throw null; + public LanguageManager() => throw null; + } + + // Generated from `ServiceStack.FluentValidation.Resources.LanguageStringSource` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class LanguageStringSource : ServiceStack.FluentValidation.Resources.IStringSource + { + public virtual string GetString(ServiceStack.FluentValidation.ICommonContext context) => throw null; + public LanguageStringSource(string key) => throw null; + public LanguageStringSource(System.Func errorCodeFunc, string fallbackKey) => throw null; + } + + // Generated from `ServiceStack.FluentValidation.Resources.LazyStringSource` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class LazyStringSource : ServiceStack.FluentValidation.Resources.IStringSource + { + public string GetString(ServiceStack.FluentValidation.ICommonContext context) => throw null; + public LazyStringSource(System.Func stringProvider) => throw null; + } + + // Generated from `ServiceStack.FluentValidation.Resources.StaticStringSource` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class StaticStringSource : ServiceStack.FluentValidation.Resources.IStringSource + { + public string GetString(ServiceStack.FluentValidation.ICommonContext context) => throw null; + public StaticStringSource(string message) => throw null; + } + + } + namespace Results + { + // Generated from `ServiceStack.FluentValidation.Results.ValidationFailure` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ValidationFailure + { + public object AttemptedValue { get => throw null; set => throw null; } + public object CustomState { get => throw null; set => throw null; } + public string ErrorCode { get => throw null; set => throw null; } + public static System.Collections.Generic.Dictionary ErrorCodeAliases; + public static System.Func ErrorCodeResolver { get => throw null; set => throw null; } + public string ErrorMessage { get => throw null; set => throw null; } + public object[] FormattedMessageArguments { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary FormattedMessagePlaceholderValues { get => throw null; set => throw null; } + public string PropertyName { get => throw null; set => throw null; } + public static string ServiceStackErrorCodeResolver(string errorCode) => throw null; + public ServiceStack.FluentValidation.Severity Severity { get => throw null; set => throw null; } + public override string ToString() => throw null; + public ValidationFailure(string propertyName, string errorMessage, object attemptedValue) => throw null; + public ValidationFailure(string propertyName, string errorMessage) => throw null; + public ValidationFailure(string propertyName, string error, object attemptedValue, string errorCode) => throw null; + } + + // Generated from `ServiceStack.FluentValidation.Results.ValidationResult` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ValidationResult + { + public System.Collections.Generic.IList Errors { get => throw null; } + public virtual bool IsValid { get => throw null; } + public ServiceStack.Web.IRequest Request { get => throw null; set => throw null; } + public string[] RuleSetsExecuted { get => throw null; set => throw null; } + public string ToString(string separator) => throw null; + public override string ToString() => throw null; + public ValidationResult(System.Collections.Generic.IEnumerable failures) => throw null; + public ValidationResult() => throw null; + } + + } + namespace TestHelper + { + // Generated from `ServiceStack.FluentValidation.TestHelper.ITestPropertyChain<>` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface ITestPropertyChain + { + ServiceStack.FluentValidation.TestHelper.ITestPropertyChain Property(System.Linq.Expressions.Expression> memberAccessor); + System.Collections.Generic.IEnumerable ShouldHaveValidationError(); + void ShouldNotHaveValidationError(); + } + + // Generated from `ServiceStack.FluentValidation.TestHelper.IValidationResultTester` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IValidationResultTester + { + System.Collections.Generic.IEnumerable ShouldHaveValidationError(System.Collections.Generic.IEnumerable properties); + void ShouldNotHaveValidationError(System.Collections.Generic.IEnumerable properties); + } + + // Generated from `ServiceStack.FluentValidation.TestHelper.TestValidationResult<>` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class TestValidationResult : ServiceStack.FluentValidation.Results.ValidationResult where T : class + { + public System.Collections.Generic.IEnumerable ShouldHaveValidationErrorFor(System.Linq.Expressions.Expression> memberAccessor) => throw null; + public System.Collections.Generic.IEnumerable ShouldHaveValidationErrorFor(string propertyName) => throw null; + public void ShouldNotHaveValidationErrorFor(System.Linq.Expressions.Expression> memberAccessor) => throw null; + public void ShouldNotHaveValidationErrorFor(string propertyName) => throw null; + public TestValidationResult(ServiceStack.FluentValidation.Results.ValidationResult validationResult) => throw null; + } + + // Generated from `ServiceStack.FluentValidation.TestHelper.ValidationTestException` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ValidationTestException : System.Exception + { + public System.Collections.Generic.List Errors { get => throw null; } + public ValidationTestException(string message, System.Collections.Generic.List errors) => throw null; + public ValidationTestException(string message) => throw null; + } + + // Generated from `ServiceStack.FluentValidation.TestHelper.ValidationTestExtension` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class ValidationTestExtension + { + public static System.Collections.Generic.IEnumerable ShouldHaveAnyValidationError(this ServiceStack.FluentValidation.TestHelper.TestValidationResult testValidationResult) where T : class => throw null; + public static void ShouldHaveChildValidator(this ServiceStack.FluentValidation.IValidator validator, System.Linq.Expressions.Expression> expression, System.Type childValidatorType) => throw null; + public static System.Collections.Generic.IEnumerable ShouldHaveValidationErrorFor(this ServiceStack.FluentValidation.IValidator validator, System.Linq.Expressions.Expression> expression, TValue value, string ruleSet = default(string)) where T : class, new() => throw null; + public static System.Collections.Generic.IEnumerable ShouldHaveValidationErrorFor(this ServiceStack.FluentValidation.IValidator validator, System.Linq.Expressions.Expression> expression, T objectToTest, string ruleSet = default(string)) where T : class => throw null; + public static System.Threading.Tasks.Task> ShouldHaveValidationErrorForAsync(this ServiceStack.FluentValidation.IValidator validator, System.Linq.Expressions.Expression> expression, TValue value, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken), string ruleSet = default(string)) where T : class, new() => throw null; + public static System.Threading.Tasks.Task> ShouldHaveValidationErrorForAsync(this ServiceStack.FluentValidation.IValidator validator, System.Linq.Expressions.Expression> expression, T objectToTest, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken), string ruleSet = default(string)) where T : class => throw null; + public static void ShouldNotHaveAnyValidationErrors(this ServiceStack.FluentValidation.TestHelper.TestValidationResult testValidationResult) where T : class => throw null; + public static void ShouldNotHaveValidationErrorFor(this ServiceStack.FluentValidation.IValidator validator, System.Linq.Expressions.Expression> expression, TValue value, string ruleSet = default(string)) where T : class, new() => throw null; + public static void ShouldNotHaveValidationErrorFor(this ServiceStack.FluentValidation.IValidator validator, System.Linq.Expressions.Expression> expression, T objectToTest, string ruleSet = default(string)) where T : class => throw null; + public static System.Threading.Tasks.Task ShouldNotHaveValidationErrorForAsync(this ServiceStack.FluentValidation.IValidator validator, System.Linq.Expressions.Expression> expression, TValue value, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken), string ruleSet = default(string)) where T : class, new() => throw null; + public static System.Threading.Tasks.Task ShouldNotHaveValidationErrorForAsync(this ServiceStack.FluentValidation.IValidator validator, System.Linq.Expressions.Expression> expression, T objectToTest, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken), string ruleSet = default(string)) where T : class => throw null; + public static ServiceStack.FluentValidation.TestHelper.TestValidationResult TestValidate(this ServiceStack.FluentValidation.IValidator validator, T objectToTest, string ruleSet = default(string)) where T : class => throw null; + public static ServiceStack.FluentValidation.TestHelper.TestValidationResult TestValidate(this ServiceStack.FluentValidation.IValidator validator, T objectToTest, System.Action> options) where T : class => throw null; + public static System.Threading.Tasks.Task> TestValidateAsync(this ServiceStack.FluentValidation.IValidator validator, T objectToTest, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken), string ruleSet = default(string)) where T : class => throw null; + public static System.Threading.Tasks.Task> TestValidateAsync(this ServiceStack.FluentValidation.IValidator validator, T objectToTest, System.Action> options, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) where T : class => throw null; + public static System.Collections.Generic.IEnumerable When(this System.Collections.Generic.IEnumerable failures, System.Func failurePredicate, string exceptionMessage = default(string)) => throw null; + public static System.Collections.Generic.IEnumerable WhenAll(this System.Collections.Generic.IEnumerable failures, System.Func failurePredicate, string exceptionMessage = default(string)) => throw null; + public static System.Collections.Generic.IEnumerable WithCustomState(this System.Collections.Generic.IEnumerable failures, object expectedCustomState) => throw null; + public static System.Collections.Generic.IEnumerable WithErrorCode(this System.Collections.Generic.IEnumerable failures, string expectedErrorCode) => throw null; + public static System.Collections.Generic.IEnumerable WithErrorMessage(this System.Collections.Generic.IEnumerable failures, string expectedErrorMessage) => throw null; + public static System.Collections.Generic.IEnumerable WithMessageArgument(this System.Collections.Generic.IEnumerable failures, string argumentKey, T argumentValue) => throw null; + public static System.Collections.Generic.IEnumerable WithSeverity(this System.Collections.Generic.IEnumerable failures, ServiceStack.FluentValidation.Severity expectedSeverity) => throw null; + public static System.Collections.Generic.IEnumerable WithoutCustomState(this System.Collections.Generic.IEnumerable failures, object unexpectedCustomState) => throw null; + public static System.Collections.Generic.IEnumerable WithoutErrorCode(this System.Collections.Generic.IEnumerable failures, string unexpectedErrorCode) => throw null; + public static System.Collections.Generic.IEnumerable WithoutErrorMessage(this System.Collections.Generic.IEnumerable failures, string unexpectedErrorMessage) => throw null; + public static System.Collections.Generic.IEnumerable WithoutSeverity(this System.Collections.Generic.IEnumerable failures, ServiceStack.FluentValidation.Severity unexpectedSeverity) => throw null; + } + + // Generated from `ServiceStack.FluentValidation.TestHelper.ValidatorTester<,>` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ValidatorTester where T : class + { + public void ValidateError(T instanceToValidate) => throw null; + public void ValidateNoError(T instanceToValidate) => throw null; + public ValidatorTester(System.Linq.Expressions.Expression> expression, ServiceStack.FluentValidation.IValidator validator, TValue value) => throw null; + } + + } + namespace Validators + { + // Generated from `ServiceStack.FluentValidation.Validators.AbstractComparisonValidator` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public abstract class AbstractComparisonValidator : ServiceStack.FluentValidation.Validators.PropertyValidator, ServiceStack.FluentValidation.Validators.IPropertyValidator, ServiceStack.FluentValidation.Validators.IComparisonValidator + { + protected AbstractComparisonValidator(System.IComparable value, ServiceStack.FluentValidation.Resources.IStringSource errorSource) => throw null; + protected AbstractComparisonValidator(System.IComparable value) => throw null; + protected AbstractComparisonValidator(System.Func valueToCompareFunc, System.Reflection.MemberInfo member, string memberDisplayName, ServiceStack.FluentValidation.Resources.IStringSource errorSource) => throw null; + protected AbstractComparisonValidator(System.Func valueToCompareFunc, System.Reflection.MemberInfo member, string memberDisplayName) => throw null; + public abstract ServiceStack.FluentValidation.Validators.Comparison Comparison { get; } + public System.IComparable GetComparableValue(ServiceStack.FluentValidation.Validators.PropertyValidatorContext context, object value) => throw null; + public System.IComparable GetComparisonValue(ServiceStack.FluentValidation.Validators.PropertyValidatorContext context) => throw null; + public abstract bool IsValid(System.IComparable value, System.IComparable valueToCompare); + protected override bool IsValid(ServiceStack.FluentValidation.Validators.PropertyValidatorContext context) => throw null; + public System.Reflection.MemberInfo MemberToCompare { get => throw null; set => throw null; } + public object ValueToCompare { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.FluentValidation.Validators.AspNetCoreCompatibleEmailValidator` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class AspNetCoreCompatibleEmailValidator : ServiceStack.FluentValidation.Validators.PropertyValidator, ServiceStack.FluentValidation.Validators.IEmailValidator + { + public AspNetCoreCompatibleEmailValidator() => throw null; + protected override string GetDefaultMessageTemplate() => throw null; + protected override bool IsValid(ServiceStack.FluentValidation.Validators.PropertyValidatorContext context) => throw null; + } + + // Generated from `ServiceStack.FluentValidation.Validators.AsyncPredicateValidator` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class AsyncPredicateValidator : ServiceStack.FluentValidation.Validators.PropertyValidator + { + public AsyncPredicateValidator(System.Func> predicate) => throw null; + protected override string GetDefaultMessageTemplate() => throw null; + protected override bool IsValid(ServiceStack.FluentValidation.Validators.PropertyValidatorContext context) => throw null; + protected override System.Threading.Tasks.Task IsValidAsync(ServiceStack.FluentValidation.Validators.PropertyValidatorContext context, System.Threading.CancellationToken cancellation) => throw null; + public override bool ShouldValidateAsynchronously(ServiceStack.FluentValidation.IValidationContext context) => throw null; + } + + // Generated from `ServiceStack.FluentValidation.Validators.AsyncValidatorBase` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public abstract class AsyncValidatorBase : ServiceStack.FluentValidation.Validators.PropertyValidator + { + protected AsyncValidatorBase(string errorMessage) => throw null; + protected AsyncValidatorBase(ServiceStack.FluentValidation.Resources.IStringSource errorSource) => throw null; + protected AsyncValidatorBase() => throw null; + protected override bool IsValid(ServiceStack.FluentValidation.Validators.PropertyValidatorContext context) => throw null; + protected abstract override System.Threading.Tasks.Task IsValidAsync(ServiceStack.FluentValidation.Validators.PropertyValidatorContext context, System.Threading.CancellationToken cancellation); + public override bool ShouldValidateAsynchronously(ServiceStack.FluentValidation.IValidationContext context) => throw null; + } + + // Generated from `ServiceStack.FluentValidation.Validators.ChildValidatorAdaptor<,>` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ChildValidatorAdaptor : ServiceStack.FluentValidation.Validators.NoopPropertyValidator, ServiceStack.FluentValidation.Validators.IChildValidatorAdaptor + { + public ChildValidatorAdaptor(System.Func> validatorProvider, System.Type validatorType) => throw null; + public ChildValidatorAdaptor(ServiceStack.FluentValidation.IValidator validator, System.Type validatorType) => throw null; + protected virtual ServiceStack.FluentValidation.IValidationContext CreateNewValidationContextForChildValidator(ServiceStack.FluentValidation.Validators.PropertyValidatorContext context, ServiceStack.FluentValidation.IValidator validator) => throw null; + protected ServiceStack.FluentValidation.IValidationContext CreateNewValidationContextForChildValidator(object instanceToValidate, ServiceStack.FluentValidation.Validators.PropertyValidatorContext context) => throw null; + public virtual ServiceStack.FluentValidation.IValidator GetValidator(ServiceStack.FluentValidation.Validators.PropertyValidatorContext context) => throw null; + public string[] RuleSets { get => throw null; set => throw null; } + public override bool ShouldValidateAsynchronously(ServiceStack.FluentValidation.IValidationContext context) => throw null; + public override System.Collections.Generic.IEnumerable Validate(ServiceStack.FluentValidation.Validators.PropertyValidatorContext context) => throw null; + public override System.Threading.Tasks.Task> ValidateAsync(ServiceStack.FluentValidation.Validators.PropertyValidatorContext context, System.Threading.CancellationToken cancellation) => throw null; + public System.Type ValidatorType { get => throw null; } + } + + // Generated from `ServiceStack.FluentValidation.Validators.Comparison` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public enum Comparison + { + Equal, + GreaterThan, + GreaterThanOrEqual, + LessThan, + LessThanOrEqual, + NotEqual, + } + + // Generated from `ServiceStack.FluentValidation.Validators.CreditCardValidator` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class CreditCardValidator : ServiceStack.FluentValidation.Validators.PropertyValidator + { + public CreditCardValidator() => throw null; + protected override string GetDefaultMessageTemplate() => throw null; + protected override bool IsValid(ServiceStack.FluentValidation.Validators.PropertyValidatorContext context) => throw null; + } + + // Generated from `ServiceStack.FluentValidation.Validators.CustomContext` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class CustomContext : ServiceStack.FluentValidation.ICommonContext + { + public void AddFailure(string propertyName, string errorMessage) => throw null; + public void AddFailure(string errorMessage) => throw null; + public void AddFailure(ServiceStack.FluentValidation.Results.ValidationFailure failure) => throw null; + public CustomContext(ServiceStack.FluentValidation.Validators.PropertyValidatorContext context) => throw null; + public string DisplayName { get => throw null; } + public object InstanceToValidate { get => throw null; } + public ServiceStack.FluentValidation.Internal.MessageFormatter MessageFormatter { get => throw null; } + public ServiceStack.FluentValidation.IValidationContext ParentContext { get => throw null; } + ServiceStack.FluentValidation.ICommonContext ServiceStack.FluentValidation.ICommonContext.ParentContext { get => throw null; } + public string PropertyName { get => throw null; } + public object PropertyValue { get => throw null; } + public ServiceStack.FluentValidation.Internal.PropertyRule Rule { get => throw null; } + } + + // Generated from `ServiceStack.FluentValidation.Validators.CustomValidator<>` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class CustomValidator : ServiceStack.FluentValidation.Validators.PropertyValidator + { + public CustomValidator(System.Func asyncAction) => throw null; + public CustomValidator(System.Action action) => throw null; + protected override bool IsValid(ServiceStack.FluentValidation.Validators.PropertyValidatorContext context) => throw null; + public override bool ShouldValidateAsynchronously(ServiceStack.FluentValidation.IValidationContext context) => throw null; + public override System.Collections.Generic.IEnumerable Validate(ServiceStack.FluentValidation.Validators.PropertyValidatorContext context) => throw null; + public override System.Threading.Tasks.Task> ValidateAsync(ServiceStack.FluentValidation.Validators.PropertyValidatorContext context, System.Threading.CancellationToken cancellation) => throw null; + } + + // Generated from `ServiceStack.FluentValidation.Validators.EmailValidationMode` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public enum EmailValidationMode + { + AspNetCoreCompatible, + Net4xRegex, + } + + // Generated from `ServiceStack.FluentValidation.Validators.EmailValidator` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class EmailValidator : ServiceStack.FluentValidation.Validators.PropertyValidator, ServiceStack.FluentValidation.Validators.IRegularExpressionValidator, ServiceStack.FluentValidation.Validators.IPropertyValidator, ServiceStack.FluentValidation.Validators.IEmailValidator + { + public EmailValidator() => throw null; + public string Expression { get => throw null; } + protected override string GetDefaultMessageTemplate() => throw null; + protected override bool IsValid(ServiceStack.FluentValidation.Validators.PropertyValidatorContext context) => throw null; + } + + // Generated from `ServiceStack.FluentValidation.Validators.EmptyValidator` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class EmptyValidator : ServiceStack.FluentValidation.Validators.PropertyValidator, ServiceStack.FluentValidation.Validators.IPropertyValidator, ServiceStack.FluentValidation.Validators.IEmptyValidator + { + public EmptyValidator(object defaultValueForType) => throw null; + protected override string GetDefaultMessageTemplate() => throw null; + protected override bool IsValid(ServiceStack.FluentValidation.Validators.PropertyValidatorContext context) => throw null; + } + + // Generated from `ServiceStack.FluentValidation.Validators.EnumValidator` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class EnumValidator : ServiceStack.FluentValidation.Validators.PropertyValidator + { + public EnumValidator(System.Type enumType) => throw null; + protected override string GetDefaultMessageTemplate() => throw null; + protected override bool IsValid(ServiceStack.FluentValidation.Validators.PropertyValidatorContext context) => throw null; + } + + // Generated from `ServiceStack.FluentValidation.Validators.EqualValidator` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class EqualValidator : ServiceStack.FluentValidation.Validators.PropertyValidator, ServiceStack.FluentValidation.Validators.IPropertyValidator, ServiceStack.FluentValidation.Validators.IComparisonValidator + { + protected bool Compare(object comparisonValue, object propertyValue) => throw null; + public ServiceStack.FluentValidation.Validators.Comparison Comparison { get => throw null; } + public EqualValidator(object valueToCompare, System.Collections.IEqualityComparer comparer = default(System.Collections.IEqualityComparer)) => throw null; + public EqualValidator(System.Func comparisonProperty, System.Reflection.MemberInfo member, string memberDisplayName, System.Collections.IEqualityComparer comparer = default(System.Collections.IEqualityComparer)) => throw null; + protected override string GetDefaultMessageTemplate() => throw null; + protected override bool IsValid(ServiceStack.FluentValidation.Validators.PropertyValidatorContext context) => throw null; + public System.Reflection.MemberInfo MemberToCompare { get => throw null; set => throw null; } + public object ValueToCompare { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.FluentValidation.Validators.ExactLengthValidator` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ExactLengthValidator : ServiceStack.FluentValidation.Validators.LengthValidator + { + public ExactLengthValidator(int length) : base(default(System.Func), default(System.Func)) => throw null; + public ExactLengthValidator(System.Func length) : base(default(System.Func), default(System.Func)) => throw null; + protected override string GetDefaultMessageTemplate() => throw null; + } + + // Generated from `ServiceStack.FluentValidation.Validators.ExclusiveBetweenValidator` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ExclusiveBetweenValidator : ServiceStack.FluentValidation.Validators.PropertyValidator, ServiceStack.FluentValidation.Validators.IPropertyValidator, ServiceStack.FluentValidation.Validators.IBetweenValidator + { + public ExclusiveBetweenValidator(System.IComparable from, System.IComparable to) => throw null; + public System.IComparable From { get => throw null; } + protected override string GetDefaultMessageTemplate() => throw null; + protected override bool IsValid(ServiceStack.FluentValidation.Validators.PropertyValidatorContext context) => throw null; + public System.IComparable To { get => throw null; } + } + + // Generated from `ServiceStack.FluentValidation.Validators.GreaterThanOrEqualValidator` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class GreaterThanOrEqualValidator : ServiceStack.FluentValidation.Validators.AbstractComparisonValidator + { + public override ServiceStack.FluentValidation.Validators.Comparison Comparison { get => throw null; } + protected override string GetDefaultMessageTemplate() => throw null; + public GreaterThanOrEqualValidator(System.IComparable value) : base(default(System.IComparable)) => throw null; + public GreaterThanOrEqualValidator(System.Func valueToCompareFunc, System.Reflection.MemberInfo member, string memberDisplayName) : base(default(System.IComparable)) => throw null; + public override bool IsValid(System.IComparable value, System.IComparable valueToCompare) => throw null; + } + + // Generated from `ServiceStack.FluentValidation.Validators.GreaterThanValidator` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class GreaterThanValidator : ServiceStack.FluentValidation.Validators.AbstractComparisonValidator + { + public override ServiceStack.FluentValidation.Validators.Comparison Comparison { get => throw null; } + protected override string GetDefaultMessageTemplate() => throw null; + public GreaterThanValidator(System.IComparable value) : base(default(System.IComparable)) => throw null; + public GreaterThanValidator(System.Func valueToCompareFunc, System.Reflection.MemberInfo member, string memberDisplayName) : base(default(System.IComparable)) => throw null; + public override bool IsValid(System.IComparable value, System.IComparable valueToCompare) => throw null; + } + + // Generated from `ServiceStack.FluentValidation.Validators.IBetweenValidator` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IBetweenValidator : ServiceStack.FluentValidation.Validators.IPropertyValidator + { + System.IComparable From { get; } + System.IComparable To { get; } + } + + // Generated from `ServiceStack.FluentValidation.Validators.IChildValidatorAdaptor` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IChildValidatorAdaptor + { + System.Type ValidatorType { get; } + } + + // Generated from `ServiceStack.FluentValidation.Validators.IComparisonValidator` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IComparisonValidator : ServiceStack.FluentValidation.Validators.IPropertyValidator + { + ServiceStack.FluentValidation.Validators.Comparison Comparison { get; } + System.Reflection.MemberInfo MemberToCompare { get; } + object ValueToCompare { get; } + } + + // Generated from `ServiceStack.FluentValidation.Validators.IEmailValidator` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IEmailValidator + { + } + + // Generated from `ServiceStack.FluentValidation.Validators.IEmptyValidator` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IEmptyValidator : ServiceStack.FluentValidation.Validators.IPropertyValidator + { + } + + // Generated from `ServiceStack.FluentValidation.Validators.ILengthValidator` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface ILengthValidator : ServiceStack.FluentValidation.Validators.IPropertyValidator + { + int Max { get; } + int Min { get; } + } + + // Generated from `ServiceStack.FluentValidation.Validators.INotEmptyValidator` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface INotEmptyValidator : ServiceStack.FluentValidation.Validators.IPropertyValidator + { + } + + // Generated from `ServiceStack.FluentValidation.Validators.INotNullValidator` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface INotNullValidator : ServiceStack.FluentValidation.Validators.IPropertyValidator + { + } + + // Generated from `ServiceStack.FluentValidation.Validators.INullValidator` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface INullValidator : ServiceStack.FluentValidation.Validators.IPropertyValidator + { + } + + // Generated from `ServiceStack.FluentValidation.Validators.IPredicateValidator` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IPredicateValidator : ServiceStack.FluentValidation.Validators.IPropertyValidator + { + } + + // Generated from `ServiceStack.FluentValidation.Validators.IPropertyValidator` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IPropertyValidator + { + ServiceStack.FluentValidation.PropertyValidatorOptions Options { get; } + bool ShouldValidateAsynchronously(ServiceStack.FluentValidation.IValidationContext context); + System.Collections.Generic.IEnumerable Validate(ServiceStack.FluentValidation.Validators.PropertyValidatorContext context); + System.Threading.Tasks.Task> ValidateAsync(ServiceStack.FluentValidation.Validators.PropertyValidatorContext context, System.Threading.CancellationToken cancellation); + } + + // Generated from `ServiceStack.FluentValidation.Validators.IRegularExpressionValidator` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IRegularExpressionValidator : ServiceStack.FluentValidation.Validators.IPropertyValidator + { + string Expression { get; } + } + + // Generated from `ServiceStack.FluentValidation.Validators.InclusiveBetweenValidator` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class InclusiveBetweenValidator : ServiceStack.FluentValidation.Validators.PropertyValidator, ServiceStack.FluentValidation.Validators.IPropertyValidator, ServiceStack.FluentValidation.Validators.IBetweenValidator + { + public System.IComparable From { get => throw null; } + protected override string GetDefaultMessageTemplate() => throw null; + public InclusiveBetweenValidator(System.IComparable from, System.IComparable to) => throw null; + protected override bool IsValid(ServiceStack.FluentValidation.Validators.PropertyValidatorContext context) => throw null; + public System.IComparable To { get => throw null; } + } + + // Generated from `ServiceStack.FluentValidation.Validators.LengthValidator` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class LengthValidator : ServiceStack.FluentValidation.Validators.PropertyValidator, ServiceStack.FluentValidation.Validators.IPropertyValidator, ServiceStack.FluentValidation.Validators.ILengthValidator + { + protected override string GetDefaultMessageTemplate() => throw null; + protected override bool IsValid(ServiceStack.FluentValidation.Validators.PropertyValidatorContext context) => throw null; + public LengthValidator(int min, int max) => throw null; + public LengthValidator(System.Func min, System.Func max) => throw null; + public int Max { get => throw null; } + public System.Func MaxFunc { get => throw null; set => throw null; } + public int Min { get => throw null; } + public System.Func MinFunc { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.FluentValidation.Validators.LessThanOrEqualValidator` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class LessThanOrEqualValidator : ServiceStack.FluentValidation.Validators.AbstractComparisonValidator + { + public override ServiceStack.FluentValidation.Validators.Comparison Comparison { get => throw null; } + protected override string GetDefaultMessageTemplate() => throw null; + public override bool IsValid(System.IComparable value, System.IComparable valueToCompare) => throw null; + public LessThanOrEqualValidator(System.IComparable value) : base(default(System.IComparable)) => throw null; + public LessThanOrEqualValidator(System.Func valueToCompareFunc, System.Reflection.MemberInfo member, string memberDisplayName) : base(default(System.IComparable)) => throw null; + } + + // Generated from `ServiceStack.FluentValidation.Validators.LessThanValidator` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class LessThanValidator : ServiceStack.FluentValidation.Validators.AbstractComparisonValidator + { + public override ServiceStack.FluentValidation.Validators.Comparison Comparison { get => throw null; } + protected override string GetDefaultMessageTemplate() => throw null; + public override bool IsValid(System.IComparable value, System.IComparable valueToCompare) => throw null; + public LessThanValidator(System.IComparable value) : base(default(System.IComparable)) => throw null; + public LessThanValidator(System.Func valueToCompareFunc, System.Reflection.MemberInfo member, string memberDisplayName) : base(default(System.IComparable)) => throw null; + } + + // Generated from `ServiceStack.FluentValidation.Validators.MaximumLengthValidator` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class MaximumLengthValidator : ServiceStack.FluentValidation.Validators.LengthValidator + { + protected override string GetDefaultMessageTemplate() => throw null; + public MaximumLengthValidator(int max) : base(default(System.Func), default(System.Func)) => throw null; + public MaximumLengthValidator(System.Func max) : base(default(System.Func), default(System.Func)) => throw null; + } + + // Generated from `ServiceStack.FluentValidation.Validators.MinimumLengthValidator` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class MinimumLengthValidator : ServiceStack.FluentValidation.Validators.LengthValidator + { + protected override string GetDefaultMessageTemplate() => throw null; + public MinimumLengthValidator(int min) : base(default(System.Func), default(System.Func)) => throw null; + public MinimumLengthValidator(System.Func min) : base(default(System.Func), default(System.Func)) => throw null; + } + + // Generated from `ServiceStack.FluentValidation.Validators.NoopPropertyValidator` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public abstract class NoopPropertyValidator : ServiceStack.FluentValidation.Validators.IPropertyValidator + { + protected NoopPropertyValidator() => throw null; + public ServiceStack.FluentValidation.PropertyValidatorOptions Options { get => throw null; } + public virtual bool ShouldValidateAsynchronously(ServiceStack.FluentValidation.IValidationContext context) => throw null; + public abstract System.Collections.Generic.IEnumerable Validate(ServiceStack.FluentValidation.Validators.PropertyValidatorContext context); + public virtual System.Threading.Tasks.Task> ValidateAsync(ServiceStack.FluentValidation.Validators.PropertyValidatorContext context, System.Threading.CancellationToken cancellation) => throw null; + } + + // Generated from `ServiceStack.FluentValidation.Validators.NotEmptyValidator` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class NotEmptyValidator : ServiceStack.FluentValidation.Validators.PropertyValidator, ServiceStack.FluentValidation.Validators.IPropertyValidator, ServiceStack.FluentValidation.Validators.INotEmptyValidator + { + protected override string GetDefaultMessageTemplate() => throw null; + protected override bool IsValid(ServiceStack.FluentValidation.Validators.PropertyValidatorContext context) => throw null; + public NotEmptyValidator(object defaultValueForType) => throw null; + } + + // Generated from `ServiceStack.FluentValidation.Validators.NotEqualValidator` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class NotEqualValidator : ServiceStack.FluentValidation.Validators.PropertyValidator, ServiceStack.FluentValidation.Validators.IPropertyValidator, ServiceStack.FluentValidation.Validators.IComparisonValidator + { + protected bool Compare(object comparisonValue, object propertyValue) => throw null; + public ServiceStack.FluentValidation.Validators.Comparison Comparison { get => throw null; } + protected override string GetDefaultMessageTemplate() => throw null; + protected override bool IsValid(ServiceStack.FluentValidation.Validators.PropertyValidatorContext context) => throw null; + public System.Reflection.MemberInfo MemberToCompare { get => throw null; set => throw null; } + public NotEqualValidator(object comparisonValue, System.Collections.IEqualityComparer equalityComparer = default(System.Collections.IEqualityComparer)) => throw null; + public NotEqualValidator(System.Func func, System.Reflection.MemberInfo memberToCompare, string memberDisplayName, System.Collections.IEqualityComparer equalityComparer = default(System.Collections.IEqualityComparer)) => throw null; + public object ValueToCompare { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.FluentValidation.Validators.NotNullValidator` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class NotNullValidator : ServiceStack.FluentValidation.Validators.PropertyValidator, ServiceStack.FluentValidation.Validators.IPropertyValidator, ServiceStack.FluentValidation.Validators.INotNullValidator + { + protected override string GetDefaultMessageTemplate() => throw null; + protected override bool IsValid(ServiceStack.FluentValidation.Validators.PropertyValidatorContext context) => throw null; + public NotNullValidator() => throw null; + } + + // Generated from `ServiceStack.FluentValidation.Validators.NullValidator` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class NullValidator : ServiceStack.FluentValidation.Validators.PropertyValidator, ServiceStack.FluentValidation.Validators.IPropertyValidator, ServiceStack.FluentValidation.Validators.INullValidator + { + protected override string GetDefaultMessageTemplate() => throw null; + protected override bool IsValid(ServiceStack.FluentValidation.Validators.PropertyValidatorContext context) => throw null; + public NullValidator() => throw null; + } + + // Generated from `ServiceStack.FluentValidation.Validators.OnFailureValidator<>` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class OnFailureValidator : ServiceStack.FluentValidation.Validators.NoopPropertyValidator, ServiceStack.FluentValidation.Validators.IChildValidatorAdaptor + { + public OnFailureValidator(ServiceStack.FluentValidation.Validators.IPropertyValidator innerValidator, System.Action onFailure) => throw null; + public override bool ShouldValidateAsynchronously(ServiceStack.FluentValidation.IValidationContext context) => throw null; + public override System.Collections.Generic.IEnumerable Validate(ServiceStack.FluentValidation.Validators.PropertyValidatorContext context) => throw null; + public override System.Threading.Tasks.Task> ValidateAsync(ServiceStack.FluentValidation.Validators.PropertyValidatorContext context, System.Threading.CancellationToken cancellation) => throw null; + public System.Type ValidatorType { get => throw null; } + } + + // Generated from `ServiceStack.FluentValidation.Validators.PolymorphicValidator<,>` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class PolymorphicValidator : ServiceStack.FluentValidation.Validators.ChildValidatorAdaptor + { + public ServiceStack.FluentValidation.Validators.PolymorphicValidator Add(System.Func> validatorFactory, params string[] ruleSets) where TDerived : TProperty => throw null; + public ServiceStack.FluentValidation.Validators.PolymorphicValidator Add(System.Func> validatorFactory, params string[] ruleSets) where TDerived : TProperty => throw null; + public ServiceStack.FluentValidation.Validators.PolymorphicValidator Add(ServiceStack.FluentValidation.IValidator derivedValidator, params string[] ruleSets) where TDerived : TProperty => throw null; + protected ServiceStack.FluentValidation.Validators.PolymorphicValidator Add(System.Type subclassType, ServiceStack.FluentValidation.IValidator validator, params string[] ruleSets) => throw null; + protected override ServiceStack.FluentValidation.IValidationContext CreateNewValidationContextForChildValidator(ServiceStack.FluentValidation.Validators.PropertyValidatorContext context, ServiceStack.FluentValidation.IValidator validator) => throw null; + public override ServiceStack.FluentValidation.IValidator GetValidator(ServiceStack.FluentValidation.Validators.PropertyValidatorContext context) => throw null; + public PolymorphicValidator() : base(default(ServiceStack.FluentValidation.IValidator), default(System.Type)) => throw null; + } + + // Generated from `ServiceStack.FluentValidation.Validators.PredicateValidator` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class PredicateValidator : ServiceStack.FluentValidation.Validators.PropertyValidator, ServiceStack.FluentValidation.Validators.IPropertyValidator, ServiceStack.FluentValidation.Validators.IPredicateValidator + { + protected override string GetDefaultMessageTemplate() => throw null; + protected override bool IsValid(ServiceStack.FluentValidation.Validators.PropertyValidatorContext context) => throw null; + // Generated from `ServiceStack.FluentValidation.Validators.PredicateValidator+Predicate` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public delegate bool Predicate(object instanceToValidate, object propertyValue, ServiceStack.FluentValidation.Validators.PropertyValidatorContext propertyValidatorContext); + + + public PredicateValidator(ServiceStack.FluentValidation.Validators.PredicateValidator.Predicate predicate) => throw null; + } + + // Generated from `ServiceStack.FluentValidation.Validators.PropertyValidator` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public abstract class PropertyValidator : ServiceStack.FluentValidation.PropertyValidatorOptions, ServiceStack.FluentValidation.Validators.IPropertyValidator + { + protected virtual ServiceStack.FluentValidation.Results.ValidationFailure CreateValidationError(ServiceStack.FluentValidation.Validators.PropertyValidatorContext context) => throw null; + protected abstract bool IsValid(ServiceStack.FluentValidation.Validators.PropertyValidatorContext context); + protected virtual System.Threading.Tasks.Task IsValidAsync(ServiceStack.FluentValidation.Validators.PropertyValidatorContext context, System.Threading.CancellationToken cancellation) => throw null; + protected string Localized(string fallbackKey) => throw null; + public ServiceStack.FluentValidation.PropertyValidatorOptions Options { get => throw null; } + protected virtual void PrepareMessageFormatterForValidationError(ServiceStack.FluentValidation.Validators.PropertyValidatorContext context) => throw null; + protected PropertyValidator(string errorMessage) => throw null; + protected PropertyValidator(ServiceStack.FluentValidation.Resources.IStringSource errorMessageSource) => throw null; + protected PropertyValidator() => throw null; + public virtual bool ShouldValidateAsynchronously(ServiceStack.FluentValidation.IValidationContext context) => throw null; + public virtual System.Collections.Generic.IEnumerable Validate(ServiceStack.FluentValidation.Validators.PropertyValidatorContext context) => throw null; + public virtual System.Threading.Tasks.Task> ValidateAsync(ServiceStack.FluentValidation.Validators.PropertyValidatorContext context, System.Threading.CancellationToken cancellation) => throw null; + } + + // Generated from `ServiceStack.FluentValidation.Validators.PropertyValidatorContext` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class PropertyValidatorContext : ServiceStack.FluentValidation.ICommonContext + { + public string DisplayName { get => throw null; } + public object InstanceToValidate { get => throw null; } + public ServiceStack.FluentValidation.Internal.MessageFormatter MessageFormatter { get => throw null; } + public ServiceStack.FluentValidation.IValidationContext ParentContext { get => throw null; set => throw null; } + ServiceStack.FluentValidation.ICommonContext ServiceStack.FluentValidation.ICommonContext.ParentContext { get => throw null; } + public string PropertyName { get => throw null; set => throw null; } + public PropertyValidatorContext(ServiceStack.FluentValidation.IValidationContext parentContext, ServiceStack.FluentValidation.Internal.PropertyRule rule, string propertyName, object propertyValue) => throw null; + public PropertyValidatorContext(ServiceStack.FluentValidation.IValidationContext parentContext, ServiceStack.FluentValidation.Internal.PropertyRule rule, string propertyName, System.Lazy propertyValueAccessor) => throw null; + public PropertyValidatorContext(ServiceStack.FluentValidation.IValidationContext parentContext, ServiceStack.FluentValidation.Internal.PropertyRule rule, string propertyName) => throw null; + public object PropertyValue { get => throw null; } + public ServiceStack.FluentValidation.Internal.PropertyRule Rule { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.FluentValidation.Validators.RegularExpressionValidator` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class RegularExpressionValidator : ServiceStack.FluentValidation.Validators.PropertyValidator, ServiceStack.FluentValidation.Validators.IRegularExpressionValidator, ServiceStack.FluentValidation.Validators.IPropertyValidator + { + public string Expression { get => throw null; } + protected override string GetDefaultMessageTemplate() => throw null; + protected override bool IsValid(ServiceStack.FluentValidation.Validators.PropertyValidatorContext context) => throw null; + public RegularExpressionValidator(string expression, System.Text.RegularExpressions.RegexOptions options) => throw null; + public RegularExpressionValidator(string expression) => throw null; + public RegularExpressionValidator(System.Text.RegularExpressions.Regex regex) => throw null; + public RegularExpressionValidator(System.Func expressionFunc) => throw null; + public RegularExpressionValidator(System.Func expression, System.Text.RegularExpressions.RegexOptions options) => throw null; + public RegularExpressionValidator(System.Func regexFunc) => throw null; + } + + // Generated from `ServiceStack.FluentValidation.Validators.ScalePrecisionValidator` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ScalePrecisionValidator : ServiceStack.FluentValidation.Validators.PropertyValidator + { + protected override string GetDefaultMessageTemplate() => throw null; + public bool IgnoreTrailingZeros { get => throw null; set => throw null; } + protected override bool IsValid(ServiceStack.FluentValidation.Validators.PropertyValidatorContext context) => throw null; + public int Precision { get => throw null; set => throw null; } + public int Scale { get => throw null; set => throw null; } + public ScalePrecisionValidator(int scale, int precision) => throw null; + } + + // Generated from `ServiceStack.FluentValidation.Validators.StringEnumValidator` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class StringEnumValidator : ServiceStack.FluentValidation.Validators.PropertyValidator + { + protected override string GetDefaultMessageTemplate() => throw null; + protected override bool IsValid(ServiceStack.FluentValidation.Validators.PropertyValidatorContext context) => throw null; + public StringEnumValidator(System.Type enumType, bool caseSensitive) => throw null; + } + + } + } + namespace Formats + { + // Generated from `ServiceStack.Formats.CsvFormat` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class CsvFormat : ServiceStack.Model.IHasStringId, ServiceStack.Model.IHasId, ServiceStack.IPlugin + { + public CsvFormat() => throw null; + public string Id { get => throw null; set => throw null; } + public void Register(ServiceStack.IAppHost appHost) => throw null; + public void SerializeToStream(ServiceStack.Web.IRequest req, object request, System.IO.Stream stream) => throw null; + } + + // Generated from `ServiceStack.Formats.HtmlFormat` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class HtmlFormat : ServiceStack.Model.IHasStringId, ServiceStack.Model.IHasId, ServiceStack.IPlugin + { + public string DefaultResolveTemplate(ServiceStack.Web.IRequest req) => throw null; + public HtmlFormat() => throw null; + public static string HtmlTitleFormat; + public static bool Humanize; + public string Id { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary PathTemplates { get => throw null; set => throw null; } + public void Register(ServiceStack.IAppHost appHost) => throw null; + public static string ReplaceTokens(string html, ServiceStack.Web.IRequest req) => throw null; + public System.Func ResolveTemplate { get => throw null; set => throw null; } + public System.Threading.Tasks.Task SerializeToStreamAsync(ServiceStack.Web.IRequest req, object response, System.IO.Stream outputStream) => throw null; + public static string TitleFormat; + } + + // Generated from `ServiceStack.Formats.SpanFormats` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class SpanFormats : ServiceStack.IPlugin + { + public ServiceStack.Text.MemoryProvider MemoryProvider { get => throw null; set => throw null; } + public void Register(ServiceStack.IAppHost appHost) => throw null; + public SpanFormats() => throw null; + } + + // Generated from `ServiceStack.Formats.XmlSerializerFormat` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class XmlSerializerFormat : ServiceStack.IPlugin + { + public static object Deserialize(System.Type type, System.IO.Stream stream) => throw null; + public void Register(ServiceStack.IAppHost appHost) => throw null; + public static void Serialize(ServiceStack.Web.IRequest req, object response, System.IO.Stream stream) => throw null; + public XmlSerializerFormat() => throw null; + } + + } + namespace Host + { + // Generated from `ServiceStack.Host.ActionContext` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ActionContext + { + public ActionContext() => throw null; + public const string AnyAction = default; + public static string AnyFormatKey(string format, string requestDtoName) => throw null; + public static string AnyKey(string requestDtoName) => throw null; + public const string AnyMethod = default; + public string Id { get => throw null; set => throw null; } + public static string Key(string method, string requestDtoName) => throw null; + public ServiceStack.Web.IRequestFilterBase[] RequestFilters { get => throw null; set => throw null; } + public System.Type RequestType { get => throw null; set => throw null; } + public ServiceStack.Web.IResponseFilterBase[] ResponseFilters { get => throw null; set => throw null; } + public ServiceStack.Host.ActionInvokerFn ServiceAction { get => throw null; set => throw null; } + public System.Type ServiceType { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.Host.ActionInvokerFn` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public delegate object ActionInvokerFn(object instance, object request); + + // Generated from `ServiceStack.Host.ActionMethod` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ActionMethod + { + public ActionMethod(System.Reflection.MethodInfo methodInfo) => throw null; + public object[] AllAttributes() => throw null; + public T[] AllAttributes() => throw null; + public const string Async = default; + public const string AsyncUpper = default; + public object[] GetCustomAttributes(bool inherit) => throw null; + public System.Reflection.ParameterInfo[] GetParameters() => throw null; + public bool IsAsync { get => throw null; } + public bool IsGenericMethod { get => throw null; } + public System.Reflection.MethodInfo MethodInfo { get => throw null; } + public string Name { get => throw null; } + public string NameUpper { get => throw null; } + public System.Type RequestType { get => throw null; } + public System.Type ReturnType { get => throw null; } + } + + // Generated from `ServiceStack.Host.BasicHttpRequest` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class BasicHttpRequest : ServiceStack.Host.BasicRequest, ServiceStack.Web.IRequest, ServiceStack.Web.IHttpRequest, ServiceStack.Configuration.IResolver + { + public string Accept { get => throw null; set => throw null; } + public BasicHttpRequest(object requestDto, ServiceStack.RequestAttributes requestAttributes = default(ServiceStack.RequestAttributes)) : base(default(ServiceStack.Messaging.IMessage), default(ServiceStack.RequestAttributes)) => throw null; + public BasicHttpRequest() : base(default(ServiceStack.Messaging.IMessage), default(ServiceStack.RequestAttributes)) => throw null; + public string HttpMethod { get => throw null; set => throw null; } + public ServiceStack.Web.IHttpResponse HttpResponse { get => throw null; set => throw null; } + public string XForwardedFor { get => throw null; set => throw null; } + public int? XForwardedPort { get => throw null; set => throw null; } + public string XForwardedProtocol { get => throw null; set => throw null; } + public string XRealIp { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.Host.BasicHttpResponse` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class BasicHttpResponse : ServiceStack.Host.BasicResponse, ServiceStack.Web.IResponse, ServiceStack.Web.IHttpResponse + { + public BasicHttpResponse(ServiceStack.Host.BasicRequest requestContext) : base(default(ServiceStack.Host.BasicRequest)) => throw null; + public void ClearCookies() => throw null; + public ServiceStack.Web.ICookies Cookies { get => throw null; } + public void SetCookie(System.Net.Cookie cookie) => throw null; + } + + // Generated from `ServiceStack.Host.BasicRequest` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class BasicRequest : System.IServiceProvider, ServiceStack.Web.IRequest, ServiceStack.IO.IHasVirtualFiles, ServiceStack.IHasServiceScope, ServiceStack.Configuration.IResolver, ServiceStack.Configuration.IHasResolver + { + public string AbsoluteUri { get => throw null; set => throw null; } + public string[] AcceptTypes { get => throw null; set => throw null; } + public string Authorization { get => throw null; set => throw null; } + public BasicRequest(object requestDto, ServiceStack.RequestAttributes requestAttributes = default(ServiceStack.RequestAttributes)) => throw null; + public BasicRequest(ServiceStack.Messaging.IMessage message = default(ServiceStack.Messaging.IMessage), ServiceStack.RequestAttributes requestAttributes = default(ServiceStack.RequestAttributes)) => throw null; + public string CompressionType { get => throw null; set => throw null; } + public System.Int64 ContentLength { get => throw null; } + public string ContentType { get => throw null; set => throw null; } + public System.Collections.Generic.IDictionary Cookies { get => throw null; set => throw null; } + public object Dto { get => throw null; set => throw null; } + public ServiceStack.Web.IHttpFile[] Files { get => throw null; set => throw null; } + public System.Collections.Specialized.NameValueCollection FormData { get => throw null; set => throw null; } + public ServiceStack.IO.IVirtualDirectory GetDirectory() => throw null; + public ServiceStack.IO.IVirtualFile GetFile() => throw null; + public string GetHeader(string headerName) => throw null; + public string GetRawBody() => throw null; + public System.Threading.Tasks.Task GetRawBodyAsync() => throw null; + public object GetService(System.Type serviceType) => throw null; + public bool HasExplicitResponseContentType { get => throw null; set => throw null; } + public System.Collections.Specialized.NameValueCollection Headers { get => throw null; set => throw null; } + public System.IO.Stream InputStream { get => throw null; set => throw null; } + public bool IsDirectory { get => throw null; set => throw null; } + public bool IsFile { get => throw null; set => throw null; } + public bool IsLocal { get => throw null; set => throw null; } + public bool IsSecureConnection { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary Items { get => throw null; set => throw null; } + public ServiceStack.Messaging.IMessage Message { get => throw null; set => throw null; } + public string OperationName { get => throw null; set => throw null; } + public string OriginalPathInfo { get => throw null; } + public object OriginalRequest { get => throw null; set => throw null; } + public string PathInfo { get => throw null; set => throw null; } + public ServiceStack.Host.BasicRequest PopulateWith(ServiceStack.Web.IRequest request) => throw null; + public System.Collections.Specialized.NameValueCollection QueryString { get => throw null; set => throw null; } + public string RawUrl { get => throw null; set => throw null; } + public string RemoteIp { get => throw null; set => throw null; } + public ServiceStack.RequestAttributes RequestAttributes { get => throw null; set => throw null; } + public ServiceStack.Web.IRequestPreferences RequestPreferences { get => throw null; } + public ServiceStack.Configuration.IResolver Resolver { get => throw null; set => throw null; } + public ServiceStack.Web.IResponse Response { get => throw null; set => throw null; } + public string ResponseContentType { get => throw null; set => throw null; } + public Microsoft.Extensions.DependencyInjection.IServiceScope ServiceScope { get => throw null; set => throw null; } + public T TryResolve() => throw null; + public System.Uri UrlReferrer { get => throw null; set => throw null; } + public bool UseBufferedStream { get => throw null; set => throw null; } + public string UserAgent { get => throw null; set => throw null; } + public string UserHostAddress { get => throw null; set => throw null; } + public string Verb { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.Host.BasicResponse` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class BasicResponse : ServiceStack.Web.IResponse, ServiceStack.Web.IHasHeaders + { + public void AddHeader(string name, string value) => throw null; + public BasicResponse(ServiceStack.Host.BasicRequest requestContext) => throw null; + public void Close() => throw null; + public System.Threading.Tasks.Task CloseAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public string ContentType { get => throw null; set => throw null; } + public object Dto { get => throw null; set => throw null; } + public void End() => throw null; + public void Flush() => throw null; + public System.Threading.Tasks.Task FlushAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public string GetHeader(string name) => throw null; + public bool HasStarted { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary Headers { get => throw null; } + public bool IsClosed { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary Items { get => throw null; } + public bool KeepAlive { get => throw null; set => throw null; } + public object OriginalResponse { get => throw null; set => throw null; } + public System.IO.Stream OutputStream { get => throw null; } + public void Redirect(string url) => throw null; + public void RemoveHeader(string name) => throw null; + public ServiceStack.Web.IRequest Request { get => throw null; } + public void SetContentLength(System.Int64 contentLength) => throw null; + public int StatusCode { get => throw null; set => throw null; } + public string StatusDescription { get => throw null; set => throw null; } + public bool UseBufferedStream { get => throw null; set => throw null; } + public void Write(string text) => throw null; + } + + // Generated from `ServiceStack.Host.ContainerResolveCache` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ContainerResolveCache : ServiceStack.Configuration.ITypeFactory + { + public ContainerResolveCache(Funq.Container container) => throw null; + public object CreateInstance(ServiceStack.Configuration.IResolver resolver, System.Type type, bool tryResolve) => throw null; + public object CreateInstance(ServiceStack.Configuration.IResolver resolver, System.Type type) => throw null; + } + + // Generated from `ServiceStack.Host.ContentTypes` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ContentTypes : ServiceStack.Web.IContentTypes, ServiceStack.Web.IContentTypeWriter, ServiceStack.Web.IContentTypeReader + { + public System.Collections.Generic.Dictionary ContentTypeDeserializers; + public System.Collections.Generic.Dictionary ContentTypeDeserializersAsync; + public System.Collections.Generic.Dictionary ContentTypeFormats { get => throw null; } + public System.Collections.Generic.Dictionary ContentTypeSerializers; + public System.Collections.Generic.Dictionary ContentTypeSerializersAsync; + public System.Collections.Generic.Dictionary ContentTypeStringDeserializers; + public System.Collections.Generic.Dictionary ContentTypeStringSerializers; + public ContentTypes() => throw null; + public object DeserializeFromStream(string contentType, System.Type type, System.IO.Stream fromStream) => throw null; + public object DeserializeFromString(string contentType, System.Type type, string request) => throw null; + public string GetFormatContentType(string format) => throw null; + public ServiceStack.Web.StreamDeserializerDelegate GetStreamDeserializer(string contentType) => throw null; + public ServiceStack.Web.StreamDeserializerDelegateAsync GetStreamDeserializerAsync(string contentType) => throw null; + public ServiceStack.Web.StreamSerializerDelegate GetStreamSerializer(string contentType) => throw null; + public ServiceStack.Web.StreamSerializerDelegateAsync GetStreamSerializerAsync(string contentType) => throw null; + public static ServiceStack.Host.ContentTypes Instance; + public static System.Collections.Generic.HashSet KnownFormats; + public void Register(string contentType, ServiceStack.Web.StreamSerializerDelegate streamSerializer, ServiceStack.Web.StreamDeserializerDelegate streamDeserializer) => throw null; + public void RegisterAsync(string contentType, ServiceStack.Web.StreamSerializerDelegateAsync streamSerializer, ServiceStack.Web.StreamDeserializerDelegateAsync streamDeserializer) => throw null; + public void Remove(string contentType) => throw null; + public System.Byte[] SerializeToBytes(ServiceStack.Web.IRequest req, object response) => throw null; + public System.Threading.Tasks.Task SerializeToStreamAsync(ServiceStack.Web.IRequest req, object response, System.IO.Stream responseStream) => throw null; + public string SerializeToString(ServiceStack.Web.IRequest req, object response) => throw null; + public static System.Threading.Tasks.Task SerializeUnknownContentType(ServiceStack.Web.IRequest req, object response, System.IO.Stream stream) => throw null; + public void SetContentTypeDeserializer(string contentType, ServiceStack.Web.StreamDeserializerDelegate streamDeserializer) => throw null; + public void SetContentTypeSerializer(string contentType, ServiceStack.Web.StreamSerializerDelegate streamSerializer) => throw null; + public static ServiceStack.Web.StreamDeserializerDelegateAsync UnknownContentTypeDeserializer { get => throw null; set => throw null; } + public static ServiceStack.Web.StreamSerializerDelegateAsync UnknownContentTypeSerializer { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.Host.Cookies` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class Cookies : ServiceStack.Web.ICookies + { + public void AddPermanentCookie(string cookieName, string cookieValue, bool? secureOnly = default(bool?)) => throw null; + public void AddSessionCookie(string cookieName, string cookieValue, bool? secureOnly = default(bool?)) => throw null; + public Cookies(ServiceStack.Web.IHttpResponse httpRes) => throw null; + public void DeleteCookie(string cookieName) => throw null; + public const string RootPath = default; + } + + // Generated from `ServiceStack.Host.CookiesExtensions` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class CookiesExtensions + { + public static string AsHeaderValue(this System.Net.Cookie cookie) => throw null; + public static Microsoft.AspNetCore.Http.CookieOptions ToCookieOptions(this System.Net.Cookie cookie) => throw null; + } + + // Generated from `ServiceStack.Host.DataBinder` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class DataBinder + { + public DataBinder() => throw null; + public static string Eval(object container, string expression, string format) => throw null; + public static object Eval(object container, string expression) => throw null; + public static object GetDataItem(object container, out bool foundDataItem) => throw null; + public static object GetDataItem(object container) => throw null; + public static string GetIndexedPropertyValue(object container, string expr, string format) => throw null; + public static object GetIndexedPropertyValue(object container, string expr) => throw null; + public static string GetPropertyValue(object container, string propName, string format) => throw null; + public static object GetPropertyValue(object container, string propName) => throw null; + } + + // Generated from `ServiceStack.Host.DefaultHttpHandler` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class DefaultHttpHandler : ServiceStack.Host.IHttpHandler + { + public DefaultHttpHandler() => throw null; + } + + // Generated from `ServiceStack.Host.FallbackRestPathDelegate` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public delegate ServiceStack.Host.RestPath FallbackRestPathDelegate(ServiceStack.Web.IHttpRequest httpReq); + + // Generated from `ServiceStack.Host.HandleGatewayExceptionAsyncDelegate` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public delegate System.Threading.Tasks.Task HandleGatewayExceptionAsyncDelegate(ServiceStack.Web.IRequest httpReq, object request, System.Exception ex); + + // Generated from `ServiceStack.Host.HandleGatewayExceptionDelegate` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public delegate void HandleGatewayExceptionDelegate(ServiceStack.Web.IRequest httpReq, object request, System.Exception ex); + + // Generated from `ServiceStack.Host.HandleServiceExceptionAsyncDelegate` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public delegate System.Threading.Tasks.Task HandleServiceExceptionAsyncDelegate(ServiceStack.Web.IRequest httpReq, object request, System.Exception ex); + + // Generated from `ServiceStack.Host.HandleServiceExceptionDelegate` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public delegate object HandleServiceExceptionDelegate(ServiceStack.Web.IRequest httpReq, object request, System.Exception ex); + + // Generated from `ServiceStack.Host.HandleUncaughtExceptionAsyncDelegate` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public delegate System.Threading.Tasks.Task HandleUncaughtExceptionAsyncDelegate(ServiceStack.Web.IRequest httpReq, ServiceStack.Web.IResponse httpRes, string operationName, System.Exception ex); + + // Generated from `ServiceStack.Host.HandleUncaughtExceptionDelegate` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public delegate void HandleUncaughtExceptionDelegate(ServiceStack.Web.IRequest httpReq, ServiceStack.Web.IResponse httpRes, string operationName, System.Exception ex); + + // Generated from `ServiceStack.Host.HtmlString` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class HtmlString : ServiceStack.Host.IHtmlString + { + public HtmlString(string value) => throw null; + public string ToHtmlString() => throw null; + public override string ToString() => throw null; + } + + // Generated from `ServiceStack.Host.HttpException` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class HttpException : System.Exception + { + public HttpException(string message, System.Exception innerException) => throw null; + public HttpException(string message) => throw null; + public HttpException(int statusCode, string statusDescription) => throw null; + public HttpException() => throw null; + public int StatusCode { get => throw null; } + public string StatusDescription { get => throw null; } + } + + // Generated from `ServiceStack.Host.HttpFile` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class HttpFile : ServiceStack.Web.IHttpFile + { + public System.Int64 ContentLength { get => throw null; set => throw null; } + public string ContentType { get => throw null; set => throw null; } + public string FileName { get => throw null; set => throw null; } + public HttpFile() => throw null; + public System.IO.Stream InputStream { get => throw null; set => throw null; } + public string Name { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.Host.HttpHandlerResolverDelegate` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public delegate ServiceStack.Host.IHttpHandler HttpHandlerResolverDelegate(string httpMethod, string pathInfo, string filePath); + + // Generated from `ServiceStack.Host.HttpRequestAuthentication` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class HttpRequestAuthentication + { + public static string GetAuthorization(this ServiceStack.Web.IRequest req) => throw null; + public static string GetBasicAuth(this ServiceStack.Web.IRequest req) => throw null; + public static System.Collections.Generic.KeyValuePair? GetBasicAuthUserAndPassword(this ServiceStack.Web.IRequest httpReq) => throw null; + public static string GetBearerToken(this ServiceStack.Web.IRequest req) => throw null; + public static string GetCookieValue(this ServiceStack.Web.IRequest httpReq, string cookieName) => throw null; + public static System.Collections.Generic.Dictionary GetDigestAuth(this ServiceStack.Web.IRequest httpReq) => throw null; + public static string GetItemStringValue(this ServiceStack.Web.IRequest httpReq, string itemName) => throw null; + public static string GetJwtToken(this ServiceStack.Web.IRequest req) => throw null; + } + + // Generated from `ServiceStack.Host.HttpResponseStreamWrapper` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class HttpResponseStreamWrapper : ServiceStack.Web.IResponse, ServiceStack.Web.IHttpResponse, ServiceStack.Web.IHasHeaders + { + public void AddHeader(string name, string value) => throw null; + public void ClearCookies() => throw null; + public void Close() => throw null; + public System.Threading.Tasks.Task CloseAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public string ContentType { get => throw null; set => throw null; } + public ServiceStack.Web.ICookies Cookies { get => throw null; set => throw null; } + public object Dto { get => throw null; set => throw null; } + public void End() => throw null; + public void Flush() => throw null; + public System.Threading.Tasks.Task FlushAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public void ForceClose() => throw null; + public string GetHeader(string name) => throw null; + public bool HasStarted { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary Headers { get => throw null; set => throw null; } + public HttpResponseStreamWrapper(System.IO.Stream stream, ServiceStack.Web.IRequest request) => throw null; + public bool IsClosed { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary Items { get => throw null; set => throw null; } + public bool KeepAlive { get => throw null; set => throw null; } + public bool KeepOpen { get => throw null; set => throw null; } + public object OriginalResponse { get => throw null; } + public System.IO.Stream OutputStream { get => throw null; set => throw null; } + public void Redirect(string url) => throw null; + public void RemoveHeader(string name) => throw null; + public ServiceStack.Web.IRequest Request { get => throw null; set => throw null; } + public void SetContentLength(System.Int64 contentLength) => throw null; + public void SetCookie(System.Net.Cookie cookie) => throw null; + public int StatusCode { get => throw null; set => throw null; } + public string StatusDescription { get => throw null; set => throw null; } + public bool UseBufferedStream { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.Host.IHasBufferedStream` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IHasBufferedStream + { + System.IO.MemoryStream BufferedStream { get; } + } + + // Generated from `ServiceStack.Host.IHtmlString` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IHtmlString + { + string ToHtmlString(); + } + + // Generated from `ServiceStack.Host.IHttpAsyncHandler` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IHttpAsyncHandler : ServiceStack.Host.IHttpHandler + { + System.Threading.Tasks.Task Middleware(Microsoft.AspNetCore.Http.HttpContext context, System.Func next); + } + + // Generated from `ServiceStack.Host.IHttpHandler` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IHttpHandler + { + } + + // Generated from `ServiceStack.Host.IHttpHandlerFactory` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IHttpHandlerFactory + { + } + + // Generated from `ServiceStack.Host.IServiceExec` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IServiceExec + { + object Execute(ServiceStack.Web.IRequest requestContext, object instance, object request); + } + + // Generated from `ServiceStack.Host.ITypedFilter` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface ITypedFilter + { + void Invoke(ServiceStack.Web.IRequest req, ServiceStack.Web.IResponse res, object dto); + } + + // Generated from `ServiceStack.Host.ITypedFilter<>` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface ITypedFilter + { + void Invoke(ServiceStack.Web.IRequest req, ServiceStack.Web.IResponse res, T dto); + } + + // Generated from `ServiceStack.Host.ITypedFilterAsync` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface ITypedFilterAsync + { + System.Threading.Tasks.Task InvokeAsync(ServiceStack.Web.IRequest req, ServiceStack.Web.IResponse res, object dto); + } + + // Generated from `ServiceStack.Host.ITypedFilterAsync<>` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface ITypedFilterAsync + { + System.Threading.Tasks.Task InvokeAsync(ServiceStack.Web.IRequest req, ServiceStack.Web.IResponse res, T dto); + } + + // Generated from `ServiceStack.Host.InMemoryRollingRequestLogger` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class InMemoryRollingRequestLogger : ServiceStack.Web.IRequestLogger + { + protected ServiceStack.RequestLogEntry CreateEntry(ServiceStack.Web.IRequest request, object requestDto, object response, System.TimeSpan requestDuration, System.Type requestType) => throw null; + public System.Func CurrentDateFn { get => throw null; set => throw null; } + public const int DefaultCapacity = default; + public bool EnableErrorTracking { get => throw null; set => throw null; } + public bool EnableRequestBodyTracking { get => throw null; set => throw null; } + public bool EnableResponseTracking { get => throw null; set => throw null; } + public bool EnableSessionTracking { get => throw null; set => throw null; } + public System.Type[] ExcludeRequestDtoTypes { get => throw null; set => throw null; } + protected bool ExcludeRequestType(System.Type requestType) => throw null; + public virtual System.Collections.Generic.List GetLatestLogs(int? take) => throw null; + public System.Type[] HideRequestBodyForRequestDtoTypes { get => throw null; set => throw null; } + public System.Func IgnoreFilter { get => throw null; set => throw null; } + public InMemoryRollingRequestLogger(int? capacity) => throw null; + protected InMemoryRollingRequestLogger() => throw null; + public bool LimitToServiceRequests { get => throw null; set => throw null; } + public virtual void Log(ServiceStack.Web.IRequest request, object requestDto, object response, System.TimeSpan requestDuration) => throw null; + public System.Action RequestLogFilter { get => throw null; set => throw null; } + public string[] RequiredRoles { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary SerializableItems(System.Collections.Generic.Dictionary items) => throw null; + public virtual bool ShouldSkip(ServiceStack.Web.IRequest req, object requestDto) => throw null; + public System.Func SkipLogging { get => throw null; set => throw null; } + public static object ToSerializableErrorResponse(object response) => throw null; + protected int capacity; + protected System.Collections.Concurrent.ConcurrentQueue logEntries; + } + + // Generated from `ServiceStack.Host.InstanceExecFn` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public delegate object InstanceExecFn(ServiceStack.Web.IRequest requestContext, object instance, object request); + + // Generated from `ServiceStack.Host.MetadataTypeExtensions` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class MetadataTypeExtensions + { + public static System.Collections.Generic.HashSet CollectionTypes; + public static bool ExcludesFeature(this System.Type type, ServiceStack.Feature feature) => throw null; + public static string GetParamType(this ServiceStack.MetadataPropertyType prop, ServiceStack.MetadataType type, ServiceStack.Host.Operation op) => throw null; + public static string GetParamType(this ServiceStack.ApiMemberAttribute attr, System.Type type, string verb) => throw null; + public static bool Has(this ServiceStack.Feature feature, ServiceStack.Feature flag) => throw null; + public static bool IsAbstract(this ServiceStack.MetadataType type) => throw null; + public static bool IsArray(this ServiceStack.MetadataPropertyType prop) => throw null; + public static bool IsCollection(this ServiceStack.MetadataPropertyType prop) => throw null; + public static bool IsInterface(this ServiceStack.MetadataType type) => throw null; + public static bool? NullIfFalse(this bool value) => throw null; + public static System.Collections.Generic.Dictionary ToMetadataServiceRoutes(this System.Collections.Generic.Dictionary serviceRoutes, System.Action> filter = default(System.Action>)) => throw null; + } + + // Generated from `ServiceStack.Host.Operation` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class Operation + { + public System.Collections.Generic.List Actions { get => throw null; set => throw null; } + public void AddRequestPropertyValidationRules(System.Collections.Generic.List propertyValidators) => throw null; + public void AddRequestTypeValidationRules(System.Collections.Generic.List typeValidators) => throw null; + public System.Type DataModelType { get => throw null; } + public bool IsOneWay { get => throw null; } + public string Name { get => throw null; } + public Operation() => throw null; + public System.Collections.Generic.List RequestFilterAttributes { get => throw null; set => throw null; } + public System.Collections.Generic.List RequestPropertyValidationRules { get => throw null; set => throw null; } + public System.Type RequestType { get => throw null; set => throw null; } + public System.Collections.Generic.List RequestTypeValidationRules { get => throw null; set => throw null; } + public System.Collections.Generic.List RequiredPermissions { get => throw null; set => throw null; } + public System.Collections.Generic.List RequiredRoles { get => throw null; set => throw null; } + public System.Collections.Generic.List RequiresAnyPermission { get => throw null; set => throw null; } + public System.Collections.Generic.List RequiresAnyRole { get => throw null; set => throw null; } + public bool RequiresAuthentication { get => throw null; set => throw null; } + public System.Collections.Generic.List ResponseFilterAttributes { get => throw null; set => throw null; } + public System.Type ResponseType { get => throw null; set => throw null; } + public ServiceStack.RestrictAttribute RestrictTo { get => throw null; set => throw null; } + public System.Collections.Generic.List Routes { get => throw null; set => throw null; } + public System.Type ServiceType { get => throw null; set => throw null; } + public System.Collections.Generic.List Tags { get => throw null; set => throw null; } + public System.Type ViewModelType { get => throw null; } + } + + // Generated from `ServiceStack.Host.OperationDto` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class OperationDto + { + public System.Collections.Generic.List Actions { get => throw null; set => throw null; } + public string Name { get => throw null; set => throw null; } + public OperationDto() => throw null; + public string ResponseName { get => throw null; set => throw null; } + public System.Collections.Generic.List RestrictTo { get => throw null; set => throw null; } + public System.Collections.Generic.List Routes { get => throw null; set => throw null; } + public string ServiceName { get => throw null; set => throw null; } + public System.Collections.Generic.List Tags { get => throw null; set => throw null; } + public System.Collections.Generic.List VisibleTo { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.Host.RequestPreferences` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class RequestPreferences : ServiceStack.Web.IRequestPreferences + { + public string AcceptEncoding { get => throw null; } + public bool AcceptsDeflate { get => throw null; } + public bool AcceptsGzip { get => throw null; } + public RequestPreferences(ServiceStack.Web.IRequest httpRequest) => throw null; + } + + // Generated from `ServiceStack.Host.RestHandler` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class RestHandler : ServiceStack.Host.Handlers.ServiceStackHandlerBase, ServiceStack.Host.Handlers.IRequestHttpHandler + { + public static object CreateRequest(ServiceStack.Web.IRequest httpReq, ServiceStack.Web.IRestPath restPath, System.Collections.Generic.Dictionary requestParams, object requestDto) => throw null; + public static System.Threading.Tasks.Task CreateRequestAsync(ServiceStack.Web.IRequest httpReq, ServiceStack.Web.IRestPath restPath, System.Collections.Generic.Dictionary requestParams) => throw null; + public static System.Threading.Tasks.Task CreateRequestAsync(ServiceStack.Web.IRequest httpReq, ServiceStack.Web.IRestPath restPath) => throw null; + public System.Threading.Tasks.Task CreateRequestAsync(ServiceStack.Web.IRequest httpReq, string operationName) => throw null; + public static ServiceStack.Web.IRestPath FindMatchingRestPath(string httpMethod, string pathInfo, out string contentType) => throw null; + public static ServiceStack.Web.IRestPath FindMatchingRestPath(ServiceStack.Web.IHttpRequest httpReq, out string contentType) => throw null; + public ServiceStack.Web.IRestPath GetRestPath(ServiceStack.Web.IHttpRequest httpReq) => throw null; + public static string GetSanitizedPathInfo(string pathInfo, out string contentType) => throw null; + public override System.Threading.Tasks.Task ProcessRequestAsync(ServiceStack.Web.IRequest req, ServiceStack.Web.IResponse httpRes, string operationName) => throw null; + public string ResponseContentType { get => throw null; set => throw null; } + public RestHandler() => throw null; + public ServiceStack.Web.IRestPath RestPath { get => throw null; set => throw null; } + public override bool RunAsAsync() => throw null; + } + + // Generated from `ServiceStack.Host.RestPath` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class RestPath : ServiceStack.Web.IRestPath + { + public void AfterInit() => throw null; + public string AllowedVerbs { get => throw null; } + public bool AllowsAllVerbs { get => throw null; } + public static System.Func CalculateMatchScore { get => throw null; set => throw null; } + public object CreateRequest(string pathInfo, System.Collections.Generic.Dictionary queryStringAndFormData, object fromInstance) => throw null; + public object CreateRequest(string pathInfo) => throw null; + public string FirstMatchHashKey { get => throw null; set => throw null; } + public static System.Collections.Generic.IEnumerable GetFirstMatchHashKeys(string[] pathPartsForMatching) => throw null; + public static System.Collections.Generic.IEnumerable GetFirstMatchWildCardHashKeys(string[] pathPartsForMatching) => throw null; + public override int GetHashCode() => throw null; + public static string[] GetPathPartsForMatching(string pathInfo) => throw null; + public System.Func GetRequestRule() => throw null; + public bool IsMatch(string httpMethod, string[] withPathInfoParts, out int wildcardMatchCount) => throw null; + public bool IsMatch(ServiceStack.Web.IHttpRequest httpReq) => throw null; + public bool IsValid { get => throw null; set => throw null; } + public bool IsVariable(string name) => throw null; + public bool IsWildCardPath { get => throw null; set => throw null; } + public string MatchRule { get => throw null; set => throw null; } + public int MatchScore(string httpMethod, string[] withPathInfoParts) => throw null; + public string Notes { get => throw null; set => throw null; } + public string Path { get => throw null; } + public int PathComponentsCount { get => throw null; set => throw null; } + public int Priority { get => throw null; set => throw null; } + public System.Type RequestType { get => throw null; } + public RestPath(System.Type requestType, string path, string verbs, string summary = default(string), string notes = default(string), string matchRule = default(string)) => throw null; + public RestPath(System.Type requestType, string path) => throw null; + public string Summary { get => throw null; set => throw null; } + public ServiceStack.RestRoute ToRestRoute() => throw null; + public int TotalComponentsCount { get => throw null; set => throw null; } + public string UniqueMatchHashKey { get => throw null; } + public int VariableArgsCount { get => throw null; set => throw null; } + public string[] Verbs { get => throw null; } + } + + // Generated from `ServiceStack.Host.RouteNamingConvention` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class RouteNamingConvention + { + public static System.Collections.Generic.List AttributeNamesToMatch; + public static System.Collections.Generic.List PropertyNamesToMatch; + public static void WithMatchingAttributes(ServiceStack.Web.IServiceRoutes routes, System.Type requestType, string allowedVerbs) => throw null; + public static void WithMatchingPropertyNames(ServiceStack.Web.IServiceRoutes routes, System.Type requestType, string allowedVerbs) => throw null; + public static void WithRequestDtoName(ServiceStack.Web.IServiceRoutes routes, System.Type requestType, string allowedVerbs) => throw null; + } + + // Generated from `ServiceStack.Host.RouteNamingConventionDelegate` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public delegate void RouteNamingConventionDelegate(ServiceStack.Web.IServiceRoutes routes, System.Type requestType, string allowedVerbs); + + // Generated from `ServiceStack.Host.ServiceController` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ServiceController : ServiceStack.Web.IServiceExecutor, ServiceStack.Web.IServiceController + { + public void AfterInit() => throw null; + public object ApplyResponseFilters(object response, ServiceStack.Web.IRequest req) => throw null; + public void AssertServiceRestrictions(System.Type requestType, ServiceStack.RequestAttributes actualAttributes) => throw null; + public string DefaultOperationsNamespace { get => throw null; set => throw null; } + public virtual object Execute(object requestDto, ServiceStack.Web.IRequest req) => throw null; + public object Execute(object requestDto, ServiceStack.Web.IRequest req, bool applyFilters) => throw null; + public object Execute(object requestDto) => throw null; + public object Execute(ServiceStack.Web.IRequest req, bool applyFilters) => throw null; + public virtual System.Threading.Tasks.Task ExecuteAsync(object requestDto, ServiceStack.Web.IRequest req) => throw null; + public object ExecuteMessage(ServiceStack.Messaging.IMessage mqMessage) => throw null; + public object ExecuteMessage(ServiceStack.Messaging.IMessage dto, ServiceStack.Web.IRequest req) => throw null; + public System.Threading.Tasks.Task ExecuteMessageAsync(ServiceStack.Messaging.IMessage mqMessage, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task ExecuteMessageAsync(ServiceStack.Messaging.IMessage dto, ServiceStack.Web.IRequest req, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public System.Threading.Tasks.Task GatewayExecuteAsync(object requestDto, ServiceStack.Web.IRequest req, bool applyFilters) => throw null; + public ServiceStack.Web.IRestPath GetRestPathForRequest(string httpMethod, string pathInfo) => throw null; + public ServiceStack.Host.RestPath GetRestPathForRequest(string httpMethod, string pathInfo, ServiceStack.Web.IHttpRequest httpReq) => throw null; + public virtual ServiceStack.Host.ServiceExecFn GetService(System.Type requestType) => throw null; + public ServiceStack.Host.ServiceController Init() => throw null; + public static bool IsServiceAction(string actionName, System.Type requestType) => throw null; + public static bool IsServiceAction(ServiceStack.Host.ActionMethod mi) => throw null; + public static bool IsServiceType(System.Type serviceType) => throw null; + public void RegisterRestPath(ServiceStack.Host.RestPath restPath) => throw null; + public void RegisterRestPaths(System.Type requestType) => throw null; + public void RegisterService(System.Type serviceType) => throw null; + public void RegisterService(ServiceStack.Configuration.ITypeFactory serviceFactoryFn, System.Type serviceType) => throw null; + public void RegisterServiceExecutor(System.Type requestType, System.Type serviceType, ServiceStack.Configuration.ITypeFactory serviceFactoryFn) => throw null; + public void RegisterServicesInAssembly(System.Reflection.Assembly assembly) => throw null; + public System.Collections.Generic.Dictionary> RequestTypeFactoryMap { get => throw null; set => throw null; } + public void ResetServiceExecCachesIfNeeded(System.Type serviceType, System.Type requestType) => throw null; + public System.Func> ResolveServicesFn { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary> RestPathMap; + public ServiceController(ServiceStack.ServiceStackHost appHost, params System.Reflection.Assembly[] assembliesWithServices) => throw null; + public ServiceController(ServiceStack.ServiceStackHost appHost, System.Func> resolveServicesFn) => throw null; + public ServiceController(ServiceStack.ServiceStackHost appHost) => throw null; + } + + // Generated from `ServiceStack.Host.ServiceExecExtensions` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class ServiceExecExtensions + { + public static System.Collections.Generic.List GetActions(this System.Type serviceType) => throw null; + public static System.Collections.Generic.List GetRequestActions(this System.Type serviceType, System.Type requestType) => throw null; + } + + // Generated from `ServiceStack.Host.ServiceExecFn` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public delegate System.Threading.Tasks.Task ServiceExecFn(ServiceStack.Web.IRequest requestContext, object request); + + // Generated from `ServiceStack.Host.ServiceMetadata` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ServiceMetadata + { + public void Add(System.Type serviceType, System.Type requestType, System.Type responseType) => throw null; + public static void AddReferencedTypes(System.Collections.Generic.HashSet to, System.Type type) => throw null; + public void AfterInit() => throw null; + public bool CanAccess(ServiceStack.Web.IRequest httpReq, ServiceStack.Format format, string operationName) => throw null; + public bool CanAccess(ServiceStack.RequestAttributes reqAttrs, ServiceStack.Format format, string operationName) => throw null; + public bool CanAccess(ServiceStack.Format format, string operationName) => throw null; + public object CreateRequestFromUrl(string relativeOrAbsoluteUrl, string method = default(string)) => throw null; + public System.Type FindDtoType(string typeName) => throw null; + public ServiceStack.Host.RestPath FindRoute(string pathInfo, string method = default(string)) => throw null; + public System.Collections.Generic.HashSet GetAllDtos() => throw null; + public System.Collections.Generic.List GetAllOperationNames() => throw null; + public System.Collections.Generic.List GetAllOperationTypes() => throw null; + public System.Collections.Generic.List GetAllPermissions() => throw null; + public System.Collections.Generic.List GetAllRoles() => throw null; + public System.Collections.Generic.List GetImplementedActions(System.Type serviceType, System.Type requestType) => throw null; + public System.Collections.Generic.List GetMetadataTypesForOperation(ServiceStack.Web.IRequest httpReq, ServiceStack.Host.Operation op) => throw null; + public ServiceStack.Host.Operation GetOperation(System.Type requestType) => throw null; + public System.Collections.Generic.List GetOperationAssemblies() => throw null; + public System.Collections.Generic.List GetOperationDtos() => throw null; + public System.Collections.Generic.List GetOperationNamesForMetadata(ServiceStack.Web.IRequest httpReq, ServiceStack.Format format) => throw null; + public System.Collections.Generic.List GetOperationNamesForMetadata(ServiceStack.Web.IRequest httpReq) => throw null; + public System.Type GetOperationType(string operationTypeName) => throw null; + public System.Collections.Generic.List GetOperationsByTag(string tag) => throw null; + public System.Collections.Generic.List GetOperationsByTags(string[] tags) => throw null; + public System.Type GetResponseTypeByRequest(System.Type requestType) => throw null; + public System.Type GetServiceTypeByRequest(System.Type requestType) => throw null; + public System.Type GetServiceTypeByResponse(System.Type responseType) => throw null; + public bool HasImplementation(ServiceStack.Host.Operation operation, ServiceStack.Format format) => throw null; + public bool IsAuthorized(ServiceStack.Host.Operation operation, ServiceStack.Web.IRequest req, ServiceStack.Auth.IAuthSession session) => throw null; + public bool IsVisible(ServiceStack.Web.IRequest httpReq, System.Type requestType) => throw null; + public bool IsVisible(ServiceStack.Web.IRequest httpReq, ServiceStack.Host.Operation operation) => throw null; + public bool IsVisible(ServiceStack.Web.IRequest httpReq, ServiceStack.Format format, string operationName) => throw null; + public System.Collections.Generic.Dictionary OperationNamesMap { get => throw null; set => throw null; } + public System.Collections.Generic.IEnumerable Operations { get => throw null; } + public System.Collections.Generic.Dictionary OperationsMap { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary OperationsResponseMap { get => throw null; set => throw null; } + public System.Collections.Generic.HashSet RequestTypes { get => throw null; set => throw null; } + public System.Collections.Generic.HashSet ResponseTypes { get => throw null; set => throw null; } + public ServiceMetadata(System.Collections.Generic.List restPaths) => throw null; + public System.Collections.Generic.HashSet ServiceTypes { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.Host.ServiceMetadataExtensions` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class ServiceMetadataExtensions + { + public static System.Collections.Generic.List GetApiMembers(this System.Type operationType) => throw null; + public static System.Collections.Generic.List GetAssemblies(this ServiceStack.Host.Operation operation) => throw null; + public static ServiceStack.Host.OperationDto ToOperationDto(this ServiceStack.Host.Operation operation) => throw null; + } + + // Generated from `ServiceStack.Host.ServiceRequestExec<,>` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ServiceRequestExec : ServiceStack.Host.IServiceExec + { + public object Execute(ServiceStack.Web.IRequest requestContext, object instance, object request) => throw null; + public ServiceRequestExec() => throw null; + } + + // Generated from `ServiceStack.Host.ServiceRoutes` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ServiceRoutes : ServiceStack.Web.IServiceRoutes + { + public ServiceStack.Web.IServiceRoutes Add(string restPath, string verbs) => throw null; + public ServiceStack.Web.IServiceRoutes Add(string restPath) => throw null; + public ServiceStack.Web.IServiceRoutes Add(System.Type requestType, string restPath, string verbs, string summary, string notes, string matches) => throw null; + public ServiceStack.Web.IServiceRoutes Add(System.Type requestType, string restPath, string verbs, string summary, string notes) => throw null; + public ServiceStack.Web.IServiceRoutes Add(System.Type requestType, string restPath, string verbs, int priority) => throw null; + public ServiceStack.Web.IServiceRoutes Add(System.Type requestType, string restPath, string verbs) => throw null; + public ServiceRoutes(ServiceStack.ServiceStackHost appHost) => throw null; + } + + // Generated from `ServiceStack.Host.ServiceRunner<>` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ServiceRunner : ServiceStack.Web.IServiceRunner, ServiceStack.Web.IServiceRunner + { + protected ServiceStack.Host.ActionContext ActionContext; + public virtual object AfterEachRequest(ServiceStack.Web.IRequest req, TRequest request, object response, object service) => throw null; + protected ServiceStack.IAppHost AppHost; + public virtual void BeforeEachRequest(ServiceStack.Web.IRequest req, TRequest request, object service) => throw null; + public virtual object Execute(ServiceStack.Web.IRequest req, object instance, TRequest requestDto) => throw null; + public virtual object Execute(ServiceStack.Web.IRequest req, object instance, ServiceStack.Messaging.IMessage request) => throw null; + public virtual System.Threading.Tasks.Task ExecuteAsync(ServiceStack.Web.IRequest req, object instance, TRequest requestDto) => throw null; + public object ExecuteOneWay(ServiceStack.Web.IRequest req, object instance, TRequest requestDto) => throw null; + public virtual System.Threading.Tasks.Task HandleExceptionAsync(ServiceStack.Web.IRequest req, TRequest requestDto, System.Exception ex, object service) => throw null; + public virtual System.Threading.Tasks.Task HandleExceptionAsync(ServiceStack.Web.IRequest req, TRequest requestDto, System.Exception ex) => throw null; + protected static ServiceStack.Logging.ILog Log; + public virtual object OnAfterExecute(ServiceStack.Web.IRequest req, object response, object service) => throw null; + public virtual object OnAfterExecute(ServiceStack.Web.IRequest req, object response) => throw null; + public virtual void OnBeforeExecute(ServiceStack.Web.IRequest req, TRequest request, object service) => throw null; + public virtual void OnBeforeExecute(ServiceStack.Web.IRequest req, TRequest request) => throw null; + public object Process(ServiceStack.Web.IRequest requestContext, object instance, object request) => throw null; + protected ServiceStack.Web.IRequestFilterBase[] RequestFilters; + public T ResolveService(ServiceStack.Web.IRequest requestContext) => throw null; + protected ServiceStack.Web.IResponseFilterBase[] ResponseFilters; + protected ServiceStack.Host.ActionInvokerFn ServiceAction; + public ServiceRunner(ServiceStack.IAppHost appHost, ServiceStack.Host.ActionContext actionContext) => throw null; + } + + // Generated from `ServiceStack.Host.StreamSerializerResolverDelegate` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public delegate bool StreamSerializerResolverDelegate(ServiceStack.Web.IRequest requestContext, object dto, ServiceStack.Web.IResponse httpRes); + + // Generated from `ServiceStack.Host.TypedFilter<>` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class TypedFilter : ServiceStack.Host.ITypedFilter + { + public void Invoke(ServiceStack.Web.IRequest req, ServiceStack.Web.IResponse res, object dto) => throw null; + public TypedFilter(System.Action action) => throw null; + } + + // Generated from `ServiceStack.Host.TypedFilterAsync<>` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class TypedFilterAsync : ServiceStack.Host.ITypedFilterAsync + { + public System.Threading.Tasks.Task InvokeAsync(ServiceStack.Web.IRequest req, ServiceStack.Web.IResponse res, object dto) => throw null; + public TypedFilterAsync(System.Func action) => throw null; + } + + // Generated from `ServiceStack.Host.VoidActionInvokerFn` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public delegate void VoidActionInvokerFn(object instance, object request); + + // Generated from `ServiceStack.Host.XsdMetadata` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class XsdMetadata + { + public bool Flash { get => throw null; set => throw null; } + public static System.Type GetBaseTypeWithTheSameName(System.Type type) => throw null; + public System.Collections.Generic.List GetOneWayOperationNames(ServiceStack.Format format, System.Collections.Generic.HashSet soapTypes) => throw null; + public System.Collections.Generic.List GetReplyOperationNames(ServiceStack.Format format, System.Collections.Generic.HashSet soapTypes) => throw null; + public ServiceStack.Host.ServiceMetadata Metadata { get => throw null; set => throw null; } + public XsdMetadata(ServiceStack.Host.ServiceMetadata metadata, bool flash = default(bool)) => throw null; + } + + namespace Handlers + { + // Generated from `ServiceStack.Host.Handlers.CustomActionHandler` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class CustomActionHandler : ServiceStack.Host.Handlers.HttpAsyncTaskHandler + { + public System.Action Action { get => throw null; set => throw null; } + public CustomActionHandler(System.Action action) => throw null; + public override void ProcessRequest(ServiceStack.Web.IRequest httpReq, ServiceStack.Web.IResponse httpRes, string operationName) => throw null; + } + + // Generated from `ServiceStack.Host.Handlers.CustomActionHandlerAsync` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class CustomActionHandlerAsync : ServiceStack.Host.Handlers.HttpAsyncTaskHandler + { + public System.Func Action { get => throw null; set => throw null; } + public CustomActionHandlerAsync(System.Func action) => throw null; + public override System.Threading.Tasks.Task ProcessRequestAsync(ServiceStack.Web.IRequest httpReq, ServiceStack.Web.IResponse httpRes, string operationName) => throw null; + } + + // Generated from `ServiceStack.Host.Handlers.CustomResponseHandler` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class CustomResponseHandler : ServiceStack.Host.Handlers.HttpAsyncTaskHandler + { + public System.Func Action { get => throw null; set => throw null; } + public CustomResponseHandler(System.Func action, string operationName = default(string)) => throw null; + public override void ProcessRequest(ServiceStack.Web.IRequest httpReq, ServiceStack.Web.IResponse httpRes, string operationName) => throw null; + } + + // Generated from `ServiceStack.Host.Handlers.CustomResponseHandlerAsync` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class CustomResponseHandlerAsync : ServiceStack.Host.Handlers.HttpAsyncTaskHandler + { + public System.Func> Action { get => throw null; set => throw null; } + public CustomResponseHandlerAsync(System.Func> action, string operationName = default(string)) => throw null; + public override System.Threading.Tasks.Task ProcessRequestAsync(ServiceStack.Web.IRequest httpReq, ServiceStack.Web.IResponse httpRes, string operationName) => throw null; + } + + // Generated from `ServiceStack.Host.Handlers.ForbiddenHttpHandler` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ForbiddenHttpHandler : ServiceStack.Host.Handlers.HttpAsyncTaskHandler + { + public string DefaultHandler { get => throw null; set => throw null; } + public string DefaultRootFileName { get => throw null; set => throw null; } + public ForbiddenHttpHandler() => throw null; + public override bool IsReusable { get => throw null; } + public override System.Threading.Tasks.Task ProcessRequestAsync(ServiceStack.Web.IRequest request, ServiceStack.Web.IResponse response, string operationName) => throw null; + public override bool RunAsAsync() => throw null; + public string WebHostPhysicalPath { get => throw null; set => throw null; } + public string WebHostUrl { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.Host.Handlers.GenericHandler` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class GenericHandler : ServiceStack.Host.Handlers.ServiceStackHandlerBase, ServiceStack.Host.Handlers.IRequestHttpHandler + { + public ServiceStack.RequestAttributes ContentTypeAttribute { get => throw null; set => throw null; } + public System.Threading.Tasks.Task CreateRequestAsync(ServiceStack.Web.IRequest req, string operationName) => throw null; + public GenericHandler(string contentType, ServiceStack.RequestAttributes handlerAttributes, ServiceStack.Feature format) => throw null; + public string HandlerContentType { get => throw null; set => throw null; } + public override System.Threading.Tasks.Task ProcessRequestAsync(ServiceStack.Web.IRequest httpReq, ServiceStack.Web.IResponse httpRes, string operationName) => throw null; + public override bool RunAsAsync() => throw null; + } + + // Generated from `ServiceStack.Host.Handlers.HttpAsyncTaskHandler` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public abstract class HttpAsyncTaskHandler : ServiceStack.Host.IHttpHandler, ServiceStack.Host.IHttpAsyncHandler, ServiceStack.Host.Handlers.IServiceStackHandler + { + protected virtual System.Threading.Tasks.Task CreateProcessRequestTask(ServiceStack.Web.IRequest httpReq, ServiceStack.Web.IResponse httpRes, string operationName) => throw null; + protected System.Threading.Tasks.Task HandleException(ServiceStack.Web.IRequest httpReq, ServiceStack.Web.IResponse httpRes, string operationName, System.Exception ex) => throw null; + protected HttpAsyncTaskHandler() => throw null; + public virtual bool IsReusable { get => throw null; } + public virtual System.Threading.Tasks.Task Middleware(Microsoft.AspNetCore.Http.HttpContext context, System.Func next) => throw null; + public virtual void ProcessRequest(ServiceStack.Web.IRequest httpReq, ServiceStack.Web.IResponse httpRes, string operationName) => throw null; + public virtual System.Threading.Tasks.Task ProcessRequestAsync(ServiceStack.Web.IRequest httpReq, ServiceStack.Web.IResponse httpRes, string operationName) => throw null; + public string RequestName { get => throw null; set => throw null; } + public virtual bool RunAsAsync() => throw null; + } + + // Generated from `ServiceStack.Host.Handlers.IRequestHttpHandler` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IRequestHttpHandler + { + System.Threading.Tasks.Task CreateRequestAsync(ServiceStack.Web.IRequest req, string operationName); + System.Threading.Tasks.Task GetResponseAsync(ServiceStack.Web.IRequest httpReq, object request); + System.Threading.Tasks.Task HandleResponse(ServiceStack.Web.IRequest httpReq, ServiceStack.Web.IResponse httpRes, object response); + string RequestName { get; } + } + + // Generated from `ServiceStack.Host.Handlers.IServiceStackHandler` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IServiceStackHandler + { + void ProcessRequest(ServiceStack.Web.IRequest httpReq, ServiceStack.Web.IResponse httpRes, string operationName); + System.Threading.Tasks.Task ProcessRequestAsync(ServiceStack.Web.IRequest httpReq, ServiceStack.Web.IResponse httpRes, string operationName); + string RequestName { get; } + } + + // Generated from `ServiceStack.Host.Handlers.JsonOneWayHandler` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class JsonOneWayHandler : ServiceStack.Host.Handlers.GenericHandler + { + public JsonOneWayHandler() : base(default(string), default(ServiceStack.RequestAttributes), default(ServiceStack.Feature)) => throw null; + } + + // Generated from `ServiceStack.Host.Handlers.JsonReplyHandler` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class JsonReplyHandler : ServiceStack.Host.Handlers.GenericHandler + { + public JsonReplyHandler() : base(default(string), default(ServiceStack.RequestAttributes), default(ServiceStack.Feature)) => throw null; + } + + // Generated from `ServiceStack.Host.Handlers.JsvOneWayHandler` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class JsvOneWayHandler : ServiceStack.Host.Handlers.GenericHandler + { + public JsvOneWayHandler() : base(default(string), default(ServiceStack.RequestAttributes), default(ServiceStack.Feature)) => throw null; + } + + // Generated from `ServiceStack.Host.Handlers.JsvReplyHandler` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class JsvReplyHandler : ServiceStack.Host.Handlers.GenericHandler + { + public JsvReplyHandler() : base(default(string), default(ServiceStack.RequestAttributes), default(ServiceStack.Feature)) => throw null; + public override System.Threading.Tasks.Task ProcessRequestAsync(ServiceStack.Web.IRequest httpReq, ServiceStack.Web.IResponse httpRes, string operationName) => throw null; + } + + // Generated from `ServiceStack.Host.Handlers.NotFoundHttpHandler` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class NotFoundHttpHandler : ServiceStack.Host.Handlers.HttpAsyncTaskHandler + { + public string DefaultHandler { get => throw null; set => throw null; } + public string DefaultRootFileName { get => throw null; set => throw null; } + public override bool IsReusable { get => throw null; } + public NotFoundHttpHandler() => throw null; + public override System.Threading.Tasks.Task ProcessRequestAsync(ServiceStack.Web.IRequest request, ServiceStack.Web.IResponse response, string operationName) => throw null; + public string WebHostPhysicalPath { get => throw null; set => throw null; } + public string WebHostUrl { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.Host.Handlers.RedirectHttpHandler` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class RedirectHttpHandler : ServiceStack.Host.Handlers.HttpAsyncTaskHandler + { + public string AbsoluteUrl { get => throw null; set => throw null; } + public static string MakeRelative(string relativeUrl) => throw null; + public override System.Threading.Tasks.Task ProcessRequestAsync(ServiceStack.Web.IRequest request, ServiceStack.Web.IResponse response, string operationName) => throw null; + public RedirectHttpHandler() => throw null; + public string RelativeUrl { get => throw null; set => throw null; } + public System.Net.HttpStatusCode StatusCode { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.Host.Handlers.RequestHandlerInfo` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class RequestHandlerInfo + { + public string HandlerType { get => throw null; set => throw null; } + public string OperationName { get => throw null; set => throw null; } + public string PathInfo { get => throw null; set => throw null; } + public RequestHandlerInfo() => throw null; + } + + // Generated from `ServiceStack.Host.Handlers.RequestInfo` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class RequestInfo + { + public RequestInfo() => throw null; + } + + // Generated from `ServiceStack.Host.Handlers.RequestInfoHandler` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class RequestInfoHandler : ServiceStack.Host.Handlers.HttpAsyncTaskHandler + { + public static ServiceStack.Host.Handlers.RequestInfoResponse GetRequestInfo(ServiceStack.Web.IRequest httpReq) => throw null; + public static ServiceStack.Host.Handlers.RequestHandlerInfo LastRequestInfo; + public override System.Threading.Tasks.Task ProcessRequestAsync(ServiceStack.Web.IRequest httpReq, ServiceStack.Web.IResponse httpRes, string operationName) => throw null; + public ServiceStack.Host.Handlers.RequestInfoResponse RequestInfo { get => throw null; set => throw null; } + public RequestInfoHandler() => throw null; + public static System.Collections.Generic.Dictionary ToDictionary(System.Collections.Specialized.NameValueCollection nvc) => throw null; + public static string ToString(System.Collections.Specialized.NameValueCollection nvc) => throw null; + } + + // Generated from `ServiceStack.Host.Handlers.RequestInfoResponse` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class RequestInfoResponse + { + public string AbsoluteUri { get => throw null; set => throw null; } + public System.Collections.Generic.List AcceptTypes { get => throw null; set => throw null; } + public System.Collections.Generic.List AllOperationNames { get => throw null; set => throw null; } + public string ApplicationBaseUrl { get => throw null; set => throw null; } + public string ApplicationPath { get => throw null; set => throw null; } + public string ApplicationVirtualPath { get => throw null; set => throw null; } + public System.Collections.Generic.List AsyncErrors { get => throw null; set => throw null; } + public System.Int64 ContentLength { get => throw null; set => throw null; } + public string ContentRootDirectoryPath { get => throw null; set => throw null; } + public string ContentType { get => throw null; set => throw null; } + public string CurrentDirectory { get => throw null; set => throw null; } + public string Date { get => throw null; set => throw null; } + public string DebugString { get => throw null; set => throw null; } + public string ErrorCode { get => throw null; set => throw null; } + public string ErrorMessage { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary FormData { get => throw null; set => throw null; } + public string GetLeftPath { get => throw null; set => throw null; } + public string GetPathUrl { get => throw null; set => throw null; } + public string HandlerFactoryArgs { get => throw null; set => throw null; } + public string HandlerFactoryPath { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary Headers { get => throw null; set => throw null; } + public string Host { get => throw null; set => throw null; } + public string HostType { get => throw null; set => throw null; } + public string HttpMethod { get => throw null; set => throw null; } + public string Ipv4Addresses { get => throw null; set => throw null; } + public string Ipv6Addresses { get => throw null; set => throw null; } + public ServiceStack.Host.Handlers.RequestHandlerInfo LastRequestInfo { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary LogonUserInfo { get => throw null; set => throw null; } + public string OperationName { get => throw null; set => throw null; } + public System.Collections.Generic.List OperationNames { get => throw null; set => throw null; } + public string OriginalPathInfo { get => throw null; set => throw null; } + public string Path { get => throw null; set => throw null; } + public string PathInfo { get => throw null; set => throw null; } + public System.Collections.Generic.List PluginsLoaded { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary QueryString { get => throw null; set => throw null; } + public string RawUrl { get => throw null; set => throw null; } + public string RequestAttributes { get => throw null; set => throw null; } + public RequestInfoResponse() => throw null; + public System.Collections.Generic.Dictionary RequestResponseMap { get => throw null; set => throw null; } + public string ResolveAbsoluteUrl { get => throw null; set => throw null; } + public string ResponseContentType { get => throw null; set => throw null; } + public string RootDirectoryPath { get => throw null; set => throw null; } + public string ServiceName { get => throw null; set => throw null; } + public System.Collections.Generic.List StartUpErrors { get => throw null; set => throw null; } + public string StartedAt { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary Stats { get => throw null; set => throw null; } + public int Status { get => throw null; set => throw null; } + public bool StripApplicationVirtualPath { get => throw null; set => throw null; } + public string Url { get => throw null; set => throw null; } + public string Usage { get => throw null; set => throw null; } + public string UserHostAddress { get => throw null; set => throw null; } + public string VirtualAbsolutePathRoot { get => throw null; set => throw null; } + public string VirtualAppRelativePathRoot { get => throw null; set => throw null; } + public System.Collections.Generic.List VirtualPathProviderFiles { get => throw null; set => throw null; } + public string WebHostUrl { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.Host.Handlers.ServiceStackHandlerBase` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public abstract class ServiceStackHandlerBase : ServiceStack.Host.Handlers.HttpAsyncTaskHandler + { + protected bool AssertAccess(ServiceStack.Web.IHttpRequest httpReq, ServiceStack.Web.IHttpResponse httpRes, ServiceStack.Feature feature, string operationName) => throw null; + protected static void AssertOperationExists(string operationName, System.Type type) => throw null; + protected static System.Threading.Tasks.Task CreateContentTypeRequestAsync(ServiceStack.Web.IRequest httpReq, System.Type requestType, string contentType) => throw null; + public static System.Threading.Tasks.Task DeserializeHttpRequestAsync(System.Type operationType, ServiceStack.Web.IRequest httpReq, string contentType) => throw null; + protected static object ExecuteService(object request, ServiceStack.Web.IRequest httpReq) => throw null; + protected static object GetCustomRequestFromBinder(ServiceStack.Web.IRequest httpReq, System.Type requestType) => throw null; + public static System.Type GetOperationType(string operationName) => throw null; + public virtual System.Threading.Tasks.Task GetResponseAsync(ServiceStack.Web.IRequest httpReq, object request) => throw null; + public System.Threading.Tasks.Task HandleResponse(ServiceStack.Web.IRequest httpReq, ServiceStack.Web.IResponse httpRes, object response) => throw null; + public ServiceStack.RequestAttributes HandlerAttributes { get => throw null; set => throw null; } + public override bool IsReusable { get => throw null; } + protected ServiceStackHandlerBase() => throw null; + public void UpdateResponseContentType(ServiceStack.Web.IRequest httpReq, object response) => throw null; + public System.Threading.Tasks.Task WriteDebugResponse(ServiceStack.Web.IResponse httpRes, object response) => throw null; + } + + // Generated from `ServiceStack.Host.Handlers.StaticContentHandler` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class StaticContentHandler : ServiceStack.Host.Handlers.HttpAsyncTaskHandler + { + public override System.Threading.Tasks.Task ProcessRequestAsync(ServiceStack.Web.IRequest httpReq, ServiceStack.Web.IResponse httpRes, string operationName) => throw null; + public StaticContentHandler(string textContents, string contentType) => throw null; + public StaticContentHandler(System.Byte[] bytes, string contentType) => throw null; + } + + // Generated from `ServiceStack.Host.Handlers.StaticFileHandler` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class StaticFileHandler : ServiceStack.Host.Handlers.HttpAsyncTaskHandler + { + public int BufferSize { get => throw null; set => throw null; } + public static int DefaultBufferSize; + public override bool IsReusable { get => throw null; } + public static bool MonoDirectoryExists(string dirPath, string appFilePath) => throw null; + public override System.Threading.Tasks.Task ProcessRequestAsync(ServiceStack.Web.IRequest request, ServiceStack.Web.IResponse response, string operationName) => throw null; + public static System.Action ResponseFilter { get => throw null; set => throw null; } + public static void SetDefaultFile(string defaultFilePath, System.Byte[] defaultFileContents, System.DateTime defaultFileModified) => throw null; + public StaticFileHandler(string virtualPath) => throw null; + public StaticFileHandler(ServiceStack.IO.IVirtualFile virtualFile) => throw null; + public StaticFileHandler(ServiceStack.IO.IVirtualDirectory virtualDir) => throw null; + public StaticFileHandler() => throw null; + public ServiceStack.IO.IVirtualNode VirtualNode { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.Host.Handlers.XmlOneWayHandler` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class XmlOneWayHandler : ServiceStack.Host.Handlers.GenericHandler + { + public XmlOneWayHandler() : base(default(string), default(ServiceStack.RequestAttributes), default(ServiceStack.Feature)) => throw null; + } + + // Generated from `ServiceStack.Host.Handlers.XmlReplyHandler` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class XmlReplyHandler : ServiceStack.Host.Handlers.GenericHandler + { + public XmlReplyHandler() : base(default(string), default(ServiceStack.RequestAttributes), default(ServiceStack.Feature)) => throw null; + } + + } + namespace NetCore + { + // Generated from `ServiceStack.Host.NetCore.NetCoreRequest` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class NetCoreRequest : System.IServiceProvider, ServiceStack.Web.IRequest, ServiceStack.Web.IHttpRequest, ServiceStack.Model.IHasStringId, ServiceStack.Model.IHasId, ServiceStack.IO.IHasVirtualFiles, ServiceStack.Host.IHasBufferedStream, ServiceStack.Configuration.IResolver, ServiceStack.Configuration.IHasResolver + { + public string AbsoluteUri { get => throw null; } + public string Accept { get => throw null; } + public string[] AcceptTypes { get => throw null; } + public string Authorization { get => throw null; } + public System.IO.MemoryStream BufferedStream { get => throw null; set => throw null; } + public System.Int64 ContentLength { get => throw null; } + public string ContentType { get => throw null; } + public System.Collections.Generic.IDictionary Cookies { get => throw null; } + public object Dto { get => throw null; set => throw null; } + public ServiceStack.Web.IHttpFile[] Files { get => throw null; } + public System.Collections.Specialized.NameValueCollection FormData { get => throw null; } + public ServiceStack.IO.IVirtualDirectory GetDirectory() => throw null; + public ServiceStack.IO.IVirtualFile GetFile() => throw null; + public string GetRawBody() => throw null; + public System.Threading.Tasks.Task GetRawBodyAsync() => throw null; + public object GetService(System.Type serviceType) => throw null; + public bool HasExplicitResponseContentType { get => throw null; set => throw null; } + public System.Collections.Specialized.NameValueCollection Headers { get => throw null; } + public Microsoft.AspNetCore.Http.HttpContext HttpContext { get => throw null; } + public string HttpMethod { get => throw null; } + public Microsoft.AspNetCore.Http.HttpRequest HttpRequest { get => throw null; } + public ServiceStack.Web.IHttpResponse HttpResponse { get => throw null; } + public string Id { get => throw null; } + public System.IO.Stream InputStream { get => throw null; } + public bool IsDirectory { get => throw null; } + public bool IsFile { get => throw null; } + public bool IsLocal { get => throw null; } + public bool IsSecureConnection { get => throw null; } + public System.Collections.Generic.Dictionary Items { get => throw null; } + public NetCoreRequest(Microsoft.AspNetCore.Http.HttpContext context, string operationName, ServiceStack.RequestAttributes attrs = default(ServiceStack.RequestAttributes), string pathInfo = default(string)) => throw null; + public string OperationName { get => throw null; set => throw null; } + public string OriginalPathInfo { get => throw null; } + public object OriginalRequest { get => throw null; } + public string PathInfo { get => throw null; } + public System.Collections.Specialized.NameValueCollection QueryString { get => throw null; } + public string RawUrl { get => throw null; } + public string RemoteIp { get => throw null; } + public ServiceStack.RequestAttributes RequestAttributes { get => throw null; set => throw null; } + public ServiceStack.Web.IRequestPreferences RequestPreferences { get => throw null; } + public ServiceStack.Configuration.IResolver Resolver { get => throw null; set => throw null; } + public ServiceStack.Web.IResponse Response { get => throw null; } + public string ResponseContentType { get => throw null; set => throw null; } + public T TryResolve() => throw null; + public System.Uri UrlReferrer { get => throw null; } + public bool UseBufferedStream { get => throw null; set => throw null; } + public string UserAgent { get => throw null; } + public string UserHostAddress { get => throw null; } + public string Verb { get => throw null; } + public string XForwardedFor { get => throw null; } + public int? XForwardedPort { get => throw null; } + public string XForwardedProtocol { get => throw null; } + public string XRealIp { get => throw null; } + public static ServiceStack.Logging.ILog log; + } + + // Generated from `ServiceStack.Host.NetCore.NetCoreResponse` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class NetCoreResponse : ServiceStack.Web.IResponse, ServiceStack.Web.IHttpResponse, ServiceStack.Web.IHasHeaders + { + public void AddHeader(string name, string value) => throw null; + public System.IO.MemoryStream BufferedStream { get => throw null; set => throw null; } + public void ClearCookies() => throw null; + public void Close() => throw null; + public System.Threading.Tasks.Task CloseAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public string ContentType { get => throw null; set => throw null; } + public ServiceStack.Web.ICookies Cookies { get => throw null; } + public object Dto { get => throw null; set => throw null; } + public void End() => throw null; + public void Flush() => throw null; + public System.Threading.Tasks.Task FlushAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public string GetHeader(string name) => throw null; + public bool HasStarted { get => throw null; } + public System.Collections.Generic.Dictionary Headers { get => throw null; } + public Microsoft.AspNetCore.Http.HttpContext HttpContext { get => throw null; } + public Microsoft.AspNetCore.Http.HttpResponse HttpResponse { get => throw null; } + public bool IsClosed { get => throw null; } + public System.Collections.Generic.Dictionary Items { get => throw null; set => throw null; } + public bool KeepAlive { get => throw null; set => throw null; } + public NetCoreResponse(ServiceStack.Host.NetCore.NetCoreRequest request, Microsoft.AspNetCore.Http.HttpResponse response) => throw null; + public object OriginalResponse { get => throw null; } + public System.IO.Stream OutputStream { get => throw null; } + public void Redirect(string url) => throw null; + public void RemoveHeader(string name) => throw null; + public ServiceStack.Web.IRequest Request { get => throw null; } + public void SetContentLength(System.Int64 contentLength) => throw null; + public void SetCookie(System.Net.Cookie cookie) => throw null; + public int StatusCode { get => throw null; set => throw null; } + public string StatusDescription { get => throw null; set => throw null; } + public bool UseBufferedStream { get => throw null; set => throw null; } + } + + } + } + namespace Html + { + // Generated from `ServiceStack.Html.BasicHtmlMinifier` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class BasicHtmlMinifier : ServiceStack.ICompressor + { + public BasicHtmlMinifier() => throw null; + public string Compress(string html) => throw null; + public static string MinifyHtml(string html) => throw null; + } + + // Generated from `ServiceStack.Html.CssMinifier` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class CssMinifier : ServiceStack.ICompressor + { + public string Compress(string source) => throw null; + public CssMinifier() => throw null; + public static string MinifyCss(string css) => throw null; + } + + // Generated from `ServiceStack.Html.HtmlCompressor` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class HtmlCompressor : ServiceStack.ICompressor + { + public static string ALL_TAGS; + public static string BLOCK_TAGS_MAX; + public static string BLOCK_TAGS_MIN; + public string Compress(string html) => throw null; + public bool CompressCss; + public bool CompressJavaScript; + public ServiceStack.ICompressor CssCompressor; + public bool Enabled; + public bool GenerateStatistics; + public HtmlCompressor() => throw null; + public ServiceStack.ICompressor JavaScriptCompressor; + public static System.Text.RegularExpressions.Regex PHP_TAG_PATTERN; + public bool PreserveLineBreaks; + public System.Collections.Generic.List PreservePatterns; + public bool RemoveComments; + public bool RemoveFormAttributes; + public bool RemoveHttpProtocol; + public bool RemoveHttpsProtocol; + public bool RemoveInputAttributes; + public bool RemoveIntertagSpaces; + public bool RemoveJavaScriptProtocol; + public bool RemoveLinkAttributes; + public bool RemoveMultiSpaces; + public bool RemoveQuotes; + public bool RemoveScriptAttributes; + public bool RemoveStyleAttributes; + public string RemoveSurroundingSpaces; + public static System.Text.RegularExpressions.Regex SERVER_SCRIPT_TAG_PATTERN; + public static System.Text.RegularExpressions.Regex SERVER_SIDE_INCLUDE_PATTERN; + public bool SimpleBooleanAttributes; + public bool SimpleDoctype; + public ServiceStack.Html.HtmlCompressorStatistics Statistics; + } + + // Generated from `ServiceStack.Html.HtmlCompressorExtensions` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class HtmlCompressorExtensions + { + public static void AddPreservePattern(this ServiceStack.Html.HtmlCompressor compressor, params System.Text.RegularExpressions.Regex[] regexes) => throw null; + } + + // Generated from `ServiceStack.Html.HtmlCompressorStatistics` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class HtmlCompressorStatistics + { + public ServiceStack.Html.HtmlMetrics CompressedMetrics; + public HtmlCompressorStatistics() => throw null; + public ServiceStack.Html.HtmlMetrics OriginalMetrics; + public int PreservedSize; + public System.Int64 Time; + public override string ToString() => throw null; + } + + // Generated from `ServiceStack.Html.HtmlContextExtensions` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class HtmlContextExtensions + { + public static ServiceStack.Web.IRequest GetHttpRequest(this ServiceStack.Html.IHtmlContext html) => throw null; + } + + // Generated from `ServiceStack.Html.HtmlMetrics` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class HtmlMetrics + { + public int EmptyChars; + public int Filesize; + public HtmlMetrics() => throw null; + public int InlineEventSize; + public int InlineScriptSize; + public int InlineStyleSize; + public override string ToString() => throw null; + } + + // Generated from `ServiceStack.Html.HtmlStringExtensions` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class HtmlStringExtensions + { + public static ServiceStack.Host.IHtmlString AsRaw(this ServiceStack.IHtmlString htmlString) => throw null; + } + + // Generated from `ServiceStack.Html.IHtmlContext` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IHtmlContext + { + ServiceStack.Web.IHttpRequest HttpRequest { get; } + } + + // Generated from `ServiceStack.Html.IViewEngine` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IViewEngine + { + bool HasView(string viewName, ServiceStack.Web.IRequest httpReq = default(ServiceStack.Web.IRequest)); + System.Threading.Tasks.Task ProcessRequestAsync(ServiceStack.Web.IRequest req, object dto, System.IO.Stream outputStream); + string RenderPartial(string pageName, object model, bool renderHtml, System.IO.StreamWriter writer = default(System.IO.StreamWriter), ServiceStack.Html.IHtmlContext htmlHelper = default(ServiceStack.Html.IHtmlContext)); + } + + // Generated from `ServiceStack.Html.JSMinifier` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class JSMinifier : ServiceStack.ICompressor + { + public string Compress(string js) => throw null; + public JSMinifier() => throw null; + public static string MinifyJs(string js, bool ignoreErrors = default(bool)) => throw null; + } + + // Generated from `ServiceStack.Html.Minifiers` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class Minifiers + { + public static ServiceStack.ICompressor Css; + public static ServiceStack.ICompressor Html; + public static ServiceStack.ICompressor HtmlAdvanced; + public static ServiceStack.ICompressor JavaScript; + } + + } + namespace Internal + { + // Generated from `ServiceStack.Internal.IServiceStackAsyncDisposable` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + internal interface IServiceStackAsyncDisposable + { + } + + } + namespace Messaging + { + // Generated from `ServiceStack.Messaging.BackgroundMqClient` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class BackgroundMqClient : System.IDisposable, ServiceStack.Messaging.IMessageQueueClient, ServiceStack.Messaging.IMessageProducer, ServiceStack.IOneWayClient + { + public void Ack(ServiceStack.Messaging.IMessage message) => throw null; + public BackgroundMqClient(ServiceStack.Messaging.BackgroundMqService mqService) => throw null; + public ServiceStack.Messaging.IMessage CreateMessage(object mqResponse) => throw null; + public void Dispose() => throw null; + public ServiceStack.Messaging.IMessage Get(string queueName, System.TimeSpan? timeout = default(System.TimeSpan?)) => throw null; + public ServiceStack.Messaging.IMessage GetAsync(string queueName) => throw null; + public string GetTempQueueName() => throw null; + public void Nak(ServiceStack.Messaging.IMessage message, bool requeue, System.Exception exception = default(System.Exception)) => throw null; + public void Notify(string queueName, ServiceStack.Messaging.IMessage message) => throw null; + public void Publish(T messageBody) => throw null; + public void Publish(ServiceStack.Messaging.IMessage message) => throw null; + public void Publish(string queueName, ServiceStack.Messaging.IMessage message) => throw null; + public void SendAllOneWay(System.Collections.Generic.IEnumerable requests) => throw null; + public void SendOneWay(string queueName, object requestDto) => throw null; + public void SendOneWay(object requestDto) => throw null; + } + + // Generated from `ServiceStack.Messaging.BackgroundMqCollection<>` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class BackgroundMqCollection : System.IDisposable, ServiceStack.Messaging.IMqCollection + { + public void Add(string queueName, ServiceStack.Messaging.IMessage message) => throw null; + public BackgroundMqCollection(ServiceStack.Messaging.BackgroundMqClient mqClient, ServiceStack.Messaging.IMessageHandlerFactory handlerFactory, int threadCount, int outQMaxSize) => throw null; + public void Clear(string queueName) => throw null; + public ServiceStack.Messaging.IMqWorker CreateWorker(string mqName) => throw null; + public void Dispose() => throw null; + public string GetDescription() => throw null; + public System.Collections.Generic.Dictionary GetDescriptionMap() => throw null; + public ServiceStack.Messaging.IMessageHandlerFactory HandlerFactory { get => throw null; } + public ServiceStack.Messaging.BackgroundMqClient MqClient { get => throw null; } + public int OutQMaxSize { get => throw null; set => throw null; } + public System.Type QueueType { get => throw null; } + public int ThreadCount { get => throw null; } + public bool TryTake(string queueName, out ServiceStack.Messaging.IMessage message, System.TimeSpan timeout) => throw null; + public bool TryTake(string queueName, out ServiceStack.Messaging.IMessage message) => throw null; + } + + // Generated from `ServiceStack.Messaging.BackgroundMqMessageFactory` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class BackgroundMqMessageFactory : System.IDisposable, ServiceStack.Messaging.IMessageQueueClientFactory, ServiceStack.Messaging.IMessageFactory + { + public BackgroundMqMessageFactory(ServiceStack.Messaging.BackgroundMqClient mqClient) => throw null; + public ServiceStack.Messaging.IMessageProducer CreateMessageProducer() => throw null; + public ServiceStack.Messaging.IMessageQueueClient CreateMessageQueueClient() => throw null; + public void Dispose() => throw null; + } + + // Generated from `ServiceStack.Messaging.BackgroundMqService` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class BackgroundMqService : System.IDisposable, ServiceStack.Messaging.IMessageService + { + public BackgroundMqService() => throw null; + protected ServiceStack.Messaging.IMessageHandlerFactory CreateMessageHandlerFactory(System.Func, object> processMessageFn, System.Action, System.Exception> processExceptionEx) => throw null; + public bool DisablePriorityQueues { set => throw null; } + public bool DisablePublishingResponses { set => throw null; } + public bool DisablePublishingToOutq { set => throw null; } + public void Dispose() => throw null; + public bool EnablePriorityQueues { set => throw null; } + public ServiceStack.Messaging.IMessage Get(string queueName, System.TimeSpan? timeout = default(System.TimeSpan?)) => throw null; + public ServiceStack.Messaging.IMqWorker[] GetAllWorkers() => throw null; + public ServiceStack.Messaging.IMqCollection GetCollection(System.Type type) => throw null; + public ServiceStack.Messaging.IMessageHandlerStats GetStats() => throw null; + public string GetStatsDescription() => throw null; + public string GetStatus() => throw null; + public ServiceStack.Messaging.IMqWorker[] GetWorkers(string queueName) => throw null; + public ServiceStack.Messaging.IMessageFactory MessageFactory { get => throw null; } + public void Notify(string queueName, ServiceStack.Messaging.IMessage message) => throw null; + public System.Collections.Generic.List> OutHandlers { get => throw null; } + public int OutQMaxSize { get => throw null; set => throw null; } + public string[] PriorityQueuesWhitelist { get => throw null; set => throw null; } + public void Publish(string queueName, ServiceStack.Messaging.IMessage message) => throw null; + public string[] PublishResponsesWhitelist { get => throw null; set => throw null; } + public string[] PublishToOutqWhitelist { get => throw null; set => throw null; } + public void RegisterHandler(System.Func, object> processMessageFn, int noOfThreads) => throw null; + public void RegisterHandler(System.Func, object> processMessageFn, System.Action, System.Exception> processExceptionEx, int noOfThreads) => throw null; + public void RegisterHandler(System.Func, object> processMessageFn, System.Action, System.Exception> processExceptionEx) => throw null; + public void RegisterHandler(System.Func, object> processMessageFn) => throw null; + public System.Collections.Generic.List RegisteredTypes { get => throw null; } + public System.Func RequestFilter { get => throw null; set => throw null; } + public System.Func ResponseFilter { get => throw null; set => throw null; } + public int RetryCount { get => throw null; set => throw null; } + public void Start() => throw null; + public void Stop() => throw null; + public ServiceStack.Messaging.IMessage TryGet(string queueName) => throw null; + } + + // Generated from `ServiceStack.Messaging.BackgroundMqWorker` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class BackgroundMqWorker : System.IDisposable, ServiceStack.Messaging.IMqWorker + { + public BackgroundMqWorker(string queueName, System.Collections.Concurrent.BlockingCollection queue, ServiceStack.Messaging.BackgroundMqClient mqClient, ServiceStack.Messaging.IMessageHandler handler) => throw null; + public void Dispose() => throw null; + public ServiceStack.Messaging.IMessageHandlerStats GetStats() => throw null; + public string QueueName { get => throw null; } + public void Stop() => throw null; + } + + // Generated from `ServiceStack.Messaging.IMessageHandlerDisposer` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IMessageHandlerDisposer + { + void DisposeMessageHandler(ServiceStack.Messaging.IMessageHandler messageHandler); + } + + // Generated from `ServiceStack.Messaging.IMessageHandlerFactory` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IMessageHandlerFactory + { + ServiceStack.Messaging.IMessageHandler CreateMessageHandler(); + } + + // Generated from `ServiceStack.Messaging.IMqCollection` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IMqCollection : System.IDisposable + { + void Add(string queueName, ServiceStack.Messaging.IMessage message); + void Clear(string queueName); + ServiceStack.Messaging.IMqWorker CreateWorker(string mqName); + string GetDescription(); + System.Collections.Generic.Dictionary GetDescriptionMap(); + System.Type QueueType { get; } + int ThreadCount { get; } + bool TryTake(string queueName, out ServiceStack.Messaging.IMessage message, System.TimeSpan timeout); + bool TryTake(string queueName, out ServiceStack.Messaging.IMessage message); + } + + // Generated from `ServiceStack.Messaging.IMqWorker` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IMqWorker : System.IDisposable + { + ServiceStack.Messaging.IMessageHandlerStats GetStats(); + string QueueName { get; } + void Stop(); + } + + // Generated from `ServiceStack.Messaging.InMemoryTransientMessageFactory` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class InMemoryTransientMessageFactory : System.IDisposable, ServiceStack.Messaging.IMessageQueueClientFactory, ServiceStack.Messaging.IMessageFactory + { + public ServiceStack.Messaging.IMessageProducer CreateMessageProducer() => throw null; + public ServiceStack.Messaging.IMessageQueueClient CreateMessageQueueClient() => throw null; + public ServiceStack.Messaging.IMessageService CreateMessageService() => throw null; + public void Dispose() => throw null; + public InMemoryTransientMessageFactory(ServiceStack.Messaging.InMemoryTransientMessageService transientMessageService) => throw null; + public InMemoryTransientMessageFactory() => throw null; + } + + // Generated from `ServiceStack.Messaging.InMemoryTransientMessageService` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class InMemoryTransientMessageService : ServiceStack.Messaging.TransientMessageServiceBase + { + public InMemoryTransientMessageService(ServiceStack.Messaging.InMemoryTransientMessageFactory factory) => throw null; + public InMemoryTransientMessageService() => throw null; + public override ServiceStack.Messaging.IMessageFactory MessageFactory { get => throw null; } + public ServiceStack.Messaging.MessageQueueClientFactory MessageQueueFactory { get => throw null; } + } + + // Generated from `ServiceStack.Messaging.MessageHandler<>` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class MessageHandler : System.IDisposable, ServiceStack.Messaging.IMessageHandler + { + public const int DefaultRetryCount = default; + public void Dispose() => throw null; + public ServiceStack.Messaging.IMessageHandlerStats GetStats() => throw null; + public System.DateTime? LastMessageProcessed { get => throw null; set => throw null; } + public MessageHandler(ServiceStack.Messaging.IMessageService messageService, System.Func, object> processMessageFn, System.Action, System.Exception> processInExceptionFn, int retryCount) => throw null; + public MessageHandler(ServiceStack.Messaging.IMessageService messageService, System.Func, object> processMessageFn) => throw null; + public System.Type MessageType { get => throw null; } + public ServiceStack.Messaging.IMessageQueueClient MqClient { get => throw null; set => throw null; } + public void Process(ServiceStack.Messaging.IMessageQueueClient mqClient) => throw null; + public void ProcessMessage(ServiceStack.Messaging.IMessageQueueClient mqClient, object mqResponse) => throw null; + public void ProcessMessage(ServiceStack.Messaging.IMessageQueueClient mqClient, ServiceStack.Messaging.IMessage message) => throw null; + public int ProcessQueue(ServiceStack.Messaging.IMessageQueueClient mqClient, string queueName, System.Func doNext = default(System.Func)) => throw null; + public string[] ProcessQueueNames { get => throw null; set => throw null; } + public string[] PublishResponsesWhitelist { get => throw null; set => throw null; } + public string[] PublishToOutqWhitelist { get => throw null; set => throw null; } + public System.Func ReplyClientFactory { get => throw null; set => throw null; } + public int TotalMessagesFailed { get => throw null; set => throw null; } + public int TotalMessagesProcessed { get => throw null; set => throw null; } + public int TotalNormalMessagesReceived { get => throw null; set => throw null; } + public int TotalOutMessagesReceived { get => throw null; set => throw null; } + public int TotalPriorityMessagesReceived { get => throw null; set => throw null; } + public int TotalRetries { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.Messaging.MessageHandlerFactory<>` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class MessageHandlerFactory : ServiceStack.Messaging.IMessageHandlerFactory + { + public ServiceStack.Messaging.IMessageHandler CreateMessageHandler() => throw null; + public const int DefaultRetryCount = default; + public MessageHandlerFactory(ServiceStack.Messaging.IMessageService messageService, System.Func, object> processMessageFn, System.Action, System.Exception> processExceptionEx) => throw null; + public MessageHandlerFactory(ServiceStack.Messaging.IMessageService messageService, System.Func, object> processMessageFn) => throw null; + public string[] PublishResponsesWhitelist { get => throw null; set => throw null; } + public string[] PublishToOutqWhitelist { get => throw null; set => throw null; } + public System.Func RequestFilter { get => throw null; set => throw null; } + public System.Func ResponseFilter { get => throw null; set => throw null; } + public int RetryCount { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.Messaging.TransientMessageServiceBase` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public abstract class TransientMessageServiceBase : System.IDisposable, ServiceStack.Messaging.IMessageService, ServiceStack.Messaging.IMessageHandlerDisposer + { + protected ServiceStack.Messaging.IMessageHandlerFactory CreateMessageHandlerFactory(System.Func, object> processMessageFn, System.Action, System.Exception> processExceptionEx) => throw null; + public const int DefaultRetryCount = default; + public virtual void Dispose() => throw null; + public virtual void DisposeMessageHandler(ServiceStack.Messaging.IMessageHandler messageHandler) => throw null; + public ServiceStack.Messaging.IMessageHandlerStats GetStats() => throw null; + public string GetStatsDescription() => throw null; + public string GetStatus() => throw null; + public abstract ServiceStack.Messaging.IMessageFactory MessageFactory { get; } + public int PoolSize { get => throw null; set => throw null; } + public void RegisterHandler(System.Func, object> processMessageFn, int noOfThreads) => throw null; + public void RegisterHandler(System.Func, object> processMessageFn, System.Action, System.Exception> processExceptionEx, int noOfThreads) => throw null; + public void RegisterHandler(System.Func, object> processMessageFn, System.Action, System.Exception> processExceptionEx) => throw null; + public void RegisterHandler(System.Func, object> processMessageFn) => throw null; + public System.Collections.Generic.List RegisteredTypes { get => throw null; } + public System.TimeSpan? RequestTimeOut { get => throw null; set => throw null; } + public int RetryCount { get => throw null; set => throw null; } + public virtual void Start() => throw null; + public virtual void Stop() => throw null; + protected TransientMessageServiceBase(int retryAttempts, System.TimeSpan? requestTimeOut) => throw null; + protected TransientMessageServiceBase() => throw null; + } + + // Generated from `ServiceStack.Messaging.WorkerOperation` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class WorkerOperation + { + public const string ControlCommand = default; + public const int NoOp = default; + public const int Reset = default; + public const int Restart = default; + public const int Stop = default; + } + + } + namespace Metadata + { + // Generated from `ServiceStack.Metadata.BaseMetadataHandler` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public abstract class BaseMetadataHandler : ServiceStack.Host.Handlers.HttpAsyncTaskHandler + { + protected bool AssertAccess(ServiceStack.Web.IRequest httpReq, ServiceStack.Web.IResponse httpRes, string operationName) => throw null; + protected BaseMetadataHandler() => throw null; + public string ContentFormat { get => throw null; set => throw null; } + public string ContentType { get => throw null; set => throw null; } + protected abstract string CreateMessage(System.Type dtoType); + public virtual string CreateResponse(System.Type type) => throw null; + public abstract ServiceStack.Format Format { get; } + protected virtual System.Threading.Tasks.Task ProcessOperationsAsync(System.IO.Stream writer, ServiceStack.Web.IRequest httpReq, ServiceStack.Web.IResponse httpRes) => throw null; + public override System.Threading.Tasks.Task ProcessRequestAsync(ServiceStack.Web.IRequest httpReq, ServiceStack.Web.IResponse httpRes, string operationName) => throw null; + protected virtual System.Threading.Tasks.Task RenderOperationAsync(System.IO.Stream output, ServiceStack.Web.IRequest httpReq, string operationName, string requestMessage, string responseMessage, string metadataHtml, ServiceStack.Host.Operation operation) => throw null; + protected virtual System.Threading.Tasks.Task RenderOperationsAsync(System.IO.Stream output, ServiceStack.Web.IRequest httpReq, ServiceStack.Host.ServiceMetadata metadata) => throw null; + } + + // Generated from `ServiceStack.Metadata.BaseSoapMetadataHandler` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public abstract class BaseSoapMetadataHandler : ServiceStack.Metadata.BaseMetadataHandler + { + protected BaseSoapMetadataHandler() => throw null; + public string OperationName { get => throw null; set => throw null; } + public override System.Threading.Tasks.Task ProcessRequestAsync(ServiceStack.Web.IRequest httpReq, ServiceStack.Web.IResponse httpRes, string operationName) => throw null; + } + + // Generated from `ServiceStack.Metadata.CustomMetadataHandler` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class CustomMetadataHandler : ServiceStack.Metadata.BaseMetadataHandler + { + protected override string CreateMessage(System.Type dtoType) => throw null; + public CustomMetadataHandler(string contentType, string format) => throw null; + public override ServiceStack.Format Format { get => throw null; } + } + + // Generated from `ServiceStack.Metadata.IndexMetadataHandler` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class IndexMetadataHandler : ServiceStack.Metadata.BaseSoapMetadataHandler + { + protected override string CreateMessage(System.Type dtoType) => throw null; + public override ServiceStack.Format Format { get => throw null; } + public IndexMetadataHandler() => throw null; + } + + // Generated from `ServiceStack.Metadata.IndexOperationsControl` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class IndexOperationsControl + { + public IndexOperationsControl() => throw null; + public ServiceStack.Metadata.MetadataPagesConfig MetadataConfig { get => throw null; set => throw null; } + public System.Collections.Generic.List OperationNames { get => throw null; set => throw null; } + public System.Threading.Tasks.Task RenderAsync(System.IO.Stream output) => throw null; + public string RenderRow(string operationName) => throw null; + public ServiceStack.Web.IRequest Request { get => throw null; set => throw null; } + public string Title { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary ToAbsoluteUrls(System.Collections.Generic.Dictionary linksMap) => throw null; + public int XsdServiceTypesIndex { get => throw null; set => throw null; } + public System.Collections.Generic.IDictionary Xsds { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.Metadata.JsonMetadataHandler` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class JsonMetadataHandler : ServiceStack.Metadata.BaseMetadataHandler + { + protected override string CreateMessage(System.Type dtoType) => throw null; + public override ServiceStack.Format Format { get => throw null; } + public JsonMetadataHandler() => throw null; + } + + // Generated from `ServiceStack.Metadata.JsvMetadataHandler` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class JsvMetadataHandler : ServiceStack.Metadata.BaseMetadataHandler + { + protected override string CreateMessage(System.Type dtoType) => throw null; + public override ServiceStack.Format Format { get => throw null; } + public JsvMetadataHandler() => throw null; + } + + // Generated from `ServiceStack.Metadata.MetadataConfig` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class MetadataConfig + { + public string AsyncOneWayUri { get => throw null; set => throw null; } + public ServiceStack.Metadata.MetadataConfig Create(string format, string name = default(string)) => throw null; + public string DefaultMetadataUri { get => throw null; set => throw null; } + public string Format { get => throw null; set => throw null; } + public MetadataConfig(string format, string name, string syncReplyUri, string asyncOneWayUri, string defaultMetadataUri) => throw null; + public string Name { get => throw null; set => throw null; } + public string SyncReplyUri { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.Metadata.MetadataPagesConfig` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class MetadataPagesConfig + { + public bool AlwaysHideInMetadata(string operationName) => throw null; + public System.Collections.Generic.List AvailableFormatConfigs { get => throw null; set => throw null; } + public bool CanAccess(ServiceStack.Web.IRequest httpRequest, ServiceStack.Format format, string operation) => throw null; + public bool CanAccess(ServiceStack.Format format, string operation) => throw null; + public ServiceStack.Metadata.MetadataConfig GetMetadataConfig(string format) => throw null; + public bool IsVisible(ServiceStack.Web.IRequest httpRequest, ServiceStack.Format format, string operation) => throw null; + public MetadataPagesConfig(ServiceStack.Host.ServiceMetadata metadata, ServiceStack.Metadata.ServiceEndpointsMetadataConfig metadataConfig, System.Collections.Generic.HashSet ignoredFormats, System.Collections.Generic.List contentTypeFormats) => throw null; + } + + // Generated from `ServiceStack.Metadata.OperationControl` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class OperationControl + { + public string ContentFormat { get => throw null; set => throw null; } + public string ContentType { get => throw null; set => throw null; } + public ServiceStack.Format Format { set => throw null; } + public virtual string GetHttpRequestTemplate() => throw null; + public string HostName { get => throw null; set => throw null; } + public ServiceStack.Web.IRequest HttpRequest { get => throw null; set => throw null; } + public virtual string HttpRequestTemplateWithBody(string httpMethod) => throw null; + public virtual string HttpRequestTemplateWithoutBody(string httpMethod) => throw null; + public virtual string HttpResponseTemplate { get => throw null; } + public ServiceStack.Metadata.ServiceEndpointsMetadataConfig MetadataConfig { get => throw null; set => throw null; } + public string MetadataHtml { get => throw null; set => throw null; } + public ServiceStack.Host.Operation Operation { get => throw null; set => throw null; } + public OperationControl() => throw null; + public string OperationName { get => throw null; set => throw null; } + public virtual System.Threading.Tasks.Task RenderAsync(System.IO.Stream output) => throw null; + public string RequestMessage { get => throw null; set => throw null; } + public virtual string RequestUri { get => throw null; } + public string ResponseMessage { get => throw null; set => throw null; } + public virtual string ResponseTemplate { get => throw null; } + public string Title { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.Metadata.ServiceEndpointsMetadataConfig` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ServiceEndpointsMetadataConfig + { + public static ServiceStack.Metadata.ServiceEndpointsMetadataConfig Create(string serviceStackHandlerPrefix) => throw null; + public ServiceStack.Metadata.MetadataConfig Custom { get => throw null; set => throw null; } + public string DefaultMetadataUri { get => throw null; set => throw null; } + public ServiceStack.Metadata.MetadataConfig GetEndpointConfig(string format) => throw null; + public ServiceStack.Metadata.SoapMetadataConfig Soap11 { get => throw null; set => throw null; } + public ServiceStack.Metadata.SoapMetadataConfig Soap12 { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.Metadata.Soap11WsdlTemplate` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class Soap11WsdlTemplate : ServiceStack.Metadata.WsdlTemplateBase + { + protected override string OneWayActionsTemplate { get => throw null; } + protected override string OneWayBindingContainerTemplate { get => throw null; } + protected override string OneWayEndpointUriTemplate { get => throw null; } + protected override string ReplyActionsTemplate { get => throw null; } + protected override string ReplyBindingContainerTemplate { get => throw null; } + protected override string ReplyEndpointUriTemplate { get => throw null; } + public Soap11WsdlTemplate() => throw null; + public override string WsdlName { get => throw null; } + } + + // Generated from `ServiceStack.Metadata.Soap12WsdlTemplate` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class Soap12WsdlTemplate : ServiceStack.Metadata.WsdlTemplateBase + { + protected override string OneWayActionsTemplate { get => throw null; } + protected override string OneWayBindingContainerTemplate { get => throw null; } + protected override string OneWayEndpointUriTemplate { get => throw null; } + protected override string ReplyActionsTemplate { get => throw null; } + protected override string ReplyBindingContainerTemplate { get => throw null; } + protected override string ReplyEndpointUriTemplate { get => throw null; } + public Soap12WsdlTemplate() => throw null; + public override string WsdlName { get => throw null; } + } + + // Generated from `ServiceStack.Metadata.SoapMetadataConfig` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class SoapMetadataConfig : ServiceStack.Metadata.MetadataConfig + { + public SoapMetadataConfig(string format, string name, string syncReplyUri, string asyncOneWayUri, string defaultMetadataUri, string wsdlMetadataUri) : base(default(string), default(string), default(string), default(string), default(string)) => throw null; + public string WsdlMetadataUri { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.Metadata.WsdlTemplateBase` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public abstract class WsdlTemplateBase + { + protected virtual string OneWayActionsTemplate { get => throw null; } + protected abstract string OneWayBindingContainerTemplate { get; } + public string OneWayEndpointUri { get => throw null; set => throw null; } + protected abstract string OneWayEndpointUriTemplate { get; } + protected virtual string OneWayMessagesTemplate { get => throw null; } + public System.Collections.Generic.IList OneWayOperationNames { get => throw null; set => throw null; } + protected virtual string OneWayOperationsTemplate { get => throw null; } + public string RepeaterTemplate(string template, object arg0, System.Collections.Generic.IEnumerable dataSource) => throw null; + public string RepeaterTemplate(string template, System.Collections.Generic.IEnumerable dataSource) => throw null; + protected virtual string ReplyActionsTemplate { get => throw null; } + protected abstract string ReplyBindingContainerTemplate { get; } + public string ReplyEndpointUri { get => throw null; set => throw null; } + protected abstract string ReplyEndpointUriTemplate { get; } + protected virtual string ReplyMessagesTemplate { get => throw null; } + public System.Collections.Generic.IList ReplyOperationNames { get => throw null; set => throw null; } + protected virtual string ReplyOperationsTemplate { get => throw null; } + public string ServiceName { get => throw null; set => throw null; } + public override string ToString() => throw null; + public abstract string WsdlName { get; } + protected WsdlTemplateBase() => throw null; + public string Xsd { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.Metadata.XmlMetadataHandler` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class XmlMetadataHandler : ServiceStack.Metadata.BaseMetadataHandler + { + protected override string CreateMessage(System.Type dtoType) => throw null; + public override ServiceStack.Format Format { get => throw null; } + public XmlMetadataHandler() => throw null; + } + + } + namespace MiniProfiler + { + // Generated from `ServiceStack.MiniProfiler.HtmlString` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class HtmlString : ServiceStack.IHtmlString, ServiceStack.Host.IHtmlString + { + public static ServiceStack.MiniProfiler.HtmlString Empty; + public HtmlString(string value) => throw null; + public string ToHtmlString() => throw null; + public override string ToString() => throw null; + } + + // Generated from `ServiceStack.MiniProfiler.IProfiler` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface IProfiler + { + ServiceStack.IHtmlString RenderIncludes(ServiceStack.MiniProfiler.RenderPosition? position = default(ServiceStack.MiniProfiler.RenderPosition?), bool? showTrivial = default(bool?), bool? showTimeWithChildren = default(bool?), int? maxTracesToShow = default(int?), bool xhtml = default(bool), bool? showControls = default(bool?)); + ServiceStack.MiniProfiler.IProfiler Start(); + System.IDisposable Step(string name); + void Stop(); + } + + // Generated from `ServiceStack.MiniProfiler.NullProfiler` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class NullProfiler : ServiceStack.MiniProfiler.IProfiler + { + public static ServiceStack.MiniProfiler.NullProfiler Instance; + public NullProfiler() => throw null; + public ServiceStack.IHtmlString RenderIncludes(ServiceStack.MiniProfiler.RenderPosition? position = default(ServiceStack.MiniProfiler.RenderPosition?), bool? showTrivial = default(bool?), bool? showTimeWithChildren = default(bool?), int? maxTracesToShow = default(int?), bool xhtml = default(bool), bool? showControls = default(bool?)) => throw null; + public ServiceStack.MiniProfiler.IProfiler Start() => throw null; + public System.IDisposable Step(string name) => throw null; + public void Stop() => throw null; + } + + // Generated from `ServiceStack.MiniProfiler.Profiler` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class Profiler + { + public static ServiceStack.MiniProfiler.IProfiler Current { get => throw null; set => throw null; } + public static ServiceStack.IHtmlString RenderIncludes(ServiceStack.MiniProfiler.RenderPosition? position = default(ServiceStack.MiniProfiler.RenderPosition?), bool? showTrivial = default(bool?), bool? showTimeWithChildren = default(bool?), int? maxTracesToShow = default(int?), bool xhtml = default(bool), bool? showControls = default(bool?)) => throw null; + public static ServiceStack.MiniProfiler.IProfiler Start() => throw null; + public static System.IDisposable Step(string name) => throw null; + public static void Stop() => throw null; + } + + // Generated from `ServiceStack.MiniProfiler.RenderPosition` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public enum RenderPosition + { + Left, + Right, + } + + } + namespace NativeTypes + { + // Generated from `ServiceStack.NativeTypes.AddCodeDelegate` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public delegate string AddCodeDelegate(System.Collections.Generic.List allTypes, ServiceStack.MetadataTypesConfig config); + + // Generated from `ServiceStack.NativeTypes.CreateTypeOptions` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class CreateTypeOptions + { + public CreateTypeOptions() => throw null; + public System.Func ImplementsFn { get => throw null; set => throw null; } + public bool IsNestedType { get => throw null; set => throw null; } + public bool IsRequest { get => throw null; set => throw null; } + public bool IsResponse { get => throw null; set => throw null; } + public bool IsType { get => throw null; set => throw null; } + public ServiceStack.MetadataOperationType Op { get => throw null; set => throw null; } + public System.Collections.Generic.List Routes { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.NativeTypes.INativeTypesMetadata` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public interface INativeTypesMetadata + { + ServiceStack.MetadataTypesConfig GetConfig(ServiceStack.NativeTypes.NativeTypesBase req); + ServiceStack.NativeTypes.MetadataTypesGenerator GetGenerator(); + ServiceStack.MetadataTypes GetMetadataTypes(ServiceStack.Web.IRequest req, ServiceStack.MetadataTypesConfig config = default(ServiceStack.MetadataTypesConfig), System.Func predicate = default(System.Func)); + } + + // Generated from `ServiceStack.NativeTypes.MetadataExtensions` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class MetadataExtensions + { + public static System.Collections.Generic.List CreateSortedTypeList(this System.Collections.Generic.List allTypes) => throw null; + public static void Emit(this ServiceStack.NativeTypes.StringBuilderWrapper sb, ServiceStack.MetadataType type, ServiceStack.Lang lang) => throw null; + public static void Emit(this ServiceStack.NativeTypes.StringBuilderWrapper sb, ServiceStack.MetadataPropertyType propType, ServiceStack.Lang lang) => throw null; + public static System.Collections.Generic.List GetAllMetadataTypes(this ServiceStack.MetadataTypes metadata) => throw null; + public static System.Collections.Generic.List GetAllTypes(this ServiceStack.MetadataTypes metadata) => throw null; + public static System.Collections.Generic.List GetAllTypesOrdered(this ServiceStack.MetadataTypes metadata) => throw null; + public static string GetAttributeName(this System.Attribute attr) => throw null; + public static System.Collections.Generic.HashSet GetDefaultNamespaces(this ServiceStack.MetadataTypesConfig config, ServiceStack.MetadataTypes metadata) => throw null; + public static System.Collections.Generic.IEnumerable GetDepTypes(System.Collections.Generic.Dictionary> deps, System.Collections.Generic.Dictionary typesMap, System.Collections.Generic.HashSet considered, ServiceStack.MetadataType type) => throw null; + public static System.Type[] GetDirectInterfaces(this System.Type type) => throw null; + public static string GetEnumMemberValue(this ServiceStack.MetadataType type, int i) => throw null; + public static System.Collections.Generic.List GetIncludeList(ServiceStack.MetadataTypes metadata, ServiceStack.MetadataTypesConfig config) => throw null; + public static System.Collections.Generic.HashSet GetReferencedTypeNames(this ServiceStack.MetadataType type, ServiceStack.MetadataTypes metadataTypes) => throw null; + public static string GetTypeName(this ServiceStack.MetadataPropertyType prop, ServiceStack.MetadataTypesConfig config, System.Collections.Generic.List allTypes) => throw null; + public static System.Collections.Generic.List GetValues(this System.Collections.Generic.Dictionary> map, string key) => throw null; + public static bool IgnoreSystemType(this ServiceStack.MetadataType type) => throw null; + public static bool IgnoreType(this ServiceStack.MetadataType type, ServiceStack.MetadataTypesConfig config, System.Collections.Generic.List overrideIncludeType = default(System.Collections.Generic.List)) => throw null; + public static bool IsServiceStackType(this System.Type type) => throw null; + public static System.Collections.Generic.List OrderTypesByDeps(this System.Collections.Generic.List types) => throw null; + public static System.Collections.Generic.List PopulatePrimaryKey(this System.Collections.Generic.List props) => throw null; + public static void Push(this System.Collections.Generic.Dictionary> map, string key, string value) => throw null; + public static string QuotedSafeValue(this string value) => throw null; + public static System.Collections.Generic.List RemoveIgnoredTypes(this ServiceStack.MetadataTypes metadata, ServiceStack.MetadataTypesConfig config) => throw null; + public static void RemoveIgnoredTypesForNet(this ServiceStack.MetadataTypes metadata, ServiceStack.MetadataTypesConfig config) => throw null; + public static string SafeComment(this string comment) => throw null; + public static string SafeToken(this string token) => throw null; + public static string SafeValue(this string value) => throw null; + public static string SanitizeType(this string typeName) => throw null; + public static string StripGenericType(string type, string subType) => throw null; + public static ServiceStack.MetadataAttribute ToMetadataAttribute(this ServiceStack.MetadataRoute route) => throw null; + public static ServiceStack.MetadataType ToMetadataType(this ServiceStack.MetadataTypeName type) => throw null; + public static ServiceStack.MetadataTypeName ToMetadataTypeName(this ServiceStack.MetadataType type) => throw null; + public static string ToPrettyName(this System.Type type) => throw null; + } + + // Generated from `ServiceStack.NativeTypes.MetadataTypesGenerator` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class MetadataTypesGenerator + { + public static System.Collections.Generic.Dictionary> AttributeConverters { get => throw null; } + public static System.Reflection.FieldInfo GetEnumMember(System.Type type, string name) => throw null; + public static System.Reflection.PropertyInfo[] GetInstancePublicProperties(System.Type type) => throw null; + public ServiceStack.MetadataTypes GetMetadataTypes(ServiceStack.Web.IRequest req, System.Func predicate = default(System.Func)) => throw null; + public System.Collections.Generic.HashSet GetNamespacesUsed(System.Type type) => throw null; + public bool IncludeAttrsFilter(System.Attribute x) => throw null; + public MetadataTypesGenerator(ServiceStack.Host.ServiceMetadata meta, ServiceStack.MetadataTypesConfig config) => throw null; + public System.Collections.Generic.List NonDefaultProperties(System.Attribute attr) => throw null; + public System.Collections.Generic.List Properties(System.Attribute attr) => throw null; + public static string PropertyStringValue(System.Reflection.PropertyInfo pi, object value) => throw null; + public static string PropertyValue(System.Reflection.PropertyInfo pi, object instance, object ignoreIfValue = default(object)) => throw null; + public ServiceStack.MetadataAttribute ToAttribute(System.Attribute attr) => throw null; + public System.Collections.Generic.List ToAttributes(object[] attrs) => throw null; + public System.Collections.Generic.List ToAttributes(System.Type type) => throw null; + public System.Collections.Generic.List ToAttributes(System.Collections.Generic.IEnumerable attrs) => throw null; + public static ServiceStack.MetadataDataMember ToDataMember(System.Runtime.Serialization.DataMemberAttribute attr) => throw null; + public ServiceStack.MetadataType ToFlattenedType(System.Type type) => throw null; + public static string[] ToGenericArgs(System.Type propType) => throw null; + public ServiceStack.MetadataAttribute ToMetadataAttribute(System.Attribute attr) => throw null; + public System.Collections.Generic.List ToProperties(System.Type type) => throw null; + public ServiceStack.MetadataPropertyType ToProperty(System.Reflection.PropertyInfo pi, object instance = default(object), System.Collections.Generic.Dictionary ignoreValues = default(System.Collections.Generic.Dictionary)) => throw null; + public ServiceStack.MetadataPropertyType ToProperty(System.Reflection.ParameterInfo pi) => throw null; + public ServiceStack.MetadataType ToType(System.Type type) => throw null; + public ServiceStack.MetadataTypeName ToTypeName(System.Type type) => throw null; + } + + // Generated from `ServiceStack.NativeTypes.NativeTypesBase` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class NativeTypesBase + { + public bool? AddDataContractAttributes { get => throw null; set => throw null; } + public string AddDefaultXmlNamespace { get => throw null; set => throw null; } + public bool? AddDescriptionAsComments { get => throw null; set => throw null; } + public bool? AddGeneratedCodeAttributes { get => throw null; set => throw null; } + public int? AddImplicitVersion { get => throw null; set => throw null; } + public bool? AddIndexesToDataMembers { get => throw null; set => throw null; } + public bool? AddModelExtensions { get => throw null; set => throw null; } + public System.Collections.Generic.List AddNamespaces { get => throw null; set => throw null; } + public bool? AddPropertyAccessors { get => throw null; set => throw null; } + public bool? AddResponseStatus { get => throw null; set => throw null; } + public bool? AddReturnMarker { get => throw null; set => throw null; } + public bool? AddServiceStackTypes { get => throw null; set => throw null; } + public string BaseClass { get => throw null; set => throw null; } + public string BaseUrl { get => throw null; set => throw null; } + public System.Collections.Generic.List DefaultImports { get => throw null; set => throw null; } + public System.Collections.Generic.List DefaultNamespaces { get => throw null; set => throw null; } + public bool? ExcludeGenericBaseTypes { get => throw null; set => throw null; } + public bool? ExcludeNamespace { get => throw null; set => throw null; } + public System.Collections.Generic.List ExcludeTypes { get => throw null; set => throw null; } + public bool? ExportAsTypes { get => throw null; set => throw null; } + public bool? ExportValueTypes { get => throw null; set => throw null; } + public string GlobalNamespace { get => throw null; set => throw null; } + public System.Collections.Generic.List IncludeTypes { get => throw null; set => throw null; } + public bool? InitializeCollections { get => throw null; set => throw null; } + public bool? MakeDataContractsExtensible { get => throw null; set => throw null; } + public bool? MakeInternal { get => throw null; set => throw null; } + public bool? MakePartial { get => throw null; set => throw null; } + public bool? MakePropertiesOptional { get => throw null; set => throw null; } + public bool? MakeVirtual { get => throw null; set => throw null; } + public NativeTypesBase() => throw null; + public string Package { get => throw null; set => throw null; } + public bool? SettersReturnThis { get => throw null; set => throw null; } + public System.Collections.Generic.List TreatTypesAsStrings { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.NativeTypes.NativeTypesMetadata` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class NativeTypesMetadata : ServiceStack.NativeTypes.INativeTypesMetadata + { + public ServiceStack.MetadataTypesConfig GetConfig(ServiceStack.NativeTypes.NativeTypesBase req) => throw null; + public ServiceStack.NativeTypes.MetadataTypesGenerator GetGenerator(ServiceStack.MetadataTypesConfig config) => throw null; + public ServiceStack.NativeTypes.MetadataTypesGenerator GetGenerator() => throw null; + public ServiceStack.MetadataTypes GetMetadataTypes(ServiceStack.Web.IRequest req, ServiceStack.MetadataTypesConfig config = default(ServiceStack.MetadataTypesConfig), System.Func predicate = default(System.Func)) => throw null; + public NativeTypesMetadata(ServiceStack.Host.ServiceMetadata meta, ServiceStack.MetadataTypesConfig defaults) => throw null; + public static System.Collections.Generic.List TrimArgs(System.Collections.Generic.List from) => throw null; + } + + // Generated from `ServiceStack.NativeTypes.NativeTypesService` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class NativeTypesService : ServiceStack.Service + { + public object Any(ServiceStack.NativeTypes.TypesVbNet request) => throw null; + public object Any(ServiceStack.NativeTypes.TypesTypeScriptDefinition request) => throw null; + public object Any(ServiceStack.NativeTypes.TypesTypeScript request) => throw null; + public object Any(ServiceStack.NativeTypes.TypesSwift4 request) => throw null; + public object Any(ServiceStack.NativeTypes.TypesSwift request) => throw null; + public object Any(ServiceStack.NativeTypes.TypesKotlin request) => throw null; + public object Any(ServiceStack.NativeTypes.TypesJava request) => throw null; + public object Any(ServiceStack.NativeTypes.TypesFSharp request) => throw null; + public object Any(ServiceStack.NativeTypes.TypesDart request) => throw null; + public object Any(ServiceStack.NativeTypes.TypesCSharp request) => throw null; + public object Any(ServiceStack.NativeTypes.TypeLinks request) => throw null; + public ServiceStack.MetadataTypes Any(ServiceStack.NativeTypes.TypesMetadata request) => throw null; + public static System.Collections.Generic.List BuiltInClientDtos; + public static System.Collections.Generic.List BuiltinInterfaces; + public string GenerateTypeScript(ServiceStack.NativeTypes.NativeTypesBase request, ServiceStack.MetadataTypesConfig typesConfig) => throw null; + public ServiceStack.NativeTypes.INativeTypesMetadata NativeTypesMetadata { get => throw null; set => throw null; } + public NativeTypesService() => throw null; + public static ServiceStack.MetadataTypes ResolveMetadataTypes(ServiceStack.MetadataTypesConfig typesConfig, ServiceStack.NativeTypes.INativeTypesMetadata nativeTypesMetadata, ServiceStack.Web.IRequest req) => throw null; + public ServiceStack.MetadataTypes ResolveMetadataTypes(ServiceStack.MetadataTypesConfig typesConfig) => throw null; + public static System.Collections.Generic.List ReturnInterfaces; + public static System.Collections.Generic.List>> TypeLinksFilters { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.NativeTypes.StringBuilderWrapper` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class StringBuilderWrapper + { + public void AppendLine(string str = default(string)) => throw null; + public ServiceStack.NativeTypes.StringBuilderWrapper Indent() => throw null; + public int Length { get => throw null; } + public StringBuilderWrapper(System.Text.StringBuilder sb, int indent = default(int)) => throw null; + public override string ToString() => throw null; + public ServiceStack.NativeTypes.StringBuilderWrapper UnIndent() => throw null; + } + + // Generated from `ServiceStack.NativeTypes.TypeFilterDelegate` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public delegate string TypeFilterDelegate(string typeName, string[] genericArgs); + + // Generated from `ServiceStack.NativeTypes.TypeLinks` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class TypeLinks : ServiceStack.NativeTypes.NativeTypesBase, ServiceStack.IReturn>, ServiceStack.IReturn + { + public TypeLinks() => throw null; + } + + // Generated from `ServiceStack.NativeTypes.TypesCSharp` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class TypesCSharp : ServiceStack.NativeTypes.NativeTypesBase + { + public TypesCSharp() => throw null; + } + + // Generated from `ServiceStack.NativeTypes.TypesDart` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class TypesDart : ServiceStack.NativeTypes.NativeTypesBase + { + public TypesDart() => throw null; + } + + // Generated from `ServiceStack.NativeTypes.TypesFSharp` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class TypesFSharp : ServiceStack.NativeTypes.NativeTypesBase + { + public TypesFSharp() => throw null; + } + + // Generated from `ServiceStack.NativeTypes.TypesJava` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class TypesJava : ServiceStack.NativeTypes.NativeTypesBase + { + public TypesJava() => throw null; + } + + // Generated from `ServiceStack.NativeTypes.TypesKotlin` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class TypesKotlin : ServiceStack.NativeTypes.NativeTypesBase + { + public TypesKotlin() => throw null; + } + + // Generated from `ServiceStack.NativeTypes.TypesMetadata` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class TypesMetadata : ServiceStack.NativeTypes.NativeTypesBase + { + public TypesMetadata() => throw null; + } + + // Generated from `ServiceStack.NativeTypes.TypesSwift` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class TypesSwift : ServiceStack.NativeTypes.NativeTypesBase + { + public TypesSwift() => throw null; + } + + // Generated from `ServiceStack.NativeTypes.TypesSwift4` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class TypesSwift4 : ServiceStack.NativeTypes.NativeTypesBase + { + public TypesSwift4() => throw null; + } + + // Generated from `ServiceStack.NativeTypes.TypesTypeScript` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class TypesTypeScript : ServiceStack.NativeTypes.NativeTypesBase + { + public TypesTypeScript() => throw null; + } + + // Generated from `ServiceStack.NativeTypes.TypesTypeScriptDefinition` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class TypesTypeScriptDefinition : ServiceStack.NativeTypes.NativeTypesBase + { + public TypesTypeScriptDefinition() => throw null; + } + + // Generated from `ServiceStack.NativeTypes.TypesVbNet` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class TypesVbNet : ServiceStack.NativeTypes.NativeTypesBase + { + public TypesVbNet() => throw null; + } + + namespace CSharp + { + // Generated from `ServiceStack.NativeTypes.CSharp.CSharpGenerator` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class CSharpGenerator + { + public static ServiceStack.NativeTypes.AddCodeDelegate AddCodeFilter { get => throw null; set => throw null; } + public void AddProperties(ServiceStack.NativeTypes.StringBuilderWrapper sb, ServiceStack.MetadataType type, bool includeResponseStatus) => throw null; + public bool AppendAttributes(ServiceStack.NativeTypes.StringBuilderWrapper sb, System.Collections.Generic.List attributes) => throw null; + public bool AppendComments(ServiceStack.NativeTypes.StringBuilderWrapper sb, string desc) => throw null; + public void AppendDataContract(ServiceStack.NativeTypes.StringBuilderWrapper sb, ServiceStack.MetadataDataContract dcMeta) => throw null; + public bool AppendDataMember(ServiceStack.NativeTypes.StringBuilderWrapper sb, ServiceStack.MetadataDataMember dmMeta, int dataMemberIndex) => throw null; + public static System.Collections.Generic.Dictionary AttributeConstructorArgs { get => throw null; set => throw null; } + public CSharpGenerator(ServiceStack.MetadataTypesConfig config) => throw null; + public static System.Collections.Generic.List DefaultFilterTypes(System.Collections.Generic.List types) => throw null; + public static System.Func, System.Collections.Generic.List> FilterTypes; + public string GetCode(ServiceStack.MetadataTypes metadata, ServiceStack.Web.IRequest request) => throw null; + public string GetPropertyName(string name) => throw null; + public static System.Action InnerTypeFilter { get => throw null; set => throw null; } + public static ServiceStack.NativeTypes.AddCodeDelegate InsertCodeFilter { get => throw null; set => throw null; } + public static string NameOnly(string type, bool includeNested = default(bool)) => throw null; + public static System.Action PostPropertyFilter { get => throw null; set => throw null; } + public static System.Action PostTypeFilter { get => throw null; set => throw null; } + public static System.Action PrePropertyFilter { get => throw null; set => throw null; } + public static System.Action PreTypeFilter { get => throw null; set => throw null; } + public string Type(string type, string[] genericArgs, bool includeNested = default(bool)) => throw null; + public string Type(ServiceStack.MetadataTypeName typeName, bool includeNested = default(bool)) => throw null; + public static string TypeAlias(string type, bool includeNested = default(bool)) => throw null; + public static System.Collections.Generic.Dictionary TypeAliases; + public static ServiceStack.NativeTypes.TypeFilterDelegate TypeFilter { get => throw null; set => throw null; } + public string TypeValue(string type, string value) => throw null; + } + + // Generated from `ServiceStack.NativeTypes.CSharp.CSharpGeneratorExtensions` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class CSharpGeneratorExtensions + { + public static ServiceStack.MetadataTypeName GetInherits(this ServiceStack.MetadataType type) => throw null; + } + + } + namespace Dart + { + // Generated from `ServiceStack.NativeTypes.Dart.DartGenerator` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class DartGenerator + { + public static ServiceStack.NativeTypes.AddCodeDelegate AddCodeFilter { get => throw null; set => throw null; } + public void AddProperties(ServiceStack.NativeTypes.StringBuilderWrapper sb, ServiceStack.MetadataType type, bool includeResponseStatus) => throw null; + public bool AppendAttributes(ServiceStack.NativeTypes.StringBuilderWrapper sb, System.Collections.Generic.List attributes) => throw null; + public bool AppendComments(ServiceStack.NativeTypes.StringBuilderWrapper sb, string desc) => throw null; + public void AppendDataContract(ServiceStack.NativeTypes.StringBuilderWrapper sb, ServiceStack.MetadataDataContract dcMeta) => throw null; + public bool AppendDataMember(ServiceStack.NativeTypes.StringBuilderWrapper sb, ServiceStack.MetadataDataMember dmMeta, int dataMemberIndex) => throw null; + public static System.Collections.Generic.HashSet ArrayTypes; + public string ConvertFromCSharp(ServiceStack.TextNode node) => throw null; + public DartGenerator(ServiceStack.MetadataTypesConfig config) => throw null; + public string DartLiteral(string typeName) => throw null; + public static System.Collections.Generic.Dictionary DartToJsonConverters; + public static System.Collections.Generic.List DefaultFilterTypes(System.Collections.Generic.List types) => throw null; + public static System.Collections.Generic.List DefaultImports; + public static System.Collections.Generic.HashSet DictionaryTypes; + public static System.Func, System.Collections.Generic.List> FilterTypes; + public static bool GenerateServiceStackTypes { get => throw null; } + public string GenericArg(string arg) => throw null; + public string GetCode(ServiceStack.MetadataTypes metadata, ServiceStack.Web.IRequest request, ServiceStack.NativeTypes.INativeTypesMetadata nativeTypes) => throw null; + public string GetPropertyName(string name) => throw null; + public static System.Collections.Generic.HashSet IgnoreTypeInfosFor; + public static System.Action InnerTypeFilter { get => throw null; set => throw null; } + public static ServiceStack.NativeTypes.AddCodeDelegate InsertCodeFilter { get => throw null; set => throw null; } + public string NameOnly(string type) => throw null; + public static System.Action PostPropertyFilter { get => throw null; set => throw null; } + public static System.Action PostTypeFilter { get => throw null; set => throw null; } + public static System.Action PrePropertyFilter { get => throw null; set => throw null; } + public static System.Action PreTypeFilter { get => throw null; set => throw null; } + public string RawGenericArg(string arg) => throw null; + public string RawGenericType(string type, string[] genericArgs) => throw null; + public string RawType(ServiceStack.TextNode node) => throw null; + public void RegisterPropertyType(ServiceStack.MetadataPropertyType prop, string dartType) => throw null; + public static System.Collections.Generic.HashSet SetTypes; + public string Type(string type, string[] genericArgs) => throw null; + public string Type(ServiceStack.MetadataTypeName typeName) => throw null; + public static System.Collections.Generic.Dictionary TypeAliases; + public static ServiceStack.NativeTypes.TypeFilterDelegate TypeFilter { get => throw null; set => throw null; } + public string TypeValue(string type, string value) => throw null; + public bool UseTypeConversion(ServiceStack.MetadataPropertyType prop) => throw null; + } + + // Generated from `ServiceStack.NativeTypes.Dart.DartGeneratorExtensions` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class DartGeneratorExtensions + { + public static System.Collections.Generic.HashSet DartKeyWords; + public static bool HasEnumFlags(ServiceStack.MetadataType type) => throw null; + public static string InDeclarationType(this string type) => throw null; + public static bool IsKeyWord(string name) => throw null; + public static string PropertyName(this string name) => throw null; + public static string PropertyStyle(this string name) => throw null; + } + + } + namespace FSharp + { + // Generated from `ServiceStack.NativeTypes.FSharp.FSharpGenerator` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class FSharpGenerator + { + public static ServiceStack.NativeTypes.AddCodeDelegate AddCodeFilter { get => throw null; set => throw null; } + public void AddProperties(ServiceStack.NativeTypes.StringBuilderWrapper sb, ServiceStack.MetadataType type, bool includeResponseStatus) => throw null; + public bool AppendAttributes(ServiceStack.NativeTypes.StringBuilderWrapper sb, System.Collections.Generic.List attributes) => throw null; + public bool AppendComments(ServiceStack.NativeTypes.StringBuilderWrapper sb, string desc) => throw null; + public void AppendDataContract(ServiceStack.NativeTypes.StringBuilderWrapper sb, ServiceStack.MetadataDataContract dcMeta) => throw null; + public bool AppendDataMember(ServiceStack.NativeTypes.StringBuilderWrapper sb, ServiceStack.MetadataDataMember dmMeta, int dataMemberIndex) => throw null; + public static System.Collections.Generic.List DefaultFilterTypes(System.Collections.Generic.List types) => throw null; + public FSharpGenerator(ServiceStack.MetadataTypesConfig config) => throw null; + public static System.Func, System.Collections.Generic.List> FilterTypes; + public string GetCode(ServiceStack.MetadataTypes metadata, ServiceStack.Web.IRequest request) => throw null; + public string GetPropertyName(string name) => throw null; + public static System.Action InnerTypeFilter { get => throw null; set => throw null; } + public static ServiceStack.NativeTypes.AddCodeDelegate InsertCodeFilter { get => throw null; set => throw null; } + public string NameOnly(string type) => throw null; + public static System.Action PostPropertyFilter { get => throw null; set => throw null; } + public static System.Action PostTypeFilter { get => throw null; set => throw null; } + public static System.Action PrePropertyFilter { get => throw null; set => throw null; } + public static System.Action PreTypeFilter { get => throw null; set => throw null; } + public string Type(string type, string[] genericArgs) => throw null; + public string Type(ServiceStack.MetadataTypeName typeName) => throw null; + public static System.Collections.Generic.Dictionary TypeAliases; + public static ServiceStack.NativeTypes.TypeFilterDelegate TypeFilter { get => throw null; set => throw null; } + public string TypeValue(string type, string value) => throw null; + } + + // Generated from `ServiceStack.NativeTypes.FSharp.FSharpGeneratorExtensions` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class FSharpGeneratorExtensions + { + public static bool Contains(this System.Collections.Generic.Dictionary> map, string key, string value) => throw null; + } + + } + namespace Java + { + // Generated from `ServiceStack.NativeTypes.Java.JavaGenerator` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class JavaGenerator + { + public static ServiceStack.NativeTypes.AddCodeDelegate AddCodeFilter { get => throw null; set => throw null; } + public static bool AddGsonImport { set => throw null; } + public void AddProperties(ServiceStack.NativeTypes.StringBuilderWrapper sb, ServiceStack.MetadataType type, bool includeResponseStatus, bool addPropertyAccessors, string settersReturnType) => throw null; + public bool AppendAttributes(ServiceStack.NativeTypes.StringBuilderWrapper sb, System.Collections.Generic.List attributes) => throw null; + public bool AppendComments(ServiceStack.NativeTypes.StringBuilderWrapper sb, string desc) => throw null; + public void AppendDataContract(ServiceStack.NativeTypes.StringBuilderWrapper sb, ServiceStack.MetadataDataContract dcMeta) => throw null; + public bool AppendDataMember(ServiceStack.NativeTypes.StringBuilderWrapper sb, ServiceStack.MetadataDataMember dmMeta, int dataMemberIndex) => throw null; + public static System.Collections.Concurrent.ConcurrentDictionary ArrayAliases; + public static System.Collections.Generic.HashSet ArrayTypes; + public string ConvertFromCSharp(ServiceStack.TextNode node) => throw null; + public static System.Collections.Generic.List DefaultFilterTypes(System.Collections.Generic.List types) => throw null; + public static string DefaultGlobalNamespace; + public static System.Collections.Generic.List DefaultImports; + public static System.Collections.Generic.HashSet DictionaryTypes; + public static System.Func, System.Collections.Generic.List> FilterTypes; + public static string GSonAnnotationsNamespace; + public static string GSonReflectNamespace; + public string GenericArg(string arg) => throw null; + public string GetCode(ServiceStack.MetadataTypes metadata, ServiceStack.Web.IRequest request, ServiceStack.NativeTypes.INativeTypesMetadata nativeTypes) => throw null; + public string GetPropertyName(string name) => throw null; + public static System.Collections.Generic.HashSet IgnoreTypeNames; + public static System.Action InnerTypeFilter { get => throw null; set => throw null; } + public static ServiceStack.NativeTypes.AddCodeDelegate InsertCodeFilter { get => throw null; set => throw null; } + public JavaGenerator(ServiceStack.MetadataTypesConfig config) => throw null; + public static string JavaIoNamespace; + public string NameOnly(string type) => throw null; + public static System.Action PostPropertyFilter { get => throw null; set => throw null; } + public static System.Action PostTypeFilter { get => throw null; set => throw null; } + public static System.Action PrePropertyFilter { get => throw null; set => throw null; } + public static System.Action PreTypeFilter { get => throw null; set => throw null; } + public string Type(string type, string[] genericArgs) => throw null; + public string Type(ServiceStack.MetadataTypeName typeName) => throw null; + public static System.Collections.Concurrent.ConcurrentDictionary TypeAliases; + public static ServiceStack.NativeTypes.TypeFilterDelegate TypeFilter { get => throw null; set => throw null; } + public string TypeValue(string type, string value) => throw null; + } + + // Generated from `ServiceStack.NativeTypes.Java.JavaGeneratorExtensions` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class JavaGeneratorExtensions + { + public static ServiceStack.NativeTypes.StringBuilderWrapper AppendPropertyAccessor(this ServiceStack.NativeTypes.StringBuilderWrapper sb, string type, string fieldName, string settersReturnThis) => throw null; + public static ServiceStack.NativeTypes.StringBuilderWrapper AppendPropertyAccessor(this ServiceStack.NativeTypes.StringBuilderWrapper sb, string type, string fieldName, string accessorName, string settersReturnThis) => throw null; + public static string InheritedType(this string type) => throw null; + public static bool IsKeyWord(this string name) => throw null; + public static System.Collections.Generic.HashSet JavaKeyWords; + public static string PropertyStyle(this string name) => throw null; + public static ServiceStack.MetadataAttribute ToMetadataAttribute(this ServiceStack.MetadataRoute route) => throw null; + } + + } + namespace Kotlin + { + // Generated from `ServiceStack.NativeTypes.Kotlin.KotlinGenerator` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class KotlinGenerator + { + public static ServiceStack.NativeTypes.AddCodeDelegate AddCodeFilter { get => throw null; set => throw null; } + public static bool AddGsonImport { set => throw null; } + public void AddProperties(ServiceStack.NativeTypes.StringBuilderWrapper sb, ServiceStack.MetadataType type, bool initCollections, bool includeResponseStatus) => throw null; + public bool AppendAttributes(ServiceStack.NativeTypes.StringBuilderWrapper sb, System.Collections.Generic.List attributes) => throw null; + public bool AppendComments(ServiceStack.NativeTypes.StringBuilderWrapper sb, string desc) => throw null; + public void AppendDataContract(ServiceStack.NativeTypes.StringBuilderWrapper sb, ServiceStack.MetadataDataContract dcMeta) => throw null; + public bool AppendDataMember(ServiceStack.NativeTypes.StringBuilderWrapper sb, ServiceStack.MetadataDataMember dmMeta, int dataMemberIndex) => throw null; + public static System.Collections.Concurrent.ConcurrentDictionary ArrayAliases; + public static System.Collections.Generic.HashSet ArrayTypes; + public string ConvertFromCSharp(ServiceStack.TextNode node) => throw null; + public static System.Collections.Generic.List DefaultFilterTypes(System.Collections.Generic.List types) => throw null; + public static System.Collections.Generic.List DefaultImports; + public static System.Collections.Generic.HashSet DictionaryTypes; + public static System.Func, System.Collections.Generic.List> FilterTypes; + public static string GSonAnnotationsNamespace; + public static string GSonReflectNamespace; + public string GenericArg(string arg) => throw null; + public string GetCode(ServiceStack.MetadataTypes metadata, ServiceStack.Web.IRequest request, ServiceStack.NativeTypes.INativeTypesMetadata nativeTypes) => throw null; + public string GetPropertyName(string name) => throw null; + public static System.Collections.Generic.HashSet IgnoreTypeNames; + public static System.Action InnerTypeFilter { get => throw null; set => throw null; } + public static ServiceStack.NativeTypes.AddCodeDelegate InsertCodeFilter { get => throw null; set => throw null; } + public static string JavaIoNamespace; + public KotlinGenerator(ServiceStack.MetadataTypesConfig config) => throw null; + public string NameOnly(string type) => throw null; + public static System.Action PostPropertyFilter { get => throw null; set => throw null; } + public static System.Action PostTypeFilter { get => throw null; set => throw null; } + public static System.Action PrePropertyFilter { get => throw null; set => throw null; } + public static System.Action PreTypeFilter { get => throw null; set => throw null; } + public string Type(string type, string[] genericArgs) => throw null; + public string Type(ServiceStack.MetadataTypeName typeName) => throw null; + public static System.Collections.Concurrent.ConcurrentDictionary TypeAliases; + public static ServiceStack.NativeTypes.TypeFilterDelegate TypeFilter { get => throw null; set => throw null; } + public string TypeValue(string type, string value) => throw null; + } + + // Generated from `ServiceStack.NativeTypes.Kotlin.KotlinGeneratorExtensions` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class KotlinGeneratorExtensions + { + public static ServiceStack.NativeTypes.StringBuilderWrapper AppendPropertyAccessor(this ServiceStack.NativeTypes.StringBuilderWrapper sb, string type, string fieldName, string settersReturnThis) => throw null; + public static ServiceStack.NativeTypes.StringBuilderWrapper AppendPropertyAccessor(this ServiceStack.NativeTypes.StringBuilderWrapper sb, string type, string fieldName, string accessorName, string settersReturnThis) => throw null; + public static string InheritedType(this string type) => throw null; + public static bool IsKeyWord(this string name) => throw null; + public static System.Collections.Generic.HashSet KotlinKeyWords; + public static string PropertyStyle(this string name) => throw null; + public static ServiceStack.MetadataAttribute ToMetadataAttribute(this ServiceStack.MetadataRoute route) => throw null; + } + + } + namespace Swift + { + // Generated from `ServiceStack.NativeTypes.Swift.Swift4Generator` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class Swift4Generator + { + public static ServiceStack.NativeTypes.AddCodeDelegate AddCodeFilter { get => throw null; set => throw null; } + public static string AddGenericConstraints(string typeDef) => throw null; + public void AddProperties(ServiceStack.NativeTypes.StringBuilderWrapper sb, ServiceStack.MetadataType type, bool initCollections, bool includeResponseStatus) => throw null; + public bool AppendAttributes(ServiceStack.NativeTypes.StringBuilderWrapper sb, System.Collections.Generic.List attributes) => throw null; + public bool AppendComments(ServiceStack.NativeTypes.StringBuilderWrapper sb, string desc) => throw null; + public void AppendDataContract(ServiceStack.NativeTypes.StringBuilderWrapper sb, ServiceStack.MetadataDataContract dcMeta) => throw null; + public bool AppendDataMember(ServiceStack.NativeTypes.StringBuilderWrapper sb, ServiceStack.MetadataDataMember dmMeta, int dataMemberIndex) => throw null; + public static System.Collections.Generic.HashSet ArrayTypes; + public static string CSharpStyleEnums(string enumName) => throw null; + public string ConvertFromCSharp(ServiceStack.TextNode node) => throw null; + public static System.Collections.Generic.List DefaultFilterTypes(System.Collections.Generic.List types) => throw null; + public static System.Collections.Generic.List DefaultImports; + public static System.Collections.Generic.HashSet DictionaryTypes; + public static System.Func EnumNameStrategy { get => throw null; set => throw null; } + public static System.Func, System.Collections.Generic.List> FilterTypes; + public ServiceStack.MetadataType FindType(string typeName, string typeNamespace, params string[] genericArgs) => throw null; + public ServiceStack.MetadataType FindType(ServiceStack.MetadataTypeName typeName) => throw null; + public string GenericArg(string arg) => throw null; + public string GetCode(ServiceStack.MetadataTypes metadata, ServiceStack.Web.IRequest request) => throw null; + public System.Collections.Generic.List GetProperties(ServiceStack.MetadataType type) => throw null; + public string GetPropertyName(string name) => throw null; + public static bool IgnoreArrayReturnTypes; + public static System.Collections.Generic.HashSet IgnorePropertyNames; + public static System.Collections.Generic.HashSet IgnorePropertyTypeNames; + public static System.Collections.Generic.HashSet IgnoreTypeNames; + public static System.Action InnerTypeFilter { get => throw null; set => throw null; } + public static ServiceStack.NativeTypes.AddCodeDelegate InsertCodeFilter { get => throw null; set => throw null; } + public string NameOnly(string type) => throw null; + public static System.Collections.Generic.HashSet OverrideInitForBaseClasses; + public static System.Action PostPropertyFilter { get => throw null; set => throw null; } + public static System.Action PostTypeFilter { get => throw null; set => throw null; } + public static System.Action PrePropertyFilter { get => throw null; set => throw null; } + public static System.Action PreTypeFilter { get => throw null; set => throw null; } + public string ReturnType(string type, string[] genericArgs) => throw null; + public Swift4Generator(ServiceStack.MetadataTypesConfig config) => throw null; + public static string SwiftStyleEnums(string enumName) => throw null; + public string Type(string type, string[] genericArgs) => throw null; + public string Type(ServiceStack.MetadataTypeName typeName) => throw null; + public static System.Collections.Concurrent.ConcurrentDictionary TypeAliases; + public static ServiceStack.NativeTypes.TypeFilterDelegate TypeFilter { get => throw null; set => throw null; } + public string TypeValue(string type, string value) => throw null; + } + + // Generated from `ServiceStack.NativeTypes.Swift.SwiftGenerator` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class SwiftGenerator + { + public static ServiceStack.NativeTypes.AddCodeDelegate AddCodeFilter { get => throw null; set => throw null; } + public static string AddGenericConstraints(string typeDef) => throw null; + public void AddProperties(ServiceStack.NativeTypes.StringBuilderWrapper sb, ServiceStack.MetadataType type, bool initCollections, bool includeResponseStatus) => throw null; + public bool AppendAttributes(ServiceStack.NativeTypes.StringBuilderWrapper sb, System.Collections.Generic.List attributes) => throw null; + public bool AppendComments(ServiceStack.NativeTypes.StringBuilderWrapper sb, string desc) => throw null; + public void AppendDataContract(ServiceStack.NativeTypes.StringBuilderWrapper sb, ServiceStack.MetadataDataContract dcMeta) => throw null; + public bool AppendDataMember(ServiceStack.NativeTypes.StringBuilderWrapper sb, ServiceStack.MetadataDataMember dmMeta, int dataMemberIndex) => throw null; + public static System.Collections.Generic.HashSet ArrayTypes; + public static string CSharpStyleEnums(string enumName) => throw null; + public string ConvertFromCSharp(ServiceStack.TextNode node) => throw null; + public static System.Collections.Concurrent.ConcurrentDictionary Converters; + public static System.Collections.Generic.List DefaultFilterTypes(System.Collections.Generic.List types) => throw null; + public static System.Collections.Generic.List DefaultImports; + public static System.Collections.Generic.HashSet DictionaryTypes; + public static System.Func EnumNameStrategy { get => throw null; set => throw null; } + public static System.Func, System.Collections.Generic.List> FilterTypes; + public ServiceStack.MetadataType FindType(string typeName, string typeNamespace, params string[] genericArgs) => throw null; + public ServiceStack.MetadataType FindType(ServiceStack.MetadataTypeName typeName) => throw null; + public string GenericArg(string arg) => throw null; + public string GetCode(ServiceStack.MetadataTypes metadata, ServiceStack.Web.IRequest request) => throw null; + public System.Collections.Generic.List GetProperties(ServiceStack.MetadataType type) => throw null; + public string GetPropertyName(string name) => throw null; + public static bool IgnoreArrayReturnTypes; + public static System.Collections.Generic.HashSet IgnorePropertyNames; + public static System.Collections.Generic.HashSet IgnorePropertyTypeNames; + public static System.Collections.Generic.HashSet IgnoreTypeNames; + public static System.Action InnerTypeFilter { get => throw null; set => throw null; } + public static ServiceStack.NativeTypes.AddCodeDelegate InsertCodeFilter { get => throw null; set => throw null; } + public string NameOnly(string type) => throw null; + public static System.Collections.Generic.HashSet OverrideInitForBaseClasses; + public static System.Action PostPropertyFilter { get => throw null; set => throw null; } + public static System.Action PostTypeFilter { get => throw null; set => throw null; } + public static System.Action PrePropertyFilter { get => throw null; set => throw null; } + public static System.Action PreTypeFilter { get => throw null; set => throw null; } + public string ReturnType(string type, string[] genericArgs) => throw null; + public SwiftGenerator(ServiceStack.MetadataTypesConfig config) => throw null; + public static string SwiftStyleEnums(string enumName) => throw null; + public string Type(string type, string[] genericArgs) => throw null; + public string Type(ServiceStack.MetadataTypeName typeName) => throw null; + public static System.Collections.Concurrent.ConcurrentDictionary TypeAliases; + public static ServiceStack.NativeTypes.TypeFilterDelegate TypeFilter { get => throw null; set => throw null; } + public string TypeValue(string type, string value) => throw null; + } + + // Generated from `ServiceStack.NativeTypes.Swift.SwiftGeneratorExtensions` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class SwiftGeneratorExtensions + { + public static string InheritedType(this string type) => throw null; + public static string PropertyStyle(this string name) => throw null; + public static System.Collections.Generic.HashSet SwiftKeyWords; + public static string UnescapeReserved(this string name) => throw null; + } + + // Generated from `ServiceStack.NativeTypes.Swift.SwiftTypeConverter` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class SwiftTypeConverter + { + public string Attribute { get => throw null; set => throw null; } + public string DecodeMethod { get => throw null; set => throw null; } + public string EncodeMethod { get => throw null; set => throw null; } + public SwiftTypeConverter() => throw null; + } + + } + namespace TypeScript + { + // Generated from `ServiceStack.NativeTypes.TypeScript.TypeScriptGenerator` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class TypeScriptGenerator + { + public static ServiceStack.NativeTypes.AddCodeDelegate AddCodeFilter { get => throw null; set => throw null; } + public void AddProperties(ServiceStack.NativeTypes.StringBuilderWrapper sb, ServiceStack.MetadataType type, bool includeResponseStatus) => throw null; + public System.Collections.Generic.HashSet AddedDeclarations { get => throw null; set => throw null; } + public System.Collections.Generic.List AllTypes { get => throw null; set => throw null; } + public static System.Collections.Generic.HashSet AllowedKeyTypes; + public bool AppendAttributes(ServiceStack.NativeTypes.StringBuilderWrapper sb, System.Collections.Generic.List attributes) => throw null; + public bool AppendComments(ServiceStack.NativeTypes.StringBuilderWrapper sb, string desc) => throw null; + public void AppendDataContract(ServiceStack.NativeTypes.StringBuilderWrapper sb, ServiceStack.MetadataDataContract dcMeta) => throw null; + public bool AppendDataMember(ServiceStack.NativeTypes.StringBuilderWrapper sb, ServiceStack.MetadataDataMember dmMeta, int dataMemberIndex) => throw null; + public static System.Collections.Generic.HashSet ArrayTypes; + public ServiceStack.MetadataTypesConfig Config; + public string ConvertFromCSharp(ServiceStack.TextNode node) => throw null; + public static System.Func CookedDeclarationTypeFilter { get => throw null; set => throw null; } + public static System.Func CookedTypeFilter { get => throw null; set => throw null; } + public string DeclarationType(string type, string[] genericArgs, out string addDeclaration) => throw null; + public static ServiceStack.NativeTypes.TypeFilterDelegate DeclarationTypeFilter { get => throw null; set => throw null; } + public static System.Collections.Generic.List DefaultFilterTypes(System.Collections.Generic.List types) => throw null; + public static System.Collections.Generic.List DefaultImports; + public static bool? DefaultIsPropertyOptional(ServiceStack.NativeTypes.TypeScript.TypeScriptGenerator generator, ServiceStack.MetadataType type, ServiceStack.MetadataPropertyType prop) => throw null; + public string DictionaryDeclaration { get => throw null; set => throw null; } + public static System.Collections.Generic.HashSet DictionaryTypes; + public static bool EmitPartialConstructors { get => throw null; set => throw null; } + public static System.Func, System.Collections.Generic.List> FilterTypes { get => throw null; set => throw null; } + public string GenericArg(string arg) => throw null; + public string GetCode(ServiceStack.MetadataTypes metadata, ServiceStack.Web.IRequest request, ServiceStack.NativeTypes.INativeTypesMetadata nativeTypes) => throw null; + public string GetPropertyName(string name) => throw null; + public virtual string GetPropertyType(ServiceStack.MetadataPropertyType prop, out bool isNullable) => throw null; + public static System.Action InnerTypeFilter { get => throw null; set => throw null; } + public static ServiceStack.NativeTypes.AddCodeDelegate InsertCodeFilter { get => throw null; set => throw null; } + public static bool InsertTsNoCheck { get => throw null; set => throw null; } + public static System.Func IsPropertyOptional { get => throw null; set => throw null; } + public string NameOnly(string type) => throw null; + public static System.Action PostPropertyFilter { get => throw null; set => throw null; } + public static System.Action PostTypeFilter { get => throw null; set => throw null; } + public static System.Action PrePropertyFilter { get => throw null; set => throw null; } + public static System.Action PreTypeFilter { get => throw null; set => throw null; } + public static System.Func PropertyTypeFilter { get => throw null; set => throw null; } + public static System.Func ReturnMarkerFilter { get => throw null; set => throw null; } + public string Type(string type, string[] genericArgs) => throw null; + public string Type(ServiceStack.MetadataTypeName typeName) => throw null; + public static System.Collections.Generic.Dictionary TypeAliases; + public static ServiceStack.NativeTypes.TypeFilterDelegate TypeFilter { get => throw null; set => throw null; } + public TypeScriptGenerator(ServiceStack.MetadataTypesConfig config) => throw null; + public string TypeValue(string type, string value) => throw null; + public static bool UseNullableProperties { set => throw null; } + public static bool UseUnionTypeEnums { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.NativeTypes.TypeScript.TypeScriptGeneratorExtensions` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class TypeScriptGeneratorExtensions + { + public static string InReturnMarker(this string type) => throw null; + public static string PropertyStyle(this string name) => throw null; + } + + } + namespace VbNet + { + // Generated from `ServiceStack.NativeTypes.VbNet.VbNetGenerator` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class VbNetGenerator + { + public static ServiceStack.NativeTypes.AddCodeDelegate AddCodeFilter { get => throw null; set => throw null; } + public void AddProperties(ServiceStack.NativeTypes.StringBuilderWrapper sb, ServiceStack.MetadataType type, bool includeResponseStatus) => throw null; + public bool AppendAttributes(ServiceStack.NativeTypes.StringBuilderWrapper sb, System.Collections.Generic.List attributes) => throw null; + public bool AppendComments(ServiceStack.NativeTypes.StringBuilderWrapper sb, string desc) => throw null; + public void AppendDataContract(ServiceStack.NativeTypes.StringBuilderWrapper sb, ServiceStack.MetadataDataContract dcMeta) => throw null; + public bool AppendDataMember(ServiceStack.NativeTypes.StringBuilderWrapper sb, ServiceStack.MetadataDataMember dmMeta, int dataMemberIndex) => throw null; + public static System.Collections.Generic.List DefaultFilterTypes(System.Collections.Generic.List types) => throw null; + public string EscapeKeyword(string name) => throw null; + public static System.Func, System.Collections.Generic.List> FilterTypes; + public string GetCode(ServiceStack.MetadataTypes metadata, ServiceStack.Web.IRequest request) => throw null; + public string GetPropertyName(string name) => throw null; + public static System.Action InnerTypeFilter { get => throw null; set => throw null; } + public static ServiceStack.NativeTypes.AddCodeDelegate InsertCodeFilter { get => throw null; set => throw null; } + public static System.Collections.Generic.HashSet KeyWords; + public string NameOnly(string type, bool includeNested = default(bool)) => throw null; + public static System.Action PostPropertyFilter { get => throw null; set => throw null; } + public static System.Action PostTypeFilter { get => throw null; set => throw null; } + public static System.Action PrePropertyFilter { get => throw null; set => throw null; } + public static System.Action PreTypeFilter { get => throw null; set => throw null; } + public string Type(string type, string[] genericArgs, bool includeNested = default(bool)) => throw null; + public string Type(ServiceStack.MetadataTypeName typeName, bool includeNested = default(bool)) => throw null; + public static System.Collections.Generic.Dictionary TypeAliases; + public static ServiceStack.NativeTypes.TypeFilterDelegate TypeFilter { get => throw null; set => throw null; } + public string TypeValue(string type, string value) => throw null; + public VbNetGenerator(ServiceStack.MetadataTypesConfig config) => throw null; + } + + // Generated from `ServiceStack.NativeTypes.VbNet.VbNetGeneratorExtensions` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class VbNetGeneratorExtensions + { + public static string QuotedSafeValue(this string value) => throw null; + public static string SafeComment(this string comment) => throw null; + public static string SafeToken(this string token) => throw null; + public static string SafeValue(this string value) => throw null; + public static ServiceStack.MetadataAttribute ToMetadataAttribute(this ServiceStack.MetadataRoute route) => throw null; + } + + } + } + namespace NetCore + { + // Generated from `ServiceStack.NetCore.NetCoreContainerAdapter` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class NetCoreContainerAdapter : System.IDisposable, ServiceStack.Configuration.IResolver, ServiceStack.Configuration.IContainerAdapter + { + public void Dispose() => throw null; + public NetCoreContainerAdapter(System.IServiceProvider appServices) => throw null; + public T Resolve() => throw null; + public T TryResolve() => throw null; + } + + // Generated from `ServiceStack.NetCore.NetCoreHeadersCollection` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class NetCoreHeadersCollection : System.Collections.Specialized.NameValueCollection + { + public override void Add(string name, string value) => throw null; + public override string[] AllKeys { get => throw null; } + public override void Clear() => throw null; + public override int Count { get => throw null; } + public override string Get(string name) => throw null; + public override string Get(int index) => throw null; + public override System.Collections.IEnumerator GetEnumerator() => throw null; + public override string GetKey(int index) => throw null; + public override string[] GetValues(string name) => throw null; + public bool HasKeys() => throw null; + public bool IsSynchronized { get => throw null; } + public NetCoreHeadersCollection(Microsoft.AspNetCore.Http.IHeaderDictionary original) => throw null; + public object Original { get => throw null; } + public override void Remove(string name) => throw null; + public override void Set(string key, string value) => throw null; + public object SyncRoot { get => throw null; } + } + + // Generated from `ServiceStack.NetCore.NetCoreLog` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class NetCoreLog : ServiceStack.Logging.ILog + { + public void Debug(object message, System.Exception exception) => throw null; + public void Debug(object message) => throw null; + public void DebugFormat(string format, params object[] args) => throw null; + public void Error(object message, System.Exception exception) => throw null; + public void Error(object message) => throw null; + public void ErrorFormat(string format, params object[] args) => throw null; + public void Fatal(object message, System.Exception exception) => throw null; + public void Fatal(object message) => throw null; + public void FatalFormat(string format, params object[] args) => throw null; + public void Info(object message, System.Exception exception) => throw null; + public void Info(object message) => throw null; + public void InfoFormat(string format, params object[] args) => throw null; + public bool IsDebugEnabled { get => throw null; } + public NetCoreLog(Microsoft.Extensions.Logging.ILogger logger, bool debugEnabled = default(bool)) => throw null; + public void Warn(object message, System.Exception exception) => throw null; + public void Warn(object message) => throw null; + public void WarnFormat(string format, params object[] args) => throw null; + } + + // Generated from `ServiceStack.NetCore.NetCoreLogFactory` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class NetCoreLogFactory : ServiceStack.Logging.ILogFactory + { + public static Microsoft.Extensions.Logging.ILoggerFactory FallbackLoggerFactory { get => throw null; set => throw null; } + public ServiceStack.Logging.ILog GetLogger(string typeName) => throw null; + public ServiceStack.Logging.ILog GetLogger(System.Type type) => throw null; + public NetCoreLogFactory(Microsoft.Extensions.Logging.ILoggerFactory loggerFactory, bool debugEnabled = default(bool)) => throw null; + } + + // Generated from `ServiceStack.NetCore.NetCoreQueryStringCollection` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class NetCoreQueryStringCollection : System.Collections.Specialized.NameValueCollection + { + public override void Add(string name, string value) => throw null; + public override string[] AllKeys { get => throw null; } + public override void Clear() => throw null; + public override int Count { get => throw null; } + public override string Get(string name) => throw null; + public override string Get(int index) => throw null; + public override System.Collections.IEnumerator GetEnumerator() => throw null; + public override string GetKey(int index) => throw null; + public override string[] GetValues(string name) => throw null; + public bool IsSynchronized { get => throw null; } + public NetCoreQueryStringCollection(Microsoft.AspNetCore.Http.IQueryCollection originalQuery) => throw null; + public object Original { get => throw null; } + public override void Remove(string name) => throw null; + public override void Set(string key, string value) => throw null; + public object SyncRoot { get => throw null; } + public override string ToString() => throw null; + } + + } + namespace Platforms + { + // Generated from `ServiceStack.Platforms.PlatformNetCore` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class PlatformNetCore : ServiceStack.Platform + { + public static System.Collections.Generic.List AppConfigPaths; + public const string ConfigNullValue = default; + public override string GetAppConfigPath() => throw null; + public override string GetAppSetting(string key, string defaultValue) => throw null; + public override string GetAppSetting(string key) => throw null; + public override T GetAppSetting(string key, T defaultValue) => throw null; + public override string GetConnectionString(string key) => throw null; + public override string GetNullableAppSetting(string key) => throw null; + public static ServiceStack.ServiceStackHost HostInstance { get => throw null; set => throw null; } + public PlatformNetCore() => throw null; + } + + } + namespace Support + { + namespace WebHost + { + // Generated from `ServiceStack.Support.WebHost.FilterAttributeCache` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class FilterAttributeCache + { + public static ServiceStack.Web.IRequestFilterBase[] GetRequestFilterAttributes(System.Type requestDtoType) => throw null; + public static ServiceStack.Web.IResponseFilterBase[] GetResponseFilterAttributes(System.Type requestDtoType) => throw null; + } + + } + } + namespace Templates + { + // Generated from `ServiceStack.Templates.HtmlTemplates` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class HtmlTemplates + { + public static string Format(string template, params object[] args) => throw null; + public static string GetHtmlFormatTemplate() => throw null; + public static string GetHtmlRedirectTemplate(string url) => throw null; + public static string GetIndexOperationsTemplate() => throw null; + public static string GetLoginTemplate() => throw null; + public static string GetMetadataDebugTemplate() => throw null; + public static string GetOperationControlTemplate() => throw null; + public static string GetSvgTemplatePath() => throw null; + public static string GetTemplatePath(string templateName) => throw null; + } + + } + namespace Testing + { + // Generated from `ServiceStack.Testing.BasicAppHost` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class BasicAppHost : ServiceStack.ServiceStackHost + { + public BasicAppHost(params System.Reflection.Assembly[] serviceAssemblies) : base(default(string), default(System.Reflection.Assembly[])) => throw null; + public System.Action ConfigFilter { get => throw null; set => throw null; } + public override void Configure(Funq.Container container) => throw null; + public System.Action ConfigureAppHost { get => throw null; set => throw null; } + public System.Action ConfigureContainer { get => throw null; set => throw null; } + public override ServiceStack.IServiceGateway GetServiceGateway(ServiceStack.Web.IRequest req) => throw null; + public override void OnConfigLoad() => throw null; + public System.Func UseServiceController { set => throw null; } + } + + // Generated from `ServiceStack.Testing.BasicResolver` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class BasicResolver : ServiceStack.Configuration.IResolver + { + public BasicResolver(Funq.Container container) => throw null; + public BasicResolver() => throw null; + public T TryResolve() => throw null; + } + + // Generated from `ServiceStack.Testing.MockHttpRequest` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class MockHttpRequest : System.IServiceProvider, ServiceStack.Web.IRequest, ServiceStack.Web.IHttpRequest, ServiceStack.IO.IHasVirtualFiles, ServiceStack.IHasServiceScope, ServiceStack.Configuration.IResolver, ServiceStack.Configuration.IHasResolver + { + public string AbsoluteUri { get => throw null; } + public string Accept { get => throw null; set => throw null; } + public string[] AcceptTypes { get => throw null; set => throw null; } + public void AddSessionCookies() => throw null; + public string ApplicationFilePath { get => throw null; set => throw null; } + public string Authorization { get => throw null; set => throw null; } + public System.Int64 ContentLength { get => throw null; } + public string ContentType { get => throw null; set => throw null; } + public System.Collections.Generic.IDictionary Cookies { get => throw null; set => throw null; } + public object Dto { get => throw null; set => throw null; } + public ServiceStack.Web.IHttpFile[] Files { get => throw null; set => throw null; } + public System.Collections.Specialized.NameValueCollection FormData { get => throw null; set => throw null; } + public ServiceStack.IO.IVirtualDirectory GetDirectory() => throw null; + public ServiceStack.IO.IVirtualFile GetFile() => throw null; + public string GetRawBody() => throw null; + public System.Threading.Tasks.Task GetRawBodyAsync() => throw null; + public object GetService(System.Type serviceType) => throw null; + public bool HasExplicitResponseContentType { get => throw null; set => throw null; } + public System.Collections.Specialized.NameValueCollection Headers { get => throw null; set => throw null; } + public string HttpMethod { get => throw null; set => throw null; } + public ServiceStack.Web.IHttpResponse HttpResponse { get => throw null; set => throw null; } + public System.IO.Stream InputStream { get => throw null; set => throw null; } + public bool IsDirectory { get => throw null; } + public bool IsFile { get => throw null; } + public bool IsLocal { get => throw null; set => throw null; } + public bool IsSecureConnection { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary Items { get => throw null; set => throw null; } + public MockHttpRequest(string operationName, string httpMethod, string contentType, string pathInfo, System.Collections.Specialized.NameValueCollection queryString, System.IO.Stream inputStream, System.Collections.Specialized.NameValueCollection formData) => throw null; + public MockHttpRequest() => throw null; + public string OperationName { get => throw null; set => throw null; } + public string OriginalPathInfo { get => throw null; } + public object OriginalRequest { get => throw null; } + public string PathInfo { get => throw null; set => throw null; } + public System.Collections.Specialized.NameValueCollection QueryString { get => throw null; set => throw null; } + public string RawUrl { get => throw null; set => throw null; } + public ServiceStack.AuthUserSession ReloadSession() => throw null; + public string RemoteIp { get => throw null; } + public ServiceStack.AuthUserSession RemoveSession() => throw null; + public ServiceStack.RequestAttributes RequestAttributes { get => throw null; set => throw null; } + public ServiceStack.Web.IRequestPreferences RequestPreferences { get => throw null; } + public ServiceStack.Configuration.IResolver Resolver { get => throw null; set => throw null; } + public ServiceStack.Web.IResponse Response { get => throw null; } + public string ResponseContentType { get => throw null; set => throw null; } + public Microsoft.Extensions.DependencyInjection.IServiceScope ServiceScope { get => throw null; set => throw null; } + public T TryResolve() => throw null; + public System.Uri UrlReferrer { get => throw null; } + public bool UseBufferedStream { get => throw null; set => throw null; } + public string UserAgent { get => throw null; set => throw null; } + public string UserHostAddress { get => throw null; set => throw null; } + public string Verb { get => throw null; } + public string XForwardedFor { get => throw null; set => throw null; } + public int? XForwardedPort { get => throw null; set => throw null; } + public string XForwardedProtocol { get => throw null; set => throw null; } + public string XRealIp { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.Testing.MockHttpResponse` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class MockHttpResponse : ServiceStack.Web.IResponse, ServiceStack.Web.IHttpResponse, ServiceStack.Web.IHasHeaders + { + public void AddHeader(string name, string value) => throw null; + public void ClearCookies() => throw null; + public void Close() => throw null; + public System.Threading.Tasks.Task CloseAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public string ContentType { get => throw null; set => throw null; } + public ServiceStack.Web.ICookies Cookies { get => throw null; set => throw null; } + public object Dto { get => throw null; set => throw null; } + public void End() => throw null; + public void Flush() => throw null; + public System.Threading.Tasks.Task FlushAsync(System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) => throw null; + public string GetHeader(string name) => throw null; + public bool HasStarted { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary Headers { get => throw null; } + public bool IsClosed { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary Items { get => throw null; } + public bool KeepAlive { get => throw null; set => throw null; } + public MockHttpResponse(ServiceStack.Web.IRequest request = default(ServiceStack.Web.IRequest)) => throw null; + public object OriginalResponse { get => throw null; set => throw null; } + public System.IO.Stream OutputStream { get => throw null; } + public System.Byte[] ReadAsBytes() => throw null; + public string ReadAsString() => throw null; + public void Redirect(string url) => throw null; + public void RemoveHeader(string name) => throw null; + public ServiceStack.Web.IRequest Request { get => throw null; set => throw null; } + public void SetContentLength(System.Int64 contentLength) => throw null; + public void SetCookie(System.Net.Cookie cookie) => throw null; + public int StatusCode { get => throw null; set => throw null; } + public string StatusDescription { get => throw null; set => throw null; } + public System.Text.StringBuilder TextWritten { get => throw null; set => throw null; } + public bool UseBufferedStream { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.Testing.MockRestGateway` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class MockRestGateway : ServiceStack.IRestGateway + { + public T Delete(ServiceStack.IReturn request) => throw null; + public T Get(ServiceStack.IReturn request) => throw null; + public MockRestGateway() => throw null; + public T Post(ServiceStack.IReturn request) => throw null; + public T Put(ServiceStack.IReturn request) => throw null; + public ServiceStack.Testing.RestGatewayDelegate ResultsFilter { get => throw null; set => throw null; } + public T Send(ServiceStack.IReturn request) => throw null; + } + + // Generated from `ServiceStack.Testing.RestGatewayDelegate` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public delegate object RestGatewayDelegate(string httpVerb, System.Type responseType, object requestDto); + + } + namespace Validation + { + // Generated from `ServiceStack.Validation.ExecOnceOnly` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ExecOnceOnly : System.IDisposable + { + public void Commit() => throw null; + public void Dispose() => throw null; + public ExecOnceOnly(ServiceStack.Redis.IRedisClientsManager redisManager, string hashKey, string correlationId) => throw null; + public ExecOnceOnly(ServiceStack.Redis.IRedisClientsManager redisManager, System.Type forType, string correlationId) => throw null; + public ExecOnceOnly(ServiceStack.Redis.IRedisClientsManager redisManager, System.Type forType, System.Guid? correlationId) => throw null; + public bool Executed { get => throw null; set => throw null; } + public void Rollback() => throw null; + } + + // Generated from `ServiceStack.Validation.GetValidationRulesService` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class GetValidationRulesService : ServiceStack.Service + { + public System.Threading.Tasks.Task Any(ServiceStack.GetValidationRules request) => throw null; + public GetValidationRulesService() => throw null; + public ServiceStack.IValidationSource ValidationSource { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.Validation.ModifyValidationRulesService` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ModifyValidationRulesService : ServiceStack.Service + { + public System.Threading.Tasks.Task Any(ServiceStack.ModifyValidationRules request) => throw null; + public ModifyValidationRulesService() => throw null; + public ServiceStack.IValidationSource ValidationSource { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.Validation.MultiRuleSetValidatorSelector` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class MultiRuleSetValidatorSelector : ServiceStack.FluentValidation.Internal.IValidatorSelector + { + public bool CanExecute(ServiceStack.FluentValidation.IValidationRule rule, string propertyPath, ServiceStack.FluentValidation.IValidationContext context) => throw null; + public MultiRuleSetValidatorSelector(params string[] rulesetsToExecute) => throw null; + } + + // Generated from `ServiceStack.Validation.ValidationExtensions` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class ValidationExtensions + { + public static bool HasAsyncValidators(this ServiceStack.FluentValidation.IValidator validator, ServiceStack.FluentValidation.IValidationContext context, string ruleSet = default(string)) => throw null; + public static void Init(System.Reflection.Assembly[] assemblies) => throw null; + public static void RegisterValidator(this Funq.Container container, System.Type validator, Funq.ReuseScope scope = default(Funq.ReuseScope)) => throw null; + public static void RegisterValidators(this Funq.Container container, params System.Reflection.Assembly[] assemblies) => throw null; + public static void RegisterValidators(this Funq.Container container, Funq.ReuseScope scope, params System.Reflection.Assembly[] assemblies) => throw null; + public static System.Collections.Generic.HashSet RegisteredDtoValidators { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.Validation.ValidationFeature` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ValidationFeature : ServiceStack.Model.IHasStringId, ServiceStack.Model.IHasId, ServiceStack.IPlugin, ServiceStack.IAfterInitAppHost + { + public string AccessRole { get => throw null; set => throw null; } + public void AfterInit(ServiceStack.IAppHost appHost) => throw null; + public System.Collections.Generic.Dictionary ConditionErrorCodes { get => throw null; } + public bool EnableDeclarativeValidation { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary ErrorCodeMessages { get => throw null; } + public System.Func ErrorResponseFilter { get => throw null; set => throw null; } + public virtual string GetRequestErrorBody(object request) => throw null; + public string Id { get => throw null; set => throw null; } + public bool ImplicitlyValidateChildProperties { get => throw null; set => throw null; } + public void Register(ServiceStack.IAppHost appHost) => throw null; + public bool ScanAppHostAssemblies { get => throw null; set => throw null; } + public System.Collections.Generic.Dictionary ServiceRoutes { get => throw null; set => throw null; } + public bool TreatInfoAndWarningsAsErrors { get => throw null; set => throw null; } + public ValidationFeature() => throw null; + public ServiceStack.IValidationSource ValidationSource { get => throw null; set => throw null; } + } + + // Generated from `ServiceStack.Validation.ValidationFilters` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class ValidationFilters + { + public static System.Threading.Tasks.Task RequestFilterAsync(ServiceStack.Web.IRequest req, ServiceStack.Web.IResponse res, object requestDto) => throw null; + public static System.Threading.Tasks.Task RequestFilterAsyncIgnoreWarningsInfo(ServiceStack.Web.IRequest req, ServiceStack.Web.IResponse res, object requestDto) => throw null; + public static System.Threading.Tasks.Task ResponseFilterAsync(ServiceStack.Web.IRequest req, ServiceStack.Web.IResponse res, object requestDto) => throw null; + public static ServiceStack.FluentValidation.Results.ValidationResult Validate(this ServiceStack.FluentValidation.IValidator validator, ServiceStack.Web.IRequest req, object requestDto) => throw null; + public static System.Threading.Tasks.Task ValidateAsync(this ServiceStack.FluentValidation.IValidator validator, ServiceStack.Web.IRequest req, object requestDto) => throw null; + } + + // Generated from `ServiceStack.Validation.ValidatorCache` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class ValidatorCache + { + public static ServiceStack.FluentValidation.IValidator GetValidator(ServiceStack.Web.IRequest httpReq, System.Type type) => throw null; + } + + // Generated from `ServiceStack.Validation.ValidatorCache<>` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public class ValidatorCache + { + public static ServiceStack.FluentValidation.IValidator GetValidator(ServiceStack.Web.IRequest httpReq) => throw null; + public ValidatorCache() => throw null; + } + + } +} +namespace System +{ + namespace Runtime + { + namespace CompilerServices + { + /* Duplicate type 'IsReadOnlyAttribute' is not stubbed in this assembly 'ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null'. */ + + } + } + namespace Threading + { + // Generated from `System.Threading.ThreadExtensions` in `ServiceStack, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null` + public static class ThreadExtensions + { + public static void Abort(this System.Threading.Thread thread) => throw null; + public static void Interrupt(this System.Threading.Thread thread) => throw null; + public static bool Join(this System.Threading.Thread thread, System.TimeSpan timeSpan) => throw null; + } + + } +} diff --git a/csharp/ql/test/resources/stubs/ServiceStack/5.11.0/ServiceStack.csproj b/csharp/ql/test/resources/stubs/ServiceStack/5.11.0/ServiceStack.csproj new file mode 100644 index 00000000000..28e9013b823 --- /dev/null +++ b/csharp/ql/test/resources/stubs/ServiceStack/5.11.0/ServiceStack.csproj @@ -0,0 +1,18 @@ + + + net5.0 + true + bin\ + false + + + + + + + + + + + + diff --git a/csharp/ql/test/resources/stubs/System.Drawing.Common/4.7.0/System.Drawing.Common.cs b/csharp/ql/test/resources/stubs/System.Drawing.Common/4.7.0/System.Drawing.Common.cs new file mode 100644 index 00000000000..ab0989ce694 --- /dev/null +++ b/csharp/ql/test/resources/stubs/System.Drawing.Common/4.7.0/System.Drawing.Common.cs @@ -0,0 +1,3168 @@ +// This file contains auto-generated code. + +namespace System +{ + namespace Drawing + { + // Generated from `System.Drawing.Bitmap` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public class Bitmap : System.Drawing.Image + { + public Bitmap(string filename, bool useIcm) => throw null; + public Bitmap(string filename) => throw null; + public Bitmap(int width, int height, int stride, System.Drawing.Imaging.PixelFormat format, System.IntPtr scan0) => throw null; + public Bitmap(int width, int height, System.Drawing.Imaging.PixelFormat format) => throw null; + public Bitmap(int width, int height, System.Drawing.Graphics g) => throw null; + public Bitmap(int width, int height) => throw null; + public Bitmap(System.Type type, string resource) => throw null; + public Bitmap(System.IO.Stream stream, bool useIcm) => throw null; + public Bitmap(System.IO.Stream stream) => throw null; + public Bitmap(System.Drawing.Image original, int width, int height) => throw null; + public Bitmap(System.Drawing.Image original, System.Drawing.Size newSize) => throw null; + public Bitmap(System.Drawing.Image original) => throw null; + public System.Drawing.Bitmap Clone(System.Drawing.RectangleF rect, System.Drawing.Imaging.PixelFormat format) => throw null; + public System.Drawing.Bitmap Clone(System.Drawing.Rectangle rect, System.Drawing.Imaging.PixelFormat format) => throw null; + public static System.Drawing.Bitmap FromHicon(System.IntPtr hicon) => throw null; + public static System.Drawing.Bitmap FromResource(System.IntPtr hinstance, string bitmapName) => throw null; + public System.IntPtr GetHbitmap(System.Drawing.Color background) => throw null; + public System.IntPtr GetHbitmap() => throw null; + public System.IntPtr GetHicon() => throw null; + public System.Drawing.Color GetPixel(int x, int y) => throw null; + public System.Drawing.Imaging.BitmapData LockBits(System.Drawing.Rectangle rect, System.Drawing.Imaging.ImageLockMode flags, System.Drawing.Imaging.PixelFormat format, System.Drawing.Imaging.BitmapData bitmapData) => throw null; + public System.Drawing.Imaging.BitmapData LockBits(System.Drawing.Rectangle rect, System.Drawing.Imaging.ImageLockMode flags, System.Drawing.Imaging.PixelFormat format) => throw null; + public void MakeTransparent(System.Drawing.Color transparentColor) => throw null; + public void MakeTransparent() => throw null; + public void SetPixel(int x, int y, System.Drawing.Color color) => throw null; + public void SetResolution(float xDpi, float yDpi) => throw null; + public void UnlockBits(System.Drawing.Imaging.BitmapData bitmapdata) => throw null; + } + + // Generated from `System.Drawing.BitmapSuffixInSameAssemblyAttribute` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public class BitmapSuffixInSameAssemblyAttribute : System.Attribute + { + public BitmapSuffixInSameAssemblyAttribute() => throw null; + } + + // Generated from `System.Drawing.BitmapSuffixInSatelliteAssemblyAttribute` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public class BitmapSuffixInSatelliteAssemblyAttribute : System.Attribute + { + public BitmapSuffixInSatelliteAssemblyAttribute() => throw null; + } + + // Generated from `System.Drawing.Brush` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public abstract class Brush : System.MarshalByRefObject, System.IDisposable, System.ICloneable + { + protected Brush() => throw null; + public abstract object Clone(); + public void Dispose() => throw null; + protected virtual void Dispose(bool disposing) => throw null; + protected internal void SetNativeBrush(System.IntPtr brush) => throw null; + // ERR: Stub generator didn't handle member: ~Brush + } + + // Generated from `System.Drawing.Brushes` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public static class Brushes + { + public static System.Drawing.Brush AliceBlue { get => throw null; } + public static System.Drawing.Brush AntiqueWhite { get => throw null; } + public static System.Drawing.Brush Aqua { get => throw null; } + public static System.Drawing.Brush Aquamarine { get => throw null; } + public static System.Drawing.Brush Azure { get => throw null; } + public static System.Drawing.Brush Beige { get => throw null; } + public static System.Drawing.Brush Bisque { get => throw null; } + public static System.Drawing.Brush Black { get => throw null; } + public static System.Drawing.Brush BlanchedAlmond { get => throw null; } + public static System.Drawing.Brush Blue { get => throw null; } + public static System.Drawing.Brush BlueViolet { get => throw null; } + public static System.Drawing.Brush Brown { get => throw null; } + public static System.Drawing.Brush BurlyWood { get => throw null; } + public static System.Drawing.Brush CadetBlue { get => throw null; } + public static System.Drawing.Brush Chartreuse { get => throw null; } + public static System.Drawing.Brush Chocolate { get => throw null; } + public static System.Drawing.Brush Coral { get => throw null; } + public static System.Drawing.Brush CornflowerBlue { get => throw null; } + public static System.Drawing.Brush Cornsilk { get => throw null; } + public static System.Drawing.Brush Crimson { get => throw null; } + public static System.Drawing.Brush Cyan { get => throw null; } + public static System.Drawing.Brush DarkBlue { get => throw null; } + public static System.Drawing.Brush DarkCyan { get => throw null; } + public static System.Drawing.Brush DarkGoldenrod { get => throw null; } + public static System.Drawing.Brush DarkGray { get => throw null; } + public static System.Drawing.Brush DarkGreen { get => throw null; } + public static System.Drawing.Brush DarkKhaki { get => throw null; } + public static System.Drawing.Brush DarkMagenta { get => throw null; } + public static System.Drawing.Brush DarkOliveGreen { get => throw null; } + public static System.Drawing.Brush DarkOrange { get => throw null; } + public static System.Drawing.Brush DarkOrchid { get => throw null; } + public static System.Drawing.Brush DarkRed { get => throw null; } + public static System.Drawing.Brush DarkSalmon { get => throw null; } + public static System.Drawing.Brush DarkSeaGreen { get => throw null; } + public static System.Drawing.Brush DarkSlateBlue { get => throw null; } + public static System.Drawing.Brush DarkSlateGray { get => throw null; } + public static System.Drawing.Brush DarkTurquoise { get => throw null; } + public static System.Drawing.Brush DarkViolet { get => throw null; } + public static System.Drawing.Brush DeepPink { get => throw null; } + public static System.Drawing.Brush DeepSkyBlue { get => throw null; } + public static System.Drawing.Brush DimGray { get => throw null; } + public static System.Drawing.Brush DodgerBlue { get => throw null; } + public static System.Drawing.Brush Firebrick { get => throw null; } + public static System.Drawing.Brush FloralWhite { get => throw null; } + public static System.Drawing.Brush ForestGreen { get => throw null; } + public static System.Drawing.Brush Fuchsia { get => throw null; } + public static System.Drawing.Brush Gainsboro { get => throw null; } + public static System.Drawing.Brush GhostWhite { get => throw null; } + public static System.Drawing.Brush Gold { get => throw null; } + public static System.Drawing.Brush Goldenrod { get => throw null; } + public static System.Drawing.Brush Gray { get => throw null; } + public static System.Drawing.Brush Green { get => throw null; } + public static System.Drawing.Brush GreenYellow { get => throw null; } + public static System.Drawing.Brush Honeydew { get => throw null; } + public static System.Drawing.Brush HotPink { get => throw null; } + public static System.Drawing.Brush IndianRed { get => throw null; } + public static System.Drawing.Brush Indigo { get => throw null; } + public static System.Drawing.Brush Ivory { get => throw null; } + public static System.Drawing.Brush Khaki { get => throw null; } + public static System.Drawing.Brush Lavender { get => throw null; } + public static System.Drawing.Brush LavenderBlush { get => throw null; } + public static System.Drawing.Brush LawnGreen { get => throw null; } + public static System.Drawing.Brush LemonChiffon { get => throw null; } + public static System.Drawing.Brush LightBlue { get => throw null; } + public static System.Drawing.Brush LightCoral { get => throw null; } + public static System.Drawing.Brush LightCyan { get => throw null; } + public static System.Drawing.Brush LightGoldenrodYellow { get => throw null; } + public static System.Drawing.Brush LightGray { get => throw null; } + public static System.Drawing.Brush LightGreen { get => throw null; } + public static System.Drawing.Brush LightPink { get => throw null; } + public static System.Drawing.Brush LightSalmon { get => throw null; } + public static System.Drawing.Brush LightSeaGreen { get => throw null; } + public static System.Drawing.Brush LightSkyBlue { get => throw null; } + public static System.Drawing.Brush LightSlateGray { get => throw null; } + public static System.Drawing.Brush LightSteelBlue { get => throw null; } + public static System.Drawing.Brush LightYellow { get => throw null; } + public static System.Drawing.Brush Lime { get => throw null; } + public static System.Drawing.Brush LimeGreen { get => throw null; } + public static System.Drawing.Brush Linen { get => throw null; } + public static System.Drawing.Brush Magenta { get => throw null; } + public static System.Drawing.Brush Maroon { get => throw null; } + public static System.Drawing.Brush MediumAquamarine { get => throw null; } + public static System.Drawing.Brush MediumBlue { get => throw null; } + public static System.Drawing.Brush MediumOrchid { get => throw null; } + public static System.Drawing.Brush MediumPurple { get => throw null; } + public static System.Drawing.Brush MediumSeaGreen { get => throw null; } + public static System.Drawing.Brush MediumSlateBlue { get => throw null; } + public static System.Drawing.Brush MediumSpringGreen { get => throw null; } + public static System.Drawing.Brush MediumTurquoise { get => throw null; } + public static System.Drawing.Brush MediumVioletRed { get => throw null; } + public static System.Drawing.Brush MidnightBlue { get => throw null; } + public static System.Drawing.Brush MintCream { get => throw null; } + public static System.Drawing.Brush MistyRose { get => throw null; } + public static System.Drawing.Brush Moccasin { get => throw null; } + public static System.Drawing.Brush NavajoWhite { get => throw null; } + public static System.Drawing.Brush Navy { get => throw null; } + public static System.Drawing.Brush OldLace { get => throw null; } + public static System.Drawing.Brush Olive { get => throw null; } + public static System.Drawing.Brush OliveDrab { get => throw null; } + public static System.Drawing.Brush Orange { get => throw null; } + public static System.Drawing.Brush OrangeRed { get => throw null; } + public static System.Drawing.Brush Orchid { get => throw null; } + public static System.Drawing.Brush PaleGoldenrod { get => throw null; } + public static System.Drawing.Brush PaleGreen { get => throw null; } + public static System.Drawing.Brush PaleTurquoise { get => throw null; } + public static System.Drawing.Brush PaleVioletRed { get => throw null; } + public static System.Drawing.Brush PapayaWhip { get => throw null; } + public static System.Drawing.Brush PeachPuff { get => throw null; } + public static System.Drawing.Brush Peru { get => throw null; } + public static System.Drawing.Brush Pink { get => throw null; } + public static System.Drawing.Brush Plum { get => throw null; } + public static System.Drawing.Brush PowderBlue { get => throw null; } + public static System.Drawing.Brush Purple { get => throw null; } + public static System.Drawing.Brush Red { get => throw null; } + public static System.Drawing.Brush RosyBrown { get => throw null; } + public static System.Drawing.Brush RoyalBlue { get => throw null; } + public static System.Drawing.Brush SaddleBrown { get => throw null; } + public static System.Drawing.Brush Salmon { get => throw null; } + public static System.Drawing.Brush SandyBrown { get => throw null; } + public static System.Drawing.Brush SeaGreen { get => throw null; } + public static System.Drawing.Brush SeaShell { get => throw null; } + public static System.Drawing.Brush Sienna { get => throw null; } + public static System.Drawing.Brush Silver { get => throw null; } + public static System.Drawing.Brush SkyBlue { get => throw null; } + public static System.Drawing.Brush SlateBlue { get => throw null; } + public static System.Drawing.Brush SlateGray { get => throw null; } + public static System.Drawing.Brush Snow { get => throw null; } + public static System.Drawing.Brush SpringGreen { get => throw null; } + public static System.Drawing.Brush SteelBlue { get => throw null; } + public static System.Drawing.Brush Tan { get => throw null; } + public static System.Drawing.Brush Teal { get => throw null; } + public static System.Drawing.Brush Thistle { get => throw null; } + public static System.Drawing.Brush Tomato { get => throw null; } + public static System.Drawing.Brush Transparent { get => throw null; } + public static System.Drawing.Brush Turquoise { get => throw null; } + public static System.Drawing.Brush Violet { get => throw null; } + public static System.Drawing.Brush Wheat { get => throw null; } + public static System.Drawing.Brush White { get => throw null; } + public static System.Drawing.Brush WhiteSmoke { get => throw null; } + public static System.Drawing.Brush Yellow { get => throw null; } + public static System.Drawing.Brush YellowGreen { get => throw null; } + } + + // Generated from `System.Drawing.BufferedGraphics` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public class BufferedGraphics : System.IDisposable + { + public void Dispose() => throw null; + public System.Drawing.Graphics Graphics { get => throw null; } + public void Render(System.IntPtr targetDC) => throw null; + public void Render(System.Drawing.Graphics target) => throw null; + public void Render() => throw null; + // ERR: Stub generator didn't handle member: ~BufferedGraphics + } + + // Generated from `System.Drawing.BufferedGraphicsContext` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public class BufferedGraphicsContext : System.IDisposable + { + public System.Drawing.BufferedGraphics Allocate(System.IntPtr targetDC, System.Drawing.Rectangle targetRectangle) => throw null; + public System.Drawing.BufferedGraphics Allocate(System.Drawing.Graphics targetGraphics, System.Drawing.Rectangle targetRectangle) => throw null; + public BufferedGraphicsContext() => throw null; + public void Dispose() => throw null; + public void Invalidate() => throw null; + public System.Drawing.Size MaximumBuffer { get => throw null; set => throw null; } + // ERR: Stub generator didn't handle member: ~BufferedGraphicsContext + } + + // Generated from `System.Drawing.BufferedGraphicsManager` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public static class BufferedGraphicsManager + { + public static System.Drawing.BufferedGraphicsContext Current { get => throw null; } + } + + // Generated from `System.Drawing.CharacterRange` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public struct CharacterRange + { + public static bool operator !=(System.Drawing.CharacterRange cr1, System.Drawing.CharacterRange cr2) => throw null; + public static bool operator ==(System.Drawing.CharacterRange cr1, System.Drawing.CharacterRange cr2) => throw null; + public CharacterRange(int First, int Length) => throw null; + // Stub generator skipped constructor + public override bool Equals(object obj) => throw null; + public int First { get => throw null; set => throw null; } + public override int GetHashCode() => throw null; + public int Length { get => throw null; set => throw null; } + } + + // Generated from `System.Drawing.ContentAlignment` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public enum ContentAlignment + { + BottomCenter, + BottomLeft, + BottomRight, + MiddleCenter, + MiddleLeft, + MiddleRight, + TopCenter, + TopLeft, + TopRight, + } + + // Generated from `System.Drawing.CopyPixelOperation` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public enum CopyPixelOperation + { + Blackness, + CaptureBlt, + DestinationInvert, + MergeCopy, + MergePaint, + NoMirrorBitmap, + NotSourceCopy, + NotSourceErase, + PatCopy, + PatInvert, + PatPaint, + SourceAnd, + SourceCopy, + SourceErase, + SourceInvert, + SourcePaint, + Whiteness, + } + + // Generated from `System.Drawing.Font` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public class Font : System.MarshalByRefObject, System.Runtime.Serialization.ISerializable, System.IDisposable, System.ICloneable + { + public bool Bold { get => throw null; } + public object Clone() => throw null; + public void Dispose() => throw null; + public override bool Equals(object obj) => throw null; + public Font(string familyName, float emSize, System.Drawing.GraphicsUnit unit) => throw null; + public Font(string familyName, float emSize, System.Drawing.FontStyle style, System.Drawing.GraphicsUnit unit, System.Byte gdiCharSet, bool gdiVerticalFont) => throw null; + public Font(string familyName, float emSize, System.Drawing.FontStyle style, System.Drawing.GraphicsUnit unit, System.Byte gdiCharSet) => throw null; + public Font(string familyName, float emSize, System.Drawing.FontStyle style, System.Drawing.GraphicsUnit unit) => throw null; + public Font(string familyName, float emSize, System.Drawing.FontStyle style) => throw null; + public Font(string familyName, float emSize) => throw null; + public Font(System.Drawing.FontFamily family, float emSize, System.Drawing.GraphicsUnit unit) => throw null; + public Font(System.Drawing.FontFamily family, float emSize, System.Drawing.FontStyle style, System.Drawing.GraphicsUnit unit, System.Byte gdiCharSet, bool gdiVerticalFont) => throw null; + public Font(System.Drawing.FontFamily family, float emSize, System.Drawing.FontStyle style, System.Drawing.GraphicsUnit unit, System.Byte gdiCharSet) => throw null; + public Font(System.Drawing.FontFamily family, float emSize, System.Drawing.FontStyle style, System.Drawing.GraphicsUnit unit) => throw null; + public Font(System.Drawing.FontFamily family, float emSize, System.Drawing.FontStyle style) => throw null; + public Font(System.Drawing.FontFamily family, float emSize) => throw null; + public Font(System.Drawing.Font prototype, System.Drawing.FontStyle newStyle) => throw null; + public System.Drawing.FontFamily FontFamily { get => throw null; } + public static System.Drawing.Font FromHdc(System.IntPtr hdc) => throw null; + public static System.Drawing.Font FromHfont(System.IntPtr hfont) => throw null; + public static System.Drawing.Font FromLogFont(object lf, System.IntPtr hdc) => throw null; + public static System.Drawing.Font FromLogFont(object lf) => throw null; + public System.Byte GdiCharSet { get => throw null; } + public bool GdiVerticalFont { get => throw null; } + public override int GetHashCode() => throw null; + public float GetHeight(float dpi) => throw null; + public float GetHeight(System.Drawing.Graphics graphics) => throw null; + public float GetHeight() => throw null; + void System.Runtime.Serialization.ISerializable.GetObjectData(System.Runtime.Serialization.SerializationInfo si, System.Runtime.Serialization.StreamingContext context) => throw null; + public int Height { get => throw null; } + public bool IsSystemFont { get => throw null; } + public bool Italic { get => throw null; } + public string Name { get => throw null; } + public string OriginalFontName { get => throw null; } + public float Size { get => throw null; } + public float SizeInPoints { get => throw null; } + public bool Strikeout { get => throw null; } + public System.Drawing.FontStyle Style { get => throw null; } + public string SystemFontName { get => throw null; } + public System.IntPtr ToHfont() => throw null; + public void ToLogFont(object logFont, System.Drawing.Graphics graphics) => throw null; + public void ToLogFont(object logFont) => throw null; + public override string ToString() => throw null; + public bool Underline { get => throw null; } + public System.Drawing.GraphicsUnit Unit { get => throw null; } + // ERR: Stub generator didn't handle member: ~Font + } + + // Generated from `System.Drawing.FontFamily` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public class FontFamily : System.MarshalByRefObject, System.IDisposable + { + public void Dispose() => throw null; + public override bool Equals(object obj) => throw null; + public static System.Drawing.FontFamily[] Families { get => throw null; } + public FontFamily(string name, System.Drawing.Text.FontCollection fontCollection) => throw null; + public FontFamily(string name) => throw null; + public FontFamily(System.Drawing.Text.GenericFontFamilies genericFamily) => throw null; + public static System.Drawing.FontFamily GenericMonospace { get => throw null; } + public static System.Drawing.FontFamily GenericSansSerif { get => throw null; } + public static System.Drawing.FontFamily GenericSerif { get => throw null; } + public int GetCellAscent(System.Drawing.FontStyle style) => throw null; + public int GetCellDescent(System.Drawing.FontStyle style) => throw null; + public int GetEmHeight(System.Drawing.FontStyle style) => throw null; + public static System.Drawing.FontFamily[] GetFamilies(System.Drawing.Graphics graphics) => throw null; + public override int GetHashCode() => throw null; + public int GetLineSpacing(System.Drawing.FontStyle style) => throw null; + public string GetName(int language) => throw null; + public bool IsStyleAvailable(System.Drawing.FontStyle style) => throw null; + public string Name { get => throw null; } + public override string ToString() => throw null; + // ERR: Stub generator didn't handle member: ~FontFamily + } + + // Generated from `System.Drawing.FontStyle` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + [System.Flags] + public enum FontStyle + { + Bold, + Italic, + Regular, + Strikeout, + Underline, + } + + // Generated from `System.Drawing.Graphics` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public class Graphics : System.MarshalByRefObject, System.IDisposable, System.Drawing.IDeviceContext + { + public void AddMetafileComment(System.Byte[] data) => throw null; + public System.Drawing.Drawing2D.GraphicsContainer BeginContainer(System.Drawing.RectangleF dstrect, System.Drawing.RectangleF srcrect, System.Drawing.GraphicsUnit unit) => throw null; + public System.Drawing.Drawing2D.GraphicsContainer BeginContainer(System.Drawing.Rectangle dstrect, System.Drawing.Rectangle srcrect, System.Drawing.GraphicsUnit unit) => throw null; + public System.Drawing.Drawing2D.GraphicsContainer BeginContainer() => throw null; + public void Clear(System.Drawing.Color color) => throw null; + public System.Drawing.Region Clip { get => throw null; set => throw null; } + public System.Drawing.RectangleF ClipBounds { get => throw null; } + public System.Drawing.Drawing2D.CompositingMode CompositingMode { get => throw null; set => throw null; } + public System.Drawing.Drawing2D.CompositingQuality CompositingQuality { get => throw null; set => throw null; } + public void CopyFromScreen(int sourceX, int sourceY, int destinationX, int destinationY, System.Drawing.Size blockRegionSize, System.Drawing.CopyPixelOperation copyPixelOperation) => throw null; + public void CopyFromScreen(int sourceX, int sourceY, int destinationX, int destinationY, System.Drawing.Size blockRegionSize) => throw null; + public void CopyFromScreen(System.Drawing.Point upperLeftSource, System.Drawing.Point upperLeftDestination, System.Drawing.Size blockRegionSize, System.Drawing.CopyPixelOperation copyPixelOperation) => throw null; + public void CopyFromScreen(System.Drawing.Point upperLeftSource, System.Drawing.Point upperLeftDestination, System.Drawing.Size blockRegionSize) => throw null; + public void Dispose() => throw null; + public float DpiX { get => throw null; } + public float DpiY { get => throw null; } + public void DrawArc(System.Drawing.Pen pen, int x, int y, int width, int height, int startAngle, int sweepAngle) => throw null; + public void DrawArc(System.Drawing.Pen pen, float x, float y, float width, float height, float startAngle, float sweepAngle) => throw null; + public void DrawArc(System.Drawing.Pen pen, System.Drawing.RectangleF rect, float startAngle, float sweepAngle) => throw null; + public void DrawArc(System.Drawing.Pen pen, System.Drawing.Rectangle rect, float startAngle, float sweepAngle) => throw null; + public void DrawBezier(System.Drawing.Pen pen, float x1, float y1, float x2, float y2, float x3, float y3, float x4, float y4) => throw null; + public void DrawBezier(System.Drawing.Pen pen, System.Drawing.PointF pt1, System.Drawing.PointF pt2, System.Drawing.PointF pt3, System.Drawing.PointF pt4) => throw null; + public void DrawBezier(System.Drawing.Pen pen, System.Drawing.Point pt1, System.Drawing.Point pt2, System.Drawing.Point pt3, System.Drawing.Point pt4) => throw null; + public void DrawBeziers(System.Drawing.Pen pen, System.Drawing.Point[] points) => throw null; + public void DrawBeziers(System.Drawing.Pen pen, System.Drawing.PointF[] points) => throw null; + public void DrawClosedCurve(System.Drawing.Pen pen, System.Drawing.Point[] points, float tension, System.Drawing.Drawing2D.FillMode fillmode) => throw null; + public void DrawClosedCurve(System.Drawing.Pen pen, System.Drawing.Point[] points) => throw null; + public void DrawClosedCurve(System.Drawing.Pen pen, System.Drawing.PointF[] points, float tension, System.Drawing.Drawing2D.FillMode fillmode) => throw null; + public void DrawClosedCurve(System.Drawing.Pen pen, System.Drawing.PointF[] points) => throw null; + public void DrawCurve(System.Drawing.Pen pen, System.Drawing.Point[] points, int offset, int numberOfSegments, float tension) => throw null; + public void DrawCurve(System.Drawing.Pen pen, System.Drawing.Point[] points, float tension) => throw null; + public void DrawCurve(System.Drawing.Pen pen, System.Drawing.Point[] points) => throw null; + public void DrawCurve(System.Drawing.Pen pen, System.Drawing.PointF[] points, int offset, int numberOfSegments, float tension) => throw null; + public void DrawCurve(System.Drawing.Pen pen, System.Drawing.PointF[] points, int offset, int numberOfSegments) => throw null; + public void DrawCurve(System.Drawing.Pen pen, System.Drawing.PointF[] points, float tension) => throw null; + public void DrawCurve(System.Drawing.Pen pen, System.Drawing.PointF[] points) => throw null; + public void DrawEllipse(System.Drawing.Pen pen, int x, int y, int width, int height) => throw null; + public void DrawEllipse(System.Drawing.Pen pen, float x, float y, float width, float height) => throw null; + public void DrawEllipse(System.Drawing.Pen pen, System.Drawing.RectangleF rect) => throw null; + public void DrawEllipse(System.Drawing.Pen pen, System.Drawing.Rectangle rect) => throw null; + public void DrawIcon(System.Drawing.Icon icon, int x, int y) => throw null; + public void DrawIcon(System.Drawing.Icon icon, System.Drawing.Rectangle targetRect) => throw null; + public void DrawIconUnstretched(System.Drawing.Icon icon, System.Drawing.Rectangle targetRect) => throw null; + public void DrawImage(System.Drawing.Image image, int x, int y, int width, int height) => throw null; + public void DrawImage(System.Drawing.Image image, int x, int y, System.Drawing.Rectangle srcRect, System.Drawing.GraphicsUnit srcUnit) => throw null; + public void DrawImage(System.Drawing.Image image, int x, int y) => throw null; + public void DrawImage(System.Drawing.Image image, float x, float y, float width, float height) => throw null; + public void DrawImage(System.Drawing.Image image, float x, float y, System.Drawing.RectangleF srcRect, System.Drawing.GraphicsUnit srcUnit) => throw null; + public void DrawImage(System.Drawing.Image image, float x, float y) => throw null; + public void DrawImage(System.Drawing.Image image, System.Drawing.RectangleF rect) => throw null; + public void DrawImage(System.Drawing.Image image, System.Drawing.RectangleF destRect, System.Drawing.RectangleF srcRect, System.Drawing.GraphicsUnit srcUnit) => throw null; + public void DrawImage(System.Drawing.Image image, System.Drawing.Rectangle rect) => throw null; + public void DrawImage(System.Drawing.Image image, System.Drawing.Rectangle destRect, int srcX, int srcY, int srcWidth, int srcHeight, System.Drawing.GraphicsUnit srcUnit, System.Drawing.Imaging.ImageAttributes imageAttrs, System.Drawing.Graphics.DrawImageAbort callback, System.IntPtr callbackData) => throw null; + public void DrawImage(System.Drawing.Image image, System.Drawing.Rectangle destRect, int srcX, int srcY, int srcWidth, int srcHeight, System.Drawing.GraphicsUnit srcUnit, System.Drawing.Imaging.ImageAttributes imageAttr, System.Drawing.Graphics.DrawImageAbort callback) => throw null; + public void DrawImage(System.Drawing.Image image, System.Drawing.Rectangle destRect, int srcX, int srcY, int srcWidth, int srcHeight, System.Drawing.GraphicsUnit srcUnit, System.Drawing.Imaging.ImageAttributes imageAttr) => throw null; + public void DrawImage(System.Drawing.Image image, System.Drawing.Rectangle destRect, int srcX, int srcY, int srcWidth, int srcHeight, System.Drawing.GraphicsUnit srcUnit) => throw null; + public void DrawImage(System.Drawing.Image image, System.Drawing.Rectangle destRect, float srcX, float srcY, float srcWidth, float srcHeight, System.Drawing.GraphicsUnit srcUnit, System.Drawing.Imaging.ImageAttributes imageAttrs, System.Drawing.Graphics.DrawImageAbort callback, System.IntPtr callbackData) => throw null; + public void DrawImage(System.Drawing.Image image, System.Drawing.Rectangle destRect, float srcX, float srcY, float srcWidth, float srcHeight, System.Drawing.GraphicsUnit srcUnit, System.Drawing.Imaging.ImageAttributes imageAttrs, System.Drawing.Graphics.DrawImageAbort callback) => throw null; + public void DrawImage(System.Drawing.Image image, System.Drawing.Rectangle destRect, float srcX, float srcY, float srcWidth, float srcHeight, System.Drawing.GraphicsUnit srcUnit, System.Drawing.Imaging.ImageAttributes imageAttrs) => throw null; + public void DrawImage(System.Drawing.Image image, System.Drawing.Rectangle destRect, float srcX, float srcY, float srcWidth, float srcHeight, System.Drawing.GraphicsUnit srcUnit) => throw null; + public void DrawImage(System.Drawing.Image image, System.Drawing.Rectangle destRect, System.Drawing.Rectangle srcRect, System.Drawing.GraphicsUnit srcUnit) => throw null; + public void DrawImage(System.Drawing.Image image, System.Drawing.Point[] destPoints, System.Drawing.Rectangle srcRect, System.Drawing.GraphicsUnit srcUnit, System.Drawing.Imaging.ImageAttributes imageAttr, System.Drawing.Graphics.DrawImageAbort callback, int callbackData) => throw null; + public void DrawImage(System.Drawing.Image image, System.Drawing.Point[] destPoints, System.Drawing.Rectangle srcRect, System.Drawing.GraphicsUnit srcUnit, System.Drawing.Imaging.ImageAttributes imageAttr, System.Drawing.Graphics.DrawImageAbort callback) => throw null; + public void DrawImage(System.Drawing.Image image, System.Drawing.Point[] destPoints, System.Drawing.Rectangle srcRect, System.Drawing.GraphicsUnit srcUnit, System.Drawing.Imaging.ImageAttributes imageAttr) => throw null; + public void DrawImage(System.Drawing.Image image, System.Drawing.Point[] destPoints, System.Drawing.Rectangle srcRect, System.Drawing.GraphicsUnit srcUnit) => throw null; + public void DrawImage(System.Drawing.Image image, System.Drawing.Point[] destPoints) => throw null; + public void DrawImage(System.Drawing.Image image, System.Drawing.PointF[] destPoints, System.Drawing.RectangleF srcRect, System.Drawing.GraphicsUnit srcUnit, System.Drawing.Imaging.ImageAttributes imageAttr, System.Drawing.Graphics.DrawImageAbort callback, int callbackData) => throw null; + public void DrawImage(System.Drawing.Image image, System.Drawing.PointF[] destPoints, System.Drawing.RectangleF srcRect, System.Drawing.GraphicsUnit srcUnit, System.Drawing.Imaging.ImageAttributes imageAttr, System.Drawing.Graphics.DrawImageAbort callback) => throw null; + public void DrawImage(System.Drawing.Image image, System.Drawing.PointF[] destPoints, System.Drawing.RectangleF srcRect, System.Drawing.GraphicsUnit srcUnit, System.Drawing.Imaging.ImageAttributes imageAttr) => throw null; + public void DrawImage(System.Drawing.Image image, System.Drawing.PointF[] destPoints, System.Drawing.RectangleF srcRect, System.Drawing.GraphicsUnit srcUnit) => throw null; + public void DrawImage(System.Drawing.Image image, System.Drawing.PointF[] destPoints) => throw null; + public void DrawImage(System.Drawing.Image image, System.Drawing.PointF point) => throw null; + public void DrawImage(System.Drawing.Image image, System.Drawing.Point point) => throw null; + // Generated from `System.Drawing.Graphics+DrawImageAbort` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public delegate bool DrawImageAbort(System.IntPtr callbackdata); + + + public void DrawImageUnscaled(System.Drawing.Image image, int x, int y, int width, int height) => throw null; + public void DrawImageUnscaled(System.Drawing.Image image, int x, int y) => throw null; + public void DrawImageUnscaled(System.Drawing.Image image, System.Drawing.Rectangle rect) => throw null; + public void DrawImageUnscaled(System.Drawing.Image image, System.Drawing.Point point) => throw null; + public void DrawImageUnscaledAndClipped(System.Drawing.Image image, System.Drawing.Rectangle rect) => throw null; + public void DrawLine(System.Drawing.Pen pen, int x1, int y1, int x2, int y2) => throw null; + public void DrawLine(System.Drawing.Pen pen, float x1, float y1, float x2, float y2) => throw null; + public void DrawLine(System.Drawing.Pen pen, System.Drawing.PointF pt1, System.Drawing.PointF pt2) => throw null; + public void DrawLine(System.Drawing.Pen pen, System.Drawing.Point pt1, System.Drawing.Point pt2) => throw null; + public void DrawLines(System.Drawing.Pen pen, System.Drawing.Point[] points) => throw null; + public void DrawLines(System.Drawing.Pen pen, System.Drawing.PointF[] points) => throw null; + public void DrawPath(System.Drawing.Pen pen, System.Drawing.Drawing2D.GraphicsPath path) => throw null; + public void DrawPie(System.Drawing.Pen pen, int x, int y, int width, int height, int startAngle, int sweepAngle) => throw null; + public void DrawPie(System.Drawing.Pen pen, float x, float y, float width, float height, float startAngle, float sweepAngle) => throw null; + public void DrawPie(System.Drawing.Pen pen, System.Drawing.RectangleF rect, float startAngle, float sweepAngle) => throw null; + public void DrawPie(System.Drawing.Pen pen, System.Drawing.Rectangle rect, float startAngle, float sweepAngle) => throw null; + public void DrawPolygon(System.Drawing.Pen pen, System.Drawing.Point[] points) => throw null; + public void DrawPolygon(System.Drawing.Pen pen, System.Drawing.PointF[] points) => throw null; + public void DrawRectangle(System.Drawing.Pen pen, int x, int y, int width, int height) => throw null; + public void DrawRectangle(System.Drawing.Pen pen, float x, float y, float width, float height) => throw null; + public void DrawRectangle(System.Drawing.Pen pen, System.Drawing.Rectangle rect) => throw null; + public void DrawRectangles(System.Drawing.Pen pen, System.Drawing.Rectangle[] rects) => throw null; + public void DrawRectangles(System.Drawing.Pen pen, System.Drawing.RectangleF[] rects) => throw null; + public void DrawString(string s, System.Drawing.Font font, System.Drawing.Brush brush, float x, float y, System.Drawing.StringFormat format) => throw null; + public void DrawString(string s, System.Drawing.Font font, System.Drawing.Brush brush, float x, float y) => throw null; + public void DrawString(string s, System.Drawing.Font font, System.Drawing.Brush brush, System.Drawing.RectangleF layoutRectangle, System.Drawing.StringFormat format) => throw null; + public void DrawString(string s, System.Drawing.Font font, System.Drawing.Brush brush, System.Drawing.RectangleF layoutRectangle) => throw null; + public void DrawString(string s, System.Drawing.Font font, System.Drawing.Brush brush, System.Drawing.PointF point, System.Drawing.StringFormat format) => throw null; + public void DrawString(string s, System.Drawing.Font font, System.Drawing.Brush brush, System.Drawing.PointF point) => throw null; + public void EndContainer(System.Drawing.Drawing2D.GraphicsContainer container) => throw null; + public void EnumerateMetafile(System.Drawing.Imaging.Metafile metafile, System.Drawing.RectangleF destRect, System.Drawing.RectangleF srcRect, System.Drawing.GraphicsUnit unit, System.Drawing.Graphics.EnumerateMetafileProc callback, System.IntPtr callbackData, System.Drawing.Imaging.ImageAttributes imageAttr) => throw null; + public void EnumerateMetafile(System.Drawing.Imaging.Metafile metafile, System.Drawing.RectangleF destRect, System.Drawing.RectangleF srcRect, System.Drawing.GraphicsUnit srcUnit, System.Drawing.Graphics.EnumerateMetafileProc callback, System.IntPtr callbackData) => throw null; + public void EnumerateMetafile(System.Drawing.Imaging.Metafile metafile, System.Drawing.RectangleF destRect, System.Drawing.RectangleF srcRect, System.Drawing.GraphicsUnit srcUnit, System.Drawing.Graphics.EnumerateMetafileProc callback) => throw null; + public void EnumerateMetafile(System.Drawing.Imaging.Metafile metafile, System.Drawing.RectangleF destRect, System.Drawing.Graphics.EnumerateMetafileProc callback, System.IntPtr callbackData, System.Drawing.Imaging.ImageAttributes imageAttr) => throw null; + public void EnumerateMetafile(System.Drawing.Imaging.Metafile metafile, System.Drawing.RectangleF destRect, System.Drawing.Graphics.EnumerateMetafileProc callback, System.IntPtr callbackData) => throw null; + public void EnumerateMetafile(System.Drawing.Imaging.Metafile metafile, System.Drawing.RectangleF destRect, System.Drawing.Graphics.EnumerateMetafileProc callback) => throw null; + public void EnumerateMetafile(System.Drawing.Imaging.Metafile metafile, System.Drawing.Rectangle destRect, System.Drawing.Rectangle srcRect, System.Drawing.GraphicsUnit unit, System.Drawing.Graphics.EnumerateMetafileProc callback, System.IntPtr callbackData, System.Drawing.Imaging.ImageAttributes imageAttr) => throw null; + public void EnumerateMetafile(System.Drawing.Imaging.Metafile metafile, System.Drawing.Rectangle destRect, System.Drawing.Rectangle srcRect, System.Drawing.GraphicsUnit srcUnit, System.Drawing.Graphics.EnumerateMetafileProc callback, System.IntPtr callbackData) => throw null; + public void EnumerateMetafile(System.Drawing.Imaging.Metafile metafile, System.Drawing.Rectangle destRect, System.Drawing.Rectangle srcRect, System.Drawing.GraphicsUnit srcUnit, System.Drawing.Graphics.EnumerateMetafileProc callback) => throw null; + public void EnumerateMetafile(System.Drawing.Imaging.Metafile metafile, System.Drawing.Rectangle destRect, System.Drawing.Graphics.EnumerateMetafileProc callback, System.IntPtr callbackData, System.Drawing.Imaging.ImageAttributes imageAttr) => throw null; + public void EnumerateMetafile(System.Drawing.Imaging.Metafile metafile, System.Drawing.Rectangle destRect, System.Drawing.Graphics.EnumerateMetafileProc callback, System.IntPtr callbackData) => throw null; + public void EnumerateMetafile(System.Drawing.Imaging.Metafile metafile, System.Drawing.Rectangle destRect, System.Drawing.Graphics.EnumerateMetafileProc callback) => throw null; + public void EnumerateMetafile(System.Drawing.Imaging.Metafile metafile, System.Drawing.Point[] destPoints, System.Drawing.Rectangle srcRect, System.Drawing.GraphicsUnit unit, System.Drawing.Graphics.EnumerateMetafileProc callback, System.IntPtr callbackData, System.Drawing.Imaging.ImageAttributes imageAttr) => throw null; + public void EnumerateMetafile(System.Drawing.Imaging.Metafile metafile, System.Drawing.Point[] destPoints, System.Drawing.Rectangle srcRect, System.Drawing.GraphicsUnit srcUnit, System.Drawing.Graphics.EnumerateMetafileProc callback, System.IntPtr callbackData) => throw null; + public void EnumerateMetafile(System.Drawing.Imaging.Metafile metafile, System.Drawing.Point[] destPoints, System.Drawing.Rectangle srcRect, System.Drawing.GraphicsUnit srcUnit, System.Drawing.Graphics.EnumerateMetafileProc callback) => throw null; + public void EnumerateMetafile(System.Drawing.Imaging.Metafile metafile, System.Drawing.Point[] destPoints, System.Drawing.Graphics.EnumerateMetafileProc callback, System.IntPtr callbackData, System.Drawing.Imaging.ImageAttributes imageAttr) => throw null; + public void EnumerateMetafile(System.Drawing.Imaging.Metafile metafile, System.Drawing.Point[] destPoints, System.Drawing.Graphics.EnumerateMetafileProc callback, System.IntPtr callbackData) => throw null; + public void EnumerateMetafile(System.Drawing.Imaging.Metafile metafile, System.Drawing.Point[] destPoints, System.Drawing.Graphics.EnumerateMetafileProc callback) => throw null; + public void EnumerateMetafile(System.Drawing.Imaging.Metafile metafile, System.Drawing.PointF[] destPoints, System.Drawing.RectangleF srcRect, System.Drawing.GraphicsUnit unit, System.Drawing.Graphics.EnumerateMetafileProc callback, System.IntPtr callbackData, System.Drawing.Imaging.ImageAttributes imageAttr) => throw null; + public void EnumerateMetafile(System.Drawing.Imaging.Metafile metafile, System.Drawing.PointF[] destPoints, System.Drawing.RectangleF srcRect, System.Drawing.GraphicsUnit srcUnit, System.Drawing.Graphics.EnumerateMetafileProc callback, System.IntPtr callbackData) => throw null; + public void EnumerateMetafile(System.Drawing.Imaging.Metafile metafile, System.Drawing.PointF[] destPoints, System.Drawing.RectangleF srcRect, System.Drawing.GraphicsUnit srcUnit, System.Drawing.Graphics.EnumerateMetafileProc callback) => throw null; + public void EnumerateMetafile(System.Drawing.Imaging.Metafile metafile, System.Drawing.PointF[] destPoints, System.Drawing.Graphics.EnumerateMetafileProc callback, System.IntPtr callbackData, System.Drawing.Imaging.ImageAttributes imageAttr) => throw null; + public void EnumerateMetafile(System.Drawing.Imaging.Metafile metafile, System.Drawing.PointF[] destPoints, System.Drawing.Graphics.EnumerateMetafileProc callback, System.IntPtr callbackData) => throw null; + public void EnumerateMetafile(System.Drawing.Imaging.Metafile metafile, System.Drawing.PointF[] destPoints, System.Drawing.Graphics.EnumerateMetafileProc callback) => throw null; + public void EnumerateMetafile(System.Drawing.Imaging.Metafile metafile, System.Drawing.PointF destPoint, System.Drawing.RectangleF srcRect, System.Drawing.GraphicsUnit unit, System.Drawing.Graphics.EnumerateMetafileProc callback, System.IntPtr callbackData, System.Drawing.Imaging.ImageAttributes imageAttr) => throw null; + public void EnumerateMetafile(System.Drawing.Imaging.Metafile metafile, System.Drawing.PointF destPoint, System.Drawing.RectangleF srcRect, System.Drawing.GraphicsUnit srcUnit, System.Drawing.Graphics.EnumerateMetafileProc callback, System.IntPtr callbackData) => throw null; + public void EnumerateMetafile(System.Drawing.Imaging.Metafile metafile, System.Drawing.PointF destPoint, System.Drawing.RectangleF srcRect, System.Drawing.GraphicsUnit srcUnit, System.Drawing.Graphics.EnumerateMetafileProc callback) => throw null; + public void EnumerateMetafile(System.Drawing.Imaging.Metafile metafile, System.Drawing.PointF destPoint, System.Drawing.Graphics.EnumerateMetafileProc callback, System.IntPtr callbackData, System.Drawing.Imaging.ImageAttributes imageAttr) => throw null; + public void EnumerateMetafile(System.Drawing.Imaging.Metafile metafile, System.Drawing.PointF destPoint, System.Drawing.Graphics.EnumerateMetafileProc callback, System.IntPtr callbackData) => throw null; + public void EnumerateMetafile(System.Drawing.Imaging.Metafile metafile, System.Drawing.PointF destPoint, System.Drawing.Graphics.EnumerateMetafileProc callback) => throw null; + public void EnumerateMetafile(System.Drawing.Imaging.Metafile metafile, System.Drawing.Point destPoint, System.Drawing.Rectangle srcRect, System.Drawing.GraphicsUnit unit, System.Drawing.Graphics.EnumerateMetafileProc callback, System.IntPtr callbackData, System.Drawing.Imaging.ImageAttributes imageAttr) => throw null; + public void EnumerateMetafile(System.Drawing.Imaging.Metafile metafile, System.Drawing.Point destPoint, System.Drawing.Rectangle srcRect, System.Drawing.GraphicsUnit srcUnit, System.Drawing.Graphics.EnumerateMetafileProc callback, System.IntPtr callbackData) => throw null; + public void EnumerateMetafile(System.Drawing.Imaging.Metafile metafile, System.Drawing.Point destPoint, System.Drawing.Rectangle srcRect, System.Drawing.GraphicsUnit srcUnit, System.Drawing.Graphics.EnumerateMetafileProc callback) => throw null; + public void EnumerateMetafile(System.Drawing.Imaging.Metafile metafile, System.Drawing.Point destPoint, System.Drawing.Graphics.EnumerateMetafileProc callback, System.IntPtr callbackData, System.Drawing.Imaging.ImageAttributes imageAttr) => throw null; + public void EnumerateMetafile(System.Drawing.Imaging.Metafile metafile, System.Drawing.Point destPoint, System.Drawing.Graphics.EnumerateMetafileProc callback, System.IntPtr callbackData) => throw null; + public void EnumerateMetafile(System.Drawing.Imaging.Metafile metafile, System.Drawing.Point destPoint, System.Drawing.Graphics.EnumerateMetafileProc callback) => throw null; + // Generated from `System.Drawing.Graphics+EnumerateMetafileProc` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public delegate bool EnumerateMetafileProc(System.Drawing.Imaging.EmfPlusRecordType recordType, int flags, int dataSize, System.IntPtr data, System.Drawing.Imaging.PlayRecordCallback callbackData); + + + public void ExcludeClip(System.Drawing.Region region) => throw null; + public void ExcludeClip(System.Drawing.Rectangle rect) => throw null; + public void FillClosedCurve(System.Drawing.Brush brush, System.Drawing.Point[] points, System.Drawing.Drawing2D.FillMode fillmode, float tension) => throw null; + public void FillClosedCurve(System.Drawing.Brush brush, System.Drawing.Point[] points, System.Drawing.Drawing2D.FillMode fillmode) => throw null; + public void FillClosedCurve(System.Drawing.Brush brush, System.Drawing.Point[] points) => throw null; + public void FillClosedCurve(System.Drawing.Brush brush, System.Drawing.PointF[] points, System.Drawing.Drawing2D.FillMode fillmode, float tension) => throw null; + public void FillClosedCurve(System.Drawing.Brush brush, System.Drawing.PointF[] points, System.Drawing.Drawing2D.FillMode fillmode) => throw null; + public void FillClosedCurve(System.Drawing.Brush brush, System.Drawing.PointF[] points) => throw null; + public void FillEllipse(System.Drawing.Brush brush, int x, int y, int width, int height) => throw null; + public void FillEllipse(System.Drawing.Brush brush, float x, float y, float width, float height) => throw null; + public void FillEllipse(System.Drawing.Brush brush, System.Drawing.RectangleF rect) => throw null; + public void FillEllipse(System.Drawing.Brush brush, System.Drawing.Rectangle rect) => throw null; + public void FillPath(System.Drawing.Brush brush, System.Drawing.Drawing2D.GraphicsPath path) => throw null; + public void FillPie(System.Drawing.Brush brush, int x, int y, int width, int height, int startAngle, int sweepAngle) => throw null; + public void FillPie(System.Drawing.Brush brush, float x, float y, float width, float height, float startAngle, float sweepAngle) => throw null; + public void FillPie(System.Drawing.Brush brush, System.Drawing.Rectangle rect, float startAngle, float sweepAngle) => throw null; + public void FillPolygon(System.Drawing.Brush brush, System.Drawing.Point[] points, System.Drawing.Drawing2D.FillMode fillMode) => throw null; + public void FillPolygon(System.Drawing.Brush brush, System.Drawing.Point[] points) => throw null; + public void FillPolygon(System.Drawing.Brush brush, System.Drawing.PointF[] points, System.Drawing.Drawing2D.FillMode fillMode) => throw null; + public void FillPolygon(System.Drawing.Brush brush, System.Drawing.PointF[] points) => throw null; + public void FillRectangle(System.Drawing.Brush brush, int x, int y, int width, int height) => throw null; + public void FillRectangle(System.Drawing.Brush brush, float x, float y, float width, float height) => throw null; + public void FillRectangle(System.Drawing.Brush brush, System.Drawing.RectangleF rect) => throw null; + public void FillRectangle(System.Drawing.Brush brush, System.Drawing.Rectangle rect) => throw null; + public void FillRectangles(System.Drawing.Brush brush, System.Drawing.Rectangle[] rects) => throw null; + public void FillRectangles(System.Drawing.Brush brush, System.Drawing.RectangleF[] rects) => throw null; + public void FillRegion(System.Drawing.Brush brush, System.Drawing.Region region) => throw null; + public void Flush(System.Drawing.Drawing2D.FlushIntention intention) => throw null; + public void Flush() => throw null; + public static System.Drawing.Graphics FromHdc(System.IntPtr hdc, System.IntPtr hdevice) => throw null; + public static System.Drawing.Graphics FromHdc(System.IntPtr hdc) => throw null; + public static System.Drawing.Graphics FromHdcInternal(System.IntPtr hdc) => throw null; + public static System.Drawing.Graphics FromHwnd(System.IntPtr hwnd) => throw null; + public static System.Drawing.Graphics FromHwndInternal(System.IntPtr hwnd) => throw null; + public static System.Drawing.Graphics FromImage(System.Drawing.Image image) => throw null; + public object GetContextInfo() => throw null; + public static System.IntPtr GetHalftonePalette() => throw null; + public System.IntPtr GetHdc() => throw null; + public System.Drawing.Color GetNearestColor(System.Drawing.Color color) => throw null; + public System.Drawing.Drawing2D.InterpolationMode InterpolationMode { get => throw null; set => throw null; } + public void IntersectClip(System.Drawing.Region region) => throw null; + public void IntersectClip(System.Drawing.RectangleF rect) => throw null; + public void IntersectClip(System.Drawing.Rectangle rect) => throw null; + public bool IsClipEmpty { get => throw null; } + public bool IsVisible(int x, int y, int width, int height) => throw null; + public bool IsVisible(int x, int y) => throw null; + public bool IsVisible(float x, float y, float width, float height) => throw null; + public bool IsVisible(float x, float y) => throw null; + public bool IsVisible(System.Drawing.RectangleF rect) => throw null; + public bool IsVisible(System.Drawing.Rectangle rect) => throw null; + public bool IsVisible(System.Drawing.PointF point) => throw null; + public bool IsVisible(System.Drawing.Point point) => throw null; + public bool IsVisibleClipEmpty { get => throw null; } + public System.Drawing.Region[] MeasureCharacterRanges(string text, System.Drawing.Font font, System.Drawing.RectangleF layoutRect, System.Drawing.StringFormat stringFormat) => throw null; + public System.Drawing.SizeF MeasureString(string text, System.Drawing.Font font, int width, System.Drawing.StringFormat format) => throw null; + public System.Drawing.SizeF MeasureString(string text, System.Drawing.Font font, int width) => throw null; + public System.Drawing.SizeF MeasureString(string text, System.Drawing.Font font, System.Drawing.SizeF layoutArea, System.Drawing.StringFormat stringFormat, out int charactersFitted, out int linesFilled) => throw null; + public System.Drawing.SizeF MeasureString(string text, System.Drawing.Font font, System.Drawing.SizeF layoutArea, System.Drawing.StringFormat stringFormat) => throw null; + public System.Drawing.SizeF MeasureString(string text, System.Drawing.Font font, System.Drawing.SizeF layoutArea) => throw null; + public System.Drawing.SizeF MeasureString(string text, System.Drawing.Font font, System.Drawing.PointF origin, System.Drawing.StringFormat stringFormat) => throw null; + public System.Drawing.SizeF MeasureString(string text, System.Drawing.Font font) => throw null; + public void MultiplyTransform(System.Drawing.Drawing2D.Matrix matrix, System.Drawing.Drawing2D.MatrixOrder order) => throw null; + public void MultiplyTransform(System.Drawing.Drawing2D.Matrix matrix) => throw null; + public float PageScale { get => throw null; set => throw null; } + public System.Drawing.GraphicsUnit PageUnit { get => throw null; set => throw null; } + public System.Drawing.Drawing2D.PixelOffsetMode PixelOffsetMode { get => throw null; set => throw null; } + public void ReleaseHdc(System.IntPtr hdc) => throw null; + public void ReleaseHdc() => throw null; + public void ReleaseHdcInternal(System.IntPtr hdc) => throw null; + public System.Drawing.Point RenderingOrigin { get => throw null; set => throw null; } + public void ResetClip() => throw null; + public void ResetTransform() => throw null; + public void Restore(System.Drawing.Drawing2D.GraphicsState gstate) => throw null; + public void RotateTransform(float angle, System.Drawing.Drawing2D.MatrixOrder order) => throw null; + public void RotateTransform(float angle) => throw null; + public System.Drawing.Drawing2D.GraphicsState Save() => throw null; + public void ScaleTransform(float sx, float sy, System.Drawing.Drawing2D.MatrixOrder order) => throw null; + public void ScaleTransform(float sx, float sy) => throw null; + public void SetClip(System.Drawing.Region region, System.Drawing.Drawing2D.CombineMode combineMode) => throw null; + public void SetClip(System.Drawing.RectangleF rect, System.Drawing.Drawing2D.CombineMode combineMode) => throw null; + public void SetClip(System.Drawing.RectangleF rect) => throw null; + public void SetClip(System.Drawing.Rectangle rect, System.Drawing.Drawing2D.CombineMode combineMode) => throw null; + public void SetClip(System.Drawing.Rectangle rect) => throw null; + public void SetClip(System.Drawing.Graphics g, System.Drawing.Drawing2D.CombineMode combineMode) => throw null; + public void SetClip(System.Drawing.Graphics g) => throw null; + public void SetClip(System.Drawing.Drawing2D.GraphicsPath path, System.Drawing.Drawing2D.CombineMode combineMode) => throw null; + public void SetClip(System.Drawing.Drawing2D.GraphicsPath path) => throw null; + public System.Drawing.Drawing2D.SmoothingMode SmoothingMode { get => throw null; set => throw null; } + public int TextContrast { get => throw null; set => throw null; } + public System.Drawing.Text.TextRenderingHint TextRenderingHint { get => throw null; set => throw null; } + public System.Drawing.Drawing2D.Matrix Transform { get => throw null; set => throw null; } + public void TransformPoints(System.Drawing.Drawing2D.CoordinateSpace destSpace, System.Drawing.Drawing2D.CoordinateSpace srcSpace, System.Drawing.Point[] pts) => throw null; + public void TransformPoints(System.Drawing.Drawing2D.CoordinateSpace destSpace, System.Drawing.Drawing2D.CoordinateSpace srcSpace, System.Drawing.PointF[] pts) => throw null; + public void TranslateClip(int dx, int dy) => throw null; + public void TranslateClip(float dx, float dy) => throw null; + public void TranslateTransform(float dx, float dy, System.Drawing.Drawing2D.MatrixOrder order) => throw null; + public void TranslateTransform(float dx, float dy) => throw null; + public System.Drawing.RectangleF VisibleClipBounds { get => throw null; } + // ERR: Stub generator didn't handle member: ~Graphics + } + + // Generated from `System.Drawing.GraphicsUnit` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public enum GraphicsUnit + { + Display, + Document, + Inch, + Millimeter, + Pixel, + Point, + World, + } + + // Generated from `System.Drawing.IDeviceContext` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public interface IDeviceContext : System.IDisposable + { + System.IntPtr GetHdc(); + void ReleaseHdc(); + } + + // Generated from `System.Drawing.Icon` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public class Icon : System.MarshalByRefObject, System.Runtime.Serialization.ISerializable, System.IDisposable, System.ICloneable + { + public object Clone() => throw null; + public void Dispose() => throw null; + public static System.Drawing.Icon ExtractAssociatedIcon(string filePath) => throw null; + public static System.Drawing.Icon FromHandle(System.IntPtr handle) => throw null; + void System.Runtime.Serialization.ISerializable.GetObjectData(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) => throw null; + public System.IntPtr Handle { get => throw null; } + public int Height { get => throw null; } + public Icon(string fileName, int width, int height) => throw null; + public Icon(string fileName, System.Drawing.Size size) => throw null; + public Icon(string fileName) => throw null; + public Icon(System.Type type, string resource) => throw null; + public Icon(System.IO.Stream stream, int width, int height) => throw null; + public Icon(System.IO.Stream stream, System.Drawing.Size size) => throw null; + public Icon(System.IO.Stream stream) => throw null; + public Icon(System.Drawing.Icon original, int width, int height) => throw null; + public Icon(System.Drawing.Icon original, System.Drawing.Size size) => throw null; + public void Save(System.IO.Stream outputStream) => throw null; + public System.Drawing.Size Size { get => throw null; } + public System.Drawing.Bitmap ToBitmap() => throw null; + public override string ToString() => throw null; + public int Width { get => throw null; } + // ERR: Stub generator didn't handle member: ~Icon + } + + // Generated from `System.Drawing.Image` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public abstract class Image : System.MarshalByRefObject, System.Runtime.Serialization.ISerializable, System.IDisposable, System.ICloneable + { + public object Clone() => throw null; + public void Dispose() => throw null; + protected virtual void Dispose(bool disposing) => throw null; + public int Flags { get => throw null; } + public System.Guid[] FrameDimensionsList { get => throw null; } + public static System.Drawing.Image FromFile(string filename, bool useEmbeddedColorManagement) => throw null; + public static System.Drawing.Image FromFile(string filename) => throw null; + public static System.Drawing.Bitmap FromHbitmap(System.IntPtr hbitmap, System.IntPtr hpalette) => throw null; + public static System.Drawing.Bitmap FromHbitmap(System.IntPtr hbitmap) => throw null; + public static System.Drawing.Image FromStream(System.IO.Stream stream, bool useEmbeddedColorManagement, bool validateImageData) => throw null; + public static System.Drawing.Image FromStream(System.IO.Stream stream, bool useEmbeddedColorManagement) => throw null; + public static System.Drawing.Image FromStream(System.IO.Stream stream) => throw null; + public System.Drawing.RectangleF GetBounds(ref System.Drawing.GraphicsUnit pageUnit) => throw null; + public System.Drawing.Imaging.EncoderParameters GetEncoderParameterList(System.Guid encoder) => throw null; + public int GetFrameCount(System.Drawing.Imaging.FrameDimension dimension) => throw null; + void System.Runtime.Serialization.ISerializable.GetObjectData(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) => throw null; + public static int GetPixelFormatSize(System.Drawing.Imaging.PixelFormat pixfmt) => throw null; + public System.Drawing.Imaging.PropertyItem GetPropertyItem(int propid) => throw null; + public System.Drawing.Image GetThumbnailImage(int thumbWidth, int thumbHeight, System.Drawing.Image.GetThumbnailImageAbort callback, System.IntPtr callbackData) => throw null; + // Generated from `System.Drawing.Image+GetThumbnailImageAbort` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public delegate bool GetThumbnailImageAbort(); + + + public int Height { get => throw null; } + public float HorizontalResolution { get => throw null; } + internal Image() => throw null; + public static bool IsAlphaPixelFormat(System.Drawing.Imaging.PixelFormat pixfmt) => throw null; + public static bool IsCanonicalPixelFormat(System.Drawing.Imaging.PixelFormat pixfmt) => throw null; + public static bool IsExtendedPixelFormat(System.Drawing.Imaging.PixelFormat pixfmt) => throw null; + public System.Drawing.Imaging.ColorPalette Palette { get => throw null; set => throw null; } + public System.Drawing.SizeF PhysicalDimension { get => throw null; } + public System.Drawing.Imaging.PixelFormat PixelFormat { get => throw null; } + public int[] PropertyIdList { get => throw null; } + public System.Drawing.Imaging.PropertyItem[] PropertyItems { get => throw null; } + public System.Drawing.Imaging.ImageFormat RawFormat { get => throw null; } + public void RemovePropertyItem(int propid) => throw null; + public void RotateFlip(System.Drawing.RotateFlipType rotateFlipType) => throw null; + public void Save(string filename, System.Drawing.Imaging.ImageFormat format) => throw null; + public void Save(string filename, System.Drawing.Imaging.ImageCodecInfo encoder, System.Drawing.Imaging.EncoderParameters encoderParams) => throw null; + public void Save(string filename) => throw null; + public void Save(System.IO.Stream stream, System.Drawing.Imaging.ImageFormat format) => throw null; + public void Save(System.IO.Stream stream, System.Drawing.Imaging.ImageCodecInfo encoder, System.Drawing.Imaging.EncoderParameters encoderParams) => throw null; + public void SaveAdd(System.Drawing.Imaging.EncoderParameters encoderParams) => throw null; + public void SaveAdd(System.Drawing.Image image, System.Drawing.Imaging.EncoderParameters encoderParams) => throw null; + public int SelectActiveFrame(System.Drawing.Imaging.FrameDimension dimension, int frameIndex) => throw null; + public void SetPropertyItem(System.Drawing.Imaging.PropertyItem propitem) => throw null; + public System.Drawing.Size Size { get => throw null; } + public object Tag { get => throw null; set => throw null; } + public float VerticalResolution { get => throw null; } + public int Width { get => throw null; } + // ERR: Stub generator didn't handle member: ~Image + } + + // Generated from `System.Drawing.ImageAnimator` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public class ImageAnimator + { + public static void Animate(System.Drawing.Image image, System.EventHandler onFrameChangedHandler) => throw null; + public static bool CanAnimate(System.Drawing.Image image) => throw null; + public static void StopAnimate(System.Drawing.Image image, System.EventHandler onFrameChangedHandler) => throw null; + public static void UpdateFrames(System.Drawing.Image image) => throw null; + public static void UpdateFrames() => throw null; + } + + // Generated from `System.Drawing.Pen` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public class Pen : System.MarshalByRefObject, System.IDisposable, System.ICloneable + { + public System.Drawing.Drawing2D.PenAlignment Alignment { get => throw null; set => throw null; } + public System.Drawing.Brush Brush { get => throw null; set => throw null; } + public object Clone() => throw null; + public System.Drawing.Color Color { get => throw null; set => throw null; } + public float[] CompoundArray { get => throw null; set => throw null; } + public System.Drawing.Drawing2D.CustomLineCap CustomEndCap { get => throw null; set => throw null; } + public System.Drawing.Drawing2D.CustomLineCap CustomStartCap { get => throw null; set => throw null; } + public System.Drawing.Drawing2D.DashCap DashCap { get => throw null; set => throw null; } + public float DashOffset { get => throw null; set => throw null; } + public float[] DashPattern { get => throw null; set => throw null; } + public System.Drawing.Drawing2D.DashStyle DashStyle { get => throw null; set => throw null; } + public void Dispose() => throw null; + public System.Drawing.Drawing2D.LineCap EndCap { get => throw null; set => throw null; } + public System.Drawing.Drawing2D.LineJoin LineJoin { get => throw null; set => throw null; } + public float MiterLimit { get => throw null; set => throw null; } + public void MultiplyTransform(System.Drawing.Drawing2D.Matrix matrix, System.Drawing.Drawing2D.MatrixOrder order) => throw null; + public void MultiplyTransform(System.Drawing.Drawing2D.Matrix matrix) => throw null; + public Pen(System.Drawing.Color color, float width) => throw null; + public Pen(System.Drawing.Color color) => throw null; + public Pen(System.Drawing.Brush brush, float width) => throw null; + public Pen(System.Drawing.Brush brush) => throw null; + public System.Drawing.Drawing2D.PenType PenType { get => throw null; } + public void ResetTransform() => throw null; + public void RotateTransform(float angle, System.Drawing.Drawing2D.MatrixOrder order) => throw null; + public void RotateTransform(float angle) => throw null; + public void ScaleTransform(float sx, float sy, System.Drawing.Drawing2D.MatrixOrder order) => throw null; + public void ScaleTransform(float sx, float sy) => throw null; + public void SetLineCap(System.Drawing.Drawing2D.LineCap startCap, System.Drawing.Drawing2D.LineCap endCap, System.Drawing.Drawing2D.DashCap dashCap) => throw null; + public System.Drawing.Drawing2D.LineCap StartCap { get => throw null; set => throw null; } + public System.Drawing.Drawing2D.Matrix Transform { get => throw null; set => throw null; } + public void TranslateTransform(float dx, float dy, System.Drawing.Drawing2D.MatrixOrder order) => throw null; + public void TranslateTransform(float dx, float dy) => throw null; + public float Width { get => throw null; set => throw null; } + // ERR: Stub generator didn't handle member: ~Pen + } + + // Generated from `System.Drawing.Pens` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public static class Pens + { + public static System.Drawing.Pen AliceBlue { get => throw null; } + public static System.Drawing.Pen AntiqueWhite { get => throw null; } + public static System.Drawing.Pen Aqua { get => throw null; } + public static System.Drawing.Pen Aquamarine { get => throw null; } + public static System.Drawing.Pen Azure { get => throw null; } + public static System.Drawing.Pen Beige { get => throw null; } + public static System.Drawing.Pen Bisque { get => throw null; } + public static System.Drawing.Pen Black { get => throw null; } + public static System.Drawing.Pen BlanchedAlmond { get => throw null; } + public static System.Drawing.Pen Blue { get => throw null; } + public static System.Drawing.Pen BlueViolet { get => throw null; } + public static System.Drawing.Pen Brown { get => throw null; } + public static System.Drawing.Pen BurlyWood { get => throw null; } + public static System.Drawing.Pen CadetBlue { get => throw null; } + public static System.Drawing.Pen Chartreuse { get => throw null; } + public static System.Drawing.Pen Chocolate { get => throw null; } + public static System.Drawing.Pen Coral { get => throw null; } + public static System.Drawing.Pen CornflowerBlue { get => throw null; } + public static System.Drawing.Pen Cornsilk { get => throw null; } + public static System.Drawing.Pen Crimson { get => throw null; } + public static System.Drawing.Pen Cyan { get => throw null; } + public static System.Drawing.Pen DarkBlue { get => throw null; } + public static System.Drawing.Pen DarkCyan { get => throw null; } + public static System.Drawing.Pen DarkGoldenrod { get => throw null; } + public static System.Drawing.Pen DarkGray { get => throw null; } + public static System.Drawing.Pen DarkGreen { get => throw null; } + public static System.Drawing.Pen DarkKhaki { get => throw null; } + public static System.Drawing.Pen DarkMagenta { get => throw null; } + public static System.Drawing.Pen DarkOliveGreen { get => throw null; } + public static System.Drawing.Pen DarkOrange { get => throw null; } + public static System.Drawing.Pen DarkOrchid { get => throw null; } + public static System.Drawing.Pen DarkRed { get => throw null; } + public static System.Drawing.Pen DarkSalmon { get => throw null; } + public static System.Drawing.Pen DarkSeaGreen { get => throw null; } + public static System.Drawing.Pen DarkSlateBlue { get => throw null; } + public static System.Drawing.Pen DarkSlateGray { get => throw null; } + public static System.Drawing.Pen DarkTurquoise { get => throw null; } + public static System.Drawing.Pen DarkViolet { get => throw null; } + public static System.Drawing.Pen DeepPink { get => throw null; } + public static System.Drawing.Pen DeepSkyBlue { get => throw null; } + public static System.Drawing.Pen DimGray { get => throw null; } + public static System.Drawing.Pen DodgerBlue { get => throw null; } + public static System.Drawing.Pen Firebrick { get => throw null; } + public static System.Drawing.Pen FloralWhite { get => throw null; } + public static System.Drawing.Pen ForestGreen { get => throw null; } + public static System.Drawing.Pen Fuchsia { get => throw null; } + public static System.Drawing.Pen Gainsboro { get => throw null; } + public static System.Drawing.Pen GhostWhite { get => throw null; } + public static System.Drawing.Pen Gold { get => throw null; } + public static System.Drawing.Pen Goldenrod { get => throw null; } + public static System.Drawing.Pen Gray { get => throw null; } + public static System.Drawing.Pen Green { get => throw null; } + public static System.Drawing.Pen GreenYellow { get => throw null; } + public static System.Drawing.Pen Honeydew { get => throw null; } + public static System.Drawing.Pen HotPink { get => throw null; } + public static System.Drawing.Pen IndianRed { get => throw null; } + public static System.Drawing.Pen Indigo { get => throw null; } + public static System.Drawing.Pen Ivory { get => throw null; } + public static System.Drawing.Pen Khaki { get => throw null; } + public static System.Drawing.Pen Lavender { get => throw null; } + public static System.Drawing.Pen LavenderBlush { get => throw null; } + public static System.Drawing.Pen LawnGreen { get => throw null; } + public static System.Drawing.Pen LemonChiffon { get => throw null; } + public static System.Drawing.Pen LightBlue { get => throw null; } + public static System.Drawing.Pen LightCoral { get => throw null; } + public static System.Drawing.Pen LightCyan { get => throw null; } + public static System.Drawing.Pen LightGoldenrodYellow { get => throw null; } + public static System.Drawing.Pen LightGray { get => throw null; } + public static System.Drawing.Pen LightGreen { get => throw null; } + public static System.Drawing.Pen LightPink { get => throw null; } + public static System.Drawing.Pen LightSalmon { get => throw null; } + public static System.Drawing.Pen LightSeaGreen { get => throw null; } + public static System.Drawing.Pen LightSkyBlue { get => throw null; } + public static System.Drawing.Pen LightSlateGray { get => throw null; } + public static System.Drawing.Pen LightSteelBlue { get => throw null; } + public static System.Drawing.Pen LightYellow { get => throw null; } + public static System.Drawing.Pen Lime { get => throw null; } + public static System.Drawing.Pen LimeGreen { get => throw null; } + public static System.Drawing.Pen Linen { get => throw null; } + public static System.Drawing.Pen Magenta { get => throw null; } + public static System.Drawing.Pen Maroon { get => throw null; } + public static System.Drawing.Pen MediumAquamarine { get => throw null; } + public static System.Drawing.Pen MediumBlue { get => throw null; } + public static System.Drawing.Pen MediumOrchid { get => throw null; } + public static System.Drawing.Pen MediumPurple { get => throw null; } + public static System.Drawing.Pen MediumSeaGreen { get => throw null; } + public static System.Drawing.Pen MediumSlateBlue { get => throw null; } + public static System.Drawing.Pen MediumSpringGreen { get => throw null; } + public static System.Drawing.Pen MediumTurquoise { get => throw null; } + public static System.Drawing.Pen MediumVioletRed { get => throw null; } + public static System.Drawing.Pen MidnightBlue { get => throw null; } + public static System.Drawing.Pen MintCream { get => throw null; } + public static System.Drawing.Pen MistyRose { get => throw null; } + public static System.Drawing.Pen Moccasin { get => throw null; } + public static System.Drawing.Pen NavajoWhite { get => throw null; } + public static System.Drawing.Pen Navy { get => throw null; } + public static System.Drawing.Pen OldLace { get => throw null; } + public static System.Drawing.Pen Olive { get => throw null; } + public static System.Drawing.Pen OliveDrab { get => throw null; } + public static System.Drawing.Pen Orange { get => throw null; } + public static System.Drawing.Pen OrangeRed { get => throw null; } + public static System.Drawing.Pen Orchid { get => throw null; } + public static System.Drawing.Pen PaleGoldenrod { get => throw null; } + public static System.Drawing.Pen PaleGreen { get => throw null; } + public static System.Drawing.Pen PaleTurquoise { get => throw null; } + public static System.Drawing.Pen PaleVioletRed { get => throw null; } + public static System.Drawing.Pen PapayaWhip { get => throw null; } + public static System.Drawing.Pen PeachPuff { get => throw null; } + public static System.Drawing.Pen Peru { get => throw null; } + public static System.Drawing.Pen Pink { get => throw null; } + public static System.Drawing.Pen Plum { get => throw null; } + public static System.Drawing.Pen PowderBlue { get => throw null; } + public static System.Drawing.Pen Purple { get => throw null; } + public static System.Drawing.Pen Red { get => throw null; } + public static System.Drawing.Pen RosyBrown { get => throw null; } + public static System.Drawing.Pen RoyalBlue { get => throw null; } + public static System.Drawing.Pen SaddleBrown { get => throw null; } + public static System.Drawing.Pen Salmon { get => throw null; } + public static System.Drawing.Pen SandyBrown { get => throw null; } + public static System.Drawing.Pen SeaGreen { get => throw null; } + public static System.Drawing.Pen SeaShell { get => throw null; } + public static System.Drawing.Pen Sienna { get => throw null; } + public static System.Drawing.Pen Silver { get => throw null; } + public static System.Drawing.Pen SkyBlue { get => throw null; } + public static System.Drawing.Pen SlateBlue { get => throw null; } + public static System.Drawing.Pen SlateGray { get => throw null; } + public static System.Drawing.Pen Snow { get => throw null; } + public static System.Drawing.Pen SpringGreen { get => throw null; } + public static System.Drawing.Pen SteelBlue { get => throw null; } + public static System.Drawing.Pen Tan { get => throw null; } + public static System.Drawing.Pen Teal { get => throw null; } + public static System.Drawing.Pen Thistle { get => throw null; } + public static System.Drawing.Pen Tomato { get => throw null; } + public static System.Drawing.Pen Transparent { get => throw null; } + public static System.Drawing.Pen Turquoise { get => throw null; } + public static System.Drawing.Pen Violet { get => throw null; } + public static System.Drawing.Pen Wheat { get => throw null; } + public static System.Drawing.Pen White { get => throw null; } + public static System.Drawing.Pen WhiteSmoke { get => throw null; } + public static System.Drawing.Pen Yellow { get => throw null; } + public static System.Drawing.Pen YellowGreen { get => throw null; } + } + + // Generated from `System.Drawing.Region` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public class Region : System.MarshalByRefObject, System.IDisposable + { + public System.Drawing.Region Clone() => throw null; + public void Complement(System.Drawing.Region region) => throw null; + public void Complement(System.Drawing.RectangleF rect) => throw null; + public void Complement(System.Drawing.Rectangle rect) => throw null; + public void Complement(System.Drawing.Drawing2D.GraphicsPath path) => throw null; + public void Dispose() => throw null; + public bool Equals(System.Drawing.Region region, System.Drawing.Graphics g) => throw null; + public void Exclude(System.Drawing.Region region) => throw null; + public void Exclude(System.Drawing.RectangleF rect) => throw null; + public void Exclude(System.Drawing.Rectangle rect) => throw null; + public void Exclude(System.Drawing.Drawing2D.GraphicsPath path) => throw null; + public static System.Drawing.Region FromHrgn(System.IntPtr hrgn) => throw null; + public System.Drawing.RectangleF GetBounds(System.Drawing.Graphics g) => throw null; + public System.IntPtr GetHrgn(System.Drawing.Graphics g) => throw null; + public System.Drawing.Drawing2D.RegionData GetRegionData() => throw null; + public System.Drawing.RectangleF[] GetRegionScans(System.Drawing.Drawing2D.Matrix matrix) => throw null; + public void Intersect(System.Drawing.Region region) => throw null; + public void Intersect(System.Drawing.RectangleF rect) => throw null; + public void Intersect(System.Drawing.Rectangle rect) => throw null; + public void Intersect(System.Drawing.Drawing2D.GraphicsPath path) => throw null; + public bool IsEmpty(System.Drawing.Graphics g) => throw null; + public bool IsInfinite(System.Drawing.Graphics g) => throw null; + public bool IsVisible(int x, int y, int width, int height, System.Drawing.Graphics g) => throw null; + public bool IsVisible(int x, int y, int width, int height) => throw null; + public bool IsVisible(int x, int y, System.Drawing.Graphics g) => throw null; + public bool IsVisible(float x, float y, float width, float height, System.Drawing.Graphics g) => throw null; + public bool IsVisible(float x, float y, float width, float height) => throw null; + public bool IsVisible(float x, float y, System.Drawing.Graphics g) => throw null; + public bool IsVisible(float x, float y) => throw null; + public bool IsVisible(System.Drawing.RectangleF rect, System.Drawing.Graphics g) => throw null; + public bool IsVisible(System.Drawing.RectangleF rect) => throw null; + public bool IsVisible(System.Drawing.Rectangle rect, System.Drawing.Graphics g) => throw null; + public bool IsVisible(System.Drawing.Rectangle rect) => throw null; + public bool IsVisible(System.Drawing.PointF point, System.Drawing.Graphics g) => throw null; + public bool IsVisible(System.Drawing.PointF point) => throw null; + public bool IsVisible(System.Drawing.Point point, System.Drawing.Graphics g) => throw null; + public bool IsVisible(System.Drawing.Point point) => throw null; + public void MakeEmpty() => throw null; + public void MakeInfinite() => throw null; + public Region(System.Drawing.RectangleF rect) => throw null; + public Region(System.Drawing.Rectangle rect) => throw null; + public Region(System.Drawing.Drawing2D.RegionData rgnData) => throw null; + public Region(System.Drawing.Drawing2D.GraphicsPath path) => throw null; + public Region() => throw null; + public void ReleaseHrgn(System.IntPtr regionHandle) => throw null; + public void Transform(System.Drawing.Drawing2D.Matrix matrix) => throw null; + public void Translate(int dx, int dy) => throw null; + public void Translate(float dx, float dy) => throw null; + public void Union(System.Drawing.Region region) => throw null; + public void Union(System.Drawing.RectangleF rect) => throw null; + public void Union(System.Drawing.Rectangle rect) => throw null; + public void Union(System.Drawing.Drawing2D.GraphicsPath path) => throw null; + public void Xor(System.Drawing.Region region) => throw null; + public void Xor(System.Drawing.RectangleF rect) => throw null; + public void Xor(System.Drawing.Rectangle rect) => throw null; + public void Xor(System.Drawing.Drawing2D.GraphicsPath path) => throw null; + // ERR: Stub generator didn't handle member: ~Region + } + + // Generated from `System.Drawing.RotateFlipType` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public enum RotateFlipType + { + Rotate180FlipNone, + Rotate180FlipX, + Rotate180FlipXY, + Rotate180FlipY, + Rotate270FlipNone, + Rotate270FlipX, + Rotate270FlipXY, + Rotate270FlipY, + Rotate90FlipNone, + Rotate90FlipX, + Rotate90FlipXY, + Rotate90FlipY, + RotateNoneFlipNone, + RotateNoneFlipX, + RotateNoneFlipXY, + RotateNoneFlipY, + } + + // Generated from `System.Drawing.SolidBrush` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public class SolidBrush : System.Drawing.Brush + { + public override object Clone() => throw null; + public System.Drawing.Color Color { get => throw null; set => throw null; } + protected override void Dispose(bool disposing) => throw null; + public SolidBrush(System.Drawing.Color color) => throw null; + } + + // Generated from `System.Drawing.StringAlignment` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public enum StringAlignment + { + Center, + Far, + Near, + } + + // Generated from `System.Drawing.StringDigitSubstitute` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public enum StringDigitSubstitute + { + National, + None, + Traditional, + User, + } + + // Generated from `System.Drawing.StringFormat` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public class StringFormat : System.MarshalByRefObject, System.IDisposable, System.ICloneable + { + public System.Drawing.StringAlignment Alignment { get => throw null; set => throw null; } + public object Clone() => throw null; + public int DigitSubstitutionLanguage { get => throw null; } + public System.Drawing.StringDigitSubstitute DigitSubstitutionMethod { get => throw null; } + public void Dispose() => throw null; + public System.Drawing.StringFormatFlags FormatFlags { get => throw null; set => throw null; } + public static System.Drawing.StringFormat GenericDefault { get => throw null; } + public static System.Drawing.StringFormat GenericTypographic { get => throw null; } + public float[] GetTabStops(out float firstTabOffset) => throw null; + public System.Drawing.Text.HotkeyPrefix HotkeyPrefix { get => throw null; set => throw null; } + public System.Drawing.StringAlignment LineAlignment { get => throw null; set => throw null; } + public void SetDigitSubstitution(int language, System.Drawing.StringDigitSubstitute substitute) => throw null; + public void SetMeasurableCharacterRanges(System.Drawing.CharacterRange[] ranges) => throw null; + public void SetTabStops(float firstTabOffset, float[] tabStops) => throw null; + public StringFormat(System.Drawing.StringFormatFlags options, int language) => throw null; + public StringFormat(System.Drawing.StringFormatFlags options) => throw null; + public StringFormat(System.Drawing.StringFormat format) => throw null; + public StringFormat() => throw null; + public override string ToString() => throw null; + public System.Drawing.StringTrimming Trimming { get => throw null; set => throw null; } + // ERR: Stub generator didn't handle member: ~StringFormat + } + + // Generated from `System.Drawing.StringFormatFlags` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + [System.Flags] + public enum StringFormatFlags + { + DirectionRightToLeft, + DirectionVertical, + DisplayFormatControl, + FitBlackBox, + LineLimit, + MeasureTrailingSpaces, + NoClip, + NoFontFallback, + NoWrap, + } + + // Generated from `System.Drawing.StringTrimming` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public enum StringTrimming + { + Character, + EllipsisCharacter, + EllipsisPath, + EllipsisWord, + None, + Word, + } + + // Generated from `System.Drawing.StringUnit` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public enum StringUnit + { + Display, + Document, + Em, + Inch, + Millimeter, + Pixel, + Point, + World, + } + + // Generated from `System.Drawing.SystemBrushes` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public static class SystemBrushes + { + public static System.Drawing.Brush ActiveBorder { get => throw null; } + public static System.Drawing.Brush ActiveCaption { get => throw null; } + public static System.Drawing.Brush ActiveCaptionText { get => throw null; } + public static System.Drawing.Brush AppWorkspace { get => throw null; } + public static System.Drawing.Brush ButtonFace { get => throw null; } + public static System.Drawing.Brush ButtonHighlight { get => throw null; } + public static System.Drawing.Brush ButtonShadow { get => throw null; } + public static System.Drawing.Brush Control { get => throw null; } + public static System.Drawing.Brush ControlDark { get => throw null; } + public static System.Drawing.Brush ControlDarkDark { get => throw null; } + public static System.Drawing.Brush ControlLight { get => throw null; } + public static System.Drawing.Brush ControlLightLight { get => throw null; } + public static System.Drawing.Brush ControlText { get => throw null; } + public static System.Drawing.Brush Desktop { get => throw null; } + public static System.Drawing.Brush FromSystemColor(System.Drawing.Color c) => throw null; + public static System.Drawing.Brush GradientActiveCaption { get => throw null; } + public static System.Drawing.Brush GradientInactiveCaption { get => throw null; } + public static System.Drawing.Brush GrayText { get => throw null; } + public static System.Drawing.Brush Highlight { get => throw null; } + public static System.Drawing.Brush HighlightText { get => throw null; } + public static System.Drawing.Brush HotTrack { get => throw null; } + public static System.Drawing.Brush InactiveBorder { get => throw null; } + public static System.Drawing.Brush InactiveCaption { get => throw null; } + public static System.Drawing.Brush InactiveCaptionText { get => throw null; } + public static System.Drawing.Brush Info { get => throw null; } + public static System.Drawing.Brush InfoText { get => throw null; } + public static System.Drawing.Brush Menu { get => throw null; } + public static System.Drawing.Brush MenuBar { get => throw null; } + public static System.Drawing.Brush MenuHighlight { get => throw null; } + public static System.Drawing.Brush MenuText { get => throw null; } + public static System.Drawing.Brush ScrollBar { get => throw null; } + public static System.Drawing.Brush Window { get => throw null; } + public static System.Drawing.Brush WindowFrame { get => throw null; } + public static System.Drawing.Brush WindowText { get => throw null; } + } + + // Generated from `System.Drawing.SystemFonts` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public static class SystemFonts + { + public static System.Drawing.Font CaptionFont { get => throw null; } + public static System.Drawing.Font DefaultFont { get => throw null; } + public static System.Drawing.Font DialogFont { get => throw null; } + public static System.Drawing.Font GetFontByName(string systemFontName) => throw null; + public static System.Drawing.Font IconTitleFont { get => throw null; } + public static System.Drawing.Font MenuFont { get => throw null; } + public static System.Drawing.Font MessageBoxFont { get => throw null; } + public static System.Drawing.Font SmallCaptionFont { get => throw null; } + public static System.Drawing.Font StatusFont { get => throw null; } + } + + // Generated from `System.Drawing.SystemIcons` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public static class SystemIcons + { + public static System.Drawing.Icon Application { get => throw null; } + public static System.Drawing.Icon Asterisk { get => throw null; } + public static System.Drawing.Icon Error { get => throw null; } + public static System.Drawing.Icon Exclamation { get => throw null; } + public static System.Drawing.Icon Hand { get => throw null; } + public static System.Drawing.Icon Information { get => throw null; } + public static System.Drawing.Icon Question { get => throw null; } + public static System.Drawing.Icon Shield { get => throw null; } + public static System.Drawing.Icon Warning { get => throw null; } + public static System.Drawing.Icon WinLogo { get => throw null; } + } + + // Generated from `System.Drawing.SystemPens` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public static class SystemPens + { + public static System.Drawing.Pen ActiveBorder { get => throw null; } + public static System.Drawing.Pen ActiveCaption { get => throw null; } + public static System.Drawing.Pen ActiveCaptionText { get => throw null; } + public static System.Drawing.Pen AppWorkspace { get => throw null; } + public static System.Drawing.Pen ButtonFace { get => throw null; } + public static System.Drawing.Pen ButtonHighlight { get => throw null; } + public static System.Drawing.Pen ButtonShadow { get => throw null; } + public static System.Drawing.Pen Control { get => throw null; } + public static System.Drawing.Pen ControlDark { get => throw null; } + public static System.Drawing.Pen ControlDarkDark { get => throw null; } + public static System.Drawing.Pen ControlLight { get => throw null; } + public static System.Drawing.Pen ControlLightLight { get => throw null; } + public static System.Drawing.Pen ControlText { get => throw null; } + public static System.Drawing.Pen Desktop { get => throw null; } + public static System.Drawing.Pen FromSystemColor(System.Drawing.Color c) => throw null; + public static System.Drawing.Pen GradientActiveCaption { get => throw null; } + public static System.Drawing.Pen GradientInactiveCaption { get => throw null; } + public static System.Drawing.Pen GrayText { get => throw null; } + public static System.Drawing.Pen Highlight { get => throw null; } + public static System.Drawing.Pen HighlightText { get => throw null; } + public static System.Drawing.Pen HotTrack { get => throw null; } + public static System.Drawing.Pen InactiveBorder { get => throw null; } + public static System.Drawing.Pen InactiveCaption { get => throw null; } + public static System.Drawing.Pen InactiveCaptionText { get => throw null; } + public static System.Drawing.Pen Info { get => throw null; } + public static System.Drawing.Pen InfoText { get => throw null; } + public static System.Drawing.Pen Menu { get => throw null; } + public static System.Drawing.Pen MenuBar { get => throw null; } + public static System.Drawing.Pen MenuHighlight { get => throw null; } + public static System.Drawing.Pen MenuText { get => throw null; } + public static System.Drawing.Pen ScrollBar { get => throw null; } + public static System.Drawing.Pen Window { get => throw null; } + public static System.Drawing.Pen WindowFrame { get => throw null; } + public static System.Drawing.Pen WindowText { get => throw null; } + } + + // Generated from `System.Drawing.TextureBrush` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public class TextureBrush : System.Drawing.Brush + { + public override object Clone() => throw null; + public System.Drawing.Image Image { get => throw null; } + public void MultiplyTransform(System.Drawing.Drawing2D.Matrix matrix, System.Drawing.Drawing2D.MatrixOrder order) => throw null; + public void MultiplyTransform(System.Drawing.Drawing2D.Matrix matrix) => throw null; + public void ResetTransform() => throw null; + public void RotateTransform(float angle, System.Drawing.Drawing2D.MatrixOrder order) => throw null; + public void RotateTransform(float angle) => throw null; + public void ScaleTransform(float sx, float sy, System.Drawing.Drawing2D.MatrixOrder order) => throw null; + public void ScaleTransform(float sx, float sy) => throw null; + public TextureBrush(System.Drawing.Image image, System.Drawing.RectangleF dstRect, System.Drawing.Imaging.ImageAttributes imageAttr) => throw null; + public TextureBrush(System.Drawing.Image image, System.Drawing.RectangleF dstRect) => throw null; + public TextureBrush(System.Drawing.Image image, System.Drawing.Rectangle dstRect, System.Drawing.Imaging.ImageAttributes imageAttr) => throw null; + public TextureBrush(System.Drawing.Image image, System.Drawing.Rectangle dstRect) => throw null; + public TextureBrush(System.Drawing.Image image, System.Drawing.Drawing2D.WrapMode wrapMode, System.Drawing.RectangleF dstRect) => throw null; + public TextureBrush(System.Drawing.Image image, System.Drawing.Drawing2D.WrapMode wrapMode, System.Drawing.Rectangle dstRect) => throw null; + public TextureBrush(System.Drawing.Image image, System.Drawing.Drawing2D.WrapMode wrapMode) => throw null; + public TextureBrush(System.Drawing.Image bitmap) => throw null; + public System.Drawing.Drawing2D.Matrix Transform { get => throw null; set => throw null; } + public void TranslateTransform(float dx, float dy, System.Drawing.Drawing2D.MatrixOrder order) => throw null; + public void TranslateTransform(float dx, float dy) => throw null; + public System.Drawing.Drawing2D.WrapMode WrapMode { get => throw null; set => throw null; } + } + + // Generated from `System.Drawing.ToolboxBitmapAttribute` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public class ToolboxBitmapAttribute : System.Attribute + { + public static System.Drawing.ToolboxBitmapAttribute Default; + public override bool Equals(object value) => throw null; + public override int GetHashCode() => throw null; + public System.Drawing.Image GetImage(object component, bool large) => throw null; + public System.Drawing.Image GetImage(object component) => throw null; + public System.Drawing.Image GetImage(System.Type type, string imgName, bool large) => throw null; + public System.Drawing.Image GetImage(System.Type type, bool large) => throw null; + public System.Drawing.Image GetImage(System.Type type) => throw null; + public static System.Drawing.Image GetImageFromResource(System.Type t, string imageName, bool large) => throw null; + public ToolboxBitmapAttribute(string imageFile) => throw null; + public ToolboxBitmapAttribute(System.Type t, string name) => throw null; + public ToolboxBitmapAttribute(System.Type t) => throw null; + } + + namespace Design + { + // Generated from `System.Drawing.Design.CategoryNameCollection` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public class CategoryNameCollection : System.Collections.ReadOnlyCollectionBase + { + public CategoryNameCollection(string[] value) => throw null; + public CategoryNameCollection(System.Drawing.Design.CategoryNameCollection value) => throw null; + public bool Contains(string value) => throw null; + public void CopyTo(string[] array, int index) => throw null; + public int IndexOf(string value) => throw null; + public string this[int index] { get => throw null; } + } + + } + namespace Drawing2D + { + // Generated from `System.Drawing.Drawing2D.AdjustableArrowCap` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public class AdjustableArrowCap : System.Drawing.Drawing2D.CustomLineCap + { + public AdjustableArrowCap(float width, float height, bool isFilled) : base(default(System.Drawing.Drawing2D.GraphicsPath), default(System.Drawing.Drawing2D.GraphicsPath)) => throw null; + public AdjustableArrowCap(float width, float height) : base(default(System.Drawing.Drawing2D.GraphicsPath), default(System.Drawing.Drawing2D.GraphicsPath)) => throw null; + public bool Filled { get => throw null; set => throw null; } + public float Height { get => throw null; set => throw null; } + public float MiddleInset { get => throw null; set => throw null; } + public float Width { get => throw null; set => throw null; } + } + + // Generated from `System.Drawing.Drawing2D.Blend` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public class Blend + { + public Blend(int count) => throw null; + public Blend() => throw null; + public float[] Factors { get => throw null; set => throw null; } + public float[] Positions { get => throw null; set => throw null; } + } + + // Generated from `System.Drawing.Drawing2D.ColorBlend` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public class ColorBlend + { + public ColorBlend(int count) => throw null; + public ColorBlend() => throw null; + public System.Drawing.Color[] Colors { get => throw null; set => throw null; } + public float[] Positions { get => throw null; set => throw null; } + } + + // Generated from `System.Drawing.Drawing2D.CombineMode` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public enum CombineMode + { + Complement, + Exclude, + Intersect, + Replace, + Union, + Xor, + } + + // Generated from `System.Drawing.Drawing2D.CompositingMode` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public enum CompositingMode + { + SourceCopy, + SourceOver, + } + + // Generated from `System.Drawing.Drawing2D.CompositingQuality` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public enum CompositingQuality + { + AssumeLinear, + Default, + GammaCorrected, + HighQuality, + HighSpeed, + Invalid, + } + + // Generated from `System.Drawing.Drawing2D.CoordinateSpace` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public enum CoordinateSpace + { + Device, + Page, + World, + } + + // Generated from `System.Drawing.Drawing2D.CustomLineCap` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public class CustomLineCap : System.MarshalByRefObject, System.IDisposable, System.ICloneable + { + public System.Drawing.Drawing2D.LineCap BaseCap { get => throw null; set => throw null; } + public float BaseInset { get => throw null; set => throw null; } + public object Clone() => throw null; + public CustomLineCap(System.Drawing.Drawing2D.GraphicsPath fillPath, System.Drawing.Drawing2D.GraphicsPath strokePath, System.Drawing.Drawing2D.LineCap baseCap, float baseInset) => throw null; + public CustomLineCap(System.Drawing.Drawing2D.GraphicsPath fillPath, System.Drawing.Drawing2D.GraphicsPath strokePath, System.Drawing.Drawing2D.LineCap baseCap) => throw null; + public CustomLineCap(System.Drawing.Drawing2D.GraphicsPath fillPath, System.Drawing.Drawing2D.GraphicsPath strokePath) => throw null; + public void Dispose() => throw null; + protected virtual void Dispose(bool disposing) => throw null; + public void GetStrokeCaps(out System.Drawing.Drawing2D.LineCap startCap, out System.Drawing.Drawing2D.LineCap endCap) => throw null; + public void SetStrokeCaps(System.Drawing.Drawing2D.LineCap startCap, System.Drawing.Drawing2D.LineCap endCap) => throw null; + public System.Drawing.Drawing2D.LineJoin StrokeJoin { get => throw null; set => throw null; } + public float WidthScale { get => throw null; set => throw null; } + // ERR: Stub generator didn't handle member: ~CustomLineCap + } + + // Generated from `System.Drawing.Drawing2D.DashCap` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public enum DashCap + { + Flat, + Round, + Triangle, + } + + // Generated from `System.Drawing.Drawing2D.DashStyle` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public enum DashStyle + { + Custom, + Dash, + DashDot, + DashDotDot, + Dot, + Solid, + } + + // Generated from `System.Drawing.Drawing2D.FillMode` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public enum FillMode + { + Alternate, + Winding, + } + + // Generated from `System.Drawing.Drawing2D.FlushIntention` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public enum FlushIntention + { + Flush, + Sync, + } + + // Generated from `System.Drawing.Drawing2D.GraphicsContainer` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public class GraphicsContainer : System.MarshalByRefObject + { + } + + // Generated from `System.Drawing.Drawing2D.GraphicsPath` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public class GraphicsPath : System.MarshalByRefObject, System.IDisposable, System.ICloneable + { + public void AddArc(int x, int y, int width, int height, float startAngle, float sweepAngle) => throw null; + public void AddArc(float x, float y, float width, float height, float startAngle, float sweepAngle) => throw null; + public void AddArc(System.Drawing.RectangleF rect, float startAngle, float sweepAngle) => throw null; + public void AddArc(System.Drawing.Rectangle rect, float startAngle, float sweepAngle) => throw null; + public void AddBezier(int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4) => throw null; + public void AddBezier(float x1, float y1, float x2, float y2, float x3, float y3, float x4, float y4) => throw null; + public void AddBezier(System.Drawing.PointF pt1, System.Drawing.PointF pt2, System.Drawing.PointF pt3, System.Drawing.PointF pt4) => throw null; + public void AddBezier(System.Drawing.Point pt1, System.Drawing.Point pt2, System.Drawing.Point pt3, System.Drawing.Point pt4) => throw null; + public void AddBeziers(params System.Drawing.Point[] points) => throw null; + public void AddBeziers(System.Drawing.PointF[] points) => throw null; + public void AddClosedCurve(System.Drawing.Point[] points, float tension) => throw null; + public void AddClosedCurve(System.Drawing.Point[] points) => throw null; + public void AddClosedCurve(System.Drawing.PointF[] points, float tension) => throw null; + public void AddClosedCurve(System.Drawing.PointF[] points) => throw null; + public void AddCurve(System.Drawing.Point[] points, int offset, int numberOfSegments, float tension) => throw null; + public void AddCurve(System.Drawing.Point[] points, float tension) => throw null; + public void AddCurve(System.Drawing.Point[] points) => throw null; + public void AddCurve(System.Drawing.PointF[] points, int offset, int numberOfSegments, float tension) => throw null; + public void AddCurve(System.Drawing.PointF[] points, float tension) => throw null; + public void AddCurve(System.Drawing.PointF[] points) => throw null; + public void AddEllipse(int x, int y, int width, int height) => throw null; + public void AddEllipse(float x, float y, float width, float height) => throw null; + public void AddEllipse(System.Drawing.RectangleF rect) => throw null; + public void AddEllipse(System.Drawing.Rectangle rect) => throw null; + public void AddLine(int x1, int y1, int x2, int y2) => throw null; + public void AddLine(float x1, float y1, float x2, float y2) => throw null; + public void AddLine(System.Drawing.PointF pt1, System.Drawing.PointF pt2) => throw null; + public void AddLine(System.Drawing.Point pt1, System.Drawing.Point pt2) => throw null; + public void AddLines(System.Drawing.Point[] points) => throw null; + public void AddLines(System.Drawing.PointF[] points) => throw null; + public void AddPath(System.Drawing.Drawing2D.GraphicsPath addingPath, bool connect) => throw null; + public void AddPie(int x, int y, int width, int height, float startAngle, float sweepAngle) => throw null; + public void AddPie(float x, float y, float width, float height, float startAngle, float sweepAngle) => throw null; + public void AddPie(System.Drawing.Rectangle rect, float startAngle, float sweepAngle) => throw null; + public void AddPolygon(System.Drawing.Point[] points) => throw null; + public void AddPolygon(System.Drawing.PointF[] points) => throw null; + public void AddRectangle(System.Drawing.RectangleF rect) => throw null; + public void AddRectangle(System.Drawing.Rectangle rect) => throw null; + public void AddRectangles(System.Drawing.Rectangle[] rects) => throw null; + public void AddRectangles(System.Drawing.RectangleF[] rects) => throw null; + public void AddString(string s, System.Drawing.FontFamily family, int style, float emSize, System.Drawing.RectangleF layoutRect, System.Drawing.StringFormat format) => throw null; + public void AddString(string s, System.Drawing.FontFamily family, int style, float emSize, System.Drawing.Rectangle layoutRect, System.Drawing.StringFormat format) => throw null; + public void AddString(string s, System.Drawing.FontFamily family, int style, float emSize, System.Drawing.PointF origin, System.Drawing.StringFormat format) => throw null; + public void AddString(string s, System.Drawing.FontFamily family, int style, float emSize, System.Drawing.Point origin, System.Drawing.StringFormat format) => throw null; + public void ClearMarkers() => throw null; + public object Clone() => throw null; + public void CloseAllFigures() => throw null; + public void CloseFigure() => throw null; + public void Dispose() => throw null; + public System.Drawing.Drawing2D.FillMode FillMode { get => throw null; set => throw null; } + public void Flatten(System.Drawing.Drawing2D.Matrix matrix, float flatness) => throw null; + public void Flatten(System.Drawing.Drawing2D.Matrix matrix) => throw null; + public void Flatten() => throw null; + public System.Drawing.RectangleF GetBounds(System.Drawing.Drawing2D.Matrix matrix, System.Drawing.Pen pen) => throw null; + public System.Drawing.RectangleF GetBounds(System.Drawing.Drawing2D.Matrix matrix) => throw null; + public System.Drawing.RectangleF GetBounds() => throw null; + public System.Drawing.PointF GetLastPoint() => throw null; + public GraphicsPath(System.Drawing.Point[] pts, System.Byte[] types, System.Drawing.Drawing2D.FillMode fillMode) => throw null; + public GraphicsPath(System.Drawing.Point[] pts, System.Byte[] types) => throw null; + public GraphicsPath(System.Drawing.PointF[] pts, System.Byte[] types, System.Drawing.Drawing2D.FillMode fillMode) => throw null; + public GraphicsPath(System.Drawing.PointF[] pts, System.Byte[] types) => throw null; + public GraphicsPath(System.Drawing.Drawing2D.FillMode fillMode) => throw null; + public GraphicsPath() => throw null; + public bool IsOutlineVisible(int x, int y, System.Drawing.Pen pen, System.Drawing.Graphics graphics) => throw null; + public bool IsOutlineVisible(int x, int y, System.Drawing.Pen pen) => throw null; + public bool IsOutlineVisible(float x, float y, System.Drawing.Pen pen, System.Drawing.Graphics graphics) => throw null; + public bool IsOutlineVisible(float x, float y, System.Drawing.Pen pen) => throw null; + public bool IsOutlineVisible(System.Drawing.PointF pt, System.Drawing.Pen pen, System.Drawing.Graphics graphics) => throw null; + public bool IsOutlineVisible(System.Drawing.PointF point, System.Drawing.Pen pen) => throw null; + public bool IsOutlineVisible(System.Drawing.Point pt, System.Drawing.Pen pen, System.Drawing.Graphics graphics) => throw null; + public bool IsOutlineVisible(System.Drawing.Point point, System.Drawing.Pen pen) => throw null; + public bool IsVisible(int x, int y, System.Drawing.Graphics graphics) => throw null; + public bool IsVisible(int x, int y) => throw null; + public bool IsVisible(float x, float y, System.Drawing.Graphics graphics) => throw null; + public bool IsVisible(float x, float y) => throw null; + public bool IsVisible(System.Drawing.PointF pt, System.Drawing.Graphics graphics) => throw null; + public bool IsVisible(System.Drawing.PointF point) => throw null; + public bool IsVisible(System.Drawing.Point pt, System.Drawing.Graphics graphics) => throw null; + public bool IsVisible(System.Drawing.Point point) => throw null; + public System.Drawing.Drawing2D.PathData PathData { get => throw null; } + public System.Drawing.PointF[] PathPoints { get => throw null; } + public System.Byte[] PathTypes { get => throw null; } + public int PointCount { get => throw null; } + public void Reset() => throw null; + public void Reverse() => throw null; + public void SetMarkers() => throw null; + public void StartFigure() => throw null; + public void Transform(System.Drawing.Drawing2D.Matrix matrix) => throw null; + public void Warp(System.Drawing.PointF[] destPoints, System.Drawing.RectangleF srcRect, System.Drawing.Drawing2D.Matrix matrix, System.Drawing.Drawing2D.WarpMode warpMode, float flatness) => throw null; + public void Warp(System.Drawing.PointF[] destPoints, System.Drawing.RectangleF srcRect, System.Drawing.Drawing2D.Matrix matrix, System.Drawing.Drawing2D.WarpMode warpMode) => throw null; + public void Warp(System.Drawing.PointF[] destPoints, System.Drawing.RectangleF srcRect, System.Drawing.Drawing2D.Matrix matrix) => throw null; + public void Warp(System.Drawing.PointF[] destPoints, System.Drawing.RectangleF srcRect) => throw null; + public void Widen(System.Drawing.Pen pen, System.Drawing.Drawing2D.Matrix matrix, float flatness) => throw null; + public void Widen(System.Drawing.Pen pen, System.Drawing.Drawing2D.Matrix matrix) => throw null; + public void Widen(System.Drawing.Pen pen) => throw null; + // ERR: Stub generator didn't handle member: ~GraphicsPath + } + + // Generated from `System.Drawing.Drawing2D.GraphicsPathIterator` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public class GraphicsPathIterator : System.MarshalByRefObject, System.IDisposable + { + public int CopyData(ref System.Drawing.PointF[] points, ref System.Byte[] types, int startIndex, int endIndex) => throw null; + public int Count { get => throw null; } + public void Dispose() => throw null; + public int Enumerate(ref System.Drawing.PointF[] points, ref System.Byte[] types) => throw null; + public GraphicsPathIterator(System.Drawing.Drawing2D.GraphicsPath path) => throw null; + public bool HasCurve() => throw null; + public int NextMarker(out int startIndex, out int endIndex) => throw null; + public int NextMarker(System.Drawing.Drawing2D.GraphicsPath path) => throw null; + public int NextPathType(out System.Byte pathType, out int startIndex, out int endIndex) => throw null; + public int NextSubpath(out int startIndex, out int endIndex, out bool isClosed) => throw null; + public int NextSubpath(System.Drawing.Drawing2D.GraphicsPath path, out bool isClosed) => throw null; + public void Rewind() => throw null; + public int SubpathCount { get => throw null; } + // ERR: Stub generator didn't handle member: ~GraphicsPathIterator + } + + // Generated from `System.Drawing.Drawing2D.GraphicsState` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public class GraphicsState : System.MarshalByRefObject + { + } + + // Generated from `System.Drawing.Drawing2D.HatchBrush` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public class HatchBrush : System.Drawing.Brush + { + public System.Drawing.Color BackgroundColor { get => throw null; } + public override object Clone() => throw null; + public System.Drawing.Color ForegroundColor { get => throw null; } + public HatchBrush(System.Drawing.Drawing2D.HatchStyle hatchstyle, System.Drawing.Color foreColor, System.Drawing.Color backColor) => throw null; + public HatchBrush(System.Drawing.Drawing2D.HatchStyle hatchstyle, System.Drawing.Color foreColor) => throw null; + public System.Drawing.Drawing2D.HatchStyle HatchStyle { get => throw null; } + } + + // Generated from `System.Drawing.Drawing2D.HatchStyle` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public enum HatchStyle + { + BackwardDiagonal, + Cross, + DarkDownwardDiagonal, + DarkHorizontal, + DarkUpwardDiagonal, + DarkVertical, + DashedDownwardDiagonal, + DashedHorizontal, + DashedUpwardDiagonal, + DashedVertical, + DiagonalBrick, + DiagonalCross, + Divot, + DottedDiamond, + DottedGrid, + ForwardDiagonal, + Horizontal, + HorizontalBrick, + LargeCheckerBoard, + LargeConfetti, + LargeGrid, + LightDownwardDiagonal, + LightHorizontal, + LightUpwardDiagonal, + LightVertical, + Max, + Min, + NarrowHorizontal, + NarrowVertical, + OutlinedDiamond, + Percent05, + Percent10, + Percent20, + Percent25, + Percent30, + Percent40, + Percent50, + Percent60, + Percent70, + Percent75, + Percent80, + Percent90, + Plaid, + Shingle, + SmallCheckerBoard, + SmallConfetti, + SmallGrid, + SolidDiamond, + Sphere, + Trellis, + Vertical, + Wave, + Weave, + WideDownwardDiagonal, + WideUpwardDiagonal, + ZigZag, + } + + // Generated from `System.Drawing.Drawing2D.InterpolationMode` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public enum InterpolationMode + { + Bicubic, + Bilinear, + Default, + High, + HighQualityBicubic, + HighQualityBilinear, + Invalid, + Low, + NearestNeighbor, + } + + // Generated from `System.Drawing.Drawing2D.LineCap` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public enum LineCap + { + AnchorMask, + ArrowAnchor, + Custom, + DiamondAnchor, + Flat, + NoAnchor, + Round, + RoundAnchor, + Square, + SquareAnchor, + Triangle, + } + + // Generated from `System.Drawing.Drawing2D.LineJoin` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public enum LineJoin + { + Bevel, + Miter, + MiterClipped, + Round, + } + + // Generated from `System.Drawing.Drawing2D.LinearGradientBrush` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public class LinearGradientBrush : System.Drawing.Brush + { + public System.Drawing.Drawing2D.Blend Blend { get => throw null; set => throw null; } + public override object Clone() => throw null; + public bool GammaCorrection { get => throw null; set => throw null; } + public System.Drawing.Drawing2D.ColorBlend InterpolationColors { get => throw null; set => throw null; } + public System.Drawing.Color[] LinearColors { get => throw null; set => throw null; } + public LinearGradientBrush(System.Drawing.RectangleF rect, System.Drawing.Color color1, System.Drawing.Color color2, float angle, bool isAngleScaleable) => throw null; + public LinearGradientBrush(System.Drawing.RectangleF rect, System.Drawing.Color color1, System.Drawing.Color color2, float angle) => throw null; + public LinearGradientBrush(System.Drawing.RectangleF rect, System.Drawing.Color color1, System.Drawing.Color color2, System.Drawing.Drawing2D.LinearGradientMode linearGradientMode) => throw null; + public LinearGradientBrush(System.Drawing.Rectangle rect, System.Drawing.Color color1, System.Drawing.Color color2, float angle, bool isAngleScaleable) => throw null; + public LinearGradientBrush(System.Drawing.Rectangle rect, System.Drawing.Color color1, System.Drawing.Color color2, float angle) => throw null; + public LinearGradientBrush(System.Drawing.Rectangle rect, System.Drawing.Color color1, System.Drawing.Color color2, System.Drawing.Drawing2D.LinearGradientMode linearGradientMode) => throw null; + public LinearGradientBrush(System.Drawing.PointF point1, System.Drawing.PointF point2, System.Drawing.Color color1, System.Drawing.Color color2) => throw null; + public LinearGradientBrush(System.Drawing.Point point1, System.Drawing.Point point2, System.Drawing.Color color1, System.Drawing.Color color2) => throw null; + public void MultiplyTransform(System.Drawing.Drawing2D.Matrix matrix, System.Drawing.Drawing2D.MatrixOrder order) => throw null; + public void MultiplyTransform(System.Drawing.Drawing2D.Matrix matrix) => throw null; + public System.Drawing.RectangleF Rectangle { get => throw null; } + public void ResetTransform() => throw null; + public void RotateTransform(float angle, System.Drawing.Drawing2D.MatrixOrder order) => throw null; + public void RotateTransform(float angle) => throw null; + public void ScaleTransform(float sx, float sy, System.Drawing.Drawing2D.MatrixOrder order) => throw null; + public void ScaleTransform(float sx, float sy) => throw null; + public void SetBlendTriangularShape(float focus, float scale) => throw null; + public void SetBlendTriangularShape(float focus) => throw null; + public void SetSigmaBellShape(float focus, float scale) => throw null; + public void SetSigmaBellShape(float focus) => throw null; + public System.Drawing.Drawing2D.Matrix Transform { get => throw null; set => throw null; } + public void TranslateTransform(float dx, float dy, System.Drawing.Drawing2D.MatrixOrder order) => throw null; + public void TranslateTransform(float dx, float dy) => throw null; + public System.Drawing.Drawing2D.WrapMode WrapMode { get => throw null; set => throw null; } + } + + // Generated from `System.Drawing.Drawing2D.LinearGradientMode` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public enum LinearGradientMode + { + BackwardDiagonal, + ForwardDiagonal, + Horizontal, + Vertical, + } + + // Generated from `System.Drawing.Drawing2D.Matrix` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public class Matrix : System.MarshalByRefObject, System.IDisposable + { + public System.Drawing.Drawing2D.Matrix Clone() => throw null; + public void Dispose() => throw null; + public float[] Elements { get => throw null; } + public override bool Equals(object obj) => throw null; + public override int GetHashCode() => throw null; + public void Invert() => throw null; + public bool IsIdentity { get => throw null; } + public bool IsInvertible { get => throw null; } + public Matrix(float m11, float m12, float m21, float m22, float dx, float dy) => throw null; + public Matrix(System.Drawing.RectangleF rect, System.Drawing.PointF[] plgpts) => throw null; + public Matrix(System.Drawing.Rectangle rect, System.Drawing.Point[] plgpts) => throw null; + public Matrix() => throw null; + public void Multiply(System.Drawing.Drawing2D.Matrix matrix, System.Drawing.Drawing2D.MatrixOrder order) => throw null; + public void Multiply(System.Drawing.Drawing2D.Matrix matrix) => throw null; + public float OffsetX { get => throw null; } + public float OffsetY { get => throw null; } + public void Reset() => throw null; + public void Rotate(float angle, System.Drawing.Drawing2D.MatrixOrder order) => throw null; + public void Rotate(float angle) => throw null; + public void RotateAt(float angle, System.Drawing.PointF point, System.Drawing.Drawing2D.MatrixOrder order) => throw null; + public void RotateAt(float angle, System.Drawing.PointF point) => throw null; + public void Scale(float scaleX, float scaleY, System.Drawing.Drawing2D.MatrixOrder order) => throw null; + public void Scale(float scaleX, float scaleY) => throw null; + public void Shear(float shearX, float shearY, System.Drawing.Drawing2D.MatrixOrder order) => throw null; + public void Shear(float shearX, float shearY) => throw null; + public void TransformPoints(System.Drawing.Point[] pts) => throw null; + public void TransformPoints(System.Drawing.PointF[] pts) => throw null; + public void TransformVectors(System.Drawing.Point[] pts) => throw null; + public void TransformVectors(System.Drawing.PointF[] pts) => throw null; + public void Translate(float offsetX, float offsetY, System.Drawing.Drawing2D.MatrixOrder order) => throw null; + public void Translate(float offsetX, float offsetY) => throw null; + public void VectorTransformPoints(System.Drawing.Point[] pts) => throw null; + // ERR: Stub generator didn't handle member: ~Matrix + } + + // Generated from `System.Drawing.Drawing2D.MatrixOrder` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public enum MatrixOrder + { + Append, + Prepend, + } + + // Generated from `System.Drawing.Drawing2D.PathData` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public class PathData + { + public PathData() => throw null; + public System.Drawing.PointF[] Points { get => throw null; set => throw null; } + public System.Byte[] Types { get => throw null; set => throw null; } + } + + // Generated from `System.Drawing.Drawing2D.PathGradientBrush` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public class PathGradientBrush : System.Drawing.Brush + { + public System.Drawing.Drawing2D.Blend Blend { get => throw null; set => throw null; } + public System.Drawing.Color CenterColor { get => throw null; set => throw null; } + public System.Drawing.PointF CenterPoint { get => throw null; set => throw null; } + public override object Clone() => throw null; + public System.Drawing.PointF FocusScales { get => throw null; set => throw null; } + public System.Drawing.Drawing2D.ColorBlend InterpolationColors { get => throw null; set => throw null; } + public void MultiplyTransform(System.Drawing.Drawing2D.Matrix matrix, System.Drawing.Drawing2D.MatrixOrder order) => throw null; + public void MultiplyTransform(System.Drawing.Drawing2D.Matrix matrix) => throw null; + public PathGradientBrush(System.Drawing.Point[] points, System.Drawing.Drawing2D.WrapMode wrapMode) => throw null; + public PathGradientBrush(System.Drawing.Point[] points) => throw null; + public PathGradientBrush(System.Drawing.PointF[] points, System.Drawing.Drawing2D.WrapMode wrapMode) => throw null; + public PathGradientBrush(System.Drawing.PointF[] points) => throw null; + public PathGradientBrush(System.Drawing.Drawing2D.GraphicsPath path) => throw null; + public System.Drawing.RectangleF Rectangle { get => throw null; } + public void ResetTransform() => throw null; + public void RotateTransform(float angle, System.Drawing.Drawing2D.MatrixOrder order) => throw null; + public void RotateTransform(float angle) => throw null; + public void ScaleTransform(float sx, float sy, System.Drawing.Drawing2D.MatrixOrder order) => throw null; + public void ScaleTransform(float sx, float sy) => throw null; + public void SetBlendTriangularShape(float focus, float scale) => throw null; + public void SetBlendTriangularShape(float focus) => throw null; + public void SetSigmaBellShape(float focus, float scale) => throw null; + public void SetSigmaBellShape(float focus) => throw null; + public System.Drawing.Color[] SurroundColors { get => throw null; set => throw null; } + public System.Drawing.Drawing2D.Matrix Transform { get => throw null; set => throw null; } + public void TranslateTransform(float dx, float dy, System.Drawing.Drawing2D.MatrixOrder order) => throw null; + public void TranslateTransform(float dx, float dy) => throw null; + public System.Drawing.Drawing2D.WrapMode WrapMode { get => throw null; set => throw null; } + } + + // Generated from `System.Drawing.Drawing2D.PathPointType` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public enum PathPointType + { + Bezier, + Bezier3, + CloseSubpath, + DashMode, + Line, + PathMarker, + PathTypeMask, + Start, + } + + // Generated from `System.Drawing.Drawing2D.PenAlignment` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public enum PenAlignment + { + Center, + Inset, + Left, + Outset, + Right, + } + + // Generated from `System.Drawing.Drawing2D.PenType` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public enum PenType + { + HatchFill, + LinearGradient, + PathGradient, + SolidColor, + TextureFill, + } + + // Generated from `System.Drawing.Drawing2D.PixelOffsetMode` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public enum PixelOffsetMode + { + Default, + Half, + HighQuality, + HighSpeed, + Invalid, + None, + } + + // Generated from `System.Drawing.Drawing2D.QualityMode` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public enum QualityMode + { + Default, + High, + Invalid, + Low, + } + + // Generated from `System.Drawing.Drawing2D.RegionData` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public class RegionData + { + public System.Byte[] Data { get => throw null; set => throw null; } + } + + // Generated from `System.Drawing.Drawing2D.SmoothingMode` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public enum SmoothingMode + { + AntiAlias, + Default, + HighQuality, + HighSpeed, + Invalid, + None, + } + + // Generated from `System.Drawing.Drawing2D.WarpMode` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public enum WarpMode + { + Bilinear, + Perspective, + } + + // Generated from `System.Drawing.Drawing2D.WrapMode` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public enum WrapMode + { + Clamp, + Tile, + TileFlipX, + TileFlipXY, + TileFlipY, + } + + } + namespace Imaging + { + // Generated from `System.Drawing.Imaging.BitmapData` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public class BitmapData + { + public BitmapData() => throw null; + public int Height { get => throw null; set => throw null; } + public System.Drawing.Imaging.PixelFormat PixelFormat { get => throw null; set => throw null; } + public int Reserved { get => throw null; set => throw null; } + public System.IntPtr Scan0 { get => throw null; set => throw null; } + public int Stride { get => throw null; set => throw null; } + public int Width { get => throw null; set => throw null; } + } + + // Generated from `System.Drawing.Imaging.ColorAdjustType` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public enum ColorAdjustType + { + Any, + Bitmap, + Brush, + Count, + Default, + Pen, + Text, + } + + // Generated from `System.Drawing.Imaging.ColorChannelFlag` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public enum ColorChannelFlag + { + ColorChannelC, + ColorChannelK, + ColorChannelLast, + ColorChannelM, + ColorChannelY, + } + + // Generated from `System.Drawing.Imaging.ColorMap` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public class ColorMap + { + public ColorMap() => throw null; + public System.Drawing.Color NewColor { get => throw null; set => throw null; } + public System.Drawing.Color OldColor { get => throw null; set => throw null; } + } + + // Generated from `System.Drawing.Imaging.ColorMapType` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public enum ColorMapType + { + Brush, + Default, + } + + // Generated from `System.Drawing.Imaging.ColorMatrix` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public class ColorMatrix + { + public ColorMatrix(float[][] newColorMatrix) => throw null; + public ColorMatrix() => throw null; + public float this[int row, int column] { get => throw null; set => throw null; } + public float Matrix00 { get => throw null; set => throw null; } + public float Matrix01 { get => throw null; set => throw null; } + public float Matrix02 { get => throw null; set => throw null; } + public float Matrix03 { get => throw null; set => throw null; } + public float Matrix04 { get => throw null; set => throw null; } + public float Matrix10 { get => throw null; set => throw null; } + public float Matrix11 { get => throw null; set => throw null; } + public float Matrix12 { get => throw null; set => throw null; } + public float Matrix13 { get => throw null; set => throw null; } + public float Matrix14 { get => throw null; set => throw null; } + public float Matrix20 { get => throw null; set => throw null; } + public float Matrix21 { get => throw null; set => throw null; } + public float Matrix22 { get => throw null; set => throw null; } + public float Matrix23 { get => throw null; set => throw null; } + public float Matrix24 { get => throw null; set => throw null; } + public float Matrix30 { get => throw null; set => throw null; } + public float Matrix31 { get => throw null; set => throw null; } + public float Matrix32 { get => throw null; set => throw null; } + public float Matrix33 { get => throw null; set => throw null; } + public float Matrix34 { get => throw null; set => throw null; } + public float Matrix40 { get => throw null; set => throw null; } + public float Matrix41 { get => throw null; set => throw null; } + public float Matrix42 { get => throw null; set => throw null; } + public float Matrix43 { get => throw null; set => throw null; } + public float Matrix44 { get => throw null; set => throw null; } + } + + // Generated from `System.Drawing.Imaging.ColorMatrixFlag` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public enum ColorMatrixFlag + { + AltGrays, + Default, + SkipGrays, + } + + // Generated from `System.Drawing.Imaging.ColorMode` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public enum ColorMode + { + Argb32Mode, + Argb64Mode, + } + + // Generated from `System.Drawing.Imaging.ColorPalette` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public class ColorPalette + { + public System.Drawing.Color[] Entries { get => throw null; } + public int Flags { get => throw null; } + } + + // Generated from `System.Drawing.Imaging.EmfPlusRecordType` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public enum EmfPlusRecordType + { + BeginContainer, + BeginContainerNoParams, + Clear, + Comment, + DrawArc, + DrawBeziers, + DrawClosedCurve, + DrawCurve, + DrawDriverString, + DrawEllipse, + DrawImage, + DrawImagePoints, + DrawLines, + DrawPath, + DrawPie, + DrawRects, + DrawString, + EmfAbortPath, + EmfAlphaBlend, + EmfAngleArc, + EmfArcTo, + EmfBeginPath, + EmfBitBlt, + EmfChord, + EmfCloseFigure, + EmfColorCorrectPalette, + EmfColorMatchToTargetW, + EmfCreateBrushIndirect, + EmfCreateColorSpace, + EmfCreateColorSpaceW, + EmfCreateDibPatternBrushPt, + EmfCreateMonoBrush, + EmfCreatePalette, + EmfCreatePen, + EmfDeleteColorSpace, + EmfDeleteObject, + EmfDrawEscape, + EmfEllipse, + EmfEndPath, + EmfEof, + EmfExcludeClipRect, + EmfExtCreateFontIndirect, + EmfExtCreatePen, + EmfExtEscape, + EmfExtFloodFill, + EmfExtSelectClipRgn, + EmfExtTextOutA, + EmfExtTextOutW, + EmfFillPath, + EmfFillRgn, + EmfFlattenPath, + EmfForceUfiMapping, + EmfFrameRgn, + EmfGdiComment, + EmfGlsBoundedRecord, + EmfGlsRecord, + EmfGradientFill, + EmfHeader, + EmfIntersectClipRect, + EmfInvertRgn, + EmfLineTo, + EmfMaskBlt, + EmfMax, + EmfMin, + EmfModifyWorldTransform, + EmfMoveToEx, + EmfNamedEscpae, + EmfOffsetClipRgn, + EmfPaintRgn, + EmfPie, + EmfPixelFormat, + EmfPlgBlt, + EmfPlusRecordBase, + EmfPolyBezier, + EmfPolyBezier16, + EmfPolyBezierTo, + EmfPolyBezierTo16, + EmfPolyDraw, + EmfPolyDraw16, + EmfPolyLineTo, + EmfPolyPolygon, + EmfPolyPolygon16, + EmfPolyPolyline, + EmfPolyPolyline16, + EmfPolyTextOutA, + EmfPolyTextOutW, + EmfPolygon, + EmfPolygon16, + EmfPolyline, + EmfPolyline16, + EmfPolylineTo16, + EmfRealizePalette, + EmfRectangle, + EmfReserved069, + EmfReserved117, + EmfResizePalette, + EmfRestoreDC, + EmfRoundArc, + EmfRoundRect, + EmfSaveDC, + EmfScaleViewportExtEx, + EmfScaleWindowExtEx, + EmfSelectClipPath, + EmfSelectObject, + EmfSelectPalette, + EmfSetArcDirection, + EmfSetBkColor, + EmfSetBkMode, + EmfSetBrushOrgEx, + EmfSetColorAdjustment, + EmfSetColorSpace, + EmfSetDIBitsToDevice, + EmfSetIcmMode, + EmfSetIcmProfileA, + EmfSetIcmProfileW, + EmfSetLayout, + EmfSetLinkedUfis, + EmfSetMapMode, + EmfSetMapperFlags, + EmfSetMetaRgn, + EmfSetMiterLimit, + EmfSetPaletteEntries, + EmfSetPixelV, + EmfSetPolyFillMode, + EmfSetROP2, + EmfSetStretchBltMode, + EmfSetTextAlign, + EmfSetTextColor, + EmfSetTextJustification, + EmfSetViewportExtEx, + EmfSetViewportOrgEx, + EmfSetWindowExtEx, + EmfSetWindowOrgEx, + EmfSetWorldTransform, + EmfSmallTextOut, + EmfStartDoc, + EmfStretchBlt, + EmfStretchDIBits, + EmfStrokeAndFillPath, + EmfStrokePath, + EmfTransparentBlt, + EmfWidenPath, + EndContainer, + EndOfFile, + FillClosedCurve, + FillEllipse, + FillPath, + FillPie, + FillPolygon, + FillRects, + FillRegion, + GetDC, + Header, + Invalid, + Max, + Min, + MultiFormatEnd, + MultiFormatSection, + MultiFormatStart, + MultiplyWorldTransform, + Object, + OffsetClip, + ResetClip, + ResetWorldTransform, + Restore, + RotateWorldTransform, + Save, + ScaleWorldTransform, + SetAntiAliasMode, + SetClipPath, + SetClipRect, + SetClipRegion, + SetCompositingMode, + SetCompositingQuality, + SetInterpolationMode, + SetPageTransform, + SetPixelOffsetMode, + SetRenderingOrigin, + SetTextContrast, + SetTextRenderingHint, + SetWorldTransform, + Total, + TranslateWorldTransform, + WmfAnimatePalette, + WmfArc, + WmfBitBlt, + WmfChord, + WmfCreateBrushIndirect, + WmfCreateFontIndirect, + WmfCreatePalette, + WmfCreatePatternBrush, + WmfCreatePenIndirect, + WmfCreateRegion, + WmfDeleteObject, + WmfDibBitBlt, + WmfDibCreatePatternBrush, + WmfDibStretchBlt, + WmfEllipse, + WmfEscape, + WmfExcludeClipRect, + WmfExtFloodFill, + WmfExtTextOut, + WmfFillRegion, + WmfFloodFill, + WmfFrameRegion, + WmfIntersectClipRect, + WmfInvertRegion, + WmfLineTo, + WmfMoveTo, + WmfOffsetCilpRgn, + WmfOffsetViewportOrg, + WmfOffsetWindowOrg, + WmfPaintRegion, + WmfPatBlt, + WmfPie, + WmfPolyPolygon, + WmfPolygon, + WmfPolyline, + WmfRealizePalette, + WmfRecordBase, + WmfRectangle, + WmfResizePalette, + WmfRestoreDC, + WmfRoundRect, + WmfSaveDC, + WmfScaleViewportExt, + WmfScaleWindowExt, + WmfSelectClipRegion, + WmfSelectObject, + WmfSelectPalette, + WmfSetBkColor, + WmfSetBkMode, + WmfSetDibToDev, + WmfSetLayout, + WmfSetMapMode, + WmfSetMapperFlags, + WmfSetPalEntries, + WmfSetPixel, + WmfSetPolyFillMode, + WmfSetROP2, + WmfSetRelAbs, + WmfSetStretchBltMode, + WmfSetTextAlign, + WmfSetTextCharExtra, + WmfSetTextColor, + WmfSetTextJustification, + WmfSetViewportExt, + WmfSetViewportOrg, + WmfSetWindowExt, + WmfSetWindowOrg, + WmfStretchBlt, + WmfStretchDib, + WmfTextOut, + } + + // Generated from `System.Drawing.Imaging.EmfType` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public enum EmfType + { + EmfOnly, + EmfPlusDual, + EmfPlusOnly, + } + + // Generated from `System.Drawing.Imaging.Encoder` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public class Encoder + { + public static System.Drawing.Imaging.Encoder ChrominanceTable; + public static System.Drawing.Imaging.Encoder ColorDepth; + public static System.Drawing.Imaging.Encoder Compression; + public Encoder(System.Guid guid) => throw null; + public System.Guid Guid { get => throw null; } + public static System.Drawing.Imaging.Encoder LuminanceTable; + public static System.Drawing.Imaging.Encoder Quality; + public static System.Drawing.Imaging.Encoder RenderMethod; + public static System.Drawing.Imaging.Encoder SaveFlag; + public static System.Drawing.Imaging.Encoder ScanMethod; + public static System.Drawing.Imaging.Encoder Transformation; + public static System.Drawing.Imaging.Encoder Version; + } + + // Generated from `System.Drawing.Imaging.EncoderParameter` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public class EncoderParameter : System.IDisposable + { + public void Dispose() => throw null; + public System.Drawing.Imaging.Encoder Encoder { get => throw null; set => throw null; } + public EncoderParameter(System.Drawing.Imaging.Encoder encoder, string value) => throw null; + public EncoderParameter(System.Drawing.Imaging.Encoder encoder, int[] numerator1, int[] denominator1, int[] numerator2, int[] denominator2) => throw null; + public EncoderParameter(System.Drawing.Imaging.Encoder encoder, int[] numerator, int[] denominator) => throw null; + public EncoderParameter(System.Drawing.Imaging.Encoder encoder, int numerator1, int demoninator1, int numerator2, int demoninator2) => throw null; + public EncoderParameter(System.Drawing.Imaging.Encoder encoder, int numerator, int denominator) => throw null; + public EncoderParameter(System.Drawing.Imaging.Encoder encoder, int numberValues, System.Drawing.Imaging.EncoderParameterValueType type, System.IntPtr value) => throw null; + public EncoderParameter(System.Drawing.Imaging.Encoder encoder, int NumberOfValues, int Type, int Value) => throw null; + public EncoderParameter(System.Drawing.Imaging.Encoder encoder, System.Int64[] value) => throw null; + public EncoderParameter(System.Drawing.Imaging.Encoder encoder, System.Int64[] rangebegin, System.Int64[] rangeend) => throw null; + public EncoderParameter(System.Drawing.Imaging.Encoder encoder, System.Int64 value) => throw null; + public EncoderParameter(System.Drawing.Imaging.Encoder encoder, System.Int64 rangebegin, System.Int64 rangeend) => throw null; + public EncoderParameter(System.Drawing.Imaging.Encoder encoder, System.Int16[] value) => throw null; + public EncoderParameter(System.Drawing.Imaging.Encoder encoder, System.Int16 value) => throw null; + public EncoderParameter(System.Drawing.Imaging.Encoder encoder, System.Byte[] value, bool undefined) => throw null; + public EncoderParameter(System.Drawing.Imaging.Encoder encoder, System.Byte[] value) => throw null; + public EncoderParameter(System.Drawing.Imaging.Encoder encoder, System.Byte value, bool undefined) => throw null; + public EncoderParameter(System.Drawing.Imaging.Encoder encoder, System.Byte value) => throw null; + public int NumberOfValues { get => throw null; } + public System.Drawing.Imaging.EncoderParameterValueType Type { get => throw null; } + public System.Drawing.Imaging.EncoderParameterValueType ValueType { get => throw null; } + // ERR: Stub generator didn't handle member: ~EncoderParameter + } + + // Generated from `System.Drawing.Imaging.EncoderParameterValueType` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public enum EncoderParameterValueType + { + ValueTypeAscii, + ValueTypeByte, + ValueTypeLong, + ValueTypeLongRange, + ValueTypeRational, + ValueTypeRationalRange, + ValueTypeShort, + ValueTypeUndefined, + } + + // Generated from `System.Drawing.Imaging.EncoderParameters` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public class EncoderParameters : System.IDisposable + { + public void Dispose() => throw null; + public EncoderParameters(int count) => throw null; + public EncoderParameters() => throw null; + public System.Drawing.Imaging.EncoderParameter[] Param { get => throw null; set => throw null; } + } + + // Generated from `System.Drawing.Imaging.EncoderValue` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public enum EncoderValue + { + ColorTypeCMYK, + ColorTypeYCCK, + CompressionCCITT3, + CompressionCCITT4, + CompressionLZW, + CompressionNone, + CompressionRle, + Flush, + FrameDimensionPage, + FrameDimensionResolution, + FrameDimensionTime, + LastFrame, + MultiFrame, + RenderNonProgressive, + RenderProgressive, + ScanMethodInterlaced, + ScanMethodNonInterlaced, + TransformFlipHorizontal, + TransformFlipVertical, + TransformRotate180, + TransformRotate270, + TransformRotate90, + VersionGif87, + VersionGif89, + } + + // Generated from `System.Drawing.Imaging.FrameDimension` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public class FrameDimension + { + public override bool Equals(object o) => throw null; + public FrameDimension(System.Guid guid) => throw null; + public override int GetHashCode() => throw null; + public System.Guid Guid { get => throw null; } + public static System.Drawing.Imaging.FrameDimension Page { get => throw null; } + public static System.Drawing.Imaging.FrameDimension Resolution { get => throw null; } + public static System.Drawing.Imaging.FrameDimension Time { get => throw null; } + public override string ToString() => throw null; + } + + // Generated from `System.Drawing.Imaging.ImageAttributes` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public class ImageAttributes : System.IDisposable, System.ICloneable + { + public void ClearBrushRemapTable() => throw null; + public void ClearColorKey(System.Drawing.Imaging.ColorAdjustType type) => throw null; + public void ClearColorKey() => throw null; + public void ClearColorMatrix(System.Drawing.Imaging.ColorAdjustType type) => throw null; + public void ClearColorMatrix() => throw null; + public void ClearGamma(System.Drawing.Imaging.ColorAdjustType type) => throw null; + public void ClearGamma() => throw null; + public void ClearNoOp(System.Drawing.Imaging.ColorAdjustType type) => throw null; + public void ClearNoOp() => throw null; + public void ClearOutputChannel(System.Drawing.Imaging.ColorAdjustType type) => throw null; + public void ClearOutputChannel() => throw null; + public void ClearOutputChannelColorProfile(System.Drawing.Imaging.ColorAdjustType type) => throw null; + public void ClearOutputChannelColorProfile() => throw null; + public void ClearRemapTable(System.Drawing.Imaging.ColorAdjustType type) => throw null; + public void ClearRemapTable() => throw null; + public void ClearThreshold(System.Drawing.Imaging.ColorAdjustType type) => throw null; + public void ClearThreshold() => throw null; + public object Clone() => throw null; + public void Dispose() => throw null; + public void GetAdjustedPalette(System.Drawing.Imaging.ColorPalette palette, System.Drawing.Imaging.ColorAdjustType type) => throw null; + public ImageAttributes() => throw null; + public void SetBrushRemapTable(System.Drawing.Imaging.ColorMap[] map) => throw null; + public void SetColorKey(System.Drawing.Color colorLow, System.Drawing.Color colorHigh, System.Drawing.Imaging.ColorAdjustType type) => throw null; + public void SetColorKey(System.Drawing.Color colorLow, System.Drawing.Color colorHigh) => throw null; + public void SetColorMatrices(System.Drawing.Imaging.ColorMatrix newColorMatrix, System.Drawing.Imaging.ColorMatrix grayMatrix, System.Drawing.Imaging.ColorMatrixFlag mode, System.Drawing.Imaging.ColorAdjustType type) => throw null; + public void SetColorMatrices(System.Drawing.Imaging.ColorMatrix newColorMatrix, System.Drawing.Imaging.ColorMatrix grayMatrix, System.Drawing.Imaging.ColorMatrixFlag flags) => throw null; + public void SetColorMatrices(System.Drawing.Imaging.ColorMatrix newColorMatrix, System.Drawing.Imaging.ColorMatrix grayMatrix) => throw null; + public void SetColorMatrix(System.Drawing.Imaging.ColorMatrix newColorMatrix, System.Drawing.Imaging.ColorMatrixFlag mode, System.Drawing.Imaging.ColorAdjustType type) => throw null; + public void SetColorMatrix(System.Drawing.Imaging.ColorMatrix newColorMatrix, System.Drawing.Imaging.ColorMatrixFlag flags) => throw null; + public void SetColorMatrix(System.Drawing.Imaging.ColorMatrix newColorMatrix) => throw null; + public void SetGamma(float gamma, System.Drawing.Imaging.ColorAdjustType type) => throw null; + public void SetGamma(float gamma) => throw null; + public void SetNoOp(System.Drawing.Imaging.ColorAdjustType type) => throw null; + public void SetNoOp() => throw null; + public void SetOutputChannel(System.Drawing.Imaging.ColorChannelFlag flags, System.Drawing.Imaging.ColorAdjustType type) => throw null; + public void SetOutputChannel(System.Drawing.Imaging.ColorChannelFlag flags) => throw null; + public void SetOutputChannelColorProfile(string colorProfileFilename, System.Drawing.Imaging.ColorAdjustType type) => throw null; + public void SetOutputChannelColorProfile(string colorProfileFilename) => throw null; + public void SetRemapTable(System.Drawing.Imaging.ColorMap[] map, System.Drawing.Imaging.ColorAdjustType type) => throw null; + public void SetRemapTable(System.Drawing.Imaging.ColorMap[] map) => throw null; + public void SetThreshold(float threshold, System.Drawing.Imaging.ColorAdjustType type) => throw null; + public void SetThreshold(float threshold) => throw null; + public void SetWrapMode(System.Drawing.Drawing2D.WrapMode mode, System.Drawing.Color color, bool clamp) => throw null; + public void SetWrapMode(System.Drawing.Drawing2D.WrapMode mode, System.Drawing.Color color) => throw null; + public void SetWrapMode(System.Drawing.Drawing2D.WrapMode mode) => throw null; + // ERR: Stub generator didn't handle member: ~ImageAttributes + } + + // Generated from `System.Drawing.Imaging.ImageCodecFlags` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + [System.Flags] + public enum ImageCodecFlags + { + BlockingDecode, + Builtin, + Decoder, + Encoder, + SeekableEncode, + SupportBitmap, + SupportVector, + System, + User, + } + + // Generated from `System.Drawing.Imaging.ImageCodecInfo` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public class ImageCodecInfo + { + public System.Guid Clsid { get => throw null; set => throw null; } + public string CodecName { get => throw null; set => throw null; } + public string DllName { get => throw null; set => throw null; } + public string FilenameExtension { get => throw null; set => throw null; } + public System.Drawing.Imaging.ImageCodecFlags Flags { get => throw null; set => throw null; } + public string FormatDescription { get => throw null; set => throw null; } + public System.Guid FormatID { get => throw null; set => throw null; } + public static System.Drawing.Imaging.ImageCodecInfo[] GetImageDecoders() => throw null; + public static System.Drawing.Imaging.ImageCodecInfo[] GetImageEncoders() => throw null; + public string MimeType { get => throw null; set => throw null; } + public System.Byte[][] SignatureMasks { get => throw null; set => throw null; } + public System.Byte[][] SignaturePatterns { get => throw null; set => throw null; } + public int Version { get => throw null; set => throw null; } + } + + // Generated from `System.Drawing.Imaging.ImageFlags` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + [System.Flags] + public enum ImageFlags + { + Caching, + ColorSpaceCmyk, + ColorSpaceGray, + ColorSpaceRgb, + ColorSpaceYcbcr, + ColorSpaceYcck, + HasAlpha, + HasRealDpi, + HasRealPixelSize, + HasTranslucent, + None, + PartiallyScalable, + ReadOnly, + Scalable, + } + + // Generated from `System.Drawing.Imaging.ImageFormat` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public class ImageFormat + { + public static System.Drawing.Imaging.ImageFormat Bmp { get => throw null; } + public static System.Drawing.Imaging.ImageFormat Emf { get => throw null; } + public override bool Equals(object o) => throw null; + public static System.Drawing.Imaging.ImageFormat Exif { get => throw null; } + public override int GetHashCode() => throw null; + public static System.Drawing.Imaging.ImageFormat Gif { get => throw null; } + public System.Guid Guid { get => throw null; } + public static System.Drawing.Imaging.ImageFormat Icon { get => throw null; } + public ImageFormat(System.Guid guid) => throw null; + public static System.Drawing.Imaging.ImageFormat Jpeg { get => throw null; } + public static System.Drawing.Imaging.ImageFormat MemoryBmp { get => throw null; } + public static System.Drawing.Imaging.ImageFormat Png { get => throw null; } + public static System.Drawing.Imaging.ImageFormat Tiff { get => throw null; } + public override string ToString() => throw null; + public static System.Drawing.Imaging.ImageFormat Wmf { get => throw null; } + } + + // Generated from `System.Drawing.Imaging.ImageLockMode` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public enum ImageLockMode + { + ReadOnly, + ReadWrite, + UserInputBuffer, + WriteOnly, + } + + // Generated from `System.Drawing.Imaging.MetaHeader` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public class MetaHeader + { + public System.Int16 HeaderSize { get => throw null; set => throw null; } + public int MaxRecord { get => throw null; set => throw null; } + public MetaHeader() => throw null; + public System.Int16 NoObjects { get => throw null; set => throw null; } + public System.Int16 NoParameters { get => throw null; set => throw null; } + public int Size { get => throw null; set => throw null; } + public System.Int16 Type { get => throw null; set => throw null; } + public System.Int16 Version { get => throw null; set => throw null; } + } + + // Generated from `System.Drawing.Imaging.Metafile` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public class Metafile : System.Drawing.Image + { + public System.IntPtr GetHenhmetafile() => throw null; + public static System.Drawing.Imaging.MetafileHeader GetMetafileHeader(string fileName) => throw null; + public static System.Drawing.Imaging.MetafileHeader GetMetafileHeader(System.IntPtr hmetafile, System.Drawing.Imaging.WmfPlaceableFileHeader wmfHeader) => throw null; + public static System.Drawing.Imaging.MetafileHeader GetMetafileHeader(System.IntPtr henhmetafile) => throw null; + public static System.Drawing.Imaging.MetafileHeader GetMetafileHeader(System.IO.Stream stream) => throw null; + public System.Drawing.Imaging.MetafileHeader GetMetafileHeader() => throw null; + public Metafile(string filename) => throw null; + public Metafile(string fileName, System.IntPtr referenceHdc, System.Drawing.RectangleF frameRect, System.Drawing.Imaging.MetafileFrameUnit frameUnit, string desc) => throw null; + public Metafile(string fileName, System.IntPtr referenceHdc, System.Drawing.RectangleF frameRect, System.Drawing.Imaging.MetafileFrameUnit frameUnit, System.Drawing.Imaging.EmfType type, string description) => throw null; + public Metafile(string fileName, System.IntPtr referenceHdc, System.Drawing.RectangleF frameRect, System.Drawing.Imaging.MetafileFrameUnit frameUnit, System.Drawing.Imaging.EmfType type) => throw null; + public Metafile(string fileName, System.IntPtr referenceHdc, System.Drawing.RectangleF frameRect, System.Drawing.Imaging.MetafileFrameUnit frameUnit) => throw null; + public Metafile(string fileName, System.IntPtr referenceHdc, System.Drawing.RectangleF frameRect) => throw null; + public Metafile(string fileName, System.IntPtr referenceHdc, System.Drawing.Rectangle frameRect, System.Drawing.Imaging.MetafileFrameUnit frameUnit, string description) => throw null; + public Metafile(string fileName, System.IntPtr referenceHdc, System.Drawing.Rectangle frameRect, System.Drawing.Imaging.MetafileFrameUnit frameUnit, System.Drawing.Imaging.EmfType type, string description) => throw null; + public Metafile(string fileName, System.IntPtr referenceHdc, System.Drawing.Rectangle frameRect, System.Drawing.Imaging.MetafileFrameUnit frameUnit, System.Drawing.Imaging.EmfType type) => throw null; + public Metafile(string fileName, System.IntPtr referenceHdc, System.Drawing.Rectangle frameRect, System.Drawing.Imaging.MetafileFrameUnit frameUnit) => throw null; + public Metafile(string fileName, System.IntPtr referenceHdc, System.Drawing.Rectangle frameRect) => throw null; + public Metafile(string fileName, System.IntPtr referenceHdc, System.Drawing.Imaging.EmfType type, string description) => throw null; + public Metafile(string fileName, System.IntPtr referenceHdc, System.Drawing.Imaging.EmfType type) => throw null; + public Metafile(string fileName, System.IntPtr referenceHdc) => throw null; + public Metafile(System.IntPtr referenceHdc, System.Drawing.RectangleF frameRect, System.Drawing.Imaging.MetafileFrameUnit frameUnit, System.Drawing.Imaging.EmfType type, string description) => throw null; + public Metafile(System.IntPtr referenceHdc, System.Drawing.RectangleF frameRect, System.Drawing.Imaging.MetafileFrameUnit frameUnit, System.Drawing.Imaging.EmfType type) => throw null; + public Metafile(System.IntPtr referenceHdc, System.Drawing.RectangleF frameRect, System.Drawing.Imaging.MetafileFrameUnit frameUnit) => throw null; + public Metafile(System.IntPtr referenceHdc, System.Drawing.RectangleF frameRect) => throw null; + public Metafile(System.IntPtr referenceHdc, System.Drawing.Rectangle frameRect, System.Drawing.Imaging.MetafileFrameUnit frameUnit, System.Drawing.Imaging.EmfType type, string desc) => throw null; + public Metafile(System.IntPtr referenceHdc, System.Drawing.Rectangle frameRect, System.Drawing.Imaging.MetafileFrameUnit frameUnit, System.Drawing.Imaging.EmfType type) => throw null; + public Metafile(System.IntPtr referenceHdc, System.Drawing.Rectangle frameRect, System.Drawing.Imaging.MetafileFrameUnit frameUnit) => throw null; + public Metafile(System.IntPtr referenceHdc, System.Drawing.Rectangle frameRect) => throw null; + public Metafile(System.IntPtr referenceHdc, System.Drawing.Imaging.EmfType emfType, string description) => throw null; + public Metafile(System.IntPtr referenceHdc, System.Drawing.Imaging.EmfType emfType) => throw null; + public Metafile(System.IntPtr hmetafile, System.Drawing.Imaging.WmfPlaceableFileHeader wmfHeader, bool deleteWmf) => throw null; + public Metafile(System.IntPtr hmetafile, System.Drawing.Imaging.WmfPlaceableFileHeader wmfHeader) => throw null; + public Metafile(System.IntPtr henhmetafile, bool deleteEmf) => throw null; + public Metafile(System.IO.Stream stream, System.IntPtr referenceHdc, System.Drawing.RectangleF frameRect, System.Drawing.Imaging.MetafileFrameUnit frameUnit, System.Drawing.Imaging.EmfType type, string description) => throw null; + public Metafile(System.IO.Stream stream, System.IntPtr referenceHdc, System.Drawing.RectangleF frameRect, System.Drawing.Imaging.MetafileFrameUnit frameUnit, System.Drawing.Imaging.EmfType type) => throw null; + public Metafile(System.IO.Stream stream, System.IntPtr referenceHdc, System.Drawing.RectangleF frameRect, System.Drawing.Imaging.MetafileFrameUnit frameUnit) => throw null; + public Metafile(System.IO.Stream stream, System.IntPtr referenceHdc, System.Drawing.RectangleF frameRect) => throw null; + public Metafile(System.IO.Stream stream, System.IntPtr referenceHdc, System.Drawing.Rectangle frameRect, System.Drawing.Imaging.MetafileFrameUnit frameUnit, System.Drawing.Imaging.EmfType type, string description) => throw null; + public Metafile(System.IO.Stream stream, System.IntPtr referenceHdc, System.Drawing.Rectangle frameRect, System.Drawing.Imaging.MetafileFrameUnit frameUnit, System.Drawing.Imaging.EmfType type) => throw null; + public Metafile(System.IO.Stream stream, System.IntPtr referenceHdc, System.Drawing.Rectangle frameRect, System.Drawing.Imaging.MetafileFrameUnit frameUnit) => throw null; + public Metafile(System.IO.Stream stream, System.IntPtr referenceHdc, System.Drawing.Rectangle frameRect) => throw null; + public Metafile(System.IO.Stream stream, System.IntPtr referenceHdc, System.Drawing.Imaging.EmfType type, string description) => throw null; + public Metafile(System.IO.Stream stream, System.IntPtr referenceHdc, System.Drawing.Imaging.EmfType type) => throw null; + public Metafile(System.IO.Stream stream, System.IntPtr referenceHdc) => throw null; + public Metafile(System.IO.Stream stream) => throw null; + public void PlayRecord(System.Drawing.Imaging.EmfPlusRecordType recordType, int flags, int dataSize, System.Byte[] data) => throw null; + } + + // Generated from `System.Drawing.Imaging.MetafileFrameUnit` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public enum MetafileFrameUnit + { + Document, + GdiCompatible, + Inch, + Millimeter, + Pixel, + Point, + } + + // Generated from `System.Drawing.Imaging.MetafileHeader` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public class MetafileHeader + { + public System.Drawing.Rectangle Bounds { get => throw null; } + public float DpiX { get => throw null; } + public float DpiY { get => throw null; } + public int EmfPlusHeaderSize { get => throw null; } + public bool IsDisplay() => throw null; + public bool IsEmf() => throw null; + public bool IsEmfOrEmfPlus() => throw null; + public bool IsEmfPlus() => throw null; + public bool IsEmfPlusDual() => throw null; + public bool IsEmfPlusOnly() => throw null; + public bool IsWmf() => throw null; + public bool IsWmfPlaceable() => throw null; + public int LogicalDpiX { get => throw null; } + public int LogicalDpiY { get => throw null; } + public int MetafileSize { get => throw null; } + public System.Drawing.Imaging.MetafileType Type { get => throw null; } + public int Version { get => throw null; } + public System.Drawing.Imaging.MetaHeader WmfHeader { get => throw null; } + } + + // Generated from `System.Drawing.Imaging.MetafileType` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public enum MetafileType + { + Emf, + EmfPlusDual, + EmfPlusOnly, + Invalid, + Wmf, + WmfPlaceable, + } + + // Generated from `System.Drawing.Imaging.PaletteFlags` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + [System.Flags] + public enum PaletteFlags + { + GrayScale, + Halftone, + HasAlpha, + } + + // Generated from `System.Drawing.Imaging.PixelFormat` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public enum PixelFormat + { + Alpha, + Canonical, + DontCare, + Extended, + Format16bppArgb1555, + Format16bppGrayScale, + Format16bppRgb555, + Format16bppRgb565, + Format1bppIndexed, + Format24bppRgb, + Format32bppArgb, + Format32bppPArgb, + Format32bppRgb, + Format48bppRgb, + Format4bppIndexed, + Format64bppArgb, + Format64bppPArgb, + Format8bppIndexed, + Gdi, + Indexed, + Max, + PAlpha, + Undefined, + } + + // Generated from `System.Drawing.Imaging.PlayRecordCallback` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public delegate void PlayRecordCallback(System.Drawing.Imaging.EmfPlusRecordType recordType, int flags, int dataSize, System.IntPtr recordData); + + // Generated from `System.Drawing.Imaging.PropertyItem` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public class PropertyItem + { + public int Id { get => throw null; set => throw null; } + public int Len { get => throw null; set => throw null; } + public System.Int16 Type { get => throw null; set => throw null; } + public System.Byte[] Value { get => throw null; set => throw null; } + } + + // Generated from `System.Drawing.Imaging.WmfPlaceableFileHeader` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public class WmfPlaceableFileHeader + { + public System.Int16 BboxBottom { get => throw null; set => throw null; } + public System.Int16 BboxLeft { get => throw null; set => throw null; } + public System.Int16 BboxRight { get => throw null; set => throw null; } + public System.Int16 BboxTop { get => throw null; set => throw null; } + public System.Int16 Checksum { get => throw null; set => throw null; } + public System.Int16 Hmf { get => throw null; set => throw null; } + public System.Int16 Inch { get => throw null; set => throw null; } + public int Key { get => throw null; set => throw null; } + public int Reserved { get => throw null; set => throw null; } + public WmfPlaceableFileHeader() => throw null; + } + + } + namespace Printing + { + // Generated from `System.Drawing.Printing.Duplex` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public enum Duplex + { + Default, + Horizontal, + Simplex, + Vertical, + } + + // Generated from `System.Drawing.Printing.InvalidPrinterException` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public class InvalidPrinterException : System.SystemException + { + public override void GetObjectData(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) => throw null; + public InvalidPrinterException(System.Drawing.Printing.PrinterSettings settings) => throw null; + protected InvalidPrinterException(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) => throw null; + } + + // Generated from `System.Drawing.Printing.Margins` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public class Margins : System.ICloneable + { + public static bool operator !=(System.Drawing.Printing.Margins m1, System.Drawing.Printing.Margins m2) => throw null; + public static bool operator ==(System.Drawing.Printing.Margins m1, System.Drawing.Printing.Margins m2) => throw null; + public int Bottom { get => throw null; set => throw null; } + public object Clone() => throw null; + public override bool Equals(object obj) => throw null; + public override int GetHashCode() => throw null; + public int Left { get => throw null; set => throw null; } + public Margins(int left, int right, int top, int bottom) => throw null; + public Margins() => throw null; + public int Right { get => throw null; set => throw null; } + public override string ToString() => throw null; + public int Top { get => throw null; set => throw null; } + } + + // Generated from `System.Drawing.Printing.PageSettings` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public class PageSettings : System.ICloneable + { + public System.Drawing.Rectangle Bounds { get => throw null; } + public object Clone() => throw null; + public bool Color { get => throw null; set => throw null; } + public void CopyToHdevmode(System.IntPtr hdevmode) => throw null; + public float HardMarginX { get => throw null; } + public float HardMarginY { get => throw null; } + public bool Landscape { get => throw null; set => throw null; } + public System.Drawing.Printing.Margins Margins { get => throw null; set => throw null; } + public PageSettings(System.Drawing.Printing.PrinterSettings printerSettings) => throw null; + public PageSettings() => throw null; + public System.Drawing.Printing.PaperSize PaperSize { get => throw null; set => throw null; } + public System.Drawing.Printing.PaperSource PaperSource { get => throw null; set => throw null; } + public System.Drawing.RectangleF PrintableArea { get => throw null; } + public System.Drawing.Printing.PrinterResolution PrinterResolution { get => throw null; set => throw null; } + public System.Drawing.Printing.PrinterSettings PrinterSettings { get => throw null; set => throw null; } + public void SetHdevmode(System.IntPtr hdevmode) => throw null; + public override string ToString() => throw null; + } + + // Generated from `System.Drawing.Printing.PaperKind` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public enum PaperKind + { + A2, + A3, + A3Extra, + A3ExtraTransverse, + A3Rotated, + A3Transverse, + A4, + A4Extra, + A4Plus, + A4Rotated, + A4Small, + A4Transverse, + A5, + A5Extra, + A5Rotated, + A5Transverse, + A6, + A6Rotated, + APlus, + B4, + B4Envelope, + B4JisRotated, + B5, + B5Envelope, + B5Extra, + B5JisRotated, + B5Transverse, + B6Envelope, + B6Jis, + B6JisRotated, + BPlus, + C3Envelope, + C4Envelope, + C5Envelope, + C65Envelope, + C6Envelope, + CSheet, + Custom, + DLEnvelope, + DSheet, + ESheet, + Executive, + Folio, + GermanLegalFanfold, + GermanStandardFanfold, + InviteEnvelope, + IsoB4, + ItalyEnvelope, + JapaneseDoublePostcard, + JapaneseDoublePostcardRotated, + JapaneseEnvelopeChouNumber3, + JapaneseEnvelopeChouNumber3Rotated, + JapaneseEnvelopeChouNumber4, + JapaneseEnvelopeChouNumber4Rotated, + JapaneseEnvelopeKakuNumber2, + JapaneseEnvelopeKakuNumber2Rotated, + JapaneseEnvelopeKakuNumber3, + JapaneseEnvelopeKakuNumber3Rotated, + JapaneseEnvelopeYouNumber4, + JapaneseEnvelopeYouNumber4Rotated, + JapanesePostcard, + JapanesePostcardRotated, + Ledger, + Legal, + LegalExtra, + Letter, + LetterExtra, + LetterExtraTransverse, + LetterPlus, + LetterRotated, + LetterSmall, + LetterTransverse, + MonarchEnvelope, + Note, + Number10Envelope, + Number11Envelope, + Number12Envelope, + Number14Envelope, + Number9Envelope, + PersonalEnvelope, + Prc16K, + Prc16KRotated, + Prc32K, + Prc32KBig, + Prc32KBigRotated, + Prc32KRotated, + PrcEnvelopeNumber1, + PrcEnvelopeNumber10, + PrcEnvelopeNumber10Rotated, + PrcEnvelopeNumber1Rotated, + PrcEnvelopeNumber2, + PrcEnvelopeNumber2Rotated, + PrcEnvelopeNumber3, + PrcEnvelopeNumber3Rotated, + PrcEnvelopeNumber4, + PrcEnvelopeNumber4Rotated, + PrcEnvelopeNumber5, + PrcEnvelopeNumber5Rotated, + PrcEnvelopeNumber6, + PrcEnvelopeNumber6Rotated, + PrcEnvelopeNumber7, + PrcEnvelopeNumber7Rotated, + PrcEnvelopeNumber8, + PrcEnvelopeNumber8Rotated, + PrcEnvelopeNumber9, + PrcEnvelopeNumber9Rotated, + Quarto, + Standard10x11, + Standard10x14, + Standard11x17, + Standard12x11, + Standard15x11, + Standard9x11, + Statement, + Tabloid, + TabloidExtra, + USStandardFanfold, + } + + // Generated from `System.Drawing.Printing.PaperSize` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public class PaperSize + { + public int Height { get => throw null; set => throw null; } + public System.Drawing.Printing.PaperKind Kind { get => throw null; } + public string PaperName { get => throw null; set => throw null; } + public PaperSize(string name, int width, int height) => throw null; + public PaperSize() => throw null; + public int RawKind { get => throw null; set => throw null; } + public override string ToString() => throw null; + public int Width { get => throw null; set => throw null; } + } + + // Generated from `System.Drawing.Printing.PaperSource` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public class PaperSource + { + public System.Drawing.Printing.PaperSourceKind Kind { get => throw null; } + public PaperSource() => throw null; + public int RawKind { get => throw null; set => throw null; } + public string SourceName { get => throw null; set => throw null; } + public override string ToString() => throw null; + } + + // Generated from `System.Drawing.Printing.PaperSourceKind` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public enum PaperSourceKind + { + AutomaticFeed, + Cassette, + Custom, + Envelope, + FormSource, + LargeCapacity, + LargeFormat, + Lower, + Manual, + ManualFeed, + Middle, + SmallFormat, + TractorFeed, + Upper, + } + + // Generated from `System.Drawing.Printing.PreviewPageInfo` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public class PreviewPageInfo + { + public System.Drawing.Image Image { get => throw null; } + public System.Drawing.Size PhysicalSize { get => throw null; } + public PreviewPageInfo(System.Drawing.Image image, System.Drawing.Size physicalSize) => throw null; + } + + // Generated from `System.Drawing.Printing.PreviewPrintController` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public class PreviewPrintController : System.Drawing.Printing.PrintController + { + public System.Drawing.Printing.PreviewPageInfo[] GetPreviewPageInfo() => throw null; + public override bool IsPreview { get => throw null; } + public override void OnEndPage(System.Drawing.Printing.PrintDocument document, System.Drawing.Printing.PrintPageEventArgs e) => throw null; + public override void OnEndPrint(System.Drawing.Printing.PrintDocument document, System.Drawing.Printing.PrintEventArgs e) => throw null; + public override System.Drawing.Graphics OnStartPage(System.Drawing.Printing.PrintDocument document, System.Drawing.Printing.PrintPageEventArgs e) => throw null; + public override void OnStartPrint(System.Drawing.Printing.PrintDocument document, System.Drawing.Printing.PrintEventArgs e) => throw null; + public PreviewPrintController() => throw null; + public virtual bool UseAntiAlias { get => throw null; set => throw null; } + } + + // Generated from `System.Drawing.Printing.PrintAction` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public enum PrintAction + { + PrintToFile, + PrintToPreview, + PrintToPrinter, + } + + // Generated from `System.Drawing.Printing.PrintController` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public abstract class PrintController + { + public virtual bool IsPreview { get => throw null; } + public virtual void OnEndPage(System.Drawing.Printing.PrintDocument document, System.Drawing.Printing.PrintPageEventArgs e) => throw null; + public virtual void OnEndPrint(System.Drawing.Printing.PrintDocument document, System.Drawing.Printing.PrintEventArgs e) => throw null; + public virtual System.Drawing.Graphics OnStartPage(System.Drawing.Printing.PrintDocument document, System.Drawing.Printing.PrintPageEventArgs e) => throw null; + public virtual void OnStartPrint(System.Drawing.Printing.PrintDocument document, System.Drawing.Printing.PrintEventArgs e) => throw null; + protected PrintController() => throw null; + } + + // Generated from `System.Drawing.Printing.PrintDocument` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public class PrintDocument : System.ComponentModel.Component + { + public event System.Drawing.Printing.PrintEventHandler BeginPrint; + public System.Drawing.Printing.PageSettings DefaultPageSettings { get => throw null; set => throw null; } + public string DocumentName { get => throw null; set => throw null; } + public event System.Drawing.Printing.PrintEventHandler EndPrint; + protected virtual void OnBeginPrint(System.Drawing.Printing.PrintEventArgs e) => throw null; + protected virtual void OnEndPrint(System.Drawing.Printing.PrintEventArgs e) => throw null; + protected virtual void OnPrintPage(System.Drawing.Printing.PrintPageEventArgs e) => throw null; + protected virtual void OnQueryPageSettings(System.Drawing.Printing.QueryPageSettingsEventArgs e) => throw null; + public bool OriginAtMargins { get => throw null; set => throw null; } + public void Print() => throw null; + public System.Drawing.Printing.PrintController PrintController { get => throw null; set => throw null; } + public PrintDocument() => throw null; + public event System.Drawing.Printing.PrintPageEventHandler PrintPage; + public System.Drawing.Printing.PrinterSettings PrinterSettings { get => throw null; set => throw null; } + public event System.Drawing.Printing.QueryPageSettingsEventHandler QueryPageSettings; + public override string ToString() => throw null; + } + + // Generated from `System.Drawing.Printing.PrintEventArgs` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public class PrintEventArgs : System.ComponentModel.CancelEventArgs + { + public System.Drawing.Printing.PrintAction PrintAction { get => throw null; } + public PrintEventArgs() => throw null; + } + + // Generated from `System.Drawing.Printing.PrintEventHandler` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public delegate void PrintEventHandler(object sender, System.Drawing.Printing.PrintEventArgs e); + + // Generated from `System.Drawing.Printing.PrintPageEventArgs` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public class PrintPageEventArgs : System.EventArgs + { + public bool Cancel { get => throw null; set => throw null; } + public System.Drawing.Graphics Graphics { get => throw null; } + public bool HasMorePages { get => throw null; set => throw null; } + public System.Drawing.Rectangle MarginBounds { get => throw null; } + public System.Drawing.Rectangle PageBounds { get => throw null; } + public System.Drawing.Printing.PageSettings PageSettings { get => throw null; } + public PrintPageEventArgs(System.Drawing.Graphics graphics, System.Drawing.Rectangle marginBounds, System.Drawing.Rectangle pageBounds, System.Drawing.Printing.PageSettings pageSettings) => throw null; + } + + // Generated from `System.Drawing.Printing.PrintPageEventHandler` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public delegate void PrintPageEventHandler(object sender, System.Drawing.Printing.PrintPageEventArgs e); + + // Generated from `System.Drawing.Printing.PrintRange` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public enum PrintRange + { + AllPages, + CurrentPage, + Selection, + SomePages, + } + + // Generated from `System.Drawing.Printing.PrinterResolution` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public class PrinterResolution + { + public System.Drawing.Printing.PrinterResolutionKind Kind { get => throw null; set => throw null; } + public PrinterResolution() => throw null; + public override string ToString() => throw null; + public int X { get => throw null; set => throw null; } + public int Y { get => throw null; set => throw null; } + } + + // Generated from `System.Drawing.Printing.PrinterResolutionKind` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public enum PrinterResolutionKind + { + Custom, + Draft, + High, + Low, + Medium, + } + + // Generated from `System.Drawing.Printing.PrinterSettings` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public class PrinterSettings : System.ICloneable + { + public bool CanDuplex { get => throw null; } + public object Clone() => throw null; + public bool Collate { get => throw null; set => throw null; } + public System.Int16 Copies { get => throw null; set => throw null; } + public System.Drawing.Graphics CreateMeasurementGraphics(bool honorOriginAtMargins) => throw null; + public System.Drawing.Graphics CreateMeasurementGraphics(System.Drawing.Printing.PageSettings pageSettings, bool honorOriginAtMargins) => throw null; + public System.Drawing.Graphics CreateMeasurementGraphics(System.Drawing.Printing.PageSettings pageSettings) => throw null; + public System.Drawing.Graphics CreateMeasurementGraphics() => throw null; + public System.Drawing.Printing.PageSettings DefaultPageSettings { get => throw null; } + public System.Drawing.Printing.Duplex Duplex { get => throw null; set => throw null; } + public int FromPage { get => throw null; set => throw null; } + public System.IntPtr GetHdevmode(System.Drawing.Printing.PageSettings pageSettings) => throw null; + public System.IntPtr GetHdevmode() => throw null; + public System.IntPtr GetHdevnames() => throw null; + public static System.Drawing.Printing.PrinterSettings.StringCollection InstalledPrinters { get => throw null; } + public bool IsDefaultPrinter { get => throw null; } + public bool IsDirectPrintingSupported(System.Drawing.Imaging.ImageFormat imageFormat) => throw null; + public bool IsDirectPrintingSupported(System.Drawing.Image image) => throw null; + public bool IsPlotter { get => throw null; } + public bool IsValid { get => throw null; } + public int LandscapeAngle { get => throw null; } + public int MaximumCopies { get => throw null; } + public int MaximumPage { get => throw null; set => throw null; } + public int MinimumPage { get => throw null; set => throw null; } + // Generated from `System.Drawing.Printing.PrinterSettings+PaperSizeCollection` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public class PaperSizeCollection : System.Collections.IEnumerable, System.Collections.ICollection + { + public int Add(System.Drawing.Printing.PaperSize paperSize) => throw null; + void System.Collections.ICollection.CopyTo(System.Array array, int index) => throw null; + public void CopyTo(System.Drawing.Printing.PaperSize[] paperSizes, int index) => throw null; + public int Count { get => throw null; } + int System.Collections.ICollection.Count { get => throw null; } + public System.Collections.IEnumerator GetEnumerator() => throw null; + System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() => throw null; + bool System.Collections.ICollection.IsSynchronized { get => throw null; } + public virtual System.Drawing.Printing.PaperSize this[int index] { get => throw null; } + public PaperSizeCollection(System.Drawing.Printing.PaperSize[] array) => throw null; + object System.Collections.ICollection.SyncRoot { get => throw null; } + } + + + public System.Drawing.Printing.PrinterSettings.PaperSizeCollection PaperSizes { get => throw null; } + // Generated from `System.Drawing.Printing.PrinterSettings+PaperSourceCollection` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public class PaperSourceCollection : System.Collections.IEnumerable, System.Collections.ICollection + { + public int Add(System.Drawing.Printing.PaperSource paperSource) => throw null; + void System.Collections.ICollection.CopyTo(System.Array array, int index) => throw null; + public void CopyTo(System.Drawing.Printing.PaperSource[] paperSources, int index) => throw null; + public int Count { get => throw null; } + int System.Collections.ICollection.Count { get => throw null; } + public System.Collections.IEnumerator GetEnumerator() => throw null; + System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() => throw null; + bool System.Collections.ICollection.IsSynchronized { get => throw null; } + public virtual System.Drawing.Printing.PaperSource this[int index] { get => throw null; } + public PaperSourceCollection(System.Drawing.Printing.PaperSource[] array) => throw null; + object System.Collections.ICollection.SyncRoot { get => throw null; } + } + + + public System.Drawing.Printing.PrinterSettings.PaperSourceCollection PaperSources { get => throw null; } + public string PrintFileName { get => throw null; set => throw null; } + public System.Drawing.Printing.PrintRange PrintRange { get => throw null; set => throw null; } + public bool PrintToFile { get => throw null; set => throw null; } + public string PrinterName { get => throw null; set => throw null; } + // Generated from `System.Drawing.Printing.PrinterSettings+PrinterResolutionCollection` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public class PrinterResolutionCollection : System.Collections.IEnumerable, System.Collections.ICollection + { + public int Add(System.Drawing.Printing.PrinterResolution printerResolution) => throw null; + void System.Collections.ICollection.CopyTo(System.Array array, int index) => throw null; + public void CopyTo(System.Drawing.Printing.PrinterResolution[] printerResolutions, int index) => throw null; + public int Count { get => throw null; } + int System.Collections.ICollection.Count { get => throw null; } + public System.Collections.IEnumerator GetEnumerator() => throw null; + System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() => throw null; + bool System.Collections.ICollection.IsSynchronized { get => throw null; } + public virtual System.Drawing.Printing.PrinterResolution this[int index] { get => throw null; } + public PrinterResolutionCollection(System.Drawing.Printing.PrinterResolution[] array) => throw null; + object System.Collections.ICollection.SyncRoot { get => throw null; } + } + + + public System.Drawing.Printing.PrinterSettings.PrinterResolutionCollection PrinterResolutions { get => throw null; } + public PrinterSettings() => throw null; + public void SetHdevmode(System.IntPtr hdevmode) => throw null; + public void SetHdevnames(System.IntPtr hdevnames) => throw null; + // Generated from `System.Drawing.Printing.PrinterSettings+StringCollection` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public class StringCollection : System.Collections.IEnumerable, System.Collections.ICollection + { + public int Add(string value) => throw null; + void System.Collections.ICollection.CopyTo(System.Array array, int index) => throw null; + public void CopyTo(string[] strings, int index) => throw null; + public int Count { get => throw null; } + int System.Collections.ICollection.Count { get => throw null; } + public System.Collections.IEnumerator GetEnumerator() => throw null; + System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() => throw null; + bool System.Collections.ICollection.IsSynchronized { get => throw null; } + public virtual string this[int index] { get => throw null; } + public StringCollection(string[] array) => throw null; + object System.Collections.ICollection.SyncRoot { get => throw null; } + } + + + public bool SupportsColor { get => throw null; } + public int ToPage { get => throw null; set => throw null; } + public override string ToString() => throw null; + } + + // Generated from `System.Drawing.Printing.PrinterUnit` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public enum PrinterUnit + { + Display, + HundredthsOfAMillimeter, + TenthsOfAMillimeter, + ThousandthsOfAnInch, + } + + // Generated from `System.Drawing.Printing.PrinterUnitConvert` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public class PrinterUnitConvert + { + public static int Convert(int value, System.Drawing.Printing.PrinterUnit fromUnit, System.Drawing.Printing.PrinterUnit toUnit) => throw null; + public static double Convert(double value, System.Drawing.Printing.PrinterUnit fromUnit, System.Drawing.Printing.PrinterUnit toUnit) => throw null; + public static System.Drawing.Size Convert(System.Drawing.Size value, System.Drawing.Printing.PrinterUnit fromUnit, System.Drawing.Printing.PrinterUnit toUnit) => throw null; + public static System.Drawing.Rectangle Convert(System.Drawing.Rectangle value, System.Drawing.Printing.PrinterUnit fromUnit, System.Drawing.Printing.PrinterUnit toUnit) => throw null; + public static System.Drawing.Printing.Margins Convert(System.Drawing.Printing.Margins value, System.Drawing.Printing.PrinterUnit fromUnit, System.Drawing.Printing.PrinterUnit toUnit) => throw null; + public static System.Drawing.Point Convert(System.Drawing.Point value, System.Drawing.Printing.PrinterUnit fromUnit, System.Drawing.Printing.PrinterUnit toUnit) => throw null; + } + + // Generated from `System.Drawing.Printing.QueryPageSettingsEventArgs` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public class QueryPageSettingsEventArgs : System.Drawing.Printing.PrintEventArgs + { + public System.Drawing.Printing.PageSettings PageSettings { get => throw null; set => throw null; } + public QueryPageSettingsEventArgs(System.Drawing.Printing.PageSettings pageSettings) => throw null; + } + + // Generated from `System.Drawing.Printing.QueryPageSettingsEventHandler` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public delegate void QueryPageSettingsEventHandler(object sender, System.Drawing.Printing.QueryPageSettingsEventArgs e); + + // Generated from `System.Drawing.Printing.StandardPrintController` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public class StandardPrintController : System.Drawing.Printing.PrintController + { + public override void OnEndPage(System.Drawing.Printing.PrintDocument document, System.Drawing.Printing.PrintPageEventArgs e) => throw null; + public override void OnEndPrint(System.Drawing.Printing.PrintDocument document, System.Drawing.Printing.PrintEventArgs e) => throw null; + public override System.Drawing.Graphics OnStartPage(System.Drawing.Printing.PrintDocument document, System.Drawing.Printing.PrintPageEventArgs e) => throw null; + public override void OnStartPrint(System.Drawing.Printing.PrintDocument document, System.Drawing.Printing.PrintEventArgs e) => throw null; + public StandardPrintController() => throw null; + } + + } + namespace Text + { + // Generated from `System.Drawing.Text.FontCollection` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public abstract class FontCollection : System.IDisposable + { + public void Dispose() => throw null; + protected virtual void Dispose(bool disposing) => throw null; + public System.Drawing.FontFamily[] Families { get => throw null; } + internal FontCollection() => throw null; + // ERR: Stub generator didn't handle member: ~FontCollection + } + + // Generated from `System.Drawing.Text.GenericFontFamilies` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public enum GenericFontFamilies + { + Monospace, + SansSerif, + Serif, + } + + // Generated from `System.Drawing.Text.HotkeyPrefix` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public enum HotkeyPrefix + { + Hide, + None, + Show, + } + + // Generated from `System.Drawing.Text.InstalledFontCollection` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public class InstalledFontCollection : System.Drawing.Text.FontCollection + { + public InstalledFontCollection() => throw null; + } + + // Generated from `System.Drawing.Text.PrivateFontCollection` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public class PrivateFontCollection : System.Drawing.Text.FontCollection + { + public void AddFontFile(string filename) => throw null; + public void AddMemoryFont(System.IntPtr memory, int length) => throw null; + protected override void Dispose(bool disposing) => throw null; + public PrivateFontCollection() => throw null; + } + + // Generated from `System.Drawing.Text.TextRenderingHint` in `System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51` + public enum TextRenderingHint + { + AntiAlias, + AntiAliasGridFit, + ClearTypeGridFit, + SingleBitPerPixel, + SingleBitPerPixelGridFit, + SystemDefault, + } + + } + } +} diff --git a/csharp/ql/test/resources/stubs/System.Drawing.Common/4.7.0/System.Drawing.Common.csproj b/csharp/ql/test/resources/stubs/System.Drawing.Common/4.7.0/System.Drawing.Common.csproj new file mode 100644 index 00000000000..36eddf7809c --- /dev/null +++ b/csharp/ql/test/resources/stubs/System.Drawing.Common/4.7.0/System.Drawing.Common.csproj @@ -0,0 +1,12 @@ + + + net5.0 + true + bin\ + false + + + + + + From 5014ef233778f5a363eac9c797c531ecc729ce5b Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Wed, 11 Aug 2021 10:04:23 +0200 Subject: [PATCH 185/741] C#: Add ServiceStack support with CSV data model --- .../library-coverage/frameworks.csv | 1 + .../code/csharp/dataflow/ExternalFlow.qll | 1 + .../code/csharp/frameworks/ServiceStack.qll | 405 ++++++++++++------ .../src/semmle/code/csharp/frameworks/Sql.qll | 1 - .../security/dataflow/SqlInjectionQuery.qll | 6 + .../flowsinks/ExternalLocationSink.qll | 6 +- .../security/dataflow/flowsources/Remote.qll | 1 - .../frameworks/ServiceStack/ServiceStack.cs | 9 - .../frameworks/ServiceStack/SinksExternal.cs | 61 +++ .../frameworks/ServiceStack/SinksSql.cs | 74 ++++ .../frameworks/ServiceStack/SinksXss.cs | 27 ++ .../frameworks/ServiceStack/Sources.cs | 76 ++++ .../externalLocationSink.expected | 26 ++ .../ServiceStack/externalLocationSink.ql | 7 + .../frameworks/ServiceStack/options | 4 +- .../ServiceStack/remoteFlowSource.expected | 13 + .../frameworks/ServiceStack/sqlSink.expected | 23 + .../frameworks/ServiceStack/sqlSink.ql | 7 + .../frameworks/ServiceStack/xssSink.expected | 3 + .../frameworks/ServiceStack/xssSink.ql | 7 + 20 files changed, 618 insertions(+), 140 deletions(-) delete mode 100644 csharp/ql/test/library-tests/frameworks/ServiceStack/ServiceStack.cs create mode 100644 csharp/ql/test/library-tests/frameworks/ServiceStack/SinksExternal.cs create mode 100644 csharp/ql/test/library-tests/frameworks/ServiceStack/SinksSql.cs create mode 100644 csharp/ql/test/library-tests/frameworks/ServiceStack/SinksXss.cs create mode 100644 csharp/ql/test/library-tests/frameworks/ServiceStack/Sources.cs create mode 100644 csharp/ql/test/library-tests/frameworks/ServiceStack/externalLocationSink.expected create mode 100644 csharp/ql/test/library-tests/frameworks/ServiceStack/externalLocationSink.ql create mode 100644 csharp/ql/test/library-tests/frameworks/ServiceStack/sqlSink.expected create mode 100644 csharp/ql/test/library-tests/frameworks/ServiceStack/sqlSink.ql create mode 100644 csharp/ql/test/library-tests/frameworks/ServiceStack/xssSink.expected create mode 100644 csharp/ql/test/library-tests/frameworks/ServiceStack/xssSink.ql diff --git a/csharp/documentation/library-coverage/frameworks.csv b/csharp/documentation/library-coverage/frameworks.csv index d0cc09b4e9c..6539f78b265 100644 --- a/csharp/documentation/library-coverage/frameworks.csv +++ b/csharp/documentation/library-coverage/frameworks.csv @@ -1,2 +1,3 @@ Framework name,URL,Namespace prefixes System,,System.* System +ServiceStack,https://servicestack.net/,ServiceStack.* ServiceStack diff --git a/csharp/ql/src/semmle/code/csharp/dataflow/ExternalFlow.qll b/csharp/ql/src/semmle/code/csharp/dataflow/ExternalFlow.qll index 2f7096742b8..a8187ab8877 100644 --- a/csharp/ql/src/semmle/code/csharp/dataflow/ExternalFlow.qll +++ b/csharp/ql/src/semmle/code/csharp/dataflow/ExternalFlow.qll @@ -88,6 +88,7 @@ private module Frameworks { private import semmle.code.csharp.security.dataflow.flowsinks.Html private import semmle.code.csharp.frameworks.System private import semmle.code.csharp.security.dataflow.XSSSinks + private import semmle.code.csharp.frameworks.ServiceStack } /** diff --git a/csharp/ql/src/semmle/code/csharp/frameworks/ServiceStack.qll b/csharp/ql/src/semmle/code/csharp/frameworks/ServiceStack.qll index dbbb2103613..96410ec26c7 100644 --- a/csharp/ql/src/semmle/code/csharp/frameworks/ServiceStack.qll +++ b/csharp/ql/src/semmle/code/csharp/frameworks/ServiceStack.qll @@ -6,156 +6,300 @@ */ import csharp +private import semmle.code.csharp.dataflow.ExternalFlow /** A class representing a Service */ -class ServiceClass extends Class { - ServiceClass() { this.getBaseClass+().getQualifiedName() = "ServiceStack.Service" } +private class ServiceClass extends Class { + ServiceClass() { + this.getBaseClass+().hasQualifiedName("ServiceStack", "Service") or + this.getABaseInterface+().hasQualifiedName("ServiceStack", "IService") + } /** Get a method that handles incoming requests */ Method getARequestMethod() { - result = this.getAMethod(["Post", "Get", "Put", "Delete", "Any", "Option", "Head"]) + exists(string name | + result = this.getAMethod(name) and + name.regexpMatch("(Get|Post|Put|Delete|Any|Option|Head|Patch)(Async|Json|Xml|Jsv|Csv|Html|Protobuf|Msgpack|Wire)?") + ) } } /** Top-level Request DTO types */ -class RequestDTO extends Class { - RequestDTO() { - this.getABaseInterface().getQualifiedName() = - ["ServiceStack.IReturn", "ServieStack.IReturnVoid"] - } -} - -/** Top-level Response DTO types */ -class ResponseDTO extends Class { - ResponseDTO() { - exists(RequestDTO req, ConstructedGeneric respInterface | - req.getABaseInterface() = respInterface and - respInterface.getUndecoratedName() = "IReturn" and - respInterface.getATypeArgument() = this - ) - } +private class RequestDTO extends Class { + RequestDTO() { this.getABaseInterface+().hasQualifiedName("ServiceStack", "IReturn") } } /** Flow sources for the ServiceStack framework */ module Sources { private import semmle.code.csharp.security.dataflow.flowsources.Remote - private import semmle.code.csharp.commons.Collections - - /** Types involved in a RequestDTO. Recurse through props and collection types */ - private predicate involvedInRequest(RefType c) { - c instanceof RequestDTO - or - exists(RefType parent, RefType propType | involvedInRequest(parent) | - (propType = parent.getAProperty().getType() or propType = parent.getAField().getType()) and - if propType instanceof CollectionType - then - c = propType.(ConstructedGeneric).getATypeArgument() or - c = propType.(ArrayType).getElementType() - else c = propType - ) - } /** - * Remote flow sources for ServiceStack - * - * Assumes all nested fields/properties on request DTOs are tainted, which is - * an overapproximation and may lead to FPs depending on how Service Stack app - * is configured. + * Remote flow sources for ServiceStack. Parameters of well-known `request` methods. */ - class ServiceStackSource extends RemoteFlowSource { + private class ServiceStackSource extends RemoteFlowSource { ServiceStackSource() { - // Parameters are sources. In practice only interesting when they are string/primitive typed. exists(ServiceClass service | service.getARequestMethod().getAParameter() = this.asParameter() ) - or - // Field/property accesses on RequestDTOs and request involved types - // involved types aren't necessarily only from requests so may lead to FPs... - exists(RefType reqType | involvedInRequest(reqType) | - reqType.getAProperty().getAnAccess() = this.asExpr() or - reqType.getAField().getAnAccess() = this.asExpr() - ) } - override string getSourceType() { result = "ServiceStack request DTO field" } + override string getSourceType() { result = "ServiceStack request parameter" } } } -/** Flow Sinks for the ServiceStack framework */ -module Sinks { - private import semmle.code.csharp.security.dataflow.flowsinks.ExternalLocationSink - - /** RemoteFlow sinks for service stack */ - class ServiceStackRemoteRequestParameter extends ExternalLocationSink { - ServiceStackRemoteRequestParameter() { - exists(MethodCall mc | - mc.getTarget().getQualifiedName() in [ - "ServiceStack.IRestClient.Get", "ServiceStack.IRestClient.Put", - "ServiceStack.IRestClient.Post", "ServiceStack.IRestClient.Delete", - "ServiceStack.IRestClient.Patch", "ServiceStack.IRestClient.Send", - "ServiceStack.IRestClientAsync.GetAsync", "ServiceStack.IRestClientAsync.DeleteAsync", - "ServiceStack.IRestClientAsync.PutAsync", "ServiceStack.IRestClientAsync.PostAsync", - "ServiceStack.IRestClientAsync.PatchAsync", - "ServiceStack.IRestClientAsync.CustomMethodAsync" - ] and - this.asExpr() = mc.getAnArgument() - ) - } +private class ServiceStackRemoteSinkModelCsv extends SinkModelCsv { + override predicate row(string row) { + row = + [ + // IRestClient + "ServiceStack;IRestClient;true;Send;(System.String,System.String,System.Object);;Argument[2];remote", + "ServiceStack;IRestClient;true;Patch;(System.String,System.Object);;Argument[1];remote", + "ServiceStack;IRestClient;true;Post;(System.String,System.Object);;Argument[1];remote", + "ServiceStack;IRestClient;true;Put;(System.String,System.Object);;Argument[1];remote", + // IRestClientSync + "ServiceStack;IRestClientSync;true;CustomMethod;(System.String,ServiceStack.IReturnVoid);;Argument[1];remote", + "ServiceStack;IRestClientSync;true;CustomMethod;(System.String,System.Object);;Argument[1];remote", + "ServiceStack;IRestClientSync;true;CustomMethod;(System.String,ServiceStack.IReturn);;Argument[1];remote", + "ServiceStack;IRestClientSync;true;Delete;(ServiceStack.IReturnVoid);;Argument[0];remote", + "ServiceStack;IRestClientSync;true;Delete;(System.Object);;Argument[0];remote", + "ServiceStack;IRestClientSync;true;Delete;(ServiceStack.IReturn);;Argument[0];remote", + "ServiceStack;IRestClientSync;true;Get;(ServiceStack.IReturnVoid);;Argument[0];remote", + "ServiceStack;IRestClientSync;true;Get;(System.Object);;Argument[0];remote", + "ServiceStack;IRestClientSync;true;Get;(ServiceStack.IReturn);;Argument[0];remote", + "ServiceStack;IRestClientSync;true;Patch;(ServiceStack.IReturnVoid);;Argument[0];remote", + "ServiceStack;IRestClientSync;true;Patch;(System.Object);;Argument[0];remote", + "ServiceStack;IRestClientSync;true;Patch;(ServiceStack.IReturn);;Argument[0];remote", + "ServiceStack;IRestClientSync;true;Post;(ServiceStack.IReturnVoid);;Argument[0];remote", + "ServiceStack;IRestClientSync;true;Post;(System.Object);;Argument[0];remote", + "ServiceStack;IRestClientSync;true;Post;(ServiceStack.IReturn);;Argument[0];remote", + "ServiceStack;IRestClientSync;true;Put;(ServiceStack.IReturnVoid);;Argument[0];remote", + "ServiceStack;IRestClientSync;true;Put;(System.Object);;Argument[0];remote", + "ServiceStack;IRestClientSync;true;Put;(ServiceStack.IReturn);;Argument[0];remote", + // IRestGateway + "ServiceStack;IRestGateway;true;Delete;(ServiceStack.IReturn);;Argument[0];remote", + "ServiceStack;IRestGateway;true;Get;(ServiceStack.IReturn);;Argument[0];remote", + "ServiceStack;IRestGateway;true;Post;(ServiceStack.IReturn);;Argument[0];remote", + "ServiceStack;IRestGateway;true;Put;(ServiceStack.IReturn);;Argument[0];remote", + "ServiceStack;IRestGateway;true;Send;(ServiceStack.IReturn);;Argument[0];remote", + // IOneWayClient + "ServiceStack;IOneWayClient;true;SendAllOneWay;(System.Collections.Generic.IEnumerable);;Element of Argument[1];remote", + "ServiceStack;IOneWayClient;true;SendOneWay;(System.String,System.Object);;Argument[1];remote", + "ServiceStack;IOneWayClient;true;SendOneWay;(System.Object);;Argument[0];remote", + // IServiceGateway + "ServiceStack;IServiceGateway;true;Publish;(System.Object);;Argument[0];remote", + "ServiceStack;IServiceGateway;true;PublishAll;(System.Collections.Generic.IEnumerable);;Element of Argument[0];remote", + "ServiceStack;IServiceGateway;true;Send;(System.Object);;Argument[0];remote", + "ServiceStack;IServiceGateway;true;SendAll;(System.Collections.Generic.IEnumerable);;Element of Argument[0];remote", + // IRestClientAsync + "ServiceStack;IRestClientAsync;true;CustomMethodAsync;(System.String,ServiceStack.IReturnVoid,System.Threading.CancellationToken);;Argument[1];remote", + "ServiceStack;IRestClientAsync;true;CustomMethodAsync;(System.String,System.Object,System.Threading.CancellationToken);;Argument[1];remote", + "ServiceStack;IRestClientAsync;true;CustomMethodAsync;(System.String,ServiceStack.IReturn,System.Threading.CancellationToken);;Argument[1];remote", + "ServiceStack;IRestClientAsync;true;DeleteAsync;(ServiceStack.IReturnVoid,System.Threading.CancellationToken);;Argument[0];remote", + "ServiceStack;IRestClientAsync;true;DeleteAsync;(System.Object,System.Threading.CancellationToken);;Argument[0];remote", + "ServiceStack;IRestClientAsync;true;DeleteAsync;(ServiceStack.IReturn,System.Threading.CancellationToken);;Argument[0];remote", + "ServiceStack;IRestClientAsync;true;GetAsync;(ServiceStack.IReturnVoid,System.Threading.CancellationToken);;Argument[0];remote", + "ServiceStack;IRestClientAsync;true;GetAsync;(System.Object,System.Threading.CancellationToken);;Argument[0];remote", + "ServiceStack;IRestClientAsync;true;GetAsync;(ServiceStack.IReturn,System.Threading.CancellationToken);;Argument[0];remote", + "ServiceStack;IRestClientAsync;true;PatchAsync;(ServiceStack.IReturnVoid,System.Threading.CancellationToken);;Argument[0];remote", + "ServiceStack;IRestClientAsync;true;PatchAsync;(System.Object,System.Threading.CancellationToken);;Argument[0];remote", + "ServiceStack;IRestClientAsync;true;PatchAsync;(ServiceStack.IReturn,System.Threading.CancellationToken);;Argument[0];remote", + "ServiceStack;IRestClientAsync;true;PostAsync;(ServiceStack.IReturnVoid,System.Threading.CancellationToken);;Argument[0];remote", + "ServiceStack;IRestClientAsync;true;PostAsync;(System.Object,System.Threading.CancellationToken);;Argument[0];remote", + "ServiceStack;IRestClientAsync;true;PostAsync;(ServiceStack.IReturn,System.Threading.CancellationToken);;Argument[0];remote", + "ServiceStack;IRestClientAsync;true;PutAsync;(ServiceStack.IReturnVoid,System.Threading.CancellationToken);;Argument[0];remote", + "ServiceStack;IRestClientAsync;true;PutAsync;(System.Object,System.Threading.CancellationToken);;Argument[0];remote", + "ServiceStack;IRestClientAsync;true;PutAsync;(ServiceStack.IReturn,System.Threading.CancellationToken);;Argument[0];remote", + // IRestGatewayAsync + "ServiceStack;IRestGatewayAsync;true;DeleteAsync;(ServiceStack.IReturn,System.Threading.CancellationToken);;Argument[0];remote", + "ServiceStack;IRestGatewayAsync;true;GetAsync;(ServiceStack.IReturn,System.Threading.CancellationToken);;Argument[0];remote", + "ServiceStack;IRestGatewayAsync;true;PostAsync;(ServiceStack.IReturn,System.Threading.CancellationToken);;Argument[0];remote", + "ServiceStack;IRestGatewayAsync;true;PutAsync;(ServiceStack.IReturn,System.Threading.CancellationToken);;Argument[0];remote", + "ServiceStack;IRestGatewayAsync;true;SendAsync;(ServiceStack.IReturn,System.Threading.CancellationToken);;Argument[0];remote", + // IServiceGatewayAsync + "ServiceStack;IServiceGatewayAsync;true;PublishAsync;(System.Object,System.Threading.CancellationToken);;Argument[0];remote", + "ServiceStack;IServiceGatewayAsync;true;PublishAllAsync;(System.Collections.Generic.IEnumerable,System.Threading.CancellationToken);;Element of Argument[0];remote", + "ServiceStack;IServiceGatewayAsync;true;SendAsync;(System.Object,System.Threading.CancellationToken);;Argument[0];remote", + "ServiceStack;IServiceGatewayAsync;true;SendAllAsync;(System.Collections.Generic.IEnumerable,System.Threading.CancellationToken);;Element of Argument[0];remote", + // ServiceClientBase + "ServiceStack;ServiceClientBase;true;Publish;(T);;Argument[0];remote", + "ServiceStack;ServiceClientBase;true;Publish;(ServiceStack.Messaging.IMessage);;Argument[0];remote", + "ServiceStack;ServiceClientBase;true;Delete;(System.Object);;Argument[0];remote", + "ServiceStack;ServiceClientBase;true;Get;(System.Object);;Argument[0];remote", + "ServiceStack;ServiceClientBase;true;Patch;(System.Object);;Argument[0];remote", + "ServiceStack;ServiceClientBase;true;Post;(System.Object);;Argument[0];remote", + "ServiceStack;ServiceClientBase;true;Put;(System.Object);;Argument[0];remote", + "ServiceStack;ServiceClientBase;true;Head;(System.Object);;Argument[0];remote", + "ServiceStack;ServiceClientBase;true;Head;(ServiceStack.IReturn);;Argument[0];remote", + "ServiceStack;ServiceClientBase;true;CustomMethod;(System.String,System.String,System.Object);;Argument[2];remote", + "ServiceStack;ServiceClientBase;true;CustomMethodAsync;(System.String,System.String,System.Object,System.Threading.CancellationToken);;Argument[2];remote", + "ServiceStack;ServiceClientBase;true;DownloadBytes;(System.String,System.String,System.Object);;Argument[2];remote", + "ServiceStack;ServiceClientBase;true;DownloadBytesAsync;(System.String,System.String,System.Object);;Argument[2];remote", + // ServiceClientBase + "ServiceStack;ServiceClientBase;true;Publish;(T);;Argument[0];remote", + "ServiceStack;ServiceClientBase;true;Publish;(ServiceStack.Messaging.IMessage);;Argument[0];remote", + "ServiceStack;ServiceClientBase;true;Delete;(System.Object);;Argument[0];remote", + "ServiceStack;ServiceClientBase;true;Get;(System.Object);;Argument[0];remote", + "ServiceStack;ServiceClientBase;true;Patch;(System.Object);;Argument[0];remote", + "ServiceStack;ServiceClientBase;true;Post;(System.Object);;Argument[0];remote", + "ServiceStack;ServiceClientBase;true;Put;(System.Object);;Argument[0];remote", + "ServiceStack;ServiceClientBase;true;Head;(System.Object);;Argument[0];remote", + "ServiceStack;ServiceClientBase;true;Head;(ServiceStack.IReturn);;Argument[0];remote", + "ServiceStack;ServiceClientBase;true;CustomMethod;(System.String,System.String,System.Object);;Argument[2];remote", + "ServiceStack;ServiceClientBase;true;CustomMethodAsync;(System.String,System.String,System.Object,System.Threading.CancellationToken);;Argument[2];remote", + "ServiceStack;ServiceClientBase;true;DownloadBytes;(System.String,System.String,System.Object);;Argument[2];remote", + "ServiceStack;ServiceClientBase;true;DownloadBytesAsync;(System.String,System.String,System.Object);;Argument[2];remote" + ] } } -/** SQLi support for the ServiceStack framework */ -module SQL { - private import semmle.code.csharp.security.dataflow.SqlInjectionQuery - - /** SQLi sinks for ServiceStack */ - class ServiceStackSink extends Sink { - ServiceStackSink() { - exists(MethodCall mc, Method m, int p | - (mc.getTarget() = m.getAnOverrider*() or mc.getTarget() = m.getAnImplementor*()) and - sqlSinkParam(m, p) and - mc.getArgument(p) = this.asExpr() - ) - } +private class ServiceStackSqlSinkModelCsv extends SinkModelCsv { + override predicate row(string row) { + row = + [ + // SqlExpression + "ServiceStack.OrmLite;SqlExpression<>;true;UnsafeAnd;(System.String,System.Object[]);;Argument[0];sql", + "ServiceStack.OrmLite;SqlExpression<>;true;UnsafeFrom;(System.String);;Argument[0];sql", + "ServiceStack.OrmLite;SqlExpression<>;true;UnsafeGroupBy;(System.String);;Argument[0];sql", + "ServiceStack.OrmLite;SqlExpression<>;true;UnsafeHaving;(System.String,System.Object[]);;Argument[0];sql", + "ServiceStack.OrmLite;SqlExpression<>;true;UnsafeOr;(System.String,System.Object[]);;Argument[0];sql", + "ServiceStack.OrmLite;SqlExpression<>;true;UnsafeOrderBy;(System.String);;Argument[0];sql", + "ServiceStack.OrmLite;SqlExpression<>;true;UnsafeSelect;(System.String,System.Boolean);;Argument[0];sql", + "ServiceStack.OrmLite;SqlExpression<>;true;UnsafeSelect;(System.String);;Argument[0];sql", + "ServiceStack.OrmLite;SqlExpression<>;true;UnsafeWhere;(System.String,System.Object[]);;Argument[0];sql", + // IUntypedSqlExpression + "ServiceStack.OrmLite;IUntypedSqlExpression;true;UnsafeAnd;(System.String,System.Object[]);;Argument[0];sql", + "ServiceStack.OrmLite;IUntypedSqlExpression;true;UnsafeFrom;(System.String);;Argument[0];sql", + "ServiceStack.OrmLite;IUntypedSqlExpression;true;UnsafeOr;(System.String,System.Object[]);;Argument[0];sql", + "ServiceStack.OrmLite;IUntypedSqlExpression;true;UnsafeSelect;(System.String);;Argument[0];sql", + "ServiceStack.OrmLite;IUntypedSqlExpression;true;UnsafeWhere;(System.String,System.Object[]);;Argument[0];sql", + // OrmLiteReadApi + "ServiceStack.OrmLite;OrmLiteReadApi;false;ExecuteNonQuery;(System.Data.IDbConnection,System.String);;Argument[1];sql", + "ServiceStack.OrmLite;OrmLiteReadApi;false;ExecuteNonQuery;(System.Data.IDbConnection,System.String,System.Object);;Argument[1];sql", + "ServiceStack.OrmLite;OrmLiteReadApi;false;ExecuteNonQuery;(System.Data.IDbConnection,System.String,System.Action);;Argument[1];sql", + "ServiceStack.OrmLite;OrmLiteReadApi;false;ExecuteNonQuery;(System.Data.IDbConnection,System.String,System.Collections.Generic.Dictionary);;Argument[1];sql", + "ServiceStack.OrmLite;OrmLiteReadApi;false;Exists;(System.Data.IDbConnection,System.String,System.Object);;Argument[1];sql", + "ServiceStack.OrmLite;OrmLiteReadApi;false;Dictionary;(System.Data.IDbConnection,System.String,System.Object);;Argument[1];sql", + "ServiceStack.OrmLite;OrmLiteReadApi;false;Lookup;(System.Data.IDbConnection,System.String,System.Object);;Argument[1];sql", + "ServiceStack.OrmLite;OrmLiteReadApi;false;Lookup;(System.Data.IDbConnection,System.String,System.Collections.Generic.IEnumerable);;Argument[1];sql", + "ServiceStack.OrmLite;OrmLiteReadApi;false;KeyValuePairs;(System.Data.IDbConnection,System.String,System.System.Object);;Argument[1];sql", + "ServiceStack.OrmLite;OrmLiteReadApi;false;Scalar;(System.Data.IDbConnection,System.String,System.Object);;Argument[1];sql", + "ServiceStack.OrmLite;OrmLiteReadApi;false;Scalar;(System.Data.IDbConnection,System.String,System.Collections.Generic.IEnumerable);;Argument[1];sql", + "ServiceStack.OrmLite;OrmLiteReadApi;false;Select;(System.Data.IDbConnection,System.Type,System.String,System.Object);;Argument[2];sql", + "ServiceStack.OrmLite;OrmLiteReadApi;false;Select;(System.Data.IDbConnection,System.String);;Argument[1];sql", + "ServiceStack.OrmLite;OrmLiteReadApi;false;Select;(System.Data.IDbConnection,System.String,System.Collections.Generic.Dictionary);;Argument[1];sql", + "ServiceStack.OrmLite;OrmLiteReadApi;false;Select;(System.Data.IDbConnection,System.String,System.Collections.Generic.IEnumerable);;Argument[1];sql", + "ServiceStack.OrmLite;OrmLiteReadApi;false;Select;(System.Data.IDbConnection,System.String,System.Object);;Argument[1];sql", + "ServiceStack.OrmLite;OrmLiteReadApi;false;SelectLazy;(System.Data.IDbConnection,System.String,System.Object);;Argument[1];sql", + "ServiceStack.OrmLite;OrmLiteReadApi;false;SelectNonDefaults;(System.Data.IDbConnection,System.String,T);;Argument[1];sql", + "ServiceStack.OrmLite;OrmLiteReadApi;false;Single;(System.Data.IDbConnection,System.String,System.Object);;Argument[1];sql", + "ServiceStack.OrmLite;OrmLiteReadApi;false;Single;(System.Data.IDbConnection,System.String,System.Collections.Generic.IEnumerable);;Argument[1];sql", + "ServiceStack.OrmLite;OrmLiteReadApi;false;SqlColumn;(System.Data.IDbConnection,System.String,System.Collections.Generic.Dictionary);;Argument[1];sql", + "ServiceStack.OrmLite;OrmLiteReadApi;false;SqlColumn;(System.Data.IDbConnection,System.String,System.Collections.Generic.IEnumerable);;Argument[1];sql", + "ServiceStack.OrmLite;OrmLiteReadApi;false;SqlColumn;(System.Data.IDbConnection,System.String,System.Object);;Argument[1];sql", + "ServiceStack.OrmLite;OrmLiteReadApi;false;SqlList;(System.Data.IDbConnection,System.String,System.Collections.Generic.Dictionary);;Argument[1];sql", + "ServiceStack.OrmLite;OrmLiteReadApi;false;SqlList;(System.Data.IDbConnection,System.String,System.Collections.Generic.IEnumerable);;Argument[1];sql", + "ServiceStack.OrmLite;OrmLiteReadApi;false;SqlList;(System.Data.IDbConnection,System.String,System.Object);;Argument[1];sql", + "ServiceStack.OrmLite;OrmLiteReadApi;false;SqlList;(System.Data.IDbConnection,System.String,System.Action);;Argument[1];sql", + "ServiceStack.OrmLite;OrmLiteReadApi;false;SqlScalar;(System.Data.IDbConnection,System.String,System.Collections.Generic.Dictionary);;Argument[1];sql", + "ServiceStack.OrmLite;OrmLiteReadApi;false;SqlScalar;(System.Data.IDbConnection,System.String,System.Collections.Generic.IEnumerable);;Argument[1];sql", + "ServiceStack.OrmLite;OrmLiteReadApi;false;SqlScalar;(System.Data.IDbConnection,System.String,System.Object);;Argument[1];sql", + "ServiceStack.OrmLite;OrmLiteReadApi;false;Column;(System.Data.IDbConnection,System.String,System.Object);;Argument[1];sql", + "ServiceStack.OrmLite;OrmLiteReadApi;false;Column;(System.Data.IDbConnection,System.String,System.Collections.Generic.IEnumerable);;Argument[1];sql", + "ServiceStack.OrmLite;OrmLiteReadApi;false;ColumnDistinct;(System.Data.IDbConnection,System.String,System.Object);;Argument[1];sql", + "ServiceStack.OrmLite;OrmLiteReadApi;false;ColumnDistinct;(System.Data.IDbConnection,System.String,System.Collections.Generic.IEnumerable);;Argument[1];sql", + "ServiceStack.OrmLite;OrmLiteReadApi;false;ColumnLazy;(System.Data.IDbConnection,System.String,System.Object);;Argument[1];sql", + "ServiceStack.OrmLite;OrmLiteReadApi;false;ColumnLazy;(System.Data.IDbConnection,System.String,System.Collections.Generic.IEnumerable);;Argument[1];sql", + // OrmLiteReadExpressionsApi + "ServiceStack.OrmLite;OrmLiteReadExpressionsApi;false;RowCount;(System.Data.IDbConnection,System.String,System.Object);;Argument[1];sql", + "ServiceStack.OrmLite;OrmLiteReadExpressionsApi;false;RowCount;(System.Data.IDbConnection,System.String,System.Collections.Generic.IEnumerable);;Argument[1];sql", + // OrmLiteReadExpressionsApiAsync + "ServiceStack.OrmLite;OrmLiteReadExpressionsApiAsync;false;RowCountAsync;(System.Data.IDbConnection,System.String,System.Object,System.Threading.CancellationToken);;Argument[1];sql", + // OrmLiteReadApiAsync + "ServiceStack.OrmLite;OrmLiteReadApiAsync;false;ColumnAsync;(System.Data.IDbConnection,System.String,System.Object,System.Threading.CancellationToken);;Argument[1];sql", + "ServiceStack.OrmLite;OrmLiteReadApiAsync;false;ColumnAsync;(System.Data.IDbConnection,System.String,System.Collections.Generic.IEnumerable,System.Threading.CancellationToken);;Argument[1];sql", + "ServiceStack.OrmLite;OrmLiteReadApiAsync;false;ColumnDistinctAsync;(System.Data.IDbConnection,System.String,System.Object,System.Threading.CancellationToken);;Argument[1];sql", + "ServiceStack.OrmLite;OrmLiteReadApiAsync;false;ColumnDistinctAsync;(System.Data.IDbConnection,System.String,System.Collections.Generic.IEnumerable,System.Threading.CancellationToken);;Argument[1];sql", + "ServiceStack.OrmLite;OrmLiteReadApiAsync;false;DictionaryAsync;(System.Data.IDbConnection,System.String,System.Object,System.Threading.CancellationToken);;Argument[1];sql", + "ServiceStack.OrmLite;OrmLiteReadApiAsync;false;ExecuteNonQueryAsync;(System.Data.IDbConnection,System.String,System.Threading.CancellationToken);;Argument[1];sql", + "ServiceStack.OrmLite;OrmLiteReadApiAsync;false;ExecuteNonQueryAsync;(System.Data.IDbConnection,System.String,System.Object,System.Threading.CancellationToken);;Argument[1];sql", + "ServiceStack.OrmLite;OrmLiteReadApiAsync;false;ExecuteNonQueryAsync;(System.Data.IDbConnection,System.String,System.Collections.Generic.Dictionary,System.Threading.CancellationToken);;Argument[1];sql", + "ServiceStack.OrmLite;OrmLiteReadApiAsync;false;ExistsAsync;(System.Data.IDbConnection,System.String,System.Object,System.Threading.CancellationToken);;Argument[1];sql", + "ServiceStack.OrmLite;OrmLiteReadApiAsync;false;KeyValuePairsAsync;(System.Data.IDbConnection,System.String,System.Object,System.Threading.CancellationToken);;Argument[1];sql", + "ServiceStack.OrmLite;OrmLiteReadApiAsync;false;KeyValuePairsAsync;(System.Data.IDbConnection,System.String,System.Collections.Generic.IEnumerable,System.Threading.CancellationToken);;Argument[1];sql", + "ServiceStack.OrmLite;OrmLiteReadApiAsync;false;LookupAsync;(System.Data.IDbConnection,System.String,System.Object,System.Threading.CancellationToken);;Argument[1];sql", + "ServiceStack.OrmLite;OrmLiteReadApiAsync;false;LookupAsync;(System.Data.IDbCommand,System.String,System.Collections.Generic.IEnumerable,System.Threading.CancellationToken);;Argument[1];sql", + "ServiceStack.OrmLite;OrmLiteReadApiAsync;false;LookupAsync;(System.Data.IDbConnection,System.String,System.Collections.Generic.IEnumerable,System.Threading.CancellationToken);;Argument[1];sql", + "ServiceStack.OrmLite;OrmLiteReadApiAsync;false;ScalarAsync;(System.Data.IDbConnection,System.String,System.Object,System.Threading.CancellationToken);;Argument[1];sql", + "ServiceStack.OrmLite;OrmLiteReadApiAsync;false;ScalarAsync;(System.Data.IDbConnection,System.String,System.Collections.Generic.IEnumerable,System.Threading.CancellationToken);;Argument[1];sql", + "ServiceStack.OrmLite;OrmLiteReadApiAsync;false;SelectAsync;(System.Data.IDbConnection,System.Type,System.String,System.Object,System.Threading.CancellationToken);;Argument[2];sql", + "ServiceStack.OrmLite;OrmLiteReadApiAsync;false;SelectAsync;(System.Data.IDbConnection,System.String,System.Threading.CancellationToken);;Argument[1];sql", + "ServiceStack.OrmLite;OrmLiteReadApiAsync;false;SelectAsync;(System.Data.IDbConnection,System.String,System.Collections.Generic.Dictionary,System.Threading.CancellationToken);;Argument[1];sql", + "ServiceStack.OrmLite;OrmLiteReadApiAsync;false;SelectAsync;(System.Data.IDbConnection,System.String,System.Collections.Generic.IEnumerable,System.Threading.CancellationToken);;Argument[1];sql", + "ServiceStack.OrmLite;OrmLiteReadApiAsync;false;SelectAsync;(System.Data.IDbConnection,System.String,System.Object,System.Threading.CancellationToken);;Argument[1];sql", + "ServiceStack.OrmLite;OrmLiteReadApiAsync;false;SelectNonDefaultsAsync;(System.Data.IDbConnection,System.String,T,System.Threading.CancellationToken);;Argument[1];sql", + "ServiceStack.OrmLite;OrmLiteReadApiAsync;false;SingleAsync;(System.Data.IDbConnection,System.String,System.Object,System.Threading.CancellationToken);;Argument[1];sql", + "ServiceStack.OrmLite;OrmLiteReadApiAsync;false;SingleAsync;(System.Data.IDbConnection,System.String,System.Collections.Generic.IEnumerable,System.Threading.CancellationToken);;Argument[1];sql", + "ServiceStack.OrmLite;OrmLiteReadApiAsync;false;SqlColumnAsync;(System.Data.IDbConnection,System.String,System.Collections.Generic.Dictionary,System.Threading.CancellationToken);;Argument[1];sql", + "ServiceStack.OrmLite;OrmLiteReadApiAsync;false;SqlColumnAsync;(System.Data.IDbConnection,System.String,System.Collections.Generic.IEnumerable,System.Threading.CancellationToken);;Argument[1];sql", + "ServiceStack.OrmLite;OrmLiteReadApiAsync;false;SqlColumnAsync;(System.Data.IDbConnection,System.String,System.Object,System.Threading.CancellationToken);;Argument[1];sql", + "ServiceStack.OrmLite;OrmLiteReadApiAsync;false;SqlListAsync;(System.Data.IDbConnection,System.String,System.Collections.Generic.Dictionary,System.Threading.CancellationToken);;Argument[1];sql", + "ServiceStack.OrmLite;OrmLiteReadApiAsync;false;SqlListAsync;(System.Data.IDbConnection,System.String,System.Collections.Generic.IEnumerable,System.Threading.CancellationToken);;Argument[1];sql", + "ServiceStack.OrmLite;OrmLiteReadApiAsync;false;SqlListAsync;(System.Data.IDbConnection,System.String,System.Object,System.Threading.CancellationToken);;Argument[1];sql", + "ServiceStack.OrmLite;OrmLiteReadApiAsync;false;SqlListAsync;(System.Data.IDbConnection,System.String,System.Action,System.Threading.CancellationToken);;Argument[1];sql", + "ServiceStack.OrmLite;OrmLiteReadApiAsync;false;SqlScalarAsync;(System.Data.IDbConnection,System.String,System.Collections.Generic.Dictionary,System.Threading.CancellationToken);;Argument[1];sql", + "ServiceStack.OrmLite;OrmLiteReadApiAsync;false;SqlScalarAsync;(System.Data.IDbConnection,System.String,System.Collections.Generic.IEnumerable,System.Threading.CancellationToken);;Argument[1];sql", + "ServiceStack.OrmLite;OrmLiteReadApiAsync;false;SqlScalarAsync;(System.Data.IDbConnection,System.String,System.Object,System.Threading.CancellationToken);;Argument[1];sql", + // Write API + "ServiceStack.OrmLite;OrmLiteWriteApi;false;ExecuteSql;(System.Data.IDbConnection,System.String);;Argument[1];sql", + "ServiceStack.OrmLite;OrmLiteWriteApi;false;ExecuteSql;(System.Data.IDbConnection,System.String,System.Object);;Argument[1];sql", + "ServiceStack.OrmLite;OrmLiteWriteApi;false;ExecuteSql;(System.Data.IDbConnection,System.String,System.Collections.Generic.Dictionary);;Argument[1];sql", + "ServiceStack.OrmLite;OrmLiteWriteApiAsync;false;ExecuteSqlAsync;(System.Data.IDbConnection,System.String,System.Threading.CancellationToken);;Argument[1];sql", + "ServiceStack.OrmLite;OrmLiteWriteApiAsync;false;ExecuteSqlAsync;(System.Data.IDbConnection,System.String,System.Object,System.Threading.CancellationToken);;Argument[1];sql", + // Redis API + "ServiceStack.Redis;IRedisClient;true;Custom;(System.Object[]);;Argument[0];sql", + "ServiceStack.Redis;IRedisClient;true;ExecCachedLua;(System.String,System.Func);;Argument[0];sql", + "ServiceStack.Redis;IRedisClient;true;ExecLua;(System.String,System.String[],System.String[]);;Argument[0];sql", + "ServiceStack.Redis;IRedisClient;true;ExecLua;(System.String,System.String[]);;Argument[0];sql", + "ServiceStack.Redis;IRedisClient;true;ExecLuaAsInt;(System.String,System.String[],System.String[]);;Argument[0];sql", + "ServiceStack.Redis;IRedisClient;true;ExecLuaAsInt;(System.String,System.String[]);;Argument[0];sql", + "ServiceStack.Redis;IRedisClient;true;ExecLuaAsList;(System.String,System.String[],System.String[]);;Argument[0];sql", + "ServiceStack.Redis;IRedisClient;true;ExecLuaAsList;(System.String,System.String[]);;Argument[0];sql", + "ServiceStack.Redis;IRedisClient;true;ExecLuaAsString;(System.String,System.String[],System.String[]);;Argument[0];sql", + "ServiceStack.Redis;IRedisClient;true;ExecLuaAsString;(System.String,System.String[]);;Argument[0];sql", + "ServiceStack.Redis;IRedisClient;true;LoadLuaScript;(System.String);;Argument[0];sql", + // IRedisClientAsync + "ServiceStack.Redis;IRedisClientAsync;true;CustomAsync;(System.Object[]);;Argument[0];sql", + "ServiceStack.Redis;IRedisClientAsync;true;CustomAsync;(System.Object[],System.Threading.CancellationToken);;Element of Argument[0];sql", + "ServiceStack.Redis;IRedisClientAsync;true;ExecCachedLuaAsync;(System.String,System.Func>,System.Threading.CancellationToken);;Argument[0];sql", + "ServiceStack.Redis;IRedisClientAsync;true;ExecLuaAsync;(System.String,System.String[],System.String[],System.Threading.CancellationToken);;Argument[0];sql", + "ServiceStack.Redis;IRedisClientAsync;true;ExecLuaAsync;(System.String,System.String[],System.Threading.CancellationToken);;Argument[0];sql", + "ServiceStack.Redis;IRedisClientAsync;true;ExecLuaAsync;(System.String,System.String[]);;Argument[0];sql", + "ServiceStack.Redis;IRedisClientAsync;true;ExecLuaAsIntAsync;(System.String,System.String[],System.String[],System.Threading.CancellationToken);;Argument[0];sql", + "ServiceStack.Redis;IRedisClientAsync;true;ExecLuaAsIntAsync;(System.String,System.String[],System.Threading.CancellationToken);;Argument[0];sql", + "ServiceStack.Redis;IRedisClientAsync;true;ExecLuaAsIntAsync;(System.String,System.String[]);;Argument[0];sql", + "ServiceStack.Redis;IRedisClientAsync;true;ExecLuaAsStringAsync;(System.String,System.String[],System.String[],System.Threading.CancellationToken);;Argument[0];sql", + "ServiceStack.Redis;IRedisClientAsync;true;ExecLuaAsStringAsync;(System.String,System.String[],System.Threading.CancellationToken);;Argument[0];sql", + "ServiceStack.Redis;IRedisClientAsync;true;ExecLuaAsStringAsync;(System.String,System.String[]);;Argument[0];sql", + "ServiceStack.Redis;IRedisClientAsync;true;ExecLuaAsListAsync;(System.String,System.String[],System.String[],System.Threading.CancellationToken);;Argument[0];sql", + "ServiceStack.Redis;IRedisClientAsync;true;ExecLuaAsListAsync;(System.String,System.String[],System.Threading.CancellationToken);;Argument[0];sql", + "ServiceStack.Redis;IRedisClientAsync;true;ExecLuaAsListAsync;(System.String,System.String[]);;Argument[0];sql", + "ServiceStack.Redis;IRedisClientAsync;true;LoadLuaScriptAsync;(System.String,System.Threading.CancellationToken);;Argument[0];sql" + ] } +} - private predicate sqlSinkParam(Method m, int p) { - exists(RefType cls | cls = m.getDeclaringType() | - // if using the typed query builder api, only need to worry about Unsafe variants - cls.getQualifiedName() = - ["ServiceStack.OrmLite.SqlExpression", "ServiceStack.OrmLite.IUntypedSqlExpression"] and - m.getName().matches("Unsafe%") and - p = 0 - or - // Read api - all string typed 1st params are potential sql sinks. They should be templates, not directly user controlled. - cls.getQualifiedName() = - [ - "ServiceStack.OrmLite.OrmLiteReadApi", "ServiceStack.OrmLite.OrmLiteReadExpressionsApi", - "ServiceStack.OrmLite.OrmLiteReadApiAsync", - "ServiceStack.OrmLite.OrmLiteReadExpressionsApiAsync" - ] and - m.getParameter(p).getType() instanceof StringType and - p = 1 - or - // Write API - only 2 methods that take string - cls.getQualifiedName() = - ["ServiceStack.OrmLite.OrmLiteWriteApi", "ServiceStack.OrmLite.OrmLiteWriteApiAsync"] and - m.getName() = ["ExecuteSql", "ExecuteSqlAsync"] and - p = 1 - or - // NoSQL sinks in redis client. TODO should these be separate query? - cls.getQualifiedName() = "ServiceStack.Redis.IRedisClient" and - ( - m.getName() = ["Custom", "LoadLuaScript"] - or - m.getName().matches("%Lua%") and not m.getName().matches("%Sha%") - ) and - p = 0 - // TODO - // ServiceStack.OrmLite.OrmLiteUtils.SqlColumn - what about other similar classes? - // couldn't find CustomSelect - // need to handle "PreCreateTable", "PostCreateTable", "PreDropTable", "PostDropTable" - ) +private class ServiceStackXssSummaryModelCsv extends SummaryModelCsv { + override predicate row(string row) { + row = + [ + "ServiceStack;HttpResult;false;HttpResult;(System.String,System.String);;Argument[0];ReturnValue;taint", + "ServiceStack;HttpResult;false;HttpResult;(System.Object,System.String,System.Net.HttpStatusCode);;Argument[0];ReturnValue;taint", + "ServiceStack;HttpResult;false;HttpResult;(System.Object,System.String);;Argument[0];ReturnValue;taint", + "ServiceStack;HttpResult;false;HttpResult;(System.Object,System.Net.HttpStatusCode);;Argument[0];ReturnValue;taint", + "ServiceStack;HttpResult;false;HttpResult;(System.Object);;Argument[0];ReturnValue;taint", + "ServiceStack;HttpResult;false;HttpResult;(System.IO.Stream,System.String);;Argument[0];ReturnValue;taint", + "ServiceStack;HttpResult;false;HttpResult;(System.Byte[],System.String);;Argument[0];ReturnValue;taint" + ] } } @@ -166,14 +310,21 @@ module XSS { /** XSS sinks for ServiceStack */ class XssSink extends Sink { XssSink() { - exists(ServiceClass service, ReturnStmt r | - this.asExpr() = r.getExpr() and - r.getEnclosingCallable() = service.getARequestMethod() - ) - or - exists(ObjectCreation oc | - oc.getType().hasQualifiedName("ServiceStack.HttpResult") and - this.asExpr() = oc.getArgument(0) + exists(ServiceClass service, Method m, Expr e | + service.getARequestMethod() = m and + this.asExpr() = e and + ( + exists(ReturnStmt r | + e = r.getExpr() and + r.getEnclosingCallable() = m + ) + or + e = m.getExpressionBody() + ) and + ( + e.getType() instanceof StringType or + e.getType().hasQualifiedName("ServiceStack", "HttpResult") + ) ) } } diff --git a/csharp/ql/src/semmle/code/csharp/frameworks/Sql.qll b/csharp/ql/src/semmle/code/csharp/frameworks/Sql.qll index c2b4e0c19e3..1a727030bea 100644 --- a/csharp/ql/src/semmle/code/csharp/frameworks/Sql.qll +++ b/csharp/ql/src/semmle/code/csharp/frameworks/Sql.qll @@ -5,7 +5,6 @@ private import semmle.code.csharp.frameworks.system.Data private import semmle.code.csharp.frameworks.system.data.SqlClient private import semmle.code.csharp.frameworks.EntityFramework private import semmle.code.csharp.frameworks.NHibernate -private import semmle.code.csharp.frameworks.ServiceStack::SQL private import semmle.code.csharp.frameworks.Dapper private import semmle.code.csharp.dataflow.DataFlow4 diff --git a/csharp/ql/src/semmle/code/csharp/security/dataflow/SqlInjectionQuery.qll b/csharp/ql/src/semmle/code/csharp/security/dataflow/SqlInjectionQuery.qll index 37b2d7fd7c3..f4184a391b9 100644 --- a/csharp/ql/src/semmle/code/csharp/security/dataflow/SqlInjectionQuery.qll +++ b/csharp/ql/src/semmle/code/csharp/security/dataflow/SqlInjectionQuery.qll @@ -7,6 +7,7 @@ private import semmle.code.csharp.security.dataflow.flowsources.Remote private import semmle.code.csharp.security.dataflow.flowsources.Local private import semmle.code.csharp.frameworks.Sql private import semmle.code.csharp.security.Sanitizers +private import semmle.code.csharp.dataflow.ExternalFlow /** * A source specific to SQL injection vulnerabilities. @@ -51,6 +52,11 @@ class SqlInjectionExprSink extends Sink { SqlInjectionExprSink() { exists(SqlExpr s | this.getExpr() = s.getSql()) } } +/** SQL sinks defined through CSV models. */ +private class ExternalSqlInjectionExprSink extends Sink { + ExternalSqlInjectionExprSink() { sinkNode(this, "sql") } +} + private class SimpleTypeSanitizer extends Sanitizer, SimpleTypeSanitizedExpr { } private class GuidSanitizer extends Sanitizer, GuidSanitizedExpr { } diff --git a/csharp/ql/src/semmle/code/csharp/security/dataflow/flowsinks/ExternalLocationSink.qll b/csharp/ql/src/semmle/code/csharp/security/dataflow/flowsinks/ExternalLocationSink.qll index 8d80cb81324..673473eb49b 100644 --- a/csharp/ql/src/semmle/code/csharp/security/dataflow/flowsinks/ExternalLocationSink.qll +++ b/csharp/ql/src/semmle/code/csharp/security/dataflow/flowsinks/ExternalLocationSink.qll @@ -6,7 +6,7 @@ import csharp private import Remote private import semmle.code.csharp.commons.Loggers private import semmle.code.csharp.frameworks.system.Web -private import semmle.code.csharp.frameworks.ServiceStack::Sinks +private import semmle.code.csharp.dataflow.ExternalFlow /** * An external location sink. @@ -17,6 +17,10 @@ private import semmle.code.csharp.frameworks.ServiceStack::Sinks */ abstract class ExternalLocationSink extends DataFlow::ExprNode { } +private class ExternalModelSink extends ExternalLocationSink { + ExternalModelSink() { sinkNode(this, "remote") } +} + /** * An argument to a call to a method on a logger class. */ diff --git a/csharp/ql/src/semmle/code/csharp/security/dataflow/flowsources/Remote.qll b/csharp/ql/src/semmle/code/csharp/security/dataflow/flowsources/Remote.qll index 7d6fdb26e05..25647e50f2e 100644 --- a/csharp/ql/src/semmle/code/csharp/security/dataflow/flowsources/Remote.qll +++ b/csharp/ql/src/semmle/code/csharp/security/dataflow/flowsources/Remote.qll @@ -12,7 +12,6 @@ private import semmle.code.csharp.frameworks.system.web.ui.WebControls private import semmle.code.csharp.frameworks.WCF private import semmle.code.csharp.frameworks.microsoft.Owin private import semmle.code.csharp.frameworks.microsoft.AspNetCore -private import semmle.code.csharp.frameworks.ServiceStack::Sources /** A data flow source of remote user input. */ abstract class RemoteFlowSource extends DataFlow::Node { diff --git a/csharp/ql/test/library-tests/frameworks/ServiceStack/ServiceStack.cs b/csharp/ql/test/library-tests/frameworks/ServiceStack/ServiceStack.cs deleted file mode 100644 index ead17ae4813..00000000000 --- a/csharp/ql/test/library-tests/frameworks/ServiceStack/ServiceStack.cs +++ /dev/null @@ -1,9 +0,0 @@ -using System.Collections.Generic; -using System.Linq; -using ServiceStack; - -namespace ServiceStackTest -{ - - -} diff --git a/csharp/ql/test/library-tests/frameworks/ServiceStack/SinksExternal.cs b/csharp/ql/test/library-tests/frameworks/ServiceStack/SinksExternal.cs new file mode 100644 index 00000000000..65e77d237c9 --- /dev/null +++ b/csharp/ql/test/library-tests/frameworks/ServiceStack/SinksExternal.cs @@ -0,0 +1,61 @@ +using System.Collections.Generic; +using System.Linq; +using ServiceStack; +using System.Threading.Tasks; +using System; +using Microsoft.Extensions.ObjectPool; +using System.IO; + +namespace ServiceStackTest +{ + public class ResponseDto { } + public class ReqDto1 : IReturn { } + + public class ReqDto2 : IReturnVoid { } + + public class C + { + public async Task M() + { + var client = new JsonServiceClient(""); + + client.DeserializeFromStream(new MemoryStream()); // not a sink + + client.Get(new ReqDto1()); + client.Get(new ReqDto2()); + client.Get("relativeOrAbsoluteUrl"); // not a sink + client.Get(new object()); + client.Get("relativeOrAbsoluteUrl"); // not a sink + client.Get(new object()); + + await client.GetAsync("relativeOrAbsoluteUrl"); // not a sink + await client.GetAsync(new object()); + await client.GetAsync(new ReqDto1()); + await client.GetAsync(new ReqDto2()); + + + client.CustomMethod("GET", new ReqDto2()); + client.CustomMethod("GET", "relativeOrAbsoluteUrl", new ReqDto1()); + client.CustomMethod("GET", new ReqDto1()); + client.CustomMethod("GET", new object()); + client.CustomMethod("GET", "relativeOrAbsoluteUrl", new object()); + client.CustomMethod("GET", (IReturnVoid)null); + await client.CustomMethodAsync("GET", new ReqDto2()); + await client.CustomMethodAsync("GET", "relativeOrAbsoluteUrl", new ReqDto1()); + await client.CustomMethodAsync("GET", new ReqDto1()); + await client.CustomMethodAsync("GET", new object()); + + client.DownloadBytes("GET", "requestUri", new object()); + await client.DownloadBytesAsync("GET", "relativeOrAbsoluteUrl", new object()); + + client.Head(new object()); + client.Patch(new object()); + client.Post(new object()); + client.Put(new object()); + + client.Send(new object()); + client.Publish(new ReqDto1()); + client.SendOneWay(new object()); + } + } +} diff --git a/csharp/ql/test/library-tests/frameworks/ServiceStack/SinksSql.cs b/csharp/ql/test/library-tests/frameworks/ServiceStack/SinksSql.cs new file mode 100644 index 00000000000..19c8f14a582 --- /dev/null +++ b/csharp/ql/test/library-tests/frameworks/ServiceStack/SinksSql.cs @@ -0,0 +1,74 @@ +using System.Collections.Generic; +using System.Linq; +using ServiceStack; +using System.Threading.Tasks; +using System; +using Microsoft.AspNetCore.Components.Forms; +using ServiceStack.OrmLite; + +namespace ServiceStackTest +{ + public class Table + { + public int Column { get; set; } + } + + public class Sql + { + public static async Task M() + { + ServiceStack.OrmLite.SqlExpression expr = null; + + expr = expr.Select
    (t => t.Column); // ok + + expr = expr + .UnsafeAnd("SQL") + .UnsafeFrom("SQL") + .UnsafeGroupBy("SQL") + .UnsafeHaving("SQL") + .UnsafeOr("SQL") + .UnsafeOrderBy("SQL") + .UnsafeSelect("SQL") + .UnsafeWhere("SQL"); + + var untyped = expr.GetUntypedSqlExpression(); + + untyped + .UnsafeAnd("SQL") + .UnsafeFrom("SQL") + .UnsafeOr("SQL") + .UnsafeSelect("SQL") + .UnsafeWhere("SQL") + .Where("SQL"); // safe + + System.Data.IDbConnection conn = null; + + var row = conn.SingleById
    (1); // ok + + var rows = conn.Select
    (typeof(Table), "SQL", null); + rows = await conn.SelectAsync
    (typeof(Table), "SQL", null); + + var count = conn.RowCount("SQL"); + count = await conn.RowCountAsync("SQL"); + + conn.ExecuteSql("SQL", null); + await conn.ExecuteSqlAsync("SQL", null); + } + + public static async Task Redis() + { + ServiceStack.Redis.IRedisClient client = null; + + client.SetValue("key", "value"); // ok + + var s = client.LoadLuaScript("script"); + client.ExecLua("script", new[] { "" }, new[] { "" }); + client.ExecLuaSha("SHA", new[] { "" }, new[] { "" }); // ok + client.Custom("command", "arg"); // false negative, params sinks doesn't work + + ServiceStack.Redis.IRedisClientAsync asyncClient = null; + s = await asyncClient.LoadLuaScriptAsync("script"); + asyncClient.ExecLuaAsync("script", new[] { "" }, new[] { "" }); + } + } +} diff --git a/csharp/ql/test/library-tests/frameworks/ServiceStack/SinksXss.cs b/csharp/ql/test/library-tests/frameworks/ServiceStack/SinksXss.cs new file mode 100644 index 00000000000..df3bbd155de --- /dev/null +++ b/csharp/ql/test/library-tests/frameworks/ServiceStack/SinksXss.cs @@ -0,0 +1,27 @@ +using System.Collections.Generic; +using System.Linq; +using ServiceStack; +using System.Threading.Tasks; +using System; + +namespace ServiceStackTest +{ + public class XssServices : Service + { + public object Get(Request1 request) + { + return ""); + } +} diff --git a/java/ql/src/Security/CWE/CWE-079/XSS.qhelp b/java/ql/src/Security/CWE/CWE-079/XSS.qhelp index 428b44c8db9..b010a5918eb 100644 --- a/java/ql/src/Security/CWE/CWE-079/XSS.qhelp +++ b/java/ql/src/Security/CWE/CWE-079/XSS.qhelp @@ -23,6 +23,15 @@ leaving the website vulnerable to cross-site scripting.

    + + + + +

    The following example shows the page parameter being written directly to a custom JSF renderer +of UI components, which leaves the website vulnerable to cross-site scripting.

    + + +
    diff --git a/java/ql/src/semmle/code/java/frameworks/javaee/jsf/JSFRenderer.qll b/java/ql/src/semmle/code/java/frameworks/javaee/jsf/JSFRenderer.qll new file mode 100644 index 00000000000..66ef1485a2c --- /dev/null +++ b/java/ql/src/semmle/code/java/frameworks/javaee/jsf/JSFRenderer.qll @@ -0,0 +1,123 @@ +/** Provides classes and predicates for working with JavaServer Faces renderer. */ + +import java +private import semmle.code.java.dataflow.ExternalFlow + +/** + * The JSF class `FacesContext` for processing HTTP requests. + */ +class FacesContext extends RefType { + FacesContext() { + this.hasQualifiedName(["javax.faces.context", "jakarta.faces.context"], "FacesContext") + } +} + +/** + * The JSF class `ExternalContext` allowing JavaServer Faces based applications to run in + * either a Servlet or a Portlet environment. + */ +class ExternalContext extends RefType { + ExternalContext() { + this.hasQualifiedName(["javax.faces.context", "jakarta.faces.context"], "ExternalContext") + } +} + +/** + * The base class type `UIComponent` for all user interface components in JavaServer Faces. + */ +class FacesUIComponent extends RefType { + FacesUIComponent() { + this.hasQualifiedName(["javax.faces.component", "jakarta.faces.component"], "UIComponent") + } +} + +/** + * The JSF class `Renderer` that converts internal representation of `UIComponent` into the output + * stream (or writer) associated with the response we are creating for a particular request. + */ +class FacesRenderer extends RefType { + FacesRenderer() { + this.hasQualifiedName(["javax.faces.render", "jakarta.faces.render"], "Renderer") + } +} + +/** + * The JSF class `ResponseWriter` that outputs and producing elements and attributes for markup + * languages like HTML and XML. + */ +class FacesResponseWriter extends RefType { + FacesResponseWriter() { + this.hasQualifiedName(["javax.faces.context", "jakarta.faces.context"], "ResponseWriter") + } +} + +/** + * The class `ResponseStream` that produces binary output. + */ +class FacesResponseStream extends RefType { + FacesResponseStream() { + this.hasQualifiedName(["javax.faces.context", "jakarta.faces.context"], "ResponseStream") + } +} + +private class ExternalContextSource extends SourceModelCsv { + override predicate row(string row) { + row = + [ + "javax.faces.context;ExternalContext;true;getRequestParameterMap;();;ReturnValue;remote", + "javax.faces.context;ExternalContext;true;getRequestParameterNames;();;ReturnValue;remote", + "javax.faces.context;ExternalContext;true;getRequestParameterValuesMap;();;ReturnValue;remote", + "javax.faces.context;ExternalContext;true;getRequestPathInfo;();;ReturnValue;remote", + "javax.faces.context;ExternalContext;true;getResource;(String);;ReturnValue;remote", + "javax.faces.context;ExternalContext;true;getResourceAsStream;(String);;ReturnValue;remote", + "javax.faces.context;ExternalContext;true;getResourcePaths;(String);;ReturnValue;remote", + "javax.faces.context;ExternalContext;true;getRequestCookieMap;();;ReturnValue;remote", + "javax.faces.context;ExternalContext;true;getRequestHeaderMap;();;ReturnValue;remote", + "javax.faces.context;ExternalContext;true;getRequestHeaderValuesMap;();;ReturnValue;remote", + "jakarta.faces.context;ExternalContext;true;getRequestParameterMap;();;ReturnValue;remote", + "jakarta.faces.context;ExternalContext;true;getRequestParameterNames;();;ReturnValue;remote", + "jakarta.faces.context;ExternalContext;true;getRequestParameterValuesMap;();;ReturnValue;remote", + "jakarta.faces.context;ExternalContext;true;getRequestPathInfo;();;ReturnValue;remote", + "jakarta.faces.context;ExternalContext;true;getResource;(String);;ReturnValue;remote", + "jakarta.faces.context;ExternalContext;true;getResourceAsStream;(String);;ReturnValue;remote", + "jakarta.faces.context;ExternalContext;true;getResourcePaths;(String);;ReturnValue;remote", + "jakarta.faces.context;ExternalContext;true;getRequestCookieMap;();;ReturnValue;remote", + "jakarta.faces.context;ExternalContext;true;getRequestHeaderMap;();;ReturnValue;remote", + "jakarta.faces.context;ExternalContext;true;getRequestHeaderValuesMap;();;ReturnValue;remote" + ] + } +} + +/** + * The method `getResponseWriter()` declared in JSF `ExternalContext`. + */ +class FacesGetResponseWriterMethod extends Method { + FacesGetResponseWriterMethod() { + getDeclaringType() instanceof FacesContext and + hasName("getResponseWriter") and + getNumberOfParameters() = 0 + } +} + +/** + * The method `getResponseStream()` declared in JSF `ExternalContext`. + */ +class FacesGetResponseStreamMethod extends Method { + FacesGetResponseStreamMethod() { + getDeclaringType() instanceof FacesContext and + hasName("getResponseStream") and + getNumberOfParameters() = 0 + } +} + +private class ExternalContextXssSink extends SinkModelCsv { + override predicate row(string row) { + row = + [ + "javax.faces.context;ResponseWriter;true;write;;;Argument[0];xss", + "javax.faces.context;ResponseStream;true;write;;;Argument[0];xss", + "jakarta.faces.context;ResponseWriter;true;write;;;Argument[0];xss", + "jakarta.faces.context;ResponseStream;true;write;;;Argument[0];xss" + ] + } +} diff --git a/java/ql/test/query-tests/security/CWE-079/semmle/tests/JsfXSS.java b/java/ql/test/query-tests/security/CWE-079/semmle/tests/JsfXSS.java new file mode 100644 index 00000000000..c2b59b98d18 --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-079/semmle/tests/JsfXSS.java @@ -0,0 +1,53 @@ +import java.io.IOException; +import java.util.Map; + +import javax.faces.component.UIComponent; +import javax.faces.context.FacesContext; +import javax.faces.context.ResponseWriter; +import javax.faces.render.FacesRenderer; +import javax.faces.render.Renderer; + +@FacesRenderer(componentFamily = "", rendererType = "") +public class JsfXSS extends Renderer +{ + @Override + // BAD: directly output user input. + public void encodeBegin(FacesContext facesContext, UIComponent component) throws IOException + { + super.encodeBegin(facesContext, component); + + Map requestParameters = facesContext.getExternalContext().getRequestParameterMap(); + String windowId = requestParameters.get("window_id"); + + ResponseWriter writer = facesContext.getResponseWriter(); + writer.write(""); + } + + // GOOD: use the method `writeText` that performs escaping appropriate for the markup language being rendered. + public void encodeBegin2(FacesContext facesContext, UIComponent component) throws IOException + { + super.encodeBegin(facesContext, component); + + Map requestParameters = facesContext.getExternalContext().getRequestParameterMap(); + String windowId = requestParameters.get("window_id"); + + ResponseWriter writer = facesContext.getResponseWriter(); + writer.write(""); + } +} diff --git a/java/ql/test/query-tests/security/CWE-079/semmle/tests/options b/java/ql/test/query-tests/security/CWE-079/semmle/tests/options index 719c5e3dd57..22487fb2daf 100644 --- a/java/ql/test/query-tests/security/CWE-079/semmle/tests/options +++ b/java/ql/test/query-tests/security/CWE-079/semmle/tests/options @@ -1 +1 @@ -//semmle-extractor-options: --javac-args -cp ${testdir}/../../../../../stubs/servlet-api-2.4:${testdir}/../../../../../stubs/javax-ws-rs-api-2.1.1/:${testdir}/../../../../../stubs/springframework-5.3.8 +//semmle-extractor-options: --javac-args -cp ${testdir}/../../../../../stubs/servlet-api-2.4:${testdir}/../../../../../stubs/javax-ws-rs-api-2.1.1/:${testdir}/../../../../../stubs/springframework-5.3.8:${testdir}/../../../../../stubs/javax-faces-2.3/ diff --git a/java/ql/test/stubs/javax-faces-2.3/javax/faces/component/UIComponent.java b/java/ql/test/stubs/javax-faces-2.3/javax/faces/component/UIComponent.java new file mode 100644 index 00000000000..a7d9efd8391 --- /dev/null +++ b/java/ql/test/stubs/javax-faces-2.3/javax/faces/component/UIComponent.java @@ -0,0 +1,89 @@ +/* + * Copyright (c) 1997, 2018 Oracle and/or its affiliates. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v. 2.0, which is available at + * http://www.eclipse.org/legal/epl-2.0. + * + * This Source Code may also be made available under the following Secondary + * Licenses when the conditions for such availability set forth in the + * Eclipse Public License v. 2.0 are satisfied: GNU General Public License, + * version 2 with the GNU Classpath Exception, which is available at + * https://www.gnu.org/software/classpath/license.html. + * + * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 + */ + +package javax.faces.component; + +import java.util.Map; + +/** + *

    + * UIComponent is the base class for + * all user interface components in Jakarta Server Faces. The set of {@link UIComponent} + * instances associated with a particular request and response are organized into a + * component tree under a {@link UIViewRoot} that represents the entire content of the + * request or response. + *

    + * + *

    + * For the convenience of component developers, {@link UIComponentBase} provides the + * default behavior that is specified for a {@link UIComponent}, and is the base class for + * all of the concrete {@link UIComponent} "base" implementations. Component writers are + * encouraged to subclass {@link UIComponentBase}, instead of directly implementing this + * abstract class, to reduce the impact of any future changes to the method signatures. + *

    + * + *

    + * If the {@link javax.faces.event.ListenerFor} annotation is attached to the class + * definition of a Component, that class must also implement + * {@link javax.faces.event.ComponentSystemEventListener}. + *

    + * + *

    + * Dynamically modifying the component tree can happen at any time, during and after + * restoring the view, but not during state saving and needs to function properly with + * respect to rendering and state saving + *

    + */ +public abstract class UIComponent { + + /** + *

    + * Return a mutable Map representing the attributes (and properties, see + * below) associated wth this {@link UIComponent}, keyed by attribute name (which must + * be a String). The returned implementation must support all of the standard and + * optional Map methods, plus support the following additional + * requirements: + *

    + *
      + *
    • The Map implementation must implement the + * java.io.Serializable interface.
    • + *
    • Any attempt to add a null key or value must throw a + * NullPointerException.
    • + *
    • Any attempt to add a key that is not a String must throw a + * ClassCastException.
    • + *
    • If the attribute name specified as a key matches a property of this + * {@link UIComponent}'s implementation class, the following methods will have special + * behavior: + *
        + *
      • containsKey - Return false.
      • + *
      • get() - If the property is readable, call the getter method and + * return the returned value (wrapping primitive values in their corresponding wrapper + * classes); otherwise throw IllegalArgumentException.
      • + *
      • put() - If the property is writeable, call the setter method to + * set the corresponding value (unwrapping primitive values in their corresponding + * wrapper classes). If the property is not writeable, or an attempt is made to set a + * property of primitive type to null, throw + * IllegalArgumentException.
      • + *
      • remove - Throw IllegalArgumentException.
      • + *
      + *
    • + *
    + * + * @return the component attribute map. + */ + public abstract Map getAttributes(); +} diff --git a/java/ql/test/stubs/javax-faces-2.3/javax/faces/context/ExternalContext.java b/java/ql/test/stubs/javax-faces-2.3/javax/faces/context/ExternalContext.java new file mode 100644 index 00000000000..76b985e9788 --- /dev/null +++ b/java/ql/test/stubs/javax-faces-2.3/javax/faces/context/ExternalContext.java @@ -0,0 +1,1076 @@ +/* + * Copyright (c) 1997, 2018 Oracle and/or its affiliates. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v. 2.0, which is available at + * http://www.eclipse.org/legal/epl-2.0. + * + * This Source Code may also be made available under the following Secondary + * Licenses when the conditions for such availability set forth in the + * Eclipse Public License v. 2.0 are satisfied: GNU General Public License, + * version 2 with the GNU Classpath Exception, which is available at + * https://www.gnu.org/software/classpath/license.html. + * + * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 + */ + +package javax.faces.context; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.io.Writer; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Set; + + +/** + *

    + * This class allows the Faces API to be unaware of the nature of its containing + * application environment. In particular, this class allows Jakarta Server Faces based + * applications to run in either a Jakarta Servlet or a Portlet environment.

    + * + *

    The documentation for this class only + * specifies the behavior for the Jakarta Servlet implementation of + * ExternalContext. The Portlet implementation of + * ExternalContext is specified under the revision of the + * Portlet Bridge + * Specification for JavaServer Faces JSR that corresponds to + * this version of the Jakarta Server Faces specification. See the Preface of the + * "prose document", linked + * from the javadocs, for a reference.

    + + *

    If a reference to an + * ExternalContext is obtained during application startup or shutdown + * time, any method documented as "valid to call this method during + * application startup or shutdown" must be supported during application startup or shutdown + * time. The result of calling a method during application startup or shutdown time + * that does not have this designation is undefined.

    + * + *

    An ExternalContext can be injected into a CDI + * managed bean using @Inject ExternalContext externalContext; + *

    + */ + +public abstract class ExternalContext { + + /** + *

    Adds the cookie represented by the + * arguments to the response.

    + * + *
    + * + *

    Jakarta Servlet: This must be accomplished by calling the + * javax.servlet.http.HttpServletResponse method + * addCookie(). The Cookie argument must + * be constructed by passing the name and + * value parameters. If the properties + * arugument is non-null and not empty, the + * Cookie instance must be initialized as described + * below.

    + * + *
    + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
    Cookie handling table
    Key in "values" MapExpected type of value.Name of setter method on Cookie instance to be + * set with the value from the Map.
    commentStringsetComment
    domainStringsetDomain
    maxAgeIntegersetMaxAge
    secureBooleansetSecure
    pathStringsetPath
    httpOnlyBooleansetHttpOnly
    + * + *

    The default implementation throws + * UnsupportedOperationException and is provided for + * the sole purpose of not breaking existing applications that + * extend this class.

    + * + * + * + * @param name To be passed as the first argument to the + * Cookie constructor. + * + * @param value To be passed as the second argument to the + * Cookie constructor. + * + * @param properties A Map containg key/value pairs to be passed + * as arguments to the setter methods as described above. + * + * @throws IllegalArgumentException if the properties + * Map is not-null and not empty and contains + * any keys that are not one of the keys listed above. + * + * @since 2.0 + */ + + public void addResponseCookie(String name, + String value, + Map properties) { + } + + + /** + *

    Dispatch a request to the specified resource to create output + * for this response.

    + * + *

    Jakarta Servlet: This must be accomplished by calling the + * javax.servlet.ServletContext method + * getRequestDispatcher(path), and calling the + * forward() method on the resulting object.

    + *

    If the call to getRequestDisatcher(path) + * returns null, send aServletResponse SC_NOT_FOUND + * error code.

    + * + * @param path Context relative path to the specified resource, + * which must start with a slash ("/") character + * + * @throws javax.faces.FacesException thrown if a ServletException occurs + * @throws IOException if an input/output error occurs + */ + public abstract void dispatch(String path) throws IOException; + + + /** + *

    Return the input URL, after performing any rewriting needed to + * ensure that it will correctly identify an addressable action in the + * current application.

    + * + *

    Encoding the {@link javax.faces.lifecycle.ClientWindow}

    + * + *
    + * + *

    Call {@link javax.faces.lifecycle.ClientWindow#isClientWindowRenderModeEnabled(javax.faces.context.FacesContext) }. + * If the result is false take no further action and return + * the rewritten URL. If the result is true, call {@link #getClientWindow()}. + * If the result is non-null, call {@link javax.faces.lifecycle.ClientWindow#getId()} + * and append the id to the query string of the URL, making the necessary + * allowances for a pre-existing query string or no query-string.

    + * + *

    Call {@link javax.faces.lifecycle.ClientWindow#getQueryURLParameters}. + * If the result is non-{@code null}, for each parameter in the map, + * unconditionally add that parameter to the URL.

    + * + *

    The name + * of the query string parameter is given by the value of the constant + * {@link javax.faces.render.ResponseStateManager#CLIENT_WINDOW_URL_PARAM}.

    + * + *
    + * + *

    Jakarta Servlet: This must be the value returned by the + * javax.servlet.http.HttpServletResponse method + * encodeURL(url).

    + * + * @param url The input URL to be encoded + * + * @return the encoded URL. + * + * @throws NullPointerException if url + * is null + */ + public abstract String encodeActionURL(String url); + + + /** + *

    Return the input URL, after performing any rewriting needed to + * ensure that it will correctly identify an addressable resource in the + * current application.

    + * + *

    Jakarta Servlet: This must be the value returned by the + * javax.servlet.http.HttpServletResponse method + * encodeURL(url).

    + * + * @param url The input URL to be encoded + * + * @return the encoded resource URL. + * + * @throws NullPointerException if url + * is null + */ + // PENDING(craigmcc) - Currently identical to encodeActionURL() + public abstract String encodeResourceURL(String url); + + + /** + *

    + * Return the websocket URL, after performing any rewriting needed to + * ensure that it will correctly identify an addressable websocket in the + * current application. + *

    + * + *

    + * Jakarta Servlet: This must ensure that the input URL is prefixed + * with the correct websocket scheme, domain and port and then + * encoded by {@link #encodeResourceURL(String)}. + *

    + * + * @param url The input URL to be encoded. + * + * @return the encoded websocket URL. + * + * @throws NullPointerException if url is null. + * + * @since 2.3 + */ + public abstract String encodeWebsocketURL(String url); + + + /** + *

    Returns the MIME type of the + * specified file or null if the MIME type is not + * known. The MIME type is determined by the container.

    + + *

    It is valid to call this method + * during application startup or shutdown. If called during application + * startup or shutdown, this method calls through to the + * getMimeType() method on the same container + * context instance (ServletContext or + * PortletContext) as the one used when calling + * getMimeType() on the + * ExternalContext returned by the + * FacesContext during an actual request.

    + + *
    + + *

    Jakarta Servlet: This must be the value returned by the + * javax.servlet.ServletContext method + * getMimeType().

    + * + *
    + * + * @param file The file for which the mime type should be obtained. + * + * @return the MIME type of the file. + * + * @since 2.0 + */ + public String getMimeType(String file) { + return null; + } + + + /** + *

    Return the + * application environment object instance for the current + * appication.

    + + *

    It is valid to call this method + * during application startup or shutdown. If called during application + * startup or shutdown, this returns the same container context instance + * (ServletContext or PortletContext) as + * the one returned when calling getContext() on the + * ExternalContext returned by the + * FacesContext during an actual request.

    + + * + *

    Jakarta Servlet: This must be the current application's + * javax.servlet.ServletContext instance.

    + * + * @return the object of the ServletContext. + * + */ + public abstract Object getContext(); + + + /** + * + *

    Return the name of the container + * context for this application.

    + * + *

    Jakarta Servlet: + * Return the result of calling + * getContextPath() on the + * ServletContext instance for this application.

    + + *

    It is valid to call this method during application startup or + * shutdown.

    + * + *

    The default implementation throws + * UnsupportedOperationException and is provided for + * the sole purpose of not breaking existing applications that + * extend this class.

    + * + * @return the context path of this application. + * + * @since 2.2 + */ + + public String getApplicationContextPath() { + return null; + } + + + /** + *

    Return the value of + * the specified application initialization parameter (if any).

    + * + *

    Jakarta Servlet: This must be the result of the + * javax.servlet.ServletContext method + * getInitParameter(name).

    + * + *

    It is valid to call this method + * during application startup or shutdown. If called during application + * startup or shutdown, this method calls through to the actual container + * context to return the init parameter value.

    + + * @param name Name of the requested initialization parameter + * + * @throws NullPointerException if name + * is null + * + * @return the value of the specified parameter. + * + */ + public abstract String getInitParameter(String name); + + + /** + *

    Return an + * immutable Map whose keys are the set of application + * initialization parameter names configured for this application, + * and whose values are the corresponding parameter values. The + * returned Map must implement the entire contract for + * an unmodifiable map as described in the JavaDocs for + * java.util.Map.

    + * + *

    It is valid to call this method + * during application startup or shutdown. If called during application + * startup or shutdown, this method returns a Map that is backed by + * the same container context instance (ServletContext + * or PortletContext) as the one returned by calling + * getInitParameterMap() on the + * ExternalContext returned by the + * FacesContext during an actual request.

    + * + *

    Jakarta Servlet: This result must be as if it were synthesized + * by calling the javax.servlet.ServletContext + * method getInitParameterNames, and putting + * each configured parameter name/value pair into the result.

    + * + * @return the init parameter map for this application. + * + */ + public abstract Map getInitParameterMap(); + + + /** + *

    Return the login name of the user making the current request + * if any; otherwise, return null.

    + * + *

    Jakarta Servlet: This must be the value returned by the + * javax.servlet.http.HttpServletRequest method + * getRemoteUser().

    + * + * @return the user name of the current request. + * + */ + public abstract String getRemoteUser(); + + + /** + *

    Return the environment-specific object instance for the current + * request.

    + * + *

    Jakarta Servlet: This must be the current request's + * javax.servlet.http.HttpServletRequest instance.

    + * + * @return the instance of the current request. + * + */ + public abstract Object getRequest(); + + + /** + *

    Set the environment-specific request to be returned by + * subsequent calls to {@link #getRequest}. This may be used to + * install a wrapper for the request.

    + * + *

    The default implementation throws + * UnsupportedOperationException and is provided + * for the sole purpose of not breaking existing applications that extend + * this class.

    + * + * @param request the request object to be set. + * + * @since 1.2 + */ + public void setRequest(Object request) { + } + + + /** + *

    Returns the name of the scheme used + * to make this request, for example, http, https, or ftp.

    + * + *
    + *

    Jakarta Servlet: This must be the value returned by the + * javax.servlet.ServletRequest method + * getScheme().

    + * + *

    The default implementation throws + * UnsupportedOperationException and is provided for + * the sole purpose of not breaking existing applications that + * extend this class.

    + * + *
    + * + * @return the name of the scheme. + * + * @since 2.0 + */ + public String getRequestScheme() { + return null; + } + + + /** + *

    Returns the host name of the server + * to which the request was sent.

    + * + *
    + * + *

    Jakarta Servlet: This must be the value returned by the + * javax.servlet.ServletRequest method + * getServerName().

    + * + *

    The default implementation throws + * UnsupportedOperationException and is provided for + * the sole purpose of not breaking existing applications that + * extend this class.

    + * + *
    + * + * @return the host name of the server. + * + * @since 2.0 + */ + public String getRequestServerName() { + return null; + } + + + /** + *

    Returns the port number to which + * the request was sent.

    + * + *
    + * + *

    Jakarta Servlet: This must be the value returned by the + * javax.servlet.ServletRequest method + * getServerPort().

    + * + *

    The default implementation throws + * UnsupportedOperationException and is provided for + * the sole purpose of not breaking existing applications that + * extend this class.

    + * + *
    + * + * @return the port number to which the request was sent. + * + * @since 2.0 + */ + public int getRequestServerPort() { + return -1; + } + + + /** + *

    Returns a String containing the real + * path for a given virtual path.

    + * + *

    It is valid to call this method + * during application startup or shutdown. If called during application + * startup or shutdown, this method calls through to the + * getRealPath() method on the same container + * context instance (ServletContext or + * PortletContext) as the one used when calling + * getRealPath() on the + * ExternalContext returned by the + * FacesContext during an actual request. + *

    + * + *
    + * + *

    Jakarta Servlet: This must be the value returned by the + * javax.servlet.ServletContext method + * getRealPath().

    + * + *

    The default implementation throws + * UnsupportedOperationException and is provided + * for the sole purpose of not breaking existing applications that extend + * this class.

    + * + *
    + * + * @param path The context of the requested initialization parameter + * + * @return the real path for the specified virtual path. + * + * @since 2.0 + */ + public String getRealPath(String path) { + return null; + } + + + /** + *

    Return the portion of the request URI that identifies the web + * application context for this request.

    + * + *

    Jakarta Servlet: This must be the value returned by the + * javax.servlet.http.HttpServletRequest method + * getContextPath().

    + * + * @return the context path for this request. + */ + public abstract String getRequestContextPath(); + + + /** + *

    Return an immutable Map whose keys are the set of + * cookie names included in the current request, and whose + * values (of type javax.servlet.http.Cookie) + * are the first (or only) cookie for each cookie name + * returned by the underlying request. The returned + * Map must implement the entire contract for an unmodifiable + * map as described in the JavaDocs for java.util.Map.

    + * + *

    Jakarta Servlet: This must be the value returned by the + * javax.servlet.http.HttpServletRequest method + * getCookies(), unless null was returned, + * in which case this must be a zero-length array.

    + * + * @return the cookie map in the current request. + * + */ + public abstract Map getRequestCookieMap(); + + + /** + *

    Return an immutable Map whose keys are the set of + * request header names included in the current request, and whose + * values (of type String) are the first (or only) value for each + * header name returned by the underlying request. The returned + * Map must implement the entire contract for an unmodifiable + * map as described in the JavaDocs for java.util.Map. In + * addition, key comparisons must be performed in a case insensitive + * manner.

    + * + *

    Jakarta Servlet: This must be the set of headers available via + * the javax.servlet.http.HttpServletRequest methods + * getHeader() and getHeaderNames().

    + * + * @return the header map in the current request. + * + */ + public abstract Map getRequestHeaderMap(); + + + /** + *

    Return an immutable Map whose keys are the set of + * request header names included in the current request, and whose + * values (of type String[]) are all of the value for each + * header name returned by the underlying request. The returned + * Map must implement the entire contract for an unmodifiable + * map as described in the JavaDocs for java.util.Map. In + * addition, key comparisons must be performed in a case insensitive + * manner.

    + * + *

    Jakarta Servlet: This must be the set of headers available via + * the javax.servlet.http.HttpServletRequest methods + * getHeaders() and getHeaderNames().

    + * + * @return the header values map in the current request. + */ + public abstract Map getRequestHeaderValuesMap(); + + + /** + *

    Return a mutable Map representing the request + * scope attributes for the current application. The returned + * Map must implement the entire contract for a + * modifiable map as described in the JavaDocs for + * java.util.Map. Modifications made in the + * Map must cause the corresponding changes in the set + * of request scope attributes. Particularly the + * clear(), remove(), put(), + * putAll(), and get() operations must + * take the appropriate action on the underlying data structure.

    + * + *

    For any of the Map methods that cause an element + * to be removed from the underlying data structure, the following + * action regarding managed-beans must be taken. If the element to + * be removed is a managed-bean, and it has one or more public + * no-argument void return methods annotated with + * javax.annotation.PreDestroy, each such method must + * be called before the element is removed from the underlying data + * structure. Elements that are not managed-beans, but do happen to + * have methods with that annotation must not have those methods + * called on removal. Any exception thrown by the + * PreDestroy annotated methods must by caught and not + * rethrown. The exception may be logged.

    + * + *

    Jakarta Servlet: This must be the set of attributes available via + * the javax.servlet.ServletRequest methods + * getAttribute(), getAttributeNames(), + * removeAttribute(), and setAttribute().

    + * + * @return the map including the attributes of the current request. + * + */ + public abstract Map getRequestMap(); + + + /** + *

    Return an immutable Map whose keys are the set of + * request parameters names included in the current request, and whose + * values (of type String) are the first (or only) value for each + * parameter name returned by the underlying request. The returned + * Map must implement the entire contract for an unmodifiable + * map as described in the JavaDocs for java.util.Map.

    + * + *

    Jakarta Servlet: This must be the set of parameters available via + * the javax.servlet.ServletRequest methods + * getParameter() and getParameterNames().

    + * + * @return the map for the current request parameters. + * + */ + public abstract Map getRequestParameterMap(); + + + /** + *

    Return an Iterator over the names of all request + * parameters included in the current request.

    + * + *

    Jakarta Servlet: This must be an Iterator over the + * values returned by the javax.servlet.ServletRequest + * method getParameterNames().

    + * + * @return the Iterator for the names of the current request parameters. + * + */ + public abstract Iterator getRequestParameterNames(); + + + /** + *

    Return an immutable Map whose keys are the set of + * request parameters names included in the current request, and whose + * values (of type String[]) are all of the values for each + * parameter name returned by the underlying request. The returned + * Map must implement the entire contract for an unmodifiable + * map as described in the JavaDocs for java.util.Map.

    + * + *

    Jakarta Servlet: This must be the set of parameters available via + * the javax.servlet.ServletRequest methods + * getParameterValues() and + * getParameterNames().

    + * + * @return the map for the parameter values of the current request. + * + */ + public abstract Map getRequestParameterValuesMap(); + + + /** + *

    Return the extra path information (if any) included in the + * request URI; otherwise, return null.

    + * + *

    Jakarta Servlet: This must be the value returned by the + * javax.servlet.http.HttpServletRequest method + * getPathInfo().

    + * + * @return the path information of the current request. + * + */ + public abstract String getRequestPathInfo(); + + + /** + *

    Return the Jakarta Servlet path information (if any) included in the + * request URI; otherwise, return null.

    + * + *

    Jakarta Servlet: This must be the value returned by the + * javax.servlet.http.HttpServletRequest method + * getServletPath().

    + * + * @return the Jakarta Servlet path information of the current request. + */ + public abstract String getRequestServletPath(); + + + /** + *

    Return a + * URL for the application resource mapped to the + * specified path, if it exists; otherwise, return + * null.

    + * + *

    It is valid to call this method + * during application startup or shutdown. If called during application + * startup or shutdown, this method calls through to the + * getResource() method on the same container + * context instance (ServletContext or + * PortletContext) as the one used when calling + * getResource() on the + * ExternalContext returned by the + * FacesContext during an actual request.

    + + *

    Jakarta Servlet: This must be the value returned by the + * javax.servlet.ServletContext method + * getResource(path).

    + * + * @param path The path to the requested resource, which must + * start with a slash ("/" character + * + * @return the URL of the resource. + * + * @throws MalformedURLException if the specified path + * is not in the correct form + * @throws NullPointerException if path + * is null + */ + public abstract URL getResource(String path) throws MalformedURLException; + + + /** + *

    Return an + * InputStream for an application resource mapped to + * the specified path, if it exists; otherwise, return + * null.

    + + *

    It is valid to call this method + * during application startup or shutdown. If called during application + * startup or shutdown, this method calls through to the + * getResourceAsStream() method on the same container + * context instance (ServletContext or + * PortletContext) as the one used when calling + * getResourceAsStream() on the + * ExternalContext returned by the + * FacesContext during an actual request.

    + * + *

    Jakarta Servlet: This must be the value returned by the + * javax.servlet.ServletContext method + * getResourceAsStream(path).

    + * + * @param path The path to the requested resource, which must + * start with a slash ("/" character + * + * @return the InputStream for the application resource. + * + * @throws NullPointerException if path + * is null + */ + public abstract InputStream getResourceAsStream(String path); + + + /** + *

    Return the + * Set of resource paths for all application resources + * whose resource path starts with the specified argument.

    + * + *

    It is valid to call this method + * during application startup or shutdown. If called during application + * startup or shutdown, this method calls through to the + * getResourcePaths() method on the same container + * context instance (ServletContext or + * PortletContext) as the one used when calling + * getResourcePaths() on the + * ExternalContext returned by the + * FacesContext during an actual request.

    + + *

    Jakarta Servlet: This must be the value returned by the + * javax.servlet.ServletContext method + * getResourcePaths(path).

    + * + * @param path Partial path used to match resources, which must + * start with a slash ("/") character + * + * @return the Set of resource paths for the application resources. + * + * @throws NullPointerException if path + * is null + */ + public abstract Set getResourcePaths(String path); + + + /** + *

    Return the environment-specific object instance for the current + * response.

    + * + *

    Jakarta Servlet: This is the current request's + * javax.servlet.http.HttpServletResponse instance.

    + * + * @return the instance of the current javax.servlet.http.HttpServletResponse. + */ + public abstract Object getResponse(); + + /** + *

    Set the environment-specific response to be returned by + * subsequent calls to {@link #getResponse}. This may be used to + * install a wrapper for the response.

    + * + *

    The default implementation throws + * UnsupportedOperationException and is provided + * for the sole purpose of not breaking existing applications that extend + * this class.

    + * + * @param response the response instance to be set. + * + * @since 1.2 + */ + public void setResponse(Object response) { + } + + + /** + *

    Returns an OutputStream + * suitable for writing binary data to the user-agent.

    + * + *
    + * + *

    Jakarta Servlet: This must return the value returned by the + * javax.servlet.ServletResponse method + * getOutputStream().

    + * + *

    The default implementation throws + * UnsupportedOperationException and is provided for + * the sole purpose of not breaking existing applications that + * extend this class.

    + * + *
    + * + * @return the OutputStream for the current response. + * + * @throws IOException any IO related exception. + * + * @since 2.0 + */ + public OutputStream getResponseOutputStream() throws IOException { + return null; + } + + + /** + *

    Returns a Writer + * suitable for writing character data to the user-agent.

    + * + *
    + * + *

    Jakarta Servlet: This must return the value returned by the + * {@link javax.servlet.ServletResponse#getWriter}.

    + * + *

    The default implementation throws + * UnsupportedOperationException and is provided for + * the sole purpose of not breaking existing applications that + * extend this class.

    + * + *
    + * + * @return the Writer for the current response. + * + * @throws IOException any IO related exception. + * + * @since 2.0 + */ + public Writer getResponseOutputWriter() throws IOException { + return null; + } + + + /** + *

    Redirect a request + * to the specified URL, and cause the + * responseComplete() method to be called on the + * {@link FacesContext} instance for the current request.

    + * + *

    The implementation must determine if + * the request is an Ajax request by obtaining a + * {@link PartialViewContext} instance from the {@link FacesContext} and + * calling {@link PartialViewContext#isAjaxRequest()}.

    + * + *

    Jakarta Servlet: For + * non Ajax requests, this must be accomplished by calling + * the javax.servlet.http.HttpServletResponse method + * sendRedirect().

    + * For Ajax requests, the implementation must: + *
    + *
      + *
    • Get a {@link PartialResponseWriter} instance from the + * {@link FacesContext}.
    • + *
    • Call {@link #setResponseContentType} with text/xml
    • + *
    • Call {@link #setResponseCharacterEncoding} with UTF-8
    • + *
    • Call {@link #addResponseHeader} with Cache-Control, + * no-cache
    • + *
    • Call {@link PartialResponseWriter#startDocument}
    • + *
    • Call {@link PartialResponseWriter#redirect} with the url + * argument.
    • + *
    • Call {@link PartialResponseWriter#endDocument}
    • + *
    + * + * @param url Absolute URL to which the client should be redirected + * + * @throws IllegalArgumentException if the specified url is relative + * @throws IllegalStateException if, in a portlet environment, + * the current response object is a RenderResponse + * instead of an ActionResponse + * @throws IllegalStateException if, in a Jakarta Servlet environment, + * the current response has already been committed + * @throws IOException if an input/output error occurs + */ + public abstract void redirect(String url) throws IOException; + + + /** + *

    Set the response header with the given name and value.

    + * + *

    Jakarta Servlet:This must be performed by calling the + * javax.servlet.http.HttpServletResponse setHeader + * method.

    + * + *

    The default implementation throws + * UnsupportedOperationException and is provided for + * the sole purpose of not breaking existing applications that + * extend this class.

    + * + * @param name The name of the response header. + * @param value The value of the response header. + * + * @since 2.0 + */ + public void setResponseHeader(String name, String value) { + } + + /** + *

    Add the given name and value to the response header.

    + * + *

    Jakarta Servlet:This must be performed by calling the + * javax.servlet.http.HttpServletResponse addHeader + * method.

    + * + *

    The default implementation throws + * UnsupportedOperationException and is provided for + * the sole purpose of not breaking existing applications that + * extend this class.

    + * + * @param name The name of the response header. + * @param value The value of the response header. + * + * @since 2.0 + */ + public void addResponseHeader(String name, String value) { + } + + + /** + *

    Sets the HTTP status code for the response.

    + * + *

    Jakarta Servlet: This must be performed by calling the + * javax.servlet.http.HttpServletResponse setStatus + * method.

    + * + *

    The default implementation throws + * UnsupportedOperationException and is provided for + * the sole purpose of not breaking existing applications that + * extend this class.

    + * + * @param statusCode an HTTP status code + * + * @since 2.0 + */ + public void setResponseStatus(int statusCode) { + } + + + /** + * The purpose of this method is to generate a query string from the collection of Parameter + * objects provided by the parameters argument and append that query string to the baseUrl. + * This method must be able to encode the parameters to a baseUrl that may or may not have existing query parameters. The parameter values should be encoded appropriately for the + * environment so that the resulting URL can be used as the target of a redirect. It's + * possible for an ExternalContext implementation to override this method to accomodate the + * definition of redirect for that environment. + * + *

    See {@link #encodeActionURL(java.lang.String)} + * for the required specification of how to encode the {@link javax.faces.lifecycle.ClientWindow}. + *

    + * + * @param baseUrl The base URL onto which the query string generated by this method will be appended. The URL may contain query parameters. + * @param parameters The collection of Parameter objects, representing name=value pairs that are used to produce a query string + * + * @return the result of encoding. + * @since 2.0 + */ + public String encodeRedirectURL(String baseUrl, + Map> parameters) { + return null; + } +} diff --git a/java/ql/test/stubs/javax-faces-2.3/javax/faces/context/FacesContext.java b/java/ql/test/stubs/javax-faces-2.3/javax/faces/context/FacesContext.java new file mode 100644 index 00000000000..9c56dd6340b --- /dev/null +++ b/java/ql/test/stubs/javax-faces-2.3/javax/faces/context/FacesContext.java @@ -0,0 +1,195 @@ +/* + * Copyright (c) 1997, 2018 Oracle and/or its affiliates. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v. 2.0, which is available at + * http://www.eclipse.org/legal/epl-2.0. + * + * This Source Code may also be made available under the following Secondary + * Licenses when the conditions for such availability set forth in the + * Eclipse Public License v. 2.0 are satisfied: GNU General Public License, + * version 2 with the GNU Classpath Exception, which is available at + * https://www.gnu.org/software/classpath/license.html. + * + * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 + */ + +package javax.faces.context; + + +import java.util.Iterator; +import java.util.Map; + +/** + *

    FacesContext contains all of the + * per-request state information related to the processing of a single + * Jakarta Server Faces request, and the rendering of the corresponding + * response. It is passed to, and potentially modified by, each phase + * of the request processing lifecycle.

    + * + *

    A {@link FacesContext} instance is associated with a particular + * request at the beginning of request processing, by a call to the + * getFacesContext() method of the {@link FacesContextFactory} + * instance associated with the current web application. The instance + * remains active until its release() method is called, after + * which no further references to this instance are allowed. While a + * {@link FacesContext} instance is active, it must not be referenced + * from any thread other than the one upon which the Jakarta Servlet container + * executing this web application utilizes for the processing of this request. + *

    + * + *

    A FacesContext can be injected into a request + * scoped bean using @Inject FacesContext facesContext; + *

    + */ + +public abstract class FacesContext { + + public FacesContext() { + } + + /** + *

    Return a mutable Map + * representing the attributes associated wth this + * FacesContext instance. This Map is + * useful to store attributes that you want to go out of scope when the + * Faces lifecycle for the current request ends, which is not always the same + * as the request ending, especially in the case of Jakarta Servlet filters + * that are invoked after the Faces lifecycle for this + * request completes. Accessing this Map does not cause any + * events to fire, as is the case with the other maps: for request, session, and + * application scope. When {@link #release()} is invoked, the attributes + * must be cleared.

    + * + *
    + * + *

    The Map returned by this method is not associated with + * the request. If you would like to get or set request attributes, + * see {@link ExternalContext#getRequestMap}. + * + *

    The default implementation throws + * UnsupportedOperationException and is provided + * for the sole purpose of not breaking existing applications that extend + * this class.

    + * + *
    + * + * @return mutable Map representing the attributes associated wth this + * FacesContext instance. + * + * @throws IllegalStateException if this method is called after + * this instance has been released + * + * @since 2.0 + */ + + public Map getAttributes() { + return null; + } + + /** + *

    Return an Iterator over the client identifiers for + * which at least one {@link javax.faces.application.FacesMessage} has been queued. If there are no + * such client identifiers, an empty Iterator is returned. + * If any messages have been queued that were not associated with any + * specific client identifier, a null value will be included + * in the iterated values. The elements in the Iterator must + * be returned in the order in which they were added with {@link #addMessage}.

    + * + * @return the Iterator over the client identifiers for + * which at least one {@link javax.faces.application.FacesMessage} has been queued. + * + * @throws IllegalStateException if this method is called after + * this instance has been released + */ + public abstract Iterator getClientIdsWithMessages(); + + /** + *

    Return the {@link + * ExternalContext} instance for this FacesContext + * instance.

    + + *

    It is valid to call this method + * during application startup or shutdown. If called during application + * startup or shutdown, this method returns an {@link ExternalContext} instance + * with the special behaviors indicated in the javadoc for that + * class. Methods document as being valid to call during + * application startup or shutdown must be supported.

    + * + * @return instance of ExternalContext + * + * @throws IllegalStateException if this method is called after + * this instance has been released + */ + public abstract ExternalContext getExternalContext(); + + /** + *

    Return the {@link ResponseStream} to which components should + * direct their binary output. Within a given response, components + * can use either the ResponseStream or the ResponseWriter, + * but not both. + * + * @return ResponseStream instance. + * + * @throws IllegalStateException if this method is called after + * this instance has been released + */ + public abstract ResponseStream getResponseStream(); + + /** + *

    Set the {@link ResponseStream} to which components should + * direct their binary output. + * + * @param responseStream The new ResponseStream for this response + * + * @throws NullPointerException if responseStream + * is null + * + * @throws IllegalStateException if this method is called after + * this instance has been released + */ + public abstract void setResponseStream(ResponseStream responseStream); + + /** + *

    Return the {@link ResponseWriter} to which components should + * direct their character-based output. Within a given response, + * components can use either the ResponseStream or the ResponseWriter, + * but not both.

    + * + * @return ResponseWriter instance. + * + * @throws IllegalStateException if this method is called after + * this instance has been released + */ + public abstract ResponseWriter getResponseWriter(); + + /** + *

    Set the {@link ResponseWriter} to which components should + * direct their character-based output. + * + * @param responseWriter The new ResponseWriter for this response + * + * @throws IllegalStateException if this method is called after + * this instance has been released + * @throws NullPointerException if responseWriter + * is null + */ + public abstract void setResponseWriter(ResponseWriter responseWriter); + + /** + *

    Return the {@link FacesContext} + * instance for the request that is being processed by the current + * thread. If called during application initialization or shutdown, + * any method documented as "valid to call this method during + * application startup or shutdown" must be supported during + * application startup or shutdown time. The result of calling a + * method during application startup or shutdown time that does not + * have this designation is undefined.

    + * + * @return the instance of FacesContext. + */ + public static FacesContext getCurrentInstance() { + return null; + } +} diff --git a/java/ql/test/stubs/javax-faces-2.3/javax/faces/context/ResponseStream.java b/java/ql/test/stubs/javax-faces-2.3/javax/faces/context/ResponseStream.java new file mode 100644 index 00000000000..7a3b63024ca --- /dev/null +++ b/java/ql/test/stubs/javax-faces-2.3/javax/faces/context/ResponseStream.java @@ -0,0 +1,29 @@ +/* + * Copyright (c) 1997, 2018 Oracle and/or its affiliates. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v. 2.0, which is available at + * http://www.eclipse.org/legal/epl-2.0. + * + * This Source Code may also be made available under the following Secondary + * Licenses when the conditions for such availability set forth in the + * Eclipse Public License v. 2.0 are satisfied: GNU General Public License, + * version 2 with the GNU Classpath Exception, which is available at + * https://www.gnu.org/software/classpath/license.html. + * + * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 + */ + +package javax.faces.context; + + +import java.io.OutputStream; + + +/** + *

    ResponseStream is an interface describing an adapter + * to an underlying output mechanism for binary output.

    + */ + +public abstract class ResponseStream extends OutputStream { +} diff --git a/java/ql/test/stubs/javax-faces-2.3/javax/faces/context/ResponseWriter.java b/java/ql/test/stubs/javax-faces-2.3/javax/faces/context/ResponseWriter.java new file mode 100644 index 00000000000..4ad2f53f843 --- /dev/null +++ b/java/ql/test/stubs/javax-faces-2.3/javax/faces/context/ResponseWriter.java @@ -0,0 +1,372 @@ +/* + * Copyright (c) 1997, 2018 Oracle and/or its affiliates. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v. 2.0, which is available at + * http://www.eclipse.org/legal/epl-2.0. + * + * This Source Code may also be made available under the following Secondary + * Licenses when the conditions for such availability set forth in the + * Eclipse Public License v. 2.0 are satisfied: GNU General Public License, + * version 2 with the GNU Classpath Exception, which is available at + * https://www.gnu.org/software/classpath/license.html. + * + * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 + */ + +package javax.faces.context; + + +import javax.faces.component.UIComponent; +import java.io.IOException; +import java.io.Writer; + + +/** + *

    ResponseWriter + * is an abstract class describing an adapter to an underlying output + * mechanism for character-based output. In addition to the low-level + * write() methods inherited from + * java.io.Writer, this class provides utility methods that + * are useful in producing elements and attributes for markup languages + * like HTML and XML.

    + */ + +public abstract class ResponseWriter extends Writer { + + + /** + *

    Return the content type (such as "text/html") for this {@link + * ResponseWriter}. Note: this must not include the "charset=" + * suffix.

    + * + * @return the content type + */ + public abstract String getContentType(); + + + /** + *

    Return the character encoding (such as "ISO-8859-1") for this + * {@link ResponseWriter}. Please see the + * IANA for a list of character encodings.

    + * + * @return the character encoding + */ + public abstract String getCharacterEncoding(); + + + /** + *

    Flush any ouput buffered by the output method to the + * underlying Writer or OutputStream. This method + * will not flush the underlying Writer or OutputStream; it + * simply clears any values buffered by this {@link ResponseWriter}.

    + */ + @Override + public abstract void flush() throws IOException; + + + /** + *

    Write whatever text should begin a response.

    + * + * @throws IOException if an input/output error occurs + */ + public abstract void startDocument() throws IOException; + + + /** + *

    Write whatever text should end a response. If there is an open + * element that has been created by a call to startElement(), + * that element will be closed first.

    + * + * @throws IOException if an input/output error occurs + */ + public abstract void endDocument() throws IOException; + + + /** + *

    Write the start of an element, + up to and including the + * element name. Once this method has been called, clients can + * call the writeAttribute() or + * writeURIAttribute() methods to add attributes and + * corresponding values. The starting element will be closed + * (that is, the trailing '>' character added) + * on any subsequent call to startElement(), + * writeComment(), + * writeText(), endElement(), + * endDocument(), close(), + * flush(), or write().

    + * + *
    + * + *

    If the argument component's pass through attributes + * includes an attribute of the name given by the value of the symbolic + * constant {@link javax.faces.render.Renderer#PASSTHROUGH_RENDERER_LOCALNAME_KEY}, + * use that as the element name, instead of the value passed as the first + * parameter to this method. Care must be taken so that this value + * is not also rendered when any other pass through attributes on this component + * are rendered.

    + * + *
    + * + * @param name Name of the element to be started + + * @param component The {@link UIComponent} (if any) to which this + * element corresponds. This component is + * inspected for its pass through attributes as + * described in the standard HTML_BASIC {@code + * RenderKit} specification. + + * @throws IOException if an input/output error occurs + * @throws NullPointerException if name + * is null + */ + public abstract void startElement(String name, UIComponent component) + throws IOException; + + + /** + *

    Write the end of an element, + * after closing any open element + * created by a call to startElement(). Elements must be + * closed in the inverse order from which they were opened; it is an + * error to do otherwise.

    + * + *
    + * + *

    If the argument component's pass through attributes + * includes an attribute of the name given by the value of the symbolic + * constant {@link javax.faces.render.Renderer#PASSTHROUGH_RENDERER_LOCALNAME_KEY}, + * use that as the element name, instead of the value passed as the first + * parameter to this method.

    + * + *
    + * + * @param name Name of the element to be ended + * @throws IOException if an input/output error occurs + * @throws NullPointerException if name + * is null + */ + public abstract void endElement(String name) throws IOException; + + + /** + *

    Write an attribute name and corresponding value, after converting + * that text to a String (if necessary), and after performing any escaping + * appropriate for the markup language being rendered. + * This method may only be called after a call to + * startElement(), and before the opened element has been + * closed.

    + * + * @param name Attribute name to be added + * @param value Attribute value to be added + * @param property Name of the property or attribute (if any) of the + * {@link UIComponent} associated with the containing element, + * to which this generated attribute corresponds + * @throws IllegalStateException if this method is called when there + * is no currently open element + * @throws IOException if an input/output error occurs + * @throws NullPointerException if name is + * null + */ + public abstract void writeAttribute(String name, Object value, + String property) + throws IOException; + + + /** + *

    Write a URI + * attribute name and corresponding value, after converting that + * text to a String (if necessary), and after performing any + * encoding or escaping + * appropriate to the markup language being rendered. When rendering in a WWW environment, + * the escaping conventions established in the W3C URI spec document + * <http://www.w3.org/Addressing/URL/uri-spec.html> + * must be followed. In particular, spaces ' ' must be encoded as + * %20 and not the plus character '+'. This method may only + * be called after a call to startElement(), and before + * the opened element has been closed.

    + * + * @param name Attribute name to be added + * @param value Attribute value to be added + * @param property Name of the property or attribute (if any) of the + * {@link UIComponent} associated with the containing element, + * to which this generated attribute corresponds + * @throws IllegalStateException if this method is called when there + * is no currently open element + * @throws IOException if an input/output error occurs + * @throws NullPointerException if name is + * null + */ + public abstract void writeURIAttribute(String name, Object value, + String property) + throws IOException; + + /** + *

    Open an XML CDATA + * block. Note that XML does not allow nested CDATA + * blocks, though this method does not enforce that constraint. The + * default implementation of this method takes no action when + * invoked.

    + * @throws IOException if input/output error occures + */ + public void startCDATA() throws IOException { + + } + + + /** + + *

    Close an XML CDATA + * block. The default implementation of this method takes no action + * when invoked.

    + + * @throws IOException if input/output error occures + */ + public void endCDATA() throws IOException { + throw new UnsupportedOperationException(); + } + + + /** + *

    Write a comment containing the specified text, after converting + * that text to a String (if necessary), and after performing any escaping + * appropriate for the markup language being rendered. If there is + * an open element that has been created by a call to + * startElement(), that element will be closed first.

    + * + * @param comment Text content of the comment + * @throws IOException if an input/output error occurs + * @throws NullPointerException if comment + * is null + */ + public abstract void writeComment(Object comment) throws IOException; + + + /** + *

    Write a string containing the markup specific + * preamble. + * No escaping is performed. The default + * implementation simply calls through to {@link #write(java.lang.String)} .

    + * + *
    + * + *

    The implementation makes no checks if this is the correct place + * in the response to have a preamble, nor does it prevent the preamble + * from being written more than once.

    + * + *
    + * + * @since 2.2 + * @param preamble Text content of the preamble + * @throws IOException if an input/output error occurs + */ + public void writePreamble(String preamble) throws IOException { + write(preamble); + } + + /** + *

    Write a string containing the markup specific + * doctype. + * No escaping is performed. The default + * implementation simply calls through to {@link #write(java.lang.String)} .

    + * + *
    + * + *

    The implementation makes no checks if this is the correct place + * in the response to have a doctype, nor does it prevent the doctype + * from being written more than once.

    + * + *
    + * + * @since 2.2 + * @param doctype Text content of the doctype + * @throws IOException if an input/output error occurs + */ + public void writeDoctype(String doctype) throws IOException { + write(doctype); + } + + + /** + *

    Write an object, after converting it to a String (if necessary), + * and after performing any escaping appropriate for the markup language + * being rendered. If there is an open element that has been created + * by a call to startElement(), that element will be closed + * first.

    + * + * @param text Text to be written + * @param property Name of the property or attribute (if any) of the + * {@link UIComponent} associated with the containing element, + * to which this generated text corresponds + * @throws IOException if an input/output error occurs + * @throws NullPointerException if text + * is null + */ + public abstract void writeText(Object text, String property) + throws IOException; + + /** + *

    Write an object, after converting it to a String (if + * necessary), and after performing any escaping appropriate for the + * markup language being rendered. This method is equivalent to + * {@link #writeText(java.lang.Object,java.lang.String)} but adds a + * component property to allow custom + * ResponseWriter implementations to associate a + * component with an arbitrary portion of text.

    + * + *

    The default implementation simply ignores the + * component argument and calls through to {@link + * #writeText(java.lang.Object,java.lang.String)}

    + * + * @param text Text to be written + * @param component The {@link UIComponent} (if any) to which + * this element corresponds + * @param property Name of the property or attribute (if any) of the + * {@link UIComponent} associated with the containing element, + * to which this generated text corresponds + * @throws IOException if an input/output error occurs + * @throws NullPointerException if text + * is null + * @since 1.2 + */ + public void writeText(Object text, UIComponent component, String property) + throws IOException { + writeText(text, property); + } + + + /** + *

    Write text from a character array, after any performing any + * escaping appropriate for the markup language being rendered. + * If there is an open element that has been created by a call to + * startElement(), that element will be closed first.

    + * + * @param text Text to be written + * @param off Starting offset (zero-relative) + * @param len Number of characters to be written + * @throws IndexOutOfBoundsException if the calculated starting or + * ending position is outside the bounds of the character array + * @throws IOException if an input/output error occurs + * @throws NullPointerException if text + * is null + */ + public abstract void writeText(char text[], int off, int len) + throws IOException; + + + /** + *

    Create and return a new instance of this {@link ResponseWriter}, + * using the specified Writer as the output destination.

    + * + * @param writer The Writer that is the output destination + * + * @return the new ResponseWriter + */ + public abstract ResponseWriter cloneWithWriter(Writer writer); +} diff --git a/java/ql/test/stubs/javax-faces-2.3/javax/faces/render/FacesRenderer.java b/java/ql/test/stubs/javax-faces-2.3/javax/faces/render/FacesRenderer.java new file mode 100644 index 00000000000..872b71d92d0 --- /dev/null +++ b/java/ql/test/stubs/javax-faces-2.3/javax/faces/render/FacesRenderer.java @@ -0,0 +1,116 @@ +/* + * Copyright (c) 1997, 2018 Oracle and/or its affiliates. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v. 2.0, which is available at + * http://www.eclipse.org/legal/epl-2.0. + * + * This Source Code may also be made available under the following Secondary + * Licenses when the conditions for such availability set forth in the + * Eclipse Public License v. 2.0 are satisfied: GNU General Public License, + * version 2 with the GNU Classpath Exception, which is available at + * https://www.gnu.org/software/classpath/license.html. + * + * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 + */ + +package javax.faces.render; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; +import java.lang.annotation.Inherited; + +/** + *

    The presence of this annotation on a + * class automatically registers the class with the runtime as a {@link + * Renderer}. The value of the {@link #renderKitId} attribute is taken + * to be the render-kit-id to which an instance of this + * Renderer is to be added. There must be a public + * zero-argument constructor on any class where this annotation appears. + * The implementation must indicate a fatal error if such a constructor + * does not exist and the application must not be placed in service. + * Within that {@link RenderKit}, The value of the {@link #rendererType} + * attribute is taken to be the renderer-type, and the value of + * the {@link #componentFamily} attribute is to be taken as the + * component-family. The implementation must guarantee that + * for each class annotated with FacesRenderer, found with + * the algorithm in section JSF.11.5, + * the following actions are taken.

    + + *
    + + *
      + + *
    • Obtain a reference to the {@link RenderKitFactory} for + * this application.

    • + +
    • See if a RenderKit exists for + render-kit-id. If so, let that instance be + renderKit for discussion. If not, the implementation + must indicate a fatal error if such a RenderKit + does not exist and the application must not be placed in + service.

    • + +
    • Create an instance of this class using the public + zero-argument constructor.

    • + +
    • Call {@link RenderKit#addRenderer} on + renderKit, passing component-family as the + first argument, renderer-type as the second, and the + newly instantiated RenderKit instance as the + third argument.

    • + + *
    + + + *
    + + */ +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.TYPE) +@Inherited +public @interface FacesRenderer { + + + /** + *

    The value of this annotation + * attribute is taken to be the render-kit-id in which an + * instance of this class of Renderer must be + * installed.

    + * + * @return the render-kit-id + */ + + String renderKitId() default ""; + + + /** + *

    The value of this annotation + * attribute is taken to be the renderer-type which, in + * combination with {@link #componentFamily} can be used to obtain a + * reference to an instance of this {@link Renderer} by calling + * {@link javax.faces.render.RenderKit#getRenderer(java.lang.String, + * java.lang.String)}.

    + * + * @return the renderer-type + */ + + String rendererType(); + + + /** + *

    The value of this annotation + * attribute is taken to be the component-family which, in + * combination with {@link #rendererType} can be used to obtain a + * reference to an instance of this {@link Renderer} by calling + * {@link javax.faces.render.RenderKit#getRenderer(java.lang.String, + * java.lang.String)}.

    + * + * @return the component-family + */ + + String componentFamily(); + +} diff --git a/java/ql/test/stubs/javax-faces-2.3/javax/faces/render/Renderer.java b/java/ql/test/stubs/javax-faces-2.3/javax/faces/render/Renderer.java new file mode 100644 index 00000000000..a5fc4b47799 --- /dev/null +++ b/java/ql/test/stubs/javax-faces-2.3/javax/faces/render/Renderer.java @@ -0,0 +1,166 @@ +/* + * Copyright (c) 1997, 2018 Oracle and/or its affiliates. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v. 2.0, which is available at + * http://www.eclipse.org/legal/epl-2.0. + * + * This Source Code may also be made available under the following Secondary + * Licenses when the conditions for such availability set forth in the + * Eclipse Public License v. 2.0 are satisfied: GNU General Public License, + * version 2 with the GNU Classpath Exception, which is available at + * https://www.gnu.org/software/classpath/license.html. + * + * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 + */ + +package javax.faces.render; + + +import java.io.IOException; +import java.util.Iterator; +import javax.faces.component.UIComponent; +import javax.faces.context.FacesContext; + + +/** + *

    A Renderer converts + * the internal representation of {@link UIComponent}s into the output + * stream (or writer) associated with the response we are creating for a + * particular request. Each Renderer knows how to render + * one or more {@link UIComponent} types (or classes), and advertises a + * set of render-dependent attributes that it recognizes for each + * supported {@link UIComponent}.

    + * + *

    Families of {@link Renderer}s are packaged as a {@link RenderKit}, + * and together support the rendering of all of the {@link UIComponent}s + * in a view associated with a {@link FacesContext}. Within the set of + * {@link Renderer}s for a particular {@link RenderKit}, each must be + * uniquely identified by the rendererType property.

    + * + *

    Individual {@link Renderer} instances will be instantiated as requested + * during the rendering process, and will remain in existence for the + * remainder of the lifetime of a web application. Because each instance + * may be invoked from more than one request processing thread simultaneously, + * they MUST be programmed in a thread-safe manner.

    + * + *
    + + *

    If the {@link javax.faces.event.ListenerFor} annotation is + * attached to the class definition of a Renderer, that + * class must also implement {@link + * javax.faces.event.ComponentSystemEventListener}, and the action + * pertaining to the processing of ResourceDependency on a + * Renderer described in {@link + * javax.faces.event.ListenerFor} must be taken.

    + + *

    If the {@link javax.faces.application.ResourceDependency} + * annotation is attached to the class definition of a + * Renderer, the action pertaining to the processing of + * ResourceDependency on a Renderer described + * in {@link UIComponent#getChildren} must be taken.

    + + *
    + */ + +public abstract class Renderer { + + /** + *

    Decode any new state of the specified {@link UIComponent} + * from the request contained in the specified {@link FacesContext}, + * and store that state on the {@link UIComponent}.

    + * + *

    During decoding, events may be enqueued for later processing + * (by event listeners that have registered an interest), by calling + * queueEvent() on the associated {@link UIComponent}. + *

    + * + * @param context {@link FacesContext} for the request we are processing + * @param component {@link UIComponent} to be decoded. + * + * @throws NullPointerException if context + * or component is null + */ + public void decode(FacesContext context, UIComponent component) { + } + + + /** + *

    Render the beginning specified {@link UIComponent} to the + * output stream or writer associated with the response we are creating. + * If the conversion attempted in a previous call to + * getConvertedValue() for this component failed, the state + * information saved during execution + * of decode() should be used to reproduce the incorrect + * input.

    + * + * @param context {@link FacesContext} for the request we are processing + * @param component {@link UIComponent} to be rendered + * + * @throws IOException if an input/output error occurs while rendering + * @throws NullPointerException if context + * or component is null + */ + public void encodeBegin(FacesContext context, + UIComponent component) + throws IOException { + } + + + /** + *

    Render the child components of this {@link UIComponent}, following + * the rules described for encodeBegin() to acquire the + * appropriate value to be rendered. This method will only be called + * if the rendersChildren property of this component + * is true.

    + * + * @param context {@link FacesContext} for the response we are creating + * @param component {@link UIComponent} whose children are to be rendered + * + * @throws IOException if an input/output error occurs while rendering + * @throws NullPointerException if context + * or component is null + */ + public void encodeChildren(FacesContext context, UIComponent component) + throws IOException { + } + + + /** + *

    Render the ending of the current state of the specified + * {@link UIComponent}, following the rules described for + * encodeBegin() to acquire the appropriate value + * to be rendered.

    + * + * @param context {@link FacesContext} for the response we are creating + * @param component {@link UIComponent} to be rendered + * + * @throws IOException if an input/output error occurs while rendering + * @throws NullPointerException if context + * or component is null + */ + public void encodeEnd(FacesContext context, + UIComponent component) + throws IOException { + } + + /** + *

    Convert the component generated client id to a form suitable + * for transmission to the client.

    + * + *

    The default implementation returns the argument + * clientId unchanged.

    + * + * @param context {@link FacesContext} for the current request + * @param clientId the client identifier to be converted to client a + * specific format. + * + * @throws NullPointerException if context + * or clientId is null + * + * @return the converted {@code clientId} + */ + public String convertClientId(FacesContext context, String clientId) { + return null; + } +} From 76e4077b56924afc7f0edc9110e76be9d4bc4743 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Tue, 14 Sep 2021 11:21:23 +0100 Subject: [PATCH 360/741] Delete unused classes --- .../frameworks/javaee/jsf/JSFRenderer.qll | 48 ------------------- 1 file changed, 48 deletions(-) diff --git a/java/ql/src/semmle/code/java/frameworks/javaee/jsf/JSFRenderer.qll b/java/ql/src/semmle/code/java/frameworks/javaee/jsf/JSFRenderer.qll index 66ef1485a2c..74f91a3f9c0 100644 --- a/java/ql/src/semmle/code/java/frameworks/javaee/jsf/JSFRenderer.qll +++ b/java/ql/src/semmle/code/java/frameworks/javaee/jsf/JSFRenderer.qll @@ -12,54 +12,6 @@ class FacesContext extends RefType { } } -/** - * The JSF class `ExternalContext` allowing JavaServer Faces based applications to run in - * either a Servlet or a Portlet environment. - */ -class ExternalContext extends RefType { - ExternalContext() { - this.hasQualifiedName(["javax.faces.context", "jakarta.faces.context"], "ExternalContext") - } -} - -/** - * The base class type `UIComponent` for all user interface components in JavaServer Faces. - */ -class FacesUIComponent extends RefType { - FacesUIComponent() { - this.hasQualifiedName(["javax.faces.component", "jakarta.faces.component"], "UIComponent") - } -} - -/** - * The JSF class `Renderer` that converts internal representation of `UIComponent` into the output - * stream (or writer) associated with the response we are creating for a particular request. - */ -class FacesRenderer extends RefType { - FacesRenderer() { - this.hasQualifiedName(["javax.faces.render", "jakarta.faces.render"], "Renderer") - } -} - -/** - * The JSF class `ResponseWriter` that outputs and producing elements and attributes for markup - * languages like HTML and XML. - */ -class FacesResponseWriter extends RefType { - FacesResponseWriter() { - this.hasQualifiedName(["javax.faces.context", "jakarta.faces.context"], "ResponseWriter") - } -} - -/** - * The class `ResponseStream` that produces binary output. - */ -class FacesResponseStream extends RefType { - FacesResponseStream() { - this.hasQualifiedName(["javax.faces.context", "jakarta.faces.context"], "ResponseStream") - } -} - private class ExternalContextSource extends SourceModelCsv { override predicate row(string row) { row = From cca9ad06b4255396b3fea0e59e33e068c5ac4980 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Tue, 14 Sep 2021 11:31:49 +0100 Subject: [PATCH 361/741] Remove JSF example I don't think we need this: there are lots of possible XSS vectors; we don't need to enumerate every one in the qhelp file. --- java/ql/src/Security/CWE/CWE-079/JsfXSS.java | 33 -------------------- 1 file changed, 33 deletions(-) delete mode 100644 java/ql/src/Security/CWE/CWE-079/JsfXSS.java diff --git a/java/ql/src/Security/CWE/CWE-079/JsfXSS.java b/java/ql/src/Security/CWE/CWE-079/JsfXSS.java deleted file mode 100644 index 21963b695ac..00000000000 --- a/java/ql/src/Security/CWE/CWE-079/JsfXSS.java +++ /dev/null @@ -1,33 +0,0 @@ -@FacesRenderer(componentFamily = "", rendererType = "") -public class JsfXSS extends Renderer -{ - @Override - public void encodeBegin(FacesContext facesContext, UIComponent component) throws IOException - { - super.encodeBegin(facesContext, component); - - Map requestParameters = facesContext.getExternalContext().getRequestParameterMap(); - String windowId = requestParameters.get("window_id"); - - ResponseWriter writer = facesContext.getResponseWriter(); - writer.write(""); - } -} From cb8096f636ad0b1a44acc8044dda8719299287eb Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Tue, 14 Sep 2021 11:32:22 +0100 Subject: [PATCH 362/741] Remove JSF XSS Example Per previous commit, no need for a top-level JSF example --- java/ql/src/Security/CWE/CWE-079/XSS.qhelp | 9 --------- 1 file changed, 9 deletions(-) diff --git a/java/ql/src/Security/CWE/CWE-079/XSS.qhelp b/java/ql/src/Security/CWE/CWE-079/XSS.qhelp index b010a5918eb..428b44c8db9 100644 --- a/java/ql/src/Security/CWE/CWE-079/XSS.qhelp +++ b/java/ql/src/Security/CWE/CWE-079/XSS.qhelp @@ -23,15 +23,6 @@ leaving the website vulnerable to cross-site scripting.

    - - - - -

    The following example shows the page parameter being written directly to a custom JSF renderer -of UI components, which leaves the website vulnerable to cross-site scripting.

    - - -
    From 023c5337451bd87d62e9f95fb786c41e1ab6f075 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Tue, 14 Sep 2021 11:35:12 +0100 Subject: [PATCH 363/741] Combine Servlet and JSF vulnerable writer flow-tracking JSP and Servlet already shared this logic; might as well add JSF into the same mechanism. --- java/ql/lib/semmle/code/java/security/XSS.qll | 50 +++++-------------- 1 file changed, 12 insertions(+), 38 deletions(-) diff --git a/java/ql/lib/semmle/code/java/security/XSS.qll b/java/ql/lib/semmle/code/java/security/XSS.qll index 7ac1e0dee1a..e384d65e8a6 100644 --- a/java/ql/lib/semmle/code/java/security/XSS.qll +++ b/java/ql/lib/semmle/code/java/security/XSS.qll @@ -41,7 +41,7 @@ private class DefaultXssSink extends XssSink { DefaultXssSink() { sinkNode(this, "xss") or - exists(ServletWriterSourceToWritingMethodFlowConfig writer, MethodAccess ma | + exists(XssVulnerableWriterSourceToWritingMethodFlowConfig writer, MethodAccess ma | ma.getMethod() instanceof WritingMethod and writer.hasFlowToExpr(ma.getQualifier()) and this.asExpr() = ma.getArgument(_) @@ -88,12 +88,6 @@ private class DefaultXssSink extends XssSink { returnType instanceof RawClass ) ) - or - exists(FacesWriterSourceToWritingMethodFlowConfig writer, MethodAccess ma | - ma.getMethod() instanceof WritingMethod and - writer.hasFlowToExpr(ma.getQualifier()) and - this.asExpr() = ma.getArgument(_) - ) } } @@ -108,12 +102,12 @@ private class DefaultXSSSanitizer extends XssSanitizer { } /** A configuration that tracks data from a servlet writer to an output method. */ -private class ServletWriterSourceToWritingMethodFlowConfig extends TaintTracking2::Configuration { - ServletWriterSourceToWritingMethodFlowConfig() { - this = "XSS::ServletWriterSourceToWritingMethodFlowConfig" +private class XssVulnerableWriterSourceToWritingMethodFlowConfig extends TaintTracking2::Configuration { + XssVulnerableWriterSourceToWritingMethodFlowConfig() { + this = "XSS::XssVulnerableWriterSourceToWritingMethodFlowConfig" } - override predicate isSource(DataFlow::Node src) { src.asExpr() instanceof ServletWriterSource } + override predicate isSource(DataFlow::Node src) { src.asExpr() instanceof XssVulnerableWriterSource } override predicate isSink(DataFlow::Node sink) { exists(MethodAccess ma | @@ -135,9 +129,9 @@ private class WritingMethod extends Method { } } -/** An output stream or writer that writes to a servlet response. */ -class ServletWriterSource extends MethodAccess { - ServletWriterSource() { +/** An output stream or writer that writes to a servlet, JSP or JSF response. */ +class XssVulnerableWriterSource extends MethodAccess { + XssVulnerableWriterSource() { this.getMethod() instanceof ServletResponseGetWriterMethod or this.getMethod() instanceof ServletResponseGetOutputStreamMethod @@ -146,6 +140,10 @@ class ServletWriterSource extends MethodAccess { m.getDeclaringType().getQualifiedName() = "javax.servlet.jsp.JspContext" and m.getName() = "getOut" ) + or + this.getMethod() instanceof FacesGetResponseWriterMethod + or + this.getMethod() instanceof FacesGetResponseStreamMethod } } @@ -165,27 +163,3 @@ predicate isXssVulnerableContentType(string s) { */ bindingset[s] predicate isXssSafeContentType(string s) { not isXssVulnerableContentType(s) } - -/** An output stream or writer that writes to a JSF response. */ -class FacesWriterSource extends MethodAccess { - FacesWriterSource() { - this.getMethod() instanceof FacesGetResponseWriterMethod - or - this.getMethod() instanceof FacesGetResponseStreamMethod - } -} - -/** A configuration that tracks data from a JSF writer to an output method. */ -private class FacesWriterSourceToWritingMethodFlowConfig extends TaintTracking2::Configuration { - FacesWriterSourceToWritingMethodFlowConfig() { - this = "XSS::FacesWriterSourceToWritingMethodFlowConfig" - } - - override predicate isSource(DataFlow::Node src) { src.asExpr() instanceof FacesWriterSource } - - override predicate isSink(DataFlow::Node sink) { - exists(MethodAccess ma | - sink.asExpr() = ma.getQualifier() and ma.getMethod() instanceof WritingMethod - ) - } -} From b7fc068cee7e3376bc4759e8225d19f88506789c Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Tue, 14 Sep 2021 11:49:01 +0100 Subject: [PATCH 364/741] Move JSFRenderer.qll to lib --- .../semmle/code/java/frameworks/javaee/jsf/JSFRenderer.qll | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename java/ql/{src => lib}/semmle/code/java/frameworks/javaee/jsf/JSFRenderer.qll (100%) diff --git a/java/ql/src/semmle/code/java/frameworks/javaee/jsf/JSFRenderer.qll b/java/ql/lib/semmle/code/java/frameworks/javaee/jsf/JSFRenderer.qll similarity index 100% rename from java/ql/src/semmle/code/java/frameworks/javaee/jsf/JSFRenderer.qll rename to java/ql/lib/semmle/code/java/frameworks/javaee/jsf/JSFRenderer.qll From 681144145916ed151c5fc84221dd26339658a775 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Tue, 14 Sep 2021 12:07:48 +0100 Subject: [PATCH 365/741] Factor JSF source definitions --- .../frameworks/javaee/jsf/JSFRenderer.qll | 35 +++++++------------ 1 file changed, 13 insertions(+), 22 deletions(-) diff --git a/java/ql/lib/semmle/code/java/frameworks/javaee/jsf/JSFRenderer.qll b/java/ql/lib/semmle/code/java/frameworks/javaee/jsf/JSFRenderer.qll index 74f91a3f9c0..44042889f81 100644 --- a/java/ql/lib/semmle/code/java/frameworks/javaee/jsf/JSFRenderer.qll +++ b/java/ql/lib/semmle/code/java/frameworks/javaee/jsf/JSFRenderer.qll @@ -15,28 +15,19 @@ class FacesContext extends RefType { private class ExternalContextSource extends SourceModelCsv { override predicate row(string row) { row = - [ - "javax.faces.context;ExternalContext;true;getRequestParameterMap;();;ReturnValue;remote", - "javax.faces.context;ExternalContext;true;getRequestParameterNames;();;ReturnValue;remote", - "javax.faces.context;ExternalContext;true;getRequestParameterValuesMap;();;ReturnValue;remote", - "javax.faces.context;ExternalContext;true;getRequestPathInfo;();;ReturnValue;remote", - "javax.faces.context;ExternalContext;true;getResource;(String);;ReturnValue;remote", - "javax.faces.context;ExternalContext;true;getResourceAsStream;(String);;ReturnValue;remote", - "javax.faces.context;ExternalContext;true;getResourcePaths;(String);;ReturnValue;remote", - "javax.faces.context;ExternalContext;true;getRequestCookieMap;();;ReturnValue;remote", - "javax.faces.context;ExternalContext;true;getRequestHeaderMap;();;ReturnValue;remote", - "javax.faces.context;ExternalContext;true;getRequestHeaderValuesMap;();;ReturnValue;remote", - "jakarta.faces.context;ExternalContext;true;getRequestParameterMap;();;ReturnValue;remote", - "jakarta.faces.context;ExternalContext;true;getRequestParameterNames;();;ReturnValue;remote", - "jakarta.faces.context;ExternalContext;true;getRequestParameterValuesMap;();;ReturnValue;remote", - "jakarta.faces.context;ExternalContext;true;getRequestPathInfo;();;ReturnValue;remote", - "jakarta.faces.context;ExternalContext;true;getResource;(String);;ReturnValue;remote", - "jakarta.faces.context;ExternalContext;true;getResourceAsStream;(String);;ReturnValue;remote", - "jakarta.faces.context;ExternalContext;true;getResourcePaths;(String);;ReturnValue;remote", - "jakarta.faces.context;ExternalContext;true;getRequestCookieMap;();;ReturnValue;remote", - "jakarta.faces.context;ExternalContext;true;getRequestHeaderMap;();;ReturnValue;remote", - "jakarta.faces.context;ExternalContext;true;getRequestHeaderValuesMap;();;ReturnValue;remote" - ] + ["javax.", "jakarta."] + + [ + "faces.context;ExternalContext;true;getRequestParameterMap;();;ReturnValue;remote", + "faces.context;ExternalContext;true;getRequestParameterNames;();;ReturnValue;remote", + "faces.context;ExternalContext;true;getRequestParameterValuesMap;();;ReturnValue;remote", + "faces.context;ExternalContext;true;getRequestPathInfo;();;ReturnValue;remote", + "faces.context;ExternalContext;true;getResource;(String);;ReturnValue;remote", + "faces.context;ExternalContext;true;getResourceAsStream;(String);;ReturnValue;remote", + "faces.context;ExternalContext;true;getResourcePaths;(String);;ReturnValue;remote", + "faces.context;ExternalContext;true;getRequestCookieMap;();;ReturnValue;remote", + "faces.context;ExternalContext;true;getRequestHeaderMap;();;ReturnValue;remote", + "faces.context;ExternalContext;true;getRequestHeaderValuesMap;();;ReturnValue;remote" + ] } } From 104873e8ee4fef9d24ebc56c4b2df0114d05fd42 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Tue, 14 Sep 2021 12:07:59 +0100 Subject: [PATCH 366/741] Autoformat --- java/ql/lib/semmle/code/java/security/XSS.qll | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/java/ql/lib/semmle/code/java/security/XSS.qll b/java/ql/lib/semmle/code/java/security/XSS.qll index e384d65e8a6..890291be510 100644 --- a/java/ql/lib/semmle/code/java/security/XSS.qll +++ b/java/ql/lib/semmle/code/java/security/XSS.qll @@ -107,7 +107,9 @@ private class XssVulnerableWriterSourceToWritingMethodFlowConfig extends TaintTr this = "XSS::XssVulnerableWriterSourceToWritingMethodFlowConfig" } - override predicate isSource(DataFlow::Node src) { src.asExpr() instanceof XssVulnerableWriterSource } + override predicate isSource(DataFlow::Node src) { + src.asExpr() instanceof XssVulnerableWriterSource + } override predicate isSink(DataFlow::Node sink) { exists(MethodAccess ma | From 6c32b92929473d4b020c18c07ebe60d3c6d0090c Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Thu, 12 Aug 2021 14:16:14 +0200 Subject: [PATCH 367/741] C++: Drop redundant columns from `files` and `folders` relations --- cpp/ql/lib/semmle/code/cpp/File.qll | 34 +- cpp/ql/lib/semmlecode.cpp.dbscheme | 13 +- cpp/ql/lib/semmlecode.cpp.dbscheme.stats | 568 ----------------------- 3 files changed, 20 insertions(+), 595 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/File.qll b/cpp/ql/lib/semmle/code/cpp/File.qll index b2d933686d7..f67f5940dad 100644 --- a/cpp/ql/lib/semmle/code/cpp/File.qll +++ b/cpp/ql/lib/semmle/code/cpp/File.qll @@ -171,7 +171,7 @@ class Container extends Locatable, @container { * To get the full path, use `getAbsolutePath`. */ class Folder extends Container, @folder { - override string getAbsolutePath() { folders(underlyingElement(this), result, _) } + override string getAbsolutePath() { folders(underlyingElement(this), result) } override Location getLocation() { result.getContainer() = this and @@ -190,7 +190,7 @@ class Folder extends Container, @folder { * DEPRECATED: use `getAbsolutePath` instead. * Gets the name of this folder. */ - deprecated string getName() { folders(underlyingElement(this), result, _) } + deprecated string getName() { folders(underlyingElement(this), result) } /** * DEPRECATED: use `getAbsolutePath` instead. @@ -208,17 +208,7 @@ class Folder extends Container, @folder { * DEPRECATED: use `getBaseName` instead. * Gets the last part of the folder name. */ - deprecated string getShortName() { - exists(string longnameRaw, string longname | - folders(underlyingElement(this), _, longnameRaw) and - longname = longnameRaw.replaceAll("\\", "/") - | - exists(int index | - result = longname.splitAt("/", index) and - not exists(longname.splitAt("/", index + 1)) - ) - ) - } + deprecated string getShortName() { result = this.getBaseName() } /** * DEPRECATED: use `getParentContainer` instead. @@ -242,7 +232,7 @@ class Folder extends Container, @folder { * `getStem` and `getExtension`. To get the full path, use `getAbsolutePath`. */ class File extends Container, @file { - override string getAbsolutePath() { files(underlyingElement(this), result, _, _, _) } + override string getAbsolutePath() { files(underlyingElement(this), result) } override string toString() { result = Container.super.toString() } @@ -336,7 +326,13 @@ class File extends Container, @file { * for example, for "file.tar.gz", this predicate will have the result * "tar.gz", while `getExtension` will have the result "gz". */ - string getExtensions() { files(underlyingElement(this), _, _, result, _) } + string getExtensions() { + exists(string name, int firstDotPos | + name = this.getBaseName() and + firstDotPos = min([name.indexOf("."), name.length() - 1]) and + result = name.suffix(firstDotPos + 1) + ) + } /** * Gets the short name of this file, that is, the prefix of its base name up @@ -351,7 +347,13 @@ class File extends Container, @file { * for example, for "file.tar.gz", this predicate will have the result * "file", while `getStem` will have the result "file.tar". */ - string getShortName() { files(underlyingElement(this), _, result, _, _) } + string getShortName() { + exists(string name, int firstDotPos | + name = this.getBaseName() and + firstDotPos = min([name.indexOf("."), name.length()]) and + result = name.prefix(firstDotPos) + ) + } } /** diff --git a/cpp/ql/lib/semmlecode.cpp.dbscheme b/cpp/ql/lib/semmlecode.cpp.dbscheme index ddd31fd02e5..7806a11dd7a 100644 --- a/cpp/ql/lib/semmlecode.cpp.dbscheme +++ b/cpp/ql/lib/semmlecode.cpp.dbscheme @@ -310,23 +310,14 @@ diagnostics( int location: @location_default ref ); -/* - fromSource(0) = unknown, - fromSource(1) = from source, - fromSource(2) = from library -*/ files( unique int id: @file, - string name: string ref, - string simple: string ref, - string ext: string ref, - int fromSource: int ref + string name: string ref ); folders( unique int id: @folder, - string name: string ref, - string simple: string ref + string name: string ref ); @container = @folder | @file diff --git a/cpp/ql/lib/semmlecode.cpp.dbscheme.stats b/cpp/ql/lib/semmlecode.cpp.dbscheme.stats index 61a31212bfa..c9aaf043a7a 100644 --- a/cpp/ql/lib/semmlecode.cpp.dbscheme.stats +++ b/cpp/ql/lib/semmlecode.cpp.dbscheme.stats @@ -12875,18 +12875,6 @@ name 59320 - -simple -40580 - - -ext -97 - - -fromSource -10 - @@ -12906,54 +12894,6 @@ -id -simple - - -12 - - -1 -2 -59320 - - - - - - -id -ext - - -12 - - -1 -2 -59320 - - - - - - -id -fromSource - - -12 - - -1 -2 -59320 - - - - - - name id @@ -12969,406 +12909,6 @@ - -name -simple - - -12 - - -1 -2 -59320 - - - - - - -name -ext - - -12 - - -1 -2 -59320 - - - - - - -name -fromSource - - -12 - - -1 -2 -59320 - - - - - - -simple -id - - -12 - - -1 -2 -30814 - - -2 -3 -6123 - - -3 -7 -3197 - - -7 -42 -444 - - - - - - -simple -name - - -12 - - -1 -2 -30814 - - -2 -3 -6123 - - -3 -7 -3197 - - -7 -42 -444 - - - - - - -simple -ext - - -12 - - -1 -2 -36277 - - -2 -3 -3739 - - -3 -6 -563 - - - - - - -simple -fromSource - - -12 - - -1 -2 -40580 - - - - - - -ext -id - - -12 - - -1 -2 -10 - - -3 -4 -10 - - -15 -16 -10 - - -38 -39 -10 - - -80 -81 -10 - - -114 -115 -10 - - -441 -442 -10 - - -768 -769 -10 - - -4013 -4014 -10 - - - - - - -ext -name - - -12 - - -1 -2 -10 - - -3 -4 -10 - - -15 -16 -10 - - -38 -39 -10 - - -80 -81 -10 - - -114 -115 -10 - - -441 -442 -10 - - -768 -769 -10 - - -4013 -4014 -10 - - - - - - -ext -simple - - -12 - - -1 -2 -10 - - -3 -4 -10 - - -15 -16 -10 - - -38 -39 -10 - - -75 -76 -10 - - -112 -113 -10 - - -428 -429 -10 - - -688 -689 -10 - - -2838 -2839 -10 - - - - - - -ext -fromSource - - -12 - - -1 -2 -97 - - - - - - -fromSource -id - - -12 - - -5473 -5474 -10 - - - - - - -fromSource -name - - -12 - - -5473 -5474 -10 - - - - - - -fromSource -simple - - -12 - - -3744 -3745 -10 - - - - - - -fromSource -ext - - -12 - - -9 -10 -10 - - - - - @@ -13383,10 +12923,6 @@ name 10817 - -simple -3099 - @@ -13406,22 +12942,6 @@ -id -simple - - -12 - - -1 -2 -10817 - - - - - - name id @@ -13437,94 +12957,6 @@ - -name -simple - - -12 - - -1 -2 -10817 - - - - - - -simple -id - - -12 - - -1 -2 -1669 - - -2 -3 -661 - - -3 -4 -433 - - -4 -17 -238 - - -27 -121 -97 - - - - - - -simple -name - - -12 - - -1 -2 -1669 - - -2 -3 -661 - - -3 -4 -433 - - -4 -17 -238 - - -27 -121 -97 - - - - - From b69033f4ffad96071b47ba9cc48b7039e6ef416d Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Thu, 12 Aug 2021 17:04:56 +0200 Subject: [PATCH 368/741] C++: Upgrade script --- cpp/ql/lib/semmle/code/cpp/File.qll | 3 + .../old.dbscheme | 2145 +++++++++++++++++ .../semmlecode.cpp.dbscheme | 2136 ++++++++++++++++ .../upgrade.properties | 4 + 4 files changed, 4288 insertions(+) create mode 100644 cpp/upgrades/ddd31fd02e51ad270bc9e6712708e5a5b6881518/old.dbscheme create mode 100644 cpp/upgrades/ddd31fd02e51ad270bc9e6712708e5a5b6881518/semmlecode.cpp.dbscheme create mode 100644 cpp/upgrades/ddd31fd02e51ad270bc9e6712708e5a5b6881518/upgrade.properties diff --git a/cpp/ql/lib/semmle/code/cpp/File.qll b/cpp/ql/lib/semmle/code/cpp/File.qll index f67f5940dad..853b34ecfd9 100644 --- a/cpp/ql/lib/semmle/code/cpp/File.qll +++ b/cpp/ql/lib/semmle/code/cpp/File.qll @@ -353,6 +353,9 @@ class File extends Container, @file { firstDotPos = min([name.indexOf("."), name.length()]) and result = name.prefix(firstDotPos) ) + or + this.getAbsolutePath() = "" and + result = "" } } diff --git a/cpp/upgrades/ddd31fd02e51ad270bc9e6712708e5a5b6881518/old.dbscheme b/cpp/upgrades/ddd31fd02e51ad270bc9e6712708e5a5b6881518/old.dbscheme new file mode 100644 index 00000000000..ddd31fd02e5 --- /dev/null +++ b/cpp/upgrades/ddd31fd02e51ad270bc9e6712708e5a5b6881518/old.dbscheme @@ -0,0 +1,2145 @@ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * gcc -c f1.c f2.c f3.c + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + /** + * An invocation of the compiler. Note that more than one file may + * be compiled per invocation. For example, this command compiles + * three source files: + * + * gcc -c f1.c f2.c f3.c + */ + unique int id : @compilation, + string cwd : string ref +); + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | *path to extractor* + * 1 | `--mimic` + * 2 | `/usr/bin/gcc` + * 3 | `-c` + * 4 | f1.c + * 5 | f2.c + * 6 | f3.c + */ +#keyset[id, num] +compilation_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * The source files that are compiled by a compiler invocation. + * If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.c + * 1 | f2.c + * 2 | f3.c + * + * Note that even if those files `#include` headers, those headers + * do not appear as rows. + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + + +/** + * External data, loaded from CSV files during snapshot creation. See + * [Tutorial: Incorporating external data](https://help.semmle.com/wiki/display/SD/Tutorial%3A+Incorporating+external+data) + * for more information. + */ +externalData( + int id : @externalDataElement, + string path : string ref, + int column: int ref, + string value : string ref +); + +/** + * The date of the snapshot. + */ +snapshotDate(unique date snapshotDate : date ref); + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/** + * Data used by the 'duplicate code' detection. + */ +duplicateCode( + unique int id : @duplication, + string relativePath : string ref, + int equivClass : int ref +); + +/** + * Data used by the 'similar code' detection. + */ +similarCode( + unique int id : @similarity, + string relativePath : string ref, + int equivClass : int ref +); + +/** + * Data used by the 'duplicate code' and 'similar code' detection. + */ +@duplication_or_similarity = @duplication | @similarity + +/** + * Data used by the 'duplicate code' and 'similar code' detection. + */ +#keyset[id, offset] +tokens( + int id : @duplication_or_similarity ref, + int offset : int ref, + int beginLine : int ref, + int beginColumn : int ref, + int endLine : int ref, + int endColumn : int ref +); + +/** + * Information about packages that provide code used during compilation. + * The `id` is just a unique identifier. + * The `namespace` is typically the name of the package manager that + * provided the package (e.g. "dpkg" or "yum"). + * The `package_name` is the name of the package, and `version` is its + * version (as a string). + */ +external_packages( + unique int id: @external_package, + string namespace : string ref, + string package_name : string ref, + string version : string ref +); + +/** + * Holds if File `fileid` was provided by package `package`. + */ +header_to_external_package( + int fileid : @file ref, + int package : @external_package ref +); + +/* + * Version history + */ + +svnentries( + unique int id : @svnentry, + string revision : string ref, + string author : string ref, + date revisionDate : date ref, + int changeSize : int ref +) + +svnaffectedfiles( + int id : @svnentry ref, + int file : @file ref, + string action : string ref +) + +svnentrymsg( + unique int id : @svnentry ref, + string message : string ref +) + +svnchurn( + int commit : @svnentry ref, + int file : @file ref, + int addedLines : int ref, + int deletedLines : int ref +) + +/* + * C++ dbscheme + */ + +@location = @location_stmt | @location_expr | @location_default ; + +/** + * The location of an element that is not an expression or a statement. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + */ +locations_default( + /** The location of an element that is not an expression or a statement. */ + unique int id: @location_default, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** + * The location of a statement. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + */ +locations_stmt( + /** The location of a statement. */ + unique int id: @location_stmt, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** + * The location of an expression. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + */ +locations_expr( + /** The location of an expression. */ + unique int id: @location_expr, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** An element for which line-count information is available. */ +@sourceline = @file | @function | @variable | @enumconstant | @xmllocatable; + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref +); + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location_default ref +); + +/* + fromSource(0) = unknown, + fromSource(1) = from source, + fromSource(2) = from library +*/ +files( + unique int id: @file, + string name: string ref, + string simple: string ref, + string ext: string ref, + int fromSource: int ref +); + +folders( + unique int id: @folder, + string name: string ref, + string simple: string ref +); + +@container = @folder | @file + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +fileannotations( + int id: @file ref, + int kind: int ref, + string name: string ref, + string value: string ref +); + +inmacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +affectedbymacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +/* + case @macroinvocations.kind of + 1 = macro expansion + | 2 = other macro reference + ; +*/ +macroinvocations( + unique int id: @macroinvocation, + int macro_id: @ppd_define ref, + int location: @location_default ref, + int kind: int ref +); + +macroparent( + unique int id: @macroinvocation ref, + int parent_id: @macroinvocation ref +); + +// a macroinvocation may be part of another location +// the way to find a constant expression that uses a macro +// is thus to find a constant expression that has a location +// to which a macro invocation is bound +macrolocationbind( + int id: @macroinvocation ref, + int location: @location ref +); + +#keyset[invocation, argument_index] +macro_argument_unexpanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +#keyset[invocation, argument_index] +macro_argument_expanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +/* + case @function.kind of + 1 = normal + | 2 = constructor + | 3 = destructor + | 4 = conversion + | 5 = operator + | 6 = builtin // GCC built-in functions, e.g. __builtin___memcpy_chk + ; +*/ +functions( + unique int id: @function, + string name: string ref, + int kind: int ref +); + +function_entry_point(int id: @function ref, unique int entry_point: @stmt ref); + +function_return_type(int id: @function ref, int return_type: @type ref); + +/** If `function` is a coroutine, then this gives the + std::experimental::resumable_traits instance associated with it, + and the variables representing the `handle` and `promise` for it. */ +coroutine( + unique int function: @function ref, + int traits: @type ref, + int handle: @variable ref, + int promise: @variable ref +); + +/** The `new` function used for allocating the coroutine state, if any. */ +coroutine_new( + unique int function: @function ref, + int new: @function ref +); + +/** The `delete` function used for deallocating the coroutine state, if any. */ +coroutine_delete( + unique int function: @function ref, + int delete: @function ref +); + +purefunctions(unique int id: @function ref); + +function_deleted(unique int id: @function ref); + +function_defaulted(unique int id: @function ref); + +member_function_this_type(unique int id: @function ref, int this_type: @type ref); + +#keyset[id, type_id] +fun_decls( + int id: @fun_decl, + int function: @function ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +fun_def(unique int id: @fun_decl ref); +fun_specialized(unique int id: @fun_decl ref); +fun_implicit(unique int id: @fun_decl ref); +fun_decl_specifiers( + int id: @fun_decl ref, + string name: string ref +) +#keyset[fun_decl, index] +fun_decl_throws( + int fun_decl: @fun_decl ref, + int index: int ref, + int type_id: @type ref +); +/* an empty throw specification is different from none */ +fun_decl_empty_throws(unique int fun_decl: @fun_decl ref); +fun_decl_noexcept( + int fun_decl: @fun_decl ref, + int constant: @expr ref +); +fun_decl_empty_noexcept(int fun_decl: @fun_decl ref); +fun_decl_typedef_type( + unique int fun_decl: @fun_decl ref, + int typedeftype_id: @usertype ref +); + +param_decl_bind( + unique int id: @var_decl ref, + int index: int ref, + int fun_decl: @fun_decl ref +); + +#keyset[id, type_id] +var_decls( + int id: @var_decl, + int variable: @variable ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +var_def(unique int id: @var_decl ref); +var_decl_specifiers( + int id: @var_decl ref, + string name: string ref +) + +type_decls( + unique int id: @type_decl, + int type_id: @type ref, + int location: @location_default ref +); +type_def(unique int id: @type_decl ref); +type_decl_top( + unique int type_decl: @type_decl ref +); + +namespace_decls( + unique int id: @namespace_decl, + int namespace_id: @namespace ref, + int location: @location_default ref, + int bodylocation: @location_default ref +); + +usings( + unique int id: @using, + int element_id: @element ref, + int location: @location_default ref +); + +/** The element which contains the `using` declaration. */ +using_container( + int parent: @element ref, + int child: @using ref +); + +static_asserts( + unique int id: @static_assert, + int condition : @expr ref, + string message : string ref, + int location: @location_default ref, + int enclosing : @element ref +); + +// each function has an ordered list of parameters +#keyset[id, type_id] +#keyset[function, index, type_id] +params( + int id: @parameter, + int function: @functionorblock ref, + int index: int ref, + int type_id: @type ref +); + +overrides(int new: @function ref, int old: @function ref); + +#keyset[id, type_id] +membervariables( + int id: @membervariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +globalvariables( + int id: @globalvariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +localvariables( + int id: @localvariable, + int type_id: @type ref, + string name: string ref +); + +autoderivation( + unique int var: @variable ref, + int derivation_type: @type ref +); + +enumconstants( + unique int id: @enumconstant, + int parent: @usertype ref, + int index: int ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); + +@variable = @localscopevariable | @globalvariable | @membervariable; + +@localscopevariable = @localvariable | @parameter; + +/* + Built-in types are the fundamental types, e.g., integral, floating, and void. + + case @builtintype.kind of + 1 = error + | 2 = unknown + | 3 = void + | 4 = boolean + | 5 = char + | 6 = unsigned_char + | 7 = signed_char + | 8 = short + | 9 = unsigned_short + | 10 = signed_short + | 11 = int + | 12 = unsigned_int + | 13 = signed_int + | 14 = long + | 15 = unsigned_long + | 16 = signed_long + | 17 = long_long + | 18 = unsigned_long_long + | 19 = signed_long_long + | 20 = __int8 // Microsoft-specific + | 21 = __int16 // Microsoft-specific + | 22 = __int32 // Microsoft-specific + | 23 = __int64 // Microsoft-specific + | 24 = float + | 25 = double + | 26 = long_double + | 27 = _Complex_float // C99-specific + | 28 = _Complex_double // C99-specific + | 29 = _Complex_long double // C99-specific + | 30 = _Imaginary_float // C99-specific + | 31 = _Imaginary_double // C99-specific + | 32 = _Imaginary_long_double // C99-specific + | 33 = wchar_t // Microsoft-specific + | 34 = decltype_nullptr // C++11 + | 35 = __int128 + | 36 = unsigned___int128 + | 37 = signed___int128 + | 38 = __float128 + | 39 = _Complex___float128 + | 40 = _Decimal32 + | 41 = _Decimal64 + | 42 = _Decimal128 + | 43 = char16_t + | 44 = char32_t + | 45 = _Float32 + | 46 = _Float32x + | 47 = _Float64 + | 48 = _Float64x + | 49 = _Float128 + | 50 = _Float128x + | 51 = char8_t + ; +*/ +builtintypes( + unique int id: @builtintype, + string name: string ref, + int kind: int ref, + int size: int ref, + int sign: int ref, + int alignment: int ref +); + +/* + Derived types are types that are directly derived from existing types and + point to, refer to, transform type data to return a new type. + + case @derivedtype.kind of + 1 = pointer + | 2 = reference + | 3 = type_with_specifiers + | 4 = array + | 5 = gnu_vector + | 6 = routineptr + | 7 = routinereference + | 8 = rvalue_reference // C++11 +// ... 9 type_conforming_to_protocols deprecated + | 10 = block + ; +*/ +derivedtypes( + unique int id: @derivedtype, + string name: string ref, + int kind: int ref, + int type_id: @type ref +); + +pointerishsize(unique int id: @derivedtype ref, + int size: int ref, + int alignment: int ref); + +arraysizes( + unique int id: @derivedtype ref, + int num_elements: int ref, + int bytesize: int ref, + int alignment: int ref +); + +typedefbase( + unique int id: @usertype ref, + int type_id: @type ref +); + +/** + * An instance of the C++11 `decltype` operator. For example: + * ``` + * int a; + * decltype(1+a) b; + * ``` + * Here `expr` is `1+a`. + * + * Sometimes an additional pair of parentheses around the expression + * would change the semantics of this decltype, e.g. + * ``` + * struct A { double x; }; + * const A* a = new A(); + * decltype( a->x ); // type is double + * decltype((a->x)); // type is const double& + * ``` + * (Please consult the C++11 standard for more details). + * `parentheses_would_change_meaning` is `true` iff that is the case. + */ +#keyset[id, expr] +decltypes( + int id: @decltype, + int expr: @expr ref, + int base_type: @type ref, + boolean parentheses_would_change_meaning: boolean ref +); + +/* + case @usertype.kind of + 1 = struct + | 2 = class + | 3 = union + | 4 = enum + | 5 = typedef // classic C: typedef typedef type name + | 6 = template + | 7 = template_parameter + | 8 = template_template_parameter + | 9 = proxy_class // a proxy class associated with a template parameter +// ... 10 objc_class deprecated +// ... 11 objc_protocol deprecated +// ... 12 objc_category deprecated + | 13 = scoped_enum + | 14 = using_alias // a using name = type style typedef + ; +*/ +usertypes( + unique int id: @usertype, + string name: string ref, + int kind: int ref +); + +usertypesize( + unique int id: @usertype ref, + int size: int ref, + int alignment: int ref +); + +usertype_final(unique int id: @usertype ref); + +usertype_uuid( + unique int id: @usertype ref, + unique string uuid: string ref +); + +mangled_name( + unique int id: @declaration ref, + int mangled_name : @mangledname +); + +is_pod_class(unique int id: @usertype ref); +is_standard_layout_class(unique int id: @usertype ref); + +is_complete(unique int id: @usertype ref); + +is_class_template(unique int id: @usertype ref); +class_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +class_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +class_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +is_proxy_class_for( + unique int id: @usertype ref, + unique int templ_param_id: @usertype ref +); + +type_mentions( + unique int id: @type_mention, + int type_id: @type ref, + int location: @location ref, + // a_symbol_reference_kind from the EDG frontend. See symbol_ref.h there. + int kind: int ref +); + +is_function_template(unique int id: @function ref); +function_instantiation( + unique int to: @function ref, + int from: @function ref +); +function_template_argument( + int function_id: @function ref, + int index: int ref, + int arg_type: @type ref +); +function_template_argument_value( + int function_id: @function ref, + int index: int ref, + int arg_value: @expr ref +); + +is_variable_template(unique int id: @variable ref); +variable_instantiation( + unique int to: @variable ref, + int from: @variable ref +); +variable_template_argument( + int variable_id: @variable ref, + int index: int ref, + int arg_type: @type ref +); +variable_template_argument_value( + int variable_id: @variable ref, + int index: int ref, + int arg_value: @expr ref +); + +/* + Fixed point types + precision(1) = short, precision(2) = default, precision(3) = long + is_unsigned(1) = unsigned is_unsigned(2) = signed + is_fract_type(1) = declared with _Fract + saturating(1) = declared with _Sat +*/ +/* TODO +fixedpointtypes( + unique int id: @fixedpointtype, + int precision: int ref, + int is_unsigned: int ref, + int is_fract_type: int ref, + int saturating: int ref); +*/ + +routinetypes( + unique int id: @routinetype, + int return_type: @type ref +); + +routinetypeargs( + int routine: @routinetype ref, + int index: int ref, + int type_id: @type ref +); + +ptrtomembers( + unique int id: @ptrtomember, + int type_id: @type ref, + int class_id: @type ref +); + +/* + specifiers for types, functions, and variables + + "public", + "protected", + "private", + + "const", + "volatile", + "static", + + "pure", + "virtual", + "sealed", // Microsoft + "__interface", // Microsoft + "inline", + "explicit", + + "near", // near far extension + "far", // near far extension + "__ptr32", // Microsoft + "__ptr64", // Microsoft + "__sptr", // Microsoft + "__uptr", // Microsoft + "dllimport", // Microsoft + "dllexport", // Microsoft + "thread", // Microsoft + "naked", // Microsoft + "microsoft_inline", // Microsoft + "forceinline", // Microsoft + "selectany", // Microsoft + "nothrow", // Microsoft + "novtable", // Microsoft + "noreturn", // Microsoft + "noinline", // Microsoft + "noalias", // Microsoft + "restrict", // Microsoft +*/ + +specifiers( + unique int id: @specifier, + unique string str: string ref +); + +typespecifiers( + int type_id: @type ref, + int spec_id: @specifier ref +); + +funspecifiers( + int func_id: @function ref, + int spec_id: @specifier ref +); + +varspecifiers( + int var_id: @accessible ref, + int spec_id: @specifier ref +); + +attributes( + unique int id: @attribute, + int kind: int ref, + string name: string ref, + string name_space: string ref, + int location: @location_default ref +); + +case @attribute.kind of + 0 = @gnuattribute +| 1 = @stdattribute +| 2 = @declspec +| 3 = @msattribute +| 4 = @alignas +// ... 5 @objc_propertyattribute deprecated +; + +attribute_args( + unique int id: @attribute_arg, + int kind: int ref, + int attribute: @attribute ref, + int index: int ref, + int location: @location_default ref +); + +case @attribute_arg.kind of + 0 = @attribute_arg_empty +| 1 = @attribute_arg_token +| 2 = @attribute_arg_constant +| 3 = @attribute_arg_type +; + +attribute_arg_value( + unique int arg: @attribute_arg ref, + string value: string ref +); +attribute_arg_type( + unique int arg: @attribute_arg ref, + int type_id: @type ref +); +attribute_arg_name( + unique int arg: @attribute_arg ref, + string name: string ref +); + +typeattributes( + int type_id: @type ref, + int spec_id: @attribute ref +); + +funcattributes( + int func_id: @function ref, + int spec_id: @attribute ref +); + +varattributes( + int var_id: @accessible ref, + int spec_id: @attribute ref +); + +stmtattributes( + int stmt_id: @stmt ref, + int spec_id: @attribute ref +); + +@type = @builtintype + | @derivedtype + | @usertype + /* TODO | @fixedpointtype */ + | @routinetype + | @ptrtomember + | @decltype; + +unspecifiedtype( + unique int type_id: @type ref, + int unspecified_type_id: @type ref +); + +member( + int parent: @type ref, + int index: int ref, + int child: @member ref +); + +@enclosingfunction_child = @usertype | @variable | @namespace + +enclosingfunction( + unique int child: @enclosingfunction_child ref, + int parent: @function ref +); + +derivations( + unique int derivation: @derivation, + int sub: @type ref, + int index: int ref, + int super: @type ref, + int location: @location_default ref +); + +derspecifiers( + int der_id: @derivation ref, + int spec_id: @specifier ref +); + +/** + * Contains the byte offset of the base class subobject within the derived + * class. Only holds for non-virtual base classes, but see table + * `virtual_base_offsets` for offsets of virtual base class subobjects. + */ +direct_base_offsets( + unique int der_id: @derivation ref, + int offset: int ref +); + +/** + * Contains the byte offset of the virtual base class subobject for class + * `super` within a most-derived object of class `sub`. `super` can be either a + * direct or indirect base class. + */ +#keyset[sub, super] +virtual_base_offsets( + int sub: @usertype ref, + int super: @usertype ref, + int offset: int ref +); + +frienddecls( + unique int id: @frienddecl, + int type_id: @type ref, + int decl_id: @declaration ref, + int location: @location_default ref +); + +@declaredtype = @usertype ; + +@declaration = @function + | @declaredtype + | @variable + | @enumconstant + | @frienddecl; + +@member = @membervariable + | @function + | @declaredtype + | @enumconstant; + +@locatable = @diagnostic + | @declaration + | @ppd_include + | @ppd_define + | @macroinvocation + /*| @funcall*/ + | @xmllocatable + | @attribute + | @attribute_arg; + +@namedscope = @namespace | @usertype; + +@element = @locatable + | @file + | @folder + | @specifier + | @type + | @expr + | @namespace + | @initialiser + | @stmt + | @derivation + | @comment + | @preprocdirect + | @fun_decl + | @var_decl + | @type_decl + | @namespace_decl + | @using + | @namequalifier + | @specialnamequalifyingelement + | @static_assert + | @type_mention + | @lambdacapture; + +@exprparent = @element; + +comments( + unique int id: @comment, + string contents: string ref, + int location: @location_default ref +); + +commentbinding( + int id: @comment ref, + int element: @element ref +); + +exprconv( + int converted: @expr ref, + unique int conversion: @expr ref +); + +compgenerated(unique int id: @element ref); + +/** + * `destructor_call` destructs the `i`'th entity that should be + * destructed following `element`. Note that entities should be + * destructed in reverse construction order, so for a given `element` + * these should be called from highest to lowest `i`. + */ +#keyset[element, destructor_call] +#keyset[element, i] +synthetic_destructor_call( + int element: @element ref, + int i: int ref, + int destructor_call: @routineexpr ref +); + +namespaces( + unique int id: @namespace, + string name: string ref +); + +namespace_inline( + unique int id: @namespace ref +); + +namespacembrs( + int parentid: @namespace ref, + unique int memberid: @namespacembr ref +); + +@namespacembr = @declaration | @namespace; + +exprparents( + int expr_id: @expr ref, + int child_index: int ref, + int parent_id: @exprparent ref +); + +expr_isload(unique int expr_id: @expr ref); + +@cast = @c_style_cast + | @const_cast + | @dynamic_cast + | @reinterpret_cast + | @static_cast + ; + +/* +case @conversion.kind of + 0 = @simple_conversion // a numeric conversion, qualification conversion, or a reinterpret_cast +| 1 = @bool_conversion // conversion to 'bool' +| 2 = @base_class_conversion // a derived-to-base conversion +| 3 = @derived_class_conversion // a base-to-derived conversion +| 4 = @pm_base_class_conversion // a derived-to-base conversion of a pointer to member +| 5 = @pm_derived_class_conversion // a base-to-derived conversion of a pointer to member +| 6 = @glvalue_adjust // an adjustment of the type of a glvalue +| 7 = @prvalue_adjust // an adjustment of the type of a prvalue +; +*/ +/** + * Describes the semantics represented by a cast expression. This is largely + * independent of the source syntax of the cast, so it is separate from the + * regular expression kind. + */ +conversionkinds( + unique int expr_id: @cast ref, + int kind: int ref +); + +@conversion = @cast + | @array_to_pointer + | @parexpr + | @reference_to + | @ref_indirect + | @temp_init + ; + +/* +case @funbindexpr.kind of + 0 = @normal_call // a normal call +| 1 = @virtual_call // a virtual call +| 2 = @adl_call // a call whose target is only found by ADL +; +*/ +iscall(unique int caller: @funbindexpr ref, int kind: int ref); + +numtemplatearguments( + unique int expr_id: @expr ref, + int num: int ref +); + +specialnamequalifyingelements( + unique int id: @specialnamequalifyingelement, + unique string name: string ref +); + +@namequalifiableelement = @expr | @namequalifier; +@namequalifyingelement = @namespace + | @specialnamequalifyingelement + | @usertype; + +namequalifiers( + unique int id: @namequalifier, + unique int qualifiableelement: @namequalifiableelement ref, + int qualifyingelement: @namequalifyingelement ref, + int location: @location_default ref +); + +varbind( + int expr: @varbindexpr ref, + int var: @accessible ref +); + +funbind( + int expr: @funbindexpr ref, + int fun: @function ref +); + +@any_new_expr = @new_expr + | @new_array_expr; + +@new_or_delete_expr = @any_new_expr + | @delete_expr + | @delete_array_expr; + +@prefix_crement_expr = @preincrexpr | @predecrexpr; + +@postfix_crement_expr = @postincrexpr | @postdecrexpr; + +@increment_expr = @preincrexpr | @postincrexpr; + +@decrement_expr = @predecrexpr | @postdecrexpr; + +@crement_expr = @increment_expr | @decrement_expr; + +@un_arith_op_expr = @arithnegexpr + | @unaryplusexpr + | @conjugation + | @realpartexpr + | @imagpartexpr + | @crement_expr + ; + +@un_bitwise_op_expr = @complementexpr; + +@un_log_op_expr = @notexpr; + +@un_op_expr = @address_of + | @indirect + | @un_arith_op_expr + | @un_bitwise_op_expr + | @builtinaddressof + | @vec_fill + | @un_log_op_expr + | @co_await + | @co_yield + ; + +@bin_log_op_expr = @andlogicalexpr | @orlogicalexpr; + +@cmp_op_expr = @eq_op_expr | @rel_op_expr; + +@eq_op_expr = @eqexpr | @neexpr; + +@rel_op_expr = @gtexpr + | @ltexpr + | @geexpr + | @leexpr + | @spaceshipexpr + ; + +@bin_bitwise_op_expr = @lshiftexpr + | @rshiftexpr + | @andexpr + | @orexpr + | @xorexpr + ; + +@p_arith_op_expr = @paddexpr + | @psubexpr + | @pdiffexpr + ; + +@bin_arith_op_expr = @addexpr + | @subexpr + | @mulexpr + | @divexpr + | @remexpr + | @jmulexpr + | @jdivexpr + | @fjaddexpr + | @jfaddexpr + | @fjsubexpr + | @jfsubexpr + | @minexpr + | @maxexpr + | @p_arith_op_expr + ; + +@bin_op_expr = @bin_arith_op_expr + | @bin_bitwise_op_expr + | @cmp_op_expr + | @bin_log_op_expr + ; + +@op_expr = @un_op_expr + | @bin_op_expr + | @assign_expr + | @conditionalexpr + ; + +@assign_arith_expr = @assignaddexpr + | @assignsubexpr + | @assignmulexpr + | @assigndivexpr + | @assignremexpr + ; + +@assign_bitwise_expr = @assignandexpr + | @assignorexpr + | @assignxorexpr + | @assignlshiftexpr + | @assignrshiftexpr + | @assignpaddexpr + | @assignpsubexpr + ; + +@assign_op_expr = @assign_arith_expr | @assign_bitwise_expr + +@assign_expr = @assignexpr | @assign_op_expr + +/* + case @allocator.form of + 0 = plain + | 1 = alignment + ; +*/ + +/** + * The allocator function associated with a `new` or `new[]` expression. + * The `form` column specified whether the allocation call contains an alignment + * argument. + */ +expr_allocator( + unique int expr: @any_new_expr ref, + int func: @function ref, + int form: int ref +); + +/* + case @deallocator.form of + 0 = plain + | 1 = size + | 2 = alignment + | 3 = size_and_alignment + ; +*/ + +/** + * The deallocator function associated with a `delete`, `delete[]`, `new`, or + * `new[]` expression. For a `new` or `new[]` expression, the deallocator is the + * one used to free memory if the initialization throws an exception. + * The `form` column specifies whether the deallocation call contains a size + * argument, and alignment argument, or both. + */ +expr_deallocator( + unique int expr: @new_or_delete_expr ref, + int func: @function ref, + int form: int ref +); + +/** + * Holds if the `@conditionalexpr` is of the two operand form + * `guard ? : false`. + */ +expr_cond_two_operand( + unique int cond: @conditionalexpr ref +); + +/** + * The guard of `@conditionalexpr` `guard ? true : false` + */ +expr_cond_guard( + unique int cond: @conditionalexpr ref, + int guard: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` holds. For the two operand form + * `guard ?: false` consider using `expr_cond_guard` instead. + */ +expr_cond_true( + unique int cond: @conditionalexpr ref, + int true: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` does not hold. + */ +expr_cond_false( + unique int cond: @conditionalexpr ref, + int false: @expr ref +); + +/** A string representation of the value. */ +values( + unique int id: @value, + string str: string ref +); + +/** The actual text in the source code for the value, if any. */ +valuetext( + unique int id: @value ref, + string text: string ref +); + +valuebind( + int val: @value ref, + unique int expr: @expr ref +); + +fieldoffsets( + unique int id: @variable ref, + int byteoffset: int ref, + int bitoffset: int ref +); + +bitfield( + unique int id: @variable ref, + int bits: int ref, + int declared_bits: int ref +); + +/* TODO +memberprefix( + int member: @expr ref, + int prefix: @expr ref +); +*/ + +/* + kind(1) = mbrcallexpr + kind(2) = mbrptrcallexpr + kind(3) = mbrptrmbrcallexpr + kind(4) = ptrmbrptrmbrcallexpr + kind(5) = mbrreadexpr // x.y + kind(6) = mbrptrreadexpr // p->y + kind(7) = mbrptrmbrreadexpr // x.*pm + kind(8) = mbrptrmbrptrreadexpr // x->*pm + kind(9) = staticmbrreadexpr // static x.y + kind(10) = staticmbrptrreadexpr // static p->y +*/ +/* TODO +memberaccess( + int member: @expr ref, + int kind: int ref +); +*/ + +initialisers( + unique int init: @initialiser, + int var: @accessible ref, + unique int expr: @expr ref, + int location: @location_expr ref +); + +/** + * An ancestor for the expression, for cases in which we cannot + * otherwise find the expression's parent. + */ +expr_ancestor( + int exp: @expr ref, + int ancestor: @element ref +); + +exprs( + unique int id: @expr, + int kind: int ref, + int location: @location_expr ref +); + +/* + case @value.category of + 1 = prval + | 2 = xval + | 3 = lval + ; +*/ +expr_types( + int id: @expr ref, + int typeid: @type ref, + int value_category: int ref +); + +case @expr.kind of + 1 = @errorexpr +| 2 = @address_of // & AddressOfExpr +| 3 = @reference_to // ReferenceToExpr (implicit?) +| 4 = @indirect // * PointerDereferenceExpr +| 5 = @ref_indirect // ReferenceDereferenceExpr (implicit?) +// ... +| 8 = @array_to_pointer // (???) +| 9 = @vacuous_destructor_call // VacuousDestructorCall +// ... +| 11 = @assume // Microsoft +| 12 = @parexpr +| 13 = @arithnegexpr +| 14 = @unaryplusexpr +| 15 = @complementexpr +| 16 = @notexpr +| 17 = @conjugation // GNU ~ operator +| 18 = @realpartexpr // GNU __real +| 19 = @imagpartexpr // GNU __imag +| 20 = @postincrexpr +| 21 = @postdecrexpr +| 22 = @preincrexpr +| 23 = @predecrexpr +| 24 = @conditionalexpr +| 25 = @addexpr +| 26 = @subexpr +| 27 = @mulexpr +| 28 = @divexpr +| 29 = @remexpr +| 30 = @jmulexpr // C99 mul imaginary +| 31 = @jdivexpr // C99 div imaginary +| 32 = @fjaddexpr // C99 add real + imaginary +| 33 = @jfaddexpr // C99 add imaginary + real +| 34 = @fjsubexpr // C99 sub real - imaginary +| 35 = @jfsubexpr // C99 sub imaginary - real +| 36 = @paddexpr // pointer add (pointer + int or int + pointer) +| 37 = @psubexpr // pointer sub (pointer - integer) +| 38 = @pdiffexpr // difference between two pointers +| 39 = @lshiftexpr +| 40 = @rshiftexpr +| 41 = @andexpr +| 42 = @orexpr +| 43 = @xorexpr +| 44 = @eqexpr +| 45 = @neexpr +| 46 = @gtexpr +| 47 = @ltexpr +| 48 = @geexpr +| 49 = @leexpr +| 50 = @minexpr // GNU minimum +| 51 = @maxexpr // GNU maximum +| 52 = @assignexpr +| 53 = @assignaddexpr +| 54 = @assignsubexpr +| 55 = @assignmulexpr +| 56 = @assigndivexpr +| 57 = @assignremexpr +| 58 = @assignlshiftexpr +| 59 = @assignrshiftexpr +| 60 = @assignandexpr +| 61 = @assignorexpr +| 62 = @assignxorexpr +| 63 = @assignpaddexpr // assign pointer add +| 64 = @assignpsubexpr // assign pointer sub +| 65 = @andlogicalexpr +| 66 = @orlogicalexpr +| 67 = @commaexpr +| 68 = @subscriptexpr // access to member of an array, e.g., a[5] +// ... 69 @objc_subscriptexpr deprecated +// ... 70 @cmdaccess deprecated +// ... +| 73 = @virtfunptrexpr +| 74 = @callexpr +// ... 75 @msgexpr_normal deprecated +// ... 76 @msgexpr_super deprecated +// ... 77 @atselectorexpr deprecated +// ... 78 @atprotocolexpr deprecated +| 79 = @vastartexpr +| 80 = @vaargexpr +| 81 = @vaendexpr +| 82 = @vacopyexpr +// ... 83 @atencodeexpr deprecated +| 84 = @varaccess +| 85 = @thisaccess +// ... 86 @objc_box_expr deprecated +| 87 = @new_expr +| 88 = @delete_expr +| 89 = @throw_expr +| 90 = @condition_decl // a variable declared in a condition, e.g., if(int x = y > 2) +| 91 = @braced_init_list +| 92 = @type_id +| 93 = @runtime_sizeof +| 94 = @runtime_alignof +| 95 = @sizeof_pack +| 96 = @expr_stmt // GNU extension +| 97 = @routineexpr +| 98 = @type_operand // used to access a type in certain contexts (haven't found any examples yet....) +| 99 = @offsetofexpr // offsetof ::= type and field +| 100 = @hasassignexpr // __has_assign ::= type +| 101 = @hascopyexpr // __has_copy ::= type +| 102 = @hasnothrowassign // __has_nothrow_assign ::= type +| 103 = @hasnothrowconstr // __has_nothrow_constructor ::= type +| 104 = @hasnothrowcopy // __has_nothrow_copy ::= type +| 105 = @hastrivialassign // __has_trivial_assign ::= type +| 106 = @hastrivialconstr // __has_trivial_constructor ::= type +| 107 = @hastrivialcopy // __has_trivial_copy ::= type +| 108 = @hasuserdestr // __has_user_destructor ::= type +| 109 = @hasvirtualdestr // __has_virtual_destructor ::= type +| 110 = @isabstractexpr // __is_abstract ::= type +| 111 = @isbaseofexpr // __is_base_of ::= type type +| 112 = @isclassexpr // __is_class ::= type +| 113 = @isconvtoexpr // __is_convertible_to ::= type type +| 114 = @isemptyexpr // __is_empty ::= type +| 115 = @isenumexpr // __is_enum ::= type +| 116 = @ispodexpr // __is_pod ::= type +| 117 = @ispolyexpr // __is_polymorphic ::= type +| 118 = @isunionexpr // __is_union ::= type +| 119 = @typescompexpr // GNU __builtin_types_compatible ::= type type +| 120 = @intaddrexpr // EDG internal builtin, used to implement offsetof +// ... +| 122 = @hastrivialdestructor // __has_trivial_destructor ::= type +| 123 = @literal +| 124 = @uuidof +| 127 = @aggregateliteral +| 128 = @delete_array_expr +| 129 = @new_array_expr +// ... 130 @objc_array_literal deprecated +// ... 131 @objc_dictionary_literal deprecated +| 132 = @foldexpr +// ... +| 200 = @ctordirectinit +| 201 = @ctorvirtualinit +| 202 = @ctorfieldinit +| 203 = @ctordelegatinginit +| 204 = @dtordirectdestruct +| 205 = @dtorvirtualdestruct +| 206 = @dtorfielddestruct +// ... +| 210 = @static_cast +| 211 = @reinterpret_cast +| 212 = @const_cast +| 213 = @dynamic_cast +| 214 = @c_style_cast +| 215 = @lambdaexpr +| 216 = @param_ref +| 217 = @noopexpr +// ... +| 294 = @istriviallyconstructibleexpr +| 295 = @isdestructibleexpr +| 296 = @isnothrowdestructibleexpr +| 297 = @istriviallydestructibleexpr +| 298 = @istriviallyassignableexpr +| 299 = @isnothrowassignableexpr +| 300 = @istrivialexpr +| 301 = @isstandardlayoutexpr +| 302 = @istriviallycopyableexpr +| 303 = @isliteraltypeexpr +| 304 = @hastrivialmoveconstructorexpr +| 305 = @hastrivialmoveassignexpr +| 306 = @hasnothrowmoveassignexpr +| 307 = @isconstructibleexpr +| 308 = @isnothrowconstructibleexpr +| 309 = @hasfinalizerexpr +| 310 = @isdelegateexpr +| 311 = @isinterfaceclassexpr +| 312 = @isrefarrayexpr +| 313 = @isrefclassexpr +| 314 = @issealedexpr +| 315 = @issimplevalueclassexpr +| 316 = @isvalueclassexpr +| 317 = @isfinalexpr +| 319 = @noexceptexpr +| 320 = @builtinshufflevector +| 321 = @builtinchooseexpr +| 322 = @builtinaddressof +| 323 = @vec_fill +| 324 = @builtinconvertvector +| 325 = @builtincomplex +| 326 = @spaceshipexpr +| 327 = @co_await +| 328 = @co_yield +| 329 = @temp_init +; + +@var_args_expr = @vastartexpr + | @vaendexpr + | @vaargexpr + | @vacopyexpr + ; + +@builtin_op = @var_args_expr + | @noopexpr + | @offsetofexpr + | @intaddrexpr + | @hasassignexpr + | @hascopyexpr + | @hasnothrowassign + | @hasnothrowconstr + | @hasnothrowcopy + | @hastrivialassign + | @hastrivialconstr + | @hastrivialcopy + | @hastrivialdestructor + | @hasuserdestr + | @hasvirtualdestr + | @isabstractexpr + | @isbaseofexpr + | @isclassexpr + | @isconvtoexpr + | @isemptyexpr + | @isenumexpr + | @ispodexpr + | @ispolyexpr + | @isunionexpr + | @typescompexpr + | @builtinshufflevector + | @builtinconvertvector + | @builtinaddressof + | @istriviallyconstructibleexpr + | @isdestructibleexpr + | @isnothrowdestructibleexpr + | @istriviallydestructibleexpr + | @istriviallyassignableexpr + | @isnothrowassignableexpr + | @isstandardlayoutexpr + | @istriviallycopyableexpr + | @isliteraltypeexpr + | @hastrivialmoveconstructorexpr + | @hastrivialmoveassignexpr + | @hasnothrowmoveassignexpr + | @isconstructibleexpr + | @isnothrowconstructibleexpr + | @hasfinalizerexpr + | @isdelegateexpr + | @isinterfaceclassexpr + | @isrefarrayexpr + | @isrefclassexpr + | @issealedexpr + | @issimplevalueclassexpr + | @isvalueclassexpr + | @isfinalexpr + | @builtinchooseexpr + | @builtincomplex + ; + +new_allocated_type( + unique int expr: @new_expr ref, + int type_id: @type ref +); + +new_array_allocated_type( + unique int expr: @new_array_expr ref, + int type_id: @type ref +); + +/** + * The field being initialized by an initializer expression within an aggregate + * initializer for a class/struct/union. + */ +#keyset[aggregate, field] +aggregate_field_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int field: @membervariable ref +); + +/** + * The index of the element being initialized by an initializer expression + * within an aggregate initializer for an array. + */ +#keyset[aggregate, element_index] +aggregate_array_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int element_index: int ref +); + +@ctorinit = @ctordirectinit + | @ctorvirtualinit + | @ctorfieldinit + | @ctordelegatinginit; +@dtordestruct = @dtordirectdestruct + | @dtorvirtualdestruct + | @dtorfielddestruct; + + +condition_decl_bind( + unique int expr: @condition_decl ref, + unique int decl: @declaration ref +); + +typeid_bind( + unique int expr: @type_id ref, + int type_id: @type ref +); + +uuidof_bind( + unique int expr: @uuidof ref, + int type_id: @type ref +); + +@runtime_sizeof_or_alignof = @runtime_sizeof | @runtime_alignof; + +sizeof_bind( + unique int expr: @runtime_sizeof_or_alignof ref, + int type_id: @type ref +); + +code_block( + unique int block: @literal ref, + unique int routine: @function ref +); + +lambdas( + unique int expr: @lambdaexpr ref, + string default_capture: string ref, + boolean has_explicit_return_type: boolean ref +); + +lambda_capture( + unique int id: @lambdacapture, + int lambda: @lambdaexpr ref, + int index: int ref, + int field: @membervariable ref, + boolean captured_by_reference: boolean ref, + boolean is_implicit: boolean ref, + int location: @location_default ref +); + +@funbindexpr = @routineexpr + | @new_expr + | @delete_expr + | @delete_array_expr + | @ctordirectinit + | @ctorvirtualinit + | @ctordelegatinginit + | @dtordirectdestruct + | @dtorvirtualdestruct; + +@varbindexpr = @varaccess | @ctorfieldinit | @dtorfielddestruct; +@addressable = @function | @variable ; +@accessible = @addressable | @enumconstant ; + +@access = @varaccess | @routineexpr ; + +fold( + int expr: @foldexpr ref, + string operator: string ref, + boolean is_left_fold: boolean ref +); + +stmts( + unique int id: @stmt, + int kind: int ref, + int location: @location_stmt ref +); + +case @stmt.kind of + 1 = @stmt_expr +| 2 = @stmt_if +| 3 = @stmt_while +| 4 = @stmt_goto +| 5 = @stmt_label +| 6 = @stmt_return +| 7 = @stmt_block +| 8 = @stmt_end_test_while // do { ... } while ( ... ) +| 9 = @stmt_for +| 10 = @stmt_switch_case +| 11 = @stmt_switch +| 13 = @stmt_asm // "asm" statement or the body of an asm function +| 15 = @stmt_try_block +| 16 = @stmt_microsoft_try // Microsoft +| 17 = @stmt_decl +| 18 = @stmt_set_vla_size // C99 +| 19 = @stmt_vla_decl // C99 +| 25 = @stmt_assigned_goto // GNU +| 26 = @stmt_empty +| 27 = @stmt_continue +| 28 = @stmt_break +| 29 = @stmt_range_based_for // C++11 +// ... 30 @stmt_at_autoreleasepool_block deprecated +// ... 31 @stmt_objc_for_in deprecated +// ... 32 @stmt_at_synchronized deprecated +| 33 = @stmt_handler +// ... 34 @stmt_finally_end deprecated +| 35 = @stmt_constexpr_if +| 37 = @stmt_co_return +; + +type_vla( + int type_id: @type ref, + int decl: @stmt_vla_decl ref +); + +variable_vla( + int var: @variable ref, + int decl: @stmt_vla_decl ref +); + +if_then( + unique int if_stmt: @stmt_if ref, + int then_id: @stmt ref +); + +if_else( + unique int if_stmt: @stmt_if ref, + int else_id: @stmt ref +); + +constexpr_if_then( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int then_id: @stmt ref +); + +constexpr_if_else( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int else_id: @stmt ref +); + +while_body( + unique int while_stmt: @stmt_while ref, + int body_id: @stmt ref +); + +do_body( + unique int do_stmt: @stmt_end_test_while ref, + int body_id: @stmt ref +); + +#keyset[switch_stmt, index] +switch_case( + int switch_stmt: @stmt_switch ref, + int index: int ref, + int case_id: @stmt_switch_case ref +); + +switch_body( + unique int switch_stmt: @stmt_switch ref, + int body_id: @stmt ref +); + +for_initialization( + unique int for_stmt: @stmt_for ref, + int init_id: @stmt ref +); + +for_condition( + unique int for_stmt: @stmt_for ref, + int condition_id: @expr ref +); + +for_update( + unique int for_stmt: @stmt_for ref, + int update_id: @expr ref +); + +for_body( + unique int for_stmt: @stmt_for ref, + int body_id: @stmt ref +); + +@stmtparent = @stmt | @expr_stmt ; +stmtparents( + unique int id: @stmt ref, + int index: int ref, + int parent: @stmtparent ref +); + +ishandler(unique int block: @stmt_block ref); + +@cfgnode = @stmt | @expr | @function | @initialiser ; + +stmt_decl_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl: @declaration ref +); + +stmt_decl_entry_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl_entry: @element ref +); + +@functionorblock = @function | @stmt_block; + +blockscope( + unique int block: @stmt_block ref, + int enclosing: @functionorblock ref +); + +@jump = @stmt_goto | @stmt_break | @stmt_continue; + +@jumporlabel = @jump | @stmt_label | @literal; + +jumpinfo( + unique int id: @jumporlabel ref, + string str: string ref, + int target: @stmt ref +); + +preprocdirects( + unique int id: @preprocdirect, + int kind: int ref, + int location: @location_default ref +); +case @preprocdirect.kind of + 0 = @ppd_if +| 1 = @ppd_ifdef +| 2 = @ppd_ifndef +| 3 = @ppd_elif +| 4 = @ppd_else +| 5 = @ppd_endif +| 6 = @ppd_plain_include +| 7 = @ppd_define +| 8 = @ppd_undef +| 9 = @ppd_line +| 10 = @ppd_error +| 11 = @ppd_pragma +| 12 = @ppd_objc_import +| 13 = @ppd_include_next +| 18 = @ppd_warning +; + +@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next; + +@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif; + +preprocpair( + int begin : @ppd_branch ref, + int elseelifend : @preprocdirect ref +); + +preproctrue(int branch : @ppd_branch ref); +preprocfalse(int branch : @ppd_branch ref); + +preproctext( + unique int id: @preprocdirect ref, + string head: string ref, + string body: string ref +); + +includes( + unique int id: @ppd_include ref, + int included: @file ref +); + +link_targets( + unique int id: @link_target, + int binary: @file ref +); + +link_parent( + int element : @element ref, + int link_target : @link_target ref +); + +/* XML Files */ + +xmlEncoding(unique int id: @file ref, string encoding: string ref); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref +); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref +); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref +); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref +); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref +); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref +); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref +); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref +); + +@xmllocatable = @xmlcharacters + | @xmlelement + | @xmlcomment + | @xmlattribute + | @xmldtd + | @file + | @xmlnamespace; diff --git a/cpp/upgrades/ddd31fd02e51ad270bc9e6712708e5a5b6881518/semmlecode.cpp.dbscheme b/cpp/upgrades/ddd31fd02e51ad270bc9e6712708e5a5b6881518/semmlecode.cpp.dbscheme new file mode 100644 index 00000000000..7806a11dd7a --- /dev/null +++ b/cpp/upgrades/ddd31fd02e51ad270bc9e6712708e5a5b6881518/semmlecode.cpp.dbscheme @@ -0,0 +1,2136 @@ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * gcc -c f1.c f2.c f3.c + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + /** + * An invocation of the compiler. Note that more than one file may + * be compiled per invocation. For example, this command compiles + * three source files: + * + * gcc -c f1.c f2.c f3.c + */ + unique int id : @compilation, + string cwd : string ref +); + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | *path to extractor* + * 1 | `--mimic` + * 2 | `/usr/bin/gcc` + * 3 | `-c` + * 4 | f1.c + * 5 | f2.c + * 6 | f3.c + */ +#keyset[id, num] +compilation_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * The source files that are compiled by a compiler invocation. + * If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.c + * 1 | f2.c + * 2 | f3.c + * + * Note that even if those files `#include` headers, those headers + * do not appear as rows. + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + + +/** + * External data, loaded from CSV files during snapshot creation. See + * [Tutorial: Incorporating external data](https://help.semmle.com/wiki/display/SD/Tutorial%3A+Incorporating+external+data) + * for more information. + */ +externalData( + int id : @externalDataElement, + string path : string ref, + int column: int ref, + string value : string ref +); + +/** + * The date of the snapshot. + */ +snapshotDate(unique date snapshotDate : date ref); + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/** + * Data used by the 'duplicate code' detection. + */ +duplicateCode( + unique int id : @duplication, + string relativePath : string ref, + int equivClass : int ref +); + +/** + * Data used by the 'similar code' detection. + */ +similarCode( + unique int id : @similarity, + string relativePath : string ref, + int equivClass : int ref +); + +/** + * Data used by the 'duplicate code' and 'similar code' detection. + */ +@duplication_or_similarity = @duplication | @similarity + +/** + * Data used by the 'duplicate code' and 'similar code' detection. + */ +#keyset[id, offset] +tokens( + int id : @duplication_or_similarity ref, + int offset : int ref, + int beginLine : int ref, + int beginColumn : int ref, + int endLine : int ref, + int endColumn : int ref +); + +/** + * Information about packages that provide code used during compilation. + * The `id` is just a unique identifier. + * The `namespace` is typically the name of the package manager that + * provided the package (e.g. "dpkg" or "yum"). + * The `package_name` is the name of the package, and `version` is its + * version (as a string). + */ +external_packages( + unique int id: @external_package, + string namespace : string ref, + string package_name : string ref, + string version : string ref +); + +/** + * Holds if File `fileid` was provided by package `package`. + */ +header_to_external_package( + int fileid : @file ref, + int package : @external_package ref +); + +/* + * Version history + */ + +svnentries( + unique int id : @svnentry, + string revision : string ref, + string author : string ref, + date revisionDate : date ref, + int changeSize : int ref +) + +svnaffectedfiles( + int id : @svnentry ref, + int file : @file ref, + string action : string ref +) + +svnentrymsg( + unique int id : @svnentry ref, + string message : string ref +) + +svnchurn( + int commit : @svnentry ref, + int file : @file ref, + int addedLines : int ref, + int deletedLines : int ref +) + +/* + * C++ dbscheme + */ + +@location = @location_stmt | @location_expr | @location_default ; + +/** + * The location of an element that is not an expression or a statement. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + */ +locations_default( + /** The location of an element that is not an expression or a statement. */ + unique int id: @location_default, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** + * The location of a statement. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + */ +locations_stmt( + /** The location of a statement. */ + unique int id: @location_stmt, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** + * The location of an expression. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + */ +locations_expr( + /** The location of an expression. */ + unique int id: @location_expr, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** An element for which line-count information is available. */ +@sourceline = @file | @function | @variable | @enumconstant | @xmllocatable; + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref +); + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location_default ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @folder | @file + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +fileannotations( + int id: @file ref, + int kind: int ref, + string name: string ref, + string value: string ref +); + +inmacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +affectedbymacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +/* + case @macroinvocations.kind of + 1 = macro expansion + | 2 = other macro reference + ; +*/ +macroinvocations( + unique int id: @macroinvocation, + int macro_id: @ppd_define ref, + int location: @location_default ref, + int kind: int ref +); + +macroparent( + unique int id: @macroinvocation ref, + int parent_id: @macroinvocation ref +); + +// a macroinvocation may be part of another location +// the way to find a constant expression that uses a macro +// is thus to find a constant expression that has a location +// to which a macro invocation is bound +macrolocationbind( + int id: @macroinvocation ref, + int location: @location ref +); + +#keyset[invocation, argument_index] +macro_argument_unexpanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +#keyset[invocation, argument_index] +macro_argument_expanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +/* + case @function.kind of + 1 = normal + | 2 = constructor + | 3 = destructor + | 4 = conversion + | 5 = operator + | 6 = builtin // GCC built-in functions, e.g. __builtin___memcpy_chk + ; +*/ +functions( + unique int id: @function, + string name: string ref, + int kind: int ref +); + +function_entry_point(int id: @function ref, unique int entry_point: @stmt ref); + +function_return_type(int id: @function ref, int return_type: @type ref); + +/** If `function` is a coroutine, then this gives the + std::experimental::resumable_traits instance associated with it, + and the variables representing the `handle` and `promise` for it. */ +coroutine( + unique int function: @function ref, + int traits: @type ref, + int handle: @variable ref, + int promise: @variable ref +); + +/** The `new` function used for allocating the coroutine state, if any. */ +coroutine_new( + unique int function: @function ref, + int new: @function ref +); + +/** The `delete` function used for deallocating the coroutine state, if any. */ +coroutine_delete( + unique int function: @function ref, + int delete: @function ref +); + +purefunctions(unique int id: @function ref); + +function_deleted(unique int id: @function ref); + +function_defaulted(unique int id: @function ref); + +member_function_this_type(unique int id: @function ref, int this_type: @type ref); + +#keyset[id, type_id] +fun_decls( + int id: @fun_decl, + int function: @function ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +fun_def(unique int id: @fun_decl ref); +fun_specialized(unique int id: @fun_decl ref); +fun_implicit(unique int id: @fun_decl ref); +fun_decl_specifiers( + int id: @fun_decl ref, + string name: string ref +) +#keyset[fun_decl, index] +fun_decl_throws( + int fun_decl: @fun_decl ref, + int index: int ref, + int type_id: @type ref +); +/* an empty throw specification is different from none */ +fun_decl_empty_throws(unique int fun_decl: @fun_decl ref); +fun_decl_noexcept( + int fun_decl: @fun_decl ref, + int constant: @expr ref +); +fun_decl_empty_noexcept(int fun_decl: @fun_decl ref); +fun_decl_typedef_type( + unique int fun_decl: @fun_decl ref, + int typedeftype_id: @usertype ref +); + +param_decl_bind( + unique int id: @var_decl ref, + int index: int ref, + int fun_decl: @fun_decl ref +); + +#keyset[id, type_id] +var_decls( + int id: @var_decl, + int variable: @variable ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +var_def(unique int id: @var_decl ref); +var_decl_specifiers( + int id: @var_decl ref, + string name: string ref +) + +type_decls( + unique int id: @type_decl, + int type_id: @type ref, + int location: @location_default ref +); +type_def(unique int id: @type_decl ref); +type_decl_top( + unique int type_decl: @type_decl ref +); + +namespace_decls( + unique int id: @namespace_decl, + int namespace_id: @namespace ref, + int location: @location_default ref, + int bodylocation: @location_default ref +); + +usings( + unique int id: @using, + int element_id: @element ref, + int location: @location_default ref +); + +/** The element which contains the `using` declaration. */ +using_container( + int parent: @element ref, + int child: @using ref +); + +static_asserts( + unique int id: @static_assert, + int condition : @expr ref, + string message : string ref, + int location: @location_default ref, + int enclosing : @element ref +); + +// each function has an ordered list of parameters +#keyset[id, type_id] +#keyset[function, index, type_id] +params( + int id: @parameter, + int function: @functionorblock ref, + int index: int ref, + int type_id: @type ref +); + +overrides(int new: @function ref, int old: @function ref); + +#keyset[id, type_id] +membervariables( + int id: @membervariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +globalvariables( + int id: @globalvariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +localvariables( + int id: @localvariable, + int type_id: @type ref, + string name: string ref +); + +autoderivation( + unique int var: @variable ref, + int derivation_type: @type ref +); + +enumconstants( + unique int id: @enumconstant, + int parent: @usertype ref, + int index: int ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); + +@variable = @localscopevariable | @globalvariable | @membervariable; + +@localscopevariable = @localvariable | @parameter; + +/* + Built-in types are the fundamental types, e.g., integral, floating, and void. + + case @builtintype.kind of + 1 = error + | 2 = unknown + | 3 = void + | 4 = boolean + | 5 = char + | 6 = unsigned_char + | 7 = signed_char + | 8 = short + | 9 = unsigned_short + | 10 = signed_short + | 11 = int + | 12 = unsigned_int + | 13 = signed_int + | 14 = long + | 15 = unsigned_long + | 16 = signed_long + | 17 = long_long + | 18 = unsigned_long_long + | 19 = signed_long_long + | 20 = __int8 // Microsoft-specific + | 21 = __int16 // Microsoft-specific + | 22 = __int32 // Microsoft-specific + | 23 = __int64 // Microsoft-specific + | 24 = float + | 25 = double + | 26 = long_double + | 27 = _Complex_float // C99-specific + | 28 = _Complex_double // C99-specific + | 29 = _Complex_long double // C99-specific + | 30 = _Imaginary_float // C99-specific + | 31 = _Imaginary_double // C99-specific + | 32 = _Imaginary_long_double // C99-specific + | 33 = wchar_t // Microsoft-specific + | 34 = decltype_nullptr // C++11 + | 35 = __int128 + | 36 = unsigned___int128 + | 37 = signed___int128 + | 38 = __float128 + | 39 = _Complex___float128 + | 40 = _Decimal32 + | 41 = _Decimal64 + | 42 = _Decimal128 + | 43 = char16_t + | 44 = char32_t + | 45 = _Float32 + | 46 = _Float32x + | 47 = _Float64 + | 48 = _Float64x + | 49 = _Float128 + | 50 = _Float128x + | 51 = char8_t + ; +*/ +builtintypes( + unique int id: @builtintype, + string name: string ref, + int kind: int ref, + int size: int ref, + int sign: int ref, + int alignment: int ref +); + +/* + Derived types are types that are directly derived from existing types and + point to, refer to, transform type data to return a new type. + + case @derivedtype.kind of + 1 = pointer + | 2 = reference + | 3 = type_with_specifiers + | 4 = array + | 5 = gnu_vector + | 6 = routineptr + | 7 = routinereference + | 8 = rvalue_reference // C++11 +// ... 9 type_conforming_to_protocols deprecated + | 10 = block + ; +*/ +derivedtypes( + unique int id: @derivedtype, + string name: string ref, + int kind: int ref, + int type_id: @type ref +); + +pointerishsize(unique int id: @derivedtype ref, + int size: int ref, + int alignment: int ref); + +arraysizes( + unique int id: @derivedtype ref, + int num_elements: int ref, + int bytesize: int ref, + int alignment: int ref +); + +typedefbase( + unique int id: @usertype ref, + int type_id: @type ref +); + +/** + * An instance of the C++11 `decltype` operator. For example: + * ``` + * int a; + * decltype(1+a) b; + * ``` + * Here `expr` is `1+a`. + * + * Sometimes an additional pair of parentheses around the expression + * would change the semantics of this decltype, e.g. + * ``` + * struct A { double x; }; + * const A* a = new A(); + * decltype( a->x ); // type is double + * decltype((a->x)); // type is const double& + * ``` + * (Please consult the C++11 standard for more details). + * `parentheses_would_change_meaning` is `true` iff that is the case. + */ +#keyset[id, expr] +decltypes( + int id: @decltype, + int expr: @expr ref, + int base_type: @type ref, + boolean parentheses_would_change_meaning: boolean ref +); + +/* + case @usertype.kind of + 1 = struct + | 2 = class + | 3 = union + | 4 = enum + | 5 = typedef // classic C: typedef typedef type name + | 6 = template + | 7 = template_parameter + | 8 = template_template_parameter + | 9 = proxy_class // a proxy class associated with a template parameter +// ... 10 objc_class deprecated +// ... 11 objc_protocol deprecated +// ... 12 objc_category deprecated + | 13 = scoped_enum + | 14 = using_alias // a using name = type style typedef + ; +*/ +usertypes( + unique int id: @usertype, + string name: string ref, + int kind: int ref +); + +usertypesize( + unique int id: @usertype ref, + int size: int ref, + int alignment: int ref +); + +usertype_final(unique int id: @usertype ref); + +usertype_uuid( + unique int id: @usertype ref, + unique string uuid: string ref +); + +mangled_name( + unique int id: @declaration ref, + int mangled_name : @mangledname +); + +is_pod_class(unique int id: @usertype ref); +is_standard_layout_class(unique int id: @usertype ref); + +is_complete(unique int id: @usertype ref); + +is_class_template(unique int id: @usertype ref); +class_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +class_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +class_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +is_proxy_class_for( + unique int id: @usertype ref, + unique int templ_param_id: @usertype ref +); + +type_mentions( + unique int id: @type_mention, + int type_id: @type ref, + int location: @location ref, + // a_symbol_reference_kind from the EDG frontend. See symbol_ref.h there. + int kind: int ref +); + +is_function_template(unique int id: @function ref); +function_instantiation( + unique int to: @function ref, + int from: @function ref +); +function_template_argument( + int function_id: @function ref, + int index: int ref, + int arg_type: @type ref +); +function_template_argument_value( + int function_id: @function ref, + int index: int ref, + int arg_value: @expr ref +); + +is_variable_template(unique int id: @variable ref); +variable_instantiation( + unique int to: @variable ref, + int from: @variable ref +); +variable_template_argument( + int variable_id: @variable ref, + int index: int ref, + int arg_type: @type ref +); +variable_template_argument_value( + int variable_id: @variable ref, + int index: int ref, + int arg_value: @expr ref +); + +/* + Fixed point types + precision(1) = short, precision(2) = default, precision(3) = long + is_unsigned(1) = unsigned is_unsigned(2) = signed + is_fract_type(1) = declared with _Fract + saturating(1) = declared with _Sat +*/ +/* TODO +fixedpointtypes( + unique int id: @fixedpointtype, + int precision: int ref, + int is_unsigned: int ref, + int is_fract_type: int ref, + int saturating: int ref); +*/ + +routinetypes( + unique int id: @routinetype, + int return_type: @type ref +); + +routinetypeargs( + int routine: @routinetype ref, + int index: int ref, + int type_id: @type ref +); + +ptrtomembers( + unique int id: @ptrtomember, + int type_id: @type ref, + int class_id: @type ref +); + +/* + specifiers for types, functions, and variables + + "public", + "protected", + "private", + + "const", + "volatile", + "static", + + "pure", + "virtual", + "sealed", // Microsoft + "__interface", // Microsoft + "inline", + "explicit", + + "near", // near far extension + "far", // near far extension + "__ptr32", // Microsoft + "__ptr64", // Microsoft + "__sptr", // Microsoft + "__uptr", // Microsoft + "dllimport", // Microsoft + "dllexport", // Microsoft + "thread", // Microsoft + "naked", // Microsoft + "microsoft_inline", // Microsoft + "forceinline", // Microsoft + "selectany", // Microsoft + "nothrow", // Microsoft + "novtable", // Microsoft + "noreturn", // Microsoft + "noinline", // Microsoft + "noalias", // Microsoft + "restrict", // Microsoft +*/ + +specifiers( + unique int id: @specifier, + unique string str: string ref +); + +typespecifiers( + int type_id: @type ref, + int spec_id: @specifier ref +); + +funspecifiers( + int func_id: @function ref, + int spec_id: @specifier ref +); + +varspecifiers( + int var_id: @accessible ref, + int spec_id: @specifier ref +); + +attributes( + unique int id: @attribute, + int kind: int ref, + string name: string ref, + string name_space: string ref, + int location: @location_default ref +); + +case @attribute.kind of + 0 = @gnuattribute +| 1 = @stdattribute +| 2 = @declspec +| 3 = @msattribute +| 4 = @alignas +// ... 5 @objc_propertyattribute deprecated +; + +attribute_args( + unique int id: @attribute_arg, + int kind: int ref, + int attribute: @attribute ref, + int index: int ref, + int location: @location_default ref +); + +case @attribute_arg.kind of + 0 = @attribute_arg_empty +| 1 = @attribute_arg_token +| 2 = @attribute_arg_constant +| 3 = @attribute_arg_type +; + +attribute_arg_value( + unique int arg: @attribute_arg ref, + string value: string ref +); +attribute_arg_type( + unique int arg: @attribute_arg ref, + int type_id: @type ref +); +attribute_arg_name( + unique int arg: @attribute_arg ref, + string name: string ref +); + +typeattributes( + int type_id: @type ref, + int spec_id: @attribute ref +); + +funcattributes( + int func_id: @function ref, + int spec_id: @attribute ref +); + +varattributes( + int var_id: @accessible ref, + int spec_id: @attribute ref +); + +stmtattributes( + int stmt_id: @stmt ref, + int spec_id: @attribute ref +); + +@type = @builtintype + | @derivedtype + | @usertype + /* TODO | @fixedpointtype */ + | @routinetype + | @ptrtomember + | @decltype; + +unspecifiedtype( + unique int type_id: @type ref, + int unspecified_type_id: @type ref +); + +member( + int parent: @type ref, + int index: int ref, + int child: @member ref +); + +@enclosingfunction_child = @usertype | @variable | @namespace + +enclosingfunction( + unique int child: @enclosingfunction_child ref, + int parent: @function ref +); + +derivations( + unique int derivation: @derivation, + int sub: @type ref, + int index: int ref, + int super: @type ref, + int location: @location_default ref +); + +derspecifiers( + int der_id: @derivation ref, + int spec_id: @specifier ref +); + +/** + * Contains the byte offset of the base class subobject within the derived + * class. Only holds for non-virtual base classes, but see table + * `virtual_base_offsets` for offsets of virtual base class subobjects. + */ +direct_base_offsets( + unique int der_id: @derivation ref, + int offset: int ref +); + +/** + * Contains the byte offset of the virtual base class subobject for class + * `super` within a most-derived object of class `sub`. `super` can be either a + * direct or indirect base class. + */ +#keyset[sub, super] +virtual_base_offsets( + int sub: @usertype ref, + int super: @usertype ref, + int offset: int ref +); + +frienddecls( + unique int id: @frienddecl, + int type_id: @type ref, + int decl_id: @declaration ref, + int location: @location_default ref +); + +@declaredtype = @usertype ; + +@declaration = @function + | @declaredtype + | @variable + | @enumconstant + | @frienddecl; + +@member = @membervariable + | @function + | @declaredtype + | @enumconstant; + +@locatable = @diagnostic + | @declaration + | @ppd_include + | @ppd_define + | @macroinvocation + /*| @funcall*/ + | @xmllocatable + | @attribute + | @attribute_arg; + +@namedscope = @namespace | @usertype; + +@element = @locatable + | @file + | @folder + | @specifier + | @type + | @expr + | @namespace + | @initialiser + | @stmt + | @derivation + | @comment + | @preprocdirect + | @fun_decl + | @var_decl + | @type_decl + | @namespace_decl + | @using + | @namequalifier + | @specialnamequalifyingelement + | @static_assert + | @type_mention + | @lambdacapture; + +@exprparent = @element; + +comments( + unique int id: @comment, + string contents: string ref, + int location: @location_default ref +); + +commentbinding( + int id: @comment ref, + int element: @element ref +); + +exprconv( + int converted: @expr ref, + unique int conversion: @expr ref +); + +compgenerated(unique int id: @element ref); + +/** + * `destructor_call` destructs the `i`'th entity that should be + * destructed following `element`. Note that entities should be + * destructed in reverse construction order, so for a given `element` + * these should be called from highest to lowest `i`. + */ +#keyset[element, destructor_call] +#keyset[element, i] +synthetic_destructor_call( + int element: @element ref, + int i: int ref, + int destructor_call: @routineexpr ref +); + +namespaces( + unique int id: @namespace, + string name: string ref +); + +namespace_inline( + unique int id: @namespace ref +); + +namespacembrs( + int parentid: @namespace ref, + unique int memberid: @namespacembr ref +); + +@namespacembr = @declaration | @namespace; + +exprparents( + int expr_id: @expr ref, + int child_index: int ref, + int parent_id: @exprparent ref +); + +expr_isload(unique int expr_id: @expr ref); + +@cast = @c_style_cast + | @const_cast + | @dynamic_cast + | @reinterpret_cast + | @static_cast + ; + +/* +case @conversion.kind of + 0 = @simple_conversion // a numeric conversion, qualification conversion, or a reinterpret_cast +| 1 = @bool_conversion // conversion to 'bool' +| 2 = @base_class_conversion // a derived-to-base conversion +| 3 = @derived_class_conversion // a base-to-derived conversion +| 4 = @pm_base_class_conversion // a derived-to-base conversion of a pointer to member +| 5 = @pm_derived_class_conversion // a base-to-derived conversion of a pointer to member +| 6 = @glvalue_adjust // an adjustment of the type of a glvalue +| 7 = @prvalue_adjust // an adjustment of the type of a prvalue +; +*/ +/** + * Describes the semantics represented by a cast expression. This is largely + * independent of the source syntax of the cast, so it is separate from the + * regular expression kind. + */ +conversionkinds( + unique int expr_id: @cast ref, + int kind: int ref +); + +@conversion = @cast + | @array_to_pointer + | @parexpr + | @reference_to + | @ref_indirect + | @temp_init + ; + +/* +case @funbindexpr.kind of + 0 = @normal_call // a normal call +| 1 = @virtual_call // a virtual call +| 2 = @adl_call // a call whose target is only found by ADL +; +*/ +iscall(unique int caller: @funbindexpr ref, int kind: int ref); + +numtemplatearguments( + unique int expr_id: @expr ref, + int num: int ref +); + +specialnamequalifyingelements( + unique int id: @specialnamequalifyingelement, + unique string name: string ref +); + +@namequalifiableelement = @expr | @namequalifier; +@namequalifyingelement = @namespace + | @specialnamequalifyingelement + | @usertype; + +namequalifiers( + unique int id: @namequalifier, + unique int qualifiableelement: @namequalifiableelement ref, + int qualifyingelement: @namequalifyingelement ref, + int location: @location_default ref +); + +varbind( + int expr: @varbindexpr ref, + int var: @accessible ref +); + +funbind( + int expr: @funbindexpr ref, + int fun: @function ref +); + +@any_new_expr = @new_expr + | @new_array_expr; + +@new_or_delete_expr = @any_new_expr + | @delete_expr + | @delete_array_expr; + +@prefix_crement_expr = @preincrexpr | @predecrexpr; + +@postfix_crement_expr = @postincrexpr | @postdecrexpr; + +@increment_expr = @preincrexpr | @postincrexpr; + +@decrement_expr = @predecrexpr | @postdecrexpr; + +@crement_expr = @increment_expr | @decrement_expr; + +@un_arith_op_expr = @arithnegexpr + | @unaryplusexpr + | @conjugation + | @realpartexpr + | @imagpartexpr + | @crement_expr + ; + +@un_bitwise_op_expr = @complementexpr; + +@un_log_op_expr = @notexpr; + +@un_op_expr = @address_of + | @indirect + | @un_arith_op_expr + | @un_bitwise_op_expr + | @builtinaddressof + | @vec_fill + | @un_log_op_expr + | @co_await + | @co_yield + ; + +@bin_log_op_expr = @andlogicalexpr | @orlogicalexpr; + +@cmp_op_expr = @eq_op_expr | @rel_op_expr; + +@eq_op_expr = @eqexpr | @neexpr; + +@rel_op_expr = @gtexpr + | @ltexpr + | @geexpr + | @leexpr + | @spaceshipexpr + ; + +@bin_bitwise_op_expr = @lshiftexpr + | @rshiftexpr + | @andexpr + | @orexpr + | @xorexpr + ; + +@p_arith_op_expr = @paddexpr + | @psubexpr + | @pdiffexpr + ; + +@bin_arith_op_expr = @addexpr + | @subexpr + | @mulexpr + | @divexpr + | @remexpr + | @jmulexpr + | @jdivexpr + | @fjaddexpr + | @jfaddexpr + | @fjsubexpr + | @jfsubexpr + | @minexpr + | @maxexpr + | @p_arith_op_expr + ; + +@bin_op_expr = @bin_arith_op_expr + | @bin_bitwise_op_expr + | @cmp_op_expr + | @bin_log_op_expr + ; + +@op_expr = @un_op_expr + | @bin_op_expr + | @assign_expr + | @conditionalexpr + ; + +@assign_arith_expr = @assignaddexpr + | @assignsubexpr + | @assignmulexpr + | @assigndivexpr + | @assignremexpr + ; + +@assign_bitwise_expr = @assignandexpr + | @assignorexpr + | @assignxorexpr + | @assignlshiftexpr + | @assignrshiftexpr + | @assignpaddexpr + | @assignpsubexpr + ; + +@assign_op_expr = @assign_arith_expr | @assign_bitwise_expr + +@assign_expr = @assignexpr | @assign_op_expr + +/* + case @allocator.form of + 0 = plain + | 1 = alignment + ; +*/ + +/** + * The allocator function associated with a `new` or `new[]` expression. + * The `form` column specified whether the allocation call contains an alignment + * argument. + */ +expr_allocator( + unique int expr: @any_new_expr ref, + int func: @function ref, + int form: int ref +); + +/* + case @deallocator.form of + 0 = plain + | 1 = size + | 2 = alignment + | 3 = size_and_alignment + ; +*/ + +/** + * The deallocator function associated with a `delete`, `delete[]`, `new`, or + * `new[]` expression. For a `new` or `new[]` expression, the deallocator is the + * one used to free memory if the initialization throws an exception. + * The `form` column specifies whether the deallocation call contains a size + * argument, and alignment argument, or both. + */ +expr_deallocator( + unique int expr: @new_or_delete_expr ref, + int func: @function ref, + int form: int ref +); + +/** + * Holds if the `@conditionalexpr` is of the two operand form + * `guard ? : false`. + */ +expr_cond_two_operand( + unique int cond: @conditionalexpr ref +); + +/** + * The guard of `@conditionalexpr` `guard ? true : false` + */ +expr_cond_guard( + unique int cond: @conditionalexpr ref, + int guard: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` holds. For the two operand form + * `guard ?: false` consider using `expr_cond_guard` instead. + */ +expr_cond_true( + unique int cond: @conditionalexpr ref, + int true: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` does not hold. + */ +expr_cond_false( + unique int cond: @conditionalexpr ref, + int false: @expr ref +); + +/** A string representation of the value. */ +values( + unique int id: @value, + string str: string ref +); + +/** The actual text in the source code for the value, if any. */ +valuetext( + unique int id: @value ref, + string text: string ref +); + +valuebind( + int val: @value ref, + unique int expr: @expr ref +); + +fieldoffsets( + unique int id: @variable ref, + int byteoffset: int ref, + int bitoffset: int ref +); + +bitfield( + unique int id: @variable ref, + int bits: int ref, + int declared_bits: int ref +); + +/* TODO +memberprefix( + int member: @expr ref, + int prefix: @expr ref +); +*/ + +/* + kind(1) = mbrcallexpr + kind(2) = mbrptrcallexpr + kind(3) = mbrptrmbrcallexpr + kind(4) = ptrmbrptrmbrcallexpr + kind(5) = mbrreadexpr // x.y + kind(6) = mbrptrreadexpr // p->y + kind(7) = mbrptrmbrreadexpr // x.*pm + kind(8) = mbrptrmbrptrreadexpr // x->*pm + kind(9) = staticmbrreadexpr // static x.y + kind(10) = staticmbrptrreadexpr // static p->y +*/ +/* TODO +memberaccess( + int member: @expr ref, + int kind: int ref +); +*/ + +initialisers( + unique int init: @initialiser, + int var: @accessible ref, + unique int expr: @expr ref, + int location: @location_expr ref +); + +/** + * An ancestor for the expression, for cases in which we cannot + * otherwise find the expression's parent. + */ +expr_ancestor( + int exp: @expr ref, + int ancestor: @element ref +); + +exprs( + unique int id: @expr, + int kind: int ref, + int location: @location_expr ref +); + +/* + case @value.category of + 1 = prval + | 2 = xval + | 3 = lval + ; +*/ +expr_types( + int id: @expr ref, + int typeid: @type ref, + int value_category: int ref +); + +case @expr.kind of + 1 = @errorexpr +| 2 = @address_of // & AddressOfExpr +| 3 = @reference_to // ReferenceToExpr (implicit?) +| 4 = @indirect // * PointerDereferenceExpr +| 5 = @ref_indirect // ReferenceDereferenceExpr (implicit?) +// ... +| 8 = @array_to_pointer // (???) +| 9 = @vacuous_destructor_call // VacuousDestructorCall +// ... +| 11 = @assume // Microsoft +| 12 = @parexpr +| 13 = @arithnegexpr +| 14 = @unaryplusexpr +| 15 = @complementexpr +| 16 = @notexpr +| 17 = @conjugation // GNU ~ operator +| 18 = @realpartexpr // GNU __real +| 19 = @imagpartexpr // GNU __imag +| 20 = @postincrexpr +| 21 = @postdecrexpr +| 22 = @preincrexpr +| 23 = @predecrexpr +| 24 = @conditionalexpr +| 25 = @addexpr +| 26 = @subexpr +| 27 = @mulexpr +| 28 = @divexpr +| 29 = @remexpr +| 30 = @jmulexpr // C99 mul imaginary +| 31 = @jdivexpr // C99 div imaginary +| 32 = @fjaddexpr // C99 add real + imaginary +| 33 = @jfaddexpr // C99 add imaginary + real +| 34 = @fjsubexpr // C99 sub real - imaginary +| 35 = @jfsubexpr // C99 sub imaginary - real +| 36 = @paddexpr // pointer add (pointer + int or int + pointer) +| 37 = @psubexpr // pointer sub (pointer - integer) +| 38 = @pdiffexpr // difference between two pointers +| 39 = @lshiftexpr +| 40 = @rshiftexpr +| 41 = @andexpr +| 42 = @orexpr +| 43 = @xorexpr +| 44 = @eqexpr +| 45 = @neexpr +| 46 = @gtexpr +| 47 = @ltexpr +| 48 = @geexpr +| 49 = @leexpr +| 50 = @minexpr // GNU minimum +| 51 = @maxexpr // GNU maximum +| 52 = @assignexpr +| 53 = @assignaddexpr +| 54 = @assignsubexpr +| 55 = @assignmulexpr +| 56 = @assigndivexpr +| 57 = @assignremexpr +| 58 = @assignlshiftexpr +| 59 = @assignrshiftexpr +| 60 = @assignandexpr +| 61 = @assignorexpr +| 62 = @assignxorexpr +| 63 = @assignpaddexpr // assign pointer add +| 64 = @assignpsubexpr // assign pointer sub +| 65 = @andlogicalexpr +| 66 = @orlogicalexpr +| 67 = @commaexpr +| 68 = @subscriptexpr // access to member of an array, e.g., a[5] +// ... 69 @objc_subscriptexpr deprecated +// ... 70 @cmdaccess deprecated +// ... +| 73 = @virtfunptrexpr +| 74 = @callexpr +// ... 75 @msgexpr_normal deprecated +// ... 76 @msgexpr_super deprecated +// ... 77 @atselectorexpr deprecated +// ... 78 @atprotocolexpr deprecated +| 79 = @vastartexpr +| 80 = @vaargexpr +| 81 = @vaendexpr +| 82 = @vacopyexpr +// ... 83 @atencodeexpr deprecated +| 84 = @varaccess +| 85 = @thisaccess +// ... 86 @objc_box_expr deprecated +| 87 = @new_expr +| 88 = @delete_expr +| 89 = @throw_expr +| 90 = @condition_decl // a variable declared in a condition, e.g., if(int x = y > 2) +| 91 = @braced_init_list +| 92 = @type_id +| 93 = @runtime_sizeof +| 94 = @runtime_alignof +| 95 = @sizeof_pack +| 96 = @expr_stmt // GNU extension +| 97 = @routineexpr +| 98 = @type_operand // used to access a type in certain contexts (haven't found any examples yet....) +| 99 = @offsetofexpr // offsetof ::= type and field +| 100 = @hasassignexpr // __has_assign ::= type +| 101 = @hascopyexpr // __has_copy ::= type +| 102 = @hasnothrowassign // __has_nothrow_assign ::= type +| 103 = @hasnothrowconstr // __has_nothrow_constructor ::= type +| 104 = @hasnothrowcopy // __has_nothrow_copy ::= type +| 105 = @hastrivialassign // __has_trivial_assign ::= type +| 106 = @hastrivialconstr // __has_trivial_constructor ::= type +| 107 = @hastrivialcopy // __has_trivial_copy ::= type +| 108 = @hasuserdestr // __has_user_destructor ::= type +| 109 = @hasvirtualdestr // __has_virtual_destructor ::= type +| 110 = @isabstractexpr // __is_abstract ::= type +| 111 = @isbaseofexpr // __is_base_of ::= type type +| 112 = @isclassexpr // __is_class ::= type +| 113 = @isconvtoexpr // __is_convertible_to ::= type type +| 114 = @isemptyexpr // __is_empty ::= type +| 115 = @isenumexpr // __is_enum ::= type +| 116 = @ispodexpr // __is_pod ::= type +| 117 = @ispolyexpr // __is_polymorphic ::= type +| 118 = @isunionexpr // __is_union ::= type +| 119 = @typescompexpr // GNU __builtin_types_compatible ::= type type +| 120 = @intaddrexpr // EDG internal builtin, used to implement offsetof +// ... +| 122 = @hastrivialdestructor // __has_trivial_destructor ::= type +| 123 = @literal +| 124 = @uuidof +| 127 = @aggregateliteral +| 128 = @delete_array_expr +| 129 = @new_array_expr +// ... 130 @objc_array_literal deprecated +// ... 131 @objc_dictionary_literal deprecated +| 132 = @foldexpr +// ... +| 200 = @ctordirectinit +| 201 = @ctorvirtualinit +| 202 = @ctorfieldinit +| 203 = @ctordelegatinginit +| 204 = @dtordirectdestruct +| 205 = @dtorvirtualdestruct +| 206 = @dtorfielddestruct +// ... +| 210 = @static_cast +| 211 = @reinterpret_cast +| 212 = @const_cast +| 213 = @dynamic_cast +| 214 = @c_style_cast +| 215 = @lambdaexpr +| 216 = @param_ref +| 217 = @noopexpr +// ... +| 294 = @istriviallyconstructibleexpr +| 295 = @isdestructibleexpr +| 296 = @isnothrowdestructibleexpr +| 297 = @istriviallydestructibleexpr +| 298 = @istriviallyassignableexpr +| 299 = @isnothrowassignableexpr +| 300 = @istrivialexpr +| 301 = @isstandardlayoutexpr +| 302 = @istriviallycopyableexpr +| 303 = @isliteraltypeexpr +| 304 = @hastrivialmoveconstructorexpr +| 305 = @hastrivialmoveassignexpr +| 306 = @hasnothrowmoveassignexpr +| 307 = @isconstructibleexpr +| 308 = @isnothrowconstructibleexpr +| 309 = @hasfinalizerexpr +| 310 = @isdelegateexpr +| 311 = @isinterfaceclassexpr +| 312 = @isrefarrayexpr +| 313 = @isrefclassexpr +| 314 = @issealedexpr +| 315 = @issimplevalueclassexpr +| 316 = @isvalueclassexpr +| 317 = @isfinalexpr +| 319 = @noexceptexpr +| 320 = @builtinshufflevector +| 321 = @builtinchooseexpr +| 322 = @builtinaddressof +| 323 = @vec_fill +| 324 = @builtinconvertvector +| 325 = @builtincomplex +| 326 = @spaceshipexpr +| 327 = @co_await +| 328 = @co_yield +| 329 = @temp_init +; + +@var_args_expr = @vastartexpr + | @vaendexpr + | @vaargexpr + | @vacopyexpr + ; + +@builtin_op = @var_args_expr + | @noopexpr + | @offsetofexpr + | @intaddrexpr + | @hasassignexpr + | @hascopyexpr + | @hasnothrowassign + | @hasnothrowconstr + | @hasnothrowcopy + | @hastrivialassign + | @hastrivialconstr + | @hastrivialcopy + | @hastrivialdestructor + | @hasuserdestr + | @hasvirtualdestr + | @isabstractexpr + | @isbaseofexpr + | @isclassexpr + | @isconvtoexpr + | @isemptyexpr + | @isenumexpr + | @ispodexpr + | @ispolyexpr + | @isunionexpr + | @typescompexpr + | @builtinshufflevector + | @builtinconvertvector + | @builtinaddressof + | @istriviallyconstructibleexpr + | @isdestructibleexpr + | @isnothrowdestructibleexpr + | @istriviallydestructibleexpr + | @istriviallyassignableexpr + | @isnothrowassignableexpr + | @isstandardlayoutexpr + | @istriviallycopyableexpr + | @isliteraltypeexpr + | @hastrivialmoveconstructorexpr + | @hastrivialmoveassignexpr + | @hasnothrowmoveassignexpr + | @isconstructibleexpr + | @isnothrowconstructibleexpr + | @hasfinalizerexpr + | @isdelegateexpr + | @isinterfaceclassexpr + | @isrefarrayexpr + | @isrefclassexpr + | @issealedexpr + | @issimplevalueclassexpr + | @isvalueclassexpr + | @isfinalexpr + | @builtinchooseexpr + | @builtincomplex + ; + +new_allocated_type( + unique int expr: @new_expr ref, + int type_id: @type ref +); + +new_array_allocated_type( + unique int expr: @new_array_expr ref, + int type_id: @type ref +); + +/** + * The field being initialized by an initializer expression within an aggregate + * initializer for a class/struct/union. + */ +#keyset[aggregate, field] +aggregate_field_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int field: @membervariable ref +); + +/** + * The index of the element being initialized by an initializer expression + * within an aggregate initializer for an array. + */ +#keyset[aggregate, element_index] +aggregate_array_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int element_index: int ref +); + +@ctorinit = @ctordirectinit + | @ctorvirtualinit + | @ctorfieldinit + | @ctordelegatinginit; +@dtordestruct = @dtordirectdestruct + | @dtorvirtualdestruct + | @dtorfielddestruct; + + +condition_decl_bind( + unique int expr: @condition_decl ref, + unique int decl: @declaration ref +); + +typeid_bind( + unique int expr: @type_id ref, + int type_id: @type ref +); + +uuidof_bind( + unique int expr: @uuidof ref, + int type_id: @type ref +); + +@runtime_sizeof_or_alignof = @runtime_sizeof | @runtime_alignof; + +sizeof_bind( + unique int expr: @runtime_sizeof_or_alignof ref, + int type_id: @type ref +); + +code_block( + unique int block: @literal ref, + unique int routine: @function ref +); + +lambdas( + unique int expr: @lambdaexpr ref, + string default_capture: string ref, + boolean has_explicit_return_type: boolean ref +); + +lambda_capture( + unique int id: @lambdacapture, + int lambda: @lambdaexpr ref, + int index: int ref, + int field: @membervariable ref, + boolean captured_by_reference: boolean ref, + boolean is_implicit: boolean ref, + int location: @location_default ref +); + +@funbindexpr = @routineexpr + | @new_expr + | @delete_expr + | @delete_array_expr + | @ctordirectinit + | @ctorvirtualinit + | @ctordelegatinginit + | @dtordirectdestruct + | @dtorvirtualdestruct; + +@varbindexpr = @varaccess | @ctorfieldinit | @dtorfielddestruct; +@addressable = @function | @variable ; +@accessible = @addressable | @enumconstant ; + +@access = @varaccess | @routineexpr ; + +fold( + int expr: @foldexpr ref, + string operator: string ref, + boolean is_left_fold: boolean ref +); + +stmts( + unique int id: @stmt, + int kind: int ref, + int location: @location_stmt ref +); + +case @stmt.kind of + 1 = @stmt_expr +| 2 = @stmt_if +| 3 = @stmt_while +| 4 = @stmt_goto +| 5 = @stmt_label +| 6 = @stmt_return +| 7 = @stmt_block +| 8 = @stmt_end_test_while // do { ... } while ( ... ) +| 9 = @stmt_for +| 10 = @stmt_switch_case +| 11 = @stmt_switch +| 13 = @stmt_asm // "asm" statement or the body of an asm function +| 15 = @stmt_try_block +| 16 = @stmt_microsoft_try // Microsoft +| 17 = @stmt_decl +| 18 = @stmt_set_vla_size // C99 +| 19 = @stmt_vla_decl // C99 +| 25 = @stmt_assigned_goto // GNU +| 26 = @stmt_empty +| 27 = @stmt_continue +| 28 = @stmt_break +| 29 = @stmt_range_based_for // C++11 +// ... 30 @stmt_at_autoreleasepool_block deprecated +// ... 31 @stmt_objc_for_in deprecated +// ... 32 @stmt_at_synchronized deprecated +| 33 = @stmt_handler +// ... 34 @stmt_finally_end deprecated +| 35 = @stmt_constexpr_if +| 37 = @stmt_co_return +; + +type_vla( + int type_id: @type ref, + int decl: @stmt_vla_decl ref +); + +variable_vla( + int var: @variable ref, + int decl: @stmt_vla_decl ref +); + +if_then( + unique int if_stmt: @stmt_if ref, + int then_id: @stmt ref +); + +if_else( + unique int if_stmt: @stmt_if ref, + int else_id: @stmt ref +); + +constexpr_if_then( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int then_id: @stmt ref +); + +constexpr_if_else( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int else_id: @stmt ref +); + +while_body( + unique int while_stmt: @stmt_while ref, + int body_id: @stmt ref +); + +do_body( + unique int do_stmt: @stmt_end_test_while ref, + int body_id: @stmt ref +); + +#keyset[switch_stmt, index] +switch_case( + int switch_stmt: @stmt_switch ref, + int index: int ref, + int case_id: @stmt_switch_case ref +); + +switch_body( + unique int switch_stmt: @stmt_switch ref, + int body_id: @stmt ref +); + +for_initialization( + unique int for_stmt: @stmt_for ref, + int init_id: @stmt ref +); + +for_condition( + unique int for_stmt: @stmt_for ref, + int condition_id: @expr ref +); + +for_update( + unique int for_stmt: @stmt_for ref, + int update_id: @expr ref +); + +for_body( + unique int for_stmt: @stmt_for ref, + int body_id: @stmt ref +); + +@stmtparent = @stmt | @expr_stmt ; +stmtparents( + unique int id: @stmt ref, + int index: int ref, + int parent: @stmtparent ref +); + +ishandler(unique int block: @stmt_block ref); + +@cfgnode = @stmt | @expr | @function | @initialiser ; + +stmt_decl_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl: @declaration ref +); + +stmt_decl_entry_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl_entry: @element ref +); + +@functionorblock = @function | @stmt_block; + +blockscope( + unique int block: @stmt_block ref, + int enclosing: @functionorblock ref +); + +@jump = @stmt_goto | @stmt_break | @stmt_continue; + +@jumporlabel = @jump | @stmt_label | @literal; + +jumpinfo( + unique int id: @jumporlabel ref, + string str: string ref, + int target: @stmt ref +); + +preprocdirects( + unique int id: @preprocdirect, + int kind: int ref, + int location: @location_default ref +); +case @preprocdirect.kind of + 0 = @ppd_if +| 1 = @ppd_ifdef +| 2 = @ppd_ifndef +| 3 = @ppd_elif +| 4 = @ppd_else +| 5 = @ppd_endif +| 6 = @ppd_plain_include +| 7 = @ppd_define +| 8 = @ppd_undef +| 9 = @ppd_line +| 10 = @ppd_error +| 11 = @ppd_pragma +| 12 = @ppd_objc_import +| 13 = @ppd_include_next +| 18 = @ppd_warning +; + +@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next; + +@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif; + +preprocpair( + int begin : @ppd_branch ref, + int elseelifend : @preprocdirect ref +); + +preproctrue(int branch : @ppd_branch ref); +preprocfalse(int branch : @ppd_branch ref); + +preproctext( + unique int id: @preprocdirect ref, + string head: string ref, + string body: string ref +); + +includes( + unique int id: @ppd_include ref, + int included: @file ref +); + +link_targets( + unique int id: @link_target, + int binary: @file ref +); + +link_parent( + int element : @element ref, + int link_target : @link_target ref +); + +/* XML Files */ + +xmlEncoding(unique int id: @file ref, string encoding: string ref); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref +); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref +); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref +); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref +); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref +); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref +); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref +); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref +); + +@xmllocatable = @xmlcharacters + | @xmlelement + | @xmlcomment + | @xmlattribute + | @xmldtd + | @file + | @xmlnamespace; diff --git a/cpp/upgrades/ddd31fd02e51ad270bc9e6712708e5a5b6881518/upgrade.properties b/cpp/upgrades/ddd31fd02e51ad270bc9e6712708e5a5b6881518/upgrade.properties new file mode 100644 index 00000000000..a0c4ba602a1 --- /dev/null +++ b/cpp/upgrades/ddd31fd02e51ad270bc9e6712708e5a5b6881518/upgrade.properties @@ -0,0 +1,4 @@ +description: Removed unused column from the `folders` and `files` relations +compatibility: full +files.rel: reorder files.rel (int id, string name, string simple, string ext, int fromSource) id name +folders.rel: reorder folders.rel (int id, string name, string simple) id name \ No newline at end of file From a484e9fb06898dd5ce3eea065d4210c682f07471 Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Thu, 2 Sep 2021 13:52:42 +0200 Subject: [PATCH 369/741] Use RemoteFlowSource instead of UserInput --- java/ql/src/Security/CWE/CWE-807/ConditionalBypass.ql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/ql/src/Security/CWE/CWE-807/ConditionalBypass.ql b/java/ql/src/Security/CWE/CWE-807/ConditionalBypass.ql index 0dca7acd64d..0294c39bdee 100644 --- a/java/ql/src/Security/CWE/CWE-807/ConditionalBypass.ql +++ b/java/ql/src/Security/CWE/CWE-807/ConditionalBypass.ql @@ -35,7 +35,7 @@ predicate conditionControlsMethod(MethodAccess m, Expr e) { class ConditionalBypassFlowConfig extends TaintTracking::Configuration { ConditionalBypassFlowConfig() { this = "ConditionalBypassFlowConfig" } - override predicate isSource(DataFlow::Node source) { source instanceof UserInput } + override predicate isSource(DataFlow::Node source) { source instanceof RemoteFlowSource } override predicate isSink(DataFlow::Node sink) { conditionControlsMethod(_, sink.asExpr()) } } From 1f7990d6bbb220c718465be537b16b615fb298f4 Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Thu, 2 Sep 2021 13:53:35 +0200 Subject: [PATCH 370/741] Refactor to use ConditionalBypassQuery.qll --- .../java/security/ConditionalBypassQuery.qll | 32 +++++++++++++++++++ .../Security/CWE/CWE-807/ConditionalBypass.ql | 27 ++-------------- 2 files changed, 34 insertions(+), 25 deletions(-) create mode 100644 java/ql/lib/semmle/code/java/security/ConditionalBypassQuery.qll diff --git a/java/ql/lib/semmle/code/java/security/ConditionalBypassQuery.qll b/java/ql/lib/semmle/code/java/security/ConditionalBypassQuery.qll new file mode 100644 index 00000000000..7f6902f220c --- /dev/null +++ b/java/ql/lib/semmle/code/java/security/ConditionalBypassQuery.qll @@ -0,0 +1,32 @@ +/** + * Provides classes to be used in queries related to vulnerabilities + * about unstrusted input being used in security decisions. + */ + +import java +import semmle.code.java.dataflow.FlowSources +import semmle.code.java.security.SensitiveActions +import semmle.code.java.controlflow.Guards + +/** + * Holds if `ma` is controlled by the condition expression `e`. + */ +predicate conditionControlsMethod(MethodAccess ma, Expr e) { + exists(ConditionBlock cb, SensitiveExecutionMethod m, boolean cond | + ma.getMethod() = m and + cb.controls(ma.getBasicBlock(), cond) and + not cb.controls(m.getAReference().getBasicBlock(), cond.booleanNot()) and + e = cb.getCondition() + ) +} + +/** + * A taint tracking configuration for untrusted data flowing to sensitive conditions. + */ +class ConditionalBypassFlowConfig extends TaintTracking::Configuration { + ConditionalBypassFlowConfig() { this = "ConditionalBypassFlowConfig" } + + override predicate isSource(DataFlow::Node source) { source instanceof RemoteFlowSource } + + override predicate isSink(DataFlow::Node sink) { conditionControlsMethod(_, sink.asExpr()) } +} diff --git a/java/ql/src/Security/CWE/CWE-807/ConditionalBypass.ql b/java/ql/src/Security/CWE/CWE-807/ConditionalBypass.ql index 0294c39bdee..a12feeff766 100644 --- a/java/ql/src/Security/CWE/CWE-807/ConditionalBypass.ql +++ b/java/ql/src/Security/CWE/CWE-807/ConditionalBypass.ql @@ -13,33 +13,10 @@ */ import java -import semmle.code.java.dataflow.FlowSources -import semmle.code.java.security.SensitiveActions -import semmle.code.java.controlflow.Dominance -import semmle.code.java.controlflow.Guards +import semmle.code.java.dataflow.DataFlow +import semmle.code.java.security.ConditionalBypassQuery import DataFlow::PathGraph -/** - * Calls to a sensitive method that are controlled by a condition - * on the given expression. - */ -predicate conditionControlsMethod(MethodAccess m, Expr e) { - exists(ConditionBlock cb, SensitiveExecutionMethod def, boolean cond | - cb.controls(m.getBasicBlock(), cond) and - def = m.getMethod() and - not cb.controls(def.getAReference().getBasicBlock(), cond.booleanNot()) and - e = cb.getCondition() - ) -} - -class ConditionalBypassFlowConfig extends TaintTracking::Configuration { - ConditionalBypassFlowConfig() { this = "ConditionalBypassFlowConfig" } - - override predicate isSource(DataFlow::Node source) { source instanceof RemoteFlowSource } - - override predicate isSink(DataFlow::Node sink) { conditionControlsMethod(_, sink.asExpr()) } -} - from DataFlow::PathNode source, DataFlow::PathNode sink, MethodAccess m, Expr e, ConditionalBypassFlowConfig conf From f8d1e2ac117fe8d5e39a95b341daa4734cb56253 Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Thu, 2 Sep 2021 13:54:11 +0200 Subject: [PATCH 371/741] Refactor tests to use InlineExpectationsTest --- .../semmle/tests/ConditionalBypass.expected | 25 ------- .../semmle/tests/ConditionalBypass.qlref | 1 - .../tests/ConditionalBypassTest.expected | 0 .../{Test.java => ConditionalBypassTest.java} | 73 ++++++++----------- .../semmle/tests/ConditionalBypassTest.ql | 20 +++++ .../tests/TaintedPermissionsCheck.expected | 9 +-- .../tests/TaintedPermissionsCheckTest.java | 25 +++++++ 7 files changed, 79 insertions(+), 74 deletions(-) delete mode 100644 java/ql/test/query-tests/security/CWE-807/semmle/tests/ConditionalBypass.expected delete mode 100644 java/ql/test/query-tests/security/CWE-807/semmle/tests/ConditionalBypass.qlref create mode 100644 java/ql/test/query-tests/security/CWE-807/semmle/tests/ConditionalBypassTest.expected rename java/ql/test/query-tests/security/CWE-807/semmle/tests/{Test.java => ConditionalBypassTest.java} (74%) create mode 100644 java/ql/test/query-tests/security/CWE-807/semmle/tests/ConditionalBypassTest.ql create mode 100644 java/ql/test/query-tests/security/CWE-807/semmle/tests/TaintedPermissionsCheckTest.java diff --git a/java/ql/test/query-tests/security/CWE-807/semmle/tests/ConditionalBypass.expected b/java/ql/test/query-tests/security/CWE-807/semmle/tests/ConditionalBypass.expected deleted file mode 100644 index 1275f03033a..00000000000 --- a/java/ql/test/query-tests/security/CWE-807/semmle/tests/ConditionalBypass.expected +++ /dev/null @@ -1,25 +0,0 @@ -edges -| Test.java:17:26:17:38 | args : String[] | Test.java:25:6:25:21 | ... == ... | -| Test.java:31:6:31:27 | getValue(...) : String | Test.java:31:6:31:43 | equals(...) | -| Test.java:36:6:36:27 | getValue(...) : String | Test.java:36:6:36:36 | ... == ... | -| Test.java:81:6:81:27 | getValue(...) : String | Test.java:81:6:81:36 | ... == ... | -| Test.java:91:6:91:27 | getValue(...) : String | Test.java:91:6:91:36 | ... == ... | -nodes -| Test.java:17:26:17:38 | args : String[] | semmle.label | args : String[] | -| Test.java:25:6:25:21 | ... == ... | semmle.label | ... == ... | -| Test.java:31:6:31:27 | getValue(...) : String | semmle.label | getValue(...) : String | -| Test.java:31:6:31:43 | equals(...) | semmle.label | equals(...) | -| Test.java:36:6:36:27 | getValue(...) : String | semmle.label | getValue(...) : String | -| Test.java:36:6:36:36 | ... == ... | semmle.label | ... == ... | -| Test.java:81:6:81:27 | getValue(...) : String | semmle.label | getValue(...) : String | -| Test.java:81:6:81:36 | ... == ... | semmle.label | ... == ... | -| Test.java:91:6:91:27 | getValue(...) : String | semmle.label | getValue(...) : String | -| Test.java:91:6:91:36 | ... == ... | semmle.label | ... == ... | -subpaths -#select -| Test.java:26:4:26:24 | login(...) | Test.java:17:26:17:38 | args : String[] | Test.java:25:6:25:21 | ... == ... | Sensitive method may not be executed depending on $@, which flows from $@. | Test.java:25:6:25:21 | ... == ... | this condition | Test.java:17:26:17:38 | args | user input | -| Test.java:32:4:32:24 | login(...) | Test.java:31:6:31:27 | getValue(...) : String | Test.java:31:6:31:43 | equals(...) | Sensitive method may not be executed depending on $@, which flows from $@. | Test.java:31:6:31:43 | equals(...) | this condition | Test.java:31:6:31:27 | getValue(...) | user input | -| Test.java:37:4:37:24 | login(...) | Test.java:36:6:36:27 | getValue(...) : String | Test.java:36:6:36:36 | ... == ... | Sensitive method may not be executed depending on $@, which flows from $@. | Test.java:36:6:36:36 | ... == ... | this condition | Test.java:36:6:36:27 | getValue(...) | user input | -| Test.java:39:4:39:30 | reCheckAuth(...) | Test.java:36:6:36:27 | getValue(...) : String | Test.java:36:6:36:36 | ... == ... | Sensitive method may not be executed depending on $@, which flows from $@. | Test.java:36:6:36:36 | ... == ... | this condition | Test.java:36:6:36:27 | getValue(...) | user input | -| Test.java:82:4:82:24 | login(...) | Test.java:81:6:81:27 | getValue(...) : String | Test.java:81:6:81:36 | ... == ... | Sensitive method may not be executed depending on $@, which flows from $@. | Test.java:81:6:81:36 | ... == ... | this condition | Test.java:81:6:81:27 | getValue(...) | user input | -| Test.java:92:4:92:24 | login(...) | Test.java:91:6:91:27 | getValue(...) : String | Test.java:91:6:91:36 | ... == ... | Sensitive method may not be executed depending on $@, which flows from $@. | Test.java:91:6:91:36 | ... == ... | this condition | Test.java:91:6:91:27 | getValue(...) | user input | diff --git a/java/ql/test/query-tests/security/CWE-807/semmle/tests/ConditionalBypass.qlref b/java/ql/test/query-tests/security/CWE-807/semmle/tests/ConditionalBypass.qlref deleted file mode 100644 index 82d29b30b17..00000000000 --- a/java/ql/test/query-tests/security/CWE-807/semmle/tests/ConditionalBypass.qlref +++ /dev/null @@ -1 +0,0 @@ -Security/CWE/CWE-807/ConditionalBypass.ql \ No newline at end of file diff --git a/java/ql/test/query-tests/security/CWE-807/semmle/tests/ConditionalBypassTest.expected b/java/ql/test/query-tests/security/CWE-807/semmle/tests/ConditionalBypassTest.expected new file mode 100644 index 00000000000..e69de29bb2d diff --git a/java/ql/test/query-tests/security/CWE-807/semmle/tests/Test.java b/java/ql/test/query-tests/security/CWE-807/semmle/tests/ConditionalBypassTest.java similarity index 74% rename from java/ql/test/query-tests/security/CWE-807/semmle/tests/Test.java rename to java/ql/test/query-tests/security/CWE-807/semmle/tests/ConditionalBypassTest.java index 5d9b8db623c..f9d21c933d2 100644 --- a/java/ql/test/query-tests/security/CWE-807/semmle/tests/Test.java +++ b/java/ql/test/query-tests/security/CWE-807/semmle/tests/ConditionalBypassTest.java @@ -2,58 +2,45 @@ // http://cwe.mitre.org/data/definitions/807.html package test.cwe807.semmle.tests; - - - import java.net.InetAddress; import java.net.Inet4Address; import java.net.UnknownHostException; import javax.servlet.http.Cookie; +import javax.servlet.http.HttpServletRequest; import org.apache.shiro.SecurityUtils; import org.apache.shiro.subject.Subject; -class Test { - public static void main(String[] args) throws UnknownHostException { - String user = args[0]; - String password = args[1]; - - String isAdmin = args[3]; - +class ConditionalBypassTest { + public static void main(HttpServletRequest request) throws Exception { + String user = request.getParameter("user"); + String password = request.getParameter("password"); + + String isAdmin = request.getParameter("isAdmin"); + // BAD: login is only executed if isAdmin is false, but isAdmin // is controlled by the user - if(isAdmin=="false") + if (isAdmin == "false") // $ hasConditionalBypassTest login(user, password); - + Cookie adminCookie = getCookies()[0]; // BAD: login is only executed if the cookie value is false, but the cookie // is controlled by the user - if(adminCookie.getValue().equals("false")) + if (adminCookie.getValue().equals("false")) // $ hasConditionalBypassTest login(user, password); - + // FALSE POSITIVES: both methods are conditionally executed, but they probably // both perform the security-critical action - if(adminCookie.getValue()=="false") { + if (adminCookie.getValue() == "false") { // $ SPURIOUS: $ hasConditionalBypassTest login(user, password); } else { reCheckAuth(user, password); } - + // FALSE NEGATIVE: we have no way of telling that the skipped method is sensitive - if(adminCookie.getValue()=="false") + if (adminCookie.getValue() == "false") // $ MISSING: $ hasConditionalBypassTest doReallyImportantSecurityWork(); - - // Apache Shiro permissions system - String whatDoTheyWantToDo = args[4]; - Subject subject = SecurityUtils.getSubject(); - // BAD: permissions decision made using tainted data - if(subject.isPermitted("domain:sublevel:" + whatDoTheyWantToDo)) - doIt(); - - // GOOD: use fixed checks - if(subject.isPermitted("domain:sublevel:whatTheMethodDoes")) - doIt(); - + InetAddress local = InetAddress.getLocalHost(); // GOOD: reverse DNS on localhost is fine if (local.getCanonicalHostName().equals("localhost")) { @@ -63,32 +50,32 @@ class Test { login(user, password); } } - + public static void test(String user, String password) { Cookie adminCookie = getCookies()[0]; // GOOD: login always happens - if(adminCookie.getValue()=="false") + if (adminCookie.getValue() == "false") login(user, password); else { // do something else login(user, password); } } - + public static void test2(String user, String password) { Cookie adminCookie = getCookies()[0]; // BAD: login may happen once or twice - if(adminCookie.getValue()=="false") + if (adminCookie.getValue() == "false") // $ hasConditionalBypassTest login(user, password); else { // do something else } login(user, password); } - + public static void test3(String user, String password) { Cookie adminCookie = getCookies()[0]; - if(adminCookie.getValue()=="false") + if (adminCookie.getValue() == "false") // $ hasConditionalBypassTest login(user, password); else { // do something else @@ -96,35 +83,35 @@ class Test { return; } } - + public static void test4(String user, String password) { Cookie adminCookie = getCookies()[0]; // GOOD: login always happens - if(adminCookie.getValue()=="false") { + if (adminCookie.getValue() == "false") { login(user, password); return; } - + // do other things login(user, password); return; } - + public static void login(String user, String password) { // login } - + public static void reCheckAuth(String user, String password) { // login } - + public static Cookie[] getCookies() { // get cookies from a servlet return new Cookie[0]; } - + public static void doIt() {} - + public static void doReallyImportantSecurityWork() { // login, authenticate, everything } diff --git a/java/ql/test/query-tests/security/CWE-807/semmle/tests/ConditionalBypassTest.ql b/java/ql/test/query-tests/security/CWE-807/semmle/tests/ConditionalBypassTest.ql new file mode 100644 index 00000000000..8fc8fe9b9af --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-807/semmle/tests/ConditionalBypassTest.ql @@ -0,0 +1,20 @@ +import java +import semmle.code.java.security.ConditionalBypassQuery +import TestUtilities.InlineExpectationsTest + +class ConditionalBypassTest extends InlineExpectationsTest { + ConditionalBypassTest() { this = "ConditionalBypassTest" } + + override string getARelevantTag() { result = "hasConditionalBypassTest" } + + override predicate hasActualResult(Location location, string element, string tag, string value) { + tag = "hasConditionalBypassTest" and + exists(DataFlow::Node src, DataFlow::Node sink, ConditionalBypassFlowConfig conf | + conf.hasFlow(src, sink) + | + sink.getLocation() = location and + element = sink.toString() and + value = "" + ) + } +} diff --git a/java/ql/test/query-tests/security/CWE-807/semmle/tests/TaintedPermissionsCheck.expected b/java/ql/test/query-tests/security/CWE-807/semmle/tests/TaintedPermissionsCheck.expected index 72c161165c4..134be8f88da 100644 --- a/java/ql/test/query-tests/security/CWE-807/semmle/tests/TaintedPermissionsCheck.expected +++ b/java/ql/test/query-tests/security/CWE-807/semmle/tests/TaintedPermissionsCheck.expected @@ -1,8 +1,7 @@ edges -| Test.java:17:26:17:38 | args : String[] | Test.java:50:26:50:64 | ... + ... | +| TaintedPermissionsCheckTest.java:12:19:12:48 | getParameter(...) : String | TaintedPermissionsCheckTest.java:15:27:15:53 | ... + ... | nodes -| Test.java:17:26:17:38 | args : String[] | semmle.label | args : String[] | -| Test.java:50:26:50:64 | ... + ... | semmle.label | ... + ... | -subpaths +| TaintedPermissionsCheckTest.java:12:19:12:48 | getParameter(...) : String | semmle.label | getParameter(...) : String | +| TaintedPermissionsCheckTest.java:15:27:15:53 | ... + ... | semmle.label | ... + ... | #select -| Test.java:50:6:50:65 | isPermitted(...) | Test.java:17:26:17:38 | args : String[] | Test.java:50:26:50:64 | ... + ... | Permissions check uses user-controlled $@. | Test.java:17:26:17:38 | args | data | +| TaintedPermissionsCheckTest.java:15:7:15:54 | isPermitted(...) | TaintedPermissionsCheckTest.java:12:19:12:48 | getParameter(...) : String | TaintedPermissionsCheckTest.java:15:27:15:53 | ... + ... | Permissions check uses user-controlled $@. | TaintedPermissionsCheckTest.java:12:19:12:48 | getParameter(...) | data | diff --git a/java/ql/test/query-tests/security/CWE-807/semmle/tests/TaintedPermissionsCheckTest.java b/java/ql/test/query-tests/security/CWE-807/semmle/tests/TaintedPermissionsCheckTest.java new file mode 100644 index 00000000000..622538b7e35 --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-807/semmle/tests/TaintedPermissionsCheckTest.java @@ -0,0 +1,25 @@ +// Test case for CWE-807 (Reliance on Untrusted Inputs in a Security Decision) +// http://cwe.mitre.org/data/definitions/807.html +package test.cwe807.semmle.tests; + +import javax.servlet.http.HttpServletRequest; +import org.apache.shiro.SecurityUtils; +import org.apache.shiro.subject.Subject; + +class TaintedPermissionsCheckTest { + public static void main(HttpServletRequest request) throws Exception { + // Apache Shiro permissions system + String action = request.getParameter("action"); + Subject subject = SecurityUtils.getSubject(); + // BAD: permissions decision made using tainted data + if (subject.isPermitted("domain:sublevel:" + action)) + doIt(); + + // GOOD: use fixed checks + if (subject.isPermitted("domain:sublevel:whatTheMethodDoes")) + doIt(); + } + + public static void doIt() {} + +} From 097927226b4f90b2cb57ccbe2eed6b56399a8474 Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Tue, 14 Sep 2021 12:26:40 +0200 Subject: [PATCH 372/741] Improved heuristics to increase precision --- .../java/security/ConditionalBypassQuery.qll | 5 ++++- .../code/java/security/SensitiveActions.qll | 17 ++++++----------- 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/java/ql/lib/semmle/code/java/security/ConditionalBypassQuery.qll b/java/ql/lib/semmle/code/java/security/ConditionalBypassQuery.qll index 7f6902f220c..1fbfea3454b 100644 --- a/java/ql/lib/semmle/code/java/security/ConditionalBypassQuery.qll +++ b/java/ql/lib/semmle/code/java/security/ConditionalBypassQuery.qll @@ -15,7 +15,10 @@ predicate conditionControlsMethod(MethodAccess ma, Expr e) { exists(ConditionBlock cb, SensitiveExecutionMethod m, boolean cond | ma.getMethod() = m and cb.controls(ma.getBasicBlock(), cond) and - not cb.controls(m.getAReference().getBasicBlock(), cond.booleanNot()) and + not cb.controls(any(SensitiveExecutionMethod sem).getAReference().getBasicBlock(), + cond.booleanNot()) and + not cb.controls(any(ThrowStmt t).getBasicBlock(), _) and + not cb.controls(any(ReturnStmt r).getBasicBlock(), _) and e = cb.getCondition() ) } diff --git a/java/ql/lib/semmle/code/java/security/SensitiveActions.qll b/java/ql/lib/semmle/code/java/security/SensitiveActions.qll index 88ae44b4556..8e8c9759d6e 100644 --- a/java/ql/lib/semmle/code/java/security/SensitiveActions.qll +++ b/java/ql/lib/semmle/code/java/security/SensitiveActions.qll @@ -80,17 +80,12 @@ abstract class SensitiveExecutionMethod extends Method { } class AuthMethod extends SensitiveExecutionMethod { AuthMethod() { exists(string s | s = this.getName().toLowerCase() | - ( - s.matches("%login%") or - s.matches("%auth%") - ) and - not ( - s.matches("get%") or - s.matches("set%") or - s.matches("parse%") or - s.matches("%loginfo%") - ) - ) + s.matches(["%login%", "%auth%"]) and + not s.matches([ + "get%", "set%", "parse%", "%loginfo%", "remove%", "clean%", "%unauth%", "%author%" + ]) + ) and + not this.getDeclaringType().getASupertype*() instanceof TypeException } } From b740cf9664a1bcf0fbb69df7c5b8fe6d7686490d Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Tue, 14 Sep 2021 13:15:18 +0200 Subject: [PATCH 373/741] Add change note --- java/change-notes/2021-09-14-conditional-bypass-improvements.md | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 java/change-notes/2021-09-14-conditional-bypass-improvements.md diff --git a/java/change-notes/2021-09-14-conditional-bypass-improvements.md b/java/change-notes/2021-09-14-conditional-bypass-improvements.md new file mode 100644 index 00000000000..86dc5d3b68f --- /dev/null +++ b/java/change-notes/2021-09-14-conditional-bypass-improvements.md @@ -0,0 +1,2 @@ +lgtm,codescanning +* The query `java/user-controlled-bypass` has been improved to reduce its execution time and false positive ratio. Less but more precise results should be found now, and the query should run significatively faster. From e439b7d7f81e7dcd08211dd161148eab269a3aad Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Tue, 14 Sep 2021 12:24:27 +0100 Subject: [PATCH 374/741] Remove resource-related sources These access application-owned resources AFAICT --- .../lib/semmle/code/java/frameworks/javaee/jsf/JSFRenderer.qll | 3 --- 1 file changed, 3 deletions(-) diff --git a/java/ql/lib/semmle/code/java/frameworks/javaee/jsf/JSFRenderer.qll b/java/ql/lib/semmle/code/java/frameworks/javaee/jsf/JSFRenderer.qll index 44042889f81..5703cde79ed 100644 --- a/java/ql/lib/semmle/code/java/frameworks/javaee/jsf/JSFRenderer.qll +++ b/java/ql/lib/semmle/code/java/frameworks/javaee/jsf/JSFRenderer.qll @@ -21,9 +21,6 @@ private class ExternalContextSource extends SourceModelCsv { "faces.context;ExternalContext;true;getRequestParameterNames;();;ReturnValue;remote", "faces.context;ExternalContext;true;getRequestParameterValuesMap;();;ReturnValue;remote", "faces.context;ExternalContext;true;getRequestPathInfo;();;ReturnValue;remote", - "faces.context;ExternalContext;true;getResource;(String);;ReturnValue;remote", - "faces.context;ExternalContext;true;getResourceAsStream;(String);;ReturnValue;remote", - "faces.context;ExternalContext;true;getResourcePaths;(String);;ReturnValue;remote", "faces.context;ExternalContext;true;getRequestCookieMap;();;ReturnValue;remote", "faces.context;ExternalContext;true;getRequestHeaderMap;();;ReturnValue;remote", "faces.context;ExternalContext;true;getRequestHeaderValuesMap;();;ReturnValue;remote" From fcc0f1d5a796af05fd0fb7e9fa647319591c51c3 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Tue, 14 Sep 2021 12:27:33 +0100 Subject: [PATCH 375/741] Expand test to exercise all sinks --- .../security/CWE-079/semmle/tests/JsfXSS.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/java/ql/test/query-tests/security/CWE-079/semmle/tests/JsfXSS.java b/java/ql/test/query-tests/security/CWE-079/semmle/tests/JsfXSS.java index c2b59b98d18..9fd7a1ffcae 100644 --- a/java/ql/test/query-tests/security/CWE-079/semmle/tests/JsfXSS.java +++ b/java/ql/test/query-tests/security/CWE-079/semmle/tests/JsfXSS.java @@ -2,10 +2,12 @@ import java.io.IOException; import java.util.Map; import javax.faces.component.UIComponent; +import javax.faces.context.ExternalContext; import javax.faces.context.FacesContext; import javax.faces.context.ResponseWriter; import javax.faces.render.FacesRenderer; import javax.faces.render.Renderer; +import javax.servlet.http.Cookie; @FacesRenderer(componentFamily = "", rendererType = "") public class JsfXSS extends Renderer @@ -50,4 +52,18 @@ public class JsfXSS extends Renderer writer.write("})();"); writer.write(""); } + + public void testAllSources(FacesContext facesContext) throws IOException + { + ExternalContext ec = facesContext.getExternalContext(); + ResponseWriter writer = facesContext.getResponseWriter(); + writer.write(ec.getRequestParameterMap().keySet().iterator().next()); // $xss + writer.write(ec.getRequestParameterNames().next()); // $xss + writer.write(ec.getRequestParameterValuesMap().get("someKey")[0]); // $xss + writer.write(ec.getRequestParameterValuesMap().keySet().iterator().next()); // $xss + writer.write(ec.getRequestPathInfo()); // $xss + writer.write(((Cookie)ec.getRequestCookieMap().get("someKey")).getName()); // $xss + writer.write(ec.getRequestHeaderMap().get("someKey")); // $xss + writer.write(ec.getRequestHeaderValuesMap().get("someKey")[0]); // $xss + } } From 26dbf058c8cedee7939608e187d99fb32470731d Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Tue, 14 Sep 2021 12:35:33 +0100 Subject: [PATCH 376/741] Add reverse import from ExternalFlow.qll --- java/ql/lib/semmle/code/java/dataflow/ExternalFlow.qll | 1 + 1 file changed, 1 insertion(+) diff --git a/java/ql/lib/semmle/code/java/dataflow/ExternalFlow.qll b/java/ql/lib/semmle/code/java/dataflow/ExternalFlow.qll index 73404a30061..2e7807dc699 100644 --- a/java/ql/lib/semmle/code/java/dataflow/ExternalFlow.qll +++ b/java/ql/lib/semmle/code/java/dataflow/ExternalFlow.qll @@ -83,6 +83,7 @@ private module Frameworks { private import semmle.code.java.frameworks.apache.Lang private import semmle.code.java.frameworks.guava.Guava private import semmle.code.java.frameworks.jackson.JacksonSerializability + private import semmle.code.java.frameworks.javaee.jsf.JSFRenderer private import semmle.code.java.frameworks.JavaxJson private import semmle.code.java.frameworks.JaxWS private import semmle.code.java.frameworks.JoddJson From 6af5c5fc86abf5be0f666e76a7d7b63fb4a0aa92 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Tue, 14 Sep 2021 12:36:38 +0100 Subject: [PATCH 377/741] Add change note --- java/change-notes/2021-09-14-jsf-support.md | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 java/change-notes/2021-09-14-jsf-support.md diff --git a/java/change-notes/2021-09-14-jsf-support.md b/java/change-notes/2021-09-14-jsf-support.md new file mode 100644 index 00000000000..a981fab3542 --- /dev/null +++ b/java/change-notes/2021-09-14-jsf-support.md @@ -0,0 +1,2 @@ +lgtm,codescanning +* Added basic support for untrusted data sources and XSS-vulnerable sinks relating to the JavaServer Faces (JSF) framework. From 0640b41f0070f76e56c6cfae53d40e3e55ad74a8 Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Tue, 14 Sep 2021 13:44:53 +0200 Subject: [PATCH 378/741] Adjust tests --- .../CWE-807/semmle/tests/ConditionalBypassTest.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/java/ql/test/query-tests/security/CWE-807/semmle/tests/ConditionalBypassTest.java b/java/ql/test/query-tests/security/CWE-807/semmle/tests/ConditionalBypassTest.java index f9d21c933d2..03301de0693 100644 --- a/java/ql/test/query-tests/security/CWE-807/semmle/tests/ConditionalBypassTest.java +++ b/java/ql/test/query-tests/security/CWE-807/semmle/tests/ConditionalBypassTest.java @@ -29,9 +29,9 @@ class ConditionalBypassTest { if (adminCookie.getValue().equals("false")) // $ hasConditionalBypassTest login(user, password); - // FALSE POSITIVES: both methods are conditionally executed, but they probably + // GOOD: both methods are conditionally executed, but they probably // both perform the security-critical action - if (adminCookie.getValue() == "false") { // $ SPURIOUS: $ hasConditionalBypassTest + if (adminCookie.getValue() == "false") { // Safe login(user, password); } else { reCheckAuth(user, password); @@ -80,8 +80,8 @@ class ConditionalBypassTest { else { // do something else // BAD: login may not happen - return; } + return; } public static void test4(String user, String password) { From 6d12c4aab1fe635d816297bf31d6a0fd529863d7 Mon Sep 17 00:00:00 2001 From: Erik Krogh Kristensen Date: Tue, 14 Sep 2021 14:42:05 +0200 Subject: [PATCH 379/741] use the correct cwe tags --- .../Security/CWE/CWE-016/InsecureSpringActuatorConfig.ql | 2 +- .../src/experimental/Security/CWE/CWE-094/JShellInjection.ql | 2 +- .../src/experimental/Security/CWE/CWE-273/UnsafeCertTrust.ql | 2 +- .../src/experimental/Security/CWE/CWE-297/InsecureJavaMail.ql | 2 +- .../experimental/Security/CWE/CWE-297/InsecureLdapEndpoint.ql | 2 +- java/ql/src/experimental/Security/CWE/CWE-489/EJBMain.ql | 2 +- .../src/experimental/Security/CWE/CWE-489/WebComponentMain.ql | 2 +- .../experimental/Security/CWE/CWE-522/InsecureBasicAuth.ql | 4 ++-- .../src/experimental/Security/CWE/CWE-522/InsecureLdapAuth.ql | 4 ++-- .../src/experimental/Security/CWE/CWE-532/SensitiveInfoLog.ql | 2 +- .../Security/CWE/CWE-548/InsecureDirectoryConfig.ql | 2 +- .../experimental/Security/CWE/CWE-598/SensitiveGetQuery.ql | 2 +- .../Security/CWE/CWE-600/UncaughtServletException.ql | 2 +- .../experimental/Security/CWE/CWE-601/SpringUrlRedirect.ql | 2 +- .../src/experimental/Security/CWE/CWE-759/HashWithoutSalt.ql | 2 +- .../experimental/Security/CWE/CWE-927/SensitiveBroadcast.ql | 2 +- .../Security/CWE/CWE-939/IncorrectURLVerification.ql | 2 +- .../ql/src/Security/CWE-295/DisablingCertificateValidation.ql | 2 +- 18 files changed, 20 insertions(+), 20 deletions(-) diff --git a/java/ql/src/experimental/Security/CWE/CWE-016/InsecureSpringActuatorConfig.ql b/java/ql/src/experimental/Security/CWE/CWE-016/InsecureSpringActuatorConfig.ql index e069f8603af..52c4c9417e2 100644 --- a/java/ql/src/experimental/Security/CWE/CWE-016/InsecureSpringActuatorConfig.ql +++ b/java/ql/src/experimental/Security/CWE/CWE-016/InsecureSpringActuatorConfig.ql @@ -7,7 +7,7 @@ * @precision high * @id java/insecure-spring-actuator-config * @tags security - * external/cwe-016 + * external/cwe/cwe-016 */ /* diff --git a/java/ql/src/experimental/Security/CWE/CWE-094/JShellInjection.ql b/java/ql/src/experimental/Security/CWE/CWE-094/JShellInjection.ql index 62dbdcba670..451dff79444 100644 --- a/java/ql/src/experimental/Security/CWE/CWE-094/JShellInjection.ql +++ b/java/ql/src/experimental/Security/CWE/CWE-094/JShellInjection.ql @@ -7,7 +7,7 @@ * @precision high * @id java/jshell-injection * @tags security - * external/cwe-094 + * external/cwe/cwe-094 */ import java diff --git a/java/ql/src/experimental/Security/CWE/CWE-273/UnsafeCertTrust.ql b/java/ql/src/experimental/Security/CWE/CWE-273/UnsafeCertTrust.ql index a18b35ae38f..a86505606ca 100644 --- a/java/ql/src/experimental/Security/CWE/CWE-273/UnsafeCertTrust.ql +++ b/java/ql/src/experimental/Security/CWE/CWE-273/UnsafeCertTrust.ql @@ -8,7 +8,7 @@ * @precision medium * @id java/unsafe-cert-trust * @tags security - * external/cwe-273 + * external/cwe/cwe-273 */ import java diff --git a/java/ql/src/experimental/Security/CWE/CWE-297/InsecureJavaMail.ql b/java/ql/src/experimental/Security/CWE/CWE-297/InsecureJavaMail.ql index c17c83448cb..d0e0dc8b81a 100644 --- a/java/ql/src/experimental/Security/CWE/CWE-297/InsecureJavaMail.ql +++ b/java/ql/src/experimental/Security/CWE/CWE-297/InsecureJavaMail.ql @@ -8,7 +8,7 @@ * @precision medium * @id java/insecure-smtp-ssl * @tags security - * external/cwe-297 + * external/cwe/cwe-297 */ import java diff --git a/java/ql/src/experimental/Security/CWE/CWE-297/InsecureLdapEndpoint.ql b/java/ql/src/experimental/Security/CWE/CWE-297/InsecureLdapEndpoint.ql index 9fa2fe596fd..9028f2d686f 100644 --- a/java/ql/src/experimental/Security/CWE/CWE-297/InsecureLdapEndpoint.ql +++ b/java/ql/src/experimental/Security/CWE/CWE-297/InsecureLdapEndpoint.ql @@ -8,7 +8,7 @@ * @precision medium * @id java/insecure-ldaps-endpoint * @tags security - * external/cwe-297 + * external/cwe/cwe-297 */ import java diff --git a/java/ql/src/experimental/Security/CWE/CWE-489/EJBMain.ql b/java/ql/src/experimental/Security/CWE/CWE-489/EJBMain.ql index 6771311094b..fe69f2d9cea 100644 --- a/java/ql/src/experimental/Security/CWE/CWE-489/EJBMain.ql +++ b/java/ql/src/experimental/Security/CWE/CWE-489/EJBMain.ql @@ -6,7 +6,7 @@ * @precision medium * @id java/main-method-in-enterprise-bean * @tags security - * external/cwe-489 + * external/cwe/cwe-489 */ import java diff --git a/java/ql/src/experimental/Security/CWE/CWE-489/WebComponentMain.ql b/java/ql/src/experimental/Security/CWE/CWE-489/WebComponentMain.ql index 2a3dfcbd3ac..1034eef6de2 100644 --- a/java/ql/src/experimental/Security/CWE/CWE-489/WebComponentMain.ql +++ b/java/ql/src/experimental/Security/CWE/CWE-489/WebComponentMain.ql @@ -6,7 +6,7 @@ * @precision medium * @id java/main-method-in-web-components * @tags security - * external/cwe-489 + * external/cwe/cwe-489 */ import java diff --git a/java/ql/src/experimental/Security/CWE/CWE-522/InsecureBasicAuth.ql b/java/ql/src/experimental/Security/CWE/CWE-522/InsecureBasicAuth.ql index 8945f30fd45..460d7492f5b 100644 --- a/java/ql/src/experimental/Security/CWE/CWE-522/InsecureBasicAuth.ql +++ b/java/ql/src/experimental/Security/CWE/CWE-522/InsecureBasicAuth.ql @@ -9,8 +9,8 @@ * @precision medium * @id java/insecure-basic-auth * @tags security - * external/cwe-522 - * external/cwe-319 + * external/cwe/cwe-522 + * external/cwe/cwe-319 */ import java diff --git a/java/ql/src/experimental/Security/CWE/CWE-522/InsecureLdapAuth.ql b/java/ql/src/experimental/Security/CWE/CWE-522/InsecureLdapAuth.ql index 3feadff936f..3b7bfb445a1 100644 --- a/java/ql/src/experimental/Security/CWE/CWE-522/InsecureLdapAuth.ql +++ b/java/ql/src/experimental/Security/CWE/CWE-522/InsecureLdapAuth.ql @@ -6,8 +6,8 @@ * @precision medium * @id java/insecure-ldap-auth * @tags security - * external/cwe-522 - * external/cwe-319 + * external/cwe/cwe-522 + * external/cwe/cwe-319 */ import java diff --git a/java/ql/src/experimental/Security/CWE/CWE-532/SensitiveInfoLog.ql b/java/ql/src/experimental/Security/CWE/CWE-532/SensitiveInfoLog.ql index 968009d6fa1..716a203a819 100644 --- a/java/ql/src/experimental/Security/CWE/CWE-532/SensitiveInfoLog.ql +++ b/java/ql/src/experimental/Security/CWE/CWE-532/SensitiveInfoLog.ql @@ -7,7 +7,7 @@ * @precision medium * @id java/sensitiveinfo-in-logfile * @tags security - * external/cwe-532 + * external/cwe/cwe-532 */ import java diff --git a/java/ql/src/experimental/Security/CWE/CWE-548/InsecureDirectoryConfig.ql b/java/ql/src/experimental/Security/CWE/CWE-548/InsecureDirectoryConfig.ql index 912df87c0b7..5a413b74337 100644 --- a/java/ql/src/experimental/Security/CWE/CWE-548/InsecureDirectoryConfig.ql +++ b/java/ql/src/experimental/Security/CWE/CWE-548/InsecureDirectoryConfig.ql @@ -9,7 +9,7 @@ * @precision medium * @id java/server-directory-listing * @tags security - * external/cwe-548 + * external/cwe/cwe-548 */ import java diff --git a/java/ql/src/experimental/Security/CWE/CWE-598/SensitiveGetQuery.ql b/java/ql/src/experimental/Security/CWE/CWE-598/SensitiveGetQuery.ql index a9528ee2f9b..4d54cd3415e 100644 --- a/java/ql/src/experimental/Security/CWE/CWE-598/SensitiveGetQuery.ql +++ b/java/ql/src/experimental/Security/CWE/CWE-598/SensitiveGetQuery.ql @@ -6,7 +6,7 @@ * @precision medium * @id java/sensitive-query-with-get * @tags security - * external/cwe-598 + * external/cwe/cwe-598 */ import java diff --git a/java/ql/src/experimental/Security/CWE/CWE-600/UncaughtServletException.ql b/java/ql/src/experimental/Security/CWE/CWE-600/UncaughtServletException.ql index f3472e97be0..33a3f1d2dfe 100644 --- a/java/ql/src/experimental/Security/CWE/CWE-600/UncaughtServletException.ql +++ b/java/ql/src/experimental/Security/CWE/CWE-600/UncaughtServletException.ql @@ -9,7 +9,7 @@ * @precision medium * @id java/uncaught-servlet-exception * @tags security - * external/cwe-600 + * external/cwe/cwe-600 */ import java diff --git a/java/ql/src/experimental/Security/CWE/CWE-601/SpringUrlRedirect.ql b/java/ql/src/experimental/Security/CWE/CWE-601/SpringUrlRedirect.ql index 849d317a9af..b15d7948801 100644 --- a/java/ql/src/experimental/Security/CWE/CWE-601/SpringUrlRedirect.ql +++ b/java/ql/src/experimental/Security/CWE/CWE-601/SpringUrlRedirect.ql @@ -7,7 +7,7 @@ * @precision high * @id java/spring-unvalidated-url-redirection * @tags security - * external/cwe-601 + * external/cwe/cwe-601 */ import java diff --git a/java/ql/src/experimental/Security/CWE/CWE-759/HashWithoutSalt.ql b/java/ql/src/experimental/Security/CWE/CWE-759/HashWithoutSalt.ql index 736fe100c39..42213de55f6 100644 --- a/java/ql/src/experimental/Security/CWE/CWE-759/HashWithoutSalt.ql +++ b/java/ql/src/experimental/Security/CWE/CWE-759/HashWithoutSalt.ql @@ -6,7 +6,7 @@ * @precision low * @id java/hash-without-salt * @tags security - * external/cwe-759 + * external/cwe/cwe-759 */ import java diff --git a/java/ql/src/experimental/Security/CWE/CWE-927/SensitiveBroadcast.ql b/java/ql/src/experimental/Security/CWE/CWE-927/SensitiveBroadcast.ql index 2396392f6c9..85751918a6e 100644 --- a/java/ql/src/experimental/Security/CWE/CWE-927/SensitiveBroadcast.ql +++ b/java/ql/src/experimental/Security/CWE/CWE-927/SensitiveBroadcast.ql @@ -8,7 +8,7 @@ * @precision medium * @id java/sensitive-broadcast * @tags security - * external/cwe-927 + * external/cwe/cwe-927 */ import java diff --git a/java/ql/src/experimental/Security/CWE/CWE-939/IncorrectURLVerification.ql b/java/ql/src/experimental/Security/CWE/CWE-939/IncorrectURLVerification.ql index 70156684b41..c6a5e994131 100644 --- a/java/ql/src/experimental/Security/CWE/CWE-939/IncorrectURLVerification.ql +++ b/java/ql/src/experimental/Security/CWE/CWE-939/IncorrectURLVerification.ql @@ -8,7 +8,7 @@ * @precision medium * @id java/incorrect-url-verification * @tags security - * external/cwe-939 + * external/cwe/cwe-939 */ import java diff --git a/javascript/ql/src/Security/CWE-295/DisablingCertificateValidation.ql b/javascript/ql/src/Security/CWE-295/DisablingCertificateValidation.ql index 2f785bace35..0b24235801d 100644 --- a/javascript/ql/src/Security/CWE-295/DisablingCertificateValidation.ql +++ b/javascript/ql/src/Security/CWE-295/DisablingCertificateValidation.ql @@ -7,7 +7,7 @@ * @precision very-high * @id js/disabling-certificate-validation * @tags security - * external/cwe-295 + * external/cwe/cwe-295 */ import javascript From c62a21e04f15c10302836618774c7f040d6d9e3b Mon Sep 17 00:00:00 2001 From: Ethan Palm <56270045+ethanpalm@users.noreply.github.com> Date: Tue, 14 Sep 2021 08:55:46 -0400 Subject: [PATCH 380/741] Apply suggestions from code review Co-authored-by: Felicity Chapman --- .../codeql-cli/creating-codeql-databases.rst | 27 +++++++++---------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/docs/codeql/codeql-cli/creating-codeql-databases.rst b/docs/codeql/codeql-cli/creating-codeql-databases.rst index e007f88368c..7bc3c24d36d 100644 --- a/docs/codeql/codeql-cli/creating-codeql-databases.rst +++ b/docs/codeql/codeql-cli/creating-codeql-databases.rst @@ -233,7 +233,7 @@ Using indirect build tracing If the CodeQL CLI autobuilders for compiled languages do not work with your CI workflow and you cannot wrap invocations of build commands with ``codeql database trace-command``, you can use indirect build tracing to create a CodeQL database. To use indirect build tracing, your CI system must be able to set custom environment variables for each build action. -CodeQL databases are created with indirect build tracing when you run the following command from the checkout root of your project: +To create a CodeQL database with indirect build tracing, run the following command from the checkout root of your project: :: @@ -250,7 +250,7 @@ You may specify other options for the ``codeql database init`` command as normal .. pull-quote:: Note - If you are on Windows, set either ``--trace-process-level `` or ``--trace-process-name `` so that the option points to a parent CI process that will observe all build steps for the code being analyzed. + If the build runs on Windows, you must set either ``--trace-process-level `` or ``--trace-process-name `` so that the option points to a parent CI process that will observe all build steps for the code being analyzed. The ``codeql database init`` command will output a message:: @@ -262,16 +262,14 @@ The ``codeql database init`` command will output a message:: Based on your operating system, we recommend you run: ... -The ``codeql database init`` command will produce files in ``/temp/tracingEnvironment`` containing environment variables and their values for CodeQL to trace subsequent build steps. These files are named ``start-tracing.{json,sh,bat,ps1}``. Use one of these files with your CI system's mechanism for setting environment variables for future steps. You can: +The ``codeql database init`` command creates ``/temp/tracingEnvironment`` with files that contain environment variables and values that will enable CodeQL to trace a sequence of build steps. These files are named ``start-tracing.{json,sh,bat,ps1}``. Use one of these files with your CI system's mechanism for setting environment variables for future steps. You can: * Read the JSON file, process it, and print out environment variables in the format expected by your CI system. For example, Azure DevOps expects ``echo "##vso[task.setvariable variable=NAME]VALUE"``. -* Or source the ``sh/bat/ps1`` script so that its variables go into your shell environment. +* Or source the appropriate ``start-tracing`` script to set the CodeQL variables in the shell environment of the CI system. -Build your code, end build tracing, and then run the command ``codeql database finalize ``. +Build your code and then run the command ``codeql database finalize ``. Optionally, after building the code, unset the environment variables using an ``end-tracing.{json,sh,bat,ps1}`` script from the directory where the ``start-tracing`` scripts are stored. -You can optionally clean up the environment variables by following the same process as with the ``--begin-tracing`` scripts, except now with ``end-tracing.{json,sh,bat,ps1}`` scripts in the same directory. - -Once you have created a CodeQL database using indirect build tracing, you can work with it like any other CodeQL database. For example, analyze the database, and upload the results if using Code Scanning. +Once you have created a CodeQL database using indirect build tracing, you can work with it like any other CodeQL database. For example, analyze the database, and upload the results to GitHub if you use code scanning. Example of creating a CodeQL database using indirect build tracing ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -282,17 +280,18 @@ The following example shows how you could use indirect build tracing in an Azure # Download the CodeQL CLI and query packs... # Check out the repository ... - # Tasks prior to executing the build, e.g. restore NuGet dependencies... + # Run any pre-build tasks, for example, restore NuGet dependencies... # Initialize the CodeQL database. # In this example, the CodeQL CLI has been downloaded and placed on the PATH. - # If no language is specified, a GitHub Apps or personal access token must be passed through stdin + # If no language is specified, a GitHub Apps or personal access token must be passed through stdin. # to autodetect the language. - task: CmdLine@1 displayName: Initialize CodeQL database inputs: # Assumes the source code is checked out to the current working directory. - # Creates a database at `/db` + # Creates a database at `/db`. + # Running on Windows, so specifies a trace process level. script: "codeql database init --language csharp --trace-process-level 3 --source-root --begin-tracing db" # Read the generated environment variables and values, @@ -344,9 +343,9 @@ The following example shows how you could use indirect build tracing in an Azure inputs: script: 'codeql database finalize db' - # Other tasks go here, - # e.g. `codeql database analyze` - # and `codeql github upload-results` ... + # Other tasks go here, for example: + # `codeql database analyze` + # then `codeql github upload-results` ... Obtaining databases from LGTM.com --------------------------------- From b936a04826966816c73df3f46cf1c3ceee002728 Mon Sep 17 00:00:00 2001 From: Erik Krogh Kristensen Date: Tue, 14 Sep 2021 14:59:24 +0200 Subject: [PATCH 381/741] add some fitting CWEs to existing queries --- javascript/ql/src/Security/CWE-200/PrivateFileExposure.ql | 1 + .../ql/src/Security/CWE-313/PasswordInConfigurationFile.ql | 1 + 2 files changed, 2 insertions(+) diff --git a/javascript/ql/src/Security/CWE-200/PrivateFileExposure.ql b/javascript/ql/src/Security/CWE-200/PrivateFileExposure.ql index 45e6ab2572c..6abe955c7f0 100644 --- a/javascript/ql/src/Security/CWE-200/PrivateFileExposure.ql +++ b/javascript/ql/src/Security/CWE-200/PrivateFileExposure.ql @@ -8,6 +8,7 @@ * @id js/exposure-of-private-files * @tags security * external/cwe/cwe-200 + * external/cwe/cwe-548 * @precision high */ diff --git a/javascript/ql/src/Security/CWE-313/PasswordInConfigurationFile.ql b/javascript/ql/src/Security/CWE-313/PasswordInConfigurationFile.ql index 4d534248f45..1418a219698 100644 --- a/javascript/ql/src/Security/CWE-313/PasswordInConfigurationFile.ql +++ b/javascript/ql/src/Security/CWE-313/PasswordInConfigurationFile.ql @@ -10,6 +10,7 @@ * external/cwe/cwe-256 * external/cwe/cwe-260 * external/cwe/cwe-313 + * external/cwe/cwe-522 */ import javascript From d37c14880f08223c65868499971ed2f5bf6a4829 Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Tue, 14 Sep 2021 15:15:50 +0200 Subject: [PATCH 382/741] Python: Copy performance fix --- python/ql/lib/semmle/python/regex.qll | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/python/ql/lib/semmle/python/regex.qll b/python/ql/lib/semmle/python/regex.qll index e57737bd6a2..883d2c3fbc4 100644 --- a/python/ql/lib/semmle/python/regex.qll +++ b/python/ql/lib/semmle/python/regex.qll @@ -773,15 +773,18 @@ abstract class RegexString extends Expr { * string is empty. */ predicate multiples(int start, int end, string lower, string upper) { - this.getChar(start) = "{" and - this.getChar(end - 1) = "}" and - exists(string inner | inner = this.getText().substring(start + 1, end - 1) | - inner.regexpMatch("[0-9]+") and + exists(string text, string match, string inner | + text = this.getText() and + end = start + match.length() and + inner = match.substring(1, match.length() - 1) + | + match = text.regexpFind("\\{[0-9]+\\}", _, start) and lower = inner and upper = lower or - inner.regexpMatch("[0-9]*,[0-9]*") and - exists(int commaIndex | commaIndex = inner.indexOf(",") | + match = text.regexpFind("\\{[0-9]*,[0-9]*\\}", _, start) and + exists(int commaIndex | + commaIndex = inner.indexOf(",") and lower = inner.prefix(commaIndex) and upper = inner.suffix(commaIndex + 1) ) From a1ad1ddc10259cb76b31f1ec577c1df3564f31db Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Tue, 14 Sep 2021 14:21:29 +0100 Subject: [PATCH 383/741] Deprecated and replace uses of old name `ServletWriterSource` --- java/ql/lib/semmle/code/java/security/XSS.qll | 5 +++++ java/ql/src/Security/CWE/CWE-209/StackTraceExposure.ql | 4 +++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/java/ql/lib/semmle/code/java/security/XSS.qll b/java/ql/lib/semmle/code/java/security/XSS.qll index 890291be510..fdb52a95e3a 100644 --- a/java/ql/lib/semmle/code/java/security/XSS.qll +++ b/java/ql/lib/semmle/code/java/security/XSS.qll @@ -149,6 +149,11 @@ class XssVulnerableWriterSource extends MethodAccess { } } +/** + * DEPRECATED: Use `XssVulnerableWriterSource` instead. + */ +deprecated class ServletWriterSource = XssVulnerableWriterSource; + /** * Holds if `s` is an HTTP Content-Type vulnerable to XSS. */ diff --git a/java/ql/src/Security/CWE/CWE-209/StackTraceExposure.ql b/java/ql/src/Security/CWE/CWE-209/StackTraceExposure.ql index 3b085b609b2..c10fa45e93d 100644 --- a/java/ql/src/Security/CWE/CWE-209/StackTraceExposure.ql +++ b/java/ql/src/Security/CWE/CWE-209/StackTraceExposure.ql @@ -36,7 +36,9 @@ class ServletWriterSourceToPrintStackTraceMethodFlowConfig extends TaintTracking this = "StackTraceExposure::ServletWriterSourceToPrintStackTraceMethodFlowConfig" } - override predicate isSource(DataFlow::Node src) { src.asExpr() instanceof ServletWriterSource } + override predicate isSource(DataFlow::Node src) { + src.asExpr() instanceof XssVulnerableWriterSource + } override predicate isSink(DataFlow::Node sink) { exists(MethodAccess ma | From abd770a02785145f9aded6f6dd1cab25cb3a91b4 Mon Sep 17 00:00:00 2001 From: Benjamin Muskalla Date: Tue, 14 Sep 2021 15:32:12 +0200 Subject: [PATCH 384/741] Avoid empty template in test generator --- java/ql/src/utils/GenerateFlowTestCase.py | 1 - java/ql/src/utils/testFooter.qlfrag | 0 2 files changed, 1 deletion(-) delete mode 100644 java/ql/src/utils/testFooter.qlfrag diff --git a/java/ql/src/utils/GenerateFlowTestCase.py b/java/ql/src/utils/GenerateFlowTestCase.py index 15bdfc2eb87..cc4c90809ab 100755 --- a/java/ql/src/utils/GenerateFlowTestCase.py +++ b/java/ql/src/utils/GenerateFlowTestCase.py @@ -212,7 +212,6 @@ with open(resultQl, "w") as f: f.write(", ".join('"%s"' % modelSpecRow[0].strip() for modelSpecRow in supportModelRows)) copyfile("testModelsFooter.qlfrag", f) - copyfile("testFooter.qlfrag", f) # Make an empty .expected file, since this is an inline-exectations test with open(os.path.join(sys.argv[3], "test.expected"), "w"): diff --git a/java/ql/src/utils/testFooter.qlfrag b/java/ql/src/utils/testFooter.qlfrag deleted file mode 100644 index e69de29bb2d..00000000000 From 4e93330cb9b6497fbf0940308af2184bbb6444a2 Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Tue, 14 Sep 2021 15:51:08 +0200 Subject: [PATCH 385/741] Improved tests Note that a FN test case was added --- .../semmle/tests/ConditionalBypassTest.java | 36 +++++++++++++++++-- .../tests/TaintedPermissionsCheck.expected | 1 + 2 files changed, 35 insertions(+), 2 deletions(-) diff --git a/java/ql/test/query-tests/security/CWE-807/semmle/tests/ConditionalBypassTest.java b/java/ql/test/query-tests/security/CWE-807/semmle/tests/ConditionalBypassTest.java index 03301de0693..e4f99fe3fc3 100644 --- a/java/ql/test/query-tests/security/CWE-807/semmle/tests/ConditionalBypassTest.java +++ b/java/ql/test/query-tests/security/CWE-807/semmle/tests/ConditionalBypassTest.java @@ -57,7 +57,6 @@ class ConditionalBypassTest { if (adminCookie.getValue() == "false") login(user, password); else { - // do something else login(user, password); } } @@ -69,17 +68,19 @@ class ConditionalBypassTest { login(user, password); else { // do something else + doIt(); } login(user, password); } public static void test3(String user, String password) { Cookie adminCookie = getCookies()[0]; + // BAD: login may not happen if (adminCookie.getValue() == "false") // $ hasConditionalBypassTest login(user, password); else { // do something else - // BAD: login may not happen + doIt(); } return; } @@ -97,6 +98,37 @@ class ConditionalBypassTest { return; } + public static void test5(String user, String password) throws Exception { + Cookie adminCookie = getCookies()[0]; + // GOOD: exit with Exception if condition is not met + if (adminCookie.getValue() == "false") { + throw new Exception(); + } + + login(user, password); + } + + public static void test6(String user, String password) { + Cookie adminCookie = getCookies()[0]; + // GOOD: exit with return if condition is not met + if (adminCookie.getValue() == "false") { + return; + } + + login(user, password); + } + + public static void test7(String user, String password) { + Cookie adminCookie = getCookies()[0]; + // FALSE NEGATIVE: login is bypasseable + if (adminCookie.getValue() == "false") { // $ MISSING: $ hasConditionalBypassTest + login(user, password); + return; + } else { + doIt(); + } + } + public static void login(String user, String password) { // login } diff --git a/java/ql/test/query-tests/security/CWE-807/semmle/tests/TaintedPermissionsCheck.expected b/java/ql/test/query-tests/security/CWE-807/semmle/tests/TaintedPermissionsCheck.expected index 134be8f88da..10622bf7d90 100644 --- a/java/ql/test/query-tests/security/CWE-807/semmle/tests/TaintedPermissionsCheck.expected +++ b/java/ql/test/query-tests/security/CWE-807/semmle/tests/TaintedPermissionsCheck.expected @@ -3,5 +3,6 @@ edges nodes | TaintedPermissionsCheckTest.java:12:19:12:48 | getParameter(...) : String | semmle.label | getParameter(...) : String | | TaintedPermissionsCheckTest.java:15:27:15:53 | ... + ... | semmle.label | ... + ... | +subpaths #select | TaintedPermissionsCheckTest.java:15:7:15:54 | isPermitted(...) | TaintedPermissionsCheckTest.java:12:19:12:48 | getParameter(...) : String | TaintedPermissionsCheckTest.java:15:27:15:53 | ... + ... | Permissions check uses user-controlled $@. | TaintedPermissionsCheckTest.java:12:19:12:48 | getParameter(...) | data | From bc22e0d9aa4b74df4d66355079d3574896eeee5a Mon Sep 17 00:00:00 2001 From: Anders Fugmann Date: Tue, 14 Sep 2021 10:53:17 +0200 Subject: [PATCH 386/741] C++: Update comments on memberMayBeVarSize --- cpp/ql/lib/semmle/code/cpp/commons/Buffer.qll | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/commons/Buffer.qll b/cpp/ql/lib/semmle/code/cpp/commons/Buffer.qll index 76720cc6c76..5778ee7dfb1 100644 --- a/cpp/ql/lib/semmle/code/cpp/commons/Buffer.qll +++ b/cpp/ql/lib/semmle/code/cpp/commons/Buffer.qll @@ -33,18 +33,18 @@ predicate memberMayBeVarSize(Class c, MemberVariable v) { ) and // If the size is taken, then arithmetic is performed on the result at least once ( + // `sizeof(c)` is not taken not exists(SizeofOperator so | - // `sizeof(c)` is taken so.(SizeofTypeOperator).getTypeOperand().getUnspecifiedType() = c or so.(SizeofExprOperator).getExprOperand().getUnspecifiedType() = c ) or + // or `sizeof(c)` is taken exists(SizeofOperator so | - // `sizeof(c)` is taken so.(SizeofTypeOperator).getTypeOperand().getUnspecifiedType() = c or so.(SizeofExprOperator).getExprOperand().getUnspecifiedType() = c | - // arithmetic is performed on the result + // and arithmetic is performed on the result so.getParent*() instanceof AddExpr ) ) From 406466de9a9800a86b0b529ffd2e93120a585a88 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Tue, 14 Sep 2021 15:24:46 +0100 Subject: [PATCH 387/741] Simplify specifiesContentType predicate --- java/ql/lib/semmle/code/java/frameworks/spring/SpringHttp.qll | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/java/ql/lib/semmle/code/java/frameworks/spring/SpringHttp.qll b/java/ql/lib/semmle/code/java/frameworks/spring/SpringHttp.qll index d4da0ad61e4..2d313cc8584 100644 --- a/java/ql/lib/semmle/code/java/frameworks/spring/SpringHttp.qll +++ b/java/ql/lib/semmle/code/java/frameworks/spring/SpringHttp.qll @@ -145,8 +145,7 @@ private class SpringHttpFlowStep extends SummaryModelCsv { } private predicate specifiesContentType(SpringRequestMappingMethod method) { - method.getProducesExpr().(ArrayInit).getSize() != 0 or - not method.getProducesExpr() instanceof ArrayInit + exists(method.getAProducesExpr()) } private class SpringXssSink extends XSS::XssSink { From 367a53dd717afbbf06c90825a591cde271fcf96b Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Mon, 13 Sep 2021 16:37:26 +0100 Subject: [PATCH 388/741] Add models for android.net.Uri[.Builder] --- java/change-notes/2021-09-13-android-uri.md | 2 + .../code/java/dataflow/ExternalFlow.qll | 1 + .../code/java/frameworks/android/Android.qll | 69 +++ .../frameworks/android/uri/Test.java | 475 ++++++++++++++++++ .../frameworks/android/uri/options | 1 + .../frameworks/android/uri/test.expected | 0 .../frameworks/android/uri/test.ql | 53 ++ .../google-android-9.0.0/android/net/Uri.java | 148 ++++++ 8 files changed, 749 insertions(+) create mode 100644 java/change-notes/2021-09-13-android-uri.md create mode 100644 java/ql/test/library-tests/frameworks/android/uri/Test.java create mode 100644 java/ql/test/library-tests/frameworks/android/uri/options create mode 100644 java/ql/test/library-tests/frameworks/android/uri/test.expected create mode 100644 java/ql/test/library-tests/frameworks/android/uri/test.ql diff --git a/java/change-notes/2021-09-13-android-uri.md b/java/change-notes/2021-09-13-android-uri.md new file mode 100644 index 00000000000..e25f4ed1e1a --- /dev/null +++ b/java/change-notes/2021-09-13-android-uri.md @@ -0,0 +1,2 @@ +lgtm,codescanning +* Added taint-propagating models for Android's Uri class and its nested Builder class. This means that new data-flow alerts may be raised where those classes are involved. diff --git a/java/ql/lib/semmle/code/java/dataflow/ExternalFlow.qll b/java/ql/lib/semmle/code/java/dataflow/ExternalFlow.qll index cd35b92e1fd..bce80a3ee08 100644 --- a/java/ql/lib/semmle/code/java/dataflow/ExternalFlow.qll +++ b/java/ql/lib/semmle/code/java/dataflow/ExternalFlow.qll @@ -110,6 +110,7 @@ private module Frameworks { private import semmle.code.java.security.MvelInjection private import semmle.code.java.security.OgnlInjection private import semmle.code.java.security.XPath + private import semmle.code.java.frameworks.android.Android private import semmle.code.java.frameworks.android.SQLite private import semmle.code.java.frameworks.Jdbc private import semmle.code.java.frameworks.SpringJdbc diff --git a/java/ql/lib/semmle/code/java/frameworks/android/Android.qll b/java/ql/lib/semmle/code/java/frameworks/android/Android.qll index df556c84cb2..cede1790e47 100644 --- a/java/ql/lib/semmle/code/java/frameworks/android/Android.qll +++ b/java/ql/lib/semmle/code/java/frameworks/android/Android.qll @@ -3,6 +3,7 @@ */ import java +import semmle.code.java.dataflow.ExternalFlow import semmle.code.xml.AndroidManifest /** @@ -79,3 +80,71 @@ class AndroidContentResolver extends AndroidComponent { this.getASupertype*().hasQualifiedName("android.content", "ContentResolver") } } + +private class UriModel extends SummaryModelCsv { + override predicate row(string row) { + row = + [ + "android.net;Uri;true;buildUpon;;;Argument[-1];ReturnValue;taint", + "android.net;Uri;false;decode;;;Argument[0];ReturnValue;taint", + "android.net;Uri;false;encode;;;Argument[0];ReturnValue;taint", + "android.net;Uri;false;fromFile;;;Argument[0];ReturnValue;taint", + "android.net;Uri;false;fromParts;;;Argument[0..2];ReturnValue;taint", + "android.net;Uri;true;getAuthority;;;Argument[-1];ReturnValue;taint", + "android.net;Uri;true;getEncodedAuthority;;;Argument[-1];ReturnValue;taint", + "android.net;Uri;true;getEncodedFragment;;;Argument[-1];ReturnValue;taint", + "android.net;Uri;true;getEncodedPath;;;Argument[-1];ReturnValue;taint", + "android.net;Uri;true;getEncodedQuery;;;Argument[-1];ReturnValue;taint", + "android.net;Uri;true;getEncodedSchemeSpecificPart;;;Argument[-1];ReturnValue;taint", + "android.net;Uri;true;getEncodedUserInfo;;;Argument[-1];ReturnValue;taint", + "android.net;Uri;true;getFragment;;;Argument[-1];ReturnValue;taint", + "android.net;Uri;true;getHost;;;Argument[-1];ReturnValue;taint", + "android.net;Uri;true;getLastPathSegment;;;Argument[-1];ReturnValue;taint", + "android.net;Uri;true;getPath;;;Argument[-1];ReturnValue;taint", + "android.net;Uri;true;getPathSegments;;;Argument[-1];ReturnValue;taint", + "android.net;Uri;true;getQuery;;;Argument[-1];ReturnValue;taint", + "android.net;Uri;true;getQueryParameter;;;Argument[-1];ReturnValue;taint", + "android.net;Uri;true;getQueryParameterNames;;;Argument[-1];ReturnValue;taint", + "android.net;Uri;true;getQueryParameters;;;Argument[-1];ReturnValue;taint", + "android.net;Uri;true;getScheme;;;Argument[-1];ReturnValue;taint", + "android.net;Uri;true;getSchemeSpecificPart;;;Argument[-1];ReturnValue;taint", + "android.net;Uri;true;getUserInfo;;;Argument[-1];ReturnValue;taint", + "android.net;Uri;true;normalizeScheme;;;Argument[-1];ReturnValue;taint", + "android.net;Uri;false;parse;;;Argument[0];ReturnValue;taint", + "android.net;Uri;true;toString;;;Argument[-1];ReturnValue;taint", + "android.net;Uri;false;withAppendedPath;;;Argument[0..1];ReturnValue;taint", + "android.net;Uri;false;writeToParcel;;;Argument[1];Argument[0];taint", + "android.net;Uri$Builder;true;appendEncodedPath;;;Argument[0];Argument[-1];taint", + "android.net;Uri$Builder;true;appendEncodedPath;;;Argument[-1];ReturnValue;value", + "android.net;Uri$Builder;true;appendPath;;;Argument[0];Argument[-1];taint", + "android.net;Uri$Builder;true;appendPath;;;Argument[-1];ReturnValue;value", + "android.net;Uri$Builder;true;appendQueryParameter;;;Argument[0..1];Argument[-1];taint", + "android.net;Uri$Builder;true;appendQueryParameter;;;Argument[-1];ReturnValue;value", + "android.net;Uri$Builder;true;authority;;;Argument[0];Argument[-1];taint", + "android.net;Uri$Builder;true;authority;;;Argument[-1];ReturnValue;value", + "android.net;Uri$Builder;true;build;;;Argument[-1];ReturnValue;taint", + "android.net;Uri$Builder;true;clearQuery;;;Argument[-1];ReturnValue;value", + "android.net;Uri$Builder;true;encodedAuthority;;;Argument[0];Argument[-1];taint", + "android.net;Uri$Builder;true;encodedAuthority;;;Argument[-1];ReturnValue;value", + "android.net;Uri$Builder;true;encodedFragment;;;Argument[0];Argument[-1];taint", + "android.net;Uri$Builder;true;encodedFragment;;;Argument[-1];ReturnValue;value", + "android.net;Uri$Builder;true;encodedOpaquePart;;;Argument[0];Argument[-1];taint", + "android.net;Uri$Builder;true;encodedOpaquePart;;;Argument[-1];ReturnValue;value", + "android.net;Uri$Builder;true;encodedPath;;;Argument[0];Argument[-1];taint", + "android.net;Uri$Builder;true;encodedPath;;;Argument[-1];ReturnValue;value", + "android.net;Uri$Builder;true;encodedQuery;;;Argument[0];Argument[-1];taint", + "android.net;Uri$Builder;true;encodedQuery;;;Argument[-1];ReturnValue;value", + "android.net;Uri$Builder;true;fragment;;;Argument[0];Argument[-1];taint", + "android.net;Uri$Builder;true;fragment;;;Argument[-1];ReturnValue;value", + "android.net;Uri$Builder;true;opaquePart;;;Argument[0];Argument[-1];taint", + "android.net;Uri$Builder;true;opaquePart;;;Argument[-1];ReturnValue;value", + "android.net;Uri$Builder;true;path;;;Argument[0];Argument[-1];taint", + "android.net;Uri$Builder;true;path;;;Argument[-1];ReturnValue;value", + "android.net;Uri$Builder;true;query;;;Argument[0];Argument[-1];taint", + "android.net;Uri$Builder;true;query;;;Argument[-1];ReturnValue;value", + "android.net;Uri$Builder;true;scheme;;;Argument[0];Argument[-1];taint", + "android.net;Uri$Builder;true;scheme;;;Argument[-1];ReturnValue;value", + "android.net;Uri$Builder;true;toString;;;Argument[-1];ReturnValue;taint" + ] + } +} diff --git a/java/ql/test/library-tests/frameworks/android/uri/Test.java b/java/ql/test/library-tests/frameworks/android/uri/Test.java new file mode 100644 index 00000000000..11caf7e933c --- /dev/null +++ b/java/ql/test/library-tests/frameworks/android/uri/Test.java @@ -0,0 +1,475 @@ +package generatedtest; + +import android.net.Uri; +import android.os.Parcel; +import java.io.File; +import java.util.List; +import java.util.Set; + +// Test case generated by GenerateFlowTestCase.ql +public class Test { + + Object source() { return null; } + void sink(Object o) { } + + public void test() throws Exception { + + { + // "android.net;Uri$Builder;true;appendEncodedPath;;;Argument[-1];ReturnValue;value" + Uri.Builder out = null; + Uri.Builder in = (Uri.Builder)source(); + out = in.appendEncodedPath(null); + sink(out); // $ hasValueFlow + } + { + // "android.net;Uri$Builder;true;appendEncodedPath;;;Argument[0];Argument[-1];taint" + Uri.Builder out = null; + String in = (String)source(); + out.appendEncodedPath(in); + sink(out); // $ hasTaintFlow + } + { + // "android.net;Uri$Builder;true;appendPath;;;Argument[-1];ReturnValue;value" + Uri.Builder out = null; + Uri.Builder in = (Uri.Builder)source(); + out = in.appendPath(null); + sink(out); // $ hasValueFlow + } + { + // "android.net;Uri$Builder;true;appendPath;;;Argument[0];Argument[-1];taint" + Uri.Builder out = null; + String in = (String)source(); + out.appendPath(in); + sink(out); // $ hasTaintFlow + } + { + // "android.net;Uri$Builder;true;appendQueryParameter;;;Argument[-1];ReturnValue;value" + Uri.Builder out = null; + Uri.Builder in = (Uri.Builder)source(); + out = in.appendQueryParameter(null, null); + sink(out); // $ hasValueFlow + } + { + // "android.net;Uri$Builder;true;appendQueryParameter;;;Argument[0..1];Argument[-1];taint" + Uri.Builder out = null; + String in = (String)source(); + out.appendQueryParameter(null, in); + sink(out); // $ hasTaintFlow + } + { + // "android.net;Uri$Builder;true;appendQueryParameter;;;Argument[0..1];Argument[-1];taint" + Uri.Builder out = null; + String in = (String)source(); + out.appendQueryParameter(in, null); + sink(out); // $ hasTaintFlow + } + { + // "android.net;Uri$Builder;true;authority;;;Argument[-1];ReturnValue;value" + Uri.Builder out = null; + Uri.Builder in = (Uri.Builder)source(); + out = in.authority(null); + sink(out); // $ hasValueFlow + } + { + // "android.net;Uri$Builder;true;authority;;;Argument[0];Argument[-1];taint" + Uri.Builder out = null; + String in = (String)source(); + out.authority(in); + sink(out); // $ hasTaintFlow + } + { + // "android.net;Uri$Builder;true;build;;;Argument[-1];ReturnValue;taint" + Uri out = null; + Uri.Builder in = (Uri.Builder)source(); + out = in.build(); + sink(out); // $ hasTaintFlow + } + { + // "android.net;Uri$Builder;true;clearQuery;;;Argument[-1];ReturnValue;value" + Uri.Builder out = null; + Uri.Builder in = (Uri.Builder)source(); + out = in.clearQuery(); + sink(out); // $ hasValueFlow + } + { + // "android.net;Uri$Builder;true;encodedAuthority;;;Argument[-1];ReturnValue;value" + Uri.Builder out = null; + Uri.Builder in = (Uri.Builder)source(); + out = in.encodedAuthority(null); + sink(out); // $ hasValueFlow + } + { + // "android.net;Uri$Builder;true;encodedAuthority;;;Argument[0];Argument[-1];taint" + Uri.Builder out = null; + String in = (String)source(); + out.encodedAuthority(in); + sink(out); // $ hasTaintFlow + } + { + // "android.net;Uri$Builder;true;encodedFragment;;;Argument[-1];ReturnValue;value" + Uri.Builder out = null; + Uri.Builder in = (Uri.Builder)source(); + out = in.encodedFragment(null); + sink(out); // $ hasValueFlow + } + { + // "android.net;Uri$Builder;true;encodedFragment;;;Argument[0];Argument[-1];taint" + Uri.Builder out = null; + String in = (String)source(); + out.encodedFragment(in); + sink(out); // $ hasTaintFlow + } + { + // "android.net;Uri$Builder;true;encodedOpaquePart;;;Argument[-1];ReturnValue;value" + Uri.Builder out = null; + Uri.Builder in = (Uri.Builder)source(); + out = in.encodedOpaquePart(null); + sink(out); // $ hasValueFlow + } + { + // "android.net;Uri$Builder;true;encodedOpaquePart;;;Argument[0];Argument[-1];taint" + Uri.Builder out = null; + String in = (String)source(); + out.encodedOpaquePart(in); + sink(out); // $ hasTaintFlow + } + { + // "android.net;Uri$Builder;true;encodedPath;;;Argument[-1];ReturnValue;value" + Uri.Builder out = null; + Uri.Builder in = (Uri.Builder)source(); + out = in.encodedPath(null); + sink(out); // $ hasValueFlow + } + { + // "android.net;Uri$Builder;true;encodedPath;;;Argument[0];Argument[-1];taint" + Uri.Builder out = null; + String in = (String)source(); + out.encodedPath(in); + sink(out); // $ hasTaintFlow + } + { + // "android.net;Uri$Builder;true;encodedQuery;;;Argument[-1];ReturnValue;value" + Uri.Builder out = null; + Uri.Builder in = (Uri.Builder)source(); + out = in.encodedQuery(null); + sink(out); // $ hasValueFlow + } + { + // "android.net;Uri$Builder;true;encodedQuery;;;Argument[0];Argument[-1];taint" + Uri.Builder out = null; + String in = (String)source(); + out.encodedQuery(in); + sink(out); // $ hasTaintFlow + } + { + // "android.net;Uri$Builder;true;fragment;;;Argument[-1];ReturnValue;value" + Uri.Builder out = null; + Uri.Builder in = (Uri.Builder)source(); + out = in.fragment(null); + sink(out); // $ hasValueFlow + } + { + // "android.net;Uri$Builder;true;fragment;;;Argument[0];Argument[-1];taint" + Uri.Builder out = null; + String in = (String)source(); + out.fragment(in); + sink(out); // $ hasTaintFlow + } + { + // "android.net;Uri$Builder;true;opaquePart;;;Argument[-1];ReturnValue;value" + Uri.Builder out = null; + Uri.Builder in = (Uri.Builder)source(); + out = in.opaquePart(null); + sink(out); // $ hasValueFlow + } + { + // "android.net;Uri$Builder;true;opaquePart;;;Argument[0];Argument[-1];taint" + Uri.Builder out = null; + String in = (String)source(); + out.opaquePart(in); + sink(out); // $ hasTaintFlow + } + { + // "android.net;Uri$Builder;true;path;;;Argument[-1];ReturnValue;value" + Uri.Builder out = null; + Uri.Builder in = (Uri.Builder)source(); + out = in.path(null); + sink(out); // $ hasValueFlow + } + { + // "android.net;Uri$Builder;true;path;;;Argument[0];Argument[-1];taint" + Uri.Builder out = null; + String in = (String)source(); + out.path(in); + sink(out); // $ hasTaintFlow + } + { + // "android.net;Uri$Builder;true;query;;;Argument[-1];ReturnValue;value" + Uri.Builder out = null; + Uri.Builder in = (Uri.Builder)source(); + out = in.query(null); + sink(out); // $ hasValueFlow + } + { + // "android.net;Uri$Builder;true;query;;;Argument[0];Argument[-1];taint" + Uri.Builder out = null; + String in = (String)source(); + out.query(in); + sink(out); // $ hasTaintFlow + } + { + // "android.net;Uri$Builder;true;scheme;;;Argument[-1];ReturnValue;value" + Uri.Builder out = null; + Uri.Builder in = (Uri.Builder)source(); + out = in.scheme(null); + sink(out); // $ hasValueFlow + } + { + // "android.net;Uri$Builder;true;scheme;;;Argument[0];Argument[-1];taint" + Uri.Builder out = null; + String in = (String)source(); + out.scheme(in); + sink(out); // $ hasTaintFlow + } + { + // "android.net;Uri$Builder;true;toString;;;Argument[-1];ReturnValue;taint" + String out = null; + Uri.Builder in = (Uri.Builder)source(); + out = in.toString(); + sink(out); // $ hasTaintFlow + } + { + // "android.net;Uri;false;decode;;;Argument[0];ReturnValue;taint" + String out = null; + String in = (String)source(); + out = Uri.decode(in); + sink(out); // $ hasTaintFlow + } + { + // "android.net;Uri;false;encode;;;Argument[0];ReturnValue;taint" + String out = null; + String in = (String)source(); + out = Uri.encode(in, null); + sink(out); // $ hasTaintFlow + } + { + // "android.net;Uri;false;encode;;;Argument[0];ReturnValue;taint" + String out = null; + String in = (String)source(); + out = Uri.encode(in); + sink(out); // $ hasTaintFlow + } + { + // "android.net;Uri;false;fromFile;;;Argument[0];ReturnValue;taint" + Uri out = null; + File in = (File)source(); + out = Uri.fromFile(in); + sink(out); // $ hasTaintFlow + } + { + // "android.net;Uri;false;fromParts;;;Argument[0..2];ReturnValue;taint" + Uri out = null; + String in = (String)source(); + out = Uri.fromParts(null, null, in); + sink(out); // $ hasTaintFlow + } + { + // "android.net;Uri;false;fromParts;;;Argument[0..2];ReturnValue;taint" + Uri out = null; + String in = (String)source(); + out = Uri.fromParts(null, in, null); + sink(out); // $ hasTaintFlow + } + { + // "android.net;Uri;false;fromParts;;;Argument[0..2];ReturnValue;taint" + Uri out = null; + String in = (String)source(); + out = Uri.fromParts(in, null, null); + sink(out); // $ hasTaintFlow + } + { + // "android.net;Uri;false;parse;;;Argument[0];ReturnValue;taint" + Uri out = null; + String in = (String)source(); + out = Uri.parse(in); + sink(out); // $ hasTaintFlow + } + { + // "android.net;Uri;false;withAppendedPath;;;Argument[0..1];ReturnValue;taint" + Uri out = null; + Uri in = (Uri)source(); + out = Uri.withAppendedPath(in, null); + sink(out); // $ hasTaintFlow + } + { + // "android.net;Uri;false;withAppendedPath;;;Argument[0..1];ReturnValue;taint" + Uri out = null; + String in = (String)source(); + out = Uri.withAppendedPath(null, in); + sink(out); // $ hasTaintFlow + } + { + // "android.net;Uri;false;writeToParcel;;;Argument[1];Argument[0];taint" + Parcel out = null; + Uri in = (Uri)source(); + Uri.writeToParcel(out, in); + sink(out); // $ hasTaintFlow + } + { + // "android.net;Uri;true;buildUpon;;;Argument[-1];ReturnValue;taint" + Uri.Builder out = null; + Uri in = (Uri)source(); + out = in.buildUpon(); + sink(out); // $ hasTaintFlow + } + { + // "android.net;Uri;true;getAuthority;;;Argument[-1];ReturnValue;taint" + String out = null; + Uri in = (Uri)source(); + out = in.getAuthority(); + sink(out); // $ hasTaintFlow + } + { + // "android.net;Uri;true;getEncodedAuthority;;;Argument[-1];ReturnValue;taint" + String out = null; + Uri in = (Uri)source(); + out = in.getEncodedAuthority(); + sink(out); // $ hasTaintFlow + } + { + // "android.net;Uri;true;getEncodedFragment;;;Argument[-1];ReturnValue;taint" + String out = null; + Uri in = (Uri)source(); + out = in.getEncodedFragment(); + sink(out); // $ hasTaintFlow + } + { + // "android.net;Uri;true;getEncodedPath;;;Argument[-1];ReturnValue;taint" + String out = null; + Uri in = (Uri)source(); + out = in.getEncodedPath(); + sink(out); // $ hasTaintFlow + } + { + // "android.net;Uri;true;getEncodedQuery;;;Argument[-1];ReturnValue;taint" + String out = null; + Uri in = (Uri)source(); + out = in.getEncodedQuery(); + sink(out); // $ hasTaintFlow + } + { + // "android.net;Uri;true;getEncodedSchemeSpecificPart;;;Argument[-1];ReturnValue;taint" + String out = null; + Uri in = (Uri)source(); + out = in.getEncodedSchemeSpecificPart(); + sink(out); // $ hasTaintFlow + } + { + // "android.net;Uri;true;getEncodedUserInfo;;;Argument[-1];ReturnValue;taint" + String out = null; + Uri in = (Uri)source(); + out = in.getEncodedUserInfo(); + sink(out); // $ hasTaintFlow + } + { + // "android.net;Uri;true;getFragment;;;Argument[-1];ReturnValue;taint" + String out = null; + Uri in = (Uri)source(); + out = in.getFragment(); + sink(out); // $ hasTaintFlow + } + { + // "android.net;Uri;true;getHost;;;Argument[-1];ReturnValue;taint" + String out = null; + Uri in = (Uri)source(); + out = in.getHost(); + sink(out); // $ hasTaintFlow + } + { + // "android.net;Uri;true;getLastPathSegment;;;Argument[-1];ReturnValue;taint" + String out = null; + Uri in = (Uri)source(); + out = in.getLastPathSegment(); + sink(out); // $ hasTaintFlow + } + { + // "android.net;Uri;true;getPath;;;Argument[-1];ReturnValue;taint" + String out = null; + Uri in = (Uri)source(); + out = in.getPath(); + sink(out); // $ hasTaintFlow + } + { + // "android.net;Uri;true;getPathSegments;;;Argument[-1];ReturnValue;taint" + List out = null; + Uri in = (Uri)source(); + out = in.getPathSegments(); + sink(out); // $ hasTaintFlow + } + { + // "android.net;Uri;true;getQuery;;;Argument[-1];ReturnValue;taint" + String out = null; + Uri in = (Uri)source(); + out = in.getQuery(); + sink(out); // $ hasTaintFlow + } + { + // "android.net;Uri;true;getQueryParameter;;;Argument[-1];ReturnValue;taint" + String out = null; + Uri in = (Uri)source(); + out = in.getQueryParameter(null); + sink(out); // $ hasTaintFlow + } + { + // "android.net;Uri;true;getQueryParameterNames;;;Argument[-1];ReturnValue;taint" + Set out = null; + Uri in = (Uri)source(); + out = in.getQueryParameterNames(); + sink(out); // $ hasTaintFlow + } + { + // "android.net;Uri;true;getQueryParameters;;;Argument[-1];ReturnValue;taint" + List out = null; + Uri in = (Uri)source(); + out = in.getQueryParameters(null); + sink(out); // $ hasTaintFlow + } + { + // "android.net;Uri;true;getScheme;;;Argument[-1];ReturnValue;taint" + String out = null; + Uri in = (Uri)source(); + out = in.getScheme(); + sink(out); // $ hasTaintFlow + } + { + // "android.net;Uri;true;getSchemeSpecificPart;;;Argument[-1];ReturnValue;taint" + String out = null; + Uri in = (Uri)source(); + out = in.getSchemeSpecificPart(); + sink(out); // $ hasTaintFlow + } + { + // "android.net;Uri;true;getUserInfo;;;Argument[-1];ReturnValue;taint" + String out = null; + Uri in = (Uri)source(); + out = in.getUserInfo(); + sink(out); // $ hasTaintFlow + } + { + // "android.net;Uri;true;normalizeScheme;;;Argument[-1];ReturnValue;taint" + Uri out = null; + Uri in = (Uri)source(); + out = in.normalizeScheme(); + sink(out); // $ hasTaintFlow + } + { + // "android.net;Uri;true;toString;;;Argument[-1];ReturnValue;taint" + String out = null; + Uri in = (Uri)source(); + out = in.toString(); + sink(out); // $ hasTaintFlow + } + + } + +} \ No newline at end of file diff --git a/java/ql/test/library-tests/frameworks/android/uri/options b/java/ql/test/library-tests/frameworks/android/uri/options new file mode 100644 index 00000000000..33cdc1ea940 --- /dev/null +++ b/java/ql/test/library-tests/frameworks/android/uri/options @@ -0,0 +1 @@ +//semmle-extractor-options: --javac-args -cp ${testdir}/../../../../stubs/google-android-9.0.0 diff --git a/java/ql/test/library-tests/frameworks/android/uri/test.expected b/java/ql/test/library-tests/frameworks/android/uri/test.expected new file mode 100644 index 00000000000..e69de29bb2d diff --git a/java/ql/test/library-tests/frameworks/android/uri/test.ql b/java/ql/test/library-tests/frameworks/android/uri/test.ql new file mode 100644 index 00000000000..465161863cc --- /dev/null +++ b/java/ql/test/library-tests/frameworks/android/uri/test.ql @@ -0,0 +1,53 @@ +import java +import semmle.code.java.dataflow.DataFlow +import semmle.code.java.dataflow.ExternalFlow +import semmle.code.java.dataflow.TaintTracking +import TestUtilities.InlineExpectationsTest + +class ValueFlowConf extends DataFlow::Configuration { + ValueFlowConf() { this = "qltest:valueFlowConf" } + + override predicate isSource(DataFlow::Node n) { + n.asExpr().(MethodAccess).getMethod().hasName("source") + } + + override predicate isSink(DataFlow::Node n) { + n.asExpr().(Argument).getCall().getCallee().hasName("sink") + } +} + +class TaintFlowConf extends TaintTracking::Configuration { + TaintFlowConf() { this = "qltest:taintFlowConf" } + + override predicate isSource(DataFlow::Node n) { + n.asExpr().(MethodAccess).getMethod().hasName("source") + } + + override predicate isSink(DataFlow::Node n) { + n.asExpr().(Argument).getCall().getCallee().hasName("sink") + } +} + +class HasFlowTest extends InlineExpectationsTest { + HasFlowTest() { this = "HasFlowTest" } + + override string getARelevantTag() { result = ["hasValueFlow", "hasTaintFlow"] } + + override predicate hasActualResult(Location location, string element, string tag, string value) { + tag = "hasValueFlow" and + exists(DataFlow::Node src, DataFlow::Node sink, ValueFlowConf conf | conf.hasFlow(src, sink) | + sink.getLocation() = location and + element = sink.toString() and + value = "" + ) + or + tag = "hasTaintFlow" and + exists(DataFlow::Node src, DataFlow::Node sink, TaintFlowConf conf | + conf.hasFlow(src, sink) and not any(ValueFlowConf c).hasFlow(src, sink) + | + sink.getLocation() = location and + element = sink.toString() and + value = "" + ) + } +} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/net/Uri.java b/java/ql/test/stubs/google-android-9.0.0/android/net/Uri.java index d5352f0f7ea..2b63354b8f2 100644 --- a/java/ql/test/stubs/google-android-9.0.0/android/net/Uri.java +++ b/java/ql/test/stubs/google-android-9.0.0/android/net/Uri.java @@ -541,4 +541,152 @@ public abstract class Uri implements Parcelable, Comparable { public boolean isPathPrefixMatch(Uri prefix) { return false; } + + public Builder buildUpon() { return null; } + + /** + * Helper class for building or manipulating URI references. Not safe for + * concurrent use. + * + *

    An absolute hierarchical URI reference follows the pattern: + * {@code ://?#} + * + *

    Relative URI references (which are always hierarchical) follow one + * of two patterns: {@code ?#} + * or {@code //?#} + * + *

    An opaque URI follows this pattern: + * {@code :#} + * + *

    Use {@link Uri#buildUpon()} to obtain a builder representing an existing URI. + */ + public static final class Builder { + /** + * Constructs a new Builder. + */ + public Builder() {} + /** + * Sets the scheme. + * + * @param scheme name or {@code null} if this is a relative Uri + */ + public Builder scheme(String scheme) { + return null; + } + /** + * Encodes and sets the given opaque scheme-specific-part. + * + * @param opaquePart decoded opaque part + */ + public Builder opaquePart(String opaquePart) { + return null; + } + /** + * Sets the previously encoded opaque scheme-specific-part. + * + * @param opaquePart encoded opaque part + */ + public Builder encodedOpaquePart(String opaquePart) { + return null; + } + /** + * Encodes and sets the authority. + */ + public Builder authority(String authority) { + return null; + } + /** + * Sets the previously encoded authority. + */ + public Builder encodedAuthority(String authority) { + return null; + } + /** + * Sets the path. Leaves '/' characters intact but encodes others as + * necessary. + * + *

    If the path is not null and doesn't start with a '/', and if + * you specify a scheme and/or authority, the builder will prepend the + * given path with a '/'. + */ + public Builder path(String path) { + return null; + } + /** + * Sets the previously encoded path. + * + *

    If the path is not null and doesn't start with a '/', and if + * you specify a scheme and/or authority, the builder will prepend the + * given path with a '/'. + */ + public Builder encodedPath(String path) { + return null; + } + /** + * Encodes the given segment and appends it to the path. + */ + public Builder appendPath(String newSegment) { + return null; + } + /** + * Appends the given segment to the path. + */ + public Builder appendEncodedPath(String newSegment) { + return null; + } + /** + * Encodes and sets the query. + */ + public Builder query(String query) { + return null; + } + /** + * Sets the previously encoded query. + */ + public Builder encodedQuery(String query) { + return null; + } + /** + * Encodes and sets the fragment. + */ + public Builder fragment(String fragment) { + return null; + } + /** + * Sets the previously encoded fragment. + */ + public Builder encodedFragment(String fragment) { + return null; + } + /** + * Encodes the key and value and then appends the parameter to the + * query string. + * + * @param key which will be encoded + * @param value which will be encoded + */ + public Builder appendQueryParameter(String key, String value) { + return null; + } + /** + * Clears the the previously set query. + */ + public Builder clearQuery() { + return null; + } + /** + * Constructs a Uri with the current attributes. + * + * @throws UnsupportedOperationException if the URI is opaque and the + * scheme is null + */ + public Uri build() { + return null; + } + @Override + public String toString() { + return null; + } + } + } From 5d737934c3d489ee891d09e49ca0ad5e6623237d Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Tue, 14 Sep 2021 16:26:54 +0100 Subject: [PATCH 389/741] Don't inherit models from a `final` class Co-authored-by: Tony Torralba --- .../code/java/frameworks/android/Android.qll | 62 +++++++++---------- 1 file changed, 31 insertions(+), 31 deletions(-) diff --git a/java/ql/lib/semmle/code/java/frameworks/android/Android.qll b/java/ql/lib/semmle/code/java/frameworks/android/Android.qll index cede1790e47..34064b3190e 100644 --- a/java/ql/lib/semmle/code/java/frameworks/android/Android.qll +++ b/java/ql/lib/semmle/code/java/frameworks/android/Android.qll @@ -114,37 +114,37 @@ private class UriModel extends SummaryModelCsv { "android.net;Uri;true;toString;;;Argument[-1];ReturnValue;taint", "android.net;Uri;false;withAppendedPath;;;Argument[0..1];ReturnValue;taint", "android.net;Uri;false;writeToParcel;;;Argument[1];Argument[0];taint", - "android.net;Uri$Builder;true;appendEncodedPath;;;Argument[0];Argument[-1];taint", - "android.net;Uri$Builder;true;appendEncodedPath;;;Argument[-1];ReturnValue;value", - "android.net;Uri$Builder;true;appendPath;;;Argument[0];Argument[-1];taint", - "android.net;Uri$Builder;true;appendPath;;;Argument[-1];ReturnValue;value", - "android.net;Uri$Builder;true;appendQueryParameter;;;Argument[0..1];Argument[-1];taint", - "android.net;Uri$Builder;true;appendQueryParameter;;;Argument[-1];ReturnValue;value", - "android.net;Uri$Builder;true;authority;;;Argument[0];Argument[-1];taint", - "android.net;Uri$Builder;true;authority;;;Argument[-1];ReturnValue;value", - "android.net;Uri$Builder;true;build;;;Argument[-1];ReturnValue;taint", - "android.net;Uri$Builder;true;clearQuery;;;Argument[-1];ReturnValue;value", - "android.net;Uri$Builder;true;encodedAuthority;;;Argument[0];Argument[-1];taint", - "android.net;Uri$Builder;true;encodedAuthority;;;Argument[-1];ReturnValue;value", - "android.net;Uri$Builder;true;encodedFragment;;;Argument[0];Argument[-1];taint", - "android.net;Uri$Builder;true;encodedFragment;;;Argument[-1];ReturnValue;value", - "android.net;Uri$Builder;true;encodedOpaquePart;;;Argument[0];Argument[-1];taint", - "android.net;Uri$Builder;true;encodedOpaquePart;;;Argument[-1];ReturnValue;value", - "android.net;Uri$Builder;true;encodedPath;;;Argument[0];Argument[-1];taint", - "android.net;Uri$Builder;true;encodedPath;;;Argument[-1];ReturnValue;value", - "android.net;Uri$Builder;true;encodedQuery;;;Argument[0];Argument[-1];taint", - "android.net;Uri$Builder;true;encodedQuery;;;Argument[-1];ReturnValue;value", - "android.net;Uri$Builder;true;fragment;;;Argument[0];Argument[-1];taint", - "android.net;Uri$Builder;true;fragment;;;Argument[-1];ReturnValue;value", - "android.net;Uri$Builder;true;opaquePart;;;Argument[0];Argument[-1];taint", - "android.net;Uri$Builder;true;opaquePart;;;Argument[-1];ReturnValue;value", - "android.net;Uri$Builder;true;path;;;Argument[0];Argument[-1];taint", - "android.net;Uri$Builder;true;path;;;Argument[-1];ReturnValue;value", - "android.net;Uri$Builder;true;query;;;Argument[0];Argument[-1];taint", - "android.net;Uri$Builder;true;query;;;Argument[-1];ReturnValue;value", - "android.net;Uri$Builder;true;scheme;;;Argument[0];Argument[-1];taint", - "android.net;Uri$Builder;true;scheme;;;Argument[-1];ReturnValue;value", - "android.net;Uri$Builder;true;toString;;;Argument[-1];ReturnValue;taint" + "android.net;Uri$Builder;false;appendEncodedPath;;;Argument[0];Argument[-1];taint", + "android.net;Uri$Builder;false;appendEncodedPath;;;Argument[-1];ReturnValue;value", + "android.net;Uri$Builder;false;appendPath;;;Argument[0];Argument[-1];taint", + "android.net;Uri$Builder;false;appendPath;;;Argument[-1];ReturnValue;value", + "android.net;Uri$Builder;false;appendQueryParameter;;;Argument[0..1];Argument[-1];taint", + "android.net;Uri$Builder;false;appendQueryParameter;;;Argument[-1];ReturnValue;value", + "android.net;Uri$Builder;false;authority;;;Argument[0];Argument[-1];taint", + "android.net;Uri$Builder;false;authority;;;Argument[-1];ReturnValue;value", + "android.net;Uri$Builder;false;build;;;Argument[-1];ReturnValue;taint", + "android.net;Uri$Builder;false;clearQuery;;;Argument[-1];ReturnValue;value", + "android.net;Uri$Builder;false;encodedAuthority;;;Argument[0];Argument[-1];taint", + "android.net;Uri$Builder;false;encodedAuthority;;;Argument[-1];ReturnValue;value", + "android.net;Uri$Builder;false;encodedFragment;;;Argument[0];Argument[-1];taint", + "android.net;Uri$Builder;false;encodedFragment;;;Argument[-1];ReturnValue;value", + "android.net;Uri$Builder;false;encodedOpaquePart;;;Argument[0];Argument[-1];taint", + "android.net;Uri$Builder;false;encodedOpaquePart;;;Argument[-1];ReturnValue;value", + "android.net;Uri$Builder;false;encodedPath;;;Argument[0];Argument[-1];taint", + "android.net;Uri$Builder;false;encodedPath;;;Argument[-1];ReturnValue;value", + "android.net;Uri$Builder;false;encodedQuery;;;Argument[0];Argument[-1];taint", + "android.net;Uri$Builder;false;encodedQuery;;;Argument[-1];ReturnValue;value", + "android.net;Uri$Builder;false;fragment;;;Argument[0];Argument[-1];taint", + "android.net;Uri$Builder;false;fragment;;;Argument[-1];ReturnValue;value", + "android.net;Uri$Builder;false;opaquePart;;;Argument[0];Argument[-1];taint", + "android.net;Uri$Builder;false;opaquePart;;;Argument[-1];ReturnValue;value", + "android.net;Uri$Builder;false;path;;;Argument[0];Argument[-1];taint", + "android.net;Uri$Builder;false;path;;;Argument[-1];ReturnValue;value", + "android.net;Uri$Builder;false;query;;;Argument[0];Argument[-1];taint", + "android.net;Uri$Builder;false;query;;;Argument[-1];ReturnValue;value", + "android.net;Uri$Builder;false;scheme;;;Argument[0];Argument[-1];taint", + "android.net;Uri$Builder;false;scheme;;;Argument[-1];ReturnValue;value", + "android.net;Uri$Builder;false;toString;;;Argument[-1];ReturnValue;taint" ] } } From e5b84fb795f8a1f10491467c9cd2e14e67386a75 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Tue, 14 Sep 2021 16:33:53 +0100 Subject: [PATCH 390/741] Use InlineFlowTest --- .../frameworks/android/uri/test.ql | 53 +------------------ 1 file changed, 1 insertion(+), 52 deletions(-) diff --git a/java/ql/test/library-tests/frameworks/android/uri/test.ql b/java/ql/test/library-tests/frameworks/android/uri/test.ql index 465161863cc..5d91e4e8e26 100644 --- a/java/ql/test/library-tests/frameworks/android/uri/test.ql +++ b/java/ql/test/library-tests/frameworks/android/uri/test.ql @@ -1,53 +1,2 @@ import java -import semmle.code.java.dataflow.DataFlow -import semmle.code.java.dataflow.ExternalFlow -import semmle.code.java.dataflow.TaintTracking -import TestUtilities.InlineExpectationsTest - -class ValueFlowConf extends DataFlow::Configuration { - ValueFlowConf() { this = "qltest:valueFlowConf" } - - override predicate isSource(DataFlow::Node n) { - n.asExpr().(MethodAccess).getMethod().hasName("source") - } - - override predicate isSink(DataFlow::Node n) { - n.asExpr().(Argument).getCall().getCallee().hasName("sink") - } -} - -class TaintFlowConf extends TaintTracking::Configuration { - TaintFlowConf() { this = "qltest:taintFlowConf" } - - override predicate isSource(DataFlow::Node n) { - n.asExpr().(MethodAccess).getMethod().hasName("source") - } - - override predicate isSink(DataFlow::Node n) { - n.asExpr().(Argument).getCall().getCallee().hasName("sink") - } -} - -class HasFlowTest extends InlineExpectationsTest { - HasFlowTest() { this = "HasFlowTest" } - - override string getARelevantTag() { result = ["hasValueFlow", "hasTaintFlow"] } - - override predicate hasActualResult(Location location, string element, string tag, string value) { - tag = "hasValueFlow" and - exists(DataFlow::Node src, DataFlow::Node sink, ValueFlowConf conf | conf.hasFlow(src, sink) | - sink.getLocation() = location and - element = sink.toString() and - value = "" - ) - or - tag = "hasTaintFlow" and - exists(DataFlow::Node src, DataFlow::Node sink, TaintFlowConf conf | - conf.hasFlow(src, sink) and not any(ValueFlowConf c).hasFlow(src, sink) - | - sink.getLocation() = location and - element = sink.toString() and - value = "" - ) - } -} +import TestUtilities.InlineFlowTest From 8fd848701eafc1aed02ef471073ea496fce9cb66 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Tue, 14 Sep 2021 16:38:11 +0100 Subject: [PATCH 391/741] C++: Fix test failure. --- .../CWE/CWE-190/semmle/tainted/ArithmeticTainted.expected | 1 + 1 file changed, 1 insertion(+) diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/tainted/ArithmeticTainted.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/tainted/ArithmeticTainted.expected index e2fefe4a442..8ac361e9589 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/tainted/ArithmeticTainted.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/tainted/ArithmeticTainted.expected @@ -56,6 +56,7 @@ nodes | test.c:54:7:54:10 | len3 | semmle.label | len3 | | test.c:54:7:54:10 | len3 | semmle.label | len3 | | test.c:54:7:54:10 | len3 | semmle.label | len3 | +subpaths #select | test2.cpp:14:11:14:11 | v | test2.cpp:25:22:25:23 | & ... | test2.cpp:14:11:14:11 | v | $@ flows to here and is used in arithmetic, potentially causing an overflow. | test2.cpp:25:22:25:23 | & ... | User-provided value | | test2.cpp:14:11:14:11 | v | test2.cpp:25:22:25:23 | & ... | test2.cpp:14:11:14:11 | v | $@ flows to here and is used in arithmetic, potentially causing an underflow. | test2.cpp:25:22:25:23 | & ... | User-provided value | From 02a0eed8eea0e01bc16213c3c8aa59f4c8f944c2 Mon Sep 17 00:00:00 2001 From: Erik Krogh Kristensen Date: Wed, 1 Sep 2021 14:31:23 +0200 Subject: [PATCH 392/741] add basic support for TypeScript 4.4 --- javascript/change-notes/2021-09-01-typescript-4.4.md | 2 ++ javascript/extractor/lib/typescript/package.json | 2 +- javascript/extractor/lib/typescript/yarn.lock | 8 ++++---- .../extractor/src/com/semmle/js/extractor/Main.java | 2 +- 4 files changed, 8 insertions(+), 6 deletions(-) create mode 100644 javascript/change-notes/2021-09-01-typescript-4.4.md diff --git a/javascript/change-notes/2021-09-01-typescript-4.4.md b/javascript/change-notes/2021-09-01-typescript-4.4.md new file mode 100644 index 00000000000..ec5eca5193c --- /dev/null +++ b/javascript/change-notes/2021-09-01-typescript-4.4.md @@ -0,0 +1,2 @@ +lgtm,codescanning +* TypeScript 4.4 is now supported. diff --git a/javascript/extractor/lib/typescript/package.json b/javascript/extractor/lib/typescript/package.json index 6064cc946d9..f191604e7c8 100644 --- a/javascript/extractor/lib/typescript/package.json +++ b/javascript/extractor/lib/typescript/package.json @@ -2,7 +2,7 @@ "name": "typescript-parser-wrapper", "private": true, "dependencies": { - "typescript": "4.3.5" + "typescript": "4.4.2" }, "scripts": { "build": "tsc --project tsconfig.json", diff --git a/javascript/extractor/lib/typescript/yarn.lock b/javascript/extractor/lib/typescript/yarn.lock index c1254a4e73f..639a32d261e 100644 --- a/javascript/extractor/lib/typescript/yarn.lock +++ b/javascript/extractor/lib/typescript/yarn.lock @@ -6,7 +6,7 @@ version "12.7.11" resolved node-12.7.11.tgz#be879b52031cfb5d295b047f5462d8ef1a716446 -typescript@4.3.5: - version "4.3.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.3.5.tgz#4d1c37cc16e893973c45a06886b7113234f119f4" - integrity sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA== +typescript@4.4.2: + version "4.4.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.4.2.tgz#6d618640d430e3569a1dfb44f7d7e600ced3ee86" + integrity sha512-gzP+t5W4hdy4c+68bfcv0t400HVJMMd2+H9B7gae1nQlBzCqvrXX+6GL/b3GAgyTH966pzrZ70/fRjwAtZksSQ== diff --git a/javascript/extractor/src/com/semmle/js/extractor/Main.java b/javascript/extractor/src/com/semmle/js/extractor/Main.java index a7c3074a64e..201f918f3e4 100644 --- a/javascript/extractor/src/com/semmle/js/extractor/Main.java +++ b/javascript/extractor/src/com/semmle/js/extractor/Main.java @@ -43,7 +43,7 @@ public class Main { * A version identifier that should be updated every time the extractor changes in such a way that * it may produce different tuples for the same file under the same {@link ExtractorConfig}. */ - public static final String EXTRACTOR_VERSION = "2021-07-28"; + public static final String EXTRACTOR_VERSION = "2021-09-01"; public static final Pattern NEWLINE = Pattern.compile("\n"); From 59f15eb4eb1b4a42a10b60f6586d08802d8c4fe0 Mon Sep 17 00:00:00 2001 From: Erik Krogh Kristensen Date: Wed, 1 Sep 2021 15:37:23 +0200 Subject: [PATCH 393/741] add tests for TypeScript 4.4 types --- .../TypeScript/Types/printAst.expected | 546 +++++++++++++++++- .../TypeScript/Types/tests.expected | 118 ++++ .../library-tests/TypeScript/Types/tst.ts | 48 ++ 3 files changed, 686 insertions(+), 26 deletions(-) diff --git a/javascript/ql/test/library-tests/TypeScript/Types/printAst.expected b/javascript/ql/test/library-tests/TypeScript/Types/printAst.expected index d05b3228025..9f911cf8da2 100644 --- a/javascript/ql/test/library-tests/TypeScript/Types/printAst.expected +++ b/javascript/ql/test/library-tests/TypeScript/Types/printAst.expected @@ -87,6 +87,14 @@ nodes | dummy.ts:4:22:4:22 | [RegExpNormalConstant] c | semmle.label | [RegExpNormalConstant] c | | file://:0:0:0:0 | (Arguments) | semmle.label | (Arguments) | | file://:0:0:0:0 | (Arguments) | semmle.label | (Arguments) | +| file://:0:0:0:0 | (Arguments) | semmle.label | (Arguments) | +| file://:0:0:0:0 | (Parameters) | semmle.label | (Parameters) | +| file://:0:0:0:0 | (Parameters) | semmle.label | (Parameters) | +| file://:0:0:0:0 | (Parameters) | semmle.label | (Parameters) | +| file://:0:0:0:0 | (Parameters) | semmle.label | (Parameters) | +| file://:0:0:0:0 | (Parameters) | semmle.label | (Parameters) | +| file://:0:0:0:0 | (Parameters) | semmle.label | (Parameters) | +| file://:0:0:0:0 | (Parameters) | semmle.label | (Parameters) | | file://:0:0:0:0 | (Parameters) | semmle.label | (Parameters) | | file://:0:0:0:0 | (Parameters) | semmle.label | (Parameters) | | file://:0:0:0:0 | (Parameters) | semmle.label | (Parameters) | @@ -591,17 +599,175 @@ nodes | tst.ts:127:14:127:17 | [ThisExpr] this | semmle.label | [ThisExpr] this | | tst.ts:127:14:127:28 | [DotExpr] this.#someValue | semmle.label | [DotExpr] this.#someValue | | tst.ts:127:19:127:28 | [Label] #someValue | semmle.label | [Label] #someValue | +| tst.ts:132:1:178:1 | [NamespaceDeclaration] module ... ; } } | semmle.label | [NamespaceDeclaration] module ... ; } } | +| tst.ts:132:1:178:1 | [NamespaceDeclaration] module ... ; } } | semmle.order | 56 | +| tst.ts:132:8:132:11 | [VarDecl] TS44 | semmle.label | [VarDecl] TS44 | +| tst.ts:133:3:138:3 | [FunctionDeclStmt] functio ... } } | semmle.label | [FunctionDeclStmt] functio ... } } | +| tst.ts:133:12:133:14 | [VarDecl] foo | semmle.label | [VarDecl] foo | +| tst.ts:133:16:133:18 | [SimpleParameter] arg | semmle.label | [SimpleParameter] arg | +| tst.ts:133:21:133:27 | [KeywordTypeExpr] unknown | semmle.label | [KeywordTypeExpr] unknown | +| tst.ts:133:30:138:3 | [BlockStmt] { c ... } } | semmle.label | [BlockStmt] { c ... } } | +| tst.ts:134:5:134:48 | [DeclStmt] const argIsString = ... | semmle.label | [DeclStmt] const argIsString = ... | +| tst.ts:134:11:134:21 | [VarDecl] argIsString | semmle.label | [VarDecl] argIsString | +| tst.ts:134:11:134:47 | [VariableDeclarator] argIsSt ... string" | semmle.label | [VariableDeclarator] argIsSt ... string" | +| tst.ts:134:25:134:34 | [UnaryExpr] typeof arg | semmle.label | [UnaryExpr] typeof arg | +| tst.ts:134:25:134:47 | [BinaryExpr] typeof ... string" | semmle.label | [BinaryExpr] typeof ... string" | +| tst.ts:134:32:134:34 | [VarRef] arg | semmle.label | [VarRef] arg | +| tst.ts:134:40:134:47 | [Literal] "string" | semmle.label | [Literal] "string" | +| tst.ts:135:5:137:5 | [IfStmt] if (arg ... ; } | semmle.label | [IfStmt] if (arg ... ; } | +| tst.ts:135:9:135:19 | [VarRef] argIsString | semmle.label | [VarRef] argIsString | +| tst.ts:135:22:137:5 | [BlockStmt] { ... ; } | semmle.label | [BlockStmt] { ... ; } | +| tst.ts:136:9:136:40 | [DeclStmt] const upper = ... | semmle.label | [DeclStmt] const upper = ... | +| tst.ts:136:15:136:19 | [VarDecl] upper | semmle.label | [VarDecl] upper | +| tst.ts:136:15:136:39 | [VariableDeclarator] upper = ... rCase() | semmle.label | [VariableDeclarator] upper = ... rCase() | +| tst.ts:136:23:136:25 | [VarRef] arg | semmle.label | [VarRef] arg | +| tst.ts:136:23:136:37 | [DotExpr] arg.toUpperCase | semmle.label | [DotExpr] arg.toUpperCase | +| tst.ts:136:23:136:39 | [MethodCallExpr] arg.toUpperCase() | semmle.label | [MethodCallExpr] arg.toUpperCase() | +| tst.ts:136:27:136:37 | [Label] toUpperCase | semmle.label | [Label] toUpperCase | +| tst.ts:140:3:142:47 | [TypeAliasDeclaration,TypeDefinition] type Sh ... mber }; | semmle.label | [TypeAliasDeclaration,TypeDefinition] type Sh ... mber }; | +| tst.ts:140:8:140:12 | [Identifier] Shape | semmle.label | [Identifier] Shape | +| tst.ts:141:7:142:46 | [UnionTypeExpr] \| { kin ... umber } | semmle.label | [UnionTypeExpr] \| { kin ... umber } | +| tst.ts:141:9:141:42 | [InterfaceTypeExpr] { kind: ... umber } | semmle.label | [InterfaceTypeExpr] { kind: ... umber } | +| tst.ts:141:11:141:14 | [Label] kind | semmle.label | [Label] kind | +| tst.ts:141:11:141:25 | [FieldDeclaration] kind: "circle", | semmle.label | [FieldDeclaration] kind: "circle", | +| tst.ts:141:17:141:24 | [LiteralTypeExpr] "circle" | semmle.label | [LiteralTypeExpr] "circle" | +| tst.ts:141:27:141:32 | [Label] radius | semmle.label | [Label] radius | +| tst.ts:141:27:141:40 | [FieldDeclaration] radius: number | semmle.label | [FieldDeclaration] radius: number | +| tst.ts:141:35:141:40 | [KeywordTypeExpr] number | semmle.label | [KeywordTypeExpr] number | +| tst.ts:142:9:142:46 | [InterfaceTypeExpr] { kind: ... umber } | semmle.label | [InterfaceTypeExpr] { kind: ... umber } | +| tst.ts:142:11:142:14 | [Label] kind | semmle.label | [Label] kind | +| tst.ts:142:11:142:25 | [FieldDeclaration] kind: "square", | semmle.label | [FieldDeclaration] kind: "square", | +| tst.ts:142:17:142:24 | [LiteralTypeExpr] "square" | semmle.label | [LiteralTypeExpr] "square" | +| tst.ts:142:27:142:36 | [Label] sideLength | semmle.label | [Label] sideLength | +| tst.ts:142:27:142:44 | [FieldDeclaration] sideLength: number | semmle.label | [FieldDeclaration] sideLength: number | +| tst.ts:142:39:142:44 | [KeywordTypeExpr] number | semmle.label | [KeywordTypeExpr] number | +| tst.ts:144:3:149:3 | [FunctionDeclStmt] functio ... ; } } | semmle.label | [FunctionDeclStmt] functio ... ; } } | +| tst.ts:144:12:144:15 | [VarDecl] side | semmle.label | [VarDecl] side | +| tst.ts:144:17:144:21 | [SimpleParameter] shape | semmle.label | [SimpleParameter] shape | +| tst.ts:144:24:144:28 | [LocalTypeAccess] Shape | semmle.label | [LocalTypeAccess] Shape | +| tst.ts:144:32:144:37 | [KeywordTypeExpr] number | semmle.label | [KeywordTypeExpr] number | +| tst.ts:144:39:149:3 | [BlockStmt] { ... ; } } | semmle.label | [BlockStmt] { ... ; } } | +| tst.ts:145:7:145:29 | [DeclStmt] const { ... shape; | semmle.label | [DeclStmt] const { ... shape; | +| tst.ts:145:13:145:20 | [ObjectPattern] { kind } | semmle.label | [ObjectPattern] { kind } | +| tst.ts:145:13:145:28 | [VariableDeclarator] { kind } = shape | semmle.label | [VariableDeclarator] { kind } = shape | +| tst.ts:145:15:145:18 | [Label] kind | semmle.label | [Label] kind | +| tst.ts:145:15:145:18 | [PropertyPattern] kind | semmle.label | [PropertyPattern] kind | +| tst.ts:145:15:145:18 | [VarDecl] kind | semmle.label | [VarDecl] kind | +| tst.ts:145:24:145:28 | [VarRef] shape | semmle.label | [VarRef] shape | +| tst.ts:147:7:148:39 | [IfStmt] if (kin ... ngth; } | semmle.label | [IfStmt] if (kin ... ngth; } | +| tst.ts:147:11:147:14 | [VarRef] kind | semmle.label | [VarRef] kind | +| tst.ts:147:11:147:27 | [BinaryExpr] kind === "circle" | semmle.label | [BinaryExpr] kind === "circle" | +| tst.ts:147:20:147:27 | [Literal] "circle" | semmle.label | [Literal] "circle" | +| tst.ts:147:30:147:52 | [BlockStmt] { retur ... adius;} | semmle.label | [BlockStmt] { retur ... adius;} | +| tst.ts:147:32:147:51 | [ReturnStmt] return shape.radius; | semmle.label | [ReturnStmt] return shape.radius; | +| tst.ts:147:39:147:43 | [VarRef] shape | semmle.label | [VarRef] shape | +| tst.ts:147:39:147:50 | [DotExpr] shape.radius | semmle.label | [DotExpr] shape.radius | +| tst.ts:147:45:147:50 | [Label] radius | semmle.label | [Label] radius | +| tst.ts:148:12:148:39 | [BlockStmt] { retur ... ngth; } | semmle.label | [BlockStmt] { retur ... ngth; } | +| tst.ts:148:14:148:37 | [ReturnStmt] return ... Length; | semmle.label | [ReturnStmt] return ... Length; | +| tst.ts:148:21:148:25 | [VarRef] shape | semmle.label | [VarRef] shape | +| tst.ts:148:21:148:36 | [DotExpr] shape.sideLength | semmle.label | [DotExpr] shape.sideLength | +| tst.ts:148:27:148:36 | [Label] sideLength | semmle.label | [Label] sideLength | +| tst.ts:151:3:162:3 | [FunctionDeclStmt] functio ... 2]; } | semmle.label | [FunctionDeclStmt] functio ... 2]; } | +| tst.ts:151:12:151:22 | [VarDecl] symbolIndex | semmle.label | [VarDecl] symbolIndex | +| tst.ts:151:26:162:3 | [BlockStmt] { i ... 2]; } | semmle.label | [BlockStmt] { i ... 2]; } | +| tst.ts:152:5:156:5 | [InterfaceDeclaration,TypeDefinition] interfa ... ; } | semmle.label | [InterfaceDeclaration,TypeDefinition] interfa ... ; } | +| tst.ts:152:15:152:20 | [Identifier] Colors | semmle.label | [Identifier] Colors | +| tst.ts:153:7:153:28 | [FunctionExpr] [sym: s ... number; | semmle.label | [FunctionExpr] [sym: s ... number; | +| tst.ts:153:7:153:28 | [IndexSignature] [sym: s ... number; | semmle.label | [IndexSignature] [sym: s ... number; | +| tst.ts:153:8:153:10 | [SimpleParameter] sym | semmle.label | [SimpleParameter] sym | +| tst.ts:153:13:153:18 | [KeywordTypeExpr] symbol | semmle.label | [KeywordTypeExpr] symbol | +| tst.ts:153:22:153:27 | [KeywordTypeExpr] number | semmle.label | [KeywordTypeExpr] number | +| tst.ts:154:7:154:28 | [FunctionExpr] [key: s ... string; | semmle.label | [FunctionExpr] [key: s ... string; | +| tst.ts:154:7:154:28 | [IndexSignature] [key: s ... string; | semmle.label | [IndexSignature] [key: s ... string; | +| tst.ts:154:8:154:10 | [SimpleParameter] key | semmle.label | [SimpleParameter] key | +| tst.ts:154:13:154:18 | [KeywordTypeExpr] string | semmle.label | [KeywordTypeExpr] string | +| tst.ts:154:22:154:27 | [KeywordTypeExpr] string | semmle.label | [KeywordTypeExpr] string | +| tst.ts:155:7:155:29 | [FunctionExpr] [num: n ... oolean; | semmle.label | [FunctionExpr] [num: n ... oolean; | +| tst.ts:155:7:155:29 | [IndexSignature] [num: n ... oolean; | semmle.label | [IndexSignature] [num: n ... oolean; | +| tst.ts:155:8:155:10 | [SimpleParameter] num | semmle.label | [SimpleParameter] num | +| tst.ts:155:13:155:18 | [KeywordTypeExpr] number | semmle.label | [KeywordTypeExpr] number | +| tst.ts:155:22:155:28 | [KeywordTypeExpr] boolean | semmle.label | [KeywordTypeExpr] boolean | +| tst.ts:158:5:158:28 | [DeclStmt] let colors = ... | semmle.label | [DeclStmt] let colors = ... | +| tst.ts:158:9:158:14 | [VarDecl] colors | semmle.label | [VarDecl] colors | +| tst.ts:158:9:158:27 | [VariableDeclarator] colors: Colors = {} | semmle.label | [VariableDeclarator] colors: Colors = {} | +| tst.ts:158:17:158:22 | [LocalTypeAccess] Colors | semmle.label | [LocalTypeAccess] Colors | +| tst.ts:158:26:158:27 | [ObjectExpr] {} | semmle.label | [ObjectExpr] {} | +| tst.ts:159:5:159:38 | [DeclStmt] const red = ... | semmle.label | [DeclStmt] const red = ... | +| tst.ts:159:11:159:13 | [VarDecl] red | semmle.label | [VarDecl] red | +| tst.ts:159:11:159:37 | [VariableDeclarator] red = c ... "red")] | semmle.label | [VariableDeclarator] red = c ... "red")] | +| tst.ts:159:17:159:22 | [VarRef] colors | semmle.label | [VarRef] colors | +| tst.ts:159:17:159:37 | [IndexExpr] colors[ ... "red")] | semmle.label | [IndexExpr] colors[ ... "red")] | +| tst.ts:159:24:159:29 | [VarRef] Symbol | semmle.label | [VarRef] Symbol | +| tst.ts:159:24:159:36 | [CallExpr] Symbol("red") | semmle.label | [CallExpr] Symbol("red") | +| tst.ts:159:31:159:35 | [Literal] "red" | semmle.label | [Literal] "red" | +| tst.ts:160:5:160:34 | [DeclStmt] const green = ... | semmle.label | [DeclStmt] const green = ... | +| tst.ts:160:11:160:15 | [VarDecl] green | semmle.label | [VarDecl] green | +| tst.ts:160:11:160:33 | [VariableDeclarator] green = ... green"] | semmle.label | [VariableDeclarator] green = ... green"] | +| tst.ts:160:19:160:24 | [VarRef] colors | semmle.label | [VarRef] colors | +| tst.ts:160:19:160:33 | [IndexExpr] colors["green"] | semmle.label | [IndexExpr] colors["green"] | +| tst.ts:160:26:160:32 | [Literal] "green" | semmle.label | [Literal] "green" | +| tst.ts:161:5:161:27 | [DeclStmt] const blue = ... | semmle.label | [DeclStmt] const blue = ... | +| tst.ts:161:11:161:14 | [VarDecl] blue | semmle.label | [VarDecl] blue | +| tst.ts:161:11:161:26 | [VariableDeclarator] blue = colors[2] | semmle.label | [VariableDeclarator] blue = colors[2] | +| tst.ts:161:18:161:23 | [VarRef] colors | semmle.label | [VarRef] colors | +| tst.ts:161:18:161:26 | [IndexExpr] colors[2] | semmle.label | [IndexExpr] colors[2] | +| tst.ts:161:25:161:25 | [Literal] 2 | semmle.label | [Literal] 2 | +| tst.ts:164:3:177:3 | [FunctionDeclStmt] functio ... "]; } | semmle.label | [FunctionDeclStmt] functio ... "]; } | +| tst.ts:164:12:164:29 | [VarDecl] stringPatternIndex | semmle.label | [VarDecl] stringPatternIndex | +| tst.ts:164:33:177:3 | [BlockStmt] { i ... "]; } | semmle.label | [BlockStmt] { i ... "]; } | +| tst.ts:165:5:167:5 | [InterfaceDeclaration,TypeDefinition] interfa ... ; } | semmle.label | [InterfaceDeclaration,TypeDefinition] interfa ... ; } | +| tst.ts:165:15:165:17 | [Identifier] Foo | semmle.label | [Identifier] Foo | +| tst.ts:166:7:166:37 | [FunctionExpr] [key: ` ... number; | semmle.label | [FunctionExpr] [key: ` ... number; | +| tst.ts:166:7:166:37 | [IndexSignature] [key: ` ... number; | semmle.label | [IndexSignature] [key: ` ... number; | +| tst.ts:166:8:166:10 | [SimpleParameter] key | semmle.label | [SimpleParameter] key | +| tst.ts:166:13:166:27 | [TemplateLiteralTypeExpr] `foo-${number}` | semmle.label | [TemplateLiteralTypeExpr] `foo-${number}` | +| tst.ts:166:14:166:17 | [LiteralTypeExpr] foo- | semmle.label | [LiteralTypeExpr] foo- | +| tst.ts:166:20:166:25 | [KeywordTypeExpr] number | semmle.label | [KeywordTypeExpr] number | +| tst.ts:166:31:166:36 | [KeywordTypeExpr] number | semmle.label | [KeywordTypeExpr] number | +| tst.ts:168:5:168:23 | [DeclStmt] var bla = ... | semmle.label | [DeclStmt] var bla = ... | +| tst.ts:168:9:168:11 | [VarDecl] bla | semmle.label | [VarDecl] bla | +| tst.ts:168:9:168:22 | [VariableDeclarator] bla : Foo = {} | semmle.label | [VariableDeclarator] bla : Foo = {} | +| tst.ts:168:15:168:17 | [LocalTypeAccess] Foo | semmle.label | [LocalTypeAccess] Foo | +| tst.ts:168:21:168:22 | [ObjectExpr] {} | semmle.label | [ObjectExpr] {} | +| tst.ts:169:5:169:29 | [DeclStmt] const bar = ... | semmle.label | [DeclStmt] const bar = ... | +| tst.ts:169:11:169:13 | [VarDecl] bar | semmle.label | [VarDecl] bar | +| tst.ts:169:11:169:28 | [VariableDeclarator] bar = bla[`foo-1`] | semmle.label | [VariableDeclarator] bar = bla[`foo-1`] | +| tst.ts:169:17:169:19 | [VarRef] bla | semmle.label | [VarRef] bla | +| tst.ts:169:17:169:28 | [IndexExpr] bla[`foo-1`] | semmle.label | [IndexExpr] bla[`foo-1`] | +| tst.ts:169:21:169:27 | [TemplateElement] `foo-1` | semmle.label | [TemplateElement] `foo-1` | +| tst.ts:169:21:169:27 | [TemplateLiteral] `foo-1` | semmle.label | [TemplateLiteral] `foo-1` | +| tst.ts:171:5:173:5 | [InterfaceDeclaration,TypeDefinition] interfa ... ; } | semmle.label | [InterfaceDeclaration,TypeDefinition] interfa ... ; } | +| tst.ts:171:15:171:18 | [Identifier] Data | semmle.label | [Identifier] Data | +| tst.ts:172:7:172:42 | [FunctionExpr] [optNam ... oolean; | semmle.label | [FunctionExpr] [optNam ... oolean; | +| tst.ts:172:7:172:42 | [IndexSignature] [optNam ... oolean; | semmle.label | [IndexSignature] [optNam ... oolean; | +| tst.ts:172:8:172:14 | [SimpleParameter] optName | semmle.label | [SimpleParameter] optName | +| tst.ts:172:17:172:22 | [KeywordTypeExpr] string | semmle.label | [KeywordTypeExpr] string | +| tst.ts:172:17:172:31 | [UnionTypeExpr] string \| symbol | semmle.label | [UnionTypeExpr] string \| symbol | +| tst.ts:172:26:172:31 | [KeywordTypeExpr] symbol | semmle.label | [KeywordTypeExpr] symbol | +| tst.ts:172:35:172:41 | [KeywordTypeExpr] boolean | semmle.label | [KeywordTypeExpr] boolean | +| tst.ts:175:5:175:26 | [DeclStmt] const data = ... | semmle.label | [DeclStmt] const data = ... | +| tst.ts:175:11:175:14 | [VarDecl] data | semmle.label | [VarDecl] data | +| tst.ts:175:11:175:25 | [VariableDeclarator] data: Data = {} | semmle.label | [VariableDeclarator] data: Data = {} | +| tst.ts:175:17:175:20 | [LocalTypeAccess] Data | semmle.label | [LocalTypeAccess] Data | +| tst.ts:175:24:175:25 | [ObjectExpr] {} | semmle.label | [ObjectExpr] {} | +| tst.ts:176:5:176:28 | [DeclStmt] const baz = ... | semmle.label | [DeclStmt] const baz = ... | +| tst.ts:176:11:176:13 | [VarDecl] baz | semmle.label | [VarDecl] baz | +| tst.ts:176:11:176:27 | [VariableDeclarator] baz = data["foo"] | semmle.label | [VariableDeclarator] baz = data["foo"] | +| tst.ts:176:17:176:20 | [VarRef] data | semmle.label | [VarRef] data | +| tst.ts:176:17:176:27 | [IndexExpr] data["foo"] | semmle.label | [IndexExpr] data["foo"] | +| tst.ts:176:22:176:26 | [Literal] "foo" | semmle.label | [Literal] "foo" | | type_alias.ts:1:1:1:17 | [TypeAliasDeclaration,TypeDefinition] type B = boolean; | semmle.label | [TypeAliasDeclaration,TypeDefinition] type B = boolean; | -| type_alias.ts:1:1:1:17 | [TypeAliasDeclaration,TypeDefinition] type B = boolean; | semmle.order | 56 | +| type_alias.ts:1:1:1:17 | [TypeAliasDeclaration,TypeDefinition] type B = boolean; | semmle.order | 57 | | type_alias.ts:1:6:1:6 | [Identifier] B | semmle.label | [Identifier] B | | type_alias.ts:1:10:1:16 | [KeywordTypeExpr] boolean | semmle.label | [KeywordTypeExpr] boolean | | type_alias.ts:3:1:3:9 | [DeclStmt] var b = ... | semmle.label | [DeclStmt] var b = ... | -| type_alias.ts:3:1:3:9 | [DeclStmt] var b = ... | semmle.order | 57 | +| type_alias.ts:3:1:3:9 | [DeclStmt] var b = ... | semmle.order | 58 | | type_alias.ts:3:5:3:5 | [VarDecl] b | semmle.label | [VarDecl] b | | type_alias.ts:3:5:3:8 | [VariableDeclarator] b: B | semmle.label | [VariableDeclarator] b: B | | type_alias.ts:3:8:3:8 | [LocalTypeAccess] B | semmle.label | [LocalTypeAccess] B | | type_alias.ts:5:1:5:50 | [TypeAliasDeclaration,TypeDefinition] type Va ... ay>; | semmle.label | [TypeAliasDeclaration,TypeDefinition] type Va ... ay>; | -| type_alias.ts:5:1:5:50 | [TypeAliasDeclaration,TypeDefinition] type Va ... ay>; | semmle.order | 58 | +| type_alias.ts:5:1:5:50 | [TypeAliasDeclaration,TypeDefinition] type Va ... ay>; | semmle.order | 59 | | type_alias.ts:5:6:5:17 | [Identifier] ValueOrArray | semmle.label | [Identifier] ValueOrArray | | type_alias.ts:5:19:5:19 | [Identifier] T | semmle.label | [Identifier] T | | type_alias.ts:5:19:5:19 | [TypeParameter] T | semmle.label | [TypeParameter] T | @@ -613,14 +779,14 @@ nodes | type_alias.ts:5:34:5:48 | [GenericTypeExpr] ValueOrArray | semmle.label | [GenericTypeExpr] ValueOrArray | | type_alias.ts:5:47:5:47 | [LocalTypeAccess] T | semmle.label | [LocalTypeAccess] T | | type_alias.ts:7:1:7:28 | [DeclStmt] var c = ... | semmle.label | [DeclStmt] var c = ... | -| type_alias.ts:7:1:7:28 | [DeclStmt] var c = ... | semmle.order | 59 | +| type_alias.ts:7:1:7:28 | [DeclStmt] var c = ... | semmle.order | 60 | | type_alias.ts:7:5:7:5 | [VarDecl] c | semmle.label | [VarDecl] c | | type_alias.ts:7:5:7:27 | [VariableDeclarator] c: Valu ... number> | semmle.label | [VariableDeclarator] c: Valu ... number> | | type_alias.ts:7:8:7:19 | [LocalTypeAccess] ValueOrArray | semmle.label | [LocalTypeAccess] ValueOrArray | | type_alias.ts:7:8:7:27 | [GenericTypeExpr] ValueOrArray | semmle.label | [GenericTypeExpr] ValueOrArray | | type_alias.ts:7:21:7:26 | [KeywordTypeExpr] number | semmle.label | [KeywordTypeExpr] number | | type_alias.ts:9:1:15:13 | [TypeAliasDeclaration,TypeDefinition] type Js ... Json[]; | semmle.label | [TypeAliasDeclaration,TypeDefinition] type Js ... Json[]; | -| type_alias.ts:9:1:15:13 | [TypeAliasDeclaration,TypeDefinition] type Js ... Json[]; | semmle.order | 60 | +| type_alias.ts:9:1:15:13 | [TypeAliasDeclaration,TypeDefinition] type Js ... Json[]; | semmle.order | 61 | | type_alias.ts:9:6:9:9 | [Identifier] Json | semmle.label | [Identifier] Json | | type_alias.ts:10:5:15:12 | [UnionTypeExpr] \| strin ... Json[] | semmle.label | [UnionTypeExpr] \| strin ... Json[] | | type_alias.ts:10:7:10:12 | [KeywordTypeExpr] string | semmle.label | [KeywordTypeExpr] string | @@ -636,12 +802,12 @@ nodes | type_alias.ts:15:7:15:10 | [LocalTypeAccess] Json | semmle.label | [LocalTypeAccess] Json | | type_alias.ts:15:7:15:12 | [ArrayTypeExpr] Json[] | semmle.label | [ArrayTypeExpr] Json[] | | type_alias.ts:17:1:17:15 | [DeclStmt] var json = ... | semmle.label | [DeclStmt] var json = ... | -| type_alias.ts:17:1:17:15 | [DeclStmt] var json = ... | semmle.order | 61 | +| type_alias.ts:17:1:17:15 | [DeclStmt] var json = ... | semmle.order | 62 | | type_alias.ts:17:5:17:8 | [VarDecl] json | semmle.label | [VarDecl] json | | type_alias.ts:17:5:17:14 | [VariableDeclarator] json: Json | semmle.label | [VariableDeclarator] json: Json | | type_alias.ts:17:11:17:14 | [LocalTypeAccess] Json | semmle.label | [LocalTypeAccess] Json | | type_alias.ts:19:1:21:57 | [TypeAliasDeclaration,TypeDefinition] type Vi ... ode[]]; | semmle.label | [TypeAliasDeclaration,TypeDefinition] type Vi ... ode[]]; | -| type_alias.ts:19:1:21:57 | [TypeAliasDeclaration,TypeDefinition] type Vi ... ode[]]; | semmle.order | 62 | +| type_alias.ts:19:1:21:57 | [TypeAliasDeclaration,TypeDefinition] type Vi ... ode[]]; | semmle.order | 63 | | type_alias.ts:19:6:19:16 | [Identifier] VirtualNode | semmle.label | [Identifier] VirtualNode | | type_alias.ts:20:5:21:56 | [UnionTypeExpr] \| strin ... Node[]] | semmle.label | [UnionTypeExpr] \| strin ... Node[]] | | type_alias.ts:20:7:20:12 | [KeywordTypeExpr] string | semmle.label | [KeywordTypeExpr] string | @@ -657,7 +823,7 @@ nodes | type_alias.ts:21:43:21:53 | [LocalTypeAccess] VirtualNode | semmle.label | [LocalTypeAccess] VirtualNode | | type_alias.ts:21:43:21:55 | [ArrayTypeExpr] VirtualNode[] | semmle.label | [ArrayTypeExpr] VirtualNode[] | | type_alias.ts:23:1:27:6 | [DeclStmt] const myNode = ... | semmle.label | [DeclStmt] const myNode = ... | -| type_alias.ts:23:1:27:6 | [DeclStmt] const myNode = ... | semmle.order | 63 | +| type_alias.ts:23:1:27:6 | [DeclStmt] const myNode = ... | semmle.order | 64 | | type_alias.ts:23:7:23:12 | [VarDecl] myNode | semmle.label | [VarDecl] myNode | | type_alias.ts:23:7:27:5 | [VariableDeclarator] myNode: ... ] ] | semmle.label | [VariableDeclarator] myNode: ... ] ] | | type_alias.ts:23:15:23:25 | [LocalTypeAccess] VirtualNode | semmle.label | [LocalTypeAccess] VirtualNode | @@ -682,12 +848,12 @@ nodes | type_alias.ts:26:23:26:36 | [Literal] "second-child" | semmle.label | [Literal] "second-child" | | type_alias.ts:26:41:26:62 | [Literal] "I'm the second child" | semmle.label | [Literal] "I'm the second child" | | type_definition_objects.ts:1:1:1:33 | [ImportDeclaration] import ... dummy"; | semmle.label | [ImportDeclaration] import ... dummy"; | -| type_definition_objects.ts:1:1:1:33 | [ImportDeclaration] import ... dummy"; | semmle.order | 64 | +| type_definition_objects.ts:1:1:1:33 | [ImportDeclaration] import ... dummy"; | semmle.order | 65 | | type_definition_objects.ts:1:8:1:17 | [ImportSpecifier] * as dummy | semmle.label | [ImportSpecifier] * as dummy | | type_definition_objects.ts:1:13:1:17 | [VarDecl] dummy | semmle.label | [VarDecl] dummy | | type_definition_objects.ts:1:24:1:32 | [Literal] "./dummy" | semmle.label | [Literal] "./dummy" | | type_definition_objects.ts:3:1:3:17 | [ExportDeclaration] export class C {} | semmle.label | [ExportDeclaration] export class C {} | -| type_definition_objects.ts:3:1:3:17 | [ExportDeclaration] export class C {} | semmle.order | 65 | +| type_definition_objects.ts:3:1:3:17 | [ExportDeclaration] export class C {} | semmle.order | 66 | | type_definition_objects.ts:3:8:3:17 | [ClassDefinition,TypeDefinition] class C {} | semmle.label | [ClassDefinition,TypeDefinition] class C {} | | type_definition_objects.ts:3:14:3:14 | [VarDecl] C | semmle.label | [VarDecl] C | | type_definition_objects.ts:3:16:3:15 | [BlockStmt] {} | semmle.label | [BlockStmt] {} | @@ -695,36 +861,36 @@ nodes | type_definition_objects.ts:3:16:3:15 | [FunctionExpr] () {} | semmle.label | [FunctionExpr] () {} | | type_definition_objects.ts:3:16:3:15 | [Label] constructor | semmle.label | [Label] constructor | | type_definition_objects.ts:4:1:4:17 | [DeclStmt] let classObj = ... | semmle.label | [DeclStmt] let classObj = ... | -| type_definition_objects.ts:4:1:4:17 | [DeclStmt] let classObj = ... | semmle.order | 66 | +| type_definition_objects.ts:4:1:4:17 | [DeclStmt] let classObj = ... | semmle.order | 67 | | type_definition_objects.ts:4:5:4:12 | [VarDecl] classObj | semmle.label | [VarDecl] classObj | | type_definition_objects.ts:4:5:4:16 | [VariableDeclarator] classObj = C | semmle.label | [VariableDeclarator] classObj = C | | type_definition_objects.ts:4:16:4:16 | [VarRef] C | semmle.label | [VarRef] C | | type_definition_objects.ts:6:1:6:16 | [ExportDeclaration] export enum E {} | semmle.label | [ExportDeclaration] export enum E {} | -| type_definition_objects.ts:6:1:6:16 | [ExportDeclaration] export enum E {} | semmle.order | 67 | +| type_definition_objects.ts:6:1:6:16 | [ExportDeclaration] export enum E {} | semmle.order | 68 | | type_definition_objects.ts:6:8:6:16 | [EnumDeclaration,TypeDefinition] enum E {} | semmle.label | [EnumDeclaration,TypeDefinition] enum E {} | | type_definition_objects.ts:6:13:6:13 | [VarDecl] E | semmle.label | [VarDecl] E | | type_definition_objects.ts:7:1:7:16 | [DeclStmt] let enumObj = ... | semmle.label | [DeclStmt] let enumObj = ... | -| type_definition_objects.ts:7:1:7:16 | [DeclStmt] let enumObj = ... | semmle.order | 68 | +| type_definition_objects.ts:7:1:7:16 | [DeclStmt] let enumObj = ... | semmle.order | 69 | | type_definition_objects.ts:7:5:7:11 | [VarDecl] enumObj | semmle.label | [VarDecl] enumObj | | type_definition_objects.ts:7:5:7:15 | [VariableDeclarator] enumObj = E | semmle.label | [VariableDeclarator] enumObj = E | | type_definition_objects.ts:7:15:7:15 | [VarRef] E | semmle.label | [VarRef] E | | type_definition_objects.ts:9:1:9:22 | [ExportDeclaration] export ... e N {;} | semmle.label | [ExportDeclaration] export ... e N {;} | -| type_definition_objects.ts:9:1:9:22 | [ExportDeclaration] export ... e N {;} | semmle.order | 69 | +| type_definition_objects.ts:9:1:9:22 | [ExportDeclaration] export ... e N {;} | semmle.order | 70 | | type_definition_objects.ts:9:8:9:22 | [NamespaceDeclaration] namespace N {;} | semmle.label | [NamespaceDeclaration] namespace N {;} | | type_definition_objects.ts:9:18:9:18 | [VarDecl] N | semmle.label | [VarDecl] N | | type_definition_objects.ts:9:21:9:21 | [EmptyStmt] ; | semmle.label | [EmptyStmt] ; | | type_definition_objects.ts:10:1:10:21 | [DeclStmt] let namespaceObj = ... | semmle.label | [DeclStmt] let namespaceObj = ... | -| type_definition_objects.ts:10:1:10:21 | [DeclStmt] let namespaceObj = ... | semmle.order | 70 | +| type_definition_objects.ts:10:1:10:21 | [DeclStmt] let namespaceObj = ... | semmle.order | 71 | | type_definition_objects.ts:10:5:10:16 | [VarDecl] namespaceObj | semmle.label | [VarDecl] namespaceObj | | type_definition_objects.ts:10:5:10:20 | [VariableDeclarator] namespaceObj = N | semmle.label | [VariableDeclarator] namespaceObj = N | | type_definition_objects.ts:10:20:10:20 | [VarRef] N | semmle.label | [VarRef] N | | type_definitions.ts:1:1:1:33 | [ImportDeclaration] import ... dummy"; | semmle.label | [ImportDeclaration] import ... dummy"; | -| type_definitions.ts:1:1:1:33 | [ImportDeclaration] import ... dummy"; | semmle.order | 71 | +| type_definitions.ts:1:1:1:33 | [ImportDeclaration] import ... dummy"; | semmle.order | 72 | | type_definitions.ts:1:8:1:17 | [ImportSpecifier] * as dummy | semmle.label | [ImportSpecifier] * as dummy | | type_definitions.ts:1:13:1:17 | [VarDecl] dummy | semmle.label | [VarDecl] dummy | | type_definitions.ts:1:24:1:32 | [Literal] "./dummy" | semmle.label | [Literal] "./dummy" | | type_definitions.ts:3:1:5:1 | [InterfaceDeclaration,TypeDefinition] interfa ... x: S; } | semmle.label | [InterfaceDeclaration,TypeDefinition] interfa ... x: S; } | -| type_definitions.ts:3:1:5:1 | [InterfaceDeclaration,TypeDefinition] interfa ... x: S; } | semmle.order | 72 | +| type_definitions.ts:3:1:5:1 | [InterfaceDeclaration,TypeDefinition] interfa ... x: S; } | semmle.order | 73 | | type_definitions.ts:3:11:3:11 | [Identifier] I | semmle.label | [Identifier] I | | type_definitions.ts:3:13:3:13 | [Identifier] S | semmle.label | [Identifier] S | | type_definitions.ts:3:13:3:13 | [TypeParameter] S | semmle.label | [TypeParameter] S | @@ -732,14 +898,14 @@ nodes | type_definitions.ts:4:3:4:7 | [FieldDeclaration] x: S; | semmle.label | [FieldDeclaration] x: S; | | type_definitions.ts:4:6:4:6 | [LocalTypeAccess] S | semmle.label | [LocalTypeAccess] S | | type_definitions.ts:6:1:6:16 | [DeclStmt] let i = ... | semmle.label | [DeclStmt] let i = ... | -| type_definitions.ts:6:1:6:16 | [DeclStmt] let i = ... | semmle.order | 73 | +| type_definitions.ts:6:1:6:16 | [DeclStmt] let i = ... | semmle.order | 74 | | type_definitions.ts:6:5:6:5 | [VarDecl] i | semmle.label | [VarDecl] i | | type_definitions.ts:6:5:6:16 | [VariableDeclarator] i: I | semmle.label | [VariableDeclarator] i: I | | type_definitions.ts:6:8:6:8 | [LocalTypeAccess] I | semmle.label | [LocalTypeAccess] I | | type_definitions.ts:6:8:6:16 | [GenericTypeExpr] I | semmle.label | [GenericTypeExpr] I | | type_definitions.ts:6:10:6:15 | [KeywordTypeExpr] number | semmle.label | [KeywordTypeExpr] number | | type_definitions.ts:8:1:10:1 | [ClassDefinition,TypeDefinition] class C ... x: T } | semmle.label | [ClassDefinition,TypeDefinition] class C ... x: T } | -| type_definitions.ts:8:1:10:1 | [ClassDefinition,TypeDefinition] class C ... x: T } | semmle.order | 74 | +| type_definitions.ts:8:1:10:1 | [ClassDefinition,TypeDefinition] class C ... x: T } | semmle.order | 75 | | type_definitions.ts:8:7:8:7 | [VarDecl] C | semmle.label | [VarDecl] C | | type_definitions.ts:8:8:8:7 | [BlockStmt] {} | semmle.label | [BlockStmt] {} | | type_definitions.ts:8:8:8:7 | [ClassInitializedMember,ConstructorDefinition] constructor() {} | semmle.label | [ClassInitializedMember,ConstructorDefinition] constructor() {} | @@ -751,14 +917,14 @@ nodes | type_definitions.ts:9:3:9:6 | [FieldDeclaration] x: T | semmle.label | [FieldDeclaration] x: T | | type_definitions.ts:9:6:9:6 | [LocalTypeAccess] T | semmle.label | [LocalTypeAccess] T | | type_definitions.ts:11:1:11:17 | [DeclStmt] let c = ... | semmle.label | [DeclStmt] let c = ... | -| type_definitions.ts:11:1:11:17 | [DeclStmt] let c = ... | semmle.order | 75 | +| type_definitions.ts:11:1:11:17 | [DeclStmt] let c = ... | semmle.order | 76 | | type_definitions.ts:11:5:11:5 | [VarDecl] c | semmle.label | [VarDecl] c | | type_definitions.ts:11:5:11:16 | [VariableDeclarator] c: C | semmle.label | [VariableDeclarator] c: C | | type_definitions.ts:11:8:11:8 | [LocalTypeAccess] C | semmle.label | [LocalTypeAccess] C | | type_definitions.ts:11:8:11:16 | [GenericTypeExpr] C | semmle.label | [GenericTypeExpr] C | | type_definitions.ts:11:10:11:15 | [KeywordTypeExpr] number | semmle.label | [KeywordTypeExpr] number | | type_definitions.ts:13:1:15:1 | [EnumDeclaration,TypeDefinition] enum Co ... blue } | semmle.label | [EnumDeclaration,TypeDefinition] enum Co ... blue } | -| type_definitions.ts:13:1:15:1 | [EnumDeclaration,TypeDefinition] enum Co ... blue } | semmle.order | 76 | +| type_definitions.ts:13:1:15:1 | [EnumDeclaration,TypeDefinition] enum Co ... blue } | semmle.order | 77 | | type_definitions.ts:13:6:13:10 | [VarDecl] Color | semmle.label | [VarDecl] Color | | type_definitions.ts:14:3:14:5 | [EnumMember,TypeDefinition] red | semmle.label | [EnumMember,TypeDefinition] red | | type_definitions.ts:14:3:14:5 | [VarDecl] red | semmle.label | [VarDecl] red | @@ -767,29 +933,29 @@ nodes | type_definitions.ts:14:15:14:18 | [EnumMember,TypeDefinition] blue | semmle.label | [EnumMember,TypeDefinition] blue | | type_definitions.ts:14:15:14:18 | [VarDecl] blue | semmle.label | [VarDecl] blue | | type_definitions.ts:16:1:16:17 | [DeclStmt] let color = ... | semmle.label | [DeclStmt] let color = ... | -| type_definitions.ts:16:1:16:17 | [DeclStmt] let color = ... | semmle.order | 77 | +| type_definitions.ts:16:1:16:17 | [DeclStmt] let color = ... | semmle.order | 78 | | type_definitions.ts:16:5:16:9 | [VarDecl] color | semmle.label | [VarDecl] color | | type_definitions.ts:16:5:16:16 | [VariableDeclarator] color: Color | semmle.label | [VariableDeclarator] color: Color | | type_definitions.ts:16:12:16:16 | [LocalTypeAccess] Color | semmle.label | [LocalTypeAccess] Color | | type_definitions.ts:18:1:18:33 | [EnumDeclaration,TypeDefinition] enum En ... ember } | semmle.label | [EnumDeclaration,TypeDefinition] enum En ... ember } | -| type_definitions.ts:18:1:18:33 | [EnumDeclaration,TypeDefinition] enum En ... ember } | semmle.order | 78 | +| type_definitions.ts:18:1:18:33 | [EnumDeclaration,TypeDefinition] enum En ... ember } | semmle.order | 79 | | type_definitions.ts:18:6:18:22 | [VarDecl] EnumWithOneMember | semmle.label | [VarDecl] EnumWithOneMember | | type_definitions.ts:18:26:18:31 | [EnumMember,TypeDefinition] member | semmle.label | [EnumMember,TypeDefinition] member | | type_definitions.ts:18:26:18:31 | [VarDecl] member | semmle.label | [VarDecl] member | | type_definitions.ts:19:1:19:25 | [DeclStmt] let e = ... | semmle.label | [DeclStmt] let e = ... | -| type_definitions.ts:19:1:19:25 | [DeclStmt] let e = ... | semmle.order | 79 | +| type_definitions.ts:19:1:19:25 | [DeclStmt] let e = ... | semmle.order | 80 | | type_definitions.ts:19:5:19:5 | [VarDecl] e | semmle.label | [VarDecl] e | | type_definitions.ts:19:5:19:24 | [VariableDeclarator] e: EnumWithOneMember | semmle.label | [VariableDeclarator] e: EnumWithOneMember | | type_definitions.ts:19:8:19:24 | [LocalTypeAccess] EnumWithOneMember | semmle.label | [LocalTypeAccess] EnumWithOneMember | | type_definitions.ts:21:1:21:20 | [TypeAliasDeclaration,TypeDefinition] type Alias = T[]; | semmle.label | [TypeAliasDeclaration,TypeDefinition] type Alias = T[]; | -| type_definitions.ts:21:1:21:20 | [TypeAliasDeclaration,TypeDefinition] type Alias = T[]; | semmle.order | 80 | +| type_definitions.ts:21:1:21:20 | [TypeAliasDeclaration,TypeDefinition] type Alias = T[]; | semmle.order | 81 | | type_definitions.ts:21:6:21:10 | [Identifier] Alias | semmle.label | [Identifier] Alias | | type_definitions.ts:21:12:21:12 | [Identifier] T | semmle.label | [Identifier] T | | type_definitions.ts:21:12:21:12 | [TypeParameter] T | semmle.label | [TypeParameter] T | | type_definitions.ts:21:17:21:17 | [LocalTypeAccess] T | semmle.label | [LocalTypeAccess] T | | type_definitions.ts:21:17:21:19 | [ArrayTypeExpr] T[] | semmle.label | [ArrayTypeExpr] T[] | | type_definitions.ts:22:1:22:39 | [DeclStmt] let aliasForNumberArray = ... | semmle.label | [DeclStmt] let aliasForNumberArray = ... | -| type_definitions.ts:22:1:22:39 | [DeclStmt] let aliasForNumberArray = ... | semmle.order | 81 | +| type_definitions.ts:22:1:22:39 | [DeclStmt] let aliasForNumberArray = ... | semmle.order | 82 | | type_definitions.ts:22:5:22:23 | [VarDecl] aliasForNumberArray | semmle.label | [VarDecl] aliasForNumberArray | | type_definitions.ts:22:5:22:38 | [VariableDeclarator] aliasFo ... number> | semmle.label | [VariableDeclarator] aliasFo ... number> | | type_definitions.ts:22:26:22:30 | [LocalTypeAccess] Alias | semmle.label | [LocalTypeAccess] Alias | @@ -920,6 +1086,8 @@ edges | file://:0:0:0:0 | (Arguments) | tst.ts:86:27:86:31 | [VarRef] value | semmle.order | 0 | | file://:0:0:0:0 | (Arguments) | tst.ts:97:27:97:26 | [SpreadElement] ...args | semmle.label | 0 | | file://:0:0:0:0 | (Arguments) | tst.ts:97:27:97:26 | [SpreadElement] ...args | semmle.order | 0 | +| file://:0:0:0:0 | (Arguments) | tst.ts:159:31:159:35 | [Literal] "red" | semmle.label | 0 | +| file://:0:0:0:0 | (Arguments) | tst.ts:159:31:159:35 | [Literal] "red" | semmle.order | 0 | | file://:0:0:0:0 | (Parameters) | tst.ts:14:17:14:17 | [SimpleParameter] x | semmle.label | 0 | | file://:0:0:0:0 | (Parameters) | tst.ts:14:17:14:17 | [SimpleParameter] x | semmle.order | 0 | | file://:0:0:0:0 | (Parameters) | tst.ts:14:28:14:28 | [SimpleParameter] y | semmle.label | 1 | @@ -944,6 +1112,20 @@ edges | file://:0:0:0:0 | (Parameters) | tst.ts:97:27:97:26 | [SimpleParameter] args | semmle.order | 0 | | file://:0:0:0:0 | (Parameters) | tst.ts:104:16:104:16 | [SimpleParameter] s | semmle.label | 0 | | file://:0:0:0:0 | (Parameters) | tst.ts:104:16:104:16 | [SimpleParameter] s | semmle.order | 0 | +| file://:0:0:0:0 | (Parameters) | tst.ts:133:16:133:18 | [SimpleParameter] arg | semmle.label | 0 | +| file://:0:0:0:0 | (Parameters) | tst.ts:133:16:133:18 | [SimpleParameter] arg | semmle.order | 0 | +| file://:0:0:0:0 | (Parameters) | tst.ts:144:17:144:21 | [SimpleParameter] shape | semmle.label | 0 | +| file://:0:0:0:0 | (Parameters) | tst.ts:144:17:144:21 | [SimpleParameter] shape | semmle.order | 0 | +| file://:0:0:0:0 | (Parameters) | tst.ts:153:8:153:10 | [SimpleParameter] sym | semmle.label | 0 | +| file://:0:0:0:0 | (Parameters) | tst.ts:153:8:153:10 | [SimpleParameter] sym | semmle.order | 0 | +| file://:0:0:0:0 | (Parameters) | tst.ts:154:8:154:10 | [SimpleParameter] key | semmle.label | 0 | +| file://:0:0:0:0 | (Parameters) | tst.ts:154:8:154:10 | [SimpleParameter] key | semmle.order | 0 | +| file://:0:0:0:0 | (Parameters) | tst.ts:155:8:155:10 | [SimpleParameter] num | semmle.label | 0 | +| file://:0:0:0:0 | (Parameters) | tst.ts:155:8:155:10 | [SimpleParameter] num | semmle.order | 0 | +| file://:0:0:0:0 | (Parameters) | tst.ts:166:8:166:10 | [SimpleParameter] key | semmle.label | 0 | +| file://:0:0:0:0 | (Parameters) | tst.ts:166:8:166:10 | [SimpleParameter] key | semmle.order | 0 | +| file://:0:0:0:0 | (Parameters) | tst.ts:172:8:172:14 | [SimpleParameter] optName | semmle.label | 0 | +| file://:0:0:0:0 | (Parameters) | tst.ts:172:8:172:14 | [SimpleParameter] optName | semmle.order | 0 | | file://:0:0:0:0 | (Parameters) | type_alias.ts:14:10:14:17 | [SimpleParameter] property | semmle.label | 0 | | file://:0:0:0:0 | (Parameters) | type_alias.ts:14:10:14:17 | [SimpleParameter] property | semmle.order | 0 | | file://:0:0:0:0 | (Parameters) | type_alias.ts:21:19:21:21 | [SimpleParameter] key | semmle.label | 0 | @@ -1760,6 +1942,318 @@ edges | tst.ts:127:14:127:28 | [DotExpr] this.#someValue | tst.ts:127:14:127:17 | [ThisExpr] this | semmle.order | 1 | | tst.ts:127:14:127:28 | [DotExpr] this.#someValue | tst.ts:127:19:127:28 | [Label] #someValue | semmle.label | 2 | | tst.ts:127:14:127:28 | [DotExpr] this.#someValue | tst.ts:127:19:127:28 | [Label] #someValue | semmle.order | 2 | +| tst.ts:132:1:178:1 | [NamespaceDeclaration] module ... ; } } | tst.ts:132:8:132:11 | [VarDecl] TS44 | semmle.label | 1 | +| tst.ts:132:1:178:1 | [NamespaceDeclaration] module ... ; } } | tst.ts:132:8:132:11 | [VarDecl] TS44 | semmle.order | 1 | +| tst.ts:132:1:178:1 | [NamespaceDeclaration] module ... ; } } | tst.ts:133:3:138:3 | [FunctionDeclStmt] functio ... } } | semmle.label | 2 | +| tst.ts:132:1:178:1 | [NamespaceDeclaration] module ... ; } } | tst.ts:133:3:138:3 | [FunctionDeclStmt] functio ... } } | semmle.order | 2 | +| tst.ts:132:1:178:1 | [NamespaceDeclaration] module ... ; } } | tst.ts:140:3:142:47 | [TypeAliasDeclaration,TypeDefinition] type Sh ... mber }; | semmle.label | 3 | +| tst.ts:132:1:178:1 | [NamespaceDeclaration] module ... ; } } | tst.ts:140:3:142:47 | [TypeAliasDeclaration,TypeDefinition] type Sh ... mber }; | semmle.order | 3 | +| tst.ts:132:1:178:1 | [NamespaceDeclaration] module ... ; } } | tst.ts:144:3:149:3 | [FunctionDeclStmt] functio ... ; } } | semmle.label | 4 | +| tst.ts:132:1:178:1 | [NamespaceDeclaration] module ... ; } } | tst.ts:144:3:149:3 | [FunctionDeclStmt] functio ... ; } } | semmle.order | 4 | +| tst.ts:132:1:178:1 | [NamespaceDeclaration] module ... ; } } | tst.ts:151:3:162:3 | [FunctionDeclStmt] functio ... 2]; } | semmle.label | 5 | +| tst.ts:132:1:178:1 | [NamespaceDeclaration] module ... ; } } | tst.ts:151:3:162:3 | [FunctionDeclStmt] functio ... 2]; } | semmle.order | 5 | +| tst.ts:132:1:178:1 | [NamespaceDeclaration] module ... ; } } | tst.ts:164:3:177:3 | [FunctionDeclStmt] functio ... "]; } | semmle.label | 6 | +| tst.ts:132:1:178:1 | [NamespaceDeclaration] module ... ; } } | tst.ts:164:3:177:3 | [FunctionDeclStmt] functio ... "]; } | semmle.order | 6 | +| tst.ts:133:3:138:3 | [FunctionDeclStmt] functio ... } } | file://:0:0:0:0 | (Parameters) | semmle.label | 1 | +| tst.ts:133:3:138:3 | [FunctionDeclStmt] functio ... } } | file://:0:0:0:0 | (Parameters) | semmle.order | 1 | +| tst.ts:133:3:138:3 | [FunctionDeclStmt] functio ... } } | tst.ts:133:12:133:14 | [VarDecl] foo | semmle.label | 0 | +| tst.ts:133:3:138:3 | [FunctionDeclStmt] functio ... } } | tst.ts:133:12:133:14 | [VarDecl] foo | semmle.order | 0 | +| tst.ts:133:3:138:3 | [FunctionDeclStmt] functio ... } } | tst.ts:133:30:138:3 | [BlockStmt] { c ... } } | semmle.label | 5 | +| tst.ts:133:3:138:3 | [FunctionDeclStmt] functio ... } } | tst.ts:133:30:138:3 | [BlockStmt] { c ... } } | semmle.order | 5 | +| tst.ts:133:16:133:18 | [SimpleParameter] arg | tst.ts:133:21:133:27 | [KeywordTypeExpr] unknown | semmle.label | 0 | +| tst.ts:133:16:133:18 | [SimpleParameter] arg | tst.ts:133:21:133:27 | [KeywordTypeExpr] unknown | semmle.order | 0 | +| tst.ts:133:30:138:3 | [BlockStmt] { c ... } } | tst.ts:134:5:134:48 | [DeclStmt] const argIsString = ... | semmle.label | 1 | +| tst.ts:133:30:138:3 | [BlockStmt] { c ... } } | tst.ts:134:5:134:48 | [DeclStmt] const argIsString = ... | semmle.order | 1 | +| tst.ts:133:30:138:3 | [BlockStmt] { c ... } } | tst.ts:135:5:137:5 | [IfStmt] if (arg ... ; } | semmle.label | 2 | +| tst.ts:133:30:138:3 | [BlockStmt] { c ... } } | tst.ts:135:5:137:5 | [IfStmt] if (arg ... ; } | semmle.order | 2 | +| tst.ts:134:5:134:48 | [DeclStmt] const argIsString = ... | tst.ts:134:11:134:47 | [VariableDeclarator] argIsSt ... string" | semmle.label | 1 | +| tst.ts:134:5:134:48 | [DeclStmt] const argIsString = ... | tst.ts:134:11:134:47 | [VariableDeclarator] argIsSt ... string" | semmle.order | 1 | +| tst.ts:134:11:134:47 | [VariableDeclarator] argIsSt ... string" | tst.ts:134:11:134:21 | [VarDecl] argIsString | semmle.label | 1 | +| tst.ts:134:11:134:47 | [VariableDeclarator] argIsSt ... string" | tst.ts:134:11:134:21 | [VarDecl] argIsString | semmle.order | 1 | +| tst.ts:134:11:134:47 | [VariableDeclarator] argIsSt ... string" | tst.ts:134:25:134:47 | [BinaryExpr] typeof ... string" | semmle.label | 2 | +| tst.ts:134:11:134:47 | [VariableDeclarator] argIsSt ... string" | tst.ts:134:25:134:47 | [BinaryExpr] typeof ... string" | semmle.order | 2 | +| tst.ts:134:25:134:34 | [UnaryExpr] typeof arg | tst.ts:134:32:134:34 | [VarRef] arg | semmle.label | 1 | +| tst.ts:134:25:134:34 | [UnaryExpr] typeof arg | tst.ts:134:32:134:34 | [VarRef] arg | semmle.order | 1 | +| tst.ts:134:25:134:47 | [BinaryExpr] typeof ... string" | tst.ts:134:25:134:34 | [UnaryExpr] typeof arg | semmle.label | 1 | +| tst.ts:134:25:134:47 | [BinaryExpr] typeof ... string" | tst.ts:134:25:134:34 | [UnaryExpr] typeof arg | semmle.order | 1 | +| tst.ts:134:25:134:47 | [BinaryExpr] typeof ... string" | tst.ts:134:40:134:47 | [Literal] "string" | semmle.label | 2 | +| tst.ts:134:25:134:47 | [BinaryExpr] typeof ... string" | tst.ts:134:40:134:47 | [Literal] "string" | semmle.order | 2 | +| tst.ts:135:5:137:5 | [IfStmt] if (arg ... ; } | tst.ts:135:9:135:19 | [VarRef] argIsString | semmle.label | 1 | +| tst.ts:135:5:137:5 | [IfStmt] if (arg ... ; } | tst.ts:135:9:135:19 | [VarRef] argIsString | semmle.order | 1 | +| tst.ts:135:5:137:5 | [IfStmt] if (arg ... ; } | tst.ts:135:22:137:5 | [BlockStmt] { ... ; } | semmle.label | 2 | +| tst.ts:135:5:137:5 | [IfStmt] if (arg ... ; } | tst.ts:135:22:137:5 | [BlockStmt] { ... ; } | semmle.order | 2 | +| tst.ts:135:22:137:5 | [BlockStmt] { ... ; } | tst.ts:136:9:136:40 | [DeclStmt] const upper = ... | semmle.label | 1 | +| tst.ts:135:22:137:5 | [BlockStmt] { ... ; } | tst.ts:136:9:136:40 | [DeclStmt] const upper = ... | semmle.order | 1 | +| tst.ts:136:9:136:40 | [DeclStmt] const upper = ... | tst.ts:136:15:136:39 | [VariableDeclarator] upper = ... rCase() | semmle.label | 1 | +| tst.ts:136:9:136:40 | [DeclStmt] const upper = ... | tst.ts:136:15:136:39 | [VariableDeclarator] upper = ... rCase() | semmle.order | 1 | +| tst.ts:136:15:136:39 | [VariableDeclarator] upper = ... rCase() | tst.ts:136:15:136:19 | [VarDecl] upper | semmle.label | 1 | +| tst.ts:136:15:136:39 | [VariableDeclarator] upper = ... rCase() | tst.ts:136:15:136:19 | [VarDecl] upper | semmle.order | 1 | +| tst.ts:136:15:136:39 | [VariableDeclarator] upper = ... rCase() | tst.ts:136:23:136:39 | [MethodCallExpr] arg.toUpperCase() | semmle.label | 2 | +| tst.ts:136:15:136:39 | [VariableDeclarator] upper = ... rCase() | tst.ts:136:23:136:39 | [MethodCallExpr] arg.toUpperCase() | semmle.order | 2 | +| tst.ts:136:23:136:37 | [DotExpr] arg.toUpperCase | tst.ts:136:23:136:25 | [VarRef] arg | semmle.label | 1 | +| tst.ts:136:23:136:37 | [DotExpr] arg.toUpperCase | tst.ts:136:23:136:25 | [VarRef] arg | semmle.order | 1 | +| tst.ts:136:23:136:37 | [DotExpr] arg.toUpperCase | tst.ts:136:27:136:37 | [Label] toUpperCase | semmle.label | 2 | +| tst.ts:136:23:136:37 | [DotExpr] arg.toUpperCase | tst.ts:136:27:136:37 | [Label] toUpperCase | semmle.order | 2 | +| tst.ts:136:23:136:39 | [MethodCallExpr] arg.toUpperCase() | tst.ts:136:23:136:37 | [DotExpr] arg.toUpperCase | semmle.label | 0 | +| tst.ts:136:23:136:39 | [MethodCallExpr] arg.toUpperCase() | tst.ts:136:23:136:37 | [DotExpr] arg.toUpperCase | semmle.order | 0 | +| tst.ts:140:3:142:47 | [TypeAliasDeclaration,TypeDefinition] type Sh ... mber }; | tst.ts:140:8:140:12 | [Identifier] Shape | semmle.label | 1 | +| tst.ts:140:3:142:47 | [TypeAliasDeclaration,TypeDefinition] type Sh ... mber }; | tst.ts:140:8:140:12 | [Identifier] Shape | semmle.order | 1 | +| tst.ts:140:3:142:47 | [TypeAliasDeclaration,TypeDefinition] type Sh ... mber }; | tst.ts:141:7:142:46 | [UnionTypeExpr] \| { kin ... umber } | semmle.label | 2 | +| tst.ts:140:3:142:47 | [TypeAliasDeclaration,TypeDefinition] type Sh ... mber }; | tst.ts:141:7:142:46 | [UnionTypeExpr] \| { kin ... umber } | semmle.order | 2 | +| tst.ts:141:7:142:46 | [UnionTypeExpr] \| { kin ... umber } | tst.ts:141:9:141:42 | [InterfaceTypeExpr] { kind: ... umber } | semmle.label | 1 | +| tst.ts:141:7:142:46 | [UnionTypeExpr] \| { kin ... umber } | tst.ts:141:9:141:42 | [InterfaceTypeExpr] { kind: ... umber } | semmle.order | 1 | +| tst.ts:141:7:142:46 | [UnionTypeExpr] \| { kin ... umber } | tst.ts:142:9:142:46 | [InterfaceTypeExpr] { kind: ... umber } | semmle.label | 2 | +| tst.ts:141:7:142:46 | [UnionTypeExpr] \| { kin ... umber } | tst.ts:142:9:142:46 | [InterfaceTypeExpr] { kind: ... umber } | semmle.order | 2 | +| tst.ts:141:9:141:42 | [InterfaceTypeExpr] { kind: ... umber } | tst.ts:141:11:141:25 | [FieldDeclaration] kind: "circle", | semmle.label | 1 | +| tst.ts:141:9:141:42 | [InterfaceTypeExpr] { kind: ... umber } | tst.ts:141:11:141:25 | [FieldDeclaration] kind: "circle", | semmle.order | 1 | +| tst.ts:141:9:141:42 | [InterfaceTypeExpr] { kind: ... umber } | tst.ts:141:27:141:40 | [FieldDeclaration] radius: number | semmle.label | 2 | +| tst.ts:141:9:141:42 | [InterfaceTypeExpr] { kind: ... umber } | tst.ts:141:27:141:40 | [FieldDeclaration] radius: number | semmle.order | 2 | +| tst.ts:141:11:141:25 | [FieldDeclaration] kind: "circle", | tst.ts:141:11:141:14 | [Label] kind | semmle.label | 1 | +| tst.ts:141:11:141:25 | [FieldDeclaration] kind: "circle", | tst.ts:141:11:141:14 | [Label] kind | semmle.order | 1 | +| tst.ts:141:11:141:25 | [FieldDeclaration] kind: "circle", | tst.ts:141:17:141:24 | [LiteralTypeExpr] "circle" | semmle.label | 2 | +| tst.ts:141:11:141:25 | [FieldDeclaration] kind: "circle", | tst.ts:141:17:141:24 | [LiteralTypeExpr] "circle" | semmle.order | 2 | +| tst.ts:141:27:141:40 | [FieldDeclaration] radius: number | tst.ts:141:27:141:32 | [Label] radius | semmle.label | 1 | +| tst.ts:141:27:141:40 | [FieldDeclaration] radius: number | tst.ts:141:27:141:32 | [Label] radius | semmle.order | 1 | +| tst.ts:141:27:141:40 | [FieldDeclaration] radius: number | tst.ts:141:35:141:40 | [KeywordTypeExpr] number | semmle.label | 2 | +| tst.ts:141:27:141:40 | [FieldDeclaration] radius: number | tst.ts:141:35:141:40 | [KeywordTypeExpr] number | semmle.order | 2 | +| tst.ts:142:9:142:46 | [InterfaceTypeExpr] { kind: ... umber } | tst.ts:142:11:142:25 | [FieldDeclaration] kind: "square", | semmle.label | 1 | +| tst.ts:142:9:142:46 | [InterfaceTypeExpr] { kind: ... umber } | tst.ts:142:11:142:25 | [FieldDeclaration] kind: "square", | semmle.order | 1 | +| tst.ts:142:9:142:46 | [InterfaceTypeExpr] { kind: ... umber } | tst.ts:142:27:142:44 | [FieldDeclaration] sideLength: number | semmle.label | 2 | +| tst.ts:142:9:142:46 | [InterfaceTypeExpr] { kind: ... umber } | tst.ts:142:27:142:44 | [FieldDeclaration] sideLength: number | semmle.order | 2 | +| tst.ts:142:11:142:25 | [FieldDeclaration] kind: "square", | tst.ts:142:11:142:14 | [Label] kind | semmle.label | 1 | +| tst.ts:142:11:142:25 | [FieldDeclaration] kind: "square", | tst.ts:142:11:142:14 | [Label] kind | semmle.order | 1 | +| tst.ts:142:11:142:25 | [FieldDeclaration] kind: "square", | tst.ts:142:17:142:24 | [LiteralTypeExpr] "square" | semmle.label | 2 | +| tst.ts:142:11:142:25 | [FieldDeclaration] kind: "square", | tst.ts:142:17:142:24 | [LiteralTypeExpr] "square" | semmle.order | 2 | +| tst.ts:142:27:142:44 | [FieldDeclaration] sideLength: number | tst.ts:142:27:142:36 | [Label] sideLength | semmle.label | 1 | +| tst.ts:142:27:142:44 | [FieldDeclaration] sideLength: number | tst.ts:142:27:142:36 | [Label] sideLength | semmle.order | 1 | +| tst.ts:142:27:142:44 | [FieldDeclaration] sideLength: number | tst.ts:142:39:142:44 | [KeywordTypeExpr] number | semmle.label | 2 | +| tst.ts:142:27:142:44 | [FieldDeclaration] sideLength: number | tst.ts:142:39:142:44 | [KeywordTypeExpr] number | semmle.order | 2 | +| tst.ts:144:3:149:3 | [FunctionDeclStmt] functio ... ; } } | file://:0:0:0:0 | (Parameters) | semmle.label | 1 | +| tst.ts:144:3:149:3 | [FunctionDeclStmt] functio ... ; } } | file://:0:0:0:0 | (Parameters) | semmle.order | 1 | +| tst.ts:144:3:149:3 | [FunctionDeclStmt] functio ... ; } } | tst.ts:144:12:144:15 | [VarDecl] side | semmle.label | 0 | +| tst.ts:144:3:149:3 | [FunctionDeclStmt] functio ... ; } } | tst.ts:144:12:144:15 | [VarDecl] side | semmle.order | 0 | +| tst.ts:144:3:149:3 | [FunctionDeclStmt] functio ... ; } } | tst.ts:144:32:144:37 | [KeywordTypeExpr] number | semmle.label | 4 | +| tst.ts:144:3:149:3 | [FunctionDeclStmt] functio ... ; } } | tst.ts:144:32:144:37 | [KeywordTypeExpr] number | semmle.order | 4 | +| tst.ts:144:3:149:3 | [FunctionDeclStmt] functio ... ; } } | tst.ts:144:39:149:3 | [BlockStmt] { ... ; } } | semmle.label | 5 | +| tst.ts:144:3:149:3 | [FunctionDeclStmt] functio ... ; } } | tst.ts:144:39:149:3 | [BlockStmt] { ... ; } } | semmle.order | 5 | +| tst.ts:144:17:144:21 | [SimpleParameter] shape | tst.ts:144:24:144:28 | [LocalTypeAccess] Shape | semmle.label | 0 | +| tst.ts:144:17:144:21 | [SimpleParameter] shape | tst.ts:144:24:144:28 | [LocalTypeAccess] Shape | semmle.order | 0 | +| tst.ts:144:39:149:3 | [BlockStmt] { ... ; } } | tst.ts:145:7:145:29 | [DeclStmt] const { ... shape; | semmle.label | 1 | +| tst.ts:144:39:149:3 | [BlockStmt] { ... ; } } | tst.ts:145:7:145:29 | [DeclStmt] const { ... shape; | semmle.order | 1 | +| tst.ts:144:39:149:3 | [BlockStmt] { ... ; } } | tst.ts:147:7:148:39 | [IfStmt] if (kin ... ngth; } | semmle.label | 2 | +| tst.ts:144:39:149:3 | [BlockStmt] { ... ; } } | tst.ts:147:7:148:39 | [IfStmt] if (kin ... ngth; } | semmle.order | 2 | +| tst.ts:145:7:145:29 | [DeclStmt] const { ... shape; | tst.ts:145:13:145:28 | [VariableDeclarator] { kind } = shape | semmle.label | 1 | +| tst.ts:145:7:145:29 | [DeclStmt] const { ... shape; | tst.ts:145:13:145:28 | [VariableDeclarator] { kind } = shape | semmle.order | 1 | +| tst.ts:145:13:145:20 | [ObjectPattern] { kind } | tst.ts:145:15:145:18 | [PropertyPattern] kind | semmle.label | 1 | +| tst.ts:145:13:145:20 | [ObjectPattern] { kind } | tst.ts:145:15:145:18 | [PropertyPattern] kind | semmle.order | 1 | +| tst.ts:145:13:145:28 | [VariableDeclarator] { kind } = shape | tst.ts:145:13:145:20 | [ObjectPattern] { kind } | semmle.label | 1 | +| tst.ts:145:13:145:28 | [VariableDeclarator] { kind } = shape | tst.ts:145:13:145:20 | [ObjectPattern] { kind } | semmle.order | 1 | +| tst.ts:145:13:145:28 | [VariableDeclarator] { kind } = shape | tst.ts:145:24:145:28 | [VarRef] shape | semmle.label | 2 | +| tst.ts:145:13:145:28 | [VariableDeclarator] { kind } = shape | tst.ts:145:24:145:28 | [VarRef] shape | semmle.order | 2 | +| tst.ts:145:15:145:18 | [PropertyPattern] kind | tst.ts:145:15:145:18 | [Label] kind | semmle.label | 1 | +| tst.ts:145:15:145:18 | [PropertyPattern] kind | tst.ts:145:15:145:18 | [Label] kind | semmle.order | 1 | +| tst.ts:145:15:145:18 | [PropertyPattern] kind | tst.ts:145:15:145:18 | [VarDecl] kind | semmle.label | 2 | +| tst.ts:145:15:145:18 | [PropertyPattern] kind | tst.ts:145:15:145:18 | [VarDecl] kind | semmle.order | 2 | +| tst.ts:147:7:148:39 | [IfStmt] if (kin ... ngth; } | tst.ts:147:11:147:27 | [BinaryExpr] kind === "circle" | semmle.label | 1 | +| tst.ts:147:7:148:39 | [IfStmt] if (kin ... ngth; } | tst.ts:147:11:147:27 | [BinaryExpr] kind === "circle" | semmle.order | 1 | +| tst.ts:147:7:148:39 | [IfStmt] if (kin ... ngth; } | tst.ts:147:30:147:52 | [BlockStmt] { retur ... adius;} | semmle.label | 2 | +| tst.ts:147:7:148:39 | [IfStmt] if (kin ... ngth; } | tst.ts:147:30:147:52 | [BlockStmt] { retur ... adius;} | semmle.order | 2 | +| tst.ts:147:7:148:39 | [IfStmt] if (kin ... ngth; } | tst.ts:148:12:148:39 | [BlockStmt] { retur ... ngth; } | semmle.label | 3 | +| tst.ts:147:7:148:39 | [IfStmt] if (kin ... ngth; } | tst.ts:148:12:148:39 | [BlockStmt] { retur ... ngth; } | semmle.order | 3 | +| tst.ts:147:11:147:27 | [BinaryExpr] kind === "circle" | tst.ts:147:11:147:14 | [VarRef] kind | semmle.label | 1 | +| tst.ts:147:11:147:27 | [BinaryExpr] kind === "circle" | tst.ts:147:11:147:14 | [VarRef] kind | semmle.order | 1 | +| tst.ts:147:11:147:27 | [BinaryExpr] kind === "circle" | tst.ts:147:20:147:27 | [Literal] "circle" | semmle.label | 2 | +| tst.ts:147:11:147:27 | [BinaryExpr] kind === "circle" | tst.ts:147:20:147:27 | [Literal] "circle" | semmle.order | 2 | +| tst.ts:147:30:147:52 | [BlockStmt] { retur ... adius;} | tst.ts:147:32:147:51 | [ReturnStmt] return shape.radius; | semmle.label | 1 | +| tst.ts:147:30:147:52 | [BlockStmt] { retur ... adius;} | tst.ts:147:32:147:51 | [ReturnStmt] return shape.radius; | semmle.order | 1 | +| tst.ts:147:32:147:51 | [ReturnStmt] return shape.radius; | tst.ts:147:39:147:50 | [DotExpr] shape.radius | semmle.label | 1 | +| tst.ts:147:32:147:51 | [ReturnStmt] return shape.radius; | tst.ts:147:39:147:50 | [DotExpr] shape.radius | semmle.order | 1 | +| tst.ts:147:39:147:50 | [DotExpr] shape.radius | tst.ts:147:39:147:43 | [VarRef] shape | semmle.label | 1 | +| tst.ts:147:39:147:50 | [DotExpr] shape.radius | tst.ts:147:39:147:43 | [VarRef] shape | semmle.order | 1 | +| tst.ts:147:39:147:50 | [DotExpr] shape.radius | tst.ts:147:45:147:50 | [Label] radius | semmle.label | 2 | +| tst.ts:147:39:147:50 | [DotExpr] shape.radius | tst.ts:147:45:147:50 | [Label] radius | semmle.order | 2 | +| tst.ts:148:12:148:39 | [BlockStmt] { retur ... ngth; } | tst.ts:148:14:148:37 | [ReturnStmt] return ... Length; | semmle.label | 1 | +| tst.ts:148:12:148:39 | [BlockStmt] { retur ... ngth; } | tst.ts:148:14:148:37 | [ReturnStmt] return ... Length; | semmle.order | 1 | +| tst.ts:148:14:148:37 | [ReturnStmt] return ... Length; | tst.ts:148:21:148:36 | [DotExpr] shape.sideLength | semmle.label | 1 | +| tst.ts:148:14:148:37 | [ReturnStmt] return ... Length; | tst.ts:148:21:148:36 | [DotExpr] shape.sideLength | semmle.order | 1 | +| tst.ts:148:21:148:36 | [DotExpr] shape.sideLength | tst.ts:148:21:148:25 | [VarRef] shape | semmle.label | 1 | +| tst.ts:148:21:148:36 | [DotExpr] shape.sideLength | tst.ts:148:21:148:25 | [VarRef] shape | semmle.order | 1 | +| tst.ts:148:21:148:36 | [DotExpr] shape.sideLength | tst.ts:148:27:148:36 | [Label] sideLength | semmle.label | 2 | +| tst.ts:148:21:148:36 | [DotExpr] shape.sideLength | tst.ts:148:27:148:36 | [Label] sideLength | semmle.order | 2 | +| tst.ts:151:3:162:3 | [FunctionDeclStmt] functio ... 2]; } | tst.ts:151:12:151:22 | [VarDecl] symbolIndex | semmle.label | 0 | +| tst.ts:151:3:162:3 | [FunctionDeclStmt] functio ... 2]; } | tst.ts:151:12:151:22 | [VarDecl] symbolIndex | semmle.order | 0 | +| tst.ts:151:3:162:3 | [FunctionDeclStmt] functio ... 2]; } | tst.ts:151:26:162:3 | [BlockStmt] { i ... 2]; } | semmle.label | 5 | +| tst.ts:151:3:162:3 | [FunctionDeclStmt] functio ... 2]; } | tst.ts:151:26:162:3 | [BlockStmt] { i ... 2]; } | semmle.order | 5 | +| tst.ts:151:26:162:3 | [BlockStmt] { i ... 2]; } | tst.ts:152:5:156:5 | [InterfaceDeclaration,TypeDefinition] interfa ... ; } | semmle.label | 1 | +| tst.ts:151:26:162:3 | [BlockStmt] { i ... 2]; } | tst.ts:152:5:156:5 | [InterfaceDeclaration,TypeDefinition] interfa ... ; } | semmle.order | 1 | +| tst.ts:151:26:162:3 | [BlockStmt] { i ... 2]; } | tst.ts:158:5:158:28 | [DeclStmt] let colors = ... | semmle.label | 2 | +| tst.ts:151:26:162:3 | [BlockStmt] { i ... 2]; } | tst.ts:158:5:158:28 | [DeclStmt] let colors = ... | semmle.order | 2 | +| tst.ts:151:26:162:3 | [BlockStmt] { i ... 2]; } | tst.ts:159:5:159:38 | [DeclStmt] const red = ... | semmle.label | 3 | +| tst.ts:151:26:162:3 | [BlockStmt] { i ... 2]; } | tst.ts:159:5:159:38 | [DeclStmt] const red = ... | semmle.order | 3 | +| tst.ts:151:26:162:3 | [BlockStmt] { i ... 2]; } | tst.ts:160:5:160:34 | [DeclStmt] const green = ... | semmle.label | 4 | +| tst.ts:151:26:162:3 | [BlockStmt] { i ... 2]; } | tst.ts:160:5:160:34 | [DeclStmt] const green = ... | semmle.order | 4 | +| tst.ts:151:26:162:3 | [BlockStmt] { i ... 2]; } | tst.ts:161:5:161:27 | [DeclStmt] const blue = ... | semmle.label | 5 | +| tst.ts:151:26:162:3 | [BlockStmt] { i ... 2]; } | tst.ts:161:5:161:27 | [DeclStmt] const blue = ... | semmle.order | 5 | +| tst.ts:152:5:156:5 | [InterfaceDeclaration,TypeDefinition] interfa ... ; } | tst.ts:152:15:152:20 | [Identifier] Colors | semmle.label | 1 | +| tst.ts:152:5:156:5 | [InterfaceDeclaration,TypeDefinition] interfa ... ; } | tst.ts:152:15:152:20 | [Identifier] Colors | semmle.order | 1 | +| tst.ts:152:5:156:5 | [InterfaceDeclaration,TypeDefinition] interfa ... ; } | tst.ts:153:7:153:28 | [IndexSignature] [sym: s ... number; | semmle.label | 2 | +| tst.ts:152:5:156:5 | [InterfaceDeclaration,TypeDefinition] interfa ... ; } | tst.ts:153:7:153:28 | [IndexSignature] [sym: s ... number; | semmle.order | 2 | +| tst.ts:152:5:156:5 | [InterfaceDeclaration,TypeDefinition] interfa ... ; } | tst.ts:154:7:154:28 | [IndexSignature] [key: s ... string; | semmle.label | 3 | +| tst.ts:152:5:156:5 | [InterfaceDeclaration,TypeDefinition] interfa ... ; } | tst.ts:154:7:154:28 | [IndexSignature] [key: s ... string; | semmle.order | 3 | +| tst.ts:152:5:156:5 | [InterfaceDeclaration,TypeDefinition] interfa ... ; } | tst.ts:155:7:155:29 | [IndexSignature] [num: n ... oolean; | semmle.label | 4 | +| tst.ts:152:5:156:5 | [InterfaceDeclaration,TypeDefinition] interfa ... ; } | tst.ts:155:7:155:29 | [IndexSignature] [num: n ... oolean; | semmle.order | 4 | +| tst.ts:153:7:153:28 | [FunctionExpr] [sym: s ... number; | file://:0:0:0:0 | (Parameters) | semmle.label | 1 | +| tst.ts:153:7:153:28 | [FunctionExpr] [sym: s ... number; | file://:0:0:0:0 | (Parameters) | semmle.order | 1 | +| tst.ts:153:7:153:28 | [FunctionExpr] [sym: s ... number; | tst.ts:153:22:153:27 | [KeywordTypeExpr] number | semmle.label | 4 | +| tst.ts:153:7:153:28 | [FunctionExpr] [sym: s ... number; | tst.ts:153:22:153:27 | [KeywordTypeExpr] number | semmle.order | 4 | +| tst.ts:153:7:153:28 | [IndexSignature] [sym: s ... number; | tst.ts:153:7:153:28 | [FunctionExpr] [sym: s ... number; | semmle.label | 1 | +| tst.ts:153:7:153:28 | [IndexSignature] [sym: s ... number; | tst.ts:153:7:153:28 | [FunctionExpr] [sym: s ... number; | semmle.order | 1 | +| tst.ts:153:8:153:10 | [SimpleParameter] sym | tst.ts:153:13:153:18 | [KeywordTypeExpr] symbol | semmle.label | 0 | +| tst.ts:153:8:153:10 | [SimpleParameter] sym | tst.ts:153:13:153:18 | [KeywordTypeExpr] symbol | semmle.order | 0 | +| tst.ts:154:7:154:28 | [FunctionExpr] [key: s ... string; | file://:0:0:0:0 | (Parameters) | semmle.label | 1 | +| tst.ts:154:7:154:28 | [FunctionExpr] [key: s ... string; | file://:0:0:0:0 | (Parameters) | semmle.order | 1 | +| tst.ts:154:7:154:28 | [FunctionExpr] [key: s ... string; | tst.ts:154:22:154:27 | [KeywordTypeExpr] string | semmle.label | 4 | +| tst.ts:154:7:154:28 | [FunctionExpr] [key: s ... string; | tst.ts:154:22:154:27 | [KeywordTypeExpr] string | semmle.order | 4 | +| tst.ts:154:7:154:28 | [IndexSignature] [key: s ... string; | tst.ts:154:7:154:28 | [FunctionExpr] [key: s ... string; | semmle.label | 1 | +| tst.ts:154:7:154:28 | [IndexSignature] [key: s ... string; | tst.ts:154:7:154:28 | [FunctionExpr] [key: s ... string; | semmle.order | 1 | +| tst.ts:154:8:154:10 | [SimpleParameter] key | tst.ts:154:13:154:18 | [KeywordTypeExpr] string | semmle.label | 0 | +| tst.ts:154:8:154:10 | [SimpleParameter] key | tst.ts:154:13:154:18 | [KeywordTypeExpr] string | semmle.order | 0 | +| tst.ts:155:7:155:29 | [FunctionExpr] [num: n ... oolean; | file://:0:0:0:0 | (Parameters) | semmle.label | 1 | +| tst.ts:155:7:155:29 | [FunctionExpr] [num: n ... oolean; | file://:0:0:0:0 | (Parameters) | semmle.order | 1 | +| tst.ts:155:7:155:29 | [FunctionExpr] [num: n ... oolean; | tst.ts:155:22:155:28 | [KeywordTypeExpr] boolean | semmle.label | 4 | +| tst.ts:155:7:155:29 | [FunctionExpr] [num: n ... oolean; | tst.ts:155:22:155:28 | [KeywordTypeExpr] boolean | semmle.order | 4 | +| tst.ts:155:7:155:29 | [IndexSignature] [num: n ... oolean; | tst.ts:155:7:155:29 | [FunctionExpr] [num: n ... oolean; | semmle.label | 1 | +| tst.ts:155:7:155:29 | [IndexSignature] [num: n ... oolean; | tst.ts:155:7:155:29 | [FunctionExpr] [num: n ... oolean; | semmle.order | 1 | +| tst.ts:155:8:155:10 | [SimpleParameter] num | tst.ts:155:13:155:18 | [KeywordTypeExpr] number | semmle.label | 0 | +| tst.ts:155:8:155:10 | [SimpleParameter] num | tst.ts:155:13:155:18 | [KeywordTypeExpr] number | semmle.order | 0 | +| tst.ts:158:5:158:28 | [DeclStmt] let colors = ... | tst.ts:158:9:158:27 | [VariableDeclarator] colors: Colors = {} | semmle.label | 1 | +| tst.ts:158:5:158:28 | [DeclStmt] let colors = ... | tst.ts:158:9:158:27 | [VariableDeclarator] colors: Colors = {} | semmle.order | 1 | +| tst.ts:158:9:158:27 | [VariableDeclarator] colors: Colors = {} | tst.ts:158:9:158:14 | [VarDecl] colors | semmle.label | 1 | +| tst.ts:158:9:158:27 | [VariableDeclarator] colors: Colors = {} | tst.ts:158:9:158:14 | [VarDecl] colors | semmle.order | 1 | +| tst.ts:158:9:158:27 | [VariableDeclarator] colors: Colors = {} | tst.ts:158:17:158:22 | [LocalTypeAccess] Colors | semmle.label | 2 | +| tst.ts:158:9:158:27 | [VariableDeclarator] colors: Colors = {} | tst.ts:158:17:158:22 | [LocalTypeAccess] Colors | semmle.order | 2 | +| tst.ts:158:9:158:27 | [VariableDeclarator] colors: Colors = {} | tst.ts:158:26:158:27 | [ObjectExpr] {} | semmle.label | 3 | +| tst.ts:158:9:158:27 | [VariableDeclarator] colors: Colors = {} | tst.ts:158:26:158:27 | [ObjectExpr] {} | semmle.order | 3 | +| tst.ts:159:5:159:38 | [DeclStmt] const red = ... | tst.ts:159:11:159:37 | [VariableDeclarator] red = c ... "red")] | semmle.label | 1 | +| tst.ts:159:5:159:38 | [DeclStmt] const red = ... | tst.ts:159:11:159:37 | [VariableDeclarator] red = c ... "red")] | semmle.order | 1 | +| tst.ts:159:11:159:37 | [VariableDeclarator] red = c ... "red")] | tst.ts:159:11:159:13 | [VarDecl] red | semmle.label | 1 | +| tst.ts:159:11:159:37 | [VariableDeclarator] red = c ... "red")] | tst.ts:159:11:159:13 | [VarDecl] red | semmle.order | 1 | +| tst.ts:159:11:159:37 | [VariableDeclarator] red = c ... "red")] | tst.ts:159:17:159:37 | [IndexExpr] colors[ ... "red")] | semmle.label | 2 | +| tst.ts:159:11:159:37 | [VariableDeclarator] red = c ... "red")] | tst.ts:159:17:159:37 | [IndexExpr] colors[ ... "red")] | semmle.order | 2 | +| tst.ts:159:17:159:37 | [IndexExpr] colors[ ... "red")] | tst.ts:159:17:159:22 | [VarRef] colors | semmle.label | 1 | +| tst.ts:159:17:159:37 | [IndexExpr] colors[ ... "red")] | tst.ts:159:17:159:22 | [VarRef] colors | semmle.order | 1 | +| tst.ts:159:17:159:37 | [IndexExpr] colors[ ... "red")] | tst.ts:159:24:159:36 | [CallExpr] Symbol("red") | semmle.label | 2 | +| tst.ts:159:17:159:37 | [IndexExpr] colors[ ... "red")] | tst.ts:159:24:159:36 | [CallExpr] Symbol("red") | semmle.order | 2 | +| tst.ts:159:24:159:36 | [CallExpr] Symbol("red") | file://:0:0:0:0 | (Arguments) | semmle.label | 1 | +| tst.ts:159:24:159:36 | [CallExpr] Symbol("red") | file://:0:0:0:0 | (Arguments) | semmle.order | 1 | +| tst.ts:159:24:159:36 | [CallExpr] Symbol("red") | tst.ts:159:24:159:29 | [VarRef] Symbol | semmle.label | 0 | +| tst.ts:159:24:159:36 | [CallExpr] Symbol("red") | tst.ts:159:24:159:29 | [VarRef] Symbol | semmle.order | 0 | +| tst.ts:160:5:160:34 | [DeclStmt] const green = ... | tst.ts:160:11:160:33 | [VariableDeclarator] green = ... green"] | semmle.label | 1 | +| tst.ts:160:5:160:34 | [DeclStmt] const green = ... | tst.ts:160:11:160:33 | [VariableDeclarator] green = ... green"] | semmle.order | 1 | +| tst.ts:160:11:160:33 | [VariableDeclarator] green = ... green"] | tst.ts:160:11:160:15 | [VarDecl] green | semmle.label | 1 | +| tst.ts:160:11:160:33 | [VariableDeclarator] green = ... green"] | tst.ts:160:11:160:15 | [VarDecl] green | semmle.order | 1 | +| tst.ts:160:11:160:33 | [VariableDeclarator] green = ... green"] | tst.ts:160:19:160:33 | [IndexExpr] colors["green"] | semmle.label | 2 | +| tst.ts:160:11:160:33 | [VariableDeclarator] green = ... green"] | tst.ts:160:19:160:33 | [IndexExpr] colors["green"] | semmle.order | 2 | +| tst.ts:160:19:160:33 | [IndexExpr] colors["green"] | tst.ts:160:19:160:24 | [VarRef] colors | semmle.label | 1 | +| tst.ts:160:19:160:33 | [IndexExpr] colors["green"] | tst.ts:160:19:160:24 | [VarRef] colors | semmle.order | 1 | +| tst.ts:160:19:160:33 | [IndexExpr] colors["green"] | tst.ts:160:26:160:32 | [Literal] "green" | semmle.label | 2 | +| tst.ts:160:19:160:33 | [IndexExpr] colors["green"] | tst.ts:160:26:160:32 | [Literal] "green" | semmle.order | 2 | +| tst.ts:161:5:161:27 | [DeclStmt] const blue = ... | tst.ts:161:11:161:26 | [VariableDeclarator] blue = colors[2] | semmle.label | 1 | +| tst.ts:161:5:161:27 | [DeclStmt] const blue = ... | tst.ts:161:11:161:26 | [VariableDeclarator] blue = colors[2] | semmle.order | 1 | +| tst.ts:161:11:161:26 | [VariableDeclarator] blue = colors[2] | tst.ts:161:11:161:14 | [VarDecl] blue | semmle.label | 1 | +| tst.ts:161:11:161:26 | [VariableDeclarator] blue = colors[2] | tst.ts:161:11:161:14 | [VarDecl] blue | semmle.order | 1 | +| tst.ts:161:11:161:26 | [VariableDeclarator] blue = colors[2] | tst.ts:161:18:161:26 | [IndexExpr] colors[2] | semmle.label | 2 | +| tst.ts:161:11:161:26 | [VariableDeclarator] blue = colors[2] | tst.ts:161:18:161:26 | [IndexExpr] colors[2] | semmle.order | 2 | +| tst.ts:161:18:161:26 | [IndexExpr] colors[2] | tst.ts:161:18:161:23 | [VarRef] colors | semmle.label | 1 | +| tst.ts:161:18:161:26 | [IndexExpr] colors[2] | tst.ts:161:18:161:23 | [VarRef] colors | semmle.order | 1 | +| tst.ts:161:18:161:26 | [IndexExpr] colors[2] | tst.ts:161:25:161:25 | [Literal] 2 | semmle.label | 2 | +| tst.ts:161:18:161:26 | [IndexExpr] colors[2] | tst.ts:161:25:161:25 | [Literal] 2 | semmle.order | 2 | +| tst.ts:164:3:177:3 | [FunctionDeclStmt] functio ... "]; } | tst.ts:164:12:164:29 | [VarDecl] stringPatternIndex | semmle.label | 0 | +| tst.ts:164:3:177:3 | [FunctionDeclStmt] functio ... "]; } | tst.ts:164:12:164:29 | [VarDecl] stringPatternIndex | semmle.order | 0 | +| tst.ts:164:3:177:3 | [FunctionDeclStmt] functio ... "]; } | tst.ts:164:33:177:3 | [BlockStmt] { i ... "]; } | semmle.label | 5 | +| tst.ts:164:3:177:3 | [FunctionDeclStmt] functio ... "]; } | tst.ts:164:33:177:3 | [BlockStmt] { i ... "]; } | semmle.order | 5 | +| tst.ts:164:33:177:3 | [BlockStmt] { i ... "]; } | tst.ts:165:5:167:5 | [InterfaceDeclaration,TypeDefinition] interfa ... ; } | semmle.label | 1 | +| tst.ts:164:33:177:3 | [BlockStmt] { i ... "]; } | tst.ts:165:5:167:5 | [InterfaceDeclaration,TypeDefinition] interfa ... ; } | semmle.order | 1 | +| tst.ts:164:33:177:3 | [BlockStmt] { i ... "]; } | tst.ts:168:5:168:23 | [DeclStmt] var bla = ... | semmle.label | 2 | +| tst.ts:164:33:177:3 | [BlockStmt] { i ... "]; } | tst.ts:168:5:168:23 | [DeclStmt] var bla = ... | semmle.order | 2 | +| tst.ts:164:33:177:3 | [BlockStmt] { i ... "]; } | tst.ts:169:5:169:29 | [DeclStmt] const bar = ... | semmle.label | 3 | +| tst.ts:164:33:177:3 | [BlockStmt] { i ... "]; } | tst.ts:169:5:169:29 | [DeclStmt] const bar = ... | semmle.order | 3 | +| tst.ts:164:33:177:3 | [BlockStmt] { i ... "]; } | tst.ts:171:5:173:5 | [InterfaceDeclaration,TypeDefinition] interfa ... ; } | semmle.label | 4 | +| tst.ts:164:33:177:3 | [BlockStmt] { i ... "]; } | tst.ts:171:5:173:5 | [InterfaceDeclaration,TypeDefinition] interfa ... ; } | semmle.order | 4 | +| tst.ts:164:33:177:3 | [BlockStmt] { i ... "]; } | tst.ts:175:5:175:26 | [DeclStmt] const data = ... | semmle.label | 5 | +| tst.ts:164:33:177:3 | [BlockStmt] { i ... "]; } | tst.ts:175:5:175:26 | [DeclStmt] const data = ... | semmle.order | 5 | +| tst.ts:164:33:177:3 | [BlockStmt] { i ... "]; } | tst.ts:176:5:176:28 | [DeclStmt] const baz = ... | semmle.label | 6 | +| tst.ts:164:33:177:3 | [BlockStmt] { i ... "]; } | tst.ts:176:5:176:28 | [DeclStmt] const baz = ... | semmle.order | 6 | +| tst.ts:165:5:167:5 | [InterfaceDeclaration,TypeDefinition] interfa ... ; } | tst.ts:165:15:165:17 | [Identifier] Foo | semmle.label | 1 | +| tst.ts:165:5:167:5 | [InterfaceDeclaration,TypeDefinition] interfa ... ; } | tst.ts:165:15:165:17 | [Identifier] Foo | semmle.order | 1 | +| tst.ts:165:5:167:5 | [InterfaceDeclaration,TypeDefinition] interfa ... ; } | tst.ts:166:7:166:37 | [IndexSignature] [key: ` ... number; | semmle.label | 2 | +| tst.ts:165:5:167:5 | [InterfaceDeclaration,TypeDefinition] interfa ... ; } | tst.ts:166:7:166:37 | [IndexSignature] [key: ` ... number; | semmle.order | 2 | +| tst.ts:166:7:166:37 | [FunctionExpr] [key: ` ... number; | file://:0:0:0:0 | (Parameters) | semmle.label | 1 | +| tst.ts:166:7:166:37 | [FunctionExpr] [key: ` ... number; | file://:0:0:0:0 | (Parameters) | semmle.order | 1 | +| tst.ts:166:7:166:37 | [FunctionExpr] [key: ` ... number; | tst.ts:166:31:166:36 | [KeywordTypeExpr] number | semmle.label | 4 | +| tst.ts:166:7:166:37 | [FunctionExpr] [key: ` ... number; | tst.ts:166:31:166:36 | [KeywordTypeExpr] number | semmle.order | 4 | +| tst.ts:166:7:166:37 | [IndexSignature] [key: ` ... number; | tst.ts:166:7:166:37 | [FunctionExpr] [key: ` ... number; | semmle.label | 1 | +| tst.ts:166:7:166:37 | [IndexSignature] [key: ` ... number; | tst.ts:166:7:166:37 | [FunctionExpr] [key: ` ... number; | semmle.order | 1 | +| tst.ts:166:8:166:10 | [SimpleParameter] key | tst.ts:166:13:166:27 | [TemplateLiteralTypeExpr] `foo-${number}` | semmle.label | 0 | +| tst.ts:166:8:166:10 | [SimpleParameter] key | tst.ts:166:13:166:27 | [TemplateLiteralTypeExpr] `foo-${number}` | semmle.order | 0 | +| tst.ts:166:13:166:27 | [TemplateLiteralTypeExpr] `foo-${number}` | tst.ts:166:14:166:17 | [LiteralTypeExpr] foo- | semmle.label | 1 | +| tst.ts:166:13:166:27 | [TemplateLiteralTypeExpr] `foo-${number}` | tst.ts:166:14:166:17 | [LiteralTypeExpr] foo- | semmle.order | 1 | +| tst.ts:166:13:166:27 | [TemplateLiteralTypeExpr] `foo-${number}` | tst.ts:166:20:166:25 | [KeywordTypeExpr] number | semmle.label | 2 | +| tst.ts:166:13:166:27 | [TemplateLiteralTypeExpr] `foo-${number}` | tst.ts:166:20:166:25 | [KeywordTypeExpr] number | semmle.order | 2 | +| tst.ts:168:5:168:23 | [DeclStmt] var bla = ... | tst.ts:168:9:168:22 | [VariableDeclarator] bla : Foo = {} | semmle.label | 1 | +| tst.ts:168:5:168:23 | [DeclStmt] var bla = ... | tst.ts:168:9:168:22 | [VariableDeclarator] bla : Foo = {} | semmle.order | 1 | +| tst.ts:168:9:168:22 | [VariableDeclarator] bla : Foo = {} | tst.ts:168:9:168:11 | [VarDecl] bla | semmle.label | 1 | +| tst.ts:168:9:168:22 | [VariableDeclarator] bla : Foo = {} | tst.ts:168:9:168:11 | [VarDecl] bla | semmle.order | 1 | +| tst.ts:168:9:168:22 | [VariableDeclarator] bla : Foo = {} | tst.ts:168:15:168:17 | [LocalTypeAccess] Foo | semmle.label | 2 | +| tst.ts:168:9:168:22 | [VariableDeclarator] bla : Foo = {} | tst.ts:168:15:168:17 | [LocalTypeAccess] Foo | semmle.order | 2 | +| tst.ts:168:9:168:22 | [VariableDeclarator] bla : Foo = {} | tst.ts:168:21:168:22 | [ObjectExpr] {} | semmle.label | 3 | +| tst.ts:168:9:168:22 | [VariableDeclarator] bla : Foo = {} | tst.ts:168:21:168:22 | [ObjectExpr] {} | semmle.order | 3 | +| tst.ts:169:5:169:29 | [DeclStmt] const bar = ... | tst.ts:169:11:169:28 | [VariableDeclarator] bar = bla[`foo-1`] | semmle.label | 1 | +| tst.ts:169:5:169:29 | [DeclStmt] const bar = ... | tst.ts:169:11:169:28 | [VariableDeclarator] bar = bla[`foo-1`] | semmle.order | 1 | +| tst.ts:169:11:169:28 | [VariableDeclarator] bar = bla[`foo-1`] | tst.ts:169:11:169:13 | [VarDecl] bar | semmle.label | 1 | +| tst.ts:169:11:169:28 | [VariableDeclarator] bar = bla[`foo-1`] | tst.ts:169:11:169:13 | [VarDecl] bar | semmle.order | 1 | +| tst.ts:169:11:169:28 | [VariableDeclarator] bar = bla[`foo-1`] | tst.ts:169:17:169:28 | [IndexExpr] bla[`foo-1`] | semmle.label | 2 | +| tst.ts:169:11:169:28 | [VariableDeclarator] bar = bla[`foo-1`] | tst.ts:169:17:169:28 | [IndexExpr] bla[`foo-1`] | semmle.order | 2 | +| tst.ts:169:17:169:28 | [IndexExpr] bla[`foo-1`] | tst.ts:169:17:169:19 | [VarRef] bla | semmle.label | 1 | +| tst.ts:169:17:169:28 | [IndexExpr] bla[`foo-1`] | tst.ts:169:17:169:19 | [VarRef] bla | semmle.order | 1 | +| tst.ts:169:17:169:28 | [IndexExpr] bla[`foo-1`] | tst.ts:169:21:169:27 | [TemplateLiteral] `foo-1` | semmle.label | 2 | +| tst.ts:169:17:169:28 | [IndexExpr] bla[`foo-1`] | tst.ts:169:21:169:27 | [TemplateLiteral] `foo-1` | semmle.order | 2 | +| tst.ts:169:21:169:27 | [TemplateLiteral] `foo-1` | tst.ts:169:21:169:27 | [TemplateElement] `foo-1` | semmle.label | 1 | +| tst.ts:169:21:169:27 | [TemplateLiteral] `foo-1` | tst.ts:169:21:169:27 | [TemplateElement] `foo-1` | semmle.order | 1 | +| tst.ts:171:5:173:5 | [InterfaceDeclaration,TypeDefinition] interfa ... ; } | tst.ts:171:15:171:18 | [Identifier] Data | semmle.label | 1 | +| tst.ts:171:5:173:5 | [InterfaceDeclaration,TypeDefinition] interfa ... ; } | tst.ts:171:15:171:18 | [Identifier] Data | semmle.order | 1 | +| tst.ts:171:5:173:5 | [InterfaceDeclaration,TypeDefinition] interfa ... ; } | tst.ts:172:7:172:42 | [IndexSignature] [optNam ... oolean; | semmle.label | 2 | +| tst.ts:171:5:173:5 | [InterfaceDeclaration,TypeDefinition] interfa ... ; } | tst.ts:172:7:172:42 | [IndexSignature] [optNam ... oolean; | semmle.order | 2 | +| tst.ts:172:7:172:42 | [FunctionExpr] [optNam ... oolean; | file://:0:0:0:0 | (Parameters) | semmle.label | 1 | +| tst.ts:172:7:172:42 | [FunctionExpr] [optNam ... oolean; | file://:0:0:0:0 | (Parameters) | semmle.order | 1 | +| tst.ts:172:7:172:42 | [FunctionExpr] [optNam ... oolean; | tst.ts:172:35:172:41 | [KeywordTypeExpr] boolean | semmle.label | 4 | +| tst.ts:172:7:172:42 | [FunctionExpr] [optNam ... oolean; | tst.ts:172:35:172:41 | [KeywordTypeExpr] boolean | semmle.order | 4 | +| tst.ts:172:7:172:42 | [IndexSignature] [optNam ... oolean; | tst.ts:172:7:172:42 | [FunctionExpr] [optNam ... oolean; | semmle.label | 1 | +| tst.ts:172:7:172:42 | [IndexSignature] [optNam ... oolean; | tst.ts:172:7:172:42 | [FunctionExpr] [optNam ... oolean; | semmle.order | 1 | +| tst.ts:172:8:172:14 | [SimpleParameter] optName | tst.ts:172:17:172:31 | [UnionTypeExpr] string \| symbol | semmle.label | 0 | +| tst.ts:172:8:172:14 | [SimpleParameter] optName | tst.ts:172:17:172:31 | [UnionTypeExpr] string \| symbol | semmle.order | 0 | +| tst.ts:172:17:172:31 | [UnionTypeExpr] string \| symbol | tst.ts:172:17:172:22 | [KeywordTypeExpr] string | semmle.label | 1 | +| tst.ts:172:17:172:31 | [UnionTypeExpr] string \| symbol | tst.ts:172:17:172:22 | [KeywordTypeExpr] string | semmle.order | 1 | +| tst.ts:172:17:172:31 | [UnionTypeExpr] string \| symbol | tst.ts:172:26:172:31 | [KeywordTypeExpr] symbol | semmle.label | 2 | +| tst.ts:172:17:172:31 | [UnionTypeExpr] string \| symbol | tst.ts:172:26:172:31 | [KeywordTypeExpr] symbol | semmle.order | 2 | +| tst.ts:175:5:175:26 | [DeclStmt] const data = ... | tst.ts:175:11:175:25 | [VariableDeclarator] data: Data = {} | semmle.label | 1 | +| tst.ts:175:5:175:26 | [DeclStmt] const data = ... | tst.ts:175:11:175:25 | [VariableDeclarator] data: Data = {} | semmle.order | 1 | +| tst.ts:175:11:175:25 | [VariableDeclarator] data: Data = {} | tst.ts:175:11:175:14 | [VarDecl] data | semmle.label | 1 | +| tst.ts:175:11:175:25 | [VariableDeclarator] data: Data = {} | tst.ts:175:11:175:14 | [VarDecl] data | semmle.order | 1 | +| tst.ts:175:11:175:25 | [VariableDeclarator] data: Data = {} | tst.ts:175:17:175:20 | [LocalTypeAccess] Data | semmle.label | 2 | +| tst.ts:175:11:175:25 | [VariableDeclarator] data: Data = {} | tst.ts:175:17:175:20 | [LocalTypeAccess] Data | semmle.order | 2 | +| tst.ts:175:11:175:25 | [VariableDeclarator] data: Data = {} | tst.ts:175:24:175:25 | [ObjectExpr] {} | semmle.label | 3 | +| tst.ts:175:11:175:25 | [VariableDeclarator] data: Data = {} | tst.ts:175:24:175:25 | [ObjectExpr] {} | semmle.order | 3 | +| tst.ts:176:5:176:28 | [DeclStmt] const baz = ... | tst.ts:176:11:176:27 | [VariableDeclarator] baz = data["foo"] | semmle.label | 1 | +| tst.ts:176:5:176:28 | [DeclStmt] const baz = ... | tst.ts:176:11:176:27 | [VariableDeclarator] baz = data["foo"] | semmle.order | 1 | +| tst.ts:176:11:176:27 | [VariableDeclarator] baz = data["foo"] | tst.ts:176:11:176:13 | [VarDecl] baz | semmle.label | 1 | +| tst.ts:176:11:176:27 | [VariableDeclarator] baz = data["foo"] | tst.ts:176:11:176:13 | [VarDecl] baz | semmle.order | 1 | +| tst.ts:176:11:176:27 | [VariableDeclarator] baz = data["foo"] | tst.ts:176:17:176:27 | [IndexExpr] data["foo"] | semmle.label | 2 | +| tst.ts:176:11:176:27 | [VariableDeclarator] baz = data["foo"] | tst.ts:176:17:176:27 | [IndexExpr] data["foo"] | semmle.order | 2 | +| tst.ts:176:17:176:27 | [IndexExpr] data["foo"] | tst.ts:176:17:176:20 | [VarRef] data | semmle.label | 1 | +| tst.ts:176:17:176:27 | [IndexExpr] data["foo"] | tst.ts:176:17:176:20 | [VarRef] data | semmle.order | 1 | +| tst.ts:176:17:176:27 | [IndexExpr] data["foo"] | tst.ts:176:22:176:26 | [Literal] "foo" | semmle.label | 2 | +| tst.ts:176:17:176:27 | [IndexExpr] data["foo"] | tst.ts:176:22:176:26 | [Literal] "foo" | semmle.order | 2 | | type_alias.ts:1:1:1:17 | [TypeAliasDeclaration,TypeDefinition] type B = boolean; | type_alias.ts:1:6:1:6 | [Identifier] B | semmle.label | 1 | | type_alias.ts:1:1:1:17 | [TypeAliasDeclaration,TypeDefinition] type B = boolean; | type_alias.ts:1:6:1:6 | [Identifier] B | semmle.order | 1 | | type_alias.ts:1:1:1:17 | [TypeAliasDeclaration,TypeDefinition] type B = boolean; | type_alias.ts:1:10:1:16 | [KeywordTypeExpr] boolean | semmle.label | 2 | diff --git a/javascript/ql/test/library-tests/TypeScript/Types/tests.expected b/javascript/ql/test/library-tests/TypeScript/Types/tests.expected index 187c0c7e6ce..bee3610f28d 100644 --- a/javascript/ql/test/library-tests/TypeScript/Types/tests.expected +++ b/javascript/ql/test/library-tests/TypeScript/Types/tests.expected @@ -175,6 +175,78 @@ getExprType | tst.ts:126:7:126:22 | this.#someMethod | () => number | | tst.ts:126:7:126:24 | this.#someMethod() | number | | tst.ts:127:14:127:28 | this.#someValue | number | +| tst.ts:132:8:132:11 | TS44 | typeof TS44 in library-tests/TypeScript/Types/tst.ts | +| tst.ts:133:12:133:14 | foo | (arg: unknown) => void | +| tst.ts:133:16:133:18 | arg | unknown | +| tst.ts:134:11:134:21 | argIsString | boolean | +| tst.ts:134:25:134:34 | typeof arg | "string" \| "number" \| "bigint" \| "boolean" \| "s... | +| tst.ts:134:25:134:47 | typeof ... string" | boolean | +| tst.ts:134:32:134:34 | arg | unknown | +| tst.ts:134:40:134:47 | "string" | "string" | +| tst.ts:135:9:135:19 | argIsString | boolean | +| tst.ts:136:15:136:19 | upper | string | +| tst.ts:136:23:136:25 | arg | string | +| tst.ts:136:23:136:37 | arg.toUpperCase | () => string | +| tst.ts:136:23:136:39 | arg.toUpperCase() | string | +| tst.ts:136:27:136:37 | toUpperCase | () => string | +| tst.ts:141:11:141:14 | kind | "circle" | +| tst.ts:141:27:141:32 | radius | number | +| tst.ts:142:11:142:14 | kind | "square" | +| tst.ts:142:27:142:36 | sideLength | number | +| tst.ts:144:12:144:15 | side | (shape: Shape) => number | +| tst.ts:144:17:144:21 | shape | Shape | +| tst.ts:145:15:145:18 | kind | "circle" \| "square" | +| tst.ts:145:15:145:18 | kind | "circle" \| "square" | +| tst.ts:145:24:145:28 | shape | Shape | +| tst.ts:147:11:147:14 | kind | "circle" \| "square" | +| tst.ts:147:11:147:27 | kind === "circle" | boolean | +| tst.ts:147:20:147:27 | "circle" | "circle" | +| tst.ts:147:39:147:43 | shape | { kind: "circle"; radius: number; } | +| tst.ts:147:39:147:50 | shape.radius | number | +| tst.ts:147:45:147:50 | radius | number | +| tst.ts:148:21:148:25 | shape | { kind: "square"; sideLength: number; } | +| tst.ts:148:21:148:36 | shape.sideLength | number | +| tst.ts:148:27:148:36 | sideLength | number | +| tst.ts:151:12:151:22 | symbolIndex | () => void | +| tst.ts:153:7:153:28 | [sym: s ... number; | any | +| tst.ts:153:8:153:10 | sym | symbol | +| tst.ts:154:7:154:28 | [key: s ... string; | any | +| tst.ts:154:8:154:10 | key | string | +| tst.ts:155:7:155:29 | [num: n ... oolean; | any | +| tst.ts:155:8:155:10 | num | number | +| tst.ts:158:9:158:14 | colors | Colors | +| tst.ts:158:26:158:27 | {} | Colors | +| tst.ts:159:11:159:13 | red | number | +| tst.ts:159:17:159:22 | colors | Colors | +| tst.ts:159:17:159:37 | colors[ ... "red")] | number | +| tst.ts:159:24:159:29 | Symbol | SymbolConstructor | +| tst.ts:159:24:159:36 | Symbol("red") | symbol | +| tst.ts:159:31:159:35 | "red" | "red" | +| tst.ts:160:11:160:15 | green | string | +| tst.ts:160:19:160:24 | colors | Colors | +| tst.ts:160:19:160:33 | colors["green"] | string | +| tst.ts:160:26:160:32 | "green" | "green" | +| tst.ts:161:11:161:14 | blue | boolean | +| tst.ts:161:18:161:23 | colors | Colors | +| tst.ts:161:18:161:26 | colors[2] | boolean | +| tst.ts:161:25:161:25 | 2 | 2 | +| tst.ts:164:12:164:29 | stringPatternIndex | () => void | +| tst.ts:166:7:166:37 | [key: ` ... number; | any | +| tst.ts:168:9:168:11 | bla | Foo | +| tst.ts:168:21:168:22 | {} | Foo | +| tst.ts:169:11:169:13 | bar | number | +| tst.ts:169:17:169:19 | bla | Foo | +| tst.ts:169:17:169:28 | bla[`foo-1`] | number | +| tst.ts:169:21:169:27 | `foo-1` | "foo-1" | +| tst.ts:169:21:169:27 | `foo-1` | "foo-1" | +| tst.ts:172:7:172:42 | [optNam ... oolean; | any | +| tst.ts:172:8:172:14 | optName | string \| symbol | +| tst.ts:175:11:175:14 | data | Data | +| tst.ts:175:24:175:25 | {} | Data | +| tst.ts:176:11:176:13 | baz | boolean | +| tst.ts:176:17:176:20 | data | Data | +| tst.ts:176:17:176:27 | data["foo"] | boolean | +| tst.ts:176:22:176:26 | "foo" | "foo" | | type_alias.ts:3:5:3:5 | b | boolean | | type_alias.ts:7:5:7:5 | c | ValueOrArray | | type_alias.ts:14:9:14:32 | [proper ... ]: Json | any | @@ -233,6 +305,10 @@ getTypeDefinitionType | tst.ts:91:3:95:3 | class S ... }\\n } | Super | | tst.ts:97:3:101:3 | class S ... }\\n } | Sub | | tst.ts:116:3:129:3 | class F ... }\\n } | Foo | +| tst.ts:140:3:142:47 | type Sh ... mber }; | Shape | +| tst.ts:152:5:156:5 | interfa ... ;\\n } | Colors | +| tst.ts:165:5:167:5 | interfa ... ;\\n } | Foo | +| tst.ts:171:5:173:5 | interfa ... ;\\n } | Data | | type_alias.ts:1:1:1:17 | type B = boolean; | boolean | | type_alias.ts:5:1:5:50 | type Va ... ay>; | ValueOrArray | | type_alias.ts:9:1:15:13 | type Js ... Json[]; | Json | @@ -369,6 +445,36 @@ getTypeExprType | tst.ts:111:29:111:32 | -2-3 | any | | tst.ts:117:20:117:25 | number | number | | tst.ts:121:23:121:28 | number | number | +| tst.ts:133:21:133:27 | unknown | unknown | +| tst.ts:140:8:140:12 | Shape | Shape | +| tst.ts:141:7:142:46 | \| { kin ... umber } | { kind: "circle"; radius: number; } \| { kind: "... | +| tst.ts:141:9:141:42 | { kind: ... umber } | { kind: "circle"; radius: number; } | +| tst.ts:141:17:141:24 | "circle" | "circle" | +| tst.ts:141:35:141:40 | number | number | +| tst.ts:142:9:142:46 | { kind: ... umber } | { kind: "square"; sideLength: number; } | +| tst.ts:142:17:142:24 | "square" | "square" | +| tst.ts:142:39:142:44 | number | number | +| tst.ts:144:24:144:28 | Shape | Shape | +| tst.ts:144:32:144:37 | number | number | +| tst.ts:152:15:152:20 | Colors | Colors | +| tst.ts:153:13:153:18 | symbol | symbol | +| tst.ts:153:22:153:27 | number | number | +| tst.ts:154:13:154:18 | string | string | +| tst.ts:154:22:154:27 | string | string | +| tst.ts:155:13:155:18 | number | number | +| tst.ts:155:22:155:28 | boolean | boolean | +| tst.ts:158:17:158:22 | Colors | Colors | +| tst.ts:165:15:165:17 | Foo | Foo | +| tst.ts:166:14:166:17 | foo- | any | +| tst.ts:166:20:166:25 | number | number | +| tst.ts:166:31:166:36 | number | number | +| tst.ts:168:15:168:17 | Foo | Foo | +| tst.ts:171:15:171:18 | Data | Data | +| tst.ts:172:17:172:22 | string | string | +| tst.ts:172:17:172:31 | string \| symbol | string \| symbol | +| tst.ts:172:26:172:31 | symbol | symbol | +| tst.ts:172:35:172:41 | boolean | boolean | +| tst.ts:175:17:175:20 | Data | Data | | type_alias.ts:1:6:1:6 | B | boolean | | type_alias.ts:1:10:1:16 | boolean | boolean | | type_alias.ts:3:8:3:8 | B | boolean | @@ -439,9 +545,12 @@ referenceDefinition | Color.blue | type_definitions.ts:14:15:14:18 | blue | | Color.green | type_definitions.ts:14:8:14:12 | green | | Color.red | type_definitions.ts:14:3:14:5 | red | +| Colors | tst.ts:152:5:156:5 | interfa ... ;\\n } | +| Data | tst.ts:171:5:173:5 | interfa ... ;\\n } | | E | type_definition_objects.ts:6:8:6:16 | enum E {} | | EnumWithOneMember | type_definitions.ts:18:26:18:31 | member | | Foo | tst.ts:116:3:129:3 | class F ... }\\n } | +| Foo | tst.ts:165:5:167:5 | interfa ... ;\\n } | | HasArea | tst.ts:58:1:60:1 | interfa ... mber;\\n} | | I | type_definitions.ts:3:1:5:1 | interfa ... x: S;\\n} | | I | type_definitions.ts:3:1:5:1 | interfa ... x: S;\\n} | @@ -449,6 +558,7 @@ referenceDefinition | MyUnion | tst.ts:65:1:65:54 | type My ... true}; | | MyUnion2 | tst.ts:68:1:68:49 | type My ... true}; | | NonAbstractDummy | tst.ts:54:1:56:1 | interfa ... mber;\\n} | +| Shape | tst.ts:140:3:142:47 | type Sh ... mber }; | | Sub | tst.ts:97:3:101:3 | class S ... }\\n } | | Super | tst.ts:91:3:95:3 | class S ... }\\n } | | Super | tst.ts:91:3:95:3 | class S ... }\\n } | @@ -490,6 +600,8 @@ unknownType | tst.ts:40:5:40:15 | unknownType | unknown | | tst.ts:47:8:47:8 | e | unknown | | tst.ts:48:14:48:14 | e | unknown | +| tst.ts:133:16:133:18 | arg | unknown | +| tst.ts:134:32:134:34 | arg | unknown | abstractSignature | (): HasArea | | new (): HasArea | @@ -498,9 +610,11 @@ unionIndex | 2 | 1 | 1 \| 2 | | "bigint" | 2 | "string" \| "number" \| "bigint" \| "boolean" \| "s... | | "boolean" | 3 | "string" \| "number" \| "bigint" \| "boolean" \| "s... | +| "circle" | 0 | "circle" \| "square" | | "function" | 7 | "string" \| "number" \| "bigint" \| "boolean" \| "s... | | "number" | 1 | "string" \| "number" \| "bigint" \| "boolean" \| "s... | | "object" | 6 | "string" \| "number" \| "bigint" \| "boolean" \| "s... | +| "square" | 1 | "circle" \| "square" | | "string" | 0 | "string" \| "number" \| "bigint" \| "boolean" \| "s... | | "symbol" | 4 | "string" \| "number" \| "bigint" \| "boolean" \| "s... | | "undefined" | 5 | "string" \| "number" \| "bigint" \| "boolean" \| "s... | @@ -524,7 +638,9 @@ unionIndex | string | 0 | string \| number \| boolean | | string | 0 | string \| number \| boolean \| { [property: string... | | string | 0 | string \| number \| true | +| string | 0 | string \| symbol | | string | 0 | string \| { [key: string]: any; } | +| symbol | 1 | string \| symbol | | true | 1 | boolean | | true | 2 | string \| number \| true | | true | 3 | string \| number \| boolean | @@ -532,6 +648,8 @@ unionIndex | { [key: string]: any; } | 1 | string \| { [key: string]: any; } | | { [key: string]: any; } | 2 | VirtualNode \| { [key: string]: any; } | | { [property: string]: Json; } | 4 | string \| number \| boolean \| { [property: string... | +| { kind: "circle"; radius: number; } | 0 | { kind: "circle"; radius: number; } \| { kind: "... | +| { kind: "square"; sideLength: number; } | 1 | { kind: "circle"; radius: number; } \| { kind: "... | | { myUnion: true; } | 0 | MyUnion \| { yetAnotherType: true; } | | { myUnion: true; } | 0 | { myUnion: true; } \| { stillMyUnion: true; } | | { stillMyUnion: true; } | 1 | MyUnion \| { yetAnotherType: true; } | diff --git a/javascript/ql/test/library-tests/TypeScript/Types/tst.ts b/javascript/ql/test/library-tests/TypeScript/Types/tst.ts index 389770984fd..aca96f28f25 100644 --- a/javascript/ql/test/library-tests/TypeScript/Types/tst.ts +++ b/javascript/ql/test/library-tests/TypeScript/Types/tst.ts @@ -127,4 +127,52 @@ module TS43 { return this.#someValue; } } +} + +module TS44 { + function foo(arg: unknown) { + const argIsString = typeof arg === "string"; + if (argIsString) { + const upper = arg.toUpperCase(); + } + } + + type Shape = + | { kind: "circle", radius: number } + | { kind: "square", sideLength: number }; + + function side(shape: Shape): number { + const { kind } = shape; + + if (kind === "circle") { return shape.radius;} + else { return shape.sideLength; } + } + + function symbolIndex() { + interface Colors { + [sym: symbol]: number; + [key: string]: string; + [num: number]: boolean; + } + + let colors: Colors = {}; + const red = colors[Symbol("red")]; + const green = colors["green"]; + const blue = colors[2]; + } + + function stringPatternIndex() { + interface Foo { + [key: `foo-${number}`]: number; + } + var bla : Foo = {}; + const bar = bla[`foo-1`]; + + interface Data { + [optName: string | symbol]: boolean; + } + + const data: Data = {}; + const baz = data["foo"]; + } } \ No newline at end of file From 9585481d0b67afbf4e7c64dfcd942cad4587e8bb Mon Sep 17 00:00:00 2001 From: Erik Krogh Kristensen Date: Wed, 1 Sep 2021 23:25:31 +0200 Subject: [PATCH 394/741] add support for static initializer blocks in TypeScript --- .../src/com/semmle/jcorn/Parser.java | 2 +- .../src/com/semmle/js/ast/ClassBody.java | 10 +- .../com/semmle/js/extractor/CFGExtractor.java | 56 +++++--- .../ts/extractor/TypeScriptASTConverter.java | 6 + .../ql/test/library-tests/CFG/CFG.expected | 32 ++++- .../library-tests/CFG/StaticInit.expected | 2 + .../test/library-tests/CFG/staticFieldsTS.ts | 11 ++ .../TypeScript/Types/printAst.expected | 121 ++++++++++++++++-- .../TypeScript/Types/tests.expected | 15 +++ .../library-tests/TypeScript/Types/tst.ts | 15 +++ 10 files changed, 228 insertions(+), 42 deletions(-) diff --git a/javascript/extractor/src/com/semmle/jcorn/Parser.java b/javascript/extractor/src/com/semmle/jcorn/Parser.java index 5f7383813c6..cd790f90483 100644 --- a/javascript/extractor/src/com/semmle/jcorn/Parser.java +++ b/javascript/extractor/src/com/semmle/jcorn/Parser.java @@ -3219,7 +3219,7 @@ public class Parser { Expression superClass = this.parseClassSuper(); Position bodyStartLoc = this.startLoc; boolean hadConstructor = false; - List> body = new ArrayList>(); + List body = new ArrayList<>(); // TODO: The JS parser doesn't support static initializer blocks. this.expect(TokenType.braceL); while (!this.eat(TokenType.braceR)) { if (this.eat(TokenType.semi)) continue; diff --git a/javascript/extractor/src/com/semmle/js/ast/ClassBody.java b/javascript/extractor/src/com/semmle/js/ast/ClassBody.java index beb23ae3a3e..a99758a3701 100644 --- a/javascript/extractor/src/com/semmle/js/ast/ClassBody.java +++ b/javascript/extractor/src/com/semmle/js/ast/ClassBody.java @@ -4,23 +4,23 @@ import java.util.List; /** The body of a {@linkplain ClassDeclaration} or {@linkplain ClassExpression}. */ public class ClassBody extends Node { - private final List> body; + private final List body; // either MemberDefintion or BlockStatement (static initialization blocks) - public ClassBody(SourceLocation loc, List> body) { + public ClassBody(SourceLocation loc, List body) { super("ClassBody", loc); this.body = body; } - public List> getBody() { + public List getBody() { return body; } - public void addMember(MemberDefinition md) { + public void addMember(Node md) { body.add(md); } public MethodDefinition getConstructor() { - for (MemberDefinition md : body) if (md.isConstructor()) return (MethodDefinition) md; + for (Node md : body) if (md instanceof MethodDefinition && ((MethodDefinition)md).isConstructor()) return (MethodDefinition) md; return null; } diff --git a/javascript/extractor/src/com/semmle/js/extractor/CFGExtractor.java b/javascript/extractor/src/com/semmle/js/extractor/CFGExtractor.java index 85dd13146fb..1316227de3e 100644 --- a/javascript/extractor/src/com/semmle/js/extractor/CFGExtractor.java +++ b/javascript/extractor/src/com/semmle/js/extractor/CFGExtractor.java @@ -454,7 +454,7 @@ public class CFGExtractor { @Override public Node visit(ClassBody nd, Void v) { - for (MemberDefinition m : nd.getBody()) { + for (Node m : nd.getBody()) { if (m instanceof MethodDefinition) { Node first = m.accept(this, v); if (first != null) return first; @@ -1163,10 +1163,14 @@ public class CFGExtractor { private Map constructor2Class = new LinkedHashMap<>(); private Void visit(Node nd, AClass ac, SuccessorInfo i) { - for (MemberDefinition m : ac.getBody().getBody()) - if (m.isConstructor() && m.isConcrete()) constructor2Class.put(m.getValue(), ac); + for (Node m : ac.getBody().getBody()) { + if (m instanceof MemberDefinition) { + MemberDefinition md = (MemberDefinition) m; + if (md.isConstructor() && md.isConcrete()) constructor2Class.put(md.getValue(), ac); + } + } visitSequence(ac.getId(), ac.getSuperClass(), ac.getBody(), nd); - writeSuccessors(nd, visitSequence(getStaticFields(ac.getBody()), getDecoratorsOfClass(ac), i.getAllSuccessors())); + writeSuccessors(nd, visitSequence(getStaticInitializers(ac.getBody()), getDecoratorsOfClass(ac), i.getAllSuccessors())); return null; } @@ -1203,15 +1207,18 @@ public class CFGExtractor { List staticDecorators = new ArrayList<>(); List constructorParameterDecorators = new ArrayList<>(); List classDecorators = (List)(List)ac.getDecorators(); - for (MemberDefinition member : ac.getBody().getBody()) { - if (!member.isConcrete()) continue; - List decorators = getMemberDecorators(member); - if (member.isConstructor()) { - constructorParameterDecorators.addAll(decorators); - } else if (member.isStatic()) { - staticDecorators.addAll(decorators); - } else { - instanceDecorators.addAll(decorators); + for (Node memberNode : ac.getBody().getBody()) { + if (memberNode instanceof MemberDefinition) { + MemberDefinition member = (MemberDefinition) memberNode; + if (!member.isConcrete()) continue; + List decorators = getMemberDecorators(member); + if (member.isConstructor()) { + constructorParameterDecorators.addAll(decorators); + } else if (member.isStatic()) { + staticDecorators.addAll(decorators); + } else { + instanceDecorators.addAll(decorators); + } } } List result = new ArrayList<>(); @@ -1612,25 +1619,32 @@ public class CFGExtractor { private List> getMethods(ClassBody nd) { List> mds = new ArrayList<>(); - for (MemberDefinition md : nd.getBody()) { - if (md instanceof MethodDefinition) mds.add(md); + for (Node md : nd.getBody()) { + if (md instanceof MethodDefinition) mds.add((MemberDefinition)md); } return mds; } - private List> getStaticFields(ClassBody nd) { - List> mds = new ArrayList<>(); - for (MemberDefinition md : nd.getBody()) { - if (md instanceof FieldDefinition && md.isStatic()) mds.add(md); + /** + * Gets the static fields, and static initializer blocks, from `nd`. + */ + private List getStaticInitializers(ClassBody nd) { + List nodes = new ArrayList<>(); + for (Node node : nd.getBody()) { + if (node instanceof FieldDefinition && ((FieldDefinition)node).isStatic()) nodes.add(node); + if (node instanceof BlockStatement) nodes.add(node); } - return mds; + return nodes; } private List getConcreteInstanceFields(ClassBody nd) { List fds = new ArrayList<>(); - for (MemberDefinition md : nd.getBody()) + for (Node node : nd.getBody()) { + if (!(node instanceof MemberDefinition)) continue; + MemberDefinition md = (MemberDefinition)node; if (md instanceof FieldDefinition && !md.isStatic() && md.isConcrete()) fds.add((FieldDefinition) md); + } return fds; } diff --git a/javascript/extractor/src/com/semmle/ts/extractor/TypeScriptASTConverter.java b/javascript/extractor/src/com/semmle/ts/extractor/TypeScriptASTConverter.java index f8ad99915c9..448564cfbc7 100644 --- a/javascript/extractor/src/com/semmle/ts/extractor/TypeScriptASTConverter.java +++ b/javascript/extractor/src/com/semmle/ts/extractor/TypeScriptASTConverter.java @@ -632,6 +632,8 @@ public class TypeScriptASTConverter { return convertWithStatement(node, loc); case "YieldExpression": return convertYieldExpression(node, loc); + case "ClassStaticBlockDeclaration": + return convertStaticInitializerBlock(node, loc); default: throw new ParseError( "Unsupported TypeScript syntax " + kind, getSourceLocation(node).getStart()); @@ -866,6 +868,10 @@ public class TypeScriptASTConverter { } } + private Node convertStaticInitializerBlock(JsonObject node, SourceLocation loc) throws ParseError { + return new BlockStatement(loc, convertChildren(node.get("body").getAsJsonObject(), "statements")); + } + private Node convertBlock(JsonObject node, SourceLocation loc) throws ParseError { return new BlockStatement(loc, convertChildren(node, "statements")); } diff --git a/javascript/ql/test/library-tests/CFG/CFG.expected b/javascript/ql/test/library-tests/CFG/CFG.expected index a41f1c4999a..235b4f73183 100644 --- a/javascript/ql/test/library-tests/CFG/CFG.expected +++ b/javascript/ql/test/library-tests/CFG/CFG.expected @@ -770,7 +770,37 @@ | staticFieldsTS | 6 | D | 6 | new D() | | staticFieldsTS | 6 | instance | 6 | D | | staticFieldsTS | 6 | new D() | 6 | static ... ew D(); | -| staticFieldsTS | 6 | static ... ew D(); | 8 | exit node of | +| staticFieldsTS | 6 | static ... ew D(); | 9 | export ... ;\\n }\\n} | +| staticFieldsTS | 9 | E | 9 | constructor | +| staticFieldsTS | 9 | class E ... ;\\n }\\n} | 10 | f | +| staticFieldsTS | 9 | constructor | 9 | function in constructor() {} | +| staticFieldsTS | 9 | constructor() {} | 9 | class E ... ;\\n }\\n} | +| staticFieldsTS | 9 | entry node of () {} | 9 | {} | +| staticFieldsTS | 9 | export ... ;\\n }\\n} | 9 | E | +| staticFieldsTS | 9 | function in constructor() {} | 9 | constructor() {} | +| staticFieldsTS | 9 | {} | 9 | exit node of () {} | +| staticFieldsTS | 10 | f | 10 | false | +| staticFieldsTS | 10 | false | 10 | static ... false; | +| staticFieldsTS | 10 | static ... false; | 11 | static ... ();\\n } | +| staticFieldsTS | 11 | static ... ();\\n } | 12 | E.f = new C(); | +| staticFieldsTS | 12 | C | 12 | new C() | +| staticFieldsTS | 12 | E | 12 | f | +| staticFieldsTS | 12 | E.f | 12 | C | +| staticFieldsTS | 12 | E.f = new C() | 14 | g | +| staticFieldsTS | 12 | E.f = new C(); | 12 | E | +| staticFieldsTS | 12 | f | 12 | E.f | +| staticFieldsTS | 12 | new C() | 12 | E.f = new C() | +| staticFieldsTS | 14 | 1337 | 14 | static ... = 1337; | +| staticFieldsTS | 14 | g | 14 | 1337 | +| staticFieldsTS | 14 | static ... = 1337; | 15 | static ... ();\\n } | +| staticFieldsTS | 15 | static ... ();\\n } | 16 | E.g = new D(); | +| staticFieldsTS | 16 | D | 16 | new D() | +| staticFieldsTS | 16 | E | 16 | g | +| staticFieldsTS | 16 | E.g | 16 | D | +| staticFieldsTS | 16 | E.g = new D() | 18 | exit node of | +| staticFieldsTS | 16 | E.g = new D(); | 16 | E | +| staticFieldsTS | 16 | g | 16 | E.g | +| staticFieldsTS | 16 | new D() | 16 | E.g = new D() | | switch | 1 | entry node of | 14 | f | | switch | 1 | switch ... 19;\\n} | 2 | x | | switch | 2 | x | 6 | case\\n ... 19; | diff --git a/javascript/ql/test/library-tests/CFG/StaticInit.expected b/javascript/ql/test/library-tests/CFG/StaticInit.expected index 95e41584cdc..1da2f66503c 100644 --- a/javascript/ql/test/library-tests/CFG/StaticInit.expected +++ b/javascript/ql/test/library-tests/CFG/StaticInit.expected @@ -14,3 +14,5 @@ | staticFields.js:2:3:2:28 | static ... ew C(); | Field initializer occurs after its class is created | | staticFieldsTS.ts:2:3:2:31 | static ... ew C(); | Field initializer occurs after its class is created | | staticFieldsTS.ts:6:3:6:31 | static ... ew D(); | Field initializer occurs after its class is created | +| staticFieldsTS.ts:10:3:10:32 | static ... false; | Field initializer occurs after its class is created | +| staticFieldsTS.ts:14:3:14:30 | static ... = 1337; | Field initializer occurs after its class is created | diff --git a/javascript/ql/test/library-tests/CFG/staticFieldsTS.ts b/javascript/ql/test/library-tests/CFG/staticFieldsTS.ts index ca394de8265..77a17831958 100644 --- a/javascript/ql/test/library-tests/CFG/staticFieldsTS.ts +++ b/javascript/ql/test/library-tests/CFG/staticFieldsTS.ts @@ -5,3 +5,14 @@ class C { export class D { static instance: D = new D(); } + +export class E { + static f: C | boolean = false; + static { + E.f = new C(); + } + static g: D | number = 1337; + static { + E.g = new D(); + } +} \ No newline at end of file diff --git a/javascript/ql/test/library-tests/TypeScript/Types/printAst.expected b/javascript/ql/test/library-tests/TypeScript/Types/printAst.expected index 9f911cf8da2..5aca25ff803 100644 --- a/javascript/ql/test/library-tests/TypeScript/Types/printAst.expected +++ b/javascript/ql/test/library-tests/TypeScript/Types/printAst.expected @@ -599,8 +599,8 @@ nodes | tst.ts:127:14:127:17 | [ThisExpr] this | semmle.label | [ThisExpr] this | | tst.ts:127:14:127:28 | [DotExpr] this.#someValue | semmle.label | [DotExpr] this.#someValue | | tst.ts:127:19:127:28 | [Label] #someValue | semmle.label | [Label] #someValue | -| tst.ts:132:1:178:1 | [NamespaceDeclaration] module ... ; } } | semmle.label | [NamespaceDeclaration] module ... ; } } | -| tst.ts:132:1:178:1 | [NamespaceDeclaration] module ... ; } } | semmle.order | 56 | +| tst.ts:132:1:193:1 | [NamespaceDeclaration] module ... } } | semmle.label | [NamespaceDeclaration] module ... } } | +| tst.ts:132:1:193:1 | [NamespaceDeclaration] module ... } } | semmle.order | 56 | | tst.ts:132:8:132:11 | [VarDecl] TS44 | semmle.label | [VarDecl] TS44 | | tst.ts:133:3:138:3 | [FunctionDeclStmt] functio ... } } | semmle.label | [FunctionDeclStmt] functio ... } } | | tst.ts:133:12:133:14 | [VarDecl] foo | semmle.label | [VarDecl] foo | @@ -757,6 +757,37 @@ nodes | tst.ts:176:17:176:20 | [VarRef] data | semmle.label | [VarRef] data | | tst.ts:176:17:176:27 | [IndexExpr] data["foo"] | semmle.label | [IndexExpr] data["foo"] | | tst.ts:176:22:176:26 | [Literal] "foo" | semmle.label | [Literal] "foo" | +| tst.ts:179:3:192:3 | [ClassDefinition,TypeDefinition] class F ... } | semmle.label | [ClassDefinition,TypeDefinition] class F ... } | +| tst.ts:179:9:179:11 | [VarDecl] Foo | semmle.label | [VarDecl] Foo | +| tst.ts:179:13:179:12 | [BlockStmt] {} | semmle.label | [BlockStmt] {} | +| tst.ts:179:13:179:12 | [ClassInitializedMember,ConstructorDefinition] constructor() {} | semmle.label | [ClassInitializedMember,ConstructorDefinition] constructor() {} | +| tst.ts:179:13:179:12 | [FunctionExpr] () {} | semmle.label | [FunctionExpr] () {} | +| tst.ts:179:13:179:12 | [Label] constructor | semmle.label | [Label] constructor | +| tst.ts:180:5:180:22 | [ClassInitializedMember,FieldDeclaration] static #count = 0; | semmle.label | [ClassInitializedMember,FieldDeclaration] static #count = 0; | +| tst.ts:180:12:180:17 | [Label] #count | semmle.label | [Label] #count | +| tst.ts:180:21:180:21 | [Literal] 0 | semmle.label | [Literal] 0 | +| tst.ts:182:5:184:5 | [ClassInitializedMember,GetterMethodDefinition] get cou ... ; } | semmle.label | [ClassInitializedMember,GetterMethodDefinition] get cou ... ; } | +| tst.ts:182:5:184:5 | [FunctionExpr] get cou ... ; } | semmle.label | [FunctionExpr] get cou ... ; } | +| tst.ts:182:9:182:13 | [Label] count | semmle.label | [Label] count | +| tst.ts:182:17:184:5 | [BlockStmt] { ... ; } | semmle.label | [BlockStmt] { ... ; } | +| tst.ts:183:9:183:26 | [ReturnStmt] return Foo.#count; | semmle.label | [ReturnStmt] return Foo.#count; | +| tst.ts:183:16:183:18 | [VarRef] Foo | semmle.label | [VarRef] Foo | +| tst.ts:183:16:183:25 | [DotExpr] Foo.#count | semmle.label | [DotExpr] Foo.#count | +| tst.ts:183:20:183:25 | [Label] #count | semmle.label | [Label] #count | +| tst.ts:185:5:187:5 | [BlockStmt] static ... ; } | semmle.label | [BlockStmt] static ... ; } | +| tst.ts:186:7:186:9 | [VarRef] Foo | semmle.label | [VarRef] Foo | +| tst.ts:186:7:186:16 | [DotExpr] Foo.#count | semmle.label | [DotExpr] Foo.#count | +| tst.ts:186:7:186:21 | [CompoundAssignExpr] Foo.#count += 3 | semmle.label | [CompoundAssignExpr] Foo.#count += 3 | +| tst.ts:186:7:186:22 | [ExprStmt] Foo.#count += 3; | semmle.label | [ExprStmt] Foo.#count += 3; | +| tst.ts:186:11:186:16 | [Label] #count | semmle.label | [Label] #count | +| tst.ts:186:21:186:21 | [Literal] 3 | semmle.label | [Literal] 3 | +| tst.ts:188:5:190:5 | [BlockStmt] static ... ; } | semmle.label | [BlockStmt] static ... ; } | +| tst.ts:189:7:189:29 | [DeclStmt] var count = ... | semmle.label | [DeclStmt] var count = ... | +| tst.ts:189:11:189:15 | [VarDecl] count | semmle.label | [VarDecl] count | +| tst.ts:189:11:189:28 | [VariableDeclarator] count = Foo.#count | semmle.label | [VariableDeclarator] count = Foo.#count | +| tst.ts:189:19:189:21 | [VarRef] Foo | semmle.label | [VarRef] Foo | +| tst.ts:189:19:189:28 | [DotExpr] Foo.#count | semmle.label | [DotExpr] Foo.#count | +| tst.ts:189:23:189:28 | [Label] #count | semmle.label | [Label] #count | | type_alias.ts:1:1:1:17 | [TypeAliasDeclaration,TypeDefinition] type B = boolean; | semmle.label | [TypeAliasDeclaration,TypeDefinition] type B = boolean; | | type_alias.ts:1:1:1:17 | [TypeAliasDeclaration,TypeDefinition] type B = boolean; | semmle.order | 57 | | type_alias.ts:1:6:1:6 | [Identifier] B | semmle.label | [Identifier] B | @@ -1942,18 +1973,20 @@ edges | tst.ts:127:14:127:28 | [DotExpr] this.#someValue | tst.ts:127:14:127:17 | [ThisExpr] this | semmle.order | 1 | | tst.ts:127:14:127:28 | [DotExpr] this.#someValue | tst.ts:127:19:127:28 | [Label] #someValue | semmle.label | 2 | | tst.ts:127:14:127:28 | [DotExpr] this.#someValue | tst.ts:127:19:127:28 | [Label] #someValue | semmle.order | 2 | -| tst.ts:132:1:178:1 | [NamespaceDeclaration] module ... ; } } | tst.ts:132:8:132:11 | [VarDecl] TS44 | semmle.label | 1 | -| tst.ts:132:1:178:1 | [NamespaceDeclaration] module ... ; } } | tst.ts:132:8:132:11 | [VarDecl] TS44 | semmle.order | 1 | -| tst.ts:132:1:178:1 | [NamespaceDeclaration] module ... ; } } | tst.ts:133:3:138:3 | [FunctionDeclStmt] functio ... } } | semmle.label | 2 | -| tst.ts:132:1:178:1 | [NamespaceDeclaration] module ... ; } } | tst.ts:133:3:138:3 | [FunctionDeclStmt] functio ... } } | semmle.order | 2 | -| tst.ts:132:1:178:1 | [NamespaceDeclaration] module ... ; } } | tst.ts:140:3:142:47 | [TypeAliasDeclaration,TypeDefinition] type Sh ... mber }; | semmle.label | 3 | -| tst.ts:132:1:178:1 | [NamespaceDeclaration] module ... ; } } | tst.ts:140:3:142:47 | [TypeAliasDeclaration,TypeDefinition] type Sh ... mber }; | semmle.order | 3 | -| tst.ts:132:1:178:1 | [NamespaceDeclaration] module ... ; } } | tst.ts:144:3:149:3 | [FunctionDeclStmt] functio ... ; } } | semmle.label | 4 | -| tst.ts:132:1:178:1 | [NamespaceDeclaration] module ... ; } } | tst.ts:144:3:149:3 | [FunctionDeclStmt] functio ... ; } } | semmle.order | 4 | -| tst.ts:132:1:178:1 | [NamespaceDeclaration] module ... ; } } | tst.ts:151:3:162:3 | [FunctionDeclStmt] functio ... 2]; } | semmle.label | 5 | -| tst.ts:132:1:178:1 | [NamespaceDeclaration] module ... ; } } | tst.ts:151:3:162:3 | [FunctionDeclStmt] functio ... 2]; } | semmle.order | 5 | -| tst.ts:132:1:178:1 | [NamespaceDeclaration] module ... ; } } | tst.ts:164:3:177:3 | [FunctionDeclStmt] functio ... "]; } | semmle.label | 6 | -| tst.ts:132:1:178:1 | [NamespaceDeclaration] module ... ; } } | tst.ts:164:3:177:3 | [FunctionDeclStmt] functio ... "]; } | semmle.order | 6 | +| tst.ts:132:1:193:1 | [NamespaceDeclaration] module ... } } | tst.ts:132:8:132:11 | [VarDecl] TS44 | semmle.label | 1 | +| tst.ts:132:1:193:1 | [NamespaceDeclaration] module ... } } | tst.ts:132:8:132:11 | [VarDecl] TS44 | semmle.order | 1 | +| tst.ts:132:1:193:1 | [NamespaceDeclaration] module ... } } | tst.ts:133:3:138:3 | [FunctionDeclStmt] functio ... } } | semmle.label | 2 | +| tst.ts:132:1:193:1 | [NamespaceDeclaration] module ... } } | tst.ts:133:3:138:3 | [FunctionDeclStmt] functio ... } } | semmle.order | 2 | +| tst.ts:132:1:193:1 | [NamespaceDeclaration] module ... } } | tst.ts:140:3:142:47 | [TypeAliasDeclaration,TypeDefinition] type Sh ... mber }; | semmle.label | 3 | +| tst.ts:132:1:193:1 | [NamespaceDeclaration] module ... } } | tst.ts:140:3:142:47 | [TypeAliasDeclaration,TypeDefinition] type Sh ... mber }; | semmle.order | 3 | +| tst.ts:132:1:193:1 | [NamespaceDeclaration] module ... } } | tst.ts:144:3:149:3 | [FunctionDeclStmt] functio ... ; } } | semmle.label | 4 | +| tst.ts:132:1:193:1 | [NamespaceDeclaration] module ... } } | tst.ts:144:3:149:3 | [FunctionDeclStmt] functio ... ; } } | semmle.order | 4 | +| tst.ts:132:1:193:1 | [NamespaceDeclaration] module ... } } | tst.ts:151:3:162:3 | [FunctionDeclStmt] functio ... 2]; } | semmle.label | 5 | +| tst.ts:132:1:193:1 | [NamespaceDeclaration] module ... } } | tst.ts:151:3:162:3 | [FunctionDeclStmt] functio ... 2]; } | semmle.order | 5 | +| tst.ts:132:1:193:1 | [NamespaceDeclaration] module ... } } | tst.ts:164:3:177:3 | [FunctionDeclStmt] functio ... "]; } | semmle.label | 6 | +| tst.ts:132:1:193:1 | [NamespaceDeclaration] module ... } } | tst.ts:164:3:177:3 | [FunctionDeclStmt] functio ... "]; } | semmle.order | 6 | +| tst.ts:132:1:193:1 | [NamespaceDeclaration] module ... } } | tst.ts:179:3:192:3 | [ClassDefinition,TypeDefinition] class F ... } | semmle.label | 7 | +| tst.ts:132:1:193:1 | [NamespaceDeclaration] module ... } } | tst.ts:179:3:192:3 | [ClassDefinition,TypeDefinition] class F ... } | semmle.order | 7 | | tst.ts:133:3:138:3 | [FunctionDeclStmt] functio ... } } | file://:0:0:0:0 | (Parameters) | semmle.label | 1 | | tst.ts:133:3:138:3 | [FunctionDeclStmt] functio ... } } | file://:0:0:0:0 | (Parameters) | semmle.order | 1 | | tst.ts:133:3:138:3 | [FunctionDeclStmt] functio ... } } | tst.ts:133:12:133:14 | [VarDecl] foo | semmle.label | 0 | @@ -2254,6 +2287,66 @@ edges | tst.ts:176:17:176:27 | [IndexExpr] data["foo"] | tst.ts:176:17:176:20 | [VarRef] data | semmle.order | 1 | | tst.ts:176:17:176:27 | [IndexExpr] data["foo"] | tst.ts:176:22:176:26 | [Literal] "foo" | semmle.label | 2 | | tst.ts:176:17:176:27 | [IndexExpr] data["foo"] | tst.ts:176:22:176:26 | [Literal] "foo" | semmle.order | 2 | +| tst.ts:179:3:192:3 | [ClassDefinition,TypeDefinition] class F ... } | tst.ts:179:9:179:11 | [VarDecl] Foo | semmle.label | 1 | +| tst.ts:179:3:192:3 | [ClassDefinition,TypeDefinition] class F ... } | tst.ts:179:9:179:11 | [VarDecl] Foo | semmle.order | 1 | +| tst.ts:179:3:192:3 | [ClassDefinition,TypeDefinition] class F ... } | tst.ts:179:13:179:12 | [ClassInitializedMember,ConstructorDefinition] constructor() {} | semmle.label | 2 | +| tst.ts:179:3:192:3 | [ClassDefinition,TypeDefinition] class F ... } | tst.ts:179:13:179:12 | [ClassInitializedMember,ConstructorDefinition] constructor() {} | semmle.order | 2 | +| tst.ts:179:3:192:3 | [ClassDefinition,TypeDefinition] class F ... } | tst.ts:180:5:180:22 | [ClassInitializedMember,FieldDeclaration] static #count = 0; | semmle.label | 3 | +| tst.ts:179:3:192:3 | [ClassDefinition,TypeDefinition] class F ... } | tst.ts:180:5:180:22 | [ClassInitializedMember,FieldDeclaration] static #count = 0; | semmle.order | 3 | +| tst.ts:179:3:192:3 | [ClassDefinition,TypeDefinition] class F ... } | tst.ts:182:5:184:5 | [ClassInitializedMember,GetterMethodDefinition] get cou ... ; } | semmle.label | 4 | +| tst.ts:179:3:192:3 | [ClassDefinition,TypeDefinition] class F ... } | tst.ts:182:5:184:5 | [ClassInitializedMember,GetterMethodDefinition] get cou ... ; } | semmle.order | 4 | +| tst.ts:179:3:192:3 | [ClassDefinition,TypeDefinition] class F ... } | tst.ts:185:5:187:5 | [BlockStmt] static ... ; } | semmle.label | 5 | +| tst.ts:179:3:192:3 | [ClassDefinition,TypeDefinition] class F ... } | tst.ts:185:5:187:5 | [BlockStmt] static ... ; } | semmle.order | 5 | +| tst.ts:179:3:192:3 | [ClassDefinition,TypeDefinition] class F ... } | tst.ts:188:5:190:5 | [BlockStmt] static ... ; } | semmle.label | 6 | +| tst.ts:179:3:192:3 | [ClassDefinition,TypeDefinition] class F ... } | tst.ts:188:5:190:5 | [BlockStmt] static ... ; } | semmle.order | 6 | +| tst.ts:179:13:179:12 | [ClassInitializedMember,ConstructorDefinition] constructor() {} | tst.ts:179:13:179:12 | [FunctionExpr] () {} | semmle.label | 2 | +| tst.ts:179:13:179:12 | [ClassInitializedMember,ConstructorDefinition] constructor() {} | tst.ts:179:13:179:12 | [FunctionExpr] () {} | semmle.order | 2 | +| tst.ts:179:13:179:12 | [ClassInitializedMember,ConstructorDefinition] constructor() {} | tst.ts:179:13:179:12 | [Label] constructor | semmle.label | 1 | +| tst.ts:179:13:179:12 | [ClassInitializedMember,ConstructorDefinition] constructor() {} | tst.ts:179:13:179:12 | [Label] constructor | semmle.order | 1 | +| tst.ts:179:13:179:12 | [FunctionExpr] () {} | tst.ts:179:13:179:12 | [BlockStmt] {} | semmle.label | 5 | +| tst.ts:179:13:179:12 | [FunctionExpr] () {} | tst.ts:179:13:179:12 | [BlockStmt] {} | semmle.order | 5 | +| tst.ts:180:5:180:22 | [ClassInitializedMember,FieldDeclaration] static #count = 0; | tst.ts:180:12:180:17 | [Label] #count | semmle.label | 1 | +| tst.ts:180:5:180:22 | [ClassInitializedMember,FieldDeclaration] static #count = 0; | tst.ts:180:12:180:17 | [Label] #count | semmle.order | 1 | +| tst.ts:180:5:180:22 | [ClassInitializedMember,FieldDeclaration] static #count = 0; | tst.ts:180:21:180:21 | [Literal] 0 | semmle.label | 2 | +| tst.ts:180:5:180:22 | [ClassInitializedMember,FieldDeclaration] static #count = 0; | tst.ts:180:21:180:21 | [Literal] 0 | semmle.order | 2 | +| tst.ts:182:5:184:5 | [ClassInitializedMember,GetterMethodDefinition] get cou ... ; } | tst.ts:182:5:184:5 | [FunctionExpr] get cou ... ; } | semmle.label | 1 | +| tst.ts:182:5:184:5 | [ClassInitializedMember,GetterMethodDefinition] get cou ... ; } | tst.ts:182:5:184:5 | [FunctionExpr] get cou ... ; } | semmle.order | 1 | +| tst.ts:182:5:184:5 | [ClassInitializedMember,GetterMethodDefinition] get cou ... ; } | tst.ts:182:9:182:13 | [Label] count | semmle.label | 2 | +| tst.ts:182:5:184:5 | [ClassInitializedMember,GetterMethodDefinition] get cou ... ; } | tst.ts:182:9:182:13 | [Label] count | semmle.order | 2 | +| tst.ts:182:5:184:5 | [FunctionExpr] get cou ... ; } | tst.ts:182:17:184:5 | [BlockStmt] { ... ; } | semmle.label | 5 | +| tst.ts:182:5:184:5 | [FunctionExpr] get cou ... ; } | tst.ts:182:17:184:5 | [BlockStmt] { ... ; } | semmle.order | 5 | +| tst.ts:182:17:184:5 | [BlockStmt] { ... ; } | tst.ts:183:9:183:26 | [ReturnStmt] return Foo.#count; | semmle.label | 1 | +| tst.ts:182:17:184:5 | [BlockStmt] { ... ; } | tst.ts:183:9:183:26 | [ReturnStmt] return Foo.#count; | semmle.order | 1 | +| tst.ts:183:9:183:26 | [ReturnStmt] return Foo.#count; | tst.ts:183:16:183:25 | [DotExpr] Foo.#count | semmle.label | 1 | +| tst.ts:183:9:183:26 | [ReturnStmt] return Foo.#count; | tst.ts:183:16:183:25 | [DotExpr] Foo.#count | semmle.order | 1 | +| tst.ts:183:16:183:25 | [DotExpr] Foo.#count | tst.ts:183:16:183:18 | [VarRef] Foo | semmle.label | 1 | +| tst.ts:183:16:183:25 | [DotExpr] Foo.#count | tst.ts:183:16:183:18 | [VarRef] Foo | semmle.order | 1 | +| tst.ts:183:16:183:25 | [DotExpr] Foo.#count | tst.ts:183:20:183:25 | [Label] #count | semmle.label | 2 | +| tst.ts:183:16:183:25 | [DotExpr] Foo.#count | tst.ts:183:20:183:25 | [Label] #count | semmle.order | 2 | +| tst.ts:185:5:187:5 | [BlockStmt] static ... ; } | tst.ts:186:7:186:22 | [ExprStmt] Foo.#count += 3; | semmle.label | 1 | +| tst.ts:185:5:187:5 | [BlockStmt] static ... ; } | tst.ts:186:7:186:22 | [ExprStmt] Foo.#count += 3; | semmle.order | 1 | +| tst.ts:186:7:186:16 | [DotExpr] Foo.#count | tst.ts:186:7:186:9 | [VarRef] Foo | semmle.label | 1 | +| tst.ts:186:7:186:16 | [DotExpr] Foo.#count | tst.ts:186:7:186:9 | [VarRef] Foo | semmle.order | 1 | +| tst.ts:186:7:186:16 | [DotExpr] Foo.#count | tst.ts:186:11:186:16 | [Label] #count | semmle.label | 2 | +| tst.ts:186:7:186:16 | [DotExpr] Foo.#count | tst.ts:186:11:186:16 | [Label] #count | semmle.order | 2 | +| tst.ts:186:7:186:21 | [CompoundAssignExpr] Foo.#count += 3 | tst.ts:186:7:186:16 | [DotExpr] Foo.#count | semmle.label | 1 | +| tst.ts:186:7:186:21 | [CompoundAssignExpr] Foo.#count += 3 | tst.ts:186:7:186:16 | [DotExpr] Foo.#count | semmle.order | 1 | +| tst.ts:186:7:186:21 | [CompoundAssignExpr] Foo.#count += 3 | tst.ts:186:21:186:21 | [Literal] 3 | semmle.label | 2 | +| tst.ts:186:7:186:21 | [CompoundAssignExpr] Foo.#count += 3 | tst.ts:186:21:186:21 | [Literal] 3 | semmle.order | 2 | +| tst.ts:186:7:186:22 | [ExprStmt] Foo.#count += 3; | tst.ts:186:7:186:21 | [CompoundAssignExpr] Foo.#count += 3 | semmle.label | 1 | +| tst.ts:186:7:186:22 | [ExprStmt] Foo.#count += 3; | tst.ts:186:7:186:21 | [CompoundAssignExpr] Foo.#count += 3 | semmle.order | 1 | +| tst.ts:188:5:190:5 | [BlockStmt] static ... ; } | tst.ts:189:7:189:29 | [DeclStmt] var count = ... | semmle.label | 1 | +| tst.ts:188:5:190:5 | [BlockStmt] static ... ; } | tst.ts:189:7:189:29 | [DeclStmt] var count = ... | semmle.order | 1 | +| tst.ts:189:7:189:29 | [DeclStmt] var count = ... | tst.ts:189:11:189:28 | [VariableDeclarator] count = Foo.#count | semmle.label | 1 | +| tst.ts:189:7:189:29 | [DeclStmt] var count = ... | tst.ts:189:11:189:28 | [VariableDeclarator] count = Foo.#count | semmle.order | 1 | +| tst.ts:189:11:189:28 | [VariableDeclarator] count = Foo.#count | tst.ts:189:11:189:15 | [VarDecl] count | semmle.label | 1 | +| tst.ts:189:11:189:28 | [VariableDeclarator] count = Foo.#count | tst.ts:189:11:189:15 | [VarDecl] count | semmle.order | 1 | +| tst.ts:189:11:189:28 | [VariableDeclarator] count = Foo.#count | tst.ts:189:19:189:28 | [DotExpr] Foo.#count | semmle.label | 2 | +| tst.ts:189:11:189:28 | [VariableDeclarator] count = Foo.#count | tst.ts:189:19:189:28 | [DotExpr] Foo.#count | semmle.order | 2 | +| tst.ts:189:19:189:28 | [DotExpr] Foo.#count | tst.ts:189:19:189:21 | [VarRef] Foo | semmle.label | 1 | +| tst.ts:189:19:189:28 | [DotExpr] Foo.#count | tst.ts:189:19:189:21 | [VarRef] Foo | semmle.order | 1 | +| tst.ts:189:19:189:28 | [DotExpr] Foo.#count | tst.ts:189:23:189:28 | [Label] #count | semmle.label | 2 | +| tst.ts:189:19:189:28 | [DotExpr] Foo.#count | tst.ts:189:23:189:28 | [Label] #count | semmle.order | 2 | | type_alias.ts:1:1:1:17 | [TypeAliasDeclaration,TypeDefinition] type B = boolean; | type_alias.ts:1:6:1:6 | [Identifier] B | semmle.label | 1 | | type_alias.ts:1:1:1:17 | [TypeAliasDeclaration,TypeDefinition] type B = boolean; | type_alias.ts:1:6:1:6 | [Identifier] B | semmle.order | 1 | | type_alias.ts:1:1:1:17 | [TypeAliasDeclaration,TypeDefinition] type B = boolean; | type_alias.ts:1:10:1:16 | [KeywordTypeExpr] boolean | semmle.label | 2 | diff --git a/javascript/ql/test/library-tests/TypeScript/Types/tests.expected b/javascript/ql/test/library-tests/TypeScript/Types/tests.expected index bee3610f28d..34f46ca29dc 100644 --- a/javascript/ql/test/library-tests/TypeScript/Types/tests.expected +++ b/javascript/ql/test/library-tests/TypeScript/Types/tests.expected @@ -247,6 +247,19 @@ getExprType | tst.ts:176:17:176:20 | data | Data | | tst.ts:176:17:176:27 | data["foo"] | boolean | | tst.ts:176:22:176:26 | "foo" | "foo" | +| tst.ts:179:9:179:11 | Foo | Foo | +| tst.ts:180:21:180:21 | 0 | 0 | +| tst.ts:182:5:184:5 | get cou ... ;\\n } | number | +| tst.ts:182:9:182:13 | count | number | +| tst.ts:183:16:183:18 | Foo | typeof Foo in tst.ts:132 | +| tst.ts:183:16:183:25 | Foo.#count | number | +| tst.ts:186:7:186:9 | Foo | typeof Foo in tst.ts:132 | +| tst.ts:186:7:186:16 | Foo.#count | number | +| tst.ts:186:7:186:21 | Foo.#count += 3 | number | +| tst.ts:186:21:186:21 | 3 | 3 | +| tst.ts:189:11:189:15 | count | number | +| tst.ts:189:19:189:21 | Foo | typeof Foo in tst.ts:132 | +| tst.ts:189:19:189:28 | Foo.#count | number | | type_alias.ts:3:5:3:5 | b | boolean | | type_alias.ts:7:5:7:5 | c | ValueOrArray | | type_alias.ts:14:9:14:32 | [proper ... ]: Json | any | @@ -309,6 +322,7 @@ getTypeDefinitionType | tst.ts:152:5:156:5 | interfa ... ;\\n } | Colors | | tst.ts:165:5:167:5 | interfa ... ;\\n } | Foo | | tst.ts:171:5:173:5 | interfa ... ;\\n } | Data | +| tst.ts:179:3:192:3 | class F ... \\n } | Foo | | type_alias.ts:1:1:1:17 | type B = boolean; | boolean | | type_alias.ts:5:1:5:50 | type Va ... ay>; | ValueOrArray | | type_alias.ts:9:1:15:13 | type Js ... Json[]; | Json | @@ -551,6 +565,7 @@ referenceDefinition | EnumWithOneMember | type_definitions.ts:18:26:18:31 | member | | Foo | tst.ts:116:3:129:3 | class F ... }\\n } | | Foo | tst.ts:165:5:167:5 | interfa ... ;\\n } | +| Foo | tst.ts:179:3:192:3 | class F ... \\n } | | HasArea | tst.ts:58:1:60:1 | interfa ... mber;\\n} | | I | type_definitions.ts:3:1:5:1 | interfa ... x: S;\\n} | | I | type_definitions.ts:3:1:5:1 | interfa ... x: S;\\n} | diff --git a/javascript/ql/test/library-tests/TypeScript/Types/tst.ts b/javascript/ql/test/library-tests/TypeScript/Types/tst.ts index aca96f28f25..0db050b2f49 100644 --- a/javascript/ql/test/library-tests/TypeScript/Types/tst.ts +++ b/javascript/ql/test/library-tests/TypeScript/Types/tst.ts @@ -175,4 +175,19 @@ module TS44 { const data: Data = {}; const baz = data["foo"]; } + + class Foo { + static #count = 0; + + get count() { + return Foo.#count; + } + static { + Foo.#count += 3; + } + static { + var count = Foo.#count; + } + + } } \ No newline at end of file From ffd51e725fb32e71e5123b19db73fca5985e88f4 Mon Sep 17 00:00:00 2001 From: Erik Krogh Kristensen Date: Wed, 1 Sep 2021 23:46:52 +0200 Subject: [PATCH 395/741] add getter for static initializer blocks --- javascript/ql/lib/semmle/javascript/Classes.qll | 5 +++++ .../ql/test/library-tests/TypeScript/Types/tests.expected | 3 +++ javascript/ql/test/library-tests/TypeScript/Types/tests.ql | 4 ++++ 3 files changed, 12 insertions(+) diff --git a/javascript/ql/lib/semmle/javascript/Classes.qll b/javascript/ql/lib/semmle/javascript/Classes.qll index 82e782c4690..bff2cde9736 100644 --- a/javascript/ql/lib/semmle/javascript/Classes.qll +++ b/javascript/ql/lib/semmle/javascript/Classes.qll @@ -258,6 +258,11 @@ class ClassDefinition extends @class_definition, ClassOrInterface, AST::ValueNod } override string getAPrimaryQlClass() { result = "ClassDefinition" } + + /** + * Gets a static initializer of this class, if any. + */ + BlockStmt getAStaticInitializerBlock() { result.getParent() = this } } /** diff --git a/javascript/ql/test/library-tests/TypeScript/Types/tests.expected b/javascript/ql/test/library-tests/TypeScript/Types/tests.expected index 34f46ca29dc..1d398443dec 100644 --- a/javascript/ql/test/library-tests/TypeScript/Types/tests.expected +++ b/javascript/ql/test/library-tests/TypeScript/Types/tests.expected @@ -670,3 +670,6 @@ unionIndex | { stillMyUnion: true; } | 1 | MyUnion \| { yetAnotherType: true; } | | { stillMyUnion: true; } | 1 | { myUnion: true; } \| { stillMyUnion: true; } | | { yetAnotherType: true; } | 2 | MyUnion \| { yetAnotherType: true; } | +getAStaticInitializerBlock +| tst.ts:179:3:192:3 | class F ... \\n } | tst.ts:185:5:187:5 | static ... ;\\n } | +| tst.ts:179:3:192:3 | class F ... \\n } | tst.ts:188:5:190:5 | static ... ;\\n } | diff --git a/javascript/ql/test/library-tests/TypeScript/Types/tests.ql b/javascript/ql/test/library-tests/TypeScript/Types/tests.ql index 0f31295ce50..dad3934113e 100644 --- a/javascript/ql/test/library-tests/TypeScript/Types/tests.ql +++ b/javascript/ql/test/library-tests/TypeScript/Types/tests.ql @@ -39,3 +39,7 @@ query predicate unknownType(Expr e, Type type) { query CallSignatureType abstractSignature() { result.isAbstract() } query UnionType unionIndex(Type element, int i) { result.getElementType(i) = element } + +query BlockStmt getAStaticInitializerBlock(ClassDefinition cls) { + result = cls.getAStaticInitializerBlock() +} From 68ab210dc8443592d38a36a803c6dc0998bfb019 Mon Sep 17 00:00:00 2001 From: Erik Krogh Kristensen Date: Thu, 2 Sep 2021 21:34:03 +0200 Subject: [PATCH 396/741] update TypeScript version info in versions-compilers.rst --- docs/codeql/support/reusables/versions-compilers.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/codeql/support/reusables/versions-compilers.rst b/docs/codeql/support/reusables/versions-compilers.rst index c38eb97e424..42c830ea665 100644 --- a/docs/codeql/support/reusables/versions-compilers.rst +++ b/docs/codeql/support/reusables/versions-compilers.rst @@ -22,7 +22,7 @@ Eclipse compiler for Java (ECJ) [5]_",``.java`` JavaScript,ECMAScript 2021 or lower,Not applicable,"``.js``, ``.jsx``, ``.mjs``, ``.es``, ``.es6``, ``.htm``, ``.html``, ``.xhm``, ``.xhtml``, ``.vue``, ``.json``, ``.yaml``, ``.yml``, ``.raml``, ``.xml`` [6]_" Python,"2.7, 3.5, 3.6, 3.7, 3.8, 3.9",Not applicable,``.py`` - TypeScript [7]_,"2.6-4.2",Standard TypeScript compiler,"``.ts``, ``.tsx``" + TypeScript [7]_,"2.6-4.4",Standard TypeScript compiler,"``.ts``, ``.tsx``" .. container:: footnote-group From 2a03a84315c50601f9eea8927a6f902861f3952e Mon Sep 17 00:00:00 2001 From: Erik Krogh Kristensen Date: Fri, 3 Sep 2021 09:23:54 +0200 Subject: [PATCH 397/741] remove TODO comment Co-authored-by: Asger F --- javascript/extractor/src/com/semmle/jcorn/Parser.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/javascript/extractor/src/com/semmle/jcorn/Parser.java b/javascript/extractor/src/com/semmle/jcorn/Parser.java index cd790f90483..a53f97a6502 100644 --- a/javascript/extractor/src/com/semmle/jcorn/Parser.java +++ b/javascript/extractor/src/com/semmle/jcorn/Parser.java @@ -3219,7 +3219,7 @@ public class Parser { Expression superClass = this.parseClassSuper(); Position bodyStartLoc = this.startLoc; boolean hadConstructor = false; - List body = new ArrayList<>(); // TODO: The JS parser doesn't support static initializer blocks. + List body = new ArrayList<>(); this.expect(TokenType.braceL); while (!this.eat(TokenType.braceR)) { if (this.eat(TokenType.semi)) continue; From 23e28ae5d4aeb174939e680eeb0921acbd2f29c0 Mon Sep 17 00:00:00 2001 From: Erik Krogh Kristensen Date: Fri, 3 Sep 2021 09:24:11 +0200 Subject: [PATCH 398/741] fix typo in comment Co-authored-by: Asger F --- javascript/extractor/src/com/semmle/js/ast/ClassBody.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/javascript/extractor/src/com/semmle/js/ast/ClassBody.java b/javascript/extractor/src/com/semmle/js/ast/ClassBody.java index a99758a3701..a0692e15fe9 100644 --- a/javascript/extractor/src/com/semmle/js/ast/ClassBody.java +++ b/javascript/extractor/src/com/semmle/js/ast/ClassBody.java @@ -4,7 +4,7 @@ import java.util.List; /** The body of a {@linkplain ClassDeclaration} or {@linkplain ClassExpression}. */ public class ClassBody extends Node { - private final List body; // either MemberDefintion or BlockStatement (static initialization blocks) + private final List body; // either MemberDefinition or BlockStatement (static initialization blocks) public ClassBody(SourceLocation loc, List body) { super("ClassBody", loc); From e3ed6c2523bac938f94480f7108f18632c1ff01d Mon Sep 17 00:00:00 2001 From: Erik Krogh Kristensen Date: Fri, 3 Sep 2021 10:15:36 +0200 Subject: [PATCH 399/741] refactor StaticInitializer into it's own class --- .../src/com/semmle/jcorn/Parser.java | 2 +- .../src/com/semmle/js/ast/ClassBody.java | 8 ++-- .../src/com/semmle/js/ast/DefaultVisitor.java | 5 +++ .../src/com/semmle/js/ast/NodeCopier.java | 7 ++- .../com/semmle/js/ast/StaticInitializer.java | 40 +++++++++++++++++ .../src/com/semmle/js/ast/Visitor.java | 2 + .../com/semmle/js/extractor/ASTExtractor.java | 8 ++++ .../com/semmle/js/extractor/CFGExtractor.java | 43 ++++++++----------- .../ts/extractor/TypeScriptASTConverter.java | 6 ++- .../ql/lib/semmle/javascript/Classes.qll | 13 +++++- .../ql/lib/semmlecode.javascript.dbscheme | 1 + .../TypeScript/Types/printAst.expected | 14 ++++-- 12 files changed, 112 insertions(+), 37 deletions(-) create mode 100644 javascript/extractor/src/com/semmle/js/ast/StaticInitializer.java diff --git a/javascript/extractor/src/com/semmle/jcorn/Parser.java b/javascript/extractor/src/com/semmle/jcorn/Parser.java index a53f97a6502..bc98e938dba 100644 --- a/javascript/extractor/src/com/semmle/jcorn/Parser.java +++ b/javascript/extractor/src/com/semmle/jcorn/Parser.java @@ -3219,7 +3219,7 @@ public class Parser { Expression superClass = this.parseClassSuper(); Position bodyStartLoc = this.startLoc; boolean hadConstructor = false; - List body = new ArrayList<>(); + List> body = new ArrayList<>(); this.expect(TokenType.braceL); while (!this.eat(TokenType.braceR)) { if (this.eat(TokenType.semi)) continue; diff --git a/javascript/extractor/src/com/semmle/js/ast/ClassBody.java b/javascript/extractor/src/com/semmle/js/ast/ClassBody.java index a0692e15fe9..37a86de8afa 100644 --- a/javascript/extractor/src/com/semmle/js/ast/ClassBody.java +++ b/javascript/extractor/src/com/semmle/js/ast/ClassBody.java @@ -4,18 +4,18 @@ import java.util.List; /** The body of a {@linkplain ClassDeclaration} or {@linkplain ClassExpression}. */ public class ClassBody extends Node { - private final List body; // either MemberDefinition or BlockStatement (static initialization blocks) + private final List> body; - public ClassBody(SourceLocation loc, List body) { + public ClassBody(SourceLocation loc, List> body) { super("ClassBody", loc); this.body = body; } - public List getBody() { + public List> getBody() { return body; } - public void addMember(Node md) { + public void addMember(MemberDefinition md) { body.add(md); } diff --git a/javascript/extractor/src/com/semmle/js/ast/DefaultVisitor.java b/javascript/extractor/src/com/semmle/js/ast/DefaultVisitor.java index 995f580edd2..7e18ebdfa6a 100644 --- a/javascript/extractor/src/com/semmle/js/ast/DefaultVisitor.java +++ b/javascript/extractor/src/com/semmle/js/ast/DefaultVisitor.java @@ -782,4 +782,9 @@ public class DefaultVisitor implements Visitor { public R visit(GeneratedCodeExpr nd, C c) { return visit((Expression) nd, c); } + + @Override + public R visit(StaticInitializer nd, C c) { + return visit((MemberDefinition) nd, c); + } } diff --git a/javascript/extractor/src/com/semmle/js/ast/NodeCopier.java b/javascript/extractor/src/com/semmle/js/ast/NodeCopier.java index 02fd40b12d8..402f2400a62 100644 --- a/javascript/extractor/src/com/semmle/js/ast/NodeCopier.java +++ b/javascript/extractor/src/com/semmle/js/ast/NodeCopier.java @@ -897,6 +897,11 @@ public class NodeCopier implements Visitor { @Override public INode visit(GeneratedCodeExpr nd, Void c) { - return new GeneratedCodeExpr(visit(nd.getLoc()), nd.getOpeningDelimiter(), nd.getClosingDelimiter(), nd.getBody()); + return new GeneratedCodeExpr(visit(nd.getLoc()), nd.getOpeningDelimiter(), nd.getClosingDelimiter(), nd.getBody()); + } + + @Override + public INode visit(StaticInitializer nd, Void c) { + return new StaticInitializer(visit(nd.getLoc()), copy(nd.getBody())); } } diff --git a/javascript/extractor/src/com/semmle/js/ast/StaticInitializer.java b/javascript/extractor/src/com/semmle/js/ast/StaticInitializer.java new file mode 100644 index 00000000000..be4d5e54548 --- /dev/null +++ b/javascript/extractor/src/com/semmle/js/ast/StaticInitializer.java @@ -0,0 +1,40 @@ +package com.semmle.js.ast; + +/** + * A static initializer block in a class. + * E.g. + * ```TypeScript + * class Foo { + * static bar : number; + * static { + * Foo.bar = 42; + * } + * } + */ +public class StaticInitializer extends MemberDefinition { + private final BlockStatement body; + + public StaticInitializer(SourceLocation loc, BlockStatement body) { + super("StaticInitializer", loc, DeclarationFlags.static_, null, null); + this.body = body; + } + + /** + * Gets the body of this static initializer. + * @return The body of this static initializer. + */ + public BlockStatement getBody() { + return body; + } + + @Override + public boolean isConcrete() { + return false; + } + + + @Override + public R accept(Visitor v, C c) { + return v.visit(this, c); + } +} diff --git a/javascript/extractor/src/com/semmle/js/ast/Visitor.java b/javascript/extractor/src/com/semmle/js/ast/Visitor.java index f7dfbd4e3aa..3d595b981b8 100644 --- a/javascript/extractor/src/com/semmle/js/ast/Visitor.java +++ b/javascript/extractor/src/com/semmle/js/ast/Visitor.java @@ -315,4 +315,6 @@ public interface Visitor { public R visit(XMLDotDotExpression nd, C c); public R visit(GeneratedCodeExpr generatedCodeExpr, C c); + + public R visit(StaticInitializer nd, C c); } diff --git a/javascript/extractor/src/com/semmle/js/extractor/ASTExtractor.java b/javascript/extractor/src/com/semmle/js/extractor/ASTExtractor.java index 6796f262fef..3f048b99db3 100644 --- a/javascript/extractor/src/com/semmle/js/extractor/ASTExtractor.java +++ b/javascript/extractor/src/com/semmle/js/extractor/ASTExtractor.java @@ -80,6 +80,7 @@ import com.semmle.js.ast.SourceElement; import com.semmle.js.ast.SourceLocation; import com.semmle.js.ast.SpreadElement; import com.semmle.js.ast.Statement; +import com.semmle.js.ast.StaticInitializer; import com.semmle.js.ast.Super; import com.semmle.js.ast.SwitchCase; import com.semmle.js.ast.SwitchStatement; @@ -1613,6 +1614,8 @@ public class ASTExtractor { int kind; if (nd instanceof MethodDefinition) { kind = getMethodKind((MethodDefinition) nd); + } else if (nd instanceof StaticInitializer) { + kind = 10; } else { kind = getFieldKind((FieldDefinition) nd); } @@ -1643,6 +1646,11 @@ public class ASTExtractor { } } + if (nd instanceof StaticInitializer) { + StaticInitializer si = (StaticInitializer) nd; + visit(si.getBody(), methkey, 3, IdContext.VAR_BIND); + } + if (nd instanceof FieldDefinition) { FieldDefinition field = (FieldDefinition) nd; if (field.isParameterField() && constructorKey != null) { diff --git a/javascript/extractor/src/com/semmle/js/extractor/CFGExtractor.java b/javascript/extractor/src/com/semmle/js/extractor/CFGExtractor.java index 1316227de3e..73facb7ea47 100644 --- a/javascript/extractor/src/com/semmle/js/extractor/CFGExtractor.java +++ b/javascript/extractor/src/com/semmle/js/extractor/CFGExtractor.java @@ -65,6 +65,7 @@ import com.semmle.js.ast.SequenceExpression; import com.semmle.js.ast.SourceLocation; import com.semmle.js.ast.SpreadElement; import com.semmle.js.ast.Statement; +import com.semmle.js.ast.StaticInitializer; import com.semmle.js.ast.Super; import com.semmle.js.ast.SwitchCase; import com.semmle.js.ast.SwitchStatement; @@ -454,7 +455,7 @@ public class CFGExtractor { @Override public Node visit(ClassBody nd, Void v) { - for (Node m : nd.getBody()) { + for (MemberDefinition m : nd.getBody()) { if (m instanceof MethodDefinition) { Node first = m.accept(this, v); if (first != null) return first; @@ -1163,11 +1164,8 @@ public class CFGExtractor { private Map constructor2Class = new LinkedHashMap<>(); private Void visit(Node nd, AClass ac, SuccessorInfo i) { - for (Node m : ac.getBody().getBody()) { - if (m instanceof MemberDefinition) { - MemberDefinition md = (MemberDefinition) m; - if (md.isConstructor() && md.isConcrete()) constructor2Class.put(md.getValue(), ac); - } + for (MemberDefinition md : ac.getBody().getBody()) { + if (md.isConstructor() && md.isConcrete()) constructor2Class.put(md.getValue(), ac); } visitSequence(ac.getId(), ac.getSuperClass(), ac.getBody(), nd); writeSuccessors(nd, visitSequence(getStaticInitializers(ac.getBody()), getDecoratorsOfClass(ac), i.getAllSuccessors())); @@ -1207,18 +1205,15 @@ public class CFGExtractor { List staticDecorators = new ArrayList<>(); List constructorParameterDecorators = new ArrayList<>(); List classDecorators = (List)(List)ac.getDecorators(); - for (Node memberNode : ac.getBody().getBody()) { - if (memberNode instanceof MemberDefinition) { - MemberDefinition member = (MemberDefinition) memberNode; - if (!member.isConcrete()) continue; - List decorators = getMemberDecorators(member); - if (member.isConstructor()) { - constructorParameterDecorators.addAll(decorators); - } else if (member.isStatic()) { - staticDecorators.addAll(decorators); - } else { - instanceDecorators.addAll(decorators); - } + for (MemberDefinition member : ac.getBody().getBody()) { + if (!member.isConcrete()) continue; + List decorators = getMemberDecorators(member); + if (member.isConstructor()) { + constructorParameterDecorators.addAll(decorators); + } else if (member.isStatic()) { + staticDecorators.addAll(decorators); + } else { + instanceDecorators.addAll(decorators); } } List result = new ArrayList<>(); @@ -1619,8 +1614,8 @@ public class CFGExtractor { private List> getMethods(ClassBody nd) { List> mds = new ArrayList<>(); - for (Node md : nd.getBody()) { - if (md instanceof MethodDefinition) mds.add((MemberDefinition)md); + for (MemberDefinition md : nd.getBody()) { + if (md instanceof MethodDefinition) mds.add(md); } return mds; } @@ -1630,18 +1625,16 @@ public class CFGExtractor { */ private List getStaticInitializers(ClassBody nd) { List nodes = new ArrayList<>(); - for (Node node : nd.getBody()) { + for (MemberDefinition node : nd.getBody()) { if (node instanceof FieldDefinition && ((FieldDefinition)node).isStatic()) nodes.add(node); - if (node instanceof BlockStatement) nodes.add(node); + if (node instanceof StaticInitializer) nodes.add(((StaticInitializer)node).getBody()); } return nodes; } private List getConcreteInstanceFields(ClassBody nd) { List fds = new ArrayList<>(); - for (Node node : nd.getBody()) { - if (!(node instanceof MemberDefinition)) continue; - MemberDefinition md = (MemberDefinition)node; + for (MemberDefinition md : nd.getBody()) { if (md instanceof FieldDefinition && !md.isStatic() && md.isConcrete()) fds.add((FieldDefinition) md); } diff --git a/javascript/extractor/src/com/semmle/ts/extractor/TypeScriptASTConverter.java b/javascript/extractor/src/com/semmle/ts/extractor/TypeScriptASTConverter.java index 448564cfbc7..d2874beb9de 100644 --- a/javascript/extractor/src/com/semmle/ts/extractor/TypeScriptASTConverter.java +++ b/javascript/extractor/src/com/semmle/ts/extractor/TypeScriptASTConverter.java @@ -82,6 +82,7 @@ import com.semmle.js.ast.SequenceExpression; import com.semmle.js.ast.SourceLocation; import com.semmle.js.ast.SpreadElement; import com.semmle.js.ast.Statement; +import com.semmle.js.ast.StaticInitializer; import com.semmle.js.ast.Super; import com.semmle.js.ast.SwitchCase; import com.semmle.js.ast.SwitchStatement; @@ -155,6 +156,8 @@ import com.semmle.ts.ast.UnionTypeExpr; import com.semmle.util.collections.CollectionUtil; import com.semmle.util.data.IntList; +import jdk.internal.org.objectweb.asm.commons.StaticInitMerger; + /** * Utility class for converting a TypeScript AST @@ -869,7 +872,8 @@ public class TypeScriptASTConverter { } private Node convertStaticInitializerBlock(JsonObject node, SourceLocation loc) throws ParseError { - return new BlockStatement(loc, convertChildren(node.get("body").getAsJsonObject(), "statements")); + BlockStatement body = new BlockStatement(loc, convertChildren(node.get("body").getAsJsonObject(), "statements")); + return new StaticInitializer(loc, body); } private Node convertBlock(JsonObject node, SourceLocation loc) throws ParseError { diff --git a/javascript/ql/lib/semmle/javascript/Classes.qll b/javascript/ql/lib/semmle/javascript/Classes.qll index bff2cde9736..dff1093025c 100644 --- a/javascript/ql/lib/semmle/javascript/Classes.qll +++ b/javascript/ql/lib/semmle/javascript/Classes.qll @@ -262,7 +262,9 @@ class ClassDefinition extends @class_definition, ClassOrInterface, AST::ValueNod /** * Gets a static initializer of this class, if any. */ - BlockStmt getAStaticInitializerBlock() { result.getParent() = this } + BlockStmt getAStaticInitializerBlock() { + exists(StaticInitializer init | init.getDeclaringClass() = this | result = init.getBody()) + } } /** @@ -1139,6 +1141,15 @@ class ParameterField extends FieldDeclaration, @parameter_field { override TypeAnnotation getTypeAnnotation() { result = getParameter().getTypeAnnotation() } } +/** + * A static initializer in a class. + */ +class StaticInitializer extends MemberDefinition, @static_initializer { + BlockStmt getBody() { result.getParent() = this } + + override Expr getNameExpr() { none() } +} + /** * A call signature declared in an interface. * diff --git a/javascript/ql/lib/semmlecode.javascript.dbscheme b/javascript/ql/lib/semmlecode.javascript.dbscheme index e34b3e16dba..7533e7ff64d 100644 --- a/javascript/ql/lib/semmlecode.javascript.dbscheme +++ b/javascript/ql/lib/semmlecode.javascript.dbscheme @@ -521,6 +521,7 @@ case @property.kind of | 7 = @enum_member | 8 = @proper_field | 9 = @parameter_field +| 10 = @static_initializer ; @property_parent = @obj_expr | @object_pattern | @class_definition | @jsx_element | @interface_definition | @enum_declaration; diff --git a/javascript/ql/test/library-tests/TypeScript/Types/printAst.expected b/javascript/ql/test/library-tests/TypeScript/Types/printAst.expected index 5aca25ff803..37df1d045b8 100644 --- a/javascript/ql/test/library-tests/TypeScript/Types/printAst.expected +++ b/javascript/ql/test/library-tests/TypeScript/Types/printAst.expected @@ -775,6 +775,7 @@ nodes | tst.ts:183:16:183:25 | [DotExpr] Foo.#count | semmle.label | [DotExpr] Foo.#count | | tst.ts:183:20:183:25 | [Label] #count | semmle.label | [Label] #count | | tst.ts:185:5:187:5 | [BlockStmt] static ... ; } | semmle.label | [BlockStmt] static ... ; } | +| tst.ts:185:5:187:5 | [ClassInitializedMember] static ... ; } | semmle.label | [ClassInitializedMember] static ... ; } | | tst.ts:186:7:186:9 | [VarRef] Foo | semmle.label | [VarRef] Foo | | tst.ts:186:7:186:16 | [DotExpr] Foo.#count | semmle.label | [DotExpr] Foo.#count | | tst.ts:186:7:186:21 | [CompoundAssignExpr] Foo.#count += 3 | semmle.label | [CompoundAssignExpr] Foo.#count += 3 | @@ -782,6 +783,7 @@ nodes | tst.ts:186:11:186:16 | [Label] #count | semmle.label | [Label] #count | | tst.ts:186:21:186:21 | [Literal] 3 | semmle.label | [Literal] 3 | | tst.ts:188:5:190:5 | [BlockStmt] static ... ; } | semmle.label | [BlockStmt] static ... ; } | +| tst.ts:188:5:190:5 | [ClassInitializedMember] static ... ; } | semmle.label | [ClassInitializedMember] static ... ; } | | tst.ts:189:7:189:29 | [DeclStmt] var count = ... | semmle.label | [DeclStmt] var count = ... | | tst.ts:189:11:189:15 | [VarDecl] count | semmle.label | [VarDecl] count | | tst.ts:189:11:189:28 | [VariableDeclarator] count = Foo.#count | semmle.label | [VariableDeclarator] count = Foo.#count | @@ -2295,10 +2297,10 @@ edges | tst.ts:179:3:192:3 | [ClassDefinition,TypeDefinition] class F ... } | tst.ts:180:5:180:22 | [ClassInitializedMember,FieldDeclaration] static #count = 0; | semmle.order | 3 | | tst.ts:179:3:192:3 | [ClassDefinition,TypeDefinition] class F ... } | tst.ts:182:5:184:5 | [ClassInitializedMember,GetterMethodDefinition] get cou ... ; } | semmle.label | 4 | | tst.ts:179:3:192:3 | [ClassDefinition,TypeDefinition] class F ... } | tst.ts:182:5:184:5 | [ClassInitializedMember,GetterMethodDefinition] get cou ... ; } | semmle.order | 4 | -| tst.ts:179:3:192:3 | [ClassDefinition,TypeDefinition] class F ... } | tst.ts:185:5:187:5 | [BlockStmt] static ... ; } | semmle.label | 5 | -| tst.ts:179:3:192:3 | [ClassDefinition,TypeDefinition] class F ... } | tst.ts:185:5:187:5 | [BlockStmt] static ... ; } | semmle.order | 5 | -| tst.ts:179:3:192:3 | [ClassDefinition,TypeDefinition] class F ... } | tst.ts:188:5:190:5 | [BlockStmt] static ... ; } | semmle.label | 6 | -| tst.ts:179:3:192:3 | [ClassDefinition,TypeDefinition] class F ... } | tst.ts:188:5:190:5 | [BlockStmt] static ... ; } | semmle.order | 6 | +| tst.ts:179:3:192:3 | [ClassDefinition,TypeDefinition] class F ... } | tst.ts:185:5:187:5 | [ClassInitializedMember] static ... ; } | semmle.label | 5 | +| tst.ts:179:3:192:3 | [ClassDefinition,TypeDefinition] class F ... } | tst.ts:185:5:187:5 | [ClassInitializedMember] static ... ; } | semmle.order | 5 | +| tst.ts:179:3:192:3 | [ClassDefinition,TypeDefinition] class F ... } | tst.ts:188:5:190:5 | [ClassInitializedMember] static ... ; } | semmle.label | 6 | +| tst.ts:179:3:192:3 | [ClassDefinition,TypeDefinition] class F ... } | tst.ts:188:5:190:5 | [ClassInitializedMember] static ... ; } | semmle.order | 6 | | tst.ts:179:13:179:12 | [ClassInitializedMember,ConstructorDefinition] constructor() {} | tst.ts:179:13:179:12 | [FunctionExpr] () {} | semmle.label | 2 | | tst.ts:179:13:179:12 | [ClassInitializedMember,ConstructorDefinition] constructor() {} | tst.ts:179:13:179:12 | [FunctionExpr] () {} | semmle.order | 2 | | tst.ts:179:13:179:12 | [ClassInitializedMember,ConstructorDefinition] constructor() {} | tst.ts:179:13:179:12 | [Label] constructor | semmle.label | 1 | @@ -2325,6 +2327,8 @@ edges | tst.ts:183:16:183:25 | [DotExpr] Foo.#count | tst.ts:183:20:183:25 | [Label] #count | semmle.order | 2 | | tst.ts:185:5:187:5 | [BlockStmt] static ... ; } | tst.ts:186:7:186:22 | [ExprStmt] Foo.#count += 3; | semmle.label | 1 | | tst.ts:185:5:187:5 | [BlockStmt] static ... ; } | tst.ts:186:7:186:22 | [ExprStmt] Foo.#count += 3; | semmle.order | 1 | +| tst.ts:185:5:187:5 | [ClassInitializedMember] static ... ; } | tst.ts:185:5:187:5 | [BlockStmt] static ... ; } | semmle.label | 1 | +| tst.ts:185:5:187:5 | [ClassInitializedMember] static ... ; } | tst.ts:185:5:187:5 | [BlockStmt] static ... ; } | semmle.order | 1 | | tst.ts:186:7:186:16 | [DotExpr] Foo.#count | tst.ts:186:7:186:9 | [VarRef] Foo | semmle.label | 1 | | tst.ts:186:7:186:16 | [DotExpr] Foo.#count | tst.ts:186:7:186:9 | [VarRef] Foo | semmle.order | 1 | | tst.ts:186:7:186:16 | [DotExpr] Foo.#count | tst.ts:186:11:186:16 | [Label] #count | semmle.label | 2 | @@ -2337,6 +2341,8 @@ edges | tst.ts:186:7:186:22 | [ExprStmt] Foo.#count += 3; | tst.ts:186:7:186:21 | [CompoundAssignExpr] Foo.#count += 3 | semmle.order | 1 | | tst.ts:188:5:190:5 | [BlockStmt] static ... ; } | tst.ts:189:7:189:29 | [DeclStmt] var count = ... | semmle.label | 1 | | tst.ts:188:5:190:5 | [BlockStmt] static ... ; } | tst.ts:189:7:189:29 | [DeclStmt] var count = ... | semmle.order | 1 | +| tst.ts:188:5:190:5 | [ClassInitializedMember] static ... ; } | tst.ts:188:5:190:5 | [BlockStmt] static ... ; } | semmle.label | 1 | +| tst.ts:188:5:190:5 | [ClassInitializedMember] static ... ; } | tst.ts:188:5:190:5 | [BlockStmt] static ... ; } | semmle.order | 1 | | tst.ts:189:7:189:29 | [DeclStmt] var count = ... | tst.ts:189:11:189:28 | [VariableDeclarator] count = Foo.#count | semmle.label | 1 | | tst.ts:189:7:189:29 | [DeclStmt] var count = ... | tst.ts:189:11:189:28 | [VariableDeclarator] count = Foo.#count | semmle.order | 1 | | tst.ts:189:11:189:28 | [VariableDeclarator] count = Foo.#count | tst.ts:189:11:189:15 | [VarDecl] count | semmle.label | 1 | From c8c7a1f77201939e1f44825e4357767f4c20f471 Mon Sep 17 00:00:00 2001 From: Erik Krogh Kristensen Date: Fri, 3 Sep 2021 12:44:13 +0200 Subject: [PATCH 400/741] remove the `body` field from `StaticInitializer` and relax the valuye type on `MemberDefinition` --- .../src/com/semmle/js/ast/DefaultVisitor.java | 2 +- .../com/semmle/js/ast/MemberDefinition.java | 4 +-- .../src/com/semmle/js/ast/NodeCopier.java | 2 +- .../com/semmle/js/ast/StaticInitializer.java | 27 +++---------------- .../com/semmle/js/extractor/ASTExtractor.java | 5 ---- .../com/semmle/js/extractor/CFGExtractor.java | 4 +-- 6 files changed, 10 insertions(+), 34 deletions(-) diff --git a/javascript/extractor/src/com/semmle/js/ast/DefaultVisitor.java b/javascript/extractor/src/com/semmle/js/ast/DefaultVisitor.java index 7e18ebdfa6a..c450fdd0468 100644 --- a/javascript/extractor/src/com/semmle/js/ast/DefaultVisitor.java +++ b/javascript/extractor/src/com/semmle/js/ast/DefaultVisitor.java @@ -785,6 +785,6 @@ public class DefaultVisitor implements Visitor { @Override public R visit(StaticInitializer nd, C c) { - return visit((MemberDefinition) nd, c); + return visit((MemberDefinition) nd, c); } } diff --git a/javascript/extractor/src/com/semmle/js/ast/MemberDefinition.java b/javascript/extractor/src/com/semmle/js/ast/MemberDefinition.java index 7cacafa96ed..e3bbc6a1830 100644 --- a/javascript/extractor/src/com/semmle/js/ast/MemberDefinition.java +++ b/javascript/extractor/src/com/semmle/js/ast/MemberDefinition.java @@ -9,7 +9,7 @@ import java.util.List; *

    A member definition has a name and an optional initial value, whose type is given by the type * parameter {@code V}. */ -public abstract class MemberDefinition extends Node { +public abstract class MemberDefinition extends Node { /** A bitmask of flags defined in {@linkplain DeclarationFlags}. */ private final int flags; @@ -21,7 +21,7 @@ public abstract class MemberDefinition extends Node { */ private final Expression key; - /** The initial value of the member. */ + /** The initial value / initializer of the member. */ private final V value; /** The decorators applied to this member, if any. */ diff --git a/javascript/extractor/src/com/semmle/js/ast/NodeCopier.java b/javascript/extractor/src/com/semmle/js/ast/NodeCopier.java index 402f2400a62..83a37e11534 100644 --- a/javascript/extractor/src/com/semmle/js/ast/NodeCopier.java +++ b/javascript/extractor/src/com/semmle/js/ast/NodeCopier.java @@ -902,6 +902,6 @@ public class NodeCopier implements Visitor { @Override public INode visit(StaticInitializer nd, Void c) { - return new StaticInitializer(visit(nd.getLoc()), copy(nd.getBody())); + return new StaticInitializer(visit(nd.getLoc()), copy(nd.getValue())); } } diff --git a/javascript/extractor/src/com/semmle/js/ast/StaticInitializer.java b/javascript/extractor/src/com/semmle/js/ast/StaticInitializer.java index be4d5e54548..d4287cd3f49 100644 --- a/javascript/extractor/src/com/semmle/js/ast/StaticInitializer.java +++ b/javascript/extractor/src/com/semmle/js/ast/StaticInitializer.java @@ -1,30 +1,12 @@ package com.semmle.js.ast; /** - * A static initializer block in a class. - * E.g. - * ```TypeScript - * class Foo { - * static bar : number; - * static { - * Foo.bar = 42; - * } - * } + * A static initializer block in a class. E.g. ```TypeScript class Foo { static + * bar : number; static { Foo.bar = 42; } } */ -public class StaticInitializer extends MemberDefinition { - private final BlockStatement body; - +public class StaticInitializer extends MemberDefinition { public StaticInitializer(SourceLocation loc, BlockStatement body) { - super("StaticInitializer", loc, DeclarationFlags.static_, null, null); - this.body = body; - } - - /** - * Gets the body of this static initializer. - * @return The body of this static initializer. - */ - public BlockStatement getBody() { - return body; + super("StaticInitializer", loc, DeclarationFlags.static_, null, body); } @Override @@ -32,7 +14,6 @@ public class StaticInitializer extends MemberDefinition { return false; } - @Override public R accept(Visitor v, C c) { return v.visit(this, c); diff --git a/javascript/extractor/src/com/semmle/js/extractor/ASTExtractor.java b/javascript/extractor/src/com/semmle/js/extractor/ASTExtractor.java index 3f048b99db3..158a33030a4 100644 --- a/javascript/extractor/src/com/semmle/js/extractor/ASTExtractor.java +++ b/javascript/extractor/src/com/semmle/js/extractor/ASTExtractor.java @@ -1646,11 +1646,6 @@ public class ASTExtractor { } } - if (nd instanceof StaticInitializer) { - StaticInitializer si = (StaticInitializer) nd; - visit(si.getBody(), methkey, 3, IdContext.VAR_BIND); - } - if (nd instanceof FieldDefinition) { FieldDefinition field = (FieldDefinition) nd; if (field.isParameterField() && constructorKey != null) { diff --git a/javascript/extractor/src/com/semmle/js/extractor/CFGExtractor.java b/javascript/extractor/src/com/semmle/js/extractor/CFGExtractor.java index 73facb7ea47..fa8452c0b43 100644 --- a/javascript/extractor/src/com/semmle/js/extractor/CFGExtractor.java +++ b/javascript/extractor/src/com/semmle/js/extractor/CFGExtractor.java @@ -1165,7 +1165,7 @@ public class CFGExtractor { private Void visit(Node nd, AClass ac, SuccessorInfo i) { for (MemberDefinition md : ac.getBody().getBody()) { - if (md.isConstructor() && md.isConcrete()) constructor2Class.put(md.getValue(), ac); + if (md.isConstructor() && md.isConcrete()) constructor2Class.put((Expression)md.getValue(), ac); } visitSequence(ac.getId(), ac.getSuperClass(), ac.getBody(), nd); writeSuccessors(nd, visitSequence(getStaticInitializers(ac.getBody()), getDecoratorsOfClass(ac), i.getAllSuccessors())); @@ -1627,7 +1627,7 @@ public class CFGExtractor { List nodes = new ArrayList<>(); for (MemberDefinition node : nd.getBody()) { if (node instanceof FieldDefinition && ((FieldDefinition)node).isStatic()) nodes.add(node); - if (node instanceof StaticInitializer) nodes.add(((StaticInitializer)node).getBody()); + if (node instanceof StaticInitializer) nodes.add(node.getValue()); } return nodes; } From 7ce87a71182b435f6bfbc16ba93d033c565c70c2 Mon Sep 17 00:00:00 2001 From: Erik Krogh Kristensen Date: Fri, 3 Sep 2021 13:45:04 +0200 Subject: [PATCH 401/741] remove stray import --- .../src/com/semmle/ts/extractor/TypeScriptASTConverter.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/javascript/extractor/src/com/semmle/ts/extractor/TypeScriptASTConverter.java b/javascript/extractor/src/com/semmle/ts/extractor/TypeScriptASTConverter.java index d2874beb9de..affea7490a5 100644 --- a/javascript/extractor/src/com/semmle/ts/extractor/TypeScriptASTConverter.java +++ b/javascript/extractor/src/com/semmle/ts/extractor/TypeScriptASTConverter.java @@ -156,8 +156,6 @@ import com.semmle.ts.ast.UnionTypeExpr; import com.semmle.util.collections.CollectionUtil; import com.semmle.util.data.IntList; -import jdk.internal.org.objectweb.asm.commons.StaticInitMerger; - /** * Utility class for converting a TypeScript AST From 48b763c7e9d9b8cc2dfb95844d1f51b8a549aca3 Mon Sep 17 00:00:00 2001 From: Erik Krogh Kristensen Date: Mon, 6 Sep 2021 10:05:20 +0200 Subject: [PATCH 402/741] add qldoc to StaticInitializer::getBody --- javascript/ql/lib/semmle/javascript/Classes.qll | 3 +++ 1 file changed, 3 insertions(+) diff --git a/javascript/ql/lib/semmle/javascript/Classes.qll b/javascript/ql/lib/semmle/javascript/Classes.qll index dff1093025c..eccc005e273 100644 --- a/javascript/ql/lib/semmle/javascript/Classes.qll +++ b/javascript/ql/lib/semmle/javascript/Classes.qll @@ -1145,6 +1145,9 @@ class ParameterField extends FieldDeclaration, @parameter_field { * A static initializer in a class. */ class StaticInitializer extends MemberDefinition, @static_initializer { + /** + * Gets the body of the static initializer. + */ BlockStmt getBody() { result.getParent() = this } override Expr getNameExpr() { none() } From cc0d86403e222f094beec994b87dbe9a8e52f8c7 Mon Sep 17 00:00:00 2001 From: Erik Krogh Kristensen Date: Fri, 10 Sep 2021 23:28:41 +0200 Subject: [PATCH 403/741] revert some type changes that are no longer needed --- javascript/extractor/src/com/semmle/jcorn/Parser.java | 2 +- javascript/extractor/src/com/semmle/js/ast/ClassBody.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/javascript/extractor/src/com/semmle/jcorn/Parser.java b/javascript/extractor/src/com/semmle/jcorn/Parser.java index bc98e938dba..5f7383813c6 100644 --- a/javascript/extractor/src/com/semmle/jcorn/Parser.java +++ b/javascript/extractor/src/com/semmle/jcorn/Parser.java @@ -3219,7 +3219,7 @@ public class Parser { Expression superClass = this.parseClassSuper(); Position bodyStartLoc = this.startLoc; boolean hadConstructor = false; - List> body = new ArrayList<>(); + List> body = new ArrayList>(); this.expect(TokenType.braceL); while (!this.eat(TokenType.braceR)) { if (this.eat(TokenType.semi)) continue; diff --git a/javascript/extractor/src/com/semmle/js/ast/ClassBody.java b/javascript/extractor/src/com/semmle/js/ast/ClassBody.java index 37a86de8afa..beb23ae3a3e 100644 --- a/javascript/extractor/src/com/semmle/js/ast/ClassBody.java +++ b/javascript/extractor/src/com/semmle/js/ast/ClassBody.java @@ -20,7 +20,7 @@ public class ClassBody extends Node { } public MethodDefinition getConstructor() { - for (Node md : body) if (md instanceof MethodDefinition && ((MethodDefinition)md).isConstructor()) return (MethodDefinition) md; + for (MemberDefinition md : body) if (md.isConstructor()) return (MethodDefinition) md; return null; } From fdbf5f73b1fbe4123322cad8c235933a213a7167 Mon Sep 17 00:00:00 2001 From: Erik Krogh Kristensen Date: Tue, 7 Sep 2021 09:40:49 +0200 Subject: [PATCH 404/741] add JS support for static initializers --- .../2021-09-07-static-initializer.md | 2 + .../src/com/semmle/jcorn/Parser.java | 5 + .../Classes/staticInitializer.js | 18 ++++ .../test/library-tests/Classes/tests.expected | 33 +++++++ .../ql/test/library-tests/Classes/tests.ql | 96 +++++++++++++++---- 5 files changed, 134 insertions(+), 20 deletions(-) create mode 100644 javascript/change-notes/2021-09-07-static-initializer.md create mode 100644 javascript/ql/test/library-tests/Classes/staticInitializer.js diff --git a/javascript/change-notes/2021-09-07-static-initializer.md b/javascript/change-notes/2021-09-07-static-initializer.md new file mode 100644 index 00000000000..f4a4dd6a9ea --- /dev/null +++ b/javascript/change-notes/2021-09-07-static-initializer.md @@ -0,0 +1,2 @@ +lgtm,codescanning +* Support for the ECMAScript proposed feature "class static initialization blocks" has been added. diff --git a/javascript/extractor/src/com/semmle/jcorn/Parser.java b/javascript/extractor/src/com/semmle/jcorn/Parser.java index 5f7383813c6..6250e9d8ed6 100644 --- a/javascript/extractor/src/com/semmle/jcorn/Parser.java +++ b/javascript/extractor/src/com/semmle/jcorn/Parser.java @@ -83,6 +83,7 @@ import com.semmle.js.ast.SequenceExpression; import com.semmle.js.ast.SourceLocation; import com.semmle.js.ast.SpreadElement; import com.semmle.js.ast.Statement; +import com.semmle.js.ast.StaticInitializer; import com.semmle.js.ast.Super; import com.semmle.js.ast.SwitchCase; import com.semmle.js.ast.SwitchStatement; @@ -3244,6 +3245,10 @@ public class Parser { PropertyInfo pi = new PropertyInfo(false, isGenerator, methodStartLoc); this.parsePropertyName(pi); boolean isStatic = isMaybeStatic && this.type != TokenType.parenL; + if (isStatic && this.type == TokenType.braceL) { + BlockStatement block = parseBlock(false); + return new StaticInitializer(block.getLoc(), block); + } if (isStatic) { if (isGenerator) this.unexpected(); isGenerator = this.eat(TokenType.star); diff --git a/javascript/ql/test/library-tests/Classes/staticInitializer.js b/javascript/ql/test/library-tests/Classes/staticInitializer.js new file mode 100644 index 00000000000..453840ca57c --- /dev/null +++ b/javascript/ql/test/library-tests/Classes/staticInitializer.js @@ -0,0 +1,18 @@ +class MyClass { + static x = 1; + constructor() { + this.y = 2; + } + static { + MyClass.z = 3; + } + foo() { + this.t = 4; + } + static bar() { + this.u = 5; + } + static { + this.v = 6; + } +} \ No newline at end of file diff --git a/javascript/ql/test/library-tests/Classes/tests.expected b/javascript/ql/test/library-tests/Classes/tests.expected index e200256b70c..9097aafc8db 100644 --- a/javascript/ql/test/library-tests/Classes/tests.expected +++ b/javascript/ql/test/library-tests/Classes/tests.expected @@ -4,6 +4,7 @@ test_FieldInits | privateFields.js:2:2:2:15 | #privDecl = 3; | privateFields.js:2:14:2:14 | 3 | | privateFields.js:3:2:3:12 | #if = "if"; | privateFields.js:3:8:3:11 | "if" | | privateFields.js:21:2:21:22 | ["#publ ... "] = 6; | privateFields.js:21:21:21:21 | 6 | +| staticInitializer.js:2:3:2:15 | static x = 1; | staticInitializer.js:2:14:2:14 | 1 | test_ComputedMethods | tst.js:3:3:3:56 | ["const ... r. */ } | | tst.js:13:3:13:10 | [m]() {} | @@ -11,6 +12,7 @@ test_StaticMethods | points.js:15:3:17:3 | static ... t";\\n } | | points.js:30:3:32:3 | static ... t";\\n } | | staticConstructor.js:2:3:2:59 | static ... tor"; } | +| staticInitializer.js:12:3:14:3 | static ... 5;\\n } | test_ClassDefinition_getSuperClass | points.js:20:1:33:1 | class C ... ;\\n }\\n} | points.js:20:29:20:33 | Point | | tst.js:6:1:8:1 | class B ... t); }\\n} | tst.js:6:17:6:17 | A | @@ -18,6 +20,7 @@ test_ClassNodeStaticMethod | points.js:1:1:18:1 | class P ... ;\\n }\\n} | className | points.js:15:19:17:3 | () {\\n ... t";\\n } | | points.js:20:1:33:1 | class C ... ;\\n }\\n} | className | points.js:30:19:32:3 | () {\\n ... t";\\n } | | staticConstructor.js:1:1:3:1 | class M ... r"; }\\n} | constructor | staticConstructor.js:2:21:2:59 | () { re ... tor"; } | +| staticInitializer.js:1:1:18:1 | class M ... ;\\n }\\n} | bar | staticInitializer.js:12:13:14:3 | () {\\n ... 5;\\n } | test_ClassDefinitions | dataflow.js:4:2:13:2 | class F ... \\n\\t\\t}\\n\\t} | | fields.js:1:1:4:1 | class C ... = 42\\n} | @@ -25,6 +28,7 @@ test_ClassDefinitions | points.js:20:1:33:1 | class C ... ;\\n }\\n} | | privateFields.js:1:1:27:1 | class F ... );\\n\\t}\\n} | | staticConstructor.js:1:1:3:1 | class M ... r"; }\\n} | +| staticInitializer.js:1:1:18:1 | class M ... ;\\n }\\n} | | tst.js:1:9:4:1 | class { ... */ }\\n} | | tst.js:6:1:8:1 | class B ... t); }\\n} | | tst.js:11:1:14:1 | class C ... () {}\\n} | @@ -38,6 +42,7 @@ test_Fields | privateFields.js:3:2:3:12 | #if = "if"; | privateFields.js:3:2:3:4 | #if | | privateFields.js:19:2:19:13 | #privSecond; | privateFields.js:19:2:19:12 | #privSecond | | privateFields.js:21:2:21:22 | ["#publ ... "] = 6; | privateFields.js:21:3:21:16 | "#publicField" | +| staticInitializer.js:2:3:2:15 | static x = 1; | staticInitializer.js:2:10:2:10 | x | test_ClassDefinition_getName | dataflow.js:4:2:13:2 | class F ... \\n\\t\\t}\\n\\t} | Foo | | fields.js:1:1:4:1 | class C ... = 42\\n} | C | @@ -45,6 +50,7 @@ test_ClassDefinition_getName | points.js:20:1:33:1 | class C ... ;\\n }\\n} | ColouredPoint | | privateFields.js:1:1:27:1 | class F ... );\\n\\t}\\n} | Foo | | staticConstructor.js:1:1:3:1 | class M ... r"; }\\n} | MyClass | +| staticInitializer.js:1:1:18:1 | class M ... ;\\n }\\n} | MyClass | | tst.js:1:9:4:1 | class { ... */ }\\n} | A | | tst.js:6:1:8:1 | class B ... t); }\\n} | B | | tst.js:11:1:14:1 | class C ... () {}\\n} | C | @@ -67,6 +73,9 @@ test_MethodDefinitions | privateFields.js:23:2:26:2 | calls() ... l();\\n\\t} | privateFields.js:23:2:23:6 | calls | privateFields.js:23:7:26:2 | () {\\n\\t\\t ... l();\\n\\t} | privateFields.js:1:1:27:1 | class F ... );\\n\\t}\\n} | | staticConstructor.js:1:15:1:14 | constructor() {} | staticConstructor.js:1:15:1:14 | constructor | staticConstructor.js:1:15:1:14 | () {} | staticConstructor.js:1:1:3:1 | class M ... r"; }\\n} | | staticConstructor.js:2:3:2:59 | static ... tor"; } | staticConstructor.js:2:10:2:20 | constructor | staticConstructor.js:2:21:2:59 | () { re ... tor"; } | staticConstructor.js:1:1:3:1 | class M ... r"; }\\n} | +| staticInitializer.js:3:3:5:3 | constru ... 2;\\n } | staticInitializer.js:3:3:3:13 | constructor | staticInitializer.js:3:14:5:3 | () {\\n ... 2;\\n } | staticInitializer.js:1:1:18:1 | class M ... ;\\n }\\n} | +| staticInitializer.js:9:3:11:3 | foo() { ... 4;\\n } | staticInitializer.js:9:3:9:5 | foo | staticInitializer.js:9:6:11:3 | () {\\n ... 4;\\n } | staticInitializer.js:1:1:18:1 | class M ... ;\\n }\\n} | +| staticInitializer.js:12:3:14:3 | static ... 5;\\n } | staticInitializer.js:12:10:12:12 | bar | staticInitializer.js:12:13:14:3 | () {\\n ... 5;\\n } | staticInitializer.js:1:1:18:1 | class M ... ;\\n }\\n} | | tst.js:2:3:2:50 | "constr ... r. */ } | tst.js:2:3:2:15 | "constructor" | tst.js:2:16:2:50 | () { /* ... r. */ } | tst.js:1:9:4:1 | class { ... */ }\\n} | | tst.js:3:3:3:56 | ["const ... r. */ } | tst.js:3:4:3:16 | "constructor" | tst.js:3:18:3:56 | () { /* ... r. */ } | tst.js:1:9:4:1 | class { ... */ }\\n} | | tst.js:7:3:7:38 | constru ... get); } | tst.js:7:3:7:13 | constructor | tst.js:7:14:7:38 | () { su ... get); } | tst.js:6:1:8:1 | class B ... t); }\\n} | @@ -99,6 +108,12 @@ test_getAMember | privateFields.js:1:1:27:1 | class F ... );\\n\\t}\\n} | privateFields.js:23:2:26:2 | calls() ... l();\\n\\t} | | staticConstructor.js:1:1:3:1 | class M ... r"; }\\n} | staticConstructor.js:1:15:1:14 | constructor() {} | | staticConstructor.js:1:1:3:1 | class M ... r"; }\\n} | staticConstructor.js:2:3:2:59 | static ... tor"; } | +| staticInitializer.js:1:1:18:1 | class M ... ;\\n }\\n} | staticInitializer.js:2:3:2:15 | static x = 1; | +| staticInitializer.js:1:1:18:1 | class M ... ;\\n }\\n} | staticInitializer.js:3:3:5:3 | constru ... 2;\\n } | +| staticInitializer.js:1:1:18:1 | class M ... ;\\n }\\n} | staticInitializer.js:6:10:8:3 | {\\n M ... 3;\\n } | +| staticInitializer.js:1:1:18:1 | class M ... ;\\n }\\n} | staticInitializer.js:9:3:11:3 | foo() { ... 4;\\n } | +| staticInitializer.js:1:1:18:1 | class M ... ;\\n }\\n} | staticInitializer.js:12:3:14:3 | static ... 5;\\n } | +| staticInitializer.js:1:1:18:1 | class M ... ;\\n }\\n} | staticInitializer.js:15:10:17:3 | {\\n t ... 6;\\n } | | tst.js:1:9:4:1 | class { ... */ }\\n} | tst.js:2:3:2:50 | "constr ... r. */ } | | tst.js:1:9:4:1 | class { ... */ }\\n} | tst.js:3:3:3:56 | ["const ... r. */ } | | tst.js:6:1:8:1 | class B ... t); }\\n} | tst.js:7:3:7:38 | constru ... get); } | @@ -124,6 +139,9 @@ test_MethodNames | privateFields.js:23:2:26:2 | calls() ... l();\\n\\t} | calls | | staticConstructor.js:1:15:1:14 | constructor() {} | constructor | | staticConstructor.js:2:3:2:59 | static ... tor"; } | constructor | +| staticInitializer.js:3:3:5:3 | constru ... 2;\\n } | constructor | +| staticInitializer.js:9:3:11:3 | foo() { ... 4;\\n } | foo | +| staticInitializer.js:12:3:14:3 | static ... 5;\\n } | bar | | tst.js:2:3:2:50 | "constr ... r. */ } | constructor | | tst.js:3:3:3:56 | ["const ... r. */ } | constructor | | tst.js:7:3:7:38 | constru ... get); } | constructor | @@ -148,6 +166,7 @@ test_ConstructorDefinitions | points.js:21:3:24:3 | constru ... c;\\n } | | privateFields.js:1:11:1:10 | constructor() {} | | staticConstructor.js:1:15:1:14 | constructor() {} | +| staticInitializer.js:3:3:5:3 | constru ... 2;\\n } | | tst.js:2:3:2:50 | "constr ... r. */ } | | tst.js:7:3:7:38 | constru ... get); } | | tst.js:11:9:11:8 | constructor() {} | @@ -158,6 +177,7 @@ test_ClassNodeConstructor | points.js:20:1:33:1 | class C ... ;\\n }\\n} | points.js:21:14:24:3 | (x, y, ... c;\\n } | | privateFields.js:1:1:27:1 | class F ... );\\n\\t}\\n} | privateFields.js:1:11:1:10 | () {} | | staticConstructor.js:1:1:3:1 | class M ... r"; }\\n} | staticConstructor.js:1:15:1:14 | () {} | +| staticInitializer.js:1:1:18:1 | class M ... ;\\n }\\n} | staticInitializer.js:3:14:5:3 | () {\\n ... 2;\\n } | | tst.js:1:9:4:1 | class { ... */ }\\n} | tst.js:2:16:2:50 | () { /* ... r. */ } | | tst.js:6:1:8:1 | class B ... t); }\\n} | tst.js:7:14:7:38 | () { su ... get); } | | tst.js:11:1:14:1 | class C ... () {}\\n} | tst.js:11:9:11:8 | () {} | @@ -170,6 +190,7 @@ test_ClassNodeInstanceMethod | privateFields.js:1:1:27:1 | class F ... );\\n\\t}\\n} | equals | privateFields.js:10:8:12:2 | (o) {\\n\\t ... ecl;\\n\\t} | | privateFields.js:1:1:27:1 | class F ... );\\n\\t}\\n} | reads | privateFields.js:4:7:8:2 | () {\\n\\t\\t ... #if;\\n\\t} | | privateFields.js:1:1:27:1 | class F ... );\\n\\t}\\n} | writes | privateFields.js:14:8:17:2 | () {\\n\\t\\t ... = 5;\\n\\t} | +| staticInitializer.js:1:1:18:1 | class M ... ;\\n }\\n} | foo | staticInitializer.js:9:6:11:3 | () {\\n ... 4;\\n } | | tst.js:1:9:4:1 | class { ... */ }\\n} | constructor | tst.js:3:18:3:56 | () { /* ... r. */ } | | tst.js:11:1:14:1 | class C ... () {}\\n} | m | tst.js:12:4:12:8 | () {} | getAccessModifier @@ -223,6 +244,15 @@ getAccessModifier | staticConstructor.js:2:3:2:59 | static ... tor"; } | staticConstructor.js:2:10:2:20 | constructor | Public | | staticConstructor.js:4:1:4:11 | console.log | staticConstructor.js:4:9:4:11 | log | Public | | staticConstructor.js:4:13:4:31 | MyClass.constructor | staticConstructor.js:4:21:4:31 | constructor | Public | +| staticInitializer.js:2:3:2:15 | static x = 1; | staticInitializer.js:2:10:2:10 | x | Public | +| staticInitializer.js:3:3:5:3 | constru ... 2;\\n } | staticInitializer.js:3:3:3:13 | constructor | Public | +| staticInitializer.js:4:5:4:10 | this.y | staticInitializer.js:4:10:4:10 | y | Public | +| staticInitializer.js:7:5:7:13 | MyClass.z | staticInitializer.js:7:13:7:13 | z | Public | +| staticInitializer.js:9:3:11:3 | foo() { ... 4;\\n } | staticInitializer.js:9:3:9:5 | foo | Public | +| staticInitializer.js:10:5:10:10 | this.t | staticInitializer.js:10:10:10:10 | t | Public | +| staticInitializer.js:12:3:14:3 | static ... 5;\\n } | staticInitializer.js:12:10:12:12 | bar | Public | +| staticInitializer.js:13:5:13:10 | this.u | staticInitializer.js:13:10:13:10 | u | Public | +| staticInitializer.js:16:5:16:10 | this.v | staticInitializer.js:16:10:16:10 | v | Public | | tst.js:2:3:2:50 | "constr ... r. */ } | tst.js:2:3:2:15 | "constructor" | Public | | tst.js:3:3:3:56 | ["const ... r. */ } | tst.js:3:4:3:16 | "constructor" | Public | | tst.js:7:3:7:38 | constru ... get); } | tst.js:7:3:7:13 | constructor | Public | @@ -233,3 +263,6 @@ getAccessModifier dataflow | dataflow.js:2:15:2:22 | "source" | dataflow.js:14:7:14:25 | new Foo().getPriv() | | dataflow.js:2:15:2:22 | "source" | dataflow.js:16:7:16:33 | new Foo ... ivate() | +staticInitializer +| staticInitializer.js:1:1:18:1 | class M ... ;\\n }\\n} | staticInitializer.js:6:10:8:3 | {\\n M ... 3;\\n } | +| staticInitializer.js:1:1:18:1 | class M ... ;\\n }\\n} | staticInitializer.js:15:10:17:3 | {\\n t ... 6;\\n } | diff --git a/javascript/ql/test/library-tests/Classes/tests.ql b/javascript/ql/test/library-tests/Classes/tests.ql index 5cb3c90db85..5231f51c552 100644 --- a/javascript/ql/test/library-tests/Classes/tests.ql +++ b/javascript/ql/test/library-tests/Classes/tests.ql @@ -1,20 +1,76 @@ -import FieldInits -import ComputedMethods -import StaticMethods -import ClassDefinition_getSuperClass -import ClassNodeStaticMethod -import ClassDefinitions -import AccessorMethods -import Fields -import ClassDefinition_getName -import MethodDefinitions -import getAMember -import MethodNames -import NewTargetExpr -import SuperExpr -import SyntheticConstructors -import ConstructorDefinitions -import ClassNodeConstructor -import ClassNodeInstanceMethod -import PrivateField -import ClassFlow +import javascript + +query predicate test_FieldInits(FieldDefinition field, Expr res) { res = field.getInit() } + +query predicate test_ComputedMethods(MethodDefinition md) { md.isComputed() } + +query predicate test_StaticMethods(MethodDefinition md) { md.isStatic() } + +query predicate test_ClassDefinition_getSuperClass(ClassDefinition cd, Expr res) { + res = cd.getSuperClass() +} + +query predicate test_ClassNodeStaticMethod( + DataFlow::ClassNode class_, string name, DataFlow::FunctionNode res +) { + res = class_.getStaticMethod(name) +} + +query predicate test_ClassDefinitions(ClassDefinition cd) { any() } + +query predicate test_AccessorMethods(AccessorMethodDefinition amd) { any() } + +query predicate test_Fields(FieldDefinition field, Expr res) { res = field.getNameExpr() } + +query predicate test_ClassDefinition_getName(ClassDefinition cd, string res) { res = cd.getName() } + +query predicate test_MethodDefinitions( + MethodDefinition md, Expr res0, FunctionExpr res1, ClassDefinition res2 +) { + res0 = md.getNameExpr() and res1 = md.getBody() and res2 = md.getDeclaringClass() +} + +query predicate test_getAMember(ClassDefinition c, MemberDeclaration res) { res = c.getAMember() } + +query predicate test_MethodNames(MethodDefinition md, string res) { res = md.getName() } + +query predicate test_NewTargetExpr(NewTargetExpr e) { any() } + +query predicate test_SuperExpr(SuperExpr s) { any() } + +query predicate test_SyntheticConstructors(ConstructorDefinition cd) { cd.isSynthetic() } + +query predicate test_ConstructorDefinitions(ConstructorDefinition cd) { any() } + +query predicate test_ClassNodeConstructor(DataFlow::ClassNode class_, DataFlow::FunctionNode res) { + res = class_.getConstructor() +} + +query predicate test_ClassNodeInstanceMethod( + DataFlow::ClassNode class_, string name, DataFlow::FunctionNode res +) { + res = class_.getInstanceMethod(name) +} + +query string getAccessModifier(DataFlow::PropRef ref, Expr prop) { + prop = ref.getPropertyNameExpr() and + if ref.isPrivateField() then result = "Private" else result = "Public" +} + +class Configuration extends DataFlow::Configuration { + Configuration() { this = "ClassDataFlowTestingConfig" } + + override predicate isSource(DataFlow::Node source) { + source.getEnclosingExpr().(StringLiteral).getValue().toLowerCase() = "source" + } + + override predicate isSink(DataFlow::Node sink) { + any(DataFlow::CallNode call | call.getCalleeName() = "sink").getAnArgument() = sink + } +} + +query predicate dataflow(DataFlow::Node pred, DataFlow::Node succ) { + any(Configuration c).hasFlow(pred, succ) +} + +query BlockStmt staticInitializer(ClassDefinition cd) { result = cd.getAStaticInitializerBlock() } From 5a7785776c9445b700e0009a7f343097064f131d Mon Sep 17 00:00:00 2001 From: Erik Krogh Kristensen Date: Tue, 14 Sep 2021 20:43:07 +0200 Subject: [PATCH 405/741] add upgrade script --- javascript/ql/lib/upgrade.properties | 2 + .../old.dbscheme | 1216 ++++++++++++++++ .../semmlecode.javascript.dbscheme | 1217 +++++++++++++++++ 3 files changed, 2435 insertions(+) create mode 100644 javascript/ql/lib/upgrade.properties create mode 100644 javascript/upgrades/e34b3e16dba5d11961119818c9beeff334f20a90/old.dbscheme create mode 100644 javascript/upgrades/e34b3e16dba5d11961119818c9beeff334f20a90/semmlecode.javascript.dbscheme diff --git a/javascript/ql/lib/upgrade.properties b/javascript/ql/lib/upgrade.properties new file mode 100644 index 00000000000..736a282f9fa --- /dev/null +++ b/javascript/ql/lib/upgrade.properties @@ -0,0 +1,2 @@ +description: add @static_initializer property kind +compatibility: backwards diff --git a/javascript/upgrades/e34b3e16dba5d11961119818c9beeff334f20a90/old.dbscheme b/javascript/upgrades/e34b3e16dba5d11961119818c9beeff334f20a90/old.dbscheme new file mode 100644 index 00000000000..e34b3e16dba --- /dev/null +++ b/javascript/upgrades/e34b3e16dba5d11961119818c9beeff334f20a90/old.dbscheme @@ -0,0 +1,1216 @@ +/*** Standard fragments ***/ + +/** Files and folders **/ + +@location = @location_default; + +locations_default(unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref + ); + +@sourceline = @locatable; + +numlines(int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref + ); + +files(unique int id: @file, + varchar(900) name: string ref); + +folders(unique int id: @folder, + varchar(900) name: string ref); + + +@container = @folder | @file ; + + +containerparent(int parent: @container ref, + unique int child: @container ref); + +/** Duplicate code **/ + +duplicateCode( + unique int id : @duplication, + varchar(900) relativePath : string ref, + int equivClass : int ref); + +similarCode( + unique int id : @similarity, + varchar(900) relativePath : string ref, + int equivClass : int ref); + +@duplication_or_similarity = @duplication | @similarity; + +tokens( + int id : @duplication_or_similarity ref, + int offset : int ref, + int beginLine : int ref, + int beginColumn : int ref, + int endLine : int ref, + int endColumn : int ref); + +/** External data **/ + +externalData( + int id : @externalDataElement, + varchar(900) path : string ref, + int column: int ref, + varchar(900) value : string ref +); + +snapshotDate(unique date snapshotDate : date ref); + +sourceLocationPrefix(varchar(900) prefix : string ref); + +/** Version control data **/ + +svnentries( + int id : @svnentry, + varchar(500) revision : string ref, + varchar(500) author : string ref, + date revisionDate : date ref, + int changeSize : int ref +); + +svnaffectedfiles( + int id : @svnentry ref, + int file : @file ref, + varchar(500) action : string ref +); + +svnentrymsg( + int id : @svnentry ref, + varchar(500) message : string ref +); + +svnchurn( + int commit : @svnentry ref, + int file : @file ref, + int addedLines : int ref, + int deletedLines : int ref +); + + +/*** JavaScript-specific part ***/ + +filetype( + int file: @file ref, + string filetype: string ref +) + +// top-level code fragments +toplevels (unique int id: @toplevel, + int kind: int ref); + +is_externs (int toplevel: @toplevel ref); + +case @toplevel.kind of + 0 = @script +| 1 = @inline_script +| 2 = @event_handler +| 3 = @javascript_url +| 4 = @template_toplevel; + +is_module (int tl: @toplevel ref); +is_nodejs (int tl: @toplevel ref); +is_es2015_module (int tl: @toplevel ref); +is_closure_module (int tl: @toplevel ref); + +@xml_node_with_code = @xmlelement | @xmlattribute | @template_placeholder_tag; +toplevel_parent_xml_node( + unique int toplevel: @toplevel ref, + int xmlnode: @xml_node_with_code ref); + +xml_element_parent_expression( + unique int xmlnode: @xmlelement ref, + int expression: @expr ref, + int index: int ref); + +// statements +#keyset[parent, idx] +stmts (unique int id: @stmt, + int kind: int ref, + int parent: @stmt_parent ref, + int idx: int ref, + varchar(900) tostring: string ref); + +stmt_containers (unique int stmt: @stmt ref, + int container: @stmt_container ref); + +jump_targets (unique int jump: @stmt ref, + int target: @stmt ref); + +@stmt_parent = @stmt | @toplevel | @function_expr | @arrow_function_expr; +@stmt_container = @toplevel | @function | @namespace_declaration | @external_module_declaration | @global_augmentation_declaration; + +case @stmt.kind of + 0 = @empty_stmt +| 1 = @block_stmt +| 2 = @expr_stmt +| 3 = @if_stmt +| 4 = @labeled_stmt +| 5 = @break_stmt +| 6 = @continue_stmt +| 7 = @with_stmt +| 8 = @switch_stmt +| 9 = @return_stmt +| 10 = @throw_stmt +| 11 = @try_stmt +| 12 = @while_stmt +| 13 = @do_while_stmt +| 14 = @for_stmt +| 15 = @for_in_stmt +| 16 = @debugger_stmt +| 17 = @function_decl_stmt +| 18 = @var_decl_stmt +| 19 = @case +| 20 = @catch_clause +| 21 = @for_of_stmt +| 22 = @const_decl_stmt +| 23 = @let_stmt +| 24 = @legacy_let_stmt +| 25 = @for_each_stmt +| 26 = @class_decl_stmt +| 27 = @import_declaration +| 28 = @export_all_declaration +| 29 = @export_default_declaration +| 30 = @export_named_declaration +| 31 = @namespace_declaration +| 32 = @import_equals_declaration +| 33 = @export_assign_declaration +| 34 = @interface_declaration +| 35 = @type_alias_declaration +| 36 = @enum_declaration +| 37 = @external_module_declaration +| 38 = @export_as_namespace_declaration +| 39 = @global_augmentation_declaration +; + +@decl_stmt = @var_decl_stmt | @const_decl_stmt | @let_stmt | @legacy_let_stmt; + +@export_declaration = @export_all_declaration | @export_default_declaration | @export_named_declaration; + +@namespace_definition = @namespace_declaration | @enum_declaration; +@type_definition = @class_definition | @interface_declaration | @enum_declaration | @type_alias_declaration | @enum_member; + +is_instantiated(unique int decl: @namespace_declaration ref); + +@declarable_node = @decl_stmt | @namespace_declaration | @class_decl_stmt | @function_decl_stmt | @enum_declaration | @external_module_declaration | @global_augmentation_declaration | @field; +has_declare_keyword(unique int stmt: @declarable_node ref); + +is_for_await_of(unique int forof: @for_of_stmt ref); + +// expressions +#keyset[parent, idx] +exprs (unique int id: @expr, + int kind: int ref, + int parent: @expr_parent ref, + int idx: int ref, + varchar(900) tostring: string ref); + +literals (varchar(900) value: string ref, + varchar(900) raw: string ref, + unique int expr: @expr_or_type ref); + +enclosing_stmt (unique int expr: @expr_or_type ref, + int stmt: @stmt ref); + +expr_containers (unique int expr: @expr_or_type ref, + int container: @stmt_container ref); + +array_size (unique int ae: @arraylike ref, + int sz: int ref); + +is_delegating (int yield: @yield_expr ref); + +@expr_or_stmt = @expr | @stmt; +@expr_or_type = @expr | @typeexpr; +@expr_parent = @expr_or_stmt | @property | @function_typeexpr; +@arraylike = @array_expr | @array_pattern; +@type_annotation = @typeexpr | @jsdoc_type_expr; +@node_in_stmt_container = @cfg_node | @type_annotation | @toplevel; + +case @expr.kind of + 0 = @label +| 1 = @null_literal +| 2 = @boolean_literal +| 3 = @number_literal +| 4 = @string_literal +| 5 = @regexp_literal +| 6 = @this_expr +| 7 = @array_expr +| 8 = @obj_expr +| 9 = @function_expr +| 10 = @seq_expr +| 11 = @conditional_expr +| 12 = @new_expr +| 13 = @call_expr +| 14 = @dot_expr +| 15 = @index_expr +| 16 = @neg_expr +| 17 = @plus_expr +| 18 = @log_not_expr +| 19 = @bit_not_expr +| 20 = @typeof_expr +| 21 = @void_expr +| 22 = @delete_expr +| 23 = @eq_expr +| 24 = @neq_expr +| 25 = @eqq_expr +| 26 = @neqq_expr +| 27 = @lt_expr +| 28 = @le_expr +| 29 = @gt_expr +| 30 = @ge_expr +| 31 = @lshift_expr +| 32 = @rshift_expr +| 33 = @urshift_expr +| 34 = @add_expr +| 35 = @sub_expr +| 36 = @mul_expr +| 37 = @div_expr +| 38 = @mod_expr +| 39 = @bitor_expr +| 40 = @xor_expr +| 41 = @bitand_expr +| 42 = @in_expr +| 43 = @instanceof_expr +| 44 = @logand_expr +| 45 = @logor_expr +| 47 = @assign_expr +| 48 = @assign_add_expr +| 49 = @assign_sub_expr +| 50 = @assign_mul_expr +| 51 = @assign_div_expr +| 52 = @assign_mod_expr +| 53 = @assign_lshift_expr +| 54 = @assign_rshift_expr +| 55 = @assign_urshift_expr +| 56 = @assign_or_expr +| 57 = @assign_xor_expr +| 58 = @assign_and_expr +| 59 = @preinc_expr +| 60 = @postinc_expr +| 61 = @predec_expr +| 62 = @postdec_expr +| 63 = @par_expr +| 64 = @var_declarator +| 65 = @arrow_function_expr +| 66 = @spread_element +| 67 = @array_pattern +| 68 = @object_pattern +| 69 = @yield_expr +| 70 = @tagged_template_expr +| 71 = @template_literal +| 72 = @template_element +| 73 = @array_comprehension_expr +| 74 = @generator_expr +| 75 = @for_in_comprehension_block +| 76 = @for_of_comprehension_block +| 77 = @legacy_letexpr +| 78 = @var_decl +| 79 = @proper_varaccess +| 80 = @class_expr +| 81 = @super_expr +| 82 = @newtarget_expr +| 83 = @named_import_specifier +| 84 = @import_default_specifier +| 85 = @import_namespace_specifier +| 86 = @named_export_specifier +| 87 = @exp_expr +| 88 = @assign_exp_expr +| 89 = @jsx_element +| 90 = @jsx_qualified_name +| 91 = @jsx_empty_expr +| 92 = @await_expr +| 93 = @function_sent_expr +| 94 = @decorator +| 95 = @export_default_specifier +| 96 = @export_namespace_specifier +| 97 = @bind_expr +| 98 = @external_module_reference +| 99 = @dynamic_import +| 100 = @expression_with_type_arguments +| 101 = @prefix_type_assertion +| 102 = @as_type_assertion +| 103 = @export_varaccess +| 104 = @decorator_list +| 105 = @non_null_assertion +| 106 = @bigint_literal +| 107 = @nullishcoalescing_expr +| 108 = @e4x_xml_anyname +| 109 = @e4x_xml_static_attribute_selector +| 110 = @e4x_xml_dynamic_attribute_selector +| 111 = @e4x_xml_filter_expression +| 112 = @e4x_xml_static_qualident +| 113 = @e4x_xml_dynamic_qualident +| 114 = @e4x_xml_dotdotexpr +| 115 = @import_meta_expr +| 116 = @assignlogandexpr +| 117 = @assignlogorexpr +| 118 = @assignnullishcoalescingexpr +| 119 = @template_pipe_ref +| 120 = @generated_code_expr +; + +@varaccess = @proper_varaccess | @export_varaccess; +@varref = @var_decl | @varaccess; + +@identifier = @label | @varref | @type_identifier; + +@literal = @null_literal | @boolean_literal | @number_literal | @string_literal | @regexp_literal | @bigint_literal; + +@propaccess = @dot_expr | @index_expr; + +@invokeexpr = @new_expr | @call_expr; + +@unaryexpr = @neg_expr | @plus_expr | @log_not_expr | @bit_not_expr | @typeof_expr | @void_expr | @delete_expr | @spread_element; + +@equality_test = @eq_expr | @neq_expr | @eqq_expr | @neqq_expr; + +@comparison = @equality_test | @lt_expr | @le_expr | @gt_expr | @ge_expr; + +@binaryexpr = @comparison | @lshift_expr | @rshift_expr | @urshift_expr | @add_expr | @sub_expr | @mul_expr | @div_expr | @mod_expr | @exp_expr | @bitor_expr | @xor_expr | @bitand_expr | @in_expr | @instanceof_expr | @logand_expr | @logor_expr | @nullishcoalescing_expr; + +@assignment = @assign_expr | @assign_add_expr | @assign_sub_expr | @assign_mul_expr | @assign_div_expr | @assign_mod_expr | @assign_exp_expr | @assign_lshift_expr | @assign_rshift_expr | @assign_urshift_expr | @assign_or_expr | @assign_xor_expr | @assign_and_expr | @assignlogandexpr | @assignlogorexpr | @assignnullishcoalescingexpr; + +@updateexpr = @preinc_expr | @postinc_expr | @predec_expr | @postdec_expr; + +@pattern = @varref | @array_pattern | @object_pattern; + +@comprehension_expr = @array_comprehension_expr | @generator_expr; + +@comprehension_block = @for_in_comprehension_block | @for_of_comprehension_block; + +@import_specifier = @named_import_specifier | @import_default_specifier | @import_namespace_specifier; + +@exportspecifier = @named_export_specifier | @export_default_specifier | @export_namespace_specifier; + +@import_or_export_declaration = @import_declaration | @export_declaration; + +@type_assertion = @as_type_assertion | @prefix_type_assertion; + +@class_definition = @class_decl_stmt | @class_expr; +@interface_definition = @interface_declaration | @interface_typeexpr; +@class_or_interface = @class_definition | @interface_definition; + +@lexical_decl = @var_decl | @type_decl; +@lexical_access = @varaccess | @local_type_access | @local_var_type_access | @local_namespace_access; +@lexical_ref = @lexical_decl | @lexical_access; + +@e4x_xml_attribute_selector = @e4x_xml_static_attribute_selector | @e4x_xml_dynamic_attribute_selector; +@e4x_xml_qualident = @e4x_xml_static_qualident | @e4x_xml_dynamic_qualident; + +expr_contains_template_tag_location( + int expr: @expr ref, + int location: @location ref +); + +@template_placeholder_tag_parent = @xmlelement | @xmlattribute | @file; + +template_placeholder_tag_info( + unique int node: @template_placeholder_tag, + int parentNode: @template_placeholder_tag_parent ref, + varchar(900) raw: string ref +); + +// scopes +scopes (unique int id: @scope, + int kind: int ref); + +case @scope.kind of + 0 = @global_scope +| 1 = @function_scope +| 2 = @catch_scope +| 3 = @module_scope +| 4 = @block_scope +| 5 = @for_scope +| 6 = @for_in_scope // for-of scopes work the same as for-in scopes +| 7 = @comprehension_block_scope +| 8 = @class_expr_scope +| 9 = @namespace_scope +| 10 = @class_decl_scope +| 11 = @interface_scope +| 12 = @type_alias_scope +| 13 = @mapped_type_scope +| 14 = @enum_scope +| 15 = @external_module_scope +| 16 = @conditional_type_scope; + +scopenodes (unique int node: @ast_node ref, + int scope: @scope ref); + +scopenesting (unique int inner: @scope ref, + int outer: @scope ref); + +// functions +@function = @function_decl_stmt | @function_expr | @arrow_function_expr; + +@parameterized = @function | @catch_clause; +@type_parameterized = @function | @class_or_interface | @type_alias_declaration | @mapped_typeexpr | @infer_typeexpr; + +is_generator (int fun: @function ref); +has_rest_parameter (int fun: @function ref); +is_async (int fun: @function ref); + +// variables and lexically scoped type names +#keyset[scope, name] +variables (unique int id: @variable, + varchar(900) name: string ref, + int scope: @scope ref); + +#keyset[scope, name] +local_type_names (unique int id: @local_type_name, + varchar(900) name: string ref, + int scope: @scope ref); + +#keyset[scope, name] +local_namespace_names (unique int id: @local_namespace_name, + varchar(900) name: string ref, + int scope: @scope ref); + +is_arguments_object (int id: @variable ref); + +@lexical_name = @variable | @local_type_name | @local_namespace_name; + +@bind_id = @varaccess | @local_var_type_access; +bind (unique int id: @bind_id ref, + int decl: @variable ref); + +decl (unique int id: @var_decl ref, + int decl: @variable ref); + +@typebind_id = @local_type_access | @export_varaccess; +typebind (unique int id: @typebind_id ref, + int decl: @local_type_name ref); + +@typedecl_id = @type_decl | @var_decl; +typedecl (unique int id: @typedecl_id ref, + int decl: @local_type_name ref); + +namespacedecl (unique int id: @var_decl ref, + int decl: @local_namespace_name ref); + +@namespacebind_id = @local_namespace_access | @export_varaccess; +namespacebind (unique int id: @namespacebind_id ref, + int decl: @local_namespace_name ref); + + +// properties in object literals, property patterns in object patterns, and method declarations in classes +#keyset[parent, index] +properties (unique int id: @property, + int parent: @property_parent ref, + int index: int ref, + int kind: int ref, + varchar(900) tostring: string ref); + +case @property.kind of + 0 = @value_property +| 1 = @property_getter +| 2 = @property_setter +| 3 = @jsx_attribute +| 4 = @function_call_signature +| 5 = @constructor_call_signature +| 6 = @index_signature +| 7 = @enum_member +| 8 = @proper_field +| 9 = @parameter_field +; + +@property_parent = @obj_expr | @object_pattern | @class_definition | @jsx_element | @interface_definition | @enum_declaration; +@property_accessor = @property_getter | @property_setter; +@call_signature = @function_call_signature | @constructor_call_signature; +@field = @proper_field | @parameter_field; +@field_or_vardeclarator = @field | @var_declarator; + +is_computed (int id: @property ref); +is_method (int id: @property ref); +is_static (int id: @property ref); +is_abstract_member (int id: @property ref); +is_const_enum (int id: @enum_declaration ref); +is_abstract_class (int id: @class_decl_stmt ref); + +has_public_keyword (int id: @property ref); +has_private_keyword (int id: @property ref); +has_protected_keyword (int id: @property ref); +has_readonly_keyword (int id: @property ref); +has_type_keyword (int id: @import_or_export_declaration ref); +is_optional_member (int id: @property ref); +has_definite_assignment_assertion (int id: @field_or_vardeclarator ref); +is_optional_parameter_declaration (unique int parameter: @pattern ref); + +#keyset[constructor, param_index] +parameter_fields( + unique int field: @parameter_field ref, + int constructor: @function_expr ref, + int param_index: int ref +); + +// types +#keyset[parent, idx] +typeexprs ( + unique int id: @typeexpr, + int kind: int ref, + int parent: @typeexpr_parent ref, + int idx: int ref, + varchar(900) tostring: string ref +); + +case @typeexpr.kind of + 0 = @local_type_access +| 1 = @type_decl +| 2 = @keyword_typeexpr +| 3 = @string_literal_typeexpr +| 4 = @number_literal_typeexpr +| 5 = @boolean_literal_typeexpr +| 6 = @array_typeexpr +| 7 = @union_typeexpr +| 8 = @indexed_access_typeexpr +| 9 = @intersection_typeexpr +| 10 = @parenthesized_typeexpr +| 11 = @tuple_typeexpr +| 12 = @keyof_typeexpr +| 13 = @qualified_type_access +| 14 = @generic_typeexpr +| 15 = @type_label +| 16 = @typeof_typeexpr +| 17 = @local_var_type_access +| 18 = @qualified_var_type_access +| 19 = @this_var_type_access +| 20 = @predicate_typeexpr +| 21 = @interface_typeexpr +| 22 = @type_parameter +| 23 = @plain_function_typeexpr +| 24 = @constructor_typeexpr +| 25 = @local_namespace_access +| 26 = @qualified_namespace_access +| 27 = @mapped_typeexpr +| 28 = @conditional_typeexpr +| 29 = @infer_typeexpr +| 30 = @import_type_access +| 31 = @import_namespace_access +| 32 = @import_var_type_access +| 33 = @optional_typeexpr +| 34 = @rest_typeexpr +| 35 = @bigint_literal_typeexpr +| 36 = @readonly_typeexpr +| 37 = @template_literal_typeexpr +; + +@typeref = @typeaccess | @type_decl; +@type_identifier = @type_decl | @local_type_access | @type_label | @local_var_type_access | @local_namespace_access; +@typeexpr_parent = @expr | @stmt | @property | @typeexpr; +@literal_typeexpr = @string_literal_typeexpr | @number_literal_typeexpr | @boolean_literal_typeexpr | @bigint_literal_typeexpr; +@typeaccess = @local_type_access | @qualified_type_access | @import_type_access; +@vartypeaccess = @local_var_type_access | @qualified_var_type_access | @this_var_type_access | @import_var_type_access; +@namespace_access = @local_namespace_access | @qualified_namespace_access | @import_namespace_access; +@import_typeexpr = @import_type_access | @import_namespace_access | @import_var_type_access; + +@function_typeexpr = @plain_function_typeexpr | @constructor_typeexpr; + +// types +types ( + unique int id: @type, + int kind: int ref, + varchar(900) tostring: string ref +); + +#keyset[parent, idx] +type_child ( + int child: @type ref, + int parent: @type ref, + int idx: int ref +); + +case @type.kind of + 0 = @any_type +| 1 = @string_type +| 2 = @number_type +| 3 = @union_type +| 4 = @true_type +| 5 = @false_type +| 6 = @type_reference +| 7 = @object_type +| 8 = @canonical_type_variable_type +| 9 = @typeof_type +| 10 = @void_type +| 11 = @undefined_type +| 12 = @null_type +| 13 = @never_type +| 14 = @plain_symbol_type +| 15 = @unique_symbol_type +| 16 = @objectkeyword_type +| 17 = @intersection_type +| 18 = @tuple_type +| 19 = @lexical_type_variable_type +| 20 = @this_type +| 21 = @number_literal_type +| 22 = @string_literal_type +| 23 = @unknown_type +| 24 = @bigint_type +| 25 = @bigint_literal_type +; + +@boolean_literal_type = @true_type | @false_type; +@symbol_type = @plain_symbol_type | @unique_symbol_type; +@union_or_intersection_type = @union_type | @intersection_type; +@typevariable_type = @canonical_type_variable_type | @lexical_type_variable_type; + +has_asserts_keyword(int node: @predicate_typeexpr ref); + +@typed_ast_node = @expr | @typeexpr | @function; +ast_node_type( + unique int node: @typed_ast_node ref, + int typ: @type ref); + +declared_function_signature( + unique int node: @function ref, + int sig: @signature_type ref +); + +invoke_expr_signature( + unique int node: @invokeexpr ref, + int sig: @signature_type ref +); + +invoke_expr_overload_index( + unique int node: @invokeexpr ref, + int index: int ref +); + +symbols ( + unique int id: @symbol, + int kind: int ref, + varchar(900) name: string ref +); + +symbol_parent ( + unique int symbol: @symbol ref, + int parent: @symbol ref +); + +symbol_module ( + int symbol: @symbol ref, + varchar(900) moduleName: string ref +); + +symbol_global ( + int symbol: @symbol ref, + varchar(900) globalName: string ref +); + +case @symbol.kind of + 0 = @root_symbol +| 1 = @member_symbol +| 2 = @other_symbol +; + +@type_with_symbol = @type_reference | @typevariable_type | @typeof_type | @unique_symbol_type; +@ast_node_with_symbol = @type_definition | @namespace_definition | @toplevel | @typeaccess | @namespace_access | @var_decl | @function | @invokeexpr | @import_declaration | @external_module_reference; + +ast_node_symbol( + unique int node: @ast_node_with_symbol ref, + int symbol: @symbol ref); + +type_symbol( + unique int typ: @type_with_symbol ref, + int symbol: @symbol ref); + +#keyset[typ, name] +type_property( + int typ: @type ref, + varchar(900) name: string ref, + int propertyType: @type ref); + +type_alias( + unique int aliasType: @type ref, + int underlyingType: @type ref); + +@literal_type = @string_literal_type | @number_literal_type | @boolean_literal_type | @bigint_literal_type; +@type_with_literal_value = @string_literal_type | @number_literal_type | @bigint_literal_type; +type_literal_value( + unique int typ: @type_with_literal_value ref, + varchar(900) value: string ref); + +signature_types ( + unique int id: @signature_type, + int kind: int ref, + varchar(900) tostring: string ref, + int type_parameters: int ref, + int required_params: int ref +); + +is_abstract_signature( + unique int sig: @signature_type ref +); + +signature_rest_parameter( + unique int sig: @signature_type ref, + int rest_param_arra_type: @type ref +); + +case @signature_type.kind of + 0 = @function_signature_type +| 1 = @constructor_signature_type +; + +#keyset[typ, kind, index] +type_contains_signature ( + int typ: @type ref, + int kind: int ref, // constructor/call/index + int index: int ref, // ordering of overloaded signatures + int sig: @signature_type ref +); + +#keyset[parent, index] +signature_contains_type ( + int child: @type ref, + int parent: @signature_type ref, + int index: int ref +); + +#keyset[sig, index] +signature_parameter_name ( + int sig: @signature_type ref, + int index: int ref, + varchar(900) name: string ref +); + +number_index_type ( + unique int baseType: @type ref, + int propertyType: @type ref +); + +string_index_type ( + unique int baseType: @type ref, + int propertyType: @type ref +); + +base_type_names( + int typeName: @symbol ref, + int baseTypeName: @symbol ref +); + +self_types( + int typeName: @symbol ref, + int selfType: @type_reference ref +); + +tuple_type_min_length( + unique int typ: @type ref, + int minLength: int ref +); + +tuple_type_rest_index( + unique int typ: @type ref, + int index: int ref +); + +// comments +comments (unique int id: @comment, + int kind: int ref, + int toplevel: @toplevel ref, + varchar(900) text: string ref, + varchar(900) tostring: string ref); + +case @comment.kind of + 0 = @slashslash_comment +| 1 = @slashstar_comment +| 2 = @doc_comment +| 3 = @html_comment_start +| 4 = @htmlcommentend; + +@html_comment = @html_comment_start | @htmlcommentend; +@line_comment = @slashslash_comment | @html_comment; +@block_comment = @slashstar_comment | @doc_comment; + +// source lines +lines (unique int id: @line, + int toplevel: @toplevel ref, + varchar(900) text: string ref, + varchar(2) terminator: string ref); +indentation (int file: @file ref, + int lineno: int ref, + varchar(1) indentChar: string ref, + int indentDepth: int ref); + +// JavaScript parse errors +js_parse_errors (unique int id: @js_parse_error, + int toplevel: @toplevel ref, + varchar(900) message: string ref, + varchar(900) line: string ref); + +// regular expressions +#keyset[parent, idx] +regexpterm (unique int id: @regexpterm, + int kind: int ref, + int parent: @regexpparent ref, + int idx: int ref, + varchar(900) tostring: string ref); + +@regexpparent = @regexpterm | @regexp_literal | @string_literal; + +case @regexpterm.kind of + 0 = @regexp_alt +| 1 = @regexp_seq +| 2 = @regexp_caret +| 3 = @regexp_dollar +| 4 = @regexp_wordboundary +| 5 = @regexp_nonwordboundary +| 6 = @regexp_positive_lookahead +| 7 = @regexp_negative_lookahead +| 8 = @regexp_star +| 9 = @regexp_plus +| 10 = @regexp_opt +| 11 = @regexp_range +| 12 = @regexp_dot +| 13 = @regexp_group +| 14 = @regexp_normal_constant +| 15 = @regexp_hex_escape +| 16 = @regexp_unicode_escape +| 17 = @regexp_dec_escape +| 18 = @regexp_oct_escape +| 19 = @regexp_ctrl_escape +| 20 = @regexp_char_class_escape +| 21 = @regexp_id_escape +| 22 = @regexp_backref +| 23 = @regexp_char_class +| 24 = @regexp_char_range +| 25 = @regexp_positive_lookbehind +| 26 = @regexp_negative_lookbehind +| 27 = @regexp_unicode_property_escape; + +regexp_parse_errors (unique int id: @regexp_parse_error, + int regexp: @regexpterm ref, + varchar(900) message: string ref); + +@regexp_quantifier = @regexp_star | @regexp_plus | @regexp_opt | @regexp_range; +@regexp_escape = @regexp_char_escape | @regexp_char_class_escape | @regexp_unicode_property_escape; +@regexp_char_escape = @regexp_hex_escape | @regexp_unicode_escape | @regexp_dec_escape | @regexp_oct_escape | @regexp_ctrl_escape | @regexp_id_escape; +@regexp_constant = @regexp_normal_constant | @regexp_char_escape; +@regexp_lookahead = @regexp_positive_lookahead | @regexp_negative_lookahead; +@regexp_lookbehind = @regexp_positive_lookbehind | @regexp_negative_lookbehind; +@regexp_subpattern = @regexp_lookahead | @regexp_lookbehind; +@regexp_anchor = @regexp_dollar | @regexp_caret; + +is_greedy (int id: @regexp_quantifier ref); +range_quantifier_lower_bound (unique int id: @regexp_range ref, int lo: int ref); +range_quantifier_upper_bound (unique int id: @regexp_range ref, int hi: int ref); +is_capture (unique int id: @regexp_group ref, int number: int ref); +is_named_capture (unique int id: @regexp_group ref, string name: string ref); +is_inverted (int id: @regexp_char_class ref); +regexp_const_value (unique int id: @regexp_constant ref, varchar(1) value: string ref); +char_class_escape (unique int id: @regexp_char_class_escape ref, varchar(1) value: string ref); +backref (unique int id: @regexp_backref ref, int value: int ref); +named_backref (unique int id: @regexp_backref ref, string name: string ref); +unicode_property_escapename (unique int id: @regexp_unicode_property_escape ref, string name: string ref); +unicode_property_escapevalue (unique int id: @regexp_unicode_property_escape ref, string value: string ref); + +// tokens +#keyset[toplevel, idx] +tokeninfo (unique int id: @token, + int kind: int ref, + int toplevel: @toplevel ref, + int idx: int ref, + varchar(900) value: string ref); + +case @token.kind of + 0 = @token_eof +| 1 = @token_null_literal +| 2 = @token_boolean_literal +| 3 = @token_numeric_literal +| 4 = @token_string_literal +| 5 = @token_regular_expression +| 6 = @token_identifier +| 7 = @token_keyword +| 8 = @token_punctuator; + +// associate comments with the token immediately following them (which may be EOF) +next_token (int comment: @comment ref, int token: @token ref); + +// JSON +#keyset[parent, idx] +json (unique int id: @json_value, + int kind: int ref, + int parent: @json_parent ref, + int idx: int ref, + varchar(900) tostring: string ref); + +json_literals (varchar(900) value: string ref, + varchar(900) raw: string ref, + unique int expr: @json_value ref); + +json_properties (int obj: @json_object ref, + varchar(900) property: string ref, + int value: @json_value ref); + +json_errors (unique int id: @json_parse_error, + varchar(900) message: string ref); + +json_locations(unique int locatable: @json_locatable ref, + int location: @location_default ref); + +case @json_value.kind of + 0 = @json_null +| 1 = @json_boolean +| 2 = @json_number +| 3 = @json_string +| 4 = @json_array +| 5 = @json_object; + +@json_parent = @json_object | @json_array | @file; + +@json_locatable = @json_value | @json_parse_error; + +// locations +@ast_node = @toplevel | @stmt | @expr | @property | @typeexpr; + +@locatable = @file + | @ast_node + | @comment + | @line + | @js_parse_error | @regexp_parse_error + | @regexpterm + | @json_locatable + | @token + | @cfg_node + | @jsdoc | @jsdoc_type_expr | @jsdoc_tag + | @yaml_locatable + | @xmllocatable + | @configLocatable + | @template_placeholder_tag; + +hasLocation (unique int locatable: @locatable ref, + int location: @location ref); + +// CFG +entry_cfg_node (unique int id: @entry_node, int container: @stmt_container ref); +exit_cfg_node (unique int id: @exit_node, int container: @stmt_container ref); +guard_node (unique int id: @guard_node, int kind: int ref, int test: @expr ref); +case @guard_node.kind of + 0 = @falsy_guard +| 1 = @truthy_guard; +@condition_guard = @falsy_guard | @truthy_guard; + +@synthetic_cfg_node = @entry_node | @exit_node | @guard_node; +@cfg_node = @synthetic_cfg_node | @expr_parent; + +successor (int pred: @cfg_node ref, int succ: @cfg_node ref); + +// JSDoc comments +jsdoc (unique int id: @jsdoc, varchar(900) description: string ref, int comment: @comment ref); +#keyset[parent, idx] +jsdoc_tags (unique int id: @jsdoc_tag, varchar(900) title: string ref, + int parent: @jsdoc ref, int idx: int ref, varchar(900) tostring: string ref); +jsdoc_tag_descriptions (unique int tag: @jsdoc_tag ref, varchar(900) text: string ref); +jsdoc_tag_names (unique int tag: @jsdoc_tag ref, varchar(900) text: string ref); + +#keyset[parent, idx] +jsdoc_type_exprs (unique int id: @jsdoc_type_expr, + int kind: int ref, + int parent: @jsdoc_type_expr_parent ref, + int idx: int ref, + varchar(900) tostring: string ref); +case @jsdoc_type_expr.kind of + 0 = @jsdoc_any_type_expr +| 1 = @jsdoc_null_type_expr +| 2 = @jsdoc_undefined_type_expr +| 3 = @jsdoc_unknown_type_expr +| 4 = @jsdoc_void_type_expr +| 5 = @jsdoc_named_type_expr +| 6 = @jsdoc_applied_type_expr +| 7 = @jsdoc_nullable_type_expr +| 8 = @jsdoc_non_nullable_type_expr +| 9 = @jsdoc_record_type_expr +| 10 = @jsdoc_array_type_expr +| 11 = @jsdoc_union_type_expr +| 12 = @jsdoc_function_type_expr +| 13 = @jsdoc_optional_type_expr +| 14 = @jsdoc_rest_type_expr +; + +#keyset[id, idx] +jsdoc_record_field_name (int id: @jsdoc_record_type_expr ref, int idx: int ref, varchar(900) name: string ref); +jsdoc_prefix_qualifier (int id: @jsdoc_type_expr ref); +jsdoc_has_new_parameter (int fn: @jsdoc_function_type_expr ref); + +@jsdoc_type_expr_parent = @jsdoc_type_expr | @jsdoc_tag; + +jsdoc_errors (unique int id: @jsdoc_error, int tag: @jsdoc_tag ref, varchar(900) message: string ref, varchar(900) tostring: string ref); + +// YAML +#keyset[parent, idx] +yaml (unique int id: @yaml_node, + int kind: int ref, + int parent: @yaml_node_parent ref, + int idx: int ref, + varchar(900) tag: string ref, + varchar(900) tostring: string ref); + +case @yaml_node.kind of + 0 = @yaml_scalar_node +| 1 = @yaml_mapping_node +| 2 = @yaml_sequence_node +| 3 = @yaml_alias_node +; + +@yaml_collection_node = @yaml_mapping_node | @yaml_sequence_node; + +@yaml_node_parent = @yaml_collection_node | @file; + +yaml_anchors (unique int node: @yaml_node ref, + varchar(900) anchor: string ref); + +yaml_aliases (unique int alias: @yaml_alias_node ref, + varchar(900) target: string ref); + +yaml_scalars (unique int scalar: @yaml_scalar_node ref, + int style: int ref, + varchar(900) value: string ref); + +yaml_errors (unique int id: @yaml_error, + varchar(900) message: string ref); + +yaml_locations(unique int locatable: @yaml_locatable ref, + int location: @location_default ref); + +@yaml_locatable = @yaml_node | @yaml_error; + +/* XML Files */ + +xmlEncoding( + unique int id: @file ref, + varchar(900) encoding: string ref +); + +xmlDTDs( + unique int id: @xmldtd, + varchar(900) root: string ref, + varchar(900) publicId: string ref, + varchar(900) systemId: string ref, + int fileid: @file ref +); + +xmlElements( + unique int id: @xmlelement, + varchar(900) name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref +); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + varchar(900) name: string ref, + varchar(3600) value: string ref, + int idx: int ref, + int fileid: @file ref +); + +xmlNs( + int id: @xmlnamespace, + varchar(900) prefixName: string ref, + varchar(900) URI: string ref, + int fileid: @file ref +); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref +); + +xmlComments( + unique int id: @xmlcomment, + varchar(3600) text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref +); + +xmlChars( + unique int id: @xmlcharacters, + varchar(3600) text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref +); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref +); + +@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace; + +@dataflownode = @expr | @function_decl_stmt | @class_decl_stmt | @namespace_declaration | @enum_declaration | @property; + +@optionalchainable = @call_expr | @propaccess; + +isOptionalChaining(int id: @optionalchainable ref); + +/* + * configuration files with key value pairs + */ + +configs( + unique int id: @config +); + +configNames( + unique int id: @configName, + int config: @config ref, + string name: string ref +); + +configValues( + unique int id: @configValue, + int config: @config ref, + string value: string ref +); + +configLocations( + int locatable: @configLocatable ref, + int location: @location_default ref +); + +@configLocatable = @config | @configName | @configValue; + +/** + * The time taken for the extraction of a file. + * This table contains non-deterministic content. + * + * The sum of the `time` column for each (`file`, `timerKind`) pair + * is the total time taken for extraction of `file`. The `extractionPhase` + * column provides a granular view of the extraction time of the file. + */ +extraction_time( + int file : @file ref, + // see `com.semmle.js.extractor.ExtractionMetrics.ExtractionPhase`. + int extractionPhase: int ref, + // 0 for the elapsed CPU time in nanoseconds, 1 for the elapsed wallclock time in nanoseconds + int timerKind: int ref, + float time: float ref +) + +/** + * Non-timing related data for the extraction of a single file. + * This table contains non-deterministic content. + */ +extraction_data( + int file : @file ref, + // the absolute path to the cache file + varchar(900) cacheFile: string ref, + boolean fromCache: boolean ref, + int length: int ref +) diff --git a/javascript/upgrades/e34b3e16dba5d11961119818c9beeff334f20a90/semmlecode.javascript.dbscheme b/javascript/upgrades/e34b3e16dba5d11961119818c9beeff334f20a90/semmlecode.javascript.dbscheme new file mode 100644 index 00000000000..7533e7ff64d --- /dev/null +++ b/javascript/upgrades/e34b3e16dba5d11961119818c9beeff334f20a90/semmlecode.javascript.dbscheme @@ -0,0 +1,1217 @@ +/*** Standard fragments ***/ + +/** Files and folders **/ + +@location = @location_default; + +locations_default(unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref + ); + +@sourceline = @locatable; + +numlines(int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref + ); + +files(unique int id: @file, + varchar(900) name: string ref); + +folders(unique int id: @folder, + varchar(900) name: string ref); + + +@container = @folder | @file ; + + +containerparent(int parent: @container ref, + unique int child: @container ref); + +/** Duplicate code **/ + +duplicateCode( + unique int id : @duplication, + varchar(900) relativePath : string ref, + int equivClass : int ref); + +similarCode( + unique int id : @similarity, + varchar(900) relativePath : string ref, + int equivClass : int ref); + +@duplication_or_similarity = @duplication | @similarity; + +tokens( + int id : @duplication_or_similarity ref, + int offset : int ref, + int beginLine : int ref, + int beginColumn : int ref, + int endLine : int ref, + int endColumn : int ref); + +/** External data **/ + +externalData( + int id : @externalDataElement, + varchar(900) path : string ref, + int column: int ref, + varchar(900) value : string ref +); + +snapshotDate(unique date snapshotDate : date ref); + +sourceLocationPrefix(varchar(900) prefix : string ref); + +/** Version control data **/ + +svnentries( + int id : @svnentry, + varchar(500) revision : string ref, + varchar(500) author : string ref, + date revisionDate : date ref, + int changeSize : int ref +); + +svnaffectedfiles( + int id : @svnentry ref, + int file : @file ref, + varchar(500) action : string ref +); + +svnentrymsg( + int id : @svnentry ref, + varchar(500) message : string ref +); + +svnchurn( + int commit : @svnentry ref, + int file : @file ref, + int addedLines : int ref, + int deletedLines : int ref +); + + +/*** JavaScript-specific part ***/ + +filetype( + int file: @file ref, + string filetype: string ref +) + +// top-level code fragments +toplevels (unique int id: @toplevel, + int kind: int ref); + +is_externs (int toplevel: @toplevel ref); + +case @toplevel.kind of + 0 = @script +| 1 = @inline_script +| 2 = @event_handler +| 3 = @javascript_url +| 4 = @template_toplevel; + +is_module (int tl: @toplevel ref); +is_nodejs (int tl: @toplevel ref); +is_es2015_module (int tl: @toplevel ref); +is_closure_module (int tl: @toplevel ref); + +@xml_node_with_code = @xmlelement | @xmlattribute | @template_placeholder_tag; +toplevel_parent_xml_node( + unique int toplevel: @toplevel ref, + int xmlnode: @xml_node_with_code ref); + +xml_element_parent_expression( + unique int xmlnode: @xmlelement ref, + int expression: @expr ref, + int index: int ref); + +// statements +#keyset[parent, idx] +stmts (unique int id: @stmt, + int kind: int ref, + int parent: @stmt_parent ref, + int idx: int ref, + varchar(900) tostring: string ref); + +stmt_containers (unique int stmt: @stmt ref, + int container: @stmt_container ref); + +jump_targets (unique int jump: @stmt ref, + int target: @stmt ref); + +@stmt_parent = @stmt | @toplevel | @function_expr | @arrow_function_expr; +@stmt_container = @toplevel | @function | @namespace_declaration | @external_module_declaration | @global_augmentation_declaration; + +case @stmt.kind of + 0 = @empty_stmt +| 1 = @block_stmt +| 2 = @expr_stmt +| 3 = @if_stmt +| 4 = @labeled_stmt +| 5 = @break_stmt +| 6 = @continue_stmt +| 7 = @with_stmt +| 8 = @switch_stmt +| 9 = @return_stmt +| 10 = @throw_stmt +| 11 = @try_stmt +| 12 = @while_stmt +| 13 = @do_while_stmt +| 14 = @for_stmt +| 15 = @for_in_stmt +| 16 = @debugger_stmt +| 17 = @function_decl_stmt +| 18 = @var_decl_stmt +| 19 = @case +| 20 = @catch_clause +| 21 = @for_of_stmt +| 22 = @const_decl_stmt +| 23 = @let_stmt +| 24 = @legacy_let_stmt +| 25 = @for_each_stmt +| 26 = @class_decl_stmt +| 27 = @import_declaration +| 28 = @export_all_declaration +| 29 = @export_default_declaration +| 30 = @export_named_declaration +| 31 = @namespace_declaration +| 32 = @import_equals_declaration +| 33 = @export_assign_declaration +| 34 = @interface_declaration +| 35 = @type_alias_declaration +| 36 = @enum_declaration +| 37 = @external_module_declaration +| 38 = @export_as_namespace_declaration +| 39 = @global_augmentation_declaration +; + +@decl_stmt = @var_decl_stmt | @const_decl_stmt | @let_stmt | @legacy_let_stmt; + +@export_declaration = @export_all_declaration | @export_default_declaration | @export_named_declaration; + +@namespace_definition = @namespace_declaration | @enum_declaration; +@type_definition = @class_definition | @interface_declaration | @enum_declaration | @type_alias_declaration | @enum_member; + +is_instantiated(unique int decl: @namespace_declaration ref); + +@declarable_node = @decl_stmt | @namespace_declaration | @class_decl_stmt | @function_decl_stmt | @enum_declaration | @external_module_declaration | @global_augmentation_declaration | @field; +has_declare_keyword(unique int stmt: @declarable_node ref); + +is_for_await_of(unique int forof: @for_of_stmt ref); + +// expressions +#keyset[parent, idx] +exprs (unique int id: @expr, + int kind: int ref, + int parent: @expr_parent ref, + int idx: int ref, + varchar(900) tostring: string ref); + +literals (varchar(900) value: string ref, + varchar(900) raw: string ref, + unique int expr: @expr_or_type ref); + +enclosing_stmt (unique int expr: @expr_or_type ref, + int stmt: @stmt ref); + +expr_containers (unique int expr: @expr_or_type ref, + int container: @stmt_container ref); + +array_size (unique int ae: @arraylike ref, + int sz: int ref); + +is_delegating (int yield: @yield_expr ref); + +@expr_or_stmt = @expr | @stmt; +@expr_or_type = @expr | @typeexpr; +@expr_parent = @expr_or_stmt | @property | @function_typeexpr; +@arraylike = @array_expr | @array_pattern; +@type_annotation = @typeexpr | @jsdoc_type_expr; +@node_in_stmt_container = @cfg_node | @type_annotation | @toplevel; + +case @expr.kind of + 0 = @label +| 1 = @null_literal +| 2 = @boolean_literal +| 3 = @number_literal +| 4 = @string_literal +| 5 = @regexp_literal +| 6 = @this_expr +| 7 = @array_expr +| 8 = @obj_expr +| 9 = @function_expr +| 10 = @seq_expr +| 11 = @conditional_expr +| 12 = @new_expr +| 13 = @call_expr +| 14 = @dot_expr +| 15 = @index_expr +| 16 = @neg_expr +| 17 = @plus_expr +| 18 = @log_not_expr +| 19 = @bit_not_expr +| 20 = @typeof_expr +| 21 = @void_expr +| 22 = @delete_expr +| 23 = @eq_expr +| 24 = @neq_expr +| 25 = @eqq_expr +| 26 = @neqq_expr +| 27 = @lt_expr +| 28 = @le_expr +| 29 = @gt_expr +| 30 = @ge_expr +| 31 = @lshift_expr +| 32 = @rshift_expr +| 33 = @urshift_expr +| 34 = @add_expr +| 35 = @sub_expr +| 36 = @mul_expr +| 37 = @div_expr +| 38 = @mod_expr +| 39 = @bitor_expr +| 40 = @xor_expr +| 41 = @bitand_expr +| 42 = @in_expr +| 43 = @instanceof_expr +| 44 = @logand_expr +| 45 = @logor_expr +| 47 = @assign_expr +| 48 = @assign_add_expr +| 49 = @assign_sub_expr +| 50 = @assign_mul_expr +| 51 = @assign_div_expr +| 52 = @assign_mod_expr +| 53 = @assign_lshift_expr +| 54 = @assign_rshift_expr +| 55 = @assign_urshift_expr +| 56 = @assign_or_expr +| 57 = @assign_xor_expr +| 58 = @assign_and_expr +| 59 = @preinc_expr +| 60 = @postinc_expr +| 61 = @predec_expr +| 62 = @postdec_expr +| 63 = @par_expr +| 64 = @var_declarator +| 65 = @arrow_function_expr +| 66 = @spread_element +| 67 = @array_pattern +| 68 = @object_pattern +| 69 = @yield_expr +| 70 = @tagged_template_expr +| 71 = @template_literal +| 72 = @template_element +| 73 = @array_comprehension_expr +| 74 = @generator_expr +| 75 = @for_in_comprehension_block +| 76 = @for_of_comprehension_block +| 77 = @legacy_letexpr +| 78 = @var_decl +| 79 = @proper_varaccess +| 80 = @class_expr +| 81 = @super_expr +| 82 = @newtarget_expr +| 83 = @named_import_specifier +| 84 = @import_default_specifier +| 85 = @import_namespace_specifier +| 86 = @named_export_specifier +| 87 = @exp_expr +| 88 = @assign_exp_expr +| 89 = @jsx_element +| 90 = @jsx_qualified_name +| 91 = @jsx_empty_expr +| 92 = @await_expr +| 93 = @function_sent_expr +| 94 = @decorator +| 95 = @export_default_specifier +| 96 = @export_namespace_specifier +| 97 = @bind_expr +| 98 = @external_module_reference +| 99 = @dynamic_import +| 100 = @expression_with_type_arguments +| 101 = @prefix_type_assertion +| 102 = @as_type_assertion +| 103 = @export_varaccess +| 104 = @decorator_list +| 105 = @non_null_assertion +| 106 = @bigint_literal +| 107 = @nullishcoalescing_expr +| 108 = @e4x_xml_anyname +| 109 = @e4x_xml_static_attribute_selector +| 110 = @e4x_xml_dynamic_attribute_selector +| 111 = @e4x_xml_filter_expression +| 112 = @e4x_xml_static_qualident +| 113 = @e4x_xml_dynamic_qualident +| 114 = @e4x_xml_dotdotexpr +| 115 = @import_meta_expr +| 116 = @assignlogandexpr +| 117 = @assignlogorexpr +| 118 = @assignnullishcoalescingexpr +| 119 = @template_pipe_ref +| 120 = @generated_code_expr +; + +@varaccess = @proper_varaccess | @export_varaccess; +@varref = @var_decl | @varaccess; + +@identifier = @label | @varref | @type_identifier; + +@literal = @null_literal | @boolean_literal | @number_literal | @string_literal | @regexp_literal | @bigint_literal; + +@propaccess = @dot_expr | @index_expr; + +@invokeexpr = @new_expr | @call_expr; + +@unaryexpr = @neg_expr | @plus_expr | @log_not_expr | @bit_not_expr | @typeof_expr | @void_expr | @delete_expr | @spread_element; + +@equality_test = @eq_expr | @neq_expr | @eqq_expr | @neqq_expr; + +@comparison = @equality_test | @lt_expr | @le_expr | @gt_expr | @ge_expr; + +@binaryexpr = @comparison | @lshift_expr | @rshift_expr | @urshift_expr | @add_expr | @sub_expr | @mul_expr | @div_expr | @mod_expr | @exp_expr | @bitor_expr | @xor_expr | @bitand_expr | @in_expr | @instanceof_expr | @logand_expr | @logor_expr | @nullishcoalescing_expr; + +@assignment = @assign_expr | @assign_add_expr | @assign_sub_expr | @assign_mul_expr | @assign_div_expr | @assign_mod_expr | @assign_exp_expr | @assign_lshift_expr | @assign_rshift_expr | @assign_urshift_expr | @assign_or_expr | @assign_xor_expr | @assign_and_expr | @assignlogandexpr | @assignlogorexpr | @assignnullishcoalescingexpr; + +@updateexpr = @preinc_expr | @postinc_expr | @predec_expr | @postdec_expr; + +@pattern = @varref | @array_pattern | @object_pattern; + +@comprehension_expr = @array_comprehension_expr | @generator_expr; + +@comprehension_block = @for_in_comprehension_block | @for_of_comprehension_block; + +@import_specifier = @named_import_specifier | @import_default_specifier | @import_namespace_specifier; + +@exportspecifier = @named_export_specifier | @export_default_specifier | @export_namespace_specifier; + +@import_or_export_declaration = @import_declaration | @export_declaration; + +@type_assertion = @as_type_assertion | @prefix_type_assertion; + +@class_definition = @class_decl_stmt | @class_expr; +@interface_definition = @interface_declaration | @interface_typeexpr; +@class_or_interface = @class_definition | @interface_definition; + +@lexical_decl = @var_decl | @type_decl; +@lexical_access = @varaccess | @local_type_access | @local_var_type_access | @local_namespace_access; +@lexical_ref = @lexical_decl | @lexical_access; + +@e4x_xml_attribute_selector = @e4x_xml_static_attribute_selector | @e4x_xml_dynamic_attribute_selector; +@e4x_xml_qualident = @e4x_xml_static_qualident | @e4x_xml_dynamic_qualident; + +expr_contains_template_tag_location( + int expr: @expr ref, + int location: @location ref +); + +@template_placeholder_tag_parent = @xmlelement | @xmlattribute | @file; + +template_placeholder_tag_info( + unique int node: @template_placeholder_tag, + int parentNode: @template_placeholder_tag_parent ref, + varchar(900) raw: string ref +); + +// scopes +scopes (unique int id: @scope, + int kind: int ref); + +case @scope.kind of + 0 = @global_scope +| 1 = @function_scope +| 2 = @catch_scope +| 3 = @module_scope +| 4 = @block_scope +| 5 = @for_scope +| 6 = @for_in_scope // for-of scopes work the same as for-in scopes +| 7 = @comprehension_block_scope +| 8 = @class_expr_scope +| 9 = @namespace_scope +| 10 = @class_decl_scope +| 11 = @interface_scope +| 12 = @type_alias_scope +| 13 = @mapped_type_scope +| 14 = @enum_scope +| 15 = @external_module_scope +| 16 = @conditional_type_scope; + +scopenodes (unique int node: @ast_node ref, + int scope: @scope ref); + +scopenesting (unique int inner: @scope ref, + int outer: @scope ref); + +// functions +@function = @function_decl_stmt | @function_expr | @arrow_function_expr; + +@parameterized = @function | @catch_clause; +@type_parameterized = @function | @class_or_interface | @type_alias_declaration | @mapped_typeexpr | @infer_typeexpr; + +is_generator (int fun: @function ref); +has_rest_parameter (int fun: @function ref); +is_async (int fun: @function ref); + +// variables and lexically scoped type names +#keyset[scope, name] +variables (unique int id: @variable, + varchar(900) name: string ref, + int scope: @scope ref); + +#keyset[scope, name] +local_type_names (unique int id: @local_type_name, + varchar(900) name: string ref, + int scope: @scope ref); + +#keyset[scope, name] +local_namespace_names (unique int id: @local_namespace_name, + varchar(900) name: string ref, + int scope: @scope ref); + +is_arguments_object (int id: @variable ref); + +@lexical_name = @variable | @local_type_name | @local_namespace_name; + +@bind_id = @varaccess | @local_var_type_access; +bind (unique int id: @bind_id ref, + int decl: @variable ref); + +decl (unique int id: @var_decl ref, + int decl: @variable ref); + +@typebind_id = @local_type_access | @export_varaccess; +typebind (unique int id: @typebind_id ref, + int decl: @local_type_name ref); + +@typedecl_id = @type_decl | @var_decl; +typedecl (unique int id: @typedecl_id ref, + int decl: @local_type_name ref); + +namespacedecl (unique int id: @var_decl ref, + int decl: @local_namespace_name ref); + +@namespacebind_id = @local_namespace_access | @export_varaccess; +namespacebind (unique int id: @namespacebind_id ref, + int decl: @local_namespace_name ref); + + +// properties in object literals, property patterns in object patterns, and method declarations in classes +#keyset[parent, index] +properties (unique int id: @property, + int parent: @property_parent ref, + int index: int ref, + int kind: int ref, + varchar(900) tostring: string ref); + +case @property.kind of + 0 = @value_property +| 1 = @property_getter +| 2 = @property_setter +| 3 = @jsx_attribute +| 4 = @function_call_signature +| 5 = @constructor_call_signature +| 6 = @index_signature +| 7 = @enum_member +| 8 = @proper_field +| 9 = @parameter_field +| 10 = @static_initializer +; + +@property_parent = @obj_expr | @object_pattern | @class_definition | @jsx_element | @interface_definition | @enum_declaration; +@property_accessor = @property_getter | @property_setter; +@call_signature = @function_call_signature | @constructor_call_signature; +@field = @proper_field | @parameter_field; +@field_or_vardeclarator = @field | @var_declarator; + +is_computed (int id: @property ref); +is_method (int id: @property ref); +is_static (int id: @property ref); +is_abstract_member (int id: @property ref); +is_const_enum (int id: @enum_declaration ref); +is_abstract_class (int id: @class_decl_stmt ref); + +has_public_keyword (int id: @property ref); +has_private_keyword (int id: @property ref); +has_protected_keyword (int id: @property ref); +has_readonly_keyword (int id: @property ref); +has_type_keyword (int id: @import_or_export_declaration ref); +is_optional_member (int id: @property ref); +has_definite_assignment_assertion (int id: @field_or_vardeclarator ref); +is_optional_parameter_declaration (unique int parameter: @pattern ref); + +#keyset[constructor, param_index] +parameter_fields( + unique int field: @parameter_field ref, + int constructor: @function_expr ref, + int param_index: int ref +); + +// types +#keyset[parent, idx] +typeexprs ( + unique int id: @typeexpr, + int kind: int ref, + int parent: @typeexpr_parent ref, + int idx: int ref, + varchar(900) tostring: string ref +); + +case @typeexpr.kind of + 0 = @local_type_access +| 1 = @type_decl +| 2 = @keyword_typeexpr +| 3 = @string_literal_typeexpr +| 4 = @number_literal_typeexpr +| 5 = @boolean_literal_typeexpr +| 6 = @array_typeexpr +| 7 = @union_typeexpr +| 8 = @indexed_access_typeexpr +| 9 = @intersection_typeexpr +| 10 = @parenthesized_typeexpr +| 11 = @tuple_typeexpr +| 12 = @keyof_typeexpr +| 13 = @qualified_type_access +| 14 = @generic_typeexpr +| 15 = @type_label +| 16 = @typeof_typeexpr +| 17 = @local_var_type_access +| 18 = @qualified_var_type_access +| 19 = @this_var_type_access +| 20 = @predicate_typeexpr +| 21 = @interface_typeexpr +| 22 = @type_parameter +| 23 = @plain_function_typeexpr +| 24 = @constructor_typeexpr +| 25 = @local_namespace_access +| 26 = @qualified_namespace_access +| 27 = @mapped_typeexpr +| 28 = @conditional_typeexpr +| 29 = @infer_typeexpr +| 30 = @import_type_access +| 31 = @import_namespace_access +| 32 = @import_var_type_access +| 33 = @optional_typeexpr +| 34 = @rest_typeexpr +| 35 = @bigint_literal_typeexpr +| 36 = @readonly_typeexpr +| 37 = @template_literal_typeexpr +; + +@typeref = @typeaccess | @type_decl; +@type_identifier = @type_decl | @local_type_access | @type_label | @local_var_type_access | @local_namespace_access; +@typeexpr_parent = @expr | @stmt | @property | @typeexpr; +@literal_typeexpr = @string_literal_typeexpr | @number_literal_typeexpr | @boolean_literal_typeexpr | @bigint_literal_typeexpr; +@typeaccess = @local_type_access | @qualified_type_access | @import_type_access; +@vartypeaccess = @local_var_type_access | @qualified_var_type_access | @this_var_type_access | @import_var_type_access; +@namespace_access = @local_namespace_access | @qualified_namespace_access | @import_namespace_access; +@import_typeexpr = @import_type_access | @import_namespace_access | @import_var_type_access; + +@function_typeexpr = @plain_function_typeexpr | @constructor_typeexpr; + +// types +types ( + unique int id: @type, + int kind: int ref, + varchar(900) tostring: string ref +); + +#keyset[parent, idx] +type_child ( + int child: @type ref, + int parent: @type ref, + int idx: int ref +); + +case @type.kind of + 0 = @any_type +| 1 = @string_type +| 2 = @number_type +| 3 = @union_type +| 4 = @true_type +| 5 = @false_type +| 6 = @type_reference +| 7 = @object_type +| 8 = @canonical_type_variable_type +| 9 = @typeof_type +| 10 = @void_type +| 11 = @undefined_type +| 12 = @null_type +| 13 = @never_type +| 14 = @plain_symbol_type +| 15 = @unique_symbol_type +| 16 = @objectkeyword_type +| 17 = @intersection_type +| 18 = @tuple_type +| 19 = @lexical_type_variable_type +| 20 = @this_type +| 21 = @number_literal_type +| 22 = @string_literal_type +| 23 = @unknown_type +| 24 = @bigint_type +| 25 = @bigint_literal_type +; + +@boolean_literal_type = @true_type | @false_type; +@symbol_type = @plain_symbol_type | @unique_symbol_type; +@union_or_intersection_type = @union_type | @intersection_type; +@typevariable_type = @canonical_type_variable_type | @lexical_type_variable_type; + +has_asserts_keyword(int node: @predicate_typeexpr ref); + +@typed_ast_node = @expr | @typeexpr | @function; +ast_node_type( + unique int node: @typed_ast_node ref, + int typ: @type ref); + +declared_function_signature( + unique int node: @function ref, + int sig: @signature_type ref +); + +invoke_expr_signature( + unique int node: @invokeexpr ref, + int sig: @signature_type ref +); + +invoke_expr_overload_index( + unique int node: @invokeexpr ref, + int index: int ref +); + +symbols ( + unique int id: @symbol, + int kind: int ref, + varchar(900) name: string ref +); + +symbol_parent ( + unique int symbol: @symbol ref, + int parent: @symbol ref +); + +symbol_module ( + int symbol: @symbol ref, + varchar(900) moduleName: string ref +); + +symbol_global ( + int symbol: @symbol ref, + varchar(900) globalName: string ref +); + +case @symbol.kind of + 0 = @root_symbol +| 1 = @member_symbol +| 2 = @other_symbol +; + +@type_with_symbol = @type_reference | @typevariable_type | @typeof_type | @unique_symbol_type; +@ast_node_with_symbol = @type_definition | @namespace_definition | @toplevel | @typeaccess | @namespace_access | @var_decl | @function | @invokeexpr | @import_declaration | @external_module_reference; + +ast_node_symbol( + unique int node: @ast_node_with_symbol ref, + int symbol: @symbol ref); + +type_symbol( + unique int typ: @type_with_symbol ref, + int symbol: @symbol ref); + +#keyset[typ, name] +type_property( + int typ: @type ref, + varchar(900) name: string ref, + int propertyType: @type ref); + +type_alias( + unique int aliasType: @type ref, + int underlyingType: @type ref); + +@literal_type = @string_literal_type | @number_literal_type | @boolean_literal_type | @bigint_literal_type; +@type_with_literal_value = @string_literal_type | @number_literal_type | @bigint_literal_type; +type_literal_value( + unique int typ: @type_with_literal_value ref, + varchar(900) value: string ref); + +signature_types ( + unique int id: @signature_type, + int kind: int ref, + varchar(900) tostring: string ref, + int type_parameters: int ref, + int required_params: int ref +); + +is_abstract_signature( + unique int sig: @signature_type ref +); + +signature_rest_parameter( + unique int sig: @signature_type ref, + int rest_param_arra_type: @type ref +); + +case @signature_type.kind of + 0 = @function_signature_type +| 1 = @constructor_signature_type +; + +#keyset[typ, kind, index] +type_contains_signature ( + int typ: @type ref, + int kind: int ref, // constructor/call/index + int index: int ref, // ordering of overloaded signatures + int sig: @signature_type ref +); + +#keyset[parent, index] +signature_contains_type ( + int child: @type ref, + int parent: @signature_type ref, + int index: int ref +); + +#keyset[sig, index] +signature_parameter_name ( + int sig: @signature_type ref, + int index: int ref, + varchar(900) name: string ref +); + +number_index_type ( + unique int baseType: @type ref, + int propertyType: @type ref +); + +string_index_type ( + unique int baseType: @type ref, + int propertyType: @type ref +); + +base_type_names( + int typeName: @symbol ref, + int baseTypeName: @symbol ref +); + +self_types( + int typeName: @symbol ref, + int selfType: @type_reference ref +); + +tuple_type_min_length( + unique int typ: @type ref, + int minLength: int ref +); + +tuple_type_rest_index( + unique int typ: @type ref, + int index: int ref +); + +// comments +comments (unique int id: @comment, + int kind: int ref, + int toplevel: @toplevel ref, + varchar(900) text: string ref, + varchar(900) tostring: string ref); + +case @comment.kind of + 0 = @slashslash_comment +| 1 = @slashstar_comment +| 2 = @doc_comment +| 3 = @html_comment_start +| 4 = @htmlcommentend; + +@html_comment = @html_comment_start | @htmlcommentend; +@line_comment = @slashslash_comment | @html_comment; +@block_comment = @slashstar_comment | @doc_comment; + +// source lines +lines (unique int id: @line, + int toplevel: @toplevel ref, + varchar(900) text: string ref, + varchar(2) terminator: string ref); +indentation (int file: @file ref, + int lineno: int ref, + varchar(1) indentChar: string ref, + int indentDepth: int ref); + +// JavaScript parse errors +js_parse_errors (unique int id: @js_parse_error, + int toplevel: @toplevel ref, + varchar(900) message: string ref, + varchar(900) line: string ref); + +// regular expressions +#keyset[parent, idx] +regexpterm (unique int id: @regexpterm, + int kind: int ref, + int parent: @regexpparent ref, + int idx: int ref, + varchar(900) tostring: string ref); + +@regexpparent = @regexpterm | @regexp_literal | @string_literal; + +case @regexpterm.kind of + 0 = @regexp_alt +| 1 = @regexp_seq +| 2 = @regexp_caret +| 3 = @regexp_dollar +| 4 = @regexp_wordboundary +| 5 = @regexp_nonwordboundary +| 6 = @regexp_positive_lookahead +| 7 = @regexp_negative_lookahead +| 8 = @regexp_star +| 9 = @regexp_plus +| 10 = @regexp_opt +| 11 = @regexp_range +| 12 = @regexp_dot +| 13 = @regexp_group +| 14 = @regexp_normal_constant +| 15 = @regexp_hex_escape +| 16 = @regexp_unicode_escape +| 17 = @regexp_dec_escape +| 18 = @regexp_oct_escape +| 19 = @regexp_ctrl_escape +| 20 = @regexp_char_class_escape +| 21 = @regexp_id_escape +| 22 = @regexp_backref +| 23 = @regexp_char_class +| 24 = @regexp_char_range +| 25 = @regexp_positive_lookbehind +| 26 = @regexp_negative_lookbehind +| 27 = @regexp_unicode_property_escape; + +regexp_parse_errors (unique int id: @regexp_parse_error, + int regexp: @regexpterm ref, + varchar(900) message: string ref); + +@regexp_quantifier = @regexp_star | @regexp_plus | @regexp_opt | @regexp_range; +@regexp_escape = @regexp_char_escape | @regexp_char_class_escape | @regexp_unicode_property_escape; +@regexp_char_escape = @regexp_hex_escape | @regexp_unicode_escape | @regexp_dec_escape | @regexp_oct_escape | @regexp_ctrl_escape | @regexp_id_escape; +@regexp_constant = @regexp_normal_constant | @regexp_char_escape; +@regexp_lookahead = @regexp_positive_lookahead | @regexp_negative_lookahead; +@regexp_lookbehind = @regexp_positive_lookbehind | @regexp_negative_lookbehind; +@regexp_subpattern = @regexp_lookahead | @regexp_lookbehind; +@regexp_anchor = @regexp_dollar | @regexp_caret; + +is_greedy (int id: @regexp_quantifier ref); +range_quantifier_lower_bound (unique int id: @regexp_range ref, int lo: int ref); +range_quantifier_upper_bound (unique int id: @regexp_range ref, int hi: int ref); +is_capture (unique int id: @regexp_group ref, int number: int ref); +is_named_capture (unique int id: @regexp_group ref, string name: string ref); +is_inverted (int id: @regexp_char_class ref); +regexp_const_value (unique int id: @regexp_constant ref, varchar(1) value: string ref); +char_class_escape (unique int id: @regexp_char_class_escape ref, varchar(1) value: string ref); +backref (unique int id: @regexp_backref ref, int value: int ref); +named_backref (unique int id: @regexp_backref ref, string name: string ref); +unicode_property_escapename (unique int id: @regexp_unicode_property_escape ref, string name: string ref); +unicode_property_escapevalue (unique int id: @regexp_unicode_property_escape ref, string value: string ref); + +// tokens +#keyset[toplevel, idx] +tokeninfo (unique int id: @token, + int kind: int ref, + int toplevel: @toplevel ref, + int idx: int ref, + varchar(900) value: string ref); + +case @token.kind of + 0 = @token_eof +| 1 = @token_null_literal +| 2 = @token_boolean_literal +| 3 = @token_numeric_literal +| 4 = @token_string_literal +| 5 = @token_regular_expression +| 6 = @token_identifier +| 7 = @token_keyword +| 8 = @token_punctuator; + +// associate comments with the token immediately following them (which may be EOF) +next_token (int comment: @comment ref, int token: @token ref); + +// JSON +#keyset[parent, idx] +json (unique int id: @json_value, + int kind: int ref, + int parent: @json_parent ref, + int idx: int ref, + varchar(900) tostring: string ref); + +json_literals (varchar(900) value: string ref, + varchar(900) raw: string ref, + unique int expr: @json_value ref); + +json_properties (int obj: @json_object ref, + varchar(900) property: string ref, + int value: @json_value ref); + +json_errors (unique int id: @json_parse_error, + varchar(900) message: string ref); + +json_locations(unique int locatable: @json_locatable ref, + int location: @location_default ref); + +case @json_value.kind of + 0 = @json_null +| 1 = @json_boolean +| 2 = @json_number +| 3 = @json_string +| 4 = @json_array +| 5 = @json_object; + +@json_parent = @json_object | @json_array | @file; + +@json_locatable = @json_value | @json_parse_error; + +// locations +@ast_node = @toplevel | @stmt | @expr | @property | @typeexpr; + +@locatable = @file + | @ast_node + | @comment + | @line + | @js_parse_error | @regexp_parse_error + | @regexpterm + | @json_locatable + | @token + | @cfg_node + | @jsdoc | @jsdoc_type_expr | @jsdoc_tag + | @yaml_locatable + | @xmllocatable + | @configLocatable + | @template_placeholder_tag; + +hasLocation (unique int locatable: @locatable ref, + int location: @location ref); + +// CFG +entry_cfg_node (unique int id: @entry_node, int container: @stmt_container ref); +exit_cfg_node (unique int id: @exit_node, int container: @stmt_container ref); +guard_node (unique int id: @guard_node, int kind: int ref, int test: @expr ref); +case @guard_node.kind of + 0 = @falsy_guard +| 1 = @truthy_guard; +@condition_guard = @falsy_guard | @truthy_guard; + +@synthetic_cfg_node = @entry_node | @exit_node | @guard_node; +@cfg_node = @synthetic_cfg_node | @expr_parent; + +successor (int pred: @cfg_node ref, int succ: @cfg_node ref); + +// JSDoc comments +jsdoc (unique int id: @jsdoc, varchar(900) description: string ref, int comment: @comment ref); +#keyset[parent, idx] +jsdoc_tags (unique int id: @jsdoc_tag, varchar(900) title: string ref, + int parent: @jsdoc ref, int idx: int ref, varchar(900) tostring: string ref); +jsdoc_tag_descriptions (unique int tag: @jsdoc_tag ref, varchar(900) text: string ref); +jsdoc_tag_names (unique int tag: @jsdoc_tag ref, varchar(900) text: string ref); + +#keyset[parent, idx] +jsdoc_type_exprs (unique int id: @jsdoc_type_expr, + int kind: int ref, + int parent: @jsdoc_type_expr_parent ref, + int idx: int ref, + varchar(900) tostring: string ref); +case @jsdoc_type_expr.kind of + 0 = @jsdoc_any_type_expr +| 1 = @jsdoc_null_type_expr +| 2 = @jsdoc_undefined_type_expr +| 3 = @jsdoc_unknown_type_expr +| 4 = @jsdoc_void_type_expr +| 5 = @jsdoc_named_type_expr +| 6 = @jsdoc_applied_type_expr +| 7 = @jsdoc_nullable_type_expr +| 8 = @jsdoc_non_nullable_type_expr +| 9 = @jsdoc_record_type_expr +| 10 = @jsdoc_array_type_expr +| 11 = @jsdoc_union_type_expr +| 12 = @jsdoc_function_type_expr +| 13 = @jsdoc_optional_type_expr +| 14 = @jsdoc_rest_type_expr +; + +#keyset[id, idx] +jsdoc_record_field_name (int id: @jsdoc_record_type_expr ref, int idx: int ref, varchar(900) name: string ref); +jsdoc_prefix_qualifier (int id: @jsdoc_type_expr ref); +jsdoc_has_new_parameter (int fn: @jsdoc_function_type_expr ref); + +@jsdoc_type_expr_parent = @jsdoc_type_expr | @jsdoc_tag; + +jsdoc_errors (unique int id: @jsdoc_error, int tag: @jsdoc_tag ref, varchar(900) message: string ref, varchar(900) tostring: string ref); + +// YAML +#keyset[parent, idx] +yaml (unique int id: @yaml_node, + int kind: int ref, + int parent: @yaml_node_parent ref, + int idx: int ref, + varchar(900) tag: string ref, + varchar(900) tostring: string ref); + +case @yaml_node.kind of + 0 = @yaml_scalar_node +| 1 = @yaml_mapping_node +| 2 = @yaml_sequence_node +| 3 = @yaml_alias_node +; + +@yaml_collection_node = @yaml_mapping_node | @yaml_sequence_node; + +@yaml_node_parent = @yaml_collection_node | @file; + +yaml_anchors (unique int node: @yaml_node ref, + varchar(900) anchor: string ref); + +yaml_aliases (unique int alias: @yaml_alias_node ref, + varchar(900) target: string ref); + +yaml_scalars (unique int scalar: @yaml_scalar_node ref, + int style: int ref, + varchar(900) value: string ref); + +yaml_errors (unique int id: @yaml_error, + varchar(900) message: string ref); + +yaml_locations(unique int locatable: @yaml_locatable ref, + int location: @location_default ref); + +@yaml_locatable = @yaml_node | @yaml_error; + +/* XML Files */ + +xmlEncoding( + unique int id: @file ref, + varchar(900) encoding: string ref +); + +xmlDTDs( + unique int id: @xmldtd, + varchar(900) root: string ref, + varchar(900) publicId: string ref, + varchar(900) systemId: string ref, + int fileid: @file ref +); + +xmlElements( + unique int id: @xmlelement, + varchar(900) name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref +); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + varchar(900) name: string ref, + varchar(3600) value: string ref, + int idx: int ref, + int fileid: @file ref +); + +xmlNs( + int id: @xmlnamespace, + varchar(900) prefixName: string ref, + varchar(900) URI: string ref, + int fileid: @file ref +); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref +); + +xmlComments( + unique int id: @xmlcomment, + varchar(3600) text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref +); + +xmlChars( + unique int id: @xmlcharacters, + varchar(3600) text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref +); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref +); + +@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace; + +@dataflownode = @expr | @function_decl_stmt | @class_decl_stmt | @namespace_declaration | @enum_declaration | @property; + +@optionalchainable = @call_expr | @propaccess; + +isOptionalChaining(int id: @optionalchainable ref); + +/* + * configuration files with key value pairs + */ + +configs( + unique int id: @config +); + +configNames( + unique int id: @configName, + int config: @config ref, + string name: string ref +); + +configValues( + unique int id: @configValue, + int config: @config ref, + string value: string ref +); + +configLocations( + int locatable: @configLocatable ref, + int location: @location_default ref +); + +@configLocatable = @config | @configName | @configValue; + +/** + * The time taken for the extraction of a file. + * This table contains non-deterministic content. + * + * The sum of the `time` column for each (`file`, `timerKind`) pair + * is the total time taken for extraction of `file`. The `extractionPhase` + * column provides a granular view of the extraction time of the file. + */ +extraction_time( + int file : @file ref, + // see `com.semmle.js.extractor.ExtractionMetrics.ExtractionPhase`. + int extractionPhase: int ref, + // 0 for the elapsed CPU time in nanoseconds, 1 for the elapsed wallclock time in nanoseconds + int timerKind: int ref, + float time: float ref +) + +/** + * Non-timing related data for the extraction of a single file. + * This table contains non-deterministic content. + */ +extraction_data( + int file : @file ref, + // the absolute path to the cache file + varchar(900) cacheFile: string ref, + boolean fromCache: boolean ref, + int length: int ref +) From baab70bea61b173dca118a89b7ae3e01792cdfc3 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 15 Sep 2021 00:07:57 +0000 Subject: [PATCH 406/741] Add changed framework coverage reports --- java/documentation/library-coverage/coverage.csv | 3 +++ java/documentation/library-coverage/coverage.rst | 6 +++--- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/java/documentation/library-coverage/coverage.csv b/java/documentation/library-coverage/coverage.csv index 6085f5cf29b..68739963476 100644 --- a/java/documentation/library-coverage/coverage.csv +++ b/java/documentation/library-coverage/coverage.csv @@ -12,8 +12,10 @@ com.google.common.cache,,,17,,,,,,,,,,,,,,,,,,,,17 com.google.common.io,6,,73,,,,,,,,,,,,,,6,,,,,72,1 com.opensymphony.xwork2.ognl,3,,,,,,,,,,,,3,,,,,,,,,, com.unboundid.ldap.sdk,17,,,,,,,,,,17,,,,,,,,,,,, +flexjson,,,1,,,,,,,,,,,,,,,,,,,,1 groovy.lang,26,,,,,26,,,,,,,,,,,,,,,,, groovy.util,5,,,,,5,,,,,,,,,,,,,,,,, +jakarta.faces.context,2,7,,,,,,,,,,,,,,,,,,2,7,, jakarta.json,,,123,,,,,,,,,,,,,,,,,,,100,23 jakarta.ws.rs.client,1,,,,,,,,,,,,,1,,,,,,,,, jakarta.ws.rs.container,,9,,,,,,,,,,,,,,,,,,,9,, @@ -25,6 +27,7 @@ java.net,10,3,7,,,,,,,,,,,10,,,,,,,3,7, java.nio,10,,4,,10,,,,,,,,,,,,,,,,,4, java.sql,7,,,,,,,,,,,,,,,7,,,,,,, java.util,,,337,,,,,,,,,,,,,,,,,,,15,322 +javax.faces.context,2,7,,,,,,,,,,,,,,,,,,2,7,, javax.json,,,123,,,,,,,,,,,,,,,,,,,100,23 javax.management.remote,2,,,,,,,,,2,,,,,,,,,,,,, javax.naming,7,,,,,,,,,6,1,,,,,,,,,,,, diff --git a/java/documentation/library-coverage/coverage.rst b/java/documentation/library-coverage/coverage.rst index 629c11d2cd5..f615821957c 100644 --- a/java/documentation/library-coverage/coverage.rst +++ b/java/documentation/library-coverage/coverage.rst @@ -16,8 +16,8 @@ Java framework & library support `Google Guava `_,``com.google.common.*``,,175,6,,6,,,,, `JSON-java `_,``org.json``,,236,,,,,,,, Java Standard Library,``java.*``,3,421,30,13,,,7,,,10 - Java extensions,"``javax.*``, ``jakarta.*``",40,552,27,,,,,1,1,2 + Java extensions,"``javax.*``, ``jakarta.*``",54,552,31,,,4,,1,1,2 `Spring `_,``org.springframework.*``,29,469,91,,,,19,14,,29 - Others,"``com.esotericsoftware.kryo.io``, ``com.esotericsoftware.kryo5.io``, ``com.fasterxml.jackson.core``, ``com.fasterxml.jackson.databind``, ``com.opensymphony.xwork2.ognl``, ``com.unboundid.ldap.sdk``, ``groovy.lang``, ``groovy.util``, ``jodd.json``, ``ognl``, ``org.apache.commons.codec``, ``org.apache.commons.jexl2``, ``org.apache.commons.jexl3``, ``org.apache.commons.ognl``, ``org.apache.directory.ldap.client.api``, ``org.apache.ibatis.jdbc``, ``org.apache.shiro.jndi``, ``org.codehaus.groovy.control``, ``org.dom4j``, ``org.hibernate``, ``org.jooq``, ``org.mvel2``, ``org.xml.sax``, ``org.xmlpull.v1``, ``play.mvc``",7,25,146,,,,14,18,, - Totals,,102,3553,398,13,6,6,107,33,1,66 + Others,"``com.esotericsoftware.kryo.io``, ``com.esotericsoftware.kryo5.io``, ``com.fasterxml.jackson.core``, ``com.fasterxml.jackson.databind``, ``com.opensymphony.xwork2.ognl``, ``com.unboundid.ldap.sdk``, ``flexjson``, ``groovy.lang``, ``groovy.util``, ``jodd.json``, ``ognl``, ``org.apache.commons.codec``, ``org.apache.commons.jexl2``, ``org.apache.commons.jexl3``, ``org.apache.commons.ognl``, ``org.apache.directory.ldap.client.api``, ``org.apache.ibatis.jdbc``, ``org.apache.shiro.jndi``, ``org.codehaus.groovy.control``, ``org.dom4j``, ``org.hibernate``, ``org.jooq``, ``org.mvel2``, ``org.xml.sax``, ``org.xmlpull.v1``, ``play.mvc``",7,26,146,,,,14,18,, + Totals,,116,3554,402,13,6,10,107,33,1,66 From b5db4047a02dc00581930c73c5030210f820fc28 Mon Sep 17 00:00:00 2001 From: Asger Feldthaus Date: Wed, 15 Sep 2021 08:59:47 +0200 Subject: [PATCH 407/741] JS: Exclude template files in SelfAssignment --- javascript/ql/src/Expressions/SelfAssignment.ql | 5 ++++- .../test/query-tests/Expressions/SelfAssignment/template.njk | 3 +++ 2 files changed, 7 insertions(+), 1 deletion(-) create mode 100644 javascript/ql/test/query-tests/Expressions/SelfAssignment/template.njk diff --git a/javascript/ql/src/Expressions/SelfAssignment.ql b/javascript/ql/src/Expressions/SelfAssignment.ql index 50d55a50bfe..ff324831cf6 100644 --- a/javascript/ql/src/Expressions/SelfAssignment.ql +++ b/javascript/ql/src/Expressions/SelfAssignment.ql @@ -43,5 +43,8 @@ where // exclude DOM properties not isDOMProperty(e.(PropAccess).getPropertyName()) and // exclude self-assignments that have been inserted to satisfy the TypeScript JS-checker - not e.getAssignment().getParent().(ExprStmt).getDocumentation().getATag().getTitle() = "type" + not e.getAssignment().getParent().(ExprStmt).getDocumentation().getATag().getTitle() = "type" and + // exclude self-assignments in speculatively parsed template files + // named arguments may be incorrectly parsed as assignments + not e.getTopLevel() instanceof Templating::TemplateTopLevel select e.getParent(), "This expression assigns " + dsc + " to itself." diff --git a/javascript/ql/test/query-tests/Expressions/SelfAssignment/template.njk b/javascript/ql/test/query-tests/Expressions/SelfAssignment/template.njk new file mode 100644 index 00000000000..8319bb1e414 --- /dev/null +++ b/javascript/ql/test/query-tests/Expressions/SelfAssignment/template.njk @@ -0,0 +1,3 @@ +

    From e49cd838684492e710b22f3187a9c616e5860caf Mon Sep 17 00:00:00 2001 From: Anders Fugmann Date: Wed, 15 Sep 2021 10:31:15 +0200 Subject: [PATCH 408/741] C++: update change note per suggestion from peer review --- cpp/change-notes/2021-09-13-overflow-static.md | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/cpp/change-notes/2021-09-13-overflow-static.md b/cpp/change-notes/2021-09-13-overflow-static.md index f9e3a05f3be..5a9ef395815 100644 --- a/cpp/change-notes/2021-09-13-overflow-static.md +++ b/cpp/change-notes/2021-09-13-overflow-static.md @@ -1,6 +1,4 @@ lgtm,codescanning -* The `Buffer` library considers more fields to be of variable size - for array members of size 0 or 1. Buffer size calculation of array type - fields of size 0 or 1 in unions are considered pointers to the union - and will return the size of the union itself. The changes reduces - the number of false positives in cpp/static-buffer-overflow +* The `memberMayBeVarSize` predicate considers more fields to be variable size. + As a result, the "Static buffer overflow" query (cpp/static-buffer-overflow) + produces fewer false positives. From 01a06d1f5cb248cbbf2c79c51123e64bb50080dc Mon Sep 17 00:00:00 2001 From: Jordy Zomer Date: Wed, 15 Sep 2021 10:37:40 +0200 Subject: [PATCH 409/741] Add filter and format the query --- .../CWE-787/UnsignedToSignedPointerArith.ql | 23 +++++++++++-------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-787/UnsignedToSignedPointerArith.ql b/cpp/ql/src/experimental/Security/CWE/CWE-787/UnsignedToSignedPointerArith.ql index ffcc6b8f544..eb1522caf8f 100644 --- a/cpp/ql/src/experimental/Security/CWE/CWE-787/UnsignedToSignedPointerArith.ql +++ b/cpp/ql/src/experimental/Security/CWE/CWE-787/UnsignedToSignedPointerArith.ql @@ -15,13 +15,16 @@ import semmle.code.cpp.security.Overflow from FunctionCall call, Function f, Parameter p, DataFlow::Node sink, PointerArithmeticOperation pao where -f = call.getTarget() and -p = f.getAParameter() and -p.getUnspecifiedType().(IntegralType).isSigned() and -call.getArgument(p.getIndex()).getUnspecifiedType().(IntegralType).isUnsigned() and -pao.getAnOperand() = sink.asExpr() and -not exists(Operation a | guardedLesser(a, sink.asExpr())) and -not exists(Operation b | guardedGreater(b, call.getArgument(p.getIndex()))) and -not call.getArgument(p.getIndex()).isConstant() and -DataFlow::localFlow(DataFlow::parameterNode(p), sink) -select call, "This call: $@ passes an unsigned int to a function that requires a signed int: $@. And then used in pointer arithmetic: $@", call, call.toString(), f, f.toString(), sink, sink.toString() + f = call.getTarget() and + p = f.getAParameter() and + p.getUnspecifiedType().(IntegralType).isSigned() and + call.getArgument(p.getIndex()).getUnspecifiedType().(IntegralType).isUnsigned() and + pao.getAnOperand() = sink.asExpr() and + not exists(Operation a | guardedLesser(a, sink.asExpr())) and + not exists(Operation b | guardedGreater(b, call.getArgument(p.getIndex()))) and + not call.getArgument(p.getIndex()).isConstant() and + DataFlow::localFlow(DataFlow::parameterNode(p), sink) and + p.getUnspecifiedType().getSize() < 8 +select call, + "This call: $@ passes an unsigned int to a function that requires a signed int: $@. And then used in pointer arithmetic: $@", + call, call.toString(), f, f.toString(), sink, sink.toString() From 0b83d033d7ada94e768cdcf33f123c3e6079e87a Mon Sep 17 00:00:00 2001 From: Erik Krogh Kristensen Date: Wed, 15 Sep 2021 11:33:05 +0200 Subject: [PATCH 410/741] add @static_initializer in the stats file --- javascript/ql/lib/semmlecode.javascript.dbscheme.stats | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/javascript/ql/lib/semmlecode.javascript.dbscheme.stats b/javascript/ql/lib/semmlecode.javascript.dbscheme.stats index 38c6169f3de..ed051cd16ac 100644 --- a/javascript/ql/lib/semmlecode.javascript.dbscheme.stats +++ b/javascript/ql/lib/semmlecode.javascript.dbscheme.stats @@ -774,6 +774,10 @@ 2693 +@static_initializer +100 + + @local_type_access 25491 From cf149bd8c88081276deeddd1488f5a4b702e6dc7 Mon Sep 17 00:00:00 2001 From: Erik Krogh Kristensen Date: Wed, 15 Sep 2021 11:54:30 +0200 Subject: [PATCH 411/741] add static_initializer as a stmt_parent --- javascript/ql/lib/semmlecode.javascript.dbscheme | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/javascript/ql/lib/semmlecode.javascript.dbscheme b/javascript/ql/lib/semmlecode.javascript.dbscheme index 7533e7ff64d..e54b35a8a12 100644 --- a/javascript/ql/lib/semmlecode.javascript.dbscheme +++ b/javascript/ql/lib/semmlecode.javascript.dbscheme @@ -146,7 +146,7 @@ stmt_containers (unique int stmt: @stmt ref, jump_targets (unique int jump: @stmt ref, int target: @stmt ref); -@stmt_parent = @stmt | @toplevel | @function_expr | @arrow_function_expr; +@stmt_parent = @stmt | @toplevel | @function_expr | @arrow_function_expr | @static_initializer; @stmt_container = @toplevel | @function | @namespace_declaration | @external_module_declaration | @global_augmentation_declaration; case @stmt.kind of From 9ad51fbc02b80d2d6d15dc02a02c8e729b7515d8 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Wed, 15 Sep 2021 11:03:09 +0100 Subject: [PATCH 412/741] C++: Fix the correct test this time. --- .../Security/CWE/CWE-190/SAMATE/ArithmeticUncontrolled.expected | 1 + .../CWE/CWE-190/semmle/tainted/ArithmeticTainted.expected | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-190/SAMATE/ArithmeticUncontrolled.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-190/SAMATE/ArithmeticUncontrolled.expected index 9ae2ff0ecff..c908f8789c4 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-190/SAMATE/ArithmeticUncontrolled.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-190/SAMATE/ArithmeticUncontrolled.expected @@ -50,6 +50,7 @@ nodes | examples.cpp:35:26:35:33 | call to rand | semmle.label | call to rand | | examples.cpp:35:26:35:33 | call to rand | semmle.label | call to rand | | examples.cpp:38:9:38:12 | data | semmle.label | data | +subpaths #select | examples.cpp:25:31:25:34 | data | examples.cpp:22:26:22:33 | (unsigned int)... | examples.cpp:25:31:25:34 | data | $@ flows to here and is used in arithmetic, potentially causing an underflow. | examples.cpp:22:26:22:33 | call to rand | Uncontrolled value | | examples.cpp:25:31:25:34 | data | examples.cpp:22:26:22:33 | (unsigned int)... | examples.cpp:25:31:25:34 | data | $@ flows to here and is used in arithmetic, potentially causing an underflow. | examples.cpp:22:26:22:33 | call to rand | Uncontrolled value | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/tainted/ArithmeticTainted.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/tainted/ArithmeticTainted.expected index 8ac361e9589..e2fefe4a442 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/tainted/ArithmeticTainted.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/tainted/ArithmeticTainted.expected @@ -56,7 +56,6 @@ nodes | test.c:54:7:54:10 | len3 | semmle.label | len3 | | test.c:54:7:54:10 | len3 | semmle.label | len3 | | test.c:54:7:54:10 | len3 | semmle.label | len3 | -subpaths #select | test2.cpp:14:11:14:11 | v | test2.cpp:25:22:25:23 | & ... | test2.cpp:14:11:14:11 | v | $@ flows to here and is used in arithmetic, potentially causing an overflow. | test2.cpp:25:22:25:23 | & ... | User-provided value | | test2.cpp:14:11:14:11 | v | test2.cpp:25:22:25:23 | & ... | test2.cpp:14:11:14:11 | v | $@ flows to here and is used in arithmetic, potentially causing an underflow. | test2.cpp:25:22:25:23 | & ... | User-provided value | From 758b6bd4dda679455286deeb0d31580b0eee8b0d Mon Sep 17 00:00:00 2001 From: yoff Date: Wed, 15 Sep 2021 12:25:27 +0200 Subject: [PATCH 413/741] Update python/ql/src/semmle/python/functions/ModificationOfParameterWithDefaultCustomizations.qll Co-authored-by: Rasmus Wriedt Larsen --- ...odificationOfParameterWithDefaultCustomizations.qll | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/python/ql/src/semmle/python/functions/ModificationOfParameterWithDefaultCustomizations.qll b/python/ql/src/semmle/python/functions/ModificationOfParameterWithDefaultCustomizations.qll index 9f5da1d14c8..4617e60cbe5 100644 --- a/python/ql/src/semmle/python/functions/ModificationOfParameterWithDefaultCustomizations.qll +++ b/python/ql/src/semmle/python/functions/ModificationOfParameterWithDefaultCustomizations.qll @@ -141,9 +141,17 @@ module ModificationOfParameterWithDefault { private import semmle.python.essa.SsaCompute /** - * Simple detection of truthy and falsey values. + * A data-flow node that is known to be either truthy or falsey. * * It handles the cases `if x` and `if not x`. + * + * For example, in the following code, `this` will be the `x` that is printed, + * which we will know is truthy: + * + * ```py + * if x: + * print(x) + * ``` */ private class MustBe extends DataFlow::Node { DataFlow::GuardNode guard; From 8ea7a28a77d8f9693323a3dad8861e8a585edc57 Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Wed, 15 Sep 2021 12:32:21 +0200 Subject: [PATCH 414/741] Python: Unexpose fields as suggested. --- ...onOfParameterWithDefaultCustomizations.qll | 24 +++++++++---------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/python/ql/src/semmle/python/functions/ModificationOfParameterWithDefaultCustomizations.qll b/python/ql/src/semmle/python/functions/ModificationOfParameterWithDefaultCustomizations.qll index 4617e60cbe5..6abb3f80085 100644 --- a/python/ql/src/semmle/python/functions/ModificationOfParameterWithDefaultCustomizations.qll +++ b/python/ql/src/semmle/python/functions/ModificationOfParameterWithDefaultCustomizations.qll @@ -144,23 +144,20 @@ module ModificationOfParameterWithDefault { * A data-flow node that is known to be either truthy or falsey. * * It handles the cases `if x` and `if not x`. - * + * * For example, in the following code, `this` will be the `x` that is printed, * which we will know is truthy: - * + * * ```py * if x: * print(x) * ``` */ private class MustBe extends DataFlow::Node { - DataFlow::GuardNode guard; - NameNode guarded; - boolean branch; boolean truthy; MustBe() { - ( + exists(DataFlow::GuardNode guard, NameNode guarded, boolean branch | // case: if x guard = guarded and branch = truthy @@ -169,13 +166,14 @@ module ModificationOfParameterWithDefault { guard.(UnaryExprNode).getNode().getOp() instanceof Not and guarded = guard.(UnaryExprNode).getOperand() and branch = truthy.booleanNot() - ) and - // guard controls this - guard.controlsBlock(this.asCfgNode().getBasicBlock(), branch) and - // there is a definition tying the guarded value to this - exists(EssaDefinition def | - AdjacentUses::useOfDef(def, this.asCfgNode()) and - AdjacentUses::useOfDef(def, guarded) + | + // guard controls this + guard.controlsBlock(this.asCfgNode().getBasicBlock(), branch) and + // there is a definition tying the guarded value to this + exists(EssaDefinition def | + AdjacentUses::useOfDef(def, this.asCfgNode()) and + AdjacentUses::useOfDef(def, guarded) + ) ) } } From 947ab8a14d4357a69ed736a2ba9df2e82b09f339 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Wed, 15 Sep 2021 13:15:05 +0100 Subject: [PATCH 415/741] Make the QLDoc on 'getAnSqlParameter' more clear. --- cpp/ql/lib/semmle/code/cpp/models/interfaces/Sql.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpp/ql/lib/semmle/code/cpp/models/interfaces/Sql.qll b/cpp/ql/lib/semmle/code/cpp/models/interfaces/Sql.qll index 8eae36f5972..2702ad867d9 100644 --- a/cpp/ql/lib/semmle/code/cpp/models/interfaces/Sql.qll +++ b/cpp/ql/lib/semmle/code/cpp/models/interfaces/Sql.qll @@ -13,7 +13,7 @@ private import cpp */ abstract class SqlSink extends Function { /** - * Holds if `input` to this function represents data that is passed to an SQL server. + * Holds if `input` to this function represents SQL code to be executed. */ abstract predicate getAnSqlParameter(FunctionInput input); } From 3abe1b4fc66eb9d7401dee7b5f862be69abe4e53 Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Wed, 15 Sep 2021 16:10:30 +0200 Subject: [PATCH 416/741] Dataflow: Fix bad join-order. --- .../lib/semmle/code/java/dataflow/internal/DataFlowImpl.qll | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl.qll index 758b70ec316..6e7283c4153 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl.qll @@ -3690,8 +3690,8 @@ private module Subpaths { */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeMid ret, PathNodeMid out) { exists(ParamNodeEx p, NodeEx o, AccessPath apout | - arg.getASuccessor() = par and - arg.getASuccessor() = out and + pragma[only_bind_into](arg).getASuccessor() = par and + pragma[only_bind_into](arg).getASuccessor() = out and subpaths03(arg, p, ret, o, apout) and par.getNodeEx() = p and out.getNodeEx() = o and From c0fd44c909f58984aa06e727cc375e7142e43dc7 Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Wed, 15 Sep 2021 16:10:54 +0200 Subject: [PATCH 417/741] Dataflow: Sync. --- cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl.qll | 4 ++-- .../lib/semmle/code/cpp/dataflow/internal/DataFlowImpl2.qll | 4 ++-- .../lib/semmle/code/cpp/dataflow/internal/DataFlowImpl3.qll | 4 ++-- .../lib/semmle/code/cpp/dataflow/internal/DataFlowImpl4.qll | 4 ++-- .../semmle/code/cpp/dataflow/internal/DataFlowImplLocal.qll | 4 ++-- .../lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl.qll | 4 ++-- .../semmle/code/cpp/ir/dataflow/internal/DataFlowImpl2.qll | 4 ++-- .../semmle/code/cpp/ir/dataflow/internal/DataFlowImpl3.qll | 4 ++-- .../semmle/code/cpp/ir/dataflow/internal/DataFlowImpl4.qll | 4 ++-- .../lib/semmle/code/csharp/dataflow/internal/DataFlowImpl.qll | 4 ++-- .../semmle/code/csharp/dataflow/internal/DataFlowImpl2.qll | 4 ++-- .../semmle/code/csharp/dataflow/internal/DataFlowImpl3.qll | 4 ++-- .../semmle/code/csharp/dataflow/internal/DataFlowImpl4.qll | 4 ++-- .../semmle/code/csharp/dataflow/internal/DataFlowImpl5.qll | 4 ++-- .../lib/semmle/code/java/dataflow/internal/DataFlowImpl2.qll | 4 ++-- .../lib/semmle/code/java/dataflow/internal/DataFlowImpl3.qll | 4 ++-- .../lib/semmle/code/java/dataflow/internal/DataFlowImpl4.qll | 4 ++-- .../lib/semmle/code/java/dataflow/internal/DataFlowImpl5.qll | 4 ++-- .../lib/semmle/code/java/dataflow/internal/DataFlowImpl6.qll | 4 ++-- .../java/dataflow/internal/DataFlowImplForSerializability.qll | 4 ++-- .../lib/semmle/python/dataflow/new/internal/DataFlowImpl.qll | 4 ++-- .../lib/semmle/python/dataflow/new/internal/DataFlowImpl2.qll | 4 ++-- .../lib/semmle/python/dataflow/new/internal/DataFlowImpl3.qll | 4 ++-- .../lib/semmle/python/dataflow/new/internal/DataFlowImpl4.qll | 4 ++-- 24 files changed, 48 insertions(+), 48 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl.qll index 758b70ec316..6e7283c4153 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl.qll @@ -3690,8 +3690,8 @@ private module Subpaths { */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeMid ret, PathNodeMid out) { exists(ParamNodeEx p, NodeEx o, AccessPath apout | - arg.getASuccessor() = par and - arg.getASuccessor() = out and + pragma[only_bind_into](arg).getASuccessor() = par and + pragma[only_bind_into](arg).getASuccessor() = out and subpaths03(arg, p, ret, o, apout) and par.getNodeEx() = p and out.getNodeEx() = o and diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl2.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl2.qll index 758b70ec316..6e7283c4153 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl2.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl2.qll @@ -3690,8 +3690,8 @@ private module Subpaths { */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeMid ret, PathNodeMid out) { exists(ParamNodeEx p, NodeEx o, AccessPath apout | - arg.getASuccessor() = par and - arg.getASuccessor() = out and + pragma[only_bind_into](arg).getASuccessor() = par and + pragma[only_bind_into](arg).getASuccessor() = out and subpaths03(arg, p, ret, o, apout) and par.getNodeEx() = p and out.getNodeEx() = o and diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl3.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl3.qll index 758b70ec316..6e7283c4153 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl3.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl3.qll @@ -3690,8 +3690,8 @@ private module Subpaths { */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeMid ret, PathNodeMid out) { exists(ParamNodeEx p, NodeEx o, AccessPath apout | - arg.getASuccessor() = par and - arg.getASuccessor() = out and + pragma[only_bind_into](arg).getASuccessor() = par and + pragma[only_bind_into](arg).getASuccessor() = out and subpaths03(arg, p, ret, o, apout) and par.getNodeEx() = p and out.getNodeEx() = o and diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl4.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl4.qll index 758b70ec316..6e7283c4153 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl4.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl4.qll @@ -3690,8 +3690,8 @@ private module Subpaths { */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeMid ret, PathNodeMid out) { exists(ParamNodeEx p, NodeEx o, AccessPath apout | - arg.getASuccessor() = par and - arg.getASuccessor() = out and + pragma[only_bind_into](arg).getASuccessor() = par and + pragma[only_bind_into](arg).getASuccessor() = out and subpaths03(arg, p, ret, o, apout) and par.getNodeEx() = p and out.getNodeEx() = o and diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplLocal.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplLocal.qll index 758b70ec316..6e7283c4153 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplLocal.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplLocal.qll @@ -3690,8 +3690,8 @@ private module Subpaths { */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeMid ret, PathNodeMid out) { exists(ParamNodeEx p, NodeEx o, AccessPath apout | - arg.getASuccessor() = par and - arg.getASuccessor() = out and + pragma[only_bind_into](arg).getASuccessor() = par and + pragma[only_bind_into](arg).getASuccessor() = out and subpaths03(arg, p, ret, o, apout) and par.getNodeEx() = p and out.getNodeEx() = o and diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl.qll index 758b70ec316..6e7283c4153 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl.qll @@ -3690,8 +3690,8 @@ private module Subpaths { */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeMid ret, PathNodeMid out) { exists(ParamNodeEx p, NodeEx o, AccessPath apout | - arg.getASuccessor() = par and - arg.getASuccessor() = out and + pragma[only_bind_into](arg).getASuccessor() = par and + pragma[only_bind_into](arg).getASuccessor() = out and subpaths03(arg, p, ret, o, apout) and par.getNodeEx() = p and out.getNodeEx() = o and diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl2.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl2.qll index 758b70ec316..6e7283c4153 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl2.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl2.qll @@ -3690,8 +3690,8 @@ private module Subpaths { */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeMid ret, PathNodeMid out) { exists(ParamNodeEx p, NodeEx o, AccessPath apout | - arg.getASuccessor() = par and - arg.getASuccessor() = out and + pragma[only_bind_into](arg).getASuccessor() = par and + pragma[only_bind_into](arg).getASuccessor() = out and subpaths03(arg, p, ret, o, apout) and par.getNodeEx() = p and out.getNodeEx() = o and diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl3.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl3.qll index 758b70ec316..6e7283c4153 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl3.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl3.qll @@ -3690,8 +3690,8 @@ private module Subpaths { */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeMid ret, PathNodeMid out) { exists(ParamNodeEx p, NodeEx o, AccessPath apout | - arg.getASuccessor() = par and - arg.getASuccessor() = out and + pragma[only_bind_into](arg).getASuccessor() = par and + pragma[only_bind_into](arg).getASuccessor() = out and subpaths03(arg, p, ret, o, apout) and par.getNodeEx() = p and out.getNodeEx() = o and diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl4.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl4.qll index 758b70ec316..6e7283c4153 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl4.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl4.qll @@ -3690,8 +3690,8 @@ private module Subpaths { */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeMid ret, PathNodeMid out) { exists(ParamNodeEx p, NodeEx o, AccessPath apout | - arg.getASuccessor() = par and - arg.getASuccessor() = out and + pragma[only_bind_into](arg).getASuccessor() = par and + pragma[only_bind_into](arg).getASuccessor() = out and subpaths03(arg, p, ret, o, apout) and par.getNodeEx() = p and out.getNodeEx() = o and diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl.qll index 758b70ec316..6e7283c4153 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl.qll @@ -3690,8 +3690,8 @@ private module Subpaths { */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeMid ret, PathNodeMid out) { exists(ParamNodeEx p, NodeEx o, AccessPath apout | - arg.getASuccessor() = par and - arg.getASuccessor() = out and + pragma[only_bind_into](arg).getASuccessor() = par and + pragma[only_bind_into](arg).getASuccessor() = out and subpaths03(arg, p, ret, o, apout) and par.getNodeEx() = p and out.getNodeEx() = o and diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl2.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl2.qll index 758b70ec316..6e7283c4153 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl2.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl2.qll @@ -3690,8 +3690,8 @@ private module Subpaths { */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeMid ret, PathNodeMid out) { exists(ParamNodeEx p, NodeEx o, AccessPath apout | - arg.getASuccessor() = par and - arg.getASuccessor() = out and + pragma[only_bind_into](arg).getASuccessor() = par and + pragma[only_bind_into](arg).getASuccessor() = out and subpaths03(arg, p, ret, o, apout) and par.getNodeEx() = p and out.getNodeEx() = o and diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl3.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl3.qll index 758b70ec316..6e7283c4153 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl3.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl3.qll @@ -3690,8 +3690,8 @@ private module Subpaths { */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeMid ret, PathNodeMid out) { exists(ParamNodeEx p, NodeEx o, AccessPath apout | - arg.getASuccessor() = par and - arg.getASuccessor() = out and + pragma[only_bind_into](arg).getASuccessor() = par and + pragma[only_bind_into](arg).getASuccessor() = out and subpaths03(arg, p, ret, o, apout) and par.getNodeEx() = p and out.getNodeEx() = o and diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl4.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl4.qll index 758b70ec316..6e7283c4153 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl4.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl4.qll @@ -3690,8 +3690,8 @@ private module Subpaths { */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeMid ret, PathNodeMid out) { exists(ParamNodeEx p, NodeEx o, AccessPath apout | - arg.getASuccessor() = par and - arg.getASuccessor() = out and + pragma[only_bind_into](arg).getASuccessor() = par and + pragma[only_bind_into](arg).getASuccessor() = out and subpaths03(arg, p, ret, o, apout) and par.getNodeEx() = p and out.getNodeEx() = o and diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl5.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl5.qll index 758b70ec316..6e7283c4153 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl5.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl5.qll @@ -3690,8 +3690,8 @@ private module Subpaths { */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeMid ret, PathNodeMid out) { exists(ParamNodeEx p, NodeEx o, AccessPath apout | - arg.getASuccessor() = par and - arg.getASuccessor() = out and + pragma[only_bind_into](arg).getASuccessor() = par and + pragma[only_bind_into](arg).getASuccessor() = out and subpaths03(arg, p, ret, o, apout) and par.getNodeEx() = p and out.getNodeEx() = o and diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl2.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl2.qll index 758b70ec316..6e7283c4153 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl2.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl2.qll @@ -3690,8 +3690,8 @@ private module Subpaths { */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeMid ret, PathNodeMid out) { exists(ParamNodeEx p, NodeEx o, AccessPath apout | - arg.getASuccessor() = par and - arg.getASuccessor() = out and + pragma[only_bind_into](arg).getASuccessor() = par and + pragma[only_bind_into](arg).getASuccessor() = out and subpaths03(arg, p, ret, o, apout) and par.getNodeEx() = p and out.getNodeEx() = o and diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl3.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl3.qll index 758b70ec316..6e7283c4153 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl3.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl3.qll @@ -3690,8 +3690,8 @@ private module Subpaths { */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeMid ret, PathNodeMid out) { exists(ParamNodeEx p, NodeEx o, AccessPath apout | - arg.getASuccessor() = par and - arg.getASuccessor() = out and + pragma[only_bind_into](arg).getASuccessor() = par and + pragma[only_bind_into](arg).getASuccessor() = out and subpaths03(arg, p, ret, o, apout) and par.getNodeEx() = p and out.getNodeEx() = o and diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl4.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl4.qll index 758b70ec316..6e7283c4153 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl4.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl4.qll @@ -3690,8 +3690,8 @@ private module Subpaths { */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeMid ret, PathNodeMid out) { exists(ParamNodeEx p, NodeEx o, AccessPath apout | - arg.getASuccessor() = par and - arg.getASuccessor() = out and + pragma[only_bind_into](arg).getASuccessor() = par and + pragma[only_bind_into](arg).getASuccessor() = out and subpaths03(arg, p, ret, o, apout) and par.getNodeEx() = p and out.getNodeEx() = o and diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl5.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl5.qll index 758b70ec316..6e7283c4153 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl5.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl5.qll @@ -3690,8 +3690,8 @@ private module Subpaths { */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeMid ret, PathNodeMid out) { exists(ParamNodeEx p, NodeEx o, AccessPath apout | - arg.getASuccessor() = par and - arg.getASuccessor() = out and + pragma[only_bind_into](arg).getASuccessor() = par and + pragma[only_bind_into](arg).getASuccessor() = out and subpaths03(arg, p, ret, o, apout) and par.getNodeEx() = p and out.getNodeEx() = o and diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl6.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl6.qll index 758b70ec316..6e7283c4153 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl6.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl6.qll @@ -3690,8 +3690,8 @@ private module Subpaths { */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeMid ret, PathNodeMid out) { exists(ParamNodeEx p, NodeEx o, AccessPath apout | - arg.getASuccessor() = par and - arg.getASuccessor() = out and + pragma[only_bind_into](arg).getASuccessor() = par and + pragma[only_bind_into](arg).getASuccessor() = out and subpaths03(arg, p, ret, o, apout) and par.getNodeEx() = p and out.getNodeEx() = o and diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplForSerializability.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplForSerializability.qll index 758b70ec316..6e7283c4153 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplForSerializability.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplForSerializability.qll @@ -3690,8 +3690,8 @@ private module Subpaths { */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeMid ret, PathNodeMid out) { exists(ParamNodeEx p, NodeEx o, AccessPath apout | - arg.getASuccessor() = par and - arg.getASuccessor() = out and + pragma[only_bind_into](arg).getASuccessor() = par and + pragma[only_bind_into](arg).getASuccessor() = out and subpaths03(arg, p, ret, o, apout) and par.getNodeEx() = p and out.getNodeEx() = o and diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl.qll index 758b70ec316..6e7283c4153 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl.qll @@ -3690,8 +3690,8 @@ private module Subpaths { */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeMid ret, PathNodeMid out) { exists(ParamNodeEx p, NodeEx o, AccessPath apout | - arg.getASuccessor() = par and - arg.getASuccessor() = out and + pragma[only_bind_into](arg).getASuccessor() = par and + pragma[only_bind_into](arg).getASuccessor() = out and subpaths03(arg, p, ret, o, apout) and par.getNodeEx() = p and out.getNodeEx() = o and diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl2.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl2.qll index 758b70ec316..6e7283c4153 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl2.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl2.qll @@ -3690,8 +3690,8 @@ private module Subpaths { */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeMid ret, PathNodeMid out) { exists(ParamNodeEx p, NodeEx o, AccessPath apout | - arg.getASuccessor() = par and - arg.getASuccessor() = out and + pragma[only_bind_into](arg).getASuccessor() = par and + pragma[only_bind_into](arg).getASuccessor() = out and subpaths03(arg, p, ret, o, apout) and par.getNodeEx() = p and out.getNodeEx() = o and diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl3.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl3.qll index 758b70ec316..6e7283c4153 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl3.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl3.qll @@ -3690,8 +3690,8 @@ private module Subpaths { */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeMid ret, PathNodeMid out) { exists(ParamNodeEx p, NodeEx o, AccessPath apout | - arg.getASuccessor() = par and - arg.getASuccessor() = out and + pragma[only_bind_into](arg).getASuccessor() = par and + pragma[only_bind_into](arg).getASuccessor() = out and subpaths03(arg, p, ret, o, apout) and par.getNodeEx() = p and out.getNodeEx() = o and diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl4.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl4.qll index 758b70ec316..6e7283c4153 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl4.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl4.qll @@ -3690,8 +3690,8 @@ private module Subpaths { */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeMid ret, PathNodeMid out) { exists(ParamNodeEx p, NodeEx o, AccessPath apout | - arg.getASuccessor() = par and - arg.getASuccessor() = out and + pragma[only_bind_into](arg).getASuccessor() = par and + pragma[only_bind_into](arg).getASuccessor() = out and subpaths03(arg, p, ret, o, apout) and par.getNodeEx() = p and out.getNodeEx() = o and From 905be67aae3d39ad9d06920b1ff3071d48665e67 Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Tue, 1 Jun 2021 09:39:46 +0200 Subject: [PATCH 418/741] Moved from experimental --- .../Security/CWE/CWE-522/InsecureBasicAuth.java | 0 .../Security/CWE/CWE-522/InsecureBasicAuth.qhelp | 0 .../Security/CWE/CWE-522/InsecureBasicAuth.ql | 0 .../query-tests/security/CWE-522/InsecureBasicAuth.qlref | 1 - .../query-tests/security/CWE-522/InsecureBasicAuth.expected | 0 .../query-tests/security/CWE-522/InsecureBasicAuth.java | 0 .../test/query-tests/security/CWE-522/InsecureBasicAuth.qlref | 1 + .../{experimental => }/query-tests/security/CWE-522/options | 2 +- 8 files changed, 2 insertions(+), 2 deletions(-) rename java/ql/src/{experimental => }/Security/CWE/CWE-522/InsecureBasicAuth.java (100%) rename java/ql/src/{experimental => }/Security/CWE/CWE-522/InsecureBasicAuth.qhelp (100%) rename java/ql/src/{experimental => }/Security/CWE/CWE-522/InsecureBasicAuth.ql (100%) delete mode 100644 java/ql/test/experimental/query-tests/security/CWE-522/InsecureBasicAuth.qlref rename java/ql/test/{experimental => }/query-tests/security/CWE-522/InsecureBasicAuth.expected (100%) rename java/ql/test/{experimental => }/query-tests/security/CWE-522/InsecureBasicAuth.java (100%) create mode 100644 java/ql/test/query-tests/security/CWE-522/InsecureBasicAuth.qlref rename java/ql/test/{experimental => }/query-tests/security/CWE-522/options (68%) diff --git a/java/ql/src/experimental/Security/CWE/CWE-522/InsecureBasicAuth.java b/java/ql/src/Security/CWE/CWE-522/InsecureBasicAuth.java similarity index 100% rename from java/ql/src/experimental/Security/CWE/CWE-522/InsecureBasicAuth.java rename to java/ql/src/Security/CWE/CWE-522/InsecureBasicAuth.java diff --git a/java/ql/src/experimental/Security/CWE/CWE-522/InsecureBasicAuth.qhelp b/java/ql/src/Security/CWE/CWE-522/InsecureBasicAuth.qhelp similarity index 100% rename from java/ql/src/experimental/Security/CWE/CWE-522/InsecureBasicAuth.qhelp rename to java/ql/src/Security/CWE/CWE-522/InsecureBasicAuth.qhelp diff --git a/java/ql/src/experimental/Security/CWE/CWE-522/InsecureBasicAuth.ql b/java/ql/src/Security/CWE/CWE-522/InsecureBasicAuth.ql similarity index 100% rename from java/ql/src/experimental/Security/CWE/CWE-522/InsecureBasicAuth.ql rename to java/ql/src/Security/CWE/CWE-522/InsecureBasicAuth.ql diff --git a/java/ql/test/experimental/query-tests/security/CWE-522/InsecureBasicAuth.qlref b/java/ql/test/experimental/query-tests/security/CWE-522/InsecureBasicAuth.qlref deleted file mode 100644 index 36034122a2e..00000000000 --- a/java/ql/test/experimental/query-tests/security/CWE-522/InsecureBasicAuth.qlref +++ /dev/null @@ -1 +0,0 @@ -experimental/Security/CWE/CWE-522/InsecureBasicAuth.ql diff --git a/java/ql/test/experimental/query-tests/security/CWE-522/InsecureBasicAuth.expected b/java/ql/test/query-tests/security/CWE-522/InsecureBasicAuth.expected similarity index 100% rename from java/ql/test/experimental/query-tests/security/CWE-522/InsecureBasicAuth.expected rename to java/ql/test/query-tests/security/CWE-522/InsecureBasicAuth.expected diff --git a/java/ql/test/experimental/query-tests/security/CWE-522/InsecureBasicAuth.java b/java/ql/test/query-tests/security/CWE-522/InsecureBasicAuth.java similarity index 100% rename from java/ql/test/experimental/query-tests/security/CWE-522/InsecureBasicAuth.java rename to java/ql/test/query-tests/security/CWE-522/InsecureBasicAuth.java diff --git a/java/ql/test/query-tests/security/CWE-522/InsecureBasicAuth.qlref b/java/ql/test/query-tests/security/CWE-522/InsecureBasicAuth.qlref new file mode 100644 index 00000000000..d3c297f7f71 --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-522/InsecureBasicAuth.qlref @@ -0,0 +1 @@ +Security/CWE/CWE-522/InsecureBasicAuth.ql diff --git a/java/ql/test/experimental/query-tests/security/CWE-522/options b/java/ql/test/query-tests/security/CWE-522/options similarity index 68% rename from java/ql/test/experimental/query-tests/security/CWE-522/options rename to java/ql/test/query-tests/security/CWE-522/options index 7eaf4cb235f..2e6054aac45 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-522/options +++ b/java/ql/test/query-tests/security/CWE-522/options @@ -1 +1 @@ -// semmle-extractor-options: --javac-args -cp ${testdir}/../../../../stubs/apache-http-4.4.13 +// semmle-extractor-options: --javac-args -cp ${testdir}/../../../stubs/apache-http-4.4.13 From 2cada386b4505a0d76b0d4ceea9f7ca2dd6605f6 Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Tue, 1 Jun 2021 11:52:45 +0200 Subject: [PATCH 419/741] Refactored into InsecureBasicAuth.qll --- .../Security/CWE/CWE-522/InsecureBasicAuth.ql | 212 +------------- .../code/java/security/InsecureBasicAuth.qll | 259 ++++++++++++++++++ .../CWE-522/InsecureBasicAuth.expected | 18 +- 3 files changed, 273 insertions(+), 216 deletions(-) create mode 100644 java/ql/src/semmle/code/java/security/InsecureBasicAuth.qll diff --git a/java/ql/src/Security/CWE/CWE-522/InsecureBasicAuth.ql b/java/ql/src/Security/CWE/CWE-522/InsecureBasicAuth.ql index 460d7492f5b..5d9eae211e7 100644 --- a/java/ql/src/Security/CWE/CWE-522/InsecureBasicAuth.ql +++ b/java/ql/src/Security/CWE/CWE-522/InsecureBasicAuth.ql @@ -14,225 +14,23 @@ */ import java -import semmle.code.java.frameworks.Networking -import semmle.code.java.frameworks.ApacheHttp import semmle.code.java.dataflow.TaintTracking +import semmle.code.java.security.InsecureBasicAuth import DataFlow::PathGraph -/** - * Class of Java URL constructor. - */ -class URLConstructor extends ClassInstanceExpr { - URLConstructor() { this.getConstructor().getDeclaringType() instanceof TypeUrl } - - predicate hasHttpStringArg() { - this.getConstructor().getParameter(0).getType() instanceof TypeString and - ( - // URLs constructed with any of the three string constructors below: - // `URL(String protocol, String host, int port, String file)`, - // `URL(String protocol, String host, int port, String file, URLStreamHandler handler)`, - // `URL(String protocol, String host, String file)` - this.getConstructor().getNumberOfParameters() > 1 and - concatHttpString(getArgument(0), this.getArgument(1)) // First argument contains the protocol part and the second argument contains the host part. - or - // URLs constructed with the string constructor `URL(String spec)` - this.getConstructor().getNumberOfParameters() = 1 and - this.getArgument(0) instanceof HttpString // First argument contains the whole spec. - ) - } -} - -/** - * Class of Java URI constructor. - */ -class URIConstructor extends ClassInstanceExpr { - URIConstructor() { this.getConstructor().getDeclaringType() instanceof TypeUri } - - predicate hasHttpStringArg() { - ( - this.getNumArgument() = 1 and - this.getArgument(0) instanceof HttpString // `URI(String str)` - or - this.getNumArgument() = 4 and - concatHttpString(this.getArgument(0), this.getArgument(1)) // `URI(String scheme, String host, String path, String fragment)` - or - this.getNumArgument() = 5 and - concatHttpString(this.getArgument(0), this.getArgument(1)) // `URI(String scheme, String authority, String path, String query, String fragment)` without user-info in authority - or - this.getNumArgument() = 7 and - concatHttpString(this.getArgument(0), this.getArgument(2)) // `URI(String scheme, String userInfo, String host, int port, String path, String query, String fragment)` - ) - } -} - -/** - * String of HTTP URLs not in private domains. - */ -class HttpStringLiteral extends StringLiteral { - HttpStringLiteral() { - // Match URLs with the HTTP protocol and without private IP addresses to reduce false positives. - exists(string s | this.getRepresentedString() = s | - s.regexpMatch("(?i)http://[\\[a-zA-Z0-9].*") and - not s.substring(7, s.length()) instanceof PrivateHostName - ) - } -} - -/** - * Checks both parts of protocol and host. - */ -predicate concatHttpString(Expr protocol, Expr host) { - ( - protocol.(CompileTimeConstantExpr).getStringValue().regexpMatch("(?i)http(://)?") or - protocol - .(VarAccess) - .getVariable() - .getAnAssignedValue() - .(CompileTimeConstantExpr) - .getStringValue() - .regexpMatch("(?i)http(://)?") - ) and - not exists(string hostString | - hostString = host.(CompileTimeConstantExpr).getStringValue() or - hostString = - host.(VarAccess).getVariable().getAnAssignedValue().(CompileTimeConstantExpr).getStringValue() - | - hostString.length() = 0 or // Empty host is loopback address - hostString instanceof PrivateHostName - ) -} - -/** Gets the leftmost operand in a concatenated string */ -Expr getLeftmostConcatOperand(Expr expr) { - if expr instanceof AddExpr - then result = getLeftmostConcatOperand(expr.(AddExpr).getLeftOperand()) - else result = expr -} - -/** - * String concatenated with `HttpStringLiteral`. - */ -class HttpString extends Expr { - HttpString() { - this instanceof HttpStringLiteral - or - concatHttpString(this.(AddExpr).getLeftOperand(), - getLeftmostConcatOperand(this.(AddExpr).getRightOperand())) - } -} - -/** - * String pattern of basic authentication. - */ -class BasicAuthString extends StringLiteral { - BasicAuthString() { exists(string s | this.getRepresentedString() = s | s.matches("Basic %")) } -} - -/** - * String concatenated with `BasicAuthString`. - */ -predicate builtFromBasicAuthStringConcat(Expr expr) { - expr instanceof BasicAuthString - or - builtFromBasicAuthStringConcat(expr.(AddExpr).getLeftOperand()) - or - exists(Expr other | builtFromBasicAuthStringConcat(other) | - exists(Variable var | var.getAnAssignedValue() = other and var.getAnAccess() = expr) - ) -} - -/** The `openConnection` method of Java URL. Not to include `openStream` since it won't be used in this query. */ -class HttpURLOpenMethod extends Method { - HttpURLOpenMethod() { - this.getDeclaringType() instanceof TypeUrl and - this.getName() = "openConnection" - } -} - -/** Constructor of `ApacheHttpRequest` */ -predicate apacheHttpRequest(DataFlow::Node node1, DataFlow::Node node2) { - exists(ConstructorCall cc | - cc.getConstructedType() instanceof ApacheHttpRequest and - node2.asExpr() = cc and - cc.getAnArgument() = node1.asExpr() - ) -} - -/** `URI` methods */ -predicate createURI(DataFlow::Node node1, DataFlow::Node node2) { - exists( - URIConstructor cc // new URI - | - node2.asExpr() = cc and - cc.getArgument(0) = node1.asExpr() - ) - or - exists( - StaticMethodAccess ma // URI.create - | - ma.getMethod().getDeclaringType() instanceof TypeUri and - ma.getMethod().hasName("create") and - node1.asExpr() = ma.getArgument(0) and - node2.asExpr() = ma - ) -} - -/** Constructors of `URL` */ -predicate createURL(DataFlow::Node node1, DataFlow::Node node2) { - exists(URLConstructor cc | - node2.asExpr() = cc and - cc.getArgument(0) = node1.asExpr() - ) -} - -/** Method call of `HttpURLOpenMethod` */ -predicate urlOpen(DataFlow::Node node1, DataFlow::Node node2) { - exists(MethodAccess ma | - ma.getMethod() instanceof HttpURLOpenMethod and - node1.asExpr() = ma.getQualifier() and - ma = node2.asExpr() - ) -} - class BasicAuthFlowConfig extends TaintTracking::Configuration { BasicAuthFlowConfig() { this = "InsecureBasicAuth::BasicAuthFlowConfig" } - override predicate isSource(DataFlow::Node src) { - src.asExpr() instanceof HttpString - or - exists(URLConstructor uc | - uc.hasHttpStringArg() and - src.asExpr() = uc.getArgument(0) - ) - or - exists(URIConstructor uc | - uc.hasHttpStringArg() and - src.asExpr() = uc.getArgument(0) - ) - } + override predicate isSource(DataFlow::Node src) { src instanceof InsecureBasicAuthSource } - override predicate isSink(DataFlow::Node sink) { - exists(MethodAccess ma | - sink.asExpr() = ma.getQualifier() and - ( - ma.getMethod().hasName("addHeader") or - ma.getMethod().hasName("setHeader") or - ma.getMethod().hasName("setRequestProperty") - ) and - ma.getArgument(0).(CompileTimeConstantExpr).getStringValue() = "Authorization" and - builtFromBasicAuthStringConcat(ma.getArgument(1)) - ) - } + override predicate isSink(DataFlow::Node sink) { sink instanceof InsecureBasicAuthSink } override predicate isAdditionalTaintStep(DataFlow::Node node1, DataFlow::Node node2) { - apacheHttpRequest(node1, node2) or - createURI(node1, node2) or - createURL(node1, node2) or - urlOpen(node1, node2) + any(InsecureBasicAuthAdditionalTaintStep c).step(node1, node2) } } from DataFlow::PathNode source, DataFlow::PathNode sink, BasicAuthFlowConfig config where config.hasFlowPath(source, sink) select sink.getNode(), source, sink, "Insecure basic authentication from $@.", source.getNode(), - "HTTP url" + "HTTP URL" diff --git a/java/ql/src/semmle/code/java/security/InsecureBasicAuth.qll b/java/ql/src/semmle/code/java/security/InsecureBasicAuth.qll new file mode 100644 index 00000000000..cd211fc8875 --- /dev/null +++ b/java/ql/src/semmle/code/java/security/InsecureBasicAuth.qll @@ -0,0 +1,259 @@ +/** Provides classes and predicates to reason about Insecure Basic Authentication vulnerabilities. */ + +import java +import semmle.code.java.dataflow.DataFlow +import semmle.code.java.dataflow.ExternalFlow +import semmle.code.java.frameworks.Networking +import semmle.code.java.frameworks.ApacheHttp + +/** + * A source that represents HTTP URLs. + * Extend this class to add your own Insecure Basic Authentication sources. + */ +abstract class InsecureBasicAuthSource extends DataFlow::Node { } + +/** A default source representing HTTP strings, URLs or URIs. */ +private class DefaultInsecureBasicAuthSource extends InsecureBasicAuthSource { + DefaultInsecureBasicAuthSource() { + this.asExpr() instanceof HttpString + or + exists(URLConstructor uc | + uc.hasHttpStringArg() and + this.asExpr() = uc.getArgument(0) + ) + or + exists(URIConstructor uc | + uc.hasHttpStringArg() and + this.asExpr() = uc.getArgument(0) + ) + } +} + +/** + * A sink that represents a method that set Basic Authentication. + * Extend this class to add your own Insecure Basic Authentication sinks. + */ +abstract class InsecureBasicAuthSink extends DataFlow::Node { } + +/** A default sink representing methods that set an Authorization header. */ +private class DefaultInsecureBasicAuthSink extends InsecureBasicAuthSink { + DefaultInsecureBasicAuthSink() { + exists(MethodAccess ma | + ma.getMethod().hasName("addHeader") or + ma.getMethod().hasName("setHeader") or + ma.getMethod().hasName("setRequestProperty") + | + this.asExpr() = ma.getQualifier() and + ma.getArgument(0).(CompileTimeConstantExpr).getStringValue() = "Authorization" and + builtFromBasicAuthStringConcat(ma.getArgument(1)) + ) + } +} + +/** + * A unit class for adding additional taint steps. + * + * Extend this class to add additional taint steps that should apply to the `BasicAuthFlowConfig`. + */ +class InsecureBasicAuthAdditionalTaintStep extends Unit { + /** + * Holds if the step from `node1` to `node2` should be considered a taint + * step for the `BasicAuthFlowConfig` configuration. + */ + abstract predicate step(DataFlow::Node n1, DataFlow::Node n2); +} + +/** A set of additional taint steps to consider when taint tracking LDAP related data flows. */ +private class DefaultInsecureBasicAuthAdditionalTaintStep extends InsecureBasicAuthAdditionalTaintStep { + override predicate step(DataFlow::Node n1, DataFlow::Node n2) { + apacheHttpRequestStep(n1, n2) or + createUriStep(n1, n2) or + basicRequestLineStep(n1, n2) or + createUrlStep(n1, n2) or + urlOpenStep(n1, n2) + } +} + +/** + * Class of Java URL constructor. + */ +private class URLConstructor extends ClassInstanceExpr { + URLConstructor() { this.getConstructor().getDeclaringType() instanceof TypeUrl } + + predicate hasHttpStringArg() { + this.getConstructor().getParameter(0).getType() instanceof TypeString and + ( + // URLs constructed with any of the three string constructors below: + // `URL(String protocol, String host, int port, String file)`, + // `URL(String protocol, String host, int port, String file, URLStreamHandler handler)`, + // `URL(String protocol, String host, String file)` + this.getConstructor().getNumberOfParameters() > 1 and + concatHttpString(this.getArgument(0), this.getArgument(1)) // First argument contains the protocol part and the second argument contains the host part. + or + // URLs constructed with the string constructor `URL(String spec)` + this.getConstructor().getNumberOfParameters() = 1 and + this.getArgument(0) instanceof HttpString // First argument contains the whole spec. + ) + } +} + +/** + * Class of Java URI constructor. + */ +private class URIConstructor extends ClassInstanceExpr { + URIConstructor() { this.getConstructor().getDeclaringType() instanceof TypeUri } + + predicate hasHttpStringArg() { + ( + this.getNumArgument() = 1 and + this.getArgument(0) instanceof HttpString // `URI(String str)` + or + this.getNumArgument() = 4 and + concatHttpString(this.getArgument(0), this.getArgument(1)) // `URI(String scheme, String host, String path, String fragment)` + or + this.getNumArgument() = 5 and + concatHttpString(this.getArgument(0), this.getArgument(1)) // `URI(String scheme, String authority, String path, String query, String fragment)` without user-info in authority + or + this.getNumArgument() = 7 and + concatHttpString(this.getArgument(0), this.getArgument(2)) // `URI(String scheme, String userInfo, String host, int port, String path, String query, String fragment)` + ) + } +} + +/** + * String of HTTP URLs not in private domains. + */ +private class HttpStringLiteral extends StringLiteral { + HttpStringLiteral() { + // Match URLs with the HTTP protocol and without private IP addresses to reduce false positives. + exists(string s | this.getRepresentedString() = s | + s.regexpMatch("(?i)http://[\\[a-zA-Z0-9].*") and + not s.substring(7, s.length()) instanceof PrivateHostName + ) + } +} + +/** + * Checks both parts of protocol and host. + */ +private predicate concatHttpString(Expr protocol, Expr host) { + ( + protocol.(CompileTimeConstantExpr).getStringValue().regexpMatch("(?i)http(://)?") or + protocol + .(VarAccess) + .getVariable() + .getAnAssignedValue() + .(CompileTimeConstantExpr) + .getStringValue() + .regexpMatch("(?i)http(://)?") + ) and + not exists(string hostString | + hostString = host.(CompileTimeConstantExpr).getStringValue() or + hostString = + host.(VarAccess).getVariable().getAnAssignedValue().(CompileTimeConstantExpr).getStringValue() + | + hostString.length() = 0 or // Empty host is loopback address + hostString instanceof PrivateHostName + ) +} + +/** Gets the leftmost operand in a concatenated string */ +private Expr getLeftmostConcatOperand(Expr expr) { + if expr instanceof AddExpr + then result = getLeftmostConcatOperand(expr.(AddExpr).getLeftOperand()) + else result = expr +} + +/** + * String concatenated with `HttpStringLiteral`. + */ +private class HttpString extends Expr { + HttpString() { + this instanceof HttpStringLiteral + or + concatHttpString(this.(AddExpr).getLeftOperand(), + getLeftmostConcatOperand(this.(AddExpr).getRightOperand())) + } +} + +/** + * String pattern of basic authentication. + */ +private class BasicAuthString extends StringLiteral { + BasicAuthString() { exists(string s | this.getRepresentedString() = s | s.matches("Basic %")) } +} + +/** + * String concatenated with `BasicAuthString`. + */ +private predicate builtFromBasicAuthStringConcat(Expr expr) { + expr instanceof BasicAuthString + or + builtFromBasicAuthStringConcat(expr.(AddExpr).getLeftOperand()) + or + exists(Expr other | builtFromBasicAuthStringConcat(other) | + exists(Variable var | var.getAnAssignedValue() = other and var.getAnAccess() = expr) + ) +} + +/** The `openConnection` method of Java URL. Not to include `openStream` since it won't be used in this query. */ +private class HttpURLOpenMethod extends Method { + HttpURLOpenMethod() { + this.getDeclaringType() instanceof TypeUrl and + this.getName() = "openConnection" + } +} + +/** Constructor of `ApacheHttpRequest` */ +private predicate apacheHttpRequestStep(DataFlow::Node node1, DataFlow::Node node2) { + exists(ConstructorCall cc | + cc.getConstructedType() instanceof ApacheHttpRequest and + node2.asExpr() = cc and + cc.getAnArgument() = node1.asExpr() + ) +} + +/** `URI` methods */ +private predicate createUriStep(DataFlow::Node node1, DataFlow::Node node2) { + exists( + URIConstructor cc // new URI + | + node2.asExpr() = cc and + cc.getArgument(0) = node1.asExpr() + ) + or + exists( + StaticMethodAccess ma // URI.create + | + ma.getMethod().getDeclaringType() instanceof TypeUri and + ma.getMethod().hasName("create") and + node1.asExpr() = ma.getArgument(0) and + node2.asExpr() = ma + ) +} + +/** Constructors of `URL` */ +private predicate createUrlStep(DataFlow::Node node1, DataFlow::Node node2) { + exists(URLConstructor cc | + node2.asExpr() = cc and + cc.getArgument(0) = node1.asExpr() + ) +} + +/** Method call of `HttpURLOpenMethod` */ +private predicate urlOpenStep(DataFlow::Node node1, DataFlow::Node node2) { + exists(MethodAccess ma | + ma.getMethod() instanceof HttpURLOpenMethod and + node1.asExpr() = ma.getQualifier() and + ma = node2.asExpr() + ) +} + +/** Constructor of `BasicRequestLine` */ +private predicate basicRequestLineStep(DataFlow::Node node1, DataFlow::Node node2) { + exists(ConstructorCall mcc | + mcc.getConstructedType().hasQualifiedName("org.apache.http.message", "BasicRequestLine") and + mcc.getArgument(1) = node1.asExpr() and // BasicRequestLine(String method, String uri, ProtocolVersion version) + node2.asExpr() = mcc + ) +} diff --git a/java/ql/test/query-tests/security/CWE-522/InsecureBasicAuth.expected b/java/ql/test/query-tests/security/CWE-522/InsecureBasicAuth.expected index 780634b174b..44b3e0f6280 100644 --- a/java/ql/test/query-tests/security/CWE-522/InsecureBasicAuth.expected +++ b/java/ql/test/query-tests/security/CWE-522/InsecureBasicAuth.expected @@ -52,12 +52,12 @@ nodes | InsecureBasicAuth.java:149:3:149:6 | conn | semmle.label | conn | subpaths #select -| InsecureBasicAuth.java:28:3:28:6 | post | InsecureBasicAuth.java:20:39:20:52 | ... + ... : String | InsecureBasicAuth.java:28:3:28:6 | post | Insecure basic authentication from $@. | InsecureBasicAuth.java:20:39:20:52 | ... + ... | HTTP url | -| InsecureBasicAuth.java:38:3:38:5 | get | InsecureBasicAuth.java:35:19:35:64 | "http://www.example.com:8000/payment/retrieve" : String | InsecureBasicAuth.java:38:3:38:5 | get | Insecure basic authentication from $@. | InsecureBasicAuth.java:35:19:35:64 | "http://www.example.com:8000/payment/retrieve" | HTTP url | -| InsecureBasicAuth.java:54:3:54:6 | post | InsecureBasicAuth.java:45:19:45:68 | "http://www.example.com/rest/getuser.do?uid=abcdx" : String | InsecureBasicAuth.java:54:3:54:6 | post | Insecure basic authentication from $@. | InsecureBasicAuth.java:45:19:45:68 | "http://www.example.com/rest/getuser.do?uid=abcdx" | HTTP url | -| InsecureBasicAuth.java:71:3:71:6 | post | InsecureBasicAuth.java:61:19:61:68 | "http://www.example.com/rest/getuser.do?uid=abcdx" : String | InsecureBasicAuth.java:71:3:71:6 | post | Insecure basic authentication from $@. | InsecureBasicAuth.java:61:19:61:68 | "http://www.example.com/rest/getuser.do?uid=abcdx" | HTTP url | -| InsecureBasicAuth.java:86:3:86:6 | post | InsecureBasicAuth.java:78:47:78:52 | "http" : String | InsecureBasicAuth.java:86:3:86:6 | post | Insecure basic authentication from $@. | InsecureBasicAuth.java:78:47:78:52 | "http" | HTTP url | -| InsecureBasicAuth.java:102:3:102:6 | post | InsecureBasicAuth.java:93:19:93:68 | "http://www.example.com/rest/getuser.do?uid=abcdx" : String | InsecureBasicAuth.java:102:3:102:6 | post | Insecure basic authentication from $@. | InsecureBasicAuth.java:93:19:93:68 | "http://www.example.com/rest/getuser.do?uid=abcdx" | HTTP url | -| InsecureBasicAuth.java:119:3:119:6 | post | InsecureBasicAuth.java:109:19:109:68 | "http://www.example.com/rest/getuser.do?uid=abcdx" : String | InsecureBasicAuth.java:119:3:119:6 | post | Insecure basic authentication from $@. | InsecureBasicAuth.java:109:19:109:68 | "http://www.example.com/rest/getuser.do?uid=abcdx" | HTTP url | -| InsecureBasicAuth.java:133:3:133:6 | conn | InsecureBasicAuth.java:126:19:126:68 | "http://www.example.com/rest/getuser.do?uid=abcdx" : String | InsecureBasicAuth.java:133:3:133:6 | conn | Insecure basic authentication from $@. | InsecureBasicAuth.java:126:19:126:68 | "http://www.example.com/rest/getuser.do?uid=abcdx" | HTTP url | -| InsecureBasicAuth.java:149:3:149:6 | conn | InsecureBasicAuth.java:145:21:145:28 | protocol : String | InsecureBasicAuth.java:149:3:149:6 | conn | Insecure basic authentication from $@. | InsecureBasicAuth.java:145:21:145:28 | protocol | HTTP url | +| InsecureBasicAuth.java:28:3:28:6 | post | InsecureBasicAuth.java:20:39:20:52 | ... + ... : String | InsecureBasicAuth.java:28:3:28:6 | post | Insecure basic authentication from $@. | InsecureBasicAuth.java:20:39:20:52 | ... + ... | HTTP URL | +| InsecureBasicAuth.java:38:3:38:5 | get | InsecureBasicAuth.java:35:19:35:64 | "http://www.example.com:8000/payment/retrieve" : String | InsecureBasicAuth.java:38:3:38:5 | get | Insecure basic authentication from $@. | InsecureBasicAuth.java:35:19:35:64 | "http://www.example.com:8000/payment/retrieve" | HTTP URL | +| InsecureBasicAuth.java:54:3:54:6 | post | InsecureBasicAuth.java:45:19:45:68 | "http://www.example.com/rest/getuser.do?uid=abcdx" : String | InsecureBasicAuth.java:54:3:54:6 | post | Insecure basic authentication from $@. | InsecureBasicAuth.java:45:19:45:68 | "http://www.example.com/rest/getuser.do?uid=abcdx" | HTTP URL | +| InsecureBasicAuth.java:71:3:71:6 | post | InsecureBasicAuth.java:61:19:61:68 | "http://www.example.com/rest/getuser.do?uid=abcdx" : String | InsecureBasicAuth.java:71:3:71:6 | post | Insecure basic authentication from $@. | InsecureBasicAuth.java:61:19:61:68 | "http://www.example.com/rest/getuser.do?uid=abcdx" | HTTP URL | +| InsecureBasicAuth.java:86:3:86:6 | post | InsecureBasicAuth.java:78:47:78:52 | "http" : String | InsecureBasicAuth.java:86:3:86:6 | post | Insecure basic authentication from $@. | InsecureBasicAuth.java:78:47:78:52 | "http" | HTTP URL | +| InsecureBasicAuth.java:102:3:102:6 | post | InsecureBasicAuth.java:93:19:93:68 | "http://www.example.com/rest/getuser.do?uid=abcdx" : String | InsecureBasicAuth.java:102:3:102:6 | post | Insecure basic authentication from $@. | InsecureBasicAuth.java:93:19:93:68 | "http://www.example.com/rest/getuser.do?uid=abcdx" | HTTP URL | +| InsecureBasicAuth.java:119:3:119:6 | post | InsecureBasicAuth.java:109:19:109:68 | "http://www.example.com/rest/getuser.do?uid=abcdx" : String | InsecureBasicAuth.java:119:3:119:6 | post | Insecure basic authentication from $@. | InsecureBasicAuth.java:109:19:109:68 | "http://www.example.com/rest/getuser.do?uid=abcdx" | HTTP URL | +| InsecureBasicAuth.java:133:3:133:6 | conn | InsecureBasicAuth.java:126:19:126:68 | "http://www.example.com/rest/getuser.do?uid=abcdx" : String | InsecureBasicAuth.java:133:3:133:6 | conn | Insecure basic authentication from $@. | InsecureBasicAuth.java:126:19:126:68 | "http://www.example.com/rest/getuser.do?uid=abcdx" | HTTP URL | +| InsecureBasicAuth.java:149:3:149:6 | conn | InsecureBasicAuth.java:145:21:145:28 | protocol : String | InsecureBasicAuth.java:149:3:149:6 | conn | Insecure basic authentication from $@. | InsecureBasicAuth.java:145:21:145:28 | protocol | HTTP URL | From 148443fae1d42eed8f67126e7c80deb7bca5831e Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Tue, 1 Jun 2021 11:57:44 +0200 Subject: [PATCH 420/741] Use InlineExpectationsTest --- .../CWE-522/InsecureBasicAuth.expected | 63 ------------------- .../security/CWE-522/InsecureBasicAuth.qlref | 1 - .../CWE-522/InsecureBasicAuthTest.expected | 0 ...icAuth.java => InsecureBasicAuthTest.java} | 55 +++++++++------- .../security/CWE-522/InsecureBasicAuthTest.ql | 32 ++++++++++ 5 files changed, 63 insertions(+), 88 deletions(-) delete mode 100644 java/ql/test/query-tests/security/CWE-522/InsecureBasicAuth.expected delete mode 100644 java/ql/test/query-tests/security/CWE-522/InsecureBasicAuth.qlref create mode 100644 java/ql/test/query-tests/security/CWE-522/InsecureBasicAuthTest.expected rename java/ql/test/query-tests/security/CWE-522/{InsecureBasicAuth.java => InsecureBasicAuthTest.java} (81%) create mode 100644 java/ql/test/query-tests/security/CWE-522/InsecureBasicAuthTest.ql diff --git a/java/ql/test/query-tests/security/CWE-522/InsecureBasicAuth.expected b/java/ql/test/query-tests/security/CWE-522/InsecureBasicAuth.expected deleted file mode 100644 index 44b3e0f6280..00000000000 --- a/java/ql/test/query-tests/security/CWE-522/InsecureBasicAuth.expected +++ /dev/null @@ -1,63 +0,0 @@ -edges -| InsecureBasicAuth.java:20:39:20:52 | ... + ... : String | InsecureBasicAuth.java:28:3:28:6 | post | -| InsecureBasicAuth.java:35:19:35:64 | "http://www.example.com:8000/payment/retrieve" : String | InsecureBasicAuth.java:38:3:38:5 | get | -| InsecureBasicAuth.java:45:19:45:68 | "http://www.example.com/rest/getuser.do?uid=abcdx" : String | InsecureBasicAuth.java:46:50:46:55 | uriStr : String | -| InsecureBasicAuth.java:45:19:45:68 | "http://www.example.com/rest/getuser.do?uid=abcdx" : String | InsecureBasicAuth.java:54:3:54:6 | post | -| InsecureBasicAuth.java:46:39:46:56 | create(...) : URI | InsecureBasicAuth.java:54:3:54:6 | post | -| InsecureBasicAuth.java:46:50:46:55 | uriStr : String | InsecureBasicAuth.java:46:39:46:56 | create(...) : URI | -| InsecureBasicAuth.java:61:19:61:68 | "http://www.example.com/rest/getuser.do?uid=abcdx" : String | InsecureBasicAuth.java:62:21:62:26 | uriStr : String | -| InsecureBasicAuth.java:61:19:61:68 | "http://www.example.com/rest/getuser.do?uid=abcdx" : String | InsecureBasicAuth.java:71:3:71:6 | post | -| InsecureBasicAuth.java:62:13:62:27 | new URI(...) : URI | InsecureBasicAuth.java:71:3:71:6 | post | -| InsecureBasicAuth.java:62:21:62:26 | uriStr : String | InsecureBasicAuth.java:62:13:62:27 | new URI(...) : URI | -| InsecureBasicAuth.java:78:47:78:52 | "http" : String | InsecureBasicAuth.java:86:3:86:6 | post | -| InsecureBasicAuth.java:93:19:93:68 | "http://www.example.com/rest/getuser.do?uid=abcdx" : String | InsecureBasicAuth.java:102:3:102:6 | post | -| InsecureBasicAuth.java:109:19:109:68 | "http://www.example.com/rest/getuser.do?uid=abcdx" : String | InsecureBasicAuth.java:110:58:110:63 | uriStr : String | -| InsecureBasicAuth.java:110:29:110:70 | new BasicRequestLine(...) : BasicRequestLine | InsecureBasicAuth.java:119:3:119:6 | post | -| InsecureBasicAuth.java:110:58:110:63 | uriStr : String | InsecureBasicAuth.java:110:29:110:70 | new BasicRequestLine(...) : BasicRequestLine | -| InsecureBasicAuth.java:126:19:126:68 | "http://www.example.com/rest/getuser.do?uid=abcdx" : String | InsecureBasicAuth.java:129:21:129:26 | urlStr : String | -| InsecureBasicAuth.java:126:19:126:68 | "http://www.example.com/rest/getuser.do?uid=abcdx" : String | InsecureBasicAuth.java:130:28:130:67 | (...)... : URLConnection | -| InsecureBasicAuth.java:129:13:129:27 | new URL(...) : URL | InsecureBasicAuth.java:130:28:130:67 | (...)... : URLConnection | -| InsecureBasicAuth.java:129:21:129:26 | urlStr : String | InsecureBasicAuth.java:129:13:129:27 | new URL(...) : URL | -| InsecureBasicAuth.java:130:28:130:67 | (...)... : URLConnection | InsecureBasicAuth.java:133:3:133:6 | conn | -| InsecureBasicAuth.java:145:21:145:28 | protocol : String | InsecureBasicAuth.java:146:28:146:67 | (...)... : URLConnection | -| InsecureBasicAuth.java:146:28:146:67 | (...)... : URLConnection | InsecureBasicAuth.java:149:3:149:6 | conn | -nodes -| InsecureBasicAuth.java:20:39:20:52 | ... + ... : String | semmle.label | ... + ... : String | -| InsecureBasicAuth.java:28:3:28:6 | post | semmle.label | post | -| InsecureBasicAuth.java:35:19:35:64 | "http://www.example.com:8000/payment/retrieve" : String | semmle.label | "http://www.example.com:8000/payment/retrieve" : String | -| InsecureBasicAuth.java:38:3:38:5 | get | semmle.label | get | -| InsecureBasicAuth.java:45:19:45:68 | "http://www.example.com/rest/getuser.do?uid=abcdx" : String | semmle.label | "http://www.example.com/rest/getuser.do?uid=abcdx" : String | -| InsecureBasicAuth.java:46:39:46:56 | create(...) : URI | semmle.label | create(...) : URI | -| InsecureBasicAuth.java:46:50:46:55 | uriStr : String | semmle.label | uriStr : String | -| InsecureBasicAuth.java:54:3:54:6 | post | semmle.label | post | -| InsecureBasicAuth.java:61:19:61:68 | "http://www.example.com/rest/getuser.do?uid=abcdx" : String | semmle.label | "http://www.example.com/rest/getuser.do?uid=abcdx" : String | -| InsecureBasicAuth.java:62:13:62:27 | new URI(...) : URI | semmle.label | new URI(...) : URI | -| InsecureBasicAuth.java:62:21:62:26 | uriStr : String | semmle.label | uriStr : String | -| InsecureBasicAuth.java:71:3:71:6 | post | semmle.label | post | -| InsecureBasicAuth.java:78:47:78:52 | "http" : String | semmle.label | "http" : String | -| InsecureBasicAuth.java:86:3:86:6 | post | semmle.label | post | -| InsecureBasicAuth.java:93:19:93:68 | "http://www.example.com/rest/getuser.do?uid=abcdx" : String | semmle.label | "http://www.example.com/rest/getuser.do?uid=abcdx" : String | -| InsecureBasicAuth.java:102:3:102:6 | post | semmle.label | post | -| InsecureBasicAuth.java:109:19:109:68 | "http://www.example.com/rest/getuser.do?uid=abcdx" : String | semmle.label | "http://www.example.com/rest/getuser.do?uid=abcdx" : String | -| InsecureBasicAuth.java:110:29:110:70 | new BasicRequestLine(...) : BasicRequestLine | semmle.label | new BasicRequestLine(...) : BasicRequestLine | -| InsecureBasicAuth.java:110:58:110:63 | uriStr : String | semmle.label | uriStr : String | -| InsecureBasicAuth.java:119:3:119:6 | post | semmle.label | post | -| InsecureBasicAuth.java:126:19:126:68 | "http://www.example.com/rest/getuser.do?uid=abcdx" : String | semmle.label | "http://www.example.com/rest/getuser.do?uid=abcdx" : String | -| InsecureBasicAuth.java:129:13:129:27 | new URL(...) : URL | semmle.label | new URL(...) : URL | -| InsecureBasicAuth.java:129:21:129:26 | urlStr : String | semmle.label | urlStr : String | -| InsecureBasicAuth.java:130:28:130:67 | (...)... : URLConnection | semmle.label | (...)... : URLConnection | -| InsecureBasicAuth.java:133:3:133:6 | conn | semmle.label | conn | -| InsecureBasicAuth.java:145:21:145:28 | protocol : String | semmle.label | protocol : String | -| InsecureBasicAuth.java:146:28:146:67 | (...)... : URLConnection | semmle.label | (...)... : URLConnection | -| InsecureBasicAuth.java:149:3:149:6 | conn | semmle.label | conn | -subpaths -#select -| InsecureBasicAuth.java:28:3:28:6 | post | InsecureBasicAuth.java:20:39:20:52 | ... + ... : String | InsecureBasicAuth.java:28:3:28:6 | post | Insecure basic authentication from $@. | InsecureBasicAuth.java:20:39:20:52 | ... + ... | HTTP URL | -| InsecureBasicAuth.java:38:3:38:5 | get | InsecureBasicAuth.java:35:19:35:64 | "http://www.example.com:8000/payment/retrieve" : String | InsecureBasicAuth.java:38:3:38:5 | get | Insecure basic authentication from $@. | InsecureBasicAuth.java:35:19:35:64 | "http://www.example.com:8000/payment/retrieve" | HTTP URL | -| InsecureBasicAuth.java:54:3:54:6 | post | InsecureBasicAuth.java:45:19:45:68 | "http://www.example.com/rest/getuser.do?uid=abcdx" : String | InsecureBasicAuth.java:54:3:54:6 | post | Insecure basic authentication from $@. | InsecureBasicAuth.java:45:19:45:68 | "http://www.example.com/rest/getuser.do?uid=abcdx" | HTTP URL | -| InsecureBasicAuth.java:71:3:71:6 | post | InsecureBasicAuth.java:61:19:61:68 | "http://www.example.com/rest/getuser.do?uid=abcdx" : String | InsecureBasicAuth.java:71:3:71:6 | post | Insecure basic authentication from $@. | InsecureBasicAuth.java:61:19:61:68 | "http://www.example.com/rest/getuser.do?uid=abcdx" | HTTP URL | -| InsecureBasicAuth.java:86:3:86:6 | post | InsecureBasicAuth.java:78:47:78:52 | "http" : String | InsecureBasicAuth.java:86:3:86:6 | post | Insecure basic authentication from $@. | InsecureBasicAuth.java:78:47:78:52 | "http" | HTTP URL | -| InsecureBasicAuth.java:102:3:102:6 | post | InsecureBasicAuth.java:93:19:93:68 | "http://www.example.com/rest/getuser.do?uid=abcdx" : String | InsecureBasicAuth.java:102:3:102:6 | post | Insecure basic authentication from $@. | InsecureBasicAuth.java:93:19:93:68 | "http://www.example.com/rest/getuser.do?uid=abcdx" | HTTP URL | -| InsecureBasicAuth.java:119:3:119:6 | post | InsecureBasicAuth.java:109:19:109:68 | "http://www.example.com/rest/getuser.do?uid=abcdx" : String | InsecureBasicAuth.java:119:3:119:6 | post | Insecure basic authentication from $@. | InsecureBasicAuth.java:109:19:109:68 | "http://www.example.com/rest/getuser.do?uid=abcdx" | HTTP URL | -| InsecureBasicAuth.java:133:3:133:6 | conn | InsecureBasicAuth.java:126:19:126:68 | "http://www.example.com/rest/getuser.do?uid=abcdx" : String | InsecureBasicAuth.java:133:3:133:6 | conn | Insecure basic authentication from $@. | InsecureBasicAuth.java:126:19:126:68 | "http://www.example.com/rest/getuser.do?uid=abcdx" | HTTP URL | -| InsecureBasicAuth.java:149:3:149:6 | conn | InsecureBasicAuth.java:145:21:145:28 | protocol : String | InsecureBasicAuth.java:149:3:149:6 | conn | Insecure basic authentication from $@. | InsecureBasicAuth.java:145:21:145:28 | protocol | HTTP URL | diff --git a/java/ql/test/query-tests/security/CWE-522/InsecureBasicAuth.qlref b/java/ql/test/query-tests/security/CWE-522/InsecureBasicAuth.qlref deleted file mode 100644 index d3c297f7f71..00000000000 --- a/java/ql/test/query-tests/security/CWE-522/InsecureBasicAuth.qlref +++ /dev/null @@ -1 +0,0 @@ -Security/CWE/CWE-522/InsecureBasicAuth.ql diff --git a/java/ql/test/query-tests/security/CWE-522/InsecureBasicAuthTest.expected b/java/ql/test/query-tests/security/CWE-522/InsecureBasicAuthTest.expected new file mode 100644 index 00000000000..e69de29bb2d diff --git a/java/ql/test/query-tests/security/CWE-522/InsecureBasicAuth.java b/java/ql/test/query-tests/security/CWE-522/InsecureBasicAuthTest.java similarity index 81% rename from java/ql/test/query-tests/security/CWE-522/InsecureBasicAuth.java rename to java/ql/test/query-tests/security/CWE-522/InsecureBasicAuthTest.java index c59af48e09b..249112dd266 100644 --- a/java/ql/test/query-tests/security/CWE-522/InsecureBasicAuth.java +++ b/java/ql/test/query-tests/security/CWE-522/InsecureBasicAuthTest.java @@ -11,21 +11,21 @@ import java.net.HttpURLConnection; import java.net.URLConnection; import java.util.Base64; -public class InsecureBasicAuth { +public class InsecureBasicAuthTest { /** * Test basic authentication with Apache HTTP POST request using string constructor. */ public void testApacheHttpRequest(String username, String password) { String host = "www.example.com"; - HttpRequestBase post = new HttpPost("http://"+host+"/rest/getuser.do?uid=abcdx"); + HttpRequestBase post = new HttpPost("http://" + host + "/rest/getuser.do?uid=abcdx"); post.setHeader("Accept", "application/json"); post.setHeader("Content-type", "application/json"); - + String authString = username + ":" + password; byte[] authEncBytes = Base64.getEncoder().encode(authString.getBytes()); String authStringEnc = new String(authEncBytes); - post.addHeader("Authorization", "Basic " + authStringEnc); + post.addHeader("Authorization", "Basic " + authStringEnc); // $hasInsecureBasicAuth } /** @@ -35,7 +35,8 @@ public class InsecureBasicAuth { String urlStr = "http://www.example.com:8000/payment/retrieve"; HttpGet get = new HttpGet(urlStr); get.setHeader("Accept", "application/json"); - get.setHeader("Authorization", "Basic " + new String(Base64.getEncoder().encode("admin:test".getBytes()))); + get.setHeader("Authorization", // $hasInsecureBasicAuth + "Basic " + new String(Base64.getEncoder().encode("admin:test".getBytes()))); } /** @@ -46,16 +47,17 @@ public class InsecureBasicAuth { HttpRequestBase post = new HttpPost(URI.create(uriStr)); post.setHeader("Accept", "application/json"); post.setHeader("Content-type", "application/json"); - + String authString = username + ":" + password; byte[] authEncBytes = Base64.getEncoder().encode(authString.getBytes()); String authStringEnc = new String(authEncBytes); - post.addHeader("Authorization", "Basic " + authStringEnc); + post.addHeader("Authorization", "Basic " + authStringEnc); // $hasInsecureBasicAuth } /** - * Test basic authentication with Apache HTTP POST request using the URI constructor with one argument. + * Test basic authentication with Apache HTTP POST request using the URI constructor with one + * argument. */ public void testApacheHttpRequest4(String username, String password) throws Exception { String uriStr = "http://www.example.com/rest/getuser.do?uid=abcdx"; @@ -63,27 +65,29 @@ public class InsecureBasicAuth { HttpRequestBase post = new HttpPost(uri); post.setHeader("Accept", "application/json"); post.setHeader("Content-type", "application/json"); - + String authString = username + ":" + password; byte[] authEncBytes = Base64.getEncoder().encode(authString.getBytes()); String authStringEnc = new String(authEncBytes); - post.addHeader("Authorization", "Basic " + authStringEnc); + post.addHeader("Authorization", "Basic " + authStringEnc); // $hasInsecureBasicAuth } /** - * Test basic authentication with Apache HTTP POST request using a URI constructor with multiple arguments. + * Test basic authentication with Apache HTTP POST request using a URI constructor with multiple + * arguments. */ public void testApacheHttpRequest5(String username, String password) throws Exception { - HttpRequestBase post = new HttpPost(new URI("http", "www.example.com", "/test", "abc=123", null)); + HttpRequestBase post = + new HttpPost(new URI("http", "www.example.com", "/test", "abc=123", null)); post.setHeader("Accept", "application/json"); post.setHeader("Content-type", "application/json"); - + String authString = username + ":" + password; byte[] authEncBytes = Base64.getEncoder().encode(authString.getBytes()); String authStringEnc = new String(authEncBytes); - post.addHeader("Authorization", "Basic " + authStringEnc); + post.addHeader("Authorization", "Basic " + authStringEnc); // $hasInsecureBasicAuth } /** @@ -94,12 +98,12 @@ public class InsecureBasicAuth { BasicHttpRequest post = new BasicHttpRequest("POST", uriStr); post.setHeader("Accept", "application/json"); post.setHeader("Content-type", "application/json"); - + String authString = username + ":" + password; byte[] authEncBytes = Base64.getEncoder().encode(authString.getBytes()); String authStringEnc = new String(authEncBytes); - post.addHeader("Authorization", "Basic " + authStringEnc); + post.addHeader("Authorization", "Basic " + authStringEnc); // $hasInsecureBasicAuth } /** @@ -111,16 +115,17 @@ public class InsecureBasicAuth { BasicHttpRequest post = new BasicHttpRequest(requestLine); post.setHeader("Accept", "application/json"); post.setHeader("Content-type", "application/json"); - + String authString = username + ":" + password; byte[] authEncBytes = Base64.getEncoder().encode(authString.getBytes()); String authStringEnc = new String(authEncBytes); - post.addHeader("Authorization", "Basic " + authStringEnc); + post.addHeader("Authorization", "Basic " + authStringEnc); // $hasInsecureBasicAuth } /** - * Test basic authentication with Java HTTP URL connection using the `URL(String spec)` constructor. + * Test basic authentication with Java HTTP URL connection using the `URL(String spec)` + * constructor. */ public void testHttpUrlConnection(String username, String password) throws Exception { String urlStr = "http://www.example.com/rest/getuser.do?uid=abcdx"; @@ -130,11 +135,12 @@ public class InsecureBasicAuth { HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("POST"); conn.setDoOutput(true); - conn.setRequestProperty("Authorization", "Basic " + encoding); + conn.setRequestProperty("Authorization", "Basic " + encoding); // $hasInsecureBasicAuth } /** - * Test basic authentication with Java HTTP URL connection using the `URL(String protocol, String host, String file)` constructor. + * Test basic authentication with Java HTTP URL connection using the `URL(String protocol, + * String host, String file)` constructor. */ public void testHttpUrlConnection2(String username, String password) throws Exception { String host = "www.example.com"; @@ -146,7 +152,7 @@ public class InsecureBasicAuth { HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("POST"); conn.setDoOutput(true); - conn.setRequestProperty("Authorization", "Basic " + encoding); + conn.setRequestProperty("Authorization", "Basic " + encoding); // $hasInsecureBasicAuth } /** @@ -156,9 +162,10 @@ public class InsecureBasicAuth { String host = "LOCALHOST"; String authString = username + ":" + password; String encoding = Base64.getEncoder().encodeToString(authString.getBytes("UTF-8")); - HttpURLConnection conn = (HttpURLConnection) new URL("http://"+(((host+"/rest/getuser.do")+"?uid=abcdx"))).openConnection(); + HttpURLConnection conn = (HttpURLConnection) new URL( + "http://" + (((host + "/rest/getuser.do") + "?uid=abcdx"))).openConnection(); conn.setRequestMethod("POST"); conn.setDoOutput(true); - conn.setRequestProperty("Authorization", "Basic " + encoding); + conn.setRequestProperty("Authorization", "Basic " + encoding); // Safe } } diff --git a/java/ql/test/query-tests/security/CWE-522/InsecureBasicAuthTest.ql b/java/ql/test/query-tests/security/CWE-522/InsecureBasicAuthTest.ql new file mode 100644 index 00000000000..5759eee855f --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-522/InsecureBasicAuthTest.ql @@ -0,0 +1,32 @@ +import java +import semmle.code.java.dataflow.TaintTracking +import semmle.code.java.dataflow.FlowSources +import semmle.code.java.security.InsecureBasicAuth +import TestUtilities.InlineExpectationsTest + +class Conf extends TaintTracking::Configuration { + Conf() { this = "test:cwe:insecure-basic-auth" } + + override predicate isSource(DataFlow::Node src) { src instanceof InsecureBasicAuthSource } + + override predicate isSink(DataFlow::Node sink) { sink instanceof InsecureBasicAuthSink } + + override predicate isAdditionalTaintStep(DataFlow::Node node1, DataFlow::Node node2) { + any(InsecureBasicAuthAdditionalTaintStep c).step(node1, node2) + } +} + +class HasInsecureBasicAuthTest extends InlineExpectationsTest { + HasInsecureBasicAuthTest() { this = "HasInsecureBasicAuthTest" } + + override string getARelevantTag() { result = "hasInsecureBasicAuth" } + + override predicate hasActualResult(Location location, string element, string tag, string value) { + tag = "hasInsecureBasicAuth" and + exists(DataFlow::Node src, DataFlow::Node sink, Conf conf | conf.hasFlow(src, sink) | + sink.getLocation() = location and + element = sink.toString() and + value = "" + ) + } +} From 49c6a56f97c52e5a27d90417cfab4d013b384ce6 Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Tue, 1 Jun 2021 14:52:59 +0200 Subject: [PATCH 421/741] Add change note --- java/change-notes/2021-06-01-insecure-basic-auth-query.md | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 java/change-notes/2021-06-01-insecure-basic-auth-query.md diff --git a/java/change-notes/2021-06-01-insecure-basic-auth-query.md b/java/change-notes/2021-06-01-insecure-basic-auth-query.md new file mode 100644 index 00000000000..e0c30d92f04 --- /dev/null +++ b/java/change-notes/2021-06-01-insecure-basic-auth-query.md @@ -0,0 +1,2 @@ +lgtm,codescanning +* The query "Insecure basic authentication" (`java/insecure-basic-auth`) has been promoted from experimental to the main query pack. Its results will now appear by default. This query was originally [submitted as an experimental query by @luchua-bc](https://github.com/github/codeql/pull/3976) \ No newline at end of file From 90df3fa94cf9d859ef88332c717b84a0bb3c31c1 Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Thu, 3 Jun 2021 10:28:18 +0200 Subject: [PATCH 422/741] Remove CWE reference from qlhelp since it's obtained from metadata --- java/ql/src/Security/CWE/CWE-522/InsecureBasicAuth.qhelp | 3 --- 1 file changed, 3 deletions(-) diff --git a/java/ql/src/Security/CWE/CWE-522/InsecureBasicAuth.qhelp b/java/ql/src/Security/CWE/CWE-522/InsecureBasicAuth.qhelp index f72d0dc0b85..fedce26842b 100644 --- a/java/ql/src/Security/CWE/CWE-522/InsecureBasicAuth.qhelp +++ b/java/ql/src/Security/CWE/CWE-522/InsecureBasicAuth.qhelp @@ -15,9 +15,6 @@ -
  • - CWE-522 -
  • SonarSource rule: Basic authentication should not be used From 30178d4f23dfcd5ef452620e383668c9b3cda979 Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Tue, 20 Jul 2021 11:05:28 +0200 Subject: [PATCH 423/741] Decouple InsecureBasicAuth.qll to reuse the taint tracking configuration --- .../Security/CWE/CWE-522/InsecureBasicAuth.ql | 15 +------------ .../code/java/security/InsecureBasicAuth.qll | 2 +- .../java/security/InsecureBasicAuthQuery.qll | 21 +++++++++++++++++++ .../security/CWE-522/InsecureBasicAuthTest.ql | 20 ++++-------------- 4 files changed, 27 insertions(+), 31 deletions(-) create mode 100644 java/ql/src/semmle/code/java/security/InsecureBasicAuthQuery.qll diff --git a/java/ql/src/Security/CWE/CWE-522/InsecureBasicAuth.ql b/java/ql/src/Security/CWE/CWE-522/InsecureBasicAuth.ql index 5d9eae211e7..ba68865c4e2 100644 --- a/java/ql/src/Security/CWE/CWE-522/InsecureBasicAuth.ql +++ b/java/ql/src/Security/CWE/CWE-522/InsecureBasicAuth.ql @@ -14,22 +14,9 @@ */ import java -import semmle.code.java.dataflow.TaintTracking -import semmle.code.java.security.InsecureBasicAuth +import semmle.code.java.security.InsecureBasicAuthQuery import DataFlow::PathGraph -class BasicAuthFlowConfig extends TaintTracking::Configuration { - BasicAuthFlowConfig() { this = "InsecureBasicAuth::BasicAuthFlowConfig" } - - override predicate isSource(DataFlow::Node src) { src instanceof InsecureBasicAuthSource } - - override predicate isSink(DataFlow::Node sink) { sink instanceof InsecureBasicAuthSink } - - override predicate isAdditionalTaintStep(DataFlow::Node node1, DataFlow::Node node2) { - any(InsecureBasicAuthAdditionalTaintStep c).step(node1, node2) - } -} - from DataFlow::PathNode source, DataFlow::PathNode sink, BasicAuthFlowConfig config where config.hasFlowPath(source, sink) select sink.getNode(), source, sink, "Insecure basic authentication from $@.", source.getNode(), diff --git a/java/ql/src/semmle/code/java/security/InsecureBasicAuth.qll b/java/ql/src/semmle/code/java/security/InsecureBasicAuth.qll index cd211fc8875..6814c69fd0b 100644 --- a/java/ql/src/semmle/code/java/security/InsecureBasicAuth.qll +++ b/java/ql/src/semmle/code/java/security/InsecureBasicAuth.qll @@ -30,7 +30,7 @@ private class DefaultInsecureBasicAuthSource extends InsecureBasicAuthSource { } /** - * A sink that represents a method that set Basic Authentication. + * A sink that represents a method that sets Basic Authentication. * Extend this class to add your own Insecure Basic Authentication sinks. */ abstract class InsecureBasicAuthSink extends DataFlow::Node { } diff --git a/java/ql/src/semmle/code/java/security/InsecureBasicAuthQuery.qll b/java/ql/src/semmle/code/java/security/InsecureBasicAuthQuery.qll new file mode 100644 index 00000000000..73804489cb9 --- /dev/null +++ b/java/ql/src/semmle/code/java/security/InsecureBasicAuthQuery.qll @@ -0,0 +1,21 @@ +/** Provides taint tracking configurations to be used in Insecure Basic Authentication queries. */ + +import java +import semmle.code.java.security.InsecureBasicAuth +import semmle.code.java.dataflow.TaintTracking + +/** + * A taint tracking configuration for the Basic authentication scheme + * being used in HTTP connections. + */ +class BasicAuthFlowConfig extends TaintTracking::Configuration { + BasicAuthFlowConfig() { this = "InsecureBasicAuth::BasicAuthFlowConfig" } + + override predicate isSource(DataFlow::Node src) { src instanceof InsecureBasicAuthSource } + + override predicate isSink(DataFlow::Node sink) { sink instanceof InsecureBasicAuthSink } + + override predicate isAdditionalTaintStep(DataFlow::Node node1, DataFlow::Node node2) { + any(InsecureBasicAuthAdditionalTaintStep c).step(node1, node2) + } +} diff --git a/java/ql/test/query-tests/security/CWE-522/InsecureBasicAuthTest.ql b/java/ql/test/query-tests/security/CWE-522/InsecureBasicAuthTest.ql index 5759eee855f..53064d42bd5 100644 --- a/java/ql/test/query-tests/security/CWE-522/InsecureBasicAuthTest.ql +++ b/java/ql/test/query-tests/security/CWE-522/InsecureBasicAuthTest.ql @@ -1,21 +1,7 @@ import java -import semmle.code.java.dataflow.TaintTracking -import semmle.code.java.dataflow.FlowSources -import semmle.code.java.security.InsecureBasicAuth +import semmle.code.java.security.InsecureBasicAuthQuery import TestUtilities.InlineExpectationsTest -class Conf extends TaintTracking::Configuration { - Conf() { this = "test:cwe:insecure-basic-auth" } - - override predicate isSource(DataFlow::Node src) { src instanceof InsecureBasicAuthSource } - - override predicate isSink(DataFlow::Node sink) { sink instanceof InsecureBasicAuthSink } - - override predicate isAdditionalTaintStep(DataFlow::Node node1, DataFlow::Node node2) { - any(InsecureBasicAuthAdditionalTaintStep c).step(node1, node2) - } -} - class HasInsecureBasicAuthTest extends InlineExpectationsTest { HasInsecureBasicAuthTest() { this = "HasInsecureBasicAuthTest" } @@ -23,7 +9,9 @@ class HasInsecureBasicAuthTest extends InlineExpectationsTest { override predicate hasActualResult(Location location, string element, string tag, string value) { tag = "hasInsecureBasicAuth" and - exists(DataFlow::Node src, DataFlow::Node sink, Conf conf | conf.hasFlow(src, sink) | + exists(DataFlow::Node src, DataFlow::Node sink, BasicAuthFlowConfig conf | + conf.hasFlow(src, sink) + | sink.getLocation() = location and element = sink.toString() and value = "" From e159351179dfe9aa480b592230791ce5781f7a78 Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Tue, 20 Jul 2021 15:07:23 +0200 Subject: [PATCH 424/741] Update java/change-notes/2021-06-01-insecure-basic-auth-query.md Co-authored-by: Anders Schack-Mulligen --- java/change-notes/2021-06-01-insecure-basic-auth-query.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/change-notes/2021-06-01-insecure-basic-auth-query.md b/java/change-notes/2021-06-01-insecure-basic-auth-query.md index e0c30d92f04..c61ba97845c 100644 --- a/java/change-notes/2021-06-01-insecure-basic-auth-query.md +++ b/java/change-notes/2021-06-01-insecure-basic-auth-query.md @@ -1,2 +1,2 @@ lgtm,codescanning -* The query "Insecure basic authentication" (`java/insecure-basic-auth`) has been promoted from experimental to the main query pack. Its results will now appear by default. This query was originally [submitted as an experimental query by @luchua-bc](https://github.com/github/codeql/pull/3976) \ No newline at end of file +* The query "Insecure basic authentication" (`java/insecure-basic-auth`) has been promoted from experimental to the main query pack. Its results will now appear by default. This query was originally [submitted as an experimental query by @luchua-bc](https://github.com/github/codeql/pull/3976). From e58b90ef1c670308976b6e901b202a4c4ab665a3 Mon Sep 17 00:00:00 2001 From: mc <42146119+mchammer01@users.noreply.github.com> Date: Tue, 27 Jul 2021 15:02:39 +0100 Subject: [PATCH 425/741] Added full stops --- java/ql/src/Security/CWE/CWE-522/InsecureBasicAuth.qhelp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/java/ql/src/Security/CWE/CWE-522/InsecureBasicAuth.qhelp b/java/ql/src/Security/CWE/CWE-522/InsecureBasicAuth.qhelp index fedce26842b..ebbb8eca7ba 100644 --- a/java/ql/src/Security/CWE/CWE-522/InsecureBasicAuth.qhelp +++ b/java/ql/src/Security/CWE/CWE-522/InsecureBasicAuth.qhelp @@ -17,11 +17,11 @@
  • SonarSource rule: - Basic authentication should not be used + Basic authentication should not be used.
  • Acunetix: - WEB VULNERABILITIES INDEX - Basic authentication over HTTP + WEB VULNERABILITIES INDEX - Basic authentication over HTTP.
  • From 0e7cbbfeb80c0dca2dee1f51bdbeabd36da73b8a Mon Sep 17 00:00:00 2001 From: mc <42146119+mchammer01@users.noreply.github.com> Date: Tue, 27 Jul 2021 15:09:07 +0100 Subject: [PATCH 426/741] Update InsecureBasicAuth.qhelp --- java/ql/src/Security/CWE/CWE-522/InsecureBasicAuth.qhelp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/ql/src/Security/CWE/CWE-522/InsecureBasicAuth.qhelp b/java/ql/src/Security/CWE/CWE-522/InsecureBasicAuth.qhelp index ebbb8eca7ba..2fcf534035e 100644 --- a/java/ql/src/Security/CWE/CWE-522/InsecureBasicAuth.qhelp +++ b/java/ql/src/Security/CWE/CWE-522/InsecureBasicAuth.qhelp @@ -2,7 +2,7 @@ -

    Basic authentication only obfuscates username/password in Base64 encoding, which can be easily recognized and reversed, thus it must not be transmitted over the cleartext HTTP channel. Transmission of sensitive information not in HTTPS is vulnerable to packet sniffing.

    +

    Basic authentication only obfuscates usernames and passwords in Base64 encoding, which can be easily recognized and reversed, thus it must not be transmitted over the cleartext HTTP channel. Transmission of sensitive information not in HTTPS is vulnerable to packet sniffing.

    From 023264660b7311428a8b4bb75cbd645ef326bd1d Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Thu, 29 Jul 2021 13:09:31 +0200 Subject: [PATCH 427/741] Suggestions from code review --- java/ql/src/Security/CWE/CWE-522/InsecureBasicAuth.qhelp | 2 +- java/ql/src/Security/CWE/CWE-522/InsecureBasicAuth.ql | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/java/ql/src/Security/CWE/CWE-522/InsecureBasicAuth.qhelp b/java/ql/src/Security/CWE/CWE-522/InsecureBasicAuth.qhelp index 2fcf534035e..9ddc82425cd 100644 --- a/java/ql/src/Security/CWE/CWE-522/InsecureBasicAuth.qhelp +++ b/java/ql/src/Security/CWE/CWE-522/InsecureBasicAuth.qhelp @@ -2,7 +2,7 @@ -

    Basic authentication only obfuscates usernames and passwords in Base64 encoding, which can be easily recognized and reversed, thus it must not be transmitted over the cleartext HTTP channel. Transmission of sensitive information not in HTTPS is vulnerable to packet sniffing.

    +

    Basic authentication only obfuscates usernames and passwords in Base64 encoding, which can be easily recognized and reversed, thus it must not be transmitted over the cleartext HTTP channel. Transmitting sensitive information without using HTTPS makes the data vulnerable to packet sniffing.

    diff --git a/java/ql/src/Security/CWE/CWE-522/InsecureBasicAuth.ql b/java/ql/src/Security/CWE/CWE-522/InsecureBasicAuth.ql index ba68865c4e2..6582101b04a 100644 --- a/java/ql/src/Security/CWE/CWE-522/InsecureBasicAuth.ql +++ b/java/ql/src/Security/CWE/CWE-522/InsecureBasicAuth.ql @@ -2,8 +2,8 @@ * @name Insecure basic authentication * @description Basic authentication only obfuscates username/password in * Base64 encoding, which can be easily recognized and reversed. - * Transmission of sensitive information not over HTTPS is - * vulnerable to packet sniffing. + * Transmitting sensitive information without using HTTPS makes + * the data vulnerable to packet sniffing. * @kind path-problem * @problem.severity warning * @precision medium From c3c73377b8a42e3aa6cfde289f4bdb47ad1bcc89 Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Wed, 15 Sep 2021 14:39:12 +0200 Subject: [PATCH 428/741] Fix scope issues in the Java example --- .../CWE/CWE-522/InsecureBasicAuth.java | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/java/ql/src/Security/CWE/CWE-522/InsecureBasicAuth.java b/java/ql/src/Security/CWE/CWE-522/InsecureBasicAuth.java index 1fedd6812be..d0cccd503e8 100644 --- a/java/ql/src/Security/CWE/CWE-522/InsecureBasicAuth.java +++ b/java/ql/src/Security/CWE/CWE-522/InsecureBasicAuth.java @@ -1,22 +1,19 @@ public class InsecureBasicAuth { /** * Test basic authentication with Apache HTTP request. - */ + */ public void testApacheHttpRequest(String username, String password) { - { + // BAD: basic authentication over HTTP String url = "http://www.example.com/rest/getuser.do?uid=abcdx"; - } - { // GOOD: basic authentication over HTTPS - String url = "https://www.example.com/rest/getuser.do?uid=abcdx"; - } + url = "https://www.example.com/rest/getuser.do?uid=abcdx"; HttpPost post = new HttpPost(url); post.setHeader("Accept", "application/json"); post.setHeader("Content-type", "application/json"); - + String authString = username + ":" + password; byte[] authEncBytes = Base64.getEncoder().encode(authString.getBytes()); String authStringEnc = new String(authEncBytes); @@ -28,15 +25,12 @@ public class InsecureBasicAuth { * Test basic authentication with Java HTTP URL connection. */ public void testHttpUrlConnection(String username, String password) { - { + // BAD: basic authentication over HTTP String urlStr = "http://www.example.com/rest/getuser.do?uid=abcdx"; - } - { // GOOD: basic authentication over HTTPS - String urlStr = "https://www.example.com/rest/getuser.do?uid=abcdx"; - } + urlStr = "https://www.example.com/rest/getuser.do?uid=abcdx"; String authString = username + ":" + password; String encoding = Base64.getEncoder().encodeToString(authString.getBytes("UTF-8")); From 2e08c5dd2b80c8cc6622501537bf12f51180c452 Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Wed, 15 Sep 2021 17:15:35 +0200 Subject: [PATCH 429/741] Refactored HttpsUrls.ql --- .../code/java/frameworks/Networking.qll | 19 +++- .../semmle/code/java/security/HttpsUrls.qll | 89 +++++++++++++++++++ .../code/java/security/HttpsUrlsQuery.qll | 25 ++++++ java/ql/src/Security/CWE/CWE-319/HttpsUrls.ql | 48 +--------- 4 files changed, 132 insertions(+), 49 deletions(-) create mode 100644 java/ql/lib/semmle/code/java/security/HttpsUrls.qll create mode 100644 java/ql/lib/semmle/code/java/security/HttpsUrlsQuery.qll diff --git a/java/ql/lib/semmle/code/java/frameworks/Networking.qll b/java/ql/lib/semmle/code/java/frameworks/Networking.qll index cad948ed2f4..10a1999b8b8 100644 --- a/java/ql/lib/semmle/code/java/frameworks/Networking.qll +++ b/java/ql/lib/semmle/code/java/frameworks/Networking.qll @@ -52,11 +52,20 @@ class UriCreation extends Call { /** * Gets the host argument of the newly created URI. In the case where the * host is specified separately, this is only the host. In the case where the - * uri is parsed from an input string, such as in + * URI is parsed from an input string, such as in * `URI("http://foo.com/mypath")`, this is the entire argument passed in, * that is `"http://foo.com/mypath"`. */ - Expr getHostArg() { none() } + abstract Expr getHostArg(); + + /** + * Gets the scheme argument of the newly created URI. In the case where the + * scheme is specified separately, this is only the scheme. In the case where the + * URI is parsed from an input string, such as in + * `URI("http://foo.com/mypath")`, this is the entire argument passed in, + * that is `"http://foo.com/mypath"`. + */ + abstract Expr getSchemeArg(); } /** A `java.net.URI` constructor call. */ @@ -74,6 +83,8 @@ class UriConstructorCall extends ClassInstanceExpr, UriCreation { // String fragment) result = this.getArgument(2) and this.getNumArgument() = 7 } + + override Expr getSchemeArg() { result = this.getArgument(0) } } /** A call to `java.net.URI::create`. */ @@ -81,6 +92,8 @@ class UriCreate extends UriCreation { UriCreate() { this.getCallee().hasName("create") } override Expr getHostArg() { result = this.getArgument(0) } + + override Expr getSchemeArg() { result = this.getArgument(0) } } /** A `java.net.URL` constructor call. */ @@ -105,7 +118,7 @@ class UrlConstructorCall extends ClassInstanceExpr { } /** Gets the argument that corresponds to the protocol of the URL. */ - Expr protocolArg() { + Expr getProtocolArg() { // In all cases except where the first parameter is a URL, the argument // containing the protocol is the first one, otherwise it is the second. if this.getConstructor().getParameterType(0) instanceof TypeUrl diff --git a/java/ql/lib/semmle/code/java/security/HttpsUrls.qll b/java/ql/lib/semmle/code/java/security/HttpsUrls.qll new file mode 100644 index 00000000000..f3ce2ac11a5 --- /dev/null +++ b/java/ql/lib/semmle/code/java/security/HttpsUrls.qll @@ -0,0 +1,89 @@ +import java +private import semmle.code.java.dataflow.DataFlow +private import semmle.code.java.dataflow.ExternalFlow +private import semmle.code.java.dataflow.TaintTracking +private import semmle.code.java.frameworks.ApacheHttp +private import semmle.code.java.frameworks.Networking + +/** + * String of HTTP URLs not in private domains. + */ +class HttpStringLiteral extends StringLiteral { + HttpStringLiteral() { + exists(string s | this.getRepresentedString() = s | + s = "http" + or + s.matches("http://%") and + not s.substring(7, s.length()) instanceof PrivateHostName and + not TaintTracking::localExprTaint(any(StringLiteral p | + p.getRepresentedString() instanceof PrivateHostName + ), this.getParent*()) + ) + } +} + +/** + * A sink that represents a URL opening method call, such as a call to `java.net.URL.openConnection()`. + */ +abstract class UrlOpenSink extends DataFlow::Node { } + +private class DefaultUrlOpenSink extends UrlOpenSink { + DefaultUrlOpenSink() { sinkNode(this, "open-url") } +} + +/** + * A unit class for adding additional taint steps. + * + * Extend this class to add additional taint steps that should apply + * to configurations working with HTTP URLs. + */ +class HttpUrlsAdditionalTaintStep extends Unit { + /** + * Holds if the step from `node1` to `node2` should be considered a taint + * step for taint tracking configurations working with HTTP URLs. + */ + abstract predicate step(DataFlow::Node n1, DataFlow::Node n2); +} + +private class DefaultHttpUrlAdditionalTaintStep extends HttpUrlsAdditionalTaintStep { + override predicate step(DataFlow::Node n1, DataFlow::Node n2) { + apacheHttpRequestStep(n1, n2) or + createUriStep(n1, n2) or + createUrlStep(n1, n2) or + urlOpenStep(n1, n2) + } +} + +/** Constructor of `ApacheHttpRequest` */ +private predicate apacheHttpRequestStep(DataFlow::Node node1, DataFlow::Node node2) { + exists(ConstructorCall cc | + cc.getConstructedType() instanceof ApacheHttpRequest and + node2.asExpr() = cc and + cc.getAnArgument() = node1.asExpr() + ) +} + +/** `URI` methods */ +private predicate createUriStep(DataFlow::Node node1, DataFlow::Node node2) { + exists(UriConstructorCall cc | + cc.getSchemeArg() = node1.asExpr() and + node2.asExpr() = cc + ) +} + +/** Constructors of `URL` */ +private predicate createUrlStep(DataFlow::Node node1, DataFlow::Node node2) { + exists(UrlConstructorCall cc | + cc.getProtocolArg() = node1.asExpr() and + node2.asExpr() = cc + ) +} + +/** Method call of `HttpURLOpenMethod` */ +private predicate urlOpenStep(DataFlow::Node node1, DataFlow::Node node2) { + exists(MethodAccess ma | + ma.getMethod() instanceof UrlOpenConnectionMethod and + node1.asExpr() = ma.getQualifier() and + ma = node2.asExpr() + ) +} diff --git a/java/ql/lib/semmle/code/java/security/HttpsUrlsQuery.qll b/java/ql/lib/semmle/code/java/security/HttpsUrlsQuery.qll new file mode 100644 index 00000000000..50c76cefbca --- /dev/null +++ b/java/ql/lib/semmle/code/java/security/HttpsUrlsQuery.qll @@ -0,0 +1,25 @@ +/** Provides taint tracking configurations to be used in HTTPS URLs queries. */ + +import java +import semmle.code.java.dataflow.TaintTracking +import semmle.code.java.frameworks.Networking +import semmle.code.java.security.HttpsUrls + +/** + * A taint tracking configuration for HTTP connections. + */ +class HttpStringToUrlOpenMethodFlowConfig extends TaintTracking::Configuration { + HttpStringToUrlOpenMethodFlowConfig() { this = "HttpStringToUrlOpenMethodFlowConfig" } + + override predicate isSource(DataFlow::Node src) { src.asExpr() instanceof HttpStringLiteral } + + override predicate isSink(DataFlow::Node sink) { sink instanceof UrlOpenSink } + + override predicate isAdditionalTaintStep(DataFlow::Node node1, DataFlow::Node node2) { + any(HttpUrlsAdditionalTaintStep c).step(node1, node2) + } + + override predicate isSanitizer(DataFlow::Node node) { + node.getType() instanceof PrimitiveType or node.getType() instanceof BoxedType + } +} diff --git a/java/ql/src/Security/CWE/CWE-319/HttpsUrls.ql b/java/ql/src/Security/CWE/CWE-319/HttpsUrls.ql index 001afb8efb1..da5d847b4dd 100644 --- a/java/ql/src/Security/CWE/CWE-319/HttpsUrls.ql +++ b/java/ql/src/Security/CWE/CWE-319/HttpsUrls.ql @@ -11,54 +11,10 @@ */ import java -import semmle.code.java.dataflow.TaintTracking -import semmle.code.java.frameworks.Networking +import semmle.code.java.security.HttpsUrlsQuery import DataFlow::PathGraph -private import semmle.code.java.dataflow.ExternalFlow -class HttpString extends StringLiteral { - HttpString() { - // Avoid matching "https" here. - exists(string s | this.getRepresentedString() = s | - ( - // Either the literal "http", ... - s = "http" - or - // ... or the beginning of a http URL. - s.matches("http://%") - ) and - not s.matches("%/localhost%") - ) - } -} - -class HttpStringToUrlOpenMethodFlowConfig extends TaintTracking::Configuration { - HttpStringToUrlOpenMethodFlowConfig() { this = "HttpsUrls::HttpStringToUrlOpenMethodFlowConfig" } - - override predicate isSource(DataFlow::Node src) { src.asExpr() instanceof HttpString } - - override predicate isSink(DataFlow::Node sink) { sink instanceof UrlOpenSink } - - override predicate isAdditionalTaintStep(DataFlow::Node node1, DataFlow::Node node2) { - exists(UrlConstructorCall u | - node1.asExpr() = u.protocolArg() and - node2.asExpr() = u - ) - } - - override predicate isSanitizer(DataFlow::Node node) { - node.getType() instanceof PrimitiveType or node.getType() instanceof BoxedType - } -} - -/** - * A sink that represents a URL opening method call, such as a call to `java.net.URL.openConnection()`. - */ -private class UrlOpenSink extends DataFlow::Node { - UrlOpenSink() { sinkNode(this, "open-url") } -} - -from DataFlow::PathNode source, DataFlow::PathNode sink, MethodAccess m, HttpString s +from DataFlow::PathNode source, DataFlow::PathNode sink, MethodAccess m, HttpStringLiteral s where source.getNode().asExpr() = s and sink.getNode().asExpr() = m.getQualifier() and From 5ed9949498378e60b18a75a3e8c7308ee1ff327a Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Wed, 15 Sep 2021 17:16:37 +0200 Subject: [PATCH 430/741] Adapt InsecureBasicAuth to the previous commit --- .../code/java/security/InsecureBasicAuth.qll | 45 +++ .../java/security/InsecureBasicAuthQuery.qll | 3 +- .../code/java/security/InsecureBasicAuth.qll | 259 ------------------ .../CWE-522/InsecureBasicAuthTest.java | 216 ++++++++++----- 4 files changed, 196 insertions(+), 327 deletions(-) create mode 100644 java/ql/lib/semmle/code/java/security/InsecureBasicAuth.qll rename java/ql/{src => lib}/semmle/code/java/security/InsecureBasicAuthQuery.qll (88%) delete mode 100644 java/ql/src/semmle/code/java/security/InsecureBasicAuth.qll diff --git a/java/ql/lib/semmle/code/java/security/InsecureBasicAuth.qll b/java/ql/lib/semmle/code/java/security/InsecureBasicAuth.qll new file mode 100644 index 00000000000..c15149fe936 --- /dev/null +++ b/java/ql/lib/semmle/code/java/security/InsecureBasicAuth.qll @@ -0,0 +1,45 @@ +/** Provides classes and predicates to reason about Insecure Basic Authentication vulnerabilities. */ + +import java +import semmle.code.java.dataflow.DataFlow +import semmle.code.java.dataflow.TaintTracking +import semmle.code.java.security.HttpsUrls + +/** + * A source that represents HTTP URLs. + * Extend this class to add your own Insecure Basic Authentication sources. + */ +abstract class InsecureBasicAuthSource extends DataFlow::Node { } + +/** A default source representing HTTP strings, URLs or URIs. */ +private class DefaultInsecureBasicAuthSource extends InsecureBasicAuthSource { + DefaultInsecureBasicAuthSource() { this.asExpr() instanceof HttpStringLiteral } +} + +/** + * A sink that represents a method that sets Basic Authentication. + * Extend this class to add your own Insecure Basic Authentication sinks. + */ +abstract class InsecureBasicAuthSink extends DataFlow::Node { } + +/** A default sink representing methods that set an Authorization header. */ +private class DefaultInsecureBasicAuthSink extends InsecureBasicAuthSink { + DefaultInsecureBasicAuthSink() { + exists(MethodAccess ma | + ma.getMethod().hasName("addHeader") or + ma.getMethod().hasName("setHeader") or + ma.getMethod().hasName("setRequestProperty") + | + this.asExpr() = ma.getQualifier() and + ma.getArgument(0).(CompileTimeConstantExpr).getStringValue() = "Authorization" and + TaintTracking::localExprTaint(any(BasicAuthString b), ma.getArgument(1)) + ) + } +} + +/** + * String pattern of basic authentication. + */ +private class BasicAuthString extends StringLiteral { + BasicAuthString() { exists(string s | this.getRepresentedString() = s | s.matches("Basic %")) } +} diff --git a/java/ql/src/semmle/code/java/security/InsecureBasicAuthQuery.qll b/java/ql/lib/semmle/code/java/security/InsecureBasicAuthQuery.qll similarity index 88% rename from java/ql/src/semmle/code/java/security/InsecureBasicAuthQuery.qll rename to java/ql/lib/semmle/code/java/security/InsecureBasicAuthQuery.qll index 73804489cb9..941aaafe580 100644 --- a/java/ql/src/semmle/code/java/security/InsecureBasicAuthQuery.qll +++ b/java/ql/lib/semmle/code/java/security/InsecureBasicAuthQuery.qll @@ -1,6 +1,7 @@ /** Provides taint tracking configurations to be used in Insecure Basic Authentication queries. */ import java +import semmle.code.java.security.HttpsUrls import semmle.code.java.security.InsecureBasicAuth import semmle.code.java.dataflow.TaintTracking @@ -16,6 +17,6 @@ class BasicAuthFlowConfig extends TaintTracking::Configuration { override predicate isSink(DataFlow::Node sink) { sink instanceof InsecureBasicAuthSink } override predicate isAdditionalTaintStep(DataFlow::Node node1, DataFlow::Node node2) { - any(InsecureBasicAuthAdditionalTaintStep c).step(node1, node2) + any(HttpUrlsAdditionalTaintStep c).step(node1, node2) } } diff --git a/java/ql/src/semmle/code/java/security/InsecureBasicAuth.qll b/java/ql/src/semmle/code/java/security/InsecureBasicAuth.qll deleted file mode 100644 index 6814c69fd0b..00000000000 --- a/java/ql/src/semmle/code/java/security/InsecureBasicAuth.qll +++ /dev/null @@ -1,259 +0,0 @@ -/** Provides classes and predicates to reason about Insecure Basic Authentication vulnerabilities. */ - -import java -import semmle.code.java.dataflow.DataFlow -import semmle.code.java.dataflow.ExternalFlow -import semmle.code.java.frameworks.Networking -import semmle.code.java.frameworks.ApacheHttp - -/** - * A source that represents HTTP URLs. - * Extend this class to add your own Insecure Basic Authentication sources. - */ -abstract class InsecureBasicAuthSource extends DataFlow::Node { } - -/** A default source representing HTTP strings, URLs or URIs. */ -private class DefaultInsecureBasicAuthSource extends InsecureBasicAuthSource { - DefaultInsecureBasicAuthSource() { - this.asExpr() instanceof HttpString - or - exists(URLConstructor uc | - uc.hasHttpStringArg() and - this.asExpr() = uc.getArgument(0) - ) - or - exists(URIConstructor uc | - uc.hasHttpStringArg() and - this.asExpr() = uc.getArgument(0) - ) - } -} - -/** - * A sink that represents a method that sets Basic Authentication. - * Extend this class to add your own Insecure Basic Authentication sinks. - */ -abstract class InsecureBasicAuthSink extends DataFlow::Node { } - -/** A default sink representing methods that set an Authorization header. */ -private class DefaultInsecureBasicAuthSink extends InsecureBasicAuthSink { - DefaultInsecureBasicAuthSink() { - exists(MethodAccess ma | - ma.getMethod().hasName("addHeader") or - ma.getMethod().hasName("setHeader") or - ma.getMethod().hasName("setRequestProperty") - | - this.asExpr() = ma.getQualifier() and - ma.getArgument(0).(CompileTimeConstantExpr).getStringValue() = "Authorization" and - builtFromBasicAuthStringConcat(ma.getArgument(1)) - ) - } -} - -/** - * A unit class for adding additional taint steps. - * - * Extend this class to add additional taint steps that should apply to the `BasicAuthFlowConfig`. - */ -class InsecureBasicAuthAdditionalTaintStep extends Unit { - /** - * Holds if the step from `node1` to `node2` should be considered a taint - * step for the `BasicAuthFlowConfig` configuration. - */ - abstract predicate step(DataFlow::Node n1, DataFlow::Node n2); -} - -/** A set of additional taint steps to consider when taint tracking LDAP related data flows. */ -private class DefaultInsecureBasicAuthAdditionalTaintStep extends InsecureBasicAuthAdditionalTaintStep { - override predicate step(DataFlow::Node n1, DataFlow::Node n2) { - apacheHttpRequestStep(n1, n2) or - createUriStep(n1, n2) or - basicRequestLineStep(n1, n2) or - createUrlStep(n1, n2) or - urlOpenStep(n1, n2) - } -} - -/** - * Class of Java URL constructor. - */ -private class URLConstructor extends ClassInstanceExpr { - URLConstructor() { this.getConstructor().getDeclaringType() instanceof TypeUrl } - - predicate hasHttpStringArg() { - this.getConstructor().getParameter(0).getType() instanceof TypeString and - ( - // URLs constructed with any of the three string constructors below: - // `URL(String protocol, String host, int port, String file)`, - // `URL(String protocol, String host, int port, String file, URLStreamHandler handler)`, - // `URL(String protocol, String host, String file)` - this.getConstructor().getNumberOfParameters() > 1 and - concatHttpString(this.getArgument(0), this.getArgument(1)) // First argument contains the protocol part and the second argument contains the host part. - or - // URLs constructed with the string constructor `URL(String spec)` - this.getConstructor().getNumberOfParameters() = 1 and - this.getArgument(0) instanceof HttpString // First argument contains the whole spec. - ) - } -} - -/** - * Class of Java URI constructor. - */ -private class URIConstructor extends ClassInstanceExpr { - URIConstructor() { this.getConstructor().getDeclaringType() instanceof TypeUri } - - predicate hasHttpStringArg() { - ( - this.getNumArgument() = 1 and - this.getArgument(0) instanceof HttpString // `URI(String str)` - or - this.getNumArgument() = 4 and - concatHttpString(this.getArgument(0), this.getArgument(1)) // `URI(String scheme, String host, String path, String fragment)` - or - this.getNumArgument() = 5 and - concatHttpString(this.getArgument(0), this.getArgument(1)) // `URI(String scheme, String authority, String path, String query, String fragment)` without user-info in authority - or - this.getNumArgument() = 7 and - concatHttpString(this.getArgument(0), this.getArgument(2)) // `URI(String scheme, String userInfo, String host, int port, String path, String query, String fragment)` - ) - } -} - -/** - * String of HTTP URLs not in private domains. - */ -private class HttpStringLiteral extends StringLiteral { - HttpStringLiteral() { - // Match URLs with the HTTP protocol and without private IP addresses to reduce false positives. - exists(string s | this.getRepresentedString() = s | - s.regexpMatch("(?i)http://[\\[a-zA-Z0-9].*") and - not s.substring(7, s.length()) instanceof PrivateHostName - ) - } -} - -/** - * Checks both parts of protocol and host. - */ -private predicate concatHttpString(Expr protocol, Expr host) { - ( - protocol.(CompileTimeConstantExpr).getStringValue().regexpMatch("(?i)http(://)?") or - protocol - .(VarAccess) - .getVariable() - .getAnAssignedValue() - .(CompileTimeConstantExpr) - .getStringValue() - .regexpMatch("(?i)http(://)?") - ) and - not exists(string hostString | - hostString = host.(CompileTimeConstantExpr).getStringValue() or - hostString = - host.(VarAccess).getVariable().getAnAssignedValue().(CompileTimeConstantExpr).getStringValue() - | - hostString.length() = 0 or // Empty host is loopback address - hostString instanceof PrivateHostName - ) -} - -/** Gets the leftmost operand in a concatenated string */ -private Expr getLeftmostConcatOperand(Expr expr) { - if expr instanceof AddExpr - then result = getLeftmostConcatOperand(expr.(AddExpr).getLeftOperand()) - else result = expr -} - -/** - * String concatenated with `HttpStringLiteral`. - */ -private class HttpString extends Expr { - HttpString() { - this instanceof HttpStringLiteral - or - concatHttpString(this.(AddExpr).getLeftOperand(), - getLeftmostConcatOperand(this.(AddExpr).getRightOperand())) - } -} - -/** - * String pattern of basic authentication. - */ -private class BasicAuthString extends StringLiteral { - BasicAuthString() { exists(string s | this.getRepresentedString() = s | s.matches("Basic %")) } -} - -/** - * String concatenated with `BasicAuthString`. - */ -private predicate builtFromBasicAuthStringConcat(Expr expr) { - expr instanceof BasicAuthString - or - builtFromBasicAuthStringConcat(expr.(AddExpr).getLeftOperand()) - or - exists(Expr other | builtFromBasicAuthStringConcat(other) | - exists(Variable var | var.getAnAssignedValue() = other and var.getAnAccess() = expr) - ) -} - -/** The `openConnection` method of Java URL. Not to include `openStream` since it won't be used in this query. */ -private class HttpURLOpenMethod extends Method { - HttpURLOpenMethod() { - this.getDeclaringType() instanceof TypeUrl and - this.getName() = "openConnection" - } -} - -/** Constructor of `ApacheHttpRequest` */ -private predicate apacheHttpRequestStep(DataFlow::Node node1, DataFlow::Node node2) { - exists(ConstructorCall cc | - cc.getConstructedType() instanceof ApacheHttpRequest and - node2.asExpr() = cc and - cc.getAnArgument() = node1.asExpr() - ) -} - -/** `URI` methods */ -private predicate createUriStep(DataFlow::Node node1, DataFlow::Node node2) { - exists( - URIConstructor cc // new URI - | - node2.asExpr() = cc and - cc.getArgument(0) = node1.asExpr() - ) - or - exists( - StaticMethodAccess ma // URI.create - | - ma.getMethod().getDeclaringType() instanceof TypeUri and - ma.getMethod().hasName("create") and - node1.asExpr() = ma.getArgument(0) and - node2.asExpr() = ma - ) -} - -/** Constructors of `URL` */ -private predicate createUrlStep(DataFlow::Node node1, DataFlow::Node node2) { - exists(URLConstructor cc | - node2.asExpr() = cc and - cc.getArgument(0) = node1.asExpr() - ) -} - -/** Method call of `HttpURLOpenMethod` */ -private predicate urlOpenStep(DataFlow::Node node1, DataFlow::Node node2) { - exists(MethodAccess ma | - ma.getMethod() instanceof HttpURLOpenMethod and - node1.asExpr() = ma.getQualifier() and - ma = node2.asExpr() - ) -} - -/** Constructor of `BasicRequestLine` */ -private predicate basicRequestLineStep(DataFlow::Node node1, DataFlow::Node node2) { - exists(ConstructorCall mcc | - mcc.getConstructedType().hasQualifiedName("org.apache.http.message", "BasicRequestLine") and - mcc.getArgument(1) = node1.asExpr() and // BasicRequestLine(String method, String uri, ProtocolVersion version) - node2.asExpr() = mcc - ) -} diff --git a/java/ql/test/query-tests/security/CWE-522/InsecureBasicAuthTest.java b/java/ql/test/query-tests/security/CWE-522/InsecureBasicAuthTest.java index 249112dd266..2098dd4139c 100644 --- a/java/ql/test/query-tests/security/CWE-522/InsecureBasicAuthTest.java +++ b/java/ql/test/query-tests/security/CWE-522/InsecureBasicAuthTest.java @@ -10,6 +10,7 @@ import java.net.URL; import java.net.HttpURLConnection; import java.net.URLConnection; import java.util.Base64; +import javax.net.ssl.HttpsURLConnection; public class InsecureBasicAuthTest { /** @@ -17,42 +18,64 @@ public class InsecureBasicAuthTest { */ public void testApacheHttpRequest(String username, String password) { String host = "www.example.com"; - HttpRequestBase post = new HttpPost("http://" + host + "/rest/getuser.do?uid=abcdx"); - post.setHeader("Accept", "application/json"); - post.setHeader("Content-type", "application/json"); - String authString = username + ":" + password; byte[] authEncBytes = Base64.getEncoder().encode(authString.getBytes()); String authStringEnc = new String(authEncBytes); - - post.addHeader("Authorization", "Basic " + authStringEnc); // $hasInsecureBasicAuth + { + HttpRequestBase post = new HttpPost("http://" + host + "/rest/getuser.do?uid=abcdx"); + post.setHeader("Accept", "application/json"); + post.setHeader("Content-type", "application/json"); + post.addHeader("Authorization", "Basic " + authStringEnc); // $hasInsecureBasicAuth + } + { + HttpRequestBase post = new HttpPost("https://" + host + "/rest/getuser.do?uid=abcdx"); + post.setHeader("Accept", "application/json"); + post.setHeader("Content-type", "application/json"); + post.addHeader("Authorization", "Basic " + authStringEnc); // Safe + } } /** * Test basic authentication with Apache HTTP GET request. */ public void testApacheHttpRequest2(String url) throws java.io.IOException { - String urlStr = "http://www.example.com:8000/payment/retrieve"; - HttpGet get = new HttpGet(urlStr); - get.setHeader("Accept", "application/json"); - get.setHeader("Authorization", // $hasInsecureBasicAuth - "Basic " + new String(Base64.getEncoder().encode("admin:test".getBytes()))); + { + String urlStr = "http://www.example.com:8000/payment/retrieve"; + HttpGet get = new HttpGet(urlStr); + get.setHeader("Accept", "application/json"); + get.setHeader("Authorization", // $hasInsecureBasicAuth + "Basic " + new String(Base64.getEncoder().encode("admin:test".getBytes()))); + } + { + String urlStr = "https://www.example.com:8000/payment/retrieve"; + HttpGet get = new HttpGet(urlStr); + get.setHeader("Accept", "application/json"); + get.setHeader("Authorization", // Safe + "Basic " + new String(Base64.getEncoder().encode("admin:test".getBytes()))); + } } /** * Test basic authentication with Apache HTTP POST request using URI create method. */ public void testApacheHttpRequest3(String username, String password) { - String uriStr = "http://www.example.com/rest/getuser.do?uid=abcdx"; - HttpRequestBase post = new HttpPost(URI.create(uriStr)); - post.setHeader("Accept", "application/json"); - post.setHeader("Content-type", "application/json"); - String authString = username + ":" + password; byte[] authEncBytes = Base64.getEncoder().encode(authString.getBytes()); String authStringEnc = new String(authEncBytes); - - post.addHeader("Authorization", "Basic " + authStringEnc); // $hasInsecureBasicAuth + { + String uriStr = "http://www.example.com/rest/getuser.do?uid=abcdx"; + HttpRequestBase post = new HttpPost(URI.create(uriStr)); + post.setHeader("Accept", "application/json"); + post.setHeader("Content-type", "application/json"); + post.addHeader("Authorization", "Basic " + authStringEnc); // $hasInsecureBasicAuth + } + { + String uriStr = "https://www.example.com/rest/getuser.do?uid=abcdx"; + HttpRequestBase post = new HttpPost(URI.create(uriStr)); + post.setHeader("Accept", "application/json"); + post.setHeader("Content-type", "application/json"); + post.addHeader("Authorization", "Basic " + authStringEnc); // Safe + } } /** @@ -60,17 +83,25 @@ public class InsecureBasicAuthTest { * argument. */ public void testApacheHttpRequest4(String username, String password) throws Exception { - String uriStr = "http://www.example.com/rest/getuser.do?uid=abcdx"; - URI uri = new URI(uriStr); - HttpRequestBase post = new HttpPost(uri); - post.setHeader("Accept", "application/json"); - post.setHeader("Content-type", "application/json"); - String authString = username + ":" + password; byte[] authEncBytes = Base64.getEncoder().encode(authString.getBytes()); String authStringEnc = new String(authEncBytes); - - post.addHeader("Authorization", "Basic " + authStringEnc); // $hasInsecureBasicAuth + { + String uriStr = "http://www.example.com/rest/getuser.do?uid=abcdx"; + URI uri = new URI(uriStr); + HttpRequestBase post = new HttpPost(uri); + post.setHeader("Accept", "application/json"); + post.setHeader("Content-type", "application/json"); + post.addHeader("Authorization", "Basic " + authStringEnc); // $hasInsecureBasicAuth + } + { + String uriStr = "https://www.example.com/rest/getuser.do?uid=abcdx"; + URI uri = new URI(uriStr); + HttpRequestBase post = new HttpPost(uri); + post.setHeader("Accept", "application/json"); + post.setHeader("Content-type", "application/json"); + post.addHeader("Authorization", "Basic " + authStringEnc); // Safe + } } /** @@ -78,49 +109,71 @@ public class InsecureBasicAuthTest { * arguments. */ public void testApacheHttpRequest5(String username, String password) throws Exception { - HttpRequestBase post = - new HttpPost(new URI("http", "www.example.com", "/test", "abc=123", null)); - post.setHeader("Accept", "application/json"); - post.setHeader("Content-type", "application/json"); - String authString = username + ":" + password; byte[] authEncBytes = Base64.getEncoder().encode(authString.getBytes()); String authStringEnc = new String(authEncBytes); - - post.addHeader("Authorization", "Basic " + authStringEnc); // $hasInsecureBasicAuth + { + HttpRequestBase post = + new HttpPost(new URI("http", "www.example.com", "/test", "abc=123", null)); + post.setHeader("Accept", "application/json"); + post.setHeader("Content-type", "application/json"); + post.addHeader("Authorization", "Basic " + authStringEnc); // $hasInsecureBasicAuth + } + { + HttpRequestBase post = + new HttpPost(new URI("https", "www.example.com", "/test", "abc=123", null)); + post.setHeader("Accept", "application/json"); + post.setHeader("Content-type", "application/json"); + post.addHeader("Authorization", "Basic " + authStringEnc); // Safe + } } /** * Test basic authentication with Apache HTTP `BasicHttpRequest` using string constructor. */ public void testApacheHttpRequest6(String username, String password) { - String uriStr = "http://www.example.com/rest/getuser.do?uid=abcdx"; - BasicHttpRequest post = new BasicHttpRequest("POST", uriStr); - post.setHeader("Accept", "application/json"); - post.setHeader("Content-type", "application/json"); - String authString = username + ":" + password; byte[] authEncBytes = Base64.getEncoder().encode(authString.getBytes()); String authStringEnc = new String(authEncBytes); - - post.addHeader("Authorization", "Basic " + authStringEnc); // $hasInsecureBasicAuth + { + String uriStr = "http://www.example.com/rest/getuser.do?uid=abcdx"; + BasicHttpRequest post = new BasicHttpRequest("POST", uriStr); + post.setHeader("Accept", "application/json"); + post.setHeader("Content-type", "application/json"); + post.addHeader("Authorization", "Basic " + authStringEnc); // $hasInsecureBasicAuth + } + { + String uriStr = "https://www.example.com/rest/getuser.do?uid=abcdx"; + BasicHttpRequest post = new BasicHttpRequest("POST", uriStr); + post.setHeader("Accept", "application/json"); + post.setHeader("Content-type", "application/json"); + post.addHeader("Authorization", "Basic " + authStringEnc); // Safe + } } /** * Test basic authentication with Apache HTTP `BasicHttpRequest` using `RequestLine`. */ public void testApacheHttpRequest7(String username, String password) { - String uriStr = "http://www.example.com/rest/getuser.do?uid=abcdx"; - RequestLine requestLine = new BasicRequestLine("POST", uriStr, null); - BasicHttpRequest post = new BasicHttpRequest(requestLine); - post.setHeader("Accept", "application/json"); - post.setHeader("Content-type", "application/json"); - String authString = username + ":" + password; byte[] authEncBytes = Base64.getEncoder().encode(authString.getBytes()); String authStringEnc = new String(authEncBytes); - - post.addHeader("Authorization", "Basic " + authStringEnc); // $hasInsecureBasicAuth + { + String uriStr = "http://www.example.com/rest/getuser.do?uid=abcdx"; + RequestLine requestLine = new BasicRequestLine("POST", uriStr, null); + BasicHttpRequest post = new BasicHttpRequest(requestLine); + post.setHeader("Accept", "application/json"); + post.setHeader("Content-type", "application/json"); + post.addHeader("Authorization", "Basic " + authStringEnc); // $hasInsecureBasicAuth + } + { + String uriStr = "https://www.example.com/rest/getuser.do?uid=abcdx"; + RequestLine requestLine = new BasicRequestLine("POST", uriStr, null); + BasicHttpRequest post = new BasicHttpRequest(requestLine); + post.setHeader("Accept", "application/json"); + post.setHeader("Content-type", "application/json"); + post.addHeader("Authorization", "Basic " + authStringEnc); // Safe + } } /** @@ -128,14 +181,24 @@ public class InsecureBasicAuthTest { * constructor. */ public void testHttpUrlConnection(String username, String password) throws Exception { - String urlStr = "http://www.example.com/rest/getuser.do?uid=abcdx"; String authString = username + ":" + password; String encoding = Base64.getEncoder().encodeToString(authString.getBytes("UTF-8")); - URL url = new URL(urlStr); - HttpURLConnection conn = (HttpURLConnection) url.openConnection(); - conn.setRequestMethod("POST"); - conn.setDoOutput(true); - conn.setRequestProperty("Authorization", "Basic " + encoding); // $hasInsecureBasicAuth + { + String urlStr = "http://www.example.com/rest/getuser.do?uid=abcdx"; + URL url = new URL(urlStr); + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setRequestMethod("POST"); + conn.setDoOutput(true); + conn.setRequestProperty("Authorization", "Basic " + encoding); // $hasInsecureBasicAuth + } + { + String urlStr = "https://www.example.com/rest/getuser.do?uid=abcdx"; + URL url = new URL(urlStr); + HttpURLConnection conn = (HttpsURLConnection) url.openConnection(); + conn.setRequestMethod("POST"); + conn.setDoOutput(true); + conn.setRequestProperty("Authorization", "Basic " + encoding); // Safe + } } /** @@ -143,16 +206,26 @@ public class InsecureBasicAuthTest { * String host, String file)` constructor. */ public void testHttpUrlConnection2(String username, String password) throws Exception { - String host = "www.example.com"; - String path = "/rest/getuser.do?uid=abcdx"; - String protocol = "http"; String authString = username + ":" + password; String encoding = Base64.getEncoder().encodeToString(authString.getBytes("UTF-8")); - URL url = new URL(protocol, host, path); - HttpURLConnection conn = (HttpURLConnection) url.openConnection(); - conn.setRequestMethod("POST"); - conn.setDoOutput(true); - conn.setRequestProperty("Authorization", "Basic " + encoding); // $hasInsecureBasicAuth + String host = "www.example.com"; + String path = "/rest/getuser.do?uid=abcdx"; + { + String protocol = "http"; + URL url = new URL(protocol, host, path); + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setRequestMethod("POST"); + conn.setDoOutput(true); + conn.setRequestProperty("Authorization", "Basic " + encoding); // $hasInsecureBasicAuth + } + { + String protocol = "https"; + URL url = new URL(protocol, host, path); + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setRequestMethod("POST"); + conn.setDoOutput(true); + conn.setRequestProperty("Authorization", "Basic " + encoding); // Safe + } } /** @@ -162,10 +235,19 @@ public class InsecureBasicAuthTest { String host = "LOCALHOST"; String authString = username + ":" + password; String encoding = Base64.getEncoder().encodeToString(authString.getBytes("UTF-8")); - HttpURLConnection conn = (HttpURLConnection) new URL( - "http://" + (((host + "/rest/getuser.do") + "?uid=abcdx"))).openConnection(); - conn.setRequestMethod("POST"); - conn.setDoOutput(true); - conn.setRequestProperty("Authorization", "Basic " + encoding); // Safe + { + HttpURLConnection conn = (HttpURLConnection) new URL( + "http://" + (((host + "/rest/getuser.do") + "?uid=abcdx"))).openConnection(); + conn.setRequestMethod("POST"); + conn.setDoOutput(true); + conn.setRequestProperty("Authorization", "Basic " + encoding); // Safe + } + { + HttpURLConnection conn = (HttpURLConnection) new URL( + "https://" + (((host + "/rest/getuser.do") + "?uid=abcdx"))).openConnection(); + conn.setRequestMethod("POST"); + conn.setDoOutput(true); + conn.setRequestProperty("Authorization", "Basic " + encoding); // Safe + } } } From d3cf697b07c98681316fe95c83ab03fc73dc4641 Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Wed, 15 Sep 2021 17:32:36 +0200 Subject: [PATCH 431/741] QLDoc --- java/ql/lib/semmle/code/java/security/HttpsUrls.qll | 2 ++ 1 file changed, 2 insertions(+) diff --git a/java/ql/lib/semmle/code/java/security/HttpsUrls.qll b/java/ql/lib/semmle/code/java/security/HttpsUrls.qll index f3ce2ac11a5..95fb4772d99 100644 --- a/java/ql/lib/semmle/code/java/security/HttpsUrls.qll +++ b/java/ql/lib/semmle/code/java/security/HttpsUrls.qll @@ -1,3 +1,5 @@ +/** Provides classes and predicates to reason about plaintext HTTP vulnerabilities. */ + import java private import semmle.code.java.dataflow.DataFlow private import semmle.code.java.dataflow.ExternalFlow From 21079a1315a06ebb80798d634b2d6b54aac005be Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Wed, 15 Sep 2021 17:51:36 +0200 Subject: [PATCH 432/741] Fix conditionControlsMethod predicate Exceptions for throw and return statements were missing the appropriate condition --- .../lib/semmle/code/java/security/ConditionalBypassQuery.qll | 4 ++-- .../security/CWE-807/semmle/tests/ConditionalBypassTest.java | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/java/ql/lib/semmle/code/java/security/ConditionalBypassQuery.qll b/java/ql/lib/semmle/code/java/security/ConditionalBypassQuery.qll index 1fbfea3454b..3bff0ae0a80 100644 --- a/java/ql/lib/semmle/code/java/security/ConditionalBypassQuery.qll +++ b/java/ql/lib/semmle/code/java/security/ConditionalBypassQuery.qll @@ -17,8 +17,8 @@ predicate conditionControlsMethod(MethodAccess ma, Expr e) { cb.controls(ma.getBasicBlock(), cond) and not cb.controls(any(SensitiveExecutionMethod sem).getAReference().getBasicBlock(), cond.booleanNot()) and - not cb.controls(any(ThrowStmt t).getBasicBlock(), _) and - not cb.controls(any(ReturnStmt r).getBasicBlock(), _) and + not cb.controls(any(ThrowStmt t).getBasicBlock(), cond.booleanNot()) and + not cb.controls(any(ReturnStmt r).getBasicBlock(), cond.booleanNot()) and e = cb.getCondition() ) } diff --git a/java/ql/test/query-tests/security/CWE-807/semmle/tests/ConditionalBypassTest.java b/java/ql/test/query-tests/security/CWE-807/semmle/tests/ConditionalBypassTest.java index e4f99fe3fc3..9dd72f0dd63 100644 --- a/java/ql/test/query-tests/security/CWE-807/semmle/tests/ConditionalBypassTest.java +++ b/java/ql/test/query-tests/security/CWE-807/semmle/tests/ConditionalBypassTest.java @@ -120,8 +120,8 @@ class ConditionalBypassTest { public static void test7(String user, String password) { Cookie adminCookie = getCookies()[0]; - // FALSE NEGATIVE: login is bypasseable - if (adminCookie.getValue() == "false") { // $ MISSING: $ hasConditionalBypassTest + // BAD: login is bypasseable + if (adminCookie.getValue() == "false") { // $ hasConditionalBypassTest login(user, password); return; } else { From 05d83e487db860ef7dab729e2ec2da1f256b0e7b Mon Sep 17 00:00:00 2001 From: Felicity Chapman Date: Wed, 15 Sep 2021 17:08:55 +0100 Subject: [PATCH 433/741] Update all links to CodeQL microsite --- docs/codeql/ql-training/cpp/bad-overflow-guard.rst | 4 ++-- docs/codeql/ql-training/cpp/control-flow-cpp.rst | 4 ++-- docs/codeql/ql-training/cpp/data-flow-cpp.rst | 4 ++-- docs/codeql/ql-training/cpp/global-data-flow-cpp.rst | 2 +- docs/codeql/ql-training/cpp/intro-ql-cpp.rst | 12 ++++++------ docs/codeql/ql-training/cpp/snprintf.rst | 2 +- docs/codeql/ql-training/java/apache-struts-java.rst | 2 +- docs/codeql/ql-training/java/data-flow-java.rst | 2 +- .../ql-training/java/global-data-flow-java.rst | 2 +- docs/codeql/ql-training/java/intro-ql-java.rst | 12 ++++++------ .../codeql/ql-training/java/query-injection-java.rst | 4 ++-- .../slide-snippets/abstract-syntax-tree.rst | 6 +++--- .../ql-training/slide-snippets/database-note.rst | 2 +- .../ql-training/slide-snippets/intro-ql-general.rst | 4 ++-- .../ql-training/slide-snippets/local-data-flow.rst | 8 ++++---- docs/codeql/ql-training/template.rst | 2 +- 16 files changed, 36 insertions(+), 36 deletions(-) diff --git a/docs/codeql/ql-training/cpp/bad-overflow-guard.rst b/docs/codeql/ql-training/cpp/bad-overflow-guard.rst index b0d892a3a48..7ce4d68bfdb 100644 --- a/docs/codeql/ql-training/cpp/bad-overflow-guard.rst +++ b/docs/codeql/ql-training/cpp/bad-overflow-guard.rst @@ -11,7 +11,7 @@ Setup For this example you should download: -- `CodeQL for Visual Studio Code `__ +- `CodeQL for Visual Studio Code `__ - `ChakraCore database `__ .. note:: @@ -149,7 +149,7 @@ Let’s look for overflow guards of the form ``v + b < v``, using the classes - a ``RelationalOperation``: the overflow comparison check. - a ``Variable``: used as an argument to both the addition and comparison. - - The ``where`` part of the query ties these three variables together using `predicates `__ defined in the `standard CodeQL for C/C++ library `__. + - The ``where`` part of the query ties these three variables together using `predicates `__ defined in the `standard CodeQL for C/C++ library `__. CodeQL query: bad overflow guards ================================= diff --git a/docs/codeql/ql-training/cpp/control-flow-cpp.rst b/docs/codeql/ql-training/cpp/control-flow-cpp.rst index fe478bd4edc..c44e2ea0b74 100644 --- a/docs/codeql/ql-training/cpp/control-flow-cpp.rst +++ b/docs/codeql/ql-training/cpp/control-flow-cpp.rst @@ -13,7 +13,7 @@ Setup For this example you should download: -- `CodeQL for Visual Studio Code `__ +- `CodeQL for Visual Studio Code `__ - `ChakraCore database `__ .. note:: @@ -222,7 +222,7 @@ A ``GuardCondition`` is a ``Boolean`` condition that controls one or more basic Further materials ================= -- CodeQL for C/C++: https://help.semmle.com/QL/learn-ql/ql/cpp/ql-for-cpp.html +- CodeQL for C/C++: https://codeql.github.com/docs/codeql-language-guides/codeql-for-cpp/ - API reference: https://codeql.github.com/codeql-standard-libraries/cpp .. rst-class:: end-slide diff --git a/docs/codeql/ql-training/cpp/data-flow-cpp.rst b/docs/codeql/ql-training/cpp/data-flow-cpp.rst index 855ccb40ccb..426c6d4563d 100644 --- a/docs/codeql/ql-training/cpp/data-flow-cpp.rst +++ b/docs/codeql/ql-training/cpp/data-flow-cpp.rst @@ -11,7 +11,7 @@ Setup For this example you should download: -- `CodeQL for Visual Studio Code `__ +- `CodeQL for Visual Studio Code `__ - `dotnet/coreclr database `__ .. note:: @@ -139,7 +139,7 @@ Define a subclass of ``DataFlow::Node`` representing “source” nodes, that is .. note:: - Note the scoping of the `don’t-care variable `__ “_” in this example: the body of the characteristic predicate is equivalent to: + Note the scoping of the `don’t-care variable `__ “_” in this example: the body of the characteristic predicate is equivalent to: .. code-block:: ql diff --git a/docs/codeql/ql-training/cpp/global-data-flow-cpp.rst b/docs/codeql/ql-training/cpp/global-data-flow-cpp.rst index 8fb3f64b534..7be2a07c4af 100644 --- a/docs/codeql/ql-training/cpp/global-data-flow-cpp.rst +++ b/docs/codeql/ql-training/cpp/global-data-flow-cpp.rst @@ -11,7 +11,7 @@ Setup For this example you should download: -- `CodeQL for Visual Studio Code `__ +- `CodeQL for Visual Studio Code `__ - `dotnet/coreclr database `__ .. note:: diff --git a/docs/codeql/ql-training/cpp/intro-ql-cpp.rst b/docs/codeql/ql-training/cpp/intro-ql-cpp.rst index 4753aa4a493..0c08f77dba2 100644 --- a/docs/codeql/ql-training/cpp/intro-ql-cpp.rst +++ b/docs/codeql/ql-training/cpp/intro-ql-cpp.rst @@ -11,7 +11,7 @@ Setup For this example you should download: -- `CodeQL for Visual Studio Code `__ +- `CodeQL for Visual Studio Code `__ - `exiv2 database `__ .. note:: @@ -68,7 +68,7 @@ A simple CodeQL query We are going to write a simple query which finds “if statements” with empty “then” blocks, so we can highlight the results like those on the previous slide. The query can be run in the `query console on LGTM `__, or in your `IDE `__. - A `query `__ consists of a “select” clause that indicates what results should be returned. Typically it will also provide a “from” clause to declare some variables, and a “where” clause to state conditions over those variables. For more information on the structure of query files (including links to useful topics in the `QL language reference `__), see `About CodeQL queries `__. + A `query `__ consists of a “select” clause that indicates what results should be returned. Typically it will also provide a “from” clause to declare some variables, and a “where” clause to state conditions over those variables. For more information on the structure of query files (including links to useful topics in the `QL language reference `__), see `About CodeQL queries `__. In our example here, the first line of the query imports the `CodeQL library for C/C++ `__, which defines concepts like ``IfStmt`` and ``Block``. The query proper starts by declaring two variables–ifStmt and block. These variables represent sets of values in the database, according to the type of each of the variables. For example, ifStmt has the type IfStmt, which means it represents the set of all if statements in the program. @@ -108,9 +108,9 @@ Each query library also implicitly defines a module. Queries are always contained in query files with the file extension ``.ql``. - Parts of queries can be lifted into `library files `__ with the extension ``.qll``. Definitions within such libraries can be brought into scope using ``import`` statements, and similarly QLL files can import each other’s definitions using “import” statements. + Parts of queries can be lifted into `library files `__ with the extension ``.qll``. Definitions within such libraries can be brought into scope using ``import`` statements, and similarly QLL files can import each other’s definitions using “import” statements. - Logic can be encapsulated as user-defined `predicates `__ and `classes `__, and organized into `modules `__. Each QLL file implicitly defines a module, but QL and QLL files can also contain explicit module definitions, as we will see later. + Logic can be encapsulated as user-defined `predicates `__ and `classes `__, and organized into `modules `__. Each QLL file implicitly defines a module, but QL and QLL files can also contain explicit module definitions, as we will see later. Predicates ========== @@ -131,7 +131,7 @@ A predicate allows you to pull out and name parts of a query. .. note:: - A `predicate `__ takes zero or more parameters, and its body is a condition on those parameters. The predicate may (or may not) hold. Predicates may also be `recursive `__, simply by referring to themselves (directly or indirectly). + A `predicate `__ takes zero or more parameters, and its body is a condition on those parameters. The predicate may (or may not) hold. Predicates may also be `recursive `__, simply by referring to themselves (directly or indirectly). You can imagine a predicate to be a self-contained from-where-select statement, that produces an intermediate relation, or table. In this case, the ``isEmpty`` predicate will be the set of all blocks which are empty. @@ -154,7 +154,7 @@ Member predicates are inherited and can be overridden. .. note:: - `Classes `__ model sets of values from the database. A class has one or more supertypes, and inherits `member predicates `__ (methods) from each of them. Each value in a class must be in every supertype, but additional conditions can be stated in a so-called **characteristic predicate**, which looks a bit like a zero-argument constructor. + `Classes `__ model sets of values from the database. A class has one or more supertypes, and inherits `member predicates `__ (methods) from each of them. Each value in a class must be in every supertype, but additional conditions can be stated in a so-called **characteristic predicate**, which looks a bit like a zero-argument constructor. In the example, declaring a variable “EmptyBlock e” will allow it to range over only those blocks that have zero statements. diff --git a/docs/codeql/ql-training/cpp/snprintf.rst b/docs/codeql/ql-training/cpp/snprintf.rst index 1591531460e..657f5f29675 100644 --- a/docs/codeql/ql-training/cpp/snprintf.rst +++ b/docs/codeql/ql-training/cpp/snprintf.rst @@ -11,7 +11,7 @@ Setup For this example you should download: -- `CodeQL for Visual Studio Code `__ +- `CodeQL for Visual Studio Code `__ - `rsyslog database `__ .. note:: diff --git a/docs/codeql/ql-training/java/apache-struts-java.rst b/docs/codeql/ql-training/java/apache-struts-java.rst index 670e9066dc8..e1de94f5e6a 100644 --- a/docs/codeql/ql-training/java/apache-struts-java.rst +++ b/docs/codeql/ql-training/java/apache-struts-java.rst @@ -15,7 +15,7 @@ Setup For this example you should download: -- `CodeQL for Visual Studio Code `__ +- `CodeQL for Visual Studio Code `__ - `Apache Struts database `__ .. note:: diff --git a/docs/codeql/ql-training/java/data-flow-java.rst b/docs/codeql/ql-training/java/data-flow-java.rst index 85ff8688758..98cb02db1db 100644 --- a/docs/codeql/ql-training/java/data-flow-java.rst +++ b/docs/codeql/ql-training/java/data-flow-java.rst @@ -11,7 +11,7 @@ Setup For this example you should download: -- `CodeQL for Visual Studio Code `__ +- `CodeQL for Visual Studio Code `__ - `VIVO Vitro database `__ .. note:: diff --git a/docs/codeql/ql-training/java/global-data-flow-java.rst b/docs/codeql/ql-training/java/global-data-flow-java.rst index 3e5029a754f..d54710cda79 100644 --- a/docs/codeql/ql-training/java/global-data-flow-java.rst +++ b/docs/codeql/ql-training/java/global-data-flow-java.rst @@ -11,7 +11,7 @@ Setup For this example you should download: -- `CodeQL for Visual Studio Code `__ +- `CodeQL for Visual Studio Code `__ - `Apache Struts database `__ .. note:: diff --git a/docs/codeql/ql-training/java/intro-ql-java.rst b/docs/codeql/ql-training/java/intro-ql-java.rst index fb415d078bc..72de876ddae 100644 --- a/docs/codeql/ql-training/java/intro-ql-java.rst +++ b/docs/codeql/ql-training/java/intro-ql-java.rst @@ -11,7 +11,7 @@ Setup For this example you should download: -- `CodeQL for Visual Studio Code `__ +- `CodeQL for Visual Studio Code `__ - `Apache Struts database `__ .. note:: @@ -68,7 +68,7 @@ A simple CodeQL query We are going to write a simple query which finds “if statements” with empty “then” blocks, so we can highlight the results like those on the previous slide. The query can be run in the `query console on LGTM `__, or in your `IDE `__. - A `query `__ consists of a “select” clause that indicates what results should be returned. Typically it will also provide a “from” clause to declare some variables, and a “where” clause to state conditions over those variables. For more information on the structure of query files (including links to useful topics in the `QL language reference `__), see `About CodeQL queries `__. + A `query `__ consists of a “select” clause that indicates what results should be returned. Typically it will also provide a “from” clause to declare some variables, and a “where” clause to state conditions over those variables. For more information on the structure of query files (including links to useful topics in the `QL language reference `__), see `About CodeQL queries `__. In our example here, the first line of the query imports the `CodeQL library for Java `__, which defines concepts like ``IfStmt`` and ``Block``. The query proper starts by declaring two variables–ifStmt and block. These variables represent sets of values in the database, according to the type of each of the variables. For example, ``ifStmt`` has the type ``IfStmt``, which means it represents the set of all if statements in the program. @@ -107,9 +107,9 @@ Each query library also implicitly defines a module. Queries are always contained in query files with the file extension ``.ql``. - Parts of queries can be lifted into `library files `__ with the extension ``.qll``. Definitions within such libraries can be brought into scope using “import” statements, and similarly QLL files can import each other’s definitions using “import” statements. + Parts of queries can be lifted into `library files `__ with the extension ``.qll``. Definitions within such libraries can be brought into scope using “import” statements, and similarly QLL files can import each other’s definitions using “import” statements. - Logic can be encapsulated as user-defined `predicates `__ and `classes `__, and organized into `modules `__. Each QLL file implicitly defines a module, but QL and QLL files can also contain explicit module definitions, as we will see later. + Logic can be encapsulated as user-defined `predicates `__ and `classes `__, and organized into `modules `__. Each QLL file implicitly defines a module, but QL and QLL files can also contain explicit module definitions, as we will see later. Predicates ========== @@ -130,7 +130,7 @@ A predicate allows you to pull out and name parts of a query. .. note:: - A `predicate `__ takes zero or more parameters, and its body is a condition on those parameters. The predicate may (or may not) hold. Predicates may also be `recursive `__, simply by referring to themselves (directly or indirectly). + A `predicate `__ takes zero or more parameters, and its body is a condition on those parameters. The predicate may (or may not) hold. Predicates may also be `recursive `__, simply by referring to themselves (directly or indirectly). You can imagine a predicate to be a self-contained from-where-select statement, that produces an intermediate relation, or table. In this case, the ``isEmpty`` predicate will be the set of all blocks which are empty. @@ -154,7 +154,7 @@ Member predicates are inherited and can be overridden. .. note:: - `Classes `__ model sets of values from the database. A class has one or more supertypes, and inherits `member predicates `__ (methods) from each of them. Each value in a class must be in every supertype, but additional conditions can be stated in a so-called **characteristic predicate**, which looks a bit like a zero-argument constructor. + `Classes `__ model sets of values from the database. A class has one or more supertypes, and inherits `member predicates `__ (methods) from each of them. Each value in a class must be in every supertype, but additional conditions can be stated in a so-called **characteristic predicate**, which looks a bit like a zero-argument constructor. In the example, declaring a variable “EmptyBlock e” will allow it to range over only those blocks that have zero statements. diff --git a/docs/codeql/ql-training/java/query-injection-java.rst b/docs/codeql/ql-training/java/query-injection-java.rst index 92e0930d9bf..7bad1e3cbee 100644 --- a/docs/codeql/ql-training/java/query-injection-java.rst +++ b/docs/codeql/ql-training/java/query-injection-java.rst @@ -11,7 +11,7 @@ Setup For this example you should download: -- `CodeQL for Visual Studio Code `__ +- `CodeQL for Visual Studio Code `__ - `VIVO Vitro database `__ .. note:: @@ -84,7 +84,7 @@ Let’s start by looking for calls to methods with names of the form ``sparql*Qu - a ``MethodAccess``: the call to a SPARQL query method - a ``Method``: the SPARQL query method. - - The ``where`` part of the query ties these variables together using `predicates `__ defined in the `standard CodeQL library for Java `__. + - The ``where`` part of the query ties these variables together using `predicates `__ defined in the `standard CodeQL library for Java `__. CodeQL query: find string concatenation ======================================= diff --git a/docs/codeql/ql-training/slide-snippets/abstract-syntax-tree.rst b/docs/codeql/ql-training/slide-snippets/abstract-syntax-tree.rst index 09b8cf86a01..adae6c8841f 100644 --- a/docs/codeql/ql-training/slide-snippets/abstract-syntax-tree.rst +++ b/docs/codeql/ql-training/slide-snippets/abstract-syntax-tree.rst @@ -39,9 +39,9 @@ The basic representation of an analyzed program is an *abstract syntax tree (AST The following topics contain overviews of the important AST classes and CodeQL libraries for C/C++, C#, and Java: - - `CodeQL library for C/C++ `__ - - `CodeQL library for C# `__ - - `CodeQL library for Java `__ + - `CodeQL library for C/C++ `__ + - `CodeQL library for C# `__ + - `CodeQL library for Java `__ Database representations of ASTs diff --git a/docs/codeql/ql-training/slide-snippets/database-note.rst b/docs/codeql/ql-training/slide-snippets/database-note.rst index b35a1f1b9f4..2b6bcce75ab 100644 --- a/docs/codeql/ql-training/slide-snippets/database-note.rst +++ b/docs/codeql/ql-training/slide-snippets/database-note.rst @@ -4,6 +4,6 @@ You can download the database as a zip file by clicking the link on the slide ab #. Add the unzipped database to Visual Studio Code #. Upgrade the database if necessary -For further information, see `Analyzing your projects `__ in the CodeQL for Visual Studio Code help. +For further information, see `Analyzing your projects `__ in the CodeQL for Visual Studio Code help. Note that results generated in the query console are likely to differ to those generated in CodeQL for Visual Studio Code as LGTM.com analyzes the most recent revisions of each project that has been added–the CodeQL database available to download above is based on an historical version of the codebase. \ No newline at end of file diff --git a/docs/codeql/ql-training/slide-snippets/intro-ql-general.rst b/docs/codeql/ql-training/slide-snippets/intro-ql-general.rst index f07f5907c15..5ffe6b1dae3 100644 --- a/docs/codeql/ql-training/slide-snippets/intro-ql-general.rst +++ b/docs/codeql/ql-training/slide-snippets/intro-ql-general.rst @@ -103,7 +103,7 @@ Analysis overview CodeQL analysis works by extracting a queryable database from your project. For compiled languages, the tools observe an ordinary build of the source code. Each time a compiler is invoked to process a source file, a copy of that file is made, and all relevant information about the source code (syntactic data about the abstract syntax tree, semantic data like name binding and type information, data on the operation of the C preprocessor, etc.) is collected. For interpreted languages, the extractor gathers similar information by running directly on the source code. Multi-language code bases are analyzed one language at a time. - Once the extraction finishes, all this information is collected into a single `CodeQL database `__, which is then ready to query, possibly on a different machine. A copy of the source files, made at the time the database was created, is also included in the CodeQL database so analysis results can be displayed at the correct location in the code. The database schema is (source) language specific. + Once the extraction finishes, all this information is collected into a single `CodeQL database `__, which is then ready to query, possibly on a different machine. A copy of the source files, made at the time the database was created, is also included in the CodeQL database so analysis results can be displayed at the correct location in the code. The database schema is (source) language specific. Queries are written in QL and usually depend on one or more of the `standard CodeQL libraries `__ (and of course you can write your own custom libraries). They are compiled into an efficiently executable format by the QL compiler and then run on a CodeQL database by the QL evaluator, either on a remote worker machine or locally on a developer’s machine. @@ -124,7 +124,7 @@ QL is: .. note:: - QL is the high-level, object-oriented logic language that underpins all CodeQL libraries and analyses. You can learn lots more about QL by visiting the `QL language reference `__. + QL is the high-level, object-oriented logic language that underpins all CodeQL libraries and analyses. You can learn lots more about QL by visiting the `QL language reference `__. The key features of QL are: - All common logic connectives are available, including quantifiers like ``exist``, which can also introduce new variables. diff --git a/docs/codeql/ql-training/slide-snippets/local-data-flow.rst b/docs/codeql/ql-training/slide-snippets/local-data-flow.rst index f0d1dfa546f..8041c077190 100644 --- a/docs/codeql/ql-training/slide-snippets/local-data-flow.rst +++ b/docs/codeql/ql-training/slide-snippets/local-data-flow.rst @@ -70,7 +70,7 @@ Local vs global data flow For further information, see: - - `About data flow analysis `__ + - `About data flow analysis `__ .. rst-class:: background2 @@ -111,8 +111,8 @@ So all references will need to be qualified (that is, ``DataFlow::Node``) A **module** is a way of organizing QL code by grouping together related predicates, classes, and (sub-)modules. They can be either explicitly declared or implicit. A query library implicitly declares a module with the same name as the QLL file. - For further information on libraries and modules in QL, see the chapter on `Modules `__ in the QL language reference. - For further information on importing QL libraries and modules, see the chapter on `Name resolution `__ in the QL language reference. + For further information on libraries and modules in QL, see the chapter on `Modules `__ in the QL language reference. + For further information on importing QL libraries and modules, see the chapter on `Name resolution <>`__ in the QL language reference. Data flow graph =============== @@ -131,7 +131,7 @@ Data flow graph The ``DataFlow::Node`` class is shared between both the local and global data flow graphs–the primary difference is the edges, which in the “global” case can link different functions. - ``localFlowStep`` is the “single step” flow relation–that is, it describes single edges in the local data flow graph. ``localFlow`` represents the `transitive `__ closure of this relation–in other words, it contains every pair of nodes where the second node is reachable from the first in the data flow graph. + ``localFlowStep`` is the “single step” flow relation–that is, it describes single edges in the local data flow graph. ``localFlow`` represents the `transitive `__ closure of this relation–in other words, it contains every pair of nodes where the second node is reachable from the first in the data flow graph. The data flow graph is separate from the `AST `__, to allow for flexibility in how data flow is modeled. There are a small number of data flow node types–expression nodes, parameter nodes, uninitialized variable nodes, and definition by reference nodes. Each node provides mapping functions to and from the relevant AST (for example ``Expr``, ``Parameter`` etc.) or symbol table (for example ``Variable``) classes. diff --git a/docs/codeql/ql-training/template.rst b/docs/codeql/ql-training/template.rst index 4a5b9b32341..a292f50537f 100644 --- a/docs/codeql/ql-training/template.rst +++ b/docs/codeql/ql-training/template.rst @@ -36,7 +36,7 @@ Setup For this example you should download: -- `CodeQL for Visual Studio Code `__ +- `CodeQL for Visual Studio Code `__ - A CodeQL database .. note:: From 8f4df8603a04ace1b30ab3031e3009d7a3cae6e3 Mon Sep 17 00:00:00 2001 From: Robert Marsh Date: Wed, 30 Jun 2021 22:08:01 +0000 Subject: [PATCH 434/741] C++: more tests for command injection --- cpp/ql/test/include/iterator.h | 97 +++++++++++++++++ cpp/ql/test/include/string.h | 84 +++++++++++++++ cpp/ql/test/include/type_traits.h | 39 +++++-- .../CWE/CWE-078/semmle/ExecTainted/test.c | 33 ------ .../CWE/CWE-078/semmle/ExecTainted/test.cpp | 100 ++++++++++++++++++ 5 files changed, 311 insertions(+), 42 deletions(-) create mode 100644 cpp/ql/test/include/iterator.h create mode 100644 cpp/ql/test/include/string.h delete mode 100644 cpp/ql/test/query-tests/Security/CWE/CWE-078/semmle/ExecTainted/test.c create mode 100644 cpp/ql/test/query-tests/Security/CWE/CWE-078/semmle/ExecTainted/test.cpp diff --git a/cpp/ql/test/include/iterator.h b/cpp/ql/test/include/iterator.h new file mode 100644 index 00000000000..77758bfa8da --- /dev/null +++ b/cpp/ql/test/include/iterator.h @@ -0,0 +1,97 @@ +#if !defined(CODEQL_ITERATOR_H) +#define CODEQL_ITERATOR_H + +typedef unsigned long size_t; + +#include "type_traits.h" + +namespace std { + struct ptrdiff_t; + + template struct iterator_traits; + + template + struct iterator { + typedef Category iterator_category; + + iterator(); + iterator(iterator > const &other); // non-const -> const conversion constructor + + iterator &operator++(); + iterator operator++(int); + iterator &operator--(); + iterator operator--(int); + bool operator==(iterator other) const; + bool operator!=(iterator other) const; + reference_type operator*() const; + pointer_type operator->() const; + iterator operator+(int); + iterator operator-(int); + iterator &operator+=(int); + iterator &operator-=(int); + int operator-(iterator); + reference_type operator[](int); + }; + + struct input_iterator_tag {}; + struct forward_iterator_tag : public input_iterator_tag {}; + struct bidirectional_iterator_tag : public forward_iterator_tag {}; + struct random_access_iterator_tag : public bidirectional_iterator_tag {}; + + struct output_iterator_tag {}; + + template + class back_insert_iterator { + protected: + Container* container = nullptr; + public: + using iterator_category = output_iterator_tag; + using value_type = void; + using difference_type = ptrdiff_t; + using pointer = void; + using reference = void; + using container_type = Container; + constexpr back_insert_iterator() noexcept = default; + constexpr explicit back_insert_iterator(Container& x); + back_insert_iterator& operator=(const typename Container::value_type& value); + back_insert_iterator& operator=(typename Container::value_type&& value); + back_insert_iterator& operator*(); + back_insert_iterator& operator++(); + back_insert_iterator operator++(int); + }; + + template + constexpr back_insert_iterator back_inserter(Container& x) { + return back_insert_iterator(x); + } + + template + class front_insert_iterator { + protected: + Container* container = nullptr; + public: + using iterator_category = output_iterator_tag; + using value_type = void; + using difference_type = ptrdiff_t; + using pointer = void; + using reference = void; + using container_type = Container; + constexpr front_insert_iterator() noexcept = default; + constexpr explicit front_insert_iterator(Container& x); + constexpr front_insert_iterator& operator=(const typename Container::value_type& value); + constexpr front_insert_iterator& operator=(typename Container::value_type&& value); + constexpr front_insert_iterator& operator*(); + constexpr front_insert_iterator& operator++(); + constexpr front_insert_iterator operator++(int); + }; + template + constexpr front_insert_iterator front_inserter(Container& x) { + return front_insert_iterator(x); + } +} + +#endif \ No newline at end of file diff --git a/cpp/ql/test/include/string.h b/cpp/ql/test/include/string.h new file mode 100644 index 00000000000..ea4fdcc7135 --- /dev/null +++ b/cpp/ql/test/include/string.h @@ -0,0 +1,84 @@ +#if !defined(CODEQL_STRING_H) +#define CODEQL_STRING_H + +#include "iterator.h" + +namespace std +{ + template struct char_traits; + + typedef size_t streamsize; + + template class allocator { + public: + allocator() throw(); + typedef size_t size_type; + }; + + template, class Allocator = allocator > + class basic_string { + public: + using value_type = charT; + using reference = value_type&; + using const_reference = const value_type&; + typedef typename Allocator::size_type size_type; + static const size_type npos = -1; + + explicit basic_string(const Allocator& a = Allocator()); + basic_string(const charT* s, const Allocator& a = Allocator()); + template basic_string(InputIterator begin, InputIterator end, const Allocator& a = Allocator()); + + const charT* c_str() const; + charT* data() noexcept; + size_t length() const; + + typedef std::iterator iterator; + typedef std::iterator const_iterator; + + iterator begin(); + iterator end(); + const_iterator begin() const; + const_iterator end() const; + const_iterator cbegin() const; + const_iterator cend() const; + + void push_back(charT c); + + const charT& front() const; + charT& front(); + const charT& back() const; + charT& back(); + + const_reference operator[](size_type pos) const; + reference operator[](size_type pos); + const_reference at(size_type n) const; + reference at(size_type n); + template basic_string& operator+=(const T& t); + basic_string& operator+=(const charT* s); + basic_string& append(const basic_string& str); + basic_string& append(const charT* s); + basic_string& append(size_type n, charT c); + template basic_string& append(InputIterator first, InputIterator last); + basic_string& assign(const basic_string& str); + basic_string& assign(size_type n, charT c); + template basic_string& assign(InputIterator first, InputIterator last); + basic_string& insert(size_type pos, const basic_string& str); + basic_string& insert(size_type pos, size_type n, charT c); + basic_string& insert(size_type pos, const charT* s); + iterator insert(const_iterator p, size_type n, charT c); + template iterator insert(const_iterator p, InputIterator first, InputIterator last); + basic_string& replace(size_type pos1, size_type n1, const basic_string& str); + basic_string& replace(size_type pos1, size_type n1, size_type n2, charT c); + size_type copy(charT* s, size_type n, size_type pos = 0) const; + void clear() noexcept; + basic_string substr(size_type pos = 0, size_type n = npos) const; + void swap(basic_string& s) noexcept/*(allocator_traits::propagate_on_container_swap::value || allocator_traits::is_always_equal::value)*/; + }; + + template basic_string operator+(const basic_string& lhs, const basic_string& rhs); + template basic_string operator+(const basic_string& lhs, const charT* rhs); + + typedef basic_string string; +} + +#endif \ No newline at end of file diff --git a/cpp/ql/test/include/type_traits.h b/cpp/ql/test/include/type_traits.h index 19bdd46906b..4f4db132334 100644 --- a/cpp/ql/test/include/type_traits.h +++ b/cpp/ql/test/include/type_traits.h @@ -2,20 +2,41 @@ #define CODEQL_TYPE_TRAITS_H namespace std { - template - struct remove_reference { + template + struct remove_const { typedef T type; }; + + template + struct remove_const { typedef T type; }; + + // `remove_const_t` removes any `const` specifier from `T` + template + using remove_const_t = typename remove_const::type; + + template + struct remove_reference { typedef T type; }; + + template + struct remove_reference { typedef T type; }; + + template + struct remove_reference { typedef T type; }; + + // `remove_reference_t` removes any `&` from `T` + template + using remove_reference_t = typename remove_reference::type; + + template + struct decay_impl { typedef T type; }; - template - struct remove_reference { - typedef T type; + template + struct decay_impl { + typedef T* type; }; - template - struct remove_reference { - typedef T type; - }; + template + using decay_t = typename decay_impl>::type; } #endif diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-078/semmle/ExecTainted/test.c b/cpp/ql/test/query-tests/Security/CWE/CWE-078/semmle/ExecTainted/test.c deleted file mode 100644 index c3155787368..00000000000 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-078/semmle/ExecTainted/test.c +++ /dev/null @@ -1,33 +0,0 @@ -// Semmle test case for rule ExecTainted.ql (Uncontrolled data used in OS command) -// Associated with CWE-078: OS Command Injection. http://cwe.mitre.org/data/definitions/78.html - -///// Library routines ///// - -int sprintf(char *s, const char *format, ...); -int system(const char *string); - -extern void encodeShellString(char *shellStr, int maxChars, const char* cStr); - -///// Test code ///// - -int main(int argc, char** argv) { - char *userName = argv[2]; - - { - // BAD: a string from the user is injected directly into - // a command. - char command1[1000] = {0}; - sprintf(command1, "userinfo -v \"%s\"", userName); - system(command1); - } - - { - // GOOD: the user string is encoded by a library routine. - char userNameQuoted[1000] = {0}; - encodeShellString(userNameQuoted, 1000, userName); - char command2[1000] = {0}; - sprintf(command2, "userinfo -v %s", userNameQuoted); - system(command2); - } -} - diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-078/semmle/ExecTainted/test.cpp b/cpp/ql/test/query-tests/Security/CWE/CWE-078/semmle/ExecTainted/test.cpp new file mode 100644 index 00000000000..b01b0dfa72d --- /dev/null +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-078/semmle/ExecTainted/test.cpp @@ -0,0 +1,100 @@ +// Semmle test case for rule ExecTainted.ql (Uncontrolled data used in OS command) +// Associated with CWE-078: OS Command Injection. http://cwe.mitre.org/data/definitions/78.html + +///// Library routines ///// + +int sprintf(char *s, const char *format, ...); +int system(const char *string); + +char *getenv(char *var); + +extern void encodeShellString(char *shellStr, int maxChars, const char* cStr); +#include "../../../../../../include/string.h" +///// Test code ///// + +int main(int argc, char** argv) { + char *userName = argv[2]; + + { + // BAD: a string from the user is injected directly into + // a command. + char command1[1000] = {0}; + sprintf(command1, "userinfo -v \"%s\"", userName); + system(command1); + } + + { + // GOOD: the user string is encoded by a library routine. + char userNameQuoted[1000] = {0}; + encodeShellString(userNameQuoted, 1000, userName); + char command2[1000] = {0}; + sprintf(command2, "userinfo -v %s", userNameQuoted); + system(command2); + } +} + +void test2(char* arg2) { + // GOOD?: the user string is the *first* part of the command, like $CC in many environments + char *envCC = getenv("CC"); + + char command[1000]; + sprintf("%s %s", envCC, arg2); + system(command); +} + +void test3(char* arg1) { + // GOOD?: the user string is a `$CFLAGS` environment variable + char *envCflags = getenv("CFLAGS"); + + char command[1000]; + sprintf(command, "%s %s", arg1, envCflags); + system(command); +} + +typedef unsigned long size_t; +typedef void FILE; +size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream); +char *strncat(char *s1, const char *s2, size_t n); + +void test4(FILE *f) { + // BAD: the user string is injected directly into a command + char command[1000] = "mv ", filename[1000]; + fread(filename, 1, 1000, f); + + strncat(command, filename, 1000); + system(command); +} + +void test5(FILE *f) { + // GOOD?: the user string is the start of a command + char command[1000], filename[1000] = " test.txt"; + fread(command, 1, 1000, f); + + strncat(command, filename, 1000); + system(command); +} + +int execl(char *path, char *arg1, ...); + +void test6(FILE *f) { + // BAD: the user string is injected directly into a command + char command[1000] = "mv ", filename[1000]; + fread(filename, 1, 1000, f); + + strncat(command, filename, 1000); + execl("/bin/sh", "sh", "-c", command); +} + +void test7(FILE *f) { + // GOOD [FALSE POSITIVE]: the user string is a positional argument to a shell script + char path[1000] = "/home/me/", filename[1000]; + fread(filename, 1, 1000, f); + + strncat(path, filename, 1000); + execl("/bin/sh", "sh", "-c", "script.sh", path); +} + +// TODO: concatenations via operator+, more sinks, test for call context sensitivity at +// concatenation site + +// open question: do we want to report certain sources even when they're the start of the string? From 6f408f949cd0d7a8a8d0f1389ace6c5cfa77d7e7 Mon Sep 17 00:00:00 2001 From: Robert Marsh Date: Wed, 30 Jun 2021 22:09:34 +0000 Subject: [PATCH 435/741] C++: Refactor ExecTainted.ql to need concatenation This makes ExecTainted report results only when the tainted value does not become the start of the string which is eventually run as a shell command. The theory is that those cases are likely to be deliberate, and part of the expected threat model of the program (e.g. $CC in make). This lines up better with the results I considered fixable true positives in LGTM testing --- cpp/ql/lib/semmle/code/cpp/commons/Printf.qll | 7 + cpp/ql/src/Security/CWE/CWE-078/ExecTainted.c | 2 +- .../src/Security/CWE/CWE-078/ExecTainted.ql | 118 +++++- .../semmle/ExecTainted/ExecTainted.expected | 393 +++++++++++++++++- 4 files changed, 509 insertions(+), 11 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/commons/Printf.qll b/cpp/ql/lib/semmle/code/cpp/commons/Printf.qll index ef5f5511f6d..b4e5a5c1d69 100644 --- a/cpp/ql/lib/semmle/code/cpp/commons/Printf.qll +++ b/cpp/ql/lib/semmle/code/cpp/commons/Printf.qll @@ -253,6 +253,13 @@ class FormattingFunctionCall extends Expr { // format arguments must be known exists(getTarget().(FormattingFunction).getFirstFormatArgumentIndex()) } + + /** + * + */ + Expr getOutputArgument(boolean isStream) { + result = this.(Call).getArgument(this.(Call).getTarget().(FormattingFunction).getOutputParameterIndex(isStream)) + } } /** diff --git a/cpp/ql/src/Security/CWE/CWE-078/ExecTainted.c b/cpp/ql/src/Security/CWE/CWE-078/ExecTainted.c index da5950c5fe5..c61adeee651 100644 --- a/cpp/ql/src/Security/CWE/CWE-078/ExecTainted.c +++ b/cpp/ql/src/Security/CWE/CWE-078/ExecTainted.c @@ -9,7 +9,7 @@ int main(int argc, char** argv) { system(command1); } - { + { // GOOD: the user string is encoded by a library routine. char userNameQuoted[1000] = {0}; encodeShellString(userNameQuoted, 1000, userName); diff --git a/cpp/ql/src/Security/CWE/CWE-078/ExecTainted.ql b/cpp/ql/src/Security/CWE/CWE-078/ExecTainted.ql index 5f516eec83b..e05dc87742d 100644 --- a/cpp/ql/src/Security/CWE/CWE-078/ExecTainted.ql +++ b/cpp/ql/src/Security/CWE/CWE-078/ExecTainted.ql @@ -3,7 +3,7 @@ * @description Using user-supplied data in an OS command, without * neutralizing special elements, can make code vulnerable * to command injection. - * @kind problem + * @kind path-problem * @problem.severity error * @security-severity 9.8 * @precision low @@ -16,13 +16,113 @@ import cpp import semmle.code.cpp.security.CommandExecution import semmle.code.cpp.security.Security -import semmle.code.cpp.security.TaintTracking +import semmle.code.cpp.ir.dataflow.TaintTracking +import semmle.code.cpp.ir.dataflow.TaintTracking2 +import semmle.code.cpp.ir.IR +import semmle.code.cpp.security.FlowSources +import semmle.code.cpp.models.implementations.Strcat -from Expr taintedArg, Expr taintSource, string taintCause, string callChain +Expr sinkAsArgumentIndirection(DataFlow::Node sink) { + result = + sink.asOperand() + .(SideEffectOperand) + .getAddressOperand() + .getAnyDef() + .getUnconvertedResultExpression() +} + +predicate interestingConcatenation(DataFlow::Node fst, DataFlow::Node snd) { + exists(FormattingFunctionCall call, int index, FormatLiteral literal | + sinkAsArgumentIndirection(fst) = call.getConversionArgument(index) and + snd.asDefiningArgument() = call.getOutputArgument(false) and + literal = call.getFormat() and + not literal.getConvSpecOffset(index) = 0 and + ( + literal.getConversionType(index) instanceof CharPointerType + or + literal.getConversionType(index).(PointerType).getBaseType() instanceof Wchar_t + ) + ) + or + // strcat and friends + exists(StrcatFunction strcatFunc, CallInstruction call, ReadSideEffectInstruction rse | + call.getStaticCallTarget() = strcatFunc and + rse.getArgumentDef() = call.getArgument(strcatFunc.getParamSrc()) and + fst.asOperand() = rse.getSideEffectOperand() and + snd.asInstruction().(WriteSideEffectInstruction).getDestinationAddress() = + call.getArgument(strcatFunc.getParamDest()) + ) + or + exists(CallInstruction call, Operator op, ReadSideEffectInstruction rse | + call.getStaticCallTarget() = op and + op.hasQualifiedName("std", "operator+") and + op.getType().(UserType).hasQualifiedName("std", "basic_string") and + call.getArgument(1) = rse.getArgumentOperand().getAnyDef() and // left operand + fst.asOperand() = rse.getSideEffectOperand() and + call = + snd.asInstruction() + ) +} + +// TODO: maybe we can drop this? +class TaintToConcatenationConfiguration extends TaintTracking::Configuration { + TaintToConcatenationConfiguration() { this = "TaintToConcatenationConfiguration" } + + override predicate isSource(DataFlow::Node source) { + source instanceof FlowSource + } + + override predicate isSink(DataFlow::Node sink) { + interestingConcatenation(sink, _) + } + + override int explorationLimit() { + result = 10 + } +} + +class ExecTaintConfiguration extends TaintTracking::Configuration { + ExecTaintConfiguration() { this = "ExecTaintConfiguration" } + + override predicate isSource(DataFlow::Node source) { + interestingConcatenation(_, source) + } + + override predicate isSink(DataFlow::Node sink) { + shellCommand(sinkAsArgumentIndirection(sink), _) + } + + override predicate isSanitizerOut(DataFlow::Node node) { + isSink(node) // Prevent duplicates along a call chain, since `shellCommand` will include wrappers + } +} + +query predicate nodes = DataFlow::PathGraph::nodes/3; + +query predicate edges(DataFlow::PathNode a, DataFlow::PathNode b) { + DataFlow::PathGraph::edges(a, b) or + interestingConcatenation(a.getNode(), b.getNode()) and + a.getConfiguration() instanceof TaintToConcatenationConfiguration and + b.getConfiguration() instanceof ExecTaintConfiguration +} + +query predicate pathExplore(DataFlow::PartialPathNode source, DataFlow::PartialPathNode node, int dist) { + any(TaintToConcatenationConfiguration cfg).hasPartialFlow(source, node, dist) +} + +query predicate pathExploreRev(DataFlow::PartialPathNode node, DataFlow::PartialPathNode sink, int dist) { + any(TaintToConcatenationConfiguration cfg).hasPartialFlowRev(node, sink, dist) +} + +from + DataFlow::PathNode sourceNode, DataFlow::PathNode concatSink, DataFlow::PathNode concatSource, DataFlow::PathNode sinkNode, string taintCause, string callChain, + TaintToConcatenationConfiguration conf1, ExecTaintConfiguration conf2 where - shellCommand(taintedArg, callChain) and - tainted(taintSource, taintedArg) and - isUserInput(taintSource, taintCause) -select taintedArg, - "This argument to an OS command is derived from $@ and then passed to " + callChain, taintSource, - "user input (" + taintCause + ")" + taintCause = sourceNode.getNode().(FlowSource).getSourceType() and + conf1.hasFlowPath(sourceNode, concatSink) and // TODO: can we link these better? + interestingConcatenation(concatSink.getNode(), concatSource.getNode()) and + conf2.hasFlowPath(concatSource, sinkNode) and + shellCommand(sinkAsArgumentIndirection(sinkNode.getNode()), callChain) +select sinkAsArgumentIndirection(sinkNode.getNode()), sourceNode, sinkNode, + "This argument to an OS command is derived from $@, dangerously concatenated into $@, and then passed to " + callChain, sourceNode, + "user input (" + taintCause + ")", concatSource, concatSource.toString() diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-078/semmle/ExecTainted/ExecTainted.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-078/semmle/ExecTainted/ExecTainted.expected index a78a7a99d90..1b9f83b6fc6 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-078/semmle/ExecTainted/ExecTainted.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-078/semmle/ExecTainted/ExecTainted.expected @@ -1 +1,392 @@ -| test.c:21:12:21:19 | command1 | This argument to an OS command is derived from $@ and then passed to system(string) | test.c:14:20:14:23 | argv | user input (argv) | +edges +| test.cpp:16:20:16:23 | argv | test.cpp:16:20:16:26 | Store | +| test.cpp:16:20:16:23 | argv | test.cpp:16:20:16:26 | access to array | +| test.cpp:16:20:16:23 | argv | test.cpp:22:45:22:52 | userName | +| test.cpp:16:20:16:23 | argv | test.cpp:22:45:22:52 | userName indirection | +| test.cpp:16:20:16:23 | argv | test.cpp:22:45:22:52 | userName indirection | +| test.cpp:16:20:16:23 | argv | test.cpp:23:12:23:19 | (const char *)... | +| test.cpp:16:20:16:23 | argv | test.cpp:23:12:23:19 | command1 indirection | +| test.cpp:16:20:16:23 | argv | test.cpp:29:45:29:52 | (const char *)... | +| test.cpp:16:20:16:23 | argv | test.cpp:29:45:29:52 | userName | +| test.cpp:16:20:16:23 | argv | test.cpp:29:45:29:52 | userName indirection | +| test.cpp:22:13:22:20 | sprintf output argument | test.cpp:23:12:23:19 | command1 indirection | +| test.cpp:22:45:22:52 | userName indirection | test.cpp:22:13:22:20 | sprintf output argument | +| test.cpp:22:45:22:52 | userName indirection | test.cpp:22:13:22:20 | sprintf output argument | +| test.cpp:31:13:31:20 | sprintf output argument | test.cpp:32:12:32:19 | command2 indirection | +| test.cpp:38:17:38:22 | call to getenv | test.cpp:38:17:38:22 | Store | +| test.cpp:38:17:38:22 | call to getenv | test.cpp:41:20:41:24 | (const char *)... | +| test.cpp:38:17:38:22 | call to getenv | test.cpp:41:20:41:24 | envCC | +| test.cpp:38:17:38:22 | call to getenv | test.cpp:41:20:41:24 | envCC indirection | +| test.cpp:47:21:47:26 | call to getenv | test.cpp:47:21:47:26 | Store | +| test.cpp:47:21:47:26 | call to getenv | test.cpp:50:35:50:43 | envCflags | +| test.cpp:47:21:47:26 | call to getenv | test.cpp:50:35:50:43 | envCflags indirection | +| test.cpp:47:21:47:26 | call to getenv | test.cpp:50:35:50:43 | envCflags indirection | +| test.cpp:47:21:47:26 | call to getenv | test.cpp:51:10:51:16 | (const char *)... | +| test.cpp:47:21:47:26 | call to getenv | test.cpp:51:10:51:16 | command indirection | +| test.cpp:50:11:50:17 | sprintf output argument | test.cpp:51:10:51:16 | command indirection | +| test.cpp:50:35:50:43 | envCflags indirection | test.cpp:50:11:50:17 | sprintf output argument | +| test.cpp:50:35:50:43 | envCflags indirection | test.cpp:50:11:50:17 | sprintf output argument | +| test.cpp:62:9:62:16 | (void *)... | test.cpp:62:9:62:16 | filename indirection | +| test.cpp:62:9:62:16 | fread output argument | test.cpp:64:20:64:27 | (const char *)... | +| test.cpp:62:9:62:16 | fread output argument | test.cpp:64:20:64:27 | filename indirection | +| test.cpp:62:9:62:16 | fread output argument | test.cpp:64:20:64:27 | filename indirection | +| test.cpp:62:9:62:16 | fread output argument | test.cpp:65:10:65:16 | (const char *)... | +| test.cpp:62:9:62:16 | fread output argument | test.cpp:65:10:65:16 | command indirection | +| test.cpp:64:11:64:17 | strncat output argument | test.cpp:65:10:65:16 | command indirection | +| test.cpp:64:20:64:27 | filename indirection | test.cpp:64:11:64:17 | strncat output argument | +| test.cpp:64:20:64:27 | filename indirection | test.cpp:64:11:64:17 | strncat output argument | +| test.cpp:71:9:71:15 | (void *)... | test.cpp:71:9:71:15 | command indirection | +| test.cpp:71:9:71:15 | fread output argument | test.cpp:73:11:73:17 | array to pointer conversion | +| test.cpp:71:9:71:15 | fread output argument | test.cpp:73:11:73:17 | command indirection | +| test.cpp:71:9:71:15 | fread output argument | test.cpp:74:10:74:16 | (const char *)... | +| test.cpp:71:9:71:15 | fread output argument | test.cpp:74:10:74:16 | command indirection | +| test.cpp:73:11:73:17 | strncat output argument | test.cpp:74:10:74:16 | command indirection | +| test.cpp:82:9:82:16 | (void *)... | test.cpp:82:9:82:16 | filename indirection | +| test.cpp:82:9:82:16 | fread output argument | test.cpp:84:20:84:27 | (const char *)... | +| test.cpp:82:9:82:16 | fread output argument | test.cpp:84:20:84:27 | filename indirection | +| test.cpp:82:9:82:16 | fread output argument | test.cpp:84:20:84:27 | filename indirection | +| test.cpp:82:9:82:16 | fread output argument | test.cpp:85:32:85:38 | array to pointer conversion | +| test.cpp:82:9:82:16 | fread output argument | test.cpp:85:32:85:38 | command indirection | +| test.cpp:84:11:84:17 | strncat output argument | test.cpp:85:32:85:38 | command indirection | +| test.cpp:84:20:84:27 | filename indirection | test.cpp:84:11:84:17 | strncat output argument | +| test.cpp:84:20:84:27 | filename indirection | test.cpp:84:11:84:17 | strncat output argument | +| test.cpp:91:9:91:16 | (void *)... | test.cpp:91:9:91:16 | filename indirection | +| test.cpp:91:9:91:16 | fread output argument | test.cpp:93:17:93:24 | (const char *)... | +| test.cpp:91:9:91:16 | fread output argument | test.cpp:93:17:93:24 | filename indirection | +| test.cpp:91:9:91:16 | fread output argument | test.cpp:93:17:93:24 | filename indirection | +| test.cpp:91:9:91:16 | fread output argument | test.cpp:94:45:94:48 | array to pointer conversion | +| test.cpp:91:9:91:16 | fread output argument | test.cpp:94:45:94:48 | path indirection | +| test.cpp:93:11:93:14 | strncat output argument | test.cpp:94:45:94:48 | path indirection | +| test.cpp:93:17:93:24 | filename indirection | test.cpp:93:11:93:14 | strncat output argument | +| test.cpp:93:17:93:24 | filename indirection | test.cpp:93:11:93:14 | strncat output argument | +pathExplore +| test.cpp:16:20:16:23 | argv | test.cpp:16:20:16:26 | Address | 0 | +| test.cpp:16:20:16:23 | argv | test.cpp:16:20:16:26 | Left | 0 | +| test.cpp:16:20:16:23 | argv | test.cpp:16:20:16:26 | PointerAdd | 0 | +| test.cpp:16:20:16:23 | argv | test.cpp:16:20:16:26 | Store | 0 | +| test.cpp:16:20:16:23 | argv | test.cpp:16:20:16:26 | StoreValue | 0 | +| test.cpp:16:20:16:23 | argv | test.cpp:16:20:16:26 | access to array | 0 | +| test.cpp:16:20:16:23 | argv | test.cpp:22:5:22:11 | userName | 0 | +| test.cpp:16:20:16:23 | argv | test.cpp:22:13:22:20 | Chi | 0 | +| test.cpp:16:20:16:23 | argv | test.cpp:22:13:22:20 | ChiPartial | 0 | +| test.cpp:16:20:16:23 | argv | test.cpp:22:13:22:20 | sprintf output argument | 0 | +| test.cpp:16:20:16:23 | argv | test.cpp:22:45:22:52 | Address | 0 | +| test.cpp:16:20:16:23 | argv | test.cpp:22:45:22:52 | Address | 0 | +| test.cpp:16:20:16:23 | argv | test.cpp:22:45:22:52 | Load | 0 | +| test.cpp:16:20:16:23 | argv | test.cpp:22:45:22:52 | userName | 0 | +| test.cpp:16:20:16:23 | argv | test.cpp:22:45:22:52 | userName indirection | 0 | +| test.cpp:16:20:16:23 | argv | test.cpp:23:5:23:10 | command1 | 0 | +| test.cpp:16:20:16:23 | argv | test.cpp:23:12:23:19 | (const char *)... | 0 | +| test.cpp:16:20:16:23 | argv | test.cpp:23:12:23:19 | Address | 0 | +| test.cpp:16:20:16:23 | argv | test.cpp:23:12:23:19 | command1 indirection | 0 | +| test.cpp:16:20:16:23 | argv | test.cpp:29:5:29:21 | userName | 0 | +| test.cpp:16:20:16:23 | argv | test.cpp:29:45:29:52 | (const char *)... | 0 | +| test.cpp:16:20:16:23 | argv | test.cpp:29:45:29:52 | Address | 0 | +| test.cpp:16:20:16:23 | argv | test.cpp:29:45:29:52 | Load | 0 | +| test.cpp:16:20:16:23 | argv | test.cpp:29:45:29:52 | Unary | 0 | +| test.cpp:16:20:16:23 | argv | test.cpp:29:45:29:52 | userName | 0 | +| test.cpp:16:20:16:23 | argv | test.cpp:29:45:29:52 | userName indirection | 0 | +| test.cpp:38:17:38:22 | call to getenv | test.cpp:38:17:38:22 | Store | 0 | +| test.cpp:38:17:38:22 | call to getenv | test.cpp:38:17:38:22 | StoreValue | 0 | +| test.cpp:38:17:38:22 | call to getenv | test.cpp:41:3:41:9 | envCC | 0 | +| test.cpp:38:17:38:22 | call to getenv | test.cpp:41:11:41:17 | ChiPartial | 0 | +| test.cpp:38:17:38:22 | call to getenv | test.cpp:41:11:41:17 | sprintf output argument | 0 | +| test.cpp:38:17:38:22 | call to getenv | test.cpp:41:20:41:24 | (const char *)... | 0 | +| test.cpp:38:17:38:22 | call to getenv | test.cpp:41:20:41:24 | Address | 0 | +| test.cpp:38:17:38:22 | call to getenv | test.cpp:41:20:41:24 | Load | 0 | +| test.cpp:38:17:38:22 | call to getenv | test.cpp:41:20:41:24 | Unary | 0 | +| test.cpp:38:17:38:22 | call to getenv | test.cpp:41:20:41:24 | envCC | 0 | +| test.cpp:38:17:38:22 | call to getenv | test.cpp:41:20:41:24 | envCC indirection | 0 | +| test.cpp:47:21:47:26 | call to getenv | test.cpp:47:21:47:26 | Store | 0 | +| test.cpp:47:21:47:26 | call to getenv | test.cpp:47:21:47:26 | StoreValue | 0 | +| test.cpp:47:21:47:26 | call to getenv | test.cpp:50:3:50:9 | envCflags | 0 | +| test.cpp:47:21:47:26 | call to getenv | test.cpp:50:11:50:17 | Chi | 0 | +| test.cpp:47:21:47:26 | call to getenv | test.cpp:50:11:50:17 | ChiPartial | 0 | +| test.cpp:47:21:47:26 | call to getenv | test.cpp:50:11:50:17 | sprintf output argument | 0 | +| test.cpp:47:21:47:26 | call to getenv | test.cpp:50:35:50:43 | Address | 0 | +| test.cpp:47:21:47:26 | call to getenv | test.cpp:50:35:50:43 | Address | 0 | +| test.cpp:47:21:47:26 | call to getenv | test.cpp:50:35:50:43 | Load | 0 | +| test.cpp:47:21:47:26 | call to getenv | test.cpp:50:35:50:43 | envCflags | 0 | +| test.cpp:47:21:47:26 | call to getenv | test.cpp:50:35:50:43 | envCflags indirection | 0 | +| test.cpp:47:21:47:26 | call to getenv | test.cpp:51:3:51:8 | command | 0 | +| test.cpp:47:21:47:26 | call to getenv | test.cpp:51:10:51:16 | (const char *)... | 0 | +| test.cpp:47:21:47:26 | call to getenv | test.cpp:51:10:51:16 | Address | 0 | +| test.cpp:47:21:47:26 | call to getenv | test.cpp:51:10:51:16 | command indirection | 0 | +| test.cpp:62:9:62:16 | fread output argument | test.cpp:62:9:62:16 | Chi | 0 | +| test.cpp:62:9:62:16 | fread output argument | test.cpp:62:9:62:16 | ChiPartial | 0 | +| test.cpp:62:9:62:16 | fread output argument | test.cpp:64:3:64:9 | call to strncat | 0 | +| test.cpp:62:9:62:16 | fread output argument | test.cpp:64:3:64:9 | filename | 0 | +| test.cpp:62:9:62:16 | fread output argument | test.cpp:64:11:64:17 | Chi | 0 | +| test.cpp:62:9:62:16 | fread output argument | test.cpp:64:11:64:17 | ChiPartial | 0 | +| test.cpp:62:9:62:16 | fread output argument | test.cpp:64:11:64:17 | strncat output argument | 0 | +| test.cpp:62:9:62:16 | fread output argument | test.cpp:64:20:64:27 | (const char *)... | 0 | +| test.cpp:62:9:62:16 | fread output argument | test.cpp:64:20:64:27 | Address | 0 | +| test.cpp:62:9:62:16 | fread output argument | test.cpp:64:20:64:27 | filename indirection | 0 | +| test.cpp:62:9:62:16 | fread output argument | test.cpp:65:3:65:8 | command | 0 | +| test.cpp:62:9:62:16 | fread output argument | test.cpp:65:10:65:16 | (const char *)... | 0 | +| test.cpp:62:9:62:16 | fread output argument | test.cpp:65:10:65:16 | Address | 0 | +| test.cpp:62:9:62:16 | fread output argument | test.cpp:65:10:65:16 | command indirection | 0 | +| test.cpp:71:9:71:15 | fread output argument | test.cpp:71:9:71:15 | Chi | 0 | +| test.cpp:71:9:71:15 | fread output argument | test.cpp:71:9:71:15 | ChiPartial | 0 | +| test.cpp:71:9:71:15 | fread output argument | test.cpp:73:3:73:9 | call to strncat | 0 | +| test.cpp:71:9:71:15 | fread output argument | test.cpp:73:3:73:9 | command | 0 | +| test.cpp:71:9:71:15 | fread output argument | test.cpp:73:11:73:17 | Address | 0 | +| test.cpp:71:9:71:15 | fread output argument | test.cpp:73:11:73:17 | Address | 0 | +| test.cpp:71:9:71:15 | fread output argument | test.cpp:73:11:73:17 | Chi | 0 | +| test.cpp:71:9:71:15 | fread output argument | test.cpp:73:11:73:17 | ChiPartial | 0 | +| test.cpp:71:9:71:15 | fread output argument | test.cpp:73:11:73:17 | ChiTotal | 0 | +| test.cpp:71:9:71:15 | fread output argument | test.cpp:73:11:73:17 | array to pointer conversion | 0 | +| test.cpp:71:9:71:15 | fread output argument | test.cpp:73:11:73:17 | command indirection | 0 | +| test.cpp:71:9:71:15 | fread output argument | test.cpp:73:11:73:17 | strncat output argument | 0 | +| test.cpp:71:9:71:15 | fread output argument | test.cpp:74:3:74:8 | command | 0 | +| test.cpp:71:9:71:15 | fread output argument | test.cpp:74:10:74:16 | (const char *)... | 0 | +| test.cpp:71:9:71:15 | fread output argument | test.cpp:74:10:74:16 | Address | 0 | +| test.cpp:71:9:71:15 | fread output argument | test.cpp:74:10:74:16 | command indirection | 0 | +| test.cpp:82:9:82:16 | fread output argument | test.cpp:82:9:82:16 | Chi | 0 | +| test.cpp:82:9:82:16 | fread output argument | test.cpp:82:9:82:16 | ChiPartial | 0 | +| test.cpp:82:9:82:16 | fread output argument | test.cpp:84:3:84:9 | call to strncat | 0 | +| test.cpp:82:9:82:16 | fread output argument | test.cpp:84:3:84:9 | filename | 0 | +| test.cpp:82:9:82:16 | fread output argument | test.cpp:84:11:84:17 | Chi | 0 | +| test.cpp:82:9:82:16 | fread output argument | test.cpp:84:11:84:17 | ChiPartial | 0 | +| test.cpp:82:9:82:16 | fread output argument | test.cpp:84:11:84:17 | strncat output argument | 0 | +| test.cpp:82:9:82:16 | fread output argument | test.cpp:84:20:84:27 | (const char *)... | 0 | +| test.cpp:82:9:82:16 | fread output argument | test.cpp:84:20:84:27 | Address | 0 | +| test.cpp:82:9:82:16 | fread output argument | test.cpp:84:20:84:27 | filename indirection | 0 | +| test.cpp:82:9:82:16 | fread output argument | test.cpp:85:3:85:7 | command | 0 | +| test.cpp:82:9:82:16 | fread output argument | test.cpp:85:32:85:38 | Address | 0 | +| test.cpp:82:9:82:16 | fread output argument | test.cpp:85:32:85:38 | Address | 0 | +| test.cpp:82:9:82:16 | fread output argument | test.cpp:85:32:85:38 | Chi | 0 | +| test.cpp:82:9:82:16 | fread output argument | test.cpp:85:32:85:38 | ChiTotal | 0 | +| test.cpp:82:9:82:16 | fread output argument | test.cpp:85:32:85:38 | array to pointer conversion | 0 | +| test.cpp:82:9:82:16 | fread output argument | test.cpp:85:32:85:38 | command indirection | 0 | +| test.cpp:91:9:91:16 | fread output argument | test.cpp:91:9:91:16 | Chi | 0 | +| test.cpp:91:9:91:16 | fread output argument | test.cpp:91:9:91:16 | ChiPartial | 0 | +| test.cpp:91:9:91:16 | fread output argument | test.cpp:93:3:93:9 | call to strncat | 0 | +| test.cpp:91:9:91:16 | fread output argument | test.cpp:93:3:93:9 | filename | 0 | +| test.cpp:91:9:91:16 | fread output argument | test.cpp:93:11:93:14 | Chi | 0 | +| test.cpp:91:9:91:16 | fread output argument | test.cpp:93:11:93:14 | ChiPartial | 0 | +| test.cpp:91:9:91:16 | fread output argument | test.cpp:93:11:93:14 | strncat output argument | 0 | +| test.cpp:91:9:91:16 | fread output argument | test.cpp:93:17:93:24 | (const char *)... | 0 | +| test.cpp:91:9:91:16 | fread output argument | test.cpp:93:17:93:24 | Address | 0 | +| test.cpp:91:9:91:16 | fread output argument | test.cpp:93:17:93:24 | filename indirection | 0 | +| test.cpp:91:9:91:16 | fread output argument | test.cpp:94:3:94:7 | path | 0 | +| test.cpp:91:9:91:16 | fread output argument | test.cpp:94:45:94:48 | Address | 0 | +| test.cpp:91:9:91:16 | fread output argument | test.cpp:94:45:94:48 | Address | 0 | +| test.cpp:91:9:91:16 | fread output argument | test.cpp:94:45:94:48 | Chi | 0 | +| test.cpp:91:9:91:16 | fread output argument | test.cpp:94:45:94:48 | ChiTotal | 0 | +| test.cpp:91:9:91:16 | fread output argument | test.cpp:94:45:94:48 | array to pointer conversion | 0 | +| test.cpp:91:9:91:16 | fread output argument | test.cpp:94:45:94:48 | path indirection | 0 | +pathExploreRev +| test.cpp:15:27:15:30 | *argv | test.cpp:22:45:22:52 | userName indirection | 0 | +| test.cpp:15:27:15:30 | *argv [[]] | test.cpp:22:45:22:52 | userName indirection | 0 | +| test.cpp:15:27:15:30 | Address | test.cpp:22:45:22:52 | userName indirection | 0 | +| test.cpp:15:27:15:30 | Address | test.cpp:22:45:22:52 | userName indirection | 0 | +| test.cpp:15:27:15:30 | Load | test.cpp:22:45:22:52 | userName indirection | 0 | +| test.cpp:15:27:15:30 | Load | test.cpp:22:45:22:52 | userName indirection | 0 | +| test.cpp:15:27:15:30 | VariableAddress | test.cpp:22:45:22:52 | userName indirection | 0 | +| test.cpp:15:27:15:30 | argv | test.cpp:22:45:22:52 | userName indirection | 0 | +| test.cpp:16:9:16:16 | VariableAddress | test.cpp:22:45:22:52 | userName indirection | 0 | +| test.cpp:16:20:16:23 | Address | test.cpp:22:45:22:52 | userName indirection | 0 | +| test.cpp:16:20:16:23 | Load | test.cpp:22:45:22:52 | userName indirection | 0 | +| test.cpp:16:20:16:23 | VariableAddress | test.cpp:22:45:22:52 | userName indirection | 0 | +| test.cpp:16:20:16:23 | argv | test.cpp:22:45:22:52 | userName indirection | 0 | +| test.cpp:16:20:16:26 | Address | test.cpp:22:45:22:52 | userName indirection | 0 | +| test.cpp:16:20:16:26 | Address | test.cpp:22:45:22:52 | userName indirection | 0 | +| test.cpp:16:20:16:26 | Left | test.cpp:22:45:22:52 | userName indirection | 0 | +| test.cpp:16:20:16:26 | Load | test.cpp:22:45:22:52 | userName indirection | 0 | +| test.cpp:16:20:16:26 | PointerAdd | test.cpp:22:45:22:52 | userName indirection | 0 | +| test.cpp:16:20:16:26 | Right | test.cpp:22:45:22:52 | userName indirection | 0 | +| test.cpp:16:20:16:26 | Store | test.cpp:22:45:22:52 | userName indirection | 0 | +| test.cpp:16:20:16:26 | StoreValue | test.cpp:22:45:22:52 | userName indirection | 0 | +| test.cpp:16:20:16:26 | access to array | test.cpp:22:45:22:52 | userName indirection | 0 | +| test.cpp:16:25:16:25 | 2 | test.cpp:22:45:22:52 | userName indirection | 0 | +| test.cpp:22:45:22:52 | Address | test.cpp:22:45:22:52 | userName indirection | 0 | +| test.cpp:22:45:22:52 | Load | test.cpp:22:45:22:52 | userName indirection | 0 | +| test.cpp:22:45:22:52 | VariableAddress | test.cpp:22:45:22:52 | userName indirection | 0 | +| test.cpp:22:45:22:52 | userName | test.cpp:22:45:22:52 | userName indirection | 0 | +| test.cpp:22:45:22:52 | userName indirection | test.cpp:22:45:22:52 | userName indirection | 0 | +| test.cpp:28:10:28:23 | Uninitialized | test.cpp:31:41:31:54 | userNameQuoted indirection | 0 | +| test.cpp:28:10:28:23 | VariableAddress | test.cpp:31:41:31:54 | userNameQuoted indirection | 0 | +| test.cpp:28:32:28:35 | Address | test.cpp:31:41:31:54 | userNameQuoted indirection | 0 | +| test.cpp:28:32:28:35 | Chi | test.cpp:31:41:31:54 | userNameQuoted indirection | 0 | +| test.cpp:28:32:28:35 | ChiPartial | test.cpp:31:41:31:54 | userNameQuoted indirection | 0 | +| test.cpp:28:32:28:35 | ChiTotal | test.cpp:31:41:31:54 | userNameQuoted indirection | 0 | +| test.cpp:28:32:28:35 | Constant | test.cpp:31:41:31:54 | userNameQuoted indirection | 0 | +| test.cpp:28:32:28:35 | Constant | test.cpp:31:41:31:54 | userNameQuoted indirection | 0 | +| test.cpp:28:32:28:35 | Constant | test.cpp:31:41:31:54 | userNameQuoted indirection | 0 | +| test.cpp:28:32:28:35 | Left | test.cpp:31:41:31:54 | userNameQuoted indirection | 0 | +| test.cpp:28:32:28:35 | Left | test.cpp:31:41:31:54 | userNameQuoted indirection | 0 | +| test.cpp:28:32:28:35 | PointerAdd | test.cpp:31:41:31:54 | userNameQuoted indirection | 0 | +| test.cpp:28:32:28:35 | PointerAdd | test.cpp:31:41:31:54 | userNameQuoted indirection | 0 | +| test.cpp:28:32:28:35 | Right | test.cpp:31:41:31:54 | userNameQuoted indirection | 0 | +| test.cpp:28:32:28:35 | Right | test.cpp:31:41:31:54 | userNameQuoted indirection | 0 | +| test.cpp:28:32:28:35 | Store | test.cpp:31:41:31:54 | userNameQuoted indirection | 0 | +| test.cpp:28:32:28:35 | StoreValue | test.cpp:31:41:31:54 | userNameQuoted indirection | 0 | +| test.cpp:28:34:28:34 | (char)... | test.cpp:31:41:31:54 | userNameQuoted indirection | 0 | +| test.cpp:28:34:28:34 | Address | test.cpp:31:41:31:54 | userNameQuoted indirection | 0 | +| test.cpp:28:34:28:34 | Chi | test.cpp:31:41:31:54 | userNameQuoted indirection | 0 | +| test.cpp:28:34:28:34 | ChiPartial | test.cpp:31:41:31:54 | userNameQuoted indirection | 0 | +| test.cpp:28:34:28:34 | ChiTotal | test.cpp:31:41:31:54 | userNameQuoted indirection | 0 | +| test.cpp:28:34:28:34 | Store | test.cpp:31:41:31:54 | userNameQuoted indirection | 0 | +| test.cpp:28:34:28:34 | StoreValue | test.cpp:31:41:31:54 | userNameQuoted indirection | 0 | +| test.cpp:29:23:29:36 | Chi | test.cpp:31:41:31:54 | userNameQuoted indirection | 0 | +| test.cpp:29:23:29:36 | ChiPartial | test.cpp:31:41:31:54 | userNameQuoted indirection | 0 | +| test.cpp:29:23:29:36 | ChiTotal | test.cpp:31:41:31:54 | userNameQuoted indirection | 0 | +| test.cpp:29:23:29:36 | encodeShellString output argument | test.cpp:31:41:31:54 | userNameQuoted indirection | 0 | +| test.cpp:31:41:31:54 | Unary | test.cpp:31:41:31:54 | userNameQuoted indirection | 0 | +| test.cpp:31:41:31:54 | array to pointer conversion | test.cpp:31:41:31:54 | userNameQuoted indirection | 0 | +| test.cpp:31:41:31:54 | userNameQuoted | test.cpp:31:41:31:54 | userNameQuoted indirection | 0 | +| test.cpp:31:41:31:54 | userNameQuoted indirection | test.cpp:31:41:31:54 | userNameQuoted indirection | 0 | +| test.cpp:47:9:47:17 | VariableAddress | test.cpp:50:35:50:43 | envCflags indirection | 0 | +| test.cpp:47:21:47:26 | Address | test.cpp:50:35:50:43 | envCflags indirection | 0 | +| test.cpp:47:21:47:26 | Store | test.cpp:50:35:50:43 | envCflags indirection | 0 | +| test.cpp:47:21:47:26 | StoreValue | test.cpp:50:35:50:43 | envCflags indirection | 0 | +| test.cpp:47:21:47:26 | call to getenv | test.cpp:50:35:50:43 | envCflags indirection | 0 | +| test.cpp:50:35:50:43 | Address | test.cpp:50:35:50:43 | envCflags indirection | 0 | +| test.cpp:50:35:50:43 | Load | test.cpp:50:35:50:43 | envCflags indirection | 0 | +| test.cpp:50:35:50:43 | VariableAddress | test.cpp:50:35:50:43 | envCflags indirection | 0 | +| test.cpp:50:35:50:43 | envCflags | test.cpp:50:35:50:43 | envCflags indirection | 0 | +| test.cpp:50:35:50:43 | envCflags indirection | test.cpp:50:35:50:43 | envCflags indirection | 0 | +| test.cpp:61:31:61:38 | Uninitialized | test.cpp:64:20:64:27 | filename indirection | 0 | +| test.cpp:62:9:62:16 | Chi | test.cpp:64:20:64:27 | filename indirection | 0 | +| test.cpp:62:9:62:16 | ChiPartial | test.cpp:64:20:64:27 | filename indirection | 0 | +| test.cpp:62:9:62:16 | ChiTotal | test.cpp:64:20:64:27 | filename indirection | 0 | +| test.cpp:62:9:62:16 | fread output argument | test.cpp:64:20:64:27 | filename indirection | 0 | +| test.cpp:64:20:64:27 | (const char *)... | test.cpp:64:20:64:27 | filename indirection | 0 | +| test.cpp:64:20:64:27 | Unary | test.cpp:64:20:64:27 | filename indirection | 0 | +| test.cpp:64:20:64:27 | Unary | test.cpp:64:20:64:27 | filename indirection | 0 | +| test.cpp:64:20:64:27 | array to pointer conversion | test.cpp:64:20:64:27 | filename indirection | 0 | +| test.cpp:64:20:64:27 | filename | test.cpp:64:20:64:27 | filename indirection | 0 | +| test.cpp:64:20:64:27 | filename indirection | test.cpp:64:20:64:27 | filename indirection | 0 | +| test.cpp:68:6:68:10 | InitializeNonLocal | test.cpp:73:20:73:27 | filename indirection | 0 | +| test.cpp:70:23:70:30 | VariableAddress | test.cpp:73:20:73:27 | filename indirection | 0 | +| test.cpp:70:40:70:50 | test.txt | test.cpp:73:20:73:27 | filename indirection | 0 | +| test.cpp:70:40:70:50 | Address | test.cpp:73:20:73:27 | filename indirection | 0 | +| test.cpp:70:40:70:50 | Address | test.cpp:73:20:73:27 | filename indirection | 0 | +| test.cpp:70:40:70:50 | Load | test.cpp:73:20:73:27 | filename indirection | 0 | +| test.cpp:70:40:70:50 | Load | test.cpp:73:20:73:27 | filename indirection | 0 | +| test.cpp:70:40:70:50 | Store | test.cpp:73:20:73:27 | filename indirection | 0 | +| test.cpp:70:40:70:50 | StoreValue | test.cpp:73:20:73:27 | filename indirection | 0 | +| test.cpp:73:20:73:27 | (const char *)... | test.cpp:73:20:73:27 | filename indirection | 0 | +| test.cpp:73:20:73:27 | Unary | test.cpp:73:20:73:27 | filename indirection | 0 | +| test.cpp:73:20:73:27 | Unary | test.cpp:73:20:73:27 | filename indirection | 0 | +| test.cpp:73:20:73:27 | array to pointer conversion | test.cpp:73:20:73:27 | filename indirection | 0 | +| test.cpp:73:20:73:27 | filename | test.cpp:73:20:73:27 | filename indirection | 0 | +| test.cpp:73:20:73:27 | filename indirection | test.cpp:73:20:73:27 | filename indirection | 0 | +| test.cpp:81:31:81:38 | Uninitialized | test.cpp:84:20:84:27 | filename indirection | 0 | +| test.cpp:82:9:82:16 | Chi | test.cpp:84:20:84:27 | filename indirection | 0 | +| test.cpp:82:9:82:16 | ChiPartial | test.cpp:84:20:84:27 | filename indirection | 0 | +| test.cpp:82:9:82:16 | ChiTotal | test.cpp:84:20:84:27 | filename indirection | 0 | +| test.cpp:82:9:82:16 | fread output argument | test.cpp:84:20:84:27 | filename indirection | 0 | +| test.cpp:84:20:84:27 | (const char *)... | test.cpp:84:20:84:27 | filename indirection | 0 | +| test.cpp:84:20:84:27 | Unary | test.cpp:84:20:84:27 | filename indirection | 0 | +| test.cpp:84:20:84:27 | Unary | test.cpp:84:20:84:27 | filename indirection | 0 | +| test.cpp:84:20:84:27 | array to pointer conversion | test.cpp:84:20:84:27 | filename indirection | 0 | +| test.cpp:84:20:84:27 | filename | test.cpp:84:20:84:27 | filename indirection | 0 | +| test.cpp:84:20:84:27 | filename indirection | test.cpp:84:20:84:27 | filename indirection | 0 | +| test.cpp:90:34:90:41 | Uninitialized | test.cpp:93:17:93:24 | filename indirection | 0 | +| test.cpp:91:9:91:16 | Chi | test.cpp:93:17:93:24 | filename indirection | 0 | +| test.cpp:91:9:91:16 | ChiPartial | test.cpp:93:17:93:24 | filename indirection | 0 | +| test.cpp:91:9:91:16 | ChiTotal | test.cpp:93:17:93:24 | filename indirection | 0 | +| test.cpp:91:9:91:16 | fread output argument | test.cpp:93:17:93:24 | filename indirection | 0 | +| test.cpp:93:17:93:24 | (const char *)... | test.cpp:93:17:93:24 | filename indirection | 0 | +| test.cpp:93:17:93:24 | Unary | test.cpp:93:17:93:24 | filename indirection | 0 | +| test.cpp:93:17:93:24 | Unary | test.cpp:93:17:93:24 | filename indirection | 0 | +| test.cpp:93:17:93:24 | array to pointer conversion | test.cpp:93:17:93:24 | filename indirection | 0 | +| test.cpp:93:17:93:24 | filename | test.cpp:93:17:93:24 | filename indirection | 0 | +| test.cpp:93:17:93:24 | filename indirection | test.cpp:93:17:93:24 | filename indirection | 0 | +#select +| test.cpp:23:12:23:19 | command1 | test.cpp:16:20:16:23 | argv | test.cpp:23:12:23:19 | command1 indirection | This argument to an OS command is derived from $@, dangerously concatenated into $@, and then passed to system(string) | test.cpp:16:20:16:23 | argv | user input (a command-line argument) | test.cpp:22:13:22:20 | sprintf output argument | sprintf output argument | +| test.cpp:51:10:51:16 | command | test.cpp:47:21:47:26 | call to getenv | test.cpp:51:10:51:16 | command indirection | This argument to an OS command is derived from $@, dangerously concatenated into $@, and then passed to system(string) | test.cpp:47:21:47:26 | call to getenv | user input (an environment variable) | test.cpp:50:11:50:17 | sprintf output argument | sprintf output argument | +| test.cpp:65:10:65:16 | command | test.cpp:62:9:62:16 | fread output argument | test.cpp:65:10:65:16 | command indirection | This argument to an OS command is derived from $@, dangerously concatenated into $@, and then passed to system(string) | test.cpp:62:9:62:16 | fread output argument | user input (String read by fread) | test.cpp:64:11:64:17 | strncat output argument | strncat output argument | +| test.cpp:85:32:85:38 | command | test.cpp:82:9:82:16 | fread output argument | test.cpp:85:32:85:38 | command indirection | This argument to an OS command is derived from $@, dangerously concatenated into $@, and then passed to execl | test.cpp:82:9:82:16 | fread output argument | user input (String read by fread) | test.cpp:84:11:84:17 | strncat output argument | strncat output argument | +| test.cpp:94:45:94:48 | path | test.cpp:91:9:91:16 | fread output argument | test.cpp:94:45:94:48 | path indirection | This argument to an OS command is derived from $@, dangerously concatenated into $@, and then passed to execl | test.cpp:91:9:91:16 | fread output argument | user input (String read by fread) | test.cpp:93:11:93:14 | strncat output argument | strncat output argument | +nodes +| test.cpp:16:20:16:23 | argv | semmle.label | argv | +| test.cpp:16:20:16:23 | argv | semmle.label | argv | +| test.cpp:16:20:16:23 | argv | semmle.label | argv | +| test.cpp:16:20:16:26 | Store | semmle.label | Store | +| test.cpp:16:20:16:26 | access to array | semmle.label | access to array | +| test.cpp:22:13:22:20 | sprintf output argument | semmle.label | sprintf output argument | +| test.cpp:22:45:22:52 | userName | semmle.label | userName | +| test.cpp:22:45:22:52 | userName indirection | semmle.label | userName indirection | +| test.cpp:22:45:22:52 | userName indirection | semmle.label | userName indirection | +| test.cpp:23:12:23:19 | (const char *)... | semmle.label | (const char *)... | +| test.cpp:23:12:23:19 | command1 indirection | semmle.label | command1 indirection | +| test.cpp:23:12:23:19 | command1 indirection | semmle.label | command1 indirection | +| test.cpp:29:45:29:52 | (const char *)... | semmle.label | (const char *)... | +| test.cpp:29:45:29:52 | userName | semmle.label | userName | +| test.cpp:29:45:29:52 | userName indirection | semmle.label | userName indirection | +| test.cpp:31:13:31:20 | sprintf output argument | semmle.label | sprintf output argument | +| test.cpp:32:12:32:19 | command2 indirection | semmle.label | command2 indirection | +| test.cpp:38:17:38:22 | Store | semmle.label | Store | +| test.cpp:38:17:38:22 | call to getenv | semmle.label | call to getenv | +| test.cpp:38:17:38:22 | call to getenv | semmle.label | call to getenv | +| test.cpp:41:20:41:24 | (const char *)... | semmle.label | (const char *)... | +| test.cpp:41:20:41:24 | envCC | semmle.label | envCC | +| test.cpp:41:20:41:24 | envCC indirection | semmle.label | envCC indirection | +| test.cpp:47:21:47:26 | Store | semmle.label | Store | +| test.cpp:47:21:47:26 | call to getenv | semmle.label | call to getenv | +| test.cpp:47:21:47:26 | call to getenv | semmle.label | call to getenv | +| test.cpp:47:21:47:26 | call to getenv | semmle.label | call to getenv | +| test.cpp:50:11:50:17 | sprintf output argument | semmle.label | sprintf output argument | +| test.cpp:50:35:50:43 | envCflags | semmle.label | envCflags | +| test.cpp:50:35:50:43 | envCflags indirection | semmle.label | envCflags indirection | +| test.cpp:50:35:50:43 | envCflags indirection | semmle.label | envCflags indirection | +| test.cpp:51:10:51:16 | (const char *)... | semmle.label | (const char *)... | +| test.cpp:51:10:51:16 | command indirection | semmle.label | command indirection | +| test.cpp:51:10:51:16 | command indirection | semmle.label | command indirection | +| test.cpp:62:9:62:16 | (void *)... | semmle.label | (void *)... | +| test.cpp:62:9:62:16 | (void *)... | semmle.label | (void *)... | +| test.cpp:62:9:62:16 | array to pointer conversion | semmle.label | array to pointer conversion | +| test.cpp:62:9:62:16 | filename | semmle.label | filename | +| test.cpp:62:9:62:16 | filename indirection | semmle.label | filename indirection | +| test.cpp:62:9:62:16 | fread output argument | semmle.label | fread output argument | +| test.cpp:62:9:62:16 | fread output argument | semmle.label | fread output argument | +| test.cpp:64:11:64:17 | strncat output argument | semmle.label | strncat output argument | +| test.cpp:64:20:64:27 | (const char *)... | semmle.label | (const char *)... | +| test.cpp:64:20:64:27 | filename indirection | semmle.label | filename indirection | +| test.cpp:64:20:64:27 | filename indirection | semmle.label | filename indirection | +| test.cpp:65:10:65:16 | (const char *)... | semmle.label | (const char *)... | +| test.cpp:65:10:65:16 | command indirection | semmle.label | command indirection | +| test.cpp:65:10:65:16 | command indirection | semmle.label | command indirection | +| test.cpp:71:9:71:15 | (void *)... | semmle.label | (void *)... | +| test.cpp:71:9:71:15 | (void *)... | semmle.label | (void *)... | +| test.cpp:71:9:71:15 | array to pointer conversion | semmle.label | array to pointer conversion | +| test.cpp:71:9:71:15 | command | semmle.label | command | +| test.cpp:71:9:71:15 | command indirection | semmle.label | command indirection | +| test.cpp:71:9:71:15 | fread output argument | semmle.label | fread output argument | +| test.cpp:73:11:73:17 | array to pointer conversion | semmle.label | array to pointer conversion | +| test.cpp:73:11:73:17 | command indirection | semmle.label | command indirection | +| test.cpp:73:11:73:17 | strncat output argument | semmle.label | strncat output argument | +| test.cpp:74:10:74:16 | (const char *)... | semmle.label | (const char *)... | +| test.cpp:74:10:74:16 | command indirection | semmle.label | command indirection | +| test.cpp:74:10:74:16 | command indirection | semmle.label | command indirection | +| test.cpp:82:9:82:16 | (void *)... | semmle.label | (void *)... | +| test.cpp:82:9:82:16 | (void *)... | semmle.label | (void *)... | +| test.cpp:82:9:82:16 | array to pointer conversion | semmle.label | array to pointer conversion | +| test.cpp:82:9:82:16 | filename | semmle.label | filename | +| test.cpp:82:9:82:16 | filename indirection | semmle.label | filename indirection | +| test.cpp:82:9:82:16 | fread output argument | semmle.label | fread output argument | +| test.cpp:82:9:82:16 | fread output argument | semmle.label | fread output argument | +| test.cpp:84:11:84:17 | strncat output argument | semmle.label | strncat output argument | +| test.cpp:84:20:84:27 | (const char *)... | semmle.label | (const char *)... | +| test.cpp:84:20:84:27 | filename indirection | semmle.label | filename indirection | +| test.cpp:84:20:84:27 | filename indirection | semmle.label | filename indirection | +| test.cpp:85:32:85:38 | array to pointer conversion | semmle.label | array to pointer conversion | +| test.cpp:85:32:85:38 | command indirection | semmle.label | command indirection | +| test.cpp:85:32:85:38 | command indirection | semmle.label | command indirection | +| test.cpp:91:9:91:16 | (void *)... | semmle.label | (void *)... | +| test.cpp:91:9:91:16 | (void *)... | semmle.label | (void *)... | +| test.cpp:91:9:91:16 | array to pointer conversion | semmle.label | array to pointer conversion | +| test.cpp:91:9:91:16 | filename | semmle.label | filename | +| test.cpp:91:9:91:16 | filename indirection | semmle.label | filename indirection | +| test.cpp:91:9:91:16 | fread output argument | semmle.label | fread output argument | +| test.cpp:91:9:91:16 | fread output argument | semmle.label | fread output argument | +| test.cpp:93:11:93:14 | strncat output argument | semmle.label | strncat output argument | +| test.cpp:93:17:93:24 | (const char *)... | semmle.label | (const char *)... | +| test.cpp:93:17:93:24 | filename indirection | semmle.label | filename indirection | +| test.cpp:93:17:93:24 | filename indirection | semmle.label | filename indirection | +| test.cpp:94:45:94:48 | array to pointer conversion | semmle.label | array to pointer conversion | +| test.cpp:94:45:94:48 | path indirection | semmle.label | path indirection | +| test.cpp:94:45:94:48 | path indirection | semmle.label | path indirection | From 562c8b97ad10fc13b64e7a1f7bf196a0620c4534 Mon Sep 17 00:00:00 2001 From: Robert Marsh Date: Wed, 30 Jun 2021 18:52:07 +0000 Subject: [PATCH 436/741] C++: add comment explaining concatenation logic --- cpp/ql/src/Security/CWE/CWE-078/ExecTainted.ql | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/cpp/ql/src/Security/CWE/CWE-078/ExecTainted.ql b/cpp/ql/src/Security/CWE/CWE-078/ExecTainted.ql index e05dc87742d..4330c298d61 100644 --- a/cpp/ql/src/Security/CWE/CWE-078/ExecTainted.ql +++ b/cpp/ql/src/Security/CWE/CWE-078/ExecTainted.ql @@ -31,6 +31,12 @@ Expr sinkAsArgumentIndirection(DataFlow::Node sink) { .getUnconvertedResultExpression() } +/** + * Holds if `fst` is a string that is used in a format or concatenation function resulting in `snd`, + * and is *not* placed at the start of the resulting string. This indicates that the author did not + * expect `fst` to control what program is run if the resulting string is eventually interpreted as + * a command line, for example as an argument to `system`. + */ predicate interestingConcatenation(DataFlow::Node fst, DataFlow::Node snd) { exists(FormattingFunctionCall call, int index, FormatLiteral literal | sinkAsArgumentIndirection(fst) = call.getConversionArgument(index) and From 9c478c502eeb5a1e050d03b8a4122c215b3f3b1c Mon Sep 17 00:00:00 2001 From: Robert Marsh Date: Fri, 16 Jul 2021 23:33:43 +0000 Subject: [PATCH 437/741] C++: add some more tests for ExecTainted --- cpp/ql/test/include/string.h | 1 + .../semmle/ExecTainted/ExecTainted.expected | 230 ++++++++++++++++++ .../CWE/CWE-078/semmle/ExecTainted/test.cpp | 29 ++- 3 files changed, 258 insertions(+), 2 deletions(-) diff --git a/cpp/ql/test/include/string.h b/cpp/ql/test/include/string.h index ea4fdcc7135..8d577c350f9 100644 --- a/cpp/ql/test/include/string.h +++ b/cpp/ql/test/include/string.h @@ -77,6 +77,7 @@ namespace std template basic_string operator+(const basic_string& lhs, const basic_string& rhs); template basic_string operator+(const basic_string& lhs, const charT* rhs); + template basic_string operator+(const charT* lhs, const basic_string& rhs); typedef basic_string string; } diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-078/semmle/ExecTainted/ExecTainted.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-078/semmle/ExecTainted/ExecTainted.expected index 1b9f83b6fc6..cac0bdd8c93 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-078/semmle/ExecTainted/ExecTainted.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-078/semmle/ExecTainted/ExecTainted.expected @@ -59,6 +59,41 @@ edges | test.cpp:93:11:93:14 | strncat output argument | test.cpp:94:45:94:48 | path indirection | | test.cpp:93:17:93:24 | filename indirection | test.cpp:93:11:93:14 | strncat output argument | | test.cpp:93:17:93:24 | filename indirection | test.cpp:93:11:93:14 | strncat output argument | +| test.cpp:99:21:99:32 | (const char *)... | test.cpp:99:21:99:32 | call to getenv indirection | +| test.cpp:99:21:99:32 | (const char *)... | test.cpp:99:21:99:33 | call to basic_string | +| test.cpp:99:21:99:32 | (const char *)... | test.cpp:100:25:100:29 | (reference to) | +| test.cpp:99:21:99:32 | (const char *)... | test.cpp:100:25:100:29 | envCC indirection | +| test.cpp:99:21:99:32 | (const char *)... | test.cpp:100:31:100:31 | call to operator+ | +| test.cpp:99:21:99:32 | (const char *)... | test.cpp:100:31:100:31 | call to operator+ | +| test.cpp:99:21:99:32 | (const char *)... | test.cpp:101:10:101:16 | (const basic_string, allocator>)... | +| test.cpp:99:21:99:32 | (const char *)... | test.cpp:101:10:101:16 | command indirection | +| test.cpp:100:31:100:31 | call to operator+ | test.cpp:101:10:101:16 | (const basic_string, allocator>)... | +| test.cpp:100:31:100:31 | call to operator+ | test.cpp:101:10:101:16 | command indirection | +| test.cpp:106:20:106:25 | call to getenv | test.cpp:107:33:107:36 | path indirection | +| test.cpp:106:20:106:38 | (const char *)... | test.cpp:106:20:106:38 | call to getenv indirection | +| test.cpp:106:20:106:38 | (const char *)... | test.cpp:106:20:106:39 | call to basic_string | +| test.cpp:106:20:106:38 | (const char *)... | test.cpp:107:31:107:31 | call to operator+ | +| test.cpp:106:20:106:38 | (const char *)... | test.cpp:107:31:107:31 | call to operator+ | +| test.cpp:106:20:106:38 | (const char *)... | test.cpp:107:33:107:36 | (reference to) | +| test.cpp:106:20:106:38 | (const char *)... | test.cpp:107:33:107:36 | path indirection | +| test.cpp:106:20:106:38 | (const char *)... | test.cpp:108:10:108:16 | (const basic_string, allocator>)... | +| test.cpp:106:20:106:38 | (const char *)... | test.cpp:108:10:108:16 | command indirection | +| test.cpp:107:31:107:31 | call to operator+ | test.cpp:108:10:108:16 | (const basic_string, allocator>)... | +| test.cpp:107:31:107:31 | call to operator+ | test.cpp:108:10:108:16 | command indirection | +| test.cpp:113:20:113:25 | call to getenv | test.cpp:114:19:114:22 | path indirection | +| test.cpp:113:20:113:38 | (const char *)... | test.cpp:113:20:113:38 | call to getenv indirection | +| test.cpp:113:20:113:38 | (const char *)... | test.cpp:113:20:113:39 | call to basic_string | +| test.cpp:113:20:113:38 | (const char *)... | test.cpp:114:10:114:23 | (const basic_string, allocator>)... | +| test.cpp:113:20:113:38 | (const char *)... | test.cpp:114:10:114:23 | call to operator+ indirection | +| test.cpp:113:20:113:38 | (const char *)... | test.cpp:114:19:114:22 | (reference to) | +| test.cpp:113:20:113:38 | (const char *)... | test.cpp:114:19:114:22 | path indirection | +| test.cpp:119:20:119:25 | call to getenv | test.cpp:120:19:120:22 | path indirection | +| test.cpp:119:20:119:38 | (const char *)... | test.cpp:119:20:119:38 | call to getenv indirection | +| test.cpp:119:20:119:38 | (const char *)... | test.cpp:119:20:119:39 | call to basic_string | +| test.cpp:119:20:119:38 | (const char *)... | test.cpp:120:10:120:23 | call to operator+ indirection | +| test.cpp:119:20:119:38 | (const char *)... | test.cpp:120:17:120:17 | call to operator+ | +| test.cpp:119:20:119:38 | (const char *)... | test.cpp:120:19:120:22 | (reference to) | +| test.cpp:119:20:119:38 | (const char *)... | test.cpp:120:19:120:22 | path indirection | pathExplore | test.cpp:16:20:16:23 | argv | test.cpp:16:20:16:26 | Address | 0 | | test.cpp:16:20:16:23 | argv | test.cpp:16:20:16:26 | Left | 0 | @@ -176,6 +211,90 @@ pathExplore | test.cpp:91:9:91:16 | fread output argument | test.cpp:94:45:94:48 | ChiTotal | 0 | | test.cpp:91:9:91:16 | fread output argument | test.cpp:94:45:94:48 | array to pointer conversion | 0 | | test.cpp:91:9:91:16 | fread output argument | test.cpp:94:45:94:48 | path indirection | 0 | +| test.cpp:99:21:99:26 | call to getenv | test.cpp:99:21:99:32 | (const char *)... | 0 | +| test.cpp:99:21:99:26 | call to getenv | test.cpp:99:21:99:32 | Address | 0 | +| test.cpp:99:21:99:26 | call to getenv | test.cpp:99:21:99:32 | Unary | 0 | +| test.cpp:99:21:99:26 | call to getenv | test.cpp:99:21:99:32 | call to getenv indirection | 0 | +| test.cpp:99:21:99:26 | call to getenv | test.cpp:99:21:99:33 | Chi | 0 | +| test.cpp:99:21:99:26 | call to getenv | test.cpp:99:21:99:33 | ChiPartial | 0 | +| test.cpp:99:21:99:26 | call to getenv | test.cpp:99:21:99:33 | basic_string output argument | 0 | +| test.cpp:99:21:99:26 | call to getenv | test.cpp:99:21:99:33 | call to basic_string | 0 | +| test.cpp:99:21:99:26 | call to getenv | test.cpp:99:21:99:33 | call to getenv | 0 | +| test.cpp:99:21:99:26 | call to getenv | test.cpp:100:25:100:29 | (reference to) | 0 | +| test.cpp:99:21:99:26 | call to getenv | test.cpp:100:25:100:29 | Address | 0 | +| test.cpp:99:21:99:26 | call to getenv | test.cpp:100:25:100:29 | envCC indirection | 0 | +| test.cpp:99:21:99:26 | call to getenv | test.cpp:100:31:100:31 | Store | 0 | +| test.cpp:99:21:99:26 | call to getenv | test.cpp:100:31:100:31 | StoreValue | 0 | +| test.cpp:99:21:99:26 | call to getenv | test.cpp:100:31:100:31 | call to operator+ | 0 | +| test.cpp:99:21:99:26 | call to getenv | test.cpp:100:31:100:31 | envCC | 0 | +| test.cpp:99:21:99:26 | call to getenv | test.cpp:101:10:101:16 | (const basic_string, allocator>)... | 0 | +| test.cpp:99:21:99:26 | call to getenv | test.cpp:101:10:101:16 | Address | 0 | +| test.cpp:99:21:99:26 | call to getenv | test.cpp:101:10:101:16 | command indirection | 0 | +| test.cpp:99:21:99:26 | call to getenv | test.cpp:101:18:101:22 | command | 0 | +| test.cpp:106:20:106:25 | call to getenv | test.cpp:106:20:106:38 | (const char *)... | 0 | +| test.cpp:106:20:106:25 | call to getenv | test.cpp:106:20:106:38 | Address | 0 | +| test.cpp:106:20:106:25 | call to getenv | test.cpp:106:20:106:38 | Unary | 0 | +| test.cpp:106:20:106:25 | call to getenv | test.cpp:106:20:106:38 | call to getenv indirection | 0 | +| test.cpp:106:20:106:25 | call to getenv | test.cpp:106:20:106:39 | Chi | 0 | +| test.cpp:106:20:106:25 | call to getenv | test.cpp:106:20:106:39 | ChiPartial | 0 | +| test.cpp:106:20:106:25 | call to getenv | test.cpp:106:20:106:39 | basic_string output argument | 0 | +| test.cpp:106:20:106:25 | call to getenv | test.cpp:106:20:106:39 | call to basic_string | 0 | +| test.cpp:106:20:106:25 | call to getenv | test.cpp:106:20:106:39 | call to getenv | 0 | +| test.cpp:106:20:106:25 | call to getenv | test.cpp:107:31:107:31 | Store | 0 | +| test.cpp:106:20:106:25 | call to getenv | test.cpp:107:31:107:31 | StoreValue | 0 | +| test.cpp:106:20:106:25 | call to getenv | test.cpp:107:31:107:31 | call to operator+ | 0 | +| test.cpp:106:20:106:25 | call to getenv | test.cpp:107:31:107:31 | path | 0 | +| test.cpp:106:20:106:25 | call to getenv | test.cpp:107:33:107:36 | (reference to) | 0 | +| test.cpp:106:20:106:25 | call to getenv | test.cpp:107:33:107:36 | Address | 0 | +| test.cpp:106:20:106:25 | call to getenv | test.cpp:107:33:107:36 | path indirection | 0 | +| test.cpp:106:20:106:25 | call to getenv | test.cpp:108:10:108:16 | (const basic_string, allocator>)... | 0 | +| test.cpp:106:20:106:25 | call to getenv | test.cpp:108:10:108:16 | Address | 0 | +| test.cpp:106:20:106:25 | call to getenv | test.cpp:108:10:108:16 | command indirection | 0 | +| test.cpp:106:20:106:25 | call to getenv | test.cpp:108:18:108:22 | command | 0 | +| test.cpp:113:20:113:25 | call to getenv | test.cpp:113:20:113:38 | (const char *)... | 0 | +| test.cpp:113:20:113:25 | call to getenv | test.cpp:113:20:113:38 | Address | 0 | +| test.cpp:113:20:113:25 | call to getenv | test.cpp:113:20:113:38 | Unary | 0 | +| test.cpp:113:20:113:25 | call to getenv | test.cpp:113:20:113:38 | call to getenv indirection | 0 | +| test.cpp:113:20:113:25 | call to getenv | test.cpp:113:20:113:39 | Chi | 0 | +| test.cpp:113:20:113:25 | call to getenv | test.cpp:113:20:113:39 | ChiPartial | 0 | +| test.cpp:113:20:113:25 | call to getenv | test.cpp:113:20:113:39 | basic_string output argument | 0 | +| test.cpp:113:20:113:25 | call to getenv | test.cpp:113:20:113:39 | call to basic_string | 0 | +| test.cpp:113:20:113:25 | call to getenv | test.cpp:113:20:113:39 | call to getenv | 0 | +| test.cpp:113:20:113:25 | call to getenv | test.cpp:114:10:114:23 | (const basic_string, allocator>)... | 0 | +| test.cpp:113:20:113:25 | call to getenv | test.cpp:114:10:114:23 | Address | 0 | +| test.cpp:113:20:113:25 | call to getenv | test.cpp:114:10:114:23 | call to operator+ indirection | 0 | +| test.cpp:113:20:113:25 | call to getenv | test.cpp:114:17:114:17 | Call | 0 | +| test.cpp:113:20:113:25 | call to getenv | test.cpp:114:17:114:17 | Store | 0 | +| test.cpp:113:20:113:25 | call to getenv | test.cpp:114:17:114:17 | StoreValue | 0 | +| test.cpp:113:20:113:25 | call to getenv | test.cpp:114:17:114:17 | path | 0 | +| test.cpp:113:20:113:25 | call to getenv | test.cpp:114:19:114:22 | (reference to) | 0 | +| test.cpp:113:20:113:25 | call to getenv | test.cpp:114:19:114:22 | Address | 0 | +| test.cpp:113:20:113:25 | call to getenv | test.cpp:114:19:114:22 | path indirection | 0 | +| test.cpp:113:20:113:25 | call to getenv | test.cpp:114:25:114:29 | call to operator+ | 0 | +| test.cpp:119:20:119:25 | call to getenv | test.cpp:119:20:119:38 | (const char *)... | 0 | +| test.cpp:119:20:119:25 | call to getenv | test.cpp:119:20:119:38 | Address | 0 | +| test.cpp:119:20:119:25 | call to getenv | test.cpp:119:20:119:38 | Unary | 0 | +| test.cpp:119:20:119:25 | call to getenv | test.cpp:119:20:119:38 | call to getenv indirection | 0 | +| test.cpp:119:20:119:25 | call to getenv | test.cpp:119:20:119:39 | Chi | 0 | +| test.cpp:119:20:119:25 | call to getenv | test.cpp:119:20:119:39 | ChiPartial | 0 | +| test.cpp:119:20:119:25 | call to getenv | test.cpp:119:20:119:39 | basic_string output argument | 0 | +| test.cpp:119:20:119:25 | call to getenv | test.cpp:119:20:119:39 | call to basic_string | 0 | +| test.cpp:119:20:119:25 | call to getenv | test.cpp:119:20:119:39 | call to getenv | 0 | +| test.cpp:119:20:119:25 | call to getenv | test.cpp:120:10:120:23 | Address | 0 | +| test.cpp:119:20:119:25 | call to getenv | test.cpp:120:10:120:23 | Address | 0 | +| test.cpp:119:20:119:25 | call to getenv | test.cpp:120:10:120:23 | Chi | 0 | +| test.cpp:119:20:119:25 | call to getenv | test.cpp:120:10:120:23 | ChiTotal | 0 | +| test.cpp:119:20:119:25 | call to getenv | test.cpp:120:10:120:23 | call to operator+ indirection | 0 | +| test.cpp:119:20:119:25 | call to getenv | test.cpp:120:17:120:17 | Address | 0 | +| test.cpp:119:20:119:25 | call to getenv | test.cpp:120:17:120:17 | Call | 0 | +| test.cpp:119:20:119:25 | call to getenv | test.cpp:120:17:120:17 | Store | 0 | +| test.cpp:119:20:119:25 | call to getenv | test.cpp:120:17:120:17 | StoreValue | 0 | +| test.cpp:119:20:119:25 | call to getenv | test.cpp:120:17:120:17 | call to operator+ | 0 | +| test.cpp:119:20:119:25 | call to getenv | test.cpp:120:17:120:17 | path | 0 | +| test.cpp:119:20:119:25 | call to getenv | test.cpp:120:19:120:22 | (reference to) | 0 | +| test.cpp:119:20:119:25 | call to getenv | test.cpp:120:19:120:22 | Address | 0 | +| test.cpp:119:20:119:25 | call to getenv | test.cpp:120:19:120:22 | path indirection | 0 | +| test.cpp:119:20:119:25 | call to getenv | test.cpp:120:25:120:28 | call to operator+ | 0 | pathExploreRev | test.cpp:15:27:15:30 | *argv | test.cpp:22:45:22:52 | userName indirection | 0 | | test.cpp:15:27:15:30 | *argv [[]] | test.cpp:22:45:22:52 | userName indirection | 0 | @@ -295,6 +414,71 @@ pathExploreRev | test.cpp:93:17:93:24 | array to pointer conversion | test.cpp:93:17:93:24 | filename indirection | 0 | | test.cpp:93:17:93:24 | filename | test.cpp:93:17:93:24 | filename indirection | 0 | | test.cpp:93:17:93:24 | filename indirection | test.cpp:93:17:93:24 | filename indirection | 0 | +| test.cpp:97:18:97:21 | *arg2 | test.cpp:100:33:100:36 | arg2 indirection | 0 | +| test.cpp:97:18:97:21 | Address | test.cpp:100:33:100:36 | arg2 indirection | 0 | +| test.cpp:97:18:97:21 | Address | test.cpp:100:33:100:36 | arg2 indirection | 0 | +| test.cpp:97:18:97:21 | Load | test.cpp:100:33:100:36 | arg2 indirection | 0 | +| test.cpp:97:18:97:21 | Load | test.cpp:100:33:100:36 | arg2 indirection | 0 | +| test.cpp:97:18:97:21 | VariableAddress | test.cpp:100:33:100:36 | arg2 indirection | 0 | +| test.cpp:97:18:97:21 | arg2 | test.cpp:100:33:100:36 | arg2 indirection | 0 | +| test.cpp:100:33:100:36 | (const char *)... | test.cpp:100:33:100:36 | arg2 indirection | 0 | +| test.cpp:100:33:100:36 | Address | test.cpp:100:33:100:36 | arg2 indirection | 0 | +| test.cpp:100:33:100:36 | Load | test.cpp:100:33:100:36 | arg2 indirection | 0 | +| test.cpp:100:33:100:36 | Unary | test.cpp:100:33:100:36 | arg2 indirection | 0 | +| test.cpp:100:33:100:36 | VariableAddress | test.cpp:100:33:100:36 | arg2 indirection | 0 | +| test.cpp:100:33:100:36 | arg2 | test.cpp:100:33:100:36 | arg2 indirection | 0 | +| test.cpp:100:33:100:36 | arg2 indirection | test.cpp:100:33:100:36 | arg2 indirection | 0 | +| test.cpp:106:15:106:18 | Uninitialized | test.cpp:107:33:107:36 | path indirection | 0 | +| test.cpp:106:20:106:25 | call to getenv | test.cpp:107:33:107:36 | path indirection | 0 | +| test.cpp:106:20:106:38 | (const char *)... | test.cpp:107:33:107:36 | path indirection | 0 | +| test.cpp:106:20:106:38 | Address | test.cpp:107:33:107:36 | path indirection | 0 | +| test.cpp:106:20:106:38 | Unary | test.cpp:107:33:107:36 | path indirection | 0 | +| test.cpp:106:20:106:38 | call to getenv indirection | test.cpp:107:33:107:36 | path indirection | 0 | +| test.cpp:106:20:106:39 | Chi | test.cpp:107:33:107:36 | path indirection | 0 | +| test.cpp:106:20:106:39 | ChiPartial | test.cpp:107:33:107:36 | path indirection | 0 | +| test.cpp:106:20:106:39 | ChiTotal | test.cpp:107:33:107:36 | path indirection | 0 | +| test.cpp:106:20:106:39 | basic_string output argument | test.cpp:107:33:107:36 | path indirection | 0 | +| test.cpp:106:20:106:39 | call to getenv | test.cpp:107:33:107:36 | path indirection | 0 | +| test.cpp:107:33:107:36 | (const basic_string, allocator>)... | test.cpp:107:33:107:36 | path indirection | 0 | +| test.cpp:107:33:107:36 | (reference to) | test.cpp:107:33:107:36 | path indirection | 0 | +| test.cpp:107:33:107:36 | Unary | test.cpp:107:33:107:36 | path indirection | 0 | +| test.cpp:107:33:107:36 | Unary | test.cpp:107:33:107:36 | path indirection | 0 | +| test.cpp:107:33:107:36 | path | test.cpp:107:33:107:36 | path indirection | 0 | +| test.cpp:107:33:107:36 | path indirection | test.cpp:107:33:107:36 | path indirection | 0 | +| test.cpp:113:15:113:18 | Uninitialized | test.cpp:114:19:114:22 | path indirection | 0 | +| test.cpp:113:20:113:25 | call to getenv | test.cpp:114:19:114:22 | path indirection | 0 | +| test.cpp:113:20:113:38 | (const char *)... | test.cpp:114:19:114:22 | path indirection | 0 | +| test.cpp:113:20:113:38 | Address | test.cpp:114:19:114:22 | path indirection | 0 | +| test.cpp:113:20:113:38 | Unary | test.cpp:114:19:114:22 | path indirection | 0 | +| test.cpp:113:20:113:38 | call to getenv indirection | test.cpp:114:19:114:22 | path indirection | 0 | +| test.cpp:113:20:113:39 | Chi | test.cpp:114:19:114:22 | path indirection | 0 | +| test.cpp:113:20:113:39 | ChiPartial | test.cpp:114:19:114:22 | path indirection | 0 | +| test.cpp:113:20:113:39 | ChiTotal | test.cpp:114:19:114:22 | path indirection | 0 | +| test.cpp:113:20:113:39 | basic_string output argument | test.cpp:114:19:114:22 | path indirection | 0 | +| test.cpp:113:20:113:39 | call to getenv | test.cpp:114:19:114:22 | path indirection | 0 | +| test.cpp:114:19:114:22 | (const basic_string, allocator>)... | test.cpp:114:19:114:22 | path indirection | 0 | +| test.cpp:114:19:114:22 | (reference to) | test.cpp:114:19:114:22 | path indirection | 0 | +| test.cpp:114:19:114:22 | Unary | test.cpp:114:19:114:22 | path indirection | 0 | +| test.cpp:114:19:114:22 | Unary | test.cpp:114:19:114:22 | path indirection | 0 | +| test.cpp:114:19:114:22 | path | test.cpp:114:19:114:22 | path indirection | 0 | +| test.cpp:114:19:114:22 | path indirection | test.cpp:114:19:114:22 | path indirection | 0 | +| test.cpp:119:15:119:18 | Uninitialized | test.cpp:120:19:120:22 | path indirection | 0 | +| test.cpp:119:20:119:25 | call to getenv | test.cpp:120:19:120:22 | path indirection | 0 | +| test.cpp:119:20:119:38 | (const char *)... | test.cpp:120:19:120:22 | path indirection | 0 | +| test.cpp:119:20:119:38 | Address | test.cpp:120:19:120:22 | path indirection | 0 | +| test.cpp:119:20:119:38 | Unary | test.cpp:120:19:120:22 | path indirection | 0 | +| test.cpp:119:20:119:38 | call to getenv indirection | test.cpp:120:19:120:22 | path indirection | 0 | +| test.cpp:119:20:119:39 | Chi | test.cpp:120:19:120:22 | path indirection | 0 | +| test.cpp:119:20:119:39 | ChiPartial | test.cpp:120:19:120:22 | path indirection | 0 | +| test.cpp:119:20:119:39 | ChiTotal | test.cpp:120:19:120:22 | path indirection | 0 | +| test.cpp:119:20:119:39 | basic_string output argument | test.cpp:120:19:120:22 | path indirection | 0 | +| test.cpp:119:20:119:39 | call to getenv | test.cpp:120:19:120:22 | path indirection | 0 | +| test.cpp:120:19:120:22 | (const basic_string, allocator>)... | test.cpp:120:19:120:22 | path indirection | 0 | +| test.cpp:120:19:120:22 | (reference to) | test.cpp:120:19:120:22 | path indirection | 0 | +| test.cpp:120:19:120:22 | Unary | test.cpp:120:19:120:22 | path indirection | 0 | +| test.cpp:120:19:120:22 | Unary | test.cpp:120:19:120:22 | path indirection | 0 | +| test.cpp:120:19:120:22 | path | test.cpp:120:19:120:22 | path indirection | 0 | +| test.cpp:120:19:120:22 | path indirection | test.cpp:120:19:120:22 | path indirection | 0 | #select | test.cpp:23:12:23:19 | command1 | test.cpp:16:20:16:23 | argv | test.cpp:23:12:23:19 | command1 indirection | This argument to an OS command is derived from $@, dangerously concatenated into $@, and then passed to system(string) | test.cpp:16:20:16:23 | argv | user input (a command-line argument) | test.cpp:22:13:22:20 | sprintf output argument | sprintf output argument | | test.cpp:51:10:51:16 | command | test.cpp:47:21:47:26 | call to getenv | test.cpp:51:10:51:16 | command indirection | This argument to an OS command is derived from $@, dangerously concatenated into $@, and then passed to system(string) | test.cpp:47:21:47:26 | call to getenv | user input (an environment variable) | test.cpp:50:11:50:17 | sprintf output argument | sprintf output argument | @@ -390,3 +574,49 @@ nodes | test.cpp:94:45:94:48 | array to pointer conversion | semmle.label | array to pointer conversion | | test.cpp:94:45:94:48 | path indirection | semmle.label | path indirection | | test.cpp:94:45:94:48 | path indirection | semmle.label | path indirection | +| test.cpp:99:21:99:26 | call to getenv | semmle.label | call to getenv | +| test.cpp:99:21:99:32 | (const char *)... | semmle.label | (const char *)... | +| test.cpp:99:21:99:32 | (const char *)... | semmle.label | (const char *)... | +| test.cpp:99:21:99:32 | call to getenv indirection | semmle.label | call to getenv indirection | +| test.cpp:99:21:99:33 | call to basic_string | semmle.label | call to basic_string | +| test.cpp:100:25:100:29 | (reference to) | semmle.label | (reference to) | +| test.cpp:100:25:100:29 | envCC indirection | semmle.label | envCC indirection | +| test.cpp:100:31:100:31 | call to operator+ | semmle.label | call to operator+ | +| test.cpp:100:31:100:31 | call to operator+ | semmle.label | call to operator+ | +| test.cpp:101:10:101:16 | (const basic_string, allocator>)... | semmle.label | (const basic_string, allocator>)... | +| test.cpp:101:10:101:16 | command indirection | semmle.label | command indirection | +| test.cpp:106:20:106:25 | call to getenv | semmle.label | call to getenv | +| test.cpp:106:20:106:25 | call to getenv | semmle.label | call to getenv | +| test.cpp:106:20:106:38 | (const char *)... | semmle.label | (const char *)... | +| test.cpp:106:20:106:38 | (const char *)... | semmle.label | (const char *)... | +| test.cpp:106:20:106:38 | call to getenv indirection | semmle.label | call to getenv indirection | +| test.cpp:106:20:106:39 | call to basic_string | semmle.label | call to basic_string | +| test.cpp:107:31:107:31 | call to operator+ | semmle.label | call to operator+ | +| test.cpp:107:31:107:31 | call to operator+ | semmle.label | call to operator+ | +| test.cpp:107:33:107:36 | (reference to) | semmle.label | (reference to) | +| test.cpp:107:33:107:36 | path indirection | semmle.label | path indirection | +| test.cpp:107:33:107:36 | path indirection | semmle.label | path indirection | +| test.cpp:108:10:108:16 | (const basic_string, allocator>)... | semmle.label | (const basic_string, allocator>)... | +| test.cpp:108:10:108:16 | command indirection | semmle.label | command indirection | +| test.cpp:113:20:113:25 | call to getenv | semmle.label | call to getenv | +| test.cpp:113:20:113:25 | call to getenv | semmle.label | call to getenv | +| test.cpp:113:20:113:38 | (const char *)... | semmle.label | (const char *)... | +| test.cpp:113:20:113:38 | (const char *)... | semmle.label | (const char *)... | +| test.cpp:113:20:113:38 | call to getenv indirection | semmle.label | call to getenv indirection | +| test.cpp:113:20:113:39 | call to basic_string | semmle.label | call to basic_string | +| test.cpp:114:10:114:23 | (const basic_string, allocator>)... | semmle.label | (const basic_string, allocator>)... | +| test.cpp:114:10:114:23 | call to operator+ indirection | semmle.label | call to operator+ indirection | +| test.cpp:114:19:114:22 | (reference to) | semmle.label | (reference to) | +| test.cpp:114:19:114:22 | path indirection | semmle.label | path indirection | +| test.cpp:114:19:114:22 | path indirection | semmle.label | path indirection | +| test.cpp:119:20:119:25 | call to getenv | semmle.label | call to getenv | +| test.cpp:119:20:119:25 | call to getenv | semmle.label | call to getenv | +| test.cpp:119:20:119:38 | (const char *)... | semmle.label | (const char *)... | +| test.cpp:119:20:119:38 | (const char *)... | semmle.label | (const char *)... | +| test.cpp:119:20:119:38 | call to getenv indirection | semmle.label | call to getenv indirection | +| test.cpp:119:20:119:39 | call to basic_string | semmle.label | call to basic_string | +| test.cpp:120:10:120:23 | call to operator+ indirection | semmle.label | call to operator+ indirection | +| test.cpp:120:17:120:17 | call to operator+ | semmle.label | call to operator+ | +| test.cpp:120:19:120:22 | (reference to) | semmle.label | (reference to) | +| test.cpp:120:19:120:22 | path indirection | semmle.label | path indirection | +| test.cpp:120:19:120:22 | path indirection | semmle.label | path indirection | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-078/semmle/ExecTainted/test.cpp b/cpp/ql/test/query-tests/Security/CWE/CWE-078/semmle/ExecTainted/test.cpp index b01b0dfa72d..88baf1dfd84 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-078/semmle/ExecTainted/test.cpp +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-078/semmle/ExecTainted/test.cpp @@ -94,7 +94,32 @@ void test7(FILE *f) { execl("/bin/sh", "sh", "-c", "script.sh", path); } -// TODO: concatenations via operator+, more sinks, test for call context sensitivity at -// concatenation site +void test8(char *arg2) { + // GOOD?: the user string is the *first* part of the command, like $CC in many environments + std::string envCC(getenv("CC")); + std::string command = envCC + arg2; + system(command.c_str()); +} + +void test9(FILE *f) { + // BAD: the user string is injected directly into a command + std::string path(getenv("something")); + std::string command = "mv " + path; + system(command.c_str()); +} + +void test10(FILE *f) { + // BAD: the user string is injected directly into a command + std::string path(getenv("something")); + system(("mv " + path).c_str()); +} + +void test11(FILE *f) { + // BAD: the user string is injected directly into a command + std::string path(getenv("something")); + system(("mv " + path).data()); +} + +// TODO: test for call context sensitivity at concatenation site // open question: do we want to report certain sources even when they're the start of the string? From 9926892c8afec9ada2fa6973dd9a662e147c2c36 Mon Sep 17 00:00:00 2001 From: Robert Marsh Date: Fri, 16 Jul 2021 23:37:20 +0000 Subject: [PATCH 438/741] C++: remove debugging predicates --- .../src/Security/CWE/CWE-078/ExecTainted.ql | 12 - .../semmle/ExecTainted/ExecTainted.expected | 385 ------------------ 2 files changed, 397 deletions(-) diff --git a/cpp/ql/src/Security/CWE/CWE-078/ExecTainted.ql b/cpp/ql/src/Security/CWE/CWE-078/ExecTainted.ql index 4330c298d61..a3e205284ed 100644 --- a/cpp/ql/src/Security/CWE/CWE-078/ExecTainted.ql +++ b/cpp/ql/src/Security/CWE/CWE-078/ExecTainted.ql @@ -81,10 +81,6 @@ class TaintToConcatenationConfiguration extends TaintTracking::Configuration { override predicate isSink(DataFlow::Node sink) { interestingConcatenation(sink, _) } - - override int explorationLimit() { - result = 10 - } } class ExecTaintConfiguration extends TaintTracking::Configuration { @@ -112,14 +108,6 @@ query predicate edges(DataFlow::PathNode a, DataFlow::PathNode b) { b.getConfiguration() instanceof ExecTaintConfiguration } -query predicate pathExplore(DataFlow::PartialPathNode source, DataFlow::PartialPathNode node, int dist) { - any(TaintToConcatenationConfiguration cfg).hasPartialFlow(source, node, dist) -} - -query predicate pathExploreRev(DataFlow::PartialPathNode node, DataFlow::PartialPathNode sink, int dist) { - any(TaintToConcatenationConfiguration cfg).hasPartialFlowRev(node, sink, dist) -} - from DataFlow::PathNode sourceNode, DataFlow::PathNode concatSink, DataFlow::PathNode concatSource, DataFlow::PathNode sinkNode, string taintCause, string callChain, TaintToConcatenationConfiguration conf1, ExecTaintConfiguration conf2 diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-078/semmle/ExecTainted/ExecTainted.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-078/semmle/ExecTainted/ExecTainted.expected index cac0bdd8c93..403447bb7ff 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-078/semmle/ExecTainted/ExecTainted.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-078/semmle/ExecTainted/ExecTainted.expected @@ -94,391 +94,6 @@ edges | test.cpp:119:20:119:38 | (const char *)... | test.cpp:120:17:120:17 | call to operator+ | | test.cpp:119:20:119:38 | (const char *)... | test.cpp:120:19:120:22 | (reference to) | | test.cpp:119:20:119:38 | (const char *)... | test.cpp:120:19:120:22 | path indirection | -pathExplore -| test.cpp:16:20:16:23 | argv | test.cpp:16:20:16:26 | Address | 0 | -| test.cpp:16:20:16:23 | argv | test.cpp:16:20:16:26 | Left | 0 | -| test.cpp:16:20:16:23 | argv | test.cpp:16:20:16:26 | PointerAdd | 0 | -| test.cpp:16:20:16:23 | argv | test.cpp:16:20:16:26 | Store | 0 | -| test.cpp:16:20:16:23 | argv | test.cpp:16:20:16:26 | StoreValue | 0 | -| test.cpp:16:20:16:23 | argv | test.cpp:16:20:16:26 | access to array | 0 | -| test.cpp:16:20:16:23 | argv | test.cpp:22:5:22:11 | userName | 0 | -| test.cpp:16:20:16:23 | argv | test.cpp:22:13:22:20 | Chi | 0 | -| test.cpp:16:20:16:23 | argv | test.cpp:22:13:22:20 | ChiPartial | 0 | -| test.cpp:16:20:16:23 | argv | test.cpp:22:13:22:20 | sprintf output argument | 0 | -| test.cpp:16:20:16:23 | argv | test.cpp:22:45:22:52 | Address | 0 | -| test.cpp:16:20:16:23 | argv | test.cpp:22:45:22:52 | Address | 0 | -| test.cpp:16:20:16:23 | argv | test.cpp:22:45:22:52 | Load | 0 | -| test.cpp:16:20:16:23 | argv | test.cpp:22:45:22:52 | userName | 0 | -| test.cpp:16:20:16:23 | argv | test.cpp:22:45:22:52 | userName indirection | 0 | -| test.cpp:16:20:16:23 | argv | test.cpp:23:5:23:10 | command1 | 0 | -| test.cpp:16:20:16:23 | argv | test.cpp:23:12:23:19 | (const char *)... | 0 | -| test.cpp:16:20:16:23 | argv | test.cpp:23:12:23:19 | Address | 0 | -| test.cpp:16:20:16:23 | argv | test.cpp:23:12:23:19 | command1 indirection | 0 | -| test.cpp:16:20:16:23 | argv | test.cpp:29:5:29:21 | userName | 0 | -| test.cpp:16:20:16:23 | argv | test.cpp:29:45:29:52 | (const char *)... | 0 | -| test.cpp:16:20:16:23 | argv | test.cpp:29:45:29:52 | Address | 0 | -| test.cpp:16:20:16:23 | argv | test.cpp:29:45:29:52 | Load | 0 | -| test.cpp:16:20:16:23 | argv | test.cpp:29:45:29:52 | Unary | 0 | -| test.cpp:16:20:16:23 | argv | test.cpp:29:45:29:52 | userName | 0 | -| test.cpp:16:20:16:23 | argv | test.cpp:29:45:29:52 | userName indirection | 0 | -| test.cpp:38:17:38:22 | call to getenv | test.cpp:38:17:38:22 | Store | 0 | -| test.cpp:38:17:38:22 | call to getenv | test.cpp:38:17:38:22 | StoreValue | 0 | -| test.cpp:38:17:38:22 | call to getenv | test.cpp:41:3:41:9 | envCC | 0 | -| test.cpp:38:17:38:22 | call to getenv | test.cpp:41:11:41:17 | ChiPartial | 0 | -| test.cpp:38:17:38:22 | call to getenv | test.cpp:41:11:41:17 | sprintf output argument | 0 | -| test.cpp:38:17:38:22 | call to getenv | test.cpp:41:20:41:24 | (const char *)... | 0 | -| test.cpp:38:17:38:22 | call to getenv | test.cpp:41:20:41:24 | Address | 0 | -| test.cpp:38:17:38:22 | call to getenv | test.cpp:41:20:41:24 | Load | 0 | -| test.cpp:38:17:38:22 | call to getenv | test.cpp:41:20:41:24 | Unary | 0 | -| test.cpp:38:17:38:22 | call to getenv | test.cpp:41:20:41:24 | envCC | 0 | -| test.cpp:38:17:38:22 | call to getenv | test.cpp:41:20:41:24 | envCC indirection | 0 | -| test.cpp:47:21:47:26 | call to getenv | test.cpp:47:21:47:26 | Store | 0 | -| test.cpp:47:21:47:26 | call to getenv | test.cpp:47:21:47:26 | StoreValue | 0 | -| test.cpp:47:21:47:26 | call to getenv | test.cpp:50:3:50:9 | envCflags | 0 | -| test.cpp:47:21:47:26 | call to getenv | test.cpp:50:11:50:17 | Chi | 0 | -| test.cpp:47:21:47:26 | call to getenv | test.cpp:50:11:50:17 | ChiPartial | 0 | -| test.cpp:47:21:47:26 | call to getenv | test.cpp:50:11:50:17 | sprintf output argument | 0 | -| test.cpp:47:21:47:26 | call to getenv | test.cpp:50:35:50:43 | Address | 0 | -| test.cpp:47:21:47:26 | call to getenv | test.cpp:50:35:50:43 | Address | 0 | -| test.cpp:47:21:47:26 | call to getenv | test.cpp:50:35:50:43 | Load | 0 | -| test.cpp:47:21:47:26 | call to getenv | test.cpp:50:35:50:43 | envCflags | 0 | -| test.cpp:47:21:47:26 | call to getenv | test.cpp:50:35:50:43 | envCflags indirection | 0 | -| test.cpp:47:21:47:26 | call to getenv | test.cpp:51:3:51:8 | command | 0 | -| test.cpp:47:21:47:26 | call to getenv | test.cpp:51:10:51:16 | (const char *)... | 0 | -| test.cpp:47:21:47:26 | call to getenv | test.cpp:51:10:51:16 | Address | 0 | -| test.cpp:47:21:47:26 | call to getenv | test.cpp:51:10:51:16 | command indirection | 0 | -| test.cpp:62:9:62:16 | fread output argument | test.cpp:62:9:62:16 | Chi | 0 | -| test.cpp:62:9:62:16 | fread output argument | test.cpp:62:9:62:16 | ChiPartial | 0 | -| test.cpp:62:9:62:16 | fread output argument | test.cpp:64:3:64:9 | call to strncat | 0 | -| test.cpp:62:9:62:16 | fread output argument | test.cpp:64:3:64:9 | filename | 0 | -| test.cpp:62:9:62:16 | fread output argument | test.cpp:64:11:64:17 | Chi | 0 | -| test.cpp:62:9:62:16 | fread output argument | test.cpp:64:11:64:17 | ChiPartial | 0 | -| test.cpp:62:9:62:16 | fread output argument | test.cpp:64:11:64:17 | strncat output argument | 0 | -| test.cpp:62:9:62:16 | fread output argument | test.cpp:64:20:64:27 | (const char *)... | 0 | -| test.cpp:62:9:62:16 | fread output argument | test.cpp:64:20:64:27 | Address | 0 | -| test.cpp:62:9:62:16 | fread output argument | test.cpp:64:20:64:27 | filename indirection | 0 | -| test.cpp:62:9:62:16 | fread output argument | test.cpp:65:3:65:8 | command | 0 | -| test.cpp:62:9:62:16 | fread output argument | test.cpp:65:10:65:16 | (const char *)... | 0 | -| test.cpp:62:9:62:16 | fread output argument | test.cpp:65:10:65:16 | Address | 0 | -| test.cpp:62:9:62:16 | fread output argument | test.cpp:65:10:65:16 | command indirection | 0 | -| test.cpp:71:9:71:15 | fread output argument | test.cpp:71:9:71:15 | Chi | 0 | -| test.cpp:71:9:71:15 | fread output argument | test.cpp:71:9:71:15 | ChiPartial | 0 | -| test.cpp:71:9:71:15 | fread output argument | test.cpp:73:3:73:9 | call to strncat | 0 | -| test.cpp:71:9:71:15 | fread output argument | test.cpp:73:3:73:9 | command | 0 | -| test.cpp:71:9:71:15 | fread output argument | test.cpp:73:11:73:17 | Address | 0 | -| test.cpp:71:9:71:15 | fread output argument | test.cpp:73:11:73:17 | Address | 0 | -| test.cpp:71:9:71:15 | fread output argument | test.cpp:73:11:73:17 | Chi | 0 | -| test.cpp:71:9:71:15 | fread output argument | test.cpp:73:11:73:17 | ChiPartial | 0 | -| test.cpp:71:9:71:15 | fread output argument | test.cpp:73:11:73:17 | ChiTotal | 0 | -| test.cpp:71:9:71:15 | fread output argument | test.cpp:73:11:73:17 | array to pointer conversion | 0 | -| test.cpp:71:9:71:15 | fread output argument | test.cpp:73:11:73:17 | command indirection | 0 | -| test.cpp:71:9:71:15 | fread output argument | test.cpp:73:11:73:17 | strncat output argument | 0 | -| test.cpp:71:9:71:15 | fread output argument | test.cpp:74:3:74:8 | command | 0 | -| test.cpp:71:9:71:15 | fread output argument | test.cpp:74:10:74:16 | (const char *)... | 0 | -| test.cpp:71:9:71:15 | fread output argument | test.cpp:74:10:74:16 | Address | 0 | -| test.cpp:71:9:71:15 | fread output argument | test.cpp:74:10:74:16 | command indirection | 0 | -| test.cpp:82:9:82:16 | fread output argument | test.cpp:82:9:82:16 | Chi | 0 | -| test.cpp:82:9:82:16 | fread output argument | test.cpp:82:9:82:16 | ChiPartial | 0 | -| test.cpp:82:9:82:16 | fread output argument | test.cpp:84:3:84:9 | call to strncat | 0 | -| test.cpp:82:9:82:16 | fread output argument | test.cpp:84:3:84:9 | filename | 0 | -| test.cpp:82:9:82:16 | fread output argument | test.cpp:84:11:84:17 | Chi | 0 | -| test.cpp:82:9:82:16 | fread output argument | test.cpp:84:11:84:17 | ChiPartial | 0 | -| test.cpp:82:9:82:16 | fread output argument | test.cpp:84:11:84:17 | strncat output argument | 0 | -| test.cpp:82:9:82:16 | fread output argument | test.cpp:84:20:84:27 | (const char *)... | 0 | -| test.cpp:82:9:82:16 | fread output argument | test.cpp:84:20:84:27 | Address | 0 | -| test.cpp:82:9:82:16 | fread output argument | test.cpp:84:20:84:27 | filename indirection | 0 | -| test.cpp:82:9:82:16 | fread output argument | test.cpp:85:3:85:7 | command | 0 | -| test.cpp:82:9:82:16 | fread output argument | test.cpp:85:32:85:38 | Address | 0 | -| test.cpp:82:9:82:16 | fread output argument | test.cpp:85:32:85:38 | Address | 0 | -| test.cpp:82:9:82:16 | fread output argument | test.cpp:85:32:85:38 | Chi | 0 | -| test.cpp:82:9:82:16 | fread output argument | test.cpp:85:32:85:38 | ChiTotal | 0 | -| test.cpp:82:9:82:16 | fread output argument | test.cpp:85:32:85:38 | array to pointer conversion | 0 | -| test.cpp:82:9:82:16 | fread output argument | test.cpp:85:32:85:38 | command indirection | 0 | -| test.cpp:91:9:91:16 | fread output argument | test.cpp:91:9:91:16 | Chi | 0 | -| test.cpp:91:9:91:16 | fread output argument | test.cpp:91:9:91:16 | ChiPartial | 0 | -| test.cpp:91:9:91:16 | fread output argument | test.cpp:93:3:93:9 | call to strncat | 0 | -| test.cpp:91:9:91:16 | fread output argument | test.cpp:93:3:93:9 | filename | 0 | -| test.cpp:91:9:91:16 | fread output argument | test.cpp:93:11:93:14 | Chi | 0 | -| test.cpp:91:9:91:16 | fread output argument | test.cpp:93:11:93:14 | ChiPartial | 0 | -| test.cpp:91:9:91:16 | fread output argument | test.cpp:93:11:93:14 | strncat output argument | 0 | -| test.cpp:91:9:91:16 | fread output argument | test.cpp:93:17:93:24 | (const char *)... | 0 | -| test.cpp:91:9:91:16 | fread output argument | test.cpp:93:17:93:24 | Address | 0 | -| test.cpp:91:9:91:16 | fread output argument | test.cpp:93:17:93:24 | filename indirection | 0 | -| test.cpp:91:9:91:16 | fread output argument | test.cpp:94:3:94:7 | path | 0 | -| test.cpp:91:9:91:16 | fread output argument | test.cpp:94:45:94:48 | Address | 0 | -| test.cpp:91:9:91:16 | fread output argument | test.cpp:94:45:94:48 | Address | 0 | -| test.cpp:91:9:91:16 | fread output argument | test.cpp:94:45:94:48 | Chi | 0 | -| test.cpp:91:9:91:16 | fread output argument | test.cpp:94:45:94:48 | ChiTotal | 0 | -| test.cpp:91:9:91:16 | fread output argument | test.cpp:94:45:94:48 | array to pointer conversion | 0 | -| test.cpp:91:9:91:16 | fread output argument | test.cpp:94:45:94:48 | path indirection | 0 | -| test.cpp:99:21:99:26 | call to getenv | test.cpp:99:21:99:32 | (const char *)... | 0 | -| test.cpp:99:21:99:26 | call to getenv | test.cpp:99:21:99:32 | Address | 0 | -| test.cpp:99:21:99:26 | call to getenv | test.cpp:99:21:99:32 | Unary | 0 | -| test.cpp:99:21:99:26 | call to getenv | test.cpp:99:21:99:32 | call to getenv indirection | 0 | -| test.cpp:99:21:99:26 | call to getenv | test.cpp:99:21:99:33 | Chi | 0 | -| test.cpp:99:21:99:26 | call to getenv | test.cpp:99:21:99:33 | ChiPartial | 0 | -| test.cpp:99:21:99:26 | call to getenv | test.cpp:99:21:99:33 | basic_string output argument | 0 | -| test.cpp:99:21:99:26 | call to getenv | test.cpp:99:21:99:33 | call to basic_string | 0 | -| test.cpp:99:21:99:26 | call to getenv | test.cpp:99:21:99:33 | call to getenv | 0 | -| test.cpp:99:21:99:26 | call to getenv | test.cpp:100:25:100:29 | (reference to) | 0 | -| test.cpp:99:21:99:26 | call to getenv | test.cpp:100:25:100:29 | Address | 0 | -| test.cpp:99:21:99:26 | call to getenv | test.cpp:100:25:100:29 | envCC indirection | 0 | -| test.cpp:99:21:99:26 | call to getenv | test.cpp:100:31:100:31 | Store | 0 | -| test.cpp:99:21:99:26 | call to getenv | test.cpp:100:31:100:31 | StoreValue | 0 | -| test.cpp:99:21:99:26 | call to getenv | test.cpp:100:31:100:31 | call to operator+ | 0 | -| test.cpp:99:21:99:26 | call to getenv | test.cpp:100:31:100:31 | envCC | 0 | -| test.cpp:99:21:99:26 | call to getenv | test.cpp:101:10:101:16 | (const basic_string, allocator>)... | 0 | -| test.cpp:99:21:99:26 | call to getenv | test.cpp:101:10:101:16 | Address | 0 | -| test.cpp:99:21:99:26 | call to getenv | test.cpp:101:10:101:16 | command indirection | 0 | -| test.cpp:99:21:99:26 | call to getenv | test.cpp:101:18:101:22 | command | 0 | -| test.cpp:106:20:106:25 | call to getenv | test.cpp:106:20:106:38 | (const char *)... | 0 | -| test.cpp:106:20:106:25 | call to getenv | test.cpp:106:20:106:38 | Address | 0 | -| test.cpp:106:20:106:25 | call to getenv | test.cpp:106:20:106:38 | Unary | 0 | -| test.cpp:106:20:106:25 | call to getenv | test.cpp:106:20:106:38 | call to getenv indirection | 0 | -| test.cpp:106:20:106:25 | call to getenv | test.cpp:106:20:106:39 | Chi | 0 | -| test.cpp:106:20:106:25 | call to getenv | test.cpp:106:20:106:39 | ChiPartial | 0 | -| test.cpp:106:20:106:25 | call to getenv | test.cpp:106:20:106:39 | basic_string output argument | 0 | -| test.cpp:106:20:106:25 | call to getenv | test.cpp:106:20:106:39 | call to basic_string | 0 | -| test.cpp:106:20:106:25 | call to getenv | test.cpp:106:20:106:39 | call to getenv | 0 | -| test.cpp:106:20:106:25 | call to getenv | test.cpp:107:31:107:31 | Store | 0 | -| test.cpp:106:20:106:25 | call to getenv | test.cpp:107:31:107:31 | StoreValue | 0 | -| test.cpp:106:20:106:25 | call to getenv | test.cpp:107:31:107:31 | call to operator+ | 0 | -| test.cpp:106:20:106:25 | call to getenv | test.cpp:107:31:107:31 | path | 0 | -| test.cpp:106:20:106:25 | call to getenv | test.cpp:107:33:107:36 | (reference to) | 0 | -| test.cpp:106:20:106:25 | call to getenv | test.cpp:107:33:107:36 | Address | 0 | -| test.cpp:106:20:106:25 | call to getenv | test.cpp:107:33:107:36 | path indirection | 0 | -| test.cpp:106:20:106:25 | call to getenv | test.cpp:108:10:108:16 | (const basic_string, allocator>)... | 0 | -| test.cpp:106:20:106:25 | call to getenv | test.cpp:108:10:108:16 | Address | 0 | -| test.cpp:106:20:106:25 | call to getenv | test.cpp:108:10:108:16 | command indirection | 0 | -| test.cpp:106:20:106:25 | call to getenv | test.cpp:108:18:108:22 | command | 0 | -| test.cpp:113:20:113:25 | call to getenv | test.cpp:113:20:113:38 | (const char *)... | 0 | -| test.cpp:113:20:113:25 | call to getenv | test.cpp:113:20:113:38 | Address | 0 | -| test.cpp:113:20:113:25 | call to getenv | test.cpp:113:20:113:38 | Unary | 0 | -| test.cpp:113:20:113:25 | call to getenv | test.cpp:113:20:113:38 | call to getenv indirection | 0 | -| test.cpp:113:20:113:25 | call to getenv | test.cpp:113:20:113:39 | Chi | 0 | -| test.cpp:113:20:113:25 | call to getenv | test.cpp:113:20:113:39 | ChiPartial | 0 | -| test.cpp:113:20:113:25 | call to getenv | test.cpp:113:20:113:39 | basic_string output argument | 0 | -| test.cpp:113:20:113:25 | call to getenv | test.cpp:113:20:113:39 | call to basic_string | 0 | -| test.cpp:113:20:113:25 | call to getenv | test.cpp:113:20:113:39 | call to getenv | 0 | -| test.cpp:113:20:113:25 | call to getenv | test.cpp:114:10:114:23 | (const basic_string, allocator>)... | 0 | -| test.cpp:113:20:113:25 | call to getenv | test.cpp:114:10:114:23 | Address | 0 | -| test.cpp:113:20:113:25 | call to getenv | test.cpp:114:10:114:23 | call to operator+ indirection | 0 | -| test.cpp:113:20:113:25 | call to getenv | test.cpp:114:17:114:17 | Call | 0 | -| test.cpp:113:20:113:25 | call to getenv | test.cpp:114:17:114:17 | Store | 0 | -| test.cpp:113:20:113:25 | call to getenv | test.cpp:114:17:114:17 | StoreValue | 0 | -| test.cpp:113:20:113:25 | call to getenv | test.cpp:114:17:114:17 | path | 0 | -| test.cpp:113:20:113:25 | call to getenv | test.cpp:114:19:114:22 | (reference to) | 0 | -| test.cpp:113:20:113:25 | call to getenv | test.cpp:114:19:114:22 | Address | 0 | -| test.cpp:113:20:113:25 | call to getenv | test.cpp:114:19:114:22 | path indirection | 0 | -| test.cpp:113:20:113:25 | call to getenv | test.cpp:114:25:114:29 | call to operator+ | 0 | -| test.cpp:119:20:119:25 | call to getenv | test.cpp:119:20:119:38 | (const char *)... | 0 | -| test.cpp:119:20:119:25 | call to getenv | test.cpp:119:20:119:38 | Address | 0 | -| test.cpp:119:20:119:25 | call to getenv | test.cpp:119:20:119:38 | Unary | 0 | -| test.cpp:119:20:119:25 | call to getenv | test.cpp:119:20:119:38 | call to getenv indirection | 0 | -| test.cpp:119:20:119:25 | call to getenv | test.cpp:119:20:119:39 | Chi | 0 | -| test.cpp:119:20:119:25 | call to getenv | test.cpp:119:20:119:39 | ChiPartial | 0 | -| test.cpp:119:20:119:25 | call to getenv | test.cpp:119:20:119:39 | basic_string output argument | 0 | -| test.cpp:119:20:119:25 | call to getenv | test.cpp:119:20:119:39 | call to basic_string | 0 | -| test.cpp:119:20:119:25 | call to getenv | test.cpp:119:20:119:39 | call to getenv | 0 | -| test.cpp:119:20:119:25 | call to getenv | test.cpp:120:10:120:23 | Address | 0 | -| test.cpp:119:20:119:25 | call to getenv | test.cpp:120:10:120:23 | Address | 0 | -| test.cpp:119:20:119:25 | call to getenv | test.cpp:120:10:120:23 | Chi | 0 | -| test.cpp:119:20:119:25 | call to getenv | test.cpp:120:10:120:23 | ChiTotal | 0 | -| test.cpp:119:20:119:25 | call to getenv | test.cpp:120:10:120:23 | call to operator+ indirection | 0 | -| test.cpp:119:20:119:25 | call to getenv | test.cpp:120:17:120:17 | Address | 0 | -| test.cpp:119:20:119:25 | call to getenv | test.cpp:120:17:120:17 | Call | 0 | -| test.cpp:119:20:119:25 | call to getenv | test.cpp:120:17:120:17 | Store | 0 | -| test.cpp:119:20:119:25 | call to getenv | test.cpp:120:17:120:17 | StoreValue | 0 | -| test.cpp:119:20:119:25 | call to getenv | test.cpp:120:17:120:17 | call to operator+ | 0 | -| test.cpp:119:20:119:25 | call to getenv | test.cpp:120:17:120:17 | path | 0 | -| test.cpp:119:20:119:25 | call to getenv | test.cpp:120:19:120:22 | (reference to) | 0 | -| test.cpp:119:20:119:25 | call to getenv | test.cpp:120:19:120:22 | Address | 0 | -| test.cpp:119:20:119:25 | call to getenv | test.cpp:120:19:120:22 | path indirection | 0 | -| test.cpp:119:20:119:25 | call to getenv | test.cpp:120:25:120:28 | call to operator+ | 0 | -pathExploreRev -| test.cpp:15:27:15:30 | *argv | test.cpp:22:45:22:52 | userName indirection | 0 | -| test.cpp:15:27:15:30 | *argv [[]] | test.cpp:22:45:22:52 | userName indirection | 0 | -| test.cpp:15:27:15:30 | Address | test.cpp:22:45:22:52 | userName indirection | 0 | -| test.cpp:15:27:15:30 | Address | test.cpp:22:45:22:52 | userName indirection | 0 | -| test.cpp:15:27:15:30 | Load | test.cpp:22:45:22:52 | userName indirection | 0 | -| test.cpp:15:27:15:30 | Load | test.cpp:22:45:22:52 | userName indirection | 0 | -| test.cpp:15:27:15:30 | VariableAddress | test.cpp:22:45:22:52 | userName indirection | 0 | -| test.cpp:15:27:15:30 | argv | test.cpp:22:45:22:52 | userName indirection | 0 | -| test.cpp:16:9:16:16 | VariableAddress | test.cpp:22:45:22:52 | userName indirection | 0 | -| test.cpp:16:20:16:23 | Address | test.cpp:22:45:22:52 | userName indirection | 0 | -| test.cpp:16:20:16:23 | Load | test.cpp:22:45:22:52 | userName indirection | 0 | -| test.cpp:16:20:16:23 | VariableAddress | test.cpp:22:45:22:52 | userName indirection | 0 | -| test.cpp:16:20:16:23 | argv | test.cpp:22:45:22:52 | userName indirection | 0 | -| test.cpp:16:20:16:26 | Address | test.cpp:22:45:22:52 | userName indirection | 0 | -| test.cpp:16:20:16:26 | Address | test.cpp:22:45:22:52 | userName indirection | 0 | -| test.cpp:16:20:16:26 | Left | test.cpp:22:45:22:52 | userName indirection | 0 | -| test.cpp:16:20:16:26 | Load | test.cpp:22:45:22:52 | userName indirection | 0 | -| test.cpp:16:20:16:26 | PointerAdd | test.cpp:22:45:22:52 | userName indirection | 0 | -| test.cpp:16:20:16:26 | Right | test.cpp:22:45:22:52 | userName indirection | 0 | -| test.cpp:16:20:16:26 | Store | test.cpp:22:45:22:52 | userName indirection | 0 | -| test.cpp:16:20:16:26 | StoreValue | test.cpp:22:45:22:52 | userName indirection | 0 | -| test.cpp:16:20:16:26 | access to array | test.cpp:22:45:22:52 | userName indirection | 0 | -| test.cpp:16:25:16:25 | 2 | test.cpp:22:45:22:52 | userName indirection | 0 | -| test.cpp:22:45:22:52 | Address | test.cpp:22:45:22:52 | userName indirection | 0 | -| test.cpp:22:45:22:52 | Load | test.cpp:22:45:22:52 | userName indirection | 0 | -| test.cpp:22:45:22:52 | VariableAddress | test.cpp:22:45:22:52 | userName indirection | 0 | -| test.cpp:22:45:22:52 | userName | test.cpp:22:45:22:52 | userName indirection | 0 | -| test.cpp:22:45:22:52 | userName indirection | test.cpp:22:45:22:52 | userName indirection | 0 | -| test.cpp:28:10:28:23 | Uninitialized | test.cpp:31:41:31:54 | userNameQuoted indirection | 0 | -| test.cpp:28:10:28:23 | VariableAddress | test.cpp:31:41:31:54 | userNameQuoted indirection | 0 | -| test.cpp:28:32:28:35 | Address | test.cpp:31:41:31:54 | userNameQuoted indirection | 0 | -| test.cpp:28:32:28:35 | Chi | test.cpp:31:41:31:54 | userNameQuoted indirection | 0 | -| test.cpp:28:32:28:35 | ChiPartial | test.cpp:31:41:31:54 | userNameQuoted indirection | 0 | -| test.cpp:28:32:28:35 | ChiTotal | test.cpp:31:41:31:54 | userNameQuoted indirection | 0 | -| test.cpp:28:32:28:35 | Constant | test.cpp:31:41:31:54 | userNameQuoted indirection | 0 | -| test.cpp:28:32:28:35 | Constant | test.cpp:31:41:31:54 | userNameQuoted indirection | 0 | -| test.cpp:28:32:28:35 | Constant | test.cpp:31:41:31:54 | userNameQuoted indirection | 0 | -| test.cpp:28:32:28:35 | Left | test.cpp:31:41:31:54 | userNameQuoted indirection | 0 | -| test.cpp:28:32:28:35 | Left | test.cpp:31:41:31:54 | userNameQuoted indirection | 0 | -| test.cpp:28:32:28:35 | PointerAdd | test.cpp:31:41:31:54 | userNameQuoted indirection | 0 | -| test.cpp:28:32:28:35 | PointerAdd | test.cpp:31:41:31:54 | userNameQuoted indirection | 0 | -| test.cpp:28:32:28:35 | Right | test.cpp:31:41:31:54 | userNameQuoted indirection | 0 | -| test.cpp:28:32:28:35 | Right | test.cpp:31:41:31:54 | userNameQuoted indirection | 0 | -| test.cpp:28:32:28:35 | Store | test.cpp:31:41:31:54 | userNameQuoted indirection | 0 | -| test.cpp:28:32:28:35 | StoreValue | test.cpp:31:41:31:54 | userNameQuoted indirection | 0 | -| test.cpp:28:34:28:34 | (char)... | test.cpp:31:41:31:54 | userNameQuoted indirection | 0 | -| test.cpp:28:34:28:34 | Address | test.cpp:31:41:31:54 | userNameQuoted indirection | 0 | -| test.cpp:28:34:28:34 | Chi | test.cpp:31:41:31:54 | userNameQuoted indirection | 0 | -| test.cpp:28:34:28:34 | ChiPartial | test.cpp:31:41:31:54 | userNameQuoted indirection | 0 | -| test.cpp:28:34:28:34 | ChiTotal | test.cpp:31:41:31:54 | userNameQuoted indirection | 0 | -| test.cpp:28:34:28:34 | Store | test.cpp:31:41:31:54 | userNameQuoted indirection | 0 | -| test.cpp:28:34:28:34 | StoreValue | test.cpp:31:41:31:54 | userNameQuoted indirection | 0 | -| test.cpp:29:23:29:36 | Chi | test.cpp:31:41:31:54 | userNameQuoted indirection | 0 | -| test.cpp:29:23:29:36 | ChiPartial | test.cpp:31:41:31:54 | userNameQuoted indirection | 0 | -| test.cpp:29:23:29:36 | ChiTotal | test.cpp:31:41:31:54 | userNameQuoted indirection | 0 | -| test.cpp:29:23:29:36 | encodeShellString output argument | test.cpp:31:41:31:54 | userNameQuoted indirection | 0 | -| test.cpp:31:41:31:54 | Unary | test.cpp:31:41:31:54 | userNameQuoted indirection | 0 | -| test.cpp:31:41:31:54 | array to pointer conversion | test.cpp:31:41:31:54 | userNameQuoted indirection | 0 | -| test.cpp:31:41:31:54 | userNameQuoted | test.cpp:31:41:31:54 | userNameQuoted indirection | 0 | -| test.cpp:31:41:31:54 | userNameQuoted indirection | test.cpp:31:41:31:54 | userNameQuoted indirection | 0 | -| test.cpp:47:9:47:17 | VariableAddress | test.cpp:50:35:50:43 | envCflags indirection | 0 | -| test.cpp:47:21:47:26 | Address | test.cpp:50:35:50:43 | envCflags indirection | 0 | -| test.cpp:47:21:47:26 | Store | test.cpp:50:35:50:43 | envCflags indirection | 0 | -| test.cpp:47:21:47:26 | StoreValue | test.cpp:50:35:50:43 | envCflags indirection | 0 | -| test.cpp:47:21:47:26 | call to getenv | test.cpp:50:35:50:43 | envCflags indirection | 0 | -| test.cpp:50:35:50:43 | Address | test.cpp:50:35:50:43 | envCflags indirection | 0 | -| test.cpp:50:35:50:43 | Load | test.cpp:50:35:50:43 | envCflags indirection | 0 | -| test.cpp:50:35:50:43 | VariableAddress | test.cpp:50:35:50:43 | envCflags indirection | 0 | -| test.cpp:50:35:50:43 | envCflags | test.cpp:50:35:50:43 | envCflags indirection | 0 | -| test.cpp:50:35:50:43 | envCflags indirection | test.cpp:50:35:50:43 | envCflags indirection | 0 | -| test.cpp:61:31:61:38 | Uninitialized | test.cpp:64:20:64:27 | filename indirection | 0 | -| test.cpp:62:9:62:16 | Chi | test.cpp:64:20:64:27 | filename indirection | 0 | -| test.cpp:62:9:62:16 | ChiPartial | test.cpp:64:20:64:27 | filename indirection | 0 | -| test.cpp:62:9:62:16 | ChiTotal | test.cpp:64:20:64:27 | filename indirection | 0 | -| test.cpp:62:9:62:16 | fread output argument | test.cpp:64:20:64:27 | filename indirection | 0 | -| test.cpp:64:20:64:27 | (const char *)... | test.cpp:64:20:64:27 | filename indirection | 0 | -| test.cpp:64:20:64:27 | Unary | test.cpp:64:20:64:27 | filename indirection | 0 | -| test.cpp:64:20:64:27 | Unary | test.cpp:64:20:64:27 | filename indirection | 0 | -| test.cpp:64:20:64:27 | array to pointer conversion | test.cpp:64:20:64:27 | filename indirection | 0 | -| test.cpp:64:20:64:27 | filename | test.cpp:64:20:64:27 | filename indirection | 0 | -| test.cpp:64:20:64:27 | filename indirection | test.cpp:64:20:64:27 | filename indirection | 0 | -| test.cpp:68:6:68:10 | InitializeNonLocal | test.cpp:73:20:73:27 | filename indirection | 0 | -| test.cpp:70:23:70:30 | VariableAddress | test.cpp:73:20:73:27 | filename indirection | 0 | -| test.cpp:70:40:70:50 | test.txt | test.cpp:73:20:73:27 | filename indirection | 0 | -| test.cpp:70:40:70:50 | Address | test.cpp:73:20:73:27 | filename indirection | 0 | -| test.cpp:70:40:70:50 | Address | test.cpp:73:20:73:27 | filename indirection | 0 | -| test.cpp:70:40:70:50 | Load | test.cpp:73:20:73:27 | filename indirection | 0 | -| test.cpp:70:40:70:50 | Load | test.cpp:73:20:73:27 | filename indirection | 0 | -| test.cpp:70:40:70:50 | Store | test.cpp:73:20:73:27 | filename indirection | 0 | -| test.cpp:70:40:70:50 | StoreValue | test.cpp:73:20:73:27 | filename indirection | 0 | -| test.cpp:73:20:73:27 | (const char *)... | test.cpp:73:20:73:27 | filename indirection | 0 | -| test.cpp:73:20:73:27 | Unary | test.cpp:73:20:73:27 | filename indirection | 0 | -| test.cpp:73:20:73:27 | Unary | test.cpp:73:20:73:27 | filename indirection | 0 | -| test.cpp:73:20:73:27 | array to pointer conversion | test.cpp:73:20:73:27 | filename indirection | 0 | -| test.cpp:73:20:73:27 | filename | test.cpp:73:20:73:27 | filename indirection | 0 | -| test.cpp:73:20:73:27 | filename indirection | test.cpp:73:20:73:27 | filename indirection | 0 | -| test.cpp:81:31:81:38 | Uninitialized | test.cpp:84:20:84:27 | filename indirection | 0 | -| test.cpp:82:9:82:16 | Chi | test.cpp:84:20:84:27 | filename indirection | 0 | -| test.cpp:82:9:82:16 | ChiPartial | test.cpp:84:20:84:27 | filename indirection | 0 | -| test.cpp:82:9:82:16 | ChiTotal | test.cpp:84:20:84:27 | filename indirection | 0 | -| test.cpp:82:9:82:16 | fread output argument | test.cpp:84:20:84:27 | filename indirection | 0 | -| test.cpp:84:20:84:27 | (const char *)... | test.cpp:84:20:84:27 | filename indirection | 0 | -| test.cpp:84:20:84:27 | Unary | test.cpp:84:20:84:27 | filename indirection | 0 | -| test.cpp:84:20:84:27 | Unary | test.cpp:84:20:84:27 | filename indirection | 0 | -| test.cpp:84:20:84:27 | array to pointer conversion | test.cpp:84:20:84:27 | filename indirection | 0 | -| test.cpp:84:20:84:27 | filename | test.cpp:84:20:84:27 | filename indirection | 0 | -| test.cpp:84:20:84:27 | filename indirection | test.cpp:84:20:84:27 | filename indirection | 0 | -| test.cpp:90:34:90:41 | Uninitialized | test.cpp:93:17:93:24 | filename indirection | 0 | -| test.cpp:91:9:91:16 | Chi | test.cpp:93:17:93:24 | filename indirection | 0 | -| test.cpp:91:9:91:16 | ChiPartial | test.cpp:93:17:93:24 | filename indirection | 0 | -| test.cpp:91:9:91:16 | ChiTotal | test.cpp:93:17:93:24 | filename indirection | 0 | -| test.cpp:91:9:91:16 | fread output argument | test.cpp:93:17:93:24 | filename indirection | 0 | -| test.cpp:93:17:93:24 | (const char *)... | test.cpp:93:17:93:24 | filename indirection | 0 | -| test.cpp:93:17:93:24 | Unary | test.cpp:93:17:93:24 | filename indirection | 0 | -| test.cpp:93:17:93:24 | Unary | test.cpp:93:17:93:24 | filename indirection | 0 | -| test.cpp:93:17:93:24 | array to pointer conversion | test.cpp:93:17:93:24 | filename indirection | 0 | -| test.cpp:93:17:93:24 | filename | test.cpp:93:17:93:24 | filename indirection | 0 | -| test.cpp:93:17:93:24 | filename indirection | test.cpp:93:17:93:24 | filename indirection | 0 | -| test.cpp:97:18:97:21 | *arg2 | test.cpp:100:33:100:36 | arg2 indirection | 0 | -| test.cpp:97:18:97:21 | Address | test.cpp:100:33:100:36 | arg2 indirection | 0 | -| test.cpp:97:18:97:21 | Address | test.cpp:100:33:100:36 | arg2 indirection | 0 | -| test.cpp:97:18:97:21 | Load | test.cpp:100:33:100:36 | arg2 indirection | 0 | -| test.cpp:97:18:97:21 | Load | test.cpp:100:33:100:36 | arg2 indirection | 0 | -| test.cpp:97:18:97:21 | VariableAddress | test.cpp:100:33:100:36 | arg2 indirection | 0 | -| test.cpp:97:18:97:21 | arg2 | test.cpp:100:33:100:36 | arg2 indirection | 0 | -| test.cpp:100:33:100:36 | (const char *)... | test.cpp:100:33:100:36 | arg2 indirection | 0 | -| test.cpp:100:33:100:36 | Address | test.cpp:100:33:100:36 | arg2 indirection | 0 | -| test.cpp:100:33:100:36 | Load | test.cpp:100:33:100:36 | arg2 indirection | 0 | -| test.cpp:100:33:100:36 | Unary | test.cpp:100:33:100:36 | arg2 indirection | 0 | -| test.cpp:100:33:100:36 | VariableAddress | test.cpp:100:33:100:36 | arg2 indirection | 0 | -| test.cpp:100:33:100:36 | arg2 | test.cpp:100:33:100:36 | arg2 indirection | 0 | -| test.cpp:100:33:100:36 | arg2 indirection | test.cpp:100:33:100:36 | arg2 indirection | 0 | -| test.cpp:106:15:106:18 | Uninitialized | test.cpp:107:33:107:36 | path indirection | 0 | -| test.cpp:106:20:106:25 | call to getenv | test.cpp:107:33:107:36 | path indirection | 0 | -| test.cpp:106:20:106:38 | (const char *)... | test.cpp:107:33:107:36 | path indirection | 0 | -| test.cpp:106:20:106:38 | Address | test.cpp:107:33:107:36 | path indirection | 0 | -| test.cpp:106:20:106:38 | Unary | test.cpp:107:33:107:36 | path indirection | 0 | -| test.cpp:106:20:106:38 | call to getenv indirection | test.cpp:107:33:107:36 | path indirection | 0 | -| test.cpp:106:20:106:39 | Chi | test.cpp:107:33:107:36 | path indirection | 0 | -| test.cpp:106:20:106:39 | ChiPartial | test.cpp:107:33:107:36 | path indirection | 0 | -| test.cpp:106:20:106:39 | ChiTotal | test.cpp:107:33:107:36 | path indirection | 0 | -| test.cpp:106:20:106:39 | basic_string output argument | test.cpp:107:33:107:36 | path indirection | 0 | -| test.cpp:106:20:106:39 | call to getenv | test.cpp:107:33:107:36 | path indirection | 0 | -| test.cpp:107:33:107:36 | (const basic_string, allocator>)... | test.cpp:107:33:107:36 | path indirection | 0 | -| test.cpp:107:33:107:36 | (reference to) | test.cpp:107:33:107:36 | path indirection | 0 | -| test.cpp:107:33:107:36 | Unary | test.cpp:107:33:107:36 | path indirection | 0 | -| test.cpp:107:33:107:36 | Unary | test.cpp:107:33:107:36 | path indirection | 0 | -| test.cpp:107:33:107:36 | path | test.cpp:107:33:107:36 | path indirection | 0 | -| test.cpp:107:33:107:36 | path indirection | test.cpp:107:33:107:36 | path indirection | 0 | -| test.cpp:113:15:113:18 | Uninitialized | test.cpp:114:19:114:22 | path indirection | 0 | -| test.cpp:113:20:113:25 | call to getenv | test.cpp:114:19:114:22 | path indirection | 0 | -| test.cpp:113:20:113:38 | (const char *)... | test.cpp:114:19:114:22 | path indirection | 0 | -| test.cpp:113:20:113:38 | Address | test.cpp:114:19:114:22 | path indirection | 0 | -| test.cpp:113:20:113:38 | Unary | test.cpp:114:19:114:22 | path indirection | 0 | -| test.cpp:113:20:113:38 | call to getenv indirection | test.cpp:114:19:114:22 | path indirection | 0 | -| test.cpp:113:20:113:39 | Chi | test.cpp:114:19:114:22 | path indirection | 0 | -| test.cpp:113:20:113:39 | ChiPartial | test.cpp:114:19:114:22 | path indirection | 0 | -| test.cpp:113:20:113:39 | ChiTotal | test.cpp:114:19:114:22 | path indirection | 0 | -| test.cpp:113:20:113:39 | basic_string output argument | test.cpp:114:19:114:22 | path indirection | 0 | -| test.cpp:113:20:113:39 | call to getenv | test.cpp:114:19:114:22 | path indirection | 0 | -| test.cpp:114:19:114:22 | (const basic_string, allocator>)... | test.cpp:114:19:114:22 | path indirection | 0 | -| test.cpp:114:19:114:22 | (reference to) | test.cpp:114:19:114:22 | path indirection | 0 | -| test.cpp:114:19:114:22 | Unary | test.cpp:114:19:114:22 | path indirection | 0 | -| test.cpp:114:19:114:22 | Unary | test.cpp:114:19:114:22 | path indirection | 0 | -| test.cpp:114:19:114:22 | path | test.cpp:114:19:114:22 | path indirection | 0 | -| test.cpp:114:19:114:22 | path indirection | test.cpp:114:19:114:22 | path indirection | 0 | -| test.cpp:119:15:119:18 | Uninitialized | test.cpp:120:19:120:22 | path indirection | 0 | -| test.cpp:119:20:119:25 | call to getenv | test.cpp:120:19:120:22 | path indirection | 0 | -| test.cpp:119:20:119:38 | (const char *)... | test.cpp:120:19:120:22 | path indirection | 0 | -| test.cpp:119:20:119:38 | Address | test.cpp:120:19:120:22 | path indirection | 0 | -| test.cpp:119:20:119:38 | Unary | test.cpp:120:19:120:22 | path indirection | 0 | -| test.cpp:119:20:119:38 | call to getenv indirection | test.cpp:120:19:120:22 | path indirection | 0 | -| test.cpp:119:20:119:39 | Chi | test.cpp:120:19:120:22 | path indirection | 0 | -| test.cpp:119:20:119:39 | ChiPartial | test.cpp:120:19:120:22 | path indirection | 0 | -| test.cpp:119:20:119:39 | ChiTotal | test.cpp:120:19:120:22 | path indirection | 0 | -| test.cpp:119:20:119:39 | basic_string output argument | test.cpp:120:19:120:22 | path indirection | 0 | -| test.cpp:119:20:119:39 | call to getenv | test.cpp:120:19:120:22 | path indirection | 0 | -| test.cpp:120:19:120:22 | (const basic_string, allocator>)... | test.cpp:120:19:120:22 | path indirection | 0 | -| test.cpp:120:19:120:22 | (reference to) | test.cpp:120:19:120:22 | path indirection | 0 | -| test.cpp:120:19:120:22 | Unary | test.cpp:120:19:120:22 | path indirection | 0 | -| test.cpp:120:19:120:22 | Unary | test.cpp:120:19:120:22 | path indirection | 0 | -| test.cpp:120:19:120:22 | path | test.cpp:120:19:120:22 | path indirection | 0 | -| test.cpp:120:19:120:22 | path indirection | test.cpp:120:19:120:22 | path indirection | 0 | #select | test.cpp:23:12:23:19 | command1 | test.cpp:16:20:16:23 | argv | test.cpp:23:12:23:19 | command1 indirection | This argument to an OS command is derived from $@, dangerously concatenated into $@, and then passed to system(string) | test.cpp:16:20:16:23 | argv | user input (a command-line argument) | test.cpp:22:13:22:20 | sprintf output argument | sprintf output argument | | test.cpp:51:10:51:16 | command | test.cpp:47:21:47:26 | call to getenv | test.cpp:51:10:51:16 | command indirection | This argument to an OS command is derived from $@, dangerously concatenated into $@, and then passed to system(string) | test.cpp:47:21:47:26 | call to getenv | user input (an environment variable) | test.cpp:50:11:50:17 | sprintf output argument | sprintf output argument | From 5e265f45e1d98f1a43a7affe087913f6a916c7de Mon Sep 17 00:00:00 2001 From: Robert Marsh Date: Mon, 19 Jul 2021 23:05:26 +0000 Subject: [PATCH 439/741] C++: ExecTainted tests for int/string conversions --- .../semmle/ExecTainted/ExecTainted.expected | 108 ++++++++++++++++++ .../CWE/CWE-078/semmle/ExecTainted/test.cpp | 49 ++++++++ 2 files changed, 157 insertions(+) diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-078/semmle/ExecTainted/ExecTainted.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-078/semmle/ExecTainted/ExecTainted.expected index 403447bb7ff..dd3d07a8c81 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-078/semmle/ExecTainted/ExecTainted.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-078/semmle/ExecTainted/ExecTainted.expected @@ -94,12 +94,62 @@ edges | test.cpp:119:20:119:38 | (const char *)... | test.cpp:120:17:120:17 | call to operator+ | | test.cpp:119:20:119:38 | (const char *)... | test.cpp:120:19:120:22 | (reference to) | | test.cpp:119:20:119:38 | (const char *)... | test.cpp:120:19:120:22 | path indirection | +| test.cpp:129:9:129:12 | (void *)... | test.cpp:129:9:129:12 | temp indirection | +| test.cpp:129:9:129:12 | fread output argument | test.cpp:131:11:131:14 | Store | +| test.cpp:129:9:129:12 | fread output argument | test.cpp:131:11:131:14 | call to atoi | +| test.cpp:129:9:129:12 | fread output argument | test.cpp:131:11:131:14 | call to atoi | +| test.cpp:129:9:129:12 | fread output argument | test.cpp:131:16:131:19 | array to pointer conversion | +| test.cpp:129:9:129:12 | fread output argument | test.cpp:131:16:131:19 | temp indirection | +| test.cpp:129:9:129:12 | fread output argument | test.cpp:132:42:132:42 | x | +| test.cpp:129:9:129:12 | fread output argument | test.cpp:133:10:133:16 | (const char *)... | +| test.cpp:129:9:129:12 | fread output argument | test.cpp:133:10:133:16 | command indirection | +| test.cpp:131:11:131:14 | call to atoi | test.cpp:131:11:131:14 | Store | +| test.cpp:131:11:131:14 | call to atoi | test.cpp:132:42:132:42 | x | +| test.cpp:131:11:131:14 | call to atoi | test.cpp:133:10:133:16 | (const char *)... | +| test.cpp:131:11:131:14 | call to atoi | test.cpp:133:10:133:16 | command indirection | +| test.cpp:140:9:140:11 | (void *)... | test.cpp:140:9:140:11 | str indirection | +| test.cpp:140:9:140:11 | fread output argument | test.cpp:142:31:142:33 | array to pointer conversion | +| test.cpp:140:9:140:11 | fread output argument | test.cpp:142:31:142:33 | str indirection | +| test.cpp:140:9:140:11 | fread output argument | test.cpp:142:31:142:33 | str indirection | +| test.cpp:140:9:140:11 | fread output argument | test.cpp:143:10:143:16 | (const char *)... | +| test.cpp:140:9:140:11 | fread output argument | test.cpp:143:10:143:16 | command indirection | +| test.cpp:142:11:142:17 | sprintf output argument | test.cpp:143:10:143:16 | command indirection | +| test.cpp:142:31:142:33 | str indirection | test.cpp:142:11:142:17 | sprintf output argument | +| test.cpp:142:31:142:33 | str indirection | test.cpp:142:11:142:17 | sprintf output argument | +| test.cpp:150:9:150:11 | (void *)... | test.cpp:150:9:150:11 | str indirection | +| test.cpp:150:9:150:11 | fread output argument | test.cpp:152:31:152:33 | array to pointer conversion | +| test.cpp:150:9:150:11 | fread output argument | test.cpp:152:31:152:33 | str indirection | +| test.cpp:150:9:150:11 | fread output argument | test.cpp:153:10:153:16 | (const char *)... | +| test.cpp:150:9:150:11 | fread output argument | test.cpp:153:10:153:16 | command indirection | +| test.cpp:160:9:160:12 | (void *)... | test.cpp:160:9:160:12 | temp indirection | +| test.cpp:160:9:160:12 | fread output argument | test.cpp:162:11:162:14 | Store | +| test.cpp:160:9:160:12 | fread output argument | test.cpp:162:11:162:14 | call to atoi | +| test.cpp:160:9:160:12 | fread output argument | test.cpp:162:11:162:14 | call to atoi | +| test.cpp:160:9:160:12 | fread output argument | test.cpp:162:16:162:19 | array to pointer conversion | +| test.cpp:160:9:160:12 | fread output argument | test.cpp:162:16:162:19 | temp indirection | +| test.cpp:160:9:160:12 | fread output argument | test.cpp:165:24:165:24 | x | +| test.cpp:160:9:160:12 | fread output argument | test.cpp:166:44:166:48 | array to pointer conversion | +| test.cpp:160:9:160:12 | fread output argument | test.cpp:166:44:166:48 | temp2 indirection | +| test.cpp:160:9:160:12 | fread output argument | test.cpp:166:44:166:48 | temp2 indirection | +| test.cpp:160:9:160:12 | fread output argument | test.cpp:168:10:168:16 | (const char *)... | +| test.cpp:160:9:160:12 | fread output argument | test.cpp:168:10:168:16 | command indirection | +| test.cpp:162:11:162:14 | call to atoi | test.cpp:162:11:162:14 | Store | +| test.cpp:162:11:162:14 | call to atoi | test.cpp:165:24:165:24 | x | +| test.cpp:162:11:162:14 | call to atoi | test.cpp:166:44:166:48 | array to pointer conversion | +| test.cpp:162:11:162:14 | call to atoi | test.cpp:166:44:166:48 | temp2 indirection | +| test.cpp:162:11:162:14 | call to atoi | test.cpp:168:10:168:16 | (const char *)... | +| test.cpp:162:11:162:14 | call to atoi | test.cpp:168:10:168:16 | command indirection | +| test.cpp:166:13:166:19 | sprintf output argument | test.cpp:168:10:168:16 | command indirection | +| test.cpp:166:44:166:48 | temp2 indirection | test.cpp:166:13:166:19 | sprintf output argument | +| test.cpp:166:44:166:48 | temp2 indirection | test.cpp:166:13:166:19 | sprintf output argument | #select | test.cpp:23:12:23:19 | command1 | test.cpp:16:20:16:23 | argv | test.cpp:23:12:23:19 | command1 indirection | This argument to an OS command is derived from $@, dangerously concatenated into $@, and then passed to system(string) | test.cpp:16:20:16:23 | argv | user input (a command-line argument) | test.cpp:22:13:22:20 | sprintf output argument | sprintf output argument | | test.cpp:51:10:51:16 | command | test.cpp:47:21:47:26 | call to getenv | test.cpp:51:10:51:16 | command indirection | This argument to an OS command is derived from $@, dangerously concatenated into $@, and then passed to system(string) | test.cpp:47:21:47:26 | call to getenv | user input (an environment variable) | test.cpp:50:11:50:17 | sprintf output argument | sprintf output argument | | test.cpp:65:10:65:16 | command | test.cpp:62:9:62:16 | fread output argument | test.cpp:65:10:65:16 | command indirection | This argument to an OS command is derived from $@, dangerously concatenated into $@, and then passed to system(string) | test.cpp:62:9:62:16 | fread output argument | user input (String read by fread) | test.cpp:64:11:64:17 | strncat output argument | strncat output argument | | test.cpp:85:32:85:38 | command | test.cpp:82:9:82:16 | fread output argument | test.cpp:85:32:85:38 | command indirection | This argument to an OS command is derived from $@, dangerously concatenated into $@, and then passed to execl | test.cpp:82:9:82:16 | fread output argument | user input (String read by fread) | test.cpp:84:11:84:17 | strncat output argument | strncat output argument | | test.cpp:94:45:94:48 | path | test.cpp:91:9:91:16 | fread output argument | test.cpp:94:45:94:48 | path indirection | This argument to an OS command is derived from $@, dangerously concatenated into $@, and then passed to execl | test.cpp:91:9:91:16 | fread output argument | user input (String read by fread) | test.cpp:93:11:93:14 | strncat output argument | strncat output argument | +| test.cpp:143:10:143:16 | command | test.cpp:140:9:140:11 | fread output argument | test.cpp:143:10:143:16 | command indirection | This argument to an OS command is derived from $@, dangerously concatenated into $@, and then passed to system(string) | test.cpp:140:9:140:11 | fread output argument | user input (String read by fread) | test.cpp:142:11:142:17 | sprintf output argument | sprintf output argument | +| test.cpp:168:10:168:16 | command | test.cpp:160:9:160:12 | fread output argument | test.cpp:168:10:168:16 | command indirection | This argument to an OS command is derived from $@, dangerously concatenated into $@, and then passed to system(string) | test.cpp:160:9:160:12 | fread output argument | user input (String read by fread) | test.cpp:166:13:166:19 | sprintf output argument | sprintf output argument | nodes | test.cpp:16:20:16:23 | argv | semmle.label | argv | | test.cpp:16:20:16:23 | argv | semmle.label | argv | @@ -235,3 +285,61 @@ nodes | test.cpp:120:19:120:22 | (reference to) | semmle.label | (reference to) | | test.cpp:120:19:120:22 | path indirection | semmle.label | path indirection | | test.cpp:120:19:120:22 | path indirection | semmle.label | path indirection | +| test.cpp:129:9:129:12 | (void *)... | semmle.label | (void *)... | +| test.cpp:129:9:129:12 | (void *)... | semmle.label | (void *)... | +| test.cpp:129:9:129:12 | array to pointer conversion | semmle.label | array to pointer conversion | +| test.cpp:129:9:129:12 | fread output argument | semmle.label | fread output argument | +| test.cpp:129:9:129:12 | temp | semmle.label | temp | +| test.cpp:129:9:129:12 | temp indirection | semmle.label | temp indirection | +| test.cpp:131:11:131:14 | Store | semmle.label | Store | +| test.cpp:131:11:131:14 | call to atoi | semmle.label | call to atoi | +| test.cpp:131:11:131:14 | call to atoi | semmle.label | call to atoi | +| test.cpp:131:16:131:19 | array to pointer conversion | semmle.label | array to pointer conversion | +| test.cpp:131:16:131:19 | temp indirection | semmle.label | temp indirection | +| test.cpp:132:42:132:42 | x | semmle.label | x | +| test.cpp:133:10:133:16 | (const char *)... | semmle.label | (const char *)... | +| test.cpp:133:10:133:16 | command indirection | semmle.label | command indirection | +| test.cpp:140:9:140:11 | (void *)... | semmle.label | (void *)... | +| test.cpp:140:9:140:11 | (void *)... | semmle.label | (void *)... | +| test.cpp:140:9:140:11 | array to pointer conversion | semmle.label | array to pointer conversion | +| test.cpp:140:9:140:11 | fread output argument | semmle.label | fread output argument | +| test.cpp:140:9:140:11 | fread output argument | semmle.label | fread output argument | +| test.cpp:140:9:140:11 | str | semmle.label | str | +| test.cpp:140:9:140:11 | str indirection | semmle.label | str indirection | +| test.cpp:142:11:142:17 | sprintf output argument | semmle.label | sprintf output argument | +| test.cpp:142:31:142:33 | array to pointer conversion | semmle.label | array to pointer conversion | +| test.cpp:142:31:142:33 | str indirection | semmle.label | str indirection | +| test.cpp:142:31:142:33 | str indirection | semmle.label | str indirection | +| test.cpp:143:10:143:16 | (const char *)... | semmle.label | (const char *)... | +| test.cpp:143:10:143:16 | command indirection | semmle.label | command indirection | +| test.cpp:143:10:143:16 | command indirection | semmle.label | command indirection | +| test.cpp:150:9:150:11 | (void *)... | semmle.label | (void *)... | +| test.cpp:150:9:150:11 | (void *)... | semmle.label | (void *)... | +| test.cpp:150:9:150:11 | array to pointer conversion | semmle.label | array to pointer conversion | +| test.cpp:150:9:150:11 | fread output argument | semmle.label | fread output argument | +| test.cpp:150:9:150:11 | str | semmle.label | str | +| test.cpp:150:9:150:11 | str indirection | semmle.label | str indirection | +| test.cpp:152:31:152:33 | array to pointer conversion | semmle.label | array to pointer conversion | +| test.cpp:152:31:152:33 | str indirection | semmle.label | str indirection | +| test.cpp:153:10:153:16 | (const char *)... | semmle.label | (const char *)... | +| test.cpp:153:10:153:16 | command indirection | semmle.label | command indirection | +| test.cpp:160:9:160:12 | (void *)... | semmle.label | (void *)... | +| test.cpp:160:9:160:12 | (void *)... | semmle.label | (void *)... | +| test.cpp:160:9:160:12 | array to pointer conversion | semmle.label | array to pointer conversion | +| test.cpp:160:9:160:12 | fread output argument | semmle.label | fread output argument | +| test.cpp:160:9:160:12 | fread output argument | semmle.label | fread output argument | +| test.cpp:160:9:160:12 | temp | semmle.label | temp | +| test.cpp:160:9:160:12 | temp indirection | semmle.label | temp indirection | +| test.cpp:162:11:162:14 | Store | semmle.label | Store | +| test.cpp:162:11:162:14 | call to atoi | semmle.label | call to atoi | +| test.cpp:162:11:162:14 | call to atoi | semmle.label | call to atoi | +| test.cpp:162:16:162:19 | array to pointer conversion | semmle.label | array to pointer conversion | +| test.cpp:162:16:162:19 | temp indirection | semmle.label | temp indirection | +| test.cpp:165:24:165:24 | x | semmle.label | x | +| test.cpp:166:13:166:19 | sprintf output argument | semmle.label | sprintf output argument | +| test.cpp:166:44:166:48 | array to pointer conversion | semmle.label | array to pointer conversion | +| test.cpp:166:44:166:48 | temp2 indirection | semmle.label | temp2 indirection | +| test.cpp:166:44:166:48 | temp2 indirection | semmle.label | temp2 indirection | +| test.cpp:168:10:168:16 | (const char *)... | semmle.label | (const char *)... | +| test.cpp:168:10:168:16 | command indirection | semmle.label | command indirection | +| test.cpp:168:10:168:16 | command indirection | semmle.label | command indirection | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-078/semmle/ExecTainted/test.cpp b/cpp/ql/test/query-tests/Security/CWE/CWE-078/semmle/ExecTainted/test.cpp index 88baf1dfd84..8407ffb68da 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-078/semmle/ExecTainted/test.cpp +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-078/semmle/ExecTainted/test.cpp @@ -120,6 +120,55 @@ void test11(FILE *f) { system(("mv " + path).data()); } +int atoi(char *); + +void test12(FILE *f) { + char temp[10]; + char command[1000]; + + fread(temp, 1, 10, f); + + int x = atoi(temp); + sprintf(command, "tail -n %d foo.log", x); + system(command); // GOOD: the user string was converted to an integer and back +} + +void test13(FILE *f) { + char str[1000]; + char command[1000]; + + fread(str, 1, 1000, f); + + sprintf(command, "echo %s", str); + system(command); // BAD: the user string was printed into the command with the %s specifier +} + +void test14(FILE *f) { + char str[1000]; + char command[1000]; + + fread(str, 1, 1000, f); + + sprintf(command, "echo %p", str); + system(command); // GOOD: the user string's address was printed into the command with the %p specifier +} + +void test15(FILE *f) { + char temp[10]; + char command[1000]; + + fread(temp, 1, 10, f); + + int x = atoi(temp); + + char temp2[10]; + sprintf(temp2, "%d", x); + sprintf(command, "tail -n %s foo.log", temp2); + + system(command); // GOOD: the user string was converted to an integer and back +} + + // TODO: test for call context sensitivity at concatenation site // open question: do we want to report certain sources even when they're the start of the string? From 37c92178a5597cca0d34309a127f1221ca4f970c Mon Sep 17 00:00:00 2001 From: Robert Marsh Date: Mon, 19 Jul 2021 23:06:59 +0000 Subject: [PATCH 440/741] C++: exclude int/string conversion in ExecTainted --- cpp/ql/src/Security/CWE/CWE-078/ExecTainted.ql | 12 +++++++----- .../CWE-078/semmle/ExecTainted/ExecTainted.expected | 6 ------ 2 files changed, 7 insertions(+), 11 deletions(-) diff --git a/cpp/ql/src/Security/CWE/CWE-078/ExecTainted.ql b/cpp/ql/src/Security/CWE/CWE-078/ExecTainted.ql index a3e205284ed..f4598c3c13d 100644 --- a/cpp/ql/src/Security/CWE/CWE-078/ExecTainted.ql +++ b/cpp/ql/src/Security/CWE/CWE-078/ExecTainted.ql @@ -43,11 +43,7 @@ predicate interestingConcatenation(DataFlow::Node fst, DataFlow::Node snd) { snd.asDefiningArgument() = call.getOutputArgument(false) and literal = call.getFormat() and not literal.getConvSpecOffset(index) = 0 and - ( - literal.getConversionType(index) instanceof CharPointerType - or - literal.getConversionType(index).(PointerType).getBaseType() instanceof Wchar_t - ) + literal.getConversionChar(index) = ["s", "S"] ) or // strcat and friends @@ -81,6 +77,12 @@ class TaintToConcatenationConfiguration extends TaintTracking::Configuration { override predicate isSink(DataFlow::Node sink) { interestingConcatenation(sink, _) } + + override predicate isSanitizer(DataFlow::Node node) { + node.asInstruction().getResultType() instanceof IntegralType + or + node.asInstruction().getResultType() instanceof FloatingPointType + } } class ExecTaintConfiguration extends TaintTracking::Configuration { diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-078/semmle/ExecTainted/ExecTainted.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-078/semmle/ExecTainted/ExecTainted.expected index dd3d07a8c81..f4605098900 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-078/semmle/ExecTainted/ExecTainted.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-078/semmle/ExecTainted/ExecTainted.expected @@ -130,7 +130,6 @@ edges | test.cpp:160:9:160:12 | fread output argument | test.cpp:165:24:165:24 | x | | test.cpp:160:9:160:12 | fread output argument | test.cpp:166:44:166:48 | array to pointer conversion | | test.cpp:160:9:160:12 | fread output argument | test.cpp:166:44:166:48 | temp2 indirection | -| test.cpp:160:9:160:12 | fread output argument | test.cpp:166:44:166:48 | temp2 indirection | | test.cpp:160:9:160:12 | fread output argument | test.cpp:168:10:168:16 | (const char *)... | | test.cpp:160:9:160:12 | fread output argument | test.cpp:168:10:168:16 | command indirection | | test.cpp:162:11:162:14 | call to atoi | test.cpp:162:11:162:14 | Store | @@ -140,8 +139,6 @@ edges | test.cpp:162:11:162:14 | call to atoi | test.cpp:168:10:168:16 | (const char *)... | | test.cpp:162:11:162:14 | call to atoi | test.cpp:168:10:168:16 | command indirection | | test.cpp:166:13:166:19 | sprintf output argument | test.cpp:168:10:168:16 | command indirection | -| test.cpp:166:44:166:48 | temp2 indirection | test.cpp:166:13:166:19 | sprintf output argument | -| test.cpp:166:44:166:48 | temp2 indirection | test.cpp:166:13:166:19 | sprintf output argument | #select | test.cpp:23:12:23:19 | command1 | test.cpp:16:20:16:23 | argv | test.cpp:23:12:23:19 | command1 indirection | This argument to an OS command is derived from $@, dangerously concatenated into $@, and then passed to system(string) | test.cpp:16:20:16:23 | argv | user input (a command-line argument) | test.cpp:22:13:22:20 | sprintf output argument | sprintf output argument | | test.cpp:51:10:51:16 | command | test.cpp:47:21:47:26 | call to getenv | test.cpp:51:10:51:16 | command indirection | This argument to an OS command is derived from $@, dangerously concatenated into $@, and then passed to system(string) | test.cpp:47:21:47:26 | call to getenv | user input (an environment variable) | test.cpp:50:11:50:17 | sprintf output argument | sprintf output argument | @@ -149,7 +146,6 @@ edges | test.cpp:85:32:85:38 | command | test.cpp:82:9:82:16 | fread output argument | test.cpp:85:32:85:38 | command indirection | This argument to an OS command is derived from $@, dangerously concatenated into $@, and then passed to execl | test.cpp:82:9:82:16 | fread output argument | user input (String read by fread) | test.cpp:84:11:84:17 | strncat output argument | strncat output argument | | test.cpp:94:45:94:48 | path | test.cpp:91:9:91:16 | fread output argument | test.cpp:94:45:94:48 | path indirection | This argument to an OS command is derived from $@, dangerously concatenated into $@, and then passed to execl | test.cpp:91:9:91:16 | fread output argument | user input (String read by fread) | test.cpp:93:11:93:14 | strncat output argument | strncat output argument | | test.cpp:143:10:143:16 | command | test.cpp:140:9:140:11 | fread output argument | test.cpp:143:10:143:16 | command indirection | This argument to an OS command is derived from $@, dangerously concatenated into $@, and then passed to system(string) | test.cpp:140:9:140:11 | fread output argument | user input (String read by fread) | test.cpp:142:11:142:17 | sprintf output argument | sprintf output argument | -| test.cpp:168:10:168:16 | command | test.cpp:160:9:160:12 | fread output argument | test.cpp:168:10:168:16 | command indirection | This argument to an OS command is derived from $@, dangerously concatenated into $@, and then passed to system(string) | test.cpp:160:9:160:12 | fread output argument | user input (String read by fread) | test.cpp:166:13:166:19 | sprintf output argument | sprintf output argument | nodes | test.cpp:16:20:16:23 | argv | semmle.label | argv | | test.cpp:16:20:16:23 | argv | semmle.label | argv | @@ -327,7 +323,6 @@ nodes | test.cpp:160:9:160:12 | (void *)... | semmle.label | (void *)... | | test.cpp:160:9:160:12 | array to pointer conversion | semmle.label | array to pointer conversion | | test.cpp:160:9:160:12 | fread output argument | semmle.label | fread output argument | -| test.cpp:160:9:160:12 | fread output argument | semmle.label | fread output argument | | test.cpp:160:9:160:12 | temp | semmle.label | temp | | test.cpp:160:9:160:12 | temp indirection | semmle.label | temp indirection | | test.cpp:162:11:162:14 | Store | semmle.label | Store | @@ -339,7 +334,6 @@ nodes | test.cpp:166:13:166:19 | sprintf output argument | semmle.label | sprintf output argument | | test.cpp:166:44:166:48 | array to pointer conversion | semmle.label | array to pointer conversion | | test.cpp:166:44:166:48 | temp2 indirection | semmle.label | temp2 indirection | -| test.cpp:166:44:166:48 | temp2 indirection | semmle.label | temp2 indirection | | test.cpp:168:10:168:16 | (const char *)... | semmle.label | (const char *)... | | test.cpp:168:10:168:16 | command indirection | semmle.label | command indirection | | test.cpp:168:10:168:16 | command indirection | semmle.label | command indirection | From 181eb803e18045c1424b306ed2252960fe1cc69c Mon Sep 17 00:00:00 2001 From: Robert Marsh Date: Thu, 22 Jul 2021 00:05:08 +0000 Subject: [PATCH 441/741] C++: Add QLDoc for getOutputArgument --- cpp/ql/lib/semmle/code/cpp/commons/Printf.qll | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/cpp/ql/lib/semmle/code/cpp/commons/Printf.qll b/cpp/ql/lib/semmle/code/cpp/commons/Printf.qll index b4e5a5c1d69..d2fef677f25 100644 --- a/cpp/ql/lib/semmle/code/cpp/commons/Printf.qll +++ b/cpp/ql/lib/semmle/code/cpp/commons/Printf.qll @@ -255,7 +255,10 @@ class FormattingFunctionCall extends Expr { } /** - * + * Gets the argument, if any, to which the output is written. If `isStream` is + * `true`, the output argument is a stream (that is, this call behaves like + * `fprintf`). If `isStream` is `false`, the output argument is a buffer (that + * is, this call behaves like `sprintf`) */ Expr getOutputArgument(boolean isStream) { result = this.(Call).getArgument(this.(Call).getTarget().(FormattingFunction).getOutputParameterIndex(isStream)) From c30e7ec41aceb30494f81211fb4aeba6b969480d Mon Sep 17 00:00:00 2001 From: Robert Marsh Date: Thu, 22 Jul 2021 00:12:44 +0000 Subject: [PATCH 442/741] C++: raise precision of cpp/command-line-injection --- cpp/ql/src/Security/CWE/CWE-078/ExecTainted.ql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpp/ql/src/Security/CWE/CWE-078/ExecTainted.ql b/cpp/ql/src/Security/CWE/CWE-078/ExecTainted.ql index f4598c3c13d..95854de94f3 100644 --- a/cpp/ql/src/Security/CWE/CWE-078/ExecTainted.ql +++ b/cpp/ql/src/Security/CWE/CWE-078/ExecTainted.ql @@ -6,7 +6,7 @@ * @kind path-problem * @problem.severity error * @security-severity 9.8 - * @precision low + * @precision high * @id cpp/command-line-injection * @tags security * external/cwe/cwe-078 From 4d2036fa26307db00139d8014a5918e1a9253f2e Mon Sep 17 00:00:00 2001 From: Robert Marsh Date: Thu, 22 Jul 2021 00:12:57 +0000 Subject: [PATCH 443/741] C++: change note for cpp/command-line-injection --- cpp/change-notes/2021-07-21-command-line-injection.md | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 cpp/change-notes/2021-07-21-command-line-injection.md diff --git a/cpp/change-notes/2021-07-21-command-line-injection.md b/cpp/change-notes/2021-07-21-command-line-injection.md new file mode 100644 index 00000000000..53ce1fd1dbe --- /dev/null +++ b/cpp/change-notes/2021-07-21-command-line-injection.md @@ -0,0 +1,2 @@ +lgtm,codescanning +* The "Uncontrolled data used in OS command" (`cpp/command-line-injection`) query has been enhanced to reduce false positive results and its `@precision` increased to `high` \ No newline at end of file From 5dc6e13ab5fede2720b8cfc2a8c5bdde8ae4e886 Mon Sep 17 00:00:00 2001 From: Robert Marsh Date: Wed, 28 Jul 2021 13:18:27 -0700 Subject: [PATCH 444/741] C++: use TaintTracking2 in ExecTainted.ql --- cpp/ql/src/Security/CWE/CWE-078/ExecTainted.ql | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/cpp/ql/src/Security/CWE/CWE-078/ExecTainted.ql b/cpp/ql/src/Security/CWE/CWE-078/ExecTainted.ql index 95854de94f3..a67de5aefae 100644 --- a/cpp/ql/src/Security/CWE/CWE-078/ExecTainted.ql +++ b/cpp/ql/src/Security/CWE/CWE-078/ExecTainted.ql @@ -22,6 +22,8 @@ import semmle.code.cpp.ir.IR import semmle.code.cpp.security.FlowSources import semmle.code.cpp.models.implementations.Strcat +import DataFlow::PathGraph + Expr sinkAsArgumentIndirection(DataFlow::Node sink) { result = sink.asOperand() @@ -85,7 +87,7 @@ class TaintToConcatenationConfiguration extends TaintTracking::Configuration { } } -class ExecTaintConfiguration extends TaintTracking::Configuration { +class ExecTaintConfiguration extends TaintTracking2::Configuration { ExecTaintConfiguration() { this = "ExecTaintConfiguration" } override predicate isSource(DataFlow::Node source) { @@ -101,17 +103,8 @@ class ExecTaintConfiguration extends TaintTracking::Configuration { } } -query predicate nodes = DataFlow::PathGraph::nodes/3; - -query predicate edges(DataFlow::PathNode a, DataFlow::PathNode b) { - DataFlow::PathGraph::edges(a, b) or - interestingConcatenation(a.getNode(), b.getNode()) and - a.getConfiguration() instanceof TaintToConcatenationConfiguration and - b.getConfiguration() instanceof ExecTaintConfiguration -} - from - DataFlow::PathNode sourceNode, DataFlow::PathNode concatSink, DataFlow::PathNode concatSource, DataFlow::PathNode sinkNode, string taintCause, string callChain, + DataFlow::PathNode sourceNode, DataFlow::PathNode concatSink, DataFlow2::PathNode concatSource, DataFlow2::PathNode sinkNode, string taintCause, string callChain, TaintToConcatenationConfiguration conf1, ExecTaintConfiguration conf2 where taintCause = sourceNode.getNode().(FlowSource).getSourceType() and @@ -122,3 +115,4 @@ where select sinkAsArgumentIndirection(sinkNode.getNode()), sourceNode, sinkNode, "This argument to an OS command is derived from $@, dangerously concatenated into $@, and then passed to " + callChain, sourceNode, "user input (" + taintCause + ")", concatSource, concatSource.toString() + \ No newline at end of file From e874fbbea2ff1b5bb12098ad2850c02ae8a9738a Mon Sep 17 00:00:00 2001 From: Robert Marsh Date: Wed, 28 Jul 2021 14:27:42 -0700 Subject: [PATCH 445/741] C++: Add path stitching in ExecTainted.ql --- .../src/Security/CWE/CWE-078/ExecTainted.ql | 122 +++++++++++++++--- 1 file changed, 101 insertions(+), 21 deletions(-) diff --git a/cpp/ql/src/Security/CWE/CWE-078/ExecTainted.ql b/cpp/ql/src/Security/CWE/CWE-078/ExecTainted.ql index a67de5aefae..2c9b183a5c4 100644 --- a/cpp/ql/src/Security/CWE/CWE-078/ExecTainted.ql +++ b/cpp/ql/src/Security/CWE/CWE-078/ExecTainted.ql @@ -22,8 +22,6 @@ import semmle.code.cpp.ir.IR import semmle.code.cpp.security.FlowSources import semmle.code.cpp.models.implementations.Strcat -import DataFlow::PathGraph - Expr sinkAsArgumentIndirection(DataFlow::Node sink) { result = sink.asOperand() @@ -54,7 +52,7 @@ predicate interestingConcatenation(DataFlow::Node fst, DataFlow::Node snd) { rse.getArgumentDef() = call.getArgument(strcatFunc.getParamSrc()) and fst.asOperand() = rse.getSideEffectOperand() and snd.asInstruction().(WriteSideEffectInstruction).getDestinationAddress() = - call.getArgument(strcatFunc.getParamDest()) + call.getArgument(strcatFunc.getParamDest()) ) or exists(CallInstruction call, Operator op, ReadSideEffectInstruction rse | @@ -63,8 +61,7 @@ predicate interestingConcatenation(DataFlow::Node fst, DataFlow::Node snd) { op.getType().(UserType).hasQualifiedName("std", "basic_string") and call.getArgument(1) = rse.getArgumentOperand().getAnyDef() and // left operand fst.asOperand() = rse.getSideEffectOperand() and - call = - snd.asInstruction() + call = snd.asInstruction() ) } @@ -72,13 +69,9 @@ predicate interestingConcatenation(DataFlow::Node fst, DataFlow::Node snd) { class TaintToConcatenationConfiguration extends TaintTracking::Configuration { TaintToConcatenationConfiguration() { this = "TaintToConcatenationConfiguration" } - override predicate isSource(DataFlow::Node source) { - source instanceof FlowSource - } + override predicate isSource(DataFlow::Node source) { source instanceof FlowSource } - override predicate isSink(DataFlow::Node sink) { - interestingConcatenation(sink, _) - } + override predicate isSink(DataFlow::Node sink) { interestingConcatenation(sink, _) } override predicate isSanitizer(DataFlow::Node node) { node.asInstruction().getResultType() instanceof IntegralType @@ -90,9 +83,7 @@ class TaintToConcatenationConfiguration extends TaintTracking::Configuration { class ExecTaintConfiguration extends TaintTracking2::Configuration { ExecTaintConfiguration() { this = "ExecTaintConfiguration" } - override predicate isSource(DataFlow::Node source) { - interestingConcatenation(_, source) - } + override predicate isSource(DataFlow::Node source) { interestingConcatenation(_, source) } override predicate isSink(DataFlow::Node sink) { shellCommand(sinkAsArgumentIndirection(sink), _) @@ -103,16 +94,105 @@ class ExecTaintConfiguration extends TaintTracking2::Configuration { } } +module StitchedPathGraph { + // There's a different PathNode class for each DataFlowImplN.qll, so we can't simply combine the + // PathGraph predicates directly. Instead, we use a newtype so there's a single type that + // contains both sets of PathNodes. + newtype TMergedPathNode = + TPathNode1(DataFlow::PathNode node) or + TPathNode2(DataFlow2::PathNode node) + + // this wraps the toString and location predicates so we can use the merged node type in a + // selection + class MergedPathNode extends TMergedPathNode { + string toString() { + exists(DataFlow::PathNode n | + this = TPathNode1(n) and + result = n.toString() + ) + or + exists(DataFlow2::PathNode n | + this = TPathNode2(n) and + result = n.toString() + ) + } + + DataFlow::Node getNode() { + exists(DataFlow::PathNode n | + this = TPathNode1(n) and + result = n.getNode() + ) + or + exists(DataFlow2::PathNode n | + this = TPathNode2(n) and + result = n.getNode() + ) + } + + predicate hasLocationInfo( + string filepath, int startline, int startcolumn, int endline, int endcolumn + ) { + exists(DataFlow::PathNode n | + this = TPathNode1(n) and + n.hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) + ) + or + exists(DataFlow2::PathNode n | + this = TPathNode2(n) and + n.hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) + ) + } + } + + query predicate edges(MergedPathNode a, MergedPathNode b) { + exists(DataFlow::PathNode an, DataFlow::PathNode bn | + a = TPathNode1(an) and + b = TPathNode1(bn) and + DataFlow::PathGraph::edges(an, bn) + ) + or + exists(DataFlow2::PathNode an, DataFlow2::PathNode bn | + a = TPathNode2(an) and + b = TPathNode2(bn) and + DataFlow2::PathGraph::edges(an, bn) + ) + or + // This is where paths from the two configurations are connected. `interestingConcatenation` + // is the only thing in this module that's actually specific to the query - everything else is + // just using types and predicates from the DataFlow library. + interestingConcatenation(a.getNode(), b.getNode()) and + a instanceof TPathNode1 and + b instanceof TPathNode2 + } + + query predicate nodes(MergedPathNode mpn, string key, string val) { + // here we just need the union of the underlying `nodes` predicates + exists(DataFlow::PathNode n | + mpn = TPathNode1(n) and + DataFlow::PathGraph::nodes(n, key, val) + ) + or + exists(DataFlow2::PathNode n | + mpn = TPathNode2(n) and + DataFlow2::PathGraph::nodes(n, key, val) + ) + } +} + +import StitchedPathGraph + from - DataFlow::PathNode sourceNode, DataFlow::PathNode concatSink, DataFlow2::PathNode concatSource, DataFlow2::PathNode sinkNode, string taintCause, string callChain, + DataFlow::PathNode sourceNode, DataFlow::PathNode concatSink, DataFlow2::PathNode concatSource, + DataFlow2::PathNode sinkNode, string taintCause, string callChain, TaintToConcatenationConfiguration conf1, ExecTaintConfiguration conf2 where taintCause = sourceNode.getNode().(FlowSource).getSourceType() and - conf1.hasFlowPath(sourceNode, concatSink) and // TODO: can we link these better? - interestingConcatenation(concatSink.getNode(), concatSource.getNode()) and + conf1.hasFlowPath(sourceNode, concatSink) and + interestingConcatenation(concatSink.getNode(), concatSource.getNode()) and // this loses call context conf2.hasFlowPath(concatSource, sinkNode) and shellCommand(sinkAsArgumentIndirection(sinkNode.getNode()), callChain) -select sinkAsArgumentIndirection(sinkNode.getNode()), sourceNode, sinkNode, - "This argument to an OS command is derived from $@, dangerously concatenated into $@, and then passed to " + callChain, sourceNode, - "user input (" + taintCause + ")", concatSource, concatSource.toString() - \ No newline at end of file +select sinkAsArgumentIndirection(sinkNode.getNode()), TPathNode1(sourceNode).(MergedPathNode), + TPathNode2(sinkNode).(MergedPathNode), + "This argument to an OS command is derived from $@, dangerously concatenated into $@, and then passed to " + + callChain, sourceNode, "user input (" + taintCause + ")", concatSource, + concatSource.toString() From fe1f9878ba2d0c0481ed8e2e2ea9411bafc53fcf Mon Sep 17 00:00:00 2001 From: Robert Marsh Date: Mon, 2 Aug 2021 14:23:16 -0700 Subject: [PATCH 446/741] C++: add GVN import to fix reevaluation --- cpp/ql/src/Security/CWE/CWE-078/ExecTainted.ql | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cpp/ql/src/Security/CWE/CWE-078/ExecTainted.ql b/cpp/ql/src/Security/CWE/CWE-078/ExecTainted.ql index 2c9b183a5c4..84464c6d84c 100644 --- a/cpp/ql/src/Security/CWE/CWE-078/ExecTainted.ql +++ b/cpp/ql/src/Security/CWE/CWE-078/ExecTainted.ql @@ -16,9 +16,10 @@ import cpp import semmle.code.cpp.security.CommandExecution import semmle.code.cpp.security.Security +import semmle.code.cpp.valuenumbering.GlobalValueNumbering +import semmle.code.cpp.ir.IR import semmle.code.cpp.ir.dataflow.TaintTracking import semmle.code.cpp.ir.dataflow.TaintTracking2 -import semmle.code.cpp.ir.IR import semmle.code.cpp.security.FlowSources import semmle.code.cpp.models.implementations.Strcat From 3cd08bc724bd4f55f3c816f7edb39025f264ef18 Mon Sep 17 00:00:00 2001 From: Robert Marsh Date: Mon, 2 Aug 2021 16:35:44 -0700 Subject: [PATCH 447/741] C++: autoformat Printf.qll --- cpp/ql/lib/semmle/code/cpp/commons/Printf.qll | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/cpp/ql/lib/semmle/code/cpp/commons/Printf.qll b/cpp/ql/lib/semmle/code/cpp/commons/Printf.qll index d2fef677f25..46ca9ccf009 100644 --- a/cpp/ql/lib/semmle/code/cpp/commons/Printf.qll +++ b/cpp/ql/lib/semmle/code/cpp/commons/Printf.qll @@ -261,7 +261,12 @@ class FormattingFunctionCall extends Expr { * is, this call behaves like `sprintf`) */ Expr getOutputArgument(boolean isStream) { - result = this.(Call).getArgument(this.(Call).getTarget().(FormattingFunction).getOutputParameterIndex(isStream)) + result = + this.(Call) + .getArgument(this.(Call) + .getTarget() + .(FormattingFunction) + .getOutputParameterIndex(isStream)) } } From 83cc098412fac641a40c41f4ec854a364ee051a7 Mon Sep 17 00:00:00 2001 From: Robert Marsh Date: Tue, 3 Aug 2021 12:53:52 -0700 Subject: [PATCH 448/741] C++: accept test output --- .../semmle/ExecTainted/ExecTainted.expected | 28 ++++++++++++++----- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-078/semmle/ExecTainted/ExecTainted.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-078/semmle/ExecTainted/ExecTainted.expected index f4605098900..d662887635d 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-078/semmle/ExecTainted/ExecTainted.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-078/semmle/ExecTainted/ExecTainted.expected @@ -12,6 +12,8 @@ edges | test.cpp:22:13:22:20 | sprintf output argument | test.cpp:23:12:23:19 | command1 indirection | | test.cpp:22:45:22:52 | userName indirection | test.cpp:22:13:22:20 | sprintf output argument | | test.cpp:22:45:22:52 | userName indirection | test.cpp:22:13:22:20 | sprintf output argument | +| test.cpp:22:45:22:52 | userName indirection | test.cpp:22:13:22:20 | sprintf output argument | +| test.cpp:22:45:22:52 | userName indirection | test.cpp:22:13:22:20 | sprintf output argument | | test.cpp:31:13:31:20 | sprintf output argument | test.cpp:32:12:32:19 | command2 indirection | | test.cpp:38:17:38:22 | call to getenv | test.cpp:38:17:38:22 | Store | | test.cpp:38:17:38:22 | call to getenv | test.cpp:41:20:41:24 | (const char *)... | @@ -26,6 +28,8 @@ edges | test.cpp:50:11:50:17 | sprintf output argument | test.cpp:51:10:51:16 | command indirection | | test.cpp:50:35:50:43 | envCflags indirection | test.cpp:50:11:50:17 | sprintf output argument | | test.cpp:50:35:50:43 | envCflags indirection | test.cpp:50:11:50:17 | sprintf output argument | +| test.cpp:50:35:50:43 | envCflags indirection | test.cpp:50:11:50:17 | sprintf output argument | +| test.cpp:50:35:50:43 | envCflags indirection | test.cpp:50:11:50:17 | sprintf output argument | | test.cpp:62:9:62:16 | (void *)... | test.cpp:62:9:62:16 | filename indirection | | test.cpp:62:9:62:16 | fread output argument | test.cpp:64:20:64:27 | (const char *)... | | test.cpp:62:9:62:16 | fread output argument | test.cpp:64:20:64:27 | filename indirection | @@ -35,6 +39,8 @@ edges | test.cpp:64:11:64:17 | strncat output argument | test.cpp:65:10:65:16 | command indirection | | test.cpp:64:20:64:27 | filename indirection | test.cpp:64:11:64:17 | strncat output argument | | test.cpp:64:20:64:27 | filename indirection | test.cpp:64:11:64:17 | strncat output argument | +| test.cpp:64:20:64:27 | filename indirection | test.cpp:64:11:64:17 | strncat output argument | +| test.cpp:64:20:64:27 | filename indirection | test.cpp:64:11:64:17 | strncat output argument | | test.cpp:71:9:71:15 | (void *)... | test.cpp:71:9:71:15 | command indirection | | test.cpp:71:9:71:15 | fread output argument | test.cpp:73:11:73:17 | array to pointer conversion | | test.cpp:71:9:71:15 | fread output argument | test.cpp:73:11:73:17 | command indirection | @@ -50,6 +56,8 @@ edges | test.cpp:84:11:84:17 | strncat output argument | test.cpp:85:32:85:38 | command indirection | | test.cpp:84:20:84:27 | filename indirection | test.cpp:84:11:84:17 | strncat output argument | | test.cpp:84:20:84:27 | filename indirection | test.cpp:84:11:84:17 | strncat output argument | +| test.cpp:84:20:84:27 | filename indirection | test.cpp:84:11:84:17 | strncat output argument | +| test.cpp:84:20:84:27 | filename indirection | test.cpp:84:11:84:17 | strncat output argument | | test.cpp:91:9:91:16 | (void *)... | test.cpp:91:9:91:16 | filename indirection | | test.cpp:91:9:91:16 | fread output argument | test.cpp:93:17:93:24 | (const char *)... | | test.cpp:91:9:91:16 | fread output argument | test.cpp:93:17:93:24 | filename indirection | @@ -59,6 +67,8 @@ edges | test.cpp:93:11:93:14 | strncat output argument | test.cpp:94:45:94:48 | path indirection | | test.cpp:93:17:93:24 | filename indirection | test.cpp:93:11:93:14 | strncat output argument | | test.cpp:93:17:93:24 | filename indirection | test.cpp:93:11:93:14 | strncat output argument | +| test.cpp:93:17:93:24 | filename indirection | test.cpp:93:11:93:14 | strncat output argument | +| test.cpp:93:17:93:24 | filename indirection | test.cpp:93:11:93:14 | strncat output argument | | test.cpp:99:21:99:32 | (const char *)... | test.cpp:99:21:99:32 | call to getenv indirection | | test.cpp:99:21:99:32 | (const char *)... | test.cpp:99:21:99:33 | call to basic_string | | test.cpp:99:21:99:32 | (const char *)... | test.cpp:100:25:100:29 | (reference to) | @@ -116,6 +126,8 @@ edges | test.cpp:142:11:142:17 | sprintf output argument | test.cpp:143:10:143:16 | command indirection | | test.cpp:142:31:142:33 | str indirection | test.cpp:142:11:142:17 | sprintf output argument | | test.cpp:142:31:142:33 | str indirection | test.cpp:142:11:142:17 | sprintf output argument | +| test.cpp:142:31:142:33 | str indirection | test.cpp:142:11:142:17 | sprintf output argument | +| test.cpp:142:31:142:33 | str indirection | test.cpp:142:11:142:17 | sprintf output argument | | test.cpp:150:9:150:11 | (void *)... | test.cpp:150:9:150:11 | str indirection | | test.cpp:150:9:150:11 | fread output argument | test.cpp:152:31:152:33 | array to pointer conversion | | test.cpp:150:9:150:11 | fread output argument | test.cpp:152:31:152:33 | str indirection | @@ -139,13 +151,8 @@ edges | test.cpp:162:11:162:14 | call to atoi | test.cpp:168:10:168:16 | (const char *)... | | test.cpp:162:11:162:14 | call to atoi | test.cpp:168:10:168:16 | command indirection | | test.cpp:166:13:166:19 | sprintf output argument | test.cpp:168:10:168:16 | command indirection | -#select -| test.cpp:23:12:23:19 | command1 | test.cpp:16:20:16:23 | argv | test.cpp:23:12:23:19 | command1 indirection | This argument to an OS command is derived from $@, dangerously concatenated into $@, and then passed to system(string) | test.cpp:16:20:16:23 | argv | user input (a command-line argument) | test.cpp:22:13:22:20 | sprintf output argument | sprintf output argument | -| test.cpp:51:10:51:16 | command | test.cpp:47:21:47:26 | call to getenv | test.cpp:51:10:51:16 | command indirection | This argument to an OS command is derived from $@, dangerously concatenated into $@, and then passed to system(string) | test.cpp:47:21:47:26 | call to getenv | user input (an environment variable) | test.cpp:50:11:50:17 | sprintf output argument | sprintf output argument | -| test.cpp:65:10:65:16 | command | test.cpp:62:9:62:16 | fread output argument | test.cpp:65:10:65:16 | command indirection | This argument to an OS command is derived from $@, dangerously concatenated into $@, and then passed to system(string) | test.cpp:62:9:62:16 | fread output argument | user input (String read by fread) | test.cpp:64:11:64:17 | strncat output argument | strncat output argument | -| test.cpp:85:32:85:38 | command | test.cpp:82:9:82:16 | fread output argument | test.cpp:85:32:85:38 | command indirection | This argument to an OS command is derived from $@, dangerously concatenated into $@, and then passed to execl | test.cpp:82:9:82:16 | fread output argument | user input (String read by fread) | test.cpp:84:11:84:17 | strncat output argument | strncat output argument | -| test.cpp:94:45:94:48 | path | test.cpp:91:9:91:16 | fread output argument | test.cpp:94:45:94:48 | path indirection | This argument to an OS command is derived from $@, dangerously concatenated into $@, and then passed to execl | test.cpp:91:9:91:16 | fread output argument | user input (String read by fread) | test.cpp:93:11:93:14 | strncat output argument | strncat output argument | -| test.cpp:143:10:143:16 | command | test.cpp:140:9:140:11 | fread output argument | test.cpp:143:10:143:16 | command indirection | This argument to an OS command is derived from $@, dangerously concatenated into $@, and then passed to system(string) | test.cpp:140:9:140:11 | fread output argument | user input (String read by fread) | test.cpp:142:11:142:17 | sprintf output argument | sprintf output argument | +| test.cpp:166:44:166:48 | temp2 indirection | test.cpp:166:13:166:19 | sprintf output argument | +| test.cpp:166:44:166:48 | temp2 indirection | test.cpp:166:13:166:19 | sprintf output argument | nodes | test.cpp:16:20:16:23 | argv | semmle.label | argv | | test.cpp:16:20:16:23 | argv | semmle.label | argv | @@ -337,3 +344,10 @@ nodes | test.cpp:168:10:168:16 | (const char *)... | semmle.label | (const char *)... | | test.cpp:168:10:168:16 | command indirection | semmle.label | command indirection | | test.cpp:168:10:168:16 | command indirection | semmle.label | command indirection | +#select +| test.cpp:23:12:23:19 | command1 | test.cpp:16:20:16:23 | argv | test.cpp:23:12:23:19 | command1 indirection | This argument to an OS command is derived from $@, dangerously concatenated into $@, and then passed to system(string) | test.cpp:16:20:16:23 | argv | user input (a command-line argument) | test.cpp:22:13:22:20 | sprintf output argument | sprintf output argument | +| test.cpp:51:10:51:16 | command | test.cpp:47:21:47:26 | call to getenv | test.cpp:51:10:51:16 | command indirection | This argument to an OS command is derived from $@, dangerously concatenated into $@, and then passed to system(string) | test.cpp:47:21:47:26 | call to getenv | user input (an environment variable) | test.cpp:50:11:50:17 | sprintf output argument | sprintf output argument | +| test.cpp:65:10:65:16 | command | test.cpp:62:9:62:16 | fread output argument | test.cpp:65:10:65:16 | command indirection | This argument to an OS command is derived from $@, dangerously concatenated into $@, and then passed to system(string) | test.cpp:62:9:62:16 | fread output argument | user input (String read by fread) | test.cpp:64:11:64:17 | strncat output argument | strncat output argument | +| test.cpp:85:32:85:38 | command | test.cpp:82:9:82:16 | fread output argument | test.cpp:85:32:85:38 | command indirection | This argument to an OS command is derived from $@, dangerously concatenated into $@, and then passed to execl | test.cpp:82:9:82:16 | fread output argument | user input (String read by fread) | test.cpp:84:11:84:17 | strncat output argument | strncat output argument | +| test.cpp:94:45:94:48 | path | test.cpp:91:9:91:16 | fread output argument | test.cpp:94:45:94:48 | path indirection | This argument to an OS command is derived from $@, dangerously concatenated into $@, and then passed to execl | test.cpp:91:9:91:16 | fread output argument | user input (String read by fread) | test.cpp:93:11:93:14 | strncat output argument | strncat output argument | +| test.cpp:143:10:143:16 | command | test.cpp:140:9:140:11 | fread output argument | test.cpp:143:10:143:16 | command indirection | This argument to an OS command is derived from $@, dangerously concatenated into $@, and then passed to system(string) | test.cpp:140:9:140:11 | fread output argument | user input (String read by fread) | test.cpp:142:11:142:17 | sprintf output argument | sprintf output argument | From 09ef8f639ea69546b28ecb9ff1a1b2256452aac4 Mon Sep 17 00:00:00 2001 From: Robert Marsh Date: Mon, 23 Aug 2021 17:06:59 -0400 Subject: [PATCH 449/741] C++: Improve performance by restricting isSource --- cpp/ql/src/Security/CWE/CWE-078/ExecTainted.ql | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/cpp/ql/src/Security/CWE/CWE-078/ExecTainted.ql b/cpp/ql/src/Security/CWE/CWE-078/ExecTainted.ql index 84464c6d84c..5dd6cd55668 100644 --- a/cpp/ql/src/Security/CWE/CWE-078/ExecTainted.ql +++ b/cpp/ql/src/Security/CWE/CWE-078/ExecTainted.ql @@ -84,7 +84,12 @@ class TaintToConcatenationConfiguration extends TaintTracking::Configuration { class ExecTaintConfiguration extends TaintTracking2::Configuration { ExecTaintConfiguration() { this = "ExecTaintConfiguration" } - override predicate isSource(DataFlow::Node source) { interestingConcatenation(_, source) } + override predicate isSource(DataFlow::Node source) { + exists(DataFlow::Node prevSink, TaintToConcatenationConfiguration conf | + conf.hasFlow(_, prevSink) and + interestingConcatenation(prevSink, source) + ) + } override predicate isSink(DataFlow::Node sink) { shellCommand(sinkAsArgumentIndirection(sink), _) From 509a3493b6b1b742bc5408c9f38e9f423b727174 Mon Sep 17 00:00:00 2001 From: Robert Marsh Date: Wed, 8 Sep 2021 18:33:55 -0700 Subject: [PATCH 450/741] C++: support new subpaths predicate in ExecTainted --- cpp/ql/src/Security/CWE/CWE-078/ExecTainted.ql | 17 ++++++++++++++++- .../semmle/ExecTainted/ExecTainted.expected | 12 +----------- 2 files changed, 17 insertions(+), 12 deletions(-) diff --git a/cpp/ql/src/Security/CWE/CWE-078/ExecTainted.ql b/cpp/ql/src/Security/CWE/CWE-078/ExecTainted.ql index 5dd6cd55668..26652d9c1da 100644 --- a/cpp/ql/src/Security/CWE/CWE-078/ExecTainted.ql +++ b/cpp/ql/src/Security/CWE/CWE-078/ExecTainted.ql @@ -66,7 +66,6 @@ predicate interestingConcatenation(DataFlow::Node fst, DataFlow::Node snd) { ) } -// TODO: maybe we can drop this? class TaintToConcatenationConfiguration extends TaintTracking::Configuration { TaintToConcatenationConfiguration() { this = "TaintToConcatenationConfiguration" } @@ -135,6 +134,10 @@ module StitchedPathGraph { ) } + DataFlow::PathNode getPathNode1() { this = TPathNode1(result) } + + DataFlow2::PathNode getPathNode2() { this = TPathNode2(result) } + predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn ) { @@ -183,6 +186,18 @@ module StitchedPathGraph { DataFlow2::PathGraph::nodes(n, key, val) ) } + + query predicate subpaths( + MergedPathNode arg, MergedPathNode par, MergedPathNode ret, MergedPathNode out + ) { + // just forward subpaths from the underlying libraries. This might be slightly awkward when + // the concatenation is deep in a call chain. + DataFlow::PathGraph::subpaths(arg.getPathNode1(), par.getPathNode1(), ret.getPathNode1(), + out.getPathNode1()) + or + DataFlow2::PathGraph::subpaths(arg.getPathNode2(), par.getPathNode2(), ret.getPathNode2(), + out.getPathNode2()) + } } import StitchedPathGraph diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-078/semmle/ExecTainted/ExecTainted.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-078/semmle/ExecTainted/ExecTainted.expected index d662887635d..8d290f47f45 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-078/semmle/ExecTainted/ExecTainted.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-078/semmle/ExecTainted/ExecTainted.expected @@ -14,7 +14,6 @@ edges | test.cpp:22:45:22:52 | userName indirection | test.cpp:22:13:22:20 | sprintf output argument | | test.cpp:22:45:22:52 | userName indirection | test.cpp:22:13:22:20 | sprintf output argument | | test.cpp:22:45:22:52 | userName indirection | test.cpp:22:13:22:20 | sprintf output argument | -| test.cpp:31:13:31:20 | sprintf output argument | test.cpp:32:12:32:19 | command2 indirection | | test.cpp:38:17:38:22 | call to getenv | test.cpp:38:17:38:22 | Store | | test.cpp:38:17:38:22 | call to getenv | test.cpp:41:20:41:24 | (const char *)... | | test.cpp:38:17:38:22 | call to getenv | test.cpp:41:20:41:24 | envCC | @@ -46,7 +45,6 @@ edges | test.cpp:71:9:71:15 | fread output argument | test.cpp:73:11:73:17 | command indirection | | test.cpp:71:9:71:15 | fread output argument | test.cpp:74:10:74:16 | (const char *)... | | test.cpp:71:9:71:15 | fread output argument | test.cpp:74:10:74:16 | command indirection | -| test.cpp:73:11:73:17 | strncat output argument | test.cpp:74:10:74:16 | command indirection | | test.cpp:82:9:82:16 | (void *)... | test.cpp:82:9:82:16 | filename indirection | | test.cpp:82:9:82:16 | fread output argument | test.cpp:84:20:84:27 | (const char *)... | | test.cpp:82:9:82:16 | fread output argument | test.cpp:84:20:84:27 | filename indirection | @@ -150,9 +148,6 @@ edges | test.cpp:162:11:162:14 | call to atoi | test.cpp:166:44:166:48 | temp2 indirection | | test.cpp:162:11:162:14 | call to atoi | test.cpp:168:10:168:16 | (const char *)... | | test.cpp:162:11:162:14 | call to atoi | test.cpp:168:10:168:16 | command indirection | -| test.cpp:166:13:166:19 | sprintf output argument | test.cpp:168:10:168:16 | command indirection | -| test.cpp:166:44:166:48 | temp2 indirection | test.cpp:166:13:166:19 | sprintf output argument | -| test.cpp:166:44:166:48 | temp2 indirection | test.cpp:166:13:166:19 | sprintf output argument | nodes | test.cpp:16:20:16:23 | argv | semmle.label | argv | | test.cpp:16:20:16:23 | argv | semmle.label | argv | @@ -169,8 +164,6 @@ nodes | test.cpp:29:45:29:52 | (const char *)... | semmle.label | (const char *)... | | test.cpp:29:45:29:52 | userName | semmle.label | userName | | test.cpp:29:45:29:52 | userName indirection | semmle.label | userName indirection | -| test.cpp:31:13:31:20 | sprintf output argument | semmle.label | sprintf output argument | -| test.cpp:32:12:32:19 | command2 indirection | semmle.label | command2 indirection | | test.cpp:38:17:38:22 | Store | semmle.label | Store | | test.cpp:38:17:38:22 | call to getenv | semmle.label | call to getenv | | test.cpp:38:17:38:22 | call to getenv | semmle.label | call to getenv | @@ -210,10 +203,8 @@ nodes | test.cpp:71:9:71:15 | fread output argument | semmle.label | fread output argument | | test.cpp:73:11:73:17 | array to pointer conversion | semmle.label | array to pointer conversion | | test.cpp:73:11:73:17 | command indirection | semmle.label | command indirection | -| test.cpp:73:11:73:17 | strncat output argument | semmle.label | strncat output argument | | test.cpp:74:10:74:16 | (const char *)... | semmle.label | (const char *)... | | test.cpp:74:10:74:16 | command indirection | semmle.label | command indirection | -| test.cpp:74:10:74:16 | command indirection | semmle.label | command indirection | | test.cpp:82:9:82:16 | (void *)... | semmle.label | (void *)... | | test.cpp:82:9:82:16 | (void *)... | semmle.label | (void *)... | | test.cpp:82:9:82:16 | array to pointer conversion | semmle.label | array to pointer conversion | @@ -338,12 +329,11 @@ nodes | test.cpp:162:16:162:19 | array to pointer conversion | semmle.label | array to pointer conversion | | test.cpp:162:16:162:19 | temp indirection | semmle.label | temp indirection | | test.cpp:165:24:165:24 | x | semmle.label | x | -| test.cpp:166:13:166:19 | sprintf output argument | semmle.label | sprintf output argument | | test.cpp:166:44:166:48 | array to pointer conversion | semmle.label | array to pointer conversion | | test.cpp:166:44:166:48 | temp2 indirection | semmle.label | temp2 indirection | | test.cpp:168:10:168:16 | (const char *)... | semmle.label | (const char *)... | | test.cpp:168:10:168:16 | command indirection | semmle.label | command indirection | -| test.cpp:168:10:168:16 | command indirection | semmle.label | command indirection | +subpaths #select | test.cpp:23:12:23:19 | command1 | test.cpp:16:20:16:23 | argv | test.cpp:23:12:23:19 | command1 indirection | This argument to an OS command is derived from $@, dangerously concatenated into $@, and then passed to system(string) | test.cpp:16:20:16:23 | argv | user input (a command-line argument) | test.cpp:22:13:22:20 | sprintf output argument | sprintf output argument | | test.cpp:51:10:51:16 | command | test.cpp:47:21:47:26 | call to getenv | test.cpp:51:10:51:16 | command indirection | This argument to an OS command is derived from $@, dangerously concatenated into $@, and then passed to system(string) | test.cpp:47:21:47:26 | call to getenv | user input (an environment variable) | test.cpp:50:11:50:17 | sprintf output argument | sprintf output argument | From a3e1f54e3309a4b1c0602110b886ecd69941f8d0 Mon Sep 17 00:00:00 2001 From: Robert Marsh Date: Tue, 14 Sep 2021 17:20:33 -0700 Subject: [PATCH 451/741] C++: Refactor models to prevent IR reevaluation --- cpp/ql/lib/semmle/code/cpp/models/Models.qll | 1 + .../cpp/models/implementations/System.qll | 44 +++++++++++++++++ .../models/interfaces/CommandExecution.qll | 7 +++ .../code/cpp/security/CommandExecution.qll | 47 +++++-------------- 4 files changed, 63 insertions(+), 36 deletions(-) create mode 100644 cpp/ql/lib/semmle/code/cpp/models/implementations/System.qll create mode 100644 cpp/ql/lib/semmle/code/cpp/models/interfaces/CommandExecution.qll diff --git a/cpp/ql/lib/semmle/code/cpp/models/Models.qll b/cpp/ql/lib/semmle/code/cpp/models/Models.qll index d5c7f50dde1..7ccfd650307 100644 --- a/cpp/ql/lib/semmle/code/cpp/models/Models.qll +++ b/cpp/ql/lib/semmle/code/cpp/models/Models.qll @@ -33,3 +33,4 @@ private import implementations.Recv private import implementations.Accept private import implementations.Poll private import implementations.Select +private import implementations.System diff --git a/cpp/ql/lib/semmle/code/cpp/models/implementations/System.qll b/cpp/ql/lib/semmle/code/cpp/models/implementations/System.qll new file mode 100644 index 00000000000..48638b1e37a --- /dev/null +++ b/cpp/ql/lib/semmle/code/cpp/models/implementations/System.qll @@ -0,0 +1,44 @@ +import cpp +import semmle.code.cpp.security.FunctionWithWrappers +import semmle.code.cpp.models.interfaces.SideEffect +import semmle.code.cpp.models.interfaces.Alias +import semmle.code.cpp.models.interfaces.CommandExecution + +/** + * A function for running a command using a command interpreter. + */ +private class SystemFunction extends CommandExecutionFunction, ArrayFunction, AliasFunction, + SideEffectFunction { + SystemFunction() { + hasGlobalOrStdName("system") or // system(command) + hasGlobalName("popen") or // popen(command, mode) + // Windows variants + hasGlobalName("_popen") or // _popen(command, mode) + hasGlobalName("_wpopen") or // _wpopen(command, mode) + hasGlobalName("_wsystem") // _wsystem(command) + } + + override predicate hasCommandArgument(FunctionInput input) { input.isParameterDeref(0) } + + override predicate hasArrayWithNullTerminator(int bufParam) { bufParam = 0 or bufParam = 1 } + + override predicate hasArrayInput(int bufParam) { bufParam = 0 or bufParam = 1 } + + override predicate parameterNeverEscapes(int index) { index = 0 or index = 1 } + + override predicate parameterEscapesOnlyViaReturn(int index) { none() } + + override predicate parameterIsAlwaysReturned(int index) { none() } + + override predicate hasOnlySpecificReadSideEffects() { any() } + + override predicate hasOnlySpecificWriteSideEffects() { + hasGlobalOrStdName("system") or + hasGlobalName("_wsystem") + } + + override predicate hasSpecificReadSideEffect(ParameterIndex i, boolean buffer) { + (i = 0 or i = 1) and + buffer = true + } +} diff --git a/cpp/ql/lib/semmle/code/cpp/models/interfaces/CommandExecution.qll b/cpp/ql/lib/semmle/code/cpp/models/interfaces/CommandExecution.qll new file mode 100644 index 00000000000..47f70427491 --- /dev/null +++ b/cpp/ql/lib/semmle/code/cpp/models/interfaces/CommandExecution.qll @@ -0,0 +1,7 @@ +import cpp +import FunctionInputsAndOutputs +import semmle.code.cpp.models.Models + +abstract class CommandExecutionFunction extends Function { + abstract predicate hasCommandArgument(FunctionInput input); +} \ No newline at end of file diff --git a/cpp/ql/lib/semmle/code/cpp/security/CommandExecution.qll b/cpp/ql/lib/semmle/code/cpp/security/CommandExecution.qll index d9bb701be58..ab2fe153a90 100644 --- a/cpp/ql/lib/semmle/code/cpp/security/CommandExecution.qll +++ b/cpp/ql/lib/semmle/code/cpp/security/CommandExecution.qll @@ -4,42 +4,17 @@ import cpp import semmle.code.cpp.security.FunctionWithWrappers import semmle.code.cpp.models.interfaces.SideEffect import semmle.code.cpp.models.interfaces.Alias +import semmle.code.cpp.models.interfaces.CommandExecution -/** - * A function for running a command using a command interpreter. - */ -class SystemFunction extends FunctionWithWrappers, ArrayFunction, AliasFunction, SideEffectFunction { - SystemFunction() { - hasGlobalOrStdName("system") or // system(command) - hasGlobalName("popen") or // popen(command, mode) - // Windows variants - hasGlobalName("_popen") or // _popen(command, mode) - hasGlobalName("_wpopen") or // _wpopen(command, mode) - hasGlobalName("_wsystem") // _wsystem(command) - } - - override predicate interestingArg(int arg) { arg = 0 } - - override predicate hasArrayWithNullTerminator(int bufParam) { bufParam = 0 or bufParam = 1 } - - override predicate hasArrayInput(int bufParam) { bufParam = 0 or bufParam = 1 } - - override predicate parameterNeverEscapes(int index) { index = 0 or index = 1 } - - override predicate parameterEscapesOnlyViaReturn(int index) { none() } - - override predicate parameterIsAlwaysReturned(int index) { none() } - - override predicate hasOnlySpecificReadSideEffects() { any() } - - override predicate hasOnlySpecificWriteSideEffects() { - hasGlobalOrStdName("system") or - hasGlobalName("_wsystem") - } - - override predicate hasSpecificReadSideEffect(ParameterIndex i, boolean buffer) { - (i = 0 or i = 1) and - buffer = true +class WrappedSystemFunction extends FunctionWithWrappers instanceof CommandExecutionFunction { + override predicate interestingArg(int arg) { + exists(FunctionInput input | + this.(CommandExecutionFunction).hasCommandArgument(input) and + ( + input.isParameterDerefOrQualifierObject(arg) or + input.isParameterOrQualifierAddress(arg) + ) + ) } } @@ -185,7 +160,7 @@ predicate shellCommandPreface(string cmd, string flag) { */ predicate shellCommand(Expr command, string callChain) { // A call to a function like system() - exists(SystemFunction systemFunction | + exists(WrappedSystemFunction systemFunction | systemFunction.outermostWrapperFunctionCall(command, callChain) ) or From 080867a39086c12a1a906c227170cde06180de05 Mon Sep 17 00:00:00 2001 From: Ethan P <56270045+ethanpalm@users.noreply.github.com> Date: Wed, 15 Sep 2021 11:19:41 -0700 Subject: [PATCH 452/741] Add reviewer feedback --- docs/codeql/codeql-cli/creating-codeql-databases.rst | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/codeql/codeql-cli/creating-codeql-databases.rst b/docs/codeql/codeql-cli/creating-codeql-databases.rst index 7bc3c24d36d..fb6613d230a 100644 --- a/docs/codeql/codeql-cli/creating-codeql-databases.rst +++ b/docs/codeql/codeql-cli/creating-codeql-databases.rst @@ -265,9 +265,9 @@ The ``codeql database init`` command will output a message:: The ``codeql database init`` command creates ``/temp/tracingEnvironment`` with files that contain environment variables and values that will enable CodeQL to trace a sequence of build steps. These files are named ``start-tracing.{json,sh,bat,ps1}``. Use one of these files with your CI system's mechanism for setting environment variables for future steps. You can: * Read the JSON file, process it, and print out environment variables in the format expected by your CI system. For example, Azure DevOps expects ``echo "##vso[task.setvariable variable=NAME]VALUE"``. -* Or source the appropriate ``start-tracing`` script to set the CodeQL variables in the shell environment of the CI system. +* Or, if your CI system persists the environment, source the appropriate ``start-tracing`` script to set the CodeQL variables in the shell environment of the CI system. -Build your code and then run the command ``codeql database finalize ``. Optionally, after building the code, unset the environment variables using an ``end-tracing.{json,sh,bat,ps1}`` script from the directory where the ``start-tracing`` scripts are stored. +Build your code; optionally, unset the environment variables using an ``end-tracing.{json,sh,bat,ps1}`` script from the directory where the ``start-tracing`` scripts are stored; and then run the command ``codeql database finalize ``. Once you have created a CodeQL database using indirect build tracing, you can work with it like any other CodeQL database. For example, analyze the database, and upload the results to GitHub if you use code scanning. @@ -292,7 +292,7 @@ The following example shows how you could use indirect build tracing in an Azure # Assumes the source code is checked out to the current working directory. # Creates a database at `/db`. # Running on Windows, so specifies a trace process level. - script: "codeql database init --language csharp --trace-process-level 3 --source-root --begin-tracing db" + script: "codeql database init --language csharp --trace-process-name Agent.Worker.exe --source-root . --begin-tracing db" # Read the generated environment variables and values, # and set them so they are available for subsequent commands @@ -325,7 +325,7 @@ The following example shows how you could use indirect build tracing in an Azure # Read and set the generated environment variables to end build tracing. This is done in PowerShell in this example. - task: PowerShell@1 - displayName: Set CodeQL environment variables + displayName: Clear CodeQL environment variables inputs: targetType: inline script: > From c85cc1455b4033865d94633bf5334208c993816e Mon Sep 17 00:00:00 2001 From: Robert Marsh Date: Wed, 15 Sep 2021 11:27:13 -0700 Subject: [PATCH 453/741] C++: accept changes to new ExecTainted test --- .../SAMATE/ExecTainted/ExecTainted.expected | 40 ++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-078/SAMATE/ExecTainted/ExecTainted.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-078/SAMATE/ExecTainted/ExecTainted.expected index 6f011708465..bebeb5dd3d2 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-078/SAMATE/ExecTainted/ExecTainted.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-078/SAMATE/ExecTainted/ExecTainted.expected @@ -1 +1,39 @@ -| tests.cpp:53:16:53:19 | data | This argument to an OS command is derived from $@ and then passed to system(string) | tests.cpp:33:34:33:39 | call to getenv | user input (getenv) | +edges +| tests.cpp:33:34:33:39 | call to getenv | tests.cpp:33:34:33:39 | Store | +| tests.cpp:33:34:33:39 | call to getenv | tests.cpp:35:17:35:27 | environment | +| tests.cpp:33:34:33:39 | call to getenv | tests.cpp:38:39:38:49 | (const char *)... | +| tests.cpp:33:34:33:39 | call to getenv | tests.cpp:38:39:38:49 | environment | +| tests.cpp:33:34:33:39 | call to getenv | tests.cpp:38:39:38:49 | environment indirection | +| tests.cpp:33:34:33:39 | call to getenv | tests.cpp:38:39:38:49 | environment indirection | +| tests.cpp:33:34:33:39 | call to getenv | tests.cpp:42:5:42:16 | Phi | +| tests.cpp:38:25:38:36 | strncat output argument | tests.cpp:42:5:42:16 | Phi | +| tests.cpp:38:39:38:49 | environment indirection | tests.cpp:38:25:38:36 | strncat output argument | +| tests.cpp:38:39:38:49 | environment indirection | tests.cpp:38:25:38:36 | strncat output argument | +| tests.cpp:38:39:38:49 | environment indirection | tests.cpp:38:25:38:36 | strncat output argument | +| tests.cpp:38:39:38:49 | environment indirection | tests.cpp:38:25:38:36 | strncat output argument | +| tests.cpp:42:5:42:16 | Phi | tests.cpp:51:22:51:25 | badSource output argument | +| tests.cpp:42:5:42:16 | Phi | tests.cpp:51:22:51:25 | badSource output argument | +| tests.cpp:51:22:51:25 | badSource output argument | tests.cpp:53:16:53:19 | (const char *)... | +| tests.cpp:51:22:51:25 | badSource output argument | tests.cpp:53:16:53:19 | data indirection | +| tests.cpp:51:22:51:25 | badSource output argument | tests.cpp:53:16:53:19 | data indirection | +nodes +| tests.cpp:33:34:33:39 | Store | semmle.label | Store | +| tests.cpp:33:34:33:39 | call to getenv | semmle.label | call to getenv | +| tests.cpp:33:34:33:39 | call to getenv | semmle.label | call to getenv | +| tests.cpp:33:34:33:39 | call to getenv | semmle.label | call to getenv | +| tests.cpp:35:17:35:27 | environment | semmle.label | environment | +| tests.cpp:38:25:38:36 | strncat output argument | semmle.label | strncat output argument | +| tests.cpp:38:39:38:49 | (const char *)... | semmle.label | (const char *)... | +| tests.cpp:38:39:38:49 | environment | semmle.label | environment | +| tests.cpp:38:39:38:49 | environment indirection | semmle.label | environment indirection | +| tests.cpp:38:39:38:49 | environment indirection | semmle.label | environment indirection | +| tests.cpp:42:5:42:16 | Phi | semmle.label | Phi | +| tests.cpp:42:5:42:16 | Phi | semmle.label | Phi | +| tests.cpp:51:22:51:25 | badSource output argument | semmle.label | badSource output argument | +| tests.cpp:51:22:51:25 | badSource output argument | semmle.label | badSource output argument | +| tests.cpp:53:16:53:19 | (const char *)... | semmle.label | (const char *)... | +| tests.cpp:53:16:53:19 | data indirection | semmle.label | data indirection | +| tests.cpp:53:16:53:19 | data indirection | semmle.label | data indirection | +subpaths +#select +| tests.cpp:53:16:53:19 | data | tests.cpp:33:34:33:39 | call to getenv | tests.cpp:53:16:53:19 | data indirection | This argument to an OS command is derived from $@, dangerously concatenated into $@, and then passed to system(string) | tests.cpp:33:34:33:39 | call to getenv | user input (an environment variable) | tests.cpp:38:25:38:36 | strncat output argument | strncat output argument | From 5c73fed83a1a83d1d4cb5661732532efe2463e20 Mon Sep 17 00:00:00 2001 From: Erik Krogh Kristensen Date: Wed, 15 Sep 2021 22:38:27 +0200 Subject: [PATCH 454/741] fix dbsheme upgrade from TypeScript 4.4 PR --- .../semmlecode.javascript.dbscheme | 2 +- .../upgrade.properties | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename javascript/{ql/lib => upgrades/e34b3e16dba5d11961119818c9beeff334f20a90}/upgrade.properties (100%) diff --git a/javascript/upgrades/e34b3e16dba5d11961119818c9beeff334f20a90/semmlecode.javascript.dbscheme b/javascript/upgrades/e34b3e16dba5d11961119818c9beeff334f20a90/semmlecode.javascript.dbscheme index 7533e7ff64d..e54b35a8a12 100644 --- a/javascript/upgrades/e34b3e16dba5d11961119818c9beeff334f20a90/semmlecode.javascript.dbscheme +++ b/javascript/upgrades/e34b3e16dba5d11961119818c9beeff334f20a90/semmlecode.javascript.dbscheme @@ -146,7 +146,7 @@ stmt_containers (unique int stmt: @stmt ref, jump_targets (unique int jump: @stmt ref, int target: @stmt ref); -@stmt_parent = @stmt | @toplevel | @function_expr | @arrow_function_expr; +@stmt_parent = @stmt | @toplevel | @function_expr | @arrow_function_expr | @static_initializer; @stmt_container = @toplevel | @function | @namespace_declaration | @external_module_declaration | @global_augmentation_declaration; case @stmt.kind of diff --git a/javascript/ql/lib/upgrade.properties b/javascript/upgrades/e34b3e16dba5d11961119818c9beeff334f20a90/upgrade.properties similarity index 100% rename from javascript/ql/lib/upgrade.properties rename to javascript/upgrades/e34b3e16dba5d11961119818c9beeff334f20a90/upgrade.properties From 563878d28d74e18020180c9f06fdb0afbec4d3dd Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 16 Sep 2021 00:08:03 +0000 Subject: [PATCH 455/741] Add changed framework coverage reports --- java/documentation/library-coverage/coverage.csv | 3 ++- java/documentation/library-coverage/coverage.rst | 6 +++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/java/documentation/library-coverage/coverage.csv b/java/documentation/library-coverage/coverage.csv index 68739963476..396c85bb530 100644 --- a/java/documentation/library-coverage/coverage.csv +++ b/java/documentation/library-coverage/coverage.csv @@ -1,6 +1,7 @@ package,sink,source,summary,sink:bean-validation,sink:create-file,sink:groovy,sink:header-splitting,sink:information-leak,sink:jexl,sink:jndi-injection,sink:ldap,sink:mvel,sink:ognl-injection,sink:open-url,sink:set-hostname-verifier,sink:sql,sink:url-open-stream,sink:url-redirect,sink:xpath,sink:xss,source:remote,summary:taint,summary:value android.content,8,,4,,,,,,,,,,,,,8,,,,,,4, android.database,59,,30,,,,,,,,,,,,,59,,,,,,30, +android.net,,,60,,,,,,,,,,,,,,,,,,,45,15 android.util,,16,,,,,,,,,,,,,,,,,,,16,, android.webkit,3,2,,,,,,,,,,,,,,,,,,3,2,, com.esotericsoftware.kryo.io,,,1,,,,,,,,,,,,,,,,,,,1, @@ -22,7 +23,7 @@ jakarta.ws.rs.container,,9,,,,,,,,,,,,,,,,,,,9,, jakarta.ws.rs.core,2,,149,,,,,,,,,,,,,,,2,,,,94,55 java.beans,,,1,,,,,,,,,,,,,,,,,,,1, java.io,3,,27,,3,,,,,,,,,,,,,,,,,26,1 -java.lang,,,45,,,,,,,,,,,,,,,,,,,39,6 +java.lang,,,47,,,,,,,,,,,,,,,,,,,41,6 java.net,10,3,7,,,,,,,,,,,10,,,,,,,3,7, java.nio,10,,4,,10,,,,,,,,,,,,,,,,,4, java.sql,7,,,,,,,,,,,,,,,7,,,,,,, diff --git a/java/documentation/library-coverage/coverage.rst b/java/documentation/library-coverage/coverage.rst index f615821957c..44581216bc9 100644 --- a/java/documentation/library-coverage/coverage.rst +++ b/java/documentation/library-coverage/coverage.rst @@ -7,7 +7,7 @@ Java framework & library support :widths: auto Framework / library,Package,Flow sources,Taint & value steps,Sinks (total),`CWE‑022` :sub:`Path injection`,`CWE‑036` :sub:`Path traversal`,`CWE‑079` :sub:`Cross-site scripting`,`CWE‑089` :sub:`SQL injection`,`CWE‑090` :sub:`LDAP injection`,`CWE‑094` :sub:`Code injection`,`CWE‑319` :sub:`Cleartext transmission` - Android,``android.*``,18,34,70,,,3,67,,, + Android,``android.*``,18,94,70,,,3,67,,, `Apache Commons Collections `_,"``org.apache.commons.collections``, ``org.apache.commons.collections4``",,788,,,,,,,, `Apache Commons IO `_,``org.apache.commons.io``,,22,,,,,,,, `Apache Commons Lang `_,``org.apache.commons.lang3``,,423,,,,,,,, @@ -15,9 +15,9 @@ Java framework & library support `Apache HttpComponents `_,"``org.apache.hc.core5.*``, ``org.apache.http``",5,136,28,,,3,,,,25 `Google Guava `_,``com.google.common.*``,,175,6,,6,,,,, `JSON-java `_,``org.json``,,236,,,,,,,, - Java Standard Library,``java.*``,3,421,30,13,,,7,,,10 + Java Standard Library,``java.*``,3,423,30,13,,,7,,,10 Java extensions,"``javax.*``, ``jakarta.*``",54,552,31,,,4,,1,1,2 `Spring `_,``org.springframework.*``,29,469,91,,,,19,14,,29 Others,"``com.esotericsoftware.kryo.io``, ``com.esotericsoftware.kryo5.io``, ``com.fasterxml.jackson.core``, ``com.fasterxml.jackson.databind``, ``com.opensymphony.xwork2.ognl``, ``com.unboundid.ldap.sdk``, ``flexjson``, ``groovy.lang``, ``groovy.util``, ``jodd.json``, ``ognl``, ``org.apache.commons.codec``, ``org.apache.commons.jexl2``, ``org.apache.commons.jexl3``, ``org.apache.commons.ognl``, ``org.apache.directory.ldap.client.api``, ``org.apache.ibatis.jdbc``, ``org.apache.shiro.jndi``, ``org.codehaus.groovy.control``, ``org.dom4j``, ``org.hibernate``, ``org.jooq``, ``org.mvel2``, ``org.xml.sax``, ``org.xmlpull.v1``, ``play.mvc``",7,26,146,,,,14,18,, - Totals,,116,3554,402,13,6,10,107,33,1,66 + Totals,,116,3616,402,13,6,10,107,33,1,66 From 05dd3fa0e7c52ef4822d0a46331658c57b8274ce Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Thu, 16 Sep 2021 09:42:38 +0200 Subject: [PATCH 456/741] Adjust review findings --- .../code/csharp/frameworks/ServiceStack.qll | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/csharp/ql/lib/semmle/code/csharp/frameworks/ServiceStack.qll b/csharp/ql/lib/semmle/code/csharp/frameworks/ServiceStack.qll index 2b4554e891a..6604597d9bc 100644 --- a/csharp/ql/lib/semmle/code/csharp/frameworks/ServiceStack.qll +++ b/csharp/ql/lib/semmle/code/csharp/frameworks/ServiceStack.qll @@ -12,7 +12,7 @@ private import semmle.code.csharp.dataflow.ExternalFlow private class ServiceClass extends Class { ServiceClass() { this.getBaseClass+().hasQualifiedName("ServiceStack", "Service") or - this.getABaseInterface+().hasQualifiedName("ServiceStack", "IService") + this.getABaseType*().getABaseInterface().hasQualifiedName("ServiceStack", "IService") } /** Get a method that handles incoming requests */ @@ -26,7 +26,9 @@ private class ServiceClass extends Class { /** Top-level Request DTO types */ private class RequestDTO extends Class { - RequestDTO() { this.getABaseInterface+().hasQualifiedName("ServiceStack", "IReturn") } + RequestDTO() { + this.getABaseType*().getABaseInterface().hasQualifiedName("ServiceStack", "IReturn") + } } /** Flow sources for the ServiceStack framework */ @@ -308,14 +310,7 @@ module XSS { exists(ServiceClass service, Method m, Expr e | service.getARequestMethod() = m and this.asExpr() = e and - ( - exists(ReturnStmt r | - e = r.getExpr() and - r.getEnclosingCallable() = m - ) - or - e = m.getExpressionBody() - ) and + m.canReturn(e) and ( e.getType() instanceof StringType or e.getType().hasQualifiedName("ServiceStack", "HttpResult") From 94b5c4eada7e244ada59347d3f4725f0b1d7a43f Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Thu, 12 Aug 2021 14:17:09 +0200 Subject: [PATCH 457/741] Python: Drop redundant columns from `files` and `folders` relations --- python/ql/lib/semmle/python/Files.qll | 19 +- python/ql/lib/semmlecode.python.dbscheme | 8 +- .../ql/lib/semmlecode.python.dbscheme.stats | 418 ------------------ 3 files changed, 7 insertions(+), 438 deletions(-) diff --git a/python/ql/lib/semmle/python/Files.qll b/python/ql/lib/semmle/python/Files.qll index 4fa94f46ac6..2fa1a733fc6 100644 --- a/python/ql/lib/semmle/python/Files.qll +++ b/python/ql/lib/semmle/python/Files.qll @@ -1,9 +1,7 @@ import python /** A file */ -class File extends Container { - File() { files(this, _, _, _, _) } - +class File extends Container, @file { /** DEPRECATED: Use `getAbsolutePath` instead. */ deprecated override string getName() { result = this.getAbsolutePath() } @@ -34,9 +32,7 @@ class File extends Container { } /** Gets a short name for this file (just the file name) */ - string getShortName() { - exists(string simple, string ext | files(this, _, simple, ext, _) | result = simple + ext) - } + string getShortName() { result = this.getBaseName() } private int lastLine() { result = max(int i | exists(Location l | l.getFile() = this and l.getEndLine() = i)) @@ -55,7 +51,7 @@ class File extends Container { ) } - override string getAbsolutePath() { files(this, result, _, _, _) } + override string getAbsolutePath() { files(this, result) } /** Gets the URL of this file. */ override string getURL() { result = "file://" + this.getAbsolutePath() + ":0:0:0:0" } @@ -118,15 +114,10 @@ private predicate occupied_line(File f, int n) { } /** A folder (directory) */ -class Folder extends Container { - Folder() { folders(this, _, _) } - +class Folder extends Container, @folder { /** DEPRECATED: Use `getAbsolutePath` instead. */ deprecated override string getName() { result = this.getAbsolutePath() } - /** DEPRECATED: Use `getBaseName` instead. */ - deprecated string getSimple() { folders(this, _, result) } - /** * Holds if this element is at the specified location. * The location spans column `startcolumn` of line `startline` to @@ -144,7 +135,7 @@ class Folder extends Container { endcolumn = 0 } - override string getAbsolutePath() { folders(this, result, _) } + override string getAbsolutePath() { folders(this, result) } /** Gets the URL of this folder. */ override string getURL() { result = "folder://" + this.getAbsolutePath() } diff --git a/python/ql/lib/semmlecode.python.dbscheme b/python/ql/lib/semmlecode.python.dbscheme index 4f1806347d7..69f1b1c771a 100644 --- a/python/ql/lib/semmlecode.python.dbscheme +++ b/python/ql/lib/semmlecode.python.dbscheme @@ -122,14 +122,10 @@ svnchurn( /* fromSource is ignored */ files(unique int id: @file, - varchar(900) name: string ref, - varchar(900) simple: string ref, - varchar(900) ext: string ref, - int fromSource: int ref); + varchar(900) name: string ref); folders(unique int id: @folder, - varchar(900) name: string ref, - varchar(900) simple: string ref); + varchar(900) name: string ref); @container = @folder | @file; diff --git a/python/ql/lib/semmlecode.python.dbscheme.stats b/python/ql/lib/semmlecode.python.dbscheme.stats index 99fa25b3817..31653bf41a9 100644 --- a/python/ql/lib/semmlecode.python.dbscheme.stats +++ b/python/ql/lib/semmlecode.python.dbscheme.stats @@ -4331,18 +4331,6 @@ name 3066 - -simple -1294 - - -ext -1 - - -fromSource -1 - @@ -4362,54 +4350,6 @@ -id -simple - - -12 - - -1 -2 -3066 - - - - - - -id -ext - - -12 - - -1 -2 -3066 - - - - - - -id -fromSource - - -12 - - -1 -2 -3066 - - - - - - name id @@ -4425,276 +4365,6 @@ - -name -simple - - -12 - - -1 -2 -3066 - - - - - - -name -ext - - -12 - - -1 -2 -3066 - - - - - - -name -fromSource - - -12 - - -1 -2 -3066 - - - - - - -simple -id - - -12 - - -1 -2 -1058 - - -2 -3 -132 - - -3 -38 -98 - - -47 -646 -6 - - - - - - -simple -name - - -12 - - -1 -2 -1058 - - -2 -3 -132 - - -3 -38 -98 - - -47 -646 -6 - - - - - - -simple -ext - - -12 - - -1 -2 -1294 - - - - - - -simple -fromSource - - -12 - - -1 -2 -1294 - - - - - - -ext -id - - -12 - - -3066 -3067 -1 - - - - - - -ext -name - - -12 - - -3066 -3067 -1 - - - - - - -ext -simple - - -12 - - -1294 -1295 -1 - - - - - - -ext -fromSource - - -12 - - -1 -2 -1 - - - - - - -fromSource -id - - -12 - - -3066 -3067 -1 - - - - - - -fromSource -name - - -12 - - -3066 -3067 -1 - - - - - - -fromSource -simple - - -12 - - -1294 -1295 -1 - - - - - - -fromSource -ext - - -12 - - -1 -2 -1 - - - - - @@ -4709,10 +4379,6 @@ name 686 - -simple -538 - @@ -4732,22 +4398,6 @@ -id -simple - - -12 - - -1 -2 -686 - - - - - - name id @@ -4763,74 +4413,6 @@ - -name -simple - - -12 - - -1 -2 -686 - - - - - - -simple -id - - -12 - - -1 -2 -481 - - -2 -4 -45 - - -4 -27 -12 - - - - - - -simple -name - - -12 - - -1 -2 -481 - - -2 -4 -45 - - -4 -27 -12 - - - - - From 37ec83a68b9cf9243fb5a325864360a5ec003f0a Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Thu, 12 Aug 2021 17:07:06 +0200 Subject: [PATCH 458/741] Python: Upgrade script --- .../old.dbscheme | 999 ++++++++++++++++++ .../semmlecode.python.dbscheme | 995 +++++++++++++++++ .../upgrade.properties | 4 + 3 files changed, 1998 insertions(+) create mode 100644 python/upgrades/4f1806347d7fafe2f78508da01c01e5aff5f7cbb/old.dbscheme create mode 100644 python/upgrades/4f1806347d7fafe2f78508da01c01e5aff5f7cbb/semmlecode.python.dbscheme create mode 100644 python/upgrades/4f1806347d7fafe2f78508da01c01e5aff5f7cbb/upgrade.properties diff --git a/python/upgrades/4f1806347d7fafe2f78508da01c01e5aff5f7cbb/old.dbscheme b/python/upgrades/4f1806347d7fafe2f78508da01c01e5aff5f7cbb/old.dbscheme new file mode 100644 index 00000000000..4f1806347d7 --- /dev/null +++ b/python/upgrades/4f1806347d7fafe2f78508da01c01e5aff5f7cbb/old.dbscheme @@ -0,0 +1,999 @@ +/* + * This dbscheme is auto-generated by 'semmle/dbscheme_gen.py'. + * WARNING: Any modifications to this file will be lost. + * Relations can be changed by modifying master.py or + * by adding rules to dbscheme.template + */ + +/* This is a dummy line to alter the dbscheme, so we can make a database upgrade + * without actually changing any of the dbscheme predicates. It contains a date + * to allow for such updates in the future as well. + * + * 2020-07-02 + * + * DO NOT remove this comment carelessly, since it can revert the dbscheme back to a + * previously seen state (matching a previously seen SHA), which would make the upgrade + * mechanism not work properly. + */ + + /* + * External artifacts + */ + +externalDefects( + unique int id : @externalDefect, + varchar(900) queryPath : string ref, + int location : @location ref, + varchar(900) message : string ref, + float severity : float ref +); + +externalMetrics( + unique int id : @externalMetric, + varchar(900) queryPath : string ref, + int location : @location ref, + float value : float ref +); + +externalData( + int id : @externalDataElement, + varchar(900) queryPath : string ref, + int column: int ref, + varchar(900) data : string ref +); + +snapshotDate(unique date snapshotDate : date ref); + +sourceLocationPrefix(varchar(900) prefix : string ref); + + +/* + * Duplicate code + */ + +duplicateCode( + unique int id : @duplication, + varchar(900) relativePath : string ref, + int equivClass : int ref); + +similarCode( + unique int id : @similarity, + varchar(900) relativePath : string ref, + int equivClass : int ref); + +@duplication_or_similarity = @duplication | @similarity + +tokens( + int id : @duplication_or_similarity ref, + int offset : int ref, + int beginLine : int ref, + int beginColumn : int ref, + int endLine : int ref, + int endColumn : int ref); + +/* + * Line metrics + */ +py_codelines(int id : @py_scope ref, + int count : int ref); + +py_commentlines(int id : @py_scope ref, + int count : int ref); + +py_docstringlines(int id : @py_scope ref, + int count : int ref); + +py_alllines(int id : @py_scope ref, + int count : int ref); + +/* + * Version history + */ + +svnentries( + int id : @svnentry, + varchar(500) revision : string ref, + varchar(500) author : string ref, + date revisionDate : date ref, + int changeSize : int ref +) + +svnaffectedfiles( + int id : @svnentry ref, + int file : @file ref, + varchar(500) action : string ref +) + +svnentrymsg( + int id : @svnentry ref, + varchar(500) message : string ref +) + +svnchurn( + int commit : @svnentry ref, + int file : @file ref, + int addedLines : int ref, + int deletedLines : int ref +) + +/**************************** + Python dbscheme +****************************/ + +/* fromSource is ignored */ +files(unique int id: @file, + varchar(900) name: string ref, + varchar(900) simple: string ref, + varchar(900) ext: string ref, + int fromSource: int ref); + +folders(unique int id: @folder, + varchar(900) name: string ref, + varchar(900) simple: string ref); + +@container = @folder | @file; + +containerparent(int parent: @container ref, + unique int child: @container ref); + +@sourceline = @file | @py_Module | @xmllocatable; + +numlines(int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref + ); + +@location = @location_ast | @location_default ; + +locations_default(unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref); + +locations_ast(unique int id: @location_ast, + int module: @py_Module ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref); + +file_contents(unique int file: @file ref, string contents: string ref); + +py_module_path(int module: @py_Module ref, int file: @container ref); + +variable(unique int id : @py_variable, + int scope : @py_scope ref, + varchar(1) name : string ref); + +py_line_lengths(unique int id : @py_line, + int file: @py_Module ref, + int line : int ref, + int length : int ref); + +py_extracted_version(int module : @py_Module ref, + varchar(1) version : string ref); + +/* AUTO GENERATED PART STARTS HERE */ + + +/* AnnAssign.location = 0, location */ +/* AnnAssign.value = 1, expr */ +/* AnnAssign.annotation = 2, expr */ +/* AnnAssign.target = 3, expr */ + +/* Assert.location = 0, location */ +/* Assert.test = 1, expr */ +/* Assert.msg = 2, expr */ + +/* Assign.location = 0, location */ +/* Assign.value = 1, expr */ +/* Assign.targets = 2, expr_list */ + +/* AssignExpr.location = 0, location */ +/* AssignExpr.parenthesised = 1, bool */ +/* AssignExpr.value = 2, expr */ +/* AssignExpr.target = 3, expr */ + +/* Attribute.location = 0, location */ +/* Attribute.parenthesised = 1, bool */ +/* Attribute.value = 2, expr */ +/* Attribute.attr = 3, str */ +/* Attribute.ctx = 4, expr_context */ + +/* AugAssign.location = 0, location */ +/* AugAssign.operation = 1, BinOp */ + +/* Await.location = 0, location */ +/* Await.parenthesised = 1, bool */ +/* Await.value = 2, expr */ + +/* BinaryExpr.location = 0, location */ +/* BinaryExpr.parenthesised = 1, bool */ +/* BinaryExpr.left = 2, expr */ +/* BinaryExpr.op = 3, operator */ +/* BinaryExpr.right = 4, expr */ +/* BinaryExpr = AugAssign */ + +/* BoolExpr.location = 0, location */ +/* BoolExpr.parenthesised = 1, bool */ +/* BoolExpr.op = 2, boolop */ +/* BoolExpr.values = 3, expr_list */ + +/* Break.location = 0, location */ + +/* Bytes.location = 0, location */ +/* Bytes.parenthesised = 1, bool */ +/* Bytes.s = 2, bytes */ +/* Bytes.prefix = 3, bytes */ +/* Bytes.implicitly_concatenated_parts = 4, StringPart_list */ + +/* Call.location = 0, location */ +/* Call.parenthesised = 1, bool */ +/* Call.func = 2, expr */ +/* Call.positional_args = 3, expr_list */ +/* Call.named_args = 4, dict_item_list */ + +/* Class.name = 0, str */ +/* Class.body = 1, stmt_list */ +/* Class = ClassExpr */ + +/* ClassExpr.location = 0, location */ +/* ClassExpr.parenthesised = 1, bool */ +/* ClassExpr.name = 2, str */ +/* ClassExpr.bases = 3, expr_list */ +/* ClassExpr.keywords = 4, dict_item_list */ +/* ClassExpr.inner_scope = 5, Class */ + +/* Compare.location = 0, location */ +/* Compare.parenthesised = 1, bool */ +/* Compare.left = 2, expr */ +/* Compare.ops = 3, cmpop_list */ +/* Compare.comparators = 4, expr_list */ + +/* Continue.location = 0, location */ + +/* Delete.location = 0, location */ +/* Delete.targets = 1, expr_list */ + +/* Dict.location = 0, location */ +/* Dict.parenthesised = 1, bool */ +/* Dict.items = 2, dict_item_list */ + +/* DictComp.location = 0, location */ +/* DictComp.parenthesised = 1, bool */ +/* DictComp.function = 2, Function */ +/* DictComp.iterable = 3, expr */ + +/* DictUnpacking.location = 0, location */ +/* DictUnpacking.value = 1, expr */ + +/* Ellipsis.location = 0, location */ +/* Ellipsis.parenthesised = 1, bool */ + +/* ExceptStmt.location = 0, location */ +/* ExceptStmt.type = 1, expr */ +/* ExceptStmt.name = 2, expr */ +/* ExceptStmt.body = 3, stmt_list */ + +/* Exec.location = 0, location */ +/* Exec.body = 1, expr */ +/* Exec.globals = 2, expr */ +/* Exec.locals = 3, expr */ + +/* ExprStmt.location = 0, location */ +/* ExprStmt.value = 1, expr */ + +/* Filter.location = 0, location */ +/* Filter.parenthesised = 1, bool */ +/* Filter.value = 2, expr */ +/* Filter.filter = 3, expr */ + +/* For.location = 0, location */ +/* For.target = 1, expr */ +/* For.iter = 2, expr */ +/* For.body = 3, stmt_list */ +/* For.orelse = 4, stmt_list */ +/* For.is_async = 5, bool */ + +/* FormattedValue.location = 0, location */ +/* FormattedValue.parenthesised = 1, bool */ +/* FormattedValue.value = 2, expr */ +/* FormattedValue.conversion = 3, str */ +/* FormattedValue.format_spec = 4, JoinedStr */ + +/* Function.name = 0, str */ +/* Function.args = 1, parameter_list */ +/* Function.vararg = 2, expr */ +/* Function.kwonlyargs = 3, expr_list */ +/* Function.kwarg = 4, expr */ +/* Function.body = 5, stmt_list */ +/* Function.is_async = 6, bool */ +/* Function = FunctionParent */ + +/* FunctionExpr.location = 0, location */ +/* FunctionExpr.parenthesised = 1, bool */ +/* FunctionExpr.name = 2, str */ +/* FunctionExpr.args = 3, arguments */ +/* FunctionExpr.returns = 4, expr */ +/* FunctionExpr.inner_scope = 5, Function */ + +/* GeneratorExp.location = 0, location */ +/* GeneratorExp.parenthesised = 1, bool */ +/* GeneratorExp.function = 2, Function */ +/* GeneratorExp.iterable = 3, expr */ + +/* Global.location = 0, location */ +/* Global.names = 1, str_list */ + +/* If.location = 0, location */ +/* If.test = 1, expr */ +/* If.body = 2, stmt_list */ +/* If.orelse = 3, stmt_list */ + +/* IfExp.location = 0, location */ +/* IfExp.parenthesised = 1, bool */ +/* IfExp.test = 2, expr */ +/* IfExp.body = 3, expr */ +/* IfExp.orelse = 4, expr */ + +/* Import.location = 0, location */ +/* Import.names = 1, alias_list */ + +/* ImportExpr.location = 0, location */ +/* ImportExpr.parenthesised = 1, bool */ +/* ImportExpr.level = 2, int */ +/* ImportExpr.name = 3, str */ +/* ImportExpr.top = 4, bool */ + +/* ImportStar.location = 0, location */ +/* ImportStar.module = 1, expr */ + +/* ImportMember.location = 0, location */ +/* ImportMember.parenthesised = 1, bool */ +/* ImportMember.module = 2, expr */ +/* ImportMember.name = 3, str */ + +/* Fstring.location = 0, location */ +/* Fstring.parenthesised = 1, bool */ +/* Fstring.values = 2, expr_list */ +/* Fstring = FormattedValue */ + +/* KeyValuePair.location = 0, location */ +/* KeyValuePair.value = 1, expr */ +/* KeyValuePair.key = 2, expr */ + +/* Lambda.location = 0, location */ +/* Lambda.parenthesised = 1, bool */ +/* Lambda.args = 2, arguments */ +/* Lambda.inner_scope = 3, Function */ + +/* List.location = 0, location */ +/* List.parenthesised = 1, bool */ +/* List.elts = 2, expr_list */ +/* List.ctx = 3, expr_context */ + +/* ListComp.location = 0, location */ +/* ListComp.parenthesised = 1, bool */ +/* ListComp.function = 2, Function */ +/* ListComp.iterable = 3, expr */ +/* ListComp.generators = 4, comprehension_list */ +/* ListComp.elt = 5, expr */ + +/* Module.name = 0, str */ +/* Module.hash = 1, str */ +/* Module.body = 2, stmt_list */ +/* Module.kind = 3, str */ + +/* Name.location = 0, location */ +/* Name.parenthesised = 1, bool */ +/* Name.variable = 2, variable */ +/* Name.ctx = 3, expr_context */ +/* Name = ParameterList */ + +/* Nonlocal.location = 0, location */ +/* Nonlocal.names = 1, str_list */ + +/* Num.location = 0, location */ +/* Num.parenthesised = 1, bool */ +/* Num.n = 2, number */ +/* Num.text = 3, number */ + +/* Pass.location = 0, location */ + +/* PlaceHolder.location = 0, location */ +/* PlaceHolder.parenthesised = 1, bool */ +/* PlaceHolder.variable = 2, variable */ +/* PlaceHolder.ctx = 3, expr_context */ + +/* Print.location = 0, location */ +/* Print.dest = 1, expr */ +/* Print.values = 2, expr_list */ +/* Print.nl = 3, bool */ + +/* Raise.location = 0, location */ +/* Raise.exc = 1, expr */ +/* Raise.cause = 2, expr */ +/* Raise.type = 3, expr */ +/* Raise.inst = 4, expr */ +/* Raise.tback = 5, expr */ + +/* Repr.location = 0, location */ +/* Repr.parenthesised = 1, bool */ +/* Repr.value = 2, expr */ + +/* Return.location = 0, location */ +/* Return.value = 1, expr */ + +/* Set.location = 0, location */ +/* Set.parenthesised = 1, bool */ +/* Set.elts = 2, expr_list */ + +/* SetComp.location = 0, location */ +/* SetComp.parenthesised = 1, bool */ +/* SetComp.function = 2, Function */ +/* SetComp.iterable = 3, expr */ + +/* Slice.location = 0, location */ +/* Slice.parenthesised = 1, bool */ +/* Slice.start = 2, expr */ +/* Slice.stop = 3, expr */ +/* Slice.step = 4, expr */ + +/* SpecialOperation.location = 0, location */ +/* SpecialOperation.parenthesised = 1, bool */ +/* SpecialOperation.name = 2, str */ +/* SpecialOperation.arguments = 3, expr_list */ + +/* Starred.location = 0, location */ +/* Starred.parenthesised = 1, bool */ +/* Starred.value = 2, expr */ +/* Starred.ctx = 3, expr_context */ + +/* Str.location = 0, location */ +/* Str.parenthesised = 1, bool */ +/* Str.s = 2, str */ +/* Str.prefix = 3, str */ +/* Str.implicitly_concatenated_parts = 4, StringPart_list */ + +/* StringPart.text = 0, str */ +/* StringPart.location = 1, location */ +/* StringPart = StringPartList */ +/* StringPartList = BytesOrStr */ + +/* Subscript.location = 0, location */ +/* Subscript.parenthesised = 1, bool */ +/* Subscript.value = 2, expr */ +/* Subscript.index = 3, expr */ +/* Subscript.ctx = 4, expr_context */ + +/* TemplateDottedNotation.location = 0, location */ +/* TemplateDottedNotation.parenthesised = 1, bool */ +/* TemplateDottedNotation.value = 2, expr */ +/* TemplateDottedNotation.attr = 3, str */ +/* TemplateDottedNotation.ctx = 4, expr_context */ + +/* TemplateWrite.location = 0, location */ +/* TemplateWrite.value = 1, expr */ + +/* Try.location = 0, location */ +/* Try.body = 1, stmt_list */ +/* Try.orelse = 2, stmt_list */ +/* Try.handlers = 3, stmt_list */ +/* Try.finalbody = 4, stmt_list */ + +/* Tuple.location = 0, location */ +/* Tuple.parenthesised = 1, bool */ +/* Tuple.elts = 2, expr_list */ +/* Tuple.ctx = 3, expr_context */ +/* Tuple = ParameterList */ + +/* UnaryExpr.location = 0, location */ +/* UnaryExpr.parenthesised = 1, bool */ +/* UnaryExpr.op = 2, unaryop */ +/* UnaryExpr.operand = 3, expr */ + +/* While.location = 0, location */ +/* While.test = 1, expr */ +/* While.body = 2, stmt_list */ +/* While.orelse = 3, stmt_list */ + +/* With.location = 0, location */ +/* With.context_expr = 1, expr */ +/* With.optional_vars = 2, expr */ +/* With.body = 3, stmt_list */ +/* With.is_async = 4, bool */ + +/* Yield.location = 0, location */ +/* Yield.parenthesised = 1, bool */ +/* Yield.value = 2, expr */ + +/* YieldFrom.location = 0, location */ +/* YieldFrom.parenthesised = 1, bool */ +/* YieldFrom.value = 2, expr */ + +/* Alias.value = 0, expr */ +/* Alias.asname = 1, expr */ +/* Alias = AliasList */ +/* AliasList = Import */ + +/* Arguments.kw_defaults = 0, expr_list */ +/* Arguments.defaults = 1, expr_list */ +/* Arguments.annotations = 2, expr_list */ +/* Arguments.varargannotation = 3, expr */ +/* Arguments.kwargannotation = 4, expr */ +/* Arguments.kw_annotations = 5, expr_list */ +/* Arguments = ArgumentsParent */ +/* boolean = BoolParent */ +/* Boolop = BoolExpr */ +/* string = Bytes */ +/* Cmpop = CmpopList */ +/* CmpopList = Compare */ + +/* Comprehension.location = 0, location */ +/* Comprehension.iter = 1, expr */ +/* Comprehension.target = 2, expr */ +/* Comprehension.ifs = 3, expr_list */ +/* Comprehension = ComprehensionList */ +/* ComprehensionList = ListComp */ +/* DictItem = DictItemList */ +/* DictItemList = DictItemListParent */ + +/* Expr.location = 0, location */ +/* Expr.parenthesised = 1, bool */ +/* Expr = ExprParent */ +/* ExprContext = ExprContextParent */ +/* ExprList = ExprListParent */ +/* int = ImportExpr */ + +/* Keyword.location = 0, location */ +/* Keyword.value = 1, expr */ +/* Keyword.arg = 2, str */ +/* Location = LocationParent */ +/* string = Num */ +/* Operator = BinaryExpr */ +/* ParameterList = Function */ + +/* Stmt.location = 0, location */ +/* Stmt = StmtList */ +/* StmtList = StmtListParent */ +/* string = StrParent */ +/* StringList = StrListParent */ +/* Unaryop = UnaryExpr */ +/* Variable = VariableParent */ +py_Classes(unique int id : @py_Class, + unique int parent : @py_ClassExpr ref); + +py_Functions(unique int id : @py_Function, + unique int parent : @py_Function_parent ref); + +py_Modules(unique int id : @py_Module); + +py_StringParts(unique int id : @py_StringPart, + int parent : @py_StringPart_list ref, + int idx : int ref); + +py_StringPart_lists(unique int id : @py_StringPart_list, + unique int parent : @py_Bytes_or_Str ref); + +py_aliases(unique int id : @py_alias, + int parent : @py_alias_list ref, + int idx : int ref); + +py_alias_lists(unique int id : @py_alias_list, + unique int parent : @py_Import ref); + +py_arguments(unique int id : @py_arguments, + unique int parent : @py_arguments_parent ref); + +py_bools(int parent : @py_bool_parent ref, + int idx : int ref); + +py_boolops(unique int id : @py_boolop, + int kind: int ref, + unique int parent : @py_BoolExpr ref); + +py_bytes(varchar(1) id : string ref, + int parent : @py_Bytes ref, + int idx : int ref); + +py_cmpops(unique int id : @py_cmpop, + int kind: int ref, + int parent : @py_cmpop_list ref, + int idx : int ref); + +py_cmpop_lists(unique int id : @py_cmpop_list, + unique int parent : @py_Compare ref); + +py_comprehensions(unique int id : @py_comprehension, + int parent : @py_comprehension_list ref, + int idx : int ref); + +py_comprehension_lists(unique int id : @py_comprehension_list, + unique int parent : @py_ListComp ref); + +py_dict_items(unique int id : @py_dict_item, + int kind: int ref, + int parent : @py_dict_item_list ref, + int idx : int ref); + +py_dict_item_lists(unique int id : @py_dict_item_list, + unique int parent : @py_dict_item_list_parent ref); + +py_exprs(unique int id : @py_expr, + int kind: int ref, + int parent : @py_expr_parent ref, + int idx : int ref); + +py_expr_contexts(unique int id : @py_expr_context, + int kind: int ref, + unique int parent : @py_expr_context_parent ref); + +py_expr_lists(unique int id : @py_expr_list, + int parent : @py_expr_list_parent ref, + int idx : int ref); + +py_ints(int id : int ref, + unique int parent : @py_ImportExpr ref); + +py_locations(unique int id : @location ref, + unique int parent : @py_location_parent ref); + +py_numbers(varchar(1) id : string ref, + int parent : @py_Num ref, + int idx : int ref); + +py_operators(unique int id : @py_operator, + int kind: int ref, + unique int parent : @py_BinaryExpr ref); + +py_parameter_lists(unique int id : @py_parameter_list, + unique int parent : @py_Function ref); + +py_stmts(unique int id : @py_stmt, + int kind: int ref, + int parent : @py_stmt_list ref, + int idx : int ref); + +py_stmt_lists(unique int id : @py_stmt_list, + int parent : @py_stmt_list_parent ref, + int idx : int ref); + +py_strs(varchar(1) id : string ref, + int parent : @py_str_parent ref, + int idx : int ref); + +py_str_lists(unique int id : @py_str_list, + unique int parent : @py_str_list_parent ref); + +py_unaryops(unique int id : @py_unaryop, + int kind: int ref, + unique int parent : @py_UnaryExpr ref); + +py_variables(int id : @py_variable ref, + unique int parent : @py_variable_parent ref); + +case @py_boolop.kind of + 0 = @py_And +| 1 = @py_Or; + +case @py_cmpop.kind of + 0 = @py_Eq +| 1 = @py_Gt +| 2 = @py_GtE +| 3 = @py_In +| 4 = @py_Is +| 5 = @py_IsNot +| 6 = @py_Lt +| 7 = @py_LtE +| 8 = @py_NotEq +| 9 = @py_NotIn; + +case @py_dict_item.kind of + 0 = @py_DictUnpacking +| 1 = @py_KeyValuePair +| 2 = @py_keyword; + +case @py_expr.kind of + 0 = @py_Attribute +| 1 = @py_BinaryExpr +| 2 = @py_BoolExpr +| 3 = @py_Bytes +| 4 = @py_Call +| 5 = @py_ClassExpr +| 6 = @py_Compare +| 7 = @py_Dict +| 8 = @py_DictComp +| 9 = @py_Ellipsis +| 10 = @py_FunctionExpr +| 11 = @py_GeneratorExp +| 12 = @py_IfExp +| 13 = @py_ImportExpr +| 14 = @py_ImportMember +| 15 = @py_Lambda +| 16 = @py_List +| 17 = @py_ListComp +| 18 = @py_Name +| 19 = @py_Num +| 20 = @py_Repr +| 21 = @py_Set +| 22 = @py_SetComp +| 23 = @py_Slice +| 24 = @py_Starred +| 25 = @py_Str +| 26 = @py_Subscript +| 27 = @py_Tuple +| 28 = @py_UnaryExpr +| 29 = @py_Yield +| 30 = @py_YieldFrom +| 31 = @py_TemplateDottedNotation +| 32 = @py_Filter +| 33 = @py_PlaceHolder +| 34 = @py_Await +| 35 = @py_Fstring +| 36 = @py_FormattedValue +| 37 = @py_AssignExpr +| 38 = @py_SpecialOperation; + +case @py_expr_context.kind of + 0 = @py_AugLoad +| 1 = @py_AugStore +| 2 = @py_Del +| 3 = @py_Load +| 4 = @py_Param +| 5 = @py_Store; + +case @py_operator.kind of + 0 = @py_Add +| 1 = @py_BitAnd +| 2 = @py_BitOr +| 3 = @py_BitXor +| 4 = @py_Div +| 5 = @py_FloorDiv +| 6 = @py_LShift +| 7 = @py_Mod +| 8 = @py_Mult +| 9 = @py_Pow +| 10 = @py_RShift +| 11 = @py_Sub +| 12 = @py_MatMult; + +case @py_stmt.kind of + 0 = @py_Assert +| 1 = @py_Assign +| 2 = @py_AugAssign +| 3 = @py_Break +| 4 = @py_Continue +| 5 = @py_Delete +| 6 = @py_ExceptStmt +| 7 = @py_Exec +| 8 = @py_Expr_stmt +| 9 = @py_For +| 10 = @py_Global +| 11 = @py_If +| 12 = @py_Import +| 13 = @py_ImportStar +| 14 = @py_Nonlocal +| 15 = @py_Pass +| 16 = @py_Print +| 17 = @py_Raise +| 18 = @py_Return +| 19 = @py_Try +| 20 = @py_While +| 21 = @py_With +| 22 = @py_TemplateWrite +| 23 = @py_AnnAssign; + +case @py_unaryop.kind of + 0 = @py_Invert +| 1 = @py_Not +| 2 = @py_UAdd +| 3 = @py_USub; + +@py_Bytes_or_Str = @py_Bytes | @py_Str; + +@py_Function_parent = @py_DictComp | @py_FunctionExpr | @py_GeneratorExp | @py_Lambda | @py_ListComp | @py_SetComp; + +@py_arguments_parent = @py_FunctionExpr | @py_Lambda; + +@py_ast_node = @py_Class | @py_Function | @py_Module | @py_StringPart | @py_comprehension | @py_dict_item | @py_expr | @py_stmt; + +@py_bool_parent = @py_For | @py_Function | @py_Print | @py_With | @py_expr; + +@py_dict_item_list_parent = @py_Call | @py_ClassExpr | @py_Dict; + +@py_expr_context_parent = @py_Attribute | @py_List | @py_Name | @py_PlaceHolder | @py_Starred | @py_Subscript | @py_TemplateDottedNotation | @py_Tuple; + +@py_expr_list_parent = @py_Assign | @py_BoolExpr | @py_Call | @py_ClassExpr | @py_Compare | @py_Delete | @py_Fstring | @py_Function | @py_List | @py_Print | @py_Set | @py_SpecialOperation | @py_Tuple | @py_arguments | @py_comprehension; + +@py_expr_or_stmt = @py_expr | @py_stmt; + +@py_expr_parent = @py_AnnAssign | @py_Assert | @py_Assign | @py_AssignExpr | @py_Attribute | @py_AugAssign | @py_Await | @py_BinaryExpr | @py_Call | @py_Compare | @py_DictComp | @py_DictUnpacking | @py_ExceptStmt | @py_Exec | @py_Expr_stmt | @py_Filter | @py_For | @py_FormattedValue | @py_Function | @py_FunctionExpr | @py_GeneratorExp | @py_If | @py_IfExp | @py_ImportMember | @py_ImportStar | @py_KeyValuePair | @py_ListComp | @py_Print | @py_Raise | @py_Repr | @py_Return | @py_SetComp | @py_Slice | @py_Starred | @py_Subscript | @py_TemplateDottedNotation | @py_TemplateWrite | @py_UnaryExpr | @py_While | @py_With | @py_Yield | @py_YieldFrom | @py_alias | @py_arguments | @py_comprehension | @py_expr_list | @py_keyword | @py_parameter_list; + +@py_location_parent = @py_DictUnpacking | @py_KeyValuePair | @py_StringPart | @py_comprehension | @py_expr | @py_keyword | @py_stmt; + +@py_parameter = @py_Name | @py_Tuple; + +@py_scope = @py_Class | @py_Function | @py_Module; + +@py_stmt_list_parent = @py_Class | @py_ExceptStmt | @py_For | @py_Function | @py_If | @py_Module | @py_Try | @py_While | @py_With; + +@py_str_list_parent = @py_Global | @py_Nonlocal; + +@py_str_parent = @py_Attribute | @py_Class | @py_ClassExpr | @py_FormattedValue | @py_Function | @py_FunctionExpr | @py_ImportExpr | @py_ImportMember | @py_Module | @py_SpecialOperation | @py_Str | @py_StringPart | @py_TemplateDottedNotation | @py_keyword | @py_str_list; + +@py_variable_parent = @py_Name | @py_PlaceHolder; + + +/* + * End of auto-generated part + */ + + + +/* Map relative names to absolute names for imports */ +py_absolute_names(int module : @py_Module ref, + varchar(1) relname : string ref, + varchar(1) absname : string ref); + +py_exports(int id : @py_Module ref, + varchar(1) name : string ref); + +/* Successor information */ +py_successors(int predecessor : @py_flow_node ref, + int successor : @py_flow_node ref); + +py_true_successors(int predecessor : @py_flow_node ref, + int successor : @py_flow_node ref); + +py_exception_successors(int predecessor : @py_flow_node ref, + int successor : @py_flow_node ref); + +py_false_successors(int predecessor : @py_flow_node ref, + int successor : @py_flow_node ref); + +py_flow_bb_node(unique int flownode : @py_flow_node, + int realnode : @py_ast_node ref, + int basicblock : @py_flow_node ref, + int index : int ref); + +py_scope_flow(int flow : @py_flow_node ref, + int scope : @py_scope ref, + int kind : int ref); + +py_idoms(unique int node : @py_flow_node ref, + int immediate_dominator : @py_flow_node ref); + +py_ssa_phi(int phi : @py_ssa_var ref, + int arg: @py_ssa_var ref); + +py_ssa_var(unique int id : @py_ssa_var, + int var : @py_variable ref); + +py_ssa_use(int node: @py_flow_node ref, + int var : @py_ssa_var ref); + +py_ssa_defn(unique int id : @py_ssa_var ref, + int node: @py_flow_node ref); + +@py_base_var = @py_variable | @py_ssa_var; + +py_scopes(unique int node : @py_expr_or_stmt ref, + int scope : @py_scope ref); + +py_scope_location(unique int id : @location ref, + unique int scope : @py_scope ref); + +py_flags_versioned(varchar(1) name : string ref, + varchar(1) value : string ref, + varchar(1) version : string ref); + +py_syntax_error_versioned(unique int id : @location ref, + varchar(1) message : string ref, + varchar(1) version : string ref); + +py_comments(unique int id : @py_comment, + varchar(1) text : string ref, + unique int location : @location ref); + +/* Type information support */ + +py_cobjects(unique int obj : @py_cobject); + +py_cobjecttypes(unique int obj : @py_cobject ref, + int typeof : @py_cobject ref); + +py_cobjectnames(unique int obj : @py_cobject ref, + varchar(1) name : string ref); + +/* Kind should be 0 for introspection, > 0 from source, as follows: + 1 from C extension source + */ +py_cobject_sources(int obj : @py_cobject ref, + int kind : int ref); + +py_cmembers_versioned(int object : @py_cobject ref, + varchar(1) name : string ref, + int member : @py_cobject ref, + varchar(1) version : string ref); + +py_citems(int object : @py_cobject ref, + int index : int ref, + int member : @py_cobject ref); + +ext_argtype(int funcid : @py_object ref, + int arg : int ref, + int typeid : @py_object ref); + +ext_rettype(int funcid : @py_object ref, + int typeid : @py_object ref); + +ext_proptype(int propid : @py_object ref, + int typeid : @py_object ref); + +ext_argreturn(int funcid : @py_object ref, + int arg : int ref); + +py_special_objects(unique int obj : @py_cobject ref, + unique varchar(1) name : string ref); + +py_decorated_object(int object : @py_object ref, + int level: int ref); + +@py_object = @py_cobject | @py_flow_node; + +@py_source_element = @py_ast_node | @container; + +/* XML Files */ + +xmlEncoding (unique int id: @file ref, varchar(900) encoding: string ref); + +xmlDTDs (unique int id: @xmldtd, + varchar(900) root: string ref, + varchar(900) publicId: string ref, + varchar(900) systemId: string ref, + int fileid: @file ref); + +xmlElements (unique int id: @xmlelement, + varchar(900) name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref); + +xmlAttrs (unique int id: @xmlattribute, + int elementid: @xmlelement ref, + varchar(900) name: string ref, + varchar(3600) value: string ref, + int idx: int ref, + int fileid: @file ref); + +xmlNs (int id: @xmlnamespace, + varchar(900) prefixName: string ref, + varchar(900) URI: string ref, + int fileid: @file ref); + +xmlHasNs (int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref); + +xmlComments (unique int id: @xmlcomment, + varchar(3600) text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref); + +xmlChars (unique int id: @xmlcharacters, + varchar(3600) text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations(int xmlElement: @xmllocatable ref, + int location: @location_default ref); + +@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace; diff --git a/python/upgrades/4f1806347d7fafe2f78508da01c01e5aff5f7cbb/semmlecode.python.dbscheme b/python/upgrades/4f1806347d7fafe2f78508da01c01e5aff5f7cbb/semmlecode.python.dbscheme new file mode 100644 index 00000000000..69f1b1c771a --- /dev/null +++ b/python/upgrades/4f1806347d7fafe2f78508da01c01e5aff5f7cbb/semmlecode.python.dbscheme @@ -0,0 +1,995 @@ +/* + * This dbscheme is auto-generated by 'semmle/dbscheme_gen.py'. + * WARNING: Any modifications to this file will be lost. + * Relations can be changed by modifying master.py or + * by adding rules to dbscheme.template + */ + +/* This is a dummy line to alter the dbscheme, so we can make a database upgrade + * without actually changing any of the dbscheme predicates. It contains a date + * to allow for such updates in the future as well. + * + * 2020-07-02 + * + * DO NOT remove this comment carelessly, since it can revert the dbscheme back to a + * previously seen state (matching a previously seen SHA), which would make the upgrade + * mechanism not work properly. + */ + + /* + * External artifacts + */ + +externalDefects( + unique int id : @externalDefect, + varchar(900) queryPath : string ref, + int location : @location ref, + varchar(900) message : string ref, + float severity : float ref +); + +externalMetrics( + unique int id : @externalMetric, + varchar(900) queryPath : string ref, + int location : @location ref, + float value : float ref +); + +externalData( + int id : @externalDataElement, + varchar(900) queryPath : string ref, + int column: int ref, + varchar(900) data : string ref +); + +snapshotDate(unique date snapshotDate : date ref); + +sourceLocationPrefix(varchar(900) prefix : string ref); + + +/* + * Duplicate code + */ + +duplicateCode( + unique int id : @duplication, + varchar(900) relativePath : string ref, + int equivClass : int ref); + +similarCode( + unique int id : @similarity, + varchar(900) relativePath : string ref, + int equivClass : int ref); + +@duplication_or_similarity = @duplication | @similarity + +tokens( + int id : @duplication_or_similarity ref, + int offset : int ref, + int beginLine : int ref, + int beginColumn : int ref, + int endLine : int ref, + int endColumn : int ref); + +/* + * Line metrics + */ +py_codelines(int id : @py_scope ref, + int count : int ref); + +py_commentlines(int id : @py_scope ref, + int count : int ref); + +py_docstringlines(int id : @py_scope ref, + int count : int ref); + +py_alllines(int id : @py_scope ref, + int count : int ref); + +/* + * Version history + */ + +svnentries( + int id : @svnentry, + varchar(500) revision : string ref, + varchar(500) author : string ref, + date revisionDate : date ref, + int changeSize : int ref +) + +svnaffectedfiles( + int id : @svnentry ref, + int file : @file ref, + varchar(500) action : string ref +) + +svnentrymsg( + int id : @svnentry ref, + varchar(500) message : string ref +) + +svnchurn( + int commit : @svnentry ref, + int file : @file ref, + int addedLines : int ref, + int deletedLines : int ref +) + +/**************************** + Python dbscheme +****************************/ + +/* fromSource is ignored */ +files(unique int id: @file, + varchar(900) name: string ref); + +folders(unique int id: @folder, + varchar(900) name: string ref); + +@container = @folder | @file; + +containerparent(int parent: @container ref, + unique int child: @container ref); + +@sourceline = @file | @py_Module | @xmllocatable; + +numlines(int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref + ); + +@location = @location_ast | @location_default ; + +locations_default(unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref); + +locations_ast(unique int id: @location_ast, + int module: @py_Module ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref); + +file_contents(unique int file: @file ref, string contents: string ref); + +py_module_path(int module: @py_Module ref, int file: @container ref); + +variable(unique int id : @py_variable, + int scope : @py_scope ref, + varchar(1) name : string ref); + +py_line_lengths(unique int id : @py_line, + int file: @py_Module ref, + int line : int ref, + int length : int ref); + +py_extracted_version(int module : @py_Module ref, + varchar(1) version : string ref); + +/* AUTO GENERATED PART STARTS HERE */ + + +/* AnnAssign.location = 0, location */ +/* AnnAssign.value = 1, expr */ +/* AnnAssign.annotation = 2, expr */ +/* AnnAssign.target = 3, expr */ + +/* Assert.location = 0, location */ +/* Assert.test = 1, expr */ +/* Assert.msg = 2, expr */ + +/* Assign.location = 0, location */ +/* Assign.value = 1, expr */ +/* Assign.targets = 2, expr_list */ + +/* AssignExpr.location = 0, location */ +/* AssignExpr.parenthesised = 1, bool */ +/* AssignExpr.value = 2, expr */ +/* AssignExpr.target = 3, expr */ + +/* Attribute.location = 0, location */ +/* Attribute.parenthesised = 1, bool */ +/* Attribute.value = 2, expr */ +/* Attribute.attr = 3, str */ +/* Attribute.ctx = 4, expr_context */ + +/* AugAssign.location = 0, location */ +/* AugAssign.operation = 1, BinOp */ + +/* Await.location = 0, location */ +/* Await.parenthesised = 1, bool */ +/* Await.value = 2, expr */ + +/* BinaryExpr.location = 0, location */ +/* BinaryExpr.parenthesised = 1, bool */ +/* BinaryExpr.left = 2, expr */ +/* BinaryExpr.op = 3, operator */ +/* BinaryExpr.right = 4, expr */ +/* BinaryExpr = AugAssign */ + +/* BoolExpr.location = 0, location */ +/* BoolExpr.parenthesised = 1, bool */ +/* BoolExpr.op = 2, boolop */ +/* BoolExpr.values = 3, expr_list */ + +/* Break.location = 0, location */ + +/* Bytes.location = 0, location */ +/* Bytes.parenthesised = 1, bool */ +/* Bytes.s = 2, bytes */ +/* Bytes.prefix = 3, bytes */ +/* Bytes.implicitly_concatenated_parts = 4, StringPart_list */ + +/* Call.location = 0, location */ +/* Call.parenthesised = 1, bool */ +/* Call.func = 2, expr */ +/* Call.positional_args = 3, expr_list */ +/* Call.named_args = 4, dict_item_list */ + +/* Class.name = 0, str */ +/* Class.body = 1, stmt_list */ +/* Class = ClassExpr */ + +/* ClassExpr.location = 0, location */ +/* ClassExpr.parenthesised = 1, bool */ +/* ClassExpr.name = 2, str */ +/* ClassExpr.bases = 3, expr_list */ +/* ClassExpr.keywords = 4, dict_item_list */ +/* ClassExpr.inner_scope = 5, Class */ + +/* Compare.location = 0, location */ +/* Compare.parenthesised = 1, bool */ +/* Compare.left = 2, expr */ +/* Compare.ops = 3, cmpop_list */ +/* Compare.comparators = 4, expr_list */ + +/* Continue.location = 0, location */ + +/* Delete.location = 0, location */ +/* Delete.targets = 1, expr_list */ + +/* Dict.location = 0, location */ +/* Dict.parenthesised = 1, bool */ +/* Dict.items = 2, dict_item_list */ + +/* DictComp.location = 0, location */ +/* DictComp.parenthesised = 1, bool */ +/* DictComp.function = 2, Function */ +/* DictComp.iterable = 3, expr */ + +/* DictUnpacking.location = 0, location */ +/* DictUnpacking.value = 1, expr */ + +/* Ellipsis.location = 0, location */ +/* Ellipsis.parenthesised = 1, bool */ + +/* ExceptStmt.location = 0, location */ +/* ExceptStmt.type = 1, expr */ +/* ExceptStmt.name = 2, expr */ +/* ExceptStmt.body = 3, stmt_list */ + +/* Exec.location = 0, location */ +/* Exec.body = 1, expr */ +/* Exec.globals = 2, expr */ +/* Exec.locals = 3, expr */ + +/* ExprStmt.location = 0, location */ +/* ExprStmt.value = 1, expr */ + +/* Filter.location = 0, location */ +/* Filter.parenthesised = 1, bool */ +/* Filter.value = 2, expr */ +/* Filter.filter = 3, expr */ + +/* For.location = 0, location */ +/* For.target = 1, expr */ +/* For.iter = 2, expr */ +/* For.body = 3, stmt_list */ +/* For.orelse = 4, stmt_list */ +/* For.is_async = 5, bool */ + +/* FormattedValue.location = 0, location */ +/* FormattedValue.parenthesised = 1, bool */ +/* FormattedValue.value = 2, expr */ +/* FormattedValue.conversion = 3, str */ +/* FormattedValue.format_spec = 4, JoinedStr */ + +/* Function.name = 0, str */ +/* Function.args = 1, parameter_list */ +/* Function.vararg = 2, expr */ +/* Function.kwonlyargs = 3, expr_list */ +/* Function.kwarg = 4, expr */ +/* Function.body = 5, stmt_list */ +/* Function.is_async = 6, bool */ +/* Function = FunctionParent */ + +/* FunctionExpr.location = 0, location */ +/* FunctionExpr.parenthesised = 1, bool */ +/* FunctionExpr.name = 2, str */ +/* FunctionExpr.args = 3, arguments */ +/* FunctionExpr.returns = 4, expr */ +/* FunctionExpr.inner_scope = 5, Function */ + +/* GeneratorExp.location = 0, location */ +/* GeneratorExp.parenthesised = 1, bool */ +/* GeneratorExp.function = 2, Function */ +/* GeneratorExp.iterable = 3, expr */ + +/* Global.location = 0, location */ +/* Global.names = 1, str_list */ + +/* If.location = 0, location */ +/* If.test = 1, expr */ +/* If.body = 2, stmt_list */ +/* If.orelse = 3, stmt_list */ + +/* IfExp.location = 0, location */ +/* IfExp.parenthesised = 1, bool */ +/* IfExp.test = 2, expr */ +/* IfExp.body = 3, expr */ +/* IfExp.orelse = 4, expr */ + +/* Import.location = 0, location */ +/* Import.names = 1, alias_list */ + +/* ImportExpr.location = 0, location */ +/* ImportExpr.parenthesised = 1, bool */ +/* ImportExpr.level = 2, int */ +/* ImportExpr.name = 3, str */ +/* ImportExpr.top = 4, bool */ + +/* ImportStar.location = 0, location */ +/* ImportStar.module = 1, expr */ + +/* ImportMember.location = 0, location */ +/* ImportMember.parenthesised = 1, bool */ +/* ImportMember.module = 2, expr */ +/* ImportMember.name = 3, str */ + +/* Fstring.location = 0, location */ +/* Fstring.parenthesised = 1, bool */ +/* Fstring.values = 2, expr_list */ +/* Fstring = FormattedValue */ + +/* KeyValuePair.location = 0, location */ +/* KeyValuePair.value = 1, expr */ +/* KeyValuePair.key = 2, expr */ + +/* Lambda.location = 0, location */ +/* Lambda.parenthesised = 1, bool */ +/* Lambda.args = 2, arguments */ +/* Lambda.inner_scope = 3, Function */ + +/* List.location = 0, location */ +/* List.parenthesised = 1, bool */ +/* List.elts = 2, expr_list */ +/* List.ctx = 3, expr_context */ + +/* ListComp.location = 0, location */ +/* ListComp.parenthesised = 1, bool */ +/* ListComp.function = 2, Function */ +/* ListComp.iterable = 3, expr */ +/* ListComp.generators = 4, comprehension_list */ +/* ListComp.elt = 5, expr */ + +/* Module.name = 0, str */ +/* Module.hash = 1, str */ +/* Module.body = 2, stmt_list */ +/* Module.kind = 3, str */ + +/* Name.location = 0, location */ +/* Name.parenthesised = 1, bool */ +/* Name.variable = 2, variable */ +/* Name.ctx = 3, expr_context */ +/* Name = ParameterList */ + +/* Nonlocal.location = 0, location */ +/* Nonlocal.names = 1, str_list */ + +/* Num.location = 0, location */ +/* Num.parenthesised = 1, bool */ +/* Num.n = 2, number */ +/* Num.text = 3, number */ + +/* Pass.location = 0, location */ + +/* PlaceHolder.location = 0, location */ +/* PlaceHolder.parenthesised = 1, bool */ +/* PlaceHolder.variable = 2, variable */ +/* PlaceHolder.ctx = 3, expr_context */ + +/* Print.location = 0, location */ +/* Print.dest = 1, expr */ +/* Print.values = 2, expr_list */ +/* Print.nl = 3, bool */ + +/* Raise.location = 0, location */ +/* Raise.exc = 1, expr */ +/* Raise.cause = 2, expr */ +/* Raise.type = 3, expr */ +/* Raise.inst = 4, expr */ +/* Raise.tback = 5, expr */ + +/* Repr.location = 0, location */ +/* Repr.parenthesised = 1, bool */ +/* Repr.value = 2, expr */ + +/* Return.location = 0, location */ +/* Return.value = 1, expr */ + +/* Set.location = 0, location */ +/* Set.parenthesised = 1, bool */ +/* Set.elts = 2, expr_list */ + +/* SetComp.location = 0, location */ +/* SetComp.parenthesised = 1, bool */ +/* SetComp.function = 2, Function */ +/* SetComp.iterable = 3, expr */ + +/* Slice.location = 0, location */ +/* Slice.parenthesised = 1, bool */ +/* Slice.start = 2, expr */ +/* Slice.stop = 3, expr */ +/* Slice.step = 4, expr */ + +/* SpecialOperation.location = 0, location */ +/* SpecialOperation.parenthesised = 1, bool */ +/* SpecialOperation.name = 2, str */ +/* SpecialOperation.arguments = 3, expr_list */ + +/* Starred.location = 0, location */ +/* Starred.parenthesised = 1, bool */ +/* Starred.value = 2, expr */ +/* Starred.ctx = 3, expr_context */ + +/* Str.location = 0, location */ +/* Str.parenthesised = 1, bool */ +/* Str.s = 2, str */ +/* Str.prefix = 3, str */ +/* Str.implicitly_concatenated_parts = 4, StringPart_list */ + +/* StringPart.text = 0, str */ +/* StringPart.location = 1, location */ +/* StringPart = StringPartList */ +/* StringPartList = BytesOrStr */ + +/* Subscript.location = 0, location */ +/* Subscript.parenthesised = 1, bool */ +/* Subscript.value = 2, expr */ +/* Subscript.index = 3, expr */ +/* Subscript.ctx = 4, expr_context */ + +/* TemplateDottedNotation.location = 0, location */ +/* TemplateDottedNotation.parenthesised = 1, bool */ +/* TemplateDottedNotation.value = 2, expr */ +/* TemplateDottedNotation.attr = 3, str */ +/* TemplateDottedNotation.ctx = 4, expr_context */ + +/* TemplateWrite.location = 0, location */ +/* TemplateWrite.value = 1, expr */ + +/* Try.location = 0, location */ +/* Try.body = 1, stmt_list */ +/* Try.orelse = 2, stmt_list */ +/* Try.handlers = 3, stmt_list */ +/* Try.finalbody = 4, stmt_list */ + +/* Tuple.location = 0, location */ +/* Tuple.parenthesised = 1, bool */ +/* Tuple.elts = 2, expr_list */ +/* Tuple.ctx = 3, expr_context */ +/* Tuple = ParameterList */ + +/* UnaryExpr.location = 0, location */ +/* UnaryExpr.parenthesised = 1, bool */ +/* UnaryExpr.op = 2, unaryop */ +/* UnaryExpr.operand = 3, expr */ + +/* While.location = 0, location */ +/* While.test = 1, expr */ +/* While.body = 2, stmt_list */ +/* While.orelse = 3, stmt_list */ + +/* With.location = 0, location */ +/* With.context_expr = 1, expr */ +/* With.optional_vars = 2, expr */ +/* With.body = 3, stmt_list */ +/* With.is_async = 4, bool */ + +/* Yield.location = 0, location */ +/* Yield.parenthesised = 1, bool */ +/* Yield.value = 2, expr */ + +/* YieldFrom.location = 0, location */ +/* YieldFrom.parenthesised = 1, bool */ +/* YieldFrom.value = 2, expr */ + +/* Alias.value = 0, expr */ +/* Alias.asname = 1, expr */ +/* Alias = AliasList */ +/* AliasList = Import */ + +/* Arguments.kw_defaults = 0, expr_list */ +/* Arguments.defaults = 1, expr_list */ +/* Arguments.annotations = 2, expr_list */ +/* Arguments.varargannotation = 3, expr */ +/* Arguments.kwargannotation = 4, expr */ +/* Arguments.kw_annotations = 5, expr_list */ +/* Arguments = ArgumentsParent */ +/* boolean = BoolParent */ +/* Boolop = BoolExpr */ +/* string = Bytes */ +/* Cmpop = CmpopList */ +/* CmpopList = Compare */ + +/* Comprehension.location = 0, location */ +/* Comprehension.iter = 1, expr */ +/* Comprehension.target = 2, expr */ +/* Comprehension.ifs = 3, expr_list */ +/* Comprehension = ComprehensionList */ +/* ComprehensionList = ListComp */ +/* DictItem = DictItemList */ +/* DictItemList = DictItemListParent */ + +/* Expr.location = 0, location */ +/* Expr.parenthesised = 1, bool */ +/* Expr = ExprParent */ +/* ExprContext = ExprContextParent */ +/* ExprList = ExprListParent */ +/* int = ImportExpr */ + +/* Keyword.location = 0, location */ +/* Keyword.value = 1, expr */ +/* Keyword.arg = 2, str */ +/* Location = LocationParent */ +/* string = Num */ +/* Operator = BinaryExpr */ +/* ParameterList = Function */ + +/* Stmt.location = 0, location */ +/* Stmt = StmtList */ +/* StmtList = StmtListParent */ +/* string = StrParent */ +/* StringList = StrListParent */ +/* Unaryop = UnaryExpr */ +/* Variable = VariableParent */ +py_Classes(unique int id : @py_Class, + unique int parent : @py_ClassExpr ref); + +py_Functions(unique int id : @py_Function, + unique int parent : @py_Function_parent ref); + +py_Modules(unique int id : @py_Module); + +py_StringParts(unique int id : @py_StringPart, + int parent : @py_StringPart_list ref, + int idx : int ref); + +py_StringPart_lists(unique int id : @py_StringPart_list, + unique int parent : @py_Bytes_or_Str ref); + +py_aliases(unique int id : @py_alias, + int parent : @py_alias_list ref, + int idx : int ref); + +py_alias_lists(unique int id : @py_alias_list, + unique int parent : @py_Import ref); + +py_arguments(unique int id : @py_arguments, + unique int parent : @py_arguments_parent ref); + +py_bools(int parent : @py_bool_parent ref, + int idx : int ref); + +py_boolops(unique int id : @py_boolop, + int kind: int ref, + unique int parent : @py_BoolExpr ref); + +py_bytes(varchar(1) id : string ref, + int parent : @py_Bytes ref, + int idx : int ref); + +py_cmpops(unique int id : @py_cmpop, + int kind: int ref, + int parent : @py_cmpop_list ref, + int idx : int ref); + +py_cmpop_lists(unique int id : @py_cmpop_list, + unique int parent : @py_Compare ref); + +py_comprehensions(unique int id : @py_comprehension, + int parent : @py_comprehension_list ref, + int idx : int ref); + +py_comprehension_lists(unique int id : @py_comprehension_list, + unique int parent : @py_ListComp ref); + +py_dict_items(unique int id : @py_dict_item, + int kind: int ref, + int parent : @py_dict_item_list ref, + int idx : int ref); + +py_dict_item_lists(unique int id : @py_dict_item_list, + unique int parent : @py_dict_item_list_parent ref); + +py_exprs(unique int id : @py_expr, + int kind: int ref, + int parent : @py_expr_parent ref, + int idx : int ref); + +py_expr_contexts(unique int id : @py_expr_context, + int kind: int ref, + unique int parent : @py_expr_context_parent ref); + +py_expr_lists(unique int id : @py_expr_list, + int parent : @py_expr_list_parent ref, + int idx : int ref); + +py_ints(int id : int ref, + unique int parent : @py_ImportExpr ref); + +py_locations(unique int id : @location ref, + unique int parent : @py_location_parent ref); + +py_numbers(varchar(1) id : string ref, + int parent : @py_Num ref, + int idx : int ref); + +py_operators(unique int id : @py_operator, + int kind: int ref, + unique int parent : @py_BinaryExpr ref); + +py_parameter_lists(unique int id : @py_parameter_list, + unique int parent : @py_Function ref); + +py_stmts(unique int id : @py_stmt, + int kind: int ref, + int parent : @py_stmt_list ref, + int idx : int ref); + +py_stmt_lists(unique int id : @py_stmt_list, + int parent : @py_stmt_list_parent ref, + int idx : int ref); + +py_strs(varchar(1) id : string ref, + int parent : @py_str_parent ref, + int idx : int ref); + +py_str_lists(unique int id : @py_str_list, + unique int parent : @py_str_list_parent ref); + +py_unaryops(unique int id : @py_unaryop, + int kind: int ref, + unique int parent : @py_UnaryExpr ref); + +py_variables(int id : @py_variable ref, + unique int parent : @py_variable_parent ref); + +case @py_boolop.kind of + 0 = @py_And +| 1 = @py_Or; + +case @py_cmpop.kind of + 0 = @py_Eq +| 1 = @py_Gt +| 2 = @py_GtE +| 3 = @py_In +| 4 = @py_Is +| 5 = @py_IsNot +| 6 = @py_Lt +| 7 = @py_LtE +| 8 = @py_NotEq +| 9 = @py_NotIn; + +case @py_dict_item.kind of + 0 = @py_DictUnpacking +| 1 = @py_KeyValuePair +| 2 = @py_keyword; + +case @py_expr.kind of + 0 = @py_Attribute +| 1 = @py_BinaryExpr +| 2 = @py_BoolExpr +| 3 = @py_Bytes +| 4 = @py_Call +| 5 = @py_ClassExpr +| 6 = @py_Compare +| 7 = @py_Dict +| 8 = @py_DictComp +| 9 = @py_Ellipsis +| 10 = @py_FunctionExpr +| 11 = @py_GeneratorExp +| 12 = @py_IfExp +| 13 = @py_ImportExpr +| 14 = @py_ImportMember +| 15 = @py_Lambda +| 16 = @py_List +| 17 = @py_ListComp +| 18 = @py_Name +| 19 = @py_Num +| 20 = @py_Repr +| 21 = @py_Set +| 22 = @py_SetComp +| 23 = @py_Slice +| 24 = @py_Starred +| 25 = @py_Str +| 26 = @py_Subscript +| 27 = @py_Tuple +| 28 = @py_UnaryExpr +| 29 = @py_Yield +| 30 = @py_YieldFrom +| 31 = @py_TemplateDottedNotation +| 32 = @py_Filter +| 33 = @py_PlaceHolder +| 34 = @py_Await +| 35 = @py_Fstring +| 36 = @py_FormattedValue +| 37 = @py_AssignExpr +| 38 = @py_SpecialOperation; + +case @py_expr_context.kind of + 0 = @py_AugLoad +| 1 = @py_AugStore +| 2 = @py_Del +| 3 = @py_Load +| 4 = @py_Param +| 5 = @py_Store; + +case @py_operator.kind of + 0 = @py_Add +| 1 = @py_BitAnd +| 2 = @py_BitOr +| 3 = @py_BitXor +| 4 = @py_Div +| 5 = @py_FloorDiv +| 6 = @py_LShift +| 7 = @py_Mod +| 8 = @py_Mult +| 9 = @py_Pow +| 10 = @py_RShift +| 11 = @py_Sub +| 12 = @py_MatMult; + +case @py_stmt.kind of + 0 = @py_Assert +| 1 = @py_Assign +| 2 = @py_AugAssign +| 3 = @py_Break +| 4 = @py_Continue +| 5 = @py_Delete +| 6 = @py_ExceptStmt +| 7 = @py_Exec +| 8 = @py_Expr_stmt +| 9 = @py_For +| 10 = @py_Global +| 11 = @py_If +| 12 = @py_Import +| 13 = @py_ImportStar +| 14 = @py_Nonlocal +| 15 = @py_Pass +| 16 = @py_Print +| 17 = @py_Raise +| 18 = @py_Return +| 19 = @py_Try +| 20 = @py_While +| 21 = @py_With +| 22 = @py_TemplateWrite +| 23 = @py_AnnAssign; + +case @py_unaryop.kind of + 0 = @py_Invert +| 1 = @py_Not +| 2 = @py_UAdd +| 3 = @py_USub; + +@py_Bytes_or_Str = @py_Bytes | @py_Str; + +@py_Function_parent = @py_DictComp | @py_FunctionExpr | @py_GeneratorExp | @py_Lambda | @py_ListComp | @py_SetComp; + +@py_arguments_parent = @py_FunctionExpr | @py_Lambda; + +@py_ast_node = @py_Class | @py_Function | @py_Module | @py_StringPart | @py_comprehension | @py_dict_item | @py_expr | @py_stmt; + +@py_bool_parent = @py_For | @py_Function | @py_Print | @py_With | @py_expr; + +@py_dict_item_list_parent = @py_Call | @py_ClassExpr | @py_Dict; + +@py_expr_context_parent = @py_Attribute | @py_List | @py_Name | @py_PlaceHolder | @py_Starred | @py_Subscript | @py_TemplateDottedNotation | @py_Tuple; + +@py_expr_list_parent = @py_Assign | @py_BoolExpr | @py_Call | @py_ClassExpr | @py_Compare | @py_Delete | @py_Fstring | @py_Function | @py_List | @py_Print | @py_Set | @py_SpecialOperation | @py_Tuple | @py_arguments | @py_comprehension; + +@py_expr_or_stmt = @py_expr | @py_stmt; + +@py_expr_parent = @py_AnnAssign | @py_Assert | @py_Assign | @py_AssignExpr | @py_Attribute | @py_AugAssign | @py_Await | @py_BinaryExpr | @py_Call | @py_Compare | @py_DictComp | @py_DictUnpacking | @py_ExceptStmt | @py_Exec | @py_Expr_stmt | @py_Filter | @py_For | @py_FormattedValue | @py_Function | @py_FunctionExpr | @py_GeneratorExp | @py_If | @py_IfExp | @py_ImportMember | @py_ImportStar | @py_KeyValuePair | @py_ListComp | @py_Print | @py_Raise | @py_Repr | @py_Return | @py_SetComp | @py_Slice | @py_Starred | @py_Subscript | @py_TemplateDottedNotation | @py_TemplateWrite | @py_UnaryExpr | @py_While | @py_With | @py_Yield | @py_YieldFrom | @py_alias | @py_arguments | @py_comprehension | @py_expr_list | @py_keyword | @py_parameter_list; + +@py_location_parent = @py_DictUnpacking | @py_KeyValuePair | @py_StringPart | @py_comprehension | @py_expr | @py_keyword | @py_stmt; + +@py_parameter = @py_Name | @py_Tuple; + +@py_scope = @py_Class | @py_Function | @py_Module; + +@py_stmt_list_parent = @py_Class | @py_ExceptStmt | @py_For | @py_Function | @py_If | @py_Module | @py_Try | @py_While | @py_With; + +@py_str_list_parent = @py_Global | @py_Nonlocal; + +@py_str_parent = @py_Attribute | @py_Class | @py_ClassExpr | @py_FormattedValue | @py_Function | @py_FunctionExpr | @py_ImportExpr | @py_ImportMember | @py_Module | @py_SpecialOperation | @py_Str | @py_StringPart | @py_TemplateDottedNotation | @py_keyword | @py_str_list; + +@py_variable_parent = @py_Name | @py_PlaceHolder; + + +/* + * End of auto-generated part + */ + + + +/* Map relative names to absolute names for imports */ +py_absolute_names(int module : @py_Module ref, + varchar(1) relname : string ref, + varchar(1) absname : string ref); + +py_exports(int id : @py_Module ref, + varchar(1) name : string ref); + +/* Successor information */ +py_successors(int predecessor : @py_flow_node ref, + int successor : @py_flow_node ref); + +py_true_successors(int predecessor : @py_flow_node ref, + int successor : @py_flow_node ref); + +py_exception_successors(int predecessor : @py_flow_node ref, + int successor : @py_flow_node ref); + +py_false_successors(int predecessor : @py_flow_node ref, + int successor : @py_flow_node ref); + +py_flow_bb_node(unique int flownode : @py_flow_node, + int realnode : @py_ast_node ref, + int basicblock : @py_flow_node ref, + int index : int ref); + +py_scope_flow(int flow : @py_flow_node ref, + int scope : @py_scope ref, + int kind : int ref); + +py_idoms(unique int node : @py_flow_node ref, + int immediate_dominator : @py_flow_node ref); + +py_ssa_phi(int phi : @py_ssa_var ref, + int arg: @py_ssa_var ref); + +py_ssa_var(unique int id : @py_ssa_var, + int var : @py_variable ref); + +py_ssa_use(int node: @py_flow_node ref, + int var : @py_ssa_var ref); + +py_ssa_defn(unique int id : @py_ssa_var ref, + int node: @py_flow_node ref); + +@py_base_var = @py_variable | @py_ssa_var; + +py_scopes(unique int node : @py_expr_or_stmt ref, + int scope : @py_scope ref); + +py_scope_location(unique int id : @location ref, + unique int scope : @py_scope ref); + +py_flags_versioned(varchar(1) name : string ref, + varchar(1) value : string ref, + varchar(1) version : string ref); + +py_syntax_error_versioned(unique int id : @location ref, + varchar(1) message : string ref, + varchar(1) version : string ref); + +py_comments(unique int id : @py_comment, + varchar(1) text : string ref, + unique int location : @location ref); + +/* Type information support */ + +py_cobjects(unique int obj : @py_cobject); + +py_cobjecttypes(unique int obj : @py_cobject ref, + int typeof : @py_cobject ref); + +py_cobjectnames(unique int obj : @py_cobject ref, + varchar(1) name : string ref); + +/* Kind should be 0 for introspection, > 0 from source, as follows: + 1 from C extension source + */ +py_cobject_sources(int obj : @py_cobject ref, + int kind : int ref); + +py_cmembers_versioned(int object : @py_cobject ref, + varchar(1) name : string ref, + int member : @py_cobject ref, + varchar(1) version : string ref); + +py_citems(int object : @py_cobject ref, + int index : int ref, + int member : @py_cobject ref); + +ext_argtype(int funcid : @py_object ref, + int arg : int ref, + int typeid : @py_object ref); + +ext_rettype(int funcid : @py_object ref, + int typeid : @py_object ref); + +ext_proptype(int propid : @py_object ref, + int typeid : @py_object ref); + +ext_argreturn(int funcid : @py_object ref, + int arg : int ref); + +py_special_objects(unique int obj : @py_cobject ref, + unique varchar(1) name : string ref); + +py_decorated_object(int object : @py_object ref, + int level: int ref); + +@py_object = @py_cobject | @py_flow_node; + +@py_source_element = @py_ast_node | @container; + +/* XML Files */ + +xmlEncoding (unique int id: @file ref, varchar(900) encoding: string ref); + +xmlDTDs (unique int id: @xmldtd, + varchar(900) root: string ref, + varchar(900) publicId: string ref, + varchar(900) systemId: string ref, + int fileid: @file ref); + +xmlElements (unique int id: @xmlelement, + varchar(900) name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref); + +xmlAttrs (unique int id: @xmlattribute, + int elementid: @xmlelement ref, + varchar(900) name: string ref, + varchar(3600) value: string ref, + int idx: int ref, + int fileid: @file ref); + +xmlNs (int id: @xmlnamespace, + varchar(900) prefixName: string ref, + varchar(900) URI: string ref, + int fileid: @file ref); + +xmlHasNs (int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref); + +xmlComments (unique int id: @xmlcomment, + varchar(3600) text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref); + +xmlChars (unique int id: @xmlcharacters, + varchar(3600) text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations(int xmlElement: @xmllocatable ref, + int location: @location_default ref); + +@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace; diff --git a/python/upgrades/4f1806347d7fafe2f78508da01c01e5aff5f7cbb/upgrade.properties b/python/upgrades/4f1806347d7fafe2f78508da01c01e5aff5f7cbb/upgrade.properties new file mode 100644 index 00000000000..a0c4ba602a1 --- /dev/null +++ b/python/upgrades/4f1806347d7fafe2f78508da01c01e5aff5f7cbb/upgrade.properties @@ -0,0 +1,4 @@ +description: Removed unused column from the `folders` and `files` relations +compatibility: full +files.rel: reorder files.rel (int id, string name, string simple, string ext, int fromSource) id name +folders.rel: reorder folders.rel (int id, string name, string simple) id name \ No newline at end of file From 28e5dcef5218d967f2dcfcd52387ae9b8feaf973 Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Thu, 16 Sep 2021 11:14:30 +0200 Subject: [PATCH 459/741] Java: Add container flow to the local taint flow relation. --- .../dataflow/internal/TaintTrackingUtil.qll | 29 ++++++++++++++----- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/TaintTrackingUtil.qll b/java/ql/lib/semmle/code/java/dataflow/internal/TaintTrackingUtil.qll index 55e22b8a164..58ecc4c0a01 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/TaintTrackingUtil.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/TaintTrackingUtil.qll @@ -42,11 +42,28 @@ private module Cached { */ cached predicate localTaintStep(DataFlow::Node src, DataFlow::Node sink) { - DataFlow::localFlowStep(src, sink) or - localAdditionalTaintStep(src, sink) or + DataFlow::localFlowStep(src, sink) + or + localAdditionalTaintStep(src, sink) + or // Simple flow through library code is included in the exposed local // step relation, even though flow is technically inter-procedural FlowSummaryImpl::Private::Steps::summaryThroughStep(src, sink, false) + or + // Treat container flow as taint for the local taint flow relation + exists(DataFlow::Content c | containerContent(c) | + readStep(src, c, sink) or + storeStep(src, c, sink) or + FlowSummaryImpl::Private::Steps::summaryGetterStep(src, c, sink) or + FlowSummaryImpl::Private::Steps::summarySetterStep(src, c, sink) + ) + } + + private predicate containerContent(DataFlow::Content c) { + c instanceof DataFlow::ArrayContent or + c instanceof DataFlow::CollectionContent or + c instanceof DataFlow::MapKeyContent or + c instanceof DataFlow::MapValueContent } /** @@ -65,12 +82,8 @@ private module Cached { readStep(src, f, sink) and not sink.getTypeBound() instanceof PrimitiveType and not sink.getTypeBound() instanceof BoxedType and - not sink.getTypeBound() instanceof NumberType - | - f instanceof DataFlow::ArrayContent or - f instanceof DataFlow::CollectionContent or - f instanceof DataFlow::MapKeyContent or - f instanceof DataFlow::MapValueContent + not sink.getTypeBound() instanceof NumberType and + containerContent(f) ) or FlowSummaryImpl::Private::Steps::summaryLocalStep(src, sink, false) From f18c163408cfd11753ce17e97453d8e83376144a Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Thu, 16 Sep 2021 11:57:28 +0200 Subject: [PATCH 460/741] Improve handling of the 'author' word as an exception --- .../code/java/security/SensitiveActions.qll | 6 ++-- .../semmle/tests/ConditionalBypassTest.java | 29 +++++++++++++++++++ 2 files changed, 32 insertions(+), 3 deletions(-) diff --git a/java/ql/lib/semmle/code/java/security/SensitiveActions.qll b/java/ql/lib/semmle/code/java/security/SensitiveActions.qll index 8e8c9759d6e..b8cdf5e0833 100644 --- a/java/ql/lib/semmle/code/java/security/SensitiveActions.qll +++ b/java/ql/lib/semmle/code/java/security/SensitiveActions.qll @@ -81,9 +81,9 @@ class AuthMethod extends SensitiveExecutionMethod { AuthMethod() { exists(string s | s = this.getName().toLowerCase() | s.matches(["%login%", "%auth%"]) and - not s.matches([ - "get%", "set%", "parse%", "%loginfo%", "remove%", "clean%", "%unauth%", "%author%" - ]) + not s.matches(["get%", "set%", "parse%", "%loginfo%", "remove%", "clean%", "%unauth%"]) and + // exclude "author", but not "authorize" or "authority" + not s.regexpMatch(".*[aA]uthors?([A-Z0-9_].*|$)") ) and not this.getDeclaringType().getASupertype*() instanceof TypeException } diff --git a/java/ql/test/query-tests/security/CWE-807/semmle/tests/ConditionalBypassTest.java b/java/ql/test/query-tests/security/CWE-807/semmle/tests/ConditionalBypassTest.java index 9dd72f0dd63..51dd5379005 100644 --- a/java/ql/test/query-tests/security/CWE-807/semmle/tests/ConditionalBypassTest.java +++ b/java/ql/test/query-tests/security/CWE-807/semmle/tests/ConditionalBypassTest.java @@ -129,6 +129,27 @@ class ConditionalBypassTest { } } + public static void test8(String user, String password) { + Cookie adminCookie = getCookies()[0]; + { + // BAD: login may not happen + if (adminCookie.getValue() == "false") // $ hasConditionalBypassTest + authorize(user, password); + else { + // do something else + doIt(); + } + } + { + // obtainAuthor is not sensitive, so this is safe + if (adminCookie.getValue() == "false") + obtainAuthor(); + else { + doIt(); + } + } + } + public static void login(String user, String password) { // login } @@ -137,6 +158,14 @@ class ConditionalBypassTest { // login } + public static void authorize(String user, String password) { + // login + } + + public static String obtainAuthor() { + return ""; + } + public static Cookie[] getCookies() { // get cookies from a servlet return new Cookie[0]; From 9f10018d48a33e40799bf4e65efca9f8afd03ffb Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Thu, 16 Sep 2021 13:01:16 +0200 Subject: [PATCH 461/741] Address review comment --- python/ql/lib/semmlecode.python.dbscheme | 1 - .../semmlecode.python.dbscheme | 1 - 2 files changed, 2 deletions(-) diff --git a/python/ql/lib/semmlecode.python.dbscheme b/python/ql/lib/semmlecode.python.dbscheme index 69f1b1c771a..ff5327c074c 100644 --- a/python/ql/lib/semmlecode.python.dbscheme +++ b/python/ql/lib/semmlecode.python.dbscheme @@ -120,7 +120,6 @@ svnchurn( Python dbscheme ****************************/ -/* fromSource is ignored */ files(unique int id: @file, varchar(900) name: string ref); diff --git a/python/upgrades/4f1806347d7fafe2f78508da01c01e5aff5f7cbb/semmlecode.python.dbscheme b/python/upgrades/4f1806347d7fafe2f78508da01c01e5aff5f7cbb/semmlecode.python.dbscheme index 69f1b1c771a..ff5327c074c 100644 --- a/python/upgrades/4f1806347d7fafe2f78508da01c01e5aff5f7cbb/semmlecode.python.dbscheme +++ b/python/upgrades/4f1806347d7fafe2f78508da01c01e5aff5f7cbb/semmlecode.python.dbscheme @@ -120,7 +120,6 @@ svnchurn( Python dbscheme ****************************/ -/* fromSource is ignored */ files(unique int id: @file, varchar(900) name: string ref); From 58d2d5d14e43e2238d56bde79367e31441cf1b57 Mon Sep 17 00:00:00 2001 From: Marcono1234 Date: Sat, 4 Sep 2021 21:09:36 +0200 Subject: [PATCH 462/741] Java: Replace incorrect usage of `Literal.getLiteral()` --- java/ql/lib/semmle/code/java/Annotation.qll | 6 +-- java/ql/lib/semmle/code/java/Expr.qll | 21 ++++++++-- .../lib/semmle/code/java/JDKAnnotations.qll | 5 +-- .../code/java/security/RelativePaths.qll | 2 +- .../Collections/WriteOnlyContainer.ql | 2 +- .../CWE/CWE-327/BrokenCryptoAlgorithm.ql | 8 ++-- .../CWE/CWE-327/MaybeBrokenCryptoAlgorithm.ql | 8 ++-- .../Magic Constants/MagicConstants.qll | 42 +++++++------------ .../test/library-tests/Encryption/insecure.ql | 2 +- .../test/library-tests/Encryption/secure.ql | 2 +- 10 files changed, 47 insertions(+), 51 deletions(-) diff --git a/java/ql/lib/semmle/code/java/Annotation.qll b/java/ql/lib/semmle/code/java/Annotation.qll index aa114589a2d..2ee7c6403b4 100755 --- a/java/ql/lib/semmle/code/java/Annotation.qll +++ b/java/ql/lib/semmle/code/java/Annotation.qll @@ -118,11 +118,7 @@ class Annotatable extends Element { * annotation attached to it for the specified `category`. */ predicate suppressesWarningsAbout(string category) { - exists(string withQuotes | - withQuotes = getAnAnnotation().(SuppressWarningsAnnotation).getASuppressedWarning() - | - category = withQuotes.substring(1, withQuotes.length() - 1) - ) + category = getAnAnnotation().(SuppressWarningsAnnotation).getASuppressedWarning() or this.(Member).getDeclaringType().suppressesWarningsAbout(category) or diff --git a/java/ql/lib/semmle/code/java/Expr.qll b/java/ql/lib/semmle/code/java/Expr.qll index 4c6ea652f2a..d4b6ca5d425 100755 --- a/java/ql/lib/semmle/code/java/Expr.qll +++ b/java/ql/lib/semmle/code/java/Expr.qll @@ -599,10 +599,23 @@ class AssignURShiftExpr extends AssignOp, @assignurshiftexpr { /** A common super-class to represent constant literals. */ class Literal extends Expr, @literal { - /** Gets a string representation of this literal. */ + /** + * Gets a string representation of this literal as it appeared + * in the source code. + * + * **Important:** Unless a query explicitly wants to check how + * a literal was written in the source code, the predicate + * `getValue()` (or value predicates of subclasses) should be + * used instead. For example for the integer literal `0x7fff_ffff` + * the result of `getLiteral()` would be `0x7fff_ffff`, while + * the result of `getValue()` would be `2147483647`. + */ string getLiteral() { namestrings(result, _, this) } - /** Gets a string representation of the value of this literal. */ + /** + * Gets a string representation of the value this literal + * represents. + */ string getValue() { namestrings(_, result, this) } /** Gets a printable representation of this expression. */ @@ -619,9 +632,9 @@ class Literal extends Expr, @literal { class BooleanLiteral extends Literal, @booleanliteral { /** Gets the boolean representation of this literal. */ boolean getBooleanValue() { - result = true and getLiteral() = "true" + result = true and getValue() = "true" or - result = false and getLiteral() = "false" + result = false and getValue() = "false" } override string getAPrimaryQlClass() { result = "BooleanLiteral" } diff --git a/java/ql/lib/semmle/code/java/JDKAnnotations.qll b/java/ql/lib/semmle/code/java/JDKAnnotations.qll index 652b1b48f14..49776a570f2 100644 --- a/java/ql/lib/semmle/code/java/JDKAnnotations.qll +++ b/java/ql/lib/semmle/code/java/JDKAnnotations.qll @@ -25,10 +25,7 @@ class SuppressWarningsAnnotation extends Annotation { } /** Gets the name of a warning suppressed by this annotation. */ - string getASuppressedWarning() { - result = this.getAValue().(StringLiteral).getLiteral() or - result = this.getAValue().(ArrayInit).getAnInit().(StringLiteral).getLiteral() - } + string getASuppressedWarning() { result = getASuppressedWarningLiteral().getRepresentedString() } } /** A `@Target` annotation. */ diff --git a/java/ql/lib/semmle/code/java/security/RelativePaths.qll b/java/ql/lib/semmle/code/java/security/RelativePaths.qll index 908a02332bc..34ffcc5bb04 100644 --- a/java/ql/lib/semmle/code/java/security/RelativePaths.qll +++ b/java/ql/lib/semmle/code/java/security/RelativePaths.qll @@ -5,7 +5,7 @@ import java * An element that starts with a relative path. */ predicate relativePath(Element tree, string command) { - exists(StringLiteral lit, string text | tree = lit and text = lit.getLiteral() | + exists(StringLiteral lit, string text | tree = lit and text = lit.getRepresentedString() | text != "" and ( text.regexpMatch("[^/\\\\ \t]*") or diff --git a/java/ql/src/Likely Bugs/Collections/WriteOnlyContainer.ql b/java/ql/src/Likely Bugs/Collections/WriteOnlyContainer.ql index 689d223c72b..8002c8d6841 100644 --- a/java/ql/src/Likely Bugs/Collections/WriteOnlyContainer.ql +++ b/java/ql/src/Likely Bugs/Collections/WriteOnlyContainer.ql @@ -24,7 +24,7 @@ where // Exclude fields that may be read from reflectively. not reflectivelyRead(v) and // Exclude fields annotated with `@SuppressWarnings("unused")`. - not v.getAnAnnotation().(SuppressWarningsAnnotation).getASuppressedWarning() = "\"unused\"" and + not v.getAnAnnotation().(SuppressWarningsAnnotation).getASuppressedWarning() = "unused" and // Exclude fields with relevant Lombok annotations. not v instanceof LombokGetterAnnotatedField and // Every access to `v` is either... diff --git a/java/ql/src/Security/CWE/CWE-327/BrokenCryptoAlgorithm.ql b/java/ql/src/Security/CWE/CWE-327/BrokenCryptoAlgorithm.ql index 5c8a5b51df0..230d33c316b 100644 --- a/java/ql/src/Security/CWE/CWE-327/BrokenCryptoAlgorithm.ql +++ b/java/ql/src/Security/CWE/CWE-327/BrokenCryptoAlgorithm.ql @@ -17,14 +17,14 @@ import DataFlow import PathGraph private class ShortStringLiteral extends StringLiteral { - ShortStringLiteral() { getLiteral().length() < 100 } + ShortStringLiteral() { getRepresentedString().length() < 100 } } class BrokenAlgoLiteral extends ShortStringLiteral { BrokenAlgoLiteral() { - getValue().regexpMatch(getInsecureAlgorithmRegex()) and + getRepresentedString().regexpMatch(getInsecureAlgorithmRegex()) and // Exclude German and French sentences. - not getValue().regexpMatch(".*\\p{IsLowercase} des \\p{IsLetter}.*") + not getRepresentedString().regexpMatch(".*\\p{IsLowercase} des \\p{IsLetter}.*") } } @@ -48,4 +48,4 @@ where source.getNode().asExpr() = s and conf.hasFlowPath(source, sink) select c, source, sink, "Cryptographic algorithm $@ is weak and should not be used.", s, - s.getLiteral() + s.getRepresentedString() diff --git a/java/ql/src/Security/CWE/CWE-327/MaybeBrokenCryptoAlgorithm.ql b/java/ql/src/Security/CWE/CWE-327/MaybeBrokenCryptoAlgorithm.ql index 1b99c53561b..c153426e2f4 100644 --- a/java/ql/src/Security/CWE/CWE-327/MaybeBrokenCryptoAlgorithm.ql +++ b/java/ql/src/Security/CWE/CWE-327/MaybeBrokenCryptoAlgorithm.ql @@ -18,14 +18,14 @@ import semmle.code.java.dispatch.VirtualDispatch import PathGraph private class ShortStringLiteral extends StringLiteral { - ShortStringLiteral() { getLiteral().length() < 100 } + ShortStringLiteral() { getRepresentedString().length() < 100 } } class InsecureAlgoLiteral extends ShortStringLiteral { InsecureAlgoLiteral() { // Algorithm identifiers should be at least two characters. - getValue().length() > 1 and - exists(string s | s = getLiteral() | + getRepresentedString().length() > 1 and + exists(string s | s = getRepresentedString() | not s.regexpMatch(getSecureAlgorithmRegex()) and // Exclude results covered by another query. not s.regexpMatch(getInsecureAlgorithmRegex()) @@ -72,4 +72,4 @@ where conf.hasFlowPath(source, sink) select c, source, sink, "Cryptographic algorithm $@ may not be secure, consider using a different algorithm.", s, - s.getLiteral() + s.getRepresentedString() diff --git a/java/ql/src/Violations of Best Practice/Magic Constants/MagicConstants.qll b/java/ql/src/Violations of Best Practice/Magic Constants/MagicConstants.qll index 4b5f265754f..4ae435cd2eb 100644 --- a/java/ql/src/Violations of Best Practice/Magic Constants/MagicConstants.qll +++ b/java/ql/src/Violations of Best Practice/Magic Constants/MagicConstants.qll @@ -186,24 +186,21 @@ private predicate trivialIntValue(string s) { exists(string pos | trivialPositiveIntValue(pos) and s = "-" + pos) } -private predicate intTrivial(Literal lit) { - exists(string v | trivialIntValue(v) and v = lit.getLiteral()) +private predicate intTrivial(IntegerLiteral lit) { + // Remove all `_` from literal, if any (e.g. `1_000_000`) + exists(string v | trivialIntValue(v) and v = lit.getLiteral().replaceAll("_", "")) } -private predicate longTrivial(Literal lit) { - exists(string v | trivialIntValue(v) and v + "L" = lit.getLiteral()) +private predicate longTrivial(LongLiteral lit) { + exists(string v | + trivialIntValue(v) and + // Remove all `_` from literal, if any (e.g. `1_000_000L`) + v + ["l", "L"] = lit.getLiteral().replaceAll("_", "") + ) } private predicate powerOfTen(float f) { - f = 10 or - f = 100 or - f = 1000 or - f = 10000 or - f = 100000 or - f = 1000000 or - f = 10000000 or - f = 100000000 or - f = 1000000000 + f = [10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000, 1000000000] } private predicate floatTrivial(Literal lit) { @@ -244,7 +241,7 @@ private predicate literalIsConstantInitializer(Literal literal, Field f) { } private predicate nonTrivialValue(string value, Literal literal, string context) { - value = literal.getLiteral() and + value = literal.getValue() and not trivial(literal) and not literalIsConstantInitializer(literal, _) and not literal.getParent*() instanceof ArrayInit and @@ -259,7 +256,7 @@ private predicate valueOccurrenceCount(string value, int n, string context) { private predicate occurenceCount(Literal lit, string value, int n, string context) { valueOccurrenceCount(value, n, context) and - value = lit.getLiteral() and + value = lit.getValue() and nonTrivialValue(_, lit, context) } @@ -296,14 +293,7 @@ private predicate firstOccurrence(Literal lit, string value, string context, int ) } -predicate isNumber(Literal lit) { - lit.getType().getName() = "char" or - lit.getType().getName() = "short" or - lit.getType().getName() = "int" or - lit.getType().getName() = "long" or - lit.getType().getName() = "float" or - lit.getType().getName() = "double" -} +predicate isNumber(Literal lit) { lit.getType() instanceof NumericOrCharType } predicate magicConstant(Literal e, string msg) { exists(string value, int n, string context | @@ -320,7 +310,7 @@ predicate magicConstant(Literal e, string msg) { private predicate relevantField(Field f, string value) { exists(Literal lit | - not trivial(lit) and value = lit.getLiteral() and literalIsConstantInitializer(lit, f) + not trivial(lit) and value = lit.getValue() and literalIsConstantInitializer(lit, f) ) } @@ -344,7 +334,7 @@ private predicate candidateConstantForLiteral( exists(Literal initLiteral | literalIsConstantInitializer(initLiteral, constField) and exists(string value | - value = initLiteral.getLiteral() and + value = initLiteral.getValue() and nonTrivialValue(value, magicLiteral, context) and fieldUsedInContext(constField, context) ) and @@ -401,7 +391,7 @@ predicate literalInsteadOfConstant( exists(string context | canUseFieldInsteadOfLiteral(constField, magicLiteral, context) and message = - "Literal value '" + magicLiteral.getLiteral() + "' used " + " in a call to " + context + + "Literal value '" + magicLiteral.getValue() + "' used " + " in a call to " + context + "; consider using the defined constant $@." and linkText = constField.getName() and ( diff --git a/java/ql/test/library-tests/Encryption/insecure.ql b/java/ql/test/library-tests/Encryption/insecure.ql index 86e7adcfba0..549997ad804 100644 --- a/java/ql/test/library-tests/Encryption/insecure.ql +++ b/java/ql/test/library-tests/Encryption/insecure.ql @@ -2,5 +2,5 @@ import default import semmle.code.java.security.Encryption from StringLiteral s -where s.getLiteral().regexpMatch(getInsecureAlgorithmRegex()) +where s.getRepresentedString().regexpMatch(getInsecureAlgorithmRegex()) select s diff --git a/java/ql/test/library-tests/Encryption/secure.ql b/java/ql/test/library-tests/Encryption/secure.ql index 16b752713a4..009a99b82f7 100644 --- a/java/ql/test/library-tests/Encryption/secure.ql +++ b/java/ql/test/library-tests/Encryption/secure.ql @@ -2,5 +2,5 @@ import default import semmle.code.java.security.Encryption from StringLiteral s -where s.getLiteral().regexpMatch(getSecureAlgorithmRegex()) +where s.getRepresentedString().regexpMatch(getSecureAlgorithmRegex()) select s From 020aa4d94c9d36f18d0ffde4e7146241d33aeda3 Mon Sep 17 00:00:00 2001 From: Marcono1234 Date: Sat, 11 Sep 2021 02:48:24 +0200 Subject: [PATCH 463/741] Java: Address feedback and fix test failures --- java/ql/lib/semmle/code/java/security/Encryption.qll | 2 +- .../Magic Constants/MagicConstants.qll | 2 +- .../CWE-327/semmle/tests/BrokenCryptoAlgorithm.expected | 4 ++-- .../CWE-327/semmle/tests/MaybeBrokenCryptoAlgorithm.expected | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/java/ql/lib/semmle/code/java/security/Encryption.qll b/java/ql/lib/semmle/code/java/security/Encryption.qll index c8292a6a42c..3e65375d91f 100644 --- a/java/ql/lib/semmle/code/java/security/Encryption.qll +++ b/java/ql/lib/semmle/code/java/security/Encryption.qll @@ -168,7 +168,7 @@ string getInsecureAlgorithmRegex() { string getASecureAlgorithmName() { result = [ - "RSA", "SHA256", "SHA512", "CCM", "GCM", "AES([^a-zA-Z](?!ECB|CBC/PKCS[57]Padding)).*", + "RSA", "SHA256", "SHA512", "CCM", "GCM", "AES(?![^a-zA-Z](ECB|CBC/PKCS[57]Padding))", "Blowfish", "ECIES" ] } diff --git a/java/ql/src/Violations of Best Practice/Magic Constants/MagicConstants.qll b/java/ql/src/Violations of Best Practice/Magic Constants/MagicConstants.qll index 4ae435cd2eb..96c4d753d8f 100644 --- a/java/ql/src/Violations of Best Practice/Magic Constants/MagicConstants.qll +++ b/java/ql/src/Violations of Best Practice/Magic Constants/MagicConstants.qll @@ -391,7 +391,7 @@ predicate literalInsteadOfConstant( exists(string context | canUseFieldInsteadOfLiteral(constField, magicLiteral, context) and message = - "Literal value '" + magicLiteral.getValue() + "' used " + " in a call to " + context + + "Literal value '" + magicLiteral.getLiteral() + "' used " + " in a call to " + context + "; consider using the defined constant $@." and linkText = constField.getName() and ( diff --git a/java/ql/test/query-tests/security/CWE-327/semmle/tests/BrokenCryptoAlgorithm.expected b/java/ql/test/query-tests/security/CWE-327/semmle/tests/BrokenCryptoAlgorithm.expected index b393af42f71..19ab13ed803 100644 --- a/java/ql/test/query-tests/security/CWE-327/semmle/tests/BrokenCryptoAlgorithm.expected +++ b/java/ql/test/query-tests/security/CWE-327/semmle/tests/BrokenCryptoAlgorithm.expected @@ -4,5 +4,5 @@ nodes | Test.java:42:33:42:37 | "RC2" | semmle.label | "RC2" | subpaths #select -| Test.java:19:20:19:50 | getInstance(...) | Test.java:19:45:19:49 | "DES" | Test.java:19:45:19:49 | "DES" | Cryptographic algorithm $@ is weak and should not be used. | Test.java:19:45:19:49 | "DES" | "DES" | -| Test.java:42:14:42:38 | getInstance(...) | Test.java:42:33:42:37 | "RC2" | Test.java:42:33:42:37 | "RC2" | Cryptographic algorithm $@ is weak and should not be used. | Test.java:42:33:42:37 | "RC2" | "RC2" | +| Test.java:19:20:19:50 | getInstance(...) | Test.java:19:45:19:49 | "DES" | Test.java:19:45:19:49 | "DES" | Cryptographic algorithm $@ is weak and should not be used. | Test.java:19:45:19:49 | "DES" | DES | +| Test.java:42:14:42:38 | getInstance(...) | Test.java:42:33:42:37 | "RC2" | Test.java:42:33:42:37 | "RC2" | Cryptographic algorithm $@ is weak and should not be used. | Test.java:42:33:42:37 | "RC2" | RC2 | diff --git a/java/ql/test/query-tests/security/CWE-327/semmle/tests/MaybeBrokenCryptoAlgorithm.expected b/java/ql/test/query-tests/security/CWE-327/semmle/tests/MaybeBrokenCryptoAlgorithm.expected index c046f507430..f61954d848a 100644 --- a/java/ql/test/query-tests/security/CWE-327/semmle/tests/MaybeBrokenCryptoAlgorithm.expected +++ b/java/ql/test/query-tests/security/CWE-327/semmle/tests/MaybeBrokenCryptoAlgorithm.expected @@ -3,4 +3,4 @@ nodes | Test.java:34:48:34:52 | "foo" | semmle.label | "foo" | subpaths #select -| Test.java:34:21:34:53 | new SecretKeySpec(...) | Test.java:34:48:34:52 | "foo" | Test.java:34:48:34:52 | "foo" | Cryptographic algorithm $@ may not be secure, consider using a different algorithm. | Test.java:34:48:34:52 | "foo" | "foo" | +| Test.java:34:21:34:53 | new SecretKeySpec(...) | Test.java:34:48:34:52 | "foo" | Test.java:34:48:34:52 | "foo" | Cryptographic algorithm $@ may not be secure, consider using a different algorithm. | Test.java:34:48:34:52 | "foo" | foo | From 035d655e72ba9e9de36b0dbf47a4d29b5af369fe Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Thu, 17 Jun 2021 15:54:38 +0100 Subject: [PATCH 464/741] Update guava collection flow steps to CSV --- .../java/frameworks/guava/Collections.qll | 398 +++++++----------- .../frameworks/guava/TestCollect.java | 61 +-- 2 files changed, 181 insertions(+), 278 deletions(-) diff --git a/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll b/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll index 58558b2ffc0..fe33c1992c0 100644 --- a/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll +++ b/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll @@ -3,102 +3,161 @@ import java private import semmle.code.java.dataflow.DataFlow private import semmle.code.java.dataflow.FlowSteps +private import semmle.code.java.dataflow.ExternalFlow private import semmle.code.java.Collections private string guavaCollectPackage() { result = "com.google.common.collect" } -/** A reference type that extends a parameterization of one of the various immutable container types. */ -private class ImmutableContainerType extends RefType { - string kind; - - ImmutableContainerType() { - this.getSourceDeclaration().getASourceSupertype*().hasQualifiedName(guavaCollectPackage(), kind) and - kind = ["ImmutableCollection", "ImmutableMap", "ImmutableMultimap", "ImmutableTable"] +private class GuavaCollectCsv extends SummaryModelCsv { + override predicate row(string row) { + row = + [ + //"package;type;overrides;name;signature;ext;inputspec;outputspec;kind", + // Multisets + "com.google.common.collect;Multiset;true;add;(Object,int);;Argument[0];Element of Argument[-1];value", + "com.google.common.collect;Multiset;true;setCount;(Object,int);;Argument[0];Element of Argument[-1];value", + "com.google.common.collect;Multiset;true;setCount;(Object,int,int);;Argument[0];Element of Argument[-1];value", + "com.google.common.collect;Multiset;true;elementSet;();;Element of Argument[-1];Element of ReturnValue;value", + "com.google.common.collect;Multiset;true;entrySet;();;Element of Argument[-1];Element of Element of ReturnValue;value", + "com.google.common.collect;Multiset<>$Entry;true;getElement;();;Element of Argument[-1];ReturnValue;value", + // Multimaps (aliasing between the collection 'views' returned by some methods and the original collection is not implemented) + "com.google.common.collect;Multimap;true;asMap;();;MapKey of Argument[-1];MapKey of ReturnValue;value", + "com.google.common.collect;Multimap;true;asMap;();;MapValue of Argument[-1];Element of MapValue of ReturnValue;value", + "com.google.common.collect;Multimap;true;entries;();;MapKey of Argument[-1];MapKey of Element of ReturnValue;value", + "com.google.common.collect;Multimap;true;entries;();;MapValue of Argument[-1];MapValue of Element of ReturnValue;value", + "com.google.common.collect;Multimap;true;get;(Object);;MapValue of Argument[-1];Element of ReturnValue;value", + "com.google.common.collect;Multimap;true;keys;();;MapKey of Argument[-1];Element of ReturnValue;value", + "com.google.common.collect;Multimap;true;keySet;();;MapKey of Argument[-1];Element of ReturnValue;value", + "com.google.common.collect;Multimap;true;values();;MapValue of Argument[-1];Element of ReturnValue;value", + "com.google.common.collect;Multimap;true;put;(Object,Object);;Argument[0];MapKey of Argument[-1];value", + "com.google.common.collect;Multimap;true;put;(Object,Object);;Argument[1];MapValue of Argument[-1];value", + "com.google.common.collect;Multimap;true;putAll;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value", + "com.google.common.collect;Multimap;true;putAll;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value", + "com.google.common.collect;Multimap;true;putAll;(Multimap);;MapKey of Argument[0];MapKey of Argument[-1];value", + "com.google.common.collect;Multimap;true;putAll;(Multimap);;MapValue of Argument[0];MapValue of Argument[-1];value", + "com.google.common.collect;Multimap;true;removeAll;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value", + "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;MapValue of Argument[-1];MapValue of ReturnValue;value", + "com.google.common.collect;Multimap;true;replaceValues(Object,Iterable);;Argument[0];MapKey of Argument[-1];value", + "com.google.common.collect;Multimap;true;replaceValues(Object,Iterable);;Element of Argument[0];MapValue of Argument[-1];value", + "com.google.common.collect;ImmutableMultimap;true;inverse;();;MapKey of Argument[-1];MapValue of ReturnValue;value", + "com.google.common.collect;ImmutableMultimap;true;inverse;();;MapValue of Argument[-1];MapKey of ReturnValue;value", + // Tables (TODO) + // Misc collections and utilities + "com.google.common.collect;ImmutableCollection;true;asList;();;Element of Argument[-1];Element of ReturnValue;value", + "com.google.common.collect;ImmutableList;true;reverse;();;Element of Argument[-1];Element of ReturnValue;value", + "com.google.common.collect;ImmutableCollection;true;subList;(int,int);;Element of Argument[-1];Element of ReturnValue;value", + "com.google.common.collect;BiMap;true;forcePut;(Object,Object);;Argument[0];MapKey of Argument[-1];value", + "com.google.common.collect;BiMap;true;forcePut;(Object,Object);;Argument[1];MapValue of Argument[-1];value", + "com.google.common.collect;BiMap;true;inverse;();;MapKey of Argument[-1];MapValue of ReturnValue;value", + "com.google.common.collect;BiMap;true;inverse;();;MapValue of Argument[-1];MapKey of ReturnValue;value", + "com.google.common.collect;ClassToInstanceMap;true;getInstance;(Class);;MapValue of Argument[-1];ReturnValue;value", + "com.google.common.collect;ClassToInstanceMap;true;putInstance;(Class,Object);;MapValue of Argument[-1];ReturnValue;value", + "com.google.common.collect;ClassToInstanceMap;true;putInstance;(Class,Object);;Argument[1];MapValue of Argument[-1];value", + // Builders + "com.google.common.collect;ImmutableCollection<>$Builder;true;build;();;Element of Argument[-1];Element of ReturnValue;value", + "com.google.common.collect;ImmutableCollection<>$Builder;true;add;(Object);;Argument[-1];ReturnValue;value", + "com.google.common.collect;ImmutableCollection<>$Builder;true;add;(Object);;Argument[0];Element of Argument[-1];value", + "com.google.common.collect;ImmutableCollection<>$Builder;true;addAll;;;Argument[-1];ReturnValue;value", + "com.google.common.collect;ImmutableCollection<>$Builder;true;addAll;(Object[]);;ArrayElement of Argument[0];Element of Argument[-1];value", + "com.google.common.collect;ImmutableCollection<>$Builder;true;addAll;(Iterable);;Element of Argument[0];Element of Argument[-1];value", + "com.google.common.collect;ImmutableCollection<>$Builder;true;addAll;(Iterator);;Element of Argument[0];Element of Argument[-1];value", + "com.google.common.collect;ImmutableMultiset<>$Builder;true;addCopies;(Object,int);;Argument[-1];ReturnValue;value", + "com.google.common.collect;ImmutableMultiset<>$Builder;true;addCopies;(Object,int);;Argument[0];Element of Argument[-1];value", + "com.google.common.collect;ImmutableMap<>$Builder;true;build;();;MapKey of Argument[-1];MapKey of ReturnValue;value", + "com.google.common.collect;ImmutableMap<>$Builder;true;build;();;MapValue of Argument[-1];MapValue of ReturnValue;value", + "com.google.common.collect;ImmutableMap<>$Builder;true;orderEntriesByValue;(Comparator);;Argument[-1];ReturnValue;value", + "com.google.common.collect;ImmutableMap<>$Builder;true;put;;;Argument[-1];ReturnValue;value", + "com.google.common.collect;ImmutableMap<>$Builder;true;put;(Entry);;MapKey of Argument[0];MapKey of Argument[-1];value", + "com.google.common.collect;ImmutableMap<>$Builder;true;put;(Entry);;MapValue of Argument[0];MapValue of Argument[-1];value", + "com.google.common.collect;ImmutableMap<>$Builder;true;put;(Object,Object);;Argument[0];MapKey of Argument[-1];value", + "com.google.common.collect;ImmutableMap<>$Builder;true;put;(Object,Object);;Argument[1];MapValue of Argument[-1];value", + "com.google.common.collect;ImmutableMap<>$Builder;true;putAll;;;Argument[-1];ReturnValue;value", + "com.google.common.collect;ImmutableMap<>$Builder;true;putAll;(Iterable);;MapKey of Element of Argument[0];MapKey of Argument[-1];value", + "com.google.common.collect;ImmutableMap<>$Builder;true;putAll;(Iterable);;MapValue of Element of Argument[0];MapValue of Argument[-1];value", + "com.google.common.collect;ImmutableMap<>$Builder;true;putAll;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value", + "com.google.common.collect;ImmutableMap<>$Builder;true;putAll;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value", + "com.google.common.collect;ImmutableMultimap<>$Builder;true;build;();;MapKey of Argument[-1];MapKey of ReturnValue;value", + "com.google.common.collect;ImmutableMultimap<>$Builder;true;build;();;MapValue of Argument[-1];MapValue of ReturnValue;value", + "com.google.common.collect;ImmutableMultimap<>$Builder;true;orderKeysBy;(Comparator);;Argument[-1];ReturnValue;value", + "com.google.common.collect;ImmutableMultimap<>$Builder;true;orderValuesBy;(Comparator);;Argument[-1];ReturnValue;value", + "com.google.common.collect;ImmutableMultimap<>$Builder;true;put;;;Argument[-1];ReturnValue;value", + "com.google.common.collect;ImmutableMultimap<>$Builder;true;put;(Entry);;MapKey of Argument[0];MapKey of Argument[-1];value", + "com.google.common.collect;ImmutableMultimap<>$Builder;true;put;(Entry);;MapValue of Argument[0];MapValue of Argument[-1];value", + "com.google.common.collect;ImmutableMultimap<>$Builder;true;put;(Object,Object);;Argument[0];MapKey of Argument[-1];value", + "com.google.common.collect;ImmutableMultimap<>$Builder;true;put;(Object,Object);;Argument[1];MapValue of Argument[-1];value", + "com.google.common.collect;ImmutableMultimap<>$Builder;true;putAll;;;Argument[-1];ReturnValue;value", + "com.google.common.collect;ImmutableMultimap<>$Builder;true;putAll;(Iterable);;MapKey of Element of Argument[0];MapKey of Argument[-1];value", + "com.google.common.collect;ImmutableMultimap<>$Builder;true;putAll;(Iterable);;MapValue of Element of Argument[0];MapValue of Argument[-1];value", + "com.google.common.collect;ImmutableMultimap<>$Builder;true;putAll;(Multimap);;MapKey of Argument[0];MapKey of Argument[-1];value", + "com.google.common.collect;ImmutableMultimap<>$Builder;true;putAll;(Multimap);;MapValue of Argument[0];MapValue of Argument[-1];value", + "com.google.common.collect;ImmutableMultimap<>$Builder;true;putAll;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value", + "com.google.common.collect;ImmutableMultimap<>$Builder;true;putAll;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value", + "com.google.common.collect;ImmutableMultimap<>$Builder;true;putAll;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value", + "com.google.common.collect;ImmutableMultimap<>$Builder;true;putAll;(Object,Object[]);;ArrayElement of Argument[1];MapValue of Argument[-1];value", + // `of` methods + "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value", + "com.google.common.collect;ImmutableList;true;of;;;ArrayElement of Argument[12];Element of ReturnValue;value", + "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value", + "com.google.common.collect;ImmutableSet;true;of;;;ArrayElement of Argument[6];Element of ReturnValue;value", + "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value", + "com.google.common.collect;ImmutableMultiset;true;of;;;Element of Argument[6];Element of ReturnValue;value", + "com.google.common.collect;ImmutableMap;true;of;;;Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;ImmutableMap;true;of;;;Argument[1];MapValue of ReturnValue;value", + "com.google.common.collect;ImmutableMap;true;of;;;Argument[2];MapKey of ReturnValue;value", + "com.google.common.collect;ImmutableMap;true;of;;;Argument[3];MapValue of ReturnValue;value", + "com.google.common.collect;ImmutableMap;true;of;;;Argument[4];MapKey of ReturnValue;value", + "com.google.common.collect;ImmutableMap;true;of;;;Argument[5];MapValue of ReturnValue;value", + "com.google.common.collect;ImmutableMap;true;of;;;Argument[6];MapKey of ReturnValue;value", + "com.google.common.collect;ImmutableMap;true;of;;;Argument[7];MapValue of ReturnValue;value", + "com.google.common.collect;ImmutableMap;true;of;;;Argument[8];MapKey of ReturnValue;value", + "com.google.common.collect;ImmutableMap;true;of;;;Argument[9];MapValue of ReturnValue;value", + "com.google.common.collect;ImmutableMap;true;of;;;Argument[10];MapKey of ReturnValue;value", + "com.google.common.collect;ImmutableMap;true;of;;;Argument[11];MapValue of ReturnValue;value", + "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[1];MapValue of ReturnValue;value", + "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[2];MapKey of ReturnValue;value", + "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[3];MapValue of ReturnValue;value", + "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[4];MapKey of ReturnValue;value", + "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[5];MapValue of ReturnValue;value", + "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[6];MapKey of ReturnValue;value", + "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[7];MapValue of ReturnValue;value", + "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[8];MapKey of ReturnValue;value", + "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[9];MapValue of ReturnValue;value", + // `copyOf` methods + "com.google.common.collect;ImmutableList;true;copyOf;(Object[]);;ArrayElement of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;ImmutableList;true;copyOf;(Iterable);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;ImmutableList;true;copyOf;(Iterator);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;ImmutableList;true;copyOf;(Collection);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;ImmutableList;true;sortedCopyOf;(Iterable);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;ImmutableList;true;sortedCopyOf;(Comparator,Iterable);;Element of Argument[1];Element of ReturnValue;value", + "com.google.common.collect;ImmutableSet;true;copyOf;(Object[]);;ArrayElement of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;ImmutableSet;true;copyOf;(Iterable);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;ImmutableSet;true;copyOf;(Iterator);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;ImmutableSet;true;copyOf;(Collection);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;ImmutableSortedSet;true;copyOf;(Comparator,Iterable);;Element of Argument[1];Element of ReturnValue;value", + "com.google.common.collect;ImmutableSortedSet;true;copyOf;(Comparator,Iterator);;Element of Argument[1];Element of ReturnValue;value", + "com.google.common.collect;ImmutableSortedSet;true;copyOf;(Comparator,Collection);;Element of Argument[1];Element of ReturnValue;value", + "com.google.common.collect;ImmutableSortedSet;true;copyOfSorted;(SortedSet);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;ImmutableMultiset;true;copyOf;(Object[]);;ArrayElement of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;ImmutableMultiset;true;copyOf;(Iterable);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;ImmutableMultiset;true;copyOf;(Iterator);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;ImmutableSortedMultiset;true;copyOf;(Comparator,Iterable);;Element of Argument[1];Element of ReturnValue;value", + "com.google.common.collect;ImmutableSortedMultiset;true;copyOf;(Comparator,Iterator);;Element of Argument[1];Element of ReturnValue;value", + "com.google.common.collect;ImmutableSortedMultiset;true;copyOf;(Comparator,Collection);;Element of Argument[1];Element of ReturnValue;value", + "com.google.common.collect;ImmutableSortedMultiset;true;copyOfSorted;(SortedMultiSet);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;ImmutableMap;true;copyOf;(Map);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;ImmutableMap;true;copyOf;(Map);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;ImmutableMap;true;copyOf;(Iterable);;MapKey of Element of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;ImmutableMap;true;copyOf;(Iterable);;MapValue of Element of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;ImmutableSortedMap;true;copyOfSorted;(SortedMap);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;ImmutableSortedMap;true;copyOfSorted;(SortedMap);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;ImmutableMultimap;true;copyOf;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;ImmutableMultimap;true;copyOf;(Multimap);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;ImmutableMultimap;true;copyOf;(Iterable);;MapKey of Element of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;ImmutableMultimap;true;copyOf;(Iterable);;MapValue of Element of Argument[0];MapValue of ReturnValue;value" + // Utility classes + ] } - - /** - * Gets the name of the most general superclass of this type - * from among `ImmutableCollection`, `ImmutableMap`, `ImmutableMultimap`, and `ImmutableTable`. - */ - string getKind() { result = kind } -} - -/** A nested `Builder` class of one of the various immutable container classes */ -private class ContainerBuilder extends NestedType { - ContainerBuilder() { - this.hasName("Builder") and - this.getEnclosingType() instanceof ImmutableContainerType - } -} - -private class BuilderBuildMethod extends TaintPreservingCallable { - BuilderBuildMethod() { - this.getDeclaringType().getASourceSupertype*() instanceof ContainerBuilder and - // abstract ImmutableCollection build() - // similar for other builder types - this.hasName("build") - } - - override predicate returnsTaintFrom(int arg) { arg = -1 } -} - -/** A method on a `Builder` class that adds elements to the container being built */ -private class BuilderAddMethod extends TaintPreservingCallable { - int argument; - - BuilderAddMethod() { - this.getDeclaringType().getASourceSupertype*() instanceof ContainerBuilder and - ( - // abstract ImmutableCollection.Builder add(E element) - // ImmutableCollection.Builder add(E... elements) - // ImmutableCollection.Builder addAll(Iterable elements) - // ImmutableCollection.Builder addAll(Iterator elements) - // ImmutableMultiset.Builder addCopies(E element, int occurrences) - // ImmutableMultiset.Builder setCount(E element, int count) - this.hasName(["add", "addAll", "addCopies", "setCount"]) and - argument = 0 - or - // ImmutableMap.Builder put(K key, V value) - // ImmutableMap.Builder put(Map.Entry entry) - // ImmutableMap.Builder putAll(Map map) - // ImmutableMap.Builder putAll(Iterable> entries) - // ImmutableMultimap.Builder put(K key, V value) - // ImmutableMultimap.Builder put(Map.Entry entry) - // ImmutableMultimap.Builder putAll(Iterable> entries) - // ImmutableMultimap.Builder putAll(K key, Iterable values) - // ImmutableMultimap.Builder putAll(K key, V... values) - // ImmutableMultimap.Builder putAll(Multimap multimap) - // ImmutableTable.Builder put(R rowKey, C columnKey, V value) - // ImmutableTable.Builder put(Table.Cell cell) - // ImmutableTable.Builder putAll(Table table) - this.hasName(["put", "putAll"]) and - argument = getNumberOfParameters() - 1 - ) - } - - override predicate returnsTaintFrom(int arg) { arg = [-1, argument] } - - override predicate transfersTaint(int src, int sink) { src = argument and sink = -1 } -} - -/** - * In a chained call `b.add(x).add(y).add(z)`, represents a flow step from the return value of - * this expression to the post update node of `b` (valid because the builder add methods return their qualifier). - * This is sufficient to express flow from `y` and `z` to `b`. - */ -private class ChainedBuilderAddStep extends AdditionalTaintStep { - override predicate step(DataFlow::Node src, DataFlow::Node sink) { - exists(MethodAccess ma | - ma.getMethod() instanceof BuilderAddMethod and - src.asExpr() = ma and - chainedBuilderMethod+(sink.(DataFlow::PostUpdateNode).getPreUpdateNode().asExpr()) = ma - ) - } -} - -private MethodAccess chainedBuilderMethod(Expr e) { - result.getQualifier() = e and - result.getMethod() instanceof BuilderAddMethod } /** @@ -126,39 +185,6 @@ class MultimapType extends RefType { } } -private class MultimapWriteMethod extends TaintPreservingCallable { - MultimapWriteMethod() { - this.getDeclaringType() instanceof MultimapType and - // boolean put(K key, V value) - // boolean putAll(K key, Iterable values) - // boolean putAll(Multimap multimap) - // Collection replaceValues(K key, Iterable values) - this.hasName(["put", "putAll", "replaceValues"]) - } - - override predicate transfersTaint(int src, int sink) { - src = getNumberOfParameters() - 1 and - sink = -1 - } -} - -private class MultimapReadMethod extends TaintPreservingCallable { - MultimapReadMethod() { - this.getDeclaringType() instanceof MultimapType and - // Collection replaceValues(K key, Iterable values) - // Collection removeAll(@CompatibleWith("K") Object key) - // Collection get(K key) - // Collection values() - // Collection> entries() - // Map> asMap() - this.hasName(["replaceValues", "removeAll", "get", "values", "entries", "asMap"]) - } - - override predicate returnsTaintFrom(int arg) { arg = -1 } - // Not implemented: Some of these methods return "views", which when modified will modify the map itself. - // However, taint flow from these views to the map is not implemented. -} - /** * A reference type that extends a parameterization of `com.google.common.collect.Table`. */ @@ -191,130 +217,6 @@ class TableType extends RefType { } } -private class TableWriteMethod extends TaintPreservingCallable { - TableWriteMethod() { - this.getDeclaringType() instanceof TableType and - // V put(R rowKey, C columnKey, V value) - // void putAll(Table table) - this.hasName(["put", "putAll"]) - } - - override predicate transfersTaint(int src, int sink) { - src = getNumberOfParameters() - 1 and - sink = -1 - } -} - -private class TableReadMethod extends TaintPreservingCallable { - TableReadMethod() { - this.getDeclaringType() instanceof TableType and - // V put(R rowKey, C columnKey, V value) - // V remove(@CompatibleWith("R") Object rowKey, @CompatibleWith("C") Object columnKey) - // V get(@CompatibleWith("R") Object rowKey, @CompatibleWith("C") Object columnKey) - // Map row(R rowKey) - // Map column(C columnKey) - // Set> cellSet() - // Collection values() - // Map> rowMap() - // Map> columnMap() - this.hasName([ - "put", "remove", "get", "row", "column", "cellSet", "values", "rowMap", "columnMap" - ]) - } - - override predicate returnsTaintFrom(int arg) { arg = -1 } - // Not implemented: Some of these methods return "views", which when modified will modify the table itself. - // However, taint flow from these views to the table is not implemented. -} - -private class TableCellReadMethod extends TaintPreservingCallable { - TableCellReadMethod() { - exists(NestedType cell | - cell.getEnclosingType() instanceof TableType and - cell.hasName("Cell") and - this.getDeclaringType().getSourceDeclaration().getASourceSupertype*() = cell and - // V getValue() - this.hasName("getValue") - ) - } - - override predicate returnsTaintFrom(int arg) { arg = -1 } -} - -/** - * An `of` static method on the various immutable container types. - */ -private class OfMethod extends TaintPreservingCallable { - string kind; - - OfMethod() { - this.getDeclaringType().(ImmutableContainerType).getKind() = kind and - // static ImmutableList of(E e1, E e2, E e3, E e4, E e5, E e6) - // static ImmutableMap of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4) - // static ImmutableMultimap of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4) - // static ImmutableTable of(R rowKey, C columnKey, V value) - // etc for other types and numbers of parameters - this.hasName("of") and - this.isStatic() - } - - override predicate returnsTaintFrom(int arg) { - arg = [0 .. getNumberOfParameters()] and - (kind.regexpMatch(".*[Mm]ap") implies arg % 2 = 1) and - (kind = "ImmutableTable" implies arg % 3 = 2) - } -} - -private class ComparatorType extends RefType { - ComparatorType() { this.getASourceSupertype*().hasQualifiedName("java.util", "Comparator") } -} - -/** - * A `copyOf`, `sortedCopyOf`, or `copyOfSorted` static method on the various immutable container types. - */ -private class CopyOfMethod extends TaintPreservingCallable { - CopyOfMethod() { - this.getDeclaringType() instanceof ImmutableContainerType and - // static ImmutableList copyOf(E[] elements) - // static ImmutableList copyOf(Iterable elements) - // static ImmutableList copyOf(Collection elements) - // static ImmutableList copyOf(Iterator elements) - // static > ImmutableList sortedCopyOf(Iterable elements) - // static ImmutableList sortedCopyOf(Comparator comparator, Iterable elements) - // static ImmutableMap copyOf(Map map) - // static ImmutableMap copyOf(Iterable> entries) - // static ImmutableMultimap copyOf(Multimap multimap) - // static ImmutableMultimap copyOf(Iterable> entries) - // static ImmutableTable copyOf(Table table) - // static ImmutableSortedMap copyOf(Map map) - // static ImmutableSortedMap copyOf(Map map, Comparator comparator) - // static ImmutableSortedMap copyOfSorted(SortedMap map) - // static ImmutableSortedSet copyOf(Iterator elements) - // static ImmutableSortedSet copyOf(Comparator comparator, Iterator elements) - // static ImmutableSortedSet copyOfSorted(SortedSet sortedSet) - // etc - this.hasName(["copyOf", "sortedCopyOf", "copyOfSorted"]) and - this.isStatic() - } - - override predicate returnsTaintFrom(int arg) { - arg = [0 .. getNumberOfParameters()] and - not getParameterType(arg) instanceof ComparatorType - } -} - -private class CollectionAsListMethod extends TaintPreservingCallable { - CollectionAsListMethod() { - this.getDeclaringType() - .getASourceSupertype*() - .hasQualifiedName(guavaCollectPackage(), "ImmutableCollection") and - // public ImmutableList asList() - this.hasName("asList") - } - - override predicate returnsTaintFrom(int arg) { arg = -1 } -} - /** * A taint-preserving static method of `com.google.common.collect.Sets`. */ diff --git a/java/ql/test/library-tests/frameworks/guava/TestCollect.java b/java/ql/test/library-tests/frameworks/guava/TestCollect.java index 0af3a694372..2cad0f59a21 100644 --- a/java/ql/test/library-tests/frameworks/guava/TestCollect.java +++ b/java/ql/test/library-tests/frameworks/guava/TestCollect.java @@ -14,20 +14,21 @@ class TestCollect { String x = taint(); ImmutableSet xs = ImmutableSet.of(x, "y", "z"); - sink(xs.asList()); // $numTaintFlow=1 + sink(xs.asList().toArray()[0]); // $numValueFlow=1 ImmutableSet ys = ImmutableSet.of("a", "b", "c"); - sink(Sets.filter(Sets.union(xs, ys), y -> true)); // $numTaintFlow=1 + sink(Sets.filter(Sets.union(xs, ys), y -> true).toArray()[0]); // $numValueFlow=1 - sink(Sets.newHashSet("a", "b", "c", "d", x)); // $numTaintFlow=1 + sink(Sets.newHashSet("a", "b", "c", "d", x)); // $numValueFlow=1 } void test2() { - sink(ImmutableList.of(taint(), taint(), taint(), taint())); // $numTaintFlow=4 - sink(ImmutableMap.of(taint(), taint(), taint(), taint())); // $numTaintFlow=2 - sink(ImmutableMultimap.of(taint(), taint(), taint(), taint())); // $numTaintFlow=2 - sink(ImmutableTable.of(taint(),taint(), taint())); // $numTaintFlow=1 + sink(ImmutableList.of(taint(), taint(), taint(), taint(),taint(), taint(), taint(), taint(),taint(), taint(), taint(), taint(),taint(), taint(), taint(), taint()).toArray()[0]); // $numValueFlow=16 + sink(ImmutableSet.of(taint(), taint(), taint(), taint(),taint(), taint(), taint(), taint(),taint(), taint(), taint(), taint(),taint(), taint(), taint(), taint()).toArray()[0]); // $numValueFlow=16 + sink(ImmutableMap.of(taint(), taint(), taint(), taint())); // $numValueFlow=2 + sink(ImmutableMultimap.of(taint(), taint(), taint(), taint())); // $numValueFlow=2 + sink(ImmutableTable.of(taint(),taint(), taint())); // $numValueFlow=1 } void test3() { @@ -38,20 +39,20 @@ class TestCollect { b.add("a"); sink(b); b.add(x); - sink(b.build()); // $numTaintFlow=1 + sink(b.build().toArray()[0]); // $numValueFlow=1 b = ImmutableList.builder(); b.add("a").add(x); - sink(b.build()); // $numTaintFlow=1 + sink(b.build().toArray()[0]); // $numValueFlow=1 - sink(ImmutableList.builder().add("a").add(x).build()); // $numTaintFlow=1 + sink(ImmutableList.builder().add("a").add(x).build().toArray()[0]); // $numValueFlow=1 ImmutableMap.Builder b2 = ImmutableMap.builder(); b2.put(x,"v"); sink(b2); b2.put("k",x); - sink(b2.build()); // $numTaintFlow=1 + sink(b2.build()); // $numValueFlow=1 } void test4(Table t1, Table t2, Table t3) { @@ -61,60 +62,60 @@ class TestCollect { t1.put("r", x, "v"); sink(t1); t1.put("r", "c", x); - sink(t1); // $numTaintFlow=1 - sink(t1.row("r")); // $numTaintFlow=1 + sink(t1); // $numValueFlow=1 + sink(t1.row("r")); // $numValueFlow=1 t2.putAll(t1); for (Table.Cell c : t2.cellSet()) { - sink(c.getValue()); // $numTaintFlow=1 + sink(c.getValue()); // $numValueFlow=1 } - sink(t1.remove("r", "c")); // $numTaintFlow=1 + sink(t1.remove("r", "c")); // $numValueFlow=1 t3.row("r").put("c", x); - sink(t3); // $ MISSING:numTaintFlow=1 + sink(t3); // $ MISSING:numValueFlow=1 } void test4(Multimap m1, Multimap m2, Multimap m3, Multimap m4, Multimap m5){ String x = taint(); m1.put("k", x); - sink(m1); // $numTaintFlow=1 - sink(m1.get("k")); // $numTaintFlow=1 + sink(m1); // $numValueFlow=1 + sink(m1.get("k")); // $numValueFlow=1 m2.putAll("k", ImmutableList.of("a", x, "b")); - sink(m2); // $numTaintFlow=1 + sink(m2); // $numValueFlow=1 m3.putAll(m1); - sink(m3); // $numTaintFlow=1 + sink(m3); // $numValueFlow=1 m4.replaceValues("k", m1.replaceValues("k", ImmutableList.of("a"))); for (Map.Entry e : m4.entries()) { - sink(e.getValue()); // $numTaintFlow=1 + sink(e.getValue()); // $numValueFlow=1 } m5.asMap().get("k").add(x); - sink(m5); // $ MISSING:numTaintFlow=1 + sink(m5); // $ MISSING:numValueFlow=1 } void test5(Comparator comp, SortedSet sorS, SortedMap sorM) { ImmutableSortedSet s = ImmutableSortedSet.of(taint()); - sink(s); // $numTaintFlow=1 - sink(ImmutableSortedSet.copyOf(s)); // $numTaintFlow=1 - sink(ImmutableSortedSet.copyOf(comp, s)); // $numTaintFlow=1 + sink(s.toArray()[0]); // $numValueFlow=1 + sink(ImmutableSortedSet.copyOf(s).toArray()[0]); // $numValueFlow=1 + sink(ImmutableSortedSet.copyOf(comp, s).toArray()[0]); // $numValueFlow=1 sorS.add(taint()); sink(ImmutableSortedSet.copyOfSorted(sorS)); // $ MISSING: numTaintFlow=1 - sink(ImmutableList.sortedCopyOf(s)); // $numTaintFlow=1 - sink(ImmutableList.sortedCopyOf(comp, s)); // $numTaintFlow=1 + sink(ImmutableList.sortedCopyOf(s).toArray()[0]); // $numValueFlow=1 + sink(ImmutableList.sortedCopyOf(comp, s).toArray()[0]); // $numValueFlow=1 ImmutableSortedMap m = ImmutableSortedMap.of("k", taint()); - sink(m); // $numTaintFlow=1 - sink(ImmutableSortedMap.copyOf(m)); // $numTaintFlow=1 - sink(ImmutableSortedMap.copyOf(m, comp)); // $numTaintFlow=1 + sink(m); // $numValueFlow=1 + sink(ImmutableSortedMap.copyOf(m)); // $numValueFlow=1 + sink(ImmutableSortedMap.copyOf(m, comp)); // $numValueFlow=1 sorM.put("k", taint()); sink(ImmutableSortedMap.copyOfSorted(sorM)); // $ MISSING: numTaintFlow=1 From 73aba09eee6e5aff432eb2c4cc583d7b58c78b59 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Mon, 21 Jun 2021 11:19:38 +0100 Subject: [PATCH 465/741] Add create methods --- .../java/frameworks/guava/Collections.qll | 25 ++++++++++++++++++- .../frameworks/guava/TestCollect.java | 6 +++-- 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll b/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll index fe33c1992c0..ff8c5472a3d 100644 --- a/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll +++ b/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll @@ -123,6 +123,8 @@ private class GuavaCollectCsv extends SummaryModelCsv { "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[7];MapValue of ReturnValue;value", "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[8];MapKey of ReturnValue;value", "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[9];MapValue of ReturnValue;value", + "com.google.common.collect;ImmutableClassToInstanceMap;true;of;(Class,Object);;Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;ImmutableClassToInstanceMap;true;of;(Class,Object);;Argument[1];MapValue of ReturnValue;value", // `copyOf` methods "com.google.common.collect;ImmutableList;true;copyOf;(Object[]);;ArrayElement of Argument[0];Element of ReturnValue;value", "com.google.common.collect;ImmutableList;true;copyOf;(Iterable);;Element of Argument[0];Element of ReturnValue;value", @@ -154,7 +156,28 @@ private class GuavaCollectCsv extends SummaryModelCsv { "com.google.common.collect;ImmutableMultimap;true;copyOf;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value", "com.google.common.collect;ImmutableMultimap;true;copyOf;(Multimap);;MapValue of Argument[0];MapValue of ReturnValue;value", "com.google.common.collect;ImmutableMultimap;true;copyOf;(Iterable);;MapKey of Element of Argument[0];MapKey of ReturnValue;value", - "com.google.common.collect;ImmutableMultimap;true;copyOf;(Iterable);;MapValue of Element of Argument[0];MapValue of ReturnValue;value" + "com.google.common.collect;ImmutableMultimap;true;copyOf;(Iterable);;MapValue of Element of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;ImmutableClassToInstanceMap;true;copyOf;(Map);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;ImmutableClassToInstanceMap;true;copyOf;(Map);;MapValue of Argument[0];MapValue of ReturnValue;value", + // `create` methods + "com.google.common.collect;HashMultiset;true;create;(Iterable);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;LinkdHashMultiset;true;create;(Iterable);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;TreeMultiset;true;create;(Iterable);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;ConcurrentHashMultiset;true;create;(Iterable);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;HashMultimap;true;create;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;HashMultimap;true;create;(Multimap);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;LinkedHashMultimap;true;create;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;LinkedHashMultimap;true;create;(Multimap);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;LinkedListMultimap;true;create;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;LinkedListMultimap;true;create;(Multimap);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;ArrayListMultimap;true;create;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;ArrayListMultimap;true;create;(Multimap);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;TreeMultimap;true;create;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;TreeMultimap;true;create;(Multimap);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;HashBiMap;true;create;(Map);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;HashBiMap;true;create;(Map);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;MutableClassToInstanceMap;true;create;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;MutableClassToInstanceMap;true;create;(Multimap);;MapValue of Argument[0];MapValue of ReturnValue;value", // Utility classes ] } diff --git a/java/ql/test/library-tests/frameworks/guava/TestCollect.java b/java/ql/test/library-tests/frameworks/guava/TestCollect.java index 2cad0f59a21..ad83876d2d0 100644 --- a/java/ql/test/library-tests/frameworks/guava/TestCollect.java +++ b/java/ql/test/library-tests/frameworks/guava/TestCollect.java @@ -26,8 +26,10 @@ class TestCollect { void test2() { sink(ImmutableList.of(taint(), taint(), taint(), taint(),taint(), taint(), taint(), taint(),taint(), taint(), taint(), taint(),taint(), taint(), taint(), taint()).toArray()[0]); // $numValueFlow=16 sink(ImmutableSet.of(taint(), taint(), taint(), taint(),taint(), taint(), taint(), taint(),taint(), taint(), taint(), taint(),taint(), taint(), taint(), taint()).toArray()[0]); // $numValueFlow=16 - sink(ImmutableMap.of(taint(), taint(), taint(), taint())); // $numValueFlow=2 - sink(ImmutableMultimap.of(taint(), taint(), taint(), taint())); // $numValueFlow=2 + sink(ImmutableMap.of(taint(), taint(), taint(), taint()).keys().toArray()[0]); // $numValueFlow=2 + sink(ImmutableMap.of(taint(), taint(), taint(), taint()).values().toArray()[0]); // $numValueFlow=2 + sink(ImmutableMultimap.of(taint(), taint(), taint(), taint()).keys().toArray()[0]); // $numValueFlow=2 + sink(ImmutableMultimap.of(taint(), taint(), taint(), taint()).values().toArray()[0]); // $numValueFlow=2 sink(ImmutableTable.of(taint(),taint(), taint())); // $numValueFlow=1 } From 10f0f3038caa0e1a6ede91243c41615759ab05d6 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Tue, 22 Jun 2021 11:50:49 +0100 Subject: [PATCH 466/741] Add tables, improve tests, make fixes --- .../java/frameworks/guava/Collections.qll | 79 ++++++++++++- .../frameworks/guava/TestCollect.java | 104 ++++++++++++------ 2 files changed, 144 insertions(+), 39 deletions(-) diff --git a/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll b/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll index ff8c5472a3d..abd9d38af97 100644 --- a/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll +++ b/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll @@ -28,7 +28,7 @@ private class GuavaCollectCsv extends SummaryModelCsv { "com.google.common.collect;Multimap;true;get;(Object);;MapValue of Argument[-1];Element of ReturnValue;value", "com.google.common.collect;Multimap;true;keys;();;MapKey of Argument[-1];Element of ReturnValue;value", "com.google.common.collect;Multimap;true;keySet;();;MapKey of Argument[-1];Element of ReturnValue;value", - "com.google.common.collect;Multimap;true;values();;MapValue of Argument[-1];Element of ReturnValue;value", + "com.google.common.collect;Multimap;true;values;();;MapValue of Argument[-1];Element of ReturnValue;value", "com.google.common.collect;Multimap;true;put;(Object,Object);;Argument[0];MapKey of Argument[-1];value", "com.google.common.collect;Multimap;true;put;(Object,Object);;Argument[1];MapValue of Argument[-1];value", "com.google.common.collect;Multimap;true;putAll;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value", @@ -36,12 +36,37 @@ private class GuavaCollectCsv extends SummaryModelCsv { "com.google.common.collect;Multimap;true;putAll;(Multimap);;MapKey of Argument[0];MapKey of Argument[-1];value", "com.google.common.collect;Multimap;true;putAll;(Multimap);;MapValue of Argument[0];MapValue of Argument[-1];value", "com.google.common.collect;Multimap;true;removeAll;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value", - "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;MapValue of Argument[-1];MapValue of ReturnValue;value", - "com.google.common.collect;Multimap;true;replaceValues(Object,Iterable);;Argument[0];MapKey of Argument[-1];value", - "com.google.common.collect;Multimap;true;replaceValues(Object,Iterable);;Element of Argument[0];MapValue of Argument[-1];value", + "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;MapValue of Argument[-1];Element of ReturnValue;value", + "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value", + "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value", "com.google.common.collect;ImmutableMultimap;true;inverse;();;MapKey of Argument[-1];MapValue of ReturnValue;value", "com.google.common.collect;ImmutableMultimap;true;inverse;();;MapValue of Argument[-1];MapKey of ReturnValue;value", - // Tables (TODO) + // Tables + "com.google.common.collect;Table<>$Cell;true;getRowKey;();;SyntheticField[com.google.common.collect.Table.rowKey] of MapKey of Argument[-1];ReturnValue;value", + "com.google.common.collect;Table<>$Cell;true;getColumnKey;();;SyntheticField[com.google.common.collect.Table.columnKey] of MapKey of Argument[-1];ReturnValue;value", + "com.google.common.collect;Table<>$Cell;true;getValue;();;MapValue of Argument[-1];ReturnValue;value", + "com.google.common.collect;Table;true;cellSet;();;MapKey of Argument[-1];MapKey of Element of ReturnValue;value", + "com.google.common.collect;Table;true;cellSet;();;MapValue of Argument[-1];MapValue of Element of ReturnValue;value", + "com.google.common.collect;Table;true;row;(Object);;SyntheticField[com.google.common.collect.Table.columnKey] of MapKey of Argument[-1];MapKey of ReturnValue;value", + "com.google.common.collect;Table;true;row;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value", + "com.google.common.collect;Table;true;rowKeySet;();;SyntheticField[com.google.common.collect.Table.rowKey] of MapKey of Argument[-1];Element of ReturnValue;value", + "com.google.common.collect;Table;true;rowMap;();;SyntheticField[com.google.common.collect.Table.rowKey] of MapKey of Argument[-1];MapKey of ReturnValue;value", + "com.google.common.collect;Table;true;rowMap;();;SyntheticField[com.google.common.collect.Table.columnKey] of MapKey of Argument[-1];MapKey of MapValue of ReturnValue;value", + "com.google.common.collect;Table;true;rowMap;();;MapValue of Argument[-1];MapValue of MapValue of ReturnValue;value", + "com.google.common.collect;Table;true;column;(Object);;SyntheticField[com.google.common.collect.Table.rowKey] of MapKey of Argument[-1];MapKey of ReturnValue;value", + "com.google.common.collect;Table;true;column;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value", + "com.google.common.collect;Table;true;columnKeySet;();;SyntheticField[com.google.common.collect.Table.columnKey] of MapKey of Argument[-1];Element of ReturnValue;value", + "com.google.common.collect;Table;true;columnMap;();;SyntheticField[com.google.common.collect.Table.columnKey] of MapKey of Argument[-1];MapKey of ReturnValue;value", + "com.google.common.collect;Table;true;columnMap;();;SyntheticField[com.google.common.collect.Table.rowKey] of MapKey of Argument[-1];MapKey of MapValue of ReturnValue;value", + "com.google.common.collect;Table;true;columnMap;();;MapValue of Argument[-1];MapValue of MapValue of ReturnValue;value", + "com.google.common.collect;Table;true;values;();;MapValue of Argument[-1];Element of ReturnValue;value", + "com.google.common.collect;Table;true;get;(Object,Object);;MapValue of Argument[-1];ReturnValue;value", + "com.google.common.collect;Table;true;remove;(Object,Object);;MapValue of Argument[-1];ReturnValue;value", + "com.google.common.collect;Table;true;put;(Object,Object,Object);;Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of MapKey of Argument[-1];value", + "com.google.common.collect;Table;true;put;(Object,Object,Object);;Argument[1];SyntheticField[com.google.common.collect.Table.columnKey] of MapKey of Argument[-1];value", + "com.google.common.collect;Table;true;put;(Object,Object,Object);;Argument[2];MapValue of Argument[-1];value", + "com.google.common.collect;Table;true;putAll;(Table);;MapKey of Argument[0];MapKey of Argument[-1];value", + "com.google.common.collect;Table;true;putAll;(Table);;MapValue of Argument[0];MapValue of Argument[-1];value", // Misc collections and utilities "com.google.common.collect;ImmutableCollection;true;asList;();;Element of Argument[-1];Element of ReturnValue;value", "com.google.common.collect;ImmutableList;true;reverse;();;Element of Argument[-1];Element of ReturnValue;value", @@ -94,6 +119,21 @@ private class GuavaCollectCsv extends SummaryModelCsv { "com.google.common.collect;ImmutableMultimap<>$Builder;true;putAll;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value", "com.google.common.collect;ImmutableMultimap<>$Builder;true;putAll;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value", "com.google.common.collect;ImmutableMultimap<>$Builder;true;putAll;(Object,Object[]);;ArrayElement of Argument[1];MapValue of Argument[-1];value", + "com.google.common.collect;ImmutableTable<>$Builder;true;build;();;SyntheticField[com.google.common.collect.Table.rowKey] of MapKey of Argument[-1];SyntheticField[com.google.common.collect.Table.rowKey] of MapKey of ReturnValue;value", + "com.google.common.collect;ImmutableTable<>$Builder;true;build;();;SyntheticField[com.google.common.collect.Table.columnKey] of MapKey of Argument[-1];SyntheticField[com.google.common.collect.Table.columnKey] of MapKey of ReturnValue;value", + "com.google.common.collect;ImmutableTable<>$Builder;true;build;();;MapValue of Argument[-1];MapValue of ReturnValue;value", + "com.google.common.collect;ImmutableTable<>$Builder;true;orderRowsBy;(Comparator);;Argument[-1];ReturnValue;value", + "com.google.common.collect;ImmutableTable<>$Builder;true;orderColumnsBy;(Comparator);;Argument[-1];ReturnValue;value", + "com.google.common.collect;ImmutableTable<>$Builder;true;put;(Object,Object,Object);;Argument[-1];ReturnValue;value", + "com.google.common.collect;ImmutableTable<>$Builder;true;put;(Cell);;Argument[-1];ReturnValue;value", + "com.google.common.collect;ImmutableTable<>$Builder;true;putAll;(Table);;Argument[-1];ReturnValue;value", + "com.google.common.collect;ImmutableTable<>$Builder;true;put;(Object,Object,Object);;Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of MapKey of Argument[-1];value", + "com.google.common.collect;ImmutableTable<>$Builder;true;put;(Object,Object,Object);;Argument[1];SyntheticField[com.google.common.collect.Table.columnKey] of MapKey of Argument[-1];value", + "com.google.common.collect;ImmutableTable<>$Builder;true;put;(Object,Object,Object);;Argument[2];MapValue of Argument[-1];value", + "com.google.common.collect;ImmutableTable<>$Builder;true;put;(Cell);;MapKey of Argument[0];MapKey of Argument[-1];value", + "com.google.common.collect;ImmutableTable<>$Builder;true;put;(Cell);;MapValue of Argument[0];MapValue of Argument[-1];value", + "com.google.common.collect;ImmutableTable<>$Builder;true;putAll;(Table);;MapKey of Argument[0];MapKey of Argument[-1];value", + "com.google.common.collect;ImmutableTable<>$Builder;true;putAll;(Table);;MapValue of Argument[0];MapValue of Argument[-1];value", // `of` methods "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value", "com.google.common.collect;ImmutableList;true;of;;;ArrayElement of Argument[12];Element of ReturnValue;value", @@ -125,6 +165,9 @@ private class GuavaCollectCsv extends SummaryModelCsv { "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[9];MapValue of ReturnValue;value", "com.google.common.collect;ImmutableClassToInstanceMap;true;of;(Class,Object);;Argument[0];MapKey of ReturnValue;value", "com.google.common.collect;ImmutableClassToInstanceMap;true;of;(Class,Object);;Argument[1];MapValue of ReturnValue;value", + "com.google.common.collect;ImmutableTable;true;of;(Object,Object,Object);;Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of MapKey of ReturnValue;value", + "com.google.common.collect;ImmutableTable;true;of;(Object,Object,Object);;Argument[1];SyntheticField[com.google.common.collect.Table.columnKey] of MapKey of ReturnValue;value", + "com.google.common.collect;ImmutableTable;true;of;(Object,Object,Object);;Argument[2];MapValue of ReturnValue;value", // `copyOf` methods "com.google.common.collect;ImmutableList;true;copyOf;(Object[]);;ArrayElement of Argument[0];Element of ReturnValue;value", "com.google.common.collect;ImmutableList;true;copyOf;(Iterable);;Element of Argument[0];Element of ReturnValue;value", @@ -153,12 +196,16 @@ private class GuavaCollectCsv extends SummaryModelCsv { "com.google.common.collect;ImmutableMap;true;copyOf;(Iterable);;MapValue of Element of Argument[0];MapValue of ReturnValue;value", "com.google.common.collect;ImmutableSortedMap;true;copyOfSorted;(SortedMap);;MapKey of Argument[0];MapKey of ReturnValue;value", "com.google.common.collect;ImmutableSortedMap;true;copyOfSorted;(SortedMap);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;ImmutableSortedMap;true;copyOf;(Map,Comparator);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;ImmutableSortedMap;true;copyOf;(Map,Comparator);;MapValue of Argument[0];MapValue of ReturnValue;value", "com.google.common.collect;ImmutableMultimap;true;copyOf;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value", "com.google.common.collect;ImmutableMultimap;true;copyOf;(Multimap);;MapValue of Argument[0];MapValue of ReturnValue;value", "com.google.common.collect;ImmutableMultimap;true;copyOf;(Iterable);;MapKey of Element of Argument[0];MapKey of ReturnValue;value", "com.google.common.collect;ImmutableMultimap;true;copyOf;(Iterable);;MapValue of Element of Argument[0];MapValue of ReturnValue;value", "com.google.common.collect;ImmutableClassToInstanceMap;true;copyOf;(Map);;MapKey of Argument[0];MapKey of ReturnValue;value", "com.google.common.collect;ImmutableClassToInstanceMap;true;copyOf;(Map);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;ImmutableTable;true;copyOf;(Table);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;ImmutableTable;true;copyOf;(Table);;MapValue of Argument[0];MapValue of ReturnValue;value", // `create` methods "com.google.common.collect;HashMultiset;true;create;(Iterable);;Element of Argument[0];Element of ReturnValue;value", "com.google.common.collect;LinkdHashMultiset;true;create;(Iterable);;Element of Argument[0];Element of ReturnValue;value", @@ -178,6 +225,12 @@ private class GuavaCollectCsv extends SummaryModelCsv { "com.google.common.collect;HashBiMap;true;create;(Map);;MapValue of Argument[0];MapValue of ReturnValue;value", "com.google.common.collect;MutableClassToInstanceMap;true;create;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value", "com.google.common.collect;MutableClassToInstanceMap;true;create;(Multimap);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;HashBasedTable;true;create;(Table);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;HashBasedTable;true;create;(Table);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;TreeBasedTable;true;create;(Table);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;TreeBasedTable;true;create;(Table);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;ArrayTable;true;create;(Iterable,Iterable);;Element of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of MapKey of ReturnValue;value", + "com.google.common.collect;ArrayTable;true;create;(Iterable,Iterable);;Element of Argument[1];SyntheticField[com.google.common.collect.Table.columnKey] of MapKey of ReturnValue;value" // Utility classes ] } @@ -240,6 +293,22 @@ class TableType extends RefType { } } +private class TableRowField extends SyntheticField { + override predicate fieldSpec(RefType owningType, string fieldName, Type fieldType) { + owningType.hasQualifiedName(guavaCollectPackage(), "Table") and + fieldName = "rowKey" and + fieldType instanceof TypeObject + } +} + +private class TableColumnField extends SyntheticField { + override predicate fieldSpec(RefType owningType, string fieldName, Type fieldType) { + owningType.hasQualifiedName(guavaCollectPackage(), "Table") and + fieldName = "columnKey" and + fieldType instanceof TypeObject + } +} + /** * A taint-preserving static method of `com.google.common.collect.Sets`. */ diff --git a/java/ql/test/library-tests/frameworks/guava/TestCollect.java b/java/ql/test/library-tests/frameworks/guava/TestCollect.java index ad83876d2d0..76acb3dd418 100644 --- a/java/ql/test/library-tests/frameworks/guava/TestCollect.java +++ b/java/ql/test/library-tests/frameworks/guava/TestCollect.java @@ -1,5 +1,6 @@ package com.google.common.collect; +import java.util.Collection; import java.util.Map; import java.util.SortedSet; import java.util.SortedMap; @@ -10,27 +11,61 @@ class TestCollect { void sink(Object o) {} + T element(Collection c) { + return c.iterator().next(); + } + + K mapKey(Map m) { + return element(m.keySet()); + } + + V mapValue(Map m) { + return element(m.values()); + } + + K multimapKey(Multimap m) { + return element(m.keySet()); + } + + V multimapValue(Multimap m) { + return element(m.values()); + } + + R tableRow(Table t) { + return element(t.rowKeySet()); + } + + C tableColumn(Table t) { + return element(t.columnKeySet()); + } + + V tableValue(Table t) { + return element(t.values()); + } + void test1() { String x = taint(); ImmutableSet xs = ImmutableSet.of(x, "y", "z"); - sink(xs.asList().toArray()[0]); // $numValueFlow=1 + sink(element(xs.asList())); // $numValueFlow=1 ImmutableSet ys = ImmutableSet.of("a", "b", "c"); - sink(Sets.filter(Sets.union(xs, ys), y -> true).toArray()[0]); // $numValueFlow=1 + sink(element(Sets.filter(Sets.union(xs, ys), y -> true))); // $numTaintFlow=1 - sink(Sets.newHashSet("a", "b", "c", "d", x)); // $numValueFlow=1 + sink(element(Sets.newHashSet("a", "b", "c", "d", x))); // $numTaintFlow=1 } void test2() { - sink(ImmutableList.of(taint(), taint(), taint(), taint(),taint(), taint(), taint(), taint(),taint(), taint(), taint(), taint(),taint(), taint(), taint(), taint()).toArray()[0]); // $numValueFlow=16 - sink(ImmutableSet.of(taint(), taint(), taint(), taint(),taint(), taint(), taint(), taint(),taint(), taint(), taint(), taint(),taint(), taint(), taint(), taint()).toArray()[0]); // $numValueFlow=16 - sink(ImmutableMap.of(taint(), taint(), taint(), taint()).keys().toArray()[0]); // $numValueFlow=2 - sink(ImmutableMap.of(taint(), taint(), taint(), taint()).values().toArray()[0]); // $numValueFlow=2 - sink(ImmutableMultimap.of(taint(), taint(), taint(), taint()).keys().toArray()[0]); // $numValueFlow=2 - sink(ImmutableMultimap.of(taint(), taint(), taint(), taint()).values().toArray()[0]); // $numValueFlow=2 - sink(ImmutableTable.of(taint(),taint(), taint())); // $numValueFlow=1 + sink(element(ImmutableList.of(taint(), taint(), taint(), taint(),taint(), taint(), taint(), taint(),taint(), taint(), taint(), taint(),taint(), taint(), taint(), taint()))); // $numValueFlow=16 + sink(element(ImmutableSet.of(taint(), taint(), taint(), taint(),taint(), taint(), taint(), taint(),taint(), taint(), taint(), taint(),taint(), taint(), taint(), taint()))); // $numValueFlow=16 + sink(mapKey(ImmutableMap.of(taint(), taint(), taint(), taint()))); // $numValueFlow=2 SPURIOUS:numTaintFlow=4 + sink(mapValue(ImmutableMap.of(taint(), taint(), taint(), taint()))); // $numValueFlow=2 + sink(multimapKey(ImmutableMultimap.of(taint(), taint(), taint(), taint()))); // $numValueFlow=2 SPURIOUS:numTaintFlow=4 + sink(multimapValue(ImmutableMultimap.of(taint(), taint(), taint(), taint()))); // $numValueFlow=2 + sink(tableRow(ImmutableTable.of(taint(), taint(), taint()))); // $numValueFlow=1 + sink(tableColumn(ImmutableTable.of(taint(), taint(), taint()))); // $numValueFlow=1 + sink(tableValue(ImmutableTable.of(taint(), taint(), taint()))); // $numValueFlow=1 } void test3() { @@ -41,31 +76,32 @@ class TestCollect { b.add("a"); sink(b); b.add(x); - sink(b.build().toArray()[0]); // $numValueFlow=1 + sink(element(b.build())); // $numValueFlow=1 b = ImmutableList.builder(); b.add("a").add(x); - sink(b.build().toArray()[0]); // $numValueFlow=1 + sink(element(b.build())); // $numValueFlow=1 sink(ImmutableList.builder().add("a").add(x).build().toArray()[0]); // $numValueFlow=1 ImmutableMap.Builder b2 = ImmutableMap.builder(); b2.put(x,"v"); - sink(b2); + sink(mapKey(b2.build())); // $numValueFlow=1 b2.put("k",x); - sink(b2.build()); // $numValueFlow=1 + sink(mapValue(b2.build())); // $numValueFlow=1 } void test4(Table t1, Table t2, Table t3) { String x = taint(); t1.put(x, "c", "v"); - sink(t1); + sink(tableRow(t1)); // $numValueFlow=1 t1.put("r", x, "v"); - sink(t1); + sink(tableColumn(t1)); // $numValueFlow=1 t1.put("r", "c", x); - sink(t1); // $numValueFlow=1 - sink(t1.row("r")); // $numValueFlow=1 + sink(tableValue(t1)); // $numValueFlow=1 + sink(mapKey(t1.row("r"))); // $numValueFlow=1 + sink(mapValue(t1.row("r"))); // $numValueFlow=1 t2.putAll(t1); for (Table.Cell c : t2.cellSet()) { @@ -75,21 +111,21 @@ class TestCollect { sink(t1.remove("r", "c")); // $numValueFlow=1 t3.row("r").put("c", x); - sink(t3); // $ MISSING:numValueFlow=1 + sink(tableValue(t3)); // $ MISSING:numValueFlow=1 // depends on aliasing } void test4(Multimap m1, Multimap m2, Multimap m3, Multimap m4, Multimap m5){ String x = taint(); m1.put("k", x); - sink(m1); // $numValueFlow=1 - sink(m1.get("k")); // $numValueFlow=1 + sink(multimapValue(m1)); // $numValueFlow=1 + sink(element(m1.get("k"))); // $numValueFlow=1 m2.putAll("k", ImmutableList.of("a", x, "b")); - sink(m2); // $numValueFlow=1 + sink(multimapValue(m2)); // $numValueFlow=1 m3.putAll(m1); - sink(m3); // $numValueFlow=1 + sink(multimapValue(m3)); // $numValueFlow=1 m4.replaceValues("k", m1.replaceValues("k", ImmutableList.of("a"))); for (Map.Entry e : m4.entries()) { @@ -97,29 +133,29 @@ class TestCollect { } m5.asMap().get("k").add(x); - sink(m5); // $ MISSING:numValueFlow=1 + sink(multimapValue(m5)); // $ MISSING:numValueFlow=1 // depends on aliasing } void test5(Comparator comp, SortedSet sorS, SortedMap sorM) { ImmutableSortedSet s = ImmutableSortedSet.of(taint()); - sink(s.toArray()[0]); // $numValueFlow=1 - sink(ImmutableSortedSet.copyOf(s).toArray()[0]); // $numValueFlow=1 - sink(ImmutableSortedSet.copyOf(comp, s).toArray()[0]); // $numValueFlow=1 + sink(element(s)); // $numValueFlow=1 + sink(element(ImmutableSortedSet.copyOf(s))); // $numValueFlow=1 + sink(element(ImmutableSortedSet.copyOf(comp, s))); // $numValueFlow=1 sorS.add(taint()); - sink(ImmutableSortedSet.copyOfSorted(sorS)); // $ MISSING: numTaintFlow=1 + sink(element(ImmutableSortedSet.copyOfSorted(sorS))); // $numValueFlow=1 - sink(ImmutableList.sortedCopyOf(s).toArray()[0]); // $numValueFlow=1 - sink(ImmutableList.sortedCopyOf(comp, s).toArray()[0]); // $numValueFlow=1 + sink(element(ImmutableList.sortedCopyOf(s))); // $numValueFlow=1 + sink(element(ImmutableList.sortedCopyOf(comp, s))); // $numValueFlow=1 ImmutableSortedMap m = ImmutableSortedMap.of("k", taint()); - sink(m); // $numValueFlow=1 - sink(ImmutableSortedMap.copyOf(m)); // $numValueFlow=1 - sink(ImmutableSortedMap.copyOf(m, comp)); // $numValueFlow=1 + sink(mapValue(m)); // $numValueFlow=1 + sink(mapValue(ImmutableSortedMap.copyOf(m))); // $numValueFlow=1 + sink(mapValue(ImmutableSortedMap.copyOf(m, comp))); // $numValueFlow=1 sorM.put("k", taint()); - sink(ImmutableSortedMap.copyOfSorted(sorM)); // $ MISSING: numTaintFlow=1 + sink(mapValue(ImmutableSortedMap.copyOfSorted(sorM))); // $numValueFlow=1 } } From 5fee6d2d19f1ea697ed00260a4ee67e1127ebdac Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Tue, 22 Jun 2021 16:53:17 +0100 Subject: [PATCH 467/741] Convert Sets utilities --- .../java/frameworks/guava/Collections.qll | 72 +++++++------------ .../frameworks/guava/TestCollect.java | 4 +- 2 files changed, 28 insertions(+), 48 deletions(-) diff --git a/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll b/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll index abd9d38af97..9c6f2d1a980 100644 --- a/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll +++ b/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll @@ -230,8 +230,32 @@ private class GuavaCollectCsv extends SummaryModelCsv { "com.google.common.collect;TreeBasedTable;true;create;(Table);;MapKey of Argument[0];MapKey of ReturnValue;value", "com.google.common.collect;TreeBasedTable;true;create;(Table);;MapValue of Argument[0];MapValue of ReturnValue;value", "com.google.common.collect;ArrayTable;true;create;(Iterable,Iterable);;Element of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of MapKey of ReturnValue;value", - "com.google.common.collect;ArrayTable;true;create;(Iterable,Iterable);;Element of Argument[1];SyntheticField[com.google.common.collect.Table.columnKey] of MapKey of ReturnValue;value" - // Utility classes + "com.google.common.collect;ArrayTable;true;create;(Iterable,Iterable);;Element of Argument[1];SyntheticField[com.google.common.collect.Table.columnKey] of MapKey of ReturnValue;value", + // Utility classes (a few methods depending on lambda flow are not included) + "com.google.common.collect;Sets$SetView;true;immutableCopy;();;Element of Argument[-1];Element of ReturnValue;value", + "com.google.common.collect;Sets$SetView;true;copyInto;(Set);;Element of Argument[-1];Element of Argument[0];value", + "com.google.common.collect;Sets;false;cartesanProduct;(List);;Element of Element of Argument[0];Element of Element of ReturnValue;value", + "com.google.common.collect;Sets;false;cartesanProduct;(Set[]);;Element of ArrayElement of Argument[0];Element of Element of ReturnValue;value", + "com.google.common.collect;Sets;false;combinations;(Set,int);;Element of Argument[0];Element of Element of ReturnValue;value", + "com.google.common.collect;Sets;false;difference;(Set,Set);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Sets;false;filter;(NavigableSet,Predicate);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Sets;false;filter;(Set,Predicate);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Sets;false;filter;(SortedSet,Predicate);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Sets;false;newConcurrentHashSet;(Iterable);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Sets;false;newCopyOnWriteArraySet;(Iterable);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Sets;false;newConcurrentHashSet;(Iterable);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Sets;false;newHashSet;(Iterable);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Sets;false;newHashSet;(Iterator);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Sets;false;newHashSet;(Object[]);;ArrayElement of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Sets;false;newLinkedHashSet;(Iterable);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Sets;false;newTreeSet;(Iterable);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Sets;false;newSetFromMap;(Map);;MapKey of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Sets;false;powerSet;(Set);;Element of Argument[0];Element of Element of ReturnValue;value", + "com.google.common.collect;Sets;false;subSet;(NavigableSet,Range);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Sets;false;symmetricDifference;(Set,Set);;Element of Argument[0..1]; Element of ReturnValue;value", + "com.google.common.collect;Sets;false;union;(Set,Set);;Element of Argument[0..1];Element of ReturnValue;value", + "com.google.common.collect;Sets;false;synchronizedNavigableSet;(NavigableSet);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Sets;false;unmodifiableNavigableSet;(NavigableSet);;Element of Argument[0];Element of ReturnValue;value" ] } } @@ -308,47 +332,3 @@ private class TableColumnField extends SyntheticField { fieldType instanceof TypeObject } } - -/** - * A taint-preserving static method of `com.google.common.collect.Sets`. - */ -private class SetsMethod extends TaintPreservingCallable { - int arg; - - SetsMethod() { - this.getDeclaringType().hasQualifiedName(guavaCollectPackage(), "Sets") and - this.isStatic() and - ( - // static HashSet newHashSet(E... elements) - // static Set newConcurrentHashSet(Iterable elements) - // static CopyOnWriteArraySet newCopyOnWriteArraySet(Iterable elements) - // etc - this.getName().matches("new%Set") and - arg = 0 - or - // static Set> cartesianProduct(List> sets) - // static Set> cartesianProduct(Set... sets) - // static Set> combinations(Set set, int size) - // static Sets.SetView difference(Set set1, Set set2) - // static NavigableSet filter(NavigableSet unfiltered, Predicate predicate) - // static Set filter(Set unfiltered, Predicate predicate) - // static SortedSet filter(SortedSet unfiltered, Predicate predicate) - // static Set> powerSet(Set set) - // static > NavigableSet subSet(NavigableSet set, Range range) - // static NavigableSet synchronizedNavigableSet(NavigableSet navigableSet) - // static NavigableSet unmodifiableNavigableSet(NavigableSet set) - this.hasName([ - "cartesianProduct", "combinations", "difference", "filter", "powerSet", "subSet", - "synchronizedNavigableSet", "unmodifyableNavigableSet" - ]) and - arg = 0 - or - // static Sets.SetView symmetricDifference(Set set1, Set set2) - // static Sets.SetView union(Set set1, Set set2) - this.hasName(["symmetricDifference", "union"]) and - arg = [0, 1] - ) - } - - override predicate returnsTaintFrom(int arg_) { arg_ = arg } -} diff --git a/java/ql/test/library-tests/frameworks/guava/TestCollect.java b/java/ql/test/library-tests/frameworks/guava/TestCollect.java index 76acb3dd418..d2fe7e895f5 100644 --- a/java/ql/test/library-tests/frameworks/guava/TestCollect.java +++ b/java/ql/test/library-tests/frameworks/guava/TestCollect.java @@ -51,9 +51,9 @@ class TestCollect { ImmutableSet ys = ImmutableSet.of("a", "b", "c"); - sink(element(Sets.filter(Sets.union(xs, ys), y -> true))); // $numTaintFlow=1 + sink(element(Sets.filter(Sets.union(xs, ys), y -> true))); // $numValueFlow=1 - sink(element(Sets.newHashSet("a", "b", "c", "d", x))); // $numTaintFlow=1 + sink(element(Sets.newHashSet("a", "b", "c", "d", x))); // $numValueFlow=1 } void test2() { From ca583bffd5eef70ec25f889b3eebf5504f93c512 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Wed, 23 Jun 2021 10:12:49 +0100 Subject: [PATCH 468/741] Add Lists and Collections2 utilites --- .../java/frameworks/guava/Collections.qll | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll b/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll index 9c6f2d1a980..4ec4e0e2405 100644 --- a/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll +++ b/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll @@ -255,7 +255,25 @@ private class GuavaCollectCsv extends SummaryModelCsv { "com.google.common.collect;Sets;false;symmetricDifference;(Set,Set);;Element of Argument[0..1]; Element of ReturnValue;value", "com.google.common.collect;Sets;false;union;(Set,Set);;Element of Argument[0..1];Element of ReturnValue;value", "com.google.common.collect;Sets;false;synchronizedNavigableSet;(NavigableSet);;Element of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;Sets;false;unmodifiableNavigableSet;(NavigableSet);;Element of Argument[0];Element of ReturnValue;value" + "com.google.common.collect;Sets;false;unmodifiableNavigableSet;(NavigableSet);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Lists;false;asList;(Object,Object);;Argument[0..1];Element of ReturnValue;value", + "com.google.common.collect;Lists;false;asList;(Object,Object[]);;Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Lists;false;asList;(Object,Object[]);;ArrayElememnt of Argument[1];Element of ReturnValue;value", + "com.google.common.collect;Lists;false;cartesanProduct;(List);;Element of Element of Argument[0];Element of Element of ReturnValue;value", + "com.google.common.collect;Lists;false;cartesanProduct;(List[]);;Element of ArrayElement of Argument[0];Element of Element of ReturnValue;value", + "com.google.common.collect;Lists;false;charactersOf;(CharSequence);;Argument[0];Element of ReturnValue;taint", + "com.google.common.collect;Lists;false;charactersOf;(String);;Argument[0];Element of ReturnValue;taint", + "com.google.common.collect;Lists;false;newArrayList;(Object[]);;ArrayElement of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Lists;false;newArrayList;(Iterator);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Lists;false;newArrayList;(Iterable);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Lists;false;newCopyOnWriteArrayList;(Iterable);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Lists;false;newLinkedList;(Iterable);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Lists;false;partition;(List,int);;Element of Argument[0];Element of Element of ReturnValue;value", + "com.google.common.collect;Lists;false;reverse;(List);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Collections2;false;filter;(Collection,Predicate);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Collections2;false;orderedPermutations;(Iterable,Comparator);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Collections2;false;orderedPermutations;(Iterable);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Collections2;false;permutations;(Collection);;Element of Argument[0];Element of ReturnValue;value" ] } } From 19579f0d9aef904a86b6be4e424ede17cd57ebdb Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Mon, 28 Jun 2021 12:20:39 +0100 Subject: [PATCH 469/741] Add more utility class models and reorder existing ones --- .../java/frameworks/guava/Collections.qll | 219 ++++++++++++++++-- 1 file changed, 200 insertions(+), 19 deletions(-) diff --git a/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll b/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll index 4ec4e0e2405..d6c291ef6c0 100644 --- a/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll +++ b/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll @@ -232,6 +232,189 @@ private class GuavaCollectCsv extends SummaryModelCsv { "com.google.common.collect;ArrayTable;true;create;(Iterable,Iterable);;Element of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of MapKey of ReturnValue;value", "com.google.common.collect;ArrayTable;true;create;(Iterable,Iterable);;Element of Argument[1];SyntheticField[com.google.common.collect.Table.columnKey] of MapKey of ReturnValue;value", // Utility classes (a few methods depending on lambda flow are not included) + "com.google.common.collect;Collections2;false;filter;(Collection,Predicate);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Collections2;false;orderedPermutations;(Iterable,Comparator);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Collections2;false;orderedPermutations;(Iterable);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Collections2;false;permutations;(Collection);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Iterators;false;addAll;(Collection,Iterator);;Element of Argument[1];Element of Argument[0];value", + "com.google.common.collect;Iterators;false;asEnumeration;(Iterator);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Iterators;false;concat;(Iterator);;Element of Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Iterators;false;concat;(Iterator[]);;Element of ArrayElement of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Iterators;false;concat;(Iterator,Iterator);;Element of Argument[0..1];Element of ReturnValue;value", + "com.google.common.collect;Iterators;false;concat;(Iterator,Iterator,Iterator);;Element of Argument[0..2];Element of ReturnValue;value", + "com.google.common.collect;Iterators;false;concat;(Iterator,Iterator,Iterator,Iterator);;Element of Argument[0..3];Element of ReturnValue;value", + "com.google.common.collect;Iterators;false;consumingIterator;(Iterator);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Iterators;false;cycle;(Iterable);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Iterators;false;cycle;(Object[]);;ArrayElement of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Iterators;false;filter;(Iterator,Class);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Iterators;false;filter;(Iterator,Predicate);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Iterators;false;find;(Iterator,Predicate);;Element of Argument[0];ReturnValue;value", + "com.google.common.collect;Iterators;false;find;(Iterator,Predicate,Object);;Element of Argument[0];ReturnValue;value", + "com.google.common.collect;Iterators;false;find;(Iterator,Predicate,Object);;Argument[2];Element of ReturnValue;value", + "com.google.common.collect;Iterators;false;forArray;(Object[]);;ArrayElement of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Iterators;false;forEnumeration;(Enumeration);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Iterators;false;get;(Iterator,int);;Element of Argument[0];ReturnValue;value", + "com.google.common.collect;Iterators;false;get;(Iterator,int,Object);;Element of Argument[0];ReturnValue;value", + "com.google.common.collect;Iterators;false;get;(Iterator,int,Object);;Argument[2];Element of ReturnValue;value", + "com.google.common.collect;Iterators;false;getLast;(Iterator);;Element of Argument[0];ReturnValue;value", + "com.google.common.collect;Iterators;false;getLast;(Iterator,Object);;Element of Argument[0];ReturnValue;value", + "com.google.common.collect;Iterators;false;getLast;(Iterator,Object);;Argument[1];Element of ReturnValue;value", + "com.google.common.collect;Iterators;false;getNext;(Iterator,Object);;Element of Argument[0];ReturnValue;value", + "com.google.common.collect;Iterators;false;getNext;(Iterator,Object);;Argument[1];Element of ReturnValue;value", + "com.google.common.collect;Iterators;false;getOnlyElement;(Iterator);;Element of Argument[0];ReturnValue;value", + "com.google.common.collect;Iterators;false;getOnlyElement;(Iterator,Object);;Element of Argument[0];ReturnValue;value", + "com.google.common.collect;Iterators;false;getOnlyElement;(Iterator,Object);;Argument[1];Element of ReturnValue;value", + "com.google.common.collect;Iterators;false;limit;(Iterator,int);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Iterators;false;megeSorted;(Iterable,Comparator);;Element of Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Iterators;false;partition;(Iterator,int);;Element of Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Iterators;false;paddedPartition;(Iterator,int);;Element of Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Iterators;false;peekingIterator;(Iterator);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Iterators;false;peekingIterator;(PeekingIterator);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Iterators;false;singletonIterator;(Object);;Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Iterators;false;toArray;(Iterator,Class);;Element of Argument[0];ArrayElement of ReturnValue;value", + "com.google.common.collect;Iterators;false;tryFind;(Iterator,Predicate);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Iterators;false;toString;(Iterator);;Element of Argument[0];ReturnValue;taint", + "com.google.common.collect;Iterators;false;unmodifiableIterator;(Iterator);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Iterators;false;unmodifiableIterator;(UnmodifiableIterator);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Iterables;false;addAll;(Collection,Iterable);;Element of Argument[1];Element of Argument[0];value", + "com.google.common.collect;Iterables;false;concat;(Iterable);;Element of Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Iterables;false;concat;(Iterable[]);;Element of ArrayElement of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Iterables;false;concat;(Iterable,Iterable);;Element of Argument[0..1];Element of ReturnValue;value", + "com.google.common.collect;Iterables;false;concat;(Iterable,Iterable,Iterable);;Element of Argument[0..2];Element of ReturnValue;value", + "com.google.common.collect;Iterables;false;concat;(Iterable,Iterable,Iterable,Iterable);;Element of Argument[0..3];Element of ReturnValue;value", + "com.google.common.collect;Iterables;false;consumingIterable;(Iterable);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Iterables;false;cycle;(Iterable);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Iterables;false;cycle;(Object[]);;ArrayElement of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Iterables;false;filter;(Iterable,Class);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Iterables;false;filter;(Iterable,Predicate);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Iterables;false;find;(Iterable,Predicate);;Element of Argument[0];ReturnValue;value", + "com.google.common.collect;Iterables;false;find;(Iterable,Predicate,Object);;Element of Argument[0];ReturnValue;value", + "com.google.common.collect;Iterables;false;find;(Iterable,Predicate,Object);;Argument[2];Element of ReturnValue;value", + "com.google.common.collect;Iterables;false;get;(Iterable,int);;Element of Argument[0];ReturnValue;value", + "com.google.common.collect;Iterables;false;get;(Iterable,int,Object);;Element of Argument[0];ReturnValue;value", + "com.google.common.collect;Iterables;false;get;(Iterable,int,Object);;Argument[2];Element of ReturnValue;value", + "com.google.common.collect;Iterables;false;getLast;(Iterable);;Element of Argument[0];ReturnValue;value", + "com.google.common.collect;Iterables;false;getLast;(Iterable,Object);;Element of Argument[0];ReturnValue;value", + "com.google.common.collect;Iterables;false;getLast;(Iterable,Object);;Argument[1];Element of ReturnValue;value", + "com.google.common.collect;Iterables;false;getNext;(Iterable,Object);;Element of Argument[0];ReturnValue;value", + "com.google.common.collect;Iterables;false;getNext;(Iterable,Object);;Argument[1];Element of ReturnValue;value", + "com.google.common.collect;Iterables;false;getOnlyElement;(Iterable);;Element of Argument[0];ReturnValue;value", + "com.google.common.collect;Iterables;false;getOnlyElement;(Iterable,Object);;Element of Argument[0];ReturnValue;value", + "com.google.common.collect;Iterables;false;getOnlyElement;(Iterable,Object);;Argument[1];Element of ReturnValue;value", + "com.google.common.collect;Iterables;false;limit;(Iterable,int);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Iterables;false;mergeSorted;(Iterable,Comparator);;Element of Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Iterables;false;partition;(Iterable,int);;Element of Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Iterables;false;paddedPartition;(Iterable,int);;Element of Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Iterables;false;skip;(Iterable,int);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Iterables;false;toArray;(Iterable,Class);;Element of Argument[0];ArrayElement of ReturnValue;value", + "com.google.common.collect;Iterables;false;tryFind;(Iterable,Predicate);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Iterables;false;toString;(Iterable);;Element of Argument[0];ReturnValue;taint", + "com.google.common.collect;Iterables;false;unmodifiableIterable;(Iterable);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Iterables;false;unmodifiableIterable;(UnmodifiableIterable);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Lists;false;asList;(Object,Object);;Argument[0..1];Element of ReturnValue;value", + "com.google.common.collect;Lists;false;asList;(Object,Object[]);;Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Lists;false;asList;(Object,Object[]);;ArrayElememnt of Argument[1];Element of ReturnValue;value", + "com.google.common.collect;Lists;false;cartesanProduct;(List);;Element of Element of Argument[0];Element of Element of ReturnValue;value", + "com.google.common.collect;Lists;false;cartesanProduct;(List[]);;Element of ArrayElement of Argument[0];Element of Element of ReturnValue;value", + "com.google.common.collect;Lists;false;charactersOf;(CharSequence);;Argument[0];Element of ReturnValue;taint", + "com.google.common.collect;Lists;false;charactersOf;(String);;Argument[0];Element of ReturnValue;taint", + "com.google.common.collect;Lists;false;newArrayList;(Object[]);;ArrayElement of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Lists;false;newArrayList;(Iterator);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Lists;false;newArrayList;(Iterable);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Lists;false;newCopyOnWriteArrayList;(Iterable);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Lists;false;newLinkedList;(Iterable);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Lists;false;partition;(List,int);;Element of Argument[0];Element of Element of ReturnValue;value", + "com.google.common.collect;Lists;false;reverse;(List);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Maps;false;asMap;(Set,Function);;Element of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;Maps;false;asMap;(NavigableSet,Function);;Element of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;Maps;false;asMap;(SortedSet,Function);;Element of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;Maps;false;difference;(Map,Map);;MapKey of Argument[0];MapKey of SyntheticField[com.google.common.collect.MapDifference.left] of ReturnValue;value", + "com.google.common.collect;Maps;false;difference;(Map,Map);;MapValue of Argument[0];MapValue of SyntheticField[com.google.common.collect.MapDifference.left] of ReturnValue;value", + "com.google.common.collect;Maps;false;difference;(Map,Map);;MapKey of Argument[1];MapKey of SyntheticField[com.google.common.collect.MapDifference.right] of ReturnValue;value", + "com.google.common.collect;Maps;false;difference;(Map,Map);;MapValue of Argument[1];MapValue of SyntheticField[com.google.common.collect.MapDifference.right] of ReturnValue;value", + "com.google.common.collect;Maps;false;difference;(Map,Map,Equivalence);;MapKey of Argument[0];MapKey of SyntheticField[com.google.common.collect.MapDifference.left] of ReturnValue;value", + "com.google.common.collect;Maps;false;difference;(Map,Map,Equivalence);;MapValue of Argument[0];MapValue of SyntheticField[com.google.common.collect.MapDifference.left] of ReturnValue;value", + "com.google.common.collect;Maps;false;difference;(Map,Map,Equivilance);;MapKey of Argument[1];MapKey of SyntheticField[com.google.common.collect.MapDifference.right] of ReturnValue;value", + "com.google.common.collect;Maps;false;difference;(Map,Map,Equivilance);;MapValue of Argument[1];MapValue of SyntheticField[com.google.common.collect.MapDifference.right] of ReturnValue;value", + "com.google.common.collect;Maps;false;difference;(SortedMap,Map);;MapKey of Argument[0];MapKey of SyntheticField[com.google.common.collect.MapDifference.left] of ReturnValue;value", + "com.google.common.collect;Maps;false;difference;(SortedMap,Map);;MapValue of Argument[0];MapValue of SyntheticField[com.google.common.collect.MapDifference.left] of ReturnValue;value", + "com.google.common.collect;Maps;false;difference;(SortedMap,Map);;MapKey of Argument[1];MapKey of SyntheticField[com.google.common.collect.MapDifference.right] of ReturnValue;value", + "com.google.common.collect;Maps;false;difference;(SortedMap,Map);;MapValue of Argument[1];MapValue of SyntheticField[com.google.common.collect.MapDifference.right] of ReturnValue;value", + "com.google.common.collect;Maps;false;filterEntries;(Map,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;Maps;false;filterEntries;(Map,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;Maps;false;filterEntries;(BiMap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;Maps;false;filterEntries;(BiMap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;Maps;false;filterEntries;(NavigableMap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;Maps;false;filterEntries;(NavigableMap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;Maps;false;filterEntries;(SortedMap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;Maps;false;filterEntries;(SortedMap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;Maps;false;filterKeys;(Map,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;Maps;false;filterKeys;(Map,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;Maps;false;filterKeys;(BiMap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;Maps;false;filterKeys;(BiMap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;Maps;false;filterKeys;(NavigableMap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;Maps;false;filterKeys;(NavigableMap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;Maps;false;filterKeys;(SortedMap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;Maps;false;filterKeys;(SortedMap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;Maps;false;filterValues;(Map,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;Maps;false;filterValues;(Map,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;Maps;false;filterValues;(BiMap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;Maps;false;filterValues;(BiMap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;Maps;false;filterValues;(NavigableMap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;Maps;false;filterValues;(NavigableMap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;Maps;false;filterValues;(SortedMap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;Maps;false;filterValues;(SortedMap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;Maps;false;fromProperties;(Properties);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;Maps;false;fromProperties;(Properties);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;Maps;false;immutableEntry;(Object,Object);;Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;Maps;false;immutableEntry;(Object,Object);;Argument[1];MapValue of ReturnValue;value", + "com.google.common.collect;Maps;false;newHashMap;(Map);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;Maps;false;newHashMap;(Map);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;Maps;false;newLinkedHashMap;(Map);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;Maps;false;newLinkedHashMap;(Map);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;Maps;false;newTreeMap;(Map);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;Maps;false;newTreeMap;(Map);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;Maps;false;subMap;(NavigableMap,Range);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;Maps;false;subMap;(NavigableMap,Range);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;Maps;false;synchronizedBiMap;(BiMap);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;Maps;false;synchronizedBiMap;(BiMap);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;Maps;false;synchronizedNavigableMap;(NavigableMap);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;Maps;false;synchronizedNavigableMap;(NavigableMap);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;Maps;false;unmodifiableBiMap;(BiMap);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;Maps;false;unmodifiableBiMap;(BiMap);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;Maps;false;unmodifiableNavigableMap;(NavigableMap);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;Maps;false;unmodifiableNavigableMap;(NavigableMap);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;Maps;false;toMap;(Iterable,Function);;Element of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;Maps;false;toMap;(Iterator,Function);;Element of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;Maps;false;uniqueIndex;(Iterable,Function);;Element of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;Maps;false;uniqueIndex;(Iterator,Function);;Element of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;Maps;false;transformValues;(Map,Function);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;Maps;false;transformValues;(NavigableMap,Function);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;Maps;false;transformValues;(SortedMap,Function);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;MapDifference;true;entriesDiffering;();;MapKey of SyntheticField[com.google.common.collect.MapDifference.left] of Argument[-1];MapKey of ReturnValue;value", + "com.google.common.collect;MapDifference;true;entriesDiffering;();;MapKey of SyntheticField[com.google.common.collect.MapDifference.right] of Argument[-1];MapKey of ReturnValue;value", + "com.google.common.collect;MapDifference;true;entriesDiffering;();;MapValue of SyntheticField[com.google.common.collect.MapDifference.left] of Argument[-1];SyntheticField[com.google.common.collect.MapDifference.left] of MapValue of ReturnValue;value", + "com.google.common.collect;MapDifference;true;entriesDiffering;();;MapValue of SyntheticField[com.google.common.collect.MapDifference.right] of Argument[-1];SyntheticField[com.google.common.collect.MapDifference.right] of MapValue of ReturnValue;value", + "com.google.common.collect;MapDifference;true;entriesInCommon;();;MapKey of SyntheticField[com.google.common.collect.MapDifference.left] of Argument[-1];MapKey of ReturnValue;value", + "com.google.common.collect;MapDifference;true;entriesInCommon;();;MapKey of SyntheticField[com.google.common.collect.MapDifference.right] of Argument[-1];MapKey of ReturnValue;value", + "com.google.common.collect;MapDifference;true;entriesInCommon;();;MapValue of SyntheticField[com.google.common.collect.MapDifference.left] of Argument[-1];MapValue of ReturnValue;value", + "com.google.common.collect;MapDifference;true;entriesInCommon;();;MapValue of SyntheticField[com.google.common.collect.MapDifference.right] of Argument[-1];MapValue of ReturnValue;value", + "com.google.common.collect;MapDifference;true;entriesOnlyOnLeft;();;MapKey of SyntheticField[com.google.common.collect.MapDifference.left] of Argument[-1];MapKey of ReturnValue;value", + "com.google.common.collect;MapDifference;true;entriesOnlyOnLeft;();;MapValue of SyntheticField[com.google.common.collect.MapDifference.left] of Argument[-1];MapValue of ReturnValue;value", + "com.google.common.collect;MapDifference;true;entriesOnlyOnRight;();;MapKey of SyntheticField[com.google.common.collect.MapDifference.right] of Argument[-1];MapKey of ReturnValue;value", + "com.google.common.collect;MapDifference;true;entriesOnlyOnRight;();;MapValue of SyntheticField[com.google.common.collect.MapDifference.right] of Argument[-1];MapValue of ReturnValue;value", + "com.google.common.collect;MapDifference<>$ValueDifference;true;leftValue;();;SyntheticField[com.google.common.collect.MapDifference.left] of Argument[-1];ReturnValue;value", + "com.google.common.collect;MapDifference<>$ValueDifference;true;rightValue;();;SyntheticField[com.google.common.collect.MapDifference.right] of Argument[-1];ReturnValue;value", + "com.google.common.collect;Queues;false;drain;(BlockingQueue,Collection,int,long,TimeUnit);;Element of Argument[0];Element of Argument[1];value", + "com.google.common.collect;Queues;false;drain;(BlockingQueue,Collection,int,Duration);;Element of Argument[0];Element of Argument[1];value", + "com.google.common.collect;Queues;false;newArrayDeque;(Iterable);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Queues;false;newConcurrentLinkedQueue;(Iterable);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Queues;false;newLinkedBlockingDeque;(Iterable);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Queues;false;newLinkedBlockingQueue;(Iterable);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Queues;false;newPriorityBlockingQueue;(Iterable);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Queues;false;newPriorityQueue;(Iterable);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Queues;false;synchronizedQueue;(Queue);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Queues;false;synchronizedDeque;(Deque);;Element of Argument[0];Element of ReturnValue;value", "com.google.common.collect;Sets$SetView;true;immutableCopy;();;Element of Argument[-1];Element of ReturnValue;value", "com.google.common.collect;Sets$SetView;true;copyInto;(Set);;Element of Argument[-1];Element of Argument[0];value", "com.google.common.collect;Sets;false;cartesanProduct;(List);;Element of Element of Argument[0];Element of Element of ReturnValue;value", @@ -255,25 +438,7 @@ private class GuavaCollectCsv extends SummaryModelCsv { "com.google.common.collect;Sets;false;symmetricDifference;(Set,Set);;Element of Argument[0..1]; Element of ReturnValue;value", "com.google.common.collect;Sets;false;union;(Set,Set);;Element of Argument[0..1];Element of ReturnValue;value", "com.google.common.collect;Sets;false;synchronizedNavigableSet;(NavigableSet);;Element of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;Sets;false;unmodifiableNavigableSet;(NavigableSet);;Element of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;Lists;false;asList;(Object,Object);;Argument[0..1];Element of ReturnValue;value", - "com.google.common.collect;Lists;false;asList;(Object,Object[]);;Argument[0];Element of ReturnValue;value", - "com.google.common.collect;Lists;false;asList;(Object,Object[]);;ArrayElememnt of Argument[1];Element of ReturnValue;value", - "com.google.common.collect;Lists;false;cartesanProduct;(List);;Element of Element of Argument[0];Element of Element of ReturnValue;value", - "com.google.common.collect;Lists;false;cartesanProduct;(List[]);;Element of ArrayElement of Argument[0];Element of Element of ReturnValue;value", - "com.google.common.collect;Lists;false;charactersOf;(CharSequence);;Argument[0];Element of ReturnValue;taint", - "com.google.common.collect;Lists;false;charactersOf;(String);;Argument[0];Element of ReturnValue;taint", - "com.google.common.collect;Lists;false;newArrayList;(Object[]);;ArrayElement of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;Lists;false;newArrayList;(Iterator);;Element of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;Lists;false;newArrayList;(Iterable);;Element of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;Lists;false;newCopyOnWriteArrayList;(Iterable);;Element of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;Lists;false;newLinkedList;(Iterable);;Element of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;Lists;false;partition;(List,int);;Element of Argument[0];Element of Element of ReturnValue;value", - "com.google.common.collect;Lists;false;reverse;(List);;Element of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;Collections2;false;filter;(Collection,Predicate);;Element of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;Collections2;false;orderedPermutations;(Iterable,Comparator);;Element of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;Collections2;false;orderedPermutations;(Iterable);;Element of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;Collections2;false;permutations;(Collection);;Element of Argument[0];Element of ReturnValue;value" + "com.google.common.collect;Sets;false;unmodifiableNavigableSet;(NavigableSet);;Element of Argument[0];Element of ReturnValue;value" ] } } @@ -350,3 +515,19 @@ private class TableColumnField extends SyntheticField { fieldType instanceof TypeObject } } + +private class MapDifferenceLeftField extends SyntheticField { + override predicate fieldSpec(RefType owningType, string fieldName, Type fieldType) { + owningType.hasQualifiedName(guavaCollectPackage(), "Table") and + fieldName = "left" and + fieldType instanceof TypeObject + } +} + +private class MapDifferenceRightField extends SyntheticField { + override predicate fieldSpec(RefType owningType, string fieldName, Type fieldType) { + owningType.hasQualifiedName(guavaCollectPackage(), "Table") and + fieldName = "right" and + fieldType instanceof TypeObject + } +} From a755633405cfc50c4c555e92d784489cace6e926 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Mon, 28 Jun 2021 16:00:22 +0100 Subject: [PATCH 470/741] Add the remaining utility classes --- .../java/frameworks/guava/Collections.qll | 90 ++++++++++++++++++- 1 file changed, 89 insertions(+), 1 deletion(-) diff --git a/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll b/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll index d6c291ef6c0..49ba8428212 100644 --- a/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll +++ b/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll @@ -438,7 +438,95 @@ private class GuavaCollectCsv extends SummaryModelCsv { "com.google.common.collect;Sets;false;symmetricDifference;(Set,Set);;Element of Argument[0..1]; Element of ReturnValue;value", "com.google.common.collect;Sets;false;union;(Set,Set);;Element of Argument[0..1];Element of ReturnValue;value", "com.google.common.collect;Sets;false;synchronizedNavigableSet;(NavigableSet);;Element of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;Sets;false;unmodifiableNavigableSet;(NavigableSet);;Element of Argument[0];Element of ReturnValue;value" + "com.google.common.collect;Sets;false;unmodifiableNavigableSet;(NavigableSet);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Multisets;false;copyHighestCountFirst;(Multiset);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Multisets;false;difference;(Multiset,Multiset);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Multisets;false;filter;(Multiset,Predicate);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Multisets;false;immutableEntry;(Object,int);;Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Multisets;false;sum;(Multiset,Multiset);;Element of Argument[0..1];Element of ReturnValue;value", + "com.google.common.collect;Multisets;false;union;(Multiset,Multiset);;Element of Argument[0..1];Element of ReturnValue;value", + "com.google.common.collect;Multisets;false;unmodifiableMultiset;(Multiset);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Multisets;false;unmodifiableMultiset;(ImmutableMultiset);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Multisets;false;unmodifiableMultiset;(SortedMultiset);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Multimaps;false;asMap;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;Multimaps;false;asMap;(Multimap);;MapValue of Argument[0];Element of MapValue of ReturnValue;value", + "com.google.common.collect;Multimaps;false;asMap;(ListMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;Multimaps;false;asMap;(ListMultimap);;MapValue of Argument[0];Element of MapValue of ReturnValue;value", + "com.google.common.collect;Multimaps;false;asMap;(SetMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;Multimaps;false;asMap;(SetMultimap);;MapValue of Argument[0];Element of MapValue of ReturnValue;value", + "com.google.common.collect;Multimaps;false;asMap;(SortedSetMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;Multimaps;false;asMap;(SortedSetMultimap);;MapValue of Argument[0];Element of MapValue of ReturnValue;value", + "com.google.common.collect;Multimaps;false;filterEntries;(Multimap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;Multimaps;false;filterEntries;(Multimap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;Multimaps;false;filterEntries;(SetMultimap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;Multimaps;false;filterEntries;(SetMultimap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;Multimaps;false;filterKeys;(Multimap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;Multimaps;false;filterKeys;(Multimap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;Multimaps;false;filterKeys;(SetMultiap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;Multimaps;false;filterKeys;(SetMultiap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;Multimaps;false;filterValues;(Multimap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;Multimaps;false;filterValues;(Multimap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;Multimaps;false;filterValues;(SetMultiap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;Multimaps;false;filterValues;(SetMultiap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;Multimaps;false;forMap;(Map);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;Multimaps;false;forMap;(Map);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;Multimaps;false;index;(Iterable,Function);;Element of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;Multimaps;false;index;(Iterator,Function);;Element of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;Multimaps;false;invertFrom;(Multimap,Multimap);;MapKey of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;Multimaps;false;invertFrom;(Multimap,Multimap);;MapValue of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;Multimaps;false;newMultimap;(Map,Supplier);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;Multimaps;false;newMultimap;(Map,Supplier);;Element of MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;Multimaps;false;newListMultimap;(Map,Supplier);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;Multimaps;false;newListMultimap;(Map,Supplier);;Element of MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;Multimaps;false;newSetMultimap;(Map,Supplier);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;Multimaps;false;newSetMultimap;(Map,Supplier);;Element of MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;Multimaps;false;newSortedSetMultimap;(Map,Supplier);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;Multimaps;false;newSortedSetMultimap;(Map,Supplier);;Element of MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;Multimaps;false;transformValues;(Multimap,Function);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;Multimaps;false;transformValues;(ListMultimap,Function);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;Multimaps;false;synchronizedMultimap;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;Multimaps;false;synchronizedMultimap;(Multimap);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;Multimaps;false;synchronizedListMultimap;(ListMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;Multimaps;false;synchronizedListMultimap;(ListMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;Multimaps;false;synchronizedSetMultimap;(SetMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;Multimaps;false;synchronizedSetMultimap;(SetMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;Multimaps;false;synchronizedSortedSetMultimap;(SortedSetMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;Multimaps;false;synchronizedSortedSetMultimap;(SortedSetMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;Multimaps;false;unmodifibleMultimap;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;Multimaps;false;unmodifibleMultimap;(Multimap);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;Multimaps;false;unmodifibleMultimap;(ImmutableMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;Multimaps;false;unmodifibleMultimap;(ImmutableMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;Multimaps;false;unmodifibleListMultimap;(ListMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;Multimaps;false;unmodifibleListMultimap;(ListMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;Multimaps;false;unmodifibleListMultimap;(ImmutableListMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;Multimaps;false;unmodifibleListMultimap;(ImmutableListMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;Multimaps;false;unmodifibleSetMultimap;(SetMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;Multimaps;false;unmodifibleSetMultimap;(SetMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;Multimaps;false;unmodifibleSetMultimap;(ImmutableSetMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;Multimaps;false;unmodifibleSetMultimap;(ImmutableSetMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;Multimaps;false;unmodifibleSortedSetMultimap;(SortedSetMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;Multimaps;false;unmodifibleSortedSetMultimap;(SortedSetMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;Tables;false;immutableCell;(Object,Object,Object);;Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of MapKey of ReturnValue;value", + "com.google.common.collect;Tables;false;immutableCell;(Object,Object,Object);;Argument[1];SyntheticField[com.google.common.collect.Table.columnKey] of MapKey of ReturnValue;value", + "com.google.common.collect;Tables;false;immutableCell;(Object,Object,Object);;Argument[2];MapValue of ReturnValue;value", + "com.google.common.collect;Tables;false;newCustomTable;(Map,Supplier);;MapKey of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of MapKey of ReturnValue;value", + "com.google.common.collect;Tables;false;newCustomTable;(Map,Supplier);;MapKey of MapValue of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of MapKey of ReturnValue;value", + "com.google.common.collect;Tables;false;newCustomTable;(Map,Supplier);;MapValue of MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;Tables;false;transpose;(Table);;SyntheticField[com.google.common.collect.Table.rowKey] of MapKey of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of MapKey of ReturnValue;value", + "com.google.common.collect;Tables;false;transpose;(Table);;SyntheticField[com.google.common.collect.Table.columnKey] of MapKey of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of MapKey of ReturnValue;value", + "com.google.common.collect;Tables;false;transpose;(Table);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;Tables;false;transformValues;(Table,Function);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;Tables;false;synchronizedTable;(Table);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;Tables;false;synchronizedTable;(Table);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;Tables;false;unmodifiableTable;(Table);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;Tables;false;unmodifiableTable;(Table);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;Tables;false;unmodifiableRowSortedTable;(RowSortedTable);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;Tables;false;unmodifiableRowSortedTable;(RowSortedTable);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;ObjectArrays;false;concat;(Object,Object[]);;Argument[0];ArrayElement of ReturnValue;value", + "com.google.common.collect;ObjectArrays;false;concat;(Object,Object[]);;ArrayElement of Argument[1];ArrayElement of ReturnValue;value", + "com.google.common.collect;ObjectArrays;false;concat;(Object[],Object);;ArrayElement of Argument[0];ArrayElement of ReturnValue;value", + "com.google.common.collect;ObjectArrays;false;concat;(Object[],Object);;Argument[1];ArrayElement of ReturnValue;value", + "com.google.common.collect;ObjectArrays;false;concat;(Object[],Object[],Class);;ArrayElement of Argument[0..1];ArrayElement of ReturnValue;value" ] } } From 1273b063f49e24cca0c16e1b326ffa2cf76ecf54 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Tue, 29 Jun 2021 14:59:59 +0100 Subject: [PATCH 471/741] Fix test expectations --- java/ql/test/library-tests/frameworks/guava/TestCollect.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/java/ql/test/library-tests/frameworks/guava/TestCollect.java b/java/ql/test/library-tests/frameworks/guava/TestCollect.java index d2fe7e895f5..7a328652f7d 100644 --- a/java/ql/test/library-tests/frameworks/guava/TestCollect.java +++ b/java/ql/test/library-tests/frameworks/guava/TestCollect.java @@ -59,9 +59,9 @@ class TestCollect { void test2() { sink(element(ImmutableList.of(taint(), taint(), taint(), taint(),taint(), taint(), taint(), taint(),taint(), taint(), taint(), taint(),taint(), taint(), taint(), taint()))); // $numValueFlow=16 sink(element(ImmutableSet.of(taint(), taint(), taint(), taint(),taint(), taint(), taint(), taint(),taint(), taint(), taint(), taint(),taint(), taint(), taint(), taint()))); // $numValueFlow=16 - sink(mapKey(ImmutableMap.of(taint(), taint(), taint(), taint()))); // $numValueFlow=2 SPURIOUS:numTaintFlow=4 + sink(mapKey(ImmutableMap.of(taint(), taint(), taint(), taint()))); // $numValueFlow=2 sink(mapValue(ImmutableMap.of(taint(), taint(), taint(), taint()))); // $numValueFlow=2 - sink(multimapKey(ImmutableMultimap.of(taint(), taint(), taint(), taint()))); // $numValueFlow=2 SPURIOUS:numTaintFlow=4 + sink(multimapKey(ImmutableMultimap.of(taint(), taint(), taint(), taint()))); // $numValueFlow=2 sink(multimapValue(ImmutableMultimap.of(taint(), taint(), taint(), taint()))); // $numValueFlow=2 sink(tableRow(ImmutableTable.of(taint(), taint(), taint()))); // $numValueFlow=1 sink(tableColumn(ImmutableTable.of(taint(), taint(), taint()))); // $numValueFlow=1 From 2150c1d58ec32ff8081a87fc5966cf8b614f3e46 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Tue, 29 Jun 2021 15:47:29 +0100 Subject: [PATCH 472/741] Remove <> from flow summaries --- .../java/frameworks/guava/Collections.qll | 122 +++++++++--------- 1 file changed, 61 insertions(+), 61 deletions(-) diff --git a/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll b/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll index 49ba8428212..456888e0bbb 100644 --- a/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll +++ b/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll @@ -19,7 +19,7 @@ private class GuavaCollectCsv extends SummaryModelCsv { "com.google.common.collect;Multiset;true;setCount;(Object,int,int);;Argument[0];Element of Argument[-1];value", "com.google.common.collect;Multiset;true;elementSet;();;Element of Argument[-1];Element of ReturnValue;value", "com.google.common.collect;Multiset;true;entrySet;();;Element of Argument[-1];Element of Element of ReturnValue;value", - "com.google.common.collect;Multiset<>$Entry;true;getElement;();;Element of Argument[-1];ReturnValue;value", + "com.google.common.collect;Multiset$Entry;true;getElement;();;Element of Argument[-1];ReturnValue;value", // Multimaps (aliasing between the collection 'views' returned by some methods and the original collection is not implemented) "com.google.common.collect;Multimap;true;asMap;();;MapKey of Argument[-1];MapKey of ReturnValue;value", "com.google.common.collect;Multimap;true;asMap;();;MapValue of Argument[-1];Element of MapValue of ReturnValue;value", @@ -42,9 +42,9 @@ private class GuavaCollectCsv extends SummaryModelCsv { "com.google.common.collect;ImmutableMultimap;true;inverse;();;MapKey of Argument[-1];MapValue of ReturnValue;value", "com.google.common.collect;ImmutableMultimap;true;inverse;();;MapValue of Argument[-1];MapKey of ReturnValue;value", // Tables - "com.google.common.collect;Table<>$Cell;true;getRowKey;();;SyntheticField[com.google.common.collect.Table.rowKey] of MapKey of Argument[-1];ReturnValue;value", - "com.google.common.collect;Table<>$Cell;true;getColumnKey;();;SyntheticField[com.google.common.collect.Table.columnKey] of MapKey of Argument[-1];ReturnValue;value", - "com.google.common.collect;Table<>$Cell;true;getValue;();;MapValue of Argument[-1];ReturnValue;value", + "com.google.common.collect;Table$Cell;true;getRowKey;();;SyntheticField[com.google.common.collect.Table.rowKey] of MapKey of Argument[-1];ReturnValue;value", + "com.google.common.collect;Table$Cell;true;getColumnKey;();;SyntheticField[com.google.common.collect.Table.columnKey] of MapKey of Argument[-1];ReturnValue;value", + "com.google.common.collect;Table$Cell;true;getValue;();;MapValue of Argument[-1];ReturnValue;value", "com.google.common.collect;Table;true;cellSet;();;MapKey of Argument[-1];MapKey of Element of ReturnValue;value", "com.google.common.collect;Table;true;cellSet;();;MapValue of Argument[-1];MapValue of Element of ReturnValue;value", "com.google.common.collect;Table;true;row;(Object);;SyntheticField[com.google.common.collect.Table.columnKey] of MapKey of Argument[-1];MapKey of ReturnValue;value", @@ -79,61 +79,61 @@ private class GuavaCollectCsv extends SummaryModelCsv { "com.google.common.collect;ClassToInstanceMap;true;putInstance;(Class,Object);;MapValue of Argument[-1];ReturnValue;value", "com.google.common.collect;ClassToInstanceMap;true;putInstance;(Class,Object);;Argument[1];MapValue of Argument[-1];value", // Builders - "com.google.common.collect;ImmutableCollection<>$Builder;true;build;();;Element of Argument[-1];Element of ReturnValue;value", - "com.google.common.collect;ImmutableCollection<>$Builder;true;add;(Object);;Argument[-1];ReturnValue;value", - "com.google.common.collect;ImmutableCollection<>$Builder;true;add;(Object);;Argument[0];Element of Argument[-1];value", - "com.google.common.collect;ImmutableCollection<>$Builder;true;addAll;;;Argument[-1];ReturnValue;value", - "com.google.common.collect;ImmutableCollection<>$Builder;true;addAll;(Object[]);;ArrayElement of Argument[0];Element of Argument[-1];value", - "com.google.common.collect;ImmutableCollection<>$Builder;true;addAll;(Iterable);;Element of Argument[0];Element of Argument[-1];value", - "com.google.common.collect;ImmutableCollection<>$Builder;true;addAll;(Iterator);;Element of Argument[0];Element of Argument[-1];value", - "com.google.common.collect;ImmutableMultiset<>$Builder;true;addCopies;(Object,int);;Argument[-1];ReturnValue;value", - "com.google.common.collect;ImmutableMultiset<>$Builder;true;addCopies;(Object,int);;Argument[0];Element of Argument[-1];value", - "com.google.common.collect;ImmutableMap<>$Builder;true;build;();;MapKey of Argument[-1];MapKey of ReturnValue;value", - "com.google.common.collect;ImmutableMap<>$Builder;true;build;();;MapValue of Argument[-1];MapValue of ReturnValue;value", - "com.google.common.collect;ImmutableMap<>$Builder;true;orderEntriesByValue;(Comparator);;Argument[-1];ReturnValue;value", - "com.google.common.collect;ImmutableMap<>$Builder;true;put;;;Argument[-1];ReturnValue;value", - "com.google.common.collect;ImmutableMap<>$Builder;true;put;(Entry);;MapKey of Argument[0];MapKey of Argument[-1];value", - "com.google.common.collect;ImmutableMap<>$Builder;true;put;(Entry);;MapValue of Argument[0];MapValue of Argument[-1];value", - "com.google.common.collect;ImmutableMap<>$Builder;true;put;(Object,Object);;Argument[0];MapKey of Argument[-1];value", - "com.google.common.collect;ImmutableMap<>$Builder;true;put;(Object,Object);;Argument[1];MapValue of Argument[-1];value", - "com.google.common.collect;ImmutableMap<>$Builder;true;putAll;;;Argument[-1];ReturnValue;value", - "com.google.common.collect;ImmutableMap<>$Builder;true;putAll;(Iterable);;MapKey of Element of Argument[0];MapKey of Argument[-1];value", - "com.google.common.collect;ImmutableMap<>$Builder;true;putAll;(Iterable);;MapValue of Element of Argument[0];MapValue of Argument[-1];value", - "com.google.common.collect;ImmutableMap<>$Builder;true;putAll;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value", - "com.google.common.collect;ImmutableMap<>$Builder;true;putAll;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value", - "com.google.common.collect;ImmutableMultimap<>$Builder;true;build;();;MapKey of Argument[-1];MapKey of ReturnValue;value", - "com.google.common.collect;ImmutableMultimap<>$Builder;true;build;();;MapValue of Argument[-1];MapValue of ReturnValue;value", - "com.google.common.collect;ImmutableMultimap<>$Builder;true;orderKeysBy;(Comparator);;Argument[-1];ReturnValue;value", - "com.google.common.collect;ImmutableMultimap<>$Builder;true;orderValuesBy;(Comparator);;Argument[-1];ReturnValue;value", - "com.google.common.collect;ImmutableMultimap<>$Builder;true;put;;;Argument[-1];ReturnValue;value", - "com.google.common.collect;ImmutableMultimap<>$Builder;true;put;(Entry);;MapKey of Argument[0];MapKey of Argument[-1];value", - "com.google.common.collect;ImmutableMultimap<>$Builder;true;put;(Entry);;MapValue of Argument[0];MapValue of Argument[-1];value", - "com.google.common.collect;ImmutableMultimap<>$Builder;true;put;(Object,Object);;Argument[0];MapKey of Argument[-1];value", - "com.google.common.collect;ImmutableMultimap<>$Builder;true;put;(Object,Object);;Argument[1];MapValue of Argument[-1];value", - "com.google.common.collect;ImmutableMultimap<>$Builder;true;putAll;;;Argument[-1];ReturnValue;value", - "com.google.common.collect;ImmutableMultimap<>$Builder;true;putAll;(Iterable);;MapKey of Element of Argument[0];MapKey of Argument[-1];value", - "com.google.common.collect;ImmutableMultimap<>$Builder;true;putAll;(Iterable);;MapValue of Element of Argument[0];MapValue of Argument[-1];value", - "com.google.common.collect;ImmutableMultimap<>$Builder;true;putAll;(Multimap);;MapKey of Argument[0];MapKey of Argument[-1];value", - "com.google.common.collect;ImmutableMultimap<>$Builder;true;putAll;(Multimap);;MapValue of Argument[0];MapValue of Argument[-1];value", - "com.google.common.collect;ImmutableMultimap<>$Builder;true;putAll;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value", - "com.google.common.collect;ImmutableMultimap<>$Builder;true;putAll;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value", - "com.google.common.collect;ImmutableMultimap<>$Builder;true;putAll;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value", - "com.google.common.collect;ImmutableMultimap<>$Builder;true;putAll;(Object,Object[]);;ArrayElement of Argument[1];MapValue of Argument[-1];value", - "com.google.common.collect;ImmutableTable<>$Builder;true;build;();;SyntheticField[com.google.common.collect.Table.rowKey] of MapKey of Argument[-1];SyntheticField[com.google.common.collect.Table.rowKey] of MapKey of ReturnValue;value", - "com.google.common.collect;ImmutableTable<>$Builder;true;build;();;SyntheticField[com.google.common.collect.Table.columnKey] of MapKey of Argument[-1];SyntheticField[com.google.common.collect.Table.columnKey] of MapKey of ReturnValue;value", - "com.google.common.collect;ImmutableTable<>$Builder;true;build;();;MapValue of Argument[-1];MapValue of ReturnValue;value", - "com.google.common.collect;ImmutableTable<>$Builder;true;orderRowsBy;(Comparator);;Argument[-1];ReturnValue;value", - "com.google.common.collect;ImmutableTable<>$Builder;true;orderColumnsBy;(Comparator);;Argument[-1];ReturnValue;value", - "com.google.common.collect;ImmutableTable<>$Builder;true;put;(Object,Object,Object);;Argument[-1];ReturnValue;value", - "com.google.common.collect;ImmutableTable<>$Builder;true;put;(Cell);;Argument[-1];ReturnValue;value", - "com.google.common.collect;ImmutableTable<>$Builder;true;putAll;(Table);;Argument[-1];ReturnValue;value", - "com.google.common.collect;ImmutableTable<>$Builder;true;put;(Object,Object,Object);;Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of MapKey of Argument[-1];value", - "com.google.common.collect;ImmutableTable<>$Builder;true;put;(Object,Object,Object);;Argument[1];SyntheticField[com.google.common.collect.Table.columnKey] of MapKey of Argument[-1];value", - "com.google.common.collect;ImmutableTable<>$Builder;true;put;(Object,Object,Object);;Argument[2];MapValue of Argument[-1];value", - "com.google.common.collect;ImmutableTable<>$Builder;true;put;(Cell);;MapKey of Argument[0];MapKey of Argument[-1];value", - "com.google.common.collect;ImmutableTable<>$Builder;true;put;(Cell);;MapValue of Argument[0];MapValue of Argument[-1];value", - "com.google.common.collect;ImmutableTable<>$Builder;true;putAll;(Table);;MapKey of Argument[0];MapKey of Argument[-1];value", - "com.google.common.collect;ImmutableTable<>$Builder;true;putAll;(Table);;MapValue of Argument[0];MapValue of Argument[-1];value", + "com.google.common.collect;ImmutableCollection$Builder;true;build;();;Element of Argument[-1];Element of ReturnValue;value", + "com.google.common.collect;ImmutableCollection$Builder;true;add;(Object);;Argument[-1];ReturnValue;value", + "com.google.common.collect;ImmutableCollection$Builder;true;add;(Object);;Argument[0];Element of Argument[-1];value", + "com.google.common.collect;ImmutableCollection$Builder;true;addAll;;;Argument[-1];ReturnValue;value", + "com.google.common.collect;ImmutableCollection$Builder;true;addAll;(Object[]);;ArrayElement of Argument[0];Element of Argument[-1];value", + "com.google.common.collect;ImmutableCollection$Builder;true;addAll;(Iterable);;Element of Argument[0];Element of Argument[-1];value", + "com.google.common.collect;ImmutableCollection$Builder;true;addAll;(Iterator);;Element of Argument[0];Element of Argument[-1];value", + "com.google.common.collect;ImmutableMultiset$Builder;true;addCopies;(Object,int);;Argument[-1];ReturnValue;value", + "com.google.common.collect;ImmutableMultiset$Builder;true;addCopies;(Object,int);;Argument[0];Element of Argument[-1];value", + "com.google.common.collect;ImmutableMap$Builder;true;build;();;MapKey of Argument[-1];MapKey of ReturnValue;value", + "com.google.common.collect;ImmutableMap$Builder;true;build;();;MapValue of Argument[-1];MapValue of ReturnValue;value", + "com.google.common.collect;ImmutableMap$Builder;true;orderEntriesByValue;(Comparator);;Argument[-1];ReturnValue;value", + "com.google.common.collect;ImmutableMap$Builder;true;put;;;Argument[-1];ReturnValue;value", + "com.google.common.collect;ImmutableMap$Builder;true;put;(Entry);;MapKey of Argument[0];MapKey of Argument[-1];value", + "com.google.common.collect;ImmutableMap$Builder;true;put;(Entry);;MapValue of Argument[0];MapValue of Argument[-1];value", + "com.google.common.collect;ImmutableMap$Builder;true;put;(Object,Object);;Argument[0];MapKey of Argument[-1];value", + "com.google.common.collect;ImmutableMap$Builder;true;put;(Object,Object);;Argument[1];MapValue of Argument[-1];value", + "com.google.common.collect;ImmutableMap$Builder;true;putAll;;;Argument[-1];ReturnValue;value", + "com.google.common.collect;ImmutableMap$Builder;true;putAll;(Iterable);;MapKey of Element of Argument[0];MapKey of Argument[-1];value", + "com.google.common.collect;ImmutableMap$Builder;true;putAll;(Iterable);;MapValue of Element of Argument[0];MapValue of Argument[-1];value", + "com.google.common.collect;ImmutableMap$Builder;true;putAll;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value", + "com.google.common.collect;ImmutableMap$Builder;true;putAll;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value", + "com.google.common.collect;ImmutableMultimap$Builder;true;build;();;MapKey of Argument[-1];MapKey of ReturnValue;value", + "com.google.common.collect;ImmutableMultimap$Builder;true;build;();;MapValue of Argument[-1];MapValue of ReturnValue;value", + "com.google.common.collect;ImmutableMultimap$Builder;true;orderKeysBy;(Comparator);;Argument[-1];ReturnValue;value", + "com.google.common.collect;ImmutableMultimap$Builder;true;orderValuesBy;(Comparator);;Argument[-1];ReturnValue;value", + "com.google.common.collect;ImmutableMultimap$Builder;true;put;;;Argument[-1];ReturnValue;value", + "com.google.common.collect;ImmutableMultimap$Builder;true;put;(Entry);;MapKey of Argument[0];MapKey of Argument[-1];value", + "com.google.common.collect;ImmutableMultimap$Builder;true;put;(Entry);;MapValue of Argument[0];MapValue of Argument[-1];value", + "com.google.common.collect;ImmutableMultimap$Builder;true;put;(Object,Object);;Argument[0];MapKey of Argument[-1];value", + "com.google.common.collect;ImmutableMultimap$Builder;true;put;(Object,Object);;Argument[1];MapValue of Argument[-1];value", + "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;;;Argument[-1];ReturnValue;value", + "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Iterable);;MapKey of Element of Argument[0];MapKey of Argument[-1];value", + "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Iterable);;MapValue of Element of Argument[0];MapValue of Argument[-1];value", + "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Multimap);;MapKey of Argument[0];MapKey of Argument[-1];value", + "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Multimap);;MapValue of Argument[0];MapValue of Argument[-1];value", + "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value", + "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value", + "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value", + "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Object,Object[]);;ArrayElement of Argument[1];MapValue of Argument[-1];value", + "com.google.common.collect;ImmutableTable$Builder;true;build;();;SyntheticField[com.google.common.collect.Table.rowKey] of MapKey of Argument[-1];SyntheticField[com.google.common.collect.Table.rowKey] of MapKey of ReturnValue;value", + "com.google.common.collect;ImmutableTable$Builder;true;build;();;SyntheticField[com.google.common.collect.Table.columnKey] of MapKey of Argument[-1];SyntheticField[com.google.common.collect.Table.columnKey] of MapKey of ReturnValue;value", + "com.google.common.collect;ImmutableTable$Builder;true;build;();;MapValue of Argument[-1];MapValue of ReturnValue;value", + "com.google.common.collect;ImmutableTable$Builder;true;orderRowsBy;(Comparator);;Argument[-1];ReturnValue;value", + "com.google.common.collect;ImmutableTable$Builder;true;orderColumnsBy;(Comparator);;Argument[-1];ReturnValue;value", + "com.google.common.collect;ImmutableTable$Builder;true;put;(Object,Object,Object);;Argument[-1];ReturnValue;value", + "com.google.common.collect;ImmutableTable$Builder;true;put;(Cell);;Argument[-1];ReturnValue;value", + "com.google.common.collect;ImmutableTable$Builder;true;putAll;(Table);;Argument[-1];ReturnValue;value", + "com.google.common.collect;ImmutableTable$Builder;true;put;(Object,Object,Object);;Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of MapKey of Argument[-1];value", + "com.google.common.collect;ImmutableTable$Builder;true;put;(Object,Object,Object);;Argument[1];SyntheticField[com.google.common.collect.Table.columnKey] of MapKey of Argument[-1];value", + "com.google.common.collect;ImmutableTable$Builder;true;put;(Object,Object,Object);;Argument[2];MapValue of Argument[-1];value", + "com.google.common.collect;ImmutableTable$Builder;true;put;(Cell);;MapKey of Argument[0];MapKey of Argument[-1];value", + "com.google.common.collect;ImmutableTable$Builder;true;put;(Cell);;MapValue of Argument[0];MapValue of Argument[-1];value", + "com.google.common.collect;ImmutableTable$Builder;true;putAll;(Table);;MapKey of Argument[0];MapKey of Argument[-1];value", + "com.google.common.collect;ImmutableTable$Builder;true;putAll;(Table);;MapValue of Argument[0];MapValue of Argument[-1];value", // `of` methods "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value", "com.google.common.collect;ImmutableList;true;of;;;ArrayElement of Argument[12];Element of ReturnValue;value", @@ -403,8 +403,8 @@ private class GuavaCollectCsv extends SummaryModelCsv { "com.google.common.collect;MapDifference;true;entriesOnlyOnLeft;();;MapValue of SyntheticField[com.google.common.collect.MapDifference.left] of Argument[-1];MapValue of ReturnValue;value", "com.google.common.collect;MapDifference;true;entriesOnlyOnRight;();;MapKey of SyntheticField[com.google.common.collect.MapDifference.right] of Argument[-1];MapKey of ReturnValue;value", "com.google.common.collect;MapDifference;true;entriesOnlyOnRight;();;MapValue of SyntheticField[com.google.common.collect.MapDifference.right] of Argument[-1];MapValue of ReturnValue;value", - "com.google.common.collect;MapDifference<>$ValueDifference;true;leftValue;();;SyntheticField[com.google.common.collect.MapDifference.left] of Argument[-1];ReturnValue;value", - "com.google.common.collect;MapDifference<>$ValueDifference;true;rightValue;();;SyntheticField[com.google.common.collect.MapDifference.right] of Argument[-1];ReturnValue;value", + "com.google.common.collect;MapDifference$ValueDifference;true;leftValue;();;SyntheticField[com.google.common.collect.MapDifference.left] of Argument[-1];ReturnValue;value", + "com.google.common.collect;MapDifference$ValueDifference;true;rightValue;();;SyntheticField[com.google.common.collect.MapDifference.right] of Argument[-1];ReturnValue;value", "com.google.common.collect;Queues;false;drain;(BlockingQueue,Collection,int,long,TimeUnit);;Element of Argument[0];Element of Argument[1];value", "com.google.common.collect;Queues;false;drain;(BlockingQueue,Collection,int,Duration);;Element of Argument[0];Element of Argument[1];value", "com.google.common.collect;Queues;false;newArrayDeque;(Iterable);;Element of Argument[0];Element of ReturnValue;value", From 693d729ec69053e23140438f15ea6f96fa585cec Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Tue, 13 Jul 2021 15:33:57 +0100 Subject: [PATCH 473/741] Generate tests and fix broken specs --- .../java/frameworks/guava/Collections.qll | 88 +- .../frameworks/guava/generated/Test.java | 8749 +++++++++++++++++ .../frameworks/guava/generated/test.expected | 0 .../frameworks/guava/generated/test.ql | 70 + .../library-tests/frameworks/guava/pom.xml | 17 + .../library-tests/frameworks/guava/specs.csv | 503 + 6 files changed, 9382 insertions(+), 45 deletions(-) create mode 100644 java/ql/test/library-tests/frameworks/guava/generated/Test.java create mode 100644 java/ql/test/library-tests/frameworks/guava/generated/test.expected create mode 100644 java/ql/test/library-tests/frameworks/guava/generated/test.ql create mode 100644 java/ql/test/library-tests/frameworks/guava/pom.xml create mode 100644 java/ql/test/library-tests/frameworks/guava/specs.csv diff --git a/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll b/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll index 456888e0bbb..e571b18c456 100644 --- a/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll +++ b/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll @@ -80,10 +80,10 @@ private class GuavaCollectCsv extends SummaryModelCsv { "com.google.common.collect;ClassToInstanceMap;true;putInstance;(Class,Object);;Argument[1];MapValue of Argument[-1];value", // Builders "com.google.common.collect;ImmutableCollection$Builder;true;build;();;Element of Argument[-1];Element of ReturnValue;value", - "com.google.common.collect;ImmutableCollection$Builder;true;add;(Object);;Argument[-1];ReturnValue;value", + "com.google.common.collect;ImmutableCollection$Builder;true;add;;;Argument[-1];ReturnValue;value", "com.google.common.collect;ImmutableCollection$Builder;true;add;(Object);;Argument[0];Element of Argument[-1];value", + "com.google.common.collect;ImmutableCollection$Builder;true;add;(Object[]);;ArrayElement of Argument[0];Element of Argument[-1];value", "com.google.common.collect;ImmutableCollection$Builder;true;addAll;;;Argument[-1];ReturnValue;value", - "com.google.common.collect;ImmutableCollection$Builder;true;addAll;(Object[]);;ArrayElement of Argument[0];Element of Argument[-1];value", "com.google.common.collect;ImmutableCollection$Builder;true;addAll;(Iterable);;Element of Argument[0];Element of Argument[-1];value", "com.google.common.collect;ImmutableCollection$Builder;true;addAll;(Iterator);;Element of Argument[0];Element of Argument[-1];value", "com.google.common.collect;ImmutableMultiset$Builder;true;addCopies;(Object,int);;Argument[-1];ReturnValue;value", @@ -188,8 +188,7 @@ private class GuavaCollectCsv extends SummaryModelCsv { "com.google.common.collect;ImmutableMultiset;true;copyOf;(Iterator);;Element of Argument[0];Element of ReturnValue;value", "com.google.common.collect;ImmutableSortedMultiset;true;copyOf;(Comparator,Iterable);;Element of Argument[1];Element of ReturnValue;value", "com.google.common.collect;ImmutableSortedMultiset;true;copyOf;(Comparator,Iterator);;Element of Argument[1];Element of ReturnValue;value", - "com.google.common.collect;ImmutableSortedMultiset;true;copyOf;(Comparator,Collection);;Element of Argument[1];Element of ReturnValue;value", - "com.google.common.collect;ImmutableSortedMultiset;true;copyOfSorted;(SortedMultiSet);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;ImmutableSortedMultiset;true;copyOfSorted;(SortedMultiset);;Element of Argument[0];Element of ReturnValue;value", "com.google.common.collect;ImmutableMap;true;copyOf;(Map);;MapKey of Argument[0];MapKey of ReturnValue;value", "com.google.common.collect;ImmutableMap;true;copyOf;(Map);;MapValue of Argument[0];MapValue of ReturnValue;value", "com.google.common.collect;ImmutableMap;true;copyOf;(Iterable);;MapKey of Element of Argument[0];MapKey of ReturnValue;value", @@ -208,7 +207,7 @@ private class GuavaCollectCsv extends SummaryModelCsv { "com.google.common.collect;ImmutableTable;true;copyOf;(Table);;MapValue of Argument[0];MapValue of ReturnValue;value", // `create` methods "com.google.common.collect;HashMultiset;true;create;(Iterable);;Element of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;LinkdHashMultiset;true;create;(Iterable);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;LinkedHashMultiset;true;create;(Iterable);;Element of Argument[0];Element of ReturnValue;value", "com.google.common.collect;TreeMultiset;true;create;(Iterable);;Element of Argument[0];Element of ReturnValue;value", "com.google.common.collect;ConcurrentHashMultiset;true;create;(Iterable);;Element of Argument[0];Element of ReturnValue;value", "com.google.common.collect;HashMultimap;true;create;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value", @@ -223,12 +222,12 @@ private class GuavaCollectCsv extends SummaryModelCsv { "com.google.common.collect;TreeMultimap;true;create;(Multimap);;MapValue of Argument[0];MapValue of ReturnValue;value", "com.google.common.collect;HashBiMap;true;create;(Map);;MapKey of Argument[0];MapKey of ReturnValue;value", "com.google.common.collect;HashBiMap;true;create;(Map);;MapValue of Argument[0];MapValue of ReturnValue;value", - "com.google.common.collect;MutableClassToInstanceMap;true;create;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value", - "com.google.common.collect;MutableClassToInstanceMap;true;create;(Multimap);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;MutableClassToInstanceMap;true;create;(Map);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;MutableClassToInstanceMap;true;create;(Map);;MapValue of Argument[0];MapValue of ReturnValue;value", "com.google.common.collect;HashBasedTable;true;create;(Table);;MapKey of Argument[0];MapKey of ReturnValue;value", "com.google.common.collect;HashBasedTable;true;create;(Table);;MapValue of Argument[0];MapValue of ReturnValue;value", - "com.google.common.collect;TreeBasedTable;true;create;(Table);;MapKey of Argument[0];MapKey of ReturnValue;value", - "com.google.common.collect;TreeBasedTable;true;create;(Table);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;TreeBasedTable;true;create;(TreeBasedTable);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;TreeBasedTable;true;create;(TreeBasedTable);;MapValue of Argument[0];MapValue of ReturnValue;value", "com.google.common.collect;ArrayTable;true;create;(Iterable,Iterable);;Element of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of MapKey of ReturnValue;value", "com.google.common.collect;ArrayTable;true;create;(Iterable,Iterable);;Element of Argument[1];SyntheticField[com.google.common.collect.Table.columnKey] of MapKey of ReturnValue;value", // Utility classes (a few methods depending on lambda flow are not included) @@ -265,7 +264,7 @@ private class GuavaCollectCsv extends SummaryModelCsv { "com.google.common.collect;Iterators;false;getOnlyElement;(Iterator,Object);;Element of Argument[0];ReturnValue;value", "com.google.common.collect;Iterators;false;getOnlyElement;(Iterator,Object);;Argument[1];Element of ReturnValue;value", "com.google.common.collect;Iterators;false;limit;(Iterator,int);;Element of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;Iterators;false;megeSorted;(Iterable,Comparator);;Element of Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Iterators;false;mergeSorted;(Iterable,Comparator);;Element of Element of Argument[0];Element of ReturnValue;value", "com.google.common.collect;Iterators;false;partition;(Iterator,int);;Element of Element of Argument[0];Element of ReturnValue;value", "com.google.common.collect;Iterators;false;paddedPartition;(Iterator,int);;Element of Element of Argument[0];Element of ReturnValue;value", "com.google.common.collect;Iterators;false;peekingIterator;(Iterator);;Element of Argument[0];Element of ReturnValue;value", @@ -296,8 +295,6 @@ private class GuavaCollectCsv extends SummaryModelCsv { "com.google.common.collect;Iterables;false;getLast;(Iterable);;Element of Argument[0];ReturnValue;value", "com.google.common.collect;Iterables;false;getLast;(Iterable,Object);;Element of Argument[0];ReturnValue;value", "com.google.common.collect;Iterables;false;getLast;(Iterable,Object);;Argument[1];Element of ReturnValue;value", - "com.google.common.collect;Iterables;false;getNext;(Iterable,Object);;Element of Argument[0];ReturnValue;value", - "com.google.common.collect;Iterables;false;getNext;(Iterable,Object);;Argument[1];Element of ReturnValue;value", "com.google.common.collect;Iterables;false;getOnlyElement;(Iterable);;Element of Argument[0];ReturnValue;value", "com.google.common.collect;Iterables;false;getOnlyElement;(Iterable,Object);;Element of Argument[0];ReturnValue;value", "com.google.common.collect;Iterables;false;getOnlyElement;(Iterable,Object);;Argument[1];Element of ReturnValue;value", @@ -310,12 +307,13 @@ private class GuavaCollectCsv extends SummaryModelCsv { "com.google.common.collect;Iterables;false;tryFind;(Iterable,Predicate);;Element of Argument[0];Element of ReturnValue;value", "com.google.common.collect;Iterables;false;toString;(Iterable);;Element of Argument[0];ReturnValue;taint", "com.google.common.collect;Iterables;false;unmodifiableIterable;(Iterable);;Element of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;Iterables;false;unmodifiableIterable;(UnmodifiableIterable);;Element of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;Lists;false;asList;(Object,Object);;Argument[0..1];Element of ReturnValue;value", + "com.google.common.collect;Iterables;false;unmodifiableIterable;(ImmutableCollection);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Lists;false;asList;(Object,Object,Object[]);;Argument[0..1];Element of ReturnValue;value", + "com.google.common.collect;Lists;false;asList;(Object,Object,Object[]);;ArrayElement of Argument[2];Element of ReturnValue;value", "com.google.common.collect;Lists;false;asList;(Object,Object[]);;Argument[0];Element of ReturnValue;value", - "com.google.common.collect;Lists;false;asList;(Object,Object[]);;ArrayElememnt of Argument[1];Element of ReturnValue;value", - "com.google.common.collect;Lists;false;cartesanProduct;(List);;Element of Element of Argument[0];Element of Element of ReturnValue;value", - "com.google.common.collect;Lists;false;cartesanProduct;(List[]);;Element of ArrayElement of Argument[0];Element of Element of ReturnValue;value", + "com.google.common.collect;Lists;false;asList;(Object,Object[]);;ArrayElement of Argument[1];Element of ReturnValue;value", + "com.google.common.collect;Lists;false;cartesianProduct;(List);;Element of Element of Argument[0];Element of Element of ReturnValue;value", + "com.google.common.collect;Lists;false;cartesianProduct;(List[]);;Element of ArrayElement of Argument[0];Element of Element of ReturnValue;value", "com.google.common.collect;Lists;false;charactersOf;(CharSequence);;Argument[0];Element of ReturnValue;taint", "com.google.common.collect;Lists;false;charactersOf;(String);;Argument[0];Element of ReturnValue;taint", "com.google.common.collect;Lists;false;newArrayList;(Object[]);;ArrayElement of Argument[0];Element of ReturnValue;value", @@ -334,8 +332,8 @@ private class GuavaCollectCsv extends SummaryModelCsv { "com.google.common.collect;Maps;false;difference;(Map,Map);;MapValue of Argument[1];MapValue of SyntheticField[com.google.common.collect.MapDifference.right] of ReturnValue;value", "com.google.common.collect;Maps;false;difference;(Map,Map,Equivalence);;MapKey of Argument[0];MapKey of SyntheticField[com.google.common.collect.MapDifference.left] of ReturnValue;value", "com.google.common.collect;Maps;false;difference;(Map,Map,Equivalence);;MapValue of Argument[0];MapValue of SyntheticField[com.google.common.collect.MapDifference.left] of ReturnValue;value", - "com.google.common.collect;Maps;false;difference;(Map,Map,Equivilance);;MapKey of Argument[1];MapKey of SyntheticField[com.google.common.collect.MapDifference.right] of ReturnValue;value", - "com.google.common.collect;Maps;false;difference;(Map,Map,Equivilance);;MapValue of Argument[1];MapValue of SyntheticField[com.google.common.collect.MapDifference.right] of ReturnValue;value", + "com.google.common.collect;Maps;false;difference;(Map,Map,Equivalence);;MapKey of Argument[1];MapKey of SyntheticField[com.google.common.collect.MapDifference.right] of ReturnValue;value", + "com.google.common.collect;Maps;false;difference;(Map,Map,Equivalence);;MapValue of Argument[1];MapValue of SyntheticField[com.google.common.collect.MapDifference.right] of ReturnValue;value", "com.google.common.collect;Maps;false;difference;(SortedMap,Map);;MapKey of Argument[0];MapKey of SyntheticField[com.google.common.collect.MapDifference.left] of ReturnValue;value", "com.google.common.collect;Maps;false;difference;(SortedMap,Map);;MapValue of Argument[0];MapValue of SyntheticField[com.google.common.collect.MapDifference.left] of ReturnValue;value", "com.google.common.collect;Maps;false;difference;(SortedMap,Map);;MapKey of Argument[1];MapKey of SyntheticField[com.google.common.collect.MapDifference.right] of ReturnValue;value", @@ -372,8 +370,8 @@ private class GuavaCollectCsv extends SummaryModelCsv { "com.google.common.collect;Maps;false;newHashMap;(Map);;MapValue of Argument[0];MapValue of ReturnValue;value", "com.google.common.collect;Maps;false;newLinkedHashMap;(Map);;MapKey of Argument[0];MapKey of ReturnValue;value", "com.google.common.collect;Maps;false;newLinkedHashMap;(Map);;MapValue of Argument[0];MapValue of ReturnValue;value", - "com.google.common.collect;Maps;false;newTreeMap;(Map);;MapKey of Argument[0];MapKey of ReturnValue;value", - "com.google.common.collect;Maps;false;newTreeMap;(Map);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;Maps;false;newTreeMap;(SortedMap);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;Maps;false;newTreeMap;(SortedMap);;MapValue of Argument[0];MapValue of ReturnValue;value", "com.google.common.collect;Maps;false;subMap;(NavigableMap,Range);;MapKey of Argument[0];MapKey of ReturnValue;value", "com.google.common.collect;Maps;false;subMap;(NavigableMap,Range);;MapValue of Argument[0];MapValue of ReturnValue;value", "com.google.common.collect;Maps;false;synchronizedBiMap;(BiMap);;MapKey of Argument[0];MapKey of ReturnValue;value", @@ -417,8 +415,8 @@ private class GuavaCollectCsv extends SummaryModelCsv { "com.google.common.collect;Queues;false;synchronizedDeque;(Deque);;Element of Argument[0];Element of ReturnValue;value", "com.google.common.collect;Sets$SetView;true;immutableCopy;();;Element of Argument[-1];Element of ReturnValue;value", "com.google.common.collect;Sets$SetView;true;copyInto;(Set);;Element of Argument[-1];Element of Argument[0];value", - "com.google.common.collect;Sets;false;cartesanProduct;(List);;Element of Element of Argument[0];Element of Element of ReturnValue;value", - "com.google.common.collect;Sets;false;cartesanProduct;(Set[]);;Element of ArrayElement of Argument[0];Element of Element of ReturnValue;value", + "com.google.common.collect;Sets;false;cartesianProduct;(List);;Element of Element of Argument[0];Element of Element of ReturnValue;value", + "com.google.common.collect;Sets;false;cartesianProduct;(Set[]);;Element of ArrayElement of Argument[0];Element of Element of ReturnValue;value", "com.google.common.collect;Sets;false;combinations;(Set,int);;Element of Argument[0];Element of Element of ReturnValue;value", "com.google.common.collect;Sets;false;difference;(Set,Set);;Element of Argument[0];Element of ReturnValue;value", "com.google.common.collect;Sets;false;filter;(NavigableSet,Predicate);;Element of Argument[0];Element of ReturnValue;value", @@ -435,7 +433,7 @@ private class GuavaCollectCsv extends SummaryModelCsv { "com.google.common.collect;Sets;false;newSetFromMap;(Map);;MapKey of Argument[0];Element of ReturnValue;value", "com.google.common.collect;Sets;false;powerSet;(Set);;Element of Argument[0];Element of Element of ReturnValue;value", "com.google.common.collect;Sets;false;subSet;(NavigableSet,Range);;Element of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;Sets;false;symmetricDifference;(Set,Set);;Element of Argument[0..1]; Element of ReturnValue;value", + "com.google.common.collect;Sets;false;symmetricDifference;(Set,Set);;Element of Argument[0..1];Element of ReturnValue;value", "com.google.common.collect;Sets;false;union;(Set,Set);;Element of Argument[0..1];Element of ReturnValue;value", "com.google.common.collect;Sets;false;synchronizedNavigableSet;(NavigableSet);;Element of Argument[0];Element of ReturnValue;value", "com.google.common.collect;Sets;false;unmodifiableNavigableSet;(NavigableSet);;Element of Argument[0];Element of ReturnValue;value", @@ -447,7 +445,7 @@ private class GuavaCollectCsv extends SummaryModelCsv { "com.google.common.collect;Multisets;false;union;(Multiset,Multiset);;Element of Argument[0..1];Element of ReturnValue;value", "com.google.common.collect;Multisets;false;unmodifiableMultiset;(Multiset);;Element of Argument[0];Element of ReturnValue;value", "com.google.common.collect;Multisets;false;unmodifiableMultiset;(ImmutableMultiset);;Element of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;Multisets;false;unmodifiableMultiset;(SortedMultiset);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Multisets;false;unmodifiableSortedMultiset;(SortedMultiset);;Element of Argument[0];Element of ReturnValue;value", "com.google.common.collect;Multimaps;false;asMap;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value", "com.google.common.collect;Multimaps;false;asMap;(Multimap);;MapValue of Argument[0];Element of MapValue of ReturnValue;value", "com.google.common.collect;Multimaps;false;asMap;(ListMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value", @@ -462,12 +460,12 @@ private class GuavaCollectCsv extends SummaryModelCsv { "com.google.common.collect;Multimaps;false;filterEntries;(SetMultimap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value", "com.google.common.collect;Multimaps;false;filterKeys;(Multimap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value", "com.google.common.collect;Multimaps;false;filterKeys;(Multimap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value", - "com.google.common.collect;Multimaps;false;filterKeys;(SetMultiap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value", - "com.google.common.collect;Multimaps;false;filterKeys;(SetMultiap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;Multimaps;false;filterKeys;(SetMultimap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;Multimaps;false;filterKeys;(SetMultimap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value", "com.google.common.collect;Multimaps;false;filterValues;(Multimap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value", "com.google.common.collect;Multimaps;false;filterValues;(Multimap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value", - "com.google.common.collect;Multimaps;false;filterValues;(SetMultiap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value", - "com.google.common.collect;Multimaps;false;filterValues;(SetMultiap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;Multimaps;false;filterValues;(SetMultimap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;Multimaps;false;filterValues;(SetMultimap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value", "com.google.common.collect;Multimaps;false;forMap;(Map);;MapKey of Argument[0];MapKey of ReturnValue;value", "com.google.common.collect;Multimaps;false;forMap;(Map);;MapValue of Argument[0];MapValue of ReturnValue;value", "com.google.common.collect;Multimaps;false;index;(Iterable,Function);;Element of Argument[0];MapValue of ReturnValue;value", @@ -492,20 +490,20 @@ private class GuavaCollectCsv extends SummaryModelCsv { "com.google.common.collect;Multimaps;false;synchronizedSetMultimap;(SetMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value", "com.google.common.collect;Multimaps;false;synchronizedSortedSetMultimap;(SortedSetMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value", "com.google.common.collect;Multimaps;false;synchronizedSortedSetMultimap;(SortedSetMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value", - "com.google.common.collect;Multimaps;false;unmodifibleMultimap;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value", - "com.google.common.collect;Multimaps;false;unmodifibleMultimap;(Multimap);;MapValue of Argument[0];MapValue of ReturnValue;value", - "com.google.common.collect;Multimaps;false;unmodifibleMultimap;(ImmutableMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value", - "com.google.common.collect;Multimaps;false;unmodifibleMultimap;(ImmutableMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value", - "com.google.common.collect;Multimaps;false;unmodifibleListMultimap;(ListMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value", - "com.google.common.collect;Multimaps;false;unmodifibleListMultimap;(ListMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value", - "com.google.common.collect;Multimaps;false;unmodifibleListMultimap;(ImmutableListMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value", - "com.google.common.collect;Multimaps;false;unmodifibleListMultimap;(ImmutableListMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value", - "com.google.common.collect;Multimaps;false;unmodifibleSetMultimap;(SetMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value", - "com.google.common.collect;Multimaps;false;unmodifibleSetMultimap;(SetMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value", - "com.google.common.collect;Multimaps;false;unmodifibleSetMultimap;(ImmutableSetMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value", - "com.google.common.collect;Multimaps;false;unmodifibleSetMultimap;(ImmutableSetMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value", - "com.google.common.collect;Multimaps;false;unmodifibleSortedSetMultimap;(SortedSetMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value", - "com.google.common.collect;Multimaps;false;unmodifibleSortedSetMultimap;(SortedSetMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;Multimaps;false;unmodifiableMultimap;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;Multimaps;false;unmodifiableMultimap;(Multimap);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;Multimaps;false;unmodifiableMultimap;(ImmutableMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;Multimaps;false;unmodifiableMultimap;(ImmutableMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;Multimaps;false;unmodifiableListMultimap;(ListMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;Multimaps;false;unmodifiableListMultimap;(ListMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;Multimaps;false;unmodifiableListMultimap;(ImmutableListMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;Multimaps;false;unmodifiableListMultimap;(ImmutableListMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;Multimaps;false;unmodifiableSetMultimap;(SetMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;Multimaps;false;unmodifiableSetMultimap;(SetMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;Multimaps;false;unmodifiableSetMultimap;(ImmutableSetMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;Multimaps;false;unmodifiableSetMultimap;(ImmutableSetMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;Multimaps;false;unmodifiableSortedSetMultimap;(SortedSetMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;Multimaps;false;unmodifiableSortedSetMultimap;(SortedSetMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value", "com.google.common.collect;Tables;false;immutableCell;(Object,Object,Object);;Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of MapKey of ReturnValue;value", "com.google.common.collect;Tables;false;immutableCell;(Object,Object,Object);;Argument[1];SyntheticField[com.google.common.collect.Table.columnKey] of MapKey of ReturnValue;value", "com.google.common.collect;Tables;false;immutableCell;(Object,Object,Object);;Argument[2];MapValue of ReturnValue;value", @@ -606,7 +604,7 @@ private class TableColumnField extends SyntheticField { private class MapDifferenceLeftField extends SyntheticField { override predicate fieldSpec(RefType owningType, string fieldName, Type fieldType) { - owningType.hasQualifiedName(guavaCollectPackage(), "Table") and + owningType.hasQualifiedName(guavaCollectPackage(), "MapDifference") and fieldName = "left" and fieldType instanceof TypeObject } @@ -614,7 +612,7 @@ private class MapDifferenceLeftField extends SyntheticField { private class MapDifferenceRightField extends SyntheticField { override predicate fieldSpec(RefType owningType, string fieldName, Type fieldType) { - owningType.hasQualifiedName(guavaCollectPackage(), "Table") and + owningType.hasQualifiedName(guavaCollectPackage(), "MapDifference") and fieldName = "right" and fieldType instanceof TypeObject } diff --git a/java/ql/test/library-tests/frameworks/guava/generated/Test.java b/java/ql/test/library-tests/frameworks/guava/generated/Test.java new file mode 100644 index 00000000000..c1d5f2bdf16 --- /dev/null +++ b/java/ql/test/library-tests/frameworks/guava/generated/Test.java @@ -0,0 +1,8749 @@ +package generatedtest; + +import com.google.common.base.Function; +import com.google.common.base.Optional; +import com.google.common.base.Predicate; +import com.google.common.collect.AbstractListMultimap; +import com.google.common.collect.AbstractMapBasedMultimap; +import com.google.common.collect.AbstractMapBasedMultiset; +import com.google.common.collect.AbstractMultimap; +import com.google.common.collect.AbstractMultiset; +import com.google.common.collect.AbstractSetMultimap; +import com.google.common.collect.AbstractSortedKeySortedSetMultimap; +import com.google.common.collect.AbstractSortedMultiset; +import com.google.common.collect.AbstractSortedSetMultimap; +import com.google.common.collect.AbstractTable; +import com.google.common.collect.ArrayListMultimap; +import com.google.common.collect.ArrayTable; +import com.google.common.collect.BiMap; +import com.google.common.collect.ClassToInstanceMap; +import com.google.common.collect.Collections2; +import com.google.common.collect.ConcurrentHashMultiset; +import com.google.common.collect.HashBasedTable; +import com.google.common.collect.HashBiMap; +import com.google.common.collect.HashMultimap; +import com.google.common.collect.HashMultiset; +import com.google.common.collect.ImmutableClassToInstanceMap; +import com.google.common.collect.ImmutableCollection; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableListMultimap; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableMultimap; +import com.google.common.collect.ImmutableMultiset; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.ImmutableSetMultimap; +import com.google.common.collect.ImmutableSortedMap; +import com.google.common.collect.ImmutableSortedMapFauxverideShim; +import com.google.common.collect.ImmutableSortedMultiset; +import com.google.common.collect.ImmutableSortedMultisetFauxverideShim; +import com.google.common.collect.ImmutableSortedSet; +import com.google.common.collect.ImmutableSortedSetFauxverideShim; +import com.google.common.collect.ImmutableTable; +import com.google.common.collect.Iterables; +import com.google.common.collect.Iterators; +import com.google.common.collect.LinkedHashMultimap; +import com.google.common.collect.LinkedHashMultiset; +import com.google.common.collect.LinkedListMultimap; +import com.google.common.collect.ListMultimap; +import com.google.common.collect.Lists; +import com.google.common.collect.MapDifference; +import com.google.common.collect.Maps; +import com.google.common.collect.Multimap; +import com.google.common.collect.Multimaps; +import com.google.common.collect.Multiset; +import com.google.common.collect.Multisets; +import com.google.common.collect.MutableClassToInstanceMap; +import com.google.common.collect.ObjectArrays; +import com.google.common.collect.PeekingIterator; +import com.google.common.collect.Queues; +import com.google.common.collect.RowSortedTable; +import com.google.common.collect.SetMultimap; +import com.google.common.collect.Sets; +import com.google.common.collect.SortedMapDifference; +import com.google.common.collect.SortedMultiset; +import com.google.common.collect.SortedMultisetBridge; +import com.google.common.collect.SortedSetMultimap; +import com.google.common.collect.StandardRowSortedTable; +import com.google.common.collect.StandardTable; +import com.google.common.collect.Table; +import com.google.common.collect.Tables; +import com.google.common.collect.TreeBasedTable; +import com.google.common.collect.TreeMultimap; +import com.google.common.collect.TreeMultiset; +import com.google.common.collect.UnmodifiableIterator; +import java.util.ArrayDeque; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Comparator; +import java.util.Deque; +import java.util.Enumeration; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.LinkedHashSet; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.NavigableMap; +import java.util.NavigableSet; +import java.util.PriorityQueue; +import java.util.Properties; +import java.util.Queue; +import java.util.Set; +import java.util.SortedMap; +import java.util.SortedSet; +import java.util.TreeMap; +import java.util.TreeSet; +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.ConcurrentLinkedQueue; +import java.util.concurrent.CopyOnWriteArrayList; +import java.util.concurrent.CopyOnWriteArraySet; +import java.util.concurrent.LinkedBlockingDeque; +import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.PriorityBlockingQueue; + +// Test case generated by GenerateFlowTestCase.ql +public class Test { + + Object getArrayElement(Object container) { return null; } + Object getElement(Object container) { return null; } + Object getMapKey(Object container) { return null; } + Object getMapValue(Object container) { return null; } + Object newWithArrayElement(Object element) { return null; } + Object newWithElement(Object element) { return null; } + Object newWithMapKey(Object element) { return null; } + Object newWithMapValue(Object element) { return null; } + Object source() { return null; } + void sink(Object o) { } + + public void test() { + + { + // "com.google.common.collect;ArrayListMultimap;true;create;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value" + ArrayListMultimap out = null; + Multimap in = (Multimap)newWithMapKey(source()); + out = ArrayListMultimap.create(in); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ArrayListMultimap;true;create;(Multimap);;MapValue of Argument[0];MapValue of ReturnValue;value" + ArrayListMultimap out = null; + Multimap in = (Multimap)newWithMapValue(source()); + out = ArrayListMultimap.create(in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;BiMap;true;forcePut;(Object,Object);;Argument[0];MapKey of Argument[-1];value" + HashBiMap out = null; + Object in = (Object)source(); + out.forcePut(in, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;BiMap;true;forcePut;(Object,Object);;Argument[0];MapKey of Argument[-1];value" + BiMap out = null; + Object in = (Object)source(); + out.forcePut(in, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;BiMap;true;forcePut;(Object,Object);;Argument[1];MapValue of Argument[-1];value" + HashBiMap out = null; + Object in = (Object)source(); + out.forcePut(null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;BiMap;true;forcePut;(Object,Object);;Argument[1];MapValue of Argument[-1];value" + BiMap out = null; + Object in = (Object)source(); + out.forcePut(null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;BiMap;true;inverse;();;MapKey of Argument[-1];MapValue of ReturnValue;value" + BiMap out = null; + HashBiMap in = (HashBiMap)newWithMapKey(source()); + out = in.inverse(); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;BiMap;true;inverse;();;MapKey of Argument[-1];MapValue of ReturnValue;value" + BiMap out = null; + BiMap in = (BiMap)newWithMapKey(source()); + out = in.inverse(); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;BiMap;true;inverse;();;MapValue of Argument[-1];MapKey of ReturnValue;value" + BiMap out = null; + HashBiMap in = (HashBiMap)newWithMapValue(source()); + out = in.inverse(); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;BiMap;true;inverse;();;MapValue of Argument[-1];MapKey of ReturnValue;value" + BiMap out = null; + BiMap in = (BiMap)newWithMapValue(source()); + out = in.inverse(); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ClassToInstanceMap;true;getInstance;(Class);;MapValue of Argument[-1];ReturnValue;value" + Object out = null; + MutableClassToInstanceMap in = (MutableClassToInstanceMap)newWithMapValue(source()); + out = in.getInstance(null); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;ClassToInstanceMap;true;getInstance;(Class);;MapValue of Argument[-1];ReturnValue;value" + Object out = null; + ImmutableClassToInstanceMap in = (ImmutableClassToInstanceMap)newWithMapValue(source()); + out = in.getInstance(null); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;ClassToInstanceMap;true;getInstance;(Class);;MapValue of Argument[-1];ReturnValue;value" + Object out = null; + ClassToInstanceMap in = (ClassToInstanceMap)newWithMapValue(source()); + out = in.getInstance(null); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;ClassToInstanceMap;true;getInstance;(Class);;MapValue of Argument[-1];ReturnValue;value" + Object out = null; + ClassToInstanceMap in = (ClassToInstanceMap)newWithMapValue(source()); + out = in.getInstance((Class)null); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;ClassToInstanceMap;true;putInstance;(Class,Object);;Argument[1];MapValue of Argument[-1];value" + MutableClassToInstanceMap out = null; + Object in = (Object)source(); + out.putInstance(null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ClassToInstanceMap;true;putInstance;(Class,Object);;Argument[1];MapValue of Argument[-1];value" + ImmutableClassToInstanceMap out = null; + Object in = (Object)source(); + out.putInstance(null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ClassToInstanceMap;true;putInstance;(Class,Object);;Argument[1];MapValue of Argument[-1];value" + ClassToInstanceMap out = null; + Object in = (Object)source(); + out.putInstance(null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ClassToInstanceMap;true;putInstance;(Class,Object);;Argument[1];MapValue of Argument[-1];value" + ClassToInstanceMap out = null; + Object in = (Object)source(); + out.putInstance((Class)null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ClassToInstanceMap;true;putInstance;(Class,Object);;MapValue of Argument[-1];ReturnValue;value" + Object out = null; + MutableClassToInstanceMap in = (MutableClassToInstanceMap)newWithMapValue(source()); + out = in.putInstance(null, null); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;ClassToInstanceMap;true;putInstance;(Class,Object);;MapValue of Argument[-1];ReturnValue;value" + Object out = null; + ImmutableClassToInstanceMap in = (ImmutableClassToInstanceMap)newWithMapValue(source()); + out = in.putInstance(null, null); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;ClassToInstanceMap;true;putInstance;(Class,Object);;MapValue of Argument[-1];ReturnValue;value" + Object out = null; + ClassToInstanceMap in = (ClassToInstanceMap)newWithMapValue(source()); + out = in.putInstance(null, null); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;ClassToInstanceMap;true;putInstance;(Class,Object);;MapValue of Argument[-1];ReturnValue;value" + Object out = null; + ClassToInstanceMap in = (ClassToInstanceMap)newWithMapValue(source()); + out = in.putInstance((Class)null, (Object)null); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;Collections2;false;filter;(Collection,Predicate);;Element of Argument[0];Element of ReturnValue;value" + Collection out = null; + Collection in = (Collection)newWithElement(source()); + out = Collections2.filter(in, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Collections2;false;orderedPermutations;(Iterable);;Element of Argument[0];Element of ReturnValue;value" + Collection out = null; + Iterable in = (Iterable)newWithElement(source()); + out = Collections2.orderedPermutations(in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Collections2;false;orderedPermutations;(Iterable,Comparator);;Element of Argument[0];Element of ReturnValue;value" + Collection out = null; + Iterable in = (Iterable)newWithElement(source()); + out = Collections2.orderedPermutations(in, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Collections2;false;permutations;(Collection);;Element of Argument[0];Element of ReturnValue;value" + Collection out = null; + Collection in = (Collection)newWithElement(source()); + out = Collections2.permutations(in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ConcurrentHashMultiset;true;create;(Iterable);;Element of Argument[0];Element of ReturnValue;value" + ConcurrentHashMultiset out = null; + Iterable in = (Iterable)newWithElement(source()); + out = ConcurrentHashMultiset.create(in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;HashBasedTable;true;create;(Table);;MapKey of Argument[0];MapKey of ReturnValue;value" + HashBasedTable out = null; + Table in = (Table)newWithMapKey(source()); + out = HashBasedTable.create(in); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;HashBasedTable;true;create;(Table);;MapValue of Argument[0];MapValue of ReturnValue;value" + HashBasedTable out = null; + Table in = (Table)newWithMapValue(source()); + out = HashBasedTable.create(in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;HashBiMap;true;create;(Map);;MapKey of Argument[0];MapKey of ReturnValue;value" + HashBiMap out = null; + Map in = (Map)newWithMapKey(source()); + out = HashBiMap.create(in); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;HashBiMap;true;create;(Map);;MapValue of Argument[0];MapValue of ReturnValue;value" + HashBiMap out = null; + Map in = (Map)newWithMapValue(source()); + out = HashBiMap.create(in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;HashMultimap;true;create;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value" + HashMultimap out = null; + Multimap in = (Multimap)newWithMapKey(source()); + out = HashMultimap.create(in); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;HashMultimap;true;create;(Multimap);;MapValue of Argument[0];MapValue of ReturnValue;value" + HashMultimap out = null; + Multimap in = (Multimap)newWithMapValue(source()); + out = HashMultimap.create(in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;HashMultiset;true;create;(Iterable);;Element of Argument[0];Element of ReturnValue;value" + HashMultiset out = null; + Iterable in = (Iterable)newWithElement(source()); + out = HashMultiset.create(in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableClassToInstanceMap;true;copyOf;(Map);;MapKey of Argument[0];MapKey of ReturnValue;value" + ImmutableClassToInstanceMap out = null; + Map in = (Map)newWithMapKey(source()); + out = ImmutableClassToInstanceMap.copyOf(in); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableClassToInstanceMap;true;copyOf;(Map);;MapValue of Argument[0];MapValue of ReturnValue;value" + ImmutableClassToInstanceMap out = null; + Map in = (Map)newWithMapValue(source()); + out = ImmutableClassToInstanceMap.copyOf(in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableClassToInstanceMap;true;of;(Class,Object);;Argument[0];MapKey of ReturnValue;value" + ImmutableClassToInstanceMap out = null; + Class in = (Class)source(); + out = ImmutableClassToInstanceMap.of(in, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableClassToInstanceMap;true;of;(Class,Object);;Argument[1];MapValue of ReturnValue;value" + ImmutableClassToInstanceMap out = null; + Object in = (Object)source(); + out = ImmutableClassToInstanceMap.of(null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableCollection$Builder;true;add;(Object);;Argument[0];Element of Argument[-1];value" + ImmutableSortedSet.Builder out = null; + Object in = (Object)source(); + out.add(in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableCollection$Builder;true;add;(Object);;Argument[0];Element of Argument[-1];value" + ImmutableSortedMultiset.Builder out = null; + Object in = (Object)source(); + out.add(in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableCollection$Builder;true;add;(Object);;Argument[0];Element of Argument[-1];value" + ImmutableSet.Builder out = null; + Object in = (Object)source(); + out.add(in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableCollection$Builder;true;add;(Object);;Argument[0];Element of Argument[-1];value" + ImmutableMultiset.Builder out = null; + Object in = (Object)source(); + out.add(in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableCollection$Builder;true;add;(Object);;Argument[0];Element of Argument[-1];value" + ImmutableList.Builder out = null; + Object in = (Object)source(); + out.add(in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableCollection$Builder;true;add;(Object);;Argument[0];Element of Argument[-1];value" + ImmutableCollection.Builder out = null; + Object in = (Object)source(); + out.add(in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableCollection$Builder;true;add;;;Argument[-1];ReturnValue;value" + ImmutableSortedSet.Builder out = null; + ImmutableSortedSet.Builder in = (ImmutableSortedSet.Builder)source(); + out = in.add(); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableCollection$Builder;true;add;;;Argument[-1];ReturnValue;value" + ImmutableSortedSet.Builder out = null; + ImmutableSortedSet.Builder in = (ImmutableSortedSet.Builder)source(); + out = in.add((Object)null); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableCollection$Builder;true;add;;;Argument[-1];ReturnValue;value" + ImmutableSortedMultiset.Builder out = null; + ImmutableSortedMultiset.Builder in = (ImmutableSortedMultiset.Builder)source(); + out = in.add(); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableCollection$Builder;true;add;;;Argument[-1];ReturnValue;value" + ImmutableSortedMultiset.Builder out = null; + ImmutableSortedMultiset.Builder in = (ImmutableSortedMultiset.Builder)source(); + out = in.add((Object)null); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableCollection$Builder;true;add;;;Argument[-1];ReturnValue;value" + ImmutableSet.Builder out = null; + ImmutableSet.Builder in = (ImmutableSet.Builder)source(); + out = in.add(); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableCollection$Builder;true;add;;;Argument[-1];ReturnValue;value" + ImmutableSet.Builder out = null; + ImmutableSet.Builder in = (ImmutableSet.Builder)source(); + out = in.add((Object)null); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableCollection$Builder;true;add;;;Argument[-1];ReturnValue;value" + ImmutableMultiset.Builder out = null; + ImmutableMultiset.Builder in = (ImmutableMultiset.Builder)source(); + out = in.add(); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableCollection$Builder;true;add;;;Argument[-1];ReturnValue;value" + ImmutableMultiset.Builder out = null; + ImmutableMultiset.Builder in = (ImmutableMultiset.Builder)source(); + out = in.add((Object)null); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableCollection$Builder;true;add;;;Argument[-1];ReturnValue;value" + ImmutableList.Builder out = null; + ImmutableList.Builder in = (ImmutableList.Builder)source(); + out = in.add(); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableCollection$Builder;true;add;;;Argument[-1];ReturnValue;value" + ImmutableList.Builder out = null; + ImmutableList.Builder in = (ImmutableList.Builder)source(); + out = in.add((Object)null); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableCollection$Builder;true;add;;;Argument[-1];ReturnValue;value" + ImmutableCollection.Builder out = null; + ImmutableCollection.Builder in = (ImmutableCollection.Builder)source(); + out = in.add(); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableCollection$Builder;true;add;;;Argument[-1];ReturnValue;value" + ImmutableCollection.Builder out = null; + ImmutableCollection.Builder in = (ImmutableCollection.Builder)source(); + out = in.add((Object)null); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;(Iterable);;Element of Argument[0];Element of Argument[-1];value" + ImmutableSortedSet.Builder out = null; + Iterable in = (Iterable)newWithElement(source()); + out.addAll(in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;(Iterable);;Element of Argument[0];Element of Argument[-1];value" + ImmutableSortedMultiset.Builder out = null; + Iterable in = (Iterable)newWithElement(source()); + out.addAll(in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;(Iterable);;Element of Argument[0];Element of Argument[-1];value" + ImmutableSet.Builder out = null; + Iterable in = (Iterable)newWithElement(source()); + out.addAll(in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;(Iterable);;Element of Argument[0];Element of Argument[-1];value" + ImmutableMultiset.Builder out = null; + Iterable in = (Iterable)newWithElement(source()); + out.addAll(in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;(Iterable);;Element of Argument[0];Element of Argument[-1];value" + ImmutableList.Builder out = null; + Iterable in = (Iterable)newWithElement(source()); + out.addAll(in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;(Iterable);;Element of Argument[0];Element of Argument[-1];value" + ImmutableCollection.Builder out = null; + Iterable in = (Iterable)newWithElement(source()); + out.addAll(in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;(Iterator);;Element of Argument[0];Element of Argument[-1];value" + ImmutableSortedSet.Builder out = null; + Iterator in = (Iterator)newWithElement(source()); + out.addAll(in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;(Iterator);;Element of Argument[0];Element of Argument[-1];value" + ImmutableSortedMultiset.Builder out = null; + Iterator in = (Iterator)newWithElement(source()); + out.addAll(in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;(Iterator);;Element of Argument[0];Element of Argument[-1];value" + ImmutableSet.Builder out = null; + Iterator in = (Iterator)newWithElement(source()); + out.addAll(in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;(Iterator);;Element of Argument[0];Element of Argument[-1];value" + ImmutableMultiset.Builder out = null; + Iterator in = (Iterator)newWithElement(source()); + out.addAll(in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;(Iterator);;Element of Argument[0];Element of Argument[-1];value" + ImmutableList.Builder out = null; + Iterator in = (Iterator)newWithElement(source()); + out.addAll(in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;(Iterator);;Element of Argument[0];Element of Argument[-1];value" + ImmutableCollection.Builder out = null; + Iterator in = (Iterator)newWithElement(source()); + out.addAll(in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;;;Argument[-1];ReturnValue;value" + ImmutableSortedSet.Builder out = null; + ImmutableSortedSet.Builder in = (ImmutableSortedSet.Builder)source(); + out = in.addAll((Iterator)null); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;;;Argument[-1];ReturnValue;value" + ImmutableSortedSet.Builder out = null; + ImmutableSortedSet.Builder in = (ImmutableSortedSet.Builder)source(); + out = in.addAll((Iterable)null); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;;;Argument[-1];ReturnValue;value" + ImmutableSortedMultiset.Builder out = null; + ImmutableSortedMultiset.Builder in = (ImmutableSortedMultiset.Builder)source(); + out = in.addAll((Iterator)null); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;;;Argument[-1];ReturnValue;value" + ImmutableSortedMultiset.Builder out = null; + ImmutableSortedMultiset.Builder in = (ImmutableSortedMultiset.Builder)source(); + out = in.addAll((Iterable)null); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;;;Argument[-1];ReturnValue;value" + ImmutableSet.Builder out = null; + ImmutableSet.Builder in = (ImmutableSet.Builder)source(); + out = in.addAll((Iterator)null); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;;;Argument[-1];ReturnValue;value" + ImmutableSet.Builder out = null; + ImmutableSet.Builder in = (ImmutableSet.Builder)source(); + out = in.addAll((Iterable)null); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;;;Argument[-1];ReturnValue;value" + ImmutableMultiset.Builder out = null; + ImmutableMultiset.Builder in = (ImmutableMultiset.Builder)source(); + out = in.addAll((Iterator)null); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;;;Argument[-1];ReturnValue;value" + ImmutableMultiset.Builder out = null; + ImmutableMultiset.Builder in = (ImmutableMultiset.Builder)source(); + out = in.addAll((Iterable)null); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;;;Argument[-1];ReturnValue;value" + ImmutableList.Builder out = null; + ImmutableList.Builder in = (ImmutableList.Builder)source(); + out = in.addAll((Iterator)null); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;;;Argument[-1];ReturnValue;value" + ImmutableList.Builder out = null; + ImmutableList.Builder in = (ImmutableList.Builder)source(); + out = in.addAll((Iterable)null); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;;;Argument[-1];ReturnValue;value" + ImmutableCollection.Builder out = null; + ImmutableCollection.Builder in = (ImmutableCollection.Builder)source(); + out = in.addAll((Iterator)null); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;;;Argument[-1];ReturnValue;value" + ImmutableCollection.Builder out = null; + ImmutableCollection.Builder in = (ImmutableCollection.Builder)source(); + out = in.addAll((Iterable)null); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableCollection$Builder;true;build;();;Element of Argument[-1];Element of ReturnValue;value" + ImmutableSortedSet out = null; + ImmutableSortedSet.Builder in = (ImmutableSortedSet.Builder)newWithElement(source()); + out = in.build(); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableCollection$Builder;true;build;();;Element of Argument[-1];Element of ReturnValue;value" + ImmutableSortedMultiset out = null; + ImmutableSortedMultiset.Builder in = (ImmutableSortedMultiset.Builder)newWithElement(source()); + out = in.build(); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableCollection$Builder;true;build;();;Element of Argument[-1];Element of ReturnValue;value" + ImmutableSet out = null; + ImmutableSet.Builder in = (ImmutableSet.Builder)newWithElement(source()); + out = in.build(); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableCollection$Builder;true;build;();;Element of Argument[-1];Element of ReturnValue;value" + ImmutableMultiset out = null; + ImmutableMultiset.Builder in = (ImmutableMultiset.Builder)newWithElement(source()); + out = in.build(); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableCollection$Builder;true;build;();;Element of Argument[-1];Element of ReturnValue;value" + ImmutableList out = null; + ImmutableList.Builder in = (ImmutableList.Builder)newWithElement(source()); + out = in.build(); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableCollection$Builder;true;build;();;Element of Argument[-1];Element of ReturnValue;value" + ImmutableCollection out = null; + ImmutableCollection.Builder in = (ImmutableCollection.Builder)newWithElement(source()); + out = in.build(); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableCollection;true;asList;();;Element of Argument[-1];Element of ReturnValue;value" + ImmutableList out = null; + ImmutableSet in = (ImmutableSet)newWithElement(source()); + out = in.asList(); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableCollection;true;asList;();;Element of Argument[-1];Element of ReturnValue;value" + ImmutableList out = null; + ImmutableMultiset in = (ImmutableMultiset)newWithElement(source()); + out = in.asList(); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableCollection;true;asList;();;Element of Argument[-1];Element of ReturnValue;value" + ImmutableList out = null; + ImmutableList in = (ImmutableList)newWithElement(source()); + out = in.asList(); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableCollection;true;asList;();;Element of Argument[-1];Element of ReturnValue;value" + ImmutableList out = null; + ImmutableCollection in = (ImmutableCollection)newWithElement(source()); + out = in.asList(); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableCollection;true;subList;(int,int);;Element of Argument[-1];Element of ReturnValue;value" + ImmutableList out = null; + ImmutableList in = (ImmutableList)newWithElement(source()); + out = in.subList(0, 0); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableList;true;copyOf;(Collection);;Element of Argument[0];Element of ReturnValue;value" + ImmutableList out = null; + Collection in = (Collection)newWithElement(source()); + out = ImmutableList.copyOf(in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableList;true;copyOf;(Iterable);;Element of Argument[0];Element of ReturnValue;value" + ImmutableList out = null; + Iterable in = (Iterable)newWithElement(source()); + out = ImmutableList.copyOf(in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableList;true;copyOf;(Iterator);;Element of Argument[0];Element of ReturnValue;value" + ImmutableList out = null; + Iterator in = (Iterator)newWithElement(source()); + out = ImmutableList.copyOf(in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" + ImmutableList out = null; + Object in = (Object)source(); + out = ImmutableList.of(null, null, null, null, null, null, null, null, null, null, null, in, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" + ImmutableList out = null; + Object in = (Object)source(); + out = ImmutableList.of(null, null, null, null, null, null, null, null, null, null, in, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" + ImmutableList out = null; + Object in = (Object)source(); + out = ImmutableList.of(null, null, null, null, null, null, null, null, null, null, in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" + ImmutableList out = null; + Object in = (Object)source(); + out = ImmutableList.of(null, null, null, null, null, null, null, null, null, in, null, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" + ImmutableList out = null; + Object in = (Object)source(); + out = ImmutableList.of(null, null, null, null, null, null, null, null, null, in, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" + ImmutableList out = null; + Object in = (Object)source(); + out = ImmutableList.of(null, null, null, null, null, null, null, null, null, in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" + ImmutableList out = null; + Object in = (Object)source(); + out = ImmutableList.of(null, null, null, null, null, null, null, null, in, null, null, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" + ImmutableList out = null; + Object in = (Object)source(); + out = ImmutableList.of(null, null, null, null, null, null, null, null, in, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" + ImmutableList out = null; + Object in = (Object)source(); + out = ImmutableList.of(null, null, null, null, null, null, null, null, in, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" + ImmutableList out = null; + Object in = (Object)source(); + out = ImmutableList.of(null, null, null, null, null, null, null, null, in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" + ImmutableList out = null; + Object in = (Object)source(); + out = ImmutableList.of(null, null, null, null, null, null, null, in, null, null, null, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" + ImmutableList out = null; + Object in = (Object)source(); + out = ImmutableList.of(null, null, null, null, null, null, null, in, null, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" + ImmutableList out = null; + Object in = (Object)source(); + out = ImmutableList.of(null, null, null, null, null, null, null, in, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" + ImmutableList out = null; + Object in = (Object)source(); + out = ImmutableList.of(null, null, null, null, null, null, null, in, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" + ImmutableList out = null; + Object in = (Object)source(); + out = ImmutableList.of(null, null, null, null, null, null, null, in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" + ImmutableList out = null; + Object in = (Object)source(); + out = ImmutableList.of(null, null, null, null, null, null, in, null, null, null, null, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" + ImmutableList out = null; + Object in = (Object)source(); + out = ImmutableList.of(null, null, null, null, null, null, in, null, null, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" + ImmutableList out = null; + Object in = (Object)source(); + out = ImmutableList.of(null, null, null, null, null, null, in, null, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" + ImmutableList out = null; + Object in = (Object)source(); + out = ImmutableList.of(null, null, null, null, null, null, in, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" + ImmutableList out = null; + Object in = (Object)source(); + out = ImmutableList.of(null, null, null, null, null, null, in, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" + ImmutableList out = null; + Object in = (Object)source(); + out = ImmutableList.of(null, null, null, null, null, null, in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" + ImmutableList out = null; + Object in = (Object)source(); + out = ImmutableList.of(null, null, null, null, null, in, null, null, null, null, null, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" + ImmutableList out = null; + Object in = (Object)source(); + out = ImmutableList.of(null, null, null, null, null, in, null, null, null, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" + ImmutableList out = null; + Object in = (Object)source(); + out = ImmutableList.of(null, null, null, null, null, in, null, null, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" + ImmutableList out = null; + Object in = (Object)source(); + out = ImmutableList.of(null, null, null, null, null, in, null, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" + ImmutableList out = null; + Object in = (Object)source(); + out = ImmutableList.of(null, null, null, null, null, in, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" + ImmutableList out = null; + Object in = (Object)source(); + out = ImmutableList.of(null, null, null, null, null, in, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" + ImmutableList out = null; + Object in = (Object)source(); + out = ImmutableList.of(null, null, null, null, null, in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" + ImmutableList out = null; + Object in = (Object)source(); + out = ImmutableList.of(null, null, null, null, in, null, null, null, null, null, null, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" + ImmutableList out = null; + Object in = (Object)source(); + out = ImmutableList.of(null, null, null, null, in, null, null, null, null, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" + ImmutableList out = null; + Object in = (Object)source(); + out = ImmutableList.of(null, null, null, null, in, null, null, null, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" + ImmutableList out = null; + Object in = (Object)source(); + out = ImmutableList.of(null, null, null, null, in, null, null, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" + ImmutableList out = null; + Object in = (Object)source(); + out = ImmutableList.of(null, null, null, null, in, null, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" + ImmutableList out = null; + Object in = (Object)source(); + out = ImmutableList.of(null, null, null, null, in, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" + ImmutableList out = null; + Object in = (Object)source(); + out = ImmutableList.of(null, null, null, null, in, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" + ImmutableList out = null; + Object in = (Object)source(); + out = ImmutableList.of(null, null, null, null, in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" + ImmutableList out = null; + Object in = (Object)source(); + out = ImmutableList.of(null, null, null, in, null, null, null, null, null, null, null, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" + ImmutableList out = null; + Object in = (Object)source(); + out = ImmutableList.of(null, null, null, in, null, null, null, null, null, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" + ImmutableList out = null; + Object in = (Object)source(); + out = ImmutableList.of(null, null, null, in, null, null, null, null, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" + ImmutableList out = null; + Object in = (Object)source(); + out = ImmutableList.of(null, null, null, in, null, null, null, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" + ImmutableList out = null; + Object in = (Object)source(); + out = ImmutableList.of(null, null, null, in, null, null, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" + ImmutableList out = null; + Object in = (Object)source(); + out = ImmutableList.of(null, null, null, in, null, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" + ImmutableList out = null; + Object in = (Object)source(); + out = ImmutableList.of(null, null, null, in, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" + ImmutableList out = null; + Object in = (Object)source(); + out = ImmutableList.of(null, null, null, in, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" + ImmutableList out = null; + Object in = (Object)source(); + out = ImmutableList.of(null, null, null, in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" + ImmutableList out = null; + Object in = (Object)source(); + out = ImmutableList.of(null, null, in, null, null, null, null, null, null, null, null, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" + ImmutableList out = null; + Object in = (Object)source(); + out = ImmutableList.of(null, null, in, null, null, null, null, null, null, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" + ImmutableList out = null; + Object in = (Object)source(); + out = ImmutableList.of(null, null, in, null, null, null, null, null, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" + ImmutableList out = null; + Object in = (Object)source(); + out = ImmutableList.of(null, null, in, null, null, null, null, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" + ImmutableList out = null; + Object in = (Object)source(); + out = ImmutableList.of(null, null, in, null, null, null, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" + ImmutableList out = null; + Object in = (Object)source(); + out = ImmutableList.of(null, null, in, null, null, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" + ImmutableList out = null; + Object in = (Object)source(); + out = ImmutableList.of(null, null, in, null, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" + ImmutableList out = null; + Object in = (Object)source(); + out = ImmutableList.of(null, null, in, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" + ImmutableList out = null; + Object in = (Object)source(); + out = ImmutableList.of(null, null, in, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" + ImmutableList out = null; + Object in = (Object)source(); + out = ImmutableList.of(null, null, in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" + ImmutableList out = null; + Object in = (Object)source(); + out = ImmutableList.of(null, in, null, null, null, null, null, null, null, null, null, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" + ImmutableList out = null; + Object in = (Object)source(); + out = ImmutableList.of(null, in, null, null, null, null, null, null, null, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" + ImmutableList out = null; + Object in = (Object)source(); + out = ImmutableList.of(null, in, null, null, null, null, null, null, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" + ImmutableList out = null; + Object in = (Object)source(); + out = ImmutableList.of(null, in, null, null, null, null, null, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" + ImmutableList out = null; + Object in = (Object)source(); + out = ImmutableList.of(null, in, null, null, null, null, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" + ImmutableList out = null; + Object in = (Object)source(); + out = ImmutableList.of(null, in, null, null, null, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" + ImmutableList out = null; + Object in = (Object)source(); + out = ImmutableList.of(null, in, null, null, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" + ImmutableList out = null; + Object in = (Object)source(); + out = ImmutableList.of(null, in, null, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" + ImmutableList out = null; + Object in = (Object)source(); + out = ImmutableList.of(null, in, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" + ImmutableList out = null; + Object in = (Object)source(); + out = ImmutableList.of(null, in, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" + ImmutableList out = null; + Object in = (Object)source(); + out = ImmutableList.of(null, in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" + ImmutableList out = null; + Object in = (Object)source(); + out = ImmutableList.of(in, null, null, null, null, null, null, null, null, null, null, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" + ImmutableList out = null; + Object in = (Object)source(); + out = ImmutableList.of(in, null, null, null, null, null, null, null, null, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" + ImmutableList out = null; + Object in = (Object)source(); + out = ImmutableList.of(in, null, null, null, null, null, null, null, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" + ImmutableList out = null; + Object in = (Object)source(); + out = ImmutableList.of(in, null, null, null, null, null, null, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" + ImmutableList out = null; + Object in = (Object)source(); + out = ImmutableList.of(in, null, null, null, null, null, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" + ImmutableList out = null; + Object in = (Object)source(); + out = ImmutableList.of(in, null, null, null, null, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" + ImmutableList out = null; + Object in = (Object)source(); + out = ImmutableList.of(in, null, null, null, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" + ImmutableList out = null; + Object in = (Object)source(); + out = ImmutableList.of(in, null, null, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" + ImmutableList out = null; + Object in = (Object)source(); + out = ImmutableList.of(in, null, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" + ImmutableList out = null; + Object in = (Object)source(); + out = ImmutableList.of(in, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" + ImmutableList out = null; + Object in = (Object)source(); + out = ImmutableList.of(in, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" + ImmutableList out = null; + Object in = (Object)source(); + out = ImmutableList.of(in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableList;true;reverse;();;Element of Argument[-1];Element of ReturnValue;value" + ImmutableList out = null; + ImmutableList in = (ImmutableList)newWithElement(source()); + out = in.reverse(); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableList;true;sortedCopyOf;(Comparator,Iterable);;Element of Argument[1];Element of ReturnValue;value" + ImmutableList out = null; + Iterable in = (Iterable)newWithElement(source()); + out = ImmutableList.sortedCopyOf(null, in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableList;true;sortedCopyOf;(Iterable);;Element of Argument[0];Element of ReturnValue;value" + ImmutableList out = null; + Iterable in = (Iterable)newWithElement(source()); + out = ImmutableList.sortedCopyOf(in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap$Builder;true;build;();;MapKey of Argument[-1];MapKey of ReturnValue;value" + ImmutableSortedMap out = null; + ImmutableSortedMap.Builder in = (ImmutableSortedMap.Builder)newWithMapKey(source()); + out = in.build(); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap$Builder;true;build;();;MapKey of Argument[-1];MapKey of ReturnValue;value" + ImmutableMap out = null; + ImmutableMap.Builder in = (ImmutableMap.Builder)newWithMapKey(source()); + out = in.build(); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap$Builder;true;build;();;MapValue of Argument[-1];MapValue of ReturnValue;value" + ImmutableSortedMap out = null; + ImmutableSortedMap.Builder in = (ImmutableSortedMap.Builder)newWithMapValue(source()); + out = in.build(); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap$Builder;true;build;();;MapValue of Argument[-1];MapValue of ReturnValue;value" + ImmutableMap out = null; + ImmutableMap.Builder in = (ImmutableMap.Builder)newWithMapValue(source()); + out = in.build(); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap$Builder;true;orderEntriesByValue;(Comparator);;Argument[-1];ReturnValue;value" + ImmutableSortedMap.Builder out = null; + ImmutableSortedMap.Builder in = (ImmutableSortedMap.Builder)source(); + out = in.orderEntriesByValue(null); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap$Builder;true;orderEntriesByValue;(Comparator);;Argument[-1];ReturnValue;value" + ImmutableMap.Builder out = null; + ImmutableMap.Builder in = (ImmutableMap.Builder)source(); + out = in.orderEntriesByValue(null); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap$Builder;true;put;(Entry);;MapKey of Argument[0];MapKey of Argument[-1];value" + ImmutableSortedMap.Builder out = null; + Map.Entry in = (Map.Entry)newWithMapKey(source()); + out.put(in); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap$Builder;true;put;(Entry);;MapKey of Argument[0];MapKey of Argument[-1];value" + ImmutableMap.Builder out = null; + Map.Entry in = (Map.Entry)newWithMapKey(source()); + out.put(in); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap$Builder;true;put;(Entry);;MapValue of Argument[0];MapValue of Argument[-1];value" + ImmutableSortedMap.Builder out = null; + Map.Entry in = (Map.Entry)newWithMapValue(source()); + out.put(in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap$Builder;true;put;(Entry);;MapValue of Argument[0];MapValue of Argument[-1];value" + ImmutableMap.Builder out = null; + Map.Entry in = (Map.Entry)newWithMapValue(source()); + out.put(in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap$Builder;true;put;(Object,Object);;Argument[0];MapKey of Argument[-1];value" + ImmutableSortedMap.Builder out = null; + Object in = (Object)source(); + out.put(in, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap$Builder;true;put;(Object,Object);;Argument[0];MapKey of Argument[-1];value" + ImmutableMap.Builder out = null; + Object in = (Object)source(); + out.put(in, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap$Builder;true;put;(Object,Object);;Argument[1];MapValue of Argument[-1];value" + ImmutableSortedMap.Builder out = null; + Object in = (Object)source(); + out.put(null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap$Builder;true;put;(Object,Object);;Argument[1];MapValue of Argument[-1];value" + ImmutableMap.Builder out = null; + Object in = (Object)source(); + out.put(null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap$Builder;true;put;;;Argument[-1];ReturnValue;value" + ImmutableSortedMap.Builder out = null; + ImmutableSortedMap.Builder in = (ImmutableSortedMap.Builder)source(); + out = in.put(null, null); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap$Builder;true;put;;;Argument[-1];ReturnValue;value" + ImmutableSortedMap.Builder out = null; + ImmutableSortedMap.Builder in = (ImmutableSortedMap.Builder)source(); + out = in.put(null); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap$Builder;true;put;;;Argument[-1];ReturnValue;value" + ImmutableMap.Builder out = null; + ImmutableMap.Builder in = (ImmutableMap.Builder)source(); + out = in.put(null, null); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap$Builder;true;put;;;Argument[-1];ReturnValue;value" + ImmutableMap.Builder out = null; + ImmutableMap.Builder in = (ImmutableMap.Builder)source(); + out = in.put(null); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap$Builder;true;putAll;(Iterable);;MapKey of Element of Argument[0];MapKey of Argument[-1];value" + ImmutableSortedMap.Builder out = null; + Iterable in = (Iterable)newWithElement(newWithMapKey(source())); + out.putAll(in); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap$Builder;true;putAll;(Iterable);;MapKey of Element of Argument[0];MapKey of Argument[-1];value" + ImmutableMap.Builder out = null; + Iterable in = (Iterable)newWithElement(newWithMapKey(source())); + out.putAll(in); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap$Builder;true;putAll;(Iterable);;MapValue of Element of Argument[0];MapValue of Argument[-1];value" + ImmutableSortedMap.Builder out = null; + Iterable in = (Iterable)newWithElement(newWithMapValue(source())); + out.putAll(in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap$Builder;true;putAll;(Iterable);;MapValue of Element of Argument[0];MapValue of Argument[-1];value" + ImmutableMap.Builder out = null; + Iterable in = (Iterable)newWithElement(newWithMapValue(source())); + out.putAll(in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap$Builder;true;putAll;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value" + ImmutableSortedMap.Builder out = null; + Map in = (Map)newWithMapKey(source()); + out.putAll(in); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap$Builder;true;putAll;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value" + ImmutableMap.Builder out = null; + Map in = (Map)newWithMapKey(source()); + out.putAll(in); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap$Builder;true;putAll;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value" + ImmutableSortedMap.Builder out = null; + Map in = (Map)newWithMapValue(source()); + out.putAll(in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap$Builder;true;putAll;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value" + ImmutableMap.Builder out = null; + Map in = (Map)newWithMapValue(source()); + out.putAll(in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap$Builder;true;putAll;;;Argument[-1];ReturnValue;value" + ImmutableSortedMap.Builder out = null; + ImmutableSortedMap.Builder in = (ImmutableSortedMap.Builder)source(); + out = in.putAll((Map)null); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap$Builder;true;putAll;;;Argument[-1];ReturnValue;value" + ImmutableSortedMap.Builder out = null; + ImmutableSortedMap.Builder in = (ImmutableSortedMap.Builder)source(); + out = in.putAll((Iterable)null); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap$Builder;true;putAll;;;Argument[-1];ReturnValue;value" + ImmutableMap.Builder out = null; + ImmutableMap.Builder in = (ImmutableMap.Builder)source(); + out = in.putAll((Map)null); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap$Builder;true;putAll;;;Argument[-1];ReturnValue;value" + ImmutableMap.Builder out = null; + ImmutableMap.Builder in = (ImmutableMap.Builder)source(); + out = in.putAll((Iterable)null); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap;true;copyOf;(Iterable);;MapKey of Element of Argument[0];MapKey of ReturnValue;value" + ImmutableSortedMap out = null; + Iterable in = (Iterable)newWithElement(newWithMapKey(source())); + out = ImmutableSortedMap.copyOf(in); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap;true;copyOf;(Iterable);;MapKey of Element of Argument[0];MapKey of ReturnValue;value" + ImmutableMap out = null; + Iterable in = (Iterable)newWithElement(newWithMapKey(source())); + out = ImmutableMap.copyOf(in); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap;true;copyOf;(Iterable);;MapValue of Element of Argument[0];MapValue of ReturnValue;value" + ImmutableSortedMap out = null; + Iterable in = (Iterable)newWithElement(newWithMapValue(source())); + out = ImmutableSortedMap.copyOf(in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap;true;copyOf;(Iterable);;MapValue of Element of Argument[0];MapValue of ReturnValue;value" + ImmutableMap out = null; + Iterable in = (Iterable)newWithElement(newWithMapValue(source())); + out = ImmutableMap.copyOf(in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap;true;copyOf;(Map);;MapKey of Argument[0];MapKey of ReturnValue;value" + ImmutableSortedMap out = null; + Map in = (Map)newWithMapKey(source()); + out = ImmutableSortedMap.copyOf(in); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap;true;copyOf;(Map);;MapKey of Argument[0];MapKey of ReturnValue;value" + ImmutableMap out = null; + Map in = (Map)newWithMapKey(source()); + out = ImmutableMap.copyOf(in); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap;true;copyOf;(Map);;MapValue of Argument[0];MapValue of ReturnValue;value" + ImmutableSortedMap out = null; + Map in = (Map)newWithMapValue(source()); + out = ImmutableSortedMap.copyOf(in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap;true;copyOf;(Map);;MapValue of Argument[0];MapValue of ReturnValue;value" + ImmutableMap out = null; + Map in = (Map)newWithMapValue(source()); + out = ImmutableMap.copyOf(in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap;true;of;;;Argument[0];MapKey of ReturnValue;value" + ImmutableSortedMap out = null; + Object in = (Object)source(); + out = ImmutableSortedMapFauxverideShim.of(in, null, null, null, null, null, null, null, null, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap;true;of;;;Argument[0];MapKey of ReturnValue;value" + ImmutableSortedMap out = null; + Object in = (Object)source(); + out = ImmutableSortedMapFauxverideShim.of(in, null, null, null, null, null, null, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap;true;of;;;Argument[0];MapKey of ReturnValue;value" + ImmutableSortedMap out = null; + Object in = (Object)source(); + out = ImmutableSortedMapFauxverideShim.of(in, null, null, null, null, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap;true;of;;;Argument[0];MapKey of ReturnValue;value" + ImmutableSortedMap out = null; + Object in = (Object)source(); + out = ImmutableSortedMapFauxverideShim.of(in, null, null, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap;true;of;;;Argument[0];MapKey of ReturnValue;value" + ImmutableSortedMap out = null; + Object in = (Object)source(); + out = ImmutableSortedMapFauxverideShim.of(in, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap;true;of;;;Argument[0];MapKey of ReturnValue;value" + ImmutableSortedMap out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedMap.of(in, null, null, null, null, null, null, null, null, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap;true;of;;;Argument[0];MapKey of ReturnValue;value" + ImmutableSortedMap out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedMap.of(in, null, null, null, null, null, null, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap;true;of;;;Argument[0];MapKey of ReturnValue;value" + ImmutableSortedMap out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedMap.of(in, null, null, null, null, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap;true;of;;;Argument[0];MapKey of ReturnValue;value" + ImmutableSortedMap out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedMap.of(in, null, null, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap;true;of;;;Argument[0];MapKey of ReturnValue;value" + ImmutableSortedMap out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedMap.of(in, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap;true;of;;;Argument[0];MapKey of ReturnValue;value" + ImmutableMap out = null; + Object in = (Object)source(); + out = ImmutableMap.of(in, null, null, null, null, null, null, null, null, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap;true;of;;;Argument[0];MapKey of ReturnValue;value" + ImmutableMap out = null; + Object in = (Object)source(); + out = ImmutableMap.of(in, null, null, null, null, null, null, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap;true;of;;;Argument[0];MapKey of ReturnValue;value" + ImmutableMap out = null; + Object in = (Object)source(); + out = ImmutableMap.of(in, null, null, null, null, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap;true;of;;;Argument[0];MapKey of ReturnValue;value" + ImmutableMap out = null; + Object in = (Object)source(); + out = ImmutableMap.of(in, null, null, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap;true;of;;;Argument[0];MapKey of ReturnValue;value" + ImmutableMap out = null; + Object in = (Object)source(); + out = ImmutableMap.of(in, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap;true;of;;;Argument[1];MapValue of ReturnValue;value" + ImmutableSortedMap out = null; + Object in = (Object)source(); + out = ImmutableSortedMapFauxverideShim.of(null, in, null, null, null, null, null, null, null, null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap;true;of;;;Argument[1];MapValue of ReturnValue;value" + ImmutableSortedMap out = null; + Object in = (Object)source(); + out = ImmutableSortedMapFauxverideShim.of(null, in, null, null, null, null, null, null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap;true;of;;;Argument[1];MapValue of ReturnValue;value" + ImmutableSortedMap out = null; + Object in = (Object)source(); + out = ImmutableSortedMapFauxverideShim.of(null, in, null, null, null, null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap;true;of;;;Argument[1];MapValue of ReturnValue;value" + ImmutableSortedMap out = null; + Object in = (Object)source(); + out = ImmutableSortedMapFauxverideShim.of(null, in, null, null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap;true;of;;;Argument[1];MapValue of ReturnValue;value" + ImmutableSortedMap out = null; + Object in = (Object)source(); + out = ImmutableSortedMapFauxverideShim.of(null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap;true;of;;;Argument[1];MapValue of ReturnValue;value" + ImmutableSortedMap out = null; + Object in = (Object)source(); + out = ImmutableSortedMap.of(null, in, null, null, null, null, null, null, null, null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap;true;of;;;Argument[1];MapValue of ReturnValue;value" + ImmutableSortedMap out = null; + Object in = (Object)source(); + out = ImmutableSortedMap.of(null, in, null, null, null, null, null, null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap;true;of;;;Argument[1];MapValue of ReturnValue;value" + ImmutableSortedMap out = null; + Object in = (Object)source(); + out = ImmutableSortedMap.of(null, in, null, null, null, null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap;true;of;;;Argument[1];MapValue of ReturnValue;value" + ImmutableSortedMap out = null; + Object in = (Object)source(); + out = ImmutableSortedMap.of(null, in, null, null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap;true;of;;;Argument[1];MapValue of ReturnValue;value" + ImmutableSortedMap out = null; + Object in = (Object)source(); + out = ImmutableSortedMap.of(null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap;true;of;;;Argument[1];MapValue of ReturnValue;value" + ImmutableMap out = null; + Object in = (Object)source(); + out = ImmutableMap.of(null, in, null, null, null, null, null, null, null, null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap;true;of;;;Argument[1];MapValue of ReturnValue;value" + ImmutableMap out = null; + Object in = (Object)source(); + out = ImmutableMap.of(null, in, null, null, null, null, null, null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap;true;of;;;Argument[1];MapValue of ReturnValue;value" + ImmutableMap out = null; + Object in = (Object)source(); + out = ImmutableMap.of(null, in, null, null, null, null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap;true;of;;;Argument[1];MapValue of ReturnValue;value" + ImmutableMap out = null; + Object in = (Object)source(); + out = ImmutableMap.of(null, in, null, null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap;true;of;;;Argument[1];MapValue of ReturnValue;value" + ImmutableMap out = null; + Object in = (Object)source(); + out = ImmutableMap.of(null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap;true;of;;;Argument[2];MapKey of ReturnValue;value" + ImmutableSortedMap out = null; + Object in = (Object)source(); + out = ImmutableSortedMapFauxverideShim.of(null, null, in, null, null, null, null, null, null, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap;true;of;;;Argument[2];MapKey of ReturnValue;value" + ImmutableSortedMap out = null; + Object in = (Object)source(); + out = ImmutableSortedMapFauxverideShim.of(null, null, in, null, null, null, null, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap;true;of;;;Argument[2];MapKey of ReturnValue;value" + ImmutableSortedMap out = null; + Object in = (Object)source(); + out = ImmutableSortedMapFauxverideShim.of(null, null, in, null, null, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap;true;of;;;Argument[2];MapKey of ReturnValue;value" + ImmutableSortedMap out = null; + Object in = (Object)source(); + out = ImmutableSortedMapFauxverideShim.of(null, null, in, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap;true;of;;;Argument[2];MapKey of ReturnValue;value" + ImmutableSortedMap out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedMap.of(null, null, in, null, null, null, null, null, null, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap;true;of;;;Argument[2];MapKey of ReturnValue;value" + ImmutableSortedMap out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedMap.of(null, null, in, null, null, null, null, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap;true;of;;;Argument[2];MapKey of ReturnValue;value" + ImmutableSortedMap out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedMap.of(null, null, in, null, null, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap;true;of;;;Argument[2];MapKey of ReturnValue;value" + ImmutableSortedMap out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedMap.of(null, null, in, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap;true;of;;;Argument[2];MapKey of ReturnValue;value" + ImmutableMap out = null; + Object in = (Object)source(); + out = ImmutableMap.of(null, null, in, null, null, null, null, null, null, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap;true;of;;;Argument[2];MapKey of ReturnValue;value" + ImmutableMap out = null; + Object in = (Object)source(); + out = ImmutableMap.of(null, null, in, null, null, null, null, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap;true;of;;;Argument[2];MapKey of ReturnValue;value" + ImmutableMap out = null; + Object in = (Object)source(); + out = ImmutableMap.of(null, null, in, null, null, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap;true;of;;;Argument[2];MapKey of ReturnValue;value" + ImmutableMap out = null; + Object in = (Object)source(); + out = ImmutableMap.of(null, null, in, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap;true;of;;;Argument[3];MapValue of ReturnValue;value" + ImmutableSortedMap out = null; + Object in = (Object)source(); + out = ImmutableSortedMapFauxverideShim.of(null, null, null, in, null, null, null, null, null, null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap;true;of;;;Argument[3];MapValue of ReturnValue;value" + ImmutableSortedMap out = null; + Object in = (Object)source(); + out = ImmutableSortedMapFauxverideShim.of(null, null, null, in, null, null, null, null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap;true;of;;;Argument[3];MapValue of ReturnValue;value" + ImmutableSortedMap out = null; + Object in = (Object)source(); + out = ImmutableSortedMapFauxverideShim.of(null, null, null, in, null, null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap;true;of;;;Argument[3];MapValue of ReturnValue;value" + ImmutableSortedMap out = null; + Object in = (Object)source(); + out = ImmutableSortedMapFauxverideShim.of(null, null, null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap;true;of;;;Argument[3];MapValue of ReturnValue;value" + ImmutableSortedMap out = null; + Object in = (Object)source(); + out = ImmutableSortedMap.of(null, null, null, in, null, null, null, null, null, null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap;true;of;;;Argument[3];MapValue of ReturnValue;value" + ImmutableSortedMap out = null; + Object in = (Object)source(); + out = ImmutableSortedMap.of(null, null, null, in, null, null, null, null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap;true;of;;;Argument[3];MapValue of ReturnValue;value" + ImmutableSortedMap out = null; + Object in = (Object)source(); + out = ImmutableSortedMap.of(null, null, null, in, null, null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap;true;of;;;Argument[3];MapValue of ReturnValue;value" + ImmutableSortedMap out = null; + Object in = (Object)source(); + out = ImmutableSortedMap.of(null, null, null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap;true;of;;;Argument[3];MapValue of ReturnValue;value" + ImmutableMap out = null; + Object in = (Object)source(); + out = ImmutableMap.of(null, null, null, in, null, null, null, null, null, null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap;true;of;;;Argument[3];MapValue of ReturnValue;value" + ImmutableMap out = null; + Object in = (Object)source(); + out = ImmutableMap.of(null, null, null, in, null, null, null, null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap;true;of;;;Argument[3];MapValue of ReturnValue;value" + ImmutableMap out = null; + Object in = (Object)source(); + out = ImmutableMap.of(null, null, null, in, null, null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap;true;of;;;Argument[3];MapValue of ReturnValue;value" + ImmutableMap out = null; + Object in = (Object)source(); + out = ImmutableMap.of(null, null, null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap;true;of;;;Argument[4];MapKey of ReturnValue;value" + ImmutableSortedMap out = null; + Object in = (Object)source(); + out = ImmutableSortedMapFauxverideShim.of(null, null, null, null, in, null, null, null, null, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap;true;of;;;Argument[4];MapKey of ReturnValue;value" + ImmutableSortedMap out = null; + Object in = (Object)source(); + out = ImmutableSortedMapFauxverideShim.of(null, null, null, null, in, null, null, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap;true;of;;;Argument[4];MapKey of ReturnValue;value" + ImmutableSortedMap out = null; + Object in = (Object)source(); + out = ImmutableSortedMapFauxverideShim.of(null, null, null, null, in, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap;true;of;;;Argument[4];MapKey of ReturnValue;value" + ImmutableSortedMap out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedMap.of(null, null, null, null, in, null, null, null, null, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap;true;of;;;Argument[4];MapKey of ReturnValue;value" + ImmutableSortedMap out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedMap.of(null, null, null, null, in, null, null, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap;true;of;;;Argument[4];MapKey of ReturnValue;value" + ImmutableSortedMap out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedMap.of(null, null, null, null, in, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap;true;of;;;Argument[4];MapKey of ReturnValue;value" + ImmutableMap out = null; + Object in = (Object)source(); + out = ImmutableMap.of(null, null, null, null, in, null, null, null, null, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap;true;of;;;Argument[4];MapKey of ReturnValue;value" + ImmutableMap out = null; + Object in = (Object)source(); + out = ImmutableMap.of(null, null, null, null, in, null, null, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap;true;of;;;Argument[4];MapKey of ReturnValue;value" + ImmutableMap out = null; + Object in = (Object)source(); + out = ImmutableMap.of(null, null, null, null, in, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap;true;of;;;Argument[5];MapValue of ReturnValue;value" + ImmutableSortedMap out = null; + Object in = (Object)source(); + out = ImmutableSortedMapFauxverideShim.of(null, null, null, null, null, in, null, null, null, null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap;true;of;;;Argument[5];MapValue of ReturnValue;value" + ImmutableSortedMap out = null; + Object in = (Object)source(); + out = ImmutableSortedMapFauxverideShim.of(null, null, null, null, null, in, null, null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap;true;of;;;Argument[5];MapValue of ReturnValue;value" + ImmutableSortedMap out = null; + Object in = (Object)source(); + out = ImmutableSortedMapFauxverideShim.of(null, null, null, null, null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap;true;of;;;Argument[5];MapValue of ReturnValue;value" + ImmutableSortedMap out = null; + Object in = (Object)source(); + out = ImmutableSortedMap.of(null, null, null, null, null, in, null, null, null, null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap;true;of;;;Argument[5];MapValue of ReturnValue;value" + ImmutableSortedMap out = null; + Object in = (Object)source(); + out = ImmutableSortedMap.of(null, null, null, null, null, in, null, null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap;true;of;;;Argument[5];MapValue of ReturnValue;value" + ImmutableSortedMap out = null; + Object in = (Object)source(); + out = ImmutableSortedMap.of(null, null, null, null, null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap;true;of;;;Argument[5];MapValue of ReturnValue;value" + ImmutableMap out = null; + Object in = (Object)source(); + out = ImmutableMap.of(null, null, null, null, null, in, null, null, null, null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap;true;of;;;Argument[5];MapValue of ReturnValue;value" + ImmutableMap out = null; + Object in = (Object)source(); + out = ImmutableMap.of(null, null, null, null, null, in, null, null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap;true;of;;;Argument[5];MapValue of ReturnValue;value" + ImmutableMap out = null; + Object in = (Object)source(); + out = ImmutableMap.of(null, null, null, null, null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap;true;of;;;Argument[6];MapKey of ReturnValue;value" + ImmutableSortedMap out = null; + Object in = (Object)source(); + out = ImmutableSortedMapFauxverideShim.of(null, null, null, null, null, null, in, null, null, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap;true;of;;;Argument[6];MapKey of ReturnValue;value" + ImmutableSortedMap out = null; + Object in = (Object)source(); + out = ImmutableSortedMapFauxverideShim.of(null, null, null, null, null, null, in, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap;true;of;;;Argument[6];MapKey of ReturnValue;value" + ImmutableSortedMap out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedMap.of(null, null, null, null, null, null, in, null, null, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap;true;of;;;Argument[6];MapKey of ReturnValue;value" + ImmutableSortedMap out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedMap.of(null, null, null, null, null, null, in, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap;true;of;;;Argument[6];MapKey of ReturnValue;value" + ImmutableMap out = null; + Object in = (Object)source(); + out = ImmutableMap.of(null, null, null, null, null, null, in, null, null, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap;true;of;;;Argument[6];MapKey of ReturnValue;value" + ImmutableMap out = null; + Object in = (Object)source(); + out = ImmutableMap.of(null, null, null, null, null, null, in, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap;true;of;;;Argument[7];MapValue of ReturnValue;value" + ImmutableSortedMap out = null; + Object in = (Object)source(); + out = ImmutableSortedMapFauxverideShim.of(null, null, null, null, null, null, null, in, null, null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap;true;of;;;Argument[7];MapValue of ReturnValue;value" + ImmutableSortedMap out = null; + Object in = (Object)source(); + out = ImmutableSortedMapFauxverideShim.of(null, null, null, null, null, null, null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap;true;of;;;Argument[7];MapValue of ReturnValue;value" + ImmutableSortedMap out = null; + Object in = (Object)source(); + out = ImmutableSortedMap.of(null, null, null, null, null, null, null, in, null, null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap;true;of;;;Argument[7];MapValue of ReturnValue;value" + ImmutableSortedMap out = null; + Object in = (Object)source(); + out = ImmutableSortedMap.of(null, null, null, null, null, null, null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap;true;of;;;Argument[7];MapValue of ReturnValue;value" + ImmutableMap out = null; + Object in = (Object)source(); + out = ImmutableMap.of(null, null, null, null, null, null, null, in, null, null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap;true;of;;;Argument[7];MapValue of ReturnValue;value" + ImmutableMap out = null; + Object in = (Object)source(); + out = ImmutableMap.of(null, null, null, null, null, null, null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap;true;of;;;Argument[8];MapKey of ReturnValue;value" + ImmutableSortedMap out = null; + Object in = (Object)source(); + out = ImmutableSortedMapFauxverideShim.of(null, null, null, null, null, null, null, null, in, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap;true;of;;;Argument[8];MapKey of ReturnValue;value" + ImmutableSortedMap out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedMap.of(null, null, null, null, null, null, null, null, in, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap;true;of;;;Argument[8];MapKey of ReturnValue;value" + ImmutableMap out = null; + Object in = (Object)source(); + out = ImmutableMap.of(null, null, null, null, null, null, null, null, in, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap;true;of;;;Argument[9];MapValue of ReturnValue;value" + ImmutableSortedMap out = null; + Object in = (Object)source(); + out = ImmutableSortedMapFauxverideShim.of(null, null, null, null, null, null, null, null, null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap;true;of;;;Argument[9];MapValue of ReturnValue;value" + ImmutableSortedMap out = null; + Object in = (Object)source(); + out = ImmutableSortedMap.of(null, null, null, null, null, null, null, null, null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap;true;of;;;Argument[9];MapValue of ReturnValue;value" + ImmutableMap out = null; + Object in = (Object)source(); + out = ImmutableMap.of(null, null, null, null, null, null, null, null, null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap$Builder;true;build;();;MapKey of Argument[-1];MapKey of ReturnValue;value" + ImmutableSetMultimap out = null; + ImmutableSetMultimap.Builder in = (ImmutableSetMultimap.Builder)newWithMapKey(source()); + out = in.build(); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap$Builder;true;build;();;MapKey of Argument[-1];MapKey of ReturnValue;value" + ImmutableMultimap out = null; + ImmutableMultimap.Builder in = (ImmutableMultimap.Builder)newWithMapKey(source()); + out = in.build(); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap$Builder;true;build;();;MapKey of Argument[-1];MapKey of ReturnValue;value" + ImmutableListMultimap out = null; + ImmutableListMultimap.Builder in = (ImmutableListMultimap.Builder)newWithMapKey(source()); + out = in.build(); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap$Builder;true;build;();;MapValue of Argument[-1];MapValue of ReturnValue;value" + ImmutableSetMultimap out = null; + ImmutableSetMultimap.Builder in = (ImmutableSetMultimap.Builder)newWithMapValue(source()); + out = in.build(); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap$Builder;true;build;();;MapValue of Argument[-1];MapValue of ReturnValue;value" + ImmutableMultimap out = null; + ImmutableMultimap.Builder in = (ImmutableMultimap.Builder)newWithMapValue(source()); + out = in.build(); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap$Builder;true;build;();;MapValue of Argument[-1];MapValue of ReturnValue;value" + ImmutableListMultimap out = null; + ImmutableListMultimap.Builder in = (ImmutableListMultimap.Builder)newWithMapValue(source()); + out = in.build(); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap$Builder;true;orderKeysBy;(Comparator);;Argument[-1];ReturnValue;value" + ImmutableSetMultimap.Builder out = null; + ImmutableSetMultimap.Builder in = (ImmutableSetMultimap.Builder)source(); + out = in.orderKeysBy(null); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap$Builder;true;orderKeysBy;(Comparator);;Argument[-1];ReturnValue;value" + ImmutableMultimap.Builder out = null; + ImmutableMultimap.Builder in = (ImmutableMultimap.Builder)source(); + out = in.orderKeysBy(null); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap$Builder;true;orderKeysBy;(Comparator);;Argument[-1];ReturnValue;value" + ImmutableMultimap.Builder out = null; + ImmutableMultimap.Builder in = (ImmutableMultimap.Builder)source(); + out = in.orderKeysBy((Comparator)null); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap$Builder;true;orderKeysBy;(Comparator);;Argument[-1];ReturnValue;value" + ImmutableListMultimap.Builder out = null; + ImmutableListMultimap.Builder in = (ImmutableListMultimap.Builder)source(); + out = in.orderKeysBy(null); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap$Builder;true;orderValuesBy;(Comparator);;Argument[-1];ReturnValue;value" + ImmutableSetMultimap.Builder out = null; + ImmutableSetMultimap.Builder in = (ImmutableSetMultimap.Builder)source(); + out = in.orderValuesBy(null); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap$Builder;true;orderValuesBy;(Comparator);;Argument[-1];ReturnValue;value" + ImmutableMultimap.Builder out = null; + ImmutableMultimap.Builder in = (ImmutableMultimap.Builder)source(); + out = in.orderValuesBy(null); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap$Builder;true;orderValuesBy;(Comparator);;Argument[-1];ReturnValue;value" + ImmutableMultimap.Builder out = null; + ImmutableMultimap.Builder in = (ImmutableMultimap.Builder)source(); + out = in.orderValuesBy((Comparator)null); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap$Builder;true;orderValuesBy;(Comparator);;Argument[-1];ReturnValue;value" + ImmutableListMultimap.Builder out = null; + ImmutableListMultimap.Builder in = (ImmutableListMultimap.Builder)source(); + out = in.orderValuesBy(null); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap$Builder;true;put;(Entry);;MapKey of Argument[0];MapKey of Argument[-1];value" + ImmutableSetMultimap.Builder out = null; + Map.Entry in = (Map.Entry)newWithMapKey(source()); + out.put(in); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap$Builder;true;put;(Entry);;MapKey of Argument[0];MapKey of Argument[-1];value" + ImmutableMultimap.Builder out = null; + Map.Entry in = (Map.Entry)newWithMapKey(source()); + out.put(in); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap$Builder;true;put;(Entry);;MapKey of Argument[0];MapKey of Argument[-1];value" + ImmutableListMultimap.Builder out = null; + Map.Entry in = (Map.Entry)newWithMapKey(source()); + out.put(in); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap$Builder;true;put;(Entry);;MapValue of Argument[0];MapValue of Argument[-1];value" + ImmutableSetMultimap.Builder out = null; + Map.Entry in = (Map.Entry)newWithMapValue(source()); + out.put(in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap$Builder;true;put;(Entry);;MapValue of Argument[0];MapValue of Argument[-1];value" + ImmutableMultimap.Builder out = null; + Map.Entry in = (Map.Entry)newWithMapValue(source()); + out.put(in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap$Builder;true;put;(Entry);;MapValue of Argument[0];MapValue of Argument[-1];value" + ImmutableListMultimap.Builder out = null; + Map.Entry in = (Map.Entry)newWithMapValue(source()); + out.put(in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap$Builder;true;put;(Object,Object);;Argument[0];MapKey of Argument[-1];value" + ImmutableSetMultimap.Builder out = null; + Object in = (Object)source(); + out.put(in, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap$Builder;true;put;(Object,Object);;Argument[0];MapKey of Argument[-1];value" + ImmutableMultimap.Builder out = null; + Object in = (Object)source(); + out.put(in, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap$Builder;true;put;(Object,Object);;Argument[0];MapKey of Argument[-1];value" + ImmutableMultimap.Builder out = null; + Object in = (Object)source(); + out.put(in, (Object)null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap$Builder;true;put;(Object,Object);;Argument[0];MapKey of Argument[-1];value" + ImmutableListMultimap.Builder out = null; + Object in = (Object)source(); + out.put(in, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap$Builder;true;put;(Object,Object);;Argument[1];MapValue of Argument[-1];value" + ImmutableSetMultimap.Builder out = null; + Object in = (Object)source(); + out.put(null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap$Builder;true;put;(Object,Object);;Argument[1];MapValue of Argument[-1];value" + ImmutableMultimap.Builder out = null; + Object in = (Object)source(); + out.put(null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap$Builder;true;put;(Object,Object);;Argument[1];MapValue of Argument[-1];value" + ImmutableMultimap.Builder out = null; + Object in = (Object)source(); + out.put((Object)null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap$Builder;true;put;(Object,Object);;Argument[1];MapValue of Argument[-1];value" + ImmutableListMultimap.Builder out = null; + Object in = (Object)source(); + out.put(null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap$Builder;true;put;;;Argument[-1];ReturnValue;value" + ImmutableSetMultimap.Builder out = null; + ImmutableSetMultimap.Builder in = (ImmutableSetMultimap.Builder)source(); + out = in.put(null, null); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap$Builder;true;put;;;Argument[-1];ReturnValue;value" + ImmutableSetMultimap.Builder out = null; + ImmutableSetMultimap.Builder in = (ImmutableSetMultimap.Builder)source(); + out = in.put(null); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap$Builder;true;put;;;Argument[-1];ReturnValue;value" + ImmutableMultimap.Builder out = null; + ImmutableMultimap.Builder in = (ImmutableMultimap.Builder)source(); + out = in.put(null, null); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap$Builder;true;put;;;Argument[-1];ReturnValue;value" + ImmutableMultimap.Builder out = null; + ImmutableMultimap.Builder in = (ImmutableMultimap.Builder)source(); + out = in.put(null); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap$Builder;true;put;;;Argument[-1];ReturnValue;value" + ImmutableMultimap.Builder out = null; + ImmutableMultimap.Builder in = (ImmutableMultimap.Builder)source(); + out = in.put((Object)null, (Object)null); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap$Builder;true;put;;;Argument[-1];ReturnValue;value" + ImmutableMultimap.Builder out = null; + ImmutableMultimap.Builder in = (ImmutableMultimap.Builder)source(); + out = in.put((Map.Entry)null); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap$Builder;true;put;;;Argument[-1];ReturnValue;value" + ImmutableListMultimap.Builder out = null; + ImmutableListMultimap.Builder in = (ImmutableListMultimap.Builder)source(); + out = in.put(null, null); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap$Builder;true;put;;;Argument[-1];ReturnValue;value" + ImmutableListMultimap.Builder out = null; + ImmutableListMultimap.Builder in = (ImmutableListMultimap.Builder)source(); + out = in.put(null); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Iterable);;MapKey of Element of Argument[0];MapKey of Argument[-1];value" + ImmutableSetMultimap.Builder out = null; + Iterable in = (Iterable)newWithElement(newWithMapKey(source())); + out.putAll(in); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Iterable);;MapKey of Element of Argument[0];MapKey of Argument[-1];value" + ImmutableMultimap.Builder out = null; + Iterable in = (Iterable)newWithElement(newWithMapKey(source())); + out.putAll(in); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Iterable);;MapKey of Element of Argument[0];MapKey of Argument[-1];value" + ImmutableListMultimap.Builder out = null; + Iterable in = (Iterable)newWithElement(newWithMapKey(source())); + out.putAll(in); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Iterable);;MapValue of Element of Argument[0];MapValue of Argument[-1];value" + ImmutableSetMultimap.Builder out = null; + Iterable in = (Iterable)newWithElement(newWithMapValue(source())); + out.putAll(in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Iterable);;MapValue of Element of Argument[0];MapValue of Argument[-1];value" + ImmutableMultimap.Builder out = null; + Iterable in = (Iterable)newWithElement(newWithMapValue(source())); + out.putAll(in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Iterable);;MapValue of Element of Argument[0];MapValue of Argument[-1];value" + ImmutableListMultimap.Builder out = null; + Iterable in = (Iterable)newWithElement(newWithMapValue(source())); + out.putAll(in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Multimap);;MapKey of Argument[0];MapKey of Argument[-1];value" + ImmutableSetMultimap.Builder out = null; + Multimap in = (Multimap)newWithMapKey(source()); + out.putAll(in); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Multimap);;MapKey of Argument[0];MapKey of Argument[-1];value" + ImmutableMultimap.Builder out = null; + Multimap in = (Multimap)newWithMapKey(source()); + out.putAll(in); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Multimap);;MapKey of Argument[0];MapKey of Argument[-1];value" + ImmutableListMultimap.Builder out = null; + Multimap in = (Multimap)newWithMapKey(source()); + out.putAll(in); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Multimap);;MapValue of Argument[0];MapValue of Argument[-1];value" + ImmutableSetMultimap.Builder out = null; + Multimap in = (Multimap)newWithMapValue(source()); + out.putAll(in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Multimap);;MapValue of Argument[0];MapValue of Argument[-1];value" + ImmutableMultimap.Builder out = null; + Multimap in = (Multimap)newWithMapValue(source()); + out.putAll(in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Multimap);;MapValue of Argument[0];MapValue of Argument[-1];value" + ImmutableListMultimap.Builder out = null; + Multimap in = (Multimap)newWithMapValue(source()); + out.putAll(in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" + ImmutableSetMultimap.Builder out = null; + Object in = (Object)source(); + out.putAll(in, (Iterable)null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" + ImmutableMultimap.Builder out = null; + Object in = (Object)source(); + out.putAll(in, (Iterable)null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" + ImmutableListMultimap.Builder out = null; + Object in = (Object)source(); + out.putAll(in, (Iterable)null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" + ImmutableSetMultimap.Builder out = null; + Iterable in = (Iterable)newWithElement(source()); + out.putAll((Object)null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" + ImmutableMultimap.Builder out = null; + Iterable in = (Iterable)newWithElement(source()); + out.putAll((Object)null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" + ImmutableListMultimap.Builder out = null; + Iterable in = (Iterable)newWithElement(source()); + out.putAll((Object)null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;;;Argument[-1];ReturnValue;value" + ImmutableSetMultimap.Builder out = null; + ImmutableSetMultimap.Builder in = (ImmutableSetMultimap.Builder)source(); + out = in.putAll((Object)null, (Iterable)null); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;;;Argument[-1];ReturnValue;value" + ImmutableSetMultimap.Builder out = null; + ImmutableSetMultimap.Builder in = (ImmutableSetMultimap.Builder)source(); + out = in.putAll((Object)null); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;;;Argument[-1];ReturnValue;value" + ImmutableSetMultimap.Builder out = null; + ImmutableSetMultimap.Builder in = (ImmutableSetMultimap.Builder)source(); + out = in.putAll((Multimap)null); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;;;Argument[-1];ReturnValue;value" + ImmutableSetMultimap.Builder out = null; + ImmutableSetMultimap.Builder in = (ImmutableSetMultimap.Builder)source(); + out = in.putAll((Iterable)null); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;;;Argument[-1];ReturnValue;value" + ImmutableMultimap.Builder out = null; + ImmutableMultimap.Builder in = (ImmutableMultimap.Builder)source(); + out = in.putAll((Object)null, (Iterable)null); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;;;Argument[-1];ReturnValue;value" + ImmutableMultimap.Builder out = null; + ImmutableMultimap.Builder in = (ImmutableMultimap.Builder)source(); + out = in.putAll((Object)null); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;;;Argument[-1];ReturnValue;value" + ImmutableMultimap.Builder out = null; + ImmutableMultimap.Builder in = (ImmutableMultimap.Builder)source(); + out = in.putAll((Multimap)null); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;;;Argument[-1];ReturnValue;value" + ImmutableMultimap.Builder out = null; + ImmutableMultimap.Builder in = (ImmutableMultimap.Builder)source(); + out = in.putAll((Iterable)null); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;;;Argument[-1];ReturnValue;value" + ImmutableListMultimap.Builder out = null; + ImmutableListMultimap.Builder in = (ImmutableListMultimap.Builder)source(); + out = in.putAll((Object)null, (Iterable)null); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;;;Argument[-1];ReturnValue;value" + ImmutableListMultimap.Builder out = null; + ImmutableListMultimap.Builder in = (ImmutableListMultimap.Builder)source(); + out = in.putAll((Object)null); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;;;Argument[-1];ReturnValue;value" + ImmutableListMultimap.Builder out = null; + ImmutableListMultimap.Builder in = (ImmutableListMultimap.Builder)source(); + out = in.putAll((Multimap)null); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;;;Argument[-1];ReturnValue;value" + ImmutableListMultimap.Builder out = null; + ImmutableListMultimap.Builder in = (ImmutableListMultimap.Builder)source(); + out = in.putAll((Iterable)null); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;copyOf;(Iterable);;MapKey of Element of Argument[0];MapKey of ReturnValue;value" + ImmutableSetMultimap out = null; + Iterable in = (Iterable)newWithElement(newWithMapKey(source())); + out = ImmutableSetMultimap.copyOf(in); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;copyOf;(Iterable);;MapKey of Element of Argument[0];MapKey of ReturnValue;value" + ImmutableMultimap out = null; + Iterable in = (Iterable)newWithElement(newWithMapKey(source())); + out = ImmutableMultimap.copyOf(in); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;copyOf;(Iterable);;MapKey of Element of Argument[0];MapKey of ReturnValue;value" + ImmutableListMultimap out = null; + Iterable in = (Iterable)newWithElement(newWithMapKey(source())); + out = ImmutableListMultimap.copyOf(in); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;copyOf;(Iterable);;MapValue of Element of Argument[0];MapValue of ReturnValue;value" + ImmutableSetMultimap out = null; + Iterable in = (Iterable)newWithElement(newWithMapValue(source())); + out = ImmutableSetMultimap.copyOf(in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;copyOf;(Iterable);;MapValue of Element of Argument[0];MapValue of ReturnValue;value" + ImmutableMultimap out = null; + Iterable in = (Iterable)newWithElement(newWithMapValue(source())); + out = ImmutableMultimap.copyOf(in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;copyOf;(Iterable);;MapValue of Element of Argument[0];MapValue of ReturnValue;value" + ImmutableListMultimap out = null; + Iterable in = (Iterable)newWithElement(newWithMapValue(source())); + out = ImmutableListMultimap.copyOf(in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;copyOf;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value" + ImmutableSetMultimap out = null; + Multimap in = (Multimap)newWithMapKey(source()); + out = ImmutableSetMultimap.copyOf(in); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;copyOf;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value" + ImmutableMultimap out = null; + Multimap in = (Multimap)newWithMapKey(source()); + out = ImmutableMultimap.copyOf(in); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;copyOf;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value" + ImmutableListMultimap out = null; + Multimap in = (Multimap)newWithMapKey(source()); + out = ImmutableListMultimap.copyOf(in); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;copyOf;(Multimap);;MapValue of Argument[0];MapValue of ReturnValue;value" + ImmutableSetMultimap out = null; + Multimap in = (Multimap)newWithMapValue(source()); + out = ImmutableSetMultimap.copyOf(in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;copyOf;(Multimap);;MapValue of Argument[0];MapValue of ReturnValue;value" + ImmutableMultimap out = null; + Multimap in = (Multimap)newWithMapValue(source()); + out = ImmutableMultimap.copyOf(in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;copyOf;(Multimap);;MapValue of Argument[0];MapValue of ReturnValue;value" + ImmutableListMultimap out = null; + Multimap in = (Multimap)newWithMapValue(source()); + out = ImmutableListMultimap.copyOf(in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;inverse;();;MapKey of Argument[-1];MapValue of ReturnValue;value" + ImmutableSetMultimap out = null; + ImmutableSetMultimap in = (ImmutableSetMultimap)newWithMapKey(source()); + out = in.inverse(); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;inverse;();;MapKey of Argument[-1];MapValue of ReturnValue;value" + ImmutableMultimap out = null; + ImmutableMultimap in = (ImmutableMultimap)newWithMapKey(source()); + out = in.inverse(); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;inverse;();;MapKey of Argument[-1];MapValue of ReturnValue;value" + ImmutableListMultimap out = null; + ImmutableListMultimap in = (ImmutableListMultimap)newWithMapKey(source()); + out = in.inverse(); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;inverse;();;MapValue of Argument[-1];MapKey of ReturnValue;value" + ImmutableSetMultimap out = null; + ImmutableSetMultimap in = (ImmutableSetMultimap)newWithMapValue(source()); + out = in.inverse(); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;inverse;();;MapValue of Argument[-1];MapKey of ReturnValue;value" + ImmutableMultimap out = null; + ImmutableMultimap in = (ImmutableMultimap)newWithMapValue(source()); + out = in.inverse(); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;inverse;();;MapValue of Argument[-1];MapKey of ReturnValue;value" + ImmutableListMultimap out = null; + ImmutableListMultimap in = (ImmutableListMultimap)newWithMapValue(source()); + out = in.inverse(); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[0];MapKey of ReturnValue;value" + ImmutableSetMultimap out = null; + Object in = (Object)source(); + out = ImmutableSetMultimap.of(in, null, null, null, null, null, null, null, null, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[0];MapKey of ReturnValue;value" + ImmutableSetMultimap out = null; + Object in = (Object)source(); + out = ImmutableSetMultimap.of(in, null, null, null, null, null, null, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[0];MapKey of ReturnValue;value" + ImmutableSetMultimap out = null; + Object in = (Object)source(); + out = ImmutableSetMultimap.of(in, null, null, null, null, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[0];MapKey of ReturnValue;value" + ImmutableSetMultimap out = null; + Object in = (Object)source(); + out = ImmutableSetMultimap.of(in, null, null, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[0];MapKey of ReturnValue;value" + ImmutableSetMultimap out = null; + Object in = (Object)source(); + out = ImmutableSetMultimap.of(in, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[0];MapKey of ReturnValue;value" + ImmutableMultimap out = null; + Object in = (Object)source(); + out = ImmutableMultimap.of(in, null, null, null, null, null, null, null, null, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[0];MapKey of ReturnValue;value" + ImmutableMultimap out = null; + Object in = (Object)source(); + out = ImmutableMultimap.of(in, null, null, null, null, null, null, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[0];MapKey of ReturnValue;value" + ImmutableMultimap out = null; + Object in = (Object)source(); + out = ImmutableMultimap.of(in, null, null, null, null, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[0];MapKey of ReturnValue;value" + ImmutableMultimap out = null; + Object in = (Object)source(); + out = ImmutableMultimap.of(in, null, null, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[0];MapKey of ReturnValue;value" + ImmutableMultimap out = null; + Object in = (Object)source(); + out = ImmutableMultimap.of(in, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[0];MapKey of ReturnValue;value" + ImmutableListMultimap out = null; + Object in = (Object)source(); + out = ImmutableListMultimap.of(in, null, null, null, null, null, null, null, null, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[0];MapKey of ReturnValue;value" + ImmutableListMultimap out = null; + Object in = (Object)source(); + out = ImmutableListMultimap.of(in, null, null, null, null, null, null, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[0];MapKey of ReturnValue;value" + ImmutableListMultimap out = null; + Object in = (Object)source(); + out = ImmutableListMultimap.of(in, null, null, null, null, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[0];MapKey of ReturnValue;value" + ImmutableListMultimap out = null; + Object in = (Object)source(); + out = ImmutableListMultimap.of(in, null, null, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[0];MapKey of ReturnValue;value" + ImmutableListMultimap out = null; + Object in = (Object)source(); + out = ImmutableListMultimap.of(in, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[1];MapValue of ReturnValue;value" + ImmutableSetMultimap out = null; + Object in = (Object)source(); + out = ImmutableSetMultimap.of(null, in, null, null, null, null, null, null, null, null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[1];MapValue of ReturnValue;value" + ImmutableSetMultimap out = null; + Object in = (Object)source(); + out = ImmutableSetMultimap.of(null, in, null, null, null, null, null, null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[1];MapValue of ReturnValue;value" + ImmutableSetMultimap out = null; + Object in = (Object)source(); + out = ImmutableSetMultimap.of(null, in, null, null, null, null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[1];MapValue of ReturnValue;value" + ImmutableSetMultimap out = null; + Object in = (Object)source(); + out = ImmutableSetMultimap.of(null, in, null, null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[1];MapValue of ReturnValue;value" + ImmutableSetMultimap out = null; + Object in = (Object)source(); + out = ImmutableSetMultimap.of(null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[1];MapValue of ReturnValue;value" + ImmutableMultimap out = null; + Object in = (Object)source(); + out = ImmutableMultimap.of(null, in, null, null, null, null, null, null, null, null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[1];MapValue of ReturnValue;value" + ImmutableMultimap out = null; + Object in = (Object)source(); + out = ImmutableMultimap.of(null, in, null, null, null, null, null, null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[1];MapValue of ReturnValue;value" + ImmutableMultimap out = null; + Object in = (Object)source(); + out = ImmutableMultimap.of(null, in, null, null, null, null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[1];MapValue of ReturnValue;value" + ImmutableMultimap out = null; + Object in = (Object)source(); + out = ImmutableMultimap.of(null, in, null, null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[1];MapValue of ReturnValue;value" + ImmutableMultimap out = null; + Object in = (Object)source(); + out = ImmutableMultimap.of(null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[1];MapValue of ReturnValue;value" + ImmutableListMultimap out = null; + Object in = (Object)source(); + out = ImmutableListMultimap.of(null, in, null, null, null, null, null, null, null, null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[1];MapValue of ReturnValue;value" + ImmutableListMultimap out = null; + Object in = (Object)source(); + out = ImmutableListMultimap.of(null, in, null, null, null, null, null, null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[1];MapValue of ReturnValue;value" + ImmutableListMultimap out = null; + Object in = (Object)source(); + out = ImmutableListMultimap.of(null, in, null, null, null, null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[1];MapValue of ReturnValue;value" + ImmutableListMultimap out = null; + Object in = (Object)source(); + out = ImmutableListMultimap.of(null, in, null, null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[1];MapValue of ReturnValue;value" + ImmutableListMultimap out = null; + Object in = (Object)source(); + out = ImmutableListMultimap.of(null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[2];MapKey of ReturnValue;value" + ImmutableSetMultimap out = null; + Object in = (Object)source(); + out = ImmutableSetMultimap.of(null, null, in, null, null, null, null, null, null, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[2];MapKey of ReturnValue;value" + ImmutableSetMultimap out = null; + Object in = (Object)source(); + out = ImmutableSetMultimap.of(null, null, in, null, null, null, null, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[2];MapKey of ReturnValue;value" + ImmutableSetMultimap out = null; + Object in = (Object)source(); + out = ImmutableSetMultimap.of(null, null, in, null, null, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[2];MapKey of ReturnValue;value" + ImmutableSetMultimap out = null; + Object in = (Object)source(); + out = ImmutableSetMultimap.of(null, null, in, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[2];MapKey of ReturnValue;value" + ImmutableMultimap out = null; + Object in = (Object)source(); + out = ImmutableMultimap.of(null, null, in, null, null, null, null, null, null, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[2];MapKey of ReturnValue;value" + ImmutableMultimap out = null; + Object in = (Object)source(); + out = ImmutableMultimap.of(null, null, in, null, null, null, null, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[2];MapKey of ReturnValue;value" + ImmutableMultimap out = null; + Object in = (Object)source(); + out = ImmutableMultimap.of(null, null, in, null, null, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[2];MapKey of ReturnValue;value" + ImmutableMultimap out = null; + Object in = (Object)source(); + out = ImmutableMultimap.of(null, null, in, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[2];MapKey of ReturnValue;value" + ImmutableListMultimap out = null; + Object in = (Object)source(); + out = ImmutableListMultimap.of(null, null, in, null, null, null, null, null, null, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[2];MapKey of ReturnValue;value" + ImmutableListMultimap out = null; + Object in = (Object)source(); + out = ImmutableListMultimap.of(null, null, in, null, null, null, null, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[2];MapKey of ReturnValue;value" + ImmutableListMultimap out = null; + Object in = (Object)source(); + out = ImmutableListMultimap.of(null, null, in, null, null, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[2];MapKey of ReturnValue;value" + ImmutableListMultimap out = null; + Object in = (Object)source(); + out = ImmutableListMultimap.of(null, null, in, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[3];MapValue of ReturnValue;value" + ImmutableSetMultimap out = null; + Object in = (Object)source(); + out = ImmutableSetMultimap.of(null, null, null, in, null, null, null, null, null, null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[3];MapValue of ReturnValue;value" + ImmutableSetMultimap out = null; + Object in = (Object)source(); + out = ImmutableSetMultimap.of(null, null, null, in, null, null, null, null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[3];MapValue of ReturnValue;value" + ImmutableSetMultimap out = null; + Object in = (Object)source(); + out = ImmutableSetMultimap.of(null, null, null, in, null, null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[3];MapValue of ReturnValue;value" + ImmutableSetMultimap out = null; + Object in = (Object)source(); + out = ImmutableSetMultimap.of(null, null, null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[3];MapValue of ReturnValue;value" + ImmutableMultimap out = null; + Object in = (Object)source(); + out = ImmutableMultimap.of(null, null, null, in, null, null, null, null, null, null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[3];MapValue of ReturnValue;value" + ImmutableMultimap out = null; + Object in = (Object)source(); + out = ImmutableMultimap.of(null, null, null, in, null, null, null, null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[3];MapValue of ReturnValue;value" + ImmutableMultimap out = null; + Object in = (Object)source(); + out = ImmutableMultimap.of(null, null, null, in, null, null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[3];MapValue of ReturnValue;value" + ImmutableMultimap out = null; + Object in = (Object)source(); + out = ImmutableMultimap.of(null, null, null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[3];MapValue of ReturnValue;value" + ImmutableListMultimap out = null; + Object in = (Object)source(); + out = ImmutableListMultimap.of(null, null, null, in, null, null, null, null, null, null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[3];MapValue of ReturnValue;value" + ImmutableListMultimap out = null; + Object in = (Object)source(); + out = ImmutableListMultimap.of(null, null, null, in, null, null, null, null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[3];MapValue of ReturnValue;value" + ImmutableListMultimap out = null; + Object in = (Object)source(); + out = ImmutableListMultimap.of(null, null, null, in, null, null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[3];MapValue of ReturnValue;value" + ImmutableListMultimap out = null; + Object in = (Object)source(); + out = ImmutableListMultimap.of(null, null, null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[4];MapKey of ReturnValue;value" + ImmutableSetMultimap out = null; + Object in = (Object)source(); + out = ImmutableSetMultimap.of(null, null, null, null, in, null, null, null, null, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[4];MapKey of ReturnValue;value" + ImmutableSetMultimap out = null; + Object in = (Object)source(); + out = ImmutableSetMultimap.of(null, null, null, null, in, null, null, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[4];MapKey of ReturnValue;value" + ImmutableSetMultimap out = null; + Object in = (Object)source(); + out = ImmutableSetMultimap.of(null, null, null, null, in, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[4];MapKey of ReturnValue;value" + ImmutableMultimap out = null; + Object in = (Object)source(); + out = ImmutableMultimap.of(null, null, null, null, in, null, null, null, null, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[4];MapKey of ReturnValue;value" + ImmutableMultimap out = null; + Object in = (Object)source(); + out = ImmutableMultimap.of(null, null, null, null, in, null, null, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[4];MapKey of ReturnValue;value" + ImmutableMultimap out = null; + Object in = (Object)source(); + out = ImmutableMultimap.of(null, null, null, null, in, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[4];MapKey of ReturnValue;value" + ImmutableListMultimap out = null; + Object in = (Object)source(); + out = ImmutableListMultimap.of(null, null, null, null, in, null, null, null, null, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[4];MapKey of ReturnValue;value" + ImmutableListMultimap out = null; + Object in = (Object)source(); + out = ImmutableListMultimap.of(null, null, null, null, in, null, null, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[4];MapKey of ReturnValue;value" + ImmutableListMultimap out = null; + Object in = (Object)source(); + out = ImmutableListMultimap.of(null, null, null, null, in, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[5];MapValue of ReturnValue;value" + ImmutableSetMultimap out = null; + Object in = (Object)source(); + out = ImmutableSetMultimap.of(null, null, null, null, null, in, null, null, null, null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[5];MapValue of ReturnValue;value" + ImmutableSetMultimap out = null; + Object in = (Object)source(); + out = ImmutableSetMultimap.of(null, null, null, null, null, in, null, null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[5];MapValue of ReturnValue;value" + ImmutableSetMultimap out = null; + Object in = (Object)source(); + out = ImmutableSetMultimap.of(null, null, null, null, null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[5];MapValue of ReturnValue;value" + ImmutableMultimap out = null; + Object in = (Object)source(); + out = ImmutableMultimap.of(null, null, null, null, null, in, null, null, null, null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[5];MapValue of ReturnValue;value" + ImmutableMultimap out = null; + Object in = (Object)source(); + out = ImmutableMultimap.of(null, null, null, null, null, in, null, null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[5];MapValue of ReturnValue;value" + ImmutableMultimap out = null; + Object in = (Object)source(); + out = ImmutableMultimap.of(null, null, null, null, null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[5];MapValue of ReturnValue;value" + ImmutableListMultimap out = null; + Object in = (Object)source(); + out = ImmutableListMultimap.of(null, null, null, null, null, in, null, null, null, null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[5];MapValue of ReturnValue;value" + ImmutableListMultimap out = null; + Object in = (Object)source(); + out = ImmutableListMultimap.of(null, null, null, null, null, in, null, null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[5];MapValue of ReturnValue;value" + ImmutableListMultimap out = null; + Object in = (Object)source(); + out = ImmutableListMultimap.of(null, null, null, null, null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[6];MapKey of ReturnValue;value" + ImmutableSetMultimap out = null; + Object in = (Object)source(); + out = ImmutableSetMultimap.of(null, null, null, null, null, null, in, null, null, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[6];MapKey of ReturnValue;value" + ImmutableSetMultimap out = null; + Object in = (Object)source(); + out = ImmutableSetMultimap.of(null, null, null, null, null, null, in, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[6];MapKey of ReturnValue;value" + ImmutableMultimap out = null; + Object in = (Object)source(); + out = ImmutableMultimap.of(null, null, null, null, null, null, in, null, null, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[6];MapKey of ReturnValue;value" + ImmutableMultimap out = null; + Object in = (Object)source(); + out = ImmutableMultimap.of(null, null, null, null, null, null, in, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[6];MapKey of ReturnValue;value" + ImmutableListMultimap out = null; + Object in = (Object)source(); + out = ImmutableListMultimap.of(null, null, null, null, null, null, in, null, null, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[6];MapKey of ReturnValue;value" + ImmutableListMultimap out = null; + Object in = (Object)source(); + out = ImmutableListMultimap.of(null, null, null, null, null, null, in, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[7];MapValue of ReturnValue;value" + ImmutableSetMultimap out = null; + Object in = (Object)source(); + out = ImmutableSetMultimap.of(null, null, null, null, null, null, null, in, null, null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[7];MapValue of ReturnValue;value" + ImmutableSetMultimap out = null; + Object in = (Object)source(); + out = ImmutableSetMultimap.of(null, null, null, null, null, null, null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[7];MapValue of ReturnValue;value" + ImmutableMultimap out = null; + Object in = (Object)source(); + out = ImmutableMultimap.of(null, null, null, null, null, null, null, in, null, null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[7];MapValue of ReturnValue;value" + ImmutableMultimap out = null; + Object in = (Object)source(); + out = ImmutableMultimap.of(null, null, null, null, null, null, null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[7];MapValue of ReturnValue;value" + ImmutableListMultimap out = null; + Object in = (Object)source(); + out = ImmutableListMultimap.of(null, null, null, null, null, null, null, in, null, null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[7];MapValue of ReturnValue;value" + ImmutableListMultimap out = null; + Object in = (Object)source(); + out = ImmutableListMultimap.of(null, null, null, null, null, null, null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[8];MapKey of ReturnValue;value" + ImmutableSetMultimap out = null; + Object in = (Object)source(); + out = ImmutableSetMultimap.of(null, null, null, null, null, null, null, null, in, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[8];MapKey of ReturnValue;value" + ImmutableMultimap out = null; + Object in = (Object)source(); + out = ImmutableMultimap.of(null, null, null, null, null, null, null, null, in, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[8];MapKey of ReturnValue;value" + ImmutableListMultimap out = null; + Object in = (Object)source(); + out = ImmutableListMultimap.of(null, null, null, null, null, null, null, null, in, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[9];MapValue of ReturnValue;value" + ImmutableSetMultimap out = null; + Object in = (Object)source(); + out = ImmutableSetMultimap.of(null, null, null, null, null, null, null, null, null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[9];MapValue of ReturnValue;value" + ImmutableMultimap out = null; + Object in = (Object)source(); + out = ImmutableMultimap.of(null, null, null, null, null, null, null, null, null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[9];MapValue of ReturnValue;value" + ImmutableListMultimap out = null; + Object in = (Object)source(); + out = ImmutableListMultimap.of(null, null, null, null, null, null, null, null, null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultiset$Builder;true;addCopies;(Object,int);;Argument[-1];ReturnValue;value" + ImmutableSortedMultiset.Builder out = null; + ImmutableSortedMultiset.Builder in = (ImmutableSortedMultiset.Builder)source(); + out = in.addCopies(null, 0); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultiset$Builder;true;addCopies;(Object,int);;Argument[-1];ReturnValue;value" + ImmutableMultiset.Builder out = null; + ImmutableMultiset.Builder in = (ImmutableMultiset.Builder)source(); + out = in.addCopies(null, 0); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultiset$Builder;true;addCopies;(Object,int);;Argument[0];Element of Argument[-1];value" + ImmutableSortedMultiset.Builder out = null; + Object in = (Object)source(); + out.addCopies(in, 0); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultiset$Builder;true;addCopies;(Object,int);;Argument[0];Element of Argument[-1];value" + ImmutableMultiset.Builder out = null; + Object in = (Object)source(); + out.addCopies(in, 0); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultiset;true;copyOf;(Iterable);;Element of Argument[0];Element of ReturnValue;value" + ImmutableSortedMultiset out = null; + Iterable in = (Iterable)newWithElement(source()); + out = ImmutableSortedMultiset.copyOf(in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultiset;true;copyOf;(Iterable);;Element of Argument[0];Element of ReturnValue;value" + ImmutableMultiset out = null; + Iterable in = (Iterable)newWithElement(source()); + out = ImmutableMultiset.copyOf(in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultiset;true;copyOf;(Iterator);;Element of Argument[0];Element of ReturnValue;value" + ImmutableSortedMultiset out = null; + Iterator in = (Iterator)newWithElement(source()); + out = ImmutableSortedMultiset.copyOf(in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultiset;true;copyOf;(Iterator);;Element of Argument[0];Element of ReturnValue;value" + ImmutableMultiset out = null; + Iterator in = (Iterator)newWithElement(source()); + out = ImmutableMultiset.copyOf(in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedMultiset out = null; + Object in = (Object)source(); + out = ImmutableSortedMultisetFauxverideShim.of(null, null, null, null, null, in, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedMultiset out = null; + Object in = (Object)source(); + out = ImmutableSortedMultisetFauxverideShim.of(null, null, null, null, in, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedMultiset out = null; + Object in = (Object)source(); + out = ImmutableSortedMultisetFauxverideShim.of(null, null, null, null, in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedMultiset out = null; + Object in = (Object)source(); + out = ImmutableSortedMultisetFauxverideShim.of(null, null, null, in, null, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedMultiset out = null; + Object in = (Object)source(); + out = ImmutableSortedMultisetFauxverideShim.of(null, null, null, in, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedMultiset out = null; + Object in = (Object)source(); + out = ImmutableSortedMultisetFauxverideShim.of(null, null, null, in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedMultiset out = null; + Object in = (Object)source(); + out = ImmutableSortedMultisetFauxverideShim.of(null, null, in, null, null, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedMultiset out = null; + Object in = (Object)source(); + out = ImmutableSortedMultisetFauxverideShim.of(null, null, in, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedMultiset out = null; + Object in = (Object)source(); + out = ImmutableSortedMultisetFauxverideShim.of(null, null, in, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedMultiset out = null; + Object in = (Object)source(); + out = ImmutableSortedMultisetFauxverideShim.of(null, null, in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedMultiset out = null; + Object in = (Object)source(); + out = ImmutableSortedMultisetFauxverideShim.of(null, in, null, null, null, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedMultiset out = null; + Object in = (Object)source(); + out = ImmutableSortedMultisetFauxverideShim.of(null, in, null, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedMultiset out = null; + Object in = (Object)source(); + out = ImmutableSortedMultisetFauxverideShim.of(null, in, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedMultiset out = null; + Object in = (Object)source(); + out = ImmutableSortedMultisetFauxverideShim.of(null, in, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedMultiset out = null; + Object in = (Object)source(); + out = ImmutableSortedMultisetFauxverideShim.of(null, in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedMultiset out = null; + Object in = (Object)source(); + out = ImmutableSortedMultisetFauxverideShim.of(in, null, null, null, null, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedMultiset out = null; + Object in = (Object)source(); + out = ImmutableSortedMultisetFauxverideShim.of(in, null, null, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedMultiset out = null; + Object in = (Object)source(); + out = ImmutableSortedMultisetFauxverideShim.of(in, null, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedMultiset out = null; + Object in = (Object)source(); + out = ImmutableSortedMultisetFauxverideShim.of(in, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedMultiset out = null; + Object in = (Object)source(); + out = ImmutableSortedMultisetFauxverideShim.of(in, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedMultiset out = null; + Object in = (Object)source(); + out = ImmutableSortedMultisetFauxverideShim.of(in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedMultiset out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedMultiset.of(null, null, null, null, null, in, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedMultiset out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedMultiset.of(null, null, null, null, in, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedMultiset out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedMultiset.of(null, null, null, null, in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedMultiset out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedMultiset.of(null, null, null, in, null, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedMultiset out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedMultiset.of(null, null, null, in, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedMultiset out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedMultiset.of(null, null, null, in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedMultiset out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedMultiset.of(null, null, in, null, null, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedMultiset out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedMultiset.of(null, null, in, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedMultiset out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedMultiset.of(null, null, in, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedMultiset out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedMultiset.of(null, null, in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedMultiset out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedMultiset.of(null, in, null, null, null, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedMultiset out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedMultiset.of(null, in, null, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedMultiset out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedMultiset.of(null, in, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedMultiset out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedMultiset.of(null, in, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedMultiset out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedMultiset.of(null, in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedMultiset out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedMultiset.of(in, null, null, null, null, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedMultiset out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedMultiset.of(in, null, null, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedMultiset out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedMultiset.of(in, null, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedMultiset out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedMultiset.of(in, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedMultiset out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedMultiset.of(in, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedMultiset out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedMultiset.of(in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableMultiset out = null; + Object in = (Object)source(); + out = ImmutableMultiset.of(null, null, null, null, null, in, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableMultiset out = null; + Object in = (Object)source(); + out = ImmutableMultiset.of(null, null, null, null, in, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableMultiset out = null; + Object in = (Object)source(); + out = ImmutableMultiset.of(null, null, null, null, in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableMultiset out = null; + Object in = (Object)source(); + out = ImmutableMultiset.of(null, null, null, in, null, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableMultiset out = null; + Object in = (Object)source(); + out = ImmutableMultiset.of(null, null, null, in, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableMultiset out = null; + Object in = (Object)source(); + out = ImmutableMultiset.of(null, null, null, in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableMultiset out = null; + Object in = (Object)source(); + out = ImmutableMultiset.of(null, null, in, null, null, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableMultiset out = null; + Object in = (Object)source(); + out = ImmutableMultiset.of(null, null, in, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableMultiset out = null; + Object in = (Object)source(); + out = ImmutableMultiset.of(null, null, in, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableMultiset out = null; + Object in = (Object)source(); + out = ImmutableMultiset.of(null, null, in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableMultiset out = null; + Object in = (Object)source(); + out = ImmutableMultiset.of(null, in, null, null, null, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableMultiset out = null; + Object in = (Object)source(); + out = ImmutableMultiset.of(null, in, null, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableMultiset out = null; + Object in = (Object)source(); + out = ImmutableMultiset.of(null, in, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableMultiset out = null; + Object in = (Object)source(); + out = ImmutableMultiset.of(null, in, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableMultiset out = null; + Object in = (Object)source(); + out = ImmutableMultiset.of(null, in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableMultiset out = null; + Object in = (Object)source(); + out = ImmutableMultiset.of(in, null, null, null, null, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableMultiset out = null; + Object in = (Object)source(); + out = ImmutableMultiset.of(in, null, null, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableMultiset out = null; + Object in = (Object)source(); + out = ImmutableMultiset.of(in, null, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableMultiset out = null; + Object in = (Object)source(); + out = ImmutableMultiset.of(in, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableMultiset out = null; + Object in = (Object)source(); + out = ImmutableMultiset.of(in, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableMultiset out = null; + Object in = (Object)source(); + out = ImmutableMultiset.of(in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableSet;true;copyOf;(Collection);;Element of Argument[0];Element of ReturnValue;value" + ImmutableSortedSet out = null; + Collection in = (Collection)newWithElement(source()); + out = ImmutableSortedSet.copyOf(in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableSet;true;copyOf;(Collection);;Element of Argument[0];Element of ReturnValue;value" + ImmutableSet out = null; + Collection in = (Collection)newWithElement(source()); + out = ImmutableSet.copyOf(in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableSet;true;copyOf;(Iterable);;Element of Argument[0];Element of ReturnValue;value" + ImmutableSortedSet out = null; + Iterable in = (Iterable)newWithElement(source()); + out = ImmutableSortedSet.copyOf(in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableSet;true;copyOf;(Iterable);;Element of Argument[0];Element of ReturnValue;value" + ImmutableSet out = null; + Iterable in = (Iterable)newWithElement(source()); + out = ImmutableSet.copyOf(in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableSet;true;copyOf;(Iterator);;Element of Argument[0];Element of ReturnValue;value" + ImmutableSortedSet out = null; + Iterator in = (Iterator)newWithElement(source()); + out = ImmutableSortedSet.copyOf(in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableSet;true;copyOf;(Iterator);;Element of Argument[0];Element of ReturnValue;value" + ImmutableSet out = null; + Iterator in = (Iterator)newWithElement(source()); + out = ImmutableSet.copyOf(in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedSet out = null; + Object in = (Object)source(); + out = ImmutableSortedSetFauxverideShim.of(null, null, null, null, null, in, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedSet out = null; + Object in = (Object)source(); + out = ImmutableSortedSetFauxverideShim.of(null, null, null, null, in, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedSet out = null; + Object in = (Object)source(); + out = ImmutableSortedSetFauxverideShim.of(null, null, null, null, in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedSet out = null; + Object in = (Object)source(); + out = ImmutableSortedSetFauxverideShim.of(null, null, null, in, null, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedSet out = null; + Object in = (Object)source(); + out = ImmutableSortedSetFauxverideShim.of(null, null, null, in, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedSet out = null; + Object in = (Object)source(); + out = ImmutableSortedSetFauxverideShim.of(null, null, null, in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedSet out = null; + Object in = (Object)source(); + out = ImmutableSortedSetFauxverideShim.of(null, null, in, null, null, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedSet out = null; + Object in = (Object)source(); + out = ImmutableSortedSetFauxverideShim.of(null, null, in, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedSet out = null; + Object in = (Object)source(); + out = ImmutableSortedSetFauxverideShim.of(null, null, in, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedSet out = null; + Object in = (Object)source(); + out = ImmutableSortedSetFauxverideShim.of(null, null, in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedSet out = null; + Object in = (Object)source(); + out = ImmutableSortedSetFauxverideShim.of(null, in, null, null, null, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedSet out = null; + Object in = (Object)source(); + out = ImmutableSortedSetFauxverideShim.of(null, in, null, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedSet out = null; + Object in = (Object)source(); + out = ImmutableSortedSetFauxverideShim.of(null, in, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedSet out = null; + Object in = (Object)source(); + out = ImmutableSortedSetFauxverideShim.of(null, in, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedSet out = null; + Object in = (Object)source(); + out = ImmutableSortedSetFauxverideShim.of(null, in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedSet out = null; + Object in = (Object)source(); + out = ImmutableSortedSetFauxverideShim.of(in, null, null, null, null, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedSet out = null; + Object in = (Object)source(); + out = ImmutableSortedSetFauxverideShim.of(in, null, null, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedSet out = null; + Object in = (Object)source(); + out = ImmutableSortedSetFauxverideShim.of(in, null, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedSet out = null; + Object in = (Object)source(); + out = ImmutableSortedSetFauxverideShim.of(in, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedSet out = null; + Object in = (Object)source(); + out = ImmutableSortedSetFauxverideShim.of(in, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedSet out = null; + Object in = (Object)source(); + out = ImmutableSortedSetFauxverideShim.of(in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedSet out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedSet.of(null, null, null, null, null, in, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedSet out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedSet.of(null, null, null, null, in, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedSet out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedSet.of(null, null, null, null, in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedSet out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedSet.of(null, null, null, in, null, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedSet out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedSet.of(null, null, null, in, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedSet out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedSet.of(null, null, null, in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedSet out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedSet.of(null, null, in, null, null, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedSet out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedSet.of(null, null, in, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedSet out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedSet.of(null, null, in, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedSet out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedSet.of(null, null, in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedSet out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedSet.of(null, in, null, null, null, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedSet out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedSet.of(null, in, null, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedSet out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedSet.of(null, in, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedSet out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedSet.of(null, in, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedSet out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedSet.of(null, in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedSet out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedSet.of(in, null, null, null, null, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedSet out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedSet.of(in, null, null, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedSet out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedSet.of(in, null, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedSet out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedSet.of(in, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedSet out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedSet.of(in, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedSet out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedSet.of(in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSet out = null; + Object in = (Object)source(); + out = ImmutableSet.of(null, null, null, null, null, in, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSet out = null; + Object in = (Object)source(); + out = ImmutableSet.of(null, null, null, null, in, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSet out = null; + Object in = (Object)source(); + out = ImmutableSet.of(null, null, null, null, in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSet out = null; + Object in = (Object)source(); + out = ImmutableSet.of(null, null, null, in, null, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSet out = null; + Object in = (Object)source(); + out = ImmutableSet.of(null, null, null, in, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSet out = null; + Object in = (Object)source(); + out = ImmutableSet.of(null, null, null, in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSet out = null; + Object in = (Object)source(); + out = ImmutableSet.of(null, null, in, null, null, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSet out = null; + Object in = (Object)source(); + out = ImmutableSet.of(null, null, in, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSet out = null; + Object in = (Object)source(); + out = ImmutableSet.of(null, null, in, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSet out = null; + Object in = (Object)source(); + out = ImmutableSet.of(null, null, in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSet out = null; + Object in = (Object)source(); + out = ImmutableSet.of(null, in, null, null, null, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSet out = null; + Object in = (Object)source(); + out = ImmutableSet.of(null, in, null, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSet out = null; + Object in = (Object)source(); + out = ImmutableSet.of(null, in, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSet out = null; + Object in = (Object)source(); + out = ImmutableSet.of(null, in, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSet out = null; + Object in = (Object)source(); + out = ImmutableSet.of(null, in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSet out = null; + Object in = (Object)source(); + out = ImmutableSet.of(in, null, null, null, null, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSet out = null; + Object in = (Object)source(); + out = ImmutableSet.of(in, null, null, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSet out = null; + Object in = (Object)source(); + out = ImmutableSet.of(in, null, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSet out = null; + Object in = (Object)source(); + out = ImmutableSet.of(in, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSet out = null; + Object in = (Object)source(); + out = ImmutableSet.of(in, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSet out = null; + Object in = (Object)source(); + out = ImmutableSet.of(in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedMap;true;copyOf;(Map,Comparator);;MapKey of Argument[0];MapKey of ReturnValue;value" + ImmutableSortedMap out = null; + Map in = (Map)newWithMapKey(source()); + out = ImmutableSortedMap.copyOf(in, (Comparator)null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedMap;true;copyOf;(Map,Comparator);;MapValue of Argument[0];MapValue of ReturnValue;value" + ImmutableSortedMap out = null; + Map in = (Map)newWithMapValue(source()); + out = ImmutableSortedMap.copyOf(in, (Comparator)null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedMap;true;copyOfSorted;(SortedMap);;MapKey of Argument[0];MapKey of ReturnValue;value" + ImmutableSortedMap out = null; + SortedMap in = (SortedMap)newWithMapKey(source()); + out = ImmutableSortedMap.copyOfSorted(in); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedMap;true;copyOfSorted;(SortedMap);;MapValue of Argument[0];MapValue of ReturnValue;value" + ImmutableSortedMap out = null; + SortedMap in = (SortedMap)newWithMapValue(source()); + out = ImmutableSortedMap.copyOfSorted(in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedMultiset;true;copyOf;(Comparator,Iterable);;Element of Argument[1];Element of ReturnValue;value" + ImmutableSortedMultiset out = null; + Iterable in = (Iterable)newWithElement(source()); + out = ImmutableSortedMultiset.copyOf((Comparator)null, in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedMultiset;true;copyOf;(Comparator,Iterator);;Element of Argument[1];Element of ReturnValue;value" + ImmutableSortedMultiset out = null; + Iterator in = (Iterator)newWithElement(source()); + out = ImmutableSortedMultiset.copyOf((Comparator)null, in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedMultiset;true;copyOfSorted;(SortedMultiset);;Element of Argument[0];Element of ReturnValue;value" + ImmutableSortedMultiset out = null; + SortedMultiset in = (SortedMultiset)newWithElement(source()); + out = ImmutableSortedMultiset.copyOfSorted(in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedSet;true;copyOf;(Comparator,Collection);;Element of Argument[1];Element of ReturnValue;value" + ImmutableSortedSet out = null; + Collection in = (Collection)newWithElement(source()); + out = ImmutableSortedSet.copyOf((Comparator)null, in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedSet;true;copyOf;(Comparator,Iterable);;Element of Argument[1];Element of ReturnValue;value" + ImmutableSortedSet out = null; + Iterable in = (Iterable)newWithElement(source()); + out = ImmutableSortedSet.copyOf((Comparator)null, in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedSet;true;copyOf;(Comparator,Iterator);;Element of Argument[1];Element of ReturnValue;value" + ImmutableSortedSet out = null; + Iterator in = (Iterator)newWithElement(source()); + out = ImmutableSortedSet.copyOf((Comparator)null, in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedSet;true;copyOfSorted;(SortedSet);;Element of Argument[0];Element of ReturnValue;value" + ImmutableSortedSet out = null; + SortedSet in = (SortedSet)newWithElement(source()); + out = ImmutableSortedSet.copyOfSorted(in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableTable$Builder;true;build;();;MapValue of Argument[-1];MapValue of ReturnValue;value" + ImmutableTable out = null; + ImmutableTable.Builder in = (ImmutableTable.Builder)newWithMapValue(source()); + out = in.build(); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableTable$Builder;true;orderColumnsBy;(Comparator);;Argument[-1];ReturnValue;value" + ImmutableTable.Builder out = null; + ImmutableTable.Builder in = (ImmutableTable.Builder)source(); + out = in.orderColumnsBy(null); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableTable$Builder;true;orderRowsBy;(Comparator);;Argument[-1];ReturnValue;value" + ImmutableTable.Builder out = null; + ImmutableTable.Builder in = (ImmutableTable.Builder)source(); + out = in.orderRowsBy(null); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableTable$Builder;true;put;(Cell);;Argument[-1];ReturnValue;value" + ImmutableTable.Builder out = null; + ImmutableTable.Builder in = (ImmutableTable.Builder)source(); + out = in.put(null); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableTable$Builder;true;put;(Cell);;MapKey of Argument[0];MapKey of Argument[-1];value" + ImmutableTable.Builder out = null; + Table.Cell in = (Table.Cell)newWithMapKey(source()); + out.put(in); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableTable$Builder;true;put;(Cell);;MapValue of Argument[0];MapValue of Argument[-1];value" + ImmutableTable.Builder out = null; + Table.Cell in = (Table.Cell)newWithMapValue(source()); + out.put(in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableTable$Builder;true;put;(Object,Object,Object);;Argument[-1];ReturnValue;value" + ImmutableTable.Builder out = null; + ImmutableTable.Builder in = (ImmutableTable.Builder)source(); + out = in.put(null, null, null); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableTable$Builder;true;put;(Object,Object,Object);;Argument[2];MapValue of Argument[-1];value" + ImmutableTable.Builder out = null; + Object in = (Object)source(); + out.put(null, null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableTable$Builder;true;putAll;(Table);;Argument[-1];ReturnValue;value" + ImmutableTable.Builder out = null; + ImmutableTable.Builder in = (ImmutableTable.Builder)source(); + out = in.putAll(null); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableTable$Builder;true;putAll;(Table);;MapKey of Argument[0];MapKey of Argument[-1];value" + ImmutableTable.Builder out = null; + Table in = (Table)newWithMapKey(source()); + out.putAll(in); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableTable$Builder;true;putAll;(Table);;MapValue of Argument[0];MapValue of Argument[-1];value" + ImmutableTable.Builder out = null; + Table in = (Table)newWithMapValue(source()); + out.putAll(in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableTable;true;copyOf;(Table);;MapKey of Argument[0];MapKey of ReturnValue;value" + ImmutableTable out = null; + Table in = (Table)newWithMapKey(source()); + out = ImmutableTable.copyOf(in); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableTable;true;copyOf;(Table);;MapValue of Argument[0];MapValue of ReturnValue;value" + ImmutableTable out = null; + Table in = (Table)newWithMapValue(source()); + out = ImmutableTable.copyOf(in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;ImmutableTable;true;of;(Object,Object,Object);;Argument[2];MapValue of ReturnValue;value" + ImmutableTable out = null; + Object in = (Object)source(); + out = ImmutableTable.of(null, null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Iterables;false;addAll;(Collection,Iterable);;Element of Argument[1];Element of Argument[0];value" + Collection out = null; + Iterable in = (Iterable)newWithElement(source()); + Iterables.addAll(out, in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Iterables;false;concat;(Iterable);;Element of Element of Argument[0];Element of ReturnValue;value" + Iterable out = null; + Iterable in = (Iterable)newWithElement(newWithElement(source())); + out = Iterables.concat(in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Iterables;false;concat;(Iterable,Iterable);;Element of Argument[0..1];Element of ReturnValue;value" + Iterable out = null; + Iterable in = (Iterable)newWithElement(source()); + out = Iterables.concat(null, in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Iterables;false;concat;(Iterable,Iterable);;Element of Argument[0..1];Element of ReturnValue;value" + Iterable out = null; + Iterable in = (Iterable)newWithElement(source()); + out = Iterables.concat(in, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Iterables;false;concat;(Iterable,Iterable,Iterable);;Element of Argument[0..2];Element of ReturnValue;value" + Iterable out = null; + Iterable in = (Iterable)newWithElement(source()); + out = Iterables.concat(null, null, in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Iterables;false;concat;(Iterable,Iterable,Iterable);;Element of Argument[0..2];Element of ReturnValue;value" + Iterable out = null; + Iterable in = (Iterable)newWithElement(source()); + out = Iterables.concat(null, in, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Iterables;false;concat;(Iterable,Iterable,Iterable);;Element of Argument[0..2];Element of ReturnValue;value" + Iterable out = null; + Iterable in = (Iterable)newWithElement(source()); + out = Iterables.concat(in, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Iterables;false;concat;(Iterable,Iterable,Iterable,Iterable);;Element of Argument[0..3];Element of ReturnValue;value" + Iterable out = null; + Iterable in = (Iterable)newWithElement(source()); + out = Iterables.concat(null, null, null, in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Iterables;false;concat;(Iterable,Iterable,Iterable,Iterable);;Element of Argument[0..3];Element of ReturnValue;value" + Iterable out = null; + Iterable in = (Iterable)newWithElement(source()); + out = Iterables.concat(null, null, in, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Iterables;false;concat;(Iterable,Iterable,Iterable,Iterable);;Element of Argument[0..3];Element of ReturnValue;value" + Iterable out = null; + Iterable in = (Iterable)newWithElement(source()); + out = Iterables.concat(null, in, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Iterables;false;concat;(Iterable,Iterable,Iterable,Iterable);;Element of Argument[0..3];Element of ReturnValue;value" + Iterable out = null; + Iterable in = (Iterable)newWithElement(source()); + out = Iterables.concat(in, null, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Iterables;false;concat;(Iterable[]);;Element of ArrayElement of Argument[0];Element of ReturnValue;value" + Iterable out = null; + Iterable[] in = (Iterable[])newWithArrayElement(newWithElement(source())); + out = Iterables.concat(in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Iterables;false;consumingIterable;(Iterable);;Element of Argument[0];Element of ReturnValue;value" + Iterable out = null; + Iterable in = (Iterable)newWithElement(source()); + out = Iterables.consumingIterable(in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Iterables;false;cycle;(Iterable);;Element of Argument[0];Element of ReturnValue;value" + Iterable out = null; + Iterable in = (Iterable)newWithElement(source()); + out = Iterables.cycle(in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Iterables;false;filter;(Iterable,Class);;Element of Argument[0];Element of ReturnValue;value" + Iterable out = null; + Iterable in = (Iterable)newWithElement(source()); + out = Iterables.filter(in, (Class)null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Iterables;false;filter;(Iterable,Predicate);;Element of Argument[0];Element of ReturnValue;value" + Iterable out = null; + Iterable in = (Iterable)newWithElement(source()); + out = Iterables.filter(in, (Predicate)null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Iterables;false;find;(Iterable,Predicate);;Element of Argument[0];ReturnValue;value" + Object out = null; + Iterable in = (Iterable)newWithElement(source()); + out = Iterables.find(in, null); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;Iterables;false;find;(Iterable,Predicate,Object);;Argument[2];Element of ReturnValue;value" + Object out = null; + Object in = (Object)source(); + out = Iterables.find(null, null, in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Iterables;false;find;(Iterable,Predicate,Object);;Element of Argument[0];ReturnValue;value" + Object out = null; + Iterable in = (Iterable)newWithElement(source()); + out = Iterables.find(in, null, null); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;Iterables;false;get;(Iterable,int);;Element of Argument[0];ReturnValue;value" + Object out = null; + Iterable in = (Iterable)newWithElement(source()); + out = Iterables.get(in, 0); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;Iterables;false;get;(Iterable,int,Object);;Argument[2];Element of ReturnValue;value" + Object out = null; + Object in = (Object)source(); + out = Iterables.get(null, 0, in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Iterables;false;get;(Iterable,int,Object);;Element of Argument[0];ReturnValue;value" + Object out = null; + Iterable in = (Iterable)newWithElement(source()); + out = Iterables.get(in, 0, null); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;Iterables;false;getLast;(Iterable);;Element of Argument[0];ReturnValue;value" + Object out = null; + Iterable in = (Iterable)newWithElement(source()); + out = Iterables.getLast(in); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;Iterables;false;getLast;(Iterable,Object);;Argument[1];Element of ReturnValue;value" + Object out = null; + Object in = (Object)source(); + out = Iterables.getLast(null, in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Iterables;false;getLast;(Iterable,Object);;Element of Argument[0];ReturnValue;value" + Object out = null; + Iterable in = (Iterable)newWithElement(source()); + out = Iterables.getLast(in, null); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;Iterables;false;getOnlyElement;(Iterable);;Element of Argument[0];ReturnValue;value" + Object out = null; + Iterable in = (Iterable)newWithElement(source()); + out = Iterables.getOnlyElement(in); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;Iterables;false;getOnlyElement;(Iterable,Object);;Argument[1];Element of ReturnValue;value" + Object out = null; + Object in = (Object)source(); + out = Iterables.getOnlyElement(null, in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Iterables;false;getOnlyElement;(Iterable,Object);;Element of Argument[0];ReturnValue;value" + Object out = null; + Iterable in = (Iterable)newWithElement(source()); + out = Iterables.getOnlyElement(in, null); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;Iterables;false;limit;(Iterable,int);;Element of Argument[0];Element of ReturnValue;value" + Iterable out = null; + Iterable in = (Iterable)newWithElement(source()); + out = Iterables.limit(in, 0); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Iterables;false;mergeSorted;(Iterable,Comparator);;Element of Element of Argument[0];Element of ReturnValue;value" + Iterable out = null; + Iterable in = (Iterable)newWithElement(newWithElement(source())); + out = Iterables.mergeSorted(in, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Iterables;false;paddedPartition;(Iterable,int);;Element of Element of Argument[0];Element of ReturnValue;value" + Iterable out = null; + Iterable in = (Iterable)newWithElement(newWithElement(source())); + out = Iterables.paddedPartition(in, 0); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Iterables;false;partition;(Iterable,int);;Element of Element of Argument[0];Element of ReturnValue;value" + Iterable out = null; + Iterable in = (Iterable)newWithElement(newWithElement(source())); + out = Iterables.partition(in, 0); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Iterables;false;skip;(Iterable,int);;Element of Argument[0];Element of ReturnValue;value" + Iterable out = null; + Iterable in = (Iterable)newWithElement(source()); + out = Iterables.skip(in, 0); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Iterables;false;toString;(Iterable);;Element of Argument[0];ReturnValue;taint" + String out = null; + Iterable in = (Iterable)newWithElement(source()); + out = Iterables.toString(in); + sink(out); // $hasTaintFlow + } + { + // "com.google.common.collect;Iterables;false;tryFind;(Iterable,Predicate);;Element of Argument[0];Element of ReturnValue;value" + Optional out = null; + Iterable in = (Iterable)newWithElement(source()); + out = Iterables.tryFind(in, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Iterables;false;unmodifiableIterable;(ImmutableCollection);;Element of Argument[0];Element of ReturnValue;value" + Iterable out = null; + ImmutableCollection in = (ImmutableCollection)newWithElement(source()); + out = Iterables.unmodifiableIterable(in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Iterables;false;unmodifiableIterable;(Iterable);;Element of Argument[0];Element of ReturnValue;value" + Iterable out = null; + Iterable in = (Iterable)newWithElement(source()); + out = Iterables.unmodifiableIterable(in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Iterators;false;addAll;(Collection,Iterator);;Element of Argument[1];Element of Argument[0];value" + Collection out = null; + Iterator in = (Iterator)newWithElement(source()); + Iterators.addAll(out, in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Iterators;false;asEnumeration;(Iterator);;Element of Argument[0];Element of ReturnValue;value" + Enumeration out = null; + Iterator in = (Iterator)newWithElement(source()); + out = Iterators.asEnumeration(in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Iterators;false;concat;(Iterator);;Element of Element of Argument[0];Element of ReturnValue;value" + Iterator out = null; + Iterator in = (Iterator)newWithElement(newWithElement(source())); + out = Iterators.concat(in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Iterators;false;concat;(Iterator,Iterator);;Element of Argument[0..1];Element of ReturnValue;value" + Iterator out = null; + Iterator in = (Iterator)newWithElement(source()); + out = Iterators.concat(null, in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Iterators;false;concat;(Iterator,Iterator);;Element of Argument[0..1];Element of ReturnValue;value" + Iterator out = null; + Iterator in = (Iterator)newWithElement(source()); + out = Iterators.concat(in, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Iterators;false;concat;(Iterator,Iterator,Iterator);;Element of Argument[0..2];Element of ReturnValue;value" + Iterator out = null; + Iterator in = (Iterator)newWithElement(source()); + out = Iterators.concat(null, null, in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Iterators;false;concat;(Iterator,Iterator,Iterator);;Element of Argument[0..2];Element of ReturnValue;value" + Iterator out = null; + Iterator in = (Iterator)newWithElement(source()); + out = Iterators.concat(null, in, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Iterators;false;concat;(Iterator,Iterator,Iterator);;Element of Argument[0..2];Element of ReturnValue;value" + Iterator out = null; + Iterator in = (Iterator)newWithElement(source()); + out = Iterators.concat(in, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Iterators;false;concat;(Iterator,Iterator,Iterator,Iterator);;Element of Argument[0..3];Element of ReturnValue;value" + Iterator out = null; + Iterator in = (Iterator)newWithElement(source()); + out = Iterators.concat(null, null, null, in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Iterators;false;concat;(Iterator,Iterator,Iterator,Iterator);;Element of Argument[0..3];Element of ReturnValue;value" + Iterator out = null; + Iterator in = (Iterator)newWithElement(source()); + out = Iterators.concat(null, null, in, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Iterators;false;concat;(Iterator,Iterator,Iterator,Iterator);;Element of Argument[0..3];Element of ReturnValue;value" + Iterator out = null; + Iterator in = (Iterator)newWithElement(source()); + out = Iterators.concat(null, in, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Iterators;false;concat;(Iterator,Iterator,Iterator,Iterator);;Element of Argument[0..3];Element of ReturnValue;value" + Iterator out = null; + Iterator in = (Iterator)newWithElement(source()); + out = Iterators.concat(in, null, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Iterators;false;concat;(Iterator[]);;Element of ArrayElement of Argument[0];Element of ReturnValue;value" + Iterator out = null; + Iterator[] in = (Iterator[])newWithArrayElement(newWithElement(source())); + out = Iterators.concat(in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Iterators;false;consumingIterator;(Iterator);;Element of Argument[0];Element of ReturnValue;value" + Iterator out = null; + Iterator in = (Iterator)newWithElement(source()); + out = Iterators.consumingIterator(in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Iterators;false;cycle;(Iterable);;Element of Argument[0];Element of ReturnValue;value" + Iterator out = null; + Iterable in = (Iterable)newWithElement(source()); + out = Iterators.cycle(in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Iterators;false;filter;(Iterator,Class);;Element of Argument[0];Element of ReturnValue;value" + UnmodifiableIterator out = null; + Iterator in = (Iterator)newWithElement(source()); + out = Iterators.filter(in, (Class)null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Iterators;false;filter;(Iterator,Predicate);;Element of Argument[0];Element of ReturnValue;value" + UnmodifiableIterator out = null; + Iterator in = (Iterator)newWithElement(source()); + out = Iterators.filter(in, (Predicate)null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Iterators;false;find;(Iterator,Predicate);;Element of Argument[0];ReturnValue;value" + Object out = null; + Iterator in = (Iterator)newWithElement(source()); + out = Iterators.find(in, null); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;Iterators;false;find;(Iterator,Predicate,Object);;Argument[2];Element of ReturnValue;value" + Object out = null; + Object in = (Object)source(); + out = Iterators.find(null, null, in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Iterators;false;find;(Iterator,Predicate,Object);;Element of Argument[0];ReturnValue;value" + Object out = null; + Iterator in = (Iterator)newWithElement(source()); + out = Iterators.find(in, null, null); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;Iterators;false;forEnumeration;(Enumeration);;Element of Argument[0];Element of ReturnValue;value" + UnmodifiableIterator out = null; + Enumeration in = (Enumeration)newWithElement(source()); + out = Iterators.forEnumeration(in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Iterators;false;get;(Iterator,int);;Element of Argument[0];ReturnValue;value" + Object out = null; + Iterator in = (Iterator)newWithElement(source()); + out = Iterators.get(in, 0); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;Iterators;false;get;(Iterator,int,Object);;Argument[2];Element of ReturnValue;value" + Object out = null; + Object in = (Object)source(); + out = Iterators.get(null, 0, in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Iterators;false;get;(Iterator,int,Object);;Element of Argument[0];ReturnValue;value" + Object out = null; + Iterator in = (Iterator)newWithElement(source()); + out = Iterators.get(in, 0, null); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;Iterators;false;getLast;(Iterator);;Element of Argument[0];ReturnValue;value" + Object out = null; + Iterator in = (Iterator)newWithElement(source()); + out = Iterators.getLast(in); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;Iterators;false;getLast;(Iterator,Object);;Argument[1];Element of ReturnValue;value" + Object out = null; + Object in = (Object)source(); + out = Iterators.getLast(null, in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Iterators;false;getLast;(Iterator,Object);;Element of Argument[0];ReturnValue;value" + Object out = null; + Iterator in = (Iterator)newWithElement(source()); + out = Iterators.getLast(in, null); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;Iterators;false;getNext;(Iterator,Object);;Argument[1];Element of ReturnValue;value" + Object out = null; + Object in = (Object)source(); + out = Iterators.getNext(null, in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Iterators;false;getNext;(Iterator,Object);;Element of Argument[0];ReturnValue;value" + Object out = null; + Iterator in = (Iterator)newWithElement(source()); + out = Iterators.getNext(in, null); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;Iterators;false;getOnlyElement;(Iterator);;Element of Argument[0];ReturnValue;value" + Object out = null; + Iterator in = (Iterator)newWithElement(source()); + out = Iterators.getOnlyElement(in); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;Iterators;false;getOnlyElement;(Iterator,Object);;Argument[1];Element of ReturnValue;value" + Object out = null; + Object in = (Object)source(); + out = Iterators.getOnlyElement(null, in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Iterators;false;getOnlyElement;(Iterator,Object);;Element of Argument[0];ReturnValue;value" + Object out = null; + Iterator in = (Iterator)newWithElement(source()); + out = Iterators.getOnlyElement(in, null); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;Iterators;false;limit;(Iterator,int);;Element of Argument[0];Element of ReturnValue;value" + Iterator out = null; + Iterator in = (Iterator)newWithElement(source()); + out = Iterators.limit(in, 0); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Iterators;false;mergeSorted;(Iterable,Comparator);;Element of Element of Argument[0];Element of ReturnValue;value" + UnmodifiableIterator out = null; + Iterable in = (Iterable)newWithElement(newWithElement(source())); + out = Iterators.mergeSorted(in, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Iterators;false;paddedPartition;(Iterator,int);;Element of Element of Argument[0];Element of ReturnValue;value" + UnmodifiableIterator out = null; + Iterator in = (Iterator)newWithElement(newWithElement(source())); + out = Iterators.paddedPartition(in, 0); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Iterators;false;partition;(Iterator,int);;Element of Element of Argument[0];Element of ReturnValue;value" + UnmodifiableIterator out = null; + Iterator in = (Iterator)newWithElement(newWithElement(source())); + out = Iterators.partition(in, 0); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Iterators;false;peekingIterator;(Iterator);;Element of Argument[0];Element of ReturnValue;value" + PeekingIterator out = null; + Iterator in = (Iterator)newWithElement(source()); + out = Iterators.peekingIterator(in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Iterators;false;peekingIterator;(PeekingIterator);;Element of Argument[0];Element of ReturnValue;value" + PeekingIterator out = null; + PeekingIterator in = (PeekingIterator)newWithElement(source()); + out = Iterators.peekingIterator(in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Iterators;false;singletonIterator;(Object);;Argument[0];Element of ReturnValue;value" + UnmodifiableIterator out = null; + Object in = (Object)source(); + out = Iterators.singletonIterator(in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Iterators;false;toString;(Iterator);;Element of Argument[0];ReturnValue;taint" + String out = null; + Iterator in = (Iterator)newWithElement(source()); + out = Iterators.toString(in); + sink(out); // $hasTaintFlow + } + { + // "com.google.common.collect;Iterators;false;tryFind;(Iterator,Predicate);;Element of Argument[0];Element of ReturnValue;value" + Optional out = null; + Iterator in = (Iterator)newWithElement(source()); + out = Iterators.tryFind(in, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Iterators;false;unmodifiableIterator;(Iterator);;Element of Argument[0];Element of ReturnValue;value" + UnmodifiableIterator out = null; + Iterator in = (Iterator)newWithElement(source()); + out = Iterators.unmodifiableIterator(in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Iterators;false;unmodifiableIterator;(UnmodifiableIterator);;Element of Argument[0];Element of ReturnValue;value" + UnmodifiableIterator out = null; + UnmodifiableIterator in = (UnmodifiableIterator)newWithElement(source()); + out = Iterators.unmodifiableIterator(in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;LinkedHashMultimap;true;create;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value" + LinkedHashMultimap out = null; + Multimap in = (Multimap)newWithMapKey(source()); + out = LinkedHashMultimap.create(in); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;LinkedHashMultimap;true;create;(Multimap);;MapValue of Argument[0];MapValue of ReturnValue;value" + LinkedHashMultimap out = null; + Multimap in = (Multimap)newWithMapValue(source()); + out = LinkedHashMultimap.create(in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;LinkedHashMultiset;true;create;(Iterable);;Element of Argument[0];Element of ReturnValue;value" + LinkedHashMultiset out = null; + Iterable in = (Iterable)newWithElement(source()); + out = LinkedHashMultiset.create(in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;LinkedListMultimap;true;create;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value" + LinkedListMultimap out = null; + Multimap in = (Multimap)newWithMapKey(source()); + out = LinkedListMultimap.create(in); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;LinkedListMultimap;true;create;(Multimap);;MapValue of Argument[0];MapValue of ReturnValue;value" + LinkedListMultimap out = null; + Multimap in = (Multimap)newWithMapValue(source()); + out = LinkedListMultimap.create(in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Lists;false;asList;(Object,Object,Object[]);;Argument[0..1];Element of ReturnValue;value" + List out = null; + Object in = (Object)source(); + out = Lists.asList(null, in, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Lists;false;asList;(Object,Object,Object[]);;Argument[0..1];Element of ReturnValue;value" + List out = null; + Object in = (Object)source(); + out = Lists.asList(in, null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Lists;false;asList;(Object,Object[]);;Argument[0];Element of ReturnValue;value" + List out = null; + Object in = (Object)source(); + out = Lists.asList(in, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Lists;false;cartesianProduct;(List);;Element of Element of Argument[0];Element of Element of ReturnValue;value" + List out = null; + List in = (List)newWithElement(newWithElement(source())); + out = Lists.cartesianProduct(in); + sink(getElement(getElement(out))); // $hasValueFlow + } + { + // "com.google.common.collect;Lists;false;cartesianProduct;(List[]);;Element of ArrayElement of Argument[0];Element of Element of ReturnValue;value" + List out = null; + List[] in = (List[])newWithArrayElement(newWithElement(source())); + out = Lists.cartesianProduct(in); + sink(getElement(getElement(out))); // $hasValueFlow + } + { + // "com.google.common.collect;Lists;false;charactersOf;(CharSequence);;Argument[0];Element of ReturnValue;taint" + List out = null; + CharSequence in = (CharSequence)source(); + out = Lists.charactersOf(in); + sink(getElement(out)); // $hasTaintFlow + } + { + // "com.google.common.collect;Lists;false;charactersOf;(String);;Argument[0];Element of ReturnValue;taint" + ImmutableList out = null; + String in = (String)source(); + out = Lists.charactersOf(in); + sink(getElement(out)); // $hasTaintFlow + } + { + // "com.google.common.collect;Lists;false;newArrayList;(Iterable);;Element of Argument[0];Element of ReturnValue;value" + ArrayList out = null; + Iterable in = (Iterable)newWithElement(source()); + out = Lists.newArrayList(in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Lists;false;newArrayList;(Iterator);;Element of Argument[0];Element of ReturnValue;value" + ArrayList out = null; + Iterator in = (Iterator)newWithElement(source()); + out = Lists.newArrayList(in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Lists;false;newCopyOnWriteArrayList;(Iterable);;Element of Argument[0];Element of ReturnValue;value" + CopyOnWriteArrayList out = null; + Iterable in = (Iterable)newWithElement(source()); + out = Lists.newCopyOnWriteArrayList(in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Lists;false;newLinkedList;(Iterable);;Element of Argument[0];Element of ReturnValue;value" + LinkedList out = null; + Iterable in = (Iterable)newWithElement(source()); + out = Lists.newLinkedList(in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Lists;false;partition;(List,int);;Element of Argument[0];Element of Element of ReturnValue;value" + List out = null; + List in = (List)newWithElement(source()); + out = Lists.partition(in, 0); + sink(getElement(getElement(out))); // $hasValueFlow + } + { + // "com.google.common.collect;Lists;false;reverse;(List);;Element of Argument[0];Element of ReturnValue;value" + List out = null; + List in = (List)newWithElement(source()); + out = Lists.reverse(in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Maps;false;asMap;(NavigableSet,Function);;Element of Argument[0];MapKey of ReturnValue;value" + NavigableMap out = null; + NavigableSet in = (NavigableSet)newWithElement(source()); + out = Maps.asMap(in, (Function)null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Maps;false;asMap;(Set,Function);;Element of Argument[0];MapKey of ReturnValue;value" + Map out = null; + Set in = (Set)newWithElement(source()); + out = Maps.asMap(in, (Function)null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Maps;false;asMap;(SortedSet,Function);;Element of Argument[0];MapKey of ReturnValue;value" + SortedMap out = null; + SortedSet in = (SortedSet)newWithElement(source()); + out = Maps.asMap(in, (Function)null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Maps;false;filterEntries;(BiMap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value" + BiMap out = null; + BiMap in = (BiMap)newWithMapKey(source()); + out = Maps.filterEntries(in, (Predicate)null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Maps;false;filterEntries;(BiMap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value" + BiMap out = null; + BiMap in = (BiMap)newWithMapValue(source()); + out = Maps.filterEntries(in, (Predicate)null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Maps;false;filterEntries;(Map,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value" + Map out = null; + Map in = (Map)newWithMapKey(source()); + out = Maps.filterEntries(in, (Predicate)null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Maps;false;filterEntries;(Map,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value" + Map out = null; + Map in = (Map)newWithMapValue(source()); + out = Maps.filterEntries(in, (Predicate)null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Maps;false;filterEntries;(NavigableMap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value" + NavigableMap out = null; + NavigableMap in = (NavigableMap)newWithMapKey(source()); + out = Maps.filterEntries(in, (Predicate)null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Maps;false;filterEntries;(NavigableMap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value" + NavigableMap out = null; + NavigableMap in = (NavigableMap)newWithMapValue(source()); + out = Maps.filterEntries(in, (Predicate)null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Maps;false;filterEntries;(SortedMap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value" + SortedMap out = null; + SortedMap in = (SortedMap)newWithMapKey(source()); + out = Maps.filterEntries(in, (Predicate)null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Maps;false;filterEntries;(SortedMap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value" + SortedMap out = null; + SortedMap in = (SortedMap)newWithMapValue(source()); + out = Maps.filterEntries(in, (Predicate)null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Maps;false;filterKeys;(BiMap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value" + BiMap out = null; + BiMap in = (BiMap)newWithMapKey(source()); + out = Maps.filterKeys(in, (Predicate)null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Maps;false;filterKeys;(BiMap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value" + BiMap out = null; + BiMap in = (BiMap)newWithMapValue(source()); + out = Maps.filterKeys(in, (Predicate)null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Maps;false;filterKeys;(Map,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value" + Map out = null; + Map in = (Map)newWithMapKey(source()); + out = Maps.filterKeys(in, (Predicate)null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Maps;false;filterKeys;(Map,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value" + Map out = null; + Map in = (Map)newWithMapValue(source()); + out = Maps.filterKeys(in, (Predicate)null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Maps;false;filterKeys;(NavigableMap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value" + NavigableMap out = null; + NavigableMap in = (NavigableMap)newWithMapKey(source()); + out = Maps.filterKeys(in, (Predicate)null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Maps;false;filterKeys;(NavigableMap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value" + NavigableMap out = null; + NavigableMap in = (NavigableMap)newWithMapValue(source()); + out = Maps.filterKeys(in, (Predicate)null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Maps;false;filterKeys;(SortedMap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value" + SortedMap out = null; + SortedMap in = (SortedMap)newWithMapKey(source()); + out = Maps.filterKeys(in, (Predicate)null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Maps;false;filterKeys;(SortedMap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value" + SortedMap out = null; + SortedMap in = (SortedMap)newWithMapValue(source()); + out = Maps.filterKeys(in, (Predicate)null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Maps;false;filterValues;(BiMap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value" + BiMap out = null; + BiMap in = (BiMap)newWithMapKey(source()); + out = Maps.filterValues(in, (Predicate)null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Maps;false;filterValues;(BiMap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value" + BiMap out = null; + BiMap in = (BiMap)newWithMapValue(source()); + out = Maps.filterValues(in, (Predicate)null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Maps;false;filterValues;(Map,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value" + Map out = null; + Map in = (Map)newWithMapKey(source()); + out = Maps.filterValues(in, (Predicate)null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Maps;false;filterValues;(Map,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value" + Map out = null; + Map in = (Map)newWithMapValue(source()); + out = Maps.filterValues(in, (Predicate)null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Maps;false;filterValues;(NavigableMap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value" + NavigableMap out = null; + NavigableMap in = (NavigableMap)newWithMapKey(source()); + out = Maps.filterValues(in, (Predicate)null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Maps;false;filterValues;(NavigableMap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value" + NavigableMap out = null; + NavigableMap in = (NavigableMap)newWithMapValue(source()); + out = Maps.filterValues(in, (Predicate)null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Maps;false;filterValues;(SortedMap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value" + SortedMap out = null; + SortedMap in = (SortedMap)newWithMapKey(source()); + out = Maps.filterValues(in, (Predicate)null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Maps;false;filterValues;(SortedMap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value" + SortedMap out = null; + SortedMap in = (SortedMap)newWithMapValue(source()); + out = Maps.filterValues(in, (Predicate)null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Maps;false;fromProperties;(Properties);;MapKey of Argument[0];MapKey of ReturnValue;value" + ImmutableMap out = null; + Properties in = (Properties)newWithMapKey(source()); + out = Maps.fromProperties(in); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Maps;false;fromProperties;(Properties);;MapValue of Argument[0];MapValue of ReturnValue;value" + ImmutableMap out = null; + Properties in = (Properties)newWithMapValue(source()); + out = Maps.fromProperties(in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Maps;false;immutableEntry;(Object,Object);;Argument[0];MapKey of ReturnValue;value" + Map.Entry out = null; + Object in = (Object)source(); + out = Maps.immutableEntry(in, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Maps;false;immutableEntry;(Object,Object);;Argument[1];MapValue of ReturnValue;value" + Map.Entry out = null; + Object in = (Object)source(); + out = Maps.immutableEntry(null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Maps;false;newHashMap;(Map);;MapKey of Argument[0];MapKey of ReturnValue;value" + HashMap out = null; + Map in = (Map)newWithMapKey(source()); + out = Maps.newHashMap(in); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Maps;false;newHashMap;(Map);;MapValue of Argument[0];MapValue of ReturnValue;value" + HashMap out = null; + Map in = (Map)newWithMapValue(source()); + out = Maps.newHashMap(in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Maps;false;newLinkedHashMap;(Map);;MapKey of Argument[0];MapKey of ReturnValue;value" + LinkedHashMap out = null; + Map in = (Map)newWithMapKey(source()); + out = Maps.newLinkedHashMap(in); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Maps;false;newLinkedHashMap;(Map);;MapValue of Argument[0];MapValue of ReturnValue;value" + LinkedHashMap out = null; + Map in = (Map)newWithMapValue(source()); + out = Maps.newLinkedHashMap(in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Maps;false;newTreeMap;(SortedMap);;MapKey of Argument[0];MapKey of ReturnValue;value" + TreeMap out = null; + SortedMap in = (SortedMap)newWithMapKey(source()); + out = Maps.newTreeMap(in); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Maps;false;newTreeMap;(SortedMap);;MapValue of Argument[0];MapValue of ReturnValue;value" + TreeMap out = null; + SortedMap in = (SortedMap)newWithMapValue(source()); + out = Maps.newTreeMap(in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Maps;false;subMap;(NavigableMap,Range);;MapKey of Argument[0];MapKey of ReturnValue;value" + NavigableMap out = null; + NavigableMap in = (NavigableMap)newWithMapKey(source()); + out = Maps.subMap(in, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Maps;false;subMap;(NavigableMap,Range);;MapValue of Argument[0];MapValue of ReturnValue;value" + NavigableMap out = null; + NavigableMap in = (NavigableMap)newWithMapValue(source()); + out = Maps.subMap(in, null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Maps;false;synchronizedBiMap;(BiMap);;MapKey of Argument[0];MapKey of ReturnValue;value" + BiMap out = null; + BiMap in = (BiMap)newWithMapKey(source()); + out = Maps.synchronizedBiMap(in); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Maps;false;synchronizedBiMap;(BiMap);;MapValue of Argument[0];MapValue of ReturnValue;value" + BiMap out = null; + BiMap in = (BiMap)newWithMapValue(source()); + out = Maps.synchronizedBiMap(in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Maps;false;synchronizedNavigableMap;(NavigableMap);;MapKey of Argument[0];MapKey of ReturnValue;value" + NavigableMap out = null; + NavigableMap in = (NavigableMap)newWithMapKey(source()); + out = Maps.synchronizedNavigableMap(in); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Maps;false;synchronizedNavigableMap;(NavigableMap);;MapValue of Argument[0];MapValue of ReturnValue;value" + NavigableMap out = null; + NavigableMap in = (NavigableMap)newWithMapValue(source()); + out = Maps.synchronizedNavigableMap(in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Maps;false;toMap;(Iterable,Function);;Element of Argument[0];MapKey of ReturnValue;value" + ImmutableMap out = null; + Iterable in = (Iterable)newWithElement(source()); + out = Maps.toMap(in, (Function)null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Maps;false;toMap;(Iterator,Function);;Element of Argument[0];MapKey of ReturnValue;value" + ImmutableMap out = null; + Iterator in = (Iterator)newWithElement(source()); + out = Maps.toMap(in, (Function)null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Maps;false;transformValues;(Map,Function);;MapKey of Argument[0];MapKey of ReturnValue;value" + Map out = null; + Map in = (Map)newWithMapKey(source()); + out = Maps.transformValues(in, (Function)null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Maps;false;transformValues;(NavigableMap,Function);;MapKey of Argument[0];MapKey of ReturnValue;value" + NavigableMap out = null; + NavigableMap in = (NavigableMap)newWithMapKey(source()); + out = Maps.transformValues(in, (Function)null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Maps;false;transformValues;(SortedMap,Function);;MapKey of Argument[0];MapKey of ReturnValue;value" + SortedMap out = null; + SortedMap in = (SortedMap)newWithMapKey(source()); + out = Maps.transformValues(in, (Function)null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Maps;false;uniqueIndex;(Iterable,Function);;Element of Argument[0];MapValue of ReturnValue;value" + ImmutableMap out = null; + Iterable in = (Iterable)newWithElement(source()); + out = Maps.uniqueIndex(in, (Function)null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Maps;false;uniqueIndex;(Iterator,Function);;Element of Argument[0];MapValue of ReturnValue;value" + ImmutableMap out = null; + Iterator in = (Iterator)newWithElement(source()); + out = Maps.uniqueIndex(in, (Function)null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Maps;false;unmodifiableBiMap;(BiMap);;MapKey of Argument[0];MapKey of ReturnValue;value" + BiMap out = null; + BiMap in = (BiMap)newWithMapKey(source()); + out = Maps.unmodifiableBiMap(in); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Maps;false;unmodifiableBiMap;(BiMap);;MapValue of Argument[0];MapValue of ReturnValue;value" + BiMap out = null; + BiMap in = (BiMap)newWithMapValue(source()); + out = Maps.unmodifiableBiMap(in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Maps;false;unmodifiableNavigableMap;(NavigableMap);;MapKey of Argument[0];MapKey of ReturnValue;value" + NavigableMap out = null; + NavigableMap in = (NavigableMap)newWithMapKey(source()); + out = Maps.unmodifiableNavigableMap(in); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Maps;false;unmodifiableNavigableMap;(NavigableMap);;MapValue of Argument[0];MapValue of ReturnValue;value" + NavigableMap out = null; + NavigableMap in = (NavigableMap)newWithMapValue(source()); + out = Maps.unmodifiableNavigableMap(in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;asMap;();;MapKey of Argument[-1];MapKey of ReturnValue;value" + SortedMap out = null; + AbstractSortedKeySortedSetMultimap in = (AbstractSortedKeySortedSetMultimap)newWithMapKey(source()); + out = in.asMap(); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;asMap;();;MapKey of Argument[-1];MapKey of ReturnValue;value" + NavigableMap out = null; + TreeMultimap in = (TreeMultimap)newWithMapKey(source()); + out = in.asMap(); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;asMap;();;MapKey of Argument[-1];MapKey of ReturnValue;value" + Map out = null; + SortedSetMultimap in = (SortedSetMultimap)newWithMapKey(source()); + out = in.asMap(); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;asMap;();;MapKey of Argument[-1];MapKey of ReturnValue;value" + Map out = null; + SetMultimap in = (SetMultimap)newWithMapKey(source()); + out = in.asMap(); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;asMap;();;MapKey of Argument[-1];MapKey of ReturnValue;value" + Map out = null; + Multimap in = (Multimap)newWithMapKey(source()); + out = in.asMap(); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;asMap;();;MapKey of Argument[-1];MapKey of ReturnValue;value" + Map out = null; + ListMultimap in = (ListMultimap)newWithMapKey(source()); + out = in.asMap(); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;asMap;();;MapKey of Argument[-1];MapKey of ReturnValue;value" + Map out = null; + AbstractSortedSetMultimap in = (AbstractSortedSetMultimap)newWithMapKey(source()); + out = in.asMap(); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;asMap;();;MapKey of Argument[-1];MapKey of ReturnValue;value" + Map out = null; + AbstractSetMultimap in = (AbstractSetMultimap)newWithMapKey(source()); + out = in.asMap(); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;asMap;();;MapKey of Argument[-1];MapKey of ReturnValue;value" + Map out = null; + AbstractMultimap in = (AbstractMultimap)newWithMapKey(source()); + out = in.asMap(); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;asMap;();;MapKey of Argument[-1];MapKey of ReturnValue;value" + Map out = null; + AbstractListMultimap in = (AbstractListMultimap)newWithMapKey(source()); + out = in.asMap(); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;asMap;();;MapKey of Argument[-1];MapKey of ReturnValue;value" + ImmutableMap out = null; + ImmutableMultimap in = (ImmutableMultimap)newWithMapKey(source()); + out = in.asMap(); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;asMap;();;MapValue of Argument[-1];Element of MapValue of ReturnValue;value" + SortedMap out = null; + AbstractSortedKeySortedSetMultimap in = (AbstractSortedKeySortedSetMultimap)newWithMapValue(source()); + out = in.asMap(); + sink(getElement(getMapValue(out))); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;asMap;();;MapValue of Argument[-1];Element of MapValue of ReturnValue;value" + NavigableMap out = null; + TreeMultimap in = (TreeMultimap)newWithMapValue(source()); + out = in.asMap(); + sink(getElement(getMapValue(out))); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;asMap;();;MapValue of Argument[-1];Element of MapValue of ReturnValue;value" + Map out = null; + SortedSetMultimap in = (SortedSetMultimap)newWithMapValue(source()); + out = in.asMap(); + sink(getElement(getMapValue(out))); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;asMap;();;MapValue of Argument[-1];Element of MapValue of ReturnValue;value" + Map out = null; + SetMultimap in = (SetMultimap)newWithMapValue(source()); + out = in.asMap(); + sink(getElement(getMapValue(out))); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;asMap;();;MapValue of Argument[-1];Element of MapValue of ReturnValue;value" + Map out = null; + Multimap in = (Multimap)newWithMapValue(source()); + out = in.asMap(); + sink(getElement(getMapValue(out))); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;asMap;();;MapValue of Argument[-1];Element of MapValue of ReturnValue;value" + Map out = null; + ListMultimap in = (ListMultimap)newWithMapValue(source()); + out = in.asMap(); + sink(getElement(getMapValue(out))); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;asMap;();;MapValue of Argument[-1];Element of MapValue of ReturnValue;value" + Map out = null; + AbstractSortedSetMultimap in = (AbstractSortedSetMultimap)newWithMapValue(source()); + out = in.asMap(); + sink(getElement(getMapValue(out))); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;asMap;();;MapValue of Argument[-1];Element of MapValue of ReturnValue;value" + Map out = null; + AbstractSetMultimap in = (AbstractSetMultimap)newWithMapValue(source()); + out = in.asMap(); + sink(getElement(getMapValue(out))); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;asMap;();;MapValue of Argument[-1];Element of MapValue of ReturnValue;value" + Map out = null; + AbstractMultimap in = (AbstractMultimap)newWithMapValue(source()); + out = in.asMap(); + sink(getElement(getMapValue(out))); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;asMap;();;MapValue of Argument[-1];Element of MapValue of ReturnValue;value" + Map out = null; + AbstractListMultimap in = (AbstractListMultimap)newWithMapValue(source()); + out = in.asMap(); + sink(getElement(getMapValue(out))); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;asMap;();;MapValue of Argument[-1];Element of MapValue of ReturnValue;value" + ImmutableMap out = null; + ImmutableMultimap in = (ImmutableMultimap)newWithMapValue(source()); + out = in.asMap(); + sink(getElement(getMapValue(out))); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;entries;();;MapKey of Argument[-1];MapKey of Element of ReturnValue;value" + Set out = null; + SetMultimap in = (SetMultimap)newWithMapKey(source()); + out = in.entries(); + sink(getMapKey(getElement(out))); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;entries;();;MapKey of Argument[-1];MapKey of Element of ReturnValue;value" + Set out = null; + LinkedHashMultimap in = (LinkedHashMultimap)newWithMapKey(source()); + out = in.entries(); + sink(getMapKey(getElement(out))); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;entries;();;MapKey of Argument[-1];MapKey of Element of ReturnValue;value" + Set out = null; + AbstractSetMultimap in = (AbstractSetMultimap)newWithMapKey(source()); + out = in.entries(); + sink(getMapKey(getElement(out))); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;entries;();;MapKey of Argument[-1];MapKey of Element of ReturnValue;value" + List out = null; + LinkedListMultimap in = (LinkedListMultimap)newWithMapKey(source()); + out = in.entries(); + sink(getMapKey(getElement(out))); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;entries;();;MapKey of Argument[-1];MapKey of Element of ReturnValue;value" + ImmutableSet out = null; + ImmutableSetMultimap in = (ImmutableSetMultimap)newWithMapKey(source()); + out = in.entries(); + sink(getMapKey(getElement(out))); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;entries;();;MapKey of Argument[-1];MapKey of Element of ReturnValue;value" + ImmutableCollection out = null; + ImmutableMultimap in = (ImmutableMultimap)newWithMapKey(source()); + out = in.entries(); + sink(getMapKey(getElement(out))); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;entries;();;MapKey of Argument[-1];MapKey of Element of ReturnValue;value" + Collection out = null; + Multimap in = (Multimap)newWithMapKey(source()); + out = in.entries(); + sink(getMapKey(getElement(out))); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;entries;();;MapKey of Argument[-1];MapKey of Element of ReturnValue;value" + Collection out = null; + AbstractMultimap in = (AbstractMultimap)newWithMapKey(source()); + out = in.entries(); + sink(getMapKey(getElement(out))); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;entries;();;MapKey of Argument[-1];MapKey of Element of ReturnValue;value" + Collection out = null; + AbstractMapBasedMultimap in = (AbstractMapBasedMultimap)newWithMapKey(source()); + out = in.entries(); + sink(getMapKey(getElement(out))); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;entries;();;MapValue of Argument[-1];MapValue of Element of ReturnValue;value" + Set out = null; + SetMultimap in = (SetMultimap)newWithMapValue(source()); + out = in.entries(); + sink(getMapValue(getElement(out))); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;entries;();;MapValue of Argument[-1];MapValue of Element of ReturnValue;value" + Set out = null; + LinkedHashMultimap in = (LinkedHashMultimap)newWithMapValue(source()); + out = in.entries(); + sink(getMapValue(getElement(out))); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;entries;();;MapValue of Argument[-1];MapValue of Element of ReturnValue;value" + Set out = null; + AbstractSetMultimap in = (AbstractSetMultimap)newWithMapValue(source()); + out = in.entries(); + sink(getMapValue(getElement(out))); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;entries;();;MapValue of Argument[-1];MapValue of Element of ReturnValue;value" + List out = null; + LinkedListMultimap in = (LinkedListMultimap)newWithMapValue(source()); + out = in.entries(); + sink(getMapValue(getElement(out))); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;entries;();;MapValue of Argument[-1];MapValue of Element of ReturnValue;value" + ImmutableSet out = null; + ImmutableSetMultimap in = (ImmutableSetMultimap)newWithMapValue(source()); + out = in.entries(); + sink(getMapValue(getElement(out))); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;entries;();;MapValue of Argument[-1];MapValue of Element of ReturnValue;value" + ImmutableCollection out = null; + ImmutableMultimap in = (ImmutableMultimap)newWithMapValue(source()); + out = in.entries(); + sink(getMapValue(getElement(out))); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;entries;();;MapValue of Argument[-1];MapValue of Element of ReturnValue;value" + Collection out = null; + Multimap in = (Multimap)newWithMapValue(source()); + out = in.entries(); + sink(getMapValue(getElement(out))); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;entries;();;MapValue of Argument[-1];MapValue of Element of ReturnValue;value" + Collection out = null; + AbstractMultimap in = (AbstractMultimap)newWithMapValue(source()); + out = in.entries(); + sink(getMapValue(getElement(out))); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;entries;();;MapValue of Argument[-1];MapValue of Element of ReturnValue;value" + Collection out = null; + AbstractMapBasedMultimap in = (AbstractMapBasedMultimap)newWithMapValue(source()); + out = in.entries(); + sink(getMapValue(getElement(out))); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;get;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" + SortedSet out = null; + SortedSetMultimap in = (SortedSetMultimap)newWithMapValue(source()); + out = in.get(null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;get;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" + SortedSet out = null; + SortedSetMultimap in = (SortedSetMultimap)newWithMapValue(source()); + out = in.get((Object)null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;get;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" + SortedSet out = null; + AbstractSortedSetMultimap in = (AbstractSortedSetMultimap)newWithMapValue(source()); + out = in.get(null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;get;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" + SortedSet out = null; + AbstractSortedSetMultimap in = (AbstractSortedSetMultimap)newWithMapValue(source()); + out = in.get((Object)null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;get;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" + Set out = null; + SetMultimap in = (SetMultimap)newWithMapValue(source()); + out = in.get(null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;get;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" + Set out = null; + SetMultimap in = (SetMultimap)newWithMapValue(source()); + out = in.get((Object)null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;get;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" + Set out = null; + AbstractSetMultimap in = (AbstractSetMultimap)newWithMapValue(source()); + out = in.get(null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;get;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" + Set out = null; + AbstractSetMultimap in = (AbstractSetMultimap)newWithMapValue(source()); + out = in.get((Object)null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;get;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" + NavigableSet out = null; + TreeMultimap in = (TreeMultimap)newWithMapValue(source()); + out = in.get(null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;get;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" + List out = null; + ListMultimap in = (ListMultimap)newWithMapValue(source()); + out = in.get(null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;get;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" + List out = null; + ListMultimap in = (ListMultimap)newWithMapValue(source()); + out = in.get((Object)null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;get;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" + List out = null; + LinkedListMultimap in = (LinkedListMultimap)newWithMapValue(source()); + out = in.get(null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;get;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" + List out = null; + AbstractListMultimap in = (AbstractListMultimap)newWithMapValue(source()); + out = in.get(null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;get;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" + List out = null; + AbstractListMultimap in = (AbstractListMultimap)newWithMapValue(source()); + out = in.get((Object)null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;get;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" + ImmutableSet out = null; + ImmutableSetMultimap in = (ImmutableSetMultimap)newWithMapValue(source()); + out = in.get(null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;get;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" + ImmutableList out = null; + ImmutableListMultimap in = (ImmutableListMultimap)newWithMapValue(source()); + out = in.get(null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;get;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" + ImmutableCollection out = null; + ImmutableMultimap in = (ImmutableMultimap)newWithMapValue(source()); + out = in.get(null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;get;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" + ImmutableCollection out = null; + ImmutableMultimap in = (ImmutableMultimap)newWithMapValue(source()); + out = in.get((Object)null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;get;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" + Collection out = null; + Multimap in = (Multimap)newWithMapValue(source()); + out = in.get(null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;get;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" + Collection out = null; + Multimap in = (Multimap)newWithMapValue(source()); + out = in.get((Object)null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;get;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" + Collection out = null; + AbstractMapBasedMultimap in = (AbstractMapBasedMultimap)newWithMapValue(source()); + out = in.get(null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;get;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" + Collection out = null; + AbstractMapBasedMultimap in = (AbstractMapBasedMultimap)newWithMapValue(source()); + out = in.get((Object)null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;keySet;();;MapKey of Argument[-1];Element of ReturnValue;value" + SortedSet out = null; + AbstractSortedKeySortedSetMultimap in = (AbstractSortedKeySortedSetMultimap)newWithMapKey(source()); + out = in.keySet(); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;keySet;();;MapKey of Argument[-1];Element of ReturnValue;value" + Set out = null; + Multimap in = (Multimap)newWithMapKey(source()); + out = in.keySet(); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;keySet;();;MapKey of Argument[-1];Element of ReturnValue;value" + Set out = null; + LinkedHashMultimap in = (LinkedHashMultimap)newWithMapKey(source()); + out = in.keySet(); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;keySet;();;MapKey of Argument[-1];Element of ReturnValue;value" + Set out = null; + AbstractMultimap in = (AbstractMultimap)newWithMapKey(source()); + out = in.keySet(); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;keySet;();;MapKey of Argument[-1];Element of ReturnValue;value" + NavigableSet out = null; + TreeMultimap in = (TreeMultimap)newWithMapKey(source()); + out = in.keySet(); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;keySet;();;MapKey of Argument[-1];Element of ReturnValue;value" + ImmutableSet out = null; + ImmutableMultimap in = (ImmutableMultimap)newWithMapKey(source()); + out = in.keySet(); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;keys;();;MapKey of Argument[-1];Element of ReturnValue;value" + Multiset out = null; + Multimap in = (Multimap)newWithMapKey(source()); + out = in.keys(); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;keys;();;MapKey of Argument[-1];Element of ReturnValue;value" + Multiset out = null; + AbstractMultimap in = (AbstractMultimap)newWithMapKey(source()); + out = in.keys(); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;keys;();;MapKey of Argument[-1];Element of ReturnValue;value" + ImmutableMultiset out = null; + ImmutableMultimap in = (ImmutableMultimap)newWithMapKey(source()); + out = in.keys(); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;put;(Object,Object);;Argument[0];MapKey of Argument[-1];value" + Multimap out = null; + Object in = (Object)source(); + out.put(in, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;put;(Object,Object);;Argument[0];MapKey of Argument[-1];value" + Multimap out = null; + Object in = (Object)source(); + out.put(in, (Object)null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;put;(Object,Object);;Argument[0];MapKey of Argument[-1];value" + LinkedListMultimap out = null; + Object in = (Object)source(); + out.put(in, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;put;(Object,Object);;Argument[0];MapKey of Argument[-1];value" + ImmutableMultimap out = null; + Object in = (Object)source(); + out.put(in, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;put;(Object,Object);;Argument[0];MapKey of Argument[-1];value" + ImmutableMultimap out = null; + Object in = (Object)source(); + out.put(in, (Object)null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;put;(Object,Object);;Argument[0];MapKey of Argument[-1];value" + AbstractSetMultimap out = null; + Object in = (Object)source(); + out.put(in, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;put;(Object,Object);;Argument[0];MapKey of Argument[-1];value" + AbstractSetMultimap out = null; + Object in = (Object)source(); + out.put(in, (Object)null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;put;(Object,Object);;Argument[0];MapKey of Argument[-1];value" + AbstractMultimap out = null; + Object in = (Object)source(); + out.put(in, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;put;(Object,Object);;Argument[0];MapKey of Argument[-1];value" + AbstractMultimap out = null; + Object in = (Object)source(); + out.put(in, (Object)null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;put;(Object,Object);;Argument[0];MapKey of Argument[-1];value" + AbstractMapBasedMultimap out = null; + Object in = (Object)source(); + out.put(in, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;put;(Object,Object);;Argument[0];MapKey of Argument[-1];value" + AbstractMapBasedMultimap out = null; + Object in = (Object)source(); + out.put(in, (Object)null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;put;(Object,Object);;Argument[0];MapKey of Argument[-1];value" + AbstractListMultimap out = null; + Object in = (Object)source(); + out.put(in, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;put;(Object,Object);;Argument[0];MapKey of Argument[-1];value" + AbstractListMultimap out = null; + Object in = (Object)source(); + out.put(in, (Object)null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;put;(Object,Object);;Argument[1];MapValue of Argument[-1];value" + Multimap out = null; + Object in = (Object)source(); + out.put(null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;put;(Object,Object);;Argument[1];MapValue of Argument[-1];value" + Multimap out = null; + Object in = (Object)source(); + out.put((Object)null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;put;(Object,Object);;Argument[1];MapValue of Argument[-1];value" + LinkedListMultimap out = null; + Object in = (Object)source(); + out.put(null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;put;(Object,Object);;Argument[1];MapValue of Argument[-1];value" + ImmutableMultimap out = null; + Object in = (Object)source(); + out.put(null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;put;(Object,Object);;Argument[1];MapValue of Argument[-1];value" + ImmutableMultimap out = null; + Object in = (Object)source(); + out.put((Object)null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;put;(Object,Object);;Argument[1];MapValue of Argument[-1];value" + AbstractSetMultimap out = null; + Object in = (Object)source(); + out.put(null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;put;(Object,Object);;Argument[1];MapValue of Argument[-1];value" + AbstractSetMultimap out = null; + Object in = (Object)source(); + out.put((Object)null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;put;(Object,Object);;Argument[1];MapValue of Argument[-1];value" + AbstractMultimap out = null; + Object in = (Object)source(); + out.put(null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;put;(Object,Object);;Argument[1];MapValue of Argument[-1];value" + AbstractMultimap out = null; + Object in = (Object)source(); + out.put((Object)null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;put;(Object,Object);;Argument[1];MapValue of Argument[-1];value" + AbstractMapBasedMultimap out = null; + Object in = (Object)source(); + out.put(null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;put;(Object,Object);;Argument[1];MapValue of Argument[-1];value" + AbstractMapBasedMultimap out = null; + Object in = (Object)source(); + out.put((Object)null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;put;(Object,Object);;Argument[1];MapValue of Argument[-1];value" + AbstractListMultimap out = null; + Object in = (Object)source(); + out.put(null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;put;(Object,Object);;Argument[1];MapValue of Argument[-1];value" + AbstractListMultimap out = null; + Object in = (Object)source(); + out.put((Object)null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;putAll;(Multimap);;MapKey of Argument[0];MapKey of Argument[-1];value" + Multimap out = null; + Multimap in = (Multimap)newWithMapKey(source()); + out.putAll(in); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;putAll;(Multimap);;MapKey of Argument[0];MapKey of Argument[-1];value" + ImmutableMultimap out = null; + Multimap in = (Multimap)newWithMapKey(source()); + out.putAll(in); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;putAll;(Multimap);;MapKey of Argument[0];MapKey of Argument[-1];value" + AbstractMultimap out = null; + Multimap in = (Multimap)newWithMapKey(source()); + out.putAll(in); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;putAll;(Multimap);;MapValue of Argument[0];MapValue of Argument[-1];value" + Multimap out = null; + Multimap in = (Multimap)newWithMapValue(source()); + out.putAll(in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;putAll;(Multimap);;MapValue of Argument[0];MapValue of Argument[-1];value" + ImmutableMultimap out = null; + Multimap in = (Multimap)newWithMapValue(source()); + out.putAll(in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;putAll;(Multimap);;MapValue of Argument[0];MapValue of Argument[-1];value" + AbstractMultimap out = null; + Multimap in = (Multimap)newWithMapValue(source()); + out.putAll(in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;putAll;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" + Multimap out = null; + Object in = (Object)source(); + out.putAll(in, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;putAll;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" + Multimap out = null; + Object in = (Object)source(); + out.putAll(in, (Iterable)null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;putAll;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" + ImmutableMultimap out = null; + Object in = (Object)source(); + out.putAll(in, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;putAll;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" + ImmutableMultimap out = null; + Object in = (Object)source(); + out.putAll(in, (Iterable)null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;putAll;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" + AbstractMultimap out = null; + Object in = (Object)source(); + out.putAll(in, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;putAll;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" + AbstractMultimap out = null; + Object in = (Object)source(); + out.putAll(in, (Iterable)null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;putAll;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" + Multimap out = null; + Iterable in = (Iterable)newWithElement(source()); + out.putAll(null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;putAll;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" + Multimap out = null; + Iterable in = (Iterable)newWithElement(source()); + out.putAll((Object)null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;putAll;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" + ImmutableMultimap out = null; + Iterable in = (Iterable)newWithElement(source()); + out.putAll(null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;putAll;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" + ImmutableMultimap out = null; + Iterable in = (Iterable)newWithElement(source()); + out.putAll((Object)null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;putAll;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" + AbstractMultimap out = null; + Iterable in = (Iterable)newWithElement(source()); + out.putAll(null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;putAll;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" + AbstractMultimap out = null; + Iterable in = (Iterable)newWithElement(source()); + out.putAll((Object)null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;removeAll;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" + SortedSet out = null; + SortedSetMultimap in = (SortedSetMultimap)newWithMapValue(source()); + out = in.removeAll(null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;removeAll;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" + SortedSet out = null; + SortedSetMultimap in = (SortedSetMultimap)newWithMapValue(source()); + out = in.removeAll((Object)null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;removeAll;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" + SortedSet out = null; + AbstractSortedSetMultimap in = (AbstractSortedSetMultimap)newWithMapValue(source()); + out = in.removeAll(null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;removeAll;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" + SortedSet out = null; + AbstractSortedSetMultimap in = (AbstractSortedSetMultimap)newWithMapValue(source()); + out = in.removeAll((Object)null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;removeAll;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" + Set out = null; + SetMultimap in = (SetMultimap)newWithMapValue(source()); + out = in.removeAll(null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;removeAll;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" + Set out = null; + SetMultimap in = (SetMultimap)newWithMapValue(source()); + out = in.removeAll((Object)null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;removeAll;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" + Set out = null; + AbstractSetMultimap in = (AbstractSetMultimap)newWithMapValue(source()); + out = in.removeAll(null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;removeAll;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" + Set out = null; + AbstractSetMultimap in = (AbstractSetMultimap)newWithMapValue(source()); + out = in.removeAll((Object)null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;removeAll;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" + List out = null; + ListMultimap in = (ListMultimap)newWithMapValue(source()); + out = in.removeAll(null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;removeAll;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" + List out = null; + ListMultimap in = (ListMultimap)newWithMapValue(source()); + out = in.removeAll((Object)null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;removeAll;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" + List out = null; + LinkedListMultimap in = (LinkedListMultimap)newWithMapValue(source()); + out = in.removeAll(null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;removeAll;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" + List out = null; + AbstractListMultimap in = (AbstractListMultimap)newWithMapValue(source()); + out = in.removeAll(null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;removeAll;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" + List out = null; + AbstractListMultimap in = (AbstractListMultimap)newWithMapValue(source()); + out = in.removeAll((Object)null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;removeAll;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" + ImmutableSet out = null; + ImmutableSetMultimap in = (ImmutableSetMultimap)newWithMapValue(source()); + out = in.removeAll(null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;removeAll;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" + ImmutableList out = null; + ImmutableListMultimap in = (ImmutableListMultimap)newWithMapValue(source()); + out = in.removeAll(null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;removeAll;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" + ImmutableCollection out = null; + ImmutableMultimap in = (ImmutableMultimap)newWithMapValue(source()); + out = in.removeAll(null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;removeAll;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" + ImmutableCollection out = null; + ImmutableMultimap in = (ImmutableMultimap)newWithMapValue(source()); + out = in.removeAll((Object)null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;removeAll;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" + Collection out = null; + Multimap in = (Multimap)newWithMapValue(source()); + out = in.removeAll(null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;removeAll;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" + Collection out = null; + Multimap in = (Multimap)newWithMapValue(source()); + out = in.removeAll((Object)null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;removeAll;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" + Collection out = null; + AbstractMapBasedMultimap in = (AbstractMapBasedMultimap)newWithMapValue(source()); + out = in.removeAll(null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;removeAll;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" + Collection out = null; + AbstractMapBasedMultimap in = (AbstractMapBasedMultimap)newWithMapValue(source()); + out = in.removeAll((Object)null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" + SortedSetMultimap out = null; + Object in = (Object)source(); + out.replaceValues(in, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" + SortedSetMultimap out = null; + Object in = (Object)source(); + out.replaceValues(in, (Iterable)null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" + SetMultimap out = null; + Object in = (Object)source(); + out.replaceValues(in, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" + SetMultimap out = null; + Object in = (Object)source(); + out.replaceValues(in, (Iterable)null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" + Multimap out = null; + Object in = (Object)source(); + out.replaceValues(in, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" + Multimap out = null; + Object in = (Object)source(); + out.replaceValues(in, (Iterable)null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" + ListMultimap out = null; + Object in = (Object)source(); + out.replaceValues(in, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" + ListMultimap out = null; + Object in = (Object)source(); + out.replaceValues(in, (Iterable)null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" + LinkedListMultimap out = null; + Object in = (Object)source(); + out.replaceValues(in, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" + LinkedHashMultimap out = null; + Object in = (Object)source(); + out.replaceValues(in, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" + ImmutableSetMultimap out = null; + Object in = (Object)source(); + out.replaceValues(in, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" + ImmutableMultimap out = null; + Object in = (Object)source(); + out.replaceValues(in, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" + ImmutableMultimap out = null; + Object in = (Object)source(); + out.replaceValues(in, (Iterable)null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" + ImmutableListMultimap out = null; + Object in = (Object)source(); + out.replaceValues(in, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" + AbstractSortedSetMultimap out = null; + Object in = (Object)source(); + out.replaceValues(in, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" + AbstractSortedSetMultimap out = null; + Object in = (Object)source(); + out.replaceValues(in, (Iterable)null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" + AbstractSetMultimap out = null; + Object in = (Object)source(); + out.replaceValues(in, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" + AbstractSetMultimap out = null; + Object in = (Object)source(); + out.replaceValues(in, (Iterable)null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" + AbstractMultimap out = null; + Object in = (Object)source(); + out.replaceValues(in, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" + AbstractMultimap out = null; + Object in = (Object)source(); + out.replaceValues(in, (Iterable)null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" + AbstractMapBasedMultimap out = null; + Object in = (Object)source(); + out.replaceValues(in, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" + AbstractMapBasedMultimap out = null; + Object in = (Object)source(); + out.replaceValues(in, (Iterable)null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" + AbstractListMultimap out = null; + Object in = (Object)source(); + out.replaceValues(in, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" + AbstractListMultimap out = null; + Object in = (Object)source(); + out.replaceValues(in, (Iterable)null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" + SortedSetMultimap out = null; + Iterable in = (Iterable)newWithElement(source()); + out.replaceValues(null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" + SortedSetMultimap out = null; + Iterable in = (Iterable)newWithElement(source()); + out.replaceValues((Object)null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" + SetMultimap out = null; + Iterable in = (Iterable)newWithElement(source()); + out.replaceValues(null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" + SetMultimap out = null; + Iterable in = (Iterable)newWithElement(source()); + out.replaceValues((Object)null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" + Multimap out = null; + Iterable in = (Iterable)newWithElement(source()); + out.replaceValues(null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" + Multimap out = null; + Iterable in = (Iterable)newWithElement(source()); + out.replaceValues((Object)null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" + ListMultimap out = null; + Iterable in = (Iterable)newWithElement(source()); + out.replaceValues(null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" + ListMultimap out = null; + Iterable in = (Iterable)newWithElement(source()); + out.replaceValues((Object)null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" + LinkedListMultimap out = null; + Iterable in = (Iterable)newWithElement(source()); + out.replaceValues(null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" + LinkedHashMultimap out = null; + Iterable in = (Iterable)newWithElement(source()); + out.replaceValues(null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" + ImmutableSetMultimap out = null; + Iterable in = (Iterable)newWithElement(source()); + out.replaceValues(null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" + ImmutableMultimap out = null; + Iterable in = (Iterable)newWithElement(source()); + out.replaceValues(null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" + ImmutableMultimap out = null; + Iterable in = (Iterable)newWithElement(source()); + out.replaceValues((Object)null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" + ImmutableListMultimap out = null; + Iterable in = (Iterable)newWithElement(source()); + out.replaceValues(null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" + AbstractSortedSetMultimap out = null; + Iterable in = (Iterable)newWithElement(source()); + out.replaceValues(null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" + AbstractSortedSetMultimap out = null; + Iterable in = (Iterable)newWithElement(source()); + out.replaceValues((Object)null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" + AbstractSetMultimap out = null; + Iterable in = (Iterable)newWithElement(source()); + out.replaceValues(null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" + AbstractSetMultimap out = null; + Iterable in = (Iterable)newWithElement(source()); + out.replaceValues((Object)null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" + AbstractMultimap out = null; + Iterable in = (Iterable)newWithElement(source()); + out.replaceValues(null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" + AbstractMultimap out = null; + Iterable in = (Iterable)newWithElement(source()); + out.replaceValues((Object)null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" + AbstractMapBasedMultimap out = null; + Iterable in = (Iterable)newWithElement(source()); + out.replaceValues(null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" + AbstractMapBasedMultimap out = null; + Iterable in = (Iterable)newWithElement(source()); + out.replaceValues((Object)null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" + AbstractListMultimap out = null; + Iterable in = (Iterable)newWithElement(source()); + out.replaceValues(null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" + AbstractListMultimap out = null; + Iterable in = (Iterable)newWithElement(source()); + out.replaceValues((Object)null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;MapValue of Argument[-1];Element of ReturnValue;value" + SortedSet out = null; + SortedSetMultimap in = (SortedSetMultimap)newWithMapValue(source()); + out = in.replaceValues(null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;MapValue of Argument[-1];Element of ReturnValue;value" + SortedSet out = null; + SortedSetMultimap in = (SortedSetMultimap)newWithMapValue(source()); + out = in.replaceValues((Object)null, (Iterable)null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;MapValue of Argument[-1];Element of ReturnValue;value" + SortedSet out = null; + AbstractSortedSetMultimap in = (AbstractSortedSetMultimap)newWithMapValue(source()); + out = in.replaceValues(null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;MapValue of Argument[-1];Element of ReturnValue;value" + SortedSet out = null; + AbstractSortedSetMultimap in = (AbstractSortedSetMultimap)newWithMapValue(source()); + out = in.replaceValues((Object)null, (Iterable)null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;MapValue of Argument[-1];Element of ReturnValue;value" + Set out = null; + SetMultimap in = (SetMultimap)newWithMapValue(source()); + out = in.replaceValues(null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;MapValue of Argument[-1];Element of ReturnValue;value" + Set out = null; + SetMultimap in = (SetMultimap)newWithMapValue(source()); + out = in.replaceValues((Object)null, (Iterable)null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;MapValue of Argument[-1];Element of ReturnValue;value" + Set out = null; + LinkedHashMultimap in = (LinkedHashMultimap)newWithMapValue(source()); + out = in.replaceValues(null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;MapValue of Argument[-1];Element of ReturnValue;value" + Set out = null; + AbstractSetMultimap in = (AbstractSetMultimap)newWithMapValue(source()); + out = in.replaceValues(null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;MapValue of Argument[-1];Element of ReturnValue;value" + Set out = null; + AbstractSetMultimap in = (AbstractSetMultimap)newWithMapValue(source()); + out = in.replaceValues((Object)null, (Iterable)null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;MapValue of Argument[-1];Element of ReturnValue;value" + List out = null; + ListMultimap in = (ListMultimap)newWithMapValue(source()); + out = in.replaceValues(null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;MapValue of Argument[-1];Element of ReturnValue;value" + List out = null; + ListMultimap in = (ListMultimap)newWithMapValue(source()); + out = in.replaceValues((Object)null, (Iterable)null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;MapValue of Argument[-1];Element of ReturnValue;value" + List out = null; + LinkedListMultimap in = (LinkedListMultimap)newWithMapValue(source()); + out = in.replaceValues(null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;MapValue of Argument[-1];Element of ReturnValue;value" + List out = null; + AbstractListMultimap in = (AbstractListMultimap)newWithMapValue(source()); + out = in.replaceValues(null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;MapValue of Argument[-1];Element of ReturnValue;value" + List out = null; + AbstractListMultimap in = (AbstractListMultimap)newWithMapValue(source()); + out = in.replaceValues((Object)null, (Iterable)null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;MapValue of Argument[-1];Element of ReturnValue;value" + ImmutableSet out = null; + ImmutableSetMultimap in = (ImmutableSetMultimap)newWithMapValue(source()); + out = in.replaceValues(null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;MapValue of Argument[-1];Element of ReturnValue;value" + ImmutableList out = null; + ImmutableListMultimap in = (ImmutableListMultimap)newWithMapValue(source()); + out = in.replaceValues(null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;MapValue of Argument[-1];Element of ReturnValue;value" + ImmutableCollection out = null; + ImmutableMultimap in = (ImmutableMultimap)newWithMapValue(source()); + out = in.replaceValues(null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;MapValue of Argument[-1];Element of ReturnValue;value" + ImmutableCollection out = null; + ImmutableMultimap in = (ImmutableMultimap)newWithMapValue(source()); + out = in.replaceValues((Object)null, (Iterable)null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;MapValue of Argument[-1];Element of ReturnValue;value" + Collection out = null; + Multimap in = (Multimap)newWithMapValue(source()); + out = in.replaceValues(null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;MapValue of Argument[-1];Element of ReturnValue;value" + Collection out = null; + Multimap in = (Multimap)newWithMapValue(source()); + out = in.replaceValues((Object)null, (Iterable)null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;MapValue of Argument[-1];Element of ReturnValue;value" + Collection out = null; + AbstractMultimap in = (AbstractMultimap)newWithMapValue(source()); + out = in.replaceValues(null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;MapValue of Argument[-1];Element of ReturnValue;value" + Collection out = null; + AbstractMultimap in = (AbstractMultimap)newWithMapValue(source()); + out = in.replaceValues((Object)null, (Iterable)null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;MapValue of Argument[-1];Element of ReturnValue;value" + Collection out = null; + AbstractMapBasedMultimap in = (AbstractMapBasedMultimap)newWithMapValue(source()); + out = in.replaceValues(null, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;MapValue of Argument[-1];Element of ReturnValue;value" + Collection out = null; + AbstractMapBasedMultimap in = (AbstractMapBasedMultimap)newWithMapValue(source()); + out = in.replaceValues((Object)null, (Iterable)null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;values;();;MapValue of Argument[-1];Element of ReturnValue;value" + List out = null; + LinkedListMultimap in = (LinkedListMultimap)newWithMapValue(source()); + out = in.values(); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;values;();;MapValue of Argument[-1];Element of ReturnValue;value" + ImmutableCollection out = null; + ImmutableMultimap in = (ImmutableMultimap)newWithMapValue(source()); + out = in.values(); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;values;();;MapValue of Argument[-1];Element of ReturnValue;value" + Collection out = null; + Multimap in = (Multimap)newWithMapValue(source()); + out = in.values(); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;values;();;MapValue of Argument[-1];Element of ReturnValue;value" + Collection out = null; + LinkedHashMultimap in = (LinkedHashMultimap)newWithMapValue(source()); + out = in.values(); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;values;();;MapValue of Argument[-1];Element of ReturnValue;value" + Collection out = null; + AbstractSortedSetMultimap in = (AbstractSortedSetMultimap)newWithMapValue(source()); + out = in.values(); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;values;();;MapValue of Argument[-1];Element of ReturnValue;value" + Collection out = null; + AbstractMultimap in = (AbstractMultimap)newWithMapValue(source()); + out = in.values(); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimap;true;values;();;MapValue of Argument[-1];Element of ReturnValue;value" + Collection out = null; + AbstractMapBasedMultimap in = (AbstractMapBasedMultimap)newWithMapValue(source()); + out = in.values(); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimaps;false;asMap;(ListMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value" + Map out = null; + ListMultimap in = (ListMultimap)newWithMapKey(source()); + out = Multimaps.asMap(in); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimaps;false;asMap;(ListMultimap);;MapValue of Argument[0];Element of MapValue of ReturnValue;value" + Map out = null; + ListMultimap in = (ListMultimap)newWithMapValue(source()); + out = Multimaps.asMap(in); + sink(getElement(getMapValue(out))); // $hasValueFlow + } + { + // "com.google.common.collect;Multimaps;false;asMap;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value" + Map out = null; + Multimap in = (Multimap)newWithMapKey(source()); + out = Multimaps.asMap(in); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimaps;false;asMap;(Multimap);;MapValue of Argument[0];Element of MapValue of ReturnValue;value" + Map out = null; + Multimap in = (Multimap)newWithMapValue(source()); + out = Multimaps.asMap(in); + sink(getElement(getMapValue(out))); // $hasValueFlow + } + { + // "com.google.common.collect;Multimaps;false;asMap;(SetMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value" + Map out = null; + SetMultimap in = (SetMultimap)newWithMapKey(source()); + out = Multimaps.asMap(in); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimaps;false;asMap;(SetMultimap);;MapValue of Argument[0];Element of MapValue of ReturnValue;value" + Map out = null; + SetMultimap in = (SetMultimap)newWithMapValue(source()); + out = Multimaps.asMap(in); + sink(getElement(getMapValue(out))); // $hasValueFlow + } + { + // "com.google.common.collect;Multimaps;false;asMap;(SortedSetMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value" + Map out = null; + SortedSetMultimap in = (SortedSetMultimap)newWithMapKey(source()); + out = Multimaps.asMap(in); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimaps;false;asMap;(SortedSetMultimap);;MapValue of Argument[0];Element of MapValue of ReturnValue;value" + Map out = null; + SortedSetMultimap in = (SortedSetMultimap)newWithMapValue(source()); + out = Multimaps.asMap(in); + sink(getElement(getMapValue(out))); // $hasValueFlow + } + { + // "com.google.common.collect;Multimaps;false;filterEntries;(Multimap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value" + Multimap out = null; + Multimap in = (Multimap)newWithMapKey(source()); + out = Multimaps.filterEntries(in, (Predicate)null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimaps;false;filterEntries;(Multimap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value" + Multimap out = null; + Multimap in = (Multimap)newWithMapValue(source()); + out = Multimaps.filterEntries(in, (Predicate)null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimaps;false;filterEntries;(SetMultimap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value" + SetMultimap out = null; + SetMultimap in = (SetMultimap)newWithMapKey(source()); + out = Multimaps.filterEntries(in, (Predicate)null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimaps;false;filterEntries;(SetMultimap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value" + SetMultimap out = null; + SetMultimap in = (SetMultimap)newWithMapValue(source()); + out = Multimaps.filterEntries(in, (Predicate)null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimaps;false;filterKeys;(Multimap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value" + Multimap out = null; + Multimap in = (Multimap)newWithMapKey(source()); + out = Multimaps.filterKeys(in, (Predicate)null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimaps;false;filterKeys;(Multimap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value" + Multimap out = null; + Multimap in = (Multimap)newWithMapValue(source()); + out = Multimaps.filterKeys(in, (Predicate)null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimaps;false;filterKeys;(SetMultimap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value" + SetMultimap out = null; + SetMultimap in = (SetMultimap)newWithMapKey(source()); + out = Multimaps.filterKeys(in, (Predicate)null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimaps;false;filterKeys;(SetMultimap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value" + SetMultimap out = null; + SetMultimap in = (SetMultimap)newWithMapValue(source()); + out = Multimaps.filterKeys(in, (Predicate)null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimaps;false;filterValues;(Multimap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value" + Multimap out = null; + Multimap in = (Multimap)newWithMapKey(source()); + out = Multimaps.filterValues(in, (Predicate)null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimaps;false;filterValues;(Multimap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value" + Multimap out = null; + Multimap in = (Multimap)newWithMapValue(source()); + out = Multimaps.filterValues(in, (Predicate)null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimaps;false;filterValues;(SetMultimap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value" + SetMultimap out = null; + SetMultimap in = (SetMultimap)newWithMapKey(source()); + out = Multimaps.filterValues(in, (Predicate)null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimaps;false;filterValues;(SetMultimap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value" + SetMultimap out = null; + SetMultimap in = (SetMultimap)newWithMapValue(source()); + out = Multimaps.filterValues(in, (Predicate)null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimaps;false;forMap;(Map);;MapKey of Argument[0];MapKey of ReturnValue;value" + SetMultimap out = null; + Map in = (Map)newWithMapKey(source()); + out = Multimaps.forMap(in); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimaps;false;forMap;(Map);;MapValue of Argument[0];MapValue of ReturnValue;value" + SetMultimap out = null; + Map in = (Map)newWithMapValue(source()); + out = Multimaps.forMap(in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimaps;false;index;(Iterable,Function);;Element of Argument[0];MapValue of ReturnValue;value" + ImmutableListMultimap out = null; + Iterable in = (Iterable)newWithElement(source()); + out = Multimaps.index(in, (Function)null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimaps;false;index;(Iterator,Function);;Element of Argument[0];MapValue of ReturnValue;value" + ImmutableListMultimap out = null; + Iterator in = (Iterator)newWithElement(source()); + out = Multimaps.index(in, (Function)null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimaps;false;invertFrom;(Multimap,Multimap);;MapKey of Argument[0];MapValue of ReturnValue;value" + Multimap out = null; + Multimap in = (Multimap)newWithMapKey(source()); + out = Multimaps.invertFrom(in, null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimaps;false;invertFrom;(Multimap,Multimap);;MapValue of Argument[0];MapKey of ReturnValue;value" + Multimap out = null; + Multimap in = (Multimap)newWithMapValue(source()); + out = Multimaps.invertFrom(in, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimaps;false;newListMultimap;(Map,Supplier);;Element of MapValue of Argument[0];MapValue of ReturnValue;value" + ListMultimap out = null; + Map in = (Map)newWithMapValue(newWithElement(source())); + out = Multimaps.newListMultimap(in, null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimaps;false;newListMultimap;(Map,Supplier);;MapKey of Argument[0];MapKey of ReturnValue;value" + ListMultimap out = null; + Map in = (Map)newWithMapKey(source()); + out = Multimaps.newListMultimap(in, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimaps;false;newMultimap;(Map,Supplier);;Element of MapValue of Argument[0];MapValue of ReturnValue;value" + Multimap out = null; + Map in = (Map)newWithMapValue(newWithElement(source())); + out = Multimaps.newMultimap(in, null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimaps;false;newMultimap;(Map,Supplier);;MapKey of Argument[0];MapKey of ReturnValue;value" + Multimap out = null; + Map in = (Map)newWithMapKey(source()); + out = Multimaps.newMultimap(in, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimaps;false;newSetMultimap;(Map,Supplier);;Element of MapValue of Argument[0];MapValue of ReturnValue;value" + SetMultimap out = null; + Map in = (Map)newWithMapValue(newWithElement(source())); + out = Multimaps.newSetMultimap(in, null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimaps;false;newSetMultimap;(Map,Supplier);;MapKey of Argument[0];MapKey of ReturnValue;value" + SetMultimap out = null; + Map in = (Map)newWithMapKey(source()); + out = Multimaps.newSetMultimap(in, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimaps;false;newSortedSetMultimap;(Map,Supplier);;Element of MapValue of Argument[0];MapValue of ReturnValue;value" + SortedSetMultimap out = null; + Map in = (Map)newWithMapValue(newWithElement(source())); + out = Multimaps.newSortedSetMultimap(in, null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimaps;false;newSortedSetMultimap;(Map,Supplier);;MapKey of Argument[0];MapKey of ReturnValue;value" + SortedSetMultimap out = null; + Map in = (Map)newWithMapKey(source()); + out = Multimaps.newSortedSetMultimap(in, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimaps;false;synchronizedListMultimap;(ListMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value" + ListMultimap out = null; + ListMultimap in = (ListMultimap)newWithMapKey(source()); + out = Multimaps.synchronizedListMultimap(in); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimaps;false;synchronizedListMultimap;(ListMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value" + ListMultimap out = null; + ListMultimap in = (ListMultimap)newWithMapValue(source()); + out = Multimaps.synchronizedListMultimap(in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimaps;false;synchronizedMultimap;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value" + Multimap out = null; + Multimap in = (Multimap)newWithMapKey(source()); + out = Multimaps.synchronizedMultimap(in); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimaps;false;synchronizedMultimap;(Multimap);;MapValue of Argument[0];MapValue of ReturnValue;value" + Multimap out = null; + Multimap in = (Multimap)newWithMapValue(source()); + out = Multimaps.synchronizedMultimap(in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimaps;false;synchronizedSetMultimap;(SetMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value" + SetMultimap out = null; + SetMultimap in = (SetMultimap)newWithMapKey(source()); + out = Multimaps.synchronizedSetMultimap(in); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimaps;false;synchronizedSetMultimap;(SetMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value" + SetMultimap out = null; + SetMultimap in = (SetMultimap)newWithMapValue(source()); + out = Multimaps.synchronizedSetMultimap(in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimaps;false;synchronizedSortedSetMultimap;(SortedSetMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value" + SortedSetMultimap out = null; + SortedSetMultimap in = (SortedSetMultimap)newWithMapKey(source()); + out = Multimaps.synchronizedSortedSetMultimap(in); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimaps;false;synchronizedSortedSetMultimap;(SortedSetMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value" + SortedSetMultimap out = null; + SortedSetMultimap in = (SortedSetMultimap)newWithMapValue(source()); + out = Multimaps.synchronizedSortedSetMultimap(in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimaps;false;transformValues;(ListMultimap,Function);;MapKey of Argument[0];MapKey of ReturnValue;value" + ListMultimap out = null; + ListMultimap in = (ListMultimap)newWithMapKey(source()); + out = Multimaps.transformValues(in, (Function)null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimaps;false;transformValues;(Multimap,Function);;MapKey of Argument[0];MapKey of ReturnValue;value" + Multimap out = null; + Multimap in = (Multimap)newWithMapKey(source()); + out = Multimaps.transformValues(in, (Function)null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimaps;false;unmodifiableListMultimap;(ImmutableListMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value" + ListMultimap out = null; + ImmutableListMultimap in = (ImmutableListMultimap)newWithMapKey(source()); + out = Multimaps.unmodifiableListMultimap(in); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimaps;false;unmodifiableListMultimap;(ImmutableListMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value" + ListMultimap out = null; + ImmutableListMultimap in = (ImmutableListMultimap)newWithMapValue(source()); + out = Multimaps.unmodifiableListMultimap(in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimaps;false;unmodifiableListMultimap;(ListMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value" + ListMultimap out = null; + ListMultimap in = (ListMultimap)newWithMapKey(source()); + out = Multimaps.unmodifiableListMultimap(in); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimaps;false;unmodifiableListMultimap;(ListMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value" + ListMultimap out = null; + ListMultimap in = (ListMultimap)newWithMapValue(source()); + out = Multimaps.unmodifiableListMultimap(in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimaps;false;unmodifiableMultimap;(ImmutableMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value" + Multimap out = null; + ImmutableMultimap in = (ImmutableMultimap)newWithMapKey(source()); + out = Multimaps.unmodifiableMultimap(in); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimaps;false;unmodifiableMultimap;(ImmutableMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value" + Multimap out = null; + ImmutableMultimap in = (ImmutableMultimap)newWithMapValue(source()); + out = Multimaps.unmodifiableMultimap(in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimaps;false;unmodifiableMultimap;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value" + Multimap out = null; + Multimap in = (Multimap)newWithMapKey(source()); + out = Multimaps.unmodifiableMultimap(in); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimaps;false;unmodifiableMultimap;(Multimap);;MapValue of Argument[0];MapValue of ReturnValue;value" + Multimap out = null; + Multimap in = (Multimap)newWithMapValue(source()); + out = Multimaps.unmodifiableMultimap(in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimaps;false;unmodifiableSetMultimap;(ImmutableSetMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value" + SetMultimap out = null; + ImmutableSetMultimap in = (ImmutableSetMultimap)newWithMapKey(source()); + out = Multimaps.unmodifiableSetMultimap(in); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimaps;false;unmodifiableSetMultimap;(ImmutableSetMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value" + SetMultimap out = null; + ImmutableSetMultimap in = (ImmutableSetMultimap)newWithMapValue(source()); + out = Multimaps.unmodifiableSetMultimap(in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimaps;false;unmodifiableSetMultimap;(SetMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value" + SetMultimap out = null; + SetMultimap in = (SetMultimap)newWithMapKey(source()); + out = Multimaps.unmodifiableSetMultimap(in); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimaps;false;unmodifiableSetMultimap;(SetMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value" + SetMultimap out = null; + SetMultimap in = (SetMultimap)newWithMapValue(source()); + out = Multimaps.unmodifiableSetMultimap(in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimaps;false;unmodifiableSortedSetMultimap;(SortedSetMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value" + SortedSetMultimap out = null; + SortedSetMultimap in = (SortedSetMultimap)newWithMapKey(source()); + out = Multimaps.unmodifiableSortedSetMultimap(in); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multimaps;false;unmodifiableSortedSetMultimap;(SortedSetMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value" + SortedSetMultimap out = null; + SortedSetMultimap in = (SortedSetMultimap)newWithMapValue(source()); + out = Multimaps.unmodifiableSortedSetMultimap(in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multiset$Entry;true;getElement;();;Element of Argument[-1];ReturnValue;value" + Object out = null; + Multiset.Entry in = (Multiset.Entry)newWithElement(source()); + out = in.getElement(); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;Multiset;true;add;(Object,int);;Argument[0];Element of Argument[-1];value" + TreeMultiset out = null; + Object in = (Object)source(); + out.add(in, 0); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multiset;true;add;(Object,int);;Argument[0];Element of Argument[-1];value" + Multiset out = null; + Object in = (Object)source(); + out.add(in, 0); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multiset;true;add;(Object,int);;Argument[0];Element of Argument[-1];value" + ImmutableMultiset out = null; + Object in = (Object)source(); + out.add(in, 0); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multiset;true;add;(Object,int);;Argument[0];Element of Argument[-1];value" + ConcurrentHashMultiset out = null; + Object in = (Object)source(); + out.add(in, 0); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multiset;true;add;(Object,int);;Argument[0];Element of Argument[-1];value" + AbstractMultiset out = null; + Object in = (Object)source(); + out.add(in, 0); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multiset;true;add;(Object,int);;Argument[0];Element of Argument[-1];value" + AbstractMapBasedMultiset out = null; + Object in = (Object)source(); + out.add(in, 0); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multiset;true;elementSet;();;Element of Argument[-1];Element of ReturnValue;value" + SortedSet out = null; + SortedMultisetBridge in = (SortedMultisetBridge)newWithElement(source()); + out = in.elementSet(); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multiset;true;elementSet;();;Element of Argument[-1];Element of ReturnValue;value" + Set out = null; + Multiset in = (Multiset)newWithElement(source()); + out = in.elementSet(); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multiset;true;elementSet;();;Element of Argument[-1];Element of ReturnValue;value" + Set out = null; + AbstractMultiset in = (AbstractMultiset)newWithElement(source()); + out = in.elementSet(); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multiset;true;elementSet;();;Element of Argument[-1];Element of ReturnValue;value" + NavigableSet out = null; + SortedMultiset in = (SortedMultiset)newWithElement(source()); + out = in.elementSet(); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multiset;true;elementSet;();;Element of Argument[-1];Element of ReturnValue;value" + NavigableSet out = null; + AbstractSortedMultiset in = (AbstractSortedMultiset)newWithElement(source()); + out = in.elementSet(); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multiset;true;elementSet;();;Element of Argument[-1];Element of ReturnValue;value" + ImmutableSortedSet out = null; + ImmutableSortedMultiset in = (ImmutableSortedMultiset)newWithElement(source()); + out = in.elementSet(); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multiset;true;elementSet;();;Element of Argument[-1];Element of ReturnValue;value" + ImmutableSet out = null; + ImmutableMultiset in = (ImmutableMultiset)newWithElement(source()); + out = in.elementSet(); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multiset;true;entrySet;();;Element of Argument[-1];Element of Element of ReturnValue;value" + Set out = null; + SortedMultiset in = (SortedMultiset)newWithElement(source()); + out = in.entrySet(); + sink(getElement(getElement(out))); // $hasValueFlow + } + { + // "com.google.common.collect;Multiset;true;entrySet;();;Element of Argument[-1];Element of Element of ReturnValue;value" + Set out = null; + Multiset in = (Multiset)newWithElement(source()); + out = in.entrySet(); + sink(getElement(getElement(out))); // $hasValueFlow + } + { + // "com.google.common.collect;Multiset;true;entrySet;();;Element of Argument[-1];Element of Element of ReturnValue;value" + Set out = null; + AbstractMultiset in = (AbstractMultiset)newWithElement(source()); + out = in.entrySet(); + sink(getElement(getElement(out))); // $hasValueFlow + } + { + // "com.google.common.collect;Multiset;true;entrySet;();;Element of Argument[-1];Element of Element of ReturnValue;value" + Set out = null; + AbstractMapBasedMultiset in = (AbstractMapBasedMultiset)newWithElement(source()); + out = in.entrySet(); + sink(getElement(getElement(out))); // $hasValueFlow + } + { + // "com.google.common.collect;Multiset;true;entrySet;();;Element of Argument[-1];Element of Element of ReturnValue;value" + ImmutableSet out = null; + ImmutableMultiset in = (ImmutableMultiset)newWithElement(source()); + out = in.entrySet(); + sink(getElement(getElement(out))); // $hasValueFlow + } + { + // "com.google.common.collect;Multiset;true;setCount;(Object,int);;Argument[0];Element of Argument[-1];value" + TreeMultiset out = null; + Object in = (Object)source(); + out.setCount(in, 0); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multiset;true;setCount;(Object,int);;Argument[0];Element of Argument[-1];value" + Multiset out = null; + Object in = (Object)source(); + out.setCount(in, 0); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multiset;true;setCount;(Object,int);;Argument[0];Element of Argument[-1];value" + ImmutableMultiset out = null; + Object in = (Object)source(); + out.setCount(in, 0); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multiset;true;setCount;(Object,int);;Argument[0];Element of Argument[-1];value" + ConcurrentHashMultiset out = null; + Object in = (Object)source(); + out.setCount(in, 0); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multiset;true;setCount;(Object,int);;Argument[0];Element of Argument[-1];value" + AbstractMultiset out = null; + Object in = (Object)source(); + out.setCount(in, 0); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multiset;true;setCount;(Object,int);;Argument[0];Element of Argument[-1];value" + AbstractMapBasedMultiset out = null; + Object in = (Object)source(); + out.setCount(in, 0); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multiset;true;setCount;(Object,int,int);;Argument[0];Element of Argument[-1];value" + TreeMultiset out = null; + Object in = (Object)source(); + out.setCount(in, 0, 0); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multiset;true;setCount;(Object,int,int);;Argument[0];Element of Argument[-1];value" + Multiset out = null; + Object in = (Object)source(); + out.setCount(in, 0, 0); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multiset;true;setCount;(Object,int,int);;Argument[0];Element of Argument[-1];value" + ImmutableMultiset out = null; + Object in = (Object)source(); + out.setCount(in, 0, 0); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multiset;true;setCount;(Object,int,int);;Argument[0];Element of Argument[-1];value" + ConcurrentHashMultiset out = null; + Object in = (Object)source(); + out.setCount(in, 0, 0); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multiset;true;setCount;(Object,int,int);;Argument[0];Element of Argument[-1];value" + AbstractMultiset out = null; + Object in = (Object)source(); + out.setCount(in, 0, 0); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multisets;false;copyHighestCountFirst;(Multiset);;Element of Argument[0];Element of ReturnValue;value" + ImmutableMultiset out = null; + Multiset in = (Multiset)newWithElement(source()); + out = Multisets.copyHighestCountFirst(in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multisets;false;difference;(Multiset,Multiset);;Element of Argument[0];Element of ReturnValue;value" + Multiset out = null; + Multiset in = (Multiset)newWithElement(source()); + out = Multisets.difference(in, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multisets;false;filter;(Multiset,Predicate);;Element of Argument[0];Element of ReturnValue;value" + Multiset out = null; + Multiset in = (Multiset)newWithElement(source()); + out = Multisets.filter(in, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multisets;false;immutableEntry;(Object,int);;Argument[0];Element of ReturnValue;value" + Multiset.Entry out = null; + Object in = (Object)source(); + out = Multisets.immutableEntry(in, 0); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multisets;false;sum;(Multiset,Multiset);;Element of Argument[0..1];Element of ReturnValue;value" + Multiset out = null; + Multiset in = (Multiset)newWithElement(source()); + out = Multisets.sum(null, in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multisets;false;sum;(Multiset,Multiset);;Element of Argument[0..1];Element of ReturnValue;value" + Multiset out = null; + Multiset in = (Multiset)newWithElement(source()); + out = Multisets.sum(in, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multisets;false;union;(Multiset,Multiset);;Element of Argument[0..1];Element of ReturnValue;value" + Multiset out = null; + Multiset in = (Multiset)newWithElement(source()); + out = Multisets.union(null, in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multisets;false;union;(Multiset,Multiset);;Element of Argument[0..1];Element of ReturnValue;value" + Multiset out = null; + Multiset in = (Multiset)newWithElement(source()); + out = Multisets.union(in, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multisets;false;unmodifiableMultiset;(ImmutableMultiset);;Element of Argument[0];Element of ReturnValue;value" + Multiset out = null; + ImmutableMultiset in = (ImmutableMultiset)newWithElement(source()); + out = Multisets.unmodifiableMultiset(in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multisets;false;unmodifiableMultiset;(Multiset);;Element of Argument[0];Element of ReturnValue;value" + Multiset out = null; + Multiset in = (Multiset)newWithElement(source()); + out = Multisets.unmodifiableMultiset(in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Multisets;false;unmodifiableSortedMultiset;(SortedMultiset);;Element of Argument[0];Element of ReturnValue;value" + SortedMultiset out = null; + SortedMultiset in = (SortedMultiset)newWithElement(source()); + out = Multisets.unmodifiableSortedMultiset(in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;MutableClassToInstanceMap;true;create;(Map);;MapKey of Argument[0];MapKey of ReturnValue;value" + MutableClassToInstanceMap out = null; + Map in = (Map)newWithMapKey(source()); + out = MutableClassToInstanceMap.create(in); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;MutableClassToInstanceMap;true;create;(Map);;MapValue of Argument[0];MapValue of ReturnValue;value" + MutableClassToInstanceMap out = null; + Map in = (Map)newWithMapValue(source()); + out = MutableClassToInstanceMap.create(in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Queues;false;drain;(BlockingQueue,Collection,int,Duration);;Element of Argument[0];Element of Argument[1];value" + Collection out = null; + BlockingQueue in = (BlockingQueue)newWithElement(source()); + Queues.drain(in, out, 0, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Queues;false;drain;(BlockingQueue,Collection,int,long,TimeUnit);;Element of Argument[0];Element of Argument[1];value" + Collection out = null; + BlockingQueue in = (BlockingQueue)newWithElement(source()); + Queues.drain(in, out, 0, 0L, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Queues;false;newArrayDeque;(Iterable);;Element of Argument[0];Element of ReturnValue;value" + ArrayDeque out = null; + Iterable in = (Iterable)newWithElement(source()); + out = Queues.newArrayDeque(in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Queues;false;newConcurrentLinkedQueue;(Iterable);;Element of Argument[0];Element of ReturnValue;value" + ConcurrentLinkedQueue out = null; + Iterable in = (Iterable)newWithElement(source()); + out = Queues.newConcurrentLinkedQueue(in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Queues;false;newLinkedBlockingDeque;(Iterable);;Element of Argument[0];Element of ReturnValue;value" + LinkedBlockingDeque out = null; + Iterable in = (Iterable)newWithElement(source()); + out = Queues.newLinkedBlockingDeque(in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Queues;false;newLinkedBlockingQueue;(Iterable);;Element of Argument[0];Element of ReturnValue;value" + LinkedBlockingQueue out = null; + Iterable in = (Iterable)newWithElement(source()); + out = Queues.newLinkedBlockingQueue(in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Queues;false;newPriorityBlockingQueue;(Iterable);;Element of Argument[0];Element of ReturnValue;value" + PriorityBlockingQueue out = null; + Iterable in = (Iterable)newWithElement(source()); + out = Queues.newPriorityBlockingQueue(in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Queues;false;newPriorityQueue;(Iterable);;Element of Argument[0];Element of ReturnValue;value" + PriorityQueue out = null; + Iterable in = (Iterable)newWithElement(source()); + out = Queues.newPriorityQueue(in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Queues;false;synchronizedDeque;(Deque);;Element of Argument[0];Element of ReturnValue;value" + Deque out = null; + Deque in = (Deque)newWithElement(source()); + out = Queues.synchronizedDeque(in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Queues;false;synchronizedQueue;(Queue);;Element of Argument[0];Element of ReturnValue;value" + Queue out = null; + Queue in = (Queue)newWithElement(source()); + out = Queues.synchronizedQueue(in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Sets$SetView;true;copyInto;(Set);;Element of Argument[-1];Element of Argument[0];value" + Set out = null; + Sets.SetView in = (Sets.SetView)newWithElement(source()); + in.copyInto(out); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Sets$SetView;true;immutableCopy;();;Element of Argument[-1];Element of ReturnValue;value" + ImmutableSet out = null; + Sets.SetView in = (Sets.SetView)newWithElement(source()); + out = in.immutableCopy(); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Sets;false;cartesianProduct;(List);;Element of Element of Argument[0];Element of Element of ReturnValue;value" + Set out = null; + List in = (List)newWithElement(newWithElement(source())); + out = Sets.cartesianProduct(in); + sink(getElement(getElement(out))); // $hasValueFlow + } + { + // "com.google.common.collect;Sets;false;cartesianProduct;(Set[]);;Element of ArrayElement of Argument[0];Element of Element of ReturnValue;value" + Set out = null; + Set[] in = (Set[])newWithArrayElement(newWithElement(source())); + out = Sets.cartesianProduct(in); + sink(getElement(getElement(out))); // $hasValueFlow + } + { + // "com.google.common.collect;Sets;false;combinations;(Set,int);;Element of Argument[0];Element of Element of ReturnValue;value" + Set out = null; + Set in = (Set)newWithElement(source()); + out = Sets.combinations(in, 0); + sink(getElement(getElement(out))); // $hasValueFlow + } + { + // "com.google.common.collect;Sets;false;difference;(Set,Set);;Element of Argument[0];Element of ReturnValue;value" + Sets.SetView out = null; + Set in = (Set)newWithElement(source()); + out = Sets.difference(in, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Sets;false;filter;(NavigableSet,Predicate);;Element of Argument[0];Element of ReturnValue;value" + NavigableSet out = null; + NavigableSet in = (NavigableSet)newWithElement(source()); + out = Sets.filter(in, (Predicate)null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Sets;false;filter;(Set,Predicate);;Element of Argument[0];Element of ReturnValue;value" + Set out = null; + Set in = (Set)newWithElement(source()); + out = Sets.filter(in, (Predicate)null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Sets;false;filter;(SortedSet,Predicate);;Element of Argument[0];Element of ReturnValue;value" + SortedSet out = null; + SortedSet in = (SortedSet)newWithElement(source()); + out = Sets.filter(in, (Predicate)null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Sets;false;newConcurrentHashSet;(Iterable);;Element of Argument[0];Element of ReturnValue;value" + Set out = null; + Iterable in = (Iterable)newWithElement(source()); + out = Sets.newConcurrentHashSet(in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Sets;false;newCopyOnWriteArraySet;(Iterable);;Element of Argument[0];Element of ReturnValue;value" + CopyOnWriteArraySet out = null; + Iterable in = (Iterable)newWithElement(source()); + out = Sets.newCopyOnWriteArraySet(in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Sets;false;newHashSet;(Iterable);;Element of Argument[0];Element of ReturnValue;value" + HashSet out = null; + Iterable in = (Iterable)newWithElement(source()); + out = Sets.newHashSet(in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Sets;false;newHashSet;(Iterator);;Element of Argument[0];Element of ReturnValue;value" + HashSet out = null; + Iterator in = (Iterator)newWithElement(source()); + out = Sets.newHashSet(in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Sets;false;newLinkedHashSet;(Iterable);;Element of Argument[0];Element of ReturnValue;value" + LinkedHashSet out = null; + Iterable in = (Iterable)newWithElement(source()); + out = Sets.newLinkedHashSet(in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Sets;false;newSetFromMap;(Map);;MapKey of Argument[0];Element of ReturnValue;value" + Set out = null; + Map in = (Map)newWithMapKey(source()); + out = Sets.newSetFromMap(in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Sets;false;newTreeSet;(Iterable);;Element of Argument[0];Element of ReturnValue;value" + TreeSet out = null; + Iterable in = (Iterable)newWithElement(source()); + out = Sets.newTreeSet(in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Sets;false;powerSet;(Set);;Element of Argument[0];Element of Element of ReturnValue;value" + Set out = null; + Set in = (Set)newWithElement(source()); + out = Sets.powerSet(in); + sink(getElement(getElement(out))); // $hasValueFlow + } + { + // "com.google.common.collect;Sets;false;subSet;(NavigableSet,Range);;Element of Argument[0];Element of ReturnValue;value" + NavigableSet out = null; + NavigableSet in = (NavigableSet)newWithElement(source()); + out = Sets.subSet(in, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Sets;false;symmetricDifference;(Set,Set);;Element of Argument[0..1];Element of ReturnValue;value" + Sets.SetView out = null; + Set in = (Set)newWithElement(source()); + out = Sets.symmetricDifference(null, in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Sets;false;symmetricDifference;(Set,Set);;Element of Argument[0..1];Element of ReturnValue;value" + Sets.SetView out = null; + Set in = (Set)newWithElement(source()); + out = Sets.symmetricDifference(in, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Sets;false;synchronizedNavigableSet;(NavigableSet);;Element of Argument[0];Element of ReturnValue;value" + NavigableSet out = null; + NavigableSet in = (NavigableSet)newWithElement(source()); + out = Sets.synchronizedNavigableSet(in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Sets;false;union;(Set,Set);;Element of Argument[0..1];Element of ReturnValue;value" + Sets.SetView out = null; + Set in = (Set)newWithElement(source()); + out = Sets.union(null, in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Sets;false;union;(Set,Set);;Element of Argument[0..1];Element of ReturnValue;value" + Sets.SetView out = null; + Set in = (Set)newWithElement(source()); + out = Sets.union(in, null); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Sets;false;unmodifiableNavigableSet;(NavigableSet);;Element of Argument[0];Element of ReturnValue;value" + NavigableSet out = null; + NavigableSet in = (NavigableSet)newWithElement(source()); + out = Sets.unmodifiableNavigableSet(in); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Table$Cell;true;getValue;();;MapValue of Argument[-1];ReturnValue;value" + Object out = null; + Table.Cell in = (Table.Cell)newWithMapValue(source()); + out = in.getValue(); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;Table;true;cellSet;();;MapKey of Argument[-1];MapKey of Element of ReturnValue;value" + Set out = null; + Table in = (Table)newWithMapKey(source()); + out = in.cellSet(); + sink(getMapKey(getElement(out))); // $hasValueFlow + } + { + // "com.google.common.collect;Table;true;cellSet;();;MapKey of Argument[-1];MapKey of Element of ReturnValue;value" + Set out = null; + StandardTable in = (StandardTable)newWithMapKey(source()); + out = in.cellSet(); + sink(getMapKey(getElement(out))); // $hasValueFlow + } + { + // "com.google.common.collect;Table;true;cellSet;();;MapKey of Argument[-1];MapKey of Element of ReturnValue;value" + Set out = null; + ArrayTable in = (ArrayTable)newWithMapKey(source()); + out = in.cellSet(); + sink(getMapKey(getElement(out))); // $hasValueFlow + } + { + // "com.google.common.collect;Table;true;cellSet;();;MapKey of Argument[-1];MapKey of Element of ReturnValue;value" + Set out = null; + AbstractTable in = (AbstractTable)newWithMapKey(source()); + out = in.cellSet(); + sink(getMapKey(getElement(out))); // $hasValueFlow + } + { + // "com.google.common.collect;Table;true;cellSet;();;MapKey of Argument[-1];MapKey of Element of ReturnValue;value" + ImmutableSet out = null; + ImmutableTable in = (ImmutableTable)newWithMapKey(source()); + out = in.cellSet(); + sink(getMapKey(getElement(out))); // $hasValueFlow + } + { + // "com.google.common.collect;Table;true;cellSet;();;MapValue of Argument[-1];MapValue of Element of ReturnValue;value" + Set out = null; + Table in = (Table)newWithMapValue(source()); + out = in.cellSet(); + sink(getMapValue(getElement(out))); // $hasValueFlow + } + { + // "com.google.common.collect;Table;true;cellSet;();;MapValue of Argument[-1];MapValue of Element of ReturnValue;value" + Set out = null; + StandardTable in = (StandardTable)newWithMapValue(source()); + out = in.cellSet(); + sink(getMapValue(getElement(out))); // $hasValueFlow + } + { + // "com.google.common.collect;Table;true;cellSet;();;MapValue of Argument[-1];MapValue of Element of ReturnValue;value" + Set out = null; + ArrayTable in = (ArrayTable)newWithMapValue(source()); + out = in.cellSet(); + sink(getMapValue(getElement(out))); // $hasValueFlow + } + { + // "com.google.common.collect;Table;true;cellSet;();;MapValue of Argument[-1];MapValue of Element of ReturnValue;value" + Set out = null; + AbstractTable in = (AbstractTable)newWithMapValue(source()); + out = in.cellSet(); + sink(getMapValue(getElement(out))); // $hasValueFlow + } + { + // "com.google.common.collect;Table;true;cellSet;();;MapValue of Argument[-1];MapValue of Element of ReturnValue;value" + ImmutableSet out = null; + ImmutableTable in = (ImmutableTable)newWithMapValue(source()); + out = in.cellSet(); + sink(getMapValue(getElement(out))); // $hasValueFlow + } + { + // "com.google.common.collect;Table;true;column;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" + Map out = null; + Table in = (Table)newWithMapValue(source()); + out = in.column(null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Table;true;column;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" + Map out = null; + Table in = (Table)newWithMapValue(source()); + out = in.column((Object)null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Table;true;column;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" + Map out = null; + StandardTable in = (StandardTable)newWithMapValue(source()); + out = in.column(null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Table;true;column;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" + Map out = null; + StandardTable in = (StandardTable)newWithMapValue(source()); + out = in.column((Object)null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Table;true;column;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" + Map out = null; + ArrayTable in = (ArrayTable)newWithMapValue(source()); + out = in.column(null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Table;true;column;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" + ImmutableMap out = null; + ImmutableTable in = (ImmutableTable)newWithMapValue(source()); + out = in.column(null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Table;true;columnMap;();;MapValue of Argument[-1];MapValue of MapValue of ReturnValue;value" + Map out = null; + Table in = (Table)newWithMapValue(source()); + out = in.columnMap(); + sink(getMapValue(getMapValue(out))); // $hasValueFlow + } + { + // "com.google.common.collect;Table;true;columnMap;();;MapValue of Argument[-1];MapValue of MapValue of ReturnValue;value" + Map out = null; + StandardTable in = (StandardTable)newWithMapValue(source()); + out = in.columnMap(); + sink(getMapValue(getMapValue(out))); // $hasValueFlow + } + { + // "com.google.common.collect;Table;true;columnMap;();;MapValue of Argument[-1];MapValue of MapValue of ReturnValue;value" + Map out = null; + ArrayTable in = (ArrayTable)newWithMapValue(source()); + out = in.columnMap(); + sink(getMapValue(getMapValue(out))); // $hasValueFlow + } + { + // "com.google.common.collect;Table;true;columnMap;();;MapValue of Argument[-1];MapValue of MapValue of ReturnValue;value" + ImmutableMap out = null; + ImmutableTable in = (ImmutableTable)newWithMapValue(source()); + out = in.columnMap(); + sink(getMapValue(getMapValue(out))); // $hasValueFlow + } + { + // "com.google.common.collect;Table;true;get;(Object,Object);;MapValue of Argument[-1];ReturnValue;value" + Object out = null; + Table in = (Table)newWithMapValue(source()); + out = in.get(null, null); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;Table;true;get;(Object,Object);;MapValue of Argument[-1];ReturnValue;value" + Object out = null; + Table in = (Table)newWithMapValue(source()); + out = in.get((Object)null, (Object)null); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;Table;true;get;(Object,Object);;MapValue of Argument[-1];ReturnValue;value" + Object out = null; + StandardTable in = (StandardTable)newWithMapValue(source()); + out = in.get(null, null); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;Table;true;get;(Object,Object);;MapValue of Argument[-1];ReturnValue;value" + Object out = null; + StandardTable in = (StandardTable)newWithMapValue(source()); + out = in.get((Object)null, (Object)null); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;Table;true;get;(Object,Object);;MapValue of Argument[-1];ReturnValue;value" + Object out = null; + HashBasedTable in = (HashBasedTable)newWithMapValue(source()); + out = in.get(null, null); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;Table;true;get;(Object,Object);;MapValue of Argument[-1];ReturnValue;value" + Object out = null; + ArrayTable in = (ArrayTable)newWithMapValue(source()); + out = in.get(null, null); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;Table;true;get;(Object,Object);;MapValue of Argument[-1];ReturnValue;value" + Object out = null; + AbstractTable in = (AbstractTable)newWithMapValue(source()); + out = in.get(null, null); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;Table;true;get;(Object,Object);;MapValue of Argument[-1];ReturnValue;value" + Object out = null; + AbstractTable in = (AbstractTable)newWithMapValue(source()); + out = in.get((Object)null, (Object)null); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;Table;true;put;(Object,Object,Object);;Argument[2];MapValue of Argument[-1];value" + Table out = null; + Object in = (Object)source(); + out.put(null, null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Table;true;put;(Object,Object,Object);;Argument[2];MapValue of Argument[-1];value" + Table out = null; + Object in = (Object)source(); + out.put((Object)null, (Object)null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Table;true;put;(Object,Object,Object);;Argument[2];MapValue of Argument[-1];value" + StandardTable out = null; + Object in = (Object)source(); + out.put(null, null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Table;true;put;(Object,Object,Object);;Argument[2];MapValue of Argument[-1];value" + StandardTable out = null; + Object in = (Object)source(); + out.put((Object)null, (Object)null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Table;true;put;(Object,Object,Object);;Argument[2];MapValue of Argument[-1];value" + ImmutableTable out = null; + Object in = (Object)source(); + out.put(null, null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Table;true;put;(Object,Object,Object);;Argument[2];MapValue of Argument[-1];value" + ArrayTable out = null; + Object in = (Object)source(); + out.put(null, null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Table;true;put;(Object,Object,Object);;Argument[2];MapValue of Argument[-1];value" + AbstractTable out = null; + Object in = (Object)source(); + out.put(null, null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Table;true;put;(Object,Object,Object);;Argument[2];MapValue of Argument[-1];value" + AbstractTable out = null; + Object in = (Object)source(); + out.put((Object)null, (Object)null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Table;true;putAll;(Table);;MapKey of Argument[0];MapKey of Argument[-1];value" + Table out = null; + Table in = (Table)newWithMapKey(source()); + out.putAll(in); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Table;true;putAll;(Table);;MapKey of Argument[0];MapKey of Argument[-1];value" + ImmutableTable out = null; + Table in = (Table)newWithMapKey(source()); + out.putAll(in); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Table;true;putAll;(Table);;MapKey of Argument[0];MapKey of Argument[-1];value" + ArrayTable out = null; + Table in = (Table)newWithMapKey(source()); + out.putAll(in); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Table;true;putAll;(Table);;MapKey of Argument[0];MapKey of Argument[-1];value" + AbstractTable out = null; + Table in = (Table)newWithMapKey(source()); + out.putAll(in); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Table;true;putAll;(Table);;MapValue of Argument[0];MapValue of Argument[-1];value" + Table out = null; + Table in = (Table)newWithMapValue(source()); + out.putAll(in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Table;true;putAll;(Table);;MapValue of Argument[0];MapValue of Argument[-1];value" + ImmutableTable out = null; + Table in = (Table)newWithMapValue(source()); + out.putAll(in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Table;true;putAll;(Table);;MapValue of Argument[0];MapValue of Argument[-1];value" + ArrayTable out = null; + Table in = (Table)newWithMapValue(source()); + out.putAll(in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Table;true;putAll;(Table);;MapValue of Argument[0];MapValue of Argument[-1];value" + AbstractTable out = null; + Table in = (Table)newWithMapValue(source()); + out.putAll(in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Table;true;remove;(Object,Object);;MapValue of Argument[-1];ReturnValue;value" + Object out = null; + Table in = (Table)newWithMapValue(source()); + out = in.remove(null, null); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;Table;true;remove;(Object,Object);;MapValue of Argument[-1];ReturnValue;value" + Object out = null; + Table in = (Table)newWithMapValue(source()); + out = in.remove((Object)null, (Object)null); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;Table;true;remove;(Object,Object);;MapValue of Argument[-1];ReturnValue;value" + Object out = null; + StandardTable in = (StandardTable)newWithMapValue(source()); + out = in.remove(null, null); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;Table;true;remove;(Object,Object);;MapValue of Argument[-1];ReturnValue;value" + Object out = null; + StandardTable in = (StandardTable)newWithMapValue(source()); + out = in.remove((Object)null, (Object)null); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;Table;true;remove;(Object,Object);;MapValue of Argument[-1];ReturnValue;value" + Object out = null; + ImmutableTable in = (ImmutableTable)newWithMapValue(source()); + out = in.remove(null, null); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;Table;true;remove;(Object,Object);;MapValue of Argument[-1];ReturnValue;value" + Object out = null; + HashBasedTable in = (HashBasedTable)newWithMapValue(source()); + out = in.remove(null, null); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;Table;true;remove;(Object,Object);;MapValue of Argument[-1];ReturnValue;value" + Object out = null; + ArrayTable in = (ArrayTable)newWithMapValue(source()); + out = in.remove(null, null); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;Table;true;remove;(Object,Object);;MapValue of Argument[-1];ReturnValue;value" + Object out = null; + AbstractTable in = (AbstractTable)newWithMapValue(source()); + out = in.remove(null, null); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;Table;true;remove;(Object,Object);;MapValue of Argument[-1];ReturnValue;value" + Object out = null; + AbstractTable in = (AbstractTable)newWithMapValue(source()); + out = in.remove((Object)null, (Object)null); + sink(out); // $hasValueFlow + } + { + // "com.google.common.collect;Table;true;row;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" + SortedMap out = null; + TreeBasedTable in = (TreeBasedTable)newWithMapValue(source()); + out = in.row(null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Table;true;row;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" + Map out = null; + Table in = (Table)newWithMapValue(source()); + out = in.row(null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Table;true;row;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" + Map out = null; + Table in = (Table)newWithMapValue(source()); + out = in.row((Object)null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Table;true;row;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" + Map out = null; + StandardTable in = (StandardTable)newWithMapValue(source()); + out = in.row(null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Table;true;row;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" + Map out = null; + StandardTable in = (StandardTable)newWithMapValue(source()); + out = in.row((Object)null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Table;true;row;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" + Map out = null; + ArrayTable in = (ArrayTable)newWithMapValue(source()); + out = in.row(null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Table;true;row;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" + ImmutableMap out = null; + ImmutableTable in = (ImmutableTable)newWithMapValue(source()); + out = in.row(null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Table;true;rowMap;();;MapValue of Argument[-1];MapValue of MapValue of ReturnValue;value" + SortedMap out = null; + TreeBasedTable in = (TreeBasedTable)newWithMapValue(source()); + out = in.rowMap(); + sink(getMapValue(getMapValue(out))); // $hasValueFlow + } + { + // "com.google.common.collect;Table;true;rowMap;();;MapValue of Argument[-1];MapValue of MapValue of ReturnValue;value" + SortedMap out = null; + StandardRowSortedTable in = (StandardRowSortedTable)newWithMapValue(source()); + out = in.rowMap(); + sink(getMapValue(getMapValue(out))); // $hasValueFlow + } + { + // "com.google.common.collect;Table;true;rowMap;();;MapValue of Argument[-1];MapValue of MapValue of ReturnValue;value" + SortedMap out = null; + RowSortedTable in = (RowSortedTable)newWithMapValue(source()); + out = in.rowMap(); + sink(getMapValue(getMapValue(out))); // $hasValueFlow + } + { + // "com.google.common.collect;Table;true;rowMap;();;MapValue of Argument[-1];MapValue of MapValue of ReturnValue;value" + Map out = null; + Table in = (Table)newWithMapValue(source()); + out = in.rowMap(); + sink(getMapValue(getMapValue(out))); // $hasValueFlow + } + { + // "com.google.common.collect;Table;true;rowMap;();;MapValue of Argument[-1];MapValue of MapValue of ReturnValue;value" + Map out = null; + StandardTable in = (StandardTable)newWithMapValue(source()); + out = in.rowMap(); + sink(getMapValue(getMapValue(out))); // $hasValueFlow + } + { + // "com.google.common.collect;Table;true;rowMap;();;MapValue of Argument[-1];MapValue of MapValue of ReturnValue;value" + Map out = null; + ArrayTable in = (ArrayTable)newWithMapValue(source()); + out = in.rowMap(); + sink(getMapValue(getMapValue(out))); // $hasValueFlow + } + { + // "com.google.common.collect;Table;true;rowMap;();;MapValue of Argument[-1];MapValue of MapValue of ReturnValue;value" + ImmutableMap out = null; + ImmutableTable in = (ImmutableTable)newWithMapValue(source()); + out = in.rowMap(); + sink(getMapValue(getMapValue(out))); // $hasValueFlow + } + { + // "com.google.common.collect;Table;true;values;();;MapValue of Argument[-1];Element of ReturnValue;value" + ImmutableCollection out = null; + ImmutableTable in = (ImmutableTable)newWithMapValue(source()); + out = in.values(); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Table;true;values;();;MapValue of Argument[-1];Element of ReturnValue;value" + Collection out = null; + Table in = (Table)newWithMapValue(source()); + out = in.values(); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Table;true;values;();;MapValue of Argument[-1];Element of ReturnValue;value" + Collection out = null; + StandardTable in = (StandardTable)newWithMapValue(source()); + out = in.values(); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Table;true;values;();;MapValue of Argument[-1];Element of ReturnValue;value" + Collection out = null; + ArrayTable in = (ArrayTable)newWithMapValue(source()); + out = in.values(); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Table;true;values;();;MapValue of Argument[-1];Element of ReturnValue;value" + Collection out = null; + AbstractTable in = (AbstractTable)newWithMapValue(source()); + out = in.values(); + sink(getElement(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Tables;false;immutableCell;(Object,Object,Object);;Argument[2];MapValue of ReturnValue;value" + Table.Cell out = null; + Object in = (Object)source(); + out = Tables.immutableCell(null, null, in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Tables;false;newCustomTable;(Map,Supplier);;MapValue of MapValue of Argument[0];MapValue of ReturnValue;value" + Table out = null; + Map in = (Map)newWithMapValue(newWithMapValue(source())); + out = Tables.newCustomTable(in, null); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Tables;false;synchronizedTable;(Table);;MapKey of Argument[0];MapKey of ReturnValue;value" + Table out = null; + Table in = (Table)newWithMapKey(source()); + out = Tables.synchronizedTable(in); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Tables;false;synchronizedTable;(Table);;MapValue of Argument[0];MapValue of ReturnValue;value" + Table out = null; + Table in = (Table)newWithMapValue(source()); + out = Tables.synchronizedTable(in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Tables;false;transformValues;(Table,Function);;MapKey of Argument[0];MapKey of ReturnValue;value" + Table out = null; + Table in = (Table)newWithMapKey(source()); + out = Tables.transformValues(in, null); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Tables;false;transpose;(Table);;MapValue of Argument[0];MapValue of ReturnValue;value" + Table out = null; + Table in = (Table)newWithMapValue(source()); + out = Tables.transpose(in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Tables;false;unmodifiableRowSortedTable;(RowSortedTable);;MapKey of Argument[0];MapKey of ReturnValue;value" + RowSortedTable out = null; + RowSortedTable in = (RowSortedTable)newWithMapKey(source()); + out = Tables.unmodifiableRowSortedTable(in); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Tables;false;unmodifiableRowSortedTable;(RowSortedTable);;MapValue of Argument[0];MapValue of ReturnValue;value" + RowSortedTable out = null; + RowSortedTable in = (RowSortedTable)newWithMapValue(source()); + out = Tables.unmodifiableRowSortedTable(in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Tables;false;unmodifiableTable;(Table);;MapKey of Argument[0];MapKey of ReturnValue;value" + Table out = null; + Table in = (Table)newWithMapKey(source()); + out = Tables.unmodifiableTable(in); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;Tables;false;unmodifiableTable;(Table);;MapValue of Argument[0];MapValue of ReturnValue;value" + Table out = null; + Table in = (Table)newWithMapValue(source()); + out = Tables.unmodifiableTable(in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;TreeBasedTable;true;create;(TreeBasedTable);;MapKey of Argument[0];MapKey of ReturnValue;value" + TreeBasedTable out = null; + TreeBasedTable in = (TreeBasedTable)newWithMapKey(source()); + out = TreeBasedTable.create(in); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;TreeBasedTable;true;create;(TreeBasedTable);;MapValue of Argument[0];MapValue of ReturnValue;value" + TreeBasedTable out = null; + TreeBasedTable in = (TreeBasedTable)newWithMapValue(source()); + out = TreeBasedTable.create(in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;TreeMultimap;true;create;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value" + TreeMultimap out = null; + Multimap in = (Multimap)newWithMapKey(source()); + out = TreeMultimap.create(in); + sink(getMapKey(out)); // $hasValueFlow + } + { + // "com.google.common.collect;TreeMultimap;true;create;(Multimap);;MapValue of Argument[0];MapValue of ReturnValue;value" + TreeMultimap out = null; + Multimap in = (Multimap)newWithMapValue(source()); + out = TreeMultimap.create(in); + sink(getMapValue(out)); // $hasValueFlow + } + { + // "com.google.common.collect;TreeMultiset;true;create;(Iterable);;Element of Argument[0];Element of ReturnValue;value" + TreeMultiset out = null; + Iterable in = (Iterable)newWithElement(source()); + out = TreeMultiset.create(in); + sink(getElement(out)); // $hasValueFlow + } + + } + +} \ No newline at end of file diff --git a/java/ql/test/library-tests/frameworks/guava/generated/test.expected b/java/ql/test/library-tests/frameworks/guava/generated/test.expected new file mode 100644 index 00000000000..e69de29bb2d diff --git a/java/ql/test/library-tests/frameworks/guava/generated/test.ql b/java/ql/test/library-tests/frameworks/guava/generated/test.ql new file mode 100644 index 00000000000..4ca9a985eab --- /dev/null +++ b/java/ql/test/library-tests/frameworks/guava/generated/test.ql @@ -0,0 +1,70 @@ +import java +import semmle.code.java.dataflow.DataFlow +import semmle.code.java.dataflow.ExternalFlow +import semmle.code.java.dataflow.TaintTracking +import TestUtilities.InlineExpectationsTest + +class SummaryModelTest extends SummaryModelCsv { + override predicate row(string row) { + row = + [ + //"package;type;overrides;name;signature;ext;inputspec;outputspec;kind", + "generatedtest;Test;false;getMapKey;;;MapKey of Argument[0];ReturnValue;value", + "generatedtest;Test;false;newWithMapKey;;;Argument[0];MapKey of ReturnValue;value", + "generatedtest;Test;false;getElement;;;Element of Argument[0];ReturnValue;value", + "generatedtest;Test;false;newWithElement;;;Argument[0];Element of ReturnValue;value", + "generatedtest;Test;false;getMapValue;;;MapValue of Argument[0];ReturnValue;value", + "generatedtest;Test;false;newWithMapValue;;;Argument[0];MapValue of ReturnValue;value", + "generatedtest;Test;false;newWithArrayElement;;;Argument[0];ArrayElement of ReturnValue;value", + "generatedtest;Test;false;getArrayElement;;;ArrayElement of Argument[0];ReturnValue;value" + ] + } +} + +class ValueFlowConf extends DataFlow::Configuration { + ValueFlowConf() { this = "qltest:valueFlowConf" } + + override predicate isSource(DataFlow::Node n) { + n.asExpr().(MethodAccess).getMethod().hasName("source") + } + + override predicate isSink(DataFlow::Node n) { + n.asExpr().(Argument).getCall().getCallee().hasName("sink") + } +} + +class TaintFlowConf extends TaintTracking::Configuration { + TaintFlowConf() { this = "qltest:taintFlowConf" } + + override predicate isSource(DataFlow::Node n) { + n.asExpr().(MethodAccess).getMethod().hasName("source") + } + + override predicate isSink(DataFlow::Node n) { + n.asExpr().(Argument).getCall().getCallee().hasName("sink") + } +} + +class HasFlowTest extends InlineExpectationsTest { + HasFlowTest() { this = "HasFlowTest" } + + override string getARelevantTag() { result = ["hasValueFlow", "hasTaintFlow"] } + + override predicate hasActualResult(Location location, string element, string tag, string value) { + tag = "hasValueFlow" and + exists(DataFlow::Node src, DataFlow::Node sink, ValueFlowConf conf | conf.hasFlow(src, sink) | + sink.getLocation() = location and + element = sink.toString() and + value = "" + ) + or + tag = "hasTaintFlow" and + exists(DataFlow::Node src, DataFlow::Node sink, TaintFlowConf conf | + conf.hasFlow(src, sink) and not any(ValueFlowConf c).hasFlow(src, sink) + | + sink.getLocation() = location and + element = sink.toString() and + value = "" + ) + } +} diff --git a/java/ql/test/library-tests/frameworks/guava/pom.xml b/java/ql/test/library-tests/frameworks/guava/pom.xml new file mode 100644 index 00000000000..6d083af1a08 --- /dev/null +++ b/java/ql/test/library-tests/frameworks/guava/pom.xml @@ -0,0 +1,17 @@ + + +4.0.0 + + test + test + 1.0-SNAPSHOT + + + + + com.google.guava + guava + 30.1.1-jre + + + diff --git a/java/ql/test/library-tests/frameworks/guava/specs.csv b/java/ql/test/library-tests/frameworks/guava/specs.csv new file mode 100644 index 00000000000..d74097892e4 --- /dev/null +++ b/java/ql/test/library-tests/frameworks/guava/specs.csv @@ -0,0 +1,503 @@ +com.google.common.collect;Multiset;true;add;(Object,int);;Argument[0];Element of Argument[-1];value +com.google.common.collect;Multiset;true;setCount;(Object,int);;Argument[0];Element of Argument[-1];value +com.google.common.collect;Multiset;true;setCount;(Object,int,int);;Argument[0];Element of Argument[-1];value +com.google.common.collect;Multiset;true;elementSet;();;Element of Argument[-1];Element of ReturnValue;value +com.google.common.collect;Multiset;true;entrySet;();;Element of Argument[-1];Element of Element of ReturnValue;value +com.google.common.collect;Multiset$Entry;true;getElement;();;Element of Argument[-1];ReturnValue;value +com.google.common.collect;Multimap;true;asMap;();;MapKey of Argument[-1];MapKey of ReturnValue;value +com.google.common.collect;Multimap;true;asMap;();;MapValue of Argument[-1];Element of MapValue of ReturnValue;value +com.google.common.collect;Multimap;true;entries;();;MapKey of Argument[-1];MapKey of Element of ReturnValue;value +com.google.common.collect;Multimap;true;entries;();;MapValue of Argument[-1];MapValue of Element of ReturnValue;value +com.google.common.collect;Multimap;true;get;(Object);;MapValue of Argument[-1];Element of ReturnValue;value +com.google.common.collect;Multimap;true;keys;();;MapKey of Argument[-1];Element of ReturnValue;value +com.google.common.collect;Multimap;true;keySet;();;MapKey of Argument[-1];Element of ReturnValue;value +com.google.common.collect;Multimap;true;values;();;MapValue of Argument[-1];Element of ReturnValue;value +com.google.common.collect;Multimap;true;put;(Object,Object);;Argument[0];MapKey of Argument[-1];value +com.google.common.collect;Multimap;true;put;(Object,Object);;Argument[1];MapValue of Argument[-1];value +com.google.common.collect;Multimap;true;putAll;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value +com.google.common.collect;Multimap;true;putAll;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value +com.google.common.collect;Multimap;true;putAll;(Multimap);;MapKey of Argument[0];MapKey of Argument[-1];value +com.google.common.collect;Multimap;true;putAll;(Multimap);;MapValue of Argument[0];MapValue of Argument[-1];value +com.google.common.collect;Multimap;true;removeAll;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value +com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;MapValue of Argument[-1];Element of ReturnValue;value +com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value +com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value +com.google.common.collect;ImmutableMultimap;true;inverse;();;MapKey of Argument[-1];MapValue of ReturnValue;value +com.google.common.collect;ImmutableMultimap;true;inverse;();;MapValue of Argument[-1];MapKey of ReturnValue;value +com.google.common.collect;Table$Cell;true;getRowKey;();;SyntheticField[com.google.common.collect.Table.rowKey] of MapKey of Argument[-1];ReturnValue;value +com.google.common.collect;Table$Cell;true;getColumnKey;();;SyntheticField[com.google.common.collect.Table.columnKey] of MapKey of Argument[-1];ReturnValue;value +com.google.common.collect;Table$Cell;true;getValue;();;MapValue of Argument[-1];ReturnValue;value +com.google.common.collect;Table;true;cellSet;();;MapKey of Argument[-1];MapKey of Element of ReturnValue;value +com.google.common.collect;Table;true;cellSet;();;MapValue of Argument[-1];MapValue of Element of ReturnValue;value +com.google.common.collect;Table;true;row;(Object);;SyntheticField[com.google.common.collect.Table.columnKey] of MapKey of Argument[-1];MapKey of ReturnValue;value +com.google.common.collect;Table;true;row;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value +com.google.common.collect;Table;true;rowKeySet;();;SyntheticField[com.google.common.collect.Table.rowKey] of MapKey of Argument[-1];Element of ReturnValue;value +com.google.common.collect;Table;true;rowMap;();;SyntheticField[com.google.common.collect.Table.rowKey] of MapKey of Argument[-1];MapKey of ReturnValue;value +com.google.common.collect;Table;true;rowMap;();;SyntheticField[com.google.common.collect.Table.columnKey] of MapKey of Argument[-1];MapKey of MapValue of ReturnValue;value +com.google.common.collect;Table;true;rowMap;();;MapValue of Argument[-1];MapValue of MapValue of ReturnValue;value +com.google.common.collect;Table;true;column;(Object);;SyntheticField[com.google.common.collect.Table.rowKey] of MapKey of Argument[-1];MapKey of ReturnValue;value +com.google.common.collect;Table;true;column;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value +com.google.common.collect;Table;true;columnKeySet;();;SyntheticField[com.google.common.collect.Table.columnKey] of MapKey of Argument[-1];Element of ReturnValue;value +com.google.common.collect;Table;true;columnMap;();;SyntheticField[com.google.common.collect.Table.columnKey] of MapKey of Argument[-1];MapKey of ReturnValue;value +com.google.common.collect;Table;true;columnMap;();;SyntheticField[com.google.common.collect.Table.rowKey] of MapKey of Argument[-1];MapKey of MapValue of ReturnValue;value +com.google.common.collect;Table;true;columnMap;();;MapValue of Argument[-1];MapValue of MapValue of ReturnValue;value +com.google.common.collect;Table;true;values;();;MapValue of Argument[-1];Element of ReturnValue;value +com.google.common.collect;Table;true;get;(Object,Object);;MapValue of Argument[-1];ReturnValue;value +com.google.common.collect;Table;true;remove;(Object,Object);;MapValue of Argument[-1];ReturnValue;value +com.google.common.collect;Table;true;put;(Object,Object,Object);;Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of MapKey of Argument[-1];value +com.google.common.collect;Table;true;put;(Object,Object,Object);;Argument[1];SyntheticField[com.google.common.collect.Table.columnKey] of MapKey of Argument[-1];value +com.google.common.collect;Table;true;put;(Object,Object,Object);;Argument[2];MapValue of Argument[-1];value +com.google.common.collect;Table;true;putAll;(Table);;MapKey of Argument[0];MapKey of Argument[-1];value +com.google.common.collect;Table;true;putAll;(Table);;MapValue of Argument[0];MapValue of Argument[-1];value +com.google.common.collect;ImmutableCollection;true;asList;();;Element of Argument[-1];Element of ReturnValue;value +com.google.common.collect;ImmutableList;true;reverse;();;Element of Argument[-1];Element of ReturnValue;value +com.google.common.collect;ImmutableCollection;true;subList;(int,int);;Element of Argument[-1];Element of ReturnValue;value +com.google.common.collect;BiMap;true;forcePut;(Object,Object);;Argument[0];MapKey of Argument[-1];value +com.google.common.collect;BiMap;true;forcePut;(Object,Object);;Argument[1];MapValue of Argument[-1];value +com.google.common.collect;BiMap;true;inverse;();;MapKey of Argument[-1];MapValue of ReturnValue;value +com.google.common.collect;BiMap;true;inverse;();;MapValue of Argument[-1];MapKey of ReturnValue;value +com.google.common.collect;ClassToInstanceMap;true;getInstance;(Class);;MapValue of Argument[-1];ReturnValue;value +com.google.common.collect;ClassToInstanceMap;true;putInstance;(Class,Object);;MapValue of Argument[-1];ReturnValue;value +com.google.common.collect;ClassToInstanceMap;true;putInstance;(Class,Object);;Argument[1];MapValue of Argument[-1];value +com.google.common.collect;ImmutableCollection$Builder;true;build;();;Element of Argument[-1];Element of ReturnValue;value +com.google.common.collect;ImmutableCollection$Builder;true;add;;;Argument[-1];ReturnValue;value +com.google.common.collect;ImmutableCollection$Builder;true;add;(Object);;Argument[0];Element of Argument[-1];value +com.google.common.collect;ImmutableCollection$Builder;true;add;(Object[]);;ArrayElement of Argument[0];Element of Argument[-1];value +com.google.common.collect;ImmutableCollection$Builder;true;addAll;;;Argument[-1];ReturnValue;value +com.google.common.collect;ImmutableCollection$Builder;true;addAll;(Iterable);;Element of Argument[0];Element of Argument[-1];value +com.google.common.collect;ImmutableCollection$Builder;true;addAll;(Iterator);;Element of Argument[0];Element of Argument[-1];value +com.google.common.collect;ImmutableMultiset$Builder;true;addCopies;(Object,int);;Argument[-1];ReturnValue;value +com.google.common.collect;ImmutableMultiset$Builder;true;addCopies;(Object,int);;Argument[0];Element of Argument[-1];value +com.google.common.collect;ImmutableMap$Builder;true;build;();;MapKey of Argument[-1];MapKey of ReturnValue;value +com.google.common.collect;ImmutableMap$Builder;true;build;();;MapValue of Argument[-1];MapValue of ReturnValue;value +com.google.common.collect;ImmutableMap$Builder;true;orderEntriesByValue;(Comparator);;Argument[-1];ReturnValue;value +com.google.common.collect;ImmutableMap$Builder;true;put;;;Argument[-1];ReturnValue;value +com.google.common.collect;ImmutableMap$Builder;true;put;(Entry);;MapKey of Argument[0];MapKey of Argument[-1];value +com.google.common.collect;ImmutableMap$Builder;true;put;(Entry);;MapValue of Argument[0];MapValue of Argument[-1];value +com.google.common.collect;ImmutableMap$Builder;true;put;(Object,Object);;Argument[0];MapKey of Argument[-1];value +com.google.common.collect;ImmutableMap$Builder;true;put;(Object,Object);;Argument[1];MapValue of Argument[-1];value +com.google.common.collect;ImmutableMap$Builder;true;putAll;;;Argument[-1];ReturnValue;value +com.google.common.collect;ImmutableMap$Builder;true;putAll;(Iterable);;MapKey of Element of Argument[0];MapKey of Argument[-1];value +com.google.common.collect;ImmutableMap$Builder;true;putAll;(Iterable);;MapValue of Element of Argument[0];MapValue of Argument[-1];value +com.google.common.collect;ImmutableMap$Builder;true;putAll;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value +com.google.common.collect;ImmutableMap$Builder;true;putAll;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value +com.google.common.collect;ImmutableMultimap$Builder;true;build;();;MapKey of Argument[-1];MapKey of ReturnValue;value +com.google.common.collect;ImmutableMultimap$Builder;true;build;();;MapValue of Argument[-1];MapValue of ReturnValue;value +com.google.common.collect;ImmutableMultimap$Builder;true;orderKeysBy;(Comparator);;Argument[-1];ReturnValue;value +com.google.common.collect;ImmutableMultimap$Builder;true;orderValuesBy;(Comparator);;Argument[-1];ReturnValue;value +com.google.common.collect;ImmutableMultimap$Builder;true;put;;;Argument[-1];ReturnValue;value +com.google.common.collect;ImmutableMultimap$Builder;true;put;(Entry);;MapKey of Argument[0];MapKey of Argument[-1];value +com.google.common.collect;ImmutableMultimap$Builder;true;put;(Entry);;MapValue of Argument[0];MapValue of Argument[-1];value +com.google.common.collect;ImmutableMultimap$Builder;true;put;(Object,Object);;Argument[0];MapKey of Argument[-1];value +com.google.common.collect;ImmutableMultimap$Builder;true;put;(Object,Object);;Argument[1];MapValue of Argument[-1];value +com.google.common.collect;ImmutableMultimap$Builder;true;putAll;;;Argument[-1];ReturnValue;value +com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Iterable);;MapKey of Element of Argument[0];MapKey of Argument[-1];value +com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Iterable);;MapValue of Element of Argument[0];MapValue of Argument[-1];value +com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Multimap);;MapKey of Argument[0];MapKey of Argument[-1];value +com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Multimap);;MapValue of Argument[0];MapValue of Argument[-1];value +com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value +com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value +com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value +com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Object,Object[]);;ArrayElement of Argument[1];MapValue of Argument[-1];value +com.google.common.collect;ImmutableTable$Builder;true;build;();;SyntheticField[com.google.common.collect.Table.rowKey] of MapKey of Argument[-1];SyntheticField[com.google.common.collect.Table.rowKey] of MapKey of ReturnValue;value +com.google.common.collect;ImmutableTable$Builder;true;build;();;SyntheticField[com.google.common.collect.Table.columnKey] of MapKey of Argument[-1];SyntheticField[com.google.common.collect.Table.columnKey] of MapKey of ReturnValue;value +com.google.common.collect;ImmutableTable$Builder;true;build;();;MapValue of Argument[-1];MapValue of ReturnValue;value +com.google.common.collect;ImmutableTable$Builder;true;orderRowsBy;(Comparator);;Argument[-1];ReturnValue;value +com.google.common.collect;ImmutableTable$Builder;true;orderColumnsBy;(Comparator);;Argument[-1];ReturnValue;value +com.google.common.collect;ImmutableTable$Builder;true;put;(Object,Object,Object);;Argument[-1];ReturnValue;value +com.google.common.collect;ImmutableTable$Builder;true;put;(Cell);;Argument[-1];ReturnValue;value +com.google.common.collect;ImmutableTable$Builder;true;putAll;(Table);;Argument[-1];ReturnValue;value +com.google.common.collect;ImmutableTable$Builder;true;put;(Object,Object,Object);;Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of MapKey of Argument[-1];value +com.google.common.collect;ImmutableTable$Builder;true;put;(Object,Object,Object);;Argument[1];SyntheticField[com.google.common.collect.Table.columnKey] of MapKey of Argument[-1];value +com.google.common.collect;ImmutableTable$Builder;true;put;(Object,Object,Object);;Argument[2];MapValue of Argument[-1];value +com.google.common.collect;ImmutableTable$Builder;true;put;(Cell);;MapKey of Argument[0];MapKey of Argument[-1];value +com.google.common.collect;ImmutableTable$Builder;true;put;(Cell);;MapValue of Argument[0];MapValue of Argument[-1];value +com.google.common.collect;ImmutableTable$Builder;true;putAll;(Table);;MapKey of Argument[0];MapKey of Argument[-1];value +com.google.common.collect;ImmutableTable$Builder;true;putAll;(Table);;MapValue of Argument[0];MapValue of Argument[-1];value +com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value +com.google.common.collect;ImmutableList;true;of;;;ArrayElement of Argument[12];Element of ReturnValue;value +com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value +com.google.common.collect;ImmutableSet;true;of;;;ArrayElement of Argument[6];Element of ReturnValue;value +com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value +com.google.common.collect;ImmutableMultiset;true;of;;;Element of Argument[6];Element of ReturnValue;value +com.google.common.collect;ImmutableMap;true;of;;;Argument[0];MapKey of ReturnValue;value +com.google.common.collect;ImmutableMap;true;of;;;Argument[1];MapValue of ReturnValue;value +com.google.common.collect;ImmutableMap;true;of;;;Argument[2];MapKey of ReturnValue;value +com.google.common.collect;ImmutableMap;true;of;;;Argument[3];MapValue of ReturnValue;value +com.google.common.collect;ImmutableMap;true;of;;;Argument[4];MapKey of ReturnValue;value +com.google.common.collect;ImmutableMap;true;of;;;Argument[5];MapValue of ReturnValue;value +com.google.common.collect;ImmutableMap;true;of;;;Argument[6];MapKey of ReturnValue;value +com.google.common.collect;ImmutableMap;true;of;;;Argument[7];MapValue of ReturnValue;value +com.google.common.collect;ImmutableMap;true;of;;;Argument[8];MapKey of ReturnValue;value +com.google.common.collect;ImmutableMap;true;of;;;Argument[9];MapValue of ReturnValue;value +com.google.common.collect;ImmutableMap;true;of;;;Argument[10];MapKey of ReturnValue;value +com.google.common.collect;ImmutableMap;true;of;;;Argument[11];MapValue of ReturnValue;value +com.google.common.collect;ImmutableMultimap;true;of;;;Argument[0];MapKey of ReturnValue;value +com.google.common.collect;ImmutableMultimap;true;of;;;Argument[1];MapValue of ReturnValue;value +com.google.common.collect;ImmutableMultimap;true;of;;;Argument[2];MapKey of ReturnValue;value +com.google.common.collect;ImmutableMultimap;true;of;;;Argument[3];MapValue of ReturnValue;value +com.google.common.collect;ImmutableMultimap;true;of;;;Argument[4];MapKey of ReturnValue;value +com.google.common.collect;ImmutableMultimap;true;of;;;Argument[5];MapValue of ReturnValue;value +com.google.common.collect;ImmutableMultimap;true;of;;;Argument[6];MapKey of ReturnValue;value +com.google.common.collect;ImmutableMultimap;true;of;;;Argument[7];MapValue of ReturnValue;value +com.google.common.collect;ImmutableMultimap;true;of;;;Argument[8];MapKey of ReturnValue;value +com.google.common.collect;ImmutableMultimap;true;of;;;Argument[9];MapValue of ReturnValue;value +com.google.common.collect;ImmutableClassToInstanceMap;true;of;(Class,Object);;Argument[0];MapKey of ReturnValue;value +com.google.common.collect;ImmutableClassToInstanceMap;true;of;(Class,Object);;Argument[1];MapValue of ReturnValue;value +com.google.common.collect;ImmutableTable;true;of;(Object,Object,Object);;Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of MapKey of ReturnValue;value +com.google.common.collect;ImmutableTable;true;of;(Object,Object,Object);;Argument[1];SyntheticField[com.google.common.collect.Table.columnKey] of MapKey of ReturnValue;value +com.google.common.collect;ImmutableTable;true;of;(Object,Object,Object);;Argument[2];MapValue of ReturnValue;value +com.google.common.collect;ImmutableList;true;copyOf;(Object[]);;ArrayElement of Argument[0];Element of ReturnValue;value +com.google.common.collect;ImmutableList;true;copyOf;(Iterable);;Element of Argument[0];Element of ReturnValue;value +com.google.common.collect;ImmutableList;true;copyOf;(Iterator);;Element of Argument[0];Element of ReturnValue;value +com.google.common.collect;ImmutableList;true;copyOf;(Collection);;Element of Argument[0];Element of ReturnValue;value +com.google.common.collect;ImmutableList;true;sortedCopyOf;(Iterable);;Element of Argument[0];Element of ReturnValue;value +com.google.common.collect;ImmutableList;true;sortedCopyOf;(Comparator,Iterable);;Element of Argument[1];Element of ReturnValue;value +com.google.common.collect;ImmutableSet;true;copyOf;(Object[]);;ArrayElement of Argument[0];Element of ReturnValue;value +com.google.common.collect;ImmutableSet;true;copyOf;(Iterable);;Element of Argument[0];Element of ReturnValue;value +com.google.common.collect;ImmutableSet;true;copyOf;(Iterator);;Element of Argument[0];Element of ReturnValue;value +com.google.common.collect;ImmutableSet;true;copyOf;(Collection);;Element of Argument[0];Element of ReturnValue;value +com.google.common.collect;ImmutableSortedSet;true;copyOf;(Comparator,Iterable);;Element of Argument[1];Element of ReturnValue;value +com.google.common.collect;ImmutableSortedSet;true;copyOf;(Comparator,Iterator);;Element of Argument[1];Element of ReturnValue;value +com.google.common.collect;ImmutableSortedSet;true;copyOf;(Comparator,Collection);;Element of Argument[1];Element of ReturnValue;value +com.google.common.collect;ImmutableSortedSet;true;copyOfSorted;(SortedSet);;Element of Argument[0];Element of ReturnValue;value +com.google.common.collect;ImmutableMultiset;true;copyOf;(Object[]);;ArrayElement of Argument[0];Element of ReturnValue;value +com.google.common.collect;ImmutableMultiset;true;copyOf;(Iterable);;Element of Argument[0];Element of ReturnValue;value +com.google.common.collect;ImmutableMultiset;true;copyOf;(Iterator);;Element of Argument[0];Element of ReturnValue;value +com.google.common.collect;ImmutableSortedMultiset;true;copyOf;(Comparator,Iterable);;Element of Argument[1];Element of ReturnValue;value +com.google.common.collect;ImmutableSortedMultiset;true;copyOf;(Comparator,Iterator);;Element of Argument[1];Element of ReturnValue;value +com.google.common.collect;ImmutableSortedMultiset;true;copyOfSorted;(SortedMultiset);;Element of Argument[0];Element of ReturnValue;value +com.google.common.collect;ImmutableMap;true;copyOf;(Map);;MapKey of Argument[0];MapKey of ReturnValue;value +com.google.common.collect;ImmutableMap;true;copyOf;(Map);;MapValue of Argument[0];MapValue of ReturnValue;value +com.google.common.collect;ImmutableMap;true;copyOf;(Iterable);;MapKey of Element of Argument[0];MapKey of ReturnValue;value +com.google.common.collect;ImmutableMap;true;copyOf;(Iterable);;MapValue of Element of Argument[0];MapValue of ReturnValue;value +com.google.common.collect;ImmutableSortedMap;true;copyOfSorted;(SortedMap);;MapKey of Argument[0];MapKey of ReturnValue;value +com.google.common.collect;ImmutableSortedMap;true;copyOfSorted;(SortedMap);;MapValue of Argument[0];MapValue of ReturnValue;value +com.google.common.collect;ImmutableSortedMap;true;copyOf;(Map,Comparator);;MapKey of Argument[0];MapKey of ReturnValue;value +com.google.common.collect;ImmutableSortedMap;true;copyOf;(Map,Comparator);;MapValue of Argument[0];MapValue of ReturnValue;value +com.google.common.collect;ImmutableMultimap;true;copyOf;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value +com.google.common.collect;ImmutableMultimap;true;copyOf;(Multimap);;MapValue of Argument[0];MapValue of ReturnValue;value +com.google.common.collect;ImmutableMultimap;true;copyOf;(Iterable);;MapKey of Element of Argument[0];MapKey of ReturnValue;value +com.google.common.collect;ImmutableMultimap;true;copyOf;(Iterable);;MapValue of Element of Argument[0];MapValue of ReturnValue;value +com.google.common.collect;ImmutableClassToInstanceMap;true;copyOf;(Map);;MapKey of Argument[0];MapKey of ReturnValue;value +com.google.common.collect;ImmutableClassToInstanceMap;true;copyOf;(Map);;MapValue of Argument[0];MapValue of ReturnValue;value +com.google.common.collect;ImmutableTable;true;copyOf;(Table);;MapKey of Argument[0];MapKey of ReturnValue;value +com.google.common.collect;ImmutableTable;true;copyOf;(Table);;MapValue of Argument[0];MapValue of ReturnValue;value +com.google.common.collect;HashMultiset;true;create;(Iterable);;Element of Argument[0];Element of ReturnValue;value +com.google.common.collect;LinkedHashMultiset;true;create;(Iterable);;Element of Argument[0];Element of ReturnValue;value +com.google.common.collect;TreeMultiset;true;create;(Iterable);;Element of Argument[0];Element of ReturnValue;value +com.google.common.collect;ConcurrentHashMultiset;true;create;(Iterable);;Element of Argument[0];Element of ReturnValue;value +com.google.common.collect;HashMultimap;true;create;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value +com.google.common.collect;HashMultimap;true;create;(Multimap);;MapValue of Argument[0];MapValue of ReturnValue;value +com.google.common.collect;LinkedHashMultimap;true;create;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value +com.google.common.collect;LinkedHashMultimap;true;create;(Multimap);;MapValue of Argument[0];MapValue of ReturnValue;value +com.google.common.collect;LinkedListMultimap;true;create;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value +com.google.common.collect;LinkedListMultimap;true;create;(Multimap);;MapValue of Argument[0];MapValue of ReturnValue;value +com.google.common.collect;ArrayListMultimap;true;create;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value +com.google.common.collect;ArrayListMultimap;true;create;(Multimap);;MapValue of Argument[0];MapValue of ReturnValue;value +com.google.common.collect;TreeMultimap;true;create;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value +com.google.common.collect;TreeMultimap;true;create;(Multimap);;MapValue of Argument[0];MapValue of ReturnValue;value +com.google.common.collect;HashBiMap;true;create;(Map);;MapKey of Argument[0];MapKey of ReturnValue;value +com.google.common.collect;HashBiMap;true;create;(Map);;MapValue of Argument[0];MapValue of ReturnValue;value +com.google.common.collect;MutableClassToInstanceMap;true;create;(Map);;MapKey of Argument[0];MapKey of ReturnValue;value +com.google.common.collect;MutableClassToInstanceMap;true;create;(Map);;MapValue of Argument[0];MapValue of ReturnValue;value +com.google.common.collect;HashBasedTable;true;create;(Table);;MapKey of Argument[0];MapKey of ReturnValue;value +com.google.common.collect;HashBasedTable;true;create;(Table);;MapValue of Argument[0];MapValue of ReturnValue;value +com.google.common.collect;TreeBasedTable;true;create;(TreeBasedTable);;MapKey of Argument[0];MapKey of ReturnValue;value +com.google.common.collect;TreeBasedTable;true;create;(TreeBasedTable);;MapValue of Argument[0];MapValue of ReturnValue;value +com.google.common.collect;ArrayTable;true;create;(Iterable,Iterable);;Element of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of MapKey of ReturnValue;value +com.google.common.collect;ArrayTable;true;create;(Iterable,Iterable);;Element of Argument[1];SyntheticField[com.google.common.collect.Table.columnKey] of MapKey of ReturnValue;value +com.google.common.collect;Collections2;false;filter;(Collection,Predicate);;Element of Argument[0];Element of ReturnValue;value +com.google.common.collect;Collections2;false;orderedPermutations;(Iterable,Comparator);;Element of Argument[0];Element of ReturnValue;value +com.google.common.collect;Collections2;false;orderedPermutations;(Iterable);;Element of Argument[0];Element of ReturnValue;value +com.google.common.collect;Collections2;false;permutations;(Collection);;Element of Argument[0];Element of ReturnValue;value +com.google.common.collect;Iterators;false;addAll;(Collection,Iterator);;Element of Argument[1];Element of Argument[0];value +com.google.common.collect;Iterators;false;asEnumeration;(Iterator);;Element of Argument[0];Element of ReturnValue;value +com.google.common.collect;Iterators;false;concat;(Iterator);;Element of Element of Argument[0];Element of ReturnValue;value +com.google.common.collect;Iterators;false;concat;(Iterator[]);;Element of ArrayElement of Argument[0];Element of ReturnValue;value +com.google.common.collect;Iterators;false;concat;(Iterator,Iterator);;Element of Argument[0..1];Element of ReturnValue;value +com.google.common.collect;Iterators;false;concat;(Iterator,Iterator,Iterator);;Element of Argument[0..2];Element of ReturnValue;value +com.google.common.collect;Iterators;false;concat;(Iterator,Iterator,Iterator,Iterator);;Element of Argument[0..3];Element of ReturnValue;value +com.google.common.collect;Iterators;false;consumingIterator;(Iterator);;Element of Argument[0];Element of ReturnValue;value +com.google.common.collect;Iterators;false;cycle;(Iterable);;Element of Argument[0];Element of ReturnValue;value +com.google.common.collect;Iterators;false;cycle;(Object[]);;ArrayElement of Argument[0];Element of ReturnValue;value +com.google.common.collect;Iterators;false;filter;(Iterator,Class);;Element of Argument[0];Element of ReturnValue;value +com.google.common.collect;Iterators;false;filter;(Iterator,Predicate);;Element of Argument[0];Element of ReturnValue;value +com.google.common.collect;Iterators;false;find;(Iterator,Predicate);;Element of Argument[0];ReturnValue;value +com.google.common.collect;Iterators;false;find;(Iterator,Predicate,Object);;Element of Argument[0];ReturnValue;value +com.google.common.collect;Iterators;false;find;(Iterator,Predicate,Object);;Argument[2];Element of ReturnValue;value +com.google.common.collect;Iterators;false;forArray;(Object[]);;ArrayElement of Argument[0];Element of ReturnValue;value +com.google.common.collect;Iterators;false;forEnumeration;(Enumeration);;Element of Argument[0];Element of ReturnValue;value +com.google.common.collect;Iterators;false;get;(Iterator,int);;Element of Argument[0];ReturnValue;value +com.google.common.collect;Iterators;false;get;(Iterator,int,Object);;Element of Argument[0];ReturnValue;value +com.google.common.collect;Iterators;false;get;(Iterator,int,Object);;Argument[2];Element of ReturnValue;value +com.google.common.collect;Iterators;false;getLast;(Iterator);;Element of Argument[0];ReturnValue;value +com.google.common.collect;Iterators;false;getLast;(Iterator,Object);;Element of Argument[0];ReturnValue;value +com.google.common.collect;Iterators;false;getLast;(Iterator,Object);;Argument[1];Element of ReturnValue;value +com.google.common.collect;Iterators;false;getNext;(Iterator,Object);;Element of Argument[0];ReturnValue;value +com.google.common.collect;Iterators;false;getNext;(Iterator,Object);;Argument[1];Element of ReturnValue;value +com.google.common.collect;Iterators;false;getOnlyElement;(Iterator);;Element of Argument[0];ReturnValue;value +com.google.common.collect;Iterators;false;getOnlyElement;(Iterator,Object);;Element of Argument[0];ReturnValue;value +com.google.common.collect;Iterators;false;getOnlyElement;(Iterator,Object);;Argument[1];Element of ReturnValue;value +com.google.common.collect;Iterators;false;limit;(Iterator,int);;Element of Argument[0];Element of ReturnValue;value +com.google.common.collect;Iterators;false;mergeSorted;(Iterable,Comparator);;Element of Element of Argument[0];Element of ReturnValue;value +com.google.common.collect;Iterators;false;partition;(Iterator,int);;Element of Element of Argument[0];Element of ReturnValue;value +com.google.common.collect;Iterators;false;paddedPartition;(Iterator,int);;Element of Element of Argument[0];Element of ReturnValue;value +com.google.common.collect;Iterators;false;peekingIterator;(Iterator);;Element of Argument[0];Element of ReturnValue;value +com.google.common.collect;Iterators;false;peekingIterator;(PeekingIterator);;Element of Argument[0];Element of ReturnValue;value +com.google.common.collect;Iterators;false;singletonIterator;(Object);;Argument[0];Element of ReturnValue;value +com.google.common.collect;Iterators;false;toArray;(Iterator,Class);;Element of Argument[0];ArrayElement of ReturnValue;value +com.google.common.collect;Iterators;false;tryFind;(Iterator,Predicate);;Element of Argument[0];Element of ReturnValue;value +com.google.common.collect;Iterators;false;toString;(Iterator);;Element of Argument[0];ReturnValue;taint +com.google.common.collect;Iterators;false;unmodifiableIterator;(Iterator);;Element of Argument[0];Element of ReturnValue;value +com.google.common.collect;Iterators;false;unmodifiableIterator;(UnmodifiableIterator);;Element of Argument[0];Element of ReturnValue;value +com.google.common.collect;Iterables;false;addAll;(Collection,Iterable);;Element of Argument[1];Element of Argument[0];value +com.google.common.collect;Iterables;false;concat;(Iterable);;Element of Element of Argument[0];Element of ReturnValue;value +com.google.common.collect;Iterables;false;concat;(Iterable[]);;Element of ArrayElement of Argument[0];Element of ReturnValue;value +com.google.common.collect;Iterables;false;concat;(Iterable,Iterable);;Element of Argument[0..1];Element of ReturnValue;value +com.google.common.collect;Iterables;false;concat;(Iterable,Iterable,Iterable);;Element of Argument[0..2];Element of ReturnValue;value +com.google.common.collect;Iterables;false;concat;(Iterable,Iterable,Iterable,Iterable);;Element of Argument[0..3];Element of ReturnValue;value +com.google.common.collect;Iterables;false;consumingIterable;(Iterable);;Element of Argument[0];Element of ReturnValue;value +com.google.common.collect;Iterables;false;cycle;(Iterable);;Element of Argument[0];Element of ReturnValue;value +com.google.common.collect;Iterables;false;cycle;(Object[]);;ArrayElement of Argument[0];Element of ReturnValue;value +com.google.common.collect;Iterables;false;filter;(Iterable,Class);;Element of Argument[0];Element of ReturnValue;value +com.google.common.collect;Iterables;false;filter;(Iterable,Predicate);;Element of Argument[0];Element of ReturnValue;value +com.google.common.collect;Iterables;false;find;(Iterable,Predicate);;Element of Argument[0];ReturnValue;value +com.google.common.collect;Iterables;false;find;(Iterable,Predicate,Object);;Element of Argument[0];ReturnValue;value +com.google.common.collect;Iterables;false;find;(Iterable,Predicate,Object);;Argument[2];Element of ReturnValue;value +com.google.common.collect;Iterables;false;get;(Iterable,int);;Element of Argument[0];ReturnValue;value +com.google.common.collect;Iterables;false;get;(Iterable,int,Object);;Element of Argument[0];ReturnValue;value +com.google.common.collect;Iterables;false;get;(Iterable,int,Object);;Argument[2];Element of ReturnValue;value +com.google.common.collect;Iterables;false;getLast;(Iterable);;Element of Argument[0];ReturnValue;value +com.google.common.collect;Iterables;false;getLast;(Iterable,Object);;Element of Argument[0];ReturnValue;value +com.google.common.collect;Iterables;false;getLast;(Iterable,Object);;Argument[1];Element of ReturnValue;value +com.google.common.collect;Iterables;false;getOnlyElement;(Iterable);;Element of Argument[0];ReturnValue;value +com.google.common.collect;Iterables;false;getOnlyElement;(Iterable,Object);;Element of Argument[0];ReturnValue;value +com.google.common.collect;Iterables;false;getOnlyElement;(Iterable,Object);;Argument[1];Element of ReturnValue;value +com.google.common.collect;Iterables;false;limit;(Iterable,int);;Element of Argument[0];Element of ReturnValue;value +com.google.common.collect;Iterables;false;mergeSorted;(Iterable,Comparator);;Element of Element of Argument[0];Element of ReturnValue;value +com.google.common.collect;Iterables;false;partition;(Iterable,int);;Element of Element of Argument[0];Element of ReturnValue;value +com.google.common.collect;Iterables;false;paddedPartition;(Iterable,int);;Element of Element of Argument[0];Element of ReturnValue;value +com.google.common.collect;Iterables;false;skip;(Iterable,int);;Element of Argument[0];Element of ReturnValue;value +com.google.common.collect;Iterables;false;toArray;(Iterable,Class);;Element of Argument[0];ArrayElement of ReturnValue;value +com.google.common.collect;Iterables;false;tryFind;(Iterable,Predicate);;Element of Argument[0];Element of ReturnValue;value +com.google.common.collect;Iterables;false;toString;(Iterable);;Element of Argument[0];ReturnValue;taint +com.google.common.collect;Iterables;false;unmodifiableIterable;(Iterable);;Element of Argument[0];Element of ReturnValue;value +com.google.common.collect;Iterables;false;unmodifiableIterable;(ImmutableCollection);;Element of Argument[0];Element of ReturnValue;value +com.google.common.collect;Lists;false;asList;(Object,Object,Object[]);;Argument[0..1];Element of ReturnValue;value +com.google.common.collect;Lists;false;asList;(Object,Object,Object[]);;ArrayElement of Argument[2];Element of ReturnValue;value +com.google.common.collect;Lists;false;asList;(Object,Object[]);;Argument[0];Element of ReturnValue;value +com.google.common.collect;Lists;false;asList;(Object,Object[]);;ArrayElement of Argument[1];Element of ReturnValue;value +com.google.common.collect;Lists;false;cartesianProduct;(List);;Element of Element of Argument[0];Element of Element of ReturnValue;value +com.google.common.collect;Lists;false;cartesianProduct;(List[]);;Element of ArrayElement of Argument[0];Element of Element of ReturnValue;value +com.google.common.collect;Lists;false;charactersOf;(CharSequence);;Argument[0];Element of ReturnValue;taint +com.google.common.collect;Lists;false;charactersOf;(String);;Argument[0];Element of ReturnValue;taint +com.google.common.collect;Lists;false;newArrayList;(Object[]);;ArrayElement of Argument[0];Element of ReturnValue;value +com.google.common.collect;Lists;false;newArrayList;(Iterator);;Element of Argument[0];Element of ReturnValue;value +com.google.common.collect;Lists;false;newArrayList;(Iterable);;Element of Argument[0];Element of ReturnValue;value +com.google.common.collect;Lists;false;newCopyOnWriteArrayList;(Iterable);;Element of Argument[0];Element of ReturnValue;value +com.google.common.collect;Lists;false;newLinkedList;(Iterable);;Element of Argument[0];Element of ReturnValue;value +com.google.common.collect;Lists;false;partition;(List,int);;Element of Argument[0];Element of Element of ReturnValue;value +com.google.common.collect;Lists;false;reverse;(List);;Element of Argument[0];Element of ReturnValue;value +com.google.common.collect;Maps;false;asMap;(Set,Function);;Element of Argument[0];MapKey of ReturnValue;value +com.google.common.collect;Maps;false;asMap;(NavigableSet,Function);;Element of Argument[0];MapKey of ReturnValue;value +com.google.common.collect;Maps;false;asMap;(SortedSet,Function);;Element of Argument[0];MapKey of ReturnValue;value +com.google.common.collect;Maps;false;difference;(Map,Map);;MapKey of Argument[0];MapKey of SyntheticField[com.google.common.collect.MapDifference.left] of ReturnValue;value +com.google.common.collect;Maps;false;difference;(Map,Map);;MapValue of Argument[0];MapValue of SyntheticField[com.google.common.collect.MapDifference.left] of ReturnValue;value +com.google.common.collect;Maps;false;difference;(Map,Map);;MapKey of Argument[1];MapKey of SyntheticField[com.google.common.collect.MapDifference.right] of ReturnValue;value +com.google.common.collect;Maps;false;difference;(Map,Map);;MapValue of Argument[1];MapValue of SyntheticField[com.google.common.collect.MapDifference.right] of ReturnValue;value +com.google.common.collect;Maps;false;difference;(Map,Map,Equivalence);;MapKey of Argument[0];MapKey of SyntheticField[com.google.common.collect.MapDifference.left] of ReturnValue;value +com.google.common.collect;Maps;false;difference;(Map,Map,Equivalence);;MapValue of Argument[0];MapValue of SyntheticField[com.google.common.collect.MapDifference.left] of ReturnValue;value +com.google.common.collect;Maps;false;difference;(Map,Map,Equivalence);;MapKey of Argument[1];MapKey of SyntheticField[com.google.common.collect.MapDifference.right] of ReturnValue;value +com.google.common.collect;Maps;false;difference;(Map,Map,Equivalence);;MapValue of Argument[1];MapValue of SyntheticField[com.google.common.collect.MapDifference.right] of ReturnValue;value +com.google.common.collect;Maps;false;difference;(SortedMap,Map);;MapKey of Argument[0];MapKey of SyntheticField[com.google.common.collect.MapDifference.left] of ReturnValue;value +com.google.common.collect;Maps;false;difference;(SortedMap,Map);;MapValue of Argument[0];MapValue of SyntheticField[com.google.common.collect.MapDifference.left] of ReturnValue;value +com.google.common.collect;Maps;false;difference;(SortedMap,Map);;MapKey of Argument[1];MapKey of SyntheticField[com.google.common.collect.MapDifference.right] of ReturnValue;value +com.google.common.collect;Maps;false;difference;(SortedMap,Map);;MapValue of Argument[1];MapValue of SyntheticField[com.google.common.collect.MapDifference.right] of ReturnValue;value +com.google.common.collect;Maps;false;filterEntries;(Map,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value +com.google.common.collect;Maps;false;filterEntries;(Map,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value +com.google.common.collect;Maps;false;filterEntries;(BiMap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value +com.google.common.collect;Maps;false;filterEntries;(BiMap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value +com.google.common.collect;Maps;false;filterEntries;(NavigableMap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value +com.google.common.collect;Maps;false;filterEntries;(NavigableMap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value +com.google.common.collect;Maps;false;filterEntries;(SortedMap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value +com.google.common.collect;Maps;false;filterEntries;(SortedMap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value +com.google.common.collect;Maps;false;filterKeys;(Map,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value +com.google.common.collect;Maps;false;filterKeys;(Map,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value +com.google.common.collect;Maps;false;filterKeys;(BiMap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value +com.google.common.collect;Maps;false;filterKeys;(BiMap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value +com.google.common.collect;Maps;false;filterKeys;(NavigableMap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value +com.google.common.collect;Maps;false;filterKeys;(NavigableMap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value +com.google.common.collect;Maps;false;filterKeys;(SortedMap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value +com.google.common.collect;Maps;false;filterKeys;(SortedMap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value +com.google.common.collect;Maps;false;filterValues;(Map,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value +com.google.common.collect;Maps;false;filterValues;(Map,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value +com.google.common.collect;Maps;false;filterValues;(BiMap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value +com.google.common.collect;Maps;false;filterValues;(BiMap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value +com.google.common.collect;Maps;false;filterValues;(NavigableMap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value +com.google.common.collect;Maps;false;filterValues;(NavigableMap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value +com.google.common.collect;Maps;false;filterValues;(SortedMap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value +com.google.common.collect;Maps;false;filterValues;(SortedMap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value +com.google.common.collect;Maps;false;fromProperties;(Properties);;MapKey of Argument[0];MapKey of ReturnValue;value +com.google.common.collect;Maps;false;fromProperties;(Properties);;MapValue of Argument[0];MapValue of ReturnValue;value +com.google.common.collect;Maps;false;immutableEntry;(Object,Object);;Argument[0];MapKey of ReturnValue;value +com.google.common.collect;Maps;false;immutableEntry;(Object,Object);;Argument[1];MapValue of ReturnValue;value +com.google.common.collect;Maps;false;newHashMap;(Map);;MapKey of Argument[0];MapKey of ReturnValue;value +com.google.common.collect;Maps;false;newHashMap;(Map);;MapValue of Argument[0];MapValue of ReturnValue;value +com.google.common.collect;Maps;false;newLinkedHashMap;(Map);;MapKey of Argument[0];MapKey of ReturnValue;value +com.google.common.collect;Maps;false;newLinkedHashMap;(Map);;MapValue of Argument[0];MapValue of ReturnValue;value +com.google.common.collect;Maps;false;newTreeMap;(SortedMap);;MapKey of Argument[0];MapKey of ReturnValue;value +com.google.common.collect;Maps;false;newTreeMap;(SortedMap);;MapValue of Argument[0];MapValue of ReturnValue;value +com.google.common.collect;Maps;false;subMap;(NavigableMap,Range);;MapKey of Argument[0];MapKey of ReturnValue;value +com.google.common.collect;Maps;false;subMap;(NavigableMap,Range);;MapValue of Argument[0];MapValue of ReturnValue;value +com.google.common.collect;Maps;false;synchronizedBiMap;(BiMap);;MapKey of Argument[0];MapKey of ReturnValue;value +com.google.common.collect;Maps;false;synchronizedBiMap;(BiMap);;MapValue of Argument[0];MapValue of ReturnValue;value +com.google.common.collect;Maps;false;synchronizedNavigableMap;(NavigableMap);;MapKey of Argument[0];MapKey of ReturnValue;value +com.google.common.collect;Maps;false;synchronizedNavigableMap;(NavigableMap);;MapValue of Argument[0];MapValue of ReturnValue;value +com.google.common.collect;Maps;false;unmodifiableBiMap;(BiMap);;MapKey of Argument[0];MapKey of ReturnValue;value +com.google.common.collect;Maps;false;unmodifiableBiMap;(BiMap);;MapValue of Argument[0];MapValue of ReturnValue;value +com.google.common.collect;Maps;false;unmodifiableNavigableMap;(NavigableMap);;MapKey of Argument[0];MapKey of ReturnValue;value +com.google.common.collect;Maps;false;unmodifiableNavigableMap;(NavigableMap);;MapValue of Argument[0];MapValue of ReturnValue;value +com.google.common.collect;Maps;false;toMap;(Iterable,Function);;Element of Argument[0];MapKey of ReturnValue;value +com.google.common.collect;Maps;false;toMap;(Iterator,Function);;Element of Argument[0];MapKey of ReturnValue;value +com.google.common.collect;Maps;false;uniqueIndex;(Iterable,Function);;Element of Argument[0];MapValue of ReturnValue;value +com.google.common.collect;Maps;false;uniqueIndex;(Iterator,Function);;Element of Argument[0];MapValue of ReturnValue;value +com.google.common.collect;Maps;false;transformValues;(Map,Function);;MapKey of Argument[0];MapKey of ReturnValue;value +com.google.common.collect;Maps;false;transformValues;(NavigableMap,Function);;MapKey of Argument[0];MapKey of ReturnValue;value +com.google.common.collect;Maps;false;transformValues;(SortedMap,Function);;MapKey of Argument[0];MapKey of ReturnValue;value +com.google.common.collect;MapDifference;true;entriesDiffering;();;MapKey of SyntheticField[com.google.common.collect.MapDifference.left] of Argument[-1];MapKey of ReturnValue;value +com.google.common.collect;MapDifference;true;entriesDiffering;();;MapKey of SyntheticField[com.google.common.collect.MapDifference.right] of Argument[-1];MapKey of ReturnValue;value +com.google.common.collect;MapDifference;true;entriesDiffering;();;MapValue of SyntheticField[com.google.common.collect.MapDifference.left] of Argument[-1];SyntheticField[com.google.common.collect.MapDifference.left] of MapValue of ReturnValue;value +com.google.common.collect;MapDifference;true;entriesDiffering;();;MapValue of SyntheticField[com.google.common.collect.MapDifference.right] of Argument[-1];SyntheticField[com.google.common.collect.MapDifference.right] of MapValue of ReturnValue;value +com.google.common.collect;MapDifference;true;entriesInCommon;();;MapKey of SyntheticField[com.google.common.collect.MapDifference.left] of Argument[-1];MapKey of ReturnValue;value +com.google.common.collect;MapDifference;true;entriesInCommon;();;MapKey of SyntheticField[com.google.common.collect.MapDifference.right] of Argument[-1];MapKey of ReturnValue;value +com.google.common.collect;MapDifference;true;entriesInCommon;();;MapValue of SyntheticField[com.google.common.collect.MapDifference.left] of Argument[-1];MapValue of ReturnValue;value +com.google.common.collect;MapDifference;true;entriesInCommon;();;MapValue of SyntheticField[com.google.common.collect.MapDifference.right] of Argument[-1];MapValue of ReturnValue;value +com.google.common.collect;MapDifference;true;entriesOnlyOnLeft;();;MapKey of SyntheticField[com.google.common.collect.MapDifference.left] of Argument[-1];MapKey of ReturnValue;value +com.google.common.collect;MapDifference;true;entriesOnlyOnLeft;();;MapValue of SyntheticField[com.google.common.collect.MapDifference.left] of Argument[-1];MapValue of ReturnValue;value +com.google.common.collect;MapDifference;true;entriesOnlyOnRight;();;MapKey of SyntheticField[com.google.common.collect.MapDifference.right] of Argument[-1];MapKey of ReturnValue;value +com.google.common.collect;MapDifference;true;entriesOnlyOnRight;();;MapValue of SyntheticField[com.google.common.collect.MapDifference.right] of Argument[-1];MapValue of ReturnValue;value +com.google.common.collect;MapDifference$ValueDifference;true;leftValue;();;SyntheticField[com.google.common.collect.MapDifference.left] of Argument[-1];ReturnValue;value +com.google.common.collect;MapDifference$ValueDifference;true;rightValue;();;SyntheticField[com.google.common.collect.MapDifference.right] of Argument[-1];ReturnValue;value +com.google.common.collect;Queues;false;drain;(BlockingQueue,Collection,int,long,TimeUnit);;Element of Argument[0];Element of Argument[1];value +com.google.common.collect;Queues;false;drain;(BlockingQueue,Collection,int,Duration);;Element of Argument[0];Element of Argument[1];value +com.google.common.collect;Queues;false;newArrayDeque;(Iterable);;Element of Argument[0];Element of ReturnValue;value +com.google.common.collect;Queues;false;newConcurrentLinkedQueue;(Iterable);;Element of Argument[0];Element of ReturnValue;value +com.google.common.collect;Queues;false;newLinkedBlockingDeque;(Iterable);;Element of Argument[0];Element of ReturnValue;value +com.google.common.collect;Queues;false;newLinkedBlockingQueue;(Iterable);;Element of Argument[0];Element of ReturnValue;value +com.google.common.collect;Queues;false;newPriorityBlockingQueue;(Iterable);;Element of Argument[0];Element of ReturnValue;value +com.google.common.collect;Queues;false;newPriorityQueue;(Iterable);;Element of Argument[0];Element of ReturnValue;value +com.google.common.collect;Queues;false;synchronizedQueue;(Queue);;Element of Argument[0];Element of ReturnValue;value +com.google.common.collect;Queues;false;synchronizedDeque;(Deque);;Element of Argument[0];Element of ReturnValue;value +com.google.common.collect;Sets$SetView;true;immutableCopy;();;Element of Argument[-1];Element of ReturnValue;value +com.google.common.collect;Sets$SetView;true;copyInto;(Set);;Element of Argument[-1];Element of Argument[0];value +com.google.common.collect;Sets;false;cartesianProduct;(List);;Element of Element of Argument[0];Element of Element of ReturnValue;value +com.google.common.collect;Sets;false;cartesianProduct;(Set[]);;Element of ArrayElement of Argument[0];Element of Element of ReturnValue;value +com.google.common.collect;Sets;false;combinations;(Set,int);;Element of Argument[0];Element of Element of ReturnValue;value +com.google.common.collect;Sets;false;difference;(Set,Set);;Element of Argument[0];Element of ReturnValue;value +com.google.common.collect;Sets;false;filter;(NavigableSet,Predicate);;Element of Argument[0];Element of ReturnValue;value +com.google.common.collect;Sets;false;filter;(Set,Predicate);;Element of Argument[0];Element of ReturnValue;value +com.google.common.collect;Sets;false;filter;(SortedSet,Predicate);;Element of Argument[0];Element of ReturnValue;value +com.google.common.collect;Sets;false;newConcurrentHashSet;(Iterable);;Element of Argument[0];Element of ReturnValue;value +com.google.common.collect;Sets;false;newCopyOnWriteArraySet;(Iterable);;Element of Argument[0];Element of ReturnValue;value +com.google.common.collect;Sets;false;newConcurrentHashSet;(Iterable);;Element of Argument[0];Element of ReturnValue;value +com.google.common.collect;Sets;false;newHashSet;(Iterable);;Element of Argument[0];Element of ReturnValue;value +com.google.common.collect;Sets;false;newHashSet;(Iterator);;Element of Argument[0];Element of ReturnValue;value +com.google.common.collect;Sets;false;newHashSet;(Object[]);;ArrayElement of Argument[0];Element of ReturnValue;value +com.google.common.collect;Sets;false;newLinkedHashSet;(Iterable);;Element of Argument[0];Element of ReturnValue;value +com.google.common.collect;Sets;false;newTreeSet;(Iterable);;Element of Argument[0];Element of ReturnValue;value +com.google.common.collect;Sets;false;newSetFromMap;(Map);;MapKey of Argument[0];Element of ReturnValue;value +com.google.common.collect;Sets;false;powerSet;(Set);;Element of Argument[0];Element of Element of ReturnValue;value +com.google.common.collect;Sets;false;subSet;(NavigableSet,Range);;Element of Argument[0];Element of ReturnValue;value +com.google.common.collect;Sets;false;symmetricDifference;(Set,Set);;Element of Argument[0..1];Element of ReturnValue;value +com.google.common.collect;Sets;false;union;(Set,Set);;Element of Argument[0..1];Element of ReturnValue;value +com.google.common.collect;Sets;false;synchronizedNavigableSet;(NavigableSet);;Element of Argument[0];Element of ReturnValue;value +com.google.common.collect;Sets;false;unmodifiableNavigableSet;(NavigableSet);;Element of Argument[0];Element of ReturnValue;value +com.google.common.collect;Multisets;false;copyHighestCountFirst;(Multiset);;Element of Argument[0];Element of ReturnValue;value +com.google.common.collect;Multisets;false;difference;(Multiset,Multiset);;Element of Argument[0];Element of ReturnValue;value +com.google.common.collect;Multisets;false;filter;(Multiset,Predicate);;Element of Argument[0];Element of ReturnValue;value +com.google.common.collect;Multisets;false;immutableEntry;(Object,int);;Argument[0];Element of ReturnValue;value +com.google.common.collect;Multisets;false;sum;(Multiset,Multiset);;Element of Argument[0..1];Element of ReturnValue;value +com.google.common.collect;Multisets;false;union;(Multiset,Multiset);;Element of Argument[0..1];Element of ReturnValue;value +com.google.common.collect;Multisets;false;unmodifiableMultiset;(Multiset);;Element of Argument[0];Element of ReturnValue;value +com.google.common.collect;Multisets;false;unmodifiableMultiset;(ImmutableMultiset);;Element of Argument[0];Element of ReturnValue;value +com.google.common.collect;Multisets;false;unmodifiableSortedMultiset;(SortedMultiset);;Element of Argument[0];Element of ReturnValue;value +com.google.common.collect;Multimaps;false;asMap;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value +com.google.common.collect;Multimaps;false;asMap;(Multimap);;MapValue of Argument[0];Element of MapValue of ReturnValue;value +com.google.common.collect;Multimaps;false;asMap;(ListMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value +com.google.common.collect;Multimaps;false;asMap;(ListMultimap);;MapValue of Argument[0];Element of MapValue of ReturnValue;value +com.google.common.collect;Multimaps;false;asMap;(SetMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value +com.google.common.collect;Multimaps;false;asMap;(SetMultimap);;MapValue of Argument[0];Element of MapValue of ReturnValue;value +com.google.common.collect;Multimaps;false;asMap;(SortedSetMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value +com.google.common.collect;Multimaps;false;asMap;(SortedSetMultimap);;MapValue of Argument[0];Element of MapValue of ReturnValue;value +com.google.common.collect;Multimaps;false;filterEntries;(Multimap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value +com.google.common.collect;Multimaps;false;filterEntries;(Multimap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value +com.google.common.collect;Multimaps;false;filterEntries;(SetMultimap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value +com.google.common.collect;Multimaps;false;filterEntries;(SetMultimap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value +com.google.common.collect;Multimaps;false;filterKeys;(Multimap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value +com.google.common.collect;Multimaps;false;filterKeys;(Multimap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value +com.google.common.collect;Multimaps;false;filterKeys;(SetMultimap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value +com.google.common.collect;Multimaps;false;filterKeys;(SetMultimap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value +com.google.common.collect;Multimaps;false;filterValues;(Multimap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value +com.google.common.collect;Multimaps;false;filterValues;(Multimap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value +com.google.common.collect;Multimaps;false;filterValues;(SetMultimap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value +com.google.common.collect;Multimaps;false;filterValues;(SetMultimap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value +com.google.common.collect;Multimaps;false;forMap;(Map);;MapKey of Argument[0];MapKey of ReturnValue;value +com.google.common.collect;Multimaps;false;forMap;(Map);;MapValue of Argument[0];MapValue of ReturnValue;value +com.google.common.collect;Multimaps;false;index;(Iterable,Function);;Element of Argument[0];MapValue of ReturnValue;value +com.google.common.collect;Multimaps;false;index;(Iterator,Function);;Element of Argument[0];MapValue of ReturnValue;value +com.google.common.collect;Multimaps;false;invertFrom;(Multimap,Multimap);;MapKey of Argument[0];MapValue of ReturnValue;value +com.google.common.collect;Multimaps;false;invertFrom;(Multimap,Multimap);;MapValue of Argument[0];MapKey of ReturnValue;value +com.google.common.collect;Multimaps;false;newMultimap;(Map,Supplier);;MapKey of Argument[0];MapKey of ReturnValue;value +com.google.common.collect;Multimaps;false;newMultimap;(Map,Supplier);;Element of MapValue of Argument[0];MapValue of ReturnValue;value +com.google.common.collect;Multimaps;false;newListMultimap;(Map,Supplier);;MapKey of Argument[0];MapKey of ReturnValue;value +com.google.common.collect;Multimaps;false;newListMultimap;(Map,Supplier);;Element of MapValue of Argument[0];MapValue of ReturnValue;value +com.google.common.collect;Multimaps;false;newSetMultimap;(Map,Supplier);;MapKey of Argument[0];MapKey of ReturnValue;value +com.google.common.collect;Multimaps;false;newSetMultimap;(Map,Supplier);;Element of MapValue of Argument[0];MapValue of ReturnValue;value +com.google.common.collect;Multimaps;false;newSortedSetMultimap;(Map,Supplier);;MapKey of Argument[0];MapKey of ReturnValue;value +com.google.common.collect;Multimaps;false;newSortedSetMultimap;(Map,Supplier);;Element of MapValue of Argument[0];MapValue of ReturnValue;value +com.google.common.collect;Multimaps;false;transformValues;(Multimap,Function);;MapKey of Argument[0];MapKey of ReturnValue;value +com.google.common.collect;Multimaps;false;transformValues;(ListMultimap,Function);;MapKey of Argument[0];MapKey of ReturnValue;value +com.google.common.collect;Multimaps;false;synchronizedMultimap;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value +com.google.common.collect;Multimaps;false;synchronizedMultimap;(Multimap);;MapValue of Argument[0];MapValue of ReturnValue;value +com.google.common.collect;Multimaps;false;synchronizedListMultimap;(ListMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value +com.google.common.collect;Multimaps;false;synchronizedListMultimap;(ListMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value +com.google.common.collect;Multimaps;false;synchronizedSetMultimap;(SetMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value +com.google.common.collect;Multimaps;false;synchronizedSetMultimap;(SetMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value +com.google.common.collect;Multimaps;false;synchronizedSortedSetMultimap;(SortedSetMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value +com.google.common.collect;Multimaps;false;synchronizedSortedSetMultimap;(SortedSetMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value +com.google.common.collect;Multimaps;false;unmodifiableMultimap;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value +com.google.common.collect;Multimaps;false;unmodifiableMultimap;(Multimap);;MapValue of Argument[0];MapValue of ReturnValue;value +com.google.common.collect;Multimaps;false;unmodifiableMultimap;(ImmutableMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value +com.google.common.collect;Multimaps;false;unmodifiableMultimap;(ImmutableMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value +com.google.common.collect;Multimaps;false;unmodifiableListMultimap;(ListMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value +com.google.common.collect;Multimaps;false;unmodifiableListMultimap;(ListMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value +com.google.common.collect;Multimaps;false;unmodifiableListMultimap;(ImmutableListMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value +com.google.common.collect;Multimaps;false;unmodifiableListMultimap;(ImmutableListMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value +com.google.common.collect;Multimaps;false;unmodifiableSetMultimap;(SetMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value +com.google.common.collect;Multimaps;false;unmodifiableSetMultimap;(SetMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value +com.google.common.collect;Multimaps;false;unmodifiableSetMultimap;(ImmutableSetMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value +com.google.common.collect;Multimaps;false;unmodifiableSetMultimap;(ImmutableSetMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value +com.google.common.collect;Multimaps;false;unmodifiableSortedSetMultimap;(SortedSetMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value +com.google.common.collect;Multimaps;false;unmodifiableSortedSetMultimap;(SortedSetMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value +com.google.common.collect;Tables;false;immutableCell;(Object,Object,Object);;Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of MapKey of ReturnValue;value +com.google.common.collect;Tables;false;immutableCell;(Object,Object,Object);;Argument[1];SyntheticField[com.google.common.collect.Table.columnKey] of MapKey of ReturnValue;value +com.google.common.collect;Tables;false;immutableCell;(Object,Object,Object);;Argument[2];MapValue of ReturnValue;value +com.google.common.collect;Tables;false;newCustomTable;(Map,Supplier);;MapKey of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of MapKey of ReturnValue;value +com.google.common.collect;Tables;false;newCustomTable;(Map,Supplier);;MapKey of MapValue of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of MapKey of ReturnValue;value +com.google.common.collect;Tables;false;newCustomTable;(Map,Supplier);;MapValue of MapValue of Argument[0];MapValue of ReturnValue;value +com.google.common.collect;Tables;false;transpose;(Table);;SyntheticField[com.google.common.collect.Table.rowKey] of MapKey of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of MapKey of ReturnValue;value +com.google.common.collect;Tables;false;transpose;(Table);;SyntheticField[com.google.common.collect.Table.columnKey] of MapKey of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of MapKey of ReturnValue;value +com.google.common.collect;Tables;false;transpose;(Table);;MapValue of Argument[0];MapValue of ReturnValue;value +com.google.common.collect;Tables;false;transformValues;(Table,Function);;MapKey of Argument[0];MapKey of ReturnValue;value +com.google.common.collect;Tables;false;synchronizedTable;(Table);;MapKey of Argument[0];MapKey of ReturnValue;value +com.google.common.collect;Tables;false;synchronizedTable;(Table);;MapValue of Argument[0];MapValue of ReturnValue;value +com.google.common.collect;Tables;false;unmodifiableTable;(Table);;MapKey of Argument[0];MapKey of ReturnValue;value +com.google.common.collect;Tables;false;unmodifiableTable;(Table);;MapValue of Argument[0];MapValue of ReturnValue;value +com.google.common.collect;Tables;false;unmodifiableRowSortedTable;(RowSortedTable);;MapKey of Argument[0];MapKey of ReturnValue;value +com.google.common.collect;Tables;false;unmodifiableRowSortedTable;(RowSortedTable);;MapValue of Argument[0];MapValue of ReturnValue;value +com.google.common.collect;ObjectArrays;false;concat;(Object,Object[]);;Argument[0];ArrayElement of ReturnValue;value +com.google.common.collect;ObjectArrays;false;concat;(Object,Object[]);;ArrayElement of Argument[1];ArrayElement of ReturnValue;value +com.google.common.collect;ObjectArrays;false;concat;(Object[],Object);;ArrayElement of Argument[0];ArrayElement of ReturnValue;value +com.google.common.collect;ObjectArrays;false;concat;(Object[],Object);;Argument[1];ArrayElement of ReturnValue;value +com.google.common.collect;ObjectArrays;false;concat;(Object[],Object[],Class);;ArrayElement of Argument[0..1];ArrayElement of ReturnValue;value \ No newline at end of file From ff733e0334f6e12bb91003a9d67905ba0e8da7a1 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Wed, 14 Jul 2021 14:46:32 +0100 Subject: [PATCH 474/741] Fix up issues in generated tests --- .../frameworks/guava/generated/Test.java | 1426 +---------------- 1 file changed, 5 insertions(+), 1421 deletions(-) diff --git a/java/ql/test/library-tests/frameworks/guava/generated/Test.java b/java/ql/test/library-tests/frameworks/guava/generated/Test.java index c1d5f2bdf16..b5820ca7605 100644 --- a/java/ql/test/library-tests/frameworks/guava/generated/Test.java +++ b/java/ql/test/library-tests/frameworks/guava/generated/Test.java @@ -3,16 +3,6 @@ package generatedtest; import com.google.common.base.Function; import com.google.common.base.Optional; import com.google.common.base.Predicate; -import com.google.common.collect.AbstractListMultimap; -import com.google.common.collect.AbstractMapBasedMultimap; -import com.google.common.collect.AbstractMapBasedMultiset; -import com.google.common.collect.AbstractMultimap; -import com.google.common.collect.AbstractMultiset; -import com.google.common.collect.AbstractSetMultimap; -import com.google.common.collect.AbstractSortedKeySortedSetMultimap; -import com.google.common.collect.AbstractSortedMultiset; -import com.google.common.collect.AbstractSortedSetMultimap; -import com.google.common.collect.AbstractTable; import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.ArrayTable; import com.google.common.collect.BiMap; @@ -33,11 +23,8 @@ import com.google.common.collect.ImmutableMultiset; import com.google.common.collect.ImmutableSet; import com.google.common.collect.ImmutableSetMultimap; import com.google.common.collect.ImmutableSortedMap; -import com.google.common.collect.ImmutableSortedMapFauxverideShim; import com.google.common.collect.ImmutableSortedMultiset; -import com.google.common.collect.ImmutableSortedMultisetFauxverideShim; import com.google.common.collect.ImmutableSortedSet; -import com.google.common.collect.ImmutableSortedSetFauxverideShim; import com.google.common.collect.ImmutableTable; import com.google.common.collect.Iterables; import com.google.common.collect.Iterators; @@ -61,10 +48,7 @@ import com.google.common.collect.SetMultimap; import com.google.common.collect.Sets; import com.google.common.collect.SortedMapDifference; import com.google.common.collect.SortedMultiset; -import com.google.common.collect.SortedMultisetBridge; import com.google.common.collect.SortedSetMultimap; -import com.google.common.collect.StandardRowSortedTable; -import com.google.common.collect.StandardTable; import com.google.common.collect.Table; import com.google.common.collect.Tables; import com.google.common.collect.TreeBasedTable; @@ -117,7 +101,7 @@ public class Test { Object source() { return null; } void sink(Object o) { } - public void test() { + public void test() throws Exception { { // "com.google.common.collect;ArrayListMultimap;true;create;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value" @@ -1610,41 +1594,6 @@ public class Test { out = ImmutableMap.copyOf(in); sink(getMapValue(out)); // $hasValueFlow } - { - // "com.google.common.collect;ImmutableMap;true;of;;;Argument[0];MapKey of ReturnValue;value" - ImmutableSortedMap out = null; - Object in = (Object)source(); - out = ImmutableSortedMapFauxverideShim.of(in, null, null, null, null, null, null, null, null, null); - sink(getMapKey(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMap;true;of;;;Argument[0];MapKey of ReturnValue;value" - ImmutableSortedMap out = null; - Object in = (Object)source(); - out = ImmutableSortedMapFauxverideShim.of(in, null, null, null, null, null, null, null); - sink(getMapKey(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMap;true;of;;;Argument[0];MapKey of ReturnValue;value" - ImmutableSortedMap out = null; - Object in = (Object)source(); - out = ImmutableSortedMapFauxverideShim.of(in, null, null, null, null, null); - sink(getMapKey(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMap;true;of;;;Argument[0];MapKey of ReturnValue;value" - ImmutableSortedMap out = null; - Object in = (Object)source(); - out = ImmutableSortedMapFauxverideShim.of(in, null, null, null); - sink(getMapKey(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMap;true;of;;;Argument[0];MapKey of ReturnValue;value" - ImmutableSortedMap out = null; - Object in = (Object)source(); - out = ImmutableSortedMapFauxverideShim.of(in, null); - sink(getMapKey(out)); // $hasValueFlow - } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[0];MapKey of ReturnValue;value" ImmutableSortedMap out = null; @@ -1715,41 +1664,6 @@ public class Test { out = ImmutableMap.of(in, null); sink(getMapKey(out)); // $hasValueFlow } - { - // "com.google.common.collect;ImmutableMap;true;of;;;Argument[1];MapValue of ReturnValue;value" - ImmutableSortedMap out = null; - Object in = (Object)source(); - out = ImmutableSortedMapFauxverideShim.of(null, in, null, null, null, null, null, null, null, null); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMap;true;of;;;Argument[1];MapValue of ReturnValue;value" - ImmutableSortedMap out = null; - Object in = (Object)source(); - out = ImmutableSortedMapFauxverideShim.of(null, in, null, null, null, null, null, null); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMap;true;of;;;Argument[1];MapValue of ReturnValue;value" - ImmutableSortedMap out = null; - Object in = (Object)source(); - out = ImmutableSortedMapFauxverideShim.of(null, in, null, null, null, null); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMap;true;of;;;Argument[1];MapValue of ReturnValue;value" - ImmutableSortedMap out = null; - Object in = (Object)source(); - out = ImmutableSortedMapFauxverideShim.of(null, in, null, null); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMap;true;of;;;Argument[1];MapValue of ReturnValue;value" - ImmutableSortedMap out = null; - Object in = (Object)source(); - out = ImmutableSortedMapFauxverideShim.of(null, in); - sink(getMapValue(out)); // $hasValueFlow - } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[1];MapValue of ReturnValue;value" ImmutableSortedMap out = null; @@ -1820,34 +1734,6 @@ public class Test { out = ImmutableMap.of(null, in); sink(getMapValue(out)); // $hasValueFlow } - { - // "com.google.common.collect;ImmutableMap;true;of;;;Argument[2];MapKey of ReturnValue;value" - ImmutableSortedMap out = null; - Object in = (Object)source(); - out = ImmutableSortedMapFauxverideShim.of(null, null, in, null, null, null, null, null, null, null); - sink(getMapKey(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMap;true;of;;;Argument[2];MapKey of ReturnValue;value" - ImmutableSortedMap out = null; - Object in = (Object)source(); - out = ImmutableSortedMapFauxverideShim.of(null, null, in, null, null, null, null, null); - sink(getMapKey(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMap;true;of;;;Argument[2];MapKey of ReturnValue;value" - ImmutableSortedMap out = null; - Object in = (Object)source(); - out = ImmutableSortedMapFauxverideShim.of(null, null, in, null, null, null); - sink(getMapKey(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMap;true;of;;;Argument[2];MapKey of ReturnValue;value" - ImmutableSortedMap out = null; - Object in = (Object)source(); - out = ImmutableSortedMapFauxverideShim.of(null, null, in, null); - sink(getMapKey(out)); // $hasValueFlow - } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[2];MapKey of ReturnValue;value" ImmutableSortedMap out = null; @@ -1904,34 +1790,6 @@ public class Test { out = ImmutableMap.of(null, null, in, null); sink(getMapKey(out)); // $hasValueFlow } - { - // "com.google.common.collect;ImmutableMap;true;of;;;Argument[3];MapValue of ReturnValue;value" - ImmutableSortedMap out = null; - Object in = (Object)source(); - out = ImmutableSortedMapFauxverideShim.of(null, null, null, in, null, null, null, null, null, null); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMap;true;of;;;Argument[3];MapValue of ReturnValue;value" - ImmutableSortedMap out = null; - Object in = (Object)source(); - out = ImmutableSortedMapFauxverideShim.of(null, null, null, in, null, null, null, null); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMap;true;of;;;Argument[3];MapValue of ReturnValue;value" - ImmutableSortedMap out = null; - Object in = (Object)source(); - out = ImmutableSortedMapFauxverideShim.of(null, null, null, in, null, null); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMap;true;of;;;Argument[3];MapValue of ReturnValue;value" - ImmutableSortedMap out = null; - Object in = (Object)source(); - out = ImmutableSortedMapFauxverideShim.of(null, null, null, in); - sink(getMapValue(out)); // $hasValueFlow - } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[3];MapValue of ReturnValue;value" ImmutableSortedMap out = null; @@ -1988,27 +1846,6 @@ public class Test { out = ImmutableMap.of(null, null, null, in); sink(getMapValue(out)); // $hasValueFlow } - { - // "com.google.common.collect;ImmutableMap;true;of;;;Argument[4];MapKey of ReturnValue;value" - ImmutableSortedMap out = null; - Object in = (Object)source(); - out = ImmutableSortedMapFauxverideShim.of(null, null, null, null, in, null, null, null, null, null); - sink(getMapKey(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMap;true;of;;;Argument[4];MapKey of ReturnValue;value" - ImmutableSortedMap out = null; - Object in = (Object)source(); - out = ImmutableSortedMapFauxverideShim.of(null, null, null, null, in, null, null, null); - sink(getMapKey(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMap;true;of;;;Argument[4];MapKey of ReturnValue;value" - ImmutableSortedMap out = null; - Object in = (Object)source(); - out = ImmutableSortedMapFauxverideShim.of(null, null, null, null, in, null); - sink(getMapKey(out)); // $hasValueFlow - } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[4];MapKey of ReturnValue;value" ImmutableSortedMap out = null; @@ -2051,27 +1888,6 @@ public class Test { out = ImmutableMap.of(null, null, null, null, in, null); sink(getMapKey(out)); // $hasValueFlow } - { - // "com.google.common.collect;ImmutableMap;true;of;;;Argument[5];MapValue of ReturnValue;value" - ImmutableSortedMap out = null; - Object in = (Object)source(); - out = ImmutableSortedMapFauxverideShim.of(null, null, null, null, null, in, null, null, null, null); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMap;true;of;;;Argument[5];MapValue of ReturnValue;value" - ImmutableSortedMap out = null; - Object in = (Object)source(); - out = ImmutableSortedMapFauxverideShim.of(null, null, null, null, null, in, null, null); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMap;true;of;;;Argument[5];MapValue of ReturnValue;value" - ImmutableSortedMap out = null; - Object in = (Object)source(); - out = ImmutableSortedMapFauxverideShim.of(null, null, null, null, null, in); - sink(getMapValue(out)); // $hasValueFlow - } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[5];MapValue of ReturnValue;value" ImmutableSortedMap out = null; @@ -2114,20 +1930,6 @@ public class Test { out = ImmutableMap.of(null, null, null, null, null, in); sink(getMapValue(out)); // $hasValueFlow } - { - // "com.google.common.collect;ImmutableMap;true;of;;;Argument[6];MapKey of ReturnValue;value" - ImmutableSortedMap out = null; - Object in = (Object)source(); - out = ImmutableSortedMapFauxverideShim.of(null, null, null, null, null, null, in, null, null, null); - sink(getMapKey(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMap;true;of;;;Argument[6];MapKey of ReturnValue;value" - ImmutableSortedMap out = null; - Object in = (Object)source(); - out = ImmutableSortedMapFauxverideShim.of(null, null, null, null, null, null, in, null); - sink(getMapKey(out)); // $hasValueFlow - } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[6];MapKey of ReturnValue;value" ImmutableSortedMap out = null; @@ -2156,20 +1958,6 @@ public class Test { out = ImmutableMap.of(null, null, null, null, null, null, in, null); sink(getMapKey(out)); // $hasValueFlow } - { - // "com.google.common.collect;ImmutableMap;true;of;;;Argument[7];MapValue of ReturnValue;value" - ImmutableSortedMap out = null; - Object in = (Object)source(); - out = ImmutableSortedMapFauxverideShim.of(null, null, null, null, null, null, null, in, null, null); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMap;true;of;;;Argument[7];MapValue of ReturnValue;value" - ImmutableSortedMap out = null; - Object in = (Object)source(); - out = ImmutableSortedMapFauxverideShim.of(null, null, null, null, null, null, null, in); - sink(getMapValue(out)); // $hasValueFlow - } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[7];MapValue of ReturnValue;value" ImmutableSortedMap out = null; @@ -2198,13 +1986,6 @@ public class Test { out = ImmutableMap.of(null, null, null, null, null, null, null, in); sink(getMapValue(out)); // $hasValueFlow } - { - // "com.google.common.collect;ImmutableMap;true;of;;;Argument[8];MapKey of ReturnValue;value" - ImmutableSortedMap out = null; - Object in = (Object)source(); - out = ImmutableSortedMapFauxverideShim.of(null, null, null, null, null, null, null, null, in, null); - sink(getMapKey(out)); // $hasValueFlow - } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[8];MapKey of ReturnValue;value" ImmutableSortedMap out = null; @@ -2219,13 +2000,6 @@ public class Test { out = ImmutableMap.of(null, null, null, null, null, null, null, null, in, null); sink(getMapKey(out)); // $hasValueFlow } - { - // "com.google.common.collect;ImmutableMap;true;of;;;Argument[9];MapValue of ReturnValue;value" - ImmutableSortedMap out = null; - Object in = (Object)source(); - out = ImmutableSortedMapFauxverideShim.of(null, null, null, null, null, null, null, null, null, in); - sink(getMapValue(out)); // $hasValueFlow - } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[9];MapValue of ReturnValue;value" ImmutableSortedMap out = null; @@ -3514,153 +3288,6 @@ public class Test { out = ImmutableMultiset.copyOf(in); sink(getElement(out)); // $hasValueFlow } - { - // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSortedMultiset out = null; - Object in = (Object)source(); - out = ImmutableSortedMultisetFauxverideShim.of(null, null, null, null, null, in, null); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSortedMultiset out = null; - Object in = (Object)source(); - out = ImmutableSortedMultisetFauxverideShim.of(null, null, null, null, in, null, null); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSortedMultiset out = null; - Object in = (Object)source(); - out = ImmutableSortedMultisetFauxverideShim.of(null, null, null, null, in); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSortedMultiset out = null; - Object in = (Object)source(); - out = ImmutableSortedMultisetFauxverideShim.of(null, null, null, in, null, null, null); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSortedMultiset out = null; - Object in = (Object)source(); - out = ImmutableSortedMultisetFauxverideShim.of(null, null, null, in, null); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSortedMultiset out = null; - Object in = (Object)source(); - out = ImmutableSortedMultisetFauxverideShim.of(null, null, null, in); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSortedMultiset out = null; - Object in = (Object)source(); - out = ImmutableSortedMultisetFauxverideShim.of(null, null, in, null, null, null, null); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSortedMultiset out = null; - Object in = (Object)source(); - out = ImmutableSortedMultisetFauxverideShim.of(null, null, in, null, null); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSortedMultiset out = null; - Object in = (Object)source(); - out = ImmutableSortedMultisetFauxverideShim.of(null, null, in, null); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSortedMultiset out = null; - Object in = (Object)source(); - out = ImmutableSortedMultisetFauxverideShim.of(null, null, in); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSortedMultiset out = null; - Object in = (Object)source(); - out = ImmutableSortedMultisetFauxverideShim.of(null, in, null, null, null, null, null); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSortedMultiset out = null; - Object in = (Object)source(); - out = ImmutableSortedMultisetFauxverideShim.of(null, in, null, null, null); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSortedMultiset out = null; - Object in = (Object)source(); - out = ImmutableSortedMultisetFauxverideShim.of(null, in, null, null); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSortedMultiset out = null; - Object in = (Object)source(); - out = ImmutableSortedMultisetFauxverideShim.of(null, in, null); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSortedMultiset out = null; - Object in = (Object)source(); - out = ImmutableSortedMultisetFauxverideShim.of(null, in); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSortedMultiset out = null; - Object in = (Object)source(); - out = ImmutableSortedMultisetFauxverideShim.of(in, null, null, null, null, null, null); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSortedMultiset out = null; - Object in = (Object)source(); - out = ImmutableSortedMultisetFauxverideShim.of(in, null, null, null, null); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSortedMultiset out = null; - Object in = (Object)source(); - out = ImmutableSortedMultisetFauxverideShim.of(in, null, null, null); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSortedMultiset out = null; - Object in = (Object)source(); - out = ImmutableSortedMultisetFauxverideShim.of(in, null, null); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSortedMultiset out = null; - Object in = (Object)source(); - out = ImmutableSortedMultisetFauxverideShim.of(in, null); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSortedMultiset out = null; - Object in = (Object)source(); - out = ImmutableSortedMultisetFauxverideShim.of(in); - sink(getElement(out)); // $hasValueFlow - } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedMultiset out = null; @@ -3997,153 +3624,6 @@ public class Test { out = ImmutableSet.copyOf(in); sink(getElement(out)); // $hasValueFlow } - { - // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSortedSet out = null; - Object in = (Object)source(); - out = ImmutableSortedSetFauxverideShim.of(null, null, null, null, null, in, null); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSortedSet out = null; - Object in = (Object)source(); - out = ImmutableSortedSetFauxverideShim.of(null, null, null, null, in, null, null); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSortedSet out = null; - Object in = (Object)source(); - out = ImmutableSortedSetFauxverideShim.of(null, null, null, null, in); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSortedSet out = null; - Object in = (Object)source(); - out = ImmutableSortedSetFauxverideShim.of(null, null, null, in, null, null, null); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSortedSet out = null; - Object in = (Object)source(); - out = ImmutableSortedSetFauxverideShim.of(null, null, null, in, null); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSortedSet out = null; - Object in = (Object)source(); - out = ImmutableSortedSetFauxverideShim.of(null, null, null, in); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSortedSet out = null; - Object in = (Object)source(); - out = ImmutableSortedSetFauxverideShim.of(null, null, in, null, null, null, null); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSortedSet out = null; - Object in = (Object)source(); - out = ImmutableSortedSetFauxverideShim.of(null, null, in, null, null); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSortedSet out = null; - Object in = (Object)source(); - out = ImmutableSortedSetFauxverideShim.of(null, null, in, null); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSortedSet out = null; - Object in = (Object)source(); - out = ImmutableSortedSetFauxverideShim.of(null, null, in); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSortedSet out = null; - Object in = (Object)source(); - out = ImmutableSortedSetFauxverideShim.of(null, in, null, null, null, null, null); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSortedSet out = null; - Object in = (Object)source(); - out = ImmutableSortedSetFauxverideShim.of(null, in, null, null, null); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSortedSet out = null; - Object in = (Object)source(); - out = ImmutableSortedSetFauxverideShim.of(null, in, null, null); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSortedSet out = null; - Object in = (Object)source(); - out = ImmutableSortedSetFauxverideShim.of(null, in, null); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSortedSet out = null; - Object in = (Object)source(); - out = ImmutableSortedSetFauxverideShim.of(null, in); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSortedSet out = null; - Object in = (Object)source(); - out = ImmutableSortedSetFauxverideShim.of(in, null, null, null, null, null, null); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSortedSet out = null; - Object in = (Object)source(); - out = ImmutableSortedSetFauxverideShim.of(in, null, null, null, null); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSortedSet out = null; - Object in = (Object)source(); - out = ImmutableSortedSetFauxverideShim.of(in, null, null, null); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSortedSet out = null; - Object in = (Object)source(); - out = ImmutableSortedSetFauxverideShim.of(in, null, null); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSortedSet out = null; - Object in = (Object)source(); - out = ImmutableSortedSetFauxverideShim.of(in, null); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSortedSet out = null; - Object in = (Object)source(); - out = ImmutableSortedSetFauxverideShim.of(in); - sink(getElement(out)); // $hasValueFlow - } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedSet out = null; @@ -4693,7 +4173,7 @@ public class Test { { // "com.google.common.collect;Iterables;false;concat;(Iterable[]);;Element of ArrayElement of Argument[0];Element of ReturnValue;value" Iterable out = null; - Iterable[] in = (Iterable[])newWithArrayElement(newWithElement(source())); + Iterable[] in = (Iterable[])newWithArrayElement(newWithElement(source())); out = Iterables.concat(in); sink(getElement(out)); // $hasValueFlow } @@ -4959,7 +4439,7 @@ public class Test { { // "com.google.common.collect;Iterators;false;concat;(Iterator[]);;Element of ArrayElement of Argument[0];Element of ReturnValue;value" Iterator out = null; - Iterator[] in = (Iterator[])newWithArrayElement(newWithElement(source())); + Iterator[] in = (Iterator[])newWithArrayElement(newWithElement(source())); out = Iterators.concat(in); sink(getElement(out)); // $hasValueFlow } @@ -5239,7 +4719,7 @@ public class Test { { // "com.google.common.collect;Lists;false;cartesianProduct;(List[]);;Element of ArrayElement of Argument[0];Element of Element of ReturnValue;value" List out = null; - List[] in = (List[])newWithArrayElement(newWithElement(source())); + List[] in = (List[])newWithArrayElement(newWithElement(source())); out = Lists.cartesianProduct(in); sink(getElement(getElement(out))); // $hasValueFlow } @@ -5677,13 +5157,6 @@ public class Test { out = Maps.unmodifiableNavigableMap(in); sink(getMapValue(out)); // $hasValueFlow } - { - // "com.google.common.collect;Multimap;true;asMap;();;MapKey of Argument[-1];MapKey of ReturnValue;value" - SortedMap out = null; - AbstractSortedKeySortedSetMultimap in = (AbstractSortedKeySortedSetMultimap)newWithMapKey(source()); - out = in.asMap(); - sink(getMapKey(out)); // $hasValueFlow - } { // "com.google.common.collect;Multimap;true;asMap;();;MapKey of Argument[-1];MapKey of ReturnValue;value" NavigableMap out = null; @@ -5719,34 +5192,6 @@ public class Test { out = in.asMap(); sink(getMapKey(out)); // $hasValueFlow } - { - // "com.google.common.collect;Multimap;true;asMap;();;MapKey of Argument[-1];MapKey of ReturnValue;value" - Map out = null; - AbstractSortedSetMultimap in = (AbstractSortedSetMultimap)newWithMapKey(source()); - out = in.asMap(); - sink(getMapKey(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Multimap;true;asMap;();;MapKey of Argument[-1];MapKey of ReturnValue;value" - Map out = null; - AbstractSetMultimap in = (AbstractSetMultimap)newWithMapKey(source()); - out = in.asMap(); - sink(getMapKey(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Multimap;true;asMap;();;MapKey of Argument[-1];MapKey of ReturnValue;value" - Map out = null; - AbstractMultimap in = (AbstractMultimap)newWithMapKey(source()); - out = in.asMap(); - sink(getMapKey(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Multimap;true;asMap;();;MapKey of Argument[-1];MapKey of ReturnValue;value" - Map out = null; - AbstractListMultimap in = (AbstractListMultimap)newWithMapKey(source()); - out = in.asMap(); - sink(getMapKey(out)); // $hasValueFlow - } { // "com.google.common.collect;Multimap;true;asMap;();;MapKey of Argument[-1];MapKey of ReturnValue;value" ImmutableMap out = null; @@ -5754,13 +5199,6 @@ public class Test { out = in.asMap(); sink(getMapKey(out)); // $hasValueFlow } - { - // "com.google.common.collect;Multimap;true;asMap;();;MapValue of Argument[-1];Element of MapValue of ReturnValue;value" - SortedMap out = null; - AbstractSortedKeySortedSetMultimap in = (AbstractSortedKeySortedSetMultimap)newWithMapValue(source()); - out = in.asMap(); - sink(getElement(getMapValue(out))); // $hasValueFlow - } { // "com.google.common.collect;Multimap;true;asMap;();;MapValue of Argument[-1];Element of MapValue of ReturnValue;value" NavigableMap out = null; @@ -5796,34 +5234,6 @@ public class Test { out = in.asMap(); sink(getElement(getMapValue(out))); // $hasValueFlow } - { - // "com.google.common.collect;Multimap;true;asMap;();;MapValue of Argument[-1];Element of MapValue of ReturnValue;value" - Map out = null; - AbstractSortedSetMultimap in = (AbstractSortedSetMultimap)newWithMapValue(source()); - out = in.asMap(); - sink(getElement(getMapValue(out))); // $hasValueFlow - } - { - // "com.google.common.collect;Multimap;true;asMap;();;MapValue of Argument[-1];Element of MapValue of ReturnValue;value" - Map out = null; - AbstractSetMultimap in = (AbstractSetMultimap)newWithMapValue(source()); - out = in.asMap(); - sink(getElement(getMapValue(out))); // $hasValueFlow - } - { - // "com.google.common.collect;Multimap;true;asMap;();;MapValue of Argument[-1];Element of MapValue of ReturnValue;value" - Map out = null; - AbstractMultimap in = (AbstractMultimap)newWithMapValue(source()); - out = in.asMap(); - sink(getElement(getMapValue(out))); // $hasValueFlow - } - { - // "com.google.common.collect;Multimap;true;asMap;();;MapValue of Argument[-1];Element of MapValue of ReturnValue;value" - Map out = null; - AbstractListMultimap in = (AbstractListMultimap)newWithMapValue(source()); - out = in.asMap(); - sink(getElement(getMapValue(out))); // $hasValueFlow - } { // "com.google.common.collect;Multimap;true;asMap;();;MapValue of Argument[-1];Element of MapValue of ReturnValue;value" ImmutableMap out = null; @@ -5845,13 +5255,6 @@ public class Test { out = in.entries(); sink(getMapKey(getElement(out))); // $hasValueFlow } - { - // "com.google.common.collect;Multimap;true;entries;();;MapKey of Argument[-1];MapKey of Element of ReturnValue;value" - Set out = null; - AbstractSetMultimap in = (AbstractSetMultimap)newWithMapKey(source()); - out = in.entries(); - sink(getMapKey(getElement(out))); // $hasValueFlow - } { // "com.google.common.collect;Multimap;true;entries;();;MapKey of Argument[-1];MapKey of Element of ReturnValue;value" List out = null; @@ -5880,20 +5283,6 @@ public class Test { out = in.entries(); sink(getMapKey(getElement(out))); // $hasValueFlow } - { - // "com.google.common.collect;Multimap;true;entries;();;MapKey of Argument[-1];MapKey of Element of ReturnValue;value" - Collection out = null; - AbstractMultimap in = (AbstractMultimap)newWithMapKey(source()); - out = in.entries(); - sink(getMapKey(getElement(out))); // $hasValueFlow - } - { - // "com.google.common.collect;Multimap;true;entries;();;MapKey of Argument[-1];MapKey of Element of ReturnValue;value" - Collection out = null; - AbstractMapBasedMultimap in = (AbstractMapBasedMultimap)newWithMapKey(source()); - out = in.entries(); - sink(getMapKey(getElement(out))); // $hasValueFlow - } { // "com.google.common.collect;Multimap;true;entries;();;MapValue of Argument[-1];MapValue of Element of ReturnValue;value" Set out = null; @@ -5908,13 +5297,6 @@ public class Test { out = in.entries(); sink(getMapValue(getElement(out))); // $hasValueFlow } - { - // "com.google.common.collect;Multimap;true;entries;();;MapValue of Argument[-1];MapValue of Element of ReturnValue;value" - Set out = null; - AbstractSetMultimap in = (AbstractSetMultimap)newWithMapValue(source()); - out = in.entries(); - sink(getMapValue(getElement(out))); // $hasValueFlow - } { // "com.google.common.collect;Multimap;true;entries;();;MapValue of Argument[-1];MapValue of Element of ReturnValue;value" List out = null; @@ -5943,20 +5325,6 @@ public class Test { out = in.entries(); sink(getMapValue(getElement(out))); // $hasValueFlow } - { - // "com.google.common.collect;Multimap;true;entries;();;MapValue of Argument[-1];MapValue of Element of ReturnValue;value" - Collection out = null; - AbstractMultimap in = (AbstractMultimap)newWithMapValue(source()); - out = in.entries(); - sink(getMapValue(getElement(out))); // $hasValueFlow - } - { - // "com.google.common.collect;Multimap;true;entries;();;MapValue of Argument[-1];MapValue of Element of ReturnValue;value" - Collection out = null; - AbstractMapBasedMultimap in = (AbstractMapBasedMultimap)newWithMapValue(source()); - out = in.entries(); - sink(getMapValue(getElement(out))); // $hasValueFlow - } { // "com.google.common.collect;Multimap;true;get;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" SortedSet out = null; @@ -5971,20 +5339,6 @@ public class Test { out = in.get((Object)null); sink(getElement(out)); // $hasValueFlow } - { - // "com.google.common.collect;Multimap;true;get;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" - SortedSet out = null; - AbstractSortedSetMultimap in = (AbstractSortedSetMultimap)newWithMapValue(source()); - out = in.get(null); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Multimap;true;get;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" - SortedSet out = null; - AbstractSortedSetMultimap in = (AbstractSortedSetMultimap)newWithMapValue(source()); - out = in.get((Object)null); - sink(getElement(out)); // $hasValueFlow - } { // "com.google.common.collect;Multimap;true;get;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" Set out = null; @@ -5999,20 +5353,6 @@ public class Test { out = in.get((Object)null); sink(getElement(out)); // $hasValueFlow } - { - // "com.google.common.collect;Multimap;true;get;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" - Set out = null; - AbstractSetMultimap in = (AbstractSetMultimap)newWithMapValue(source()); - out = in.get(null); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Multimap;true;get;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" - Set out = null; - AbstractSetMultimap in = (AbstractSetMultimap)newWithMapValue(source()); - out = in.get((Object)null); - sink(getElement(out)); // $hasValueFlow - } { // "com.google.common.collect;Multimap;true;get;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" NavigableSet out = null; @@ -6041,20 +5381,6 @@ public class Test { out = in.get(null); sink(getElement(out)); // $hasValueFlow } - { - // "com.google.common.collect;Multimap;true;get;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" - List out = null; - AbstractListMultimap in = (AbstractListMultimap)newWithMapValue(source()); - out = in.get(null); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Multimap;true;get;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" - List out = null; - AbstractListMultimap in = (AbstractListMultimap)newWithMapValue(source()); - out = in.get((Object)null); - sink(getElement(out)); // $hasValueFlow - } { // "com.google.common.collect;Multimap;true;get;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" ImmutableSet out = null; @@ -6097,27 +5423,6 @@ public class Test { out = in.get((Object)null); sink(getElement(out)); // $hasValueFlow } - { - // "com.google.common.collect;Multimap;true;get;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" - Collection out = null; - AbstractMapBasedMultimap in = (AbstractMapBasedMultimap)newWithMapValue(source()); - out = in.get(null); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Multimap;true;get;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" - Collection out = null; - AbstractMapBasedMultimap in = (AbstractMapBasedMultimap)newWithMapValue(source()); - out = in.get((Object)null); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Multimap;true;keySet;();;MapKey of Argument[-1];Element of ReturnValue;value" - SortedSet out = null; - AbstractSortedKeySortedSetMultimap in = (AbstractSortedKeySortedSetMultimap)newWithMapKey(source()); - out = in.keySet(); - sink(getElement(out)); // $hasValueFlow - } { // "com.google.common.collect;Multimap;true;keySet;();;MapKey of Argument[-1];Element of ReturnValue;value" Set out = null; @@ -6132,13 +5437,6 @@ public class Test { out = in.keySet(); sink(getElement(out)); // $hasValueFlow } - { - // "com.google.common.collect;Multimap;true;keySet;();;MapKey of Argument[-1];Element of ReturnValue;value" - Set out = null; - AbstractMultimap in = (AbstractMultimap)newWithMapKey(source()); - out = in.keySet(); - sink(getElement(out)); // $hasValueFlow - } { // "com.google.common.collect;Multimap;true;keySet;();;MapKey of Argument[-1];Element of ReturnValue;value" NavigableSet out = null; @@ -6160,13 +5458,6 @@ public class Test { out = in.keys(); sink(getElement(out)); // $hasValueFlow } - { - // "com.google.common.collect;Multimap;true;keys;();;MapKey of Argument[-1];Element of ReturnValue;value" - Multiset out = null; - AbstractMultimap in = (AbstractMultimap)newWithMapKey(source()); - out = in.keys(); - sink(getElement(out)); // $hasValueFlow - } { // "com.google.common.collect;Multimap;true;keys;();;MapKey of Argument[-1];Element of ReturnValue;value" ImmutableMultiset out = null; @@ -6209,62 +5500,6 @@ public class Test { out.put(in, (Object)null); sink(getMapKey(out)); // $hasValueFlow } - { - // "com.google.common.collect;Multimap;true;put;(Object,Object);;Argument[0];MapKey of Argument[-1];value" - AbstractSetMultimap out = null; - Object in = (Object)source(); - out.put(in, null); - sink(getMapKey(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Multimap;true;put;(Object,Object);;Argument[0];MapKey of Argument[-1];value" - AbstractSetMultimap out = null; - Object in = (Object)source(); - out.put(in, (Object)null); - sink(getMapKey(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Multimap;true;put;(Object,Object);;Argument[0];MapKey of Argument[-1];value" - AbstractMultimap out = null; - Object in = (Object)source(); - out.put(in, null); - sink(getMapKey(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Multimap;true;put;(Object,Object);;Argument[0];MapKey of Argument[-1];value" - AbstractMultimap out = null; - Object in = (Object)source(); - out.put(in, (Object)null); - sink(getMapKey(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Multimap;true;put;(Object,Object);;Argument[0];MapKey of Argument[-1];value" - AbstractMapBasedMultimap out = null; - Object in = (Object)source(); - out.put(in, null); - sink(getMapKey(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Multimap;true;put;(Object,Object);;Argument[0];MapKey of Argument[-1];value" - AbstractMapBasedMultimap out = null; - Object in = (Object)source(); - out.put(in, (Object)null); - sink(getMapKey(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Multimap;true;put;(Object,Object);;Argument[0];MapKey of Argument[-1];value" - AbstractListMultimap out = null; - Object in = (Object)source(); - out.put(in, null); - sink(getMapKey(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Multimap;true;put;(Object,Object);;Argument[0];MapKey of Argument[-1];value" - AbstractListMultimap out = null; - Object in = (Object)source(); - out.put(in, (Object)null); - sink(getMapKey(out)); // $hasValueFlow - } { // "com.google.common.collect;Multimap;true;put;(Object,Object);;Argument[1];MapValue of Argument[-1];value" Multimap out = null; @@ -6300,62 +5535,6 @@ public class Test { out.put((Object)null, in); sink(getMapValue(out)); // $hasValueFlow } - { - // "com.google.common.collect;Multimap;true;put;(Object,Object);;Argument[1];MapValue of Argument[-1];value" - AbstractSetMultimap out = null; - Object in = (Object)source(); - out.put(null, in); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Multimap;true;put;(Object,Object);;Argument[1];MapValue of Argument[-1];value" - AbstractSetMultimap out = null; - Object in = (Object)source(); - out.put((Object)null, in); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Multimap;true;put;(Object,Object);;Argument[1];MapValue of Argument[-1];value" - AbstractMultimap out = null; - Object in = (Object)source(); - out.put(null, in); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Multimap;true;put;(Object,Object);;Argument[1];MapValue of Argument[-1];value" - AbstractMultimap out = null; - Object in = (Object)source(); - out.put((Object)null, in); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Multimap;true;put;(Object,Object);;Argument[1];MapValue of Argument[-1];value" - AbstractMapBasedMultimap out = null; - Object in = (Object)source(); - out.put(null, in); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Multimap;true;put;(Object,Object);;Argument[1];MapValue of Argument[-1];value" - AbstractMapBasedMultimap out = null; - Object in = (Object)source(); - out.put((Object)null, in); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Multimap;true;put;(Object,Object);;Argument[1];MapValue of Argument[-1];value" - AbstractListMultimap out = null; - Object in = (Object)source(); - out.put(null, in); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Multimap;true;put;(Object,Object);;Argument[1];MapValue of Argument[-1];value" - AbstractListMultimap out = null; - Object in = (Object)source(); - out.put((Object)null, in); - sink(getMapValue(out)); // $hasValueFlow - } { // "com.google.common.collect;Multimap;true;putAll;(Multimap);;MapKey of Argument[0];MapKey of Argument[-1];value" Multimap out = null; @@ -6370,13 +5549,6 @@ public class Test { out.putAll(in); sink(getMapKey(out)); // $hasValueFlow } - { - // "com.google.common.collect;Multimap;true;putAll;(Multimap);;MapKey of Argument[0];MapKey of Argument[-1];value" - AbstractMultimap out = null; - Multimap in = (Multimap)newWithMapKey(source()); - out.putAll(in); - sink(getMapKey(out)); // $hasValueFlow - } { // "com.google.common.collect;Multimap;true;putAll;(Multimap);;MapValue of Argument[0];MapValue of Argument[-1];value" Multimap out = null; @@ -6391,13 +5563,6 @@ public class Test { out.putAll(in); sink(getMapValue(out)); // $hasValueFlow } - { - // "com.google.common.collect;Multimap;true;putAll;(Multimap);;MapValue of Argument[0];MapValue of Argument[-1];value" - AbstractMultimap out = null; - Multimap in = (Multimap)newWithMapValue(source()); - out.putAll(in); - sink(getMapValue(out)); // $hasValueFlow - } { // "com.google.common.collect;Multimap;true;putAll;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" Multimap out = null; @@ -6426,20 +5591,6 @@ public class Test { out.putAll(in, (Iterable)null); sink(getMapKey(out)); // $hasValueFlow } - { - // "com.google.common.collect;Multimap;true;putAll;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" - AbstractMultimap out = null; - Object in = (Object)source(); - out.putAll(in, null); - sink(getMapKey(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Multimap;true;putAll;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" - AbstractMultimap out = null; - Object in = (Object)source(); - out.putAll(in, (Iterable)null); - sink(getMapKey(out)); // $hasValueFlow - } { // "com.google.common.collect;Multimap;true;putAll;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" Multimap out = null; @@ -6468,20 +5619,6 @@ public class Test { out.putAll((Object)null, in); sink(getMapValue(out)); // $hasValueFlow } - { - // "com.google.common.collect;Multimap;true;putAll;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" - AbstractMultimap out = null; - Iterable in = (Iterable)newWithElement(source()); - out.putAll(null, in); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Multimap;true;putAll;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" - AbstractMultimap out = null; - Iterable in = (Iterable)newWithElement(source()); - out.putAll((Object)null, in); - sink(getMapValue(out)); // $hasValueFlow - } { // "com.google.common.collect;Multimap;true;removeAll;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" SortedSet out = null; @@ -6496,20 +5633,6 @@ public class Test { out = in.removeAll((Object)null); sink(getMapValue(out)); // $hasValueFlow } - { - // "com.google.common.collect;Multimap;true;removeAll;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" - SortedSet out = null; - AbstractSortedSetMultimap in = (AbstractSortedSetMultimap)newWithMapValue(source()); - out = in.removeAll(null); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Multimap;true;removeAll;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" - SortedSet out = null; - AbstractSortedSetMultimap in = (AbstractSortedSetMultimap)newWithMapValue(source()); - out = in.removeAll((Object)null); - sink(getMapValue(out)); // $hasValueFlow - } { // "com.google.common.collect;Multimap;true;removeAll;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" Set out = null; @@ -6524,20 +5647,6 @@ public class Test { out = in.removeAll((Object)null); sink(getMapValue(out)); // $hasValueFlow } - { - // "com.google.common.collect;Multimap;true;removeAll;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" - Set out = null; - AbstractSetMultimap in = (AbstractSetMultimap)newWithMapValue(source()); - out = in.removeAll(null); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Multimap;true;removeAll;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" - Set out = null; - AbstractSetMultimap in = (AbstractSetMultimap)newWithMapValue(source()); - out = in.removeAll((Object)null); - sink(getMapValue(out)); // $hasValueFlow - } { // "com.google.common.collect;Multimap;true;removeAll;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" List out = null; @@ -6559,20 +5668,6 @@ public class Test { out = in.removeAll(null); sink(getMapValue(out)); // $hasValueFlow } - { - // "com.google.common.collect;Multimap;true;removeAll;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" - List out = null; - AbstractListMultimap in = (AbstractListMultimap)newWithMapValue(source()); - out = in.removeAll(null); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Multimap;true;removeAll;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" - List out = null; - AbstractListMultimap in = (AbstractListMultimap)newWithMapValue(source()); - out = in.removeAll((Object)null); - sink(getMapValue(out)); // $hasValueFlow - } { // "com.google.common.collect;Multimap;true;removeAll;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" ImmutableSet out = null; @@ -6615,20 +5710,6 @@ public class Test { out = in.removeAll((Object)null); sink(getMapValue(out)); // $hasValueFlow } - { - // "com.google.common.collect;Multimap;true;removeAll;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" - Collection out = null; - AbstractMapBasedMultimap in = (AbstractMapBasedMultimap)newWithMapValue(source()); - out = in.removeAll(null); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Multimap;true;removeAll;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" - Collection out = null; - AbstractMapBasedMultimap in = (AbstractMapBasedMultimap)newWithMapValue(source()); - out = in.removeAll((Object)null); - sink(getMapValue(out)); // $hasValueFlow - } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" SortedSetMultimap out = null; @@ -6727,76 +5808,6 @@ public class Test { out.replaceValues(in, null); sink(getMapKey(out)); // $hasValueFlow } - { - // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" - AbstractSortedSetMultimap out = null; - Object in = (Object)source(); - out.replaceValues(in, null); - sink(getMapKey(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" - AbstractSortedSetMultimap out = null; - Object in = (Object)source(); - out.replaceValues(in, (Iterable)null); - sink(getMapKey(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" - AbstractSetMultimap out = null; - Object in = (Object)source(); - out.replaceValues(in, null); - sink(getMapKey(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" - AbstractSetMultimap out = null; - Object in = (Object)source(); - out.replaceValues(in, (Iterable)null); - sink(getMapKey(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" - AbstractMultimap out = null; - Object in = (Object)source(); - out.replaceValues(in, null); - sink(getMapKey(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" - AbstractMultimap out = null; - Object in = (Object)source(); - out.replaceValues(in, (Iterable)null); - sink(getMapKey(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" - AbstractMapBasedMultimap out = null; - Object in = (Object)source(); - out.replaceValues(in, null); - sink(getMapKey(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" - AbstractMapBasedMultimap out = null; - Object in = (Object)source(); - out.replaceValues(in, (Iterable)null); - sink(getMapKey(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" - AbstractListMultimap out = null; - Object in = (Object)source(); - out.replaceValues(in, null); - sink(getMapKey(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" - AbstractListMultimap out = null; - Object in = (Object)source(); - out.replaceValues(in, (Iterable)null); - sink(getMapKey(out)); // $hasValueFlow - } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" SortedSetMultimap out = null; @@ -6895,76 +5906,6 @@ public class Test { out.replaceValues(null, in); sink(getMapValue(out)); // $hasValueFlow } - { - // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" - AbstractSortedSetMultimap out = null; - Iterable in = (Iterable)newWithElement(source()); - out.replaceValues(null, in); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" - AbstractSortedSetMultimap out = null; - Iterable in = (Iterable)newWithElement(source()); - out.replaceValues((Object)null, in); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" - AbstractSetMultimap out = null; - Iterable in = (Iterable)newWithElement(source()); - out.replaceValues(null, in); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" - AbstractSetMultimap out = null; - Iterable in = (Iterable)newWithElement(source()); - out.replaceValues((Object)null, in); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" - AbstractMultimap out = null; - Iterable in = (Iterable)newWithElement(source()); - out.replaceValues(null, in); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" - AbstractMultimap out = null; - Iterable in = (Iterable)newWithElement(source()); - out.replaceValues((Object)null, in); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" - AbstractMapBasedMultimap out = null; - Iterable in = (Iterable)newWithElement(source()); - out.replaceValues(null, in); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" - AbstractMapBasedMultimap out = null; - Iterable in = (Iterable)newWithElement(source()); - out.replaceValues((Object)null, in); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" - AbstractListMultimap out = null; - Iterable in = (Iterable)newWithElement(source()); - out.replaceValues(null, in); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" - AbstractListMultimap out = null; - Iterable in = (Iterable)newWithElement(source()); - out.replaceValues((Object)null, in); - sink(getMapValue(out)); // $hasValueFlow - } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;MapValue of Argument[-1];Element of ReturnValue;value" SortedSet out = null; @@ -6979,20 +5920,6 @@ public class Test { out = in.replaceValues((Object)null, (Iterable)null); sink(getElement(out)); // $hasValueFlow } - { - // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;MapValue of Argument[-1];Element of ReturnValue;value" - SortedSet out = null; - AbstractSortedSetMultimap in = (AbstractSortedSetMultimap)newWithMapValue(source()); - out = in.replaceValues(null, null); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;MapValue of Argument[-1];Element of ReturnValue;value" - SortedSet out = null; - AbstractSortedSetMultimap in = (AbstractSortedSetMultimap)newWithMapValue(source()); - out = in.replaceValues((Object)null, (Iterable)null); - sink(getElement(out)); // $hasValueFlow - } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;MapValue of Argument[-1];Element of ReturnValue;value" Set out = null; @@ -7014,20 +5941,6 @@ public class Test { out = in.replaceValues(null, null); sink(getElement(out)); // $hasValueFlow } - { - // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;MapValue of Argument[-1];Element of ReturnValue;value" - Set out = null; - AbstractSetMultimap in = (AbstractSetMultimap)newWithMapValue(source()); - out = in.replaceValues(null, null); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;MapValue of Argument[-1];Element of ReturnValue;value" - Set out = null; - AbstractSetMultimap in = (AbstractSetMultimap)newWithMapValue(source()); - out = in.replaceValues((Object)null, (Iterable)null); - sink(getElement(out)); // $hasValueFlow - } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;MapValue of Argument[-1];Element of ReturnValue;value" List out = null; @@ -7049,20 +5962,6 @@ public class Test { out = in.replaceValues(null, null); sink(getElement(out)); // $hasValueFlow } - { - // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;MapValue of Argument[-1];Element of ReturnValue;value" - List out = null; - AbstractListMultimap in = (AbstractListMultimap)newWithMapValue(source()); - out = in.replaceValues(null, null); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;MapValue of Argument[-1];Element of ReturnValue;value" - List out = null; - AbstractListMultimap in = (AbstractListMultimap)newWithMapValue(source()); - out = in.replaceValues((Object)null, (Iterable)null); - sink(getElement(out)); // $hasValueFlow - } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;MapValue of Argument[-1];Element of ReturnValue;value" ImmutableSet out = null; @@ -7105,34 +6004,6 @@ public class Test { out = in.replaceValues((Object)null, (Iterable)null); sink(getElement(out)); // $hasValueFlow } - { - // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;MapValue of Argument[-1];Element of ReturnValue;value" - Collection out = null; - AbstractMultimap in = (AbstractMultimap)newWithMapValue(source()); - out = in.replaceValues(null, null); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;MapValue of Argument[-1];Element of ReturnValue;value" - Collection out = null; - AbstractMultimap in = (AbstractMultimap)newWithMapValue(source()); - out = in.replaceValues((Object)null, (Iterable)null); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;MapValue of Argument[-1];Element of ReturnValue;value" - Collection out = null; - AbstractMapBasedMultimap in = (AbstractMapBasedMultimap)newWithMapValue(source()); - out = in.replaceValues(null, null); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;MapValue of Argument[-1];Element of ReturnValue;value" - Collection out = null; - AbstractMapBasedMultimap in = (AbstractMapBasedMultimap)newWithMapValue(source()); - out = in.replaceValues((Object)null, (Iterable)null); - sink(getElement(out)); // $hasValueFlow - } { // "com.google.common.collect;Multimap;true;values;();;MapValue of Argument[-1];Element of ReturnValue;value" List out = null; @@ -7161,27 +6032,6 @@ public class Test { out = in.values(); sink(getElement(out)); // $hasValueFlow } - { - // "com.google.common.collect;Multimap;true;values;();;MapValue of Argument[-1];Element of ReturnValue;value" - Collection out = null; - AbstractSortedSetMultimap in = (AbstractSortedSetMultimap)newWithMapValue(source()); - out = in.values(); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Multimap;true;values;();;MapValue of Argument[-1];Element of ReturnValue;value" - Collection out = null; - AbstractMultimap in = (AbstractMultimap)newWithMapValue(source()); - out = in.values(); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Multimap;true;values;();;MapValue of Argument[-1];Element of ReturnValue;value" - Collection out = null; - AbstractMapBasedMultimap in = (AbstractMapBasedMultimap)newWithMapValue(source()); - out = in.values(); - sink(getElement(out)); // $hasValueFlow - } { // "com.google.common.collect;Multimaps;false;asMap;(ListMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value" Map out = null; @@ -7623,27 +6473,6 @@ public class Test { out.add(in, 0); sink(getElement(out)); // $hasValueFlow } - { - // "com.google.common.collect;Multiset;true;add;(Object,int);;Argument[0];Element of Argument[-1];value" - AbstractMultiset out = null; - Object in = (Object)source(); - out.add(in, 0); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Multiset;true;add;(Object,int);;Argument[0];Element of Argument[-1];value" - AbstractMapBasedMultiset out = null; - Object in = (Object)source(); - out.add(in, 0); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Multiset;true;elementSet;();;Element of Argument[-1];Element of ReturnValue;value" - SortedSet out = null; - SortedMultisetBridge in = (SortedMultisetBridge)newWithElement(source()); - out = in.elementSet(); - sink(getElement(out)); // $hasValueFlow - } { // "com.google.common.collect;Multiset;true;elementSet;();;Element of Argument[-1];Element of ReturnValue;value" Set out = null; @@ -7651,27 +6480,6 @@ public class Test { out = in.elementSet(); sink(getElement(out)); // $hasValueFlow } - { - // "com.google.common.collect;Multiset;true;elementSet;();;Element of Argument[-1];Element of ReturnValue;value" - Set out = null; - AbstractMultiset in = (AbstractMultiset)newWithElement(source()); - out = in.elementSet(); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Multiset;true;elementSet;();;Element of Argument[-1];Element of ReturnValue;value" - NavigableSet out = null; - SortedMultiset in = (SortedMultiset)newWithElement(source()); - out = in.elementSet(); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Multiset;true;elementSet;();;Element of Argument[-1];Element of ReturnValue;value" - NavigableSet out = null; - AbstractSortedMultiset in = (AbstractSortedMultiset)newWithElement(source()); - out = in.elementSet(); - sink(getElement(out)); // $hasValueFlow - } { // "com.google.common.collect;Multiset;true;elementSet;();;Element of Argument[-1];Element of ReturnValue;value" ImmutableSortedSet out = null; @@ -7700,20 +6508,6 @@ public class Test { out = in.entrySet(); sink(getElement(getElement(out))); // $hasValueFlow } - { - // "com.google.common.collect;Multiset;true;entrySet;();;Element of Argument[-1];Element of Element of ReturnValue;value" - Set out = null; - AbstractMultiset in = (AbstractMultiset)newWithElement(source()); - out = in.entrySet(); - sink(getElement(getElement(out))); // $hasValueFlow - } - { - // "com.google.common.collect;Multiset;true;entrySet;();;Element of Argument[-1];Element of Element of ReturnValue;value" - Set out = null; - AbstractMapBasedMultiset in = (AbstractMapBasedMultiset)newWithElement(source()); - out = in.entrySet(); - sink(getElement(getElement(out))); // $hasValueFlow - } { // "com.google.common.collect;Multiset;true;entrySet;();;Element of Argument[-1];Element of Element of ReturnValue;value" ImmutableSet out = null; @@ -7749,20 +6543,6 @@ public class Test { out.setCount(in, 0); sink(getElement(out)); // $hasValueFlow } - { - // "com.google.common.collect;Multiset;true;setCount;(Object,int);;Argument[0];Element of Argument[-1];value" - AbstractMultiset out = null; - Object in = (Object)source(); - out.setCount(in, 0); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Multiset;true;setCount;(Object,int);;Argument[0];Element of Argument[-1];value" - AbstractMapBasedMultiset out = null; - Object in = (Object)source(); - out.setCount(in, 0); - sink(getElement(out)); // $hasValueFlow - } { // "com.google.common.collect;Multiset;true;setCount;(Object,int,int);;Argument[0];Element of Argument[-1];value" TreeMultiset out = null; @@ -7791,13 +6571,6 @@ public class Test { out.setCount(in, 0, 0); sink(getElement(out)); // $hasValueFlow } - { - // "com.google.common.collect;Multiset;true;setCount;(Object,int,int);;Argument[0];Element of Argument[-1];value" - AbstractMultiset out = null; - Object in = (Object)source(); - out.setCount(in, 0, 0); - sink(getElement(out)); // $hasValueFlow - } { // "com.google.common.collect;Multisets;false;copyHighestCountFirst;(Multiset);;Element of Argument[0];Element of ReturnValue;value" ImmutableMultiset out = null; @@ -7983,7 +6756,7 @@ public class Test { { // "com.google.common.collect;Sets;false;cartesianProduct;(Set[]);;Element of ArrayElement of Argument[0];Element of Element of ReturnValue;value" Set out = null; - Set[] in = (Set[])newWithArrayElement(newWithElement(source())); + Set[] in = (Set[])newWithArrayElement(newWithElement(source())); out = Sets.cartesianProduct(in); sink(getElement(getElement(out))); // $hasValueFlow } @@ -8141,13 +6914,6 @@ public class Test { out = in.cellSet(); sink(getMapKey(getElement(out))); // $hasValueFlow } - { - // "com.google.common.collect;Table;true;cellSet;();;MapKey of Argument[-1];MapKey of Element of ReturnValue;value" - Set out = null; - StandardTable in = (StandardTable)newWithMapKey(source()); - out = in.cellSet(); - sink(getMapKey(getElement(out))); // $hasValueFlow - } { // "com.google.common.collect;Table;true;cellSet;();;MapKey of Argument[-1];MapKey of Element of ReturnValue;value" Set out = null; @@ -8155,13 +6921,6 @@ public class Test { out = in.cellSet(); sink(getMapKey(getElement(out))); // $hasValueFlow } - { - // "com.google.common.collect;Table;true;cellSet;();;MapKey of Argument[-1];MapKey of Element of ReturnValue;value" - Set out = null; - AbstractTable in = (AbstractTable)newWithMapKey(source()); - out = in.cellSet(); - sink(getMapKey(getElement(out))); // $hasValueFlow - } { // "com.google.common.collect;Table;true;cellSet;();;MapKey of Argument[-1];MapKey of Element of ReturnValue;value" ImmutableSet out = null; @@ -8176,13 +6935,6 @@ public class Test { out = in.cellSet(); sink(getMapValue(getElement(out))); // $hasValueFlow } - { - // "com.google.common.collect;Table;true;cellSet;();;MapValue of Argument[-1];MapValue of Element of ReturnValue;value" - Set out = null; - StandardTable in = (StandardTable)newWithMapValue(source()); - out = in.cellSet(); - sink(getMapValue(getElement(out))); // $hasValueFlow - } { // "com.google.common.collect;Table;true;cellSet;();;MapValue of Argument[-1];MapValue of Element of ReturnValue;value" Set out = null; @@ -8190,13 +6942,6 @@ public class Test { out = in.cellSet(); sink(getMapValue(getElement(out))); // $hasValueFlow } - { - // "com.google.common.collect;Table;true;cellSet;();;MapValue of Argument[-1];MapValue of Element of ReturnValue;value" - Set out = null; - AbstractTable in = (AbstractTable)newWithMapValue(source()); - out = in.cellSet(); - sink(getMapValue(getElement(out))); // $hasValueFlow - } { // "com.google.common.collect;Table;true;cellSet;();;MapValue of Argument[-1];MapValue of Element of ReturnValue;value" ImmutableSet out = null; @@ -8218,20 +6963,6 @@ public class Test { out = in.column((Object)null); sink(getMapValue(out)); // $hasValueFlow } - { - // "com.google.common.collect;Table;true;column;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" - Map out = null; - StandardTable in = (StandardTable)newWithMapValue(source()); - out = in.column(null); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Table;true;column;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" - Map out = null; - StandardTable in = (StandardTable)newWithMapValue(source()); - out = in.column((Object)null); - sink(getMapValue(out)); // $hasValueFlow - } { // "com.google.common.collect;Table;true;column;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" Map out = null; @@ -8253,13 +6984,6 @@ public class Test { out = in.columnMap(); sink(getMapValue(getMapValue(out))); // $hasValueFlow } - { - // "com.google.common.collect;Table;true;columnMap;();;MapValue of Argument[-1];MapValue of MapValue of ReturnValue;value" - Map out = null; - StandardTable in = (StandardTable)newWithMapValue(source()); - out = in.columnMap(); - sink(getMapValue(getMapValue(out))); // $hasValueFlow - } { // "com.google.common.collect;Table;true;columnMap;();;MapValue of Argument[-1];MapValue of MapValue of ReturnValue;value" Map out = null; @@ -8288,20 +7012,6 @@ public class Test { out = in.get((Object)null, (Object)null); sink(out); // $hasValueFlow } - { - // "com.google.common.collect;Table;true;get;(Object,Object);;MapValue of Argument[-1];ReturnValue;value" - Object out = null; - StandardTable in = (StandardTable)newWithMapValue(source()); - out = in.get(null, null); - sink(out); // $hasValueFlow - } - { - // "com.google.common.collect;Table;true;get;(Object,Object);;MapValue of Argument[-1];ReturnValue;value" - Object out = null; - StandardTable in = (StandardTable)newWithMapValue(source()); - out = in.get((Object)null, (Object)null); - sink(out); // $hasValueFlow - } { // "com.google.common.collect;Table;true;get;(Object,Object);;MapValue of Argument[-1];ReturnValue;value" Object out = null; @@ -8316,20 +7026,6 @@ public class Test { out = in.get(null, null); sink(out); // $hasValueFlow } - { - // "com.google.common.collect;Table;true;get;(Object,Object);;MapValue of Argument[-1];ReturnValue;value" - Object out = null; - AbstractTable in = (AbstractTable)newWithMapValue(source()); - out = in.get(null, null); - sink(out); // $hasValueFlow - } - { - // "com.google.common.collect;Table;true;get;(Object,Object);;MapValue of Argument[-1];ReturnValue;value" - Object out = null; - AbstractTable in = (AbstractTable)newWithMapValue(source()); - out = in.get((Object)null, (Object)null); - sink(out); // $hasValueFlow - } { // "com.google.common.collect;Table;true;put;(Object,Object,Object);;Argument[2];MapValue of Argument[-1];value" Table out = null; @@ -8344,20 +7040,6 @@ public class Test { out.put((Object)null, (Object)null, in); sink(getMapValue(out)); // $hasValueFlow } - { - // "com.google.common.collect;Table;true;put;(Object,Object,Object);;Argument[2];MapValue of Argument[-1];value" - StandardTable out = null; - Object in = (Object)source(); - out.put(null, null, in); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Table;true;put;(Object,Object,Object);;Argument[2];MapValue of Argument[-1];value" - StandardTable out = null; - Object in = (Object)source(); - out.put((Object)null, (Object)null, in); - sink(getMapValue(out)); // $hasValueFlow - } { // "com.google.common.collect;Table;true;put;(Object,Object,Object);;Argument[2];MapValue of Argument[-1];value" ImmutableTable out = null; @@ -8372,20 +7054,6 @@ public class Test { out.put(null, null, in); sink(getMapValue(out)); // $hasValueFlow } - { - // "com.google.common.collect;Table;true;put;(Object,Object,Object);;Argument[2];MapValue of Argument[-1];value" - AbstractTable out = null; - Object in = (Object)source(); - out.put(null, null, in); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Table;true;put;(Object,Object,Object);;Argument[2];MapValue of Argument[-1];value" - AbstractTable out = null; - Object in = (Object)source(); - out.put((Object)null, (Object)null, in); - sink(getMapValue(out)); // $hasValueFlow - } { // "com.google.common.collect;Table;true;putAll;(Table);;MapKey of Argument[0];MapKey of Argument[-1];value" Table out = null; @@ -8407,13 +7075,6 @@ public class Test { out.putAll(in); sink(getMapKey(out)); // $hasValueFlow } - { - // "com.google.common.collect;Table;true;putAll;(Table);;MapKey of Argument[0];MapKey of Argument[-1];value" - AbstractTable out = null; - Table in = (Table)newWithMapKey(source()); - out.putAll(in); - sink(getMapKey(out)); // $hasValueFlow - } { // "com.google.common.collect;Table;true;putAll;(Table);;MapValue of Argument[0];MapValue of Argument[-1];value" Table out = null; @@ -8435,13 +7096,6 @@ public class Test { out.putAll(in); sink(getMapValue(out)); // $hasValueFlow } - { - // "com.google.common.collect;Table;true;putAll;(Table);;MapValue of Argument[0];MapValue of Argument[-1];value" - AbstractTable out = null; - Table in = (Table)newWithMapValue(source()); - out.putAll(in); - sink(getMapValue(out)); // $hasValueFlow - } { // "com.google.common.collect;Table;true;remove;(Object,Object);;MapValue of Argument[-1];ReturnValue;value" Object out = null; @@ -8456,20 +7110,6 @@ public class Test { out = in.remove((Object)null, (Object)null); sink(out); // $hasValueFlow } - { - // "com.google.common.collect;Table;true;remove;(Object,Object);;MapValue of Argument[-1];ReturnValue;value" - Object out = null; - StandardTable in = (StandardTable)newWithMapValue(source()); - out = in.remove(null, null); - sink(out); // $hasValueFlow - } - { - // "com.google.common.collect;Table;true;remove;(Object,Object);;MapValue of Argument[-1];ReturnValue;value" - Object out = null; - StandardTable in = (StandardTable)newWithMapValue(source()); - out = in.remove((Object)null, (Object)null); - sink(out); // $hasValueFlow - } { // "com.google.common.collect;Table;true;remove;(Object,Object);;MapValue of Argument[-1];ReturnValue;value" Object out = null; @@ -8491,20 +7131,6 @@ public class Test { out = in.remove(null, null); sink(out); // $hasValueFlow } - { - // "com.google.common.collect;Table;true;remove;(Object,Object);;MapValue of Argument[-1];ReturnValue;value" - Object out = null; - AbstractTable in = (AbstractTable)newWithMapValue(source()); - out = in.remove(null, null); - sink(out); // $hasValueFlow - } - { - // "com.google.common.collect;Table;true;remove;(Object,Object);;MapValue of Argument[-1];ReturnValue;value" - Object out = null; - AbstractTable in = (AbstractTable)newWithMapValue(source()); - out = in.remove((Object)null, (Object)null); - sink(out); // $hasValueFlow - } { // "com.google.common.collect;Table;true;row;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" SortedMap out = null; @@ -8526,20 +7152,6 @@ public class Test { out = in.row((Object)null); sink(getMapValue(out)); // $hasValueFlow } - { - // "com.google.common.collect;Table;true;row;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" - Map out = null; - StandardTable in = (StandardTable)newWithMapValue(source()); - out = in.row(null); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Table;true;row;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" - Map out = null; - StandardTable in = (StandardTable)newWithMapValue(source()); - out = in.row((Object)null); - sink(getMapValue(out)); // $hasValueFlow - } { // "com.google.common.collect;Table;true;row;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" Map out = null; @@ -8561,13 +7173,6 @@ public class Test { out = in.rowMap(); sink(getMapValue(getMapValue(out))); // $hasValueFlow } - { - // "com.google.common.collect;Table;true;rowMap;();;MapValue of Argument[-1];MapValue of MapValue of ReturnValue;value" - SortedMap out = null; - StandardRowSortedTable in = (StandardRowSortedTable)newWithMapValue(source()); - out = in.rowMap(); - sink(getMapValue(getMapValue(out))); // $hasValueFlow - } { // "com.google.common.collect;Table;true;rowMap;();;MapValue of Argument[-1];MapValue of MapValue of ReturnValue;value" SortedMap out = null; @@ -8582,13 +7187,6 @@ public class Test { out = in.rowMap(); sink(getMapValue(getMapValue(out))); // $hasValueFlow } - { - // "com.google.common.collect;Table;true;rowMap;();;MapValue of Argument[-1];MapValue of MapValue of ReturnValue;value" - Map out = null; - StandardTable in = (StandardTable)newWithMapValue(source()); - out = in.rowMap(); - sink(getMapValue(getMapValue(out))); // $hasValueFlow - } { // "com.google.common.collect;Table;true;rowMap;();;MapValue of Argument[-1];MapValue of MapValue of ReturnValue;value" Map out = null; @@ -8617,13 +7215,6 @@ public class Test { out = in.values(); sink(getElement(out)); // $hasValueFlow } - { - // "com.google.common.collect;Table;true;values;();;MapValue of Argument[-1];Element of ReturnValue;value" - Collection out = null; - StandardTable in = (StandardTable)newWithMapValue(source()); - out = in.values(); - sink(getElement(out)); // $hasValueFlow - } { // "com.google.common.collect;Table;true;values;();;MapValue of Argument[-1];Element of ReturnValue;value" Collection out = null; @@ -8631,13 +7222,6 @@ public class Test { out = in.values(); sink(getElement(out)); // $hasValueFlow } - { - // "com.google.common.collect;Table;true;values;();;MapValue of Argument[-1];Element of ReturnValue;value" - Collection out = null; - AbstractTable in = (AbstractTable)newWithMapValue(source()); - out = in.values(); - sink(getElement(out)); // $hasValueFlow - } { // "com.google.common.collect;Tables;false;immutableCell;(Object,Object,Object);;Argument[2];MapValue of ReturnValue;value" Table.Cell out = null; From 6ae11b5b2c8efcdbc58de1896cbdaf36cf678285 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Wed, 14 Jul 2021 16:32:45 +0100 Subject: [PATCH 475/741] Generate stubs. Some generated stubs were manually adjusted due to minor issues in the stub generator. In particular, ambiguous references were resolved and references to private classes were removed. --- .../frameworks/guava/generated/Test.java | 2 +- .../frameworks/guava/generated/options | 1 + .../com/google/common/base/Converter.java | 69 ++----- .../com/google/common/base/Equivalence.java | 32 ++++ .../com/google/common/base/Optional.java | 96 +++------- .../common/collect/AbstractListMultimap.java | 25 +++ .../collect/AbstractMapBasedMultimap.java | 79 ++++++++ .../collect/AbstractMapBasedMultiset.java | 31 +++ .../common/collect/AbstractMultimap.java | 1 + .../common/collect/AbstractMultiset.java | 36 ++++ .../common/collect/AbstractSetMultimap.java | 26 +++ .../AbstractSortedKeySortedSetMultimap.java | 19 ++ .../collect/AbstractSortedMultiset.java | 30 +++ .../collect/AbstractSortedSetMultimap.java | 24 +++ .../google/common/collect/AbstractTable.java | 113 +++-------- .../common/collect/ArrayListMultimap.java | 18 ++ ...tMultimapGwtSerializationDependencies.java | 13 ++ .../com/google/common/collect/ArrayTable.java | 51 +++++ .../com/google/common/collect/BiMap.java | 15 ++ .../com/google/common/collect/BoundType.java | 13 ++ .../common/collect/ClassToInstanceMap.java | 11 ++ .../google/common/collect/Collections2.java | 24 +++ .../collect/ConcurrentHashMultiset.java | 37 ++++ .../com/google/common/collect/Count.java | 19 ++ .../com/google/common/collect/Cut.java | 32 ++++ .../google/common/collect/DiscreteDomain.java | 20 ++ .../google/common/collect/ForwardingMap.java | 37 ++++ .../common/collect/ForwardingObject.java | 11 ++ .../google/common/collect/GeneralRange.java | 34 ++++ .../google/common/collect/HashBasedTable.java | 24 +++ .../com/google/common/collect/HashBiMap.java | 34 ++++ .../google/common/collect/HashMultimap.java | 17 ++ ...hMultimapGwtSerializationDependencies.java | 13 ++ .../google/common/collect/HashMultiset.java | 13 ++ .../collect/ImmutableClassToInstanceMap.java | 28 +++ .../google/common/collect/ImmutableList.java | 10 + .../common/collect/ImmutableListMultimap.java | 51 +++++ .../common/collect/ImmutableSortedMap.java | 177 ++++++++---------- .../ImmutableSortedMapFauxverideShim.java | 23 +++ .../collect/ImmutableSortedMultiset.java | 61 ++++++ ...ImmutableSortedMultisetFauxverideShim.java | 24 +++ .../common/collect/ImmutableSortedSet.java | 174 ++++++++--------- .../ImmutableSortedSetFauxverideShim.java | 22 +++ .../google/common/collect/ImmutableTable.java | 177 ++++++------------ .../com/google/common/collect/Iterables.java | 63 +++++++ .../com/google/common/collect/Iterators.java | 77 ++++++++ .../common/collect/LinkedHashMultimap.java | 32 ++++ ...hMultimapGwtSerializationDependencies.java | 13 ++ .../common/collect/LinkedHashMultiset.java | 13 ++ .../common/collect/LinkedListMultimap.java | 39 ++++ .../google/common/collect/ListMultimap.java | 17 ++ .../com/google/common/collect/Lists.java | 45 +++++ .../google/common/collect/MapDifference.java | 23 +++ .../com/google/common/collect/Maps.java | 136 ++++++++++++++ .../com/google/common/collect/Multimaps.java | 65 +++++++ .../com/google/common/collect/Multisets.java | 47 +++++ .../collect/MutableClassToInstanceMap.java | 22 +++ .../com/google/common/collect/Ordering.java | 51 +++++ .../common/collect/PeekingIterator.java | 12 ++ .../com/google/common/collect/Queues.java | 45 +++++ .../com/google/common/collect/Range.java | 58 ++++++ .../RangeGwtSerializationDependencies.java | 10 + .../collect/RegularImmutableSortedSet.java | 47 +++++ .../google/common/collect/RowSortedTable.java | 14 ++ .../com/google/common/collect/Sets.java | 152 +++++++-------- .../google/common/collect/SortedIterable.java | 12 ++ .../common/collect/SortedMapDifference.java | 14 ++ .../google/common/collect/SortedMultiset.java | 28 +++ .../common/collect/SortedMultisetBridge.java | 11 ++ .../common/collect/SortedSetMultimap.java | 18 ++ .../collect/StandardRowSortedTable.java | 19 ++ .../google/common/collect/StandardTable.java | 43 +++++ .../com/google/common/collect/Table.java | 93 ++++----- .../com/google/common/collect/Tables.java | 26 +++ .../google/common/collect/TreeBasedTable.java | 25 +++ .../google/common/collect/TreeMultimap.java | 29 +++ .../google/common/collect/TreeMultiset.java | 37 ++++ 77 files changed, 2444 insertions(+), 659 deletions(-) create mode 100644 java/ql/test/library-tests/frameworks/guava/generated/options create mode 100644 java/ql/test/stubs/guava-30.0/com/google/common/base/Equivalence.java create mode 100644 java/ql/test/stubs/guava-30.0/com/google/common/collect/AbstractListMultimap.java create mode 100644 java/ql/test/stubs/guava-30.0/com/google/common/collect/AbstractMapBasedMultimap.java create mode 100644 java/ql/test/stubs/guava-30.0/com/google/common/collect/AbstractMapBasedMultiset.java create mode 100644 java/ql/test/stubs/guava-30.0/com/google/common/collect/AbstractMultiset.java create mode 100644 java/ql/test/stubs/guava-30.0/com/google/common/collect/AbstractSetMultimap.java create mode 100644 java/ql/test/stubs/guava-30.0/com/google/common/collect/AbstractSortedKeySortedSetMultimap.java create mode 100644 java/ql/test/stubs/guava-30.0/com/google/common/collect/AbstractSortedMultiset.java create mode 100644 java/ql/test/stubs/guava-30.0/com/google/common/collect/AbstractSortedSetMultimap.java create mode 100644 java/ql/test/stubs/guava-30.0/com/google/common/collect/ArrayListMultimap.java create mode 100644 java/ql/test/stubs/guava-30.0/com/google/common/collect/ArrayListMultimapGwtSerializationDependencies.java create mode 100644 java/ql/test/stubs/guava-30.0/com/google/common/collect/ArrayTable.java create mode 100644 java/ql/test/stubs/guava-30.0/com/google/common/collect/BiMap.java create mode 100644 java/ql/test/stubs/guava-30.0/com/google/common/collect/BoundType.java create mode 100644 java/ql/test/stubs/guava-30.0/com/google/common/collect/ClassToInstanceMap.java create mode 100644 java/ql/test/stubs/guava-30.0/com/google/common/collect/Collections2.java create mode 100644 java/ql/test/stubs/guava-30.0/com/google/common/collect/ConcurrentHashMultiset.java create mode 100644 java/ql/test/stubs/guava-30.0/com/google/common/collect/Count.java create mode 100644 java/ql/test/stubs/guava-30.0/com/google/common/collect/Cut.java create mode 100644 java/ql/test/stubs/guava-30.0/com/google/common/collect/DiscreteDomain.java create mode 100644 java/ql/test/stubs/guava-30.0/com/google/common/collect/ForwardingMap.java create mode 100644 java/ql/test/stubs/guava-30.0/com/google/common/collect/ForwardingObject.java create mode 100644 java/ql/test/stubs/guava-30.0/com/google/common/collect/GeneralRange.java create mode 100644 java/ql/test/stubs/guava-30.0/com/google/common/collect/HashBasedTable.java create mode 100644 java/ql/test/stubs/guava-30.0/com/google/common/collect/HashBiMap.java create mode 100644 java/ql/test/stubs/guava-30.0/com/google/common/collect/HashMultimap.java create mode 100644 java/ql/test/stubs/guava-30.0/com/google/common/collect/HashMultimapGwtSerializationDependencies.java create mode 100644 java/ql/test/stubs/guava-30.0/com/google/common/collect/HashMultiset.java create mode 100644 java/ql/test/stubs/guava-30.0/com/google/common/collect/ImmutableClassToInstanceMap.java create mode 100644 java/ql/test/stubs/guava-30.0/com/google/common/collect/ImmutableListMultimap.java create mode 100644 java/ql/test/stubs/guava-30.0/com/google/common/collect/ImmutableSortedMapFauxverideShim.java create mode 100644 java/ql/test/stubs/guava-30.0/com/google/common/collect/ImmutableSortedMultiset.java create mode 100644 java/ql/test/stubs/guava-30.0/com/google/common/collect/ImmutableSortedMultisetFauxverideShim.java create mode 100644 java/ql/test/stubs/guava-30.0/com/google/common/collect/ImmutableSortedSetFauxverideShim.java create mode 100644 java/ql/test/stubs/guava-30.0/com/google/common/collect/Iterables.java create mode 100644 java/ql/test/stubs/guava-30.0/com/google/common/collect/Iterators.java create mode 100644 java/ql/test/stubs/guava-30.0/com/google/common/collect/LinkedHashMultimap.java create mode 100644 java/ql/test/stubs/guava-30.0/com/google/common/collect/LinkedHashMultimapGwtSerializationDependencies.java create mode 100644 java/ql/test/stubs/guava-30.0/com/google/common/collect/LinkedHashMultiset.java create mode 100644 java/ql/test/stubs/guava-30.0/com/google/common/collect/LinkedListMultimap.java create mode 100644 java/ql/test/stubs/guava-30.0/com/google/common/collect/ListMultimap.java create mode 100644 java/ql/test/stubs/guava-30.0/com/google/common/collect/Lists.java create mode 100644 java/ql/test/stubs/guava-30.0/com/google/common/collect/MapDifference.java create mode 100644 java/ql/test/stubs/guava-30.0/com/google/common/collect/Maps.java create mode 100644 java/ql/test/stubs/guava-30.0/com/google/common/collect/Multimaps.java create mode 100644 java/ql/test/stubs/guava-30.0/com/google/common/collect/Multisets.java create mode 100644 java/ql/test/stubs/guava-30.0/com/google/common/collect/MutableClassToInstanceMap.java create mode 100644 java/ql/test/stubs/guava-30.0/com/google/common/collect/Ordering.java create mode 100644 java/ql/test/stubs/guava-30.0/com/google/common/collect/PeekingIterator.java create mode 100644 java/ql/test/stubs/guava-30.0/com/google/common/collect/Queues.java create mode 100644 java/ql/test/stubs/guava-30.0/com/google/common/collect/Range.java create mode 100644 java/ql/test/stubs/guava-30.0/com/google/common/collect/RangeGwtSerializationDependencies.java create mode 100644 java/ql/test/stubs/guava-30.0/com/google/common/collect/RegularImmutableSortedSet.java create mode 100644 java/ql/test/stubs/guava-30.0/com/google/common/collect/RowSortedTable.java create mode 100644 java/ql/test/stubs/guava-30.0/com/google/common/collect/SortedIterable.java create mode 100644 java/ql/test/stubs/guava-30.0/com/google/common/collect/SortedMapDifference.java create mode 100644 java/ql/test/stubs/guava-30.0/com/google/common/collect/SortedMultiset.java create mode 100644 java/ql/test/stubs/guava-30.0/com/google/common/collect/SortedMultisetBridge.java create mode 100644 java/ql/test/stubs/guava-30.0/com/google/common/collect/SortedSetMultimap.java create mode 100644 java/ql/test/stubs/guava-30.0/com/google/common/collect/StandardRowSortedTable.java create mode 100644 java/ql/test/stubs/guava-30.0/com/google/common/collect/StandardTable.java create mode 100644 java/ql/test/stubs/guava-30.0/com/google/common/collect/Tables.java create mode 100644 java/ql/test/stubs/guava-30.0/com/google/common/collect/TreeBasedTable.java create mode 100644 java/ql/test/stubs/guava-30.0/com/google/common/collect/TreeMultimap.java create mode 100644 java/ql/test/stubs/guava-30.0/com/google/common/collect/TreeMultiset.java diff --git a/java/ql/test/library-tests/frameworks/guava/generated/Test.java b/java/ql/test/library-tests/frameworks/guava/generated/Test.java index b5820ca7605..05b35aab6c7 100644 --- a/java/ql/test/library-tests/frameworks/guava/generated/Test.java +++ b/java/ql/test/library-tests/frameworks/guava/generated/Test.java @@ -40,7 +40,7 @@ import com.google.common.collect.Multimaps; import com.google.common.collect.Multiset; import com.google.common.collect.Multisets; import com.google.common.collect.MutableClassToInstanceMap; -import com.google.common.collect.ObjectArrays; +//import com.google.common.collect.ObjectArrays; import com.google.common.collect.PeekingIterator; import com.google.common.collect.Queues; import com.google.common.collect.RowSortedTable; diff --git a/java/ql/test/library-tests/frameworks/guava/generated/options b/java/ql/test/library-tests/frameworks/guava/generated/options new file mode 100644 index 00000000000..9d76421d185 --- /dev/null +++ b/java/ql/test/library-tests/frameworks/guava/generated/options @@ -0,0 +1 @@ +//semmle-extractor-options: --javac-args -cp ${testdir}/../../../../stubs/guava-30.0 \ No newline at end of file diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/base/Converter.java b/java/ql/test/stubs/guava-30.0/com/google/common/base/Converter.java index d4e59f3ff91..2ff5d6b7f4f 100644 --- a/java/ql/test/stubs/guava-30.0/com/google/common/base/Converter.java +++ b/java/ql/test/stubs/guava-30.0/com/google/common/base/Converter.java @@ -1,55 +1,24 @@ -/* - * Copyright (C) 2008 The Guava Authors - * - * 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. - */ +// Generated automatically from com.google.common.base.Converter for testing purposes package com.google.common.base; -import org.checkerframework.checker.nullness.qual.Nullable; -public abstract class Converter implements Function { - public final @Nullable B convert(@Nullable A a) { - return null; - } - - public Iterable convertAll(final Iterable fromIterable) { - return null; - } - - public Converter reverse() { - return null; - } - - public final Converter andThen(Converter secondConverter) { - return null; - } - - @Override - public final @Nullable B apply(@Nullable A a) { - return null; - } - - @Override - public boolean equals(@Nullable Object object) { - return false; - } - - public static Converter from( - Function forwardFunction, - Function backwardFunction) { - return null; - } - - public static Converter identity() { - return null; - } +import com.google.common.base.Function; +abstract public class Converter implements Function +{ + Converter doAndThen(Converter p0){ return null; } + A correctedDoBackward(B p0){ return null; } + B correctedDoForward(A p0){ return null; } + Converter(boolean p0){} + protected Converter(){} + protected abstract A doBackward(B p0); + protected abstract B doForward(A p0); + public Converter reverse(){ return null; } + public Iterable convertAll(Iterable p0){ return null; } + public boolean equals(Object p0){ return false; } + public final Converter andThen(Converter p0){ return null; } + public final B apply(A p0){ return null; } + public final B convert(A p0){ return null; } + public static Converter from(Function p0, Function p1){ return null; } + public static Converter identity(){ return null; } } diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/base/Equivalence.java b/java/ql/test/stubs/guava-30.0/com/google/common/base/Equivalence.java new file mode 100644 index 00000000000..f3fe531bf93 --- /dev/null +++ b/java/ql/test/stubs/guava-30.0/com/google/common/base/Equivalence.java @@ -0,0 +1,32 @@ +// Generated automatically from com.google.common.base.Equivalence for testing purposes + +package com.google.common.base; + +import com.google.common.base.Function; +import com.google.common.base.Predicate; +import java.io.Serializable; +import java.util.function.BiPredicate; + +abstract public class Equivalence implements BiPredicate +{ + protected Equivalence(){} + protected abstract boolean doEquivalent(T p0, T p1); + protected abstract int doHash(T p0); + public final Equivalence onResultOf(Function p0){ return null; } + public final Equivalence.Wrapper wrap(S p0){ return null; } + public final Equivalence> pairwise(){ return null; } + public final Predicate equivalentTo(T p0){ return null; } + public final boolean equivalent(T p0, T p1){ return false; } + public final boolean test(T p0, T p1){ return false; } + public final int hash(T p0){ return 0; } + public static Equivalence equals(){ return null; } + public static Equivalence identity(){ return null; } + static public class Wrapper implements Serializable + { + protected Wrapper() {} + public String toString(){ return null; } + public T get(){ return null; } + public boolean equals(Object p0){ return false; } + public int hashCode(){ return 0; } + } +} diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/base/Optional.java b/java/ql/test/stubs/guava-30.0/com/google/common/base/Optional.java index 3f39995651a..7228faa03ab 100644 --- a/java/ql/test/stubs/guava-30.0/com/google/common/base/Optional.java +++ b/java/ql/test/stubs/guava-30.0/com/google/common/base/Optional.java @@ -1,77 +1,31 @@ -/* - * Copyright (C) 2011 The Guava Authors - * - * 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. - */ +// Generated automatically from com.google.common.base.Optional for testing purposes, and manually adjusted. package com.google.common.base; + +import com.google.common.base.Function; +import com.google.common.base.Supplier; import java.io.Serializable; import java.util.Set; -import org.checkerframework.checker.nullness.qual.Nullable; - -public abstract class Optional implements Serializable { - public static Optional absent() { - return null; - } - - public static Optional of(T reference) { - return null; - } - - public static Optional fromNullable(@Nullable T nullableReference) { - return null; - } - - public static @Nullable Optional fromJavaUtil( - java.util.@Nullable Optional javaUtilOptional) { - return null; - } - - public static java.util.@Nullable Optional toJavaUtil( - @Nullable Optional googleOptional) { - return null; - } - - public java.util.Optional toJavaUtil() { - return null; - } - - public abstract boolean isPresent(); - - public abstract T get(); - - public abstract T or(T defaultValue); - - public abstract Optional or(Optional secondChoice); - - public abstract T or(Supplier supplier); - - public abstract @Nullable T orNull(); - - public abstract Set asSet(); - - public abstract Optional transform(Function function); - - @Override - public abstract boolean equals(@Nullable Object object); - - @Override - public abstract int hashCode(); - - @Override - public abstract String toString(); - - public static Iterable presentInstances( - final Iterable> optionals) { - return null; - } +abstract public class Optional implements Serializable +{ + Optional(){} + public java.util.Optional toJavaUtil(){ return null; } + public abstract Optional transform(Function p0); + public abstract Optional or(Optional p0); + public abstract Set asSet(); + public abstract String toString(); + public abstract T get(); + public abstract T or(Supplier p0); + public abstract T or(T p0); + public abstract T orNull(); + public abstract boolean equals(Object p0); + public abstract boolean isPresent(); + public abstract int hashCode(); + public static Iterable presentInstances(Iterable> p0){ return null; } + public static Optional absent(){ return null; } + public static Optional fromJavaUtil(java.util.Optional p0){ return null; } + public static Optional fromNullable(T p0){ return null; } + public static Optional of(T p0){ return null; } + public static java.util.Optional toJavaUtil(Optional p0){ return null; } } diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/AbstractListMultimap.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/AbstractListMultimap.java new file mode 100644 index 00000000000..14dc86a38eb --- /dev/null +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/AbstractListMultimap.java @@ -0,0 +1,25 @@ +// Generated automatically from com.google.common.collect.AbstractListMultimap for testing purposes + +package com.google.common.collect; + +import com.google.common.collect.AbstractMapBasedMultimap; +import com.google.common.collect.ListMultimap; +import java.util.Collection; +import java.util.List; +import java.util.Map; + +abstract class AbstractListMultimap extends AbstractMapBasedMultimap implements ListMultimap +{ + protected AbstractListMultimap() {} + Collection unmodifiableCollectionSubclass(Collection p0){ return null; } + Collection wrapCollection(K p0, Collection p1){ return null; } + List createUnmodifiableEmptyCollection(){ return null; } + abstract List createCollection(); + protected AbstractListMultimap(Map> p0){} + public List get(K p0){ return null; } + public List removeAll(Object p0){ return null; } + public List replaceValues(K p0, Iterable p1){ return null; } + public Map> asMap(){ return null; } + public boolean equals(Object p0){ return false; } + public boolean put(K p0, V p1){ return false; } +} diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/AbstractMapBasedMultimap.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/AbstractMapBasedMultimap.java new file mode 100644 index 00000000000..cc84abfb89a --- /dev/null +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/AbstractMapBasedMultimap.java @@ -0,0 +1,79 @@ +// Generated automatically from com.google.common.collect.AbstractMapBasedMultimap for testing purposes + +package com.google.common.collect; + +import com.google.common.collect.AbstractMultimap; +import com.google.common.collect.Multiset; +import java.io.Serializable; +import java.util.AbstractCollection; +import java.util.Collection; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.Spliterator; +import java.util.function.BiConsumer; + +abstract class AbstractMapBasedMultimap extends AbstractMultimap implements Serializable +{ + protected AbstractMapBasedMultimap() {} + Collection unmodifiableCollectionSubclass(Collection p0){ return null; } + Collection> createEntries(){ return null; } + Collection createCollection(K p0){ return null; } + Collection createUnmodifiableEmptyCollection(){ return null; } + Collection createValues(){ return null; } + Collection wrapCollection(K p0, Collection p1){ return null; } + Iterator> entryIterator(){ return null; } + Iterator valueIterator(){ return null; } + Map> backingMap(){ return null; } + Map> createAsMap(){ return null; } + Multiset createKeys(){ return null; } + Set createKeySet(){ return null; } + Spliterator> entrySpliterator(){ return null; } + Spliterator valueSpliterator(){ return null; } + abstract Collection createCollection(); + class WrappedCollection extends AbstractCollection + { + protected WrappedCollection() {} + AbstractMapBasedMultimap.WrappedCollection getAncestor(){ return null; } + Collection delegate = null; + Collection getDelegate(){ return null; } + K getKey(){ return null; } + WrappedCollection(K p0, Collection p1, AbstractMapBasedMultimap.WrappedCollection p2){} + final AbstractMapBasedMultimap.WrappedCollection ancestor = null; + final Collection ancestorDelegate = null; + final K key = null; + public Iterator iterator(){ return null; } + public Spliterator spliterator(){ return null; } + public String toString(){ return null; } + public boolean add(V p0){ return false; } + public boolean addAll(Collection p0){ return false; } + public boolean contains(Object p0){ return false; } + public boolean containsAll(Collection p0){ return false; } + public boolean equals(Object p0){ return false; } + public boolean remove(Object p0){ return false; } + public boolean removeAll(Collection p0){ return false; } + public boolean retainAll(Collection p0){ return false; } + public int hashCode(){ return 0; } + public int size(){ return 0; } + public void clear(){} + void addToMap(){} + void refreshIfEmpty(){} + void removeIfEmpty(){} + } + final List wrapList(K p0, List p1, AbstractMapBasedMultimap.WrappedCollection p2){ return null; } + final Map> createMaybeNavigableAsMap(){ return null; } + final Set createMaybeNavigableKeySet(){ return null; } + final void setMap(Map> p0){} + protected AbstractMapBasedMultimap(Map> p0){} + public Collection> entries(){ return null; } + public Collection get(K p0){ return null; } + public Collection removeAll(Object p0){ return null; } + public Collection replaceValues(K p0, Iterable p1){ return null; } + public Collection values(){ return null; } + public boolean containsKey(Object p0){ return false; } + public boolean put(K p0, V p1){ return false; } + public int size(){ return 0; } + public void clear(){} + public void forEach(BiConsumer p0){} +} diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/AbstractMapBasedMultiset.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/AbstractMapBasedMultiset.java new file mode 100644 index 00000000000..c6a582bff05 --- /dev/null +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/AbstractMapBasedMultiset.java @@ -0,0 +1,31 @@ +// Generated automatically from com.google.common.collect.AbstractMapBasedMultiset for testing purposes + +package com.google.common.collect; + +import com.google.common.collect.AbstractMultiset; +import com.google.common.collect.Count; +import com.google.common.collect.Multiset; +import java.io.Serializable; +import java.util.Iterator; +import java.util.Map; +import java.util.Set; +import java.util.function.ObjIntConsumer; + +abstract class AbstractMapBasedMultiset extends AbstractMultiset implements Serializable +{ + protected AbstractMapBasedMultiset() {} + Iterator elementIterator(){ return null; } + Iterator> entryIterator(){ return null; } + int distinctElements(){ return 0; } + protected AbstractMapBasedMultiset(Map p0){} + public Iterator iterator(){ return null; } + public Set> entrySet(){ return null; } + public int add(E p0, int p1){ return 0; } + public int count(Object p0){ return 0; } + public int remove(Object p0, int p1){ return 0; } + public int setCount(E p0, int p1){ return 0; } + public int size(){ return 0; } + public void clear(){} + public void forEachEntry(ObjIntConsumer p0){} + void setBackingMap(Map p0){} +} diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/AbstractMultimap.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/AbstractMultimap.java index ce39e44126c..64c6bd5004f 100644 --- a/java/ql/test/stubs/guava-30.0/com/google/common/collect/AbstractMultimap.java +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/AbstractMultimap.java @@ -5,6 +5,7 @@ package com.google.common.collect; import com.google.common.collect.Multimap; import com.google.common.collect.Multiset; import java.util.Collection; +import java.util.Iterator; import java.util.Map; import java.util.Set; diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/AbstractMultiset.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/AbstractMultiset.java new file mode 100644 index 00000000000..2e4d44914c8 --- /dev/null +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/AbstractMultiset.java @@ -0,0 +1,36 @@ +// Generated automatically from com.google.common.collect.AbstractMultiset for testing purposes + +package com.google.common.collect; + +import com.google.common.collect.Multiset; +import java.util.AbstractCollection; +import java.util.Collection; +import java.util.Iterator; +import java.util.Set; + +abstract class AbstractMultiset extends AbstractCollection implements Multiset +{ + AbstractMultiset(){} + Set createElementSet(){ return null; } + Set> createEntrySet(){ return null; } + abstract Iterator elementIterator(); + abstract Iterator> entryIterator(); + abstract int distinctElements(); + public Set elementSet(){ return null; } + public Set> entrySet(){ return null; } + public abstract void clear(); + public boolean contains(Object p0){ return false; } + public boolean isEmpty(){ return false; } + public boolean setCount(E p0, int p1, int p2){ return false; } + public final String toString(){ return null; } + public final boolean add(E p0){ return false; } + public final boolean addAll(Collection p0){ return false; } + public final boolean equals(Object p0){ return false; } + public final boolean remove(Object p0){ return false; } + public final boolean removeAll(Collection p0){ return false; } + public final boolean retainAll(Collection p0){ return false; } + public final int hashCode(){ return 0; } + public int add(E p0, int p1){ return 0; } + public int remove(Object p0, int p1){ return 0; } + public int setCount(E p0, int p1){ return 0; } +} diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/AbstractSetMultimap.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/AbstractSetMultimap.java new file mode 100644 index 00000000000..27c912da1f4 --- /dev/null +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/AbstractSetMultimap.java @@ -0,0 +1,26 @@ +// Generated automatically from com.google.common.collect.AbstractSetMultimap for testing purposes + +package com.google.common.collect; + +import com.google.common.collect.AbstractMapBasedMultimap; +import com.google.common.collect.SetMultimap; +import java.util.Collection; +import java.util.Map; +import java.util.Set; + +abstract class AbstractSetMultimap extends AbstractMapBasedMultimap implements SetMultimap +{ + protected AbstractSetMultimap() {} + Collection unmodifiableCollectionSubclass(Collection p0){ return null; } + Collection wrapCollection(K p0, Collection p1){ return null; } + Set createUnmodifiableEmptyCollection(){ return null; } + abstract Set createCollection(); + protected AbstractSetMultimap(Map> p0){} + public Map> asMap(){ return null; } + public Set> entries(){ return null; } + public Set get(K p0){ return null; } + public Set removeAll(Object p0){ return null; } + public Set replaceValues(K p0, Iterable p1){ return null; } + public boolean equals(Object p0){ return false; } + public boolean put(K p0, V p1){ return false; } +} diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/AbstractSortedKeySortedSetMultimap.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/AbstractSortedKeySortedSetMultimap.java new file mode 100644 index 00000000000..f7c51b9faf3 --- /dev/null +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/AbstractSortedKeySortedSetMultimap.java @@ -0,0 +1,19 @@ +// Generated automatically from com.google.common.collect.AbstractSortedKeySortedSetMultimap for testing purposes + +package com.google.common.collect; + +import com.google.common.collect.AbstractSortedSetMultimap; +import java.util.Collection; +import java.util.Set; +import java.util.SortedMap; +import java.util.SortedSet; + +abstract class AbstractSortedKeySortedSetMultimap extends AbstractSortedSetMultimap +{ + protected AbstractSortedKeySortedSetMultimap() {} + AbstractSortedKeySortedSetMultimap(SortedMap> p0){} + Set createKeySet(){ return null; } + SortedMap> backingMap(){ return null; } + public SortedMap> asMap(){ return null; } + public SortedSet keySet(){ return null; } +} diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/AbstractSortedMultiset.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/AbstractSortedMultiset.java new file mode 100644 index 00000000000..5f2a84224a8 --- /dev/null +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/AbstractSortedMultiset.java @@ -0,0 +1,30 @@ +// Generated automatically from com.google.common.collect.AbstractSortedMultiset for testing purposes + +package com.google.common.collect; + +import com.google.common.collect.AbstractMultiset; +import com.google.common.collect.BoundType; +import com.google.common.collect.Multiset; +import com.google.common.collect.SortedMultiset; +import java.util.Comparator; +import java.util.Iterator; +import java.util.NavigableSet; + +abstract class AbstractSortedMultiset extends AbstractMultiset implements SortedMultiset +{ + AbstractSortedMultiset(){} + AbstractSortedMultiset(Comparator p0){} + Iterator descendingIterator(){ return null; } + NavigableSet createElementSet(){ return null; } + SortedMultiset createDescendingMultiset(){ return null; } + abstract Iterator> descendingEntryIterator(); + final Comparator comparator = null; + public Comparator comparator(){ return null; } + public Multiset.Entry firstEntry(){ return null; } + public Multiset.Entry lastEntry(){ return null; } + public Multiset.Entry pollFirstEntry(){ return null; } + public Multiset.Entry pollLastEntry(){ return null; } + public NavigableSet elementSet(){ return null; } + public SortedMultiset descendingMultiset(){ return null; } + public SortedMultiset subMultiset(E p0, BoundType p1, E p2, BoundType p3){ return null; } +} diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/AbstractSortedSetMultimap.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/AbstractSortedSetMultimap.java new file mode 100644 index 00000000000..5d2a58a3994 --- /dev/null +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/AbstractSortedSetMultimap.java @@ -0,0 +1,24 @@ +// Generated automatically from com.google.common.collect.AbstractSortedSetMultimap for testing purposes + +package com.google.common.collect; + +import com.google.common.collect.AbstractSetMultimap; +import com.google.common.collect.SortedSetMultimap; +import java.util.Collection; +import java.util.Map; +import java.util.SortedSet; + +abstract class AbstractSortedSetMultimap extends AbstractSetMultimap implements SortedSetMultimap +{ + protected AbstractSortedSetMultimap() {} + SortedSet unmodifiableCollectionSubclass(Collection p0){ return null; } + Collection wrapCollection(K p0, Collection p1){ return null; } + SortedSet createUnmodifiableEmptyCollection(){ return null; } + abstract SortedSet createCollection(); + protected AbstractSortedSetMultimap(Map> p0){} + public Collection values(){ return null; } + public Map> asMap(){ return null; } + public SortedSet get(K p0){ return null; } + public SortedSet removeAll(Object p0){ return null; } + public SortedSet replaceValues(K p0, Iterable p1){ return null; } +} diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/AbstractTable.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/AbstractTable.java index 9003783bab9..f746f045f94 100644 --- a/java/ql/test/stubs/guava-30.0/com/google/common/collect/AbstractTable.java +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/AbstractTable.java @@ -1,90 +1,37 @@ -/* - * Copyright (C) 2013 The Guava Authors - * - * 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. - */ +// Generated automatically from com.google.common.collect.AbstractTable for testing purposes package com.google.common.collect; +import com.google.common.collect.Table; import java.util.Collection; -import java.util.Map; +import java.util.Iterator; import java.util.Set; +import java.util.Spliterator; -abstract class AbstractTable implements Table { - @Override - public boolean containsRow(Object rowKey) { - return false; - } - - @Override - public boolean containsColumn(Object columnKey) { - return false; - } - - @Override - public Set rowKeySet() { - return null; - } - - @Override - public Set columnKeySet() { - return null; - } - - @Override - public boolean containsValue(Object value) { - return false; - } - - @Override - public boolean contains(Object rowKey, Object columnKey) { - return false; - } - - @Override - public V get(Object rowKey, Object columnKey) { - return null; - } - - @Override - public boolean isEmpty() { - return false; - } - - @Override - public void clear() { - } - - @Override - public V remove(Object rowKey, Object columnKey) { - return null; - } - - @Override - public V put(R rowKey, C columnKey, V value) { - return null; - } - - @Override - public void putAll(Table table) { - } - - @Override - public Set> cellSet() { - return null; - } - - @Override - public Collection values() { - return null; - } - +abstract class AbstractTable implements Table +{ + AbstractTable(){} + Collection createValues(){ return null; } + Iterator valuesIterator(){ return null; } + Set> createCellSet(){ return null; } + Spliterator valuesSpliterator(){ return null; } + abstract Iterator> cellIterator(); + abstract Spliterator> cellSpliterator(); + public Collection values(){ return null; } + public Set columnKeySet(){ return null; } + public Set rowKeySet(){ return null; } + public Set> cellSet(){ return null; } + public String toString(){ return null; } + public V get(Object p0, Object p1){ return null; } + public V put(R p0, C p1, V p2){ return null; } + public V remove(Object p0, Object p1){ return null; } + public boolean contains(Object p0, Object p1){ return false; } + public boolean containsColumn(Object p0){ return false; } + public boolean containsRow(Object p0){ return false; } + public boolean containsValue(Object p0){ return false; } + public boolean equals(Object p0){ return false; } + public boolean isEmpty(){ return false; } + public int hashCode(){ return 0; } + public void clear(){} + public void putAll(Table p0){} } diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/ArrayListMultimap.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/ArrayListMultimap.java new file mode 100644 index 00000000000..da4069981f5 --- /dev/null +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/ArrayListMultimap.java @@ -0,0 +1,18 @@ +// Generated automatically from com.google.common.collect.ArrayListMultimap for testing purposes + +package com.google.common.collect; + +import com.google.common.collect.ArrayListMultimapGwtSerializationDependencies; +import com.google.common.collect.Multimap; +import java.util.List; + +public class ArrayListMultimap extends ArrayListMultimapGwtSerializationDependencies +{ + protected ArrayListMultimap() {} + List createCollection(){ return null; } + int expectedValuesPerKey = 0; + public static ArrayListMultimap create(){ return null; } + public static ArrayListMultimap create(Multimap p0){ return null; } + public static ArrayListMultimap create(int p0, int p1){ return null; } + public void trimToSize(){} +} diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/ArrayListMultimapGwtSerializationDependencies.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/ArrayListMultimapGwtSerializationDependencies.java new file mode 100644 index 00000000000..1a0e68bd7a3 --- /dev/null +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/ArrayListMultimapGwtSerializationDependencies.java @@ -0,0 +1,13 @@ +// Generated automatically from com.google.common.collect.ArrayListMultimapGwtSerializationDependencies for testing purposes + +package com.google.common.collect; + +import com.google.common.collect.AbstractListMultimap; +import java.util.Collection; +import java.util.Map; + +abstract class ArrayListMultimapGwtSerializationDependencies extends AbstractListMultimap +{ + protected ArrayListMultimapGwtSerializationDependencies() {} + ArrayListMultimapGwtSerializationDependencies(Map> p0){} +} diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/ArrayTable.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/ArrayTable.java new file mode 100644 index 00000000000..bcd351f037f --- /dev/null +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/ArrayTable.java @@ -0,0 +1,51 @@ +// Generated automatically from com.google.common.collect.ArrayTable for testing purposes + +package com.google.common.collect; + +import com.google.common.collect.AbstractTable; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Table; +import java.io.Serializable; +import java.util.Collection; +import java.util.Iterator; +import java.util.Map; +import java.util.Set; +import java.util.Spliterator; + +public class ArrayTable extends AbstractTable implements Serializable +{ + protected ArrayTable() {} + Iterator> cellIterator(){ return null; } + Iterator valuesIterator(){ return null; } + Spliterator> cellSpliterator(){ return null; } + Spliterator valuesSpliterator(){ return null; } + public Collection values(){ return null; } + public ImmutableList columnKeyList(){ return null; } + public ImmutableList rowKeyList(){ return null; } + public ImmutableSet columnKeySet(){ return null; } + public ImmutableSet rowKeySet(){ return null; } + public Map> columnMap(){ return null; } + public Map row(R p0){ return null; } + public Map> rowMap(){ return null; } + public Map column(C p0){ return null; } + public Set> cellSet(){ return null; } + public V at(int p0, int p1){ return null; } + public V erase(Object p0, Object p1){ return null; } + public V get(Object p0, Object p1){ return null; } + public V put(R p0, C p1, V p2){ return null; } + public V remove(Object p0, Object p1){ return null; } + public V set(int p0, int p1, V p2){ return null; } + public V[] toArray(Class p0){ return null; } + public boolean contains(Object p0, Object p1){ return false; } + public boolean containsColumn(Object p0){ return false; } + public boolean containsRow(Object p0){ return false; } + public boolean containsValue(Object p0){ return false; } + public boolean isEmpty(){ return false; } + public int size(){ return 0; } + public static ArrayTable create(Iterable p0, Iterable p1){ return null; } + public static ArrayTable create(Table p0){ return null; } + public void clear(){} + public void eraseAll(){} + public void putAll(Table p0){} +} diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/BiMap.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/BiMap.java new file mode 100644 index 00000000000..00e7a90086b --- /dev/null +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/BiMap.java @@ -0,0 +1,15 @@ +// Generated automatically from com.google.common.collect.BiMap for testing purposes + +package com.google.common.collect; + +import java.util.Map; +import java.util.Set; + +public interface BiMap extends Map +{ + BiMap inverse(); + Set values(); + V forcePut(K p0, V p1); + V put(K p0, V p1); + void putAll(Map p0); +} diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/BoundType.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/BoundType.java new file mode 100644 index 00000000000..2a0c2e34f2b --- /dev/null +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/BoundType.java @@ -0,0 +1,13 @@ +// Generated automatically from com.google.common.collect.BoundType for testing purposes + +package com.google.common.collect; + + +public enum BoundType +{ + CLOSED, OPEN; + private BoundType() {} + BoundType flip(){ return null; } + final boolean inclusive = false; + static BoundType forBoolean(boolean p0){ return null; } +} diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/ClassToInstanceMap.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/ClassToInstanceMap.java new file mode 100644 index 00000000000..53dca6fb602 --- /dev/null +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/ClassToInstanceMap.java @@ -0,0 +1,11 @@ +// Generated automatically from com.google.common.collect.ClassToInstanceMap for testing purposes + +package com.google.common.collect; + +import java.util.Map; + +public interface ClassToInstanceMap extends Map, B> +{ + T getInstance(Class p0); + T putInstance(Class p0, T p1); +} diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/Collections2.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/Collections2.java new file mode 100644 index 00000000000..e23a14d4d80 --- /dev/null +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/Collections2.java @@ -0,0 +1,24 @@ +// Generated automatically from com.google.common.collect.Collections2 for testing purposes + +package com.google.common.collect; + +import com.google.common.base.Function; +import com.google.common.base.Predicate; +import java.util.Collection; +import java.util.Comparator; +import java.util.List; + +public class Collections2 +{ + protected Collections2() {} + public static > Collection> orderedPermutations(Iterable p0){ return null; } + public static Collection filter(Collection p0, Predicate p1){ return null; } + public static Collection> orderedPermutations(Iterable p0, Comparator p1){ return null; } + public static Collection> permutations(Collection p0){ return null; } + public static Collection transform(Collection p0, Function p1){ return null; } + static String toStringImpl(Collection p0){ return null; } + static StringBuilder newStringBuilderForCollection(int p0){ return null; } + static boolean containsAllImpl(Collection p0, Collection p1){ return false; } + static boolean safeContains(Collection p0, Object p1){ return false; } + static boolean safeRemove(Collection p0, Object p1){ return false; } +} diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/ConcurrentHashMultiset.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/ConcurrentHashMultiset.java new file mode 100644 index 00000000000..a8304ae2c7a --- /dev/null +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/ConcurrentHashMultiset.java @@ -0,0 +1,37 @@ +// Generated automatically from com.google.common.collect.ConcurrentHashMultiset for testing purposes + +package com.google.common.collect; + +import com.google.common.collect.AbstractMultiset; +import com.google.common.collect.Multiset; +import java.io.Serializable; +import java.util.Iterator; +import java.util.Set; +import java.util.concurrent.ConcurrentMap; +import java.util.concurrent.atomic.AtomicInteger; + +public class ConcurrentHashMultiset extends AbstractMultiset implements Serializable +{ + protected ConcurrentHashMultiset() {} + ConcurrentHashMultiset(ConcurrentMap p0){} + Iterator elementIterator(){ return null; } + Iterator> entryIterator(){ return null; } + Set createElementSet(){ return null; } + int distinctElements(){ return 0; } + public T[] toArray(T[] p0){ return null; } + public Iterator iterator(){ return null; } + public Object[] toArray(){ return null; } + public Set> createEntrySet(){ return null; } + public boolean isEmpty(){ return false; } + public boolean removeExactly(Object p0, int p1){ return false; } + public boolean setCount(E p0, int p1, int p2){ return false; } + public int add(E p0, int p1){ return 0; } + public int count(Object p0){ return 0; } + public int remove(Object p0, int p1){ return 0; } + public int setCount(E p0, int p1){ return 0; } + public int size(){ return 0; } + public static ConcurrentHashMultiset create(){ return null; } + public static ConcurrentHashMultiset create(ConcurrentMap p0){ return null; } + public static ConcurrentHashMultiset create(Iterable p0){ return null; } + public void clear(){} +} diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/Count.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/Count.java new file mode 100644 index 00000000000..21307387f5c --- /dev/null +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/Count.java @@ -0,0 +1,19 @@ +// Generated automatically from com.google.common.collect.Count for testing purposes + +package com.google.common.collect; + +import java.io.Serializable; + +class Count implements Serializable +{ + protected Count() {} + Count(int p0){} + public String toString(){ return null; } + public boolean equals(Object p0){ return false; } + public int addAndGet(int p0){ return 0; } + public int get(){ return 0; } + public int getAndSet(int p0){ return 0; } + public int hashCode(){ return 0; } + public void add(int p0){} + public void set(int p0){} +} diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/Cut.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/Cut.java new file mode 100644 index 00000000000..822802a1fef --- /dev/null +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/Cut.java @@ -0,0 +1,32 @@ +// Generated automatically from com.google.common.collect.Cut for testing purposes + +package com.google.common.collect; + +import com.google.common.collect.BoundType; +import com.google.common.collect.DiscreteDomain; +import java.io.Serializable; + +abstract class Cut implements Comparable>, Serializable +{ + protected Cut() {} + C endpoint(){ return null; } + Cut(C p0){} + Cut canonical(DiscreteDomain p0){ return null; } + abstract BoundType typeAsLowerBound(); + abstract BoundType typeAsUpperBound(); + abstract C greatestValueBelow(DiscreteDomain p0); + abstract C leastValueAbove(DiscreteDomain p0); + abstract Cut withLowerBoundType(BoundType p0, DiscreteDomain p1); + abstract Cut withUpperBoundType(BoundType p0, DiscreteDomain p1); + abstract boolean isLessThan(C p0); + abstract void describeAsLowerBound(StringBuilder p0); + abstract void describeAsUpperBound(StringBuilder p0); + final C endpoint = null; + public abstract int hashCode(); + public boolean equals(Object p0){ return false; } + public int compareTo(Cut p0){ return 0; } + static Cut aboveAll(){ return null; } + static Cut aboveValue(C p0){ return null; } + static Cut belowAll(){ return null; } + static Cut belowValue(C p0){ return null; } +} diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/DiscreteDomain.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/DiscreteDomain.java new file mode 100644 index 00000000000..02e21f27bfd --- /dev/null +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/DiscreteDomain.java @@ -0,0 +1,20 @@ +// Generated automatically from com.google.common.collect.DiscreteDomain for testing purposes + +package com.google.common.collect; + +import java.math.BigInteger; + +abstract public class DiscreteDomain +{ + C offset(C p0, long p1){ return null; } + final boolean supportsFastOffset = false; + protected DiscreteDomain(){} + public C maxValue(){ return null; } + public C minValue(){ return null; } + public abstract C next(C p0); + public abstract C previous(C p0); + public abstract long distance(C p0, C p1); + public static DiscreteDomain bigIntegers(){ return null; } + public static DiscreteDomain integers(){ return null; } + public static DiscreteDomain longs(){ return null; } +} diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/ForwardingMap.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/ForwardingMap.java new file mode 100644 index 00000000000..bcb15cec45e --- /dev/null +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/ForwardingMap.java @@ -0,0 +1,37 @@ +// Generated automatically from com.google.common.collect.ForwardingMap for testing purposes + +package com.google.common.collect; + +import com.google.common.collect.ForwardingObject; +import java.util.Collection; +import java.util.Map; +import java.util.Set; + +abstract public class ForwardingMap extends ForwardingObject implements Map +{ + protected ForwardingMap(){} + protected String standardToString(){ return null; } + protected V standardRemove(Object p0){ return null; } + protected abstract Map delegate(); + protected boolean standardContainsKey(Object p0){ return false; } + protected boolean standardContainsValue(Object p0){ return false; } + protected boolean standardEquals(Object p0){ return false; } + protected boolean standardIsEmpty(){ return false; } + protected int standardHashCode(){ return 0; } + protected void standardClear(){} + protected void standardPutAll(Map p0){} + public Collection values(){ return null; } + public Set keySet(){ return null; } + public Set> entrySet(){ return null; } + public V get(Object p0){ return null; } + public V put(K p0, V p1){ return null; } + public V remove(Object p0){ return null; } + public boolean containsKey(Object p0){ return false; } + public boolean containsValue(Object p0){ return false; } + public boolean equals(Object p0){ return false; } + public boolean isEmpty(){ return false; } + public int hashCode(){ return 0; } + public int size(){ return 0; } + public void clear(){} + public void putAll(Map p0){} +} diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/ForwardingObject.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/ForwardingObject.java new file mode 100644 index 00000000000..54cf8f64689 --- /dev/null +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/ForwardingObject.java @@ -0,0 +1,11 @@ +// Generated automatically from com.google.common.collect.ForwardingObject for testing purposes + +package com.google.common.collect; + + +abstract public class ForwardingObject +{ + protected ForwardingObject(){} + protected abstract Object delegate(); + public String toString(){ return null; } +} diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/GeneralRange.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/GeneralRange.java new file mode 100644 index 00000000000..acf8f6bc9c9 --- /dev/null +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/GeneralRange.java @@ -0,0 +1,34 @@ +// Generated automatically from com.google.common.collect.GeneralRange for testing purposes + +package com.google.common.collect; + +import com.google.common.collect.BoundType; +import com.google.common.collect.Range; +import java.io.Serializable; +import java.util.Comparator; + +class GeneralRange implements Serializable +{ + protected GeneralRange() {} + BoundType getLowerBoundType(){ return null; } + BoundType getUpperBoundType(){ return null; } + Comparator comparator(){ return null; } + GeneralRange intersect(GeneralRange p0){ return null; } + GeneralRange reverse(){ return null; } + T getLowerEndpoint(){ return null; } + T getUpperEndpoint(){ return null; } + boolean contains(T p0){ return false; } + boolean hasLowerBound(){ return false; } + boolean hasUpperBound(){ return false; } + boolean isEmpty(){ return false; } + boolean tooHigh(T p0){ return false; } + boolean tooLow(T p0){ return false; } + public String toString(){ return null; } + public boolean equals(Object p0){ return false; } + public int hashCode(){ return 0; } + static GeneralRange from(Range p0){ return null; } + static GeneralRange all(Comparator p0){ return null; } + static GeneralRange downTo(Comparator p0, T p1, BoundType p2){ return null; } + static GeneralRange range(Comparator p0, T p1, BoundType p2, T p3, BoundType p4){ return null; } + static GeneralRange upTo(Comparator p0, T p1, BoundType p2){ return null; } +} diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/HashBasedTable.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/HashBasedTable.java new file mode 100644 index 00000000000..ce2c45f1ffb --- /dev/null +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/HashBasedTable.java @@ -0,0 +1,24 @@ +// Generated automatically from com.google.common.collect.HashBasedTable for testing purposes, and manually adjusted. + +package com.google.common.collect; + +import com.google.common.base.Supplier; +import com.google.common.collect.StandardTable; +import com.google.common.collect.Table; +import java.io.Serializable; +import java.util.Map; + +public class HashBasedTable extends StandardTable +{ + protected HashBasedTable() {} + public V get(Object p0, Object p1){ return null; } + public V remove(Object p0, Object p1){ return null; } + public boolean contains(Object p0, Object p1){ return false; } + public boolean containsColumn(Object p0){ return false; } + public boolean containsRow(Object p0){ return false; } + public boolean containsValue(Object p0){ return false; } + public boolean equals(Object p0){ return false; } + public static HashBasedTable create(){ return null; } + public static HashBasedTable create(Table p0){ return null; } + public static HashBasedTable create(int p0, int p1){ return null; } +} diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/HashBiMap.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/HashBiMap.java new file mode 100644 index 00000000000..113e2682d44 --- /dev/null +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/HashBiMap.java @@ -0,0 +1,34 @@ +// Generated automatically from com.google.common.collect.HashBiMap for testing purposes + +package com.google.common.collect; + +import com.google.common.collect.BiMap; +import com.google.common.collect.Maps; +import java.io.Serializable; +import java.util.Iterator; +import java.util.Map; +import java.util.Set; +import java.util.function.BiConsumer; +import java.util.function.BiFunction; + +public class HashBiMap extends Maps.IteratorBasedAbstractMap implements BiMap, Serializable +{ + protected HashBiMap() {} + Iterator> entryIterator(){ return null; } + public BiMap inverse(){ return null; } + public Set keySet(){ return null; } + public Set values(){ return null; } + public V forcePut(K p0, V p1){ return null; } + public V get(Object p0){ return null; } + public V put(K p0, V p1){ return null; } + public V remove(Object p0){ return null; } + public boolean containsKey(Object p0){ return false; } + public boolean containsValue(Object p0){ return false; } + public int size(){ return 0; } + public static HashBiMap create(){ return null; } + public static HashBiMap create(Map p0){ return null; } + public static HashBiMap create(int p0){ return null; } + public void clear(){} + public void forEach(BiConsumer p0){} + public void replaceAll(BiFunction p0){} +} diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/HashMultimap.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/HashMultimap.java new file mode 100644 index 00000000000..b233e14aeeb --- /dev/null +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/HashMultimap.java @@ -0,0 +1,17 @@ +// Generated automatically from com.google.common.collect.HashMultimap for testing purposes + +package com.google.common.collect; + +import com.google.common.collect.HashMultimapGwtSerializationDependencies; +import com.google.common.collect.Multimap; +import java.util.Set; + +public class HashMultimap extends HashMultimapGwtSerializationDependencies +{ + protected HashMultimap() {} + Set createCollection(){ return null; } + int expectedValuesPerKey = 0; + public static HashMultimap create(){ return null; } + public static HashMultimap create(Multimap p0){ return null; } + public static HashMultimap create(int p0, int p1){ return null; } +} diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/HashMultimapGwtSerializationDependencies.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/HashMultimapGwtSerializationDependencies.java new file mode 100644 index 00000000000..f22c7827102 --- /dev/null +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/HashMultimapGwtSerializationDependencies.java @@ -0,0 +1,13 @@ +// Generated automatically from com.google.common.collect.HashMultimapGwtSerializationDependencies for testing purposes + +package com.google.common.collect; + +import com.google.common.collect.AbstractSetMultimap; +import java.util.Collection; +import java.util.Map; + +abstract class HashMultimapGwtSerializationDependencies extends AbstractSetMultimap +{ + protected HashMultimapGwtSerializationDependencies() {} + HashMultimapGwtSerializationDependencies(Map> p0){} +} diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/HashMultiset.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/HashMultiset.java new file mode 100644 index 00000000000..38d026f45fc --- /dev/null +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/HashMultiset.java @@ -0,0 +1,13 @@ +// Generated automatically from com.google.common.collect.HashMultiset for testing purposes + +package com.google.common.collect; + +import com.google.common.collect.AbstractMapBasedMultiset; + +public class HashMultiset extends AbstractMapBasedMultiset +{ + protected HashMultiset() {} + public static HashMultiset create(){ return null; } + public static HashMultiset create(Iterable p0){ return null; } + public static HashMultiset create(int p0){ return null; } +} diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/ImmutableClassToInstanceMap.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/ImmutableClassToInstanceMap.java new file mode 100644 index 00000000000..e0442bec015 --- /dev/null +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/ImmutableClassToInstanceMap.java @@ -0,0 +1,28 @@ +// Generated automatically from com.google.common.collect.ImmutableClassToInstanceMap for testing purposes + +package com.google.common.collect; + +import com.google.common.collect.ClassToInstanceMap; +import com.google.common.collect.ForwardingMap; +import java.io.Serializable; +import java.util.Map; + +public class ImmutableClassToInstanceMap extends ForwardingMap, B> implements ClassToInstanceMap, Serializable +{ + protected ImmutableClassToInstanceMap() {} + Object readResolve(){ return null; } + protected Map, B> delegate(){ return null; } + public T getInstance(Class p0){ return null; } + public T putInstance(Class p0, T p1){ return null; } + public static ImmutableClassToInstanceMap copyOf(Map, ? extends S> p0){ return null; } + public static ImmutableClassToInstanceMap of(Class p0, T p1){ return null; } + public static ImmutableClassToInstanceMap.Builder builder(){ return null; } + public static ImmutableClassToInstanceMap of(){ return null; } + static public class Builder + { + public ImmutableClassToInstanceMap.Builder put(Class p0, T p1){ return null; } + public ImmutableClassToInstanceMap.Builder putAll(Map, ? extends T> p0){ return null; } + public Builder(){} + public ImmutableClassToInstanceMap build(){ return null; } + } +} diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/ImmutableList.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/ImmutableList.java index 5046e1fd2af..08e44baf490 100644 --- a/java/ql/test/stubs/guava-30.0/com/google/common/collect/ImmutableList.java +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/ImmutableList.java @@ -58,8 +58,18 @@ abstract public class ImmutableList extends ImmutableCollection implements public static ImmutableList of(E p0, E p1, E p2, E p3, E p4, E p5, E p6, E p7, E p8, E p9, E p10, E p11, E... p12){ return null; } public static ImmutableList sortedCopyOf(Comparator p0, Iterable p1){ return null; } public void forEach(Consumer p0){} +<<<<<<< HEAD static public class Builder extends ImmutableCollection.Builder { +======= + static ImmutableList asImmutableList(Object[] p0){ return null; } + static ImmutableList asImmutableList(Object[] p0, int p1){ return null; } + static public class Builder extends ImmutableCollection.Builder + { + Builder(int p0){} + ImmutableList.Builder combine(ImmutableList.Builder p0){ return null; } + Object[] contents = null; +>>>>>>> 2bc43eb337... Generate stubs. public Builder(){} public ImmutableList.Builder add(E p0){ return null; } public ImmutableList.Builder add(E... p0){ return null; } diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/ImmutableListMultimap.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/ImmutableListMultimap.java new file mode 100644 index 00000000000..d21c299dd63 --- /dev/null +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/ImmutableListMultimap.java @@ -0,0 +1,51 @@ +// Generated automatically from com.google.common.collect.ImmutableListMultimap for testing purposes + +package com.google.common.collect; + +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableMultimap; +import com.google.common.collect.ListMultimap; +import com.google.common.collect.Multimap; +import java.util.Collection; +import java.util.Comparator; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collector; +import java.util.stream.Stream; + +public class ImmutableListMultimap extends ImmutableMultimap implements ListMultimap +{ + protected ImmutableListMultimap() {} + ImmutableListMultimap(ImmutableMap> p0, int p1){} + public ImmutableList get(K p0){ return null; } + public ImmutableListMultimap inverse(){ return null; } + public final ImmutableList removeAll(Object p0){ return null; } + public final ImmutableList replaceValues(K p0, Iterable p1){ return null; } + public static ImmutableListMultimap.Builder builder(){ return null; } + public static ImmutableListMultimap copyOf(Iterable> p0){ return null; } + public static ImmutableListMultimap copyOf(Multimap p0){ return null; } + public static ImmutableListMultimap of(){ return null; } + public static ImmutableListMultimap of(K p0, V p1){ return null; } + public static ImmutableListMultimap of(K p0, V p1, K p2, V p3){ return null; } + public static ImmutableListMultimap of(K p0, V p1, K p2, V p3, K p4, V p5){ return null; } + public static ImmutableListMultimap of(K p0, V p1, K p2, V p3, K p4, V p5, K p6, V p7){ return null; } + public static ImmutableListMultimap of(K p0, V p1, K p2, V p3, K p4, V p5, K p6, V p7, K p8, V p9){ return null; } + public static Collector> flatteningToImmutableListMultimap(Function p0, Function> p1){ return null; } + public static Collector> toImmutableListMultimap(Function p0, Function p1){ return null; } + static ImmutableListMultimap fromMapEntries(Collection>> p0, Comparator p1){ return null; } + static public class Builder extends ImmutableMultimap.Builder + { + ImmutableListMultimap.Builder combine(ImmutableMultimap.Builder p0){ return null; } + public Builder(){} + public ImmutableListMultimap.Builder orderKeysBy(Comparator p0){ return null; } + public ImmutableListMultimap.Builder orderValuesBy(Comparator p0){ return null; } + public ImmutableListMultimap.Builder put(K p0, V p1){ return null; } + public ImmutableListMultimap.Builder put(Map.Entry p0){ return null; } + public ImmutableListMultimap.Builder putAll(Iterable> p0){ return null; } + public ImmutableListMultimap.Builder putAll(K p0, Iterable p1){ return null; } + public ImmutableListMultimap.Builder putAll(K p0, V... p1){ return null; } + public ImmutableListMultimap.Builder putAll(Multimap p0){ return null; } + public ImmutableListMultimap build(){ return null; } + } +} diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/ImmutableSortedMap.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/ImmutableSortedMap.java index dc3bfd49083..e1ce5fe9346 100644 --- a/java/ql/test/stubs/guava-30.0/com/google/common/collect/ImmutableSortedMap.java +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/ImmutableSortedMap.java @@ -1,105 +1,90 @@ -/* - * Copyright (C) 2009 The Guava Authors - * - * 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. - */ +// Generated automatically from com.google.common.collect.ImmutableSortedMap for testing purposes package com.google.common.collect; +import com.google.common.collect.ImmutableCollection; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.ImmutableSortedMapFauxverideShim; +import com.google.common.collect.ImmutableSortedSet; +import com.google.common.collect.RegularImmutableSortedSet; import java.util.Comparator; import java.util.Map; +import java.util.NavigableMap; import java.util.SortedMap; +import java.util.function.BiConsumer; +import java.util.function.BinaryOperator; +import java.util.function.Function; +import java.util.stream.Collector; -public final class ImmutableSortedMap extends ImmutableMap{ - - public static ImmutableSortedMap of() { - return null; - } - - public static , V> ImmutableSortedMap of(K k1, V v1) { - return null; - } - - public static , V> ImmutableSortedMap of( - K k1, V v1, K k2, V v2) { - return null; - } - - public static , V> ImmutableSortedMap of( - K k1, V v1, K k2, V v2, K k3, V v3) { - return null; - } - - public static , V> ImmutableSortedMap of( - K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4) { - return null; - } - - public static , V> ImmutableSortedMap of( - K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5) { - return null; - } - - public static ImmutableSortedMap copyOf(Map map) { - return null; - } - - public static ImmutableSortedMap copyOf( - Map map, Comparator comparator) { - return null; - } - - public static ImmutableSortedMap copyOf( - Iterable> entries) { - return null; - } - - public static ImmutableSortedMap copyOf( - Iterable> entries, - Comparator comparator) { - return null; - } - - public static ImmutableSortedMap copyOfSorted(SortedMap map) { - return null; - } - - @Override - public V get(Object key) { - return null; - } - - @Override - public int size() { - return 0; - } - - public static , V> Builder naturalOrder() { - return null; - } - - public static Builder orderedBy(Comparator comparator) { - return null; - } - - public static , V> Builder reverseOrder() { - return null; - } - - public static class Builder extends ImmutableMap.Builder { - public Builder(Comparator comparator) { +public class ImmutableSortedMap extends ImmutableSortedMapFauxverideShim implements NavigableMap +{ + protected ImmutableSortedMap() {} + ImmutableCollection createValues(){ return null; } + ImmutableSet createKeySet(){ return null; } + ImmutableSet> createEntrySet(){ return null; } + ImmutableSortedMap(RegularImmutableSortedSet p0, ImmutableList p1){} + ImmutableSortedMap(RegularImmutableSortedSet p0, ImmutableList p1, ImmutableSortedMap p2){} + Object writeReplace(){ return null; } + boolean isPartialView(){ return false; } + public Comparator comparator(){ return null; } + public ImmutableCollection values(){ return null; } + public ImmutableSet> entrySet(){ return null; } + public ImmutableSortedMap descendingMap(){ return null; } + public ImmutableSortedMap headMap(K p0){ return null; } + public ImmutableSortedMap headMap(K p0, boolean p1){ return null; } + public ImmutableSortedMap subMap(K p0, K p1){ return null; } + public ImmutableSortedMap subMap(K p0, boolean p1, K p2, boolean p3){ return null; } + public ImmutableSortedMap tailMap(K p0){ return null; } + public ImmutableSortedMap tailMap(K p0, boolean p1){ return null; } + public ImmutableSortedSet descendingKeySet(){ return null; } + public ImmutableSortedSet keySet(){ return null; } + public ImmutableSortedSet navigableKeySet(){ return null; } + public K ceilingKey(K p0){ return null; } + public K firstKey(){ return null; } + public K floorKey(K p0){ return null; } + public K higherKey(K p0){ return null; } + public K lastKey(){ return null; } + public K lowerKey(K p0){ return null; } + public Map.Entry ceilingEntry(K p0){ return null; } + public Map.Entry firstEntry(){ return null; } + public Map.Entry floorEntry(K p0){ return null; } + public Map.Entry higherEntry(K p0){ return null; } + public Map.Entry lastEntry(){ return null; } + public Map.Entry lowerEntry(K p0){ return null; } + public V get(Object p0){ return null; } + public final Map.Entry pollFirstEntry(){ return null; } + public final Map.Entry pollLastEntry(){ return null; } + public int size(){ return 0; } + public static , V> ImmutableSortedMap.Builder naturalOrder(){ return null; } + public static , V> ImmutableSortedMap.Builder reverseOrder(){ return null; } + public static , V> ImmutableSortedMap of(K p0, V p1){ return null; } + public static , V> ImmutableSortedMap of(K p0, V p1, K p2, V p3){ return null; } + public static , V> ImmutableSortedMap of(K p0, V p1, K p2, V p3, K p4, V p5){ return null; } + public static , V> ImmutableSortedMap of(K p0, V p1, K p2, V p3, K p4, V p5, K p6, V p7){ return null; } + public static , V> ImmutableSortedMap of(K p0, V p1, K p2, V p3, K p4, V p5, K p6, V p7, K p8, V p9){ return null; } + public static ImmutableSortedMap.Builder orderedBy(Comparator p0){ return null; } + public static ImmutableSortedMap copyOf(Iterable> p0){ return null; } + public static ImmutableSortedMap copyOf(Iterable> p0, Comparator p1){ return null; } + public static ImmutableSortedMap copyOf(Map p0){ return null; } + public static ImmutableSortedMap copyOf(Map p0, Comparator p1){ return null; } + public static ImmutableSortedMap copyOfSorted(SortedMap p0){ return null; } + public static ImmutableSortedMap of(){ return null; } + public static Collector> toImmutableSortedMap(Comparator p0, Function p1, Function p2){ return null; } + public static Collector> toImmutableSortedMap(Comparator p0, Function p1, Function p2, BinaryOperator p3){ return null; } + public void forEach(BiConsumer p0){} + static ImmutableSortedMap emptyMap(Comparator p0){ return null; } + static public class Builder extends ImmutableMap.Builder + { + protected Builder() {} + ImmutableSortedMap.Builder combine(ImmutableMap.Builder p0){ return null; } + public Builder(Comparator p0){} + public ImmutableSortedMap.Builder put(K p0, V p1){ return null; } + public ImmutableSortedMap.Builder put(Map.Entry p0){ return null; } + public ImmutableSortedMap.Builder putAll(Iterable> p0){ return null; } + public ImmutableSortedMap.Builder putAll(Map p0){ return null; } + public ImmutableSortedMap build(){ return null; } + public final ImmutableSortedMap.Builder orderEntriesByValue(Comparator p0){ return null; } } - - } - } diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/ImmutableSortedMapFauxverideShim.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/ImmutableSortedMapFauxverideShim.java new file mode 100644 index 00000000000..206dda5dcdb --- /dev/null +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/ImmutableSortedMapFauxverideShim.java @@ -0,0 +1,23 @@ +// Generated automatically from com.google.common.collect.ImmutableSortedMapFauxverideShim for testing purposes + +package com.google.common.collect; + +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableSortedMap; +import java.util.function.BinaryOperator; +import java.util.function.Function; +import java.util.stream.Collector; + +abstract class ImmutableSortedMapFauxverideShim extends ImmutableMap +{ + ImmutableSortedMapFauxverideShim(){} + public static ImmutableSortedMap.Builder builder(){ return null; } + public static ImmutableSortedMap.Builder builderWithExpectedSize(int p0){ return null; } + public static ImmutableSortedMap of(K p0, V p1){ return null; } + public static ImmutableSortedMap of(K p0, V p1, K p2, V p3){ return null; } + public static ImmutableSortedMap of(K p0, V p1, K p2, V p3, K p4, V p5){ return null; } + public static ImmutableSortedMap of(K p0, V p1, K p2, V p3, K p4, V p5, K p6, V p7){ return null; } + public static ImmutableSortedMap of(K p0, V p1, K p2, V p3, K p4, V p5, K p6, V p7, K p8, V p9){ return null; } + public static Collector> toImmutableMap(Function p0, Function p1){ return null; } + public static Collector> toImmutableMap(Function p0, Function p1, BinaryOperator p2){ return null; } +} diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/ImmutableSortedMultiset.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/ImmutableSortedMultiset.java new file mode 100644 index 00000000000..830f4874409 --- /dev/null +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/ImmutableSortedMultiset.java @@ -0,0 +1,61 @@ +// Generated automatically from com.google.common.collect.ImmutableSortedMultiset for testing purposes + +package com.google.common.collect; + +import com.google.common.collect.BoundType; +import com.google.common.collect.ImmutableMultiset; +import com.google.common.collect.ImmutableSortedMultisetFauxverideShim; +import com.google.common.collect.ImmutableSortedSet; +import com.google.common.collect.Multiset; +import com.google.common.collect.SortedMultiset; +import java.util.Comparator; +import java.util.Iterator; +import java.util.function.Function; +import java.util.function.ToIntFunction; +import java.util.stream.Collector; + +abstract public class ImmutableSortedMultiset extends ImmutableSortedMultisetFauxverideShim implements SortedMultiset +{ + ImmutableSortedMultiset(){} + ImmutableSortedMultiset descendingMultiset = null; + Object writeReplace(){ return null; } + public ImmutableSortedMultiset descendingMultiset(){ return null; } + public ImmutableSortedMultiset subMultiset(E p0, BoundType p1, E p2, BoundType p3){ return null; } + public abstract ImmutableSortedMultiset headMultiset(E p0, BoundType p1); + public abstract ImmutableSortedMultiset tailMultiset(E p0, BoundType p1); + public abstract ImmutableSortedSet elementSet(); + public final Comparator comparator(){ return null; } + public final Multiset.Entry pollFirstEntry(){ return null; } + public final Multiset.Entry pollLastEntry(){ return null; } + public static > ImmutableSortedMultiset.Builder naturalOrder(){ return null; } + public static > ImmutableSortedMultiset.Builder reverseOrder(){ return null; } + public static > ImmutableSortedMultiset copyOf(E[] p0){ return null; } + public static > ImmutableSortedMultiset of(E p0){ return null; } + public static > ImmutableSortedMultiset of(E p0, E p1){ return null; } + public static > ImmutableSortedMultiset of(E p0, E p1, E p2){ return null; } + public static > ImmutableSortedMultiset of(E p0, E p1, E p2, E p3){ return null; } + public static > ImmutableSortedMultiset of(E p0, E p1, E p2, E p3, E p4){ return null; } + public static > ImmutableSortedMultiset of(E p0, E p1, E p2, E p3, E p4, E p5, E... p6){ return null; } + public static Collector> toImmutableSortedMultiset(Comparator p0){ return null; } + public static ImmutableSortedMultiset.Builder orderedBy(Comparator p0){ return null; } + public static ImmutableSortedMultiset copyOf(Comparator p0, Iterable p1){ return null; } + public static ImmutableSortedMultiset copyOf(Comparator p0, Iterator p1){ return null; } + public static ImmutableSortedMultiset copyOf(Iterable p0){ return null; } + public static ImmutableSortedMultiset copyOf(Iterator p0){ return null; } + public static ImmutableSortedMultiset copyOfSorted(SortedMultiset p0){ return null; } + public static ImmutableSortedMultiset of(){ return null; } + public static Collector> toImmutableSortedMultiset(Comparator p0, Function p1, ToIntFunction p2){ return null; } + static ImmutableSortedMultiset emptyMultiset(Comparator p0){ return null; } + static public class Builder extends ImmutableMultiset.Builder + { + protected Builder() {} + public Builder(Comparator p0){} + public ImmutableSortedMultiset.Builder add(E p0){ return null; } + public ImmutableSortedMultiset.Builder add(E... p0){ return null; } + public ImmutableSortedMultiset.Builder addAll(Iterable p0){ return null; } + public ImmutableSortedMultiset.Builder addAll(Iterator p0){ return null; } + public ImmutableSortedMultiset.Builder addCopies(E p0, int p1){ return null; } + public ImmutableSortedMultiset.Builder setCount(E p0, int p1){ return null; } + public ImmutableSortedMultiset build(){ return null; } + } +} diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/ImmutableSortedMultisetFauxverideShim.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/ImmutableSortedMultisetFauxverideShim.java new file mode 100644 index 00000000000..bd399349ebf --- /dev/null +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/ImmutableSortedMultisetFauxverideShim.java @@ -0,0 +1,24 @@ +// Generated automatically from com.google.common.collect.ImmutableSortedMultisetFauxverideShim for testing purposes + +package com.google.common.collect; + +import com.google.common.collect.ImmutableMultiset; +import com.google.common.collect.ImmutableSortedMultiset; +import java.util.function.Function; +import java.util.function.ToIntFunction; +import java.util.stream.Collector; + +abstract class ImmutableSortedMultisetFauxverideShim extends ImmutableMultiset +{ + ImmutableSortedMultisetFauxverideShim(){} + public static Collector> toImmutableMultiset(){ return null; } + public static ImmutableSortedMultiset.Builder builder(){ return null; } + public static ImmutableSortedMultiset copyOf(E[] p0){ return null; } + public static ImmutableSortedMultiset of(E p0){ return null; } + public static ImmutableSortedMultiset of(E p0, E p1){ return null; } + public static ImmutableSortedMultiset of(E p0, E p1, E p2){ return null; } + public static ImmutableSortedMultiset of(E p0, E p1, E p2, E p3){ return null; } + public static ImmutableSortedMultiset of(E p0, E p1, E p2, E p3, E p4){ return null; } + public static ImmutableSortedMultiset of(E p0, E p1, E p2, E p3, E p4, E p5, E... p6){ return null; } + public static Collector> toImmutableMultiset(Function p0, ToIntFunction p1){ return null; } +} diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/ImmutableSortedSet.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/ImmutableSortedSet.java index fb22c85b5ef..b12f194ec3b 100644 --- a/java/ql/test/stubs/guava-30.0/com/google/common/collect/ImmutableSortedSet.java +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/ImmutableSortedSet.java @@ -1,111 +1,85 @@ -/* - * Copyright (C) 2008 The Guava Authors - * - * 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. - */ +// Generated automatically from com.google.common.collect.ImmutableSortedSet for testing purposes package com.google.common.collect; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.ImmutableSortedSetFauxverideShim; +import com.google.common.collect.RegularImmutableSortedSet; +import com.google.common.collect.SortedIterable; +import com.google.common.collect.UnmodifiableIterator; import java.util.Collection; import java.util.Comparator; import java.util.Iterator; import java.util.NavigableSet; import java.util.SortedSet; +import java.util.Spliterator; +import java.util.stream.Collector; -public abstract class ImmutableSortedSet extends ImmutableSet - implements NavigableSet { - - public static ImmutableSortedSet of() { - return null; - } - - public static > ImmutableSortedSet of(E element) { - return null; - } - - public static > ImmutableSortedSet of(E e1, E e2) { - return null; - } - - public static > ImmutableSortedSet of(E e1, E e2, E e3) { - return null; - } - - public static > ImmutableSortedSet of(E e1, E e2, E e3, E e4) { - return null; - } - - public static > ImmutableSortedSet of( - E e1, E e2, E e3, E e4, E e5) { - return null; - } - - public static > ImmutableSortedSet of( - E e1, E e2, E e3, E e4, E e5, E e6, E... remaining) { - return null; - } - - public static > ImmutableSortedSet copyOf(E[] elements) { - return null; - } - - public static ImmutableSortedSet copyOf(Iterable elements) { - return null; - } - - public static ImmutableSortedSet copyOf(Collection elements) { - return null; - } - - public static ImmutableSortedSet copyOf(Iterator elements) { - return null; - } - - public static ImmutableSortedSet copyOf( - Comparator comparator, Iterator elements) { - return null; - } - - public static ImmutableSortedSet copyOf( - Comparator comparator, Iterable elements) { - return null; - } - - public static ImmutableSortedSet copyOf( - Comparator comparator, Collection elements) { - return null; - } - - public static ImmutableSortedSet copyOfSorted(SortedSet sortedSet) { - return null; - } - - public static Builder orderedBy(Comparator comparator) { - return null; - } - - public static > Builder reverseOrder() { - return null; - } - - public static > Builder naturalOrder() { - return null; - } - - public static final class Builder extends ImmutableSet.Builder { - public Builder(Comparator comparator) { +abstract public class ImmutableSortedSet extends ImmutableSortedSetFauxverideShim implements NavigableSet, SortedIterable +{ + protected ImmutableSortedSet() {} + ImmutableSortedSet(Comparator p0){} + ImmutableSortedSet descendingSet = null; + Object writeReplace(){ return null; } + abstract ImmutableSortedSet createDescendingSet(); + abstract ImmutableSortedSet headSetImpl(E p0, boolean p1); + abstract ImmutableSortedSet subSetImpl(E p0, boolean p1, E p2, boolean p3); + abstract ImmutableSortedSet tailSetImpl(E p0, boolean p1); + abstract int indexOf(Object p0); + final Comparator comparator = null; + int unsafeCompare(Object p0, Object p1){ return 0; } + public Comparator comparator(){ return null; } + public E ceiling(E p0){ return null; } + public E first(){ return null; } + public E floor(E p0){ return null; } + public E higher(E p0){ return null; } + public E last(){ return null; } + public E lower(E p0){ return null; } + public ImmutableSortedSet descendingSet(){ return null; } + public ImmutableSortedSet headSet(E p0){ return null; } + public ImmutableSortedSet headSet(E p0, boolean p1){ return null; } + public ImmutableSortedSet subSet(E p0, E p1){ return null; } + public ImmutableSortedSet subSet(E p0, boolean p1, E p2, boolean p3){ return null; } + public ImmutableSortedSet tailSet(E p0){ return null; } + public ImmutableSortedSet tailSet(E p0, boolean p1){ return null; } + public Spliterator spliterator(){ return null; } + public abstract UnmodifiableIterator descendingIterator(); + public abstract UnmodifiableIterator iterator(); + public final E pollFirst(){ return null; } + public final E pollLast(){ return null; } + public static > ImmutableSortedSet.Builder naturalOrder(){ return null; } + public static > ImmutableSortedSet.Builder reverseOrder(){ return null; } + public static > ImmutableSortedSet copyOf(E[] p0){ return null; } + public static > ImmutableSortedSet of(E p0){ return null; } + public static > ImmutableSortedSet of(E p0, E p1){ return null; } + public static > ImmutableSortedSet of(E p0, E p1, E p2){ return null; } + public static > ImmutableSortedSet of(E p0, E p1, E p2, E p3){ return null; } + public static > ImmutableSortedSet of(E p0, E p1, E p2, E p3, E p4){ return null; } + public static > ImmutableSortedSet of(E p0, E p1, E p2, E p3, E p4, E p5, E... p6){ return null; } + public static Collector> toImmutableSortedSet(Comparator p0){ return null; } + public static ImmutableSortedSet.Builder orderedBy(Comparator p0){ return null; } + public static ImmutableSortedSet copyOf(Collection p0){ return null; } + public static ImmutableSortedSet copyOf(Comparator p0, Collection p1){ return null; } + public static ImmutableSortedSet copyOf(Comparator p0, Iterable p1){ return null; } + public static ImmutableSortedSet copyOf(Comparator p0, Iterator p1){ return null; } + public static ImmutableSortedSet copyOf(Iterable p0){ return null; } + public static ImmutableSortedSet copyOf(Iterator p0){ return null; } + public static ImmutableSortedSet copyOfSorted(SortedSet p0){ return null; } + public static ImmutableSortedSet of(){ return null; } + static ImmutableSortedSet construct(Comparator p0, int p1, E... p2){ return null; } + static RegularImmutableSortedSet emptySet(Comparator p0){ return null; } + static int SPLITERATOR_CHARACTERISTICS = 0; + static int unsafeCompare(Comparator p0, Object p1, Object p2){ return 0; } + static public class Builder extends ImmutableSet.Builder + { + protected Builder() {} + ImmutableSortedSet.Builder combine(ImmutableSet.Builder p0){ return null; } + public Builder(Comparator p0){} + public ImmutableSortedSet.Builder add(E p0){ return null; } + public ImmutableSortedSet.Builder add(E... p0){ return null; } + public ImmutableSortedSet.Builder addAll(Iterable p0){ return null; } + public ImmutableSortedSet.Builder addAll(Iterator p0){ return null; } + public ImmutableSortedSet build(){ return null; } + void copy(){} } - - } - } diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/ImmutableSortedSetFauxverideShim.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/ImmutableSortedSetFauxverideShim.java new file mode 100644 index 00000000000..a776c61e945 --- /dev/null +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/ImmutableSortedSetFauxverideShim.java @@ -0,0 +1,22 @@ +// Generated automatically from com.google.common.collect.ImmutableSortedSetFauxverideShim for testing purposes + +package com.google.common.collect; + +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.ImmutableSortedSet; +import java.util.stream.Collector; + +abstract class ImmutableSortedSetFauxverideShim extends ImmutableSet +{ + ImmutableSortedSetFauxverideShim(){} + public static Collector> toImmutableSet(){ return null; } + public static ImmutableSortedSet.Builder builder(){ return null; } + public static ImmutableSortedSet.Builder builderWithExpectedSize(int p0){ return null; } + public static ImmutableSortedSet copyOf(E[] p0){ return null; } + public static ImmutableSortedSet of(E p0){ return null; } + public static ImmutableSortedSet of(E p0, E p1){ return null; } + public static ImmutableSortedSet of(E p0, E p1, E p2){ return null; } + public static ImmutableSortedSet of(E p0, E p1, E p2, E p3){ return null; } + public static ImmutableSortedSet of(E p0, E p1, E p2, E p3, E p4){ return null; } + public static ImmutableSortedSet of(E p0, E p1, E p2, E p3, E p4, E p5, E... p6){ return null; } +} diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/ImmutableTable.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/ImmutableTable.java index 73b3907b352..619f46ec483 100644 --- a/java/ql/test/stubs/guava-30.0/com/google/common/collect/ImmutableTable.java +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/ImmutableTable.java @@ -1,124 +1,69 @@ -/* - * Copyright (C) 2009 The Guava Authors - * - * 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. - */ +// Generated automatically from com.google.common.collect.ImmutableTable for testing purposes package com.google.common.collect; +import com.google.common.collect.AbstractTable; +import com.google.common.collect.ImmutableCollection; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Table; +import com.google.common.collect.UnmodifiableIterator; +import java.io.Serializable; +import java.util.Comparator; +import java.util.Iterator; import java.util.Map; +import java.util.Spliterator; +import java.util.function.BinaryOperator; +import java.util.function.Function; +import java.util.stream.Collector; -public abstract class ImmutableTable extends AbstractTable { - - public static ImmutableTable of() { - return null; - } - - public static ImmutableTable of(R rowKey, C columnKey, V value) { - return null; - } - - public static ImmutableTable copyOf( - Table table) { - return null; - } - - public static Builder builder() { - return null; - } - - public static final class Builder { - public Builder() {} - - public Builder put(R rowKey, C columnKey, V value) { - return null; +abstract public class ImmutableTable extends AbstractTable implements Serializable +{ + ImmutableTable(){} + abstract ImmutableCollection createValues(); + abstract ImmutableSet> createCellSet(); + abstract ImmutableTable.SerializedForm createSerializedForm(); + final Iterator valuesIterator(){ return null; } + final Object writeReplace(){ return null; } + final Spliterator> cellSpliterator(){ return null; } + final UnmodifiableIterator> cellIterator(){ return null; } + public ImmutableCollection values(){ return null; } + public ImmutableMap row(R p0){ return null; } + public ImmutableMap column(C p0){ return null; } + public ImmutableSet columnKeySet(){ return null; } + public ImmutableSet rowKeySet(){ return null; } + public ImmutableSet> cellSet(){ return null; } + public abstract ImmutableMap> columnMap(); + public abstract ImmutableMap> rowMap(); + public boolean contains(Object p0, Object p1){ return false; } + public boolean containsValue(Object p0){ return false; } + public final V put(R p0, C p1, V p2){ return null; } + public final V remove(Object p0, Object p1){ return null; } + public final void clear(){} + public final void putAll(Table p0){} + public static ImmutableTable.Builder builder(){ return null; } + public static ImmutableTable copyOf(Table p0){ return null; } + public static ImmutableTable of(){ return null; } + public static ImmutableTable of(R p0, C p1, V p2){ return null; } + public static Collector> toImmutableTable(Function p0, Function p1, Function p2){ return null; } + public static Collector> toImmutableTable(Function p0, Function p1, Function p2, BinaryOperator p3){ return null; } + static ImmutableTable copyOf(Iterable> p0){ return null; } + static Table.Cell cellOf(R p0, C p1, V p2){ return null; } + static class SerializedForm implements Serializable + { + protected SerializedForm() {} + Object readResolve(){ return null; } + static ImmutableTable.SerializedForm create(ImmutableTable p0, int[] p1, int[] p2){ return null; } } - - public Builder put(Cell cell) { - return null; + static public class Builder + { + ImmutableTable.Builder combine(ImmutableTable.Builder p0){ return null; } + public Builder(){} + public ImmutableTable.Builder orderColumnsBy(Comparator p0){ return null; } + public ImmutableTable.Builder orderRowsBy(Comparator p0){ return null; } + public ImmutableTable.Builder put(R p0, C p1, V p2){ return null; } + public ImmutableTable.Builder put(Table.Cell p0){ return null; } + public ImmutableTable.Builder putAll(Table p0){ return null; } + public ImmutableTable build(){ return null; } } - - public Builder putAll(Table table) { - return null; - } - - public ImmutableTable build() { - return null; - } - - } - @Override - public ImmutableSet> cellSet() { - return null; - } - - @Override - public ImmutableCollection values() { - return null; - } - - @Override - public ImmutableMap column(C columnKey) { - return null; - } - - @Override - public ImmutableSet columnKeySet() { - return null; - } - - @Override - public abstract ImmutableMap> columnMap(); - - @Override - public ImmutableMap row(R rowKey) { - return null; - } - - @Override - public ImmutableSet rowKeySet() { - return null; - } - - @Override - public abstract ImmutableMap> rowMap(); - - @Override - public boolean contains(Object rowKey, Object columnKey) { - return false; - } - - @Override - public boolean containsValue(Object value) { - return false; - } - - @Override - public final void clear() { - } - - @Override - public final V put(R rowKey, C columnKey, V value) { - return null; - } - - @Override - public final void putAll(Table table) { - } - - @Override - public final V remove(Object rowKey, Object columnKey) { - return null; - } - } diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/Iterables.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/Iterables.java new file mode 100644 index 00000000000..7a2acbdf8ad --- /dev/null +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/Iterables.java @@ -0,0 +1,63 @@ +// Generated automatically from com.google.common.collect.Iterables for testing purposes + +package com.google.common.collect; + +import com.google.common.base.Function; +import com.google.common.base.Optional; +import com.google.common.base.Predicate; +import com.google.common.collect.ImmutableCollection; +import java.util.Collection; +import java.util.Comparator; +import java.util.Iterator; +import java.util.List; + +public class Iterables +{ + protected Iterables() {} + public static Iterable unmodifiableIterable(ImmutableCollection p0){ return null; } + public static Iterable transform(Iterable p0, Function p1){ return null; } + public static Iterable> paddedPartition(Iterable p0, int p1){ return null; } + public static Iterable> partition(Iterable p0, int p1){ return null; } + public static Iterable concat(Iterable> p0){ return null; } + public static Iterable concat(Iterable p0, Iterable p1){ return null; } + public static Iterable concat(Iterable p0, Iterable p1, Iterable p2){ return null; } + public static Iterable concat(Iterable p0, Iterable p1, Iterable p2, Iterable p3){ return null; } + public static Iterable concat(Iterable... p0){ return null; } + public static Iterable consumingIterable(Iterable p0){ return null; } + public static Iterable cycle(Iterable p0){ return null; } + public static Iterable cycle(T... p0){ return null; } + public static Iterable filter(Iterable p0, Class p1){ return null; } + public static Iterable filter(Iterable p0, Predicate p1){ return null; } + public static Iterable limit(Iterable p0, int p1){ return null; } + public static Iterable mergeSorted(Iterable> p0, Comparator p1){ return null; } + public static Iterable skip(Iterable p0, int p1){ return null; } + public static Iterable unmodifiableIterable(Iterable p0){ return null; } + public static Optional tryFind(Iterable p0, Predicate p1){ return null; } + public static T find(Iterable p0, Predicate p1, T p2){ return null; } + public static T find(Iterable p0, Predicate p1){ return null; } + public static T get(Iterable p0, int p1, T p2){ return null; } + public static T get(Iterable p0, int p1){ return null; } + public static T getFirst(Iterable p0, T p1){ return null; } + public static T getLast(Iterable p0, T p1){ return null; } + public static T getLast(Iterable p0){ return null; } + public static T getOnlyElement(Iterable p0, T p1){ return null; } + public static T getOnlyElement(Iterable p0){ return null; } + public static T[] toArray(Iterable p0, Class p1){ return null; } + public static boolean addAll(Collection p0, Iterable p1){ return false; } + public static boolean all(Iterable p0, Predicate p1){ return false; } + public static boolean any(Iterable p0, Predicate p1){ return false; } + public static boolean removeIf(Iterable p0, Predicate p1){ return false; } + public static int indexOf(Iterable p0, Predicate p1){ return 0; } + public static String toString(Iterable p0){ return null; } + public static boolean contains(Iterable p0, Object p1){ return false; } + public static boolean elementsEqual(Iterable p0, Iterable p1){ return false; } + public static boolean isEmpty(Iterable p0){ return false; } + public static boolean removeAll(Iterable p0, Collection p1){ return false; } + public static boolean retainAll(Iterable p0, Collection p1){ return false; } + public static int frequency(Iterable p0, Object p1){ return 0; } + public static int size(Iterable p0){ return 0; } + static Function, Iterator> toIterator(){ return null; } + static T removeFirstMatching(Iterable p0, Predicate p1){ return null; } + static T[] toArray(Iterable p0, T[] p1){ return null; } + static Object[] toArray(Iterable p0){ return null; } +} diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/Iterators.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/Iterators.java new file mode 100644 index 00000000000..d4ced7dbb2e --- /dev/null +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/Iterators.java @@ -0,0 +1,77 @@ +// Generated automatically from com.google.common.collect.Iterators for testing purposes + +package com.google.common.collect; + +import com.google.common.base.Function; +import com.google.common.base.Optional; +import com.google.common.base.Predicate; +import com.google.common.collect.PeekingIterator; +import com.google.common.collect.UnmodifiableIterator; +import com.google.common.collect.UnmodifiableListIterator; +import java.util.Collection; +import java.util.Comparator; +import java.util.Enumeration; +import java.util.Iterator; +import java.util.List; +import java.util.ListIterator; + +public class Iterators +{ + protected Iterators() {} + public static Iterator transform(Iterator p0, Function p1){ return null; } + public static Enumeration asEnumeration(Iterator p0){ return null; } + public static Iterator concat(Iterator> p0){ return null; } + public static Iterator concat(Iterator p0, Iterator p1){ return null; } + public static Iterator concat(Iterator p0, Iterator p1, Iterator p2){ return null; } + public static Iterator concat(Iterator p0, Iterator p1, Iterator p2, Iterator p3){ return null; } + public static Iterator concat(Iterator... p0){ return null; } + public static Iterator consumingIterator(Iterator p0){ return null; } + public static Iterator cycle(Iterable p0){ return null; } + public static Iterator cycle(T... p0){ return null; } + public static Iterator limit(Iterator p0, int p1){ return null; } + public static Optional tryFind(Iterator p0, Predicate p1){ return null; } + public static PeekingIterator peekingIterator(Iterator p0){ return null; } + public static PeekingIterator peekingIterator(PeekingIterator p0){ return null; } + public static T find(Iterator p0, Predicate p1, T p2){ return null; } + public static T find(Iterator p0, Predicate p1){ return null; } + public static T get(Iterator p0, int p1, T p2){ return null; } + public static T get(Iterator p0, int p1){ return null; } + public static T getLast(Iterator p0, T p1){ return null; } + public static T getLast(Iterator p0){ return null; } + public static T getNext(Iterator p0, T p1){ return null; } + public static T getOnlyElement(Iterator p0, T p1){ return null; } + public static T getOnlyElement(Iterator p0){ return null; } + public static T[] toArray(Iterator p0, Class p1){ return null; } + public static UnmodifiableIterator> paddedPartition(Iterator p0, int p1){ return null; } + public static UnmodifiableIterator> partition(Iterator p0, int p1){ return null; } + public static UnmodifiableIterator filter(Iterator p0, Class p1){ return null; } + public static UnmodifiableIterator filter(Iterator p0, Predicate p1){ return null; } + public static UnmodifiableIterator forArray(T... p0){ return null; } + public static UnmodifiableIterator forEnumeration(Enumeration p0){ return null; } + public static UnmodifiableIterator mergeSorted(Iterable> p0, Comparator p1){ return null; } + public static UnmodifiableIterator singletonIterator(T p0){ return null; } + public static UnmodifiableIterator unmodifiableIterator(Iterator p0){ return null; } + public static UnmodifiableIterator unmodifiableIterator(UnmodifiableIterator p0){ return null; } + public static boolean addAll(Collection p0, Iterator p1){ return false; } + public static boolean all(Iterator p0, Predicate p1){ return false; } + public static boolean any(Iterator p0, Predicate p1){ return false; } + public static boolean removeIf(Iterator p0, Predicate p1){ return false; } + public static int indexOf(Iterator p0, Predicate p1){ return 0; } + public static String toString(Iterator p0){ return null; } + public static boolean contains(Iterator p0, Object p1){ return false; } + public static boolean elementsEqual(Iterator p0, Iterator p1){ return false; } + public static boolean removeAll(Iterator p0, Collection p1){ return false; } + public static boolean retainAll(Iterator p0, Collection p1){ return false; } + public static int advance(Iterator p0, int p1){ return 0; } + public static int frequency(Iterator p0, Object p1){ return 0; } + public static int size(Iterator p0){ return 0; } + static Iterator concatNoDefensiveCopy(Iterator... p0){ return null; } + static Iterator emptyModifiableIterator(){ return null; } + static ListIterator cast(Iterator p0){ return null; } + static T pollNext(Iterator p0){ return null; } + static UnmodifiableIterator emptyIterator(){ return null; } + static UnmodifiableListIterator emptyListIterator(){ return null; } + static UnmodifiableListIterator forArray(T[] p0, int p1, int p2, int p3){ return null; } + static void checkNonnegative(int p0){} + static void clear(Iterator p0){} +} diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/LinkedHashMultimap.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/LinkedHashMultimap.java new file mode 100644 index 00000000000..0f6781836f2 --- /dev/null +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/LinkedHashMultimap.java @@ -0,0 +1,32 @@ +// Generated automatically from com.google.common.collect.LinkedHashMultimap for testing purposes + +package com.google.common.collect; + +import com.google.common.collect.LinkedHashMultimapGwtSerializationDependencies; +import com.google.common.collect.Multimap; +import java.util.Collection; +import java.util.Iterator; +import java.util.Map; +import java.util.Set; +import java.util.Spliterator; + +public class LinkedHashMultimap extends LinkedHashMultimapGwtSerializationDependencies +{ + protected LinkedHashMultimap() {} + Collection createCollection(K p0){ return null; } + Iterator> entryIterator(){ return null; } + Iterator valueIterator(){ return null; } + Set createCollection(){ return null; } + Spliterator> entrySpliterator(){ return null; } + Spliterator valueSpliterator(){ return null; } + int valueSetCapacity = 0; + public Collection values(){ return null; } + public Set keySet(){ return null; } + public Set> entries(){ return null; } + public Set replaceValues(K p0, Iterable p1){ return null; } + public static LinkedHashMultimap create(){ return null; } + public static LinkedHashMultimap create(Multimap p0){ return null; } + public static LinkedHashMultimap create(int p0, int p1){ return null; } + public void clear(){} + static double VALUE_SET_LOAD_FACTOR = 0; +} diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/LinkedHashMultimapGwtSerializationDependencies.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/LinkedHashMultimapGwtSerializationDependencies.java new file mode 100644 index 00000000000..b552ae47c75 --- /dev/null +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/LinkedHashMultimapGwtSerializationDependencies.java @@ -0,0 +1,13 @@ +// Generated automatically from com.google.common.collect.LinkedHashMultimapGwtSerializationDependencies for testing purposes + +package com.google.common.collect; + +import com.google.common.collect.AbstractSetMultimap; +import java.util.Collection; +import java.util.Map; + +abstract class LinkedHashMultimapGwtSerializationDependencies extends AbstractSetMultimap +{ + protected LinkedHashMultimapGwtSerializationDependencies() {} + LinkedHashMultimapGwtSerializationDependencies(Map> p0){} +} diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/LinkedHashMultiset.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/LinkedHashMultiset.java new file mode 100644 index 00000000000..e25143c06f6 --- /dev/null +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/LinkedHashMultiset.java @@ -0,0 +1,13 @@ +// Generated automatically from com.google.common.collect.LinkedHashMultiset for testing purposes + +package com.google.common.collect; + +import com.google.common.collect.AbstractMapBasedMultiset; + +public class LinkedHashMultiset extends AbstractMapBasedMultiset +{ + protected LinkedHashMultiset() {} + public static LinkedHashMultiset create(){ return null; } + public static LinkedHashMultiset create(Iterable p0){ return null; } + public static LinkedHashMultiset create(int p0){ return null; } +} diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/LinkedListMultimap.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/LinkedListMultimap.java new file mode 100644 index 00000000000..0103056dfcf --- /dev/null +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/LinkedListMultimap.java @@ -0,0 +1,39 @@ +// Generated automatically from com.google.common.collect.LinkedListMultimap for testing purposes + +package com.google.common.collect; + +import com.google.common.collect.AbstractMultimap; +import com.google.common.collect.ListMultimap; +import com.google.common.collect.Multimap; +import com.google.common.collect.Multiset; +import java.io.Serializable; +import java.util.Collection; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Set; + +public class LinkedListMultimap extends AbstractMultimap implements ListMultimap, Serializable +{ + Iterator> entryIterator(){ return null; } + LinkedListMultimap(){} + List> createEntries(){ return null; } + List createValues(){ return null; } + Map> createAsMap(){ return null; } + Multiset createKeys(){ return null; } + Set createKeySet(){ return null; } + public List> entries(){ return null; } + public List get(K p0){ return null; } + public List removeAll(Object p0){ return null; } + public List replaceValues(K p0, Iterable p1){ return null; } + public List values(){ return null; } + public boolean containsKey(Object p0){ return false; } + public boolean containsValue(Object p0){ return false; } + public boolean isEmpty(){ return false; } + public boolean put(K p0, V p1){ return false; } + public int size(){ return 0; } + public static LinkedListMultimap create(){ return null; } + public static LinkedListMultimap create(Multimap p0){ return null; } + public static LinkedListMultimap create(int p0){ return null; } + public void clear(){} +} diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/ListMultimap.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/ListMultimap.java new file mode 100644 index 00000000000..da8c80f8bae --- /dev/null +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/ListMultimap.java @@ -0,0 +1,17 @@ +// Generated automatically from com.google.common.collect.ListMultimap for testing purposes + +package com.google.common.collect; + +import com.google.common.collect.Multimap; +import java.util.Collection; +import java.util.List; +import java.util.Map; + +public interface ListMultimap extends Multimap +{ + List get(K p0); + List removeAll(Object p0); + List replaceValues(K p0, Iterable p1); + Map> asMap(); + boolean equals(Object p0); +} diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/Lists.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/Lists.java new file mode 100644 index 00000000000..72f7c955c8c --- /dev/null +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/Lists.java @@ -0,0 +1,45 @@ +// Generated automatically from com.google.common.collect.Lists for testing purposes + +package com.google.common.collect; + +import com.google.common.base.Function; +import com.google.common.collect.ImmutableList; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; +import java.util.ListIterator; +import java.util.concurrent.CopyOnWriteArrayList; + +public class Lists +{ + protected Lists() {} + public static List> cartesianProduct(List... p0){ return null; } + public static List> cartesianProduct(List> p0){ return null; } + public static ArrayList newArrayList(){ return null; } + public static ArrayList newArrayList(E... p0){ return null; } + public static ArrayList newArrayList(Iterable p0){ return null; } + public static ArrayList newArrayList(Iterator p0){ return null; } + public static ArrayList newArrayListWithCapacity(int p0){ return null; } + public static ArrayList newArrayListWithExpectedSize(int p0){ return null; } + public static CopyOnWriteArrayList newCopyOnWriteArrayList(){ return null; } + public static CopyOnWriteArrayList newCopyOnWriteArrayList(Iterable p0){ return null; } + public static LinkedList newLinkedList(){ return null; } + public static LinkedList newLinkedList(Iterable p0){ return null; } + public static List asList(E p0, E p1, E[] p2){ return null; } + public static List asList(E p0, E[] p1){ return null; } + public static List transform(List p0, Function p1){ return null; } + public static List> partition(List p0, int p1){ return null; } + public static List reverse(List p0){ return null; } + public static ImmutableList charactersOf(String p0){ return null; } + public static List charactersOf(CharSequence p0){ return null; } + static List subListImpl(List p0, int p1, int p2){ return null; } + static ListIterator listIteratorImpl(List p0, int p1){ return null; } + static boolean addAllImpl(List p0, int p1, Iterable p2){ return false; } + static List cast(Iterable p0){ return null; } + static boolean equalsImpl(List p0, Object p1){ return false; } + static int computeArrayListCapacity(int p0){ return 0; } + static int hashCodeImpl(List p0){ return 0; } + static int indexOfImpl(List p0, Object p1){ return 0; } + static int lastIndexOfImpl(List p0, Object p1){ return 0; } +} diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/MapDifference.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/MapDifference.java new file mode 100644 index 00000000000..b1a2efcf548 --- /dev/null +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/MapDifference.java @@ -0,0 +1,23 @@ +// Generated automatically from com.google.common.collect.MapDifference for testing purposes + +package com.google.common.collect; + +import java.util.Map; + +public interface MapDifference +{ + Map> entriesDiffering(); + Map entriesInCommon(); + Map entriesOnlyOnLeft(); + Map entriesOnlyOnRight(); + boolean areEqual(); + boolean equals(Object p0); + int hashCode(); + static public interface ValueDifference + { + V leftValue(); + V rightValue(); + boolean equals(Object p0); + int hashCode(); + } +} diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/Maps.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/Maps.java new file mode 100644 index 00000000000..32e49fefa08 --- /dev/null +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/Maps.java @@ -0,0 +1,136 @@ +// Generated automatically from com.google.common.collect.Multimaps for testing purposes, and manually adjusted. + +package com.google.common.collect; + +import com.google.common.base.Converter; +import com.google.common.base.Equivalence; +import com.google.common.base.Function; +import com.google.common.base.Predicate; +import com.google.common.collect.BiMap; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.MapDifference; +import com.google.common.collect.Range; +import com.google.common.collect.SortedMapDifference; +import com.google.common.collect.UnmodifiableIterator; +import java.util.AbstractMap; +import java.util.Collection; +import java.util.Comparator; +import java.util.EnumMap; +import java.util.HashMap; +import java.util.IdentityHashMap; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.NavigableMap; +import java.util.NavigableSet; +import java.util.Properties; +import java.util.Set; +import java.util.SortedMap; +import java.util.SortedSet; +import java.util.Spliterator; +import java.util.TreeMap; +import java.util.concurrent.ConcurrentMap; +import java.util.function.BinaryOperator; +import java.util.function.Consumer; +import java.util.stream.Collector; + +public class Maps +{ + protected Maps() {} + abstract static class IteratorBasedAbstractMap extends AbstractMap + { + IteratorBasedAbstractMap(){} + Spliterator> entrySpliterator(){ return null; } + abstract Iterator> entryIterator(); + public Set> entrySet(){ return null; } + public abstract int size(); + public void clear(){} + void forEachEntry(Consumer> p0){} + } + public static Converter asConverter(BiMap p0){ return null; } + public static TreeMap newTreeMap(Comparator p0){ return null; } + public static TreeMap newTreeMap(){ return null; } + public static , V> NavigableMap subMap(NavigableMap p0, Range p1){ return null; } + public static , V> EnumMap newEnumMap(Class p0){ return null; } + public static , V> EnumMap newEnumMap(Map p0){ return null; } + public static , V> ImmutableMap immutableEnumMap(Map p0){ return null; } + public static Map transformEntries(Map p0, Maps.EntryTransformer p1){ return null; } + public static Map transformValues(Map p0, Function p1){ return null; } + public static NavigableMap transformEntries(NavigableMap p0, Maps.EntryTransformer p1){ return null; } + public static NavigableMap transformValues(NavigableMap p0, Function p1){ return null; } + public static SortedMap transformEntries(SortedMap p0, Maps.EntryTransformer p1){ return null; } + public static SortedMap transformValues(SortedMap p0, Function p1){ return null; } + public static BiMap filterEntries(BiMap p0, Predicate> p1){ return null; } + public static BiMap filterKeys(BiMap p0, Predicate p1){ return null; } + public static BiMap filterValues(BiMap p0, Predicate p1){ return null; } + public static BiMap synchronizedBiMap(BiMap p0){ return null; } + public static BiMap unmodifiableBiMap(BiMap p0){ return null; } + public static ConcurrentMap newConcurrentMap(){ return null; } + public static HashMap newHashMap(){ return null; } + public static HashMap newHashMap(Map p0){ return null; } + public static HashMap newHashMapWithExpectedSize(int p0){ return null; } + public static IdentityHashMap newIdentityHashMap(){ return null; } + public static ImmutableMap toMap(Iterable p0, Function p1){ return null; } + public static ImmutableMap toMap(Iterator p0, Function p1){ return null; } + public static ImmutableMap uniqueIndex(Iterable p0, Function p1){ return null; } + public static ImmutableMap uniqueIndex(Iterator p0, Function p1){ return null; } + public static LinkedHashMap newLinkedHashMap(){ return null; } + public static LinkedHashMap newLinkedHashMap(Map p0){ return null; } + public static LinkedHashMap newLinkedHashMapWithExpectedSize(int p0){ return null; } + public static Map.Entry immutableEntry(K p0, V p1){ return null; } + public static Map asMap(Set p0, Function p1){ return null; } + public static Map filterEntries(Map p0, Predicate> p1){ return null; } + public static Map filterKeys(Map p0, Predicate p1){ return null; } + public static Map filterValues(Map p0, Predicate p1){ return null; } + public static MapDifference difference(Map p0, Map p1){ return null; } + public static MapDifference difference(Map p0, Map p1, Equivalence p2){ return null; } + public static NavigableMap asMap(NavigableSet p0, Function p1){ return null; } + public static NavigableMap filterEntries(NavigableMap p0, Predicate> p1){ return null; } + public static NavigableMap filterKeys(NavigableMap p0, Predicate p1){ return null; } + public static NavigableMap filterValues(NavigableMap p0, Predicate p1){ return null; } + public static NavigableMap synchronizedNavigableMap(NavigableMap p0){ return null; } + public static NavigableMap unmodifiableNavigableMap(NavigableMap p0){ return null; } + public static SortedMap asMap(SortedSet p0, Function p1){ return null; } + public static SortedMap filterEntries(SortedMap p0, Predicate> p1){ return null; } + public static SortedMap filterKeys(SortedMap p0, Predicate p1){ return null; } + public static SortedMap filterValues(SortedMap p0, Predicate p1){ return null; } + public static SortedMapDifference difference(SortedMap p0, Map p1){ return null; } + public static TreeMap newTreeMap(SortedMap p0){ return null; } + public static , V> Collector> toImmutableEnumMap(Function p0, Function p1){ return null; } + public static , V> Collector> toImmutableEnumMap(Function p0, Function p1, BinaryOperator p2){ return null; } + public static ImmutableMap fromProperties(Properties p0){ return null; } + static Comparator orNaturalOrder(Comparator p0){ return null; } + static ImmutableMap indexMap(Collection p0){ return null; } + static Function, Map.Entry> asEntryToEntryFunction(Maps.EntryTransformer p0){ return null; } + static Function, V2> asEntryToValueFunction(Maps.EntryTransformer p0){ return null; } + static Function asValueToValueFunction(Maps.EntryTransformer p0, K p1){ return null; } + static Maps.EntryTransformer asEntryTransformer(Function p0){ return null; } + static Iterator keyIterator(Iterator> p0){ return null; } + static Iterator> asMapEntryIterator(Set p0, Function p1){ return null; } + static Iterator valueIterator(Iterator> p0){ return null; } + static Map.Entry unmodifiableEntry(Map.Entry p0){ return null; } + static Set> unmodifiableEntrySet(Set> p0){ return null; } + static UnmodifiableIterator> unmodifiableEntryIterator(Iterator> p0){ return null; } + static boolean containsEntryImpl(Collection> p0, Object p1){ return false; } + static boolean removeEntryImpl(Collection> p0, Object p1){ return false; } + static void putAllImpl(Map p0, Map p1){} + static Function, K> keyFunction(){ return null; } + static K keyOrNull(Map.Entry p0){ return null; } + static Predicate> keyPredicateOnEntries(Predicate p0){ return null; } + static Map.Entry transformEntry(Maps.EntryTransformer p0, Map.Entry p1){ return null; } + static Function, V> valueFunction(){ return null; } + static Predicate> valuePredicateOnEntries(Predicate p0){ return null; } + static V safeGet(Map p0, Object p1){ return null; } + static V safeRemove(Map p0, Object p1){ return null; } + static V valueOrNull(Map.Entry p0){ return null; } + static String toStringImpl(Map p0){ return null; } + static boolean containsKeyImpl(Map p0, Object p1){ return false; } + static boolean containsValueImpl(Map p0, Object p1){ return false; } + static boolean equalsImpl(Map p0, Object p1){ return false; } + static boolean safeContainsKey(Map p0, Object p1){ return false; } + static int capacity(int p0){ return 0; } + static public interface EntryTransformer + { + V2 transformEntry(K p0, V1 p1); + } +} diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/Multimaps.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/Multimaps.java new file mode 100644 index 00000000000..5e424d671fd --- /dev/null +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/Multimaps.java @@ -0,0 +1,65 @@ +// Generated automatically from com.google.common.collect.Multimaps for testing purposes, and manually adjusted. + +package com.google.common.collect; + +import com.google.common.base.Function; +import com.google.common.base.Predicate; +import com.google.common.base.Supplier; +import com.google.common.collect.ImmutableListMultimap; +import com.google.common.collect.ImmutableMultimap; +import com.google.common.collect.ImmutableSetMultimap; +import com.google.common.collect.ListMultimap; +import com.google.common.collect.Maps; +import com.google.common.collect.Multimap; +import com.google.common.collect.SetMultimap; +import com.google.common.collect.SortedSetMultimap; +import java.util.Collection; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.SortedSet; +import java.util.stream.Collector; +import java.util.stream.Stream; + +public class Multimaps +{ + protected Multimaps() {} + public static > M invertFrom(Multimap p0, M p1){ return null; } + public static ListMultimap transformEntries(ListMultimap p0, Maps.EntryTransformer p1){ return null; } + public static ListMultimap transformValues(ListMultimap p0, Function p1){ return null; } + public static Multimap transformEntries(Multimap p0, Maps.EntryTransformer p1){ return null; } + public static Multimap transformValues(Multimap p0, Function p1){ return null; } + public static ImmutableListMultimap index(Iterable p0, Function p1){ return null; } + public static ImmutableListMultimap index(Iterator p0, Function p1){ return null; } + public static ListMultimap filterKeys(ListMultimap p0, Predicate p1){ return null; } + public static ListMultimap newListMultimap(Map> p0, Supplier> p1){ return null; } + public static ListMultimap synchronizedListMultimap(ListMultimap p0){ return null; } + public static ListMultimap unmodifiableListMultimap(ImmutableListMultimap p0){ return null; } + public static ListMultimap unmodifiableListMultimap(ListMultimap p0){ return null; } + public static Map> asMap(Multimap p0){ return null; } + public static Map> asMap(ListMultimap p0){ return null; } + public static Map> asMap(SetMultimap p0){ return null; } + public static Map> asMap(SortedSetMultimap p0){ return null; } + public static Multimap filterEntries(Multimap p0, Predicate> p1){ return null; } + public static Multimap filterKeys(Multimap p0, Predicate p1){ return null; } + public static Multimap filterValues(Multimap p0, Predicate p1){ return null; } + public static Multimap newMultimap(Map> p0, Supplier> p1){ return null; } + public static Multimap synchronizedMultimap(Multimap p0){ return null; } + public static Multimap unmodifiableMultimap(ImmutableMultimap p0){ return null; } + public static Multimap unmodifiableMultimap(Multimap p0){ return null; } + public static SetMultimap filterEntries(SetMultimap p0, Predicate> p1){ return null; } + public static SetMultimap filterKeys(SetMultimap p0, Predicate p1){ return null; } + public static SetMultimap filterValues(SetMultimap p0, Predicate p1){ return null; } + public static SetMultimap forMap(Map p0){ return null; } + public static SetMultimap newSetMultimap(Map> p0, Supplier> p1){ return null; } + public static SetMultimap synchronizedSetMultimap(SetMultimap p0){ return null; } + public static SetMultimap unmodifiableSetMultimap(ImmutableSetMultimap p0){ return null; } + public static SetMultimap unmodifiableSetMultimap(SetMultimap p0){ return null; } + public static SortedSetMultimap newSortedSetMultimap(Map> p0, Supplier> p1){ return null; } + public static SortedSetMultimap synchronizedSortedSetMultimap(SortedSetMultimap p0){ return null; } + public static SortedSetMultimap unmodifiableSortedSetMultimap(SortedSetMultimap p0){ return null; } + public static > Collector flatteningToMultimap(Function p0, Function> p1, Supplier p2){ return null; } + public static > Collector toMultimap(Function p0, Function p1, Supplier p2){ return null; } + static boolean equalsImpl(Multimap p0, Object p1){ return false; } +} diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/Multisets.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/Multisets.java new file mode 100644 index 00000000000..f858c310528 --- /dev/null +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/Multisets.java @@ -0,0 +1,47 @@ +// Generated automatically from com.google.common.collect.Multisets for testing purposes + +package com.google.common.collect; + +import com.google.common.base.Predicate; +import com.google.common.collect.ImmutableMultiset; +import com.google.common.collect.Multiset; +import com.google.common.collect.SortedMultiset; +import java.util.Collection; +import java.util.Iterator; +import java.util.Spliterator; +import java.util.function.Function; +import java.util.function.Supplier; +import java.util.function.ToIntFunction; +import java.util.stream.Collector; + +public class Multisets +{ + protected Multisets() {} + public static ImmutableMultiset copyHighestCountFirst(Multiset p0){ return null; } + public static Multiset.Entry immutableEntry(E p0, int p1){ return null; } + public static Multiset difference(Multiset p0, Multiset p1){ return null; } + public static Multiset filter(Multiset p0, Predicate p1){ return null; } + public static Multiset intersection(Multiset p0, Multiset p1){ return null; } + public static Multiset sum(Multiset p0, Multiset p1){ return null; } + public static Multiset union(Multiset p0, Multiset p1){ return null; } + public static Multiset unmodifiableMultiset(ImmutableMultiset p0){ return null; } + public static Multiset unmodifiableMultiset(Multiset p0){ return null; } + public static SortedMultiset unmodifiableSortedMultiset(SortedMultiset p0){ return null; } + public static > Collector toMultiset(Function p0, ToIntFunction p1, Supplier p2){ return null; } + public static boolean containsOccurrences(Multiset p0, Multiset p1){ return false; } + public static boolean removeOccurrences(Multiset p0, Iterable p1){ return false; } + public static boolean removeOccurrences(Multiset p0, Multiset p1){ return false; } + public static boolean retainOccurrences(Multiset p0, Multiset p1){ return false; } + static Iterator elementIterator(Iterator> p0){ return null; } + static Iterator iteratorImpl(Multiset p0){ return null; } + static Spliterator spliteratorImpl(Multiset p0){ return null; } + static boolean addAllImpl(Multiset p0, Collection p1){ return false; } + static boolean setCountImpl(Multiset p0, E p1, int p2, int p3){ return false; } + static int setCountImpl(Multiset p0, E p1, int p2){ return 0; } + static Multiset cast(Iterable p0){ return null; } + static boolean equalsImpl(Multiset p0, Object p1){ return false; } + static boolean removeAllImpl(Multiset p0, Collection p1){ return false; } + static boolean retainAllImpl(Multiset p0, Collection p1){ return false; } + static int inferDistinctElements(Iterable p0){ return 0; } + static int linearTimeSizeImpl(Multiset p0){ return 0; } +} diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/MutableClassToInstanceMap.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/MutableClassToInstanceMap.java new file mode 100644 index 00000000000..02c7f11227f --- /dev/null +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/MutableClassToInstanceMap.java @@ -0,0 +1,22 @@ +// Generated automatically from com.google.common.collect.MutableClassToInstanceMap for testing purposes + +package com.google.common.collect; + +import com.google.common.collect.ClassToInstanceMap; +import com.google.common.collect.ForwardingMap; +import java.io.Serializable; +import java.util.Map; +import java.util.Set; + +public class MutableClassToInstanceMap extends ForwardingMap, B> implements ClassToInstanceMap, Serializable +{ + protected MutableClassToInstanceMap() {} + protected Map, B> delegate(){ return null; } + public T getInstance(Class p0){ return null; } + public T putInstance(Class p0, T p1){ return null; } + public B put(Class p0, B p1){ return null; } + public Set, B>> entrySet(){ return null; } + public static MutableClassToInstanceMap create(){ return null; } + public static MutableClassToInstanceMap create(Map, B> p0){ return null; } + public void putAll(Map, ? extends B> p0){} +} diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/Ordering.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/Ordering.java new file mode 100644 index 00000000000..a6114bdea3e --- /dev/null +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/Ordering.java @@ -0,0 +1,51 @@ +// Generated automatically from com.google.common.collect.Ordering for testing purposes + +package com.google.common.collect; + +import com.google.common.base.Function; +import com.google.common.collect.ImmutableList; +import java.util.Comparator; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +abstract public class Ordering implements Comparator +{ + Ordering> onKeys(){ return null; } + protected Ordering(){} + public E max(E p0, E p1){ return null; } + public E max(E p0, E p1, E p2, E... p3){ return null; } + public E max(Iterable p0){ return null; } + public E max(Iterator p0){ return null; } + public E min(E p0, E p1){ return null; } + public E min(E p0, E p1, E p2, E... p3){ return null; } + public E min(Iterable p0){ return null; } + public E min(Iterator p0){ return null; } + public ImmutableList immutableSortedCopy(Iterable p0){ return null; } + public List greatestOf(Iterable p0, int p1){ return null; } + public List greatestOf(Iterator p0, int p1){ return null; } + public List leastOf(Iterable p0, int p1){ return null; } + public List leastOf(Iterator p0, int p1){ return null; } + public List sortedCopy(Iterable p0){ return null; } + public Ordering onResultOf(Function p0){ return null; } + public Ordering> lexicographical(){ return null; } + public Ordering nullsFirst(){ return null; } + public Ordering nullsLast(){ return null; } + public Ordering reverse(){ return null; } + public Ordering compound(Comparator p0){ return null; } + public abstract int compare(T p0, T p1); + public boolean isOrdered(Iterable p0){ return false; } + public boolean isStrictlyOrdered(Iterable p0){ return false; } + public int binarySearch(List p0, T p1){ return 0; } + public static Ordering natural(){ return null; } + public static Ordering compound(Iterable> p0){ return null; } + public static Ordering explicit(List p0){ return null; } + public static Ordering explicit(T p0, T... p1){ return null; } + public static Ordering from(Comparator p0){ return null; } + public static Ordering from(Ordering p0){ return null; } + public static Ordering allEqual(){ return null; } + public static Ordering arbitrary(){ return null; } + public static Ordering usingToString(){ return null; } + static int LEFT_IS_GREATER = 0; + static int RIGHT_IS_GREATER = 0; +} diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/PeekingIterator.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/PeekingIterator.java new file mode 100644 index 00000000000..f84b92e41f6 --- /dev/null +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/PeekingIterator.java @@ -0,0 +1,12 @@ +// Generated automatically from com.google.common.collect.PeekingIterator for testing purposes + +package com.google.common.collect; + +import java.util.Iterator; + +public interface PeekingIterator extends Iterator +{ + E next(); + E peek(); + void remove(); +} diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/Queues.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/Queues.java new file mode 100644 index 00000000000..981720063fa --- /dev/null +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/Queues.java @@ -0,0 +1,45 @@ +// Generated automatically from com.google.common.collect.Queues for testing purposes + +package com.google.common.collect; + +import java.time.Duration; +import java.util.ArrayDeque; +import java.util.Collection; +import java.util.Deque; +import java.util.PriorityQueue; +import java.util.Queue; +import java.util.concurrent.ArrayBlockingQueue; +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.ConcurrentLinkedQueue; +import java.util.concurrent.LinkedBlockingDeque; +import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.PriorityBlockingQueue; +import java.util.concurrent.SynchronousQueue; +import java.util.concurrent.TimeUnit; + +public class Queues +{ + protected Queues() {} + public static PriorityBlockingQueue newPriorityBlockingQueue(){ return null; } + public static PriorityBlockingQueue newPriorityBlockingQueue(Iterable p0){ return null; } + public static PriorityQueue newPriorityQueue(){ return null; } + public static PriorityQueue newPriorityQueue(Iterable p0){ return null; } + public static ArrayBlockingQueue newArrayBlockingQueue(int p0){ return null; } + public static ArrayDeque newArrayDeque(){ return null; } + public static ArrayDeque newArrayDeque(Iterable p0){ return null; } + public static ConcurrentLinkedQueue newConcurrentLinkedQueue(){ return null; } + public static ConcurrentLinkedQueue newConcurrentLinkedQueue(Iterable p0){ return null; } + public static Deque synchronizedDeque(Deque p0){ return null; } + public static LinkedBlockingDeque newLinkedBlockingDeque(){ return null; } + public static LinkedBlockingDeque newLinkedBlockingDeque(Iterable p0){ return null; } + public static LinkedBlockingDeque newLinkedBlockingDeque(int p0){ return null; } + public static LinkedBlockingQueue newLinkedBlockingQueue(){ return null; } + public static LinkedBlockingQueue newLinkedBlockingQueue(Iterable p0){ return null; } + public static LinkedBlockingQueue newLinkedBlockingQueue(int p0){ return null; } + public static Queue synchronizedQueue(Queue p0){ return null; } + public static SynchronousQueue newSynchronousQueue(){ return null; } + public static int drain(BlockingQueue p0, Collection p1, int p2, Duration p3){ return 0; } + public static int drain(BlockingQueue p0, Collection p1, int p2, long p3, TimeUnit p4){ return 0; } + public static int drainUninterruptibly(BlockingQueue p0, Collection p1, int p2, Duration p3){ return 0; } + public static int drainUninterruptibly(BlockingQueue p0, Collection p1, int p2, long p3, TimeUnit p4){ return 0; } +} diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/Range.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/Range.java new file mode 100644 index 00000000000..77263678c28 --- /dev/null +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/Range.java @@ -0,0 +1,58 @@ +// Generated automatically from com.google.common.collect.Range for testing purposes + +package com.google.common.collect; + +import com.google.common.base.Function; +import com.google.common.base.Predicate; +import com.google.common.collect.BoundType; +import com.google.common.collect.Cut; +import com.google.common.collect.DiscreteDomain; +import com.google.common.collect.Ordering; +import com.google.common.collect.RangeGwtSerializationDependencies; +import java.io.Serializable; + +public class Range extends RangeGwtSerializationDependencies implements Predicate, Serializable +{ + protected Range() {} + Object readResolve(){ return null; } + final Cut lowerBound = null; + final Cut upperBound = null; + public BoundType lowerBoundType(){ return null; } + public BoundType upperBoundType(){ return null; } + public C lowerEndpoint(){ return null; } + public C upperEndpoint(){ return null; } + public Range canonical(DiscreteDomain p0){ return null; } + public Range gap(Range p0){ return null; } + public Range intersection(Range p0){ return null; } + public Range span(Range p0){ return null; } + public String toString(){ return null; } + public boolean apply(C p0){ return false; } + public boolean contains(C p0){ return false; } + public boolean containsAll(Iterable p0){ return false; } + public boolean encloses(Range p0){ return false; } + public boolean equals(Object p0){ return false; } + public boolean hasLowerBound(){ return false; } + public boolean hasUpperBound(){ return false; } + public boolean isConnected(Range p0){ return false; } + public boolean isEmpty(){ return false; } + public int hashCode(){ return 0; } + public static > Range all(){ return null; } + public static > Range atLeast(C p0){ return null; } + public static > Range atMost(C p0){ return null; } + public static > Range closed(C p0, C p1){ return null; } + public static > Range closedOpen(C p0, C p1){ return null; } + public static > Range downTo(C p0, BoundType p1){ return null; } + public static > Range encloseAll(Iterable p0){ return null; } + public static > Range greaterThan(C p0){ return null; } + public static > Range lessThan(C p0){ return null; } + public static > Range open(C p0, C p1){ return null; } + public static > Range openClosed(C p0, C p1){ return null; } + public static > Range range(C p0, BoundType p1, C p2, BoundType p3){ return null; } + public static > Range singleton(C p0){ return null; } + public static > Range upTo(C p0, BoundType p1){ return null; } + static > Function, Cut> lowerBoundFn(){ return null; } + static > Function, Cut> upperBoundFn(){ return null; } + static > Ordering> rangeLexOrdering(){ return null; } + static > Range create(Cut p0, Cut p1){ return null; } + static int compareOrThrow(Comparable p0, Comparable p1){ return 0; } +} diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/RangeGwtSerializationDependencies.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/RangeGwtSerializationDependencies.java new file mode 100644 index 00000000000..3b52a4a794f --- /dev/null +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/RangeGwtSerializationDependencies.java @@ -0,0 +1,10 @@ +// Generated automatically from com.google.common.collect.RangeGwtSerializationDependencies for testing purposes + +package com.google.common.collect; + +import java.io.Serializable; + +abstract class RangeGwtSerializationDependencies implements Serializable +{ + RangeGwtSerializationDependencies(){} +} diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/RegularImmutableSortedSet.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/RegularImmutableSortedSet.java new file mode 100644 index 00000000000..5bf53b0b23d --- /dev/null +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/RegularImmutableSortedSet.java @@ -0,0 +1,47 @@ +// Generated automatically from com.google.common.collect.RegularImmutableSortedSet for testing purposes + +package com.google.common.collect; + +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableSortedSet; +import com.google.common.collect.UnmodifiableIterator; +import java.util.Collection; +import java.util.Comparator; +import java.util.Spliterator; +import java.util.function.Consumer; + +class RegularImmutableSortedSet extends ImmutableSortedSet +{ + protected RegularImmutableSortedSet() {} + Comparator unsafeComparator(){ return null; } + ImmutableList createAsList(){ return null; } + ImmutableSortedSet createDescendingSet(){ return null; } + ImmutableSortedSet headSetImpl(E p0, boolean p1){ return null; } + ImmutableSortedSet subSetImpl(E p0, boolean p1, E p2, boolean p3){ return null; } + ImmutableSortedSet tailSetImpl(E p0, boolean p1){ return null; } + Object[] internalArray(){ return null; } + RegularImmutableSortedSet(ImmutableList p0, Comparator p1){} + RegularImmutableSortedSet getSubSet(int p0, int p1){ return null; } + boolean isPartialView(){ return false; } + int copyIntoArray(Object[] p0, int p1){ return 0; } + int headIndex(E p0, boolean p1){ return 0; } + int indexOf(Object p0){ return 0; } + int internalArrayEnd(){ return 0; } + int internalArrayStart(){ return 0; } + int tailIndex(E p0, boolean p1){ return 0; } + public E ceiling(E p0){ return null; } + public E first(){ return null; } + public E floor(E p0){ return null; } + public E higher(E p0){ return null; } + public E last(){ return null; } + public E lower(E p0){ return null; } + public Spliterator spliterator(){ return null; } + public UnmodifiableIterator descendingIterator(){ return null; } + public UnmodifiableIterator iterator(){ return null; } + public boolean contains(Object p0){ return false; } + public boolean containsAll(Collection p0){ return false; } + public boolean equals(Object p0){ return false; } + public int size(){ return 0; } + public void forEach(Consumer p0){} + static RegularImmutableSortedSet NATURAL_EMPTY_SET = null; +} diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/RowSortedTable.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/RowSortedTable.java new file mode 100644 index 00000000000..b4a1b74f25a --- /dev/null +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/RowSortedTable.java @@ -0,0 +1,14 @@ +// Generated automatically from com.google.common.collect.RowSortedTable for testing purposes + +package com.google.common.collect; + +import com.google.common.collect.Table; +import java.util.Map; +import java.util.SortedMap; +import java.util.SortedSet; + +public interface RowSortedTable extends Table +{ + SortedMap> rowMap(); + SortedSet rowKeySet(); +} diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/Sets.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/Sets.java index 77d3812f082..2b7ebee4d18 100644 --- a/java/ql/test/stubs/guava-30.0/com/google/common/collect/Sets.java +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/Sets.java @@ -1,93 +1,83 @@ -/* - * Copyright (C) 2007 The Guava Authors - * - * 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. - */ +// Generated automatically from com.google.common.collect.Sets for testing purposes, and manually adjusted. package com.google.common.collect; +import com.google.common.base.Predicate; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Range; +import com.google.common.collect.UnmodifiableIterator; import java.util.AbstractSet; import java.util.Collection; +import java.util.Comparator; +import java.util.EnumSet; import java.util.HashSet; import java.util.Iterator; +import java.util.LinkedHashSet; import java.util.List; +import java.util.Map; import java.util.NavigableSet; -import java.util.NoSuchElementException; import java.util.Set; -import java.util.function.Predicate; +import java.util.SortedSet; +import java.util.TreeSet; +import java.util.concurrent.CopyOnWriteArraySet; +import java.util.stream.Collector; -public final class Sets { - private Sets() {} - - public static HashSet newHashSet() { - return null; - } - - public static HashSet newHashSet(E... elements) { - return null; - } - - public static HashSet newHashSet(Iterable elements) { - return null; - } - public abstract static class SetView extends AbstractSet { - private SetView() {} - } - - public static SetView union(final Set set1, final Set set2) { - return null; - } - - public static SetView intersection(final Set set1, final Set set2) { - return null; - } - - public static SetView difference(final Set set1, final Set set2) { - return null; - } - - public static SetView symmetricDifference( - final Set set1, final Set set2) { - return null; - } - - public static Set filter(Set unfiltered, Predicate predicate) { - return null; - } - - - public static Set> cartesianProduct(List> sets) { - return null; - } - - public static Set> cartesianProduct(Set... sets) { - return null; - } - - public static Set> powerSet(Set set) { - return null; - } - - public static Set> combinations(Set set, final int size) { - return null; - } - - public static NavigableSet synchronizedNavigableSet(NavigableSet navigableSet) { - return null; - } - - public static > NavigableSet subSet( - NavigableSet set, Object range) { - return null; - } +public class Sets +{ + protected Sets() {} + abstract static public class SetView extends AbstractSet + { + protected SetView() {} + public > S copyInto(S p0){ return null; } + public ImmutableSet immutableCopy(){ return null; } + public abstract UnmodifiableIterator iterator(); + public final boolean add(E p0){ return false; } + public final boolean addAll(Collection p0){ return false; } + public final boolean remove(Object p0){ return false; } + public final boolean removeAll(Collection p0){ return false; } + public final boolean removeIf(Predicate p0){ return false; } + public final boolean retainAll(Collection p0){ return false; } + public final void clear(){} + } + public static Set> cartesianProduct(List> p0){ return null; } + public static Set> cartesianProduct(Set... p0){ return null; } + public static TreeSet newTreeSet(){ return null; } + public static TreeSet newTreeSet(Iterable p0){ return null; } + public static > Collector> toImmutableEnumSet(){ return null; } + public static > EnumSet complementOf(Collection p0){ return null; } + public static > EnumSet complementOf(Collection p0, Class p1){ return null; } + public static > EnumSet newEnumSet(Iterable p0, Class p1){ return null; } + public static > ImmutableSet immutableEnumSet(E p0, E... p1){ return null; } + public static > ImmutableSet immutableEnumSet(Iterable p0){ return null; } + public static CopyOnWriteArraySet newCopyOnWriteArraySet(){ return null; } + public static CopyOnWriteArraySet newCopyOnWriteArraySet(Iterable p0){ return null; } + public static HashSet newHashSet(){ return null; } + public static HashSet newHashSet(E... p0){ return null; } + public static HashSet newHashSet(Iterable p0){ return null; } + public static HashSet newHashSet(Iterator p0){ return null; } + public static HashSet newHashSetWithExpectedSize(int p0){ return null; } + public static LinkedHashSet newLinkedHashSet(){ return null; } + public static LinkedHashSet newLinkedHashSet(Iterable p0){ return null; } + public static LinkedHashSet newLinkedHashSetWithExpectedSize(int p0){ return null; } + public static NavigableSet filter(NavigableSet p0, Predicate p1){ return null; } + public static NavigableSet synchronizedNavigableSet(NavigableSet p0){ return null; } + public static NavigableSet unmodifiableNavigableSet(NavigableSet p0){ return null; } + public static Set filter(Set p0, Predicate p1){ return null; } + public static Set newConcurrentHashSet(){ return null; } + public static Set newConcurrentHashSet(Iterable p0){ return null; } + public static Set newIdentityHashSet(){ return null; } + public static Set newSetFromMap(Map p0){ return null; } + public static Set> combinations(Set p0, int p1){ return null; } + public static Set> powerSet(Set p0){ return null; } + public static Sets.SetView difference(Set p0, Set p1){ return null; } + public static Sets.SetView intersection(Set p0, Set p1){ return null; } + public static Sets.SetView symmetricDifference(Set p0, Set p1){ return null; } + public static Sets.SetView union(Set p0, Set p1){ return null; } + public static SortedSet filter(SortedSet p0, Predicate p1){ return null; } + public static TreeSet newTreeSet(Comparator p0){ return null; } + public static > NavigableSet subSet(NavigableSet p0, Range p1){ return null; } + static boolean equalsImpl(Set p0, Object p1){ return false; } + static boolean removeAllImpl(Set p0, Collection p1){ return false; } + static boolean removeAllImpl(Set p0, Iterator p1){ return false; } + static int hashCodeImpl(Set p0){ return 0; } } diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/SortedIterable.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/SortedIterable.java new file mode 100644 index 00000000000..41631eb4a3a --- /dev/null +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/SortedIterable.java @@ -0,0 +1,12 @@ +// Generated automatically from com.google.common.collect.SortedIterable for testing purposes + +package com.google.common.collect; + +import java.util.Comparator; +import java.util.Iterator; + +interface SortedIterable extends Iterable +{ + Comparator comparator(); + Iterator iterator(); +} diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/SortedMapDifference.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/SortedMapDifference.java new file mode 100644 index 00000000000..c511f16d166 --- /dev/null +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/SortedMapDifference.java @@ -0,0 +1,14 @@ +// Generated automatically from com.google.common.collect.SortedMapDifference for testing purposes + +package com.google.common.collect; + +import com.google.common.collect.MapDifference; +import java.util.SortedMap; + +public interface SortedMapDifference extends MapDifference +{ + SortedMap> entriesDiffering(); + SortedMap entriesInCommon(); + SortedMap entriesOnlyOnLeft(); + SortedMap entriesOnlyOnRight(); +} diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/SortedMultiset.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/SortedMultiset.java new file mode 100644 index 00000000000..33e26b12e56 --- /dev/null +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/SortedMultiset.java @@ -0,0 +1,28 @@ +// Generated automatically from com.google.common.collect.SortedMultiset for testing purposes + +package com.google.common.collect; + +import com.google.common.collect.BoundType; +import com.google.common.collect.Multiset; +import com.google.common.collect.SortedIterable; +import com.google.common.collect.SortedMultisetBridge; +import java.util.Comparator; +import java.util.Iterator; +import java.util.NavigableSet; +import java.util.Set; + +public interface SortedMultiset extends SortedIterable, SortedMultisetBridge +{ + Comparator comparator(); + Iterator iterator(); + Multiset.Entry firstEntry(); + Multiset.Entry lastEntry(); + Multiset.Entry pollFirstEntry(); + Multiset.Entry pollLastEntry(); + NavigableSet elementSet(); + Set> entrySet(); + SortedMultiset descendingMultiset(); + SortedMultiset headMultiset(E p0, BoundType p1); + SortedMultiset subMultiset(E p0, BoundType p1, E p2, BoundType p3); + SortedMultiset tailMultiset(E p0, BoundType p1); +} diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/SortedMultisetBridge.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/SortedMultisetBridge.java new file mode 100644 index 00000000000..d61d1b242b9 --- /dev/null +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/SortedMultisetBridge.java @@ -0,0 +1,11 @@ +// Generated automatically from com.google.common.collect.SortedMultisetBridge for testing purposes + +package com.google.common.collect; + +import com.google.common.collect.Multiset; +import java.util.SortedSet; + +interface SortedMultisetBridge extends Multiset +{ + SortedSet elementSet(); +} diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/SortedSetMultimap.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/SortedSetMultimap.java new file mode 100644 index 00000000000..c2da3b40d85 --- /dev/null +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/SortedSetMultimap.java @@ -0,0 +1,18 @@ +// Generated automatically from com.google.common.collect.SortedSetMultimap for testing purposes + +package com.google.common.collect; + +import com.google.common.collect.SetMultimap; +import java.util.Collection; +import java.util.Comparator; +import java.util.Map; +import java.util.SortedSet; + +public interface SortedSetMultimap extends SetMultimap +{ + Comparator valueComparator(); + Map> asMap(); + SortedSet get(K p0); + SortedSet removeAll(Object p0); + SortedSet replaceValues(K p0, Iterable p1); +} diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/StandardRowSortedTable.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/StandardRowSortedTable.java new file mode 100644 index 00000000000..59a8b5d2094 --- /dev/null +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/StandardRowSortedTable.java @@ -0,0 +1,19 @@ +// Generated automatically from com.google.common.collect.StandardRowSortedTable for testing purposes + +package com.google.common.collect; + +import com.google.common.base.Supplier; +import com.google.common.collect.RowSortedTable; +import com.google.common.collect.StandardTable; +import java.util.Map; +import java.util.SortedMap; +import java.util.SortedSet; + +class StandardRowSortedTable extends StandardTable implements RowSortedTable +{ + protected StandardRowSortedTable() {} + SortedMap> createRowMap(){ return null; } + StandardRowSortedTable(SortedMap> p0, Supplier> p1){} + public SortedMap> rowMap(){ return null; } + public SortedSet rowKeySet(){ return null; } +} diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/StandardTable.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/StandardTable.java new file mode 100644 index 00000000000..3283546c39f --- /dev/null +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/StandardTable.java @@ -0,0 +1,43 @@ +// Generated automatically from com.google.common.collect.StandardTable for testing purposes + +package com.google.common.collect; + +import com.google.common.base.Supplier; +import com.google.common.collect.AbstractTable; +import com.google.common.collect.Table; +import java.io.Serializable; +import java.util.Collection; +import java.util.Iterator; +import java.util.Map; +import java.util.Set; +import java.util.Spliterator; + +class StandardTable extends AbstractTable implements Serializable +{ + protected StandardTable() {} + Iterator createColumnKeyIterator(){ return null; } + Iterator> cellIterator(){ return null; } + Map> createRowMap(){ return null; } + Spliterator> cellSpliterator(){ return null; } + StandardTable(Map> p0, Supplier> p1){} + final Map> backingMap = null; + final Supplier> factory = null; + public Collection values(){ return null; } + public Map> columnMap(){ return null; } + public Map row(R p0){ return null; } + public Map> rowMap(){ return null; } + public Map column(C p0){ return null; } + public Set columnKeySet(){ return null; } + public Set rowKeySet(){ return null; } + public Set> cellSet(){ return null; } + public V get(Object p0, Object p1){ return null; } + public V put(R p0, C p1, V p2){ return null; } + public V remove(Object p0, Object p1){ return null; } + public boolean contains(Object p0, Object p1){ return false; } + public boolean containsColumn(Object p0){ return false; } + public boolean containsRow(Object p0){ return false; } + public boolean containsValue(Object p0){ return false; } + public boolean isEmpty(){ return false; } + public int size(){ return 0; } + public void clear(){} +} diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/Table.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/Table.java index d310bd99182..bd3192c8c9e 100644 --- a/java/ql/test/stubs/guava-30.0/com/google/common/collect/Table.java +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/Table.java @@ -1,18 +1,4 @@ -/* - * Copyright (C) 2008 The Guava Authors - * - * 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. - */ +// Generated automatically from com.google.common.collect.Table for testing purposes package com.google.common.collect; @@ -20,50 +6,35 @@ import java.util.Collection; import java.util.Map; import java.util.Set; -public interface Table { - boolean contains(Object rowKey, Object columnKey); - - boolean containsRow(Object rowKey); - - boolean containsColumn(Object columnKey); - - boolean containsValue(Object value); - - V get(Object rowKey, Object columnKey); - - boolean isEmpty(); - - int size(); - - void clear(); - - V put(R rowKey, C columnKey, V value); - - void putAll(Table table); - - V remove(Object rowKey, Object columnKey); - - Map row(R rowKey); - - Map column(C columnKey); - - Set> cellSet(); - - Set rowKeySet(); - - Set columnKeySet(); - - Collection values(); - - Map> rowMap(); - - Map> columnMap(); - - interface Cell { - R getRowKey(); - - C getColumnKey(); - - V getValue(); - } +public interface Table +{ + Collection values(); + Map> columnMap(); + Map row(R p0); + Map> rowMap(); + Map column(C p0); + Set columnKeySet(); + Set rowKeySet(); + Set> cellSet(); + V get(Object p0, Object p1); + V put(R p0, C p1, V p2); + V remove(Object p0, Object p1); + boolean contains(Object p0, Object p1); + boolean containsColumn(Object p0); + boolean containsRow(Object p0); + boolean containsValue(Object p0); + boolean equals(Object p0); + boolean isEmpty(); + int hashCode(); + int size(); + static public interface Cell + { + C getColumnKey(); + R getRowKey(); + V getValue(); + boolean equals(Object p0); + int hashCode(); + } + void clear(); + void putAll(Table p0); } diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/Tables.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/Tables.java new file mode 100644 index 00000000000..56416aa8973 --- /dev/null +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/Tables.java @@ -0,0 +1,26 @@ +// Generated automatically from com.google.common.collect.Tables for testing purposes, and manually adjusted. + +package com.google.common.collect; + +import com.google.common.base.Function; +import com.google.common.base.Supplier; +import com.google.common.collect.RowSortedTable; +import com.google.common.collect.Table; +import java.util.Map; +import java.util.function.BinaryOperator; +import java.util.stream.Collector; + +public class Tables +{ + protected Tables() {} + public static Table transformValues(Table p0, Function p1){ return null; } + public static RowSortedTable unmodifiableRowSortedTable(RowSortedTable p0){ return null; } + public static Table.Cell immutableCell(R p0, C p1, V p2){ return null; } + public static Table transpose(Table p0){ return null; } + public static Table newCustomTable(Map> p0, Supplier> p1){ return null; } + public static Table synchronizedTable(Table p0){ return null; } + public static Table unmodifiableTable(Table p0){ return null; } + public static > Collector toTable(Function p0, Function p1, Function p2, BinaryOperator p3, Supplier p4){ return null; } + public static > Collector toTable(Function p0, Function p1, Function p2, Supplier p3){ return null; } + static boolean equalsImpl(Table p0, Object p1){ return false; } +} diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/TreeBasedTable.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/TreeBasedTable.java new file mode 100644 index 00000000000..44814ad6233 --- /dev/null +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/TreeBasedTable.java @@ -0,0 +1,25 @@ +// Generated automatically from com.google.common.collect.TreeBasedTable for testing purposes + +package com.google.common.collect; + +import com.google.common.collect.StandardRowSortedTable; +import java.util.Comparator; +import java.util.Iterator; +import java.util.Map; +import java.util.SortedMap; +import java.util.SortedSet; + +public class TreeBasedTable extends StandardRowSortedTable +{ + protected TreeBasedTable() {} + Iterator createColumnKeyIterator(){ return null; } + TreeBasedTable(Comparator p0, Comparator p1){} + public Comparator columnComparator(){ return null; } + public Comparator rowComparator(){ return null; } + public SortedMap row(R p0){ return null; } + public SortedMap> rowMap(){ return null; } + public SortedSet rowKeySet(){ return null; } + public static TreeBasedTable create(){ return null; } + public static TreeBasedTable create(Comparator p0, Comparator p1){ return null; } + public static TreeBasedTable create(TreeBasedTable p0){ return null; } +} diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/TreeMultimap.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/TreeMultimap.java new file mode 100644 index 00000000000..0bb0801c55c --- /dev/null +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/TreeMultimap.java @@ -0,0 +1,29 @@ +// Generated automatically from com.google.common.collect.TreeMultimap for testing purposes + +package com.google.common.collect; + +import com.google.common.collect.AbstractSortedKeySortedSetMultimap; +import com.google.common.collect.Multimap; +import java.util.Collection; +import java.util.Comparator; +import java.util.Map; +import java.util.NavigableMap; +import java.util.NavigableSet; +import java.util.SortedSet; + +public class TreeMultimap extends AbstractSortedKeySortedSetMultimap +{ + protected TreeMultimap() {} + Collection createCollection(K p0){ return null; } + Map> createAsMap(){ return null; } + SortedSet createCollection(){ return null; } + TreeMultimap(Comparator p0, Comparator p1){} + public Comparator keyComparator(){ return null; } + public Comparator valueComparator(){ return null; } + public NavigableMap> asMap(){ return null; } + public NavigableSet keySet(){ return null; } + public NavigableSet get(K p0){ return null; } + public static TreeMultimap create(){ return null; } + public static TreeMultimap create(Multimap p0){ return null; } + public static TreeMultimap create(Comparator p0, Comparator p1){ return null; } +} diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/TreeMultiset.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/TreeMultiset.java new file mode 100644 index 00000000000..b8dfa5c0b39 --- /dev/null +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/TreeMultiset.java @@ -0,0 +1,37 @@ +// Generated automatically from com.google.common.collect.TreeMultiset for testing purposes, and manually adjusted. + +package com.google.common.collect; + +import com.google.common.collect.AbstractSortedMultiset; +import com.google.common.collect.BoundType; +import com.google.common.collect.GeneralRange; +import com.google.common.collect.Multiset; +import com.google.common.collect.SortedMultiset; +import java.io.Serializable; +import java.util.Comparator; +import java.util.Iterator; +import java.util.function.ObjIntConsumer; + +public class TreeMultiset extends AbstractSortedMultiset implements Serializable +{ + protected TreeMultiset() {} + Iterator elementIterator(){ return null; } + Iterator> descendingEntryIterator(){ return null; } + Iterator> entryIterator(){ return null; } + TreeMultiset(Comparator p0){} + int distinctElements(){ return 0; } + public Iterator iterator(){ return null; } + public SortedMultiset headMultiset(E p0, BoundType p1){ return null; } + public SortedMultiset tailMultiset(E p0, BoundType p1){ return null; } + public boolean setCount(E p0, int p1, int p2){ return false; } + public int add(E p0, int p1){ return 0; } + public int count(Object p0){ return 0; } + public int remove(Object p0, int p1){ return 0; } + public int setCount(E p0, int p1){ return 0; } + public int size(){ return 0; } + public static TreeMultiset create(){ return null; } + public static TreeMultiset create(Iterable p0){ return null; } + public static TreeMultiset create(Comparator p0){ return null; } + public void clear(){} + public void forEachEntry(ObjIntConsumer p0){} +} From 46eec3c8eb44ec8e9d70bdfd36adc18574e7ba9a Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Thu, 15 Jul 2021 14:13:34 +0100 Subject: [PATCH 476/741] Switch to simpler synthetic field model --- .../java/frameworks/guava/Collections.qll | 32 ------------------- 1 file changed, 32 deletions(-) diff --git a/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll b/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll index e571b18c456..04756c00b51 100644 --- a/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll +++ b/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll @@ -585,35 +585,3 @@ class TableType extends RefType { ) } } - -private class TableRowField extends SyntheticField { - override predicate fieldSpec(RefType owningType, string fieldName, Type fieldType) { - owningType.hasQualifiedName(guavaCollectPackage(), "Table") and - fieldName = "rowKey" and - fieldType instanceof TypeObject - } -} - -private class TableColumnField extends SyntheticField { - override predicate fieldSpec(RefType owningType, string fieldName, Type fieldType) { - owningType.hasQualifiedName(guavaCollectPackage(), "Table") and - fieldName = "columnKey" and - fieldType instanceof TypeObject - } -} - -private class MapDifferenceLeftField extends SyntheticField { - override predicate fieldSpec(RefType owningType, string fieldName, Type fieldType) { - owningType.hasQualifiedName(guavaCollectPackage(), "MapDifference") and - fieldName = "left" and - fieldType instanceof TypeObject - } -} - -private class MapDifferenceRightField extends SyntheticField { - override predicate fieldSpec(RefType owningType, string fieldName, Type fieldType) { - owningType.hasQualifiedName(guavaCollectPackage(), "MapDifference") and - fieldName = "right" and - fieldType instanceof TypeObject - } -} From 839c9e35c8fe9586caa929ff569740ba46ce6100 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Tue, 20 Jul 2021 15:34:58 +0100 Subject: [PATCH 477/741] Simplify synthetic table fields --- .../java/frameworks/guava/Collections.qll | 83 +++++++++++-------- 1 file changed, 47 insertions(+), 36 deletions(-) diff --git a/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll b/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll index 04756c00b51..4c8a32b6628 100644 --- a/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll +++ b/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll @@ -42,30 +42,32 @@ private class GuavaCollectCsv extends SummaryModelCsv { "com.google.common.collect;ImmutableMultimap;true;inverse;();;MapKey of Argument[-1];MapValue of ReturnValue;value", "com.google.common.collect;ImmutableMultimap;true;inverse;();;MapValue of Argument[-1];MapKey of ReturnValue;value", // Tables - "com.google.common.collect;Table$Cell;true;getRowKey;();;SyntheticField[com.google.common.collect.Table.rowKey] of MapKey of Argument[-1];ReturnValue;value", - "com.google.common.collect;Table$Cell;true;getColumnKey;();;SyntheticField[com.google.common.collect.Table.columnKey] of MapKey of Argument[-1];ReturnValue;value", + "com.google.common.collect;Table$Cell;true;getRowKey;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];ReturnValue;value", + "com.google.common.collect;Table$Cell;true;getColumnKey;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];ReturnValue;value", "com.google.common.collect;Table$Cell;true;getValue;();;MapValue of Argument[-1];ReturnValue;value", - "com.google.common.collect;Table;true;cellSet;();;MapKey of Argument[-1];MapKey of Element of ReturnValue;value", + "com.google.common.collect;Table;true;cellSet;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];SyntheticField[com.google.common.collect.Table.rowKey] of Element of ReturnValue;value", + "com.google.common.collect;Table;true;cellSet;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];SyntheticField[com.google.common.collect.Table.columnKey] of Element of ReturnValue;value", "com.google.common.collect;Table;true;cellSet;();;MapValue of Argument[-1];MapValue of Element of ReturnValue;value", - "com.google.common.collect;Table;true;row;(Object);;SyntheticField[com.google.common.collect.Table.columnKey] of MapKey of Argument[-1];MapKey of ReturnValue;value", + "com.google.common.collect;Table;true;row;(Object);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];MapKey of ReturnValue;value", "com.google.common.collect;Table;true;row;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value", - "com.google.common.collect;Table;true;rowKeySet;();;SyntheticField[com.google.common.collect.Table.rowKey] of MapKey of Argument[-1];Element of ReturnValue;value", - "com.google.common.collect;Table;true;rowMap;();;SyntheticField[com.google.common.collect.Table.rowKey] of MapKey of Argument[-1];MapKey of ReturnValue;value", - "com.google.common.collect;Table;true;rowMap;();;SyntheticField[com.google.common.collect.Table.columnKey] of MapKey of Argument[-1];MapKey of MapValue of ReturnValue;value", + "com.google.common.collect;Table;true;rowKeySet;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];Element of ReturnValue;value", + "com.google.common.collect;Table;true;rowMap;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];MapKey of ReturnValue;value", + "com.google.common.collect;Table;true;rowMap;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];MapKey of MapValue of ReturnValue;value", "com.google.common.collect;Table;true;rowMap;();;MapValue of Argument[-1];MapValue of MapValue of ReturnValue;value", - "com.google.common.collect;Table;true;column;(Object);;SyntheticField[com.google.common.collect.Table.rowKey] of MapKey of Argument[-1];MapKey of ReturnValue;value", + "com.google.common.collect;Table;true;column;(Object);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];MapKey of ReturnValue;value", "com.google.common.collect;Table;true;column;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value", - "com.google.common.collect;Table;true;columnKeySet;();;SyntheticField[com.google.common.collect.Table.columnKey] of MapKey of Argument[-1];Element of ReturnValue;value", - "com.google.common.collect;Table;true;columnMap;();;SyntheticField[com.google.common.collect.Table.columnKey] of MapKey of Argument[-1];MapKey of ReturnValue;value", - "com.google.common.collect;Table;true;columnMap;();;SyntheticField[com.google.common.collect.Table.rowKey] of MapKey of Argument[-1];MapKey of MapValue of ReturnValue;value", + "com.google.common.collect;Table;true;columnKeySet;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];Element of ReturnValue;value", + "com.google.common.collect;Table;true;columnMap;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];MapKey of ReturnValue;value", + "com.google.common.collect;Table;true;columnMap;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];MapKey of MapValue of ReturnValue;value", "com.google.common.collect;Table;true;columnMap;();;MapValue of Argument[-1];MapValue of MapValue of ReturnValue;value", "com.google.common.collect;Table;true;values;();;MapValue of Argument[-1];Element of ReturnValue;value", "com.google.common.collect;Table;true;get;(Object,Object);;MapValue of Argument[-1];ReturnValue;value", "com.google.common.collect;Table;true;remove;(Object,Object);;MapValue of Argument[-1];ReturnValue;value", - "com.google.common.collect;Table;true;put;(Object,Object,Object);;Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of MapKey of Argument[-1];value", - "com.google.common.collect;Table;true;put;(Object,Object,Object);;Argument[1];SyntheticField[com.google.common.collect.Table.columnKey] of MapKey of Argument[-1];value", + "com.google.common.collect;Table;true;put;(Object,Object,Object);;Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];value", + "com.google.common.collect;Table;true;put;(Object,Object,Object);;Argument[1];SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];value", "com.google.common.collect;Table;true;put;(Object,Object,Object);;Argument[2];MapValue of Argument[-1];value", - "com.google.common.collect;Table;true;putAll;(Table);;MapKey of Argument[0];MapKey of Argument[-1];value", + "com.google.common.collect;Table;true;putAll;(Table);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];value", + "com.google.common.collect;Table;true;putAll;(Table);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];value", "com.google.common.collect;Table;true;putAll;(Table);;MapValue of Argument[0];MapValue of Argument[-1];value", // Misc collections and utilities "com.google.common.collect;ImmutableCollection;true;asList;();;Element of Argument[-1];Element of ReturnValue;value", @@ -119,20 +121,22 @@ private class GuavaCollectCsv extends SummaryModelCsv { "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value", "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value", "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Object,Object[]);;ArrayElement of Argument[1];MapValue of Argument[-1];value", - "com.google.common.collect;ImmutableTable$Builder;true;build;();;SyntheticField[com.google.common.collect.Table.rowKey] of MapKey of Argument[-1];SyntheticField[com.google.common.collect.Table.rowKey] of MapKey of ReturnValue;value", - "com.google.common.collect;ImmutableTable$Builder;true;build;();;SyntheticField[com.google.common.collect.Table.columnKey] of MapKey of Argument[-1];SyntheticField[com.google.common.collect.Table.columnKey] of MapKey of ReturnValue;value", + "com.google.common.collect;ImmutableTable$Builder;true;build;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value", + "com.google.common.collect;ImmutableTable$Builder;true;build;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value", "com.google.common.collect;ImmutableTable$Builder;true;build;();;MapValue of Argument[-1];MapValue of ReturnValue;value", "com.google.common.collect;ImmutableTable$Builder;true;orderRowsBy;(Comparator);;Argument[-1];ReturnValue;value", "com.google.common.collect;ImmutableTable$Builder;true;orderColumnsBy;(Comparator);;Argument[-1];ReturnValue;value", "com.google.common.collect;ImmutableTable$Builder;true;put;(Object,Object,Object);;Argument[-1];ReturnValue;value", "com.google.common.collect;ImmutableTable$Builder;true;put;(Cell);;Argument[-1];ReturnValue;value", "com.google.common.collect;ImmutableTable$Builder;true;putAll;(Table);;Argument[-1];ReturnValue;value", - "com.google.common.collect;ImmutableTable$Builder;true;put;(Object,Object,Object);;Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of MapKey of Argument[-1];value", - "com.google.common.collect;ImmutableTable$Builder;true;put;(Object,Object,Object);;Argument[1];SyntheticField[com.google.common.collect.Table.columnKey] of MapKey of Argument[-1];value", + "com.google.common.collect;ImmutableTable$Builder;true;put;(Object,Object,Object);;Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];value", + "com.google.common.collect;ImmutableTable$Builder;true;put;(Object,Object,Object);;Argument[1];SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];value", "com.google.common.collect;ImmutableTable$Builder;true;put;(Object,Object,Object);;Argument[2];MapValue of Argument[-1];value", - "com.google.common.collect;ImmutableTable$Builder;true;put;(Cell);;MapKey of Argument[0];MapKey of Argument[-1];value", + "com.google.common.collect;ImmutableTable$Builder;true;put;(Cell);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];value", + "com.google.common.collect;ImmutableTable$Builder;true;put;(Cell);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];value", "com.google.common.collect;ImmutableTable$Builder;true;put;(Cell);;MapValue of Argument[0];MapValue of Argument[-1];value", - "com.google.common.collect;ImmutableTable$Builder;true;putAll;(Table);;MapKey of Argument[0];MapKey of Argument[-1];value", + "com.google.common.collect;ImmutableTable$Builder;true;putAll;(Table);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];value", + "com.google.common.collect;ImmutableTable$Builder;true;putAll;(Table);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];value", "com.google.common.collect;ImmutableTable$Builder;true;putAll;(Table);;MapValue of Argument[0];MapValue of Argument[-1];value", // `of` methods "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value", @@ -165,8 +169,8 @@ private class GuavaCollectCsv extends SummaryModelCsv { "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[9];MapValue of ReturnValue;value", "com.google.common.collect;ImmutableClassToInstanceMap;true;of;(Class,Object);;Argument[0];MapKey of ReturnValue;value", "com.google.common.collect;ImmutableClassToInstanceMap;true;of;(Class,Object);;Argument[1];MapValue of ReturnValue;value", - "com.google.common.collect;ImmutableTable;true;of;(Object,Object,Object);;Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of MapKey of ReturnValue;value", - "com.google.common.collect;ImmutableTable;true;of;(Object,Object,Object);;Argument[1];SyntheticField[com.google.common.collect.Table.columnKey] of MapKey of ReturnValue;value", + "com.google.common.collect;ImmutableTable;true;of;(Object,Object,Object);;Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value", + "com.google.common.collect;ImmutableTable;true;of;(Object,Object,Object);;Argument[1];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value", "com.google.common.collect;ImmutableTable;true;of;(Object,Object,Object);;Argument[2];MapValue of ReturnValue;value", // `copyOf` methods "com.google.common.collect;ImmutableList;true;copyOf;(Object[]);;ArrayElement of Argument[0];Element of ReturnValue;value", @@ -203,7 +207,8 @@ private class GuavaCollectCsv extends SummaryModelCsv { "com.google.common.collect;ImmutableMultimap;true;copyOf;(Iterable);;MapValue of Element of Argument[0];MapValue of ReturnValue;value", "com.google.common.collect;ImmutableClassToInstanceMap;true;copyOf;(Map);;MapKey of Argument[0];MapKey of ReturnValue;value", "com.google.common.collect;ImmutableClassToInstanceMap;true;copyOf;(Map);;MapValue of Argument[0];MapValue of ReturnValue;value", - "com.google.common.collect;ImmutableTable;true;copyOf;(Table);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;ImmutableTable;true;copyOf;(Table);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value", + "com.google.common.collect;ImmutableTable;true;copyOf;(Table);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value", "com.google.common.collect;ImmutableTable;true;copyOf;(Table);;MapValue of Argument[0];MapValue of ReturnValue;value", // `create` methods "com.google.common.collect;HashMultiset;true;create;(Iterable);;Element of Argument[0];Element of ReturnValue;value", @@ -224,12 +229,14 @@ private class GuavaCollectCsv extends SummaryModelCsv { "com.google.common.collect;HashBiMap;true;create;(Map);;MapValue of Argument[0];MapValue of ReturnValue;value", "com.google.common.collect;MutableClassToInstanceMap;true;create;(Map);;MapKey of Argument[0];MapKey of ReturnValue;value", "com.google.common.collect;MutableClassToInstanceMap;true;create;(Map);;MapValue of Argument[0];MapValue of ReturnValue;value", - "com.google.common.collect;HashBasedTable;true;create;(Table);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;HashBasedTable;true;create;(Table);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value", + "com.google.common.collect;HashBasedTable;true;create;(Table);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value", "com.google.common.collect;HashBasedTable;true;create;(Table);;MapValue of Argument[0];MapValue of ReturnValue;value", - "com.google.common.collect;TreeBasedTable;true;create;(TreeBasedTable);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;TreeBasedTable;true;create;(TreeBasedTable);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value", + "com.google.common.collect;TreeBasedTable;true;create;(TreeBasedTable);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value", "com.google.common.collect;TreeBasedTable;true;create;(TreeBasedTable);;MapValue of Argument[0];MapValue of ReturnValue;value", - "com.google.common.collect;ArrayTable;true;create;(Iterable,Iterable);;Element of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of MapKey of ReturnValue;value", - "com.google.common.collect;ArrayTable;true;create;(Iterable,Iterable);;Element of Argument[1];SyntheticField[com.google.common.collect.Table.columnKey] of MapKey of ReturnValue;value", + "com.google.common.collect;ArrayTable;true;create;(Iterable,Iterable);;Element of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value", + "com.google.common.collect;ArrayTable;true;create;(Iterable,Iterable);;Element of Argument[1];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value", // Utility classes (a few methods depending on lambda flow are not included) "com.google.common.collect;Collections2;false;filter;(Collection,Predicate);;Element of Argument[0];Element of ReturnValue;value", "com.google.common.collect;Collections2;false;orderedPermutations;(Iterable,Comparator);;Element of Argument[0];Element of ReturnValue;value", @@ -504,21 +511,25 @@ private class GuavaCollectCsv extends SummaryModelCsv { "com.google.common.collect;Multimaps;false;unmodifiableSetMultimap;(ImmutableSetMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value", "com.google.common.collect;Multimaps;false;unmodifiableSortedSetMultimap;(SortedSetMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value", "com.google.common.collect;Multimaps;false;unmodifiableSortedSetMultimap;(SortedSetMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value", - "com.google.common.collect;Tables;false;immutableCell;(Object,Object,Object);;Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of MapKey of ReturnValue;value", - "com.google.common.collect;Tables;false;immutableCell;(Object,Object,Object);;Argument[1];SyntheticField[com.google.common.collect.Table.columnKey] of MapKey of ReturnValue;value", + "com.google.common.collect;Tables;false;immutableCell;(Object,Object,Object);;Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value", + "com.google.common.collect;Tables;false;immutableCell;(Object,Object,Object);;Argument[1];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value", "com.google.common.collect;Tables;false;immutableCell;(Object,Object,Object);;Argument[2];MapValue of ReturnValue;value", - "com.google.common.collect;Tables;false;newCustomTable;(Map,Supplier);;MapKey of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of MapKey of ReturnValue;value", - "com.google.common.collect;Tables;false;newCustomTable;(Map,Supplier);;MapKey of MapValue of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of MapKey of ReturnValue;value", + "com.google.common.collect;Tables;false;newCustomTable;(Map,Supplier);;MapKey of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value", + "com.google.common.collect;Tables;false;newCustomTable;(Map,Supplier);;MapKey of MapValue of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value", "com.google.common.collect;Tables;false;newCustomTable;(Map,Supplier);;MapValue of MapValue of Argument[0];MapValue of ReturnValue;value", - "com.google.common.collect;Tables;false;transpose;(Table);;SyntheticField[com.google.common.collect.Table.rowKey] of MapKey of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of MapKey of ReturnValue;value", - "com.google.common.collect;Tables;false;transpose;(Table);;SyntheticField[com.google.common.collect.Table.columnKey] of MapKey of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of MapKey of ReturnValue;value", + "com.google.common.collect;Tables;false;transpose;(Table);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value", + "com.google.common.collect;Tables;false;transpose;(Table);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value", "com.google.common.collect;Tables;false;transpose;(Table);;MapValue of Argument[0];MapValue of ReturnValue;value", "com.google.common.collect;Tables;false;transformValues;(Table,Function);;MapKey of Argument[0];MapKey of ReturnValue;value", - "com.google.common.collect;Tables;false;synchronizedTable;(Table);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;Tables;false;transformValues;(Table,Function);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;Tables;false;synchronizedTable;(Table);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value", + "com.google.common.collect;Tables;false;synchronizedTable;(Table);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value", "com.google.common.collect;Tables;false;synchronizedTable;(Table);;MapValue of Argument[0];MapValue of ReturnValue;value", - "com.google.common.collect;Tables;false;unmodifiableTable;(Table);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;Tables;false;unmodifiableTable;(Table);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value", + "com.google.common.collect;Tables;false;unmodifiableTable;(Table);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value", "com.google.common.collect;Tables;false;unmodifiableTable;(Table);;MapValue of Argument[0];MapValue of ReturnValue;value", - "com.google.common.collect;Tables;false;unmodifiableRowSortedTable;(RowSortedTable);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;Tables;false;unmodifiableRowSortedTable;(RowSortedTable);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value", + "com.google.common.collect;Tables;false;unmodifiableRowSortedTable;(RowSortedTable);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value", "com.google.common.collect;Tables;false;unmodifiableRowSortedTable;(RowSortedTable);;MapValue of Argument[0];MapValue of ReturnValue;value", "com.google.common.collect;ObjectArrays;false;concat;(Object,Object[]);;Argument[0];ArrayElement of ReturnValue;value", "com.google.common.collect;ObjectArrays;false;concat;(Object,Object[]);;ArrayElement of Argument[1];ArrayElement of ReturnValue;value", From c8e2b027ee858eb22d393cd002575b354a27c848 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Wed, 21 Jul 2021 11:51:06 +0100 Subject: [PATCH 478/741] Add fieldFlowBranchLimit to the tests --- java/ql/test/library-tests/frameworks/guava/TestCollect.java | 4 ++-- java/ql/test/library-tests/frameworks/guava/flow.ql | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/java/ql/test/library-tests/frameworks/guava/TestCollect.java b/java/ql/test/library-tests/frameworks/guava/TestCollect.java index 7a328652f7d..09dd28c19ba 100644 --- a/java/ql/test/library-tests/frameworks/guava/TestCollect.java +++ b/java/ql/test/library-tests/frameworks/guava/TestCollect.java @@ -114,7 +114,7 @@ class TestCollect { sink(tableValue(t3)); // $ MISSING:numValueFlow=1 // depends on aliasing } - void test4(Multimap m1, Multimap m2, Multimap m3, + void test5(Multimap m1, Multimap m2, Multimap m3, Multimap m4, Multimap m5){ String x = taint(); m1.put("k", x); @@ -136,7 +136,7 @@ class TestCollect { sink(multimapValue(m5)); // $ MISSING:numValueFlow=1 // depends on aliasing } - void test5(Comparator comp, SortedSet sorS, SortedMap sorM) { + void test6(Comparator comp, SortedSet sorS, SortedMap sorM) { ImmutableSortedSet s = ImmutableSortedSet.of(taint()); sink(element(s)); // $numValueFlow=1 diff --git a/java/ql/test/library-tests/frameworks/guava/flow.ql b/java/ql/test/library-tests/frameworks/guava/flow.ql index 2c65808f15c..82e43c8e33d 100644 --- a/java/ql/test/library-tests/frameworks/guava/flow.ql +++ b/java/ql/test/library-tests/frameworks/guava/flow.ql @@ -24,6 +24,8 @@ class ValueFlowConf extends DataFlow::Configuration { override predicate isSink(DataFlow::Node n) { exists(MethodAccess ma | ma.getMethod().hasName("sink") | n.asExpr() = ma.getAnArgument()) } + + override int fieldFlowBranchLimit() { result = 100 } } class HasFlowTest extends InlineExpectationsTest { From 0f2c50f1f52ba6950c04fb38e4d066984e0742e7 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Wed, 21 Jul 2021 12:31:46 +0100 Subject: [PATCH 479/741] Explicitly add the `of` and `copyOf` methods for `ImmutableSorted` variants of certain types. --- .../java/frameworks/guava/Collections.qll | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll b/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll index 4c8a32b6628..2f776e81558 100644 --- a/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll +++ b/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll @@ -143,8 +143,12 @@ private class GuavaCollectCsv extends SummaryModelCsv { "com.google.common.collect;ImmutableList;true;of;;;ArrayElement of Argument[12];Element of ReturnValue;value", "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value", "com.google.common.collect;ImmutableSet;true;of;;;ArrayElement of Argument[6];Element of ReturnValue;value", + "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value", + "com.google.common.collect;ImmutableSortedSet;true;of;;;ArrayElement of Argument[6];Element of ReturnValue;value", "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value", "com.google.common.collect;ImmutableMultiset;true;of;;;Element of Argument[6];Element of ReturnValue;value", + "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value", + "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Element of Argument[6];Element of ReturnValue;value", "com.google.common.collect;ImmutableMap;true;of;;;Argument[0];MapKey of ReturnValue;value", "com.google.common.collect;ImmutableMap;true;of;;;Argument[1];MapValue of ReturnValue;value", "com.google.common.collect;ImmutableMap;true;of;;;Argument[2];MapKey of ReturnValue;value", @@ -157,6 +161,16 @@ private class GuavaCollectCsv extends SummaryModelCsv { "com.google.common.collect;ImmutableMap;true;of;;;Argument[9];MapValue of ReturnValue;value", "com.google.common.collect;ImmutableMap;true;of;;;Argument[10];MapKey of ReturnValue;value", "com.google.common.collect;ImmutableMap;true;of;;;Argument[11];MapValue of ReturnValue;value", + "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[1];MapValue of ReturnValue;value", + "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[2];MapKey of ReturnValue;value", + "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[3];MapValue of ReturnValue;value", + "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[4];MapKey of ReturnValue;value", + "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[5];MapValue of ReturnValue;value", + "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[6];MapKey of ReturnValue;value", + "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[7];MapValue of ReturnValue;value", + "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[8];MapKey of ReturnValue;value", + "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[9];MapValue of ReturnValue;value", "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[0];MapKey of ReturnValue;value", "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[1];MapValue of ReturnValue;value", "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[2];MapKey of ReturnValue;value", @@ -183,6 +197,11 @@ private class GuavaCollectCsv extends SummaryModelCsv { "com.google.common.collect;ImmutableSet;true;copyOf;(Iterable);;Element of Argument[0];Element of ReturnValue;value", "com.google.common.collect;ImmutableSet;true;copyOf;(Iterator);;Element of Argument[0];Element of ReturnValue;value", "com.google.common.collect;ImmutableSet;true;copyOf;(Collection);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;ImmutableSortedSet;true;copyOf;(Object[]);;ArrayElement of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;ImmutableSortedSet;true;copyOf;(Comparable[]);;ArrayElement of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;ImmutableSortedSet;true;copyOf;(Iterable);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;ImmutableSortedSet;true;copyOf;(Iterator);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;ImmutableSortedSet;true;copyOf;(Collection);;Element of Argument[0];Element of ReturnValue;value", "com.google.common.collect;ImmutableSortedSet;true;copyOf;(Comparator,Iterable);;Element of Argument[1];Element of ReturnValue;value", "com.google.common.collect;ImmutableSortedSet;true;copyOf;(Comparator,Iterator);;Element of Argument[1];Element of ReturnValue;value", "com.google.common.collect;ImmutableSortedSet;true;copyOf;(Comparator,Collection);;Element of Argument[1];Element of ReturnValue;value", @@ -190,6 +209,10 @@ private class GuavaCollectCsv extends SummaryModelCsv { "com.google.common.collect;ImmutableMultiset;true;copyOf;(Object[]);;ArrayElement of Argument[0];Element of ReturnValue;value", "com.google.common.collect;ImmutableMultiset;true;copyOf;(Iterable);;Element of Argument[0];Element of ReturnValue;value", "com.google.common.collect;ImmutableMultiset;true;copyOf;(Iterator);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;ImmutableSortedMultiset;true;copyOf;(Object[]);;ArrayElement of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;ImmutableSortedMultiset;true;copyOf;(Comparable[]);;ArrayElement of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;ImmutableSortedMultiset;true;copyOf;(Iterable);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;ImmutableSortedMultiset;true;copyOf;(Iterator);;Element of Argument[0];Element of ReturnValue;value", "com.google.common.collect;ImmutableSortedMultiset;true;copyOf;(Comparator,Iterable);;Element of Argument[1];Element of ReturnValue;value", "com.google.common.collect;ImmutableSortedMultiset;true;copyOf;(Comparator,Iterator);;Element of Argument[1];Element of ReturnValue;value", "com.google.common.collect;ImmutableSortedMultiset;true;copyOfSorted;(SortedMultiset);;Element of Argument[0];Element of ReturnValue;value", @@ -197,10 +220,16 @@ private class GuavaCollectCsv extends SummaryModelCsv { "com.google.common.collect;ImmutableMap;true;copyOf;(Map);;MapValue of Argument[0];MapValue of ReturnValue;value", "com.google.common.collect;ImmutableMap;true;copyOf;(Iterable);;MapKey of Element of Argument[0];MapKey of ReturnValue;value", "com.google.common.collect;ImmutableMap;true;copyOf;(Iterable);;MapValue of Element of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;ImmutableSortedMap;true;copyOf;(Map);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;ImmutableSortedMap;true;copyOf;(Map);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;ImmutableSortedMap;true;copyOf;(Iterable);;MapKey of Element of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;ImmutableSortedMap;true;copyOf;(Iterable);;MapValue of Element of Argument[0];MapValue of ReturnValue;value", "com.google.common.collect;ImmutableSortedMap;true;copyOfSorted;(SortedMap);;MapKey of Argument[0];MapKey of ReturnValue;value", "com.google.common.collect;ImmutableSortedMap;true;copyOfSorted;(SortedMap);;MapValue of Argument[0];MapValue of ReturnValue;value", "com.google.common.collect;ImmutableSortedMap;true;copyOf;(Map,Comparator);;MapKey of Argument[0];MapKey of ReturnValue;value", "com.google.common.collect;ImmutableSortedMap;true;copyOf;(Map,Comparator);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;ImmutableSortedMap;true;copyOf;(Iterable,Comparator);;MapKey of Element of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;ImmutableSortedMap;true;copyOf;(Iterable,Comparator);;MapValue of Element of Argument[0];MapValue of ReturnValue;value", "com.google.common.collect;ImmutableMultimap;true;copyOf;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value", "com.google.common.collect;ImmutableMultimap;true;copyOf;(Multimap);;MapValue of Argument[0];MapValue of ReturnValue;value", "com.google.common.collect;ImmutableMultimap;true;copyOf;(Iterable);;MapKey of Element of Argument[0];MapKey of ReturnValue;value", From b51ffadd27ade58a8d6624d507d3dae8e0b80941 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Wed, 21 Jul 2021 15:21:51 +0100 Subject: [PATCH 480/741] Improve generated tests --- .../java/frameworks/guava/Collections.qll | 4 +- .../frameworks/guava/generated/Test.java | 4815 +++++++++-------- .../frameworks/guava/generated/test.ql | 16 +- .../library-tests/frameworks/guava/specs.csv | 112 +- .../google/common/collect/ObjectArrays.java | 23 + 5 files changed, 2617 insertions(+), 2353 deletions(-) create mode 100644 java/ql/test/stubs/guava-30.0/com/google/common/collect/ObjectArrays.java diff --git a/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll b/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll index 2f776e81558..2b06e05463b 100644 --- a/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll +++ b/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll @@ -72,7 +72,7 @@ private class GuavaCollectCsv extends SummaryModelCsv { // Misc collections and utilities "com.google.common.collect;ImmutableCollection;true;asList;();;Element of Argument[-1];Element of ReturnValue;value", "com.google.common.collect;ImmutableList;true;reverse;();;Element of Argument[-1];Element of ReturnValue;value", - "com.google.common.collect;ImmutableCollection;true;subList;(int,int);;Element of Argument[-1];Element of ReturnValue;value", + "com.google.common.collect;ImmutableList;true;subList;(int,int);;Element of Argument[-1];Element of ReturnValue;value", "com.google.common.collect;BiMap;true;forcePut;(Object,Object);;Argument[0];MapKey of Argument[-1];value", "com.google.common.collect;BiMap;true;forcePut;(Object,Object);;Argument[1];MapValue of Argument[-1];value", "com.google.common.collect;BiMap;true;inverse;();;MapKey of Argument[-1];MapValue of ReturnValue;value", @@ -197,7 +197,6 @@ private class GuavaCollectCsv extends SummaryModelCsv { "com.google.common.collect;ImmutableSet;true;copyOf;(Iterable);;Element of Argument[0];Element of ReturnValue;value", "com.google.common.collect;ImmutableSet;true;copyOf;(Iterator);;Element of Argument[0];Element of ReturnValue;value", "com.google.common.collect;ImmutableSet;true;copyOf;(Collection);;Element of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;ImmutableSortedSet;true;copyOf;(Object[]);;ArrayElement of Argument[0];Element of ReturnValue;value", "com.google.common.collect;ImmutableSortedSet;true;copyOf;(Comparable[]);;ArrayElement of Argument[0];Element of ReturnValue;value", "com.google.common.collect;ImmutableSortedSet;true;copyOf;(Iterable);;Element of Argument[0];Element of ReturnValue;value", "com.google.common.collect;ImmutableSortedSet;true;copyOf;(Iterator);;Element of Argument[0];Element of ReturnValue;value", @@ -209,7 +208,6 @@ private class GuavaCollectCsv extends SummaryModelCsv { "com.google.common.collect;ImmutableMultiset;true;copyOf;(Object[]);;ArrayElement of Argument[0];Element of ReturnValue;value", "com.google.common.collect;ImmutableMultiset;true;copyOf;(Iterable);;Element of Argument[0];Element of ReturnValue;value", "com.google.common.collect;ImmutableMultiset;true;copyOf;(Iterator);;Element of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;ImmutableSortedMultiset;true;copyOf;(Object[]);;ArrayElement of Argument[0];Element of ReturnValue;value", "com.google.common.collect;ImmutableSortedMultiset;true;copyOf;(Comparable[]);;ArrayElement of Argument[0];Element of ReturnValue;value", "com.google.common.collect;ImmutableSortedMultiset;true;copyOf;(Iterable);;Element of Argument[0];Element of ReturnValue;value", "com.google.common.collect;ImmutableSortedMultiset;true;copyOf;(Iterator);;Element of Argument[0];Element of ReturnValue;value", diff --git a/java/ql/test/library-tests/frameworks/guava/generated/Test.java b/java/ql/test/library-tests/frameworks/guava/generated/Test.java index 05b35aab6c7..6fc73d5b391 100644 --- a/java/ql/test/library-tests/frameworks/guava/generated/Test.java +++ b/java/ql/test/library-tests/frameworks/guava/generated/Test.java @@ -40,7 +40,7 @@ import com.google.common.collect.Multimaps; import com.google.common.collect.Multiset; import com.google.common.collect.Multisets; import com.google.common.collect.MutableClassToInstanceMap; -//import com.google.common.collect.ObjectArrays; +import com.google.common.collect.ObjectArrays; import com.google.common.collect.PeekingIterator; import com.google.common.collect.Queues; import com.google.common.collect.RowSortedTable; @@ -92,12 +92,20 @@ public class Test { Object getArrayElement(Object container) { return null; } Object getElement(Object container) { return null; } + Object getMapDifference_left(Object container) { return null; } + Object getMapDifference_right(Object container) { return null; } Object getMapKey(Object container) { return null; } Object getMapValue(Object container) { return null; } + Object getTable_columnKey(Object container) { return null; } + Object getTable_rowKey(Object container) { return null; } Object newWithArrayElement(Object element) { return null; } Object newWithElement(Object element) { return null; } + Object newWithMapDifference_left(Object element) { return null; } + Object newWithMapDifference_right(Object element) { return null; } Object newWithMapKey(Object element) { return null; } Object newWithMapValue(Object element) { return null; } + Object newWithTable_columnKey(Object element) { return null; } + Object newWithTable_rowKey(Object element) { return null; } Object source() { return null; } void sink(Object o) { } @@ -108,7224 +116,7413 @@ public class Test { ArrayListMultimap out = null; Multimap in = (Multimap)newWithMapKey(source()); out = ArrayListMultimap.create(in); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ArrayListMultimap;true;create;(Multimap);;MapValue of Argument[0];MapValue of ReturnValue;value" ArrayListMultimap out = null; Multimap in = (Multimap)newWithMapValue(source()); out = ArrayListMultimap.create(in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ArrayTable;true;create;(Iterable,Iterable);;Element of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value" + ArrayTable out = null; + Iterable in = (Iterable)newWithElement(source()); + out = ArrayTable.create(in, null); + sink(getTable_rowKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ArrayTable;true;create;(Iterable,Iterable);;Element of Argument[1];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value" + ArrayTable out = null; + Iterable in = (Iterable)newWithElement(source()); + out = ArrayTable.create(null, in); + sink(getTable_columnKey(out)); // $ hasValueFlow } { // "com.google.common.collect;BiMap;true;forcePut;(Object,Object);;Argument[0];MapKey of Argument[-1];value" HashBiMap out = null; Object in = (Object)source(); out.forcePut(in, null); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;BiMap;true;forcePut;(Object,Object);;Argument[0];MapKey of Argument[-1];value" BiMap out = null; Object in = (Object)source(); out.forcePut(in, null); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;BiMap;true;forcePut;(Object,Object);;Argument[1];MapValue of Argument[-1];value" HashBiMap out = null; Object in = (Object)source(); out.forcePut(null, in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;BiMap;true;forcePut;(Object,Object);;Argument[1];MapValue of Argument[-1];value" BiMap out = null; Object in = (Object)source(); out.forcePut(null, in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;BiMap;true;inverse;();;MapKey of Argument[-1];MapValue of ReturnValue;value" BiMap out = null; HashBiMap in = (HashBiMap)newWithMapKey(source()); out = in.inverse(); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;BiMap;true;inverse;();;MapKey of Argument[-1];MapValue of ReturnValue;value" BiMap out = null; BiMap in = (BiMap)newWithMapKey(source()); out = in.inverse(); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;BiMap;true;inverse;();;MapValue of Argument[-1];MapKey of ReturnValue;value" BiMap out = null; HashBiMap in = (HashBiMap)newWithMapValue(source()); out = in.inverse(); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;BiMap;true;inverse;();;MapValue of Argument[-1];MapKey of ReturnValue;value" BiMap out = null; BiMap in = (BiMap)newWithMapValue(source()); out = in.inverse(); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ClassToInstanceMap;true;getInstance;(Class);;MapValue of Argument[-1];ReturnValue;value" Object out = null; MutableClassToInstanceMap in = (MutableClassToInstanceMap)newWithMapValue(source()); out = in.getInstance(null); - sink(out); // $hasValueFlow + sink(out); // $ hasValueFlow } { // "com.google.common.collect;ClassToInstanceMap;true;getInstance;(Class);;MapValue of Argument[-1];ReturnValue;value" Object out = null; ImmutableClassToInstanceMap in = (ImmutableClassToInstanceMap)newWithMapValue(source()); out = in.getInstance(null); - sink(out); // $hasValueFlow + sink(out); // $ hasValueFlow } { // "com.google.common.collect;ClassToInstanceMap;true;getInstance;(Class);;MapValue of Argument[-1];ReturnValue;value" Object out = null; ClassToInstanceMap in = (ClassToInstanceMap)newWithMapValue(source()); out = in.getInstance(null); - sink(out); // $hasValueFlow - } - { - // "com.google.common.collect;ClassToInstanceMap;true;getInstance;(Class);;MapValue of Argument[-1];ReturnValue;value" - Object out = null; - ClassToInstanceMap in = (ClassToInstanceMap)newWithMapValue(source()); - out = in.getInstance((Class)null); - sink(out); // $hasValueFlow + sink(out); // $ hasValueFlow } { // "com.google.common.collect;ClassToInstanceMap;true;putInstance;(Class,Object);;Argument[1];MapValue of Argument[-1];value" MutableClassToInstanceMap out = null; Object in = (Object)source(); out.putInstance(null, in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ClassToInstanceMap;true;putInstance;(Class,Object);;Argument[1];MapValue of Argument[-1];value" ImmutableClassToInstanceMap out = null; Object in = (Object)source(); out.putInstance(null, in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ClassToInstanceMap;true;putInstance;(Class,Object);;Argument[1];MapValue of Argument[-1];value" ClassToInstanceMap out = null; Object in = (Object)source(); out.putInstance(null, in); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ClassToInstanceMap;true;putInstance;(Class,Object);;Argument[1];MapValue of Argument[-1];value" - ClassToInstanceMap out = null; - Object in = (Object)source(); - out.putInstance((Class)null, in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ClassToInstanceMap;true;putInstance;(Class,Object);;MapValue of Argument[-1];ReturnValue;value" Object out = null; MutableClassToInstanceMap in = (MutableClassToInstanceMap)newWithMapValue(source()); out = in.putInstance(null, null); - sink(out); // $hasValueFlow + sink(out); // $ hasValueFlow } { // "com.google.common.collect;ClassToInstanceMap;true;putInstance;(Class,Object);;MapValue of Argument[-1];ReturnValue;value" Object out = null; ImmutableClassToInstanceMap in = (ImmutableClassToInstanceMap)newWithMapValue(source()); out = in.putInstance(null, null); - sink(out); // $hasValueFlow + sink(out); // $ hasValueFlow } { // "com.google.common.collect;ClassToInstanceMap;true;putInstance;(Class,Object);;MapValue of Argument[-1];ReturnValue;value" Object out = null; ClassToInstanceMap in = (ClassToInstanceMap)newWithMapValue(source()); out = in.putInstance(null, null); - sink(out); // $hasValueFlow - } - { - // "com.google.common.collect;ClassToInstanceMap;true;putInstance;(Class,Object);;MapValue of Argument[-1];ReturnValue;value" - Object out = null; - ClassToInstanceMap in = (ClassToInstanceMap)newWithMapValue(source()); - out = in.putInstance((Class)null, (Object)null); - sink(out); // $hasValueFlow + sink(out); // $ hasValueFlow } { // "com.google.common.collect;Collections2;false;filter;(Collection,Predicate);;Element of Argument[0];Element of ReturnValue;value" Collection out = null; Collection in = (Collection)newWithElement(source()); out = Collections2.filter(in, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Collections2;false;orderedPermutations;(Iterable);;Element of Argument[0];Element of ReturnValue;value" Collection out = null; Iterable in = (Iterable)newWithElement(source()); out = Collections2.orderedPermutations(in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Collections2;false;orderedPermutations;(Iterable,Comparator);;Element of Argument[0];Element of ReturnValue;value" Collection out = null; Iterable in = (Iterable)newWithElement(source()); out = Collections2.orderedPermutations(in, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Collections2;false;permutations;(Collection);;Element of Argument[0];Element of ReturnValue;value" Collection out = null; Collection in = (Collection)newWithElement(source()); out = Collections2.permutations(in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ConcurrentHashMultiset;true;create;(Iterable);;Element of Argument[0];Element of ReturnValue;value" ConcurrentHashMultiset out = null; Iterable in = (Iterable)newWithElement(source()); out = ConcurrentHashMultiset.create(in); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;HashBasedTable;true;create;(Table);;MapKey of Argument[0];MapKey of ReturnValue;value" - HashBasedTable out = null; - Table in = (Table)newWithMapKey(source()); - out = HashBasedTable.create(in); - sink(getMapKey(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;HashBasedTable;true;create;(Table);;MapValue of Argument[0];MapValue of ReturnValue;value" HashBasedTable out = null; Table in = (Table)newWithMapValue(source()); out = HashBasedTable.create(in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;HashBasedTable;true;create;(Table);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value" + HashBasedTable out = null; + Table in = (Table)newWithTable_columnKey(source()); + out = HashBasedTable.create(in); + sink(getTable_columnKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;HashBasedTable;true;create;(Table);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value" + HashBasedTable out = null; + Table in = (Table)newWithTable_rowKey(source()); + out = HashBasedTable.create(in); + sink(getTable_rowKey(out)); // $ hasValueFlow } { // "com.google.common.collect;HashBiMap;true;create;(Map);;MapKey of Argument[0];MapKey of ReturnValue;value" HashBiMap out = null; Map in = (Map)newWithMapKey(source()); out = HashBiMap.create(in); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;HashBiMap;true;create;(Map);;MapValue of Argument[0];MapValue of ReturnValue;value" HashBiMap out = null; Map in = (Map)newWithMapValue(source()); out = HashBiMap.create(in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;HashMultimap;true;create;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value" HashMultimap out = null; Multimap in = (Multimap)newWithMapKey(source()); out = HashMultimap.create(in); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;HashMultimap;true;create;(Multimap);;MapValue of Argument[0];MapValue of ReturnValue;value" HashMultimap out = null; Multimap in = (Multimap)newWithMapValue(source()); out = HashMultimap.create(in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;HashMultiset;true;create;(Iterable);;Element of Argument[0];Element of ReturnValue;value" HashMultiset out = null; Iterable in = (Iterable)newWithElement(source()); out = HashMultiset.create(in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableClassToInstanceMap;true;copyOf;(Map);;MapKey of Argument[0];MapKey of ReturnValue;value" ImmutableClassToInstanceMap out = null; Map in = (Map)newWithMapKey(source()); out = ImmutableClassToInstanceMap.copyOf(in); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableClassToInstanceMap;true;copyOf;(Map);;MapValue of Argument[0];MapValue of ReturnValue;value" ImmutableClassToInstanceMap out = null; Map in = (Map)newWithMapValue(source()); out = ImmutableClassToInstanceMap.copyOf(in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableClassToInstanceMap;true;of;(Class,Object);;Argument[0];MapKey of ReturnValue;value" ImmutableClassToInstanceMap out = null; Class in = (Class)source(); out = ImmutableClassToInstanceMap.of(in, null); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableClassToInstanceMap;true;of;(Class,Object);;Argument[1];MapValue of ReturnValue;value" ImmutableClassToInstanceMap out = null; Object in = (Object)source(); out = ImmutableClassToInstanceMap.of(null, in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;(Object);;Argument[0];Element of Argument[-1];value" ImmutableSortedSet.Builder out = null; Object in = (Object)source(); out.add(in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;(Object);;Argument[0];Element of Argument[-1];value" ImmutableSortedMultiset.Builder out = null; Object in = (Object)source(); out.add(in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;(Object);;Argument[0];Element of Argument[-1];value" ImmutableSet.Builder out = null; Object in = (Object)source(); out.add(in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;(Object);;Argument[0];Element of Argument[-1];value" ImmutableMultiset.Builder out = null; Object in = (Object)source(); out.add(in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;(Object);;Argument[0];Element of Argument[-1];value" ImmutableList.Builder out = null; Object in = (Object)source(); out.add(in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;(Object);;Argument[0];Element of Argument[-1];value" ImmutableCollection.Builder out = null; Object in = (Object)source(); out.add(in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableCollection$Builder;true;add;(Object[]);;ArrayElement of Argument[0];Element of Argument[-1];value" + ImmutableSortedSet.Builder out = null; + Object[] in = (Object[])newWithArrayElement(source()); + out.add(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableCollection$Builder;true;add;(Object[]);;ArrayElement of Argument[0];Element of Argument[-1];value" + ImmutableSortedMultiset.Builder out = null; + Object[] in = (Object[])newWithArrayElement(source()); + out.add(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableCollection$Builder;true;add;(Object[]);;ArrayElement of Argument[0];Element of Argument[-1];value" + ImmutableSet.Builder out = null; + Object[] in = (Object[])newWithArrayElement(source()); + out.add(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableCollection$Builder;true;add;(Object[]);;ArrayElement of Argument[0];Element of Argument[-1];value" + ImmutableMultiset.Builder out = null; + Object[] in = (Object[])newWithArrayElement(source()); + out.add(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableCollection$Builder;true;add;(Object[]);;ArrayElement of Argument[0];Element of Argument[-1];value" + ImmutableList.Builder out = null; + Object[] in = (Object[])newWithArrayElement(source()); + out.add(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableCollection$Builder;true;add;(Object[]);;ArrayElement of Argument[0];Element of Argument[-1];value" + ImmutableCollection.Builder out = null; + Object[] in = (Object[])newWithArrayElement(source()); + out.add(in); + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;;;Argument[-1];ReturnValue;value" ImmutableSortedSet.Builder out = null; ImmutableSortedSet.Builder in = (ImmutableSortedSet.Builder)source(); - out = in.add(); - sink(out); // $hasValueFlow + out = in.add((Object[])null); + sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;;;Argument[-1];ReturnValue;value" ImmutableSortedSet.Builder out = null; ImmutableSortedSet.Builder in = (ImmutableSortedSet.Builder)source(); out = in.add((Object)null); - sink(out); // $hasValueFlow + sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;;;Argument[-1];ReturnValue;value" ImmutableSortedMultiset.Builder out = null; ImmutableSortedMultiset.Builder in = (ImmutableSortedMultiset.Builder)source(); - out = in.add(); - sink(out); // $hasValueFlow + out = in.add((Object[])null); + sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;;;Argument[-1];ReturnValue;value" ImmutableSortedMultiset.Builder out = null; ImmutableSortedMultiset.Builder in = (ImmutableSortedMultiset.Builder)source(); out = in.add((Object)null); - sink(out); // $hasValueFlow + sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;;;Argument[-1];ReturnValue;value" ImmutableSet.Builder out = null; ImmutableSet.Builder in = (ImmutableSet.Builder)source(); - out = in.add(); - sink(out); // $hasValueFlow + out = in.add((Object[])null); + sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;;;Argument[-1];ReturnValue;value" ImmutableSet.Builder out = null; ImmutableSet.Builder in = (ImmutableSet.Builder)source(); out = in.add((Object)null); - sink(out); // $hasValueFlow + sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;;;Argument[-1];ReturnValue;value" ImmutableMultiset.Builder out = null; ImmutableMultiset.Builder in = (ImmutableMultiset.Builder)source(); - out = in.add(); - sink(out); // $hasValueFlow + out = in.add((Object[])null); + sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;;;Argument[-1];ReturnValue;value" ImmutableMultiset.Builder out = null; ImmutableMultiset.Builder in = (ImmutableMultiset.Builder)source(); out = in.add((Object)null); - sink(out); // $hasValueFlow + sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;;;Argument[-1];ReturnValue;value" ImmutableList.Builder out = null; ImmutableList.Builder in = (ImmutableList.Builder)source(); - out = in.add(); - sink(out); // $hasValueFlow + out = in.add((Object[])null); + sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;;;Argument[-1];ReturnValue;value" ImmutableList.Builder out = null; ImmutableList.Builder in = (ImmutableList.Builder)source(); out = in.add((Object)null); - sink(out); // $hasValueFlow + sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;;;Argument[-1];ReturnValue;value" ImmutableCollection.Builder out = null; ImmutableCollection.Builder in = (ImmutableCollection.Builder)source(); - out = in.add(); - sink(out); // $hasValueFlow + out = in.add((Object[])null); + sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;;;Argument[-1];ReturnValue;value" ImmutableCollection.Builder out = null; ImmutableCollection.Builder in = (ImmutableCollection.Builder)source(); out = in.add((Object)null); - sink(out); // $hasValueFlow + sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;(Iterable);;Element of Argument[0];Element of Argument[-1];value" ImmutableSortedSet.Builder out = null; Iterable in = (Iterable)newWithElement(source()); out.addAll(in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;(Iterable);;Element of Argument[0];Element of Argument[-1];value" ImmutableSortedMultiset.Builder out = null; Iterable in = (Iterable)newWithElement(source()); out.addAll(in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;(Iterable);;Element of Argument[0];Element of Argument[-1];value" ImmutableSet.Builder out = null; Iterable in = (Iterable)newWithElement(source()); out.addAll(in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;(Iterable);;Element of Argument[0];Element of Argument[-1];value" ImmutableMultiset.Builder out = null; Iterable in = (Iterable)newWithElement(source()); out.addAll(in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;(Iterable);;Element of Argument[0];Element of Argument[-1];value" ImmutableList.Builder out = null; Iterable in = (Iterable)newWithElement(source()); out.addAll(in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;(Iterable);;Element of Argument[0];Element of Argument[-1];value" ImmutableCollection.Builder out = null; Iterable in = (Iterable)newWithElement(source()); out.addAll(in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;(Iterator);;Element of Argument[0];Element of Argument[-1];value" ImmutableSortedSet.Builder out = null; Iterator in = (Iterator)newWithElement(source()); out.addAll(in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;(Iterator);;Element of Argument[0];Element of Argument[-1];value" ImmutableSortedMultiset.Builder out = null; Iterator in = (Iterator)newWithElement(source()); out.addAll(in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;(Iterator);;Element of Argument[0];Element of Argument[-1];value" ImmutableSet.Builder out = null; Iterator in = (Iterator)newWithElement(source()); out.addAll(in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;(Iterator);;Element of Argument[0];Element of Argument[-1];value" ImmutableMultiset.Builder out = null; Iterator in = (Iterator)newWithElement(source()); out.addAll(in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;(Iterator);;Element of Argument[0];Element of Argument[-1];value" ImmutableList.Builder out = null; Iterator in = (Iterator)newWithElement(source()); out.addAll(in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;(Iterator);;Element of Argument[0];Element of Argument[-1];value" ImmutableCollection.Builder out = null; Iterator in = (Iterator)newWithElement(source()); out.addAll(in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;;;Argument[-1];ReturnValue;value" ImmutableSortedSet.Builder out = null; ImmutableSortedSet.Builder in = (ImmutableSortedSet.Builder)source(); out = in.addAll((Iterator)null); - sink(out); // $hasValueFlow + sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;;;Argument[-1];ReturnValue;value" ImmutableSortedSet.Builder out = null; ImmutableSortedSet.Builder in = (ImmutableSortedSet.Builder)source(); out = in.addAll((Iterable)null); - sink(out); // $hasValueFlow + sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;;;Argument[-1];ReturnValue;value" ImmutableSortedMultiset.Builder out = null; ImmutableSortedMultiset.Builder in = (ImmutableSortedMultiset.Builder)source(); out = in.addAll((Iterator)null); - sink(out); // $hasValueFlow + sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;;;Argument[-1];ReturnValue;value" ImmutableSortedMultiset.Builder out = null; ImmutableSortedMultiset.Builder in = (ImmutableSortedMultiset.Builder)source(); out = in.addAll((Iterable)null); - sink(out); // $hasValueFlow + sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;;;Argument[-1];ReturnValue;value" ImmutableSet.Builder out = null; ImmutableSet.Builder in = (ImmutableSet.Builder)source(); out = in.addAll((Iterator)null); - sink(out); // $hasValueFlow + sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;;;Argument[-1];ReturnValue;value" ImmutableSet.Builder out = null; ImmutableSet.Builder in = (ImmutableSet.Builder)source(); out = in.addAll((Iterable)null); - sink(out); // $hasValueFlow + sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;;;Argument[-1];ReturnValue;value" ImmutableMultiset.Builder out = null; ImmutableMultiset.Builder in = (ImmutableMultiset.Builder)source(); out = in.addAll((Iterator)null); - sink(out); // $hasValueFlow + sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;;;Argument[-1];ReturnValue;value" ImmutableMultiset.Builder out = null; ImmutableMultiset.Builder in = (ImmutableMultiset.Builder)source(); out = in.addAll((Iterable)null); - sink(out); // $hasValueFlow + sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;;;Argument[-1];ReturnValue;value" ImmutableList.Builder out = null; ImmutableList.Builder in = (ImmutableList.Builder)source(); out = in.addAll((Iterator)null); - sink(out); // $hasValueFlow + sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;;;Argument[-1];ReturnValue;value" ImmutableList.Builder out = null; ImmutableList.Builder in = (ImmutableList.Builder)source(); out = in.addAll((Iterable)null); - sink(out); // $hasValueFlow + sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;;;Argument[-1];ReturnValue;value" ImmutableCollection.Builder out = null; ImmutableCollection.Builder in = (ImmutableCollection.Builder)source(); out = in.addAll((Iterator)null); - sink(out); // $hasValueFlow + sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;;;Argument[-1];ReturnValue;value" ImmutableCollection.Builder out = null; ImmutableCollection.Builder in = (ImmutableCollection.Builder)source(); out = in.addAll((Iterable)null); - sink(out); // $hasValueFlow + sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;build;();;Element of Argument[-1];Element of ReturnValue;value" ImmutableSortedSet out = null; ImmutableSortedSet.Builder in = (ImmutableSortedSet.Builder)newWithElement(source()); out = in.build(); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;build;();;Element of Argument[-1];Element of ReturnValue;value" ImmutableSortedMultiset out = null; ImmutableSortedMultiset.Builder in = (ImmutableSortedMultiset.Builder)newWithElement(source()); out = in.build(); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;build;();;Element of Argument[-1];Element of ReturnValue;value" ImmutableSet out = null; ImmutableSet.Builder in = (ImmutableSet.Builder)newWithElement(source()); out = in.build(); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;build;();;Element of Argument[-1];Element of ReturnValue;value" ImmutableMultiset out = null; ImmutableMultiset.Builder in = (ImmutableMultiset.Builder)newWithElement(source()); out = in.build(); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;build;();;Element of Argument[-1];Element of ReturnValue;value" ImmutableList out = null; ImmutableList.Builder in = (ImmutableList.Builder)newWithElement(source()); out = in.build(); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;build;();;Element of Argument[-1];Element of ReturnValue;value" ImmutableCollection out = null; ImmutableCollection.Builder in = (ImmutableCollection.Builder)newWithElement(source()); out = in.build(); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection;true;asList;();;Element of Argument[-1];Element of ReturnValue;value" ImmutableList out = null; ImmutableSet in = (ImmutableSet)newWithElement(source()); out = in.asList(); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection;true;asList;();;Element of Argument[-1];Element of ReturnValue;value" ImmutableList out = null; ImmutableMultiset in = (ImmutableMultiset)newWithElement(source()); out = in.asList(); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection;true;asList;();;Element of Argument[-1];Element of ReturnValue;value" ImmutableList out = null; ImmutableList in = (ImmutableList)newWithElement(source()); out = in.asList(); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection;true;asList;();;Element of Argument[-1];Element of ReturnValue;value" ImmutableList out = null; ImmutableCollection in = (ImmutableCollection)newWithElement(source()); out = in.asList(); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableCollection;true;subList;(int,int);;Element of Argument[-1];Element of ReturnValue;value" - ImmutableList out = null; - ImmutableList in = (ImmutableList)newWithElement(source()); - out = in.subList(0, 0); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;copyOf;(Collection);;Element of Argument[0];Element of ReturnValue;value" ImmutableList out = null; Collection in = (Collection)newWithElement(source()); out = ImmutableList.copyOf(in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;copyOf;(Iterable);;Element of Argument[0];Element of ReturnValue;value" ImmutableList out = null; Iterable in = (Iterable)newWithElement(source()); out = ImmutableList.copyOf(in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;copyOf;(Iterator);;Element of Argument[0];Element of ReturnValue;value" ImmutableList out = null; Iterator in = (Iterator)newWithElement(source()); out = ImmutableList.copyOf(in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableList;true;copyOf;(Object[]);;ArrayElement of Argument[0];Element of ReturnValue;value" + ImmutableList out = null; + Object[] in = (Object[])newWithArrayElement(source()); + out = ImmutableList.copyOf(in); + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = (Object)source(); out = ImmutableList.of(null, null, null, null, null, null, null, null, null, null, null, in, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = (Object)source(); out = ImmutableList.of(null, null, null, null, null, null, null, null, null, null, in, null, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = (Object)source(); out = ImmutableList.of(null, null, null, null, null, null, null, null, null, null, in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = (Object)source(); out = ImmutableList.of(null, null, null, null, null, null, null, null, null, in, null, null, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = (Object)source(); out = ImmutableList.of(null, null, null, null, null, null, null, null, null, in, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = (Object)source(); out = ImmutableList.of(null, null, null, null, null, null, null, null, null, in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = (Object)source(); out = ImmutableList.of(null, null, null, null, null, null, null, null, in, null, null, null, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = (Object)source(); out = ImmutableList.of(null, null, null, null, null, null, null, null, in, null, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = (Object)source(); out = ImmutableList.of(null, null, null, null, null, null, null, null, in, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = (Object)source(); out = ImmutableList.of(null, null, null, null, null, null, null, null, in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = (Object)source(); out = ImmutableList.of(null, null, null, null, null, null, null, in, null, null, null, null, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = (Object)source(); out = ImmutableList.of(null, null, null, null, null, null, null, in, null, null, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = (Object)source(); out = ImmutableList.of(null, null, null, null, null, null, null, in, null, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = (Object)source(); out = ImmutableList.of(null, null, null, null, null, null, null, in, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = (Object)source(); out = ImmutableList.of(null, null, null, null, null, null, null, in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = (Object)source(); out = ImmutableList.of(null, null, null, null, null, null, in, null, null, null, null, null, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = (Object)source(); out = ImmutableList.of(null, null, null, null, null, null, in, null, null, null, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = (Object)source(); out = ImmutableList.of(null, null, null, null, null, null, in, null, null, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = (Object)source(); out = ImmutableList.of(null, null, null, null, null, null, in, null, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = (Object)source(); out = ImmutableList.of(null, null, null, null, null, null, in, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = (Object)source(); out = ImmutableList.of(null, null, null, null, null, null, in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = (Object)source(); out = ImmutableList.of(null, null, null, null, null, in, null, null, null, null, null, null, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = (Object)source(); out = ImmutableList.of(null, null, null, null, null, in, null, null, null, null, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = (Object)source(); out = ImmutableList.of(null, null, null, null, null, in, null, null, null, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = (Object)source(); out = ImmutableList.of(null, null, null, null, null, in, null, null, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = (Object)source(); out = ImmutableList.of(null, null, null, null, null, in, null, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = (Object)source(); out = ImmutableList.of(null, null, null, null, null, in, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = (Object)source(); out = ImmutableList.of(null, null, null, null, null, in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = (Object)source(); out = ImmutableList.of(null, null, null, null, in, null, null, null, null, null, null, null, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = (Object)source(); out = ImmutableList.of(null, null, null, null, in, null, null, null, null, null, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = (Object)source(); out = ImmutableList.of(null, null, null, null, in, null, null, null, null, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = (Object)source(); out = ImmutableList.of(null, null, null, null, in, null, null, null, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = (Object)source(); out = ImmutableList.of(null, null, null, null, in, null, null, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = (Object)source(); out = ImmutableList.of(null, null, null, null, in, null, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = (Object)source(); out = ImmutableList.of(null, null, null, null, in, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = (Object)source(); out = ImmutableList.of(null, null, null, null, in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = (Object)source(); out = ImmutableList.of(null, null, null, in, null, null, null, null, null, null, null, null, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = (Object)source(); out = ImmutableList.of(null, null, null, in, null, null, null, null, null, null, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = (Object)source(); out = ImmutableList.of(null, null, null, in, null, null, null, null, null, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = (Object)source(); out = ImmutableList.of(null, null, null, in, null, null, null, null, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = (Object)source(); out = ImmutableList.of(null, null, null, in, null, null, null, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = (Object)source(); out = ImmutableList.of(null, null, null, in, null, null, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = (Object)source(); out = ImmutableList.of(null, null, null, in, null, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = (Object)source(); out = ImmutableList.of(null, null, null, in, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = (Object)source(); out = ImmutableList.of(null, null, null, in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = (Object)source(); out = ImmutableList.of(null, null, in, null, null, null, null, null, null, null, null, null, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = (Object)source(); out = ImmutableList.of(null, null, in, null, null, null, null, null, null, null, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = (Object)source(); out = ImmutableList.of(null, null, in, null, null, null, null, null, null, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = (Object)source(); out = ImmutableList.of(null, null, in, null, null, null, null, null, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = (Object)source(); out = ImmutableList.of(null, null, in, null, null, null, null, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = (Object)source(); out = ImmutableList.of(null, null, in, null, null, null, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = (Object)source(); out = ImmutableList.of(null, null, in, null, null, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = (Object)source(); out = ImmutableList.of(null, null, in, null, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = (Object)source(); out = ImmutableList.of(null, null, in, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = (Object)source(); out = ImmutableList.of(null, null, in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = (Object)source(); out = ImmutableList.of(null, in, null, null, null, null, null, null, null, null, null, null, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = (Object)source(); out = ImmutableList.of(null, in, null, null, null, null, null, null, null, null, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = (Object)source(); out = ImmutableList.of(null, in, null, null, null, null, null, null, null, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = (Object)source(); out = ImmutableList.of(null, in, null, null, null, null, null, null, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = (Object)source(); out = ImmutableList.of(null, in, null, null, null, null, null, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = (Object)source(); out = ImmutableList.of(null, in, null, null, null, null, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = (Object)source(); out = ImmutableList.of(null, in, null, null, null, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = (Object)source(); out = ImmutableList.of(null, in, null, null, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = (Object)source(); out = ImmutableList.of(null, in, null, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = (Object)source(); out = ImmutableList.of(null, in, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = (Object)source(); out = ImmutableList.of(null, in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = (Object)source(); out = ImmutableList.of(in, null, null, null, null, null, null, null, null, null, null, null, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = (Object)source(); out = ImmutableList.of(in, null, null, null, null, null, null, null, null, null, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = (Object)source(); out = ImmutableList.of(in, null, null, null, null, null, null, null, null, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = (Object)source(); out = ImmutableList.of(in, null, null, null, null, null, null, null, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = (Object)source(); out = ImmutableList.of(in, null, null, null, null, null, null, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = (Object)source(); out = ImmutableList.of(in, null, null, null, null, null, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = (Object)source(); out = ImmutableList.of(in, null, null, null, null, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = (Object)source(); out = ImmutableList.of(in, null, null, null, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = (Object)source(); out = ImmutableList.of(in, null, null, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = (Object)source(); out = ImmutableList.of(in, null, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = (Object)source(); out = ImmutableList.of(in, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = (Object)source(); out = ImmutableList.of(in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableList;true;of;;;ArrayElement of Argument[12];Element of ReturnValue;value" + ImmutableList out = null; + Object[] in = (Object[])newWithArrayElement(source()); + out = ImmutableList.of(null, null, null, null, null, null, null, null, null, null, null, null, in); + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;reverse;();;Element of Argument[-1];Element of ReturnValue;value" ImmutableList out = null; ImmutableList in = (ImmutableList)newWithElement(source()); out = in.reverse(); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;sortedCopyOf;(Comparator,Iterable);;Element of Argument[1];Element of ReturnValue;value" ImmutableList out = null; Iterable in = (Iterable)newWithElement(source()); out = ImmutableList.sortedCopyOf(null, in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;sortedCopyOf;(Iterable);;Element of Argument[0];Element of ReturnValue;value" ImmutableList out = null; Iterable in = (Iterable)newWithElement(source()); out = ImmutableList.sortedCopyOf(in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableList;true;subList;(int,int);;Element of Argument[-1];Element of ReturnValue;value" + ImmutableList out = null; + ImmutableList in = (ImmutableList)newWithElement(source()); + out = in.subList(0, 0); + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;build;();;MapKey of Argument[-1];MapKey of ReturnValue;value" ImmutableSortedMap out = null; ImmutableSortedMap.Builder in = (ImmutableSortedMap.Builder)newWithMapKey(source()); out = in.build(); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;build;();;MapKey of Argument[-1];MapKey of ReturnValue;value" ImmutableMap out = null; ImmutableMap.Builder in = (ImmutableMap.Builder)newWithMapKey(source()); out = in.build(); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;build;();;MapValue of Argument[-1];MapValue of ReturnValue;value" ImmutableSortedMap out = null; ImmutableSortedMap.Builder in = (ImmutableSortedMap.Builder)newWithMapValue(source()); out = in.build(); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;build;();;MapValue of Argument[-1];MapValue of ReturnValue;value" ImmutableMap out = null; ImmutableMap.Builder in = (ImmutableMap.Builder)newWithMapValue(source()); out = in.build(); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;orderEntriesByValue;(Comparator);;Argument[-1];ReturnValue;value" ImmutableSortedMap.Builder out = null; ImmutableSortedMap.Builder in = (ImmutableSortedMap.Builder)source(); out = in.orderEntriesByValue(null); - sink(out); // $hasValueFlow + sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;orderEntriesByValue;(Comparator);;Argument[-1];ReturnValue;value" ImmutableMap.Builder out = null; ImmutableMap.Builder in = (ImmutableMap.Builder)source(); out = in.orderEntriesByValue(null); - sink(out); // $hasValueFlow + sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;put;(Entry);;MapKey of Argument[0];MapKey of Argument[-1];value" ImmutableSortedMap.Builder out = null; Map.Entry in = (Map.Entry)newWithMapKey(source()); out.put(in); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;put;(Entry);;MapKey of Argument[0];MapKey of Argument[-1];value" ImmutableMap.Builder out = null; Map.Entry in = (Map.Entry)newWithMapKey(source()); out.put(in); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;put;(Entry);;MapValue of Argument[0];MapValue of Argument[-1];value" ImmutableSortedMap.Builder out = null; Map.Entry in = (Map.Entry)newWithMapValue(source()); out.put(in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;put;(Entry);;MapValue of Argument[0];MapValue of Argument[-1];value" ImmutableMap.Builder out = null; Map.Entry in = (Map.Entry)newWithMapValue(source()); out.put(in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;put;(Object,Object);;Argument[0];MapKey of Argument[-1];value" ImmutableSortedMap.Builder out = null; Object in = (Object)source(); out.put(in, null); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;put;(Object,Object);;Argument[0];MapKey of Argument[-1];value" ImmutableMap.Builder out = null; Object in = (Object)source(); out.put(in, null); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;put;(Object,Object);;Argument[1];MapValue of Argument[-1];value" ImmutableSortedMap.Builder out = null; Object in = (Object)source(); out.put(null, in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;put;(Object,Object);;Argument[1];MapValue of Argument[-1];value" ImmutableMap.Builder out = null; Object in = (Object)source(); out.put(null, in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;put;;;Argument[-1];ReturnValue;value" ImmutableSortedMap.Builder out = null; ImmutableSortedMap.Builder in = (ImmutableSortedMap.Builder)source(); out = in.put(null, null); - sink(out); // $hasValueFlow + sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;put;;;Argument[-1];ReturnValue;value" ImmutableSortedMap.Builder out = null; ImmutableSortedMap.Builder in = (ImmutableSortedMap.Builder)source(); out = in.put(null); - sink(out); // $hasValueFlow + sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;put;;;Argument[-1];ReturnValue;value" ImmutableMap.Builder out = null; ImmutableMap.Builder in = (ImmutableMap.Builder)source(); out = in.put(null, null); - sink(out); // $hasValueFlow + sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;put;;;Argument[-1];ReturnValue;value" ImmutableMap.Builder out = null; ImmutableMap.Builder in = (ImmutableMap.Builder)source(); out = in.put(null); - sink(out); // $hasValueFlow + sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;putAll;(Iterable);;MapKey of Element of Argument[0];MapKey of Argument[-1];value" ImmutableSortedMap.Builder out = null; Iterable in = (Iterable)newWithElement(newWithMapKey(source())); out.putAll(in); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;putAll;(Iterable);;MapKey of Element of Argument[0];MapKey of Argument[-1];value" ImmutableMap.Builder out = null; Iterable in = (Iterable)newWithElement(newWithMapKey(source())); out.putAll(in); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;putAll;(Iterable);;MapValue of Element of Argument[0];MapValue of Argument[-1];value" ImmutableSortedMap.Builder out = null; Iterable in = (Iterable)newWithElement(newWithMapValue(source())); out.putAll(in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;putAll;(Iterable);;MapValue of Element of Argument[0];MapValue of Argument[-1];value" ImmutableMap.Builder out = null; Iterable in = (Iterable)newWithElement(newWithMapValue(source())); out.putAll(in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;putAll;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value" ImmutableSortedMap.Builder out = null; Map in = (Map)newWithMapKey(source()); out.putAll(in); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;putAll;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value" ImmutableMap.Builder out = null; Map in = (Map)newWithMapKey(source()); out.putAll(in); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;putAll;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value" ImmutableSortedMap.Builder out = null; Map in = (Map)newWithMapValue(source()); out.putAll(in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;putAll;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value" ImmutableMap.Builder out = null; Map in = (Map)newWithMapValue(source()); out.putAll(in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;putAll;;;Argument[-1];ReturnValue;value" ImmutableSortedMap.Builder out = null; ImmutableSortedMap.Builder in = (ImmutableSortedMap.Builder)source(); out = in.putAll((Map)null); - sink(out); // $hasValueFlow + sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;putAll;;;Argument[-1];ReturnValue;value" ImmutableSortedMap.Builder out = null; ImmutableSortedMap.Builder in = (ImmutableSortedMap.Builder)source(); out = in.putAll((Iterable)null); - sink(out); // $hasValueFlow + sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;putAll;;;Argument[-1];ReturnValue;value" ImmutableMap.Builder out = null; ImmutableMap.Builder in = (ImmutableMap.Builder)source(); out = in.putAll((Map)null); - sink(out); // $hasValueFlow + sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;putAll;;;Argument[-1];ReturnValue;value" ImmutableMap.Builder out = null; ImmutableMap.Builder in = (ImmutableMap.Builder)source(); out = in.putAll((Iterable)null); - sink(out); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMap;true;copyOf;(Iterable);;MapKey of Element of Argument[0];MapKey of ReturnValue;value" - ImmutableSortedMap out = null; - Iterable in = (Iterable)newWithElement(newWithMapKey(source())); - out = ImmutableSortedMap.copyOf(in); - sink(getMapKey(out)); // $hasValueFlow + sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap;true;copyOf;(Iterable);;MapKey of Element of Argument[0];MapKey of ReturnValue;value" ImmutableMap out = null; Iterable in = (Iterable)newWithElement(newWithMapKey(source())); out = ImmutableMap.copyOf(in); - sink(getMapKey(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMap;true;copyOf;(Iterable);;MapValue of Element of Argument[0];MapValue of ReturnValue;value" - ImmutableSortedMap out = null; - Iterable in = (Iterable)newWithElement(newWithMapValue(source())); - out = ImmutableSortedMap.copyOf(in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap;true;copyOf;(Iterable);;MapValue of Element of Argument[0];MapValue of ReturnValue;value" ImmutableMap out = null; Iterable in = (Iterable)newWithElement(newWithMapValue(source())); out = ImmutableMap.copyOf(in); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMap;true;copyOf;(Map);;MapKey of Argument[0];MapKey of ReturnValue;value" - ImmutableSortedMap out = null; - Map in = (Map)newWithMapKey(source()); - out = ImmutableSortedMap.copyOf(in); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap;true;copyOf;(Map);;MapKey of Argument[0];MapKey of ReturnValue;value" ImmutableMap out = null; Map in = (Map)newWithMapKey(source()); out = ImmutableMap.copyOf(in); - sink(getMapKey(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMap;true;copyOf;(Map);;MapValue of Argument[0];MapValue of ReturnValue;value" - ImmutableSortedMap out = null; - Map in = (Map)newWithMapValue(source()); - out = ImmutableSortedMap.copyOf(in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap;true;copyOf;(Map);;MapValue of Argument[0];MapValue of ReturnValue;value" ImmutableMap out = null; Map in = (Map)newWithMapValue(source()); out = ImmutableMap.copyOf(in); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMap;true;of;;;Argument[0];MapKey of ReturnValue;value" - ImmutableSortedMap out = null; - Comparable in = (Comparable)source(); - out = ImmutableSortedMap.of(in, null, null, null, null, null, null, null, null, null); - sink(getMapKey(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMap;true;of;;;Argument[0];MapKey of ReturnValue;value" - ImmutableSortedMap out = null; - Comparable in = (Comparable)source(); - out = ImmutableSortedMap.of(in, null, null, null, null, null, null, null); - sink(getMapKey(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMap;true;of;;;Argument[0];MapKey of ReturnValue;value" - ImmutableSortedMap out = null; - Comparable in = (Comparable)source(); - out = ImmutableSortedMap.of(in, null, null, null, null, null); - sink(getMapKey(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMap;true;of;;;Argument[0];MapKey of ReturnValue;value" - ImmutableSortedMap out = null; - Comparable in = (Comparable)source(); - out = ImmutableSortedMap.of(in, null, null, null); - sink(getMapKey(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMap;true;of;;;Argument[0];MapKey of ReturnValue;value" - ImmutableSortedMap out = null; - Comparable in = (Comparable)source(); - out = ImmutableSortedMap.of(in, null); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[0];MapKey of ReturnValue;value" ImmutableMap out = null; Object in = (Object)source(); out = ImmutableMap.of(in, null, null, null, null, null, null, null, null, null); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[0];MapKey of ReturnValue;value" ImmutableMap out = null; Object in = (Object)source(); out = ImmutableMap.of(in, null, null, null, null, null, null, null); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[0];MapKey of ReturnValue;value" ImmutableMap out = null; Object in = (Object)source(); out = ImmutableMap.of(in, null, null, null, null, null); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[0];MapKey of ReturnValue;value" ImmutableMap out = null; Object in = (Object)source(); out = ImmutableMap.of(in, null, null, null); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[0];MapKey of ReturnValue;value" ImmutableMap out = null; Object in = (Object)source(); out = ImmutableMap.of(in, null); - sink(getMapKey(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMap;true;of;;;Argument[1];MapValue of ReturnValue;value" - ImmutableSortedMap out = null; - Object in = (Object)source(); - out = ImmutableSortedMap.of(null, in, null, null, null, null, null, null, null, null); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMap;true;of;;;Argument[1];MapValue of ReturnValue;value" - ImmutableSortedMap out = null; - Object in = (Object)source(); - out = ImmutableSortedMap.of(null, in, null, null, null, null, null, null); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMap;true;of;;;Argument[1];MapValue of ReturnValue;value" - ImmutableSortedMap out = null; - Object in = (Object)source(); - out = ImmutableSortedMap.of(null, in, null, null, null, null); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMap;true;of;;;Argument[1];MapValue of ReturnValue;value" - ImmutableSortedMap out = null; - Object in = (Object)source(); - out = ImmutableSortedMap.of(null, in, null, null); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMap;true;of;;;Argument[1];MapValue of ReturnValue;value" - ImmutableSortedMap out = null; - Object in = (Object)source(); - out = ImmutableSortedMap.of(null, in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[1];MapValue of ReturnValue;value" ImmutableMap out = null; Object in = (Object)source(); out = ImmutableMap.of(null, in, null, null, null, null, null, null, null, null); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[1];MapValue of ReturnValue;value" ImmutableMap out = null; Object in = (Object)source(); out = ImmutableMap.of(null, in, null, null, null, null, null, null); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[1];MapValue of ReturnValue;value" ImmutableMap out = null; Object in = (Object)source(); out = ImmutableMap.of(null, in, null, null, null, null); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[1];MapValue of ReturnValue;value" ImmutableMap out = null; Object in = (Object)source(); out = ImmutableMap.of(null, in, null, null); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[1];MapValue of ReturnValue;value" ImmutableMap out = null; Object in = (Object)source(); out = ImmutableMap.of(null, in); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMap;true;of;;;Argument[2];MapKey of ReturnValue;value" - ImmutableSortedMap out = null; - Comparable in = (Comparable)source(); - out = ImmutableSortedMap.of(null, null, in, null, null, null, null, null, null, null); - sink(getMapKey(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMap;true;of;;;Argument[2];MapKey of ReturnValue;value" - ImmutableSortedMap out = null; - Comparable in = (Comparable)source(); - out = ImmutableSortedMap.of(null, null, in, null, null, null, null, null); - sink(getMapKey(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMap;true;of;;;Argument[2];MapKey of ReturnValue;value" - ImmutableSortedMap out = null; - Comparable in = (Comparable)source(); - out = ImmutableSortedMap.of(null, null, in, null, null, null); - sink(getMapKey(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMap;true;of;;;Argument[2];MapKey of ReturnValue;value" - ImmutableSortedMap out = null; - Comparable in = (Comparable)source(); - out = ImmutableSortedMap.of(null, null, in, null); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[2];MapKey of ReturnValue;value" ImmutableMap out = null; Object in = (Object)source(); out = ImmutableMap.of(null, null, in, null, null, null, null, null, null, null); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[2];MapKey of ReturnValue;value" ImmutableMap out = null; Object in = (Object)source(); out = ImmutableMap.of(null, null, in, null, null, null, null, null); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[2];MapKey of ReturnValue;value" ImmutableMap out = null; Object in = (Object)source(); out = ImmutableMap.of(null, null, in, null, null, null); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[2];MapKey of ReturnValue;value" ImmutableMap out = null; Object in = (Object)source(); out = ImmutableMap.of(null, null, in, null); - sink(getMapKey(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMap;true;of;;;Argument[3];MapValue of ReturnValue;value" - ImmutableSortedMap out = null; - Object in = (Object)source(); - out = ImmutableSortedMap.of(null, null, null, in, null, null, null, null, null, null); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMap;true;of;;;Argument[3];MapValue of ReturnValue;value" - ImmutableSortedMap out = null; - Object in = (Object)source(); - out = ImmutableSortedMap.of(null, null, null, in, null, null, null, null); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMap;true;of;;;Argument[3];MapValue of ReturnValue;value" - ImmutableSortedMap out = null; - Object in = (Object)source(); - out = ImmutableSortedMap.of(null, null, null, in, null, null); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMap;true;of;;;Argument[3];MapValue of ReturnValue;value" - ImmutableSortedMap out = null; - Object in = (Object)source(); - out = ImmutableSortedMap.of(null, null, null, in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[3];MapValue of ReturnValue;value" ImmutableMap out = null; Object in = (Object)source(); out = ImmutableMap.of(null, null, null, in, null, null, null, null, null, null); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[3];MapValue of ReturnValue;value" ImmutableMap out = null; Object in = (Object)source(); out = ImmutableMap.of(null, null, null, in, null, null, null, null); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[3];MapValue of ReturnValue;value" ImmutableMap out = null; Object in = (Object)source(); out = ImmutableMap.of(null, null, null, in, null, null); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[3];MapValue of ReturnValue;value" ImmutableMap out = null; Object in = (Object)source(); out = ImmutableMap.of(null, null, null, in); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMap;true;of;;;Argument[4];MapKey of ReturnValue;value" - ImmutableSortedMap out = null; - Comparable in = (Comparable)source(); - out = ImmutableSortedMap.of(null, null, null, null, in, null, null, null, null, null); - sink(getMapKey(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMap;true;of;;;Argument[4];MapKey of ReturnValue;value" - ImmutableSortedMap out = null; - Comparable in = (Comparable)source(); - out = ImmutableSortedMap.of(null, null, null, null, in, null, null, null); - sink(getMapKey(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMap;true;of;;;Argument[4];MapKey of ReturnValue;value" - ImmutableSortedMap out = null; - Comparable in = (Comparable)source(); - out = ImmutableSortedMap.of(null, null, null, null, in, null); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[4];MapKey of ReturnValue;value" ImmutableMap out = null; Object in = (Object)source(); out = ImmutableMap.of(null, null, null, null, in, null, null, null, null, null); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[4];MapKey of ReturnValue;value" ImmutableMap out = null; Object in = (Object)source(); out = ImmutableMap.of(null, null, null, null, in, null, null, null); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[4];MapKey of ReturnValue;value" ImmutableMap out = null; Object in = (Object)source(); out = ImmutableMap.of(null, null, null, null, in, null); - sink(getMapKey(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMap;true;of;;;Argument[5];MapValue of ReturnValue;value" - ImmutableSortedMap out = null; - Object in = (Object)source(); - out = ImmutableSortedMap.of(null, null, null, null, null, in, null, null, null, null); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMap;true;of;;;Argument[5];MapValue of ReturnValue;value" - ImmutableSortedMap out = null; - Object in = (Object)source(); - out = ImmutableSortedMap.of(null, null, null, null, null, in, null, null); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMap;true;of;;;Argument[5];MapValue of ReturnValue;value" - ImmutableSortedMap out = null; - Object in = (Object)source(); - out = ImmutableSortedMap.of(null, null, null, null, null, in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[5];MapValue of ReturnValue;value" ImmutableMap out = null; Object in = (Object)source(); out = ImmutableMap.of(null, null, null, null, null, in, null, null, null, null); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[5];MapValue of ReturnValue;value" ImmutableMap out = null; Object in = (Object)source(); out = ImmutableMap.of(null, null, null, null, null, in, null, null); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[5];MapValue of ReturnValue;value" ImmutableMap out = null; Object in = (Object)source(); out = ImmutableMap.of(null, null, null, null, null, in); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMap;true;of;;;Argument[6];MapKey of ReturnValue;value" - ImmutableSortedMap out = null; - Comparable in = (Comparable)source(); - out = ImmutableSortedMap.of(null, null, null, null, null, null, in, null, null, null); - sink(getMapKey(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMap;true;of;;;Argument[6];MapKey of ReturnValue;value" - ImmutableSortedMap out = null; - Comparable in = (Comparable)source(); - out = ImmutableSortedMap.of(null, null, null, null, null, null, in, null); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[6];MapKey of ReturnValue;value" ImmutableMap out = null; Object in = (Object)source(); out = ImmutableMap.of(null, null, null, null, null, null, in, null, null, null); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[6];MapKey of ReturnValue;value" ImmutableMap out = null; Object in = (Object)source(); out = ImmutableMap.of(null, null, null, null, null, null, in, null); - sink(getMapKey(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMap;true;of;;;Argument[7];MapValue of ReturnValue;value" - ImmutableSortedMap out = null; - Object in = (Object)source(); - out = ImmutableSortedMap.of(null, null, null, null, null, null, null, in, null, null); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMap;true;of;;;Argument[7];MapValue of ReturnValue;value" - ImmutableSortedMap out = null; - Object in = (Object)source(); - out = ImmutableSortedMap.of(null, null, null, null, null, null, null, in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[7];MapValue of ReturnValue;value" ImmutableMap out = null; Object in = (Object)source(); out = ImmutableMap.of(null, null, null, null, null, null, null, in, null, null); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[7];MapValue of ReturnValue;value" ImmutableMap out = null; Object in = (Object)source(); out = ImmutableMap.of(null, null, null, null, null, null, null, in); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMap;true;of;;;Argument[8];MapKey of ReturnValue;value" - ImmutableSortedMap out = null; - Comparable in = (Comparable)source(); - out = ImmutableSortedMap.of(null, null, null, null, null, null, null, null, in, null); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[8];MapKey of ReturnValue;value" ImmutableMap out = null; Object in = (Object)source(); out = ImmutableMap.of(null, null, null, null, null, null, null, null, in, null); - sink(getMapKey(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMap;true;of;;;Argument[9];MapValue of ReturnValue;value" - ImmutableSortedMap out = null; - Object in = (Object)source(); - out = ImmutableSortedMap.of(null, null, null, null, null, null, null, null, null, in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[9];MapValue of ReturnValue;value" ImmutableMap out = null; Object in = (Object)source(); out = ImmutableMap.of(null, null, null, null, null, null, null, null, null, in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;build;();;MapKey of Argument[-1];MapKey of ReturnValue;value" ImmutableSetMultimap out = null; ImmutableSetMultimap.Builder in = (ImmutableSetMultimap.Builder)newWithMapKey(source()); out = in.build(); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;build;();;MapKey of Argument[-1];MapKey of ReturnValue;value" ImmutableMultimap out = null; ImmutableMultimap.Builder in = (ImmutableMultimap.Builder)newWithMapKey(source()); out = in.build(); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;build;();;MapKey of Argument[-1];MapKey of ReturnValue;value" ImmutableListMultimap out = null; ImmutableListMultimap.Builder in = (ImmutableListMultimap.Builder)newWithMapKey(source()); out = in.build(); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;build;();;MapValue of Argument[-1];MapValue of ReturnValue;value" ImmutableSetMultimap out = null; ImmutableSetMultimap.Builder in = (ImmutableSetMultimap.Builder)newWithMapValue(source()); out = in.build(); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;build;();;MapValue of Argument[-1];MapValue of ReturnValue;value" ImmutableMultimap out = null; ImmutableMultimap.Builder in = (ImmutableMultimap.Builder)newWithMapValue(source()); out = in.build(); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;build;();;MapValue of Argument[-1];MapValue of ReturnValue;value" ImmutableListMultimap out = null; ImmutableListMultimap.Builder in = (ImmutableListMultimap.Builder)newWithMapValue(source()); out = in.build(); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;orderKeysBy;(Comparator);;Argument[-1];ReturnValue;value" ImmutableSetMultimap.Builder out = null; ImmutableSetMultimap.Builder in = (ImmutableSetMultimap.Builder)source(); out = in.orderKeysBy(null); - sink(out); // $hasValueFlow + sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;orderKeysBy;(Comparator);;Argument[-1];ReturnValue;value" ImmutableMultimap.Builder out = null; ImmutableMultimap.Builder in = (ImmutableMultimap.Builder)source(); out = in.orderKeysBy(null); - sink(out); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultimap$Builder;true;orderKeysBy;(Comparator);;Argument[-1];ReturnValue;value" - ImmutableMultimap.Builder out = null; - ImmutableMultimap.Builder in = (ImmutableMultimap.Builder)source(); - out = in.orderKeysBy((Comparator)null); - sink(out); // $hasValueFlow + sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;orderKeysBy;(Comparator);;Argument[-1];ReturnValue;value" ImmutableListMultimap.Builder out = null; ImmutableListMultimap.Builder in = (ImmutableListMultimap.Builder)source(); out = in.orderKeysBy(null); - sink(out); // $hasValueFlow + sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;orderValuesBy;(Comparator);;Argument[-1];ReturnValue;value" ImmutableSetMultimap.Builder out = null; ImmutableSetMultimap.Builder in = (ImmutableSetMultimap.Builder)source(); out = in.orderValuesBy(null); - sink(out); // $hasValueFlow + sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;orderValuesBy;(Comparator);;Argument[-1];ReturnValue;value" ImmutableMultimap.Builder out = null; ImmutableMultimap.Builder in = (ImmutableMultimap.Builder)source(); out = in.orderValuesBy(null); - sink(out); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultimap$Builder;true;orderValuesBy;(Comparator);;Argument[-1];ReturnValue;value" - ImmutableMultimap.Builder out = null; - ImmutableMultimap.Builder in = (ImmutableMultimap.Builder)source(); - out = in.orderValuesBy((Comparator)null); - sink(out); // $hasValueFlow + sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;orderValuesBy;(Comparator);;Argument[-1];ReturnValue;value" ImmutableListMultimap.Builder out = null; ImmutableListMultimap.Builder in = (ImmutableListMultimap.Builder)source(); out = in.orderValuesBy(null); - sink(out); // $hasValueFlow + sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;put;(Entry);;MapKey of Argument[0];MapKey of Argument[-1];value" ImmutableSetMultimap.Builder out = null; Map.Entry in = (Map.Entry)newWithMapKey(source()); out.put(in); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;put;(Entry);;MapKey of Argument[0];MapKey of Argument[-1];value" ImmutableMultimap.Builder out = null; Map.Entry in = (Map.Entry)newWithMapKey(source()); out.put(in); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;put;(Entry);;MapKey of Argument[0];MapKey of Argument[-1];value" ImmutableListMultimap.Builder out = null; Map.Entry in = (Map.Entry)newWithMapKey(source()); out.put(in); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;put;(Entry);;MapValue of Argument[0];MapValue of Argument[-1];value" ImmutableSetMultimap.Builder out = null; Map.Entry in = (Map.Entry)newWithMapValue(source()); out.put(in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;put;(Entry);;MapValue of Argument[0];MapValue of Argument[-1];value" ImmutableMultimap.Builder out = null; Map.Entry in = (Map.Entry)newWithMapValue(source()); out.put(in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;put;(Entry);;MapValue of Argument[0];MapValue of Argument[-1];value" ImmutableListMultimap.Builder out = null; Map.Entry in = (Map.Entry)newWithMapValue(source()); out.put(in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;put;(Object,Object);;Argument[0];MapKey of Argument[-1];value" ImmutableSetMultimap.Builder out = null; Object in = (Object)source(); out.put(in, null); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;put;(Object,Object);;Argument[0];MapKey of Argument[-1];value" ImmutableMultimap.Builder out = null; Object in = (Object)source(); out.put(in, null); - sink(getMapKey(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultimap$Builder;true;put;(Object,Object);;Argument[0];MapKey of Argument[-1];value" - ImmutableMultimap.Builder out = null; - Object in = (Object)source(); - out.put(in, (Object)null); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;put;(Object,Object);;Argument[0];MapKey of Argument[-1];value" ImmutableListMultimap.Builder out = null; Object in = (Object)source(); out.put(in, null); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;put;(Object,Object);;Argument[1];MapValue of Argument[-1];value" ImmutableSetMultimap.Builder out = null; Object in = (Object)source(); out.put(null, in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;put;(Object,Object);;Argument[1];MapValue of Argument[-1];value" ImmutableMultimap.Builder out = null; Object in = (Object)source(); out.put(null, in); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultimap$Builder;true;put;(Object,Object);;Argument[1];MapValue of Argument[-1];value" - ImmutableMultimap.Builder out = null; - Object in = (Object)source(); - out.put((Object)null, in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;put;(Object,Object);;Argument[1];MapValue of Argument[-1];value" ImmutableListMultimap.Builder out = null; Object in = (Object)source(); out.put(null, in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;put;;;Argument[-1];ReturnValue;value" ImmutableSetMultimap.Builder out = null; ImmutableSetMultimap.Builder in = (ImmutableSetMultimap.Builder)source(); out = in.put(null, null); - sink(out); // $hasValueFlow + sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;put;;;Argument[-1];ReturnValue;value" ImmutableSetMultimap.Builder out = null; ImmutableSetMultimap.Builder in = (ImmutableSetMultimap.Builder)source(); out = in.put(null); - sink(out); // $hasValueFlow + sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;put;;;Argument[-1];ReturnValue;value" ImmutableMultimap.Builder out = null; ImmutableMultimap.Builder in = (ImmutableMultimap.Builder)source(); out = in.put(null, null); - sink(out); // $hasValueFlow + sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;put;;;Argument[-1];ReturnValue;value" ImmutableMultimap.Builder out = null; ImmutableMultimap.Builder in = (ImmutableMultimap.Builder)source(); out = in.put(null); - sink(out); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultimap$Builder;true;put;;;Argument[-1];ReturnValue;value" - ImmutableMultimap.Builder out = null; - ImmutableMultimap.Builder in = (ImmutableMultimap.Builder)source(); - out = in.put((Object)null, (Object)null); - sink(out); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultimap$Builder;true;put;;;Argument[-1];ReturnValue;value" - ImmutableMultimap.Builder out = null; - ImmutableMultimap.Builder in = (ImmutableMultimap.Builder)source(); - out = in.put((Map.Entry)null); - sink(out); // $hasValueFlow + sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;put;;;Argument[-1];ReturnValue;value" ImmutableListMultimap.Builder out = null; ImmutableListMultimap.Builder in = (ImmutableListMultimap.Builder)source(); out = in.put(null, null); - sink(out); // $hasValueFlow + sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;put;;;Argument[-1];ReturnValue;value" ImmutableListMultimap.Builder out = null; ImmutableListMultimap.Builder in = (ImmutableListMultimap.Builder)source(); out = in.put(null); - sink(out); // $hasValueFlow + sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Iterable);;MapKey of Element of Argument[0];MapKey of Argument[-1];value" ImmutableSetMultimap.Builder out = null; Iterable in = (Iterable)newWithElement(newWithMapKey(source())); out.putAll(in); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Iterable);;MapKey of Element of Argument[0];MapKey of Argument[-1];value" ImmutableMultimap.Builder out = null; Iterable in = (Iterable)newWithElement(newWithMapKey(source())); out.putAll(in); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Iterable);;MapKey of Element of Argument[0];MapKey of Argument[-1];value" ImmutableListMultimap.Builder out = null; Iterable in = (Iterable)newWithElement(newWithMapKey(source())); out.putAll(in); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Iterable);;MapValue of Element of Argument[0];MapValue of Argument[-1];value" ImmutableSetMultimap.Builder out = null; Iterable in = (Iterable)newWithElement(newWithMapValue(source())); out.putAll(in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Iterable);;MapValue of Element of Argument[0];MapValue of Argument[-1];value" ImmutableMultimap.Builder out = null; Iterable in = (Iterable)newWithElement(newWithMapValue(source())); out.putAll(in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Iterable);;MapValue of Element of Argument[0];MapValue of Argument[-1];value" ImmutableListMultimap.Builder out = null; Iterable in = (Iterable)newWithElement(newWithMapValue(source())); out.putAll(in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Multimap);;MapKey of Argument[0];MapKey of Argument[-1];value" ImmutableSetMultimap.Builder out = null; Multimap in = (Multimap)newWithMapKey(source()); out.putAll(in); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Multimap);;MapKey of Argument[0];MapKey of Argument[-1];value" ImmutableMultimap.Builder out = null; Multimap in = (Multimap)newWithMapKey(source()); out.putAll(in); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Multimap);;MapKey of Argument[0];MapKey of Argument[-1];value" ImmutableListMultimap.Builder out = null; Multimap in = (Multimap)newWithMapKey(source()); out.putAll(in); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Multimap);;MapValue of Argument[0];MapValue of Argument[-1];value" ImmutableSetMultimap.Builder out = null; Multimap in = (Multimap)newWithMapValue(source()); out.putAll(in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Multimap);;MapValue of Argument[0];MapValue of Argument[-1];value" ImmutableMultimap.Builder out = null; Multimap in = (Multimap)newWithMapValue(source()); out.putAll(in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Multimap);;MapValue of Argument[0];MapValue of Argument[-1];value" ImmutableListMultimap.Builder out = null; Multimap in = (Multimap)newWithMapValue(source()); out.putAll(in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" ImmutableSetMultimap.Builder out = null; Object in = (Object)source(); out.putAll(in, (Iterable)null); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" ImmutableMultimap.Builder out = null; Object in = (Object)source(); out.putAll(in, (Iterable)null); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" ImmutableListMultimap.Builder out = null; Object in = (Object)source(); out.putAll(in, (Iterable)null); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" ImmutableSetMultimap.Builder out = null; Iterable in = (Iterable)newWithElement(source()); out.putAll((Object)null, in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" ImmutableMultimap.Builder out = null; Iterable in = (Iterable)newWithElement(source()); out.putAll((Object)null, in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" ImmutableListMultimap.Builder out = null; Iterable in = (Iterable)newWithElement(source()); out.putAll((Object)null, in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Object,Object[]);;ArrayElement of Argument[1];MapValue of Argument[-1];value" + ImmutableSetMultimap.Builder out = null; + Object[] in = (Object[])newWithArrayElement(source()); + out.putAll((Object)null, in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Object,Object[]);;ArrayElement of Argument[1];MapValue of Argument[-1];value" + ImmutableMultimap.Builder out = null; + Object[] in = (Object[])newWithArrayElement(source()); + out.putAll((Object)null, in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Object,Object[]);;ArrayElement of Argument[1];MapValue of Argument[-1];value" + ImmutableListMultimap.Builder out = null; + Object[] in = (Object[])newWithArrayElement(source()); + out.putAll((Object)null, in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;;;Argument[-1];ReturnValue;value" + ImmutableSetMultimap.Builder out = null; + ImmutableSetMultimap.Builder in = (ImmutableSetMultimap.Builder)source(); + out = in.putAll((Object)null, (Object[])null); + sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;;;Argument[-1];ReturnValue;value" ImmutableSetMultimap.Builder out = null; ImmutableSetMultimap.Builder in = (ImmutableSetMultimap.Builder)source(); out = in.putAll((Object)null, (Iterable)null); - sink(out); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;;;Argument[-1];ReturnValue;value" - ImmutableSetMultimap.Builder out = null; - ImmutableSetMultimap.Builder in = (ImmutableSetMultimap.Builder)source(); - out = in.putAll((Object)null); - sink(out); // $hasValueFlow + sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;;;Argument[-1];ReturnValue;value" ImmutableSetMultimap.Builder out = null; ImmutableSetMultimap.Builder in = (ImmutableSetMultimap.Builder)source(); out = in.putAll((Multimap)null); - sink(out); // $hasValueFlow + sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;;;Argument[-1];ReturnValue;value" ImmutableSetMultimap.Builder out = null; ImmutableSetMultimap.Builder in = (ImmutableSetMultimap.Builder)source(); out = in.putAll((Iterable)null); - sink(out); // $hasValueFlow + sink(out); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;;;Argument[-1];ReturnValue;value" + ImmutableMultimap.Builder out = null; + ImmutableMultimap.Builder in = (ImmutableMultimap.Builder)source(); + out = in.putAll((Object)null, (Object[])null); + sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;;;Argument[-1];ReturnValue;value" ImmutableMultimap.Builder out = null; ImmutableMultimap.Builder in = (ImmutableMultimap.Builder)source(); out = in.putAll((Object)null, (Iterable)null); - sink(out); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;;;Argument[-1];ReturnValue;value" - ImmutableMultimap.Builder out = null; - ImmutableMultimap.Builder in = (ImmutableMultimap.Builder)source(); - out = in.putAll((Object)null); - sink(out); // $hasValueFlow + sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;;;Argument[-1];ReturnValue;value" ImmutableMultimap.Builder out = null; ImmutableMultimap.Builder in = (ImmutableMultimap.Builder)source(); out = in.putAll((Multimap)null); - sink(out); // $hasValueFlow + sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;;;Argument[-1];ReturnValue;value" ImmutableMultimap.Builder out = null; ImmutableMultimap.Builder in = (ImmutableMultimap.Builder)source(); out = in.putAll((Iterable)null); - sink(out); // $hasValueFlow + sink(out); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;;;Argument[-1];ReturnValue;value" + ImmutableListMultimap.Builder out = null; + ImmutableListMultimap.Builder in = (ImmutableListMultimap.Builder)source(); + out = in.putAll((Object)null, (Object[])null); + sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;;;Argument[-1];ReturnValue;value" ImmutableListMultimap.Builder out = null; ImmutableListMultimap.Builder in = (ImmutableListMultimap.Builder)source(); out = in.putAll((Object)null, (Iterable)null); - sink(out); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;;;Argument[-1];ReturnValue;value" - ImmutableListMultimap.Builder out = null; - ImmutableListMultimap.Builder in = (ImmutableListMultimap.Builder)source(); - out = in.putAll((Object)null); - sink(out); // $hasValueFlow + sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;;;Argument[-1];ReturnValue;value" ImmutableListMultimap.Builder out = null; ImmutableListMultimap.Builder in = (ImmutableListMultimap.Builder)source(); out = in.putAll((Multimap)null); - sink(out); // $hasValueFlow + sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;;;Argument[-1];ReturnValue;value" ImmutableListMultimap.Builder out = null; ImmutableListMultimap.Builder in = (ImmutableListMultimap.Builder)source(); out = in.putAll((Iterable)null); - sink(out); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultimap;true;copyOf;(Iterable);;MapKey of Element of Argument[0];MapKey of ReturnValue;value" - ImmutableSetMultimap out = null; - Iterable in = (Iterable)newWithElement(newWithMapKey(source())); - out = ImmutableSetMultimap.copyOf(in); - sink(getMapKey(out)); // $hasValueFlow + sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;copyOf;(Iterable);;MapKey of Element of Argument[0];MapKey of ReturnValue;value" ImmutableMultimap out = null; Iterable in = (Iterable)newWithElement(newWithMapKey(source())); out = ImmutableMultimap.copyOf(in); - sink(getMapKey(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultimap;true;copyOf;(Iterable);;MapKey of Element of Argument[0];MapKey of ReturnValue;value" - ImmutableListMultimap out = null; - Iterable in = (Iterable)newWithElement(newWithMapKey(source())); - out = ImmutableListMultimap.copyOf(in); - sink(getMapKey(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultimap;true;copyOf;(Iterable);;MapValue of Element of Argument[0];MapValue of ReturnValue;value" - ImmutableSetMultimap out = null; - Iterable in = (Iterable)newWithElement(newWithMapValue(source())); - out = ImmutableSetMultimap.copyOf(in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;copyOf;(Iterable);;MapValue of Element of Argument[0];MapValue of ReturnValue;value" ImmutableMultimap out = null; Iterable in = (Iterable)newWithElement(newWithMapValue(source())); out = ImmutableMultimap.copyOf(in); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultimap;true;copyOf;(Iterable);;MapValue of Element of Argument[0];MapValue of ReturnValue;value" - ImmutableListMultimap out = null; - Iterable in = (Iterable)newWithElement(newWithMapValue(source())); - out = ImmutableListMultimap.copyOf(in); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultimap;true;copyOf;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value" - ImmutableSetMultimap out = null; - Multimap in = (Multimap)newWithMapKey(source()); - out = ImmutableSetMultimap.copyOf(in); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;copyOf;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value" ImmutableMultimap out = null; Multimap in = (Multimap)newWithMapKey(source()); out = ImmutableMultimap.copyOf(in); - sink(getMapKey(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultimap;true;copyOf;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value" - ImmutableListMultimap out = null; - Multimap in = (Multimap)newWithMapKey(source()); - out = ImmutableListMultimap.copyOf(in); - sink(getMapKey(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultimap;true;copyOf;(Multimap);;MapValue of Argument[0];MapValue of ReturnValue;value" - ImmutableSetMultimap out = null; - Multimap in = (Multimap)newWithMapValue(source()); - out = ImmutableSetMultimap.copyOf(in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;copyOf;(Multimap);;MapValue of Argument[0];MapValue of ReturnValue;value" ImmutableMultimap out = null; Multimap in = (Multimap)newWithMapValue(source()); out = ImmutableMultimap.copyOf(in); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultimap;true;copyOf;(Multimap);;MapValue of Argument[0];MapValue of ReturnValue;value" - ImmutableListMultimap out = null; - Multimap in = (Multimap)newWithMapValue(source()); - out = ImmutableListMultimap.copyOf(in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;inverse;();;MapKey of Argument[-1];MapValue of ReturnValue;value" ImmutableSetMultimap out = null; ImmutableSetMultimap in = (ImmutableSetMultimap)newWithMapKey(source()); out = in.inverse(); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;inverse;();;MapKey of Argument[-1];MapValue of ReturnValue;value" ImmutableMultimap out = null; ImmutableMultimap in = (ImmutableMultimap)newWithMapKey(source()); out = in.inverse(); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;inverse;();;MapKey of Argument[-1];MapValue of ReturnValue;value" ImmutableListMultimap out = null; ImmutableListMultimap in = (ImmutableListMultimap)newWithMapKey(source()); out = in.inverse(); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;inverse;();;MapValue of Argument[-1];MapKey of ReturnValue;value" ImmutableSetMultimap out = null; ImmutableSetMultimap in = (ImmutableSetMultimap)newWithMapValue(source()); out = in.inverse(); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;inverse;();;MapValue of Argument[-1];MapKey of ReturnValue;value" ImmutableMultimap out = null; ImmutableMultimap in = (ImmutableMultimap)newWithMapValue(source()); out = in.inverse(); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;inverse;();;MapValue of Argument[-1];MapKey of ReturnValue;value" ImmutableListMultimap out = null; ImmutableListMultimap in = (ImmutableListMultimap)newWithMapValue(source()); out = in.inverse(); - sink(getMapKey(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[0];MapKey of ReturnValue;value" - ImmutableSetMultimap out = null; - Object in = (Object)source(); - out = ImmutableSetMultimap.of(in, null, null, null, null, null, null, null, null, null); - sink(getMapKey(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[0];MapKey of ReturnValue;value" - ImmutableSetMultimap out = null; - Object in = (Object)source(); - out = ImmutableSetMultimap.of(in, null, null, null, null, null, null, null); - sink(getMapKey(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[0];MapKey of ReturnValue;value" - ImmutableSetMultimap out = null; - Object in = (Object)source(); - out = ImmutableSetMultimap.of(in, null, null, null, null, null); - sink(getMapKey(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[0];MapKey of ReturnValue;value" - ImmutableSetMultimap out = null; - Object in = (Object)source(); - out = ImmutableSetMultimap.of(in, null, null, null); - sink(getMapKey(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[0];MapKey of ReturnValue;value" - ImmutableSetMultimap out = null; - Object in = (Object)source(); - out = ImmutableSetMultimap.of(in, null); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[0];MapKey of ReturnValue;value" ImmutableMultimap out = null; Object in = (Object)source(); out = ImmutableMultimap.of(in, null, null, null, null, null, null, null, null, null); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[0];MapKey of ReturnValue;value" ImmutableMultimap out = null; Object in = (Object)source(); out = ImmutableMultimap.of(in, null, null, null, null, null, null, null); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[0];MapKey of ReturnValue;value" ImmutableMultimap out = null; Object in = (Object)source(); out = ImmutableMultimap.of(in, null, null, null, null, null); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[0];MapKey of ReturnValue;value" ImmutableMultimap out = null; Object in = (Object)source(); out = ImmutableMultimap.of(in, null, null, null); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[0];MapKey of ReturnValue;value" ImmutableMultimap out = null; Object in = (Object)source(); out = ImmutableMultimap.of(in, null); - sink(getMapKey(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[0];MapKey of ReturnValue;value" - ImmutableListMultimap out = null; - Object in = (Object)source(); - out = ImmutableListMultimap.of(in, null, null, null, null, null, null, null, null, null); - sink(getMapKey(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[0];MapKey of ReturnValue;value" - ImmutableListMultimap out = null; - Object in = (Object)source(); - out = ImmutableListMultimap.of(in, null, null, null, null, null, null, null); - sink(getMapKey(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[0];MapKey of ReturnValue;value" - ImmutableListMultimap out = null; - Object in = (Object)source(); - out = ImmutableListMultimap.of(in, null, null, null, null, null); - sink(getMapKey(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[0];MapKey of ReturnValue;value" - ImmutableListMultimap out = null; - Object in = (Object)source(); - out = ImmutableListMultimap.of(in, null, null, null); - sink(getMapKey(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[0];MapKey of ReturnValue;value" - ImmutableListMultimap out = null; - Object in = (Object)source(); - out = ImmutableListMultimap.of(in, null); - sink(getMapKey(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[1];MapValue of ReturnValue;value" - ImmutableSetMultimap out = null; - Object in = (Object)source(); - out = ImmutableSetMultimap.of(null, in, null, null, null, null, null, null, null, null); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[1];MapValue of ReturnValue;value" - ImmutableSetMultimap out = null; - Object in = (Object)source(); - out = ImmutableSetMultimap.of(null, in, null, null, null, null, null, null); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[1];MapValue of ReturnValue;value" - ImmutableSetMultimap out = null; - Object in = (Object)source(); - out = ImmutableSetMultimap.of(null, in, null, null, null, null); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[1];MapValue of ReturnValue;value" - ImmutableSetMultimap out = null; - Object in = (Object)source(); - out = ImmutableSetMultimap.of(null, in, null, null); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[1];MapValue of ReturnValue;value" - ImmutableSetMultimap out = null; - Object in = (Object)source(); - out = ImmutableSetMultimap.of(null, in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[1];MapValue of ReturnValue;value" ImmutableMultimap out = null; Object in = (Object)source(); out = ImmutableMultimap.of(null, in, null, null, null, null, null, null, null, null); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[1];MapValue of ReturnValue;value" ImmutableMultimap out = null; Object in = (Object)source(); out = ImmutableMultimap.of(null, in, null, null, null, null, null, null); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[1];MapValue of ReturnValue;value" ImmutableMultimap out = null; Object in = (Object)source(); out = ImmutableMultimap.of(null, in, null, null, null, null); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[1];MapValue of ReturnValue;value" ImmutableMultimap out = null; Object in = (Object)source(); out = ImmutableMultimap.of(null, in, null, null); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[1];MapValue of ReturnValue;value" ImmutableMultimap out = null; Object in = (Object)source(); out = ImmutableMultimap.of(null, in); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[1];MapValue of ReturnValue;value" - ImmutableListMultimap out = null; - Object in = (Object)source(); - out = ImmutableListMultimap.of(null, in, null, null, null, null, null, null, null, null); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[1];MapValue of ReturnValue;value" - ImmutableListMultimap out = null; - Object in = (Object)source(); - out = ImmutableListMultimap.of(null, in, null, null, null, null, null, null); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[1];MapValue of ReturnValue;value" - ImmutableListMultimap out = null; - Object in = (Object)source(); - out = ImmutableListMultimap.of(null, in, null, null, null, null); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[1];MapValue of ReturnValue;value" - ImmutableListMultimap out = null; - Object in = (Object)source(); - out = ImmutableListMultimap.of(null, in, null, null); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[1];MapValue of ReturnValue;value" - ImmutableListMultimap out = null; - Object in = (Object)source(); - out = ImmutableListMultimap.of(null, in); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[2];MapKey of ReturnValue;value" - ImmutableSetMultimap out = null; - Object in = (Object)source(); - out = ImmutableSetMultimap.of(null, null, in, null, null, null, null, null, null, null); - sink(getMapKey(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[2];MapKey of ReturnValue;value" - ImmutableSetMultimap out = null; - Object in = (Object)source(); - out = ImmutableSetMultimap.of(null, null, in, null, null, null, null, null); - sink(getMapKey(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[2];MapKey of ReturnValue;value" - ImmutableSetMultimap out = null; - Object in = (Object)source(); - out = ImmutableSetMultimap.of(null, null, in, null, null, null); - sink(getMapKey(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[2];MapKey of ReturnValue;value" - ImmutableSetMultimap out = null; - Object in = (Object)source(); - out = ImmutableSetMultimap.of(null, null, in, null); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[2];MapKey of ReturnValue;value" ImmutableMultimap out = null; Object in = (Object)source(); out = ImmutableMultimap.of(null, null, in, null, null, null, null, null, null, null); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[2];MapKey of ReturnValue;value" ImmutableMultimap out = null; Object in = (Object)source(); out = ImmutableMultimap.of(null, null, in, null, null, null, null, null); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[2];MapKey of ReturnValue;value" ImmutableMultimap out = null; Object in = (Object)source(); out = ImmutableMultimap.of(null, null, in, null, null, null); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[2];MapKey of ReturnValue;value" ImmutableMultimap out = null; Object in = (Object)source(); out = ImmutableMultimap.of(null, null, in, null); - sink(getMapKey(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[2];MapKey of ReturnValue;value" - ImmutableListMultimap out = null; - Object in = (Object)source(); - out = ImmutableListMultimap.of(null, null, in, null, null, null, null, null, null, null); - sink(getMapKey(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[2];MapKey of ReturnValue;value" - ImmutableListMultimap out = null; - Object in = (Object)source(); - out = ImmutableListMultimap.of(null, null, in, null, null, null, null, null); - sink(getMapKey(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[2];MapKey of ReturnValue;value" - ImmutableListMultimap out = null; - Object in = (Object)source(); - out = ImmutableListMultimap.of(null, null, in, null, null, null); - sink(getMapKey(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[2];MapKey of ReturnValue;value" - ImmutableListMultimap out = null; - Object in = (Object)source(); - out = ImmutableListMultimap.of(null, null, in, null); - sink(getMapKey(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[3];MapValue of ReturnValue;value" - ImmutableSetMultimap out = null; - Object in = (Object)source(); - out = ImmutableSetMultimap.of(null, null, null, in, null, null, null, null, null, null); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[3];MapValue of ReturnValue;value" - ImmutableSetMultimap out = null; - Object in = (Object)source(); - out = ImmutableSetMultimap.of(null, null, null, in, null, null, null, null); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[3];MapValue of ReturnValue;value" - ImmutableSetMultimap out = null; - Object in = (Object)source(); - out = ImmutableSetMultimap.of(null, null, null, in, null, null); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[3];MapValue of ReturnValue;value" - ImmutableSetMultimap out = null; - Object in = (Object)source(); - out = ImmutableSetMultimap.of(null, null, null, in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[3];MapValue of ReturnValue;value" ImmutableMultimap out = null; Object in = (Object)source(); out = ImmutableMultimap.of(null, null, null, in, null, null, null, null, null, null); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[3];MapValue of ReturnValue;value" ImmutableMultimap out = null; Object in = (Object)source(); out = ImmutableMultimap.of(null, null, null, in, null, null, null, null); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[3];MapValue of ReturnValue;value" ImmutableMultimap out = null; Object in = (Object)source(); out = ImmutableMultimap.of(null, null, null, in, null, null); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[3];MapValue of ReturnValue;value" ImmutableMultimap out = null; Object in = (Object)source(); out = ImmutableMultimap.of(null, null, null, in); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[3];MapValue of ReturnValue;value" - ImmutableListMultimap out = null; - Object in = (Object)source(); - out = ImmutableListMultimap.of(null, null, null, in, null, null, null, null, null, null); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[3];MapValue of ReturnValue;value" - ImmutableListMultimap out = null; - Object in = (Object)source(); - out = ImmutableListMultimap.of(null, null, null, in, null, null, null, null); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[3];MapValue of ReturnValue;value" - ImmutableListMultimap out = null; - Object in = (Object)source(); - out = ImmutableListMultimap.of(null, null, null, in, null, null); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[3];MapValue of ReturnValue;value" - ImmutableListMultimap out = null; - Object in = (Object)source(); - out = ImmutableListMultimap.of(null, null, null, in); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[4];MapKey of ReturnValue;value" - ImmutableSetMultimap out = null; - Object in = (Object)source(); - out = ImmutableSetMultimap.of(null, null, null, null, in, null, null, null, null, null); - sink(getMapKey(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[4];MapKey of ReturnValue;value" - ImmutableSetMultimap out = null; - Object in = (Object)source(); - out = ImmutableSetMultimap.of(null, null, null, null, in, null, null, null); - sink(getMapKey(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[4];MapKey of ReturnValue;value" - ImmutableSetMultimap out = null; - Object in = (Object)source(); - out = ImmutableSetMultimap.of(null, null, null, null, in, null); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[4];MapKey of ReturnValue;value" ImmutableMultimap out = null; Object in = (Object)source(); out = ImmutableMultimap.of(null, null, null, null, in, null, null, null, null, null); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[4];MapKey of ReturnValue;value" ImmutableMultimap out = null; Object in = (Object)source(); out = ImmutableMultimap.of(null, null, null, null, in, null, null, null); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[4];MapKey of ReturnValue;value" ImmutableMultimap out = null; Object in = (Object)source(); out = ImmutableMultimap.of(null, null, null, null, in, null); - sink(getMapKey(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[4];MapKey of ReturnValue;value" - ImmutableListMultimap out = null; - Object in = (Object)source(); - out = ImmutableListMultimap.of(null, null, null, null, in, null, null, null, null, null); - sink(getMapKey(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[4];MapKey of ReturnValue;value" - ImmutableListMultimap out = null; - Object in = (Object)source(); - out = ImmutableListMultimap.of(null, null, null, null, in, null, null, null); - sink(getMapKey(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[4];MapKey of ReturnValue;value" - ImmutableListMultimap out = null; - Object in = (Object)source(); - out = ImmutableListMultimap.of(null, null, null, null, in, null); - sink(getMapKey(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[5];MapValue of ReturnValue;value" - ImmutableSetMultimap out = null; - Object in = (Object)source(); - out = ImmutableSetMultimap.of(null, null, null, null, null, in, null, null, null, null); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[5];MapValue of ReturnValue;value" - ImmutableSetMultimap out = null; - Object in = (Object)source(); - out = ImmutableSetMultimap.of(null, null, null, null, null, in, null, null); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[5];MapValue of ReturnValue;value" - ImmutableSetMultimap out = null; - Object in = (Object)source(); - out = ImmutableSetMultimap.of(null, null, null, null, null, in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[5];MapValue of ReturnValue;value" ImmutableMultimap out = null; Object in = (Object)source(); out = ImmutableMultimap.of(null, null, null, null, null, in, null, null, null, null); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[5];MapValue of ReturnValue;value" ImmutableMultimap out = null; Object in = (Object)source(); out = ImmutableMultimap.of(null, null, null, null, null, in, null, null); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[5];MapValue of ReturnValue;value" ImmutableMultimap out = null; Object in = (Object)source(); out = ImmutableMultimap.of(null, null, null, null, null, in); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[5];MapValue of ReturnValue;value" - ImmutableListMultimap out = null; - Object in = (Object)source(); - out = ImmutableListMultimap.of(null, null, null, null, null, in, null, null, null, null); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[5];MapValue of ReturnValue;value" - ImmutableListMultimap out = null; - Object in = (Object)source(); - out = ImmutableListMultimap.of(null, null, null, null, null, in, null, null); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[5];MapValue of ReturnValue;value" - ImmutableListMultimap out = null; - Object in = (Object)source(); - out = ImmutableListMultimap.of(null, null, null, null, null, in); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[6];MapKey of ReturnValue;value" - ImmutableSetMultimap out = null; - Object in = (Object)source(); - out = ImmutableSetMultimap.of(null, null, null, null, null, null, in, null, null, null); - sink(getMapKey(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[6];MapKey of ReturnValue;value" - ImmutableSetMultimap out = null; - Object in = (Object)source(); - out = ImmutableSetMultimap.of(null, null, null, null, null, null, in, null); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[6];MapKey of ReturnValue;value" ImmutableMultimap out = null; Object in = (Object)source(); out = ImmutableMultimap.of(null, null, null, null, null, null, in, null, null, null); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[6];MapKey of ReturnValue;value" ImmutableMultimap out = null; Object in = (Object)source(); out = ImmutableMultimap.of(null, null, null, null, null, null, in, null); - sink(getMapKey(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[6];MapKey of ReturnValue;value" - ImmutableListMultimap out = null; - Object in = (Object)source(); - out = ImmutableListMultimap.of(null, null, null, null, null, null, in, null, null, null); - sink(getMapKey(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[6];MapKey of ReturnValue;value" - ImmutableListMultimap out = null; - Object in = (Object)source(); - out = ImmutableListMultimap.of(null, null, null, null, null, null, in, null); - sink(getMapKey(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[7];MapValue of ReturnValue;value" - ImmutableSetMultimap out = null; - Object in = (Object)source(); - out = ImmutableSetMultimap.of(null, null, null, null, null, null, null, in, null, null); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[7];MapValue of ReturnValue;value" - ImmutableSetMultimap out = null; - Object in = (Object)source(); - out = ImmutableSetMultimap.of(null, null, null, null, null, null, null, in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[7];MapValue of ReturnValue;value" ImmutableMultimap out = null; Object in = (Object)source(); out = ImmutableMultimap.of(null, null, null, null, null, null, null, in, null, null); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[7];MapValue of ReturnValue;value" ImmutableMultimap out = null; Object in = (Object)source(); out = ImmutableMultimap.of(null, null, null, null, null, null, null, in); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[7];MapValue of ReturnValue;value" - ImmutableListMultimap out = null; - Object in = (Object)source(); - out = ImmutableListMultimap.of(null, null, null, null, null, null, null, in, null, null); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[7];MapValue of ReturnValue;value" - ImmutableListMultimap out = null; - Object in = (Object)source(); - out = ImmutableListMultimap.of(null, null, null, null, null, null, null, in); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[8];MapKey of ReturnValue;value" - ImmutableSetMultimap out = null; - Object in = (Object)source(); - out = ImmutableSetMultimap.of(null, null, null, null, null, null, null, null, in, null); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[8];MapKey of ReturnValue;value" ImmutableMultimap out = null; Object in = (Object)source(); out = ImmutableMultimap.of(null, null, null, null, null, null, null, null, in, null); - sink(getMapKey(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[8];MapKey of ReturnValue;value" - ImmutableListMultimap out = null; - Object in = (Object)source(); - out = ImmutableListMultimap.of(null, null, null, null, null, null, null, null, in, null); - sink(getMapKey(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[9];MapValue of ReturnValue;value" - ImmutableSetMultimap out = null; - Object in = (Object)source(); - out = ImmutableSetMultimap.of(null, null, null, null, null, null, null, null, null, in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[9];MapValue of ReturnValue;value" ImmutableMultimap out = null; Object in = (Object)source(); out = ImmutableMultimap.of(null, null, null, null, null, null, null, null, null, in); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[9];MapValue of ReturnValue;value" - ImmutableListMultimap out = null; - Object in = (Object)source(); - out = ImmutableListMultimap.of(null, null, null, null, null, null, null, null, null, in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset$Builder;true;addCopies;(Object,int);;Argument[-1];ReturnValue;value" ImmutableSortedMultiset.Builder out = null; ImmutableSortedMultiset.Builder in = (ImmutableSortedMultiset.Builder)source(); out = in.addCopies(null, 0); - sink(out); // $hasValueFlow + sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset$Builder;true;addCopies;(Object,int);;Argument[-1];ReturnValue;value" ImmutableMultiset.Builder out = null; ImmutableMultiset.Builder in = (ImmutableMultiset.Builder)source(); out = in.addCopies(null, 0); - sink(out); // $hasValueFlow + sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset$Builder;true;addCopies;(Object,int);;Argument[0];Element of Argument[-1];value" ImmutableSortedMultiset.Builder out = null; Object in = (Object)source(); out.addCopies(in, 0); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset$Builder;true;addCopies;(Object,int);;Argument[0];Element of Argument[-1];value" ImmutableMultiset.Builder out = null; Object in = (Object)source(); out.addCopies(in, 0); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultiset;true;copyOf;(Iterable);;Element of Argument[0];Element of ReturnValue;value" - ImmutableSortedMultiset out = null; - Iterable in = (Iterable)newWithElement(source()); - out = ImmutableSortedMultiset.copyOf(in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;copyOf;(Iterable);;Element of Argument[0];Element of ReturnValue;value" ImmutableMultiset out = null; Iterable in = (Iterable)newWithElement(source()); out = ImmutableMultiset.copyOf(in); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultiset;true;copyOf;(Iterator);;Element of Argument[0];Element of ReturnValue;value" - ImmutableSortedMultiset out = null; - Iterator in = (Iterator)newWithElement(source()); - out = ImmutableSortedMultiset.copyOf(in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;copyOf;(Iterator);;Element of Argument[0];Element of ReturnValue;value" ImmutableMultiset out = null; Iterator in = (Iterator)newWithElement(source()); out = ImmutableMultiset.copyOf(in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { - // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSortedMultiset out = null; - Comparable in = (Comparable)source(); - out = ImmutableSortedMultiset.of(null, null, null, null, null, in, null); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSortedMultiset out = null; - Comparable in = (Comparable)source(); - out = ImmutableSortedMultiset.of(null, null, null, null, in, null, null); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSortedMultiset out = null; - Comparable in = (Comparable)source(); - out = ImmutableSortedMultiset.of(null, null, null, null, in); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSortedMultiset out = null; - Comparable in = (Comparable)source(); - out = ImmutableSortedMultiset.of(null, null, null, in, null, null, null); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSortedMultiset out = null; - Comparable in = (Comparable)source(); - out = ImmutableSortedMultiset.of(null, null, null, in, null); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSortedMultiset out = null; - Comparable in = (Comparable)source(); - out = ImmutableSortedMultiset.of(null, null, null, in); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSortedMultiset out = null; - Comparable in = (Comparable)source(); - out = ImmutableSortedMultiset.of(null, null, in, null, null, null, null); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSortedMultiset out = null; - Comparable in = (Comparable)source(); - out = ImmutableSortedMultiset.of(null, null, in, null, null); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSortedMultiset out = null; - Comparable in = (Comparable)source(); - out = ImmutableSortedMultiset.of(null, null, in, null); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSortedMultiset out = null; - Comparable in = (Comparable)source(); - out = ImmutableSortedMultiset.of(null, null, in); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSortedMultiset out = null; - Comparable in = (Comparable)source(); - out = ImmutableSortedMultiset.of(null, in, null, null, null, null, null); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSortedMultiset out = null; - Comparable in = (Comparable)source(); - out = ImmutableSortedMultiset.of(null, in, null, null, null); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSortedMultiset out = null; - Comparable in = (Comparable)source(); - out = ImmutableSortedMultiset.of(null, in, null, null); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSortedMultiset out = null; - Comparable in = (Comparable)source(); - out = ImmutableSortedMultiset.of(null, in, null); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSortedMultiset out = null; - Comparable in = (Comparable)source(); - out = ImmutableSortedMultiset.of(null, in); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSortedMultiset out = null; - Comparable in = (Comparable)source(); - out = ImmutableSortedMultiset.of(in, null, null, null, null, null, null); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSortedMultiset out = null; - Comparable in = (Comparable)source(); - out = ImmutableSortedMultiset.of(in, null, null, null, null); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSortedMultiset out = null; - Comparable in = (Comparable)source(); - out = ImmutableSortedMultiset.of(in, null, null, null); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSortedMultiset out = null; - Comparable in = (Comparable)source(); - out = ImmutableSortedMultiset.of(in, null, null); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSortedMultiset out = null; - Comparable in = (Comparable)source(); - out = ImmutableSortedMultiset.of(in, null); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSortedMultiset out = null; - Comparable in = (Comparable)source(); - out = ImmutableSortedMultiset.of(in); - sink(getElement(out)); // $hasValueFlow + // "com.google.common.collect;ImmutableMultiset;true;copyOf;(Object[]);;ArrayElement of Argument[0];Element of ReturnValue;value" + ImmutableMultiset out = null; + Object[] in = (Object[])newWithArrayElement(source()); + out = ImmutableMultiset.copyOf(in); + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; Object in = (Object)source(); out = ImmutableMultiset.of(null, null, null, null, null, in, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; Object in = (Object)source(); out = ImmutableMultiset.of(null, null, null, null, in, null, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; Object in = (Object)source(); out = ImmutableMultiset.of(null, null, null, null, in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; Object in = (Object)source(); out = ImmutableMultiset.of(null, null, null, in, null, null, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; Object in = (Object)source(); out = ImmutableMultiset.of(null, null, null, in, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; Object in = (Object)source(); out = ImmutableMultiset.of(null, null, null, in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; Object in = (Object)source(); out = ImmutableMultiset.of(null, null, in, null, null, null, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; Object in = (Object)source(); out = ImmutableMultiset.of(null, null, in, null, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; Object in = (Object)source(); out = ImmutableMultiset.of(null, null, in, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; Object in = (Object)source(); out = ImmutableMultiset.of(null, null, in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; Object in = (Object)source(); out = ImmutableMultiset.of(null, in, null, null, null, null, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; Object in = (Object)source(); out = ImmutableMultiset.of(null, in, null, null, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; Object in = (Object)source(); out = ImmutableMultiset.of(null, in, null, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; Object in = (Object)source(); out = ImmutableMultiset.of(null, in, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; Object in = (Object)source(); out = ImmutableMultiset.of(null, in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; Object in = (Object)source(); out = ImmutableMultiset.of(in, null, null, null, null, null, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; Object in = (Object)source(); out = ImmutableMultiset.of(in, null, null, null, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; Object in = (Object)source(); out = ImmutableMultiset.of(in, null, null, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; Object in = (Object)source(); out = ImmutableMultiset.of(in, null, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; Object in = (Object)source(); out = ImmutableMultiset.of(in, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; Object in = (Object)source(); out = ImmutableMultiset.of(in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { - // "com.google.common.collect;ImmutableSet;true;copyOf;(Collection);;Element of Argument[0];Element of ReturnValue;value" - ImmutableSortedSet out = null; - Collection in = (Collection)newWithElement(source()); - out = ImmutableSortedSet.copyOf(in); - sink(getElement(out)); // $hasValueFlow + // "com.google.common.collect;ImmutableMultiset;true;of;;;Element of Argument[6];Element of ReturnValue;value" + ImmutableMultiset out = null; + Object[] in = (Object[])newWithElement(source()); + out = ImmutableMultiset.of(null, null, null, null, null, null, in); + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;copyOf;(Collection);;Element of Argument[0];Element of ReturnValue;value" ImmutableSet out = null; Collection in = (Collection)newWithElement(source()); out = ImmutableSet.copyOf(in); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableSet;true;copyOf;(Iterable);;Element of Argument[0];Element of ReturnValue;value" - ImmutableSortedSet out = null; - Iterable in = (Iterable)newWithElement(source()); - out = ImmutableSortedSet.copyOf(in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;copyOf;(Iterable);;Element of Argument[0];Element of ReturnValue;value" ImmutableSet out = null; Iterable in = (Iterable)newWithElement(source()); out = ImmutableSet.copyOf(in); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableSet;true;copyOf;(Iterator);;Element of Argument[0];Element of ReturnValue;value" - ImmutableSortedSet out = null; - Iterator in = (Iterator)newWithElement(source()); - out = ImmutableSortedSet.copyOf(in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;copyOf;(Iterator);;Element of Argument[0];Element of ReturnValue;value" ImmutableSet out = null; Iterator in = (Iterator)newWithElement(source()); out = ImmutableSet.copyOf(in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { - // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSortedSet out = null; - Comparable in = (Comparable)source(); - out = ImmutableSortedSet.of(null, null, null, null, null, in, null); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSortedSet out = null; - Comparable in = (Comparable)source(); - out = ImmutableSortedSet.of(null, null, null, null, in, null, null); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSortedSet out = null; - Comparable in = (Comparable)source(); - out = ImmutableSortedSet.of(null, null, null, null, in); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSortedSet out = null; - Comparable in = (Comparable)source(); - out = ImmutableSortedSet.of(null, null, null, in, null, null, null); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSortedSet out = null; - Comparable in = (Comparable)source(); - out = ImmutableSortedSet.of(null, null, null, in, null); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSortedSet out = null; - Comparable in = (Comparable)source(); - out = ImmutableSortedSet.of(null, null, null, in); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSortedSet out = null; - Comparable in = (Comparable)source(); - out = ImmutableSortedSet.of(null, null, in, null, null, null, null); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSortedSet out = null; - Comparable in = (Comparable)source(); - out = ImmutableSortedSet.of(null, null, in, null, null); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSortedSet out = null; - Comparable in = (Comparable)source(); - out = ImmutableSortedSet.of(null, null, in, null); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSortedSet out = null; - Comparable in = (Comparable)source(); - out = ImmutableSortedSet.of(null, null, in); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSortedSet out = null; - Comparable in = (Comparable)source(); - out = ImmutableSortedSet.of(null, in, null, null, null, null, null); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSortedSet out = null; - Comparable in = (Comparable)source(); - out = ImmutableSortedSet.of(null, in, null, null, null); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSortedSet out = null; - Comparable in = (Comparable)source(); - out = ImmutableSortedSet.of(null, in, null, null); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSortedSet out = null; - Comparable in = (Comparable)source(); - out = ImmutableSortedSet.of(null, in, null); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSortedSet out = null; - Comparable in = (Comparable)source(); - out = ImmutableSortedSet.of(null, in); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSortedSet out = null; - Comparable in = (Comparable)source(); - out = ImmutableSortedSet.of(in, null, null, null, null, null, null); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSortedSet out = null; - Comparable in = (Comparable)source(); - out = ImmutableSortedSet.of(in, null, null, null, null); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSortedSet out = null; - Comparable in = (Comparable)source(); - out = ImmutableSortedSet.of(in, null, null, null); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSortedSet out = null; - Comparable in = (Comparable)source(); - out = ImmutableSortedSet.of(in, null, null); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSortedSet out = null; - Comparable in = (Comparable)source(); - out = ImmutableSortedSet.of(in, null); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSortedSet out = null; - Comparable in = (Comparable)source(); - out = ImmutableSortedSet.of(in); - sink(getElement(out)); // $hasValueFlow + // "com.google.common.collect;ImmutableSet;true;copyOf;(Object[]);;ArrayElement of Argument[0];Element of ReturnValue;value" + ImmutableSet out = null; + Object[] in = (Object[])newWithArrayElement(source()); + out = ImmutableSet.copyOf(in); + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; Object in = (Object)source(); out = ImmutableSet.of(null, null, null, null, null, in, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; Object in = (Object)source(); out = ImmutableSet.of(null, null, null, null, in, null, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; Object in = (Object)source(); out = ImmutableSet.of(null, null, null, null, in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; Object in = (Object)source(); out = ImmutableSet.of(null, null, null, in, null, null, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; Object in = (Object)source(); out = ImmutableSet.of(null, null, null, in, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; Object in = (Object)source(); out = ImmutableSet.of(null, null, null, in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; Object in = (Object)source(); out = ImmutableSet.of(null, null, in, null, null, null, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; Object in = (Object)source(); out = ImmutableSet.of(null, null, in, null, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; Object in = (Object)source(); out = ImmutableSet.of(null, null, in, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; Object in = (Object)source(); out = ImmutableSet.of(null, null, in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; Object in = (Object)source(); out = ImmutableSet.of(null, in, null, null, null, null, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; Object in = (Object)source(); out = ImmutableSet.of(null, in, null, null, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; Object in = (Object)source(); out = ImmutableSet.of(null, in, null, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; Object in = (Object)source(); out = ImmutableSet.of(null, in, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; Object in = (Object)source(); out = ImmutableSet.of(null, in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; Object in = (Object)source(); out = ImmutableSet.of(in, null, null, null, null, null, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; Object in = (Object)source(); out = ImmutableSet.of(in, null, null, null, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; Object in = (Object)source(); out = ImmutableSet.of(in, null, null, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; Object in = (Object)source(); out = ImmutableSet.of(in, null, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; Object in = (Object)source(); out = ImmutableSet.of(in, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; Object in = (Object)source(); out = ImmutableSet.of(in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSet;true;of;;;ArrayElement of Argument[6];Element of ReturnValue;value" + ImmutableSet out = null; + Object[] in = (Object[])newWithArrayElement(source()); + out = ImmutableSet.of(null, null, null, null, null, null, in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedMap;true;copyOf;(Iterable);;MapKey of Element of Argument[0];MapKey of ReturnValue;value" + ImmutableSortedMap out = null; + Iterable in = (Iterable)newWithElement(newWithMapKey(source())); + out = ImmutableSortedMap.copyOf(in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedMap;true;copyOf;(Iterable);;MapValue of Element of Argument[0];MapValue of ReturnValue;value" + ImmutableSortedMap out = null; + Iterable in = (Iterable)newWithElement(newWithMapValue(source())); + out = ImmutableSortedMap.copyOf(in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedMap;true;copyOf;(Iterable,Comparator);;MapKey of Element of Argument[0];MapKey of ReturnValue;value" + ImmutableSortedMap out = null; + Iterable in = (Iterable)newWithElement(newWithMapKey(source())); + out = ImmutableSortedMap.copyOf(in, (Comparator)null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedMap;true;copyOf;(Iterable,Comparator);;MapValue of Element of Argument[0];MapValue of ReturnValue;value" + ImmutableSortedMap out = null; + Iterable in = (Iterable)newWithElement(newWithMapValue(source())); + out = ImmutableSortedMap.copyOf(in, (Comparator)null); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedMap;true;copyOf;(Map);;MapKey of Argument[0];MapKey of ReturnValue;value" + ImmutableSortedMap out = null; + Map in = (Map)newWithMapKey(source()); + out = ImmutableSortedMap.copyOf(in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedMap;true;copyOf;(Map);;MapValue of Argument[0];MapValue of ReturnValue;value" + ImmutableSortedMap out = null; + Map in = (Map)newWithMapValue(source()); + out = ImmutableSortedMap.copyOf(in); + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMap;true;copyOf;(Map,Comparator);;MapKey of Argument[0];MapKey of ReturnValue;value" ImmutableSortedMap out = null; Map in = (Map)newWithMapKey(source()); out = ImmutableSortedMap.copyOf(in, (Comparator)null); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMap;true;copyOf;(Map,Comparator);;MapValue of Argument[0];MapValue of ReturnValue;value" ImmutableSortedMap out = null; Map in = (Map)newWithMapValue(source()); out = ImmutableSortedMap.copyOf(in, (Comparator)null); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMap;true;copyOfSorted;(SortedMap);;MapKey of Argument[0];MapKey of ReturnValue;value" ImmutableSortedMap out = null; SortedMap in = (SortedMap)newWithMapKey(source()); out = ImmutableSortedMap.copyOfSorted(in); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMap;true;copyOfSorted;(SortedMap);;MapValue of Argument[0];MapValue of ReturnValue;value" ImmutableSortedMap out = null; SortedMap in = (SortedMap)newWithMapValue(source()); out = ImmutableSortedMap.copyOfSorted(in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[0];MapKey of ReturnValue;value" + ImmutableSortedMap out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedMap.of(in, null, null, null, null, null, null, null, null, null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[0];MapKey of ReturnValue;value" + ImmutableSortedMap out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedMap.of(in, null, null, null, null, null, null, null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[0];MapKey of ReturnValue;value" + ImmutableSortedMap out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedMap.of(in, null, null, null, null, null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[0];MapKey of ReturnValue;value" + ImmutableSortedMap out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedMap.of(in, null, null, null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[0];MapKey of ReturnValue;value" + ImmutableSortedMap out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedMap.of(in, null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[1];MapValue of ReturnValue;value" + ImmutableSortedMap out = null; + Object in = (Object)source(); + out = ImmutableSortedMap.of(null, in, null, null, null, null, null, null, null, null); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[1];MapValue of ReturnValue;value" + ImmutableSortedMap out = null; + Object in = (Object)source(); + out = ImmutableSortedMap.of(null, in, null, null, null, null, null, null); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[1];MapValue of ReturnValue;value" + ImmutableSortedMap out = null; + Object in = (Object)source(); + out = ImmutableSortedMap.of(null, in, null, null, null, null); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[1];MapValue of ReturnValue;value" + ImmutableSortedMap out = null; + Object in = (Object)source(); + out = ImmutableSortedMap.of(null, in, null, null); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[1];MapValue of ReturnValue;value" + ImmutableSortedMap out = null; + Object in = (Object)source(); + out = ImmutableSortedMap.of(null, in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[2];MapKey of ReturnValue;value" + ImmutableSortedMap out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedMap.of(null, null, in, null, null, null, null, null, null, null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[2];MapKey of ReturnValue;value" + ImmutableSortedMap out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedMap.of(null, null, in, null, null, null, null, null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[2];MapKey of ReturnValue;value" + ImmutableSortedMap out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedMap.of(null, null, in, null, null, null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[2];MapKey of ReturnValue;value" + ImmutableSortedMap out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedMap.of(null, null, in, null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[3];MapValue of ReturnValue;value" + ImmutableSortedMap out = null; + Object in = (Object)source(); + out = ImmutableSortedMap.of(null, null, null, in, null, null, null, null, null, null); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[3];MapValue of ReturnValue;value" + ImmutableSortedMap out = null; + Object in = (Object)source(); + out = ImmutableSortedMap.of(null, null, null, in, null, null, null, null); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[3];MapValue of ReturnValue;value" + ImmutableSortedMap out = null; + Object in = (Object)source(); + out = ImmutableSortedMap.of(null, null, null, in, null, null); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[3];MapValue of ReturnValue;value" + ImmutableSortedMap out = null; + Object in = (Object)source(); + out = ImmutableSortedMap.of(null, null, null, in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[4];MapKey of ReturnValue;value" + ImmutableSortedMap out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedMap.of(null, null, null, null, in, null, null, null, null, null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[4];MapKey of ReturnValue;value" + ImmutableSortedMap out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedMap.of(null, null, null, null, in, null, null, null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[4];MapKey of ReturnValue;value" + ImmutableSortedMap out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedMap.of(null, null, null, null, in, null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[5];MapValue of ReturnValue;value" + ImmutableSortedMap out = null; + Object in = (Object)source(); + out = ImmutableSortedMap.of(null, null, null, null, null, in, null, null, null, null); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[5];MapValue of ReturnValue;value" + ImmutableSortedMap out = null; + Object in = (Object)source(); + out = ImmutableSortedMap.of(null, null, null, null, null, in, null, null); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[5];MapValue of ReturnValue;value" + ImmutableSortedMap out = null; + Object in = (Object)source(); + out = ImmutableSortedMap.of(null, null, null, null, null, in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[6];MapKey of ReturnValue;value" + ImmutableSortedMap out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedMap.of(null, null, null, null, null, null, in, null, null, null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[6];MapKey of ReturnValue;value" + ImmutableSortedMap out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedMap.of(null, null, null, null, null, null, in, null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[7];MapValue of ReturnValue;value" + ImmutableSortedMap out = null; + Object in = (Object)source(); + out = ImmutableSortedMap.of(null, null, null, null, null, null, null, in, null, null); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[7];MapValue of ReturnValue;value" + ImmutableSortedMap out = null; + Object in = (Object)source(); + out = ImmutableSortedMap.of(null, null, null, null, null, null, null, in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[8];MapKey of ReturnValue;value" + ImmutableSortedMap out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedMap.of(null, null, null, null, null, null, null, null, in, null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[9];MapValue of ReturnValue;value" + ImmutableSortedMap out = null; + Object in = (Object)source(); + out = ImmutableSortedMap.of(null, null, null, null, null, null, null, null, null, in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedMultiset;true;copyOf;(Comparable[]);;ArrayElement of Argument[0];Element of ReturnValue;value" + ImmutableSortedMultiset out = null; + Comparable[] in = (Comparable[])newWithArrayElement(source()); + out = ImmutableSortedMultiset.copyOf(in); + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMultiset;true;copyOf;(Comparator,Iterable);;Element of Argument[1];Element of ReturnValue;value" ImmutableSortedMultiset out = null; Iterable in = (Iterable)newWithElement(source()); out = ImmutableSortedMultiset.copyOf((Comparator)null, in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMultiset;true;copyOf;(Comparator,Iterator);;Element of Argument[1];Element of ReturnValue;value" ImmutableSortedMultiset out = null; Iterator in = (Iterator)newWithElement(source()); out = ImmutableSortedMultiset.copyOf((Comparator)null, in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedMultiset;true;copyOf;(Iterable);;Element of Argument[0];Element of ReturnValue;value" + ImmutableSortedMultiset out = null; + Iterable in = (Iterable)newWithElement(source()); + out = ImmutableSortedMultiset.copyOf(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedMultiset;true;copyOf;(Iterator);;Element of Argument[0];Element of ReturnValue;value" + ImmutableSortedMultiset out = null; + Iterator in = (Iterator)newWithElement(source()); + out = ImmutableSortedMultiset.copyOf(in); + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMultiset;true;copyOfSorted;(SortedMultiset);;Element of Argument[0];Element of ReturnValue;value" ImmutableSortedMultiset out = null; SortedMultiset in = (SortedMultiset)newWithElement(source()); out = ImmutableSortedMultiset.copyOfSorted(in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedMultiset out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedMultiset.of(null, null, null, null, null, in, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedMultiset out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedMultiset.of(null, null, null, null, in, null, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedMultiset out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedMultiset.of(null, null, null, null, in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedMultiset out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedMultiset.of(null, null, null, in, null, null, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedMultiset out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedMultiset.of(null, null, null, in, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedMultiset out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedMultiset.of(null, null, null, in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedMultiset out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedMultiset.of(null, null, in, null, null, null, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedMultiset out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedMultiset.of(null, null, in, null, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedMultiset out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedMultiset.of(null, null, in, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedMultiset out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedMultiset.of(null, null, in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedMultiset out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedMultiset.of(null, in, null, null, null, null, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedMultiset out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedMultiset.of(null, in, null, null, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedMultiset out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedMultiset.of(null, in, null, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedMultiset out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedMultiset.of(null, in, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedMultiset out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedMultiset.of(null, in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedMultiset out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedMultiset.of(in, null, null, null, null, null, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedMultiset out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedMultiset.of(in, null, null, null, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedMultiset out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedMultiset.of(in, null, null, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedMultiset out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedMultiset.of(in, null, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedMultiset out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedMultiset.of(in, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedMultiset out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedMultiset.of(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Element of Argument[6];Element of ReturnValue;value" + ImmutableSortedMultiset out = null; + Comparable[] in = (Comparable[])newWithElement(source()); + out = ImmutableSortedMultiset.of(null, null, null, null, null, null, in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedSet;true;copyOf;(Collection);;Element of Argument[0];Element of ReturnValue;value" + ImmutableSortedSet out = null; + Collection in = (Collection)newWithElement(source()); + out = ImmutableSortedSet.copyOf(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedSet;true;copyOf;(Comparable[]);;ArrayElement of Argument[0];Element of ReturnValue;value" + ImmutableSortedSet out = null; + Comparable[] in = (Comparable[])newWithArrayElement(source()); + out = ImmutableSortedSet.copyOf(in); + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;copyOf;(Comparator,Collection);;Element of Argument[1];Element of ReturnValue;value" ImmutableSortedSet out = null; Collection in = (Collection)newWithElement(source()); out = ImmutableSortedSet.copyOf((Comparator)null, in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;copyOf;(Comparator,Iterable);;Element of Argument[1];Element of ReturnValue;value" ImmutableSortedSet out = null; Iterable in = (Iterable)newWithElement(source()); out = ImmutableSortedSet.copyOf((Comparator)null, in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;copyOf;(Comparator,Iterator);;Element of Argument[1];Element of ReturnValue;value" ImmutableSortedSet out = null; Iterator in = (Iterator)newWithElement(source()); out = ImmutableSortedSet.copyOf((Comparator)null, in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedSet;true;copyOf;(Iterable);;Element of Argument[0];Element of ReturnValue;value" + ImmutableSortedSet out = null; + Iterable in = (Iterable)newWithElement(source()); + out = ImmutableSortedSet.copyOf(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedSet;true;copyOf;(Iterator);;Element of Argument[0];Element of ReturnValue;value" + ImmutableSortedSet out = null; + Iterator in = (Iterator)newWithElement(source()); + out = ImmutableSortedSet.copyOf(in); + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;copyOfSorted;(SortedSet);;Element of Argument[0];Element of ReturnValue;value" ImmutableSortedSet out = null; SortedSet in = (SortedSet)newWithElement(source()); out = ImmutableSortedSet.copyOfSorted(in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedSet out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedSet.of(null, null, null, null, null, in, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedSet out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedSet.of(null, null, null, null, in, null, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedSet out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedSet.of(null, null, null, null, in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedSet out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedSet.of(null, null, null, in, null, null, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedSet out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedSet.of(null, null, null, in, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedSet out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedSet.of(null, null, null, in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedSet out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedSet.of(null, null, in, null, null, null, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedSet out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedSet.of(null, null, in, null, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedSet out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedSet.of(null, null, in, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedSet out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedSet.of(null, null, in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedSet out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedSet.of(null, in, null, null, null, null, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedSet out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedSet.of(null, in, null, null, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedSet out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedSet.of(null, in, null, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedSet out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedSet.of(null, in, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedSet out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedSet.of(null, in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedSet out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedSet.of(in, null, null, null, null, null, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedSet out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedSet.of(in, null, null, null, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedSet out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedSet.of(in, null, null, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedSet out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedSet.of(in, null, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedSet out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedSet.of(in, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedSet out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedSet.of(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedSet;true;of;;;ArrayElement of Argument[6];Element of ReturnValue;value" + ImmutableSortedSet out = null; + Comparable[] in = (Comparable[])newWithArrayElement(source()); + out = ImmutableSortedSet.of(null, null, null, null, null, null, in); + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableTable$Builder;true;build;();;MapValue of Argument[-1];MapValue of ReturnValue;value" ImmutableTable out = null; ImmutableTable.Builder in = (ImmutableTable.Builder)newWithMapValue(source()); out = in.build(); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableTable$Builder;true;build;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value" + ImmutableTable out = null; + ImmutableTable.Builder in = (ImmutableTable.Builder)newWithTable_columnKey(source()); + out = in.build(); + sink(getTable_columnKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableTable$Builder;true;build;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value" + ImmutableTable out = null; + ImmutableTable.Builder in = (ImmutableTable.Builder)newWithTable_rowKey(source()); + out = in.build(); + sink(getTable_rowKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableTable$Builder;true;orderColumnsBy;(Comparator);;Argument[-1];ReturnValue;value" ImmutableTable.Builder out = null; ImmutableTable.Builder in = (ImmutableTable.Builder)source(); out = in.orderColumnsBy(null); - sink(out); // $hasValueFlow + sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableTable$Builder;true;orderRowsBy;(Comparator);;Argument[-1];ReturnValue;value" ImmutableTable.Builder out = null; ImmutableTable.Builder in = (ImmutableTable.Builder)source(); out = in.orderRowsBy(null); - sink(out); // $hasValueFlow + sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableTable$Builder;true;put;(Cell);;Argument[-1];ReturnValue;value" ImmutableTable.Builder out = null; ImmutableTable.Builder in = (ImmutableTable.Builder)source(); out = in.put(null); - sink(out); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableTable$Builder;true;put;(Cell);;MapKey of Argument[0];MapKey of Argument[-1];value" - ImmutableTable.Builder out = null; - Table.Cell in = (Table.Cell)newWithMapKey(source()); - out.put(in); - sink(getMapKey(out)); // $hasValueFlow + sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableTable$Builder;true;put;(Cell);;MapValue of Argument[0];MapValue of Argument[-1];value" ImmutableTable.Builder out = null; Table.Cell in = (Table.Cell)newWithMapValue(source()); out.put(in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableTable$Builder;true;put;(Cell);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];value" + ImmutableTable.Builder out = null; + Table.Cell in = (Table.Cell)newWithTable_columnKey(source()); + out.put(in); + sink(getTable_columnKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableTable$Builder;true;put;(Cell);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];value" + ImmutableTable.Builder out = null; + Table.Cell in = (Table.Cell)newWithTable_rowKey(source()); + out.put(in); + sink(getTable_rowKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableTable$Builder;true;put;(Object,Object,Object);;Argument[-1];ReturnValue;value" ImmutableTable.Builder out = null; ImmutableTable.Builder in = (ImmutableTable.Builder)source(); out = in.put(null, null, null); - sink(out); // $hasValueFlow + sink(out); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableTable$Builder;true;put;(Object,Object,Object);;Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];value" + ImmutableTable.Builder out = null; + Object in = (Object)source(); + out.put(in, null, null); + sink(getTable_rowKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableTable$Builder;true;put;(Object,Object,Object);;Argument[1];SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];value" + ImmutableTable.Builder out = null; + Object in = (Object)source(); + out.put(null, in, null); + sink(getTable_columnKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableTable$Builder;true;put;(Object,Object,Object);;Argument[2];MapValue of Argument[-1];value" ImmutableTable.Builder out = null; Object in = (Object)source(); out.put(null, null, in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableTable$Builder;true;putAll;(Table);;Argument[-1];ReturnValue;value" ImmutableTable.Builder out = null; ImmutableTable.Builder in = (ImmutableTable.Builder)source(); out = in.putAll(null); - sink(out); // $hasValueFlow - } - { - // "com.google.common.collect;ImmutableTable$Builder;true;putAll;(Table);;MapKey of Argument[0];MapKey of Argument[-1];value" - ImmutableTable.Builder out = null; - Table in = (Table)newWithMapKey(source()); - out.putAll(in); - sink(getMapKey(out)); // $hasValueFlow + sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableTable$Builder;true;putAll;(Table);;MapValue of Argument[0];MapValue of Argument[-1];value" ImmutableTable.Builder out = null; Table in = (Table)newWithMapValue(source()); out.putAll(in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { - // "com.google.common.collect;ImmutableTable;true;copyOf;(Table);;MapKey of Argument[0];MapKey of ReturnValue;value" - ImmutableTable out = null; - Table in = (Table)newWithMapKey(source()); - out = ImmutableTable.copyOf(in); - sink(getMapKey(out)); // $hasValueFlow + // "com.google.common.collect;ImmutableTable$Builder;true;putAll;(Table);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];value" + ImmutableTable.Builder out = null; + Table in = (Table)newWithTable_columnKey(source()); + out.putAll(in); + sink(getTable_columnKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableTable$Builder;true;putAll;(Table);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];value" + ImmutableTable.Builder out = null; + Table in = (Table)newWithTable_rowKey(source()); + out.putAll(in); + sink(getTable_rowKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableTable;true;copyOf;(Table);;MapValue of Argument[0];MapValue of ReturnValue;value" ImmutableTable out = null; Table in = (Table)newWithMapValue(source()); out = ImmutableTable.copyOf(in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableTable;true;copyOf;(Table);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value" + ImmutableTable out = null; + Table in = (Table)newWithTable_columnKey(source()); + out = ImmutableTable.copyOf(in); + sink(getTable_columnKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableTable;true;copyOf;(Table);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value" + ImmutableTable out = null; + Table in = (Table)newWithTable_rowKey(source()); + out = ImmutableTable.copyOf(in); + sink(getTable_rowKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableTable;true;of;(Object,Object,Object);;Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value" + ImmutableTable out = null; + Object in = (Object)source(); + out = ImmutableTable.of(in, null, null); + sink(getTable_rowKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableTable;true;of;(Object,Object,Object);;Argument[1];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value" + ImmutableTable out = null; + Object in = (Object)source(); + out = ImmutableTable.of(null, in, null); + sink(getTable_columnKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableTable;true;of;(Object,Object,Object);;Argument[2];MapValue of ReturnValue;value" ImmutableTable out = null; Object in = (Object)source(); out = ImmutableTable.of(null, null, in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;addAll;(Collection,Iterable);;Element of Argument[1];Element of Argument[0];value" Collection out = null; Iterable in = (Iterable)newWithElement(source()); Iterables.addAll(out, in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;concat;(Iterable);;Element of Element of Argument[0];Element of ReturnValue;value" Iterable out = null; Iterable in = (Iterable)newWithElement(newWithElement(source())); out = Iterables.concat(in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;concat;(Iterable,Iterable);;Element of Argument[0..1];Element of ReturnValue;value" Iterable out = null; Iterable in = (Iterable)newWithElement(source()); out = Iterables.concat(null, in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;concat;(Iterable,Iterable);;Element of Argument[0..1];Element of ReturnValue;value" Iterable out = null; Iterable in = (Iterable)newWithElement(source()); out = Iterables.concat(in, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;concat;(Iterable,Iterable,Iterable);;Element of Argument[0..2];Element of ReturnValue;value" Iterable out = null; Iterable in = (Iterable)newWithElement(source()); out = Iterables.concat(null, null, in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;concat;(Iterable,Iterable,Iterable);;Element of Argument[0..2];Element of ReturnValue;value" Iterable out = null; Iterable in = (Iterable)newWithElement(source()); out = Iterables.concat(null, in, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;concat;(Iterable,Iterable,Iterable);;Element of Argument[0..2];Element of ReturnValue;value" Iterable out = null; Iterable in = (Iterable)newWithElement(source()); out = Iterables.concat(in, null, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;concat;(Iterable,Iterable,Iterable,Iterable);;Element of Argument[0..3];Element of ReturnValue;value" Iterable out = null; Iterable in = (Iterable)newWithElement(source()); out = Iterables.concat(null, null, null, in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;concat;(Iterable,Iterable,Iterable,Iterable);;Element of Argument[0..3];Element of ReturnValue;value" Iterable out = null; Iterable in = (Iterable)newWithElement(source()); out = Iterables.concat(null, null, in, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;concat;(Iterable,Iterable,Iterable,Iterable);;Element of Argument[0..3];Element of ReturnValue;value" Iterable out = null; Iterable in = (Iterable)newWithElement(source()); out = Iterables.concat(null, in, null, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;concat;(Iterable,Iterable,Iterable,Iterable);;Element of Argument[0..3];Element of ReturnValue;value" Iterable out = null; Iterable in = (Iterable)newWithElement(source()); out = Iterables.concat(in, null, null, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;concat;(Iterable[]);;Element of ArrayElement of Argument[0];Element of ReturnValue;value" Iterable out = null; Iterable[] in = (Iterable[])newWithArrayElement(newWithElement(source())); out = Iterables.concat(in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;consumingIterable;(Iterable);;Element of Argument[0];Element of ReturnValue;value" Iterable out = null; Iterable in = (Iterable)newWithElement(source()); out = Iterables.consumingIterable(in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;cycle;(Iterable);;Element of Argument[0];Element of ReturnValue;value" Iterable out = null; Iterable in = (Iterable)newWithElement(source()); out = Iterables.cycle(in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;Iterables;false;cycle;(Object[]);;ArrayElement of Argument[0];Element of ReturnValue;value" + Iterable out = null; + Object[] in = (Object[])newWithArrayElement(source()); + out = Iterables.cycle(in); + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;filter;(Iterable,Class);;Element of Argument[0];Element of ReturnValue;value" Iterable out = null; Iterable in = (Iterable)newWithElement(source()); out = Iterables.filter(in, (Class)null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;filter;(Iterable,Predicate);;Element of Argument[0];Element of ReturnValue;value" Iterable out = null; Iterable in = (Iterable)newWithElement(source()); out = Iterables.filter(in, (Predicate)null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;find;(Iterable,Predicate);;Element of Argument[0];ReturnValue;value" Object out = null; Iterable in = (Iterable)newWithElement(source()); out = Iterables.find(in, null); - sink(out); // $hasValueFlow + sink(out); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;find;(Iterable,Predicate,Object);;Argument[2];Element of ReturnValue;value" Object out = null; Object in = (Object)source(); out = Iterables.find(null, null, in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;find;(Iterable,Predicate,Object);;Element of Argument[0];ReturnValue;value" Object out = null; Iterable in = (Iterable)newWithElement(source()); out = Iterables.find(in, null, null); - sink(out); // $hasValueFlow + sink(out); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;get;(Iterable,int);;Element of Argument[0];ReturnValue;value" Object out = null; Iterable in = (Iterable)newWithElement(source()); out = Iterables.get(in, 0); - sink(out); // $hasValueFlow + sink(out); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;get;(Iterable,int,Object);;Argument[2];Element of ReturnValue;value" Object out = null; Object in = (Object)source(); out = Iterables.get(null, 0, in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;get;(Iterable,int,Object);;Element of Argument[0];ReturnValue;value" Object out = null; Iterable in = (Iterable)newWithElement(source()); out = Iterables.get(in, 0, null); - sink(out); // $hasValueFlow + sink(out); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;getLast;(Iterable);;Element of Argument[0];ReturnValue;value" Object out = null; Iterable in = (Iterable)newWithElement(source()); out = Iterables.getLast(in); - sink(out); // $hasValueFlow + sink(out); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;getLast;(Iterable,Object);;Argument[1];Element of ReturnValue;value" Object out = null; Object in = (Object)source(); out = Iterables.getLast(null, in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;getLast;(Iterable,Object);;Element of Argument[0];ReturnValue;value" Object out = null; Iterable in = (Iterable)newWithElement(source()); out = Iterables.getLast(in, null); - sink(out); // $hasValueFlow + sink(out); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;getOnlyElement;(Iterable);;Element of Argument[0];ReturnValue;value" Object out = null; Iterable in = (Iterable)newWithElement(source()); out = Iterables.getOnlyElement(in); - sink(out); // $hasValueFlow + sink(out); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;getOnlyElement;(Iterable,Object);;Argument[1];Element of ReturnValue;value" Object out = null; Object in = (Object)source(); out = Iterables.getOnlyElement(null, in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;getOnlyElement;(Iterable,Object);;Element of Argument[0];ReturnValue;value" Object out = null; Iterable in = (Iterable)newWithElement(source()); out = Iterables.getOnlyElement(in, null); - sink(out); // $hasValueFlow + sink(out); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;limit;(Iterable,int);;Element of Argument[0];Element of ReturnValue;value" Iterable out = null; Iterable in = (Iterable)newWithElement(source()); out = Iterables.limit(in, 0); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;mergeSorted;(Iterable,Comparator);;Element of Element of Argument[0];Element of ReturnValue;value" Iterable out = null; Iterable in = (Iterable)newWithElement(newWithElement(source())); out = Iterables.mergeSorted(in, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;paddedPartition;(Iterable,int);;Element of Element of Argument[0];Element of ReturnValue;value" Iterable out = null; Iterable in = (Iterable)newWithElement(newWithElement(source())); out = Iterables.paddedPartition(in, 0); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;partition;(Iterable,int);;Element of Element of Argument[0];Element of ReturnValue;value" Iterable out = null; Iterable in = (Iterable)newWithElement(newWithElement(source())); out = Iterables.partition(in, 0); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;skip;(Iterable,int);;Element of Argument[0];Element of ReturnValue;value" Iterable out = null; Iterable in = (Iterable)newWithElement(source()); out = Iterables.skip(in, 0); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;Iterables;false;toArray;(Iterable,Class);;Element of Argument[0];ArrayElement of ReturnValue;value" + Object[] out = null; + Iterable in = (Iterable)newWithElement(source()); + out = Iterables.toArray(in, (Class)null); + sink(getArrayElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;toString;(Iterable);;Element of Argument[0];ReturnValue;taint" String out = null; Iterable in = (Iterable)newWithElement(source()); out = Iterables.toString(in); - sink(out); // $hasTaintFlow + sink(out); // $ hasTaintFlow } { // "com.google.common.collect;Iterables;false;tryFind;(Iterable,Predicate);;Element of Argument[0];Element of ReturnValue;value" Optional out = null; Iterable in = (Iterable)newWithElement(source()); out = Iterables.tryFind(in, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;unmodifiableIterable;(ImmutableCollection);;Element of Argument[0];Element of ReturnValue;value" Iterable out = null; ImmutableCollection in = (ImmutableCollection)newWithElement(source()); out = Iterables.unmodifiableIterable(in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;unmodifiableIterable;(Iterable);;Element of Argument[0];Element of ReturnValue;value" Iterable out = null; Iterable in = (Iterable)newWithElement(source()); out = Iterables.unmodifiableIterable(in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;addAll;(Collection,Iterator);;Element of Argument[1];Element of Argument[0];value" Collection out = null; Iterator in = (Iterator)newWithElement(source()); Iterators.addAll(out, in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;asEnumeration;(Iterator);;Element of Argument[0];Element of ReturnValue;value" Enumeration out = null; Iterator in = (Iterator)newWithElement(source()); out = Iterators.asEnumeration(in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;concat;(Iterator);;Element of Element of Argument[0];Element of ReturnValue;value" Iterator out = null; Iterator in = (Iterator)newWithElement(newWithElement(source())); out = Iterators.concat(in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;concat;(Iterator,Iterator);;Element of Argument[0..1];Element of ReturnValue;value" Iterator out = null; Iterator in = (Iterator)newWithElement(source()); out = Iterators.concat(null, in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;concat;(Iterator,Iterator);;Element of Argument[0..1];Element of ReturnValue;value" Iterator out = null; Iterator in = (Iterator)newWithElement(source()); out = Iterators.concat(in, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;concat;(Iterator,Iterator,Iterator);;Element of Argument[0..2];Element of ReturnValue;value" Iterator out = null; Iterator in = (Iterator)newWithElement(source()); out = Iterators.concat(null, null, in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;concat;(Iterator,Iterator,Iterator);;Element of Argument[0..2];Element of ReturnValue;value" Iterator out = null; Iterator in = (Iterator)newWithElement(source()); out = Iterators.concat(null, in, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;concat;(Iterator,Iterator,Iterator);;Element of Argument[0..2];Element of ReturnValue;value" Iterator out = null; Iterator in = (Iterator)newWithElement(source()); out = Iterators.concat(in, null, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;concat;(Iterator,Iterator,Iterator,Iterator);;Element of Argument[0..3];Element of ReturnValue;value" Iterator out = null; Iterator in = (Iterator)newWithElement(source()); out = Iterators.concat(null, null, null, in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;concat;(Iterator,Iterator,Iterator,Iterator);;Element of Argument[0..3];Element of ReturnValue;value" Iterator out = null; Iterator in = (Iterator)newWithElement(source()); out = Iterators.concat(null, null, in, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;concat;(Iterator,Iterator,Iterator,Iterator);;Element of Argument[0..3];Element of ReturnValue;value" Iterator out = null; Iterator in = (Iterator)newWithElement(source()); out = Iterators.concat(null, in, null, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;concat;(Iterator,Iterator,Iterator,Iterator);;Element of Argument[0..3];Element of ReturnValue;value" Iterator out = null; Iterator in = (Iterator)newWithElement(source()); out = Iterators.concat(in, null, null, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;concat;(Iterator[]);;Element of ArrayElement of Argument[0];Element of ReturnValue;value" Iterator out = null; Iterator[] in = (Iterator[])newWithArrayElement(newWithElement(source())); out = Iterators.concat(in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;consumingIterator;(Iterator);;Element of Argument[0];Element of ReturnValue;value" Iterator out = null; Iterator in = (Iterator)newWithElement(source()); out = Iterators.consumingIterator(in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;cycle;(Iterable);;Element of Argument[0];Element of ReturnValue;value" Iterator out = null; Iterable in = (Iterable)newWithElement(source()); out = Iterators.cycle(in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;Iterators;false;cycle;(Object[]);;ArrayElement of Argument[0];Element of ReturnValue;value" + Iterator out = null; + Object[] in = (Object[])newWithArrayElement(source()); + out = Iterators.cycle(in); + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;filter;(Iterator,Class);;Element of Argument[0];Element of ReturnValue;value" UnmodifiableIterator out = null; Iterator in = (Iterator)newWithElement(source()); out = Iterators.filter(in, (Class)null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;filter;(Iterator,Predicate);;Element of Argument[0];Element of ReturnValue;value" UnmodifiableIterator out = null; Iterator in = (Iterator)newWithElement(source()); out = Iterators.filter(in, (Predicate)null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;find;(Iterator,Predicate);;Element of Argument[0];ReturnValue;value" Object out = null; Iterator in = (Iterator)newWithElement(source()); out = Iterators.find(in, null); - sink(out); // $hasValueFlow + sink(out); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;find;(Iterator,Predicate,Object);;Argument[2];Element of ReturnValue;value" Object out = null; Object in = (Object)source(); out = Iterators.find(null, null, in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;find;(Iterator,Predicate,Object);;Element of Argument[0];ReturnValue;value" Object out = null; Iterator in = (Iterator)newWithElement(source()); out = Iterators.find(in, null, null); - sink(out); // $hasValueFlow + sink(out); // $ hasValueFlow + } + { + // "com.google.common.collect;Iterators;false;forArray;(Object[]);;ArrayElement of Argument[0];Element of ReturnValue;value" + UnmodifiableIterator out = null; + Object[] in = (Object[])newWithArrayElement(source()); + out = Iterators.forArray(in); + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;forEnumeration;(Enumeration);;Element of Argument[0];Element of ReturnValue;value" UnmodifiableIterator out = null; Enumeration in = (Enumeration)newWithElement(source()); out = Iterators.forEnumeration(in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;get;(Iterator,int);;Element of Argument[0];ReturnValue;value" Object out = null; Iterator in = (Iterator)newWithElement(source()); out = Iterators.get(in, 0); - sink(out); // $hasValueFlow + sink(out); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;get;(Iterator,int,Object);;Argument[2];Element of ReturnValue;value" Object out = null; Object in = (Object)source(); out = Iterators.get(null, 0, in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;get;(Iterator,int,Object);;Element of Argument[0];ReturnValue;value" Object out = null; Iterator in = (Iterator)newWithElement(source()); out = Iterators.get(in, 0, null); - sink(out); // $hasValueFlow + sink(out); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;getLast;(Iterator);;Element of Argument[0];ReturnValue;value" Object out = null; Iterator in = (Iterator)newWithElement(source()); out = Iterators.getLast(in); - sink(out); // $hasValueFlow + sink(out); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;getLast;(Iterator,Object);;Argument[1];Element of ReturnValue;value" Object out = null; Object in = (Object)source(); out = Iterators.getLast(null, in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;getLast;(Iterator,Object);;Element of Argument[0];ReturnValue;value" Object out = null; Iterator in = (Iterator)newWithElement(source()); out = Iterators.getLast(in, null); - sink(out); // $hasValueFlow + sink(out); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;getNext;(Iterator,Object);;Argument[1];Element of ReturnValue;value" Object out = null; Object in = (Object)source(); out = Iterators.getNext(null, in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;getNext;(Iterator,Object);;Element of Argument[0];ReturnValue;value" Object out = null; Iterator in = (Iterator)newWithElement(source()); out = Iterators.getNext(in, null); - sink(out); // $hasValueFlow + sink(out); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;getOnlyElement;(Iterator);;Element of Argument[0];ReturnValue;value" Object out = null; Iterator in = (Iterator)newWithElement(source()); out = Iterators.getOnlyElement(in); - sink(out); // $hasValueFlow + sink(out); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;getOnlyElement;(Iterator,Object);;Argument[1];Element of ReturnValue;value" Object out = null; Object in = (Object)source(); out = Iterators.getOnlyElement(null, in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;getOnlyElement;(Iterator,Object);;Element of Argument[0];ReturnValue;value" Object out = null; Iterator in = (Iterator)newWithElement(source()); out = Iterators.getOnlyElement(in, null); - sink(out); // $hasValueFlow + sink(out); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;limit;(Iterator,int);;Element of Argument[0];Element of ReturnValue;value" Iterator out = null; Iterator in = (Iterator)newWithElement(source()); out = Iterators.limit(in, 0); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;mergeSorted;(Iterable,Comparator);;Element of Element of Argument[0];Element of ReturnValue;value" UnmodifiableIterator out = null; Iterable in = (Iterable)newWithElement(newWithElement(source())); out = Iterators.mergeSorted(in, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;paddedPartition;(Iterator,int);;Element of Element of Argument[0];Element of ReturnValue;value" UnmodifiableIterator out = null; Iterator in = (Iterator)newWithElement(newWithElement(source())); out = Iterators.paddedPartition(in, 0); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;partition;(Iterator,int);;Element of Element of Argument[0];Element of ReturnValue;value" UnmodifiableIterator out = null; Iterator in = (Iterator)newWithElement(newWithElement(source())); out = Iterators.partition(in, 0); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;peekingIterator;(Iterator);;Element of Argument[0];Element of ReturnValue;value" PeekingIterator out = null; Iterator in = (Iterator)newWithElement(source()); out = Iterators.peekingIterator(in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;peekingIterator;(PeekingIterator);;Element of Argument[0];Element of ReturnValue;value" PeekingIterator out = null; PeekingIterator in = (PeekingIterator)newWithElement(source()); out = Iterators.peekingIterator(in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;singletonIterator;(Object);;Argument[0];Element of ReturnValue;value" UnmodifiableIterator out = null; Object in = (Object)source(); out = Iterators.singletonIterator(in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;Iterators;false;toArray;(Iterator,Class);;Element of Argument[0];ArrayElement of ReturnValue;value" + Object[] out = null; + Iterator in = (Iterator)newWithElement(source()); + out = Iterators.toArray(in, null); + sink(getArrayElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;toString;(Iterator);;Element of Argument[0];ReturnValue;taint" String out = null; Iterator in = (Iterator)newWithElement(source()); out = Iterators.toString(in); - sink(out); // $hasTaintFlow + sink(out); // $ hasTaintFlow } { // "com.google.common.collect;Iterators;false;tryFind;(Iterator,Predicate);;Element of Argument[0];Element of ReturnValue;value" Optional out = null; Iterator in = (Iterator)newWithElement(source()); out = Iterators.tryFind(in, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;unmodifiableIterator;(Iterator);;Element of Argument[0];Element of ReturnValue;value" UnmodifiableIterator out = null; Iterator in = (Iterator)newWithElement(source()); out = Iterators.unmodifiableIterator(in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;unmodifiableIterator;(UnmodifiableIterator);;Element of Argument[0];Element of ReturnValue;value" UnmodifiableIterator out = null; UnmodifiableIterator in = (UnmodifiableIterator)newWithElement(source()); out = Iterators.unmodifiableIterator(in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;LinkedHashMultimap;true;create;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value" LinkedHashMultimap out = null; Multimap in = (Multimap)newWithMapKey(source()); out = LinkedHashMultimap.create(in); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;LinkedHashMultimap;true;create;(Multimap);;MapValue of Argument[0];MapValue of ReturnValue;value" LinkedHashMultimap out = null; Multimap in = (Multimap)newWithMapValue(source()); out = LinkedHashMultimap.create(in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;LinkedHashMultiset;true;create;(Iterable);;Element of Argument[0];Element of ReturnValue;value" LinkedHashMultiset out = null; Iterable in = (Iterable)newWithElement(source()); out = LinkedHashMultiset.create(in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;LinkedListMultimap;true;create;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value" LinkedListMultimap out = null; Multimap in = (Multimap)newWithMapKey(source()); out = LinkedListMultimap.create(in); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;LinkedListMultimap;true;create;(Multimap);;MapValue of Argument[0];MapValue of ReturnValue;value" LinkedListMultimap out = null; Multimap in = (Multimap)newWithMapValue(source()); out = LinkedListMultimap.create(in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Lists;false;asList;(Object,Object,Object[]);;Argument[0..1];Element of ReturnValue;value" List out = null; Object in = (Object)source(); out = Lists.asList(null, in, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Lists;false;asList;(Object,Object,Object[]);;Argument[0..1];Element of ReturnValue;value" List out = null; Object in = (Object)source(); out = Lists.asList(in, null, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;Lists;false;asList;(Object,Object,Object[]);;ArrayElement of Argument[2];Element of ReturnValue;value" + List out = null; + Object[] in = (Object[])newWithArrayElement(source()); + out = Lists.asList(null, null, in); + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Lists;false;asList;(Object,Object[]);;Argument[0];Element of ReturnValue;value" List out = null; Object in = (Object)source(); out = Lists.asList(in, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;Lists;false;asList;(Object,Object[]);;ArrayElement of Argument[1];Element of ReturnValue;value" + List out = null; + Object[] in = (Object[])newWithArrayElement(source()); + out = Lists.asList(null, in); + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Lists;false;cartesianProduct;(List);;Element of Element of Argument[0];Element of Element of ReturnValue;value" List out = null; List in = (List)newWithElement(newWithElement(source())); out = Lists.cartesianProduct(in); - sink(getElement(getElement(out))); // $hasValueFlow + sink(getElement(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Lists;false;cartesianProduct;(List[]);;Element of ArrayElement of Argument[0];Element of Element of ReturnValue;value" List out = null; List[] in = (List[])newWithArrayElement(newWithElement(source())); out = Lists.cartesianProduct(in); - sink(getElement(getElement(out))); // $hasValueFlow + sink(getElement(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Lists;false;charactersOf;(CharSequence);;Argument[0];Element of ReturnValue;taint" List out = null; CharSequence in = (CharSequence)source(); out = Lists.charactersOf(in); - sink(getElement(out)); // $hasTaintFlow + sink(getElement(out)); // $ hasTaintFlow } { // "com.google.common.collect;Lists;false;charactersOf;(String);;Argument[0];Element of ReturnValue;taint" ImmutableList out = null; String in = (String)source(); out = Lists.charactersOf(in); - sink(getElement(out)); // $hasTaintFlow + sink(getElement(out)); // $ hasTaintFlow } { // "com.google.common.collect;Lists;false;newArrayList;(Iterable);;Element of Argument[0];Element of ReturnValue;value" ArrayList out = null; Iterable in = (Iterable)newWithElement(source()); out = Lists.newArrayList(in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Lists;false;newArrayList;(Iterator);;Element of Argument[0];Element of ReturnValue;value" ArrayList out = null; Iterator in = (Iterator)newWithElement(source()); out = Lists.newArrayList(in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;Lists;false;newArrayList;(Object[]);;ArrayElement of Argument[0];Element of ReturnValue;value" + ArrayList out = null; + Object[] in = (Object[])newWithArrayElement(source()); + out = Lists.newArrayList(in); + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Lists;false;newCopyOnWriteArrayList;(Iterable);;Element of Argument[0];Element of ReturnValue;value" CopyOnWriteArrayList out = null; Iterable in = (Iterable)newWithElement(source()); out = Lists.newCopyOnWriteArrayList(in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Lists;false;newLinkedList;(Iterable);;Element of Argument[0];Element of ReturnValue;value" LinkedList out = null; Iterable in = (Iterable)newWithElement(source()); out = Lists.newLinkedList(in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Lists;false;partition;(List,int);;Element of Argument[0];Element of Element of ReturnValue;value" List out = null; List in = (List)newWithElement(source()); out = Lists.partition(in, 0); - sink(getElement(getElement(out))); // $hasValueFlow + sink(getElement(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Lists;false;reverse;(List);;Element of Argument[0];Element of ReturnValue;value" List out = null; List in = (List)newWithElement(source()); out = Lists.reverse(in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;MapDifference$ValueDifference;true;leftValue;();;SyntheticField[com.google.common.collect.MapDifference.left] of Argument[-1];ReturnValue;value" + Object out = null; + MapDifference.ValueDifference in = (MapDifference.ValueDifference)newWithMapDifference_left(source()); + out = in.leftValue(); + sink(out); // $ hasValueFlow + } + { + // "com.google.common.collect;MapDifference$ValueDifference;true;rightValue;();;SyntheticField[com.google.common.collect.MapDifference.right] of Argument[-1];ReturnValue;value" + Object out = null; + MapDifference.ValueDifference in = (MapDifference.ValueDifference)newWithMapDifference_right(source()); + out = in.rightValue(); + sink(out); // $ hasValueFlow + } + { + // "com.google.common.collect;MapDifference;true;entriesDiffering;();;MapKey of SyntheticField[com.google.common.collect.MapDifference.left] of Argument[-1];MapKey of ReturnValue;value" + SortedMap out = null; + SortedMapDifference in = (SortedMapDifference)newWithMapDifference_left(newWithMapKey(source())); + out = in.entriesDiffering(); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;MapDifference;true;entriesDiffering;();;MapKey of SyntheticField[com.google.common.collect.MapDifference.left] of Argument[-1];MapKey of ReturnValue;value" + Map out = null; + MapDifference in = (MapDifference)newWithMapDifference_left(newWithMapKey(source())); + out = in.entriesDiffering(); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;MapDifference;true;entriesDiffering;();;MapKey of SyntheticField[com.google.common.collect.MapDifference.right] of Argument[-1];MapKey of ReturnValue;value" + SortedMap out = null; + SortedMapDifference in = (SortedMapDifference)newWithMapDifference_right(newWithMapKey(source())); + out = in.entriesDiffering(); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;MapDifference;true;entriesDiffering;();;MapKey of SyntheticField[com.google.common.collect.MapDifference.right] of Argument[-1];MapKey of ReturnValue;value" + Map out = null; + MapDifference in = (MapDifference)newWithMapDifference_right(newWithMapKey(source())); + out = in.entriesDiffering(); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;MapDifference;true;entriesDiffering;();;MapValue of SyntheticField[com.google.common.collect.MapDifference.left] of Argument[-1];SyntheticField[com.google.common.collect.MapDifference.left] of MapValue of ReturnValue;value" + SortedMap out = null; + SortedMapDifference in = (SortedMapDifference)newWithMapDifference_left(newWithMapValue(source())); + out = in.entriesDiffering(); + sink(getMapDifference_left(getMapValue(out))); // $ hasValueFlow + } + { + // "com.google.common.collect;MapDifference;true;entriesDiffering;();;MapValue of SyntheticField[com.google.common.collect.MapDifference.left] of Argument[-1];SyntheticField[com.google.common.collect.MapDifference.left] of MapValue of ReturnValue;value" + Map out = null; + MapDifference in = (MapDifference)newWithMapDifference_left(newWithMapValue(source())); + out = in.entriesDiffering(); + sink(getMapDifference_left(getMapValue(out))); // $ hasValueFlow + } + { + // "com.google.common.collect;MapDifference;true;entriesDiffering;();;MapValue of SyntheticField[com.google.common.collect.MapDifference.right] of Argument[-1];SyntheticField[com.google.common.collect.MapDifference.right] of MapValue of ReturnValue;value" + SortedMap out = null; + SortedMapDifference in = (SortedMapDifference)newWithMapDifference_right(newWithMapValue(source())); + out = in.entriesDiffering(); + sink(getMapDifference_right(getMapValue(out))); // $ hasValueFlow + } + { + // "com.google.common.collect;MapDifference;true;entriesDiffering;();;MapValue of SyntheticField[com.google.common.collect.MapDifference.right] of Argument[-1];SyntheticField[com.google.common.collect.MapDifference.right] of MapValue of ReturnValue;value" + Map out = null; + MapDifference in = (MapDifference)newWithMapDifference_right(newWithMapValue(source())); + out = in.entriesDiffering(); + sink(getMapDifference_right(getMapValue(out))); // $ hasValueFlow + } + { + // "com.google.common.collect;MapDifference;true;entriesInCommon;();;MapKey of SyntheticField[com.google.common.collect.MapDifference.left] of Argument[-1];MapKey of ReturnValue;value" + SortedMap out = null; + SortedMapDifference in = (SortedMapDifference)newWithMapDifference_left(newWithMapKey(source())); + out = in.entriesInCommon(); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;MapDifference;true;entriesInCommon;();;MapKey of SyntheticField[com.google.common.collect.MapDifference.left] of Argument[-1];MapKey of ReturnValue;value" + Map out = null; + MapDifference in = (MapDifference)newWithMapDifference_left(newWithMapKey(source())); + out = in.entriesInCommon(); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;MapDifference;true;entriesInCommon;();;MapKey of SyntheticField[com.google.common.collect.MapDifference.right] of Argument[-1];MapKey of ReturnValue;value" + SortedMap out = null; + SortedMapDifference in = (SortedMapDifference)newWithMapDifference_right(newWithMapKey(source())); + out = in.entriesInCommon(); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;MapDifference;true;entriesInCommon;();;MapKey of SyntheticField[com.google.common.collect.MapDifference.right] of Argument[-1];MapKey of ReturnValue;value" + Map out = null; + MapDifference in = (MapDifference)newWithMapDifference_right(newWithMapKey(source())); + out = in.entriesInCommon(); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;MapDifference;true;entriesInCommon;();;MapValue of SyntheticField[com.google.common.collect.MapDifference.left] of Argument[-1];MapValue of ReturnValue;value" + SortedMap out = null; + SortedMapDifference in = (SortedMapDifference)newWithMapDifference_left(newWithMapValue(source())); + out = in.entriesInCommon(); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;MapDifference;true;entriesInCommon;();;MapValue of SyntheticField[com.google.common.collect.MapDifference.left] of Argument[-1];MapValue of ReturnValue;value" + Map out = null; + MapDifference in = (MapDifference)newWithMapDifference_left(newWithMapValue(source())); + out = in.entriesInCommon(); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;MapDifference;true;entriesInCommon;();;MapValue of SyntheticField[com.google.common.collect.MapDifference.right] of Argument[-1];MapValue of ReturnValue;value" + SortedMap out = null; + SortedMapDifference in = (SortedMapDifference)newWithMapDifference_right(newWithMapValue(source())); + out = in.entriesInCommon(); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;MapDifference;true;entriesInCommon;();;MapValue of SyntheticField[com.google.common.collect.MapDifference.right] of Argument[-1];MapValue of ReturnValue;value" + Map out = null; + MapDifference in = (MapDifference)newWithMapDifference_right(newWithMapValue(source())); + out = in.entriesInCommon(); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;MapDifference;true;entriesOnlyOnLeft;();;MapKey of SyntheticField[com.google.common.collect.MapDifference.left] of Argument[-1];MapKey of ReturnValue;value" + SortedMap out = null; + SortedMapDifference in = (SortedMapDifference)newWithMapDifference_left(newWithMapKey(source())); + out = in.entriesOnlyOnLeft(); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;MapDifference;true;entriesOnlyOnLeft;();;MapKey of SyntheticField[com.google.common.collect.MapDifference.left] of Argument[-1];MapKey of ReturnValue;value" + Map out = null; + MapDifference in = (MapDifference)newWithMapDifference_left(newWithMapKey(source())); + out = in.entriesOnlyOnLeft(); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;MapDifference;true;entriesOnlyOnLeft;();;MapValue of SyntheticField[com.google.common.collect.MapDifference.left] of Argument[-1];MapValue of ReturnValue;value" + SortedMap out = null; + SortedMapDifference in = (SortedMapDifference)newWithMapDifference_left(newWithMapValue(source())); + out = in.entriesOnlyOnLeft(); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;MapDifference;true;entriesOnlyOnLeft;();;MapValue of SyntheticField[com.google.common.collect.MapDifference.left] of Argument[-1];MapValue of ReturnValue;value" + Map out = null; + MapDifference in = (MapDifference)newWithMapDifference_left(newWithMapValue(source())); + out = in.entriesOnlyOnLeft(); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;MapDifference;true;entriesOnlyOnRight;();;MapKey of SyntheticField[com.google.common.collect.MapDifference.right] of Argument[-1];MapKey of ReturnValue;value" + SortedMap out = null; + SortedMapDifference in = (SortedMapDifference)newWithMapDifference_right(newWithMapKey(source())); + out = in.entriesOnlyOnRight(); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;MapDifference;true;entriesOnlyOnRight;();;MapKey of SyntheticField[com.google.common.collect.MapDifference.right] of Argument[-1];MapKey of ReturnValue;value" + Map out = null; + MapDifference in = (MapDifference)newWithMapDifference_right(newWithMapKey(source())); + out = in.entriesOnlyOnRight(); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;MapDifference;true;entriesOnlyOnRight;();;MapValue of SyntheticField[com.google.common.collect.MapDifference.right] of Argument[-1];MapValue of ReturnValue;value" + SortedMap out = null; + SortedMapDifference in = (SortedMapDifference)newWithMapDifference_right(newWithMapValue(source())); + out = in.entriesOnlyOnRight(); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;MapDifference;true;entriesOnlyOnRight;();;MapValue of SyntheticField[com.google.common.collect.MapDifference.right] of Argument[-1];MapValue of ReturnValue;value" + Map out = null; + MapDifference in = (MapDifference)newWithMapDifference_right(newWithMapValue(source())); + out = in.entriesOnlyOnRight(); + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;asMap;(NavigableSet,Function);;Element of Argument[0];MapKey of ReturnValue;value" NavigableMap out = null; NavigableSet in = (NavigableSet)newWithElement(source()); out = Maps.asMap(in, (Function)null); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;asMap;(Set,Function);;Element of Argument[0];MapKey of ReturnValue;value" Map out = null; Set in = (Set)newWithElement(source()); out = Maps.asMap(in, (Function)null); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;asMap;(SortedSet,Function);;Element of Argument[0];MapKey of ReturnValue;value" SortedMap out = null; SortedSet in = (SortedSet)newWithElement(source()); out = Maps.asMap(in, (Function)null); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;Maps;false;difference;(Map,Map);;MapKey of Argument[0];MapKey of SyntheticField[com.google.common.collect.MapDifference.left] of ReturnValue;value" + MapDifference out = null; + Map in = (Map)newWithMapKey(source()); + out = Maps.difference(in, (Map)null); + sink(getMapKey(getMapDifference_left(out))); // $ hasValueFlow + } + { + // "com.google.common.collect;Maps;false;difference;(Map,Map);;MapKey of Argument[1];MapKey of SyntheticField[com.google.common.collect.MapDifference.right] of ReturnValue;value" + MapDifference out = null; + Map in = (Map)newWithMapKey(source()); + out = Maps.difference((Map)null, in); + sink(getMapKey(getMapDifference_right(out))); // $ hasValueFlow + } + { + // "com.google.common.collect;Maps;false;difference;(Map,Map);;MapValue of Argument[0];MapValue of SyntheticField[com.google.common.collect.MapDifference.left] of ReturnValue;value" + MapDifference out = null; + Map in = (Map)newWithMapValue(source()); + out = Maps.difference(in, (Map)null); + sink(getMapValue(getMapDifference_left(out))); // $ hasValueFlow + } + { + // "com.google.common.collect;Maps;false;difference;(Map,Map);;MapValue of Argument[1];MapValue of SyntheticField[com.google.common.collect.MapDifference.right] of ReturnValue;value" + MapDifference out = null; + Map in = (Map)newWithMapValue(source()); + out = Maps.difference((Map)null, in); + sink(getMapValue(getMapDifference_right(out))); // $ hasValueFlow + } + { + // "com.google.common.collect;Maps;false;difference;(Map,Map,Equivalence);;MapKey of Argument[0];MapKey of SyntheticField[com.google.common.collect.MapDifference.left] of ReturnValue;value" + MapDifference out = null; + Map in = (Map)newWithMapKey(source()); + out = Maps.difference(in, null, null); + sink(getMapKey(getMapDifference_left(out))); // $ hasValueFlow + } + { + // "com.google.common.collect;Maps;false;difference;(Map,Map,Equivalence);;MapKey of Argument[1];MapKey of SyntheticField[com.google.common.collect.MapDifference.right] of ReturnValue;value" + MapDifference out = null; + Map in = (Map)newWithMapKey(source()); + out = Maps.difference(null, in, null); + sink(getMapKey(getMapDifference_right(out))); // $ hasValueFlow + } + { + // "com.google.common.collect;Maps;false;difference;(Map,Map,Equivalence);;MapValue of Argument[0];MapValue of SyntheticField[com.google.common.collect.MapDifference.left] of ReturnValue;value" + MapDifference out = null; + Map in = (Map)newWithMapValue(source()); + out = Maps.difference(in, null, null); + sink(getMapValue(getMapDifference_left(out))); // $ hasValueFlow + } + { + // "com.google.common.collect;Maps;false;difference;(Map,Map,Equivalence);;MapValue of Argument[1];MapValue of SyntheticField[com.google.common.collect.MapDifference.right] of ReturnValue;value" + MapDifference out = null; + Map in = (Map)newWithMapValue(source()); + out = Maps.difference(null, in, null); + sink(getMapValue(getMapDifference_right(out))); // $ hasValueFlow + } + { + // "com.google.common.collect;Maps;false;difference;(SortedMap,Map);;MapKey of Argument[0];MapKey of SyntheticField[com.google.common.collect.MapDifference.left] of ReturnValue;value" + SortedMapDifference out = null; + SortedMap in = (SortedMap)newWithMapKey(source()); + out = Maps.difference(in, (Map)null); + sink(getMapKey(getMapDifference_left(out))); // $ hasValueFlow + } + { + // "com.google.common.collect;Maps;false;difference;(SortedMap,Map);;MapKey of Argument[1];MapKey of SyntheticField[com.google.common.collect.MapDifference.right] of ReturnValue;value" + SortedMapDifference out = null; + Map in = (Map)newWithMapKey(source()); + out = Maps.difference((SortedMap)null, in); + sink(getMapKey(getMapDifference_right(out))); // $ hasValueFlow + } + { + // "com.google.common.collect;Maps;false;difference;(SortedMap,Map);;MapValue of Argument[0];MapValue of SyntheticField[com.google.common.collect.MapDifference.left] of ReturnValue;value" + SortedMapDifference out = null; + SortedMap in = (SortedMap)newWithMapValue(source()); + out = Maps.difference(in, (Map)null); + sink(getMapValue(getMapDifference_left(out))); // $ hasValueFlow + } + { + // "com.google.common.collect;Maps;false;difference;(SortedMap,Map);;MapValue of Argument[1];MapValue of SyntheticField[com.google.common.collect.MapDifference.right] of ReturnValue;value" + SortedMapDifference out = null; + Map in = (Map)newWithMapValue(source()); + out = Maps.difference((SortedMap)null, in); + sink(getMapValue(getMapDifference_right(out))); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;filterEntries;(BiMap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value" BiMap out = null; BiMap in = (BiMap)newWithMapKey(source()); out = Maps.filterEntries(in, (Predicate)null); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;filterEntries;(BiMap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value" BiMap out = null; BiMap in = (BiMap)newWithMapValue(source()); out = Maps.filterEntries(in, (Predicate)null); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;filterEntries;(Map,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value" Map out = null; Map in = (Map)newWithMapKey(source()); out = Maps.filterEntries(in, (Predicate)null); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;filterEntries;(Map,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value" Map out = null; Map in = (Map)newWithMapValue(source()); out = Maps.filterEntries(in, (Predicate)null); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;filterEntries;(NavigableMap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value" NavigableMap out = null; NavigableMap in = (NavigableMap)newWithMapKey(source()); out = Maps.filterEntries(in, (Predicate)null); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;filterEntries;(NavigableMap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value" NavigableMap out = null; NavigableMap in = (NavigableMap)newWithMapValue(source()); out = Maps.filterEntries(in, (Predicate)null); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;filterEntries;(SortedMap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value" SortedMap out = null; SortedMap in = (SortedMap)newWithMapKey(source()); out = Maps.filterEntries(in, (Predicate)null); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;filterEntries;(SortedMap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value" SortedMap out = null; SortedMap in = (SortedMap)newWithMapValue(source()); out = Maps.filterEntries(in, (Predicate)null); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;filterKeys;(BiMap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value" BiMap out = null; BiMap in = (BiMap)newWithMapKey(source()); out = Maps.filterKeys(in, (Predicate)null); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;filterKeys;(BiMap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value" BiMap out = null; BiMap in = (BiMap)newWithMapValue(source()); out = Maps.filterKeys(in, (Predicate)null); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;filterKeys;(Map,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value" Map out = null; Map in = (Map)newWithMapKey(source()); out = Maps.filterKeys(in, (Predicate)null); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;filterKeys;(Map,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value" Map out = null; Map in = (Map)newWithMapValue(source()); out = Maps.filterKeys(in, (Predicate)null); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;filterKeys;(NavigableMap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value" NavigableMap out = null; NavigableMap in = (NavigableMap)newWithMapKey(source()); out = Maps.filterKeys(in, (Predicate)null); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;filterKeys;(NavigableMap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value" NavigableMap out = null; NavigableMap in = (NavigableMap)newWithMapValue(source()); out = Maps.filterKeys(in, (Predicate)null); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;filterKeys;(SortedMap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value" SortedMap out = null; SortedMap in = (SortedMap)newWithMapKey(source()); out = Maps.filterKeys(in, (Predicate)null); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;filterKeys;(SortedMap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value" SortedMap out = null; SortedMap in = (SortedMap)newWithMapValue(source()); out = Maps.filterKeys(in, (Predicate)null); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;filterValues;(BiMap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value" BiMap out = null; BiMap in = (BiMap)newWithMapKey(source()); out = Maps.filterValues(in, (Predicate)null); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;filterValues;(BiMap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value" BiMap out = null; BiMap in = (BiMap)newWithMapValue(source()); out = Maps.filterValues(in, (Predicate)null); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;filterValues;(Map,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value" Map out = null; Map in = (Map)newWithMapKey(source()); out = Maps.filterValues(in, (Predicate)null); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;filterValues;(Map,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value" Map out = null; Map in = (Map)newWithMapValue(source()); out = Maps.filterValues(in, (Predicate)null); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;filterValues;(NavigableMap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value" NavigableMap out = null; NavigableMap in = (NavigableMap)newWithMapKey(source()); out = Maps.filterValues(in, (Predicate)null); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;filterValues;(NavigableMap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value" NavigableMap out = null; NavigableMap in = (NavigableMap)newWithMapValue(source()); out = Maps.filterValues(in, (Predicate)null); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;filterValues;(SortedMap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value" SortedMap out = null; SortedMap in = (SortedMap)newWithMapKey(source()); out = Maps.filterValues(in, (Predicate)null); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;filterValues;(SortedMap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value" SortedMap out = null; SortedMap in = (SortedMap)newWithMapValue(source()); out = Maps.filterValues(in, (Predicate)null); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;fromProperties;(Properties);;MapKey of Argument[0];MapKey of ReturnValue;value" ImmutableMap out = null; Properties in = (Properties)newWithMapKey(source()); out = Maps.fromProperties(in); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;fromProperties;(Properties);;MapValue of Argument[0];MapValue of ReturnValue;value" ImmutableMap out = null; Properties in = (Properties)newWithMapValue(source()); out = Maps.fromProperties(in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;immutableEntry;(Object,Object);;Argument[0];MapKey of ReturnValue;value" Map.Entry out = null; Object in = (Object)source(); out = Maps.immutableEntry(in, null); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;immutableEntry;(Object,Object);;Argument[1];MapValue of ReturnValue;value" Map.Entry out = null; Object in = (Object)source(); out = Maps.immutableEntry(null, in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;newHashMap;(Map);;MapKey of Argument[0];MapKey of ReturnValue;value" HashMap out = null; Map in = (Map)newWithMapKey(source()); out = Maps.newHashMap(in); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;newHashMap;(Map);;MapValue of Argument[0];MapValue of ReturnValue;value" HashMap out = null; Map in = (Map)newWithMapValue(source()); out = Maps.newHashMap(in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;newLinkedHashMap;(Map);;MapKey of Argument[0];MapKey of ReturnValue;value" LinkedHashMap out = null; Map in = (Map)newWithMapKey(source()); out = Maps.newLinkedHashMap(in); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;newLinkedHashMap;(Map);;MapValue of Argument[0];MapValue of ReturnValue;value" LinkedHashMap out = null; Map in = (Map)newWithMapValue(source()); out = Maps.newLinkedHashMap(in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;newTreeMap;(SortedMap);;MapKey of Argument[0];MapKey of ReturnValue;value" TreeMap out = null; SortedMap in = (SortedMap)newWithMapKey(source()); out = Maps.newTreeMap(in); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;newTreeMap;(SortedMap);;MapValue of Argument[0];MapValue of ReturnValue;value" TreeMap out = null; SortedMap in = (SortedMap)newWithMapValue(source()); out = Maps.newTreeMap(in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;subMap;(NavigableMap,Range);;MapKey of Argument[0];MapKey of ReturnValue;value" NavigableMap out = null; NavigableMap in = (NavigableMap)newWithMapKey(source()); out = Maps.subMap(in, null); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;subMap;(NavigableMap,Range);;MapValue of Argument[0];MapValue of ReturnValue;value" NavigableMap out = null; NavigableMap in = (NavigableMap)newWithMapValue(source()); out = Maps.subMap(in, null); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;synchronizedBiMap;(BiMap);;MapKey of Argument[0];MapKey of ReturnValue;value" BiMap out = null; BiMap in = (BiMap)newWithMapKey(source()); out = Maps.synchronizedBiMap(in); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;synchronizedBiMap;(BiMap);;MapValue of Argument[0];MapValue of ReturnValue;value" BiMap out = null; BiMap in = (BiMap)newWithMapValue(source()); out = Maps.synchronizedBiMap(in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;synchronizedNavigableMap;(NavigableMap);;MapKey of Argument[0];MapKey of ReturnValue;value" NavigableMap out = null; NavigableMap in = (NavigableMap)newWithMapKey(source()); out = Maps.synchronizedNavigableMap(in); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;synchronizedNavigableMap;(NavigableMap);;MapValue of Argument[0];MapValue of ReturnValue;value" NavigableMap out = null; NavigableMap in = (NavigableMap)newWithMapValue(source()); out = Maps.synchronizedNavigableMap(in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;toMap;(Iterable,Function);;Element of Argument[0];MapKey of ReturnValue;value" ImmutableMap out = null; Iterable in = (Iterable)newWithElement(source()); out = Maps.toMap(in, (Function)null); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;toMap;(Iterator,Function);;Element of Argument[0];MapKey of ReturnValue;value" ImmutableMap out = null; Iterator in = (Iterator)newWithElement(source()); out = Maps.toMap(in, (Function)null); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;transformValues;(Map,Function);;MapKey of Argument[0];MapKey of ReturnValue;value" Map out = null; Map in = (Map)newWithMapKey(source()); out = Maps.transformValues(in, (Function)null); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;transformValues;(NavigableMap,Function);;MapKey of Argument[0];MapKey of ReturnValue;value" NavigableMap out = null; NavigableMap in = (NavigableMap)newWithMapKey(source()); out = Maps.transformValues(in, (Function)null); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;transformValues;(SortedMap,Function);;MapKey of Argument[0];MapKey of ReturnValue;value" SortedMap out = null; SortedMap in = (SortedMap)newWithMapKey(source()); out = Maps.transformValues(in, (Function)null); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;uniqueIndex;(Iterable,Function);;Element of Argument[0];MapValue of ReturnValue;value" ImmutableMap out = null; Iterable in = (Iterable)newWithElement(source()); out = Maps.uniqueIndex(in, (Function)null); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;uniqueIndex;(Iterator,Function);;Element of Argument[0];MapValue of ReturnValue;value" ImmutableMap out = null; Iterator in = (Iterator)newWithElement(source()); out = Maps.uniqueIndex(in, (Function)null); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;unmodifiableBiMap;(BiMap);;MapKey of Argument[0];MapKey of ReturnValue;value" BiMap out = null; BiMap in = (BiMap)newWithMapKey(source()); out = Maps.unmodifiableBiMap(in); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;unmodifiableBiMap;(BiMap);;MapValue of Argument[0];MapValue of ReturnValue;value" BiMap out = null; BiMap in = (BiMap)newWithMapValue(source()); out = Maps.unmodifiableBiMap(in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;unmodifiableNavigableMap;(NavigableMap);;MapKey of Argument[0];MapKey of ReturnValue;value" NavigableMap out = null; NavigableMap in = (NavigableMap)newWithMapKey(source()); out = Maps.unmodifiableNavigableMap(in); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;unmodifiableNavigableMap;(NavigableMap);;MapValue of Argument[0];MapValue of ReturnValue;value" NavigableMap out = null; NavigableMap in = (NavigableMap)newWithMapValue(source()); out = Maps.unmodifiableNavigableMap(in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;asMap;();;MapKey of Argument[-1];MapKey of ReturnValue;value" NavigableMap out = null; TreeMultimap in = (TreeMultimap)newWithMapKey(source()); out = in.asMap(); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;asMap;();;MapKey of Argument[-1];MapKey of ReturnValue;value" Map out = null; SortedSetMultimap in = (SortedSetMultimap)newWithMapKey(source()); out = in.asMap(); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;asMap;();;MapKey of Argument[-1];MapKey of ReturnValue;value" Map out = null; SetMultimap in = (SetMultimap)newWithMapKey(source()); out = in.asMap(); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;asMap;();;MapKey of Argument[-1];MapKey of ReturnValue;value" Map out = null; Multimap in = (Multimap)newWithMapKey(source()); out = in.asMap(); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;asMap;();;MapKey of Argument[-1];MapKey of ReturnValue;value" Map out = null; ListMultimap in = (ListMultimap)newWithMapKey(source()); out = in.asMap(); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;asMap;();;MapKey of Argument[-1];MapKey of ReturnValue;value" ImmutableMap out = null; ImmutableMultimap in = (ImmutableMultimap)newWithMapKey(source()); out = in.asMap(); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;asMap;();;MapValue of Argument[-1];Element of MapValue of ReturnValue;value" NavigableMap out = null; TreeMultimap in = (TreeMultimap)newWithMapValue(source()); out = in.asMap(); - sink(getElement(getMapValue(out))); // $hasValueFlow + sink(getElement(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;asMap;();;MapValue of Argument[-1];Element of MapValue of ReturnValue;value" Map out = null; SortedSetMultimap in = (SortedSetMultimap)newWithMapValue(source()); out = in.asMap(); - sink(getElement(getMapValue(out))); // $hasValueFlow + sink(getElement(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;asMap;();;MapValue of Argument[-1];Element of MapValue of ReturnValue;value" Map out = null; SetMultimap in = (SetMultimap)newWithMapValue(source()); out = in.asMap(); - sink(getElement(getMapValue(out))); // $hasValueFlow + sink(getElement(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;asMap;();;MapValue of Argument[-1];Element of MapValue of ReturnValue;value" Map out = null; Multimap in = (Multimap)newWithMapValue(source()); out = in.asMap(); - sink(getElement(getMapValue(out))); // $hasValueFlow + sink(getElement(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;asMap;();;MapValue of Argument[-1];Element of MapValue of ReturnValue;value" Map out = null; ListMultimap in = (ListMultimap)newWithMapValue(source()); out = in.asMap(); - sink(getElement(getMapValue(out))); // $hasValueFlow + sink(getElement(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;asMap;();;MapValue of Argument[-1];Element of MapValue of ReturnValue;value" ImmutableMap out = null; ImmutableMultimap in = (ImmutableMultimap)newWithMapValue(source()); out = in.asMap(); - sink(getElement(getMapValue(out))); // $hasValueFlow + sink(getElement(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;entries;();;MapKey of Argument[-1];MapKey of Element of ReturnValue;value" Set out = null; SetMultimap in = (SetMultimap)newWithMapKey(source()); out = in.entries(); - sink(getMapKey(getElement(out))); // $hasValueFlow + sink(getMapKey(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;entries;();;MapKey of Argument[-1];MapKey of Element of ReturnValue;value" Set out = null; LinkedHashMultimap in = (LinkedHashMultimap)newWithMapKey(source()); out = in.entries(); - sink(getMapKey(getElement(out))); // $hasValueFlow + sink(getMapKey(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;entries;();;MapKey of Argument[-1];MapKey of Element of ReturnValue;value" List out = null; LinkedListMultimap in = (LinkedListMultimap)newWithMapKey(source()); out = in.entries(); - sink(getMapKey(getElement(out))); // $hasValueFlow + sink(getMapKey(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;entries;();;MapKey of Argument[-1];MapKey of Element of ReturnValue;value" ImmutableSet out = null; ImmutableSetMultimap in = (ImmutableSetMultimap)newWithMapKey(source()); out = in.entries(); - sink(getMapKey(getElement(out))); // $hasValueFlow + sink(getMapKey(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;entries;();;MapKey of Argument[-1];MapKey of Element of ReturnValue;value" ImmutableCollection out = null; ImmutableMultimap in = (ImmutableMultimap)newWithMapKey(source()); out = in.entries(); - sink(getMapKey(getElement(out))); // $hasValueFlow + sink(getMapKey(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;entries;();;MapKey of Argument[-1];MapKey of Element of ReturnValue;value" Collection out = null; Multimap in = (Multimap)newWithMapKey(source()); out = in.entries(); - sink(getMapKey(getElement(out))); // $hasValueFlow + sink(getMapKey(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;entries;();;MapValue of Argument[-1];MapValue of Element of ReturnValue;value" Set out = null; SetMultimap in = (SetMultimap)newWithMapValue(source()); out = in.entries(); - sink(getMapValue(getElement(out))); // $hasValueFlow + sink(getMapValue(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;entries;();;MapValue of Argument[-1];MapValue of Element of ReturnValue;value" Set out = null; LinkedHashMultimap in = (LinkedHashMultimap)newWithMapValue(source()); out = in.entries(); - sink(getMapValue(getElement(out))); // $hasValueFlow + sink(getMapValue(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;entries;();;MapValue of Argument[-1];MapValue of Element of ReturnValue;value" List out = null; LinkedListMultimap in = (LinkedListMultimap)newWithMapValue(source()); out = in.entries(); - sink(getMapValue(getElement(out))); // $hasValueFlow + sink(getMapValue(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;entries;();;MapValue of Argument[-1];MapValue of Element of ReturnValue;value" ImmutableSet out = null; ImmutableSetMultimap in = (ImmutableSetMultimap)newWithMapValue(source()); out = in.entries(); - sink(getMapValue(getElement(out))); // $hasValueFlow + sink(getMapValue(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;entries;();;MapValue of Argument[-1];MapValue of Element of ReturnValue;value" ImmutableCollection out = null; ImmutableMultimap in = (ImmutableMultimap)newWithMapValue(source()); out = in.entries(); - sink(getMapValue(getElement(out))); // $hasValueFlow + sink(getMapValue(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;entries;();;MapValue of Argument[-1];MapValue of Element of ReturnValue;value" Collection out = null; Multimap in = (Multimap)newWithMapValue(source()); out = in.entries(); - sink(getMapValue(getElement(out))); // $hasValueFlow + sink(getMapValue(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;get;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" SortedSet out = null; SortedSetMultimap in = (SortedSetMultimap)newWithMapValue(source()); out = in.get(null); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Multimap;true;get;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" - SortedSet out = null; - SortedSetMultimap in = (SortedSetMultimap)newWithMapValue(source()); - out = in.get((Object)null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;get;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" Set out = null; SetMultimap in = (SetMultimap)newWithMapValue(source()); out = in.get(null); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Multimap;true;get;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" - Set out = null; - SetMultimap in = (SetMultimap)newWithMapValue(source()); - out = in.get((Object)null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;get;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" NavigableSet out = null; TreeMultimap in = (TreeMultimap)newWithMapValue(source()); out = in.get(null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;get;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" List out = null; ListMultimap in = (ListMultimap)newWithMapValue(source()); out = in.get(null); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Multimap;true;get;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" - List out = null; - ListMultimap in = (ListMultimap)newWithMapValue(source()); - out = in.get((Object)null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;get;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" List out = null; LinkedListMultimap in = (LinkedListMultimap)newWithMapValue(source()); out = in.get(null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;get;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" ImmutableSet out = null; ImmutableSetMultimap in = (ImmutableSetMultimap)newWithMapValue(source()); out = in.get(null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;get;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" ImmutableList out = null; ImmutableListMultimap in = (ImmutableListMultimap)newWithMapValue(source()); out = in.get(null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;get;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" ImmutableCollection out = null; ImmutableMultimap in = (ImmutableMultimap)newWithMapValue(source()); out = in.get(null); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Multimap;true;get;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" - ImmutableCollection out = null; - ImmutableMultimap in = (ImmutableMultimap)newWithMapValue(source()); - out = in.get((Object)null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;get;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" Collection out = null; Multimap in = (Multimap)newWithMapValue(source()); out = in.get(null); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Multimap;true;get;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" - Collection out = null; - Multimap in = (Multimap)newWithMapValue(source()); - out = in.get((Object)null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;keySet;();;MapKey of Argument[-1];Element of ReturnValue;value" Set out = null; Multimap in = (Multimap)newWithMapKey(source()); out = in.keySet(); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;keySet;();;MapKey of Argument[-1];Element of ReturnValue;value" Set out = null; LinkedHashMultimap in = (LinkedHashMultimap)newWithMapKey(source()); out = in.keySet(); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;keySet;();;MapKey of Argument[-1];Element of ReturnValue;value" NavigableSet out = null; TreeMultimap in = (TreeMultimap)newWithMapKey(source()); out = in.keySet(); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;keySet;();;MapKey of Argument[-1];Element of ReturnValue;value" ImmutableSet out = null; ImmutableMultimap in = (ImmutableMultimap)newWithMapKey(source()); out = in.keySet(); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;keys;();;MapKey of Argument[-1];Element of ReturnValue;value" Multiset out = null; Multimap in = (Multimap)newWithMapKey(source()); out = in.keys(); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;keys;();;MapKey of Argument[-1];Element of ReturnValue;value" ImmutableMultiset out = null; ImmutableMultimap in = (ImmutableMultimap)newWithMapKey(source()); out = in.keys(); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;put;(Object,Object);;Argument[0];MapKey of Argument[-1];value" Multimap out = null; Object in = (Object)source(); out.put(in, null); - sink(getMapKey(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Multimap;true;put;(Object,Object);;Argument[0];MapKey of Argument[-1];value" - Multimap out = null; - Object in = (Object)source(); - out.put(in, (Object)null); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;put;(Object,Object);;Argument[0];MapKey of Argument[-1];value" LinkedListMultimap out = null; Object in = (Object)source(); out.put(in, null); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;put;(Object,Object);;Argument[0];MapKey of Argument[-1];value" ImmutableMultimap out = null; Object in = (Object)source(); out.put(in, null); - sink(getMapKey(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Multimap;true;put;(Object,Object);;Argument[0];MapKey of Argument[-1];value" - ImmutableMultimap out = null; - Object in = (Object)source(); - out.put(in, (Object)null); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;put;(Object,Object);;Argument[1];MapValue of Argument[-1];value" Multimap out = null; Object in = (Object)source(); out.put(null, in); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Multimap;true;put;(Object,Object);;Argument[1];MapValue of Argument[-1];value" - Multimap out = null; - Object in = (Object)source(); - out.put((Object)null, in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;put;(Object,Object);;Argument[1];MapValue of Argument[-1];value" LinkedListMultimap out = null; Object in = (Object)source(); out.put(null, in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;put;(Object,Object);;Argument[1];MapValue of Argument[-1];value" ImmutableMultimap out = null; Object in = (Object)source(); out.put(null, in); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Multimap;true;put;(Object,Object);;Argument[1];MapValue of Argument[-1];value" - ImmutableMultimap out = null; - Object in = (Object)source(); - out.put((Object)null, in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;putAll;(Multimap);;MapKey of Argument[0];MapKey of Argument[-1];value" Multimap out = null; Multimap in = (Multimap)newWithMapKey(source()); out.putAll(in); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;putAll;(Multimap);;MapKey of Argument[0];MapKey of Argument[-1];value" ImmutableMultimap out = null; Multimap in = (Multimap)newWithMapKey(source()); out.putAll(in); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;putAll;(Multimap);;MapValue of Argument[0];MapValue of Argument[-1];value" Multimap out = null; Multimap in = (Multimap)newWithMapValue(source()); out.putAll(in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;putAll;(Multimap);;MapValue of Argument[0];MapValue of Argument[-1];value" ImmutableMultimap out = null; Multimap in = (Multimap)newWithMapValue(source()); out.putAll(in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;putAll;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" Multimap out = null; Object in = (Object)source(); out.putAll(in, null); - sink(getMapKey(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Multimap;true;putAll;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" - Multimap out = null; - Object in = (Object)source(); - out.putAll(in, (Iterable)null); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;putAll;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" ImmutableMultimap out = null; Object in = (Object)source(); out.putAll(in, null); - sink(getMapKey(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Multimap;true;putAll;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" - ImmutableMultimap out = null; - Object in = (Object)source(); - out.putAll(in, (Iterable)null); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;putAll;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" Multimap out = null; Iterable in = (Iterable)newWithElement(source()); out.putAll(null, in); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Multimap;true;putAll;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" - Multimap out = null; - Iterable in = (Iterable)newWithElement(source()); - out.putAll((Object)null, in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;putAll;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" ImmutableMultimap out = null; Iterable in = (Iterable)newWithElement(source()); out.putAll(null, in); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Multimap;true;putAll;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" - ImmutableMultimap out = null; - Iterable in = (Iterable)newWithElement(source()); - out.putAll((Object)null, in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;removeAll;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" SortedSet out = null; SortedSetMultimap in = (SortedSetMultimap)newWithMapValue(source()); out = in.removeAll(null); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Multimap;true;removeAll;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" - SortedSet out = null; - SortedSetMultimap in = (SortedSetMultimap)newWithMapValue(source()); - out = in.removeAll((Object)null); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;removeAll;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" Set out = null; SetMultimap in = (SetMultimap)newWithMapValue(source()); out = in.removeAll(null); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Multimap;true;removeAll;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" - Set out = null; - SetMultimap in = (SetMultimap)newWithMapValue(source()); - out = in.removeAll((Object)null); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;removeAll;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" List out = null; ListMultimap in = (ListMultimap)newWithMapValue(source()); out = in.removeAll(null); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Multimap;true;removeAll;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" - List out = null; - ListMultimap in = (ListMultimap)newWithMapValue(source()); - out = in.removeAll((Object)null); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;removeAll;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" List out = null; LinkedListMultimap in = (LinkedListMultimap)newWithMapValue(source()); out = in.removeAll(null); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;removeAll;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" ImmutableSet out = null; ImmutableSetMultimap in = (ImmutableSetMultimap)newWithMapValue(source()); out = in.removeAll(null); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;removeAll;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" ImmutableList out = null; ImmutableListMultimap in = (ImmutableListMultimap)newWithMapValue(source()); out = in.removeAll(null); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;removeAll;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" ImmutableCollection out = null; ImmutableMultimap in = (ImmutableMultimap)newWithMapValue(source()); out = in.removeAll(null); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Multimap;true;removeAll;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" - ImmutableCollection out = null; - ImmutableMultimap in = (ImmutableMultimap)newWithMapValue(source()); - out = in.removeAll((Object)null); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;removeAll;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" Collection out = null; Multimap in = (Multimap)newWithMapValue(source()); out = in.removeAll(null); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Multimap;true;removeAll;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" - Collection out = null; - Multimap in = (Multimap)newWithMapValue(source()); - out = in.removeAll((Object)null); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" SortedSetMultimap out = null; Object in = (Object)source(); out.replaceValues(in, null); - sink(getMapKey(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" - SortedSetMultimap out = null; - Object in = (Object)source(); - out.replaceValues(in, (Iterable)null); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" SetMultimap out = null; Object in = (Object)source(); out.replaceValues(in, null); - sink(getMapKey(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" - SetMultimap out = null; - Object in = (Object)source(); - out.replaceValues(in, (Iterable)null); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" Multimap out = null; Object in = (Object)source(); out.replaceValues(in, null); - sink(getMapKey(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" - Multimap out = null; - Object in = (Object)source(); - out.replaceValues(in, (Iterable)null); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" ListMultimap out = null; Object in = (Object)source(); out.replaceValues(in, null); - sink(getMapKey(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" - ListMultimap out = null; - Object in = (Object)source(); - out.replaceValues(in, (Iterable)null); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" LinkedListMultimap out = null; Object in = (Object)source(); out.replaceValues(in, null); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" LinkedHashMultimap out = null; Object in = (Object)source(); out.replaceValues(in, null); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" ImmutableSetMultimap out = null; Object in = (Object)source(); out.replaceValues(in, null); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" ImmutableMultimap out = null; Object in = (Object)source(); out.replaceValues(in, null); - sink(getMapKey(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" - ImmutableMultimap out = null; - Object in = (Object)source(); - out.replaceValues(in, (Iterable)null); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" ImmutableListMultimap out = null; Object in = (Object)source(); out.replaceValues(in, null); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" SortedSetMultimap out = null; Iterable in = (Iterable)newWithElement(source()); out.replaceValues(null, in); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" - SortedSetMultimap out = null; - Iterable in = (Iterable)newWithElement(source()); - out.replaceValues((Object)null, in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" SetMultimap out = null; Iterable in = (Iterable)newWithElement(source()); out.replaceValues(null, in); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" - SetMultimap out = null; - Iterable in = (Iterable)newWithElement(source()); - out.replaceValues((Object)null, in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" Multimap out = null; Iterable in = (Iterable)newWithElement(source()); out.replaceValues(null, in); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" - Multimap out = null; - Iterable in = (Iterable)newWithElement(source()); - out.replaceValues((Object)null, in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" ListMultimap out = null; Iterable in = (Iterable)newWithElement(source()); out.replaceValues(null, in); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" - ListMultimap out = null; - Iterable in = (Iterable)newWithElement(source()); - out.replaceValues((Object)null, in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" LinkedListMultimap out = null; Iterable in = (Iterable)newWithElement(source()); out.replaceValues(null, in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" LinkedHashMultimap out = null; Iterable in = (Iterable)newWithElement(source()); out.replaceValues(null, in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" ImmutableSetMultimap out = null; Iterable in = (Iterable)newWithElement(source()); out.replaceValues(null, in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" ImmutableMultimap out = null; Iterable in = (Iterable)newWithElement(source()); out.replaceValues(null, in); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" - ImmutableMultimap out = null; - Iterable in = (Iterable)newWithElement(source()); - out.replaceValues((Object)null, in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" ImmutableListMultimap out = null; Iterable in = (Iterable)newWithElement(source()); out.replaceValues(null, in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;MapValue of Argument[-1];Element of ReturnValue;value" SortedSet out = null; SortedSetMultimap in = (SortedSetMultimap)newWithMapValue(source()); out = in.replaceValues(null, null); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;MapValue of Argument[-1];Element of ReturnValue;value" - SortedSet out = null; - SortedSetMultimap in = (SortedSetMultimap)newWithMapValue(source()); - out = in.replaceValues((Object)null, (Iterable)null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;MapValue of Argument[-1];Element of ReturnValue;value" Set out = null; SetMultimap in = (SetMultimap)newWithMapValue(source()); out = in.replaceValues(null, null); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;MapValue of Argument[-1];Element of ReturnValue;value" - Set out = null; - SetMultimap in = (SetMultimap)newWithMapValue(source()); - out = in.replaceValues((Object)null, (Iterable)null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;MapValue of Argument[-1];Element of ReturnValue;value" Set out = null; LinkedHashMultimap in = (LinkedHashMultimap)newWithMapValue(source()); out = in.replaceValues(null, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;MapValue of Argument[-1];Element of ReturnValue;value" List out = null; ListMultimap in = (ListMultimap)newWithMapValue(source()); out = in.replaceValues(null, null); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;MapValue of Argument[-1];Element of ReturnValue;value" - List out = null; - ListMultimap in = (ListMultimap)newWithMapValue(source()); - out = in.replaceValues((Object)null, (Iterable)null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;MapValue of Argument[-1];Element of ReturnValue;value" List out = null; LinkedListMultimap in = (LinkedListMultimap)newWithMapValue(source()); out = in.replaceValues(null, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;MapValue of Argument[-1];Element of ReturnValue;value" ImmutableSet out = null; ImmutableSetMultimap in = (ImmutableSetMultimap)newWithMapValue(source()); out = in.replaceValues(null, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;MapValue of Argument[-1];Element of ReturnValue;value" ImmutableList out = null; ImmutableListMultimap in = (ImmutableListMultimap)newWithMapValue(source()); out = in.replaceValues(null, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;MapValue of Argument[-1];Element of ReturnValue;value" ImmutableCollection out = null; ImmutableMultimap in = (ImmutableMultimap)newWithMapValue(source()); out = in.replaceValues(null, null); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;MapValue of Argument[-1];Element of ReturnValue;value" - ImmutableCollection out = null; - ImmutableMultimap in = (ImmutableMultimap)newWithMapValue(source()); - out = in.replaceValues((Object)null, (Iterable)null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;MapValue of Argument[-1];Element of ReturnValue;value" Collection out = null; Multimap in = (Multimap)newWithMapValue(source()); out = in.replaceValues(null, null); - sink(getElement(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;MapValue of Argument[-1];Element of ReturnValue;value" - Collection out = null; - Multimap in = (Multimap)newWithMapValue(source()); - out = in.replaceValues((Object)null, (Iterable)null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;values;();;MapValue of Argument[-1];Element of ReturnValue;value" List out = null; LinkedListMultimap in = (LinkedListMultimap)newWithMapValue(source()); out = in.values(); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;values;();;MapValue of Argument[-1];Element of ReturnValue;value" ImmutableCollection out = null; ImmutableMultimap in = (ImmutableMultimap)newWithMapValue(source()); out = in.values(); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;values;();;MapValue of Argument[-1];Element of ReturnValue;value" Collection out = null; Multimap in = (Multimap)newWithMapValue(source()); out = in.values(); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;values;();;MapValue of Argument[-1];Element of ReturnValue;value" Collection out = null; LinkedHashMultimap in = (LinkedHashMultimap)newWithMapValue(source()); out = in.values(); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;asMap;(ListMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value" Map out = null; ListMultimap in = (ListMultimap)newWithMapKey(source()); out = Multimaps.asMap(in); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;asMap;(ListMultimap);;MapValue of Argument[0];Element of MapValue of ReturnValue;value" Map out = null; ListMultimap in = (ListMultimap)newWithMapValue(source()); out = Multimaps.asMap(in); - sink(getElement(getMapValue(out))); // $hasValueFlow + sink(getElement(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;asMap;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value" Map out = null; Multimap in = (Multimap)newWithMapKey(source()); out = Multimaps.asMap(in); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;asMap;(Multimap);;MapValue of Argument[0];Element of MapValue of ReturnValue;value" Map out = null; Multimap in = (Multimap)newWithMapValue(source()); out = Multimaps.asMap(in); - sink(getElement(getMapValue(out))); // $hasValueFlow + sink(getElement(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;asMap;(SetMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value" Map out = null; SetMultimap in = (SetMultimap)newWithMapKey(source()); out = Multimaps.asMap(in); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;asMap;(SetMultimap);;MapValue of Argument[0];Element of MapValue of ReturnValue;value" Map out = null; SetMultimap in = (SetMultimap)newWithMapValue(source()); out = Multimaps.asMap(in); - sink(getElement(getMapValue(out))); // $hasValueFlow + sink(getElement(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;asMap;(SortedSetMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value" Map out = null; SortedSetMultimap in = (SortedSetMultimap)newWithMapKey(source()); out = Multimaps.asMap(in); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;asMap;(SortedSetMultimap);;MapValue of Argument[0];Element of MapValue of ReturnValue;value" Map out = null; SortedSetMultimap in = (SortedSetMultimap)newWithMapValue(source()); out = Multimaps.asMap(in); - sink(getElement(getMapValue(out))); // $hasValueFlow + sink(getElement(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;filterEntries;(Multimap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value" Multimap out = null; Multimap in = (Multimap)newWithMapKey(source()); out = Multimaps.filterEntries(in, (Predicate)null); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;filterEntries;(Multimap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value" Multimap out = null; Multimap in = (Multimap)newWithMapValue(source()); out = Multimaps.filterEntries(in, (Predicate)null); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;filterEntries;(SetMultimap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value" SetMultimap out = null; SetMultimap in = (SetMultimap)newWithMapKey(source()); out = Multimaps.filterEntries(in, (Predicate)null); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;filterEntries;(SetMultimap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value" SetMultimap out = null; SetMultimap in = (SetMultimap)newWithMapValue(source()); out = Multimaps.filterEntries(in, (Predicate)null); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;filterKeys;(Multimap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value" Multimap out = null; Multimap in = (Multimap)newWithMapKey(source()); out = Multimaps.filterKeys(in, (Predicate)null); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;filterKeys;(Multimap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value" Multimap out = null; Multimap in = (Multimap)newWithMapValue(source()); out = Multimaps.filterKeys(in, (Predicate)null); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;filterKeys;(SetMultimap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value" SetMultimap out = null; SetMultimap in = (SetMultimap)newWithMapKey(source()); out = Multimaps.filterKeys(in, (Predicate)null); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;filterKeys;(SetMultimap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value" SetMultimap out = null; SetMultimap in = (SetMultimap)newWithMapValue(source()); out = Multimaps.filterKeys(in, (Predicate)null); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;filterValues;(Multimap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value" Multimap out = null; Multimap in = (Multimap)newWithMapKey(source()); out = Multimaps.filterValues(in, (Predicate)null); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;filterValues;(Multimap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value" Multimap out = null; Multimap in = (Multimap)newWithMapValue(source()); out = Multimaps.filterValues(in, (Predicate)null); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;filterValues;(SetMultimap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value" SetMultimap out = null; SetMultimap in = (SetMultimap)newWithMapKey(source()); out = Multimaps.filterValues(in, (Predicate)null); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;filterValues;(SetMultimap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value" SetMultimap out = null; SetMultimap in = (SetMultimap)newWithMapValue(source()); out = Multimaps.filterValues(in, (Predicate)null); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;forMap;(Map);;MapKey of Argument[0];MapKey of ReturnValue;value" SetMultimap out = null; Map in = (Map)newWithMapKey(source()); out = Multimaps.forMap(in); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;forMap;(Map);;MapValue of Argument[0];MapValue of ReturnValue;value" SetMultimap out = null; Map in = (Map)newWithMapValue(source()); out = Multimaps.forMap(in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;index;(Iterable,Function);;Element of Argument[0];MapValue of ReturnValue;value" ImmutableListMultimap out = null; Iterable in = (Iterable)newWithElement(source()); out = Multimaps.index(in, (Function)null); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;index;(Iterator,Function);;Element of Argument[0];MapValue of ReturnValue;value" ImmutableListMultimap out = null; Iterator in = (Iterator)newWithElement(source()); out = Multimaps.index(in, (Function)null); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;invertFrom;(Multimap,Multimap);;MapKey of Argument[0];MapValue of ReturnValue;value" Multimap out = null; Multimap in = (Multimap)newWithMapKey(source()); out = Multimaps.invertFrom(in, null); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;invertFrom;(Multimap,Multimap);;MapValue of Argument[0];MapKey of ReturnValue;value" Multimap out = null; Multimap in = (Multimap)newWithMapValue(source()); out = Multimaps.invertFrom(in, null); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;newListMultimap;(Map,Supplier);;Element of MapValue of Argument[0];MapValue of ReturnValue;value" ListMultimap out = null; Map in = (Map)newWithMapValue(newWithElement(source())); out = Multimaps.newListMultimap(in, null); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;newListMultimap;(Map,Supplier);;MapKey of Argument[0];MapKey of ReturnValue;value" ListMultimap out = null; Map in = (Map)newWithMapKey(source()); out = Multimaps.newListMultimap(in, null); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;newMultimap;(Map,Supplier);;Element of MapValue of Argument[0];MapValue of ReturnValue;value" Multimap out = null; Map in = (Map)newWithMapValue(newWithElement(source())); out = Multimaps.newMultimap(in, null); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;newMultimap;(Map,Supplier);;MapKey of Argument[0];MapKey of ReturnValue;value" Multimap out = null; Map in = (Map)newWithMapKey(source()); out = Multimaps.newMultimap(in, null); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;newSetMultimap;(Map,Supplier);;Element of MapValue of Argument[0];MapValue of ReturnValue;value" SetMultimap out = null; Map in = (Map)newWithMapValue(newWithElement(source())); out = Multimaps.newSetMultimap(in, null); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;newSetMultimap;(Map,Supplier);;MapKey of Argument[0];MapKey of ReturnValue;value" SetMultimap out = null; Map in = (Map)newWithMapKey(source()); out = Multimaps.newSetMultimap(in, null); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;newSortedSetMultimap;(Map,Supplier);;Element of MapValue of Argument[0];MapValue of ReturnValue;value" SortedSetMultimap out = null; Map in = (Map)newWithMapValue(newWithElement(source())); out = Multimaps.newSortedSetMultimap(in, null); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;newSortedSetMultimap;(Map,Supplier);;MapKey of Argument[0];MapKey of ReturnValue;value" SortedSetMultimap out = null; Map in = (Map)newWithMapKey(source()); out = Multimaps.newSortedSetMultimap(in, null); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;synchronizedListMultimap;(ListMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value" ListMultimap out = null; ListMultimap in = (ListMultimap)newWithMapKey(source()); out = Multimaps.synchronizedListMultimap(in); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;synchronizedListMultimap;(ListMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value" ListMultimap out = null; ListMultimap in = (ListMultimap)newWithMapValue(source()); out = Multimaps.synchronizedListMultimap(in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;synchronizedMultimap;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value" Multimap out = null; Multimap in = (Multimap)newWithMapKey(source()); out = Multimaps.synchronizedMultimap(in); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;synchronizedMultimap;(Multimap);;MapValue of Argument[0];MapValue of ReturnValue;value" Multimap out = null; Multimap in = (Multimap)newWithMapValue(source()); out = Multimaps.synchronizedMultimap(in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;synchronizedSetMultimap;(SetMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value" SetMultimap out = null; SetMultimap in = (SetMultimap)newWithMapKey(source()); out = Multimaps.synchronizedSetMultimap(in); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;synchronizedSetMultimap;(SetMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value" SetMultimap out = null; SetMultimap in = (SetMultimap)newWithMapValue(source()); out = Multimaps.synchronizedSetMultimap(in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;synchronizedSortedSetMultimap;(SortedSetMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value" SortedSetMultimap out = null; SortedSetMultimap in = (SortedSetMultimap)newWithMapKey(source()); out = Multimaps.synchronizedSortedSetMultimap(in); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;synchronizedSortedSetMultimap;(SortedSetMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value" SortedSetMultimap out = null; SortedSetMultimap in = (SortedSetMultimap)newWithMapValue(source()); out = Multimaps.synchronizedSortedSetMultimap(in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;transformValues;(ListMultimap,Function);;MapKey of Argument[0];MapKey of ReturnValue;value" ListMultimap out = null; ListMultimap in = (ListMultimap)newWithMapKey(source()); out = Multimaps.transformValues(in, (Function)null); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;transformValues;(Multimap,Function);;MapKey of Argument[0];MapKey of ReturnValue;value" Multimap out = null; Multimap in = (Multimap)newWithMapKey(source()); out = Multimaps.transformValues(in, (Function)null); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;unmodifiableListMultimap;(ImmutableListMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value" ListMultimap out = null; ImmutableListMultimap in = (ImmutableListMultimap)newWithMapKey(source()); out = Multimaps.unmodifiableListMultimap(in); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;unmodifiableListMultimap;(ImmutableListMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value" ListMultimap out = null; ImmutableListMultimap in = (ImmutableListMultimap)newWithMapValue(source()); out = Multimaps.unmodifiableListMultimap(in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;unmodifiableListMultimap;(ListMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value" ListMultimap out = null; ListMultimap in = (ListMultimap)newWithMapKey(source()); out = Multimaps.unmodifiableListMultimap(in); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;unmodifiableListMultimap;(ListMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value" ListMultimap out = null; ListMultimap in = (ListMultimap)newWithMapValue(source()); out = Multimaps.unmodifiableListMultimap(in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;unmodifiableMultimap;(ImmutableMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value" Multimap out = null; ImmutableMultimap in = (ImmutableMultimap)newWithMapKey(source()); out = Multimaps.unmodifiableMultimap(in); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;unmodifiableMultimap;(ImmutableMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value" Multimap out = null; ImmutableMultimap in = (ImmutableMultimap)newWithMapValue(source()); out = Multimaps.unmodifiableMultimap(in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;unmodifiableMultimap;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value" Multimap out = null; Multimap in = (Multimap)newWithMapKey(source()); out = Multimaps.unmodifiableMultimap(in); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;unmodifiableMultimap;(Multimap);;MapValue of Argument[0];MapValue of ReturnValue;value" Multimap out = null; Multimap in = (Multimap)newWithMapValue(source()); out = Multimaps.unmodifiableMultimap(in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;unmodifiableSetMultimap;(ImmutableSetMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value" SetMultimap out = null; ImmutableSetMultimap in = (ImmutableSetMultimap)newWithMapKey(source()); out = Multimaps.unmodifiableSetMultimap(in); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;unmodifiableSetMultimap;(ImmutableSetMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value" SetMultimap out = null; ImmutableSetMultimap in = (ImmutableSetMultimap)newWithMapValue(source()); out = Multimaps.unmodifiableSetMultimap(in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;unmodifiableSetMultimap;(SetMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value" SetMultimap out = null; SetMultimap in = (SetMultimap)newWithMapKey(source()); out = Multimaps.unmodifiableSetMultimap(in); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;unmodifiableSetMultimap;(SetMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value" SetMultimap out = null; SetMultimap in = (SetMultimap)newWithMapValue(source()); out = Multimaps.unmodifiableSetMultimap(in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;unmodifiableSortedSetMultimap;(SortedSetMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value" SortedSetMultimap out = null; SortedSetMultimap in = (SortedSetMultimap)newWithMapKey(source()); out = Multimaps.unmodifiableSortedSetMultimap(in); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;unmodifiableSortedSetMultimap;(SortedSetMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value" SortedSetMultimap out = null; SortedSetMultimap in = (SortedSetMultimap)newWithMapValue(source()); out = Multimaps.unmodifiableSortedSetMultimap(in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multiset$Entry;true;getElement;();;Element of Argument[-1];ReturnValue;value" Object out = null; Multiset.Entry in = (Multiset.Entry)newWithElement(source()); out = in.getElement(); - sink(out); // $hasValueFlow + sink(out); // $ hasValueFlow } { // "com.google.common.collect;Multiset;true;add;(Object,int);;Argument[0];Element of Argument[-1];value" TreeMultiset out = null; Object in = (Object)source(); out.add(in, 0); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multiset;true;add;(Object,int);;Argument[0];Element of Argument[-1];value" Multiset out = null; Object in = (Object)source(); out.add(in, 0); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multiset;true;add;(Object,int);;Argument[0];Element of Argument[-1];value" ImmutableMultiset out = null; Object in = (Object)source(); out.add(in, 0); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multiset;true;add;(Object,int);;Argument[0];Element of Argument[-1];value" ConcurrentHashMultiset out = null; Object in = (Object)source(); out.add(in, 0); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multiset;true;elementSet;();;Element of Argument[-1];Element of ReturnValue;value" Set out = null; Multiset in = (Multiset)newWithElement(source()); out = in.elementSet(); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;Multiset;true;elementSet;();;Element of Argument[-1];Element of ReturnValue;value" + NavigableSet out = null; + SortedMultiset in = (SortedMultiset)newWithElement(source()); + out = in.elementSet(); + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multiset;true;elementSet;();;Element of Argument[-1];Element of ReturnValue;value" ImmutableSortedSet out = null; ImmutableSortedMultiset in = (ImmutableSortedMultiset)newWithElement(source()); out = in.elementSet(); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multiset;true;elementSet;();;Element of Argument[-1];Element of ReturnValue;value" ImmutableSet out = null; ImmutableMultiset in = (ImmutableMultiset)newWithElement(source()); out = in.elementSet(); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multiset;true;entrySet;();;Element of Argument[-1];Element of Element of ReturnValue;value" Set out = null; SortedMultiset in = (SortedMultiset)newWithElement(source()); out = in.entrySet(); - sink(getElement(getElement(out))); // $hasValueFlow + sink(getElement(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Multiset;true;entrySet;();;Element of Argument[-1];Element of Element of ReturnValue;value" Set out = null; Multiset in = (Multiset)newWithElement(source()); out = in.entrySet(); - sink(getElement(getElement(out))); // $hasValueFlow + sink(getElement(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Multiset;true;entrySet;();;Element of Argument[-1];Element of Element of ReturnValue;value" ImmutableSet out = null; ImmutableMultiset in = (ImmutableMultiset)newWithElement(source()); out = in.entrySet(); - sink(getElement(getElement(out))); // $hasValueFlow + sink(getElement(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Multiset;true;setCount;(Object,int);;Argument[0];Element of Argument[-1];value" TreeMultiset out = null; Object in = (Object)source(); out.setCount(in, 0); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multiset;true;setCount;(Object,int);;Argument[0];Element of Argument[-1];value" Multiset out = null; Object in = (Object)source(); out.setCount(in, 0); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multiset;true;setCount;(Object,int);;Argument[0];Element of Argument[-1];value" ImmutableMultiset out = null; Object in = (Object)source(); out.setCount(in, 0); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multiset;true;setCount;(Object,int);;Argument[0];Element of Argument[-1];value" ConcurrentHashMultiset out = null; Object in = (Object)source(); out.setCount(in, 0); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multiset;true;setCount;(Object,int,int);;Argument[0];Element of Argument[-1];value" TreeMultiset out = null; Object in = (Object)source(); out.setCount(in, 0, 0); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multiset;true;setCount;(Object,int,int);;Argument[0];Element of Argument[-1];value" Multiset out = null; Object in = (Object)source(); out.setCount(in, 0, 0); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multiset;true;setCount;(Object,int,int);;Argument[0];Element of Argument[-1];value" ImmutableMultiset out = null; Object in = (Object)source(); out.setCount(in, 0, 0); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multiset;true;setCount;(Object,int,int);;Argument[0];Element of Argument[-1];value" ConcurrentHashMultiset out = null; Object in = (Object)source(); out.setCount(in, 0, 0); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multisets;false;copyHighestCountFirst;(Multiset);;Element of Argument[0];Element of ReturnValue;value" ImmutableMultiset out = null; Multiset in = (Multiset)newWithElement(source()); out = Multisets.copyHighestCountFirst(in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multisets;false;difference;(Multiset,Multiset);;Element of Argument[0];Element of ReturnValue;value" Multiset out = null; Multiset in = (Multiset)newWithElement(source()); out = Multisets.difference(in, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multisets;false;filter;(Multiset,Predicate);;Element of Argument[0];Element of ReturnValue;value" Multiset out = null; Multiset in = (Multiset)newWithElement(source()); out = Multisets.filter(in, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multisets;false;immutableEntry;(Object,int);;Argument[0];Element of ReturnValue;value" Multiset.Entry out = null; Object in = (Object)source(); out = Multisets.immutableEntry(in, 0); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multisets;false;sum;(Multiset,Multiset);;Element of Argument[0..1];Element of ReturnValue;value" Multiset out = null; Multiset in = (Multiset)newWithElement(source()); out = Multisets.sum(null, in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multisets;false;sum;(Multiset,Multiset);;Element of Argument[0..1];Element of ReturnValue;value" Multiset out = null; Multiset in = (Multiset)newWithElement(source()); out = Multisets.sum(in, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multisets;false;union;(Multiset,Multiset);;Element of Argument[0..1];Element of ReturnValue;value" Multiset out = null; Multiset in = (Multiset)newWithElement(source()); out = Multisets.union(null, in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multisets;false;union;(Multiset,Multiset);;Element of Argument[0..1];Element of ReturnValue;value" Multiset out = null; Multiset in = (Multiset)newWithElement(source()); out = Multisets.union(in, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multisets;false;unmodifiableMultiset;(ImmutableMultiset);;Element of Argument[0];Element of ReturnValue;value" Multiset out = null; ImmutableMultiset in = (ImmutableMultiset)newWithElement(source()); out = Multisets.unmodifiableMultiset(in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multisets;false;unmodifiableMultiset;(Multiset);;Element of Argument[0];Element of ReturnValue;value" Multiset out = null; Multiset in = (Multiset)newWithElement(source()); out = Multisets.unmodifiableMultiset(in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multisets;false;unmodifiableSortedMultiset;(SortedMultiset);;Element of Argument[0];Element of ReturnValue;value" SortedMultiset out = null; SortedMultiset in = (SortedMultiset)newWithElement(source()); out = Multisets.unmodifiableSortedMultiset(in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;MutableClassToInstanceMap;true;create;(Map);;MapKey of Argument[0];MapKey of ReturnValue;value" MutableClassToInstanceMap out = null; Map in = (Map)newWithMapKey(source()); out = MutableClassToInstanceMap.create(in); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;MutableClassToInstanceMap;true;create;(Map);;MapValue of Argument[0];MapValue of ReturnValue;value" MutableClassToInstanceMap out = null; Map in = (Map)newWithMapValue(source()); out = MutableClassToInstanceMap.create(in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ObjectArrays;false;concat;(Object,Object[]);;Argument[0];ArrayElement of ReturnValue;value" + Object[] out = null; + Object in = (Object)source(); + out = ObjectArrays.concat(in, (Object[])null); + sink(getArrayElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ObjectArrays;false;concat;(Object,Object[]);;ArrayElement of Argument[1];ArrayElement of ReturnValue;value" + Object[] out = null; + Object[] in = (Object[])newWithArrayElement(source()); + out = ObjectArrays.concat((Object)null, in); + sink(getArrayElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ObjectArrays;false;concat;(Object[],Object);;Argument[1];ArrayElement of ReturnValue;value" + Object[] out = null; + Object in = (Object)source(); + out = ObjectArrays.concat((Object[])null, in); + sink(getArrayElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ObjectArrays;false;concat;(Object[],Object);;ArrayElement of Argument[0];ArrayElement of ReturnValue;value" + Object[] out = null; + Object[] in = (Object[])newWithArrayElement(source()); + out = ObjectArrays.concat(in, (Object)null); + sink(getArrayElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ObjectArrays;false;concat;(Object[],Object[],Class);;ArrayElement of Argument[0..1];ArrayElement of ReturnValue;value" + Object[] out = null; + Object[] in = (Object[])newWithArrayElement(source()); + out = ObjectArrays.concat(null, in, null); + sink(getArrayElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ObjectArrays;false;concat;(Object[],Object[],Class);;ArrayElement of Argument[0..1];ArrayElement of ReturnValue;value" + Object[] out = null; + Object[] in = (Object[])newWithArrayElement(source()); + out = ObjectArrays.concat(in, null, null); + sink(getArrayElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Queues;false;drain;(BlockingQueue,Collection,int,Duration);;Element of Argument[0];Element of Argument[1];value" Collection out = null; BlockingQueue in = (BlockingQueue)newWithElement(source()); Queues.drain(in, out, 0, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Queues;false;drain;(BlockingQueue,Collection,int,long,TimeUnit);;Element of Argument[0];Element of Argument[1];value" Collection out = null; BlockingQueue in = (BlockingQueue)newWithElement(source()); Queues.drain(in, out, 0, 0L, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Queues;false;newArrayDeque;(Iterable);;Element of Argument[0];Element of ReturnValue;value" ArrayDeque out = null; Iterable in = (Iterable)newWithElement(source()); out = Queues.newArrayDeque(in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Queues;false;newConcurrentLinkedQueue;(Iterable);;Element of Argument[0];Element of ReturnValue;value" ConcurrentLinkedQueue out = null; Iterable in = (Iterable)newWithElement(source()); out = Queues.newConcurrentLinkedQueue(in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Queues;false;newLinkedBlockingDeque;(Iterable);;Element of Argument[0];Element of ReturnValue;value" LinkedBlockingDeque out = null; Iterable in = (Iterable)newWithElement(source()); out = Queues.newLinkedBlockingDeque(in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Queues;false;newLinkedBlockingQueue;(Iterable);;Element of Argument[0];Element of ReturnValue;value" LinkedBlockingQueue out = null; Iterable in = (Iterable)newWithElement(source()); out = Queues.newLinkedBlockingQueue(in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Queues;false;newPriorityBlockingQueue;(Iterable);;Element of Argument[0];Element of ReturnValue;value" PriorityBlockingQueue out = null; Iterable in = (Iterable)newWithElement(source()); out = Queues.newPriorityBlockingQueue(in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Queues;false;newPriorityQueue;(Iterable);;Element of Argument[0];Element of ReturnValue;value" PriorityQueue out = null; Iterable in = (Iterable)newWithElement(source()); out = Queues.newPriorityQueue(in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Queues;false;synchronizedDeque;(Deque);;Element of Argument[0];Element of ReturnValue;value" Deque out = null; Deque in = (Deque)newWithElement(source()); out = Queues.synchronizedDeque(in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Queues;false;synchronizedQueue;(Queue);;Element of Argument[0];Element of ReturnValue;value" Queue out = null; Queue in = (Queue)newWithElement(source()); out = Queues.synchronizedQueue(in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Sets$SetView;true;copyInto;(Set);;Element of Argument[-1];Element of Argument[0];value" Set out = null; Sets.SetView in = (Sets.SetView)newWithElement(source()); in.copyInto(out); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Sets$SetView;true;immutableCopy;();;Element of Argument[-1];Element of ReturnValue;value" ImmutableSet out = null; Sets.SetView in = (Sets.SetView)newWithElement(source()); out = in.immutableCopy(); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;cartesianProduct;(List);;Element of Element of Argument[0];Element of Element of ReturnValue;value" Set out = null; List in = (List)newWithElement(newWithElement(source())); out = Sets.cartesianProduct(in); - sink(getElement(getElement(out))); // $hasValueFlow + sink(getElement(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;cartesianProduct;(Set[]);;Element of ArrayElement of Argument[0];Element of Element of ReturnValue;value" Set out = null; Set[] in = (Set[])newWithArrayElement(newWithElement(source())); out = Sets.cartesianProduct(in); - sink(getElement(getElement(out))); // $hasValueFlow + sink(getElement(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;combinations;(Set,int);;Element of Argument[0];Element of Element of ReturnValue;value" Set out = null; Set in = (Set)newWithElement(source()); out = Sets.combinations(in, 0); - sink(getElement(getElement(out))); // $hasValueFlow + sink(getElement(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;difference;(Set,Set);;Element of Argument[0];Element of ReturnValue;value" Sets.SetView out = null; Set in = (Set)newWithElement(source()); out = Sets.difference(in, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;filter;(NavigableSet,Predicate);;Element of Argument[0];Element of ReturnValue;value" NavigableSet out = null; NavigableSet in = (NavigableSet)newWithElement(source()); out = Sets.filter(in, (Predicate)null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;filter;(Set,Predicate);;Element of Argument[0];Element of ReturnValue;value" Set out = null; Set in = (Set)newWithElement(source()); out = Sets.filter(in, (Predicate)null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;filter;(SortedSet,Predicate);;Element of Argument[0];Element of ReturnValue;value" SortedSet out = null; SortedSet in = (SortedSet)newWithElement(source()); out = Sets.filter(in, (Predicate)null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;newConcurrentHashSet;(Iterable);;Element of Argument[0];Element of ReturnValue;value" Set out = null; Iterable in = (Iterable)newWithElement(source()); out = Sets.newConcurrentHashSet(in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;newCopyOnWriteArraySet;(Iterable);;Element of Argument[0];Element of ReturnValue;value" CopyOnWriteArraySet out = null; Iterable in = (Iterable)newWithElement(source()); out = Sets.newCopyOnWriteArraySet(in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;newHashSet;(Iterable);;Element of Argument[0];Element of ReturnValue;value" HashSet out = null; Iterable in = (Iterable)newWithElement(source()); out = Sets.newHashSet(in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;newHashSet;(Iterator);;Element of Argument[0];Element of ReturnValue;value" HashSet out = null; Iterator in = (Iterator)newWithElement(source()); out = Sets.newHashSet(in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;Sets;false;newHashSet;(Object[]);;ArrayElement of Argument[0];Element of ReturnValue;value" + HashSet out = null; + Object[] in = (Object[])newWithArrayElement(source()); + out = Sets.newHashSet(in); + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;newLinkedHashSet;(Iterable);;Element of Argument[0];Element of ReturnValue;value" LinkedHashSet out = null; Iterable in = (Iterable)newWithElement(source()); out = Sets.newLinkedHashSet(in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;newSetFromMap;(Map);;MapKey of Argument[0];Element of ReturnValue;value" Set out = null; Map in = (Map)newWithMapKey(source()); out = Sets.newSetFromMap(in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;newTreeSet;(Iterable);;Element of Argument[0];Element of ReturnValue;value" TreeSet out = null; Iterable in = (Iterable)newWithElement(source()); out = Sets.newTreeSet(in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;powerSet;(Set);;Element of Argument[0];Element of Element of ReturnValue;value" Set out = null; Set in = (Set)newWithElement(source()); out = Sets.powerSet(in); - sink(getElement(getElement(out))); // $hasValueFlow + sink(getElement(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;subSet;(NavigableSet,Range);;Element of Argument[0];Element of ReturnValue;value" NavigableSet out = null; NavigableSet in = (NavigableSet)newWithElement(source()); out = Sets.subSet(in, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;symmetricDifference;(Set,Set);;Element of Argument[0..1];Element of ReturnValue;value" Sets.SetView out = null; Set in = (Set)newWithElement(source()); out = Sets.symmetricDifference(null, in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;symmetricDifference;(Set,Set);;Element of Argument[0..1];Element of ReturnValue;value" Sets.SetView out = null; Set in = (Set)newWithElement(source()); out = Sets.symmetricDifference(in, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;synchronizedNavigableSet;(NavigableSet);;Element of Argument[0];Element of ReturnValue;value" NavigableSet out = null; NavigableSet in = (NavigableSet)newWithElement(source()); out = Sets.synchronizedNavigableSet(in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;union;(Set,Set);;Element of Argument[0..1];Element of ReturnValue;value" Sets.SetView out = null; Set in = (Set)newWithElement(source()); out = Sets.union(null, in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;union;(Set,Set);;Element of Argument[0..1];Element of ReturnValue;value" Sets.SetView out = null; Set in = (Set)newWithElement(source()); out = Sets.union(in, null); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;unmodifiableNavigableSet;(NavigableSet);;Element of Argument[0];Element of ReturnValue;value" NavigableSet out = null; NavigableSet in = (NavigableSet)newWithElement(source()); out = Sets.unmodifiableNavigableSet(in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;Table$Cell;true;getColumnKey;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];ReturnValue;value" + Object out = null; + Table.Cell in = (Table.Cell)newWithTable_columnKey(source()); + out = in.getColumnKey(); + sink(out); // $ hasValueFlow + } + { + // "com.google.common.collect;Table$Cell;true;getRowKey;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];ReturnValue;value" + Object out = null; + Table.Cell in = (Table.Cell)newWithTable_rowKey(source()); + out = in.getRowKey(); + sink(out); // $ hasValueFlow } { // "com.google.common.collect;Table$Cell;true;getValue;();;MapValue of Argument[-1];ReturnValue;value" Object out = null; Table.Cell in = (Table.Cell)newWithMapValue(source()); out = in.getValue(); - sink(out); // $hasValueFlow - } - { - // "com.google.common.collect;Table;true;cellSet;();;MapKey of Argument[-1];MapKey of Element of ReturnValue;value" - Set out = null; - Table in = (Table)newWithMapKey(source()); - out = in.cellSet(); - sink(getMapKey(getElement(out))); // $hasValueFlow - } - { - // "com.google.common.collect;Table;true;cellSet;();;MapKey of Argument[-1];MapKey of Element of ReturnValue;value" - Set out = null; - ArrayTable in = (ArrayTable)newWithMapKey(source()); - out = in.cellSet(); - sink(getMapKey(getElement(out))); // $hasValueFlow - } - { - // "com.google.common.collect;Table;true;cellSet;();;MapKey of Argument[-1];MapKey of Element of ReturnValue;value" - ImmutableSet out = null; - ImmutableTable in = (ImmutableTable)newWithMapKey(source()); - out = in.cellSet(); - sink(getMapKey(getElement(out))); // $hasValueFlow + sink(out); // $ hasValueFlow } { // "com.google.common.collect;Table;true;cellSet;();;MapValue of Argument[-1];MapValue of Element of ReturnValue;value" Set out = null; Table in = (Table)newWithMapValue(source()); out = in.cellSet(); - sink(getMapValue(getElement(out))); // $hasValueFlow + sink(getMapValue(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;cellSet;();;MapValue of Argument[-1];MapValue of Element of ReturnValue;value" Set out = null; ArrayTable in = (ArrayTable)newWithMapValue(source()); out = in.cellSet(); - sink(getMapValue(getElement(out))); // $hasValueFlow + sink(getMapValue(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;cellSet;();;MapValue of Argument[-1];MapValue of Element of ReturnValue;value" ImmutableSet out = null; ImmutableTable in = (ImmutableTable)newWithMapValue(source()); out = in.cellSet(); - sink(getMapValue(getElement(out))); // $hasValueFlow + sink(getMapValue(getElement(out))); // $ hasValueFlow + } + { + // "com.google.common.collect;Table;true;cellSet;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];SyntheticField[com.google.common.collect.Table.columnKey] of Element of ReturnValue;value" + Set out = null; + Table in = (Table)newWithTable_columnKey(source()); + out = in.cellSet(); + sink(getTable_columnKey(getElement(out))); // $ hasValueFlow + } + { + // "com.google.common.collect;Table;true;cellSet;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];SyntheticField[com.google.common.collect.Table.columnKey] of Element of ReturnValue;value" + Set out = null; + ArrayTable in = (ArrayTable)newWithTable_columnKey(source()); + out = in.cellSet(); + sink(getTable_columnKey(getElement(out))); // $ hasValueFlow + } + { + // "com.google.common.collect;Table;true;cellSet;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];SyntheticField[com.google.common.collect.Table.columnKey] of Element of ReturnValue;value" + ImmutableSet out = null; + ImmutableTable in = (ImmutableTable)newWithTable_columnKey(source()); + out = in.cellSet(); + sink(getTable_columnKey(getElement(out))); // $ hasValueFlow + } + { + // "com.google.common.collect;Table;true;cellSet;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];SyntheticField[com.google.common.collect.Table.rowKey] of Element of ReturnValue;value" + Set out = null; + Table in = (Table)newWithTable_rowKey(source()); + out = in.cellSet(); + sink(getTable_rowKey(getElement(out))); // $ hasValueFlow + } + { + // "com.google.common.collect;Table;true;cellSet;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];SyntheticField[com.google.common.collect.Table.rowKey] of Element of ReturnValue;value" + Set out = null; + ArrayTable in = (ArrayTable)newWithTable_rowKey(source()); + out = in.cellSet(); + sink(getTable_rowKey(getElement(out))); // $ hasValueFlow + } + { + // "com.google.common.collect;Table;true;cellSet;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];SyntheticField[com.google.common.collect.Table.rowKey] of Element of ReturnValue;value" + ImmutableSet out = null; + ImmutableTable in = (ImmutableTable)newWithTable_rowKey(source()); + out = in.cellSet(); + sink(getTable_rowKey(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;column;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" Map out = null; Table in = (Table)newWithMapValue(source()); out = in.column(null); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Table;true;column;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" - Map out = null; - Table in = (Table)newWithMapValue(source()); - out = in.column((Object)null); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;column;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" Map out = null; ArrayTable in = (ArrayTable)newWithMapValue(source()); out = in.column(null); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;column;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" ImmutableMap out = null; ImmutableTable in = (ImmutableTable)newWithMapValue(source()); out = in.column(null); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;Table;true;column;(Object);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];MapKey of ReturnValue;value" + Map out = null; + Table in = (Table)newWithTable_rowKey(source()); + out = in.column(null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;Table;true;column;(Object);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];MapKey of ReturnValue;value" + Map out = null; + ArrayTable in = (ArrayTable)newWithTable_rowKey(source()); + out = in.column(null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;Table;true;column;(Object);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];MapKey of ReturnValue;value" + ImmutableMap out = null; + ImmutableTable in = (ImmutableTable)newWithTable_rowKey(source()); + out = in.column(null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;Table;true;columnKeySet;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];Element of ReturnValue;value" + Set out = null; + Table in = (Table)newWithTable_columnKey(source()); + out = in.columnKeySet(); + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;Table;true;columnKeySet;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];Element of ReturnValue;value" + ImmutableSet out = null; + ImmutableTable in = (ImmutableTable)newWithTable_columnKey(source()); + out = in.columnKeySet(); + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;Table;true;columnKeySet;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];Element of ReturnValue;value" + ImmutableSet out = null; + ArrayTable in = (ArrayTable)newWithTable_columnKey(source()); + out = in.columnKeySet(); + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;columnMap;();;MapValue of Argument[-1];MapValue of MapValue of ReturnValue;value" Map out = null; Table in = (Table)newWithMapValue(source()); out = in.columnMap(); - sink(getMapValue(getMapValue(out))); // $hasValueFlow + sink(getMapValue(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;columnMap;();;MapValue of Argument[-1];MapValue of MapValue of ReturnValue;value" Map out = null; ArrayTable in = (ArrayTable)newWithMapValue(source()); out = in.columnMap(); - sink(getMapValue(getMapValue(out))); // $hasValueFlow + sink(getMapValue(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;columnMap;();;MapValue of Argument[-1];MapValue of MapValue of ReturnValue;value" ImmutableMap out = null; ImmutableTable in = (ImmutableTable)newWithMapValue(source()); out = in.columnMap(); - sink(getMapValue(getMapValue(out))); // $hasValueFlow + sink(getMapValue(getMapValue(out))); // $ hasValueFlow + } + { + // "com.google.common.collect;Table;true;columnMap;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];MapKey of ReturnValue;value" + Map out = null; + Table in = (Table)newWithTable_columnKey(source()); + out = in.columnMap(); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;Table;true;columnMap;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];MapKey of ReturnValue;value" + Map out = null; + ArrayTable in = (ArrayTable)newWithTable_columnKey(source()); + out = in.columnMap(); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;Table;true;columnMap;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];MapKey of ReturnValue;value" + ImmutableMap out = null; + ImmutableTable in = (ImmutableTable)newWithTable_columnKey(source()); + out = in.columnMap(); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;Table;true;columnMap;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];MapKey of MapValue of ReturnValue;value" + Map out = null; + Table in = (Table)newWithTable_rowKey(source()); + out = in.columnMap(); + sink(getMapKey(getMapValue(out))); // $ hasValueFlow + } + { + // "com.google.common.collect;Table;true;columnMap;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];MapKey of MapValue of ReturnValue;value" + Map out = null; + ArrayTable in = (ArrayTable)newWithTable_rowKey(source()); + out = in.columnMap(); + sink(getMapKey(getMapValue(out))); // $ hasValueFlow + } + { + // "com.google.common.collect;Table;true;columnMap;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];MapKey of MapValue of ReturnValue;value" + ImmutableMap out = null; + ImmutableTable in = (ImmutableTable)newWithTable_rowKey(source()); + out = in.columnMap(); + sink(getMapKey(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;get;(Object,Object);;MapValue of Argument[-1];ReturnValue;value" Object out = null; Table in = (Table)newWithMapValue(source()); out = in.get(null, null); - sink(out); // $hasValueFlow - } - { - // "com.google.common.collect;Table;true;get;(Object,Object);;MapValue of Argument[-1];ReturnValue;value" - Object out = null; - Table in = (Table)newWithMapValue(source()); - out = in.get((Object)null, (Object)null); - sink(out); // $hasValueFlow + sink(out); // $ hasValueFlow } { // "com.google.common.collect;Table;true;get;(Object,Object);;MapValue of Argument[-1];ReturnValue;value" Object out = null; HashBasedTable in = (HashBasedTable)newWithMapValue(source()); out = in.get(null, null); - sink(out); // $hasValueFlow + sink(out); // $ hasValueFlow } { // "com.google.common.collect;Table;true;get;(Object,Object);;MapValue of Argument[-1];ReturnValue;value" Object out = null; ArrayTable in = (ArrayTable)newWithMapValue(source()); out = in.get(null, null); - sink(out); // $hasValueFlow + sink(out); // $ hasValueFlow + } + { + // "com.google.common.collect;Table;true;put;(Object,Object,Object);;Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];value" + Table out = null; + Object in = (Object)source(); + out.put(in, null, null); + sink(getTable_rowKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;Table;true;put;(Object,Object,Object);;Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];value" + ImmutableTable out = null; + Object in = (Object)source(); + out.put(in, null, null); + sink(getTable_rowKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;Table;true;put;(Object,Object,Object);;Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];value" + ArrayTable out = null; + Object in = (Object)source(); + out.put(in, null, null); + sink(getTable_rowKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;Table;true;put;(Object,Object,Object);;Argument[1];SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];value" + Table out = null; + Object in = (Object)source(); + out.put(null, in, null); + sink(getTable_columnKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;Table;true;put;(Object,Object,Object);;Argument[1];SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];value" + ImmutableTable out = null; + Object in = (Object)source(); + out.put(null, in, null); + sink(getTable_columnKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;Table;true;put;(Object,Object,Object);;Argument[1];SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];value" + ArrayTable out = null; + Object in = (Object)source(); + out.put(null, in, null); + sink(getTable_columnKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;put;(Object,Object,Object);;Argument[2];MapValue of Argument[-1];value" Table out = null; Object in = (Object)source(); out.put(null, null, in); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Table;true;put;(Object,Object,Object);;Argument[2];MapValue of Argument[-1];value" - Table out = null; - Object in = (Object)source(); - out.put((Object)null, (Object)null, in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;put;(Object,Object,Object);;Argument[2];MapValue of Argument[-1];value" ImmutableTable out = null; Object in = (Object)source(); out.put(null, null, in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;put;(Object,Object,Object);;Argument[2];MapValue of Argument[-1];value" ArrayTable out = null; Object in = (Object)source(); out.put(null, null, in); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Table;true;putAll;(Table);;MapKey of Argument[0];MapKey of Argument[-1];value" - Table out = null; - Table in = (Table)newWithMapKey(source()); - out.putAll(in); - sink(getMapKey(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Table;true;putAll;(Table);;MapKey of Argument[0];MapKey of Argument[-1];value" - ImmutableTable out = null; - Table in = (Table)newWithMapKey(source()); - out.putAll(in); - sink(getMapKey(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Table;true;putAll;(Table);;MapKey of Argument[0];MapKey of Argument[-1];value" - ArrayTable out = null; - Table in = (Table)newWithMapKey(source()); - out.putAll(in); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;putAll;(Table);;MapValue of Argument[0];MapValue of Argument[-1];value" Table out = null; Table in = (Table)newWithMapValue(source()); out.putAll(in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;putAll;(Table);;MapValue of Argument[0];MapValue of Argument[-1];value" ImmutableTable out = null; Table in = (Table)newWithMapValue(source()); out.putAll(in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;putAll;(Table);;MapValue of Argument[0];MapValue of Argument[-1];value" ArrayTable out = null; Table in = (Table)newWithMapValue(source()); out.putAll(in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;Table;true;putAll;(Table);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];value" + Table out = null; + Table in = (Table)newWithTable_columnKey(source()); + out.putAll(in); + sink(getTable_columnKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;Table;true;putAll;(Table);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];value" + ImmutableTable out = null; + Table in = (Table)newWithTable_columnKey(source()); + out.putAll(in); + sink(getTable_columnKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;Table;true;putAll;(Table);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];value" + ArrayTable out = null; + Table in = (Table)newWithTable_columnKey(source()); + out.putAll(in); + sink(getTable_columnKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;Table;true;putAll;(Table);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];value" + Table out = null; + Table in = (Table)newWithTable_rowKey(source()); + out.putAll(in); + sink(getTable_rowKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;Table;true;putAll;(Table);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];value" + ImmutableTable out = null; + Table in = (Table)newWithTable_rowKey(source()); + out.putAll(in); + sink(getTable_rowKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;Table;true;putAll;(Table);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];value" + ArrayTable out = null; + Table in = (Table)newWithTable_rowKey(source()); + out.putAll(in); + sink(getTable_rowKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;remove;(Object,Object);;MapValue of Argument[-1];ReturnValue;value" Object out = null; Table in = (Table)newWithMapValue(source()); out = in.remove(null, null); - sink(out); // $hasValueFlow - } - { - // "com.google.common.collect;Table;true;remove;(Object,Object);;MapValue of Argument[-1];ReturnValue;value" - Object out = null; - Table in = (Table)newWithMapValue(source()); - out = in.remove((Object)null, (Object)null); - sink(out); // $hasValueFlow + sink(out); // $ hasValueFlow } { // "com.google.common.collect;Table;true;remove;(Object,Object);;MapValue of Argument[-1];ReturnValue;value" Object out = null; ImmutableTable in = (ImmutableTable)newWithMapValue(source()); out = in.remove(null, null); - sink(out); // $hasValueFlow + sink(out); // $ hasValueFlow } { // "com.google.common.collect;Table;true;remove;(Object,Object);;MapValue of Argument[-1];ReturnValue;value" Object out = null; HashBasedTable in = (HashBasedTable)newWithMapValue(source()); out = in.remove(null, null); - sink(out); // $hasValueFlow + sink(out); // $ hasValueFlow } { // "com.google.common.collect;Table;true;remove;(Object,Object);;MapValue of Argument[-1];ReturnValue;value" Object out = null; ArrayTable in = (ArrayTable)newWithMapValue(source()); out = in.remove(null, null); - sink(out); // $hasValueFlow + sink(out); // $ hasValueFlow } { // "com.google.common.collect;Table;true;row;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" SortedMap out = null; TreeBasedTable in = (TreeBasedTable)newWithMapValue(source()); out = in.row(null); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;row;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" Map out = null; Table in = (Table)newWithMapValue(source()); out = in.row(null); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Table;true;row;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" - Map out = null; - Table in = (Table)newWithMapValue(source()); - out = in.row((Object)null); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;row;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" Map out = null; ArrayTable in = (ArrayTable)newWithMapValue(source()); out = in.row(null); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;row;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" ImmutableMap out = null; ImmutableTable in = (ImmutableTable)newWithMapValue(source()); out = in.row(null); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;Table;true;row;(Object);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];MapKey of ReturnValue;value" + SortedMap out = null; + TreeBasedTable in = (TreeBasedTable)newWithTable_columnKey(source()); + out = in.row(null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;Table;true;row;(Object);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];MapKey of ReturnValue;value" + Map out = null; + Table in = (Table)newWithTable_columnKey(source()); + out = in.row(null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;Table;true;row;(Object);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];MapKey of ReturnValue;value" + Map out = null; + ArrayTable in = (ArrayTable)newWithTable_columnKey(source()); + out = in.row(null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;Table;true;row;(Object);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];MapKey of ReturnValue;value" + ImmutableMap out = null; + ImmutableTable in = (ImmutableTable)newWithTable_columnKey(source()); + out = in.row(null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;Table;true;rowKeySet;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];Element of ReturnValue;value" + SortedSet out = null; + TreeBasedTable in = (TreeBasedTable)newWithTable_rowKey(source()); + out = in.rowKeySet(); + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;Table;true;rowKeySet;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];Element of ReturnValue;value" + SortedSet out = null; + RowSortedTable in = (RowSortedTable)newWithTable_rowKey(source()); + out = in.rowKeySet(); + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;Table;true;rowKeySet;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];Element of ReturnValue;value" + Set out = null; + Table in = (Table)newWithTable_rowKey(source()); + out = in.rowKeySet(); + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;Table;true;rowKeySet;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];Element of ReturnValue;value" + ImmutableSet out = null; + ImmutableTable in = (ImmutableTable)newWithTable_rowKey(source()); + out = in.rowKeySet(); + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;Table;true;rowKeySet;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];Element of ReturnValue;value" + ImmutableSet out = null; + ArrayTable in = (ArrayTable)newWithTable_rowKey(source()); + out = in.rowKeySet(); + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;rowMap;();;MapValue of Argument[-1];MapValue of MapValue of ReturnValue;value" SortedMap out = null; TreeBasedTable in = (TreeBasedTable)newWithMapValue(source()); out = in.rowMap(); - sink(getMapValue(getMapValue(out))); // $hasValueFlow + sink(getMapValue(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;rowMap;();;MapValue of Argument[-1];MapValue of MapValue of ReturnValue;value" SortedMap out = null; RowSortedTable in = (RowSortedTable)newWithMapValue(source()); out = in.rowMap(); - sink(getMapValue(getMapValue(out))); // $hasValueFlow + sink(getMapValue(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;rowMap;();;MapValue of Argument[-1];MapValue of MapValue of ReturnValue;value" Map out = null; Table in = (Table)newWithMapValue(source()); out = in.rowMap(); - sink(getMapValue(getMapValue(out))); // $hasValueFlow + sink(getMapValue(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;rowMap;();;MapValue of Argument[-1];MapValue of MapValue of ReturnValue;value" Map out = null; ArrayTable in = (ArrayTable)newWithMapValue(source()); out = in.rowMap(); - sink(getMapValue(getMapValue(out))); // $hasValueFlow + sink(getMapValue(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;rowMap;();;MapValue of Argument[-1];MapValue of MapValue of ReturnValue;value" ImmutableMap out = null; ImmutableTable in = (ImmutableTable)newWithMapValue(source()); out = in.rowMap(); - sink(getMapValue(getMapValue(out))); // $hasValueFlow + sink(getMapValue(getMapValue(out))); // $ hasValueFlow + } + { + // "com.google.common.collect;Table;true;rowMap;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];MapKey of MapValue of ReturnValue;value" + SortedMap out = null; + TreeBasedTable in = (TreeBasedTable)newWithTable_columnKey(source()); + out = in.rowMap(); + sink(getMapKey(getMapValue(out))); // $ hasValueFlow + } + { + // "com.google.common.collect;Table;true;rowMap;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];MapKey of MapValue of ReturnValue;value" + SortedMap out = null; + RowSortedTable in = (RowSortedTable)newWithTable_columnKey(source()); + out = in.rowMap(); + sink(getMapKey(getMapValue(out))); // $ hasValueFlow + } + { + // "com.google.common.collect;Table;true;rowMap;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];MapKey of MapValue of ReturnValue;value" + Map out = null; + Table in = (Table)newWithTable_columnKey(source()); + out = in.rowMap(); + sink(getMapKey(getMapValue(out))); // $ hasValueFlow + } + { + // "com.google.common.collect;Table;true;rowMap;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];MapKey of MapValue of ReturnValue;value" + Map out = null; + ArrayTable in = (ArrayTable)newWithTable_columnKey(source()); + out = in.rowMap(); + sink(getMapKey(getMapValue(out))); // $ hasValueFlow + } + { + // "com.google.common.collect;Table;true;rowMap;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];MapKey of MapValue of ReturnValue;value" + ImmutableMap out = null; + ImmutableTable in = (ImmutableTable)newWithTable_columnKey(source()); + out = in.rowMap(); + sink(getMapKey(getMapValue(out))); // $ hasValueFlow + } + { + // "com.google.common.collect;Table;true;rowMap;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];MapKey of ReturnValue;value" + SortedMap out = null; + TreeBasedTable in = (TreeBasedTable)newWithTable_rowKey(source()); + out = in.rowMap(); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;Table;true;rowMap;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];MapKey of ReturnValue;value" + SortedMap out = null; + RowSortedTable in = (RowSortedTable)newWithTable_rowKey(source()); + out = in.rowMap(); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;Table;true;rowMap;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];MapKey of ReturnValue;value" + Map out = null; + Table in = (Table)newWithTable_rowKey(source()); + out = in.rowMap(); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;Table;true;rowMap;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];MapKey of ReturnValue;value" + Map out = null; + ArrayTable in = (ArrayTable)newWithTable_rowKey(source()); + out = in.rowMap(); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;Table;true;rowMap;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];MapKey of ReturnValue;value" + ImmutableMap out = null; + ImmutableTable in = (ImmutableTable)newWithTable_rowKey(source()); + out = in.rowMap(); + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;values;();;MapValue of Argument[-1];Element of ReturnValue;value" ImmutableCollection out = null; ImmutableTable in = (ImmutableTable)newWithMapValue(source()); out = in.values(); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;values;();;MapValue of Argument[-1];Element of ReturnValue;value" Collection out = null; Table in = (Table)newWithMapValue(source()); out = in.values(); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;values;();;MapValue of Argument[-1];Element of ReturnValue;value" Collection out = null; ArrayTable in = (ArrayTable)newWithMapValue(source()); out = in.values(); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;Tables;false;immutableCell;(Object,Object,Object);;Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value" + Table.Cell out = null; + Object in = (Object)source(); + out = Tables.immutableCell(in, null, null); + sink(getTable_rowKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;Tables;false;immutableCell;(Object,Object,Object);;Argument[1];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value" + Table.Cell out = null; + Object in = (Object)source(); + out = Tables.immutableCell(null, in, null); + sink(getTable_columnKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Tables;false;immutableCell;(Object,Object,Object);;Argument[2];MapValue of ReturnValue;value" Table.Cell out = null; Object in = (Object)source(); out = Tables.immutableCell(null, null, in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;Tables;false;newCustomTable;(Map,Supplier);;MapKey of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value" + Table out = null; + Map in = (Map)newWithMapKey(source()); + out = Tables.newCustomTable(in, null); + sink(getTable_rowKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;Tables;false;newCustomTable;(Map,Supplier);;MapKey of MapValue of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value" + Table out = null; + Map in = (Map)newWithMapValue(newWithMapKey(source())); + out = Tables.newCustomTable(in, null); + sink(getTable_columnKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Tables;false;newCustomTable;(Map,Supplier);;MapValue of MapValue of Argument[0];MapValue of ReturnValue;value" Table out = null; Map in = (Map)newWithMapValue(newWithMapValue(source())); out = Tables.newCustomTable(in, null); - sink(getMapValue(out)); // $hasValueFlow - } - { - // "com.google.common.collect;Tables;false;synchronizedTable;(Table);;MapKey of Argument[0];MapKey of ReturnValue;value" - Table out = null; - Table in = (Table)newWithMapKey(source()); - out = Tables.synchronizedTable(in); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Tables;false;synchronizedTable;(Table);;MapValue of Argument[0];MapValue of ReturnValue;value" Table out = null; Table in = (Table)newWithMapValue(source()); out = Tables.synchronizedTable(in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;Tables;false;synchronizedTable;(Table);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value" + Table out = null; + Table in = (Table)newWithTable_columnKey(source()); + out = Tables.synchronizedTable(in); + sink(getTable_columnKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;Tables;false;synchronizedTable;(Table);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value" + Table out = null; + Table in = (Table)newWithTable_rowKey(source()); + out = Tables.synchronizedTable(in); + sink(getTable_rowKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Tables;false;transformValues;(Table,Function);;MapKey of Argument[0];MapKey of ReturnValue;value" Table out = null; Table in = (Table)newWithMapKey(source()); out = Tables.transformValues(in, null); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Tables;false;transpose;(Table);;MapValue of Argument[0];MapValue of ReturnValue;value" Table out = null; Table in = (Table)newWithMapValue(source()); out = Tables.transpose(in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { - // "com.google.common.collect;Tables;false;unmodifiableRowSortedTable;(RowSortedTable);;MapKey of Argument[0];MapKey of ReturnValue;value" - RowSortedTable out = null; - RowSortedTable in = (RowSortedTable)newWithMapKey(source()); - out = Tables.unmodifiableRowSortedTable(in); - sink(getMapKey(out)); // $hasValueFlow + // "com.google.common.collect;Tables;false;transpose;(Table);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value" + Table out = null; + Table in = (Table)newWithTable_columnKey(source()); + out = Tables.transpose(in); + sink(getTable_rowKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;Tables;false;transpose;(Table);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value" + Table out = null; + Table in = (Table)newWithTable_rowKey(source()); + out = Tables.transpose(in); + sink(getTable_columnKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Tables;false;unmodifiableRowSortedTable;(RowSortedTable);;MapValue of Argument[0];MapValue of ReturnValue;value" RowSortedTable out = null; RowSortedTable in = (RowSortedTable)newWithMapValue(source()); out = Tables.unmodifiableRowSortedTable(in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { - // "com.google.common.collect;Tables;false;unmodifiableTable;(Table);;MapKey of Argument[0];MapKey of ReturnValue;value" - Table out = null; - Table in = (Table)newWithMapKey(source()); - out = Tables.unmodifiableTable(in); - sink(getMapKey(out)); // $hasValueFlow + // "com.google.common.collect;Tables;false;unmodifiableRowSortedTable;(RowSortedTable);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value" + RowSortedTable out = null; + RowSortedTable in = (RowSortedTable)newWithTable_columnKey(source()); + out = Tables.unmodifiableRowSortedTable(in); + sink(getTable_columnKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;Tables;false;unmodifiableRowSortedTable;(RowSortedTable);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value" + RowSortedTable out = null; + RowSortedTable in = (RowSortedTable)newWithTable_rowKey(source()); + out = Tables.unmodifiableRowSortedTable(in); + sink(getTable_rowKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Tables;false;unmodifiableTable;(Table);;MapValue of Argument[0];MapValue of ReturnValue;value" Table out = null; Table in = (Table)newWithMapValue(source()); out = Tables.unmodifiableTable(in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { - // "com.google.common.collect;TreeBasedTable;true;create;(TreeBasedTable);;MapKey of Argument[0];MapKey of ReturnValue;value" - TreeBasedTable out = null; - TreeBasedTable in = (TreeBasedTable)newWithMapKey(source()); - out = TreeBasedTable.create(in); - sink(getMapKey(out)); // $hasValueFlow + // "com.google.common.collect;Tables;false;unmodifiableTable;(Table);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value" + Table out = null; + Table in = (Table)newWithTable_columnKey(source()); + out = Tables.unmodifiableTable(in); + sink(getTable_columnKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;Tables;false;unmodifiableTable;(Table);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value" + Table out = null; + Table in = (Table)newWithTable_rowKey(source()); + out = Tables.unmodifiableTable(in); + sink(getTable_rowKey(out)); // $ hasValueFlow } { // "com.google.common.collect;TreeBasedTable;true;create;(TreeBasedTable);;MapValue of Argument[0];MapValue of ReturnValue;value" TreeBasedTable out = null; TreeBasedTable in = (TreeBasedTable)newWithMapValue(source()); out = TreeBasedTable.create(in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;TreeBasedTable;true;create;(TreeBasedTable);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value" + TreeBasedTable out = null; + TreeBasedTable in = (TreeBasedTable)newWithTable_columnKey(source()); + out = TreeBasedTable.create(in); + sink(getTable_columnKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;TreeBasedTable;true;create;(TreeBasedTable);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value" + TreeBasedTable out = null; + TreeBasedTable in = (TreeBasedTable)newWithTable_rowKey(source()); + out = TreeBasedTable.create(in); + sink(getTable_rowKey(out)); // $ hasValueFlow } { // "com.google.common.collect;TreeMultimap;true;create;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value" TreeMultimap out = null; Multimap in = (Multimap)newWithMapKey(source()); out = TreeMultimap.create(in); - sink(getMapKey(out)); // $hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;TreeMultimap;true;create;(Multimap);;MapValue of Argument[0];MapValue of ReturnValue;value" TreeMultimap out = null; Multimap in = (Multimap)newWithMapValue(source()); out = TreeMultimap.create(in); - sink(getMapValue(out)); // $hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;TreeMultiset;true;create;(Iterable);;Element of Argument[0];Element of ReturnValue;value" TreeMultiset out = null; Iterable in = (Iterable)newWithElement(source()); out = TreeMultiset.create(in); - sink(getElement(out)); // $hasValueFlow + sink(getElement(out)); // $ hasValueFlow } } diff --git a/java/ql/test/library-tests/frameworks/guava/generated/test.ql b/java/ql/test/library-tests/frameworks/guava/generated/test.ql index 4ca9a985eab..0bdc348c3c0 100644 --- a/java/ql/test/library-tests/frameworks/guava/generated/test.ql +++ b/java/ql/test/library-tests/frameworks/guava/generated/test.ql @@ -9,14 +9,22 @@ class SummaryModelTest extends SummaryModelCsv { row = [ //"package;type;overrides;name;signature;ext;inputspec;outputspec;kind", - "generatedtest;Test;false;getMapKey;;;MapKey of Argument[0];ReturnValue;value", - "generatedtest;Test;false;newWithMapKey;;;Argument[0];MapKey of ReturnValue;value", + "generatedtest;Test;false;newWithArrayElement;;;Argument[0];ArrayElement of ReturnValue;value", + "generatedtest;Test;false;getArrayElement;;;ArrayElement of Argument[0];ReturnValue;value", "generatedtest;Test;false;getElement;;;Element of Argument[0];ReturnValue;value", "generatedtest;Test;false;newWithElement;;;Argument[0];Element of ReturnValue;value", + "generatedtest;Test;false;getMapKey;;;MapKey of Argument[0];ReturnValue;value", + "generatedtest;Test;false;newWithMapKey;;;Argument[0];MapKey of ReturnValue;value", "generatedtest;Test;false;getMapValue;;;MapValue of Argument[0];ReturnValue;value", "generatedtest;Test;false;newWithMapValue;;;Argument[0];MapValue of ReturnValue;value", - "generatedtest;Test;false;newWithArrayElement;;;Argument[0];ArrayElement of ReturnValue;value", - "generatedtest;Test;false;getArrayElement;;;ArrayElement of Argument[0];ReturnValue;value" + "generatedtest;Test;false;getTable_rowKey;;;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];ReturnValue;value", + "generatedtest;Test;false;newWithTable_rowKey;;;Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value", + "generatedtest;Test;false;getTable_columnKey;;;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];ReturnValue;value", + "generatedtest;Test;false;newWithTable_columnKey;;;Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value", + "generatedtest;Test;false;newWithMapDifference_left;;;Argument[0];SyntheticField[com.google.common.collect.MapDifference.left] of ReturnValue;value", + "generatedtest;Test;false;getMapDifference_left;;;SyntheticField[com.google.common.collect.MapDifference.left] of Argument[0];ReturnValue;value", + "generatedtest;Test;false;newWithMapDifference_right;;;Argument[0];SyntheticField[com.google.common.collect.MapDifference.right] of ReturnValue;value", + "generatedtest;Test;false;getMapDifference_right;;;SyntheticField[com.google.common.collect.MapDifference.right] of Argument[0];ReturnValue;value" ] } } diff --git a/java/ql/test/library-tests/frameworks/guava/specs.csv b/java/ql/test/library-tests/frameworks/guava/specs.csv index d74097892e4..2e3394c3d4f 100644 --- a/java/ql/test/library-tests/frameworks/guava/specs.csv +++ b/java/ql/test/library-tests/frameworks/guava/specs.csv @@ -24,34 +24,36 @@ com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Argumen com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value com.google.common.collect;ImmutableMultimap;true;inverse;();;MapKey of Argument[-1];MapValue of ReturnValue;value com.google.common.collect;ImmutableMultimap;true;inverse;();;MapValue of Argument[-1];MapKey of ReturnValue;value -com.google.common.collect;Table$Cell;true;getRowKey;();;SyntheticField[com.google.common.collect.Table.rowKey] of MapKey of Argument[-1];ReturnValue;value -com.google.common.collect;Table$Cell;true;getColumnKey;();;SyntheticField[com.google.common.collect.Table.columnKey] of MapKey of Argument[-1];ReturnValue;value +com.google.common.collect;Table$Cell;true;getRowKey;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];ReturnValue;value +com.google.common.collect;Table$Cell;true;getColumnKey;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];ReturnValue;value com.google.common.collect;Table$Cell;true;getValue;();;MapValue of Argument[-1];ReturnValue;value -com.google.common.collect;Table;true;cellSet;();;MapKey of Argument[-1];MapKey of Element of ReturnValue;value +com.google.common.collect;Table;true;cellSet;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];SyntheticField[com.google.common.collect.Table.rowKey] of Element of ReturnValue;value +com.google.common.collect;Table;true;cellSet;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];SyntheticField[com.google.common.collect.Table.columnKey] of Element of ReturnValue;value com.google.common.collect;Table;true;cellSet;();;MapValue of Argument[-1];MapValue of Element of ReturnValue;value -com.google.common.collect;Table;true;row;(Object);;SyntheticField[com.google.common.collect.Table.columnKey] of MapKey of Argument[-1];MapKey of ReturnValue;value +com.google.common.collect;Table;true;row;(Object);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];MapKey of ReturnValue;value com.google.common.collect;Table;true;row;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value -com.google.common.collect;Table;true;rowKeySet;();;SyntheticField[com.google.common.collect.Table.rowKey] of MapKey of Argument[-1];Element of ReturnValue;value -com.google.common.collect;Table;true;rowMap;();;SyntheticField[com.google.common.collect.Table.rowKey] of MapKey of Argument[-1];MapKey of ReturnValue;value -com.google.common.collect;Table;true;rowMap;();;SyntheticField[com.google.common.collect.Table.columnKey] of MapKey of Argument[-1];MapKey of MapValue of ReturnValue;value +com.google.common.collect;Table;true;rowKeySet;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];Element of ReturnValue;value +com.google.common.collect;Table;true;rowMap;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];MapKey of ReturnValue;value +com.google.common.collect;Table;true;rowMap;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];MapKey of MapValue of ReturnValue;value com.google.common.collect;Table;true;rowMap;();;MapValue of Argument[-1];MapValue of MapValue of ReturnValue;value -com.google.common.collect;Table;true;column;(Object);;SyntheticField[com.google.common.collect.Table.rowKey] of MapKey of Argument[-1];MapKey of ReturnValue;value +com.google.common.collect;Table;true;column;(Object);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];MapKey of ReturnValue;value com.google.common.collect;Table;true;column;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value -com.google.common.collect;Table;true;columnKeySet;();;SyntheticField[com.google.common.collect.Table.columnKey] of MapKey of Argument[-1];Element of ReturnValue;value -com.google.common.collect;Table;true;columnMap;();;SyntheticField[com.google.common.collect.Table.columnKey] of MapKey of Argument[-1];MapKey of ReturnValue;value -com.google.common.collect;Table;true;columnMap;();;SyntheticField[com.google.common.collect.Table.rowKey] of MapKey of Argument[-1];MapKey of MapValue of ReturnValue;value +com.google.common.collect;Table;true;columnKeySet;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];Element of ReturnValue;value +com.google.common.collect;Table;true;columnMap;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];MapKey of ReturnValue;value +com.google.common.collect;Table;true;columnMap;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];MapKey of MapValue of ReturnValue;value com.google.common.collect;Table;true;columnMap;();;MapValue of Argument[-1];MapValue of MapValue of ReturnValue;value com.google.common.collect;Table;true;values;();;MapValue of Argument[-1];Element of ReturnValue;value com.google.common.collect;Table;true;get;(Object,Object);;MapValue of Argument[-1];ReturnValue;value com.google.common.collect;Table;true;remove;(Object,Object);;MapValue of Argument[-1];ReturnValue;value -com.google.common.collect;Table;true;put;(Object,Object,Object);;Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of MapKey of Argument[-1];value -com.google.common.collect;Table;true;put;(Object,Object,Object);;Argument[1];SyntheticField[com.google.common.collect.Table.columnKey] of MapKey of Argument[-1];value +com.google.common.collect;Table;true;put;(Object,Object,Object);;Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];value +com.google.common.collect;Table;true;put;(Object,Object,Object);;Argument[1];SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];value com.google.common.collect;Table;true;put;(Object,Object,Object);;Argument[2];MapValue of Argument[-1];value -com.google.common.collect;Table;true;putAll;(Table);;MapKey of Argument[0];MapKey of Argument[-1];value +com.google.common.collect;Table;true;putAll;(Table);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];value +com.google.common.collect;Table;true;putAll;(Table);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];value com.google.common.collect;Table;true;putAll;(Table);;MapValue of Argument[0];MapValue of Argument[-1];value com.google.common.collect;ImmutableCollection;true;asList;();;Element of Argument[-1];Element of ReturnValue;value com.google.common.collect;ImmutableList;true;reverse;();;Element of Argument[-1];Element of ReturnValue;value -com.google.common.collect;ImmutableCollection;true;subList;(int,int);;Element of Argument[-1];Element of ReturnValue;value +com.google.common.collect;ImmutableList;true;subList;(int,int);;Element of Argument[-1];Element of ReturnValue;value com.google.common.collect;BiMap;true;forcePut;(Object,Object);;Argument[0];MapKey of Argument[-1];value com.google.common.collect;BiMap;true;forcePut;(Object,Object);;Argument[1];MapValue of Argument[-1];value com.google.common.collect;BiMap;true;inverse;();;MapKey of Argument[-1];MapValue of ReturnValue;value @@ -99,27 +101,33 @@ com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Object,Iterable com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Object,Object[]);;ArrayElement of Argument[1];MapValue of Argument[-1];value -com.google.common.collect;ImmutableTable$Builder;true;build;();;SyntheticField[com.google.common.collect.Table.rowKey] of MapKey of Argument[-1];SyntheticField[com.google.common.collect.Table.rowKey] of MapKey of ReturnValue;value -com.google.common.collect;ImmutableTable$Builder;true;build;();;SyntheticField[com.google.common.collect.Table.columnKey] of MapKey of Argument[-1];SyntheticField[com.google.common.collect.Table.columnKey] of MapKey of ReturnValue;value +com.google.common.collect;ImmutableTable$Builder;true;build;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value +com.google.common.collect;ImmutableTable$Builder;true;build;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value com.google.common.collect;ImmutableTable$Builder;true;build;();;MapValue of Argument[-1];MapValue of ReturnValue;value com.google.common.collect;ImmutableTable$Builder;true;orderRowsBy;(Comparator);;Argument[-1];ReturnValue;value com.google.common.collect;ImmutableTable$Builder;true;orderColumnsBy;(Comparator);;Argument[-1];ReturnValue;value com.google.common.collect;ImmutableTable$Builder;true;put;(Object,Object,Object);;Argument[-1];ReturnValue;value com.google.common.collect;ImmutableTable$Builder;true;put;(Cell);;Argument[-1];ReturnValue;value com.google.common.collect;ImmutableTable$Builder;true;putAll;(Table);;Argument[-1];ReturnValue;value -com.google.common.collect;ImmutableTable$Builder;true;put;(Object,Object,Object);;Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of MapKey of Argument[-1];value -com.google.common.collect;ImmutableTable$Builder;true;put;(Object,Object,Object);;Argument[1];SyntheticField[com.google.common.collect.Table.columnKey] of MapKey of Argument[-1];value +com.google.common.collect;ImmutableTable$Builder;true;put;(Object,Object,Object);;Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];value +com.google.common.collect;ImmutableTable$Builder;true;put;(Object,Object,Object);;Argument[1];SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];value com.google.common.collect;ImmutableTable$Builder;true;put;(Object,Object,Object);;Argument[2];MapValue of Argument[-1];value -com.google.common.collect;ImmutableTable$Builder;true;put;(Cell);;MapKey of Argument[0];MapKey of Argument[-1];value +com.google.common.collect;ImmutableTable$Builder;true;put;(Cell);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];value +com.google.common.collect;ImmutableTable$Builder;true;put;(Cell);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];value com.google.common.collect;ImmutableTable$Builder;true;put;(Cell);;MapValue of Argument[0];MapValue of Argument[-1];value -com.google.common.collect;ImmutableTable$Builder;true;putAll;(Table);;MapKey of Argument[0];MapKey of Argument[-1];value +com.google.common.collect;ImmutableTable$Builder;true;putAll;(Table);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];value +com.google.common.collect;ImmutableTable$Builder;true;putAll;(Table);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];value com.google.common.collect;ImmutableTable$Builder;true;putAll;(Table);;MapValue of Argument[0];MapValue of Argument[-1];value com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value com.google.common.collect;ImmutableList;true;of;;;ArrayElement of Argument[12];Element of ReturnValue;value com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value com.google.common.collect;ImmutableSet;true;of;;;ArrayElement of Argument[6];Element of ReturnValue;value +com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value +com.google.common.collect;ImmutableSortedSet;true;of;;;ArrayElement of Argument[6];Element of ReturnValue;value com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value com.google.common.collect;ImmutableMultiset;true;of;;;Element of Argument[6];Element of ReturnValue;value +com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value +com.google.common.collect;ImmutableSortedMultiset;true;of;;;Element of Argument[6];Element of ReturnValue;value com.google.common.collect;ImmutableMap;true;of;;;Argument[0];MapKey of ReturnValue;value com.google.common.collect;ImmutableMap;true;of;;;Argument[1];MapValue of ReturnValue;value com.google.common.collect;ImmutableMap;true;of;;;Argument[2];MapKey of ReturnValue;value @@ -132,6 +140,16 @@ com.google.common.collect;ImmutableMap;true;of;;;Argument[8];MapKey of ReturnVal com.google.common.collect;ImmutableMap;true;of;;;Argument[9];MapValue of ReturnValue;value com.google.common.collect;ImmutableMap;true;of;;;Argument[10];MapKey of ReturnValue;value com.google.common.collect;ImmutableMap;true;of;;;Argument[11];MapValue of ReturnValue;value +com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[0];MapKey of ReturnValue;value +com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[1];MapValue of ReturnValue;value +com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[2];MapKey of ReturnValue;value +com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[3];MapValue of ReturnValue;value +com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[4];MapKey of ReturnValue;value +com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[5];MapValue of ReturnValue;value +com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[6];MapKey of ReturnValue;value +com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[7];MapValue of ReturnValue;value +com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[8];MapKey of ReturnValue;value +com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[9];MapValue of ReturnValue;value com.google.common.collect;ImmutableMultimap;true;of;;;Argument[0];MapKey of ReturnValue;value com.google.common.collect;ImmutableMultimap;true;of;;;Argument[1];MapValue of ReturnValue;value com.google.common.collect;ImmutableMultimap;true;of;;;Argument[2];MapKey of ReturnValue;value @@ -144,8 +162,8 @@ com.google.common.collect;ImmutableMultimap;true;of;;;Argument[8];MapKey of Retu com.google.common.collect;ImmutableMultimap;true;of;;;Argument[9];MapValue of ReturnValue;value com.google.common.collect;ImmutableClassToInstanceMap;true;of;(Class,Object);;Argument[0];MapKey of ReturnValue;value com.google.common.collect;ImmutableClassToInstanceMap;true;of;(Class,Object);;Argument[1];MapValue of ReturnValue;value -com.google.common.collect;ImmutableTable;true;of;(Object,Object,Object);;Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of MapKey of ReturnValue;value -com.google.common.collect;ImmutableTable;true;of;(Object,Object,Object);;Argument[1];SyntheticField[com.google.common.collect.Table.columnKey] of MapKey of ReturnValue;value +com.google.common.collect;ImmutableTable;true;of;(Object,Object,Object);;Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value +com.google.common.collect;ImmutableTable;true;of;(Object,Object,Object);;Argument[1];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value com.google.common.collect;ImmutableTable;true;of;(Object,Object,Object);;Argument[2];MapValue of ReturnValue;value com.google.common.collect;ImmutableList;true;copyOf;(Object[]);;ArrayElement of Argument[0];Element of ReturnValue;value com.google.common.collect;ImmutableList;true;copyOf;(Iterable);;Element of Argument[0];Element of ReturnValue;value @@ -157,6 +175,10 @@ com.google.common.collect;ImmutableSet;true;copyOf;(Object[]);;ArrayElement of A com.google.common.collect;ImmutableSet;true;copyOf;(Iterable);;Element of Argument[0];Element of ReturnValue;value com.google.common.collect;ImmutableSet;true;copyOf;(Iterator);;Element of Argument[0];Element of ReturnValue;value com.google.common.collect;ImmutableSet;true;copyOf;(Collection);;Element of Argument[0];Element of ReturnValue;value +com.google.common.collect;ImmutableSortedSet;true;copyOf;(Comparable[]);;ArrayElement of Argument[0];Element of ReturnValue;value +com.google.common.collect;ImmutableSortedSet;true;copyOf;(Iterable);;Element of Argument[0];Element of ReturnValue;value +com.google.common.collect;ImmutableSortedSet;true;copyOf;(Iterator);;Element of Argument[0];Element of ReturnValue;value +com.google.common.collect;ImmutableSortedSet;true;copyOf;(Collection);;Element of Argument[0];Element of ReturnValue;value com.google.common.collect;ImmutableSortedSet;true;copyOf;(Comparator,Iterable);;Element of Argument[1];Element of ReturnValue;value com.google.common.collect;ImmutableSortedSet;true;copyOf;(Comparator,Iterator);;Element of Argument[1];Element of ReturnValue;value com.google.common.collect;ImmutableSortedSet;true;copyOf;(Comparator,Collection);;Element of Argument[1];Element of ReturnValue;value @@ -164,6 +186,9 @@ com.google.common.collect;ImmutableSortedSet;true;copyOfSorted;(SortedSet);;Elem com.google.common.collect;ImmutableMultiset;true;copyOf;(Object[]);;ArrayElement of Argument[0];Element of ReturnValue;value com.google.common.collect;ImmutableMultiset;true;copyOf;(Iterable);;Element of Argument[0];Element of ReturnValue;value com.google.common.collect;ImmutableMultiset;true;copyOf;(Iterator);;Element of Argument[0];Element of ReturnValue;value +com.google.common.collect;ImmutableSortedMultiset;true;copyOf;(Comparable[]);;ArrayElement of Argument[0];Element of ReturnValue;value +com.google.common.collect;ImmutableSortedMultiset;true;copyOf;(Iterable);;Element of Argument[0];Element of ReturnValue;value +com.google.common.collect;ImmutableSortedMultiset;true;copyOf;(Iterator);;Element of Argument[0];Element of ReturnValue;value com.google.common.collect;ImmutableSortedMultiset;true;copyOf;(Comparator,Iterable);;Element of Argument[1];Element of ReturnValue;value com.google.common.collect;ImmutableSortedMultiset;true;copyOf;(Comparator,Iterator);;Element of Argument[1];Element of ReturnValue;value com.google.common.collect;ImmutableSortedMultiset;true;copyOfSorted;(SortedMultiset);;Element of Argument[0];Element of ReturnValue;value @@ -171,17 +196,24 @@ com.google.common.collect;ImmutableMap;true;copyOf;(Map);;MapKey of Argument[0]; com.google.common.collect;ImmutableMap;true;copyOf;(Map);;MapValue of Argument[0];MapValue of ReturnValue;value com.google.common.collect;ImmutableMap;true;copyOf;(Iterable);;MapKey of Element of Argument[0];MapKey of ReturnValue;value com.google.common.collect;ImmutableMap;true;copyOf;(Iterable);;MapValue of Element of Argument[0];MapValue of ReturnValue;value +com.google.common.collect;ImmutableSortedMap;true;copyOf;(Map);;MapKey of Argument[0];MapKey of ReturnValue;value +com.google.common.collect;ImmutableSortedMap;true;copyOf;(Map);;MapValue of Argument[0];MapValue of ReturnValue;value +com.google.common.collect;ImmutableSortedMap;true;copyOf;(Iterable);;MapKey of Element of Argument[0];MapKey of ReturnValue;value +com.google.common.collect;ImmutableSortedMap;true;copyOf;(Iterable);;MapValue of Element of Argument[0];MapValue of ReturnValue;value com.google.common.collect;ImmutableSortedMap;true;copyOfSorted;(SortedMap);;MapKey of Argument[0];MapKey of ReturnValue;value com.google.common.collect;ImmutableSortedMap;true;copyOfSorted;(SortedMap);;MapValue of Argument[0];MapValue of ReturnValue;value com.google.common.collect;ImmutableSortedMap;true;copyOf;(Map,Comparator);;MapKey of Argument[0];MapKey of ReturnValue;value com.google.common.collect;ImmutableSortedMap;true;copyOf;(Map,Comparator);;MapValue of Argument[0];MapValue of ReturnValue;value +com.google.common.collect;ImmutableSortedMap;true;copyOf;(Iterable,Comparator);;MapKey of Element of Argument[0];MapKey of ReturnValue;value +com.google.common.collect;ImmutableSortedMap;true;copyOf;(Iterable,Comparator);;MapValue of Element of Argument[0];MapValue of ReturnValue;value com.google.common.collect;ImmutableMultimap;true;copyOf;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value com.google.common.collect;ImmutableMultimap;true;copyOf;(Multimap);;MapValue of Argument[0];MapValue of ReturnValue;value com.google.common.collect;ImmutableMultimap;true;copyOf;(Iterable);;MapKey of Element of Argument[0];MapKey of ReturnValue;value com.google.common.collect;ImmutableMultimap;true;copyOf;(Iterable);;MapValue of Element of Argument[0];MapValue of ReturnValue;value com.google.common.collect;ImmutableClassToInstanceMap;true;copyOf;(Map);;MapKey of Argument[0];MapKey of ReturnValue;value com.google.common.collect;ImmutableClassToInstanceMap;true;copyOf;(Map);;MapValue of Argument[0];MapValue of ReturnValue;value -com.google.common.collect;ImmutableTable;true;copyOf;(Table);;MapKey of Argument[0];MapKey of ReturnValue;value +com.google.common.collect;ImmutableTable;true;copyOf;(Table);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value +com.google.common.collect;ImmutableTable;true;copyOf;(Table);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value com.google.common.collect;ImmutableTable;true;copyOf;(Table);;MapValue of Argument[0];MapValue of ReturnValue;value com.google.common.collect;HashMultiset;true;create;(Iterable);;Element of Argument[0];Element of ReturnValue;value com.google.common.collect;LinkedHashMultiset;true;create;(Iterable);;Element of Argument[0];Element of ReturnValue;value @@ -201,12 +233,14 @@ com.google.common.collect;HashBiMap;true;create;(Map);;MapKey of Argument[0];Map com.google.common.collect;HashBiMap;true;create;(Map);;MapValue of Argument[0];MapValue of ReturnValue;value com.google.common.collect;MutableClassToInstanceMap;true;create;(Map);;MapKey of Argument[0];MapKey of ReturnValue;value com.google.common.collect;MutableClassToInstanceMap;true;create;(Map);;MapValue of Argument[0];MapValue of ReturnValue;value -com.google.common.collect;HashBasedTable;true;create;(Table);;MapKey of Argument[0];MapKey of ReturnValue;value +com.google.common.collect;HashBasedTable;true;create;(Table);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value +com.google.common.collect;HashBasedTable;true;create;(Table);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value com.google.common.collect;HashBasedTable;true;create;(Table);;MapValue of Argument[0];MapValue of ReturnValue;value -com.google.common.collect;TreeBasedTable;true;create;(TreeBasedTable);;MapKey of Argument[0];MapKey of ReturnValue;value +com.google.common.collect;TreeBasedTable;true;create;(TreeBasedTable);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value +com.google.common.collect;TreeBasedTable;true;create;(TreeBasedTable);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value com.google.common.collect;TreeBasedTable;true;create;(TreeBasedTable);;MapValue of Argument[0];MapValue of ReturnValue;value -com.google.common.collect;ArrayTable;true;create;(Iterable,Iterable);;Element of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of MapKey of ReturnValue;value -com.google.common.collect;ArrayTable;true;create;(Iterable,Iterable);;Element of Argument[1];SyntheticField[com.google.common.collect.Table.columnKey] of MapKey of ReturnValue;value +com.google.common.collect;ArrayTable;true;create;(Iterable,Iterable);;Element of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value +com.google.common.collect;ArrayTable;true;create;(Iterable,Iterable);;Element of Argument[1];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value com.google.common.collect;Collections2;false;filter;(Collection,Predicate);;Element of Argument[0];Element of ReturnValue;value com.google.common.collect;Collections2;false;orderedPermutations;(Iterable,Comparator);;Element of Argument[0];Element of ReturnValue;value com.google.common.collect;Collections2;false;orderedPermutations;(Iterable);;Element of Argument[0];Element of ReturnValue;value @@ -480,21 +514,25 @@ com.google.common.collect;Multimaps;false;unmodifiableSetMultimap;(ImmutableSetM com.google.common.collect;Multimaps;false;unmodifiableSetMultimap;(ImmutableSetMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value com.google.common.collect;Multimaps;false;unmodifiableSortedSetMultimap;(SortedSetMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value com.google.common.collect;Multimaps;false;unmodifiableSortedSetMultimap;(SortedSetMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value -com.google.common.collect;Tables;false;immutableCell;(Object,Object,Object);;Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of MapKey of ReturnValue;value -com.google.common.collect;Tables;false;immutableCell;(Object,Object,Object);;Argument[1];SyntheticField[com.google.common.collect.Table.columnKey] of MapKey of ReturnValue;value +com.google.common.collect;Tables;false;immutableCell;(Object,Object,Object);;Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value +com.google.common.collect;Tables;false;immutableCell;(Object,Object,Object);;Argument[1];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value com.google.common.collect;Tables;false;immutableCell;(Object,Object,Object);;Argument[2];MapValue of ReturnValue;value -com.google.common.collect;Tables;false;newCustomTable;(Map,Supplier);;MapKey of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of MapKey of ReturnValue;value -com.google.common.collect;Tables;false;newCustomTable;(Map,Supplier);;MapKey of MapValue of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of MapKey of ReturnValue;value +com.google.common.collect;Tables;false;newCustomTable;(Map,Supplier);;MapKey of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value +com.google.common.collect;Tables;false;newCustomTable;(Map,Supplier);;MapKey of MapValue of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value com.google.common.collect;Tables;false;newCustomTable;(Map,Supplier);;MapValue of MapValue of Argument[0];MapValue of ReturnValue;value -com.google.common.collect;Tables;false;transpose;(Table);;SyntheticField[com.google.common.collect.Table.rowKey] of MapKey of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of MapKey of ReturnValue;value -com.google.common.collect;Tables;false;transpose;(Table);;SyntheticField[com.google.common.collect.Table.columnKey] of MapKey of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of MapKey of ReturnValue;value +com.google.common.collect;Tables;false;transpose;(Table);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value +com.google.common.collect;Tables;false;transpose;(Table);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value com.google.common.collect;Tables;false;transpose;(Table);;MapValue of Argument[0];MapValue of ReturnValue;value com.google.common.collect;Tables;false;transformValues;(Table,Function);;MapKey of Argument[0];MapKey of ReturnValue;value -com.google.common.collect;Tables;false;synchronizedTable;(Table);;MapKey of Argument[0];MapKey of ReturnValue;value +com.google.common.collect;Tables;false;transformValues;(Table,Function);;MapKey of Argument[0];MapKey of ReturnValue;value +com.google.common.collect;Tables;false;synchronizedTable;(Table);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value +com.google.common.collect;Tables;false;synchronizedTable;(Table);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value com.google.common.collect;Tables;false;synchronizedTable;(Table);;MapValue of Argument[0];MapValue of ReturnValue;value -com.google.common.collect;Tables;false;unmodifiableTable;(Table);;MapKey of Argument[0];MapKey of ReturnValue;value +com.google.common.collect;Tables;false;unmodifiableTable;(Table);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value +com.google.common.collect;Tables;false;unmodifiableTable;(Table);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value com.google.common.collect;Tables;false;unmodifiableTable;(Table);;MapValue of Argument[0];MapValue of ReturnValue;value -com.google.common.collect;Tables;false;unmodifiableRowSortedTable;(RowSortedTable);;MapKey of Argument[0];MapKey of ReturnValue;value +com.google.common.collect;Tables;false;unmodifiableRowSortedTable;(RowSortedTable);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value +com.google.common.collect;Tables;false;unmodifiableRowSortedTable;(RowSortedTable);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value com.google.common.collect;Tables;false;unmodifiableRowSortedTable;(RowSortedTable);;MapValue of Argument[0];MapValue of ReturnValue;value com.google.common.collect;ObjectArrays;false;concat;(Object,Object[]);;Argument[0];ArrayElement of ReturnValue;value com.google.common.collect;ObjectArrays;false;concat;(Object,Object[]);;ArrayElement of Argument[1];ArrayElement of ReturnValue;value diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/ObjectArrays.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/ObjectArrays.java new file mode 100644 index 00000000000..974e0a4f439 --- /dev/null +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/ObjectArrays.java @@ -0,0 +1,23 @@ +// Generated automatically from com.google.common.collect.ObjectArrays for testing purposes + +package com.google.common.collect; + +import java.util.Collection; + +public class ObjectArrays +{ + protected ObjectArrays() {} + public static T[] concat(T p0, T[] p1){ return null; } + public static T[] concat(T[] p0, T p1){ return null; } + public static T[] concat(T[] p0, T[] p1, Class p2){ return null; } + public static T[] newArray(Class p0, int p1){ return null; } + public static T[] newArray(T[] p0, int p1){ return null; } + static T[] toArrayImpl(Collection p0, T[] p1){ return null; } + static T[] toArrayImpl(Object[] p0, int p1, int p2, T[] p3){ return null; } + static Object checkElementNotNull(Object p0, int p1){ return null; } + static Object[] checkElementsNotNull(Object... p0){ return null; } + static Object[] checkElementsNotNull(Object[] p0, int p1){ return null; } + static Object[] copyAsObjectArray(Object[] p0, int p1, int p2){ return null; } + static Object[] toArrayImpl(Collection p0){ return null; } + static void swap(Object[] p0, int p1, int p2){} +} From f94a61cc8ae611f43d05cb93c9af988a711e0ddc Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Tue, 27 Jul 2021 16:11:41 +0100 Subject: [PATCH 481/741] Remove unneeded rows --- java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll | 2 -- java/ql/test/library-tests/frameworks/guava/specs.csv | 2 -- 2 files changed, 4 deletions(-) diff --git a/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll b/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll index 2b06e05463b..7dcbaa4f7ec 100644 --- a/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll +++ b/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll @@ -159,8 +159,6 @@ private class GuavaCollectCsv extends SummaryModelCsv { "com.google.common.collect;ImmutableMap;true;of;;;Argument[7];MapValue of ReturnValue;value", "com.google.common.collect;ImmutableMap;true;of;;;Argument[8];MapKey of ReturnValue;value", "com.google.common.collect;ImmutableMap;true;of;;;Argument[9];MapValue of ReturnValue;value", - "com.google.common.collect;ImmutableMap;true;of;;;Argument[10];MapKey of ReturnValue;value", - "com.google.common.collect;ImmutableMap;true;of;;;Argument[11];MapValue of ReturnValue;value", "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[0];MapKey of ReturnValue;value", "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[1];MapValue of ReturnValue;value", "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[2];MapKey of ReturnValue;value", diff --git a/java/ql/test/library-tests/frameworks/guava/specs.csv b/java/ql/test/library-tests/frameworks/guava/specs.csv index 2e3394c3d4f..f00b6164265 100644 --- a/java/ql/test/library-tests/frameworks/guava/specs.csv +++ b/java/ql/test/library-tests/frameworks/guava/specs.csv @@ -138,8 +138,6 @@ com.google.common.collect;ImmutableMap;true;of;;;Argument[6];MapKey of ReturnVal com.google.common.collect;ImmutableMap;true;of;;;Argument[7];MapValue of ReturnValue;value com.google.common.collect;ImmutableMap;true;of;;;Argument[8];MapKey of ReturnValue;value com.google.common.collect;ImmutableMap;true;of;;;Argument[9];MapValue of ReturnValue;value -com.google.common.collect;ImmutableMap;true;of;;;Argument[10];MapKey of ReturnValue;value -com.google.common.collect;ImmutableMap;true;of;;;Argument[11];MapValue of ReturnValue;value com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[0];MapKey of ReturnValue;value com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[1];MapValue of ReturnValue;value com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[2];MapKey of ReturnValue;value From 84748cda76789f262520f73ee2e32c438b4a1c4c Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Tue, 27 Jul 2021 17:28:08 +0100 Subject: [PATCH 482/741] Increase field flow branch limit. I'm a little concerned that this appears to be necassary for tests; as it may mean that results involving these flow steps may not be found in real-world projects. --- java/ql/test/library-tests/frameworks/guava/generated/test.ql | 2 ++ 1 file changed, 2 insertions(+) diff --git a/java/ql/test/library-tests/frameworks/guava/generated/test.ql b/java/ql/test/library-tests/frameworks/guava/generated/test.ql index 0bdc348c3c0..cd03139bb25 100644 --- a/java/ql/test/library-tests/frameworks/guava/generated/test.ql +++ b/java/ql/test/library-tests/frameworks/guava/generated/test.ql @@ -39,6 +39,8 @@ class ValueFlowConf extends DataFlow::Configuration { override predicate isSink(DataFlow::Node n) { n.asExpr().(Argument).getCall().getCallee().hasName("sink") } + + override int fieldFlowBranchLimit() { result = 10 } } class TaintFlowConf extends TaintTracking::Configuration { From cd7c7c315225fe96335c6ea769a69d58df56062b Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Wed, 28 Jul 2021 10:42:15 +0100 Subject: [PATCH 483/741] Implement array getters/constructors in generated tests --- .../java/frameworks/guava/Collections.qll | 4 +- .../frameworks/guava/generated/Test.java | 898 +++++++++--------- .../frameworks/guava/generated/test.ql | 2 - 3 files changed, 451 insertions(+), 453 deletions(-) diff --git a/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll b/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll index 7dcbaa4f7ec..675ddef06b3 100644 --- a/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll +++ b/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll @@ -146,9 +146,9 @@ private class GuavaCollectCsv extends SummaryModelCsv { "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value", "com.google.common.collect;ImmutableSortedSet;true;of;;;ArrayElement of Argument[6];Element of ReturnValue;value", "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value", - "com.google.common.collect;ImmutableMultiset;true;of;;;Element of Argument[6];Element of ReturnValue;value", + "com.google.common.collect;ImmutableMultiset;true;of;;;ArrayElement of Argument[6];Element of ReturnValue;value", "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value", - "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Element of Argument[6];Element of ReturnValue;value", + "com.google.common.collect;ImmutableSortedMultiset;true;of;;;ArrayElement of Argument[6];Element of ReturnValue;value", "com.google.common.collect;ImmutableMap;true;of;;;Argument[0];MapKey of ReturnValue;value", "com.google.common.collect;ImmutableMap;true;of;;;Argument[1];MapValue of ReturnValue;value", "com.google.common.collect;ImmutableMap;true;of;;;Argument[2];MapKey of ReturnValue;value", diff --git a/java/ql/test/library-tests/frameworks/guava/generated/Test.java b/java/ql/test/library-tests/frameworks/guava/generated/Test.java index 6fc73d5b391..e31cf4cd3fd 100644 --- a/java/ql/test/library-tests/frameworks/guava/generated/Test.java +++ b/java/ql/test/library-tests/frameworks/guava/generated/Test.java @@ -90,7 +90,7 @@ import java.util.concurrent.PriorityBlockingQueue; // Test case generated by GenerateFlowTestCase.ql public class Test { - Object getArrayElement(Object container) { return null; } + T getArrayElement(T[] container) { return container[0]; } Object getElement(Object container) { return null; } Object getMapDifference_left(Object container) { return null; } Object getMapDifference_right(Object container) { return null; } @@ -98,7 +98,7 @@ public class Test { Object getMapValue(Object container) { return null; } Object getTable_columnKey(Object container) { return null; } Object getTable_rowKey(Object container) { return null; } - Object newWithArrayElement(Object element) { return null; } + T[] newWithArrayElement(T element) { return (T[]) new Object[]{element}; } Object newWithElement(Object element) { return null; } Object newWithMapDifference_left(Object element) { return null; } Object newWithMapDifference_right(Object element) { return null; } @@ -106,7 +106,7 @@ public class Test { Object newWithMapValue(Object element) { return null; } Object newWithTable_columnKey(Object element) { return null; } Object newWithTable_rowKey(Object element) { return null; } - Object source() { return null; } + T source() { return null; } void sink(Object o) { } public void test() throws Exception { @@ -142,28 +142,28 @@ public class Test { { // "com.google.common.collect;BiMap;true;forcePut;(Object,Object);;Argument[0];MapKey of Argument[-1];value" HashBiMap out = null; - Object in = (Object)source(); + Object in = source(); out.forcePut(in, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;BiMap;true;forcePut;(Object,Object);;Argument[0];MapKey of Argument[-1];value" BiMap out = null; - Object in = (Object)source(); + Object in = source(); out.forcePut(in, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;BiMap;true;forcePut;(Object,Object);;Argument[1];MapValue of Argument[-1];value" HashBiMap out = null; - Object in = (Object)source(); + Object in = source(); out.forcePut(null, in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;BiMap;true;forcePut;(Object,Object);;Argument[1];MapValue of Argument[-1];value" BiMap out = null; - Object in = (Object)source(); + Object in = source(); out.forcePut(null, in); sink(getMapValue(out)); // $ hasValueFlow } @@ -219,21 +219,21 @@ public class Test { { // "com.google.common.collect;ClassToInstanceMap;true;putInstance;(Class,Object);;Argument[1];MapValue of Argument[-1];value" MutableClassToInstanceMap out = null; - Object in = (Object)source(); + Object in = source(); out.putInstance(null, in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ClassToInstanceMap;true;putInstance;(Class,Object);;Argument[1];MapValue of Argument[-1];value" ImmutableClassToInstanceMap out = null; - Object in = (Object)source(); + Object in = source(); out.putInstance(null, in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ClassToInstanceMap;true;putInstance;(Class,Object);;Argument[1];MapValue of Argument[-1];value" ClassToInstanceMap out = null; - Object in = (Object)source(); + Object in = source(); out.putInstance(null, in); sink(getMapValue(out)); // $ hasValueFlow } @@ -366,182 +366,182 @@ public class Test { { // "com.google.common.collect;ImmutableClassToInstanceMap;true;of;(Class,Object);;Argument[0];MapKey of ReturnValue;value" ImmutableClassToInstanceMap out = null; - Class in = (Class)source(); + Class in = source(); out = ImmutableClassToInstanceMap.of(in, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableClassToInstanceMap;true;of;(Class,Object);;Argument[1];MapValue of ReturnValue;value" ImmutableClassToInstanceMap out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableClassToInstanceMap.of(null, in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;(Object);;Argument[0];Element of Argument[-1];value" ImmutableSortedSet.Builder out = null; - Object in = (Object)source(); + Object in = source(); out.add(in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;(Object);;Argument[0];Element of Argument[-1];value" ImmutableSortedMultiset.Builder out = null; - Object in = (Object)source(); + Object in = source(); out.add(in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;(Object);;Argument[0];Element of Argument[-1];value" ImmutableSet.Builder out = null; - Object in = (Object)source(); + Object in = source(); out.add(in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;(Object);;Argument[0];Element of Argument[-1];value" ImmutableMultiset.Builder out = null; - Object in = (Object)source(); + Object in = source(); out.add(in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;(Object);;Argument[0];Element of Argument[-1];value" ImmutableList.Builder out = null; - Object in = (Object)source(); + Object in = source(); out.add(in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;(Object);;Argument[0];Element of Argument[-1];value" ImmutableCollection.Builder out = null; - Object in = (Object)source(); + Object in = source(); out.add(in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;(Object[]);;ArrayElement of Argument[0];Element of Argument[-1];value" ImmutableSortedSet.Builder out = null; - Object[] in = (Object[])newWithArrayElement(source()); + Object[] in = newWithArrayElement(source()); out.add(in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;(Object[]);;ArrayElement of Argument[0];Element of Argument[-1];value" ImmutableSortedMultiset.Builder out = null; - Object[] in = (Object[])newWithArrayElement(source()); + Object[] in = newWithArrayElement(source()); out.add(in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;(Object[]);;ArrayElement of Argument[0];Element of Argument[-1];value" ImmutableSet.Builder out = null; - Object[] in = (Object[])newWithArrayElement(source()); + Object[] in = newWithArrayElement(source()); out.add(in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;(Object[]);;ArrayElement of Argument[0];Element of Argument[-1];value" ImmutableMultiset.Builder out = null; - Object[] in = (Object[])newWithArrayElement(source()); + Object[] in = newWithArrayElement(source()); out.add(in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;(Object[]);;ArrayElement of Argument[0];Element of Argument[-1];value" ImmutableList.Builder out = null; - Object[] in = (Object[])newWithArrayElement(source()); + Object[] in = newWithArrayElement(source()); out.add(in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;(Object[]);;ArrayElement of Argument[0];Element of Argument[-1];value" ImmutableCollection.Builder out = null; - Object[] in = (Object[])newWithArrayElement(source()); + Object[] in = newWithArrayElement(source()); out.add(in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;;;Argument[-1];ReturnValue;value" ImmutableSortedSet.Builder out = null; - ImmutableSortedSet.Builder in = (ImmutableSortedSet.Builder)source(); + ImmutableSortedSet.Builder in = source(); out = in.add((Object[])null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;;;Argument[-1];ReturnValue;value" ImmutableSortedSet.Builder out = null; - ImmutableSortedSet.Builder in = (ImmutableSortedSet.Builder)source(); + ImmutableSortedSet.Builder in = source(); out = in.add((Object)null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;;;Argument[-1];ReturnValue;value" ImmutableSortedMultiset.Builder out = null; - ImmutableSortedMultiset.Builder in = (ImmutableSortedMultiset.Builder)source(); + ImmutableSortedMultiset.Builder in = source(); out = in.add((Object[])null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;;;Argument[-1];ReturnValue;value" ImmutableSortedMultiset.Builder out = null; - ImmutableSortedMultiset.Builder in = (ImmutableSortedMultiset.Builder)source(); + ImmutableSortedMultiset.Builder in = source(); out = in.add((Object)null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;;;Argument[-1];ReturnValue;value" ImmutableSet.Builder out = null; - ImmutableSet.Builder in = (ImmutableSet.Builder)source(); + ImmutableSet.Builder in = source(); out = in.add((Object[])null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;;;Argument[-1];ReturnValue;value" ImmutableSet.Builder out = null; - ImmutableSet.Builder in = (ImmutableSet.Builder)source(); + ImmutableSet.Builder in = source(); out = in.add((Object)null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;;;Argument[-1];ReturnValue;value" ImmutableMultiset.Builder out = null; - ImmutableMultiset.Builder in = (ImmutableMultiset.Builder)source(); + ImmutableMultiset.Builder in = source(); out = in.add((Object[])null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;;;Argument[-1];ReturnValue;value" ImmutableMultiset.Builder out = null; - ImmutableMultiset.Builder in = (ImmutableMultiset.Builder)source(); + ImmutableMultiset.Builder in = source(); out = in.add((Object)null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;;;Argument[-1];ReturnValue;value" ImmutableList.Builder out = null; - ImmutableList.Builder in = (ImmutableList.Builder)source(); + ImmutableList.Builder in = source(); out = in.add((Object[])null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;;;Argument[-1];ReturnValue;value" ImmutableList.Builder out = null; - ImmutableList.Builder in = (ImmutableList.Builder)source(); + ImmutableList.Builder in = source(); out = in.add((Object)null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;;;Argument[-1];ReturnValue;value" ImmutableCollection.Builder out = null; - ImmutableCollection.Builder in = (ImmutableCollection.Builder)source(); + ImmutableCollection.Builder in = source(); out = in.add((Object[])null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;;;Argument[-1];ReturnValue;value" ImmutableCollection.Builder out = null; - ImmutableCollection.Builder in = (ImmutableCollection.Builder)source(); + ImmutableCollection.Builder in = source(); out = in.add((Object)null); sink(out); // $ hasValueFlow } @@ -632,84 +632,84 @@ public class Test { { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;;;Argument[-1];ReturnValue;value" ImmutableSortedSet.Builder out = null; - ImmutableSortedSet.Builder in = (ImmutableSortedSet.Builder)source(); + ImmutableSortedSet.Builder in = source(); out = in.addAll((Iterator)null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;;;Argument[-1];ReturnValue;value" ImmutableSortedSet.Builder out = null; - ImmutableSortedSet.Builder in = (ImmutableSortedSet.Builder)source(); + ImmutableSortedSet.Builder in = source(); out = in.addAll((Iterable)null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;;;Argument[-1];ReturnValue;value" ImmutableSortedMultiset.Builder out = null; - ImmutableSortedMultiset.Builder in = (ImmutableSortedMultiset.Builder)source(); + ImmutableSortedMultiset.Builder in = source(); out = in.addAll((Iterator)null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;;;Argument[-1];ReturnValue;value" ImmutableSortedMultiset.Builder out = null; - ImmutableSortedMultiset.Builder in = (ImmutableSortedMultiset.Builder)source(); + ImmutableSortedMultiset.Builder in = source(); out = in.addAll((Iterable)null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;;;Argument[-1];ReturnValue;value" ImmutableSet.Builder out = null; - ImmutableSet.Builder in = (ImmutableSet.Builder)source(); + ImmutableSet.Builder in = source(); out = in.addAll((Iterator)null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;;;Argument[-1];ReturnValue;value" ImmutableSet.Builder out = null; - ImmutableSet.Builder in = (ImmutableSet.Builder)source(); + ImmutableSet.Builder in = source(); out = in.addAll((Iterable)null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;;;Argument[-1];ReturnValue;value" ImmutableMultiset.Builder out = null; - ImmutableMultiset.Builder in = (ImmutableMultiset.Builder)source(); + ImmutableMultiset.Builder in = source(); out = in.addAll((Iterator)null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;;;Argument[-1];ReturnValue;value" ImmutableMultiset.Builder out = null; - ImmutableMultiset.Builder in = (ImmutableMultiset.Builder)source(); + ImmutableMultiset.Builder in = source(); out = in.addAll((Iterable)null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;;;Argument[-1];ReturnValue;value" ImmutableList.Builder out = null; - ImmutableList.Builder in = (ImmutableList.Builder)source(); + ImmutableList.Builder in = source(); out = in.addAll((Iterator)null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;;;Argument[-1];ReturnValue;value" ImmutableList.Builder out = null; - ImmutableList.Builder in = (ImmutableList.Builder)source(); + ImmutableList.Builder in = source(); out = in.addAll((Iterable)null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;;;Argument[-1];ReturnValue;value" ImmutableCollection.Builder out = null; - ImmutableCollection.Builder in = (ImmutableCollection.Builder)source(); + ImmutableCollection.Builder in = source(); out = in.addAll((Iterator)null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;;;Argument[-1];ReturnValue;value" ImmutableCollection.Builder out = null; - ImmutableCollection.Builder in = (ImmutableCollection.Builder)source(); + ImmutableCollection.Builder in = source(); out = in.addAll((Iterable)null); sink(out); // $ hasValueFlow } @@ -807,560 +807,560 @@ public class Test { { // "com.google.common.collect;ImmutableList;true;copyOf;(Object[]);;ArrayElement of Argument[0];Element of ReturnValue;value" ImmutableList out = null; - Object[] in = (Object[])newWithArrayElement(source()); + Object[] in = newWithArrayElement(source()); out = ImmutableList.copyOf(in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableList.of(null, null, null, null, null, null, null, null, null, null, null, in, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableList.of(null, null, null, null, null, null, null, null, null, null, in, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableList.of(null, null, null, null, null, null, null, null, null, null, in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableList.of(null, null, null, null, null, null, null, null, null, in, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableList.of(null, null, null, null, null, null, null, null, null, in, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableList.of(null, null, null, null, null, null, null, null, null, in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableList.of(null, null, null, null, null, null, null, null, in, null, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableList.of(null, null, null, null, null, null, null, null, in, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableList.of(null, null, null, null, null, null, null, null, in, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableList.of(null, null, null, null, null, null, null, null, in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableList.of(null, null, null, null, null, null, null, in, null, null, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableList.of(null, null, null, null, null, null, null, in, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableList.of(null, null, null, null, null, null, null, in, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableList.of(null, null, null, null, null, null, null, in, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableList.of(null, null, null, null, null, null, null, in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableList.of(null, null, null, null, null, null, in, null, null, null, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableList.of(null, null, null, null, null, null, in, null, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableList.of(null, null, null, null, null, null, in, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableList.of(null, null, null, null, null, null, in, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableList.of(null, null, null, null, null, null, in, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableList.of(null, null, null, null, null, null, in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableList.of(null, null, null, null, null, in, null, null, null, null, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableList.of(null, null, null, null, null, in, null, null, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableList.of(null, null, null, null, null, in, null, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableList.of(null, null, null, null, null, in, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableList.of(null, null, null, null, null, in, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableList.of(null, null, null, null, null, in, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableList.of(null, null, null, null, null, in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableList.of(null, null, null, null, in, null, null, null, null, null, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableList.of(null, null, null, null, in, null, null, null, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableList.of(null, null, null, null, in, null, null, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableList.of(null, null, null, null, in, null, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableList.of(null, null, null, null, in, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableList.of(null, null, null, null, in, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableList.of(null, null, null, null, in, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableList.of(null, null, null, null, in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableList.of(null, null, null, in, null, null, null, null, null, null, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableList.of(null, null, null, in, null, null, null, null, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableList.of(null, null, null, in, null, null, null, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableList.of(null, null, null, in, null, null, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableList.of(null, null, null, in, null, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableList.of(null, null, null, in, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableList.of(null, null, null, in, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableList.of(null, null, null, in, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableList.of(null, null, null, in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableList.of(null, null, in, null, null, null, null, null, null, null, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableList.of(null, null, in, null, null, null, null, null, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableList.of(null, null, in, null, null, null, null, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableList.of(null, null, in, null, null, null, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableList.of(null, null, in, null, null, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableList.of(null, null, in, null, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableList.of(null, null, in, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableList.of(null, null, in, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableList.of(null, null, in, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableList.of(null, null, in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableList.of(null, in, null, null, null, null, null, null, null, null, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableList.of(null, in, null, null, null, null, null, null, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableList.of(null, in, null, null, null, null, null, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableList.of(null, in, null, null, null, null, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableList.of(null, in, null, null, null, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableList.of(null, in, null, null, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableList.of(null, in, null, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableList.of(null, in, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableList.of(null, in, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableList.of(null, in, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableList.of(null, in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableList.of(in, null, null, null, null, null, null, null, null, null, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableList.of(in, null, null, null, null, null, null, null, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableList.of(in, null, null, null, null, null, null, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableList.of(in, null, null, null, null, null, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableList.of(in, null, null, null, null, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableList.of(in, null, null, null, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableList.of(in, null, null, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableList.of(in, null, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableList.of(in, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableList.of(in, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableList.of(in, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableList.of(in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;ArrayElement of Argument[12];Element of ReturnValue;value" ImmutableList out = null; - Object[] in = (Object[])newWithArrayElement(source()); + Object[] in = newWithArrayElement(source()); out = ImmutableList.of(null, null, null, null, null, null, null, null, null, null, null, null, in); sink(getElement(out)); // $ hasValueFlow } @@ -1423,14 +1423,14 @@ public class Test { { // "com.google.common.collect;ImmutableMap$Builder;true;orderEntriesByValue;(Comparator);;Argument[-1];ReturnValue;value" ImmutableSortedMap.Builder out = null; - ImmutableSortedMap.Builder in = (ImmutableSortedMap.Builder)source(); + ImmutableSortedMap.Builder in = source(); out = in.orderEntriesByValue(null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;orderEntriesByValue;(Comparator);;Argument[-1];ReturnValue;value" ImmutableMap.Builder out = null; - ImmutableMap.Builder in = (ImmutableMap.Builder)source(); + ImmutableMap.Builder in = source(); out = in.orderEntriesByValue(null); sink(out); // $ hasValueFlow } @@ -1465,56 +1465,56 @@ public class Test { { // "com.google.common.collect;ImmutableMap$Builder;true;put;(Object,Object);;Argument[0];MapKey of Argument[-1];value" ImmutableSortedMap.Builder out = null; - Object in = (Object)source(); + Object in = source(); out.put(in, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;put;(Object,Object);;Argument[0];MapKey of Argument[-1];value" ImmutableMap.Builder out = null; - Object in = (Object)source(); + Object in = source(); out.put(in, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;put;(Object,Object);;Argument[1];MapValue of Argument[-1];value" ImmutableSortedMap.Builder out = null; - Object in = (Object)source(); + Object in = source(); out.put(null, in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;put;(Object,Object);;Argument[1];MapValue of Argument[-1];value" ImmutableMap.Builder out = null; - Object in = (Object)source(); + Object in = source(); out.put(null, in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;put;;;Argument[-1];ReturnValue;value" ImmutableSortedMap.Builder out = null; - ImmutableSortedMap.Builder in = (ImmutableSortedMap.Builder)source(); + ImmutableSortedMap.Builder in = source(); out = in.put(null, null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;put;;;Argument[-1];ReturnValue;value" ImmutableSortedMap.Builder out = null; - ImmutableSortedMap.Builder in = (ImmutableSortedMap.Builder)source(); + ImmutableSortedMap.Builder in = source(); out = in.put(null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;put;;;Argument[-1];ReturnValue;value" ImmutableMap.Builder out = null; - ImmutableMap.Builder in = (ImmutableMap.Builder)source(); + ImmutableMap.Builder in = source(); out = in.put(null, null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;put;;;Argument[-1];ReturnValue;value" ImmutableMap.Builder out = null; - ImmutableMap.Builder in = (ImmutableMap.Builder)source(); + ImmutableMap.Builder in = source(); out = in.put(null); sink(out); // $ hasValueFlow } @@ -1577,28 +1577,28 @@ public class Test { { // "com.google.common.collect;ImmutableMap$Builder;true;putAll;;;Argument[-1];ReturnValue;value" ImmutableSortedMap.Builder out = null; - ImmutableSortedMap.Builder in = (ImmutableSortedMap.Builder)source(); + ImmutableSortedMap.Builder in = source(); out = in.putAll((Map)null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;putAll;;;Argument[-1];ReturnValue;value" ImmutableSortedMap.Builder out = null; - ImmutableSortedMap.Builder in = (ImmutableSortedMap.Builder)source(); + ImmutableSortedMap.Builder in = source(); out = in.putAll((Iterable)null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;putAll;;;Argument[-1];ReturnValue;value" ImmutableMap.Builder out = null; - ImmutableMap.Builder in = (ImmutableMap.Builder)source(); + ImmutableMap.Builder in = source(); out = in.putAll((Map)null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;putAll;;;Argument[-1];ReturnValue;value" ImmutableMap.Builder out = null; - ImmutableMap.Builder in = (ImmutableMap.Builder)source(); + ImmutableMap.Builder in = source(); out = in.putAll((Iterable)null); sink(out); // $ hasValueFlow } @@ -1633,210 +1633,210 @@ public class Test { { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[0];MapKey of ReturnValue;value" ImmutableMap out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableMap.of(in, null, null, null, null, null, null, null, null, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[0];MapKey of ReturnValue;value" ImmutableMap out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableMap.of(in, null, null, null, null, null, null, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[0];MapKey of ReturnValue;value" ImmutableMap out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableMap.of(in, null, null, null, null, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[0];MapKey of ReturnValue;value" ImmutableMap out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableMap.of(in, null, null, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[0];MapKey of ReturnValue;value" ImmutableMap out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableMap.of(in, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[1];MapValue of ReturnValue;value" ImmutableMap out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableMap.of(null, in, null, null, null, null, null, null, null, null); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[1];MapValue of ReturnValue;value" ImmutableMap out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableMap.of(null, in, null, null, null, null, null, null); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[1];MapValue of ReturnValue;value" ImmutableMap out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableMap.of(null, in, null, null, null, null); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[1];MapValue of ReturnValue;value" ImmutableMap out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableMap.of(null, in, null, null); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[1];MapValue of ReturnValue;value" ImmutableMap out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableMap.of(null, in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[2];MapKey of ReturnValue;value" ImmutableMap out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableMap.of(null, null, in, null, null, null, null, null, null, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[2];MapKey of ReturnValue;value" ImmutableMap out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableMap.of(null, null, in, null, null, null, null, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[2];MapKey of ReturnValue;value" ImmutableMap out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableMap.of(null, null, in, null, null, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[2];MapKey of ReturnValue;value" ImmutableMap out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableMap.of(null, null, in, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[3];MapValue of ReturnValue;value" ImmutableMap out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableMap.of(null, null, null, in, null, null, null, null, null, null); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[3];MapValue of ReturnValue;value" ImmutableMap out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableMap.of(null, null, null, in, null, null, null, null); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[3];MapValue of ReturnValue;value" ImmutableMap out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableMap.of(null, null, null, in, null, null); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[3];MapValue of ReturnValue;value" ImmutableMap out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableMap.of(null, null, null, in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[4];MapKey of ReturnValue;value" ImmutableMap out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableMap.of(null, null, null, null, in, null, null, null, null, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[4];MapKey of ReturnValue;value" ImmutableMap out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableMap.of(null, null, null, null, in, null, null, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[4];MapKey of ReturnValue;value" ImmutableMap out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableMap.of(null, null, null, null, in, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[5];MapValue of ReturnValue;value" ImmutableMap out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableMap.of(null, null, null, null, null, in, null, null, null, null); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[5];MapValue of ReturnValue;value" ImmutableMap out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableMap.of(null, null, null, null, null, in, null, null); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[5];MapValue of ReturnValue;value" ImmutableMap out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableMap.of(null, null, null, null, null, in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[6];MapKey of ReturnValue;value" ImmutableMap out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableMap.of(null, null, null, null, null, null, in, null, null, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[6];MapKey of ReturnValue;value" ImmutableMap out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableMap.of(null, null, null, null, null, null, in, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[7];MapValue of ReturnValue;value" ImmutableMap out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableMap.of(null, null, null, null, null, null, null, in, null, null); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[7];MapValue of ReturnValue;value" ImmutableMap out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableMap.of(null, null, null, null, null, null, null, in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[8];MapKey of ReturnValue;value" ImmutableMap out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableMap.of(null, null, null, null, null, null, null, null, in, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[9];MapValue of ReturnValue;value" ImmutableMap out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableMap.of(null, null, null, null, null, null, null, null, null, in); sink(getMapValue(out)); // $ hasValueFlow } @@ -1885,42 +1885,42 @@ public class Test { { // "com.google.common.collect;ImmutableMultimap$Builder;true;orderKeysBy;(Comparator);;Argument[-1];ReturnValue;value" ImmutableSetMultimap.Builder out = null; - ImmutableSetMultimap.Builder in = (ImmutableSetMultimap.Builder)source(); + ImmutableSetMultimap.Builder in = source(); out = in.orderKeysBy(null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;orderKeysBy;(Comparator);;Argument[-1];ReturnValue;value" ImmutableMultimap.Builder out = null; - ImmutableMultimap.Builder in = (ImmutableMultimap.Builder)source(); + ImmutableMultimap.Builder in = source(); out = in.orderKeysBy(null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;orderKeysBy;(Comparator);;Argument[-1];ReturnValue;value" ImmutableListMultimap.Builder out = null; - ImmutableListMultimap.Builder in = (ImmutableListMultimap.Builder)source(); + ImmutableListMultimap.Builder in = source(); out = in.orderKeysBy(null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;orderValuesBy;(Comparator);;Argument[-1];ReturnValue;value" ImmutableSetMultimap.Builder out = null; - ImmutableSetMultimap.Builder in = (ImmutableSetMultimap.Builder)source(); + ImmutableSetMultimap.Builder in = source(); out = in.orderValuesBy(null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;orderValuesBy;(Comparator);;Argument[-1];ReturnValue;value" ImmutableMultimap.Builder out = null; - ImmutableMultimap.Builder in = (ImmutableMultimap.Builder)source(); + ImmutableMultimap.Builder in = source(); out = in.orderValuesBy(null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;orderValuesBy;(Comparator);;Argument[-1];ReturnValue;value" ImmutableListMultimap.Builder out = null; - ImmutableListMultimap.Builder in = (ImmutableListMultimap.Builder)source(); + ImmutableListMultimap.Builder in = source(); out = in.orderValuesBy(null); sink(out); // $ hasValueFlow } @@ -1969,84 +1969,84 @@ public class Test { { // "com.google.common.collect;ImmutableMultimap$Builder;true;put;(Object,Object);;Argument[0];MapKey of Argument[-1];value" ImmutableSetMultimap.Builder out = null; - Object in = (Object)source(); + Object in = source(); out.put(in, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;put;(Object,Object);;Argument[0];MapKey of Argument[-1];value" ImmutableMultimap.Builder out = null; - Object in = (Object)source(); + Object in = source(); out.put(in, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;put;(Object,Object);;Argument[0];MapKey of Argument[-1];value" ImmutableListMultimap.Builder out = null; - Object in = (Object)source(); + Object in = source(); out.put(in, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;put;(Object,Object);;Argument[1];MapValue of Argument[-1];value" ImmutableSetMultimap.Builder out = null; - Object in = (Object)source(); + Object in = source(); out.put(null, in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;put;(Object,Object);;Argument[1];MapValue of Argument[-1];value" ImmutableMultimap.Builder out = null; - Object in = (Object)source(); + Object in = source(); out.put(null, in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;put;(Object,Object);;Argument[1];MapValue of Argument[-1];value" ImmutableListMultimap.Builder out = null; - Object in = (Object)source(); + Object in = source(); out.put(null, in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;put;;;Argument[-1];ReturnValue;value" ImmutableSetMultimap.Builder out = null; - ImmutableSetMultimap.Builder in = (ImmutableSetMultimap.Builder)source(); + ImmutableSetMultimap.Builder in = source(); out = in.put(null, null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;put;;;Argument[-1];ReturnValue;value" ImmutableSetMultimap.Builder out = null; - ImmutableSetMultimap.Builder in = (ImmutableSetMultimap.Builder)source(); + ImmutableSetMultimap.Builder in = source(); out = in.put(null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;put;;;Argument[-1];ReturnValue;value" ImmutableMultimap.Builder out = null; - ImmutableMultimap.Builder in = (ImmutableMultimap.Builder)source(); + ImmutableMultimap.Builder in = source(); out = in.put(null, null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;put;;;Argument[-1];ReturnValue;value" ImmutableMultimap.Builder out = null; - ImmutableMultimap.Builder in = (ImmutableMultimap.Builder)source(); + ImmutableMultimap.Builder in = source(); out = in.put(null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;put;;;Argument[-1];ReturnValue;value" ImmutableListMultimap.Builder out = null; - ImmutableListMultimap.Builder in = (ImmutableListMultimap.Builder)source(); + ImmutableListMultimap.Builder in = source(); out = in.put(null, null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;put;;;Argument[-1];ReturnValue;value" ImmutableListMultimap.Builder out = null; - ImmutableListMultimap.Builder in = (ImmutableListMultimap.Builder)source(); + ImmutableListMultimap.Builder in = source(); out = in.put(null); sink(out); // $ hasValueFlow } @@ -2137,21 +2137,21 @@ public class Test { { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" ImmutableSetMultimap.Builder out = null; - Object in = (Object)source(); + Object in = source(); out.putAll(in, (Iterable)null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" ImmutableMultimap.Builder out = null; - Object in = (Object)source(); + Object in = source(); out.putAll(in, (Iterable)null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" ImmutableListMultimap.Builder out = null; - Object in = (Object)source(); + Object in = source(); out.putAll(in, (Iterable)null); sink(getMapKey(out)); // $ hasValueFlow } @@ -2179,105 +2179,105 @@ public class Test { { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Object,Object[]);;ArrayElement of Argument[1];MapValue of Argument[-1];value" ImmutableSetMultimap.Builder out = null; - Object[] in = (Object[])newWithArrayElement(source()); + Object[] in = newWithArrayElement(source()); out.putAll((Object)null, in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Object,Object[]);;ArrayElement of Argument[1];MapValue of Argument[-1];value" ImmutableMultimap.Builder out = null; - Object[] in = (Object[])newWithArrayElement(source()); + Object[] in = newWithArrayElement(source()); out.putAll((Object)null, in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Object,Object[]);;ArrayElement of Argument[1];MapValue of Argument[-1];value" ImmutableListMultimap.Builder out = null; - Object[] in = (Object[])newWithArrayElement(source()); + Object[] in = newWithArrayElement(source()); out.putAll((Object)null, in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;;;Argument[-1];ReturnValue;value" ImmutableSetMultimap.Builder out = null; - ImmutableSetMultimap.Builder in = (ImmutableSetMultimap.Builder)source(); + ImmutableSetMultimap.Builder in = source(); out = in.putAll((Object)null, (Object[])null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;;;Argument[-1];ReturnValue;value" ImmutableSetMultimap.Builder out = null; - ImmutableSetMultimap.Builder in = (ImmutableSetMultimap.Builder)source(); + ImmutableSetMultimap.Builder in = source(); out = in.putAll((Object)null, (Iterable)null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;;;Argument[-1];ReturnValue;value" ImmutableSetMultimap.Builder out = null; - ImmutableSetMultimap.Builder in = (ImmutableSetMultimap.Builder)source(); + ImmutableSetMultimap.Builder in = source(); out = in.putAll((Multimap)null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;;;Argument[-1];ReturnValue;value" ImmutableSetMultimap.Builder out = null; - ImmutableSetMultimap.Builder in = (ImmutableSetMultimap.Builder)source(); + ImmutableSetMultimap.Builder in = source(); out = in.putAll((Iterable)null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;;;Argument[-1];ReturnValue;value" ImmutableMultimap.Builder out = null; - ImmutableMultimap.Builder in = (ImmutableMultimap.Builder)source(); + ImmutableMultimap.Builder in = source(); out = in.putAll((Object)null, (Object[])null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;;;Argument[-1];ReturnValue;value" ImmutableMultimap.Builder out = null; - ImmutableMultimap.Builder in = (ImmutableMultimap.Builder)source(); + ImmutableMultimap.Builder in = source(); out = in.putAll((Object)null, (Iterable)null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;;;Argument[-1];ReturnValue;value" ImmutableMultimap.Builder out = null; - ImmutableMultimap.Builder in = (ImmutableMultimap.Builder)source(); + ImmutableMultimap.Builder in = source(); out = in.putAll((Multimap)null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;;;Argument[-1];ReturnValue;value" ImmutableMultimap.Builder out = null; - ImmutableMultimap.Builder in = (ImmutableMultimap.Builder)source(); + ImmutableMultimap.Builder in = source(); out = in.putAll((Iterable)null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;;;Argument[-1];ReturnValue;value" ImmutableListMultimap.Builder out = null; - ImmutableListMultimap.Builder in = (ImmutableListMultimap.Builder)source(); + ImmutableListMultimap.Builder in = source(); out = in.putAll((Object)null, (Object[])null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;;;Argument[-1];ReturnValue;value" ImmutableListMultimap.Builder out = null; - ImmutableListMultimap.Builder in = (ImmutableListMultimap.Builder)source(); + ImmutableListMultimap.Builder in = source(); out = in.putAll((Object)null, (Iterable)null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;;;Argument[-1];ReturnValue;value" ImmutableListMultimap.Builder out = null; - ImmutableListMultimap.Builder in = (ImmutableListMultimap.Builder)source(); + ImmutableListMultimap.Builder in = source(); out = in.putAll((Multimap)null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;;;Argument[-1];ReturnValue;value" ImmutableListMultimap.Builder out = null; - ImmutableListMultimap.Builder in = (ImmutableListMultimap.Builder)source(); + ImmutableListMultimap.Builder in = source(); out = in.putAll((Iterable)null); sink(out); // $ hasValueFlow } @@ -2354,238 +2354,238 @@ public class Test { { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[0];MapKey of ReturnValue;value" ImmutableMultimap out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableMultimap.of(in, null, null, null, null, null, null, null, null, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[0];MapKey of ReturnValue;value" ImmutableMultimap out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableMultimap.of(in, null, null, null, null, null, null, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[0];MapKey of ReturnValue;value" ImmutableMultimap out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableMultimap.of(in, null, null, null, null, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[0];MapKey of ReturnValue;value" ImmutableMultimap out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableMultimap.of(in, null, null, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[0];MapKey of ReturnValue;value" ImmutableMultimap out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableMultimap.of(in, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[1];MapValue of ReturnValue;value" ImmutableMultimap out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableMultimap.of(null, in, null, null, null, null, null, null, null, null); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[1];MapValue of ReturnValue;value" ImmutableMultimap out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableMultimap.of(null, in, null, null, null, null, null, null); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[1];MapValue of ReturnValue;value" ImmutableMultimap out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableMultimap.of(null, in, null, null, null, null); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[1];MapValue of ReturnValue;value" ImmutableMultimap out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableMultimap.of(null, in, null, null); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[1];MapValue of ReturnValue;value" ImmutableMultimap out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableMultimap.of(null, in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[2];MapKey of ReturnValue;value" ImmutableMultimap out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableMultimap.of(null, null, in, null, null, null, null, null, null, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[2];MapKey of ReturnValue;value" ImmutableMultimap out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableMultimap.of(null, null, in, null, null, null, null, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[2];MapKey of ReturnValue;value" ImmutableMultimap out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableMultimap.of(null, null, in, null, null, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[2];MapKey of ReturnValue;value" ImmutableMultimap out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableMultimap.of(null, null, in, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[3];MapValue of ReturnValue;value" ImmutableMultimap out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableMultimap.of(null, null, null, in, null, null, null, null, null, null); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[3];MapValue of ReturnValue;value" ImmutableMultimap out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableMultimap.of(null, null, null, in, null, null, null, null); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[3];MapValue of ReturnValue;value" ImmutableMultimap out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableMultimap.of(null, null, null, in, null, null); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[3];MapValue of ReturnValue;value" ImmutableMultimap out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableMultimap.of(null, null, null, in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[4];MapKey of ReturnValue;value" ImmutableMultimap out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableMultimap.of(null, null, null, null, in, null, null, null, null, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[4];MapKey of ReturnValue;value" ImmutableMultimap out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableMultimap.of(null, null, null, null, in, null, null, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[4];MapKey of ReturnValue;value" ImmutableMultimap out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableMultimap.of(null, null, null, null, in, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[5];MapValue of ReturnValue;value" ImmutableMultimap out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableMultimap.of(null, null, null, null, null, in, null, null, null, null); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[5];MapValue of ReturnValue;value" ImmutableMultimap out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableMultimap.of(null, null, null, null, null, in, null, null); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[5];MapValue of ReturnValue;value" ImmutableMultimap out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableMultimap.of(null, null, null, null, null, in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[6];MapKey of ReturnValue;value" ImmutableMultimap out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableMultimap.of(null, null, null, null, null, null, in, null, null, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[6];MapKey of ReturnValue;value" ImmutableMultimap out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableMultimap.of(null, null, null, null, null, null, in, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[7];MapValue of ReturnValue;value" ImmutableMultimap out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableMultimap.of(null, null, null, null, null, null, null, in, null, null); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[7];MapValue of ReturnValue;value" ImmutableMultimap out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableMultimap.of(null, null, null, null, null, null, null, in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[8];MapKey of ReturnValue;value" ImmutableMultimap out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableMultimap.of(null, null, null, null, null, null, null, null, in, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[9];MapValue of ReturnValue;value" ImmutableMultimap out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableMultimap.of(null, null, null, null, null, null, null, null, null, in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset$Builder;true;addCopies;(Object,int);;Argument[-1];ReturnValue;value" ImmutableSortedMultiset.Builder out = null; - ImmutableSortedMultiset.Builder in = (ImmutableSortedMultiset.Builder)source(); + ImmutableSortedMultiset.Builder in = source(); out = in.addCopies(null, 0); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset$Builder;true;addCopies;(Object,int);;Argument[-1];ReturnValue;value" ImmutableMultiset.Builder out = null; - ImmutableMultiset.Builder in = (ImmutableMultiset.Builder)source(); + ImmutableMultiset.Builder in = source(); out = in.addCopies(null, 0); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset$Builder;true;addCopies;(Object,int);;Argument[0];Element of Argument[-1];value" ImmutableSortedMultiset.Builder out = null; - Object in = (Object)source(); + Object in = source(); out.addCopies(in, 0); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset$Builder;true;addCopies;(Object,int);;Argument[0];Element of Argument[-1];value" ImmutableMultiset.Builder out = null; - Object in = (Object)source(); + Object in = source(); out.addCopies(in, 0); sink(getElement(out)); // $ hasValueFlow } @@ -2606,161 +2606,161 @@ public class Test { { // "com.google.common.collect;ImmutableMultiset;true;copyOf;(Object[]);;ArrayElement of Argument[0];Element of ReturnValue;value" ImmutableMultiset out = null; - Object[] in = (Object[])newWithArrayElement(source()); + Object[] in = newWithArrayElement(source()); out = ImmutableMultiset.copyOf(in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableMultiset.of(null, null, null, null, null, in, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableMultiset.of(null, null, null, null, in, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableMultiset.of(null, null, null, null, in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableMultiset.of(null, null, null, in, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableMultiset.of(null, null, null, in, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableMultiset.of(null, null, null, in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableMultiset.of(null, null, in, null, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableMultiset.of(null, null, in, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableMultiset.of(null, null, in, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableMultiset.of(null, null, in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableMultiset.of(null, in, null, null, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableMultiset.of(null, in, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableMultiset.of(null, in, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableMultiset.of(null, in, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableMultiset.of(null, in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableMultiset.of(in, null, null, null, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableMultiset.of(in, null, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableMultiset.of(in, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableMultiset.of(in, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableMultiset.of(in, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableMultiset.of(in); sink(getElement(out)); // $ hasValueFlow } { - // "com.google.common.collect;ImmutableMultiset;true;of;;;Element of Argument[6];Element of ReturnValue;value" + // "com.google.common.collect;ImmutableMultiset;true;of;;;ArrayElement of Argument[6];Element of ReturnValue;value" ImmutableMultiset out = null; - Object[] in = (Object[])newWithElement(source()); + Object[] in = newWithArrayElement(source()); out = ImmutableMultiset.of(null, null, null, null, null, null, in); sink(getElement(out)); // $ hasValueFlow } @@ -2788,161 +2788,161 @@ public class Test { { // "com.google.common.collect;ImmutableSet;true;copyOf;(Object[]);;ArrayElement of Argument[0];Element of ReturnValue;value" ImmutableSet out = null; - Object[] in = (Object[])newWithArrayElement(source()); + Object[] in = newWithArrayElement(source()); out = ImmutableSet.copyOf(in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableSet.of(null, null, null, null, null, in, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableSet.of(null, null, null, null, in, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableSet.of(null, null, null, null, in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableSet.of(null, null, null, in, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableSet.of(null, null, null, in, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableSet.of(null, null, null, in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableSet.of(null, null, in, null, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableSet.of(null, null, in, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableSet.of(null, null, in, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableSet.of(null, null, in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableSet.of(null, in, null, null, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableSet.of(null, in, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableSet.of(null, in, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableSet.of(null, in, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableSet.of(null, in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableSet.of(in, null, null, null, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableSet.of(in, null, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableSet.of(in, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableSet.of(in, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableSet.of(in, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableSet.of(in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;ArrayElement of Argument[6];Element of ReturnValue;value" ImmutableSet out = null; - Object[] in = (Object[])newWithArrayElement(source()); + Object[] in = newWithArrayElement(source()); out = ImmutableSet.of(null, null, null, null, null, null, in); sink(getElement(out)); // $ hasValueFlow } @@ -3019,217 +3019,217 @@ public class Test { { // "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[0];MapKey of ReturnValue;value" ImmutableSortedMap out = null; - Comparable in = (Comparable)source(); + Comparable in = source(); out = ImmutableSortedMap.of(in, null, null, null, null, null, null, null, null, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[0];MapKey of ReturnValue;value" ImmutableSortedMap out = null; - Comparable in = (Comparable)source(); + Comparable in = source(); out = ImmutableSortedMap.of(in, null, null, null, null, null, null, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[0];MapKey of ReturnValue;value" ImmutableSortedMap out = null; - Comparable in = (Comparable)source(); + Comparable in = source(); out = ImmutableSortedMap.of(in, null, null, null, null, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[0];MapKey of ReturnValue;value" ImmutableSortedMap out = null; - Comparable in = (Comparable)source(); + Comparable in = source(); out = ImmutableSortedMap.of(in, null, null, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[0];MapKey of ReturnValue;value" ImmutableSortedMap out = null; - Comparable in = (Comparable)source(); + Comparable in = source(); out = ImmutableSortedMap.of(in, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[1];MapValue of ReturnValue;value" ImmutableSortedMap out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableSortedMap.of(null, in, null, null, null, null, null, null, null, null); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[1];MapValue of ReturnValue;value" ImmutableSortedMap out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableSortedMap.of(null, in, null, null, null, null, null, null); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[1];MapValue of ReturnValue;value" ImmutableSortedMap out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableSortedMap.of(null, in, null, null, null, null); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[1];MapValue of ReturnValue;value" ImmutableSortedMap out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableSortedMap.of(null, in, null, null); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[1];MapValue of ReturnValue;value" ImmutableSortedMap out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableSortedMap.of(null, in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[2];MapKey of ReturnValue;value" ImmutableSortedMap out = null; - Comparable in = (Comparable)source(); + Comparable in = source(); out = ImmutableSortedMap.of(null, null, in, null, null, null, null, null, null, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[2];MapKey of ReturnValue;value" ImmutableSortedMap out = null; - Comparable in = (Comparable)source(); + Comparable in = source(); out = ImmutableSortedMap.of(null, null, in, null, null, null, null, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[2];MapKey of ReturnValue;value" ImmutableSortedMap out = null; - Comparable in = (Comparable)source(); + Comparable in = source(); out = ImmutableSortedMap.of(null, null, in, null, null, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[2];MapKey of ReturnValue;value" ImmutableSortedMap out = null; - Comparable in = (Comparable)source(); + Comparable in = source(); out = ImmutableSortedMap.of(null, null, in, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[3];MapValue of ReturnValue;value" ImmutableSortedMap out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableSortedMap.of(null, null, null, in, null, null, null, null, null, null); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[3];MapValue of ReturnValue;value" ImmutableSortedMap out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableSortedMap.of(null, null, null, in, null, null, null, null); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[3];MapValue of ReturnValue;value" ImmutableSortedMap out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableSortedMap.of(null, null, null, in, null, null); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[3];MapValue of ReturnValue;value" ImmutableSortedMap out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableSortedMap.of(null, null, null, in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[4];MapKey of ReturnValue;value" ImmutableSortedMap out = null; - Comparable in = (Comparable)source(); + Comparable in = source(); out = ImmutableSortedMap.of(null, null, null, null, in, null, null, null, null, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[4];MapKey of ReturnValue;value" ImmutableSortedMap out = null; - Comparable in = (Comparable)source(); + Comparable in = source(); out = ImmutableSortedMap.of(null, null, null, null, in, null, null, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[4];MapKey of ReturnValue;value" ImmutableSortedMap out = null; - Comparable in = (Comparable)source(); + Comparable in = source(); out = ImmutableSortedMap.of(null, null, null, null, in, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[5];MapValue of ReturnValue;value" ImmutableSortedMap out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableSortedMap.of(null, null, null, null, null, in, null, null, null, null); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[5];MapValue of ReturnValue;value" ImmutableSortedMap out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableSortedMap.of(null, null, null, null, null, in, null, null); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[5];MapValue of ReturnValue;value" ImmutableSortedMap out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableSortedMap.of(null, null, null, null, null, in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[6];MapKey of ReturnValue;value" ImmutableSortedMap out = null; - Comparable in = (Comparable)source(); + Comparable in = source(); out = ImmutableSortedMap.of(null, null, null, null, null, null, in, null, null, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[6];MapKey of ReturnValue;value" ImmutableSortedMap out = null; - Comparable in = (Comparable)source(); + Comparable in = source(); out = ImmutableSortedMap.of(null, null, null, null, null, null, in, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[7];MapValue of ReturnValue;value" ImmutableSortedMap out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableSortedMap.of(null, null, null, null, null, null, null, in, null, null); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[7];MapValue of ReturnValue;value" ImmutableSortedMap out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableSortedMap.of(null, null, null, null, null, null, null, in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[8];MapKey of ReturnValue;value" ImmutableSortedMap out = null; - Comparable in = (Comparable)source(); + Comparable in = source(); out = ImmutableSortedMap.of(null, null, null, null, null, null, null, null, in, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[9];MapValue of ReturnValue;value" ImmutableSortedMap out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableSortedMap.of(null, null, null, null, null, null, null, null, null, in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMultiset;true;copyOf;(Comparable[]);;ArrayElement of Argument[0];Element of ReturnValue;value" ImmutableSortedMultiset out = null; - Comparable[] in = (Comparable[])newWithArrayElement(source()); + Comparable[] in = newWithArrayElement(source()); out = ImmutableSortedMultiset.copyOf(in); sink(getElement(out)); // $ hasValueFlow } @@ -3271,154 +3271,154 @@ public class Test { { // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedMultiset out = null; - Comparable in = (Comparable)source(); + Comparable in = source(); out = ImmutableSortedMultiset.of(null, null, null, null, null, in, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedMultiset out = null; - Comparable in = (Comparable)source(); + Comparable in = source(); out = ImmutableSortedMultiset.of(null, null, null, null, in, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedMultiset out = null; - Comparable in = (Comparable)source(); + Comparable in = source(); out = ImmutableSortedMultiset.of(null, null, null, null, in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedMultiset out = null; - Comparable in = (Comparable)source(); + Comparable in = source(); out = ImmutableSortedMultiset.of(null, null, null, in, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedMultiset out = null; - Comparable in = (Comparable)source(); + Comparable in = source(); out = ImmutableSortedMultiset.of(null, null, null, in, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedMultiset out = null; - Comparable in = (Comparable)source(); + Comparable in = source(); out = ImmutableSortedMultiset.of(null, null, null, in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedMultiset out = null; - Comparable in = (Comparable)source(); + Comparable in = source(); out = ImmutableSortedMultiset.of(null, null, in, null, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedMultiset out = null; - Comparable in = (Comparable)source(); + Comparable in = source(); out = ImmutableSortedMultiset.of(null, null, in, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedMultiset out = null; - Comparable in = (Comparable)source(); + Comparable in = source(); out = ImmutableSortedMultiset.of(null, null, in, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedMultiset out = null; - Comparable in = (Comparable)source(); + Comparable in = source(); out = ImmutableSortedMultiset.of(null, null, in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedMultiset out = null; - Comparable in = (Comparable)source(); + Comparable in = source(); out = ImmutableSortedMultiset.of(null, in, null, null, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedMultiset out = null; - Comparable in = (Comparable)source(); + Comparable in = source(); out = ImmutableSortedMultiset.of(null, in, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedMultiset out = null; - Comparable in = (Comparable)source(); + Comparable in = source(); out = ImmutableSortedMultiset.of(null, in, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedMultiset out = null; - Comparable in = (Comparable)source(); + Comparable in = source(); out = ImmutableSortedMultiset.of(null, in, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedMultiset out = null; - Comparable in = (Comparable)source(); + Comparable in = source(); out = ImmutableSortedMultiset.of(null, in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedMultiset out = null; - Comparable in = (Comparable)source(); + Comparable in = source(); out = ImmutableSortedMultiset.of(in, null, null, null, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedMultiset out = null; - Comparable in = (Comparable)source(); + Comparable in = source(); out = ImmutableSortedMultiset.of(in, null, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedMultiset out = null; - Comparable in = (Comparable)source(); + Comparable in = source(); out = ImmutableSortedMultiset.of(in, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedMultiset out = null; - Comparable in = (Comparable)source(); + Comparable in = source(); out = ImmutableSortedMultiset.of(in, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedMultiset out = null; - Comparable in = (Comparable)source(); + Comparable in = source(); out = ImmutableSortedMultiset.of(in, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedMultiset out = null; - Comparable in = (Comparable)source(); + Comparable in = source(); out = ImmutableSortedMultiset.of(in); sink(getElement(out)); // $ hasValueFlow } { - // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Element of Argument[6];Element of ReturnValue;value" + // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;ArrayElement of Argument[6];Element of ReturnValue;value" ImmutableSortedMultiset out = null; - Comparable[] in = (Comparable[])newWithElement(source()); + Comparable[] in = newWithArrayElement(source()); out = ImmutableSortedMultiset.of(null, null, null, null, null, null, in); sink(getElement(out)); // $ hasValueFlow } @@ -3432,7 +3432,7 @@ public class Test { { // "com.google.common.collect;ImmutableSortedSet;true;copyOf;(Comparable[]);;ArrayElement of Argument[0];Element of ReturnValue;value" ImmutableSortedSet out = null; - Comparable[] in = (Comparable[])newWithArrayElement(source()); + Comparable[] in = newWithArrayElement(source()); out = ImmutableSortedSet.copyOf(in); sink(getElement(out)); // $ hasValueFlow } @@ -3481,154 +3481,154 @@ public class Test { { // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedSet out = null; - Comparable in = (Comparable)source(); + Comparable in = source(); out = ImmutableSortedSet.of(null, null, null, null, null, in, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedSet out = null; - Comparable in = (Comparable)source(); + Comparable in = source(); out = ImmutableSortedSet.of(null, null, null, null, in, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedSet out = null; - Comparable in = (Comparable)source(); + Comparable in = source(); out = ImmutableSortedSet.of(null, null, null, null, in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedSet out = null; - Comparable in = (Comparable)source(); + Comparable in = source(); out = ImmutableSortedSet.of(null, null, null, in, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedSet out = null; - Comparable in = (Comparable)source(); + Comparable in = source(); out = ImmutableSortedSet.of(null, null, null, in, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedSet out = null; - Comparable in = (Comparable)source(); + Comparable in = source(); out = ImmutableSortedSet.of(null, null, null, in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedSet out = null; - Comparable in = (Comparable)source(); + Comparable in = source(); out = ImmutableSortedSet.of(null, null, in, null, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedSet out = null; - Comparable in = (Comparable)source(); + Comparable in = source(); out = ImmutableSortedSet.of(null, null, in, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedSet out = null; - Comparable in = (Comparable)source(); + Comparable in = source(); out = ImmutableSortedSet.of(null, null, in, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedSet out = null; - Comparable in = (Comparable)source(); + Comparable in = source(); out = ImmutableSortedSet.of(null, null, in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedSet out = null; - Comparable in = (Comparable)source(); + Comparable in = source(); out = ImmutableSortedSet.of(null, in, null, null, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedSet out = null; - Comparable in = (Comparable)source(); + Comparable in = source(); out = ImmutableSortedSet.of(null, in, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedSet out = null; - Comparable in = (Comparable)source(); + Comparable in = source(); out = ImmutableSortedSet.of(null, in, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedSet out = null; - Comparable in = (Comparable)source(); + Comparable in = source(); out = ImmutableSortedSet.of(null, in, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedSet out = null; - Comparable in = (Comparable)source(); + Comparable in = source(); out = ImmutableSortedSet.of(null, in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedSet out = null; - Comparable in = (Comparable)source(); + Comparable in = source(); out = ImmutableSortedSet.of(in, null, null, null, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedSet out = null; - Comparable in = (Comparable)source(); + Comparable in = source(); out = ImmutableSortedSet.of(in, null, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedSet out = null; - Comparable in = (Comparable)source(); + Comparable in = source(); out = ImmutableSortedSet.of(in, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedSet out = null; - Comparable in = (Comparable)source(); + Comparable in = source(); out = ImmutableSortedSet.of(in, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedSet out = null; - Comparable in = (Comparable)source(); + Comparable in = source(); out = ImmutableSortedSet.of(in, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedSet out = null; - Comparable in = (Comparable)source(); + Comparable in = source(); out = ImmutableSortedSet.of(in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;of;;;ArrayElement of Argument[6];Element of ReturnValue;value" ImmutableSortedSet out = null; - Comparable[] in = (Comparable[])newWithArrayElement(source()); + Comparable[] in = newWithArrayElement(source()); out = ImmutableSortedSet.of(null, null, null, null, null, null, in); sink(getElement(out)); // $ hasValueFlow } @@ -3656,21 +3656,21 @@ public class Test { { // "com.google.common.collect;ImmutableTable$Builder;true;orderColumnsBy;(Comparator);;Argument[-1];ReturnValue;value" ImmutableTable.Builder out = null; - ImmutableTable.Builder in = (ImmutableTable.Builder)source(); + ImmutableTable.Builder in = source(); out = in.orderColumnsBy(null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableTable$Builder;true;orderRowsBy;(Comparator);;Argument[-1];ReturnValue;value" ImmutableTable.Builder out = null; - ImmutableTable.Builder in = (ImmutableTable.Builder)source(); + ImmutableTable.Builder in = source(); out = in.orderRowsBy(null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableTable$Builder;true;put;(Cell);;Argument[-1];ReturnValue;value" ImmutableTable.Builder out = null; - ImmutableTable.Builder in = (ImmutableTable.Builder)source(); + ImmutableTable.Builder in = source(); out = in.put(null); sink(out); // $ hasValueFlow } @@ -3698,35 +3698,35 @@ public class Test { { // "com.google.common.collect;ImmutableTable$Builder;true;put;(Object,Object,Object);;Argument[-1];ReturnValue;value" ImmutableTable.Builder out = null; - ImmutableTable.Builder in = (ImmutableTable.Builder)source(); + ImmutableTable.Builder in = source(); out = in.put(null, null, null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableTable$Builder;true;put;(Object,Object,Object);;Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];value" ImmutableTable.Builder out = null; - Object in = (Object)source(); + Object in = source(); out.put(in, null, null); sink(getTable_rowKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableTable$Builder;true;put;(Object,Object,Object);;Argument[1];SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];value" ImmutableTable.Builder out = null; - Object in = (Object)source(); + Object in = source(); out.put(null, in, null); sink(getTable_columnKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableTable$Builder;true;put;(Object,Object,Object);;Argument[2];MapValue of Argument[-1];value" ImmutableTable.Builder out = null; - Object in = (Object)source(); + Object in = source(); out.put(null, null, in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableTable$Builder;true;putAll;(Table);;Argument[-1];ReturnValue;value" ImmutableTable.Builder out = null; - ImmutableTable.Builder in = (ImmutableTable.Builder)source(); + ImmutableTable.Builder in = source(); out = in.putAll(null); sink(out); // $ hasValueFlow } @@ -3775,21 +3775,21 @@ public class Test { { // "com.google.common.collect;ImmutableTable;true;of;(Object,Object,Object);;Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value" ImmutableTable out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableTable.of(in, null, null); sink(getTable_rowKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableTable;true;of;(Object,Object,Object);;Argument[1];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value" ImmutableTable out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableTable.of(null, in, null); sink(getTable_columnKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableTable;true;of;(Object,Object,Object);;Argument[2];MapValue of ReturnValue;value" ImmutableTable out = null; - Object in = (Object)source(); + Object in = source(); out = ImmutableTable.of(null, null, in); sink(getMapValue(out)); // $ hasValueFlow } @@ -3894,7 +3894,7 @@ public class Test { { // "com.google.common.collect;Iterables;false;cycle;(Object[]);;ArrayElement of Argument[0];Element of ReturnValue;value" Iterable out = null; - Object[] in = (Object[])newWithArrayElement(source()); + Object[] in = newWithArrayElement(source()); out = Iterables.cycle(in); sink(getElement(out)); // $ hasValueFlow } @@ -3922,7 +3922,7 @@ public class Test { { // "com.google.common.collect;Iterables;false;find;(Iterable,Predicate,Object);;Argument[2];Element of ReturnValue;value" Object out = null; - Object in = (Object)source(); + Object in = source(); out = Iterables.find(null, null, in); sink(getElement(out)); // $ hasValueFlow } @@ -3943,7 +3943,7 @@ public class Test { { // "com.google.common.collect;Iterables;false;get;(Iterable,int,Object);;Argument[2];Element of ReturnValue;value" Object out = null; - Object in = (Object)source(); + Object in = source(); out = Iterables.get(null, 0, in); sink(getElement(out)); // $ hasValueFlow } @@ -3964,7 +3964,7 @@ public class Test { { // "com.google.common.collect;Iterables;false;getLast;(Iterable,Object);;Argument[1];Element of ReturnValue;value" Object out = null; - Object in = (Object)source(); + Object in = source(); out = Iterables.getLast(null, in); sink(getElement(out)); // $ hasValueFlow } @@ -3985,7 +3985,7 @@ public class Test { { // "com.google.common.collect;Iterables;false;getOnlyElement;(Iterable,Object);;Argument[1];Element of ReturnValue;value" Object out = null; - Object in = (Object)source(); + Object in = source(); out = Iterables.getOnlyElement(null, in); sink(getElement(out)); // $ hasValueFlow } @@ -4174,7 +4174,7 @@ public class Test { { // "com.google.common.collect;Iterators;false;cycle;(Object[]);;ArrayElement of Argument[0];Element of ReturnValue;value" Iterator out = null; - Object[] in = (Object[])newWithArrayElement(source()); + Object[] in = newWithArrayElement(source()); out = Iterators.cycle(in); sink(getElement(out)); // $ hasValueFlow } @@ -4202,7 +4202,7 @@ public class Test { { // "com.google.common.collect;Iterators;false;find;(Iterator,Predicate,Object);;Argument[2];Element of ReturnValue;value" Object out = null; - Object in = (Object)source(); + Object in = source(); out = Iterators.find(null, null, in); sink(getElement(out)); // $ hasValueFlow } @@ -4216,7 +4216,7 @@ public class Test { { // "com.google.common.collect;Iterators;false;forArray;(Object[]);;ArrayElement of Argument[0];Element of ReturnValue;value" UnmodifiableIterator out = null; - Object[] in = (Object[])newWithArrayElement(source()); + Object[] in = newWithArrayElement(source()); out = Iterators.forArray(in); sink(getElement(out)); // $ hasValueFlow } @@ -4237,7 +4237,7 @@ public class Test { { // "com.google.common.collect;Iterators;false;get;(Iterator,int,Object);;Argument[2];Element of ReturnValue;value" Object out = null; - Object in = (Object)source(); + Object in = source(); out = Iterators.get(null, 0, in); sink(getElement(out)); // $ hasValueFlow } @@ -4258,7 +4258,7 @@ public class Test { { // "com.google.common.collect;Iterators;false;getLast;(Iterator,Object);;Argument[1];Element of ReturnValue;value" Object out = null; - Object in = (Object)source(); + Object in = source(); out = Iterators.getLast(null, in); sink(getElement(out)); // $ hasValueFlow } @@ -4272,7 +4272,7 @@ public class Test { { // "com.google.common.collect;Iterators;false;getNext;(Iterator,Object);;Argument[1];Element of ReturnValue;value" Object out = null; - Object in = (Object)source(); + Object in = source(); out = Iterators.getNext(null, in); sink(getElement(out)); // $ hasValueFlow } @@ -4293,7 +4293,7 @@ public class Test { { // "com.google.common.collect;Iterators;false;getOnlyElement;(Iterator,Object);;Argument[1];Element of ReturnValue;value" Object out = null; - Object in = (Object)source(); + Object in = source(); out = Iterators.getOnlyElement(null, in); sink(getElement(out)); // $ hasValueFlow } @@ -4349,7 +4349,7 @@ public class Test { { // "com.google.common.collect;Iterators;false;singletonIterator;(Object);;Argument[0];Element of ReturnValue;value" UnmodifiableIterator out = null; - Object in = (Object)source(); + Object in = source(); out = Iterators.singletonIterator(in); sink(getElement(out)); // $ hasValueFlow } @@ -4426,35 +4426,35 @@ public class Test { { // "com.google.common.collect;Lists;false;asList;(Object,Object,Object[]);;Argument[0..1];Element of ReturnValue;value" List out = null; - Object in = (Object)source(); + Object in = source(); out = Lists.asList(null, in, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Lists;false;asList;(Object,Object,Object[]);;Argument[0..1];Element of ReturnValue;value" List out = null; - Object in = (Object)source(); + Object in = source(); out = Lists.asList(in, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Lists;false;asList;(Object,Object,Object[]);;ArrayElement of Argument[2];Element of ReturnValue;value" List out = null; - Object[] in = (Object[])newWithArrayElement(source()); + Object[] in = newWithArrayElement(source()); out = Lists.asList(null, null, in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Lists;false;asList;(Object,Object[]);;Argument[0];Element of ReturnValue;value" List out = null; - Object in = (Object)source(); + Object in = source(); out = Lists.asList(in, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Lists;false;asList;(Object,Object[]);;ArrayElement of Argument[1];Element of ReturnValue;value" List out = null; - Object[] in = (Object[])newWithArrayElement(source()); + Object[] in = newWithArrayElement(source()); out = Lists.asList(null, in); sink(getElement(out)); // $ hasValueFlow } @@ -4475,14 +4475,14 @@ public class Test { { // "com.google.common.collect;Lists;false;charactersOf;(CharSequence);;Argument[0];Element of ReturnValue;taint" List out = null; - CharSequence in = (CharSequence)source(); + CharSequence in = source(); out = Lists.charactersOf(in); sink(getElement(out)); // $ hasTaintFlow } { // "com.google.common.collect;Lists;false;charactersOf;(String);;Argument[0];Element of ReturnValue;taint" ImmutableList out = null; - String in = (String)source(); + String in = source(); out = Lists.charactersOf(in); sink(getElement(out)); // $ hasTaintFlow } @@ -4503,7 +4503,7 @@ public class Test { { // "com.google.common.collect;Lists;false;newArrayList;(Object[]);;ArrayElement of Argument[0];Element of ReturnValue;value" ArrayList out = null; - Object[] in = (Object[])newWithArrayElement(source()); + Object[] in = newWithArrayElement(source()); out = Lists.newArrayList(in); sink(getElement(out)); // $ hasValueFlow } @@ -5007,14 +5007,14 @@ public class Test { { // "com.google.common.collect;Maps;false;immutableEntry;(Object,Object);;Argument[0];MapKey of ReturnValue;value" Map.Entry out = null; - Object in = (Object)source(); + Object in = source(); out = Maps.immutableEntry(in, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;immutableEntry;(Object,Object);;Argument[1];MapValue of ReturnValue;value" Map.Entry out = null; - Object in = (Object)source(); + Object in = source(); out = Maps.immutableEntry(null, in); sink(getMapValue(out)); // $ hasValueFlow } @@ -5455,42 +5455,42 @@ public class Test { { // "com.google.common.collect;Multimap;true;put;(Object,Object);;Argument[0];MapKey of Argument[-1];value" Multimap out = null; - Object in = (Object)source(); + Object in = source(); out.put(in, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;put;(Object,Object);;Argument[0];MapKey of Argument[-1];value" LinkedListMultimap out = null; - Object in = (Object)source(); + Object in = source(); out.put(in, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;put;(Object,Object);;Argument[0];MapKey of Argument[-1];value" ImmutableMultimap out = null; - Object in = (Object)source(); + Object in = source(); out.put(in, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;put;(Object,Object);;Argument[1];MapValue of Argument[-1];value" Multimap out = null; - Object in = (Object)source(); + Object in = source(); out.put(null, in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;put;(Object,Object);;Argument[1];MapValue of Argument[-1];value" LinkedListMultimap out = null; - Object in = (Object)source(); + Object in = source(); out.put(null, in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;put;(Object,Object);;Argument[1];MapValue of Argument[-1];value" ImmutableMultimap out = null; - Object in = (Object)source(); + Object in = source(); out.put(null, in); sink(getMapValue(out)); // $ hasValueFlow } @@ -5525,14 +5525,14 @@ public class Test { { // "com.google.common.collect;Multimap;true;putAll;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" Multimap out = null; - Object in = (Object)source(); + Object in = source(); out.putAll(in, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;putAll;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" ImmutableMultimap out = null; - Object in = (Object)source(); + Object in = source(); out.putAll(in, null); sink(getMapKey(out)); // $ hasValueFlow } @@ -5609,63 +5609,63 @@ public class Test { { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" SortedSetMultimap out = null; - Object in = (Object)source(); + Object in = source(); out.replaceValues(in, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" SetMultimap out = null; - Object in = (Object)source(); + Object in = source(); out.replaceValues(in, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" Multimap out = null; - Object in = (Object)source(); + Object in = source(); out.replaceValues(in, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" ListMultimap out = null; - Object in = (Object)source(); + Object in = source(); out.replaceValues(in, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" LinkedListMultimap out = null; - Object in = (Object)source(); + Object in = source(); out.replaceValues(in, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" LinkedHashMultimap out = null; - Object in = (Object)source(); + Object in = source(); out.replaceValues(in, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" ImmutableSetMultimap out = null; - Object in = (Object)source(); + Object in = source(); out.replaceValues(in, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" ImmutableMultimap out = null; - Object in = (Object)source(); + Object in = source(); out.replaceValues(in, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" ImmutableListMultimap out = null; - Object in = (Object)source(); + Object in = source(); out.replaceValues(in, null); sink(getMapKey(out)); // $ hasValueFlow } @@ -6239,28 +6239,28 @@ public class Test { { // "com.google.common.collect;Multiset;true;add;(Object,int);;Argument[0];Element of Argument[-1];value" TreeMultiset out = null; - Object in = (Object)source(); + Object in = source(); out.add(in, 0); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multiset;true;add;(Object,int);;Argument[0];Element of Argument[-1];value" Multiset out = null; - Object in = (Object)source(); + Object in = source(); out.add(in, 0); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multiset;true;add;(Object,int);;Argument[0];Element of Argument[-1];value" ImmutableMultiset out = null; - Object in = (Object)source(); + Object in = source(); out.add(in, 0); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multiset;true;add;(Object,int);;Argument[0];Element of Argument[-1];value" ConcurrentHashMultiset out = null; - Object in = (Object)source(); + Object in = source(); out.add(in, 0); sink(getElement(out)); // $ hasValueFlow } @@ -6316,56 +6316,56 @@ public class Test { { // "com.google.common.collect;Multiset;true;setCount;(Object,int);;Argument[0];Element of Argument[-1];value" TreeMultiset out = null; - Object in = (Object)source(); + Object in = source(); out.setCount(in, 0); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multiset;true;setCount;(Object,int);;Argument[0];Element of Argument[-1];value" Multiset out = null; - Object in = (Object)source(); + Object in = source(); out.setCount(in, 0); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multiset;true;setCount;(Object,int);;Argument[0];Element of Argument[-1];value" ImmutableMultiset out = null; - Object in = (Object)source(); + Object in = source(); out.setCount(in, 0); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multiset;true;setCount;(Object,int);;Argument[0];Element of Argument[-1];value" ConcurrentHashMultiset out = null; - Object in = (Object)source(); + Object in = source(); out.setCount(in, 0); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multiset;true;setCount;(Object,int,int);;Argument[0];Element of Argument[-1];value" TreeMultiset out = null; - Object in = (Object)source(); + Object in = source(); out.setCount(in, 0, 0); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multiset;true;setCount;(Object,int,int);;Argument[0];Element of Argument[-1];value" Multiset out = null; - Object in = (Object)source(); + Object in = source(); out.setCount(in, 0, 0); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multiset;true;setCount;(Object,int,int);;Argument[0];Element of Argument[-1];value" ImmutableMultiset out = null; - Object in = (Object)source(); + Object in = source(); out.setCount(in, 0, 0); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multiset;true;setCount;(Object,int,int);;Argument[0];Element of Argument[-1];value" ConcurrentHashMultiset out = null; - Object in = (Object)source(); + Object in = source(); out.setCount(in, 0, 0); sink(getElement(out)); // $ hasValueFlow } @@ -6393,7 +6393,7 @@ public class Test { { // "com.google.common.collect;Multisets;false;immutableEntry;(Object,int);;Argument[0];Element of ReturnValue;value" Multiset.Entry out = null; - Object in = (Object)source(); + Object in = source(); out = Multisets.immutableEntry(in, 0); sink(getElement(out)); // $ hasValueFlow } @@ -6463,42 +6463,42 @@ public class Test { { // "com.google.common.collect;ObjectArrays;false;concat;(Object,Object[]);;Argument[0];ArrayElement of ReturnValue;value" Object[] out = null; - Object in = (Object)source(); + Object in = source(); out = ObjectArrays.concat(in, (Object[])null); sink(getArrayElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ObjectArrays;false;concat;(Object,Object[]);;ArrayElement of Argument[1];ArrayElement of ReturnValue;value" Object[] out = null; - Object[] in = (Object[])newWithArrayElement(source()); + Object[] in = newWithArrayElement(source()); out = ObjectArrays.concat((Object)null, in); sink(getArrayElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ObjectArrays;false;concat;(Object[],Object);;Argument[1];ArrayElement of ReturnValue;value" Object[] out = null; - Object in = (Object)source(); + Object in = source(); out = ObjectArrays.concat((Object[])null, in); sink(getArrayElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ObjectArrays;false;concat;(Object[],Object);;ArrayElement of Argument[0];ArrayElement of ReturnValue;value" Object[] out = null; - Object[] in = (Object[])newWithArrayElement(source()); + Object[] in = newWithArrayElement(source()); out = ObjectArrays.concat(in, (Object)null); sink(getArrayElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ObjectArrays;false;concat;(Object[],Object[],Class);;ArrayElement of Argument[0..1];ArrayElement of ReturnValue;value" Object[] out = null; - Object[] in = (Object[])newWithArrayElement(source()); + Object[] in = newWithArrayElement(source()); out = ObjectArrays.concat(null, in, null); sink(getArrayElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ObjectArrays;false;concat;(Object[],Object[],Class);;ArrayElement of Argument[0..1];ArrayElement of ReturnValue;value" Object[] out = null; - Object[] in = (Object[])newWithArrayElement(source()); + Object[] in = newWithArrayElement(source()); out = ObjectArrays.concat(in, null, null); sink(getArrayElement(out)); // $ hasValueFlow } @@ -6666,7 +6666,7 @@ public class Test { { // "com.google.common.collect;Sets;false;newHashSet;(Object[]);;ArrayElement of Argument[0];Element of ReturnValue;value" HashSet out = null; - Object[] in = (Object[])newWithArrayElement(source()); + Object[] in = newWithArrayElement(source()); out = Sets.newHashSet(in); sink(getElement(out)); // $ hasValueFlow } @@ -6981,63 +6981,63 @@ public class Test { { // "com.google.common.collect;Table;true;put;(Object,Object,Object);;Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];value" Table out = null; - Object in = (Object)source(); + Object in = source(); out.put(in, null, null); sink(getTable_rowKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;put;(Object,Object,Object);;Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];value" ImmutableTable out = null; - Object in = (Object)source(); + Object in = source(); out.put(in, null, null); sink(getTable_rowKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;put;(Object,Object,Object);;Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];value" ArrayTable out = null; - Object in = (Object)source(); + Object in = source(); out.put(in, null, null); sink(getTable_rowKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;put;(Object,Object,Object);;Argument[1];SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];value" Table out = null; - Object in = (Object)source(); + Object in = source(); out.put(null, in, null); sink(getTable_columnKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;put;(Object,Object,Object);;Argument[1];SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];value" ImmutableTable out = null; - Object in = (Object)source(); + Object in = source(); out.put(null, in, null); sink(getTable_columnKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;put;(Object,Object,Object);;Argument[1];SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];value" ArrayTable out = null; - Object in = (Object)source(); + Object in = source(); out.put(null, in, null); sink(getTable_columnKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;put;(Object,Object,Object);;Argument[2];MapValue of Argument[-1];value" Table out = null; - Object in = (Object)source(); + Object in = source(); out.put(null, null, in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;put;(Object,Object,Object);;Argument[2];MapValue of Argument[-1];value" ImmutableTable out = null; - Object in = (Object)source(); + Object in = source(); out.put(null, null, in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;put;(Object,Object,Object);;Argument[2];MapValue of Argument[-1];value" ArrayTable out = null; - Object in = (Object)source(); + Object in = source(); out.put(null, null, in); sink(getMapValue(out)); // $ hasValueFlow } @@ -7352,21 +7352,21 @@ public class Test { { // "com.google.common.collect;Tables;false;immutableCell;(Object,Object,Object);;Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value" Table.Cell out = null; - Object in = (Object)source(); + Object in = source(); out = Tables.immutableCell(in, null, null); sink(getTable_rowKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Tables;false;immutableCell;(Object,Object,Object);;Argument[1];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value" Table.Cell out = null; - Object in = (Object)source(); + Object in = source(); out = Tables.immutableCell(null, in, null); sink(getTable_columnKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Tables;false;immutableCell;(Object,Object,Object);;Argument[2];MapValue of ReturnValue;value" Table.Cell out = null; - Object in = (Object)source(); + Object in = source(); out = Tables.immutableCell(null, null, in); sink(getMapValue(out)); // $ hasValueFlow } diff --git a/java/ql/test/library-tests/frameworks/guava/generated/test.ql b/java/ql/test/library-tests/frameworks/guava/generated/test.ql index cd03139bb25..407670ffdb0 100644 --- a/java/ql/test/library-tests/frameworks/guava/generated/test.ql +++ b/java/ql/test/library-tests/frameworks/guava/generated/test.ql @@ -9,8 +9,6 @@ class SummaryModelTest extends SummaryModelCsv { row = [ //"package;type;overrides;name;signature;ext;inputspec;outputspec;kind", - "generatedtest;Test;false;newWithArrayElement;;;Argument[0];ArrayElement of ReturnValue;value", - "generatedtest;Test;false;getArrayElement;;;ArrayElement of Argument[0];ReturnValue;value", "generatedtest;Test;false;getElement;;;Element of Argument[0];ReturnValue;value", "generatedtest;Test;false;newWithElement;;;Argument[0];Element of ReturnValue;value", "generatedtest;Test;false;getMapKey;;;MapKey of Argument[0];ReturnValue;value", From 338a6f21149b3133a7eb6f6c68823bdbfa44b35d Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Wed, 28 Jul 2021 11:15:48 +0100 Subject: [PATCH 484/741] Fill in implementations for getElement --- .../java/frameworks/guava/Collections.qll | 16 +- .../frameworks/guava/generated/Test.java | 935 +++++++++--------- 2 files changed, 479 insertions(+), 472 deletions(-) diff --git a/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll b/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll index 675ddef06b3..4f2f19799f6 100644 --- a/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll +++ b/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll @@ -281,7 +281,7 @@ private class GuavaCollectCsv extends SummaryModelCsv { "com.google.common.collect;Iterators;false;filter;(Iterator,Predicate);;Element of Argument[0];Element of ReturnValue;value", "com.google.common.collect;Iterators;false;find;(Iterator,Predicate);;Element of Argument[0];ReturnValue;value", "com.google.common.collect;Iterators;false;find;(Iterator,Predicate,Object);;Element of Argument[0];ReturnValue;value", - "com.google.common.collect;Iterators;false;find;(Iterator,Predicate,Object);;Argument[2];Element of ReturnValue;value", + "com.google.common.collect;Iterators;false;find;(Iterator,Predicate,Object);;Argument[2];ReturnValue;value", "com.google.common.collect;Iterators;false;forArray;(Object[]);;ArrayElement of Argument[0];Element of ReturnValue;value", "com.google.common.collect;Iterators;false;forEnumeration;(Enumeration);;Element of Argument[0];Element of ReturnValue;value", "com.google.common.collect;Iterators;false;get;(Iterator,int);;Element of Argument[0];ReturnValue;value", @@ -289,12 +289,12 @@ private class GuavaCollectCsv extends SummaryModelCsv { "com.google.common.collect;Iterators;false;get;(Iterator,int,Object);;Argument[2];Element of ReturnValue;value", "com.google.common.collect;Iterators;false;getLast;(Iterator);;Element of Argument[0];ReturnValue;value", "com.google.common.collect;Iterators;false;getLast;(Iterator,Object);;Element of Argument[0];ReturnValue;value", - "com.google.common.collect;Iterators;false;getLast;(Iterator,Object);;Argument[1];Element of ReturnValue;value", + "com.google.common.collect;Iterators;false;getLast;(Iterator,Object);;Argument[1];ReturnValue;value", "com.google.common.collect;Iterators;false;getNext;(Iterator,Object);;Element of Argument[0];ReturnValue;value", - "com.google.common.collect;Iterators;false;getNext;(Iterator,Object);;Argument[1];Element of ReturnValue;value", + "com.google.common.collect;Iterators;false;getNext;(Iterator,Object);;Argument[1];ReturnValue;value", "com.google.common.collect;Iterators;false;getOnlyElement;(Iterator);;Element of Argument[0];ReturnValue;value", "com.google.common.collect;Iterators;false;getOnlyElement;(Iterator,Object);;Element of Argument[0];ReturnValue;value", - "com.google.common.collect;Iterators;false;getOnlyElement;(Iterator,Object);;Argument[1];Element of ReturnValue;value", + "com.google.common.collect;Iterators;false;getOnlyElement;(Iterator,Object);;Argument[1];ReturnValue;value", "com.google.common.collect;Iterators;false;limit;(Iterator,int);;Element of Argument[0];Element of ReturnValue;value", "com.google.common.collect;Iterators;false;mergeSorted;(Iterable,Comparator);;Element of Element of Argument[0];Element of ReturnValue;value", "com.google.common.collect;Iterators;false;partition;(Iterator,int);;Element of Element of Argument[0];Element of ReturnValue;value", @@ -320,16 +320,16 @@ private class GuavaCollectCsv extends SummaryModelCsv { "com.google.common.collect;Iterables;false;filter;(Iterable,Predicate);;Element of Argument[0];Element of ReturnValue;value", "com.google.common.collect;Iterables;false;find;(Iterable,Predicate);;Element of Argument[0];ReturnValue;value", "com.google.common.collect;Iterables;false;find;(Iterable,Predicate,Object);;Element of Argument[0];ReturnValue;value", - "com.google.common.collect;Iterables;false;find;(Iterable,Predicate,Object);;Argument[2];Element of ReturnValue;value", + "com.google.common.collect;Iterables;false;find;(Iterable,Predicate,Object);;Argument[2];ReturnValue;value", "com.google.common.collect;Iterables;false;get;(Iterable,int);;Element of Argument[0];ReturnValue;value", "com.google.common.collect;Iterables;false;get;(Iterable,int,Object);;Element of Argument[0];ReturnValue;value", - "com.google.common.collect;Iterables;false;get;(Iterable,int,Object);;Argument[2];Element of ReturnValue;value", + "com.google.common.collect;Iterables;false;get;(Iterable,int,Object);;Argument[2];ReturnValue;value", "com.google.common.collect;Iterables;false;getLast;(Iterable);;Element of Argument[0];ReturnValue;value", "com.google.common.collect;Iterables;false;getLast;(Iterable,Object);;Element of Argument[0];ReturnValue;value", - "com.google.common.collect;Iterables;false;getLast;(Iterable,Object);;Argument[1];Element of ReturnValue;value", + "com.google.common.collect;Iterables;false;getLast;(Iterable,Object);;Argument[1];ReturnValue;value", "com.google.common.collect;Iterables;false;getOnlyElement;(Iterable);;Element of Argument[0];ReturnValue;value", "com.google.common.collect;Iterables;false;getOnlyElement;(Iterable,Object);;Element of Argument[0];ReturnValue;value", - "com.google.common.collect;Iterables;false;getOnlyElement;(Iterable,Object);;Argument[1];Element of ReturnValue;value", + "com.google.common.collect;Iterables;false;getOnlyElement;(Iterable,Object);;Argument[1];ReturnValue;value", "com.google.common.collect;Iterables;false;limit;(Iterable,int);;Element of Argument[0];Element of ReturnValue;value", "com.google.common.collect;Iterables;false;mergeSorted;(Iterable,Comparator);;Element of Element of Argument[0];Element of ReturnValue;value", "com.google.common.collect;Iterables;false;partition;(Iterable,int);;Element of Element of Argument[0];Element of ReturnValue;value", diff --git a/java/ql/test/library-tests/frameworks/guava/generated/Test.java b/java/ql/test/library-tests/frameworks/guava/generated/Test.java index e31cf4cd3fd..42e2857ef53 100644 --- a/java/ql/test/library-tests/frameworks/guava/generated/Test.java +++ b/java/ql/test/library-tests/frameworks/guava/generated/Test.java @@ -92,6 +92,13 @@ public class Test { T getArrayElement(T[] container) { return container[0]; } Object getElement(Object container) { return null; } + T getElement2(Collection container) { return container.iterator().next(); } + T getElement2(ImmutableCollection.Builder container) { return getElement2(container.build()); } + T getElement2(Iterable container) { return container.iterator().next(); } + T getElement2(Iterator container) { return container.next(); } + T getElement2(Optional container) { return container.get(); } + T getElement2(Enumeration container) { return container.nextElement(); } + T getElement2(Multiset.Entry container) { return container.getElement(); } Object getMapDifference_left(Object container) { return null; } Object getMapDifference_right(Object container) { return null; } Object getMapKey(Object container) { return null; } @@ -263,35 +270,35 @@ public class Test { Collection out = null; Collection in = (Collection)newWithElement(source()); out = Collections2.filter(in, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Collections2;false;orderedPermutations;(Iterable);;Element of Argument[0];Element of ReturnValue;value" Collection out = null; Iterable in = (Iterable)newWithElement(source()); out = Collections2.orderedPermutations(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Collections2;false;orderedPermutations;(Iterable,Comparator);;Element of Argument[0];Element of ReturnValue;value" Collection out = null; Iterable in = (Iterable)newWithElement(source()); out = Collections2.orderedPermutations(in, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Collections2;false;permutations;(Collection);;Element of Argument[0];Element of ReturnValue;value" Collection out = null; Collection in = (Collection)newWithElement(source()); out = Collections2.permutations(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ConcurrentHashMultiset;true;create;(Iterable);;Element of Argument[0];Element of ReturnValue;value" ConcurrentHashMultiset out = null; Iterable in = (Iterable)newWithElement(source()); out = ConcurrentHashMultiset.create(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;HashBasedTable;true;create;(Table);;MapValue of Argument[0];MapValue of ReturnValue;value" @@ -347,7 +354,7 @@ public class Test { HashMultiset out = null; Iterable in = (Iterable)newWithElement(source()); out = HashMultiset.create(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableClassToInstanceMap;true;copyOf;(Map);;MapKey of Argument[0];MapKey of ReturnValue;value" @@ -382,84 +389,84 @@ public class Test { ImmutableSortedSet.Builder out = null; Object in = source(); out.add(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;(Object);;Argument[0];Element of Argument[-1];value" ImmutableSortedMultiset.Builder out = null; Object in = source(); out.add(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;(Object);;Argument[0];Element of Argument[-1];value" ImmutableSet.Builder out = null; Object in = source(); out.add(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;(Object);;Argument[0];Element of Argument[-1];value" ImmutableMultiset.Builder out = null; Object in = source(); out.add(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;(Object);;Argument[0];Element of Argument[-1];value" ImmutableList.Builder out = null; Object in = source(); out.add(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;(Object);;Argument[0];Element of Argument[-1];value" ImmutableCollection.Builder out = null; Object in = source(); out.add(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;(Object[]);;ArrayElement of Argument[0];Element of Argument[-1];value" ImmutableSortedSet.Builder out = null; Object[] in = newWithArrayElement(source()); out.add(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;(Object[]);;ArrayElement of Argument[0];Element of Argument[-1];value" ImmutableSortedMultiset.Builder out = null; Object[] in = newWithArrayElement(source()); out.add(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;(Object[]);;ArrayElement of Argument[0];Element of Argument[-1];value" ImmutableSet.Builder out = null; Object[] in = newWithArrayElement(source()); out.add(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;(Object[]);;ArrayElement of Argument[0];Element of Argument[-1];value" ImmutableMultiset.Builder out = null; Object[] in = newWithArrayElement(source()); out.add(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;(Object[]);;ArrayElement of Argument[0];Element of Argument[-1];value" ImmutableList.Builder out = null; Object[] in = newWithArrayElement(source()); out.add(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;(Object[]);;ArrayElement of Argument[0];Element of Argument[-1];value" ImmutableCollection.Builder out = null; Object[] in = newWithArrayElement(source()); out.add(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;;;Argument[-1];ReturnValue;value" @@ -550,84 +557,84 @@ public class Test { ImmutableSortedSet.Builder out = null; Iterable in = (Iterable)newWithElement(source()); out.addAll(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;(Iterable);;Element of Argument[0];Element of Argument[-1];value" ImmutableSortedMultiset.Builder out = null; Iterable in = (Iterable)newWithElement(source()); out.addAll(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;(Iterable);;Element of Argument[0];Element of Argument[-1];value" ImmutableSet.Builder out = null; Iterable in = (Iterable)newWithElement(source()); out.addAll(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;(Iterable);;Element of Argument[0];Element of Argument[-1];value" ImmutableMultiset.Builder out = null; Iterable in = (Iterable)newWithElement(source()); out.addAll(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;(Iterable);;Element of Argument[0];Element of Argument[-1];value" ImmutableList.Builder out = null; Iterable in = (Iterable)newWithElement(source()); out.addAll(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;(Iterable);;Element of Argument[0];Element of Argument[-1];value" ImmutableCollection.Builder out = null; Iterable in = (Iterable)newWithElement(source()); out.addAll(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;(Iterator);;Element of Argument[0];Element of Argument[-1];value" ImmutableSortedSet.Builder out = null; Iterator in = (Iterator)newWithElement(source()); out.addAll(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;(Iterator);;Element of Argument[0];Element of Argument[-1];value" ImmutableSortedMultiset.Builder out = null; Iterator in = (Iterator)newWithElement(source()); out.addAll(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;(Iterator);;Element of Argument[0];Element of Argument[-1];value" ImmutableSet.Builder out = null; Iterator in = (Iterator)newWithElement(source()); out.addAll(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;(Iterator);;Element of Argument[0];Element of Argument[-1];value" ImmutableMultiset.Builder out = null; Iterator in = (Iterator)newWithElement(source()); out.addAll(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;(Iterator);;Element of Argument[0];Element of Argument[-1];value" ImmutableList.Builder out = null; Iterator in = (Iterator)newWithElement(source()); out.addAll(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;(Iterator);;Element of Argument[0];Element of Argument[-1];value" ImmutableCollection.Builder out = null; Iterator in = (Iterator)newWithElement(source()); out.addAll(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;;;Argument[-1];ReturnValue;value" @@ -718,679 +725,679 @@ public class Test { ImmutableSortedSet out = null; ImmutableSortedSet.Builder in = (ImmutableSortedSet.Builder)newWithElement(source()); out = in.build(); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;build;();;Element of Argument[-1];Element of ReturnValue;value" ImmutableSortedMultiset out = null; ImmutableSortedMultiset.Builder in = (ImmutableSortedMultiset.Builder)newWithElement(source()); out = in.build(); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;build;();;Element of Argument[-1];Element of ReturnValue;value" ImmutableSet out = null; ImmutableSet.Builder in = (ImmutableSet.Builder)newWithElement(source()); out = in.build(); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;build;();;Element of Argument[-1];Element of ReturnValue;value" ImmutableMultiset out = null; ImmutableMultiset.Builder in = (ImmutableMultiset.Builder)newWithElement(source()); out = in.build(); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;build;();;Element of Argument[-1];Element of ReturnValue;value" ImmutableList out = null; ImmutableList.Builder in = (ImmutableList.Builder)newWithElement(source()); out = in.build(); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;build;();;Element of Argument[-1];Element of ReturnValue;value" ImmutableCollection out = null; ImmutableCollection.Builder in = (ImmutableCollection.Builder)newWithElement(source()); out = in.build(); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection;true;asList;();;Element of Argument[-1];Element of ReturnValue;value" ImmutableList out = null; ImmutableSet in = (ImmutableSet)newWithElement(source()); out = in.asList(); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection;true;asList;();;Element of Argument[-1];Element of ReturnValue;value" ImmutableList out = null; ImmutableMultiset in = (ImmutableMultiset)newWithElement(source()); out = in.asList(); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection;true;asList;();;Element of Argument[-1];Element of ReturnValue;value" ImmutableList out = null; ImmutableList in = (ImmutableList)newWithElement(source()); out = in.asList(); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection;true;asList;();;Element of Argument[-1];Element of ReturnValue;value" ImmutableList out = null; ImmutableCollection in = (ImmutableCollection)newWithElement(source()); out = in.asList(); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;copyOf;(Collection);;Element of Argument[0];Element of ReturnValue;value" ImmutableList out = null; Collection in = (Collection)newWithElement(source()); out = ImmutableList.copyOf(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;copyOf;(Iterable);;Element of Argument[0];Element of ReturnValue;value" ImmutableList out = null; Iterable in = (Iterable)newWithElement(source()); out = ImmutableList.copyOf(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;copyOf;(Iterator);;Element of Argument[0];Element of ReturnValue;value" ImmutableList out = null; Iterator in = (Iterator)newWithElement(source()); out = ImmutableList.copyOf(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;copyOf;(Object[]);;ArrayElement of Argument[0];Element of ReturnValue;value" ImmutableList out = null; Object[] in = newWithArrayElement(source()); out = ImmutableList.copyOf(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, null, null, null, null, null, null, null, null, null, in, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, null, null, null, null, null, null, null, null, in, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, null, null, null, null, null, null, null, null, in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, null, null, null, null, null, null, null, in, null, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, null, null, null, null, null, null, null, in, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, null, null, null, null, null, null, null, in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, null, null, null, null, null, null, in, null, null, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, null, null, null, null, null, null, in, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, null, null, null, null, null, null, in, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, null, null, null, null, null, null, in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, null, null, null, null, null, in, null, null, null, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, null, null, null, null, null, in, null, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, null, null, null, null, null, in, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, null, null, null, null, null, in, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, null, null, null, null, null, in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, null, null, null, null, in, null, null, null, null, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, null, null, null, null, in, null, null, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, null, null, null, null, in, null, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, null, null, null, null, in, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, null, null, null, null, in, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, null, null, null, null, in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, null, null, null, in, null, null, null, null, null, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, null, null, null, in, null, null, null, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, null, null, null, in, null, null, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, null, null, null, in, null, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, null, null, null, in, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, null, null, null, in, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, null, null, null, in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, null, null, in, null, null, null, null, null, null, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, null, null, in, null, null, null, null, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, null, null, in, null, null, null, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, null, null, in, null, null, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, null, null, in, null, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, null, null, in, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, null, null, in, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, null, null, in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, null, in, null, null, null, null, null, null, null, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, null, in, null, null, null, null, null, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, null, in, null, null, null, null, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, null, in, null, null, null, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, null, in, null, null, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, null, in, null, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, null, in, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, null, in, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, null, in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, in, null, null, null, null, null, null, null, null, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, in, null, null, null, null, null, null, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, in, null, null, null, null, null, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, in, null, null, null, null, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, in, null, null, null, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, in, null, null, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, in, null, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, in, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, in, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, in, null, null, null, null, null, null, null, null, null, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, in, null, null, null, null, null, null, null, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, in, null, null, null, null, null, null, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, in, null, null, null, null, null, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, in, null, null, null, null, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, in, null, null, null, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, in, null, null, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, in, null, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, in, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, in, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(in, null, null, null, null, null, null, null, null, null, null, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(in, null, null, null, null, null, null, null, null, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(in, null, null, null, null, null, null, null, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(in, null, null, null, null, null, null, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(in, null, null, null, null, null, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(in, null, null, null, null, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(in, null, null, null, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(in, null, null, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(in, null, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(in, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(in, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;ArrayElement of Argument[12];Element of ReturnValue;value" ImmutableList out = null; Object[] in = newWithArrayElement(source()); out = ImmutableList.of(null, null, null, null, null, null, null, null, null, null, null, null, in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;reverse;();;Element of Argument[-1];Element of ReturnValue;value" ImmutableList out = null; ImmutableList in = (ImmutableList)newWithElement(source()); out = in.reverse(); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;sortedCopyOf;(Comparator,Iterable);;Element of Argument[1];Element of ReturnValue;value" ImmutableList out = null; Iterable in = (Iterable)newWithElement(source()); out = ImmutableList.sortedCopyOf(null, in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;sortedCopyOf;(Iterable);;Element of Argument[0];Element of ReturnValue;value" ImmutableList out = null; Iterable in = (Iterable)newWithElement(source()); out = ImmutableList.sortedCopyOf(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;subList;(int,int);;Element of Argument[-1];Element of ReturnValue;value" ImmutableList out = null; ImmutableList in = (ImmutableList)newWithElement(source()); out = in.subList(0, 0); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;build;();;MapKey of Argument[-1];MapKey of ReturnValue;value" @@ -2580,371 +2587,371 @@ public class Test { ImmutableSortedMultiset.Builder out = null; Object in = source(); out.addCopies(in, 0); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset$Builder;true;addCopies;(Object,int);;Argument[0];Element of Argument[-1];value" ImmutableMultiset.Builder out = null; Object in = source(); out.addCopies(in, 0); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;copyOf;(Iterable);;Element of Argument[0];Element of ReturnValue;value" ImmutableMultiset out = null; Iterable in = (Iterable)newWithElement(source()); out = ImmutableMultiset.copyOf(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;copyOf;(Iterator);;Element of Argument[0];Element of ReturnValue;value" ImmutableMultiset out = null; Iterator in = (Iterator)newWithElement(source()); out = ImmutableMultiset.copyOf(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;copyOf;(Object[]);;ArrayElement of Argument[0];Element of ReturnValue;value" ImmutableMultiset out = null; Object[] in = newWithArrayElement(source()); out = ImmutableMultiset.copyOf(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; Object in = source(); out = ImmutableMultiset.of(null, null, null, null, null, in, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; Object in = source(); out = ImmutableMultiset.of(null, null, null, null, in, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; Object in = source(); out = ImmutableMultiset.of(null, null, null, null, in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; Object in = source(); out = ImmutableMultiset.of(null, null, null, in, null, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; Object in = source(); out = ImmutableMultiset.of(null, null, null, in, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; Object in = source(); out = ImmutableMultiset.of(null, null, null, in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; Object in = source(); out = ImmutableMultiset.of(null, null, in, null, null, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; Object in = source(); out = ImmutableMultiset.of(null, null, in, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; Object in = source(); out = ImmutableMultiset.of(null, null, in, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; Object in = source(); out = ImmutableMultiset.of(null, null, in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; Object in = source(); out = ImmutableMultiset.of(null, in, null, null, null, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; Object in = source(); out = ImmutableMultiset.of(null, in, null, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; Object in = source(); out = ImmutableMultiset.of(null, in, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; Object in = source(); out = ImmutableMultiset.of(null, in, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; Object in = source(); out = ImmutableMultiset.of(null, in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; Object in = source(); out = ImmutableMultiset.of(in, null, null, null, null, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; Object in = source(); out = ImmutableMultiset.of(in, null, null, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; Object in = source(); out = ImmutableMultiset.of(in, null, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; Object in = source(); out = ImmutableMultiset.of(in, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; Object in = source(); out = ImmutableMultiset.of(in, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; Object in = source(); out = ImmutableMultiset.of(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;ArrayElement of Argument[6];Element of ReturnValue;value" ImmutableMultiset out = null; Object[] in = newWithArrayElement(source()); out = ImmutableMultiset.of(null, null, null, null, null, null, in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;copyOf;(Collection);;Element of Argument[0];Element of ReturnValue;value" ImmutableSet out = null; Collection in = (Collection)newWithElement(source()); out = ImmutableSet.copyOf(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;copyOf;(Iterable);;Element of Argument[0];Element of ReturnValue;value" ImmutableSet out = null; Iterable in = (Iterable)newWithElement(source()); out = ImmutableSet.copyOf(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;copyOf;(Iterator);;Element of Argument[0];Element of ReturnValue;value" ImmutableSet out = null; Iterator in = (Iterator)newWithElement(source()); out = ImmutableSet.copyOf(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;copyOf;(Object[]);;ArrayElement of Argument[0];Element of ReturnValue;value" ImmutableSet out = null; Object[] in = newWithArrayElement(source()); out = ImmutableSet.copyOf(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; Object in = source(); out = ImmutableSet.of(null, null, null, null, null, in, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; Object in = source(); out = ImmutableSet.of(null, null, null, null, in, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; Object in = source(); out = ImmutableSet.of(null, null, null, null, in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; Object in = source(); out = ImmutableSet.of(null, null, null, in, null, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; Object in = source(); out = ImmutableSet.of(null, null, null, in, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; Object in = source(); out = ImmutableSet.of(null, null, null, in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; Object in = source(); out = ImmutableSet.of(null, null, in, null, null, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; Object in = source(); out = ImmutableSet.of(null, null, in, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; Object in = source(); out = ImmutableSet.of(null, null, in, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; Object in = source(); out = ImmutableSet.of(null, null, in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; Object in = source(); out = ImmutableSet.of(null, in, null, null, null, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; Object in = source(); out = ImmutableSet.of(null, in, null, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; Object in = source(); out = ImmutableSet.of(null, in, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; Object in = source(); out = ImmutableSet.of(null, in, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; Object in = source(); out = ImmutableSet.of(null, in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; Object in = source(); out = ImmutableSet.of(in, null, null, null, null, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; Object in = source(); out = ImmutableSet.of(in, null, null, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; Object in = source(); out = ImmutableSet.of(in, null, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; Object in = source(); out = ImmutableSet.of(in, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; Object in = source(); out = ImmutableSet.of(in, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; Object in = source(); out = ImmutableSet.of(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;ArrayElement of Argument[6];Element of ReturnValue;value" ImmutableSet out = null; Object[] in = newWithArrayElement(source()); out = ImmutableSet.of(null, null, null, null, null, null, in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMap;true;copyOf;(Iterable);;MapKey of Element of Argument[0];MapKey of ReturnValue;value" @@ -3231,406 +3238,406 @@ public class Test { ImmutableSortedMultiset out = null; Comparable[] in = newWithArrayElement(source()); out = ImmutableSortedMultiset.copyOf(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMultiset;true;copyOf;(Comparator,Iterable);;Element of Argument[1];Element of ReturnValue;value" ImmutableSortedMultiset out = null; Iterable in = (Iterable)newWithElement(source()); out = ImmutableSortedMultiset.copyOf((Comparator)null, in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMultiset;true;copyOf;(Comparator,Iterator);;Element of Argument[1];Element of ReturnValue;value" ImmutableSortedMultiset out = null; Iterator in = (Iterator)newWithElement(source()); out = ImmutableSortedMultiset.copyOf((Comparator)null, in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMultiset;true;copyOf;(Iterable);;Element of Argument[0];Element of ReturnValue;value" ImmutableSortedMultiset out = null; Iterable in = (Iterable)newWithElement(source()); out = ImmutableSortedMultiset.copyOf(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMultiset;true;copyOf;(Iterator);;Element of Argument[0];Element of ReturnValue;value" ImmutableSortedMultiset out = null; Iterator in = (Iterator)newWithElement(source()); out = ImmutableSortedMultiset.copyOf(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMultiset;true;copyOfSorted;(SortedMultiset);;Element of Argument[0];Element of ReturnValue;value" ImmutableSortedMultiset out = null; SortedMultiset in = (SortedMultiset)newWithElement(source()); out = ImmutableSortedMultiset.copyOfSorted(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedMultiset out = null; Comparable in = source(); out = ImmutableSortedMultiset.of(null, null, null, null, null, in, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedMultiset out = null; Comparable in = source(); out = ImmutableSortedMultiset.of(null, null, null, null, in, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedMultiset out = null; Comparable in = source(); out = ImmutableSortedMultiset.of(null, null, null, null, in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedMultiset out = null; Comparable in = source(); out = ImmutableSortedMultiset.of(null, null, null, in, null, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedMultiset out = null; Comparable in = source(); out = ImmutableSortedMultiset.of(null, null, null, in, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedMultiset out = null; Comparable in = source(); out = ImmutableSortedMultiset.of(null, null, null, in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedMultiset out = null; Comparable in = source(); out = ImmutableSortedMultiset.of(null, null, in, null, null, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedMultiset out = null; Comparable in = source(); out = ImmutableSortedMultiset.of(null, null, in, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedMultiset out = null; Comparable in = source(); out = ImmutableSortedMultiset.of(null, null, in, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedMultiset out = null; Comparable in = source(); out = ImmutableSortedMultiset.of(null, null, in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedMultiset out = null; Comparable in = source(); out = ImmutableSortedMultiset.of(null, in, null, null, null, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedMultiset out = null; Comparable in = source(); out = ImmutableSortedMultiset.of(null, in, null, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedMultiset out = null; Comparable in = source(); out = ImmutableSortedMultiset.of(null, in, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedMultiset out = null; Comparable in = source(); out = ImmutableSortedMultiset.of(null, in, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedMultiset out = null; Comparable in = source(); out = ImmutableSortedMultiset.of(null, in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedMultiset out = null; Comparable in = source(); out = ImmutableSortedMultiset.of(in, null, null, null, null, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedMultiset out = null; Comparable in = source(); out = ImmutableSortedMultiset.of(in, null, null, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedMultiset out = null; Comparable in = source(); out = ImmutableSortedMultiset.of(in, null, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedMultiset out = null; Comparable in = source(); out = ImmutableSortedMultiset.of(in, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedMultiset out = null; Comparable in = source(); out = ImmutableSortedMultiset.of(in, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedMultiset out = null; Comparable in = source(); out = ImmutableSortedMultiset.of(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;ArrayElement of Argument[6];Element of ReturnValue;value" ImmutableSortedMultiset out = null; Comparable[] in = newWithArrayElement(source()); out = ImmutableSortedMultiset.of(null, null, null, null, null, null, in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;copyOf;(Collection);;Element of Argument[0];Element of ReturnValue;value" ImmutableSortedSet out = null; Collection in = (Collection)newWithElement(source()); out = ImmutableSortedSet.copyOf(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;copyOf;(Comparable[]);;ArrayElement of Argument[0];Element of ReturnValue;value" ImmutableSortedSet out = null; Comparable[] in = newWithArrayElement(source()); out = ImmutableSortedSet.copyOf(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;copyOf;(Comparator,Collection);;Element of Argument[1];Element of ReturnValue;value" ImmutableSortedSet out = null; Collection in = (Collection)newWithElement(source()); out = ImmutableSortedSet.copyOf((Comparator)null, in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;copyOf;(Comparator,Iterable);;Element of Argument[1];Element of ReturnValue;value" ImmutableSortedSet out = null; Iterable in = (Iterable)newWithElement(source()); out = ImmutableSortedSet.copyOf((Comparator)null, in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;copyOf;(Comparator,Iterator);;Element of Argument[1];Element of ReturnValue;value" ImmutableSortedSet out = null; Iterator in = (Iterator)newWithElement(source()); out = ImmutableSortedSet.copyOf((Comparator)null, in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;copyOf;(Iterable);;Element of Argument[0];Element of ReturnValue;value" ImmutableSortedSet out = null; Iterable in = (Iterable)newWithElement(source()); out = ImmutableSortedSet.copyOf(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;copyOf;(Iterator);;Element of Argument[0];Element of ReturnValue;value" ImmutableSortedSet out = null; Iterator in = (Iterator)newWithElement(source()); out = ImmutableSortedSet.copyOf(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;copyOfSorted;(SortedSet);;Element of Argument[0];Element of ReturnValue;value" ImmutableSortedSet out = null; SortedSet in = (SortedSet)newWithElement(source()); out = ImmutableSortedSet.copyOfSorted(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedSet out = null; Comparable in = source(); out = ImmutableSortedSet.of(null, null, null, null, null, in, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedSet out = null; Comparable in = source(); out = ImmutableSortedSet.of(null, null, null, null, in, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedSet out = null; Comparable in = source(); out = ImmutableSortedSet.of(null, null, null, null, in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedSet out = null; Comparable in = source(); out = ImmutableSortedSet.of(null, null, null, in, null, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedSet out = null; Comparable in = source(); out = ImmutableSortedSet.of(null, null, null, in, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedSet out = null; Comparable in = source(); out = ImmutableSortedSet.of(null, null, null, in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedSet out = null; Comparable in = source(); out = ImmutableSortedSet.of(null, null, in, null, null, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedSet out = null; Comparable in = source(); out = ImmutableSortedSet.of(null, null, in, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedSet out = null; Comparable in = source(); out = ImmutableSortedSet.of(null, null, in, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedSet out = null; Comparable in = source(); out = ImmutableSortedSet.of(null, null, in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedSet out = null; Comparable in = source(); out = ImmutableSortedSet.of(null, in, null, null, null, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedSet out = null; Comparable in = source(); out = ImmutableSortedSet.of(null, in, null, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedSet out = null; Comparable in = source(); out = ImmutableSortedSet.of(null, in, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedSet out = null; Comparable in = source(); out = ImmutableSortedSet.of(null, in, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedSet out = null; Comparable in = source(); out = ImmutableSortedSet.of(null, in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedSet out = null; Comparable in = source(); out = ImmutableSortedSet.of(in, null, null, null, null, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedSet out = null; Comparable in = source(); out = ImmutableSortedSet.of(in, null, null, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedSet out = null; Comparable in = source(); out = ImmutableSortedSet.of(in, null, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedSet out = null; Comparable in = source(); out = ImmutableSortedSet.of(in, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedSet out = null; Comparable in = source(); out = ImmutableSortedSet.of(in, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedSet out = null; Comparable in = source(); out = ImmutableSortedSet.of(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;of;;;ArrayElement of Argument[6];Element of ReturnValue;value" ImmutableSortedSet out = null; Comparable[] in = newWithArrayElement(source()); out = ImmutableSortedSet.of(null, null, null, null, null, null, in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableTable$Builder;true;build;();;MapValue of Argument[-1];MapValue of ReturnValue;value" @@ -3798,119 +3805,119 @@ public class Test { Collection out = null; Iterable in = (Iterable)newWithElement(source()); Iterables.addAll(out, in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;concat;(Iterable);;Element of Element of Argument[0];Element of ReturnValue;value" Iterable out = null; Iterable in = (Iterable)newWithElement(newWithElement(source())); out = Iterables.concat(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;concat;(Iterable,Iterable);;Element of Argument[0..1];Element of ReturnValue;value" Iterable out = null; Iterable in = (Iterable)newWithElement(source()); out = Iterables.concat(null, in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;concat;(Iterable,Iterable);;Element of Argument[0..1];Element of ReturnValue;value" Iterable out = null; Iterable in = (Iterable)newWithElement(source()); out = Iterables.concat(in, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;concat;(Iterable,Iterable,Iterable);;Element of Argument[0..2];Element of ReturnValue;value" Iterable out = null; Iterable in = (Iterable)newWithElement(source()); out = Iterables.concat(null, null, in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;concat;(Iterable,Iterable,Iterable);;Element of Argument[0..2];Element of ReturnValue;value" Iterable out = null; Iterable in = (Iterable)newWithElement(source()); out = Iterables.concat(null, in, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;concat;(Iterable,Iterable,Iterable);;Element of Argument[0..2];Element of ReturnValue;value" Iterable out = null; Iterable in = (Iterable)newWithElement(source()); out = Iterables.concat(in, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;concat;(Iterable,Iterable,Iterable,Iterable);;Element of Argument[0..3];Element of ReturnValue;value" Iterable out = null; Iterable in = (Iterable)newWithElement(source()); out = Iterables.concat(null, null, null, in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;concat;(Iterable,Iterable,Iterable,Iterable);;Element of Argument[0..3];Element of ReturnValue;value" Iterable out = null; Iterable in = (Iterable)newWithElement(source()); out = Iterables.concat(null, null, in, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;concat;(Iterable,Iterable,Iterable,Iterable);;Element of Argument[0..3];Element of ReturnValue;value" Iterable out = null; Iterable in = (Iterable)newWithElement(source()); out = Iterables.concat(null, in, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;concat;(Iterable,Iterable,Iterable,Iterable);;Element of Argument[0..3];Element of ReturnValue;value" Iterable out = null; Iterable in = (Iterable)newWithElement(source()); out = Iterables.concat(in, null, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;concat;(Iterable[]);;Element of ArrayElement of Argument[0];Element of ReturnValue;value" Iterable out = null; Iterable[] in = (Iterable[])newWithArrayElement(newWithElement(source())); out = Iterables.concat(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;consumingIterable;(Iterable);;Element of Argument[0];Element of ReturnValue;value" Iterable out = null; Iterable in = (Iterable)newWithElement(source()); out = Iterables.consumingIterable(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;cycle;(Iterable);;Element of Argument[0];Element of ReturnValue;value" Iterable out = null; Iterable in = (Iterable)newWithElement(source()); out = Iterables.cycle(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;cycle;(Object[]);;ArrayElement of Argument[0];Element of ReturnValue;value" Iterable out = null; Object[] in = newWithArrayElement(source()); out = Iterables.cycle(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;filter;(Iterable,Class);;Element of Argument[0];Element of ReturnValue;value" Iterable out = null; Iterable in = (Iterable)newWithElement(source()); out = Iterables.filter(in, (Class)null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;filter;(Iterable,Predicate);;Element of Argument[0];Element of ReturnValue;value" Iterable out = null; Iterable in = (Iterable)newWithElement(source()); out = Iterables.filter(in, (Predicate)null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;find;(Iterable,Predicate);;Element of Argument[0];ReturnValue;value" @@ -3920,11 +3927,11 @@ public class Test { sink(out); // $ hasValueFlow } { - // "com.google.common.collect;Iterables;false;find;(Iterable,Predicate,Object);;Argument[2];Element of ReturnValue;value" + // "com.google.common.collect;Iterables;false;find;(Iterable,Predicate,Object);;Argument[2];ReturnValue;value" Object out = null; Object in = source(); out = Iterables.find(null, null, in); - sink(getElement(out)); // $ hasValueFlow + sink(out); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;find;(Iterable,Predicate,Object);;Element of Argument[0];ReturnValue;value" @@ -3941,11 +3948,11 @@ public class Test { sink(out); // $ hasValueFlow } { - // "com.google.common.collect;Iterables;false;get;(Iterable,int,Object);;Argument[2];Element of ReturnValue;value" + // "com.google.common.collect;Iterables;false;get;(Iterable,int,Object);;Argument[2];ReturnValue;value" Object out = null; Object in = source(); out = Iterables.get(null, 0, in); - sink(getElement(out)); // $ hasValueFlow + sink(out); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;get;(Iterable,int,Object);;Element of Argument[0];ReturnValue;value" @@ -3962,11 +3969,11 @@ public class Test { sink(out); // $ hasValueFlow } { - // "com.google.common.collect;Iterables;false;getLast;(Iterable,Object);;Argument[1];Element of ReturnValue;value" + // "com.google.common.collect;Iterables;false;getLast;(Iterable,Object);;Argument[1];ReturnValue;value" Object out = null; Object in = source(); out = Iterables.getLast(null, in); - sink(getElement(out)); // $ hasValueFlow + sink(out); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;getLast;(Iterable,Object);;Element of Argument[0];ReturnValue;value" @@ -3983,11 +3990,11 @@ public class Test { sink(out); // $ hasValueFlow } { - // "com.google.common.collect;Iterables;false;getOnlyElement;(Iterable,Object);;Argument[1];Element of ReturnValue;value" + // "com.google.common.collect;Iterables;false;getOnlyElement;(Iterable,Object);;Argument[1];ReturnValue;value" Object out = null; Object in = source(); out = Iterables.getOnlyElement(null, in); - sink(getElement(out)); // $ hasValueFlow + sink(out); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;getOnlyElement;(Iterable,Object);;Element of Argument[0];ReturnValue;value" @@ -4001,35 +4008,35 @@ public class Test { Iterable out = null; Iterable in = (Iterable)newWithElement(source()); out = Iterables.limit(in, 0); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;mergeSorted;(Iterable,Comparator);;Element of Element of Argument[0];Element of ReturnValue;value" Iterable out = null; Iterable in = (Iterable)newWithElement(newWithElement(source())); out = Iterables.mergeSorted(in, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;paddedPartition;(Iterable,int);;Element of Element of Argument[0];Element of ReturnValue;value" Iterable out = null; Iterable in = (Iterable)newWithElement(newWithElement(source())); out = Iterables.paddedPartition(in, 0); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;partition;(Iterable,int);;Element of Element of Argument[0];Element of ReturnValue;value" Iterable out = null; Iterable in = (Iterable)newWithElement(newWithElement(source())); out = Iterables.partition(in, 0); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;skip;(Iterable,int);;Element of Argument[0];Element of ReturnValue;value" Iterable out = null; Iterable in = (Iterable)newWithElement(source()); out = Iterables.skip(in, 0); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;toArray;(Iterable,Class);;Element of Argument[0];ArrayElement of ReturnValue;value" @@ -4050,147 +4057,147 @@ public class Test { Optional out = null; Iterable in = (Iterable)newWithElement(source()); out = Iterables.tryFind(in, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;unmodifiableIterable;(ImmutableCollection);;Element of Argument[0];Element of ReturnValue;value" Iterable out = null; ImmutableCollection in = (ImmutableCollection)newWithElement(source()); out = Iterables.unmodifiableIterable(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;unmodifiableIterable;(Iterable);;Element of Argument[0];Element of ReturnValue;value" Iterable out = null; Iterable in = (Iterable)newWithElement(source()); out = Iterables.unmodifiableIterable(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;addAll;(Collection,Iterator);;Element of Argument[1];Element of Argument[0];value" Collection out = null; Iterator in = (Iterator)newWithElement(source()); Iterators.addAll(out, in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;asEnumeration;(Iterator);;Element of Argument[0];Element of ReturnValue;value" Enumeration out = null; Iterator in = (Iterator)newWithElement(source()); out = Iterators.asEnumeration(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;concat;(Iterator);;Element of Element of Argument[0];Element of ReturnValue;value" Iterator out = null; Iterator in = (Iterator)newWithElement(newWithElement(source())); out = Iterators.concat(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;concat;(Iterator,Iterator);;Element of Argument[0..1];Element of ReturnValue;value" Iterator out = null; Iterator in = (Iterator)newWithElement(source()); out = Iterators.concat(null, in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;concat;(Iterator,Iterator);;Element of Argument[0..1];Element of ReturnValue;value" Iterator out = null; Iterator in = (Iterator)newWithElement(source()); out = Iterators.concat(in, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;concat;(Iterator,Iterator,Iterator);;Element of Argument[0..2];Element of ReturnValue;value" Iterator out = null; Iterator in = (Iterator)newWithElement(source()); out = Iterators.concat(null, null, in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;concat;(Iterator,Iterator,Iterator);;Element of Argument[0..2];Element of ReturnValue;value" Iterator out = null; Iterator in = (Iterator)newWithElement(source()); out = Iterators.concat(null, in, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;concat;(Iterator,Iterator,Iterator);;Element of Argument[0..2];Element of ReturnValue;value" Iterator out = null; Iterator in = (Iterator)newWithElement(source()); out = Iterators.concat(in, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;concat;(Iterator,Iterator,Iterator,Iterator);;Element of Argument[0..3];Element of ReturnValue;value" Iterator out = null; Iterator in = (Iterator)newWithElement(source()); out = Iterators.concat(null, null, null, in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;concat;(Iterator,Iterator,Iterator,Iterator);;Element of Argument[0..3];Element of ReturnValue;value" Iterator out = null; Iterator in = (Iterator)newWithElement(source()); out = Iterators.concat(null, null, in, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;concat;(Iterator,Iterator,Iterator,Iterator);;Element of Argument[0..3];Element of ReturnValue;value" Iterator out = null; Iterator in = (Iterator)newWithElement(source()); out = Iterators.concat(null, in, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;concat;(Iterator,Iterator,Iterator,Iterator);;Element of Argument[0..3];Element of ReturnValue;value" Iterator out = null; Iterator in = (Iterator)newWithElement(source()); out = Iterators.concat(in, null, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;concat;(Iterator[]);;Element of ArrayElement of Argument[0];Element of ReturnValue;value" Iterator out = null; Iterator[] in = (Iterator[])newWithArrayElement(newWithElement(source())); out = Iterators.concat(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;consumingIterator;(Iterator);;Element of Argument[0];Element of ReturnValue;value" Iterator out = null; Iterator in = (Iterator)newWithElement(source()); out = Iterators.consumingIterator(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;cycle;(Iterable);;Element of Argument[0];Element of ReturnValue;value" Iterator out = null; Iterable in = (Iterable)newWithElement(source()); out = Iterators.cycle(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;cycle;(Object[]);;ArrayElement of Argument[0];Element of ReturnValue;value" Iterator out = null; Object[] in = newWithArrayElement(source()); out = Iterators.cycle(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;filter;(Iterator,Class);;Element of Argument[0];Element of ReturnValue;value" UnmodifiableIterator out = null; Iterator in = (Iterator)newWithElement(source()); out = Iterators.filter(in, (Class)null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;filter;(Iterator,Predicate);;Element of Argument[0];Element of ReturnValue;value" UnmodifiableIterator out = null; Iterator in = (Iterator)newWithElement(source()); out = Iterators.filter(in, (Predicate)null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;find;(Iterator,Predicate);;Element of Argument[0];ReturnValue;value" @@ -4200,11 +4207,11 @@ public class Test { sink(out); // $ hasValueFlow } { - // "com.google.common.collect;Iterators;false;find;(Iterator,Predicate,Object);;Argument[2];Element of ReturnValue;value" + // "com.google.common.collect;Iterators;false;find;(Iterator,Predicate,Object);;Argument[2];ReturnValue;value" Object out = null; Object in = source(); out = Iterators.find(null, null, in); - sink(getElement(out)); // $ hasValueFlow + sink(out); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;find;(Iterator,Predicate,Object);;Element of Argument[0];ReturnValue;value" @@ -4218,14 +4225,14 @@ public class Test { UnmodifiableIterator out = null; Object[] in = newWithArrayElement(source()); out = Iterators.forArray(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;forEnumeration;(Enumeration);;Element of Argument[0];Element of ReturnValue;value" UnmodifiableIterator out = null; Enumeration in = (Enumeration)newWithElement(source()); out = Iterators.forEnumeration(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;get;(Iterator,int);;Element of Argument[0];ReturnValue;value" @@ -4235,11 +4242,11 @@ public class Test { sink(out); // $ hasValueFlow } { - // "com.google.common.collect;Iterators;false;get;(Iterator,int,Object);;Argument[2];Element of ReturnValue;value" + // "com.google.common.collect;Iterators;false;get;(Iterator,int,Object);;Argument[2];ReturnValue;value" Object out = null; Object in = source(); out = Iterators.get(null, 0, in); - sink(getElement(out)); // $ hasValueFlow + sink(out); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;get;(Iterator,int,Object);;Element of Argument[0];ReturnValue;value" @@ -4256,11 +4263,11 @@ public class Test { sink(out); // $ hasValueFlow } { - // "com.google.common.collect;Iterators;false;getLast;(Iterator,Object);;Argument[1];Element of ReturnValue;value" + // "com.google.common.collect;Iterators;false;getLast;(Iterator,Object);;Argument[1];ReturnValue;value" Object out = null; Object in = source(); out = Iterators.getLast(null, in); - sink(getElement(out)); // $ hasValueFlow + sink(out); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;getLast;(Iterator,Object);;Element of Argument[0];ReturnValue;value" @@ -4270,11 +4277,11 @@ public class Test { sink(out); // $ hasValueFlow } { - // "com.google.common.collect;Iterators;false;getNext;(Iterator,Object);;Argument[1];Element of ReturnValue;value" + // "com.google.common.collect;Iterators;false;getNext;(Iterator,Object);;Argument[1];ReturnValue;value" Object out = null; Object in = source(); out = Iterators.getNext(null, in); - sink(getElement(out)); // $ hasValueFlow + sink(out); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;getNext;(Iterator,Object);;Element of Argument[0];ReturnValue;value" @@ -4291,11 +4298,11 @@ public class Test { sink(out); // $ hasValueFlow } { - // "com.google.common.collect;Iterators;false;getOnlyElement;(Iterator,Object);;Argument[1];Element of ReturnValue;value" + // "com.google.common.collect;Iterators;false;getOnlyElement;(Iterator,Object);;Argument[1];ReturnValue;value" Object out = null; Object in = source(); out = Iterators.getOnlyElement(null, in); - sink(getElement(out)); // $ hasValueFlow + sink(out); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;getOnlyElement;(Iterator,Object);;Element of Argument[0];ReturnValue;value" @@ -4309,49 +4316,49 @@ public class Test { Iterator out = null; Iterator in = (Iterator)newWithElement(source()); out = Iterators.limit(in, 0); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;mergeSorted;(Iterable,Comparator);;Element of Element of Argument[0];Element of ReturnValue;value" UnmodifiableIterator out = null; Iterable in = (Iterable)newWithElement(newWithElement(source())); out = Iterators.mergeSorted(in, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;paddedPartition;(Iterator,int);;Element of Element of Argument[0];Element of ReturnValue;value" UnmodifiableIterator out = null; Iterator in = (Iterator)newWithElement(newWithElement(source())); out = Iterators.paddedPartition(in, 0); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;partition;(Iterator,int);;Element of Element of Argument[0];Element of ReturnValue;value" UnmodifiableIterator out = null; Iterator in = (Iterator)newWithElement(newWithElement(source())); out = Iterators.partition(in, 0); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;peekingIterator;(Iterator);;Element of Argument[0];Element of ReturnValue;value" PeekingIterator out = null; Iterator in = (Iterator)newWithElement(source()); out = Iterators.peekingIterator(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;peekingIterator;(PeekingIterator);;Element of Argument[0];Element of ReturnValue;value" PeekingIterator out = null; PeekingIterator in = (PeekingIterator)newWithElement(source()); out = Iterators.peekingIterator(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;singletonIterator;(Object);;Argument[0];Element of ReturnValue;value" UnmodifiableIterator out = null; Object in = source(); out = Iterators.singletonIterator(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;toArray;(Iterator,Class);;Element of Argument[0];ArrayElement of ReturnValue;value" @@ -4372,21 +4379,21 @@ public class Test { Optional out = null; Iterator in = (Iterator)newWithElement(source()); out = Iterators.tryFind(in, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;unmodifiableIterator;(Iterator);;Element of Argument[0];Element of ReturnValue;value" UnmodifiableIterator out = null; Iterator in = (Iterator)newWithElement(source()); out = Iterators.unmodifiableIterator(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;unmodifiableIterator;(UnmodifiableIterator);;Element of Argument[0];Element of ReturnValue;value" UnmodifiableIterator out = null; UnmodifiableIterator in = (UnmodifiableIterator)newWithElement(source()); out = Iterators.unmodifiableIterator(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;LinkedHashMultimap;true;create;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value" @@ -4407,7 +4414,7 @@ public class Test { LinkedHashMultiset out = null; Iterable in = (Iterable)newWithElement(source()); out = LinkedHashMultiset.create(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;LinkedListMultimap;true;create;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value" @@ -4428,112 +4435,112 @@ public class Test { List out = null; Object in = source(); out = Lists.asList(null, in, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Lists;false;asList;(Object,Object,Object[]);;Argument[0..1];Element of ReturnValue;value" List out = null; Object in = source(); out = Lists.asList(in, null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Lists;false;asList;(Object,Object,Object[]);;ArrayElement of Argument[2];Element of ReturnValue;value" List out = null; Object[] in = newWithArrayElement(source()); out = Lists.asList(null, null, in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Lists;false;asList;(Object,Object[]);;Argument[0];Element of ReturnValue;value" List out = null; Object in = source(); out = Lists.asList(in, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Lists;false;asList;(Object,Object[]);;ArrayElement of Argument[1];Element of ReturnValue;value" List out = null; Object[] in = newWithArrayElement(source()); out = Lists.asList(null, in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Lists;false;cartesianProduct;(List);;Element of Element of Argument[0];Element of Element of ReturnValue;value" - List out = null; + List out = null; List in = (List)newWithElement(newWithElement(source())); out = Lists.cartesianProduct(in); - sink(getElement(getElement(out))); // $ hasValueFlow + sink(getElement2(getElement2(out))); // $ hasValueFlow } { // "com.google.common.collect;Lists;false;cartesianProduct;(List[]);;Element of ArrayElement of Argument[0];Element of Element of ReturnValue;value" - List out = null; + List out = null; List[] in = (List[])newWithArrayElement(newWithElement(source())); out = Lists.cartesianProduct(in); - sink(getElement(getElement(out))); // $ hasValueFlow + sink(getElement2(getElement2(out))); // $ hasValueFlow } { // "com.google.common.collect;Lists;false;charactersOf;(CharSequence);;Argument[0];Element of ReturnValue;taint" List out = null; CharSequence in = source(); out = Lists.charactersOf(in); - sink(getElement(out)); // $ hasTaintFlow + sink(getElement2(out)); // $ hasTaintFlow } { // "com.google.common.collect;Lists;false;charactersOf;(String);;Argument[0];Element of ReturnValue;taint" ImmutableList out = null; String in = source(); out = Lists.charactersOf(in); - sink(getElement(out)); // $ hasTaintFlow + sink(getElement2(out)); // $ hasTaintFlow } { // "com.google.common.collect;Lists;false;newArrayList;(Iterable);;Element of Argument[0];Element of ReturnValue;value" ArrayList out = null; Iterable in = (Iterable)newWithElement(source()); out = Lists.newArrayList(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Lists;false;newArrayList;(Iterator);;Element of Argument[0];Element of ReturnValue;value" ArrayList out = null; Iterator in = (Iterator)newWithElement(source()); out = Lists.newArrayList(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Lists;false;newArrayList;(Object[]);;ArrayElement of Argument[0];Element of ReturnValue;value" ArrayList out = null; Object[] in = newWithArrayElement(source()); out = Lists.newArrayList(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Lists;false;newCopyOnWriteArrayList;(Iterable);;Element of Argument[0];Element of ReturnValue;value" CopyOnWriteArrayList out = null; Iterable in = (Iterable)newWithElement(source()); out = Lists.newCopyOnWriteArrayList(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Lists;false;newLinkedList;(Iterable);;Element of Argument[0];Element of ReturnValue;value" LinkedList out = null; Iterable in = (Iterable)newWithElement(source()); out = Lists.newLinkedList(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Lists;false;partition;(List,int);;Element of Argument[0];Element of Element of ReturnValue;value" - List out = null; + List out = null; List in = (List)newWithElement(source()); out = Lists.partition(in, 0); - sink(getElement(getElement(out))); // $ hasValueFlow + sink(getElement2(getElement2(out))); // $ hasValueFlow } { // "com.google.common.collect;Lists;false;reverse;(List);;Element of Argument[0];Element of ReturnValue;value" List out = null; List in = (List)newWithElement(source()); out = Lists.reverse(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;MapDifference$ValueDifference;true;leftValue;();;SyntheticField[com.google.common.collect.MapDifference.left] of Argument[-1];ReturnValue;value" @@ -5268,189 +5275,189 @@ public class Test { Set out = null; SetMultimap in = (SetMultimap)newWithMapKey(source()); out = in.entries(); - sink(getMapKey(getElement(out))); // $ hasValueFlow + sink(getMapKey(getElement2(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;entries;();;MapKey of Argument[-1];MapKey of Element of ReturnValue;value" Set out = null; LinkedHashMultimap in = (LinkedHashMultimap)newWithMapKey(source()); out = in.entries(); - sink(getMapKey(getElement(out))); // $ hasValueFlow + sink(getMapKey(getElement2(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;entries;();;MapKey of Argument[-1];MapKey of Element of ReturnValue;value" List out = null; LinkedListMultimap in = (LinkedListMultimap)newWithMapKey(source()); out = in.entries(); - sink(getMapKey(getElement(out))); // $ hasValueFlow + sink(getMapKey(getElement2(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;entries;();;MapKey of Argument[-1];MapKey of Element of ReturnValue;value" ImmutableSet out = null; ImmutableSetMultimap in = (ImmutableSetMultimap)newWithMapKey(source()); out = in.entries(); - sink(getMapKey(getElement(out))); // $ hasValueFlow + sink(getMapKey(getElement2(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;entries;();;MapKey of Argument[-1];MapKey of Element of ReturnValue;value" ImmutableCollection out = null; ImmutableMultimap in = (ImmutableMultimap)newWithMapKey(source()); out = in.entries(); - sink(getMapKey(getElement(out))); // $ hasValueFlow + sink(getMapKey(getElement2(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;entries;();;MapKey of Argument[-1];MapKey of Element of ReturnValue;value" Collection out = null; Multimap in = (Multimap)newWithMapKey(source()); out = in.entries(); - sink(getMapKey(getElement(out))); // $ hasValueFlow + sink(getMapKey(getElement2(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;entries;();;MapValue of Argument[-1];MapValue of Element of ReturnValue;value" Set out = null; SetMultimap in = (SetMultimap)newWithMapValue(source()); out = in.entries(); - sink(getMapValue(getElement(out))); // $ hasValueFlow + sink(getMapValue(getElement2(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;entries;();;MapValue of Argument[-1];MapValue of Element of ReturnValue;value" Set out = null; LinkedHashMultimap in = (LinkedHashMultimap)newWithMapValue(source()); out = in.entries(); - sink(getMapValue(getElement(out))); // $ hasValueFlow + sink(getMapValue(getElement2(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;entries;();;MapValue of Argument[-1];MapValue of Element of ReturnValue;value" List out = null; LinkedListMultimap in = (LinkedListMultimap)newWithMapValue(source()); out = in.entries(); - sink(getMapValue(getElement(out))); // $ hasValueFlow + sink(getMapValue(getElement2(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;entries;();;MapValue of Argument[-1];MapValue of Element of ReturnValue;value" ImmutableSet out = null; ImmutableSetMultimap in = (ImmutableSetMultimap)newWithMapValue(source()); out = in.entries(); - sink(getMapValue(getElement(out))); // $ hasValueFlow + sink(getMapValue(getElement2(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;entries;();;MapValue of Argument[-1];MapValue of Element of ReturnValue;value" ImmutableCollection out = null; ImmutableMultimap in = (ImmutableMultimap)newWithMapValue(source()); out = in.entries(); - sink(getMapValue(getElement(out))); // $ hasValueFlow + sink(getMapValue(getElement2(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;entries;();;MapValue of Argument[-1];MapValue of Element of ReturnValue;value" Collection out = null; Multimap in = (Multimap)newWithMapValue(source()); out = in.entries(); - sink(getMapValue(getElement(out))); // $ hasValueFlow + sink(getMapValue(getElement2(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;get;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" SortedSet out = null; SortedSetMultimap in = (SortedSetMultimap)newWithMapValue(source()); out = in.get(null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;get;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" Set out = null; SetMultimap in = (SetMultimap)newWithMapValue(source()); out = in.get(null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;get;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" NavigableSet out = null; TreeMultimap in = (TreeMultimap)newWithMapValue(source()); out = in.get(null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;get;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" List out = null; ListMultimap in = (ListMultimap)newWithMapValue(source()); out = in.get(null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;get;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" List out = null; LinkedListMultimap in = (LinkedListMultimap)newWithMapValue(source()); out = in.get(null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;get;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" ImmutableSet out = null; ImmutableSetMultimap in = (ImmutableSetMultimap)newWithMapValue(source()); out = in.get(null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;get;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" ImmutableList out = null; ImmutableListMultimap in = (ImmutableListMultimap)newWithMapValue(source()); out = in.get(null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;get;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" ImmutableCollection out = null; ImmutableMultimap in = (ImmutableMultimap)newWithMapValue(source()); out = in.get(null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;get;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" Collection out = null; Multimap in = (Multimap)newWithMapValue(source()); out = in.get(null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;keySet;();;MapKey of Argument[-1];Element of ReturnValue;value" Set out = null; Multimap in = (Multimap)newWithMapKey(source()); out = in.keySet(); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;keySet;();;MapKey of Argument[-1];Element of ReturnValue;value" Set out = null; LinkedHashMultimap in = (LinkedHashMultimap)newWithMapKey(source()); out = in.keySet(); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;keySet;();;MapKey of Argument[-1];Element of ReturnValue;value" NavigableSet out = null; TreeMultimap in = (TreeMultimap)newWithMapKey(source()); out = in.keySet(); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;keySet;();;MapKey of Argument[-1];Element of ReturnValue;value" ImmutableSet out = null; ImmutableMultimap in = (ImmutableMultimap)newWithMapKey(source()); out = in.keySet(); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;keys;();;MapKey of Argument[-1];Element of ReturnValue;value" Multiset out = null; Multimap in = (Multimap)newWithMapKey(source()); out = in.keys(); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;keys;();;MapKey of Argument[-1];Element of ReturnValue;value" ImmutableMultiset out = null; ImmutableMultimap in = (ImmutableMultimap)newWithMapKey(source()); out = in.keys(); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;put;(Object,Object);;Argument[0];MapKey of Argument[-1];value" @@ -5737,91 +5744,91 @@ public class Test { SortedSet out = null; SortedSetMultimap in = (SortedSetMultimap)newWithMapValue(source()); out = in.replaceValues(null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;MapValue of Argument[-1];Element of ReturnValue;value" Set out = null; SetMultimap in = (SetMultimap)newWithMapValue(source()); out = in.replaceValues(null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;MapValue of Argument[-1];Element of ReturnValue;value" Set out = null; LinkedHashMultimap in = (LinkedHashMultimap)newWithMapValue(source()); out = in.replaceValues(null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;MapValue of Argument[-1];Element of ReturnValue;value" List out = null; ListMultimap in = (ListMultimap)newWithMapValue(source()); out = in.replaceValues(null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;MapValue of Argument[-1];Element of ReturnValue;value" List out = null; LinkedListMultimap in = (LinkedListMultimap)newWithMapValue(source()); out = in.replaceValues(null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;MapValue of Argument[-1];Element of ReturnValue;value" ImmutableSet out = null; ImmutableSetMultimap in = (ImmutableSetMultimap)newWithMapValue(source()); out = in.replaceValues(null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;MapValue of Argument[-1];Element of ReturnValue;value" ImmutableList out = null; ImmutableListMultimap in = (ImmutableListMultimap)newWithMapValue(source()); out = in.replaceValues(null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;MapValue of Argument[-1];Element of ReturnValue;value" ImmutableCollection out = null; ImmutableMultimap in = (ImmutableMultimap)newWithMapValue(source()); out = in.replaceValues(null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;MapValue of Argument[-1];Element of ReturnValue;value" Collection out = null; Multimap in = (Multimap)newWithMapValue(source()); out = in.replaceValues(null, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;values;();;MapValue of Argument[-1];Element of ReturnValue;value" List out = null; LinkedListMultimap in = (LinkedListMultimap)newWithMapValue(source()); out = in.values(); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;values;();;MapValue of Argument[-1];Element of ReturnValue;value" ImmutableCollection out = null; ImmutableMultimap in = (ImmutableMultimap)newWithMapValue(source()); out = in.values(); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;values;();;MapValue of Argument[-1];Element of ReturnValue;value" Collection out = null; Multimap in = (Multimap)newWithMapValue(source()); out = in.values(); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;values;();;MapValue of Argument[-1];Element of ReturnValue;value" Collection out = null; LinkedHashMultimap in = (LinkedHashMultimap)newWithMapValue(source()); out = in.values(); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;asMap;(ListMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value" @@ -6241,210 +6248,210 @@ public class Test { TreeMultiset out = null; Object in = source(); out.add(in, 0); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Multiset;true;add;(Object,int);;Argument[0];Element of Argument[-1];value" Multiset out = null; Object in = source(); out.add(in, 0); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Multiset;true;add;(Object,int);;Argument[0];Element of Argument[-1];value" ImmutableMultiset out = null; Object in = source(); out.add(in, 0); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Multiset;true;add;(Object,int);;Argument[0];Element of Argument[-1];value" ConcurrentHashMultiset out = null; Object in = source(); out.add(in, 0); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Multiset;true;elementSet;();;Element of Argument[-1];Element of ReturnValue;value" Set out = null; Multiset in = (Multiset)newWithElement(source()); out = in.elementSet(); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Multiset;true;elementSet;();;Element of Argument[-1];Element of ReturnValue;value" NavigableSet out = null; SortedMultiset in = (SortedMultiset)newWithElement(source()); out = in.elementSet(); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Multiset;true;elementSet;();;Element of Argument[-1];Element of ReturnValue;value" ImmutableSortedSet out = null; ImmutableSortedMultiset in = (ImmutableSortedMultiset)newWithElement(source()); out = in.elementSet(); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Multiset;true;elementSet;();;Element of Argument[-1];Element of ReturnValue;value" ImmutableSet out = null; ImmutableMultiset in = (ImmutableMultiset)newWithElement(source()); out = in.elementSet(); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Multiset;true;entrySet;();;Element of Argument[-1];Element of Element of ReturnValue;value" - Set out = null; + Set out = null; SortedMultiset in = (SortedMultiset)newWithElement(source()); out = in.entrySet(); - sink(getElement(getElement(out))); // $ hasValueFlow + sink(getElement2(getElement2(out))); // $ hasValueFlow } { // "com.google.common.collect;Multiset;true;entrySet;();;Element of Argument[-1];Element of Element of ReturnValue;value" - Set out = null; + Set out = null; Multiset in = (Multiset)newWithElement(source()); out = in.entrySet(); - sink(getElement(getElement(out))); // $ hasValueFlow + sink(getElement2(getElement2(out))); // $ hasValueFlow } { // "com.google.common.collect;Multiset;true;entrySet;();;Element of Argument[-1];Element of Element of ReturnValue;value" - ImmutableSet out = null; + ImmutableSet out = null; ImmutableMultiset in = (ImmutableMultiset)newWithElement(source()); out = in.entrySet(); - sink(getElement(getElement(out))); // $ hasValueFlow + sink(getElement2(getElement2(out))); // $ hasValueFlow } { // "com.google.common.collect;Multiset;true;setCount;(Object,int);;Argument[0];Element of Argument[-1];value" TreeMultiset out = null; Object in = source(); out.setCount(in, 0); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Multiset;true;setCount;(Object,int);;Argument[0];Element of Argument[-1];value" Multiset out = null; Object in = source(); out.setCount(in, 0); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Multiset;true;setCount;(Object,int);;Argument[0];Element of Argument[-1];value" ImmutableMultiset out = null; Object in = source(); out.setCount(in, 0); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Multiset;true;setCount;(Object,int);;Argument[0];Element of Argument[-1];value" ConcurrentHashMultiset out = null; Object in = source(); out.setCount(in, 0); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Multiset;true;setCount;(Object,int,int);;Argument[0];Element of Argument[-1];value" TreeMultiset out = null; Object in = source(); out.setCount(in, 0, 0); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Multiset;true;setCount;(Object,int,int);;Argument[0];Element of Argument[-1];value" Multiset out = null; Object in = source(); out.setCount(in, 0, 0); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Multiset;true;setCount;(Object,int,int);;Argument[0];Element of Argument[-1];value" ImmutableMultiset out = null; Object in = source(); out.setCount(in, 0, 0); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Multiset;true;setCount;(Object,int,int);;Argument[0];Element of Argument[-1];value" ConcurrentHashMultiset out = null; Object in = source(); out.setCount(in, 0, 0); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Multisets;false;copyHighestCountFirst;(Multiset);;Element of Argument[0];Element of ReturnValue;value" ImmutableMultiset out = null; Multiset in = (Multiset)newWithElement(source()); out = Multisets.copyHighestCountFirst(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Multisets;false;difference;(Multiset,Multiset);;Element of Argument[0];Element of ReturnValue;value" Multiset out = null; Multiset in = (Multiset)newWithElement(source()); out = Multisets.difference(in, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Multisets;false;filter;(Multiset,Predicate);;Element of Argument[0];Element of ReturnValue;value" Multiset out = null; Multiset in = (Multiset)newWithElement(source()); out = Multisets.filter(in, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Multisets;false;immutableEntry;(Object,int);;Argument[0];Element of ReturnValue;value" Multiset.Entry out = null; Object in = source(); out = Multisets.immutableEntry(in, 0); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Multisets;false;sum;(Multiset,Multiset);;Element of Argument[0..1];Element of ReturnValue;value" Multiset out = null; Multiset in = (Multiset)newWithElement(source()); out = Multisets.sum(null, in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Multisets;false;sum;(Multiset,Multiset);;Element of Argument[0..1];Element of ReturnValue;value" Multiset out = null; Multiset in = (Multiset)newWithElement(source()); out = Multisets.sum(in, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Multisets;false;union;(Multiset,Multiset);;Element of Argument[0..1];Element of ReturnValue;value" Multiset out = null; Multiset in = (Multiset)newWithElement(source()); out = Multisets.union(null, in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Multisets;false;union;(Multiset,Multiset);;Element of Argument[0..1];Element of ReturnValue;value" Multiset out = null; Multiset in = (Multiset)newWithElement(source()); out = Multisets.union(in, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Multisets;false;unmodifiableMultiset;(ImmutableMultiset);;Element of Argument[0];Element of ReturnValue;value" Multiset out = null; ImmutableMultiset in = (ImmutableMultiset)newWithElement(source()); out = Multisets.unmodifiableMultiset(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Multisets;false;unmodifiableMultiset;(Multiset);;Element of Argument[0];Element of ReturnValue;value" Multiset out = null; Multiset in = (Multiset)newWithElement(source()); out = Multisets.unmodifiableMultiset(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Multisets;false;unmodifiableSortedMultiset;(SortedMultiset);;Element of Argument[0];Element of ReturnValue;value" SortedMultiset out = null; SortedMultiset in = (SortedMultiset)newWithElement(source()); out = Multisets.unmodifiableSortedMultiset(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;MutableClassToInstanceMap;true;create;(Map);;MapKey of Argument[0];MapKey of ReturnValue;value" @@ -6507,245 +6514,245 @@ public class Test { Collection out = null; BlockingQueue in = (BlockingQueue)newWithElement(source()); Queues.drain(in, out, 0, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Queues;false;drain;(BlockingQueue,Collection,int,long,TimeUnit);;Element of Argument[0];Element of Argument[1];value" Collection out = null; BlockingQueue in = (BlockingQueue)newWithElement(source()); Queues.drain(in, out, 0, 0L, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Queues;false;newArrayDeque;(Iterable);;Element of Argument[0];Element of ReturnValue;value" ArrayDeque out = null; Iterable in = (Iterable)newWithElement(source()); out = Queues.newArrayDeque(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Queues;false;newConcurrentLinkedQueue;(Iterable);;Element of Argument[0];Element of ReturnValue;value" ConcurrentLinkedQueue out = null; Iterable in = (Iterable)newWithElement(source()); out = Queues.newConcurrentLinkedQueue(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Queues;false;newLinkedBlockingDeque;(Iterable);;Element of Argument[0];Element of ReturnValue;value" LinkedBlockingDeque out = null; Iterable in = (Iterable)newWithElement(source()); out = Queues.newLinkedBlockingDeque(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Queues;false;newLinkedBlockingQueue;(Iterable);;Element of Argument[0];Element of ReturnValue;value" LinkedBlockingQueue out = null; Iterable in = (Iterable)newWithElement(source()); out = Queues.newLinkedBlockingQueue(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Queues;false;newPriorityBlockingQueue;(Iterable);;Element of Argument[0];Element of ReturnValue;value" PriorityBlockingQueue out = null; Iterable in = (Iterable)newWithElement(source()); out = Queues.newPriorityBlockingQueue(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Queues;false;newPriorityQueue;(Iterable);;Element of Argument[0];Element of ReturnValue;value" PriorityQueue out = null; Iterable in = (Iterable)newWithElement(source()); out = Queues.newPriorityQueue(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Queues;false;synchronizedDeque;(Deque);;Element of Argument[0];Element of ReturnValue;value" Deque out = null; Deque in = (Deque)newWithElement(source()); out = Queues.synchronizedDeque(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Queues;false;synchronizedQueue;(Queue);;Element of Argument[0];Element of ReturnValue;value" Queue out = null; Queue in = (Queue)newWithElement(source()); out = Queues.synchronizedQueue(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Sets$SetView;true;copyInto;(Set);;Element of Argument[-1];Element of Argument[0];value" Set out = null; Sets.SetView in = (Sets.SetView)newWithElement(source()); in.copyInto(out); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Sets$SetView;true;immutableCopy;();;Element of Argument[-1];Element of ReturnValue;value" ImmutableSet out = null; Sets.SetView in = (Sets.SetView)newWithElement(source()); out = in.immutableCopy(); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;cartesianProduct;(List);;Element of Element of Argument[0];Element of Element of ReturnValue;value" - Set out = null; + Set out = null; List in = (List)newWithElement(newWithElement(source())); out = Sets.cartesianProduct(in); - sink(getElement(getElement(out))); // $ hasValueFlow + sink(getElement2(getElement2(out))); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;cartesianProduct;(Set[]);;Element of ArrayElement of Argument[0];Element of Element of ReturnValue;value" - Set out = null; + Set out = null; Set[] in = (Set[])newWithArrayElement(newWithElement(source())); out = Sets.cartesianProduct(in); - sink(getElement(getElement(out))); // $ hasValueFlow + sink(getElement2(getElement2(out))); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;combinations;(Set,int);;Element of Argument[0];Element of Element of ReturnValue;value" - Set out = null; + Set out = null; Set in = (Set)newWithElement(source()); out = Sets.combinations(in, 0); - sink(getElement(getElement(out))); // $ hasValueFlow + sink(getElement2(getElement2(out))); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;difference;(Set,Set);;Element of Argument[0];Element of ReturnValue;value" Sets.SetView out = null; Set in = (Set)newWithElement(source()); out = Sets.difference(in, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;filter;(NavigableSet,Predicate);;Element of Argument[0];Element of ReturnValue;value" NavigableSet out = null; NavigableSet in = (NavigableSet)newWithElement(source()); out = Sets.filter(in, (Predicate)null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;filter;(Set,Predicate);;Element of Argument[0];Element of ReturnValue;value" Set out = null; Set in = (Set)newWithElement(source()); out = Sets.filter(in, (Predicate)null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;filter;(SortedSet,Predicate);;Element of Argument[0];Element of ReturnValue;value" SortedSet out = null; SortedSet in = (SortedSet)newWithElement(source()); out = Sets.filter(in, (Predicate)null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;newConcurrentHashSet;(Iterable);;Element of Argument[0];Element of ReturnValue;value" Set out = null; Iterable in = (Iterable)newWithElement(source()); out = Sets.newConcurrentHashSet(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;newCopyOnWriteArraySet;(Iterable);;Element of Argument[0];Element of ReturnValue;value" CopyOnWriteArraySet out = null; Iterable in = (Iterable)newWithElement(source()); out = Sets.newCopyOnWriteArraySet(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;newHashSet;(Iterable);;Element of Argument[0];Element of ReturnValue;value" HashSet out = null; Iterable in = (Iterable)newWithElement(source()); out = Sets.newHashSet(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;newHashSet;(Iterator);;Element of Argument[0];Element of ReturnValue;value" HashSet out = null; Iterator in = (Iterator)newWithElement(source()); out = Sets.newHashSet(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;newHashSet;(Object[]);;ArrayElement of Argument[0];Element of ReturnValue;value" HashSet out = null; Object[] in = newWithArrayElement(source()); out = Sets.newHashSet(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;newLinkedHashSet;(Iterable);;Element of Argument[0];Element of ReturnValue;value" LinkedHashSet out = null; Iterable in = (Iterable)newWithElement(source()); out = Sets.newLinkedHashSet(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;newSetFromMap;(Map);;MapKey of Argument[0];Element of ReturnValue;value" Set out = null; Map in = (Map)newWithMapKey(source()); out = Sets.newSetFromMap(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;newTreeSet;(Iterable);;Element of Argument[0];Element of ReturnValue;value" TreeSet out = null; Iterable in = (Iterable)newWithElement(source()); out = Sets.newTreeSet(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;powerSet;(Set);;Element of Argument[0];Element of Element of ReturnValue;value" - Set out = null; + Set out = null; Set in = (Set)newWithElement(source()); out = Sets.powerSet(in); - sink(getElement(getElement(out))); // $ hasValueFlow + sink(getElement2(getElement2(out))); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;subSet;(NavigableSet,Range);;Element of Argument[0];Element of ReturnValue;value" NavigableSet out = null; NavigableSet in = (NavigableSet)newWithElement(source()); out = Sets.subSet(in, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;symmetricDifference;(Set,Set);;Element of Argument[0..1];Element of ReturnValue;value" Sets.SetView out = null; Set in = (Set)newWithElement(source()); out = Sets.symmetricDifference(null, in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;symmetricDifference;(Set,Set);;Element of Argument[0..1];Element of ReturnValue;value" Sets.SetView out = null; Set in = (Set)newWithElement(source()); out = Sets.symmetricDifference(in, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;synchronizedNavigableSet;(NavigableSet);;Element of Argument[0];Element of ReturnValue;value" NavigableSet out = null; NavigableSet in = (NavigableSet)newWithElement(source()); out = Sets.synchronizedNavigableSet(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;union;(Set,Set);;Element of Argument[0..1];Element of ReturnValue;value" Sets.SetView out = null; Set in = (Set)newWithElement(source()); out = Sets.union(null, in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;union;(Set,Set);;Element of Argument[0..1];Element of ReturnValue;value" Sets.SetView out = null; Set in = (Set)newWithElement(source()); out = Sets.union(in, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;unmodifiableNavigableSet;(NavigableSet);;Element of Argument[0];Element of ReturnValue;value" NavigableSet out = null; NavigableSet in = (NavigableSet)newWithElement(source()); out = Sets.unmodifiableNavigableSet(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Table$Cell;true;getColumnKey;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];ReturnValue;value" @@ -6773,63 +6780,63 @@ public class Test { Set out = null; Table in = (Table)newWithMapValue(source()); out = in.cellSet(); - sink(getMapValue(getElement(out))); // $ hasValueFlow + sink(getMapValue(getElement2(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;cellSet;();;MapValue of Argument[-1];MapValue of Element of ReturnValue;value" Set out = null; ArrayTable in = (ArrayTable)newWithMapValue(source()); out = in.cellSet(); - sink(getMapValue(getElement(out))); // $ hasValueFlow + sink(getMapValue(getElement2(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;cellSet;();;MapValue of Argument[-1];MapValue of Element of ReturnValue;value" ImmutableSet out = null; ImmutableTable in = (ImmutableTable)newWithMapValue(source()); out = in.cellSet(); - sink(getMapValue(getElement(out))); // $ hasValueFlow + sink(getMapValue(getElement2(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;cellSet;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];SyntheticField[com.google.common.collect.Table.columnKey] of Element of ReturnValue;value" Set out = null; Table in = (Table)newWithTable_columnKey(source()); out = in.cellSet(); - sink(getTable_columnKey(getElement(out))); // $ hasValueFlow + sink(getTable_columnKey(getElement2(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;cellSet;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];SyntheticField[com.google.common.collect.Table.columnKey] of Element of ReturnValue;value" Set out = null; ArrayTable in = (ArrayTable)newWithTable_columnKey(source()); out = in.cellSet(); - sink(getTable_columnKey(getElement(out))); // $ hasValueFlow + sink(getTable_columnKey(getElement2(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;cellSet;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];SyntheticField[com.google.common.collect.Table.columnKey] of Element of ReturnValue;value" ImmutableSet out = null; ImmutableTable in = (ImmutableTable)newWithTable_columnKey(source()); out = in.cellSet(); - sink(getTable_columnKey(getElement(out))); // $ hasValueFlow + sink(getTable_columnKey(getElement2(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;cellSet;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];SyntheticField[com.google.common.collect.Table.rowKey] of Element of ReturnValue;value" Set out = null; Table in = (Table)newWithTable_rowKey(source()); out = in.cellSet(); - sink(getTable_rowKey(getElement(out))); // $ hasValueFlow + sink(getTable_rowKey(getElement2(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;cellSet;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];SyntheticField[com.google.common.collect.Table.rowKey] of Element of ReturnValue;value" Set out = null; ArrayTable in = (ArrayTable)newWithTable_rowKey(source()); out = in.cellSet(); - sink(getTable_rowKey(getElement(out))); // $ hasValueFlow + sink(getTable_rowKey(getElement2(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;cellSet;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];SyntheticField[com.google.common.collect.Table.rowKey] of Element of ReturnValue;value" ImmutableSet out = null; ImmutableTable in = (ImmutableTable)newWithTable_rowKey(source()); out = in.cellSet(); - sink(getTable_rowKey(getElement(out))); // $ hasValueFlow + sink(getTable_rowKey(getElement2(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;column;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" @@ -6878,21 +6885,21 @@ public class Test { Set out = null; Table in = (Table)newWithTable_columnKey(source()); out = in.columnKeySet(); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;columnKeySet;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];Element of ReturnValue;value" ImmutableSet out = null; ImmutableTable in = (ImmutableTable)newWithTable_columnKey(source()); out = in.columnKeySet(); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;columnKeySet;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];Element of ReturnValue;value" ImmutableSet out = null; ArrayTable in = (ArrayTable)newWithTable_columnKey(source()); out = in.columnKeySet(); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;columnMap;();;MapValue of Argument[-1];MapValue of MapValue of ReturnValue;value" @@ -7193,35 +7200,35 @@ public class Test { SortedSet out = null; TreeBasedTable in = (TreeBasedTable)newWithTable_rowKey(source()); out = in.rowKeySet(); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;rowKeySet;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];Element of ReturnValue;value" SortedSet out = null; RowSortedTable in = (RowSortedTable)newWithTable_rowKey(source()); out = in.rowKeySet(); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;rowKeySet;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];Element of ReturnValue;value" Set out = null; Table in = (Table)newWithTable_rowKey(source()); out = in.rowKeySet(); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;rowKeySet;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];Element of ReturnValue;value" ImmutableSet out = null; ImmutableTable in = (ImmutableTable)newWithTable_rowKey(source()); out = in.rowKeySet(); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;rowKeySet;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];Element of ReturnValue;value" ImmutableSet out = null; ArrayTable in = (ArrayTable)newWithTable_rowKey(source()); out = in.rowKeySet(); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;rowMap;();;MapValue of Argument[-1];MapValue of MapValue of ReturnValue;value" @@ -7333,21 +7340,21 @@ public class Test { ImmutableCollection out = null; ImmutableTable in = (ImmutableTable)newWithMapValue(source()); out = in.values(); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;values;();;MapValue of Argument[-1];Element of ReturnValue;value" Collection out = null; Table in = (Table)newWithMapValue(source()); out = in.values(); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;values;();;MapValue of Argument[-1];Element of ReturnValue;value" Collection out = null; ArrayTable in = (ArrayTable)newWithMapValue(source()); out = in.values(); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } { // "com.google.common.collect;Tables;false;immutableCell;(Object,Object,Object);;Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value" @@ -7522,7 +7529,7 @@ public class Test { TreeMultiset out = null; Iterable in = (Iterable)newWithElement(source()); out = TreeMultiset.create(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement2(out)); // $ hasValueFlow } } From 225e70a8d03e2f9f6c12e91ebf90617398ea5e75 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Wed, 28 Jul 2021 12:27:04 +0100 Subject: [PATCH 485/741] Fill in implementations fo getMapKey/Value --- .../java/frameworks/guava/Collections.qll | 7 +- .../frameworks/guava/generated/Test.java | 1062 +++++++++-------- .../frameworks/guava/generated/test.ql | 5 +- 3 files changed, 550 insertions(+), 524 deletions(-) diff --git a/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll b/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll index 4f2f19799f6..cbfe01ea57c 100644 --- a/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll +++ b/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll @@ -35,7 +35,7 @@ private class GuavaCollectCsv extends SummaryModelCsv { "com.google.common.collect;Multimap;true;putAll;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value", "com.google.common.collect;Multimap;true;putAll;(Multimap);;MapKey of Argument[0];MapKey of Argument[-1];value", "com.google.common.collect;Multimap;true;putAll;(Multimap);;MapValue of Argument[0];MapValue of Argument[-1];value", - "com.google.common.collect;Multimap;true;removeAll;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value", + "com.google.common.collect;Multimap;true;removeAll;(Object);;MapValue of Argument[-1];Element of ReturnValue;value", "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;MapValue of Argument[-1];Element of ReturnValue;value", "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value", "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value", @@ -545,8 +545,9 @@ private class GuavaCollectCsv extends SummaryModelCsv { "com.google.common.collect;Tables;false;transpose;(Table);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value", "com.google.common.collect;Tables;false;transpose;(Table);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value", "com.google.common.collect;Tables;false;transpose;(Table);;MapValue of Argument[0];MapValue of ReturnValue;value", - "com.google.common.collect;Tables;false;transformValues;(Table,Function);;MapKey of Argument[0];MapKey of ReturnValue;value", - "com.google.common.collect;Tables;false;transformValues;(Table,Function);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;Tables;false;transformValues;(Table,Function);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value", + "com.google.common.collect;Tables;false;transformValues;(Table,Function);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value", + "com.google.common.collect;Tables;false;transformValues;(Table,Function);;MapValue of Argument[0];MapValue of ReturnValue;value", "com.google.common.collect;Tables;false;synchronizedTable;(Table);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value", "com.google.common.collect;Tables;false;synchronizedTable;(Table);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value", "com.google.common.collect;Tables;false;synchronizedTable;(Table);;MapValue of Argument[0];MapValue of ReturnValue;value", diff --git a/java/ql/test/library-tests/frameworks/guava/generated/Test.java b/java/ql/test/library-tests/frameworks/guava/generated/Test.java index 42e2857ef53..ee3f18f14b8 100644 --- a/java/ql/test/library-tests/frameworks/guava/generated/Test.java +++ b/java/ql/test/library-tests/frameworks/guava/generated/Test.java @@ -91,18 +91,30 @@ import java.util.concurrent.PriorityBlockingQueue; public class Test { T getArrayElement(T[] container) { return container[0]; } - Object getElement(Object container) { return null; } - T getElement2(Collection container) { return container.iterator().next(); } - T getElement2(ImmutableCollection.Builder container) { return getElement2(container.build()); } - T getElement2(Iterable container) { return container.iterator().next(); } - T getElement2(Iterator container) { return container.next(); } - T getElement2(Optional container) { return container.get(); } - T getElement2(Enumeration container) { return container.nextElement(); } - T getElement2(Multiset.Entry container) { return container.getElement(); } + T getElement(Collection container) { return container.iterator().next(); } + T getElement(ImmutableCollection.Builder container) { return getElement(container.build()); } + T getElement(Iterable container) { return container.iterator().next(); } + T getElement(Iterator container) { return container.next(); } + T getElement(Optional container) { return container.get(); } + T getElement(Enumeration container) { return container.nextElement(); } + T getElement(Multiset.Entry container) { return container.getElement(); } Object getMapDifference_left(Object container) { return null; } Object getMapDifference_right(Object container) { return null; } - Object getMapKey(Object container) { return null; } - Object getMapValue(Object container) { return null; } + Object getMapKey2(Object container) { return null; } + Object getMapValue2(Object container) { return null; } + K getMapKey(Map container) { return getElement(container.keySet()); } + K getMapKey(Multimap container) { return getElement(container.keySet()); } + K getMapKey(Map.Entry container) { return container.getKey(); } + K getMapKey(ImmutableMap.Builder container) { return getMapKey(container.build()); } + K getMapKey(ImmutableMultimap.Builder container) { return getMapKey(container.build()); } + V getMapValue(Map container) { return getElement(container.values()); } + V getMapValue(Multimap container) { return getElement(container.values()); } + V getMapValue(Map.Entry container) { return container.getValue(); } + V getMapValue(ImmutableMap.Builder container) { return getMapValue(container.build()); } + V getMapValue(ImmutableMultimap.Builder container) { return getMapValue(container.build()); } + V getMapValue(Table container) { return getElement(container.values()); } + V getMapValue(Table.Cell container) { return container.getValue(); } + V getMapValue(ImmutableTable.Builder container) { return getMapValue(container.build()); } Object getTable_columnKey(Object container) { return null; } Object getTable_rowKey(Object container) { return null; } T[] newWithArrayElement(T element) { return (T[]) new Object[]{element}; } @@ -270,35 +282,35 @@ public class Test { Collection out = null; Collection in = (Collection)newWithElement(source()); out = Collections2.filter(in, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Collections2;false;orderedPermutations;(Iterable);;Element of Argument[0];Element of ReturnValue;value" Collection out = null; Iterable in = (Iterable)newWithElement(source()); out = Collections2.orderedPermutations(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Collections2;false;orderedPermutations;(Iterable,Comparator);;Element of Argument[0];Element of ReturnValue;value" Collection out = null; Iterable in = (Iterable)newWithElement(source()); out = Collections2.orderedPermutations(in, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Collections2;false;permutations;(Collection);;Element of Argument[0];Element of ReturnValue;value" Collection out = null; Collection in = (Collection)newWithElement(source()); out = Collections2.permutations(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ConcurrentHashMultiset;true;create;(Iterable);;Element of Argument[0];Element of ReturnValue;value" ConcurrentHashMultiset out = null; Iterable in = (Iterable)newWithElement(source()); out = ConcurrentHashMultiset.create(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;HashBasedTable;true;create;(Table);;MapValue of Argument[0];MapValue of ReturnValue;value" @@ -354,7 +366,7 @@ public class Test { HashMultiset out = null; Iterable in = (Iterable)newWithElement(source()); out = HashMultiset.create(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableClassToInstanceMap;true;copyOf;(Map);;MapKey of Argument[0];MapKey of ReturnValue;value" @@ -389,84 +401,84 @@ public class Test { ImmutableSortedSet.Builder out = null; Object in = source(); out.add(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;(Object);;Argument[0];Element of Argument[-1];value" ImmutableSortedMultiset.Builder out = null; Object in = source(); out.add(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;(Object);;Argument[0];Element of Argument[-1];value" ImmutableSet.Builder out = null; Object in = source(); out.add(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;(Object);;Argument[0];Element of Argument[-1];value" ImmutableMultiset.Builder out = null; Object in = source(); out.add(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;(Object);;Argument[0];Element of Argument[-1];value" ImmutableList.Builder out = null; Object in = source(); out.add(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;(Object);;Argument[0];Element of Argument[-1];value" ImmutableCollection.Builder out = null; Object in = source(); out.add(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;(Object[]);;ArrayElement of Argument[0];Element of Argument[-1];value" ImmutableSortedSet.Builder out = null; Object[] in = newWithArrayElement(source()); out.add(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;(Object[]);;ArrayElement of Argument[0];Element of Argument[-1];value" ImmutableSortedMultiset.Builder out = null; Object[] in = newWithArrayElement(source()); out.add(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;(Object[]);;ArrayElement of Argument[0];Element of Argument[-1];value" ImmutableSet.Builder out = null; Object[] in = newWithArrayElement(source()); out.add(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;(Object[]);;ArrayElement of Argument[0];Element of Argument[-1];value" ImmutableMultiset.Builder out = null; Object[] in = newWithArrayElement(source()); out.add(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;(Object[]);;ArrayElement of Argument[0];Element of Argument[-1];value" ImmutableList.Builder out = null; Object[] in = newWithArrayElement(source()); out.add(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;(Object[]);;ArrayElement of Argument[0];Element of Argument[-1];value" ImmutableCollection.Builder out = null; Object[] in = newWithArrayElement(source()); out.add(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;;;Argument[-1];ReturnValue;value" @@ -557,84 +569,84 @@ public class Test { ImmutableSortedSet.Builder out = null; Iterable in = (Iterable)newWithElement(source()); out.addAll(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;(Iterable);;Element of Argument[0];Element of Argument[-1];value" ImmutableSortedMultiset.Builder out = null; Iterable in = (Iterable)newWithElement(source()); out.addAll(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;(Iterable);;Element of Argument[0];Element of Argument[-1];value" ImmutableSet.Builder out = null; Iterable in = (Iterable)newWithElement(source()); out.addAll(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;(Iterable);;Element of Argument[0];Element of Argument[-1];value" ImmutableMultiset.Builder out = null; Iterable in = (Iterable)newWithElement(source()); out.addAll(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;(Iterable);;Element of Argument[0];Element of Argument[-1];value" ImmutableList.Builder out = null; Iterable in = (Iterable)newWithElement(source()); out.addAll(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;(Iterable);;Element of Argument[0];Element of Argument[-1];value" ImmutableCollection.Builder out = null; Iterable in = (Iterable)newWithElement(source()); out.addAll(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;(Iterator);;Element of Argument[0];Element of Argument[-1];value" ImmutableSortedSet.Builder out = null; Iterator in = (Iterator)newWithElement(source()); out.addAll(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;(Iterator);;Element of Argument[0];Element of Argument[-1];value" ImmutableSortedMultiset.Builder out = null; Iterator in = (Iterator)newWithElement(source()); out.addAll(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;(Iterator);;Element of Argument[0];Element of Argument[-1];value" ImmutableSet.Builder out = null; Iterator in = (Iterator)newWithElement(source()); out.addAll(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;(Iterator);;Element of Argument[0];Element of Argument[-1];value" ImmutableMultiset.Builder out = null; Iterator in = (Iterator)newWithElement(source()); out.addAll(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;(Iterator);;Element of Argument[0];Element of Argument[-1];value" ImmutableList.Builder out = null; Iterator in = (Iterator)newWithElement(source()); out.addAll(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;(Iterator);;Element of Argument[0];Element of Argument[-1];value" ImmutableCollection.Builder out = null; Iterator in = (Iterator)newWithElement(source()); out.addAll(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;;;Argument[-1];ReturnValue;value" @@ -725,679 +737,679 @@ public class Test { ImmutableSortedSet out = null; ImmutableSortedSet.Builder in = (ImmutableSortedSet.Builder)newWithElement(source()); out = in.build(); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;build;();;Element of Argument[-1];Element of ReturnValue;value" ImmutableSortedMultiset out = null; ImmutableSortedMultiset.Builder in = (ImmutableSortedMultiset.Builder)newWithElement(source()); out = in.build(); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;build;();;Element of Argument[-1];Element of ReturnValue;value" ImmutableSet out = null; ImmutableSet.Builder in = (ImmutableSet.Builder)newWithElement(source()); out = in.build(); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;build;();;Element of Argument[-1];Element of ReturnValue;value" ImmutableMultiset out = null; ImmutableMultiset.Builder in = (ImmutableMultiset.Builder)newWithElement(source()); out = in.build(); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;build;();;Element of Argument[-1];Element of ReturnValue;value" ImmutableList out = null; ImmutableList.Builder in = (ImmutableList.Builder)newWithElement(source()); out = in.build(); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;build;();;Element of Argument[-1];Element of ReturnValue;value" ImmutableCollection out = null; ImmutableCollection.Builder in = (ImmutableCollection.Builder)newWithElement(source()); out = in.build(); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection;true;asList;();;Element of Argument[-1];Element of ReturnValue;value" ImmutableList out = null; ImmutableSet in = (ImmutableSet)newWithElement(source()); out = in.asList(); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection;true;asList;();;Element of Argument[-1];Element of ReturnValue;value" ImmutableList out = null; ImmutableMultiset in = (ImmutableMultiset)newWithElement(source()); out = in.asList(); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection;true;asList;();;Element of Argument[-1];Element of ReturnValue;value" ImmutableList out = null; ImmutableList in = (ImmutableList)newWithElement(source()); out = in.asList(); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection;true;asList;();;Element of Argument[-1];Element of ReturnValue;value" ImmutableList out = null; ImmutableCollection in = (ImmutableCollection)newWithElement(source()); out = in.asList(); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;copyOf;(Collection);;Element of Argument[0];Element of ReturnValue;value" ImmutableList out = null; Collection in = (Collection)newWithElement(source()); out = ImmutableList.copyOf(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;copyOf;(Iterable);;Element of Argument[0];Element of ReturnValue;value" ImmutableList out = null; Iterable in = (Iterable)newWithElement(source()); out = ImmutableList.copyOf(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;copyOf;(Iterator);;Element of Argument[0];Element of ReturnValue;value" ImmutableList out = null; Iterator in = (Iterator)newWithElement(source()); out = ImmutableList.copyOf(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;copyOf;(Object[]);;ArrayElement of Argument[0];Element of ReturnValue;value" ImmutableList out = null; Object[] in = newWithArrayElement(source()); out = ImmutableList.copyOf(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, null, null, null, null, null, null, null, null, null, in, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, null, null, null, null, null, null, null, null, in, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, null, null, null, null, null, null, null, null, in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, null, null, null, null, null, null, null, in, null, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, null, null, null, null, null, null, null, in, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, null, null, null, null, null, null, null, in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, null, null, null, null, null, null, in, null, null, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, null, null, null, null, null, null, in, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, null, null, null, null, null, null, in, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, null, null, null, null, null, null, in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, null, null, null, null, null, in, null, null, null, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, null, null, null, null, null, in, null, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, null, null, null, null, null, in, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, null, null, null, null, null, in, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, null, null, null, null, null, in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, null, null, null, null, in, null, null, null, null, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, null, null, null, null, in, null, null, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, null, null, null, null, in, null, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, null, null, null, null, in, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, null, null, null, null, in, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, null, null, null, null, in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, null, null, null, in, null, null, null, null, null, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, null, null, null, in, null, null, null, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, null, null, null, in, null, null, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, null, null, null, in, null, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, null, null, null, in, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, null, null, null, in, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, null, null, null, in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, null, null, in, null, null, null, null, null, null, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, null, null, in, null, null, null, null, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, null, null, in, null, null, null, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, null, null, in, null, null, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, null, null, in, null, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, null, null, in, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, null, null, in, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, null, null, in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, null, in, null, null, null, null, null, null, null, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, null, in, null, null, null, null, null, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, null, in, null, null, null, null, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, null, in, null, null, null, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, null, in, null, null, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, null, in, null, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, null, in, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, null, in, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, null, in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, in, null, null, null, null, null, null, null, null, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, in, null, null, null, null, null, null, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, in, null, null, null, null, null, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, in, null, null, null, null, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, in, null, null, null, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, in, null, null, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, in, null, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, in, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, in, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, null, in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, in, null, null, null, null, null, null, null, null, null, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, in, null, null, null, null, null, null, null, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, in, null, null, null, null, null, null, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, in, null, null, null, null, null, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, in, null, null, null, null, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, in, null, null, null, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, in, null, null, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, in, null, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, in, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, in, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(null, in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(in, null, null, null, null, null, null, null, null, null, null, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(in, null, null, null, null, null, null, null, null, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(in, null, null, null, null, null, null, null, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(in, null, null, null, null, null, null, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(in, null, null, null, null, null, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(in, null, null, null, null, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(in, null, null, null, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(in, null, null, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(in, null, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(in, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(in, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; Object in = source(); out = ImmutableList.of(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;ArrayElement of Argument[12];Element of ReturnValue;value" ImmutableList out = null; Object[] in = newWithArrayElement(source()); out = ImmutableList.of(null, null, null, null, null, null, null, null, null, null, null, null, in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;reverse;();;Element of Argument[-1];Element of ReturnValue;value" ImmutableList out = null; ImmutableList in = (ImmutableList)newWithElement(source()); out = in.reverse(); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;sortedCopyOf;(Comparator,Iterable);;Element of Argument[1];Element of ReturnValue;value" ImmutableList out = null; Iterable in = (Iterable)newWithElement(source()); out = ImmutableList.sortedCopyOf(null, in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;sortedCopyOf;(Iterable);;Element of Argument[0];Element of ReturnValue;value" ImmutableList out = null; Iterable in = (Iterable)newWithElement(source()); out = ImmutableList.sortedCopyOf(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;subList;(int,int);;Element of Argument[-1];Element of ReturnValue;value" ImmutableList out = null; ImmutableList in = (ImmutableList)newWithElement(source()); out = in.subList(0, 0); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;build;();;MapKey of Argument[-1];MapKey of ReturnValue;value" @@ -2587,371 +2599,371 @@ public class Test { ImmutableSortedMultiset.Builder out = null; Object in = source(); out.addCopies(in, 0); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset$Builder;true;addCopies;(Object,int);;Argument[0];Element of Argument[-1];value" ImmutableMultiset.Builder out = null; Object in = source(); out.addCopies(in, 0); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;copyOf;(Iterable);;Element of Argument[0];Element of ReturnValue;value" ImmutableMultiset out = null; Iterable in = (Iterable)newWithElement(source()); out = ImmutableMultiset.copyOf(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;copyOf;(Iterator);;Element of Argument[0];Element of ReturnValue;value" ImmutableMultiset out = null; Iterator in = (Iterator)newWithElement(source()); out = ImmutableMultiset.copyOf(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;copyOf;(Object[]);;ArrayElement of Argument[0];Element of ReturnValue;value" ImmutableMultiset out = null; Object[] in = newWithArrayElement(source()); out = ImmutableMultiset.copyOf(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; Object in = source(); out = ImmutableMultiset.of(null, null, null, null, null, in, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; Object in = source(); out = ImmutableMultiset.of(null, null, null, null, in, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; Object in = source(); out = ImmutableMultiset.of(null, null, null, null, in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; Object in = source(); out = ImmutableMultiset.of(null, null, null, in, null, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; Object in = source(); out = ImmutableMultiset.of(null, null, null, in, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; Object in = source(); out = ImmutableMultiset.of(null, null, null, in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; Object in = source(); out = ImmutableMultiset.of(null, null, in, null, null, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; Object in = source(); out = ImmutableMultiset.of(null, null, in, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; Object in = source(); out = ImmutableMultiset.of(null, null, in, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; Object in = source(); out = ImmutableMultiset.of(null, null, in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; Object in = source(); out = ImmutableMultiset.of(null, in, null, null, null, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; Object in = source(); out = ImmutableMultiset.of(null, in, null, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; Object in = source(); out = ImmutableMultiset.of(null, in, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; Object in = source(); out = ImmutableMultiset.of(null, in, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; Object in = source(); out = ImmutableMultiset.of(null, in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; Object in = source(); out = ImmutableMultiset.of(in, null, null, null, null, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; Object in = source(); out = ImmutableMultiset.of(in, null, null, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; Object in = source(); out = ImmutableMultiset.of(in, null, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; Object in = source(); out = ImmutableMultiset.of(in, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; Object in = source(); out = ImmutableMultiset.of(in, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; Object in = source(); out = ImmutableMultiset.of(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;ArrayElement of Argument[6];Element of ReturnValue;value" ImmutableMultiset out = null; Object[] in = newWithArrayElement(source()); out = ImmutableMultiset.of(null, null, null, null, null, null, in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;copyOf;(Collection);;Element of Argument[0];Element of ReturnValue;value" ImmutableSet out = null; Collection in = (Collection)newWithElement(source()); out = ImmutableSet.copyOf(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;copyOf;(Iterable);;Element of Argument[0];Element of ReturnValue;value" ImmutableSet out = null; Iterable in = (Iterable)newWithElement(source()); out = ImmutableSet.copyOf(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;copyOf;(Iterator);;Element of Argument[0];Element of ReturnValue;value" ImmutableSet out = null; Iterator in = (Iterator)newWithElement(source()); out = ImmutableSet.copyOf(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;copyOf;(Object[]);;ArrayElement of Argument[0];Element of ReturnValue;value" ImmutableSet out = null; Object[] in = newWithArrayElement(source()); out = ImmutableSet.copyOf(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; Object in = source(); out = ImmutableSet.of(null, null, null, null, null, in, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; Object in = source(); out = ImmutableSet.of(null, null, null, null, in, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; Object in = source(); out = ImmutableSet.of(null, null, null, null, in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; Object in = source(); out = ImmutableSet.of(null, null, null, in, null, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; Object in = source(); out = ImmutableSet.of(null, null, null, in, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; Object in = source(); out = ImmutableSet.of(null, null, null, in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; Object in = source(); out = ImmutableSet.of(null, null, in, null, null, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; Object in = source(); out = ImmutableSet.of(null, null, in, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; Object in = source(); out = ImmutableSet.of(null, null, in, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; Object in = source(); out = ImmutableSet.of(null, null, in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; Object in = source(); out = ImmutableSet.of(null, in, null, null, null, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; Object in = source(); out = ImmutableSet.of(null, in, null, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; Object in = source(); out = ImmutableSet.of(null, in, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; Object in = source(); out = ImmutableSet.of(null, in, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; Object in = source(); out = ImmutableSet.of(null, in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; Object in = source(); out = ImmutableSet.of(in, null, null, null, null, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; Object in = source(); out = ImmutableSet.of(in, null, null, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; Object in = source(); out = ImmutableSet.of(in, null, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; Object in = source(); out = ImmutableSet.of(in, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; Object in = source(); out = ImmutableSet.of(in, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; Object in = source(); out = ImmutableSet.of(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;ArrayElement of Argument[6];Element of ReturnValue;value" ImmutableSet out = null; Object[] in = newWithArrayElement(source()); out = ImmutableSet.of(null, null, null, null, null, null, in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMap;true;copyOf;(Iterable);;MapKey of Element of Argument[0];MapKey of ReturnValue;value" @@ -3238,406 +3250,406 @@ public class Test { ImmutableSortedMultiset out = null; Comparable[] in = newWithArrayElement(source()); out = ImmutableSortedMultiset.copyOf(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMultiset;true;copyOf;(Comparator,Iterable);;Element of Argument[1];Element of ReturnValue;value" ImmutableSortedMultiset out = null; Iterable in = (Iterable)newWithElement(source()); out = ImmutableSortedMultiset.copyOf((Comparator)null, in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMultiset;true;copyOf;(Comparator,Iterator);;Element of Argument[1];Element of ReturnValue;value" ImmutableSortedMultiset out = null; Iterator in = (Iterator)newWithElement(source()); out = ImmutableSortedMultiset.copyOf((Comparator)null, in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMultiset;true;copyOf;(Iterable);;Element of Argument[0];Element of ReturnValue;value" ImmutableSortedMultiset out = null; Iterable in = (Iterable)newWithElement(source()); out = ImmutableSortedMultiset.copyOf(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMultiset;true;copyOf;(Iterator);;Element of Argument[0];Element of ReturnValue;value" ImmutableSortedMultiset out = null; Iterator in = (Iterator)newWithElement(source()); out = ImmutableSortedMultiset.copyOf(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMultiset;true;copyOfSorted;(SortedMultiset);;Element of Argument[0];Element of ReturnValue;value" ImmutableSortedMultiset out = null; SortedMultiset in = (SortedMultiset)newWithElement(source()); out = ImmutableSortedMultiset.copyOfSorted(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedMultiset out = null; Comparable in = source(); out = ImmutableSortedMultiset.of(null, null, null, null, null, in, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedMultiset out = null; Comparable in = source(); out = ImmutableSortedMultiset.of(null, null, null, null, in, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedMultiset out = null; Comparable in = source(); out = ImmutableSortedMultiset.of(null, null, null, null, in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedMultiset out = null; Comparable in = source(); out = ImmutableSortedMultiset.of(null, null, null, in, null, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedMultiset out = null; Comparable in = source(); out = ImmutableSortedMultiset.of(null, null, null, in, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedMultiset out = null; Comparable in = source(); out = ImmutableSortedMultiset.of(null, null, null, in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedMultiset out = null; Comparable in = source(); out = ImmutableSortedMultiset.of(null, null, in, null, null, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedMultiset out = null; Comparable in = source(); out = ImmutableSortedMultiset.of(null, null, in, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedMultiset out = null; Comparable in = source(); out = ImmutableSortedMultiset.of(null, null, in, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedMultiset out = null; Comparable in = source(); out = ImmutableSortedMultiset.of(null, null, in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedMultiset out = null; Comparable in = source(); out = ImmutableSortedMultiset.of(null, in, null, null, null, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedMultiset out = null; Comparable in = source(); out = ImmutableSortedMultiset.of(null, in, null, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedMultiset out = null; Comparable in = source(); out = ImmutableSortedMultiset.of(null, in, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedMultiset out = null; Comparable in = source(); out = ImmutableSortedMultiset.of(null, in, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedMultiset out = null; Comparable in = source(); out = ImmutableSortedMultiset.of(null, in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedMultiset out = null; Comparable in = source(); out = ImmutableSortedMultiset.of(in, null, null, null, null, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedMultiset out = null; Comparable in = source(); out = ImmutableSortedMultiset.of(in, null, null, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedMultiset out = null; Comparable in = source(); out = ImmutableSortedMultiset.of(in, null, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedMultiset out = null; Comparable in = source(); out = ImmutableSortedMultiset.of(in, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedMultiset out = null; Comparable in = source(); out = ImmutableSortedMultiset.of(in, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedMultiset out = null; Comparable in = source(); out = ImmutableSortedMultiset.of(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;ArrayElement of Argument[6];Element of ReturnValue;value" ImmutableSortedMultiset out = null; Comparable[] in = newWithArrayElement(source()); out = ImmutableSortedMultiset.of(null, null, null, null, null, null, in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;copyOf;(Collection);;Element of Argument[0];Element of ReturnValue;value" ImmutableSortedSet out = null; Collection in = (Collection)newWithElement(source()); out = ImmutableSortedSet.copyOf(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;copyOf;(Comparable[]);;ArrayElement of Argument[0];Element of ReturnValue;value" ImmutableSortedSet out = null; Comparable[] in = newWithArrayElement(source()); out = ImmutableSortedSet.copyOf(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;copyOf;(Comparator,Collection);;Element of Argument[1];Element of ReturnValue;value" ImmutableSortedSet out = null; Collection in = (Collection)newWithElement(source()); out = ImmutableSortedSet.copyOf((Comparator)null, in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;copyOf;(Comparator,Iterable);;Element of Argument[1];Element of ReturnValue;value" ImmutableSortedSet out = null; Iterable in = (Iterable)newWithElement(source()); out = ImmutableSortedSet.copyOf((Comparator)null, in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;copyOf;(Comparator,Iterator);;Element of Argument[1];Element of ReturnValue;value" ImmutableSortedSet out = null; Iterator in = (Iterator)newWithElement(source()); out = ImmutableSortedSet.copyOf((Comparator)null, in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;copyOf;(Iterable);;Element of Argument[0];Element of ReturnValue;value" ImmutableSortedSet out = null; Iterable in = (Iterable)newWithElement(source()); out = ImmutableSortedSet.copyOf(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;copyOf;(Iterator);;Element of Argument[0];Element of ReturnValue;value" ImmutableSortedSet out = null; Iterator in = (Iterator)newWithElement(source()); out = ImmutableSortedSet.copyOf(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;copyOfSorted;(SortedSet);;Element of Argument[0];Element of ReturnValue;value" ImmutableSortedSet out = null; SortedSet in = (SortedSet)newWithElement(source()); out = ImmutableSortedSet.copyOfSorted(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedSet out = null; Comparable in = source(); out = ImmutableSortedSet.of(null, null, null, null, null, in, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedSet out = null; Comparable in = source(); out = ImmutableSortedSet.of(null, null, null, null, in, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedSet out = null; Comparable in = source(); out = ImmutableSortedSet.of(null, null, null, null, in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedSet out = null; Comparable in = source(); out = ImmutableSortedSet.of(null, null, null, in, null, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedSet out = null; Comparable in = source(); out = ImmutableSortedSet.of(null, null, null, in, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedSet out = null; Comparable in = source(); out = ImmutableSortedSet.of(null, null, null, in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedSet out = null; Comparable in = source(); out = ImmutableSortedSet.of(null, null, in, null, null, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedSet out = null; Comparable in = source(); out = ImmutableSortedSet.of(null, null, in, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedSet out = null; Comparable in = source(); out = ImmutableSortedSet.of(null, null, in, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedSet out = null; Comparable in = source(); out = ImmutableSortedSet.of(null, null, in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedSet out = null; Comparable in = source(); out = ImmutableSortedSet.of(null, in, null, null, null, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedSet out = null; Comparable in = source(); out = ImmutableSortedSet.of(null, in, null, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedSet out = null; Comparable in = source(); out = ImmutableSortedSet.of(null, in, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedSet out = null; Comparable in = source(); out = ImmutableSortedSet.of(null, in, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedSet out = null; Comparable in = source(); out = ImmutableSortedSet.of(null, in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedSet out = null; Comparable in = source(); out = ImmutableSortedSet.of(in, null, null, null, null, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedSet out = null; Comparable in = source(); out = ImmutableSortedSet.of(in, null, null, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedSet out = null; Comparable in = source(); out = ImmutableSortedSet.of(in, null, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedSet out = null; Comparable in = source(); out = ImmutableSortedSet.of(in, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedSet out = null; Comparable in = source(); out = ImmutableSortedSet.of(in, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedSet out = null; Comparable in = source(); out = ImmutableSortedSet.of(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;of;;;ArrayElement of Argument[6];Element of ReturnValue;value" ImmutableSortedSet out = null; Comparable[] in = newWithArrayElement(source()); out = ImmutableSortedSet.of(null, null, null, null, null, null, in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableTable$Builder;true;build;();;MapValue of Argument[-1];MapValue of ReturnValue;value" @@ -3805,119 +3817,119 @@ public class Test { Collection out = null; Iterable in = (Iterable)newWithElement(source()); Iterables.addAll(out, in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;concat;(Iterable);;Element of Element of Argument[0];Element of ReturnValue;value" Iterable out = null; Iterable in = (Iterable)newWithElement(newWithElement(source())); out = Iterables.concat(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;concat;(Iterable,Iterable);;Element of Argument[0..1];Element of ReturnValue;value" Iterable out = null; Iterable in = (Iterable)newWithElement(source()); out = Iterables.concat(null, in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;concat;(Iterable,Iterable);;Element of Argument[0..1];Element of ReturnValue;value" Iterable out = null; Iterable in = (Iterable)newWithElement(source()); out = Iterables.concat(in, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;concat;(Iterable,Iterable,Iterable);;Element of Argument[0..2];Element of ReturnValue;value" Iterable out = null; Iterable in = (Iterable)newWithElement(source()); out = Iterables.concat(null, null, in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;concat;(Iterable,Iterable,Iterable);;Element of Argument[0..2];Element of ReturnValue;value" Iterable out = null; Iterable in = (Iterable)newWithElement(source()); out = Iterables.concat(null, in, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;concat;(Iterable,Iterable,Iterable);;Element of Argument[0..2];Element of ReturnValue;value" Iterable out = null; Iterable in = (Iterable)newWithElement(source()); out = Iterables.concat(in, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;concat;(Iterable,Iterable,Iterable,Iterable);;Element of Argument[0..3];Element of ReturnValue;value" Iterable out = null; Iterable in = (Iterable)newWithElement(source()); out = Iterables.concat(null, null, null, in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;concat;(Iterable,Iterable,Iterable,Iterable);;Element of Argument[0..3];Element of ReturnValue;value" Iterable out = null; Iterable in = (Iterable)newWithElement(source()); out = Iterables.concat(null, null, in, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;concat;(Iterable,Iterable,Iterable,Iterable);;Element of Argument[0..3];Element of ReturnValue;value" Iterable out = null; Iterable in = (Iterable)newWithElement(source()); out = Iterables.concat(null, in, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;concat;(Iterable,Iterable,Iterable,Iterable);;Element of Argument[0..3];Element of ReturnValue;value" Iterable out = null; Iterable in = (Iterable)newWithElement(source()); out = Iterables.concat(in, null, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;concat;(Iterable[]);;Element of ArrayElement of Argument[0];Element of ReturnValue;value" Iterable out = null; Iterable[] in = (Iterable[])newWithArrayElement(newWithElement(source())); out = Iterables.concat(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;consumingIterable;(Iterable);;Element of Argument[0];Element of ReturnValue;value" Iterable out = null; Iterable in = (Iterable)newWithElement(source()); out = Iterables.consumingIterable(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;cycle;(Iterable);;Element of Argument[0];Element of ReturnValue;value" Iterable out = null; Iterable in = (Iterable)newWithElement(source()); out = Iterables.cycle(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;cycle;(Object[]);;ArrayElement of Argument[0];Element of ReturnValue;value" Iterable out = null; Object[] in = newWithArrayElement(source()); out = Iterables.cycle(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;filter;(Iterable,Class);;Element of Argument[0];Element of ReturnValue;value" Iterable out = null; Iterable in = (Iterable)newWithElement(source()); out = Iterables.filter(in, (Class)null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;filter;(Iterable,Predicate);;Element of Argument[0];Element of ReturnValue;value" Iterable out = null; Iterable in = (Iterable)newWithElement(source()); out = Iterables.filter(in, (Predicate)null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;find;(Iterable,Predicate);;Element of Argument[0];ReturnValue;value" @@ -4008,35 +4020,35 @@ public class Test { Iterable out = null; Iterable in = (Iterable)newWithElement(source()); out = Iterables.limit(in, 0); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;mergeSorted;(Iterable,Comparator);;Element of Element of Argument[0];Element of ReturnValue;value" Iterable out = null; Iterable in = (Iterable)newWithElement(newWithElement(source())); out = Iterables.mergeSorted(in, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;paddedPartition;(Iterable,int);;Element of Element of Argument[0];Element of ReturnValue;value" Iterable out = null; Iterable in = (Iterable)newWithElement(newWithElement(source())); out = Iterables.paddedPartition(in, 0); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;partition;(Iterable,int);;Element of Element of Argument[0];Element of ReturnValue;value" Iterable out = null; Iterable in = (Iterable)newWithElement(newWithElement(source())); out = Iterables.partition(in, 0); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;skip;(Iterable,int);;Element of Argument[0];Element of ReturnValue;value" Iterable out = null; Iterable in = (Iterable)newWithElement(source()); out = Iterables.skip(in, 0); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;toArray;(Iterable,Class);;Element of Argument[0];ArrayElement of ReturnValue;value" @@ -4057,147 +4069,147 @@ public class Test { Optional out = null; Iterable in = (Iterable)newWithElement(source()); out = Iterables.tryFind(in, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;unmodifiableIterable;(ImmutableCollection);;Element of Argument[0];Element of ReturnValue;value" Iterable out = null; ImmutableCollection in = (ImmutableCollection)newWithElement(source()); out = Iterables.unmodifiableIterable(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;unmodifiableIterable;(Iterable);;Element of Argument[0];Element of ReturnValue;value" Iterable out = null; Iterable in = (Iterable)newWithElement(source()); out = Iterables.unmodifiableIterable(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;addAll;(Collection,Iterator);;Element of Argument[1];Element of Argument[0];value" Collection out = null; Iterator in = (Iterator)newWithElement(source()); Iterators.addAll(out, in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;asEnumeration;(Iterator);;Element of Argument[0];Element of ReturnValue;value" Enumeration out = null; Iterator in = (Iterator)newWithElement(source()); out = Iterators.asEnumeration(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;concat;(Iterator);;Element of Element of Argument[0];Element of ReturnValue;value" Iterator out = null; Iterator in = (Iterator)newWithElement(newWithElement(source())); out = Iterators.concat(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;concat;(Iterator,Iterator);;Element of Argument[0..1];Element of ReturnValue;value" Iterator out = null; Iterator in = (Iterator)newWithElement(source()); out = Iterators.concat(null, in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;concat;(Iterator,Iterator);;Element of Argument[0..1];Element of ReturnValue;value" Iterator out = null; Iterator in = (Iterator)newWithElement(source()); out = Iterators.concat(in, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;concat;(Iterator,Iterator,Iterator);;Element of Argument[0..2];Element of ReturnValue;value" Iterator out = null; Iterator in = (Iterator)newWithElement(source()); out = Iterators.concat(null, null, in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;concat;(Iterator,Iterator,Iterator);;Element of Argument[0..2];Element of ReturnValue;value" Iterator out = null; Iterator in = (Iterator)newWithElement(source()); out = Iterators.concat(null, in, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;concat;(Iterator,Iterator,Iterator);;Element of Argument[0..2];Element of ReturnValue;value" Iterator out = null; Iterator in = (Iterator)newWithElement(source()); out = Iterators.concat(in, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;concat;(Iterator,Iterator,Iterator,Iterator);;Element of Argument[0..3];Element of ReturnValue;value" Iterator out = null; Iterator in = (Iterator)newWithElement(source()); out = Iterators.concat(null, null, null, in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;concat;(Iterator,Iterator,Iterator,Iterator);;Element of Argument[0..3];Element of ReturnValue;value" Iterator out = null; Iterator in = (Iterator)newWithElement(source()); out = Iterators.concat(null, null, in, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;concat;(Iterator,Iterator,Iterator,Iterator);;Element of Argument[0..3];Element of ReturnValue;value" Iterator out = null; Iterator in = (Iterator)newWithElement(source()); out = Iterators.concat(null, in, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;concat;(Iterator,Iterator,Iterator,Iterator);;Element of Argument[0..3];Element of ReturnValue;value" Iterator out = null; Iterator in = (Iterator)newWithElement(source()); out = Iterators.concat(in, null, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;concat;(Iterator[]);;Element of ArrayElement of Argument[0];Element of ReturnValue;value" Iterator out = null; Iterator[] in = (Iterator[])newWithArrayElement(newWithElement(source())); out = Iterators.concat(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;consumingIterator;(Iterator);;Element of Argument[0];Element of ReturnValue;value" Iterator out = null; Iterator in = (Iterator)newWithElement(source()); out = Iterators.consumingIterator(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;cycle;(Iterable);;Element of Argument[0];Element of ReturnValue;value" Iterator out = null; Iterable in = (Iterable)newWithElement(source()); out = Iterators.cycle(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;cycle;(Object[]);;ArrayElement of Argument[0];Element of ReturnValue;value" Iterator out = null; Object[] in = newWithArrayElement(source()); out = Iterators.cycle(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;filter;(Iterator,Class);;Element of Argument[0];Element of ReturnValue;value" UnmodifiableIterator out = null; Iterator in = (Iterator)newWithElement(source()); out = Iterators.filter(in, (Class)null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;filter;(Iterator,Predicate);;Element of Argument[0];Element of ReturnValue;value" UnmodifiableIterator out = null; Iterator in = (Iterator)newWithElement(source()); out = Iterators.filter(in, (Predicate)null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;find;(Iterator,Predicate);;Element of Argument[0];ReturnValue;value" @@ -4225,14 +4237,14 @@ public class Test { UnmodifiableIterator out = null; Object[] in = newWithArrayElement(source()); out = Iterators.forArray(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;forEnumeration;(Enumeration);;Element of Argument[0];Element of ReturnValue;value" UnmodifiableIterator out = null; Enumeration in = (Enumeration)newWithElement(source()); out = Iterators.forEnumeration(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;get;(Iterator,int);;Element of Argument[0];ReturnValue;value" @@ -4316,49 +4328,49 @@ public class Test { Iterator out = null; Iterator in = (Iterator)newWithElement(source()); out = Iterators.limit(in, 0); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;mergeSorted;(Iterable,Comparator);;Element of Element of Argument[0];Element of ReturnValue;value" UnmodifiableIterator out = null; Iterable in = (Iterable)newWithElement(newWithElement(source())); out = Iterators.mergeSorted(in, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;paddedPartition;(Iterator,int);;Element of Element of Argument[0];Element of ReturnValue;value" UnmodifiableIterator out = null; Iterator in = (Iterator)newWithElement(newWithElement(source())); out = Iterators.paddedPartition(in, 0); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;partition;(Iterator,int);;Element of Element of Argument[0];Element of ReturnValue;value" UnmodifiableIterator out = null; Iterator in = (Iterator)newWithElement(newWithElement(source())); out = Iterators.partition(in, 0); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;peekingIterator;(Iterator);;Element of Argument[0];Element of ReturnValue;value" PeekingIterator out = null; Iterator in = (Iterator)newWithElement(source()); out = Iterators.peekingIterator(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;peekingIterator;(PeekingIterator);;Element of Argument[0];Element of ReturnValue;value" PeekingIterator out = null; PeekingIterator in = (PeekingIterator)newWithElement(source()); out = Iterators.peekingIterator(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;singletonIterator;(Object);;Argument[0];Element of ReturnValue;value" UnmodifiableIterator out = null; Object in = source(); out = Iterators.singletonIterator(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;toArray;(Iterator,Class);;Element of Argument[0];ArrayElement of ReturnValue;value" @@ -4379,21 +4391,21 @@ public class Test { Optional out = null; Iterator in = (Iterator)newWithElement(source()); out = Iterators.tryFind(in, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;unmodifiableIterator;(Iterator);;Element of Argument[0];Element of ReturnValue;value" UnmodifiableIterator out = null; Iterator in = (Iterator)newWithElement(source()); out = Iterators.unmodifiableIterator(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;unmodifiableIterator;(UnmodifiableIterator);;Element of Argument[0];Element of ReturnValue;value" UnmodifiableIterator out = null; UnmodifiableIterator in = (UnmodifiableIterator)newWithElement(source()); out = Iterators.unmodifiableIterator(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;LinkedHashMultimap;true;create;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value" @@ -4414,7 +4426,7 @@ public class Test { LinkedHashMultiset out = null; Iterable in = (Iterable)newWithElement(source()); out = LinkedHashMultiset.create(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;LinkedListMultimap;true;create;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value" @@ -4435,112 +4447,112 @@ public class Test { List out = null; Object in = source(); out = Lists.asList(null, in, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Lists;false;asList;(Object,Object,Object[]);;Argument[0..1];Element of ReturnValue;value" List out = null; Object in = source(); out = Lists.asList(in, null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Lists;false;asList;(Object,Object,Object[]);;ArrayElement of Argument[2];Element of ReturnValue;value" List out = null; Object[] in = newWithArrayElement(source()); out = Lists.asList(null, null, in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Lists;false;asList;(Object,Object[]);;Argument[0];Element of ReturnValue;value" List out = null; Object in = source(); out = Lists.asList(in, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Lists;false;asList;(Object,Object[]);;ArrayElement of Argument[1];Element of ReturnValue;value" List out = null; Object[] in = newWithArrayElement(source()); out = Lists.asList(null, in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Lists;false;cartesianProduct;(List);;Element of Element of Argument[0];Element of Element of ReturnValue;value" List out = null; List in = (List)newWithElement(newWithElement(source())); out = Lists.cartesianProduct(in); - sink(getElement2(getElement2(out))); // $ hasValueFlow + sink(getElement(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Lists;false;cartesianProduct;(List[]);;Element of ArrayElement of Argument[0];Element of Element of ReturnValue;value" List out = null; List[] in = (List[])newWithArrayElement(newWithElement(source())); out = Lists.cartesianProduct(in); - sink(getElement2(getElement2(out))); // $ hasValueFlow + sink(getElement(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Lists;false;charactersOf;(CharSequence);;Argument[0];Element of ReturnValue;taint" List out = null; CharSequence in = source(); out = Lists.charactersOf(in); - sink(getElement2(out)); // $ hasTaintFlow + sink(getElement(out)); // $ hasTaintFlow } { // "com.google.common.collect;Lists;false;charactersOf;(String);;Argument[0];Element of ReturnValue;taint" ImmutableList out = null; String in = source(); out = Lists.charactersOf(in); - sink(getElement2(out)); // $ hasTaintFlow + sink(getElement(out)); // $ hasTaintFlow } { // "com.google.common.collect;Lists;false;newArrayList;(Iterable);;Element of Argument[0];Element of ReturnValue;value" ArrayList out = null; Iterable in = (Iterable)newWithElement(source()); out = Lists.newArrayList(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Lists;false;newArrayList;(Iterator);;Element of Argument[0];Element of ReturnValue;value" ArrayList out = null; Iterator in = (Iterator)newWithElement(source()); out = Lists.newArrayList(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Lists;false;newArrayList;(Object[]);;ArrayElement of Argument[0];Element of ReturnValue;value" ArrayList out = null; Object[] in = newWithArrayElement(source()); out = Lists.newArrayList(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Lists;false;newCopyOnWriteArrayList;(Iterable);;Element of Argument[0];Element of ReturnValue;value" CopyOnWriteArrayList out = null; Iterable in = (Iterable)newWithElement(source()); out = Lists.newCopyOnWriteArrayList(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Lists;false;newLinkedList;(Iterable);;Element of Argument[0];Element of ReturnValue;value" LinkedList out = null; Iterable in = (Iterable)newWithElement(source()); out = Lists.newLinkedList(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Lists;false;partition;(List,int);;Element of Argument[0];Element of Element of ReturnValue;value" List out = null; List in = (List)newWithElement(source()); out = Lists.partition(in, 0); - sink(getElement2(getElement2(out))); // $ hasValueFlow + sink(getElement(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Lists;false;reverse;(List);;Element of Argument[0];Element of ReturnValue;value" List out = null; List in = (List)newWithElement(source()); out = Lists.reverse(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;MapDifference$ValueDifference;true;leftValue;();;SyntheticField[com.google.common.collect.MapDifference.left] of Argument[-1];ReturnValue;value" @@ -4750,84 +4762,84 @@ public class Test { MapDifference out = null; Map in = (Map)newWithMapKey(source()); out = Maps.difference(in, (Map)null); - sink(getMapKey(getMapDifference_left(out))); // $ hasValueFlow + sink(getMapKey2(getMapDifference_left(out))); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;difference;(Map,Map);;MapKey of Argument[1];MapKey of SyntheticField[com.google.common.collect.MapDifference.right] of ReturnValue;value" MapDifference out = null; Map in = (Map)newWithMapKey(source()); out = Maps.difference((Map)null, in); - sink(getMapKey(getMapDifference_right(out))); // $ hasValueFlow + sink(getMapKey2(getMapDifference_right(out))); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;difference;(Map,Map);;MapValue of Argument[0];MapValue of SyntheticField[com.google.common.collect.MapDifference.left] of ReturnValue;value" MapDifference out = null; Map in = (Map)newWithMapValue(source()); out = Maps.difference(in, (Map)null); - sink(getMapValue(getMapDifference_left(out))); // $ hasValueFlow + sink(getMapValue2(getMapDifference_left(out))); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;difference;(Map,Map);;MapValue of Argument[1];MapValue of SyntheticField[com.google.common.collect.MapDifference.right] of ReturnValue;value" MapDifference out = null; Map in = (Map)newWithMapValue(source()); out = Maps.difference((Map)null, in); - sink(getMapValue(getMapDifference_right(out))); // $ hasValueFlow + sink(getMapValue2(getMapDifference_right(out))); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;difference;(Map,Map,Equivalence);;MapKey of Argument[0];MapKey of SyntheticField[com.google.common.collect.MapDifference.left] of ReturnValue;value" MapDifference out = null; Map in = (Map)newWithMapKey(source()); out = Maps.difference(in, null, null); - sink(getMapKey(getMapDifference_left(out))); // $ hasValueFlow + sink(getMapKey2(getMapDifference_left(out))); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;difference;(Map,Map,Equivalence);;MapKey of Argument[1];MapKey of SyntheticField[com.google.common.collect.MapDifference.right] of ReturnValue;value" MapDifference out = null; Map in = (Map)newWithMapKey(source()); out = Maps.difference(null, in, null); - sink(getMapKey(getMapDifference_right(out))); // $ hasValueFlow + sink(getMapKey2(getMapDifference_right(out))); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;difference;(Map,Map,Equivalence);;MapValue of Argument[0];MapValue of SyntheticField[com.google.common.collect.MapDifference.left] of ReturnValue;value" MapDifference out = null; Map in = (Map)newWithMapValue(source()); out = Maps.difference(in, null, null); - sink(getMapValue(getMapDifference_left(out))); // $ hasValueFlow + sink(getMapValue2(getMapDifference_left(out))); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;difference;(Map,Map,Equivalence);;MapValue of Argument[1];MapValue of SyntheticField[com.google.common.collect.MapDifference.right] of ReturnValue;value" MapDifference out = null; Map in = (Map)newWithMapValue(source()); out = Maps.difference(null, in, null); - sink(getMapValue(getMapDifference_right(out))); // $ hasValueFlow + sink(getMapValue2(getMapDifference_right(out))); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;difference;(SortedMap,Map);;MapKey of Argument[0];MapKey of SyntheticField[com.google.common.collect.MapDifference.left] of ReturnValue;value" SortedMapDifference out = null; SortedMap in = (SortedMap)newWithMapKey(source()); out = Maps.difference(in, (Map)null); - sink(getMapKey(getMapDifference_left(out))); // $ hasValueFlow + sink(getMapKey2(getMapDifference_left(out))); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;difference;(SortedMap,Map);;MapKey of Argument[1];MapKey of SyntheticField[com.google.common.collect.MapDifference.right] of ReturnValue;value" SortedMapDifference out = null; Map in = (Map)newWithMapKey(source()); out = Maps.difference((SortedMap)null, in); - sink(getMapKey(getMapDifference_right(out))); // $ hasValueFlow + sink(getMapKey2(getMapDifference_right(out))); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;difference;(SortedMap,Map);;MapValue of Argument[0];MapValue of SyntheticField[com.google.common.collect.MapDifference.left] of ReturnValue;value" SortedMapDifference out = null; SortedMap in = (SortedMap)newWithMapValue(source()); out = Maps.difference(in, (Map)null); - sink(getMapValue(getMapDifference_left(out))); // $ hasValueFlow + sink(getMapValue2(getMapDifference_left(out))); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;difference;(SortedMap,Map);;MapValue of Argument[1];MapValue of SyntheticField[com.google.common.collect.MapDifference.right] of ReturnValue;value" SortedMapDifference out = null; Map in = (Map)newWithMapValue(source()); out = Maps.difference((SortedMap)null, in); - sink(getMapValue(getMapDifference_right(out))); // $ hasValueFlow + sink(getMapValue2(getMapDifference_right(out))); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;filterEntries;(BiMap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value" @@ -5230,234 +5242,234 @@ public class Test { } { // "com.google.common.collect;Multimap;true;asMap;();;MapValue of Argument[-1];Element of MapValue of ReturnValue;value" - NavigableMap out = null; + NavigableMap out = null; TreeMultimap in = (TreeMultimap)newWithMapValue(source()); out = in.asMap(); sink(getElement(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;asMap;();;MapValue of Argument[-1];Element of MapValue of ReturnValue;value" - Map out = null; + Map out = null; SortedSetMultimap in = (SortedSetMultimap)newWithMapValue(source()); out = in.asMap(); sink(getElement(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;asMap;();;MapValue of Argument[-1];Element of MapValue of ReturnValue;value" - Map out = null; + Map out = null; SetMultimap in = (SetMultimap)newWithMapValue(source()); out = in.asMap(); sink(getElement(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;asMap;();;MapValue of Argument[-1];Element of MapValue of ReturnValue;value" - Map out = null; + Map out = null; Multimap in = (Multimap)newWithMapValue(source()); out = in.asMap(); sink(getElement(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;asMap;();;MapValue of Argument[-1];Element of MapValue of ReturnValue;value" - Map out = null; + Map out = null; ListMultimap in = (ListMultimap)newWithMapValue(source()); out = in.asMap(); sink(getElement(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;asMap;();;MapValue of Argument[-1];Element of MapValue of ReturnValue;value" - ImmutableMap out = null; + ImmutableMap out = null; ImmutableMultimap in = (ImmutableMultimap)newWithMapValue(source()); out = in.asMap(); sink(getElement(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;entries;();;MapKey of Argument[-1];MapKey of Element of ReturnValue;value" - Set out = null; + Set out = null; SetMultimap in = (SetMultimap)newWithMapKey(source()); out = in.entries(); - sink(getMapKey(getElement2(out))); // $ hasValueFlow + sink(getMapKey(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;entries;();;MapKey of Argument[-1];MapKey of Element of ReturnValue;value" - Set out = null; + Set out = null; LinkedHashMultimap in = (LinkedHashMultimap)newWithMapKey(source()); out = in.entries(); - sink(getMapKey(getElement2(out))); // $ hasValueFlow + sink(getMapKey(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;entries;();;MapKey of Argument[-1];MapKey of Element of ReturnValue;value" - List out = null; + List out = null; LinkedListMultimap in = (LinkedListMultimap)newWithMapKey(source()); out = in.entries(); - sink(getMapKey(getElement2(out))); // $ hasValueFlow + sink(getMapKey(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;entries;();;MapKey of Argument[-1];MapKey of Element of ReturnValue;value" - ImmutableSet out = null; + ImmutableSet out = null; ImmutableSetMultimap in = (ImmutableSetMultimap)newWithMapKey(source()); out = in.entries(); - sink(getMapKey(getElement2(out))); // $ hasValueFlow + sink(getMapKey(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;entries;();;MapKey of Argument[-1];MapKey of Element of ReturnValue;value" - ImmutableCollection out = null; + ImmutableCollection out = null; ImmutableMultimap in = (ImmutableMultimap)newWithMapKey(source()); out = in.entries(); - sink(getMapKey(getElement2(out))); // $ hasValueFlow + sink(getMapKey(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;entries;();;MapKey of Argument[-1];MapKey of Element of ReturnValue;value" - Collection out = null; + Collection out = null; Multimap in = (Multimap)newWithMapKey(source()); out = in.entries(); - sink(getMapKey(getElement2(out))); // $ hasValueFlow + sink(getMapKey(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;entries;();;MapValue of Argument[-1];MapValue of Element of ReturnValue;value" - Set out = null; + Set out = null; SetMultimap in = (SetMultimap)newWithMapValue(source()); out = in.entries(); - sink(getMapValue(getElement2(out))); // $ hasValueFlow + sink(getMapValue(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;entries;();;MapValue of Argument[-1];MapValue of Element of ReturnValue;value" - Set out = null; + Set out = null; LinkedHashMultimap in = (LinkedHashMultimap)newWithMapValue(source()); out = in.entries(); - sink(getMapValue(getElement2(out))); // $ hasValueFlow + sink(getMapValue(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;entries;();;MapValue of Argument[-1];MapValue of Element of ReturnValue;value" - List out = null; + List out = null; LinkedListMultimap in = (LinkedListMultimap)newWithMapValue(source()); out = in.entries(); - sink(getMapValue(getElement2(out))); // $ hasValueFlow + sink(getMapValue(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;entries;();;MapValue of Argument[-1];MapValue of Element of ReturnValue;value" - ImmutableSet out = null; + ImmutableSet out = null; ImmutableSetMultimap in = (ImmutableSetMultimap)newWithMapValue(source()); out = in.entries(); - sink(getMapValue(getElement2(out))); // $ hasValueFlow + sink(getMapValue(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;entries;();;MapValue of Argument[-1];MapValue of Element of ReturnValue;value" - ImmutableCollection out = null; + ImmutableCollection out = null; ImmutableMultimap in = (ImmutableMultimap)newWithMapValue(source()); out = in.entries(); - sink(getMapValue(getElement2(out))); // $ hasValueFlow + sink(getMapValue(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;entries;();;MapValue of Argument[-1];MapValue of Element of ReturnValue;value" - Collection out = null; + Collection out = null; Multimap in = (Multimap)newWithMapValue(source()); out = in.entries(); - sink(getMapValue(getElement2(out))); // $ hasValueFlow + sink(getMapValue(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;get;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" SortedSet out = null; SortedSetMultimap in = (SortedSetMultimap)newWithMapValue(source()); out = in.get(null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;get;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" Set out = null; SetMultimap in = (SetMultimap)newWithMapValue(source()); out = in.get(null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;get;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" NavigableSet out = null; TreeMultimap in = (TreeMultimap)newWithMapValue(source()); out = in.get(null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;get;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" List out = null; ListMultimap in = (ListMultimap)newWithMapValue(source()); out = in.get(null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;get;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" List out = null; LinkedListMultimap in = (LinkedListMultimap)newWithMapValue(source()); out = in.get(null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;get;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" ImmutableSet out = null; ImmutableSetMultimap in = (ImmutableSetMultimap)newWithMapValue(source()); out = in.get(null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;get;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" ImmutableList out = null; ImmutableListMultimap in = (ImmutableListMultimap)newWithMapValue(source()); out = in.get(null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;get;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" ImmutableCollection out = null; ImmutableMultimap in = (ImmutableMultimap)newWithMapValue(source()); out = in.get(null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;get;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" Collection out = null; Multimap in = (Multimap)newWithMapValue(source()); out = in.get(null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;keySet;();;MapKey of Argument[-1];Element of ReturnValue;value" Set out = null; Multimap in = (Multimap)newWithMapKey(source()); out = in.keySet(); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;keySet;();;MapKey of Argument[-1];Element of ReturnValue;value" Set out = null; LinkedHashMultimap in = (LinkedHashMultimap)newWithMapKey(source()); out = in.keySet(); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;keySet;();;MapKey of Argument[-1];Element of ReturnValue;value" NavigableSet out = null; TreeMultimap in = (TreeMultimap)newWithMapKey(source()); out = in.keySet(); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;keySet;();;MapKey of Argument[-1];Element of ReturnValue;value" ImmutableSet out = null; ImmutableMultimap in = (ImmutableMultimap)newWithMapKey(source()); out = in.keySet(); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;keys;();;MapKey of Argument[-1];Element of ReturnValue;value" Multiset out = null; Multimap in = (Multimap)newWithMapKey(source()); out = in.keys(); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;keys;();;MapKey of Argument[-1];Element of ReturnValue;value" ImmutableMultiset out = null; ImmutableMultimap in = (ImmutableMultimap)newWithMapKey(source()); out = in.keys(); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;put;(Object,Object);;Argument[0];MapKey of Argument[-1];value" @@ -5558,60 +5570,60 @@ public class Test { sink(getMapValue(out)); // $ hasValueFlow } { - // "com.google.common.collect;Multimap;true;removeAll;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" + // "com.google.common.collect;Multimap;true;removeAll;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" SortedSet out = null; SortedSetMultimap in = (SortedSetMultimap)newWithMapValue(source()); out = in.removeAll(null); - sink(getMapValue(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { - // "com.google.common.collect;Multimap;true;removeAll;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" + // "com.google.common.collect;Multimap;true;removeAll;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" Set out = null; SetMultimap in = (SetMultimap)newWithMapValue(source()); out = in.removeAll(null); - sink(getMapValue(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { - // "com.google.common.collect;Multimap;true;removeAll;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" + // "com.google.common.collect;Multimap;true;removeAll;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" List out = null; ListMultimap in = (ListMultimap)newWithMapValue(source()); out = in.removeAll(null); - sink(getMapValue(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { - // "com.google.common.collect;Multimap;true;removeAll;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" + // "com.google.common.collect;Multimap;true;removeAll;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" List out = null; LinkedListMultimap in = (LinkedListMultimap)newWithMapValue(source()); out = in.removeAll(null); - sink(getMapValue(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { - // "com.google.common.collect;Multimap;true;removeAll;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" + // "com.google.common.collect;Multimap;true;removeAll;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" ImmutableSet out = null; ImmutableSetMultimap in = (ImmutableSetMultimap)newWithMapValue(source()); out = in.removeAll(null); - sink(getMapValue(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { - // "com.google.common.collect;Multimap;true;removeAll;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" + // "com.google.common.collect;Multimap;true;removeAll;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" ImmutableList out = null; ImmutableListMultimap in = (ImmutableListMultimap)newWithMapValue(source()); out = in.removeAll(null); - sink(getMapValue(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { - // "com.google.common.collect;Multimap;true;removeAll;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" + // "com.google.common.collect;Multimap;true;removeAll;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" ImmutableCollection out = null; ImmutableMultimap in = (ImmutableMultimap)newWithMapValue(source()); out = in.removeAll(null); - sink(getMapValue(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { - // "com.google.common.collect;Multimap;true;removeAll;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" + // "com.google.common.collect;Multimap;true;removeAll;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" Collection out = null; Multimap in = (Multimap)newWithMapValue(source()); out = in.removeAll(null); - sink(getMapValue(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" @@ -5744,91 +5756,91 @@ public class Test { SortedSet out = null; SortedSetMultimap in = (SortedSetMultimap)newWithMapValue(source()); out = in.replaceValues(null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;MapValue of Argument[-1];Element of ReturnValue;value" Set out = null; SetMultimap in = (SetMultimap)newWithMapValue(source()); out = in.replaceValues(null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;MapValue of Argument[-1];Element of ReturnValue;value" Set out = null; LinkedHashMultimap in = (LinkedHashMultimap)newWithMapValue(source()); out = in.replaceValues(null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;MapValue of Argument[-1];Element of ReturnValue;value" List out = null; ListMultimap in = (ListMultimap)newWithMapValue(source()); out = in.replaceValues(null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;MapValue of Argument[-1];Element of ReturnValue;value" List out = null; LinkedListMultimap in = (LinkedListMultimap)newWithMapValue(source()); out = in.replaceValues(null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;MapValue of Argument[-1];Element of ReturnValue;value" ImmutableSet out = null; ImmutableSetMultimap in = (ImmutableSetMultimap)newWithMapValue(source()); out = in.replaceValues(null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;MapValue of Argument[-1];Element of ReturnValue;value" ImmutableList out = null; ImmutableListMultimap in = (ImmutableListMultimap)newWithMapValue(source()); out = in.replaceValues(null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;MapValue of Argument[-1];Element of ReturnValue;value" ImmutableCollection out = null; ImmutableMultimap in = (ImmutableMultimap)newWithMapValue(source()); out = in.replaceValues(null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;MapValue of Argument[-1];Element of ReturnValue;value" Collection out = null; Multimap in = (Multimap)newWithMapValue(source()); out = in.replaceValues(null, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;values;();;MapValue of Argument[-1];Element of ReturnValue;value" List out = null; LinkedListMultimap in = (LinkedListMultimap)newWithMapValue(source()); out = in.values(); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;values;();;MapValue of Argument[-1];Element of ReturnValue;value" ImmutableCollection out = null; ImmutableMultimap in = (ImmutableMultimap)newWithMapValue(source()); out = in.values(); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;values;();;MapValue of Argument[-1];Element of ReturnValue;value" Collection out = null; Multimap in = (Multimap)newWithMapValue(source()); out = in.values(); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;values;();;MapValue of Argument[-1];Element of ReturnValue;value" Collection out = null; LinkedHashMultimap in = (LinkedHashMultimap)newWithMapValue(source()); out = in.values(); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;asMap;(ListMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value" @@ -5839,7 +5851,7 @@ public class Test { } { // "com.google.common.collect;Multimaps;false;asMap;(ListMultimap);;MapValue of Argument[0];Element of MapValue of ReturnValue;value" - Map out = null; + Map out = null; ListMultimap in = (ListMultimap)newWithMapValue(source()); out = Multimaps.asMap(in); sink(getElement(getMapValue(out))); // $ hasValueFlow @@ -5853,7 +5865,7 @@ public class Test { } { // "com.google.common.collect;Multimaps;false;asMap;(Multimap);;MapValue of Argument[0];Element of MapValue of ReturnValue;value" - Map out = null; + Map out = null; Multimap in = (Multimap)newWithMapValue(source()); out = Multimaps.asMap(in); sink(getElement(getMapValue(out))); // $ hasValueFlow @@ -5867,7 +5879,7 @@ public class Test { } { // "com.google.common.collect;Multimaps;false;asMap;(SetMultimap);;MapValue of Argument[0];Element of MapValue of ReturnValue;value" - Map out = null; + Map out = null; SetMultimap in = (SetMultimap)newWithMapValue(source()); out = Multimaps.asMap(in); sink(getElement(getMapValue(out))); // $ hasValueFlow @@ -5881,7 +5893,7 @@ public class Test { } { // "com.google.common.collect;Multimaps;false;asMap;(SortedSetMultimap);;MapValue of Argument[0];Element of MapValue of ReturnValue;value" - Map out = null; + Map out = null; SortedSetMultimap in = (SortedSetMultimap)newWithMapValue(source()); out = Multimaps.asMap(in); sink(getElement(getMapValue(out))); // $ hasValueFlow @@ -6248,210 +6260,210 @@ public class Test { TreeMultiset out = null; Object in = source(); out.add(in, 0); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multiset;true;add;(Object,int);;Argument[0];Element of Argument[-1];value" Multiset out = null; Object in = source(); out.add(in, 0); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multiset;true;add;(Object,int);;Argument[0];Element of Argument[-1];value" ImmutableMultiset out = null; Object in = source(); out.add(in, 0); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multiset;true;add;(Object,int);;Argument[0];Element of Argument[-1];value" ConcurrentHashMultiset out = null; Object in = source(); out.add(in, 0); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multiset;true;elementSet;();;Element of Argument[-1];Element of ReturnValue;value" Set out = null; Multiset in = (Multiset)newWithElement(source()); out = in.elementSet(); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multiset;true;elementSet;();;Element of Argument[-1];Element of ReturnValue;value" NavigableSet out = null; SortedMultiset in = (SortedMultiset)newWithElement(source()); out = in.elementSet(); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multiset;true;elementSet;();;Element of Argument[-1];Element of ReturnValue;value" ImmutableSortedSet out = null; ImmutableSortedMultiset in = (ImmutableSortedMultiset)newWithElement(source()); out = in.elementSet(); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multiset;true;elementSet;();;Element of Argument[-1];Element of ReturnValue;value" ImmutableSet out = null; ImmutableMultiset in = (ImmutableMultiset)newWithElement(source()); out = in.elementSet(); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multiset;true;entrySet;();;Element of Argument[-1];Element of Element of ReturnValue;value" Set out = null; SortedMultiset in = (SortedMultiset)newWithElement(source()); out = in.entrySet(); - sink(getElement2(getElement2(out))); // $ hasValueFlow + sink(getElement(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Multiset;true;entrySet;();;Element of Argument[-1];Element of Element of ReturnValue;value" Set out = null; Multiset in = (Multiset)newWithElement(source()); out = in.entrySet(); - sink(getElement2(getElement2(out))); // $ hasValueFlow + sink(getElement(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Multiset;true;entrySet;();;Element of Argument[-1];Element of Element of ReturnValue;value" ImmutableSet out = null; ImmutableMultiset in = (ImmutableMultiset)newWithElement(source()); out = in.entrySet(); - sink(getElement2(getElement2(out))); // $ hasValueFlow + sink(getElement(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Multiset;true;setCount;(Object,int);;Argument[0];Element of Argument[-1];value" TreeMultiset out = null; Object in = source(); out.setCount(in, 0); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multiset;true;setCount;(Object,int);;Argument[0];Element of Argument[-1];value" Multiset out = null; Object in = source(); out.setCount(in, 0); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multiset;true;setCount;(Object,int);;Argument[0];Element of Argument[-1];value" ImmutableMultiset out = null; Object in = source(); out.setCount(in, 0); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multiset;true;setCount;(Object,int);;Argument[0];Element of Argument[-1];value" ConcurrentHashMultiset out = null; Object in = source(); out.setCount(in, 0); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multiset;true;setCount;(Object,int,int);;Argument[0];Element of Argument[-1];value" TreeMultiset out = null; Object in = source(); out.setCount(in, 0, 0); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multiset;true;setCount;(Object,int,int);;Argument[0];Element of Argument[-1];value" Multiset out = null; Object in = source(); out.setCount(in, 0, 0); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multiset;true;setCount;(Object,int,int);;Argument[0];Element of Argument[-1];value" ImmutableMultiset out = null; Object in = source(); out.setCount(in, 0, 0); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multiset;true;setCount;(Object,int,int);;Argument[0];Element of Argument[-1];value" ConcurrentHashMultiset out = null; Object in = source(); out.setCount(in, 0, 0); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multisets;false;copyHighestCountFirst;(Multiset);;Element of Argument[0];Element of ReturnValue;value" ImmutableMultiset out = null; Multiset in = (Multiset)newWithElement(source()); out = Multisets.copyHighestCountFirst(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multisets;false;difference;(Multiset,Multiset);;Element of Argument[0];Element of ReturnValue;value" Multiset out = null; Multiset in = (Multiset)newWithElement(source()); out = Multisets.difference(in, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multisets;false;filter;(Multiset,Predicate);;Element of Argument[0];Element of ReturnValue;value" Multiset out = null; Multiset in = (Multiset)newWithElement(source()); out = Multisets.filter(in, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multisets;false;immutableEntry;(Object,int);;Argument[0];Element of ReturnValue;value" Multiset.Entry out = null; Object in = source(); out = Multisets.immutableEntry(in, 0); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multisets;false;sum;(Multiset,Multiset);;Element of Argument[0..1];Element of ReturnValue;value" Multiset out = null; Multiset in = (Multiset)newWithElement(source()); out = Multisets.sum(null, in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multisets;false;sum;(Multiset,Multiset);;Element of Argument[0..1];Element of ReturnValue;value" Multiset out = null; Multiset in = (Multiset)newWithElement(source()); out = Multisets.sum(in, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multisets;false;union;(Multiset,Multiset);;Element of Argument[0..1];Element of ReturnValue;value" Multiset out = null; Multiset in = (Multiset)newWithElement(source()); out = Multisets.union(null, in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multisets;false;union;(Multiset,Multiset);;Element of Argument[0..1];Element of ReturnValue;value" Multiset out = null; Multiset in = (Multiset)newWithElement(source()); out = Multisets.union(in, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multisets;false;unmodifiableMultiset;(ImmutableMultiset);;Element of Argument[0];Element of ReturnValue;value" Multiset out = null; ImmutableMultiset in = (ImmutableMultiset)newWithElement(source()); out = Multisets.unmodifiableMultiset(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multisets;false;unmodifiableMultiset;(Multiset);;Element of Argument[0];Element of ReturnValue;value" Multiset out = null; Multiset in = (Multiset)newWithElement(source()); out = Multisets.unmodifiableMultiset(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multisets;false;unmodifiableSortedMultiset;(SortedMultiset);;Element of Argument[0];Element of ReturnValue;value" SortedMultiset out = null; SortedMultiset in = (SortedMultiset)newWithElement(source()); out = Multisets.unmodifiableSortedMultiset(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;MutableClassToInstanceMap;true;create;(Map);;MapKey of Argument[0];MapKey of ReturnValue;value" @@ -6514,245 +6526,245 @@ public class Test { Collection out = null; BlockingQueue in = (BlockingQueue)newWithElement(source()); Queues.drain(in, out, 0, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Queues;false;drain;(BlockingQueue,Collection,int,long,TimeUnit);;Element of Argument[0];Element of Argument[1];value" Collection out = null; BlockingQueue in = (BlockingQueue)newWithElement(source()); Queues.drain(in, out, 0, 0L, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Queues;false;newArrayDeque;(Iterable);;Element of Argument[0];Element of ReturnValue;value" ArrayDeque out = null; Iterable in = (Iterable)newWithElement(source()); out = Queues.newArrayDeque(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Queues;false;newConcurrentLinkedQueue;(Iterable);;Element of Argument[0];Element of ReturnValue;value" ConcurrentLinkedQueue out = null; Iterable in = (Iterable)newWithElement(source()); out = Queues.newConcurrentLinkedQueue(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Queues;false;newLinkedBlockingDeque;(Iterable);;Element of Argument[0];Element of ReturnValue;value" LinkedBlockingDeque out = null; Iterable in = (Iterable)newWithElement(source()); out = Queues.newLinkedBlockingDeque(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Queues;false;newLinkedBlockingQueue;(Iterable);;Element of Argument[0];Element of ReturnValue;value" LinkedBlockingQueue out = null; Iterable in = (Iterable)newWithElement(source()); out = Queues.newLinkedBlockingQueue(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Queues;false;newPriorityBlockingQueue;(Iterable);;Element of Argument[0];Element of ReturnValue;value" PriorityBlockingQueue out = null; Iterable in = (Iterable)newWithElement(source()); out = Queues.newPriorityBlockingQueue(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Queues;false;newPriorityQueue;(Iterable);;Element of Argument[0];Element of ReturnValue;value" PriorityQueue out = null; Iterable in = (Iterable)newWithElement(source()); out = Queues.newPriorityQueue(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Queues;false;synchronizedDeque;(Deque);;Element of Argument[0];Element of ReturnValue;value" Deque out = null; Deque in = (Deque)newWithElement(source()); out = Queues.synchronizedDeque(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Queues;false;synchronizedQueue;(Queue);;Element of Argument[0];Element of ReturnValue;value" Queue out = null; Queue in = (Queue)newWithElement(source()); out = Queues.synchronizedQueue(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Sets$SetView;true;copyInto;(Set);;Element of Argument[-1];Element of Argument[0];value" Set out = null; Sets.SetView in = (Sets.SetView)newWithElement(source()); in.copyInto(out); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Sets$SetView;true;immutableCopy;();;Element of Argument[-1];Element of ReturnValue;value" ImmutableSet out = null; Sets.SetView in = (Sets.SetView)newWithElement(source()); out = in.immutableCopy(); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;cartesianProduct;(List);;Element of Element of Argument[0];Element of Element of ReturnValue;value" Set out = null; List in = (List)newWithElement(newWithElement(source())); out = Sets.cartesianProduct(in); - sink(getElement2(getElement2(out))); // $ hasValueFlow + sink(getElement(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;cartesianProduct;(Set[]);;Element of ArrayElement of Argument[0];Element of Element of ReturnValue;value" Set out = null; Set[] in = (Set[])newWithArrayElement(newWithElement(source())); out = Sets.cartesianProduct(in); - sink(getElement2(getElement2(out))); // $ hasValueFlow + sink(getElement(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;combinations;(Set,int);;Element of Argument[0];Element of Element of ReturnValue;value" Set out = null; Set in = (Set)newWithElement(source()); out = Sets.combinations(in, 0); - sink(getElement2(getElement2(out))); // $ hasValueFlow + sink(getElement(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;difference;(Set,Set);;Element of Argument[0];Element of ReturnValue;value" Sets.SetView out = null; Set in = (Set)newWithElement(source()); out = Sets.difference(in, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;filter;(NavigableSet,Predicate);;Element of Argument[0];Element of ReturnValue;value" NavigableSet out = null; NavigableSet in = (NavigableSet)newWithElement(source()); out = Sets.filter(in, (Predicate)null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;filter;(Set,Predicate);;Element of Argument[0];Element of ReturnValue;value" Set out = null; Set in = (Set)newWithElement(source()); out = Sets.filter(in, (Predicate)null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;filter;(SortedSet,Predicate);;Element of Argument[0];Element of ReturnValue;value" SortedSet out = null; SortedSet in = (SortedSet)newWithElement(source()); out = Sets.filter(in, (Predicate)null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;newConcurrentHashSet;(Iterable);;Element of Argument[0];Element of ReturnValue;value" Set out = null; Iterable in = (Iterable)newWithElement(source()); out = Sets.newConcurrentHashSet(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;newCopyOnWriteArraySet;(Iterable);;Element of Argument[0];Element of ReturnValue;value" CopyOnWriteArraySet out = null; Iterable in = (Iterable)newWithElement(source()); out = Sets.newCopyOnWriteArraySet(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;newHashSet;(Iterable);;Element of Argument[0];Element of ReturnValue;value" HashSet out = null; Iterable in = (Iterable)newWithElement(source()); out = Sets.newHashSet(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;newHashSet;(Iterator);;Element of Argument[0];Element of ReturnValue;value" HashSet out = null; Iterator in = (Iterator)newWithElement(source()); out = Sets.newHashSet(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;newHashSet;(Object[]);;ArrayElement of Argument[0];Element of ReturnValue;value" HashSet out = null; Object[] in = newWithArrayElement(source()); out = Sets.newHashSet(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;newLinkedHashSet;(Iterable);;Element of Argument[0];Element of ReturnValue;value" LinkedHashSet out = null; Iterable in = (Iterable)newWithElement(source()); out = Sets.newLinkedHashSet(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;newSetFromMap;(Map);;MapKey of Argument[0];Element of ReturnValue;value" Set out = null; Map in = (Map)newWithMapKey(source()); out = Sets.newSetFromMap(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;newTreeSet;(Iterable);;Element of Argument[0];Element of ReturnValue;value" TreeSet out = null; Iterable in = (Iterable)newWithElement(source()); out = Sets.newTreeSet(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;powerSet;(Set);;Element of Argument[0];Element of Element of ReturnValue;value" Set out = null; Set in = (Set)newWithElement(source()); out = Sets.powerSet(in); - sink(getElement2(getElement2(out))); // $ hasValueFlow + sink(getElement(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;subSet;(NavigableSet,Range);;Element of Argument[0];Element of ReturnValue;value" NavigableSet out = null; NavigableSet in = (NavigableSet)newWithElement(source()); out = Sets.subSet(in, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;symmetricDifference;(Set,Set);;Element of Argument[0..1];Element of ReturnValue;value" Sets.SetView out = null; Set in = (Set)newWithElement(source()); out = Sets.symmetricDifference(null, in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;symmetricDifference;(Set,Set);;Element of Argument[0..1];Element of ReturnValue;value" Sets.SetView out = null; Set in = (Set)newWithElement(source()); out = Sets.symmetricDifference(in, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;synchronizedNavigableSet;(NavigableSet);;Element of Argument[0];Element of ReturnValue;value" NavigableSet out = null; NavigableSet in = (NavigableSet)newWithElement(source()); out = Sets.synchronizedNavigableSet(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;union;(Set,Set);;Element of Argument[0..1];Element of ReturnValue;value" Sets.SetView out = null; Set in = (Set)newWithElement(source()); out = Sets.union(null, in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;union;(Set,Set);;Element of Argument[0..1];Element of ReturnValue;value" Sets.SetView out = null; Set in = (Set)newWithElement(source()); out = Sets.union(in, null); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;unmodifiableNavigableSet;(NavigableSet);;Element of Argument[0];Element of ReturnValue;value" NavigableSet out = null; NavigableSet in = (NavigableSet)newWithElement(source()); out = Sets.unmodifiableNavigableSet(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Table$Cell;true;getColumnKey;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];ReturnValue;value" @@ -6777,66 +6789,66 @@ public class Test { } { // "com.google.common.collect;Table;true;cellSet;();;MapValue of Argument[-1];MapValue of Element of ReturnValue;value" - Set out = null; + Set out = null; Table in = (Table)newWithMapValue(source()); out = in.cellSet(); - sink(getMapValue(getElement2(out))); // $ hasValueFlow + sink(getMapValue(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;cellSet;();;MapValue of Argument[-1];MapValue of Element of ReturnValue;value" - Set out = null; + Set out = null; ArrayTable in = (ArrayTable)newWithMapValue(source()); out = in.cellSet(); - sink(getMapValue(getElement2(out))); // $ hasValueFlow + sink(getMapValue(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;cellSet;();;MapValue of Argument[-1];MapValue of Element of ReturnValue;value" - ImmutableSet out = null; + ImmutableSet out = null; ImmutableTable in = (ImmutableTable)newWithMapValue(source()); out = in.cellSet(); - sink(getMapValue(getElement2(out))); // $ hasValueFlow + sink(getMapValue(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;cellSet;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];SyntheticField[com.google.common.collect.Table.columnKey] of Element of ReturnValue;value" Set out = null; Table in = (Table)newWithTable_columnKey(source()); out = in.cellSet(); - sink(getTable_columnKey(getElement2(out))); // $ hasValueFlow + sink(getTable_columnKey(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;cellSet;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];SyntheticField[com.google.common.collect.Table.columnKey] of Element of ReturnValue;value" Set out = null; ArrayTable in = (ArrayTable)newWithTable_columnKey(source()); out = in.cellSet(); - sink(getTable_columnKey(getElement2(out))); // $ hasValueFlow + sink(getTable_columnKey(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;cellSet;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];SyntheticField[com.google.common.collect.Table.columnKey] of Element of ReturnValue;value" ImmutableSet out = null; ImmutableTable in = (ImmutableTable)newWithTable_columnKey(source()); out = in.cellSet(); - sink(getTable_columnKey(getElement2(out))); // $ hasValueFlow + sink(getTable_columnKey(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;cellSet;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];SyntheticField[com.google.common.collect.Table.rowKey] of Element of ReturnValue;value" Set out = null; Table in = (Table)newWithTable_rowKey(source()); out = in.cellSet(); - sink(getTable_rowKey(getElement2(out))); // $ hasValueFlow + sink(getTable_rowKey(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;cellSet;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];SyntheticField[com.google.common.collect.Table.rowKey] of Element of ReturnValue;value" Set out = null; ArrayTable in = (ArrayTable)newWithTable_rowKey(source()); out = in.cellSet(); - sink(getTable_rowKey(getElement2(out))); // $ hasValueFlow + sink(getTable_rowKey(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;cellSet;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];SyntheticField[com.google.common.collect.Table.rowKey] of Element of ReturnValue;value" ImmutableSet out = null; ImmutableTable in = (ImmutableTable)newWithTable_rowKey(source()); out = in.cellSet(); - sink(getTable_rowKey(getElement2(out))); // $ hasValueFlow + sink(getTable_rowKey(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;column;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" @@ -6885,39 +6897,39 @@ public class Test { Set out = null; Table in = (Table)newWithTable_columnKey(source()); out = in.columnKeySet(); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;columnKeySet;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];Element of ReturnValue;value" ImmutableSet out = null; ImmutableTable in = (ImmutableTable)newWithTable_columnKey(source()); out = in.columnKeySet(); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;columnKeySet;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];Element of ReturnValue;value" ImmutableSet out = null; ArrayTable in = (ArrayTable)newWithTable_columnKey(source()); out = in.columnKeySet(); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;columnMap;();;MapValue of Argument[-1];MapValue of MapValue of ReturnValue;value" - Map out = null; + Map out = null; Table in = (Table)newWithMapValue(source()); out = in.columnMap(); sink(getMapValue(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;columnMap;();;MapValue of Argument[-1];MapValue of MapValue of ReturnValue;value" - Map out = null; + Map out = null; ArrayTable in = (ArrayTable)newWithMapValue(source()); out = in.columnMap(); sink(getMapValue(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;columnMap;();;MapValue of Argument[-1];MapValue of MapValue of ReturnValue;value" - ImmutableMap out = null; + ImmutableMap out = null; ImmutableTable in = (ImmutableTable)newWithMapValue(source()); out = in.columnMap(); sink(getMapValue(getMapValue(out))); // $ hasValueFlow @@ -6945,21 +6957,21 @@ public class Test { } { // "com.google.common.collect;Table;true;columnMap;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];MapKey of MapValue of ReturnValue;value" - Map out = null; + Map out = null; Table in = (Table)newWithTable_rowKey(source()); out = in.columnMap(); sink(getMapKey(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;columnMap;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];MapKey of MapValue of ReturnValue;value" - Map out = null; + Map out = null; ArrayTable in = (ArrayTable)newWithTable_rowKey(source()); out = in.columnMap(); sink(getMapKey(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;columnMap;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];MapKey of MapValue of ReturnValue;value" - ImmutableMap out = null; + ImmutableMap out = null; ImmutableTable in = (ImmutableTable)newWithTable_rowKey(source()); out = in.columnMap(); sink(getMapKey(getMapValue(out))); // $ hasValueFlow @@ -7200,102 +7212,102 @@ public class Test { SortedSet out = null; TreeBasedTable in = (TreeBasedTable)newWithTable_rowKey(source()); out = in.rowKeySet(); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;rowKeySet;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];Element of ReturnValue;value" SortedSet out = null; RowSortedTable in = (RowSortedTable)newWithTable_rowKey(source()); out = in.rowKeySet(); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;rowKeySet;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];Element of ReturnValue;value" Set out = null; Table in = (Table)newWithTable_rowKey(source()); out = in.rowKeySet(); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;rowKeySet;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];Element of ReturnValue;value" ImmutableSet out = null; ImmutableTable in = (ImmutableTable)newWithTable_rowKey(source()); out = in.rowKeySet(); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;rowKeySet;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];Element of ReturnValue;value" ImmutableSet out = null; ArrayTable in = (ArrayTable)newWithTable_rowKey(source()); out = in.rowKeySet(); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;rowMap;();;MapValue of Argument[-1];MapValue of MapValue of ReturnValue;value" - SortedMap out = null; + SortedMap out = null; TreeBasedTable in = (TreeBasedTable)newWithMapValue(source()); out = in.rowMap(); sink(getMapValue(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;rowMap;();;MapValue of Argument[-1];MapValue of MapValue of ReturnValue;value" - SortedMap out = null; + SortedMap out = null; RowSortedTable in = (RowSortedTable)newWithMapValue(source()); out = in.rowMap(); sink(getMapValue(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;rowMap;();;MapValue of Argument[-1];MapValue of MapValue of ReturnValue;value" - Map out = null; + Map out = null; Table in = (Table)newWithMapValue(source()); out = in.rowMap(); sink(getMapValue(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;rowMap;();;MapValue of Argument[-1];MapValue of MapValue of ReturnValue;value" - Map out = null; + Map out = null; ArrayTable in = (ArrayTable)newWithMapValue(source()); out = in.rowMap(); sink(getMapValue(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;rowMap;();;MapValue of Argument[-1];MapValue of MapValue of ReturnValue;value" - ImmutableMap out = null; + ImmutableMap out = null; ImmutableTable in = (ImmutableTable)newWithMapValue(source()); out = in.rowMap(); sink(getMapValue(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;rowMap;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];MapKey of MapValue of ReturnValue;value" - SortedMap out = null; + SortedMap out = null; TreeBasedTable in = (TreeBasedTable)newWithTable_columnKey(source()); out = in.rowMap(); sink(getMapKey(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;rowMap;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];MapKey of MapValue of ReturnValue;value" - SortedMap out = null; + SortedMap out = null; RowSortedTable in = (RowSortedTable)newWithTable_columnKey(source()); out = in.rowMap(); sink(getMapKey(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;rowMap;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];MapKey of MapValue of ReturnValue;value" - Map out = null; + Map out = null; Table in = (Table)newWithTable_columnKey(source()); out = in.rowMap(); sink(getMapKey(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;rowMap;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];MapKey of MapValue of ReturnValue;value" - Map out = null; + Map out = null; ArrayTable in = (ArrayTable)newWithTable_columnKey(source()); out = in.rowMap(); sink(getMapKey(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;rowMap;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];MapKey of MapValue of ReturnValue;value" - ImmutableMap out = null; + ImmutableMap out = null; ImmutableTable in = (ImmutableTable)newWithTable_columnKey(source()); out = in.rowMap(); sink(getMapKey(getMapValue(out))); // $ hasValueFlow @@ -7340,21 +7352,21 @@ public class Test { ImmutableCollection out = null; ImmutableTable in = (ImmutableTable)newWithMapValue(source()); out = in.values(); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;values;();;MapValue of Argument[-1];Element of ReturnValue;value" Collection out = null; Table in = (Table)newWithMapValue(source()); out = in.values(); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;values;();;MapValue of Argument[-1];Element of ReturnValue;value" Collection out = null; ArrayTable in = (ArrayTable)newWithMapValue(source()); out = in.values(); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Tables;false;immutableCell;(Object,Object,Object);;Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value" @@ -7420,11 +7432,25 @@ public class Test { sink(getTable_rowKey(out)); // $ hasValueFlow } { - // "com.google.common.collect;Tables;false;transformValues;(Table,Function);;MapKey of Argument[0];MapKey of ReturnValue;value" + // "com.google.common.collect;Tables;false;transformValues;(Table,Function);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value", Table out = null; - Table in = (Table)newWithMapKey(source()); + Table in = (Table)newWithTable_rowKey(source()); out = Tables.transformValues(in, null); - sink(getMapKey(out)); // $ hasValueFlow + sink(getTable_rowKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;Tables;false;transformValues;(Table,Function);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value", + Table out = null; + Table in = (Table)newWithTable_columnKey(source()); + out = Tables.transformValues(in, null); + sink(getTable_columnKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;Tables;false;transformValues;(Table,Function);;MapValue of Argument[0];MapValue of ReturnValue;value", + Table out = null; + Table in = (Table)newWithMapValue(source()); + out = Tables.transformValues(in, null); + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Tables;false;transpose;(Table);;MapValue of Argument[0];MapValue of ReturnValue;value" @@ -7529,7 +7555,7 @@ public class Test { TreeMultiset out = null; Iterable in = (Iterable)newWithElement(source()); out = TreeMultiset.create(in); - sink(getElement2(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } } diff --git a/java/ql/test/library-tests/frameworks/guava/generated/test.ql b/java/ql/test/library-tests/frameworks/guava/generated/test.ql index 407670ffdb0..90116d41a0c 100644 --- a/java/ql/test/library-tests/frameworks/guava/generated/test.ql +++ b/java/ql/test/library-tests/frameworks/guava/generated/test.ql @@ -9,11 +9,10 @@ class SummaryModelTest extends SummaryModelCsv { row = [ //"package;type;overrides;name;signature;ext;inputspec;outputspec;kind", - "generatedtest;Test;false;getElement;;;Element of Argument[0];ReturnValue;value", "generatedtest;Test;false;newWithElement;;;Argument[0];Element of ReturnValue;value", - "generatedtest;Test;false;getMapKey;;;MapKey of Argument[0];ReturnValue;value", + "generatedtest;Test;false;getMapKey2;;;MapKey of Argument[0];ReturnValue;value", "generatedtest;Test;false;newWithMapKey;;;Argument[0];MapKey of ReturnValue;value", - "generatedtest;Test;false;getMapValue;;;MapValue of Argument[0];ReturnValue;value", + "generatedtest;Test;false;getMapValue2;;;MapValue of Argument[0];ReturnValue;value", "generatedtest;Test;false;newWithMapValue;;;Argument[0];MapValue of ReturnValue;value", "generatedtest;Test;false;getTable_rowKey;;;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];ReturnValue;value", "generatedtest;Test;false;newWithTable_rowKey;;;Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value", From 60c6158152d392fdaedd86d447dfad155210c0b0 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Wed, 28 Jul 2021 12:38:36 +0100 Subject: [PATCH 486/741] Fill in implementations of getters for synthetic fields --- .../frameworks/guava/generated/Test.java | 60 ++++++++++--------- .../frameworks/guava/generated/test.ql | 8 +-- 2 files changed, 33 insertions(+), 35 deletions(-) diff --git a/java/ql/test/library-tests/frameworks/guava/generated/Test.java b/java/ql/test/library-tests/frameworks/guava/generated/Test.java index ee3f18f14b8..8c5659bbb99 100644 --- a/java/ql/test/library-tests/frameworks/guava/generated/Test.java +++ b/java/ql/test/library-tests/frameworks/guava/generated/Test.java @@ -98,10 +98,10 @@ public class Test { T getElement(Optional container) { return container.get(); } T getElement(Enumeration container) { return container.nextElement(); } T getElement(Multiset.Entry container) { return container.getElement(); } - Object getMapDifference_left(Object container) { return null; } - Object getMapDifference_right(Object container) { return null; } - Object getMapKey2(Object container) { return null; } - Object getMapValue2(Object container) { return null; } + Map getMapDifference_left(MapDifference container) { return container.entriesOnlyOnLeft(); } + V getMapDifference_left(MapDifference.ValueDifference container) { return container.leftValue(); } + Map getMapDifference_right(MapDifference container) { return container.entriesOnlyOnRight(); } + V getMapDifference_right(MapDifference.ValueDifference container) { return container.rightValue(); } K getMapKey(Map container) { return getElement(container.keySet()); } K getMapKey(Multimap container) { return getElement(container.keySet()); } K getMapKey(Map.Entry container) { return container.getKey(); } @@ -115,8 +115,12 @@ public class Test { V getMapValue(Table container) { return getElement(container.values()); } V getMapValue(Table.Cell container) { return container.getValue(); } V getMapValue(ImmutableTable.Builder container) { return getMapValue(container.build()); } - Object getTable_columnKey(Object container) { return null; } - Object getTable_rowKey(Object container) { return null; } + C getTable_columnKey(Table container) { return getElement(container.columnKeySet()); } + C getTable_columnKey(Table.Cell container) { return container.getColumnKey(); } + C getTable_columnKey(ImmutableTable.Builder container) { return getTable_columnKey(container.build()); } + R getTable_rowKey(Table container) { return getElement(container.rowKeySet()); } + R getTable_rowKey(Table.Cell container) { return container.getRowKey(); } + R getTable_rowKey(ImmutableTable.Builder container) { return getTable_rowKey(container.build()); } T[] newWithArrayElement(T element) { return (T[]) new Object[]{element}; } Object newWithElement(Object element) { return null; } Object newWithMapDifference_left(Object element) { return null; } @@ -4598,28 +4602,28 @@ public class Test { } { // "com.google.common.collect;MapDifference;true;entriesDiffering;();;MapValue of SyntheticField[com.google.common.collect.MapDifference.left] of Argument[-1];SyntheticField[com.google.common.collect.MapDifference.left] of MapValue of ReturnValue;value" - SortedMap out = null; + SortedMap out = null; SortedMapDifference in = (SortedMapDifference)newWithMapDifference_left(newWithMapValue(source())); out = in.entriesDiffering(); sink(getMapDifference_left(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;MapDifference;true;entriesDiffering;();;MapValue of SyntheticField[com.google.common.collect.MapDifference.left] of Argument[-1];SyntheticField[com.google.common.collect.MapDifference.left] of MapValue of ReturnValue;value" - Map out = null; + Map out = null; MapDifference in = (MapDifference)newWithMapDifference_left(newWithMapValue(source())); out = in.entriesDiffering(); sink(getMapDifference_left(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;MapDifference;true;entriesDiffering;();;MapValue of SyntheticField[com.google.common.collect.MapDifference.right] of Argument[-1];SyntheticField[com.google.common.collect.MapDifference.right] of MapValue of ReturnValue;value" - SortedMap out = null; + SortedMap out = null; SortedMapDifference in = (SortedMapDifference)newWithMapDifference_right(newWithMapValue(source())); out = in.entriesDiffering(); sink(getMapDifference_right(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;MapDifference;true;entriesDiffering;();;MapValue of SyntheticField[com.google.common.collect.MapDifference.right] of Argument[-1];SyntheticField[com.google.common.collect.MapDifference.right] of MapValue of ReturnValue;value" - Map out = null; + Map out = null; MapDifference in = (MapDifference)newWithMapDifference_right(newWithMapValue(source())); out = in.entriesDiffering(); sink(getMapDifference_right(getMapValue(out))); // $ hasValueFlow @@ -4762,84 +4766,84 @@ public class Test { MapDifference out = null; Map in = (Map)newWithMapKey(source()); out = Maps.difference(in, (Map)null); - sink(getMapKey2(getMapDifference_left(out))); // $ hasValueFlow + sink(getMapKey(getMapDifference_left(out))); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;difference;(Map,Map);;MapKey of Argument[1];MapKey of SyntheticField[com.google.common.collect.MapDifference.right] of ReturnValue;value" MapDifference out = null; Map in = (Map)newWithMapKey(source()); out = Maps.difference((Map)null, in); - sink(getMapKey2(getMapDifference_right(out))); // $ hasValueFlow + sink(getMapKey(getMapDifference_right(out))); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;difference;(Map,Map);;MapValue of Argument[0];MapValue of SyntheticField[com.google.common.collect.MapDifference.left] of ReturnValue;value" MapDifference out = null; Map in = (Map)newWithMapValue(source()); out = Maps.difference(in, (Map)null); - sink(getMapValue2(getMapDifference_left(out))); // $ hasValueFlow + sink(getMapValue(getMapDifference_left(out))); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;difference;(Map,Map);;MapValue of Argument[1];MapValue of SyntheticField[com.google.common.collect.MapDifference.right] of ReturnValue;value" MapDifference out = null; Map in = (Map)newWithMapValue(source()); out = Maps.difference((Map)null, in); - sink(getMapValue2(getMapDifference_right(out))); // $ hasValueFlow + sink(getMapValue(getMapDifference_right(out))); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;difference;(Map,Map,Equivalence);;MapKey of Argument[0];MapKey of SyntheticField[com.google.common.collect.MapDifference.left] of ReturnValue;value" MapDifference out = null; Map in = (Map)newWithMapKey(source()); out = Maps.difference(in, null, null); - sink(getMapKey2(getMapDifference_left(out))); // $ hasValueFlow + sink(getMapKey(getMapDifference_left(out))); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;difference;(Map,Map,Equivalence);;MapKey of Argument[1];MapKey of SyntheticField[com.google.common.collect.MapDifference.right] of ReturnValue;value" MapDifference out = null; Map in = (Map)newWithMapKey(source()); out = Maps.difference(null, in, null); - sink(getMapKey2(getMapDifference_right(out))); // $ hasValueFlow + sink(getMapKey(getMapDifference_right(out))); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;difference;(Map,Map,Equivalence);;MapValue of Argument[0];MapValue of SyntheticField[com.google.common.collect.MapDifference.left] of ReturnValue;value" MapDifference out = null; Map in = (Map)newWithMapValue(source()); out = Maps.difference(in, null, null); - sink(getMapValue2(getMapDifference_left(out))); // $ hasValueFlow + sink(getMapValue(getMapDifference_left(out))); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;difference;(Map,Map,Equivalence);;MapValue of Argument[1];MapValue of SyntheticField[com.google.common.collect.MapDifference.right] of ReturnValue;value" MapDifference out = null; Map in = (Map)newWithMapValue(source()); out = Maps.difference(null, in, null); - sink(getMapValue2(getMapDifference_right(out))); // $ hasValueFlow + sink(getMapValue(getMapDifference_right(out))); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;difference;(SortedMap,Map);;MapKey of Argument[0];MapKey of SyntheticField[com.google.common.collect.MapDifference.left] of ReturnValue;value" SortedMapDifference out = null; SortedMap in = (SortedMap)newWithMapKey(source()); out = Maps.difference(in, (Map)null); - sink(getMapKey2(getMapDifference_left(out))); // $ hasValueFlow + sink(getMapKey(getMapDifference_left(out))); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;difference;(SortedMap,Map);;MapKey of Argument[1];MapKey of SyntheticField[com.google.common.collect.MapDifference.right] of ReturnValue;value" SortedMapDifference out = null; Map in = (Map)newWithMapKey(source()); out = Maps.difference((SortedMap)null, in); - sink(getMapKey2(getMapDifference_right(out))); // $ hasValueFlow + sink(getMapKey(getMapDifference_right(out))); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;difference;(SortedMap,Map);;MapValue of Argument[0];MapValue of SyntheticField[com.google.common.collect.MapDifference.left] of ReturnValue;value" SortedMapDifference out = null; SortedMap in = (SortedMap)newWithMapValue(source()); out = Maps.difference(in, (Map)null); - sink(getMapValue2(getMapDifference_left(out))); // $ hasValueFlow + sink(getMapValue(getMapDifference_left(out))); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;difference;(SortedMap,Map);;MapValue of Argument[1];MapValue of SyntheticField[com.google.common.collect.MapDifference.right] of ReturnValue;value" SortedMapDifference out = null; Map in = (Map)newWithMapValue(source()); out = Maps.difference((SortedMap)null, in); - sink(getMapValue2(getMapDifference_right(out))); // $ hasValueFlow + sink(getMapValue(getMapDifference_right(out))); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;filterEntries;(BiMap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value" @@ -6810,42 +6814,42 @@ public class Test { } { // "com.google.common.collect;Table;true;cellSet;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];SyntheticField[com.google.common.collect.Table.columnKey] of Element of ReturnValue;value" - Set out = null; + Set out = null; Table in = (Table)newWithTable_columnKey(source()); out = in.cellSet(); sink(getTable_columnKey(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;cellSet;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];SyntheticField[com.google.common.collect.Table.columnKey] of Element of ReturnValue;value" - Set out = null; + Set out = null; ArrayTable in = (ArrayTable)newWithTable_columnKey(source()); out = in.cellSet(); sink(getTable_columnKey(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;cellSet;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];SyntheticField[com.google.common.collect.Table.columnKey] of Element of ReturnValue;value" - ImmutableSet out = null; + ImmutableSet out = null; ImmutableTable in = (ImmutableTable)newWithTable_columnKey(source()); out = in.cellSet(); sink(getTable_columnKey(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;cellSet;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];SyntheticField[com.google.common.collect.Table.rowKey] of Element of ReturnValue;value" - Set out = null; + Set out = null; Table in = (Table)newWithTable_rowKey(source()); out = in.cellSet(); sink(getTable_rowKey(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;cellSet;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];SyntheticField[com.google.common.collect.Table.rowKey] of Element of ReturnValue;value" - Set out = null; + Set out = null; ArrayTable in = (ArrayTable)newWithTable_rowKey(source()); out = in.cellSet(); sink(getTable_rowKey(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;cellSet;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];SyntheticField[com.google.common.collect.Table.rowKey] of Element of ReturnValue;value" - ImmutableSet out = null; + ImmutableSet out = null; ImmutableTable in = (ImmutableTable)newWithTable_rowKey(source()); out = in.cellSet(); sink(getTable_rowKey(getElement(out))); // $ hasValueFlow diff --git a/java/ql/test/library-tests/frameworks/guava/generated/test.ql b/java/ql/test/library-tests/frameworks/guava/generated/test.ql index 90116d41a0c..e13fab3b504 100644 --- a/java/ql/test/library-tests/frameworks/guava/generated/test.ql +++ b/java/ql/test/library-tests/frameworks/guava/generated/test.ql @@ -10,18 +10,12 @@ class SummaryModelTest extends SummaryModelCsv { [ //"package;type;overrides;name;signature;ext;inputspec;outputspec;kind", "generatedtest;Test;false;newWithElement;;;Argument[0];Element of ReturnValue;value", - "generatedtest;Test;false;getMapKey2;;;MapKey of Argument[0];ReturnValue;value", "generatedtest;Test;false;newWithMapKey;;;Argument[0];MapKey of ReturnValue;value", - "generatedtest;Test;false;getMapValue2;;;MapValue of Argument[0];ReturnValue;value", "generatedtest;Test;false;newWithMapValue;;;Argument[0];MapValue of ReturnValue;value", - "generatedtest;Test;false;getTable_rowKey;;;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];ReturnValue;value", "generatedtest;Test;false;newWithTable_rowKey;;;Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value", - "generatedtest;Test;false;getTable_columnKey;;;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];ReturnValue;value", "generatedtest;Test;false;newWithTable_columnKey;;;Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value", "generatedtest;Test;false;newWithMapDifference_left;;;Argument[0];SyntheticField[com.google.common.collect.MapDifference.left] of ReturnValue;value", - "generatedtest;Test;false;getMapDifference_left;;;SyntheticField[com.google.common.collect.MapDifference.left] of Argument[0];ReturnValue;value", - "generatedtest;Test;false;newWithMapDifference_right;;;Argument[0];SyntheticField[com.google.common.collect.MapDifference.right] of ReturnValue;value", - "generatedtest;Test;false;getMapDifference_right;;;SyntheticField[com.google.common.collect.MapDifference.right] of Argument[0];ReturnValue;value" + "generatedtest;Test;false;newWithMapDifference_right;;;Argument[0];SyntheticField[com.google.common.collect.MapDifference.right] of ReturnValue;value" ] } } From 39349f3763d5296e0f3346115ab87e2f8808b616 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Thu, 29 Jul 2021 11:15:04 +0100 Subject: [PATCH 487/741] Fix failing test --- java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll b/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll index cbfe01ea57c..fabcfe9feb9 100644 --- a/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll +++ b/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll @@ -286,7 +286,7 @@ private class GuavaCollectCsv extends SummaryModelCsv { "com.google.common.collect;Iterators;false;forEnumeration;(Enumeration);;Element of Argument[0];Element of ReturnValue;value", "com.google.common.collect;Iterators;false;get;(Iterator,int);;Element of Argument[0];ReturnValue;value", "com.google.common.collect;Iterators;false;get;(Iterator,int,Object);;Element of Argument[0];ReturnValue;value", - "com.google.common.collect;Iterators;false;get;(Iterator,int,Object);;Argument[2];Element of ReturnValue;value", + "com.google.common.collect;Iterators;false;get;(Iterator,int,Object);;Argument[2];ReturnValue;value", "com.google.common.collect;Iterators;false;getLast;(Iterator);;Element of Argument[0];ReturnValue;value", "com.google.common.collect;Iterators;false;getLast;(Iterator,Object);;Element of Argument[0];ReturnValue;value", "com.google.common.collect;Iterators;false;getLast;(Iterator,Object);;Argument[1];ReturnValue;value", From 7bf55fbc497457d85cd250503dd67d811fe9c5c3 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Tue, 3 Aug 2021 11:15:37 +0100 Subject: [PATCH 488/741] Update stubs to not include package protected members --- .../com/google/common/base/Converter.java | 4 -- .../common/collect/AbstractListMultimap.java | 4 -- .../collect/AbstractMapBasedMultimap.java | 51 ------------------- .../collect/AbstractMapBasedMultiset.java | 4 -- .../common/collect/AbstractMultimap.java | 1 - .../common/collect/AbstractMultiset.java | 7 --- .../common/collect/AbstractSetMultimap.java | 4 -- .../AbstractSortedKeySortedSetMultimap.java | 4 -- .../collect/AbstractSortedMultiset.java | 8 --- .../collect/AbstractSortedSetMultimap.java | 4 -- .../google/common/collect/AbstractTable.java | 9 ---- .../common/collect/ArrayListMultimap.java | 3 -- ...tMultimapGwtSerializationDependencies.java | 3 -- .../com/google/common/collect/ArrayTable.java | 6 --- .../com/google/common/collect/BoundType.java | 3 -- .../google/common/collect/Collections2.java | 5 -- .../collect/ConcurrentHashMultiset.java | 5 -- .../com/google/common/collect/Count.java | 1 - .../com/google/common/collect/Cut.java | 19 ------- .../google/common/collect/DiscreteDomain.java | 2 - .../google/common/collect/HashBasedTable.java | 2 +- .../com/google/common/collect/HashBiMap.java | 2 - .../google/common/collect/HashMultimap.java | 3 -- ...hMultimapGwtSerializationDependencies.java | 3 -- .../collect/ImmutableClassToInstanceMap.java | 1 - .../google/common/collect/ImmutableList.java | 10 ---- .../common/collect/ImmutableListMultimap.java | 5 -- .../common/collect/ImmutableSortedMap.java | 11 ---- .../ImmutableSortedMapFauxverideShim.java | 1 - .../collect/ImmutableSortedMultiset.java | 4 -- ...ImmutableSortedMultisetFauxverideShim.java | 1 - .../common/collect/ImmutableSortedSet.java | 17 ------- .../ImmutableSortedSetFauxverideShim.java | 1 - .../google/common/collect/ImmutableTable.java | 20 -------- .../com/google/common/collect/Iterables.java | 5 -- .../com/google/common/collect/Iterators.java | 11 ---- .../common/collect/LinkedHashMultimap.java | 10 ---- ...hMultimapGwtSerializationDependencies.java | 3 -- .../common/collect/LinkedListMultimap.java | 11 ---- .../com/google/common/collect/Lists.java | 10 ---- .../com/google/common/collect/Maps.java | 44 +--------------- .../com/google/common/collect/Multimaps.java | 3 +- .../com/google/common/collect/Multisets.java | 15 ------ .../google/common/collect/ObjectArrays.java | 9 ---- .../com/google/common/collect/Range.java | 11 ---- .../RangeGwtSerializationDependencies.java | 1 - .../com/google/common/collect/Sets.java | 6 +-- .../collect/StandardRowSortedTable.java | 3 -- .../google/common/collect/StandardTable.java | 10 ---- .../com/google/common/collect/Tables.java | 3 +- .../google/common/collect/TreeBasedTable.java | 3 -- .../google/common/collect/TreeMultimap.java | 6 --- .../google/common/collect/TreeMultiset.java | 9 +--- 53 files changed, 7 insertions(+), 394 deletions(-) diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/base/Converter.java b/java/ql/test/stubs/guava-30.0/com/google/common/base/Converter.java index 2ff5d6b7f4f..4d2a445ccf8 100644 --- a/java/ql/test/stubs/guava-30.0/com/google/common/base/Converter.java +++ b/java/ql/test/stubs/guava-30.0/com/google/common/base/Converter.java @@ -6,10 +6,6 @@ import com.google.common.base.Function; abstract public class Converter implements Function { - Converter doAndThen(Converter p0){ return null; } - A correctedDoBackward(B p0){ return null; } - B correctedDoForward(A p0){ return null; } - Converter(boolean p0){} protected Converter(){} protected abstract A doBackward(B p0); protected abstract B doForward(A p0); diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/AbstractListMultimap.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/AbstractListMultimap.java index 14dc86a38eb..673bf12660a 100644 --- a/java/ql/test/stubs/guava-30.0/com/google/common/collect/AbstractListMultimap.java +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/AbstractListMultimap.java @@ -11,10 +11,6 @@ import java.util.Map; abstract class AbstractListMultimap extends AbstractMapBasedMultimap implements ListMultimap { protected AbstractListMultimap() {} - Collection unmodifiableCollectionSubclass(Collection p0){ return null; } - Collection wrapCollection(K p0, Collection p1){ return null; } - List createUnmodifiableEmptyCollection(){ return null; } - abstract List createCollection(); protected AbstractListMultimap(Map> p0){} public List get(K p0){ return null; } public List removeAll(Object p0){ return null; } diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/AbstractMapBasedMultimap.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/AbstractMapBasedMultimap.java index cc84abfb89a..81883754e6a 100644 --- a/java/ql/test/stubs/guava-30.0/com/google/common/collect/AbstractMapBasedMultimap.java +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/AbstractMapBasedMultimap.java @@ -3,68 +3,17 @@ package com.google.common.collect; import com.google.common.collect.AbstractMultimap; -import com.google.common.collect.Multiset; import java.io.Serializable; import java.util.AbstractCollection; import java.util.Collection; import java.util.Iterator; -import java.util.List; import java.util.Map; -import java.util.Set; import java.util.Spliterator; import java.util.function.BiConsumer; abstract class AbstractMapBasedMultimap extends AbstractMultimap implements Serializable { protected AbstractMapBasedMultimap() {} - Collection unmodifiableCollectionSubclass(Collection p0){ return null; } - Collection> createEntries(){ return null; } - Collection createCollection(K p0){ return null; } - Collection createUnmodifiableEmptyCollection(){ return null; } - Collection createValues(){ return null; } - Collection wrapCollection(K p0, Collection p1){ return null; } - Iterator> entryIterator(){ return null; } - Iterator valueIterator(){ return null; } - Map> backingMap(){ return null; } - Map> createAsMap(){ return null; } - Multiset createKeys(){ return null; } - Set createKeySet(){ return null; } - Spliterator> entrySpliterator(){ return null; } - Spliterator valueSpliterator(){ return null; } - abstract Collection createCollection(); - class WrappedCollection extends AbstractCollection - { - protected WrappedCollection() {} - AbstractMapBasedMultimap.WrappedCollection getAncestor(){ return null; } - Collection delegate = null; - Collection getDelegate(){ return null; } - K getKey(){ return null; } - WrappedCollection(K p0, Collection p1, AbstractMapBasedMultimap.WrappedCollection p2){} - final AbstractMapBasedMultimap.WrappedCollection ancestor = null; - final Collection ancestorDelegate = null; - final K key = null; - public Iterator iterator(){ return null; } - public Spliterator spliterator(){ return null; } - public String toString(){ return null; } - public boolean add(V p0){ return false; } - public boolean addAll(Collection p0){ return false; } - public boolean contains(Object p0){ return false; } - public boolean containsAll(Collection p0){ return false; } - public boolean equals(Object p0){ return false; } - public boolean remove(Object p0){ return false; } - public boolean removeAll(Collection p0){ return false; } - public boolean retainAll(Collection p0){ return false; } - public int hashCode(){ return 0; } - public int size(){ return 0; } - public void clear(){} - void addToMap(){} - void refreshIfEmpty(){} - void removeIfEmpty(){} - } - final List wrapList(K p0, List p1, AbstractMapBasedMultimap.WrappedCollection p2){ return null; } - final Map> createMaybeNavigableAsMap(){ return null; } - final Set createMaybeNavigableKeySet(){ return null; } - final void setMap(Map> p0){} protected AbstractMapBasedMultimap(Map> p0){} public Collection> entries(){ return null; } public Collection get(K p0){ return null; } diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/AbstractMapBasedMultiset.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/AbstractMapBasedMultiset.java index c6a582bff05..85f575c0d00 100644 --- a/java/ql/test/stubs/guava-30.0/com/google/common/collect/AbstractMapBasedMultiset.java +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/AbstractMapBasedMultiset.java @@ -14,9 +14,6 @@ import java.util.function.ObjIntConsumer; abstract class AbstractMapBasedMultiset extends AbstractMultiset implements Serializable { protected AbstractMapBasedMultiset() {} - Iterator elementIterator(){ return null; } - Iterator> entryIterator(){ return null; } - int distinctElements(){ return 0; } protected AbstractMapBasedMultiset(Map p0){} public Iterator iterator(){ return null; } public Set> entrySet(){ return null; } @@ -27,5 +24,4 @@ abstract class AbstractMapBasedMultiset extends AbstractMultiset implement public int size(){ return 0; } public void clear(){} public void forEachEntry(ObjIntConsumer p0){} - void setBackingMap(Map p0){} } diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/AbstractMultimap.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/AbstractMultimap.java index 64c6bd5004f..ce39e44126c 100644 --- a/java/ql/test/stubs/guava-30.0/com/google/common/collect/AbstractMultimap.java +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/AbstractMultimap.java @@ -5,7 +5,6 @@ package com.google.common.collect; import com.google.common.collect.Multimap; import com.google.common.collect.Multiset; import java.util.Collection; -import java.util.Iterator; import java.util.Map; import java.util.Set; diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/AbstractMultiset.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/AbstractMultiset.java index 2e4d44914c8..1403d74287b 100644 --- a/java/ql/test/stubs/guava-30.0/com/google/common/collect/AbstractMultiset.java +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/AbstractMultiset.java @@ -5,17 +5,10 @@ package com.google.common.collect; import com.google.common.collect.Multiset; import java.util.AbstractCollection; import java.util.Collection; -import java.util.Iterator; import java.util.Set; abstract class AbstractMultiset extends AbstractCollection implements Multiset { - AbstractMultiset(){} - Set createElementSet(){ return null; } - Set> createEntrySet(){ return null; } - abstract Iterator elementIterator(); - abstract Iterator> entryIterator(); - abstract int distinctElements(); public Set elementSet(){ return null; } public Set> entrySet(){ return null; } public abstract void clear(); diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/AbstractSetMultimap.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/AbstractSetMultimap.java index 27c912da1f4..58a869e4061 100644 --- a/java/ql/test/stubs/guava-30.0/com/google/common/collect/AbstractSetMultimap.java +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/AbstractSetMultimap.java @@ -11,10 +11,6 @@ import java.util.Set; abstract class AbstractSetMultimap extends AbstractMapBasedMultimap implements SetMultimap { protected AbstractSetMultimap() {} - Collection unmodifiableCollectionSubclass(Collection p0){ return null; } - Collection wrapCollection(K p0, Collection p1){ return null; } - Set createUnmodifiableEmptyCollection(){ return null; } - abstract Set createCollection(); protected AbstractSetMultimap(Map> p0){} public Map> asMap(){ return null; } public Set> entries(){ return null; } diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/AbstractSortedKeySortedSetMultimap.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/AbstractSortedKeySortedSetMultimap.java index f7c51b9faf3..99e7dae3f3c 100644 --- a/java/ql/test/stubs/guava-30.0/com/google/common/collect/AbstractSortedKeySortedSetMultimap.java +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/AbstractSortedKeySortedSetMultimap.java @@ -4,16 +4,12 @@ package com.google.common.collect; import com.google.common.collect.AbstractSortedSetMultimap; import java.util.Collection; -import java.util.Set; import java.util.SortedMap; import java.util.SortedSet; abstract class AbstractSortedKeySortedSetMultimap extends AbstractSortedSetMultimap { protected AbstractSortedKeySortedSetMultimap() {} - AbstractSortedKeySortedSetMultimap(SortedMap> p0){} - Set createKeySet(){ return null; } - SortedMap> backingMap(){ return null; } public SortedMap> asMap(){ return null; } public SortedSet keySet(){ return null; } } diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/AbstractSortedMultiset.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/AbstractSortedMultiset.java index 5f2a84224a8..4b9b54003d6 100644 --- a/java/ql/test/stubs/guava-30.0/com/google/common/collect/AbstractSortedMultiset.java +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/AbstractSortedMultiset.java @@ -7,18 +7,10 @@ import com.google.common.collect.BoundType; import com.google.common.collect.Multiset; import com.google.common.collect.SortedMultiset; import java.util.Comparator; -import java.util.Iterator; import java.util.NavigableSet; abstract class AbstractSortedMultiset extends AbstractMultiset implements SortedMultiset { - AbstractSortedMultiset(){} - AbstractSortedMultiset(Comparator p0){} - Iterator descendingIterator(){ return null; } - NavigableSet createElementSet(){ return null; } - SortedMultiset createDescendingMultiset(){ return null; } - abstract Iterator> descendingEntryIterator(); - final Comparator comparator = null; public Comparator comparator(){ return null; } public Multiset.Entry firstEntry(){ return null; } public Multiset.Entry lastEntry(){ return null; } diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/AbstractSortedSetMultimap.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/AbstractSortedSetMultimap.java index 5d2a58a3994..00d6491a2ca 100644 --- a/java/ql/test/stubs/guava-30.0/com/google/common/collect/AbstractSortedSetMultimap.java +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/AbstractSortedSetMultimap.java @@ -11,10 +11,6 @@ import java.util.SortedSet; abstract class AbstractSortedSetMultimap extends AbstractSetMultimap implements SortedSetMultimap { protected AbstractSortedSetMultimap() {} - SortedSet unmodifiableCollectionSubclass(Collection p0){ return null; } - Collection wrapCollection(K p0, Collection p1){ return null; } - SortedSet createUnmodifiableEmptyCollection(){ return null; } - abstract SortedSet createCollection(); protected AbstractSortedSetMultimap(Map> p0){} public Collection values(){ return null; } public Map> asMap(){ return null; } diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/AbstractTable.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/AbstractTable.java index f746f045f94..64ca3131671 100644 --- a/java/ql/test/stubs/guava-30.0/com/google/common/collect/AbstractTable.java +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/AbstractTable.java @@ -4,19 +4,10 @@ package com.google.common.collect; import com.google.common.collect.Table; import java.util.Collection; -import java.util.Iterator; import java.util.Set; -import java.util.Spliterator; abstract class AbstractTable implements Table { - AbstractTable(){} - Collection createValues(){ return null; } - Iterator valuesIterator(){ return null; } - Set> createCellSet(){ return null; } - Spliterator valuesSpliterator(){ return null; } - abstract Iterator> cellIterator(); - abstract Spliterator> cellSpliterator(); public Collection values(){ return null; } public Set columnKeySet(){ return null; } public Set rowKeySet(){ return null; } diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/ArrayListMultimap.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/ArrayListMultimap.java index da4069981f5..3e985271163 100644 --- a/java/ql/test/stubs/guava-30.0/com/google/common/collect/ArrayListMultimap.java +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/ArrayListMultimap.java @@ -4,13 +4,10 @@ package com.google.common.collect; import com.google.common.collect.ArrayListMultimapGwtSerializationDependencies; import com.google.common.collect.Multimap; -import java.util.List; public class ArrayListMultimap extends ArrayListMultimapGwtSerializationDependencies { protected ArrayListMultimap() {} - List createCollection(){ return null; } - int expectedValuesPerKey = 0; public static ArrayListMultimap create(){ return null; } public static ArrayListMultimap create(Multimap p0){ return null; } public static ArrayListMultimap create(int p0, int p1){ return null; } diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/ArrayListMultimapGwtSerializationDependencies.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/ArrayListMultimapGwtSerializationDependencies.java index 1a0e68bd7a3..9cb4c8f0c51 100644 --- a/java/ql/test/stubs/guava-30.0/com/google/common/collect/ArrayListMultimapGwtSerializationDependencies.java +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/ArrayListMultimapGwtSerializationDependencies.java @@ -3,11 +3,8 @@ package com.google.common.collect; import com.google.common.collect.AbstractListMultimap; -import java.util.Collection; -import java.util.Map; abstract class ArrayListMultimapGwtSerializationDependencies extends AbstractListMultimap { protected ArrayListMultimapGwtSerializationDependencies() {} - ArrayListMultimapGwtSerializationDependencies(Map> p0){} } diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/ArrayTable.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/ArrayTable.java index bcd351f037f..f04ed355d9a 100644 --- a/java/ql/test/stubs/guava-30.0/com/google/common/collect/ArrayTable.java +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/ArrayTable.java @@ -8,18 +8,12 @@ import com.google.common.collect.ImmutableSet; import com.google.common.collect.Table; import java.io.Serializable; import java.util.Collection; -import java.util.Iterator; import java.util.Map; import java.util.Set; -import java.util.Spliterator; public class ArrayTable extends AbstractTable implements Serializable { protected ArrayTable() {} - Iterator> cellIterator(){ return null; } - Iterator valuesIterator(){ return null; } - Spliterator> cellSpliterator(){ return null; } - Spliterator valuesSpliterator(){ return null; } public Collection values(){ return null; } public ImmutableList columnKeyList(){ return null; } public ImmutableList rowKeyList(){ return null; } diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/BoundType.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/BoundType.java index 2a0c2e34f2b..dda52f260dd 100644 --- a/java/ql/test/stubs/guava-30.0/com/google/common/collect/BoundType.java +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/BoundType.java @@ -7,7 +7,4 @@ public enum BoundType { CLOSED, OPEN; private BoundType() {} - BoundType flip(){ return null; } - final boolean inclusive = false; - static BoundType forBoolean(boolean p0){ return null; } } diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/Collections2.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/Collections2.java index e23a14d4d80..12b85b66058 100644 --- a/java/ql/test/stubs/guava-30.0/com/google/common/collect/Collections2.java +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/Collections2.java @@ -16,9 +16,4 @@ public class Collections2 public static Collection> orderedPermutations(Iterable p0, Comparator p1){ return null; } public static Collection> permutations(Collection p0){ return null; } public static Collection transform(Collection p0, Function p1){ return null; } - static String toStringImpl(Collection p0){ return null; } - static StringBuilder newStringBuilderForCollection(int p0){ return null; } - static boolean containsAllImpl(Collection p0, Collection p1){ return false; } - static boolean safeContains(Collection p0, Object p1){ return false; } - static boolean safeRemove(Collection p0, Object p1){ return false; } } diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/ConcurrentHashMultiset.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/ConcurrentHashMultiset.java index a8304ae2c7a..8eeff3c5792 100644 --- a/java/ql/test/stubs/guava-30.0/com/google/common/collect/ConcurrentHashMultiset.java +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/ConcurrentHashMultiset.java @@ -13,11 +13,6 @@ import java.util.concurrent.atomic.AtomicInteger; public class ConcurrentHashMultiset extends AbstractMultiset implements Serializable { protected ConcurrentHashMultiset() {} - ConcurrentHashMultiset(ConcurrentMap p0){} - Iterator elementIterator(){ return null; } - Iterator> entryIterator(){ return null; } - Set createElementSet(){ return null; } - int distinctElements(){ return 0; } public T[] toArray(T[] p0){ return null; } public Iterator iterator(){ return null; } public Object[] toArray(){ return null; } diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/Count.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/Count.java index 21307387f5c..a49c1849e0a 100644 --- a/java/ql/test/stubs/guava-30.0/com/google/common/collect/Count.java +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/Count.java @@ -7,7 +7,6 @@ import java.io.Serializable; class Count implements Serializable { protected Count() {} - Count(int p0){} public String toString(){ return null; } public boolean equals(Object p0){ return false; } public int addAndGet(int p0){ return 0; } diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/Cut.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/Cut.java index 822802a1fef..ae1d3e14bc7 100644 --- a/java/ql/test/stubs/guava-30.0/com/google/common/collect/Cut.java +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/Cut.java @@ -2,31 +2,12 @@ package com.google.common.collect; -import com.google.common.collect.BoundType; -import com.google.common.collect.DiscreteDomain; import java.io.Serializable; abstract class Cut implements Comparable>, Serializable { protected Cut() {} - C endpoint(){ return null; } - Cut(C p0){} - Cut canonical(DiscreteDomain p0){ return null; } - abstract BoundType typeAsLowerBound(); - abstract BoundType typeAsUpperBound(); - abstract C greatestValueBelow(DiscreteDomain p0); - abstract C leastValueAbove(DiscreteDomain p0); - abstract Cut withLowerBoundType(BoundType p0, DiscreteDomain p1); - abstract Cut withUpperBoundType(BoundType p0, DiscreteDomain p1); - abstract boolean isLessThan(C p0); - abstract void describeAsLowerBound(StringBuilder p0); - abstract void describeAsUpperBound(StringBuilder p0); - final C endpoint = null; public abstract int hashCode(); public boolean equals(Object p0){ return false; } public int compareTo(Cut p0){ return 0; } - static Cut aboveAll(){ return null; } - static Cut aboveValue(C p0){ return null; } - static Cut belowAll(){ return null; } - static Cut belowValue(C p0){ return null; } } diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/DiscreteDomain.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/DiscreteDomain.java index 02e21f27bfd..6eb3681e382 100644 --- a/java/ql/test/stubs/guava-30.0/com/google/common/collect/DiscreteDomain.java +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/DiscreteDomain.java @@ -6,8 +6,6 @@ import java.math.BigInteger; abstract public class DiscreteDomain { - C offset(C p0, long p1){ return null; } - final boolean supportsFastOffset = false; protected DiscreteDomain(){} public C maxValue(){ return null; } public C minValue(){ return null; } diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/HashBasedTable.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/HashBasedTable.java index ce2c45f1ffb..6284328c191 100644 --- a/java/ql/test/stubs/guava-30.0/com/google/common/collect/HashBasedTable.java +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/HashBasedTable.java @@ -1,4 +1,4 @@ -// Generated automatically from com.google.common.collect.HashBasedTable for testing purposes, and manually adjusted. +// Generated automatically from com.google.common.collect.HashBasedTable for testing purposes package com.google.common.collect; diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/HashBiMap.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/HashBiMap.java index 113e2682d44..ec5fd73b93f 100644 --- a/java/ql/test/stubs/guava-30.0/com/google/common/collect/HashBiMap.java +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/HashBiMap.java @@ -5,7 +5,6 @@ package com.google.common.collect; import com.google.common.collect.BiMap; import com.google.common.collect.Maps; import java.io.Serializable; -import java.util.Iterator; import java.util.Map; import java.util.Set; import java.util.function.BiConsumer; @@ -14,7 +13,6 @@ import java.util.function.BiFunction; public class HashBiMap extends Maps.IteratorBasedAbstractMap implements BiMap, Serializable { protected HashBiMap() {} - Iterator> entryIterator(){ return null; } public BiMap inverse(){ return null; } public Set keySet(){ return null; } public Set values(){ return null; } diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/HashMultimap.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/HashMultimap.java index b233e14aeeb..69ff1caa89f 100644 --- a/java/ql/test/stubs/guava-30.0/com/google/common/collect/HashMultimap.java +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/HashMultimap.java @@ -4,13 +4,10 @@ package com.google.common.collect; import com.google.common.collect.HashMultimapGwtSerializationDependencies; import com.google.common.collect.Multimap; -import java.util.Set; public class HashMultimap extends HashMultimapGwtSerializationDependencies { protected HashMultimap() {} - Set createCollection(){ return null; } - int expectedValuesPerKey = 0; public static HashMultimap create(){ return null; } public static HashMultimap create(Multimap p0){ return null; } public static HashMultimap create(int p0, int p1){ return null; } diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/HashMultimapGwtSerializationDependencies.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/HashMultimapGwtSerializationDependencies.java index f22c7827102..9ff6310fa70 100644 --- a/java/ql/test/stubs/guava-30.0/com/google/common/collect/HashMultimapGwtSerializationDependencies.java +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/HashMultimapGwtSerializationDependencies.java @@ -3,11 +3,8 @@ package com.google.common.collect; import com.google.common.collect.AbstractSetMultimap; -import java.util.Collection; -import java.util.Map; abstract class HashMultimapGwtSerializationDependencies extends AbstractSetMultimap { protected HashMultimapGwtSerializationDependencies() {} - HashMultimapGwtSerializationDependencies(Map> p0){} } diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/ImmutableClassToInstanceMap.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/ImmutableClassToInstanceMap.java index e0442bec015..2fd624f570a 100644 --- a/java/ql/test/stubs/guava-30.0/com/google/common/collect/ImmutableClassToInstanceMap.java +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/ImmutableClassToInstanceMap.java @@ -10,7 +10,6 @@ import java.util.Map; public class ImmutableClassToInstanceMap extends ForwardingMap, B> implements ClassToInstanceMap, Serializable { protected ImmutableClassToInstanceMap() {} - Object readResolve(){ return null; } protected Map, B> delegate(){ return null; } public T getInstance(Class p0){ return null; } public T putInstance(Class p0, T p1){ return null; } diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/ImmutableList.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/ImmutableList.java index 08e44baf490..5046e1fd2af 100644 --- a/java/ql/test/stubs/guava-30.0/com/google/common/collect/ImmutableList.java +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/ImmutableList.java @@ -58,18 +58,8 @@ abstract public class ImmutableList extends ImmutableCollection implements public static ImmutableList of(E p0, E p1, E p2, E p3, E p4, E p5, E p6, E p7, E p8, E p9, E p10, E p11, E... p12){ return null; } public static ImmutableList sortedCopyOf(Comparator p0, Iterable p1){ return null; } public void forEach(Consumer p0){} -<<<<<<< HEAD static public class Builder extends ImmutableCollection.Builder { -======= - static ImmutableList asImmutableList(Object[] p0){ return null; } - static ImmutableList asImmutableList(Object[] p0, int p1){ return null; } - static public class Builder extends ImmutableCollection.Builder - { - Builder(int p0){} - ImmutableList.Builder combine(ImmutableList.Builder p0){ return null; } - Object[] contents = null; ->>>>>>> 2bc43eb337... Generate stubs. public Builder(){} public ImmutableList.Builder add(E p0){ return null; } public ImmutableList.Builder add(E... p0){ return null; } diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/ImmutableListMultimap.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/ImmutableListMultimap.java index d21c299dd63..b8df07aa844 100644 --- a/java/ql/test/stubs/guava-30.0/com/google/common/collect/ImmutableListMultimap.java +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/ImmutableListMultimap.java @@ -3,11 +3,9 @@ package com.google.common.collect; import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableMultimap; import com.google.common.collect.ListMultimap; import com.google.common.collect.Multimap; -import java.util.Collection; import java.util.Comparator; import java.util.Map; import java.util.function.Function; @@ -17,7 +15,6 @@ import java.util.stream.Stream; public class ImmutableListMultimap extends ImmutableMultimap implements ListMultimap { protected ImmutableListMultimap() {} - ImmutableListMultimap(ImmutableMap> p0, int p1){} public ImmutableList get(K p0){ return null; } public ImmutableListMultimap inverse(){ return null; } public final ImmutableList removeAll(Object p0){ return null; } @@ -33,10 +30,8 @@ public class ImmutableListMultimap extends ImmutableMultimap impleme public static ImmutableListMultimap of(K p0, V p1, K p2, V p3, K p4, V p5, K p6, V p7, K p8, V p9){ return null; } public static Collector> flatteningToImmutableListMultimap(Function p0, Function> p1){ return null; } public static Collector> toImmutableListMultimap(Function p0, Function p1){ return null; } - static ImmutableListMultimap fromMapEntries(Collection>> p0, Comparator p1){ return null; } static public class Builder extends ImmutableMultimap.Builder { - ImmutableListMultimap.Builder combine(ImmutableMultimap.Builder p0){ return null; } public Builder(){} public ImmutableListMultimap.Builder orderKeysBy(Comparator p0){ return null; } public ImmutableListMultimap.Builder orderValuesBy(Comparator p0){ return null; } diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/ImmutableSortedMap.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/ImmutableSortedMap.java index e1ce5fe9346..a88c9d79376 100644 --- a/java/ql/test/stubs/guava-30.0/com/google/common/collect/ImmutableSortedMap.java +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/ImmutableSortedMap.java @@ -3,12 +3,10 @@ package com.google.common.collect; import com.google.common.collect.ImmutableCollection; -import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; import com.google.common.collect.ImmutableSortedMapFauxverideShim; import com.google.common.collect.ImmutableSortedSet; -import com.google.common.collect.RegularImmutableSortedSet; import java.util.Comparator; import java.util.Map; import java.util.NavigableMap; @@ -21,13 +19,6 @@ import java.util.stream.Collector; public class ImmutableSortedMap extends ImmutableSortedMapFauxverideShim implements NavigableMap { protected ImmutableSortedMap() {} - ImmutableCollection createValues(){ return null; } - ImmutableSet createKeySet(){ return null; } - ImmutableSet> createEntrySet(){ return null; } - ImmutableSortedMap(RegularImmutableSortedSet p0, ImmutableList p1){} - ImmutableSortedMap(RegularImmutableSortedSet p0, ImmutableList p1, ImmutableSortedMap p2){} - Object writeReplace(){ return null; } - boolean isPartialView(){ return false; } public Comparator comparator(){ return null; } public ImmutableCollection values(){ return null; } public ImmutableSet> entrySet(){ return null; } @@ -74,11 +65,9 @@ public class ImmutableSortedMap extends ImmutableSortedMapFauxverideShim Collector> toImmutableSortedMap(Comparator p0, Function p1, Function p2){ return null; } public static Collector> toImmutableSortedMap(Comparator p0, Function p1, Function p2, BinaryOperator p3){ return null; } public void forEach(BiConsumer p0){} - static ImmutableSortedMap emptyMap(Comparator p0){ return null; } static public class Builder extends ImmutableMap.Builder { protected Builder() {} - ImmutableSortedMap.Builder combine(ImmutableMap.Builder p0){ return null; } public Builder(Comparator p0){} public ImmutableSortedMap.Builder put(K p0, V p1){ return null; } public ImmutableSortedMap.Builder put(Map.Entry p0){ return null; } diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/ImmutableSortedMapFauxverideShim.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/ImmutableSortedMapFauxverideShim.java index 206dda5dcdb..c09533487b1 100644 --- a/java/ql/test/stubs/guava-30.0/com/google/common/collect/ImmutableSortedMapFauxverideShim.java +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/ImmutableSortedMapFauxverideShim.java @@ -10,7 +10,6 @@ import java.util.stream.Collector; abstract class ImmutableSortedMapFauxverideShim extends ImmutableMap { - ImmutableSortedMapFauxverideShim(){} public static ImmutableSortedMap.Builder builder(){ return null; } public static ImmutableSortedMap.Builder builderWithExpectedSize(int p0){ return null; } public static ImmutableSortedMap of(K p0, V p1){ return null; } diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/ImmutableSortedMultiset.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/ImmutableSortedMultiset.java index 830f4874409..fc068de4215 100644 --- a/java/ql/test/stubs/guava-30.0/com/google/common/collect/ImmutableSortedMultiset.java +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/ImmutableSortedMultiset.java @@ -16,9 +16,6 @@ import java.util.stream.Collector; abstract public class ImmutableSortedMultiset extends ImmutableSortedMultisetFauxverideShim implements SortedMultiset { - ImmutableSortedMultiset(){} - ImmutableSortedMultiset descendingMultiset = null; - Object writeReplace(){ return null; } public ImmutableSortedMultiset descendingMultiset(){ return null; } public ImmutableSortedMultiset subMultiset(E p0, BoundType p1, E p2, BoundType p3){ return null; } public abstract ImmutableSortedMultiset headMultiset(E p0, BoundType p1); @@ -45,7 +42,6 @@ abstract public class ImmutableSortedMultiset extends ImmutableSortedMultiset public static ImmutableSortedMultiset copyOfSorted(SortedMultiset p0){ return null; } public static ImmutableSortedMultiset of(){ return null; } public static Collector> toImmutableSortedMultiset(Comparator p0, Function p1, ToIntFunction p2){ return null; } - static ImmutableSortedMultiset emptyMultiset(Comparator p0){ return null; } static public class Builder extends ImmutableMultiset.Builder { protected Builder() {} diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/ImmutableSortedMultisetFauxverideShim.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/ImmutableSortedMultisetFauxverideShim.java index bd399349ebf..85af2f484d6 100644 --- a/java/ql/test/stubs/guava-30.0/com/google/common/collect/ImmutableSortedMultisetFauxverideShim.java +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/ImmutableSortedMultisetFauxverideShim.java @@ -10,7 +10,6 @@ import java.util.stream.Collector; abstract class ImmutableSortedMultisetFauxverideShim extends ImmutableMultiset { - ImmutableSortedMultisetFauxverideShim(){} public static Collector> toImmutableMultiset(){ return null; } public static ImmutableSortedMultiset.Builder builder(){ return null; } public static ImmutableSortedMultiset copyOf(E[] p0){ return null; } diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/ImmutableSortedSet.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/ImmutableSortedSet.java index b12f194ec3b..92cfc939d96 100644 --- a/java/ql/test/stubs/guava-30.0/com/google/common/collect/ImmutableSortedSet.java +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/ImmutableSortedSet.java @@ -4,7 +4,6 @@ package com.google.common.collect; import com.google.common.collect.ImmutableSet; import com.google.common.collect.ImmutableSortedSetFauxverideShim; -import com.google.common.collect.RegularImmutableSortedSet; import com.google.common.collect.SortedIterable; import com.google.common.collect.UnmodifiableIterator; import java.util.Collection; @@ -18,16 +17,6 @@ import java.util.stream.Collector; abstract public class ImmutableSortedSet extends ImmutableSortedSetFauxverideShim implements NavigableSet, SortedIterable { protected ImmutableSortedSet() {} - ImmutableSortedSet(Comparator p0){} - ImmutableSortedSet descendingSet = null; - Object writeReplace(){ return null; } - abstract ImmutableSortedSet createDescendingSet(); - abstract ImmutableSortedSet headSetImpl(E p0, boolean p1); - abstract ImmutableSortedSet subSetImpl(E p0, boolean p1, E p2, boolean p3); - abstract ImmutableSortedSet tailSetImpl(E p0, boolean p1); - abstract int indexOf(Object p0); - final Comparator comparator = null; - int unsafeCompare(Object p0, Object p1){ return 0; } public Comparator comparator(){ return null; } public E ceiling(E p0){ return null; } public E first(){ return null; } @@ -66,20 +55,14 @@ abstract public class ImmutableSortedSet extends ImmutableSortedSetFauxveride public static ImmutableSortedSet copyOf(Iterator p0){ return null; } public static ImmutableSortedSet copyOfSorted(SortedSet p0){ return null; } public static ImmutableSortedSet of(){ return null; } - static ImmutableSortedSet construct(Comparator p0, int p1, E... p2){ return null; } - static RegularImmutableSortedSet emptySet(Comparator p0){ return null; } - static int SPLITERATOR_CHARACTERISTICS = 0; - static int unsafeCompare(Comparator p0, Object p1, Object p2){ return 0; } static public class Builder extends ImmutableSet.Builder { protected Builder() {} - ImmutableSortedSet.Builder combine(ImmutableSet.Builder p0){ return null; } public Builder(Comparator p0){} public ImmutableSortedSet.Builder add(E p0){ return null; } public ImmutableSortedSet.Builder add(E... p0){ return null; } public ImmutableSortedSet.Builder addAll(Iterable p0){ return null; } public ImmutableSortedSet.Builder addAll(Iterator p0){ return null; } public ImmutableSortedSet build(){ return null; } - void copy(){} } } diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/ImmutableSortedSetFauxverideShim.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/ImmutableSortedSetFauxverideShim.java index a776c61e945..b2a0cff1ccb 100644 --- a/java/ql/test/stubs/guava-30.0/com/google/common/collect/ImmutableSortedSetFauxverideShim.java +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/ImmutableSortedSetFauxverideShim.java @@ -8,7 +8,6 @@ import java.util.stream.Collector; abstract class ImmutableSortedSetFauxverideShim extends ImmutableSet { - ImmutableSortedSetFauxverideShim(){} public static Collector> toImmutableSet(){ return null; } public static ImmutableSortedSet.Builder builder(){ return null; } public static ImmutableSortedSet.Builder builderWithExpectedSize(int p0){ return null; } diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/ImmutableTable.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/ImmutableTable.java index 619f46ec483..88f28c9ab98 100644 --- a/java/ql/test/stubs/guava-30.0/com/google/common/collect/ImmutableTable.java +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/ImmutableTable.java @@ -7,26 +7,15 @@ import com.google.common.collect.ImmutableCollection; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Table; -import com.google.common.collect.UnmodifiableIterator; import java.io.Serializable; import java.util.Comparator; -import java.util.Iterator; import java.util.Map; -import java.util.Spliterator; import java.util.function.BinaryOperator; import java.util.function.Function; import java.util.stream.Collector; abstract public class ImmutableTable extends AbstractTable implements Serializable { - ImmutableTable(){} - abstract ImmutableCollection createValues(); - abstract ImmutableSet> createCellSet(); - abstract ImmutableTable.SerializedForm createSerializedForm(); - final Iterator valuesIterator(){ return null; } - final Object writeReplace(){ return null; } - final Spliterator> cellSpliterator(){ return null; } - final UnmodifiableIterator> cellIterator(){ return null; } public ImmutableCollection values(){ return null; } public ImmutableMap row(R p0){ return null; } public ImmutableMap column(C p0){ return null; } @@ -47,17 +36,8 @@ abstract public class ImmutableTable extends AbstractTable imp public static ImmutableTable of(R p0, C p1, V p2){ return null; } public static Collector> toImmutableTable(Function p0, Function p1, Function p2){ return null; } public static Collector> toImmutableTable(Function p0, Function p1, Function p2, BinaryOperator p3){ return null; } - static ImmutableTable copyOf(Iterable> p0){ return null; } - static Table.Cell cellOf(R p0, C p1, V p2){ return null; } - static class SerializedForm implements Serializable - { - protected SerializedForm() {} - Object readResolve(){ return null; } - static ImmutableTable.SerializedForm create(ImmutableTable p0, int[] p1, int[] p2){ return null; } - } static public class Builder { - ImmutableTable.Builder combine(ImmutableTable.Builder p0){ return null; } public Builder(){} public ImmutableTable.Builder orderColumnsBy(Comparator p0){ return null; } public ImmutableTable.Builder orderRowsBy(Comparator p0){ return null; } diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/Iterables.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/Iterables.java index 7a2acbdf8ad..6eb11f37e56 100644 --- a/java/ql/test/stubs/guava-30.0/com/google/common/collect/Iterables.java +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/Iterables.java @@ -8,7 +8,6 @@ import com.google.common.base.Predicate; import com.google.common.collect.ImmutableCollection; import java.util.Collection; import java.util.Comparator; -import java.util.Iterator; import java.util.List; public class Iterables @@ -56,8 +55,4 @@ public class Iterables public static boolean retainAll(Iterable p0, Collection p1){ return false; } public static int frequency(Iterable p0, Object p1){ return 0; } public static int size(Iterable p0){ return 0; } - static Function, Iterator> toIterator(){ return null; } - static T removeFirstMatching(Iterable p0, Predicate p1){ return null; } - static T[] toArray(Iterable p0, T[] p1){ return null; } - static Object[] toArray(Iterable p0){ return null; } } diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/Iterators.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/Iterators.java index d4ced7dbb2e..4560e35a912 100644 --- a/java/ql/test/stubs/guava-30.0/com/google/common/collect/Iterators.java +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/Iterators.java @@ -7,13 +7,11 @@ import com.google.common.base.Optional; import com.google.common.base.Predicate; import com.google.common.collect.PeekingIterator; import com.google.common.collect.UnmodifiableIterator; -import com.google.common.collect.UnmodifiableListIterator; import java.util.Collection; import java.util.Comparator; import java.util.Enumeration; import java.util.Iterator; import java.util.List; -import java.util.ListIterator; public class Iterators { @@ -65,13 +63,4 @@ public class Iterators public static int advance(Iterator p0, int p1){ return 0; } public static int frequency(Iterator p0, Object p1){ return 0; } public static int size(Iterator p0){ return 0; } - static Iterator concatNoDefensiveCopy(Iterator... p0){ return null; } - static Iterator emptyModifiableIterator(){ return null; } - static ListIterator cast(Iterator p0){ return null; } - static T pollNext(Iterator p0){ return null; } - static UnmodifiableIterator emptyIterator(){ return null; } - static UnmodifiableListIterator emptyListIterator(){ return null; } - static UnmodifiableListIterator forArray(T[] p0, int p1, int p2, int p3){ return null; } - static void checkNonnegative(int p0){} - static void clear(Iterator p0){} } diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/LinkedHashMultimap.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/LinkedHashMultimap.java index 0f6781836f2..f6b539d1b58 100644 --- a/java/ql/test/stubs/guava-30.0/com/google/common/collect/LinkedHashMultimap.java +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/LinkedHashMultimap.java @@ -5,21 +5,12 @@ package com.google.common.collect; import com.google.common.collect.LinkedHashMultimapGwtSerializationDependencies; import com.google.common.collect.Multimap; import java.util.Collection; -import java.util.Iterator; import java.util.Map; import java.util.Set; -import java.util.Spliterator; public class LinkedHashMultimap extends LinkedHashMultimapGwtSerializationDependencies { protected LinkedHashMultimap() {} - Collection createCollection(K p0){ return null; } - Iterator> entryIterator(){ return null; } - Iterator valueIterator(){ return null; } - Set createCollection(){ return null; } - Spliterator> entrySpliterator(){ return null; } - Spliterator valueSpliterator(){ return null; } - int valueSetCapacity = 0; public Collection values(){ return null; } public Set keySet(){ return null; } public Set> entries(){ return null; } @@ -28,5 +19,4 @@ public class LinkedHashMultimap extends LinkedHashMultimapGwtSerialization public static LinkedHashMultimap create(Multimap p0){ return null; } public static LinkedHashMultimap create(int p0, int p1){ return null; } public void clear(){} - static double VALUE_SET_LOAD_FACTOR = 0; } diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/LinkedHashMultimapGwtSerializationDependencies.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/LinkedHashMultimapGwtSerializationDependencies.java index b552ae47c75..18f861e3ad0 100644 --- a/java/ql/test/stubs/guava-30.0/com/google/common/collect/LinkedHashMultimapGwtSerializationDependencies.java +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/LinkedHashMultimapGwtSerializationDependencies.java @@ -3,11 +3,8 @@ package com.google.common.collect; import com.google.common.collect.AbstractSetMultimap; -import java.util.Collection; -import java.util.Map; abstract class LinkedHashMultimapGwtSerializationDependencies extends AbstractSetMultimap { protected LinkedHashMultimapGwtSerializationDependencies() {} - LinkedHashMultimapGwtSerializationDependencies(Map> p0){} } diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/LinkedListMultimap.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/LinkedListMultimap.java index 0103056dfcf..2fb2075f923 100644 --- a/java/ql/test/stubs/guava-30.0/com/google/common/collect/LinkedListMultimap.java +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/LinkedListMultimap.java @@ -5,23 +5,12 @@ package com.google.common.collect; import com.google.common.collect.AbstractMultimap; import com.google.common.collect.ListMultimap; import com.google.common.collect.Multimap; -import com.google.common.collect.Multiset; import java.io.Serializable; -import java.util.Collection; -import java.util.Iterator; import java.util.List; import java.util.Map; -import java.util.Set; public class LinkedListMultimap extends AbstractMultimap implements ListMultimap, Serializable { - Iterator> entryIterator(){ return null; } - LinkedListMultimap(){} - List> createEntries(){ return null; } - List createValues(){ return null; } - Map> createAsMap(){ return null; } - Multiset createKeys(){ return null; } - Set createKeySet(){ return null; } public List> entries(){ return null; } public List get(K p0){ return null; } public List removeAll(Object p0){ return null; } diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/Lists.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/Lists.java index 72f7c955c8c..6be1146dbef 100644 --- a/java/ql/test/stubs/guava-30.0/com/google/common/collect/Lists.java +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/Lists.java @@ -8,7 +8,6 @@ import java.util.ArrayList; import java.util.Iterator; import java.util.LinkedList; import java.util.List; -import java.util.ListIterator; import java.util.concurrent.CopyOnWriteArrayList; public class Lists @@ -33,13 +32,4 @@ public class Lists public static List reverse(List p0){ return null; } public static ImmutableList charactersOf(String p0){ return null; } public static List charactersOf(CharSequence p0){ return null; } - static List subListImpl(List p0, int p1, int p2){ return null; } - static ListIterator listIteratorImpl(List p0, int p1){ return null; } - static boolean addAllImpl(List p0, int p1, Iterable p2){ return false; } - static List cast(Iterable p0){ return null; } - static boolean equalsImpl(List p0, Object p1){ return false; } - static int computeArrayListCapacity(int p0){ return 0; } - static int hashCodeImpl(List p0){ return 0; } - static int indexOfImpl(List p0, Object p1){ return 0; } - static int lastIndexOfImpl(List p0, Object p1){ return 0; } } diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/Maps.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/Maps.java index 32e49fefa08..34779f28de0 100644 --- a/java/ql/test/stubs/guava-30.0/com/google/common/collect/Maps.java +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/Maps.java @@ -1,4 +1,4 @@ -// Generated automatically from com.google.common.collect.Multimaps for testing purposes, and manually adjusted. +// Generated automatically from com.google.common.collect.Maps for testing purposes, and adjusted manually package com.google.common.collect; @@ -11,9 +11,7 @@ import com.google.common.collect.ImmutableMap; import com.google.common.collect.MapDifference; import com.google.common.collect.Range; import com.google.common.collect.SortedMapDifference; -import com.google.common.collect.UnmodifiableIterator; import java.util.AbstractMap; -import java.util.Collection; import java.util.Comparator; import java.util.EnumMap; import java.util.HashMap; @@ -27,25 +25,17 @@ import java.util.Properties; import java.util.Set; import java.util.SortedMap; import java.util.SortedSet; -import java.util.Spliterator; import java.util.TreeMap; import java.util.concurrent.ConcurrentMap; import java.util.function.BinaryOperator; -import java.util.function.Consumer; import java.util.stream.Collector; public class Maps { protected Maps() {} - abstract static class IteratorBasedAbstractMap extends AbstractMap - { - IteratorBasedAbstractMap(){} - Spliterator> entrySpliterator(){ return null; } - abstract Iterator> entryIterator(); + abstract static class IteratorBasedAbstractMap extends AbstractMap { public Set> entrySet(){ return null; } - public abstract int size(); public void clear(){} - void forEachEntry(Consumer> p0){} } public static Converter asConverter(BiMap p0){ return null; } public static TreeMap newTreeMap(Comparator p0){ return null; } @@ -99,36 +89,6 @@ public class Maps public static , V> Collector> toImmutableEnumMap(Function p0, Function p1){ return null; } public static , V> Collector> toImmutableEnumMap(Function p0, Function p1, BinaryOperator p2){ return null; } public static ImmutableMap fromProperties(Properties p0){ return null; } - static Comparator orNaturalOrder(Comparator p0){ return null; } - static ImmutableMap indexMap(Collection p0){ return null; } - static Function, Map.Entry> asEntryToEntryFunction(Maps.EntryTransformer p0){ return null; } - static Function, V2> asEntryToValueFunction(Maps.EntryTransformer p0){ return null; } - static Function asValueToValueFunction(Maps.EntryTransformer p0, K p1){ return null; } - static Maps.EntryTransformer asEntryTransformer(Function p0){ return null; } - static Iterator keyIterator(Iterator> p0){ return null; } - static Iterator> asMapEntryIterator(Set p0, Function p1){ return null; } - static Iterator valueIterator(Iterator> p0){ return null; } - static Map.Entry unmodifiableEntry(Map.Entry p0){ return null; } - static Set> unmodifiableEntrySet(Set> p0){ return null; } - static UnmodifiableIterator> unmodifiableEntryIterator(Iterator> p0){ return null; } - static boolean containsEntryImpl(Collection> p0, Object p1){ return false; } - static boolean removeEntryImpl(Collection> p0, Object p1){ return false; } - static void putAllImpl(Map p0, Map p1){} - static Function, K> keyFunction(){ return null; } - static K keyOrNull(Map.Entry p0){ return null; } - static Predicate> keyPredicateOnEntries(Predicate p0){ return null; } - static Map.Entry transformEntry(Maps.EntryTransformer p0, Map.Entry p1){ return null; } - static Function, V> valueFunction(){ return null; } - static Predicate> valuePredicateOnEntries(Predicate p0){ return null; } - static V safeGet(Map p0, Object p1){ return null; } - static V safeRemove(Map p0, Object p1){ return null; } - static V valueOrNull(Map.Entry p0){ return null; } - static String toStringImpl(Map p0){ return null; } - static boolean containsKeyImpl(Map p0, Object p1){ return false; } - static boolean containsValueImpl(Map p0, Object p1){ return false; } - static boolean equalsImpl(Map p0, Object p1){ return false; } - static boolean safeContainsKey(Map p0, Object p1){ return false; } - static int capacity(int p0){ return 0; } static public interface EntryTransformer { V2 transformEntry(K p0, V1 p1); diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/Multimaps.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/Multimaps.java index 5e424d671fd..eef38c9636c 100644 --- a/java/ql/test/stubs/guava-30.0/com/google/common/collect/Multimaps.java +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/Multimaps.java @@ -1,4 +1,4 @@ -// Generated automatically from com.google.common.collect.Multimaps for testing purposes, and manually adjusted. +// Generated automatically from com.google.common.collect.Multimaps for testing purposes, and adjusted manually package com.google.common.collect; @@ -61,5 +61,4 @@ public class Multimaps public static SortedSetMultimap unmodifiableSortedSetMultimap(SortedSetMultimap p0){ return null; } public static > Collector flatteningToMultimap(Function p0, Function> p1, Supplier p2){ return null; } public static > Collector toMultimap(Function p0, Function p1, Supplier p2){ return null; } - static boolean equalsImpl(Multimap p0, Object p1){ return false; } } diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/Multisets.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/Multisets.java index f858c310528..13c58b5d703 100644 --- a/java/ql/test/stubs/guava-30.0/com/google/common/collect/Multisets.java +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/Multisets.java @@ -6,9 +6,6 @@ import com.google.common.base.Predicate; import com.google.common.collect.ImmutableMultiset; import com.google.common.collect.Multiset; import com.google.common.collect.SortedMultiset; -import java.util.Collection; -import java.util.Iterator; -import java.util.Spliterator; import java.util.function.Function; import java.util.function.Supplier; import java.util.function.ToIntFunction; @@ -32,16 +29,4 @@ public class Multisets public static boolean removeOccurrences(Multiset p0, Iterable p1){ return false; } public static boolean removeOccurrences(Multiset p0, Multiset p1){ return false; } public static boolean retainOccurrences(Multiset p0, Multiset p1){ return false; } - static Iterator elementIterator(Iterator> p0){ return null; } - static Iterator iteratorImpl(Multiset p0){ return null; } - static Spliterator spliteratorImpl(Multiset p0){ return null; } - static boolean addAllImpl(Multiset p0, Collection p1){ return false; } - static boolean setCountImpl(Multiset p0, E p1, int p2, int p3){ return false; } - static int setCountImpl(Multiset p0, E p1, int p2){ return 0; } - static Multiset cast(Iterable p0){ return null; } - static boolean equalsImpl(Multiset p0, Object p1){ return false; } - static boolean removeAllImpl(Multiset p0, Collection p1){ return false; } - static boolean retainAllImpl(Multiset p0, Collection p1){ return false; } - static int inferDistinctElements(Iterable p0){ return 0; } - static int linearTimeSizeImpl(Multiset p0){ return 0; } } diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/ObjectArrays.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/ObjectArrays.java index 974e0a4f439..5999b1ba04e 100644 --- a/java/ql/test/stubs/guava-30.0/com/google/common/collect/ObjectArrays.java +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/ObjectArrays.java @@ -2,7 +2,6 @@ package com.google.common.collect; -import java.util.Collection; public class ObjectArrays { @@ -12,12 +11,4 @@ public class ObjectArrays public static T[] concat(T[] p0, T[] p1, Class p2){ return null; } public static T[] newArray(Class p0, int p1){ return null; } public static T[] newArray(T[] p0, int p1){ return null; } - static T[] toArrayImpl(Collection p0, T[] p1){ return null; } - static T[] toArrayImpl(Object[] p0, int p1, int p2, T[] p3){ return null; } - static Object checkElementNotNull(Object p0, int p1){ return null; } - static Object[] checkElementsNotNull(Object... p0){ return null; } - static Object[] checkElementsNotNull(Object[] p0, int p1){ return null; } - static Object[] copyAsObjectArray(Object[] p0, int p1, int p2){ return null; } - static Object[] toArrayImpl(Collection p0){ return null; } - static void swap(Object[] p0, int p1, int p2){} } diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/Range.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/Range.java index 77263678c28..15cfc94fc3d 100644 --- a/java/ql/test/stubs/guava-30.0/com/google/common/collect/Range.java +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/Range.java @@ -2,21 +2,15 @@ package com.google.common.collect; -import com.google.common.base.Function; import com.google.common.base.Predicate; import com.google.common.collect.BoundType; -import com.google.common.collect.Cut; import com.google.common.collect.DiscreteDomain; -import com.google.common.collect.Ordering; import com.google.common.collect.RangeGwtSerializationDependencies; import java.io.Serializable; public class Range extends RangeGwtSerializationDependencies implements Predicate, Serializable { protected Range() {} - Object readResolve(){ return null; } - final Cut lowerBound = null; - final Cut upperBound = null; public BoundType lowerBoundType(){ return null; } public BoundType upperBoundType(){ return null; } public C lowerEndpoint(){ return null; } @@ -50,9 +44,4 @@ public class Range extends RangeGwtSerializationDependenci public static > Range range(C p0, BoundType p1, C p2, BoundType p3){ return null; } public static > Range singleton(C p0){ return null; } public static > Range upTo(C p0, BoundType p1){ return null; } - static > Function, Cut> lowerBoundFn(){ return null; } - static > Function, Cut> upperBoundFn(){ return null; } - static > Ordering> rangeLexOrdering(){ return null; } - static > Range create(Cut p0, Cut p1){ return null; } - static int compareOrThrow(Comparable p0, Comparable p1){ return 0; } } diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/RangeGwtSerializationDependencies.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/RangeGwtSerializationDependencies.java index 3b52a4a794f..007eac594c6 100644 --- a/java/ql/test/stubs/guava-30.0/com/google/common/collect/RangeGwtSerializationDependencies.java +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/RangeGwtSerializationDependencies.java @@ -6,5 +6,4 @@ import java.io.Serializable; abstract class RangeGwtSerializationDependencies implements Serializable { - RangeGwtSerializationDependencies(){} } diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/Sets.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/Sets.java index 2b7ebee4d18..4e77f5d3a3c 100644 --- a/java/ql/test/stubs/guava-30.0/com/google/common/collect/Sets.java +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/Sets.java @@ -1,4 +1,4 @@ -// Generated automatically from com.google.common.collect.Sets for testing purposes, and manually adjusted. +// Generated automatically from com.google.common.collect.Sets for testing purposes, and adjusted manually package com.google.common.collect; @@ -76,8 +76,4 @@ public class Sets public static SortedSet filter(SortedSet p0, Predicate p1){ return null; } public static TreeSet newTreeSet(Comparator p0){ return null; } public static > NavigableSet subSet(NavigableSet p0, Range p1){ return null; } - static boolean equalsImpl(Set p0, Object p1){ return false; } - static boolean removeAllImpl(Set p0, Collection p1){ return false; } - static boolean removeAllImpl(Set p0, Iterator p1){ return false; } - static int hashCodeImpl(Set p0){ return 0; } } diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/StandardRowSortedTable.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/StandardRowSortedTable.java index 59a8b5d2094..6690519bddc 100644 --- a/java/ql/test/stubs/guava-30.0/com/google/common/collect/StandardRowSortedTable.java +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/StandardRowSortedTable.java @@ -2,7 +2,6 @@ package com.google.common.collect; -import com.google.common.base.Supplier; import com.google.common.collect.RowSortedTable; import com.google.common.collect.StandardTable; import java.util.Map; @@ -12,8 +11,6 @@ import java.util.SortedSet; class StandardRowSortedTable extends StandardTable implements RowSortedTable { protected StandardRowSortedTable() {} - SortedMap> createRowMap(){ return null; } - StandardRowSortedTable(SortedMap> p0, Supplier> p1){} public SortedMap> rowMap(){ return null; } public SortedSet rowKeySet(){ return null; } } diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/StandardTable.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/StandardTable.java index 3283546c39f..68cc22b9469 100644 --- a/java/ql/test/stubs/guava-30.0/com/google/common/collect/StandardTable.java +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/StandardTable.java @@ -2,26 +2,16 @@ package com.google.common.collect; -import com.google.common.base.Supplier; import com.google.common.collect.AbstractTable; import com.google.common.collect.Table; import java.io.Serializable; import java.util.Collection; -import java.util.Iterator; import java.util.Map; import java.util.Set; -import java.util.Spliterator; class StandardTable extends AbstractTable implements Serializable { protected StandardTable() {} - Iterator createColumnKeyIterator(){ return null; } - Iterator> cellIterator(){ return null; } - Map> createRowMap(){ return null; } - Spliterator> cellSpliterator(){ return null; } - StandardTable(Map> p0, Supplier> p1){} - final Map> backingMap = null; - final Supplier> factory = null; public Collection values(){ return null; } public Map> columnMap(){ return null; } public Map row(R p0){ return null; } diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/Tables.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/Tables.java index 56416aa8973..9d5c157dca2 100644 --- a/java/ql/test/stubs/guava-30.0/com/google/common/collect/Tables.java +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/Tables.java @@ -1,4 +1,4 @@ -// Generated automatically from com.google.common.collect.Tables for testing purposes, and manually adjusted. +// Generated automatically from com.google.common.collect.Tables for testing purposes, and adjusted manually package com.google.common.collect; @@ -22,5 +22,4 @@ public class Tables public static Table unmodifiableTable(Table p0){ return null; } public static > Collector toTable(Function p0, Function p1, Function p2, BinaryOperator p3, Supplier p4){ return null; } public static > Collector toTable(Function p0, Function p1, Function p2, Supplier p3){ return null; } - static boolean equalsImpl(Table p0, Object p1){ return false; } } diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/TreeBasedTable.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/TreeBasedTable.java index 44814ad6233..030593c26c9 100644 --- a/java/ql/test/stubs/guava-30.0/com/google/common/collect/TreeBasedTable.java +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/TreeBasedTable.java @@ -4,7 +4,6 @@ package com.google.common.collect; import com.google.common.collect.StandardRowSortedTable; import java.util.Comparator; -import java.util.Iterator; import java.util.Map; import java.util.SortedMap; import java.util.SortedSet; @@ -12,8 +11,6 @@ import java.util.SortedSet; public class TreeBasedTable extends StandardRowSortedTable { protected TreeBasedTable() {} - Iterator createColumnKeyIterator(){ return null; } - TreeBasedTable(Comparator p0, Comparator p1){} public Comparator columnComparator(){ return null; } public Comparator rowComparator(){ return null; } public SortedMap row(R p0){ return null; } diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/TreeMultimap.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/TreeMultimap.java index 0bb0801c55c..97e9c26c95f 100644 --- a/java/ql/test/stubs/guava-30.0/com/google/common/collect/TreeMultimap.java +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/TreeMultimap.java @@ -6,18 +6,12 @@ import com.google.common.collect.AbstractSortedKeySortedSetMultimap; import com.google.common.collect.Multimap; import java.util.Collection; import java.util.Comparator; -import java.util.Map; import java.util.NavigableMap; import java.util.NavigableSet; -import java.util.SortedSet; public class TreeMultimap extends AbstractSortedKeySortedSetMultimap { protected TreeMultimap() {} - Collection createCollection(K p0){ return null; } - Map> createAsMap(){ return null; } - SortedSet createCollection(){ return null; } - TreeMultimap(Comparator p0, Comparator p1){} public Comparator keyComparator(){ return null; } public Comparator valueComparator(){ return null; } public NavigableMap> asMap(){ return null; } diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/TreeMultiset.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/TreeMultiset.java index b8dfa5c0b39..e76b3086159 100644 --- a/java/ql/test/stubs/guava-30.0/com/google/common/collect/TreeMultiset.java +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/TreeMultiset.java @@ -1,11 +1,9 @@ -// Generated automatically from com.google.common.collect.TreeMultiset for testing purposes, and manually adjusted. +// Generated automatically from com.google.common.collect.TreeMultiset for testing purposes package com.google.common.collect; import com.google.common.collect.AbstractSortedMultiset; import com.google.common.collect.BoundType; -import com.google.common.collect.GeneralRange; -import com.google.common.collect.Multiset; import com.google.common.collect.SortedMultiset; import java.io.Serializable; import java.util.Comparator; @@ -15,11 +13,6 @@ import java.util.function.ObjIntConsumer; public class TreeMultiset extends AbstractSortedMultiset implements Serializable { protected TreeMultiset() {} - Iterator elementIterator(){ return null; } - Iterator> descendingEntryIterator(){ return null; } - Iterator> entryIterator(){ return null; } - TreeMultiset(Comparator p0){} - int distinctElements(){ return 0; } public Iterator iterator(){ return null; } public SortedMultiset headMultiset(E p0, BoundType p1){ return null; } public SortedMultiset tailMultiset(E p0, BoundType p1){ return null; } From 8425a94729306418dc77d199eee0527b9ae0679b Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Tue, 3 Aug 2021 11:43:48 +0100 Subject: [PATCH 489/741] Mark failing tests as missing I'm not sure why these tests don't work. --- .../test/library-tests/frameworks/guava/generated/Test.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/java/ql/test/library-tests/frameworks/guava/generated/Test.java b/java/ql/test/library-tests/frameworks/guava/generated/Test.java index 8c5659bbb99..4fb374b22bb 100644 --- a/java/ql/test/library-tests/frameworks/guava/generated/Test.java +++ b/java/ql/test/library-tests/frameworks/guava/generated/Test.java @@ -4493,7 +4493,7 @@ public class Test { List out = null; List[] in = (List[])newWithArrayElement(newWithElement(source())); out = Lists.cartesianProduct(in); - sink(getElement(getElement(out))); // $ hasValueFlow + sink(getElement(getElement(out))); // $ MISSING: hasValueFlow } { // "com.google.common.collect;Lists;false;charactersOf;(CharSequence);;Argument[0];Element of ReturnValue;taint" @@ -6621,7 +6621,7 @@ public class Test { Set out = null; Set[] in = (Set[])newWithArrayElement(newWithElement(source())); out = Sets.cartesianProduct(in); - sink(getElement(getElement(out))); // $ hasValueFlow + sink(getElement(getElement(out))); // $ MISSING: hasValueFlow } { // "com.google.common.collect;Sets;false;combinations;(Set,int);;Element of Argument[0];Element of Element of ReturnValue;value" From 7dded52de2d6f8223208c2c8ff8389225ee160e0 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Tue, 3 Aug 2021 11:49:59 +0100 Subject: [PATCH 490/741] Add change note --- java/change-notes/2021-08-02-guava-collections.md | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 java/change-notes/2021-08-02-guava-collections.md diff --git a/java/change-notes/2021-08-02-guava-collections.md b/java/change-notes/2021-08-02-guava-collections.md new file mode 100644 index 00000000000..0fb545f8990 --- /dev/null +++ b/java/change-notes/2021-08-02-guava-collections.md @@ -0,0 +1,2 @@ +lgtm,codescanning +* Improved modelling for the `com.google.common.collect` package of the Guava framework. \ No newline at end of file From 56a2dc632b2c89c66f3a65ef131a12b07c5bf293 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Tue, 3 Aug 2021 11:55:49 +0100 Subject: [PATCH 491/741] Move tests around and remove files used for generating tests --- .../guava/generated/{ => collect}/Test.java | 0 .../guava/{ => generated/collect}/options | 2 +- .../generated/{ => collect}/test.expected | 0 .../guava/generated/{ => collect}/test.ql | 0 .../guava/{ => handwritten}/TestBase.java | 0 .../guava/{ => handwritten}/TestCollect.java | 0 .../guava/{ => handwritten}/TestIO.java | 0 .../guava/{ => handwritten}/flow.expected | 0 .../guava/{ => handwritten}/flow.ql | 0 .../guava/{generated => handwritten}/options | 0 .../library-tests/frameworks/guava/pom.xml | 17 - .../library-tests/frameworks/guava/specs.csv | 539 ------------------ 12 files changed, 1 insertion(+), 557 deletions(-) rename java/ql/test/library-tests/frameworks/guava/generated/{ => collect}/Test.java (100%) rename java/ql/test/library-tests/frameworks/guava/{ => generated/collect}/options (73%) rename java/ql/test/library-tests/frameworks/guava/generated/{ => collect}/test.expected (100%) rename java/ql/test/library-tests/frameworks/guava/generated/{ => collect}/test.ql (100%) rename java/ql/test/library-tests/frameworks/guava/{ => handwritten}/TestBase.java (100%) rename java/ql/test/library-tests/frameworks/guava/{ => handwritten}/TestCollect.java (100%) rename java/ql/test/library-tests/frameworks/guava/{ => handwritten}/TestIO.java (100%) rename java/ql/test/library-tests/frameworks/guava/{ => handwritten}/flow.expected (100%) rename java/ql/test/library-tests/frameworks/guava/{ => handwritten}/flow.ql (100%) rename java/ql/test/library-tests/frameworks/guava/{generated => handwritten}/options (100%) delete mode 100644 java/ql/test/library-tests/frameworks/guava/pom.xml delete mode 100644 java/ql/test/library-tests/frameworks/guava/specs.csv diff --git a/java/ql/test/library-tests/frameworks/guava/generated/Test.java b/java/ql/test/library-tests/frameworks/guava/generated/collect/Test.java similarity index 100% rename from java/ql/test/library-tests/frameworks/guava/generated/Test.java rename to java/ql/test/library-tests/frameworks/guava/generated/collect/Test.java diff --git a/java/ql/test/library-tests/frameworks/guava/options b/java/ql/test/library-tests/frameworks/guava/generated/collect/options similarity index 73% rename from java/ql/test/library-tests/frameworks/guava/options rename to java/ql/test/library-tests/frameworks/guava/generated/collect/options index 918d89d295a..c894bb5413e 100644 --- a/java/ql/test/library-tests/frameworks/guava/options +++ b/java/ql/test/library-tests/frameworks/guava/generated/collect/options @@ -1 +1 @@ -//semmle-extractor-options: --javac-args -cp ${testdir}/../../../stubs/guava-30.0 \ No newline at end of file +//semmle-extractor-options: --javac-args -cp ${testdir}/../../../../../stubs/guava-30.0 \ No newline at end of file diff --git a/java/ql/test/library-tests/frameworks/guava/generated/test.expected b/java/ql/test/library-tests/frameworks/guava/generated/collect/test.expected similarity index 100% rename from java/ql/test/library-tests/frameworks/guava/generated/test.expected rename to java/ql/test/library-tests/frameworks/guava/generated/collect/test.expected diff --git a/java/ql/test/library-tests/frameworks/guava/generated/test.ql b/java/ql/test/library-tests/frameworks/guava/generated/collect/test.ql similarity index 100% rename from java/ql/test/library-tests/frameworks/guava/generated/test.ql rename to java/ql/test/library-tests/frameworks/guava/generated/collect/test.ql diff --git a/java/ql/test/library-tests/frameworks/guava/TestBase.java b/java/ql/test/library-tests/frameworks/guava/handwritten/TestBase.java similarity index 100% rename from java/ql/test/library-tests/frameworks/guava/TestBase.java rename to java/ql/test/library-tests/frameworks/guava/handwritten/TestBase.java diff --git a/java/ql/test/library-tests/frameworks/guava/TestCollect.java b/java/ql/test/library-tests/frameworks/guava/handwritten/TestCollect.java similarity index 100% rename from java/ql/test/library-tests/frameworks/guava/TestCollect.java rename to java/ql/test/library-tests/frameworks/guava/handwritten/TestCollect.java diff --git a/java/ql/test/library-tests/frameworks/guava/TestIO.java b/java/ql/test/library-tests/frameworks/guava/handwritten/TestIO.java similarity index 100% rename from java/ql/test/library-tests/frameworks/guava/TestIO.java rename to java/ql/test/library-tests/frameworks/guava/handwritten/TestIO.java diff --git a/java/ql/test/library-tests/frameworks/guava/flow.expected b/java/ql/test/library-tests/frameworks/guava/handwritten/flow.expected similarity index 100% rename from java/ql/test/library-tests/frameworks/guava/flow.expected rename to java/ql/test/library-tests/frameworks/guava/handwritten/flow.expected diff --git a/java/ql/test/library-tests/frameworks/guava/flow.ql b/java/ql/test/library-tests/frameworks/guava/handwritten/flow.ql similarity index 100% rename from java/ql/test/library-tests/frameworks/guava/flow.ql rename to java/ql/test/library-tests/frameworks/guava/handwritten/flow.ql diff --git a/java/ql/test/library-tests/frameworks/guava/generated/options b/java/ql/test/library-tests/frameworks/guava/handwritten/options similarity index 100% rename from java/ql/test/library-tests/frameworks/guava/generated/options rename to java/ql/test/library-tests/frameworks/guava/handwritten/options diff --git a/java/ql/test/library-tests/frameworks/guava/pom.xml b/java/ql/test/library-tests/frameworks/guava/pom.xml deleted file mode 100644 index 6d083af1a08..00000000000 --- a/java/ql/test/library-tests/frameworks/guava/pom.xml +++ /dev/null @@ -1,17 +0,0 @@ - - -4.0.0 - - test - test - 1.0-SNAPSHOT - - - - - com.google.guava - guava - 30.1.1-jre - - - diff --git a/java/ql/test/library-tests/frameworks/guava/specs.csv b/java/ql/test/library-tests/frameworks/guava/specs.csv deleted file mode 100644 index f00b6164265..00000000000 --- a/java/ql/test/library-tests/frameworks/guava/specs.csv +++ /dev/null @@ -1,539 +0,0 @@ -com.google.common.collect;Multiset;true;add;(Object,int);;Argument[0];Element of Argument[-1];value -com.google.common.collect;Multiset;true;setCount;(Object,int);;Argument[0];Element of Argument[-1];value -com.google.common.collect;Multiset;true;setCount;(Object,int,int);;Argument[0];Element of Argument[-1];value -com.google.common.collect;Multiset;true;elementSet;();;Element of Argument[-1];Element of ReturnValue;value -com.google.common.collect;Multiset;true;entrySet;();;Element of Argument[-1];Element of Element of ReturnValue;value -com.google.common.collect;Multiset$Entry;true;getElement;();;Element of Argument[-1];ReturnValue;value -com.google.common.collect;Multimap;true;asMap;();;MapKey of Argument[-1];MapKey of ReturnValue;value -com.google.common.collect;Multimap;true;asMap;();;MapValue of Argument[-1];Element of MapValue of ReturnValue;value -com.google.common.collect;Multimap;true;entries;();;MapKey of Argument[-1];MapKey of Element of ReturnValue;value -com.google.common.collect;Multimap;true;entries;();;MapValue of Argument[-1];MapValue of Element of ReturnValue;value -com.google.common.collect;Multimap;true;get;(Object);;MapValue of Argument[-1];Element of ReturnValue;value -com.google.common.collect;Multimap;true;keys;();;MapKey of Argument[-1];Element of ReturnValue;value -com.google.common.collect;Multimap;true;keySet;();;MapKey of Argument[-1];Element of ReturnValue;value -com.google.common.collect;Multimap;true;values;();;MapValue of Argument[-1];Element of ReturnValue;value -com.google.common.collect;Multimap;true;put;(Object,Object);;Argument[0];MapKey of Argument[-1];value -com.google.common.collect;Multimap;true;put;(Object,Object);;Argument[1];MapValue of Argument[-1];value -com.google.common.collect;Multimap;true;putAll;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value -com.google.common.collect;Multimap;true;putAll;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value -com.google.common.collect;Multimap;true;putAll;(Multimap);;MapKey of Argument[0];MapKey of Argument[-1];value -com.google.common.collect;Multimap;true;putAll;(Multimap);;MapValue of Argument[0];MapValue of Argument[-1];value -com.google.common.collect;Multimap;true;removeAll;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value -com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;MapValue of Argument[-1];Element of ReturnValue;value -com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value -com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value -com.google.common.collect;ImmutableMultimap;true;inverse;();;MapKey of Argument[-1];MapValue of ReturnValue;value -com.google.common.collect;ImmutableMultimap;true;inverse;();;MapValue of Argument[-1];MapKey of ReturnValue;value -com.google.common.collect;Table$Cell;true;getRowKey;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];ReturnValue;value -com.google.common.collect;Table$Cell;true;getColumnKey;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];ReturnValue;value -com.google.common.collect;Table$Cell;true;getValue;();;MapValue of Argument[-1];ReturnValue;value -com.google.common.collect;Table;true;cellSet;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];SyntheticField[com.google.common.collect.Table.rowKey] of Element of ReturnValue;value -com.google.common.collect;Table;true;cellSet;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];SyntheticField[com.google.common.collect.Table.columnKey] of Element of ReturnValue;value -com.google.common.collect;Table;true;cellSet;();;MapValue of Argument[-1];MapValue of Element of ReturnValue;value -com.google.common.collect;Table;true;row;(Object);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];MapKey of ReturnValue;value -com.google.common.collect;Table;true;row;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value -com.google.common.collect;Table;true;rowKeySet;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];Element of ReturnValue;value -com.google.common.collect;Table;true;rowMap;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];MapKey of ReturnValue;value -com.google.common.collect;Table;true;rowMap;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];MapKey of MapValue of ReturnValue;value -com.google.common.collect;Table;true;rowMap;();;MapValue of Argument[-1];MapValue of MapValue of ReturnValue;value -com.google.common.collect;Table;true;column;(Object);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];MapKey of ReturnValue;value -com.google.common.collect;Table;true;column;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value -com.google.common.collect;Table;true;columnKeySet;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];Element of ReturnValue;value -com.google.common.collect;Table;true;columnMap;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];MapKey of ReturnValue;value -com.google.common.collect;Table;true;columnMap;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];MapKey of MapValue of ReturnValue;value -com.google.common.collect;Table;true;columnMap;();;MapValue of Argument[-1];MapValue of MapValue of ReturnValue;value -com.google.common.collect;Table;true;values;();;MapValue of Argument[-1];Element of ReturnValue;value -com.google.common.collect;Table;true;get;(Object,Object);;MapValue of Argument[-1];ReturnValue;value -com.google.common.collect;Table;true;remove;(Object,Object);;MapValue of Argument[-1];ReturnValue;value -com.google.common.collect;Table;true;put;(Object,Object,Object);;Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];value -com.google.common.collect;Table;true;put;(Object,Object,Object);;Argument[1];SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];value -com.google.common.collect;Table;true;put;(Object,Object,Object);;Argument[2];MapValue of Argument[-1];value -com.google.common.collect;Table;true;putAll;(Table);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];value -com.google.common.collect;Table;true;putAll;(Table);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];value -com.google.common.collect;Table;true;putAll;(Table);;MapValue of Argument[0];MapValue of Argument[-1];value -com.google.common.collect;ImmutableCollection;true;asList;();;Element of Argument[-1];Element of ReturnValue;value -com.google.common.collect;ImmutableList;true;reverse;();;Element of Argument[-1];Element of ReturnValue;value -com.google.common.collect;ImmutableList;true;subList;(int,int);;Element of Argument[-1];Element of ReturnValue;value -com.google.common.collect;BiMap;true;forcePut;(Object,Object);;Argument[0];MapKey of Argument[-1];value -com.google.common.collect;BiMap;true;forcePut;(Object,Object);;Argument[1];MapValue of Argument[-1];value -com.google.common.collect;BiMap;true;inverse;();;MapKey of Argument[-1];MapValue of ReturnValue;value -com.google.common.collect;BiMap;true;inverse;();;MapValue of Argument[-1];MapKey of ReturnValue;value -com.google.common.collect;ClassToInstanceMap;true;getInstance;(Class);;MapValue of Argument[-1];ReturnValue;value -com.google.common.collect;ClassToInstanceMap;true;putInstance;(Class,Object);;MapValue of Argument[-1];ReturnValue;value -com.google.common.collect;ClassToInstanceMap;true;putInstance;(Class,Object);;Argument[1];MapValue of Argument[-1];value -com.google.common.collect;ImmutableCollection$Builder;true;build;();;Element of Argument[-1];Element of ReturnValue;value -com.google.common.collect;ImmutableCollection$Builder;true;add;;;Argument[-1];ReturnValue;value -com.google.common.collect;ImmutableCollection$Builder;true;add;(Object);;Argument[0];Element of Argument[-1];value -com.google.common.collect;ImmutableCollection$Builder;true;add;(Object[]);;ArrayElement of Argument[0];Element of Argument[-1];value -com.google.common.collect;ImmutableCollection$Builder;true;addAll;;;Argument[-1];ReturnValue;value -com.google.common.collect;ImmutableCollection$Builder;true;addAll;(Iterable);;Element of Argument[0];Element of Argument[-1];value -com.google.common.collect;ImmutableCollection$Builder;true;addAll;(Iterator);;Element of Argument[0];Element of Argument[-1];value -com.google.common.collect;ImmutableMultiset$Builder;true;addCopies;(Object,int);;Argument[-1];ReturnValue;value -com.google.common.collect;ImmutableMultiset$Builder;true;addCopies;(Object,int);;Argument[0];Element of Argument[-1];value -com.google.common.collect;ImmutableMap$Builder;true;build;();;MapKey of Argument[-1];MapKey of ReturnValue;value -com.google.common.collect;ImmutableMap$Builder;true;build;();;MapValue of Argument[-1];MapValue of ReturnValue;value -com.google.common.collect;ImmutableMap$Builder;true;orderEntriesByValue;(Comparator);;Argument[-1];ReturnValue;value -com.google.common.collect;ImmutableMap$Builder;true;put;;;Argument[-1];ReturnValue;value -com.google.common.collect;ImmutableMap$Builder;true;put;(Entry);;MapKey of Argument[0];MapKey of Argument[-1];value -com.google.common.collect;ImmutableMap$Builder;true;put;(Entry);;MapValue of Argument[0];MapValue of Argument[-1];value -com.google.common.collect;ImmutableMap$Builder;true;put;(Object,Object);;Argument[0];MapKey of Argument[-1];value -com.google.common.collect;ImmutableMap$Builder;true;put;(Object,Object);;Argument[1];MapValue of Argument[-1];value -com.google.common.collect;ImmutableMap$Builder;true;putAll;;;Argument[-1];ReturnValue;value -com.google.common.collect;ImmutableMap$Builder;true;putAll;(Iterable);;MapKey of Element of Argument[0];MapKey of Argument[-1];value -com.google.common.collect;ImmutableMap$Builder;true;putAll;(Iterable);;MapValue of Element of Argument[0];MapValue of Argument[-1];value -com.google.common.collect;ImmutableMap$Builder;true;putAll;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value -com.google.common.collect;ImmutableMap$Builder;true;putAll;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value -com.google.common.collect;ImmutableMultimap$Builder;true;build;();;MapKey of Argument[-1];MapKey of ReturnValue;value -com.google.common.collect;ImmutableMultimap$Builder;true;build;();;MapValue of Argument[-1];MapValue of ReturnValue;value -com.google.common.collect;ImmutableMultimap$Builder;true;orderKeysBy;(Comparator);;Argument[-1];ReturnValue;value -com.google.common.collect;ImmutableMultimap$Builder;true;orderValuesBy;(Comparator);;Argument[-1];ReturnValue;value -com.google.common.collect;ImmutableMultimap$Builder;true;put;;;Argument[-1];ReturnValue;value -com.google.common.collect;ImmutableMultimap$Builder;true;put;(Entry);;MapKey of Argument[0];MapKey of Argument[-1];value -com.google.common.collect;ImmutableMultimap$Builder;true;put;(Entry);;MapValue of Argument[0];MapValue of Argument[-1];value -com.google.common.collect;ImmutableMultimap$Builder;true;put;(Object,Object);;Argument[0];MapKey of Argument[-1];value -com.google.common.collect;ImmutableMultimap$Builder;true;put;(Object,Object);;Argument[1];MapValue of Argument[-1];value -com.google.common.collect;ImmutableMultimap$Builder;true;putAll;;;Argument[-1];ReturnValue;value -com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Iterable);;MapKey of Element of Argument[0];MapKey of Argument[-1];value -com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Iterable);;MapValue of Element of Argument[0];MapValue of Argument[-1];value -com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Multimap);;MapKey of Argument[0];MapKey of Argument[-1];value -com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Multimap);;MapValue of Argument[0];MapValue of Argument[-1];value -com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value -com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value -com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value -com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Object,Object[]);;ArrayElement of Argument[1];MapValue of Argument[-1];value -com.google.common.collect;ImmutableTable$Builder;true;build;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value -com.google.common.collect;ImmutableTable$Builder;true;build;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value -com.google.common.collect;ImmutableTable$Builder;true;build;();;MapValue of Argument[-1];MapValue of ReturnValue;value -com.google.common.collect;ImmutableTable$Builder;true;orderRowsBy;(Comparator);;Argument[-1];ReturnValue;value -com.google.common.collect;ImmutableTable$Builder;true;orderColumnsBy;(Comparator);;Argument[-1];ReturnValue;value -com.google.common.collect;ImmutableTable$Builder;true;put;(Object,Object,Object);;Argument[-1];ReturnValue;value -com.google.common.collect;ImmutableTable$Builder;true;put;(Cell);;Argument[-1];ReturnValue;value -com.google.common.collect;ImmutableTable$Builder;true;putAll;(Table);;Argument[-1];ReturnValue;value -com.google.common.collect;ImmutableTable$Builder;true;put;(Object,Object,Object);;Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];value -com.google.common.collect;ImmutableTable$Builder;true;put;(Object,Object,Object);;Argument[1];SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];value -com.google.common.collect;ImmutableTable$Builder;true;put;(Object,Object,Object);;Argument[2];MapValue of Argument[-1];value -com.google.common.collect;ImmutableTable$Builder;true;put;(Cell);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];value -com.google.common.collect;ImmutableTable$Builder;true;put;(Cell);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];value -com.google.common.collect;ImmutableTable$Builder;true;put;(Cell);;MapValue of Argument[0];MapValue of Argument[-1];value -com.google.common.collect;ImmutableTable$Builder;true;putAll;(Table);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];value -com.google.common.collect;ImmutableTable$Builder;true;putAll;(Table);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];value -com.google.common.collect;ImmutableTable$Builder;true;putAll;(Table);;MapValue of Argument[0];MapValue of Argument[-1];value -com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value -com.google.common.collect;ImmutableList;true;of;;;ArrayElement of Argument[12];Element of ReturnValue;value -com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value -com.google.common.collect;ImmutableSet;true;of;;;ArrayElement of Argument[6];Element of ReturnValue;value -com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value -com.google.common.collect;ImmutableSortedSet;true;of;;;ArrayElement of Argument[6];Element of ReturnValue;value -com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value -com.google.common.collect;ImmutableMultiset;true;of;;;Element of Argument[6];Element of ReturnValue;value -com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value -com.google.common.collect;ImmutableSortedMultiset;true;of;;;Element of Argument[6];Element of ReturnValue;value -com.google.common.collect;ImmutableMap;true;of;;;Argument[0];MapKey of ReturnValue;value -com.google.common.collect;ImmutableMap;true;of;;;Argument[1];MapValue of ReturnValue;value -com.google.common.collect;ImmutableMap;true;of;;;Argument[2];MapKey of ReturnValue;value -com.google.common.collect;ImmutableMap;true;of;;;Argument[3];MapValue of ReturnValue;value -com.google.common.collect;ImmutableMap;true;of;;;Argument[4];MapKey of ReturnValue;value -com.google.common.collect;ImmutableMap;true;of;;;Argument[5];MapValue of ReturnValue;value -com.google.common.collect;ImmutableMap;true;of;;;Argument[6];MapKey of ReturnValue;value -com.google.common.collect;ImmutableMap;true;of;;;Argument[7];MapValue of ReturnValue;value -com.google.common.collect;ImmutableMap;true;of;;;Argument[8];MapKey of ReturnValue;value -com.google.common.collect;ImmutableMap;true;of;;;Argument[9];MapValue of ReturnValue;value -com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[0];MapKey of ReturnValue;value -com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[1];MapValue of ReturnValue;value -com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[2];MapKey of ReturnValue;value -com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[3];MapValue of ReturnValue;value -com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[4];MapKey of ReturnValue;value -com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[5];MapValue of ReturnValue;value -com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[6];MapKey of ReturnValue;value -com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[7];MapValue of ReturnValue;value -com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[8];MapKey of ReturnValue;value -com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[9];MapValue of ReturnValue;value -com.google.common.collect;ImmutableMultimap;true;of;;;Argument[0];MapKey of ReturnValue;value -com.google.common.collect;ImmutableMultimap;true;of;;;Argument[1];MapValue of ReturnValue;value -com.google.common.collect;ImmutableMultimap;true;of;;;Argument[2];MapKey of ReturnValue;value -com.google.common.collect;ImmutableMultimap;true;of;;;Argument[3];MapValue of ReturnValue;value -com.google.common.collect;ImmutableMultimap;true;of;;;Argument[4];MapKey of ReturnValue;value -com.google.common.collect;ImmutableMultimap;true;of;;;Argument[5];MapValue of ReturnValue;value -com.google.common.collect;ImmutableMultimap;true;of;;;Argument[6];MapKey of ReturnValue;value -com.google.common.collect;ImmutableMultimap;true;of;;;Argument[7];MapValue of ReturnValue;value -com.google.common.collect;ImmutableMultimap;true;of;;;Argument[8];MapKey of ReturnValue;value -com.google.common.collect;ImmutableMultimap;true;of;;;Argument[9];MapValue of ReturnValue;value -com.google.common.collect;ImmutableClassToInstanceMap;true;of;(Class,Object);;Argument[0];MapKey of ReturnValue;value -com.google.common.collect;ImmutableClassToInstanceMap;true;of;(Class,Object);;Argument[1];MapValue of ReturnValue;value -com.google.common.collect;ImmutableTable;true;of;(Object,Object,Object);;Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value -com.google.common.collect;ImmutableTable;true;of;(Object,Object,Object);;Argument[1];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value -com.google.common.collect;ImmutableTable;true;of;(Object,Object,Object);;Argument[2];MapValue of ReturnValue;value -com.google.common.collect;ImmutableList;true;copyOf;(Object[]);;ArrayElement of Argument[0];Element of ReturnValue;value -com.google.common.collect;ImmutableList;true;copyOf;(Iterable);;Element of Argument[0];Element of ReturnValue;value -com.google.common.collect;ImmutableList;true;copyOf;(Iterator);;Element of Argument[0];Element of ReturnValue;value -com.google.common.collect;ImmutableList;true;copyOf;(Collection);;Element of Argument[0];Element of ReturnValue;value -com.google.common.collect;ImmutableList;true;sortedCopyOf;(Iterable);;Element of Argument[0];Element of ReturnValue;value -com.google.common.collect;ImmutableList;true;sortedCopyOf;(Comparator,Iterable);;Element of Argument[1];Element of ReturnValue;value -com.google.common.collect;ImmutableSet;true;copyOf;(Object[]);;ArrayElement of Argument[0];Element of ReturnValue;value -com.google.common.collect;ImmutableSet;true;copyOf;(Iterable);;Element of Argument[0];Element of ReturnValue;value -com.google.common.collect;ImmutableSet;true;copyOf;(Iterator);;Element of Argument[0];Element of ReturnValue;value -com.google.common.collect;ImmutableSet;true;copyOf;(Collection);;Element of Argument[0];Element of ReturnValue;value -com.google.common.collect;ImmutableSortedSet;true;copyOf;(Comparable[]);;ArrayElement of Argument[0];Element of ReturnValue;value -com.google.common.collect;ImmutableSortedSet;true;copyOf;(Iterable);;Element of Argument[0];Element of ReturnValue;value -com.google.common.collect;ImmutableSortedSet;true;copyOf;(Iterator);;Element of Argument[0];Element of ReturnValue;value -com.google.common.collect;ImmutableSortedSet;true;copyOf;(Collection);;Element of Argument[0];Element of ReturnValue;value -com.google.common.collect;ImmutableSortedSet;true;copyOf;(Comparator,Iterable);;Element of Argument[1];Element of ReturnValue;value -com.google.common.collect;ImmutableSortedSet;true;copyOf;(Comparator,Iterator);;Element of Argument[1];Element of ReturnValue;value -com.google.common.collect;ImmutableSortedSet;true;copyOf;(Comparator,Collection);;Element of Argument[1];Element of ReturnValue;value -com.google.common.collect;ImmutableSortedSet;true;copyOfSorted;(SortedSet);;Element of Argument[0];Element of ReturnValue;value -com.google.common.collect;ImmutableMultiset;true;copyOf;(Object[]);;ArrayElement of Argument[0];Element of ReturnValue;value -com.google.common.collect;ImmutableMultiset;true;copyOf;(Iterable);;Element of Argument[0];Element of ReturnValue;value -com.google.common.collect;ImmutableMultiset;true;copyOf;(Iterator);;Element of Argument[0];Element of ReturnValue;value -com.google.common.collect;ImmutableSortedMultiset;true;copyOf;(Comparable[]);;ArrayElement of Argument[0];Element of ReturnValue;value -com.google.common.collect;ImmutableSortedMultiset;true;copyOf;(Iterable);;Element of Argument[0];Element of ReturnValue;value -com.google.common.collect;ImmutableSortedMultiset;true;copyOf;(Iterator);;Element of Argument[0];Element of ReturnValue;value -com.google.common.collect;ImmutableSortedMultiset;true;copyOf;(Comparator,Iterable);;Element of Argument[1];Element of ReturnValue;value -com.google.common.collect;ImmutableSortedMultiset;true;copyOf;(Comparator,Iterator);;Element of Argument[1];Element of ReturnValue;value -com.google.common.collect;ImmutableSortedMultiset;true;copyOfSorted;(SortedMultiset);;Element of Argument[0];Element of ReturnValue;value -com.google.common.collect;ImmutableMap;true;copyOf;(Map);;MapKey of Argument[0];MapKey of ReturnValue;value -com.google.common.collect;ImmutableMap;true;copyOf;(Map);;MapValue of Argument[0];MapValue of ReturnValue;value -com.google.common.collect;ImmutableMap;true;copyOf;(Iterable);;MapKey of Element of Argument[0];MapKey of ReturnValue;value -com.google.common.collect;ImmutableMap;true;copyOf;(Iterable);;MapValue of Element of Argument[0];MapValue of ReturnValue;value -com.google.common.collect;ImmutableSortedMap;true;copyOf;(Map);;MapKey of Argument[0];MapKey of ReturnValue;value -com.google.common.collect;ImmutableSortedMap;true;copyOf;(Map);;MapValue of Argument[0];MapValue of ReturnValue;value -com.google.common.collect;ImmutableSortedMap;true;copyOf;(Iterable);;MapKey of Element of Argument[0];MapKey of ReturnValue;value -com.google.common.collect;ImmutableSortedMap;true;copyOf;(Iterable);;MapValue of Element of Argument[0];MapValue of ReturnValue;value -com.google.common.collect;ImmutableSortedMap;true;copyOfSorted;(SortedMap);;MapKey of Argument[0];MapKey of ReturnValue;value -com.google.common.collect;ImmutableSortedMap;true;copyOfSorted;(SortedMap);;MapValue of Argument[0];MapValue of ReturnValue;value -com.google.common.collect;ImmutableSortedMap;true;copyOf;(Map,Comparator);;MapKey of Argument[0];MapKey of ReturnValue;value -com.google.common.collect;ImmutableSortedMap;true;copyOf;(Map,Comparator);;MapValue of Argument[0];MapValue of ReturnValue;value -com.google.common.collect;ImmutableSortedMap;true;copyOf;(Iterable,Comparator);;MapKey of Element of Argument[0];MapKey of ReturnValue;value -com.google.common.collect;ImmutableSortedMap;true;copyOf;(Iterable,Comparator);;MapValue of Element of Argument[0];MapValue of ReturnValue;value -com.google.common.collect;ImmutableMultimap;true;copyOf;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value -com.google.common.collect;ImmutableMultimap;true;copyOf;(Multimap);;MapValue of Argument[0];MapValue of ReturnValue;value -com.google.common.collect;ImmutableMultimap;true;copyOf;(Iterable);;MapKey of Element of Argument[0];MapKey of ReturnValue;value -com.google.common.collect;ImmutableMultimap;true;copyOf;(Iterable);;MapValue of Element of Argument[0];MapValue of ReturnValue;value -com.google.common.collect;ImmutableClassToInstanceMap;true;copyOf;(Map);;MapKey of Argument[0];MapKey of ReturnValue;value -com.google.common.collect;ImmutableClassToInstanceMap;true;copyOf;(Map);;MapValue of Argument[0];MapValue of ReturnValue;value -com.google.common.collect;ImmutableTable;true;copyOf;(Table);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value -com.google.common.collect;ImmutableTable;true;copyOf;(Table);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value -com.google.common.collect;ImmutableTable;true;copyOf;(Table);;MapValue of Argument[0];MapValue of ReturnValue;value -com.google.common.collect;HashMultiset;true;create;(Iterable);;Element of Argument[0];Element of ReturnValue;value -com.google.common.collect;LinkedHashMultiset;true;create;(Iterable);;Element of Argument[0];Element of ReturnValue;value -com.google.common.collect;TreeMultiset;true;create;(Iterable);;Element of Argument[0];Element of ReturnValue;value -com.google.common.collect;ConcurrentHashMultiset;true;create;(Iterable);;Element of Argument[0];Element of ReturnValue;value -com.google.common.collect;HashMultimap;true;create;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value -com.google.common.collect;HashMultimap;true;create;(Multimap);;MapValue of Argument[0];MapValue of ReturnValue;value -com.google.common.collect;LinkedHashMultimap;true;create;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value -com.google.common.collect;LinkedHashMultimap;true;create;(Multimap);;MapValue of Argument[0];MapValue of ReturnValue;value -com.google.common.collect;LinkedListMultimap;true;create;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value -com.google.common.collect;LinkedListMultimap;true;create;(Multimap);;MapValue of Argument[0];MapValue of ReturnValue;value -com.google.common.collect;ArrayListMultimap;true;create;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value -com.google.common.collect;ArrayListMultimap;true;create;(Multimap);;MapValue of Argument[0];MapValue of ReturnValue;value -com.google.common.collect;TreeMultimap;true;create;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value -com.google.common.collect;TreeMultimap;true;create;(Multimap);;MapValue of Argument[0];MapValue of ReturnValue;value -com.google.common.collect;HashBiMap;true;create;(Map);;MapKey of Argument[0];MapKey of ReturnValue;value -com.google.common.collect;HashBiMap;true;create;(Map);;MapValue of Argument[0];MapValue of ReturnValue;value -com.google.common.collect;MutableClassToInstanceMap;true;create;(Map);;MapKey of Argument[0];MapKey of ReturnValue;value -com.google.common.collect;MutableClassToInstanceMap;true;create;(Map);;MapValue of Argument[0];MapValue of ReturnValue;value -com.google.common.collect;HashBasedTable;true;create;(Table);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value -com.google.common.collect;HashBasedTable;true;create;(Table);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value -com.google.common.collect;HashBasedTable;true;create;(Table);;MapValue of Argument[0];MapValue of ReturnValue;value -com.google.common.collect;TreeBasedTable;true;create;(TreeBasedTable);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value -com.google.common.collect;TreeBasedTable;true;create;(TreeBasedTable);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value -com.google.common.collect;TreeBasedTable;true;create;(TreeBasedTable);;MapValue of Argument[0];MapValue of ReturnValue;value -com.google.common.collect;ArrayTable;true;create;(Iterable,Iterable);;Element of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value -com.google.common.collect;ArrayTable;true;create;(Iterable,Iterable);;Element of Argument[1];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value -com.google.common.collect;Collections2;false;filter;(Collection,Predicate);;Element of Argument[0];Element of ReturnValue;value -com.google.common.collect;Collections2;false;orderedPermutations;(Iterable,Comparator);;Element of Argument[0];Element of ReturnValue;value -com.google.common.collect;Collections2;false;orderedPermutations;(Iterable);;Element of Argument[0];Element of ReturnValue;value -com.google.common.collect;Collections2;false;permutations;(Collection);;Element of Argument[0];Element of ReturnValue;value -com.google.common.collect;Iterators;false;addAll;(Collection,Iterator);;Element of Argument[1];Element of Argument[0];value -com.google.common.collect;Iterators;false;asEnumeration;(Iterator);;Element of Argument[0];Element of ReturnValue;value -com.google.common.collect;Iterators;false;concat;(Iterator);;Element of Element of Argument[0];Element of ReturnValue;value -com.google.common.collect;Iterators;false;concat;(Iterator[]);;Element of ArrayElement of Argument[0];Element of ReturnValue;value -com.google.common.collect;Iterators;false;concat;(Iterator,Iterator);;Element of Argument[0..1];Element of ReturnValue;value -com.google.common.collect;Iterators;false;concat;(Iterator,Iterator,Iterator);;Element of Argument[0..2];Element of ReturnValue;value -com.google.common.collect;Iterators;false;concat;(Iterator,Iterator,Iterator,Iterator);;Element of Argument[0..3];Element of ReturnValue;value -com.google.common.collect;Iterators;false;consumingIterator;(Iterator);;Element of Argument[0];Element of ReturnValue;value -com.google.common.collect;Iterators;false;cycle;(Iterable);;Element of Argument[0];Element of ReturnValue;value -com.google.common.collect;Iterators;false;cycle;(Object[]);;ArrayElement of Argument[0];Element of ReturnValue;value -com.google.common.collect;Iterators;false;filter;(Iterator,Class);;Element of Argument[0];Element of ReturnValue;value -com.google.common.collect;Iterators;false;filter;(Iterator,Predicate);;Element of Argument[0];Element of ReturnValue;value -com.google.common.collect;Iterators;false;find;(Iterator,Predicate);;Element of Argument[0];ReturnValue;value -com.google.common.collect;Iterators;false;find;(Iterator,Predicate,Object);;Element of Argument[0];ReturnValue;value -com.google.common.collect;Iterators;false;find;(Iterator,Predicate,Object);;Argument[2];Element of ReturnValue;value -com.google.common.collect;Iterators;false;forArray;(Object[]);;ArrayElement of Argument[0];Element of ReturnValue;value -com.google.common.collect;Iterators;false;forEnumeration;(Enumeration);;Element of Argument[0];Element of ReturnValue;value -com.google.common.collect;Iterators;false;get;(Iterator,int);;Element of Argument[0];ReturnValue;value -com.google.common.collect;Iterators;false;get;(Iterator,int,Object);;Element of Argument[0];ReturnValue;value -com.google.common.collect;Iterators;false;get;(Iterator,int,Object);;Argument[2];Element of ReturnValue;value -com.google.common.collect;Iterators;false;getLast;(Iterator);;Element of Argument[0];ReturnValue;value -com.google.common.collect;Iterators;false;getLast;(Iterator,Object);;Element of Argument[0];ReturnValue;value -com.google.common.collect;Iterators;false;getLast;(Iterator,Object);;Argument[1];Element of ReturnValue;value -com.google.common.collect;Iterators;false;getNext;(Iterator,Object);;Element of Argument[0];ReturnValue;value -com.google.common.collect;Iterators;false;getNext;(Iterator,Object);;Argument[1];Element of ReturnValue;value -com.google.common.collect;Iterators;false;getOnlyElement;(Iterator);;Element of Argument[0];ReturnValue;value -com.google.common.collect;Iterators;false;getOnlyElement;(Iterator,Object);;Element of Argument[0];ReturnValue;value -com.google.common.collect;Iterators;false;getOnlyElement;(Iterator,Object);;Argument[1];Element of ReturnValue;value -com.google.common.collect;Iterators;false;limit;(Iterator,int);;Element of Argument[0];Element of ReturnValue;value -com.google.common.collect;Iterators;false;mergeSorted;(Iterable,Comparator);;Element of Element of Argument[0];Element of ReturnValue;value -com.google.common.collect;Iterators;false;partition;(Iterator,int);;Element of Element of Argument[0];Element of ReturnValue;value -com.google.common.collect;Iterators;false;paddedPartition;(Iterator,int);;Element of Element of Argument[0];Element of ReturnValue;value -com.google.common.collect;Iterators;false;peekingIterator;(Iterator);;Element of Argument[0];Element of ReturnValue;value -com.google.common.collect;Iterators;false;peekingIterator;(PeekingIterator);;Element of Argument[0];Element of ReturnValue;value -com.google.common.collect;Iterators;false;singletonIterator;(Object);;Argument[0];Element of ReturnValue;value -com.google.common.collect;Iterators;false;toArray;(Iterator,Class);;Element of Argument[0];ArrayElement of ReturnValue;value -com.google.common.collect;Iterators;false;tryFind;(Iterator,Predicate);;Element of Argument[0];Element of ReturnValue;value -com.google.common.collect;Iterators;false;toString;(Iterator);;Element of Argument[0];ReturnValue;taint -com.google.common.collect;Iterators;false;unmodifiableIterator;(Iterator);;Element of Argument[0];Element of ReturnValue;value -com.google.common.collect;Iterators;false;unmodifiableIterator;(UnmodifiableIterator);;Element of Argument[0];Element of ReturnValue;value -com.google.common.collect;Iterables;false;addAll;(Collection,Iterable);;Element of Argument[1];Element of Argument[0];value -com.google.common.collect;Iterables;false;concat;(Iterable);;Element of Element of Argument[0];Element of ReturnValue;value -com.google.common.collect;Iterables;false;concat;(Iterable[]);;Element of ArrayElement of Argument[0];Element of ReturnValue;value -com.google.common.collect;Iterables;false;concat;(Iterable,Iterable);;Element of Argument[0..1];Element of ReturnValue;value -com.google.common.collect;Iterables;false;concat;(Iterable,Iterable,Iterable);;Element of Argument[0..2];Element of ReturnValue;value -com.google.common.collect;Iterables;false;concat;(Iterable,Iterable,Iterable,Iterable);;Element of Argument[0..3];Element of ReturnValue;value -com.google.common.collect;Iterables;false;consumingIterable;(Iterable);;Element of Argument[0];Element of ReturnValue;value -com.google.common.collect;Iterables;false;cycle;(Iterable);;Element of Argument[0];Element of ReturnValue;value -com.google.common.collect;Iterables;false;cycle;(Object[]);;ArrayElement of Argument[0];Element of ReturnValue;value -com.google.common.collect;Iterables;false;filter;(Iterable,Class);;Element of Argument[0];Element of ReturnValue;value -com.google.common.collect;Iterables;false;filter;(Iterable,Predicate);;Element of Argument[0];Element of ReturnValue;value -com.google.common.collect;Iterables;false;find;(Iterable,Predicate);;Element of Argument[0];ReturnValue;value -com.google.common.collect;Iterables;false;find;(Iterable,Predicate,Object);;Element of Argument[0];ReturnValue;value -com.google.common.collect;Iterables;false;find;(Iterable,Predicate,Object);;Argument[2];Element of ReturnValue;value -com.google.common.collect;Iterables;false;get;(Iterable,int);;Element of Argument[0];ReturnValue;value -com.google.common.collect;Iterables;false;get;(Iterable,int,Object);;Element of Argument[0];ReturnValue;value -com.google.common.collect;Iterables;false;get;(Iterable,int,Object);;Argument[2];Element of ReturnValue;value -com.google.common.collect;Iterables;false;getLast;(Iterable);;Element of Argument[0];ReturnValue;value -com.google.common.collect;Iterables;false;getLast;(Iterable,Object);;Element of Argument[0];ReturnValue;value -com.google.common.collect;Iterables;false;getLast;(Iterable,Object);;Argument[1];Element of ReturnValue;value -com.google.common.collect;Iterables;false;getOnlyElement;(Iterable);;Element of Argument[0];ReturnValue;value -com.google.common.collect;Iterables;false;getOnlyElement;(Iterable,Object);;Element of Argument[0];ReturnValue;value -com.google.common.collect;Iterables;false;getOnlyElement;(Iterable,Object);;Argument[1];Element of ReturnValue;value -com.google.common.collect;Iterables;false;limit;(Iterable,int);;Element of Argument[0];Element of ReturnValue;value -com.google.common.collect;Iterables;false;mergeSorted;(Iterable,Comparator);;Element of Element of Argument[0];Element of ReturnValue;value -com.google.common.collect;Iterables;false;partition;(Iterable,int);;Element of Element of Argument[0];Element of ReturnValue;value -com.google.common.collect;Iterables;false;paddedPartition;(Iterable,int);;Element of Element of Argument[0];Element of ReturnValue;value -com.google.common.collect;Iterables;false;skip;(Iterable,int);;Element of Argument[0];Element of ReturnValue;value -com.google.common.collect;Iterables;false;toArray;(Iterable,Class);;Element of Argument[0];ArrayElement of ReturnValue;value -com.google.common.collect;Iterables;false;tryFind;(Iterable,Predicate);;Element of Argument[0];Element of ReturnValue;value -com.google.common.collect;Iterables;false;toString;(Iterable);;Element of Argument[0];ReturnValue;taint -com.google.common.collect;Iterables;false;unmodifiableIterable;(Iterable);;Element of Argument[0];Element of ReturnValue;value -com.google.common.collect;Iterables;false;unmodifiableIterable;(ImmutableCollection);;Element of Argument[0];Element of ReturnValue;value -com.google.common.collect;Lists;false;asList;(Object,Object,Object[]);;Argument[0..1];Element of ReturnValue;value -com.google.common.collect;Lists;false;asList;(Object,Object,Object[]);;ArrayElement of Argument[2];Element of ReturnValue;value -com.google.common.collect;Lists;false;asList;(Object,Object[]);;Argument[0];Element of ReturnValue;value -com.google.common.collect;Lists;false;asList;(Object,Object[]);;ArrayElement of Argument[1];Element of ReturnValue;value -com.google.common.collect;Lists;false;cartesianProduct;(List);;Element of Element of Argument[0];Element of Element of ReturnValue;value -com.google.common.collect;Lists;false;cartesianProduct;(List[]);;Element of ArrayElement of Argument[0];Element of Element of ReturnValue;value -com.google.common.collect;Lists;false;charactersOf;(CharSequence);;Argument[0];Element of ReturnValue;taint -com.google.common.collect;Lists;false;charactersOf;(String);;Argument[0];Element of ReturnValue;taint -com.google.common.collect;Lists;false;newArrayList;(Object[]);;ArrayElement of Argument[0];Element of ReturnValue;value -com.google.common.collect;Lists;false;newArrayList;(Iterator);;Element of Argument[0];Element of ReturnValue;value -com.google.common.collect;Lists;false;newArrayList;(Iterable);;Element of Argument[0];Element of ReturnValue;value -com.google.common.collect;Lists;false;newCopyOnWriteArrayList;(Iterable);;Element of Argument[0];Element of ReturnValue;value -com.google.common.collect;Lists;false;newLinkedList;(Iterable);;Element of Argument[0];Element of ReturnValue;value -com.google.common.collect;Lists;false;partition;(List,int);;Element of Argument[0];Element of Element of ReturnValue;value -com.google.common.collect;Lists;false;reverse;(List);;Element of Argument[0];Element of ReturnValue;value -com.google.common.collect;Maps;false;asMap;(Set,Function);;Element of Argument[0];MapKey of ReturnValue;value -com.google.common.collect;Maps;false;asMap;(NavigableSet,Function);;Element of Argument[0];MapKey of ReturnValue;value -com.google.common.collect;Maps;false;asMap;(SortedSet,Function);;Element of Argument[0];MapKey of ReturnValue;value -com.google.common.collect;Maps;false;difference;(Map,Map);;MapKey of Argument[0];MapKey of SyntheticField[com.google.common.collect.MapDifference.left] of ReturnValue;value -com.google.common.collect;Maps;false;difference;(Map,Map);;MapValue of Argument[0];MapValue of SyntheticField[com.google.common.collect.MapDifference.left] of ReturnValue;value -com.google.common.collect;Maps;false;difference;(Map,Map);;MapKey of Argument[1];MapKey of SyntheticField[com.google.common.collect.MapDifference.right] of ReturnValue;value -com.google.common.collect;Maps;false;difference;(Map,Map);;MapValue of Argument[1];MapValue of SyntheticField[com.google.common.collect.MapDifference.right] of ReturnValue;value -com.google.common.collect;Maps;false;difference;(Map,Map,Equivalence);;MapKey of Argument[0];MapKey of SyntheticField[com.google.common.collect.MapDifference.left] of ReturnValue;value -com.google.common.collect;Maps;false;difference;(Map,Map,Equivalence);;MapValue of Argument[0];MapValue of SyntheticField[com.google.common.collect.MapDifference.left] of ReturnValue;value -com.google.common.collect;Maps;false;difference;(Map,Map,Equivalence);;MapKey of Argument[1];MapKey of SyntheticField[com.google.common.collect.MapDifference.right] of ReturnValue;value -com.google.common.collect;Maps;false;difference;(Map,Map,Equivalence);;MapValue of Argument[1];MapValue of SyntheticField[com.google.common.collect.MapDifference.right] of ReturnValue;value -com.google.common.collect;Maps;false;difference;(SortedMap,Map);;MapKey of Argument[0];MapKey of SyntheticField[com.google.common.collect.MapDifference.left] of ReturnValue;value -com.google.common.collect;Maps;false;difference;(SortedMap,Map);;MapValue of Argument[0];MapValue of SyntheticField[com.google.common.collect.MapDifference.left] of ReturnValue;value -com.google.common.collect;Maps;false;difference;(SortedMap,Map);;MapKey of Argument[1];MapKey of SyntheticField[com.google.common.collect.MapDifference.right] of ReturnValue;value -com.google.common.collect;Maps;false;difference;(SortedMap,Map);;MapValue of Argument[1];MapValue of SyntheticField[com.google.common.collect.MapDifference.right] of ReturnValue;value -com.google.common.collect;Maps;false;filterEntries;(Map,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value -com.google.common.collect;Maps;false;filterEntries;(Map,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value -com.google.common.collect;Maps;false;filterEntries;(BiMap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value -com.google.common.collect;Maps;false;filterEntries;(BiMap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value -com.google.common.collect;Maps;false;filterEntries;(NavigableMap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value -com.google.common.collect;Maps;false;filterEntries;(NavigableMap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value -com.google.common.collect;Maps;false;filterEntries;(SortedMap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value -com.google.common.collect;Maps;false;filterEntries;(SortedMap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value -com.google.common.collect;Maps;false;filterKeys;(Map,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value -com.google.common.collect;Maps;false;filterKeys;(Map,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value -com.google.common.collect;Maps;false;filterKeys;(BiMap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value -com.google.common.collect;Maps;false;filterKeys;(BiMap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value -com.google.common.collect;Maps;false;filterKeys;(NavigableMap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value -com.google.common.collect;Maps;false;filterKeys;(NavigableMap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value -com.google.common.collect;Maps;false;filterKeys;(SortedMap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value -com.google.common.collect;Maps;false;filterKeys;(SortedMap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value -com.google.common.collect;Maps;false;filterValues;(Map,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value -com.google.common.collect;Maps;false;filterValues;(Map,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value -com.google.common.collect;Maps;false;filterValues;(BiMap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value -com.google.common.collect;Maps;false;filterValues;(BiMap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value -com.google.common.collect;Maps;false;filterValues;(NavigableMap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value -com.google.common.collect;Maps;false;filterValues;(NavigableMap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value -com.google.common.collect;Maps;false;filterValues;(SortedMap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value -com.google.common.collect;Maps;false;filterValues;(SortedMap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value -com.google.common.collect;Maps;false;fromProperties;(Properties);;MapKey of Argument[0];MapKey of ReturnValue;value -com.google.common.collect;Maps;false;fromProperties;(Properties);;MapValue of Argument[0];MapValue of ReturnValue;value -com.google.common.collect;Maps;false;immutableEntry;(Object,Object);;Argument[0];MapKey of ReturnValue;value -com.google.common.collect;Maps;false;immutableEntry;(Object,Object);;Argument[1];MapValue of ReturnValue;value -com.google.common.collect;Maps;false;newHashMap;(Map);;MapKey of Argument[0];MapKey of ReturnValue;value -com.google.common.collect;Maps;false;newHashMap;(Map);;MapValue of Argument[0];MapValue of ReturnValue;value -com.google.common.collect;Maps;false;newLinkedHashMap;(Map);;MapKey of Argument[0];MapKey of ReturnValue;value -com.google.common.collect;Maps;false;newLinkedHashMap;(Map);;MapValue of Argument[0];MapValue of ReturnValue;value -com.google.common.collect;Maps;false;newTreeMap;(SortedMap);;MapKey of Argument[0];MapKey of ReturnValue;value -com.google.common.collect;Maps;false;newTreeMap;(SortedMap);;MapValue of Argument[0];MapValue of ReturnValue;value -com.google.common.collect;Maps;false;subMap;(NavigableMap,Range);;MapKey of Argument[0];MapKey of ReturnValue;value -com.google.common.collect;Maps;false;subMap;(NavigableMap,Range);;MapValue of Argument[0];MapValue of ReturnValue;value -com.google.common.collect;Maps;false;synchronizedBiMap;(BiMap);;MapKey of Argument[0];MapKey of ReturnValue;value -com.google.common.collect;Maps;false;synchronizedBiMap;(BiMap);;MapValue of Argument[0];MapValue of ReturnValue;value -com.google.common.collect;Maps;false;synchronizedNavigableMap;(NavigableMap);;MapKey of Argument[0];MapKey of ReturnValue;value -com.google.common.collect;Maps;false;synchronizedNavigableMap;(NavigableMap);;MapValue of Argument[0];MapValue of ReturnValue;value -com.google.common.collect;Maps;false;unmodifiableBiMap;(BiMap);;MapKey of Argument[0];MapKey of ReturnValue;value -com.google.common.collect;Maps;false;unmodifiableBiMap;(BiMap);;MapValue of Argument[0];MapValue of ReturnValue;value -com.google.common.collect;Maps;false;unmodifiableNavigableMap;(NavigableMap);;MapKey of Argument[0];MapKey of ReturnValue;value -com.google.common.collect;Maps;false;unmodifiableNavigableMap;(NavigableMap);;MapValue of Argument[0];MapValue of ReturnValue;value -com.google.common.collect;Maps;false;toMap;(Iterable,Function);;Element of Argument[0];MapKey of ReturnValue;value -com.google.common.collect;Maps;false;toMap;(Iterator,Function);;Element of Argument[0];MapKey of ReturnValue;value -com.google.common.collect;Maps;false;uniqueIndex;(Iterable,Function);;Element of Argument[0];MapValue of ReturnValue;value -com.google.common.collect;Maps;false;uniqueIndex;(Iterator,Function);;Element of Argument[0];MapValue of ReturnValue;value -com.google.common.collect;Maps;false;transformValues;(Map,Function);;MapKey of Argument[0];MapKey of ReturnValue;value -com.google.common.collect;Maps;false;transformValues;(NavigableMap,Function);;MapKey of Argument[0];MapKey of ReturnValue;value -com.google.common.collect;Maps;false;transformValues;(SortedMap,Function);;MapKey of Argument[0];MapKey of ReturnValue;value -com.google.common.collect;MapDifference;true;entriesDiffering;();;MapKey of SyntheticField[com.google.common.collect.MapDifference.left] of Argument[-1];MapKey of ReturnValue;value -com.google.common.collect;MapDifference;true;entriesDiffering;();;MapKey of SyntheticField[com.google.common.collect.MapDifference.right] of Argument[-1];MapKey of ReturnValue;value -com.google.common.collect;MapDifference;true;entriesDiffering;();;MapValue of SyntheticField[com.google.common.collect.MapDifference.left] of Argument[-1];SyntheticField[com.google.common.collect.MapDifference.left] of MapValue of ReturnValue;value -com.google.common.collect;MapDifference;true;entriesDiffering;();;MapValue of SyntheticField[com.google.common.collect.MapDifference.right] of Argument[-1];SyntheticField[com.google.common.collect.MapDifference.right] of MapValue of ReturnValue;value -com.google.common.collect;MapDifference;true;entriesInCommon;();;MapKey of SyntheticField[com.google.common.collect.MapDifference.left] of Argument[-1];MapKey of ReturnValue;value -com.google.common.collect;MapDifference;true;entriesInCommon;();;MapKey of SyntheticField[com.google.common.collect.MapDifference.right] of Argument[-1];MapKey of ReturnValue;value -com.google.common.collect;MapDifference;true;entriesInCommon;();;MapValue of SyntheticField[com.google.common.collect.MapDifference.left] of Argument[-1];MapValue of ReturnValue;value -com.google.common.collect;MapDifference;true;entriesInCommon;();;MapValue of SyntheticField[com.google.common.collect.MapDifference.right] of Argument[-1];MapValue of ReturnValue;value -com.google.common.collect;MapDifference;true;entriesOnlyOnLeft;();;MapKey of SyntheticField[com.google.common.collect.MapDifference.left] of Argument[-1];MapKey of ReturnValue;value -com.google.common.collect;MapDifference;true;entriesOnlyOnLeft;();;MapValue of SyntheticField[com.google.common.collect.MapDifference.left] of Argument[-1];MapValue of ReturnValue;value -com.google.common.collect;MapDifference;true;entriesOnlyOnRight;();;MapKey of SyntheticField[com.google.common.collect.MapDifference.right] of Argument[-1];MapKey of ReturnValue;value -com.google.common.collect;MapDifference;true;entriesOnlyOnRight;();;MapValue of SyntheticField[com.google.common.collect.MapDifference.right] of Argument[-1];MapValue of ReturnValue;value -com.google.common.collect;MapDifference$ValueDifference;true;leftValue;();;SyntheticField[com.google.common.collect.MapDifference.left] of Argument[-1];ReturnValue;value -com.google.common.collect;MapDifference$ValueDifference;true;rightValue;();;SyntheticField[com.google.common.collect.MapDifference.right] of Argument[-1];ReturnValue;value -com.google.common.collect;Queues;false;drain;(BlockingQueue,Collection,int,long,TimeUnit);;Element of Argument[0];Element of Argument[1];value -com.google.common.collect;Queues;false;drain;(BlockingQueue,Collection,int,Duration);;Element of Argument[0];Element of Argument[1];value -com.google.common.collect;Queues;false;newArrayDeque;(Iterable);;Element of Argument[0];Element of ReturnValue;value -com.google.common.collect;Queues;false;newConcurrentLinkedQueue;(Iterable);;Element of Argument[0];Element of ReturnValue;value -com.google.common.collect;Queues;false;newLinkedBlockingDeque;(Iterable);;Element of Argument[0];Element of ReturnValue;value -com.google.common.collect;Queues;false;newLinkedBlockingQueue;(Iterable);;Element of Argument[0];Element of ReturnValue;value -com.google.common.collect;Queues;false;newPriorityBlockingQueue;(Iterable);;Element of Argument[0];Element of ReturnValue;value -com.google.common.collect;Queues;false;newPriorityQueue;(Iterable);;Element of Argument[0];Element of ReturnValue;value -com.google.common.collect;Queues;false;synchronizedQueue;(Queue);;Element of Argument[0];Element of ReturnValue;value -com.google.common.collect;Queues;false;synchronizedDeque;(Deque);;Element of Argument[0];Element of ReturnValue;value -com.google.common.collect;Sets$SetView;true;immutableCopy;();;Element of Argument[-1];Element of ReturnValue;value -com.google.common.collect;Sets$SetView;true;copyInto;(Set);;Element of Argument[-1];Element of Argument[0];value -com.google.common.collect;Sets;false;cartesianProduct;(List);;Element of Element of Argument[0];Element of Element of ReturnValue;value -com.google.common.collect;Sets;false;cartesianProduct;(Set[]);;Element of ArrayElement of Argument[0];Element of Element of ReturnValue;value -com.google.common.collect;Sets;false;combinations;(Set,int);;Element of Argument[0];Element of Element of ReturnValue;value -com.google.common.collect;Sets;false;difference;(Set,Set);;Element of Argument[0];Element of ReturnValue;value -com.google.common.collect;Sets;false;filter;(NavigableSet,Predicate);;Element of Argument[0];Element of ReturnValue;value -com.google.common.collect;Sets;false;filter;(Set,Predicate);;Element of Argument[0];Element of ReturnValue;value -com.google.common.collect;Sets;false;filter;(SortedSet,Predicate);;Element of Argument[0];Element of ReturnValue;value -com.google.common.collect;Sets;false;newConcurrentHashSet;(Iterable);;Element of Argument[0];Element of ReturnValue;value -com.google.common.collect;Sets;false;newCopyOnWriteArraySet;(Iterable);;Element of Argument[0];Element of ReturnValue;value -com.google.common.collect;Sets;false;newConcurrentHashSet;(Iterable);;Element of Argument[0];Element of ReturnValue;value -com.google.common.collect;Sets;false;newHashSet;(Iterable);;Element of Argument[0];Element of ReturnValue;value -com.google.common.collect;Sets;false;newHashSet;(Iterator);;Element of Argument[0];Element of ReturnValue;value -com.google.common.collect;Sets;false;newHashSet;(Object[]);;ArrayElement of Argument[0];Element of ReturnValue;value -com.google.common.collect;Sets;false;newLinkedHashSet;(Iterable);;Element of Argument[0];Element of ReturnValue;value -com.google.common.collect;Sets;false;newTreeSet;(Iterable);;Element of Argument[0];Element of ReturnValue;value -com.google.common.collect;Sets;false;newSetFromMap;(Map);;MapKey of Argument[0];Element of ReturnValue;value -com.google.common.collect;Sets;false;powerSet;(Set);;Element of Argument[0];Element of Element of ReturnValue;value -com.google.common.collect;Sets;false;subSet;(NavigableSet,Range);;Element of Argument[0];Element of ReturnValue;value -com.google.common.collect;Sets;false;symmetricDifference;(Set,Set);;Element of Argument[0..1];Element of ReturnValue;value -com.google.common.collect;Sets;false;union;(Set,Set);;Element of Argument[0..1];Element of ReturnValue;value -com.google.common.collect;Sets;false;synchronizedNavigableSet;(NavigableSet);;Element of Argument[0];Element of ReturnValue;value -com.google.common.collect;Sets;false;unmodifiableNavigableSet;(NavigableSet);;Element of Argument[0];Element of ReturnValue;value -com.google.common.collect;Multisets;false;copyHighestCountFirst;(Multiset);;Element of Argument[0];Element of ReturnValue;value -com.google.common.collect;Multisets;false;difference;(Multiset,Multiset);;Element of Argument[0];Element of ReturnValue;value -com.google.common.collect;Multisets;false;filter;(Multiset,Predicate);;Element of Argument[0];Element of ReturnValue;value -com.google.common.collect;Multisets;false;immutableEntry;(Object,int);;Argument[0];Element of ReturnValue;value -com.google.common.collect;Multisets;false;sum;(Multiset,Multiset);;Element of Argument[0..1];Element of ReturnValue;value -com.google.common.collect;Multisets;false;union;(Multiset,Multiset);;Element of Argument[0..1];Element of ReturnValue;value -com.google.common.collect;Multisets;false;unmodifiableMultiset;(Multiset);;Element of Argument[0];Element of ReturnValue;value -com.google.common.collect;Multisets;false;unmodifiableMultiset;(ImmutableMultiset);;Element of Argument[0];Element of ReturnValue;value -com.google.common.collect;Multisets;false;unmodifiableSortedMultiset;(SortedMultiset);;Element of Argument[0];Element of ReturnValue;value -com.google.common.collect;Multimaps;false;asMap;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value -com.google.common.collect;Multimaps;false;asMap;(Multimap);;MapValue of Argument[0];Element of MapValue of ReturnValue;value -com.google.common.collect;Multimaps;false;asMap;(ListMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value -com.google.common.collect;Multimaps;false;asMap;(ListMultimap);;MapValue of Argument[0];Element of MapValue of ReturnValue;value -com.google.common.collect;Multimaps;false;asMap;(SetMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value -com.google.common.collect;Multimaps;false;asMap;(SetMultimap);;MapValue of Argument[0];Element of MapValue of ReturnValue;value -com.google.common.collect;Multimaps;false;asMap;(SortedSetMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value -com.google.common.collect;Multimaps;false;asMap;(SortedSetMultimap);;MapValue of Argument[0];Element of MapValue of ReturnValue;value -com.google.common.collect;Multimaps;false;filterEntries;(Multimap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value -com.google.common.collect;Multimaps;false;filterEntries;(Multimap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value -com.google.common.collect;Multimaps;false;filterEntries;(SetMultimap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value -com.google.common.collect;Multimaps;false;filterEntries;(SetMultimap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value -com.google.common.collect;Multimaps;false;filterKeys;(Multimap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value -com.google.common.collect;Multimaps;false;filterKeys;(Multimap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value -com.google.common.collect;Multimaps;false;filterKeys;(SetMultimap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value -com.google.common.collect;Multimaps;false;filterKeys;(SetMultimap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value -com.google.common.collect;Multimaps;false;filterValues;(Multimap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value -com.google.common.collect;Multimaps;false;filterValues;(Multimap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value -com.google.common.collect;Multimaps;false;filterValues;(SetMultimap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value -com.google.common.collect;Multimaps;false;filterValues;(SetMultimap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value -com.google.common.collect;Multimaps;false;forMap;(Map);;MapKey of Argument[0];MapKey of ReturnValue;value -com.google.common.collect;Multimaps;false;forMap;(Map);;MapValue of Argument[0];MapValue of ReturnValue;value -com.google.common.collect;Multimaps;false;index;(Iterable,Function);;Element of Argument[0];MapValue of ReturnValue;value -com.google.common.collect;Multimaps;false;index;(Iterator,Function);;Element of Argument[0];MapValue of ReturnValue;value -com.google.common.collect;Multimaps;false;invertFrom;(Multimap,Multimap);;MapKey of Argument[0];MapValue of ReturnValue;value -com.google.common.collect;Multimaps;false;invertFrom;(Multimap,Multimap);;MapValue of Argument[0];MapKey of ReturnValue;value -com.google.common.collect;Multimaps;false;newMultimap;(Map,Supplier);;MapKey of Argument[0];MapKey of ReturnValue;value -com.google.common.collect;Multimaps;false;newMultimap;(Map,Supplier);;Element of MapValue of Argument[0];MapValue of ReturnValue;value -com.google.common.collect;Multimaps;false;newListMultimap;(Map,Supplier);;MapKey of Argument[0];MapKey of ReturnValue;value -com.google.common.collect;Multimaps;false;newListMultimap;(Map,Supplier);;Element of MapValue of Argument[0];MapValue of ReturnValue;value -com.google.common.collect;Multimaps;false;newSetMultimap;(Map,Supplier);;MapKey of Argument[0];MapKey of ReturnValue;value -com.google.common.collect;Multimaps;false;newSetMultimap;(Map,Supplier);;Element of MapValue of Argument[0];MapValue of ReturnValue;value -com.google.common.collect;Multimaps;false;newSortedSetMultimap;(Map,Supplier);;MapKey of Argument[0];MapKey of ReturnValue;value -com.google.common.collect;Multimaps;false;newSortedSetMultimap;(Map,Supplier);;Element of MapValue of Argument[0];MapValue of ReturnValue;value -com.google.common.collect;Multimaps;false;transformValues;(Multimap,Function);;MapKey of Argument[0];MapKey of ReturnValue;value -com.google.common.collect;Multimaps;false;transformValues;(ListMultimap,Function);;MapKey of Argument[0];MapKey of ReturnValue;value -com.google.common.collect;Multimaps;false;synchronizedMultimap;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value -com.google.common.collect;Multimaps;false;synchronizedMultimap;(Multimap);;MapValue of Argument[0];MapValue of ReturnValue;value -com.google.common.collect;Multimaps;false;synchronizedListMultimap;(ListMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value -com.google.common.collect;Multimaps;false;synchronizedListMultimap;(ListMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value -com.google.common.collect;Multimaps;false;synchronizedSetMultimap;(SetMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value -com.google.common.collect;Multimaps;false;synchronizedSetMultimap;(SetMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value -com.google.common.collect;Multimaps;false;synchronizedSortedSetMultimap;(SortedSetMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value -com.google.common.collect;Multimaps;false;synchronizedSortedSetMultimap;(SortedSetMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value -com.google.common.collect;Multimaps;false;unmodifiableMultimap;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value -com.google.common.collect;Multimaps;false;unmodifiableMultimap;(Multimap);;MapValue of Argument[0];MapValue of ReturnValue;value -com.google.common.collect;Multimaps;false;unmodifiableMultimap;(ImmutableMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value -com.google.common.collect;Multimaps;false;unmodifiableMultimap;(ImmutableMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value -com.google.common.collect;Multimaps;false;unmodifiableListMultimap;(ListMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value -com.google.common.collect;Multimaps;false;unmodifiableListMultimap;(ListMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value -com.google.common.collect;Multimaps;false;unmodifiableListMultimap;(ImmutableListMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value -com.google.common.collect;Multimaps;false;unmodifiableListMultimap;(ImmutableListMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value -com.google.common.collect;Multimaps;false;unmodifiableSetMultimap;(SetMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value -com.google.common.collect;Multimaps;false;unmodifiableSetMultimap;(SetMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value -com.google.common.collect;Multimaps;false;unmodifiableSetMultimap;(ImmutableSetMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value -com.google.common.collect;Multimaps;false;unmodifiableSetMultimap;(ImmutableSetMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value -com.google.common.collect;Multimaps;false;unmodifiableSortedSetMultimap;(SortedSetMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value -com.google.common.collect;Multimaps;false;unmodifiableSortedSetMultimap;(SortedSetMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value -com.google.common.collect;Tables;false;immutableCell;(Object,Object,Object);;Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value -com.google.common.collect;Tables;false;immutableCell;(Object,Object,Object);;Argument[1];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value -com.google.common.collect;Tables;false;immutableCell;(Object,Object,Object);;Argument[2];MapValue of ReturnValue;value -com.google.common.collect;Tables;false;newCustomTable;(Map,Supplier);;MapKey of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value -com.google.common.collect;Tables;false;newCustomTable;(Map,Supplier);;MapKey of MapValue of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value -com.google.common.collect;Tables;false;newCustomTable;(Map,Supplier);;MapValue of MapValue of Argument[0];MapValue of ReturnValue;value -com.google.common.collect;Tables;false;transpose;(Table);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value -com.google.common.collect;Tables;false;transpose;(Table);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value -com.google.common.collect;Tables;false;transpose;(Table);;MapValue of Argument[0];MapValue of ReturnValue;value -com.google.common.collect;Tables;false;transformValues;(Table,Function);;MapKey of Argument[0];MapKey of ReturnValue;value -com.google.common.collect;Tables;false;transformValues;(Table,Function);;MapKey of Argument[0];MapKey of ReturnValue;value -com.google.common.collect;Tables;false;synchronizedTable;(Table);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value -com.google.common.collect;Tables;false;synchronizedTable;(Table);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value -com.google.common.collect;Tables;false;synchronizedTable;(Table);;MapValue of Argument[0];MapValue of ReturnValue;value -com.google.common.collect;Tables;false;unmodifiableTable;(Table);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value -com.google.common.collect;Tables;false;unmodifiableTable;(Table);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value -com.google.common.collect;Tables;false;unmodifiableTable;(Table);;MapValue of Argument[0];MapValue of ReturnValue;value -com.google.common.collect;Tables;false;unmodifiableRowSortedTable;(RowSortedTable);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value -com.google.common.collect;Tables;false;unmodifiableRowSortedTable;(RowSortedTable);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value -com.google.common.collect;Tables;false;unmodifiableRowSortedTable;(RowSortedTable);;MapValue of Argument[0];MapValue of ReturnValue;value -com.google.common.collect;ObjectArrays;false;concat;(Object,Object[]);;Argument[0];ArrayElement of ReturnValue;value -com.google.common.collect;ObjectArrays;false;concat;(Object,Object[]);;ArrayElement of Argument[1];ArrayElement of ReturnValue;value -com.google.common.collect;ObjectArrays;false;concat;(Object[],Object);;ArrayElement of Argument[0];ArrayElement of ReturnValue;value -com.google.common.collect;ObjectArrays;false;concat;(Object[],Object);;Argument[1];ArrayElement of ReturnValue;value -com.google.common.collect;ObjectArrays;false;concat;(Object[],Object[],Class);;ArrayElement of Argument[0..1];ArrayElement of ReturnValue;value \ No newline at end of file From a89bd32eb0a58ec01a998d1240a210f79c9740bc Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Thu, 12 Aug 2021 14:16:09 +0100 Subject: [PATCH 492/741] Factor out content manipulating methods from tests to a separate file --- .../guava/generated/collect/Methods.java | 132 ++++++++++++++++++ .../guava/generated/collect/Test.java | 42 +----- .../guava/generated/collect/test.ql | 14 +- 3 files changed, 140 insertions(+), 48 deletions(-) create mode 100644 java/ql/test/library-tests/frameworks/guava/generated/collect/Methods.java diff --git a/java/ql/test/library-tests/frameworks/guava/generated/collect/Methods.java b/java/ql/test/library-tests/frameworks/guava/generated/collect/Methods.java new file mode 100644 index 00000000000..22e05943176 --- /dev/null +++ b/java/ql/test/library-tests/frameworks/guava/generated/collect/Methods.java @@ -0,0 +1,132 @@ +package generatedtest; + +import com.google.common.base.Function; +import com.google.common.base.Optional; +import com.google.common.base.Predicate; +import com.google.common.collect.ArrayListMultimap; +import com.google.common.collect.ArrayTable; +import com.google.common.collect.BiMap; +import com.google.common.collect.ClassToInstanceMap; +import com.google.common.collect.Collections2; +import com.google.common.collect.ConcurrentHashMultiset; +import com.google.common.collect.HashBasedTable; +import com.google.common.collect.HashBiMap; +import com.google.common.collect.HashMultimap; +import com.google.common.collect.HashMultiset; +import com.google.common.collect.ImmutableClassToInstanceMap; +import com.google.common.collect.ImmutableCollection; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableListMultimap; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableMultimap; +import com.google.common.collect.ImmutableMultiset; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.ImmutableSetMultimap; +import com.google.common.collect.ImmutableSortedMap; +import com.google.common.collect.ImmutableSortedMultiset; +import com.google.common.collect.ImmutableSortedSet; +import com.google.common.collect.ImmutableTable; +import com.google.common.collect.Iterables; +import com.google.common.collect.Iterators; +import com.google.common.collect.LinkedHashMultimap; +import com.google.common.collect.LinkedHashMultiset; +import com.google.common.collect.LinkedListMultimap; +import com.google.common.collect.ListMultimap; +import com.google.common.collect.Lists; +import com.google.common.collect.MapDifference; +import com.google.common.collect.Maps; +import com.google.common.collect.Multimap; +import com.google.common.collect.Multimaps; +import com.google.common.collect.Multiset; +import com.google.common.collect.Multisets; +import com.google.common.collect.MutableClassToInstanceMap; +import com.google.common.collect.ObjectArrays; +import com.google.common.collect.PeekingIterator; +import com.google.common.collect.Queues; +import com.google.common.collect.RowSortedTable; +import com.google.common.collect.SetMultimap; +import com.google.common.collect.Sets; +import com.google.common.collect.SortedMapDifference; +import com.google.common.collect.SortedMultiset; +import com.google.common.collect.SortedSetMultimap; +import com.google.common.collect.Table; +import com.google.common.collect.Tables; +import com.google.common.collect.TreeBasedTable; +import com.google.common.collect.TreeMultimap; +import com.google.common.collect.TreeMultiset; +import com.google.common.collect.UnmodifiableIterator; +import java.util.ArrayDeque; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Comparator; +import java.util.Deque; +import java.util.Enumeration; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.LinkedHashSet; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.NavigableMap; +import java.util.NavigableSet; +import java.util.PriorityQueue; +import java.util.Properties; +import java.util.Queue; +import java.util.Set; +import java.util.SortedMap; +import java.util.SortedSet; +import java.util.TreeMap; +import java.util.TreeSet; +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.ConcurrentLinkedQueue; +import java.util.concurrent.CopyOnWriteArrayList; +import java.util.concurrent.CopyOnWriteArraySet; +import java.util.concurrent.LinkedBlockingDeque; +import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.PriorityBlockingQueue; + +// Methods for manipulating contents for use in tests +class Methods { + T getArrayElement(T[] container) { return container[0]; } + T getElement(Collection container) { return container.iterator().next(); } + T getElement(ImmutableCollection.Builder container) { return getElement(container.build()); } + T getElement(Iterable container) { return container.iterator().next(); } + T getElement(Iterator container) { return container.next(); } + T getElement(Optional container) { return container.get(); } + T getElement(Enumeration container) { return container.nextElement(); } + T getElement(Multiset.Entry container) { return container.getElement(); } + Map getMapDifference_left(MapDifference container) { return container.entriesOnlyOnLeft(); } + V getMapDifference_left(MapDifference.ValueDifference container) { return container.leftValue(); } + Map getMapDifference_right(MapDifference container) { return container.entriesOnlyOnRight(); } + V getMapDifference_right(MapDifference.ValueDifference container) { return container.rightValue(); } + K getMapKey(Map container) { return getElement(container.keySet()); } + K getMapKey(Multimap container) { return getElement(container.keySet()); } + K getMapKey(Map.Entry container) { return container.getKey(); } + K getMapKey(ImmutableMap.Builder container) { return getMapKey(container.build()); } + K getMapKey(ImmutableMultimap.Builder container) { return getMapKey(container.build()); } + V getMapValue(Map container) { return getElement(container.values()); } + V getMapValue(Multimap container) { return getElement(container.values()); } + V getMapValue(Map.Entry container) { return container.getValue(); } + V getMapValue(ImmutableMap.Builder container) { return getMapValue(container.build()); } + V getMapValue(ImmutableMultimap.Builder container) { return getMapValue(container.build()); } + V getMapValue(Table container) { return getElement(container.values()); } + V getMapValue(Table.Cell container) { return container.getValue(); } + V getMapValue(ImmutableTable.Builder container) { return getMapValue(container.build()); } + C getTable_columnKey(Table container) { return getElement(container.columnKeySet()); } + C getTable_columnKey(Table.Cell container) { return container.getColumnKey(); } + C getTable_columnKey(ImmutableTable.Builder container) { return getTable_columnKey(container.build()); } + R getTable_rowKey(Table container) { return getElement(container.rowKeySet()); } + R getTable_rowKey(Table.Cell container) { return container.getRowKey(); } + R getTable_rowKey(ImmutableTable.Builder container) { return getTable_rowKey(container.build()); } + T[] newWithArrayElement(T element) { return (T[]) new Object[]{element}; } + + Object newWithElement(Object element) { return null; } + Object newWithMapDifference_left(Object element) { return null; } + Object newWithMapDifference_right(Object element) { return null; } + Object newWithMapKey(Object element) { return null; } + Object newWithMapValue(Object element) { return null; } + Object newWithTable_columnKey(Object element) { return null; } + Object newWithTable_rowKey(Object element) { return null; } +} \ No newline at end of file diff --git a/java/ql/test/library-tests/frameworks/guava/generated/collect/Test.java b/java/ql/test/library-tests/frameworks/guava/generated/collect/Test.java index 4fb374b22bb..be78444f584 100644 --- a/java/ql/test/library-tests/frameworks/guava/generated/collect/Test.java +++ b/java/ql/test/library-tests/frameworks/guava/generated/collect/Test.java @@ -88,47 +88,7 @@ import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.PriorityBlockingQueue; // Test case generated by GenerateFlowTestCase.ql -public class Test { - - T getArrayElement(T[] container) { return container[0]; } - T getElement(Collection container) { return container.iterator().next(); } - T getElement(ImmutableCollection.Builder container) { return getElement(container.build()); } - T getElement(Iterable container) { return container.iterator().next(); } - T getElement(Iterator container) { return container.next(); } - T getElement(Optional container) { return container.get(); } - T getElement(Enumeration container) { return container.nextElement(); } - T getElement(Multiset.Entry container) { return container.getElement(); } - Map getMapDifference_left(MapDifference container) { return container.entriesOnlyOnLeft(); } - V getMapDifference_left(MapDifference.ValueDifference container) { return container.leftValue(); } - Map getMapDifference_right(MapDifference container) { return container.entriesOnlyOnRight(); } - V getMapDifference_right(MapDifference.ValueDifference container) { return container.rightValue(); } - K getMapKey(Map container) { return getElement(container.keySet()); } - K getMapKey(Multimap container) { return getElement(container.keySet()); } - K getMapKey(Map.Entry container) { return container.getKey(); } - K getMapKey(ImmutableMap.Builder container) { return getMapKey(container.build()); } - K getMapKey(ImmutableMultimap.Builder container) { return getMapKey(container.build()); } - V getMapValue(Map container) { return getElement(container.values()); } - V getMapValue(Multimap container) { return getElement(container.values()); } - V getMapValue(Map.Entry container) { return container.getValue(); } - V getMapValue(ImmutableMap.Builder container) { return getMapValue(container.build()); } - V getMapValue(ImmutableMultimap.Builder container) { return getMapValue(container.build()); } - V getMapValue(Table container) { return getElement(container.values()); } - V getMapValue(Table.Cell container) { return container.getValue(); } - V getMapValue(ImmutableTable.Builder container) { return getMapValue(container.build()); } - C getTable_columnKey(Table container) { return getElement(container.columnKeySet()); } - C getTable_columnKey(Table.Cell container) { return container.getColumnKey(); } - C getTable_columnKey(ImmutableTable.Builder container) { return getTable_columnKey(container.build()); } - R getTable_rowKey(Table container) { return getElement(container.rowKeySet()); } - R getTable_rowKey(Table.Cell container) { return container.getRowKey(); } - R getTable_rowKey(ImmutableTable.Builder container) { return getTable_rowKey(container.build()); } - T[] newWithArrayElement(T element) { return (T[]) new Object[]{element}; } - Object newWithElement(Object element) { return null; } - Object newWithMapDifference_left(Object element) { return null; } - Object newWithMapDifference_right(Object element) { return null; } - Object newWithMapKey(Object element) { return null; } - Object newWithMapValue(Object element) { return null; } - Object newWithTable_columnKey(Object element) { return null; } - Object newWithTable_rowKey(Object element) { return null; } +public class Test extends Methods { T source() { return null; } void sink(Object o) { } diff --git a/java/ql/test/library-tests/frameworks/guava/generated/collect/test.ql b/java/ql/test/library-tests/frameworks/guava/generated/collect/test.ql index e13fab3b504..bef55ed7c39 100644 --- a/java/ql/test/library-tests/frameworks/guava/generated/collect/test.ql +++ b/java/ql/test/library-tests/frameworks/guava/generated/collect/test.ql @@ -9,13 +9,13 @@ class SummaryModelTest extends SummaryModelCsv { row = [ //"package;type;overrides;name;signature;ext;inputspec;outputspec;kind", - "generatedtest;Test;false;newWithElement;;;Argument[0];Element of ReturnValue;value", - "generatedtest;Test;false;newWithMapKey;;;Argument[0];MapKey of ReturnValue;value", - "generatedtest;Test;false;newWithMapValue;;;Argument[0];MapValue of ReturnValue;value", - "generatedtest;Test;false;newWithTable_rowKey;;;Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value", - "generatedtest;Test;false;newWithTable_columnKey;;;Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value", - "generatedtest;Test;false;newWithMapDifference_left;;;Argument[0];SyntheticField[com.google.common.collect.MapDifference.left] of ReturnValue;value", - "generatedtest;Test;false;newWithMapDifference_right;;;Argument[0];SyntheticField[com.google.common.collect.MapDifference.right] of ReturnValue;value" + "generatedtest;Methods;false;newWithElement;;;Argument[0];Element of ReturnValue;value", + "generatedtest;Methods;false;newWithMapKey;;;Argument[0];MapKey of ReturnValue;value", + "generatedtest;Methods;false;newWithMapValue;;;Argument[0];MapValue of ReturnValue;value", + "generatedtest;Methods;false;newWithTable_rowKey;;;Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value", + "generatedtest;Methods;false;newWithTable_columnKey;;;Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value", + "generatedtest;Methods;false;newWithMapDifference_left;;;Argument[0];SyntheticField[com.google.common.collect.MapDifference.left] of ReturnValue;value", + "generatedtest;Methods;false;newWithMapDifference_right;;;Argument[0];SyntheticField[com.google.common.collect.MapDifference.right] of ReturnValue;value" ] } } From 1eacbd88b81eb118730a7d939fffda5fc4543e25 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Thu, 12 Aug 2021 14:58:36 +0100 Subject: [PATCH 493/741] Fix up some incorrect models; simplify/remove some redundand ones --- .../java/frameworks/guava/Collections.qll | 58 +++++++------------ 1 file changed, 20 insertions(+), 38 deletions(-) diff --git a/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll b/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll index fabcfe9feb9..e2a95326fe8 100644 --- a/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll +++ b/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll @@ -72,7 +72,6 @@ private class GuavaCollectCsv extends SummaryModelCsv { // Misc collections and utilities "com.google.common.collect;ImmutableCollection;true;asList;();;Element of Argument[-1];Element of ReturnValue;value", "com.google.common.collect;ImmutableList;true;reverse;();;Element of Argument[-1];Element of ReturnValue;value", - "com.google.common.collect;ImmutableList;true;subList;(int,int);;Element of Argument[-1];Element of ReturnValue;value", "com.google.common.collect;BiMap;true;forcePut;(Object,Object);;Argument[0];MapKey of Argument[-1];value", "com.google.common.collect;BiMap;true;forcePut;(Object,Object);;Argument[1];MapValue of Argument[-1];value", "com.google.common.collect;BiMap;true;inverse;();;MapKey of Argument[-1];MapValue of ReturnValue;value", @@ -90,6 +89,7 @@ private class GuavaCollectCsv extends SummaryModelCsv { "com.google.common.collect;ImmutableCollection$Builder;true;addAll;(Iterator);;Element of Argument[0];Element of Argument[-1];value", "com.google.common.collect;ImmutableMultiset$Builder;true;addCopies;(Object,int);;Argument[-1];ReturnValue;value", "com.google.common.collect;ImmutableMultiset$Builder;true;addCopies;(Object,int);;Argument[0];Element of Argument[-1];value", + "com.google.common.collect;ImmutableMultiset$Builder;true;setCount;(Object,int);;Argument[0];Element of Argument[-1];value", "com.google.common.collect;ImmutableMap$Builder;true;build;();;MapKey of Argument[-1];MapKey of ReturnValue;value", "com.google.common.collect;ImmutableMap$Builder;true;build;();;MapValue of Argument[-1];MapValue of ReturnValue;value", "com.google.common.collect;ImmutableMap$Builder;true;orderEntriesByValue;(Comparator);;Argument[-1];ReturnValue;value", @@ -117,9 +117,8 @@ private class GuavaCollectCsv extends SummaryModelCsv { "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Iterable);;MapValue of Element of Argument[0];MapValue of Argument[-1];value", "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Multimap);;MapKey of Argument[0];MapKey of Argument[-1];value", "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Multimap);;MapValue of Argument[0];MapValue of Argument[-1];value", - "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value", + "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;;;Argument[0];MapKey of Argument[-1];value", "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value", - "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value", "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Object,Object[]);;ArrayElement of Argument[1];MapValue of Argument[-1];value", "com.google.common.collect;ImmutableTable$Builder;true;build;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value", "com.google.common.collect;ImmutableTable$Builder;true;build;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value", @@ -264,9 +263,9 @@ private class GuavaCollectCsv extends SummaryModelCsv { "com.google.common.collect;ArrayTable;true;create;(Iterable,Iterable);;Element of Argument[1];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value", // Utility classes (a few methods depending on lambda flow are not included) "com.google.common.collect;Collections2;false;filter;(Collection,Predicate);;Element of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;Collections2;false;orderedPermutations;(Iterable,Comparator);;Element of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;Collections2;false;orderedPermutations;(Iterable);;Element of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;Collections2;false;permutations;(Collection);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Collections2;false;orderedPermutations;(Iterable,Comparator);;Element of Argument[0];Element of Element of ReturnValue;value", + "com.google.common.collect;Collections2;false;orderedPermutations;(Iterable);;Element of Argument[0];Element of Element of ReturnValue;value", + "com.google.common.collect;Collections2;false;permutations;(Collection);;Element of Argument[0];Element of Element of ReturnValue;value", "com.google.common.collect;Iterators;false;addAll;(Collection,Iterator);;Element of Argument[1];Element of Argument[0];value", "com.google.common.collect;Iterators;false;asEnumeration;(Iterator);;Element of Argument[0];Element of ReturnValue;value", "com.google.common.collect;Iterators;false;concat;(Iterator);;Element of Element of Argument[0];Element of ReturnValue;value", @@ -297,14 +296,14 @@ private class GuavaCollectCsv extends SummaryModelCsv { "com.google.common.collect;Iterators;false;getOnlyElement;(Iterator,Object);;Argument[1];ReturnValue;value", "com.google.common.collect;Iterators;false;limit;(Iterator,int);;Element of Argument[0];Element of ReturnValue;value", "com.google.common.collect;Iterators;false;mergeSorted;(Iterable,Comparator);;Element of Element of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;Iterators;false;partition;(Iterator,int);;Element of Element of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;Iterators;false;paddedPartition;(Iterator,int);;Element of Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Iterators;false;partition;(Iterator,int);;Element of Argument[0];Element of Element of ReturnValue;value", + "com.google.common.collect;Iterators;false;paddedPartition;(Iterator,int);;Element of Argument[0];Element of Element of ReturnValue;value", "com.google.common.collect;Iterators;false;peekingIterator;(Iterator);;Element of Argument[0];Element of ReturnValue;value", "com.google.common.collect;Iterators;false;peekingIterator;(PeekingIterator);;Element of Argument[0];Element of ReturnValue;value", "com.google.common.collect;Iterators;false;singletonIterator;(Object);;Argument[0];Element of ReturnValue;value", "com.google.common.collect;Iterators;false;toArray;(Iterator,Class);;Element of Argument[0];ArrayElement of ReturnValue;value", "com.google.common.collect;Iterators;false;tryFind;(Iterator,Predicate);;Element of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;Iterators;false;toString;(Iterator);;Element of Argument[0];ReturnValue;taint", + // "com.google.common.collect;Iterators;false;toString;(Iterator);;Element of Argument[0];ReturnValue;taint", "com.google.common.collect;Iterators;false;unmodifiableIterator;(Iterator);;Element of Argument[0];Element of ReturnValue;value", "com.google.common.collect;Iterators;false;unmodifiableIterator;(UnmodifiableIterator);;Element of Argument[0];Element of ReturnValue;value", "com.google.common.collect;Iterables;false;addAll;(Collection,Iterable);;Element of Argument[1];Element of Argument[0];value", @@ -332,8 +331,8 @@ private class GuavaCollectCsv extends SummaryModelCsv { "com.google.common.collect;Iterables;false;getOnlyElement;(Iterable,Object);;Argument[1];ReturnValue;value", "com.google.common.collect;Iterables;false;limit;(Iterable,int);;Element of Argument[0];Element of ReturnValue;value", "com.google.common.collect;Iterables;false;mergeSorted;(Iterable,Comparator);;Element of Element of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;Iterables;false;partition;(Iterable,int);;Element of Element of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;Iterables;false;paddedPartition;(Iterable,int);;Element of Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Iterables;false;partition;(Iterable,int);;Element of Argument[0];Element of Element of ReturnValue;value", + "com.google.common.collect;Iterables;false;paddedPartition;(Iterable,int);;Element of Argument[0];Element of Element of ReturnValue;value", "com.google.common.collect;Iterables;false;skip;(Iterable,int);;Element of Argument[0];Element of ReturnValue;value", "com.google.common.collect;Iterables;false;toArray;(Iterable,Class);;Element of Argument[0];ArrayElement of ReturnValue;value", "com.google.common.collect;Iterables;false;tryFind;(Iterable,Predicate);;Element of Argument[0];Element of ReturnValue;value", @@ -370,34 +369,15 @@ private class GuavaCollectCsv extends SummaryModelCsv { "com.google.common.collect;Maps;false;difference;(SortedMap,Map);;MapValue of Argument[0];MapValue of SyntheticField[com.google.common.collect.MapDifference.left] of ReturnValue;value", "com.google.common.collect;Maps;false;difference;(SortedMap,Map);;MapKey of Argument[1];MapKey of SyntheticField[com.google.common.collect.MapDifference.right] of ReturnValue;value", "com.google.common.collect;Maps;false;difference;(SortedMap,Map);;MapValue of Argument[1];MapValue of SyntheticField[com.google.common.collect.MapDifference.right] of ReturnValue;value", - "com.google.common.collect;Maps;false;filterEntries;(Map,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value", - "com.google.common.collect;Maps;false;filterEntries;(Map,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value", - "com.google.common.collect;Maps;false;filterEntries;(BiMap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value", - "com.google.common.collect;Maps;false;filterEntries;(BiMap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value", - "com.google.common.collect;Maps;false;filterEntries;(NavigableMap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value", - "com.google.common.collect;Maps;false;filterEntries;(NavigableMap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value", - "com.google.common.collect;Maps;false;filterEntries;(SortedMap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value", - "com.google.common.collect;Maps;false;filterEntries;(SortedMap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value", - "com.google.common.collect;Maps;false;filterKeys;(Map,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value", - "com.google.common.collect;Maps;false;filterKeys;(Map,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value", - "com.google.common.collect;Maps;false;filterKeys;(BiMap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value", - "com.google.common.collect;Maps;false;filterKeys;(BiMap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value", - "com.google.common.collect;Maps;false;filterKeys;(NavigableMap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value", - "com.google.common.collect;Maps;false;filterKeys;(NavigableMap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value", - "com.google.common.collect;Maps;false;filterKeys;(SortedMap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value", - "com.google.common.collect;Maps;false;filterKeys;(SortedMap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value", - "com.google.common.collect;Maps;false;filterValues;(Map,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value", - "com.google.common.collect;Maps;false;filterValues;(Map,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value", - "com.google.common.collect;Maps;false;filterValues;(BiMap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value", - "com.google.common.collect;Maps;false;filterValues;(BiMap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value", - "com.google.common.collect;Maps;false;filterValues;(NavigableMap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value", - "com.google.common.collect;Maps;false;filterValues;(NavigableMap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value", - "com.google.common.collect;Maps;false;filterValues;(SortedMap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value", - "com.google.common.collect;Maps;false;filterValues;(SortedMap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;Maps;false;filterEntries;;;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;Maps;false;filterKeys;;;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;Maps;false;filterValues;;;MapKey of Argument[0];MapKey of ReturnValue;value", "com.google.common.collect;Maps;false;fromProperties;(Properties);;MapKey of Argument[0];MapKey of ReturnValue;value", "com.google.common.collect;Maps;false;fromProperties;(Properties);;MapValue of Argument[0];MapValue of ReturnValue;value", "com.google.common.collect;Maps;false;immutableEntry;(Object,Object);;Argument[0];MapKey of ReturnValue;value", "com.google.common.collect;Maps;false;immutableEntry;(Object,Object);;Argument[1];MapValue of ReturnValue;value", + "com.google.common.collect;Maps;false;immutableEnumMap;(Map);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;Maps;false;newEnumMap;(Map);;MapValue of Argument[0];MapValue of ReturnValue;value", "com.google.common.collect;Maps;false;newHashMap;(Map);;MapKey of Argument[0];MapKey of ReturnValue;value", "com.google.common.collect;Maps;false;newHashMap;(Map);;MapValue of Argument[0];MapValue of ReturnValue;value", "com.google.common.collect;Maps;false;newLinkedHashMap;(Map);;MapKey of Argument[0];MapKey of ReturnValue;value", @@ -454,6 +434,7 @@ private class GuavaCollectCsv extends SummaryModelCsv { "com.google.common.collect;Sets;false;filter;(NavigableSet,Predicate);;Element of Argument[0];Element of ReturnValue;value", "com.google.common.collect;Sets;false;filter;(Set,Predicate);;Element of Argument[0];Element of ReturnValue;value", "com.google.common.collect;Sets;false;filter;(SortedSet,Predicate);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Sets;false;intersection;(Set,Set);;Element of Argument[0..1];Element of ReturnValue;value", "com.google.common.collect;Sets;false;newConcurrentHashSet;(Iterable);;Element of Argument[0];Element of ReturnValue;value", "com.google.common.collect;Sets;false;newCopyOnWriteArraySet;(Iterable);;Element of Argument[0];Element of ReturnValue;value", "com.google.common.collect;Sets;false;newConcurrentHashSet;(Iterable);;Element of Argument[0];Element of ReturnValue;value", @@ -473,6 +454,7 @@ private class GuavaCollectCsv extends SummaryModelCsv { "com.google.common.collect;Multisets;false;difference;(Multiset,Multiset);;Element of Argument[0];Element of ReturnValue;value", "com.google.common.collect;Multisets;false;filter;(Multiset,Predicate);;Element of Argument[0];Element of ReturnValue;value", "com.google.common.collect;Multisets;false;immutableEntry;(Object,int);;Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Mulisets;false;intersection;(Muliset,Muliset);;Element of Argument[0..1];Element of ReturnValue;value", "com.google.common.collect;Multisets;false;sum;(Multiset,Multiset);;Element of Argument[0..1];Element of ReturnValue;value", "com.google.common.collect;Multisets;false;union;(Multiset,Multiset);;Element of Argument[0..1];Element of ReturnValue;value", "com.google.common.collect;Multisets;false;unmodifiableMultiset;(Multiset);;Element of Argument[0];Element of ReturnValue;value", @@ -502,8 +484,9 @@ private class GuavaCollectCsv extends SummaryModelCsv { "com.google.common.collect;Multimaps;false;forMap;(Map);;MapValue of Argument[0];MapValue of ReturnValue;value", "com.google.common.collect;Multimaps;false;index;(Iterable,Function);;Element of Argument[0];MapValue of ReturnValue;value", "com.google.common.collect;Multimaps;false;index;(Iterator,Function);;Element of Argument[0];MapValue of ReturnValue;value", - "com.google.common.collect;Multimaps;false;invertFrom;(Multimap,Multimap);;MapKey of Argument[0];MapValue of ReturnValue;value", - "com.google.common.collect;Multimaps;false;invertFrom;(Multimap,Multimap);;MapValue of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;Multimaps;false;invertFrom;(Multimap,Multimap);;MapKey of Argument[0];MapValue of Argument[1];value", + "com.google.common.collect;Multimaps;false;invertFrom;(Multimap,Multimap);;MapValue of Argument[0];MapKey of Argument[1];value", + "com.google.common.collect;Multimaps;false;invertFrom;(Multimap,Multimap);;Argument[1];ReturnValue;value", "com.google.common.collect;Multimaps;false;newMultimap;(Map,Supplier);;MapKey of Argument[0];MapKey of ReturnValue;value", "com.google.common.collect;Multimaps;false;newMultimap;(Map,Supplier);;Element of MapValue of Argument[0];MapValue of ReturnValue;value", "com.google.common.collect;Multimaps;false;newListMultimap;(Map,Supplier);;MapKey of Argument[0];MapKey of ReturnValue;value", @@ -547,7 +530,6 @@ private class GuavaCollectCsv extends SummaryModelCsv { "com.google.common.collect;Tables;false;transpose;(Table);;MapValue of Argument[0];MapValue of ReturnValue;value", "com.google.common.collect;Tables;false;transformValues;(Table,Function);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value", "com.google.common.collect;Tables;false;transformValues;(Table,Function);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value", - "com.google.common.collect;Tables;false;transformValues;(Table,Function);;MapValue of Argument[0];MapValue of ReturnValue;value", "com.google.common.collect;Tables;false;synchronizedTable;(Table);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value", "com.google.common.collect;Tables;false;synchronizedTable;(Table);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value", "com.google.common.collect;Tables;false;synchronizedTable;(Table);;MapValue of Argument[0];MapValue of ReturnValue;value", From eb45e67784c42372dcdeef161fb153a2bed172ac Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Tue, 14 Sep 2021 11:00:12 +0100 Subject: [PATCH 494/741] Generate tests for modified models --- .../java/frameworks/guava/Collections.qll | 2 +- .../guava/generated/collect/Test.java | 2036 +++++++++-------- .../guava/generated/collect/test.ql | 23 +- 3 files changed, 1054 insertions(+), 1007 deletions(-) diff --git a/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll b/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll index e2a95326fe8..a223a99e886 100644 --- a/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll +++ b/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll @@ -454,7 +454,7 @@ private class GuavaCollectCsv extends SummaryModelCsv { "com.google.common.collect;Multisets;false;difference;(Multiset,Multiset);;Element of Argument[0];Element of ReturnValue;value", "com.google.common.collect;Multisets;false;filter;(Multiset,Predicate);;Element of Argument[0];Element of ReturnValue;value", "com.google.common.collect;Multisets;false;immutableEntry;(Object,int);;Argument[0];Element of ReturnValue;value", - "com.google.common.collect;Mulisets;false;intersection;(Muliset,Muliset);;Element of Argument[0..1];Element of ReturnValue;value", + "com.google.common.collect;Multisets;false;intersection;(Multiset,Multiset);;Element of Argument[0..1];Element of ReturnValue;value", "com.google.common.collect;Multisets;false;sum;(Multiset,Multiset);;Element of Argument[0..1];Element of ReturnValue;value", "com.google.common.collect;Multisets;false;union;(Multiset,Multiset);;Element of Argument[0..1];Element of ReturnValue;value", "com.google.common.collect;Multisets;false;unmodifiableMultiset;(Multiset);;Element of Argument[0];Element of ReturnValue;value", diff --git a/java/ql/test/library-tests/frameworks/guava/generated/collect/Test.java b/java/ql/test/library-tests/frameworks/guava/generated/collect/Test.java index be78444f584..6e0a4d1aab2 100644 --- a/java/ql/test/library-tests/frameworks/guava/generated/collect/Test.java +++ b/java/ql/test/library-tests/frameworks/guava/generated/collect/Test.java @@ -60,6 +60,7 @@ import java.util.ArrayList; import java.util.Collection; import java.util.Comparator; import java.util.Deque; +import java.util.EnumMap; import java.util.Enumeration; import java.util.HashMap; import java.util.HashSet; @@ -88,8 +89,28 @@ import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.PriorityBlockingQueue; // Test case generated by GenerateFlowTestCase.ql -public class Test extends Methods { - T source() { return null; } +public class Test { + + K getMapKey(Map map) { return map.keySet().iterator().next(); } + T getArrayElement(T[] array) { return array[0]; } + T getElement(Iterable it) { return it.iterator().next(); } + T getElement(Iterator it) { return it.next(); } + V getMapValue(Map map) { return map.get(null); } + Object getElement(Object container) { return null; } + Object getMapDifference_left(Object container) { return null; } + Object getMapDifference_right(Object container) { return null; } + Object getMapKey(Object container) { return null; } + Object getMapValue(Object container) { return null; } + Object getTable_columnKey(Object container) { return null; } + Object getTable_rowKey(Object container) { return null; } + Object newWithElement(Object element) { return null; } + Object newWithMapDifference_left(Object element) { return null; } + Object newWithMapDifference_right(Object element) { return null; } + Object newWithMapKey(Object element) { return null; } + Object newWithMapValue(Object element) { return null; } + Object newWithTable_columnKey(Object element) { return null; } + Object newWithTable_rowKey(Object element) { return null; } + Object source() { return null; } void sink(Object o) { } public void test() throws Exception { @@ -125,28 +146,28 @@ public class Test extends Methods { { // "com.google.common.collect;BiMap;true;forcePut;(Object,Object);;Argument[0];MapKey of Argument[-1];value" HashBiMap out = null; - Object in = source(); + Object in = (Object)source(); out.forcePut(in, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;BiMap;true;forcePut;(Object,Object);;Argument[0];MapKey of Argument[-1];value" BiMap out = null; - Object in = source(); + Object in = (Object)source(); out.forcePut(in, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;BiMap;true;forcePut;(Object,Object);;Argument[1];MapValue of Argument[-1];value" HashBiMap out = null; - Object in = source(); + Object in = (Object)source(); out.forcePut(null, in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;BiMap;true;forcePut;(Object,Object);;Argument[1];MapValue of Argument[-1];value" BiMap out = null; - Object in = source(); + Object in = (Object)source(); out.forcePut(null, in); sink(getMapValue(out)); // $ hasValueFlow } @@ -202,21 +223,21 @@ public class Test extends Methods { { // "com.google.common.collect;ClassToInstanceMap;true;putInstance;(Class,Object);;Argument[1];MapValue of Argument[-1];value" MutableClassToInstanceMap out = null; - Object in = source(); + Object in = (Object)source(); out.putInstance(null, in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ClassToInstanceMap;true;putInstance;(Class,Object);;Argument[1];MapValue of Argument[-1];value" ImmutableClassToInstanceMap out = null; - Object in = source(); + Object in = (Object)source(); out.putInstance(null, in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ClassToInstanceMap;true;putInstance;(Class,Object);;Argument[1];MapValue of Argument[-1];value" ClassToInstanceMap out = null; - Object in = source(); + Object in = (Object)source(); out.putInstance(null, in); sink(getMapValue(out)); // $ hasValueFlow } @@ -249,25 +270,25 @@ public class Test extends Methods { sink(getElement(out)); // $ hasValueFlow } { - // "com.google.common.collect;Collections2;false;orderedPermutations;(Iterable);;Element of Argument[0];Element of ReturnValue;value" + // "com.google.common.collect;Collections2;false;orderedPermutations;(Iterable);;Element of Argument[0];Element of Element of ReturnValue;value" Collection out = null; - Iterable in = (Iterable)newWithElement(source()); + Iterable in = (Iterable)List.of(source()); out = Collections2.orderedPermutations(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement(getElement(out))); // $ hasValueFlow } { - // "com.google.common.collect;Collections2;false;orderedPermutations;(Iterable,Comparator);;Element of Argument[0];Element of ReturnValue;value" + // "com.google.common.collect;Collections2;false;orderedPermutations;(Iterable,Comparator);;Element of Argument[0];Element of Element of ReturnValue;value" Collection out = null; - Iterable in = (Iterable)newWithElement(source()); + Iterable in = (Iterable)List.of(source()); out = Collections2.orderedPermutations(in, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElement(getElement(out))); // $ hasValueFlow } { - // "com.google.common.collect;Collections2;false;permutations;(Collection);;Element of Argument[0];Element of ReturnValue;value" + // "com.google.common.collect;Collections2;false;permutations;(Collection);;Element of Argument[0];Element of Element of ReturnValue;value" Collection out = null; - Collection in = (Collection)newWithElement(source()); + Collection in = (Collection)List.of(source()); out = Collections2.permutations(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;ConcurrentHashMultiset;true;create;(Iterable);;Element of Argument[0];Element of ReturnValue;value" @@ -300,14 +321,14 @@ public class Test extends Methods { { // "com.google.common.collect;HashBiMap;true;create;(Map);;MapKey of Argument[0];MapKey of ReturnValue;value" HashBiMap out = null; - Map in = (Map)newWithMapKey(source()); + Map in = (Map)Map.of(source(), null); out = HashBiMap.create(in); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;HashBiMap;true;create;(Map);;MapValue of Argument[0];MapValue of ReturnValue;value" HashBiMap out = null; - Map in = (Map)newWithMapValue(source()); + Map in = (Map)Map.of(null, source()); out = HashBiMap.create(in); sink(getMapValue(out)); // $ hasValueFlow } @@ -335,196 +356,196 @@ public class Test extends Methods { { // "com.google.common.collect;ImmutableClassToInstanceMap;true;copyOf;(Map);;MapKey of Argument[0];MapKey of ReturnValue;value" ImmutableClassToInstanceMap out = null; - Map in = (Map)newWithMapKey(source()); + Map in = (Map)Map.of(source(), null); out = ImmutableClassToInstanceMap.copyOf(in); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableClassToInstanceMap;true;copyOf;(Map);;MapValue of Argument[0];MapValue of ReturnValue;value" ImmutableClassToInstanceMap out = null; - Map in = (Map)newWithMapValue(source()); + Map in = (Map)Map.of(null, source()); out = ImmutableClassToInstanceMap.copyOf(in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableClassToInstanceMap;true;of;(Class,Object);;Argument[0];MapKey of ReturnValue;value" ImmutableClassToInstanceMap out = null; - Class in = source(); + Class in = (Class)source(); out = ImmutableClassToInstanceMap.of(in, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableClassToInstanceMap;true;of;(Class,Object);;Argument[1];MapValue of ReturnValue;value" ImmutableClassToInstanceMap out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableClassToInstanceMap.of(null, in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;(Object);;Argument[0];Element of Argument[-1];value" ImmutableSortedSet.Builder out = null; - Object in = source(); + Object in = (Object)source(); out.add(in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;(Object);;Argument[0];Element of Argument[-1];value" ImmutableSortedMultiset.Builder out = null; - Object in = source(); + Object in = (Object)source(); out.add(in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;(Object);;Argument[0];Element of Argument[-1];value" ImmutableSet.Builder out = null; - Object in = source(); + Object in = (Object)source(); out.add(in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;(Object);;Argument[0];Element of Argument[-1];value" ImmutableMultiset.Builder out = null; - Object in = source(); + Object in = (Object)source(); out.add(in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;(Object);;Argument[0];Element of Argument[-1];value" ImmutableList.Builder out = null; - Object in = source(); + Object in = (Object)source(); out.add(in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;(Object);;Argument[0];Element of Argument[-1];value" ImmutableCollection.Builder out = null; - Object in = source(); + Object in = (Object)source(); out.add(in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;(Object[]);;ArrayElement of Argument[0];Element of Argument[-1];value" ImmutableSortedSet.Builder out = null; - Object[] in = newWithArrayElement(source()); + Object[] in = (Object[])new Object[]{source()}; out.add(in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;(Object[]);;ArrayElement of Argument[0];Element of Argument[-1];value" ImmutableSortedMultiset.Builder out = null; - Object[] in = newWithArrayElement(source()); + Object[] in = (Object[])new Object[]{source()}; out.add(in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;(Object[]);;ArrayElement of Argument[0];Element of Argument[-1];value" ImmutableSet.Builder out = null; - Object[] in = newWithArrayElement(source()); + Object[] in = (Object[])new Object[]{source()}; out.add(in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;(Object[]);;ArrayElement of Argument[0];Element of Argument[-1];value" ImmutableMultiset.Builder out = null; - Object[] in = newWithArrayElement(source()); + Object[] in = (Object[])new Object[]{source()}; out.add(in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;(Object[]);;ArrayElement of Argument[0];Element of Argument[-1];value" ImmutableList.Builder out = null; - Object[] in = newWithArrayElement(source()); + Object[] in = (Object[])new Object[]{source()}; out.add(in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;(Object[]);;ArrayElement of Argument[0];Element of Argument[-1];value" ImmutableCollection.Builder out = null; - Object[] in = newWithArrayElement(source()); + Object[] in = (Object[])new Object[]{source()}; out.add(in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;;;Argument[-1];ReturnValue;value" ImmutableSortedSet.Builder out = null; - ImmutableSortedSet.Builder in = source(); + ImmutableSortedSet.Builder in = (ImmutableSortedSet.Builder)source(); out = in.add((Object[])null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;;;Argument[-1];ReturnValue;value" ImmutableSortedSet.Builder out = null; - ImmutableSortedSet.Builder in = source(); + ImmutableSortedSet.Builder in = (ImmutableSortedSet.Builder)source(); out = in.add((Object)null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;;;Argument[-1];ReturnValue;value" ImmutableSortedMultiset.Builder out = null; - ImmutableSortedMultiset.Builder in = source(); + ImmutableSortedMultiset.Builder in = (ImmutableSortedMultiset.Builder)source(); out = in.add((Object[])null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;;;Argument[-1];ReturnValue;value" ImmutableSortedMultiset.Builder out = null; - ImmutableSortedMultiset.Builder in = source(); + ImmutableSortedMultiset.Builder in = (ImmutableSortedMultiset.Builder)source(); out = in.add((Object)null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;;;Argument[-1];ReturnValue;value" ImmutableSet.Builder out = null; - ImmutableSet.Builder in = source(); + ImmutableSet.Builder in = (ImmutableSet.Builder)source(); out = in.add((Object[])null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;;;Argument[-1];ReturnValue;value" ImmutableSet.Builder out = null; - ImmutableSet.Builder in = source(); + ImmutableSet.Builder in = (ImmutableSet.Builder)source(); out = in.add((Object)null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;;;Argument[-1];ReturnValue;value" ImmutableMultiset.Builder out = null; - ImmutableMultiset.Builder in = source(); + ImmutableMultiset.Builder in = (ImmutableMultiset.Builder)source(); out = in.add((Object[])null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;;;Argument[-1];ReturnValue;value" ImmutableMultiset.Builder out = null; - ImmutableMultiset.Builder in = source(); + ImmutableMultiset.Builder in = (ImmutableMultiset.Builder)source(); out = in.add((Object)null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;;;Argument[-1];ReturnValue;value" ImmutableList.Builder out = null; - ImmutableList.Builder in = source(); + ImmutableList.Builder in = (ImmutableList.Builder)source(); out = in.add((Object[])null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;;;Argument[-1];ReturnValue;value" ImmutableList.Builder out = null; - ImmutableList.Builder in = source(); + ImmutableList.Builder in = (ImmutableList.Builder)source(); out = in.add((Object)null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;;;Argument[-1];ReturnValue;value" ImmutableCollection.Builder out = null; - ImmutableCollection.Builder in = source(); + ImmutableCollection.Builder in = (ImmutableCollection.Builder)source(); out = in.add((Object[])null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;;;Argument[-1];ReturnValue;value" ImmutableCollection.Builder out = null; - ImmutableCollection.Builder in = source(); + ImmutableCollection.Builder in = (ImmutableCollection.Builder)source(); out = in.add((Object)null); sink(out); // $ hasValueFlow } @@ -559,7 +580,7 @@ public class Test extends Methods { { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;(Iterable);;Element of Argument[0];Element of Argument[-1];value" ImmutableList.Builder out = null; - Iterable in = (Iterable)newWithElement(source()); + Iterable in = (Iterable)List.of(source()); out.addAll(in); sink(getElement(out)); // $ hasValueFlow } @@ -615,84 +636,84 @@ public class Test extends Methods { { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;;;Argument[-1];ReturnValue;value" ImmutableSortedSet.Builder out = null; - ImmutableSortedSet.Builder in = source(); + ImmutableSortedSet.Builder in = (ImmutableSortedSet.Builder)source(); out = in.addAll((Iterator)null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;;;Argument[-1];ReturnValue;value" ImmutableSortedSet.Builder out = null; - ImmutableSortedSet.Builder in = source(); + ImmutableSortedSet.Builder in = (ImmutableSortedSet.Builder)source(); out = in.addAll((Iterable)null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;;;Argument[-1];ReturnValue;value" ImmutableSortedMultiset.Builder out = null; - ImmutableSortedMultiset.Builder in = source(); + ImmutableSortedMultiset.Builder in = (ImmutableSortedMultiset.Builder)source(); out = in.addAll((Iterator)null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;;;Argument[-1];ReturnValue;value" ImmutableSortedMultiset.Builder out = null; - ImmutableSortedMultiset.Builder in = source(); + ImmutableSortedMultiset.Builder in = (ImmutableSortedMultiset.Builder)source(); out = in.addAll((Iterable)null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;;;Argument[-1];ReturnValue;value" ImmutableSet.Builder out = null; - ImmutableSet.Builder in = source(); + ImmutableSet.Builder in = (ImmutableSet.Builder)source(); out = in.addAll((Iterator)null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;;;Argument[-1];ReturnValue;value" ImmutableSet.Builder out = null; - ImmutableSet.Builder in = source(); + ImmutableSet.Builder in = (ImmutableSet.Builder)source(); out = in.addAll((Iterable)null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;;;Argument[-1];ReturnValue;value" ImmutableMultiset.Builder out = null; - ImmutableMultiset.Builder in = source(); + ImmutableMultiset.Builder in = (ImmutableMultiset.Builder)source(); out = in.addAll((Iterator)null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;;;Argument[-1];ReturnValue;value" ImmutableMultiset.Builder out = null; - ImmutableMultiset.Builder in = source(); + ImmutableMultiset.Builder in = (ImmutableMultiset.Builder)source(); out = in.addAll((Iterable)null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;;;Argument[-1];ReturnValue;value" ImmutableList.Builder out = null; - ImmutableList.Builder in = source(); + ImmutableList.Builder in = (ImmutableList.Builder)source(); out = in.addAll((Iterator)null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;;;Argument[-1];ReturnValue;value" ImmutableList.Builder out = null; - ImmutableList.Builder in = source(); + ImmutableList.Builder in = (ImmutableList.Builder)source(); out = in.addAll((Iterable)null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;;;Argument[-1];ReturnValue;value" ImmutableCollection.Builder out = null; - ImmutableCollection.Builder in = source(); + ImmutableCollection.Builder in = (ImmutableCollection.Builder)source(); out = in.addAll((Iterator)null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;;;Argument[-1];ReturnValue;value" ImmutableCollection.Builder out = null; - ImmutableCollection.Builder in = source(); + ImmutableCollection.Builder in = (ImmutableCollection.Builder)source(); out = in.addAll((Iterable)null); sink(out); // $ hasValueFlow } @@ -769,14 +790,14 @@ public class Test extends Methods { { // "com.google.common.collect;ImmutableList;true;copyOf;(Collection);;Element of Argument[0];Element of ReturnValue;value" ImmutableList out = null; - Collection in = (Collection)newWithElement(source()); + Collection in = (Collection)List.of(source()); out = ImmutableList.copyOf(in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;copyOf;(Iterable);;Element of Argument[0];Element of ReturnValue;value" ImmutableList out = null; - Iterable in = (Iterable)newWithElement(source()); + Iterable in = (Iterable)List.of(source()); out = ImmutableList.copyOf(in); sink(getElement(out)); // $ hasValueFlow } @@ -790,561 +811,561 @@ public class Test extends Methods { { // "com.google.common.collect;ImmutableList;true;copyOf;(Object[]);;ArrayElement of Argument[0];Element of ReturnValue;value" ImmutableList out = null; - Object[] in = newWithArrayElement(source()); + Object[] in = (Object[])new Object[]{source()}; out = ImmutableList.copyOf(in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = source(); - out = ImmutableList.of(null, null, null, null, null, null, null, null, null, null, null, in, null); - sink(getElement(out)); // $ hasValueFlow - } - { - // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" - ImmutableList out = null; - Object in = source(); - out = ImmutableList.of(null, null, null, null, null, null, null, null, null, null, in, null, null); - sink(getElement(out)); // $ hasValueFlow - } - { - // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" - ImmutableList out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableList.of(null, null, null, null, null, null, null, null, null, null, in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = source(); - out = ImmutableList.of(null, null, null, null, null, null, null, null, null, in, null, null, null); - sink(getElement(out)); // $ hasValueFlow - } - { - // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" - ImmutableList out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableList.of(null, null, null, null, null, null, null, null, null, in, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableList.of(null, null, null, null, null, null, null, null, null, in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = source(); - out = ImmutableList.of(null, null, null, null, null, null, null, null, in, null, null, null, null); - sink(getElement(out)); // $ hasValueFlow - } - { - // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" - ImmutableList out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableList.of(null, null, null, null, null, null, null, null, in, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableList.of(null, null, null, null, null, null, null, null, in, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableList.of(null, null, null, null, null, null, null, null, in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = source(); - out = ImmutableList.of(null, null, null, null, null, null, null, in, null, null, null, null, null); - sink(getElement(out)); // $ hasValueFlow - } - { - // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" - ImmutableList out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableList.of(null, null, null, null, null, null, null, in, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableList.of(null, null, null, null, null, null, null, in, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableList.of(null, null, null, null, null, null, null, in, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableList.of(null, null, null, null, null, null, null, in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = source(); - out = ImmutableList.of(null, null, null, null, null, null, in, null, null, null, null, null, null); - sink(getElement(out)); // $ hasValueFlow - } - { - // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" - ImmutableList out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableList.of(null, null, null, null, null, null, in, null, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableList.of(null, null, null, null, null, null, in, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableList.of(null, null, null, null, null, null, in, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableList.of(null, null, null, null, null, null, in, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableList.of(null, null, null, null, null, null, in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = source(); - out = ImmutableList.of(null, null, null, null, null, in, null, null, null, null, null, null, null); - sink(getElement(out)); // $ hasValueFlow - } - { - // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" - ImmutableList out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableList.of(null, null, null, null, null, in, null, null, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableList.of(null, null, null, null, null, in, null, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableList.of(null, null, null, null, null, in, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableList.of(null, null, null, null, null, in, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableList.of(null, null, null, null, null, in, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableList.of(null, null, null, null, null, in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = source(); - out = ImmutableList.of(null, null, null, null, in, null, null, null, null, null, null, null, null); - sink(getElement(out)); // $ hasValueFlow - } - { - // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" - ImmutableList out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableList.of(null, null, null, null, in, null, null, null, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableList.of(null, null, null, null, in, null, null, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableList.of(null, null, null, null, in, null, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableList.of(null, null, null, null, in, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableList.of(null, null, null, null, in, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableList.of(null, null, null, null, in, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableList.of(null, null, null, null, in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = source(); - out = ImmutableList.of(null, null, null, in, null, null, null, null, null, null, null, null, null); - sink(getElement(out)); // $ hasValueFlow - } - { - // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" - ImmutableList out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableList.of(null, null, null, in, null, null, null, null, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableList.of(null, null, null, in, null, null, null, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableList.of(null, null, null, in, null, null, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableList.of(null, null, null, in, null, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableList.of(null, null, null, in, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableList.of(null, null, null, in, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableList.of(null, null, null, in, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableList.of(null, null, null, in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = source(); - out = ImmutableList.of(null, null, in, null, null, null, null, null, null, null, null, null, null); - sink(getElement(out)); // $ hasValueFlow - } - { - // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" - ImmutableList out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableList.of(null, null, in, null, null, null, null, null, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableList.of(null, null, in, null, null, null, null, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableList.of(null, null, in, null, null, null, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableList.of(null, null, in, null, null, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableList.of(null, null, in, null, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableList.of(null, null, in, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableList.of(null, null, in, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableList.of(null, null, in, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableList.of(null, null, in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = source(); - out = ImmutableList.of(null, in, null, null, null, null, null, null, null, null, null, null, null); - sink(getElement(out)); // $ hasValueFlow - } - { - // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" - ImmutableList out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableList.of(null, in, null, null, null, null, null, null, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableList.of(null, in, null, null, null, null, null, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableList.of(null, in, null, null, null, null, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableList.of(null, in, null, null, null, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableList.of(null, in, null, null, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableList.of(null, in, null, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableList.of(null, in, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableList.of(null, in, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableList.of(null, in, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableList.of(null, in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = source(); - out = ImmutableList.of(in, null, null, null, null, null, null, null, null, null, null, null, null); - sink(getElement(out)); // $ hasValueFlow - } - { - // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" - ImmutableList out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableList.of(in, null, null, null, null, null, null, null, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableList.of(in, null, null, null, null, null, null, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableList.of(in, null, null, null, null, null, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableList.of(in, null, null, null, null, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableList.of(in, null, null, null, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableList.of(in, null, null, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableList.of(in, null, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableList.of(in, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableList.of(in, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableList.of(in, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" ImmutableList out = null; - Object in = source(); + Object in = (Object)source(); + out = ImmutableList.of(in, (Object)null, (Object)null, (Object)null, (Object)null, (Object)null, (Object)null, (Object)null, (Object)null, (Object)null, (Object)null, (Object)null, (Object[])null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" + ImmutableList out = null; + Object in = (Object)source(); out = ImmutableList.of(in); sink(getElement(out)); // $ hasValueFlow } + { + // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" + ImmutableList out = null; + Object in = (Object)source(); + out = ImmutableList.of((Object)null, in, (Object)null, (Object)null, (Object)null, (Object)null, (Object)null, (Object)null, (Object)null, (Object)null, (Object)null, (Object)null, (Object[])null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" + ImmutableList out = null; + Object in = (Object)source(); + out = ImmutableList.of((Object)null, (Object)null, in, (Object)null, (Object)null, (Object)null, (Object)null, (Object)null, (Object)null, (Object)null, (Object)null, (Object)null, (Object[])null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" + ImmutableList out = null; + Object in = (Object)source(); + out = ImmutableList.of((Object)null, (Object)null, (Object)null, in, (Object)null, (Object)null, (Object)null, (Object)null, (Object)null, (Object)null, (Object)null, (Object)null, (Object[])null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" + ImmutableList out = null; + Object in = (Object)source(); + out = ImmutableList.of((Object)null, (Object)null, (Object)null, (Object)null, in, (Object)null, (Object)null, (Object)null, (Object)null, (Object)null, (Object)null, (Object)null, (Object[])null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" + ImmutableList out = null; + Object in = (Object)source(); + out = ImmutableList.of((Object)null, (Object)null, (Object)null, (Object)null, (Object)null, in, (Object)null, (Object)null, (Object)null, (Object)null, (Object)null, (Object)null, (Object[])null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" + ImmutableList out = null; + Object in = (Object)source(); + out = ImmutableList.of((Object)null, (Object)null, (Object)null, (Object)null, (Object)null, (Object)null, in, (Object)null, (Object)null, (Object)null, (Object)null, (Object)null, (Object[])null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" + ImmutableList out = null; + Object in = (Object)source(); + out = ImmutableList.of((Object)null, (Object)null, (Object)null, (Object)null, (Object)null, (Object)null, (Object)null, in, (Object)null, (Object)null, (Object)null, (Object)null, (Object[])null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" + ImmutableList out = null; + Object in = (Object)source(); + out = ImmutableList.of((Object)null, (Object)null, (Object)null, (Object)null, (Object)null, (Object)null, (Object)null, (Object)null, in, (Object)null, (Object)null, (Object)null, (Object[])null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" + ImmutableList out = null; + Object in = (Object)source(); + out = ImmutableList.of((Object)null, (Object)null, (Object)null, (Object)null, (Object)null, (Object)null, (Object)null, (Object)null, (Object)null, in, (Object)null, (Object)null, (Object[])null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" + ImmutableList out = null; + Object in = (Object)source(); + out = ImmutableList.of((Object)null, (Object)null, (Object)null, (Object)null, (Object)null, (Object)null, (Object)null, (Object)null, (Object)null, (Object)null, in, (Object)null, (Object[])null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value" + ImmutableList out = null; + Object in = (Object)source(); + out = ImmutableList.of((Object)null, (Object)null, (Object)null, (Object)null, (Object)null, (Object)null, (Object)null, (Object)null, (Object)null, (Object)null, (Object)null, in, (Object[])null); + sink(getElement(out)); // $ hasValueFlow + } { // "com.google.common.collect;ImmutableList;true;of;;;ArrayElement of Argument[12];Element of ReturnValue;value" ImmutableList out = null; - Object[] in = newWithArrayElement(source()); - out = ImmutableList.of(null, null, null, null, null, null, null, null, null, null, null, null, in); + Object[] in = (Object[])new Object[]{source()}; + out = ImmutableList.of((Object)null, (Object)null, (Object)null, (Object)null, (Object)null, (Object)null, (Object)null, (Object)null, (Object)null, (Object)null, (Object)null, (Object)null, in); sink(getElement(out)); // $ hasValueFlow } { @@ -1357,24 +1378,17 @@ public class Test extends Methods { { // "com.google.common.collect;ImmutableList;true;sortedCopyOf;(Comparator,Iterable);;Element of Argument[1];Element of ReturnValue;value" ImmutableList out = null; - Iterable in = (Iterable)newWithElement(source()); + Iterable in = (Iterable)List.of(source()); out = ImmutableList.sortedCopyOf(null, in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableList;true;sortedCopyOf;(Iterable);;Element of Argument[0];Element of ReturnValue;value" ImmutableList out = null; - Iterable in = (Iterable)newWithElement(source()); + Iterable in = (Iterable)List.of(source()); out = ImmutableList.sortedCopyOf(in); sink(getElement(out)); // $ hasValueFlow } - { - // "com.google.common.collect;ImmutableList;true;subList;(int,int);;Element of Argument[-1];Element of ReturnValue;value" - ImmutableList out = null; - ImmutableList in = (ImmutableList)newWithElement(source()); - out = in.subList(0, 0); - sink(getElement(out)); // $ hasValueFlow - } { // "com.google.common.collect;ImmutableMap$Builder;true;build;();;MapKey of Argument[-1];MapKey of ReturnValue;value" ImmutableSortedMap out = null; @@ -1406,14 +1420,14 @@ public class Test extends Methods { { // "com.google.common.collect;ImmutableMap$Builder;true;orderEntriesByValue;(Comparator);;Argument[-1];ReturnValue;value" ImmutableSortedMap.Builder out = null; - ImmutableSortedMap.Builder in = source(); + ImmutableSortedMap.Builder in = (ImmutableSortedMap.Builder)source(); out = in.orderEntriesByValue(null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;orderEntriesByValue;(Comparator);;Argument[-1];ReturnValue;value" ImmutableMap.Builder out = null; - ImmutableMap.Builder in = source(); + ImmutableMap.Builder in = (ImmutableMap.Builder)source(); out = in.orderEntriesByValue(null); sink(out); // $ hasValueFlow } @@ -1448,56 +1462,56 @@ public class Test extends Methods { { // "com.google.common.collect;ImmutableMap$Builder;true;put;(Object,Object);;Argument[0];MapKey of Argument[-1];value" ImmutableSortedMap.Builder out = null; - Object in = source(); + Object in = (Object)source(); out.put(in, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;put;(Object,Object);;Argument[0];MapKey of Argument[-1];value" ImmutableMap.Builder out = null; - Object in = source(); + Object in = (Object)source(); out.put(in, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;put;(Object,Object);;Argument[1];MapValue of Argument[-1];value" ImmutableSortedMap.Builder out = null; - Object in = source(); + Object in = (Object)source(); out.put(null, in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;put;(Object,Object);;Argument[1];MapValue of Argument[-1];value" ImmutableMap.Builder out = null; - Object in = source(); + Object in = (Object)source(); out.put(null, in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;put;;;Argument[-1];ReturnValue;value" ImmutableSortedMap.Builder out = null; - ImmutableSortedMap.Builder in = source(); + ImmutableSortedMap.Builder in = (ImmutableSortedMap.Builder)source(); out = in.put(null, null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;put;;;Argument[-1];ReturnValue;value" ImmutableSortedMap.Builder out = null; - ImmutableSortedMap.Builder in = source(); + ImmutableSortedMap.Builder in = (ImmutableSortedMap.Builder)source(); out = in.put(null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;put;;;Argument[-1];ReturnValue;value" ImmutableMap.Builder out = null; - ImmutableMap.Builder in = source(); + ImmutableMap.Builder in = (ImmutableMap.Builder)source(); out = in.put(null, null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;put;;;Argument[-1];ReturnValue;value" ImmutableMap.Builder out = null; - ImmutableMap.Builder in = source(); + ImmutableMap.Builder in = (ImmutableMap.Builder)source(); out = in.put(null); sink(out); // $ hasValueFlow } @@ -1532,56 +1546,56 @@ public class Test extends Methods { { // "com.google.common.collect;ImmutableMap$Builder;true;putAll;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value" ImmutableSortedMap.Builder out = null; - Map in = (Map)newWithMapKey(source()); + Map in = (Map)Map.of(source(), null); out.putAll(in); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;putAll;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value" ImmutableMap.Builder out = null; - Map in = (Map)newWithMapKey(source()); + Map in = (Map)Map.of(source(), null); out.putAll(in); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;putAll;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value" ImmutableSortedMap.Builder out = null; - Map in = (Map)newWithMapValue(source()); + Map in = (Map)Map.of(null, source()); out.putAll(in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;putAll;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value" ImmutableMap.Builder out = null; - Map in = (Map)newWithMapValue(source()); + Map in = (Map)Map.of(null, source()); out.putAll(in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;putAll;;;Argument[-1];ReturnValue;value" ImmutableSortedMap.Builder out = null; - ImmutableSortedMap.Builder in = source(); + ImmutableSortedMap.Builder in = (ImmutableSortedMap.Builder)source(); out = in.putAll((Map)null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;putAll;;;Argument[-1];ReturnValue;value" ImmutableSortedMap.Builder out = null; - ImmutableSortedMap.Builder in = source(); + ImmutableSortedMap.Builder in = (ImmutableSortedMap.Builder)source(); out = in.putAll((Iterable)null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;putAll;;;Argument[-1];ReturnValue;value" ImmutableMap.Builder out = null; - ImmutableMap.Builder in = source(); + ImmutableMap.Builder in = (ImmutableMap.Builder)source(); out = in.putAll((Map)null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;putAll;;;Argument[-1];ReturnValue;value" ImmutableMap.Builder out = null; - ImmutableMap.Builder in = source(); + ImmutableMap.Builder in = (ImmutableMap.Builder)source(); out = in.putAll((Iterable)null); sink(out); // $ hasValueFlow } @@ -1602,224 +1616,224 @@ public class Test extends Methods { { // "com.google.common.collect;ImmutableMap;true;copyOf;(Map);;MapKey of Argument[0];MapKey of ReturnValue;value" ImmutableMap out = null; - Map in = (Map)newWithMapKey(source()); + Map in = (Map)Map.of(source(), null); out = ImmutableMap.copyOf(in); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap;true;copyOf;(Map);;MapValue of Argument[0];MapValue of ReturnValue;value" ImmutableMap out = null; - Map in = (Map)newWithMapValue(source()); + Map in = (Map)Map.of(null, source()); out = ImmutableMap.copyOf(in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[0];MapKey of ReturnValue;value" ImmutableMap out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableMap.of(in, null, null, null, null, null, null, null, null, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[0];MapKey of ReturnValue;value" ImmutableMap out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableMap.of(in, null, null, null, null, null, null, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[0];MapKey of ReturnValue;value" ImmutableMap out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableMap.of(in, null, null, null, null, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[0];MapKey of ReturnValue;value" ImmutableMap out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableMap.of(in, null, null, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[0];MapKey of ReturnValue;value" ImmutableMap out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableMap.of(in, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[1];MapValue of ReturnValue;value" ImmutableMap out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableMap.of(null, in, null, null, null, null, null, null, null, null); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[1];MapValue of ReturnValue;value" ImmutableMap out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableMap.of(null, in, null, null, null, null, null, null); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[1];MapValue of ReturnValue;value" ImmutableMap out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableMap.of(null, in, null, null, null, null); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[1];MapValue of ReturnValue;value" ImmutableMap out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableMap.of(null, in, null, null); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[1];MapValue of ReturnValue;value" ImmutableMap out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableMap.of(null, in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[2];MapKey of ReturnValue;value" ImmutableMap out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableMap.of(null, null, in, null, null, null, null, null, null, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[2];MapKey of ReturnValue;value" ImmutableMap out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableMap.of(null, null, in, null, null, null, null, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[2];MapKey of ReturnValue;value" ImmutableMap out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableMap.of(null, null, in, null, null, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[2];MapKey of ReturnValue;value" ImmutableMap out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableMap.of(null, null, in, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[3];MapValue of ReturnValue;value" ImmutableMap out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableMap.of(null, null, null, in, null, null, null, null, null, null); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[3];MapValue of ReturnValue;value" ImmutableMap out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableMap.of(null, null, null, in, null, null, null, null); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[3];MapValue of ReturnValue;value" ImmutableMap out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableMap.of(null, null, null, in, null, null); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[3];MapValue of ReturnValue;value" ImmutableMap out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableMap.of(null, null, null, in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[4];MapKey of ReturnValue;value" ImmutableMap out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableMap.of(null, null, null, null, in, null, null, null, null, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[4];MapKey of ReturnValue;value" ImmutableMap out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableMap.of(null, null, null, null, in, null, null, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[4];MapKey of ReturnValue;value" ImmutableMap out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableMap.of(null, null, null, null, in, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[5];MapValue of ReturnValue;value" ImmutableMap out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableMap.of(null, null, null, null, null, in, null, null, null, null); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[5];MapValue of ReturnValue;value" ImmutableMap out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableMap.of(null, null, null, null, null, in, null, null); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[5];MapValue of ReturnValue;value" ImmutableMap out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableMap.of(null, null, null, null, null, in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[6];MapKey of ReturnValue;value" ImmutableMap out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableMap.of(null, null, null, null, null, null, in, null, null, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[6];MapKey of ReturnValue;value" ImmutableMap out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableMap.of(null, null, null, null, null, null, in, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[7];MapValue of ReturnValue;value" ImmutableMap out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableMap.of(null, null, null, null, null, null, null, in, null, null); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[7];MapValue of ReturnValue;value" ImmutableMap out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableMap.of(null, null, null, null, null, null, null, in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[8];MapKey of ReturnValue;value" ImmutableMap out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableMap.of(null, null, null, null, null, null, null, null, in, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap;true;of;;;Argument[9];MapValue of ReturnValue;value" ImmutableMap out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableMap.of(null, null, null, null, null, null, null, null, null, in); sink(getMapValue(out)); // $ hasValueFlow } @@ -1868,42 +1882,42 @@ public class Test extends Methods { { // "com.google.common.collect;ImmutableMultimap$Builder;true;orderKeysBy;(Comparator);;Argument[-1];ReturnValue;value" ImmutableSetMultimap.Builder out = null; - ImmutableSetMultimap.Builder in = source(); + ImmutableSetMultimap.Builder in = (ImmutableSetMultimap.Builder)source(); out = in.orderKeysBy(null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;orderKeysBy;(Comparator);;Argument[-1];ReturnValue;value" ImmutableMultimap.Builder out = null; - ImmutableMultimap.Builder in = source(); + ImmutableMultimap.Builder in = (ImmutableMultimap.Builder)source(); out = in.orderKeysBy(null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;orderKeysBy;(Comparator);;Argument[-1];ReturnValue;value" ImmutableListMultimap.Builder out = null; - ImmutableListMultimap.Builder in = source(); + ImmutableListMultimap.Builder in = (ImmutableListMultimap.Builder)source(); out = in.orderKeysBy(null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;orderValuesBy;(Comparator);;Argument[-1];ReturnValue;value" ImmutableSetMultimap.Builder out = null; - ImmutableSetMultimap.Builder in = source(); + ImmutableSetMultimap.Builder in = (ImmutableSetMultimap.Builder)source(); out = in.orderValuesBy(null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;orderValuesBy;(Comparator);;Argument[-1];ReturnValue;value" ImmutableMultimap.Builder out = null; - ImmutableMultimap.Builder in = source(); + ImmutableMultimap.Builder in = (ImmutableMultimap.Builder)source(); out = in.orderValuesBy(null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;orderValuesBy;(Comparator);;Argument[-1];ReturnValue;value" ImmutableListMultimap.Builder out = null; - ImmutableListMultimap.Builder in = source(); + ImmutableListMultimap.Builder in = (ImmutableListMultimap.Builder)source(); out = in.orderValuesBy(null); sink(out); // $ hasValueFlow } @@ -1952,84 +1966,84 @@ public class Test extends Methods { { // "com.google.common.collect;ImmutableMultimap$Builder;true;put;(Object,Object);;Argument[0];MapKey of Argument[-1];value" ImmutableSetMultimap.Builder out = null; - Object in = source(); + Object in = (Object)source(); out.put(in, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;put;(Object,Object);;Argument[0];MapKey of Argument[-1];value" ImmutableMultimap.Builder out = null; - Object in = source(); + Object in = (Object)source(); out.put(in, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;put;(Object,Object);;Argument[0];MapKey of Argument[-1];value" ImmutableListMultimap.Builder out = null; - Object in = source(); + Object in = (Object)source(); out.put(in, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;put;(Object,Object);;Argument[1];MapValue of Argument[-1];value" ImmutableSetMultimap.Builder out = null; - Object in = source(); + Object in = (Object)source(); out.put(null, in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;put;(Object,Object);;Argument[1];MapValue of Argument[-1];value" ImmutableMultimap.Builder out = null; - Object in = source(); + Object in = (Object)source(); out.put(null, in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;put;(Object,Object);;Argument[1];MapValue of Argument[-1];value" ImmutableListMultimap.Builder out = null; - Object in = source(); + Object in = (Object)source(); out.put(null, in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;put;;;Argument[-1];ReturnValue;value" ImmutableSetMultimap.Builder out = null; - ImmutableSetMultimap.Builder in = source(); + ImmutableSetMultimap.Builder in = (ImmutableSetMultimap.Builder)source(); out = in.put(null, null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;put;;;Argument[-1];ReturnValue;value" ImmutableSetMultimap.Builder out = null; - ImmutableSetMultimap.Builder in = source(); + ImmutableSetMultimap.Builder in = (ImmutableSetMultimap.Builder)source(); out = in.put(null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;put;;;Argument[-1];ReturnValue;value" ImmutableMultimap.Builder out = null; - ImmutableMultimap.Builder in = source(); + ImmutableMultimap.Builder in = (ImmutableMultimap.Builder)source(); out = in.put(null, null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;put;;;Argument[-1];ReturnValue;value" ImmutableMultimap.Builder out = null; - ImmutableMultimap.Builder in = source(); + ImmutableMultimap.Builder in = (ImmutableMultimap.Builder)source(); out = in.put(null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;put;;;Argument[-1];ReturnValue;value" ImmutableListMultimap.Builder out = null; - ImmutableListMultimap.Builder in = source(); + ImmutableListMultimap.Builder in = (ImmutableListMultimap.Builder)source(); out = in.put(null, null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;put;;;Argument[-1];ReturnValue;value" ImmutableListMultimap.Builder out = null; - ImmutableListMultimap.Builder in = source(); + ImmutableListMultimap.Builder in = (ImmutableListMultimap.Builder)source(); out = in.put(null); sink(out); // $ hasValueFlow } @@ -2117,27 +2131,6 @@ public class Test extends Methods { out.putAll(in); sink(getMapValue(out)); // $ hasValueFlow } - { - // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" - ImmutableSetMultimap.Builder out = null; - Object in = source(); - out.putAll(in, (Iterable)null); - sink(getMapKey(out)); // $ hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" - ImmutableMultimap.Builder out = null; - Object in = source(); - out.putAll(in, (Iterable)null); - sink(getMapKey(out)); // $ hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" - ImmutableListMultimap.Builder out = null; - Object in = source(); - out.putAll(in, (Iterable)null); - sink(getMapKey(out)); // $ hasValueFlow - } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" ImmutableSetMultimap.Builder out = null; @@ -2162,108 +2155,192 @@ public class Test extends Methods { { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Object,Object[]);;ArrayElement of Argument[1];MapValue of Argument[-1];value" ImmutableSetMultimap.Builder out = null; - Object[] in = newWithArrayElement(source()); + Object[] in = (Object[])new Object[]{source()}; out.putAll((Object)null, in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Object,Object[]);;ArrayElement of Argument[1];MapValue of Argument[-1];value" ImmutableMultimap.Builder out = null; - Object[] in = newWithArrayElement(source()); + Object[] in = (Object[])new Object[]{source()}; out.putAll((Object)null, in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Object,Object[]);;ArrayElement of Argument[1];MapValue of Argument[-1];value" ImmutableListMultimap.Builder out = null; - Object[] in = newWithArrayElement(source()); + Object[] in = (Object[])new Object[]{source()}; out.putAll((Object)null, in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;;;Argument[-1];ReturnValue;value" ImmutableSetMultimap.Builder out = null; - ImmutableSetMultimap.Builder in = source(); + ImmutableSetMultimap.Builder in = (ImmutableSetMultimap.Builder)source(); out = in.putAll((Object)null, (Object[])null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;;;Argument[-1];ReturnValue;value" ImmutableSetMultimap.Builder out = null; - ImmutableSetMultimap.Builder in = source(); + ImmutableSetMultimap.Builder in = (ImmutableSetMultimap.Builder)source(); out = in.putAll((Object)null, (Iterable)null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;;;Argument[-1];ReturnValue;value" ImmutableSetMultimap.Builder out = null; - ImmutableSetMultimap.Builder in = source(); + ImmutableSetMultimap.Builder in = (ImmutableSetMultimap.Builder)source(); out = in.putAll((Multimap)null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;;;Argument[-1];ReturnValue;value" ImmutableSetMultimap.Builder out = null; - ImmutableSetMultimap.Builder in = source(); + ImmutableSetMultimap.Builder in = (ImmutableSetMultimap.Builder)source(); out = in.putAll((Iterable)null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;;;Argument[-1];ReturnValue;value" ImmutableMultimap.Builder out = null; - ImmutableMultimap.Builder in = source(); + ImmutableMultimap.Builder in = (ImmutableMultimap.Builder)source(); out = in.putAll((Object)null, (Object[])null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;;;Argument[-1];ReturnValue;value" ImmutableMultimap.Builder out = null; - ImmutableMultimap.Builder in = source(); + ImmutableMultimap.Builder in = (ImmutableMultimap.Builder)source(); out = in.putAll((Object)null, (Iterable)null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;;;Argument[-1];ReturnValue;value" ImmutableMultimap.Builder out = null; - ImmutableMultimap.Builder in = source(); + ImmutableMultimap.Builder in = (ImmutableMultimap.Builder)source(); out = in.putAll((Multimap)null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;;;Argument[-1];ReturnValue;value" ImmutableMultimap.Builder out = null; - ImmutableMultimap.Builder in = source(); + ImmutableMultimap.Builder in = (ImmutableMultimap.Builder)source(); out = in.putAll((Iterable)null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;;;Argument[-1];ReturnValue;value" ImmutableListMultimap.Builder out = null; - ImmutableListMultimap.Builder in = source(); + ImmutableListMultimap.Builder in = (ImmutableListMultimap.Builder)source(); out = in.putAll((Object)null, (Object[])null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;;;Argument[-1];ReturnValue;value" ImmutableListMultimap.Builder out = null; - ImmutableListMultimap.Builder in = source(); + ImmutableListMultimap.Builder in = (ImmutableListMultimap.Builder)source(); out = in.putAll((Object)null, (Iterable)null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;;;Argument[-1];ReturnValue;value" ImmutableListMultimap.Builder out = null; - ImmutableListMultimap.Builder in = source(); + ImmutableListMultimap.Builder in = (ImmutableListMultimap.Builder)source(); out = in.putAll((Multimap)null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;;;Argument[-1];ReturnValue;value" ImmutableListMultimap.Builder out = null; - ImmutableListMultimap.Builder in = source(); + ImmutableListMultimap.Builder in = (ImmutableListMultimap.Builder)source(); out = in.putAll((Iterable)null); sink(out); // $ hasValueFlow } + { + // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;;;Argument[0];MapKey of Argument[-1];value" + ImmutableSetMultimap.Builder out = null; + Object in = (Object)source(); + out.putAll(in, (Object[])null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;;;Argument[0];MapKey of Argument[-1];value" + ImmutableSetMultimap.Builder out = null; + Object in = (Object)source(); + out.putAll(in, (Iterable)null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;;;Argument[0];MapKey of Argument[-1];value" + ImmutableSetMultimap.Builder out = null; + Multimap in = (Multimap)source(); + out.putAll(in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;;;Argument[0];MapKey of Argument[-1];value" + ImmutableSetMultimap.Builder out = null; + Iterable in = (Iterable)source(); + out.putAll(in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;;;Argument[0];MapKey of Argument[-1];value" + ImmutableMultimap.Builder out = null; + Object in = (Object)source(); + out.putAll(in, (Object[])null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;;;Argument[0];MapKey of Argument[-1];value" + ImmutableMultimap.Builder out = null; + Object in = (Object)source(); + out.putAll(in, (Iterable)null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;;;Argument[0];MapKey of Argument[-1];value" + ImmutableMultimap.Builder out = null; + Multimap in = (Multimap)source(); + out.putAll(in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;;;Argument[0];MapKey of Argument[-1];value" + ImmutableMultimap.Builder out = null; + Iterable in = (Iterable)source(); + out.putAll(in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;;;Argument[0];MapKey of Argument[-1];value" + ImmutableListMultimap.Builder out = null; + Object in = (Object)source(); + out.putAll(in, (Object[])null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;;;Argument[0];MapKey of Argument[-1];value" + ImmutableListMultimap.Builder out = null; + Object in = (Object)source(); + out.putAll(in, (Iterable)null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;;;Argument[0];MapKey of Argument[-1];value" + ImmutableListMultimap.Builder out = null; + Multimap in = (Multimap)source(); + out.putAll(in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;;;Argument[0];MapKey of Argument[-1];value" + ImmutableListMultimap.Builder out = null; + Iterable in = (Iterable)source(); + out.putAll(in); + sink(getMapKey(out)); // $ hasValueFlow + } { // "com.google.common.collect;ImmutableMultimap;true;copyOf;(Iterable);;MapKey of Element of Argument[0];MapKey of ReturnValue;value" ImmutableMultimap out = null; @@ -2337,241 +2414,255 @@ public class Test extends Methods { { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[0];MapKey of ReturnValue;value" ImmutableMultimap out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableMultimap.of(in, null, null, null, null, null, null, null, null, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[0];MapKey of ReturnValue;value" ImmutableMultimap out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableMultimap.of(in, null, null, null, null, null, null, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[0];MapKey of ReturnValue;value" ImmutableMultimap out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableMultimap.of(in, null, null, null, null, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[0];MapKey of ReturnValue;value" ImmutableMultimap out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableMultimap.of(in, null, null, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[0];MapKey of ReturnValue;value" ImmutableMultimap out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableMultimap.of(in, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[1];MapValue of ReturnValue;value" ImmutableMultimap out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableMultimap.of(null, in, null, null, null, null, null, null, null, null); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[1];MapValue of ReturnValue;value" ImmutableMultimap out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableMultimap.of(null, in, null, null, null, null, null, null); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[1];MapValue of ReturnValue;value" ImmutableMultimap out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableMultimap.of(null, in, null, null, null, null); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[1];MapValue of ReturnValue;value" ImmutableMultimap out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableMultimap.of(null, in, null, null); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[1];MapValue of ReturnValue;value" ImmutableMultimap out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableMultimap.of(null, in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[2];MapKey of ReturnValue;value" ImmutableMultimap out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableMultimap.of(null, null, in, null, null, null, null, null, null, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[2];MapKey of ReturnValue;value" ImmutableMultimap out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableMultimap.of(null, null, in, null, null, null, null, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[2];MapKey of ReturnValue;value" ImmutableMultimap out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableMultimap.of(null, null, in, null, null, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[2];MapKey of ReturnValue;value" ImmutableMultimap out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableMultimap.of(null, null, in, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[3];MapValue of ReturnValue;value" ImmutableMultimap out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableMultimap.of(null, null, null, in, null, null, null, null, null, null); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[3];MapValue of ReturnValue;value" ImmutableMultimap out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableMultimap.of(null, null, null, in, null, null, null, null); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[3];MapValue of ReturnValue;value" ImmutableMultimap out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableMultimap.of(null, null, null, in, null, null); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[3];MapValue of ReturnValue;value" ImmutableMultimap out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableMultimap.of(null, null, null, in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[4];MapKey of ReturnValue;value" ImmutableMultimap out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableMultimap.of(null, null, null, null, in, null, null, null, null, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[4];MapKey of ReturnValue;value" ImmutableMultimap out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableMultimap.of(null, null, null, null, in, null, null, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[4];MapKey of ReturnValue;value" ImmutableMultimap out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableMultimap.of(null, null, null, null, in, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[5];MapValue of ReturnValue;value" ImmutableMultimap out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableMultimap.of(null, null, null, null, null, in, null, null, null, null); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[5];MapValue of ReturnValue;value" ImmutableMultimap out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableMultimap.of(null, null, null, null, null, in, null, null); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[5];MapValue of ReturnValue;value" ImmutableMultimap out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableMultimap.of(null, null, null, null, null, in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[6];MapKey of ReturnValue;value" ImmutableMultimap out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableMultimap.of(null, null, null, null, null, null, in, null, null, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[6];MapKey of ReturnValue;value" ImmutableMultimap out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableMultimap.of(null, null, null, null, null, null, in, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[7];MapValue of ReturnValue;value" ImmutableMultimap out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableMultimap.of(null, null, null, null, null, null, null, in, null, null); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[7];MapValue of ReturnValue;value" ImmutableMultimap out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableMultimap.of(null, null, null, null, null, null, null, in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[8];MapKey of ReturnValue;value" ImmutableMultimap out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableMultimap.of(null, null, null, null, null, null, null, null, in, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[9];MapValue of ReturnValue;value" ImmutableMultimap out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableMultimap.of(null, null, null, null, null, null, null, null, null, in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset$Builder;true;addCopies;(Object,int);;Argument[-1];ReturnValue;value" ImmutableSortedMultiset.Builder out = null; - ImmutableSortedMultiset.Builder in = source(); + ImmutableSortedMultiset.Builder in = (ImmutableSortedMultiset.Builder)source(); out = in.addCopies(null, 0); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset$Builder;true;addCopies;(Object,int);;Argument[-1];ReturnValue;value" ImmutableMultiset.Builder out = null; - ImmutableMultiset.Builder in = source(); + ImmutableMultiset.Builder in = (ImmutableMultiset.Builder)source(); out = in.addCopies(null, 0); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset$Builder;true;addCopies;(Object,int);;Argument[0];Element of Argument[-1];value" ImmutableSortedMultiset.Builder out = null; - Object in = source(); + Object in = (Object)source(); out.addCopies(in, 0); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset$Builder;true;addCopies;(Object,int);;Argument[0];Element of Argument[-1];value" ImmutableMultiset.Builder out = null; - Object in = source(); + Object in = (Object)source(); out.addCopies(in, 0); sink(getElement(out)); // $ hasValueFlow } + { + // "com.google.common.collect;ImmutableMultiset$Builder;true;setCount;(Object,int);;Argument[0];Element of Argument[-1];value" + ImmutableSortedMultiset.Builder out = null; + Object in = (Object)source(); + out.setCount(in, 0); + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultiset$Builder;true;setCount;(Object,int);;Argument[0];Element of Argument[-1];value" + ImmutableMultiset.Builder out = null; + Object in = (Object)source(); + out.setCount(in, 0); + sink(getElement(out)); // $ hasValueFlow + } { // "com.google.common.collect;ImmutableMultiset;true;copyOf;(Iterable);;Element of Argument[0];Element of ReturnValue;value" ImmutableMultiset out = null; @@ -2589,162 +2680,162 @@ public class Test extends Methods { { // "com.google.common.collect;ImmutableMultiset;true;copyOf;(Object[]);;ArrayElement of Argument[0];Element of ReturnValue;value" ImmutableMultiset out = null; - Object[] in = newWithArrayElement(source()); + Object[] in = (Object[])new Object[]{source()}; out = ImmutableMultiset.copyOf(in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; - Object in = source(); - out = ImmutableMultiset.of(null, null, null, null, null, in, null); - sink(getElement(out)); // $ hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableMultiset out = null; - Object in = source(); - out = ImmutableMultiset.of(null, null, null, null, in, null, null); - sink(getElement(out)); // $ hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableMultiset out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableMultiset.of(null, null, null, null, in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; - Object in = source(); - out = ImmutableMultiset.of(null, null, null, in, null, null, null); - sink(getElement(out)); // $ hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableMultiset out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableMultiset.of(null, null, null, in, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableMultiset.of(null, null, null, in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; - Object in = source(); - out = ImmutableMultiset.of(null, null, in, null, null, null, null); - sink(getElement(out)); // $ hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableMultiset out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableMultiset.of(null, null, in, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableMultiset.of(null, null, in, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableMultiset.of(null, null, in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; - Object in = source(); - out = ImmutableMultiset.of(null, in, null, null, null, null, null); - sink(getElement(out)); // $ hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableMultiset out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableMultiset.of(null, in, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableMultiset.of(null, in, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableMultiset.of(null, in, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableMultiset.of(null, in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; - Object in = source(); - out = ImmutableMultiset.of(in, null, null, null, null, null, null); - sink(getElement(out)); // $ hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableMultiset out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableMultiset.of(in, null, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableMultiset.of(in, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableMultiset.of(in, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableMultiset.of(in, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableMultiset out = null; - Object in = source(); + Object in = (Object)source(); + out = ImmutableMultiset.of(in, (Object)null, (Object)null, (Object)null, (Object)null, (Object)null, (Object[])null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableMultiset out = null; + Object in = (Object)source(); out = ImmutableMultiset.of(in); sink(getElement(out)); // $ hasValueFlow } + { + // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableMultiset out = null; + Object in = (Object)source(); + out = ImmutableMultiset.of((Object)null, in, (Object)null, (Object)null, (Object)null, (Object)null, (Object[])null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableMultiset out = null; + Object in = (Object)source(); + out = ImmutableMultiset.of((Object)null, (Object)null, in, (Object)null, (Object)null, (Object)null, (Object[])null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableMultiset out = null; + Object in = (Object)source(); + out = ImmutableMultiset.of((Object)null, (Object)null, (Object)null, in, (Object)null, (Object)null, (Object[])null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableMultiset out = null; + Object in = (Object)source(); + out = ImmutableMultiset.of((Object)null, (Object)null, (Object)null, (Object)null, in, (Object)null, (Object[])null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableMultiset out = null; + Object in = (Object)source(); + out = ImmutableMultiset.of((Object)null, (Object)null, (Object)null, (Object)null, (Object)null, in, (Object[])null); + sink(getElement(out)); // $ hasValueFlow + } { // "com.google.common.collect;ImmutableMultiset;true;of;;;ArrayElement of Argument[6];Element of ReturnValue;value" ImmutableMultiset out = null; - Object[] in = newWithArrayElement(source()); - out = ImmutableMultiset.of(null, null, null, null, null, null, in); + Object[] in = (Object[])new Object[]{source()}; + out = ImmutableMultiset.of((Object)null, (Object)null, (Object)null, (Object)null, (Object)null, (Object)null, in); sink(getElement(out)); // $ hasValueFlow } { @@ -2771,162 +2862,162 @@ public class Test extends Methods { { // "com.google.common.collect;ImmutableSet;true;copyOf;(Object[]);;ArrayElement of Argument[0];Element of ReturnValue;value" ImmutableSet out = null; - Object[] in = newWithArrayElement(source()); + Object[] in = (Object[])new Object[]{source()}; out = ImmutableSet.copyOf(in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; - Object in = source(); - out = ImmutableSet.of(null, null, null, null, null, in, null); - sink(getElement(out)); // $ hasValueFlow - } - { - // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSet out = null; - Object in = source(); - out = ImmutableSet.of(null, null, null, null, in, null, null); - sink(getElement(out)); // $ hasValueFlow - } - { - // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSet out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableSet.of(null, null, null, null, in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; - Object in = source(); - out = ImmutableSet.of(null, null, null, in, null, null, null); - sink(getElement(out)); // $ hasValueFlow - } - { - // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSet out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableSet.of(null, null, null, in, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableSet.of(null, null, null, in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; - Object in = source(); - out = ImmutableSet.of(null, null, in, null, null, null, null); - sink(getElement(out)); // $ hasValueFlow - } - { - // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSet out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableSet.of(null, null, in, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableSet.of(null, null, in, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableSet.of(null, null, in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; - Object in = source(); - out = ImmutableSet.of(null, in, null, null, null, null, null); - sink(getElement(out)); // $ hasValueFlow - } - { - // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSet out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableSet.of(null, in, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableSet.of(null, in, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableSet.of(null, in, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableSet.of(null, in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; - Object in = source(); - out = ImmutableSet.of(in, null, null, null, null, null, null); - sink(getElement(out)); // $ hasValueFlow - } - { - // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSet out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableSet.of(in, null, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableSet.of(in, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableSet.of(in, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableSet.of(in, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSet out = null; - Object in = source(); + Object in = (Object)source(); + out = ImmutableSet.of(in, (Object)null, (Object)null, (Object)null, (Object)null, (Object)null, (Object[])null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSet out = null; + Object in = (Object)source(); out = ImmutableSet.of(in); sink(getElement(out)); // $ hasValueFlow } + { + // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSet out = null; + Object in = (Object)source(); + out = ImmutableSet.of((Object)null, in, (Object)null, (Object)null, (Object)null, (Object)null, (Object[])null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSet out = null; + Object in = (Object)source(); + out = ImmutableSet.of((Object)null, (Object)null, in, (Object)null, (Object)null, (Object)null, (Object[])null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSet out = null; + Object in = (Object)source(); + out = ImmutableSet.of((Object)null, (Object)null, (Object)null, in, (Object)null, (Object)null, (Object[])null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSet out = null; + Object in = (Object)source(); + out = ImmutableSet.of((Object)null, (Object)null, (Object)null, (Object)null, in, (Object)null, (Object[])null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSet out = null; + Object in = (Object)source(); + out = ImmutableSet.of((Object)null, (Object)null, (Object)null, (Object)null, (Object)null, in, (Object[])null); + sink(getElement(out)); // $ hasValueFlow + } { // "com.google.common.collect;ImmutableSet;true;of;;;ArrayElement of Argument[6];Element of ReturnValue;value" ImmutableSet out = null; - Object[] in = newWithArrayElement(source()); - out = ImmutableSet.of(null, null, null, null, null, null, in); + Object[] in = (Object[])new Object[]{source()}; + out = ImmutableSet.of((Object)null, (Object)null, (Object)null, (Object)null, (Object)null, (Object)null, in); sink(getElement(out)); // $ hasValueFlow } { @@ -2960,28 +3051,28 @@ public class Test extends Methods { { // "com.google.common.collect;ImmutableSortedMap;true;copyOf;(Map);;MapKey of Argument[0];MapKey of ReturnValue;value" ImmutableSortedMap out = null; - Map in = (Map)newWithMapKey(source()); + Map in = (Map)Map.of(source(), null); out = ImmutableSortedMap.copyOf(in); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMap;true;copyOf;(Map);;MapValue of Argument[0];MapValue of ReturnValue;value" ImmutableSortedMap out = null; - Map in = (Map)newWithMapValue(source()); + Map in = (Map)Map.of(null, source()); out = ImmutableSortedMap.copyOf(in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMap;true;copyOf;(Map,Comparator);;MapKey of Argument[0];MapKey of ReturnValue;value" ImmutableSortedMap out = null; - Map in = (Map)newWithMapKey(source()); + Map in = (Map)Map.of(source(), null); out = ImmutableSortedMap.copyOf(in, (Comparator)null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMap;true;copyOf;(Map,Comparator);;MapValue of Argument[0];MapValue of ReturnValue;value" ImmutableSortedMap out = null; - Map in = (Map)newWithMapValue(source()); + Map in = (Map)Map.of(null, source()); out = ImmutableSortedMap.copyOf(in, (Comparator)null); sink(getMapValue(out)); // $ hasValueFlow } @@ -3002,217 +3093,217 @@ public class Test extends Methods { { // "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[0];MapKey of ReturnValue;value" ImmutableSortedMap out = null; - Comparable in = source(); + Comparable in = (Comparable)source(); out = ImmutableSortedMap.of(in, null, null, null, null, null, null, null, null, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[0];MapKey of ReturnValue;value" ImmutableSortedMap out = null; - Comparable in = source(); + Comparable in = (Comparable)source(); out = ImmutableSortedMap.of(in, null, null, null, null, null, null, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[0];MapKey of ReturnValue;value" ImmutableSortedMap out = null; - Comparable in = source(); + Comparable in = (Comparable)source(); out = ImmutableSortedMap.of(in, null, null, null, null, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[0];MapKey of ReturnValue;value" ImmutableSortedMap out = null; - Comparable in = source(); + Comparable in = (Comparable)source(); out = ImmutableSortedMap.of(in, null, null, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[0];MapKey of ReturnValue;value" ImmutableSortedMap out = null; - Comparable in = source(); + Comparable in = (Comparable)source(); out = ImmutableSortedMap.of(in, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[1];MapValue of ReturnValue;value" ImmutableSortedMap out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableSortedMap.of(null, in, null, null, null, null, null, null, null, null); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[1];MapValue of ReturnValue;value" ImmutableSortedMap out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableSortedMap.of(null, in, null, null, null, null, null, null); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[1];MapValue of ReturnValue;value" ImmutableSortedMap out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableSortedMap.of(null, in, null, null, null, null); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[1];MapValue of ReturnValue;value" ImmutableSortedMap out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableSortedMap.of(null, in, null, null); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[1];MapValue of ReturnValue;value" ImmutableSortedMap out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableSortedMap.of(null, in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[2];MapKey of ReturnValue;value" ImmutableSortedMap out = null; - Comparable in = source(); + Comparable in = (Comparable)source(); out = ImmutableSortedMap.of(null, null, in, null, null, null, null, null, null, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[2];MapKey of ReturnValue;value" ImmutableSortedMap out = null; - Comparable in = source(); + Comparable in = (Comparable)source(); out = ImmutableSortedMap.of(null, null, in, null, null, null, null, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[2];MapKey of ReturnValue;value" ImmutableSortedMap out = null; - Comparable in = source(); + Comparable in = (Comparable)source(); out = ImmutableSortedMap.of(null, null, in, null, null, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[2];MapKey of ReturnValue;value" ImmutableSortedMap out = null; - Comparable in = source(); + Comparable in = (Comparable)source(); out = ImmutableSortedMap.of(null, null, in, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[3];MapValue of ReturnValue;value" ImmutableSortedMap out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableSortedMap.of(null, null, null, in, null, null, null, null, null, null); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[3];MapValue of ReturnValue;value" ImmutableSortedMap out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableSortedMap.of(null, null, null, in, null, null, null, null); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[3];MapValue of ReturnValue;value" ImmutableSortedMap out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableSortedMap.of(null, null, null, in, null, null); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[3];MapValue of ReturnValue;value" ImmutableSortedMap out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableSortedMap.of(null, null, null, in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[4];MapKey of ReturnValue;value" ImmutableSortedMap out = null; - Comparable in = source(); + Comparable in = (Comparable)source(); out = ImmutableSortedMap.of(null, null, null, null, in, null, null, null, null, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[4];MapKey of ReturnValue;value" ImmutableSortedMap out = null; - Comparable in = source(); + Comparable in = (Comparable)source(); out = ImmutableSortedMap.of(null, null, null, null, in, null, null, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[4];MapKey of ReturnValue;value" ImmutableSortedMap out = null; - Comparable in = source(); + Comparable in = (Comparable)source(); out = ImmutableSortedMap.of(null, null, null, null, in, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[5];MapValue of ReturnValue;value" ImmutableSortedMap out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableSortedMap.of(null, null, null, null, null, in, null, null, null, null); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[5];MapValue of ReturnValue;value" ImmutableSortedMap out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableSortedMap.of(null, null, null, null, null, in, null, null); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[5];MapValue of ReturnValue;value" ImmutableSortedMap out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableSortedMap.of(null, null, null, null, null, in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[6];MapKey of ReturnValue;value" ImmutableSortedMap out = null; - Comparable in = source(); + Comparable in = (Comparable)source(); out = ImmutableSortedMap.of(null, null, null, null, null, null, in, null, null, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[6];MapKey of ReturnValue;value" ImmutableSortedMap out = null; - Comparable in = source(); + Comparable in = (Comparable)source(); out = ImmutableSortedMap.of(null, null, null, null, null, null, in, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[7];MapValue of ReturnValue;value" ImmutableSortedMap out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableSortedMap.of(null, null, null, null, null, null, null, in, null, null); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[7];MapValue of ReturnValue;value" ImmutableSortedMap out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableSortedMap.of(null, null, null, null, null, null, null, in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[8];MapKey of ReturnValue;value" ImmutableSortedMap out = null; - Comparable in = source(); + Comparable in = (Comparable)source(); out = ImmutableSortedMap.of(null, null, null, null, null, null, null, null, in, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[9];MapValue of ReturnValue;value" ImmutableSortedMap out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableSortedMap.of(null, null, null, null, null, null, null, null, null, in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMultiset;true;copyOf;(Comparable[]);;ArrayElement of Argument[0];Element of ReturnValue;value" ImmutableSortedMultiset out = null; - Comparable[] in = newWithArrayElement(source()); + Comparable[] in = (Comparable[])new Comparable[]{(Comparable)source()}; out = ImmutableSortedMultiset.copyOf(in); sink(getElement(out)); // $ hasValueFlow } @@ -3254,155 +3345,155 @@ public class Test extends Methods { { // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedMultiset out = null; - Comparable in = source(); - out = ImmutableSortedMultiset.of(null, null, null, null, null, in, null); - sink(getElement(out)); // $ hasValueFlow - } - { - // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSortedMultiset out = null; - Comparable in = source(); - out = ImmutableSortedMultiset.of(null, null, null, null, in, null, null); - sink(getElement(out)); // $ hasValueFlow - } - { - // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSortedMultiset out = null; - Comparable in = source(); + Comparable in = (Comparable)source(); out = ImmutableSortedMultiset.of(null, null, null, null, in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedMultiset out = null; - Comparable in = source(); - out = ImmutableSortedMultiset.of(null, null, null, in, null, null, null); - sink(getElement(out)); // $ hasValueFlow - } - { - // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSortedMultiset out = null; - Comparable in = source(); + Comparable in = (Comparable)source(); out = ImmutableSortedMultiset.of(null, null, null, in, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedMultiset out = null; - Comparable in = source(); + Comparable in = (Comparable)source(); out = ImmutableSortedMultiset.of(null, null, null, in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedMultiset out = null; - Comparable in = source(); - out = ImmutableSortedMultiset.of(null, null, in, null, null, null, null); - sink(getElement(out)); // $ hasValueFlow - } - { - // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSortedMultiset out = null; - Comparable in = source(); + Comparable in = (Comparable)source(); out = ImmutableSortedMultiset.of(null, null, in, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedMultiset out = null; - Comparable in = source(); + Comparable in = (Comparable)source(); out = ImmutableSortedMultiset.of(null, null, in, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedMultiset out = null; - Comparable in = source(); + Comparable in = (Comparable)source(); out = ImmutableSortedMultiset.of(null, null, in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedMultiset out = null; - Comparable in = source(); - out = ImmutableSortedMultiset.of(null, in, null, null, null, null, null); - sink(getElement(out)); // $ hasValueFlow - } - { - // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSortedMultiset out = null; - Comparable in = source(); + Comparable in = (Comparable)source(); out = ImmutableSortedMultiset.of(null, in, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedMultiset out = null; - Comparable in = source(); + Comparable in = (Comparable)source(); out = ImmutableSortedMultiset.of(null, in, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedMultiset out = null; - Comparable in = source(); + Comparable in = (Comparable)source(); out = ImmutableSortedMultiset.of(null, in, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedMultiset out = null; - Comparable in = source(); + Comparable in = (Comparable)source(); out = ImmutableSortedMultiset.of(null, in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedMultiset out = null; - Comparable in = source(); - out = ImmutableSortedMultiset.of(in, null, null, null, null, null, null); - sink(getElement(out)); // $ hasValueFlow - } - { - // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSortedMultiset out = null; - Comparable in = source(); + Comparable in = (Comparable)source(); out = ImmutableSortedMultiset.of(in, null, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedMultiset out = null; - Comparable in = source(); + Comparable in = (Comparable)source(); out = ImmutableSortedMultiset.of(in, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedMultiset out = null; - Comparable in = source(); + Comparable in = (Comparable)source(); out = ImmutableSortedMultiset.of(in, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedMultiset out = null; - Comparable in = source(); + Comparable in = (Comparable)source(); out = ImmutableSortedMultiset.of(in, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedMultiset out = null; - Comparable in = source(); + Comparable in = (Comparable)source(); + out = ImmutableSortedMultiset.of(in, (Comparable)null, (Comparable)null, (Comparable)null, (Comparable)null, (Comparable)null, (Comparable[])null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedMultiset out = null; + Comparable in = (Comparable)source(); out = ImmutableSortedMultiset.of(in); sink(getElement(out)); // $ hasValueFlow } + { + // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedMultiset out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedMultiset.of((Comparable)null, in, (Comparable)null, (Comparable)null, (Comparable)null, (Comparable)null, (Comparable[])null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedMultiset out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedMultiset.of((Comparable)null, (Comparable)null, in, (Comparable)null, (Comparable)null, (Comparable)null, (Comparable[])null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedMultiset out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedMultiset.of((Comparable)null, (Comparable)null, (Comparable)null, in, (Comparable)null, (Comparable)null, (Comparable[])null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedMultiset out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedMultiset.of((Comparable)null, (Comparable)null, (Comparable)null, (Comparable)null, in, (Comparable)null, (Comparable[])null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedMultiset out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedMultiset.of((Comparable)null, (Comparable)null, (Comparable)null, (Comparable)null, (Comparable)null, in, (Comparable[])null); + sink(getElement(out)); // $ hasValueFlow + } { // "com.google.common.collect;ImmutableSortedMultiset;true;of;;;ArrayElement of Argument[6];Element of ReturnValue;value" ImmutableSortedMultiset out = null; - Comparable[] in = newWithArrayElement(source()); - out = ImmutableSortedMultiset.of(null, null, null, null, null, null, in); + Comparable[] in = (Comparable[])new Comparable[]{(Comparable)source()}; + out = ImmutableSortedMultiset.of((Comparable)null, (Comparable)null, (Comparable)null, (Comparable)null, (Comparable)null, (Comparable)null, in); sink(getElement(out)); // $ hasValueFlow } { @@ -3415,7 +3506,7 @@ public class Test extends Methods { { // "com.google.common.collect;ImmutableSortedSet;true;copyOf;(Comparable[]);;ArrayElement of Argument[0];Element of ReturnValue;value" ImmutableSortedSet out = null; - Comparable[] in = newWithArrayElement(source()); + Comparable[] in = (Comparable[])new Comparable[]{(Comparable)source()}; out = ImmutableSortedSet.copyOf(in); sink(getElement(out)); // $ hasValueFlow } @@ -3464,155 +3555,155 @@ public class Test extends Methods { { // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedSet out = null; - Comparable in = source(); - out = ImmutableSortedSet.of(null, null, null, null, null, in, null); - sink(getElement(out)); // $ hasValueFlow - } - { - // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSortedSet out = null; - Comparable in = source(); - out = ImmutableSortedSet.of(null, null, null, null, in, null, null); - sink(getElement(out)); // $ hasValueFlow - } - { - // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSortedSet out = null; - Comparable in = source(); + Comparable in = (Comparable)source(); out = ImmutableSortedSet.of(null, null, null, null, in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedSet out = null; - Comparable in = source(); - out = ImmutableSortedSet.of(null, null, null, in, null, null, null); - sink(getElement(out)); // $ hasValueFlow - } - { - // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSortedSet out = null; - Comparable in = source(); + Comparable in = (Comparable)source(); out = ImmutableSortedSet.of(null, null, null, in, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedSet out = null; - Comparable in = source(); + Comparable in = (Comparable)source(); out = ImmutableSortedSet.of(null, null, null, in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedSet out = null; - Comparable in = source(); - out = ImmutableSortedSet.of(null, null, in, null, null, null, null); - sink(getElement(out)); // $ hasValueFlow - } - { - // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSortedSet out = null; - Comparable in = source(); + Comparable in = (Comparable)source(); out = ImmutableSortedSet.of(null, null, in, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedSet out = null; - Comparable in = source(); + Comparable in = (Comparable)source(); out = ImmutableSortedSet.of(null, null, in, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedSet out = null; - Comparable in = source(); + Comparable in = (Comparable)source(); out = ImmutableSortedSet.of(null, null, in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedSet out = null; - Comparable in = source(); - out = ImmutableSortedSet.of(null, in, null, null, null, null, null); - sink(getElement(out)); // $ hasValueFlow - } - { - // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSortedSet out = null; - Comparable in = source(); + Comparable in = (Comparable)source(); out = ImmutableSortedSet.of(null, in, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedSet out = null; - Comparable in = source(); + Comparable in = (Comparable)source(); out = ImmutableSortedSet.of(null, in, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedSet out = null; - Comparable in = source(); + Comparable in = (Comparable)source(); out = ImmutableSortedSet.of(null, in, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedSet out = null; - Comparable in = source(); + Comparable in = (Comparable)source(); out = ImmutableSortedSet.of(null, in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedSet out = null; - Comparable in = source(); - out = ImmutableSortedSet.of(in, null, null, null, null, null, null); - sink(getElement(out)); // $ hasValueFlow - } - { - // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" - ImmutableSortedSet out = null; - Comparable in = source(); + Comparable in = (Comparable)source(); out = ImmutableSortedSet.of(in, null, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedSet out = null; - Comparable in = source(); + Comparable in = (Comparable)source(); out = ImmutableSortedSet.of(in, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedSet out = null; - Comparable in = source(); + Comparable in = (Comparable)source(); out = ImmutableSortedSet.of(in, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedSet out = null; - Comparable in = source(); + Comparable in = (Comparable)source(); out = ImmutableSortedSet.of(in, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" ImmutableSortedSet out = null; - Comparable in = source(); + Comparable in = (Comparable)source(); + out = ImmutableSortedSet.of(in, (Comparable)null, (Comparable)null, (Comparable)null, (Comparable)null, (Comparable)null, (Comparable[])null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedSet out = null; + Comparable in = (Comparable)source(); out = ImmutableSortedSet.of(in); sink(getElement(out)); // $ hasValueFlow } + { + // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedSet out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedSet.of((Comparable)null, in, (Comparable)null, (Comparable)null, (Comparable)null, (Comparable)null, (Comparable[])null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedSet out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedSet.of((Comparable)null, (Comparable)null, in, (Comparable)null, (Comparable)null, (Comparable)null, (Comparable[])null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedSet out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedSet.of((Comparable)null, (Comparable)null, (Comparable)null, in, (Comparable)null, (Comparable)null, (Comparable[])null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedSet out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedSet.of((Comparable)null, (Comparable)null, (Comparable)null, (Comparable)null, in, (Comparable)null, (Comparable[])null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value" + ImmutableSortedSet out = null; + Comparable in = (Comparable)source(); + out = ImmutableSortedSet.of((Comparable)null, (Comparable)null, (Comparable)null, (Comparable)null, (Comparable)null, in, (Comparable[])null); + sink(getElement(out)); // $ hasValueFlow + } { // "com.google.common.collect;ImmutableSortedSet;true;of;;;ArrayElement of Argument[6];Element of ReturnValue;value" ImmutableSortedSet out = null; - Comparable[] in = newWithArrayElement(source()); - out = ImmutableSortedSet.of(null, null, null, null, null, null, in); + Comparable[] in = (Comparable[])new Comparable[]{(Comparable)source()}; + out = ImmutableSortedSet.of((Comparable)null, (Comparable)null, (Comparable)null, (Comparable)null, (Comparable)null, (Comparable)null, in); sink(getElement(out)); // $ hasValueFlow } { @@ -3639,21 +3730,21 @@ public class Test extends Methods { { // "com.google.common.collect;ImmutableTable$Builder;true;orderColumnsBy;(Comparator);;Argument[-1];ReturnValue;value" ImmutableTable.Builder out = null; - ImmutableTable.Builder in = source(); + ImmutableTable.Builder in = (ImmutableTable.Builder)source(); out = in.orderColumnsBy(null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableTable$Builder;true;orderRowsBy;(Comparator);;Argument[-1];ReturnValue;value" ImmutableTable.Builder out = null; - ImmutableTable.Builder in = source(); + ImmutableTable.Builder in = (ImmutableTable.Builder)source(); out = in.orderRowsBy(null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableTable$Builder;true;put;(Cell);;Argument[-1];ReturnValue;value" ImmutableTable.Builder out = null; - ImmutableTable.Builder in = source(); + ImmutableTable.Builder in = (ImmutableTable.Builder)source(); out = in.put(null); sink(out); // $ hasValueFlow } @@ -3681,35 +3772,35 @@ public class Test extends Methods { { // "com.google.common.collect;ImmutableTable$Builder;true;put;(Object,Object,Object);;Argument[-1];ReturnValue;value" ImmutableTable.Builder out = null; - ImmutableTable.Builder in = source(); + ImmutableTable.Builder in = (ImmutableTable.Builder)source(); out = in.put(null, null, null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ImmutableTable$Builder;true;put;(Object,Object,Object);;Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];value" ImmutableTable.Builder out = null; - Object in = source(); + Object in = (Object)source(); out.put(in, null, null); sink(getTable_rowKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableTable$Builder;true;put;(Object,Object,Object);;Argument[1];SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];value" ImmutableTable.Builder out = null; - Object in = source(); + Object in = (Object)source(); out.put(null, in, null); sink(getTable_columnKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableTable$Builder;true;put;(Object,Object,Object);;Argument[2];MapValue of Argument[-1];value" ImmutableTable.Builder out = null; - Object in = source(); + Object in = (Object)source(); out.put(null, null, in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableTable$Builder;true;putAll;(Table);;Argument[-1];ReturnValue;value" ImmutableTable.Builder out = null; - ImmutableTable.Builder in = source(); + ImmutableTable.Builder in = (ImmutableTable.Builder)source(); out = in.putAll(null); sink(out); // $ hasValueFlow } @@ -3758,21 +3849,21 @@ public class Test extends Methods { { // "com.google.common.collect;ImmutableTable;true;of;(Object,Object,Object);;Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value" ImmutableTable out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableTable.of(in, null, null); sink(getTable_rowKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableTable;true;of;(Object,Object,Object);;Argument[1];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value" ImmutableTable out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableTable.of(null, in, null); sink(getTable_columnKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableTable;true;of;(Object,Object,Object);;Argument[2];MapValue of ReturnValue;value" ImmutableTable out = null; - Object in = source(); + Object in = (Object)source(); out = ImmutableTable.of(null, null, in); sink(getMapValue(out)); // $ hasValueFlow } @@ -3856,7 +3947,7 @@ public class Test extends Methods { { // "com.google.common.collect;Iterables;false;concat;(Iterable[]);;Element of ArrayElement of Argument[0];Element of ReturnValue;value" Iterable out = null; - Iterable[] in = (Iterable[])newWithArrayElement(newWithElement(source())); + Iterable[] in = (Iterable[])new Iterable[]{(Iterable)newWithElement(source())}; out = Iterables.concat(in); sink(getElement(out)); // $ hasValueFlow } @@ -3877,14 +3968,14 @@ public class Test extends Methods { { // "com.google.common.collect;Iterables;false;cycle;(Object[]);;ArrayElement of Argument[0];Element of ReturnValue;value" Iterable out = null; - Object[] in = newWithArrayElement(source()); + Object[] in = (Object[])new Object[]{source()}; out = Iterables.cycle(in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;filter;(Iterable,Class);;Element of Argument[0];Element of ReturnValue;value" Iterable out = null; - Iterable in = (Iterable)newWithElement(source()); + Iterable in = (Iterable)List.of(source()); out = Iterables.filter(in, (Class)null); sink(getElement(out)); // $ hasValueFlow } @@ -3905,7 +3996,7 @@ public class Test extends Methods { { // "com.google.common.collect;Iterables;false;find;(Iterable,Predicate,Object);;Argument[2];ReturnValue;value" Object out = null; - Object in = source(); + Object in = (Object)source(); out = Iterables.find(null, null, in); sink(out); // $ hasValueFlow } @@ -3926,7 +4017,7 @@ public class Test extends Methods { { // "com.google.common.collect;Iterables;false;get;(Iterable,int,Object);;Argument[2];ReturnValue;value" Object out = null; - Object in = source(); + Object in = (Object)source(); out = Iterables.get(null, 0, in); sink(out); // $ hasValueFlow } @@ -3947,7 +4038,7 @@ public class Test extends Methods { { // "com.google.common.collect;Iterables;false;getLast;(Iterable,Object);;Argument[1];ReturnValue;value" Object out = null; - Object in = source(); + Object in = (Object)source(); out = Iterables.getLast(null, in); sink(out); // $ hasValueFlow } @@ -3968,7 +4059,7 @@ public class Test extends Methods { { // "com.google.common.collect;Iterables;false;getOnlyElement;(Iterable,Object);;Argument[1];ReturnValue;value" Object out = null; - Object in = source(); + Object in = (Object)source(); out = Iterables.getOnlyElement(null, in); sink(out); // $ hasValueFlow } @@ -3994,18 +4085,18 @@ public class Test extends Methods { sink(getElement(out)); // $ hasValueFlow } { - // "com.google.common.collect;Iterables;false;paddedPartition;(Iterable,int);;Element of Element of Argument[0];Element of ReturnValue;value" + // "com.google.common.collect;Iterables;false;paddedPartition;(Iterable,int);;Element of Argument[0];Element of Element of ReturnValue;value" Iterable out = null; - Iterable in = (Iterable)newWithElement(newWithElement(source())); + Iterable in = (Iterable)List.of(source()); out = Iterables.paddedPartition(in, 0); - sink(getElement(out)); // $ hasValueFlow + sink(getElement(getElement(out))); // $ hasValueFlow } { - // "com.google.common.collect;Iterables;false;partition;(Iterable,int);;Element of Element of Argument[0];Element of ReturnValue;value" + // "com.google.common.collect;Iterables;false;partition;(Iterable,int);;Element of Argument[0];Element of Element of ReturnValue;value" Iterable out = null; - Iterable in = (Iterable)newWithElement(newWithElement(source())); + Iterable in = (Iterable)List.of(source()); out = Iterables.partition(in, 0); - sink(getElement(out)); // $ hasValueFlow + sink(getElement(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;skip;(Iterable,int);;Element of Argument[0];Element of ReturnValue;value" @@ -4024,7 +4115,7 @@ public class Test extends Methods { { // "com.google.common.collect;Iterables;false;toString;(Iterable);;Element of Argument[0];ReturnValue;taint" String out = null; - Iterable in = (Iterable)newWithElement(source()); + Iterable in = (Iterable)List.of(source()); out = Iterables.toString(in); sink(out); // $ hasTaintFlow } @@ -4136,7 +4227,7 @@ public class Test extends Methods { { // "com.google.common.collect;Iterators;false;concat;(Iterator[]);;Element of ArrayElement of Argument[0];Element of ReturnValue;value" Iterator out = null; - Iterator[] in = (Iterator[])newWithArrayElement(newWithElement(source())); + Iterator[] in = (Iterator[])new Iterator[]{(Iterator)newWithElement(source())}; out = Iterators.concat(in); sink(getElement(out)); // $ hasValueFlow } @@ -4157,7 +4248,7 @@ public class Test extends Methods { { // "com.google.common.collect;Iterators;false;cycle;(Object[]);;ArrayElement of Argument[0];Element of ReturnValue;value" Iterator out = null; - Object[] in = newWithArrayElement(source()); + Object[] in = (Object[])new Object[]{source()}; out = Iterators.cycle(in); sink(getElement(out)); // $ hasValueFlow } @@ -4185,7 +4276,7 @@ public class Test extends Methods { { // "com.google.common.collect;Iterators;false;find;(Iterator,Predicate,Object);;Argument[2];ReturnValue;value" Object out = null; - Object in = source(); + Object in = (Object)source(); out = Iterators.find(null, null, in); sink(out); // $ hasValueFlow } @@ -4199,7 +4290,7 @@ public class Test extends Methods { { // "com.google.common.collect;Iterators;false;forArray;(Object[]);;ArrayElement of Argument[0];Element of ReturnValue;value" UnmodifiableIterator out = null; - Object[] in = newWithArrayElement(source()); + Object[] in = (Object[])new Object[]{source()}; out = Iterators.forArray(in); sink(getElement(out)); // $ hasValueFlow } @@ -4220,7 +4311,7 @@ public class Test extends Methods { { // "com.google.common.collect;Iterators;false;get;(Iterator,int,Object);;Argument[2];ReturnValue;value" Object out = null; - Object in = source(); + Object in = (Object)source(); out = Iterators.get(null, 0, in); sink(out); // $ hasValueFlow } @@ -4241,7 +4332,7 @@ public class Test extends Methods { { // "com.google.common.collect;Iterators;false;getLast;(Iterator,Object);;Argument[1];ReturnValue;value" Object out = null; - Object in = source(); + Object in = (Object)source(); out = Iterators.getLast(null, in); sink(out); // $ hasValueFlow } @@ -4255,7 +4346,7 @@ public class Test extends Methods { { // "com.google.common.collect;Iterators;false;getNext;(Iterator,Object);;Argument[1];ReturnValue;value" Object out = null; - Object in = source(); + Object in = (Object)source(); out = Iterators.getNext(null, in); sink(out); // $ hasValueFlow } @@ -4276,7 +4367,7 @@ public class Test extends Methods { { // "com.google.common.collect;Iterators;false;getOnlyElement;(Iterator,Object);;Argument[1];ReturnValue;value" Object out = null; - Object in = source(); + Object in = (Object)source(); out = Iterators.getOnlyElement(null, in); sink(out); // $ hasValueFlow } @@ -4302,18 +4393,18 @@ public class Test extends Methods { sink(getElement(out)); // $ hasValueFlow } { - // "com.google.common.collect;Iterators;false;paddedPartition;(Iterator,int);;Element of Element of Argument[0];Element of ReturnValue;value" + // "com.google.common.collect;Iterators;false;paddedPartition;(Iterator,int);;Element of Argument[0];Element of Element of ReturnValue;value" UnmodifiableIterator out = null; - Iterator in = (Iterator)newWithElement(newWithElement(source())); + Iterator in = (Iterator)newWithElement(source()); out = Iterators.paddedPartition(in, 0); - sink(getElement(out)); // $ hasValueFlow + sink(getElement(getElement(out))); // $ hasValueFlow } { - // "com.google.common.collect;Iterators;false;partition;(Iterator,int);;Element of Element of Argument[0];Element of ReturnValue;value" + // "com.google.common.collect;Iterators;false;partition;(Iterator,int);;Element of Argument[0];Element of Element of ReturnValue;value" UnmodifiableIterator out = null; - Iterator in = (Iterator)newWithElement(newWithElement(source())); + Iterator in = (Iterator)newWithElement(source()); out = Iterators.partition(in, 0); - sink(getElement(out)); // $ hasValueFlow + sink(getElement(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;peekingIterator;(Iterator);;Element of Argument[0];Element of ReturnValue;value" @@ -4332,7 +4423,7 @@ public class Test extends Methods { { // "com.google.common.collect;Iterators;false;singletonIterator;(Object);;Argument[0];Element of ReturnValue;value" UnmodifiableIterator out = null; - Object in = source(); + Object in = (Object)source(); out = Iterators.singletonIterator(in); sink(getElement(out)); // $ hasValueFlow } @@ -4343,13 +4434,6 @@ public class Test extends Methods { out = Iterators.toArray(in, null); sink(getArrayElement(out)); // $ hasValueFlow } - { - // "com.google.common.collect;Iterators;false;toString;(Iterator);;Element of Argument[0];ReturnValue;taint" - String out = null; - Iterator in = (Iterator)newWithElement(source()); - out = Iterators.toString(in); - sink(out); // $ hasTaintFlow - } { // "com.google.common.collect;Iterators;false;tryFind;(Iterator,Predicate);;Element of Argument[0];Element of ReturnValue;value" Optional out = null; @@ -4409,70 +4493,70 @@ public class Test extends Methods { { // "com.google.common.collect;Lists;false;asList;(Object,Object,Object[]);;Argument[0..1];Element of ReturnValue;value" List out = null; - Object in = source(); + Object in = (Object)source(); out = Lists.asList(null, in, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Lists;false;asList;(Object,Object,Object[]);;Argument[0..1];Element of ReturnValue;value" List out = null; - Object in = source(); + Object in = (Object)source(); out = Lists.asList(in, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Lists;false;asList;(Object,Object,Object[]);;ArrayElement of Argument[2];Element of ReturnValue;value" List out = null; - Object[] in = newWithArrayElement(source()); + Object[] in = (Object[])new Object[]{source()}; out = Lists.asList(null, null, in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Lists;false;asList;(Object,Object[]);;Argument[0];Element of ReturnValue;value" List out = null; - Object in = source(); + Object in = (Object)source(); out = Lists.asList(in, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Lists;false;asList;(Object,Object[]);;ArrayElement of Argument[1];Element of ReturnValue;value" List out = null; - Object[] in = newWithArrayElement(source()); + Object[] in = (Object[])new Object[]{source()}; out = Lists.asList(null, in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Lists;false;cartesianProduct;(List);;Element of Element of Argument[0];Element of Element of ReturnValue;value" - List out = null; - List in = (List)newWithElement(newWithElement(source())); + List out = null; + List in = (List)List.of(newWithElement(source())); out = Lists.cartesianProduct(in); sink(getElement(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Lists;false;cartesianProduct;(List[]);;Element of ArrayElement of Argument[0];Element of Element of ReturnValue;value" - List out = null; - List[] in = (List[])newWithArrayElement(newWithElement(source())); + List out = null; + List[] in = (List[])new List[]{(List)newWithElement(source())}; out = Lists.cartesianProduct(in); - sink(getElement(getElement(out))); // $ MISSING: hasValueFlow + sink(getElement(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Lists;false;charactersOf;(CharSequence);;Argument[0];Element of ReturnValue;taint" List out = null; - CharSequence in = source(); + CharSequence in = (CharSequence)source(); out = Lists.charactersOf(in); sink(getElement(out)); // $ hasTaintFlow } { // "com.google.common.collect;Lists;false;charactersOf;(String);;Argument[0];Element of ReturnValue;taint" ImmutableList out = null; - String in = source(); + String in = (String)source(); out = Lists.charactersOf(in); sink(getElement(out)); // $ hasTaintFlow } { // "com.google.common.collect;Lists;false;newArrayList;(Iterable);;Element of Argument[0];Element of ReturnValue;value" ArrayList out = null; - Iterable in = (Iterable)newWithElement(source()); + Iterable in = (Iterable)List.of(source()); out = Lists.newArrayList(in); sink(getElement(out)); // $ hasValueFlow } @@ -4486,35 +4570,35 @@ public class Test extends Methods { { // "com.google.common.collect;Lists;false;newArrayList;(Object[]);;ArrayElement of Argument[0];Element of ReturnValue;value" ArrayList out = null; - Object[] in = newWithArrayElement(source()); + Object[] in = (Object[])new Object[]{source()}; out = Lists.newArrayList(in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Lists;false;newCopyOnWriteArrayList;(Iterable);;Element of Argument[0];Element of ReturnValue;value" CopyOnWriteArrayList out = null; - Iterable in = (Iterable)newWithElement(source()); + Iterable in = (Iterable)List.of(source()); out = Lists.newCopyOnWriteArrayList(in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Lists;false;newLinkedList;(Iterable);;Element of Argument[0];Element of ReturnValue;value" LinkedList out = null; - Iterable in = (Iterable)newWithElement(source()); + Iterable in = (Iterable)List.of(source()); out = Lists.newLinkedList(in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Lists;false;partition;(List,int);;Element of Argument[0];Element of Element of ReturnValue;value" - List out = null; - List in = (List)newWithElement(source()); + List out = null; + List in = (List)List.of(source()); out = Lists.partition(in, 0); sink(getElement(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Lists;false;reverse;(List);;Element of Argument[0];Element of ReturnValue;value" List out = null; - List in = (List)newWithElement(source()); + List in = (List)List.of(source()); out = Lists.reverse(in); sink(getElement(out)); // $ hasValueFlow } @@ -4562,28 +4646,28 @@ public class Test extends Methods { } { // "com.google.common.collect;MapDifference;true;entriesDiffering;();;MapValue of SyntheticField[com.google.common.collect.MapDifference.left] of Argument[-1];SyntheticField[com.google.common.collect.MapDifference.left] of MapValue of ReturnValue;value" - SortedMap out = null; + SortedMap out = null; SortedMapDifference in = (SortedMapDifference)newWithMapDifference_left(newWithMapValue(source())); out = in.entriesDiffering(); sink(getMapDifference_left(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;MapDifference;true;entriesDiffering;();;MapValue of SyntheticField[com.google.common.collect.MapDifference.left] of Argument[-1];SyntheticField[com.google.common.collect.MapDifference.left] of MapValue of ReturnValue;value" - Map out = null; + Map out = null; MapDifference in = (MapDifference)newWithMapDifference_left(newWithMapValue(source())); out = in.entriesDiffering(); sink(getMapDifference_left(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;MapDifference;true;entriesDiffering;();;MapValue of SyntheticField[com.google.common.collect.MapDifference.right] of Argument[-1];SyntheticField[com.google.common.collect.MapDifference.right] of MapValue of ReturnValue;value" - SortedMap out = null; + SortedMap out = null; SortedMapDifference in = (SortedMapDifference)newWithMapDifference_right(newWithMapValue(source())); out = in.entriesDiffering(); sink(getMapDifference_right(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;MapDifference;true;entriesDiffering;();;MapValue of SyntheticField[com.google.common.collect.MapDifference.right] of Argument[-1];SyntheticField[com.google.common.collect.MapDifference.right] of MapValue of ReturnValue;value" - Map out = null; + Map out = null; MapDifference in = (MapDifference)newWithMapDifference_right(newWithMapValue(source())); out = in.entriesDiffering(); sink(getMapDifference_right(getMapValue(out))); // $ hasValueFlow @@ -4724,56 +4808,56 @@ public class Test extends Methods { { // "com.google.common.collect;Maps;false;difference;(Map,Map);;MapKey of Argument[0];MapKey of SyntheticField[com.google.common.collect.MapDifference.left] of ReturnValue;value" MapDifference out = null; - Map in = (Map)newWithMapKey(source()); + Map in = (Map)Map.of(source(), null); out = Maps.difference(in, (Map)null); sink(getMapKey(getMapDifference_left(out))); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;difference;(Map,Map);;MapKey of Argument[1];MapKey of SyntheticField[com.google.common.collect.MapDifference.right] of ReturnValue;value" MapDifference out = null; - Map in = (Map)newWithMapKey(source()); + Map in = (Map)Map.of(source(), null); out = Maps.difference((Map)null, in); sink(getMapKey(getMapDifference_right(out))); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;difference;(Map,Map);;MapValue of Argument[0];MapValue of SyntheticField[com.google.common.collect.MapDifference.left] of ReturnValue;value" MapDifference out = null; - Map in = (Map)newWithMapValue(source()); + Map in = (Map)Map.of(null, source()); out = Maps.difference(in, (Map)null); sink(getMapValue(getMapDifference_left(out))); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;difference;(Map,Map);;MapValue of Argument[1];MapValue of SyntheticField[com.google.common.collect.MapDifference.right] of ReturnValue;value" MapDifference out = null; - Map in = (Map)newWithMapValue(source()); + Map in = (Map)Map.of(null, source()); out = Maps.difference((Map)null, in); sink(getMapValue(getMapDifference_right(out))); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;difference;(Map,Map,Equivalence);;MapKey of Argument[0];MapKey of SyntheticField[com.google.common.collect.MapDifference.left] of ReturnValue;value" MapDifference out = null; - Map in = (Map)newWithMapKey(source()); + Map in = (Map)Map.of(source(), null); out = Maps.difference(in, null, null); sink(getMapKey(getMapDifference_left(out))); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;difference;(Map,Map,Equivalence);;MapKey of Argument[1];MapKey of SyntheticField[com.google.common.collect.MapDifference.right] of ReturnValue;value" MapDifference out = null; - Map in = (Map)newWithMapKey(source()); + Map in = (Map)Map.of(source(), null); out = Maps.difference(null, in, null); sink(getMapKey(getMapDifference_right(out))); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;difference;(Map,Map,Equivalence);;MapValue of Argument[0];MapValue of SyntheticField[com.google.common.collect.MapDifference.left] of ReturnValue;value" MapDifference out = null; - Map in = (Map)newWithMapValue(source()); + Map in = (Map)Map.of(null, source()); out = Maps.difference(in, null, null); sink(getMapValue(getMapDifference_left(out))); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;difference;(Map,Map,Equivalence);;MapValue of Argument[1];MapValue of SyntheticField[com.google.common.collect.MapDifference.right] of ReturnValue;value" MapDifference out = null; - Map in = (Map)newWithMapValue(source()); + Map in = (Map)Map.of(null, source()); out = Maps.difference(null, in, null); sink(getMapValue(getMapDifference_right(out))); // $ hasValueFlow } @@ -4787,7 +4871,7 @@ public class Test extends Methods { { // "com.google.common.collect;Maps;false;difference;(SortedMap,Map);;MapKey of Argument[1];MapKey of SyntheticField[com.google.common.collect.MapDifference.right] of ReturnValue;value" SortedMapDifference out = null; - Map in = (Map)newWithMapKey(source()); + Map in = (Map)Map.of(source(), null); out = Maps.difference((SortedMap)null, in); sink(getMapKey(getMapDifference_right(out))); // $ hasValueFlow } @@ -4801,177 +4885,93 @@ public class Test extends Methods { { // "com.google.common.collect;Maps;false;difference;(SortedMap,Map);;MapValue of Argument[1];MapValue of SyntheticField[com.google.common.collect.MapDifference.right] of ReturnValue;value" SortedMapDifference out = null; - Map in = (Map)newWithMapValue(source()); + Map in = (Map)Map.of(null, source()); out = Maps.difference((SortedMap)null, in); sink(getMapValue(getMapDifference_right(out))); // $ hasValueFlow } { - // "com.google.common.collect;Maps;false;filterEntries;(BiMap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value" - BiMap out = null; - BiMap in = (BiMap)newWithMapKey(source()); - out = Maps.filterEntries(in, (Predicate)null); - sink(getMapKey(out)); // $ hasValueFlow - } - { - // "com.google.common.collect;Maps;false;filterEntries;(BiMap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value" - BiMap out = null; - BiMap in = (BiMap)newWithMapValue(source()); - out = Maps.filterEntries(in, (Predicate)null); - sink(getMapValue(out)); // $ hasValueFlow - } - { - // "com.google.common.collect;Maps;false;filterEntries;(Map,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value" - Map out = null; - Map in = (Map)newWithMapKey(source()); - out = Maps.filterEntries(in, (Predicate)null); - sink(getMapKey(out)); // $ hasValueFlow - } - { - // "com.google.common.collect;Maps;false;filterEntries;(Map,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value" - Map out = null; - Map in = (Map)newWithMapValue(source()); - out = Maps.filterEntries(in, (Predicate)null); - sink(getMapValue(out)); // $ hasValueFlow - } - { - // "com.google.common.collect;Maps;false;filterEntries;(NavigableMap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value" - NavigableMap out = null; - NavigableMap in = (NavigableMap)newWithMapKey(source()); - out = Maps.filterEntries(in, (Predicate)null); - sink(getMapKey(out)); // $ hasValueFlow - } - { - // "com.google.common.collect;Maps;false;filterEntries;(NavigableMap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value" - NavigableMap out = null; - NavigableMap in = (NavigableMap)newWithMapValue(source()); - out = Maps.filterEntries(in, (Predicate)null); - sink(getMapValue(out)); // $ hasValueFlow - } - { - // "com.google.common.collect;Maps;false;filterEntries;(SortedMap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value" + // "com.google.common.collect;Maps;false;filterEntries;;;MapKey of Argument[0];MapKey of ReturnValue;value" SortedMap out = null; SortedMap in = (SortedMap)newWithMapKey(source()); out = Maps.filterEntries(in, (Predicate)null); sink(getMapKey(out)); // $ hasValueFlow } { - // "com.google.common.collect;Maps;false;filterEntries;(SortedMap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value" - SortedMap out = null; - SortedMap in = (SortedMap)newWithMapValue(source()); + // "com.google.common.collect;Maps;false;filterEntries;;;MapKey of Argument[0];MapKey of ReturnValue;value" + NavigableMap out = null; + NavigableMap in = (NavigableMap)newWithMapKey(source()); out = Maps.filterEntries(in, (Predicate)null); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { - // "com.google.common.collect;Maps;false;filterKeys;(BiMap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value" + // "com.google.common.collect;Maps;false;filterEntries;;;MapKey of Argument[0];MapKey of ReturnValue;value" + Map out = null; + Map in = (Map)Map.of(source(), null); + out = Maps.filterEntries(in, (Predicate)null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;Maps;false;filterEntries;;;MapKey of Argument[0];MapKey of ReturnValue;value" BiMap out = null; BiMap in = (BiMap)newWithMapKey(source()); - out = Maps.filterKeys(in, (Predicate)null); + out = Maps.filterEntries(in, (Predicate)null); sink(getMapKey(out)); // $ hasValueFlow } { - // "com.google.common.collect;Maps;false;filterKeys;(BiMap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value" - BiMap out = null; - BiMap in = (BiMap)newWithMapValue(source()); - out = Maps.filterKeys(in, (Predicate)null); - sink(getMapValue(out)); // $ hasValueFlow - } - { - // "com.google.common.collect;Maps;false;filterKeys;(Map,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value" - Map out = null; - Map in = (Map)newWithMapKey(source()); - out = Maps.filterKeys(in, (Predicate)null); - sink(getMapKey(out)); // $ hasValueFlow - } - { - // "com.google.common.collect;Maps;false;filterKeys;(Map,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value" - Map out = null; - Map in = (Map)newWithMapValue(source()); - out = Maps.filterKeys(in, (Predicate)null); - sink(getMapValue(out)); // $ hasValueFlow - } - { - // "com.google.common.collect;Maps;false;filterKeys;(NavigableMap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value" - NavigableMap out = null; - NavigableMap in = (NavigableMap)newWithMapKey(source()); - out = Maps.filterKeys(in, (Predicate)null); - sink(getMapKey(out)); // $ hasValueFlow - } - { - // "com.google.common.collect;Maps;false;filterKeys;(NavigableMap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value" - NavigableMap out = null; - NavigableMap in = (NavigableMap)newWithMapValue(source()); - out = Maps.filterKeys(in, (Predicate)null); - sink(getMapValue(out)); // $ hasValueFlow - } - { - // "com.google.common.collect;Maps;false;filterKeys;(SortedMap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value" + // "com.google.common.collect;Maps;false;filterKeys;;;MapKey of Argument[0];MapKey of ReturnValue;value" SortedMap out = null; SortedMap in = (SortedMap)newWithMapKey(source()); out = Maps.filterKeys(in, (Predicate)null); sink(getMapKey(out)); // $ hasValueFlow } { - // "com.google.common.collect;Maps;false;filterKeys;(SortedMap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value" - SortedMap out = null; - SortedMap in = (SortedMap)newWithMapValue(source()); - out = Maps.filterKeys(in, (Predicate)null); - sink(getMapValue(out)); // $ hasValueFlow - } - { - // "com.google.common.collect;Maps;false;filterValues;(BiMap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value" - BiMap out = null; - BiMap in = (BiMap)newWithMapKey(source()); - out = Maps.filterValues(in, (Predicate)null); - sink(getMapKey(out)); // $ hasValueFlow - } - { - // "com.google.common.collect;Maps;false;filterValues;(BiMap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value" - BiMap out = null; - BiMap in = (BiMap)newWithMapValue(source()); - out = Maps.filterValues(in, (Predicate)null); - sink(getMapValue(out)); // $ hasValueFlow - } - { - // "com.google.common.collect;Maps;false;filterValues;(Map,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value" - Map out = null; - Map in = (Map)newWithMapKey(source()); - out = Maps.filterValues(in, (Predicate)null); - sink(getMapKey(out)); // $ hasValueFlow - } - { - // "com.google.common.collect;Maps;false;filterValues;(Map,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value" - Map out = null; - Map in = (Map)newWithMapValue(source()); - out = Maps.filterValues(in, (Predicate)null); - sink(getMapValue(out)); // $ hasValueFlow - } - { - // "com.google.common.collect;Maps;false;filterValues;(NavigableMap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value" + // "com.google.common.collect;Maps;false;filterKeys;;;MapKey of Argument[0];MapKey of ReturnValue;value" NavigableMap out = null; NavigableMap in = (NavigableMap)newWithMapKey(source()); - out = Maps.filterValues(in, (Predicate)null); + out = Maps.filterKeys(in, (Predicate)null); sink(getMapKey(out)); // $ hasValueFlow } { - // "com.google.common.collect;Maps;false;filterValues;(NavigableMap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value" - NavigableMap out = null; - NavigableMap in = (NavigableMap)newWithMapValue(source()); - out = Maps.filterValues(in, (Predicate)null); - sink(getMapValue(out)); // $ hasValueFlow + // "com.google.common.collect;Maps;false;filterKeys;;;MapKey of Argument[0];MapKey of ReturnValue;value" + Map out = null; + Map in = (Map)Map.of(source(), null); + out = Maps.filterKeys(in, (Predicate)null); + sink(getMapKey(out)); // $ hasValueFlow } { - // "com.google.common.collect;Maps;false;filterValues;(SortedMap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value" + // "com.google.common.collect;Maps;false;filterKeys;;;MapKey of Argument[0];MapKey of ReturnValue;value" + BiMap out = null; + BiMap in = (BiMap)newWithMapKey(source()); + out = Maps.filterKeys(in, (Predicate)null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;Maps;false;filterValues;;;MapKey of Argument[0];MapKey of ReturnValue;value" SortedMap out = null; SortedMap in = (SortedMap)newWithMapKey(source()); out = Maps.filterValues(in, (Predicate)null); sink(getMapKey(out)); // $ hasValueFlow } { - // "com.google.common.collect;Maps;false;filterValues;(SortedMap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value" - SortedMap out = null; - SortedMap in = (SortedMap)newWithMapValue(source()); + // "com.google.common.collect;Maps;false;filterValues;;;MapKey of Argument[0];MapKey of ReturnValue;value" + NavigableMap out = null; + NavigableMap in = (NavigableMap)newWithMapKey(source()); out = Maps.filterValues(in, (Predicate)null); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;Maps;false;filterValues;;;MapKey of Argument[0];MapKey of ReturnValue;value" + Map out = null; + Map in = (Map)Map.of(source(), null); + out = Maps.filterValues(in, (Predicate)null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;Maps;false;filterValues;;;MapKey of Argument[0];MapKey of ReturnValue;value" + BiMap out = null; + BiMap in = (BiMap)newWithMapKey(source()); + out = Maps.filterValues(in, (Predicate)null); + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;fromProperties;(Properties);;MapKey of Argument[0];MapKey of ReturnValue;value" @@ -4990,42 +4990,56 @@ public class Test extends Methods { { // "com.google.common.collect;Maps;false;immutableEntry;(Object,Object);;Argument[0];MapKey of ReturnValue;value" Map.Entry out = null; - Object in = source(); + Object in = (Object)source(); out = Maps.immutableEntry(in, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;immutableEntry;(Object,Object);;Argument[1];MapValue of ReturnValue;value" Map.Entry out = null; - Object in = source(); + Object in = (Object)source(); out = Maps.immutableEntry(null, in); sink(getMapValue(out)); // $ hasValueFlow } + { + // "com.google.common.collect;Maps;false;immutableEnumMap;(Map);;MapValue of Argument[0];MapValue of ReturnValue;value" + ImmutableMap out = null; + Map in = (Map)Map.of(null, source()); + out = Maps.immutableEnumMap(in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;Maps;false;newEnumMap;(Map);;MapValue of Argument[0];MapValue of ReturnValue;value" + EnumMap out = null; + Map in = (Map)Map.of(null, source()); + out = Maps.newEnumMap(in); + sink(getMapValue(out)); // $ hasValueFlow + } { // "com.google.common.collect;Maps;false;newHashMap;(Map);;MapKey of Argument[0];MapKey of ReturnValue;value" HashMap out = null; - Map in = (Map)newWithMapKey(source()); + Map in = (Map)Map.of(source(), null); out = Maps.newHashMap(in); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;newHashMap;(Map);;MapValue of Argument[0];MapValue of ReturnValue;value" HashMap out = null; - Map in = (Map)newWithMapValue(source()); + Map in = (Map)Map.of(null, source()); out = Maps.newHashMap(in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;newLinkedHashMap;(Map);;MapKey of Argument[0];MapKey of ReturnValue;value" LinkedHashMap out = null; - Map in = (Map)newWithMapKey(source()); + Map in = (Map)Map.of(source(), null); out = Maps.newLinkedHashMap(in); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;newLinkedHashMap;(Map);;MapValue of Argument[0];MapValue of ReturnValue;value" LinkedHashMap out = null; - Map in = (Map)newWithMapValue(source()); + Map in = (Map)Map.of(null, source()); out = Maps.newLinkedHashMap(in); sink(getMapValue(out)); // $ hasValueFlow } @@ -5102,7 +5116,7 @@ public class Test extends Methods { { // "com.google.common.collect;Maps;false;transformValues;(Map,Function);;MapKey of Argument[0];MapKey of ReturnValue;value" Map out = null; - Map in = (Map)newWithMapKey(source()); + Map in = (Map)Map.of(source(), null); out = Maps.transformValues(in, (Function)null); sink(getMapKey(out)); // $ hasValueFlow } @@ -5206,126 +5220,126 @@ public class Test extends Methods { } { // "com.google.common.collect;Multimap;true;asMap;();;MapValue of Argument[-1];Element of MapValue of ReturnValue;value" - NavigableMap out = null; + NavigableMap out = null; TreeMultimap in = (TreeMultimap)newWithMapValue(source()); out = in.asMap(); sink(getElement(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;asMap;();;MapValue of Argument[-1];Element of MapValue of ReturnValue;value" - Map out = null; + Map out = null; SortedSetMultimap in = (SortedSetMultimap)newWithMapValue(source()); out = in.asMap(); sink(getElement(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;asMap;();;MapValue of Argument[-1];Element of MapValue of ReturnValue;value" - Map out = null; + Map out = null; SetMultimap in = (SetMultimap)newWithMapValue(source()); out = in.asMap(); sink(getElement(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;asMap;();;MapValue of Argument[-1];Element of MapValue of ReturnValue;value" - Map out = null; + Map out = null; Multimap in = (Multimap)newWithMapValue(source()); out = in.asMap(); sink(getElement(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;asMap;();;MapValue of Argument[-1];Element of MapValue of ReturnValue;value" - Map out = null; + Map out = null; ListMultimap in = (ListMultimap)newWithMapValue(source()); out = in.asMap(); sink(getElement(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;asMap;();;MapValue of Argument[-1];Element of MapValue of ReturnValue;value" - ImmutableMap out = null; + ImmutableMap out = null; ImmutableMultimap in = (ImmutableMultimap)newWithMapValue(source()); out = in.asMap(); sink(getElement(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;entries;();;MapKey of Argument[-1];MapKey of Element of ReturnValue;value" - Set out = null; + Set out = null; SetMultimap in = (SetMultimap)newWithMapKey(source()); out = in.entries(); sink(getMapKey(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;entries;();;MapKey of Argument[-1];MapKey of Element of ReturnValue;value" - Set out = null; + Set out = null; LinkedHashMultimap in = (LinkedHashMultimap)newWithMapKey(source()); out = in.entries(); sink(getMapKey(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;entries;();;MapKey of Argument[-1];MapKey of Element of ReturnValue;value" - List out = null; + List out = null; LinkedListMultimap in = (LinkedListMultimap)newWithMapKey(source()); out = in.entries(); sink(getMapKey(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;entries;();;MapKey of Argument[-1];MapKey of Element of ReturnValue;value" - ImmutableSet out = null; + ImmutableSet out = null; ImmutableSetMultimap in = (ImmutableSetMultimap)newWithMapKey(source()); out = in.entries(); sink(getMapKey(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;entries;();;MapKey of Argument[-1];MapKey of Element of ReturnValue;value" - ImmutableCollection out = null; + ImmutableCollection out = null; ImmutableMultimap in = (ImmutableMultimap)newWithMapKey(source()); out = in.entries(); sink(getMapKey(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;entries;();;MapKey of Argument[-1];MapKey of Element of ReturnValue;value" - Collection out = null; + Collection out = null; Multimap in = (Multimap)newWithMapKey(source()); out = in.entries(); sink(getMapKey(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;entries;();;MapValue of Argument[-1];MapValue of Element of ReturnValue;value" - Set out = null; + Set out = null; SetMultimap in = (SetMultimap)newWithMapValue(source()); out = in.entries(); sink(getMapValue(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;entries;();;MapValue of Argument[-1];MapValue of Element of ReturnValue;value" - Set out = null; + Set out = null; LinkedHashMultimap in = (LinkedHashMultimap)newWithMapValue(source()); out = in.entries(); sink(getMapValue(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;entries;();;MapValue of Argument[-1];MapValue of Element of ReturnValue;value" - List out = null; + List out = null; LinkedListMultimap in = (LinkedListMultimap)newWithMapValue(source()); out = in.entries(); sink(getMapValue(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;entries;();;MapValue of Argument[-1];MapValue of Element of ReturnValue;value" - ImmutableSet out = null; + ImmutableSet out = null; ImmutableSetMultimap in = (ImmutableSetMultimap)newWithMapValue(source()); out = in.entries(); sink(getMapValue(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;entries;();;MapValue of Argument[-1];MapValue of Element of ReturnValue;value" - ImmutableCollection out = null; + ImmutableCollection out = null; ImmutableMultimap in = (ImmutableMultimap)newWithMapValue(source()); out = in.entries(); sink(getMapValue(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;entries;();;MapValue of Argument[-1];MapValue of Element of ReturnValue;value" - Collection out = null; + Collection out = null; Multimap in = (Multimap)newWithMapValue(source()); out = in.entries(); sink(getMapValue(getElement(out))); // $ hasValueFlow @@ -5438,42 +5452,42 @@ public class Test extends Methods { { // "com.google.common.collect;Multimap;true;put;(Object,Object);;Argument[0];MapKey of Argument[-1];value" Multimap out = null; - Object in = source(); + Object in = (Object)source(); out.put(in, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;put;(Object,Object);;Argument[0];MapKey of Argument[-1];value" LinkedListMultimap out = null; - Object in = source(); + Object in = (Object)source(); out.put(in, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;put;(Object,Object);;Argument[0];MapKey of Argument[-1];value" ImmutableMultimap out = null; - Object in = source(); + Object in = (Object)source(); out.put(in, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;put;(Object,Object);;Argument[1];MapValue of Argument[-1];value" Multimap out = null; - Object in = source(); + Object in = (Object)source(); out.put(null, in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;put;(Object,Object);;Argument[1];MapValue of Argument[-1];value" LinkedListMultimap out = null; - Object in = source(); + Object in = (Object)source(); out.put(null, in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;put;(Object,Object);;Argument[1];MapValue of Argument[-1];value" ImmutableMultimap out = null; - Object in = source(); + Object in = (Object)source(); out.put(null, in); sink(getMapValue(out)); // $ hasValueFlow } @@ -5508,14 +5522,14 @@ public class Test extends Methods { { // "com.google.common.collect;Multimap;true;putAll;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" Multimap out = null; - Object in = source(); + Object in = (Object)source(); out.putAll(in, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;putAll;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" ImmutableMultimap out = null; - Object in = source(); + Object in = (Object)source(); out.putAll(in, null); sink(getMapKey(out)); // $ hasValueFlow } @@ -5592,63 +5606,63 @@ public class Test extends Methods { { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" SortedSetMultimap out = null; - Object in = source(); + Object in = (Object)source(); out.replaceValues(in, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" SetMultimap out = null; - Object in = source(); + Object in = (Object)source(); out.replaceValues(in, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" Multimap out = null; - Object in = source(); + Object in = (Object)source(); out.replaceValues(in, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" ListMultimap out = null; - Object in = source(); + Object in = (Object)source(); out.replaceValues(in, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" LinkedListMultimap out = null; - Object in = source(); + Object in = (Object)source(); out.replaceValues(in, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" LinkedHashMultimap out = null; - Object in = source(); + Object in = (Object)source(); out.replaceValues(in, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" ImmutableSetMultimap out = null; - Object in = source(); + Object in = (Object)source(); out.replaceValues(in, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" ImmutableMultimap out = null; - Object in = source(); + Object in = (Object)source(); out.replaceValues(in, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" ImmutableListMultimap out = null; - Object in = source(); + Object in = (Object)source(); out.replaceValues(in, null); sink(getMapKey(out)); // $ hasValueFlow } @@ -5676,21 +5690,21 @@ public class Test extends Methods { { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" ListMultimap out = null; - Iterable in = (Iterable)newWithElement(source()); + Iterable in = (Iterable)List.of(source()); out.replaceValues(null, in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" LinkedListMultimap out = null; - Iterable in = (Iterable)newWithElement(source()); + Iterable in = (Iterable)List.of(source()); out.replaceValues(null, in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" LinkedHashMultimap out = null; - Iterable in = (Iterable)newWithElement(source()); + Iterable in = (Iterable)List.of(source()); out.replaceValues(null, in); sink(getMapValue(out)); // $ hasValueFlow } @@ -5711,7 +5725,7 @@ public class Test extends Methods { { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" ImmutableListMultimap out = null; - Iterable in = (Iterable)newWithElement(source()); + Iterable in = (Iterable)List.of(source()); out.replaceValues(null, in); sink(getMapValue(out)); // $ hasValueFlow } @@ -5815,7 +5829,7 @@ public class Test extends Methods { } { // "com.google.common.collect;Multimaps;false;asMap;(ListMultimap);;MapValue of Argument[0];Element of MapValue of ReturnValue;value" - Map out = null; + Map out = null; ListMultimap in = (ListMultimap)newWithMapValue(source()); out = Multimaps.asMap(in); sink(getElement(getMapValue(out))); // $ hasValueFlow @@ -5829,7 +5843,7 @@ public class Test extends Methods { } { // "com.google.common.collect;Multimaps;false;asMap;(Multimap);;MapValue of Argument[0];Element of MapValue of ReturnValue;value" - Map out = null; + Map out = null; Multimap in = (Multimap)newWithMapValue(source()); out = Multimaps.asMap(in); sink(getElement(getMapValue(out))); // $ hasValueFlow @@ -5843,7 +5857,7 @@ public class Test extends Methods { } { // "com.google.common.collect;Multimaps;false;asMap;(SetMultimap);;MapValue of Argument[0];Element of MapValue of ReturnValue;value" - Map out = null; + Map out = null; SetMultimap in = (SetMultimap)newWithMapValue(source()); out = Multimaps.asMap(in); sink(getElement(getMapValue(out))); // $ hasValueFlow @@ -5857,7 +5871,7 @@ public class Test extends Methods { } { // "com.google.common.collect;Multimaps;false;asMap;(SortedSetMultimap);;MapValue of Argument[0];Element of MapValue of ReturnValue;value" - Map out = null; + Map out = null; SortedSetMultimap in = (SortedSetMultimap)newWithMapValue(source()); out = Multimaps.asMap(in); sink(getElement(getMapValue(out))); // $ hasValueFlow @@ -5949,14 +5963,14 @@ public class Test extends Methods { { // "com.google.common.collect;Multimaps;false;forMap;(Map);;MapKey of Argument[0];MapKey of ReturnValue;value" SetMultimap out = null; - Map in = (Map)newWithMapKey(source()); + Map in = (Map)Map.of(source(), null); out = Multimaps.forMap(in); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;forMap;(Map);;MapValue of Argument[0];MapValue of ReturnValue;value" SetMultimap out = null; - Map in = (Map)newWithMapValue(source()); + Map in = (Map)Map.of(null, source()); out = Multimaps.forMap(in); sink(getMapValue(out)); // $ hasValueFlow } @@ -5975,72 +5989,79 @@ public class Test extends Methods { sink(getMapValue(out)); // $ hasValueFlow } { - // "com.google.common.collect;Multimaps;false;invertFrom;(Multimap,Multimap);;MapKey of Argument[0];MapValue of ReturnValue;value" + // "com.google.common.collect;Multimaps;false;invertFrom;(Multimap,Multimap);;Argument[1];ReturnValue;value" + Multimap out = null; + Multimap in = (Multimap)source(); + out = Multimaps.invertFrom(null, in); + sink(out); // $ hasValueFlow + } + { + // "com.google.common.collect;Multimaps;false;invertFrom;(Multimap,Multimap);;MapKey of Argument[0];MapValue of Argument[1];value" Multimap out = null; Multimap in = (Multimap)newWithMapKey(source()); - out = Multimaps.invertFrom(in, null); + Multimaps.invertFrom(in, out); sink(getMapValue(out)); // $ hasValueFlow } { - // "com.google.common.collect;Multimaps;false;invertFrom;(Multimap,Multimap);;MapValue of Argument[0];MapKey of ReturnValue;value" + // "com.google.common.collect;Multimaps;false;invertFrom;(Multimap,Multimap);;MapValue of Argument[0];MapKey of Argument[1];value" Multimap out = null; Multimap in = (Multimap)newWithMapValue(source()); - out = Multimaps.invertFrom(in, null); + Multimaps.invertFrom(in, out); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;newListMultimap;(Map,Supplier);;Element of MapValue of Argument[0];MapValue of ReturnValue;value" ListMultimap out = null; - Map in = (Map)newWithMapValue(newWithElement(source())); + Map in = (Map)Map.of(null, newWithElement(source())); out = Multimaps.newListMultimap(in, null); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;newListMultimap;(Map,Supplier);;MapKey of Argument[0];MapKey of ReturnValue;value" ListMultimap out = null; - Map in = (Map)newWithMapKey(source()); + Map in = (Map)Map.of(source(), null); out = Multimaps.newListMultimap(in, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;newMultimap;(Map,Supplier);;Element of MapValue of Argument[0];MapValue of ReturnValue;value" Multimap out = null; - Map in = (Map)newWithMapValue(newWithElement(source())); + Map in = (Map)Map.of(null, newWithElement(source())); out = Multimaps.newMultimap(in, null); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;newMultimap;(Map,Supplier);;MapKey of Argument[0];MapKey of ReturnValue;value" Multimap out = null; - Map in = (Map)newWithMapKey(source()); + Map in = (Map)Map.of(source(), null); out = Multimaps.newMultimap(in, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;newSetMultimap;(Map,Supplier);;Element of MapValue of Argument[0];MapValue of ReturnValue;value" SetMultimap out = null; - Map in = (Map)newWithMapValue(newWithElement(source())); + Map in = (Map)Map.of(null, newWithElement(source())); out = Multimaps.newSetMultimap(in, null); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;newSetMultimap;(Map,Supplier);;MapKey of Argument[0];MapKey of ReturnValue;value" SetMultimap out = null; - Map in = (Map)newWithMapKey(source()); + Map in = (Map)Map.of(source(), null); out = Multimaps.newSetMultimap(in, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;newSortedSetMultimap;(Map,Supplier);;Element of MapValue of Argument[0];MapValue of ReturnValue;value" SortedSetMultimap out = null; - Map in = (Map)newWithMapValue(newWithElement(source())); + Map in = (Map)Map.of(null, newWithElement(source())); out = Multimaps.newSortedSetMultimap(in, null); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;newSortedSetMultimap;(Map,Supplier);;MapKey of Argument[0];MapKey of ReturnValue;value" SortedSetMultimap out = null; - Map in = (Map)newWithMapKey(source()); + Map in = (Map)Map.of(source(), null); out = Multimaps.newSortedSetMultimap(in, null); sink(getMapKey(out)); // $ hasValueFlow } @@ -6222,28 +6243,28 @@ public class Test extends Methods { { // "com.google.common.collect;Multiset;true;add;(Object,int);;Argument[0];Element of Argument[-1];value" TreeMultiset out = null; - Object in = source(); + Object in = (Object)source(); out.add(in, 0); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multiset;true;add;(Object,int);;Argument[0];Element of Argument[-1];value" Multiset out = null; - Object in = source(); + Object in = (Object)source(); out.add(in, 0); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multiset;true;add;(Object,int);;Argument[0];Element of Argument[-1];value" ImmutableMultiset out = null; - Object in = source(); + Object in = (Object)source(); out.add(in, 0); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multiset;true;add;(Object,int);;Argument[0];Element of Argument[-1];value" ConcurrentHashMultiset out = null; - Object in = source(); + Object in = (Object)source(); out.add(in, 0); sink(getElement(out)); // $ hasValueFlow } @@ -6277,21 +6298,21 @@ public class Test extends Methods { } { // "com.google.common.collect;Multiset;true;entrySet;();;Element of Argument[-1];Element of Element of ReturnValue;value" - Set out = null; + Set out = null; SortedMultiset in = (SortedMultiset)newWithElement(source()); out = in.entrySet(); sink(getElement(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Multiset;true;entrySet;();;Element of Argument[-1];Element of Element of ReturnValue;value" - Set out = null; + Set out = null; Multiset in = (Multiset)newWithElement(source()); out = in.entrySet(); sink(getElement(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Multiset;true;entrySet;();;Element of Argument[-1];Element of Element of ReturnValue;value" - ImmutableSet out = null; + ImmutableSet out = null; ImmutableMultiset in = (ImmutableMultiset)newWithElement(source()); out = in.entrySet(); sink(getElement(getElement(out))); // $ hasValueFlow @@ -6299,56 +6320,56 @@ public class Test extends Methods { { // "com.google.common.collect;Multiset;true;setCount;(Object,int);;Argument[0];Element of Argument[-1];value" TreeMultiset out = null; - Object in = source(); + Object in = (Object)source(); out.setCount(in, 0); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multiset;true;setCount;(Object,int);;Argument[0];Element of Argument[-1];value" Multiset out = null; - Object in = source(); + Object in = (Object)source(); out.setCount(in, 0); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multiset;true;setCount;(Object,int);;Argument[0];Element of Argument[-1];value" ImmutableMultiset out = null; - Object in = source(); + Object in = (Object)source(); out.setCount(in, 0); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multiset;true;setCount;(Object,int);;Argument[0];Element of Argument[-1];value" ConcurrentHashMultiset out = null; - Object in = source(); + Object in = (Object)source(); out.setCount(in, 0); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multiset;true;setCount;(Object,int,int);;Argument[0];Element of Argument[-1];value" TreeMultiset out = null; - Object in = source(); + Object in = (Object)source(); out.setCount(in, 0, 0); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multiset;true;setCount;(Object,int,int);;Argument[0];Element of Argument[-1];value" Multiset out = null; - Object in = source(); + Object in = (Object)source(); out.setCount(in, 0, 0); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multiset;true;setCount;(Object,int,int);;Argument[0];Element of Argument[-1];value" ImmutableMultiset out = null; - Object in = source(); + Object in = (Object)source(); out.setCount(in, 0, 0); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multiset;true;setCount;(Object,int,int);;Argument[0];Element of Argument[-1];value" ConcurrentHashMultiset out = null; - Object in = source(); + Object in = (Object)source(); out.setCount(in, 0, 0); sink(getElement(out)); // $ hasValueFlow } @@ -6376,10 +6397,24 @@ public class Test extends Methods { { // "com.google.common.collect;Multisets;false;immutableEntry;(Object,int);;Argument[0];Element of ReturnValue;value" Multiset.Entry out = null; - Object in = source(); + Object in = (Object)source(); out = Multisets.immutableEntry(in, 0); sink(getElement(out)); // $ hasValueFlow } + { + // "com.google.common.collect;Multisets;false;intersection;(Multiset,Multiset);;Element of Argument[0..1];Element of ReturnValue;value" + Multiset out = null; + Multiset in = (Multiset)newWithElement(source()); + out = Multisets.intersection(null, in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;Multisets;false;intersection;(Multiset,Multiset);;Element of Argument[0..1];Element of ReturnValue;value" + Multiset out = null; + Multiset in = (Multiset)newWithElement(source()); + out = Multisets.intersection(in, null); + sink(getElement(out)); // $ hasValueFlow + } { // "com.google.common.collect;Multisets;false;sum;(Multiset,Multiset);;Element of Argument[0..1];Element of ReturnValue;value" Multiset out = null; @@ -6432,56 +6467,56 @@ public class Test extends Methods { { // "com.google.common.collect;MutableClassToInstanceMap;true;create;(Map);;MapKey of Argument[0];MapKey of ReturnValue;value" MutableClassToInstanceMap out = null; - Map in = (Map)newWithMapKey(source()); + Map in = (Map)Map.of(source(), null); out = MutableClassToInstanceMap.create(in); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;MutableClassToInstanceMap;true;create;(Map);;MapValue of Argument[0];MapValue of ReturnValue;value" MutableClassToInstanceMap out = null; - Map in = (Map)newWithMapValue(source()); + Map in = (Map)Map.of(null, source()); out = MutableClassToInstanceMap.create(in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ObjectArrays;false;concat;(Object,Object[]);;Argument[0];ArrayElement of ReturnValue;value" Object[] out = null; - Object in = source(); + Object in = (Object)source(); out = ObjectArrays.concat(in, (Object[])null); sink(getArrayElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ObjectArrays;false;concat;(Object,Object[]);;ArrayElement of Argument[1];ArrayElement of ReturnValue;value" Object[] out = null; - Object[] in = newWithArrayElement(source()); + Object[] in = (Object[])new Object[]{source()}; out = ObjectArrays.concat((Object)null, in); sink(getArrayElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ObjectArrays;false;concat;(Object[],Object);;Argument[1];ArrayElement of ReturnValue;value" Object[] out = null; - Object in = source(); + Object in = (Object)source(); out = ObjectArrays.concat((Object[])null, in); sink(getArrayElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ObjectArrays;false;concat;(Object[],Object);;ArrayElement of Argument[0];ArrayElement of ReturnValue;value" Object[] out = null; - Object[] in = newWithArrayElement(source()); + Object[] in = (Object[])new Object[]{source()}; out = ObjectArrays.concat(in, (Object)null); sink(getArrayElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ObjectArrays;false;concat;(Object[],Object[],Class);;ArrayElement of Argument[0..1];ArrayElement of ReturnValue;value" Object[] out = null; - Object[] in = newWithArrayElement(source()); + Object[] in = (Object[])new Object[]{source()}; out = ObjectArrays.concat(null, in, null); sink(getArrayElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ObjectArrays;false;concat;(Object[],Object[],Class);;ArrayElement of Argument[0..1];ArrayElement of ReturnValue;value" Object[] out = null; - Object[] in = newWithArrayElement(source()); + Object[] in = (Object[])new Object[]{source()}; out = ObjectArrays.concat(in, null, null); sink(getArrayElement(out)); // $ hasValueFlow } @@ -6571,21 +6606,21 @@ public class Test extends Methods { } { // "com.google.common.collect;Sets;false;cartesianProduct;(List);;Element of Element of Argument[0];Element of Element of ReturnValue;value" - Set out = null; - List in = (List)newWithElement(newWithElement(source())); + Set out = null; + List in = (List)List.of(newWithElement(source())); out = Sets.cartesianProduct(in); sink(getElement(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;cartesianProduct;(Set[]);;Element of ArrayElement of Argument[0];Element of Element of ReturnValue;value" - Set out = null; - Set[] in = (Set[])newWithArrayElement(newWithElement(source())); + Set out = null; + Set[] in = (Set[])new Set[]{(Set)newWithElement(source())}; out = Sets.cartesianProduct(in); - sink(getElement(getElement(out))); // $ MISSING: hasValueFlow + sink(getElement(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;combinations;(Set,int);;Element of Argument[0];Element of Element of ReturnValue;value" - Set out = null; + Set out = null; Set in = (Set)newWithElement(source()); out = Sets.combinations(in, 0); sink(getElement(getElement(out))); // $ hasValueFlow @@ -6618,6 +6653,20 @@ public class Test extends Methods { out = Sets.filter(in, (Predicate)null); sink(getElement(out)); // $ hasValueFlow } + { + // "com.google.common.collect;Sets;false;intersection;(Set,Set);;Element of Argument[0..1];Element of ReturnValue;value" + Sets.SetView out = null; + Set in = (Set)newWithElement(source()); + out = Sets.intersection(null, in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;Sets;false;intersection;(Set,Set);;Element of Argument[0..1];Element of ReturnValue;value" + Sets.SetView out = null; + Set in = (Set)newWithElement(source()); + out = Sets.intersection(in, null); + sink(getElement(out)); // $ hasValueFlow + } { // "com.google.common.collect;Sets;false;newConcurrentHashSet;(Iterable);;Element of Argument[0];Element of ReturnValue;value" Set out = null; @@ -6649,7 +6698,7 @@ public class Test extends Methods { { // "com.google.common.collect;Sets;false;newHashSet;(Object[]);;ArrayElement of Argument[0];Element of ReturnValue;value" HashSet out = null; - Object[] in = newWithArrayElement(source()); + Object[] in = (Object[])new Object[]{source()}; out = Sets.newHashSet(in); sink(getElement(out)); // $ hasValueFlow } @@ -6663,7 +6712,7 @@ public class Test extends Methods { { // "com.google.common.collect;Sets;false;newSetFromMap;(Map);;MapKey of Argument[0];Element of ReturnValue;value" Set out = null; - Map in = (Map)newWithMapKey(source()); + Map in = (Map)Map.of(source(), null); out = Sets.newSetFromMap(in); sink(getElement(out)); // $ hasValueFlow } @@ -6676,7 +6725,7 @@ public class Test extends Methods { } { // "com.google.common.collect;Sets;false;powerSet;(Set);;Element of Argument[0];Element of Element of ReturnValue;value" - Set out = null; + Set out = null; Set in = (Set)newWithElement(source()); out = Sets.powerSet(in); sink(getElement(getElement(out))); // $ hasValueFlow @@ -6753,63 +6802,63 @@ public class Test extends Methods { } { // "com.google.common.collect;Table;true;cellSet;();;MapValue of Argument[-1];MapValue of Element of ReturnValue;value" - Set out = null; + Set out = null; Table in = (Table)newWithMapValue(source()); out = in.cellSet(); sink(getMapValue(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;cellSet;();;MapValue of Argument[-1];MapValue of Element of ReturnValue;value" - Set out = null; + Set out = null; ArrayTable in = (ArrayTable)newWithMapValue(source()); out = in.cellSet(); sink(getMapValue(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;cellSet;();;MapValue of Argument[-1];MapValue of Element of ReturnValue;value" - ImmutableSet out = null; + ImmutableSet out = null; ImmutableTable in = (ImmutableTable)newWithMapValue(source()); out = in.cellSet(); sink(getMapValue(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;cellSet;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];SyntheticField[com.google.common.collect.Table.columnKey] of Element of ReturnValue;value" - Set out = null; + Set out = null; Table in = (Table)newWithTable_columnKey(source()); out = in.cellSet(); sink(getTable_columnKey(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;cellSet;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];SyntheticField[com.google.common.collect.Table.columnKey] of Element of ReturnValue;value" - Set out = null; + Set out = null; ArrayTable in = (ArrayTable)newWithTable_columnKey(source()); out = in.cellSet(); sink(getTable_columnKey(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;cellSet;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];SyntheticField[com.google.common.collect.Table.columnKey] of Element of ReturnValue;value" - ImmutableSet out = null; + ImmutableSet out = null; ImmutableTable in = (ImmutableTable)newWithTable_columnKey(source()); out = in.cellSet(); sink(getTable_columnKey(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;cellSet;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];SyntheticField[com.google.common.collect.Table.rowKey] of Element of ReturnValue;value" - Set out = null; + Set out = null; Table in = (Table)newWithTable_rowKey(source()); out = in.cellSet(); sink(getTable_rowKey(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;cellSet;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];SyntheticField[com.google.common.collect.Table.rowKey] of Element of ReturnValue;value" - Set out = null; + Set out = null; ArrayTable in = (ArrayTable)newWithTable_rowKey(source()); out = in.cellSet(); sink(getTable_rowKey(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;cellSet;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];SyntheticField[com.google.common.collect.Table.rowKey] of Element of ReturnValue;value" - ImmutableSet out = null; + ImmutableSet out = null; ImmutableTable in = (ImmutableTable)newWithTable_rowKey(source()); out = in.cellSet(); sink(getTable_rowKey(getElement(out))); // $ hasValueFlow @@ -6879,21 +6928,21 @@ public class Test extends Methods { } { // "com.google.common.collect;Table;true;columnMap;();;MapValue of Argument[-1];MapValue of MapValue of ReturnValue;value" - Map out = null; + Map out = null; Table in = (Table)newWithMapValue(source()); out = in.columnMap(); sink(getMapValue(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;columnMap;();;MapValue of Argument[-1];MapValue of MapValue of ReturnValue;value" - Map out = null; + Map out = null; ArrayTable in = (ArrayTable)newWithMapValue(source()); out = in.columnMap(); sink(getMapValue(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;columnMap;();;MapValue of Argument[-1];MapValue of MapValue of ReturnValue;value" - ImmutableMap out = null; + ImmutableMap out = null; ImmutableTable in = (ImmutableTable)newWithMapValue(source()); out = in.columnMap(); sink(getMapValue(getMapValue(out))); // $ hasValueFlow @@ -6921,21 +6970,21 @@ public class Test extends Methods { } { // "com.google.common.collect;Table;true;columnMap;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];MapKey of MapValue of ReturnValue;value" - Map out = null; + Map out = null; Table in = (Table)newWithTable_rowKey(source()); out = in.columnMap(); sink(getMapKey(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;columnMap;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];MapKey of MapValue of ReturnValue;value" - Map out = null; + Map out = null; ArrayTable in = (ArrayTable)newWithTable_rowKey(source()); out = in.columnMap(); sink(getMapKey(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;columnMap;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];MapKey of MapValue of ReturnValue;value" - ImmutableMap out = null; + ImmutableMap out = null; ImmutableTable in = (ImmutableTable)newWithTable_rowKey(source()); out = in.columnMap(); sink(getMapKey(getMapValue(out))); // $ hasValueFlow @@ -6964,63 +7013,63 @@ public class Test extends Methods { { // "com.google.common.collect;Table;true;put;(Object,Object,Object);;Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];value" Table out = null; - Object in = source(); + Object in = (Object)source(); out.put(in, null, null); sink(getTable_rowKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;put;(Object,Object,Object);;Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];value" ImmutableTable out = null; - Object in = source(); + Object in = (Object)source(); out.put(in, null, null); sink(getTable_rowKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;put;(Object,Object,Object);;Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];value" ArrayTable out = null; - Object in = source(); + Object in = (Object)source(); out.put(in, null, null); sink(getTable_rowKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;put;(Object,Object,Object);;Argument[1];SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];value" Table out = null; - Object in = source(); + Object in = (Object)source(); out.put(null, in, null); sink(getTable_columnKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;put;(Object,Object,Object);;Argument[1];SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];value" ImmutableTable out = null; - Object in = source(); + Object in = (Object)source(); out.put(null, in, null); sink(getTable_columnKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;put;(Object,Object,Object);;Argument[1];SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];value" ArrayTable out = null; - Object in = source(); + Object in = (Object)source(); out.put(null, in, null); sink(getTable_columnKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;put;(Object,Object,Object);;Argument[2];MapValue of Argument[-1];value" Table out = null; - Object in = source(); + Object in = (Object)source(); out.put(null, null, in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;put;(Object,Object,Object);;Argument[2];MapValue of Argument[-1];value" ImmutableTable out = null; - Object in = source(); + Object in = (Object)source(); out.put(null, null, in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;put;(Object,Object,Object);;Argument[2];MapValue of Argument[-1];value" ArrayTable out = null; - Object in = source(); + Object in = (Object)source(); out.put(null, null, in); sink(getMapValue(out)); // $ hasValueFlow } @@ -7208,70 +7257,70 @@ public class Test extends Methods { } { // "com.google.common.collect;Table;true;rowMap;();;MapValue of Argument[-1];MapValue of MapValue of ReturnValue;value" - SortedMap out = null; + SortedMap out = null; TreeBasedTable in = (TreeBasedTable)newWithMapValue(source()); out = in.rowMap(); sink(getMapValue(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;rowMap;();;MapValue of Argument[-1];MapValue of MapValue of ReturnValue;value" - SortedMap out = null; + SortedMap out = null; RowSortedTable in = (RowSortedTable)newWithMapValue(source()); out = in.rowMap(); sink(getMapValue(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;rowMap;();;MapValue of Argument[-1];MapValue of MapValue of ReturnValue;value" - Map out = null; + Map out = null; Table in = (Table)newWithMapValue(source()); out = in.rowMap(); sink(getMapValue(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;rowMap;();;MapValue of Argument[-1];MapValue of MapValue of ReturnValue;value" - Map out = null; + Map out = null; ArrayTable in = (ArrayTable)newWithMapValue(source()); out = in.rowMap(); sink(getMapValue(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;rowMap;();;MapValue of Argument[-1];MapValue of MapValue of ReturnValue;value" - ImmutableMap out = null; + ImmutableMap out = null; ImmutableTable in = (ImmutableTable)newWithMapValue(source()); out = in.rowMap(); sink(getMapValue(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;rowMap;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];MapKey of MapValue of ReturnValue;value" - SortedMap out = null; + SortedMap out = null; TreeBasedTable in = (TreeBasedTable)newWithTable_columnKey(source()); out = in.rowMap(); sink(getMapKey(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;rowMap;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];MapKey of MapValue of ReturnValue;value" - SortedMap out = null; + SortedMap out = null; RowSortedTable in = (RowSortedTable)newWithTable_columnKey(source()); out = in.rowMap(); sink(getMapKey(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;rowMap;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];MapKey of MapValue of ReturnValue;value" - Map out = null; + Map out = null; Table in = (Table)newWithTable_columnKey(source()); out = in.rowMap(); sink(getMapKey(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;rowMap;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];MapKey of MapValue of ReturnValue;value" - Map out = null; + Map out = null; ArrayTable in = (ArrayTable)newWithTable_columnKey(source()); out = in.rowMap(); sink(getMapKey(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;rowMap;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];MapKey of MapValue of ReturnValue;value" - ImmutableMap out = null; + ImmutableMap out = null; ImmutableTable in = (ImmutableTable)newWithTable_columnKey(source()); out = in.rowMap(); sink(getMapKey(getMapValue(out))); // $ hasValueFlow @@ -7335,42 +7384,42 @@ public class Test extends Methods { { // "com.google.common.collect;Tables;false;immutableCell;(Object,Object,Object);;Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value" Table.Cell out = null; - Object in = source(); + Object in = (Object)source(); out = Tables.immutableCell(in, null, null); sink(getTable_rowKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Tables;false;immutableCell;(Object,Object,Object);;Argument[1];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value" Table.Cell out = null; - Object in = source(); + Object in = (Object)source(); out = Tables.immutableCell(null, in, null); sink(getTable_columnKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Tables;false;immutableCell;(Object,Object,Object);;Argument[2];MapValue of ReturnValue;value" Table.Cell out = null; - Object in = source(); + Object in = (Object)source(); out = Tables.immutableCell(null, null, in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Tables;false;newCustomTable;(Map,Supplier);;MapKey of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value" Table out = null; - Map in = (Map)newWithMapKey(source()); + Map in = (Map)Map.of(source(), null); out = Tables.newCustomTable(in, null); sink(getTable_rowKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Tables;false;newCustomTable;(Map,Supplier);;MapKey of MapValue of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value" Table out = null; - Map in = (Map)newWithMapValue(newWithMapKey(source())); + Map in = (Map)Map.of(null, newWithMapKey(source())); out = Tables.newCustomTable(in, null); sink(getTable_columnKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Tables;false;newCustomTable;(Map,Supplier);;MapValue of MapValue of Argument[0];MapValue of ReturnValue;value" Table out = null; - Map in = (Map)newWithMapValue(newWithMapValue(source())); + Map in = (Map)Map.of(null, newWithMapValue(source())); out = Tables.newCustomTable(in, null); sink(getMapValue(out)); // $ hasValueFlow } @@ -7396,25 +7445,18 @@ public class Test extends Methods { sink(getTable_rowKey(out)); // $ hasValueFlow } { - // "com.google.common.collect;Tables;false;transformValues;(Table,Function);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value", - Table out = null; - Table in = (Table)newWithTable_rowKey(source()); - out = Tables.transformValues(in, null); - sink(getTable_rowKey(out)); // $ hasValueFlow - } - { - // "com.google.common.collect;Tables;false;transformValues;(Table,Function);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value", + // "com.google.common.collect;Tables;false;transformValues;(Table,Function);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value" Table out = null; Table in = (Table)newWithTable_columnKey(source()); out = Tables.transformValues(in, null); sink(getTable_columnKey(out)); // $ hasValueFlow } { - // "com.google.common.collect;Tables;false;transformValues;(Table,Function);;MapValue of Argument[0];MapValue of ReturnValue;value", + // "com.google.common.collect;Tables;false;transformValues;(Table,Function);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value" Table out = null; - Table in = (Table)newWithMapValue(source()); + Table in = (Table)newWithTable_rowKey(source()); out = Tables.transformValues(in, null); - sink(getMapValue(out)); // $ hasValueFlow + sink(getTable_rowKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Tables;false;transpose;(Table);;MapValue of Argument[0];MapValue of ReturnValue;value" diff --git a/java/ql/test/library-tests/frameworks/guava/generated/collect/test.ql b/java/ql/test/library-tests/frameworks/guava/generated/collect/test.ql index bef55ed7c39..67709519db2 100644 --- a/java/ql/test/library-tests/frameworks/guava/generated/collect/test.ql +++ b/java/ql/test/library-tests/frameworks/guava/generated/collect/test.ql @@ -9,13 +9,20 @@ class SummaryModelTest extends SummaryModelCsv { row = [ //"package;type;overrides;name;signature;ext;inputspec;outputspec;kind", - "generatedtest;Methods;false;newWithElement;;;Argument[0];Element of ReturnValue;value", - "generatedtest;Methods;false;newWithMapKey;;;Argument[0];MapKey of ReturnValue;value", - "generatedtest;Methods;false;newWithMapValue;;;Argument[0];MapValue of ReturnValue;value", - "generatedtest;Methods;false;newWithTable_rowKey;;;Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value", - "generatedtest;Methods;false;newWithTable_columnKey;;;Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value", - "generatedtest;Methods;false;newWithMapDifference_left;;;Argument[0];SyntheticField[com.google.common.collect.MapDifference.left] of ReturnValue;value", - "generatedtest;Methods;false;newWithMapDifference_right;;;Argument[0];SyntheticField[com.google.common.collect.MapDifference.right] of ReturnValue;value" + "generatedtest;Test;false;newWithElement;;;Argument[0];Element of ReturnValue;value", + "generatedtest;Test;false;getElement;;;Element of Argument[0];ReturnValue;value", + "generatedtest;Test;false;newWithMapKey;;;Argument[0];MapKey of ReturnValue;value", + "generatedtest;Test;false;getMapKey;;;MapKey of Argument[0];ReturnValue;value", + "generatedtest;Test;false;newWithMapValue;;;Argument[0];MapValue of ReturnValue;value", + "generatedtest;Test;false;getMapValue;;;MapValue of Argument[0];ReturnValue;value", + "generatedtest;Test;false;newWithTable_rowKey;;;Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value", + "generatedtest;Test;false;getTable_rowKey;;;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];ReturnValue;value", + "generatedtest;Test;false;newWithTable_columnKey;;;Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value", + "generatedtest;Test;false;getTable_columnKey;;;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];ReturnValue;value", + "generatedtest;Test;false;newWithMapDifference_left;;;Argument[0];SyntheticField[com.google.common.collect.MapDifference.left] of ReturnValue;value", + "generatedtest;Test;false;getMapDifference_left;;;SyntheticField[com.google.common.collect.MapDifference.left] of Argument[0];ReturnValue;value", + "generatedtest;Test;false;newWithMapDifference_right;;;Argument[0];SyntheticField[com.google.common.collect.MapDifference.right] of ReturnValue;value", + "generatedtest;Test;false;getMapDifference_right;;;SyntheticField[com.google.common.collect.MapDifference.right] of Argument[0];ReturnValue;value" ] } } @@ -30,8 +37,6 @@ class ValueFlowConf extends DataFlow::Configuration { override predicate isSink(DataFlow::Node n) { n.asExpr().(Argument).getCall().getCallee().hasName("sink") } - - override int fieldFlowBranchLimit() { result = 10 } } class TaintFlowConf extends TaintTracking::Configuration { From ef5bf87672e349cd55573ac64b5a2729cbd47dee Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Tue, 14 Sep 2021 11:18:37 +0100 Subject: [PATCH 495/741] [Test gen] Distinguish default support methods --- java/ql/src/utils/FlowTestCase.qll | 12 +++++++++--- java/ql/src/utils/FlowTestCaseSupportMethods.qll | 12 ++++++------ 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/java/ql/src/utils/FlowTestCase.qll b/java/ql/src/utils/FlowTestCase.qll index 5bf5517f4e5..4d12f91c812 100644 --- a/java/ql/src/utils/FlowTestCase.qll +++ b/java/ql/src/utils/FlowTestCase.qll @@ -257,9 +257,15 @@ class TestCase extends TTestCase { if componentStack = baseOutput then result = "out" else - result = - SupportMethod::getMethodForContent(componentStack) - .getCall(this.getOutput(componentStack.tail())) + if componentStack.tail() = baseOutput + then + result = + SupportMethod::getMethodFor(this.getOutputType(), componentStack) + .getCall(this.getOutput(componentStack.tail())) + else + result = + SupportMethod::getMethodForContent(componentStack) + .getCall(this.getOutput(componentStack.tail())) ) } diff --git a/java/ql/src/utils/FlowTestCaseSupportMethods.qll b/java/ql/src/utils/FlowTestCaseSupportMethods.qll index fd19f555f79..1e12338d908 100644 --- a/java/ql/src/utils/FlowTestCaseSupportMethods.qll +++ b/java/ql/src/utils/FlowTestCaseSupportMethods.qll @@ -145,7 +145,7 @@ private class DefaultGetMethod extends GetMethod { DefaultGetMethod() { this = "DefaultGet" + contentToken(c) } - string getName() { result = "get" + contentToken(c) } + string getName() { result = "get" + contentToken(c) + "Default" } override int getPriority() { result = 999 } @@ -159,12 +159,12 @@ private class DefaultGetMethod extends GetMethod { override string getCall(string arg) { result = this.getName() + "(" + arg + ")" } override string getDefinition() { - result = "Object get" + contentToken(c) + "(Object container) { return null; }" + result = "Object get" + contentToken(c) + "Default(Object container) { return null; }" } override string getCsvModel() { result = - "generatedtest;Test;false;" + this.getName() + ";;;" + + "generatedtest;Test;false;" + this.getName() + ";(Object);;" + getComponentSpec(SummaryComponent::content(c)) + " of Argument[0];ReturnValue;value" } } @@ -285,7 +285,7 @@ private class DefaultGenMethod extends GenMethod { DefaultGenMethod() { this = "DefaultGen" + contentToken(c) } - string getName() { result = "newWith" + contentToken(c) } + string getName() { result = "newWith" + contentToken(c) + "Default" } override int getPriority() { result = 999 } @@ -299,12 +299,12 @@ private class DefaultGenMethod extends GenMethod { override string getCall(string arg) { result = this.getName() + "(" + arg + ")" } override string getDefinition() { - result = "Object newWith" + contentToken(c) + "(Object element) { return null; }" + result = "Object newWith" + contentToken(c) + "Default(Object element) { return null; }" } override string getCsvModel() { result = - "generatedtest;Test;false;" + this.getName() + ";;;Argument[0];" + + "generatedtest;Test;false;" + this.getName() + ";(Object);;Argument[0];" + getComponentSpec(SummaryComponent::content(c)) + " of ReturnValue;value" } } From 54dbd7c0bd54376eacefecea42ac2032169cd17a Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Tue, 14 Sep 2021 12:50:18 +0100 Subject: [PATCH 496/741] [Test gen] Add more support method implementations --- .../src/utils/FlowTestCaseSupportMethods.qll | 93 +++++++++++++++++-- 1 file changed, 86 insertions(+), 7 deletions(-) diff --git a/java/ql/src/utils/FlowTestCaseSupportMethods.qll b/java/ql/src/utils/FlowTestCaseSupportMethods.qll index 1e12338d908..8d465efd4fb 100644 --- a/java/ql/src/utils/FlowTestCaseSupportMethods.qll +++ b/java/ql/src/utils/FlowTestCaseSupportMethods.qll @@ -201,6 +201,22 @@ private class IteratorGetMethod extends GetMethod { override string getCall(string arg) { result = "getElement(" + arg + ")" } } +private class EnumerationGetMethod extends GetMethod { + EnumerationGetMethod() { this = "enumerationgetmethod" } + + override predicate appliesTo(Type t, Content c) { + t.(RefType).getASourceSupertype*().hasQualifiedName("java.util", "Enumeration") and + c instanceof CollectionContent + } + + override string getDefinition() { + result = " T getElement(Enumeration it) { return it.nextElement(); }" + } + + bindingset[arg] + override string getCall(string arg) { result = "getElement(" + arg + ")" } +} + private class OptionalGetMethod extends GetMethod { OptionalGetMethod() { this = "optionalgetmethod" } @@ -215,8 +231,8 @@ private class OptionalGetMethod extends GetMethod { override string getCall(string arg) { result = "getElement(" + arg + ")" } } -private class MapGetKeyMethod extends GetMethod { - MapGetKeyMethod() { this = "mapgetkeymethod" } +private class MapGetKeytMethod extends GetMethod { + MapGetKeytMethod() { this = "mapgetkeymethod" } override predicate appliesTo(Type t, Content c) { t.(RefType).getASourceSupertype*().hasQualifiedName("java.util", "Map") and @@ -231,8 +247,20 @@ private class MapGetKeyMethod extends GetMethod { override string getCall(string arg) { result = "getMapKey(" + arg + ")" } } -private class MapValueGetMethod extends GetMethod { - MapValueGetMethod() { this = "MapValueGetMethod" } +private class MapEntryGetKeyMethod extends GetMethod { + MapEntryGetKeyMethod() { this = "mapentrygetkeymethod" } + + override predicate appliesTo(Type t, Content c) { + t.(RefType).getASourceSupertype*().hasQualifiedName("java.util", "Map$Entry") and + c instanceof MapKeyContent + } + + bindingset[arg] + override string getCall(string arg) { result = arg + ".getKey()" } +} + +private class MapGetValueMethod extends GetMethod { + MapGetValueMethod() { this = "MapGetValueMethod" } override predicate appliesTo(Type t, Content c) { t.(RefType).getASourceSupertype*().hasQualifiedName("java.util", "Map") and @@ -247,6 +275,18 @@ private class MapValueGetMethod extends GetMethod { override string getCall(string arg) { result = "getMapValue(" + arg + ")" } } +private class MapEntryGetValueMethod extends GetMethod { + MapEntryGetValueMethod() { this = "mapentrygetvaluemethod" } + + override predicate appliesTo(Type t, Content c) { + t.(RefType).getASourceSupertype*().hasQualifiedName("java.util", "Map$Entry") and + c instanceof MapValueContent + } + + bindingset[arg] + override string getCall(string arg) { result = arg + ".getValue()" } +} + private class ArrayGetMethod extends GetMethod { ArrayGetMethod() { this = "arraygetmethod" } @@ -314,7 +354,8 @@ private class ListGenMethod extends GenMethod { override predicate appliesTo(Type t, Content c) { exists(GenericType list | list.hasQualifiedName("java.util", "List") | - t = list or list.getAParameterizedType().getASupertype*() = t + t.getErasure() = list.getASourceSupertype*().getErasure() or // cover things like Iterable and Collection + list.getAParameterizedType().getASupertype*() = t ) and c instanceof CollectionContent } @@ -327,8 +368,8 @@ private class OptionalGenMethod extends GenMethod { OptionalGenMethod() { this = "optionalgenmethod" } override predicate appliesTo(Type t, Content c) { - exists(GenericType list | list.hasQualifiedName("java.util", "List") | - list.getAParameterizedType().getASupertype*() = t + exists(GenericType op | op.hasQualifiedName("java.util", "Optional") | + op.getAParameterizedType().getASupertype*() = t ) and c instanceof CollectionContent } @@ -351,6 +392,25 @@ private class MapGenKeyMethod extends GenMethod { override string getCall(string arg) { result = "Map.of(" + arg + ", null)" } } +private class MapEntryGenKeyMethod extends GenMethod { + MapEntryGenKeyMethod() { this = "mapentrygenkeymethod" } + + override predicate appliesTo(Type t, Content c) { + exists(GenericType map | map.hasQualifiedName("java.util", "Map$Entry") | + map.getAParameterizedType().getASupertype*() = t + ) and + c instanceof MapKeyContent + } + + override string getDefinition() { + result = + " Map.Entry newEntryWithMapKey(K key) { return Map.of(key, null).entrySet().iterator().next(); }" + } + + bindingset[arg] + override string getCall(string arg) { result = "newEntryWithMapKey(" + arg + ")" } +} + private class MapGenValueMethod extends GenMethod { MapGenValueMethod() { this = "mapvaluegenmethod" } @@ -365,6 +425,25 @@ private class MapGenValueMethod extends GenMethod { override string getCall(string arg) { result = "Map.of(null, " + arg + ")" } } +private class MapEntryGenValueMethod extends GenMethod { + MapEntryGenValueMethod() { this = "mapentrygenvaluemethod" } + + override predicate appliesTo(Type t, Content c) { + exists(GenericType map | map.hasQualifiedName("java.util", "Map$Entry") | + map.getAParameterizedType().getASupertype*() = t + ) and + c instanceof MapValueContent + } + + override string getDefinition() { + result = + " Map.Entry newEntryWithMapValue(V value) { return Map.of(null, value).entrySet().iterator().next(); }" + } + + bindingset[arg] + override string getCall(string arg) { result = "newEntryWithMapValue(" + arg + ")" } +} + /** * Returns a cast to type `t` if `t` is not `java.lang.Object`, or an empty string otherwise. */ From 1111afc0313dd4c221bc4d6aad1151fd907ce886 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Tue, 14 Sep 2021 12:51:07 +0100 Subject: [PATCH 497/741] Update tests for new support methods; fix bad model --- .../java/frameworks/guava/Collections.qll | 3 +- .../guava/generated/collect/Test.java | 1965 ++++++++--------- .../guava/generated/collect/test.ql | 28 +- 3 files changed, 979 insertions(+), 1017 deletions(-) diff --git a/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll b/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll index a223a99e886..1552f9474c2 100644 --- a/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll +++ b/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll @@ -117,8 +117,9 @@ private class GuavaCollectCsv extends SummaryModelCsv { "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Iterable);;MapValue of Element of Argument[0];MapValue of Argument[-1];value", "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Multimap);;MapKey of Argument[0];MapKey of Argument[-1];value", "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Multimap);;MapValue of Argument[0];MapValue of Argument[-1];value", - "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;;;Argument[0];MapKey of Argument[-1];value", + "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value", "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value", + "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Object,Object[]);;Argument[0];MapKey of Argument[-1];value", "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Object,Object[]);;ArrayElement of Argument[1];MapValue of Argument[-1];value", "com.google.common.collect;ImmutableTable$Builder;true;build;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value", "com.google.common.collect;ImmutableTable$Builder;true;build;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value", diff --git a/java/ql/test/library-tests/frameworks/guava/generated/collect/Test.java b/java/ql/test/library-tests/frameworks/guava/generated/collect/Test.java index 6e0a4d1aab2..98d24d6ecfc 100644 --- a/java/ql/test/library-tests/frameworks/guava/generated/collect/Test.java +++ b/java/ql/test/library-tests/frameworks/guava/generated/collect/Test.java @@ -92,24 +92,27 @@ import java.util.concurrent.PriorityBlockingQueue; public class Test { K getMapKey(Map map) { return map.keySet().iterator().next(); } + Map.Entry newEntryWithMapKey(K key) { return Map.of(key, null).entrySet().iterator().next(); } T getArrayElement(T[] array) { return array[0]; } + T getElement(Enumeration it) { return it.nextElement(); } T getElement(Iterable it) { return it.iterator().next(); } T getElement(Iterator it) { return it.next(); } + Map.Entry newEntryWithMapValue(V value) { return Map.of(null, value).entrySet().iterator().next(); } V getMapValue(Map map) { return map.get(null); } - Object getElement(Object container) { return null; } - Object getMapDifference_left(Object container) { return null; } - Object getMapDifference_right(Object container) { return null; } - Object getMapKey(Object container) { return null; } - Object getMapValue(Object container) { return null; } - Object getTable_columnKey(Object container) { return null; } - Object getTable_rowKey(Object container) { return null; } - Object newWithElement(Object element) { return null; } - Object newWithMapDifference_left(Object element) { return null; } - Object newWithMapDifference_right(Object element) { return null; } - Object newWithMapKey(Object element) { return null; } - Object newWithMapValue(Object element) { return null; } - Object newWithTable_columnKey(Object element) { return null; } - Object newWithTable_rowKey(Object element) { return null; } + Object getElementDefault(Object container) { return null; } + Object getMapDifference_leftDefault(Object container) { return null; } + Object getMapDifference_rightDefault(Object container) { return null; } + Object getMapKeyDefault(Object container) { return null; } + Object getMapValueDefault(Object container) { return null; } + Object getTable_columnKeyDefault(Object container) { return null; } + Object getTable_rowKeyDefault(Object container) { return null; } + Object newWithElementDefault(Object element) { return null; } + Object newWithMapDifference_leftDefault(Object element) { return null; } + Object newWithMapDifference_rightDefault(Object element) { return null; } + Object newWithMapKeyDefault(Object element) { return null; } + Object newWithMapValueDefault(Object element) { return null; } + Object newWithTable_columnKeyDefault(Object element) { return null; } + Object newWithTable_rowKeyDefault(Object element) { return null; } Object source() { return null; } void sink(Object o) { } @@ -118,30 +121,30 @@ public class Test { { // "com.google.common.collect;ArrayListMultimap;true;create;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value" ArrayListMultimap out = null; - Multimap in = (Multimap)newWithMapKey(source()); + Multimap in = (Multimap)newWithMapKeyDefault(source()); out = ArrayListMultimap.create(in); - sink(getMapKey(out)); // $ hasValueFlow + sink(getMapKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ArrayListMultimap;true;create;(Multimap);;MapValue of Argument[0];MapValue of ReturnValue;value" ArrayListMultimap out = null; - Multimap in = (Multimap)newWithMapValue(source()); + Multimap in = (Multimap)newWithMapValueDefault(source()); out = ArrayListMultimap.create(in); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ArrayTable;true;create;(Iterable,Iterable);;Element of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value" ArrayTable out = null; - Iterable in = (Iterable)newWithElement(source()); + Iterable in = (Iterable)List.of(source()); out = ArrayTable.create(in, null); - sink(getTable_rowKey(out)); // $ hasValueFlow + sink(getTable_rowKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ArrayTable;true;create;(Iterable,Iterable);;Element of Argument[1];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value" ArrayTable out = null; - Iterable in = (Iterable)newWithElement(source()); + Iterable in = (Iterable)List.of(source()); out = ArrayTable.create(null, in); - sink(getTable_columnKey(out)); // $ hasValueFlow + sink(getTable_columnKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;BiMap;true;forcePut;(Object,Object);;Argument[0];MapKey of Argument[-1];value" @@ -174,49 +177,49 @@ public class Test { { // "com.google.common.collect;BiMap;true;inverse;();;MapKey of Argument[-1];MapValue of ReturnValue;value" BiMap out = null; - HashBiMap in = (HashBiMap)newWithMapKey(source()); + HashBiMap in = (HashBiMap)newWithMapKeyDefault(source()); out = in.inverse(); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;BiMap;true;inverse;();;MapKey of Argument[-1];MapValue of ReturnValue;value" BiMap out = null; - BiMap in = (BiMap)newWithMapKey(source()); + BiMap in = (BiMap)newWithMapKeyDefault(source()); out = in.inverse(); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;BiMap;true;inverse;();;MapValue of Argument[-1];MapKey of ReturnValue;value" BiMap out = null; - HashBiMap in = (HashBiMap)newWithMapValue(source()); + HashBiMap in = (HashBiMap)newWithMapValueDefault(source()); out = in.inverse(); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;BiMap;true;inverse;();;MapValue of Argument[-1];MapKey of ReturnValue;value" BiMap out = null; - BiMap in = (BiMap)newWithMapValue(source()); + BiMap in = (BiMap)newWithMapValueDefault(source()); out = in.inverse(); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ClassToInstanceMap;true;getInstance;(Class);;MapValue of Argument[-1];ReturnValue;value" Object out = null; - MutableClassToInstanceMap in = (MutableClassToInstanceMap)newWithMapValue(source()); + MutableClassToInstanceMap in = (MutableClassToInstanceMap)newWithMapValueDefault(source()); out = in.getInstance(null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ClassToInstanceMap;true;getInstance;(Class);;MapValue of Argument[-1];ReturnValue;value" Object out = null; - ImmutableClassToInstanceMap in = (ImmutableClassToInstanceMap)newWithMapValue(source()); + ImmutableClassToInstanceMap in = (ImmutableClassToInstanceMap)newWithMapValueDefault(source()); out = in.getInstance(null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ClassToInstanceMap;true;getInstance;(Class);;MapValue of Argument[-1];ReturnValue;value" Object out = null; - ClassToInstanceMap in = (ClassToInstanceMap)newWithMapValue(source()); + ClassToInstanceMap in = (ClassToInstanceMap)newWithMapValueDefault(source()); out = in.getInstance(null); sink(out); // $ hasValueFlow } @@ -244,28 +247,28 @@ public class Test { { // "com.google.common.collect;ClassToInstanceMap;true;putInstance;(Class,Object);;MapValue of Argument[-1];ReturnValue;value" Object out = null; - MutableClassToInstanceMap in = (MutableClassToInstanceMap)newWithMapValue(source()); + MutableClassToInstanceMap in = (MutableClassToInstanceMap)newWithMapValueDefault(source()); out = in.putInstance(null, null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ClassToInstanceMap;true;putInstance;(Class,Object);;MapValue of Argument[-1];ReturnValue;value" Object out = null; - ImmutableClassToInstanceMap in = (ImmutableClassToInstanceMap)newWithMapValue(source()); + ImmutableClassToInstanceMap in = (ImmutableClassToInstanceMap)newWithMapValueDefault(source()); out = in.putInstance(null, null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ClassToInstanceMap;true;putInstance;(Class,Object);;MapValue of Argument[-1];ReturnValue;value" Object out = null; - ClassToInstanceMap in = (ClassToInstanceMap)newWithMapValue(source()); + ClassToInstanceMap in = (ClassToInstanceMap)newWithMapValueDefault(source()); out = in.putInstance(null, null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;Collections2;false;filter;(Collection,Predicate);;Element of Argument[0];Element of ReturnValue;value" Collection out = null; - Collection in = (Collection)newWithElement(source()); + Collection in = (Collection)List.of(source()); out = Collections2.filter(in, null); sink(getElement(out)); // $ hasValueFlow } @@ -274,49 +277,49 @@ public class Test { Collection out = null; Iterable in = (Iterable)List.of(source()); out = Collections2.orderedPermutations(in); - sink(getElement(getElement(out))); // $ hasValueFlow + sink(getElementDefault(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Collections2;false;orderedPermutations;(Iterable,Comparator);;Element of Argument[0];Element of Element of ReturnValue;value" Collection out = null; Iterable in = (Iterable)List.of(source()); out = Collections2.orderedPermutations(in, null); - sink(getElement(getElement(out))); // $ hasValueFlow + sink(getElementDefault(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Collections2;false;permutations;(Collection);;Element of Argument[0];Element of Element of ReturnValue;value" Collection out = null; Collection in = (Collection)List.of(source()); out = Collections2.permutations(in); - sink(getElement(getElement(out))); // $ hasValueFlow + sink(getElementDefault(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;ConcurrentHashMultiset;true;create;(Iterable);;Element of Argument[0];Element of ReturnValue;value" ConcurrentHashMultiset out = null; - Iterable in = (Iterable)newWithElement(source()); + Iterable in = (Iterable)List.of(source()); out = ConcurrentHashMultiset.create(in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;HashBasedTable;true;create;(Table);;MapValue of Argument[0];MapValue of ReturnValue;value" HashBasedTable out = null; - Table in = (Table)newWithMapValue(source()); + Table in = (Table)newWithMapValueDefault(source()); out = HashBasedTable.create(in); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;HashBasedTable;true;create;(Table);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value" HashBasedTable out = null; - Table in = (Table)newWithTable_columnKey(source()); + Table in = (Table)newWithTable_columnKeyDefault(source()); out = HashBasedTable.create(in); - sink(getTable_columnKey(out)); // $ hasValueFlow + sink(getTable_columnKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;HashBasedTable;true;create;(Table);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value" HashBasedTable out = null; - Table in = (Table)newWithTable_rowKey(source()); + Table in = (Table)newWithTable_rowKeyDefault(source()); out = HashBasedTable.create(in); - sink(getTable_rowKey(out)); // $ hasValueFlow + sink(getTable_rowKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;HashBiMap;true;create;(Map);;MapKey of Argument[0];MapKey of ReturnValue;value" @@ -335,21 +338,21 @@ public class Test { { // "com.google.common.collect;HashMultimap;true;create;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value" HashMultimap out = null; - Multimap in = (Multimap)newWithMapKey(source()); + Multimap in = (Multimap)newWithMapKeyDefault(source()); out = HashMultimap.create(in); - sink(getMapKey(out)); // $ hasValueFlow + sink(getMapKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;HashMultimap;true;create;(Multimap);;MapValue of Argument[0];MapValue of ReturnValue;value" HashMultimap out = null; - Multimap in = (Multimap)newWithMapValue(source()); + Multimap in = (Multimap)newWithMapValueDefault(source()); out = HashMultimap.create(in); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;HashMultiset;true;create;(Iterable);;Element of Argument[0];Element of ReturnValue;value" HashMultiset out = null; - Iterable in = (Iterable)newWithElement(source()); + Iterable in = (Iterable)List.of(source()); out = HashMultiset.create(in); sink(getElement(out)); // $ hasValueFlow } @@ -386,84 +389,84 @@ public class Test { ImmutableSortedSet.Builder out = null; Object in = (Object)source(); out.add(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElementDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;(Object);;Argument[0];Element of Argument[-1];value" ImmutableSortedMultiset.Builder out = null; Object in = (Object)source(); out.add(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElementDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;(Object);;Argument[0];Element of Argument[-1];value" ImmutableSet.Builder out = null; Object in = (Object)source(); out.add(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElementDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;(Object);;Argument[0];Element of Argument[-1];value" ImmutableMultiset.Builder out = null; Object in = (Object)source(); out.add(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElementDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;(Object);;Argument[0];Element of Argument[-1];value" ImmutableList.Builder out = null; Object in = (Object)source(); out.add(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElementDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;(Object);;Argument[0];Element of Argument[-1];value" ImmutableCollection.Builder out = null; Object in = (Object)source(); out.add(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElementDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;(Object[]);;ArrayElement of Argument[0];Element of Argument[-1];value" ImmutableSortedSet.Builder out = null; Object[] in = (Object[])new Object[]{source()}; out.add(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElementDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;(Object[]);;ArrayElement of Argument[0];Element of Argument[-1];value" ImmutableSortedMultiset.Builder out = null; Object[] in = (Object[])new Object[]{source()}; out.add(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElementDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;(Object[]);;ArrayElement of Argument[0];Element of Argument[-1];value" ImmutableSet.Builder out = null; Object[] in = (Object[])new Object[]{source()}; out.add(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElementDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;(Object[]);;ArrayElement of Argument[0];Element of Argument[-1];value" ImmutableMultiset.Builder out = null; Object[] in = (Object[])new Object[]{source()}; out.add(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElementDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;(Object[]);;ArrayElement of Argument[0];Element of Argument[-1];value" ImmutableList.Builder out = null; Object[] in = (Object[])new Object[]{source()}; out.add(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElementDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;(Object[]);;ArrayElement of Argument[0];Element of Argument[-1];value" ImmutableCollection.Builder out = null; Object[] in = (Object[])new Object[]{source()}; out.add(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElementDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;;;Argument[-1];ReturnValue;value" @@ -552,86 +555,86 @@ public class Test { { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;(Iterable);;Element of Argument[0];Element of Argument[-1];value" ImmutableSortedSet.Builder out = null; - Iterable in = (Iterable)newWithElement(source()); + Iterable in = (Iterable)List.of(source()); out.addAll(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElementDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;(Iterable);;Element of Argument[0];Element of Argument[-1];value" ImmutableSortedMultiset.Builder out = null; - Iterable in = (Iterable)newWithElement(source()); + Iterable in = (Iterable)List.of(source()); out.addAll(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElementDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;(Iterable);;Element of Argument[0];Element of Argument[-1];value" ImmutableSet.Builder out = null; - Iterable in = (Iterable)newWithElement(source()); + Iterable in = (Iterable)List.of(source()); out.addAll(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElementDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;(Iterable);;Element of Argument[0];Element of Argument[-1];value" ImmutableMultiset.Builder out = null; - Iterable in = (Iterable)newWithElement(source()); + Iterable in = (Iterable)List.of(source()); out.addAll(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElementDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;(Iterable);;Element of Argument[0];Element of Argument[-1];value" ImmutableList.Builder out = null; Iterable in = (Iterable)List.of(source()); out.addAll(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElementDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;(Iterable);;Element of Argument[0];Element of Argument[-1];value" ImmutableCollection.Builder out = null; - Iterable in = (Iterable)newWithElement(source()); + Iterable in = (Iterable)List.of(source()); out.addAll(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElementDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;(Iterator);;Element of Argument[0];Element of Argument[-1];value" ImmutableSortedSet.Builder out = null; - Iterator in = (Iterator)newWithElement(source()); + Iterator in = (Iterator)newWithElementDefault(source()); out.addAll(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElementDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;(Iterator);;Element of Argument[0];Element of Argument[-1];value" ImmutableSortedMultiset.Builder out = null; - Iterator in = (Iterator)newWithElement(source()); + Iterator in = (Iterator)newWithElementDefault(source()); out.addAll(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElementDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;(Iterator);;Element of Argument[0];Element of Argument[-1];value" ImmutableSet.Builder out = null; - Iterator in = (Iterator)newWithElement(source()); + Iterator in = (Iterator)newWithElementDefault(source()); out.addAll(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElementDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;(Iterator);;Element of Argument[0];Element of Argument[-1];value" ImmutableMultiset.Builder out = null; - Iterator in = (Iterator)newWithElement(source()); + Iterator in = (Iterator)newWithElementDefault(source()); out.addAll(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElementDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;(Iterator);;Element of Argument[0];Element of Argument[-1];value" ImmutableList.Builder out = null; - Iterator in = (Iterator)newWithElement(source()); + Iterator in = (Iterator)newWithElementDefault(source()); out.addAll(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElementDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;(Iterator);;Element of Argument[0];Element of Argument[-1];value" ImmutableCollection.Builder out = null; - Iterator in = (Iterator)newWithElement(source()); + Iterator in = (Iterator)newWithElementDefault(source()); out.addAll(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElementDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;;;Argument[-1];ReturnValue;value" @@ -720,70 +723,70 @@ public class Test { { // "com.google.common.collect;ImmutableCollection$Builder;true;build;();;Element of Argument[-1];Element of ReturnValue;value" ImmutableSortedSet out = null; - ImmutableSortedSet.Builder in = (ImmutableSortedSet.Builder)newWithElement(source()); + ImmutableSortedSet.Builder in = (ImmutableSortedSet.Builder)newWithElementDefault(source()); out = in.build(); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;build;();;Element of Argument[-1];Element of ReturnValue;value" ImmutableSortedMultiset out = null; - ImmutableSortedMultiset.Builder in = (ImmutableSortedMultiset.Builder)newWithElement(source()); + ImmutableSortedMultiset.Builder in = (ImmutableSortedMultiset.Builder)newWithElementDefault(source()); out = in.build(); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;build;();;Element of Argument[-1];Element of ReturnValue;value" ImmutableSet out = null; - ImmutableSet.Builder in = (ImmutableSet.Builder)newWithElement(source()); + ImmutableSet.Builder in = (ImmutableSet.Builder)newWithElementDefault(source()); out = in.build(); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;build;();;Element of Argument[-1];Element of ReturnValue;value" ImmutableMultiset out = null; - ImmutableMultiset.Builder in = (ImmutableMultiset.Builder)newWithElement(source()); + ImmutableMultiset.Builder in = (ImmutableMultiset.Builder)newWithElementDefault(source()); out = in.build(); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;build;();;Element of Argument[-1];Element of ReturnValue;value" ImmutableList out = null; - ImmutableList.Builder in = (ImmutableList.Builder)newWithElement(source()); + ImmutableList.Builder in = (ImmutableList.Builder)newWithElementDefault(source()); out = in.build(); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;build;();;Element of Argument[-1];Element of ReturnValue;value" ImmutableCollection out = null; - ImmutableCollection.Builder in = (ImmutableCollection.Builder)newWithElement(source()); + ImmutableCollection.Builder in = (ImmutableCollection.Builder)newWithElementDefault(source()); out = in.build(); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection;true;asList;();;Element of Argument[-1];Element of ReturnValue;value" ImmutableList out = null; - ImmutableSet in = (ImmutableSet)newWithElement(source()); + ImmutableSet in = (ImmutableSet)newWithElementDefault(source()); out = in.asList(); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection;true;asList;();;Element of Argument[-1];Element of ReturnValue;value" ImmutableList out = null; - ImmutableMultiset in = (ImmutableMultiset)newWithElement(source()); + ImmutableMultiset in = (ImmutableMultiset)newWithElementDefault(source()); out = in.asList(); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection;true;asList;();;Element of Argument[-1];Element of ReturnValue;value" ImmutableList out = null; - ImmutableList in = (ImmutableList)newWithElement(source()); + ImmutableList in = (ImmutableList)newWithElementDefault(source()); out = in.asList(); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection;true;asList;();;Element of Argument[-1];Element of ReturnValue;value" ImmutableList out = null; - ImmutableCollection in = (ImmutableCollection)newWithElement(source()); + ImmutableCollection in = (ImmutableCollection)newWithElementDefault(source()); out = in.asList(); sink(getElement(out)); // $ hasValueFlow } @@ -804,7 +807,7 @@ public class Test { { // "com.google.common.collect;ImmutableList;true;copyOf;(Iterator);;Element of Argument[0];Element of ReturnValue;value" ImmutableList out = null; - Iterator in = (Iterator)newWithElement(source()); + Iterator in = (Iterator)newWithElementDefault(source()); out = ImmutableList.copyOf(in); sink(getElement(out)); // $ hasValueFlow } @@ -1371,7 +1374,7 @@ public class Test { { // "com.google.common.collect;ImmutableList;true;reverse;();;Element of Argument[-1];Element of ReturnValue;value" ImmutableList out = null; - ImmutableList in = (ImmutableList)newWithElement(source()); + ImmutableList in = (ImmutableList)newWithElementDefault(source()); out = in.reverse(); sink(getElement(out)); // $ hasValueFlow } @@ -1392,28 +1395,28 @@ public class Test { { // "com.google.common.collect;ImmutableMap$Builder;true;build;();;MapKey of Argument[-1];MapKey of ReturnValue;value" ImmutableSortedMap out = null; - ImmutableSortedMap.Builder in = (ImmutableSortedMap.Builder)newWithMapKey(source()); + ImmutableSortedMap.Builder in = (ImmutableSortedMap.Builder)newWithMapKeyDefault(source()); out = in.build(); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;build;();;MapKey of Argument[-1];MapKey of ReturnValue;value" ImmutableMap out = null; - ImmutableMap.Builder in = (ImmutableMap.Builder)newWithMapKey(source()); + ImmutableMap.Builder in = (ImmutableMap.Builder)newWithMapKeyDefault(source()); out = in.build(); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;build;();;MapValue of Argument[-1];MapValue of ReturnValue;value" ImmutableSortedMap out = null; - ImmutableSortedMap.Builder in = (ImmutableSortedMap.Builder)newWithMapValue(source()); + ImmutableSortedMap.Builder in = (ImmutableSortedMap.Builder)newWithMapValueDefault(source()); out = in.build(); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;build;();;MapValue of Argument[-1];MapValue of ReturnValue;value" ImmutableMap out = null; - ImmutableMap.Builder in = (ImmutableMap.Builder)newWithMapValue(source()); + ImmutableMap.Builder in = (ImmutableMap.Builder)newWithMapValueDefault(source()); out = in.build(); sink(getMapValue(out)); // $ hasValueFlow } @@ -1434,58 +1437,58 @@ public class Test { { // "com.google.common.collect;ImmutableMap$Builder;true;put;(Entry);;MapKey of Argument[0];MapKey of Argument[-1];value" ImmutableSortedMap.Builder out = null; - Map.Entry in = (Map.Entry)newWithMapKey(source()); + Map.Entry in = (Map.Entry)newEntryWithMapKey(source()); out.put(in); - sink(getMapKey(out)); // $ hasValueFlow + sink(getMapKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;put;(Entry);;MapKey of Argument[0];MapKey of Argument[-1];value" ImmutableMap.Builder out = null; - Map.Entry in = (Map.Entry)newWithMapKey(source()); + Map.Entry in = (Map.Entry)newEntryWithMapKey(source()); out.put(in); - sink(getMapKey(out)); // $ hasValueFlow + sink(getMapKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;put;(Entry);;MapValue of Argument[0];MapValue of Argument[-1];value" ImmutableSortedMap.Builder out = null; - Map.Entry in = (Map.Entry)newWithMapValue(source()); + Map.Entry in = (Map.Entry)newEntryWithMapValue(source()); out.put(in); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;put;(Entry);;MapValue of Argument[0];MapValue of Argument[-1];value" ImmutableMap.Builder out = null; - Map.Entry in = (Map.Entry)newWithMapValue(source()); + Map.Entry in = (Map.Entry)newEntryWithMapValue(source()); out.put(in); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;put;(Object,Object);;Argument[0];MapKey of Argument[-1];value" ImmutableSortedMap.Builder out = null; Object in = (Object)source(); out.put(in, null); - sink(getMapKey(out)); // $ hasValueFlow + sink(getMapKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;put;(Object,Object);;Argument[0];MapKey of Argument[-1];value" ImmutableMap.Builder out = null; Object in = (Object)source(); out.put(in, null); - sink(getMapKey(out)); // $ hasValueFlow + sink(getMapKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;put;(Object,Object);;Argument[1];MapValue of Argument[-1];value" ImmutableSortedMap.Builder out = null; Object in = (Object)source(); out.put(null, in); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;put;(Object,Object);;Argument[1];MapValue of Argument[-1];value" ImmutableMap.Builder out = null; Object in = (Object)source(); out.put(null, in); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;put;;;Argument[-1];ReturnValue;value" @@ -1518,58 +1521,58 @@ public class Test { { // "com.google.common.collect;ImmutableMap$Builder;true;putAll;(Iterable);;MapKey of Element of Argument[0];MapKey of Argument[-1];value" ImmutableSortedMap.Builder out = null; - Iterable in = (Iterable)newWithElement(newWithMapKey(source())); + Iterable in = (Iterable)List.of(newWithMapKeyDefault(source())); out.putAll(in); - sink(getMapKey(out)); // $ hasValueFlow + sink(getMapKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;putAll;(Iterable);;MapKey of Element of Argument[0];MapKey of Argument[-1];value" ImmutableMap.Builder out = null; - Iterable in = (Iterable)newWithElement(newWithMapKey(source())); + Iterable in = (Iterable)List.of(newWithMapKeyDefault(source())); out.putAll(in); - sink(getMapKey(out)); // $ hasValueFlow + sink(getMapKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;putAll;(Iterable);;MapValue of Element of Argument[0];MapValue of Argument[-1];value" ImmutableSortedMap.Builder out = null; - Iterable in = (Iterable)newWithElement(newWithMapValue(source())); + Iterable in = (Iterable)List.of(newWithMapValueDefault(source())); out.putAll(in); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;putAll;(Iterable);;MapValue of Element of Argument[0];MapValue of Argument[-1];value" ImmutableMap.Builder out = null; - Iterable in = (Iterable)newWithElement(newWithMapValue(source())); + Iterable in = (Iterable)List.of(newWithMapValueDefault(source())); out.putAll(in); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;putAll;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value" ImmutableSortedMap.Builder out = null; Map in = (Map)Map.of(source(), null); out.putAll(in); - sink(getMapKey(out)); // $ hasValueFlow + sink(getMapKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;putAll;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value" ImmutableMap.Builder out = null; Map in = (Map)Map.of(source(), null); out.putAll(in); - sink(getMapKey(out)); // $ hasValueFlow + sink(getMapKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;putAll;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value" ImmutableSortedMap.Builder out = null; Map in = (Map)Map.of(null, source()); out.putAll(in); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;putAll;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value" ImmutableMap.Builder out = null; Map in = (Map)Map.of(null, source()); out.putAll(in); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;putAll;;;Argument[-1];ReturnValue;value" @@ -1602,14 +1605,14 @@ public class Test { { // "com.google.common.collect;ImmutableMap;true;copyOf;(Iterable);;MapKey of Element of Argument[0];MapKey of ReturnValue;value" ImmutableMap out = null; - Iterable in = (Iterable)newWithElement(newWithMapKey(source())); + Iterable in = (Iterable)List.of(newWithMapKeyDefault(source())); out = ImmutableMap.copyOf(in); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap;true;copyOf;(Iterable);;MapValue of Element of Argument[0];MapValue of ReturnValue;value" ImmutableMap out = null; - Iterable in = (Iterable)newWithElement(newWithMapValue(source())); + Iterable in = (Iterable)List.of(newWithMapValueDefault(source())); out = ImmutableMap.copyOf(in); sink(getMapValue(out)); // $ hasValueFlow } @@ -1840,44 +1843,44 @@ public class Test { { // "com.google.common.collect;ImmutableMultimap$Builder;true;build;();;MapKey of Argument[-1];MapKey of ReturnValue;value" ImmutableSetMultimap out = null; - ImmutableSetMultimap.Builder in = (ImmutableSetMultimap.Builder)newWithMapKey(source()); + ImmutableSetMultimap.Builder in = (ImmutableSetMultimap.Builder)newWithMapKeyDefault(source()); out = in.build(); - sink(getMapKey(out)); // $ hasValueFlow + sink(getMapKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;build;();;MapKey of Argument[-1];MapKey of ReturnValue;value" ImmutableMultimap out = null; - ImmutableMultimap.Builder in = (ImmutableMultimap.Builder)newWithMapKey(source()); + ImmutableMultimap.Builder in = (ImmutableMultimap.Builder)newWithMapKeyDefault(source()); out = in.build(); - sink(getMapKey(out)); // $ hasValueFlow + sink(getMapKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;build;();;MapKey of Argument[-1];MapKey of ReturnValue;value" ImmutableListMultimap out = null; - ImmutableListMultimap.Builder in = (ImmutableListMultimap.Builder)newWithMapKey(source()); + ImmutableListMultimap.Builder in = (ImmutableListMultimap.Builder)newWithMapKeyDefault(source()); out = in.build(); - sink(getMapKey(out)); // $ hasValueFlow + sink(getMapKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;build;();;MapValue of Argument[-1];MapValue of ReturnValue;value" ImmutableSetMultimap out = null; - ImmutableSetMultimap.Builder in = (ImmutableSetMultimap.Builder)newWithMapValue(source()); + ImmutableSetMultimap.Builder in = (ImmutableSetMultimap.Builder)newWithMapValueDefault(source()); out = in.build(); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;build;();;MapValue of Argument[-1];MapValue of ReturnValue;value" ImmutableMultimap out = null; - ImmutableMultimap.Builder in = (ImmutableMultimap.Builder)newWithMapValue(source()); + ImmutableMultimap.Builder in = (ImmutableMultimap.Builder)newWithMapValueDefault(source()); out = in.build(); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;build;();;MapValue of Argument[-1];MapValue of ReturnValue;value" ImmutableListMultimap out = null; - ImmutableListMultimap.Builder in = (ImmutableListMultimap.Builder)newWithMapValue(source()); + ImmutableListMultimap.Builder in = (ImmutableListMultimap.Builder)newWithMapValueDefault(source()); out = in.build(); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;orderKeysBy;(Comparator);;Argument[-1];ReturnValue;value" @@ -1924,86 +1927,86 @@ public class Test { { // "com.google.common.collect;ImmutableMultimap$Builder;true;put;(Entry);;MapKey of Argument[0];MapKey of Argument[-1];value" ImmutableSetMultimap.Builder out = null; - Map.Entry in = (Map.Entry)newWithMapKey(source()); + Map.Entry in = (Map.Entry)newEntryWithMapKey(source()); out.put(in); - sink(getMapKey(out)); // $ hasValueFlow + sink(getMapKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;put;(Entry);;MapKey of Argument[0];MapKey of Argument[-1];value" ImmutableMultimap.Builder out = null; - Map.Entry in = (Map.Entry)newWithMapKey(source()); + Map.Entry in = (Map.Entry)newEntryWithMapKey(source()); out.put(in); - sink(getMapKey(out)); // $ hasValueFlow + sink(getMapKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;put;(Entry);;MapKey of Argument[0];MapKey of Argument[-1];value" ImmutableListMultimap.Builder out = null; - Map.Entry in = (Map.Entry)newWithMapKey(source()); + Map.Entry in = (Map.Entry)newEntryWithMapKey(source()); out.put(in); - sink(getMapKey(out)); // $ hasValueFlow + sink(getMapKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;put;(Entry);;MapValue of Argument[0];MapValue of Argument[-1];value" ImmutableSetMultimap.Builder out = null; - Map.Entry in = (Map.Entry)newWithMapValue(source()); + Map.Entry in = (Map.Entry)newEntryWithMapValue(source()); out.put(in); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;put;(Entry);;MapValue of Argument[0];MapValue of Argument[-1];value" ImmutableMultimap.Builder out = null; - Map.Entry in = (Map.Entry)newWithMapValue(source()); + Map.Entry in = (Map.Entry)newEntryWithMapValue(source()); out.put(in); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;put;(Entry);;MapValue of Argument[0];MapValue of Argument[-1];value" ImmutableListMultimap.Builder out = null; - Map.Entry in = (Map.Entry)newWithMapValue(source()); + Map.Entry in = (Map.Entry)newEntryWithMapValue(source()); out.put(in); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;put;(Object,Object);;Argument[0];MapKey of Argument[-1];value" ImmutableSetMultimap.Builder out = null; Object in = (Object)source(); out.put(in, null); - sink(getMapKey(out)); // $ hasValueFlow + sink(getMapKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;put;(Object,Object);;Argument[0];MapKey of Argument[-1];value" ImmutableMultimap.Builder out = null; Object in = (Object)source(); out.put(in, null); - sink(getMapKey(out)); // $ hasValueFlow + sink(getMapKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;put;(Object,Object);;Argument[0];MapKey of Argument[-1];value" ImmutableListMultimap.Builder out = null; Object in = (Object)source(); out.put(in, null); - sink(getMapKey(out)); // $ hasValueFlow + sink(getMapKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;put;(Object,Object);;Argument[1];MapValue of Argument[-1];value" ImmutableSetMultimap.Builder out = null; Object in = (Object)source(); out.put(null, in); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;put;(Object,Object);;Argument[1];MapValue of Argument[-1];value" ImmutableMultimap.Builder out = null; Object in = (Object)source(); out.put(null, in); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;put;(Object,Object);;Argument[1];MapValue of Argument[-1];value" ImmutableListMultimap.Builder out = null; Object in = (Object)source(); out.put(null, in); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;put;;;Argument[-1];ReturnValue;value" @@ -2050,128 +2053,170 @@ public class Test { { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Iterable);;MapKey of Element of Argument[0];MapKey of Argument[-1];value" ImmutableSetMultimap.Builder out = null; - Iterable in = (Iterable)newWithElement(newWithMapKey(source())); + Iterable in = (Iterable)List.of(newWithMapKeyDefault(source())); out.putAll(in); - sink(getMapKey(out)); // $ hasValueFlow + sink(getMapKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Iterable);;MapKey of Element of Argument[0];MapKey of Argument[-1];value" ImmutableMultimap.Builder out = null; - Iterable in = (Iterable)newWithElement(newWithMapKey(source())); + Iterable in = (Iterable)List.of(newWithMapKeyDefault(source())); out.putAll(in); - sink(getMapKey(out)); // $ hasValueFlow + sink(getMapKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Iterable);;MapKey of Element of Argument[0];MapKey of Argument[-1];value" ImmutableListMultimap.Builder out = null; - Iterable in = (Iterable)newWithElement(newWithMapKey(source())); + Iterable in = (Iterable)List.of(newWithMapKeyDefault(source())); out.putAll(in); - sink(getMapKey(out)); // $ hasValueFlow + sink(getMapKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Iterable);;MapValue of Element of Argument[0];MapValue of Argument[-1];value" ImmutableSetMultimap.Builder out = null; - Iterable in = (Iterable)newWithElement(newWithMapValue(source())); + Iterable in = (Iterable)List.of(newWithMapValueDefault(source())); out.putAll(in); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Iterable);;MapValue of Element of Argument[0];MapValue of Argument[-1];value" ImmutableMultimap.Builder out = null; - Iterable in = (Iterable)newWithElement(newWithMapValue(source())); + Iterable in = (Iterable)List.of(newWithMapValueDefault(source())); out.putAll(in); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Iterable);;MapValue of Element of Argument[0];MapValue of Argument[-1];value" ImmutableListMultimap.Builder out = null; - Iterable in = (Iterable)newWithElement(newWithMapValue(source())); + Iterable in = (Iterable)List.of(newWithMapValueDefault(source())); out.putAll(in); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Multimap);;MapKey of Argument[0];MapKey of Argument[-1];value" ImmutableSetMultimap.Builder out = null; - Multimap in = (Multimap)newWithMapKey(source()); + Multimap in = (Multimap)newWithMapKeyDefault(source()); out.putAll(in); - sink(getMapKey(out)); // $ hasValueFlow + sink(getMapKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Multimap);;MapKey of Argument[0];MapKey of Argument[-1];value" ImmutableMultimap.Builder out = null; - Multimap in = (Multimap)newWithMapKey(source()); + Multimap in = (Multimap)newWithMapKeyDefault(source()); out.putAll(in); - sink(getMapKey(out)); // $ hasValueFlow + sink(getMapKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Multimap);;MapKey of Argument[0];MapKey of Argument[-1];value" ImmutableListMultimap.Builder out = null; - Multimap in = (Multimap)newWithMapKey(source()); + Multimap in = (Multimap)newWithMapKeyDefault(source()); out.putAll(in); - sink(getMapKey(out)); // $ hasValueFlow + sink(getMapKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Multimap);;MapValue of Argument[0];MapValue of Argument[-1];value" ImmutableSetMultimap.Builder out = null; - Multimap in = (Multimap)newWithMapValue(source()); + Multimap in = (Multimap)newWithMapValueDefault(source()); out.putAll(in); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Multimap);;MapValue of Argument[0];MapValue of Argument[-1];value" ImmutableMultimap.Builder out = null; - Multimap in = (Multimap)newWithMapValue(source()); + Multimap in = (Multimap)newWithMapValueDefault(source()); out.putAll(in); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Multimap);;MapValue of Argument[0];MapValue of Argument[-1];value" ImmutableListMultimap.Builder out = null; - Multimap in = (Multimap)newWithMapValue(source()); + Multimap in = (Multimap)newWithMapValueDefault(source()); out.putAll(in); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" + ImmutableSetMultimap.Builder out = null; + Object in = (Object)source(); + out.putAll(in, (Iterable)null); + sink(getMapKeyDefault(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" + ImmutableMultimap.Builder out = null; + Object in = (Object)source(); + out.putAll(in, (Iterable)null); + sink(getMapKeyDefault(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" + ImmutableListMultimap.Builder out = null; + Object in = (Object)source(); + out.putAll(in, (Iterable)null); + sink(getMapKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" ImmutableSetMultimap.Builder out = null; - Iterable in = (Iterable)newWithElement(source()); + Iterable in = (Iterable)List.of(source()); out.putAll((Object)null, in); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" ImmutableMultimap.Builder out = null; - Iterable in = (Iterable)newWithElement(source()); + Iterable in = (Iterable)List.of(source()); out.putAll((Object)null, in); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" ImmutableListMultimap.Builder out = null; - Iterable in = (Iterable)newWithElement(source()); + Iterable in = (Iterable)List.of(source()); out.putAll((Object)null, in); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Object,Object[]);;Argument[0];MapKey of Argument[-1];value" + ImmutableSetMultimap.Builder out = null; + Object in = (Object)source(); + out.putAll(in, (Object[])null); + sink(getMapKeyDefault(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Object,Object[]);;Argument[0];MapKey of Argument[-1];value" + ImmutableMultimap.Builder out = null; + Object in = (Object)source(); + out.putAll(in, (Object[])null); + sink(getMapKeyDefault(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Object,Object[]);;Argument[0];MapKey of Argument[-1];value" + ImmutableListMultimap.Builder out = null; + Object in = (Object)source(); + out.putAll(in, (Object[])null); + sink(getMapKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Object,Object[]);;ArrayElement of Argument[1];MapValue of Argument[-1];value" ImmutableSetMultimap.Builder out = null; Object[] in = (Object[])new Object[]{source()}; out.putAll((Object)null, in); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Object,Object[]);;ArrayElement of Argument[1];MapValue of Argument[-1];value" ImmutableMultimap.Builder out = null; Object[] in = (Object[])new Object[]{source()}; out.putAll((Object)null, in); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Object,Object[]);;ArrayElement of Argument[1];MapValue of Argument[-1];value" ImmutableListMultimap.Builder out = null; Object[] in = (Object[])new Object[]{source()}; out.putAll((Object)null, in); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;;;Argument[-1];ReturnValue;value" @@ -2257,369 +2302,285 @@ public class Test { out = in.putAll((Iterable)null); sink(out); // $ hasValueFlow } - { - // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;;;Argument[0];MapKey of Argument[-1];value" - ImmutableSetMultimap.Builder out = null; - Object in = (Object)source(); - out.putAll(in, (Object[])null); - sink(getMapKey(out)); // $ hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;;;Argument[0];MapKey of Argument[-1];value" - ImmutableSetMultimap.Builder out = null; - Object in = (Object)source(); - out.putAll(in, (Iterable)null); - sink(getMapKey(out)); // $ hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;;;Argument[0];MapKey of Argument[-1];value" - ImmutableSetMultimap.Builder out = null; - Multimap in = (Multimap)source(); - out.putAll(in); - sink(getMapKey(out)); // $ hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;;;Argument[0];MapKey of Argument[-1];value" - ImmutableSetMultimap.Builder out = null; - Iterable in = (Iterable)source(); - out.putAll(in); - sink(getMapKey(out)); // $ hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;;;Argument[0];MapKey of Argument[-1];value" - ImmutableMultimap.Builder out = null; - Object in = (Object)source(); - out.putAll(in, (Object[])null); - sink(getMapKey(out)); // $ hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;;;Argument[0];MapKey of Argument[-1];value" - ImmutableMultimap.Builder out = null; - Object in = (Object)source(); - out.putAll(in, (Iterable)null); - sink(getMapKey(out)); // $ hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;;;Argument[0];MapKey of Argument[-1];value" - ImmutableMultimap.Builder out = null; - Multimap in = (Multimap)source(); - out.putAll(in); - sink(getMapKey(out)); // $ hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;;;Argument[0];MapKey of Argument[-1];value" - ImmutableMultimap.Builder out = null; - Iterable in = (Iterable)source(); - out.putAll(in); - sink(getMapKey(out)); // $ hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;;;Argument[0];MapKey of Argument[-1];value" - ImmutableListMultimap.Builder out = null; - Object in = (Object)source(); - out.putAll(in, (Object[])null); - sink(getMapKey(out)); // $ hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;;;Argument[0];MapKey of Argument[-1];value" - ImmutableListMultimap.Builder out = null; - Object in = (Object)source(); - out.putAll(in, (Iterable)null); - sink(getMapKey(out)); // $ hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;;;Argument[0];MapKey of Argument[-1];value" - ImmutableListMultimap.Builder out = null; - Multimap in = (Multimap)source(); - out.putAll(in); - sink(getMapKey(out)); // $ hasValueFlow - } - { - // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;;;Argument[0];MapKey of Argument[-1];value" - ImmutableListMultimap.Builder out = null; - Iterable in = (Iterable)source(); - out.putAll(in); - sink(getMapKey(out)); // $ hasValueFlow - } { // "com.google.common.collect;ImmutableMultimap;true;copyOf;(Iterable);;MapKey of Element of Argument[0];MapKey of ReturnValue;value" ImmutableMultimap out = null; - Iterable in = (Iterable)newWithElement(newWithMapKey(source())); + Iterable in = (Iterable)List.of(newWithMapKeyDefault(source())); out = ImmutableMultimap.copyOf(in); - sink(getMapKey(out)); // $ hasValueFlow + sink(getMapKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;copyOf;(Iterable);;MapValue of Element of Argument[0];MapValue of ReturnValue;value" ImmutableMultimap out = null; - Iterable in = (Iterable)newWithElement(newWithMapValue(source())); + Iterable in = (Iterable)List.of(newWithMapValueDefault(source())); out = ImmutableMultimap.copyOf(in); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;copyOf;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value" ImmutableMultimap out = null; - Multimap in = (Multimap)newWithMapKey(source()); + Multimap in = (Multimap)newWithMapKeyDefault(source()); out = ImmutableMultimap.copyOf(in); - sink(getMapKey(out)); // $ hasValueFlow + sink(getMapKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;copyOf;(Multimap);;MapValue of Argument[0];MapValue of ReturnValue;value" ImmutableMultimap out = null; - Multimap in = (Multimap)newWithMapValue(source()); + Multimap in = (Multimap)newWithMapValueDefault(source()); out = ImmutableMultimap.copyOf(in); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;inverse;();;MapKey of Argument[-1];MapValue of ReturnValue;value" ImmutableSetMultimap out = null; - ImmutableSetMultimap in = (ImmutableSetMultimap)newWithMapKey(source()); + ImmutableSetMultimap in = (ImmutableSetMultimap)newWithMapKeyDefault(source()); out = in.inverse(); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;inverse;();;MapKey of Argument[-1];MapValue of ReturnValue;value" ImmutableMultimap out = null; - ImmutableMultimap in = (ImmutableMultimap)newWithMapKey(source()); + ImmutableMultimap in = (ImmutableMultimap)newWithMapKeyDefault(source()); out = in.inverse(); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;inverse;();;MapKey of Argument[-1];MapValue of ReturnValue;value" ImmutableListMultimap out = null; - ImmutableListMultimap in = (ImmutableListMultimap)newWithMapKey(source()); + ImmutableListMultimap in = (ImmutableListMultimap)newWithMapKeyDefault(source()); out = in.inverse(); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;inverse;();;MapValue of Argument[-1];MapKey of ReturnValue;value" ImmutableSetMultimap out = null; - ImmutableSetMultimap in = (ImmutableSetMultimap)newWithMapValue(source()); + ImmutableSetMultimap in = (ImmutableSetMultimap)newWithMapValueDefault(source()); out = in.inverse(); - sink(getMapKey(out)); // $ hasValueFlow + sink(getMapKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;inverse;();;MapValue of Argument[-1];MapKey of ReturnValue;value" ImmutableMultimap out = null; - ImmutableMultimap in = (ImmutableMultimap)newWithMapValue(source()); + ImmutableMultimap in = (ImmutableMultimap)newWithMapValueDefault(source()); out = in.inverse(); - sink(getMapKey(out)); // $ hasValueFlow + sink(getMapKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;inverse;();;MapValue of Argument[-1];MapKey of ReturnValue;value" ImmutableListMultimap out = null; - ImmutableListMultimap in = (ImmutableListMultimap)newWithMapValue(source()); + ImmutableListMultimap in = (ImmutableListMultimap)newWithMapValueDefault(source()); out = in.inverse(); - sink(getMapKey(out)); // $ hasValueFlow + sink(getMapKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[0];MapKey of ReturnValue;value" ImmutableMultimap out = null; Object in = (Object)source(); out = ImmutableMultimap.of(in, null, null, null, null, null, null, null, null, null); - sink(getMapKey(out)); // $ hasValueFlow + sink(getMapKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[0];MapKey of ReturnValue;value" ImmutableMultimap out = null; Object in = (Object)source(); out = ImmutableMultimap.of(in, null, null, null, null, null, null, null); - sink(getMapKey(out)); // $ hasValueFlow + sink(getMapKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[0];MapKey of ReturnValue;value" ImmutableMultimap out = null; Object in = (Object)source(); out = ImmutableMultimap.of(in, null, null, null, null, null); - sink(getMapKey(out)); // $ hasValueFlow + sink(getMapKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[0];MapKey of ReturnValue;value" ImmutableMultimap out = null; Object in = (Object)source(); out = ImmutableMultimap.of(in, null, null, null); - sink(getMapKey(out)); // $ hasValueFlow + sink(getMapKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[0];MapKey of ReturnValue;value" ImmutableMultimap out = null; Object in = (Object)source(); out = ImmutableMultimap.of(in, null); - sink(getMapKey(out)); // $ hasValueFlow + sink(getMapKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[1];MapValue of ReturnValue;value" ImmutableMultimap out = null; Object in = (Object)source(); out = ImmutableMultimap.of(null, in, null, null, null, null, null, null, null, null); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[1];MapValue of ReturnValue;value" ImmutableMultimap out = null; Object in = (Object)source(); out = ImmutableMultimap.of(null, in, null, null, null, null, null, null); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[1];MapValue of ReturnValue;value" ImmutableMultimap out = null; Object in = (Object)source(); out = ImmutableMultimap.of(null, in, null, null, null, null); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[1];MapValue of ReturnValue;value" ImmutableMultimap out = null; Object in = (Object)source(); out = ImmutableMultimap.of(null, in, null, null); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[1];MapValue of ReturnValue;value" ImmutableMultimap out = null; Object in = (Object)source(); out = ImmutableMultimap.of(null, in); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[2];MapKey of ReturnValue;value" ImmutableMultimap out = null; Object in = (Object)source(); out = ImmutableMultimap.of(null, null, in, null, null, null, null, null, null, null); - sink(getMapKey(out)); // $ hasValueFlow + sink(getMapKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[2];MapKey of ReturnValue;value" ImmutableMultimap out = null; Object in = (Object)source(); out = ImmutableMultimap.of(null, null, in, null, null, null, null, null); - sink(getMapKey(out)); // $ hasValueFlow + sink(getMapKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[2];MapKey of ReturnValue;value" ImmutableMultimap out = null; Object in = (Object)source(); out = ImmutableMultimap.of(null, null, in, null, null, null); - sink(getMapKey(out)); // $ hasValueFlow + sink(getMapKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[2];MapKey of ReturnValue;value" ImmutableMultimap out = null; Object in = (Object)source(); out = ImmutableMultimap.of(null, null, in, null); - sink(getMapKey(out)); // $ hasValueFlow + sink(getMapKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[3];MapValue of ReturnValue;value" ImmutableMultimap out = null; Object in = (Object)source(); out = ImmutableMultimap.of(null, null, null, in, null, null, null, null, null, null); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[3];MapValue of ReturnValue;value" ImmutableMultimap out = null; Object in = (Object)source(); out = ImmutableMultimap.of(null, null, null, in, null, null, null, null); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[3];MapValue of ReturnValue;value" ImmutableMultimap out = null; Object in = (Object)source(); out = ImmutableMultimap.of(null, null, null, in, null, null); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[3];MapValue of ReturnValue;value" ImmutableMultimap out = null; Object in = (Object)source(); out = ImmutableMultimap.of(null, null, null, in); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[4];MapKey of ReturnValue;value" ImmutableMultimap out = null; Object in = (Object)source(); out = ImmutableMultimap.of(null, null, null, null, in, null, null, null, null, null); - sink(getMapKey(out)); // $ hasValueFlow + sink(getMapKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[4];MapKey of ReturnValue;value" ImmutableMultimap out = null; Object in = (Object)source(); out = ImmutableMultimap.of(null, null, null, null, in, null, null, null); - sink(getMapKey(out)); // $ hasValueFlow + sink(getMapKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[4];MapKey of ReturnValue;value" ImmutableMultimap out = null; Object in = (Object)source(); out = ImmutableMultimap.of(null, null, null, null, in, null); - sink(getMapKey(out)); // $ hasValueFlow + sink(getMapKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[5];MapValue of ReturnValue;value" ImmutableMultimap out = null; Object in = (Object)source(); out = ImmutableMultimap.of(null, null, null, null, null, in, null, null, null, null); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[5];MapValue of ReturnValue;value" ImmutableMultimap out = null; Object in = (Object)source(); out = ImmutableMultimap.of(null, null, null, null, null, in, null, null); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[5];MapValue of ReturnValue;value" ImmutableMultimap out = null; Object in = (Object)source(); out = ImmutableMultimap.of(null, null, null, null, null, in); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[6];MapKey of ReturnValue;value" ImmutableMultimap out = null; Object in = (Object)source(); out = ImmutableMultimap.of(null, null, null, null, null, null, in, null, null, null); - sink(getMapKey(out)); // $ hasValueFlow + sink(getMapKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[6];MapKey of ReturnValue;value" ImmutableMultimap out = null; Object in = (Object)source(); out = ImmutableMultimap.of(null, null, null, null, null, null, in, null); - sink(getMapKey(out)); // $ hasValueFlow + sink(getMapKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[7];MapValue of ReturnValue;value" ImmutableMultimap out = null; Object in = (Object)source(); out = ImmutableMultimap.of(null, null, null, null, null, null, null, in, null, null); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[7];MapValue of ReturnValue;value" ImmutableMultimap out = null; Object in = (Object)source(); out = ImmutableMultimap.of(null, null, null, null, null, null, null, in); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[8];MapKey of ReturnValue;value" ImmutableMultimap out = null; Object in = (Object)source(); out = ImmutableMultimap.of(null, null, null, null, null, null, null, null, in, null); - sink(getMapKey(out)); // $ hasValueFlow + sink(getMapKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[9];MapValue of ReturnValue;value" ImmutableMultimap out = null; Object in = (Object)source(); out = ImmutableMultimap.of(null, null, null, null, null, null, null, null, null, in); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset$Builder;true;addCopies;(Object,int);;Argument[-1];ReturnValue;value" @@ -2640,40 +2601,40 @@ public class Test { ImmutableSortedMultiset.Builder out = null; Object in = (Object)source(); out.addCopies(in, 0); - sink(getElement(out)); // $ hasValueFlow + sink(getElementDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset$Builder;true;addCopies;(Object,int);;Argument[0];Element of Argument[-1];value" ImmutableMultiset.Builder out = null; Object in = (Object)source(); out.addCopies(in, 0); - sink(getElement(out)); // $ hasValueFlow + sink(getElementDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset$Builder;true;setCount;(Object,int);;Argument[0];Element of Argument[-1];value" ImmutableSortedMultiset.Builder out = null; Object in = (Object)source(); out.setCount(in, 0); - sink(getElement(out)); // $ hasValueFlow + sink(getElementDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset$Builder;true;setCount;(Object,int);;Argument[0];Element of Argument[-1];value" ImmutableMultiset.Builder out = null; Object in = (Object)source(); out.setCount(in, 0); - sink(getElement(out)); // $ hasValueFlow + sink(getElementDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;copyOf;(Iterable);;Element of Argument[0];Element of ReturnValue;value" ImmutableMultiset out = null; - Iterable in = (Iterable)newWithElement(source()); + Iterable in = (Iterable)List.of(source()); out = ImmutableMultiset.copyOf(in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;copyOf;(Iterator);;Element of Argument[0];Element of ReturnValue;value" ImmutableMultiset out = null; - Iterator in = (Iterator)newWithElement(source()); + Iterator in = (Iterator)newWithElementDefault(source()); out = ImmutableMultiset.copyOf(in); sink(getElement(out)); // $ hasValueFlow } @@ -2841,21 +2802,21 @@ public class Test { { // "com.google.common.collect;ImmutableSet;true;copyOf;(Collection);;Element of Argument[0];Element of ReturnValue;value" ImmutableSet out = null; - Collection in = (Collection)newWithElement(source()); + Collection in = (Collection)List.of(source()); out = ImmutableSet.copyOf(in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;copyOf;(Iterable);;Element of Argument[0];Element of ReturnValue;value" ImmutableSet out = null; - Iterable in = (Iterable)newWithElement(source()); + Iterable in = (Iterable)List.of(source()); out = ImmutableSet.copyOf(in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSet;true;copyOf;(Iterator);;Element of Argument[0];Element of ReturnValue;value" ImmutableSet out = null; - Iterator in = (Iterator)newWithElement(source()); + Iterator in = (Iterator)newWithElementDefault(source()); out = ImmutableSet.copyOf(in); sink(getElement(out)); // $ hasValueFlow } @@ -3023,28 +2984,28 @@ public class Test { { // "com.google.common.collect;ImmutableSortedMap;true;copyOf;(Iterable);;MapKey of Element of Argument[0];MapKey of ReturnValue;value" ImmutableSortedMap out = null; - Iterable in = (Iterable)newWithElement(newWithMapKey(source())); + Iterable in = (Iterable)List.of(newWithMapKeyDefault(source())); out = ImmutableSortedMap.copyOf(in); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMap;true;copyOf;(Iterable);;MapValue of Element of Argument[0];MapValue of ReturnValue;value" ImmutableSortedMap out = null; - Iterable in = (Iterable)newWithElement(newWithMapValue(source())); + Iterable in = (Iterable)List.of(newWithMapValueDefault(source())); out = ImmutableSortedMap.copyOf(in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMap;true;copyOf;(Iterable,Comparator);;MapKey of Element of Argument[0];MapKey of ReturnValue;value" ImmutableSortedMap out = null; - Iterable in = (Iterable)newWithElement(newWithMapKey(source())); + Iterable in = (Iterable)List.of(newWithMapKeyDefault(source())); out = ImmutableSortedMap.copyOf(in, (Comparator)null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMap;true;copyOf;(Iterable,Comparator);;MapValue of Element of Argument[0];MapValue of ReturnValue;value" ImmutableSortedMap out = null; - Iterable in = (Iterable)newWithElement(newWithMapValue(source())); + Iterable in = (Iterable)List.of(newWithMapValueDefault(source())); out = ImmutableSortedMap.copyOf(in, (Comparator)null); sink(getMapValue(out)); // $ hasValueFlow } @@ -3079,14 +3040,14 @@ public class Test { { // "com.google.common.collect;ImmutableSortedMap;true;copyOfSorted;(SortedMap);;MapKey of Argument[0];MapKey of ReturnValue;value" ImmutableSortedMap out = null; - SortedMap in = (SortedMap)newWithMapKey(source()); + SortedMap in = (SortedMap)newWithMapKeyDefault(source()); out = ImmutableSortedMap.copyOfSorted(in); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMap;true;copyOfSorted;(SortedMap);;MapValue of Argument[0];MapValue of ReturnValue;value" ImmutableSortedMap out = null; - SortedMap in = (SortedMap)newWithMapValue(source()); + SortedMap in = (SortedMap)newWithMapValueDefault(source()); out = ImmutableSortedMap.copyOfSorted(in); sink(getMapValue(out)); // $ hasValueFlow } @@ -3310,35 +3271,35 @@ public class Test { { // "com.google.common.collect;ImmutableSortedMultiset;true;copyOf;(Comparator,Iterable);;Element of Argument[1];Element of ReturnValue;value" ImmutableSortedMultiset out = null; - Iterable in = (Iterable)newWithElement(source()); + Iterable in = (Iterable)List.of(source()); out = ImmutableSortedMultiset.copyOf((Comparator)null, in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMultiset;true;copyOf;(Comparator,Iterator);;Element of Argument[1];Element of ReturnValue;value" ImmutableSortedMultiset out = null; - Iterator in = (Iterator)newWithElement(source()); + Iterator in = (Iterator)newWithElementDefault(source()); out = ImmutableSortedMultiset.copyOf((Comparator)null, in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMultiset;true;copyOf;(Iterable);;Element of Argument[0];Element of ReturnValue;value" ImmutableSortedMultiset out = null; - Iterable in = (Iterable)newWithElement(source()); + Iterable in = (Iterable)List.of(source()); out = ImmutableSortedMultiset.copyOf(in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMultiset;true;copyOf;(Iterator);;Element of Argument[0];Element of ReturnValue;value" ImmutableSortedMultiset out = null; - Iterator in = (Iterator)newWithElement(source()); + Iterator in = (Iterator)newWithElementDefault(source()); out = ImmutableSortedMultiset.copyOf(in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMultiset;true;copyOfSorted;(SortedMultiset);;Element of Argument[0];Element of ReturnValue;value" ImmutableSortedMultiset out = null; - SortedMultiset in = (SortedMultiset)newWithElement(source()); + SortedMultiset in = (SortedMultiset)newWithElementDefault(source()); out = ImmutableSortedMultiset.copyOfSorted(in); sink(getElement(out)); // $ hasValueFlow } @@ -3499,7 +3460,7 @@ public class Test { { // "com.google.common.collect;ImmutableSortedSet;true;copyOf;(Collection);;Element of Argument[0];Element of ReturnValue;value" ImmutableSortedSet out = null; - Collection in = (Collection)newWithElement(source()); + Collection in = (Collection)List.of(source()); out = ImmutableSortedSet.copyOf(in); sink(getElement(out)); // $ hasValueFlow } @@ -3513,42 +3474,42 @@ public class Test { { // "com.google.common.collect;ImmutableSortedSet;true;copyOf;(Comparator,Collection);;Element of Argument[1];Element of ReturnValue;value" ImmutableSortedSet out = null; - Collection in = (Collection)newWithElement(source()); + Collection in = (Collection)List.of(source()); out = ImmutableSortedSet.copyOf((Comparator)null, in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;copyOf;(Comparator,Iterable);;Element of Argument[1];Element of ReturnValue;value" ImmutableSortedSet out = null; - Iterable in = (Iterable)newWithElement(source()); + Iterable in = (Iterable)List.of(source()); out = ImmutableSortedSet.copyOf((Comparator)null, in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;copyOf;(Comparator,Iterator);;Element of Argument[1];Element of ReturnValue;value" ImmutableSortedSet out = null; - Iterator in = (Iterator)newWithElement(source()); + Iterator in = (Iterator)newWithElementDefault(source()); out = ImmutableSortedSet.copyOf((Comparator)null, in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;copyOf;(Iterable);;Element of Argument[0];Element of ReturnValue;value" ImmutableSortedSet out = null; - Iterable in = (Iterable)newWithElement(source()); + Iterable in = (Iterable)List.of(source()); out = ImmutableSortedSet.copyOf(in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;copyOf;(Iterator);;Element of Argument[0];Element of ReturnValue;value" ImmutableSortedSet out = null; - Iterator in = (Iterator)newWithElement(source()); + Iterator in = (Iterator)newWithElementDefault(source()); out = ImmutableSortedSet.copyOf(in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;copyOfSorted;(SortedSet);;Element of Argument[0];Element of ReturnValue;value" ImmutableSortedSet out = null; - SortedSet in = (SortedSet)newWithElement(source()); + SortedSet in = (SortedSet)newWithElementDefault(source()); out = ImmutableSortedSet.copyOfSorted(in); sink(getElement(out)); // $ hasValueFlow } @@ -3709,23 +3670,23 @@ public class Test { { // "com.google.common.collect;ImmutableTable$Builder;true;build;();;MapValue of Argument[-1];MapValue of ReturnValue;value" ImmutableTable out = null; - ImmutableTable.Builder in = (ImmutableTable.Builder)newWithMapValue(source()); + ImmutableTable.Builder in = (ImmutableTable.Builder)newWithMapValueDefault(source()); out = in.build(); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableTable$Builder;true;build;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value" ImmutableTable out = null; - ImmutableTable.Builder in = (ImmutableTable.Builder)newWithTable_columnKey(source()); + ImmutableTable.Builder in = (ImmutableTable.Builder)newWithTable_columnKeyDefault(source()); out = in.build(); - sink(getTable_columnKey(out)); // $ hasValueFlow + sink(getTable_columnKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableTable$Builder;true;build;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value" ImmutableTable out = null; - ImmutableTable.Builder in = (ImmutableTable.Builder)newWithTable_rowKey(source()); + ImmutableTable.Builder in = (ImmutableTable.Builder)newWithTable_rowKeyDefault(source()); out = in.build(); - sink(getTable_rowKey(out)); // $ hasValueFlow + sink(getTable_rowKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableTable$Builder;true;orderColumnsBy;(Comparator);;Argument[-1];ReturnValue;value" @@ -3751,23 +3712,23 @@ public class Test { { // "com.google.common.collect;ImmutableTable$Builder;true;put;(Cell);;MapValue of Argument[0];MapValue of Argument[-1];value" ImmutableTable.Builder out = null; - Table.Cell in = (Table.Cell)newWithMapValue(source()); + Table.Cell in = (Table.Cell)newWithMapValueDefault(source()); out.put(in); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableTable$Builder;true;put;(Cell);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];value" ImmutableTable.Builder out = null; - Table.Cell in = (Table.Cell)newWithTable_columnKey(source()); + Table.Cell in = (Table.Cell)newWithTable_columnKeyDefault(source()); out.put(in); - sink(getTable_columnKey(out)); // $ hasValueFlow + sink(getTable_columnKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableTable$Builder;true;put;(Cell);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];value" ImmutableTable.Builder out = null; - Table.Cell in = (Table.Cell)newWithTable_rowKey(source()); + Table.Cell in = (Table.Cell)newWithTable_rowKeyDefault(source()); out.put(in); - sink(getTable_rowKey(out)); // $ hasValueFlow + sink(getTable_rowKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableTable$Builder;true;put;(Object,Object,Object);;Argument[-1];ReturnValue;value" @@ -3781,21 +3742,21 @@ public class Test { ImmutableTable.Builder out = null; Object in = (Object)source(); out.put(in, null, null); - sink(getTable_rowKey(out)); // $ hasValueFlow + sink(getTable_rowKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableTable$Builder;true;put;(Object,Object,Object);;Argument[1];SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];value" ImmutableTable.Builder out = null; Object in = (Object)source(); out.put(null, in, null); - sink(getTable_columnKey(out)); // $ hasValueFlow + sink(getTable_columnKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableTable$Builder;true;put;(Object,Object,Object);;Argument[2];MapValue of Argument[-1];value" ImmutableTable.Builder out = null; Object in = (Object)source(); out.put(null, null, in); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableTable$Builder;true;putAll;(Table);;Argument[-1];ReturnValue;value" @@ -3807,161 +3768,161 @@ public class Test { { // "com.google.common.collect;ImmutableTable$Builder;true;putAll;(Table);;MapValue of Argument[0];MapValue of Argument[-1];value" ImmutableTable.Builder out = null; - Table in = (Table)newWithMapValue(source()); + Table in = (Table)newWithMapValueDefault(source()); out.putAll(in); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableTable$Builder;true;putAll;(Table);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];value" ImmutableTable.Builder out = null; - Table in = (Table)newWithTable_columnKey(source()); + Table in = (Table)newWithTable_columnKeyDefault(source()); out.putAll(in); - sink(getTable_columnKey(out)); // $ hasValueFlow + sink(getTable_columnKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableTable$Builder;true;putAll;(Table);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];value" ImmutableTable.Builder out = null; - Table in = (Table)newWithTable_rowKey(source()); + Table in = (Table)newWithTable_rowKeyDefault(source()); out.putAll(in); - sink(getTable_rowKey(out)); // $ hasValueFlow + sink(getTable_rowKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableTable;true;copyOf;(Table);;MapValue of Argument[0];MapValue of ReturnValue;value" ImmutableTable out = null; - Table in = (Table)newWithMapValue(source()); + Table in = (Table)newWithMapValueDefault(source()); out = ImmutableTable.copyOf(in); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableTable;true;copyOf;(Table);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value" ImmutableTable out = null; - Table in = (Table)newWithTable_columnKey(source()); + Table in = (Table)newWithTable_columnKeyDefault(source()); out = ImmutableTable.copyOf(in); - sink(getTable_columnKey(out)); // $ hasValueFlow + sink(getTable_columnKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableTable;true;copyOf;(Table);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value" ImmutableTable out = null; - Table in = (Table)newWithTable_rowKey(source()); + Table in = (Table)newWithTable_rowKeyDefault(source()); out = ImmutableTable.copyOf(in); - sink(getTable_rowKey(out)); // $ hasValueFlow + sink(getTable_rowKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableTable;true;of;(Object,Object,Object);;Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value" ImmutableTable out = null; Object in = (Object)source(); out = ImmutableTable.of(in, null, null); - sink(getTable_rowKey(out)); // $ hasValueFlow + sink(getTable_rowKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableTable;true;of;(Object,Object,Object);;Argument[1];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value" ImmutableTable out = null; Object in = (Object)source(); out = ImmutableTable.of(null, in, null); - sink(getTable_columnKey(out)); // $ hasValueFlow + sink(getTable_columnKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableTable;true;of;(Object,Object,Object);;Argument[2];MapValue of ReturnValue;value" ImmutableTable out = null; Object in = (Object)source(); out = ImmutableTable.of(null, null, in); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;addAll;(Collection,Iterable);;Element of Argument[1];Element of Argument[0];value" Collection out = null; - Iterable in = (Iterable)newWithElement(source()); + Iterable in = (Iterable)List.of(source()); Iterables.addAll(out, in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;concat;(Iterable);;Element of Element of Argument[0];Element of ReturnValue;value" Iterable out = null; - Iterable in = (Iterable)newWithElement(newWithElement(source())); + Iterable in = (Iterable)List.of(newWithElementDefault(source())); out = Iterables.concat(in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;concat;(Iterable,Iterable);;Element of Argument[0..1];Element of ReturnValue;value" Iterable out = null; - Iterable in = (Iterable)newWithElement(source()); + Iterable in = (Iterable)List.of(source()); out = Iterables.concat(null, in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;concat;(Iterable,Iterable);;Element of Argument[0..1];Element of ReturnValue;value" Iterable out = null; - Iterable in = (Iterable)newWithElement(source()); + Iterable in = (Iterable)List.of(source()); out = Iterables.concat(in, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;concat;(Iterable,Iterable,Iterable);;Element of Argument[0..2];Element of ReturnValue;value" Iterable out = null; - Iterable in = (Iterable)newWithElement(source()); + Iterable in = (Iterable)List.of(source()); out = Iterables.concat(null, null, in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;concat;(Iterable,Iterable,Iterable);;Element of Argument[0..2];Element of ReturnValue;value" Iterable out = null; - Iterable in = (Iterable)newWithElement(source()); + Iterable in = (Iterable)List.of(source()); out = Iterables.concat(null, in, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;concat;(Iterable,Iterable,Iterable);;Element of Argument[0..2];Element of ReturnValue;value" Iterable out = null; - Iterable in = (Iterable)newWithElement(source()); + Iterable in = (Iterable)List.of(source()); out = Iterables.concat(in, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;concat;(Iterable,Iterable,Iterable,Iterable);;Element of Argument[0..3];Element of ReturnValue;value" Iterable out = null; - Iterable in = (Iterable)newWithElement(source()); + Iterable in = (Iterable)List.of(source()); out = Iterables.concat(null, null, null, in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;concat;(Iterable,Iterable,Iterable,Iterable);;Element of Argument[0..3];Element of ReturnValue;value" Iterable out = null; - Iterable in = (Iterable)newWithElement(source()); + Iterable in = (Iterable)List.of(source()); out = Iterables.concat(null, null, in, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;concat;(Iterable,Iterable,Iterable,Iterable);;Element of Argument[0..3];Element of ReturnValue;value" Iterable out = null; - Iterable in = (Iterable)newWithElement(source()); + Iterable in = (Iterable)List.of(source()); out = Iterables.concat(null, in, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;concat;(Iterable,Iterable,Iterable,Iterable);;Element of Argument[0..3];Element of ReturnValue;value" Iterable out = null; - Iterable in = (Iterable)newWithElement(source()); + Iterable in = (Iterable)List.of(source()); out = Iterables.concat(in, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;concat;(Iterable[]);;Element of ArrayElement of Argument[0];Element of ReturnValue;value" Iterable out = null; - Iterable[] in = (Iterable[])new Iterable[]{(Iterable)newWithElement(source())}; + Iterable[] in = (Iterable[])new Iterable[]{(Iterable)newWithElementDefault(source())}; out = Iterables.concat(in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;consumingIterable;(Iterable);;Element of Argument[0];Element of ReturnValue;value" Iterable out = null; - Iterable in = (Iterable)newWithElement(source()); + Iterable in = (Iterable)List.of(source()); out = Iterables.consumingIterable(in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;cycle;(Iterable);;Element of Argument[0];Element of ReturnValue;value" Iterable out = null; - Iterable in = (Iterable)newWithElement(source()); + Iterable in = (Iterable)List.of(source()); out = Iterables.cycle(in); sink(getElement(out)); // $ hasValueFlow } @@ -3982,14 +3943,14 @@ public class Test { { // "com.google.common.collect;Iterables;false;filter;(Iterable,Predicate);;Element of Argument[0];Element of ReturnValue;value" Iterable out = null; - Iterable in = (Iterable)newWithElement(source()); + Iterable in = (Iterable)List.of(source()); out = Iterables.filter(in, (Predicate)null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;find;(Iterable,Predicate);;Element of Argument[0];ReturnValue;value" Object out = null; - Iterable in = (Iterable)newWithElement(source()); + Iterable in = (Iterable)List.of(source()); out = Iterables.find(in, null); sink(out); // $ hasValueFlow } @@ -4003,14 +3964,14 @@ public class Test { { // "com.google.common.collect;Iterables;false;find;(Iterable,Predicate,Object);;Element of Argument[0];ReturnValue;value" Object out = null; - Iterable in = (Iterable)newWithElement(source()); + Iterable in = (Iterable)List.of(source()); out = Iterables.find(in, null, null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;get;(Iterable,int);;Element of Argument[0];ReturnValue;value" Object out = null; - Iterable in = (Iterable)newWithElement(source()); + Iterable in = (Iterable)List.of(source()); out = Iterables.get(in, 0); sink(out); // $ hasValueFlow } @@ -4024,14 +3985,14 @@ public class Test { { // "com.google.common.collect;Iterables;false;get;(Iterable,int,Object);;Element of Argument[0];ReturnValue;value" Object out = null; - Iterable in = (Iterable)newWithElement(source()); + Iterable in = (Iterable)List.of(source()); out = Iterables.get(in, 0, null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;getLast;(Iterable);;Element of Argument[0];ReturnValue;value" Object out = null; - Iterable in = (Iterable)newWithElement(source()); + Iterable in = (Iterable)List.of(source()); out = Iterables.getLast(in); sink(out); // $ hasValueFlow } @@ -4045,14 +4006,14 @@ public class Test { { // "com.google.common.collect;Iterables;false;getLast;(Iterable,Object);;Element of Argument[0];ReturnValue;value" Object out = null; - Iterable in = (Iterable)newWithElement(source()); + Iterable in = (Iterable)List.of(source()); out = Iterables.getLast(in, null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;getOnlyElement;(Iterable);;Element of Argument[0];ReturnValue;value" Object out = null; - Iterable in = (Iterable)newWithElement(source()); + Iterable in = (Iterable)List.of(source()); out = Iterables.getOnlyElement(in); sink(out); // $ hasValueFlow } @@ -4066,21 +4027,21 @@ public class Test { { // "com.google.common.collect;Iterables;false;getOnlyElement;(Iterable,Object);;Element of Argument[0];ReturnValue;value" Object out = null; - Iterable in = (Iterable)newWithElement(source()); + Iterable in = (Iterable)List.of(source()); out = Iterables.getOnlyElement(in, null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;limit;(Iterable,int);;Element of Argument[0];Element of ReturnValue;value" Iterable out = null; - Iterable in = (Iterable)newWithElement(source()); + Iterable in = (Iterable)List.of(source()); out = Iterables.limit(in, 0); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;mergeSorted;(Iterable,Comparator);;Element of Element of Argument[0];Element of ReturnValue;value" Iterable out = null; - Iterable in = (Iterable)newWithElement(newWithElement(source())); + Iterable in = (Iterable)List.of(newWithElementDefault(source())); out = Iterables.mergeSorted(in, null); sink(getElement(out)); // $ hasValueFlow } @@ -4089,26 +4050,26 @@ public class Test { Iterable out = null; Iterable in = (Iterable)List.of(source()); out = Iterables.paddedPartition(in, 0); - sink(getElement(getElement(out))); // $ hasValueFlow + sink(getElementDefault(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;partition;(Iterable,int);;Element of Argument[0];Element of Element of ReturnValue;value" Iterable out = null; Iterable in = (Iterable)List.of(source()); out = Iterables.partition(in, 0); - sink(getElement(getElement(out))); // $ hasValueFlow + sink(getElementDefault(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;skip;(Iterable,int);;Element of Argument[0];Element of ReturnValue;value" Iterable out = null; - Iterable in = (Iterable)newWithElement(source()); + Iterable in = (Iterable)List.of(source()); out = Iterables.skip(in, 0); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;toArray;(Iterable,Class);;Element of Argument[0];ArrayElement of ReturnValue;value" Object[] out = null; - Iterable in = (Iterable)newWithElement(source()); + Iterable in = (Iterable)List.of(source()); out = Iterables.toArray(in, (Class)null); sink(getArrayElement(out)); // $ hasValueFlow } @@ -4122,126 +4083,126 @@ public class Test { { // "com.google.common.collect;Iterables;false;tryFind;(Iterable,Predicate);;Element of Argument[0];Element of ReturnValue;value" Optional out = null; - Iterable in = (Iterable)newWithElement(source()); + Iterable in = (Iterable)List.of(source()); out = Iterables.tryFind(in, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElementDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;unmodifiableIterable;(ImmutableCollection);;Element of Argument[0];Element of ReturnValue;value" Iterable out = null; - ImmutableCollection in = (ImmutableCollection)newWithElement(source()); + ImmutableCollection in = (ImmutableCollection)newWithElementDefault(source()); out = Iterables.unmodifiableIterable(in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;unmodifiableIterable;(Iterable);;Element of Argument[0];Element of ReturnValue;value" Iterable out = null; - Iterable in = (Iterable)newWithElement(source()); + Iterable in = (Iterable)List.of(source()); out = Iterables.unmodifiableIterable(in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;addAll;(Collection,Iterator);;Element of Argument[1];Element of Argument[0];value" Collection out = null; - Iterator in = (Iterator)newWithElement(source()); + Iterator in = (Iterator)newWithElementDefault(source()); Iterators.addAll(out, in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;asEnumeration;(Iterator);;Element of Argument[0];Element of ReturnValue;value" Enumeration out = null; - Iterator in = (Iterator)newWithElement(source()); + Iterator in = (Iterator)newWithElementDefault(source()); out = Iterators.asEnumeration(in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;concat;(Iterator);;Element of Element of Argument[0];Element of ReturnValue;value" Iterator out = null; - Iterator in = (Iterator)newWithElement(newWithElement(source())); + Iterator in = (Iterator)newWithElementDefault(newWithElementDefault(source())); out = Iterators.concat(in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;concat;(Iterator,Iterator);;Element of Argument[0..1];Element of ReturnValue;value" Iterator out = null; - Iterator in = (Iterator)newWithElement(source()); + Iterator in = (Iterator)newWithElementDefault(source()); out = Iterators.concat(null, in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;concat;(Iterator,Iterator);;Element of Argument[0..1];Element of ReturnValue;value" Iterator out = null; - Iterator in = (Iterator)newWithElement(source()); + Iterator in = (Iterator)newWithElementDefault(source()); out = Iterators.concat(in, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;concat;(Iterator,Iterator,Iterator);;Element of Argument[0..2];Element of ReturnValue;value" Iterator out = null; - Iterator in = (Iterator)newWithElement(source()); + Iterator in = (Iterator)newWithElementDefault(source()); out = Iterators.concat(null, null, in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;concat;(Iterator,Iterator,Iterator);;Element of Argument[0..2];Element of ReturnValue;value" Iterator out = null; - Iterator in = (Iterator)newWithElement(source()); + Iterator in = (Iterator)newWithElementDefault(source()); out = Iterators.concat(null, in, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;concat;(Iterator,Iterator,Iterator);;Element of Argument[0..2];Element of ReturnValue;value" Iterator out = null; - Iterator in = (Iterator)newWithElement(source()); + Iterator in = (Iterator)newWithElementDefault(source()); out = Iterators.concat(in, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;concat;(Iterator,Iterator,Iterator,Iterator);;Element of Argument[0..3];Element of ReturnValue;value" Iterator out = null; - Iterator in = (Iterator)newWithElement(source()); + Iterator in = (Iterator)newWithElementDefault(source()); out = Iterators.concat(null, null, null, in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;concat;(Iterator,Iterator,Iterator,Iterator);;Element of Argument[0..3];Element of ReturnValue;value" Iterator out = null; - Iterator in = (Iterator)newWithElement(source()); + Iterator in = (Iterator)newWithElementDefault(source()); out = Iterators.concat(null, null, in, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;concat;(Iterator,Iterator,Iterator,Iterator);;Element of Argument[0..3];Element of ReturnValue;value" Iterator out = null; - Iterator in = (Iterator)newWithElement(source()); + Iterator in = (Iterator)newWithElementDefault(source()); out = Iterators.concat(null, in, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;concat;(Iterator,Iterator,Iterator,Iterator);;Element of Argument[0..3];Element of ReturnValue;value" Iterator out = null; - Iterator in = (Iterator)newWithElement(source()); + Iterator in = (Iterator)newWithElementDefault(source()); out = Iterators.concat(in, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;concat;(Iterator[]);;Element of ArrayElement of Argument[0];Element of ReturnValue;value" Iterator out = null; - Iterator[] in = (Iterator[])new Iterator[]{(Iterator)newWithElement(source())}; + Iterator[] in = (Iterator[])new Iterator[]{(Iterator)newWithElementDefault(source())}; out = Iterators.concat(in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;consumingIterator;(Iterator);;Element of Argument[0];Element of ReturnValue;value" Iterator out = null; - Iterator in = (Iterator)newWithElement(source()); + Iterator in = (Iterator)newWithElementDefault(source()); out = Iterators.consumingIterator(in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;cycle;(Iterable);;Element of Argument[0];Element of ReturnValue;value" Iterator out = null; - Iterable in = (Iterable)newWithElement(source()); + Iterable in = (Iterable)List.of(source()); out = Iterators.cycle(in); sink(getElement(out)); // $ hasValueFlow } @@ -4255,21 +4216,21 @@ public class Test { { // "com.google.common.collect;Iterators;false;filter;(Iterator,Class);;Element of Argument[0];Element of ReturnValue;value" UnmodifiableIterator out = null; - Iterator in = (Iterator)newWithElement(source()); + Iterator in = (Iterator)newWithElementDefault(source()); out = Iterators.filter(in, (Class)null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;filter;(Iterator,Predicate);;Element of Argument[0];Element of ReturnValue;value" UnmodifiableIterator out = null; - Iterator in = (Iterator)newWithElement(source()); + Iterator in = (Iterator)newWithElementDefault(source()); out = Iterators.filter(in, (Predicate)null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;find;(Iterator,Predicate);;Element of Argument[0];ReturnValue;value" Object out = null; - Iterator in = (Iterator)newWithElement(source()); + Iterator in = (Iterator)newWithElementDefault(source()); out = Iterators.find(in, null); sink(out); // $ hasValueFlow } @@ -4283,7 +4244,7 @@ public class Test { { // "com.google.common.collect;Iterators;false;find;(Iterator,Predicate,Object);;Element of Argument[0];ReturnValue;value" Object out = null; - Iterator in = (Iterator)newWithElement(source()); + Iterator in = (Iterator)newWithElementDefault(source()); out = Iterators.find(in, null, null); sink(out); // $ hasValueFlow } @@ -4297,14 +4258,14 @@ public class Test { { // "com.google.common.collect;Iterators;false;forEnumeration;(Enumeration);;Element of Argument[0];Element of ReturnValue;value" UnmodifiableIterator out = null; - Enumeration in = (Enumeration)newWithElement(source()); + Enumeration in = (Enumeration)newWithElementDefault(source()); out = Iterators.forEnumeration(in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;get;(Iterator,int);;Element of Argument[0];ReturnValue;value" Object out = null; - Iterator in = (Iterator)newWithElement(source()); + Iterator in = (Iterator)newWithElementDefault(source()); out = Iterators.get(in, 0); sink(out); // $ hasValueFlow } @@ -4318,14 +4279,14 @@ public class Test { { // "com.google.common.collect;Iterators;false;get;(Iterator,int,Object);;Element of Argument[0];ReturnValue;value" Object out = null; - Iterator in = (Iterator)newWithElement(source()); + Iterator in = (Iterator)newWithElementDefault(source()); out = Iterators.get(in, 0, null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;getLast;(Iterator);;Element of Argument[0];ReturnValue;value" Object out = null; - Iterator in = (Iterator)newWithElement(source()); + Iterator in = (Iterator)newWithElementDefault(source()); out = Iterators.getLast(in); sink(out); // $ hasValueFlow } @@ -4339,7 +4300,7 @@ public class Test { { // "com.google.common.collect;Iterators;false;getLast;(Iterator,Object);;Element of Argument[0];ReturnValue;value" Object out = null; - Iterator in = (Iterator)newWithElement(source()); + Iterator in = (Iterator)newWithElementDefault(source()); out = Iterators.getLast(in, null); sink(out); // $ hasValueFlow } @@ -4353,14 +4314,14 @@ public class Test { { // "com.google.common.collect;Iterators;false;getNext;(Iterator,Object);;Element of Argument[0];ReturnValue;value" Object out = null; - Iterator in = (Iterator)newWithElement(source()); + Iterator in = (Iterator)newWithElementDefault(source()); out = Iterators.getNext(in, null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;getOnlyElement;(Iterator);;Element of Argument[0];ReturnValue;value" Object out = null; - Iterator in = (Iterator)newWithElement(source()); + Iterator in = (Iterator)newWithElementDefault(source()); out = Iterators.getOnlyElement(in); sink(out); // $ hasValueFlow } @@ -4374,49 +4335,49 @@ public class Test { { // "com.google.common.collect;Iterators;false;getOnlyElement;(Iterator,Object);;Element of Argument[0];ReturnValue;value" Object out = null; - Iterator in = (Iterator)newWithElement(source()); + Iterator in = (Iterator)newWithElementDefault(source()); out = Iterators.getOnlyElement(in, null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;limit;(Iterator,int);;Element of Argument[0];Element of ReturnValue;value" Iterator out = null; - Iterator in = (Iterator)newWithElement(source()); + Iterator in = (Iterator)newWithElementDefault(source()); out = Iterators.limit(in, 0); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;mergeSorted;(Iterable,Comparator);;Element of Element of Argument[0];Element of ReturnValue;value" UnmodifiableIterator out = null; - Iterable in = (Iterable)newWithElement(newWithElement(source())); + Iterable in = (Iterable)List.of(newWithElementDefault(source())); out = Iterators.mergeSorted(in, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;paddedPartition;(Iterator,int);;Element of Argument[0];Element of Element of ReturnValue;value" UnmodifiableIterator out = null; - Iterator in = (Iterator)newWithElement(source()); + Iterator in = (Iterator)newWithElementDefault(source()); out = Iterators.paddedPartition(in, 0); - sink(getElement(getElement(out))); // $ hasValueFlow + sink(getElementDefault(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;partition;(Iterator,int);;Element of Argument[0];Element of Element of ReturnValue;value" UnmodifiableIterator out = null; - Iterator in = (Iterator)newWithElement(source()); + Iterator in = (Iterator)newWithElementDefault(source()); out = Iterators.partition(in, 0); - sink(getElement(getElement(out))); // $ hasValueFlow + sink(getElementDefault(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;peekingIterator;(Iterator);;Element of Argument[0];Element of ReturnValue;value" PeekingIterator out = null; - Iterator in = (Iterator)newWithElement(source()); + Iterator in = (Iterator)newWithElementDefault(source()); out = Iterators.peekingIterator(in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;peekingIterator;(PeekingIterator);;Element of Argument[0];Element of ReturnValue;value" PeekingIterator out = null; - PeekingIterator in = (PeekingIterator)newWithElement(source()); + PeekingIterator in = (PeekingIterator)newWithElementDefault(source()); out = Iterators.peekingIterator(in); sink(getElement(out)); // $ hasValueFlow } @@ -4430,65 +4391,65 @@ public class Test { { // "com.google.common.collect;Iterators;false;toArray;(Iterator,Class);;Element of Argument[0];ArrayElement of ReturnValue;value" Object[] out = null; - Iterator in = (Iterator)newWithElement(source()); + Iterator in = (Iterator)newWithElementDefault(source()); out = Iterators.toArray(in, null); sink(getArrayElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;tryFind;(Iterator,Predicate);;Element of Argument[0];Element of ReturnValue;value" Optional out = null; - Iterator in = (Iterator)newWithElement(source()); + Iterator in = (Iterator)newWithElementDefault(source()); out = Iterators.tryFind(in, null); - sink(getElement(out)); // $ hasValueFlow + sink(getElementDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;unmodifiableIterator;(Iterator);;Element of Argument[0];Element of ReturnValue;value" UnmodifiableIterator out = null; - Iterator in = (Iterator)newWithElement(source()); + Iterator in = (Iterator)newWithElementDefault(source()); out = Iterators.unmodifiableIterator(in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;unmodifiableIterator;(UnmodifiableIterator);;Element of Argument[0];Element of ReturnValue;value" UnmodifiableIterator out = null; - UnmodifiableIterator in = (UnmodifiableIterator)newWithElement(source()); + UnmodifiableIterator in = (UnmodifiableIterator)newWithElementDefault(source()); out = Iterators.unmodifiableIterator(in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;LinkedHashMultimap;true;create;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value" LinkedHashMultimap out = null; - Multimap in = (Multimap)newWithMapKey(source()); + Multimap in = (Multimap)newWithMapKeyDefault(source()); out = LinkedHashMultimap.create(in); - sink(getMapKey(out)); // $ hasValueFlow + sink(getMapKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;LinkedHashMultimap;true;create;(Multimap);;MapValue of Argument[0];MapValue of ReturnValue;value" LinkedHashMultimap out = null; - Multimap in = (Multimap)newWithMapValue(source()); + Multimap in = (Multimap)newWithMapValueDefault(source()); out = LinkedHashMultimap.create(in); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;LinkedHashMultiset;true;create;(Iterable);;Element of Argument[0];Element of ReturnValue;value" LinkedHashMultiset out = null; - Iterable in = (Iterable)newWithElement(source()); + Iterable in = (Iterable)List.of(source()); out = LinkedHashMultiset.create(in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;LinkedListMultimap;true;create;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value" LinkedListMultimap out = null; - Multimap in = (Multimap)newWithMapKey(source()); + Multimap in = (Multimap)newWithMapKeyDefault(source()); out = LinkedListMultimap.create(in); - sink(getMapKey(out)); // $ hasValueFlow + sink(getMapKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;LinkedListMultimap;true;create;(Multimap);;MapValue of Argument[0];MapValue of ReturnValue;value" LinkedListMultimap out = null; - Multimap in = (Multimap)newWithMapValue(source()); + Multimap in = (Multimap)newWithMapValueDefault(source()); out = LinkedListMultimap.create(in); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Lists;false;asList;(Object,Object,Object[]);;Argument[0..1];Element of ReturnValue;value" @@ -4528,16 +4489,16 @@ public class Test { { // "com.google.common.collect;Lists;false;cartesianProduct;(List);;Element of Element of Argument[0];Element of Element of ReturnValue;value" List out = null; - List in = (List)List.of(newWithElement(source())); + List in = (List)List.of(newWithElementDefault(source())); out = Lists.cartesianProduct(in); - sink(getElement(getElement(out))); // $ hasValueFlow + sink(getElementDefault(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Lists;false;cartesianProduct;(List[]);;Element of ArrayElement of Argument[0];Element of Element of ReturnValue;value" List out = null; - List[] in = (List[])new List[]{(List)newWithElement(source())}; + List[] in = (List[])new List[]{(List)newWithElementDefault(source())}; out = Lists.cartesianProduct(in); - sink(getElement(getElement(out))); // $ hasValueFlow + sink(getElementDefault(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Lists;false;charactersOf;(CharSequence);;Argument[0];Element of ReturnValue;taint" @@ -4563,7 +4524,7 @@ public class Test { { // "com.google.common.collect;Lists;false;newArrayList;(Iterator);;Element of Argument[0];Element of ReturnValue;value" ArrayList out = null; - Iterator in = (Iterator)newWithElement(source()); + Iterator in = (Iterator)newWithElementDefault(source()); out = Lists.newArrayList(in); sink(getElement(out)); // $ hasValueFlow } @@ -4593,7 +4554,7 @@ public class Test { List out = null; List in = (List)List.of(source()); out = Lists.partition(in, 0); - sink(getElement(getElement(out))); // $ hasValueFlow + sink(getElementDefault(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Lists;false;reverse;(List);;Element of Argument[0];Element of ReturnValue;value" @@ -4605,203 +4566,203 @@ public class Test { { // "com.google.common.collect;MapDifference$ValueDifference;true;leftValue;();;SyntheticField[com.google.common.collect.MapDifference.left] of Argument[-1];ReturnValue;value" Object out = null; - MapDifference.ValueDifference in = (MapDifference.ValueDifference)newWithMapDifference_left(source()); + MapDifference.ValueDifference in = (MapDifference.ValueDifference)newWithMapDifference_leftDefault(source()); out = in.leftValue(); sink(out); // $ hasValueFlow } { // "com.google.common.collect;MapDifference$ValueDifference;true;rightValue;();;SyntheticField[com.google.common.collect.MapDifference.right] of Argument[-1];ReturnValue;value" Object out = null; - MapDifference.ValueDifference in = (MapDifference.ValueDifference)newWithMapDifference_right(source()); + MapDifference.ValueDifference in = (MapDifference.ValueDifference)newWithMapDifference_rightDefault(source()); out = in.rightValue(); sink(out); // $ hasValueFlow } { // "com.google.common.collect;MapDifference;true;entriesDiffering;();;MapKey of SyntheticField[com.google.common.collect.MapDifference.left] of Argument[-1];MapKey of ReturnValue;value" SortedMap out = null; - SortedMapDifference in = (SortedMapDifference)newWithMapDifference_left(newWithMapKey(source())); + SortedMapDifference in = (SortedMapDifference)newWithMapDifference_leftDefault(newWithMapKeyDefault(source())); out = in.entriesDiffering(); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;MapDifference;true;entriesDiffering;();;MapKey of SyntheticField[com.google.common.collect.MapDifference.left] of Argument[-1];MapKey of ReturnValue;value" Map out = null; - MapDifference in = (MapDifference)newWithMapDifference_left(newWithMapKey(source())); + MapDifference in = (MapDifference)newWithMapDifference_leftDefault(newWithMapKeyDefault(source())); out = in.entriesDiffering(); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;MapDifference;true;entriesDiffering;();;MapKey of SyntheticField[com.google.common.collect.MapDifference.right] of Argument[-1];MapKey of ReturnValue;value" SortedMap out = null; - SortedMapDifference in = (SortedMapDifference)newWithMapDifference_right(newWithMapKey(source())); + SortedMapDifference in = (SortedMapDifference)newWithMapDifference_rightDefault(newWithMapKeyDefault(source())); out = in.entriesDiffering(); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;MapDifference;true;entriesDiffering;();;MapKey of SyntheticField[com.google.common.collect.MapDifference.right] of Argument[-1];MapKey of ReturnValue;value" Map out = null; - MapDifference in = (MapDifference)newWithMapDifference_right(newWithMapKey(source())); + MapDifference in = (MapDifference)newWithMapDifference_rightDefault(newWithMapKeyDefault(source())); out = in.entriesDiffering(); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;MapDifference;true;entriesDiffering;();;MapValue of SyntheticField[com.google.common.collect.MapDifference.left] of Argument[-1];SyntheticField[com.google.common.collect.MapDifference.left] of MapValue of ReturnValue;value" SortedMap out = null; - SortedMapDifference in = (SortedMapDifference)newWithMapDifference_left(newWithMapValue(source())); + SortedMapDifference in = (SortedMapDifference)newWithMapDifference_leftDefault(newWithMapValueDefault(source())); out = in.entriesDiffering(); - sink(getMapDifference_left(getMapValue(out))); // $ hasValueFlow + sink(getMapDifference_leftDefault(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;MapDifference;true;entriesDiffering;();;MapValue of SyntheticField[com.google.common.collect.MapDifference.left] of Argument[-1];SyntheticField[com.google.common.collect.MapDifference.left] of MapValue of ReturnValue;value" Map out = null; - MapDifference in = (MapDifference)newWithMapDifference_left(newWithMapValue(source())); + MapDifference in = (MapDifference)newWithMapDifference_leftDefault(newWithMapValueDefault(source())); out = in.entriesDiffering(); - sink(getMapDifference_left(getMapValue(out))); // $ hasValueFlow + sink(getMapDifference_leftDefault(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;MapDifference;true;entriesDiffering;();;MapValue of SyntheticField[com.google.common.collect.MapDifference.right] of Argument[-1];SyntheticField[com.google.common.collect.MapDifference.right] of MapValue of ReturnValue;value" SortedMap out = null; - SortedMapDifference in = (SortedMapDifference)newWithMapDifference_right(newWithMapValue(source())); + SortedMapDifference in = (SortedMapDifference)newWithMapDifference_rightDefault(newWithMapValueDefault(source())); out = in.entriesDiffering(); - sink(getMapDifference_right(getMapValue(out))); // $ hasValueFlow + sink(getMapDifference_rightDefault(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;MapDifference;true;entriesDiffering;();;MapValue of SyntheticField[com.google.common.collect.MapDifference.right] of Argument[-1];SyntheticField[com.google.common.collect.MapDifference.right] of MapValue of ReturnValue;value" Map out = null; - MapDifference in = (MapDifference)newWithMapDifference_right(newWithMapValue(source())); + MapDifference in = (MapDifference)newWithMapDifference_rightDefault(newWithMapValueDefault(source())); out = in.entriesDiffering(); - sink(getMapDifference_right(getMapValue(out))); // $ hasValueFlow + sink(getMapDifference_rightDefault(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;MapDifference;true;entriesInCommon;();;MapKey of SyntheticField[com.google.common.collect.MapDifference.left] of Argument[-1];MapKey of ReturnValue;value" SortedMap out = null; - SortedMapDifference in = (SortedMapDifference)newWithMapDifference_left(newWithMapKey(source())); + SortedMapDifference in = (SortedMapDifference)newWithMapDifference_leftDefault(newWithMapKeyDefault(source())); out = in.entriesInCommon(); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;MapDifference;true;entriesInCommon;();;MapKey of SyntheticField[com.google.common.collect.MapDifference.left] of Argument[-1];MapKey of ReturnValue;value" Map out = null; - MapDifference in = (MapDifference)newWithMapDifference_left(newWithMapKey(source())); + MapDifference in = (MapDifference)newWithMapDifference_leftDefault(newWithMapKeyDefault(source())); out = in.entriesInCommon(); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;MapDifference;true;entriesInCommon;();;MapKey of SyntheticField[com.google.common.collect.MapDifference.right] of Argument[-1];MapKey of ReturnValue;value" SortedMap out = null; - SortedMapDifference in = (SortedMapDifference)newWithMapDifference_right(newWithMapKey(source())); + SortedMapDifference in = (SortedMapDifference)newWithMapDifference_rightDefault(newWithMapKeyDefault(source())); out = in.entriesInCommon(); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;MapDifference;true;entriesInCommon;();;MapKey of SyntheticField[com.google.common.collect.MapDifference.right] of Argument[-1];MapKey of ReturnValue;value" Map out = null; - MapDifference in = (MapDifference)newWithMapDifference_right(newWithMapKey(source())); + MapDifference in = (MapDifference)newWithMapDifference_rightDefault(newWithMapKeyDefault(source())); out = in.entriesInCommon(); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;MapDifference;true;entriesInCommon;();;MapValue of SyntheticField[com.google.common.collect.MapDifference.left] of Argument[-1];MapValue of ReturnValue;value" SortedMap out = null; - SortedMapDifference in = (SortedMapDifference)newWithMapDifference_left(newWithMapValue(source())); + SortedMapDifference in = (SortedMapDifference)newWithMapDifference_leftDefault(newWithMapValueDefault(source())); out = in.entriesInCommon(); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;MapDifference;true;entriesInCommon;();;MapValue of SyntheticField[com.google.common.collect.MapDifference.left] of Argument[-1];MapValue of ReturnValue;value" Map out = null; - MapDifference in = (MapDifference)newWithMapDifference_left(newWithMapValue(source())); + MapDifference in = (MapDifference)newWithMapDifference_leftDefault(newWithMapValueDefault(source())); out = in.entriesInCommon(); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;MapDifference;true;entriesInCommon;();;MapValue of SyntheticField[com.google.common.collect.MapDifference.right] of Argument[-1];MapValue of ReturnValue;value" SortedMap out = null; - SortedMapDifference in = (SortedMapDifference)newWithMapDifference_right(newWithMapValue(source())); + SortedMapDifference in = (SortedMapDifference)newWithMapDifference_rightDefault(newWithMapValueDefault(source())); out = in.entriesInCommon(); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;MapDifference;true;entriesInCommon;();;MapValue of SyntheticField[com.google.common.collect.MapDifference.right] of Argument[-1];MapValue of ReturnValue;value" Map out = null; - MapDifference in = (MapDifference)newWithMapDifference_right(newWithMapValue(source())); + MapDifference in = (MapDifference)newWithMapDifference_rightDefault(newWithMapValueDefault(source())); out = in.entriesInCommon(); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;MapDifference;true;entriesOnlyOnLeft;();;MapKey of SyntheticField[com.google.common.collect.MapDifference.left] of Argument[-1];MapKey of ReturnValue;value" SortedMap out = null; - SortedMapDifference in = (SortedMapDifference)newWithMapDifference_left(newWithMapKey(source())); + SortedMapDifference in = (SortedMapDifference)newWithMapDifference_leftDefault(newWithMapKeyDefault(source())); out = in.entriesOnlyOnLeft(); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;MapDifference;true;entriesOnlyOnLeft;();;MapKey of SyntheticField[com.google.common.collect.MapDifference.left] of Argument[-1];MapKey of ReturnValue;value" Map out = null; - MapDifference in = (MapDifference)newWithMapDifference_left(newWithMapKey(source())); + MapDifference in = (MapDifference)newWithMapDifference_leftDefault(newWithMapKeyDefault(source())); out = in.entriesOnlyOnLeft(); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;MapDifference;true;entriesOnlyOnLeft;();;MapValue of SyntheticField[com.google.common.collect.MapDifference.left] of Argument[-1];MapValue of ReturnValue;value" SortedMap out = null; - SortedMapDifference in = (SortedMapDifference)newWithMapDifference_left(newWithMapValue(source())); + SortedMapDifference in = (SortedMapDifference)newWithMapDifference_leftDefault(newWithMapValueDefault(source())); out = in.entriesOnlyOnLeft(); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;MapDifference;true;entriesOnlyOnLeft;();;MapValue of SyntheticField[com.google.common.collect.MapDifference.left] of Argument[-1];MapValue of ReturnValue;value" Map out = null; - MapDifference in = (MapDifference)newWithMapDifference_left(newWithMapValue(source())); + MapDifference in = (MapDifference)newWithMapDifference_leftDefault(newWithMapValueDefault(source())); out = in.entriesOnlyOnLeft(); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;MapDifference;true;entriesOnlyOnRight;();;MapKey of SyntheticField[com.google.common.collect.MapDifference.right] of Argument[-1];MapKey of ReturnValue;value" SortedMap out = null; - SortedMapDifference in = (SortedMapDifference)newWithMapDifference_right(newWithMapKey(source())); + SortedMapDifference in = (SortedMapDifference)newWithMapDifference_rightDefault(newWithMapKeyDefault(source())); out = in.entriesOnlyOnRight(); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;MapDifference;true;entriesOnlyOnRight;();;MapKey of SyntheticField[com.google.common.collect.MapDifference.right] of Argument[-1];MapKey of ReturnValue;value" Map out = null; - MapDifference in = (MapDifference)newWithMapDifference_right(newWithMapKey(source())); + MapDifference in = (MapDifference)newWithMapDifference_rightDefault(newWithMapKeyDefault(source())); out = in.entriesOnlyOnRight(); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;MapDifference;true;entriesOnlyOnRight;();;MapValue of SyntheticField[com.google.common.collect.MapDifference.right] of Argument[-1];MapValue of ReturnValue;value" SortedMap out = null; - SortedMapDifference in = (SortedMapDifference)newWithMapDifference_right(newWithMapValue(source())); + SortedMapDifference in = (SortedMapDifference)newWithMapDifference_rightDefault(newWithMapValueDefault(source())); out = in.entriesOnlyOnRight(); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;MapDifference;true;entriesOnlyOnRight;();;MapValue of SyntheticField[com.google.common.collect.MapDifference.right] of Argument[-1];MapValue of ReturnValue;value" Map out = null; - MapDifference in = (MapDifference)newWithMapDifference_right(newWithMapValue(source())); + MapDifference in = (MapDifference)newWithMapDifference_rightDefault(newWithMapValueDefault(source())); out = in.entriesOnlyOnRight(); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;asMap;(NavigableSet,Function);;Element of Argument[0];MapKey of ReturnValue;value" NavigableMap out = null; - NavigableSet in = (NavigableSet)newWithElement(source()); + NavigableSet in = (NavigableSet)newWithElementDefault(source()); out = Maps.asMap(in, (Function)null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;asMap;(Set,Function);;Element of Argument[0];MapKey of ReturnValue;value" Map out = null; - Set in = (Set)newWithElement(source()); + Set in = (Set)newWithElementDefault(source()); out = Maps.asMap(in, (Function)null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;asMap;(SortedSet,Function);;Element of Argument[0];MapKey of ReturnValue;value" SortedMap out = null; - SortedSet in = (SortedSet)newWithElement(source()); + SortedSet in = (SortedSet)newWithElementDefault(source()); out = Maps.asMap(in, (Function)null); sink(getMapKey(out)); // $ hasValueFlow } @@ -4810,96 +4771,96 @@ public class Test { MapDifference out = null; Map in = (Map)Map.of(source(), null); out = Maps.difference(in, (Map)null); - sink(getMapKey(getMapDifference_left(out))); // $ hasValueFlow + sink(getMapKeyDefault(getMapDifference_leftDefault(out))); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;difference;(Map,Map);;MapKey of Argument[1];MapKey of SyntheticField[com.google.common.collect.MapDifference.right] of ReturnValue;value" MapDifference out = null; Map in = (Map)Map.of(source(), null); out = Maps.difference((Map)null, in); - sink(getMapKey(getMapDifference_right(out))); // $ hasValueFlow + sink(getMapKeyDefault(getMapDifference_rightDefault(out))); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;difference;(Map,Map);;MapValue of Argument[0];MapValue of SyntheticField[com.google.common.collect.MapDifference.left] of ReturnValue;value" MapDifference out = null; Map in = (Map)Map.of(null, source()); out = Maps.difference(in, (Map)null); - sink(getMapValue(getMapDifference_left(out))); // $ hasValueFlow + sink(getMapValueDefault(getMapDifference_leftDefault(out))); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;difference;(Map,Map);;MapValue of Argument[1];MapValue of SyntheticField[com.google.common.collect.MapDifference.right] of ReturnValue;value" MapDifference out = null; Map in = (Map)Map.of(null, source()); out = Maps.difference((Map)null, in); - sink(getMapValue(getMapDifference_right(out))); // $ hasValueFlow + sink(getMapValueDefault(getMapDifference_rightDefault(out))); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;difference;(Map,Map,Equivalence);;MapKey of Argument[0];MapKey of SyntheticField[com.google.common.collect.MapDifference.left] of ReturnValue;value" MapDifference out = null; Map in = (Map)Map.of(source(), null); out = Maps.difference(in, null, null); - sink(getMapKey(getMapDifference_left(out))); // $ hasValueFlow + sink(getMapKeyDefault(getMapDifference_leftDefault(out))); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;difference;(Map,Map,Equivalence);;MapKey of Argument[1];MapKey of SyntheticField[com.google.common.collect.MapDifference.right] of ReturnValue;value" MapDifference out = null; Map in = (Map)Map.of(source(), null); out = Maps.difference(null, in, null); - sink(getMapKey(getMapDifference_right(out))); // $ hasValueFlow + sink(getMapKeyDefault(getMapDifference_rightDefault(out))); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;difference;(Map,Map,Equivalence);;MapValue of Argument[0];MapValue of SyntheticField[com.google.common.collect.MapDifference.left] of ReturnValue;value" MapDifference out = null; Map in = (Map)Map.of(null, source()); out = Maps.difference(in, null, null); - sink(getMapValue(getMapDifference_left(out))); // $ hasValueFlow + sink(getMapValueDefault(getMapDifference_leftDefault(out))); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;difference;(Map,Map,Equivalence);;MapValue of Argument[1];MapValue of SyntheticField[com.google.common.collect.MapDifference.right] of ReturnValue;value" MapDifference out = null; Map in = (Map)Map.of(null, source()); out = Maps.difference(null, in, null); - sink(getMapValue(getMapDifference_right(out))); // $ hasValueFlow + sink(getMapValueDefault(getMapDifference_rightDefault(out))); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;difference;(SortedMap,Map);;MapKey of Argument[0];MapKey of SyntheticField[com.google.common.collect.MapDifference.left] of ReturnValue;value" SortedMapDifference out = null; - SortedMap in = (SortedMap)newWithMapKey(source()); + SortedMap in = (SortedMap)newWithMapKeyDefault(source()); out = Maps.difference(in, (Map)null); - sink(getMapKey(getMapDifference_left(out))); // $ hasValueFlow + sink(getMapKeyDefault(getMapDifference_leftDefault(out))); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;difference;(SortedMap,Map);;MapKey of Argument[1];MapKey of SyntheticField[com.google.common.collect.MapDifference.right] of ReturnValue;value" SortedMapDifference out = null; Map in = (Map)Map.of(source(), null); out = Maps.difference((SortedMap)null, in); - sink(getMapKey(getMapDifference_right(out))); // $ hasValueFlow + sink(getMapKeyDefault(getMapDifference_rightDefault(out))); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;difference;(SortedMap,Map);;MapValue of Argument[0];MapValue of SyntheticField[com.google.common.collect.MapDifference.left] of ReturnValue;value" SortedMapDifference out = null; - SortedMap in = (SortedMap)newWithMapValue(source()); + SortedMap in = (SortedMap)newWithMapValueDefault(source()); out = Maps.difference(in, (Map)null); - sink(getMapValue(getMapDifference_left(out))); // $ hasValueFlow + sink(getMapValueDefault(getMapDifference_leftDefault(out))); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;difference;(SortedMap,Map);;MapValue of Argument[1];MapValue of SyntheticField[com.google.common.collect.MapDifference.right] of ReturnValue;value" SortedMapDifference out = null; Map in = (Map)Map.of(null, source()); out = Maps.difference((SortedMap)null, in); - sink(getMapValue(getMapDifference_right(out))); // $ hasValueFlow + sink(getMapValueDefault(getMapDifference_rightDefault(out))); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;filterEntries;;;MapKey of Argument[0];MapKey of ReturnValue;value" SortedMap out = null; - SortedMap in = (SortedMap)newWithMapKey(source()); + SortedMap in = (SortedMap)newWithMapKeyDefault(source()); out = Maps.filterEntries(in, (Predicate)null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;filterEntries;;;MapKey of Argument[0];MapKey of ReturnValue;value" NavigableMap out = null; - NavigableMap in = (NavigableMap)newWithMapKey(source()); + NavigableMap in = (NavigableMap)newWithMapKeyDefault(source()); out = Maps.filterEntries(in, (Predicate)null); sink(getMapKey(out)); // $ hasValueFlow } @@ -4913,21 +4874,21 @@ public class Test { { // "com.google.common.collect;Maps;false;filterEntries;;;MapKey of Argument[0];MapKey of ReturnValue;value" BiMap out = null; - BiMap in = (BiMap)newWithMapKey(source()); + BiMap in = (BiMap)newWithMapKeyDefault(source()); out = Maps.filterEntries(in, (Predicate)null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;filterKeys;;;MapKey of Argument[0];MapKey of ReturnValue;value" SortedMap out = null; - SortedMap in = (SortedMap)newWithMapKey(source()); + SortedMap in = (SortedMap)newWithMapKeyDefault(source()); out = Maps.filterKeys(in, (Predicate)null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;filterKeys;;;MapKey of Argument[0];MapKey of ReturnValue;value" NavigableMap out = null; - NavigableMap in = (NavigableMap)newWithMapKey(source()); + NavigableMap in = (NavigableMap)newWithMapKeyDefault(source()); out = Maps.filterKeys(in, (Predicate)null); sink(getMapKey(out)); // $ hasValueFlow } @@ -4941,21 +4902,21 @@ public class Test { { // "com.google.common.collect;Maps;false;filterKeys;;;MapKey of Argument[0];MapKey of ReturnValue;value" BiMap out = null; - BiMap in = (BiMap)newWithMapKey(source()); + BiMap in = (BiMap)newWithMapKeyDefault(source()); out = Maps.filterKeys(in, (Predicate)null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;filterValues;;;MapKey of Argument[0];MapKey of ReturnValue;value" SortedMap out = null; - SortedMap in = (SortedMap)newWithMapKey(source()); + SortedMap in = (SortedMap)newWithMapKeyDefault(source()); out = Maps.filterValues(in, (Predicate)null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;filterValues;;;MapKey of Argument[0];MapKey of ReturnValue;value" NavigableMap out = null; - NavigableMap in = (NavigableMap)newWithMapKey(source()); + NavigableMap in = (NavigableMap)newWithMapKeyDefault(source()); out = Maps.filterValues(in, (Predicate)null); sink(getMapKey(out)); // $ hasValueFlow } @@ -4969,21 +4930,21 @@ public class Test { { // "com.google.common.collect;Maps;false;filterValues;;;MapKey of Argument[0];MapKey of ReturnValue;value" BiMap out = null; - BiMap in = (BiMap)newWithMapKey(source()); + BiMap in = (BiMap)newWithMapKeyDefault(source()); out = Maps.filterValues(in, (Predicate)null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;fromProperties;(Properties);;MapKey of Argument[0];MapKey of ReturnValue;value" ImmutableMap out = null; - Properties in = (Properties)newWithMapKey(source()); + Properties in = (Properties)newWithMapKeyDefault(source()); out = Maps.fromProperties(in); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;fromProperties;(Properties);;MapValue of Argument[0];MapValue of ReturnValue;value" ImmutableMap out = null; - Properties in = (Properties)newWithMapValue(source()); + Properties in = (Properties)newWithMapValueDefault(source()); out = Maps.fromProperties(in); sink(getMapValue(out)); // $ hasValueFlow } @@ -4992,14 +4953,14 @@ public class Test { Map.Entry out = null; Object in = (Object)source(); out = Maps.immutableEntry(in, null); - sink(getMapKey(out)); // $ hasValueFlow + sink(out.getKey()); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;immutableEntry;(Object,Object);;Argument[1];MapValue of ReturnValue;value" Map.Entry out = null; Object in = (Object)source(); out = Maps.immutableEntry(null, in); - sink(getMapValue(out)); // $ hasValueFlow + sink(out.getValue()); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;immutableEnumMap;(Map);;MapValue of Argument[0];MapValue of ReturnValue;value" @@ -5046,70 +5007,70 @@ public class Test { { // "com.google.common.collect;Maps;false;newTreeMap;(SortedMap);;MapKey of Argument[0];MapKey of ReturnValue;value" TreeMap out = null; - SortedMap in = (SortedMap)newWithMapKey(source()); + SortedMap in = (SortedMap)newWithMapKeyDefault(source()); out = Maps.newTreeMap(in); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;newTreeMap;(SortedMap);;MapValue of Argument[0];MapValue of ReturnValue;value" TreeMap out = null; - SortedMap in = (SortedMap)newWithMapValue(source()); + SortedMap in = (SortedMap)newWithMapValueDefault(source()); out = Maps.newTreeMap(in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;subMap;(NavigableMap,Range);;MapKey of Argument[0];MapKey of ReturnValue;value" NavigableMap out = null; - NavigableMap in = (NavigableMap)newWithMapKey(source()); + NavigableMap in = (NavigableMap)newWithMapKeyDefault(source()); out = Maps.subMap(in, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;subMap;(NavigableMap,Range);;MapValue of Argument[0];MapValue of ReturnValue;value" NavigableMap out = null; - NavigableMap in = (NavigableMap)newWithMapValue(source()); + NavigableMap in = (NavigableMap)newWithMapValueDefault(source()); out = Maps.subMap(in, null); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;synchronizedBiMap;(BiMap);;MapKey of Argument[0];MapKey of ReturnValue;value" BiMap out = null; - BiMap in = (BiMap)newWithMapKey(source()); + BiMap in = (BiMap)newWithMapKeyDefault(source()); out = Maps.synchronizedBiMap(in); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;synchronizedBiMap;(BiMap);;MapValue of Argument[0];MapValue of ReturnValue;value" BiMap out = null; - BiMap in = (BiMap)newWithMapValue(source()); + BiMap in = (BiMap)newWithMapValueDefault(source()); out = Maps.synchronizedBiMap(in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;synchronizedNavigableMap;(NavigableMap);;MapKey of Argument[0];MapKey of ReturnValue;value" NavigableMap out = null; - NavigableMap in = (NavigableMap)newWithMapKey(source()); + NavigableMap in = (NavigableMap)newWithMapKeyDefault(source()); out = Maps.synchronizedNavigableMap(in); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;synchronizedNavigableMap;(NavigableMap);;MapValue of Argument[0];MapValue of ReturnValue;value" NavigableMap out = null; - NavigableMap in = (NavigableMap)newWithMapValue(source()); + NavigableMap in = (NavigableMap)newWithMapValueDefault(source()); out = Maps.synchronizedNavigableMap(in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;toMap;(Iterable,Function);;Element of Argument[0];MapKey of ReturnValue;value" ImmutableMap out = null; - Iterable in = (Iterable)newWithElement(source()); + Iterable in = (Iterable)List.of(source()); out = Maps.toMap(in, (Function)null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;toMap;(Iterator,Function);;Element of Argument[0];MapKey of ReturnValue;value" ImmutableMap out = null; - Iterator in = (Iterator)newWithElement(source()); + Iterator in = (Iterator)newWithElementDefault(source()); out = Maps.toMap(in, (Function)null); sink(getMapKey(out)); // $ hasValueFlow } @@ -5123,329 +5084,329 @@ public class Test { { // "com.google.common.collect;Maps;false;transformValues;(NavigableMap,Function);;MapKey of Argument[0];MapKey of ReturnValue;value" NavigableMap out = null; - NavigableMap in = (NavigableMap)newWithMapKey(source()); + NavigableMap in = (NavigableMap)newWithMapKeyDefault(source()); out = Maps.transformValues(in, (Function)null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;transformValues;(SortedMap,Function);;MapKey of Argument[0];MapKey of ReturnValue;value" SortedMap out = null; - SortedMap in = (SortedMap)newWithMapKey(source()); + SortedMap in = (SortedMap)newWithMapKeyDefault(source()); out = Maps.transformValues(in, (Function)null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;uniqueIndex;(Iterable,Function);;Element of Argument[0];MapValue of ReturnValue;value" ImmutableMap out = null; - Iterable in = (Iterable)newWithElement(source()); + Iterable in = (Iterable)List.of(source()); out = Maps.uniqueIndex(in, (Function)null); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;uniqueIndex;(Iterator,Function);;Element of Argument[0];MapValue of ReturnValue;value" ImmutableMap out = null; - Iterator in = (Iterator)newWithElement(source()); + Iterator in = (Iterator)newWithElementDefault(source()); out = Maps.uniqueIndex(in, (Function)null); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;unmodifiableBiMap;(BiMap);;MapKey of Argument[0];MapKey of ReturnValue;value" BiMap out = null; - BiMap in = (BiMap)newWithMapKey(source()); + BiMap in = (BiMap)newWithMapKeyDefault(source()); out = Maps.unmodifiableBiMap(in); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;unmodifiableBiMap;(BiMap);;MapValue of Argument[0];MapValue of ReturnValue;value" BiMap out = null; - BiMap in = (BiMap)newWithMapValue(source()); + BiMap in = (BiMap)newWithMapValueDefault(source()); out = Maps.unmodifiableBiMap(in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;unmodifiableNavigableMap;(NavigableMap);;MapKey of Argument[0];MapKey of ReturnValue;value" NavigableMap out = null; - NavigableMap in = (NavigableMap)newWithMapKey(source()); + NavigableMap in = (NavigableMap)newWithMapKeyDefault(source()); out = Maps.unmodifiableNavigableMap(in); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;unmodifiableNavigableMap;(NavigableMap);;MapValue of Argument[0];MapValue of ReturnValue;value" NavigableMap out = null; - NavigableMap in = (NavigableMap)newWithMapValue(source()); + NavigableMap in = (NavigableMap)newWithMapValueDefault(source()); out = Maps.unmodifiableNavigableMap(in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;asMap;();;MapKey of Argument[-1];MapKey of ReturnValue;value" NavigableMap out = null; - TreeMultimap in = (TreeMultimap)newWithMapKey(source()); + TreeMultimap in = (TreeMultimap)newWithMapKeyDefault(source()); out = in.asMap(); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;asMap;();;MapKey of Argument[-1];MapKey of ReturnValue;value" Map out = null; - SortedSetMultimap in = (SortedSetMultimap)newWithMapKey(source()); + SortedSetMultimap in = (SortedSetMultimap)newWithMapKeyDefault(source()); out = in.asMap(); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;asMap;();;MapKey of Argument[-1];MapKey of ReturnValue;value" Map out = null; - SetMultimap in = (SetMultimap)newWithMapKey(source()); + SetMultimap in = (SetMultimap)newWithMapKeyDefault(source()); out = in.asMap(); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;asMap;();;MapKey of Argument[-1];MapKey of ReturnValue;value" Map out = null; - Multimap in = (Multimap)newWithMapKey(source()); + Multimap in = (Multimap)newWithMapKeyDefault(source()); out = in.asMap(); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;asMap;();;MapKey of Argument[-1];MapKey of ReturnValue;value" Map out = null; - ListMultimap in = (ListMultimap)newWithMapKey(source()); + ListMultimap in = (ListMultimap)newWithMapKeyDefault(source()); out = in.asMap(); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;asMap;();;MapKey of Argument[-1];MapKey of ReturnValue;value" ImmutableMap out = null; - ImmutableMultimap in = (ImmutableMultimap)newWithMapKey(source()); + ImmutableMultimap in = (ImmutableMultimap)newWithMapKeyDefault(source()); out = in.asMap(); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;asMap;();;MapValue of Argument[-1];Element of MapValue of ReturnValue;value" NavigableMap out = null; - TreeMultimap in = (TreeMultimap)newWithMapValue(source()); + TreeMultimap in = (TreeMultimap)newWithMapValueDefault(source()); out = in.asMap(); - sink(getElement(getMapValue(out))); // $ hasValueFlow + sink(getElementDefault(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;asMap;();;MapValue of Argument[-1];Element of MapValue of ReturnValue;value" Map out = null; - SortedSetMultimap in = (SortedSetMultimap)newWithMapValue(source()); + SortedSetMultimap in = (SortedSetMultimap)newWithMapValueDefault(source()); out = in.asMap(); - sink(getElement(getMapValue(out))); // $ hasValueFlow + sink(getElementDefault(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;asMap;();;MapValue of Argument[-1];Element of MapValue of ReturnValue;value" Map out = null; - SetMultimap in = (SetMultimap)newWithMapValue(source()); + SetMultimap in = (SetMultimap)newWithMapValueDefault(source()); out = in.asMap(); - sink(getElement(getMapValue(out))); // $ hasValueFlow + sink(getElementDefault(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;asMap;();;MapValue of Argument[-1];Element of MapValue of ReturnValue;value" Map out = null; - Multimap in = (Multimap)newWithMapValue(source()); + Multimap in = (Multimap)newWithMapValueDefault(source()); out = in.asMap(); - sink(getElement(getMapValue(out))); // $ hasValueFlow + sink(getElementDefault(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;asMap;();;MapValue of Argument[-1];Element of MapValue of ReturnValue;value" Map out = null; - ListMultimap in = (ListMultimap)newWithMapValue(source()); + ListMultimap in = (ListMultimap)newWithMapValueDefault(source()); out = in.asMap(); - sink(getElement(getMapValue(out))); // $ hasValueFlow + sink(getElementDefault(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;asMap;();;MapValue of Argument[-1];Element of MapValue of ReturnValue;value" ImmutableMap out = null; - ImmutableMultimap in = (ImmutableMultimap)newWithMapValue(source()); + ImmutableMultimap in = (ImmutableMultimap)newWithMapValueDefault(source()); out = in.asMap(); - sink(getElement(getMapValue(out))); // $ hasValueFlow + sink(getElementDefault(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;entries;();;MapKey of Argument[-1];MapKey of Element of ReturnValue;value" Set out = null; - SetMultimap in = (SetMultimap)newWithMapKey(source()); + SetMultimap in = (SetMultimap)newWithMapKeyDefault(source()); out = in.entries(); - sink(getMapKey(getElement(out))); // $ hasValueFlow + sink(getMapKeyDefault(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;entries;();;MapKey of Argument[-1];MapKey of Element of ReturnValue;value" Set out = null; - LinkedHashMultimap in = (LinkedHashMultimap)newWithMapKey(source()); + LinkedHashMultimap in = (LinkedHashMultimap)newWithMapKeyDefault(source()); out = in.entries(); - sink(getMapKey(getElement(out))); // $ hasValueFlow + sink(getMapKeyDefault(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;entries;();;MapKey of Argument[-1];MapKey of Element of ReturnValue;value" List out = null; - LinkedListMultimap in = (LinkedListMultimap)newWithMapKey(source()); + LinkedListMultimap in = (LinkedListMultimap)newWithMapKeyDefault(source()); out = in.entries(); - sink(getMapKey(getElement(out))); // $ hasValueFlow + sink(getMapKeyDefault(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;entries;();;MapKey of Argument[-1];MapKey of Element of ReturnValue;value" ImmutableSet out = null; - ImmutableSetMultimap in = (ImmutableSetMultimap)newWithMapKey(source()); + ImmutableSetMultimap in = (ImmutableSetMultimap)newWithMapKeyDefault(source()); out = in.entries(); - sink(getMapKey(getElement(out))); // $ hasValueFlow + sink(getMapKeyDefault(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;entries;();;MapKey of Argument[-1];MapKey of Element of ReturnValue;value" ImmutableCollection out = null; - ImmutableMultimap in = (ImmutableMultimap)newWithMapKey(source()); + ImmutableMultimap in = (ImmutableMultimap)newWithMapKeyDefault(source()); out = in.entries(); - sink(getMapKey(getElement(out))); // $ hasValueFlow + sink(getMapKeyDefault(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;entries;();;MapKey of Argument[-1];MapKey of Element of ReturnValue;value" Collection out = null; - Multimap in = (Multimap)newWithMapKey(source()); + Multimap in = (Multimap)newWithMapKeyDefault(source()); out = in.entries(); - sink(getMapKey(getElement(out))); // $ hasValueFlow + sink(getMapKeyDefault(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;entries;();;MapValue of Argument[-1];MapValue of Element of ReturnValue;value" Set out = null; - SetMultimap in = (SetMultimap)newWithMapValue(source()); + SetMultimap in = (SetMultimap)newWithMapValueDefault(source()); out = in.entries(); - sink(getMapValue(getElement(out))); // $ hasValueFlow + sink(getMapValueDefault(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;entries;();;MapValue of Argument[-1];MapValue of Element of ReturnValue;value" Set out = null; - LinkedHashMultimap in = (LinkedHashMultimap)newWithMapValue(source()); + LinkedHashMultimap in = (LinkedHashMultimap)newWithMapValueDefault(source()); out = in.entries(); - sink(getMapValue(getElement(out))); // $ hasValueFlow + sink(getMapValueDefault(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;entries;();;MapValue of Argument[-1];MapValue of Element of ReturnValue;value" List out = null; - LinkedListMultimap in = (LinkedListMultimap)newWithMapValue(source()); + LinkedListMultimap in = (LinkedListMultimap)newWithMapValueDefault(source()); out = in.entries(); - sink(getMapValue(getElement(out))); // $ hasValueFlow + sink(getMapValueDefault(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;entries;();;MapValue of Argument[-1];MapValue of Element of ReturnValue;value" ImmutableSet out = null; - ImmutableSetMultimap in = (ImmutableSetMultimap)newWithMapValue(source()); + ImmutableSetMultimap in = (ImmutableSetMultimap)newWithMapValueDefault(source()); out = in.entries(); - sink(getMapValue(getElement(out))); // $ hasValueFlow + sink(getMapValueDefault(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;entries;();;MapValue of Argument[-1];MapValue of Element of ReturnValue;value" ImmutableCollection out = null; - ImmutableMultimap in = (ImmutableMultimap)newWithMapValue(source()); + ImmutableMultimap in = (ImmutableMultimap)newWithMapValueDefault(source()); out = in.entries(); - sink(getMapValue(getElement(out))); // $ hasValueFlow + sink(getMapValueDefault(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;entries;();;MapValue of Argument[-1];MapValue of Element of ReturnValue;value" Collection out = null; - Multimap in = (Multimap)newWithMapValue(source()); + Multimap in = (Multimap)newWithMapValueDefault(source()); out = in.entries(); - sink(getMapValue(getElement(out))); // $ hasValueFlow + sink(getMapValueDefault(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;get;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" SortedSet out = null; - SortedSetMultimap in = (SortedSetMultimap)newWithMapValue(source()); + SortedSetMultimap in = (SortedSetMultimap)newWithMapValueDefault(source()); out = in.get(null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;get;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" Set out = null; - SetMultimap in = (SetMultimap)newWithMapValue(source()); + SetMultimap in = (SetMultimap)newWithMapValueDefault(source()); out = in.get(null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;get;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" NavigableSet out = null; - TreeMultimap in = (TreeMultimap)newWithMapValue(source()); + TreeMultimap in = (TreeMultimap)newWithMapValueDefault(source()); out = in.get(null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;get;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" List out = null; - ListMultimap in = (ListMultimap)newWithMapValue(source()); + ListMultimap in = (ListMultimap)newWithMapValueDefault(source()); out = in.get(null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;get;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" List out = null; - LinkedListMultimap in = (LinkedListMultimap)newWithMapValue(source()); + LinkedListMultimap in = (LinkedListMultimap)newWithMapValueDefault(source()); out = in.get(null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;get;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" ImmutableSet out = null; - ImmutableSetMultimap in = (ImmutableSetMultimap)newWithMapValue(source()); + ImmutableSetMultimap in = (ImmutableSetMultimap)newWithMapValueDefault(source()); out = in.get(null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;get;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" ImmutableList out = null; - ImmutableListMultimap in = (ImmutableListMultimap)newWithMapValue(source()); + ImmutableListMultimap in = (ImmutableListMultimap)newWithMapValueDefault(source()); out = in.get(null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;get;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" ImmutableCollection out = null; - ImmutableMultimap in = (ImmutableMultimap)newWithMapValue(source()); + ImmutableMultimap in = (ImmutableMultimap)newWithMapValueDefault(source()); out = in.get(null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;get;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" Collection out = null; - Multimap in = (Multimap)newWithMapValue(source()); + Multimap in = (Multimap)newWithMapValueDefault(source()); out = in.get(null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;keySet;();;MapKey of Argument[-1];Element of ReturnValue;value" Set out = null; - Multimap in = (Multimap)newWithMapKey(source()); + Multimap in = (Multimap)newWithMapKeyDefault(source()); out = in.keySet(); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;keySet;();;MapKey of Argument[-1];Element of ReturnValue;value" Set out = null; - LinkedHashMultimap in = (LinkedHashMultimap)newWithMapKey(source()); + LinkedHashMultimap in = (LinkedHashMultimap)newWithMapKeyDefault(source()); out = in.keySet(); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;keySet;();;MapKey of Argument[-1];Element of ReturnValue;value" NavigableSet out = null; - TreeMultimap in = (TreeMultimap)newWithMapKey(source()); + TreeMultimap in = (TreeMultimap)newWithMapKeyDefault(source()); out = in.keySet(); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;keySet;();;MapKey of Argument[-1];Element of ReturnValue;value" ImmutableSet out = null; - ImmutableMultimap in = (ImmutableMultimap)newWithMapKey(source()); + ImmutableMultimap in = (ImmutableMultimap)newWithMapKeyDefault(source()); out = in.keySet(); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;keys;();;MapKey of Argument[-1];Element of ReturnValue;value" Multiset out = null; - Multimap in = (Multimap)newWithMapKey(source()); + Multimap in = (Multimap)newWithMapKeyDefault(source()); out = in.keys(); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;keys;();;MapKey of Argument[-1];Element of ReturnValue;value" ImmutableMultiset out = null; - ImmutableMultimap in = (ImmutableMultimap)newWithMapKey(source()); + ImmutableMultimap in = (ImmutableMultimap)newWithMapKeyDefault(source()); out = in.keys(); sink(getElement(out)); // $ hasValueFlow } @@ -5454,152 +5415,152 @@ public class Test { Multimap out = null; Object in = (Object)source(); out.put(in, null); - sink(getMapKey(out)); // $ hasValueFlow + sink(getMapKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;put;(Object,Object);;Argument[0];MapKey of Argument[-1];value" LinkedListMultimap out = null; Object in = (Object)source(); out.put(in, null); - sink(getMapKey(out)); // $ hasValueFlow + sink(getMapKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;put;(Object,Object);;Argument[0];MapKey of Argument[-1];value" ImmutableMultimap out = null; Object in = (Object)source(); out.put(in, null); - sink(getMapKey(out)); // $ hasValueFlow + sink(getMapKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;put;(Object,Object);;Argument[1];MapValue of Argument[-1];value" Multimap out = null; Object in = (Object)source(); out.put(null, in); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;put;(Object,Object);;Argument[1];MapValue of Argument[-1];value" LinkedListMultimap out = null; Object in = (Object)source(); out.put(null, in); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;put;(Object,Object);;Argument[1];MapValue of Argument[-1];value" ImmutableMultimap out = null; Object in = (Object)source(); out.put(null, in); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;putAll;(Multimap);;MapKey of Argument[0];MapKey of Argument[-1];value" Multimap out = null; - Multimap in = (Multimap)newWithMapKey(source()); + Multimap in = (Multimap)newWithMapKeyDefault(source()); out.putAll(in); - sink(getMapKey(out)); // $ hasValueFlow + sink(getMapKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;putAll;(Multimap);;MapKey of Argument[0];MapKey of Argument[-1];value" ImmutableMultimap out = null; - Multimap in = (Multimap)newWithMapKey(source()); + Multimap in = (Multimap)newWithMapKeyDefault(source()); out.putAll(in); - sink(getMapKey(out)); // $ hasValueFlow + sink(getMapKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;putAll;(Multimap);;MapValue of Argument[0];MapValue of Argument[-1];value" Multimap out = null; - Multimap in = (Multimap)newWithMapValue(source()); + Multimap in = (Multimap)newWithMapValueDefault(source()); out.putAll(in); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;putAll;(Multimap);;MapValue of Argument[0];MapValue of Argument[-1];value" ImmutableMultimap out = null; - Multimap in = (Multimap)newWithMapValue(source()); + Multimap in = (Multimap)newWithMapValueDefault(source()); out.putAll(in); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;putAll;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" Multimap out = null; Object in = (Object)source(); out.putAll(in, null); - sink(getMapKey(out)); // $ hasValueFlow + sink(getMapKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;putAll;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" ImmutableMultimap out = null; Object in = (Object)source(); out.putAll(in, null); - sink(getMapKey(out)); // $ hasValueFlow + sink(getMapKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;putAll;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" Multimap out = null; - Iterable in = (Iterable)newWithElement(source()); + Iterable in = (Iterable)List.of(source()); out.putAll(null, in); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;putAll;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" ImmutableMultimap out = null; - Iterable in = (Iterable)newWithElement(source()); + Iterable in = (Iterable)List.of(source()); out.putAll(null, in); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;removeAll;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" SortedSet out = null; - SortedSetMultimap in = (SortedSetMultimap)newWithMapValue(source()); + SortedSetMultimap in = (SortedSetMultimap)newWithMapValueDefault(source()); out = in.removeAll(null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;removeAll;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" Set out = null; - SetMultimap in = (SetMultimap)newWithMapValue(source()); + SetMultimap in = (SetMultimap)newWithMapValueDefault(source()); out = in.removeAll(null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;removeAll;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" List out = null; - ListMultimap in = (ListMultimap)newWithMapValue(source()); + ListMultimap in = (ListMultimap)newWithMapValueDefault(source()); out = in.removeAll(null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;removeAll;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" List out = null; - LinkedListMultimap in = (LinkedListMultimap)newWithMapValue(source()); + LinkedListMultimap in = (LinkedListMultimap)newWithMapValueDefault(source()); out = in.removeAll(null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;removeAll;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" ImmutableSet out = null; - ImmutableSetMultimap in = (ImmutableSetMultimap)newWithMapValue(source()); + ImmutableSetMultimap in = (ImmutableSetMultimap)newWithMapValueDefault(source()); out = in.removeAll(null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;removeAll;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" ImmutableList out = null; - ImmutableListMultimap in = (ImmutableListMultimap)newWithMapValue(source()); + ImmutableListMultimap in = (ImmutableListMultimap)newWithMapValueDefault(source()); out = in.removeAll(null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;removeAll;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" ImmutableCollection out = null; - ImmutableMultimap in = (ImmutableMultimap)newWithMapValue(source()); + ImmutableMultimap in = (ImmutableMultimap)newWithMapValueDefault(source()); out = in.removeAll(null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;removeAll;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" Collection out = null; - Multimap in = (Multimap)newWithMapValue(source()); + Multimap in = (Multimap)newWithMapValueDefault(source()); out = in.removeAll(null); sink(getElement(out)); // $ hasValueFlow } @@ -5608,385 +5569,385 @@ public class Test { SortedSetMultimap out = null; Object in = (Object)source(); out.replaceValues(in, null); - sink(getMapKey(out)); // $ hasValueFlow + sink(getMapKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" SetMultimap out = null; Object in = (Object)source(); out.replaceValues(in, null); - sink(getMapKey(out)); // $ hasValueFlow + sink(getMapKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" Multimap out = null; Object in = (Object)source(); out.replaceValues(in, null); - sink(getMapKey(out)); // $ hasValueFlow + sink(getMapKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" ListMultimap out = null; Object in = (Object)source(); out.replaceValues(in, null); - sink(getMapKey(out)); // $ hasValueFlow + sink(getMapKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" LinkedListMultimap out = null; Object in = (Object)source(); out.replaceValues(in, null); - sink(getMapKey(out)); // $ hasValueFlow + sink(getMapKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" LinkedHashMultimap out = null; Object in = (Object)source(); out.replaceValues(in, null); - sink(getMapKey(out)); // $ hasValueFlow + sink(getMapKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" ImmutableSetMultimap out = null; Object in = (Object)source(); out.replaceValues(in, null); - sink(getMapKey(out)); // $ hasValueFlow + sink(getMapKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" ImmutableMultimap out = null; Object in = (Object)source(); out.replaceValues(in, null); - sink(getMapKey(out)); // $ hasValueFlow + sink(getMapKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" ImmutableListMultimap out = null; Object in = (Object)source(); out.replaceValues(in, null); - sink(getMapKey(out)); // $ hasValueFlow + sink(getMapKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" SortedSetMultimap out = null; - Iterable in = (Iterable)newWithElement(source()); + Iterable in = (Iterable)List.of(source()); out.replaceValues(null, in); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" SetMultimap out = null; - Iterable in = (Iterable)newWithElement(source()); + Iterable in = (Iterable)List.of(source()); out.replaceValues(null, in); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" Multimap out = null; - Iterable in = (Iterable)newWithElement(source()); + Iterable in = (Iterable)List.of(source()); out.replaceValues(null, in); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" ListMultimap out = null; Iterable in = (Iterable)List.of(source()); out.replaceValues(null, in); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" LinkedListMultimap out = null; Iterable in = (Iterable)List.of(source()); out.replaceValues(null, in); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" LinkedHashMultimap out = null; Iterable in = (Iterable)List.of(source()); out.replaceValues(null, in); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" ImmutableSetMultimap out = null; - Iterable in = (Iterable)newWithElement(source()); + Iterable in = (Iterable)List.of(source()); out.replaceValues(null, in); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" ImmutableMultimap out = null; - Iterable in = (Iterable)newWithElement(source()); + Iterable in = (Iterable)List.of(source()); out.replaceValues(null, in); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" ImmutableListMultimap out = null; Iterable in = (Iterable)List.of(source()); out.replaceValues(null, in); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;MapValue of Argument[-1];Element of ReturnValue;value" SortedSet out = null; - SortedSetMultimap in = (SortedSetMultimap)newWithMapValue(source()); + SortedSetMultimap in = (SortedSetMultimap)newWithMapValueDefault(source()); out = in.replaceValues(null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;MapValue of Argument[-1];Element of ReturnValue;value" Set out = null; - SetMultimap in = (SetMultimap)newWithMapValue(source()); + SetMultimap in = (SetMultimap)newWithMapValueDefault(source()); out = in.replaceValues(null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;MapValue of Argument[-1];Element of ReturnValue;value" Set out = null; - LinkedHashMultimap in = (LinkedHashMultimap)newWithMapValue(source()); + LinkedHashMultimap in = (LinkedHashMultimap)newWithMapValueDefault(source()); out = in.replaceValues(null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;MapValue of Argument[-1];Element of ReturnValue;value" List out = null; - ListMultimap in = (ListMultimap)newWithMapValue(source()); + ListMultimap in = (ListMultimap)newWithMapValueDefault(source()); out = in.replaceValues(null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;MapValue of Argument[-1];Element of ReturnValue;value" List out = null; - LinkedListMultimap in = (LinkedListMultimap)newWithMapValue(source()); + LinkedListMultimap in = (LinkedListMultimap)newWithMapValueDefault(source()); out = in.replaceValues(null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;MapValue of Argument[-1];Element of ReturnValue;value" ImmutableSet out = null; - ImmutableSetMultimap in = (ImmutableSetMultimap)newWithMapValue(source()); + ImmutableSetMultimap in = (ImmutableSetMultimap)newWithMapValueDefault(source()); out = in.replaceValues(null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;MapValue of Argument[-1];Element of ReturnValue;value" ImmutableList out = null; - ImmutableListMultimap in = (ImmutableListMultimap)newWithMapValue(source()); + ImmutableListMultimap in = (ImmutableListMultimap)newWithMapValueDefault(source()); out = in.replaceValues(null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;MapValue of Argument[-1];Element of ReturnValue;value" ImmutableCollection out = null; - ImmutableMultimap in = (ImmutableMultimap)newWithMapValue(source()); + ImmutableMultimap in = (ImmutableMultimap)newWithMapValueDefault(source()); out = in.replaceValues(null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;MapValue of Argument[-1];Element of ReturnValue;value" Collection out = null; - Multimap in = (Multimap)newWithMapValue(source()); + Multimap in = (Multimap)newWithMapValueDefault(source()); out = in.replaceValues(null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;values;();;MapValue of Argument[-1];Element of ReturnValue;value" List out = null; - LinkedListMultimap in = (LinkedListMultimap)newWithMapValue(source()); + LinkedListMultimap in = (LinkedListMultimap)newWithMapValueDefault(source()); out = in.values(); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;values;();;MapValue of Argument[-1];Element of ReturnValue;value" ImmutableCollection out = null; - ImmutableMultimap in = (ImmutableMultimap)newWithMapValue(source()); + ImmutableMultimap in = (ImmutableMultimap)newWithMapValueDefault(source()); out = in.values(); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;values;();;MapValue of Argument[-1];Element of ReturnValue;value" Collection out = null; - Multimap in = (Multimap)newWithMapValue(source()); + Multimap in = (Multimap)newWithMapValueDefault(source()); out = in.values(); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;values;();;MapValue of Argument[-1];Element of ReturnValue;value" Collection out = null; - LinkedHashMultimap in = (LinkedHashMultimap)newWithMapValue(source()); + LinkedHashMultimap in = (LinkedHashMultimap)newWithMapValueDefault(source()); out = in.values(); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;asMap;(ListMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value" Map out = null; - ListMultimap in = (ListMultimap)newWithMapKey(source()); + ListMultimap in = (ListMultimap)newWithMapKeyDefault(source()); out = Multimaps.asMap(in); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;asMap;(ListMultimap);;MapValue of Argument[0];Element of MapValue of ReturnValue;value" Map out = null; - ListMultimap in = (ListMultimap)newWithMapValue(source()); + ListMultimap in = (ListMultimap)newWithMapValueDefault(source()); out = Multimaps.asMap(in); - sink(getElement(getMapValue(out))); // $ hasValueFlow + sink(getElementDefault(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;asMap;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value" Map out = null; - Multimap in = (Multimap)newWithMapKey(source()); + Multimap in = (Multimap)newWithMapKeyDefault(source()); out = Multimaps.asMap(in); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;asMap;(Multimap);;MapValue of Argument[0];Element of MapValue of ReturnValue;value" Map out = null; - Multimap in = (Multimap)newWithMapValue(source()); + Multimap in = (Multimap)newWithMapValueDefault(source()); out = Multimaps.asMap(in); - sink(getElement(getMapValue(out))); // $ hasValueFlow + sink(getElementDefault(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;asMap;(SetMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value" Map out = null; - SetMultimap in = (SetMultimap)newWithMapKey(source()); + SetMultimap in = (SetMultimap)newWithMapKeyDefault(source()); out = Multimaps.asMap(in); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;asMap;(SetMultimap);;MapValue of Argument[0];Element of MapValue of ReturnValue;value" Map out = null; - SetMultimap in = (SetMultimap)newWithMapValue(source()); + SetMultimap in = (SetMultimap)newWithMapValueDefault(source()); out = Multimaps.asMap(in); - sink(getElement(getMapValue(out))); // $ hasValueFlow + sink(getElementDefault(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;asMap;(SortedSetMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value" Map out = null; - SortedSetMultimap in = (SortedSetMultimap)newWithMapKey(source()); + SortedSetMultimap in = (SortedSetMultimap)newWithMapKeyDefault(source()); out = Multimaps.asMap(in); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;asMap;(SortedSetMultimap);;MapValue of Argument[0];Element of MapValue of ReturnValue;value" Map out = null; - SortedSetMultimap in = (SortedSetMultimap)newWithMapValue(source()); + SortedSetMultimap in = (SortedSetMultimap)newWithMapValueDefault(source()); out = Multimaps.asMap(in); - sink(getElement(getMapValue(out))); // $ hasValueFlow + sink(getElementDefault(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;filterEntries;(Multimap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value" Multimap out = null; - Multimap in = (Multimap)newWithMapKey(source()); + Multimap in = (Multimap)newWithMapKeyDefault(source()); out = Multimaps.filterEntries(in, (Predicate)null); - sink(getMapKey(out)); // $ hasValueFlow + sink(getMapKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;filterEntries;(Multimap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value" Multimap out = null; - Multimap in = (Multimap)newWithMapValue(source()); + Multimap in = (Multimap)newWithMapValueDefault(source()); out = Multimaps.filterEntries(in, (Predicate)null); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;filterEntries;(SetMultimap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value" SetMultimap out = null; - SetMultimap in = (SetMultimap)newWithMapKey(source()); + SetMultimap in = (SetMultimap)newWithMapKeyDefault(source()); out = Multimaps.filterEntries(in, (Predicate)null); - sink(getMapKey(out)); // $ hasValueFlow + sink(getMapKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;filterEntries;(SetMultimap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value" SetMultimap out = null; - SetMultimap in = (SetMultimap)newWithMapValue(source()); + SetMultimap in = (SetMultimap)newWithMapValueDefault(source()); out = Multimaps.filterEntries(in, (Predicate)null); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;filterKeys;(Multimap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value" Multimap out = null; - Multimap in = (Multimap)newWithMapKey(source()); + Multimap in = (Multimap)newWithMapKeyDefault(source()); out = Multimaps.filterKeys(in, (Predicate)null); - sink(getMapKey(out)); // $ hasValueFlow + sink(getMapKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;filterKeys;(Multimap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value" Multimap out = null; - Multimap in = (Multimap)newWithMapValue(source()); + Multimap in = (Multimap)newWithMapValueDefault(source()); out = Multimaps.filterKeys(in, (Predicate)null); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;filterKeys;(SetMultimap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value" SetMultimap out = null; - SetMultimap in = (SetMultimap)newWithMapKey(source()); + SetMultimap in = (SetMultimap)newWithMapKeyDefault(source()); out = Multimaps.filterKeys(in, (Predicate)null); - sink(getMapKey(out)); // $ hasValueFlow + sink(getMapKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;filterKeys;(SetMultimap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value" SetMultimap out = null; - SetMultimap in = (SetMultimap)newWithMapValue(source()); + SetMultimap in = (SetMultimap)newWithMapValueDefault(source()); out = Multimaps.filterKeys(in, (Predicate)null); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;filterValues;(Multimap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value" Multimap out = null; - Multimap in = (Multimap)newWithMapKey(source()); + Multimap in = (Multimap)newWithMapKeyDefault(source()); out = Multimaps.filterValues(in, (Predicate)null); - sink(getMapKey(out)); // $ hasValueFlow + sink(getMapKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;filterValues;(Multimap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value" Multimap out = null; - Multimap in = (Multimap)newWithMapValue(source()); + Multimap in = (Multimap)newWithMapValueDefault(source()); out = Multimaps.filterValues(in, (Predicate)null); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;filterValues;(SetMultimap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value" SetMultimap out = null; - SetMultimap in = (SetMultimap)newWithMapKey(source()); + SetMultimap in = (SetMultimap)newWithMapKeyDefault(source()); out = Multimaps.filterValues(in, (Predicate)null); - sink(getMapKey(out)); // $ hasValueFlow + sink(getMapKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;filterValues;(SetMultimap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value" SetMultimap out = null; - SetMultimap in = (SetMultimap)newWithMapValue(source()); + SetMultimap in = (SetMultimap)newWithMapValueDefault(source()); out = Multimaps.filterValues(in, (Predicate)null); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;forMap;(Map);;MapKey of Argument[0];MapKey of ReturnValue;value" SetMultimap out = null; Map in = (Map)Map.of(source(), null); out = Multimaps.forMap(in); - sink(getMapKey(out)); // $ hasValueFlow + sink(getMapKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;forMap;(Map);;MapValue of Argument[0];MapValue of ReturnValue;value" SetMultimap out = null; Map in = (Map)Map.of(null, source()); out = Multimaps.forMap(in); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;index;(Iterable,Function);;Element of Argument[0];MapValue of ReturnValue;value" ImmutableListMultimap out = null; - Iterable in = (Iterable)newWithElement(source()); + Iterable in = (Iterable)List.of(source()); out = Multimaps.index(in, (Function)null); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;index;(Iterator,Function);;Element of Argument[0];MapValue of ReturnValue;value" ImmutableListMultimap out = null; - Iterator in = (Iterator)newWithElement(source()); + Iterator in = (Iterator)newWithElementDefault(source()); out = Multimaps.index(in, (Function)null); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;invertFrom;(Multimap,Multimap);;Argument[1];ReturnValue;value" @@ -5998,245 +5959,245 @@ public class Test { { // "com.google.common.collect;Multimaps;false;invertFrom;(Multimap,Multimap);;MapKey of Argument[0];MapValue of Argument[1];value" Multimap out = null; - Multimap in = (Multimap)newWithMapKey(source()); + Multimap in = (Multimap)newWithMapKeyDefault(source()); Multimaps.invertFrom(in, out); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;invertFrom;(Multimap,Multimap);;MapValue of Argument[0];MapKey of Argument[1];value" Multimap out = null; - Multimap in = (Multimap)newWithMapValue(source()); + Multimap in = (Multimap)newWithMapValueDefault(source()); Multimaps.invertFrom(in, out); - sink(getMapKey(out)); // $ hasValueFlow + sink(getMapKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;newListMultimap;(Map,Supplier);;Element of MapValue of Argument[0];MapValue of ReturnValue;value" ListMultimap out = null; - Map in = (Map)Map.of(null, newWithElement(source())); + Map in = (Map)Map.of(null, newWithElementDefault(source())); out = Multimaps.newListMultimap(in, null); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;newListMultimap;(Map,Supplier);;MapKey of Argument[0];MapKey of ReturnValue;value" ListMultimap out = null; Map in = (Map)Map.of(source(), null); out = Multimaps.newListMultimap(in, null); - sink(getMapKey(out)); // $ hasValueFlow + sink(getMapKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;newMultimap;(Map,Supplier);;Element of MapValue of Argument[0];MapValue of ReturnValue;value" Multimap out = null; - Map in = (Map)Map.of(null, newWithElement(source())); + Map in = (Map)Map.of(null, newWithElementDefault(source())); out = Multimaps.newMultimap(in, null); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;newMultimap;(Map,Supplier);;MapKey of Argument[0];MapKey of ReturnValue;value" Multimap out = null; Map in = (Map)Map.of(source(), null); out = Multimaps.newMultimap(in, null); - sink(getMapKey(out)); // $ hasValueFlow + sink(getMapKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;newSetMultimap;(Map,Supplier);;Element of MapValue of Argument[0];MapValue of ReturnValue;value" SetMultimap out = null; - Map in = (Map)Map.of(null, newWithElement(source())); + Map in = (Map)Map.of(null, newWithElementDefault(source())); out = Multimaps.newSetMultimap(in, null); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;newSetMultimap;(Map,Supplier);;MapKey of Argument[0];MapKey of ReturnValue;value" SetMultimap out = null; Map in = (Map)Map.of(source(), null); out = Multimaps.newSetMultimap(in, null); - sink(getMapKey(out)); // $ hasValueFlow + sink(getMapKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;newSortedSetMultimap;(Map,Supplier);;Element of MapValue of Argument[0];MapValue of ReturnValue;value" SortedSetMultimap out = null; - Map in = (Map)Map.of(null, newWithElement(source())); + Map in = (Map)Map.of(null, newWithElementDefault(source())); out = Multimaps.newSortedSetMultimap(in, null); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;newSortedSetMultimap;(Map,Supplier);;MapKey of Argument[0];MapKey of ReturnValue;value" SortedSetMultimap out = null; Map in = (Map)Map.of(source(), null); out = Multimaps.newSortedSetMultimap(in, null); - sink(getMapKey(out)); // $ hasValueFlow + sink(getMapKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;synchronizedListMultimap;(ListMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value" ListMultimap out = null; - ListMultimap in = (ListMultimap)newWithMapKey(source()); + ListMultimap in = (ListMultimap)newWithMapKeyDefault(source()); out = Multimaps.synchronizedListMultimap(in); - sink(getMapKey(out)); // $ hasValueFlow + sink(getMapKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;synchronizedListMultimap;(ListMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value" ListMultimap out = null; - ListMultimap in = (ListMultimap)newWithMapValue(source()); + ListMultimap in = (ListMultimap)newWithMapValueDefault(source()); out = Multimaps.synchronizedListMultimap(in); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;synchronizedMultimap;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value" Multimap out = null; - Multimap in = (Multimap)newWithMapKey(source()); + Multimap in = (Multimap)newWithMapKeyDefault(source()); out = Multimaps.synchronizedMultimap(in); - sink(getMapKey(out)); // $ hasValueFlow + sink(getMapKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;synchronizedMultimap;(Multimap);;MapValue of Argument[0];MapValue of ReturnValue;value" Multimap out = null; - Multimap in = (Multimap)newWithMapValue(source()); + Multimap in = (Multimap)newWithMapValueDefault(source()); out = Multimaps.synchronizedMultimap(in); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;synchronizedSetMultimap;(SetMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value" SetMultimap out = null; - SetMultimap in = (SetMultimap)newWithMapKey(source()); + SetMultimap in = (SetMultimap)newWithMapKeyDefault(source()); out = Multimaps.synchronizedSetMultimap(in); - sink(getMapKey(out)); // $ hasValueFlow + sink(getMapKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;synchronizedSetMultimap;(SetMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value" SetMultimap out = null; - SetMultimap in = (SetMultimap)newWithMapValue(source()); + SetMultimap in = (SetMultimap)newWithMapValueDefault(source()); out = Multimaps.synchronizedSetMultimap(in); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;synchronizedSortedSetMultimap;(SortedSetMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value" SortedSetMultimap out = null; - SortedSetMultimap in = (SortedSetMultimap)newWithMapKey(source()); + SortedSetMultimap in = (SortedSetMultimap)newWithMapKeyDefault(source()); out = Multimaps.synchronizedSortedSetMultimap(in); - sink(getMapKey(out)); // $ hasValueFlow + sink(getMapKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;synchronizedSortedSetMultimap;(SortedSetMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value" SortedSetMultimap out = null; - SortedSetMultimap in = (SortedSetMultimap)newWithMapValue(source()); + SortedSetMultimap in = (SortedSetMultimap)newWithMapValueDefault(source()); out = Multimaps.synchronizedSortedSetMultimap(in); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;transformValues;(ListMultimap,Function);;MapKey of Argument[0];MapKey of ReturnValue;value" ListMultimap out = null; - ListMultimap in = (ListMultimap)newWithMapKey(source()); + ListMultimap in = (ListMultimap)newWithMapKeyDefault(source()); out = Multimaps.transformValues(in, (Function)null); - sink(getMapKey(out)); // $ hasValueFlow + sink(getMapKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;transformValues;(Multimap,Function);;MapKey of Argument[0];MapKey of ReturnValue;value" Multimap out = null; - Multimap in = (Multimap)newWithMapKey(source()); + Multimap in = (Multimap)newWithMapKeyDefault(source()); out = Multimaps.transformValues(in, (Function)null); - sink(getMapKey(out)); // $ hasValueFlow + sink(getMapKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;unmodifiableListMultimap;(ImmutableListMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value" ListMultimap out = null; - ImmutableListMultimap in = (ImmutableListMultimap)newWithMapKey(source()); + ImmutableListMultimap in = (ImmutableListMultimap)newWithMapKeyDefault(source()); out = Multimaps.unmodifiableListMultimap(in); - sink(getMapKey(out)); // $ hasValueFlow + sink(getMapKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;unmodifiableListMultimap;(ImmutableListMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value" ListMultimap out = null; - ImmutableListMultimap in = (ImmutableListMultimap)newWithMapValue(source()); + ImmutableListMultimap in = (ImmutableListMultimap)newWithMapValueDefault(source()); out = Multimaps.unmodifiableListMultimap(in); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;unmodifiableListMultimap;(ListMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value" ListMultimap out = null; - ListMultimap in = (ListMultimap)newWithMapKey(source()); + ListMultimap in = (ListMultimap)newWithMapKeyDefault(source()); out = Multimaps.unmodifiableListMultimap(in); - sink(getMapKey(out)); // $ hasValueFlow + sink(getMapKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;unmodifiableListMultimap;(ListMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value" ListMultimap out = null; - ListMultimap in = (ListMultimap)newWithMapValue(source()); + ListMultimap in = (ListMultimap)newWithMapValueDefault(source()); out = Multimaps.unmodifiableListMultimap(in); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;unmodifiableMultimap;(ImmutableMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value" Multimap out = null; - ImmutableMultimap in = (ImmutableMultimap)newWithMapKey(source()); + ImmutableMultimap in = (ImmutableMultimap)newWithMapKeyDefault(source()); out = Multimaps.unmodifiableMultimap(in); - sink(getMapKey(out)); // $ hasValueFlow + sink(getMapKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;unmodifiableMultimap;(ImmutableMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value" Multimap out = null; - ImmutableMultimap in = (ImmutableMultimap)newWithMapValue(source()); + ImmutableMultimap in = (ImmutableMultimap)newWithMapValueDefault(source()); out = Multimaps.unmodifiableMultimap(in); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;unmodifiableMultimap;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value" Multimap out = null; - Multimap in = (Multimap)newWithMapKey(source()); + Multimap in = (Multimap)newWithMapKeyDefault(source()); out = Multimaps.unmodifiableMultimap(in); - sink(getMapKey(out)); // $ hasValueFlow + sink(getMapKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;unmodifiableMultimap;(Multimap);;MapValue of Argument[0];MapValue of ReturnValue;value" Multimap out = null; - Multimap in = (Multimap)newWithMapValue(source()); + Multimap in = (Multimap)newWithMapValueDefault(source()); out = Multimaps.unmodifiableMultimap(in); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;unmodifiableSetMultimap;(ImmutableSetMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value" SetMultimap out = null; - ImmutableSetMultimap in = (ImmutableSetMultimap)newWithMapKey(source()); + ImmutableSetMultimap in = (ImmutableSetMultimap)newWithMapKeyDefault(source()); out = Multimaps.unmodifiableSetMultimap(in); - sink(getMapKey(out)); // $ hasValueFlow + sink(getMapKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;unmodifiableSetMultimap;(ImmutableSetMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value" SetMultimap out = null; - ImmutableSetMultimap in = (ImmutableSetMultimap)newWithMapValue(source()); + ImmutableSetMultimap in = (ImmutableSetMultimap)newWithMapValueDefault(source()); out = Multimaps.unmodifiableSetMultimap(in); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;unmodifiableSetMultimap;(SetMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value" SetMultimap out = null; - SetMultimap in = (SetMultimap)newWithMapKey(source()); + SetMultimap in = (SetMultimap)newWithMapKeyDefault(source()); out = Multimaps.unmodifiableSetMultimap(in); - sink(getMapKey(out)); // $ hasValueFlow + sink(getMapKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;unmodifiableSetMultimap;(SetMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value" SetMultimap out = null; - SetMultimap in = (SetMultimap)newWithMapValue(source()); + SetMultimap in = (SetMultimap)newWithMapValueDefault(source()); out = Multimaps.unmodifiableSetMultimap(in); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;unmodifiableSortedSetMultimap;(SortedSetMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value" SortedSetMultimap out = null; - SortedSetMultimap in = (SortedSetMultimap)newWithMapKey(source()); + SortedSetMultimap in = (SortedSetMultimap)newWithMapKeyDefault(source()); out = Multimaps.unmodifiableSortedSetMultimap(in); - sink(getMapKey(out)); // $ hasValueFlow + sink(getMapKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;unmodifiableSortedSetMultimap;(SortedSetMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value" SortedSetMultimap out = null; - SortedSetMultimap in = (SortedSetMultimap)newWithMapValue(source()); + SortedSetMultimap in = (SortedSetMultimap)newWithMapValueDefault(source()); out = Multimaps.unmodifiableSortedSetMultimap(in); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Multiset$Entry;true;getElement;();;Element of Argument[-1];ReturnValue;value" Object out = null; - Multiset.Entry in = (Multiset.Entry)newWithElement(source()); + Multiset.Entry in = (Multiset.Entry)newWithElementDefault(source()); out = in.getElement(); sink(out); // $ hasValueFlow } @@ -6271,51 +6232,51 @@ public class Test { { // "com.google.common.collect;Multiset;true;elementSet;();;Element of Argument[-1];Element of ReturnValue;value" Set out = null; - Multiset in = (Multiset)newWithElement(source()); + Multiset in = (Multiset)newWithElementDefault(source()); out = in.elementSet(); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multiset;true;elementSet;();;Element of Argument[-1];Element of ReturnValue;value" NavigableSet out = null; - SortedMultiset in = (SortedMultiset)newWithElement(source()); + SortedMultiset in = (SortedMultiset)newWithElementDefault(source()); out = in.elementSet(); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multiset;true;elementSet;();;Element of Argument[-1];Element of ReturnValue;value" ImmutableSortedSet out = null; - ImmutableSortedMultiset in = (ImmutableSortedMultiset)newWithElement(source()); + ImmutableSortedMultiset in = (ImmutableSortedMultiset)newWithElementDefault(source()); out = in.elementSet(); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multiset;true;elementSet;();;Element of Argument[-1];Element of ReturnValue;value" ImmutableSet out = null; - ImmutableMultiset in = (ImmutableMultiset)newWithElement(source()); + ImmutableMultiset in = (ImmutableMultiset)newWithElementDefault(source()); out = in.elementSet(); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multiset;true;entrySet;();;Element of Argument[-1];Element of Element of ReturnValue;value" Set out = null; - SortedMultiset in = (SortedMultiset)newWithElement(source()); + SortedMultiset in = (SortedMultiset)newWithElementDefault(source()); out = in.entrySet(); - sink(getElement(getElement(out))); // $ hasValueFlow + sink(getElementDefault(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Multiset;true;entrySet;();;Element of Argument[-1];Element of Element of ReturnValue;value" Set out = null; - Multiset in = (Multiset)newWithElement(source()); + Multiset in = (Multiset)newWithElementDefault(source()); out = in.entrySet(); - sink(getElement(getElement(out))); // $ hasValueFlow + sink(getElementDefault(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Multiset;true;entrySet;();;Element of Argument[-1];Element of Element of ReturnValue;value" ImmutableSet out = null; - ImmutableMultiset in = (ImmutableMultiset)newWithElement(source()); + ImmutableMultiset in = (ImmutableMultiset)newWithElementDefault(source()); out = in.entrySet(); - sink(getElement(getElement(out))); // $ hasValueFlow + sink(getElementDefault(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Multiset;true;setCount;(Object,int);;Argument[0];Element of Argument[-1];value" @@ -6376,21 +6337,21 @@ public class Test { { // "com.google.common.collect;Multisets;false;copyHighestCountFirst;(Multiset);;Element of Argument[0];Element of ReturnValue;value" ImmutableMultiset out = null; - Multiset in = (Multiset)newWithElement(source()); + Multiset in = (Multiset)newWithElementDefault(source()); out = Multisets.copyHighestCountFirst(in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multisets;false;difference;(Multiset,Multiset);;Element of Argument[0];Element of ReturnValue;value" Multiset out = null; - Multiset in = (Multiset)newWithElement(source()); + Multiset in = (Multiset)newWithElementDefault(source()); out = Multisets.difference(in, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multisets;false;filter;(Multiset,Predicate);;Element of Argument[0];Element of ReturnValue;value" Multiset out = null; - Multiset in = (Multiset)newWithElement(source()); + Multiset in = (Multiset)newWithElementDefault(source()); out = Multisets.filter(in, null); sink(getElement(out)); // $ hasValueFlow } @@ -6399,68 +6360,68 @@ public class Test { Multiset.Entry out = null; Object in = (Object)source(); out = Multisets.immutableEntry(in, 0); - sink(getElement(out)); // $ hasValueFlow + sink(getElementDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Multisets;false;intersection;(Multiset,Multiset);;Element of Argument[0..1];Element of ReturnValue;value" Multiset out = null; - Multiset in = (Multiset)newWithElement(source()); + Multiset in = (Multiset)newWithElementDefault(source()); out = Multisets.intersection(null, in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multisets;false;intersection;(Multiset,Multiset);;Element of Argument[0..1];Element of ReturnValue;value" Multiset out = null; - Multiset in = (Multiset)newWithElement(source()); + Multiset in = (Multiset)newWithElementDefault(source()); out = Multisets.intersection(in, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multisets;false;sum;(Multiset,Multiset);;Element of Argument[0..1];Element of ReturnValue;value" Multiset out = null; - Multiset in = (Multiset)newWithElement(source()); + Multiset in = (Multiset)newWithElementDefault(source()); out = Multisets.sum(null, in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multisets;false;sum;(Multiset,Multiset);;Element of Argument[0..1];Element of ReturnValue;value" Multiset out = null; - Multiset in = (Multiset)newWithElement(source()); + Multiset in = (Multiset)newWithElementDefault(source()); out = Multisets.sum(in, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multisets;false;union;(Multiset,Multiset);;Element of Argument[0..1];Element of ReturnValue;value" Multiset out = null; - Multiset in = (Multiset)newWithElement(source()); + Multiset in = (Multiset)newWithElementDefault(source()); out = Multisets.union(null, in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multisets;false;union;(Multiset,Multiset);;Element of Argument[0..1];Element of ReturnValue;value" Multiset out = null; - Multiset in = (Multiset)newWithElement(source()); + Multiset in = (Multiset)newWithElementDefault(source()); out = Multisets.union(in, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multisets;false;unmodifiableMultiset;(ImmutableMultiset);;Element of Argument[0];Element of ReturnValue;value" Multiset out = null; - ImmutableMultiset in = (ImmutableMultiset)newWithElement(source()); + ImmutableMultiset in = (ImmutableMultiset)newWithElementDefault(source()); out = Multisets.unmodifiableMultiset(in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multisets;false;unmodifiableMultiset;(Multiset);;Element of Argument[0];Element of ReturnValue;value" Multiset out = null; - Multiset in = (Multiset)newWithElement(source()); + Multiset in = (Multiset)newWithElementDefault(source()); out = Multisets.unmodifiableMultiset(in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multisets;false;unmodifiableSortedMultiset;(SortedMultiset);;Element of Argument[0];Element of ReturnValue;value" SortedMultiset out = null; - SortedMultiset in = (SortedMultiset)newWithElement(source()); + SortedMultiset in = (SortedMultiset)newWithElementDefault(source()); out = Multisets.unmodifiableSortedMultiset(in); sink(getElement(out)); // $ hasValueFlow } @@ -6523,175 +6484,175 @@ public class Test { { // "com.google.common.collect;Queues;false;drain;(BlockingQueue,Collection,int,Duration);;Element of Argument[0];Element of Argument[1];value" Collection out = null; - BlockingQueue in = (BlockingQueue)newWithElement(source()); + BlockingQueue in = (BlockingQueue)newWithElementDefault(source()); Queues.drain(in, out, 0, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Queues;false;drain;(BlockingQueue,Collection,int,long,TimeUnit);;Element of Argument[0];Element of Argument[1];value" Collection out = null; - BlockingQueue in = (BlockingQueue)newWithElement(source()); + BlockingQueue in = (BlockingQueue)newWithElementDefault(source()); Queues.drain(in, out, 0, 0L, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Queues;false;newArrayDeque;(Iterable);;Element of Argument[0];Element of ReturnValue;value" ArrayDeque out = null; - Iterable in = (Iterable)newWithElement(source()); + Iterable in = (Iterable)List.of(source()); out = Queues.newArrayDeque(in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Queues;false;newConcurrentLinkedQueue;(Iterable);;Element of Argument[0];Element of ReturnValue;value" ConcurrentLinkedQueue out = null; - Iterable in = (Iterable)newWithElement(source()); + Iterable in = (Iterable)List.of(source()); out = Queues.newConcurrentLinkedQueue(in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Queues;false;newLinkedBlockingDeque;(Iterable);;Element of Argument[0];Element of ReturnValue;value" LinkedBlockingDeque out = null; - Iterable in = (Iterable)newWithElement(source()); + Iterable in = (Iterable)List.of(source()); out = Queues.newLinkedBlockingDeque(in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Queues;false;newLinkedBlockingQueue;(Iterable);;Element of Argument[0];Element of ReturnValue;value" LinkedBlockingQueue out = null; - Iterable in = (Iterable)newWithElement(source()); + Iterable in = (Iterable)List.of(source()); out = Queues.newLinkedBlockingQueue(in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Queues;false;newPriorityBlockingQueue;(Iterable);;Element of Argument[0];Element of ReturnValue;value" PriorityBlockingQueue out = null; - Iterable in = (Iterable)newWithElement(source()); + Iterable in = (Iterable)List.of(source()); out = Queues.newPriorityBlockingQueue(in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Queues;false;newPriorityQueue;(Iterable);;Element of Argument[0];Element of ReturnValue;value" PriorityQueue out = null; - Iterable in = (Iterable)newWithElement(source()); + Iterable in = (Iterable)List.of(source()); out = Queues.newPriorityQueue(in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Queues;false;synchronizedDeque;(Deque);;Element of Argument[0];Element of ReturnValue;value" Deque out = null; - Deque in = (Deque)newWithElement(source()); + Deque in = (Deque)newWithElementDefault(source()); out = Queues.synchronizedDeque(in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Queues;false;synchronizedQueue;(Queue);;Element of Argument[0];Element of ReturnValue;value" Queue out = null; - Queue in = (Queue)newWithElement(source()); + Queue in = (Queue)newWithElementDefault(source()); out = Queues.synchronizedQueue(in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Sets$SetView;true;copyInto;(Set);;Element of Argument[-1];Element of Argument[0];value" Set out = null; - Sets.SetView in = (Sets.SetView)newWithElement(source()); + Sets.SetView in = (Sets.SetView)newWithElementDefault(source()); in.copyInto(out); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Sets$SetView;true;immutableCopy;();;Element of Argument[-1];Element of ReturnValue;value" ImmutableSet out = null; - Sets.SetView in = (Sets.SetView)newWithElement(source()); + Sets.SetView in = (Sets.SetView)newWithElementDefault(source()); out = in.immutableCopy(); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;cartesianProduct;(List);;Element of Element of Argument[0];Element of Element of ReturnValue;value" Set out = null; - List in = (List)List.of(newWithElement(source())); + List in = (List)List.of(newWithElementDefault(source())); out = Sets.cartesianProduct(in); - sink(getElement(getElement(out))); // $ hasValueFlow + sink(getElementDefault(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;cartesianProduct;(Set[]);;Element of ArrayElement of Argument[0];Element of Element of ReturnValue;value" Set out = null; - Set[] in = (Set[])new Set[]{(Set)newWithElement(source())}; + Set[] in = (Set[])new Set[]{(Set)newWithElementDefault(source())}; out = Sets.cartesianProduct(in); - sink(getElement(getElement(out))); // $ hasValueFlow + sink(getElementDefault(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;combinations;(Set,int);;Element of Argument[0];Element of Element of ReturnValue;value" Set out = null; - Set in = (Set)newWithElement(source()); + Set in = (Set)newWithElementDefault(source()); out = Sets.combinations(in, 0); - sink(getElement(getElement(out))); // $ hasValueFlow + sink(getElementDefault(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;difference;(Set,Set);;Element of Argument[0];Element of ReturnValue;value" Sets.SetView out = null; - Set in = (Set)newWithElement(source()); + Set in = (Set)newWithElementDefault(source()); out = Sets.difference(in, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;filter;(NavigableSet,Predicate);;Element of Argument[0];Element of ReturnValue;value" NavigableSet out = null; - NavigableSet in = (NavigableSet)newWithElement(source()); + NavigableSet in = (NavigableSet)newWithElementDefault(source()); out = Sets.filter(in, (Predicate)null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;filter;(Set,Predicate);;Element of Argument[0];Element of ReturnValue;value" Set out = null; - Set in = (Set)newWithElement(source()); + Set in = (Set)newWithElementDefault(source()); out = Sets.filter(in, (Predicate)null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;filter;(SortedSet,Predicate);;Element of Argument[0];Element of ReturnValue;value" SortedSet out = null; - SortedSet in = (SortedSet)newWithElement(source()); + SortedSet in = (SortedSet)newWithElementDefault(source()); out = Sets.filter(in, (Predicate)null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;intersection;(Set,Set);;Element of Argument[0..1];Element of ReturnValue;value" Sets.SetView out = null; - Set in = (Set)newWithElement(source()); + Set in = (Set)newWithElementDefault(source()); out = Sets.intersection(null, in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;intersection;(Set,Set);;Element of Argument[0..1];Element of ReturnValue;value" Sets.SetView out = null; - Set in = (Set)newWithElement(source()); + Set in = (Set)newWithElementDefault(source()); out = Sets.intersection(in, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;newConcurrentHashSet;(Iterable);;Element of Argument[0];Element of ReturnValue;value" Set out = null; - Iterable in = (Iterable)newWithElement(source()); + Iterable in = (Iterable)List.of(source()); out = Sets.newConcurrentHashSet(in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;newCopyOnWriteArraySet;(Iterable);;Element of Argument[0];Element of ReturnValue;value" CopyOnWriteArraySet out = null; - Iterable in = (Iterable)newWithElement(source()); + Iterable in = (Iterable)List.of(source()); out = Sets.newCopyOnWriteArraySet(in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;newHashSet;(Iterable);;Element of Argument[0];Element of ReturnValue;value" HashSet out = null; - Iterable in = (Iterable)newWithElement(source()); + Iterable in = (Iterable)List.of(source()); out = Sets.newHashSet(in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;newHashSet;(Iterator);;Element of Argument[0];Element of ReturnValue;value" HashSet out = null; - Iterator in = (Iterator)newWithElement(source()); + Iterator in = (Iterator)newWithElementDefault(source()); out = Sets.newHashSet(in); sink(getElement(out)); // $ hasValueFlow } @@ -6705,7 +6666,7 @@ public class Test { { // "com.google.common.collect;Sets;false;newLinkedHashSet;(Iterable);;Element of Argument[0];Element of ReturnValue;value" LinkedHashSet out = null; - Iterable in = (Iterable)newWithElement(source()); + Iterable in = (Iterable)List.of(source()); out = Sets.newLinkedHashSet(in); sink(getElement(out)); // $ hasValueFlow } @@ -6719,294 +6680,294 @@ public class Test { { // "com.google.common.collect;Sets;false;newTreeSet;(Iterable);;Element of Argument[0];Element of ReturnValue;value" TreeSet out = null; - Iterable in = (Iterable)newWithElement(source()); + Iterable in = (Iterable)List.of(source()); out = Sets.newTreeSet(in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;powerSet;(Set);;Element of Argument[0];Element of Element of ReturnValue;value" Set out = null; - Set in = (Set)newWithElement(source()); + Set in = (Set)newWithElementDefault(source()); out = Sets.powerSet(in); - sink(getElement(getElement(out))); // $ hasValueFlow + sink(getElementDefault(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;subSet;(NavigableSet,Range);;Element of Argument[0];Element of ReturnValue;value" NavigableSet out = null; - NavigableSet in = (NavigableSet)newWithElement(source()); + NavigableSet in = (NavigableSet)newWithElementDefault(source()); out = Sets.subSet(in, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;symmetricDifference;(Set,Set);;Element of Argument[0..1];Element of ReturnValue;value" Sets.SetView out = null; - Set in = (Set)newWithElement(source()); + Set in = (Set)newWithElementDefault(source()); out = Sets.symmetricDifference(null, in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;symmetricDifference;(Set,Set);;Element of Argument[0..1];Element of ReturnValue;value" Sets.SetView out = null; - Set in = (Set)newWithElement(source()); + Set in = (Set)newWithElementDefault(source()); out = Sets.symmetricDifference(in, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;synchronizedNavigableSet;(NavigableSet);;Element of Argument[0];Element of ReturnValue;value" NavigableSet out = null; - NavigableSet in = (NavigableSet)newWithElement(source()); + NavigableSet in = (NavigableSet)newWithElementDefault(source()); out = Sets.synchronizedNavigableSet(in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;union;(Set,Set);;Element of Argument[0..1];Element of ReturnValue;value" Sets.SetView out = null; - Set in = (Set)newWithElement(source()); + Set in = (Set)newWithElementDefault(source()); out = Sets.union(null, in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;union;(Set,Set);;Element of Argument[0..1];Element of ReturnValue;value" Sets.SetView out = null; - Set in = (Set)newWithElement(source()); + Set in = (Set)newWithElementDefault(source()); out = Sets.union(in, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;unmodifiableNavigableSet;(NavigableSet);;Element of Argument[0];Element of ReturnValue;value" NavigableSet out = null; - NavigableSet in = (NavigableSet)newWithElement(source()); + NavigableSet in = (NavigableSet)newWithElementDefault(source()); out = Sets.unmodifiableNavigableSet(in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Table$Cell;true;getColumnKey;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];ReturnValue;value" Object out = null; - Table.Cell in = (Table.Cell)newWithTable_columnKey(source()); + Table.Cell in = (Table.Cell)newWithTable_columnKeyDefault(source()); out = in.getColumnKey(); sink(out); // $ hasValueFlow } { // "com.google.common.collect;Table$Cell;true;getRowKey;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];ReturnValue;value" Object out = null; - Table.Cell in = (Table.Cell)newWithTable_rowKey(source()); + Table.Cell in = (Table.Cell)newWithTable_rowKeyDefault(source()); out = in.getRowKey(); sink(out); // $ hasValueFlow } { // "com.google.common.collect;Table$Cell;true;getValue;();;MapValue of Argument[-1];ReturnValue;value" Object out = null; - Table.Cell in = (Table.Cell)newWithMapValue(source()); + Table.Cell in = (Table.Cell)newWithMapValueDefault(source()); out = in.getValue(); sink(out); // $ hasValueFlow } { // "com.google.common.collect;Table;true;cellSet;();;MapValue of Argument[-1];MapValue of Element of ReturnValue;value" Set out = null; - Table in = (Table)newWithMapValue(source()); + Table in = (Table)newWithMapValueDefault(source()); out = in.cellSet(); - sink(getMapValue(getElement(out))); // $ hasValueFlow + sink(getMapValueDefault(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;cellSet;();;MapValue of Argument[-1];MapValue of Element of ReturnValue;value" Set out = null; - ArrayTable in = (ArrayTable)newWithMapValue(source()); + ArrayTable in = (ArrayTable)newWithMapValueDefault(source()); out = in.cellSet(); - sink(getMapValue(getElement(out))); // $ hasValueFlow + sink(getMapValueDefault(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;cellSet;();;MapValue of Argument[-1];MapValue of Element of ReturnValue;value" ImmutableSet out = null; - ImmutableTable in = (ImmutableTable)newWithMapValue(source()); + ImmutableTable in = (ImmutableTable)newWithMapValueDefault(source()); out = in.cellSet(); - sink(getMapValue(getElement(out))); // $ hasValueFlow + sink(getMapValueDefault(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;cellSet;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];SyntheticField[com.google.common.collect.Table.columnKey] of Element of ReturnValue;value" Set out = null; - Table in = (Table)newWithTable_columnKey(source()); + Table in = (Table)newWithTable_columnKeyDefault(source()); out = in.cellSet(); - sink(getTable_columnKey(getElement(out))); // $ hasValueFlow + sink(getTable_columnKeyDefault(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;cellSet;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];SyntheticField[com.google.common.collect.Table.columnKey] of Element of ReturnValue;value" Set out = null; - ArrayTable in = (ArrayTable)newWithTable_columnKey(source()); + ArrayTable in = (ArrayTable)newWithTable_columnKeyDefault(source()); out = in.cellSet(); - sink(getTable_columnKey(getElement(out))); // $ hasValueFlow + sink(getTable_columnKeyDefault(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;cellSet;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];SyntheticField[com.google.common.collect.Table.columnKey] of Element of ReturnValue;value" ImmutableSet out = null; - ImmutableTable in = (ImmutableTable)newWithTable_columnKey(source()); + ImmutableTable in = (ImmutableTable)newWithTable_columnKeyDefault(source()); out = in.cellSet(); - sink(getTable_columnKey(getElement(out))); // $ hasValueFlow + sink(getTable_columnKeyDefault(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;cellSet;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];SyntheticField[com.google.common.collect.Table.rowKey] of Element of ReturnValue;value" Set out = null; - Table in = (Table)newWithTable_rowKey(source()); + Table in = (Table)newWithTable_rowKeyDefault(source()); out = in.cellSet(); - sink(getTable_rowKey(getElement(out))); // $ hasValueFlow + sink(getTable_rowKeyDefault(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;cellSet;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];SyntheticField[com.google.common.collect.Table.rowKey] of Element of ReturnValue;value" Set out = null; - ArrayTable in = (ArrayTable)newWithTable_rowKey(source()); + ArrayTable in = (ArrayTable)newWithTable_rowKeyDefault(source()); out = in.cellSet(); - sink(getTable_rowKey(getElement(out))); // $ hasValueFlow + sink(getTable_rowKeyDefault(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;cellSet;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];SyntheticField[com.google.common.collect.Table.rowKey] of Element of ReturnValue;value" ImmutableSet out = null; - ImmutableTable in = (ImmutableTable)newWithTable_rowKey(source()); + ImmutableTable in = (ImmutableTable)newWithTable_rowKeyDefault(source()); out = in.cellSet(); - sink(getTable_rowKey(getElement(out))); // $ hasValueFlow + sink(getTable_rowKeyDefault(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;column;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" Map out = null; - Table in = (Table)newWithMapValue(source()); + Table in = (Table)newWithMapValueDefault(source()); out = in.column(null); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;column;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" Map out = null; - ArrayTable in = (ArrayTable)newWithMapValue(source()); + ArrayTable in = (ArrayTable)newWithMapValueDefault(source()); out = in.column(null); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;column;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" ImmutableMap out = null; - ImmutableTable in = (ImmutableTable)newWithMapValue(source()); + ImmutableTable in = (ImmutableTable)newWithMapValueDefault(source()); out = in.column(null); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;column;(Object);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];MapKey of ReturnValue;value" Map out = null; - Table in = (Table)newWithTable_rowKey(source()); + Table in = (Table)newWithTable_rowKeyDefault(source()); out = in.column(null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;column;(Object);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];MapKey of ReturnValue;value" Map out = null; - ArrayTable in = (ArrayTable)newWithTable_rowKey(source()); + ArrayTable in = (ArrayTable)newWithTable_rowKeyDefault(source()); out = in.column(null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;column;(Object);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];MapKey of ReturnValue;value" ImmutableMap out = null; - ImmutableTable in = (ImmutableTable)newWithTable_rowKey(source()); + ImmutableTable in = (ImmutableTable)newWithTable_rowKeyDefault(source()); out = in.column(null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;columnKeySet;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];Element of ReturnValue;value" Set out = null; - Table in = (Table)newWithTable_columnKey(source()); + Table in = (Table)newWithTable_columnKeyDefault(source()); out = in.columnKeySet(); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;columnKeySet;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];Element of ReturnValue;value" ImmutableSet out = null; - ImmutableTable in = (ImmutableTable)newWithTable_columnKey(source()); + ImmutableTable in = (ImmutableTable)newWithTable_columnKeyDefault(source()); out = in.columnKeySet(); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;columnKeySet;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];Element of ReturnValue;value" ImmutableSet out = null; - ArrayTable in = (ArrayTable)newWithTable_columnKey(source()); + ArrayTable in = (ArrayTable)newWithTable_columnKeyDefault(source()); out = in.columnKeySet(); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;columnMap;();;MapValue of Argument[-1];MapValue of MapValue of ReturnValue;value" Map out = null; - Table in = (Table)newWithMapValue(source()); + Table in = (Table)newWithMapValueDefault(source()); out = in.columnMap(); - sink(getMapValue(getMapValue(out))); // $ hasValueFlow + sink(getMapValueDefault(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;columnMap;();;MapValue of Argument[-1];MapValue of MapValue of ReturnValue;value" Map out = null; - ArrayTable in = (ArrayTable)newWithMapValue(source()); + ArrayTable in = (ArrayTable)newWithMapValueDefault(source()); out = in.columnMap(); - sink(getMapValue(getMapValue(out))); // $ hasValueFlow + sink(getMapValueDefault(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;columnMap;();;MapValue of Argument[-1];MapValue of MapValue of ReturnValue;value" ImmutableMap out = null; - ImmutableTable in = (ImmutableTable)newWithMapValue(source()); + ImmutableTable in = (ImmutableTable)newWithMapValueDefault(source()); out = in.columnMap(); - sink(getMapValue(getMapValue(out))); // $ hasValueFlow + sink(getMapValueDefault(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;columnMap;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];MapKey of ReturnValue;value" Map out = null; - Table in = (Table)newWithTable_columnKey(source()); + Table in = (Table)newWithTable_columnKeyDefault(source()); out = in.columnMap(); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;columnMap;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];MapKey of ReturnValue;value" Map out = null; - ArrayTable in = (ArrayTable)newWithTable_columnKey(source()); + ArrayTable in = (ArrayTable)newWithTable_columnKeyDefault(source()); out = in.columnMap(); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;columnMap;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];MapKey of ReturnValue;value" ImmutableMap out = null; - ImmutableTable in = (ImmutableTable)newWithTable_columnKey(source()); + ImmutableTable in = (ImmutableTable)newWithTable_columnKeyDefault(source()); out = in.columnMap(); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;columnMap;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];MapKey of MapValue of ReturnValue;value" Map out = null; - Table in = (Table)newWithTable_rowKey(source()); + Table in = (Table)newWithTable_rowKeyDefault(source()); out = in.columnMap(); - sink(getMapKey(getMapValue(out))); // $ hasValueFlow + sink(getMapKeyDefault(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;columnMap;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];MapKey of MapValue of ReturnValue;value" Map out = null; - ArrayTable in = (ArrayTable)newWithTable_rowKey(source()); + ArrayTable in = (ArrayTable)newWithTable_rowKeyDefault(source()); out = in.columnMap(); - sink(getMapKey(getMapValue(out))); // $ hasValueFlow + sink(getMapKeyDefault(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;columnMap;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];MapKey of MapValue of ReturnValue;value" ImmutableMap out = null; - ImmutableTable in = (ImmutableTable)newWithTable_rowKey(source()); + ImmutableTable in = (ImmutableTable)newWithTable_rowKeyDefault(source()); out = in.columnMap(); - sink(getMapKey(getMapValue(out))); // $ hasValueFlow + sink(getMapKeyDefault(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;get;(Object,Object);;MapValue of Argument[-1];ReturnValue;value" Object out = null; - Table in = (Table)newWithMapValue(source()); + Table in = (Table)newWithMapValueDefault(source()); out = in.get(null, null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;Table;true;get;(Object,Object);;MapValue of Argument[-1];ReturnValue;value" Object out = null; - HashBasedTable in = (HashBasedTable)newWithMapValue(source()); + HashBasedTable in = (HashBasedTable)newWithMapValueDefault(source()); out = in.get(null, null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;Table;true;get;(Object,Object);;MapValue of Argument[-1];ReturnValue;value" Object out = null; - ArrayTable in = (ArrayTable)newWithMapValue(source()); + ArrayTable in = (ArrayTable)newWithMapValueDefault(source()); out = in.get(null, null); sink(out); // $ hasValueFlow } @@ -7015,369 +6976,369 @@ public class Test { Table out = null; Object in = (Object)source(); out.put(in, null, null); - sink(getTable_rowKey(out)); // $ hasValueFlow + sink(getTable_rowKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;put;(Object,Object,Object);;Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];value" ImmutableTable out = null; Object in = (Object)source(); out.put(in, null, null); - sink(getTable_rowKey(out)); // $ hasValueFlow + sink(getTable_rowKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;put;(Object,Object,Object);;Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];value" ArrayTable out = null; Object in = (Object)source(); out.put(in, null, null); - sink(getTable_rowKey(out)); // $ hasValueFlow + sink(getTable_rowKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;put;(Object,Object,Object);;Argument[1];SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];value" Table out = null; Object in = (Object)source(); out.put(null, in, null); - sink(getTable_columnKey(out)); // $ hasValueFlow + sink(getTable_columnKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;put;(Object,Object,Object);;Argument[1];SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];value" ImmutableTable out = null; Object in = (Object)source(); out.put(null, in, null); - sink(getTable_columnKey(out)); // $ hasValueFlow + sink(getTable_columnKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;put;(Object,Object,Object);;Argument[1];SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];value" ArrayTable out = null; Object in = (Object)source(); out.put(null, in, null); - sink(getTable_columnKey(out)); // $ hasValueFlow + sink(getTable_columnKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;put;(Object,Object,Object);;Argument[2];MapValue of Argument[-1];value" Table out = null; Object in = (Object)source(); out.put(null, null, in); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;put;(Object,Object,Object);;Argument[2];MapValue of Argument[-1];value" ImmutableTable out = null; Object in = (Object)source(); out.put(null, null, in); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;put;(Object,Object,Object);;Argument[2];MapValue of Argument[-1];value" ArrayTable out = null; Object in = (Object)source(); out.put(null, null, in); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;putAll;(Table);;MapValue of Argument[0];MapValue of Argument[-1];value" Table out = null; - Table in = (Table)newWithMapValue(source()); + Table in = (Table)newWithMapValueDefault(source()); out.putAll(in); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;putAll;(Table);;MapValue of Argument[0];MapValue of Argument[-1];value" ImmutableTable out = null; - Table in = (Table)newWithMapValue(source()); + Table in = (Table)newWithMapValueDefault(source()); out.putAll(in); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;putAll;(Table);;MapValue of Argument[0];MapValue of Argument[-1];value" ArrayTable out = null; - Table in = (Table)newWithMapValue(source()); + Table in = (Table)newWithMapValueDefault(source()); out.putAll(in); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;putAll;(Table);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];value" Table out = null; - Table in = (Table)newWithTable_columnKey(source()); + Table in = (Table)newWithTable_columnKeyDefault(source()); out.putAll(in); - sink(getTable_columnKey(out)); // $ hasValueFlow + sink(getTable_columnKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;putAll;(Table);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];value" ImmutableTable out = null; - Table in = (Table)newWithTable_columnKey(source()); + Table in = (Table)newWithTable_columnKeyDefault(source()); out.putAll(in); - sink(getTable_columnKey(out)); // $ hasValueFlow + sink(getTable_columnKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;putAll;(Table);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];value" ArrayTable out = null; - Table in = (Table)newWithTable_columnKey(source()); + Table in = (Table)newWithTable_columnKeyDefault(source()); out.putAll(in); - sink(getTable_columnKey(out)); // $ hasValueFlow + sink(getTable_columnKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;putAll;(Table);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];value" Table out = null; - Table in = (Table)newWithTable_rowKey(source()); + Table in = (Table)newWithTable_rowKeyDefault(source()); out.putAll(in); - sink(getTable_rowKey(out)); // $ hasValueFlow + sink(getTable_rowKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;putAll;(Table);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];value" ImmutableTable out = null; - Table in = (Table)newWithTable_rowKey(source()); + Table in = (Table)newWithTable_rowKeyDefault(source()); out.putAll(in); - sink(getTable_rowKey(out)); // $ hasValueFlow + sink(getTable_rowKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;putAll;(Table);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];value" ArrayTable out = null; - Table in = (Table)newWithTable_rowKey(source()); + Table in = (Table)newWithTable_rowKeyDefault(source()); out.putAll(in); - sink(getTable_rowKey(out)); // $ hasValueFlow + sink(getTable_rowKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;remove;(Object,Object);;MapValue of Argument[-1];ReturnValue;value" Object out = null; - Table in = (Table)newWithMapValue(source()); + Table in = (Table)newWithMapValueDefault(source()); out = in.remove(null, null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;Table;true;remove;(Object,Object);;MapValue of Argument[-1];ReturnValue;value" Object out = null; - ImmutableTable in = (ImmutableTable)newWithMapValue(source()); + ImmutableTable in = (ImmutableTable)newWithMapValueDefault(source()); out = in.remove(null, null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;Table;true;remove;(Object,Object);;MapValue of Argument[-1];ReturnValue;value" Object out = null; - HashBasedTable in = (HashBasedTable)newWithMapValue(source()); + HashBasedTable in = (HashBasedTable)newWithMapValueDefault(source()); out = in.remove(null, null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;Table;true;remove;(Object,Object);;MapValue of Argument[-1];ReturnValue;value" Object out = null; - ArrayTable in = (ArrayTable)newWithMapValue(source()); + ArrayTable in = (ArrayTable)newWithMapValueDefault(source()); out = in.remove(null, null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;Table;true;row;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" SortedMap out = null; - TreeBasedTable in = (TreeBasedTable)newWithMapValue(source()); + TreeBasedTable in = (TreeBasedTable)newWithMapValueDefault(source()); out = in.row(null); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;row;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" Map out = null; - Table in = (Table)newWithMapValue(source()); + Table in = (Table)newWithMapValueDefault(source()); out = in.row(null); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;row;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" Map out = null; - ArrayTable in = (ArrayTable)newWithMapValue(source()); + ArrayTable in = (ArrayTable)newWithMapValueDefault(source()); out = in.row(null); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;row;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" ImmutableMap out = null; - ImmutableTable in = (ImmutableTable)newWithMapValue(source()); + ImmutableTable in = (ImmutableTable)newWithMapValueDefault(source()); out = in.row(null); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;row;(Object);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];MapKey of ReturnValue;value" SortedMap out = null; - TreeBasedTable in = (TreeBasedTable)newWithTable_columnKey(source()); + TreeBasedTable in = (TreeBasedTable)newWithTable_columnKeyDefault(source()); out = in.row(null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;row;(Object);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];MapKey of ReturnValue;value" Map out = null; - Table in = (Table)newWithTable_columnKey(source()); + Table in = (Table)newWithTable_columnKeyDefault(source()); out = in.row(null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;row;(Object);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];MapKey of ReturnValue;value" Map out = null; - ArrayTable in = (ArrayTable)newWithTable_columnKey(source()); + ArrayTable in = (ArrayTable)newWithTable_columnKeyDefault(source()); out = in.row(null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;row;(Object);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];MapKey of ReturnValue;value" ImmutableMap out = null; - ImmutableTable in = (ImmutableTable)newWithTable_columnKey(source()); + ImmutableTable in = (ImmutableTable)newWithTable_columnKeyDefault(source()); out = in.row(null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;rowKeySet;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];Element of ReturnValue;value" SortedSet out = null; - TreeBasedTable in = (TreeBasedTable)newWithTable_rowKey(source()); + TreeBasedTable in = (TreeBasedTable)newWithTable_rowKeyDefault(source()); out = in.rowKeySet(); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;rowKeySet;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];Element of ReturnValue;value" SortedSet out = null; - RowSortedTable in = (RowSortedTable)newWithTable_rowKey(source()); + RowSortedTable in = (RowSortedTable)newWithTable_rowKeyDefault(source()); out = in.rowKeySet(); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;rowKeySet;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];Element of ReturnValue;value" Set out = null; - Table in = (Table)newWithTable_rowKey(source()); + Table in = (Table)newWithTable_rowKeyDefault(source()); out = in.rowKeySet(); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;rowKeySet;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];Element of ReturnValue;value" ImmutableSet out = null; - ImmutableTable in = (ImmutableTable)newWithTable_rowKey(source()); + ImmutableTable in = (ImmutableTable)newWithTable_rowKeyDefault(source()); out = in.rowKeySet(); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;rowKeySet;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];Element of ReturnValue;value" ImmutableSet out = null; - ArrayTable in = (ArrayTable)newWithTable_rowKey(source()); + ArrayTable in = (ArrayTable)newWithTable_rowKeyDefault(source()); out = in.rowKeySet(); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;rowMap;();;MapValue of Argument[-1];MapValue of MapValue of ReturnValue;value" SortedMap out = null; - TreeBasedTable in = (TreeBasedTable)newWithMapValue(source()); + TreeBasedTable in = (TreeBasedTable)newWithMapValueDefault(source()); out = in.rowMap(); - sink(getMapValue(getMapValue(out))); // $ hasValueFlow + sink(getMapValueDefault(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;rowMap;();;MapValue of Argument[-1];MapValue of MapValue of ReturnValue;value" SortedMap out = null; - RowSortedTable in = (RowSortedTable)newWithMapValue(source()); + RowSortedTable in = (RowSortedTable)newWithMapValueDefault(source()); out = in.rowMap(); - sink(getMapValue(getMapValue(out))); // $ hasValueFlow + sink(getMapValueDefault(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;rowMap;();;MapValue of Argument[-1];MapValue of MapValue of ReturnValue;value" Map out = null; - Table in = (Table)newWithMapValue(source()); + Table in = (Table)newWithMapValueDefault(source()); out = in.rowMap(); - sink(getMapValue(getMapValue(out))); // $ hasValueFlow + sink(getMapValueDefault(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;rowMap;();;MapValue of Argument[-1];MapValue of MapValue of ReturnValue;value" Map out = null; - ArrayTable in = (ArrayTable)newWithMapValue(source()); + ArrayTable in = (ArrayTable)newWithMapValueDefault(source()); out = in.rowMap(); - sink(getMapValue(getMapValue(out))); // $ hasValueFlow + sink(getMapValueDefault(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;rowMap;();;MapValue of Argument[-1];MapValue of MapValue of ReturnValue;value" ImmutableMap out = null; - ImmutableTable in = (ImmutableTable)newWithMapValue(source()); + ImmutableTable in = (ImmutableTable)newWithMapValueDefault(source()); out = in.rowMap(); - sink(getMapValue(getMapValue(out))); // $ hasValueFlow + sink(getMapValueDefault(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;rowMap;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];MapKey of MapValue of ReturnValue;value" SortedMap out = null; - TreeBasedTable in = (TreeBasedTable)newWithTable_columnKey(source()); + TreeBasedTable in = (TreeBasedTable)newWithTable_columnKeyDefault(source()); out = in.rowMap(); - sink(getMapKey(getMapValue(out))); // $ hasValueFlow + sink(getMapKeyDefault(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;rowMap;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];MapKey of MapValue of ReturnValue;value" SortedMap out = null; - RowSortedTable in = (RowSortedTable)newWithTable_columnKey(source()); + RowSortedTable in = (RowSortedTable)newWithTable_columnKeyDefault(source()); out = in.rowMap(); - sink(getMapKey(getMapValue(out))); // $ hasValueFlow + sink(getMapKeyDefault(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;rowMap;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];MapKey of MapValue of ReturnValue;value" Map out = null; - Table in = (Table)newWithTable_columnKey(source()); + Table in = (Table)newWithTable_columnKeyDefault(source()); out = in.rowMap(); - sink(getMapKey(getMapValue(out))); // $ hasValueFlow + sink(getMapKeyDefault(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;rowMap;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];MapKey of MapValue of ReturnValue;value" Map out = null; - ArrayTable in = (ArrayTable)newWithTable_columnKey(source()); + ArrayTable in = (ArrayTable)newWithTable_columnKeyDefault(source()); out = in.rowMap(); - sink(getMapKey(getMapValue(out))); // $ hasValueFlow + sink(getMapKeyDefault(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;rowMap;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];MapKey of MapValue of ReturnValue;value" ImmutableMap out = null; - ImmutableTable in = (ImmutableTable)newWithTable_columnKey(source()); + ImmutableTable in = (ImmutableTable)newWithTable_columnKeyDefault(source()); out = in.rowMap(); - sink(getMapKey(getMapValue(out))); // $ hasValueFlow + sink(getMapKeyDefault(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;rowMap;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];MapKey of ReturnValue;value" SortedMap out = null; - TreeBasedTable in = (TreeBasedTable)newWithTable_rowKey(source()); + TreeBasedTable in = (TreeBasedTable)newWithTable_rowKeyDefault(source()); out = in.rowMap(); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;rowMap;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];MapKey of ReturnValue;value" SortedMap out = null; - RowSortedTable in = (RowSortedTable)newWithTable_rowKey(source()); + RowSortedTable in = (RowSortedTable)newWithTable_rowKeyDefault(source()); out = in.rowMap(); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;rowMap;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];MapKey of ReturnValue;value" Map out = null; - Table in = (Table)newWithTable_rowKey(source()); + Table in = (Table)newWithTable_rowKeyDefault(source()); out = in.rowMap(); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;rowMap;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];MapKey of ReturnValue;value" Map out = null; - ArrayTable in = (ArrayTable)newWithTable_rowKey(source()); + ArrayTable in = (ArrayTable)newWithTable_rowKeyDefault(source()); out = in.rowMap(); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;rowMap;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];MapKey of ReturnValue;value" ImmutableMap out = null; - ImmutableTable in = (ImmutableTable)newWithTable_rowKey(source()); + ImmutableTable in = (ImmutableTable)newWithTable_rowKeyDefault(source()); out = in.rowMap(); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;values;();;MapValue of Argument[-1];Element of ReturnValue;value" ImmutableCollection out = null; - ImmutableTable in = (ImmutableTable)newWithMapValue(source()); + ImmutableTable in = (ImmutableTable)newWithMapValueDefault(source()); out = in.values(); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;values;();;MapValue of Argument[-1];Element of ReturnValue;value" Collection out = null; - Table in = (Table)newWithMapValue(source()); + Table in = (Table)newWithMapValueDefault(source()); out = in.values(); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;values;();;MapValue of Argument[-1];Element of ReturnValue;value" Collection out = null; - ArrayTable in = (ArrayTable)newWithMapValue(source()); + ArrayTable in = (ArrayTable)newWithMapValueDefault(source()); out = in.values(); sink(getElement(out)); // $ hasValueFlow } @@ -7386,180 +7347,180 @@ public class Test { Table.Cell out = null; Object in = (Object)source(); out = Tables.immutableCell(in, null, null); - sink(getTable_rowKey(out)); // $ hasValueFlow + sink(getTable_rowKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Tables;false;immutableCell;(Object,Object,Object);;Argument[1];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value" Table.Cell out = null; Object in = (Object)source(); out = Tables.immutableCell(null, in, null); - sink(getTable_columnKey(out)); // $ hasValueFlow + sink(getTable_columnKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Tables;false;immutableCell;(Object,Object,Object);;Argument[2];MapValue of ReturnValue;value" Table.Cell out = null; Object in = (Object)source(); out = Tables.immutableCell(null, null, in); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Tables;false;newCustomTable;(Map,Supplier);;MapKey of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value" Table out = null; Map in = (Map)Map.of(source(), null); out = Tables.newCustomTable(in, null); - sink(getTable_rowKey(out)); // $ hasValueFlow + sink(getTable_rowKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Tables;false;newCustomTable;(Map,Supplier);;MapKey of MapValue of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value" Table out = null; - Map in = (Map)Map.of(null, newWithMapKey(source())); + Map in = (Map)Map.of(null, newWithMapKeyDefault(source())); out = Tables.newCustomTable(in, null); - sink(getTable_columnKey(out)); // $ hasValueFlow + sink(getTable_columnKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Tables;false;newCustomTable;(Map,Supplier);;MapValue of MapValue of Argument[0];MapValue of ReturnValue;value" Table out = null; - Map in = (Map)Map.of(null, newWithMapValue(source())); + Map in = (Map)Map.of(null, newWithMapValueDefault(source())); out = Tables.newCustomTable(in, null); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Tables;false;synchronizedTable;(Table);;MapValue of Argument[0];MapValue of ReturnValue;value" Table out = null; - Table in = (Table)newWithMapValue(source()); + Table in = (Table)newWithMapValueDefault(source()); out = Tables.synchronizedTable(in); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Tables;false;synchronizedTable;(Table);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value" Table out = null; - Table in = (Table)newWithTable_columnKey(source()); + Table in = (Table)newWithTable_columnKeyDefault(source()); out = Tables.synchronizedTable(in); - sink(getTable_columnKey(out)); // $ hasValueFlow + sink(getTable_columnKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Tables;false;synchronizedTable;(Table);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value" Table out = null; - Table in = (Table)newWithTable_rowKey(source()); + Table in = (Table)newWithTable_rowKeyDefault(source()); out = Tables.synchronizedTable(in); - sink(getTable_rowKey(out)); // $ hasValueFlow + sink(getTable_rowKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Tables;false;transformValues;(Table,Function);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value" Table out = null; - Table in = (Table)newWithTable_columnKey(source()); + Table in = (Table)newWithTable_columnKeyDefault(source()); out = Tables.transformValues(in, null); - sink(getTable_columnKey(out)); // $ hasValueFlow + sink(getTable_columnKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Tables;false;transformValues;(Table,Function);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value" Table out = null; - Table in = (Table)newWithTable_rowKey(source()); + Table in = (Table)newWithTable_rowKeyDefault(source()); out = Tables.transformValues(in, null); - sink(getTable_rowKey(out)); // $ hasValueFlow + sink(getTable_rowKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Tables;false;transpose;(Table);;MapValue of Argument[0];MapValue of ReturnValue;value" Table out = null; - Table in = (Table)newWithMapValue(source()); + Table in = (Table)newWithMapValueDefault(source()); out = Tables.transpose(in); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Tables;false;transpose;(Table);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value" Table out = null; - Table in = (Table)newWithTable_columnKey(source()); + Table in = (Table)newWithTable_columnKeyDefault(source()); out = Tables.transpose(in); - sink(getTable_rowKey(out)); // $ hasValueFlow + sink(getTable_rowKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Tables;false;transpose;(Table);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value" Table out = null; - Table in = (Table)newWithTable_rowKey(source()); + Table in = (Table)newWithTable_rowKeyDefault(source()); out = Tables.transpose(in); - sink(getTable_columnKey(out)); // $ hasValueFlow + sink(getTable_columnKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Tables;false;unmodifiableRowSortedTable;(RowSortedTable);;MapValue of Argument[0];MapValue of ReturnValue;value" RowSortedTable out = null; - RowSortedTable in = (RowSortedTable)newWithMapValue(source()); + RowSortedTable in = (RowSortedTable)newWithMapValueDefault(source()); out = Tables.unmodifiableRowSortedTable(in); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Tables;false;unmodifiableRowSortedTable;(RowSortedTable);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value" RowSortedTable out = null; - RowSortedTable in = (RowSortedTable)newWithTable_columnKey(source()); + RowSortedTable in = (RowSortedTable)newWithTable_columnKeyDefault(source()); out = Tables.unmodifiableRowSortedTable(in); - sink(getTable_columnKey(out)); // $ hasValueFlow + sink(getTable_columnKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Tables;false;unmodifiableRowSortedTable;(RowSortedTable);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value" RowSortedTable out = null; - RowSortedTable in = (RowSortedTable)newWithTable_rowKey(source()); + RowSortedTable in = (RowSortedTable)newWithTable_rowKeyDefault(source()); out = Tables.unmodifiableRowSortedTable(in); - sink(getTable_rowKey(out)); // $ hasValueFlow + sink(getTable_rowKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Tables;false;unmodifiableTable;(Table);;MapValue of Argument[0];MapValue of ReturnValue;value" Table out = null; - Table in = (Table)newWithMapValue(source()); + Table in = (Table)newWithMapValueDefault(source()); out = Tables.unmodifiableTable(in); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Tables;false;unmodifiableTable;(Table);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value" Table out = null; - Table in = (Table)newWithTable_columnKey(source()); + Table in = (Table)newWithTable_columnKeyDefault(source()); out = Tables.unmodifiableTable(in); - sink(getTable_columnKey(out)); // $ hasValueFlow + sink(getTable_columnKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;Tables;false;unmodifiableTable;(Table);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value" Table out = null; - Table in = (Table)newWithTable_rowKey(source()); + Table in = (Table)newWithTable_rowKeyDefault(source()); out = Tables.unmodifiableTable(in); - sink(getTable_rowKey(out)); // $ hasValueFlow + sink(getTable_rowKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;TreeBasedTable;true;create;(TreeBasedTable);;MapValue of Argument[0];MapValue of ReturnValue;value" TreeBasedTable out = null; - TreeBasedTable in = (TreeBasedTable)newWithMapValue(source()); + TreeBasedTable in = (TreeBasedTable)newWithMapValueDefault(source()); out = TreeBasedTable.create(in); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;TreeBasedTable;true;create;(TreeBasedTable);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value" TreeBasedTable out = null; - TreeBasedTable in = (TreeBasedTable)newWithTable_columnKey(source()); + TreeBasedTable in = (TreeBasedTable)newWithTable_columnKeyDefault(source()); out = TreeBasedTable.create(in); - sink(getTable_columnKey(out)); // $ hasValueFlow + sink(getTable_columnKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;TreeBasedTable;true;create;(TreeBasedTable);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value" TreeBasedTable out = null; - TreeBasedTable in = (TreeBasedTable)newWithTable_rowKey(source()); + TreeBasedTable in = (TreeBasedTable)newWithTable_rowKeyDefault(source()); out = TreeBasedTable.create(in); - sink(getTable_rowKey(out)); // $ hasValueFlow + sink(getTable_rowKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;TreeMultimap;true;create;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value" TreeMultimap out = null; - Multimap in = (Multimap)newWithMapKey(source()); + Multimap in = (Multimap)newWithMapKeyDefault(source()); out = TreeMultimap.create(in); - sink(getMapKey(out)); // $ hasValueFlow + sink(getMapKeyDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;TreeMultimap;true;create;(Multimap);;MapValue of Argument[0];MapValue of ReturnValue;value" TreeMultimap out = null; - Multimap in = (Multimap)newWithMapValue(source()); + Multimap in = (Multimap)newWithMapValueDefault(source()); out = TreeMultimap.create(in); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueDefault(out)); // $ hasValueFlow } { // "com.google.common.collect;TreeMultiset;true;create;(Iterable);;Element of Argument[0];Element of ReturnValue;value" TreeMultiset out = null; - Iterable in = (Iterable)newWithElement(source()); + Iterable in = (Iterable)List.of(source()); out = TreeMultiset.create(in); sink(getElement(out)); // $ hasValueFlow } diff --git a/java/ql/test/library-tests/frameworks/guava/generated/collect/test.ql b/java/ql/test/library-tests/frameworks/guava/generated/collect/test.ql index 67709519db2..8d0b9f65223 100644 --- a/java/ql/test/library-tests/frameworks/guava/generated/collect/test.ql +++ b/java/ql/test/library-tests/frameworks/guava/generated/collect/test.ql @@ -9,20 +9,20 @@ class SummaryModelTest extends SummaryModelCsv { row = [ //"package;type;overrides;name;signature;ext;inputspec;outputspec;kind", - "generatedtest;Test;false;newWithElement;;;Argument[0];Element of ReturnValue;value", - "generatedtest;Test;false;getElement;;;Element of Argument[0];ReturnValue;value", - "generatedtest;Test;false;newWithMapKey;;;Argument[0];MapKey of ReturnValue;value", - "generatedtest;Test;false;getMapKey;;;MapKey of Argument[0];ReturnValue;value", - "generatedtest;Test;false;newWithMapValue;;;Argument[0];MapValue of ReturnValue;value", - "generatedtest;Test;false;getMapValue;;;MapValue of Argument[0];ReturnValue;value", - "generatedtest;Test;false;newWithTable_rowKey;;;Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value", - "generatedtest;Test;false;getTable_rowKey;;;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];ReturnValue;value", - "generatedtest;Test;false;newWithTable_columnKey;;;Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value", - "generatedtest;Test;false;getTable_columnKey;;;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];ReturnValue;value", - "generatedtest;Test;false;newWithMapDifference_left;;;Argument[0];SyntheticField[com.google.common.collect.MapDifference.left] of ReturnValue;value", - "generatedtest;Test;false;getMapDifference_left;;;SyntheticField[com.google.common.collect.MapDifference.left] of Argument[0];ReturnValue;value", - "generatedtest;Test;false;newWithMapDifference_right;;;Argument[0];SyntheticField[com.google.common.collect.MapDifference.right] of ReturnValue;value", - "generatedtest;Test;false;getMapDifference_right;;;SyntheticField[com.google.common.collect.MapDifference.right] of Argument[0];ReturnValue;value" + "generatedtest;Test;false;newWithElementDefault;(Object);;Argument[0];Element of ReturnValue;value", + "generatedtest;Test;false;getElementDefault;(Object);;Element of Argument[0];ReturnValue;value", + "generatedtest;Test;false;newWithMapKeyDefault;(Object);;Argument[0];MapKey of ReturnValue;value", + "generatedtest;Test;false;getMapKeyDefault;(Object);;MapKey of Argument[0];ReturnValue;value", + "generatedtest;Test;false;newWithMapValueDefault;(Object);;Argument[0];MapValue of ReturnValue;value", + "generatedtest;Test;false;getMapValueDefault;(Object);;MapValue of Argument[0];ReturnValue;value", + "generatedtest;Test;false;newWithTable_rowKeyDefault;(Object);;Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value", + "generatedtest;Test;false;getTable_rowKeyDefault;(Object);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];ReturnValue;value", + "generatedtest;Test;false;newWithTable_columnKeyDefault;(Object);;Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value", + "generatedtest;Test;false;getTable_columnKeyDefault;(Object);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];ReturnValue;value", + "generatedtest;Test;false;newWithMapDifference_leftDefault;(Object);;Argument[0];SyntheticField[com.google.common.collect.MapDifference.left] of ReturnValue;value", + "generatedtest;Test;false;getMapDifference_leftDefault;(Object);;SyntheticField[com.google.common.collect.MapDifference.left] of Argument[0];ReturnValue;value", + "generatedtest;Test;false;newWithMapDifference_rightDefault;(Object);;Argument[0];SyntheticField[com.google.common.collect.MapDifference.right] of ReturnValue;value", + "generatedtest;Test;false;getMapDifference_rightDefault;(Object);;SyntheticField[com.google.common.collect.MapDifference.right] of Argument[0];ReturnValue;value" ] } } From c36292bfd09c4afd2cd3e382dda0d41e050e89c9 Mon Sep 17 00:00:00 2001 From: james Date: Thu, 16 Sep 2021 17:03:29 +0100 Subject: [PATCH 498/741] a few more links --- docs/codeql/ql-training/conf.py | 2 +- docs/codeql/ql-training/cpp/bad-overflow-guard.rst | 4 ++-- docs/codeql/ql-training/cpp/control-flow-cpp.rst | 2 +- docs/codeql/ql-training/cpp/intro-ql-cpp.rst | 2 +- .../ql-training/slide-snippets/abstract-syntax-tree.rst | 6 +++--- docs/codeql/ql-training/slide-snippets/database-note.rst | 2 +- 6 files changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/codeql/ql-training/conf.py b/docs/codeql/ql-training/conf.py index 0443e854c99..7514f9798f1 100644 --- a/docs/codeql/ql-training/conf.py +++ b/docs/codeql/ql-training/conf.py @@ -47,7 +47,7 @@ import sys import os def setup(sphinx): - sys.path.insert(0, os.path.abspath('docs/codeql')) + sys.path.insert(0, os.path.join(os.path.dirname( __file__ ), '..')) from qllexer import QLLexer sphinx.add_lexer("ql", QLLexer()) diff --git a/docs/codeql/ql-training/cpp/bad-overflow-guard.rst b/docs/codeql/ql-training/cpp/bad-overflow-guard.rst index 7ce4d68bfdb..8912a4259ce 100644 --- a/docs/codeql/ql-training/cpp/bad-overflow-guard.rst +++ b/docs/codeql/ql-training/cpp/bad-overflow-guard.rst @@ -16,7 +16,7 @@ For this example you should download: .. note:: - For the examples in this presentation, we will be analyzing `ChakraCore `__. + For the examples in this presentation, we will be analyzing `ChakraCore `__. You can query the project in `the query console `__ on LGTM.com. @@ -229,4 +229,4 @@ The final query .. literalinclude:: ../query-examples/cpp/bad-overflow-guard-3.ql :language: ql -This query finds a single result in our historic database, which was `a genuine bug in ChakraCore `__. +This query finds a single result in our historic database, which was `a genuine bug in ChakraCore `__. diff --git a/docs/codeql/ql-training/cpp/control-flow-cpp.rst b/docs/codeql/ql-training/cpp/control-flow-cpp.rst index c44e2ea0b74..f02c5232d42 100644 --- a/docs/codeql/ql-training/cpp/control-flow-cpp.rst +++ b/docs/codeql/ql-training/cpp/control-flow-cpp.rst @@ -18,7 +18,7 @@ For this example you should download: .. note:: - For the examples in this presentation, we will be analyzing `ChakraCore `__. + For the examples in this presentation, we will be analyzing `ChakraCore `__. You can query the project in `the query console `__ on LGTM.com. diff --git a/docs/codeql/ql-training/cpp/intro-ql-cpp.rst b/docs/codeql/ql-training/cpp/intro-ql-cpp.rst index 0c08f77dba2..3298e4d3706 100644 --- a/docs/codeql/ql-training/cpp/intro-ql-cpp.rst +++ b/docs/codeql/ql-training/cpp/intro-ql-cpp.rst @@ -110,7 +110,7 @@ Each query library also implicitly defines a module. Parts of queries can be lifted into `library files `__ with the extension ``.qll``. Definitions within such libraries can be brought into scope using ``import`` statements, and similarly QLL files can import each other’s definitions using “import” statements. - Logic can be encapsulated as user-defined `predicates `__ and `classes `__, and organized into `modules `__. Each QLL file implicitly defines a module, but QL and QLL files can also contain explicit module definitions, as we will see later. + Logic can be encapsulated as user-defined `predicates `__ and `classes `__, and organized into `modules `__. Each QLL file implicitly defines a module, but QL and QLL files can also contain explicit module definitions, as we will see later. Predicates ========== diff --git a/docs/codeql/ql-training/slide-snippets/abstract-syntax-tree.rst b/docs/codeql/ql-training/slide-snippets/abstract-syntax-tree.rst index adae6c8841f..3e990d94b01 100644 --- a/docs/codeql/ql-training/slide-snippets/abstract-syntax-tree.rst +++ b/docs/codeql/ql-training/slide-snippets/abstract-syntax-tree.rst @@ -65,6 +65,6 @@ Entity types are rarely used directly, the usual pattern is to define a class th For example, the database schemas for C/++, C#, and Java CodeQL databases are here: - - https://github.com/github/codeql/blob/main/cpp/ql/src/semmlecode.cpp.dbscheme - - https://github.com/github/codeql/blob/main/csharp/ql/src/semmlecode.csharp.dbscheme - - https://github.com/github/codeql/blob/main/java/ql/src/config/semmlecode.dbscheme \ No newline at end of file + - https://github.com/github/codeql/blob/main/cpp/ql/lib/semmlecode.cpp.dbscheme + - https://github.com/github/codeql/blob/main/csharp/ql/lib/semmlecode.csharp.dbscheme + - https://github.com/github/codeql/blob/main/java/ql/lib/config/semmlecode.dbscheme \ No newline at end of file diff --git a/docs/codeql/ql-training/slide-snippets/database-note.rst b/docs/codeql/ql-training/slide-snippets/database-note.rst index 2b6bcce75ab..909f56e3585 100644 --- a/docs/codeql/ql-training/slide-snippets/database-note.rst +++ b/docs/codeql/ql-training/slide-snippets/database-note.rst @@ -4,6 +4,6 @@ You can download the database as a zip file by clicking the link on the slide ab #. Add the unzipped database to Visual Studio Code #. Upgrade the database if necessary -For further information, see `Analyzing your projects `__ in the CodeQL for Visual Studio Code help. +For further information, see `Analyzing your projects `__ in the CodeQL for Visual Studio Code help. Note that results generated in the query console are likely to differ to those generated in CodeQL for Visual Studio Code as LGTM.com analyzes the most recent revisions of each project that has been added–the CodeQL database available to download above is based on an historical version of the codebase. \ No newline at end of file From af8b2b6d9cff903f024245def39b3e0652e0f8b8 Mon Sep 17 00:00:00 2001 From: Daniel Santos Date: Thu, 16 Sep 2021 11:24:06 -0500 Subject: [PATCH 499/741] Fix Android logging signature in java/ql/src/experimental/semmle/code/java/Logging.qll --- .../experimental/semmle/code/java/Logging.qll | 20 +++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/java/ql/src/experimental/semmle/code/java/Logging.qll b/java/ql/src/experimental/semmle/code/java/Logging.qll index b3444972710..a953de9eabf 100644 --- a/java/ql/src/experimental/semmle/code/java/Logging.qll +++ b/java/ql/src/experimental/semmle/code/java/Logging.qll @@ -18,8 +18,7 @@ class LoggingCall extends MethodAccess { t.hasQualifiedName("org.scijava.log", "Logger") or t.hasQualifiedName("com.google.common.flogger", "LoggingApi") or t.hasQualifiedName("java.lang", "System$Logger") or - t.hasQualifiedName("java.util.logging", "Logger") or - t.hasQualifiedName("android.util", "Log") + t.hasQualifiedName("java.util.logging", "Logger") | ( m.getDeclaringType().getASourceSupertype*() = t or @@ -28,6 +27,23 @@ class LoggingCall extends MethodAccess { m.getReturnType() instanceof VoidType and this = m.getAReference() ) + or + exists(RefType t, Method m | t.hasQualifiedName("android.util", "Log") | + ( + m.hasName("d") or + m.hasName("e") or + m.hasName("i") or + m.hasName("v") or + m.hasName("w") or + m.hasName("wtf") + ) and + ( + m.getDeclaringType().getASourceSupertype*() = t or + m.getDeclaringType().extendsOrImplements*(t) + ) and + m.getReturnType() instanceof IntegralType and + this = m.getAReference() + ) } /** Returns an argument which would be logged by this call. */ From 4d7aa5c94552b44c256bd3121e2f047d0da40cf4 Mon Sep 17 00:00:00 2001 From: Ethan P <56270045+ethanpalm@users.noreply.github.com> Date: Thu, 16 Sep 2021 09:29:35 -0700 Subject: [PATCH 500/741] Update example note --- docs/codeql/codeql-cli/creating-codeql-databases.rst | 2 -- 1 file changed, 2 deletions(-) diff --git a/docs/codeql/codeql-cli/creating-codeql-databases.rst b/docs/codeql/codeql-cli/creating-codeql-databases.rst index fb6613d230a..16dadf16411 100644 --- a/docs/codeql/codeql-cli/creating-codeql-databases.rst +++ b/docs/codeql/codeql-cli/creating-codeql-databases.rst @@ -284,8 +284,6 @@ The following example shows how you could use indirect build tracing in an Azure # Initialize the CodeQL database. # In this example, the CodeQL CLI has been downloaded and placed on the PATH. - # If no language is specified, a GitHub Apps or personal access token must be passed through stdin. - # to autodetect the language. - task: CmdLine@1 displayName: Initialize CodeQL database inputs: From 032a7e71fe63b15994fec4e7e1e422598fc19514 Mon Sep 17 00:00:00 2001 From: Daniel Santos Date: Thu, 16 Sep 2021 13:03:26 -0500 Subject: [PATCH 501/741] Update Logging.qll Simplified using a set-literal as suggested by @intrigus-lgtm --- java/ql/src/experimental/semmle/code/java/Logging.qll | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/java/ql/src/experimental/semmle/code/java/Logging.qll b/java/ql/src/experimental/semmle/code/java/Logging.qll index a953de9eabf..9d7efb1f330 100644 --- a/java/ql/src/experimental/semmle/code/java/Logging.qll +++ b/java/ql/src/experimental/semmle/code/java/Logging.qll @@ -30,12 +30,7 @@ class LoggingCall extends MethodAccess { or exists(RefType t, Method m | t.hasQualifiedName("android.util", "Log") | ( - m.hasName("d") or - m.hasName("e") or - m.hasName("i") or - m.hasName("v") or - m.hasName("w") or - m.hasName("wtf") + m.hasName(["d", "e", "i", "v", "w", "wtf"]) ) and ( m.getDeclaringType().getASourceSupertype*() = t or From e906ded0d1729b166dcd22701781a072f41ac2e3 Mon Sep 17 00:00:00 2001 From: james Date: Fri, 17 Sep 2021 08:48:26 +0100 Subject: [PATCH 502/741] remove java class --- ...ract-syntax-tree-classes-for-working-with-java-programs.rst | 3 --- 1 file changed, 3 deletions(-) diff --git a/docs/codeql/codeql-language-guides/abstract-syntax-tree-classes-for-working-with-java-programs.rst b/docs/codeql/codeql-language-guides/abstract-syntax-tree-classes-for-working-with-java-programs.rst index 1664b8407dc..83bce3652b9 100644 --- a/docs/codeql/codeql-language-guides/abstract-syntax-tree-classes-for-working-with-java-programs.rst +++ b/docs/codeql/codeql-language-guides/abstract-syntax-tree-classes-for-working-with-java-programs.rst @@ -252,8 +252,6 @@ Miscellaneous +=====================================+====================+============================================================================+ | ``(int) f`` | CastExpr_ | | +-------------------------------------+--------------------+----------------------------------------------------------------------------+ -| ``(23 + 42)`` | ParExpr_ | | -+-------------------------------------+--------------------+----------------------------------------------------------------------------+ | ``o instanceof String`` | InstanceOfExpr_ | | +-------------------------------------+--------------------+----------------------------------------------------------------------------+ | `Expr`_ ``?`` `Expr`_ ``:`` `Expr`_ | ConditionalExpr_ | | @@ -378,7 +376,6 @@ Further reading .. _WildcardTypeAccess: https://codeql.github.com/codeql-standard-libraries/java/semmle/code/java/Expr.qll/type.Expr$WildcardTypeAccess.html .. _FieldAccess: https://codeql.github.com/codeql-standard-libraries/java/semmle/code/java/Expr.qll/type.Expr$FieldAccess.html .. _CastExpr: https://codeql.github.com/codeql-standard-libraries/java/semmle/code/java/Expr.qll/type.Expr$CastExpr.html -.. _ParExpr: https://codeql.github.com/codeql-standard-libraries/java/semmle/code/java/Expr.qll/type.Expr$ParExpr.html .. _InstanceOfExpr: https://codeql.github.com/codeql-standard-libraries/java/semmle/code/java/Expr.qll/type.Expr$InstanceOfExpr.html .. _ConditionalExpr: https://codeql.github.com/codeql-standard-libraries/java/semmle/code/java/Expr.qll/type.Expr$ConditionalExpr.html .. _TypeLiteral: https://codeql.github.com/codeql-standard-libraries/java/semmle/code/java/Expr.qll/type.Expr$TypeLiteral.html From 823269825494f52f06cbe7c60a2193dcd02c71da Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Thu, 1 Jul 2021 13:11:01 +0200 Subject: [PATCH 503/741] C#: Migrate SQL sinks to CSV format --- .../code/csharp/dataflow/ExternalFlow.qll | 2 + .../csharp/frameworks/EntityFramework.qll | 36 +-- .../lib/semmle/code/csharp/frameworks/Sql.qll | 248 +++++++++++++++--- .../frameworks/sql/Sql1.expected | 18 +- .../test/library-tests/frameworks/sql/Sql1.ql | 13 +- .../test/library-tests/frameworks/sql/options | 3 + .../test/library-tests/frameworks/sql/sql.cs | 37 +-- 7 files changed, 260 insertions(+), 97 deletions(-) create mode 100644 csharp/ql/test/library-tests/frameworks/sql/options diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/ExternalFlow.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/ExternalFlow.qll index 3856736fc03..c7140238213 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/ExternalFlow.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/ExternalFlow.qll @@ -89,6 +89,8 @@ private module Frameworks { private import semmle.code.csharp.frameworks.System private import semmle.code.csharp.security.dataflow.XSSSinks private import semmle.code.csharp.frameworks.ServiceStack + private import semmle.code.csharp.frameworks.Sql + private import semmle.code.csharp.frameworks.EntityFramework } /** diff --git a/csharp/ql/lib/semmle/code/csharp/frameworks/EntityFramework.qll b/csharp/ql/lib/semmle/code/csharp/frameworks/EntityFramework.qll index 29939efccdb..36882d3b12e 100644 --- a/csharp/ql/lib/semmle/code/csharp/frameworks/EntityFramework.qll +++ b/csharp/ql/lib/semmle/code/csharp/frameworks/EntityFramework.qll @@ -9,6 +9,7 @@ private import semmle.code.csharp.frameworks.system.data.Entity private import semmle.code.csharp.frameworks.system.collections.Generic private import semmle.code.csharp.frameworks.Sql private import semmle.code.csharp.dataflow.FlowSummary +private import semmle.code.csharp.dataflow.ExternalFlow private import semmle.code.csharp.dataflow.internal.DataFlowPrivate as DataFlowPrivate /** @@ -234,26 +235,29 @@ module EntityFramework { override Expr getSql() { result = this.getArgumentForParameter(sqlParam) } } - /** A call to `System.Data.Entity.DbSet.SqlQuery`. */ - class SystemDataEntityDbSetSqlExpr extends SqlExpr, MethodCall { - SystemDataEntityDbSetSqlExpr() { - this.getTarget() = any(SystemDataEntity::DbSet dbSet).getSqlQueryMethod() + /** The sink method `System.Data.Entity.DbSet.SqlQuery`. */ + private class SystemDataEntityDbSetSqlQuerySinkModelCsv extends SinkModelCsv { + override predicate row(string row) { + row = + ["System.Data.Entity;DbSet;false;SqlQuery;(System.String,System.Object[]);;Argument[0];sql"] } - - override Expr getSql() { result = this.getArgumentForName("sql") } } - /** A call to a method in `System.Data.Entity.Database` that executes SQL. */ - class SystemDataEntityDatabaseSqlExpr extends SqlExpr, MethodCall { - SystemDataEntityDatabaseSqlExpr() { - exists(SystemDataEntity::Database db | - this.getTarget() = db.getSqlQueryMethod() or - this.getTarget() = db.getExecuteSqlCommandMethod() or - this.getTarget() = db.getExecuteSqlCommandAsyncMethod() - ) + /** A sink method in `System.Data.Entity.Database` that executes SQL. */ + private class SystemDataEntityDatabaseSinkModelCsv extends SinkModelCsv { + override predicate row(string row) { + row = + [ + "System.Data.Entity;Database;false;SqlQuery;(System.Type,System.String,System.Object[]);;Argument[1];sql", + "System.Data.Entity;Database;false;SqlQuery<>;(System.String,System.Object[]);;Argument[0];sql", + "System.Data.Entity;Database;false;ExecuteSqlCommand;(System.String,System.Object[]);;Argument[0];sql", + "System.Data.Entity;Database;false;ExecuteSqlCommand;(System.Data.Entity.TransactionalBehavior,System.String,System.Object[]);;Argument[1];sql", + "System.Data.Entity;Database;false;ExecuteSqlCommandAsync;(System.Data.Entity.TransactionalBehavior,System.String,System.Threading.CancellationToken,System.Object[]);;Argument[1];sql", + "System.Data.Entity;Database;false;ExecuteSqlCommandAsync;(System.String,System.Threading.CancellationToken,System.Object[]);;Argument[0];sql", + "System.Data.Entity;Database;false;ExecuteSqlCommandAsync;(System.String,System.Object[]);;Argument[0];sql", + "System.Data.Entity;Database;false;ExecuteSqlCommandAsync;(System.Data.Entity.TransactionalBehavior,System.String,System.Object[]);;Argument[1];sql" + ] } - - override Expr getSql() { result = this.getArgumentForName("sql") } } /** Holds if `t` is compatible with a DB column type. */ diff --git a/csharp/ql/lib/semmle/code/csharp/frameworks/Sql.qll b/csharp/ql/lib/semmle/code/csharp/frameworks/Sql.qll index 1a727030bea..78975527af6 100644 --- a/csharp/ql/lib/semmle/code/csharp/frameworks/Sql.qll +++ b/csharp/ql/lib/semmle/code/csharp/frameworks/Sql.qll @@ -7,6 +7,7 @@ private import semmle.code.csharp.frameworks.EntityFramework private import semmle.code.csharp.frameworks.NHibernate private import semmle.code.csharp.frameworks.Dapper private import semmle.code.csharp.dataflow.DataFlow4 +private import semmle.code.csharp.dataflow.ExternalFlow /** An expression containing a SQL command. */ abstract class SqlExpr extends Expr { @@ -28,71 +29,236 @@ class CommandTextAssignmentSqlExpr extends SqlExpr, AssignExpr { override Expr getSql() { result = this.getRValue() } } -/** A construction of an `IDbCommand` object. */ +/** A construction of an unknown `IDbCommand` object. */ class IDbCommandConstructionSqlExpr extends SqlExpr, ObjectCreation { IDbCommandConstructionSqlExpr() { exists(InstanceConstructor ic | ic = this.getTarget() | ic.getDeclaringType().getABaseType*() instanceof SystemDataIDbCommandInterface and - ic.getParameter(0).getType() instanceof StringType + ic.getParameter(0).getType() instanceof StringType and + not ic.getDeclaringType() + .hasQualifiedName([ + // Known sealed classes: + "System.Data.SqlClient.SqlCommand", "System.Data.Odbc.OdbcCommand", + "System.Data.OleDb.OleDbCommand", "System.Data.EntityClient.EntityCommand" + ]) ) } override Expr getSql() { result = this.getArgument(0) } } +/** A construction of a known `IDbCommand` object. */ +private class IDbCommandConstructionSinkModelCsv extends SinkModelCsv { + override predicate row(string row) { + row = + [ + // SqlCommand + "System.Data.SqlClient;SqlCommand;false;SqlCommand;(System.String);;Argument[0];sql", + "System.Data.SqlClient;SqlCommand;false;SqlCommand;(System.String,System.Data.SqlClient.SqlConnection);;Argument[0];sql", + "System.Data.SqlClient;SqlCommand;false;SqlCommand;(System.String,System.Data.SqlClient.SqlConnection,System.Data.SqlClient.SqlTransaction);;Argument[0];sql", + // OdbcCommand + "System.Data.Odbc;OdbcCommand;false;OdbcCommand;(System.String);;Argument[0];sql", + "System.Data.Odbc;OdbcCommand;false;OdbcCommand;(System.String,System.Data.Odbc.OdbcConnection);;Argument[0];sql", + "System.Data.Odbc;OdbcCommand;false;OdbcCommand;(System.String,System.Data.Odbc.OdbcConnection,System.Data.Odbc.OdbcTransaction);;Argument[0];sql", + // OleDbCommand + "System.Data.OleDb;OleDbCommand;false;OleDbCommand;(System.String);;Argument[0];sql", + "System.Data.OleDb;OleDbCommand;false;OleDbCommand;(System.String,System.Data.OleDb.OleDbConnection);;Argument[0];sql", + "System.Data.OleDb;OleDbCommand;false;OleDbCommand;(System.String,System.Data.OleDb.OleDbConnection,System.Data.OleDb.OleDbTransaction);;Argument[0];sql", + // EntityCommand + "System.Data.EntityClient;EntityCommand;false;EntityCommand;(System.String);;Argument[0];sql", + "System.Data.EntityClient;EntityCommand;false;EntityCommand;(System.String,System.Data.EntityClient.EntityConnection);;Argument[0];sql", + "System.Data.EntityClient;EntityCommand;false;EntityCommand;(System.String,System.Data.EntityClient.EntityConnection,System.Data.EntityClient.EntityTransaction);;Argument[0];sql" + ] + } +} + /** A construction of an `SqlDataAdapter` object. */ -class SqlDataAdapterConstructionSqlExpr extends SqlExpr, ObjectCreation { - SqlDataAdapterConstructionSqlExpr() { - exists(InstanceConstructor ic | - ic = this.getTarget() and - ic.getDeclaringType() instanceof SystemDataSqlClientSqlDataAdapterClass and - ic.getParameter(0).getType() instanceof StringType - ) +private class SqlDataAdapterConstructionSinkModelCsv extends SinkModelCsv { + override predicate row(string row) { + row = + [ + "System.Data.SqlClient;SqlDataAdapter;false;SqlDataAdapter;(System.String,System.String);;Argument[0];sql", + "System.Data.SqlClient;SqlDataAdapter;false;SqlDataAdapter;(System.String,System.Data.SqlClient.SqlConnection);;Argument[0];sql" + ] } - - override Expr getSql() { result = this.getArgument(0) } } /** A `MySql.Data.MySqlClient.MySqlHelper` method. */ -class MySqlHelperMethodCallSqlExpr extends SqlExpr, MethodCall { - MySqlHelperMethodCallSqlExpr() { - this.getQualifier().getType().(Class).hasQualifiedName("MySql.Data.MySqlClient", "MySqlHelper") - } - - override Expr getSql() { - exists(int i | - result = getArgument(i) and - this.getTarget().getParameter(i).hasName("commandText") and - this.getTarget().getParameter(i).getType() instanceof StringType - ) +private class MySqlHelperMethodCallSinkModelCsv extends SinkModelCsv { + override predicate row(string row) { + row = + [ + // ExecuteDataRow/Async + "MySql.Data.MySqlClient;MySqlHelper;false;ExecuteDataRow;(System.String,System.String,MySql.Data.MySqlClient.MySqlParameter[]);;Argument[1];sql", + "MySql.Data.MySqlClient;MySqlHelper;false;ExecuteDataRowAsync;(System.String,System.String,MySql.Data.MySqlClient.MySqlParameter[]);;Argument[1];sql", + "MySql.Data.MySqlClient;MySqlHelper;false;ExecuteDataRowAsync;(System.String,System.String,System.Threading.CancellationToken,MySql.Data.MySqlClient.MySqlParameter[]);;Argument[1];sql", + // ExecuteDataset + "MySql.Data.MySqlClient;MySqlHelper;false;ExecuteDataset;(System.String,System.String);;Argument[1];sql", + "MySql.Data.MySqlClient;MySqlHelper;false;ExecuteDataset;(System.String,System.String,MySql.Data.MySqlClient.MySqlParameter[]);;Argument[1];sql", + "MySql.Data.MySqlClient;MySqlHelper;false;ExecuteDataset;(MySql.Data.MySqlClient.MySqlConnection,System.String);;Argument[1];sql", + "MySql.Data.MySqlClient;MySqlHelper;false;ExecuteDataset;(MySql.Data.MySqlClient.MySqlConnection,System.String,MySql.Data.MySqlClient.MySqlParameter[]);;Argument[1];sql", + // ExecuteDatasetAsync + "MySql.Data.MySqlClient;MySqlHelper;false;ExecuteDatasetAsync;(System.String,System.String);;Argument[1];sql", + "MySql.Data.MySqlClient;MySqlHelper;false;ExecuteDatasetAsync;(System.String,System.String,MySql.Data.MySqlClient.MySqlParameter[]);;Argument[1];sql", + "MySql.Data.MySqlClient;MySqlHelper;false;ExecuteDatasetAsync;(System.String,System.String,System.Threading.CancellationToken);;Argument[1];sql", + "MySql.Data.MySqlClient;MySqlHelper;false;ExecuteDatasetAsync;(System.String,System.String,System.Threading.CancellationToken,MySql.Data.MySqlClient.MySqlParameter[]);;Argument[1];sql", + "MySql.Data.MySqlClient;MySqlHelper;false;ExecuteDatasetAsync;(MySql.Data.MySqlClient.MySqlConnection,System.String);;Argument[1];sql", + "MySql.Data.MySqlClient;MySqlHelper;false;ExecuteDatasetAsync;(MySql.Data.MySqlClient.MySqlConnection,System.String,MySql.Data.MySqlClient.MySqlParameter[]);;Argument[1];sql", + "MySql.Data.MySqlClient;MySqlHelper;false;ExecuteDatasetAsync;(MySql.Data.MySqlClient.MySqlConnection,System.String,System.Threading.CancellationToken);;Argument[1];sql", + "MySql.Data.MySqlClient;MySqlHelper;false;ExecuteDatasetAsync;(MySql.Data.MySqlClient.MySqlConnection,System.String,System.Threading.CancellationToken,MySql.Data.MySqlClient.MySqlParameter[]);;Argument[1];sql", + // ExecuteNonQuery + "MySql.Data.MySqlClient;MySqlHelper;false;ExecuteNonQuery;(System.String,System.String,MySql.Data.MySqlClient.MySqlParameter[]);;Argument[1];sql", + "MySql.Data.MySqlClient;MySqlHelper;false;ExecuteNonQuery;(MySql.Data.MySqlClient.MySqlConnection,System.String,MySql.Data.MySqlClient.MySqlParameter[]);;Argument[1];sql", + // ExecuteNonQueryAsync + "MySql.Data.MySqlClient;MySqlHelper;false;ExecuteNonQueryAsync;(System.String,System.String,MySql.Data.MySqlClient.MySqlParameter[]);;Argument[1];sql", + "MySql.Data.MySqlClient;MySqlHelper;false;ExecuteNonQueryAsync;(System.String,System.String,System.Threading.CancellationToken,MySql.Data.MySqlClient.MySqlParameter[]);;Argument[1];sql", + "MySql.Data.MySqlClient;MySqlHelper;false;ExecuteNonQueryAsync;(MySql.Data.MySqlClient.MySqlConnection,System.String,MySql.Data.MySqlClient.MySqlParameter[]);;Argument[1];sql", + "MySql.Data.MySqlClient;MySqlHelper;false;ExecuteNonQueryAsync;(MySql.Data.MySqlClient.MySqlConnection,System.String,System.Threading.CancellationToken,MySql.Data.MySqlClient.MySqlParameter[]);;Argument[1];sql", + // ExecuteReader + "MySql.Data.MySqlClient;MySqlHelper;false;ExecuteReader;(System.String,System.String);;Argument[1];sql", + "MySql.Data.MySqlClient;MySqlHelper;false;ExecuteReader;(System.String,System.String,MySql.Data.MySqlClient.MySqlParameter[]);;Argument[1];sql", + "MySql.Data.MySqlClient;MySqlHelper;false;ExecuteReader;(MySql.Data.MySqlClient.MySqlConnection,System.String);;Argument[1];sql", + "MySql.Data.MySqlClient;MySqlHelper;false;ExecuteReader;(MySql.Data.MySqlClient.MySqlConnection,System.String,MySql.Data.MySqlClient.MySqlParameter[]);;Argument[1];sql", + // ExecuteReaderAsync + "MySql.Data.MySqlClient;MySqlHelper;false;ExecuteReaderAsync;(System.String,System.String);;Argument[1];sql", + "MySql.Data.MySqlClient;MySqlHelper;false;ExecuteReaderAsync;(System.String,System.String,MySql.Data.MySqlClient.MySqlParameter[]);;Argument[1];sql", + "MySql.Data.MySqlClient;MySqlHelper;false;ExecuteReaderAsync;(System.String,System.String,System.Threading.CancellationToken);;Argument[1];sql", + "MySql.Data.MySqlClient;MySqlHelper;false;ExecuteReaderAsync;(System.String,System.String,System.Threading.CancellationToken,MySql.Data.MySqlClient.MySqlParameter[]);;Argument[1];sql", + "MySql.Data.MySqlClient;MySqlHelper;false;ExecuteReaderAsync;(MySql.Data.MySqlClient.MySqlConnection,System.String);;Argument[1];sql", + "MySql.Data.MySqlClient;MySqlHelper;false;ExecuteReaderAsync;(MySql.Data.MySqlClient.MySqlConnection,System.String,MySql.Data.MySqlClient.MySqlParameter[]);;Argument[1];sql", + "MySql.Data.MySqlClient;MySqlHelper;false;ExecuteReaderAsync;(MySql.Data.MySqlClient.MySqlConnection,System.String,System.Threading.CancellationToken);;Argument[1];sql", + "MySql.Data.MySqlClient;MySqlHelper;false;ExecuteReaderAsync;(MySql.Data.MySqlClient.MySqlConnection,System.String,System.Threading.CancellationToken,MySql.Data.MySqlClient.MySqlParameter[]);;Argument[1];sql", + // ExecuteScalar + "MySql.Data.MySqlClient;MySqlHelper;false;ExecuteScalar;(System.String,System.String);;Argument[1];sql", + "MySql.Data.MySqlClient;MySqlHelper;false;ExecuteScalar;(System.String,System.String,MySql.Data.MySqlClient.MySqlParameter[]);;Argument[1];sql", + "MySql.Data.MySqlClient;MySqlHelper;false;ExecuteScalar;(MySql.Data.MySqlClient.MySqlConnection,System.String);;Argument[1];sql", + "MySql.Data.MySqlClient;MySqlHelper;false;ExecuteScalar;(MySql.Data.MySqlClient.MySqlConnection,System.String,MySql.Data.MySqlClient.MySqlParameter[]);;Argument[1];sql", + // ExecuteScalarAsync + "MySql.Data.MySqlClient;MySqlHelper;false;ExecuteScalarAsync;(System.String,System.String);;Argument[1];sql", + "MySql.Data.MySqlClient;MySqlHelper;false;ExecuteScalarAsync;(System.String,System.String,MySql.Data.MySqlClient.MySqlParameter[]);;Argument[1];sql", + "MySql.Data.MySqlClient;MySqlHelper;false;ExecuteScalarAsync;(System.String,System.String,System.Threading.CancellationToken);;Argument[1];sql", + "MySql.Data.MySqlClient;MySqlHelper;false;ExecuteScalarAsync;(System.String,System.String,System.Threading.CancellationToken,MySql.Data.MySqlClient.MySqlParameter[]);;Argument[1];sql", + "MySql.Data.MySqlClient;MySqlHelper;false;ExecuteScalarAsync;(MySql.Data.MySqlClient.MySqlConnection,System.String);;Argument[1];sql", + "MySql.Data.MySqlClient;MySqlHelper;false;ExecuteScalarAsync;(MySql.Data.MySqlClient.MySqlConnection,System.String,MySql.Data.MySqlClient.MySqlParameter[]);;Argument[1];sql", + "MySql.Data.MySqlClient;MySqlHelper;false;ExecuteScalarAsync;(MySql.Data.MySqlClient.MySqlConnection,System.String,System.Threading.CancellationToken);;Argument[1];sql", + "MySql.Data.MySqlClient;MySqlHelper;false;ExecuteScalarAsync;(MySql.Data.MySqlClient.MySqlConnection,System.String,System.Threading.CancellationToken,MySql.Data.MySqlClient.MySqlParameter[]);;Argument[1];sql", + // UpdateDataset/Async + "MySql.Data.MySqlClient;MySqlHelper;false;UpdateDataset;(System.String,System.String,System.Data.DataSet,System.String);;Argument[1];sql", + "MySql.Data.MySqlClient;MySqlHelper;false;UpdateDatasetAsync;(System.String,System.String,System.Data.DataSet,System.String);;Argument[1];sql", + "MySql.Data.MySqlClient;MySqlHelper;false;UpdateDatasetAsync;(System.String,System.String,System.Data.DataSet,System.String,System.Threading.CancellationToken);;Argument[1];sql" + ] } } /** A `Microsoft.ApplicationBlocks.Data.SqlHelper` method. */ -class MicrosoftSqlHelperMethodCallSqlExpr extends SqlExpr, MethodCall { - MicrosoftSqlHelperMethodCallSqlExpr() { - this.getQualifier() - .getType() - .(Class) - .hasQualifiedName("Microsoft.ApplicationBlocks.Data", "SqlHelper") - } - - override Expr getSql() { - exists(int i | - result = getArgument(i) and - this.getTarget().getParameter(i).hasName("commandText") and - this.getTarget().getParameter(i).getType() instanceof StringType - ) +private class MicrosoftSqlHelperSinkModelCsv extends SinkModelCsv { + override predicate row(string row) { + row = + [ + // ExecuteNonQuery + "Microsoft.ApplicationBlocks.Data;SqlHelper;false;ExecuteNonQuery;(System.String,System.Data.CommandType,System.String);;Argument[2];sql", + "Microsoft.ApplicationBlocks.Data;SqlHelper;false;ExecuteNonQuery;(System.String,System.Data.CommandType,System.String,System.Data.SqlClient.SqlParameter[]);;Argument[2];sql", + "Microsoft.ApplicationBlocks.Data;SqlHelper;false;ExecuteNonQuery;(System.Data.SqlClient.SqlConnection,System.Data.CommandType,System.String);;Argument[2];sql", + "Microsoft.ApplicationBlocks.Data;SqlHelper;false;ExecuteNonQuery;(System.Data.SqlClient.SqlConnection,System.Data.CommandType,System.String,System.Data.SqlClient.SqlParameter[]);;Argument[2];sql", + "Microsoft.ApplicationBlocks.Data;SqlHelper;false;ExecuteNonQuery;(System.Data.SqlClient.SqlTransaction,System.Data.CommandType,System.String);;Argument[2];sql", + "Microsoft.ApplicationBlocks.Data;SqlHelper;false;ExecuteNonQuery;(System.Data.SqlClient.SqlTransaction,System.Data.CommandType,System.String,System.Data.SqlClient.SqlParameter[]);;Argument[2];sql", + // ExecuteDataset + "Microsoft.ApplicationBlocks.Data;SqlHelper;false;ExecuteDataset;(System.String,System.Data.CommandType,System.String);;Argument[2];sql", + "Microsoft.ApplicationBlocks.Data;SqlHelper;false;ExecuteDataset;(System.String,System.Data.CommandType,System.String,System.Data.SqlClient.SqlParameter[]);;Argument[2];sql", + "Microsoft.ApplicationBlocks.Data;SqlHelper;false;ExecuteDataset;(System.Data.SqlClient.SqlConnection,System.Data.CommandType,System.String);;Argument[2];sql", + "Microsoft.ApplicationBlocks.Data;SqlHelper;false;ExecuteDataset;(System.Data.SqlClient.SqlConnection,System.Data.CommandType,System.String,System.Data.SqlClient.SqlParameter[]);;Argument[2];sql", + "Microsoft.ApplicationBlocks.Data;SqlHelper;false;ExecuteDataset;(System.Data.SqlClient.SqlTransaction,System.Data.CommandType,System.String);;Argument[2];sql", + "Microsoft.ApplicationBlocks.Data;SqlHelper;false;ExecuteDataset;(System.Data.SqlClient.SqlTransaction,System.Data.CommandType,System.String,System.Data.SqlClient.SqlParameter[]);;Argument[2];sql", + // ExecuteReader + "Microsoft.ApplicationBlocks.Data;SqlHelper;false;ExecuteReader;(System.String,System.Data.CommandType,System.String);;Argument[2];sql", + "Microsoft.ApplicationBlocks.Data;SqlHelper;false;ExecuteReader;(System.String,System.Data.CommandType,System.String,System.Data.SqlClient.SqlParameter[]);;Argument[2];sql", + "Microsoft.ApplicationBlocks.Data;SqlHelper;false;ExecuteReader;(System.Data.SqlClient.SqlConnection,System.Data.CommandType,System.String);;Argument[2];sql", + "Microsoft.ApplicationBlocks.Data;SqlHelper;false;ExecuteReader;(System.Data.SqlClient.SqlConnection,System.Data.CommandType,System.String,System.Data.SqlClient.SqlParameter[]);;Argument[2];sql", + "Microsoft.ApplicationBlocks.Data;SqlHelper;false;ExecuteReader;(System.Data.SqlClient.SqlTransaction,System.Data.CommandType,System.String);;Argument[2];sql", + "Microsoft.ApplicationBlocks.Data;SqlHelper;false;ExecuteReader;(System.Data.SqlClient.SqlTransaction,System.Data.CommandType,System.String,System.Data.SqlClient.SqlParameter[]);;Argument[2];sql", + // ExecuteScalar + "Microsoft.ApplicationBlocks.Data;SqlHelper;false;ExecuteScalar;(System.String,System.Data.CommandType,System.String);;Argument[2];sql", + "Microsoft.ApplicationBlocks.Data;SqlHelper;false;ExecuteScalar;(System.String,System.Data.CommandType,System.String,System.Data.SqlClient.SqlParameter[]);;Argument[2];sql", + "Microsoft.ApplicationBlocks.Data;SqlHelper;false;ExecuteScalar;(System.Data.SqlClient.SqlConnection,System.Data.CommandType,System.String);;Argument[2];sql", + "Microsoft.ApplicationBlocks.Data;SqlHelper;false;ExecuteScalar;(System.Data.SqlClient.SqlConnection,System.Data.CommandType,System.String,System.Data.SqlClient.SqlParameter[]);;Argument[2];sql", + "Microsoft.ApplicationBlocks.Data;SqlHelper;false;ExecuteScalar;(System.Data.SqlClient.SqlTransaction,System.Data.CommandType,System.String);;Argument[2];sql", + "Microsoft.ApplicationBlocks.Data;SqlHelper;false;ExecuteScalar;(System.Data.SqlClient.SqlTransaction,System.Data.CommandType,System.String,System.Data.SqlClient.SqlParameter[]);;Argument[2];sql", + // ExecuteXmlReader + "Microsoft.ApplicationBlocks.Data;SqlHelper;false;ExecuteXmlReader;(System.Data.SqlClient.SqlConnection,System.Data.CommandType,System.String);;Argument[2];sql", + "Microsoft.ApplicationBlocks.Data;SqlHelper;false;ExecuteXmlReader;(System.Data.SqlClient.SqlConnection,System.Data.CommandType,System.String,System.Data.SqlClient.SqlParameter[]);;Argument[2];sql", + "Microsoft.ApplicationBlocks.Data;SqlHelper;false;ExecuteXmlReader;(System.Data.SqlClient.SqlTransaction,System.Data.CommandType,System.String);;Argument[2];sql", + "Microsoft.ApplicationBlocks.Data;SqlHelper;false;ExecuteXmlReader;(System.Data.SqlClient.SqlTransaction,System.Data.CommandType,System.String,System.Data.SqlClient.SqlParameter[]);;Argument[2];sql" + ] } } /** A `Dapper.SqlMapper` method that is taking a SQL string argument. */ -class DapperSqlMethodCallSqlExpr extends SqlExpr, MethodCall { - DapperSqlMethodCallSqlExpr() { - this.getTarget() = any(Dapper::SqlMapperClass c).getAQueryMethod() +private class DapperSqlMapperSinkModelCsv extends SinkModelCsv { + override predicate row(string row) { + row = + [ + // Execute* + "Dapper;SqlMapper;false;Execute;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[1];sql", + "Dapper;SqlMapper;false;ExecuteAsync;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[1];sql", + "Dapper;SqlMapper;false;ExecuteScalar;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[1];sql", + "Dapper;SqlMapper;false;ExecuteScalarAsync;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[1];sql", + "Dapper;SqlMapper;false;ExecuteScalar<>;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[1];sql", + "Dapper;SqlMapper;false;ExecuteScalarAsync<>;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[1];sql", + "Dapper;SqlMapper;false;ExecuteReader;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[1];sql", + "Dapper;SqlMapper;false;ExecuteReaderAsync;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[1];sql", + "Dapper;SqlMapper;false;ExecuteReaderAsync;(System.Data.DbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[1];sql", + // Query* + "Dapper;SqlMapper;false;Query;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Boolean,System.Nullable,System.Nullable);;Argument[1];sql", + "Dapper;SqlMapper;false;QueryAsync;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[1];sql", + "Dapper;SqlMapper;false;Query<>;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Boolean,System.Nullable,System.Nullable);;Argument[1];sql", + "Dapper;SqlMapper;false;QueryAsync<>;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[1];sql", + "Dapper;SqlMapper;false;QueryMultiple;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[1];sql", + "Dapper;SqlMapper;false;QueryMultipleAsync;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[1];sql", + "Dapper;SqlMapper;false;QueryFirst;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[1];sql", + "Dapper;SqlMapper;false;QueryFirstAsync;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[1];sql", + "Dapper;SqlMapper;false;QueryFirst<>;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[1];sql", + "Dapper;SqlMapper;false;QueryFirstAsync<>;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[1];sql", + "Dapper;SqlMapper;false;QueryFirstOrDefault;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[1];sql", + "Dapper;SqlMapper;false;QueryFirstOrDefaultAsync;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[1];sql", + "Dapper;SqlMapper;false;QueryFirstOrDefault<>;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[1];sql", + "Dapper;SqlMapper;false;QueryFirstOrDefaultAsync<>;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[1];sql", + "Dapper;SqlMapper;false;QuerySingle;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[1];sql", + "Dapper;SqlMapper;false;QuerySingleAsync;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[1];sql", + "Dapper;SqlMapper;false;QuerySingle<>;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[1];sql", + "Dapper;SqlMapper;false;QuerySingleAsync<>;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[1];sql", + "Dapper;SqlMapper;false;QuerySingleOrDefault;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[1];sql", + "Dapper;SqlMapper;false;QuerySingleOrDefaultAsync;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[1];sql", + "Dapper;SqlMapper;false;QuerySingleOrDefault<>;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[1];sql", + "Dapper;SqlMapper;false;QuerySingleOrDefaultAsync<>;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[1];sql", + // Query* with System.Type parameter + "Dapper;SqlMapper;false;Query;(System.Data.IDbConnection,System.Type,System.String,System.Object,System.Data.IDbTransaction,System.Boolean,System.Nullable,System.Nullable);;Argument[2];sql", + "Dapper;SqlMapper;false;QueryAsync;(System.Data.IDbConnection,System.Type,System.String,System.Object,System.Data.IDbTransaction,System.Boolean,System.Nullable,System.Nullable);;Argument[2];sql", + "Dapper;SqlMapper;false;QueryFirst;(System.Data.IDbConnection,System.Type,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[2];sql", + "Dapper;SqlMapper;false;QueryFirstAsync;(System.Data.IDbConnection,System.Type,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[2];sql", + "Dapper;SqlMapper;false;QueryFirstOrDefault;(System.Data.IDbConnection,System.Type,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[2];sql", + "Dapper;SqlMapper;false;QueryFirstOrDefaultAsync;(System.Data.IDbConnection,System.Type,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[2];sql", + "Dapper;SqlMapper;false;QuerySingle;(System.Data.IDbConnection,System.Type,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[2];sql", + "Dapper;SqlMapper;false;QuerySingleAsync;(System.Data.IDbConnection,System.Type,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[2];sql", + "Dapper;SqlMapper;false;QuerySingleOrDefault;(System.Data.IDbConnection,System.Type,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[2];sql", + "Dapper;SqlMapper;false;QuerySingleOrDefaultAsync;(System.Data.IDbConnection,System.Type,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[2];sql", + // Query with multiple type parameters + "Dapper;SqlMapper;false;Query<,,>;(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable);;Argument[1];sql", + "Dapper;SqlMapper;false;QueryAsync<,,>;(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable);;Argument[1];sql", + "Dapper;SqlMapper;false;Query<,,,>;(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable);;Argument[1];sql", + "Dapper;SqlMapper;false;QueryAsync<,,,>;(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable);;Argument[1];sql", + "Dapper;SqlMapper;false;Query<,,,,>;(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable);;Argument[1];sql", + "Dapper;SqlMapper;false;QueryAsync<,,,,>;(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable);;Argument[1];sql", + "Dapper;SqlMapper;false;Query<,,,,,>;(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable);;Argument[1];sql", + "Dapper;SqlMapper;false;QueryAsync<,,,,,>;(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable);;Argument[1];sql", + "Dapper;SqlMapper;false;Query<,,,,,,>;(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable);;Argument[1];sql", + "Dapper;SqlMapper;false;QueryAsync<,,,,,,>;(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable);;Argument[1];sql", + "Dapper;SqlMapper;false;Query<,,,,,,,>;(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable);;Argument[1];sql", + "Dapper;SqlMapper;false;QueryAsync<,,,,,,,>;(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable);;Argument[1];sql", + // Query with System.Type[] parameter + "Dapper;SqlMapper;false;Query<>;(System.Data.IDbConnection,System.String,System.Type[],System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable);;Argument[1];sql", + "Dapper;SqlMapper;false;QueryAsync<>;(System.Data.IDbConnection,System.String,System.Type[],System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable);;Argument[1];sql" + ] } - - override Expr getSql() { result = this.getArgumentForName("sql") } } /** A `Dapper.CommandDefinition` creation that is taking a SQL string argument and is passed to a `Dapper.SqlMapper` method. */ diff --git a/csharp/ql/test/library-tests/frameworks/sql/Sql1.expected b/csharp/ql/test/library-tests/frameworks/sql/Sql1.expected index 7bab6404cbe..84f522a4367 100644 --- a/csharp/ql/test/library-tests/frameworks/sql/Sql1.expected +++ b/csharp/ql/test/library-tests/frameworks/sql/Sql1.expected @@ -1,8 +1,10 @@ -| sql.cs:66:46:66:65 | object creation of type SqlCommand | sql.cs:66:61:66:64 | access to parameter text | -| sql.cs:67:23:67:44 | object creation of type MySqlCommand | sql.cs:67:40:67:43 | access to parameter text | -| sql.cs:68:13:68:38 | ... = ... | sql.cs:68:35:68:38 | access to parameter text | -| sql.cs:69:13:69:34 | object creation of type MySqlCommand | sql.cs:69:30:69:33 | access to parameter text | -| sql.cs:69:13:69:53 | ... = ... | sql.cs:69:50:69:53 | access to parameter text | -| sql.cs:70:13:70:36 | object creation of type SqlDataAdapter | sql.cs:70:32:70:35 | access to parameter text | -| sql.cs:71:13:71:47 | call to method ExecuteScalar | sql.cs:71:43:71:46 | access to parameter text | -| sql.cs:72:13:72:45 | call to method ExecuteScalar | sql.cs:72:41:72:44 | access to parameter text | +sqlExpressions +| sql.cs:44:23:44:44 | object creation of type MySqlCommand | sql.cs:44:40:44:43 | access to parameter text | +| sql.cs:45:13:45:38 | ... = ... | sql.cs:45:35:45:38 | access to parameter text | +| sql.cs:46:13:46:34 | object creation of type MySqlCommand | sql.cs:46:30:46:33 | access to parameter text | +| sql.cs:46:13:46:53 | ... = ... | sql.cs:46:50:46:53 | access to parameter text | +sqlCsvSinks +| sql.cs:43:46:43:65 | object creation of type SqlCommand | sql.cs:43:61:43:64 | access to parameter text | +| sql.cs:47:13:47:42 | object creation of type SqlDataAdapter | sql.cs:47:32:47:35 | access to parameter text | +| sql.cs:48:13:48:47 | call to method ExecuteScalar | sql.cs:48:43:48:46 | access to parameter text | +| sql.cs:49:13:49:75 | call to method ExecuteScalar | sql.cs:49:71:49:74 | access to parameter text | diff --git a/csharp/ql/test/library-tests/frameworks/sql/Sql1.ql b/csharp/ql/test/library-tests/frameworks/sql/Sql1.ql index d81208b26a0..9f25014662f 100644 --- a/csharp/ql/test/library-tests/frameworks/sql/Sql1.ql +++ b/csharp/ql/test/library-tests/frameworks/sql/Sql1.ql @@ -1,4 +1,13 @@ import semmle.code.csharp.frameworks.Sql +import semmle.code.csharp.dataflow.ExternalFlow +import semmle.code.csharp.dataflow.internal.DataFlowPublic -from SqlExpr se -select se, se.getSql() +query predicate sqlExpressions(SqlExpr se, Expr e) { se.getSql() = e } + +query predicate sqlCsvSinks(Element p, Expr e) { + p = e.getParent() and + exists(Node n | + sinkNode(n, "sql") and + n.asExpr() = e + ) +} diff --git a/csharp/ql/test/library-tests/frameworks/sql/options b/csharp/ql/test/library-tests/frameworks/sql/options new file mode 100644 index 00000000000..38870455fc8 --- /dev/null +++ b/csharp/ql/test/library-tests/frameworks/sql/options @@ -0,0 +1,3 @@ +semmle-extractor-options: ${testdir}/../../../resources/stubs/System.Data.cs +semmle-extractor-options: ${testdir}/../../../resources/stubs/_frameworks/Microsoft.NETCore.App/System.ComponentModel.cs +semmle-extractor-options: /r:System.ComponentModel.TypeConverter.dll /r:System.Data.Common.dll diff --git a/csharp/ql/test/library-tests/frameworks/sql/sql.cs b/csharp/ql/test/library-tests/frameworks/sql/sql.cs index e6773640d42..f495268034f 100644 --- a/csharp/ql/test/library-tests/frameworks/sql/sql.cs +++ b/csharp/ql/test/library-tests/frameworks/sql/sql.cs @@ -1,32 +1,5 @@ using System; -namespace System.Data -{ - public interface IDbCommand - { - string CommandText { get; set; } - } - - public interface IDbDataAdapter { } -} - -namespace System.Data.SqlClient -{ - public class SqlCommand : IDbCommand - { - public SqlCommand(string commandText) { } - - string IDbCommand.CommandText { get; set; } - } - - public class SqlDataAdapter : IDbDataAdapter - { - public SqlDataAdapter() { } - - public SqlDataAdapter(string sql) { } - } -} - namespace MySql.Data.MySqlClient { using System.Data; @@ -36,6 +9,10 @@ namespace MySql.Data.MySqlClient public MySqlCommand(string commandText) { } public string CommandText { get; set; } + + public IDataReader ExecuteReader() => throw null; + public CommandType CommandType { get; set; } + public IDataParameterCollection Parameters { get; set; } } public class MySqlHelper @@ -48,7 +25,7 @@ namespace Microsoft.ApplicationBlocks.Data { class SqlHelper { - public static object ExecuteScalar(string connectionString, string commandText) { return null; } + public static object ExecuteScalar(string connectionString, System.Data.CommandType ct, string commandText) { return null; } } } @@ -67,9 +44,9 @@ namespace SqlClientTests command = new MySqlCommand(text); command.CommandText = text; new MySqlCommand(text).CommandText = text; - new SqlDataAdapter(text); + new SqlDataAdapter(text, null); MySqlHelper.ExecuteScalar("", text); - SqlHelper.ExecuteScalar("", text); + SqlHelper.ExecuteScalar("", System.Data.CommandType.Text, text); } } } From a3de94e868aa89c16ef36809f6b1a3446bc50eec Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Mon, 13 Sep 2021 15:50:10 +0100 Subject: [PATCH 504/741] C++: Assign precision and severity; medium for now, since there are FPs in SAMATE Juliet. --- cpp/ql/src/Security/CWE/CWE-311/CleartextTransmission.ql | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cpp/ql/src/Security/CWE/CWE-311/CleartextTransmission.ql b/cpp/ql/src/Security/CWE/CWE-311/CleartextTransmission.ql index 123c7437990..26cd2d89e11 100644 --- a/cpp/ql/src/Security/CWE/CWE-311/CleartextTransmission.ql +++ b/cpp/ql/src/Security/CWE/CWE-311/CleartextTransmission.ql @@ -4,8 +4,8 @@ * cleartext can expose it to an attacker. * @kind path-problem * @problem.severity warning - * @security-severity 7.5 TODO - * @precision high TODO + * @security-severity 7.5 + * @precision medium * @id cpp/cleartext-transmission * @tags security * external/cwe/cwe-319 From 0bff1b4afba84c730390a576c3577fab12227249 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Fri, 17 Sep 2021 11:08:09 +0100 Subject: [PATCH 505/741] Implement get methods --- .../guava/generated/collect/Test.java | 608 +++++++++--------- .../guava/generated/collect/test.ql | 53 +- 2 files changed, 312 insertions(+), 349 deletions(-) diff --git a/java/ql/test/library-tests/frameworks/guava/generated/collect/Test.java b/java/ql/test/library-tests/frameworks/guava/generated/collect/Test.java index 98d24d6ecfc..273886a7613 100644 --- a/java/ql/test/library-tests/frameworks/guava/generated/collect/Test.java +++ b/java/ql/test/library-tests/frameworks/guava/generated/collect/Test.java @@ -91,14 +91,28 @@ import java.util.concurrent.PriorityBlockingQueue; // Test case generated by GenerateFlowTestCase.ql public class Test { + C getTable_columnKey(ImmutableTable.Builder b) { return getTable_columnKey(b.build()); } + C getTable_columnKey(Table t) { return t.columnKeySet().iterator().next(); } + K getMapKey(ImmutableMap.Builder b) { return getMapKey(b.build()); } + K getMapKey(ImmutableMultimap.Builder b) { return getMapKey(b.build()); } K getMapKey(Map map) { return map.keySet().iterator().next(); } + K getMapKey(Multimap map) { return map.keySet().iterator().next(); } Map.Entry newEntryWithMapKey(K key) { return Map.of(key, null).entrySet().iterator().next(); } + R getTable_rowKey(ImmutableTable.Builder b) { return getTable_rowKey(b.build()); } + R getTable_rowKey(Table t) { return t.rowKeySet().iterator().next(); } T getArrayElement(T[] array) { return array[0]; } T getElement(Enumeration it) { return it.nextElement(); } + T getElement(ImmutableCollection.Builder b) { return getElement(b.build()); } T getElement(Iterable it) { return it.iterator().next(); } T getElement(Iterator it) { return it.next(); } + T getElement(Optional o) { return o.get(); } Map.Entry newEntryWithMapValue(V value) { return Map.of(null, value).entrySet().iterator().next(); } + V getMapValue(ImmutableMap.Builder b) { return getMapValue(b.build()); } + V getMapValue(ImmutableMultimap.Builder b) { return getMapValue(b.build()); } + V getMapValue(ImmutableTable.Builder b) { return getMapValue(b.build()); } V getMapValue(Map map) { return map.get(null); } + V getMapValue(Multimap map) { return map.values().iterator().next(); } + V getMapValue(Table t) { return t.values().iterator().next(); } Object getElementDefault(Object container) { return null; } Object getMapDifference_leftDefault(Object container) { return null; } Object getMapDifference_rightDefault(Object container) { return null; } @@ -123,28 +137,28 @@ public class Test { ArrayListMultimap out = null; Multimap in = (Multimap)newWithMapKeyDefault(source()); out = ArrayListMultimap.create(in); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ArrayListMultimap;true;create;(Multimap);;MapValue of Argument[0];MapValue of ReturnValue;value" ArrayListMultimap out = null; Multimap in = (Multimap)newWithMapValueDefault(source()); out = ArrayListMultimap.create(in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ArrayTable;true;create;(Iterable,Iterable);;Element of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value" ArrayTable out = null; Iterable in = (Iterable)List.of(source()); out = ArrayTable.create(in, null); - sink(getTable_rowKeyDefault(out)); // $ hasValueFlow + sink(getTable_rowKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ArrayTable;true;create;(Iterable,Iterable);;Element of Argument[1];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value" ArrayTable out = null; Iterable in = (Iterable)List.of(source()); out = ArrayTable.create(null, in); - sink(getTable_columnKeyDefault(out)); // $ hasValueFlow + sink(getTable_columnKey(out)); // $ hasValueFlow } { // "com.google.common.collect;BiMap;true;forcePut;(Object,Object);;Argument[0];MapKey of Argument[-1];value" @@ -305,21 +319,21 @@ public class Test { HashBasedTable out = null; Table in = (Table)newWithMapValueDefault(source()); out = HashBasedTable.create(in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;HashBasedTable;true;create;(Table);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value" HashBasedTable out = null; Table in = (Table)newWithTable_columnKeyDefault(source()); out = HashBasedTable.create(in); - sink(getTable_columnKeyDefault(out)); // $ hasValueFlow + sink(getTable_columnKey(out)); // $ hasValueFlow } { // "com.google.common.collect;HashBasedTable;true;create;(Table);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value" HashBasedTable out = null; Table in = (Table)newWithTable_rowKeyDefault(source()); out = HashBasedTable.create(in); - sink(getTable_rowKeyDefault(out)); // $ hasValueFlow + sink(getTable_rowKey(out)); // $ hasValueFlow } { // "com.google.common.collect;HashBiMap;true;create;(Map);;MapKey of Argument[0];MapKey of ReturnValue;value" @@ -340,14 +354,14 @@ public class Test { HashMultimap out = null; Multimap in = (Multimap)newWithMapKeyDefault(source()); out = HashMultimap.create(in); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;HashMultimap;true;create;(Multimap);;MapValue of Argument[0];MapValue of ReturnValue;value" HashMultimap out = null; Multimap in = (Multimap)newWithMapValueDefault(source()); out = HashMultimap.create(in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;HashMultiset;true;create;(Iterable);;Element of Argument[0];Element of ReturnValue;value" @@ -389,84 +403,84 @@ public class Test { ImmutableSortedSet.Builder out = null; Object in = (Object)source(); out.add(in); - sink(getElementDefault(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;(Object);;Argument[0];Element of Argument[-1];value" ImmutableSortedMultiset.Builder out = null; Object in = (Object)source(); out.add(in); - sink(getElementDefault(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;(Object);;Argument[0];Element of Argument[-1];value" ImmutableSet.Builder out = null; Object in = (Object)source(); out.add(in); - sink(getElementDefault(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;(Object);;Argument[0];Element of Argument[-1];value" ImmutableMultiset.Builder out = null; Object in = (Object)source(); out.add(in); - sink(getElementDefault(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;(Object);;Argument[0];Element of Argument[-1];value" ImmutableList.Builder out = null; Object in = (Object)source(); out.add(in); - sink(getElementDefault(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;(Object);;Argument[0];Element of Argument[-1];value" ImmutableCollection.Builder out = null; Object in = (Object)source(); out.add(in); - sink(getElementDefault(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;(Object[]);;ArrayElement of Argument[0];Element of Argument[-1];value" ImmutableSortedSet.Builder out = null; Object[] in = (Object[])new Object[]{source()}; out.add(in); - sink(getElementDefault(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;(Object[]);;ArrayElement of Argument[0];Element of Argument[-1];value" ImmutableSortedMultiset.Builder out = null; Object[] in = (Object[])new Object[]{source()}; out.add(in); - sink(getElementDefault(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;(Object[]);;ArrayElement of Argument[0];Element of Argument[-1];value" ImmutableSet.Builder out = null; Object[] in = (Object[])new Object[]{source()}; out.add(in); - sink(getElementDefault(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;(Object[]);;ArrayElement of Argument[0];Element of Argument[-1];value" ImmutableMultiset.Builder out = null; Object[] in = (Object[])new Object[]{source()}; out.add(in); - sink(getElementDefault(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;(Object[]);;ArrayElement of Argument[0];Element of Argument[-1];value" ImmutableList.Builder out = null; Object[] in = (Object[])new Object[]{source()}; out.add(in); - sink(getElementDefault(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;(Object[]);;ArrayElement of Argument[0];Element of Argument[-1];value" ImmutableCollection.Builder out = null; Object[] in = (Object[])new Object[]{source()}; out.add(in); - sink(getElementDefault(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;add;;;Argument[-1];ReturnValue;value" @@ -557,84 +571,84 @@ public class Test { ImmutableSortedSet.Builder out = null; Iterable in = (Iterable)List.of(source()); out.addAll(in); - sink(getElementDefault(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;(Iterable);;Element of Argument[0];Element of Argument[-1];value" ImmutableSortedMultiset.Builder out = null; Iterable in = (Iterable)List.of(source()); out.addAll(in); - sink(getElementDefault(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;(Iterable);;Element of Argument[0];Element of Argument[-1];value" ImmutableSet.Builder out = null; Iterable in = (Iterable)List.of(source()); out.addAll(in); - sink(getElementDefault(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;(Iterable);;Element of Argument[0];Element of Argument[-1];value" ImmutableMultiset.Builder out = null; Iterable in = (Iterable)List.of(source()); out.addAll(in); - sink(getElementDefault(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;(Iterable);;Element of Argument[0];Element of Argument[-1];value" ImmutableList.Builder out = null; Iterable in = (Iterable)List.of(source()); out.addAll(in); - sink(getElementDefault(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;(Iterable);;Element of Argument[0];Element of Argument[-1];value" ImmutableCollection.Builder out = null; Iterable in = (Iterable)List.of(source()); out.addAll(in); - sink(getElementDefault(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;(Iterator);;Element of Argument[0];Element of Argument[-1];value" ImmutableSortedSet.Builder out = null; Iterator in = (Iterator)newWithElementDefault(source()); out.addAll(in); - sink(getElementDefault(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;(Iterator);;Element of Argument[0];Element of Argument[-1];value" ImmutableSortedMultiset.Builder out = null; Iterator in = (Iterator)newWithElementDefault(source()); out.addAll(in); - sink(getElementDefault(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;(Iterator);;Element of Argument[0];Element of Argument[-1];value" ImmutableSet.Builder out = null; Iterator in = (Iterator)newWithElementDefault(source()); out.addAll(in); - sink(getElementDefault(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;(Iterator);;Element of Argument[0];Element of Argument[-1];value" ImmutableMultiset.Builder out = null; Iterator in = (Iterator)newWithElementDefault(source()); out.addAll(in); - sink(getElementDefault(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;(Iterator);;Element of Argument[0];Element of Argument[-1];value" ImmutableList.Builder out = null; Iterator in = (Iterator)newWithElementDefault(source()); out.addAll(in); - sink(getElementDefault(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;(Iterator);;Element of Argument[0];Element of Argument[-1];value" ImmutableCollection.Builder out = null; Iterator in = (Iterator)newWithElementDefault(source()); out.addAll(in); - sink(getElementDefault(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;;;Argument[-1];ReturnValue;value" @@ -1439,56 +1453,56 @@ public class Test { ImmutableSortedMap.Builder out = null; Map.Entry in = (Map.Entry)newEntryWithMapKey(source()); out.put(in); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;put;(Entry);;MapKey of Argument[0];MapKey of Argument[-1];value" ImmutableMap.Builder out = null; Map.Entry in = (Map.Entry)newEntryWithMapKey(source()); out.put(in); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;put;(Entry);;MapValue of Argument[0];MapValue of Argument[-1];value" ImmutableSortedMap.Builder out = null; Map.Entry in = (Map.Entry)newEntryWithMapValue(source()); out.put(in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;put;(Entry);;MapValue of Argument[0];MapValue of Argument[-1];value" ImmutableMap.Builder out = null; Map.Entry in = (Map.Entry)newEntryWithMapValue(source()); out.put(in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;put;(Object,Object);;Argument[0];MapKey of Argument[-1];value" ImmutableSortedMap.Builder out = null; Object in = (Object)source(); out.put(in, null); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;put;(Object,Object);;Argument[0];MapKey of Argument[-1];value" ImmutableMap.Builder out = null; Object in = (Object)source(); out.put(in, null); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;put;(Object,Object);;Argument[1];MapValue of Argument[-1];value" ImmutableSortedMap.Builder out = null; Object in = (Object)source(); out.put(null, in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;put;(Object,Object);;Argument[1];MapValue of Argument[-1];value" ImmutableMap.Builder out = null; Object in = (Object)source(); out.put(null, in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;put;;;Argument[-1];ReturnValue;value" @@ -1523,56 +1537,56 @@ public class Test { ImmutableSortedMap.Builder out = null; Iterable in = (Iterable)List.of(newWithMapKeyDefault(source())); out.putAll(in); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;putAll;(Iterable);;MapKey of Element of Argument[0];MapKey of Argument[-1];value" ImmutableMap.Builder out = null; Iterable in = (Iterable)List.of(newWithMapKeyDefault(source())); out.putAll(in); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;putAll;(Iterable);;MapValue of Element of Argument[0];MapValue of Argument[-1];value" ImmutableSortedMap.Builder out = null; Iterable in = (Iterable)List.of(newWithMapValueDefault(source())); out.putAll(in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;putAll;(Iterable);;MapValue of Element of Argument[0];MapValue of Argument[-1];value" ImmutableMap.Builder out = null; Iterable in = (Iterable)List.of(newWithMapValueDefault(source())); out.putAll(in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;putAll;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value" ImmutableSortedMap.Builder out = null; Map in = (Map)Map.of(source(), null); out.putAll(in); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;putAll;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value" ImmutableMap.Builder out = null; Map in = (Map)Map.of(source(), null); out.putAll(in); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;putAll;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value" ImmutableSortedMap.Builder out = null; Map in = (Map)Map.of(null, source()); out.putAll(in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;putAll;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value" ImmutableMap.Builder out = null; Map in = (Map)Map.of(null, source()); out.putAll(in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;putAll;;;Argument[-1];ReturnValue;value" @@ -1845,42 +1859,42 @@ public class Test { ImmutableSetMultimap out = null; ImmutableSetMultimap.Builder in = (ImmutableSetMultimap.Builder)newWithMapKeyDefault(source()); out = in.build(); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;build;();;MapKey of Argument[-1];MapKey of ReturnValue;value" ImmutableMultimap out = null; ImmutableMultimap.Builder in = (ImmutableMultimap.Builder)newWithMapKeyDefault(source()); out = in.build(); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;build;();;MapKey of Argument[-1];MapKey of ReturnValue;value" ImmutableListMultimap out = null; ImmutableListMultimap.Builder in = (ImmutableListMultimap.Builder)newWithMapKeyDefault(source()); out = in.build(); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;build;();;MapValue of Argument[-1];MapValue of ReturnValue;value" ImmutableSetMultimap out = null; ImmutableSetMultimap.Builder in = (ImmutableSetMultimap.Builder)newWithMapValueDefault(source()); out = in.build(); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;build;();;MapValue of Argument[-1];MapValue of ReturnValue;value" ImmutableMultimap out = null; ImmutableMultimap.Builder in = (ImmutableMultimap.Builder)newWithMapValueDefault(source()); out = in.build(); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;build;();;MapValue of Argument[-1];MapValue of ReturnValue;value" ImmutableListMultimap out = null; ImmutableListMultimap.Builder in = (ImmutableListMultimap.Builder)newWithMapValueDefault(source()); out = in.build(); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;orderKeysBy;(Comparator);;Argument[-1];ReturnValue;value" @@ -1929,84 +1943,84 @@ public class Test { ImmutableSetMultimap.Builder out = null; Map.Entry in = (Map.Entry)newEntryWithMapKey(source()); out.put(in); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;put;(Entry);;MapKey of Argument[0];MapKey of Argument[-1];value" ImmutableMultimap.Builder out = null; Map.Entry in = (Map.Entry)newEntryWithMapKey(source()); out.put(in); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;put;(Entry);;MapKey of Argument[0];MapKey of Argument[-1];value" ImmutableListMultimap.Builder out = null; Map.Entry in = (Map.Entry)newEntryWithMapKey(source()); out.put(in); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;put;(Entry);;MapValue of Argument[0];MapValue of Argument[-1];value" ImmutableSetMultimap.Builder out = null; Map.Entry in = (Map.Entry)newEntryWithMapValue(source()); out.put(in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;put;(Entry);;MapValue of Argument[0];MapValue of Argument[-1];value" ImmutableMultimap.Builder out = null; Map.Entry in = (Map.Entry)newEntryWithMapValue(source()); out.put(in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;put;(Entry);;MapValue of Argument[0];MapValue of Argument[-1];value" ImmutableListMultimap.Builder out = null; Map.Entry in = (Map.Entry)newEntryWithMapValue(source()); out.put(in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;put;(Object,Object);;Argument[0];MapKey of Argument[-1];value" ImmutableSetMultimap.Builder out = null; Object in = (Object)source(); out.put(in, null); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;put;(Object,Object);;Argument[0];MapKey of Argument[-1];value" ImmutableMultimap.Builder out = null; Object in = (Object)source(); out.put(in, null); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;put;(Object,Object);;Argument[0];MapKey of Argument[-1];value" ImmutableListMultimap.Builder out = null; Object in = (Object)source(); out.put(in, null); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;put;(Object,Object);;Argument[1];MapValue of Argument[-1];value" ImmutableSetMultimap.Builder out = null; Object in = (Object)source(); out.put(null, in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;put;(Object,Object);;Argument[1];MapValue of Argument[-1];value" ImmutableMultimap.Builder out = null; Object in = (Object)source(); out.put(null, in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;put;(Object,Object);;Argument[1];MapValue of Argument[-1];value" ImmutableListMultimap.Builder out = null; Object in = (Object)source(); out.put(null, in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;put;;;Argument[-1];ReturnValue;value" @@ -2055,168 +2069,168 @@ public class Test { ImmutableSetMultimap.Builder out = null; Iterable in = (Iterable)List.of(newWithMapKeyDefault(source())); out.putAll(in); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Iterable);;MapKey of Element of Argument[0];MapKey of Argument[-1];value" ImmutableMultimap.Builder out = null; Iterable in = (Iterable)List.of(newWithMapKeyDefault(source())); out.putAll(in); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Iterable);;MapKey of Element of Argument[0];MapKey of Argument[-1];value" ImmutableListMultimap.Builder out = null; Iterable in = (Iterable)List.of(newWithMapKeyDefault(source())); out.putAll(in); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Iterable);;MapValue of Element of Argument[0];MapValue of Argument[-1];value" ImmutableSetMultimap.Builder out = null; Iterable in = (Iterable)List.of(newWithMapValueDefault(source())); out.putAll(in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Iterable);;MapValue of Element of Argument[0];MapValue of Argument[-1];value" ImmutableMultimap.Builder out = null; Iterable in = (Iterable)List.of(newWithMapValueDefault(source())); out.putAll(in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Iterable);;MapValue of Element of Argument[0];MapValue of Argument[-1];value" ImmutableListMultimap.Builder out = null; Iterable in = (Iterable)List.of(newWithMapValueDefault(source())); out.putAll(in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Multimap);;MapKey of Argument[0];MapKey of Argument[-1];value" ImmutableSetMultimap.Builder out = null; Multimap in = (Multimap)newWithMapKeyDefault(source()); out.putAll(in); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Multimap);;MapKey of Argument[0];MapKey of Argument[-1];value" ImmutableMultimap.Builder out = null; Multimap in = (Multimap)newWithMapKeyDefault(source()); out.putAll(in); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Multimap);;MapKey of Argument[0];MapKey of Argument[-1];value" ImmutableListMultimap.Builder out = null; Multimap in = (Multimap)newWithMapKeyDefault(source()); out.putAll(in); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Multimap);;MapValue of Argument[0];MapValue of Argument[-1];value" ImmutableSetMultimap.Builder out = null; Multimap in = (Multimap)newWithMapValueDefault(source()); out.putAll(in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Multimap);;MapValue of Argument[0];MapValue of Argument[-1];value" ImmutableMultimap.Builder out = null; Multimap in = (Multimap)newWithMapValueDefault(source()); out.putAll(in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Multimap);;MapValue of Argument[0];MapValue of Argument[-1];value" ImmutableListMultimap.Builder out = null; Multimap in = (Multimap)newWithMapValueDefault(source()); out.putAll(in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" ImmutableSetMultimap.Builder out = null; Object in = (Object)source(); out.putAll(in, (Iterable)null); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" ImmutableMultimap.Builder out = null; Object in = (Object)source(); out.putAll(in, (Iterable)null); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" ImmutableListMultimap.Builder out = null; Object in = (Object)source(); out.putAll(in, (Iterable)null); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" ImmutableSetMultimap.Builder out = null; Iterable in = (Iterable)List.of(source()); out.putAll((Object)null, in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" ImmutableMultimap.Builder out = null; Iterable in = (Iterable)List.of(source()); out.putAll((Object)null, in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" ImmutableListMultimap.Builder out = null; Iterable in = (Iterable)List.of(source()); out.putAll((Object)null, in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Object,Object[]);;Argument[0];MapKey of Argument[-1];value" ImmutableSetMultimap.Builder out = null; Object in = (Object)source(); out.putAll(in, (Object[])null); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Object,Object[]);;Argument[0];MapKey of Argument[-1];value" ImmutableMultimap.Builder out = null; Object in = (Object)source(); out.putAll(in, (Object[])null); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Object,Object[]);;Argument[0];MapKey of Argument[-1];value" ImmutableListMultimap.Builder out = null; Object in = (Object)source(); out.putAll(in, (Object[])null); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Object,Object[]);;ArrayElement of Argument[1];MapValue of Argument[-1];value" ImmutableSetMultimap.Builder out = null; Object[] in = (Object[])new Object[]{source()}; out.putAll((Object)null, in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Object,Object[]);;ArrayElement of Argument[1];MapValue of Argument[-1];value" ImmutableMultimap.Builder out = null; Object[] in = (Object[])new Object[]{source()}; out.putAll((Object)null, in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Object,Object[]);;ArrayElement of Argument[1];MapValue of Argument[-1];value" ImmutableListMultimap.Builder out = null; Object[] in = (Object[])new Object[]{source()}; out.putAll((Object)null, in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;;;Argument[-1];ReturnValue;value" @@ -2307,280 +2321,280 @@ public class Test { ImmutableMultimap out = null; Iterable in = (Iterable)List.of(newWithMapKeyDefault(source())); out = ImmutableMultimap.copyOf(in); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;copyOf;(Iterable);;MapValue of Element of Argument[0];MapValue of ReturnValue;value" ImmutableMultimap out = null; Iterable in = (Iterable)List.of(newWithMapValueDefault(source())); out = ImmutableMultimap.copyOf(in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;copyOf;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value" ImmutableMultimap out = null; Multimap in = (Multimap)newWithMapKeyDefault(source()); out = ImmutableMultimap.copyOf(in); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;copyOf;(Multimap);;MapValue of Argument[0];MapValue of ReturnValue;value" ImmutableMultimap out = null; Multimap in = (Multimap)newWithMapValueDefault(source()); out = ImmutableMultimap.copyOf(in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;inverse;();;MapKey of Argument[-1];MapValue of ReturnValue;value" ImmutableSetMultimap out = null; ImmutableSetMultimap in = (ImmutableSetMultimap)newWithMapKeyDefault(source()); out = in.inverse(); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;inverse;();;MapKey of Argument[-1];MapValue of ReturnValue;value" ImmutableMultimap out = null; ImmutableMultimap in = (ImmutableMultimap)newWithMapKeyDefault(source()); out = in.inverse(); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;inverse;();;MapKey of Argument[-1];MapValue of ReturnValue;value" ImmutableListMultimap out = null; ImmutableListMultimap in = (ImmutableListMultimap)newWithMapKeyDefault(source()); out = in.inverse(); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;inverse;();;MapValue of Argument[-1];MapKey of ReturnValue;value" ImmutableSetMultimap out = null; ImmutableSetMultimap in = (ImmutableSetMultimap)newWithMapValueDefault(source()); out = in.inverse(); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;inverse;();;MapValue of Argument[-1];MapKey of ReturnValue;value" ImmutableMultimap out = null; ImmutableMultimap in = (ImmutableMultimap)newWithMapValueDefault(source()); out = in.inverse(); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;inverse;();;MapValue of Argument[-1];MapKey of ReturnValue;value" ImmutableListMultimap out = null; ImmutableListMultimap in = (ImmutableListMultimap)newWithMapValueDefault(source()); out = in.inverse(); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[0];MapKey of ReturnValue;value" ImmutableMultimap out = null; Object in = (Object)source(); out = ImmutableMultimap.of(in, null, null, null, null, null, null, null, null, null); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[0];MapKey of ReturnValue;value" ImmutableMultimap out = null; Object in = (Object)source(); out = ImmutableMultimap.of(in, null, null, null, null, null, null, null); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[0];MapKey of ReturnValue;value" ImmutableMultimap out = null; Object in = (Object)source(); out = ImmutableMultimap.of(in, null, null, null, null, null); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[0];MapKey of ReturnValue;value" ImmutableMultimap out = null; Object in = (Object)source(); out = ImmutableMultimap.of(in, null, null, null); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[0];MapKey of ReturnValue;value" ImmutableMultimap out = null; Object in = (Object)source(); out = ImmutableMultimap.of(in, null); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[1];MapValue of ReturnValue;value" ImmutableMultimap out = null; Object in = (Object)source(); out = ImmutableMultimap.of(null, in, null, null, null, null, null, null, null, null); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[1];MapValue of ReturnValue;value" ImmutableMultimap out = null; Object in = (Object)source(); out = ImmutableMultimap.of(null, in, null, null, null, null, null, null); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[1];MapValue of ReturnValue;value" ImmutableMultimap out = null; Object in = (Object)source(); out = ImmutableMultimap.of(null, in, null, null, null, null); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[1];MapValue of ReturnValue;value" ImmutableMultimap out = null; Object in = (Object)source(); out = ImmutableMultimap.of(null, in, null, null); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[1];MapValue of ReturnValue;value" ImmutableMultimap out = null; Object in = (Object)source(); out = ImmutableMultimap.of(null, in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[2];MapKey of ReturnValue;value" ImmutableMultimap out = null; Object in = (Object)source(); out = ImmutableMultimap.of(null, null, in, null, null, null, null, null, null, null); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[2];MapKey of ReturnValue;value" ImmutableMultimap out = null; Object in = (Object)source(); out = ImmutableMultimap.of(null, null, in, null, null, null, null, null); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[2];MapKey of ReturnValue;value" ImmutableMultimap out = null; Object in = (Object)source(); out = ImmutableMultimap.of(null, null, in, null, null, null); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[2];MapKey of ReturnValue;value" ImmutableMultimap out = null; Object in = (Object)source(); out = ImmutableMultimap.of(null, null, in, null); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[3];MapValue of ReturnValue;value" ImmutableMultimap out = null; Object in = (Object)source(); out = ImmutableMultimap.of(null, null, null, in, null, null, null, null, null, null); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[3];MapValue of ReturnValue;value" ImmutableMultimap out = null; Object in = (Object)source(); out = ImmutableMultimap.of(null, null, null, in, null, null, null, null); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[3];MapValue of ReturnValue;value" ImmutableMultimap out = null; Object in = (Object)source(); out = ImmutableMultimap.of(null, null, null, in, null, null); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[3];MapValue of ReturnValue;value" ImmutableMultimap out = null; Object in = (Object)source(); out = ImmutableMultimap.of(null, null, null, in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[4];MapKey of ReturnValue;value" ImmutableMultimap out = null; Object in = (Object)source(); out = ImmutableMultimap.of(null, null, null, null, in, null, null, null, null, null); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[4];MapKey of ReturnValue;value" ImmutableMultimap out = null; Object in = (Object)source(); out = ImmutableMultimap.of(null, null, null, null, in, null, null, null); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[4];MapKey of ReturnValue;value" ImmutableMultimap out = null; Object in = (Object)source(); out = ImmutableMultimap.of(null, null, null, null, in, null); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[5];MapValue of ReturnValue;value" ImmutableMultimap out = null; Object in = (Object)source(); out = ImmutableMultimap.of(null, null, null, null, null, in, null, null, null, null); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[5];MapValue of ReturnValue;value" ImmutableMultimap out = null; Object in = (Object)source(); out = ImmutableMultimap.of(null, null, null, null, null, in, null, null); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[5];MapValue of ReturnValue;value" ImmutableMultimap out = null; Object in = (Object)source(); out = ImmutableMultimap.of(null, null, null, null, null, in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[6];MapKey of ReturnValue;value" ImmutableMultimap out = null; Object in = (Object)source(); out = ImmutableMultimap.of(null, null, null, null, null, null, in, null, null, null); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[6];MapKey of ReturnValue;value" ImmutableMultimap out = null; Object in = (Object)source(); out = ImmutableMultimap.of(null, null, null, null, null, null, in, null); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[7];MapValue of ReturnValue;value" ImmutableMultimap out = null; Object in = (Object)source(); out = ImmutableMultimap.of(null, null, null, null, null, null, null, in, null, null); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[7];MapValue of ReturnValue;value" ImmutableMultimap out = null; Object in = (Object)source(); out = ImmutableMultimap.of(null, null, null, null, null, null, null, in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[8];MapKey of ReturnValue;value" ImmutableMultimap out = null; Object in = (Object)source(); out = ImmutableMultimap.of(null, null, null, null, null, null, null, null, in, null); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[9];MapValue of ReturnValue;value" ImmutableMultimap out = null; Object in = (Object)source(); out = ImmutableMultimap.of(null, null, null, null, null, null, null, null, null, in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset$Builder;true;addCopies;(Object,int);;Argument[-1];ReturnValue;value" @@ -2601,28 +2615,28 @@ public class Test { ImmutableSortedMultiset.Builder out = null; Object in = (Object)source(); out.addCopies(in, 0); - sink(getElementDefault(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset$Builder;true;addCopies;(Object,int);;Argument[0];Element of Argument[-1];value" ImmutableMultiset.Builder out = null; Object in = (Object)source(); out.addCopies(in, 0); - sink(getElementDefault(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset$Builder;true;setCount;(Object,int);;Argument[0];Element of Argument[-1];value" ImmutableSortedMultiset.Builder out = null; Object in = (Object)source(); out.setCount(in, 0); - sink(getElementDefault(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset$Builder;true;setCount;(Object,int);;Argument[0];Element of Argument[-1];value" ImmutableMultiset.Builder out = null; Object in = (Object)source(); out.setCount(in, 0); - sink(getElementDefault(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultiset;true;copyOf;(Iterable);;Element of Argument[0];Element of ReturnValue;value" @@ -3672,21 +3686,21 @@ public class Test { ImmutableTable out = null; ImmutableTable.Builder in = (ImmutableTable.Builder)newWithMapValueDefault(source()); out = in.build(); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableTable$Builder;true;build;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value" ImmutableTable out = null; ImmutableTable.Builder in = (ImmutableTable.Builder)newWithTable_columnKeyDefault(source()); out = in.build(); - sink(getTable_columnKeyDefault(out)); // $ hasValueFlow + sink(getTable_columnKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableTable$Builder;true;build;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value" ImmutableTable out = null; ImmutableTable.Builder in = (ImmutableTable.Builder)newWithTable_rowKeyDefault(source()); out = in.build(); - sink(getTable_rowKeyDefault(out)); // $ hasValueFlow + sink(getTable_rowKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableTable$Builder;true;orderColumnsBy;(Comparator);;Argument[-1];ReturnValue;value" @@ -3714,21 +3728,21 @@ public class Test { ImmutableTable.Builder out = null; Table.Cell in = (Table.Cell)newWithMapValueDefault(source()); out.put(in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableTable$Builder;true;put;(Cell);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];value" ImmutableTable.Builder out = null; Table.Cell in = (Table.Cell)newWithTable_columnKeyDefault(source()); out.put(in); - sink(getTable_columnKeyDefault(out)); // $ hasValueFlow + sink(getTable_columnKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableTable$Builder;true;put;(Cell);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];value" ImmutableTable.Builder out = null; Table.Cell in = (Table.Cell)newWithTable_rowKeyDefault(source()); out.put(in); - sink(getTable_rowKeyDefault(out)); // $ hasValueFlow + sink(getTable_rowKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableTable$Builder;true;put;(Object,Object,Object);;Argument[-1];ReturnValue;value" @@ -3742,21 +3756,21 @@ public class Test { ImmutableTable.Builder out = null; Object in = (Object)source(); out.put(in, null, null); - sink(getTable_rowKeyDefault(out)); // $ hasValueFlow + sink(getTable_rowKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableTable$Builder;true;put;(Object,Object,Object);;Argument[1];SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];value" ImmutableTable.Builder out = null; Object in = (Object)source(); out.put(null, in, null); - sink(getTable_columnKeyDefault(out)); // $ hasValueFlow + sink(getTable_columnKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableTable$Builder;true;put;(Object,Object,Object);;Argument[2];MapValue of Argument[-1];value" ImmutableTable.Builder out = null; Object in = (Object)source(); out.put(null, null, in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableTable$Builder;true;putAll;(Table);;Argument[-1];ReturnValue;value" @@ -3770,63 +3784,63 @@ public class Test { ImmutableTable.Builder out = null; Table in = (Table)newWithMapValueDefault(source()); out.putAll(in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableTable$Builder;true;putAll;(Table);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];value" ImmutableTable.Builder out = null; Table in = (Table)newWithTable_columnKeyDefault(source()); out.putAll(in); - sink(getTable_columnKeyDefault(out)); // $ hasValueFlow + sink(getTable_columnKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableTable$Builder;true;putAll;(Table);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];value" ImmutableTable.Builder out = null; Table in = (Table)newWithTable_rowKeyDefault(source()); out.putAll(in); - sink(getTable_rowKeyDefault(out)); // $ hasValueFlow + sink(getTable_rowKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableTable;true;copyOf;(Table);;MapValue of Argument[0];MapValue of ReturnValue;value" ImmutableTable out = null; Table in = (Table)newWithMapValueDefault(source()); out = ImmutableTable.copyOf(in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableTable;true;copyOf;(Table);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value" ImmutableTable out = null; Table in = (Table)newWithTable_columnKeyDefault(source()); out = ImmutableTable.copyOf(in); - sink(getTable_columnKeyDefault(out)); // $ hasValueFlow + sink(getTable_columnKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableTable;true;copyOf;(Table);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value" ImmutableTable out = null; Table in = (Table)newWithTable_rowKeyDefault(source()); out = ImmutableTable.copyOf(in); - sink(getTable_rowKeyDefault(out)); // $ hasValueFlow + sink(getTable_rowKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableTable;true;of;(Object,Object,Object);;Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value" ImmutableTable out = null; Object in = (Object)source(); out = ImmutableTable.of(in, null, null); - sink(getTable_rowKeyDefault(out)); // $ hasValueFlow + sink(getTable_rowKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableTable;true;of;(Object,Object,Object);;Argument[1];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value" ImmutableTable out = null; Object in = (Object)source(); out = ImmutableTable.of(null, in, null); - sink(getTable_columnKeyDefault(out)); // $ hasValueFlow + sink(getTable_columnKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableTable;true;of;(Object,Object,Object);;Argument[2];MapValue of ReturnValue;value" ImmutableTable out = null; Object in = (Object)source(); out = ImmutableTable.of(null, null, in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;addAll;(Collection,Iterable);;Element of Argument[1];Element of Argument[0];value" @@ -4085,7 +4099,7 @@ public class Test { Optional out = null; Iterable in = (Iterable)List.of(source()); out = Iterables.tryFind(in, null); - sink(getElementDefault(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;unmodifiableIterable;(ImmutableCollection);;Element of Argument[0];Element of ReturnValue;value" @@ -4400,7 +4414,7 @@ public class Test { Optional out = null; Iterator in = (Iterator)newWithElementDefault(source()); out = Iterators.tryFind(in, null); - sink(getElementDefault(out)); // $ hasValueFlow + sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;unmodifiableIterator;(Iterator);;Element of Argument[0];Element of ReturnValue;value" @@ -4421,14 +4435,14 @@ public class Test { LinkedHashMultimap out = null; Multimap in = (Multimap)newWithMapKeyDefault(source()); out = LinkedHashMultimap.create(in); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;LinkedHashMultimap;true;create;(Multimap);;MapValue of Argument[0];MapValue of ReturnValue;value" LinkedHashMultimap out = null; Multimap in = (Multimap)newWithMapValueDefault(source()); out = LinkedHashMultimap.create(in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;LinkedHashMultiset;true;create;(Iterable);;Element of Argument[0];Element of ReturnValue;value" @@ -4442,14 +4456,14 @@ public class Test { LinkedListMultimap out = null; Multimap in = (Multimap)newWithMapKeyDefault(source()); out = LinkedListMultimap.create(in); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;LinkedListMultimap;true;create;(Multimap);;MapValue of Argument[0];MapValue of ReturnValue;value" LinkedListMultimap out = null; Multimap in = (Multimap)newWithMapValueDefault(source()); out = LinkedListMultimap.create(in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Lists;false;asList;(Object,Object,Object[]);;Argument[0..1];Element of ReturnValue;value" @@ -4771,84 +4785,84 @@ public class Test { MapDifference out = null; Map in = (Map)Map.of(source(), null); out = Maps.difference(in, (Map)null); - sink(getMapKeyDefault(getMapDifference_leftDefault(out))); // $ hasValueFlow + sink(getMapKeyDefault(out.entriesOnlyOnLeft())); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;difference;(Map,Map);;MapKey of Argument[1];MapKey of SyntheticField[com.google.common.collect.MapDifference.right] of ReturnValue;value" MapDifference out = null; Map in = (Map)Map.of(source(), null); out = Maps.difference((Map)null, in); - sink(getMapKeyDefault(getMapDifference_rightDefault(out))); // $ hasValueFlow + sink(getMapKeyDefault(out.entriesOnlyOnRight())); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;difference;(Map,Map);;MapValue of Argument[0];MapValue of SyntheticField[com.google.common.collect.MapDifference.left] of ReturnValue;value" MapDifference out = null; Map in = (Map)Map.of(null, source()); out = Maps.difference(in, (Map)null); - sink(getMapValueDefault(getMapDifference_leftDefault(out))); // $ hasValueFlow + sink(getMapValueDefault(out.entriesOnlyOnLeft())); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;difference;(Map,Map);;MapValue of Argument[1];MapValue of SyntheticField[com.google.common.collect.MapDifference.right] of ReturnValue;value" MapDifference out = null; Map in = (Map)Map.of(null, source()); out = Maps.difference((Map)null, in); - sink(getMapValueDefault(getMapDifference_rightDefault(out))); // $ hasValueFlow + sink(getMapValueDefault(out.entriesOnlyOnRight())); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;difference;(Map,Map,Equivalence);;MapKey of Argument[0];MapKey of SyntheticField[com.google.common.collect.MapDifference.left] of ReturnValue;value" MapDifference out = null; Map in = (Map)Map.of(source(), null); out = Maps.difference(in, null, null); - sink(getMapKeyDefault(getMapDifference_leftDefault(out))); // $ hasValueFlow + sink(getMapKeyDefault(out.entriesOnlyOnLeft())); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;difference;(Map,Map,Equivalence);;MapKey of Argument[1];MapKey of SyntheticField[com.google.common.collect.MapDifference.right] of ReturnValue;value" MapDifference out = null; Map in = (Map)Map.of(source(), null); out = Maps.difference(null, in, null); - sink(getMapKeyDefault(getMapDifference_rightDefault(out))); // $ hasValueFlow + sink(getMapKeyDefault(out.entriesOnlyOnRight())); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;difference;(Map,Map,Equivalence);;MapValue of Argument[0];MapValue of SyntheticField[com.google.common.collect.MapDifference.left] of ReturnValue;value" MapDifference out = null; Map in = (Map)Map.of(null, source()); out = Maps.difference(in, null, null); - sink(getMapValueDefault(getMapDifference_leftDefault(out))); // $ hasValueFlow + sink(getMapValueDefault(out.entriesOnlyOnLeft())); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;difference;(Map,Map,Equivalence);;MapValue of Argument[1];MapValue of SyntheticField[com.google.common.collect.MapDifference.right] of ReturnValue;value" MapDifference out = null; Map in = (Map)Map.of(null, source()); out = Maps.difference(null, in, null); - sink(getMapValueDefault(getMapDifference_rightDefault(out))); // $ hasValueFlow + sink(getMapValueDefault(out.entriesOnlyOnRight())); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;difference;(SortedMap,Map);;MapKey of Argument[0];MapKey of SyntheticField[com.google.common.collect.MapDifference.left] of ReturnValue;value" SortedMapDifference out = null; SortedMap in = (SortedMap)newWithMapKeyDefault(source()); out = Maps.difference(in, (Map)null); - sink(getMapKeyDefault(getMapDifference_leftDefault(out))); // $ hasValueFlow + sink(getMapKeyDefault(out.entriesOnlyOnLeft())); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;difference;(SortedMap,Map);;MapKey of Argument[1];MapKey of SyntheticField[com.google.common.collect.MapDifference.right] of ReturnValue;value" SortedMapDifference out = null; Map in = (Map)Map.of(source(), null); out = Maps.difference((SortedMap)null, in); - sink(getMapKeyDefault(getMapDifference_rightDefault(out))); // $ hasValueFlow + sink(getMapKeyDefault(out.entriesOnlyOnRight())); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;difference;(SortedMap,Map);;MapValue of Argument[0];MapValue of SyntheticField[com.google.common.collect.MapDifference.left] of ReturnValue;value" SortedMapDifference out = null; SortedMap in = (SortedMap)newWithMapValueDefault(source()); out = Maps.difference(in, (Map)null); - sink(getMapValueDefault(getMapDifference_leftDefault(out))); // $ hasValueFlow + sink(getMapValueDefault(out.entriesOnlyOnLeft())); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;difference;(SortedMap,Map);;MapValue of Argument[1];MapValue of SyntheticField[com.google.common.collect.MapDifference.right] of ReturnValue;value" SortedMapDifference out = null; Map in = (Map)Map.of(null, source()); out = Maps.difference((SortedMap)null, in); - sink(getMapValueDefault(getMapDifference_rightDefault(out))); // $ hasValueFlow + sink(getMapValueDefault(out.entriesOnlyOnRight())); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;filterEntries;;;MapKey of Argument[0];MapKey of ReturnValue;value" @@ -5415,98 +5429,98 @@ public class Test { Multimap out = null; Object in = (Object)source(); out.put(in, null); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;put;(Object,Object);;Argument[0];MapKey of Argument[-1];value" LinkedListMultimap out = null; Object in = (Object)source(); out.put(in, null); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;put;(Object,Object);;Argument[0];MapKey of Argument[-1];value" ImmutableMultimap out = null; Object in = (Object)source(); out.put(in, null); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;put;(Object,Object);;Argument[1];MapValue of Argument[-1];value" Multimap out = null; Object in = (Object)source(); out.put(null, in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;put;(Object,Object);;Argument[1];MapValue of Argument[-1];value" LinkedListMultimap out = null; Object in = (Object)source(); out.put(null, in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;put;(Object,Object);;Argument[1];MapValue of Argument[-1];value" ImmutableMultimap out = null; Object in = (Object)source(); out.put(null, in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;putAll;(Multimap);;MapKey of Argument[0];MapKey of Argument[-1];value" Multimap out = null; Multimap in = (Multimap)newWithMapKeyDefault(source()); out.putAll(in); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;putAll;(Multimap);;MapKey of Argument[0];MapKey of Argument[-1];value" ImmutableMultimap out = null; Multimap in = (Multimap)newWithMapKeyDefault(source()); out.putAll(in); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;putAll;(Multimap);;MapValue of Argument[0];MapValue of Argument[-1];value" Multimap out = null; Multimap in = (Multimap)newWithMapValueDefault(source()); out.putAll(in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;putAll;(Multimap);;MapValue of Argument[0];MapValue of Argument[-1];value" ImmutableMultimap out = null; Multimap in = (Multimap)newWithMapValueDefault(source()); out.putAll(in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;putAll;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" Multimap out = null; Object in = (Object)source(); out.putAll(in, null); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;putAll;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" ImmutableMultimap out = null; Object in = (Object)source(); out.putAll(in, null); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;putAll;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" Multimap out = null; Iterable in = (Iterable)List.of(source()); out.putAll(null, in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;putAll;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" ImmutableMultimap out = null; Iterable in = (Iterable)List.of(source()); out.putAll(null, in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;removeAll;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" @@ -5569,126 +5583,126 @@ public class Test { SortedSetMultimap out = null; Object in = (Object)source(); out.replaceValues(in, null); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" SetMultimap out = null; Object in = (Object)source(); out.replaceValues(in, null); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" Multimap out = null; Object in = (Object)source(); out.replaceValues(in, null); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" ListMultimap out = null; Object in = (Object)source(); out.replaceValues(in, null); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" LinkedListMultimap out = null; Object in = (Object)source(); out.replaceValues(in, null); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" LinkedHashMultimap out = null; Object in = (Object)source(); out.replaceValues(in, null); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" ImmutableSetMultimap out = null; Object in = (Object)source(); out.replaceValues(in, null); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" ImmutableMultimap out = null; Object in = (Object)source(); out.replaceValues(in, null); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value" ImmutableListMultimap out = null; Object in = (Object)source(); out.replaceValues(in, null); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" SortedSetMultimap out = null; Iterable in = (Iterable)List.of(source()); out.replaceValues(null, in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" SetMultimap out = null; Iterable in = (Iterable)List.of(source()); out.replaceValues(null, in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" Multimap out = null; Iterable in = (Iterable)List.of(source()); out.replaceValues(null, in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" ListMultimap out = null; Iterable in = (Iterable)List.of(source()); out.replaceValues(null, in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" LinkedListMultimap out = null; Iterable in = (Iterable)List.of(source()); out.replaceValues(null, in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" LinkedHashMultimap out = null; Iterable in = (Iterable)List.of(source()); out.replaceValues(null, in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" ImmutableSetMultimap out = null; Iterable in = (Iterable)List.of(source()); out.replaceValues(null, in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" ImmutableMultimap out = null; Iterable in = (Iterable)List.of(source()); out.replaceValues(null, in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value" ImmutableListMultimap out = null; Iterable in = (Iterable)List.of(source()); out.replaceValues(null, in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;MapValue of Argument[-1];Element of ReturnValue;value" @@ -5842,112 +5856,112 @@ public class Test { Multimap out = null; Multimap in = (Multimap)newWithMapKeyDefault(source()); out = Multimaps.filterEntries(in, (Predicate)null); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;filterEntries;(Multimap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value" Multimap out = null; Multimap in = (Multimap)newWithMapValueDefault(source()); out = Multimaps.filterEntries(in, (Predicate)null); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;filterEntries;(SetMultimap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value" SetMultimap out = null; SetMultimap in = (SetMultimap)newWithMapKeyDefault(source()); out = Multimaps.filterEntries(in, (Predicate)null); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;filterEntries;(SetMultimap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value" SetMultimap out = null; SetMultimap in = (SetMultimap)newWithMapValueDefault(source()); out = Multimaps.filterEntries(in, (Predicate)null); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;filterKeys;(Multimap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value" Multimap out = null; Multimap in = (Multimap)newWithMapKeyDefault(source()); out = Multimaps.filterKeys(in, (Predicate)null); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;filterKeys;(Multimap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value" Multimap out = null; Multimap in = (Multimap)newWithMapValueDefault(source()); out = Multimaps.filterKeys(in, (Predicate)null); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;filterKeys;(SetMultimap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value" SetMultimap out = null; SetMultimap in = (SetMultimap)newWithMapKeyDefault(source()); out = Multimaps.filterKeys(in, (Predicate)null); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;filterKeys;(SetMultimap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value" SetMultimap out = null; SetMultimap in = (SetMultimap)newWithMapValueDefault(source()); out = Multimaps.filterKeys(in, (Predicate)null); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;filterValues;(Multimap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value" Multimap out = null; Multimap in = (Multimap)newWithMapKeyDefault(source()); out = Multimaps.filterValues(in, (Predicate)null); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;filterValues;(Multimap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value" Multimap out = null; Multimap in = (Multimap)newWithMapValueDefault(source()); out = Multimaps.filterValues(in, (Predicate)null); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;filterValues;(SetMultimap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value" SetMultimap out = null; SetMultimap in = (SetMultimap)newWithMapKeyDefault(source()); out = Multimaps.filterValues(in, (Predicate)null); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;filterValues;(SetMultimap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value" SetMultimap out = null; SetMultimap in = (SetMultimap)newWithMapValueDefault(source()); out = Multimaps.filterValues(in, (Predicate)null); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;forMap;(Map);;MapKey of Argument[0];MapKey of ReturnValue;value" SetMultimap out = null; Map in = (Map)Map.of(source(), null); out = Multimaps.forMap(in); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;forMap;(Map);;MapValue of Argument[0];MapValue of ReturnValue;value" SetMultimap out = null; Map in = (Map)Map.of(null, source()); out = Multimaps.forMap(in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;index;(Iterable,Function);;Element of Argument[0];MapValue of ReturnValue;value" ImmutableListMultimap out = null; Iterable in = (Iterable)List.of(source()); out = Multimaps.index(in, (Function)null); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;index;(Iterator,Function);;Element of Argument[0];MapValue of ReturnValue;value" ImmutableListMultimap out = null; Iterator in = (Iterator)newWithElementDefault(source()); out = Multimaps.index(in, (Function)null); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;invertFrom;(Multimap,Multimap);;Argument[1];ReturnValue;value" @@ -5961,238 +5975,238 @@ public class Test { Multimap out = null; Multimap in = (Multimap)newWithMapKeyDefault(source()); Multimaps.invertFrom(in, out); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;invertFrom;(Multimap,Multimap);;MapValue of Argument[0];MapKey of Argument[1];value" Multimap out = null; Multimap in = (Multimap)newWithMapValueDefault(source()); Multimaps.invertFrom(in, out); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;newListMultimap;(Map,Supplier);;Element of MapValue of Argument[0];MapValue of ReturnValue;value" ListMultimap out = null; Map in = (Map)Map.of(null, newWithElementDefault(source())); out = Multimaps.newListMultimap(in, null); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;newListMultimap;(Map,Supplier);;MapKey of Argument[0];MapKey of ReturnValue;value" ListMultimap out = null; Map in = (Map)Map.of(source(), null); out = Multimaps.newListMultimap(in, null); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;newMultimap;(Map,Supplier);;Element of MapValue of Argument[0];MapValue of ReturnValue;value" Multimap out = null; Map in = (Map)Map.of(null, newWithElementDefault(source())); out = Multimaps.newMultimap(in, null); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;newMultimap;(Map,Supplier);;MapKey of Argument[0];MapKey of ReturnValue;value" Multimap out = null; Map in = (Map)Map.of(source(), null); out = Multimaps.newMultimap(in, null); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;newSetMultimap;(Map,Supplier);;Element of MapValue of Argument[0];MapValue of ReturnValue;value" SetMultimap out = null; Map in = (Map)Map.of(null, newWithElementDefault(source())); out = Multimaps.newSetMultimap(in, null); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;newSetMultimap;(Map,Supplier);;MapKey of Argument[0];MapKey of ReturnValue;value" SetMultimap out = null; Map in = (Map)Map.of(source(), null); out = Multimaps.newSetMultimap(in, null); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;newSortedSetMultimap;(Map,Supplier);;Element of MapValue of Argument[0];MapValue of ReturnValue;value" SortedSetMultimap out = null; Map in = (Map)Map.of(null, newWithElementDefault(source())); out = Multimaps.newSortedSetMultimap(in, null); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;newSortedSetMultimap;(Map,Supplier);;MapKey of Argument[0];MapKey of ReturnValue;value" SortedSetMultimap out = null; Map in = (Map)Map.of(source(), null); out = Multimaps.newSortedSetMultimap(in, null); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;synchronizedListMultimap;(ListMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value" ListMultimap out = null; ListMultimap in = (ListMultimap)newWithMapKeyDefault(source()); out = Multimaps.synchronizedListMultimap(in); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;synchronizedListMultimap;(ListMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value" ListMultimap out = null; ListMultimap in = (ListMultimap)newWithMapValueDefault(source()); out = Multimaps.synchronizedListMultimap(in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;synchronizedMultimap;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value" Multimap out = null; Multimap in = (Multimap)newWithMapKeyDefault(source()); out = Multimaps.synchronizedMultimap(in); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;synchronizedMultimap;(Multimap);;MapValue of Argument[0];MapValue of ReturnValue;value" Multimap out = null; Multimap in = (Multimap)newWithMapValueDefault(source()); out = Multimaps.synchronizedMultimap(in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;synchronizedSetMultimap;(SetMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value" SetMultimap out = null; SetMultimap in = (SetMultimap)newWithMapKeyDefault(source()); out = Multimaps.synchronizedSetMultimap(in); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;synchronizedSetMultimap;(SetMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value" SetMultimap out = null; SetMultimap in = (SetMultimap)newWithMapValueDefault(source()); out = Multimaps.synchronizedSetMultimap(in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;synchronizedSortedSetMultimap;(SortedSetMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value" SortedSetMultimap out = null; SortedSetMultimap in = (SortedSetMultimap)newWithMapKeyDefault(source()); out = Multimaps.synchronizedSortedSetMultimap(in); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;synchronizedSortedSetMultimap;(SortedSetMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value" SortedSetMultimap out = null; SortedSetMultimap in = (SortedSetMultimap)newWithMapValueDefault(source()); out = Multimaps.synchronizedSortedSetMultimap(in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;transformValues;(ListMultimap,Function);;MapKey of Argument[0];MapKey of ReturnValue;value" ListMultimap out = null; ListMultimap in = (ListMultimap)newWithMapKeyDefault(source()); out = Multimaps.transformValues(in, (Function)null); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;transformValues;(Multimap,Function);;MapKey of Argument[0];MapKey of ReturnValue;value" Multimap out = null; Multimap in = (Multimap)newWithMapKeyDefault(source()); out = Multimaps.transformValues(in, (Function)null); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;unmodifiableListMultimap;(ImmutableListMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value" ListMultimap out = null; ImmutableListMultimap in = (ImmutableListMultimap)newWithMapKeyDefault(source()); out = Multimaps.unmodifiableListMultimap(in); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;unmodifiableListMultimap;(ImmutableListMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value" ListMultimap out = null; ImmutableListMultimap in = (ImmutableListMultimap)newWithMapValueDefault(source()); out = Multimaps.unmodifiableListMultimap(in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;unmodifiableListMultimap;(ListMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value" ListMultimap out = null; ListMultimap in = (ListMultimap)newWithMapKeyDefault(source()); out = Multimaps.unmodifiableListMultimap(in); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;unmodifiableListMultimap;(ListMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value" ListMultimap out = null; ListMultimap in = (ListMultimap)newWithMapValueDefault(source()); out = Multimaps.unmodifiableListMultimap(in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;unmodifiableMultimap;(ImmutableMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value" Multimap out = null; ImmutableMultimap in = (ImmutableMultimap)newWithMapKeyDefault(source()); out = Multimaps.unmodifiableMultimap(in); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;unmodifiableMultimap;(ImmutableMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value" Multimap out = null; ImmutableMultimap in = (ImmutableMultimap)newWithMapValueDefault(source()); out = Multimaps.unmodifiableMultimap(in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;unmodifiableMultimap;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value" Multimap out = null; Multimap in = (Multimap)newWithMapKeyDefault(source()); out = Multimaps.unmodifiableMultimap(in); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;unmodifiableMultimap;(Multimap);;MapValue of Argument[0];MapValue of ReturnValue;value" Multimap out = null; Multimap in = (Multimap)newWithMapValueDefault(source()); out = Multimaps.unmodifiableMultimap(in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;unmodifiableSetMultimap;(ImmutableSetMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value" SetMultimap out = null; ImmutableSetMultimap in = (ImmutableSetMultimap)newWithMapKeyDefault(source()); out = Multimaps.unmodifiableSetMultimap(in); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;unmodifiableSetMultimap;(ImmutableSetMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value" SetMultimap out = null; ImmutableSetMultimap in = (ImmutableSetMultimap)newWithMapValueDefault(source()); out = Multimaps.unmodifiableSetMultimap(in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;unmodifiableSetMultimap;(SetMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value" SetMultimap out = null; SetMultimap in = (SetMultimap)newWithMapKeyDefault(source()); out = Multimaps.unmodifiableSetMultimap(in); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;unmodifiableSetMultimap;(SetMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value" SetMultimap out = null; SetMultimap in = (SetMultimap)newWithMapValueDefault(source()); out = Multimaps.unmodifiableSetMultimap(in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;unmodifiableSortedSetMultimap;(SortedSetMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value" SortedSetMultimap out = null; SortedSetMultimap in = (SortedSetMultimap)newWithMapKeyDefault(source()); out = Multimaps.unmodifiableSortedSetMultimap(in); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;unmodifiableSortedSetMultimap;(SortedSetMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value" SortedSetMultimap out = null; SortedSetMultimap in = (SortedSetMultimap)newWithMapValueDefault(source()); out = Multimaps.unmodifiableSortedSetMultimap(in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multiset$Entry;true;getElement;();;Element of Argument[-1];ReturnValue;value" @@ -6360,7 +6374,7 @@ public class Test { Multiset.Entry out = null; Object in = (Object)source(); out = Multisets.immutableEntry(in, 0); - sink(getElementDefault(out)); // $ hasValueFlow + sink(out.getElement()); // $ hasValueFlow } { // "com.google.common.collect;Multisets;false;intersection;(Multiset,Multiset);;Element of Argument[0..1];Element of ReturnValue;value" @@ -6976,126 +6990,126 @@ public class Test { Table out = null; Object in = (Object)source(); out.put(in, null, null); - sink(getTable_rowKeyDefault(out)); // $ hasValueFlow + sink(getTable_rowKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;put;(Object,Object,Object);;Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];value" ImmutableTable out = null; Object in = (Object)source(); out.put(in, null, null); - sink(getTable_rowKeyDefault(out)); // $ hasValueFlow + sink(getTable_rowKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;put;(Object,Object,Object);;Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];value" ArrayTable out = null; Object in = (Object)source(); out.put(in, null, null); - sink(getTable_rowKeyDefault(out)); // $ hasValueFlow + sink(getTable_rowKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;put;(Object,Object,Object);;Argument[1];SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];value" Table out = null; Object in = (Object)source(); out.put(null, in, null); - sink(getTable_columnKeyDefault(out)); // $ hasValueFlow + sink(getTable_columnKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;put;(Object,Object,Object);;Argument[1];SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];value" ImmutableTable out = null; Object in = (Object)source(); out.put(null, in, null); - sink(getTable_columnKeyDefault(out)); // $ hasValueFlow + sink(getTable_columnKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;put;(Object,Object,Object);;Argument[1];SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];value" ArrayTable out = null; Object in = (Object)source(); out.put(null, in, null); - sink(getTable_columnKeyDefault(out)); // $ hasValueFlow + sink(getTable_columnKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;put;(Object,Object,Object);;Argument[2];MapValue of Argument[-1];value" Table out = null; Object in = (Object)source(); out.put(null, null, in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;put;(Object,Object,Object);;Argument[2];MapValue of Argument[-1];value" ImmutableTable out = null; Object in = (Object)source(); out.put(null, null, in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;put;(Object,Object,Object);;Argument[2];MapValue of Argument[-1];value" ArrayTable out = null; Object in = (Object)source(); out.put(null, null, in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;putAll;(Table);;MapValue of Argument[0];MapValue of Argument[-1];value" Table out = null; Table in = (Table)newWithMapValueDefault(source()); out.putAll(in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;putAll;(Table);;MapValue of Argument[0];MapValue of Argument[-1];value" ImmutableTable out = null; Table in = (Table)newWithMapValueDefault(source()); out.putAll(in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;putAll;(Table);;MapValue of Argument[0];MapValue of Argument[-1];value" ArrayTable out = null; Table in = (Table)newWithMapValueDefault(source()); out.putAll(in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;putAll;(Table);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];value" Table out = null; Table in = (Table)newWithTable_columnKeyDefault(source()); out.putAll(in); - sink(getTable_columnKeyDefault(out)); // $ hasValueFlow + sink(getTable_columnKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;putAll;(Table);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];value" ImmutableTable out = null; Table in = (Table)newWithTable_columnKeyDefault(source()); out.putAll(in); - sink(getTable_columnKeyDefault(out)); // $ hasValueFlow + sink(getTable_columnKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;putAll;(Table);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];value" ArrayTable out = null; Table in = (Table)newWithTable_columnKeyDefault(source()); out.putAll(in); - sink(getTable_columnKeyDefault(out)); // $ hasValueFlow + sink(getTable_columnKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;putAll;(Table);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];value" Table out = null; Table in = (Table)newWithTable_rowKeyDefault(source()); out.putAll(in); - sink(getTable_rowKeyDefault(out)); // $ hasValueFlow + sink(getTable_rowKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;putAll;(Table);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];value" ImmutableTable out = null; Table in = (Table)newWithTable_rowKeyDefault(source()); out.putAll(in); - sink(getTable_rowKeyDefault(out)); // $ hasValueFlow + sink(getTable_rowKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;putAll;(Table);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];value" ArrayTable out = null; Table in = (Table)newWithTable_rowKeyDefault(source()); out.putAll(in); - sink(getTable_rowKeyDefault(out)); // $ hasValueFlow + sink(getTable_rowKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;remove;(Object,Object);;MapValue of Argument[-1];ReturnValue;value" @@ -7347,175 +7361,175 @@ public class Test { Table.Cell out = null; Object in = (Object)source(); out = Tables.immutableCell(in, null, null); - sink(getTable_rowKeyDefault(out)); // $ hasValueFlow + sink(out.getRowKey()); // $ hasValueFlow } { // "com.google.common.collect;Tables;false;immutableCell;(Object,Object,Object);;Argument[1];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value" Table.Cell out = null; Object in = (Object)source(); out = Tables.immutableCell(null, in, null); - sink(getTable_columnKeyDefault(out)); // $ hasValueFlow + sink(out.getColumnKey()); // $ hasValueFlow } { // "com.google.common.collect;Tables;false;immutableCell;(Object,Object,Object);;Argument[2];MapValue of ReturnValue;value" Table.Cell out = null; Object in = (Object)source(); out = Tables.immutableCell(null, null, in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(out.getValue()); // $ hasValueFlow } { // "com.google.common.collect;Tables;false;newCustomTable;(Map,Supplier);;MapKey of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value" Table out = null; Map in = (Map)Map.of(source(), null); out = Tables.newCustomTable(in, null); - sink(getTable_rowKeyDefault(out)); // $ hasValueFlow + sink(getTable_rowKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Tables;false;newCustomTable;(Map,Supplier);;MapKey of MapValue of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value" Table out = null; Map in = (Map)Map.of(null, newWithMapKeyDefault(source())); out = Tables.newCustomTable(in, null); - sink(getTable_columnKeyDefault(out)); // $ hasValueFlow + sink(getTable_columnKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Tables;false;newCustomTable;(Map,Supplier);;MapValue of MapValue of Argument[0];MapValue of ReturnValue;value" Table out = null; Map in = (Map)Map.of(null, newWithMapValueDefault(source())); out = Tables.newCustomTable(in, null); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Tables;false;synchronizedTable;(Table);;MapValue of Argument[0];MapValue of ReturnValue;value" Table out = null; Table in = (Table)newWithMapValueDefault(source()); out = Tables.synchronizedTable(in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Tables;false;synchronizedTable;(Table);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value" Table out = null; Table in = (Table)newWithTable_columnKeyDefault(source()); out = Tables.synchronizedTable(in); - sink(getTable_columnKeyDefault(out)); // $ hasValueFlow + sink(getTable_columnKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Tables;false;synchronizedTable;(Table);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value" Table out = null; Table in = (Table)newWithTable_rowKeyDefault(source()); out = Tables.synchronizedTable(in); - sink(getTable_rowKeyDefault(out)); // $ hasValueFlow + sink(getTable_rowKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Tables;false;transformValues;(Table,Function);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value" Table out = null; Table in = (Table)newWithTable_columnKeyDefault(source()); out = Tables.transformValues(in, null); - sink(getTable_columnKeyDefault(out)); // $ hasValueFlow + sink(getTable_columnKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Tables;false;transformValues;(Table,Function);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value" Table out = null; Table in = (Table)newWithTable_rowKeyDefault(source()); out = Tables.transformValues(in, null); - sink(getTable_rowKeyDefault(out)); // $ hasValueFlow + sink(getTable_rowKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Tables;false;transpose;(Table);;MapValue of Argument[0];MapValue of ReturnValue;value" Table out = null; Table in = (Table)newWithMapValueDefault(source()); out = Tables.transpose(in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Tables;false;transpose;(Table);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value" Table out = null; Table in = (Table)newWithTable_columnKeyDefault(source()); out = Tables.transpose(in); - sink(getTable_rowKeyDefault(out)); // $ hasValueFlow + sink(getTable_rowKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Tables;false;transpose;(Table);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value" Table out = null; Table in = (Table)newWithTable_rowKeyDefault(source()); out = Tables.transpose(in); - sink(getTable_columnKeyDefault(out)); // $ hasValueFlow + sink(getTable_columnKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Tables;false;unmodifiableRowSortedTable;(RowSortedTable);;MapValue of Argument[0];MapValue of ReturnValue;value" RowSortedTable out = null; RowSortedTable in = (RowSortedTable)newWithMapValueDefault(source()); out = Tables.unmodifiableRowSortedTable(in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Tables;false;unmodifiableRowSortedTable;(RowSortedTable);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value" RowSortedTable out = null; RowSortedTable in = (RowSortedTable)newWithTable_columnKeyDefault(source()); out = Tables.unmodifiableRowSortedTable(in); - sink(getTable_columnKeyDefault(out)); // $ hasValueFlow + sink(getTable_columnKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Tables;false;unmodifiableRowSortedTable;(RowSortedTable);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value" RowSortedTable out = null; RowSortedTable in = (RowSortedTable)newWithTable_rowKeyDefault(source()); out = Tables.unmodifiableRowSortedTable(in); - sink(getTable_rowKeyDefault(out)); // $ hasValueFlow + sink(getTable_rowKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Tables;false;unmodifiableTable;(Table);;MapValue of Argument[0];MapValue of ReturnValue;value" Table out = null; Table in = (Table)newWithMapValueDefault(source()); out = Tables.unmodifiableTable(in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Tables;false;unmodifiableTable;(Table);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value" Table out = null; Table in = (Table)newWithTable_columnKeyDefault(source()); out = Tables.unmodifiableTable(in); - sink(getTable_columnKeyDefault(out)); // $ hasValueFlow + sink(getTable_columnKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Tables;false;unmodifiableTable;(Table);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value" Table out = null; Table in = (Table)newWithTable_rowKeyDefault(source()); out = Tables.unmodifiableTable(in); - sink(getTable_rowKeyDefault(out)); // $ hasValueFlow + sink(getTable_rowKey(out)); // $ hasValueFlow } { // "com.google.common.collect;TreeBasedTable;true;create;(TreeBasedTable);;MapValue of Argument[0];MapValue of ReturnValue;value" TreeBasedTable out = null; TreeBasedTable in = (TreeBasedTable)newWithMapValueDefault(source()); out = TreeBasedTable.create(in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;TreeBasedTable;true;create;(TreeBasedTable);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value" TreeBasedTable out = null; TreeBasedTable in = (TreeBasedTable)newWithTable_columnKeyDefault(source()); out = TreeBasedTable.create(in); - sink(getTable_columnKeyDefault(out)); // $ hasValueFlow + sink(getTable_columnKey(out)); // $ hasValueFlow } { // "com.google.common.collect;TreeBasedTable;true;create;(TreeBasedTable);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value" TreeBasedTable out = null; TreeBasedTable in = (TreeBasedTable)newWithTable_rowKeyDefault(source()); out = TreeBasedTable.create(in); - sink(getTable_rowKeyDefault(out)); // $ hasValueFlow + sink(getTable_rowKey(out)); // $ hasValueFlow } { // "com.google.common.collect;TreeMultimap;true;create;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value" TreeMultimap out = null; Multimap in = (Multimap)newWithMapKeyDefault(source()); out = TreeMultimap.create(in); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;TreeMultimap;true;create;(Multimap);;MapValue of Argument[0];MapValue of ReturnValue;value" TreeMultimap out = null; Multimap in = (Multimap)newWithMapValueDefault(source()); out = TreeMultimap.create(in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;TreeMultiset;true;create;(Iterable);;Element of Argument[0];Element of ReturnValue;value" diff --git a/java/ql/test/library-tests/frameworks/guava/generated/collect/test.ql b/java/ql/test/library-tests/frameworks/guava/generated/collect/test.ql index 8d0b9f65223..557255d443f 100644 --- a/java/ql/test/library-tests/frameworks/guava/generated/collect/test.ql +++ b/java/ql/test/library-tests/frameworks/guava/generated/collect/test.ql @@ -1,8 +1,5 @@ import java -import semmle.code.java.dataflow.DataFlow -import semmle.code.java.dataflow.ExternalFlow -import semmle.code.java.dataflow.TaintTracking -import TestUtilities.InlineExpectationsTest +import TestUtilities.InlineFlowTest class SummaryModelTest extends SummaryModelCsv { override predicate row(string row) { @@ -26,51 +23,3 @@ class SummaryModelTest extends SummaryModelCsv { ] } } - -class ValueFlowConf extends DataFlow::Configuration { - ValueFlowConf() { this = "qltest:valueFlowConf" } - - override predicate isSource(DataFlow::Node n) { - n.asExpr().(MethodAccess).getMethod().hasName("source") - } - - override predicate isSink(DataFlow::Node n) { - n.asExpr().(Argument).getCall().getCallee().hasName("sink") - } -} - -class TaintFlowConf extends TaintTracking::Configuration { - TaintFlowConf() { this = "qltest:taintFlowConf" } - - override predicate isSource(DataFlow::Node n) { - n.asExpr().(MethodAccess).getMethod().hasName("source") - } - - override predicate isSink(DataFlow::Node n) { - n.asExpr().(Argument).getCall().getCallee().hasName("sink") - } -} - -class HasFlowTest extends InlineExpectationsTest { - HasFlowTest() { this = "HasFlowTest" } - - override string getARelevantTag() { result = ["hasValueFlow", "hasTaintFlow"] } - - override predicate hasActualResult(Location location, string element, string tag, string value) { - tag = "hasValueFlow" and - exists(DataFlow::Node src, DataFlow::Node sink, ValueFlowConf conf | conf.hasFlow(src, sink) | - sink.getLocation() = location and - element = sink.toString() and - value = "" - ) - or - tag = "hasTaintFlow" and - exists(DataFlow::Node src, DataFlow::Node sink, TaintFlowConf conf | - conf.hasFlow(src, sink) and not any(ValueFlowConf c).hasFlow(src, sink) - | - sink.getLocation() = location and - element = sink.toString() and - value = "" - ) - } -} From e946f49b64b0a929bd802150f7c1cd1b46c31eb3 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Fri, 17 Sep 2021 11:22:50 +0100 Subject: [PATCH 506/741] [Test gen] Gen methods for Set and Iterator --- .../src/utils/FlowTestCaseSupportMethods.qll | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/java/ql/src/utils/FlowTestCaseSupportMethods.qll b/java/ql/src/utils/FlowTestCaseSupportMethods.qll index 8d465efd4fb..1e6c1bcc063 100644 --- a/java/ql/src/utils/FlowTestCaseSupportMethods.qll +++ b/java/ql/src/utils/FlowTestCaseSupportMethods.qll @@ -364,6 +364,34 @@ private class ListGenMethod extends GenMethod { override string getCall(string arg) { result = "List.of(" + arg + ")" } } +private class SetGenMethod extends GenMethod { + SetGenMethod() { this = "SetGenMethod" } + + override predicate appliesTo(Type t, Content c) { + exists(GenericType set | set.hasQualifiedName("java.util", "Set") | + t.getErasure() = set.getErasure() + ) and + c instanceof CollectionContent + } + + bindingset[arg] + override string getCall(string arg) { result = "Set.of(" + arg + ")" } +} + +private class IteratorGenMethod extends GenMethod { + IteratorGenMethod() { this = "IteratorGenMethod" } + + override predicate appliesTo(Type t, Content c) { + exists(GenericType set | set.hasQualifiedName("java.util", "Iterator") | + t.getErasure() = set.getErasure() + ) and + c instanceof CollectionContent + } + + bindingset[arg] + override string getCall(string arg) { result = "List.of(" + arg + ").iterator()" } +} + private class OptionalGenMethod extends GenMethod { OptionalGenMethod() { this = "optionalgenmethod" } From 90bc138049d1717cab61899cc9d23fdddad1e8a6 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Fri, 17 Sep 2021 14:08:34 +0100 Subject: [PATCH 507/741] CPP: Fix QLDoc comments. --- cpp/ql/src/Security/CWE/CWE-311/CleartextTransmission.ql | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/cpp/ql/src/Security/CWE/CWE-311/CleartextTransmission.ql b/cpp/ql/src/Security/CWE/CWE-311/CleartextTransmission.ql index 26cd2d89e11..c130c9a49b6 100644 --- a/cpp/ql/src/Security/CWE/CWE-311/CleartextTransmission.ql +++ b/cpp/ql/src/Security/CWE/CWE-311/CleartextTransmission.ql @@ -35,7 +35,7 @@ abstract class NetworkSendRecv extends FunctionCall { /** * A function call that sends data over a network. * - * note: functions such as `read` may be reading from a network source or a file. We could attempt to determine which, and sort results into `cpp/cleartext-transmission` and perhaps `cpp/cleartext-storage-file`. In practice it probably isn't very important which query reports a result as long as its reported exactly once. + * note: functions such as `write` may be writing to a network source or a file. We could attempt to determine which, and sort results into `cpp/cleartext-transmission` and perhaps `cpp/cleartext-storage-file`. In practice it usually isn't very important which query reports a result as long as its reported exactly once. */ class NetworkSend extends NetworkSendRecv { NetworkSend() { @@ -76,6 +76,8 @@ class SensitiveSendRecvConfiguration extends TaintTracking::Configuration { override predicate isSink(DataFlow::Node sink) { exists(NetworkSendRecv transmission | sink.asExpr() = transmission.getDataExpr() and + + // a zero file descriptor is standard input, which is not interesting for this query. not exists(Zero zero | DataFlow::localFlow(DataFlow::exprNode(zero), DataFlow::exprNode(transmission.getSocketExpr())) From 51243454c890c3c58c0d9ba767dfec8a030ba2ed Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Fri, 17 Sep 2021 15:10:55 +0100 Subject: [PATCH 508/741] C++: Change note. --- cpp/change-notes/2021-06-10-cleartext-transmission.md | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 cpp/change-notes/2021-06-10-cleartext-transmission.md diff --git a/cpp/change-notes/2021-06-10-cleartext-transmission.md b/cpp/change-notes/2021-06-10-cleartext-transmission.md new file mode 100644 index 00000000000..ce6debf1407 --- /dev/null +++ b/cpp/change-notes/2021-06-10-cleartext-transmission.md @@ -0,0 +1,2 @@ +lgtm,codescanning +* A new query (`cpp/cleartext-transmission`) has been added. This is similar to the `cpp/cleartext-storage-file`, `cpp/cleartext-storage-buffer` and `cpp/cleartext-storage-database` queries but looks for cases where sensitive information is most likely transmitted over a network. From e7c82d7370e7a6b7d6d5981a306b87d609373cdc Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Fri, 17 Sep 2021 16:14:24 +0100 Subject: [PATCH 509/741] C++: Accept subpaths in tests. --- .../CWE/CWE-311/semmle/tests/CleartextTransmission.expected | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-311/semmle/tests/CleartextTransmission.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-311/semmle/tests/CleartextTransmission.expected index ae2333ba8c9..3534c2c7cad 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-311/semmle/tests/CleartextTransmission.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-311/semmle/tests/CleartextTransmission.expected @@ -2,9 +2,11 @@ edges | test3.cpp:68:21:68:29 | password1 | test3.cpp:70:15:70:17 | ptr | | test3.cpp:75:15:75:22 | password | test3.cpp:77:15:77:17 | ptr | | test3.cpp:106:20:106:25 | buffer | test3.cpp:108:14:108:19 | buffer | +| test3.cpp:111:28:111:33 | buffer | test3.cpp:113:9:113:14 | buffer | | test3.cpp:120:9:120:23 | global_password | test3.cpp:138:16:138:29 | call to get_global_str | | test3.cpp:128:11:128:18 | password | test3.cpp:106:20:106:25 | buffer | | test3.cpp:132:21:132:22 | call to id | test3.cpp:134:15:134:17 | ptr | +| test3.cpp:132:24:132:32 | password1 | test3.cpp:111:28:111:33 | buffer | | test3.cpp:132:24:132:32 | password1 | test3.cpp:132:21:132:22 | call to id | | test3.cpp:138:16:138:29 | call to get_global_str | test3.cpp:140:15:140:18 | data | | test3.cpp:151:19:151:26 | password | test3.cpp:153:15:153:20 | buffer | @@ -20,6 +22,8 @@ nodes | test3.cpp:95:12:95:19 | password | semmle.label | password | | test3.cpp:106:20:106:25 | buffer | semmle.label | buffer | | test3.cpp:108:14:108:19 | buffer | semmle.label | buffer | +| test3.cpp:111:28:111:33 | buffer | semmle.label | buffer | +| test3.cpp:113:9:113:14 | buffer | semmle.label | buffer | | test3.cpp:120:9:120:23 | global_password | semmle.label | global_password | | test3.cpp:128:11:128:18 | password | semmle.label | password | | test3.cpp:132:21:132:22 | call to id | semmle.label | call to id | @@ -29,6 +33,8 @@ nodes | test3.cpp:140:15:140:18 | data | semmle.label | data | | test3.cpp:151:19:151:26 | password | semmle.label | password | | test3.cpp:153:15:153:20 | buffer | semmle.label | buffer | +subpaths +| test3.cpp:132:24:132:32 | password1 | test3.cpp:111:28:111:33 | buffer | test3.cpp:113:9:113:14 | buffer | test3.cpp:132:21:132:22 | call to id | #select | test3.cpp:20:3:20:6 | call to send | test3.cpp:20:15:20:23 | password1 | test3.cpp:20:15:20:23 | password1 | This operation transmits 'password1', which may contain unencrypted sensitive data from $@ | test3.cpp:20:15:20:23 | password1 | password1 | | test3.cpp:24:3:24:6 | call to send | test3.cpp:24:15:24:23 | password2 | test3.cpp:24:15:24:23 | password2 | This operation transmits 'password2', which may contain unencrypted sensitive data from $@ | test3.cpp:24:15:24:23 | password2 | password2 | From 9e41f43ee2ccc67cfc811f1f28857e62f8cb7fea Mon Sep 17 00:00:00 2001 From: Daniel Santos Date: Fri, 17 Sep 2021 10:15:48 -0500 Subject: [PATCH 510/741] Fix: android.util.Log is final. No inheritance handling is needed. --- java/ql/src/experimental/semmle/code/java/Logging.qll | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/java/ql/src/experimental/semmle/code/java/Logging.qll b/java/ql/src/experimental/semmle/code/java/Logging.qll index 9d7efb1f330..7543e0514fc 100644 --- a/java/ql/src/experimental/semmle/code/java/Logging.qll +++ b/java/ql/src/experimental/semmle/code/java/Logging.qll @@ -29,13 +29,8 @@ class LoggingCall extends MethodAccess { ) or exists(RefType t, Method m | t.hasQualifiedName("android.util", "Log") | - ( - m.hasName(["d", "e", "i", "v", "w", "wtf"]) - ) and - ( - m.getDeclaringType().getASourceSupertype*() = t or - m.getDeclaringType().extendsOrImplements*(t) - ) and + m.hasName(["d", "e", "i", "v", "w", "wtf"]) and + m.getDeclaringType() = t and m.getReturnType() instanceof IntegralType and this = m.getAReference() ) From 3ef09da1df4d0c0dbb1f7ca82d8737fcb42d2195 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Fri, 17 Sep 2021 16:57:49 +0100 Subject: [PATCH 511/741] Add models for more of methods; update stubs --- .../java/frameworks/guava/Collections.qll | 30 ++++++++++++++ .../com/google/common/collect/ArrayTable.java | 2 +- .../google/common/collect/ImmutableBiMap.java | 40 +++++++++++++++++++ .../collect/ImmutableBiMapFauxverideShim.java | 14 +++++++ 4 files changed, 85 insertions(+), 1 deletion(-) create mode 100644 java/ql/test/stubs/guava-30.0/com/google/common/collect/ImmutableBiMap.java create mode 100644 java/ql/test/stubs/guava-30.0/com/google/common/collect/ImmutableBiMapFauxverideShim.java diff --git a/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll b/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll index 1552f9474c2..7e03acac67f 100644 --- a/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll +++ b/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll @@ -169,6 +169,16 @@ private class GuavaCollectCsv extends SummaryModelCsv { "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[7];MapValue of ReturnValue;value", "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[8];MapKey of ReturnValue;value", "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[9];MapValue of ReturnValue;value", + "com.google.common.collect;ImmutableBiMap;true;of;;;Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;ImmutableBiMap;true;of;;;Argument[1];MapValue of ReturnValue;value", + "com.google.common.collect;ImmutableBiMap;true;of;;;Argument[2];MapKey of ReturnValue;value", + "com.google.common.collect;ImmutableBiMap;true;of;;;Argument[3];MapValue of ReturnValue;value", + "com.google.common.collect;ImmutableBiMap;true;of;;;Argument[4];MapKey of ReturnValue;value", + "com.google.common.collect;ImmutableBiMap;true;of;;;Argument[5];MapValue of ReturnValue;value", + "com.google.common.collect;ImmutableBiMap;true;of;;;Argument[6];MapKey of ReturnValue;value", + "com.google.common.collect;ImmutableBiMap;true;of;;;Argument[7];MapValue of ReturnValue;value", + "com.google.common.collect;ImmutableBiMap;true;of;;;Argument[8];MapKey of ReturnValue;value", + "com.google.common.collect;ImmutableBiMap;true;of;;;Argument[9];MapValue of ReturnValue;value", "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[0];MapKey of ReturnValue;value", "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[1];MapValue of ReturnValue;value", "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[2];MapKey of ReturnValue;value", @@ -179,6 +189,26 @@ private class GuavaCollectCsv extends SummaryModelCsv { "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[7];MapValue of ReturnValue;value", "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[8];MapKey of ReturnValue;value", "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[9];MapValue of ReturnValue;value", + "com.google.common.collect;ImmutableListMultimap;true;of;;;Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;ImmutableListMultimap;true;of;;;Argument[1];MapValue of ReturnValue;value", + "com.google.common.collect;ImmutableListMultimap;true;of;;;Argument[2];MapKey of ReturnValue;value", + "com.google.common.collect;ImmutableListMultimap;true;of;;;Argument[3];MapValue of ReturnValue;value", + "com.google.common.collect;ImmutableListMultimap;true;of;;;Argument[4];MapKey of ReturnValue;value", + "com.google.common.collect;ImmutableListMultimap;true;of;;;Argument[5];MapValue of ReturnValue;value", + "com.google.common.collect;ImmutableListMultimap;true;of;;;Argument[6];MapKey of ReturnValue;value", + "com.google.common.collect;ImmutableListMultimap;true;of;;;Argument[7];MapValue of ReturnValue;value", + "com.google.common.collect;ImmutableListMultimap;true;of;;;Argument[8];MapKey of ReturnValue;value", + "com.google.common.collect;ImmutableListMultimap;true;of;;;Argument[9];MapValue of ReturnValue;value", + "com.google.common.collect;ImmutableSetMultimap;true;of;;;Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;ImmutableSetMultimap;true;of;;;Argument[1];MapValue of ReturnValue;value", + "com.google.common.collect;ImmutableSetMultimap;true;of;;;Argument[2];MapKey of ReturnValue;value", + "com.google.common.collect;ImmutableSetMultimap;true;of;;;Argument[3];MapValue of ReturnValue;value", + "com.google.common.collect;ImmutableSetMultimap;true;of;;;Argument[4];MapKey of ReturnValue;value", + "com.google.common.collect;ImmutableSetMultimap;true;of;;;Argument[5];MapValue of ReturnValue;value", + "com.google.common.collect;ImmutableSetMultimap;true;of;;;Argument[6];MapKey of ReturnValue;value", + "com.google.common.collect;ImmutableSetMultimap;true;of;;;Argument[7];MapValue of ReturnValue;value", + "com.google.common.collect;ImmutableSetMultimap;true;of;;;Argument[8];MapKey of ReturnValue;value", + "com.google.common.collect;ImmutableSetMultimap;true;of;;;Argument[9];MapValue of ReturnValue;value", "com.google.common.collect;ImmutableClassToInstanceMap;true;of;(Class,Object);;Argument[0];MapKey of ReturnValue;value", "com.google.common.collect;ImmutableClassToInstanceMap;true;of;(Class,Object);;Argument[1];MapValue of ReturnValue;value", "com.google.common.collect;ImmutableTable;true;of;(Object,Object,Object);;Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value", diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/ArrayTable.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/ArrayTable.java index f04ed355d9a..32543b5bc6a 100644 --- a/java/ql/test/stubs/guava-30.0/com/google/common/collect/ArrayTable.java +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/ArrayTable.java @@ -30,7 +30,7 @@ public class ArrayTable extends AbstractTable implements Seria public V put(R p0, C p1, V p2){ return null; } public V remove(Object p0, Object p1){ return null; } public V set(int p0, int p1, V p2){ return null; } - public V[] toArray(Class p0){ return null; } + public V[][] toArray(Class p0){ return null; } public boolean contains(Object p0, Object p1){ return false; } public boolean containsColumn(Object p0){ return false; } public boolean containsRow(Object p0){ return false; } diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/ImmutableBiMap.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/ImmutableBiMap.java new file mode 100644 index 00000000000..b573c4aad0c --- /dev/null +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/ImmutableBiMap.java @@ -0,0 +1,40 @@ +// Generated automatically from com.google.common.collect.ImmutableBiMap for testing purposes + +package com.google.common.collect; + +import com.google.common.collect.BiMap; +import com.google.common.collect.ImmutableBiMapFauxverideShim; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableSet; +import java.util.Comparator; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collector; + +abstract public class ImmutableBiMap extends ImmutableBiMapFauxverideShim implements BiMap +{ + public ImmutableSet values(){ return null; } + public abstract ImmutableBiMap inverse(); + public final V forcePut(K p0, V p1){ return null; } + public static ImmutableBiMap.Builder builder(){ return null; } + public static ImmutableBiMap.Builder builderWithExpectedSize(int p0){ return null; } + public static ImmutableBiMap copyOf(Iterable> p0){ return null; } + public static ImmutableBiMap copyOf(Map p0){ return null; } + public static ImmutableBiMap of(){ return null; } + public static ImmutableBiMap of(K p0, V p1){ return null; } + public static ImmutableBiMap of(K p0, V p1, K p2, V p3){ return null; } + public static ImmutableBiMap of(K p0, V p1, K p2, V p3, K p4, V p5){ return null; } + public static ImmutableBiMap of(K p0, V p1, K p2, V p3, K p4, V p5, K p6, V p7){ return null; } + public static ImmutableBiMap of(K p0, V p1, K p2, V p3, K p4, V p5, K p6, V p7, K p8, V p9){ return null; } + public static Collector> toImmutableBiMap(Function p0, Function p1){ return null; } + static public class Builder extends ImmutableMap.Builder + { + public Builder(){} + public ImmutableBiMap.Builder orderEntriesByValue(Comparator p0){ return null; } + public ImmutableBiMap.Builder put(K p0, V p1){ return null; } + public ImmutableBiMap.Builder put(Map.Entry p0){ return null; } + public ImmutableBiMap.Builder putAll(Iterable> p0){ return null; } + public ImmutableBiMap.Builder putAll(Map p0){ return null; } + public ImmutableBiMap build(){ return null; } + } +} diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/collect/ImmutableBiMapFauxverideShim.java b/java/ql/test/stubs/guava-30.0/com/google/common/collect/ImmutableBiMapFauxverideShim.java new file mode 100644 index 00000000000..d55d3be8d28 --- /dev/null +++ b/java/ql/test/stubs/guava-30.0/com/google/common/collect/ImmutableBiMapFauxverideShim.java @@ -0,0 +1,14 @@ +// Generated automatically from com.google.common.collect.ImmutableBiMapFauxverideShim for testing purposes + +package com.google.common.collect; + +import com.google.common.collect.ImmutableMap; +import java.util.function.BinaryOperator; +import java.util.function.Function; +import java.util.stream.Collector; + +abstract class ImmutableBiMapFauxverideShim extends ImmutableMap +{ + public static Collector> toImmutableMap(Function p0, Function p1){ return null; } + public static Collector> toImmutableMap(Function p0, Function p1, BinaryOperator p2){ return null; } +} From 4929c66e608ac106ff2d68f7013e3e4e2d2e1c1f Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Fri, 17 Sep 2021 17:37:46 +0100 Subject: [PATCH 512/741] Implement gen methods for collections and maps --- .../guava/generated/collect/Test.java | 1329 +++++++++++++---- 1 file changed, 1047 insertions(+), 282 deletions(-) diff --git a/java/ql/test/library-tests/frameworks/guava/generated/collect/Test.java b/java/ql/test/library-tests/frameworks/guava/generated/collect/Test.java index 273886a7613..d17668bcee0 100644 --- a/java/ql/test/library-tests/frameworks/guava/generated/collect/Test.java +++ b/java/ql/test/library-tests/frameworks/guava/generated/collect/Test.java @@ -13,6 +13,7 @@ import com.google.common.collect.HashBasedTable; import com.google.common.collect.HashBiMap; import com.google.common.collect.HashMultimap; import com.google.common.collect.HashMultiset; +import com.google.common.collect.ImmutableBiMap; import com.google.common.collect.ImmutableClassToInstanceMap; import com.google.common.collect.ImmutableCollection; import com.google.common.collect.ImmutableList; @@ -100,6 +101,7 @@ public class Test { Map.Entry newEntryWithMapKey(K key) { return Map.of(key, null).entrySet().iterator().next(); } R getTable_rowKey(ImmutableTable.Builder b) { return getTable_rowKey(b.build()); } R getTable_rowKey(Table t) { return t.rowKeySet().iterator().next(); } + Multiset.Entry newEntryWithElement(T el) { return getElement(ImmutableMultiset.of(el).entrySet()); } T getArrayElement(T[] array) { return array[0]; } T getElement(Enumeration it) { return it.nextElement(); } T getElement(ImmutableCollection.Builder b) { return getElement(b.build()); } @@ -135,14 +137,14 @@ public class Test { { // "com.google.common.collect;ArrayListMultimap;true;create;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value" ArrayListMultimap out = null; - Multimap in = (Multimap)newWithMapKeyDefault(source()); + Multimap in = (Multimap)ImmutableMultimap.of(source(), null); out = ArrayListMultimap.create(in); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ArrayListMultimap;true;create;(Multimap);;MapValue of Argument[0];MapValue of ReturnValue;value" ArrayListMultimap out = null; - Multimap in = (Multimap)newWithMapValueDefault(source()); + Multimap in = (Multimap)ImmutableMultimap.of(null, source()); out = ArrayListMultimap.create(in); sink(getMapValue(out)); // $ hasValueFlow } @@ -160,6 +162,13 @@ public class Test { out = ArrayTable.create(null, in); sink(getTable_columnKey(out)); // $ hasValueFlow } + { + // "com.google.common.collect;BiMap;true;forcePut;(Object,Object);;Argument[0];MapKey of Argument[-1];value" + ImmutableBiMap out = null; + Object in = (Object)source(); + out.forcePut(in, null); + sink(getMapKey(out)); // $ hasValueFlow + } { // "com.google.common.collect;BiMap;true;forcePut;(Object,Object);;Argument[0];MapKey of Argument[-1];value" HashBiMap out = null; @@ -174,6 +183,13 @@ public class Test { out.forcePut(in, null); sink(getMapKey(out)); // $ hasValueFlow } + { + // "com.google.common.collect;BiMap;true;forcePut;(Object,Object);;Argument[1];MapValue of Argument[-1];value" + ImmutableBiMap out = null; + Object in = (Object)source(); + out.forcePut(null, in); + sink(getMapValue(out)); // $ hasValueFlow + } { // "com.google.common.collect;BiMap;true;forcePut;(Object,Object);;Argument[1];MapValue of Argument[-1];value" HashBiMap out = null; @@ -190,36 +206,50 @@ public class Test { } { // "com.google.common.collect;BiMap;true;inverse;();;MapKey of Argument[-1];MapValue of ReturnValue;value" - BiMap out = null; - HashBiMap in = (HashBiMap)newWithMapKeyDefault(source()); + ImmutableBiMap out = null; + ImmutableBiMap in = (ImmutableBiMap)ImmutableBiMap.of(source(), null); out = in.inverse(); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;BiMap;true;inverse;();;MapKey of Argument[-1];MapValue of ReturnValue;value" BiMap out = null; - BiMap in = (BiMap)newWithMapKeyDefault(source()); + HashBiMap in = (HashBiMap)HashBiMap.create(Map.of(source(), null)); + out = in.inverse(); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;BiMap;true;inverse;();;MapKey of Argument[-1];MapValue of ReturnValue;value" + BiMap out = null; + BiMap in = (BiMap)ImmutableBiMap.of(source(), null); out = in.inverse(); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;BiMap;true;inverse;();;MapValue of Argument[-1];MapKey of ReturnValue;value" - BiMap out = null; - HashBiMap in = (HashBiMap)newWithMapValueDefault(source()); + ImmutableBiMap out = null; + ImmutableBiMap in = (ImmutableBiMap)ImmutableBiMap.of(null, source()); out = in.inverse(); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;BiMap;true;inverse;();;MapValue of Argument[-1];MapKey of ReturnValue;value" BiMap out = null; - BiMap in = (BiMap)newWithMapValueDefault(source()); + HashBiMap in = (HashBiMap)HashBiMap.create(Map.of(null, source())); + out = in.inverse(); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;BiMap;true;inverse;();;MapValue of Argument[-1];MapKey of ReturnValue;value" + BiMap out = null; + BiMap in = (BiMap)ImmutableBiMap.of(null, source()); out = in.inverse(); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ClassToInstanceMap;true;getInstance;(Class);;MapValue of Argument[-1];ReturnValue;value" Object out = null; - MutableClassToInstanceMap in = (MutableClassToInstanceMap)newWithMapValueDefault(source()); + MutableClassToInstanceMap in = (MutableClassToInstanceMap)MutableClassToInstanceMap.create(Map.of(null, source())); out = in.getInstance(null); sink(out); // $ hasValueFlow } @@ -261,7 +291,7 @@ public class Test { { // "com.google.common.collect;ClassToInstanceMap;true;putInstance;(Class,Object);;MapValue of Argument[-1];ReturnValue;value" Object out = null; - MutableClassToInstanceMap in = (MutableClassToInstanceMap)newWithMapValueDefault(source()); + MutableClassToInstanceMap in = (MutableClassToInstanceMap)MutableClassToInstanceMap.create(Map.of(null, source())); out = in.putInstance(null, null); sink(out); // $ hasValueFlow } @@ -352,14 +382,14 @@ public class Test { { // "com.google.common.collect;HashMultimap;true;create;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value" HashMultimap out = null; - Multimap in = (Multimap)newWithMapKeyDefault(source()); + Multimap in = (Multimap)ImmutableMultimap.of(source(), null); out = HashMultimap.create(in); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;HashMultimap;true;create;(Multimap);;MapValue of Argument[0];MapValue of ReturnValue;value" HashMultimap out = null; - Multimap in = (Multimap)newWithMapValueDefault(source()); + Multimap in = (Multimap)ImmutableMultimap.of(null, source()); out = HashMultimap.create(in); sink(getMapValue(out)); // $ hasValueFlow } @@ -370,6 +400,216 @@ public class Test { out = HashMultiset.create(in); sink(getElement(out)); // $ hasValueFlow } + { + // "com.google.common.collect;ImmutableBiMap;true;of;;;Argument[0];MapKey of ReturnValue;value" + ImmutableBiMap out = null; + Object in = (Object)source(); + out = ImmutableBiMap.of(in, null, null, null, null, null, null, null, null, null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableBiMap;true;of;;;Argument[0];MapKey of ReturnValue;value" + ImmutableBiMap out = null; + Object in = (Object)source(); + out = ImmutableBiMap.of(in, null, null, null, null, null, null, null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableBiMap;true;of;;;Argument[0];MapKey of ReturnValue;value" + ImmutableBiMap out = null; + Object in = (Object)source(); + out = ImmutableBiMap.of(in, null, null, null, null, null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableBiMap;true;of;;;Argument[0];MapKey of ReturnValue;value" + ImmutableBiMap out = null; + Object in = (Object)source(); + out = ImmutableBiMap.of(in, null, null, null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableBiMap;true;of;;;Argument[0];MapKey of ReturnValue;value" + ImmutableBiMap out = null; + Object in = (Object)source(); + out = ImmutableBiMap.of(in, null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableBiMap;true;of;;;Argument[1];MapValue of ReturnValue;value" + ImmutableBiMap out = null; + Object in = (Object)source(); + out = ImmutableBiMap.of(null, in, null, null, null, null, null, null, null, null); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableBiMap;true;of;;;Argument[1];MapValue of ReturnValue;value" + ImmutableBiMap out = null; + Object in = (Object)source(); + out = ImmutableBiMap.of(null, in, null, null, null, null, null, null); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableBiMap;true;of;;;Argument[1];MapValue of ReturnValue;value" + ImmutableBiMap out = null; + Object in = (Object)source(); + out = ImmutableBiMap.of(null, in, null, null, null, null); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableBiMap;true;of;;;Argument[1];MapValue of ReturnValue;value" + ImmutableBiMap out = null; + Object in = (Object)source(); + out = ImmutableBiMap.of(null, in, null, null); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableBiMap;true;of;;;Argument[1];MapValue of ReturnValue;value" + ImmutableBiMap out = null; + Object in = (Object)source(); + out = ImmutableBiMap.of(null, in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableBiMap;true;of;;;Argument[2];MapKey of ReturnValue;value" + ImmutableBiMap out = null; + Object in = (Object)source(); + out = ImmutableBiMap.of(null, null, in, null, null, null, null, null, null, null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableBiMap;true;of;;;Argument[2];MapKey of ReturnValue;value" + ImmutableBiMap out = null; + Object in = (Object)source(); + out = ImmutableBiMap.of(null, null, in, null, null, null, null, null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableBiMap;true;of;;;Argument[2];MapKey of ReturnValue;value" + ImmutableBiMap out = null; + Object in = (Object)source(); + out = ImmutableBiMap.of(null, null, in, null, null, null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableBiMap;true;of;;;Argument[2];MapKey of ReturnValue;value" + ImmutableBiMap out = null; + Object in = (Object)source(); + out = ImmutableBiMap.of(null, null, in, null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableBiMap;true;of;;;Argument[3];MapValue of ReturnValue;value" + ImmutableBiMap out = null; + Object in = (Object)source(); + out = ImmutableBiMap.of(null, null, null, in, null, null, null, null, null, null); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableBiMap;true;of;;;Argument[3];MapValue of ReturnValue;value" + ImmutableBiMap out = null; + Object in = (Object)source(); + out = ImmutableBiMap.of(null, null, null, in, null, null, null, null); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableBiMap;true;of;;;Argument[3];MapValue of ReturnValue;value" + ImmutableBiMap out = null; + Object in = (Object)source(); + out = ImmutableBiMap.of(null, null, null, in, null, null); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableBiMap;true;of;;;Argument[3];MapValue of ReturnValue;value" + ImmutableBiMap out = null; + Object in = (Object)source(); + out = ImmutableBiMap.of(null, null, null, in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableBiMap;true;of;;;Argument[4];MapKey of ReturnValue;value" + ImmutableBiMap out = null; + Object in = (Object)source(); + out = ImmutableBiMap.of(null, null, null, null, in, null, null, null, null, null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableBiMap;true;of;;;Argument[4];MapKey of ReturnValue;value" + ImmutableBiMap out = null; + Object in = (Object)source(); + out = ImmutableBiMap.of(null, null, null, null, in, null, null, null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableBiMap;true;of;;;Argument[4];MapKey of ReturnValue;value" + ImmutableBiMap out = null; + Object in = (Object)source(); + out = ImmutableBiMap.of(null, null, null, null, in, null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableBiMap;true;of;;;Argument[5];MapValue of ReturnValue;value" + ImmutableBiMap out = null; + Object in = (Object)source(); + out = ImmutableBiMap.of(null, null, null, null, null, in, null, null, null, null); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableBiMap;true;of;;;Argument[5];MapValue of ReturnValue;value" + ImmutableBiMap out = null; + Object in = (Object)source(); + out = ImmutableBiMap.of(null, null, null, null, null, in, null, null); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableBiMap;true;of;;;Argument[5];MapValue of ReturnValue;value" + ImmutableBiMap out = null; + Object in = (Object)source(); + out = ImmutableBiMap.of(null, null, null, null, null, in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableBiMap;true;of;;;Argument[6];MapKey of ReturnValue;value" + ImmutableBiMap out = null; + Object in = (Object)source(); + out = ImmutableBiMap.of(null, null, null, null, null, null, in, null, null, null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableBiMap;true;of;;;Argument[6];MapKey of ReturnValue;value" + ImmutableBiMap out = null; + Object in = (Object)source(); + out = ImmutableBiMap.of(null, null, null, null, null, null, in, null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableBiMap;true;of;;;Argument[7];MapValue of ReturnValue;value" + ImmutableBiMap out = null; + Object in = (Object)source(); + out = ImmutableBiMap.of(null, null, null, null, null, null, null, in, null, null); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableBiMap;true;of;;;Argument[7];MapValue of ReturnValue;value" + ImmutableBiMap out = null; + Object in = (Object)source(); + out = ImmutableBiMap.of(null, null, null, null, null, null, null, in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableBiMap;true;of;;;Argument[8];MapKey of ReturnValue;value" + ImmutableBiMap out = null; + Object in = (Object)source(); + out = ImmutableBiMap.of(null, null, null, null, null, null, null, null, in, null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableBiMap;true;of;;;Argument[9];MapValue of ReturnValue;value" + ImmutableBiMap out = null; + Object in = (Object)source(); + out = ImmutableBiMap.of(null, null, null, null, null, null, null, null, null, in); + sink(getMapValue(out)); // $ hasValueFlow + } { // "com.google.common.collect;ImmutableClassToInstanceMap;true;copyOf;(Map);;MapKey of Argument[0];MapKey of ReturnValue;value" ImmutableClassToInstanceMap out = null; @@ -611,42 +851,42 @@ public class Test { { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;(Iterator);;Element of Argument[0];Element of Argument[-1];value" ImmutableSortedSet.Builder out = null; - Iterator in = (Iterator)newWithElementDefault(source()); + Iterator in = (Iterator)List.of(source()).iterator(); out.addAll(in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;(Iterator);;Element of Argument[0];Element of Argument[-1];value" ImmutableSortedMultiset.Builder out = null; - Iterator in = (Iterator)newWithElementDefault(source()); + Iterator in = (Iterator)List.of(source()).iterator(); out.addAll(in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;(Iterator);;Element of Argument[0];Element of Argument[-1];value" ImmutableSet.Builder out = null; - Iterator in = (Iterator)newWithElementDefault(source()); + Iterator in = (Iterator)List.of(source()).iterator(); out.addAll(in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;(Iterator);;Element of Argument[0];Element of Argument[-1];value" ImmutableMultiset.Builder out = null; - Iterator in = (Iterator)newWithElementDefault(source()); + Iterator in = (Iterator)List.of(source()).iterator(); out.addAll(in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;(Iterator);;Element of Argument[0];Element of Argument[-1];value" ImmutableList.Builder out = null; - Iterator in = (Iterator)newWithElementDefault(source()); + Iterator in = (Iterator)List.of(source()).iterator(); out.addAll(in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;addAll;(Iterator);;Element of Argument[0];Element of Argument[-1];value" ImmutableCollection.Builder out = null; - Iterator in = (Iterator)newWithElementDefault(source()); + Iterator in = (Iterator)List.of(source()).iterator(); out.addAll(in); sink(getElement(out)); // $ hasValueFlow } @@ -737,70 +977,70 @@ public class Test { { // "com.google.common.collect;ImmutableCollection$Builder;true;build;();;Element of Argument[-1];Element of ReturnValue;value" ImmutableSortedSet out = null; - ImmutableSortedSet.Builder in = (ImmutableSortedSet.Builder)newWithElementDefault(source()); + ImmutableSortedSet.Builder in = (ImmutableSortedSet.Builder)ImmutableSortedSet.builder().add(source()); out = in.build(); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;build;();;Element of Argument[-1];Element of ReturnValue;value" ImmutableSortedMultiset out = null; - ImmutableSortedMultiset.Builder in = (ImmutableSortedMultiset.Builder)newWithElementDefault(source()); + ImmutableSortedMultiset.Builder in = (ImmutableSortedMultiset.Builder)ImmutableSortedMultiset.builder().add(source()); out = in.build(); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;build;();;Element of Argument[-1];Element of ReturnValue;value" ImmutableSet out = null; - ImmutableSet.Builder in = (ImmutableSet.Builder)newWithElementDefault(source()); + ImmutableSet.Builder in = (ImmutableSet.Builder)ImmutableSet.builder().add(source()); out = in.build(); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;build;();;Element of Argument[-1];Element of ReturnValue;value" ImmutableMultiset out = null; - ImmutableMultiset.Builder in = (ImmutableMultiset.Builder)newWithElementDefault(source()); + ImmutableMultiset.Builder in = (ImmutableMultiset.Builder)ImmutableMultiset.builder().add(source()); out = in.build(); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;build;();;Element of Argument[-1];Element of ReturnValue;value" ImmutableList out = null; - ImmutableList.Builder in = (ImmutableList.Builder)newWithElementDefault(source()); + ImmutableList.Builder in = (ImmutableList.Builder)ImmutableList.builder().add(source()); out = in.build(); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection$Builder;true;build;();;Element of Argument[-1];Element of ReturnValue;value" ImmutableCollection out = null; - ImmutableCollection.Builder in = (ImmutableCollection.Builder)newWithElementDefault(source()); + ImmutableCollection.Builder in = (ImmutableCollection.Builder)ImmutableList.builder().add(source()); out = in.build(); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection;true;asList;();;Element of Argument[-1];Element of ReturnValue;value" ImmutableList out = null; - ImmutableSet in = (ImmutableSet)newWithElementDefault(source()); + ImmutableSet in = (ImmutableSet)ImmutableSet.of(source()); out = in.asList(); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection;true;asList;();;Element of Argument[-1];Element of ReturnValue;value" ImmutableList out = null; - ImmutableMultiset in = (ImmutableMultiset)newWithElementDefault(source()); + ImmutableMultiset in = (ImmutableMultiset)ImmutableMultiset.of(source()); out = in.asList(); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection;true;asList;();;Element of Argument[-1];Element of ReturnValue;value" ImmutableList out = null; - ImmutableList in = (ImmutableList)newWithElementDefault(source()); + ImmutableList in = (ImmutableList)ImmutableList.of(source()); out = in.asList(); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableCollection;true;asList;();;Element of Argument[-1];Element of ReturnValue;value" ImmutableList out = null; - ImmutableCollection in = (ImmutableCollection)newWithElementDefault(source()); + ImmutableCollection in = (ImmutableCollection)ImmutableList.of(source()); out = in.asList(); sink(getElement(out)); // $ hasValueFlow } @@ -821,7 +1061,7 @@ public class Test { { // "com.google.common.collect;ImmutableList;true;copyOf;(Iterator);;Element of Argument[0];Element of ReturnValue;value" ImmutableList out = null; - Iterator in = (Iterator)newWithElementDefault(source()); + Iterator in = (Iterator)List.of(source()).iterator(); out = ImmutableList.copyOf(in); sink(getElement(out)); // $ hasValueFlow } @@ -1388,7 +1628,7 @@ public class Test { { // "com.google.common.collect;ImmutableList;true;reverse;();;Element of Argument[-1];Element of ReturnValue;value" ImmutableList out = null; - ImmutableList in = (ImmutableList)newWithElementDefault(source()); + ImmutableList in = (ImmutableList)ImmutableList.of(source()); out = in.reverse(); sink(getElement(out)); // $ hasValueFlow } @@ -1406,31 +1646,255 @@ public class Test { out = ImmutableList.sortedCopyOf(in); sink(getElement(out)); // $ hasValueFlow } + { + // "com.google.common.collect;ImmutableListMultimap;true;of;;;Argument[0];MapKey of ReturnValue;value" + ImmutableListMultimap out = null; + Object in = (Object)source(); + out = ImmutableListMultimap.of(in, null, null, null, null, null, null, null, null, null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableListMultimap;true;of;;;Argument[0];MapKey of ReturnValue;value" + ImmutableListMultimap out = null; + Object in = (Object)source(); + out = ImmutableListMultimap.of(in, null, null, null, null, null, null, null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableListMultimap;true;of;;;Argument[0];MapKey of ReturnValue;value" + ImmutableListMultimap out = null; + Object in = (Object)source(); + out = ImmutableListMultimap.of(in, null, null, null, null, null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableListMultimap;true;of;;;Argument[0];MapKey of ReturnValue;value" + ImmutableListMultimap out = null; + Object in = (Object)source(); + out = ImmutableListMultimap.of(in, null, null, null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableListMultimap;true;of;;;Argument[0];MapKey of ReturnValue;value" + ImmutableListMultimap out = null; + Object in = (Object)source(); + out = ImmutableListMultimap.of(in, null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableListMultimap;true;of;;;Argument[1];MapValue of ReturnValue;value" + ImmutableListMultimap out = null; + Object in = (Object)source(); + out = ImmutableListMultimap.of(null, in, null, null, null, null, null, null, null, null); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableListMultimap;true;of;;;Argument[1];MapValue of ReturnValue;value" + ImmutableListMultimap out = null; + Object in = (Object)source(); + out = ImmutableListMultimap.of(null, in, null, null, null, null, null, null); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableListMultimap;true;of;;;Argument[1];MapValue of ReturnValue;value" + ImmutableListMultimap out = null; + Object in = (Object)source(); + out = ImmutableListMultimap.of(null, in, null, null, null, null); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableListMultimap;true;of;;;Argument[1];MapValue of ReturnValue;value" + ImmutableListMultimap out = null; + Object in = (Object)source(); + out = ImmutableListMultimap.of(null, in, null, null); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableListMultimap;true;of;;;Argument[1];MapValue of ReturnValue;value" + ImmutableListMultimap out = null; + Object in = (Object)source(); + out = ImmutableListMultimap.of(null, in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableListMultimap;true;of;;;Argument[2];MapKey of ReturnValue;value" + ImmutableListMultimap out = null; + Object in = (Object)source(); + out = ImmutableListMultimap.of(null, null, in, null, null, null, null, null, null, null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableListMultimap;true;of;;;Argument[2];MapKey of ReturnValue;value" + ImmutableListMultimap out = null; + Object in = (Object)source(); + out = ImmutableListMultimap.of(null, null, in, null, null, null, null, null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableListMultimap;true;of;;;Argument[2];MapKey of ReturnValue;value" + ImmutableListMultimap out = null; + Object in = (Object)source(); + out = ImmutableListMultimap.of(null, null, in, null, null, null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableListMultimap;true;of;;;Argument[2];MapKey of ReturnValue;value" + ImmutableListMultimap out = null; + Object in = (Object)source(); + out = ImmutableListMultimap.of(null, null, in, null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableListMultimap;true;of;;;Argument[3];MapValue of ReturnValue;value" + ImmutableListMultimap out = null; + Object in = (Object)source(); + out = ImmutableListMultimap.of(null, null, null, in, null, null, null, null, null, null); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableListMultimap;true;of;;;Argument[3];MapValue of ReturnValue;value" + ImmutableListMultimap out = null; + Object in = (Object)source(); + out = ImmutableListMultimap.of(null, null, null, in, null, null, null, null); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableListMultimap;true;of;;;Argument[3];MapValue of ReturnValue;value" + ImmutableListMultimap out = null; + Object in = (Object)source(); + out = ImmutableListMultimap.of(null, null, null, in, null, null); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableListMultimap;true;of;;;Argument[3];MapValue of ReturnValue;value" + ImmutableListMultimap out = null; + Object in = (Object)source(); + out = ImmutableListMultimap.of(null, null, null, in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableListMultimap;true;of;;;Argument[4];MapKey of ReturnValue;value" + ImmutableListMultimap out = null; + Object in = (Object)source(); + out = ImmutableListMultimap.of(null, null, null, null, in, null, null, null, null, null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableListMultimap;true;of;;;Argument[4];MapKey of ReturnValue;value" + ImmutableListMultimap out = null; + Object in = (Object)source(); + out = ImmutableListMultimap.of(null, null, null, null, in, null, null, null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableListMultimap;true;of;;;Argument[4];MapKey of ReturnValue;value" + ImmutableListMultimap out = null; + Object in = (Object)source(); + out = ImmutableListMultimap.of(null, null, null, null, in, null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableListMultimap;true;of;;;Argument[5];MapValue of ReturnValue;value" + ImmutableListMultimap out = null; + Object in = (Object)source(); + out = ImmutableListMultimap.of(null, null, null, null, null, in, null, null, null, null); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableListMultimap;true;of;;;Argument[5];MapValue of ReturnValue;value" + ImmutableListMultimap out = null; + Object in = (Object)source(); + out = ImmutableListMultimap.of(null, null, null, null, null, in, null, null); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableListMultimap;true;of;;;Argument[5];MapValue of ReturnValue;value" + ImmutableListMultimap out = null; + Object in = (Object)source(); + out = ImmutableListMultimap.of(null, null, null, null, null, in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableListMultimap;true;of;;;Argument[6];MapKey of ReturnValue;value" + ImmutableListMultimap out = null; + Object in = (Object)source(); + out = ImmutableListMultimap.of(null, null, null, null, null, null, in, null, null, null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableListMultimap;true;of;;;Argument[6];MapKey of ReturnValue;value" + ImmutableListMultimap out = null; + Object in = (Object)source(); + out = ImmutableListMultimap.of(null, null, null, null, null, null, in, null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableListMultimap;true;of;;;Argument[7];MapValue of ReturnValue;value" + ImmutableListMultimap out = null; + Object in = (Object)source(); + out = ImmutableListMultimap.of(null, null, null, null, null, null, null, in, null, null); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableListMultimap;true;of;;;Argument[7];MapValue of ReturnValue;value" + ImmutableListMultimap out = null; + Object in = (Object)source(); + out = ImmutableListMultimap.of(null, null, null, null, null, null, null, in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableListMultimap;true;of;;;Argument[8];MapKey of ReturnValue;value" + ImmutableListMultimap out = null; + Object in = (Object)source(); + out = ImmutableListMultimap.of(null, null, null, null, null, null, null, null, in, null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableListMultimap;true;of;;;Argument[9];MapValue of ReturnValue;value" + ImmutableListMultimap out = null; + Object in = (Object)source(); + out = ImmutableListMultimap.of(null, null, null, null, null, null, null, null, null, in); + sink(getMapValue(out)); // $ hasValueFlow + } { // "com.google.common.collect;ImmutableMap$Builder;true;build;();;MapKey of Argument[-1];MapKey of ReturnValue;value" ImmutableSortedMap out = null; - ImmutableSortedMap.Builder in = (ImmutableSortedMap.Builder)newWithMapKeyDefault(source()); + ImmutableSortedMap.Builder in = (ImmutableSortedMap.Builder)ImmutableSortedMap.builder().put(source(), null); out = in.build(); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;build;();;MapKey of Argument[-1];MapKey of ReturnValue;value" ImmutableMap out = null; - ImmutableMap.Builder in = (ImmutableMap.Builder)newWithMapKeyDefault(source()); + ImmutableMap.Builder in = (ImmutableMap.Builder)ImmutableMap.builder().put(source(), null); + out = in.build(); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap$Builder;true;build;();;MapKey of Argument[-1];MapKey of ReturnValue;value" + ImmutableBiMap out = null; + ImmutableBiMap.Builder in = (ImmutableBiMap.Builder)ImmutableBiMap.builder().put(source(), null); out = in.build(); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;build;();;MapValue of Argument[-1];MapValue of ReturnValue;value" ImmutableSortedMap out = null; - ImmutableSortedMap.Builder in = (ImmutableSortedMap.Builder)newWithMapValueDefault(source()); + ImmutableSortedMap.Builder in = (ImmutableSortedMap.Builder)ImmutableSortedMap.builder().put(null, source()); out = in.build(); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;build;();;MapValue of Argument[-1];MapValue of ReturnValue;value" ImmutableMap out = null; - ImmutableMap.Builder in = (ImmutableMap.Builder)newWithMapValueDefault(source()); + ImmutableMap.Builder in = (ImmutableMap.Builder)ImmutableMap.builder().put(null, source()); + out = in.build(); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap$Builder;true;build;();;MapValue of Argument[-1];MapValue of ReturnValue;value" + ImmutableBiMap out = null; + ImmutableBiMap.Builder in = (ImmutableBiMap.Builder)ImmutableBiMap.builder().put(null, source()); out = in.build(); sink(getMapValue(out)); // $ hasValueFlow } @@ -1448,6 +1912,13 @@ public class Test { out = in.orderEntriesByValue(null); sink(out); // $ hasValueFlow } + { + // "com.google.common.collect;ImmutableMap$Builder;true;orderEntriesByValue;(Comparator);;Argument[-1];ReturnValue;value" + ImmutableBiMap.Builder out = null; + ImmutableBiMap.Builder in = (ImmutableBiMap.Builder)source(); + out = in.orderEntriesByValue(null); + sink(out); // $ hasValueFlow + } { // "com.google.common.collect;ImmutableMap$Builder;true;put;(Entry);;MapKey of Argument[0];MapKey of Argument[-1];value" ImmutableSortedMap.Builder out = null; @@ -1462,6 +1933,13 @@ public class Test { out.put(in); sink(getMapKey(out)); // $ hasValueFlow } + { + // "com.google.common.collect;ImmutableMap$Builder;true;put;(Entry);;MapKey of Argument[0];MapKey of Argument[-1];value" + ImmutableBiMap.Builder out = null; + Map.Entry in = (Map.Entry)newEntryWithMapKey(source()); + out.put(in); + sink(getMapKey(out)); // $ hasValueFlow + } { // "com.google.common.collect;ImmutableMap$Builder;true;put;(Entry);;MapValue of Argument[0];MapValue of Argument[-1];value" ImmutableSortedMap.Builder out = null; @@ -1476,6 +1954,13 @@ public class Test { out.put(in); sink(getMapValue(out)); // $ hasValueFlow } + { + // "com.google.common.collect;ImmutableMap$Builder;true;put;(Entry);;MapValue of Argument[0];MapValue of Argument[-1];value" + ImmutableBiMap.Builder out = null; + Map.Entry in = (Map.Entry)newEntryWithMapValue(source()); + out.put(in); + sink(getMapValue(out)); // $ hasValueFlow + } { // "com.google.common.collect;ImmutableMap$Builder;true;put;(Object,Object);;Argument[0];MapKey of Argument[-1];value" ImmutableSortedMap.Builder out = null; @@ -1490,6 +1975,13 @@ public class Test { out.put(in, null); sink(getMapKey(out)); // $ hasValueFlow } + { + // "com.google.common.collect;ImmutableMap$Builder;true;put;(Object,Object);;Argument[0];MapKey of Argument[-1];value" + ImmutableBiMap.Builder out = null; + Object in = (Object)source(); + out.put(in, null); + sink(getMapKey(out)); // $ hasValueFlow + } { // "com.google.common.collect;ImmutableMap$Builder;true;put;(Object,Object);;Argument[1];MapValue of Argument[-1];value" ImmutableSortedMap.Builder out = null; @@ -1504,6 +1996,13 @@ public class Test { out.put(null, in); sink(getMapValue(out)); // $ hasValueFlow } + { + // "com.google.common.collect;ImmutableMap$Builder;true;put;(Object,Object);;Argument[1];MapValue of Argument[-1];value" + ImmutableBiMap.Builder out = null; + Object in = (Object)source(); + out.put(null, in); + sink(getMapValue(out)); // $ hasValueFlow + } { // "com.google.common.collect;ImmutableMap$Builder;true;put;;;Argument[-1];ReturnValue;value" ImmutableSortedMap.Builder out = null; @@ -1532,6 +2031,20 @@ public class Test { out = in.put(null); sink(out); // $ hasValueFlow } + { + // "com.google.common.collect;ImmutableMap$Builder;true;put;;;Argument[-1];ReturnValue;value" + ImmutableBiMap.Builder out = null; + ImmutableBiMap.Builder in = (ImmutableBiMap.Builder)source(); + out = in.put(null, null); + sink(out); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap$Builder;true;put;;;Argument[-1];ReturnValue;value" + ImmutableBiMap.Builder out = null; + ImmutableBiMap.Builder in = (ImmutableBiMap.Builder)source(); + out = in.put(null); + sink(out); // $ hasValueFlow + } { // "com.google.common.collect;ImmutableMap$Builder;true;putAll;(Iterable);;MapKey of Element of Argument[0];MapKey of Argument[-1];value" ImmutableSortedMap.Builder out = null; @@ -1546,6 +2059,13 @@ public class Test { out.putAll(in); sink(getMapKey(out)); // $ hasValueFlow } + { + // "com.google.common.collect;ImmutableMap$Builder;true;putAll;(Iterable);;MapKey of Element of Argument[0];MapKey of Argument[-1];value" + ImmutableBiMap.Builder out = null; + Iterable in = (Iterable)List.of(newWithMapKeyDefault(source())); + out.putAll(in); + sink(getMapKey(out)); // $ hasValueFlow + } { // "com.google.common.collect;ImmutableMap$Builder;true;putAll;(Iterable);;MapValue of Element of Argument[0];MapValue of Argument[-1];value" ImmutableSortedMap.Builder out = null; @@ -1560,6 +2080,13 @@ public class Test { out.putAll(in); sink(getMapValue(out)); // $ hasValueFlow } + { + // "com.google.common.collect;ImmutableMap$Builder;true;putAll;(Iterable);;MapValue of Element of Argument[0];MapValue of Argument[-1];value" + ImmutableBiMap.Builder out = null; + Iterable in = (Iterable)List.of(newWithMapValueDefault(source())); + out.putAll(in); + sink(getMapValue(out)); // $ hasValueFlow + } { // "com.google.common.collect;ImmutableMap$Builder;true;putAll;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value" ImmutableSortedMap.Builder out = null; @@ -1574,6 +2101,13 @@ public class Test { out.putAll(in); sink(getMapKey(out)); // $ hasValueFlow } + { + // "com.google.common.collect;ImmutableMap$Builder;true;putAll;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value" + ImmutableBiMap.Builder out = null; + Map in = (Map)Map.of(source(), null); + out.putAll(in); + sink(getMapKey(out)); // $ hasValueFlow + } { // "com.google.common.collect;ImmutableMap$Builder;true;putAll;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value" ImmutableSortedMap.Builder out = null; @@ -1588,6 +2122,13 @@ public class Test { out.putAll(in); sink(getMapValue(out)); // $ hasValueFlow } + { + // "com.google.common.collect;ImmutableMap$Builder;true;putAll;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value" + ImmutableBiMap.Builder out = null; + Map in = (Map)Map.of(null, source()); + out.putAll(in); + sink(getMapValue(out)); // $ hasValueFlow + } { // "com.google.common.collect;ImmutableMap$Builder;true;putAll;;;Argument[-1];ReturnValue;value" ImmutableSortedMap.Builder out = null; @@ -1616,6 +2157,20 @@ public class Test { out = in.putAll((Iterable)null); sink(out); // $ hasValueFlow } + { + // "com.google.common.collect;ImmutableMap$Builder;true;putAll;;;Argument[-1];ReturnValue;value" + ImmutableBiMap.Builder out = null; + ImmutableBiMap.Builder in = (ImmutableBiMap.Builder)source(); + out = in.putAll((Map)null); + sink(out); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableMap$Builder;true;putAll;;;Argument[-1];ReturnValue;value" + ImmutableBiMap.Builder out = null; + ImmutableBiMap.Builder in = (ImmutableBiMap.Builder)source(); + out = in.putAll((Iterable)null); + sink(out); // $ hasValueFlow + } { // "com.google.common.collect;ImmutableMap;true;copyOf;(Iterable);;MapKey of Element of Argument[0];MapKey of ReturnValue;value" ImmutableMap out = null; @@ -1857,42 +2412,42 @@ public class Test { { // "com.google.common.collect;ImmutableMultimap$Builder;true;build;();;MapKey of Argument[-1];MapKey of ReturnValue;value" ImmutableSetMultimap out = null; - ImmutableSetMultimap.Builder in = (ImmutableSetMultimap.Builder)newWithMapKeyDefault(source()); + ImmutableSetMultimap.Builder in = (ImmutableSetMultimap.Builder)ImmutableSetMultimap.builder().put(source(), null); out = in.build(); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;build;();;MapKey of Argument[-1];MapKey of ReturnValue;value" ImmutableMultimap out = null; - ImmutableMultimap.Builder in = (ImmutableMultimap.Builder)newWithMapKeyDefault(source()); + ImmutableMultimap.Builder in = (ImmutableMultimap.Builder)ImmutableMultimap.builder().put(source(), null); out = in.build(); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;build;();;MapKey of Argument[-1];MapKey of ReturnValue;value" ImmutableListMultimap out = null; - ImmutableListMultimap.Builder in = (ImmutableListMultimap.Builder)newWithMapKeyDefault(source()); + ImmutableListMultimap.Builder in = (ImmutableListMultimap.Builder)ImmutableListMultimap.builder().put(source(), null); out = in.build(); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;build;();;MapValue of Argument[-1];MapValue of ReturnValue;value" ImmutableSetMultimap out = null; - ImmutableSetMultimap.Builder in = (ImmutableSetMultimap.Builder)newWithMapValueDefault(source()); + ImmutableSetMultimap.Builder in = (ImmutableSetMultimap.Builder)ImmutableSetMultimap.builder().put(null, source()); out = in.build(); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;build;();;MapValue of Argument[-1];MapValue of ReturnValue;value" ImmutableMultimap out = null; - ImmutableMultimap.Builder in = (ImmutableMultimap.Builder)newWithMapValueDefault(source()); + ImmutableMultimap.Builder in = (ImmutableMultimap.Builder)ImmutableMultimap.builder().put(null, source()); out = in.build(); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;build;();;MapValue of Argument[-1];MapValue of ReturnValue;value" ImmutableListMultimap out = null; - ImmutableListMultimap.Builder in = (ImmutableListMultimap.Builder)newWithMapValueDefault(source()); + ImmutableListMultimap.Builder in = (ImmutableListMultimap.Builder)ImmutableListMultimap.builder().put(null, source()); out = in.build(); sink(getMapValue(out)); // $ hasValueFlow } @@ -2109,42 +2664,42 @@ public class Test { { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Multimap);;MapKey of Argument[0];MapKey of Argument[-1];value" ImmutableSetMultimap.Builder out = null; - Multimap in = (Multimap)newWithMapKeyDefault(source()); + Multimap in = (Multimap)ImmutableMultimap.of(source(), null); out.putAll(in); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Multimap);;MapKey of Argument[0];MapKey of Argument[-1];value" ImmutableMultimap.Builder out = null; - Multimap in = (Multimap)newWithMapKeyDefault(source()); + Multimap in = (Multimap)ImmutableMultimap.of(source(), null); out.putAll(in); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Multimap);;MapKey of Argument[0];MapKey of Argument[-1];value" ImmutableListMultimap.Builder out = null; - Multimap in = (Multimap)newWithMapKeyDefault(source()); + Multimap in = (Multimap)ImmutableMultimap.of(source(), null); out.putAll(in); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Multimap);;MapValue of Argument[0];MapValue of Argument[-1];value" ImmutableSetMultimap.Builder out = null; - Multimap in = (Multimap)newWithMapValueDefault(source()); + Multimap in = (Multimap)ImmutableMultimap.of(null, source()); out.putAll(in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Multimap);;MapValue of Argument[0];MapValue of Argument[-1];value" ImmutableMultimap.Builder out = null; - Multimap in = (Multimap)newWithMapValueDefault(source()); + Multimap in = (Multimap)ImmutableMultimap.of(null, source()); out.putAll(in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Multimap);;MapValue of Argument[0];MapValue of Argument[-1];value" ImmutableListMultimap.Builder out = null; - Multimap in = (Multimap)newWithMapValueDefault(source()); + Multimap in = (Multimap)ImmutableMultimap.of(null, source()); out.putAll(in); sink(getMapValue(out)); // $ hasValueFlow } @@ -2333,56 +2888,56 @@ public class Test { { // "com.google.common.collect;ImmutableMultimap;true;copyOf;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value" ImmutableMultimap out = null; - Multimap in = (Multimap)newWithMapKeyDefault(source()); + Multimap in = (Multimap)ImmutableMultimap.of(source(), null); out = ImmutableMultimap.copyOf(in); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;copyOf;(Multimap);;MapValue of Argument[0];MapValue of ReturnValue;value" ImmutableMultimap out = null; - Multimap in = (Multimap)newWithMapValueDefault(source()); + Multimap in = (Multimap)ImmutableMultimap.of(null, source()); out = ImmutableMultimap.copyOf(in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;inverse;();;MapKey of Argument[-1];MapValue of ReturnValue;value" ImmutableSetMultimap out = null; - ImmutableSetMultimap in = (ImmutableSetMultimap)newWithMapKeyDefault(source()); + ImmutableSetMultimap in = (ImmutableSetMultimap)ImmutableSetMultimap.of(source(), null); out = in.inverse(); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;inverse;();;MapKey of Argument[-1];MapValue of ReturnValue;value" ImmutableMultimap out = null; - ImmutableMultimap in = (ImmutableMultimap)newWithMapKeyDefault(source()); + ImmutableMultimap in = (ImmutableMultimap)ImmutableMultimap.of(source(), null); out = in.inverse(); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;inverse;();;MapKey of Argument[-1];MapValue of ReturnValue;value" ImmutableListMultimap out = null; - ImmutableListMultimap in = (ImmutableListMultimap)newWithMapKeyDefault(source()); + ImmutableListMultimap in = (ImmutableListMultimap)ImmutableListMultimap.of(source(), null); out = in.inverse(); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;inverse;();;MapValue of Argument[-1];MapKey of ReturnValue;value" ImmutableSetMultimap out = null; - ImmutableSetMultimap in = (ImmutableSetMultimap)newWithMapValueDefault(source()); + ImmutableSetMultimap in = (ImmutableSetMultimap)ImmutableSetMultimap.of(null, source()); out = in.inverse(); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;inverse;();;MapValue of Argument[-1];MapKey of ReturnValue;value" ImmutableMultimap out = null; - ImmutableMultimap in = (ImmutableMultimap)newWithMapValueDefault(source()); + ImmutableMultimap in = (ImmutableMultimap)ImmutableMultimap.of(null, source()); out = in.inverse(); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;inverse;();;MapValue of Argument[-1];MapKey of ReturnValue;value" ImmutableListMultimap out = null; - ImmutableListMultimap in = (ImmutableListMultimap)newWithMapValueDefault(source()); + ImmutableListMultimap in = (ImmutableListMultimap)ImmutableListMultimap.of(null, source()); out = in.inverse(); sink(getMapKey(out)); // $ hasValueFlow } @@ -2648,7 +3203,7 @@ public class Test { { // "com.google.common.collect;ImmutableMultiset;true;copyOf;(Iterator);;Element of Argument[0];Element of ReturnValue;value" ImmutableMultiset out = null; - Iterator in = (Iterator)newWithElementDefault(source()); + Iterator in = (Iterator)List.of(source()).iterator(); out = ImmutableMultiset.copyOf(in); sink(getElement(out)); // $ hasValueFlow } @@ -2830,7 +3385,7 @@ public class Test { { // "com.google.common.collect;ImmutableSet;true;copyOf;(Iterator);;Element of Argument[0];Element of ReturnValue;value" ImmutableSet out = null; - Iterator in = (Iterator)newWithElementDefault(source()); + Iterator in = (Iterator)List.of(source()).iterator(); out = ImmutableSet.copyOf(in); sink(getElement(out)); // $ hasValueFlow } @@ -2995,6 +3550,216 @@ public class Test { out = ImmutableSet.of((Object)null, (Object)null, (Object)null, (Object)null, (Object)null, (Object)null, in); sink(getElement(out)); // $ hasValueFlow } + { + // "com.google.common.collect;ImmutableSetMultimap;true;of;;;Argument[0];MapKey of ReturnValue;value" + ImmutableSetMultimap out = null; + Object in = (Object)source(); + out = ImmutableSetMultimap.of(in, null, null, null, null, null, null, null, null, null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSetMultimap;true;of;;;Argument[0];MapKey of ReturnValue;value" + ImmutableSetMultimap out = null; + Object in = (Object)source(); + out = ImmutableSetMultimap.of(in, null, null, null, null, null, null, null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSetMultimap;true;of;;;Argument[0];MapKey of ReturnValue;value" + ImmutableSetMultimap out = null; + Object in = (Object)source(); + out = ImmutableSetMultimap.of(in, null, null, null, null, null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSetMultimap;true;of;;;Argument[0];MapKey of ReturnValue;value" + ImmutableSetMultimap out = null; + Object in = (Object)source(); + out = ImmutableSetMultimap.of(in, null, null, null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSetMultimap;true;of;;;Argument[0];MapKey of ReturnValue;value" + ImmutableSetMultimap out = null; + Object in = (Object)source(); + out = ImmutableSetMultimap.of(in, null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSetMultimap;true;of;;;Argument[1];MapValue of ReturnValue;value" + ImmutableSetMultimap out = null; + Object in = (Object)source(); + out = ImmutableSetMultimap.of(null, in, null, null, null, null, null, null, null, null); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSetMultimap;true;of;;;Argument[1];MapValue of ReturnValue;value" + ImmutableSetMultimap out = null; + Object in = (Object)source(); + out = ImmutableSetMultimap.of(null, in, null, null, null, null, null, null); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSetMultimap;true;of;;;Argument[1];MapValue of ReturnValue;value" + ImmutableSetMultimap out = null; + Object in = (Object)source(); + out = ImmutableSetMultimap.of(null, in, null, null, null, null); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSetMultimap;true;of;;;Argument[1];MapValue of ReturnValue;value" + ImmutableSetMultimap out = null; + Object in = (Object)source(); + out = ImmutableSetMultimap.of(null, in, null, null); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSetMultimap;true;of;;;Argument[1];MapValue of ReturnValue;value" + ImmutableSetMultimap out = null; + Object in = (Object)source(); + out = ImmutableSetMultimap.of(null, in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSetMultimap;true;of;;;Argument[2];MapKey of ReturnValue;value" + ImmutableSetMultimap out = null; + Object in = (Object)source(); + out = ImmutableSetMultimap.of(null, null, in, null, null, null, null, null, null, null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSetMultimap;true;of;;;Argument[2];MapKey of ReturnValue;value" + ImmutableSetMultimap out = null; + Object in = (Object)source(); + out = ImmutableSetMultimap.of(null, null, in, null, null, null, null, null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSetMultimap;true;of;;;Argument[2];MapKey of ReturnValue;value" + ImmutableSetMultimap out = null; + Object in = (Object)source(); + out = ImmutableSetMultimap.of(null, null, in, null, null, null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSetMultimap;true;of;;;Argument[2];MapKey of ReturnValue;value" + ImmutableSetMultimap out = null; + Object in = (Object)source(); + out = ImmutableSetMultimap.of(null, null, in, null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSetMultimap;true;of;;;Argument[3];MapValue of ReturnValue;value" + ImmutableSetMultimap out = null; + Object in = (Object)source(); + out = ImmutableSetMultimap.of(null, null, null, in, null, null, null, null, null, null); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSetMultimap;true;of;;;Argument[3];MapValue of ReturnValue;value" + ImmutableSetMultimap out = null; + Object in = (Object)source(); + out = ImmutableSetMultimap.of(null, null, null, in, null, null, null, null); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSetMultimap;true;of;;;Argument[3];MapValue of ReturnValue;value" + ImmutableSetMultimap out = null; + Object in = (Object)source(); + out = ImmutableSetMultimap.of(null, null, null, in, null, null); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSetMultimap;true;of;;;Argument[3];MapValue of ReturnValue;value" + ImmutableSetMultimap out = null; + Object in = (Object)source(); + out = ImmutableSetMultimap.of(null, null, null, in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSetMultimap;true;of;;;Argument[4];MapKey of ReturnValue;value" + ImmutableSetMultimap out = null; + Object in = (Object)source(); + out = ImmutableSetMultimap.of(null, null, null, null, in, null, null, null, null, null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSetMultimap;true;of;;;Argument[4];MapKey of ReturnValue;value" + ImmutableSetMultimap out = null; + Object in = (Object)source(); + out = ImmutableSetMultimap.of(null, null, null, null, in, null, null, null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSetMultimap;true;of;;;Argument[4];MapKey of ReturnValue;value" + ImmutableSetMultimap out = null; + Object in = (Object)source(); + out = ImmutableSetMultimap.of(null, null, null, null, in, null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSetMultimap;true;of;;;Argument[5];MapValue of ReturnValue;value" + ImmutableSetMultimap out = null; + Object in = (Object)source(); + out = ImmutableSetMultimap.of(null, null, null, null, null, in, null, null, null, null); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSetMultimap;true;of;;;Argument[5];MapValue of ReturnValue;value" + ImmutableSetMultimap out = null; + Object in = (Object)source(); + out = ImmutableSetMultimap.of(null, null, null, null, null, in, null, null); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSetMultimap;true;of;;;Argument[5];MapValue of ReturnValue;value" + ImmutableSetMultimap out = null; + Object in = (Object)source(); + out = ImmutableSetMultimap.of(null, null, null, null, null, in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSetMultimap;true;of;;;Argument[6];MapKey of ReturnValue;value" + ImmutableSetMultimap out = null; + Object in = (Object)source(); + out = ImmutableSetMultimap.of(null, null, null, null, null, null, in, null, null, null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSetMultimap;true;of;;;Argument[6];MapKey of ReturnValue;value" + ImmutableSetMultimap out = null; + Object in = (Object)source(); + out = ImmutableSetMultimap.of(null, null, null, null, null, null, in, null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSetMultimap;true;of;;;Argument[7];MapValue of ReturnValue;value" + ImmutableSetMultimap out = null; + Object in = (Object)source(); + out = ImmutableSetMultimap.of(null, null, null, null, null, null, null, in, null, null); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSetMultimap;true;of;;;Argument[7];MapValue of ReturnValue;value" + ImmutableSetMultimap out = null; + Object in = (Object)source(); + out = ImmutableSetMultimap.of(null, null, null, null, null, null, null, in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSetMultimap;true;of;;;Argument[8];MapKey of ReturnValue;value" + ImmutableSetMultimap out = null; + Object in = (Object)source(); + out = ImmutableSetMultimap.of(null, null, null, null, null, null, null, null, in, null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ImmutableSetMultimap;true;of;;;Argument[9];MapValue of ReturnValue;value" + ImmutableSetMultimap out = null; + Object in = (Object)source(); + out = ImmutableSetMultimap.of(null, null, null, null, null, null, null, null, null, in); + sink(getMapValue(out)); // $ hasValueFlow + } { // "com.google.common.collect;ImmutableSortedMap;true;copyOf;(Iterable);;MapKey of Element of Argument[0];MapKey of ReturnValue;value" ImmutableSortedMap out = null; @@ -3054,14 +3819,14 @@ public class Test { { // "com.google.common.collect;ImmutableSortedMap;true;copyOfSorted;(SortedMap);;MapKey of Argument[0];MapKey of ReturnValue;value" ImmutableSortedMap out = null; - SortedMap in = (SortedMap)newWithMapKeyDefault(source()); + SortedMap in = (SortedMap)ImmutableSortedMap.of((Comparable)source(), null); out = ImmutableSortedMap.copyOfSorted(in); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMap;true;copyOfSorted;(SortedMap);;MapValue of Argument[0];MapValue of ReturnValue;value" ImmutableSortedMap out = null; - SortedMap in = (SortedMap)newWithMapValueDefault(source()); + SortedMap in = (SortedMap)ImmutableSortedMap.of(null, (Comparable)source()); out = ImmutableSortedMap.copyOfSorted(in); sink(getMapValue(out)); // $ hasValueFlow } @@ -3292,7 +4057,7 @@ public class Test { { // "com.google.common.collect;ImmutableSortedMultiset;true;copyOf;(Comparator,Iterator);;Element of Argument[1];Element of ReturnValue;value" ImmutableSortedMultiset out = null; - Iterator in = (Iterator)newWithElementDefault(source()); + Iterator in = (Iterator)List.of(source()).iterator(); out = ImmutableSortedMultiset.copyOf((Comparator)null, in); sink(getElement(out)); // $ hasValueFlow } @@ -3306,14 +4071,14 @@ public class Test { { // "com.google.common.collect;ImmutableSortedMultiset;true;copyOf;(Iterator);;Element of Argument[0];Element of ReturnValue;value" ImmutableSortedMultiset out = null; - Iterator in = (Iterator)newWithElementDefault(source()); + Iterator in = (Iterator)List.of(source()).iterator(); out = ImmutableSortedMultiset.copyOf(in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMultiset;true;copyOfSorted;(SortedMultiset);;Element of Argument[0];Element of ReturnValue;value" ImmutableSortedMultiset out = null; - SortedMultiset in = (SortedMultiset)newWithElementDefault(source()); + SortedMultiset in = (SortedMultiset)ImmutableSortedMultiset.of((Comparable)source()); out = ImmutableSortedMultiset.copyOfSorted(in); sink(getElement(out)); // $ hasValueFlow } @@ -3502,7 +4267,7 @@ public class Test { { // "com.google.common.collect;ImmutableSortedSet;true;copyOf;(Comparator,Iterator);;Element of Argument[1];Element of ReturnValue;value" ImmutableSortedSet out = null; - Iterator in = (Iterator)newWithElementDefault(source()); + Iterator in = (Iterator)List.of(source()).iterator(); out = ImmutableSortedSet.copyOf((Comparator)null, in); sink(getElement(out)); // $ hasValueFlow } @@ -3516,14 +4281,14 @@ public class Test { { // "com.google.common.collect;ImmutableSortedSet;true;copyOf;(Iterator);;Element of Argument[0];Element of ReturnValue;value" ImmutableSortedSet out = null; - Iterator in = (Iterator)newWithElementDefault(source()); + Iterator in = (Iterator)List.of(source()).iterator(); out = ImmutableSortedSet.copyOf(in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedSet;true;copyOfSorted;(SortedSet);;Element of Argument[0];Element of ReturnValue;value" ImmutableSortedSet out = null; - SortedSet in = (SortedSet)newWithElementDefault(source()); + SortedSet in = (SortedSet)ImmutableSortedSet.of((Comparable)source()); out = ImmutableSortedSet.copyOfSorted(in); sink(getElement(out)); // $ hasValueFlow } @@ -4104,7 +4869,7 @@ public class Test { { // "com.google.common.collect;Iterables;false;unmodifiableIterable;(ImmutableCollection);;Element of Argument[0];Element of ReturnValue;value" Iterable out = null; - ImmutableCollection in = (ImmutableCollection)newWithElementDefault(source()); + ImmutableCollection in = (ImmutableCollection)ImmutableList.of(source()); out = Iterables.unmodifiableIterable(in); sink(getElement(out)); // $ hasValueFlow } @@ -4118,84 +4883,84 @@ public class Test { { // "com.google.common.collect;Iterators;false;addAll;(Collection,Iterator);;Element of Argument[1];Element of Argument[0];value" Collection out = null; - Iterator in = (Iterator)newWithElementDefault(source()); + Iterator in = (Iterator)List.of(source()).iterator(); Iterators.addAll(out, in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;asEnumeration;(Iterator);;Element of Argument[0];Element of ReturnValue;value" Enumeration out = null; - Iterator in = (Iterator)newWithElementDefault(source()); + Iterator in = (Iterator)List.of(source()).iterator(); out = Iterators.asEnumeration(in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;concat;(Iterator);;Element of Element of Argument[0];Element of ReturnValue;value" Iterator out = null; - Iterator in = (Iterator)newWithElementDefault(newWithElementDefault(source())); + Iterator in = (Iterator)List.of(newWithElementDefault(source())).iterator(); out = Iterators.concat(in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;concat;(Iterator,Iterator);;Element of Argument[0..1];Element of ReturnValue;value" Iterator out = null; - Iterator in = (Iterator)newWithElementDefault(source()); + Iterator in = (Iterator)List.of(source()).iterator(); out = Iterators.concat(null, in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;concat;(Iterator,Iterator);;Element of Argument[0..1];Element of ReturnValue;value" Iterator out = null; - Iterator in = (Iterator)newWithElementDefault(source()); + Iterator in = (Iterator)List.of(source()).iterator(); out = Iterators.concat(in, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;concat;(Iterator,Iterator,Iterator);;Element of Argument[0..2];Element of ReturnValue;value" Iterator out = null; - Iterator in = (Iterator)newWithElementDefault(source()); + Iterator in = (Iterator)List.of(source()).iterator(); out = Iterators.concat(null, null, in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;concat;(Iterator,Iterator,Iterator);;Element of Argument[0..2];Element of ReturnValue;value" Iterator out = null; - Iterator in = (Iterator)newWithElementDefault(source()); + Iterator in = (Iterator)List.of(source()).iterator(); out = Iterators.concat(null, in, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;concat;(Iterator,Iterator,Iterator);;Element of Argument[0..2];Element of ReturnValue;value" Iterator out = null; - Iterator in = (Iterator)newWithElementDefault(source()); + Iterator in = (Iterator)List.of(source()).iterator(); out = Iterators.concat(in, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;concat;(Iterator,Iterator,Iterator,Iterator);;Element of Argument[0..3];Element of ReturnValue;value" Iterator out = null; - Iterator in = (Iterator)newWithElementDefault(source()); + Iterator in = (Iterator)List.of(source()).iterator(); out = Iterators.concat(null, null, null, in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;concat;(Iterator,Iterator,Iterator,Iterator);;Element of Argument[0..3];Element of ReturnValue;value" Iterator out = null; - Iterator in = (Iterator)newWithElementDefault(source()); + Iterator in = (Iterator)List.of(source()).iterator(); out = Iterators.concat(null, null, in, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;concat;(Iterator,Iterator,Iterator,Iterator);;Element of Argument[0..3];Element of ReturnValue;value" Iterator out = null; - Iterator in = (Iterator)newWithElementDefault(source()); + Iterator in = (Iterator)List.of(source()).iterator(); out = Iterators.concat(null, in, null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;concat;(Iterator,Iterator,Iterator,Iterator);;Element of Argument[0..3];Element of ReturnValue;value" Iterator out = null; - Iterator in = (Iterator)newWithElementDefault(source()); + Iterator in = (Iterator)List.of(source()).iterator(); out = Iterators.concat(in, null, null, null); sink(getElement(out)); // $ hasValueFlow } @@ -4209,7 +4974,7 @@ public class Test { { // "com.google.common.collect;Iterators;false;consumingIterator;(Iterator);;Element of Argument[0];Element of ReturnValue;value" Iterator out = null; - Iterator in = (Iterator)newWithElementDefault(source()); + Iterator in = (Iterator)List.of(source()).iterator(); out = Iterators.consumingIterator(in); sink(getElement(out)); // $ hasValueFlow } @@ -4230,21 +4995,21 @@ public class Test { { // "com.google.common.collect;Iterators;false;filter;(Iterator,Class);;Element of Argument[0];Element of ReturnValue;value" UnmodifiableIterator out = null; - Iterator in = (Iterator)newWithElementDefault(source()); + Iterator in = (Iterator)List.of(source()).iterator(); out = Iterators.filter(in, (Class)null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;filter;(Iterator,Predicate);;Element of Argument[0];Element of ReturnValue;value" UnmodifiableIterator out = null; - Iterator in = (Iterator)newWithElementDefault(source()); + Iterator in = (Iterator)List.of(source()).iterator(); out = Iterators.filter(in, (Predicate)null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;find;(Iterator,Predicate);;Element of Argument[0];ReturnValue;value" Object out = null; - Iterator in = (Iterator)newWithElementDefault(source()); + Iterator in = (Iterator)List.of(source()).iterator(); out = Iterators.find(in, null); sink(out); // $ hasValueFlow } @@ -4258,7 +5023,7 @@ public class Test { { // "com.google.common.collect;Iterators;false;find;(Iterator,Predicate,Object);;Element of Argument[0];ReturnValue;value" Object out = null; - Iterator in = (Iterator)newWithElementDefault(source()); + Iterator in = (Iterator)List.of(source()).iterator(); out = Iterators.find(in, null, null); sink(out); // $ hasValueFlow } @@ -4279,7 +5044,7 @@ public class Test { { // "com.google.common.collect;Iterators;false;get;(Iterator,int);;Element of Argument[0];ReturnValue;value" Object out = null; - Iterator in = (Iterator)newWithElementDefault(source()); + Iterator in = (Iterator)List.of(source()).iterator(); out = Iterators.get(in, 0); sink(out); // $ hasValueFlow } @@ -4293,14 +5058,14 @@ public class Test { { // "com.google.common.collect;Iterators;false;get;(Iterator,int,Object);;Element of Argument[0];ReturnValue;value" Object out = null; - Iterator in = (Iterator)newWithElementDefault(source()); + Iterator in = (Iterator)List.of(source()).iterator(); out = Iterators.get(in, 0, null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;getLast;(Iterator);;Element of Argument[0];ReturnValue;value" Object out = null; - Iterator in = (Iterator)newWithElementDefault(source()); + Iterator in = (Iterator)List.of(source()).iterator(); out = Iterators.getLast(in); sink(out); // $ hasValueFlow } @@ -4314,7 +5079,7 @@ public class Test { { // "com.google.common.collect;Iterators;false;getLast;(Iterator,Object);;Element of Argument[0];ReturnValue;value" Object out = null; - Iterator in = (Iterator)newWithElementDefault(source()); + Iterator in = (Iterator)List.of(source()).iterator(); out = Iterators.getLast(in, null); sink(out); // $ hasValueFlow } @@ -4328,14 +5093,14 @@ public class Test { { // "com.google.common.collect;Iterators;false;getNext;(Iterator,Object);;Element of Argument[0];ReturnValue;value" Object out = null; - Iterator in = (Iterator)newWithElementDefault(source()); + Iterator in = (Iterator)List.of(source()).iterator(); out = Iterators.getNext(in, null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;getOnlyElement;(Iterator);;Element of Argument[0];ReturnValue;value" Object out = null; - Iterator in = (Iterator)newWithElementDefault(source()); + Iterator in = (Iterator)List.of(source()).iterator(); out = Iterators.getOnlyElement(in); sink(out); // $ hasValueFlow } @@ -4349,14 +5114,14 @@ public class Test { { // "com.google.common.collect;Iterators;false;getOnlyElement;(Iterator,Object);;Element of Argument[0];ReturnValue;value" Object out = null; - Iterator in = (Iterator)newWithElementDefault(source()); + Iterator in = (Iterator)List.of(source()).iterator(); out = Iterators.getOnlyElement(in, null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;limit;(Iterator,int);;Element of Argument[0];Element of ReturnValue;value" Iterator out = null; - Iterator in = (Iterator)newWithElementDefault(source()); + Iterator in = (Iterator)List.of(source()).iterator(); out = Iterators.limit(in, 0); sink(getElement(out)); // $ hasValueFlow } @@ -4370,21 +5135,21 @@ public class Test { { // "com.google.common.collect;Iterators;false;paddedPartition;(Iterator,int);;Element of Argument[0];Element of Element of ReturnValue;value" UnmodifiableIterator out = null; - Iterator in = (Iterator)newWithElementDefault(source()); + Iterator in = (Iterator)List.of(source()).iterator(); out = Iterators.paddedPartition(in, 0); sink(getElementDefault(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;partition;(Iterator,int);;Element of Argument[0];Element of Element of ReturnValue;value" UnmodifiableIterator out = null; - Iterator in = (Iterator)newWithElementDefault(source()); + Iterator in = (Iterator)List.of(source()).iterator(); out = Iterators.partition(in, 0); sink(getElementDefault(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;peekingIterator;(Iterator);;Element of Argument[0];Element of ReturnValue;value" PeekingIterator out = null; - Iterator in = (Iterator)newWithElementDefault(source()); + Iterator in = (Iterator)List.of(source()).iterator(); out = Iterators.peekingIterator(in); sink(getElement(out)); // $ hasValueFlow } @@ -4405,21 +5170,21 @@ public class Test { { // "com.google.common.collect;Iterators;false;toArray;(Iterator,Class);;Element of Argument[0];ArrayElement of ReturnValue;value" Object[] out = null; - Iterator in = (Iterator)newWithElementDefault(source()); + Iterator in = (Iterator)List.of(source()).iterator(); out = Iterators.toArray(in, null); sink(getArrayElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;tryFind;(Iterator,Predicate);;Element of Argument[0];Element of ReturnValue;value" Optional out = null; - Iterator in = (Iterator)newWithElementDefault(source()); + Iterator in = (Iterator)List.of(source()).iterator(); out = Iterators.tryFind(in, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;unmodifiableIterator;(Iterator);;Element of Argument[0];Element of ReturnValue;value" UnmodifiableIterator out = null; - Iterator in = (Iterator)newWithElementDefault(source()); + Iterator in = (Iterator)List.of(source()).iterator(); out = Iterators.unmodifiableIterator(in); sink(getElement(out)); // $ hasValueFlow } @@ -4433,14 +5198,14 @@ public class Test { { // "com.google.common.collect;LinkedHashMultimap;true;create;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value" LinkedHashMultimap out = null; - Multimap in = (Multimap)newWithMapKeyDefault(source()); + Multimap in = (Multimap)ImmutableMultimap.of(source(), null); out = LinkedHashMultimap.create(in); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;LinkedHashMultimap;true;create;(Multimap);;MapValue of Argument[0];MapValue of ReturnValue;value" LinkedHashMultimap out = null; - Multimap in = (Multimap)newWithMapValueDefault(source()); + Multimap in = (Multimap)ImmutableMultimap.of(null, source()); out = LinkedHashMultimap.create(in); sink(getMapValue(out)); // $ hasValueFlow } @@ -4454,14 +5219,14 @@ public class Test { { // "com.google.common.collect;LinkedListMultimap;true;create;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value" LinkedListMultimap out = null; - Multimap in = (Multimap)newWithMapKeyDefault(source()); + Multimap in = (Multimap)ImmutableMultimap.of(source(), null); out = LinkedListMultimap.create(in); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;LinkedListMultimap;true;create;(Multimap);;MapValue of Argument[0];MapValue of ReturnValue;value" LinkedListMultimap out = null; - Multimap in = (Multimap)newWithMapValueDefault(source()); + Multimap in = (Multimap)ImmutableMultimap.of(null, source()); out = LinkedListMultimap.create(in); sink(getMapValue(out)); // $ hasValueFlow } @@ -4538,7 +5303,7 @@ public class Test { { // "com.google.common.collect;Lists;false;newArrayList;(Iterator);;Element of Argument[0];Element of ReturnValue;value" ArrayList out = null; - Iterator in = (Iterator)newWithElementDefault(source()); + Iterator in = (Iterator)List.of(source()).iterator(); out = Lists.newArrayList(in); sink(getElement(out)); // $ hasValueFlow } @@ -4762,21 +5527,21 @@ public class Test { { // "com.google.common.collect;Maps;false;asMap;(NavigableSet,Function);;Element of Argument[0];MapKey of ReturnValue;value" NavigableMap out = null; - NavigableSet in = (NavigableSet)newWithElementDefault(source()); + NavigableSet in = (NavigableSet)ImmutableSortedSet.of((Comparable)source()); out = Maps.asMap(in, (Function)null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;asMap;(Set,Function);;Element of Argument[0];MapKey of ReturnValue;value" Map out = null; - Set in = (Set)newWithElementDefault(source()); + Set in = (Set)Set.of(source()); out = Maps.asMap(in, (Function)null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;asMap;(SortedSet,Function);;Element of Argument[0];MapKey of ReturnValue;value" SortedMap out = null; - SortedSet in = (SortedSet)newWithElementDefault(source()); + SortedSet in = (SortedSet)ImmutableSortedSet.of((Comparable)source()); out = Maps.asMap(in, (Function)null); sink(getMapKey(out)); // $ hasValueFlow } @@ -4839,7 +5604,7 @@ public class Test { { // "com.google.common.collect;Maps;false;difference;(SortedMap,Map);;MapKey of Argument[0];MapKey of SyntheticField[com.google.common.collect.MapDifference.left] of ReturnValue;value" SortedMapDifference out = null; - SortedMap in = (SortedMap)newWithMapKeyDefault(source()); + SortedMap in = (SortedMap)ImmutableSortedMap.of((Comparable)source(), null); out = Maps.difference(in, (Map)null); sink(getMapKeyDefault(out.entriesOnlyOnLeft())); // $ hasValueFlow } @@ -4853,7 +5618,7 @@ public class Test { { // "com.google.common.collect;Maps;false;difference;(SortedMap,Map);;MapValue of Argument[0];MapValue of SyntheticField[com.google.common.collect.MapDifference.left] of ReturnValue;value" SortedMapDifference out = null; - SortedMap in = (SortedMap)newWithMapValueDefault(source()); + SortedMap in = (SortedMap)ImmutableSortedMap.of(null, (Comparable)source()); out = Maps.difference(in, (Map)null); sink(getMapValueDefault(out.entriesOnlyOnLeft())); // $ hasValueFlow } @@ -4867,14 +5632,14 @@ public class Test { { // "com.google.common.collect;Maps;false;filterEntries;;;MapKey of Argument[0];MapKey of ReturnValue;value" SortedMap out = null; - SortedMap in = (SortedMap)newWithMapKeyDefault(source()); + SortedMap in = (SortedMap)ImmutableSortedMap.of((Comparable)source(), null); out = Maps.filterEntries(in, (Predicate)null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;filterEntries;;;MapKey of Argument[0];MapKey of ReturnValue;value" NavigableMap out = null; - NavigableMap in = (NavigableMap)newWithMapKeyDefault(source()); + NavigableMap in = (NavigableMap)ImmutableSortedMap.of((Comparable)source(), null); out = Maps.filterEntries(in, (Predicate)null); sink(getMapKey(out)); // $ hasValueFlow } @@ -4888,21 +5653,21 @@ public class Test { { // "com.google.common.collect;Maps;false;filterEntries;;;MapKey of Argument[0];MapKey of ReturnValue;value" BiMap out = null; - BiMap in = (BiMap)newWithMapKeyDefault(source()); + BiMap in = (BiMap)ImmutableBiMap.of(source(), null); out = Maps.filterEntries(in, (Predicate)null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;filterKeys;;;MapKey of Argument[0];MapKey of ReturnValue;value" SortedMap out = null; - SortedMap in = (SortedMap)newWithMapKeyDefault(source()); + SortedMap in = (SortedMap)ImmutableSortedMap.of((Comparable)source(), null); out = Maps.filterKeys(in, (Predicate)null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;filterKeys;;;MapKey of Argument[0];MapKey of ReturnValue;value" NavigableMap out = null; - NavigableMap in = (NavigableMap)newWithMapKeyDefault(source()); + NavigableMap in = (NavigableMap)ImmutableSortedMap.of((Comparable)source(), null); out = Maps.filterKeys(in, (Predicate)null); sink(getMapKey(out)); // $ hasValueFlow } @@ -4916,21 +5681,21 @@ public class Test { { // "com.google.common.collect;Maps;false;filterKeys;;;MapKey of Argument[0];MapKey of ReturnValue;value" BiMap out = null; - BiMap in = (BiMap)newWithMapKeyDefault(source()); + BiMap in = (BiMap)ImmutableBiMap.of(source(), null); out = Maps.filterKeys(in, (Predicate)null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;filterValues;;;MapKey of Argument[0];MapKey of ReturnValue;value" SortedMap out = null; - SortedMap in = (SortedMap)newWithMapKeyDefault(source()); + SortedMap in = (SortedMap)ImmutableSortedMap.of((Comparable)source(), null); out = Maps.filterValues(in, (Predicate)null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;filterValues;;;MapKey of Argument[0];MapKey of ReturnValue;value" NavigableMap out = null; - NavigableMap in = (NavigableMap)newWithMapKeyDefault(source()); + NavigableMap in = (NavigableMap)ImmutableSortedMap.of((Comparable)source(), null); out = Maps.filterValues(in, (Predicate)null); sink(getMapKey(out)); // $ hasValueFlow } @@ -4944,7 +5709,7 @@ public class Test { { // "com.google.common.collect;Maps;false;filterValues;;;MapKey of Argument[0];MapKey of ReturnValue;value" BiMap out = null; - BiMap in = (BiMap)newWithMapKeyDefault(source()); + BiMap in = (BiMap)ImmutableBiMap.of(source(), null); out = Maps.filterValues(in, (Predicate)null); sink(getMapKey(out)); // $ hasValueFlow } @@ -5021,56 +5786,56 @@ public class Test { { // "com.google.common.collect;Maps;false;newTreeMap;(SortedMap);;MapKey of Argument[0];MapKey of ReturnValue;value" TreeMap out = null; - SortedMap in = (SortedMap)newWithMapKeyDefault(source()); + SortedMap in = (SortedMap)ImmutableSortedMap.of((Comparable)source(), null); out = Maps.newTreeMap(in); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;newTreeMap;(SortedMap);;MapValue of Argument[0];MapValue of ReturnValue;value" TreeMap out = null; - SortedMap in = (SortedMap)newWithMapValueDefault(source()); + SortedMap in = (SortedMap)ImmutableSortedMap.of(null, (Comparable)source()); out = Maps.newTreeMap(in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;subMap;(NavigableMap,Range);;MapKey of Argument[0];MapKey of ReturnValue;value" NavigableMap out = null; - NavigableMap in = (NavigableMap)newWithMapKeyDefault(source()); + NavigableMap in = (NavigableMap)ImmutableSortedMap.of((Comparable)source(), null); out = Maps.subMap(in, null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;subMap;(NavigableMap,Range);;MapValue of Argument[0];MapValue of ReturnValue;value" NavigableMap out = null; - NavigableMap in = (NavigableMap)newWithMapValueDefault(source()); + NavigableMap in = (NavigableMap)ImmutableSortedMap.of(null, (Comparable)source()); out = Maps.subMap(in, null); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;synchronizedBiMap;(BiMap);;MapKey of Argument[0];MapKey of ReturnValue;value" BiMap out = null; - BiMap in = (BiMap)newWithMapKeyDefault(source()); + BiMap in = (BiMap)ImmutableBiMap.of(source(), null); out = Maps.synchronizedBiMap(in); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;synchronizedBiMap;(BiMap);;MapValue of Argument[0];MapValue of ReturnValue;value" BiMap out = null; - BiMap in = (BiMap)newWithMapValueDefault(source()); + BiMap in = (BiMap)ImmutableBiMap.of(null, source()); out = Maps.synchronizedBiMap(in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;synchronizedNavigableMap;(NavigableMap);;MapKey of Argument[0];MapKey of ReturnValue;value" NavigableMap out = null; - NavigableMap in = (NavigableMap)newWithMapKeyDefault(source()); + NavigableMap in = (NavigableMap)ImmutableSortedMap.of((Comparable)source(), null); out = Maps.synchronizedNavigableMap(in); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;synchronizedNavigableMap;(NavigableMap);;MapValue of Argument[0];MapValue of ReturnValue;value" NavigableMap out = null; - NavigableMap in = (NavigableMap)newWithMapValueDefault(source()); + NavigableMap in = (NavigableMap)ImmutableSortedMap.of(null, (Comparable)source()); out = Maps.synchronizedNavigableMap(in); sink(getMapValue(out)); // $ hasValueFlow } @@ -5084,7 +5849,7 @@ public class Test { { // "com.google.common.collect;Maps;false;toMap;(Iterator,Function);;Element of Argument[0];MapKey of ReturnValue;value" ImmutableMap out = null; - Iterator in = (Iterator)newWithElementDefault(source()); + Iterator in = (Iterator)List.of(source()).iterator(); out = Maps.toMap(in, (Function)null); sink(getMapKey(out)); // $ hasValueFlow } @@ -5098,14 +5863,14 @@ public class Test { { // "com.google.common.collect;Maps;false;transformValues;(NavigableMap,Function);;MapKey of Argument[0];MapKey of ReturnValue;value" NavigableMap out = null; - NavigableMap in = (NavigableMap)newWithMapKeyDefault(source()); + NavigableMap in = (NavigableMap)ImmutableSortedMap.of((Comparable)source(), null); out = Maps.transformValues(in, (Function)null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;transformValues;(SortedMap,Function);;MapKey of Argument[0];MapKey of ReturnValue;value" SortedMap out = null; - SortedMap in = (SortedMap)newWithMapKeyDefault(source()); + SortedMap in = (SortedMap)ImmutableSortedMap.of((Comparable)source(), null); out = Maps.transformValues(in, (Function)null); sink(getMapKey(out)); // $ hasValueFlow } @@ -5119,308 +5884,308 @@ public class Test { { // "com.google.common.collect;Maps;false;uniqueIndex;(Iterator,Function);;Element of Argument[0];MapValue of ReturnValue;value" ImmutableMap out = null; - Iterator in = (Iterator)newWithElementDefault(source()); + Iterator in = (Iterator)List.of(source()).iterator(); out = Maps.uniqueIndex(in, (Function)null); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;unmodifiableBiMap;(BiMap);;MapKey of Argument[0];MapKey of ReturnValue;value" BiMap out = null; - BiMap in = (BiMap)newWithMapKeyDefault(source()); + BiMap in = (BiMap)ImmutableBiMap.of(source(), null); out = Maps.unmodifiableBiMap(in); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;unmodifiableBiMap;(BiMap);;MapValue of Argument[0];MapValue of ReturnValue;value" BiMap out = null; - BiMap in = (BiMap)newWithMapValueDefault(source()); + BiMap in = (BiMap)ImmutableBiMap.of(null, source()); out = Maps.unmodifiableBiMap(in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;unmodifiableNavigableMap;(NavigableMap);;MapKey of Argument[0];MapKey of ReturnValue;value" NavigableMap out = null; - NavigableMap in = (NavigableMap)newWithMapKeyDefault(source()); + NavigableMap in = (NavigableMap)ImmutableSortedMap.of((Comparable)source(), null); out = Maps.unmodifiableNavigableMap(in); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;unmodifiableNavigableMap;(NavigableMap);;MapValue of Argument[0];MapValue of ReturnValue;value" NavigableMap out = null; - NavigableMap in = (NavigableMap)newWithMapValueDefault(source()); + NavigableMap in = (NavigableMap)ImmutableSortedMap.of(null, (Comparable)source()); out = Maps.unmodifiableNavigableMap(in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;asMap;();;MapKey of Argument[-1];MapKey of ReturnValue;value" NavigableMap out = null; - TreeMultimap in = (TreeMultimap)newWithMapKeyDefault(source()); + TreeMultimap in = (TreeMultimap)TreeMultimap.create(ImmutableMultimap.of((Comparable)source(), null)); out = in.asMap(); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;asMap;();;MapKey of Argument[-1];MapKey of ReturnValue;value" Map out = null; - SortedSetMultimap in = (SortedSetMultimap)newWithMapKeyDefault(source()); + SortedSetMultimap in = (SortedSetMultimap)TreeMultimap.create(ImmutableMultimap.of((Comparable)source(), null)); out = in.asMap(); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;asMap;();;MapKey of Argument[-1];MapKey of ReturnValue;value" Map out = null; - SetMultimap in = (SetMultimap)newWithMapKeyDefault(source()); + SetMultimap in = (SetMultimap)ImmutableSetMultimap.of(source(), null); out = in.asMap(); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;asMap;();;MapKey of Argument[-1];MapKey of ReturnValue;value" Map out = null; - Multimap in = (Multimap)newWithMapKeyDefault(source()); + Multimap in = (Multimap)ImmutableMultimap.of(source(), null); out = in.asMap(); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;asMap;();;MapKey of Argument[-1];MapKey of ReturnValue;value" Map out = null; - ListMultimap in = (ListMultimap)newWithMapKeyDefault(source()); + ListMultimap in = (ListMultimap)ImmutableListMultimap.of(source(), null); out = in.asMap(); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;asMap;();;MapKey of Argument[-1];MapKey of ReturnValue;value" ImmutableMap out = null; - ImmutableMultimap in = (ImmutableMultimap)newWithMapKeyDefault(source()); + ImmutableMultimap in = (ImmutableMultimap)ImmutableMultimap.of(source(), null); out = in.asMap(); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;asMap;();;MapValue of Argument[-1];Element of MapValue of ReturnValue;value" NavigableMap out = null; - TreeMultimap in = (TreeMultimap)newWithMapValueDefault(source()); + TreeMultimap in = (TreeMultimap)TreeMultimap.create(ImmutableMultimap.of(null, (Comparable)source())); out = in.asMap(); sink(getElementDefault(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;asMap;();;MapValue of Argument[-1];Element of MapValue of ReturnValue;value" Map out = null; - SortedSetMultimap in = (SortedSetMultimap)newWithMapValueDefault(source()); + SortedSetMultimap in = (SortedSetMultimap)TreeMultimap.create(ImmutableMultimap.of(null, (Comparable)source())); out = in.asMap(); sink(getElementDefault(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;asMap;();;MapValue of Argument[-1];Element of MapValue of ReturnValue;value" Map out = null; - SetMultimap in = (SetMultimap)newWithMapValueDefault(source()); + SetMultimap in = (SetMultimap)ImmutableSetMultimap.of(null, source()); out = in.asMap(); sink(getElementDefault(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;asMap;();;MapValue of Argument[-1];Element of MapValue of ReturnValue;value" Map out = null; - Multimap in = (Multimap)newWithMapValueDefault(source()); + Multimap in = (Multimap)ImmutableMultimap.of(null, source()); out = in.asMap(); sink(getElementDefault(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;asMap;();;MapValue of Argument[-1];Element of MapValue of ReturnValue;value" Map out = null; - ListMultimap in = (ListMultimap)newWithMapValueDefault(source()); + ListMultimap in = (ListMultimap)ImmutableListMultimap.of(null, source()); out = in.asMap(); sink(getElementDefault(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;asMap;();;MapValue of Argument[-1];Element of MapValue of ReturnValue;value" ImmutableMap out = null; - ImmutableMultimap in = (ImmutableMultimap)newWithMapValueDefault(source()); + ImmutableMultimap in = (ImmutableMultimap)ImmutableMultimap.of(null, source()); out = in.asMap(); sink(getElementDefault(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;entries;();;MapKey of Argument[-1];MapKey of Element of ReturnValue;value" Set out = null; - SetMultimap in = (SetMultimap)newWithMapKeyDefault(source()); + SetMultimap in = (SetMultimap)ImmutableSetMultimap.of(source(), null); out = in.entries(); sink(getMapKeyDefault(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;entries;();;MapKey of Argument[-1];MapKey of Element of ReturnValue;value" Set out = null; - LinkedHashMultimap in = (LinkedHashMultimap)newWithMapKeyDefault(source()); + LinkedHashMultimap in = (LinkedHashMultimap)LinkedHashMultimap.create(ImmutableMultimap.of(source(), null)); out = in.entries(); sink(getMapKeyDefault(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;entries;();;MapKey of Argument[-1];MapKey of Element of ReturnValue;value" List out = null; - LinkedListMultimap in = (LinkedListMultimap)newWithMapKeyDefault(source()); + LinkedListMultimap in = (LinkedListMultimap)LinkedListMultimap.create(ImmutableMultimap.of(source(), null)); out = in.entries(); sink(getMapKeyDefault(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;entries;();;MapKey of Argument[-1];MapKey of Element of ReturnValue;value" ImmutableSet out = null; - ImmutableSetMultimap in = (ImmutableSetMultimap)newWithMapKeyDefault(source()); + ImmutableSetMultimap in = (ImmutableSetMultimap)ImmutableSetMultimap.of(source(), null); out = in.entries(); sink(getMapKeyDefault(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;entries;();;MapKey of Argument[-1];MapKey of Element of ReturnValue;value" ImmutableCollection out = null; - ImmutableMultimap in = (ImmutableMultimap)newWithMapKeyDefault(source()); + ImmutableMultimap in = (ImmutableMultimap)ImmutableMultimap.of(source(), null); out = in.entries(); sink(getMapKeyDefault(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;entries;();;MapKey of Argument[-1];MapKey of Element of ReturnValue;value" Collection out = null; - Multimap in = (Multimap)newWithMapKeyDefault(source()); + Multimap in = (Multimap)ImmutableMultimap.of(source(), null); out = in.entries(); sink(getMapKeyDefault(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;entries;();;MapValue of Argument[-1];MapValue of Element of ReturnValue;value" Set out = null; - SetMultimap in = (SetMultimap)newWithMapValueDefault(source()); + SetMultimap in = (SetMultimap)ImmutableSetMultimap.of(null, source()); out = in.entries(); sink(getMapValueDefault(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;entries;();;MapValue of Argument[-1];MapValue of Element of ReturnValue;value" Set out = null; - LinkedHashMultimap in = (LinkedHashMultimap)newWithMapValueDefault(source()); + LinkedHashMultimap in = (LinkedHashMultimap)LinkedHashMultimap.create(ImmutableMultimap.of(null, source())); out = in.entries(); sink(getMapValueDefault(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;entries;();;MapValue of Argument[-1];MapValue of Element of ReturnValue;value" List out = null; - LinkedListMultimap in = (LinkedListMultimap)newWithMapValueDefault(source()); + LinkedListMultimap in = (LinkedListMultimap)LinkedListMultimap.create(ImmutableMultimap.of(null, source())); out = in.entries(); sink(getMapValueDefault(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;entries;();;MapValue of Argument[-1];MapValue of Element of ReturnValue;value" ImmutableSet out = null; - ImmutableSetMultimap in = (ImmutableSetMultimap)newWithMapValueDefault(source()); + ImmutableSetMultimap in = (ImmutableSetMultimap)ImmutableSetMultimap.of(null, source()); out = in.entries(); sink(getMapValueDefault(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;entries;();;MapValue of Argument[-1];MapValue of Element of ReturnValue;value" ImmutableCollection out = null; - ImmutableMultimap in = (ImmutableMultimap)newWithMapValueDefault(source()); + ImmutableMultimap in = (ImmutableMultimap)ImmutableMultimap.of(null, source()); out = in.entries(); sink(getMapValueDefault(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;entries;();;MapValue of Argument[-1];MapValue of Element of ReturnValue;value" Collection out = null; - Multimap in = (Multimap)newWithMapValueDefault(source()); + Multimap in = (Multimap)ImmutableMultimap.of(null, source()); out = in.entries(); sink(getMapValueDefault(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;get;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" SortedSet out = null; - SortedSetMultimap in = (SortedSetMultimap)newWithMapValueDefault(source()); + SortedSetMultimap in = (SortedSetMultimap)TreeMultimap.create(ImmutableMultimap.of(null, (Comparable)source())); out = in.get(null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;get;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" Set out = null; - SetMultimap in = (SetMultimap)newWithMapValueDefault(source()); + SetMultimap in = (SetMultimap)ImmutableSetMultimap.of(null, source()); out = in.get(null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;get;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" NavigableSet out = null; - TreeMultimap in = (TreeMultimap)newWithMapValueDefault(source()); + TreeMultimap in = (TreeMultimap)TreeMultimap.create(ImmutableMultimap.of(null, (Comparable)source())); out = in.get(null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;get;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" List out = null; - ListMultimap in = (ListMultimap)newWithMapValueDefault(source()); + ListMultimap in = (ListMultimap)ImmutableListMultimap.of(null, source()); out = in.get(null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;get;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" List out = null; - LinkedListMultimap in = (LinkedListMultimap)newWithMapValueDefault(source()); + LinkedListMultimap in = (LinkedListMultimap)LinkedListMultimap.create(ImmutableMultimap.of(null, source())); out = in.get(null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;get;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" ImmutableSet out = null; - ImmutableSetMultimap in = (ImmutableSetMultimap)newWithMapValueDefault(source()); + ImmutableSetMultimap in = (ImmutableSetMultimap)ImmutableSetMultimap.of(null, source()); out = in.get(null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;get;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" ImmutableList out = null; - ImmutableListMultimap in = (ImmutableListMultimap)newWithMapValueDefault(source()); + ImmutableListMultimap in = (ImmutableListMultimap)ImmutableListMultimap.of(null, source()); out = in.get(null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;get;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" ImmutableCollection out = null; - ImmutableMultimap in = (ImmutableMultimap)newWithMapValueDefault(source()); + ImmutableMultimap in = (ImmutableMultimap)ImmutableMultimap.of(null, source()); out = in.get(null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;get;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" Collection out = null; - Multimap in = (Multimap)newWithMapValueDefault(source()); + Multimap in = (Multimap)ImmutableMultimap.of(null, source()); out = in.get(null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;keySet;();;MapKey of Argument[-1];Element of ReturnValue;value" Set out = null; - Multimap in = (Multimap)newWithMapKeyDefault(source()); + Multimap in = (Multimap)ImmutableMultimap.of(source(), null); out = in.keySet(); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;keySet;();;MapKey of Argument[-1];Element of ReturnValue;value" Set out = null; - LinkedHashMultimap in = (LinkedHashMultimap)newWithMapKeyDefault(source()); + LinkedHashMultimap in = (LinkedHashMultimap)LinkedHashMultimap.create(ImmutableMultimap.of(source(), null)); out = in.keySet(); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;keySet;();;MapKey of Argument[-1];Element of ReturnValue;value" NavigableSet out = null; - TreeMultimap in = (TreeMultimap)newWithMapKeyDefault(source()); + TreeMultimap in = (TreeMultimap)TreeMultimap.create(ImmutableMultimap.of((Comparable)source(), null)); out = in.keySet(); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;keySet;();;MapKey of Argument[-1];Element of ReturnValue;value" ImmutableSet out = null; - ImmutableMultimap in = (ImmutableMultimap)newWithMapKeyDefault(source()); + ImmutableMultimap in = (ImmutableMultimap)ImmutableMultimap.of(source(), null); out = in.keySet(); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;keys;();;MapKey of Argument[-1];Element of ReturnValue;value" Multiset out = null; - Multimap in = (Multimap)newWithMapKeyDefault(source()); + Multimap in = (Multimap)ImmutableMultimap.of(source(), null); out = in.keys(); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;keys;();;MapKey of Argument[-1];Element of ReturnValue;value" ImmutableMultiset out = null; - ImmutableMultimap in = (ImmutableMultimap)newWithMapKeyDefault(source()); + ImmutableMultimap in = (ImmutableMultimap)ImmutableMultimap.of(source(), null); out = in.keys(); sink(getElement(out)); // $ hasValueFlow } @@ -5469,28 +6234,28 @@ public class Test { { // "com.google.common.collect;Multimap;true;putAll;(Multimap);;MapKey of Argument[0];MapKey of Argument[-1];value" Multimap out = null; - Multimap in = (Multimap)newWithMapKeyDefault(source()); + Multimap in = (Multimap)ImmutableMultimap.of(source(), null); out.putAll(in); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;putAll;(Multimap);;MapKey of Argument[0];MapKey of Argument[-1];value" ImmutableMultimap out = null; - Multimap in = (Multimap)newWithMapKeyDefault(source()); + Multimap in = (Multimap)ImmutableMultimap.of(source(), null); out.putAll(in); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;putAll;(Multimap);;MapValue of Argument[0];MapValue of Argument[-1];value" Multimap out = null; - Multimap in = (Multimap)newWithMapValueDefault(source()); + Multimap in = (Multimap)ImmutableMultimap.of(null, source()); out.putAll(in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;putAll;(Multimap);;MapValue of Argument[0];MapValue of Argument[-1];value" ImmutableMultimap out = null; - Multimap in = (Multimap)newWithMapValueDefault(source()); + Multimap in = (Multimap)ImmutableMultimap.of(null, source()); out.putAll(in); sink(getMapValue(out)); // $ hasValueFlow } @@ -5525,56 +6290,56 @@ public class Test { { // "com.google.common.collect;Multimap;true;removeAll;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" SortedSet out = null; - SortedSetMultimap in = (SortedSetMultimap)newWithMapValueDefault(source()); + SortedSetMultimap in = (SortedSetMultimap)TreeMultimap.create(ImmutableMultimap.of(null, (Comparable)source())); out = in.removeAll(null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;removeAll;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" Set out = null; - SetMultimap in = (SetMultimap)newWithMapValueDefault(source()); + SetMultimap in = (SetMultimap)ImmutableSetMultimap.of(null, source()); out = in.removeAll(null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;removeAll;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" List out = null; - ListMultimap in = (ListMultimap)newWithMapValueDefault(source()); + ListMultimap in = (ListMultimap)ImmutableListMultimap.of(null, source()); out = in.removeAll(null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;removeAll;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" List out = null; - LinkedListMultimap in = (LinkedListMultimap)newWithMapValueDefault(source()); + LinkedListMultimap in = (LinkedListMultimap)LinkedListMultimap.create(ImmutableMultimap.of(null, source())); out = in.removeAll(null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;removeAll;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" ImmutableSet out = null; - ImmutableSetMultimap in = (ImmutableSetMultimap)newWithMapValueDefault(source()); + ImmutableSetMultimap in = (ImmutableSetMultimap)ImmutableSetMultimap.of(null, source()); out = in.removeAll(null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;removeAll;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" ImmutableList out = null; - ImmutableListMultimap in = (ImmutableListMultimap)newWithMapValueDefault(source()); + ImmutableListMultimap in = (ImmutableListMultimap)ImmutableListMultimap.of(null, source()); out = in.removeAll(null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;removeAll;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" ImmutableCollection out = null; - ImmutableMultimap in = (ImmutableMultimap)newWithMapValueDefault(source()); + ImmutableMultimap in = (ImmutableMultimap)ImmutableMultimap.of(null, source()); out = in.removeAll(null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;removeAll;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" Collection out = null; - Multimap in = (Multimap)newWithMapValueDefault(source()); + Multimap in = (Multimap)ImmutableMultimap.of(null, source()); out = in.removeAll(null); sink(getElement(out)); // $ hasValueFlow } @@ -5707,231 +6472,231 @@ public class Test { { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;MapValue of Argument[-1];Element of ReturnValue;value" SortedSet out = null; - SortedSetMultimap in = (SortedSetMultimap)newWithMapValueDefault(source()); + SortedSetMultimap in = (SortedSetMultimap)TreeMultimap.create(ImmutableMultimap.of(null, (Comparable)source())); out = in.replaceValues(null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;MapValue of Argument[-1];Element of ReturnValue;value" Set out = null; - SetMultimap in = (SetMultimap)newWithMapValueDefault(source()); + SetMultimap in = (SetMultimap)ImmutableSetMultimap.of(null, source()); out = in.replaceValues(null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;MapValue of Argument[-1];Element of ReturnValue;value" Set out = null; - LinkedHashMultimap in = (LinkedHashMultimap)newWithMapValueDefault(source()); + LinkedHashMultimap in = (LinkedHashMultimap)LinkedHashMultimap.create(ImmutableMultimap.of(null, source())); out = in.replaceValues(null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;MapValue of Argument[-1];Element of ReturnValue;value" List out = null; - ListMultimap in = (ListMultimap)newWithMapValueDefault(source()); + ListMultimap in = (ListMultimap)ImmutableListMultimap.of(null, source()); out = in.replaceValues(null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;MapValue of Argument[-1];Element of ReturnValue;value" List out = null; - LinkedListMultimap in = (LinkedListMultimap)newWithMapValueDefault(source()); + LinkedListMultimap in = (LinkedListMultimap)LinkedListMultimap.create(ImmutableMultimap.of(null, source())); out = in.replaceValues(null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;MapValue of Argument[-1];Element of ReturnValue;value" ImmutableSet out = null; - ImmutableSetMultimap in = (ImmutableSetMultimap)newWithMapValueDefault(source()); + ImmutableSetMultimap in = (ImmutableSetMultimap)ImmutableSetMultimap.of(null, source()); out = in.replaceValues(null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;MapValue of Argument[-1];Element of ReturnValue;value" ImmutableList out = null; - ImmutableListMultimap in = (ImmutableListMultimap)newWithMapValueDefault(source()); + ImmutableListMultimap in = (ImmutableListMultimap)ImmutableListMultimap.of(null, source()); out = in.replaceValues(null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;MapValue of Argument[-1];Element of ReturnValue;value" ImmutableCollection out = null; - ImmutableMultimap in = (ImmutableMultimap)newWithMapValueDefault(source()); + ImmutableMultimap in = (ImmutableMultimap)ImmutableMultimap.of(null, source()); out = in.replaceValues(null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;MapValue of Argument[-1];Element of ReturnValue;value" Collection out = null; - Multimap in = (Multimap)newWithMapValueDefault(source()); + Multimap in = (Multimap)ImmutableMultimap.of(null, source()); out = in.replaceValues(null, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;values;();;MapValue of Argument[-1];Element of ReturnValue;value" List out = null; - LinkedListMultimap in = (LinkedListMultimap)newWithMapValueDefault(source()); + LinkedListMultimap in = (LinkedListMultimap)LinkedListMultimap.create(ImmutableMultimap.of(null, source())); out = in.values(); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;values;();;MapValue of Argument[-1];Element of ReturnValue;value" ImmutableCollection out = null; - ImmutableMultimap in = (ImmutableMultimap)newWithMapValueDefault(source()); + ImmutableMultimap in = (ImmutableMultimap)ImmutableMultimap.of(null, source()); out = in.values(); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;values;();;MapValue of Argument[-1];Element of ReturnValue;value" Collection out = null; - Multimap in = (Multimap)newWithMapValueDefault(source()); + Multimap in = (Multimap)ImmutableMultimap.of(null, source()); out = in.values(); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;values;();;MapValue of Argument[-1];Element of ReturnValue;value" Collection out = null; - LinkedHashMultimap in = (LinkedHashMultimap)newWithMapValueDefault(source()); + LinkedHashMultimap in = (LinkedHashMultimap)LinkedHashMultimap.create(ImmutableMultimap.of(null, source())); out = in.values(); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;asMap;(ListMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value" Map out = null; - ListMultimap in = (ListMultimap)newWithMapKeyDefault(source()); + ListMultimap in = (ListMultimap)ImmutableListMultimap.of(source(), null); out = Multimaps.asMap(in); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;asMap;(ListMultimap);;MapValue of Argument[0];Element of MapValue of ReturnValue;value" Map out = null; - ListMultimap in = (ListMultimap)newWithMapValueDefault(source()); + ListMultimap in = (ListMultimap)ImmutableListMultimap.of(null, source()); out = Multimaps.asMap(in); sink(getElementDefault(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;asMap;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value" Map out = null; - Multimap in = (Multimap)newWithMapKeyDefault(source()); + Multimap in = (Multimap)ImmutableMultimap.of(source(), null); out = Multimaps.asMap(in); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;asMap;(Multimap);;MapValue of Argument[0];Element of MapValue of ReturnValue;value" Map out = null; - Multimap in = (Multimap)newWithMapValueDefault(source()); + Multimap in = (Multimap)ImmutableMultimap.of(null, source()); out = Multimaps.asMap(in); sink(getElementDefault(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;asMap;(SetMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value" Map out = null; - SetMultimap in = (SetMultimap)newWithMapKeyDefault(source()); + SetMultimap in = (SetMultimap)ImmutableSetMultimap.of(source(), null); out = Multimaps.asMap(in); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;asMap;(SetMultimap);;MapValue of Argument[0];Element of MapValue of ReturnValue;value" Map out = null; - SetMultimap in = (SetMultimap)newWithMapValueDefault(source()); + SetMultimap in = (SetMultimap)ImmutableSetMultimap.of(null, source()); out = Multimaps.asMap(in); sink(getElementDefault(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;asMap;(SortedSetMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value" Map out = null; - SortedSetMultimap in = (SortedSetMultimap)newWithMapKeyDefault(source()); + SortedSetMultimap in = (SortedSetMultimap)TreeMultimap.create(ImmutableMultimap.of((Comparable)source(), null)); out = Multimaps.asMap(in); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;asMap;(SortedSetMultimap);;MapValue of Argument[0];Element of MapValue of ReturnValue;value" Map out = null; - SortedSetMultimap in = (SortedSetMultimap)newWithMapValueDefault(source()); + SortedSetMultimap in = (SortedSetMultimap)TreeMultimap.create(ImmutableMultimap.of(null, (Comparable)source())); out = Multimaps.asMap(in); sink(getElementDefault(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;filterEntries;(Multimap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value" Multimap out = null; - Multimap in = (Multimap)newWithMapKeyDefault(source()); + Multimap in = (Multimap)ImmutableMultimap.of(source(), null); out = Multimaps.filterEntries(in, (Predicate)null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;filterEntries;(Multimap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value" Multimap out = null; - Multimap in = (Multimap)newWithMapValueDefault(source()); + Multimap in = (Multimap)ImmutableMultimap.of(null, source()); out = Multimaps.filterEntries(in, (Predicate)null); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;filterEntries;(SetMultimap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value" SetMultimap out = null; - SetMultimap in = (SetMultimap)newWithMapKeyDefault(source()); + SetMultimap in = (SetMultimap)ImmutableSetMultimap.of(source(), null); out = Multimaps.filterEntries(in, (Predicate)null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;filterEntries;(SetMultimap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value" SetMultimap out = null; - SetMultimap in = (SetMultimap)newWithMapValueDefault(source()); + SetMultimap in = (SetMultimap)ImmutableSetMultimap.of(null, source()); out = Multimaps.filterEntries(in, (Predicate)null); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;filterKeys;(Multimap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value" Multimap out = null; - Multimap in = (Multimap)newWithMapKeyDefault(source()); + Multimap in = (Multimap)ImmutableMultimap.of(source(), null); out = Multimaps.filterKeys(in, (Predicate)null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;filterKeys;(Multimap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value" Multimap out = null; - Multimap in = (Multimap)newWithMapValueDefault(source()); + Multimap in = (Multimap)ImmutableMultimap.of(null, source()); out = Multimaps.filterKeys(in, (Predicate)null); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;filterKeys;(SetMultimap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value" SetMultimap out = null; - SetMultimap in = (SetMultimap)newWithMapKeyDefault(source()); + SetMultimap in = (SetMultimap)ImmutableSetMultimap.of(source(), null); out = Multimaps.filterKeys(in, (Predicate)null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;filterKeys;(SetMultimap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value" SetMultimap out = null; - SetMultimap in = (SetMultimap)newWithMapValueDefault(source()); + SetMultimap in = (SetMultimap)ImmutableSetMultimap.of(null, source()); out = Multimaps.filterKeys(in, (Predicate)null); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;filterValues;(Multimap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value" Multimap out = null; - Multimap in = (Multimap)newWithMapKeyDefault(source()); + Multimap in = (Multimap)ImmutableMultimap.of(source(), null); out = Multimaps.filterValues(in, (Predicate)null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;filterValues;(Multimap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value" Multimap out = null; - Multimap in = (Multimap)newWithMapValueDefault(source()); + Multimap in = (Multimap)ImmutableMultimap.of(null, source()); out = Multimaps.filterValues(in, (Predicate)null); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;filterValues;(SetMultimap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value" SetMultimap out = null; - SetMultimap in = (SetMultimap)newWithMapKeyDefault(source()); + SetMultimap in = (SetMultimap)ImmutableSetMultimap.of(source(), null); out = Multimaps.filterValues(in, (Predicate)null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;filterValues;(SetMultimap,Predicate);;MapValue of Argument[0];MapValue of ReturnValue;value" SetMultimap out = null; - SetMultimap in = (SetMultimap)newWithMapValueDefault(source()); + SetMultimap in = (SetMultimap)ImmutableSetMultimap.of(null, source()); out = Multimaps.filterValues(in, (Predicate)null); sink(getMapValue(out)); // $ hasValueFlow } @@ -5959,7 +6724,7 @@ public class Test { { // "com.google.common.collect;Multimaps;false;index;(Iterator,Function);;Element of Argument[0];MapValue of ReturnValue;value" ImmutableListMultimap out = null; - Iterator in = (Iterator)newWithElementDefault(source()); + Iterator in = (Iterator)List.of(source()).iterator(); out = Multimaps.index(in, (Function)null); sink(getMapValue(out)); // $ hasValueFlow } @@ -5973,14 +6738,14 @@ public class Test { { // "com.google.common.collect;Multimaps;false;invertFrom;(Multimap,Multimap);;MapKey of Argument[0];MapValue of Argument[1];value" Multimap out = null; - Multimap in = (Multimap)newWithMapKeyDefault(source()); + Multimap in = (Multimap)ImmutableMultimap.of(source(), null); Multimaps.invertFrom(in, out); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;invertFrom;(Multimap,Multimap);;MapValue of Argument[0];MapKey of Argument[1];value" Multimap out = null; - Multimap in = (Multimap)newWithMapValueDefault(source()); + Multimap in = (Multimap)ImmutableMultimap.of(null, source()); Multimaps.invertFrom(in, out); sink(getMapKey(out)); // $ hasValueFlow } @@ -6043,175 +6808,175 @@ public class Test { { // "com.google.common.collect;Multimaps;false;synchronizedListMultimap;(ListMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value" ListMultimap out = null; - ListMultimap in = (ListMultimap)newWithMapKeyDefault(source()); + ListMultimap in = (ListMultimap)ImmutableListMultimap.of(source(), null); out = Multimaps.synchronizedListMultimap(in); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;synchronizedListMultimap;(ListMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value" ListMultimap out = null; - ListMultimap in = (ListMultimap)newWithMapValueDefault(source()); + ListMultimap in = (ListMultimap)ImmutableListMultimap.of(null, source()); out = Multimaps.synchronizedListMultimap(in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;synchronizedMultimap;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value" Multimap out = null; - Multimap in = (Multimap)newWithMapKeyDefault(source()); + Multimap in = (Multimap)ImmutableMultimap.of(source(), null); out = Multimaps.synchronizedMultimap(in); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;synchronizedMultimap;(Multimap);;MapValue of Argument[0];MapValue of ReturnValue;value" Multimap out = null; - Multimap in = (Multimap)newWithMapValueDefault(source()); + Multimap in = (Multimap)ImmutableMultimap.of(null, source()); out = Multimaps.synchronizedMultimap(in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;synchronizedSetMultimap;(SetMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value" SetMultimap out = null; - SetMultimap in = (SetMultimap)newWithMapKeyDefault(source()); + SetMultimap in = (SetMultimap)ImmutableSetMultimap.of(source(), null); out = Multimaps.synchronizedSetMultimap(in); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;synchronizedSetMultimap;(SetMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value" SetMultimap out = null; - SetMultimap in = (SetMultimap)newWithMapValueDefault(source()); + SetMultimap in = (SetMultimap)ImmutableSetMultimap.of(null, source()); out = Multimaps.synchronizedSetMultimap(in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;synchronizedSortedSetMultimap;(SortedSetMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value" SortedSetMultimap out = null; - SortedSetMultimap in = (SortedSetMultimap)newWithMapKeyDefault(source()); + SortedSetMultimap in = (SortedSetMultimap)TreeMultimap.create(ImmutableMultimap.of((Comparable)source(), null)); out = Multimaps.synchronizedSortedSetMultimap(in); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;synchronizedSortedSetMultimap;(SortedSetMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value" SortedSetMultimap out = null; - SortedSetMultimap in = (SortedSetMultimap)newWithMapValueDefault(source()); + SortedSetMultimap in = (SortedSetMultimap)TreeMultimap.create(ImmutableMultimap.of(null, (Comparable)source())); out = Multimaps.synchronizedSortedSetMultimap(in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;transformValues;(ListMultimap,Function);;MapKey of Argument[0];MapKey of ReturnValue;value" ListMultimap out = null; - ListMultimap in = (ListMultimap)newWithMapKeyDefault(source()); + ListMultimap in = (ListMultimap)ImmutableListMultimap.of(source(), null); out = Multimaps.transformValues(in, (Function)null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;transformValues;(Multimap,Function);;MapKey of Argument[0];MapKey of ReturnValue;value" Multimap out = null; - Multimap in = (Multimap)newWithMapKeyDefault(source()); + Multimap in = (Multimap)ImmutableMultimap.of(source(), null); out = Multimaps.transformValues(in, (Function)null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;unmodifiableListMultimap;(ImmutableListMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value" ListMultimap out = null; - ImmutableListMultimap in = (ImmutableListMultimap)newWithMapKeyDefault(source()); + ImmutableListMultimap in = (ImmutableListMultimap)ImmutableListMultimap.of(source(), null); out = Multimaps.unmodifiableListMultimap(in); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;unmodifiableListMultimap;(ImmutableListMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value" ListMultimap out = null; - ImmutableListMultimap in = (ImmutableListMultimap)newWithMapValueDefault(source()); + ImmutableListMultimap in = (ImmutableListMultimap)ImmutableListMultimap.of(null, source()); out = Multimaps.unmodifiableListMultimap(in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;unmodifiableListMultimap;(ListMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value" ListMultimap out = null; - ListMultimap in = (ListMultimap)newWithMapKeyDefault(source()); + ListMultimap in = (ListMultimap)ImmutableListMultimap.of(source(), null); out = Multimaps.unmodifiableListMultimap(in); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;unmodifiableListMultimap;(ListMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value" ListMultimap out = null; - ListMultimap in = (ListMultimap)newWithMapValueDefault(source()); + ListMultimap in = (ListMultimap)ImmutableListMultimap.of(null, source()); out = Multimaps.unmodifiableListMultimap(in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;unmodifiableMultimap;(ImmutableMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value" Multimap out = null; - ImmutableMultimap in = (ImmutableMultimap)newWithMapKeyDefault(source()); + ImmutableMultimap in = (ImmutableMultimap)ImmutableMultimap.of(source(), null); out = Multimaps.unmodifiableMultimap(in); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;unmodifiableMultimap;(ImmutableMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value" Multimap out = null; - ImmutableMultimap in = (ImmutableMultimap)newWithMapValueDefault(source()); + ImmutableMultimap in = (ImmutableMultimap)ImmutableMultimap.of(null, source()); out = Multimaps.unmodifiableMultimap(in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;unmodifiableMultimap;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value" Multimap out = null; - Multimap in = (Multimap)newWithMapKeyDefault(source()); + Multimap in = (Multimap)ImmutableMultimap.of(source(), null); out = Multimaps.unmodifiableMultimap(in); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;unmodifiableMultimap;(Multimap);;MapValue of Argument[0];MapValue of ReturnValue;value" Multimap out = null; - Multimap in = (Multimap)newWithMapValueDefault(source()); + Multimap in = (Multimap)ImmutableMultimap.of(null, source()); out = Multimaps.unmodifiableMultimap(in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;unmodifiableSetMultimap;(ImmutableSetMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value" SetMultimap out = null; - ImmutableSetMultimap in = (ImmutableSetMultimap)newWithMapKeyDefault(source()); + ImmutableSetMultimap in = (ImmutableSetMultimap)ImmutableSetMultimap.of(source(), null); out = Multimaps.unmodifiableSetMultimap(in); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;unmodifiableSetMultimap;(ImmutableSetMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value" SetMultimap out = null; - ImmutableSetMultimap in = (ImmutableSetMultimap)newWithMapValueDefault(source()); + ImmutableSetMultimap in = (ImmutableSetMultimap)ImmutableSetMultimap.of(null, source()); out = Multimaps.unmodifiableSetMultimap(in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;unmodifiableSetMultimap;(SetMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value" SetMultimap out = null; - SetMultimap in = (SetMultimap)newWithMapKeyDefault(source()); + SetMultimap in = (SetMultimap)ImmutableSetMultimap.of(source(), null); out = Multimaps.unmodifiableSetMultimap(in); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;unmodifiableSetMultimap;(SetMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value" SetMultimap out = null; - SetMultimap in = (SetMultimap)newWithMapValueDefault(source()); + SetMultimap in = (SetMultimap)ImmutableSetMultimap.of(null, source()); out = Multimaps.unmodifiableSetMultimap(in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;unmodifiableSortedSetMultimap;(SortedSetMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value" SortedSetMultimap out = null; - SortedSetMultimap in = (SortedSetMultimap)newWithMapKeyDefault(source()); + SortedSetMultimap in = (SortedSetMultimap)TreeMultimap.create(ImmutableMultimap.of((Comparable)source(), null)); out = Multimaps.unmodifiableSortedSetMultimap(in); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;unmodifiableSortedSetMultimap;(SortedSetMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value" SortedSetMultimap out = null; - SortedSetMultimap in = (SortedSetMultimap)newWithMapValueDefault(source()); + SortedSetMultimap in = (SortedSetMultimap)TreeMultimap.create(ImmutableMultimap.of(null, (Comparable)source())); out = Multimaps.unmodifiableSortedSetMultimap(in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Multiset$Entry;true;getElement;();;Element of Argument[-1];ReturnValue;value" Object out = null; - Multiset.Entry in = (Multiset.Entry)newWithElementDefault(source()); + Multiset.Entry in = (Multiset.Entry)newEntryWithElement(source()); out = in.getElement(); sink(out); // $ hasValueFlow } @@ -6246,49 +7011,49 @@ public class Test { { // "com.google.common.collect;Multiset;true;elementSet;();;Element of Argument[-1];Element of ReturnValue;value" Set out = null; - Multiset in = (Multiset)newWithElementDefault(source()); + Multiset in = (Multiset)ImmutableMultiset.of(source()); out = in.elementSet(); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multiset;true;elementSet;();;Element of Argument[-1];Element of ReturnValue;value" NavigableSet out = null; - SortedMultiset in = (SortedMultiset)newWithElementDefault(source()); + SortedMultiset in = (SortedMultiset)ImmutableSortedMultiset.of((Comparable)source()); out = in.elementSet(); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multiset;true;elementSet;();;Element of Argument[-1];Element of ReturnValue;value" ImmutableSortedSet out = null; - ImmutableSortedMultiset in = (ImmutableSortedMultiset)newWithElementDefault(source()); + ImmutableSortedMultiset in = (ImmutableSortedMultiset)ImmutableSortedMultiset.of(source()); out = in.elementSet(); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multiset;true;elementSet;();;Element of Argument[-1];Element of ReturnValue;value" ImmutableSet out = null; - ImmutableMultiset in = (ImmutableMultiset)newWithElementDefault(source()); + ImmutableMultiset in = (ImmutableMultiset)ImmutableMultiset.of(source()); out = in.elementSet(); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multiset;true;entrySet;();;Element of Argument[-1];Element of Element of ReturnValue;value" Set out = null; - SortedMultiset in = (SortedMultiset)newWithElementDefault(source()); + SortedMultiset in = (SortedMultiset)ImmutableSortedMultiset.of((Comparable)source()); out = in.entrySet(); sink(getElementDefault(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Multiset;true;entrySet;();;Element of Argument[-1];Element of Element of ReturnValue;value" Set out = null; - Multiset in = (Multiset)newWithElementDefault(source()); + Multiset in = (Multiset)ImmutableMultiset.of(source()); out = in.entrySet(); sink(getElementDefault(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Multiset;true;entrySet;();;Element of Argument[-1];Element of Element of ReturnValue;value" ImmutableSet out = null; - ImmutableMultiset in = (ImmutableMultiset)newWithElementDefault(source()); + ImmutableMultiset in = (ImmutableMultiset)ImmutableMultiset.of(source()); out = in.entrySet(); sink(getElementDefault(getElement(out))); // $ hasValueFlow } @@ -6351,21 +7116,21 @@ public class Test { { // "com.google.common.collect;Multisets;false;copyHighestCountFirst;(Multiset);;Element of Argument[0];Element of ReturnValue;value" ImmutableMultiset out = null; - Multiset in = (Multiset)newWithElementDefault(source()); + Multiset in = (Multiset)ImmutableMultiset.of(source()); out = Multisets.copyHighestCountFirst(in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multisets;false;difference;(Multiset,Multiset);;Element of Argument[0];Element of ReturnValue;value" Multiset out = null; - Multiset in = (Multiset)newWithElementDefault(source()); + Multiset in = (Multiset)ImmutableMultiset.of(source()); out = Multisets.difference(in, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multisets;false;filter;(Multiset,Predicate);;Element of Argument[0];Element of ReturnValue;value" Multiset out = null; - Multiset in = (Multiset)newWithElementDefault(source()); + Multiset in = (Multiset)ImmutableMultiset.of(source()); out = Multisets.filter(in, null); sink(getElement(out)); // $ hasValueFlow } @@ -6379,63 +7144,63 @@ public class Test { { // "com.google.common.collect;Multisets;false;intersection;(Multiset,Multiset);;Element of Argument[0..1];Element of ReturnValue;value" Multiset out = null; - Multiset in = (Multiset)newWithElementDefault(source()); + Multiset in = (Multiset)ImmutableMultiset.of(source()); out = Multisets.intersection(null, in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multisets;false;intersection;(Multiset,Multiset);;Element of Argument[0..1];Element of ReturnValue;value" Multiset out = null; - Multiset in = (Multiset)newWithElementDefault(source()); + Multiset in = (Multiset)ImmutableMultiset.of(source()); out = Multisets.intersection(in, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multisets;false;sum;(Multiset,Multiset);;Element of Argument[0..1];Element of ReturnValue;value" Multiset out = null; - Multiset in = (Multiset)newWithElementDefault(source()); + Multiset in = (Multiset)ImmutableMultiset.of(source()); out = Multisets.sum(null, in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multisets;false;sum;(Multiset,Multiset);;Element of Argument[0..1];Element of ReturnValue;value" Multiset out = null; - Multiset in = (Multiset)newWithElementDefault(source()); + Multiset in = (Multiset)ImmutableMultiset.of(source()); out = Multisets.sum(in, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multisets;false;union;(Multiset,Multiset);;Element of Argument[0..1];Element of ReturnValue;value" Multiset out = null; - Multiset in = (Multiset)newWithElementDefault(source()); + Multiset in = (Multiset)ImmutableMultiset.of(source()); out = Multisets.union(null, in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multisets;false;union;(Multiset,Multiset);;Element of Argument[0..1];Element of ReturnValue;value" Multiset out = null; - Multiset in = (Multiset)newWithElementDefault(source()); + Multiset in = (Multiset)ImmutableMultiset.of(source()); out = Multisets.union(in, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multisets;false;unmodifiableMultiset;(ImmutableMultiset);;Element of Argument[0];Element of ReturnValue;value" Multiset out = null; - ImmutableMultiset in = (ImmutableMultiset)newWithElementDefault(source()); + ImmutableMultiset in = (ImmutableMultiset)ImmutableMultiset.of(source()); out = Multisets.unmodifiableMultiset(in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multisets;false;unmodifiableMultiset;(Multiset);;Element of Argument[0];Element of ReturnValue;value" Multiset out = null; - Multiset in = (Multiset)newWithElementDefault(source()); + Multiset in = (Multiset)ImmutableMultiset.of(source()); out = Multisets.unmodifiableMultiset(in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Multisets;false;unmodifiableSortedMultiset;(SortedMultiset);;Element of Argument[0];Element of ReturnValue;value" SortedMultiset out = null; - SortedMultiset in = (SortedMultiset)newWithElementDefault(source()); + SortedMultiset in = (SortedMultiset)ImmutableSortedMultiset.of((Comparable)source()); out = Multisets.unmodifiableSortedMultiset(in); sink(getElement(out)); // $ hasValueFlow } @@ -6568,14 +7333,14 @@ public class Test { { // "com.google.common.collect;Sets$SetView;true;copyInto;(Set);;Element of Argument[-1];Element of Argument[0];value" Set out = null; - Sets.SetView in = (Sets.SetView)newWithElementDefault(source()); + Sets.SetView in = (Sets.SetView)Sets.union(Set.of(source()), null); in.copyInto(out); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Sets$SetView;true;immutableCopy;();;Element of Argument[-1];Element of ReturnValue;value" ImmutableSet out = null; - Sets.SetView in = (Sets.SetView)newWithElementDefault(source()); + Sets.SetView in = (Sets.SetView)Sets.union(Set.of(source()), null); out = in.immutableCopy(); sink(getElement(out)); // $ hasValueFlow } @@ -6596,49 +7361,49 @@ public class Test { { // "com.google.common.collect;Sets;false;combinations;(Set,int);;Element of Argument[0];Element of Element of ReturnValue;value" Set out = null; - Set in = (Set)newWithElementDefault(source()); + Set in = (Set)Set.of(source()); out = Sets.combinations(in, 0); sink(getElementDefault(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;difference;(Set,Set);;Element of Argument[0];Element of ReturnValue;value" Sets.SetView out = null; - Set in = (Set)newWithElementDefault(source()); + Set in = (Set)Set.of(source()); out = Sets.difference(in, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;filter;(NavigableSet,Predicate);;Element of Argument[0];Element of ReturnValue;value" NavigableSet out = null; - NavigableSet in = (NavigableSet)newWithElementDefault(source()); + NavigableSet in = (NavigableSet)ImmutableSortedSet.of((Comparable)source()); out = Sets.filter(in, (Predicate)null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;filter;(Set,Predicate);;Element of Argument[0];Element of ReturnValue;value" Set out = null; - Set in = (Set)newWithElementDefault(source()); + Set in = (Set)Set.of(source()); out = Sets.filter(in, (Predicate)null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;filter;(SortedSet,Predicate);;Element of Argument[0];Element of ReturnValue;value" SortedSet out = null; - SortedSet in = (SortedSet)newWithElementDefault(source()); + SortedSet in = (SortedSet)ImmutableSortedSet.of((Comparable)source()); out = Sets.filter(in, (Predicate)null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;intersection;(Set,Set);;Element of Argument[0..1];Element of ReturnValue;value" Sets.SetView out = null; - Set in = (Set)newWithElementDefault(source()); + Set in = (Set)Set.of(source()); out = Sets.intersection(null, in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;intersection;(Set,Set);;Element of Argument[0..1];Element of ReturnValue;value" Sets.SetView out = null; - Set in = (Set)newWithElementDefault(source()); + Set in = (Set)Set.of(source()); out = Sets.intersection(in, null); sink(getElement(out)); // $ hasValueFlow } @@ -6666,7 +7431,7 @@ public class Test { { // "com.google.common.collect;Sets;false;newHashSet;(Iterator);;Element of Argument[0];Element of ReturnValue;value" HashSet out = null; - Iterator in = (Iterator)newWithElementDefault(source()); + Iterator in = (Iterator)List.of(source()).iterator(); out = Sets.newHashSet(in); sink(getElement(out)); // $ hasValueFlow } @@ -6701,56 +7466,56 @@ public class Test { { // "com.google.common.collect;Sets;false;powerSet;(Set);;Element of Argument[0];Element of Element of ReturnValue;value" Set out = null; - Set in = (Set)newWithElementDefault(source()); + Set in = (Set)Set.of(source()); out = Sets.powerSet(in); sink(getElementDefault(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;subSet;(NavigableSet,Range);;Element of Argument[0];Element of ReturnValue;value" NavigableSet out = null; - NavigableSet in = (NavigableSet)newWithElementDefault(source()); + NavigableSet in = (NavigableSet)ImmutableSortedSet.of((Comparable)source()); out = Sets.subSet(in, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;symmetricDifference;(Set,Set);;Element of Argument[0..1];Element of ReturnValue;value" Sets.SetView out = null; - Set in = (Set)newWithElementDefault(source()); + Set in = (Set)Set.of(source()); out = Sets.symmetricDifference(null, in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;symmetricDifference;(Set,Set);;Element of Argument[0..1];Element of ReturnValue;value" Sets.SetView out = null; - Set in = (Set)newWithElementDefault(source()); + Set in = (Set)Set.of(source()); out = Sets.symmetricDifference(in, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;synchronizedNavigableSet;(NavigableSet);;Element of Argument[0];Element of ReturnValue;value" NavigableSet out = null; - NavigableSet in = (NavigableSet)newWithElementDefault(source()); + NavigableSet in = (NavigableSet)ImmutableSortedSet.of((Comparable)source()); out = Sets.synchronizedNavigableSet(in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;union;(Set,Set);;Element of Argument[0..1];Element of ReturnValue;value" Sets.SetView out = null; - Set in = (Set)newWithElementDefault(source()); + Set in = (Set)Set.of(source()); out = Sets.union(null, in); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;union;(Set,Set);;Element of Argument[0..1];Element of ReturnValue;value" Sets.SetView out = null; - Set in = (Set)newWithElementDefault(source()); + Set in = (Set)Set.of(source()); out = Sets.union(in, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;unmodifiableNavigableSet;(NavigableSet);;Element of Argument[0];Element of ReturnValue;value" NavigableSet out = null; - NavigableSet in = (NavigableSet)newWithElementDefault(source()); + NavigableSet in = (NavigableSet)ImmutableSortedSet.of((Comparable)source()); out = Sets.unmodifiableNavigableSet(in); sink(getElement(out)); // $ hasValueFlow } @@ -7520,14 +8285,14 @@ public class Test { { // "com.google.common.collect;TreeMultimap;true;create;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value" TreeMultimap out = null; - Multimap in = (Multimap)newWithMapKeyDefault(source()); + Multimap in = (Multimap)ImmutableMultimap.of(source(), null); out = TreeMultimap.create(in); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;TreeMultimap;true;create;(Multimap);;MapValue of Argument[0];MapValue of ReturnValue;value" TreeMultimap out = null; - Multimap in = (Multimap)newWithMapValueDefault(source()); + Multimap in = (Multimap)ImmutableMultimap.of(null, source()); out = TreeMultimap.create(in); sink(getMapValue(out)); // $ hasValueFlow } From d3d708bc682c9c94ca434b2df9953e8598a3cd88 Mon Sep 17 00:00:00 2001 From: Robert Marsh Date: Fri, 17 Sep 2021 12:16:20 -0700 Subject: [PATCH 513/741] C++: QLDoc for CommandExecution model --- .../cpp/models/interfaces/CommandExecution.qll | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/cpp/ql/lib/semmle/code/cpp/models/interfaces/CommandExecution.qll b/cpp/ql/lib/semmle/code/cpp/models/interfaces/CommandExecution.qll index 47f70427491..872d4bdcb91 100644 --- a/cpp/ql/lib/semmle/code/cpp/models/interfaces/CommandExecution.qll +++ b/cpp/ql/lib/semmle/code/cpp/models/interfaces/CommandExecution.qll @@ -1,7 +1,23 @@ +/** + * Provides classes for modeling functions that execute new programs by + * interpreting string data as shell commands. To use this QL library, create + * a QL class extending `CommandExecutionFunction` with a characteristic + * predicate that selects the function or set of functions you are modeling. + * Within that class, override the `hasCommandArgument` predicate to indicate + * which parameters are interpreted as shell commands. + */ + import cpp import FunctionInputsAndOutputs import semmle.code.cpp.models.Models +/** + * A function, such as `exec` or `popen` that starts a new process by + * interpreting a string as a shell command. + */ abstract class CommandExecutionFunction extends Function { + /** + * Holds if `input` is interpreted as a shell command. + */ abstract predicate hasCommandArgument(FunctionInput input); -} \ No newline at end of file +} From a9add04ee365ed716524da983ac8406589d6d574 Mon Sep 17 00:00:00 2001 From: Robert Marsh Date: Fri, 17 Sep 2021 12:17:06 -0700 Subject: [PATCH 514/741] C++: remove unneed import --- cpp/ql/lib/semmle/code/cpp/models/implementations/System.qll | 1 - 1 file changed, 1 deletion(-) diff --git a/cpp/ql/lib/semmle/code/cpp/models/implementations/System.qll b/cpp/ql/lib/semmle/code/cpp/models/implementations/System.qll index 48638b1e37a..02a9d0d6744 100644 --- a/cpp/ql/lib/semmle/code/cpp/models/implementations/System.qll +++ b/cpp/ql/lib/semmle/code/cpp/models/implementations/System.qll @@ -1,5 +1,4 @@ import cpp -import semmle.code.cpp.security.FunctionWithWrappers import semmle.code.cpp.models.interfaces.SideEffect import semmle.code.cpp.models.interfaces.Alias import semmle.code.cpp.models.interfaces.CommandExecution From 07fe29cc67de586dccb18ccc40c418d2e993bc74 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Fri, 17 Sep 2021 16:53:37 +0200 Subject: [PATCH 515/741] C#: Speedup type subsumption calculation --- .../ql/lib/semmle/code/csharp/Unification.qll | 182 ++++++------------ 1 file changed, 57 insertions(+), 125 deletions(-) diff --git a/csharp/ql/lib/semmle/code/csharp/Unification.qll b/csharp/ql/lib/semmle/code/csharp/Unification.qll index 73f739a1f7b..34098bc015c 100644 --- a/csharp/ql/lib/semmle/code/csharp/Unification.qll +++ b/csharp/ql/lib/semmle/code/csharp/Unification.qll @@ -326,79 +326,53 @@ module Gvn { getTypeArgument(k, t, i) = TTypeParameterGvnType() } - /** - * Hold if (non-type-parameters) `arg1` and `arg2` are unifiable, and both are - * the `i`th type argument of a compound type of kind `k`. - */ - pragma[nomagic] - private predicate unifiableNonTypeParameterTypeArguments( - CompoundTypeKind k, GvnTypeArgument arg1, GvnTypeArgument arg2, int i - ) { - exists(int j | - arg1 = getNonTypeParameterTypeArgument(k, _, i) and - arg2 = getNonTypeParameterTypeArgument(k, _, j) and - i <= j and - j <= i - | - arg1 = arg2 - or - unifiable(arg1, arg2) - ) - } - /** * Hold if `arg1` and `arg2` are unifiable, and both are the `i`th type argument * of a compound type of kind `k`. + * + * `subsumes` indicates whether `arg1` in fact subsumes `arg2`. */ pragma[nomagic] private predicate unifiableTypeArguments( - CompoundTypeKind k, GvnTypeArgument arg1, GvnTypeArgument arg2, int i + CompoundTypeKind k, GvnTypeArgument arg1, GvnTypeArgument arg2, int i, boolean subsumes ) { - unifiableNonTypeParameterTypeArguments(k, arg1, arg2, i) - or - exists(int j | - arg1 = TTypeParameterGvnType() and - typeArgumentIsTypeParameter(k, _, i) and - arg2 = getTypeArgument(k, _, j) and - i <= j and - j <= i + arg1 = getNonTypeParameterTypeArgument(k, _, pragma[only_bind_into](i)) and + arg2 = getNonTypeParameterTypeArgument(k, _, pragma[only_bind_into](i)) and + ( + arg1 = arg2 and + subsumes = true + or + unifiable(arg1, arg2, subsumes) ) or - exists(int j | - arg1 = getTypeArgument(k, _, i) and - typeArgumentIsTypeParameter(k, _, j) and - arg2 = TTypeParameterGvnType() and - i <= j and - j <= i - ) + arg1 = TTypeParameterGvnType() and + typeArgumentIsTypeParameter(k, _, pragma[only_bind_into](i)) and + arg2 = getTypeArgument(k, _, pragma[only_bind_into](i)) and + subsumes = true + or + arg1 = getNonTypeParameterTypeArgument(k, _, pragma[only_bind_into](i)) and + typeArgumentIsTypeParameter(k, _, pragma[only_bind_into](i)) and + arg2 = TTypeParameterGvnType() and + subsumes = false } pragma[nomagic] private predicate unifiableSingle0( - CompoundTypeKind k, ConstructedGvnType t2, GvnTypeArgument arg1, GvnTypeArgument arg2 + CompoundTypeKind k, ConstructedGvnType t2, GvnTypeArgument arg1, GvnTypeArgument arg2, + boolean subsumes ) { - unifiableTypeArguments(k, arg1, arg2, 0) and + unifiableTypeArguments(k, arg1, arg2, 0, subsumes) and arg2 = getTypeArgument(k, t2, 0) and k.getNumberOfTypeParameters() = 1 } - /** - * Holds if the type arguments of types `t1` and `t2` are unifiable, `t1` - * and `t2` are of the same kind, and the number of type arguments is 1. - */ - private predicate unifiableSingle(ConstructedGvnType t1, ConstructedGvnType t2) { - exists(CompoundTypeKind k, GvnTypeArgument arg1, GvnTypeArgument arg2 | - unifiableSingle0(k, t2, arg1, arg2) and - arg1 = getTypeArgument(k, t1, 0) - ) - } - pragma[nomagic] private predicate unifiableMultiple01Aux0( - CompoundTypeKind k, ConstructedGvnType t2, GvnTypeArgument arg10, GvnTypeArgument arg21 + CompoundTypeKind k, ConstructedGvnType t2, GvnTypeArgument arg10, GvnTypeArgument arg21, + boolean subsumes ) { exists(GvnTypeArgument arg20 | - unifiableTypeArguments(k, arg10, arg20, 0) and + unifiableTypeArguments(k, arg10, arg20, 0, subsumes) and arg20 = getTypeArgument(k, t2, 0) and arg21 = getTypeArgument(k, t2, 1) ) @@ -406,43 +380,24 @@ module Gvn { pragma[nomagic] private predicate unifiableMultiple01Aux1( - CompoundTypeKind k, ConstructedGvnType t1, GvnTypeArgument arg10, GvnTypeArgument arg21 + CompoundTypeKind k, ConstructedGvnType t1, GvnTypeArgument arg10, GvnTypeArgument arg21, + boolean subsumes ) { exists(GvnTypeArgument arg11 | - unifiableTypeArguments(k, arg11, arg21, 1) and + unifiableTypeArguments(k, arg11, arg21, 1, subsumes) and arg10 = getTypeArgument(k, t1, 0) and arg11 = getTypeArgument(k, t1, 1) ) } - /** - * Holds if the first two type arguments of types `t1` and `t2` are unifiable, - * and both `t1` and `t2` are of kind `k`. - */ - private predicate unifiableMultiple01( - CompoundTypeKind k, ConstructedGvnType t1, ConstructedGvnType t2 - ) { - exists(GvnTypeArgument arg10, GvnTypeArgument arg21 | - unifiableMultiple01Aux0(k, t2, arg10, arg21) and - unifiableMultiple01Aux1(k, t1, arg10, arg21) - ) - } - pragma[nomagic] private predicate unifiableMultiple2Aux( - CompoundTypeKind k, ConstructedGvnType t2, int i, GvnTypeArgument arg1, GvnTypeArgument arg2 + CompoundTypeKind k, ConstructedGvnType t2, int i, GvnTypeArgument arg1, boolean subsumes ) { - unifiableTypeArguments(k, arg1, arg2, i) and - arg2 = getTypeArgument(k, t2, i) and - i >= 2 - } - - private predicate unifiableMultiple2( - CompoundTypeKind k, ConstructedGvnType t1, ConstructedGvnType t2, int i - ) { - exists(GvnTypeArgument arg1, GvnTypeArgument arg2 | - unifiableMultiple2Aux(k, t2, i, arg1, arg2) and - arg1 = getTypeArgument(k, t1, i) + exists(GvnTypeArgument arg2 | + unifiableTypeArguments(k, arg1, arg2, i, subsumes) and + arg2 = getTypeArgument(k, t2, i) and + i >= 2 ) } @@ -452,43 +407,33 @@ module Gvn { */ pragma[nomagic] private predicate unifiableMultiple( - CompoundTypeKind k, ConstructedGvnType t1, ConstructedGvnType t2, int i + CompoundTypeKind k, ConstructedGvnType t1, ConstructedGvnType t2, int i, boolean subsumes ) { - unifiableMultiple01(k, t1, t2) and i = 1 + exists(GvnTypeArgument arg10, GvnTypeArgument arg21, boolean subsumes1, boolean subsumes2 | + unifiableMultiple01Aux0(k, t2, arg10, arg21, subsumes1) and + unifiableMultiple01Aux1(k, t1, arg10, arg21, subsumes2) and + subsumes = subsumes1.booleanAnd(subsumes2) + ) and + i = 1 or - unifiableMultiple(k, t1, t2, i - 1) and - unifiableMultiple2(k, t1, t2, i) - } - - private newtype TTypePath = - TTypePathNil() or - TTypePathCons(int head, TTypePath tail) { exists(getTypeAtCons(_, head, tail)) } - - /** - * Gets the GVN inside GVN `t`, by following the path `path`, if any. - */ - private GvnType getTypeAt(GvnType t, TTypePath path) { - path = TTypePathNil() and - result = t - or - exists(ConstructedGvnTypeList l, int head, TTypePath tail | - t = TConstructedGvnType(l) and - path = TTypePathCons(head, tail) and - result = getTypeAtCons(l, head, tail) + exists(GvnTypeArgument arg1, boolean subsumes1, boolean subsumes2 | + unifiableMultiple(k, t1, t2, i - 1, subsumes1) and + unifiableMultiple2Aux(k, t2, i, arg1, subsumes2) and + arg1 = getTypeArgument(k, t1, i) and + subsumes = subsumes1.booleanAnd(subsumes2) ) } - private GvnType getTypeAtCons(ConstructedGvnTypeList l, int head, TTypePath tail) { - result = getTypeAt(l.getArg(head), tail) - } - - /** - * Gets the leaf GVN inside GVN `t`, by following the path `path`, if any. - */ - pragma[noinline] - private GvnType getLeafTypeAt(GvnType t, TTypePath path) { - result = getTypeAt(t, path) and - not result instanceof ConstructedGvnType + pragma[nomagic] + private predicate unifiable(ConstructedGvnType t1, ConstructedGvnType t2, boolean subsumes) { + exists(CompoundTypeKind k, GvnTypeArgument arg1, GvnTypeArgument arg2 | + unifiableSingle0(k, t2, arg1, arg2, subsumes) and + arg1 = getTypeArgument(k, t1, 0) + ) + or + exists(CompoundTypeKind k | + unifiableMultiple(k, t1, t2, k.getNumberOfTypeParameters() - 1, subsumes) + ) } cached @@ -545,11 +490,7 @@ module Gvn { * type parameters themselves) to make the two substituted terms equal. */ cached - predicate unifiable(ConstructedGvnType t1, ConstructedGvnType t2) { - unifiableSingle(t1, t2) - or - exists(CompoundTypeKind k | unifiableMultiple(k, t1, t2, k.getNumberOfTypeParameters() - 1)) - } + predicate unifiable(ConstructedGvnType t1, ConstructedGvnType t2) { unifiable(t1, t2, _) } /** * Holds if GVN `t1` subsumes GVN `t2`. That is, is it possible to replace all @@ -557,16 +498,7 @@ module Gvn { * to make the two substituted terms equal. */ cached - predicate subsumes(ConstructedGvnType t1, ConstructedGvnType t2) { - unifiable(t1, t2) and // subsumption implies unification - forall(TTypePath path, GvnType leaf1 | leaf1 = getLeafTypeAt(t1, path) | - exists(GvnType child2 | child2 = getTypeAt(t2, path) | - leaf1 = TTypeParameterGvnType() - or - leaf1 = child2 - ) - ) - } + predicate subsumes(ConstructedGvnType t1, ConstructedGvnType t2) { unifiable(t1, t2, true) } } import Cached From c6c1ad1b90dbf35a9905c7c938ffab162ddf4a9b Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Fri, 17 Sep 2021 16:53:59 +0200 Subject: [PATCH 516/741] C#: Update `toString` for nested types --- .../ql/lib/semmle/code/csharp/Unification.qll | 2 +- .../dataflow/types/Types.expected | 50 +++++++++---------- 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/csharp/ql/lib/semmle/code/csharp/Unification.qll b/csharp/ql/lib/semmle/code/csharp/Unification.qll index 34098bc015c..65f9ab8123f 100644 --- a/csharp/ql/lib/semmle/code/csharp/Unification.qll +++ b/csharp/ql/lib/semmle/code/csharp/Unification.qll @@ -17,7 +17,7 @@ module Gvn { string getNameNested(Type t) { if not t instanceof NestedType or t.(NestedType).getDeclaringType() instanceof GenericType then result = t.getName() - else result = getNameNested(t.(NestedType).getDeclaringType()) + "." + t.getName() + else result = getNameNested(t.(NestedType).getDeclaringType()) + "+" + t.getName() } /** diff --git a/csharp/ql/test/library-tests/dataflow/types/Types.expected b/csharp/ql/test/library-tests/dataflow/types/Types.expected index c0b3bf14bbc..52591455b1e 100644 --- a/csharp/ql/test/library-tests/dataflow/types/Types.expected +++ b/csharp/ql/test/library-tests/dataflow/types/Types.expected @@ -32,21 +32,21 @@ edges | Types.cs:74:9:74:9 | access to local variable d : D | Types.cs:16:30:16:30 | this : D | | Types.cs:77:22:77:22 | a : C | Types.cs:79:18:79:25 | SSA def(b) : C | | Types.cs:79:18:79:25 | SSA def(b) : C | Types.cs:80:18:80:18 | access to local variable b | -| Types.cs:90:22:90:22 | e : Types.E.E2 | Types.cs:92:26:92:26 | access to parameter e : Types.E.E2 | -| Types.cs:92:13:92:16 | [post] this access [field Field] : Types.E.E2 | Types.cs:93:13:93:16 | this access [field Field] : Types.E.E2 | -| Types.cs:92:26:92:26 | access to parameter e : Types.E.E2 | Types.cs:92:13:92:16 | [post] this access [field Field] : Types.E.E2 | -| Types.cs:93:13:93:16 | this access [field Field] : Types.E.E2 | Types.cs:113:34:113:34 | this [field Field] : Types.E.E2 | -| Types.cs:110:25:110:32 | object creation of type E2 : Types.E.E2 | Types.cs:90:22:90:22 | e : Types.E.E2 | -| Types.cs:113:34:113:34 | this [field Field] : Types.E.E2 | Types.cs:115:22:115:25 | this access [field Field] : Types.E.E2 | -| Types.cs:115:22:115:25 | this access [field Field] : Types.E.E2 | Types.cs:115:22:115:31 | access to field Field | +| Types.cs:90:22:90:22 | e : Types+E.E2 | Types.cs:92:26:92:26 | access to parameter e : Types+E.E2 | +| Types.cs:92:13:92:16 | [post] this access [field Field] : Types+E.E2 | Types.cs:93:13:93:16 | this access [field Field] : Types+E.E2 | +| Types.cs:92:26:92:26 | access to parameter e : Types+E.E2 | Types.cs:92:13:92:16 | [post] this access [field Field] : Types+E.E2 | +| Types.cs:93:13:93:16 | this access [field Field] : Types+E.E2 | Types.cs:113:34:113:34 | this [field Field] : Types+E.E2 | +| Types.cs:110:25:110:32 | object creation of type E2 : Types+E.E2 | Types.cs:90:22:90:22 | e : Types+E.E2 | +| Types.cs:113:34:113:34 | this [field Field] : Types+E.E2 | Types.cs:115:22:115:25 | this access [field Field] : Types+E.E2 | +| Types.cs:115:22:115:25 | this access [field Field] : Types+E.E2 | Types.cs:115:22:115:31 | access to field Field | | Types.cs:120:25:120:31 | object creation of type A : A | Types.cs:122:30:122:30 | access to local variable a : A | -| Types.cs:121:26:121:33 | object creation of type E2 : Types.E.E2 | Types.cs:123:30:123:31 | access to local variable e2 : Types.E.E2 | +| Types.cs:121:26:121:33 | object creation of type E2 : Types+E.E2 | Types.cs:123:30:123:31 | access to local variable e2 : Types+E.E2 | | Types.cs:122:30:122:30 | access to local variable a : A | Types.cs:122:22:122:31 | call to method Through | | Types.cs:122:30:122:30 | access to local variable a : A | Types.cs:130:34:130:34 | x : A | -| Types.cs:123:30:123:31 | access to local variable e2 : Types.E.E2 | Types.cs:123:22:123:32 | call to method Through | -| Types.cs:123:30:123:31 | access to local variable e2 : Types.E.E2 | Types.cs:130:34:130:34 | x : Types.E.E2 | +| Types.cs:123:30:123:31 | access to local variable e2 : Types+E.E2 | Types.cs:123:22:123:32 | call to method Through | +| Types.cs:123:30:123:31 | access to local variable e2 : Types+E.E2 | Types.cs:130:34:130:34 | x : Types+E.E2 | | Types.cs:130:34:130:34 | x : A | Types.cs:130:40:130:40 | access to parameter x : A | -| Types.cs:130:34:130:34 | x : Types.E.E2 | Types.cs:130:40:130:40 | access to parameter x : Types.E.E2 | +| Types.cs:130:34:130:34 | x : Types+E.E2 | Types.cs:130:40:130:40 | access to parameter x : Types+E.E2 | | Types.cs:138:21:138:25 | this [field Field] : Object | Types.cs:138:32:138:35 | this access [field Field] : Object | | Types.cs:138:32:138:35 | this access [field Field] : Object | Types.cs:153:30:153:30 | this [field Field] : Object | | Types.cs:144:13:144:13 | [post] access to parameter c [field Field] : Object | Types.cs:145:13:145:13 | access to parameter c [field Field] : Object | @@ -97,24 +97,24 @@ nodes | Types.cs:77:22:77:22 | a : C | semmle.label | a : C | | Types.cs:79:18:79:25 | SSA def(b) : C | semmle.label | SSA def(b) : C | | Types.cs:80:18:80:18 | access to local variable b | semmle.label | access to local variable b | -| Types.cs:90:22:90:22 | e : Types.E.E2 | semmle.label | e : Types.E.E2 | -| Types.cs:92:13:92:16 | [post] this access [field Field] : Types.E.E2 | semmle.label | [post] this access [field Field] : Types.E.E2 | -| Types.cs:92:26:92:26 | access to parameter e : Types.E.E2 | semmle.label | access to parameter e : Types.E.E2 | -| Types.cs:93:13:93:16 | this access [field Field] : Types.E.E2 | semmle.label | this access [field Field] : Types.E.E2 | -| Types.cs:110:25:110:32 | object creation of type E2 : Types.E.E2 | semmle.label | object creation of type E2 : Types.E.E2 | -| Types.cs:113:34:113:34 | this [field Field] : Types.E.E2 | semmle.label | this [field Field] : Types.E.E2 | -| Types.cs:115:22:115:25 | this access [field Field] : Types.E.E2 | semmle.label | this access [field Field] : Types.E.E2 | +| Types.cs:90:22:90:22 | e : Types+E.E2 | semmle.label | e : Types+E.E2 | +| Types.cs:92:13:92:16 | [post] this access [field Field] : Types+E.E2 | semmle.label | [post] this access [field Field] : Types+E.E2 | +| Types.cs:92:26:92:26 | access to parameter e : Types+E.E2 | semmle.label | access to parameter e : Types+E.E2 | +| Types.cs:93:13:93:16 | this access [field Field] : Types+E.E2 | semmle.label | this access [field Field] : Types+E.E2 | +| Types.cs:110:25:110:32 | object creation of type E2 : Types+E.E2 | semmle.label | object creation of type E2 : Types+E.E2 | +| Types.cs:113:34:113:34 | this [field Field] : Types+E.E2 | semmle.label | this [field Field] : Types+E.E2 | +| Types.cs:115:22:115:25 | this access [field Field] : Types+E.E2 | semmle.label | this access [field Field] : Types+E.E2 | | Types.cs:115:22:115:31 | access to field Field | semmle.label | access to field Field | | Types.cs:120:25:120:31 | object creation of type A : A | semmle.label | object creation of type A : A | -| Types.cs:121:26:121:33 | object creation of type E2 : Types.E.E2 | semmle.label | object creation of type E2 : Types.E.E2 | +| Types.cs:121:26:121:33 | object creation of type E2 : Types+E.E2 | semmle.label | object creation of type E2 : Types+E.E2 | | Types.cs:122:22:122:31 | call to method Through | semmle.label | call to method Through | | Types.cs:122:30:122:30 | access to local variable a : A | semmle.label | access to local variable a : A | | Types.cs:123:22:123:32 | call to method Through | semmle.label | call to method Through | -| Types.cs:123:30:123:31 | access to local variable e2 : Types.E.E2 | semmle.label | access to local variable e2 : Types.E.E2 | +| Types.cs:123:30:123:31 | access to local variable e2 : Types+E.E2 | semmle.label | access to local variable e2 : Types+E.E2 | | Types.cs:130:34:130:34 | x : A | semmle.label | x : A | -| Types.cs:130:34:130:34 | x : Types.E.E2 | semmle.label | x : Types.E.E2 | +| Types.cs:130:34:130:34 | x : Types+E.E2 | semmle.label | x : Types+E.E2 | | Types.cs:130:40:130:40 | access to parameter x : A | semmle.label | access to parameter x : A | -| Types.cs:130:40:130:40 | access to parameter x : Types.E.E2 | semmle.label | access to parameter x : Types.E.E2 | +| Types.cs:130:40:130:40 | access to parameter x : Types+E.E2 | semmle.label | access to parameter x : Types+E.E2 | | Types.cs:138:21:138:25 | this [field Field] : Object | semmle.label | this [field Field] : Object | | Types.cs:138:32:138:35 | this access [field Field] : Object | semmle.label | this access [field Field] : Object | | Types.cs:144:13:144:13 | [post] access to parameter c [field Field] : Object | semmle.label | [post] access to parameter c [field Field] : Object | @@ -125,7 +125,7 @@ nodes | Types.cs:153:42:153:51 | access to field Field | semmle.label | access to field Field | subpaths | Types.cs:122:30:122:30 | access to local variable a : A | Types.cs:130:34:130:34 | x : A | Types.cs:130:40:130:40 | access to parameter x : A | Types.cs:122:22:122:31 | call to method Through : A | -| Types.cs:123:30:123:31 | access to local variable e2 : Types.E.E2 | Types.cs:130:34:130:34 | x : Types.E.E2 | Types.cs:130:40:130:40 | access to parameter x : Types.E.E2 | Types.cs:123:22:123:32 | call to method Through : Types.E.E2 | +| Types.cs:123:30:123:31 | access to local variable e2 : Types+E.E2 | Types.cs:130:34:130:34 | x : Types+E.E2 | Types.cs:130:40:130:40 | access to parameter x : Types+E.E2 | Types.cs:123:22:123:32 | call to method Through : Types+E.E2 | #select | Types.cs:23:12:23:18 | object creation of type C : C | Types.cs:23:12:23:18 | object creation of type C : C | Types.cs:50:18:50:18 | access to local variable c | $@ | Types.cs:50:18:50:18 | access to local variable c | access to local variable c | | Types.cs:25:12:25:18 | object creation of type C : C | Types.cs:25:12:25:18 | object creation of type C : C | Types.cs:63:33:63:36 | (...) ... | $@ | Types.cs:63:33:63:36 | (...) ... | (...) ... | @@ -141,7 +141,7 @@ subpaths | Types.cs:39:12:39:18 | object creation of type D : D | Types.cs:39:12:39:18 | object creation of type D : D | Types.cs:69:52:69:52 | access to parameter x | $@ | Types.cs:69:52:69:52 | access to parameter x | access to parameter x | | Types.cs:40:12:40:18 | object creation of type D : D | Types.cs:40:12:40:18 | object creation of type D : D | Types.cs:16:42:16:45 | this access | $@ | Types.cs:16:42:16:45 | this access | this access | | Types.cs:43:20:43:23 | null : null | Types.cs:43:20:43:23 | null : null | Types.cs:44:14:44:14 | access to local variable o | $@ | Types.cs:44:14:44:14 | access to local variable o | access to local variable o | -| Types.cs:110:25:110:32 | object creation of type E2 : Types.E.E2 | Types.cs:110:25:110:32 | object creation of type E2 : Types.E.E2 | Types.cs:115:22:115:31 | access to field Field | $@ | Types.cs:115:22:115:31 | access to field Field | access to field Field | +| Types.cs:110:25:110:32 | object creation of type E2 : Types+E.E2 | Types.cs:110:25:110:32 | object creation of type E2 : Types+E.E2 | Types.cs:115:22:115:31 | access to field Field | $@ | Types.cs:115:22:115:31 | access to field Field | access to field Field | | Types.cs:120:25:120:31 | object creation of type A : A | Types.cs:120:25:120:31 | object creation of type A : A | Types.cs:122:22:122:31 | call to method Through | $@ | Types.cs:122:22:122:31 | call to method Through | call to method Through | -| Types.cs:121:26:121:33 | object creation of type E2 : Types.E.E2 | Types.cs:121:26:121:33 | object creation of type E2 : Types.E.E2 | Types.cs:123:22:123:32 | call to method Through | $@ | Types.cs:123:22:123:32 | call to method Through | call to method Through | +| Types.cs:121:26:121:33 | object creation of type E2 : Types+E.E2 | Types.cs:121:26:121:33 | object creation of type E2 : Types+E.E2 | Types.cs:123:22:123:32 | call to method Through | $@ | Types.cs:123:22:123:32 | call to method Through | call to method Through | | Types.cs:144:23:144:34 | object creation of type Object : Object | Types.cs:144:23:144:34 | object creation of type Object : Object | Types.cs:153:42:153:51 | access to field Field | $@ | Types.cs:153:42:153:51 | access to field Field | access to field Field | From f0e7be7d569e20cb829be15094c259100c730a0a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 20 Sep 2021 00:08:08 +0000 Subject: [PATCH 517/741] Add changed framework coverage reports --- csharp/documentation/library-coverage/coverage.csv | 8 ++++++-- csharp/documentation/library-coverage/coverage.rst | 6 ++++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/csharp/documentation/library-coverage/coverage.csv b/csharp/documentation/library-coverage/coverage.csv index dbac4906d86..32137cb6d38 100644 --- a/csharp/documentation/library-coverage/coverage.csv +++ b/csharp/documentation/library-coverage/coverage.csv @@ -1,2 +1,6 @@ -package,sink,source,summary,sink:html,sink:xss,source:local,summary:taint -System,5,3,13,4,1,3,13 +package,sink,source,summary,sink:code,sink:html,sink:remote,sink:sql,sink:xss,source:local,summary:taint +Dapper,55,,,,,,55,,, +Microsoft.ApplicationBlocks.Data,28,,,,,,28,,, +MySql.Data.MySqlClient,48,,,,,,48,,, +ServiceStack,194,,7,27,,75,92,,,7 +System,28,3,13,,4,,23,1,3,13 diff --git a/csharp/documentation/library-coverage/coverage.rst b/csharp/documentation/library-coverage/coverage.rst index 568eadb4cc6..367e7a35bd2 100644 --- a/csharp/documentation/library-coverage/coverage.rst +++ b/csharp/documentation/library-coverage/coverage.rst @@ -7,6 +7,8 @@ C# framework & library support :widths: auto Framework / library,Package,Flow sources,Taint & value steps,Sinks (total),`CWE-079` :sub:`Cross-site scripting` - System,"``System.*``, ``System``",3,13,5,5 - Totals,,3,13,5,5 + `ServiceStack `_,"``ServiceStack.*``, ``ServiceStack``",,7,194, + System,"``System.*``, ``System``",3,13,28,5 + Others,"``Dapper``, ``Microsoft.ApplicationBlocks.Data``, ``MySql.Data.MySqlClient``",,,131, + Totals,,3,20,353,5 From 6d315a5d1641faae2c9c2659e9c4085fea08010e Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Mon, 20 Sep 2021 09:47:15 +0200 Subject: [PATCH 518/741] C#: Add `subpaths` predicate to XSS queries --- .../semmle/code/csharp/security/dataflow/XSSQuery.qll | 10 ++++++++++ .../Security Features/CWE-079/StoredXSS/XSS.expected | 1 + .../Security Features/CWE-079/XSS/XSS.expected | 1 + 3 files changed, 12 insertions(+) diff --git a/csharp/ql/lib/semmle/code/csharp/security/dataflow/XSSQuery.qll b/csharp/ql/lib/semmle/code/csharp/security/dataflow/XSSQuery.qll index 055726a7bc3..a216ce5e9d2 100644 --- a/csharp/ql/lib/semmle/code/csharp/security/dataflow/XSSQuery.qll +++ b/csharp/ql/lib/semmle/code/csharp/security/dataflow/XSSQuery.qll @@ -62,6 +62,16 @@ module PathGraph { key = "semmle.label" and val = n.(XssAspNode).toString() } + + /** + * Holds if `(arg, par, ret, out)` forms a subpath-tuple, that is, flow through + * a subpath between `par` and `ret` with the connecting edges `arg -> par` and + * `ret -> out` is summarized as the edge `arg -> out`. + */ + query predicate subpaths(XssNode arg, XssNode par, XssNode ret, XssNode out) { + DataFlow2::PathGraph::subpaths(arg.asDataFlowNode(), par.asDataFlowNode(), ret.asDataFlowNode(), + out.asDataFlowNode()) + } } private newtype TXssNode = diff --git a/csharp/ql/test/query-tests/Security Features/CWE-079/StoredXSS/XSS.expected b/csharp/ql/test/query-tests/Security Features/CWE-079/StoredXSS/XSS.expected index 2a45305d1a8..90a98c2d215 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-079/StoredXSS/XSS.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-079/StoredXSS/XSS.expected @@ -44,6 +44,7 @@ nodes | script.aspx:12:1:12:14 | <%= ... %> | semmle.label | <%= ... %> | | script.aspx:16:1:16:34 | <%= ... %> | semmle.label | <%= ... %> | | script.aspx:20:1:20:41 | <%= ... %> | semmle.label | <%= ... %> | +subpaths #select | XSS.cs:26:32:26:51 | call to method ToString | XSS.cs:25:48:25:62 | access to field categoryTextBox : TextBox | XSS.cs:26:32:26:51 | call to method ToString | $@ flows to here and is written to HTML or JavaScript. | XSS.cs:25:48:25:62 | access to field categoryTextBox : TextBox | User-provided value | | XSS.cs:27:29:27:48 | call to method ToString | XSS.cs:25:48:25:62 | access to field categoryTextBox : TextBox | XSS.cs:27:29:27:48 | call to method ToString | $@ flows to here and is written to HTML or JavaScript. | XSS.cs:25:48:25:62 | access to field categoryTextBox : TextBox | User-provided value | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-079/XSS/XSS.expected b/csharp/ql/test/query-tests/Security Features/CWE-079/XSS/XSS.expected index fba9cfb0ed5..aea541b672f 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-079/XSS/XSS.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-079/XSS/XSS.expected @@ -34,6 +34,7 @@ nodes | XSSAspNetCore.cs:72:51:72:65 | access to property Headers : IHeaderDictionary | semmle.label | access to property Headers : IHeaderDictionary | | XSSAspNetCore.cs:72:51:72:72 | access to indexer : StringValues | semmle.label | access to indexer : StringValues | | XSSAspNetCore.cs:72:51:72:72 | call to operator implicit conversion | semmle.label | call to operator implicit conversion | +subpaths #select | XSSAspNet.cs:26:30:26:34 | access to local variable sayHi | XSSAspNet.cs:19:25:19:43 | access to property QueryString : NameValueCollection | XSSAspNet.cs:26:30:26:34 | access to local variable sayHi | $@ flows to here and is written to HTML or JavaScript: System.Web.WebPages.WebPage.WriteLiteral() method. | XSSAspNet.cs:19:25:19:43 | access to property QueryString : NameValueCollection | User-provided value | | XSSAspNet.cs:36:40:36:44 | access to local variable sayHi | XSSAspNet.cs:19:25:19:43 | access to property QueryString : NameValueCollection | XSSAspNet.cs:36:40:36:44 | access to local variable sayHi | $@ flows to here and is written to HTML or JavaScript: System.Web.WebPages.WebPage.WriteLiteralTo() method. | XSSAspNet.cs:19:25:19:43 | access to property QueryString : NameValueCollection | User-provided value | From b9c4abe7dc0a39d080f00004e393e6a9f5a04905 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Mon, 20 Sep 2021 10:42:01 +0200 Subject: [PATCH 519/741] C#: Fix qldoc typos --- csharp/ql/lib/semmle/code/csharp/Unification.qll | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/csharp/ql/lib/semmle/code/csharp/Unification.qll b/csharp/ql/lib/semmle/code/csharp/Unification.qll index 65f9ab8123f..173feedb695 100644 --- a/csharp/ql/lib/semmle/code/csharp/Unification.qll +++ b/csharp/ql/lib/semmle/code/csharp/Unification.qll @@ -485,7 +485,7 @@ module Gvn { } /** - * Holds if GVNs `t1` and `t2` can be unified. That is, is it possible to + * Holds if GVNs `t1` and `t2` can be unified. That is, it is possible to * replace all type parameters in `t1` and `t2` with some GVNs (possibly * type parameters themselves) to make the two substituted terms equal. */ @@ -493,7 +493,7 @@ module Gvn { predicate unifiable(ConstructedGvnType t1, ConstructedGvnType t2) { unifiable(t1, t2, _) } /** - * Holds if GVN `t1` subsumes GVN `t2`. That is, is it possible to replace all + * Holds if GVN `t1` subsumes GVN `t2`. That is, it is possible to replace all * type parameters in `t1` with some GVNs (possibly type parameters themselves) * to make the two substituted terms equal. */ From 97c0f1c7b7ae2b8ae076fa244b212d4256cbd6dc Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Mon, 20 Sep 2021 12:04:46 +0200 Subject: [PATCH 520/741] Python: Apply suggestions from code review Co-authored-by: yoff --- .../ql/src/Security/CWE-089/SQLAlchemyTextClauseInjection.qhelp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/ql/src/Security/CWE-089/SQLAlchemyTextClauseInjection.qhelp b/python/ql/src/Security/CWE-089/SQLAlchemyTextClauseInjection.qhelp index 022fd4741da..9ebc4a20b0a 100644 --- a/python/ql/src/Security/CWE-089/SQLAlchemyTextClauseInjection.qhelp +++ b/python/ql/src/Security/CWE-089/SQLAlchemyTextClauseInjection.qhelp @@ -40,7 +40,7 @@ to a SQL injection attack.

    In the third case, the query is built fully using the ORM models, so in the end, the -user-supplied input will passed passed to the database using query parameters. The +user-supplied input will be passed to the database using query parameters. The database connector library will take care of escaping and inserting quotes as needed.

    From 797966fd3d49086781973c35c959c63dab88cd44 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Mon, 20 Sep 2021 11:49:09 +0100 Subject: [PATCH 521/741] C++: Change the names of the new classes and predicates to match the upcoming 'CommandExecutionFunction' class. --- .../code/cpp/models/implementations/MySql.qll | 6 +++--- .../cpp/models/implementations/PostgreSql.qll | 12 ++++++------ .../code/cpp/models/implementations/SqLite3.qll | 6 +++--- .../semmle/code/cpp/models/interfaces/Sql.qll | 16 ++++++++-------- cpp/ql/lib/semmle/code/cpp/security/Security.qll | 6 +++--- cpp/ql/src/Security/CWE/CWE-089/SqlTainted.ql | 6 +++--- 6 files changed, 26 insertions(+), 26 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/models/implementations/MySql.qll b/cpp/ql/lib/semmle/code/cpp/models/implementations/MySql.qll index 58d0ebf8a70..7f664c23d3e 100644 --- a/cpp/ql/lib/semmle/code/cpp/models/implementations/MySql.qll +++ b/cpp/ql/lib/semmle/code/cpp/models/implementations/MySql.qll @@ -1,8 +1,8 @@ private import semmle.code.cpp.models.interfaces.Sql private import semmle.code.cpp.models.interfaces.FunctionInputsAndOutputs -private class MySqlSink extends SqlSink { - MySqlSink() { this.hasName(["mysql_query", "mysql_real_query"]) } +private class MySqlExecutionFunction extends SqlExecutionFunction { + MySqlExecutionFunction() { this.hasName(["mysql_query", "mysql_real_query"]) } - override predicate getAnSqlParameter(FunctionInput input) { input.isParameterDeref(1) } + override predicate hasSqlArgument(FunctionInput input) { input.isParameterDeref(1) } } diff --git a/cpp/ql/lib/semmle/code/cpp/models/implementations/PostgreSql.qll b/cpp/ql/lib/semmle/code/cpp/models/implementations/PostgreSql.qll index b7c11ffc0e2..56362c8b5e6 100644 --- a/cpp/ql/lib/semmle/code/cpp/models/implementations/PostgreSql.qll +++ b/cpp/ql/lib/semmle/code/cpp/models/implementations/PostgreSql.qll @@ -45,8 +45,8 @@ private predicate pqxxEscapeArgument(string function, int arg) { function in ["esc", "esc_raw", "quote", "quote_raw", "quote_name", "quote_table", "esc_like"] } -private class PostgreSqlSink extends SqlSink { - PostgreSqlSink() { +private class PostgreSqlExecutionFunction extends SqlExecutionFunction { + PostgreSqlExecutionFunction() { exists(Class c | this.getDeclaringType() = c and // transaction exec and connection prepare variations @@ -60,7 +60,7 @@ private class PostgreSqlSink extends SqlSink { ) } - override predicate getAnSqlParameter(FunctionInput input) { + override predicate hasSqlArgument(FunctionInput input) { exists(int argIndex | pqxxTransactionSqlArgument(this.getName(), argIndex) or @@ -71,8 +71,8 @@ private class PostgreSqlSink extends SqlSink { } } -private class PostgreSqlBarrier extends SqlBarrier { - PostgreSqlBarrier() { +private class PostgreSqlEscapeFunction extends SqlEscapeFunction { + PostgreSqlEscapeFunction() { exists(Class c | this.getDeclaringType() = c and // transaction and connection escape functions @@ -84,7 +84,7 @@ private class PostgreSqlBarrier extends SqlBarrier { ) } - override predicate getAnEscapedParameter(FunctionInput input, FunctionOutput output) { + override predicate escapesSqlArgument(FunctionInput input, FunctionOutput output) { exists(int argIndex | input.isParameterDeref(argIndex) and output.isReturnValueDeref() diff --git a/cpp/ql/lib/semmle/code/cpp/models/implementations/SqLite3.qll b/cpp/ql/lib/semmle/code/cpp/models/implementations/SqLite3.qll index 51e8ace9f43..122e9af8064 100644 --- a/cpp/ql/lib/semmle/code/cpp/models/implementations/SqLite3.qll +++ b/cpp/ql/lib/semmle/code/cpp/models/implementations/SqLite3.qll @@ -1,8 +1,8 @@ private import semmle.code.cpp.models.interfaces.Sql private import semmle.code.cpp.models.interfaces.FunctionInputsAndOutputs -private class SqLite3Sink extends SqlSink { - SqLite3Sink() { this.hasName("sqlite3_exec") } +private class SqLite3ExecutionFunction extends SqlExecutionFunction { + SqLite3ExecutionFunction() { this.hasName("sqlite3_exec") } - override predicate getAnSqlParameter(FunctionInput input) { input.isParameterDeref(1) } + override predicate hasSqlArgument(FunctionInput input) { input.isParameterDeref(1) } } diff --git a/cpp/ql/lib/semmle/code/cpp/models/interfaces/Sql.qll b/cpp/ql/lib/semmle/code/cpp/models/interfaces/Sql.qll index 2702ad867d9..8591d473592 100644 --- a/cpp/ql/lib/semmle/code/cpp/models/interfaces/Sql.qll +++ b/cpp/ql/lib/semmle/code/cpp/models/interfaces/Sql.qll @@ -1,9 +1,9 @@ /** * Provides abstract classes for modeling functions that execute and escape SQL query strings. - * To use this QL library, create a QL class extending `SqlSink` or `SqlBarrier` with a - * characteristic predicate that selects the function or set of functions you are modeling. + * To use this QL library, create a QL class extending `SqlExecutionFunction` or `SqlEscapeFunction` + * with a characteristic predicate that selects the function or set of functions you are modeling. * Within that class, override the predicates provided by the class to match the way a - * parameter flows into the function and, in the case of `SqlBarrier`, out of the function. + * parameter flows into the function and, in the case of `SqlEscapeFunction`, out of the function. */ private import cpp @@ -11,20 +11,20 @@ private import cpp /** * An abstract class that represents a function that executes an SQL query. */ -abstract class SqlSink extends Function { +abstract class SqlExecutionFunction extends Function { /** * Holds if `input` to this function represents SQL code to be executed. */ - abstract predicate getAnSqlParameter(FunctionInput input); + abstract predicate hasSqlArgument(FunctionInput input); } /** * An abstract class that represents a function that escapes an SQL query string. */ -abstract class SqlBarrier extends Function { +abstract class SqlEscapeFunction extends Function { /** * Holds if the `output` escapes the SQL input `input` such that is it safe to pass to - * an `SqlSink`. + * an `SqlExecutionFunction`. */ - abstract predicate getAnEscapedParameter(FunctionInput input, FunctionOutput output); + abstract predicate escapesSqlArgument(FunctionInput input, FunctionOutput output); } diff --git a/cpp/ql/lib/semmle/code/cpp/security/Security.qll b/cpp/ql/lib/semmle/code/cpp/security/Security.qll index 9927d3397cf..da808592b3e 100644 --- a/cpp/ql/lib/semmle/code/cpp/security/Security.qll +++ b/cpp/ql/lib/semmle/code/cpp/security/Security.qll @@ -35,10 +35,10 @@ class SecurityOptions extends string { * An argument to a function that is passed to a SQL server. */ predicate sqlArgument(string function, int arg) { - exists(FunctionInput input, SqlSink sqlSink | - sqlSink.hasName(function) and + exists(FunctionInput input, SqlExecutionFunction sql | + sql.hasName(function) and input.isParameterDeref(arg) and - sqlSink.getAnSqlParameter(input) + sql.hasSqlArgument(input) ) } diff --git a/cpp/ql/src/Security/CWE/CWE-089/SqlTainted.ql b/cpp/ql/src/Security/CWE/CWE-089/SqlTainted.ql index c108d57db23..9e5a582a0b4 100644 --- a/cpp/ql/src/Security/CWE/CWE-089/SqlTainted.ql +++ b/cpp/ql/src/Security/CWE/CWE-089/SqlTainted.ql @@ -34,10 +34,10 @@ class Configuration extends TaintTrackingConfiguration { or e.getUnspecifiedType() instanceof IntegralType or - exists(SqlBarrier sqlFunc, int arg, FunctionInput input | - e = sqlFunc.getACallToThisFunction().getArgument(arg) and + exists(SqlEscapeFunction sql, int arg, FunctionInput input | + e = sql.getACallToThisFunction().getArgument(arg) and input.isParameterDeref(arg) and - sqlFunc.getAnEscapedParameter(input, _) + sql.escapesSqlArgument(input, _) ) } } From c72e385a472f59ed8a854ef0cbb8bbc76fba27bc Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Mon, 20 Sep 2021 14:09:09 +0200 Subject: [PATCH 522/741] Java: Fix join-order in isUnreachableInCall. --- .../semmle/code/java/dataflow/internal/DataFlowPrivate.qll | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowPrivate.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowPrivate.qll index f1f67b1337c..01f3557715c 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowPrivate.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowPrivate.qll @@ -294,7 +294,7 @@ predicate isUnreachableInCall(Node n, DataFlowCall call) { Guard guard | // get constant bool argument and parameter for this call - viableParamArg(call, paramNode, arg) and + viableParamArg(call, pragma[only_bind_into](paramNode), arg) and // get the ssa variable definition for this parameter param.isParameterDefinition(paramNode.getParameter()) and // which is used in a guard @@ -302,7 +302,7 @@ predicate isUnreachableInCall(Node n, DataFlowCall call) { // which controls `n` with the opposite value of `arg` guard .controls(n.asExpr().getBasicBlock(), - pragma[only_bind_out](arg.getBooleanValue()).booleanNot()) + pragma[only_bind_into](pragma[only_bind_out](arg.getBooleanValue()).booleanNot())) ) } From 07c05528ef0ebb8e54c3b08d5dcaa9390d4b86b3 Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Mon, 20 Sep 2021 14:58:12 +0200 Subject: [PATCH 523/741] Dataflow: Fix join-order in subpaths01. --- .../lib/semmle/code/java/dataflow/internal/DataFlowImpl.qll | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl.qll index 6e7283c4153..0c99a25ccc4 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl.qll @@ -3643,9 +3643,10 @@ private module Subpaths { PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, NodeEx out, AccessPath apout ) { - pathThroughCallable(arg, out, _, apout) and + pathThroughCallable(arg, out, _, pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, innercc, sc, _) and - paramFlowsThrough(kind, innercc, sc, apout, _, unbindConf(arg.getConfiguration())) + paramFlowsThrough(kind, innercc, sc, pragma[only_bind_into](apout), _, + unbindConf(arg.getConfiguration())) } /** From 044623a36023b5fbb21562ca94a34c082a81a465 Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Mon, 20 Sep 2021 14:58:28 +0200 Subject: [PATCH 524/741] Dataflow: Sync. --- .../lib/semmle/code/cpp/dataflow/internal/DataFlowImpl.qll | 5 +++-- .../lib/semmle/code/cpp/dataflow/internal/DataFlowImpl2.qll | 5 +++-- .../lib/semmle/code/cpp/dataflow/internal/DataFlowImpl3.qll | 5 +++-- .../lib/semmle/code/cpp/dataflow/internal/DataFlowImpl4.qll | 5 +++-- .../semmle/code/cpp/dataflow/internal/DataFlowImplLocal.qll | 5 +++-- .../semmle/code/cpp/ir/dataflow/internal/DataFlowImpl.qll | 5 +++-- .../semmle/code/cpp/ir/dataflow/internal/DataFlowImpl2.qll | 5 +++-- .../semmle/code/cpp/ir/dataflow/internal/DataFlowImpl3.qll | 5 +++-- .../semmle/code/cpp/ir/dataflow/internal/DataFlowImpl4.qll | 5 +++-- .../semmle/code/csharp/dataflow/internal/DataFlowImpl.qll | 5 +++-- .../semmle/code/csharp/dataflow/internal/DataFlowImpl2.qll | 5 +++-- .../semmle/code/csharp/dataflow/internal/DataFlowImpl3.qll | 5 +++-- .../semmle/code/csharp/dataflow/internal/DataFlowImpl4.qll | 5 +++-- .../semmle/code/csharp/dataflow/internal/DataFlowImpl5.qll | 5 +++-- .../lib/semmle/code/java/dataflow/internal/DataFlowImpl2.qll | 5 +++-- .../lib/semmle/code/java/dataflow/internal/DataFlowImpl3.qll | 5 +++-- .../lib/semmle/code/java/dataflow/internal/DataFlowImpl4.qll | 5 +++-- .../lib/semmle/code/java/dataflow/internal/DataFlowImpl5.qll | 5 +++-- .../lib/semmle/code/java/dataflow/internal/DataFlowImpl6.qll | 5 +++-- .../dataflow/internal/DataFlowImplForSerializability.qll | 5 +++-- .../lib/semmle/python/dataflow/new/internal/DataFlowImpl.qll | 5 +++-- .../semmle/python/dataflow/new/internal/DataFlowImpl2.qll | 5 +++-- .../semmle/python/dataflow/new/internal/DataFlowImpl3.qll | 5 +++-- .../semmle/python/dataflow/new/internal/DataFlowImpl4.qll | 5 +++-- 24 files changed, 72 insertions(+), 48 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl.qll index 6e7283c4153..0c99a25ccc4 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl.qll @@ -3643,9 +3643,10 @@ private module Subpaths { PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, NodeEx out, AccessPath apout ) { - pathThroughCallable(arg, out, _, apout) and + pathThroughCallable(arg, out, _, pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, innercc, sc, _) and - paramFlowsThrough(kind, innercc, sc, apout, _, unbindConf(arg.getConfiguration())) + paramFlowsThrough(kind, innercc, sc, pragma[only_bind_into](apout), _, + unbindConf(arg.getConfiguration())) } /** diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl2.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl2.qll index 6e7283c4153..0c99a25ccc4 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl2.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl2.qll @@ -3643,9 +3643,10 @@ private module Subpaths { PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, NodeEx out, AccessPath apout ) { - pathThroughCallable(arg, out, _, apout) and + pathThroughCallable(arg, out, _, pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, innercc, sc, _) and - paramFlowsThrough(kind, innercc, sc, apout, _, unbindConf(arg.getConfiguration())) + paramFlowsThrough(kind, innercc, sc, pragma[only_bind_into](apout), _, + unbindConf(arg.getConfiguration())) } /** diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl3.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl3.qll index 6e7283c4153..0c99a25ccc4 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl3.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl3.qll @@ -3643,9 +3643,10 @@ private module Subpaths { PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, NodeEx out, AccessPath apout ) { - pathThroughCallable(arg, out, _, apout) and + pathThroughCallable(arg, out, _, pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, innercc, sc, _) and - paramFlowsThrough(kind, innercc, sc, apout, _, unbindConf(arg.getConfiguration())) + paramFlowsThrough(kind, innercc, sc, pragma[only_bind_into](apout), _, + unbindConf(arg.getConfiguration())) } /** diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl4.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl4.qll index 6e7283c4153..0c99a25ccc4 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl4.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl4.qll @@ -3643,9 +3643,10 @@ private module Subpaths { PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, NodeEx out, AccessPath apout ) { - pathThroughCallable(arg, out, _, apout) and + pathThroughCallable(arg, out, _, pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, innercc, sc, _) and - paramFlowsThrough(kind, innercc, sc, apout, _, unbindConf(arg.getConfiguration())) + paramFlowsThrough(kind, innercc, sc, pragma[only_bind_into](apout), _, + unbindConf(arg.getConfiguration())) } /** diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplLocal.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplLocal.qll index 6e7283c4153..0c99a25ccc4 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplLocal.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplLocal.qll @@ -3643,9 +3643,10 @@ private module Subpaths { PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, NodeEx out, AccessPath apout ) { - pathThroughCallable(arg, out, _, apout) and + pathThroughCallable(arg, out, _, pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, innercc, sc, _) and - paramFlowsThrough(kind, innercc, sc, apout, _, unbindConf(arg.getConfiguration())) + paramFlowsThrough(kind, innercc, sc, pragma[only_bind_into](apout), _, + unbindConf(arg.getConfiguration())) } /** diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl.qll index 6e7283c4153..0c99a25ccc4 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl.qll @@ -3643,9 +3643,10 @@ private module Subpaths { PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, NodeEx out, AccessPath apout ) { - pathThroughCallable(arg, out, _, apout) and + pathThroughCallable(arg, out, _, pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, innercc, sc, _) and - paramFlowsThrough(kind, innercc, sc, apout, _, unbindConf(arg.getConfiguration())) + paramFlowsThrough(kind, innercc, sc, pragma[only_bind_into](apout), _, + unbindConf(arg.getConfiguration())) } /** diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl2.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl2.qll index 6e7283c4153..0c99a25ccc4 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl2.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl2.qll @@ -3643,9 +3643,10 @@ private module Subpaths { PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, NodeEx out, AccessPath apout ) { - pathThroughCallable(arg, out, _, apout) and + pathThroughCallable(arg, out, _, pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, innercc, sc, _) and - paramFlowsThrough(kind, innercc, sc, apout, _, unbindConf(arg.getConfiguration())) + paramFlowsThrough(kind, innercc, sc, pragma[only_bind_into](apout), _, + unbindConf(arg.getConfiguration())) } /** diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl3.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl3.qll index 6e7283c4153..0c99a25ccc4 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl3.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl3.qll @@ -3643,9 +3643,10 @@ private module Subpaths { PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, NodeEx out, AccessPath apout ) { - pathThroughCallable(arg, out, _, apout) and + pathThroughCallable(arg, out, _, pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, innercc, sc, _) and - paramFlowsThrough(kind, innercc, sc, apout, _, unbindConf(arg.getConfiguration())) + paramFlowsThrough(kind, innercc, sc, pragma[only_bind_into](apout), _, + unbindConf(arg.getConfiguration())) } /** diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl4.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl4.qll index 6e7283c4153..0c99a25ccc4 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl4.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl4.qll @@ -3643,9 +3643,10 @@ private module Subpaths { PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, NodeEx out, AccessPath apout ) { - pathThroughCallable(arg, out, _, apout) and + pathThroughCallable(arg, out, _, pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, innercc, sc, _) and - paramFlowsThrough(kind, innercc, sc, apout, _, unbindConf(arg.getConfiguration())) + paramFlowsThrough(kind, innercc, sc, pragma[only_bind_into](apout), _, + unbindConf(arg.getConfiguration())) } /** diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl.qll index 6e7283c4153..0c99a25ccc4 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl.qll @@ -3643,9 +3643,10 @@ private module Subpaths { PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, NodeEx out, AccessPath apout ) { - pathThroughCallable(arg, out, _, apout) and + pathThroughCallable(arg, out, _, pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, innercc, sc, _) and - paramFlowsThrough(kind, innercc, sc, apout, _, unbindConf(arg.getConfiguration())) + paramFlowsThrough(kind, innercc, sc, pragma[only_bind_into](apout), _, + unbindConf(arg.getConfiguration())) } /** diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl2.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl2.qll index 6e7283c4153..0c99a25ccc4 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl2.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl2.qll @@ -3643,9 +3643,10 @@ private module Subpaths { PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, NodeEx out, AccessPath apout ) { - pathThroughCallable(arg, out, _, apout) and + pathThroughCallable(arg, out, _, pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, innercc, sc, _) and - paramFlowsThrough(kind, innercc, sc, apout, _, unbindConf(arg.getConfiguration())) + paramFlowsThrough(kind, innercc, sc, pragma[only_bind_into](apout), _, + unbindConf(arg.getConfiguration())) } /** diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl3.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl3.qll index 6e7283c4153..0c99a25ccc4 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl3.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl3.qll @@ -3643,9 +3643,10 @@ private module Subpaths { PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, NodeEx out, AccessPath apout ) { - pathThroughCallable(arg, out, _, apout) and + pathThroughCallable(arg, out, _, pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, innercc, sc, _) and - paramFlowsThrough(kind, innercc, sc, apout, _, unbindConf(arg.getConfiguration())) + paramFlowsThrough(kind, innercc, sc, pragma[only_bind_into](apout), _, + unbindConf(arg.getConfiguration())) } /** diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl4.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl4.qll index 6e7283c4153..0c99a25ccc4 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl4.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl4.qll @@ -3643,9 +3643,10 @@ private module Subpaths { PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, NodeEx out, AccessPath apout ) { - pathThroughCallable(arg, out, _, apout) and + pathThroughCallable(arg, out, _, pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, innercc, sc, _) and - paramFlowsThrough(kind, innercc, sc, apout, _, unbindConf(arg.getConfiguration())) + paramFlowsThrough(kind, innercc, sc, pragma[only_bind_into](apout), _, + unbindConf(arg.getConfiguration())) } /** diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl5.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl5.qll index 6e7283c4153..0c99a25ccc4 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl5.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl5.qll @@ -3643,9 +3643,10 @@ private module Subpaths { PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, NodeEx out, AccessPath apout ) { - pathThroughCallable(arg, out, _, apout) and + pathThroughCallable(arg, out, _, pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, innercc, sc, _) and - paramFlowsThrough(kind, innercc, sc, apout, _, unbindConf(arg.getConfiguration())) + paramFlowsThrough(kind, innercc, sc, pragma[only_bind_into](apout), _, + unbindConf(arg.getConfiguration())) } /** diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl2.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl2.qll index 6e7283c4153..0c99a25ccc4 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl2.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl2.qll @@ -3643,9 +3643,10 @@ private module Subpaths { PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, NodeEx out, AccessPath apout ) { - pathThroughCallable(arg, out, _, apout) and + pathThroughCallable(arg, out, _, pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, innercc, sc, _) and - paramFlowsThrough(kind, innercc, sc, apout, _, unbindConf(arg.getConfiguration())) + paramFlowsThrough(kind, innercc, sc, pragma[only_bind_into](apout), _, + unbindConf(arg.getConfiguration())) } /** diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl3.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl3.qll index 6e7283c4153..0c99a25ccc4 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl3.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl3.qll @@ -3643,9 +3643,10 @@ private module Subpaths { PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, NodeEx out, AccessPath apout ) { - pathThroughCallable(arg, out, _, apout) and + pathThroughCallable(arg, out, _, pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, innercc, sc, _) and - paramFlowsThrough(kind, innercc, sc, apout, _, unbindConf(arg.getConfiguration())) + paramFlowsThrough(kind, innercc, sc, pragma[only_bind_into](apout), _, + unbindConf(arg.getConfiguration())) } /** diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl4.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl4.qll index 6e7283c4153..0c99a25ccc4 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl4.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl4.qll @@ -3643,9 +3643,10 @@ private module Subpaths { PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, NodeEx out, AccessPath apout ) { - pathThroughCallable(arg, out, _, apout) and + pathThroughCallable(arg, out, _, pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, innercc, sc, _) and - paramFlowsThrough(kind, innercc, sc, apout, _, unbindConf(arg.getConfiguration())) + paramFlowsThrough(kind, innercc, sc, pragma[only_bind_into](apout), _, + unbindConf(arg.getConfiguration())) } /** diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl5.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl5.qll index 6e7283c4153..0c99a25ccc4 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl5.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl5.qll @@ -3643,9 +3643,10 @@ private module Subpaths { PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, NodeEx out, AccessPath apout ) { - pathThroughCallable(arg, out, _, apout) and + pathThroughCallable(arg, out, _, pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, innercc, sc, _) and - paramFlowsThrough(kind, innercc, sc, apout, _, unbindConf(arg.getConfiguration())) + paramFlowsThrough(kind, innercc, sc, pragma[only_bind_into](apout), _, + unbindConf(arg.getConfiguration())) } /** diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl6.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl6.qll index 6e7283c4153..0c99a25ccc4 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl6.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl6.qll @@ -3643,9 +3643,10 @@ private module Subpaths { PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, NodeEx out, AccessPath apout ) { - pathThroughCallable(arg, out, _, apout) and + pathThroughCallable(arg, out, _, pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, innercc, sc, _) and - paramFlowsThrough(kind, innercc, sc, apout, _, unbindConf(arg.getConfiguration())) + paramFlowsThrough(kind, innercc, sc, pragma[only_bind_into](apout), _, + unbindConf(arg.getConfiguration())) } /** diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplForSerializability.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplForSerializability.qll index 6e7283c4153..0c99a25ccc4 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplForSerializability.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplForSerializability.qll @@ -3643,9 +3643,10 @@ private module Subpaths { PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, NodeEx out, AccessPath apout ) { - pathThroughCallable(arg, out, _, apout) and + pathThroughCallable(arg, out, _, pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, innercc, sc, _) and - paramFlowsThrough(kind, innercc, sc, apout, _, unbindConf(arg.getConfiguration())) + paramFlowsThrough(kind, innercc, sc, pragma[only_bind_into](apout), _, + unbindConf(arg.getConfiguration())) } /** diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl.qll index 6e7283c4153..0c99a25ccc4 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl.qll @@ -3643,9 +3643,10 @@ private module Subpaths { PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, NodeEx out, AccessPath apout ) { - pathThroughCallable(arg, out, _, apout) and + pathThroughCallable(arg, out, _, pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, innercc, sc, _) and - paramFlowsThrough(kind, innercc, sc, apout, _, unbindConf(arg.getConfiguration())) + paramFlowsThrough(kind, innercc, sc, pragma[only_bind_into](apout), _, + unbindConf(arg.getConfiguration())) } /** diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl2.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl2.qll index 6e7283c4153..0c99a25ccc4 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl2.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl2.qll @@ -3643,9 +3643,10 @@ private module Subpaths { PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, NodeEx out, AccessPath apout ) { - pathThroughCallable(arg, out, _, apout) and + pathThroughCallable(arg, out, _, pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, innercc, sc, _) and - paramFlowsThrough(kind, innercc, sc, apout, _, unbindConf(arg.getConfiguration())) + paramFlowsThrough(kind, innercc, sc, pragma[only_bind_into](apout), _, + unbindConf(arg.getConfiguration())) } /** diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl3.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl3.qll index 6e7283c4153..0c99a25ccc4 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl3.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl3.qll @@ -3643,9 +3643,10 @@ private module Subpaths { PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, NodeEx out, AccessPath apout ) { - pathThroughCallable(arg, out, _, apout) and + pathThroughCallable(arg, out, _, pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, innercc, sc, _) and - paramFlowsThrough(kind, innercc, sc, apout, _, unbindConf(arg.getConfiguration())) + paramFlowsThrough(kind, innercc, sc, pragma[only_bind_into](apout), _, + unbindConf(arg.getConfiguration())) } /** diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl4.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl4.qll index 6e7283c4153..0c99a25ccc4 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl4.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl4.qll @@ -3643,9 +3643,10 @@ private module Subpaths { PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, NodeEx out, AccessPath apout ) { - pathThroughCallable(arg, out, _, apout) and + pathThroughCallable(arg, out, _, pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, innercc, sc, _) and - paramFlowsThrough(kind, innercc, sc, apout, _, unbindConf(arg.getConfiguration())) + paramFlowsThrough(kind, innercc, sc, pragma[only_bind_into](apout), _, + unbindConf(arg.getConfiguration())) } /** From f8e6ba633aafe86097995dd849082e68f8b0504b Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Tue, 21 Sep 2021 09:40:13 +0200 Subject: [PATCH 525/741] Python: Fix .expected for new `subpaths` query predicate --- .../SQLAlchemyTextClauseInjection.expected | 1 + 1 file changed, 1 insertion(+) diff --git a/python/ql/test/query-tests/Security/CWE-089-SQLAlchemyTextClauseInjection/SQLAlchemyTextClauseInjection.expected b/python/ql/test/query-tests/Security/CWE-089-SQLAlchemyTextClauseInjection/SQLAlchemyTextClauseInjection.expected index 3c51294a467..29ee6370c3a 100644 --- a/python/ql/test/query-tests/Security/CWE-089-SQLAlchemyTextClauseInjection/SQLAlchemyTextClauseInjection.expected +++ b/python/ql/test/query-tests/Security/CWE-089-SQLAlchemyTextClauseInjection/SQLAlchemyTextClauseInjection.expected @@ -25,6 +25,7 @@ nodes | test.py:48:52:48:59 | ControlFlowNode for username | semmle.label | ControlFlowNode for username | | test.py:50:18:50:25 | ControlFlowNode for username | semmle.label | ControlFlowNode for username | | test.py:51:24:51:31 | ControlFlowNode for username | semmle.label | ControlFlowNode for username | +subpaths #select | test.py:27:28:27:87 | ControlFlowNode for Attribute() | test.py:23:15:23:22 | ControlFlowNode for username | test.py:27:28:27:87 | ControlFlowNode for Attribute() | This SQLAlchemy TextClause depends on $@, which could lead to SQL injection. | test.py:23:15:23:22 | ControlFlowNode for username | a user-provided value | | test.py:31:50:31:72 | ControlFlowNode for Attribute() | test.py:23:15:23:22 | ControlFlowNode for username | test.py:31:50:31:72 | ControlFlowNode for Attribute() | This SQLAlchemy TextClause depends on $@, which could lead to SQL injection. | test.py:23:15:23:22 | ControlFlowNode for username | a user-provided value | From 5a28a796af42f4ddc3e78f9f605178d5d3ba6ff1 Mon Sep 17 00:00:00 2001 From: Edoardo Pirovano Date: Tue, 21 Sep 2021 10:16:12 +0100 Subject: [PATCH 526/741] Update documentation to reflect changes to `database analyze` --- .../analyzing-databases-with-the-codeql-cli.rst | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/docs/codeql/codeql-cli/analyzing-databases-with-the-codeql-cli.rst b/docs/codeql/codeql-cli/analyzing-databases-with-the-codeql-cli.rst index 884eaf69444..effc34f3a1d 100644 --- a/docs/codeql/codeql-cli/analyzing-databases-with-the-codeql-cli.rst +++ b/docs/codeql/codeql-cli/analyzing-databases-with-the-codeql-cli.rst @@ -33,18 +33,12 @@ When you run ``database analyze``, it: You can analyze a database by running the following command:: - codeql database analyze --format= --output= + codeql database analyze --format= --output= You must specify: - ````: the path to the CodeQL database you want to analyze. -- ````: the queries to run over your database. You can - list one or more individual query files, specify a directory that will be - searched recursively for query files, or name a query suite that defines a - particular set of queries. For more information, see the :ref:`examples - ` below. - - ``--format``: the format of the results file generated during analysis. A number of different formats are supported, including CSV, :ref:`SARIF `, and graph formats. For more information about CSV and SARIF, @@ -56,6 +50,13 @@ You must specify: You can also specify: +- ````: the queries to run over your database. You can + list one or more individual query files, specify a directory that will be + searched recursively for query files, or name a query suite that defines a + particular set of queries. If omitted, the default query suite for the language + of the database being analyzed will be usedFor more information, see the + :ref:`examples ` below. + - ``--sarif-category``: an identifying category for the results. Used when you want to upload more than one set of results for a commit. For example, when you use ``github upload-results`` to send results for more than one From a811ab3affc937283d5eb8087bda666cf1afa24c Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Tue, 21 Sep 2021 12:09:28 +0200 Subject: [PATCH 527/741] Add ContentProvider sources --- .../semmle/code/java/dataflow/FlowSources.qll | 14 ++++++ .../code/java/frameworks/android/Android.qll | 44 +++++++++++++++++++ .../lib/semmle/code/xml/AndroidManifest.qll | 41 +++++++++++++++++ 3 files changed, 99 insertions(+) diff --git a/java/ql/lib/semmle/code/java/dataflow/FlowSources.qll b/java/ql/lib/semmle/code/java/dataflow/FlowSources.qll index bf4807153e5..5a619bd9cfd 100644 --- a/java/ql/lib/semmle/code/java/dataflow/FlowSources.qll +++ b/java/ql/lib/semmle/code/java/dataflow/FlowSources.qll @@ -247,3 +247,17 @@ class ExportedAndroidIntentInput extends RemoteFlowSource, AndroidIntentInput { override string getSourceType() { result = "Exported Android intent source" } } + +/** A parameter of an entry-point method declared in a `ContentProvider` class. */ +class AndroidContentProviderInput extends DataFlow::Node { + AndroidContentProvider declaringType; + + AndroidContentProviderInput() { sourceNode(this, "contentprovider") } +} + +/** A parameter of an entry-point method declared in an exported `ContentProvider` class. */ +class ExportedAndroidContentProviderInput extends RemoteFlowSource, AndroidContentProviderInput { + ExportedAndroidContentProviderInput() { declaringType.isExported() } + + override string getSourceType() { result = "Exported Android content provider source" } +} diff --git a/java/ql/lib/semmle/code/java/frameworks/android/Android.qll b/java/ql/lib/semmle/code/java/frameworks/android/Android.qll index 34064b3190e..95d6fd7339c 100644 --- a/java/ql/lib/semmle/code/java/frameworks/android/Android.qll +++ b/java/ql/lib/semmle/code/java/frameworks/android/Android.qll @@ -72,6 +72,14 @@ class AndroidContentProvider extends ExportableAndroidComponent { AndroidContentProvider() { this.getASupertype*().hasQualifiedName("android.content", "ContentProvider") } + + /** + * Holds if this content provider requires read and write permissions + * in an `AndroidManifest.xml` file. + */ + predicate requiresPermissions() { + getAndroidComponentXmlElement().(AndroidProviderXmlElement).requiresPermissions() + } } /** An Android content resolver. */ @@ -148,3 +156,39 @@ private class UriModel extends SummaryModelCsv { ] } } + +private class ContentProviderSourceModels extends SourceModelCsv { + override predicate row(string row) { + row = + [ + // ContentInterface models are here for backwards compatibility (it was removed in API 28) + "android.content;ContentInterface;true;call;(String,String,String,Bundle);;Parameter[0..3];contentprovider", + "android.content;ContentProvider;true;call;(String,String,String,Bundle);;Parameter[0..3];contentprovider", + "android.content;ContentProvider;true;call;(String,String,Bundle);;Parameter[0..2];contentprovider", + "android.content;ContentProvider;true;delete;(Uri,String,String[]);;Parameter[0..2];contentprovider", + "android.content;ContentInterface;true;delete;(Uri,Bundle);;Parameter[0..1];contentprovider", + "android.content;ContentProvider;true;delete;(Uri,Bundle);;Parameter[0..1];contentprovider", + "android.content;ContentInterface;true;getType;(Uri);;Parameter[0];contentprovider", + "android.content;ContentProvider;true;getType;(Uri);;Parameter[0];contentprovider", + "android.content;ContentInterface;true;insert;(Uri,ContentValues,Bundle);;Parameter[0];contentprovider", + "android.content;ContentProvider;true;insert;(Uri,ContentValues,Bundle);;Parameter[0..2];contentprovider", + "android.content;ContentProvider;true;insert;(Uri,ContentValues);;Parameter[0..1];contentprovider", + "android.content;ContentInterface;true;openAssetFile;(Uri,String,CancellationSignal);;Parameter[0];contentprovider", + "android.content;ContentProvider;true;openAssetFile;(Uri,String,CancellationSignal);;Parameter[0];contentprovider", + "android.content;ContentProvider;true;openAssetFile;(Uri,String);;Parameter[0];contentprovider", + "android.content;ContentInterface;true;openTypedAssetFile;(Uri,String,Bundle,CancellationSignal);;Parameter[0..2];contentprovider", + "android.content;ContentProvider;true;openTypedAssetFile;(Uri,String,Bundle,CancellationSignal);;Parameter[0..2];contentprovider", + "android.content;ContentProvider;true;openTypedAssetFile;(Uri,String,Bundle);;Parameter[0..2];contentprovider", + "android.content;ContentInterface;true;openFile;(Uri,String,CancellationSignal);;Parameter[0];contentprovider", + "android.content;ContentProvider;true;openFile;(Uri,String,CancellationSignal);;Parameter[0];contentprovider", + "android.content;ContentProvider;true;openFile;(Uri,String);;Parameter[0];contentprovider", + "android.content;ContentInterface;true;query;(Uri,String[],Bundle,CancellationSignal);;Parameter[0..2];contentprovider", + "android.content;ContentProvider;true;query;(Uri,String[],Bundle,CancellationSignal);;Parameter[0..2];contentprovider", + "android.content;ContentProvider;true;query;(Uri,String[],String,String[],String);;Parameter[0..4];contentprovider", + "android.content;ContentProvider;true;query;(Uri,String[],String,String[],String,CancellationSignal);;Parameter[0..4];contentprovider", + "android.content;ContentInterface;true;update;(Uri,ContentValues,Bundle);;Parameter[0..2];contentprovider", + "android.content;ContentProvider;true;update;(Uri,ContentValues,Bundle);;Parameter[0..2];contentprovider", + "android.content;ContentProvider;true;update;(Uri,ContentValues,String,String[]);;Parameter[0..3];contentprovider" + ] + } +} diff --git a/java/ql/lib/semmle/code/xml/AndroidManifest.qll b/java/ql/lib/semmle/code/xml/AndroidManifest.qll index 7c6b2f3e569..ae40b800ef9 100644 --- a/java/ql/lib/semmle/code/xml/AndroidManifest.qll +++ b/java/ql/lib/semmle/code/xml/AndroidManifest.qll @@ -79,6 +79,47 @@ class AndroidReceiverXmlElement extends AndroidComponentXmlElement { */ class AndroidProviderXmlElement extends AndroidComponentXmlElement { AndroidProviderXmlElement() { this.getName() = "provider" } + + /** + * Holds if this provider element has explicitly set a value for either its + * `android:permission` attribute or its `android:readPermission` and `android:writePermission` + * attributes. + */ + predicate requiresPermissions() { + this.getAnAttribute().(AndroidPermissionXmlAttribute).isFull() + or + this.getAnAttribute().(AndroidPermissionXmlAttribute).isWrite() and + this.getAnAttribute().(AndroidPermissionXmlAttribute).isRead() + } +} + +/** + * The attribute `android:perrmission`, `android:readPermission`, or `android:writePermission`. + */ +class AndroidPermissionXmlAttribute extends XMLAttribute { + AndroidPermissionXmlAttribute() { + this.getNamespace().getPrefix() = "android" and + this.getName() = ["permission", "readPermission", "writePermission"] + } + + /** Holds if this is an `android:permission` attribute. */ + predicate isFull() { this.getName() = "permission" } + + /** Holds if this is an `android:readPermission` attribute. */ + predicate isRead() { this.getName() = "readPermission" } + + /** Holds if this is an `android:writePermission` attribute. */ + predicate isWrite() { this.getName() = "writePermission" } +} + +/** + * The ` element of a `` in an Android manifest file. + */ +class AndroidPathPermissionXmlElement extends XMLElement { + AndroidPathPermissionXmlElement() { + this.getParent() instanceof AndroidProviderXmlElement and + this.hasName("path-permission") + } } /** From 0c1f3ed0b3e78eb217c08d82ae1a54c89e8360fe Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Tue, 21 Sep 2021 12:09:47 +0200 Subject: [PATCH 528/741] Add tests for ContentProvider sources --- .../content-provider/AndroidManifest.xml | 31 +++ .../android/content-provider/Test.java | 190 ++++++++++++++++++ .../android/content-provider/options | 1 + .../android/content-provider/test.expected | 0 .../android/content-provider/test.ql | 13 ++ 5 files changed, 235 insertions(+) create mode 100644 java/ql/test/library-tests/frameworks/android/content-provider/AndroidManifest.xml create mode 100644 java/ql/test/library-tests/frameworks/android/content-provider/Test.java create mode 100644 java/ql/test/library-tests/frameworks/android/content-provider/options create mode 100644 java/ql/test/library-tests/frameworks/android/content-provider/test.expected create mode 100644 java/ql/test/library-tests/frameworks/android/content-provider/test.ql diff --git a/java/ql/test/library-tests/frameworks/android/content-provider/AndroidManifest.xml b/java/ql/test/library-tests/frameworks/android/content-provider/AndroidManifest.xml new file mode 100644 index 00000000000..c21c29dcf56 --- /dev/null +++ b/java/ql/test/library-tests/frameworks/android/content-provider/AndroidManifest.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + diff --git a/java/ql/test/library-tests/frameworks/android/content-provider/Test.java b/java/ql/test/library-tests/frameworks/android/content-provider/Test.java new file mode 100644 index 00000000000..c7ed538bbc2 --- /dev/null +++ b/java/ql/test/library-tests/frameworks/android/content-provider/Test.java @@ -0,0 +1,190 @@ +package com.example.app; + +import java.io.FileNotFoundException; +import android.content.ContentProvider; +import android.content.ContentValues; +import android.content.res.AssetFileDescriptor; +import android.database.Cursor; +import android.net.Uri; +import android.os.Bundle; +import android.os.CancellationSignal; +import android.os.ParcelFileDescriptor; +import android.os.RemoteException; + +public class Test extends ContentProvider { + + void sink(Object o) {} + + // "android.content;ContentProvider;true;call;(String,String,String,Bundle);;Parameter[0..3];contentprovider", + @Override + public Bundle call(String authority, String method, String arg, Bundle extras) { + sink(authority); // $ hasTaintFlow + sink(method); // $ hasTaintFlow + sink(arg); // $ hasTaintFlow + sink(extras.get("some_key")); // $ hasTaintFlow + return null; + } + + // "android.content;ContentProvider;true;call;(String,String,Bundle);;Parameter[0..2];contentprovider", + public Bundle call(String method, String arg, Bundle extras) { + sink(method); // $ hasTaintFlow + sink(arg); // $ hasTaintFlow + sink(extras.get("some_key")); // $ hasTaintFlow + return null; + } + + // "android.content;ContentProvider;true;delete;(Uri,String,String[]);;Parameter[0..2];contentprovider", + @Override + public int delete(Uri uri, String selection, String[] selectionArgs) { + sink(uri); // $ hasTaintFlow + sink(selection); // $ hasTaintFlow + sink(selectionArgs); // $ hasTaintFlow + return 0; + } + + // "android.content;ContentProvider;true;delete;(Uri,Bundle);;Parameter[0..1];contentprovider", + @Override + public int delete(Uri uri, Bundle extras) { + sink(uri); // $ hasTaintFlow + sink(extras.get("some_key")); // $ hasTaintFlow + return 0; + } + + // "android.content;ContentProvider;true;getType;(Uri);;Parameter[0];contentprovider", + @Override + public String getType(Uri uri) { + sink(uri); // $ hasTaintFlow + return null; + } + + // "android.content;ContentProvider;true;insert;(Uri,ContentValues,Bundle);;Parameter[0..2];contentprovider", + @Override + public Uri insert(Uri uri, ContentValues values, Bundle extras) { + sink(uri); // $ hasTaintFlow + sink(values); // $ hasTaintFlow + sink(extras.get("some_key")); // $ hasTaintFlow + return null; + } + + // "android.content;ContentProvider;true;insert;(Uri,ContentValues);;Parameter[0..1];contentprovider", + @Override + public Uri insert(Uri uri, ContentValues values) { + sink(uri); // $ hasTaintFlow + sink(values); // $ hasTaintFlow + return null; + } + + // "android.content;ContentProvider;true;openAssetFile;(Uri,String,CancellationSignal);;Parameter[0];contentprovider", + @Override + public AssetFileDescriptor openAssetFile(Uri uri, String mode, CancellationSignal signal) { + sink(uri); // $ hasTaintFlow + sink(mode); // Safe + sink(signal); // Safe + return null; + } + + // "android.content;ContentProvider;true;openAssetFile;(Uri,String);;Parameter[0];contentprovider", + @Override + public AssetFileDescriptor openAssetFile(Uri uri, String mode) { + sink(uri); // $ hasTaintFlow + sink(mode); // Safe + return null; + } + + // "android.content;ContentProvider;true;openTypedAssetFile;(Uri,String,Bundle,CancellationSignal);;Parameter[0..2];contentprovider", + @Override + public AssetFileDescriptor openTypedAssetFile(Uri uri, String mimeTypeFilter, Bundle opts, + CancellationSignal signal) throws RemoteException, FileNotFoundException { + sink(uri); // $ hasTaintFlow + sink(mimeTypeFilter); // $ hasTaintFlow + sink(opts.get("some_key")); // $ hasTaintFlow + sink(signal); // Safe + return null; + } + + // "android.content;ContentProvider;true;openTypedAssetFile;(Uri,String,Bundle);;Parameter[0..2];contentprovider", + @Override + public AssetFileDescriptor openTypedAssetFile(Uri uri, String mimeTypeFilter, Bundle opts) + throws FileNotFoundException { + sink(uri); // $ hasTaintFlow + sink(mimeTypeFilter); // $ hasTaintFlow + sink(opts.get("some_key")); // $ hasTaintFlow + return null; + } + + // "android.content;ContentProvider;true;openFile;(Uri,String,CancellationSignal);;Parameter[0];contentprovider", + @Override + public ParcelFileDescriptor openFile(Uri uri, String mode, CancellationSignal signal) { + sink(uri); // $ hasTaintFlow + sink(mode); // Safe + sink(signal); // Safe + return null; + } + + // "android.content;ContentProvider;true;openFile;(Uri,String);;Parameter[0..1];contentprovider", + @Override + public ParcelFileDescriptor openFile(Uri uri, String mode) { + sink(uri); // $ hasTaintFlow + sink(mode); // Safe + return null; + } + + // "android.content;ContentProvider;true;query;(Uri,String[],Bundle,CancellationSignal);;Parameter[0..2];contentprovider", + @Override + public Cursor query(Uri uri, String[] projection, Bundle queryArgs, + CancellationSignal cancellationSignal) { + sink(uri); // $ hasTaintFlow + sink(projection); // $ hasTaintFlow + sink(queryArgs.get("some_key")); // $ hasTaintFlow + sink(cancellationSignal); // Safe + return null; + } + + // "android.content;ContentProvider;true;query;(Uri,String[],String,String[],String);;Parameter[0..4];contentprovider", + @Override + public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, + String sortOrder) { + sink(uri); // $ hasTaintFlow + sink(projection); // $ hasTaintFlow + sink(selection); // $ hasTaintFlow + sink(selectionArgs); // $ hasTaintFlow + return null; + } + + // "android.content;ContentProvider;true;query;(Uri,String[],String,String[],String,CancellationSignal);;Parameter[0..4];contentprovider", + @Override + public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, + String sortOrder, CancellationSignal cancellationSignal) { + sink(uri); // $ hasTaintFlow + sink(projection); // $ hasTaintFlow + sink(selection); // $ hasTaintFlow + sink(selectionArgs); // $ hasTaintFlow + sink(sortOrder); // $ hasTaintFlow + sink(cancellationSignal); // Safe + return null; + } + + // "android.content;ContentProvider;true;update;(Uri,ContentValues,Bundle);;Parameter[0..2];contentprovider", + @Override + public int update(Uri uri, ContentValues values, Bundle extras) { + sink(uri); // $ hasTaintFlow + sink(values); // $ hasTaintFlow + sink(extras.get("some_key")); // $ hasTaintFlow + return 0; + } + + // "android.content;ContentProvider;true;update;(Uri,ContentValues,String,String[]);;Parameter[0..3];contentprovider" + @Override + public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { + sink(uri); // $ hasTaintFlow + sink(values); // $ hasTaintFlow + sink(selection); // $ hasTaintFlow + sink(selectionArgs); // $ hasTaintFlow + return 0; + } + + @Override + public boolean onCreate() { + return false; + } +} diff --git a/java/ql/test/library-tests/frameworks/android/content-provider/options b/java/ql/test/library-tests/frameworks/android/content-provider/options new file mode 100644 index 00000000000..33cdc1ea940 --- /dev/null +++ b/java/ql/test/library-tests/frameworks/android/content-provider/options @@ -0,0 +1 @@ +//semmle-extractor-options: --javac-args -cp ${testdir}/../../../../stubs/google-android-9.0.0 diff --git a/java/ql/test/library-tests/frameworks/android/content-provider/test.expected b/java/ql/test/library-tests/frameworks/android/content-provider/test.expected new file mode 100644 index 00000000000..e69de29bb2d diff --git a/java/ql/test/library-tests/frameworks/android/content-provider/test.ql b/java/ql/test/library-tests/frameworks/android/content-provider/test.ql new file mode 100644 index 00000000000..336dd5aca98 --- /dev/null +++ b/java/ql/test/library-tests/frameworks/android/content-provider/test.ql @@ -0,0 +1,13 @@ +import java +import semmle.code.java.dataflow.FlowSources +import TestUtilities.InlineFlowTest + +class ProviderTaintFlowConf extends DefaultTaintFlowConf { + override predicate isSource(DataFlow::Node n) { n instanceof RemoteFlowSource } +} + +class ProviderInlineFlowTest extends InlineFlowTest { + override DataFlow::Configuration getValueFlowConfig() { none() } + + override DataFlow::Configuration getTaintFlowConfig() { result instanceof ProviderTaintFlowConf } +} From 99881db8bd7ede349ad5d8a655bcf0dd11486dd4 Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Tue, 21 Sep 2021 12:10:05 +0200 Subject: [PATCH 529/741] Add stubs --- .../android/annotation/Nullable.java | 17 ++ .../android/content/ContentInterface.java | 72 ++++++ .../android/content/ContentProvider.java | 226 ++++++++++++++++++ .../android/content/ContentValues.java | 156 ++++++++++++ .../android/content/pm/PathPermission.java | 39 +++ .../content/res/AssetFileDescriptor.java | 80 +++++++ .../android/database/Cursor.java | 5 + .../android/os/CancellationSignal.java | 34 +++ .../android/os/ParcelFileDescriptor.java | 149 ++++++++++++ .../android/os/PatternMatcher.java | 44 ++++ .../android/os/RemoteException.java | 35 +++ .../android/util/AndroidException.java | 26 ++ .../android/util/ArrayMap.java | 149 ++++++++++++ .../android/util/Pair.java | 39 +++ .../androidx/annotation/NonNull.java | 19 ++ 15 files changed, 1090 insertions(+) create mode 100644 java/ql/test/stubs/google-android-9.0.0/android/annotation/Nullable.java create mode 100644 java/ql/test/stubs/google-android-9.0.0/android/content/ContentInterface.java create mode 100644 java/ql/test/stubs/google-android-9.0.0/android/content/ContentProvider.java create mode 100644 java/ql/test/stubs/google-android-9.0.0/android/content/ContentValues.java create mode 100644 java/ql/test/stubs/google-android-9.0.0/android/content/pm/PathPermission.java create mode 100644 java/ql/test/stubs/google-android-9.0.0/android/content/res/AssetFileDescriptor.java create mode 100644 java/ql/test/stubs/google-android-9.0.0/android/database/Cursor.java create mode 100644 java/ql/test/stubs/google-android-9.0.0/android/os/CancellationSignal.java create mode 100644 java/ql/test/stubs/google-android-9.0.0/android/os/ParcelFileDescriptor.java create mode 100644 java/ql/test/stubs/google-android-9.0.0/android/os/PatternMatcher.java create mode 100644 java/ql/test/stubs/google-android-9.0.0/android/os/RemoteException.java create mode 100644 java/ql/test/stubs/google-android-9.0.0/android/util/AndroidException.java create mode 100644 java/ql/test/stubs/google-android-9.0.0/android/util/ArrayMap.java create mode 100644 java/ql/test/stubs/google-android-9.0.0/android/util/Pair.java create mode 100644 java/ql/test/stubs/google-android-9.0.0/androidx/annotation/NonNull.java diff --git a/java/ql/test/stubs/google-android-9.0.0/android/annotation/Nullable.java b/java/ql/test/stubs/google-android-9.0.0/android/annotation/Nullable.java new file mode 100644 index 00000000000..95b4a1cf9dc --- /dev/null +++ b/java/ql/test/stubs/google-android-9.0.0/android/annotation/Nullable.java @@ -0,0 +1,17 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * 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. + */ +package android.annotation; + +public @interface Nullable { +} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/content/ContentInterface.java b/java/ql/test/stubs/google-android-9.0.0/android/content/ContentInterface.java new file mode 100644 index 00000000000..705f51ca5d0 --- /dev/null +++ b/java/ql/test/stubs/google-android-9.0.0/android/content/ContentInterface.java @@ -0,0 +1,72 @@ +/* + * Copyright (C) 2018 The Android Open Source Project + * + * 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. + */ + +package android.content; + +import androidx.annotation.NonNull; +import android.annotation.Nullable; +import android.content.res.AssetFileDescriptor; +import android.database.Cursor; +import android.net.Uri; +import android.os.Bundle; +import android.os.CancellationSignal; +import android.os.ParcelFileDescriptor; +import android.os.RemoteException; +import java.io.FileNotFoundException; + +public interface ContentInterface { + public @Nullable Cursor query(@NonNull Uri uri, @Nullable String[] projection, + @Nullable Bundle queryArgs, @Nullable CancellationSignal cancellationSignal) + throws RemoteException; + + public @Nullable String getType(@NonNull Uri uri) throws RemoteException; + + public @Nullable String[] getStreamTypes(@NonNull Uri uri, @NonNull String mimeTypeFilter) + throws RemoteException; + + public @Nullable Uri canonicalize(@NonNull Uri uri) throws RemoteException; + + public @Nullable Uri uncanonicalize(@NonNull Uri uri) throws RemoteException; + + public boolean refresh(@NonNull Uri uri, @Nullable Bundle extras, + @Nullable CancellationSignal cancellationSignal) throws RemoteException; + + public @Nullable Uri insert(@NonNull Uri uri, @Nullable ContentValues initialValues, + @Nullable Bundle extras) throws RemoteException; + + public int bulkInsert(@NonNull Uri uri, @NonNull ContentValues[] initialValues) + throws RemoteException; + + public int delete(@NonNull Uri uri, @Nullable Bundle extras) throws RemoteException; + + public int update(@NonNull Uri uri, @Nullable ContentValues values, @Nullable Bundle extras) + throws RemoteException; + + public @Nullable ParcelFileDescriptor openFile(@NonNull Uri uri, @NonNull String mode, + @Nullable CancellationSignal signal) + throws RemoteException, FileNotFoundException; + + public @Nullable AssetFileDescriptor openAssetFile(@NonNull Uri uri, @NonNull String mode, + @Nullable CancellationSignal signal) + throws RemoteException, FileNotFoundException; + + public @Nullable AssetFileDescriptor openTypedAssetFile(@NonNull Uri uri, + @NonNull String mimeTypeFilter, @Nullable Bundle opts, + @Nullable CancellationSignal signal) + throws RemoteException, FileNotFoundException; + + public @Nullable Bundle call(@NonNull String authority, @NonNull String method, + @Nullable String arg, @Nullable Bundle extras) throws RemoteException; + +} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/content/ContentProvider.java b/java/ql/test/stubs/google-android-9.0.0/android/content/ContentProvider.java new file mode 100644 index 00000000000..e897d18500b --- /dev/null +++ b/java/ql/test/stubs/google-android-9.0.0/android/content/ContentProvider.java @@ -0,0 +1,226 @@ +/* + * Copyright (C) 2006 The Android Open Source Project + * + * 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. + */ + +package android.content; + +import androidx.annotation.NonNull; +import android.annotation.Nullable; +import android.content.pm.PathPermission; +import android.content.res.AssetFileDescriptor; +import android.database.Cursor; +import android.net.Uri; +import android.os.Bundle; +import android.os.CancellationSignal; +import android.os.ParcelFileDescriptor; +import android.util.Pair; +import java.io.FileNotFoundException; + +public abstract class ContentProvider implements ContentInterface { + public ContentProvider() {} + + public ContentProvider(Context context, String readPermission, String writePermission, + PathPermission[] pathPermissions) {} + + public final @Nullable Context getContext() { + return null; + } + + public final Context requireContext() { + return null; + } + + public final @Nullable String getCallingPackage() { + return null; + } + + public final @Nullable String getCallingAttributionTag() { + return null; + } + + public final @Nullable String getCallingFeatureId() { + return null; + } + + public final @Nullable String getCallingPackageUnchecked() { + return null; + } + + public void onCallingPackageChanged() {} + + public final class CallingIdentity { + public CallingIdentity(long binderToken, Pair callingPackage) {} + + } + + public final @NonNull CallingIdentity clearCallingIdentity() { + return null; + } + + public final void restoreCallingIdentity(@NonNull CallingIdentity identity) {} + + public final @Nullable String getReadPermission() { + return null; + } + + public final @Nullable String getWritePermission() { + return null; + } + + public final @Nullable PathPermission[] getPathPermissions() { + return null; + } + + public final void setAppOps(int readOp, int writeOp) {} + + public final void setTransportLoggingEnabled(boolean enabled) {} + + public abstract boolean onCreate(); + + public abstract @Nullable Cursor query(@NonNull Uri uri, @Nullable String[] projection, + @Nullable String selection, @Nullable String[] selectionArgs, @Nullable String sortOrder); + + public @Nullable Cursor query(@NonNull Uri uri, @Nullable String[] projection, + @Nullable String selection, @Nullable String[] selectionArgs, @Nullable String sortOrder, + @Nullable CancellationSignal cancellationSignal) { + return null; + } + + @Override + public @Nullable Cursor query(@NonNull Uri uri, @Nullable String[] projection, + @Nullable Bundle queryArgs, @Nullable CancellationSignal cancellationSignal) { + return null; + } + + @Override + public abstract @Nullable String getType(@NonNull Uri uri); + + @Override + public @Nullable Uri canonicalize(@NonNull Uri url) { + return null; + } + + @Override + public @Nullable Uri uncanonicalize(@NonNull Uri url) { + return null; + } + + @Override + public boolean refresh(Uri uri, @Nullable Bundle extras, + @Nullable CancellationSignal cancellationSignal) { + return false; + } + + public Uri rejectInsert(Uri uri, ContentValues values) { + return null; + } + + public abstract @Nullable Uri insert(@NonNull Uri uri, @Nullable ContentValues values); + + @Override + public @Nullable Uri insert(@NonNull Uri uri, @Nullable ContentValues values, + @Nullable Bundle extras) { + return null; + } + + @Override + public int bulkInsert(@NonNull Uri uri, @NonNull ContentValues[] values) { + return 0; + } + + public abstract int delete(@NonNull Uri uri, @Nullable String selection, + @Nullable String[] selectionArgs); + + @Override + public int delete(@NonNull Uri uri, @Nullable Bundle extras) { + return 0; + } + + public abstract int update(@NonNull Uri uri, @Nullable ContentValues values, + @Nullable String selection, @Nullable String[] selectionArgs); + + @Override + public int update(@NonNull Uri uri, @Nullable ContentValues values, @Nullable Bundle extras) { + return 0; + } + + public @Nullable ParcelFileDescriptor openFile(@NonNull Uri uri, @NonNull String mode) + throws FileNotFoundException { + return null; + } + + @Override + public @Nullable ParcelFileDescriptor openFile(@NonNull Uri uri, @NonNull String mode, + @Nullable CancellationSignal signal) throws FileNotFoundException { + return null; + } + + public @Nullable AssetFileDescriptor openAssetFile(@NonNull Uri uri, @NonNull String mode) + throws FileNotFoundException { + return null; + } + + @Override + public @Nullable AssetFileDescriptor openAssetFile(@NonNull Uri uri, @NonNull String mode, + @Nullable CancellationSignal signal) throws FileNotFoundException { + return null; + } + + @Override + public @Nullable String[] getStreamTypes(@NonNull Uri uri, @NonNull String mimeTypeFilter) { + return null; + } + + public @Nullable AssetFileDescriptor openTypedAssetFile(@NonNull Uri uri, + @NonNull String mimeTypeFilter, @Nullable Bundle opts) throws FileNotFoundException { + return null; + } + + public static int getUserIdFromAuthority(String auth, int defaultUserId) { + return 0; + } + + public static int getUserIdFromAuthority(String auth) { + return 0; + } + + public static int getUserIdFromUri(Uri uri, int defaultUserId) { + return 0; + } + + public static int getUserIdFromUri(Uri uri) { + return 0; + } + + public static String getAuthorityWithoutUserId(String auth) { + return null; + } + + public static Uri getUriWithoutUserId(Uri uri) { + return null; + } + + public static boolean uriHasUserId(Uri uri) { + return false; + } + + public static Uri maybeAddUserId(Uri uri, int userId) { + return null; + } + + public @Nullable Bundle call(@NonNull String method, @Nullable String arg, + @Nullable Bundle extras) { + return null; + } + +} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/content/ContentValues.java b/java/ql/test/stubs/google-android-9.0.0/android/content/ContentValues.java new file mode 100644 index 00000000000..d5ef0db4f8b --- /dev/null +++ b/java/ql/test/stubs/google-android-9.0.0/android/content/ContentValues.java @@ -0,0 +1,156 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * 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. + */ + +package android.content; + +import android.annotation.Nullable; +import android.os.Parcel; +import android.os.Parcelable; +import android.util.ArrayMap; +import java.util.ArrayList; +import java.util.Map; +import java.util.Set; + +public final class ContentValues implements Parcelable { + public ContentValues() {} + + public ContentValues(int size) {} + + public ContentValues(ContentValues from) {} + + @Override + public boolean equals(Object object) { + return false; + } + + public ArrayMap getValues() { + return null; + } + + @Override + public int hashCode() { + return 0; + } + + public void put(String key, String value) {} + + public void putAll(ContentValues other) {} + + public void put(String key, Byte value) {} + + public void put(String key, Short value) {} + + public void put(String key, Integer value) {} + + public void put(String key, Long value) {} + + public void put(String key, Float value) {} + + public void put(String key, Double value) {} + + public void put(String key, Boolean value) {} + + public void put(String key, byte[] value) {} + + public void putNull(String key) {} + + public void putObject(@Nullable String key, @Nullable Object value) {} + + public int size() { + return 0; + } + + public boolean isEmpty() { + return false; + } + + public void remove(String key) {} + + public void clear() {} + + public boolean containsKey(String key) { + return false; + } + + public Object get(String key) { + return null; + } + + public String getAsString(String key) { + return null; + } + + public Long getAsLong(String key) { + return null; + } + + public Integer getAsInteger(String key) { + return null; + } + + public Short getAsShort(String key) { + return null; + } + + public Byte getAsByte(String key) { + return null; + } + + public Double getAsDouble(String key) { + return null; + } + + public Float getAsFloat(String key) { + return null; + } + + public Boolean getAsBoolean(String key) { + return null; + } + + public byte[] getAsByteArray(String key) { + return null; + } + + public Set> valueSet() { + return null; + } + + public Set keySet() { + return null; + } + + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel parcel, int flags) {} + + public void putStringArrayList(String key, ArrayList value) {} + + public ArrayList getStringArrayList(String key) { + return null; + } + + @Override + public String toString() { + return null; + } + + public static boolean isSupportedValue(Object value) { + return false; + } + +} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/content/pm/PathPermission.java b/java/ql/test/stubs/google-android-9.0.0/android/content/pm/PathPermission.java new file mode 100644 index 00000000000..fdb19186c81 --- /dev/null +++ b/java/ql/test/stubs/google-android-9.0.0/android/content/pm/PathPermission.java @@ -0,0 +1,39 @@ +/* + * Copyright (C) 2009 The Android Open Source Project + * + * 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. + */ + +package android.content.pm; + +import android.os.Parcel; +import android.os.PatternMatcher; + +public class PathPermission extends PatternMatcher { + public PathPermission(String pattern, int type, String readPermission, String writePermission) { + super(null); + } + + public PathPermission(Parcel src) { + super(null); + } + + public String getReadPermission() { + return null; + } + + public String getWritePermission() { + return null; + } + + public void writeToParcel(Parcel dest, int flags) {} + +} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/content/res/AssetFileDescriptor.java b/java/ql/test/stubs/google-android-9.0.0/android/content/res/AssetFileDescriptor.java new file mode 100644 index 00000000000..beaa53e4449 --- /dev/null +++ b/java/ql/test/stubs/google-android-9.0.0/android/content/res/AssetFileDescriptor.java @@ -0,0 +1,80 @@ +/* + * Copyright (C) 2006 The Android Open Source Project + * + * 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. + */ + +package android.content.res; + +import android.os.Bundle; +import android.os.Parcel; +import android.os.ParcelFileDescriptor; +import android.os.Parcelable; +import java.io.Closeable; +import java.io.FileDescriptor; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; + +public class AssetFileDescriptor implements Parcelable, Closeable { + public AssetFileDescriptor(ParcelFileDescriptor fd, long startOffset, long length) {} + + public AssetFileDescriptor(ParcelFileDescriptor fd, long startOffset, long length, + Bundle extras) {} + + public ParcelFileDescriptor getParcelFileDescriptor() { + return null; + } + + public FileDescriptor getFileDescriptor() { + return null; + } + + public long getStartOffset() { + return 0; + } + + public Bundle getExtras() { + return null; + } + + public long getLength() { + return 0; + } + + public long getDeclaredLength() { + return 0; + } + + @Override + public void close() throws IOException {} + + public FileInputStream createInputStream() throws IOException { + return null; + } + + public FileOutputStream createOutputStream() throws IOException { + return null; + } + + @Override + public String toString() { + return null; + } + + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel out, int flags) {} + +} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/database/Cursor.java b/java/ql/test/stubs/google-android-9.0.0/android/database/Cursor.java new file mode 100644 index 00000000000..cc432b1ad06 --- /dev/null +++ b/java/ql/test/stubs/google-android-9.0.0/android/database/Cursor.java @@ -0,0 +1,5 @@ +package android.database; + +public interface Cursor { + +} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/os/CancellationSignal.java b/java/ql/test/stubs/google-android-9.0.0/android/os/CancellationSignal.java new file mode 100644 index 00000000000..93a3f05c5da --- /dev/null +++ b/java/ql/test/stubs/google-android-9.0.0/android/os/CancellationSignal.java @@ -0,0 +1,34 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * 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. + */ + +package android.os; + +public final class CancellationSignal { + public CancellationSignal() {} + + public boolean isCanceled() { + return false; + } + + public void throwIfCanceled() {} + + public void cancel() {} + + public void setOnCancelListener(OnCancelListener listener) {} + + public interface OnCancelListener { + void onCancel(); + + } +} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/os/ParcelFileDescriptor.java b/java/ql/test/stubs/google-android-9.0.0/android/os/ParcelFileDescriptor.java new file mode 100644 index 00000000000..c0689fefe75 --- /dev/null +++ b/java/ql/test/stubs/google-android-9.0.0/android/os/ParcelFileDescriptor.java @@ -0,0 +1,149 @@ +/* + * Copyright (C) 2006 The Android Open Source Project + * + * 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. + */ + +package android.os; + +import java.io.Closeable; +import java.io.File; +import java.io.FileDescriptor; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.net.DatagramSocket; +import java.net.Socket; + +public class ParcelFileDescriptor implements Parcelable, Closeable { + public ParcelFileDescriptor(ParcelFileDescriptor wrapped) {} + + public ParcelFileDescriptor(FileDescriptor fd) {} + + public ParcelFileDescriptor(FileDescriptor fd, FileDescriptor commChannel) {} + + public static ParcelFileDescriptor open(File file, int mode) throws FileNotFoundException { + return null; + } + + public static ParcelFileDescriptor dup(FileDescriptor orig) throws IOException { + return null; + } + + public ParcelFileDescriptor dup() throws IOException { + return null; + } + + public static ParcelFileDescriptor fromFd(int fd) throws IOException { + return null; + } + + public static ParcelFileDescriptor adoptFd(int fd) { + return null; + } + + public static ParcelFileDescriptor fromSocket(Socket socket) { + return null; + } + + public static ParcelFileDescriptor fromDatagramSocket(DatagramSocket datagramSocket) { + return null; + } + + public static ParcelFileDescriptor[] createPipe() throws IOException { + return null; + } + + public static ParcelFileDescriptor[] createReliablePipe() throws IOException { + return null; + } + + public static ParcelFileDescriptor[] createSocketPair() throws IOException { + return null; + } + + public static ParcelFileDescriptor[] createSocketPair(int type) throws IOException { + return null; + } + + public static ParcelFileDescriptor[] createReliableSocketPair() throws IOException { + return null; + } + + public static ParcelFileDescriptor[] createReliableSocketPair(int type) throws IOException { + return null; + } + + public static ParcelFileDescriptor fromData(byte[] data, String name) throws IOException { + return null; + } + + public static int parseMode(String mode) { + return 0; + } + + public static File getFile(FileDescriptor fd) throws IOException { + return null; + } + + public FileDescriptor getFileDescriptor() { + return null; + } + + public long getStatSize() { + return 0; + } + + public long seekTo(long pos) throws IOException { + return 0; + } + + public int getFd() { + return 0; + } + + public int detachFd() { + return 0; + } + + @Override + public void close() throws IOException {} + + public void closeWithError(String msg) throws IOException {} + + public void releaseResources() {} + + public boolean canDetectErrors() { + return false; + } + + public void checkError() throws IOException {} + + @Override + public String toString() { + return null; + } + + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel out, int flags) {} + + public interface OnCloseListener { + public void onClose(IOException e); + + } + public static class FileDescriptorDetachedException extends IOException { + public FileDescriptorDetachedException() {} + + } +} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/os/PatternMatcher.java b/java/ql/test/stubs/google-android-9.0.0/android/os/PatternMatcher.java new file mode 100644 index 00000000000..28e21f65bcd --- /dev/null +++ b/java/ql/test/stubs/google-android-9.0.0/android/os/PatternMatcher.java @@ -0,0 +1,44 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * 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. + */ + +package android.os; + +public class PatternMatcher implements Parcelable { + public PatternMatcher(String pattern, int type) {} + + public final String getPath() { + return null; + } + + public final int getType() { + return 0; + } + + public boolean match(String str) { + return false; + } + + public String toString() { + return null; + } + + public int describeContents() { + return 0; + } + + public void writeToParcel(Parcel dest, int flags) {} + + public PatternMatcher(Parcel src) {} + +} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/os/RemoteException.java b/java/ql/test/stubs/google-android-9.0.0/android/os/RemoteException.java new file mode 100644 index 00000000000..18c57a49f62 --- /dev/null +++ b/java/ql/test/stubs/google-android-9.0.0/android/os/RemoteException.java @@ -0,0 +1,35 @@ +/* + * Copyright (C) 2006 The Android Open Source Project + * + * 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. + */ + +package android.os; + +import android.util.AndroidException; + +public class RemoteException extends AndroidException { + public RemoteException() {} + + public RemoteException(String message) {} + + public RemoteException(String message, Throwable cause, boolean enableSuppression, + boolean writableStackTrace) {} + + public RuntimeException rethrowAsRuntimeException() { + return null; + } + + public RuntimeException rethrowFromSystemServer() { + return null; + } + +} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/util/AndroidException.java b/java/ql/test/stubs/google-android-9.0.0/android/util/AndroidException.java new file mode 100644 index 00000000000..0263c2fda9d --- /dev/null +++ b/java/ql/test/stubs/google-android-9.0.0/android/util/AndroidException.java @@ -0,0 +1,26 @@ +/* + * Copyright (C) 2006 The Android Open Source Project + * + * 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. + */ + +package android.util; + +public class AndroidException extends Exception { + public AndroidException() {} + + public AndroidException(String name) {} + + public AndroidException(String name, Throwable cause) {} + + public AndroidException(Exception cause) {} + +} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/util/ArrayMap.java b/java/ql/test/stubs/google-android-9.0.0/android/util/ArrayMap.java new file mode 100644 index 00000000000..e04103cb29e --- /dev/null +++ b/java/ql/test/stubs/google-android-9.0.0/android/util/ArrayMap.java @@ -0,0 +1,149 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * 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. + */ + +package android.util; + +import java.util.Collection; +import java.util.Map; +import java.util.Set; + +public final class ArrayMap implements Map { + public static final ArrayMap EMPTY = new ArrayMap<>(-1); + + public ArrayMap() {} + + public ArrayMap(int capacity) {} + + public ArrayMap(int capacity, boolean identityHashCode) {} + + public ArrayMap(ArrayMap map) {} + + @Override + public void clear() {} + + public void erase() {} + + public void ensureCapacity(int minimumCapacity) {} + + @Override + public boolean containsKey(Object key) { + return false; + } + + public int indexOfKey(Object key) { + return 0; + } + + public int indexOfValue(Object value) { + return 0; + } + + @Override + public boolean containsValue(Object value) { + return false; + } + + @Override + public V get(Object key) { + return null; + } + + public K keyAt(int index) { + return null; + } + + public V valueAt(int index) { + return null; + } + + public V setValueAt(int index, V value) { + return null; + } + + @Override + public boolean isEmpty() { + return false; + } + + @Override + public V put(K key, V value) { + return null; + } + + public void append(K key, V value) {} + + public void validate() {} + + public void putAll(ArrayMap array) {} + + @Override + public V remove(Object key) { + return null; + } + + public V removeAt(int index) { + return null; + } + + @Override + public int size() { + return 0; + } + + @Override + public boolean equals(Object object) { + return false; + } + + @Override + public int hashCode() { + return 0; + } + + @Override + public String toString() { + return null; + } + + public boolean containsAll(Collection collection) { + return false; + } + + @Override + public void putAll(Map map) {} + + public boolean removeAll(Collection collection) { + return false; + } + + public boolean retainAll(Collection collection) { + return false; + } + + @Override + public Set> entrySet() { + return null; + } + + @Override + public Set keySet() { + return null; + } + + @Override + public Collection values() { + return null; + } + +} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/util/Pair.java b/java/ql/test/stubs/google-android-9.0.0/android/util/Pair.java new file mode 100644 index 00000000000..e192dcf6944 --- /dev/null +++ b/java/ql/test/stubs/google-android-9.0.0/android/util/Pair.java @@ -0,0 +1,39 @@ +/* + * Copyright (C) 2009 The Android Open Source Project + * + * 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. + */ + +package android.util; + +public class Pair { + public Pair(F first, S second) {} + + @Override + public boolean equals(Object o) { + return false; + } + + @Override + public int hashCode() { + return 0; + } + + @Override + public String toString() { + return null; + } + + public static Pair create(A a, B b) { + return null; + } + +} diff --git a/java/ql/test/stubs/google-android-9.0.0/androidx/annotation/NonNull.java b/java/ql/test/stubs/google-android-9.0.0/androidx/annotation/NonNull.java new file mode 100644 index 00000000000..d8d30493ed6 --- /dev/null +++ b/java/ql/test/stubs/google-android-9.0.0/androidx/annotation/NonNull.java @@ -0,0 +1,19 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * 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. + */ +package androidx.annotation; + +public @interface NonNull { +} From dfe932d0534aec7db4405bf8668779e47e713445 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Tue, 21 Sep 2021 12:14:45 +0100 Subject: [PATCH 530/741] Add missing conjunct in PostgreSqlEscapeFunction's 'escapesSqlArgument' predicate. --- .../lib/semmle/code/cpp/models/implementations/PostgreSql.qll | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cpp/ql/lib/semmle/code/cpp/models/implementations/PostgreSql.qll b/cpp/ql/lib/semmle/code/cpp/models/implementations/PostgreSql.qll index 56362c8b5e6..947c40d279f 100644 --- a/cpp/ql/lib/semmle/code/cpp/models/implementations/PostgreSql.qll +++ b/cpp/ql/lib/semmle/code/cpp/models/implementations/PostgreSql.qll @@ -87,7 +87,8 @@ private class PostgreSqlEscapeFunction extends SqlEscapeFunction { override predicate escapesSqlArgument(FunctionInput input, FunctionOutput output) { exists(int argIndex | input.isParameterDeref(argIndex) and - output.isReturnValueDeref() + output.isReturnValueDeref() and + pqxxEscapeArgument(this.getName(), argIndex) ) } } From bd5edc7ae5c5f36257cc4bd0a413c7bd50d6b752 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Tue, 21 Sep 2021 14:29:26 +0100 Subject: [PATCH 531/741] Respond to review comments. --- .../semmle/code/cpp/models/implementations/PostgreSql.qll | 6 +++--- cpp/ql/lib/semmle/code/cpp/models/interfaces/Sql.qll | 8 ++++---- cpp/ql/src/Security/CWE/CWE-089/SqlTainted.ql | 4 ++-- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/models/implementations/PostgreSql.qll b/cpp/ql/lib/semmle/code/cpp/models/implementations/PostgreSql.qll index 947c40d279f..595805f176f 100644 --- a/cpp/ql/lib/semmle/code/cpp/models/implementations/PostgreSql.qll +++ b/cpp/ql/lib/semmle/code/cpp/models/implementations/PostgreSql.qll @@ -71,8 +71,8 @@ private class PostgreSqlExecutionFunction extends SqlExecutionFunction { } } -private class PostgreSqlEscapeFunction extends SqlEscapeFunction { - PostgreSqlEscapeFunction() { +private class PostgreSqlBarrierFunction extends SqlBarrierFunction { + PostgreSqlBarrierFunction() { exists(Class c | this.getDeclaringType() = c and // transaction and connection escape functions @@ -84,7 +84,7 @@ private class PostgreSqlEscapeFunction extends SqlEscapeFunction { ) } - override predicate escapesSqlArgument(FunctionInput input, FunctionOutput output) { + override predicate barrierSqlArgument(FunctionInput input, FunctionOutput output) { exists(int argIndex | input.isParameterDeref(argIndex) and output.isReturnValueDeref() and diff --git a/cpp/ql/lib/semmle/code/cpp/models/interfaces/Sql.qll b/cpp/ql/lib/semmle/code/cpp/models/interfaces/Sql.qll index 8591d473592..b13408a38b1 100644 --- a/cpp/ql/lib/semmle/code/cpp/models/interfaces/Sql.qll +++ b/cpp/ql/lib/semmle/code/cpp/models/interfaces/Sql.qll @@ -1,6 +1,6 @@ /** * Provides abstract classes for modeling functions that execute and escape SQL query strings. - * To use this QL library, create a QL class extending `SqlExecutionFunction` or `SqlEscapeFunction` + * To extend this QL library, create a QL class extending `SqlExecutionFunction` or `SqlEscapeFunction` * with a characteristic predicate that selects the function or set of functions you are modeling. * Within that class, override the predicates provided by the class to match the way a * parameter flows into the function and, in the case of `SqlEscapeFunction`, out of the function. @@ -21,10 +21,10 @@ abstract class SqlExecutionFunction extends Function { /** * An abstract class that represents a function that escapes an SQL query string. */ -abstract class SqlEscapeFunction extends Function { +abstract class SqlBarrierFunction extends Function { /** - * Holds if the `output` escapes the SQL input `input` such that is it safe to pass to + * Holds if the `output` is a barrier to the SQL input `input` such that is it safe to pass to * an `SqlExecutionFunction`. */ - abstract predicate escapesSqlArgument(FunctionInput input, FunctionOutput output); + abstract predicate barrierSqlArgument(FunctionInput input, FunctionOutput output); } diff --git a/cpp/ql/src/Security/CWE/CWE-089/SqlTainted.ql b/cpp/ql/src/Security/CWE/CWE-089/SqlTainted.ql index 9e5a582a0b4..92c8b9a2bd5 100644 --- a/cpp/ql/src/Security/CWE/CWE-089/SqlTainted.ql +++ b/cpp/ql/src/Security/CWE/CWE-089/SqlTainted.ql @@ -34,10 +34,10 @@ class Configuration extends TaintTrackingConfiguration { or e.getUnspecifiedType() instanceof IntegralType or - exists(SqlEscapeFunction sql, int arg, FunctionInput input | + exists(SqlBarrierFunction sql, int arg, FunctionInput input | e = sql.getACallToThisFunction().getArgument(arg) and input.isParameterDeref(arg) and - sql.escapesSqlArgument(input, _) + sql.barrierSqlArgument(input, _) ) } } From a47897bdf9f10b9a98badc5a6a87e0b430a1d325 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Tue, 21 Sep 2021 15:29:06 +0100 Subject: [PATCH 532/741] Implement Table gen methods --- .../guava/generated/collect/Test.java | 218 +++++++++--------- .../guava/generated/collect/test.ql | 2 - 2 files changed, 109 insertions(+), 111 deletions(-) diff --git a/java/ql/test/library-tests/frameworks/guava/generated/collect/Test.java b/java/ql/test/library-tests/frameworks/guava/generated/collect/Test.java index d17668bcee0..acfe5489308 100644 --- a/java/ql/test/library-tests/frameworks/guava/generated/collect/Test.java +++ b/java/ql/test/library-tests/frameworks/guava/generated/collect/Test.java @@ -99,6 +99,8 @@ public class Test { K getMapKey(Map map) { return map.keySet().iterator().next(); } K getMapKey(Multimap map) { return map.keySet().iterator().next(); } Map.Entry newEntryWithMapKey(K key) { return Map.of(key, null).entrySet().iterator().next(); } + Table.Cell newTableCell(R row, C column, V value) { return getElement(ImmutableTable.of(row, column, value).cellSet()); } + TreeBasedTable newTable(R row, C column, V value) { TreeBasedTable t = TreeBasedTable.create(null, null); t.put(row, column, value); return t; } R getTable_rowKey(ImmutableTable.Builder b) { return getTable_rowKey(b.build()); } R getTable_rowKey(Table t) { return t.rowKeySet().iterator().next(); } Multiset.Entry newEntryWithElement(T el) { return getElement(ImmutableMultiset.of(el).entrySet()); } @@ -127,8 +129,6 @@ public class Test { Object newWithMapDifference_rightDefault(Object element) { return null; } Object newWithMapKeyDefault(Object element) { return null; } Object newWithMapValueDefault(Object element) { return null; } - Object newWithTable_columnKeyDefault(Object element) { return null; } - Object newWithTable_rowKeyDefault(Object element) { return null; } Object source() { return null; } void sink(Object o) { } @@ -347,21 +347,21 @@ public class Test { { // "com.google.common.collect;HashBasedTable;true;create;(Table);;MapValue of Argument[0];MapValue of ReturnValue;value" HashBasedTable out = null; - Table in = (Table)newWithMapValueDefault(source()); + Table in = (Table)newTable(null, null, source()); out = HashBasedTable.create(in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;HashBasedTable;true;create;(Table);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value" HashBasedTable out = null; - Table in = (Table)newWithTable_columnKeyDefault(source()); + Table in = (Table)newTable(null, source(), null); out = HashBasedTable.create(in); sink(getTable_columnKey(out)); // $ hasValueFlow } { // "com.google.common.collect;HashBasedTable;true;create;(Table);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value" HashBasedTable out = null; - Table in = (Table)newWithTable_rowKeyDefault(source()); + Table in = (Table)newTable(source(), null, null); out = HashBasedTable.create(in); sink(getTable_rowKey(out)); // $ hasValueFlow } @@ -4449,21 +4449,21 @@ public class Test { { // "com.google.common.collect;ImmutableTable$Builder;true;build;();;MapValue of Argument[-1];MapValue of ReturnValue;value" ImmutableTable out = null; - ImmutableTable.Builder in = (ImmutableTable.Builder)newWithMapValueDefault(source()); + ImmutableTable.Builder in = (ImmutableTable.Builder)ImmutableTable.builder().put(null, null, source()); out = in.build(); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableTable$Builder;true;build;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value" ImmutableTable out = null; - ImmutableTable.Builder in = (ImmutableTable.Builder)newWithTable_columnKeyDefault(source()); + ImmutableTable.Builder in = (ImmutableTable.Builder)ImmutableTable.builder().put(null, source(), null); out = in.build(); sink(getTable_columnKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableTable$Builder;true;build;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value" ImmutableTable out = null; - ImmutableTable.Builder in = (ImmutableTable.Builder)newWithTable_rowKeyDefault(source()); + ImmutableTable.Builder in = (ImmutableTable.Builder)ImmutableTable.builder().put(source(), null, null); out = in.build(); sink(getTable_rowKey(out)); // $ hasValueFlow } @@ -4491,21 +4491,21 @@ public class Test { { // "com.google.common.collect;ImmutableTable$Builder;true;put;(Cell);;MapValue of Argument[0];MapValue of Argument[-1];value" ImmutableTable.Builder out = null; - Table.Cell in = (Table.Cell)newWithMapValueDefault(source()); + Table.Cell in = (Table.Cell)newTableCell(null, null, source()); out.put(in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableTable$Builder;true;put;(Cell);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];value" ImmutableTable.Builder out = null; - Table.Cell in = (Table.Cell)newWithTable_columnKeyDefault(source()); + Table.Cell in = (Table.Cell)newTableCell(null, source(), null); out.put(in); sink(getTable_columnKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableTable$Builder;true;put;(Cell);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];value" ImmutableTable.Builder out = null; - Table.Cell in = (Table.Cell)newWithTable_rowKeyDefault(source()); + Table.Cell in = (Table.Cell)newTableCell(source(), null, null); out.put(in); sink(getTable_rowKey(out)); // $ hasValueFlow } @@ -4547,42 +4547,42 @@ public class Test { { // "com.google.common.collect;ImmutableTable$Builder;true;putAll;(Table);;MapValue of Argument[0];MapValue of Argument[-1];value" ImmutableTable.Builder out = null; - Table in = (Table)newWithMapValueDefault(source()); + Table in = (Table)ImmutableTable.of(null, null, source()); out.putAll(in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableTable$Builder;true;putAll;(Table);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];value" ImmutableTable.Builder out = null; - Table in = (Table)newWithTable_columnKeyDefault(source()); + Table in = (Table)ImmutableTable.of(null, source(), null); out.putAll(in); sink(getTable_columnKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableTable$Builder;true;putAll;(Table);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];value" ImmutableTable.Builder out = null; - Table in = (Table)newWithTable_rowKeyDefault(source()); + Table in = (Table)ImmutableTable.of(source(), null, null); out.putAll(in); sink(getTable_rowKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableTable;true;copyOf;(Table);;MapValue of Argument[0];MapValue of ReturnValue;value" ImmutableTable out = null; - Table in = (Table)newWithMapValueDefault(source()); + Table in = (Table)ImmutableTable.of(null, null, source()); out = ImmutableTable.copyOf(in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableTable;true;copyOf;(Table);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value" ImmutableTable out = null; - Table in = (Table)newWithTable_columnKeyDefault(source()); + Table in = (Table)ImmutableTable.of(null, source(), null); out = ImmutableTable.copyOf(in); sink(getTable_columnKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableTable;true;copyOf;(Table);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value" ImmutableTable out = null; - Table in = (Table)newWithTable_rowKeyDefault(source()); + Table in = (Table)ImmutableTable.of(source(), null, null); out = ImmutableTable.copyOf(in); sink(getTable_rowKey(out)); // $ hasValueFlow } @@ -7522,217 +7522,217 @@ public class Test { { // "com.google.common.collect;Table$Cell;true;getColumnKey;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];ReturnValue;value" Object out = null; - Table.Cell in = (Table.Cell)newWithTable_columnKeyDefault(source()); + Table.Cell in = (Table.Cell)newTableCell(null, source(), null); out = in.getColumnKey(); sink(out); // $ hasValueFlow } { // "com.google.common.collect;Table$Cell;true;getRowKey;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];ReturnValue;value" Object out = null; - Table.Cell in = (Table.Cell)newWithTable_rowKeyDefault(source()); + Table.Cell in = (Table.Cell)newTableCell(source(), null, null); out = in.getRowKey(); sink(out); // $ hasValueFlow } { // "com.google.common.collect;Table$Cell;true;getValue;();;MapValue of Argument[-1];ReturnValue;value" Object out = null; - Table.Cell in = (Table.Cell)newWithMapValueDefault(source()); + Table.Cell in = (Table.Cell)newTableCell(null, null, source()); out = in.getValue(); sink(out); // $ hasValueFlow } { // "com.google.common.collect;Table;true;cellSet;();;MapValue of Argument[-1];MapValue of Element of ReturnValue;value" Set out = null; - Table in = (Table)newWithMapValueDefault(source()); + Table in = (Table)newTable(null, null, source()); out = in.cellSet(); sink(getMapValueDefault(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;cellSet;();;MapValue of Argument[-1];MapValue of Element of ReturnValue;value" Set out = null; - ArrayTable in = (ArrayTable)newWithMapValueDefault(source()); + ArrayTable in = (ArrayTable)ArrayTable.create(ImmutableTable.of(null, null, source())); out = in.cellSet(); sink(getMapValueDefault(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;cellSet;();;MapValue of Argument[-1];MapValue of Element of ReturnValue;value" ImmutableSet out = null; - ImmutableTable in = (ImmutableTable)newWithMapValueDefault(source()); + ImmutableTable in = (ImmutableTable)ImmutableTable.of(null, null, source()); out = in.cellSet(); sink(getMapValueDefault(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;cellSet;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];SyntheticField[com.google.common.collect.Table.columnKey] of Element of ReturnValue;value" Set out = null; - Table in = (Table)newWithTable_columnKeyDefault(source()); + Table in = (Table)newTable(null, source(), null); out = in.cellSet(); sink(getTable_columnKeyDefault(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;cellSet;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];SyntheticField[com.google.common.collect.Table.columnKey] of Element of ReturnValue;value" Set out = null; - ArrayTable in = (ArrayTable)newWithTable_columnKeyDefault(source()); + ArrayTable in = (ArrayTable)ArrayTable.create(ImmutableTable.of(null, source(), null)); out = in.cellSet(); sink(getTable_columnKeyDefault(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;cellSet;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];SyntheticField[com.google.common.collect.Table.columnKey] of Element of ReturnValue;value" ImmutableSet out = null; - ImmutableTable in = (ImmutableTable)newWithTable_columnKeyDefault(source()); + ImmutableTable in = (ImmutableTable)ImmutableTable.of(null, source(), null); out = in.cellSet(); sink(getTable_columnKeyDefault(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;cellSet;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];SyntheticField[com.google.common.collect.Table.rowKey] of Element of ReturnValue;value" Set out = null; - Table in = (Table)newWithTable_rowKeyDefault(source()); + Table in = (Table)newTable(source(), null, null); out = in.cellSet(); sink(getTable_rowKeyDefault(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;cellSet;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];SyntheticField[com.google.common.collect.Table.rowKey] of Element of ReturnValue;value" Set out = null; - ArrayTable in = (ArrayTable)newWithTable_rowKeyDefault(source()); + ArrayTable in = (ArrayTable)ArrayTable.create(ImmutableTable.of(source(), null, null)); out = in.cellSet(); sink(getTable_rowKeyDefault(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;cellSet;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];SyntheticField[com.google.common.collect.Table.rowKey] of Element of ReturnValue;value" ImmutableSet out = null; - ImmutableTable in = (ImmutableTable)newWithTable_rowKeyDefault(source()); + ImmutableTable in = (ImmutableTable)ImmutableTable.of(source(), null, null); out = in.cellSet(); sink(getTable_rowKeyDefault(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;column;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" Map out = null; - Table in = (Table)newWithMapValueDefault(source()); + Table in = (Table)newTable(null, null, source()); out = in.column(null); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;column;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" Map out = null; - ArrayTable in = (ArrayTable)newWithMapValueDefault(source()); + ArrayTable in = (ArrayTable)ArrayTable.create(ImmutableTable.of(null, null, source())); out = in.column(null); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;column;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" ImmutableMap out = null; - ImmutableTable in = (ImmutableTable)newWithMapValueDefault(source()); + ImmutableTable in = (ImmutableTable)ImmutableTable.of(null, null, source()); out = in.column(null); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;column;(Object);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];MapKey of ReturnValue;value" Map out = null; - Table in = (Table)newWithTable_rowKeyDefault(source()); + Table in = (Table)newTable(source(), null, null); out = in.column(null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;column;(Object);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];MapKey of ReturnValue;value" Map out = null; - ArrayTable in = (ArrayTable)newWithTable_rowKeyDefault(source()); + ArrayTable in = (ArrayTable)ArrayTable.create(ImmutableTable.of(source(), null, null)); out = in.column(null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;column;(Object);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];MapKey of ReturnValue;value" ImmutableMap out = null; - ImmutableTable in = (ImmutableTable)newWithTable_rowKeyDefault(source()); + ImmutableTable in = (ImmutableTable)ImmutableTable.of(source(), null, null); out = in.column(null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;columnKeySet;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];Element of ReturnValue;value" Set out = null; - Table in = (Table)newWithTable_columnKeyDefault(source()); + Table in = (Table)newTable(null, source(), null); out = in.columnKeySet(); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;columnKeySet;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];Element of ReturnValue;value" ImmutableSet out = null; - ImmutableTable in = (ImmutableTable)newWithTable_columnKeyDefault(source()); + ImmutableTable in = (ImmutableTable)ImmutableTable.of(null, source(), null); out = in.columnKeySet(); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;columnKeySet;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];Element of ReturnValue;value" ImmutableSet out = null; - ArrayTable in = (ArrayTable)newWithTable_columnKeyDefault(source()); + ArrayTable in = (ArrayTable)ArrayTable.create(ImmutableTable.of(null, source(), null)); out = in.columnKeySet(); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;columnMap;();;MapValue of Argument[-1];MapValue of MapValue of ReturnValue;value" Map out = null; - Table in = (Table)newWithMapValueDefault(source()); + Table in = (Table)newTable(null, null, source()); out = in.columnMap(); sink(getMapValueDefault(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;columnMap;();;MapValue of Argument[-1];MapValue of MapValue of ReturnValue;value" Map out = null; - ArrayTable in = (ArrayTable)newWithMapValueDefault(source()); + ArrayTable in = (ArrayTable)ArrayTable.create(ImmutableTable.of(null, null, source())); out = in.columnMap(); sink(getMapValueDefault(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;columnMap;();;MapValue of Argument[-1];MapValue of MapValue of ReturnValue;value" ImmutableMap out = null; - ImmutableTable in = (ImmutableTable)newWithMapValueDefault(source()); + ImmutableTable in = (ImmutableTable)ImmutableTable.of(null, null, source()); out = in.columnMap(); sink(getMapValueDefault(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;columnMap;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];MapKey of ReturnValue;value" Map out = null; - Table in = (Table)newWithTable_columnKeyDefault(source()); + Table in = (Table)newTable(null, source(), null); out = in.columnMap(); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;columnMap;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];MapKey of ReturnValue;value" Map out = null; - ArrayTable in = (ArrayTable)newWithTable_columnKeyDefault(source()); + ArrayTable in = (ArrayTable)ArrayTable.create(ImmutableTable.of(null, source(), null)); out = in.columnMap(); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;columnMap;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];MapKey of ReturnValue;value" ImmutableMap out = null; - ImmutableTable in = (ImmutableTable)newWithTable_columnKeyDefault(source()); + ImmutableTable in = (ImmutableTable)ImmutableTable.of(null, source(), null); out = in.columnMap(); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;columnMap;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];MapKey of MapValue of ReturnValue;value" Map out = null; - Table in = (Table)newWithTable_rowKeyDefault(source()); + Table in = (Table)newTable(source(), null, null); out = in.columnMap(); sink(getMapKeyDefault(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;columnMap;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];MapKey of MapValue of ReturnValue;value" Map out = null; - ArrayTable in = (ArrayTable)newWithTable_rowKeyDefault(source()); + ArrayTable in = (ArrayTable)ArrayTable.create(ImmutableTable.of(source(), null, null)); out = in.columnMap(); sink(getMapKeyDefault(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;columnMap;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];MapKey of MapValue of ReturnValue;value" ImmutableMap out = null; - ImmutableTable in = (ImmutableTable)newWithTable_rowKeyDefault(source()); + ImmutableTable in = (ImmutableTable)ImmutableTable.of(source(), null, null); out = in.columnMap(); sink(getMapKeyDefault(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;get;(Object,Object);;MapValue of Argument[-1];ReturnValue;value" Object out = null; - Table in = (Table)newWithMapValueDefault(source()); + Table in = (Table)newTable(null, null, source()); out = in.get(null, null); sink(out); // $ hasValueFlow } @@ -7746,7 +7746,7 @@ public class Test { { // "com.google.common.collect;Table;true;get;(Object,Object);;MapValue of Argument[-1];ReturnValue;value" Object out = null; - ArrayTable in = (ArrayTable)newWithMapValueDefault(source()); + ArrayTable in = (ArrayTable)ArrayTable.create(ImmutableTable.of(null, null, source())); out = in.get(null, null); sink(out); // $ hasValueFlow } @@ -7816,77 +7816,77 @@ public class Test { { // "com.google.common.collect;Table;true;putAll;(Table);;MapValue of Argument[0];MapValue of Argument[-1];value" Table out = null; - Table in = (Table)newWithMapValueDefault(source()); + Table in = (Table)newTable(null, null, source()); out.putAll(in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;putAll;(Table);;MapValue of Argument[0];MapValue of Argument[-1];value" ImmutableTable out = null; - Table in = (Table)newWithMapValueDefault(source()); + Table in = (Table)ImmutableTable.of(null, null, source()); out.putAll(in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;putAll;(Table);;MapValue of Argument[0];MapValue of Argument[-1];value" ArrayTable out = null; - Table in = (Table)newWithMapValueDefault(source()); + Table in = (Table)ArrayTable.create(ImmutableTable.of(null, null, source())); out.putAll(in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;putAll;(Table);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];value" Table out = null; - Table in = (Table)newWithTable_columnKeyDefault(source()); + Table in = (Table)newTable(null, source(), null); out.putAll(in); sink(getTable_columnKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;putAll;(Table);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];value" ImmutableTable out = null; - Table in = (Table)newWithTable_columnKeyDefault(source()); + Table in = (Table)ImmutableTable.of(null, source(), null); out.putAll(in); sink(getTable_columnKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;putAll;(Table);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];value" ArrayTable out = null; - Table in = (Table)newWithTable_columnKeyDefault(source()); + Table in = (Table)ArrayTable.create(ImmutableTable.of(null, source(), null)); out.putAll(in); sink(getTable_columnKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;putAll;(Table);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];value" Table out = null; - Table in = (Table)newWithTable_rowKeyDefault(source()); + Table in = (Table)newTable(source(), null, null); out.putAll(in); sink(getTable_rowKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;putAll;(Table);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];value" ImmutableTable out = null; - Table in = (Table)newWithTable_rowKeyDefault(source()); + Table in = (Table)ImmutableTable.of(source(), null, null); out.putAll(in); sink(getTable_rowKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;putAll;(Table);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];value" ArrayTable out = null; - Table in = (Table)newWithTable_rowKeyDefault(source()); + Table in = (Table)ArrayTable.create(ImmutableTable.of(source(), null, null)); out.putAll(in); sink(getTable_rowKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;remove;(Object,Object);;MapValue of Argument[-1];ReturnValue;value" Object out = null; - Table in = (Table)newWithMapValueDefault(source()); + Table in = (Table)newTable(null, null, source()); out = in.remove(null, null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;Table;true;remove;(Object,Object);;MapValue of Argument[-1];ReturnValue;value" Object out = null; - ImmutableTable in = (ImmutableTable)newWithMapValueDefault(source()); + ImmutableTable in = (ImmutableTable)ImmutableTable.of(null, null, source()); out = in.remove(null, null); sink(out); // $ hasValueFlow } @@ -7900,224 +7900,224 @@ public class Test { { // "com.google.common.collect;Table;true;remove;(Object,Object);;MapValue of Argument[-1];ReturnValue;value" Object out = null; - ArrayTable in = (ArrayTable)newWithMapValueDefault(source()); + ArrayTable in = (ArrayTable)ArrayTable.create(ImmutableTable.of(null, null, source())); out = in.remove(null, null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;Table;true;row;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" SortedMap out = null; - TreeBasedTable in = (TreeBasedTable)newWithMapValueDefault(source()); + TreeBasedTable in = (TreeBasedTable)newTable(null, null, source()); out = in.row(null); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;row;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" Map out = null; - Table in = (Table)newWithMapValueDefault(source()); + Table in = (Table)newTable(null, null, source()); out = in.row(null); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;row;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" Map out = null; - ArrayTable in = (ArrayTable)newWithMapValueDefault(source()); + ArrayTable in = (ArrayTable)ArrayTable.create(ImmutableTable.of(null, null, source())); out = in.row(null); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;row;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" ImmutableMap out = null; - ImmutableTable in = (ImmutableTable)newWithMapValueDefault(source()); + ImmutableTable in = (ImmutableTable)ImmutableTable.of(null, null, source()); out = in.row(null); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;row;(Object);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];MapKey of ReturnValue;value" SortedMap out = null; - TreeBasedTable in = (TreeBasedTable)newWithTable_columnKeyDefault(source()); + TreeBasedTable in = (TreeBasedTable)newTable(null, source(), null); out = in.row(null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;row;(Object);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];MapKey of ReturnValue;value" Map out = null; - Table in = (Table)newWithTable_columnKeyDefault(source()); + Table in = (Table)newTable(null, source(), null); out = in.row(null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;row;(Object);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];MapKey of ReturnValue;value" Map out = null; - ArrayTable in = (ArrayTable)newWithTable_columnKeyDefault(source()); + ArrayTable in = (ArrayTable)ArrayTable.create(ImmutableTable.of(null, source(), null)); out = in.row(null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;row;(Object);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];MapKey of ReturnValue;value" ImmutableMap out = null; - ImmutableTable in = (ImmutableTable)newWithTable_columnKeyDefault(source()); + ImmutableTable in = (ImmutableTable)ImmutableTable.of(null, source(), null); out = in.row(null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;rowKeySet;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];Element of ReturnValue;value" SortedSet out = null; - TreeBasedTable in = (TreeBasedTable)newWithTable_rowKeyDefault(source()); + TreeBasedTable in = (TreeBasedTable)newTable(source(), null, null); out = in.rowKeySet(); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;rowKeySet;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];Element of ReturnValue;value" SortedSet out = null; - RowSortedTable in = (RowSortedTable)newWithTable_rowKeyDefault(source()); + RowSortedTable in = (RowSortedTable)newTable(source(), null, null); out = in.rowKeySet(); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;rowKeySet;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];Element of ReturnValue;value" Set out = null; - Table in = (Table)newWithTable_rowKeyDefault(source()); + Table in = (Table)newTable(source(), null, null); out = in.rowKeySet(); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;rowKeySet;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];Element of ReturnValue;value" ImmutableSet out = null; - ImmutableTable in = (ImmutableTable)newWithTable_rowKeyDefault(source()); + ImmutableTable in = (ImmutableTable)ImmutableTable.of(source(), null, null); out = in.rowKeySet(); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;rowKeySet;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];Element of ReturnValue;value" ImmutableSet out = null; - ArrayTable in = (ArrayTable)newWithTable_rowKeyDefault(source()); + ArrayTable in = (ArrayTable)ArrayTable.create(ImmutableTable.of(source(), null, null)); out = in.rowKeySet(); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;rowMap;();;MapValue of Argument[-1];MapValue of MapValue of ReturnValue;value" SortedMap out = null; - TreeBasedTable in = (TreeBasedTable)newWithMapValueDefault(source()); + TreeBasedTable in = (TreeBasedTable)newTable(null, null, source()); out = in.rowMap(); sink(getMapValueDefault(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;rowMap;();;MapValue of Argument[-1];MapValue of MapValue of ReturnValue;value" SortedMap out = null; - RowSortedTable in = (RowSortedTable)newWithMapValueDefault(source()); + RowSortedTable in = (RowSortedTable)newTable(null, null, source()); out = in.rowMap(); sink(getMapValueDefault(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;rowMap;();;MapValue of Argument[-1];MapValue of MapValue of ReturnValue;value" Map out = null; - Table in = (Table)newWithMapValueDefault(source()); + Table in = (Table)newTable(null, null, source()); out = in.rowMap(); sink(getMapValueDefault(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;rowMap;();;MapValue of Argument[-1];MapValue of MapValue of ReturnValue;value" Map out = null; - ArrayTable in = (ArrayTable)newWithMapValueDefault(source()); + ArrayTable in = (ArrayTable)ArrayTable.create(ImmutableTable.of(null, null, source())); out = in.rowMap(); sink(getMapValueDefault(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;rowMap;();;MapValue of Argument[-1];MapValue of MapValue of ReturnValue;value" ImmutableMap out = null; - ImmutableTable in = (ImmutableTable)newWithMapValueDefault(source()); + ImmutableTable in = (ImmutableTable)ImmutableTable.of(null, null, source()); out = in.rowMap(); sink(getMapValueDefault(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;rowMap;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];MapKey of MapValue of ReturnValue;value" SortedMap out = null; - TreeBasedTable in = (TreeBasedTable)newWithTable_columnKeyDefault(source()); + TreeBasedTable in = (TreeBasedTable)newTable(null, source(), null); out = in.rowMap(); sink(getMapKeyDefault(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;rowMap;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];MapKey of MapValue of ReturnValue;value" SortedMap out = null; - RowSortedTable in = (RowSortedTable)newWithTable_columnKeyDefault(source()); + RowSortedTable in = (RowSortedTable)newTable(null, source(), null); out = in.rowMap(); sink(getMapKeyDefault(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;rowMap;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];MapKey of MapValue of ReturnValue;value" Map out = null; - Table in = (Table)newWithTable_columnKeyDefault(source()); + Table in = (Table)newTable(null, source(), null); out = in.rowMap(); sink(getMapKeyDefault(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;rowMap;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];MapKey of MapValue of ReturnValue;value" Map out = null; - ArrayTable in = (ArrayTable)newWithTable_columnKeyDefault(source()); + ArrayTable in = (ArrayTable)ArrayTable.create(ImmutableTable.of(null, source(), null)); out = in.rowMap(); sink(getMapKeyDefault(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;rowMap;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];MapKey of MapValue of ReturnValue;value" ImmutableMap out = null; - ImmutableTable in = (ImmutableTable)newWithTable_columnKeyDefault(source()); + ImmutableTable in = (ImmutableTable)ImmutableTable.of(null, source(), null); out = in.rowMap(); sink(getMapKeyDefault(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;rowMap;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];MapKey of ReturnValue;value" SortedMap out = null; - TreeBasedTable in = (TreeBasedTable)newWithTable_rowKeyDefault(source()); + TreeBasedTable in = (TreeBasedTable)newTable(source(), null, null); out = in.rowMap(); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;rowMap;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];MapKey of ReturnValue;value" SortedMap out = null; - RowSortedTable in = (RowSortedTable)newWithTable_rowKeyDefault(source()); + RowSortedTable in = (RowSortedTable)newTable(source(), null, null); out = in.rowMap(); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;rowMap;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];MapKey of ReturnValue;value" Map out = null; - Table in = (Table)newWithTable_rowKeyDefault(source()); + Table in = (Table)newTable(source(), null, null); out = in.rowMap(); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;rowMap;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];MapKey of ReturnValue;value" Map out = null; - ArrayTable in = (ArrayTable)newWithTable_rowKeyDefault(source()); + ArrayTable in = (ArrayTable)ArrayTable.create(ImmutableTable.of(source(), null, null)); out = in.rowMap(); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;rowMap;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];MapKey of ReturnValue;value" ImmutableMap out = null; - ImmutableTable in = (ImmutableTable)newWithTable_rowKeyDefault(source()); + ImmutableTable in = (ImmutableTable)ImmutableTable.of(source(), null, null); out = in.rowMap(); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;values;();;MapValue of Argument[-1];Element of ReturnValue;value" ImmutableCollection out = null; - ImmutableTable in = (ImmutableTable)newWithMapValueDefault(source()); + ImmutableTable in = (ImmutableTable)ImmutableTable.of(null, null, source()); out = in.values(); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;values;();;MapValue of Argument[-1];Element of ReturnValue;value" Collection out = null; - Table in = (Table)newWithMapValueDefault(source()); + Table in = (Table)newTable(null, null, source()); out = in.values(); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Table;true;values;();;MapValue of Argument[-1];Element of ReturnValue;value" Collection out = null; - ArrayTable in = (ArrayTable)newWithMapValueDefault(source()); + ArrayTable in = (ArrayTable)ArrayTable.create(ImmutableTable.of(null, null, source())); out = in.values(); sink(getElement(out)); // $ hasValueFlow } @@ -8166,119 +8166,119 @@ public class Test { { // "com.google.common.collect;Tables;false;synchronizedTable;(Table);;MapValue of Argument[0];MapValue of ReturnValue;value" Table out = null; - Table in = (Table)newWithMapValueDefault(source()); + Table in = (Table)newTable(null, null, source()); out = Tables.synchronizedTable(in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Tables;false;synchronizedTable;(Table);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value" Table out = null; - Table in = (Table)newWithTable_columnKeyDefault(source()); + Table in = (Table)newTable(null, source(), null); out = Tables.synchronizedTable(in); sink(getTable_columnKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Tables;false;synchronizedTable;(Table);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value" Table out = null; - Table in = (Table)newWithTable_rowKeyDefault(source()); + Table in = (Table)newTable(source(), null, null); out = Tables.synchronizedTable(in); sink(getTable_rowKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Tables;false;transformValues;(Table,Function);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value" Table out = null; - Table in = (Table)newWithTable_columnKeyDefault(source()); + Table in = (Table)newTable(null, source(), null); out = Tables.transformValues(in, null); sink(getTable_columnKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Tables;false;transformValues;(Table,Function);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value" Table out = null; - Table in = (Table)newWithTable_rowKeyDefault(source()); + Table in = (Table)newTable(source(), null, null); out = Tables.transformValues(in, null); sink(getTable_rowKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Tables;false;transpose;(Table);;MapValue of Argument[0];MapValue of ReturnValue;value" Table out = null; - Table in = (Table)newWithMapValueDefault(source()); + Table in = (Table)newTable(null, null, source()); out = Tables.transpose(in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Tables;false;transpose;(Table);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value" Table out = null; - Table in = (Table)newWithTable_columnKeyDefault(source()); + Table in = (Table)newTable(null, source(), null); out = Tables.transpose(in); sink(getTable_rowKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Tables;false;transpose;(Table);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value" Table out = null; - Table in = (Table)newWithTable_rowKeyDefault(source()); + Table in = (Table)newTable(source(), null, null); out = Tables.transpose(in); sink(getTable_columnKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Tables;false;unmodifiableRowSortedTable;(RowSortedTable);;MapValue of Argument[0];MapValue of ReturnValue;value" RowSortedTable out = null; - RowSortedTable in = (RowSortedTable)newWithMapValueDefault(source()); + RowSortedTable in = (RowSortedTable)newTable(null, null, source()); out = Tables.unmodifiableRowSortedTable(in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Tables;false;unmodifiableRowSortedTable;(RowSortedTable);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value" RowSortedTable out = null; - RowSortedTable in = (RowSortedTable)newWithTable_columnKeyDefault(source()); + RowSortedTable in = (RowSortedTable)newTable(null, source(), null); out = Tables.unmodifiableRowSortedTable(in); sink(getTable_columnKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Tables;false;unmodifiableRowSortedTable;(RowSortedTable);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value" RowSortedTable out = null; - RowSortedTable in = (RowSortedTable)newWithTable_rowKeyDefault(source()); + RowSortedTable in = (RowSortedTable)newTable(source(), null, null); out = Tables.unmodifiableRowSortedTable(in); sink(getTable_rowKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Tables;false;unmodifiableTable;(Table);;MapValue of Argument[0];MapValue of ReturnValue;value" Table out = null; - Table in = (Table)newWithMapValueDefault(source()); + Table in = (Table)newTable(null, null, source()); out = Tables.unmodifiableTable(in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;Tables;false;unmodifiableTable;(Table);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value" Table out = null; - Table in = (Table)newWithTable_columnKeyDefault(source()); + Table in = (Table)newTable(null, source(), null); out = Tables.unmodifiableTable(in); sink(getTable_columnKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Tables;false;unmodifiableTable;(Table);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value" Table out = null; - Table in = (Table)newWithTable_rowKeyDefault(source()); + Table in = (Table)newTable(source(), null, null); out = Tables.unmodifiableTable(in); sink(getTable_rowKey(out)); // $ hasValueFlow } { // "com.google.common.collect;TreeBasedTable;true;create;(TreeBasedTable);;MapValue of Argument[0];MapValue of ReturnValue;value" TreeBasedTable out = null; - TreeBasedTable in = (TreeBasedTable)newWithMapValueDefault(source()); + TreeBasedTable in = (TreeBasedTable)newTable(null, null, source()); out = TreeBasedTable.create(in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;TreeBasedTable;true;create;(TreeBasedTable);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value" TreeBasedTable out = null; - TreeBasedTable in = (TreeBasedTable)newWithTable_columnKeyDefault(source()); + TreeBasedTable in = (TreeBasedTable)newTable(null, source(), null); out = TreeBasedTable.create(in); sink(getTable_columnKey(out)); // $ hasValueFlow } { // "com.google.common.collect;TreeBasedTable;true;create;(TreeBasedTable);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value" TreeBasedTable out = null; - TreeBasedTable in = (TreeBasedTable)newWithTable_rowKeyDefault(source()); + TreeBasedTable in = (TreeBasedTable)newTable(source(), null, null); out = TreeBasedTable.create(in); sink(getTable_rowKey(out)); // $ hasValueFlow } diff --git a/java/ql/test/library-tests/frameworks/guava/generated/collect/test.ql b/java/ql/test/library-tests/frameworks/guava/generated/collect/test.ql index 557255d443f..2849d8bd3be 100644 --- a/java/ql/test/library-tests/frameworks/guava/generated/collect/test.ql +++ b/java/ql/test/library-tests/frameworks/guava/generated/collect/test.ql @@ -12,9 +12,7 @@ class SummaryModelTest extends SummaryModelCsv { "generatedtest;Test;false;getMapKeyDefault;(Object);;MapKey of Argument[0];ReturnValue;value", "generatedtest;Test;false;newWithMapValueDefault;(Object);;Argument[0];MapValue of ReturnValue;value", "generatedtest;Test;false;getMapValueDefault;(Object);;MapValue of Argument[0];ReturnValue;value", - "generatedtest;Test;false;newWithTable_rowKeyDefault;(Object);;Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value", "generatedtest;Test;false;getTable_rowKeyDefault;(Object);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];ReturnValue;value", - "generatedtest;Test;false;newWithTable_columnKeyDefault;(Object);;Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value", "generatedtest;Test;false;getTable_columnKeyDefault;(Object);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];ReturnValue;value", "generatedtest;Test;false;newWithMapDifference_leftDefault;(Object);;Argument[0];SyntheticField[com.google.common.collect.MapDifference.left] of ReturnValue;value", "generatedtest;Test;false;getMapDifference_leftDefault;(Object);;SyntheticField[com.google.common.collect.MapDifference.left] of Argument[0];ReturnValue;value", From 25d6e00b1a5176be186b0dafea96f1ad96676444 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Tue, 21 Sep 2021 16:22:24 +0100 Subject: [PATCH 533/741] Implement gen methods for MapDifference --- .../guava/generated/collect/Test.java | 55 +++++++++---------- .../guava/generated/collect/test.ql | 2 - 2 files changed, 27 insertions(+), 30 deletions(-) diff --git a/java/ql/test/library-tests/frameworks/guava/generated/collect/Test.java b/java/ql/test/library-tests/frameworks/guava/generated/collect/Test.java index acfe5489308..f3f3ab3d3a3 100644 --- a/java/ql/test/library-tests/frameworks/guava/generated/collect/Test.java +++ b/java/ql/test/library-tests/frameworks/guava/generated/collect/Test.java @@ -111,6 +111,7 @@ public class Test { T getElement(Iterator it) { return it.next(); } T getElement(Optional o) { return o.get(); } Map.Entry newEntryWithMapValue(V value) { return Map.of(null, value).entrySet().iterator().next(); } + MapDifference.ValueDifference newMapValueDifference(V l, V r) { return Maps.difference(Map.of(null, l), Map.of(null, r)).entriesDiffering().get(null); } V getMapValue(ImmutableMap.Builder b) { return getMapValue(b.build()); } V getMapValue(ImmutableMultimap.Builder b) { return getMapValue(b.build()); } V getMapValue(ImmutableTable.Builder b) { return getMapValue(b.build()); } @@ -125,8 +126,6 @@ public class Test { Object getTable_columnKeyDefault(Object container) { return null; } Object getTable_rowKeyDefault(Object container) { return null; } Object newWithElementDefault(Object element) { return null; } - Object newWithMapDifference_leftDefault(Object element) { return null; } - Object newWithMapDifference_rightDefault(Object element) { return null; } Object newWithMapKeyDefault(Object element) { return null; } Object newWithMapValueDefault(Object element) { return null; } Object source() { return null; } @@ -5345,182 +5344,182 @@ public class Test { { // "com.google.common.collect;MapDifference$ValueDifference;true;leftValue;();;SyntheticField[com.google.common.collect.MapDifference.left] of Argument[-1];ReturnValue;value" Object out = null; - MapDifference.ValueDifference in = (MapDifference.ValueDifference)newWithMapDifference_leftDefault(source()); + MapDifference.ValueDifference in = (MapDifference.ValueDifference)newMapValueDifference(source(), null); out = in.leftValue(); sink(out); // $ hasValueFlow } { // "com.google.common.collect;MapDifference$ValueDifference;true;rightValue;();;SyntheticField[com.google.common.collect.MapDifference.right] of Argument[-1];ReturnValue;value" Object out = null; - MapDifference.ValueDifference in = (MapDifference.ValueDifference)newWithMapDifference_rightDefault(source()); + MapDifference.ValueDifference in = (MapDifference.ValueDifference)newMapValueDifference(null, source()); out = in.rightValue(); sink(out); // $ hasValueFlow } { // "com.google.common.collect;MapDifference;true;entriesDiffering;();;MapKey of SyntheticField[com.google.common.collect.MapDifference.left] of Argument[-1];MapKey of ReturnValue;value" SortedMap out = null; - SortedMapDifference in = (SortedMapDifference)newWithMapDifference_leftDefault(newWithMapKeyDefault(source())); + SortedMapDifference in = (SortedMapDifference)Maps.difference((SortedMap)newWithMapKeyDefault(source()), null); out = in.entriesDiffering(); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;MapDifference;true;entriesDiffering;();;MapKey of SyntheticField[com.google.common.collect.MapDifference.left] of Argument[-1];MapKey of ReturnValue;value" Map out = null; - MapDifference in = (MapDifference)newWithMapDifference_leftDefault(newWithMapKeyDefault(source())); + MapDifference in = (MapDifference)Maps.difference((Map)newWithMapKeyDefault(source()), null); out = in.entriesDiffering(); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;MapDifference;true;entriesDiffering;();;MapKey of SyntheticField[com.google.common.collect.MapDifference.right] of Argument[-1];MapKey of ReturnValue;value" SortedMap out = null; - SortedMapDifference in = (SortedMapDifference)newWithMapDifference_rightDefault(newWithMapKeyDefault(source())); + SortedMapDifference in = (SortedMapDifference)Maps.difference(null, (SortedMap)newWithMapKeyDefault(source())); out = in.entriesDiffering(); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;MapDifference;true;entriesDiffering;();;MapKey of SyntheticField[com.google.common.collect.MapDifference.right] of Argument[-1];MapKey of ReturnValue;value" Map out = null; - MapDifference in = (MapDifference)newWithMapDifference_rightDefault(newWithMapKeyDefault(source())); + MapDifference in = (MapDifference)Maps.difference(null, (Map)newWithMapKeyDefault(source())); out = in.entriesDiffering(); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;MapDifference;true;entriesDiffering;();;MapValue of SyntheticField[com.google.common.collect.MapDifference.left] of Argument[-1];SyntheticField[com.google.common.collect.MapDifference.left] of MapValue of ReturnValue;value" SortedMap out = null; - SortedMapDifference in = (SortedMapDifference)newWithMapDifference_leftDefault(newWithMapValueDefault(source())); + SortedMapDifference in = (SortedMapDifference)Maps.difference((SortedMap)newWithMapValueDefault(source()), null); out = in.entriesDiffering(); sink(getMapDifference_leftDefault(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;MapDifference;true;entriesDiffering;();;MapValue of SyntheticField[com.google.common.collect.MapDifference.left] of Argument[-1];SyntheticField[com.google.common.collect.MapDifference.left] of MapValue of ReturnValue;value" Map out = null; - MapDifference in = (MapDifference)newWithMapDifference_leftDefault(newWithMapValueDefault(source())); + MapDifference in = (MapDifference)Maps.difference((Map)newWithMapValueDefault(source()), null); out = in.entriesDiffering(); sink(getMapDifference_leftDefault(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;MapDifference;true;entriesDiffering;();;MapValue of SyntheticField[com.google.common.collect.MapDifference.right] of Argument[-1];SyntheticField[com.google.common.collect.MapDifference.right] of MapValue of ReturnValue;value" SortedMap out = null; - SortedMapDifference in = (SortedMapDifference)newWithMapDifference_rightDefault(newWithMapValueDefault(source())); + SortedMapDifference in = (SortedMapDifference)Maps.difference(null, (SortedMap)newWithMapValueDefault(source())); out = in.entriesDiffering(); sink(getMapDifference_rightDefault(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;MapDifference;true;entriesDiffering;();;MapValue of SyntheticField[com.google.common.collect.MapDifference.right] of Argument[-1];SyntheticField[com.google.common.collect.MapDifference.right] of MapValue of ReturnValue;value" Map out = null; - MapDifference in = (MapDifference)newWithMapDifference_rightDefault(newWithMapValueDefault(source())); + MapDifference in = (MapDifference)Maps.difference(null, (Map)newWithMapValueDefault(source())); out = in.entriesDiffering(); sink(getMapDifference_rightDefault(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;MapDifference;true;entriesInCommon;();;MapKey of SyntheticField[com.google.common.collect.MapDifference.left] of Argument[-1];MapKey of ReturnValue;value" SortedMap out = null; - SortedMapDifference in = (SortedMapDifference)newWithMapDifference_leftDefault(newWithMapKeyDefault(source())); + SortedMapDifference in = (SortedMapDifference)Maps.difference((SortedMap)newWithMapKeyDefault(source()), null); out = in.entriesInCommon(); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;MapDifference;true;entriesInCommon;();;MapKey of SyntheticField[com.google.common.collect.MapDifference.left] of Argument[-1];MapKey of ReturnValue;value" Map out = null; - MapDifference in = (MapDifference)newWithMapDifference_leftDefault(newWithMapKeyDefault(source())); + MapDifference in = (MapDifference)Maps.difference((Map)newWithMapKeyDefault(source()), null); out = in.entriesInCommon(); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;MapDifference;true;entriesInCommon;();;MapKey of SyntheticField[com.google.common.collect.MapDifference.right] of Argument[-1];MapKey of ReturnValue;value" SortedMap out = null; - SortedMapDifference in = (SortedMapDifference)newWithMapDifference_rightDefault(newWithMapKeyDefault(source())); + SortedMapDifference in = (SortedMapDifference)Maps.difference(null, (SortedMap)newWithMapKeyDefault(source())); out = in.entriesInCommon(); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;MapDifference;true;entriesInCommon;();;MapKey of SyntheticField[com.google.common.collect.MapDifference.right] of Argument[-1];MapKey of ReturnValue;value" Map out = null; - MapDifference in = (MapDifference)newWithMapDifference_rightDefault(newWithMapKeyDefault(source())); + MapDifference in = (MapDifference)Maps.difference(null, (Map)newWithMapKeyDefault(source())); out = in.entriesInCommon(); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;MapDifference;true;entriesInCommon;();;MapValue of SyntheticField[com.google.common.collect.MapDifference.left] of Argument[-1];MapValue of ReturnValue;value" SortedMap out = null; - SortedMapDifference in = (SortedMapDifference)newWithMapDifference_leftDefault(newWithMapValueDefault(source())); + SortedMapDifference in = (SortedMapDifference)Maps.difference((SortedMap)newWithMapValueDefault(source()), null); out = in.entriesInCommon(); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;MapDifference;true;entriesInCommon;();;MapValue of SyntheticField[com.google.common.collect.MapDifference.left] of Argument[-1];MapValue of ReturnValue;value" Map out = null; - MapDifference in = (MapDifference)newWithMapDifference_leftDefault(newWithMapValueDefault(source())); + MapDifference in = (MapDifference)Maps.difference((Map)newWithMapValueDefault(source()), null); out = in.entriesInCommon(); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;MapDifference;true;entriesInCommon;();;MapValue of SyntheticField[com.google.common.collect.MapDifference.right] of Argument[-1];MapValue of ReturnValue;value" SortedMap out = null; - SortedMapDifference in = (SortedMapDifference)newWithMapDifference_rightDefault(newWithMapValueDefault(source())); + SortedMapDifference in = (SortedMapDifference)Maps.difference(null, (SortedMap)newWithMapValueDefault(source())); out = in.entriesInCommon(); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;MapDifference;true;entriesInCommon;();;MapValue of SyntheticField[com.google.common.collect.MapDifference.right] of Argument[-1];MapValue of ReturnValue;value" Map out = null; - MapDifference in = (MapDifference)newWithMapDifference_rightDefault(newWithMapValueDefault(source())); + MapDifference in = (MapDifference)Maps.difference(null, (Map)newWithMapValueDefault(source())); out = in.entriesInCommon(); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;MapDifference;true;entriesOnlyOnLeft;();;MapKey of SyntheticField[com.google.common.collect.MapDifference.left] of Argument[-1];MapKey of ReturnValue;value" SortedMap out = null; - SortedMapDifference in = (SortedMapDifference)newWithMapDifference_leftDefault(newWithMapKeyDefault(source())); + SortedMapDifference in = (SortedMapDifference)Maps.difference((SortedMap)newWithMapKeyDefault(source()), null); out = in.entriesOnlyOnLeft(); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;MapDifference;true;entriesOnlyOnLeft;();;MapKey of SyntheticField[com.google.common.collect.MapDifference.left] of Argument[-1];MapKey of ReturnValue;value" Map out = null; - MapDifference in = (MapDifference)newWithMapDifference_leftDefault(newWithMapKeyDefault(source())); + MapDifference in = (MapDifference)Maps.difference((Map)newWithMapKeyDefault(source()), null); out = in.entriesOnlyOnLeft(); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;MapDifference;true;entriesOnlyOnLeft;();;MapValue of SyntheticField[com.google.common.collect.MapDifference.left] of Argument[-1];MapValue of ReturnValue;value" SortedMap out = null; - SortedMapDifference in = (SortedMapDifference)newWithMapDifference_leftDefault(newWithMapValueDefault(source())); + SortedMapDifference in = (SortedMapDifference)Maps.difference((SortedMap)newWithMapValueDefault(source()), null); out = in.entriesOnlyOnLeft(); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;MapDifference;true;entriesOnlyOnLeft;();;MapValue of SyntheticField[com.google.common.collect.MapDifference.left] of Argument[-1];MapValue of ReturnValue;value" Map out = null; - MapDifference in = (MapDifference)newWithMapDifference_leftDefault(newWithMapValueDefault(source())); + MapDifference in = (MapDifference)Maps.difference((Map)newWithMapValueDefault(source()), null); out = in.entriesOnlyOnLeft(); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;MapDifference;true;entriesOnlyOnRight;();;MapKey of SyntheticField[com.google.common.collect.MapDifference.right] of Argument[-1];MapKey of ReturnValue;value" SortedMap out = null; - SortedMapDifference in = (SortedMapDifference)newWithMapDifference_rightDefault(newWithMapKeyDefault(source())); + SortedMapDifference in = (SortedMapDifference)Maps.difference(null, (SortedMap)newWithMapKeyDefault(source())); out = in.entriesOnlyOnRight(); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;MapDifference;true;entriesOnlyOnRight;();;MapKey of SyntheticField[com.google.common.collect.MapDifference.right] of Argument[-1];MapKey of ReturnValue;value" Map out = null; - MapDifference in = (MapDifference)newWithMapDifference_rightDefault(newWithMapKeyDefault(source())); + MapDifference in = (MapDifference)Maps.difference(null, (Map)newWithMapKeyDefault(source())); out = in.entriesOnlyOnRight(); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;MapDifference;true;entriesOnlyOnRight;();;MapValue of SyntheticField[com.google.common.collect.MapDifference.right] of Argument[-1];MapValue of ReturnValue;value" SortedMap out = null; - SortedMapDifference in = (SortedMapDifference)newWithMapDifference_rightDefault(newWithMapValueDefault(source())); + SortedMapDifference in = (SortedMapDifference)Maps.difference(null, (SortedMap)newWithMapValueDefault(source())); out = in.entriesOnlyOnRight(); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;MapDifference;true;entriesOnlyOnRight;();;MapValue of SyntheticField[com.google.common.collect.MapDifference.right] of Argument[-1];MapValue of ReturnValue;value" Map out = null; - MapDifference in = (MapDifference)newWithMapDifference_rightDefault(newWithMapValueDefault(source())); + MapDifference in = (MapDifference)Maps.difference(null, (Map)newWithMapValueDefault(source())); out = in.entriesOnlyOnRight(); sink(getMapValue(out)); // $ hasValueFlow } diff --git a/java/ql/test/library-tests/frameworks/guava/generated/collect/test.ql b/java/ql/test/library-tests/frameworks/guava/generated/collect/test.ql index 2849d8bd3be..2d97fdf73d9 100644 --- a/java/ql/test/library-tests/frameworks/guava/generated/collect/test.ql +++ b/java/ql/test/library-tests/frameworks/guava/generated/collect/test.ql @@ -14,9 +14,7 @@ class SummaryModelTest extends SummaryModelCsv { "generatedtest;Test;false;getMapValueDefault;(Object);;MapValue of Argument[0];ReturnValue;value", "generatedtest;Test;false;getTable_rowKeyDefault;(Object);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];ReturnValue;value", "generatedtest;Test;false;getTable_columnKeyDefault;(Object);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];ReturnValue;value", - "generatedtest;Test;false;newWithMapDifference_leftDefault;(Object);;Argument[0];SyntheticField[com.google.common.collect.MapDifference.left] of ReturnValue;value", "generatedtest;Test;false;getMapDifference_leftDefault;(Object);;SyntheticField[com.google.common.collect.MapDifference.left] of Argument[0];ReturnValue;value", - "generatedtest;Test;false;newWithMapDifference_rightDefault;(Object);;Argument[0];SyntheticField[com.google.common.collect.MapDifference.right] of ReturnValue;value", "generatedtest;Test;false;getMapDifference_rightDefault;(Object);;SyntheticField[com.google.common.collect.MapDifference.right] of Argument[0];ReturnValue;value" ] } From 6e9bee1be70216a569524c37e52ba903bd032b5e Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Tue, 21 Sep 2021 16:32:49 +0100 Subject: [PATCH 534/741] Add missing models --- .../java/frameworks/guava/Collections.qll | 3 + .../guava/generated/collect/Methods.java | 132 ------------------ .../guava/generated/collect/Test.java | 21 +++ 3 files changed, 24 insertions(+), 132 deletions(-) delete mode 100644 java/ql/test/library-tests/frameworks/guava/generated/collect/Methods.java diff --git a/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll b/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll index 7e03acac67f..a2a0ac8293c 100644 --- a/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll +++ b/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll @@ -290,6 +290,9 @@ private class GuavaCollectCsv extends SummaryModelCsv { "com.google.common.collect;TreeBasedTable;true;create;(TreeBasedTable);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value", "com.google.common.collect;TreeBasedTable;true;create;(TreeBasedTable);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value", "com.google.common.collect;TreeBasedTable;true;create;(TreeBasedTable);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;ArrayTable;true;create;(Table);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value", + "com.google.common.collect;ArrayTable;true;create;(Table);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value", + "com.google.common.collect;ArrayTable;true;create;(Table);;MapValue of Argument[0];MapValue of ReturnValue;value", "com.google.common.collect;ArrayTable;true;create;(Iterable,Iterable);;Element of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value", "com.google.common.collect;ArrayTable;true;create;(Iterable,Iterable);;Element of Argument[1];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value", // Utility classes (a few methods depending on lambda flow are not included) diff --git a/java/ql/test/library-tests/frameworks/guava/generated/collect/Methods.java b/java/ql/test/library-tests/frameworks/guava/generated/collect/Methods.java deleted file mode 100644 index 22e05943176..00000000000 --- a/java/ql/test/library-tests/frameworks/guava/generated/collect/Methods.java +++ /dev/null @@ -1,132 +0,0 @@ -package generatedtest; - -import com.google.common.base.Function; -import com.google.common.base.Optional; -import com.google.common.base.Predicate; -import com.google.common.collect.ArrayListMultimap; -import com.google.common.collect.ArrayTable; -import com.google.common.collect.BiMap; -import com.google.common.collect.ClassToInstanceMap; -import com.google.common.collect.Collections2; -import com.google.common.collect.ConcurrentHashMultiset; -import com.google.common.collect.HashBasedTable; -import com.google.common.collect.HashBiMap; -import com.google.common.collect.HashMultimap; -import com.google.common.collect.HashMultiset; -import com.google.common.collect.ImmutableClassToInstanceMap; -import com.google.common.collect.ImmutableCollection; -import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableListMultimap; -import com.google.common.collect.ImmutableMap; -import com.google.common.collect.ImmutableMultimap; -import com.google.common.collect.ImmutableMultiset; -import com.google.common.collect.ImmutableSet; -import com.google.common.collect.ImmutableSetMultimap; -import com.google.common.collect.ImmutableSortedMap; -import com.google.common.collect.ImmutableSortedMultiset; -import com.google.common.collect.ImmutableSortedSet; -import com.google.common.collect.ImmutableTable; -import com.google.common.collect.Iterables; -import com.google.common.collect.Iterators; -import com.google.common.collect.LinkedHashMultimap; -import com.google.common.collect.LinkedHashMultiset; -import com.google.common.collect.LinkedListMultimap; -import com.google.common.collect.ListMultimap; -import com.google.common.collect.Lists; -import com.google.common.collect.MapDifference; -import com.google.common.collect.Maps; -import com.google.common.collect.Multimap; -import com.google.common.collect.Multimaps; -import com.google.common.collect.Multiset; -import com.google.common.collect.Multisets; -import com.google.common.collect.MutableClassToInstanceMap; -import com.google.common.collect.ObjectArrays; -import com.google.common.collect.PeekingIterator; -import com.google.common.collect.Queues; -import com.google.common.collect.RowSortedTable; -import com.google.common.collect.SetMultimap; -import com.google.common.collect.Sets; -import com.google.common.collect.SortedMapDifference; -import com.google.common.collect.SortedMultiset; -import com.google.common.collect.SortedSetMultimap; -import com.google.common.collect.Table; -import com.google.common.collect.Tables; -import com.google.common.collect.TreeBasedTable; -import com.google.common.collect.TreeMultimap; -import com.google.common.collect.TreeMultiset; -import com.google.common.collect.UnmodifiableIterator; -import java.util.ArrayDeque; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Comparator; -import java.util.Deque; -import java.util.Enumeration; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; -import java.util.LinkedHashMap; -import java.util.LinkedHashSet; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; -import java.util.NavigableMap; -import java.util.NavigableSet; -import java.util.PriorityQueue; -import java.util.Properties; -import java.util.Queue; -import java.util.Set; -import java.util.SortedMap; -import java.util.SortedSet; -import java.util.TreeMap; -import java.util.TreeSet; -import java.util.concurrent.BlockingQueue; -import java.util.concurrent.ConcurrentLinkedQueue; -import java.util.concurrent.CopyOnWriteArrayList; -import java.util.concurrent.CopyOnWriteArraySet; -import java.util.concurrent.LinkedBlockingDeque; -import java.util.concurrent.LinkedBlockingQueue; -import java.util.concurrent.PriorityBlockingQueue; - -// Methods for manipulating contents for use in tests -class Methods { - T getArrayElement(T[] container) { return container[0]; } - T getElement(Collection container) { return container.iterator().next(); } - T getElement(ImmutableCollection.Builder container) { return getElement(container.build()); } - T getElement(Iterable container) { return container.iterator().next(); } - T getElement(Iterator container) { return container.next(); } - T getElement(Optional container) { return container.get(); } - T getElement(Enumeration container) { return container.nextElement(); } - T getElement(Multiset.Entry container) { return container.getElement(); } - Map getMapDifference_left(MapDifference container) { return container.entriesOnlyOnLeft(); } - V getMapDifference_left(MapDifference.ValueDifference container) { return container.leftValue(); } - Map getMapDifference_right(MapDifference container) { return container.entriesOnlyOnRight(); } - V getMapDifference_right(MapDifference.ValueDifference container) { return container.rightValue(); } - K getMapKey(Map container) { return getElement(container.keySet()); } - K getMapKey(Multimap container) { return getElement(container.keySet()); } - K getMapKey(Map.Entry container) { return container.getKey(); } - K getMapKey(ImmutableMap.Builder container) { return getMapKey(container.build()); } - K getMapKey(ImmutableMultimap.Builder container) { return getMapKey(container.build()); } - V getMapValue(Map container) { return getElement(container.values()); } - V getMapValue(Multimap container) { return getElement(container.values()); } - V getMapValue(Map.Entry container) { return container.getValue(); } - V getMapValue(ImmutableMap.Builder container) { return getMapValue(container.build()); } - V getMapValue(ImmutableMultimap.Builder container) { return getMapValue(container.build()); } - V getMapValue(Table container) { return getElement(container.values()); } - V getMapValue(Table.Cell container) { return container.getValue(); } - V getMapValue(ImmutableTable.Builder container) { return getMapValue(container.build()); } - C getTable_columnKey(Table container) { return getElement(container.columnKeySet()); } - C getTable_columnKey(Table.Cell container) { return container.getColumnKey(); } - C getTable_columnKey(ImmutableTable.Builder container) { return getTable_columnKey(container.build()); } - R getTable_rowKey(Table container) { return getElement(container.rowKeySet()); } - R getTable_rowKey(Table.Cell container) { return container.getRowKey(); } - R getTable_rowKey(ImmutableTable.Builder container) { return getTable_rowKey(container.build()); } - T[] newWithArrayElement(T element) { return (T[]) new Object[]{element}; } - - Object newWithElement(Object element) { return null; } - Object newWithMapDifference_left(Object element) { return null; } - Object newWithMapDifference_right(Object element) { return null; } - Object newWithMapKey(Object element) { return null; } - Object newWithMapValue(Object element) { return null; } - Object newWithTable_columnKey(Object element) { return null; } - Object newWithTable_rowKey(Object element) { return null; } -} \ No newline at end of file diff --git a/java/ql/test/library-tests/frameworks/guava/generated/collect/Test.java b/java/ql/test/library-tests/frameworks/guava/generated/collect/Test.java index f3f3ab3d3a3..7407aa2abe8 100644 --- a/java/ql/test/library-tests/frameworks/guava/generated/collect/Test.java +++ b/java/ql/test/library-tests/frameworks/guava/generated/collect/Test.java @@ -161,6 +161,27 @@ public class Test { out = ArrayTable.create(null, in); sink(getTable_columnKey(out)); // $ hasValueFlow } + { + // "com.google.common.collect;ArrayTable;true;create;(Table);;MapValue of Argument[0];MapValue of ReturnValue;value" + ArrayTable out = null; + Table in = (Table)ArrayTable.create(ImmutableTable.of(null, null, source())); + out = ArrayTable.create(in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ArrayTable;true;create;(Table);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value" + ArrayTable out = null; + Table in = (Table)ArrayTable.create(ImmutableTable.of(null, source(), null)); + out = ArrayTable.create(in); + sink(getTable_columnKey(out)); // $ hasValueFlow + } + { + // "com.google.common.collect;ArrayTable;true;create;(Table);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value" + ArrayTable out = null; + Table in = (Table)ArrayTable.create(ImmutableTable.of(source(), null, null)); + out = ArrayTable.create(in); + sink(getTable_rowKey(out)); // $ hasValueFlow + } { // "com.google.common.collect;BiMap;true;forcePut;(Object,Object);;Argument[0];MapKey of Argument[-1];value" ImmutableBiMap out = null; From dcae1c5c04e0e25290a39fa5f89d2fbb41cf4ef8 Mon Sep 17 00:00:00 2001 From: Emile El-Qawas Date: Tue, 21 Sep 2021 16:50:48 +0100 Subject: [PATCH 535/741] DateFormatThreadUnsafe - Remove requirements for final and access modifiers --- java/ql/src/Likely Bugs/Concurrency/DateFormatThreadUnsafe.ql | 2 -- 1 file changed, 2 deletions(-) diff --git a/java/ql/src/Likely Bugs/Concurrency/DateFormatThreadUnsafe.ql b/java/ql/src/Likely Bugs/Concurrency/DateFormatThreadUnsafe.ql index 19da60422c8..b649227f69a 100644 --- a/java/ql/src/Likely Bugs/Concurrency/DateFormatThreadUnsafe.ql +++ b/java/ql/src/Likely Bugs/Concurrency/DateFormatThreadUnsafe.ql @@ -16,8 +16,6 @@ import java from Field f, Class dateFormat where f.isStatic() and - f.isFinal() and - (f.isPublic() or f.isProtected()) and dateFormat.hasQualifiedName("java.text", "DateFormat") and f.getType().(RefType).hasSupertype*(dateFormat) and exists(MethodAccess m | m.getQualifier().(VarAccess).getVariable() = f) From 478093aa8951735b3084683193975b6f29ff00ba Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Tue, 21 Sep 2021 17:51:24 +0100 Subject: [PATCH 536/741] Update cpp/ql/lib/semmle/code/cpp/models/interfaces/Sql.qll Co-authored-by: Geoffrey White <40627776+geoffw0@users.noreply.github.com> --- cpp/ql/lib/semmle/code/cpp/models/interfaces/Sql.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpp/ql/lib/semmle/code/cpp/models/interfaces/Sql.qll b/cpp/ql/lib/semmle/code/cpp/models/interfaces/Sql.qll index b13408a38b1..7d5111c2488 100644 --- a/cpp/ql/lib/semmle/code/cpp/models/interfaces/Sql.qll +++ b/cpp/ql/lib/semmle/code/cpp/models/interfaces/Sql.qll @@ -19,7 +19,7 @@ abstract class SqlExecutionFunction extends Function { } /** - * An abstract class that represents a function that escapes an SQL query string. + * An abstract class that represents a function that is a barrier to an SQL query string. */ abstract class SqlBarrierFunction extends Function { /** From 3cd675bfff101a5e01480dad3052674593bf9f29 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Tue, 21 Sep 2021 17:56:18 +0100 Subject: [PATCH 537/741] Manually fill in most of the remaining support method calls --- .../guava/generated/collect/Test.java | 445 +++++++++--------- .../guava/generated/collect/test.ql | 9 +- 2 files changed, 220 insertions(+), 234 deletions(-) diff --git a/java/ql/test/library-tests/frameworks/guava/generated/collect/Test.java b/java/ql/test/library-tests/frameworks/guava/generated/collect/Test.java index 7407aa2abe8..a99a3c6b594 100644 --- a/java/ql/test/library-tests/frameworks/guava/generated/collect/Test.java +++ b/java/ql/test/library-tests/frameworks/guava/generated/collect/Test.java @@ -118,13 +118,6 @@ public class Test { V getMapValue(Map map) { return map.get(null); } V getMapValue(Multimap map) { return map.values().iterator().next(); } V getMapValue(Table t) { return t.values().iterator().next(); } - Object getElementDefault(Object container) { return null; } - Object getMapDifference_leftDefault(Object container) { return null; } - Object getMapDifference_rightDefault(Object container) { return null; } - Object getMapKeyDefault(Object container) { return null; } - Object getMapValueDefault(Object container) { return null; } - Object getTable_columnKeyDefault(Object container) { return null; } - Object getTable_rowKeyDefault(Object container) { return null; } Object newWithElementDefault(Object element) { return null; } Object newWithMapKeyDefault(Object element) { return null; } Object newWithMapValueDefault(Object element) { return null; } @@ -276,14 +269,14 @@ public class Test { { // "com.google.common.collect;ClassToInstanceMap;true;getInstance;(Class);;MapValue of Argument[-1];ReturnValue;value" Object out = null; - ImmutableClassToInstanceMap in = (ImmutableClassToInstanceMap)newWithMapValueDefault(source()); + ImmutableClassToInstanceMap in = (ImmutableClassToInstanceMap)ImmutableClassToInstanceMap.of(null, source()); out = in.getInstance(null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ClassToInstanceMap;true;getInstance;(Class);;MapValue of Argument[-1];ReturnValue;value" Object out = null; - ClassToInstanceMap in = (ClassToInstanceMap)newWithMapValueDefault(source()); + ClassToInstanceMap in = (ClassToInstanceMap)ImmutableClassToInstanceMap.of(null, source()); out = in.getInstance(null); sink(out); // $ hasValueFlow } @@ -318,14 +311,14 @@ public class Test { { // "com.google.common.collect;ClassToInstanceMap;true;putInstance;(Class,Object);;MapValue of Argument[-1];ReturnValue;value" Object out = null; - ImmutableClassToInstanceMap in = (ImmutableClassToInstanceMap)newWithMapValueDefault(source()); + ImmutableClassToInstanceMap in = (ImmutableClassToInstanceMap)ImmutableClassToInstanceMap.of(null, source()); out = in.putInstance(null, null); sink(out); // $ hasValueFlow } { // "com.google.common.collect;ClassToInstanceMap;true;putInstance;(Class,Object);;MapValue of Argument[-1];ReturnValue;value" Object out = null; - ClassToInstanceMap in = (ClassToInstanceMap)newWithMapValueDefault(source()); + ClassToInstanceMap in = (ClassToInstanceMap)ImmutableClassToInstanceMap.of(null, source()); out = in.putInstance(null, null); sink(out); // $ hasValueFlow } @@ -338,24 +331,24 @@ public class Test { } { // "com.google.common.collect;Collections2;false;orderedPermutations;(Iterable);;Element of Argument[0];Element of Element of ReturnValue;value" - Collection out = null; + Collection out = null; Iterable in = (Iterable)List.of(source()); out = Collections2.orderedPermutations(in); - sink(getElementDefault(getElement(out))); // $ hasValueFlow + sink(getElement(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Collections2;false;orderedPermutations;(Iterable,Comparator);;Element of Argument[0];Element of Element of ReturnValue;value" - Collection out = null; + Collection out = null; Iterable in = (Iterable)List.of(source()); out = Collections2.orderedPermutations(in, null); - sink(getElementDefault(getElement(out))); // $ hasValueFlow + sink(getElement(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Collections2;false;permutations;(Collection);;Element of Argument[0];Element of Element of ReturnValue;value" - Collection out = null; + Collection out = null; Collection in = (Collection)List.of(source()); out = Collections2.permutations(in); - sink(getElementDefault(getElement(out))); // $ hasValueFlow + sink(getElement(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;ConcurrentHashMultiset;true;create;(Iterable);;Element of Argument[0];Element of ReturnValue;value" @@ -2068,42 +2061,42 @@ public class Test { { // "com.google.common.collect;ImmutableMap$Builder;true;putAll;(Iterable);;MapKey of Element of Argument[0];MapKey of Argument[-1];value" ImmutableSortedMap.Builder out = null; - Iterable in = (Iterable)List.of(newWithMapKeyDefault(source())); + Iterable in = (Iterable)List.of(newEntryWithMapKey(source())); out.putAll(in); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;putAll;(Iterable);;MapKey of Element of Argument[0];MapKey of Argument[-1];value" ImmutableMap.Builder out = null; - Iterable in = (Iterable)List.of(newWithMapKeyDefault(source())); + Iterable in = (Iterable)List.of(newEntryWithMapKey(source())); out.putAll(in); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;putAll;(Iterable);;MapKey of Element of Argument[0];MapKey of Argument[-1];value" ImmutableBiMap.Builder out = null; - Iterable in = (Iterable)List.of(newWithMapKeyDefault(source())); + Iterable in = (Iterable)List.of(newEntryWithMapKey(source())); out.putAll(in); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;putAll;(Iterable);;MapValue of Element of Argument[0];MapValue of Argument[-1];value" ImmutableSortedMap.Builder out = null; - Iterable in = (Iterable)List.of(newWithMapValueDefault(source())); + Iterable in = (Iterable)List.of(newEntryWithMapValue(source())); out.putAll(in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;putAll;(Iterable);;MapValue of Element of Argument[0];MapValue of Argument[-1];value" ImmutableMap.Builder out = null; - Iterable in = (Iterable)List.of(newWithMapValueDefault(source())); + Iterable in = (Iterable)List.of(newEntryWithMapValue(source())); out.putAll(in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap$Builder;true;putAll;(Iterable);;MapValue of Element of Argument[0];MapValue of Argument[-1];value" ImmutableBiMap.Builder out = null; - Iterable in = (Iterable)List.of(newWithMapValueDefault(source())); + Iterable in = (Iterable)List.of(newEntryWithMapValue(source())); out.putAll(in); sink(getMapValue(out)); // $ hasValueFlow } @@ -2194,14 +2187,14 @@ public class Test { { // "com.google.common.collect;ImmutableMap;true;copyOf;(Iterable);;MapKey of Element of Argument[0];MapKey of ReturnValue;value" ImmutableMap out = null; - Iterable in = (Iterable)List.of(newWithMapKeyDefault(source())); + Iterable in = (Iterable)List.of(newEntryWithMapKey(source())); out = ImmutableMap.copyOf(in); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMap;true;copyOf;(Iterable);;MapValue of Element of Argument[0];MapValue of ReturnValue;value" ImmutableMap out = null; - Iterable in = (Iterable)List.of(newWithMapValueDefault(source())); + Iterable in = (Iterable)List.of(newEntryWithMapValue(source())); out = ImmutableMap.copyOf(in); sink(getMapValue(out)); // $ hasValueFlow } @@ -2642,42 +2635,42 @@ public class Test { { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Iterable);;MapKey of Element of Argument[0];MapKey of Argument[-1];value" ImmutableSetMultimap.Builder out = null; - Iterable in = (Iterable)List.of(newWithMapKeyDefault(source())); + Iterable in = (Iterable)List.of(newEntryWithMapKey(source())); out.putAll(in); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Iterable);;MapKey of Element of Argument[0];MapKey of Argument[-1];value" ImmutableMultimap.Builder out = null; - Iterable in = (Iterable)List.of(newWithMapKeyDefault(source())); + Iterable in = (Iterable)List.of(newEntryWithMapKey(source())); out.putAll(in); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Iterable);;MapKey of Element of Argument[0];MapKey of Argument[-1];value" ImmutableListMultimap.Builder out = null; - Iterable in = (Iterable)List.of(newWithMapKeyDefault(source())); + Iterable in = (Iterable)List.of(newEntryWithMapKey(source())); out.putAll(in); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Iterable);;MapValue of Element of Argument[0];MapValue of Argument[-1];value" ImmutableSetMultimap.Builder out = null; - Iterable in = (Iterable)List.of(newWithMapValueDefault(source())); + Iterable in = (Iterable)List.of(newEntryWithMapValue(source())); out.putAll(in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Iterable);;MapValue of Element of Argument[0];MapValue of Argument[-1];value" ImmutableMultimap.Builder out = null; - Iterable in = (Iterable)List.of(newWithMapValueDefault(source())); + Iterable in = (Iterable)List.of(newEntryWithMapValue(source())); out.putAll(in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Iterable);;MapValue of Element of Argument[0];MapValue of Argument[-1];value" ImmutableListMultimap.Builder out = null; - Iterable in = (Iterable)List.of(newWithMapValueDefault(source())); + Iterable in = (Iterable)List.of(newEntryWithMapValue(source())); out.putAll(in); sink(getMapValue(out)); // $ hasValueFlow } @@ -2894,14 +2887,14 @@ public class Test { { // "com.google.common.collect;ImmutableMultimap;true;copyOf;(Iterable);;MapKey of Element of Argument[0];MapKey of ReturnValue;value" ImmutableMultimap out = null; - Iterable in = (Iterable)List.of(newWithMapKeyDefault(source())); + Iterable in = (Iterable)List.of(newEntryWithMapKey(source())); out = ImmutableMultimap.copyOf(in); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableMultimap;true;copyOf;(Iterable);;MapValue of Element of Argument[0];MapValue of ReturnValue;value" ImmutableMultimap out = null; - Iterable in = (Iterable)List.of(newWithMapValueDefault(source())); + Iterable in = (Iterable)List.of(newEntryWithMapValue(source())); out = ImmutableMultimap.copyOf(in); sink(getMapValue(out)); // $ hasValueFlow } @@ -3783,28 +3776,28 @@ public class Test { { // "com.google.common.collect;ImmutableSortedMap;true;copyOf;(Iterable);;MapKey of Element of Argument[0];MapKey of ReturnValue;value" ImmutableSortedMap out = null; - Iterable in = (Iterable)List.of(newWithMapKeyDefault(source())); + Iterable in = (Iterable)List.of(newEntryWithMapKey(source())); out = ImmutableSortedMap.copyOf(in); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMap;true;copyOf;(Iterable);;MapValue of Element of Argument[0];MapValue of ReturnValue;value" ImmutableSortedMap out = null; - Iterable in = (Iterable)List.of(newWithMapValueDefault(source())); + Iterable in = (Iterable)List.of(newEntryWithMapValue(source())); out = ImmutableSortedMap.copyOf(in); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMap;true;copyOf;(Iterable,Comparator);;MapKey of Element of Argument[0];MapKey of ReturnValue;value" ImmutableSortedMap out = null; - Iterable in = (Iterable)List.of(newWithMapKeyDefault(source())); + Iterable in = (Iterable)List.of(newEntryWithMapKey(source())); out = ImmutableSortedMap.copyOf(in, (Comparator)null); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;ImmutableSortedMap;true;copyOf;(Iterable,Comparator);;MapValue of Element of Argument[0];MapValue of ReturnValue;value" ImmutableSortedMap out = null; - Iterable in = (Iterable)List.of(newWithMapValueDefault(source())); + Iterable in = (Iterable)List.of(newEntryWithMapValue(source())); out = ImmutableSortedMap.copyOf(in, (Comparator)null); sink(getMapValue(out)); // $ hasValueFlow } @@ -3846,7 +3839,7 @@ public class Test { { // "com.google.common.collect;ImmutableSortedMap;true;copyOfSorted;(SortedMap);;MapValue of Argument[0];MapValue of ReturnValue;value" ImmutableSortedMap out = null; - SortedMap in = (SortedMap)ImmutableSortedMap.of(null, (Comparable)source()); + SortedMap in = (SortedMap)ImmutableSortedMap.of((Comparable)null, source()); out = ImmutableSortedMap.copyOfSorted(in); sink(getMapValue(out)); // $ hasValueFlow } @@ -4637,7 +4630,7 @@ public class Test { { // "com.google.common.collect;Iterables;false;concat;(Iterable);;Element of Element of Argument[0];Element of ReturnValue;value" Iterable out = null; - Iterable in = (Iterable)List.of(newWithElementDefault(source())); + Iterable in = (Iterable)List.of(List.of(source())); out = Iterables.concat(in); sink(getElement(out)); // $ hasValueFlow } @@ -4707,7 +4700,7 @@ public class Test { { // "com.google.common.collect;Iterables;false;concat;(Iterable[]);;Element of ArrayElement of Argument[0];Element of ReturnValue;value" Iterable out = null; - Iterable[] in = (Iterable[])new Iterable[]{(Iterable)newWithElementDefault(source())}; + Iterable[] in = (Iterable[])new Iterable[]{(Iterable)List.of(source())}; out = Iterables.concat(in); sink(getElement(out)); // $ hasValueFlow } @@ -4840,23 +4833,23 @@ public class Test { { // "com.google.common.collect;Iterables;false;mergeSorted;(Iterable,Comparator);;Element of Element of Argument[0];Element of ReturnValue;value" Iterable out = null; - Iterable in = (Iterable)List.of(newWithElementDefault(source())); + Iterable in = (Iterable)List.of(List.of(source())); out = Iterables.mergeSorted(in, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;paddedPartition;(Iterable,int);;Element of Argument[0];Element of Element of ReturnValue;value" - Iterable out = null; + Iterable out = null; Iterable in = (Iterable)List.of(source()); out = Iterables.paddedPartition(in, 0); - sink(getElementDefault(getElement(out))); // $ hasValueFlow + sink(getElement(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;partition;(Iterable,int);;Element of Argument[0];Element of Element of ReturnValue;value" - Iterable out = null; + Iterable out = null; Iterable in = (Iterable)List.of(source()); out = Iterables.partition(in, 0); - sink(getElementDefault(getElement(out))); // $ hasValueFlow + sink(getElement(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Iterables;false;skip;(Iterable,int);;Element of Argument[0];Element of ReturnValue;value" @@ -4917,7 +4910,7 @@ public class Test { { // "com.google.common.collect;Iterators;false;concat;(Iterator);;Element of Element of Argument[0];Element of ReturnValue;value" Iterator out = null; - Iterator in = (Iterator)List.of(newWithElementDefault(source())).iterator(); + Iterator in = (Iterator)List.of(List.of(source()).iterator()).iterator(); out = Iterators.concat(in); sink(getElement(out)); // $ hasValueFlow } @@ -4987,7 +4980,7 @@ public class Test { { // "com.google.common.collect;Iterators;false;concat;(Iterator[]);;Element of ArrayElement of Argument[0];Element of ReturnValue;value" Iterator out = null; - Iterator[] in = (Iterator[])new Iterator[]{(Iterator)newWithElementDefault(source())}; + Iterator[] in = (Iterator[])new Iterator[]{(Iterator)List.of(source()).iterator()}; out = Iterators.concat(in); sink(getElement(out)); // $ hasValueFlow } @@ -5148,23 +5141,23 @@ public class Test { { // "com.google.common.collect;Iterators;false;mergeSorted;(Iterable,Comparator);;Element of Element of Argument[0];Element of ReturnValue;value" UnmodifiableIterator out = null; - Iterable in = (Iterable)List.of(newWithElementDefault(source())); + Iterable in = (Iterable)List.of(List.of(source()).iterator()); out = Iterators.mergeSorted(in, null); sink(getElement(out)); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;paddedPartition;(Iterator,int);;Element of Argument[0];Element of Element of ReturnValue;value" - UnmodifiableIterator out = null; + UnmodifiableIterator out = null; Iterator in = (Iterator)List.of(source()).iterator(); out = Iterators.paddedPartition(in, 0); - sink(getElementDefault(getElement(out))); // $ hasValueFlow + sink(getElement(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;partition;(Iterator,int);;Element of Argument[0];Element of Element of ReturnValue;value" - UnmodifiableIterator out = null; + UnmodifiableIterator out = null; Iterator in = (Iterator)List.of(source()).iterator(); out = Iterators.partition(in, 0); - sink(getElementDefault(getElement(out))); // $ hasValueFlow + sink(getElement(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Iterators;false;peekingIterator;(Iterator);;Element of Argument[0];Element of ReturnValue;value" @@ -5176,7 +5169,7 @@ public class Test { { // "com.google.common.collect;Iterators;false;peekingIterator;(PeekingIterator);;Element of Argument[0];Element of ReturnValue;value" PeekingIterator out = null; - PeekingIterator in = (PeekingIterator)newWithElementDefault(source()); + PeekingIterator in = (PeekingIterator)Iterators.peekingIterator(List.of(source()).iterator()); out = Iterators.peekingIterator(in); sink(getElement(out)); // $ hasValueFlow } @@ -5211,7 +5204,7 @@ public class Test { { // "com.google.common.collect;Iterators;false;unmodifiableIterator;(UnmodifiableIterator);;Element of Argument[0];Element of ReturnValue;value" UnmodifiableIterator out = null; - UnmodifiableIterator in = (UnmodifiableIterator)newWithElementDefault(source()); + UnmodifiableIterator in = (UnmodifiableIterator)Iterators.unmodifiableIterator(List.of(source()).iterator()); out = Iterators.unmodifiableIterator(in); sink(getElement(out)); // $ hasValueFlow } @@ -5287,17 +5280,17 @@ public class Test { } { // "com.google.common.collect;Lists;false;cartesianProduct;(List);;Element of Element of Argument[0];Element of Element of ReturnValue;value" - List out = null; - List in = (List)List.of(newWithElementDefault(source())); + List out = null; + List in = (List)List.of(List.of(source())); out = Lists.cartesianProduct(in); - sink(getElementDefault(getElement(out))); // $ hasValueFlow + sink(getElement(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Lists;false;cartesianProduct;(List[]);;Element of ArrayElement of Argument[0];Element of Element of ReturnValue;value" - List out = null; - List[] in = (List[])new List[]{(List)newWithElementDefault(source())}; + List out = null; + List[] in = (List[])new List[]{(List)List.of(source())}; out = Lists.cartesianProduct(in); - sink(getElementDefault(getElement(out))); // $ hasValueFlow + sink(getElement(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Lists;false;charactersOf;(CharSequence);;Argument[0];Element of ReturnValue;taint" @@ -5350,10 +5343,10 @@ public class Test { } { // "com.google.common.collect;Lists;false;partition;(List,int);;Element of Argument[0];Element of Element of ReturnValue;value" - List out = null; + List out = null; List in = (List)List.of(source()); out = Lists.partition(in, 0); - sink(getElementDefault(getElement(out))); // $ hasValueFlow + sink(getElement(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Lists;false;reverse;(List);;Element of Argument[0];Element of ReturnValue;value" @@ -5379,168 +5372,168 @@ public class Test { { // "com.google.common.collect;MapDifference;true;entriesDiffering;();;MapKey of SyntheticField[com.google.common.collect.MapDifference.left] of Argument[-1];MapKey of ReturnValue;value" SortedMap out = null; - SortedMapDifference in = (SortedMapDifference)Maps.difference((SortedMap)newWithMapKeyDefault(source()), null); + SortedMapDifference in = (SortedMapDifference)Maps.difference(ImmutableSortedMap.of((Comparable)source(), null), null); out = in.entriesDiffering(); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;MapDifference;true;entriesDiffering;();;MapKey of SyntheticField[com.google.common.collect.MapDifference.left] of Argument[-1];MapKey of ReturnValue;value" Map out = null; - MapDifference in = (MapDifference)Maps.difference((Map)newWithMapKeyDefault(source()), null); + MapDifference in = (MapDifference)Maps.difference(Map.of(source(), null), null); out = in.entriesDiffering(); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;MapDifference;true;entriesDiffering;();;MapKey of SyntheticField[com.google.common.collect.MapDifference.right] of Argument[-1];MapKey of ReturnValue;value" SortedMap out = null; - SortedMapDifference in = (SortedMapDifference)Maps.difference(null, (SortedMap)newWithMapKeyDefault(source())); + SortedMapDifference in = (SortedMapDifference)Maps.difference(null, ImmutableSortedMap.of((Comparable)source(), null)); out = in.entriesDiffering(); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;MapDifference;true;entriesDiffering;();;MapKey of SyntheticField[com.google.common.collect.MapDifference.right] of Argument[-1];MapKey of ReturnValue;value" Map out = null; - MapDifference in = (MapDifference)Maps.difference(null, (Map)newWithMapKeyDefault(source())); + MapDifference in = (MapDifference)Maps.difference(null, Map.of(source(), null)); out = in.entriesDiffering(); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;MapDifference;true;entriesDiffering;();;MapValue of SyntheticField[com.google.common.collect.MapDifference.left] of Argument[-1];SyntheticField[com.google.common.collect.MapDifference.left] of MapValue of ReturnValue;value" - SortedMap out = null; - SortedMapDifference in = (SortedMapDifference)Maps.difference((SortedMap)newWithMapValueDefault(source()), null); + SortedMap out = null; + SortedMapDifference in = (SortedMapDifference)Maps.difference(ImmutableSortedMap.of((Comparable)null, source()), null); out = in.entriesDiffering(); - sink(getMapDifference_leftDefault(getMapValue(out))); // $ hasValueFlow + sink(getMapValue(out).leftValue()); // $ hasValueFlow } { // "com.google.common.collect;MapDifference;true;entriesDiffering;();;MapValue of SyntheticField[com.google.common.collect.MapDifference.left] of Argument[-1];SyntheticField[com.google.common.collect.MapDifference.left] of MapValue of ReturnValue;value" - Map out = null; - MapDifference in = (MapDifference)Maps.difference((Map)newWithMapValueDefault(source()), null); + Map out = null; + MapDifference in = (MapDifference)Maps.difference(Map.of(null, source()), null); out = in.entriesDiffering(); - sink(getMapDifference_leftDefault(getMapValue(out))); // $ hasValueFlow + sink(getMapValue(out).leftValue()); // $ hasValueFlow } { // "com.google.common.collect;MapDifference;true;entriesDiffering;();;MapValue of SyntheticField[com.google.common.collect.MapDifference.right] of Argument[-1];SyntheticField[com.google.common.collect.MapDifference.right] of MapValue of ReturnValue;value" - SortedMap out = null; - SortedMapDifference in = (SortedMapDifference)Maps.difference(null, (SortedMap)newWithMapValueDefault(source())); + SortedMap out = null; + SortedMapDifference in = (SortedMapDifference)Maps.difference(null, ImmutableSortedMap.of((Comparable)null, source())); out = in.entriesDiffering(); - sink(getMapDifference_rightDefault(getMapValue(out))); // $ hasValueFlow + sink(getMapValue(out).rightValue()); // $ hasValueFlow } { // "com.google.common.collect;MapDifference;true;entriesDiffering;();;MapValue of SyntheticField[com.google.common.collect.MapDifference.right] of Argument[-1];SyntheticField[com.google.common.collect.MapDifference.right] of MapValue of ReturnValue;value" - Map out = null; - MapDifference in = (MapDifference)Maps.difference(null, (Map)newWithMapValueDefault(source())); + Map out = null; + MapDifference in = (MapDifference)Maps.difference(null, Map.of(null, source())); out = in.entriesDiffering(); - sink(getMapDifference_rightDefault(getMapValue(out))); // $ hasValueFlow + sink(getMapValue(out).rightValue()); // $ hasValueFlow } { // "com.google.common.collect;MapDifference;true;entriesInCommon;();;MapKey of SyntheticField[com.google.common.collect.MapDifference.left] of Argument[-1];MapKey of ReturnValue;value" SortedMap out = null; - SortedMapDifference in = (SortedMapDifference)Maps.difference((SortedMap)newWithMapKeyDefault(source()), null); + SortedMapDifference in = (SortedMapDifference)Maps.difference(ImmutableSortedMap.of((Comparable)source(), null), null); out = in.entriesInCommon(); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;MapDifference;true;entriesInCommon;();;MapKey of SyntheticField[com.google.common.collect.MapDifference.left] of Argument[-1];MapKey of ReturnValue;value" Map out = null; - MapDifference in = (MapDifference)Maps.difference((Map)newWithMapKeyDefault(source()), null); + MapDifference in = (MapDifference)Maps.difference(Map.of(source(), null), null); out = in.entriesInCommon(); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;MapDifference;true;entriesInCommon;();;MapKey of SyntheticField[com.google.common.collect.MapDifference.right] of Argument[-1];MapKey of ReturnValue;value" SortedMap out = null; - SortedMapDifference in = (SortedMapDifference)Maps.difference(null, (SortedMap)newWithMapKeyDefault(source())); + SortedMapDifference in = (SortedMapDifference)Maps.difference(null, ImmutableSortedMap.of((Comparable)source(), null)); out = in.entriesInCommon(); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;MapDifference;true;entriesInCommon;();;MapKey of SyntheticField[com.google.common.collect.MapDifference.right] of Argument[-1];MapKey of ReturnValue;value" Map out = null; - MapDifference in = (MapDifference)Maps.difference(null, (Map)newWithMapKeyDefault(source())); + MapDifference in = (MapDifference)Maps.difference(null, Map.of(source(), null)); out = in.entriesInCommon(); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;MapDifference;true;entriesInCommon;();;MapValue of SyntheticField[com.google.common.collect.MapDifference.left] of Argument[-1];MapValue of ReturnValue;value" SortedMap out = null; - SortedMapDifference in = (SortedMapDifference)Maps.difference((SortedMap)newWithMapValueDefault(source()), null); + SortedMapDifference in = (SortedMapDifference)Maps.difference(ImmutableSortedMap.of((Comparable)null, source()), null); out = in.entriesInCommon(); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;MapDifference;true;entriesInCommon;();;MapValue of SyntheticField[com.google.common.collect.MapDifference.left] of Argument[-1];MapValue of ReturnValue;value" Map out = null; - MapDifference in = (MapDifference)Maps.difference((Map)newWithMapValueDefault(source()), null); + MapDifference in = (MapDifference)Maps.difference(Map.of(null, source()), null); out = in.entriesInCommon(); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;MapDifference;true;entriesInCommon;();;MapValue of SyntheticField[com.google.common.collect.MapDifference.right] of Argument[-1];MapValue of ReturnValue;value" SortedMap out = null; - SortedMapDifference in = (SortedMapDifference)Maps.difference(null, (SortedMap)newWithMapValueDefault(source())); + SortedMapDifference in = (SortedMapDifference)Maps.difference(null, ImmutableSortedMap.of((Comparable)null, source())); out = in.entriesInCommon(); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;MapDifference;true;entriesInCommon;();;MapValue of SyntheticField[com.google.common.collect.MapDifference.right] of Argument[-1];MapValue of ReturnValue;value" Map out = null; - MapDifference in = (MapDifference)Maps.difference(null, (Map)newWithMapValueDefault(source())); + MapDifference in = (MapDifference)Maps.difference(null, Map.of(null, source())); out = in.entriesInCommon(); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;MapDifference;true;entriesOnlyOnLeft;();;MapKey of SyntheticField[com.google.common.collect.MapDifference.left] of Argument[-1];MapKey of ReturnValue;value" SortedMap out = null; - SortedMapDifference in = (SortedMapDifference)Maps.difference((SortedMap)newWithMapKeyDefault(source()), null); + SortedMapDifference in = (SortedMapDifference)Maps.difference(ImmutableSortedMap.of((Comparable)source(), null), null); out = in.entriesOnlyOnLeft(); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;MapDifference;true;entriesOnlyOnLeft;();;MapKey of SyntheticField[com.google.common.collect.MapDifference.left] of Argument[-1];MapKey of ReturnValue;value" Map out = null; - MapDifference in = (MapDifference)Maps.difference((Map)newWithMapKeyDefault(source()), null); + MapDifference in = (MapDifference)Maps.difference(Map.of(source(), null), null); out = in.entriesOnlyOnLeft(); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;MapDifference;true;entriesOnlyOnLeft;();;MapValue of SyntheticField[com.google.common.collect.MapDifference.left] of Argument[-1];MapValue of ReturnValue;value" SortedMap out = null; - SortedMapDifference in = (SortedMapDifference)Maps.difference((SortedMap)newWithMapValueDefault(source()), null); + SortedMapDifference in = (SortedMapDifference)Maps.difference(ImmutableSortedMap.of((Comparable)null, source()), null); out = in.entriesOnlyOnLeft(); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;MapDifference;true;entriesOnlyOnLeft;();;MapValue of SyntheticField[com.google.common.collect.MapDifference.left] of Argument[-1];MapValue of ReturnValue;value" Map out = null; - MapDifference in = (MapDifference)Maps.difference((Map)newWithMapValueDefault(source()), null); + MapDifference in = (MapDifference)Maps.difference(Map.of(null, source()), null); out = in.entriesOnlyOnLeft(); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;MapDifference;true;entriesOnlyOnRight;();;MapKey of SyntheticField[com.google.common.collect.MapDifference.right] of Argument[-1];MapKey of ReturnValue;value" SortedMap out = null; - SortedMapDifference in = (SortedMapDifference)Maps.difference(null, (SortedMap)newWithMapKeyDefault(source())); + SortedMapDifference in = (SortedMapDifference)Maps.difference(null, ImmutableSortedMap.of((Comparable)source(),null)); out = in.entriesOnlyOnRight(); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;MapDifference;true;entriesOnlyOnRight;();;MapKey of SyntheticField[com.google.common.collect.MapDifference.right] of Argument[-1];MapKey of ReturnValue;value" Map out = null; - MapDifference in = (MapDifference)Maps.difference(null, (Map)newWithMapKeyDefault(source())); + MapDifference in = (MapDifference)Maps.difference(null, Map.of(source(), null)); out = in.entriesOnlyOnRight(); sink(getMapKey(out)); // $ hasValueFlow } { // "com.google.common.collect;MapDifference;true;entriesOnlyOnRight;();;MapValue of SyntheticField[com.google.common.collect.MapDifference.right] of Argument[-1];MapValue of ReturnValue;value" SortedMap out = null; - SortedMapDifference in = (SortedMapDifference)Maps.difference(null, (SortedMap)newWithMapValueDefault(source())); + SortedMapDifference in = (SortedMapDifference)Maps.difference(null, ImmutableSortedMap.of((Comparable)null, source())); out = in.entriesOnlyOnRight(); sink(getMapValue(out)); // $ hasValueFlow } { // "com.google.common.collect;MapDifference;true;entriesOnlyOnRight;();;MapValue of SyntheticField[com.google.common.collect.MapDifference.right] of Argument[-1];MapValue of ReturnValue;value" Map out = null; - MapDifference in = (MapDifference)Maps.difference(null, (Map)newWithMapValueDefault(source())); + MapDifference in = (MapDifference)Maps.difference(null, Map.of(null, source())); out = in.entriesOnlyOnRight(); sink(getMapValue(out)); // $ hasValueFlow } @@ -5570,84 +5563,84 @@ public class Test { MapDifference out = null; Map in = (Map)Map.of(source(), null); out = Maps.difference(in, (Map)null); - sink(getMapKeyDefault(out.entriesOnlyOnLeft())); // $ hasValueFlow + sink(getMapKey(out.entriesOnlyOnLeft())); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;difference;(Map,Map);;MapKey of Argument[1];MapKey of SyntheticField[com.google.common.collect.MapDifference.right] of ReturnValue;value" MapDifference out = null; Map in = (Map)Map.of(source(), null); out = Maps.difference((Map)null, in); - sink(getMapKeyDefault(out.entriesOnlyOnRight())); // $ hasValueFlow + sink(getMapKey(out.entriesOnlyOnRight())); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;difference;(Map,Map);;MapValue of Argument[0];MapValue of SyntheticField[com.google.common.collect.MapDifference.left] of ReturnValue;value" MapDifference out = null; Map in = (Map)Map.of(null, source()); out = Maps.difference(in, (Map)null); - sink(getMapValueDefault(out.entriesOnlyOnLeft())); // $ hasValueFlow + sink(getMapValue(out.entriesOnlyOnLeft())); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;difference;(Map,Map);;MapValue of Argument[1];MapValue of SyntheticField[com.google.common.collect.MapDifference.right] of ReturnValue;value" MapDifference out = null; Map in = (Map)Map.of(null, source()); out = Maps.difference((Map)null, in); - sink(getMapValueDefault(out.entriesOnlyOnRight())); // $ hasValueFlow + sink(getMapValue(out.entriesOnlyOnRight())); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;difference;(Map,Map,Equivalence);;MapKey of Argument[0];MapKey of SyntheticField[com.google.common.collect.MapDifference.left] of ReturnValue;value" MapDifference out = null; Map in = (Map)Map.of(source(), null); out = Maps.difference(in, null, null); - sink(getMapKeyDefault(out.entriesOnlyOnLeft())); // $ hasValueFlow + sink(getMapKey(out.entriesOnlyOnLeft())); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;difference;(Map,Map,Equivalence);;MapKey of Argument[1];MapKey of SyntheticField[com.google.common.collect.MapDifference.right] of ReturnValue;value" MapDifference out = null; Map in = (Map)Map.of(source(), null); out = Maps.difference(null, in, null); - sink(getMapKeyDefault(out.entriesOnlyOnRight())); // $ hasValueFlow + sink(getMapKey(out.entriesOnlyOnRight())); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;difference;(Map,Map,Equivalence);;MapValue of Argument[0];MapValue of SyntheticField[com.google.common.collect.MapDifference.left] of ReturnValue;value" MapDifference out = null; Map in = (Map)Map.of(null, source()); out = Maps.difference(in, null, null); - sink(getMapValueDefault(out.entriesOnlyOnLeft())); // $ hasValueFlow + sink(getMapValue(out.entriesOnlyOnLeft())); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;difference;(Map,Map,Equivalence);;MapValue of Argument[1];MapValue of SyntheticField[com.google.common.collect.MapDifference.right] of ReturnValue;value" MapDifference out = null; Map in = (Map)Map.of(null, source()); out = Maps.difference(null, in, null); - sink(getMapValueDefault(out.entriesOnlyOnRight())); // $ hasValueFlow + sink(getMapValue(out.entriesOnlyOnRight())); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;difference;(SortedMap,Map);;MapKey of Argument[0];MapKey of SyntheticField[com.google.common.collect.MapDifference.left] of ReturnValue;value" SortedMapDifference out = null; SortedMap in = (SortedMap)ImmutableSortedMap.of((Comparable)source(), null); out = Maps.difference(in, (Map)null); - sink(getMapKeyDefault(out.entriesOnlyOnLeft())); // $ hasValueFlow + sink(getMapKey(out.entriesOnlyOnLeft())); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;difference;(SortedMap,Map);;MapKey of Argument[1];MapKey of SyntheticField[com.google.common.collect.MapDifference.right] of ReturnValue;value" SortedMapDifference out = null; Map in = (Map)Map.of(source(), null); out = Maps.difference((SortedMap)null, in); - sink(getMapKeyDefault(out.entriesOnlyOnRight())); // $ hasValueFlow + sink(getMapKey(out.entriesOnlyOnRight())); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;difference;(SortedMap,Map);;MapValue of Argument[0];MapValue of SyntheticField[com.google.common.collect.MapDifference.left] of ReturnValue;value" SortedMapDifference out = null; - SortedMap in = (SortedMap)ImmutableSortedMap.of(null, (Comparable)source()); + SortedMap in = (SortedMap)ImmutableSortedMap.of((Comparable)null, source()); out = Maps.difference(in, (Map)null); - sink(getMapValueDefault(out.entriesOnlyOnLeft())); // $ hasValueFlow + sink(getMapValue(out.entriesOnlyOnLeft())); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;difference;(SortedMap,Map);;MapValue of Argument[1];MapValue of SyntheticField[com.google.common.collect.MapDifference.right] of ReturnValue;value" SortedMapDifference out = null; Map in = (Map)Map.of(null, source()); out = Maps.difference((SortedMap)null, in); - sink(getMapValueDefault(out.entriesOnlyOnRight())); // $ hasValueFlow + sink(getMapValue(out.entriesOnlyOnRight())); // $ hasValueFlow } { // "com.google.common.collect;Maps;false;filterEntries;;;MapKey of Argument[0];MapKey of ReturnValue;value" @@ -5813,7 +5806,7 @@ public class Test { { // "com.google.common.collect;Maps;false;newTreeMap;(SortedMap);;MapValue of Argument[0];MapValue of ReturnValue;value" TreeMap out = null; - SortedMap in = (SortedMap)ImmutableSortedMap.of(null, (Comparable)source()); + SortedMap in = (SortedMap)ImmutableSortedMap.of((Comparable)null, source()); out = Maps.newTreeMap(in); sink(getMapValue(out)); // $ hasValueFlow } @@ -5827,7 +5820,7 @@ public class Test { { // "com.google.common.collect;Maps;false;subMap;(NavigableMap,Range);;MapValue of Argument[0];MapValue of ReturnValue;value" NavigableMap out = null; - NavigableMap in = (NavigableMap)ImmutableSortedMap.of(null, (Comparable)source()); + NavigableMap in = (NavigableMap)ImmutableSortedMap.of((Comparable)null, source()); out = Maps.subMap(in, null); sink(getMapValue(out)); // $ hasValueFlow } @@ -5855,7 +5848,7 @@ public class Test { { // "com.google.common.collect;Maps;false;synchronizedNavigableMap;(NavigableMap);;MapValue of Argument[0];MapValue of ReturnValue;value" NavigableMap out = null; - NavigableMap in = (NavigableMap)ImmutableSortedMap.of(null, (Comparable)source()); + NavigableMap in = (NavigableMap)ImmutableSortedMap.of((Comparable)null, source()); out = Maps.synchronizedNavigableMap(in); sink(getMapValue(out)); // $ hasValueFlow } @@ -5932,7 +5925,7 @@ public class Test { { // "com.google.common.collect;Maps;false;unmodifiableNavigableMap;(NavigableMap);;MapValue of Argument[0];MapValue of ReturnValue;value" NavigableMap out = null; - NavigableMap in = (NavigableMap)ImmutableSortedMap.of(null, (Comparable)source()); + NavigableMap in = (NavigableMap)ImmutableSortedMap.of((Comparable)null, source()); out = Maps.unmodifiableNavigableMap(in); sink(getMapValue(out)); // $ hasValueFlow } @@ -5980,129 +5973,129 @@ public class Test { } { // "com.google.common.collect;Multimap;true;asMap;();;MapValue of Argument[-1];Element of MapValue of ReturnValue;value" - NavigableMap out = null; + NavigableMap out = null; TreeMultimap in = (TreeMultimap)TreeMultimap.create(ImmutableMultimap.of(null, (Comparable)source())); out = in.asMap(); - sink(getElementDefault(getMapValue(out))); // $ hasValueFlow + sink(getElement(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;asMap;();;MapValue of Argument[-1];Element of MapValue of ReturnValue;value" - Map out = null; + Map out = null; SortedSetMultimap in = (SortedSetMultimap)TreeMultimap.create(ImmutableMultimap.of(null, (Comparable)source())); out = in.asMap(); - sink(getElementDefault(getMapValue(out))); // $ hasValueFlow + sink(getElement(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;asMap;();;MapValue of Argument[-1];Element of MapValue of ReturnValue;value" - Map out = null; + Map out = null; SetMultimap in = (SetMultimap)ImmutableSetMultimap.of(null, source()); out = in.asMap(); - sink(getElementDefault(getMapValue(out))); // $ hasValueFlow + sink(getElement(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;asMap;();;MapValue of Argument[-1];Element of MapValue of ReturnValue;value" - Map out = null; + Map out = null; Multimap in = (Multimap)ImmutableMultimap.of(null, source()); out = in.asMap(); - sink(getElementDefault(getMapValue(out))); // $ hasValueFlow + sink(getElement(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;asMap;();;MapValue of Argument[-1];Element of MapValue of ReturnValue;value" - Map out = null; + Map out = null; ListMultimap in = (ListMultimap)ImmutableListMultimap.of(null, source()); out = in.asMap(); - sink(getElementDefault(getMapValue(out))); // $ hasValueFlow + sink(getElement(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;asMap;();;MapValue of Argument[-1];Element of MapValue of ReturnValue;value" - ImmutableMap out = null; + ImmutableMap out = null; ImmutableMultimap in = (ImmutableMultimap)ImmutableMultimap.of(null, source()); out = in.asMap(); - sink(getElementDefault(getMapValue(out))); // $ hasValueFlow + sink(getElement(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;entries;();;MapKey of Argument[-1];MapKey of Element of ReturnValue;value" - Set out = null; + Set out = null; SetMultimap in = (SetMultimap)ImmutableSetMultimap.of(source(), null); out = in.entries(); - sink(getMapKeyDefault(getElement(out))); // $ hasValueFlow + sink(getElement(out).getKey()); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;entries;();;MapKey of Argument[-1];MapKey of Element of ReturnValue;value" - Set out = null; + Set out = null; LinkedHashMultimap in = (LinkedHashMultimap)LinkedHashMultimap.create(ImmutableMultimap.of(source(), null)); out = in.entries(); - sink(getMapKeyDefault(getElement(out))); // $ hasValueFlow + sink(getElement(out).getKey()); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;entries;();;MapKey of Argument[-1];MapKey of Element of ReturnValue;value" - List out = null; + List out = null; LinkedListMultimap in = (LinkedListMultimap)LinkedListMultimap.create(ImmutableMultimap.of(source(), null)); out = in.entries(); - sink(getMapKeyDefault(getElement(out))); // $ hasValueFlow + sink(getElement(out).getKey()); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;entries;();;MapKey of Argument[-1];MapKey of Element of ReturnValue;value" - ImmutableSet out = null; + ImmutableSet out = null; ImmutableSetMultimap in = (ImmutableSetMultimap)ImmutableSetMultimap.of(source(), null); out = in.entries(); - sink(getMapKeyDefault(getElement(out))); // $ hasValueFlow + sink(getElement(out).getKey()); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;entries;();;MapKey of Argument[-1];MapKey of Element of ReturnValue;value" - ImmutableCollection out = null; + ImmutableCollection out = null; ImmutableMultimap in = (ImmutableMultimap)ImmutableMultimap.of(source(), null); out = in.entries(); - sink(getMapKeyDefault(getElement(out))); // $ hasValueFlow + sink(getElement(out).getKey()); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;entries;();;MapKey of Argument[-1];MapKey of Element of ReturnValue;value" - Collection out = null; + Collection out = null; Multimap in = (Multimap)ImmutableMultimap.of(source(), null); out = in.entries(); - sink(getMapKeyDefault(getElement(out))); // $ hasValueFlow + sink(getElement(out).getKey()); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;entries;();;MapValue of Argument[-1];MapValue of Element of ReturnValue;value" - Set out = null; + Set out = null; SetMultimap in = (SetMultimap)ImmutableSetMultimap.of(null, source()); out = in.entries(); - sink(getMapValueDefault(getElement(out))); // $ hasValueFlow + sink(getElement(out).getValue()); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;entries;();;MapValue of Argument[-1];MapValue of Element of ReturnValue;value" - Set out = null; + Set out = null; LinkedHashMultimap in = (LinkedHashMultimap)LinkedHashMultimap.create(ImmutableMultimap.of(null, source())); out = in.entries(); - sink(getMapValueDefault(getElement(out))); // $ hasValueFlow + sink(getElement(out).getValue()); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;entries;();;MapValue of Argument[-1];MapValue of Element of ReturnValue;value" - List out = null; + List out = null; LinkedListMultimap in = (LinkedListMultimap)LinkedListMultimap.create(ImmutableMultimap.of(null, source())); out = in.entries(); - sink(getMapValueDefault(getElement(out))); // $ hasValueFlow + sink(getElement(out).getValue()); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;entries;();;MapValue of Argument[-1];MapValue of Element of ReturnValue;value" - ImmutableSet out = null; + ImmutableSet out = null; ImmutableSetMultimap in = (ImmutableSetMultimap)ImmutableSetMultimap.of(null, source()); out = in.entries(); - sink(getMapValueDefault(getElement(out))); // $ hasValueFlow + sink(getElement(out).getValue()); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;entries;();;MapValue of Argument[-1];MapValue of Element of ReturnValue;value" - ImmutableCollection out = null; + ImmutableCollection out = null; ImmutableMultimap in = (ImmutableMultimap)ImmutableMultimap.of(null, source()); out = in.entries(); - sink(getMapValueDefault(getElement(out))); // $ hasValueFlow + sink(getElement(out).getValue()); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;entries;();;MapValue of Argument[-1];MapValue of Element of ReturnValue;value" - Collection out = null; + Collection out = null; Multimap in = (Multimap)ImmutableMultimap.of(null, source()); out = in.entries(); - sink(getMapValueDefault(getElement(out))); // $ hasValueFlow + sink(getElement(out).getValue()); // $ hasValueFlow } { // "com.google.common.collect;Multimap;true;get;(Object);;MapValue of Argument[-1];Element of ReturnValue;value" @@ -6589,10 +6582,10 @@ public class Test { } { // "com.google.common.collect;Multimaps;false;asMap;(ListMultimap);;MapValue of Argument[0];Element of MapValue of ReturnValue;value" - Map out = null; + Map out = null; ListMultimap in = (ListMultimap)ImmutableListMultimap.of(null, source()); out = Multimaps.asMap(in); - sink(getElementDefault(getMapValue(out))); // $ hasValueFlow + sink(getElement(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;asMap;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value" @@ -6603,10 +6596,10 @@ public class Test { } { // "com.google.common.collect;Multimaps;false;asMap;(Multimap);;MapValue of Argument[0];Element of MapValue of ReturnValue;value" - Map out = null; + Map out = null; Multimap in = (Multimap)ImmutableMultimap.of(null, source()); out = Multimaps.asMap(in); - sink(getElementDefault(getMapValue(out))); // $ hasValueFlow + sink(getElement(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;asMap;(SetMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value" @@ -6617,10 +6610,10 @@ public class Test { } { // "com.google.common.collect;Multimaps;false;asMap;(SetMultimap);;MapValue of Argument[0];Element of MapValue of ReturnValue;value" - Map out = null; + Map out = null; SetMultimap in = (SetMultimap)ImmutableSetMultimap.of(null, source()); out = Multimaps.asMap(in); - sink(getElementDefault(getMapValue(out))); // $ hasValueFlow + sink(getElement(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;asMap;(SortedSetMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value" @@ -6631,10 +6624,10 @@ public class Test { } { // "com.google.common.collect;Multimaps;false;asMap;(SortedSetMultimap);;MapValue of Argument[0];Element of MapValue of ReturnValue;value" - Map out = null; + Map out = null; SortedSetMultimap in = (SortedSetMultimap)TreeMultimap.create(ImmutableMultimap.of(null, (Comparable)source())); out = Multimaps.asMap(in); - sink(getElementDefault(getMapValue(out))); // $ hasValueFlow + sink(getElement(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Multimaps;false;filterEntries;(Multimap,Predicate);;MapKey of Argument[0];MapKey of ReturnValue;value" @@ -7045,7 +7038,7 @@ public class Test { { // "com.google.common.collect;Multiset;true;elementSet;();;Element of Argument[-1];Element of ReturnValue;value" ImmutableSortedSet out = null; - ImmutableSortedMultiset in = (ImmutableSortedMultiset)ImmutableSortedMultiset.of(source()); + ImmutableSortedMultiset in = (ImmutableSortedMultiset)ImmutableSortedMultiset.of((Comparable)source()); out = in.elementSet(); sink(getElement(out)); // $ hasValueFlow } @@ -7058,24 +7051,24 @@ public class Test { } { // "com.google.common.collect;Multiset;true;entrySet;();;Element of Argument[-1];Element of Element of ReturnValue;value" - Set out = null; + Set out = null; SortedMultiset in = (SortedMultiset)ImmutableSortedMultiset.of((Comparable)source()); out = in.entrySet(); - sink(getElementDefault(getElement(out))); // $ hasValueFlow + sink(getElement(out).getElement()); // $ hasValueFlow } { // "com.google.common.collect;Multiset;true;entrySet;();;Element of Argument[-1];Element of Element of ReturnValue;value" - Set out = null; + Set out = null; Multiset in = (Multiset)ImmutableMultiset.of(source()); out = in.entrySet(); - sink(getElementDefault(getElement(out))); // $ hasValueFlow + sink(getElement(out).getElement()); // $ hasValueFlow } { // "com.google.common.collect;Multiset;true;entrySet;();;Element of Argument[-1];Element of Element of ReturnValue;value" - ImmutableSet out = null; + ImmutableSet out = null; ImmutableMultiset in = (ImmutableMultiset)ImmutableMultiset.of(source()); out = in.entrySet(); - sink(getElementDefault(getElement(out))); // $ hasValueFlow + sink(getElement(out).getElement()); // $ hasValueFlow } { // "com.google.common.collect;Multiset;true;setCount;(Object,int);;Argument[0];Element of Argument[-1];value" @@ -7366,24 +7359,24 @@ public class Test { } { // "com.google.common.collect;Sets;false;cartesianProduct;(List);;Element of Element of Argument[0];Element of Element of ReturnValue;value" - Set out = null; - List in = (List)List.of(newWithElementDefault(source())); + Set out = null; + List in = (List)List.of(Set.of(source())); out = Sets.cartesianProduct(in); - sink(getElementDefault(getElement(out))); // $ hasValueFlow + sink(getElement(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;cartesianProduct;(Set[]);;Element of ArrayElement of Argument[0];Element of Element of ReturnValue;value" - Set out = null; - Set[] in = (Set[])new Set[]{(Set)newWithElementDefault(source())}; + Set out = null; + Set[] in = (Set[])new Set[]{Set.of(source())}; out = Sets.cartesianProduct(in); - sink(getElementDefault(getElement(out))); // $ hasValueFlow + sink(getElement(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;combinations;(Set,int);;Element of Argument[0];Element of Element of ReturnValue;value" - Set out = null; + Set out = null; Set in = (Set)Set.of(source()); out = Sets.combinations(in, 0); - sink(getElementDefault(getElement(out))); // $ hasValueFlow + sink(getElement(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;difference;(Set,Set);;Element of Argument[0];Element of ReturnValue;value" @@ -7485,10 +7478,10 @@ public class Test { } { // "com.google.common.collect;Sets;false;powerSet;(Set);;Element of Argument[0];Element of Element of ReturnValue;value" - Set out = null; + Set out = null; Set in = (Set)Set.of(source()); out = Sets.powerSet(in); - sink(getElementDefault(getElement(out))); // $ hasValueFlow + sink(getElement(getElement(out))); // $ hasValueFlow } { // "com.google.common.collect;Sets;false;subSet;(NavigableSet,Range);;Element of Argument[0];Element of ReturnValue;value" @@ -7562,66 +7555,66 @@ public class Test { } { // "com.google.common.collect;Table;true;cellSet;();;MapValue of Argument[-1];MapValue of Element of ReturnValue;value" - Set out = null; + Set out = null; Table in = (Table)newTable(null, null, source()); out = in.cellSet(); - sink(getMapValueDefault(getElement(out))); // $ hasValueFlow + sink(getElement(out).getValue()); // $ hasValueFlow } { // "com.google.common.collect;Table;true;cellSet;();;MapValue of Argument[-1];MapValue of Element of ReturnValue;value" - Set out = null; + Set out = null; ArrayTable in = (ArrayTable)ArrayTable.create(ImmutableTable.of(null, null, source())); out = in.cellSet(); - sink(getMapValueDefault(getElement(out))); // $ hasValueFlow + sink(getElement(out).getValue()); // $ hasValueFlow } { // "com.google.common.collect;Table;true;cellSet;();;MapValue of Argument[-1];MapValue of Element of ReturnValue;value" - ImmutableSet out = null; + ImmutableSet out = null; ImmutableTable in = (ImmutableTable)ImmutableTable.of(null, null, source()); out = in.cellSet(); - sink(getMapValueDefault(getElement(out))); // $ hasValueFlow + sink(getElement(out).getValue()); // $ hasValueFlow } { // "com.google.common.collect;Table;true;cellSet;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];SyntheticField[com.google.common.collect.Table.columnKey] of Element of ReturnValue;value" - Set out = null; + Set out = null; Table in = (Table)newTable(null, source(), null); out = in.cellSet(); - sink(getTable_columnKeyDefault(getElement(out))); // $ hasValueFlow + sink(getElement(out).getColumnKey()); // $ hasValueFlow } { // "com.google.common.collect;Table;true;cellSet;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];SyntheticField[com.google.common.collect.Table.columnKey] of Element of ReturnValue;value" - Set out = null; + Set out = null; ArrayTable in = (ArrayTable)ArrayTable.create(ImmutableTable.of(null, source(), null)); out = in.cellSet(); - sink(getTable_columnKeyDefault(getElement(out))); // $ hasValueFlow + sink(getElement(out).getColumnKey()); // $ hasValueFlow } { // "com.google.common.collect;Table;true;cellSet;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];SyntheticField[com.google.common.collect.Table.columnKey] of Element of ReturnValue;value" - ImmutableSet out = null; + ImmutableSet out = null; ImmutableTable in = (ImmutableTable)ImmutableTable.of(null, source(), null); out = in.cellSet(); - sink(getTable_columnKeyDefault(getElement(out))); // $ hasValueFlow + sink(getElement(out).getColumnKey()); // $ hasValueFlow } { // "com.google.common.collect;Table;true;cellSet;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];SyntheticField[com.google.common.collect.Table.rowKey] of Element of ReturnValue;value" - Set out = null; + Set out = null; Table in = (Table)newTable(source(), null, null); out = in.cellSet(); - sink(getTable_rowKeyDefault(getElement(out))); // $ hasValueFlow + sink(getElement(out).getRowKey()); // $ hasValueFlow } { // "com.google.common.collect;Table;true;cellSet;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];SyntheticField[com.google.common.collect.Table.rowKey] of Element of ReturnValue;value" - Set out = null; + Set out = null; ArrayTable in = (ArrayTable)ArrayTable.create(ImmutableTable.of(source(), null, null)); out = in.cellSet(); - sink(getTable_rowKeyDefault(getElement(out))); // $ hasValueFlow + sink(getElement(out).getRowKey()); // $ hasValueFlow } { // "com.google.common.collect;Table;true;cellSet;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];SyntheticField[com.google.common.collect.Table.rowKey] of Element of ReturnValue;value" - ImmutableSet out = null; + ImmutableSet out = null; ImmutableTable in = (ImmutableTable)ImmutableTable.of(source(), null, null); out = in.cellSet(); - sink(getTable_rowKeyDefault(getElement(out))); // $ hasValueFlow + sink(getElement(out).getRowKey()); // $ hasValueFlow } { // "com.google.common.collect;Table;true;column;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value" @@ -7688,24 +7681,24 @@ public class Test { } { // "com.google.common.collect;Table;true;columnMap;();;MapValue of Argument[-1];MapValue of MapValue of ReturnValue;value" - Map out = null; + Map out = null; Table in = (Table)newTable(null, null, source()); out = in.columnMap(); - sink(getMapValueDefault(getMapValue(out))); // $ hasValueFlow + sink(getMapValue(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;columnMap;();;MapValue of Argument[-1];MapValue of MapValue of ReturnValue;value" - Map out = null; + Map out = null; ArrayTable in = (ArrayTable)ArrayTable.create(ImmutableTable.of(null, null, source())); out = in.columnMap(); - sink(getMapValueDefault(getMapValue(out))); // $ hasValueFlow + sink(getMapValue(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;columnMap;();;MapValue of Argument[-1];MapValue of MapValue of ReturnValue;value" - ImmutableMap out = null; + ImmutableMap out = null; ImmutableTable in = (ImmutableTable)ImmutableTable.of(null, null, source()); out = in.columnMap(); - sink(getMapValueDefault(getMapValue(out))); // $ hasValueFlow + sink(getMapValue(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;columnMap;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];MapKey of ReturnValue;value" @@ -7730,24 +7723,24 @@ public class Test { } { // "com.google.common.collect;Table;true;columnMap;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];MapKey of MapValue of ReturnValue;value" - Map out = null; + Map out = null; Table in = (Table)newTable(source(), null, null); out = in.columnMap(); - sink(getMapKeyDefault(getMapValue(out))); // $ hasValueFlow + sink(getMapKey(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;columnMap;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];MapKey of MapValue of ReturnValue;value" - Map out = null; + Map out = null; ArrayTable in = (ArrayTable)ArrayTable.create(ImmutableTable.of(source(), null, null)); out = in.columnMap(); - sink(getMapKeyDefault(getMapValue(out))); // $ hasValueFlow + sink(getMapKey(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;columnMap;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];MapKey of MapValue of ReturnValue;value" - ImmutableMap out = null; + ImmutableMap out = null; ImmutableTable in = (ImmutableTable)ImmutableTable.of(source(), null, null); out = in.columnMap(); - sink(getMapKeyDefault(getMapValue(out))); // $ hasValueFlow + sink(getMapKey(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;get;(Object,Object);;MapValue of Argument[-1];ReturnValue;value" @@ -7759,7 +7752,7 @@ public class Test { { // "com.google.common.collect;Table;true;get;(Object,Object);;MapValue of Argument[-1];ReturnValue;value" Object out = null; - HashBasedTable in = (HashBasedTable)newWithMapValueDefault(source()); + HashBasedTable in = (HashBasedTable)HashBasedTable.create(ImmutableTable.of(null, null, source())); out = in.get(null, null); sink(out); // $ hasValueFlow } @@ -7913,7 +7906,7 @@ public class Test { { // "com.google.common.collect;Table;true;remove;(Object,Object);;MapValue of Argument[-1];ReturnValue;value" Object out = null; - HashBasedTable in = (HashBasedTable)newWithMapValueDefault(source()); + HashBasedTable in = (HashBasedTable)HashBasedTable.create(ImmutableTable.of(null, null, source())); out = in.remove(null, null); sink(out); // $ hasValueFlow } @@ -8017,73 +8010,73 @@ public class Test { } { // "com.google.common.collect;Table;true;rowMap;();;MapValue of Argument[-1];MapValue of MapValue of ReturnValue;value" - SortedMap out = null; + SortedMap out = null; TreeBasedTable in = (TreeBasedTable)newTable(null, null, source()); out = in.rowMap(); - sink(getMapValueDefault(getMapValue(out))); // $ hasValueFlow + sink(getMapValue(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;rowMap;();;MapValue of Argument[-1];MapValue of MapValue of ReturnValue;value" - SortedMap out = null; + SortedMap out = null; RowSortedTable in = (RowSortedTable)newTable(null, null, source()); out = in.rowMap(); - sink(getMapValueDefault(getMapValue(out))); // $ hasValueFlow + sink(getMapValue(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;rowMap;();;MapValue of Argument[-1];MapValue of MapValue of ReturnValue;value" - Map out = null; + Map out = null; Table in = (Table)newTable(null, null, source()); out = in.rowMap(); - sink(getMapValueDefault(getMapValue(out))); // $ hasValueFlow + sink(getMapValue(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;rowMap;();;MapValue of Argument[-1];MapValue of MapValue of ReturnValue;value" - Map out = null; + Map out = null; ArrayTable in = (ArrayTable)ArrayTable.create(ImmutableTable.of(null, null, source())); out = in.rowMap(); - sink(getMapValueDefault(getMapValue(out))); // $ hasValueFlow + sink(getMapValue(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;rowMap;();;MapValue of Argument[-1];MapValue of MapValue of ReturnValue;value" - ImmutableMap out = null; + ImmutableMap out = null; ImmutableTable in = (ImmutableTable)ImmutableTable.of(null, null, source()); out = in.rowMap(); - sink(getMapValueDefault(getMapValue(out))); // $ hasValueFlow + sink(getMapValue(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;rowMap;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];MapKey of MapValue of ReturnValue;value" - SortedMap out = null; + SortedMap out = null; TreeBasedTable in = (TreeBasedTable)newTable(null, source(), null); out = in.rowMap(); - sink(getMapKeyDefault(getMapValue(out))); // $ hasValueFlow + sink(getMapKey(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;rowMap;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];MapKey of MapValue of ReturnValue;value" - SortedMap out = null; + SortedMap out = null; RowSortedTable in = (RowSortedTable)newTable(null, source(), null); out = in.rowMap(); - sink(getMapKeyDefault(getMapValue(out))); // $ hasValueFlow + sink(getMapKey(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;rowMap;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];MapKey of MapValue of ReturnValue;value" - Map out = null; + Map out = null; Table in = (Table)newTable(null, source(), null); out = in.rowMap(); - sink(getMapKeyDefault(getMapValue(out))); // $ hasValueFlow + sink(getMapKey(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;rowMap;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];MapKey of MapValue of ReturnValue;value" - Map out = null; + Map out = null; ArrayTable in = (ArrayTable)ArrayTable.create(ImmutableTable.of(null, source(), null)); out = in.rowMap(); - sink(getMapKeyDefault(getMapValue(out))); // $ hasValueFlow + sink(getMapKey(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;rowMap;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];MapKey of MapValue of ReturnValue;value" - ImmutableMap out = null; + ImmutableMap out = null; ImmutableTable in = (ImmutableTable)ImmutableTable.of(null, source(), null); out = in.rowMap(); - sink(getMapKeyDefault(getMapValue(out))); // $ hasValueFlow + sink(getMapKey(getMapValue(out))); // $ hasValueFlow } { // "com.google.common.collect;Table;true;rowMap;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];MapKey of ReturnValue;value" @@ -8172,14 +8165,14 @@ public class Test { { // "com.google.common.collect;Tables;false;newCustomTable;(Map,Supplier);;MapKey of MapValue of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value" Table out = null; - Map in = (Map)Map.of(null, newWithMapKeyDefault(source())); + Map in = (Map)Map.of(null, Map.of(source(), null)); out = Tables.newCustomTable(in, null); sink(getTable_columnKey(out)); // $ hasValueFlow } { // "com.google.common.collect;Tables;false;newCustomTable;(Map,Supplier);;MapValue of MapValue of Argument[0];MapValue of ReturnValue;value" Table out = null; - Map in = (Map)Map.of(null, newWithMapValueDefault(source())); + Map in = (Map)Map.of(null, Map.of(null, source())); out = Tables.newCustomTable(in, null); sink(getMapValue(out)); // $ hasValueFlow } diff --git a/java/ql/test/library-tests/frameworks/guava/generated/collect/test.ql b/java/ql/test/library-tests/frameworks/guava/generated/collect/test.ql index 2d97fdf73d9..bd24d2a45b2 100644 --- a/java/ql/test/library-tests/frameworks/guava/generated/collect/test.ql +++ b/java/ql/test/library-tests/frameworks/guava/generated/collect/test.ql @@ -7,15 +7,8 @@ class SummaryModelTest extends SummaryModelCsv { [ //"package;type;overrides;name;signature;ext;inputspec;outputspec;kind", "generatedtest;Test;false;newWithElementDefault;(Object);;Argument[0];Element of ReturnValue;value", - "generatedtest;Test;false;getElementDefault;(Object);;Element of Argument[0];ReturnValue;value", "generatedtest;Test;false;newWithMapKeyDefault;(Object);;Argument[0];MapKey of ReturnValue;value", - "generatedtest;Test;false;getMapKeyDefault;(Object);;MapKey of Argument[0];ReturnValue;value", - "generatedtest;Test;false;newWithMapValueDefault;(Object);;Argument[0];MapValue of ReturnValue;value", - "generatedtest;Test;false;getMapValueDefault;(Object);;MapValue of Argument[0];ReturnValue;value", - "generatedtest;Test;false;getTable_rowKeyDefault;(Object);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];ReturnValue;value", - "generatedtest;Test;false;getTable_columnKeyDefault;(Object);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];ReturnValue;value", - "generatedtest;Test;false;getMapDifference_leftDefault;(Object);;SyntheticField[com.google.common.collect.MapDifference.left] of Argument[0];ReturnValue;value", - "generatedtest;Test;false;getMapDifference_rightDefault;(Object);;SyntheticField[com.google.common.collect.MapDifference.right] of Argument[0];ReturnValue;value" + "generatedtest;Test;false;newWithMapValueDefault;(Object);;Argument[0];MapValue of ReturnValue;value" ] } } From a83bb39d0fa5e1cdd129e6d0927272f5f5f9833f Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Tue, 21 Sep 2021 20:21:42 +0200 Subject: [PATCH 538/741] Python: Merge SQLAlchemy TextClause injection into `py/sql-injection` As discussed in a meeting today, this will end up presenting an query suite that's easier to use for customers. Since https://github.com/github/codeql/pull/6589 has JUST been merged, if we get this change in fast enough, no end-user will ever have run `py/sqlalchemy-textclause-injection` as part of LGTM.com or Code Scanning. --- ...add-SQLAlchemyTextClauseInjection-query.md | 2 - ...09-02-add-SQLAlchemyTextClauseInjection.md | 2 + .../dataflow/SQLAlchemyTextClause.qll | 35 ------------ .../SQLAlchemyTextClauseCustomizations.qll | 56 ------------------- .../dataflow/SqlInjectionCustomizations.qll | 8 +++ .../SQLAlchemyTextClauseInjection.qhelp | 53 ------------------ .../CWE-089/SQLAlchemyTextClauseInjection.ql | 23 -------- .../src/Security/CWE-089/SqlInjection.qhelp | 8 +++ .../sqlalchemy_textclause_injection.py | 34 ----------- .../SQLAlchemyTextClauseInjection.expected | 41 -------------- .../SQLAlchemyTextClauseInjection.qlref | 1 - .../SqlInjection.expected | 37 ++++++++++++ .../sqlalchemy_textclause.py} | 0 13 files changed, 55 insertions(+), 245 deletions(-) delete mode 100644 python/change-notes/2021-09-02-add-SQLAlchemyTextClauseInjection-query.md create mode 100644 python/change-notes/2021-09-02-add-SQLAlchemyTextClauseInjection.md delete mode 100644 python/ql/lib/semmle/python/security/dataflow/SQLAlchemyTextClause.qll delete mode 100644 python/ql/lib/semmle/python/security/dataflow/SQLAlchemyTextClauseCustomizations.qll delete mode 100644 python/ql/src/Security/CWE-089/SQLAlchemyTextClauseInjection.qhelp delete mode 100644 python/ql/src/Security/CWE-089/SQLAlchemyTextClauseInjection.ql delete mode 100644 python/ql/src/Security/CWE-089/examples/sqlalchemy_textclause_injection.py delete mode 100644 python/ql/test/query-tests/Security/CWE-089-SQLAlchemyTextClauseInjection/SQLAlchemyTextClauseInjection.expected delete mode 100644 python/ql/test/query-tests/Security/CWE-089-SQLAlchemyTextClauseInjection/SQLAlchemyTextClauseInjection.qlref rename python/ql/test/query-tests/Security/{CWE-089-SQLAlchemyTextClauseInjection/test.py => CWE-089-SqlInjection/sqlalchemy_textclause.py} (100%) diff --git a/python/change-notes/2021-09-02-add-SQLAlchemyTextClauseInjection-query.md b/python/change-notes/2021-09-02-add-SQLAlchemyTextClauseInjection-query.md deleted file mode 100644 index ad842e60b63..00000000000 --- a/python/change-notes/2021-09-02-add-SQLAlchemyTextClauseInjection-query.md +++ /dev/null @@ -1,2 +0,0 @@ -lgtm,codescanning -* Introduced a new query _SQLAlchemy TextClause built from user-controlled sources_ (`py/sqlalchemy-textclause-injection`) to alert if user-input is added to a TextClause from SQLAlchemy, since that can lead to SQL injection. diff --git a/python/change-notes/2021-09-02-add-SQLAlchemyTextClauseInjection.md b/python/change-notes/2021-09-02-add-SQLAlchemyTextClauseInjection.md new file mode 100644 index 00000000000..fec1e75e9a8 --- /dev/null +++ b/python/change-notes/2021-09-02-add-SQLAlchemyTextClauseInjection.md @@ -0,0 +1,2 @@ +lgtm,codescanning +* Expanded the query _SQL query built from user-controlled sources_ (`py/sql-injection`) to alert if user-input is added to a TextClause from SQLAlchemy, since that can lead to SQL injection. diff --git a/python/ql/lib/semmle/python/security/dataflow/SQLAlchemyTextClause.qll b/python/ql/lib/semmle/python/security/dataflow/SQLAlchemyTextClause.qll deleted file mode 100644 index a4e65fe3120..00000000000 --- a/python/ql/lib/semmle/python/security/dataflow/SQLAlchemyTextClause.qll +++ /dev/null @@ -1,35 +0,0 @@ -/** - * Provides a taint-tracking configuration for detecting "SQLAlchemy TextClause injection" vulnerabilities. - * - * Note, for performance reasons: only import this file if - * `SQLAlchemyTextClause::Configuration` is needed, otherwise - * `SQLAlchemyTextClauseCustomizations` should be imported instead. - */ - -private import python -import semmle.python.dataflow.new.DataFlow -import semmle.python.dataflow.new.TaintTracking - -/** - * Provides a taint-tracking configuration for detecting "SQLAlchemy TextClause injection" vulnerabilities. - */ -module SQLAlchemyTextClause { - import SQLAlchemyTextClauseCustomizations::SQLAlchemyTextClause - - /** - * A taint-tracking configuration for detecting "SQLAlchemy TextClause injection" vulnerabilities. - */ - class Configuration extends TaintTracking::Configuration { - Configuration() { this = "SQLAlchemyTextClause" } - - override predicate isSource(DataFlow::Node source) { source instanceof Source } - - override predicate isSink(DataFlow::Node sink) { sink instanceof Sink } - - override predicate isSanitizer(DataFlow::Node node) { node instanceof Sanitizer } - - override predicate isSanitizerGuard(DataFlow::BarrierGuard guard) { - guard instanceof SanitizerGuard - } - } -} diff --git a/python/ql/lib/semmle/python/security/dataflow/SQLAlchemyTextClauseCustomizations.qll b/python/ql/lib/semmle/python/security/dataflow/SQLAlchemyTextClauseCustomizations.qll deleted file mode 100644 index fa75a543ade..00000000000 --- a/python/ql/lib/semmle/python/security/dataflow/SQLAlchemyTextClauseCustomizations.qll +++ /dev/null @@ -1,56 +0,0 @@ -/** - * Provides default sources, sinks and sanitizers for detecting - * "SQLAlchemy TextClause injection" - * vulnerabilities, as well as extension points for adding your own. - */ - -private import python -private import semmle.python.dataflow.new.DataFlow -private import semmle.python.Concepts -private import semmle.python.dataflow.new.RemoteFlowSources -private import semmle.python.dataflow.new.BarrierGuards -private import semmle.python.frameworks.SqlAlchemy - -/** - * Provides default sources, sinks and sanitizers for detecting - * "SQLAlchemy TextClause injection" - * vulnerabilities, as well as extension points for adding your own. - */ -module SQLAlchemyTextClause { - /** - * A data flow source for "SQLAlchemy TextClause injection" vulnerabilities. - */ - abstract class Source extends DataFlow::Node { } - - /** - * A data flow sink for "SQLAlchemy TextClause injection" vulnerabilities. - */ - abstract class Sink extends DataFlow::Node { } - - /** - * A sanitizer for "SQLAlchemy TextClause injection" vulnerabilities. - */ - abstract class Sanitizer extends DataFlow::Node { } - - /** - * A sanitizer guard for "SQLAlchemy TextClause injection" vulnerabilities. - */ - abstract class SanitizerGuard extends DataFlow::BarrierGuard { } - - /** - * A source of remote user input, considered as a flow source. - */ - class RemoteFlowSourceAsSource extends Source, RemoteFlowSource { } - - /** - * The text argument of a SQLAlchemy TextClause construction, considered as a flow sink. - */ - class TextArgAsSink extends Sink { - TextArgAsSink() { this = any(SqlAlchemy::TextClause::TextClauseConstruction tcc).getTextArg() } - } - - /** - * A comparison with a constant string, considered as a sanitizer-guard. - */ - class StringConstCompareAsSanitizerGuard extends SanitizerGuard, StringConstCompare { } -} diff --git a/python/ql/lib/semmle/python/security/dataflow/SqlInjectionCustomizations.qll b/python/ql/lib/semmle/python/security/dataflow/SqlInjectionCustomizations.qll index 186ebd3189d..c132878951f 100644 --- a/python/ql/lib/semmle/python/security/dataflow/SqlInjectionCustomizations.qll +++ b/python/ql/lib/semmle/python/security/dataflow/SqlInjectionCustomizations.qll @@ -9,6 +9,7 @@ private import semmle.python.dataflow.new.DataFlow private import semmle.python.Concepts private import semmle.python.dataflow.new.RemoteFlowSources private import semmle.python.dataflow.new.BarrierGuards +private import semmle.python.frameworks.SqlAlchemy /** * Provides default sources, sinks and sanitizers for detecting @@ -48,6 +49,13 @@ module SqlInjection { SqlExecutionAsSink() { this = any(SqlExecution e).getSql() } } + /** + * The text argument of a SQLAlchemy TextClause construction, considered as a flow sink. + */ + class TextArgAsSink extends Sink { + TextArgAsSink() { this = any(SqlAlchemy::TextClause::TextClauseConstruction tcc).getTextArg() } + } + /** * A comparison with a constant string, considered as a sanitizer-guard. */ diff --git a/python/ql/src/Security/CWE-089/SQLAlchemyTextClauseInjection.qhelp b/python/ql/src/Security/CWE-089/SQLAlchemyTextClauseInjection.qhelp deleted file mode 100644 index 9ebc4a20b0a..00000000000 --- a/python/ql/src/Security/CWE-089/SQLAlchemyTextClauseInjection.qhelp +++ /dev/null @@ -1,53 +0,0 @@ - - - - -

    -The TextClause class in the SQLAlchemy PyPI package represents -a textual SQL string directly. If user-input is added to it without sufficient -sanitization, a user may be able to run malicious database queries, since the -TextClause is inserted directly into the final SQL. -

    -
    - - -

    -Don't allow user-input to be added to a TextClause, instead construct your -full query with constructs from the ORM, or use query parameters for user-input. -

    -
    - - -

    -In the following snippet, a user is fetched from the database using three -different queries. -

    - -

    -In the first case, the final query string is built by directly including a user-supplied -input. The parameter may include quote characters, so this code is vulnerable to a SQL -injection attack. -

    - -

    -In the second case, the query is built using ORM models, but part of it is using a -TextClause directly including a user-supplied input. Since the -TextClause is inserted directly into the final SQL, this code is vulnerable -to a SQL injection attack. -

    - -

    -In the third case, the query is built fully using the ORM models, so in the end, the -user-supplied input will be passed to the database using query parameters. The -database connector library will take care of escaping and inserting quotes as needed. -

    - - -
    - - -
  • Official documentation of the text parameter.
  • -
    -
    diff --git a/python/ql/src/Security/CWE-089/SQLAlchemyTextClauseInjection.ql b/python/ql/src/Security/CWE-089/SQLAlchemyTextClauseInjection.ql deleted file mode 100644 index 4e4f747bf20..00000000000 --- a/python/ql/src/Security/CWE-089/SQLAlchemyTextClauseInjection.ql +++ /dev/null @@ -1,23 +0,0 @@ -/** - * @name SQLAlchemy TextClause built from user-controlled sources - * @description Building a TextClause query from user-controlled sources is vulnerable to insertion of - * malicious SQL code by the user. - * @kind path-problem - * @problem.severity error - * @security-severity 8.8 - * @precision high - * @id py/sqlalchemy-textclause-injection - * @tags security - * external/cwe/cwe-089 - * external/owasp/owasp-a1 - */ - -import python -import semmle.python.security.dataflow.SQLAlchemyTextClause -import DataFlow::PathGraph - -from SQLAlchemyTextClause::Configuration config, DataFlow::PathNode source, DataFlow::PathNode sink -where config.hasFlowPath(source, sink) -select sink.getNode(), source, sink, - "This SQLAlchemy TextClause depends on $@, which could lead to SQL injection.", source.getNode(), - "a user-provided value" diff --git a/python/ql/src/Security/CWE-089/SqlInjection.qhelp b/python/ql/src/Security/CWE-089/SqlInjection.qhelp index 63941706e84..c4aa7cb6af6 100644 --- a/python/ql/src/Security/CWE-089/SqlInjection.qhelp +++ b/python/ql/src/Security/CWE-089/SqlInjection.qhelp @@ -9,6 +9,13 @@ If a database query (such as a SQL or NoSQL query) is built from user-provided data without sufficient sanitization, a user may be able to run malicious database queries.

    + +

    +This also includes using the TextClause class in the +SQLAlchemy PyPI package, +which is used to represent a literal SQL fragment and is inserted directly into the +final SQL when used in a query built using the ORM. +

    @@ -52,5 +59,6 @@ vulnerable to SQL injection attacks. In this example, if username w
  • Wikipedia: SQL injection.
  • OWASP: SQL Injection Prevention Cheat Sheet.
  • +
  • SQLAlchemy documentation for TextClause.
  • diff --git a/python/ql/src/Security/CWE-089/examples/sqlalchemy_textclause_injection.py b/python/ql/src/Security/CWE-089/examples/sqlalchemy_textclause_injection.py deleted file mode 100644 index 030c27202de..00000000000 --- a/python/ql/src/Security/CWE-089/examples/sqlalchemy_textclause_injection.py +++ /dev/null @@ -1,34 +0,0 @@ -from flask import Flask, request -import sqlalchemy -import sqlalchemy.orm - -app = Flask(__name__) -engine = sqlalchemy.create_engine(...) -Base = sqlalchemy.orm.declarative_base() - - -class User(Base): - __tablename__ = "users" - - id = sqlalchemy.Column(sqlalchemy.Integer, primary_key=True) - username = sqlalchemy.Column(sqlalchemy.String) - - -@app.route("/users/") -def show_user(username): - session = sqlalchemy.orm.Session(engine) - - # BAD, normal SQL injection - stmt = sqlalchemy.text("SELECT * FROM users WHERE username = '{}'".format(username)) - results = session.execute(stmt).fetchall() - - # BAD, allows SQL injection - username_formatted_for_sql = sqlalchemy.text("'{}'".format(username)) - stmt = sqlalchemy.select(User).where(User.username == username_formatted_for_sql) - results = session.execute(stmt).scalars().all() - - # GOOD, does not allow for SQL injection - stmt = sqlalchemy.select(User).where(User.username == username) - results = session.execute(stmt).scalars().all() - - ... diff --git a/python/ql/test/query-tests/Security/CWE-089-SQLAlchemyTextClauseInjection/SQLAlchemyTextClauseInjection.expected b/python/ql/test/query-tests/Security/CWE-089-SQLAlchemyTextClauseInjection/SQLAlchemyTextClauseInjection.expected deleted file mode 100644 index 29ee6370c3a..00000000000 --- a/python/ql/test/query-tests/Security/CWE-089-SQLAlchemyTextClauseInjection/SQLAlchemyTextClauseInjection.expected +++ /dev/null @@ -1,41 +0,0 @@ -edges -| test.py:23:15:23:22 | ControlFlowNode for username | test.py:27:28:27:87 | ControlFlowNode for Attribute() | -| test.py:23:15:23:22 | ControlFlowNode for username | test.py:31:50:31:72 | ControlFlowNode for Attribute() | -| test.py:23:15:23:22 | ControlFlowNode for username | test.py:41:26:41:33 | ControlFlowNode for username | -| test.py:23:15:23:22 | ControlFlowNode for username | test.py:42:31:42:38 | ControlFlowNode for username | -| test.py:23:15:23:22 | ControlFlowNode for username | test.py:43:30:43:37 | ControlFlowNode for username | -| test.py:23:15:23:22 | ControlFlowNode for username | test.py:44:35:44:42 | ControlFlowNode for username | -| test.py:23:15:23:22 | ControlFlowNode for username | test.py:45:41:45:48 | ControlFlowNode for username | -| test.py:23:15:23:22 | ControlFlowNode for username | test.py:46:46:46:53 | ControlFlowNode for username | -| test.py:23:15:23:22 | ControlFlowNode for username | test.py:47:47:47:54 | ControlFlowNode for username | -| test.py:23:15:23:22 | ControlFlowNode for username | test.py:48:52:48:59 | ControlFlowNode for username | -| test.py:23:15:23:22 | ControlFlowNode for username | test.py:50:18:50:25 | ControlFlowNode for username | -| test.py:23:15:23:22 | ControlFlowNode for username | test.py:51:24:51:31 | ControlFlowNode for username | -nodes -| test.py:23:15:23:22 | ControlFlowNode for username | semmle.label | ControlFlowNode for username | -| test.py:27:28:27:87 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | -| test.py:31:50:31:72 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | -| test.py:41:26:41:33 | ControlFlowNode for username | semmle.label | ControlFlowNode for username | -| test.py:42:31:42:38 | ControlFlowNode for username | semmle.label | ControlFlowNode for username | -| test.py:43:30:43:37 | ControlFlowNode for username | semmle.label | ControlFlowNode for username | -| test.py:44:35:44:42 | ControlFlowNode for username | semmle.label | ControlFlowNode for username | -| test.py:45:41:45:48 | ControlFlowNode for username | semmle.label | ControlFlowNode for username | -| test.py:46:46:46:53 | ControlFlowNode for username | semmle.label | ControlFlowNode for username | -| test.py:47:47:47:54 | ControlFlowNode for username | semmle.label | ControlFlowNode for username | -| test.py:48:52:48:59 | ControlFlowNode for username | semmle.label | ControlFlowNode for username | -| test.py:50:18:50:25 | ControlFlowNode for username | semmle.label | ControlFlowNode for username | -| test.py:51:24:51:31 | ControlFlowNode for username | semmle.label | ControlFlowNode for username | -subpaths -#select -| test.py:27:28:27:87 | ControlFlowNode for Attribute() | test.py:23:15:23:22 | ControlFlowNode for username | test.py:27:28:27:87 | ControlFlowNode for Attribute() | This SQLAlchemy TextClause depends on $@, which could lead to SQL injection. | test.py:23:15:23:22 | ControlFlowNode for username | a user-provided value | -| test.py:31:50:31:72 | ControlFlowNode for Attribute() | test.py:23:15:23:22 | ControlFlowNode for username | test.py:31:50:31:72 | ControlFlowNode for Attribute() | This SQLAlchemy TextClause depends on $@, which could lead to SQL injection. | test.py:23:15:23:22 | ControlFlowNode for username | a user-provided value | -| test.py:41:26:41:33 | ControlFlowNode for username | test.py:23:15:23:22 | ControlFlowNode for username | test.py:41:26:41:33 | ControlFlowNode for username | This SQLAlchemy TextClause depends on $@, which could lead to SQL injection. | test.py:23:15:23:22 | ControlFlowNode for username | a user-provided value | -| test.py:42:31:42:38 | ControlFlowNode for username | test.py:23:15:23:22 | ControlFlowNode for username | test.py:42:31:42:38 | ControlFlowNode for username | This SQLAlchemy TextClause depends on $@, which could lead to SQL injection. | test.py:23:15:23:22 | ControlFlowNode for username | a user-provided value | -| test.py:43:30:43:37 | ControlFlowNode for username | test.py:23:15:23:22 | ControlFlowNode for username | test.py:43:30:43:37 | ControlFlowNode for username | This SQLAlchemy TextClause depends on $@, which could lead to SQL injection. | test.py:23:15:23:22 | ControlFlowNode for username | a user-provided value | -| test.py:44:35:44:42 | ControlFlowNode for username | test.py:23:15:23:22 | ControlFlowNode for username | test.py:44:35:44:42 | ControlFlowNode for username | This SQLAlchemy TextClause depends on $@, which could lead to SQL injection. | test.py:23:15:23:22 | ControlFlowNode for username | a user-provided value | -| test.py:45:41:45:48 | ControlFlowNode for username | test.py:23:15:23:22 | ControlFlowNode for username | test.py:45:41:45:48 | ControlFlowNode for username | This SQLAlchemy TextClause depends on $@, which could lead to SQL injection. | test.py:23:15:23:22 | ControlFlowNode for username | a user-provided value | -| test.py:46:46:46:53 | ControlFlowNode for username | test.py:23:15:23:22 | ControlFlowNode for username | test.py:46:46:46:53 | ControlFlowNode for username | This SQLAlchemy TextClause depends on $@, which could lead to SQL injection. | test.py:23:15:23:22 | ControlFlowNode for username | a user-provided value | -| test.py:47:47:47:54 | ControlFlowNode for username | test.py:23:15:23:22 | ControlFlowNode for username | test.py:47:47:47:54 | ControlFlowNode for username | This SQLAlchemy TextClause depends on $@, which could lead to SQL injection. | test.py:23:15:23:22 | ControlFlowNode for username | a user-provided value | -| test.py:48:52:48:59 | ControlFlowNode for username | test.py:23:15:23:22 | ControlFlowNode for username | test.py:48:52:48:59 | ControlFlowNode for username | This SQLAlchemy TextClause depends on $@, which could lead to SQL injection. | test.py:23:15:23:22 | ControlFlowNode for username | a user-provided value | -| test.py:50:18:50:25 | ControlFlowNode for username | test.py:23:15:23:22 | ControlFlowNode for username | test.py:50:18:50:25 | ControlFlowNode for username | This SQLAlchemy TextClause depends on $@, which could lead to SQL injection. | test.py:23:15:23:22 | ControlFlowNode for username | a user-provided value | -| test.py:51:24:51:31 | ControlFlowNode for username | test.py:23:15:23:22 | ControlFlowNode for username | test.py:51:24:51:31 | ControlFlowNode for username | This SQLAlchemy TextClause depends on $@, which could lead to SQL injection. | test.py:23:15:23:22 | ControlFlowNode for username | a user-provided value | diff --git a/python/ql/test/query-tests/Security/CWE-089-SQLAlchemyTextClauseInjection/SQLAlchemyTextClauseInjection.qlref b/python/ql/test/query-tests/Security/CWE-089-SQLAlchemyTextClauseInjection/SQLAlchemyTextClauseInjection.qlref deleted file mode 100644 index ae8c3cc69b6..00000000000 --- a/python/ql/test/query-tests/Security/CWE-089-SQLAlchemyTextClauseInjection/SQLAlchemyTextClauseInjection.qlref +++ /dev/null @@ -1 +0,0 @@ -Security/CWE-089/SQLAlchemyTextClauseInjection.ql diff --git a/python/ql/test/query-tests/Security/CWE-089-SqlInjection/SqlInjection.expected b/python/ql/test/query-tests/Security/CWE-089-SqlInjection/SqlInjection.expected index 61c181ab754..ed4c3e3d313 100644 --- a/python/ql/test/query-tests/Security/CWE-089-SqlInjection/SqlInjection.expected +++ b/python/ql/test/query-tests/Security/CWE-089-SqlInjection/SqlInjection.expected @@ -3,15 +3,52 @@ edges | sql_injection.py:14:15:14:22 | ControlFlowNode for username | sql_injection.py:24:38:24:95 | ControlFlowNode for BinaryExpr | | sql_injection.py:14:15:14:22 | ControlFlowNode for username | sql_injection.py:25:26:25:83 | ControlFlowNode for BinaryExpr | | sql_injection.py:14:15:14:22 | ControlFlowNode for username | sql_injection.py:26:28:26:85 | ControlFlowNode for BinaryExpr | +| sqlalchemy_textclause.py:23:15:23:22 | ControlFlowNode for username | sqlalchemy_textclause.py:27:28:27:87 | ControlFlowNode for Attribute() | +| sqlalchemy_textclause.py:23:15:23:22 | ControlFlowNode for username | sqlalchemy_textclause.py:31:50:31:72 | ControlFlowNode for Attribute() | +| sqlalchemy_textclause.py:23:15:23:22 | ControlFlowNode for username | sqlalchemy_textclause.py:41:26:41:33 | ControlFlowNode for username | +| sqlalchemy_textclause.py:23:15:23:22 | ControlFlowNode for username | sqlalchemy_textclause.py:42:31:42:38 | ControlFlowNode for username | +| sqlalchemy_textclause.py:23:15:23:22 | ControlFlowNode for username | sqlalchemy_textclause.py:43:30:43:37 | ControlFlowNode for username | +| sqlalchemy_textclause.py:23:15:23:22 | ControlFlowNode for username | sqlalchemy_textclause.py:44:35:44:42 | ControlFlowNode for username | +| sqlalchemy_textclause.py:23:15:23:22 | ControlFlowNode for username | sqlalchemy_textclause.py:45:41:45:48 | ControlFlowNode for username | +| sqlalchemy_textclause.py:23:15:23:22 | ControlFlowNode for username | sqlalchemy_textclause.py:46:46:46:53 | ControlFlowNode for username | +| sqlalchemy_textclause.py:23:15:23:22 | ControlFlowNode for username | sqlalchemy_textclause.py:47:47:47:54 | ControlFlowNode for username | +| sqlalchemy_textclause.py:23:15:23:22 | ControlFlowNode for username | sqlalchemy_textclause.py:48:52:48:59 | ControlFlowNode for username | +| sqlalchemy_textclause.py:23:15:23:22 | ControlFlowNode for username | sqlalchemy_textclause.py:50:18:50:25 | ControlFlowNode for username | +| sqlalchemy_textclause.py:23:15:23:22 | ControlFlowNode for username | sqlalchemy_textclause.py:51:24:51:31 | ControlFlowNode for username | nodes | sql_injection.py:14:15:14:22 | ControlFlowNode for username | semmle.label | ControlFlowNode for username | | sql_injection.py:21:24:21:77 | ControlFlowNode for BinaryExpr | semmle.label | ControlFlowNode for BinaryExpr | | sql_injection.py:24:38:24:95 | ControlFlowNode for BinaryExpr | semmle.label | ControlFlowNode for BinaryExpr | | sql_injection.py:25:26:25:83 | ControlFlowNode for BinaryExpr | semmle.label | ControlFlowNode for BinaryExpr | | sql_injection.py:26:28:26:85 | ControlFlowNode for BinaryExpr | semmle.label | ControlFlowNode for BinaryExpr | +| sqlalchemy_textclause.py:23:15:23:22 | ControlFlowNode for username | semmle.label | ControlFlowNode for username | +| sqlalchemy_textclause.py:27:28:27:87 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | +| sqlalchemy_textclause.py:31:50:31:72 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | +| sqlalchemy_textclause.py:41:26:41:33 | ControlFlowNode for username | semmle.label | ControlFlowNode for username | +| sqlalchemy_textclause.py:42:31:42:38 | ControlFlowNode for username | semmle.label | ControlFlowNode for username | +| sqlalchemy_textclause.py:43:30:43:37 | ControlFlowNode for username | semmle.label | ControlFlowNode for username | +| sqlalchemy_textclause.py:44:35:44:42 | ControlFlowNode for username | semmle.label | ControlFlowNode for username | +| sqlalchemy_textclause.py:45:41:45:48 | ControlFlowNode for username | semmle.label | ControlFlowNode for username | +| sqlalchemy_textclause.py:46:46:46:53 | ControlFlowNode for username | semmle.label | ControlFlowNode for username | +| sqlalchemy_textclause.py:47:47:47:54 | ControlFlowNode for username | semmle.label | ControlFlowNode for username | +| sqlalchemy_textclause.py:48:52:48:59 | ControlFlowNode for username | semmle.label | ControlFlowNode for username | +| sqlalchemy_textclause.py:50:18:50:25 | ControlFlowNode for username | semmle.label | ControlFlowNode for username | +| sqlalchemy_textclause.py:51:24:51:31 | ControlFlowNode for username | semmle.label | ControlFlowNode for username | subpaths #select | sql_injection.py:21:24:21:77 | ControlFlowNode for BinaryExpr | sql_injection.py:14:15:14:22 | ControlFlowNode for username | sql_injection.py:21:24:21:77 | ControlFlowNode for BinaryExpr | This SQL query depends on $@. | sql_injection.py:14:15:14:22 | ControlFlowNode for username | a user-provided value | | sql_injection.py:24:38:24:95 | ControlFlowNode for BinaryExpr | sql_injection.py:14:15:14:22 | ControlFlowNode for username | sql_injection.py:24:38:24:95 | ControlFlowNode for BinaryExpr | This SQL query depends on $@. | sql_injection.py:14:15:14:22 | ControlFlowNode for username | a user-provided value | | sql_injection.py:25:26:25:83 | ControlFlowNode for BinaryExpr | sql_injection.py:14:15:14:22 | ControlFlowNode for username | sql_injection.py:25:26:25:83 | ControlFlowNode for BinaryExpr | This SQL query depends on $@. | sql_injection.py:14:15:14:22 | ControlFlowNode for username | a user-provided value | | sql_injection.py:26:28:26:85 | ControlFlowNode for BinaryExpr | sql_injection.py:14:15:14:22 | ControlFlowNode for username | sql_injection.py:26:28:26:85 | ControlFlowNode for BinaryExpr | This SQL query depends on $@. | sql_injection.py:14:15:14:22 | ControlFlowNode for username | a user-provided value | +| sqlalchemy_textclause.py:27:28:27:87 | ControlFlowNode for Attribute() | sqlalchemy_textclause.py:23:15:23:22 | ControlFlowNode for username | sqlalchemy_textclause.py:27:28:27:87 | ControlFlowNode for Attribute() | This SQL query depends on $@. | sqlalchemy_textclause.py:23:15:23:22 | ControlFlowNode for username | a user-provided value | +| sqlalchemy_textclause.py:31:50:31:72 | ControlFlowNode for Attribute() | sqlalchemy_textclause.py:23:15:23:22 | ControlFlowNode for username | sqlalchemy_textclause.py:31:50:31:72 | ControlFlowNode for Attribute() | This SQL query depends on $@. | sqlalchemy_textclause.py:23:15:23:22 | ControlFlowNode for username | a user-provided value | +| sqlalchemy_textclause.py:41:26:41:33 | ControlFlowNode for username | sqlalchemy_textclause.py:23:15:23:22 | ControlFlowNode for username | sqlalchemy_textclause.py:41:26:41:33 | ControlFlowNode for username | This SQL query depends on $@. | sqlalchemy_textclause.py:23:15:23:22 | ControlFlowNode for username | a user-provided value | +| sqlalchemy_textclause.py:42:31:42:38 | ControlFlowNode for username | sqlalchemy_textclause.py:23:15:23:22 | ControlFlowNode for username | sqlalchemy_textclause.py:42:31:42:38 | ControlFlowNode for username | This SQL query depends on $@. | sqlalchemy_textclause.py:23:15:23:22 | ControlFlowNode for username | a user-provided value | +| sqlalchemy_textclause.py:43:30:43:37 | ControlFlowNode for username | sqlalchemy_textclause.py:23:15:23:22 | ControlFlowNode for username | sqlalchemy_textclause.py:43:30:43:37 | ControlFlowNode for username | This SQL query depends on $@. | sqlalchemy_textclause.py:23:15:23:22 | ControlFlowNode for username | a user-provided value | +| sqlalchemy_textclause.py:44:35:44:42 | ControlFlowNode for username | sqlalchemy_textclause.py:23:15:23:22 | ControlFlowNode for username | sqlalchemy_textclause.py:44:35:44:42 | ControlFlowNode for username | This SQL query depends on $@. | sqlalchemy_textclause.py:23:15:23:22 | ControlFlowNode for username | a user-provided value | +| sqlalchemy_textclause.py:45:41:45:48 | ControlFlowNode for username | sqlalchemy_textclause.py:23:15:23:22 | ControlFlowNode for username | sqlalchemy_textclause.py:45:41:45:48 | ControlFlowNode for username | This SQL query depends on $@. | sqlalchemy_textclause.py:23:15:23:22 | ControlFlowNode for username | a user-provided value | +| sqlalchemy_textclause.py:46:46:46:53 | ControlFlowNode for username | sqlalchemy_textclause.py:23:15:23:22 | ControlFlowNode for username | sqlalchemy_textclause.py:46:46:46:53 | ControlFlowNode for username | This SQL query depends on $@. | sqlalchemy_textclause.py:23:15:23:22 | ControlFlowNode for username | a user-provided value | +| sqlalchemy_textclause.py:47:47:47:54 | ControlFlowNode for username | sqlalchemy_textclause.py:23:15:23:22 | ControlFlowNode for username | sqlalchemy_textclause.py:47:47:47:54 | ControlFlowNode for username | This SQL query depends on $@. | sqlalchemy_textclause.py:23:15:23:22 | ControlFlowNode for username | a user-provided value | +| sqlalchemy_textclause.py:48:52:48:59 | ControlFlowNode for username | sqlalchemy_textclause.py:23:15:23:22 | ControlFlowNode for username | sqlalchemy_textclause.py:48:52:48:59 | ControlFlowNode for username | This SQL query depends on $@. | sqlalchemy_textclause.py:23:15:23:22 | ControlFlowNode for username | a user-provided value | +| sqlalchemy_textclause.py:50:18:50:25 | ControlFlowNode for username | sqlalchemy_textclause.py:23:15:23:22 | ControlFlowNode for username | sqlalchemy_textclause.py:50:18:50:25 | ControlFlowNode for username | This SQL query depends on $@. | sqlalchemy_textclause.py:23:15:23:22 | ControlFlowNode for username | a user-provided value | +| sqlalchemy_textclause.py:51:24:51:31 | ControlFlowNode for username | sqlalchemy_textclause.py:23:15:23:22 | ControlFlowNode for username | sqlalchemy_textclause.py:51:24:51:31 | ControlFlowNode for username | This SQL query depends on $@. | sqlalchemy_textclause.py:23:15:23:22 | ControlFlowNode for username | a user-provided value | diff --git a/python/ql/test/query-tests/Security/CWE-089-SQLAlchemyTextClauseInjection/test.py b/python/ql/test/query-tests/Security/CWE-089-SqlInjection/sqlalchemy_textclause.py similarity index 100% rename from python/ql/test/query-tests/Security/CWE-089-SQLAlchemyTextClauseInjection/test.py rename to python/ql/test/query-tests/Security/CWE-089-SqlInjection/sqlalchemy_textclause.py From d44f2793396fa5db45e3eb5af1d28ba56b8e7f17 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Tue, 21 Sep 2021 20:35:03 +0200 Subject: [PATCH 539/741] Python: Fix `.qhelp` --- python/ql/src/Security/CWE-089/SqlInjection.qhelp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/ql/src/Security/CWE-089/SqlInjection.qhelp b/python/ql/src/Security/CWE-089/SqlInjection.qhelp index c4aa7cb6af6..05ef88a66e9 100644 --- a/python/ql/src/Security/CWE-089/SqlInjection.qhelp +++ b/python/ql/src/Security/CWE-089/SqlInjection.qhelp @@ -12,7 +12,7 @@ may be able to run malicious database queries.

    This also includes using the TextClause class in the -SQLAlchemy PyPI package, +SQLAlchemy PyPI package, which is used to represent a literal SQL fragment and is inserted directly into the final SQL when used in a query built using the ORM.

    From d6fd83dd6cd92e0ba9950138d88fbdb315191725 Mon Sep 17 00:00:00 2001 From: Robert Marsh Date: Tue, 21 Sep 2021 16:32:09 -0700 Subject: [PATCH 540/741] C++: move resolveCall to its own file for perf This avoids a performance issue in DataFlowImpl::localFlowStep when the DataFlow::Configuration subclasses in DefaultTaintTracking are active in the same query as other Configuration subclasses. ResolveCall.qll is kept internal for the moment. --- .../cpp/ir/dataflow/DefaultTaintTracking.qll | 16 +------------ .../cpp/ir/dataflow/internal/ResolveCall.qll | 23 +++++++++++++++++++ .../cpp/security/FunctionWithWrappers.qll | 2 +- 3 files changed, 25 insertions(+), 16 deletions(-) create mode 100644 cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/ResolveCall.qll diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/DefaultTaintTracking.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/DefaultTaintTracking.qll index 49d11a7e3cc..84a40eedba1 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/DefaultTaintTracking.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/DefaultTaintTracking.qll @@ -4,7 +4,7 @@ private import semmle.code.cpp.ir.dataflow.DataFlow private import semmle.code.cpp.ir.dataflow.internal.DataFlowUtil private import semmle.code.cpp.ir.dataflow.DataFlow3 private import semmle.code.cpp.ir.IR -private import semmle.code.cpp.ir.dataflow.internal.DataFlowDispatch as Dispatch +private import semmle.code.cpp.ir.dataflow.internal.ResolveCall private import semmle.code.cpp.controlflow.IRGuards private import semmle.code.cpp.models.interfaces.Taint private import semmle.code.cpp.models.interfaces.DataFlow @@ -355,20 +355,6 @@ predicate taintedIncludingGlobalVars(Expr source, Element tainted, string global */ GlobalOrNamespaceVariable globalVarFromId(string id) { id = result.getQualifiedName() } -/** - * Resolve potential target function(s) for `call`. - * - * If `call` is a call through a function pointer (`ExprCall`) or - * targets a virtual method, simple data flow analysis is performed - * in order to identify target(s). - */ -Function resolveCall(Call call) { - exists(CallInstruction callInstruction | - callInstruction.getAST() = call and - result = Dispatch::viableCallable(callInstruction) - ) -} - /** * Provides definitions for augmenting source/sink pairs with data-flow paths * between them. From a `@kind path-problem` query, import this module in the diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/ResolveCall.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/ResolveCall.qll new file mode 100644 index 00000000000..38f632e1d05 --- /dev/null +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/ResolveCall.qll @@ -0,0 +1,23 @@ +/** + * Provides a predicate for non-contextual virtual dispatch and function + * pointer resolution, built on top of the `DataFlowDispatch` library. + */ + +import cpp +private import semmle.code.cpp.ir.ValueNumbering +private import DataFlowDispatch +private import semmle.code.cpp.ir.IR + +/** + * Resolve potential target function(s) for `call`. + * + * If `call` is a call through a function pointer (`ExprCall`) or + * targets a virtual method, simple data flow analysis is performed + * in order to identify target(s). + */ +Function resolveCall(Call call) { + exists(CallInstruction callInstruction | + callInstruction.getAST() = call and + result = viableCallable(callInstruction) + ) +} diff --git a/cpp/ql/lib/semmle/code/cpp/security/FunctionWithWrappers.qll b/cpp/ql/lib/semmle/code/cpp/security/FunctionWithWrappers.qll index 5451011b351..15a3ffdc3c5 100644 --- a/cpp/ql/lib/semmle/code/cpp/security/FunctionWithWrappers.qll +++ b/cpp/ql/lib/semmle/code/cpp/security/FunctionWithWrappers.qll @@ -17,7 +17,7 @@ import cpp import PrintfLike -private import TaintTracking +private import semmle.code.cpp.ir.dataflow.internal.ResolveCall bindingset[index] private string toCause(Function func, int index) { From 3108817717d6ef4ce97c7a0b4d7ad2f89dcd7b41 Mon Sep 17 00:00:00 2001 From: Robert Marsh Date: Tue, 21 Sep 2021 17:34:01 -0700 Subject: [PATCH 541/741] C++: Add additional functions to the SQL models --- .../code/cpp/models/implementations/MySql.qll | 26 ++++++++++++++++++- .../cpp/models/implementations/SqLite3.qll | 15 ++++++++++- 2 files changed, 39 insertions(+), 2 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/models/implementations/MySql.qll b/cpp/ql/lib/semmle/code/cpp/models/implementations/MySql.qll index 7f664c23d3e..ca5d7020158 100644 --- a/cpp/ql/lib/semmle/code/cpp/models/implementations/MySql.qll +++ b/cpp/ql/lib/semmle/code/cpp/models/implementations/MySql.qll @@ -1,8 +1,32 @@ +/** + * Provides implementation classes modeling the MySql C API. + * See `semmle.code.cpp.models.Models` for usage information. + */ + private import semmle.code.cpp.models.interfaces.Sql private import semmle.code.cpp.models.interfaces.FunctionInputsAndOutputs +/** + * The `mysql_query` family of functions from the MySQL C API. + */ private class MySqlExecutionFunction extends SqlExecutionFunction { - MySqlExecutionFunction() { this.hasName(["mysql_query", "mysql_real_query"]) } + MySqlExecutionFunction() { + this.hasName(["mysql_query", "mysql_real_query", "mysql_real_query_nonblocking"]) + } override predicate hasSqlArgument(FunctionInput input) { input.isParameterDeref(1) } } + +/** + * The `mysql_real_escape_string` family of functions from the MySQL C API. + */ +private class MySqlBarrierFunction extends SqlBarrierFunction { + MySqlBarrierFunction() { + this.hasName(["mysql_real_escape_string", "mysql_real_escape_string_quote"]) + } + + override predicate barrierSqlArgument(FunctionInput input, FunctionOutput output) { + input.isParameterDeref(2) and + output.isParameterDeref(1) + } +} diff --git a/cpp/ql/lib/semmle/code/cpp/models/implementations/SqLite3.qll b/cpp/ql/lib/semmle/code/cpp/models/implementations/SqLite3.qll index 122e9af8064..d65df9a27ed 100644 --- a/cpp/ql/lib/semmle/code/cpp/models/implementations/SqLite3.qll +++ b/cpp/ql/lib/semmle/code/cpp/models/implementations/SqLite3.qll @@ -1,8 +1,21 @@ +/** + * Provides implementation classes modeling the SQLite C API. + * See `semmle.code.cpp.models.Models` for usage information. + */ + private import semmle.code.cpp.models.interfaces.Sql private import semmle.code.cpp.models.interfaces.FunctionInputsAndOutputs +/** + * The `sqlite3_exec` and `sqlite3_prepare` families of functions from the SQLite C API. + */ private class SqLite3ExecutionFunction extends SqlExecutionFunction { - SqLite3ExecutionFunction() { this.hasName("sqlite3_exec") } + SqLite3ExecutionFunction() { + this.hasName([ + "sqlite3_exec", "sqlite3_prepare", "sqlite3_prepare_v2", "sqlite3_prepare_v3", + "sqlite3_prepare16", "sqlite3_prepare16_v2", "sqlite3_prepare16_v3" + ]) + } override predicate hasSqlArgument(FunctionInput input) { input.isParameterDeref(1) } } From 364dab699006ad2323977a175a000f0abf2e136b Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Wed, 22 Sep 2021 09:43:56 +0200 Subject: [PATCH 542/741] Remove `CODEQL_REDUCE_FILES_FOLDERS_RELATIONS` --- csharp/autobuilder/Semmle.Autobuild.Shared/BuildActions.cs | 1 - csharp/codeql-extractor.yml | 1 - .../extractor/src/com/semmle/js/extractor/test/TrapTests.java | 4 ---- 3 files changed, 6 deletions(-) diff --git a/csharp/autobuilder/Semmle.Autobuild.Shared/BuildActions.cs b/csharp/autobuilder/Semmle.Autobuild.Shared/BuildActions.cs index 265090390a7..1cf1d6253a5 100644 --- a/csharp/autobuilder/Semmle.Autobuild.Shared/BuildActions.cs +++ b/csharp/autobuilder/Semmle.Autobuild.Shared/BuildActions.cs @@ -165,7 +165,6 @@ namespace Semmle.Autobuild.Shared { if (environment is not null) environment.ForEach(kvp => pi.Environment[kvp.Key] = kvp.Value); - pi.Environment["CODEQL_REDUCE_FILES_FOLDERS_RELATIONS"] = "true"; } return pi; } diff --git a/csharp/codeql-extractor.yml b/csharp/codeql-extractor.yml index 5faa2ef7c25..f346663157a 100644 --- a/csharp/codeql-extractor.yml +++ b/csharp/codeql-extractor.yml @@ -10,7 +10,6 @@ extra_env_vars: CORECLR_ENABLE_PROFILING: "1" CORECLR_PROFILER: "{A3C70A64-7D41-4A94-A3F6-FD47D9259997}" CORECLR_PROFILER_PATH_64: "${env.CODEQL_EXTRACTOR_CSHARP_ROOT}/tools/${env.CODEQL_PLATFORM}/clrtracer64${env.CODEQL_PLATFORM_DLL_EXTENSION}" - CODEQL_REDUCE_FILES_FOLDERS_RELATIONS: "true" file_types: - name: cs display_name: C# sources diff --git a/javascript/extractor/src/com/semmle/js/extractor/test/TrapTests.java b/javascript/extractor/src/com/semmle/js/extractor/test/TrapTests.java index aa2b3894052..ae3a28cbc35 100644 --- a/javascript/extractor/src/com/semmle/js/extractor/test/TrapTests.java +++ b/javascript/extractor/src/com/semmle/js/extractor/test/TrapTests.java @@ -142,10 +142,6 @@ public class TrapTests { options.add(inputFile.getAbsolutePath()); } - LinkedHashMap vars = new LinkedHashMap<>(); - vars.put("CODEQL_REDUCE_FILES_FOLDERS_RELATIONS", "true"); - Env.systemEnv().pushEnvironmentContext(vars); - final List> expectedVsActual = new ArrayList>(); Main main = new Main( From 24e3ad4e180fa344a39e49ba43ef88d30a12c318 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Wed, 22 Sep 2021 10:54:24 +0100 Subject: [PATCH 543/741] Remove unnecessary type constraint --- java/ql/src/experimental/semmle/code/java/Logging.qll | 1 - 1 file changed, 1 deletion(-) diff --git a/java/ql/src/experimental/semmle/code/java/Logging.qll b/java/ql/src/experimental/semmle/code/java/Logging.qll index 7543e0514fc..eea51d5b551 100644 --- a/java/ql/src/experimental/semmle/code/java/Logging.qll +++ b/java/ql/src/experimental/semmle/code/java/Logging.qll @@ -31,7 +31,6 @@ class LoggingCall extends MethodAccess { exists(RefType t, Method m | t.hasQualifiedName("android.util", "Log") | m.hasName(["d", "e", "i", "v", "w", "wtf"]) and m.getDeclaringType() = t and - m.getReturnType() instanceof IntegralType and this = m.getAReference() ) } From 8badba26b823e46a122232fbf05c042485e56995 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Wed, 22 Sep 2021 13:58:29 +0200 Subject: [PATCH 544/741] Python: Minor SQLALchemy comment fixes --- python/ql/lib/semmle/python/frameworks/SqlAlchemy.qll | 7 +++---- .../test/library-tests/frameworks/sqlalchemy/new_tests.py | 4 ++-- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/python/ql/lib/semmle/python/frameworks/SqlAlchemy.qll b/python/ql/lib/semmle/python/frameworks/SqlAlchemy.qll index 879456e4700..a74d44573f7 100644 --- a/python/ql/lib/semmle/python/frameworks/SqlAlchemy.qll +++ b/python/ql/lib/semmle/python/frameworks/SqlAlchemy.qll @@ -300,10 +300,9 @@ module SqlAlchemy { * there are many many constructs we would need to have models for. (see the 2 * examples below) * - * So instead we flag user-input to a TextClause with its' own query - * (`py/sqlalchemy-textclause-injection`). And so we don't highlight any parts of an - * ORM constructed query such as these as containing SQL, and don't need the additional - * taint steps either. + * So instead we extended the SQL injection query to include TextClause construction + * as a sink. And so we don't highlight any parts of an ORM constructed query such as + * these as containing SQL, and don't need the additional taint steps either. * * See * - https://docs.sqlalchemy.org/en/14/core/sqlelement.html#sqlalchemy.sql.expression.TextClause. diff --git a/python/ql/test/library-tests/frameworks/sqlalchemy/new_tests.py b/python/ql/test/library-tests/frameworks/sqlalchemy/new_tests.py index 0946cc0da40..9726e08f6bc 100644 --- a/python/ql/test/library-tests/frameworks/sqlalchemy/new_tests.py +++ b/python/ql/test/library-tests/frameworks/sqlalchemy/new_tests.py @@ -202,8 +202,8 @@ assert query.all() == [] # - This would require a LOT of modeling for these additional taint steps, since there # are many many constructs we would need to have models for. (see the 2 examples below) # -# So instead we flag user-input to a TextClause with its' own query. And so we don't -# highlight any parts of an ORM constructed query such as these as containing SQL. +# So instead we extended the SQL injection query to include TextClause construction as a +# sink directly. # `filter` provides more general filtering # see https://docs.sqlalchemy.org/en/14/orm/tutorial.html#common-filter-operators From 5969c227abc9ea6e81c1954ad620671ddea0bcfb Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Wed, 22 Sep 2021 13:32:20 +0100 Subject: [PATCH 545/741] C++: Fix QLDoc on 'getAllocationAddressOperand' and 'getAllocationAddress'. --- .../code/cpp/ir/implementation/aliased_ssa/Instruction.qll | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/Instruction.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/Instruction.qll index 453838215ff..416841af102 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/Instruction.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/Instruction.qll @@ -1856,12 +1856,12 @@ class InitializeDynamicAllocationInstruction extends SideEffectInstruction { } /** - * Gets the address of the allocation this instruction is initializing. + * Gets the operand of the allocation this instruction is initializing. */ final AddressOperand getAllocationAddressOperand() { result = getAnOperand() } /** - * Gets the operand for the allocation this instruction is initializing. + * Gets the address for the allocation this instruction is initializing. */ final Instruction getAllocationAddress() { result = getAllocationAddressOperand().getDef() } } From 35baff8bac8c41ac4a34ef7f6fbefe236bb6da91 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Wed, 22 Sep 2021 13:32:29 +0100 Subject: [PATCH 546/741] C#/C++: Sync identical files. --- .../lib/semmle/code/cpp/ir/implementation/raw/Instruction.qll | 4 ++-- .../code/cpp/ir/implementation/unaliased_ssa/Instruction.qll | 4 ++-- .../ql/src/experimental/ir/implementation/raw/Instruction.qll | 4 ++-- .../ir/implementation/unaliased_ssa/Instruction.qll | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/Instruction.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/Instruction.qll index 453838215ff..416841af102 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/Instruction.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/Instruction.qll @@ -1856,12 +1856,12 @@ class InitializeDynamicAllocationInstruction extends SideEffectInstruction { } /** - * Gets the address of the allocation this instruction is initializing. + * Gets the operand of the allocation this instruction is initializing. */ final AddressOperand getAllocationAddressOperand() { result = getAnOperand() } /** - * Gets the operand for the allocation this instruction is initializing. + * Gets the address for the allocation this instruction is initializing. */ final Instruction getAllocationAddress() { result = getAllocationAddressOperand().getDef() } } diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/Instruction.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/Instruction.qll index 453838215ff..416841af102 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/Instruction.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/Instruction.qll @@ -1856,12 +1856,12 @@ class InitializeDynamicAllocationInstruction extends SideEffectInstruction { } /** - * Gets the address of the allocation this instruction is initializing. + * Gets the operand of the allocation this instruction is initializing. */ final AddressOperand getAllocationAddressOperand() { result = getAnOperand() } /** - * Gets the operand for the allocation this instruction is initializing. + * Gets the address for the allocation this instruction is initializing. */ final Instruction getAllocationAddress() { result = getAllocationAddressOperand().getDef() } } diff --git a/csharp/ql/src/experimental/ir/implementation/raw/Instruction.qll b/csharp/ql/src/experimental/ir/implementation/raw/Instruction.qll index 453838215ff..416841af102 100644 --- a/csharp/ql/src/experimental/ir/implementation/raw/Instruction.qll +++ b/csharp/ql/src/experimental/ir/implementation/raw/Instruction.qll @@ -1856,12 +1856,12 @@ class InitializeDynamicAllocationInstruction extends SideEffectInstruction { } /** - * Gets the address of the allocation this instruction is initializing. + * Gets the operand of the allocation this instruction is initializing. */ final AddressOperand getAllocationAddressOperand() { result = getAnOperand() } /** - * Gets the operand for the allocation this instruction is initializing. + * Gets the address for the allocation this instruction is initializing. */ final Instruction getAllocationAddress() { result = getAllocationAddressOperand().getDef() } } diff --git a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/Instruction.qll b/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/Instruction.qll index 453838215ff..416841af102 100644 --- a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/Instruction.qll +++ b/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/Instruction.qll @@ -1856,12 +1856,12 @@ class InitializeDynamicAllocationInstruction extends SideEffectInstruction { } /** - * Gets the address of the allocation this instruction is initializing. + * Gets the operand of the allocation this instruction is initializing. */ final AddressOperand getAllocationAddressOperand() { result = getAnOperand() } /** - * Gets the operand for the allocation this instruction is initializing. + * Gets the address for the allocation this instruction is initializing. */ final Instruction getAllocationAddress() { result = getAllocationAddressOperand().getDef() } } From 522c6e01d2fc25097d9f1c18535f50090bd35ea5 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Wed, 22 Sep 2021 15:23:01 +0100 Subject: [PATCH 547/741] Sort models by class and name --- .../java/frameworks/guava/Collections.qll | 802 +++++++++--------- .../guava/generated/collect/Test.java | 14 +- 2 files changed, 404 insertions(+), 412 deletions(-) diff --git a/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll b/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll index a2a0ac8293c..67b2d332305 100644 --- a/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll +++ b/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll @@ -13,162 +13,35 @@ private class GuavaCollectCsv extends SummaryModelCsv { row = [ //"package;type;overrides;name;signature;ext;inputspec;outputspec;kind", - // Multisets - "com.google.common.collect;Multiset;true;add;(Object,int);;Argument[0];Element of Argument[-1];value", - "com.google.common.collect;Multiset;true;setCount;(Object,int);;Argument[0];Element of Argument[-1];value", - "com.google.common.collect;Multiset;true;setCount;(Object,int,int);;Argument[0];Element of Argument[-1];value", - "com.google.common.collect;Multiset;true;elementSet;();;Element of Argument[-1];Element of ReturnValue;value", - "com.google.common.collect;Multiset;true;entrySet;();;Element of Argument[-1];Element of Element of ReturnValue;value", - "com.google.common.collect;Multiset$Entry;true;getElement;();;Element of Argument[-1];ReturnValue;value", - // Multimaps (aliasing between the collection 'views' returned by some methods and the original collection is not implemented) - "com.google.common.collect;Multimap;true;asMap;();;MapKey of Argument[-1];MapKey of ReturnValue;value", - "com.google.common.collect;Multimap;true;asMap;();;MapValue of Argument[-1];Element of MapValue of ReturnValue;value", - "com.google.common.collect;Multimap;true;entries;();;MapKey of Argument[-1];MapKey of Element of ReturnValue;value", - "com.google.common.collect;Multimap;true;entries;();;MapValue of Argument[-1];MapValue of Element of ReturnValue;value", - "com.google.common.collect;Multimap;true;get;(Object);;MapValue of Argument[-1];Element of ReturnValue;value", - "com.google.common.collect;Multimap;true;keys;();;MapKey of Argument[-1];Element of ReturnValue;value", - "com.google.common.collect;Multimap;true;keySet;();;MapKey of Argument[-1];Element of ReturnValue;value", - "com.google.common.collect;Multimap;true;values;();;MapValue of Argument[-1];Element of ReturnValue;value", - "com.google.common.collect;Multimap;true;put;(Object,Object);;Argument[0];MapKey of Argument[-1];value", - "com.google.common.collect;Multimap;true;put;(Object,Object);;Argument[1];MapValue of Argument[-1];value", - "com.google.common.collect;Multimap;true;putAll;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value", - "com.google.common.collect;Multimap;true;putAll;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value", - "com.google.common.collect;Multimap;true;putAll;(Multimap);;MapKey of Argument[0];MapKey of Argument[-1];value", - "com.google.common.collect;Multimap;true;putAll;(Multimap);;MapValue of Argument[0];MapValue of Argument[-1];value", - "com.google.common.collect;Multimap;true;removeAll;(Object);;MapValue of Argument[-1];Element of ReturnValue;value", - "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;MapValue of Argument[-1];Element of ReturnValue;value", - "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value", - "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value", - "com.google.common.collect;ImmutableMultimap;true;inverse;();;MapKey of Argument[-1];MapValue of ReturnValue;value", - "com.google.common.collect;ImmutableMultimap;true;inverse;();;MapValue of Argument[-1];MapKey of ReturnValue;value", - // Tables - "com.google.common.collect;Table$Cell;true;getRowKey;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];ReturnValue;value", - "com.google.common.collect;Table$Cell;true;getColumnKey;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];ReturnValue;value", - "com.google.common.collect;Table$Cell;true;getValue;();;MapValue of Argument[-1];ReturnValue;value", - "com.google.common.collect;Table;true;cellSet;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];SyntheticField[com.google.common.collect.Table.rowKey] of Element of ReturnValue;value", - "com.google.common.collect;Table;true;cellSet;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];SyntheticField[com.google.common.collect.Table.columnKey] of Element of ReturnValue;value", - "com.google.common.collect;Table;true;cellSet;();;MapValue of Argument[-1];MapValue of Element of ReturnValue;value", - "com.google.common.collect;Table;true;row;(Object);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];MapKey of ReturnValue;value", - "com.google.common.collect;Table;true;row;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value", - "com.google.common.collect;Table;true;rowKeySet;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];Element of ReturnValue;value", - "com.google.common.collect;Table;true;rowMap;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];MapKey of ReturnValue;value", - "com.google.common.collect;Table;true;rowMap;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];MapKey of MapValue of ReturnValue;value", - "com.google.common.collect;Table;true;rowMap;();;MapValue of Argument[-1];MapValue of MapValue of ReturnValue;value", - "com.google.common.collect;Table;true;column;(Object);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];MapKey of ReturnValue;value", - "com.google.common.collect;Table;true;column;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value", - "com.google.common.collect;Table;true;columnKeySet;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];Element of ReturnValue;value", - "com.google.common.collect;Table;true;columnMap;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];MapKey of ReturnValue;value", - "com.google.common.collect;Table;true;columnMap;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];MapKey of MapValue of ReturnValue;value", - "com.google.common.collect;Table;true;columnMap;();;MapValue of Argument[-1];MapValue of MapValue of ReturnValue;value", - "com.google.common.collect;Table;true;values;();;MapValue of Argument[-1];Element of ReturnValue;value", - "com.google.common.collect;Table;true;get;(Object,Object);;MapValue of Argument[-1];ReturnValue;value", - "com.google.common.collect;Table;true;remove;(Object,Object);;MapValue of Argument[-1];ReturnValue;value", - "com.google.common.collect;Table;true;put;(Object,Object,Object);;Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];value", - "com.google.common.collect;Table;true;put;(Object,Object,Object);;Argument[1];SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];value", - "com.google.common.collect;Table;true;put;(Object,Object,Object);;Argument[2];MapValue of Argument[-1];value", - "com.google.common.collect;Table;true;putAll;(Table);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];value", - "com.google.common.collect;Table;true;putAll;(Table);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];value", - "com.google.common.collect;Table;true;putAll;(Table);;MapValue of Argument[0];MapValue of Argument[-1];value", - // Misc collections and utilities - "com.google.common.collect;ImmutableCollection;true;asList;();;Element of Argument[-1];Element of ReturnValue;value", - "com.google.common.collect;ImmutableList;true;reverse;();;Element of Argument[-1];Element of ReturnValue;value", + // Methods depending on lambda flow are not currently modelled + // Methods depending on stronger aliasing properties than we support are also not modelled. + "com.google.common.collect;ArrayListMultimap;true;create;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;ArrayListMultimap;true;create;(Multimap);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;ArrayTable;true;create;(Iterable,Iterable);;Element of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value", + "com.google.common.collect;ArrayTable;true;create;(Iterable,Iterable);;Element of Argument[1];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value", + "com.google.common.collect;ArrayTable;true;create;(Table);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;ArrayTable;true;create;(Table);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value", + "com.google.common.collect;ArrayTable;true;create;(Table);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value", "com.google.common.collect;BiMap;true;forcePut;(Object,Object);;Argument[0];MapKey of Argument[-1];value", "com.google.common.collect;BiMap;true;forcePut;(Object,Object);;Argument[1];MapValue of Argument[-1];value", "com.google.common.collect;BiMap;true;inverse;();;MapKey of Argument[-1];MapValue of ReturnValue;value", "com.google.common.collect;BiMap;true;inverse;();;MapValue of Argument[-1];MapKey of ReturnValue;value", "com.google.common.collect;ClassToInstanceMap;true;getInstance;(Class);;MapValue of Argument[-1];ReturnValue;value", - "com.google.common.collect;ClassToInstanceMap;true;putInstance;(Class,Object);;MapValue of Argument[-1];ReturnValue;value", "com.google.common.collect;ClassToInstanceMap;true;putInstance;(Class,Object);;Argument[1];MapValue of Argument[-1];value", - // Builders - "com.google.common.collect;ImmutableCollection$Builder;true;build;();;Element of Argument[-1];Element of ReturnValue;value", - "com.google.common.collect;ImmutableCollection$Builder;true;add;;;Argument[-1];ReturnValue;value", - "com.google.common.collect;ImmutableCollection$Builder;true;add;(Object);;Argument[0];Element of Argument[-1];value", - "com.google.common.collect;ImmutableCollection$Builder;true;add;(Object[]);;ArrayElement of Argument[0];Element of Argument[-1];value", - "com.google.common.collect;ImmutableCollection$Builder;true;addAll;;;Argument[-1];ReturnValue;value", - "com.google.common.collect;ImmutableCollection$Builder;true;addAll;(Iterable);;Element of Argument[0];Element of Argument[-1];value", - "com.google.common.collect;ImmutableCollection$Builder;true;addAll;(Iterator);;Element of Argument[0];Element of Argument[-1];value", - "com.google.common.collect;ImmutableMultiset$Builder;true;addCopies;(Object,int);;Argument[-1];ReturnValue;value", - "com.google.common.collect;ImmutableMultiset$Builder;true;addCopies;(Object,int);;Argument[0];Element of Argument[-1];value", - "com.google.common.collect;ImmutableMultiset$Builder;true;setCount;(Object,int);;Argument[0];Element of Argument[-1];value", - "com.google.common.collect;ImmutableMap$Builder;true;build;();;MapKey of Argument[-1];MapKey of ReturnValue;value", - "com.google.common.collect;ImmutableMap$Builder;true;build;();;MapValue of Argument[-1];MapValue of ReturnValue;value", - "com.google.common.collect;ImmutableMap$Builder;true;orderEntriesByValue;(Comparator);;Argument[-1];ReturnValue;value", - "com.google.common.collect;ImmutableMap$Builder;true;put;;;Argument[-1];ReturnValue;value", - "com.google.common.collect;ImmutableMap$Builder;true;put;(Entry);;MapKey of Argument[0];MapKey of Argument[-1];value", - "com.google.common.collect;ImmutableMap$Builder;true;put;(Entry);;MapValue of Argument[0];MapValue of Argument[-1];value", - "com.google.common.collect;ImmutableMap$Builder;true;put;(Object,Object);;Argument[0];MapKey of Argument[-1];value", - "com.google.common.collect;ImmutableMap$Builder;true;put;(Object,Object);;Argument[1];MapValue of Argument[-1];value", - "com.google.common.collect;ImmutableMap$Builder;true;putAll;;;Argument[-1];ReturnValue;value", - "com.google.common.collect;ImmutableMap$Builder;true;putAll;(Iterable);;MapKey of Element of Argument[0];MapKey of Argument[-1];value", - "com.google.common.collect;ImmutableMap$Builder;true;putAll;(Iterable);;MapValue of Element of Argument[0];MapValue of Argument[-1];value", - "com.google.common.collect;ImmutableMap$Builder;true;putAll;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value", - "com.google.common.collect;ImmutableMap$Builder;true;putAll;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value", - "com.google.common.collect;ImmutableMultimap$Builder;true;build;();;MapKey of Argument[-1];MapKey of ReturnValue;value", - "com.google.common.collect;ImmutableMultimap$Builder;true;build;();;MapValue of Argument[-1];MapValue of ReturnValue;value", - "com.google.common.collect;ImmutableMultimap$Builder;true;orderKeysBy;(Comparator);;Argument[-1];ReturnValue;value", - "com.google.common.collect;ImmutableMultimap$Builder;true;orderValuesBy;(Comparator);;Argument[-1];ReturnValue;value", - "com.google.common.collect;ImmutableMultimap$Builder;true;put;;;Argument[-1];ReturnValue;value", - "com.google.common.collect;ImmutableMultimap$Builder;true;put;(Entry);;MapKey of Argument[0];MapKey of Argument[-1];value", - "com.google.common.collect;ImmutableMultimap$Builder;true;put;(Entry);;MapValue of Argument[0];MapValue of Argument[-1];value", - "com.google.common.collect;ImmutableMultimap$Builder;true;put;(Object,Object);;Argument[0];MapKey of Argument[-1];value", - "com.google.common.collect;ImmutableMultimap$Builder;true;put;(Object,Object);;Argument[1];MapValue of Argument[-1];value", - "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;;;Argument[-1];ReturnValue;value", - "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Iterable);;MapKey of Element of Argument[0];MapKey of Argument[-1];value", - "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Iterable);;MapValue of Element of Argument[0];MapValue of Argument[-1];value", - "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Multimap);;MapKey of Argument[0];MapKey of Argument[-1];value", - "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Multimap);;MapValue of Argument[0];MapValue of Argument[-1];value", - "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value", - "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value", - "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Object,Object[]);;Argument[0];MapKey of Argument[-1];value", - "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Object,Object[]);;ArrayElement of Argument[1];MapValue of Argument[-1];value", - "com.google.common.collect;ImmutableTable$Builder;true;build;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value", - "com.google.common.collect;ImmutableTable$Builder;true;build;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value", - "com.google.common.collect;ImmutableTable$Builder;true;build;();;MapValue of Argument[-1];MapValue of ReturnValue;value", - "com.google.common.collect;ImmutableTable$Builder;true;orderRowsBy;(Comparator);;Argument[-1];ReturnValue;value", - "com.google.common.collect;ImmutableTable$Builder;true;orderColumnsBy;(Comparator);;Argument[-1];ReturnValue;value", - "com.google.common.collect;ImmutableTable$Builder;true;put;(Object,Object,Object);;Argument[-1];ReturnValue;value", - "com.google.common.collect;ImmutableTable$Builder;true;put;(Cell);;Argument[-1];ReturnValue;value", - "com.google.common.collect;ImmutableTable$Builder;true;putAll;(Table);;Argument[-1];ReturnValue;value", - "com.google.common.collect;ImmutableTable$Builder;true;put;(Object,Object,Object);;Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];value", - "com.google.common.collect;ImmutableTable$Builder;true;put;(Object,Object,Object);;Argument[1];SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];value", - "com.google.common.collect;ImmutableTable$Builder;true;put;(Object,Object,Object);;Argument[2];MapValue of Argument[-1];value", - "com.google.common.collect;ImmutableTable$Builder;true;put;(Cell);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];value", - "com.google.common.collect;ImmutableTable$Builder;true;put;(Cell);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];value", - "com.google.common.collect;ImmutableTable$Builder;true;put;(Cell);;MapValue of Argument[0];MapValue of Argument[-1];value", - "com.google.common.collect;ImmutableTable$Builder;true;putAll;(Table);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];value", - "com.google.common.collect;ImmutableTable$Builder;true;putAll;(Table);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];value", - "com.google.common.collect;ImmutableTable$Builder;true;putAll;(Table);;MapValue of Argument[0];MapValue of Argument[-1];value", - // `of` methods - "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value", - "com.google.common.collect;ImmutableList;true;of;;;ArrayElement of Argument[12];Element of ReturnValue;value", - "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value", - "com.google.common.collect;ImmutableSet;true;of;;;ArrayElement of Argument[6];Element of ReturnValue;value", - "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value", - "com.google.common.collect;ImmutableSortedSet;true;of;;;ArrayElement of Argument[6];Element of ReturnValue;value", - "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value", - "com.google.common.collect;ImmutableMultiset;true;of;;;ArrayElement of Argument[6];Element of ReturnValue;value", - "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value", - "com.google.common.collect;ImmutableSortedMultiset;true;of;;;ArrayElement of Argument[6];Element of ReturnValue;value", - "com.google.common.collect;ImmutableMap;true;of;;;Argument[0];MapKey of ReturnValue;value", - "com.google.common.collect;ImmutableMap;true;of;;;Argument[1];MapValue of ReturnValue;value", - "com.google.common.collect;ImmutableMap;true;of;;;Argument[2];MapKey of ReturnValue;value", - "com.google.common.collect;ImmutableMap;true;of;;;Argument[3];MapValue of ReturnValue;value", - "com.google.common.collect;ImmutableMap;true;of;;;Argument[4];MapKey of ReturnValue;value", - "com.google.common.collect;ImmutableMap;true;of;;;Argument[5];MapValue of ReturnValue;value", - "com.google.common.collect;ImmutableMap;true;of;;;Argument[6];MapKey of ReturnValue;value", - "com.google.common.collect;ImmutableMap;true;of;;;Argument[7];MapValue of ReturnValue;value", - "com.google.common.collect;ImmutableMap;true;of;;;Argument[8];MapKey of ReturnValue;value", - "com.google.common.collect;ImmutableMap;true;of;;;Argument[9];MapValue of ReturnValue;value", - "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[0];MapKey of ReturnValue;value", - "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[1];MapValue of ReturnValue;value", - "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[2];MapKey of ReturnValue;value", - "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[3];MapValue of ReturnValue;value", - "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[4];MapKey of ReturnValue;value", - "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[5];MapValue of ReturnValue;value", - "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[6];MapKey of ReturnValue;value", - "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[7];MapValue of ReturnValue;value", - "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[8];MapKey of ReturnValue;value", - "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[9];MapValue of ReturnValue;value", + "com.google.common.collect;ClassToInstanceMap;true;putInstance;(Class,Object);;MapValue of Argument[-1];ReturnValue;value", + "com.google.common.collect;Collections2;false;filter;(Collection,Predicate);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Collections2;false;orderedPermutations;(Iterable);;Element of Argument[0];Element of Element of ReturnValue;value", + "com.google.common.collect;Collections2;false;orderedPermutations;(Iterable,Comparator);;Element of Argument[0];Element of Element of ReturnValue;value", + "com.google.common.collect;Collections2;false;permutations;(Collection);;Element of Argument[0];Element of Element of ReturnValue;value", + "com.google.common.collect;ConcurrentHashMultiset;true;create;(Iterable);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;HashBasedTable;true;create;(Table);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;HashBasedTable;true;create;(Table);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value", + "com.google.common.collect;HashBasedTable;true;create;(Table);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value", + "com.google.common.collect;HashBiMap;true;create;(Map);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;HashBiMap;true;create;(Map);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;HashMultimap;true;create;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;HashMultimap;true;create;(Multimap);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;HashMultiset;true;create;(Iterable);;Element of Argument[0];Element of ReturnValue;value", "com.google.common.collect;ImmutableBiMap;true;of;;;Argument[0];MapKey of ReturnValue;value", "com.google.common.collect;ImmutableBiMap;true;of;;;Argument[1];MapValue of ReturnValue;value", "com.google.common.collect;ImmutableBiMap;true;of;;;Argument[2];MapKey of ReturnValue;value", @@ -179,16 +52,27 @@ private class GuavaCollectCsv extends SummaryModelCsv { "com.google.common.collect;ImmutableBiMap;true;of;;;Argument[7];MapValue of ReturnValue;value", "com.google.common.collect;ImmutableBiMap;true;of;;;Argument[8];MapKey of ReturnValue;value", "com.google.common.collect;ImmutableBiMap;true;of;;;Argument[9];MapValue of ReturnValue;value", - "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[0];MapKey of ReturnValue;value", - "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[1];MapValue of ReturnValue;value", - "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[2];MapKey of ReturnValue;value", - "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[3];MapValue of ReturnValue;value", - "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[4];MapKey of ReturnValue;value", - "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[5];MapValue of ReturnValue;value", - "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[6];MapKey of ReturnValue;value", - "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[7];MapValue of ReturnValue;value", - "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[8];MapKey of ReturnValue;value", - "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[9];MapValue of ReturnValue;value", + "com.google.common.collect;ImmutableClassToInstanceMap;true;copyOf;(Map);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;ImmutableClassToInstanceMap;true;copyOf;(Map);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;ImmutableClassToInstanceMap;true;of;(Class,Object);;Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;ImmutableClassToInstanceMap;true;of;(Class,Object);;Argument[1];MapValue of ReturnValue;value", + "com.google.common.collect;ImmutableCollection$Builder;true;add;(Object);;Argument[0];Element of Argument[-1];value", + "com.google.common.collect;ImmutableCollection$Builder;true;add;(Object[]);;ArrayElement of Argument[0];Element of Argument[-1];value", + "com.google.common.collect;ImmutableCollection$Builder;true;add;;;Argument[-1];ReturnValue;value", + "com.google.common.collect;ImmutableCollection$Builder;true;addAll;(Iterable);;Element of Argument[0];Element of Argument[-1];value", + "com.google.common.collect;ImmutableCollection$Builder;true;addAll;(Iterator);;Element of Argument[0];Element of Argument[-1];value", + "com.google.common.collect;ImmutableCollection$Builder;true;addAll;;;Argument[-1];ReturnValue;value", + "com.google.common.collect;ImmutableCollection$Builder;true;build;();;Element of Argument[-1];Element of ReturnValue;value", + "com.google.common.collect;ImmutableCollection;true;asList;();;Element of Argument[-1];Element of ReturnValue;value", + "com.google.common.collect;ImmutableList;true;copyOf;(Collection);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;ImmutableList;true;copyOf;(Iterable);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;ImmutableList;true;copyOf;(Iterator);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;ImmutableList;true;copyOf;(Object[]);;ArrayElement of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;ImmutableList;true;of;;;Argument[0..11];Element of ReturnValue;value", + "com.google.common.collect;ImmutableList;true;of;;;ArrayElement of Argument[12];Element of ReturnValue;value", + "com.google.common.collect;ImmutableList;true;reverse;();;Element of Argument[-1];Element of ReturnValue;value", + "com.google.common.collect;ImmutableList;true;sortedCopyOf;(Comparator,Iterable);;Element of Argument[1];Element of ReturnValue;value", + "com.google.common.collect;ImmutableList;true;sortedCopyOf;(Iterable);;Element of Argument[0];Element of ReturnValue;value", "com.google.common.collect;ImmutableListMultimap;true;of;;;Argument[0];MapKey of ReturnValue;value", "com.google.common.collect;ImmutableListMultimap;true;of;;;Argument[1];MapValue of ReturnValue;value", "com.google.common.collect;ImmutableListMultimap;true;of;;;Argument[2];MapKey of ReturnValue;value", @@ -199,6 +83,81 @@ private class GuavaCollectCsv extends SummaryModelCsv { "com.google.common.collect;ImmutableListMultimap;true;of;;;Argument[7];MapValue of ReturnValue;value", "com.google.common.collect;ImmutableListMultimap;true;of;;;Argument[8];MapKey of ReturnValue;value", "com.google.common.collect;ImmutableListMultimap;true;of;;;Argument[9];MapValue of ReturnValue;value", + "com.google.common.collect;ImmutableMap$Builder;true;build;();;MapKey of Argument[-1];MapKey of ReturnValue;value", + "com.google.common.collect;ImmutableMap$Builder;true;build;();;MapValue of Argument[-1];MapValue of ReturnValue;value", + "com.google.common.collect;ImmutableMap$Builder;true;orderEntriesByValue;(Comparator);;Argument[-1];ReturnValue;value", + "com.google.common.collect;ImmutableMap$Builder;true;put;(Entry);;MapKey of Argument[0];MapKey of Argument[-1];value", + "com.google.common.collect;ImmutableMap$Builder;true;put;(Entry);;MapValue of Argument[0];MapValue of Argument[-1];value", + "com.google.common.collect;ImmutableMap$Builder;true;put;(Object,Object);;Argument[0];MapKey of Argument[-1];value", + "com.google.common.collect;ImmutableMap$Builder;true;put;(Object,Object);;Argument[1];MapValue of Argument[-1];value", + "com.google.common.collect;ImmutableMap$Builder;true;put;;;Argument[-1];ReturnValue;value", + "com.google.common.collect;ImmutableMap$Builder;true;putAll;(Iterable);;MapKey of Element of Argument[0];MapKey of Argument[-1];value", + "com.google.common.collect;ImmutableMap$Builder;true;putAll;(Iterable);;MapValue of Element of Argument[0];MapValue of Argument[-1];value", + "com.google.common.collect;ImmutableMap$Builder;true;putAll;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value", + "com.google.common.collect;ImmutableMap$Builder;true;putAll;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value", + "com.google.common.collect;ImmutableMap$Builder;true;putAll;;;Argument[-1];ReturnValue;value", + "com.google.common.collect;ImmutableMap;true;copyOf;(Iterable);;MapKey of Element of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;ImmutableMap;true;copyOf;(Iterable);;MapValue of Element of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;ImmutableMap;true;copyOf;(Map);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;ImmutableMap;true;copyOf;(Map);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;ImmutableMap;true;of;;;Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;ImmutableMap;true;of;;;Argument[1];MapValue of ReturnValue;value", + "com.google.common.collect;ImmutableMap;true;of;;;Argument[2];MapKey of ReturnValue;value", + "com.google.common.collect;ImmutableMap;true;of;;;Argument[3];MapValue of ReturnValue;value", + "com.google.common.collect;ImmutableMap;true;of;;;Argument[4];MapKey of ReturnValue;value", + "com.google.common.collect;ImmutableMap;true;of;;;Argument[5];MapValue of ReturnValue;value", + "com.google.common.collect;ImmutableMap;true;of;;;Argument[6];MapKey of ReturnValue;value", + "com.google.common.collect;ImmutableMap;true;of;;;Argument[7];MapValue of ReturnValue;value", + "com.google.common.collect;ImmutableMap;true;of;;;Argument[8];MapKey of ReturnValue;value", + "com.google.common.collect;ImmutableMap;true;of;;;Argument[9];MapValue of ReturnValue;value", + "com.google.common.collect;ImmutableMultimap$Builder;true;build;();;MapKey of Argument[-1];MapKey of ReturnValue;value", + "com.google.common.collect;ImmutableMultimap$Builder;true;build;();;MapValue of Argument[-1];MapValue of ReturnValue;value", + "com.google.common.collect;ImmutableMultimap$Builder;true;orderKeysBy;(Comparator);;Argument[-1];ReturnValue;value", + "com.google.common.collect;ImmutableMultimap$Builder;true;orderValuesBy;(Comparator);;Argument[-1];ReturnValue;value", + "com.google.common.collect;ImmutableMultimap$Builder;true;put;(Entry);;MapKey of Argument[0];MapKey of Argument[-1];value", + "com.google.common.collect;ImmutableMultimap$Builder;true;put;(Entry);;MapValue of Argument[0];MapValue of Argument[-1];value", + "com.google.common.collect;ImmutableMultimap$Builder;true;put;(Object,Object);;Argument[0];MapKey of Argument[-1];value", + "com.google.common.collect;ImmutableMultimap$Builder;true;put;(Object,Object);;Argument[1];MapValue of Argument[-1];value", + "com.google.common.collect;ImmutableMultimap$Builder;true;put;;;Argument[-1];ReturnValue;value", + "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Iterable);;MapKey of Element of Argument[0];MapKey of Argument[-1];value", + "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Iterable);;MapValue of Element of Argument[0];MapValue of Argument[-1];value", + "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Multimap);;MapKey of Argument[0];MapKey of Argument[-1];value", + "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Multimap);;MapValue of Argument[0];MapValue of Argument[-1];value", + "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value", + "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value", + "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Object,Object[]);;Argument[0];MapKey of Argument[-1];value", + "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;(Object,Object[]);;ArrayElement of Argument[1];MapValue of Argument[-1];value", + "com.google.common.collect;ImmutableMultimap$Builder;true;putAll;;;Argument[-1];ReturnValue;value", + "com.google.common.collect;ImmutableMultimap;true;copyOf;(Iterable);;MapKey of Element of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;ImmutableMultimap;true;copyOf;(Iterable);;MapValue of Element of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;ImmutableMultimap;true;copyOf;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;ImmutableMultimap;true;copyOf;(Multimap);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;ImmutableMultimap;true;inverse;();;MapKey of Argument[-1];MapValue of ReturnValue;value", + "com.google.common.collect;ImmutableMultimap;true;inverse;();;MapValue of Argument[-1];MapKey of ReturnValue;value", + "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[1];MapValue of ReturnValue;value", + "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[2];MapKey of ReturnValue;value", + "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[3];MapValue of ReturnValue;value", + "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[4];MapKey of ReturnValue;value", + "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[5];MapValue of ReturnValue;value", + "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[6];MapKey of ReturnValue;value", + "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[7];MapValue of ReturnValue;value", + "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[8];MapKey of ReturnValue;value", + "com.google.common.collect;ImmutableMultimap;true;of;;;Argument[9];MapValue of ReturnValue;value", + "com.google.common.collect;ImmutableMultiset$Builder;true;addCopies;(Object,int);;Argument[-1];ReturnValue;value", + "com.google.common.collect;ImmutableMultiset$Builder;true;addCopies;(Object,int);;Argument[0];Element of Argument[-1];value", + "com.google.common.collect;ImmutableMultiset$Builder;true;setCount;(Object,int);;Argument[0];Element of Argument[-1];value", + "com.google.common.collect;ImmutableMultiset;true;copyOf;(Iterable);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;ImmutableMultiset;true;copyOf;(Iterator);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;ImmutableMultiset;true;copyOf;(Object[]);;ArrayElement of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;ImmutableMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value", + "com.google.common.collect;ImmutableMultiset;true;of;;;ArrayElement of Argument[6];Element of ReturnValue;value", + "com.google.common.collect;ImmutableSet;true;copyOf;(Collection);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;ImmutableSet;true;copyOf;(Iterable);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;ImmutableSet;true;copyOf;(Iterator);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;ImmutableSet;true;copyOf;(Object[]);;ArrayElement of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;ImmutableSet;true;of;;;Argument[0..5];Element of ReturnValue;value", + "com.google.common.collect;ImmutableSet;true;of;;;ArrayElement of Argument[6];Element of ReturnValue;value", "com.google.common.collect;ImmutableSetMultimap;true;of;;;Argument[0];MapKey of ReturnValue;value", "com.google.common.collect;ImmutableSetMultimap;true;of;;;Argument[1];MapValue of ReturnValue;value", "com.google.common.collect;ImmutableSetMultimap;true;of;;;Argument[2];MapKey of ReturnValue;value", @@ -209,170 +168,144 @@ private class GuavaCollectCsv extends SummaryModelCsv { "com.google.common.collect;ImmutableSetMultimap;true;of;;;Argument[7];MapValue of ReturnValue;value", "com.google.common.collect;ImmutableSetMultimap;true;of;;;Argument[8];MapKey of ReturnValue;value", "com.google.common.collect;ImmutableSetMultimap;true;of;;;Argument[9];MapValue of ReturnValue;value", - "com.google.common.collect;ImmutableClassToInstanceMap;true;of;(Class,Object);;Argument[0];MapKey of ReturnValue;value", - "com.google.common.collect;ImmutableClassToInstanceMap;true;of;(Class,Object);;Argument[1];MapValue of ReturnValue;value", + "com.google.common.collect;ImmutableSortedMap;true;copyOf;(Iterable);;MapKey of Element of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;ImmutableSortedMap;true;copyOf;(Iterable);;MapValue of Element of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;ImmutableSortedMap;true;copyOf;(Iterable,Comparator);;MapKey of Element of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;ImmutableSortedMap;true;copyOf;(Iterable,Comparator);;MapValue of Element of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;ImmutableSortedMap;true;copyOf;(Map);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;ImmutableSortedMap;true;copyOf;(Map);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;ImmutableSortedMap;true;copyOf;(Map,Comparator);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;ImmutableSortedMap;true;copyOf;(Map,Comparator);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;ImmutableSortedMap;true;copyOfSorted;(SortedMap);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;ImmutableSortedMap;true;copyOfSorted;(SortedMap);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[1];MapValue of ReturnValue;value", + "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[2];MapKey of ReturnValue;value", + "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[3];MapValue of ReturnValue;value", + "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[4];MapKey of ReturnValue;value", + "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[5];MapValue of ReturnValue;value", + "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[6];MapKey of ReturnValue;value", + "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[7];MapValue of ReturnValue;value", + "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[8];MapKey of ReturnValue;value", + "com.google.common.collect;ImmutableSortedMap;true;of;;;Argument[9];MapValue of ReturnValue;value", + "com.google.common.collect;ImmutableSortedMultiset;true;copyOf;(Comparable[]);;ArrayElement of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;ImmutableSortedMultiset;true;copyOf;(Comparator,Iterable);;Element of Argument[1];Element of ReturnValue;value", + "com.google.common.collect;ImmutableSortedMultiset;true;copyOf;(Comparator,Iterator);;Element of Argument[1];Element of ReturnValue;value", + "com.google.common.collect;ImmutableSortedMultiset;true;copyOf;(Iterable);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;ImmutableSortedMultiset;true;copyOf;(Iterator);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;ImmutableSortedMultiset;true;copyOfSorted;(SortedMultiset);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;ImmutableSortedMultiset;true;of;;;Argument[0..5];Element of ReturnValue;value", + "com.google.common.collect;ImmutableSortedMultiset;true;of;;;ArrayElement of Argument[6];Element of ReturnValue;value", + "com.google.common.collect;ImmutableSortedSet;true;copyOf;(Collection);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;ImmutableSortedSet;true;copyOf;(Comparable[]);;ArrayElement of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;ImmutableSortedSet;true;copyOf;(Comparator,Collection);;Element of Argument[1];Element of ReturnValue;value", + "com.google.common.collect;ImmutableSortedSet;true;copyOf;(Comparator,Iterable);;Element of Argument[1];Element of ReturnValue;value", + "com.google.common.collect;ImmutableSortedSet;true;copyOf;(Comparator,Iterator);;Element of Argument[1];Element of ReturnValue;value", + "com.google.common.collect;ImmutableSortedSet;true;copyOf;(Iterable);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;ImmutableSortedSet;true;copyOf;(Iterator);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;ImmutableSortedSet;true;copyOfSorted;(SortedSet);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;ImmutableSortedSet;true;of;;;Argument[0..5];Element of ReturnValue;value", + "com.google.common.collect;ImmutableSortedSet;true;of;;;ArrayElement of Argument[6];Element of ReturnValue;value", + "com.google.common.collect;ImmutableTable$Builder;true;build;();;MapValue of Argument[-1];MapValue of ReturnValue;value", + "com.google.common.collect;ImmutableTable$Builder;true;build;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value", + "com.google.common.collect;ImmutableTable$Builder;true;build;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value", + "com.google.common.collect;ImmutableTable$Builder;true;orderColumnsBy;(Comparator);;Argument[-1];ReturnValue;value", + "com.google.common.collect;ImmutableTable$Builder;true;orderRowsBy;(Comparator);;Argument[-1];ReturnValue;value", + "com.google.common.collect;ImmutableTable$Builder;true;put;(Cell);;Argument[-1];ReturnValue;value", + "com.google.common.collect;ImmutableTable$Builder;true;put;(Cell);;MapValue of Argument[0];MapValue of Argument[-1];value", + "com.google.common.collect;ImmutableTable$Builder;true;put;(Cell);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];value", + "com.google.common.collect;ImmutableTable$Builder;true;put;(Cell);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];value", + "com.google.common.collect;ImmutableTable$Builder;true;put;(Object,Object,Object);;Argument[-1];ReturnValue;value", + "com.google.common.collect;ImmutableTable$Builder;true;put;(Object,Object,Object);;Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];value", + "com.google.common.collect;ImmutableTable$Builder;true;put;(Object,Object,Object);;Argument[1];SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];value", + "com.google.common.collect;ImmutableTable$Builder;true;put;(Object,Object,Object);;Argument[2];MapValue of Argument[-1];value", + "com.google.common.collect;ImmutableTable$Builder;true;putAll;(Table);;Argument[-1];ReturnValue;value", + "com.google.common.collect;ImmutableTable$Builder;true;putAll;(Table);;MapValue of Argument[0];MapValue of Argument[-1];value", + "com.google.common.collect;ImmutableTable$Builder;true;putAll;(Table);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];value", + "com.google.common.collect;ImmutableTable$Builder;true;putAll;(Table);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];value", + "com.google.common.collect;ImmutableTable;true;copyOf;(Table);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;ImmutableTable;true;copyOf;(Table);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value", + "com.google.common.collect;ImmutableTable;true;copyOf;(Table);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value", "com.google.common.collect;ImmutableTable;true;of;(Object,Object,Object);;Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value", "com.google.common.collect;ImmutableTable;true;of;(Object,Object,Object);;Argument[1];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value", "com.google.common.collect;ImmutableTable;true;of;(Object,Object,Object);;Argument[2];MapValue of ReturnValue;value", - // `copyOf` methods - "com.google.common.collect;ImmutableList;true;copyOf;(Object[]);;ArrayElement of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;ImmutableList;true;copyOf;(Iterable);;Element of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;ImmutableList;true;copyOf;(Iterator);;Element of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;ImmutableList;true;copyOf;(Collection);;Element of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;ImmutableList;true;sortedCopyOf;(Iterable);;Element of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;ImmutableList;true;sortedCopyOf;(Comparator,Iterable);;Element of Argument[1];Element of ReturnValue;value", - "com.google.common.collect;ImmutableSet;true;copyOf;(Object[]);;ArrayElement of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;ImmutableSet;true;copyOf;(Iterable);;Element of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;ImmutableSet;true;copyOf;(Iterator);;Element of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;ImmutableSet;true;copyOf;(Collection);;Element of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;ImmutableSortedSet;true;copyOf;(Comparable[]);;ArrayElement of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;ImmutableSortedSet;true;copyOf;(Iterable);;Element of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;ImmutableSortedSet;true;copyOf;(Iterator);;Element of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;ImmutableSortedSet;true;copyOf;(Collection);;Element of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;ImmutableSortedSet;true;copyOf;(Comparator,Iterable);;Element of Argument[1];Element of ReturnValue;value", - "com.google.common.collect;ImmutableSortedSet;true;copyOf;(Comparator,Iterator);;Element of Argument[1];Element of ReturnValue;value", - "com.google.common.collect;ImmutableSortedSet;true;copyOf;(Comparator,Collection);;Element of Argument[1];Element of ReturnValue;value", - "com.google.common.collect;ImmutableSortedSet;true;copyOfSorted;(SortedSet);;Element of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;ImmutableMultiset;true;copyOf;(Object[]);;ArrayElement of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;ImmutableMultiset;true;copyOf;(Iterable);;Element of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;ImmutableMultiset;true;copyOf;(Iterator);;Element of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;ImmutableSortedMultiset;true;copyOf;(Comparable[]);;ArrayElement of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;ImmutableSortedMultiset;true;copyOf;(Iterable);;Element of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;ImmutableSortedMultiset;true;copyOf;(Iterator);;Element of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;ImmutableSortedMultiset;true;copyOf;(Comparator,Iterable);;Element of Argument[1];Element of ReturnValue;value", - "com.google.common.collect;ImmutableSortedMultiset;true;copyOf;(Comparator,Iterator);;Element of Argument[1];Element of ReturnValue;value", - "com.google.common.collect;ImmutableSortedMultiset;true;copyOfSorted;(SortedMultiset);;Element of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;ImmutableMap;true;copyOf;(Map);;MapKey of Argument[0];MapKey of ReturnValue;value", - "com.google.common.collect;ImmutableMap;true;copyOf;(Map);;MapValue of Argument[0];MapValue of ReturnValue;value", - "com.google.common.collect;ImmutableMap;true;copyOf;(Iterable);;MapKey of Element of Argument[0];MapKey of ReturnValue;value", - "com.google.common.collect;ImmutableMap;true;copyOf;(Iterable);;MapValue of Element of Argument[0];MapValue of ReturnValue;value", - "com.google.common.collect;ImmutableSortedMap;true;copyOf;(Map);;MapKey of Argument[0];MapKey of ReturnValue;value", - "com.google.common.collect;ImmutableSortedMap;true;copyOf;(Map);;MapValue of Argument[0];MapValue of ReturnValue;value", - "com.google.common.collect;ImmutableSortedMap;true;copyOf;(Iterable);;MapKey of Element of Argument[0];MapKey of ReturnValue;value", - "com.google.common.collect;ImmutableSortedMap;true;copyOf;(Iterable);;MapValue of Element of Argument[0];MapValue of ReturnValue;value", - "com.google.common.collect;ImmutableSortedMap;true;copyOfSorted;(SortedMap);;MapKey of Argument[0];MapKey of ReturnValue;value", - "com.google.common.collect;ImmutableSortedMap;true;copyOfSorted;(SortedMap);;MapValue of Argument[0];MapValue of ReturnValue;value", - "com.google.common.collect;ImmutableSortedMap;true;copyOf;(Map,Comparator);;MapKey of Argument[0];MapKey of ReturnValue;value", - "com.google.common.collect;ImmutableSortedMap;true;copyOf;(Map,Comparator);;MapValue of Argument[0];MapValue of ReturnValue;value", - "com.google.common.collect;ImmutableSortedMap;true;copyOf;(Iterable,Comparator);;MapKey of Element of Argument[0];MapKey of ReturnValue;value", - "com.google.common.collect;ImmutableSortedMap;true;copyOf;(Iterable,Comparator);;MapValue of Element of Argument[0];MapValue of ReturnValue;value", - "com.google.common.collect;ImmutableMultimap;true;copyOf;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value", - "com.google.common.collect;ImmutableMultimap;true;copyOf;(Multimap);;MapValue of Argument[0];MapValue of ReturnValue;value", - "com.google.common.collect;ImmutableMultimap;true;copyOf;(Iterable);;MapKey of Element of Argument[0];MapKey of ReturnValue;value", - "com.google.common.collect;ImmutableMultimap;true;copyOf;(Iterable);;MapValue of Element of Argument[0];MapValue of ReturnValue;value", - "com.google.common.collect;ImmutableClassToInstanceMap;true;copyOf;(Map);;MapKey of Argument[0];MapKey of ReturnValue;value", - "com.google.common.collect;ImmutableClassToInstanceMap;true;copyOf;(Map);;MapValue of Argument[0];MapValue of ReturnValue;value", - "com.google.common.collect;ImmutableTable;true;copyOf;(Table);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value", - "com.google.common.collect;ImmutableTable;true;copyOf;(Table);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value", - "com.google.common.collect;ImmutableTable;true;copyOf;(Table);;MapValue of Argument[0];MapValue of ReturnValue;value", - // `create` methods - "com.google.common.collect;HashMultiset;true;create;(Iterable);;Element of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;LinkedHashMultiset;true;create;(Iterable);;Element of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;TreeMultiset;true;create;(Iterable);;Element of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;ConcurrentHashMultiset;true;create;(Iterable);;Element of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;HashMultimap;true;create;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value", - "com.google.common.collect;HashMultimap;true;create;(Multimap);;MapValue of Argument[0];MapValue of ReturnValue;value", - "com.google.common.collect;LinkedHashMultimap;true;create;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value", - "com.google.common.collect;LinkedHashMultimap;true;create;(Multimap);;MapValue of Argument[0];MapValue of ReturnValue;value", - "com.google.common.collect;LinkedListMultimap;true;create;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value", - "com.google.common.collect;LinkedListMultimap;true;create;(Multimap);;MapValue of Argument[0];MapValue of ReturnValue;value", - "com.google.common.collect;ArrayListMultimap;true;create;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value", - "com.google.common.collect;ArrayListMultimap;true;create;(Multimap);;MapValue of Argument[0];MapValue of ReturnValue;value", - "com.google.common.collect;TreeMultimap;true;create;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value", - "com.google.common.collect;TreeMultimap;true;create;(Multimap);;MapValue of Argument[0];MapValue of ReturnValue;value", - "com.google.common.collect;HashBiMap;true;create;(Map);;MapKey of Argument[0];MapKey of ReturnValue;value", - "com.google.common.collect;HashBiMap;true;create;(Map);;MapValue of Argument[0];MapValue of ReturnValue;value", - "com.google.common.collect;MutableClassToInstanceMap;true;create;(Map);;MapKey of Argument[0];MapKey of ReturnValue;value", - "com.google.common.collect;MutableClassToInstanceMap;true;create;(Map);;MapValue of Argument[0];MapValue of ReturnValue;value", - "com.google.common.collect;HashBasedTable;true;create;(Table);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value", - "com.google.common.collect;HashBasedTable;true;create;(Table);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value", - "com.google.common.collect;HashBasedTable;true;create;(Table);;MapValue of Argument[0];MapValue of ReturnValue;value", - "com.google.common.collect;TreeBasedTable;true;create;(TreeBasedTable);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value", - "com.google.common.collect;TreeBasedTable;true;create;(TreeBasedTable);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value", - "com.google.common.collect;TreeBasedTable;true;create;(TreeBasedTable);;MapValue of Argument[0];MapValue of ReturnValue;value", - "com.google.common.collect;ArrayTable;true;create;(Table);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value", - "com.google.common.collect;ArrayTable;true;create;(Table);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value", - "com.google.common.collect;ArrayTable;true;create;(Table);;MapValue of Argument[0];MapValue of ReturnValue;value", - "com.google.common.collect;ArrayTable;true;create;(Iterable,Iterable);;Element of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value", - "com.google.common.collect;ArrayTable;true;create;(Iterable,Iterable);;Element of Argument[1];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value", - // Utility classes (a few methods depending on lambda flow are not included) - "com.google.common.collect;Collections2;false;filter;(Collection,Predicate);;Element of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;Collections2;false;orderedPermutations;(Iterable,Comparator);;Element of Argument[0];Element of Element of ReturnValue;value", - "com.google.common.collect;Collections2;false;orderedPermutations;(Iterable);;Element of Argument[0];Element of Element of ReturnValue;value", - "com.google.common.collect;Collections2;false;permutations;(Collection);;Element of Argument[0];Element of Element of ReturnValue;value", - "com.google.common.collect;Iterators;false;addAll;(Collection,Iterator);;Element of Argument[1];Element of Argument[0];value", - "com.google.common.collect;Iterators;false;asEnumeration;(Iterator);;Element of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;Iterators;false;concat;(Iterator);;Element of Element of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;Iterators;false;concat;(Iterator[]);;Element of ArrayElement of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;Iterators;false;concat;(Iterator,Iterator);;Element of Argument[0..1];Element of ReturnValue;value", - "com.google.common.collect;Iterators;false;concat;(Iterator,Iterator,Iterator);;Element of Argument[0..2];Element of ReturnValue;value", - "com.google.common.collect;Iterators;false;concat;(Iterator,Iterator,Iterator,Iterator);;Element of Argument[0..3];Element of ReturnValue;value", - "com.google.common.collect;Iterators;false;consumingIterator;(Iterator);;Element of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;Iterators;false;cycle;(Iterable);;Element of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;Iterators;false;cycle;(Object[]);;ArrayElement of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;Iterators;false;filter;(Iterator,Class);;Element of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;Iterators;false;filter;(Iterator,Predicate);;Element of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;Iterators;false;find;(Iterator,Predicate);;Element of Argument[0];ReturnValue;value", - "com.google.common.collect;Iterators;false;find;(Iterator,Predicate,Object);;Element of Argument[0];ReturnValue;value", - "com.google.common.collect;Iterators;false;find;(Iterator,Predicate,Object);;Argument[2];ReturnValue;value", - "com.google.common.collect;Iterators;false;forArray;(Object[]);;ArrayElement of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;Iterators;false;forEnumeration;(Enumeration);;Element of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;Iterators;false;get;(Iterator,int);;Element of Argument[0];ReturnValue;value", - "com.google.common.collect;Iterators;false;get;(Iterator,int,Object);;Element of Argument[0];ReturnValue;value", - "com.google.common.collect;Iterators;false;get;(Iterator,int,Object);;Argument[2];ReturnValue;value", - "com.google.common.collect;Iterators;false;getLast;(Iterator);;Element of Argument[0];ReturnValue;value", - "com.google.common.collect;Iterators;false;getLast;(Iterator,Object);;Element of Argument[0];ReturnValue;value", - "com.google.common.collect;Iterators;false;getLast;(Iterator,Object);;Argument[1];ReturnValue;value", - "com.google.common.collect;Iterators;false;getNext;(Iterator,Object);;Element of Argument[0];ReturnValue;value", - "com.google.common.collect;Iterators;false;getNext;(Iterator,Object);;Argument[1];ReturnValue;value", - "com.google.common.collect;Iterators;false;getOnlyElement;(Iterator);;Element of Argument[0];ReturnValue;value", - "com.google.common.collect;Iterators;false;getOnlyElement;(Iterator,Object);;Element of Argument[0];ReturnValue;value", - "com.google.common.collect;Iterators;false;getOnlyElement;(Iterator,Object);;Argument[1];ReturnValue;value", - "com.google.common.collect;Iterators;false;limit;(Iterator,int);;Element of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;Iterators;false;mergeSorted;(Iterable,Comparator);;Element of Element of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;Iterators;false;partition;(Iterator,int);;Element of Argument[0];Element of Element of ReturnValue;value", - "com.google.common.collect;Iterators;false;paddedPartition;(Iterator,int);;Element of Argument[0];Element of Element of ReturnValue;value", - "com.google.common.collect;Iterators;false;peekingIterator;(Iterator);;Element of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;Iterators;false;peekingIterator;(PeekingIterator);;Element of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;Iterators;false;singletonIterator;(Object);;Argument[0];Element of ReturnValue;value", - "com.google.common.collect;Iterators;false;toArray;(Iterator,Class);;Element of Argument[0];ArrayElement of ReturnValue;value", - "com.google.common.collect;Iterators;false;tryFind;(Iterator,Predicate);;Element of Argument[0];Element of ReturnValue;value", - // "com.google.common.collect;Iterators;false;toString;(Iterator);;Element of Argument[0];ReturnValue;taint", - "com.google.common.collect;Iterators;false;unmodifiableIterator;(Iterator);;Element of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;Iterators;false;unmodifiableIterator;(UnmodifiableIterator);;Element of Argument[0];Element of ReturnValue;value", "com.google.common.collect;Iterables;false;addAll;(Collection,Iterable);;Element of Argument[1];Element of Argument[0];value", "com.google.common.collect;Iterables;false;concat;(Iterable);;Element of Element of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;Iterables;false;concat;(Iterable[]);;Element of ArrayElement of Argument[0];Element of ReturnValue;value", "com.google.common.collect;Iterables;false;concat;(Iterable,Iterable);;Element of Argument[0..1];Element of ReturnValue;value", "com.google.common.collect;Iterables;false;concat;(Iterable,Iterable,Iterable);;Element of Argument[0..2];Element of ReturnValue;value", "com.google.common.collect;Iterables;false;concat;(Iterable,Iterable,Iterable,Iterable);;Element of Argument[0..3];Element of ReturnValue;value", + "com.google.common.collect;Iterables;false;concat;(Iterable[]);;Element of ArrayElement of Argument[0];Element of ReturnValue;value", "com.google.common.collect;Iterables;false;consumingIterable;(Iterable);;Element of Argument[0];Element of ReturnValue;value", "com.google.common.collect;Iterables;false;cycle;(Iterable);;Element of Argument[0];Element of ReturnValue;value", "com.google.common.collect;Iterables;false;cycle;(Object[]);;ArrayElement of Argument[0];Element of ReturnValue;value", "com.google.common.collect;Iterables;false;filter;(Iterable,Class);;Element of Argument[0];Element of ReturnValue;value", "com.google.common.collect;Iterables;false;filter;(Iterable,Predicate);;Element of Argument[0];Element of ReturnValue;value", "com.google.common.collect;Iterables;false;find;(Iterable,Predicate);;Element of Argument[0];ReturnValue;value", - "com.google.common.collect;Iterables;false;find;(Iterable,Predicate,Object);;Element of Argument[0];ReturnValue;value", "com.google.common.collect;Iterables;false;find;(Iterable,Predicate,Object);;Argument[2];ReturnValue;value", + "com.google.common.collect;Iterables;false;find;(Iterable,Predicate,Object);;Element of Argument[0];ReturnValue;value", "com.google.common.collect;Iterables;false;get;(Iterable,int);;Element of Argument[0];ReturnValue;value", - "com.google.common.collect;Iterables;false;get;(Iterable,int,Object);;Element of Argument[0];ReturnValue;value", "com.google.common.collect;Iterables;false;get;(Iterable,int,Object);;Argument[2];ReturnValue;value", + "com.google.common.collect;Iterables;false;get;(Iterable,int,Object);;Element of Argument[0];ReturnValue;value", "com.google.common.collect;Iterables;false;getLast;(Iterable);;Element of Argument[0];ReturnValue;value", - "com.google.common.collect;Iterables;false;getLast;(Iterable,Object);;Element of Argument[0];ReturnValue;value", "com.google.common.collect;Iterables;false;getLast;(Iterable,Object);;Argument[1];ReturnValue;value", + "com.google.common.collect;Iterables;false;getLast;(Iterable,Object);;Element of Argument[0];ReturnValue;value", "com.google.common.collect;Iterables;false;getOnlyElement;(Iterable);;Element of Argument[0];ReturnValue;value", - "com.google.common.collect;Iterables;false;getOnlyElement;(Iterable,Object);;Element of Argument[0];ReturnValue;value", "com.google.common.collect;Iterables;false;getOnlyElement;(Iterable,Object);;Argument[1];ReturnValue;value", + "com.google.common.collect;Iterables;false;getOnlyElement;(Iterable,Object);;Element of Argument[0];ReturnValue;value", "com.google.common.collect;Iterables;false;limit;(Iterable,int);;Element of Argument[0];Element of ReturnValue;value", "com.google.common.collect;Iterables;false;mergeSorted;(Iterable,Comparator);;Element of Element of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;Iterables;false;partition;(Iterable,int);;Element of Argument[0];Element of Element of ReturnValue;value", "com.google.common.collect;Iterables;false;paddedPartition;(Iterable,int);;Element of Argument[0];Element of Element of ReturnValue;value", + "com.google.common.collect;Iterables;false;partition;(Iterable,int);;Element of Argument[0];Element of Element of ReturnValue;value", "com.google.common.collect;Iterables;false;skip;(Iterable,int);;Element of Argument[0];Element of ReturnValue;value", "com.google.common.collect;Iterables;false;toArray;(Iterable,Class);;Element of Argument[0];ArrayElement of ReturnValue;value", + //"com.google.common.collect;Iterables;false;toString;(Iterable);;Element of Argument[0];ReturnValue;taint", "com.google.common.collect;Iterables;false;tryFind;(Iterable,Predicate);;Element of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;Iterables;false;toString;(Iterable);;Element of Argument[0];ReturnValue;taint", - "com.google.common.collect;Iterables;false;unmodifiableIterable;(Iterable);;Element of Argument[0];Element of ReturnValue;value", "com.google.common.collect;Iterables;false;unmodifiableIterable;(ImmutableCollection);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Iterables;false;unmodifiableIterable;(Iterable);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Iterators;false;addAll;(Collection,Iterator);;Element of Argument[1];Element of Argument[0];value", + "com.google.common.collect;Iterators;false;asEnumeration;(Iterator);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Iterators;false;concat;(Iterator);;Element of Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Iterators;false;concat;(Iterator,Iterator);;Element of Argument[0..1];Element of ReturnValue;value", + "com.google.common.collect;Iterators;false;concat;(Iterator,Iterator,Iterator);;Element of Argument[0..2];Element of ReturnValue;value", + "com.google.common.collect;Iterators;false;concat;(Iterator,Iterator,Iterator,Iterator);;Element of Argument[0..3];Element of ReturnValue;value", + "com.google.common.collect;Iterators;false;concat;(Iterator[]);;Element of ArrayElement of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Iterators;false;consumingIterator;(Iterator);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Iterators;false;cycle;(Iterable);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Iterators;false;cycle;(Object[]);;ArrayElement of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Iterators;false;filter;(Iterator,Class);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Iterators;false;filter;(Iterator,Predicate);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Iterators;false;find;(Iterator,Predicate);;Element of Argument[0];ReturnValue;value", + "com.google.common.collect;Iterators;false;find;(Iterator,Predicate,Object);;Argument[2];ReturnValue;value", + "com.google.common.collect;Iterators;false;find;(Iterator,Predicate,Object);;Element of Argument[0];ReturnValue;value", + "com.google.common.collect;Iterators;false;forArray;(Object[]);;ArrayElement of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Iterators;false;forEnumeration;(Enumeration);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Iterators;false;get;(Iterator,int);;Element of Argument[0];ReturnValue;value", + "com.google.common.collect;Iterators;false;get;(Iterator,int,Object);;Argument[2];ReturnValue;value", + "com.google.common.collect;Iterators;false;get;(Iterator,int,Object);;Element of Argument[0];ReturnValue;value", + "com.google.common.collect;Iterators;false;getLast;(Iterator);;Element of Argument[0];ReturnValue;value", + "com.google.common.collect;Iterators;false;getLast;(Iterator,Object);;Argument[1];ReturnValue;value", + "com.google.common.collect;Iterators;false;getLast;(Iterator,Object);;Element of Argument[0];ReturnValue;value", + "com.google.common.collect;Iterators;false;getNext;(Iterator,Object);;Argument[1];ReturnValue;value", + "com.google.common.collect;Iterators;false;getNext;(Iterator,Object);;Element of Argument[0];ReturnValue;value", + "com.google.common.collect;Iterators;false;getOnlyElement;(Iterator);;Element of Argument[0];ReturnValue;value", + "com.google.common.collect;Iterators;false;getOnlyElement;(Iterator,Object);;Argument[1];ReturnValue;value", + "com.google.common.collect;Iterators;false;getOnlyElement;(Iterator,Object);;Element of Argument[0];ReturnValue;value", + "com.google.common.collect;Iterators;false;limit;(Iterator,int);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Iterators;false;mergeSorted;(Iterable,Comparator);;Element of Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Iterators;false;paddedPartition;(Iterator,int);;Element of Argument[0];Element of Element of ReturnValue;value", + "com.google.common.collect;Iterators;false;partition;(Iterator,int);;Element of Argument[0];Element of Element of ReturnValue;value", + "com.google.common.collect;Iterators;false;peekingIterator;(Iterator);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Iterators;false;peekingIterator;(PeekingIterator);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Iterators;false;singletonIterator;(Object);;Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Iterators;false;toArray;(Iterator,Class);;Element of Argument[0];ArrayElement of ReturnValue;value", + "com.google.common.collect;Iterators;false;tryFind;(Iterator,Predicate);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Iterators;false;unmodifiableIterator;(Iterator);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Iterators;false;unmodifiableIterator;(UnmodifiableIterator);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;LinkedHashMultimap;true;create;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;LinkedHashMultimap;true;create;(Multimap);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;LinkedHashMultiset;true;create;(Iterable);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;LinkedListMultimap;true;create;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;LinkedListMultimap;true;create;(Multimap);;MapValue of Argument[0];MapValue of ReturnValue;value", "com.google.common.collect;Lists;false;asList;(Object,Object,Object[]);;Argument[0..1];Element of ReturnValue;value", "com.google.common.collect;Lists;false;asList;(Object,Object,Object[]);;ArrayElement of Argument[2];Element of ReturnValue;value", "com.google.common.collect;Lists;false;asList;(Object,Object[]);;Argument[0];Element of ReturnValue;value", @@ -381,27 +314,41 @@ private class GuavaCollectCsv extends SummaryModelCsv { "com.google.common.collect;Lists;false;cartesianProduct;(List[]);;Element of ArrayElement of Argument[0];Element of Element of ReturnValue;value", "com.google.common.collect;Lists;false;charactersOf;(CharSequence);;Argument[0];Element of ReturnValue;taint", "com.google.common.collect;Lists;false;charactersOf;(String);;Argument[0];Element of ReturnValue;taint", - "com.google.common.collect;Lists;false;newArrayList;(Object[]);;ArrayElement of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;Lists;false;newArrayList;(Iterator);;Element of Argument[0];Element of ReturnValue;value", "com.google.common.collect;Lists;false;newArrayList;(Iterable);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Lists;false;newArrayList;(Iterator);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Lists;false;newArrayList;(Object[]);;ArrayElement of Argument[0];Element of ReturnValue;value", "com.google.common.collect;Lists;false;newCopyOnWriteArrayList;(Iterable);;Element of Argument[0];Element of ReturnValue;value", "com.google.common.collect;Lists;false;newLinkedList;(Iterable);;Element of Argument[0];Element of ReturnValue;value", "com.google.common.collect;Lists;false;partition;(List,int);;Element of Argument[0];Element of Element of ReturnValue;value", "com.google.common.collect;Lists;false;reverse;(List);;Element of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;Maps;false;asMap;(Set,Function);;Element of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;MapDifference$ValueDifference;true;leftValue;();;SyntheticField[com.google.common.collect.MapDifference.left] of Argument[-1];ReturnValue;value", + "com.google.common.collect;MapDifference$ValueDifference;true;rightValue;();;SyntheticField[com.google.common.collect.MapDifference.right] of Argument[-1];ReturnValue;value", + "com.google.common.collect;MapDifference;true;entriesDiffering;();;MapKey of SyntheticField[com.google.common.collect.MapDifference.left] of Argument[-1];MapKey of ReturnValue;value", + "com.google.common.collect;MapDifference;true;entriesDiffering;();;MapKey of SyntheticField[com.google.common.collect.MapDifference.right] of Argument[-1];MapKey of ReturnValue;value", + "com.google.common.collect;MapDifference;true;entriesDiffering;();;MapValue of SyntheticField[com.google.common.collect.MapDifference.left] of Argument[-1];SyntheticField[com.google.common.collect.MapDifference.left] of MapValue of ReturnValue;value", + "com.google.common.collect;MapDifference;true;entriesDiffering;();;MapValue of SyntheticField[com.google.common.collect.MapDifference.right] of Argument[-1];SyntheticField[com.google.common.collect.MapDifference.right] of MapValue of ReturnValue;value", + "com.google.common.collect;MapDifference;true;entriesInCommon;();;MapKey of SyntheticField[com.google.common.collect.MapDifference.left] of Argument[-1];MapKey of ReturnValue;value", + "com.google.common.collect;MapDifference;true;entriesInCommon;();;MapKey of SyntheticField[com.google.common.collect.MapDifference.right] of Argument[-1];MapKey of ReturnValue;value", + "com.google.common.collect;MapDifference;true;entriesInCommon;();;MapValue of SyntheticField[com.google.common.collect.MapDifference.left] of Argument[-1];MapValue of ReturnValue;value", + "com.google.common.collect;MapDifference;true;entriesInCommon;();;MapValue of SyntheticField[com.google.common.collect.MapDifference.right] of Argument[-1];MapValue of ReturnValue;value", + "com.google.common.collect;MapDifference;true;entriesOnlyOnLeft;();;MapKey of SyntheticField[com.google.common.collect.MapDifference.left] of Argument[-1];MapKey of ReturnValue;value", + "com.google.common.collect;MapDifference;true;entriesOnlyOnLeft;();;MapValue of SyntheticField[com.google.common.collect.MapDifference.left] of Argument[-1];MapValue of ReturnValue;value", + "com.google.common.collect;MapDifference;true;entriesOnlyOnRight;();;MapKey of SyntheticField[com.google.common.collect.MapDifference.right] of Argument[-1];MapKey of ReturnValue;value", + "com.google.common.collect;MapDifference;true;entriesOnlyOnRight;();;MapValue of SyntheticField[com.google.common.collect.MapDifference.right] of Argument[-1];MapValue of ReturnValue;value", "com.google.common.collect;Maps;false;asMap;(NavigableSet,Function);;Element of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;Maps;false;asMap;(Set,Function);;Element of Argument[0];MapKey of ReturnValue;value", "com.google.common.collect;Maps;false;asMap;(SortedSet,Function);;Element of Argument[0];MapKey of ReturnValue;value", "com.google.common.collect;Maps;false;difference;(Map,Map);;MapKey of Argument[0];MapKey of SyntheticField[com.google.common.collect.MapDifference.left] of ReturnValue;value", - "com.google.common.collect;Maps;false;difference;(Map,Map);;MapValue of Argument[0];MapValue of SyntheticField[com.google.common.collect.MapDifference.left] of ReturnValue;value", "com.google.common.collect;Maps;false;difference;(Map,Map);;MapKey of Argument[1];MapKey of SyntheticField[com.google.common.collect.MapDifference.right] of ReturnValue;value", + "com.google.common.collect;Maps;false;difference;(Map,Map);;MapValue of Argument[0];MapValue of SyntheticField[com.google.common.collect.MapDifference.left] of ReturnValue;value", "com.google.common.collect;Maps;false;difference;(Map,Map);;MapValue of Argument[1];MapValue of SyntheticField[com.google.common.collect.MapDifference.right] of ReturnValue;value", "com.google.common.collect;Maps;false;difference;(Map,Map,Equivalence);;MapKey of Argument[0];MapKey of SyntheticField[com.google.common.collect.MapDifference.left] of ReturnValue;value", - "com.google.common.collect;Maps;false;difference;(Map,Map,Equivalence);;MapValue of Argument[0];MapValue of SyntheticField[com.google.common.collect.MapDifference.left] of ReturnValue;value", "com.google.common.collect;Maps;false;difference;(Map,Map,Equivalence);;MapKey of Argument[1];MapKey of SyntheticField[com.google.common.collect.MapDifference.right] of ReturnValue;value", + "com.google.common.collect;Maps;false;difference;(Map,Map,Equivalence);;MapValue of Argument[0];MapValue of SyntheticField[com.google.common.collect.MapDifference.left] of ReturnValue;value", "com.google.common.collect;Maps;false;difference;(Map,Map,Equivalence);;MapValue of Argument[1];MapValue of SyntheticField[com.google.common.collect.MapDifference.right] of ReturnValue;value", "com.google.common.collect;Maps;false;difference;(SortedMap,Map);;MapKey of Argument[0];MapKey of SyntheticField[com.google.common.collect.MapDifference.left] of ReturnValue;value", - "com.google.common.collect;Maps;false;difference;(SortedMap,Map);;MapValue of Argument[0];MapValue of SyntheticField[com.google.common.collect.MapDifference.left] of ReturnValue;value", "com.google.common.collect;Maps;false;difference;(SortedMap,Map);;MapKey of Argument[1];MapKey of SyntheticField[com.google.common.collect.MapDifference.right] of ReturnValue;value", + "com.google.common.collect;Maps;false;difference;(SortedMap,Map);;MapValue of Argument[0];MapValue of SyntheticField[com.google.common.collect.MapDifference.left] of ReturnValue;value", "com.google.common.collect;Maps;false;difference;(SortedMap,Map);;MapValue of Argument[1];MapValue of SyntheticField[com.google.common.collect.MapDifference.right] of ReturnValue;value", "com.google.common.collect;Maps;false;filterEntries;;;MapKey of Argument[0];MapKey of ReturnValue;value", "com.google.common.collect;Maps;false;filterKeys;;;MapKey of Argument[0];MapKey of ReturnValue;value", @@ -424,80 +371,39 @@ private class GuavaCollectCsv extends SummaryModelCsv { "com.google.common.collect;Maps;false;synchronizedBiMap;(BiMap);;MapValue of Argument[0];MapValue of ReturnValue;value", "com.google.common.collect;Maps;false;synchronizedNavigableMap;(NavigableMap);;MapKey of Argument[0];MapKey of ReturnValue;value", "com.google.common.collect;Maps;false;synchronizedNavigableMap;(NavigableMap);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;Maps;false;toMap;(Iterable,Function);;Element of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;Maps;false;toMap;(Iterator,Function);;Element of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;Maps;false;transformValues;(Map,Function);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;Maps;false;transformValues;(NavigableMap,Function);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;Maps;false;transformValues;(SortedMap,Function);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;Maps;false;uniqueIndex;(Iterable,Function);;Element of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;Maps;false;uniqueIndex;(Iterator,Function);;Element of Argument[0];MapValue of ReturnValue;value", "com.google.common.collect;Maps;false;unmodifiableBiMap;(BiMap);;MapKey of Argument[0];MapKey of ReturnValue;value", "com.google.common.collect;Maps;false;unmodifiableBiMap;(BiMap);;MapValue of Argument[0];MapValue of ReturnValue;value", "com.google.common.collect;Maps;false;unmodifiableNavigableMap;(NavigableMap);;MapKey of Argument[0];MapKey of ReturnValue;value", "com.google.common.collect;Maps;false;unmodifiableNavigableMap;(NavigableMap);;MapValue of Argument[0];MapValue of ReturnValue;value", - "com.google.common.collect;Maps;false;toMap;(Iterable,Function);;Element of Argument[0];MapKey of ReturnValue;value", - "com.google.common.collect;Maps;false;toMap;(Iterator,Function);;Element of Argument[0];MapKey of ReturnValue;value", - "com.google.common.collect;Maps;false;uniqueIndex;(Iterable,Function);;Element of Argument[0];MapValue of ReturnValue;value", - "com.google.common.collect;Maps;false;uniqueIndex;(Iterator,Function);;Element of Argument[0];MapValue of ReturnValue;value", - "com.google.common.collect;Maps;false;transformValues;(Map,Function);;MapKey of Argument[0];MapKey of ReturnValue;value", - "com.google.common.collect;Maps;false;transformValues;(NavigableMap,Function);;MapKey of Argument[0];MapKey of ReturnValue;value", - "com.google.common.collect;Maps;false;transformValues;(SortedMap,Function);;MapKey of Argument[0];MapKey of ReturnValue;value", - "com.google.common.collect;MapDifference;true;entriesDiffering;();;MapKey of SyntheticField[com.google.common.collect.MapDifference.left] of Argument[-1];MapKey of ReturnValue;value", - "com.google.common.collect;MapDifference;true;entriesDiffering;();;MapKey of SyntheticField[com.google.common.collect.MapDifference.right] of Argument[-1];MapKey of ReturnValue;value", - "com.google.common.collect;MapDifference;true;entriesDiffering;();;MapValue of SyntheticField[com.google.common.collect.MapDifference.left] of Argument[-1];SyntheticField[com.google.common.collect.MapDifference.left] of MapValue of ReturnValue;value", - "com.google.common.collect;MapDifference;true;entriesDiffering;();;MapValue of SyntheticField[com.google.common.collect.MapDifference.right] of Argument[-1];SyntheticField[com.google.common.collect.MapDifference.right] of MapValue of ReturnValue;value", - "com.google.common.collect;MapDifference;true;entriesInCommon;();;MapKey of SyntheticField[com.google.common.collect.MapDifference.left] of Argument[-1];MapKey of ReturnValue;value", - "com.google.common.collect;MapDifference;true;entriesInCommon;();;MapKey of SyntheticField[com.google.common.collect.MapDifference.right] of Argument[-1];MapKey of ReturnValue;value", - "com.google.common.collect;MapDifference;true;entriesInCommon;();;MapValue of SyntheticField[com.google.common.collect.MapDifference.left] of Argument[-1];MapValue of ReturnValue;value", - "com.google.common.collect;MapDifference;true;entriesInCommon;();;MapValue of SyntheticField[com.google.common.collect.MapDifference.right] of Argument[-1];MapValue of ReturnValue;value", - "com.google.common.collect;MapDifference;true;entriesOnlyOnLeft;();;MapKey of SyntheticField[com.google.common.collect.MapDifference.left] of Argument[-1];MapKey of ReturnValue;value", - "com.google.common.collect;MapDifference;true;entriesOnlyOnLeft;();;MapValue of SyntheticField[com.google.common.collect.MapDifference.left] of Argument[-1];MapValue of ReturnValue;value", - "com.google.common.collect;MapDifference;true;entriesOnlyOnRight;();;MapKey of SyntheticField[com.google.common.collect.MapDifference.right] of Argument[-1];MapKey of ReturnValue;value", - "com.google.common.collect;MapDifference;true;entriesOnlyOnRight;();;MapValue of SyntheticField[com.google.common.collect.MapDifference.right] of Argument[-1];MapValue of ReturnValue;value", - "com.google.common.collect;MapDifference$ValueDifference;true;leftValue;();;SyntheticField[com.google.common.collect.MapDifference.left] of Argument[-1];ReturnValue;value", - "com.google.common.collect;MapDifference$ValueDifference;true;rightValue;();;SyntheticField[com.google.common.collect.MapDifference.right] of Argument[-1];ReturnValue;value", - "com.google.common.collect;Queues;false;drain;(BlockingQueue,Collection,int,long,TimeUnit);;Element of Argument[0];Element of Argument[1];value", - "com.google.common.collect;Queues;false;drain;(BlockingQueue,Collection,int,Duration);;Element of Argument[0];Element of Argument[1];value", - "com.google.common.collect;Queues;false;newArrayDeque;(Iterable);;Element of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;Queues;false;newConcurrentLinkedQueue;(Iterable);;Element of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;Queues;false;newLinkedBlockingDeque;(Iterable);;Element of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;Queues;false;newLinkedBlockingQueue;(Iterable);;Element of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;Queues;false;newPriorityBlockingQueue;(Iterable);;Element of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;Queues;false;newPriorityQueue;(Iterable);;Element of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;Queues;false;synchronizedQueue;(Queue);;Element of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;Queues;false;synchronizedDeque;(Deque);;Element of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;Sets$SetView;true;immutableCopy;();;Element of Argument[-1];Element of ReturnValue;value", - "com.google.common.collect;Sets$SetView;true;copyInto;(Set);;Element of Argument[-1];Element of Argument[0];value", - "com.google.common.collect;Sets;false;cartesianProduct;(List);;Element of Element of Argument[0];Element of Element of ReturnValue;value", - "com.google.common.collect;Sets;false;cartesianProduct;(Set[]);;Element of ArrayElement of Argument[0];Element of Element of ReturnValue;value", - "com.google.common.collect;Sets;false;combinations;(Set,int);;Element of Argument[0];Element of Element of ReturnValue;value", - "com.google.common.collect;Sets;false;difference;(Set,Set);;Element of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;Sets;false;filter;(NavigableSet,Predicate);;Element of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;Sets;false;filter;(Set,Predicate);;Element of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;Sets;false;filter;(SortedSet,Predicate);;Element of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;Sets;false;intersection;(Set,Set);;Element of Argument[0..1];Element of ReturnValue;value", - "com.google.common.collect;Sets;false;newConcurrentHashSet;(Iterable);;Element of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;Sets;false;newCopyOnWriteArraySet;(Iterable);;Element of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;Sets;false;newConcurrentHashSet;(Iterable);;Element of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;Sets;false;newHashSet;(Iterable);;Element of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;Sets;false;newHashSet;(Iterator);;Element of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;Sets;false;newHashSet;(Object[]);;ArrayElement of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;Sets;false;newLinkedHashSet;(Iterable);;Element of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;Sets;false;newTreeSet;(Iterable);;Element of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;Sets;false;newSetFromMap;(Map);;MapKey of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;Sets;false;powerSet;(Set);;Element of Argument[0];Element of Element of ReturnValue;value", - "com.google.common.collect;Sets;false;subSet;(NavigableSet,Range);;Element of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;Sets;false;symmetricDifference;(Set,Set);;Element of Argument[0..1];Element of ReturnValue;value", - "com.google.common.collect;Sets;false;union;(Set,Set);;Element of Argument[0..1];Element of ReturnValue;value", - "com.google.common.collect;Sets;false;synchronizedNavigableSet;(NavigableSet);;Element of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;Sets;false;unmodifiableNavigableSet;(NavigableSet);;Element of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;Multisets;false;copyHighestCountFirst;(Multiset);;Element of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;Multisets;false;difference;(Multiset,Multiset);;Element of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;Multisets;false;filter;(Multiset,Predicate);;Element of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;Multisets;false;immutableEntry;(Object,int);;Argument[0];Element of ReturnValue;value", - "com.google.common.collect;Multisets;false;intersection;(Multiset,Multiset);;Element of Argument[0..1];Element of ReturnValue;value", - "com.google.common.collect;Multisets;false;sum;(Multiset,Multiset);;Element of Argument[0..1];Element of ReturnValue;value", - "com.google.common.collect;Multisets;false;union;(Multiset,Multiset);;Element of Argument[0..1];Element of ReturnValue;value", - "com.google.common.collect;Multisets;false;unmodifiableMultiset;(Multiset);;Element of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;Multisets;false;unmodifiableMultiset;(ImmutableMultiset);;Element of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;Multisets;false;unmodifiableSortedMultiset;(SortedMultiset);;Element of Argument[0];Element of ReturnValue;value", - "com.google.common.collect;Multimaps;false;asMap;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value", - "com.google.common.collect;Multimaps;false;asMap;(Multimap);;MapValue of Argument[0];Element of MapValue of ReturnValue;value", + "com.google.common.collect;Multimap;true;asMap;();;MapKey of Argument[-1];MapKey of ReturnValue;value", + "com.google.common.collect;Multimap;true;asMap;();;MapValue of Argument[-1];Element of MapValue of ReturnValue;value", + "com.google.common.collect;Multimap;true;entries;();;MapKey of Argument[-1];MapKey of Element of ReturnValue;value", + "com.google.common.collect;Multimap;true;entries;();;MapValue of Argument[-1];MapValue of Element of ReturnValue;value", + "com.google.common.collect;Multimap;true;get;(Object);;MapValue of Argument[-1];Element of ReturnValue;value", + "com.google.common.collect;Multimap;true;keySet;();;MapKey of Argument[-1];Element of ReturnValue;value", + "com.google.common.collect;Multimap;true;keys;();;MapKey of Argument[-1];Element of ReturnValue;value", + "com.google.common.collect;Multimap;true;put;(Object,Object);;Argument[0];MapKey of Argument[-1];value", + "com.google.common.collect;Multimap;true;put;(Object,Object);;Argument[1];MapValue of Argument[-1];value", + "com.google.common.collect;Multimap;true;putAll;(Multimap);;MapKey of Argument[0];MapKey of Argument[-1];value", + "com.google.common.collect;Multimap;true;putAll;(Multimap);;MapValue of Argument[0];MapValue of Argument[-1];value", + "com.google.common.collect;Multimap;true;putAll;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value", + "com.google.common.collect;Multimap;true;putAll;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value", + "com.google.common.collect;Multimap;true;removeAll;(Object);;MapValue of Argument[-1];Element of ReturnValue;value", + "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Argument[0];MapKey of Argument[-1];value", + "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;Element of Argument[1];MapValue of Argument[-1];value", + "com.google.common.collect;Multimap;true;replaceValues;(Object,Iterable);;MapValue of Argument[-1];Element of ReturnValue;value", + "com.google.common.collect;Multimap;true;values;();;MapValue of Argument[-1];Element of ReturnValue;value", "com.google.common.collect;Multimaps;false;asMap;(ListMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value", "com.google.common.collect;Multimaps;false;asMap;(ListMultimap);;MapValue of Argument[0];Element of MapValue of ReturnValue;value", + "com.google.common.collect;Multimaps;false;asMap;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;Multimaps;false;asMap;(Multimap);;MapValue of Argument[0];Element of MapValue of ReturnValue;value", "com.google.common.collect;Multimaps;false;asMap;(SetMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value", "com.google.common.collect;Multimaps;false;asMap;(SetMultimap);;MapValue of Argument[0];Element of MapValue of ReturnValue;value", "com.google.common.collect;Multimaps;false;asMap;(SortedSetMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value", @@ -518,66 +424,152 @@ private class GuavaCollectCsv extends SummaryModelCsv { "com.google.common.collect;Multimaps;false;forMap;(Map);;MapValue of Argument[0];MapValue of ReturnValue;value", "com.google.common.collect;Multimaps;false;index;(Iterable,Function);;Element of Argument[0];MapValue of ReturnValue;value", "com.google.common.collect;Multimaps;false;index;(Iterator,Function);;Element of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;Multimaps;false;invertFrom;(Multimap,Multimap);;Argument[1];ReturnValue;value", "com.google.common.collect;Multimaps;false;invertFrom;(Multimap,Multimap);;MapKey of Argument[0];MapValue of Argument[1];value", "com.google.common.collect;Multimaps;false;invertFrom;(Multimap,Multimap);;MapValue of Argument[0];MapKey of Argument[1];value", - "com.google.common.collect;Multimaps;false;invertFrom;(Multimap,Multimap);;Argument[1];ReturnValue;value", - "com.google.common.collect;Multimaps;false;newMultimap;(Map,Supplier);;MapKey of Argument[0];MapKey of ReturnValue;value", - "com.google.common.collect;Multimaps;false;newMultimap;(Map,Supplier);;Element of MapValue of Argument[0];MapValue of ReturnValue;value", - "com.google.common.collect;Multimaps;false;newListMultimap;(Map,Supplier);;MapKey of Argument[0];MapKey of ReturnValue;value", "com.google.common.collect;Multimaps;false;newListMultimap;(Map,Supplier);;Element of MapValue of Argument[0];MapValue of ReturnValue;value", - "com.google.common.collect;Multimaps;false;newSetMultimap;(Map,Supplier);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;Multimaps;false;newListMultimap;(Map,Supplier);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;Multimaps;false;newMultimap;(Map,Supplier);;Element of MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;Multimaps;false;newMultimap;(Map,Supplier);;MapKey of Argument[0];MapKey of ReturnValue;value", "com.google.common.collect;Multimaps;false;newSetMultimap;(Map,Supplier);;Element of MapValue of Argument[0];MapValue of ReturnValue;value", - "com.google.common.collect;Multimaps;false;newSortedSetMultimap;(Map,Supplier);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;Multimaps;false;newSetMultimap;(Map,Supplier);;MapKey of Argument[0];MapKey of ReturnValue;value", "com.google.common.collect;Multimaps;false;newSortedSetMultimap;(Map,Supplier);;Element of MapValue of Argument[0];MapValue of ReturnValue;value", - "com.google.common.collect;Multimaps;false;transformValues;(Multimap,Function);;MapKey of Argument[0];MapKey of ReturnValue;value", - "com.google.common.collect;Multimaps;false;transformValues;(ListMultimap,Function);;MapKey of Argument[0];MapKey of ReturnValue;value", - "com.google.common.collect;Multimaps;false;synchronizedMultimap;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value", - "com.google.common.collect;Multimaps;false;synchronizedMultimap;(Multimap);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;Multimaps;false;newSortedSetMultimap;(Map,Supplier);;MapKey of Argument[0];MapKey of ReturnValue;value", "com.google.common.collect;Multimaps;false;synchronizedListMultimap;(ListMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value", "com.google.common.collect;Multimaps;false;synchronizedListMultimap;(ListMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;Multimaps;false;synchronizedMultimap;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;Multimaps;false;synchronizedMultimap;(Multimap);;MapValue of Argument[0];MapValue of ReturnValue;value", "com.google.common.collect;Multimaps;false;synchronizedSetMultimap;(SetMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value", "com.google.common.collect;Multimaps;false;synchronizedSetMultimap;(SetMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value", "com.google.common.collect;Multimaps;false;synchronizedSortedSetMultimap;(SortedSetMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value", "com.google.common.collect;Multimaps;false;synchronizedSortedSetMultimap;(SortedSetMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value", - "com.google.common.collect;Multimaps;false;unmodifiableMultimap;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value", - "com.google.common.collect;Multimaps;false;unmodifiableMultimap;(Multimap);;MapValue of Argument[0];MapValue of ReturnValue;value", - "com.google.common.collect;Multimaps;false;unmodifiableMultimap;(ImmutableMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value", - "com.google.common.collect;Multimaps;false;unmodifiableMultimap;(ImmutableMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value", - "com.google.common.collect;Multimaps;false;unmodifiableListMultimap;(ListMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value", - "com.google.common.collect;Multimaps;false;unmodifiableListMultimap;(ListMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;Multimaps;false;transformValues;(ListMultimap,Function);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;Multimaps;false;transformValues;(Multimap,Function);;MapKey of Argument[0];MapKey of ReturnValue;value", "com.google.common.collect;Multimaps;false;unmodifiableListMultimap;(ImmutableListMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value", "com.google.common.collect;Multimaps;false;unmodifiableListMultimap;(ImmutableListMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value", - "com.google.common.collect;Multimaps;false;unmodifiableSetMultimap;(SetMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value", - "com.google.common.collect;Multimaps;false;unmodifiableSetMultimap;(SetMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;Multimaps;false;unmodifiableListMultimap;(ListMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;Multimaps;false;unmodifiableListMultimap;(ListMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;Multimaps;false;unmodifiableMultimap;(ImmutableMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;Multimaps;false;unmodifiableMultimap;(ImmutableMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;Multimaps;false;unmodifiableMultimap;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;Multimaps;false;unmodifiableMultimap;(Multimap);;MapValue of Argument[0];MapValue of ReturnValue;value", "com.google.common.collect;Multimaps;false;unmodifiableSetMultimap;(ImmutableSetMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value", "com.google.common.collect;Multimaps;false;unmodifiableSetMultimap;(ImmutableSetMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;Multimaps;false;unmodifiableSetMultimap;(SetMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;Multimaps;false;unmodifiableSetMultimap;(SetMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value", "com.google.common.collect;Multimaps;false;unmodifiableSortedSetMultimap;(SortedSetMultimap);;MapKey of Argument[0];MapKey of ReturnValue;value", "com.google.common.collect;Multimaps;false;unmodifiableSortedSetMultimap;(SortedSetMultimap);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;Multiset$Entry;true;getElement;();;Element of Argument[-1];ReturnValue;value", + "com.google.common.collect;Multiset;true;add;(Object,int);;Argument[0];Element of Argument[-1];value", + "com.google.common.collect;Multiset;true;elementSet;();;Element of Argument[-1];Element of ReturnValue;value", + "com.google.common.collect;Multiset;true;entrySet;();;Element of Argument[-1];Element of Element of ReturnValue;value", + "com.google.common.collect;Multiset;true;setCount;(Object,int);;Argument[0];Element of Argument[-1];value", + "com.google.common.collect;Multiset;true;setCount;(Object,int,int);;Argument[0];Element of Argument[-1];value", + "com.google.common.collect;Multisets;false;copyHighestCountFirst;(Multiset);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Multisets;false;difference;(Multiset,Multiset);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Multisets;false;filter;(Multiset,Predicate);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Multisets;false;immutableEntry;(Object,int);;Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Multisets;false;intersection;(Multiset,Multiset);;Element of Argument[0..1];Element of ReturnValue;value", + "com.google.common.collect;Multisets;false;sum;(Multiset,Multiset);;Element of Argument[0..1];Element of ReturnValue;value", + "com.google.common.collect;Multisets;false;union;(Multiset,Multiset);;Element of Argument[0..1];Element of ReturnValue;value", + "com.google.common.collect;Multisets;false;unmodifiableMultiset;(ImmutableMultiset);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Multisets;false;unmodifiableMultiset;(Multiset);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Multisets;false;unmodifiableSortedMultiset;(SortedMultiset);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;MutableClassToInstanceMap;true;create;(Map);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;MutableClassToInstanceMap;true;create;(Map);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;ObjectArrays;false;concat;(Object,Object[]);;Argument[0];ArrayElement of ReturnValue;value", + "com.google.common.collect;ObjectArrays;false;concat;(Object,Object[]);;ArrayElement of Argument[1];ArrayElement of ReturnValue;value", + "com.google.common.collect;ObjectArrays;false;concat;(Object[],Object);;Argument[1];ArrayElement of ReturnValue;value", + "com.google.common.collect;ObjectArrays;false;concat;(Object[],Object);;ArrayElement of Argument[0];ArrayElement of ReturnValue;value", + "com.google.common.collect;ObjectArrays;false;concat;(Object[],Object[],Class);;ArrayElement of Argument[0..1];ArrayElement of ReturnValue;value", + "com.google.common.collect;Queues;false;drain;(BlockingQueue,Collection,int,Duration);;Element of Argument[0];Element of Argument[1];value", + "com.google.common.collect;Queues;false;drain;(BlockingQueue,Collection,int,long,TimeUnit);;Element of Argument[0];Element of Argument[1];value", + "com.google.common.collect;Queues;false;newArrayDeque;(Iterable);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Queues;false;newConcurrentLinkedQueue;(Iterable);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Queues;false;newLinkedBlockingDeque;(Iterable);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Queues;false;newLinkedBlockingQueue;(Iterable);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Queues;false;newPriorityBlockingQueue;(Iterable);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Queues;false;newPriorityQueue;(Iterable);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Queues;false;synchronizedDeque;(Deque);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Queues;false;synchronizedQueue;(Queue);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Sets$SetView;true;copyInto;(Set);;Element of Argument[-1];Element of Argument[0];value", + "com.google.common.collect;Sets$SetView;true;immutableCopy;();;Element of Argument[-1];Element of ReturnValue;value", + "com.google.common.collect;Sets;false;cartesianProduct;(List);;Element of Element of Argument[0];Element of Element of ReturnValue;value", + "com.google.common.collect;Sets;false;cartesianProduct;(Set[]);;Element of ArrayElement of Argument[0];Element of Element of ReturnValue;value", + "com.google.common.collect;Sets;false;combinations;(Set,int);;Element of Argument[0];Element of Element of ReturnValue;value", + "com.google.common.collect;Sets;false;difference;(Set,Set);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Sets;false;filter;(NavigableSet,Predicate);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Sets;false;filter;(Set,Predicate);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Sets;false;filter;(SortedSet,Predicate);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Sets;false;intersection;(Set,Set);;Element of Argument[0..1];Element of ReturnValue;value", + "com.google.common.collect;Sets;false;newConcurrentHashSet;(Iterable);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Sets;false;newConcurrentHashSet;(Iterable);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Sets;false;newCopyOnWriteArraySet;(Iterable);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Sets;false;newHashSet;(Iterable);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Sets;false;newHashSet;(Iterator);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Sets;false;newHashSet;(Object[]);;ArrayElement of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Sets;false;newLinkedHashSet;(Iterable);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Sets;false;newSetFromMap;(Map);;MapKey of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Sets;false;newTreeSet;(Iterable);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Sets;false;powerSet;(Set);;Element of Argument[0];Element of Element of ReturnValue;value", + "com.google.common.collect;Sets;false;subSet;(NavigableSet,Range);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Sets;false;symmetricDifference;(Set,Set);;Element of Argument[0..1];Element of ReturnValue;value", + "com.google.common.collect;Sets;false;synchronizedNavigableSet;(NavigableSet);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Sets;false;union;(Set,Set);;Element of Argument[0..1];Element of ReturnValue;value", + "com.google.common.collect;Sets;false;unmodifiableNavigableSet;(NavigableSet);;Element of Argument[0];Element of ReturnValue;value", + "com.google.common.collect;Table$Cell;true;getColumnKey;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];ReturnValue;value", + "com.google.common.collect;Table$Cell;true;getRowKey;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];ReturnValue;value", + "com.google.common.collect;Table$Cell;true;getValue;();;MapValue of Argument[-1];ReturnValue;value", + "com.google.common.collect;Table;true;cellSet;();;MapValue of Argument[-1];MapValue of Element of ReturnValue;value", + "com.google.common.collect;Table;true;cellSet;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];SyntheticField[com.google.common.collect.Table.columnKey] of Element of ReturnValue;value", + "com.google.common.collect;Table;true;cellSet;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];SyntheticField[com.google.common.collect.Table.rowKey] of Element of ReturnValue;value", + "com.google.common.collect;Table;true;column;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value", + "com.google.common.collect;Table;true;column;(Object);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];MapKey of ReturnValue;value", + "com.google.common.collect;Table;true;columnKeySet;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];Element of ReturnValue;value", + "com.google.common.collect;Table;true;columnMap;();;MapValue of Argument[-1];MapValue of MapValue of ReturnValue;value", + "com.google.common.collect;Table;true;columnMap;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];MapKey of ReturnValue;value", + "com.google.common.collect;Table;true;columnMap;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];MapKey of MapValue of ReturnValue;value", + "com.google.common.collect;Table;true;get;(Object,Object);;MapValue of Argument[-1];ReturnValue;value", + "com.google.common.collect;Table;true;put;(Object,Object,Object);;Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];value", + "com.google.common.collect;Table;true;put;(Object,Object,Object);;Argument[1];SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];value", + "com.google.common.collect;Table;true;put;(Object,Object,Object);;Argument[2];MapValue of Argument[-1];value", + "com.google.common.collect;Table;true;putAll;(Table);;MapValue of Argument[0];MapValue of Argument[-1];value", + "com.google.common.collect;Table;true;putAll;(Table);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];value", + "com.google.common.collect;Table;true;putAll;(Table);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];value", + "com.google.common.collect;Table;true;remove;(Object,Object);;MapValue of Argument[-1];ReturnValue;value", + "com.google.common.collect;Table;true;row;(Object);;MapValue of Argument[-1];MapValue of ReturnValue;value", + "com.google.common.collect;Table;true;row;(Object);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];MapKey of ReturnValue;value", + "com.google.common.collect;Table;true;rowKeySet;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];Element of ReturnValue;value", + "com.google.common.collect;Table;true;rowMap;();;MapValue of Argument[-1];MapValue of MapValue of ReturnValue;value", + "com.google.common.collect;Table;true;rowMap;();;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[-1];MapKey of MapValue of ReturnValue;value", + "com.google.common.collect;Table;true;rowMap;();;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[-1];MapKey of ReturnValue;value", + "com.google.common.collect;Table;true;values;();;MapValue of Argument[-1];Element of ReturnValue;value", "com.google.common.collect;Tables;false;immutableCell;(Object,Object,Object);;Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value", "com.google.common.collect;Tables;false;immutableCell;(Object,Object,Object);;Argument[1];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value", "com.google.common.collect;Tables;false;immutableCell;(Object,Object,Object);;Argument[2];MapValue of ReturnValue;value", "com.google.common.collect;Tables;false;newCustomTable;(Map,Supplier);;MapKey of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value", "com.google.common.collect;Tables;false;newCustomTable;(Map,Supplier);;MapKey of MapValue of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value", "com.google.common.collect;Tables;false;newCustomTable;(Map,Supplier);;MapValue of MapValue of Argument[0];MapValue of ReturnValue;value", - "com.google.common.collect;Tables;false;transpose;(Table);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value", - "com.google.common.collect;Tables;false;transpose;(Table);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value", - "com.google.common.collect;Tables;false;transpose;(Table);;MapValue of Argument[0];MapValue of ReturnValue;value", - "com.google.common.collect;Tables;false;transformValues;(Table,Function);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value", - "com.google.common.collect;Tables;false;transformValues;(Table,Function);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value", - "com.google.common.collect;Tables;false;synchronizedTable;(Table);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value", - "com.google.common.collect;Tables;false;synchronizedTable;(Table);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value", "com.google.common.collect;Tables;false;synchronizedTable;(Table);;MapValue of Argument[0];MapValue of ReturnValue;value", - "com.google.common.collect;Tables;false;unmodifiableTable;(Table);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value", - "com.google.common.collect;Tables;false;unmodifiableTable;(Table);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value", - "com.google.common.collect;Tables;false;unmodifiableTable;(Table);;MapValue of Argument[0];MapValue of ReturnValue;value", - "com.google.common.collect;Tables;false;unmodifiableRowSortedTable;(RowSortedTable);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value", - "com.google.common.collect;Tables;false;unmodifiableRowSortedTable;(RowSortedTable);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value", + "com.google.common.collect;Tables;false;synchronizedTable;(Table);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value", + "com.google.common.collect;Tables;false;synchronizedTable;(Table);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value", + "com.google.common.collect;Tables;false;transformValues;(Table,Function);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value", + "com.google.common.collect;Tables;false;transformValues;(Table,Function);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value", + "com.google.common.collect;Tables;false;transpose;(Table);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;Tables;false;transpose;(Table);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value", + "com.google.common.collect;Tables;false;transpose;(Table);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value", "com.google.common.collect;Tables;false;unmodifiableRowSortedTable;(RowSortedTable);;MapValue of Argument[0];MapValue of ReturnValue;value", - "com.google.common.collect;ObjectArrays;false;concat;(Object,Object[]);;Argument[0];ArrayElement of ReturnValue;value", - "com.google.common.collect;ObjectArrays;false;concat;(Object,Object[]);;ArrayElement of Argument[1];ArrayElement of ReturnValue;value", - "com.google.common.collect;ObjectArrays;false;concat;(Object[],Object);;ArrayElement of Argument[0];ArrayElement of ReturnValue;value", - "com.google.common.collect;ObjectArrays;false;concat;(Object[],Object);;Argument[1];ArrayElement of ReturnValue;value", - "com.google.common.collect;ObjectArrays;false;concat;(Object[],Object[],Class);;ArrayElement of Argument[0..1];ArrayElement of ReturnValue;value" + "com.google.common.collect;Tables;false;unmodifiableRowSortedTable;(RowSortedTable);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value", + "com.google.common.collect;Tables;false;unmodifiableRowSortedTable;(RowSortedTable);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value", + "com.google.common.collect;Tables;false;unmodifiableTable;(Table);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;Tables;false;unmodifiableTable;(Table);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value", + "com.google.common.collect;Tables;false;unmodifiableTable;(Table);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value", + "com.google.common.collect;TreeBasedTable;true;create;(TreeBasedTable);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;TreeBasedTable;true;create;(TreeBasedTable);;SyntheticField[com.google.common.collect.Table.columnKey] of Argument[0];SyntheticField[com.google.common.collect.Table.columnKey] of ReturnValue;value", + "com.google.common.collect;TreeBasedTable;true;create;(TreeBasedTable);;SyntheticField[com.google.common.collect.Table.rowKey] of Argument[0];SyntheticField[com.google.common.collect.Table.rowKey] of ReturnValue;value", + "com.google.common.collect;TreeMultimap;true;create;(Multimap);;MapKey of Argument[0];MapKey of ReturnValue;value", + "com.google.common.collect;TreeMultimap;true;create;(Multimap);;MapValue of Argument[0];MapValue of ReturnValue;value", + "com.google.common.collect;TreeMultiset;true;create;(Iterable);;Element of Argument[0];Element of ReturnValue;value" ] } } diff --git a/java/ql/test/library-tests/frameworks/guava/generated/collect/Test.java b/java/ql/test/library-tests/frameworks/guava/generated/collect/Test.java index a99a3c6b594..cd012b7f156 100644 --- a/java/ql/test/library-tests/frameworks/guava/generated/collect/Test.java +++ b/java/ql/test/library-tests/frameworks/guava/generated/collect/Test.java @@ -4865,13 +4865,13 @@ public class Test { out = Iterables.toArray(in, (Class)null); sink(getArrayElement(out)); // $ hasValueFlow } - { - // "com.google.common.collect;Iterables;false;toString;(Iterable);;Element of Argument[0];ReturnValue;taint" - String out = null; - Iterable in = (Iterable)List.of(source()); - out = Iterables.toString(in); - sink(out); // $ hasTaintFlow - } + // { + // // "com.google.common.collect;Iterables;false;toString;(Iterable);;Element of Argument[0];ReturnValue;taint" + // String out = null; + // Iterable in = (Iterable)List.of(source()); + // out = Iterables.toString(in); + // sink(out); // $ hasTaintFlow + // } { // "com.google.common.collect;Iterables;false;tryFind;(Iterable,Predicate);;Element of Argument[0];Element of ReturnValue;value" Optional out = null; From 8faeab18b9f817ae512762c4088e838d21c306ca Mon Sep 17 00:00:00 2001 From: Robert Marsh Date: Wed, 22 Sep 2021 11:54:47 -0700 Subject: [PATCH 548/741] C++: move ResolveCall.qll out of internal directory --- .../code/cpp/ir/dataflow/DefaultTaintTracking.qll | 2 +- .../cpp/ir/dataflow/{internal => }/ResolveCall.qll | 10 +++++----- .../semmle/code/cpp/security/FunctionWithWrappers.qll | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) rename cpp/ql/lib/semmle/code/cpp/ir/dataflow/{internal => }/ResolveCall.qll (69%) diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/DefaultTaintTracking.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/DefaultTaintTracking.qll index 84a40eedba1..93c7bfb03e7 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/DefaultTaintTracking.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/DefaultTaintTracking.qll @@ -4,7 +4,7 @@ private import semmle.code.cpp.ir.dataflow.DataFlow private import semmle.code.cpp.ir.dataflow.internal.DataFlowUtil private import semmle.code.cpp.ir.dataflow.DataFlow3 private import semmle.code.cpp.ir.IR -private import semmle.code.cpp.ir.dataflow.internal.ResolveCall +private import semmle.code.cpp.ir.dataflow.ResolveCall private import semmle.code.cpp.controlflow.IRGuards private import semmle.code.cpp.models.interfaces.Taint private import semmle.code.cpp.models.interfaces.DataFlow diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/ResolveCall.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/ResolveCall.qll similarity index 69% rename from cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/ResolveCall.qll rename to cpp/ql/lib/semmle/code/cpp/ir/dataflow/ResolveCall.qll index 38f632e1d05..f25386d3ba8 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/ResolveCall.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/ResolveCall.qll @@ -1,19 +1,19 @@ /** * Provides a predicate for non-contextual virtual dispatch and function - * pointer resolution, built on top of the `DataFlowDispatch` library. + * pointer resolution. */ import cpp private import semmle.code.cpp.ir.ValueNumbering -private import DataFlowDispatch +private import internal.DataFlowDispatch private import semmle.code.cpp.ir.IR /** * Resolve potential target function(s) for `call`. * - * If `call` is a call through a function pointer (`ExprCall`) or - * targets a virtual method, simple data flow analysis is performed - * in order to identify target(s). + * If `call` is a call through a function pointer (`ExprCall`) or its target is + * a virtual member function, simple data flow analysis is performed in order + * to identify the possible target(s). */ Function resolveCall(Call call) { exists(CallInstruction callInstruction | diff --git a/cpp/ql/lib/semmle/code/cpp/security/FunctionWithWrappers.qll b/cpp/ql/lib/semmle/code/cpp/security/FunctionWithWrappers.qll index 15a3ffdc3c5..654e9d92451 100644 --- a/cpp/ql/lib/semmle/code/cpp/security/FunctionWithWrappers.qll +++ b/cpp/ql/lib/semmle/code/cpp/security/FunctionWithWrappers.qll @@ -17,7 +17,7 @@ import cpp import PrintfLike -private import semmle.code.cpp.ir.dataflow.internal.ResolveCall +private import semmle.code.cpp.ir.dataflow.ResolveCall bindingset[index] private string toCause(Function func, int index) { From 6f03c3e2522cfc72dd204146fd3a64b6a009933f Mon Sep 17 00:00:00 2001 From: Robert Marsh Date: Wed, 22 Sep 2021 14:19:23 -0700 Subject: [PATCH 549/741] C++: Accept command injection test changes Making the DefaultTaintTracking configurations inactive removed many unneeded nodes and edges from the PathGraph predicates. --- .../SAMATE/ExecTainted/ExecTainted.expected | 22 -- .../semmle/ExecTainted/ExecTainted.expected | 276 ------------------ 2 files changed, 298 deletions(-) diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-078/SAMATE/ExecTainted/ExecTainted.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-078/SAMATE/ExecTainted/ExecTainted.expected index bebeb5dd3d2..51c8906abb5 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-078/SAMATE/ExecTainted/ExecTainted.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-078/SAMATE/ExecTainted/ExecTainted.expected @@ -1,38 +1,16 @@ edges -| tests.cpp:33:34:33:39 | call to getenv | tests.cpp:33:34:33:39 | Store | -| tests.cpp:33:34:33:39 | call to getenv | tests.cpp:35:17:35:27 | environment | -| tests.cpp:33:34:33:39 | call to getenv | tests.cpp:38:39:38:49 | (const char *)... | -| tests.cpp:33:34:33:39 | call to getenv | tests.cpp:38:39:38:49 | environment | | tests.cpp:33:34:33:39 | call to getenv | tests.cpp:38:39:38:49 | environment indirection | -| tests.cpp:33:34:33:39 | call to getenv | tests.cpp:38:39:38:49 | environment indirection | -| tests.cpp:33:34:33:39 | call to getenv | tests.cpp:42:5:42:16 | Phi | | tests.cpp:38:25:38:36 | strncat output argument | tests.cpp:42:5:42:16 | Phi | | tests.cpp:38:39:38:49 | environment indirection | tests.cpp:38:25:38:36 | strncat output argument | | tests.cpp:38:39:38:49 | environment indirection | tests.cpp:38:25:38:36 | strncat output argument | -| tests.cpp:38:39:38:49 | environment indirection | tests.cpp:38:25:38:36 | strncat output argument | -| tests.cpp:38:39:38:49 | environment indirection | tests.cpp:38:25:38:36 | strncat output argument | | tests.cpp:42:5:42:16 | Phi | tests.cpp:51:22:51:25 | badSource output argument | -| tests.cpp:42:5:42:16 | Phi | tests.cpp:51:22:51:25 | badSource output argument | -| tests.cpp:51:22:51:25 | badSource output argument | tests.cpp:53:16:53:19 | (const char *)... | -| tests.cpp:51:22:51:25 | badSource output argument | tests.cpp:53:16:53:19 | data indirection | | tests.cpp:51:22:51:25 | badSource output argument | tests.cpp:53:16:53:19 | data indirection | nodes -| tests.cpp:33:34:33:39 | Store | semmle.label | Store | | tests.cpp:33:34:33:39 | call to getenv | semmle.label | call to getenv | -| tests.cpp:33:34:33:39 | call to getenv | semmle.label | call to getenv | -| tests.cpp:33:34:33:39 | call to getenv | semmle.label | call to getenv | -| tests.cpp:35:17:35:27 | environment | semmle.label | environment | | tests.cpp:38:25:38:36 | strncat output argument | semmle.label | strncat output argument | -| tests.cpp:38:39:38:49 | (const char *)... | semmle.label | (const char *)... | -| tests.cpp:38:39:38:49 | environment | semmle.label | environment | -| tests.cpp:38:39:38:49 | environment indirection | semmle.label | environment indirection | | tests.cpp:38:39:38:49 | environment indirection | semmle.label | environment indirection | | tests.cpp:42:5:42:16 | Phi | semmle.label | Phi | -| tests.cpp:42:5:42:16 | Phi | semmle.label | Phi | | tests.cpp:51:22:51:25 | badSource output argument | semmle.label | badSource output argument | -| tests.cpp:51:22:51:25 | badSource output argument | semmle.label | badSource output argument | -| tests.cpp:53:16:53:19 | (const char *)... | semmle.label | (const char *)... | -| tests.cpp:53:16:53:19 | data indirection | semmle.label | data indirection | | tests.cpp:53:16:53:19 | data indirection | semmle.label | data indirection | subpaths #select diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-078/semmle/ExecTainted/ExecTainted.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-078/semmle/ExecTainted/ExecTainted.expected index 8d290f47f45..72dfd5e7967 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-078/semmle/ExecTainted/ExecTainted.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-078/semmle/ExecTainted/ExecTainted.expected @@ -1,338 +1,62 @@ edges -| test.cpp:16:20:16:23 | argv | test.cpp:16:20:16:26 | Store | -| test.cpp:16:20:16:23 | argv | test.cpp:16:20:16:26 | access to array | -| test.cpp:16:20:16:23 | argv | test.cpp:22:45:22:52 | userName | | test.cpp:16:20:16:23 | argv | test.cpp:22:45:22:52 | userName indirection | -| test.cpp:16:20:16:23 | argv | test.cpp:22:45:22:52 | userName indirection | -| test.cpp:16:20:16:23 | argv | test.cpp:23:12:23:19 | (const char *)... | -| test.cpp:16:20:16:23 | argv | test.cpp:23:12:23:19 | command1 indirection | -| test.cpp:16:20:16:23 | argv | test.cpp:29:45:29:52 | (const char *)... | -| test.cpp:16:20:16:23 | argv | test.cpp:29:45:29:52 | userName | -| test.cpp:16:20:16:23 | argv | test.cpp:29:45:29:52 | userName indirection | | test.cpp:22:13:22:20 | sprintf output argument | test.cpp:23:12:23:19 | command1 indirection | | test.cpp:22:45:22:52 | userName indirection | test.cpp:22:13:22:20 | sprintf output argument | | test.cpp:22:45:22:52 | userName indirection | test.cpp:22:13:22:20 | sprintf output argument | -| test.cpp:22:45:22:52 | userName indirection | test.cpp:22:13:22:20 | sprintf output argument | -| test.cpp:22:45:22:52 | userName indirection | test.cpp:22:13:22:20 | sprintf output argument | -| test.cpp:38:17:38:22 | call to getenv | test.cpp:38:17:38:22 | Store | -| test.cpp:38:17:38:22 | call to getenv | test.cpp:41:20:41:24 | (const char *)... | -| test.cpp:38:17:38:22 | call to getenv | test.cpp:41:20:41:24 | envCC | -| test.cpp:38:17:38:22 | call to getenv | test.cpp:41:20:41:24 | envCC indirection | -| test.cpp:47:21:47:26 | call to getenv | test.cpp:47:21:47:26 | Store | -| test.cpp:47:21:47:26 | call to getenv | test.cpp:50:35:50:43 | envCflags | | test.cpp:47:21:47:26 | call to getenv | test.cpp:50:35:50:43 | envCflags indirection | -| test.cpp:47:21:47:26 | call to getenv | test.cpp:50:35:50:43 | envCflags indirection | -| test.cpp:47:21:47:26 | call to getenv | test.cpp:51:10:51:16 | (const char *)... | -| test.cpp:47:21:47:26 | call to getenv | test.cpp:51:10:51:16 | command indirection | | test.cpp:50:11:50:17 | sprintf output argument | test.cpp:51:10:51:16 | command indirection | | test.cpp:50:35:50:43 | envCflags indirection | test.cpp:50:11:50:17 | sprintf output argument | | test.cpp:50:35:50:43 | envCflags indirection | test.cpp:50:11:50:17 | sprintf output argument | -| test.cpp:50:35:50:43 | envCflags indirection | test.cpp:50:11:50:17 | sprintf output argument | -| test.cpp:50:35:50:43 | envCflags indirection | test.cpp:50:11:50:17 | sprintf output argument | -| test.cpp:62:9:62:16 | (void *)... | test.cpp:62:9:62:16 | filename indirection | -| test.cpp:62:9:62:16 | fread output argument | test.cpp:64:20:64:27 | (const char *)... | | test.cpp:62:9:62:16 | fread output argument | test.cpp:64:20:64:27 | filename indirection | -| test.cpp:62:9:62:16 | fread output argument | test.cpp:64:20:64:27 | filename indirection | -| test.cpp:62:9:62:16 | fread output argument | test.cpp:65:10:65:16 | (const char *)... | -| test.cpp:62:9:62:16 | fread output argument | test.cpp:65:10:65:16 | command indirection | | test.cpp:64:11:64:17 | strncat output argument | test.cpp:65:10:65:16 | command indirection | | test.cpp:64:20:64:27 | filename indirection | test.cpp:64:11:64:17 | strncat output argument | | test.cpp:64:20:64:27 | filename indirection | test.cpp:64:11:64:17 | strncat output argument | -| test.cpp:64:20:64:27 | filename indirection | test.cpp:64:11:64:17 | strncat output argument | -| test.cpp:64:20:64:27 | filename indirection | test.cpp:64:11:64:17 | strncat output argument | -| test.cpp:71:9:71:15 | (void *)... | test.cpp:71:9:71:15 | command indirection | -| test.cpp:71:9:71:15 | fread output argument | test.cpp:73:11:73:17 | array to pointer conversion | -| test.cpp:71:9:71:15 | fread output argument | test.cpp:73:11:73:17 | command indirection | -| test.cpp:71:9:71:15 | fread output argument | test.cpp:74:10:74:16 | (const char *)... | -| test.cpp:71:9:71:15 | fread output argument | test.cpp:74:10:74:16 | command indirection | -| test.cpp:82:9:82:16 | (void *)... | test.cpp:82:9:82:16 | filename indirection | -| test.cpp:82:9:82:16 | fread output argument | test.cpp:84:20:84:27 | (const char *)... | | test.cpp:82:9:82:16 | fread output argument | test.cpp:84:20:84:27 | filename indirection | -| test.cpp:82:9:82:16 | fread output argument | test.cpp:84:20:84:27 | filename indirection | -| test.cpp:82:9:82:16 | fread output argument | test.cpp:85:32:85:38 | array to pointer conversion | -| test.cpp:82:9:82:16 | fread output argument | test.cpp:85:32:85:38 | command indirection | | test.cpp:84:11:84:17 | strncat output argument | test.cpp:85:32:85:38 | command indirection | | test.cpp:84:20:84:27 | filename indirection | test.cpp:84:11:84:17 | strncat output argument | | test.cpp:84:20:84:27 | filename indirection | test.cpp:84:11:84:17 | strncat output argument | -| test.cpp:84:20:84:27 | filename indirection | test.cpp:84:11:84:17 | strncat output argument | -| test.cpp:84:20:84:27 | filename indirection | test.cpp:84:11:84:17 | strncat output argument | -| test.cpp:91:9:91:16 | (void *)... | test.cpp:91:9:91:16 | filename indirection | -| test.cpp:91:9:91:16 | fread output argument | test.cpp:93:17:93:24 | (const char *)... | | test.cpp:91:9:91:16 | fread output argument | test.cpp:93:17:93:24 | filename indirection | -| test.cpp:91:9:91:16 | fread output argument | test.cpp:93:17:93:24 | filename indirection | -| test.cpp:91:9:91:16 | fread output argument | test.cpp:94:45:94:48 | array to pointer conversion | -| test.cpp:91:9:91:16 | fread output argument | test.cpp:94:45:94:48 | path indirection | | test.cpp:93:11:93:14 | strncat output argument | test.cpp:94:45:94:48 | path indirection | | test.cpp:93:17:93:24 | filename indirection | test.cpp:93:11:93:14 | strncat output argument | | test.cpp:93:17:93:24 | filename indirection | test.cpp:93:11:93:14 | strncat output argument | -| test.cpp:93:17:93:24 | filename indirection | test.cpp:93:11:93:14 | strncat output argument | -| test.cpp:93:17:93:24 | filename indirection | test.cpp:93:11:93:14 | strncat output argument | -| test.cpp:99:21:99:32 | (const char *)... | test.cpp:99:21:99:32 | call to getenv indirection | -| test.cpp:99:21:99:32 | (const char *)... | test.cpp:99:21:99:33 | call to basic_string | -| test.cpp:99:21:99:32 | (const char *)... | test.cpp:100:25:100:29 | (reference to) | -| test.cpp:99:21:99:32 | (const char *)... | test.cpp:100:25:100:29 | envCC indirection | -| test.cpp:99:21:99:32 | (const char *)... | test.cpp:100:31:100:31 | call to operator+ | -| test.cpp:99:21:99:32 | (const char *)... | test.cpp:100:31:100:31 | call to operator+ | -| test.cpp:99:21:99:32 | (const char *)... | test.cpp:101:10:101:16 | (const basic_string, allocator>)... | -| test.cpp:99:21:99:32 | (const char *)... | test.cpp:101:10:101:16 | command indirection | -| test.cpp:100:31:100:31 | call to operator+ | test.cpp:101:10:101:16 | (const basic_string, allocator>)... | -| test.cpp:100:31:100:31 | call to operator+ | test.cpp:101:10:101:16 | command indirection | | test.cpp:106:20:106:25 | call to getenv | test.cpp:107:33:107:36 | path indirection | -| test.cpp:106:20:106:38 | (const char *)... | test.cpp:106:20:106:38 | call to getenv indirection | -| test.cpp:106:20:106:38 | (const char *)... | test.cpp:106:20:106:39 | call to basic_string | -| test.cpp:106:20:106:38 | (const char *)... | test.cpp:107:31:107:31 | call to operator+ | -| test.cpp:106:20:106:38 | (const char *)... | test.cpp:107:31:107:31 | call to operator+ | -| test.cpp:106:20:106:38 | (const char *)... | test.cpp:107:33:107:36 | (reference to) | -| test.cpp:106:20:106:38 | (const char *)... | test.cpp:107:33:107:36 | path indirection | -| test.cpp:106:20:106:38 | (const char *)... | test.cpp:108:10:108:16 | (const basic_string, allocator>)... | -| test.cpp:106:20:106:38 | (const char *)... | test.cpp:108:10:108:16 | command indirection | -| test.cpp:107:31:107:31 | call to operator+ | test.cpp:108:10:108:16 | (const basic_string, allocator>)... | -| test.cpp:107:31:107:31 | call to operator+ | test.cpp:108:10:108:16 | command indirection | | test.cpp:113:20:113:25 | call to getenv | test.cpp:114:19:114:22 | path indirection | -| test.cpp:113:20:113:38 | (const char *)... | test.cpp:113:20:113:38 | call to getenv indirection | -| test.cpp:113:20:113:38 | (const char *)... | test.cpp:113:20:113:39 | call to basic_string | -| test.cpp:113:20:113:38 | (const char *)... | test.cpp:114:10:114:23 | (const basic_string, allocator>)... | -| test.cpp:113:20:113:38 | (const char *)... | test.cpp:114:10:114:23 | call to operator+ indirection | -| test.cpp:113:20:113:38 | (const char *)... | test.cpp:114:19:114:22 | (reference to) | -| test.cpp:113:20:113:38 | (const char *)... | test.cpp:114:19:114:22 | path indirection | | test.cpp:119:20:119:25 | call to getenv | test.cpp:120:19:120:22 | path indirection | -| test.cpp:119:20:119:38 | (const char *)... | test.cpp:119:20:119:38 | call to getenv indirection | -| test.cpp:119:20:119:38 | (const char *)... | test.cpp:119:20:119:39 | call to basic_string | -| test.cpp:119:20:119:38 | (const char *)... | test.cpp:120:10:120:23 | call to operator+ indirection | -| test.cpp:119:20:119:38 | (const char *)... | test.cpp:120:17:120:17 | call to operator+ | -| test.cpp:119:20:119:38 | (const char *)... | test.cpp:120:19:120:22 | (reference to) | -| test.cpp:119:20:119:38 | (const char *)... | test.cpp:120:19:120:22 | path indirection | -| test.cpp:129:9:129:12 | (void *)... | test.cpp:129:9:129:12 | temp indirection | -| test.cpp:129:9:129:12 | fread output argument | test.cpp:131:11:131:14 | Store | -| test.cpp:129:9:129:12 | fread output argument | test.cpp:131:11:131:14 | call to atoi | -| test.cpp:129:9:129:12 | fread output argument | test.cpp:131:11:131:14 | call to atoi | -| test.cpp:129:9:129:12 | fread output argument | test.cpp:131:16:131:19 | array to pointer conversion | -| test.cpp:129:9:129:12 | fread output argument | test.cpp:131:16:131:19 | temp indirection | -| test.cpp:129:9:129:12 | fread output argument | test.cpp:132:42:132:42 | x | -| test.cpp:129:9:129:12 | fread output argument | test.cpp:133:10:133:16 | (const char *)... | -| test.cpp:129:9:129:12 | fread output argument | test.cpp:133:10:133:16 | command indirection | -| test.cpp:131:11:131:14 | call to atoi | test.cpp:131:11:131:14 | Store | -| test.cpp:131:11:131:14 | call to atoi | test.cpp:132:42:132:42 | x | -| test.cpp:131:11:131:14 | call to atoi | test.cpp:133:10:133:16 | (const char *)... | -| test.cpp:131:11:131:14 | call to atoi | test.cpp:133:10:133:16 | command indirection | -| test.cpp:140:9:140:11 | (void *)... | test.cpp:140:9:140:11 | str indirection | -| test.cpp:140:9:140:11 | fread output argument | test.cpp:142:31:142:33 | array to pointer conversion | | test.cpp:140:9:140:11 | fread output argument | test.cpp:142:31:142:33 | str indirection | -| test.cpp:140:9:140:11 | fread output argument | test.cpp:142:31:142:33 | str indirection | -| test.cpp:140:9:140:11 | fread output argument | test.cpp:143:10:143:16 | (const char *)... | -| test.cpp:140:9:140:11 | fread output argument | test.cpp:143:10:143:16 | command indirection | | test.cpp:142:11:142:17 | sprintf output argument | test.cpp:143:10:143:16 | command indirection | | test.cpp:142:31:142:33 | str indirection | test.cpp:142:11:142:17 | sprintf output argument | | test.cpp:142:31:142:33 | str indirection | test.cpp:142:11:142:17 | sprintf output argument | -| test.cpp:142:31:142:33 | str indirection | test.cpp:142:11:142:17 | sprintf output argument | -| test.cpp:142:31:142:33 | str indirection | test.cpp:142:11:142:17 | sprintf output argument | -| test.cpp:150:9:150:11 | (void *)... | test.cpp:150:9:150:11 | str indirection | -| test.cpp:150:9:150:11 | fread output argument | test.cpp:152:31:152:33 | array to pointer conversion | -| test.cpp:150:9:150:11 | fread output argument | test.cpp:152:31:152:33 | str indirection | -| test.cpp:150:9:150:11 | fread output argument | test.cpp:153:10:153:16 | (const char *)... | -| test.cpp:150:9:150:11 | fread output argument | test.cpp:153:10:153:16 | command indirection | -| test.cpp:160:9:160:12 | (void *)... | test.cpp:160:9:160:12 | temp indirection | -| test.cpp:160:9:160:12 | fread output argument | test.cpp:162:11:162:14 | Store | -| test.cpp:160:9:160:12 | fread output argument | test.cpp:162:11:162:14 | call to atoi | -| test.cpp:160:9:160:12 | fread output argument | test.cpp:162:11:162:14 | call to atoi | -| test.cpp:160:9:160:12 | fread output argument | test.cpp:162:16:162:19 | array to pointer conversion | -| test.cpp:160:9:160:12 | fread output argument | test.cpp:162:16:162:19 | temp indirection | -| test.cpp:160:9:160:12 | fread output argument | test.cpp:165:24:165:24 | x | -| test.cpp:160:9:160:12 | fread output argument | test.cpp:166:44:166:48 | array to pointer conversion | -| test.cpp:160:9:160:12 | fread output argument | test.cpp:166:44:166:48 | temp2 indirection | -| test.cpp:160:9:160:12 | fread output argument | test.cpp:168:10:168:16 | (const char *)... | -| test.cpp:160:9:160:12 | fread output argument | test.cpp:168:10:168:16 | command indirection | -| test.cpp:162:11:162:14 | call to atoi | test.cpp:162:11:162:14 | Store | -| test.cpp:162:11:162:14 | call to atoi | test.cpp:165:24:165:24 | x | -| test.cpp:162:11:162:14 | call to atoi | test.cpp:166:44:166:48 | array to pointer conversion | -| test.cpp:162:11:162:14 | call to atoi | test.cpp:166:44:166:48 | temp2 indirection | -| test.cpp:162:11:162:14 | call to atoi | test.cpp:168:10:168:16 | (const char *)... | -| test.cpp:162:11:162:14 | call to atoi | test.cpp:168:10:168:16 | command indirection | nodes | test.cpp:16:20:16:23 | argv | semmle.label | argv | -| test.cpp:16:20:16:23 | argv | semmle.label | argv | -| test.cpp:16:20:16:23 | argv | semmle.label | argv | -| test.cpp:16:20:16:26 | Store | semmle.label | Store | -| test.cpp:16:20:16:26 | access to array | semmle.label | access to array | | test.cpp:22:13:22:20 | sprintf output argument | semmle.label | sprintf output argument | -| test.cpp:22:45:22:52 | userName | semmle.label | userName | | test.cpp:22:45:22:52 | userName indirection | semmle.label | userName indirection | -| test.cpp:22:45:22:52 | userName indirection | semmle.label | userName indirection | -| test.cpp:23:12:23:19 | (const char *)... | semmle.label | (const char *)... | | test.cpp:23:12:23:19 | command1 indirection | semmle.label | command1 indirection | -| test.cpp:23:12:23:19 | command1 indirection | semmle.label | command1 indirection | -| test.cpp:29:45:29:52 | (const char *)... | semmle.label | (const char *)... | -| test.cpp:29:45:29:52 | userName | semmle.label | userName | -| test.cpp:29:45:29:52 | userName indirection | semmle.label | userName indirection | -| test.cpp:38:17:38:22 | Store | semmle.label | Store | -| test.cpp:38:17:38:22 | call to getenv | semmle.label | call to getenv | -| test.cpp:38:17:38:22 | call to getenv | semmle.label | call to getenv | -| test.cpp:41:20:41:24 | (const char *)... | semmle.label | (const char *)... | -| test.cpp:41:20:41:24 | envCC | semmle.label | envCC | -| test.cpp:41:20:41:24 | envCC indirection | semmle.label | envCC indirection | -| test.cpp:47:21:47:26 | Store | semmle.label | Store | -| test.cpp:47:21:47:26 | call to getenv | semmle.label | call to getenv | -| test.cpp:47:21:47:26 | call to getenv | semmle.label | call to getenv | | test.cpp:47:21:47:26 | call to getenv | semmle.label | call to getenv | | test.cpp:50:11:50:17 | sprintf output argument | semmle.label | sprintf output argument | -| test.cpp:50:35:50:43 | envCflags | semmle.label | envCflags | | test.cpp:50:35:50:43 | envCflags indirection | semmle.label | envCflags indirection | -| test.cpp:50:35:50:43 | envCflags indirection | semmle.label | envCflags indirection | -| test.cpp:51:10:51:16 | (const char *)... | semmle.label | (const char *)... | | test.cpp:51:10:51:16 | command indirection | semmle.label | command indirection | -| test.cpp:51:10:51:16 | command indirection | semmle.label | command indirection | -| test.cpp:62:9:62:16 | (void *)... | semmle.label | (void *)... | -| test.cpp:62:9:62:16 | (void *)... | semmle.label | (void *)... | -| test.cpp:62:9:62:16 | array to pointer conversion | semmle.label | array to pointer conversion | -| test.cpp:62:9:62:16 | filename | semmle.label | filename | -| test.cpp:62:9:62:16 | filename indirection | semmle.label | filename indirection | -| test.cpp:62:9:62:16 | fread output argument | semmle.label | fread output argument | | test.cpp:62:9:62:16 | fread output argument | semmle.label | fread output argument | | test.cpp:64:11:64:17 | strncat output argument | semmle.label | strncat output argument | -| test.cpp:64:20:64:27 | (const char *)... | semmle.label | (const char *)... | | test.cpp:64:20:64:27 | filename indirection | semmle.label | filename indirection | -| test.cpp:64:20:64:27 | filename indirection | semmle.label | filename indirection | -| test.cpp:65:10:65:16 | (const char *)... | semmle.label | (const char *)... | | test.cpp:65:10:65:16 | command indirection | semmle.label | command indirection | -| test.cpp:65:10:65:16 | command indirection | semmle.label | command indirection | -| test.cpp:71:9:71:15 | (void *)... | semmle.label | (void *)... | -| test.cpp:71:9:71:15 | (void *)... | semmle.label | (void *)... | -| test.cpp:71:9:71:15 | array to pointer conversion | semmle.label | array to pointer conversion | -| test.cpp:71:9:71:15 | command | semmle.label | command | -| test.cpp:71:9:71:15 | command indirection | semmle.label | command indirection | -| test.cpp:71:9:71:15 | fread output argument | semmle.label | fread output argument | -| test.cpp:73:11:73:17 | array to pointer conversion | semmle.label | array to pointer conversion | -| test.cpp:73:11:73:17 | command indirection | semmle.label | command indirection | -| test.cpp:74:10:74:16 | (const char *)... | semmle.label | (const char *)... | -| test.cpp:74:10:74:16 | command indirection | semmle.label | command indirection | -| test.cpp:82:9:82:16 | (void *)... | semmle.label | (void *)... | -| test.cpp:82:9:82:16 | (void *)... | semmle.label | (void *)... | -| test.cpp:82:9:82:16 | array to pointer conversion | semmle.label | array to pointer conversion | -| test.cpp:82:9:82:16 | filename | semmle.label | filename | -| test.cpp:82:9:82:16 | filename indirection | semmle.label | filename indirection | -| test.cpp:82:9:82:16 | fread output argument | semmle.label | fread output argument | | test.cpp:82:9:82:16 | fread output argument | semmle.label | fread output argument | | test.cpp:84:11:84:17 | strncat output argument | semmle.label | strncat output argument | -| test.cpp:84:20:84:27 | (const char *)... | semmle.label | (const char *)... | | test.cpp:84:20:84:27 | filename indirection | semmle.label | filename indirection | -| test.cpp:84:20:84:27 | filename indirection | semmle.label | filename indirection | -| test.cpp:85:32:85:38 | array to pointer conversion | semmle.label | array to pointer conversion | | test.cpp:85:32:85:38 | command indirection | semmle.label | command indirection | -| test.cpp:85:32:85:38 | command indirection | semmle.label | command indirection | -| test.cpp:91:9:91:16 | (void *)... | semmle.label | (void *)... | -| test.cpp:91:9:91:16 | (void *)... | semmle.label | (void *)... | -| test.cpp:91:9:91:16 | array to pointer conversion | semmle.label | array to pointer conversion | -| test.cpp:91:9:91:16 | filename | semmle.label | filename | -| test.cpp:91:9:91:16 | filename indirection | semmle.label | filename indirection | -| test.cpp:91:9:91:16 | fread output argument | semmle.label | fread output argument | | test.cpp:91:9:91:16 | fread output argument | semmle.label | fread output argument | | test.cpp:93:11:93:14 | strncat output argument | semmle.label | strncat output argument | -| test.cpp:93:17:93:24 | (const char *)... | semmle.label | (const char *)... | | test.cpp:93:17:93:24 | filename indirection | semmle.label | filename indirection | -| test.cpp:93:17:93:24 | filename indirection | semmle.label | filename indirection | -| test.cpp:94:45:94:48 | array to pointer conversion | semmle.label | array to pointer conversion | | test.cpp:94:45:94:48 | path indirection | semmle.label | path indirection | -| test.cpp:94:45:94:48 | path indirection | semmle.label | path indirection | -| test.cpp:99:21:99:26 | call to getenv | semmle.label | call to getenv | -| test.cpp:99:21:99:32 | (const char *)... | semmle.label | (const char *)... | -| test.cpp:99:21:99:32 | (const char *)... | semmle.label | (const char *)... | -| test.cpp:99:21:99:32 | call to getenv indirection | semmle.label | call to getenv indirection | -| test.cpp:99:21:99:33 | call to basic_string | semmle.label | call to basic_string | -| test.cpp:100:25:100:29 | (reference to) | semmle.label | (reference to) | -| test.cpp:100:25:100:29 | envCC indirection | semmle.label | envCC indirection | -| test.cpp:100:31:100:31 | call to operator+ | semmle.label | call to operator+ | -| test.cpp:100:31:100:31 | call to operator+ | semmle.label | call to operator+ | -| test.cpp:101:10:101:16 | (const basic_string, allocator>)... | semmle.label | (const basic_string, allocator>)... | -| test.cpp:101:10:101:16 | command indirection | semmle.label | command indirection | | test.cpp:106:20:106:25 | call to getenv | semmle.label | call to getenv | -| test.cpp:106:20:106:25 | call to getenv | semmle.label | call to getenv | -| test.cpp:106:20:106:38 | (const char *)... | semmle.label | (const char *)... | -| test.cpp:106:20:106:38 | (const char *)... | semmle.label | (const char *)... | -| test.cpp:106:20:106:38 | call to getenv indirection | semmle.label | call to getenv indirection | -| test.cpp:106:20:106:39 | call to basic_string | semmle.label | call to basic_string | -| test.cpp:107:31:107:31 | call to operator+ | semmle.label | call to operator+ | -| test.cpp:107:31:107:31 | call to operator+ | semmle.label | call to operator+ | -| test.cpp:107:33:107:36 | (reference to) | semmle.label | (reference to) | | test.cpp:107:33:107:36 | path indirection | semmle.label | path indirection | -| test.cpp:107:33:107:36 | path indirection | semmle.label | path indirection | -| test.cpp:108:10:108:16 | (const basic_string, allocator>)... | semmle.label | (const basic_string, allocator>)... | -| test.cpp:108:10:108:16 | command indirection | semmle.label | command indirection | | test.cpp:113:20:113:25 | call to getenv | semmle.label | call to getenv | -| test.cpp:113:20:113:25 | call to getenv | semmle.label | call to getenv | -| test.cpp:113:20:113:38 | (const char *)... | semmle.label | (const char *)... | -| test.cpp:113:20:113:38 | (const char *)... | semmle.label | (const char *)... | -| test.cpp:113:20:113:38 | call to getenv indirection | semmle.label | call to getenv indirection | -| test.cpp:113:20:113:39 | call to basic_string | semmle.label | call to basic_string | -| test.cpp:114:10:114:23 | (const basic_string, allocator>)... | semmle.label | (const basic_string, allocator>)... | -| test.cpp:114:10:114:23 | call to operator+ indirection | semmle.label | call to operator+ indirection | -| test.cpp:114:19:114:22 | (reference to) | semmle.label | (reference to) | -| test.cpp:114:19:114:22 | path indirection | semmle.label | path indirection | | test.cpp:114:19:114:22 | path indirection | semmle.label | path indirection | | test.cpp:119:20:119:25 | call to getenv | semmle.label | call to getenv | -| test.cpp:119:20:119:25 | call to getenv | semmle.label | call to getenv | -| test.cpp:119:20:119:38 | (const char *)... | semmle.label | (const char *)... | -| test.cpp:119:20:119:38 | (const char *)... | semmle.label | (const char *)... | -| test.cpp:119:20:119:38 | call to getenv indirection | semmle.label | call to getenv indirection | -| test.cpp:119:20:119:39 | call to basic_string | semmle.label | call to basic_string | -| test.cpp:120:10:120:23 | call to operator+ indirection | semmle.label | call to operator+ indirection | -| test.cpp:120:17:120:17 | call to operator+ | semmle.label | call to operator+ | -| test.cpp:120:19:120:22 | (reference to) | semmle.label | (reference to) | | test.cpp:120:19:120:22 | path indirection | semmle.label | path indirection | -| test.cpp:120:19:120:22 | path indirection | semmle.label | path indirection | -| test.cpp:129:9:129:12 | (void *)... | semmle.label | (void *)... | -| test.cpp:129:9:129:12 | (void *)... | semmle.label | (void *)... | -| test.cpp:129:9:129:12 | array to pointer conversion | semmle.label | array to pointer conversion | -| test.cpp:129:9:129:12 | fread output argument | semmle.label | fread output argument | -| test.cpp:129:9:129:12 | temp | semmle.label | temp | -| test.cpp:129:9:129:12 | temp indirection | semmle.label | temp indirection | -| test.cpp:131:11:131:14 | Store | semmle.label | Store | -| test.cpp:131:11:131:14 | call to atoi | semmle.label | call to atoi | -| test.cpp:131:11:131:14 | call to atoi | semmle.label | call to atoi | -| test.cpp:131:16:131:19 | array to pointer conversion | semmle.label | array to pointer conversion | -| test.cpp:131:16:131:19 | temp indirection | semmle.label | temp indirection | -| test.cpp:132:42:132:42 | x | semmle.label | x | -| test.cpp:133:10:133:16 | (const char *)... | semmle.label | (const char *)... | -| test.cpp:133:10:133:16 | command indirection | semmle.label | command indirection | -| test.cpp:140:9:140:11 | (void *)... | semmle.label | (void *)... | -| test.cpp:140:9:140:11 | (void *)... | semmle.label | (void *)... | -| test.cpp:140:9:140:11 | array to pointer conversion | semmle.label | array to pointer conversion | | test.cpp:140:9:140:11 | fread output argument | semmle.label | fread output argument | -| test.cpp:140:9:140:11 | fread output argument | semmle.label | fread output argument | -| test.cpp:140:9:140:11 | str | semmle.label | str | -| test.cpp:140:9:140:11 | str indirection | semmle.label | str indirection | | test.cpp:142:11:142:17 | sprintf output argument | semmle.label | sprintf output argument | -| test.cpp:142:31:142:33 | array to pointer conversion | semmle.label | array to pointer conversion | | test.cpp:142:31:142:33 | str indirection | semmle.label | str indirection | -| test.cpp:142:31:142:33 | str indirection | semmle.label | str indirection | -| test.cpp:143:10:143:16 | (const char *)... | semmle.label | (const char *)... | | test.cpp:143:10:143:16 | command indirection | semmle.label | command indirection | -| test.cpp:143:10:143:16 | command indirection | semmle.label | command indirection | -| test.cpp:150:9:150:11 | (void *)... | semmle.label | (void *)... | -| test.cpp:150:9:150:11 | (void *)... | semmle.label | (void *)... | -| test.cpp:150:9:150:11 | array to pointer conversion | semmle.label | array to pointer conversion | -| test.cpp:150:9:150:11 | fread output argument | semmle.label | fread output argument | -| test.cpp:150:9:150:11 | str | semmle.label | str | -| test.cpp:150:9:150:11 | str indirection | semmle.label | str indirection | -| test.cpp:152:31:152:33 | array to pointer conversion | semmle.label | array to pointer conversion | -| test.cpp:152:31:152:33 | str indirection | semmle.label | str indirection | -| test.cpp:153:10:153:16 | (const char *)... | semmle.label | (const char *)... | -| test.cpp:153:10:153:16 | command indirection | semmle.label | command indirection | -| test.cpp:160:9:160:12 | (void *)... | semmle.label | (void *)... | -| test.cpp:160:9:160:12 | (void *)... | semmle.label | (void *)... | -| test.cpp:160:9:160:12 | array to pointer conversion | semmle.label | array to pointer conversion | -| test.cpp:160:9:160:12 | fread output argument | semmle.label | fread output argument | -| test.cpp:160:9:160:12 | temp | semmle.label | temp | -| test.cpp:160:9:160:12 | temp indirection | semmle.label | temp indirection | -| test.cpp:162:11:162:14 | Store | semmle.label | Store | -| test.cpp:162:11:162:14 | call to atoi | semmle.label | call to atoi | -| test.cpp:162:11:162:14 | call to atoi | semmle.label | call to atoi | -| test.cpp:162:16:162:19 | array to pointer conversion | semmle.label | array to pointer conversion | -| test.cpp:162:16:162:19 | temp indirection | semmle.label | temp indirection | -| test.cpp:165:24:165:24 | x | semmle.label | x | -| test.cpp:166:44:166:48 | array to pointer conversion | semmle.label | array to pointer conversion | -| test.cpp:166:44:166:48 | temp2 indirection | semmle.label | temp2 indirection | -| test.cpp:168:10:168:16 | (const char *)... | semmle.label | (const char *)... | -| test.cpp:168:10:168:16 | command indirection | semmle.label | command indirection | subpaths #select | test.cpp:23:12:23:19 | command1 | test.cpp:16:20:16:23 | argv | test.cpp:23:12:23:19 | command1 indirection | This argument to an OS command is derived from $@, dangerously concatenated into $@, and then passed to system(string) | test.cpp:16:20:16:23 | argv | user input (a command-line argument) | test.cpp:22:13:22:20 | sprintf output argument | sprintf output argument | From 0c5d6424894ea1a72ee39d6060c571b472a9eba9 Mon Sep 17 00:00:00 2001 From: Robert Marsh Date: Wed, 22 Sep 2021 14:22:57 -0700 Subject: [PATCH 550/741] C++: Rename SystemFunction and restore QLDoc --- cpp/ql/lib/semmle/code/cpp/security/CommandExecution.qll | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/security/CommandExecution.qll b/cpp/ql/lib/semmle/code/cpp/security/CommandExecution.qll index ab2fe153a90..f8f7c6c476f 100644 --- a/cpp/ql/lib/semmle/code/cpp/security/CommandExecution.qll +++ b/cpp/ql/lib/semmle/code/cpp/security/CommandExecution.qll @@ -6,7 +6,10 @@ import semmle.code.cpp.models.interfaces.SideEffect import semmle.code.cpp.models.interfaces.Alias import semmle.code.cpp.models.interfaces.CommandExecution -class WrappedSystemFunction extends FunctionWithWrappers instanceof CommandExecutionFunction { +/** + * A function for running a command using a command interpreter. + */ +class SystemFunction extends FunctionWithWrappers instanceof CommandExecutionFunction { override predicate interestingArg(int arg) { exists(FunctionInput input | this.(CommandExecutionFunction).hasCommandArgument(input) and @@ -160,7 +163,7 @@ predicate shellCommandPreface(string cmd, string flag) { */ predicate shellCommand(Expr command, string callChain) { // A call to a function like system() - exists(WrappedSystemFunction systemFunction | + exists(SystemFunction systemFunction | systemFunction.outermostWrapperFunctionCall(command, callChain) ) or From 49f8fd2164f42e566bd5664cc342c3a5a1700a84 Mon Sep 17 00:00:00 2001 From: Robert Marsh Date: Wed, 22 Sep 2021 16:54:03 -0700 Subject: [PATCH 551/741] C++: whitespace fix --- .../lib/semmle/code/cpp/models/interfaces/CommandExecution.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpp/ql/lib/semmle/code/cpp/models/interfaces/CommandExecution.qll b/cpp/ql/lib/semmle/code/cpp/models/interfaces/CommandExecution.qll index 872d4bdcb91..a6e32341140 100644 --- a/cpp/ql/lib/semmle/code/cpp/models/interfaces/CommandExecution.qll +++ b/cpp/ql/lib/semmle/code/cpp/models/interfaces/CommandExecution.qll @@ -12,7 +12,7 @@ import FunctionInputsAndOutputs import semmle.code.cpp.models.Models /** - * A function, such as `exec` or `popen` that starts a new process by + * A function, such as `exec` or `popen` that starts a new process by * interpreting a string as a shell command. */ abstract class CommandExecutionFunction extends Function { From d4564d5dd168b6de2c3cfc11499b30230476aadc Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Thu, 23 Sep 2021 10:01:04 +0200 Subject: [PATCH 552/741] Python: Add QLDoc to `Function.getArgByName` --- python/ql/lib/semmle/python/Function.qll | 1 + 1 file changed, 1 insertion(+) diff --git a/python/ql/lib/semmle/python/Function.qll b/python/ql/lib/semmle/python/Function.qll index 2c09188ccb1..acaca8655ad 100644 --- a/python/ql/lib/semmle/python/Function.qll +++ b/python/ql/lib/semmle/python/Function.qll @@ -58,6 +58,7 @@ class Function extends Function_, Scope, AstNode { /** Gets the name of the nth argument (for simple arguments) */ string getArgName(int index) { result = this.getArg(index).(Name).getId() } + /** Gets the parameter of this function with the name `name`. */ Parameter getArgByName(string name) { ( result = this.getAnArg() From ef6e502ff068adb41c90886d874481292a4d6b55 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Thu, 23 Sep 2021 10:18:18 +0200 Subject: [PATCH 553/741] Python: Make LDAP global options test better Before it didn't really showcase that we know it can make connections secure. --- .../CWE-522-global-option/LDAPInsecureAuth.expected | 4 ++++ .../Security/CWE-522-global-option/LDAPInsecureAuth.qlref | 1 + .../{CWE-522 => CWE-522-global-option}/ldap2_global.py | 7 ++++++- .../query-tests/Security/CWE-522/LDAPInsecureAuth.expected | 2 -- 4 files changed, 11 insertions(+), 3 deletions(-) create mode 100644 python/ql/test/experimental/query-tests/Security/CWE-522-global-option/LDAPInsecureAuth.expected create mode 100644 python/ql/test/experimental/query-tests/Security/CWE-522-global-option/LDAPInsecureAuth.qlref rename python/ql/test/experimental/query-tests/Security/{CWE-522 => CWE-522-global-option}/ldap2_global.py (58%) diff --git a/python/ql/test/experimental/query-tests/Security/CWE-522-global-option/LDAPInsecureAuth.expected b/python/ql/test/experimental/query-tests/Security/CWE-522-global-option/LDAPInsecureAuth.expected new file mode 100644 index 00000000000..e217064d1df --- /dev/null +++ b/python/ql/test/experimental/query-tests/Security/CWE-522-global-option/LDAPInsecureAuth.expected @@ -0,0 +1,4 @@ +edges +nodes +subpaths +#select diff --git a/python/ql/test/experimental/query-tests/Security/CWE-522-global-option/LDAPInsecureAuth.qlref b/python/ql/test/experimental/query-tests/Security/CWE-522-global-option/LDAPInsecureAuth.qlref new file mode 100644 index 00000000000..8bb2c1e9b52 --- /dev/null +++ b/python/ql/test/experimental/query-tests/Security/CWE-522-global-option/LDAPInsecureAuth.qlref @@ -0,0 +1 @@ +experimental/Security/CWE-522/LDAPInsecureAuth.ql \ No newline at end of file diff --git a/python/ql/test/experimental/query-tests/Security/CWE-522/ldap2_global.py b/python/ql/test/experimental/query-tests/Security/CWE-522-global-option/ldap2_global.py similarity index 58% rename from python/ql/test/experimental/query-tests/Security/CWE-522/ldap2_global.py rename to python/ql/test/experimental/query-tests/Security/CWE-522-global-option/ldap2_global.py index 44d528698fa..59723cf6dda 100644 --- a/python/ql/test/experimental/query-tests/Security/CWE-522/ldap2_global.py +++ b/python/ql/test/experimental/query-tests/Security/CWE-522-global-option/ldap2_global.py @@ -1,3 +1,6 @@ +# since global options are considered to affect all files in a repo, we need to keep +# this test in its' own directory (so it doesn't interfere with other tests). + import ldap from flask import request, Flask @@ -7,11 +10,13 @@ app = Flask(__name__) # SSL through ldap global variable option -ldap.set_option(ldap.OPT_X_TLS_NEVER) +ldap.set_option(ldap.OPT_X_TLS_DEMAND, True) @app.route("/one") def one(): + # The following connection would have been insecure if the global option above was + # not set ldap_connection_5 = ldap.initialize("ldap://somethingon.theinternet.com") ldap_connection_5.simple_bind_s('', '') user = ldap_connection_5.search_s( diff --git a/python/ql/test/experimental/query-tests/Security/CWE-522/LDAPInsecureAuth.expected b/python/ql/test/experimental/query-tests/Security/CWE-522/LDAPInsecureAuth.expected index 592ad8b99f5..24784f039e7 100644 --- a/python/ql/test/experimental/query-tests/Security/CWE-522/LDAPInsecureAuth.expected +++ b/python/ql/test/experimental/query-tests/Security/CWE-522/LDAPInsecureAuth.expected @@ -6,7 +6,6 @@ edges | ldap3_remote.py:138:21:138:32 | ControlFlowNode for Attribute | ldap3_remote.py:138:21:138:40 | ControlFlowNode for Subscript | | ldap3_remote.py:138:21:138:40 | ControlFlowNode for Subscript | ldap3_remote.py:139:18:139:21 | ControlFlowNode for host | nodes -| ldap2_global.py:15:41:15:76 | ControlFlowNode for Str | semmle.label | ControlFlowNode for Str | | ldap2_remote.py:45:41:45:60 | ControlFlowNode for BinaryExpr | semmle.label | ControlFlowNode for BinaryExpr | | ldap2_remote.py:56:41:56:60 | ControlFlowNode for BinaryExpr | semmle.label | ControlFlowNode for BinaryExpr | | ldap3_remote.py:101:12:101:49 | ControlFlowNode for BinaryExpr | semmle.label | ControlFlowNode for BinaryExpr | @@ -21,7 +20,6 @@ nodes | ldap3_remote.py:139:18:139:21 | ControlFlowNode for host | semmle.label | ControlFlowNode for host | subpaths #select -| ldap2_global.py:15:41:15:76 | ControlFlowNode for Str | ldap2_global.py:15:41:15:76 | ControlFlowNode for Str | ldap2_global.py:15:41:15:76 | ControlFlowNode for Str | $@ is authenticated insecurely. | ldap2_global.py:15:41:15:76 | ControlFlowNode for Str | This LDAP host | | ldap2_remote.py:45:41:45:60 | ControlFlowNode for BinaryExpr | ldap2_remote.py:45:41:45:60 | ControlFlowNode for BinaryExpr | ldap2_remote.py:45:41:45:60 | ControlFlowNode for BinaryExpr | $@ is authenticated insecurely. | ldap2_remote.py:45:41:45:60 | ControlFlowNode for BinaryExpr | This LDAP host | | ldap2_remote.py:56:41:56:60 | ControlFlowNode for BinaryExpr | ldap2_remote.py:56:41:56:60 | ControlFlowNode for BinaryExpr | ldap2_remote.py:56:41:56:60 | ControlFlowNode for BinaryExpr | $@ is authenticated insecurely. | ldap2_remote.py:56:41:56:60 | ControlFlowNode for BinaryExpr | This LDAP host | | ldap3_remote.py:102:18:102:21 | ControlFlowNode for host | ldap3_remote.py:101:12:101:49 | ControlFlowNode for BinaryExpr | ldap3_remote.py:102:18:102:21 | ControlFlowNode for host | $@ is authenticated insecurely. | ldap3_remote.py:102:18:102:21 | ControlFlowNode for host | This LDAP host | From a30554e97c49aa14c81d8cc507e2e88fa998adac Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Tue, 17 Aug 2021 10:35:57 +0200 Subject: [PATCH 554/741] Refactored cleartext storage libraries --- .../security/CleartextStorageClassQuery.qll | 105 +++++++++++++++++ .../security/CleartextStorageCookieQuery.qll | 48 ++++++++ .../CleartextStoragePropertiesQuery.qll | 62 ++++++++++ .../java/security/CleartextStorageQuery.qll | 108 ++++++++++++++++++ .../CWE/CWE-312/CleartextStorageClass.ql | 7 +- .../CWE/CWE-312/CleartextStorageCookie.ql | 7 +- .../CWE/CWE-312/CleartextStorageProperties.ql | 7 +- 7 files changed, 329 insertions(+), 15 deletions(-) create mode 100644 java/ql/lib/semmle/code/java/security/CleartextStorageClassQuery.qll create mode 100644 java/ql/lib/semmle/code/java/security/CleartextStorageCookieQuery.qll create mode 100644 java/ql/lib/semmle/code/java/security/CleartextStoragePropertiesQuery.qll create mode 100644 java/ql/lib/semmle/code/java/security/CleartextStorageQuery.qll diff --git a/java/ql/lib/semmle/code/java/security/CleartextStorageClassQuery.qll b/java/ql/lib/semmle/code/java/security/CleartextStorageClassQuery.qll new file mode 100644 index 00000000000..73c1db36908 --- /dev/null +++ b/java/ql/lib/semmle/code/java/security/CleartextStorageClassQuery.qll @@ -0,0 +1,105 @@ +/** Provides classes and predicates to reason about cleartext storage in serializable classes. */ + +import java +import semmle.code.java.frameworks.JAXB +import semmle.code.java.dataflow.DataFlow +import semmle.code.java.dataflow.DataFlow2 +import semmle.code.java.security.CleartextStorageQuery +import semmle.code.java.security.CleartextStoragePropertiesQuery + +private class ClassCleartextStorageSink extends CleartextStorageSink { + ClassCleartextStorageSink() { this.asExpr() = getInstanceInput(_, _) } +} + +/** The instantiation of a storable class, which can be stored to disk. */ +abstract class ClassStore extends Storable, ClassInstanceExpr { + /** Gets an input, for example `input` in `instance.password = input`. */ + override Expr getAnInput() { + exists(ClassStoreFlowConfig conf, DataFlow::Node instance | + conf.hasFlow(DataFlow::exprNode(this), instance) and + result = getInstanceInput(instance, this.getConstructor().getDeclaringType()) + ) + } +} + +/** + * The instantiation of a serializable class, which can be stored to disk. + * + * Only includes tainted instances where data from a `SensitiveSource` may flow + * to an input of the `Serializable`. + */ +private class Serializable extends ClassStore { + Serializable() { + this.getConstructor().getDeclaringType().getASupertype*() instanceof TypeSerializable and + // `Properties` are `Serializable`, but handled elsewhere. + not this instanceof Properties and + // restrict attention to tainted instances + exists(SensitiveSource data | + data.flowsToCached(getInstanceInput(_, this.getConstructor().getDeclaringType())) + ) + } + + /** Gets a store, for example `outputStream.writeObject(instance)`. */ + override Expr getAStore() { + exists(ClassStoreFlowConfig conf, DataFlow::Node n | + serializableStore(n, result) and + conf.hasFlow(DataFlow::exprNode(this), n) + ) + } +} + +/** The instantiation of a marshallable class, which can be stored to disk as XML. */ +private class Marshallable extends ClassStore { + Marshallable() { this.getConstructor().getDeclaringType() instanceof JAXBElement } + + /** Gets a store, for example `marshaller.marshal(instance)`. */ + override Expr getAStore() { + exists(ClassStoreFlowConfig conf, DataFlow::Node n | + marshallableStore(n, result) and + conf.hasFlow(DataFlow::exprNode(this), n) + ) + } +} + +/** Gets an input, for example `input` in `instance.password = input`. */ +private Expr getInstanceInput(DataFlow::Node instance, RefType t) { + exists(AssignExpr a, FieldAccess fa | + instance = DataFlow::getFieldQualifier(fa) and + a.getDest() = fa and + a.getSource() = result and + fa.getField().getDeclaringType() = t + | + t.getASourceSupertype*() instanceof TypeSerializable or + t instanceof JAXBElement + ) +} + +private class ClassStoreFlowConfig extends DataFlow2::Configuration { + ClassStoreFlowConfig() { this = "ClassStoreFlowConfig" } + + override predicate isSource(DataFlow::Node src) { src.asExpr() instanceof ClassStore } + + override predicate isSink(DataFlow::Node sink) { + exists(getInstanceInput(sink, _)) or + serializableStore(sink, _) or + marshallableStore(sink, _) + } + + override int fieldFlowBranchLimit() { result = 1 } +} + +private predicate serializableStore(DataFlow::Node instance, Expr store) { + exists(MethodAccess m | + store = m and + m.getMethod() instanceof WriteObjectMethod and + instance.asExpr() = m.getArgument(0) + ) +} + +private predicate marshallableStore(DataFlow::Node instance, Expr store) { + exists(MethodAccess m | + store = m and + m.getMethod() instanceof JAXBMarshalMethod and + instance.asExpr() = m.getArgument(0) + ) +} diff --git a/java/ql/lib/semmle/code/java/security/CleartextStorageCookieQuery.qll b/java/ql/lib/semmle/code/java/security/CleartextStorageCookieQuery.qll new file mode 100644 index 00000000000..9b1ffd80986 --- /dev/null +++ b/java/ql/lib/semmle/code/java/security/CleartextStorageCookieQuery.qll @@ -0,0 +1,48 @@ +/** Provides classes and predicates to reason about cleartext storage in cookies. */ + +import java +import semmle.code.java.dataflow.DataFlow +import semmle.code.java.dataflow.DataFlow3 +import semmle.code.java.security.CleartextStorageQuery + +private class CookieCleartextStorageSink extends CleartextStorageSink { + CookieCleartextStorageSink() { this.asExpr() = cookieInput(_) } +} + +/** The instantiation of a cookie, which can act as storage. */ +class Cookie extends Storable, ClassInstanceExpr { + Cookie() { + this.getConstructor().getDeclaringType().getQualifiedName() = "javax.servlet.http.Cookie" + } + + /** Gets an input, for example `input` in `new Cookie("...", input);`. */ + override Expr getAnInput() { result = cookieInput(this) } + + /** Gets a store, for example `response.addCookie(cookie);`. */ + override Expr getAStore() { + exists(CookieToStoreFlowConfig conf, DataFlow::Node n | + cookieStore(n, result) and + conf.hasFlow(DataFlow::exprNode(this), n) + ) + } +} + +private predicate cookieStore(DataFlow::Node cookie, Expr store) { + exists(MethodAccess m, Method def | + m.getMethod() = def and + def.getName() = "addCookie" and + def.getDeclaringType().getQualifiedName() = "javax.servlet.http.HttpServletResponse" and + store = m and + cookie.asExpr() = m.getAnArgument() + ) +} + +private class CookieToStoreFlowConfig extends DataFlow3::Configuration { + CookieToStoreFlowConfig() { this = "CookieToStoreFlowConfig" } + + override predicate isSource(DataFlow::Node src) { src.asExpr() instanceof Cookie } + + override predicate isSink(DataFlow::Node sink) { cookieStore(sink, _) } +} + +private Expr cookieInput(Cookie c) { result = c.getArgument(1) } diff --git a/java/ql/lib/semmle/code/java/security/CleartextStoragePropertiesQuery.qll b/java/ql/lib/semmle/code/java/security/CleartextStoragePropertiesQuery.qll new file mode 100644 index 00000000000..c75689c1fd2 --- /dev/null +++ b/java/ql/lib/semmle/code/java/security/CleartextStoragePropertiesQuery.qll @@ -0,0 +1,62 @@ +/** Provides classes and predicates to reason about cleartext storage in Properties files. */ + +import java +import semmle.code.java.dataflow.DataFlow +import semmle.code.java.frameworks.Properties +import semmle.code.java.security.CleartextStorageQuery + +private class PropertiesCleartextStorageSink extends CleartextStorageSink { + PropertiesCleartextStorageSink() { + exists(MethodAccess m | + m.getMethod() instanceof PropertiesSetPropertyMethod and this.asExpr() = m.getArgument(1) + ) + } +} + +/** The instantiation of a `Properties` object, which can be stored to disk. */ +class Properties extends Storable, ClassInstanceExpr { + Properties() { this.getConstructor().getDeclaringType() instanceof TypeProperty } + + /** Gets an input, for example `input` in `props.setProperty("password", input);`. */ + override Expr getAnInput() { + exists(PropertiesFlowConfig conf, DataFlow::Node n | + propertiesInput(n, result) and + conf.hasFlow(DataFlow::exprNode(this), n) + ) + } + + /** Gets a store, for example `props.store(outputStream, "...")`. */ + override Expr getAStore() { + exists(PropertiesFlowConfig conf, DataFlow::Node n | + propertiesStore(n, result) and + conf.hasFlow(DataFlow::exprNode(this), n) + ) + } +} + +private predicate propertiesInput(DataFlow::Node prop, Expr input) { + exists(MethodAccess m | + m.getMethod() instanceof PropertiesSetPropertyMethod and + input = m.getArgument(1) and + prop.asExpr() = m.getQualifier() + ) +} + +private predicate propertiesStore(DataFlow::Node prop, Expr store) { + exists(MethodAccess m | + m.getMethod() instanceof PropertiesStoreMethod and + store = m and + prop.asExpr() = m.getQualifier() + ) +} + +private class PropertiesFlowConfig extends DataFlow::Configuration { + PropertiesFlowConfig() { this = "PropertiesFlowConfig" } + + override predicate isSource(DataFlow::Node src) { src.asExpr() instanceof Properties } + + override predicate isSink(DataFlow::Node sink) { + propertiesInput(sink, _) or + propertiesStore(sink, _) + } +} diff --git a/java/ql/lib/semmle/code/java/security/CleartextStorageQuery.qll b/java/ql/lib/semmle/code/java/security/CleartextStorageQuery.qll new file mode 100644 index 00000000000..8d494785be2 --- /dev/null +++ b/java/ql/lib/semmle/code/java/security/CleartextStorageQuery.qll @@ -0,0 +1,108 @@ +/** Provides classes and predicates to reason about cleartext storage vulnerabilities. */ + +import java +private import semmle.code.java.dataflow.DataFlow4 +private import semmle.code.java.dataflow.TaintTracking +private import semmle.code.java.security.SensitiveActions + +/** A sink representing persistent storage that saves data in clear text. */ +abstract class CleartextStorageSink extends DataFlow::Node { } + +/** A sanitizer for flows tracking sensitive data being stored in persistent storage. */ +abstract class CleartextStorageSanitizer extends DataFlow::Node { } + +/** An additional taint step for sensitive data flowing into cleartext storage. */ +class CleartextStorageAdditionalTaintStep extends Unit { + abstract predicate step(DataFlow::Node n1, DataFlow::Node n2); +} + +/** Class for expressions that may represent 'sensitive' information */ +class SensitiveSource extends Expr { + SensitiveSource() { + // SensitiveExpr is abstract, this lets us inherit from it without + // being a technical subclass + this instanceof SensitiveExpr + } + + /** Holds if this source flows to the `sink`. */ + cached + predicate flowsToCached(Expr sink) { + exists(SensitiveSourceFlowConfig conf | + conf.hasFlow(DataFlow::exprNode(this), DataFlow::exprNode(sink)) + ) + } +} + +/** + * Class representing entities that may be stored/written, with methods + * for finding values that are stored within them, and cases + * of the entity being stored. + */ +abstract class Storable extends Call { + /** Gets an "input" that is stored in an instance of this class. */ + abstract Expr getAnInput(); + + /** Gets an expression where an instance of this class is stored (e.g. to disk). */ + abstract Expr getAStore(); +} + +private class SensitiveSourceFlowConfig extends TaintTracking::Configuration { + SensitiveSourceFlowConfig() { this = "SensitiveSourceFlowConfig" } + + override predicate isSource(DataFlow::Node src) { src.asExpr() instanceof SensitiveExpr } + + override predicate isSink(DataFlow::Node sink) { sink instanceof CleartextStorageSink } + + override predicate isSanitizer(DataFlow::Node sanitizer) { + sanitizer instanceof CleartextStorageSanitizer + } + + override predicate isAdditionalTaintStep(DataFlow::Node n1, DataFlow::Node n2) { + any(CleartextStorageAdditionalTaintStep c).step(n1, n2) + } +} + +private class DefaultCleartextStorageSanitizer extends CleartextStorageSanitizer { + DefaultCleartextStorageSanitizer() { + this.getType() instanceof NumericType or + this.getType() instanceof BooleanType or + exists(EncryptedValueFlowConfig conf | conf.hasFlow(_, this)) + } +} + +/** + * Method call for encrypting sensitive information. As there are various implementations of + * encryption (reversible and non-reversible) from both JDK and third parties, this class simply + * checks method name to take a best guess to reduce false positives. + */ +private class EncryptedSensitiveMethodAccess extends MethodAccess { + EncryptedSensitiveMethodAccess() { + this.getMethod().getName().toLowerCase().matches(["%encrypt%", "%hash%", "%digest%"]) + } +} + +/** Flow configuration for encryption methods flowing to inputs of persistent storage. */ +private class EncryptedValueFlowConfig extends DataFlow4::Configuration { + EncryptedValueFlowConfig() { this = "EncryptedValueFlowConfig" } + + override predicate isSource(DataFlow::Node src) { + src.asExpr() instanceof EncryptedSensitiveMethodAccess + } + + override predicate isSink(DataFlow::Node sink) { sink instanceof CleartextStorageSink } +} + +/** A taint step for `EditText.toString` in Android. */ +private class AndroidEditTextCleartextStorageStep extends CleartextStorageAdditionalTaintStep { + override predicate step(DataFlow::Node n1, DataFlow::Node n2) { + // EditText.getText() return type is parsed as `Object`, so we need to + // add a taint step for `Object.toString` to model `editText.getText().toString()` + exists(MethodAccess ma, Method m | + ma.getMethod() = m and + m.getDeclaringType() instanceof TypeObject and + m.hasName("toString") + | + n1.asExpr() = ma.getQualifier() and n2.asExpr() = ma + ) + } +} diff --git a/java/ql/src/Security/CWE/CWE-312/CleartextStorageClass.ql b/java/ql/src/Security/CWE/CWE-312/CleartextStorageClass.ql index e14b9bfe552..7b91df39bfd 100644 --- a/java/ql/src/Security/CWE/CWE-312/CleartextStorageClass.ql +++ b/java/ql/src/Security/CWE/CWE-312/CleartextStorageClass.ql @@ -12,15 +12,12 @@ */ import java -import SensitiveStorage +import semmle.code.java.security.CleartextStorageClassQuery from SensitiveSource data, ClassStore s, Expr input, Expr store where input = s.getAnInput() and store = s.getAStore() and - data.flowsToCached(input) and - // Exclude results in test code. - not testMethod(store.getEnclosingCallable()) and - not testMethod(data.getEnclosingCallable()) + data.flowsToCached(input) select store, "Storable class $@ containing $@ is stored here. Data was added $@.", s, s.toString(), data, "sensitive data", input, "here" diff --git a/java/ql/src/Security/CWE/CWE-312/CleartextStorageCookie.ql b/java/ql/src/Security/CWE/CWE-312/CleartextStorageCookie.ql index c5a76434dcd..2641a507473 100644 --- a/java/ql/src/Security/CWE/CWE-312/CleartextStorageCookie.ql +++ b/java/ql/src/Security/CWE/CWE-312/CleartextStorageCookie.ql @@ -11,15 +11,12 @@ */ import java -import SensitiveStorage +import semmle.code.java.security.CleartextStorageCookieQuery from SensitiveSource data, Cookie s, Expr input, Expr store where input = s.getAnInput() and store = s.getAStore() and - data.flowsToCached(input) and - // Exclude results in test code. - not testMethod(store.getEnclosingCallable()) and - not testMethod(data.getEnclosingCallable()) + data.flowsToCached(input) select store, "Cookie $@ containing $@ is stored here. Data was added $@.", s, s.toString(), data, "sensitive data", input, "here" diff --git a/java/ql/src/Security/CWE/CWE-312/CleartextStorageProperties.ql b/java/ql/src/Security/CWE/CWE-312/CleartextStorageProperties.ql index 495fd3f6f20..5be703dba0d 100644 --- a/java/ql/src/Security/CWE/CWE-312/CleartextStorageProperties.ql +++ b/java/ql/src/Security/CWE/CWE-312/CleartextStorageProperties.ql @@ -11,15 +11,12 @@ */ import java -import SensitiveStorage +import semmle.code.java.security.CleartextStoragePropertiesQuery from SensitiveSource data, Properties s, Expr input, Expr store where input = s.getAnInput() and store = s.getAStore() and - data.flowsToCached(input) and - // Exclude results in test code. - not testMethod(store.getEnclosingCallable()) and - not testMethod(data.getEnclosingCallable()) + data.flowsToCached(input) select store, "'Properties' class $@ containing $@ is stored here. Data was added $@.", s, s.toString(), data, "sensitive data", input, "here" From 563e8a2bd651a41202c75be8342234239df6e005 Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Fri, 3 Sep 2021 13:50:50 +0200 Subject: [PATCH 555/741] Remove unused library --- .../Security/CWE/CWE-312/SensitiveStorage.qll | 245 ------------------ 1 file changed, 245 deletions(-) delete mode 100644 java/ql/src/Security/CWE/CWE-312/SensitiveStorage.qll diff --git a/java/ql/src/Security/CWE/CWE-312/SensitiveStorage.qll b/java/ql/src/Security/CWE/CWE-312/SensitiveStorage.qll deleted file mode 100644 index b07105e3bf5..00000000000 --- a/java/ql/src/Security/CWE/CWE-312/SensitiveStorage.qll +++ /dev/null @@ -1,245 +0,0 @@ -import java -import semmle.code.java.frameworks.Properties -import semmle.code.java.frameworks.JAXB -import semmle.code.java.dataflow.TaintTracking -import semmle.code.java.dataflow.DataFlow3 -import semmle.code.java.dataflow.DataFlow4 -import semmle.code.java.security.SensitiveActions - -/** Test code filter. */ -predicate testMethod(Method m) { - ( - m instanceof TestMethod or - m.getDeclaringType() instanceof TestClass - ) and - // Do report results in the Juliet tests. - not m.getLocation().getFile().getAbsolutePath().matches("%CWE%") -} - -private class SensitiveSourceFlowConfig extends TaintTracking::Configuration { - SensitiveSourceFlowConfig() { this = "SensitiveStorage::SensitiveSourceFlowConfig" } - - override predicate isSource(DataFlow::Node src) { src.asExpr() instanceof SensitiveExpr } - - override predicate isSink(DataFlow::Node sink) { - sink.asExpr() = cookieInput(_) - or - exists(MethodAccess m | - m.getMethod() instanceof PropertiesSetPropertyMethod and sink.asExpr() = m.getArgument(1) - ) - or - sink.asExpr() = getInstanceInput(_, _) - } - - override predicate isSanitizer(DataFlow::Node n) { - n.getType() instanceof NumericType or n.getType() instanceof BooleanType - } -} - -/** Class for expressions that may represent 'sensitive' information */ -class SensitiveSource extends Expr { - SensitiveSource() { - // SensitiveExpr is abstract, this lets us inherit from it without - // being a technical subclass - this instanceof SensitiveExpr - } - - /** Holds if this source flows to the `sink`. */ - cached - predicate flowsToCached(Expr sink) { - exists(SensitiveSourceFlowConfig conf | - conf.hasFlow(DataFlow::exprNode(this), DataFlow::exprNode(sink)) - ) - } -} - -/** - * Class representing entities that may be stored/written, with methods - * for finding values that are stored within them, and cases - * of the entity being stored. - */ -abstract class Storable extends ClassInstanceExpr { - /** Gets an "input" that is stored in an instance of this class. */ - abstract Expr getAnInput(); - - /** Gets an expression where an instance of this class is stored (e.g. to disk). */ - abstract Expr getAStore(); -} - -private predicate cookieStore(DataFlow::Node cookie, Expr store) { - exists(MethodAccess m, Method def | - m.getMethod() = def and - def.getName() = "addCookie" and - def.getDeclaringType().getQualifiedName() = "javax.servlet.http.HttpServletResponse" and - store = m and - cookie.asExpr() = m.getAnArgument() - ) -} - -private class CookieToStoreFlowConfig extends DataFlow2::Configuration { - CookieToStoreFlowConfig() { this = "SensitiveStorage::CookieToStoreFlowConfig" } - - override predicate isSource(DataFlow::Node src) { src.asExpr() instanceof Cookie } - - override predicate isSink(DataFlow::Node sink) { cookieStore(sink, _) } -} - -private Expr cookieInput(Cookie c) { result = c.getArgument(1) } - -/** The instantiation of a cookie, which can act as storage. */ -class Cookie extends Storable { - Cookie() { - this.getConstructor().getDeclaringType().getQualifiedName() = "javax.servlet.http.Cookie" - } - - /** Gets an input, for example `input` in `new Cookie("...", input);`. */ - override Expr getAnInput() { result = cookieInput(this) } - - /** Gets a store, for example `response.addCookie(cookie);`. */ - override Expr getAStore() { - exists(CookieToStoreFlowConfig conf, DataFlow::Node n | - cookieStore(n, result) and - conf.hasFlow(DataFlow::exprNode(this), n) - ) - } -} - -private predicate propertiesInput(DataFlow::Node prop, Expr input) { - exists(MethodAccess m | - m.getMethod() instanceof PropertiesSetPropertyMethod and - input = m.getArgument(1) and - prop.asExpr() = m.getQualifier() - ) -} - -private predicate propertiesStore(DataFlow::Node prop, Expr store) { - exists(MethodAccess m | - m.getMethod() instanceof PropertiesStoreMethod and - store = m and - prop.asExpr() = m.getQualifier() - ) -} - -private class PropertiesFlowConfig extends DataFlow3::Configuration { - PropertiesFlowConfig() { this = "SensitiveStorage::PropertiesFlowConfig" } - - override predicate isSource(DataFlow::Node src) { src.asExpr() instanceof Properties } - - override predicate isSink(DataFlow::Node sink) { - propertiesInput(sink, _) or - propertiesStore(sink, _) - } -} - -/** The instantiation of a `Properties` object, which can be stored to disk. */ -class Properties extends Storable { - Properties() { this.getConstructor().getDeclaringType() instanceof TypeProperty } - - /** Gets an input, for example `input` in `props.setProperty("password", input);`. */ - override Expr getAnInput() { - exists(PropertiesFlowConfig conf, DataFlow::Node n | - propertiesInput(n, result) and - conf.hasFlow(DataFlow::exprNode(this), n) - ) - } - - /** Gets a store, for example `props.store(outputStream, "...")`. */ - override Expr getAStore() { - exists(PropertiesFlowConfig conf, DataFlow::Node n | - propertiesStore(n, result) and - conf.hasFlow(DataFlow::exprNode(this), n) - ) - } -} - -abstract class ClassStore extends Storable { - /** Gets an input, for example `input` in `instance.password = input`. */ - override Expr getAnInput() { - exists(ClassStoreFlowConfig conf, DataFlow::Node instance | - conf.hasFlow(DataFlow::exprNode(this), instance) and - result = getInstanceInput(instance, this.getConstructor().getDeclaringType()) - ) - } -} - -/** Gets an input, for example `input` in `instance.password = input`. */ -private Expr getInstanceInput(DataFlow::Node instance, RefType t) { - exists(AssignExpr a, FieldAccess fa | - instance = DataFlow::getFieldQualifier(fa) and - a.getDest() = fa and - a.getSource() = result and - fa.getField().getDeclaringType() = t - | - t.getASourceSupertype*() instanceof TypeSerializable or - t instanceof JAXBElement - ) -} - -private class ClassStoreFlowConfig extends DataFlow4::Configuration { - ClassStoreFlowConfig() { this = "SensitiveStorage::ClassStoreFlowConfig" } - - override predicate isSource(DataFlow::Node src) { src.asExpr() instanceof ClassStore } - - override predicate isSink(DataFlow::Node sink) { - exists(getInstanceInput(sink, _)) or - serializableStore(sink, _) or - marshallableStore(sink, _) - } - - override int fieldFlowBranchLimit() { result = 1 } -} - -private predicate serializableStore(DataFlow::Node instance, Expr store) { - exists(MethodAccess m | - store = m and - m.getMethod() instanceof WriteObjectMethod and - instance.asExpr() = m.getArgument(0) - ) -} - -private predicate marshallableStore(DataFlow::Node instance, Expr store) { - exists(MethodAccess m | - store = m and - m.getMethod() instanceof JAXBMarshalMethod and - instance.asExpr() = m.getArgument(0) - ) -} - -/** - * The instantiation of a serializable class, which can be stored to disk. - * - * Only includes tainted instances where data from a `SensitiveSource` may flow - * to an input of the `Serializable`. - */ -class Serializable extends ClassStore { - Serializable() { - this.getConstructor().getDeclaringType().getASupertype*() instanceof TypeSerializable and - // `Properties` are `Serializable`, but handled elsewhere. - not this instanceof Properties and - // restrict attention to tainted instances - exists(SensitiveSource data | - data.flowsToCached(getInstanceInput(_, this.getConstructor().getDeclaringType())) - ) - } - - /** Gets a store, for example `outputStream.writeObject(instance)`. */ - override Expr getAStore() { - exists(ClassStoreFlowConfig conf, DataFlow::Node n | - serializableStore(n, result) and - conf.hasFlow(DataFlow::exprNode(this), n) - ) - } -} - -/** The instantiation of a marshallable class, which can be stored to disk as XML. */ -class Marshallable extends ClassStore { - Marshallable() { this.getConstructor().getDeclaringType() instanceof JAXBElement } - - /** Gets a store, for example `marshaller.marshal(instance)`. */ - override Expr getAStore() { - exists(ClassStoreFlowConfig conf, DataFlow::Node n | - marshallableStore(n, result) and - conf.hasFlow(DataFlow::exprNode(this), n) - ) - } -} From 51d2b5225e7ab357714caab263937c1622178ac1 Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Tue, 14 Sep 2021 12:38:41 +0200 Subject: [PATCH 556/741] Remove cached property from SensitiveSource::flowsTo --- .../semmle/code/java/security/CleartextStorageClassQuery.qll | 2 +- .../ql/lib/semmle/code/java/security/CleartextStorageQuery.qll | 3 +-- java/ql/src/Security/CWE/CWE-312/CleartextStorageClass.ql | 2 +- java/ql/src/Security/CWE/CWE-312/CleartextStorageCookie.ql | 2 +- java/ql/src/Security/CWE/CWE-312/CleartextStorageProperties.ql | 2 +- 5 files changed, 5 insertions(+), 6 deletions(-) diff --git a/java/ql/lib/semmle/code/java/security/CleartextStorageClassQuery.qll b/java/ql/lib/semmle/code/java/security/CleartextStorageClassQuery.qll index 73c1db36908..0f0528fde5f 100644 --- a/java/ql/lib/semmle/code/java/security/CleartextStorageClassQuery.qll +++ b/java/ql/lib/semmle/code/java/security/CleartextStorageClassQuery.qll @@ -35,7 +35,7 @@ private class Serializable extends ClassStore { not this instanceof Properties and // restrict attention to tainted instances exists(SensitiveSource data | - data.flowsToCached(getInstanceInput(_, this.getConstructor().getDeclaringType())) + data.flowsTo(getInstanceInput(_, this.getConstructor().getDeclaringType())) ) } diff --git a/java/ql/lib/semmle/code/java/security/CleartextStorageQuery.qll b/java/ql/lib/semmle/code/java/security/CleartextStorageQuery.qll index 8d494785be2..352893c64e9 100644 --- a/java/ql/lib/semmle/code/java/security/CleartextStorageQuery.qll +++ b/java/ql/lib/semmle/code/java/security/CleartextStorageQuery.qll @@ -25,8 +25,7 @@ class SensitiveSource extends Expr { } /** Holds if this source flows to the `sink`. */ - cached - predicate flowsToCached(Expr sink) { + predicate flowsTo(Expr sink) { exists(SensitiveSourceFlowConfig conf | conf.hasFlow(DataFlow::exprNode(this), DataFlow::exprNode(sink)) ) diff --git a/java/ql/src/Security/CWE/CWE-312/CleartextStorageClass.ql b/java/ql/src/Security/CWE/CWE-312/CleartextStorageClass.ql index 7b91df39bfd..525e8148a8f 100644 --- a/java/ql/src/Security/CWE/CWE-312/CleartextStorageClass.ql +++ b/java/ql/src/Security/CWE/CWE-312/CleartextStorageClass.ql @@ -18,6 +18,6 @@ from SensitiveSource data, ClassStore s, Expr input, Expr store where input = s.getAnInput() and store = s.getAStore() and - data.flowsToCached(input) + data.flowsTo(input) select store, "Storable class $@ containing $@ is stored here. Data was added $@.", s, s.toString(), data, "sensitive data", input, "here" diff --git a/java/ql/src/Security/CWE/CWE-312/CleartextStorageCookie.ql b/java/ql/src/Security/CWE/CWE-312/CleartextStorageCookie.ql index 2641a507473..4e370e29d29 100644 --- a/java/ql/src/Security/CWE/CWE-312/CleartextStorageCookie.ql +++ b/java/ql/src/Security/CWE/CWE-312/CleartextStorageCookie.ql @@ -17,6 +17,6 @@ from SensitiveSource data, Cookie s, Expr input, Expr store where input = s.getAnInput() and store = s.getAStore() and - data.flowsToCached(input) + data.flowsTo(input) select store, "Cookie $@ containing $@ is stored here. Data was added $@.", s, s.toString(), data, "sensitive data", input, "here" diff --git a/java/ql/src/Security/CWE/CWE-312/CleartextStorageProperties.ql b/java/ql/src/Security/CWE/CWE-312/CleartextStorageProperties.ql index 5be703dba0d..9a8ce42130e 100644 --- a/java/ql/src/Security/CWE/CWE-312/CleartextStorageProperties.ql +++ b/java/ql/src/Security/CWE/CWE-312/CleartextStorageProperties.ql @@ -17,6 +17,6 @@ from SensitiveSource data, Properties s, Expr input, Expr store where input = s.getAnInput() and store = s.getAStore() and - data.flowsToCached(input) + data.flowsTo(input) select store, "'Properties' class $@ containing $@ is stored here. Data was added $@.", s, s.toString(), data, "sensitive data", input, "here" From d0b9920cac5c762358cda00ba57c24e6c9cf2eb4 Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Tue, 14 Sep 2021 12:49:38 +0200 Subject: [PATCH 557/741] Fix encryption sanitizer It now discards sensitive exprs (sources) instead of sinks for better precision --- java/ql/lib/semmle/code/java/security/CleartextStorageQuery.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/ql/lib/semmle/code/java/security/CleartextStorageQuery.qll b/java/ql/lib/semmle/code/java/security/CleartextStorageQuery.qll index 352893c64e9..f5c5519f48a 100644 --- a/java/ql/lib/semmle/code/java/security/CleartextStorageQuery.qll +++ b/java/ql/lib/semmle/code/java/security/CleartextStorageQuery.qll @@ -88,7 +88,7 @@ private class EncryptedValueFlowConfig extends DataFlow4::Configuration { src.asExpr() instanceof EncryptedSensitiveMethodAccess } - override predicate isSink(DataFlow::Node sink) { sink instanceof CleartextStorageSink } + override predicate isSink(DataFlow::Node sink) { sink.asExpr() instanceof SensitiveExpr } } /** A taint step for `EditText.toString` in Android. */ From 83fb41e4149f34f384bb37b651581a9bc7d11f8f Mon Sep 17 00:00:00 2001 From: Emile El-Qawas Date: Thu, 23 Sep 2021 09:55:49 +0100 Subject: [PATCH 558/741] Add visibility constraints; Fix non-compliant code --- java/ql/src/Likely Bugs/Concurrency/DateFormatThreadUnsafe.java | 2 +- java/ql/src/Likely Bugs/Concurrency/DateFormatThreadUnsafe.ql | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/java/ql/src/Likely Bugs/Concurrency/DateFormatThreadUnsafe.java b/java/ql/src/Likely Bugs/Concurrency/DateFormatThreadUnsafe.java index 36576b00c22..f077fb83b9d 100644 --- a/java/ql/src/Likely Bugs/Concurrency/DateFormatThreadUnsafe.java +++ b/java/ql/src/Likely Bugs/Concurrency/DateFormatThreadUnsafe.java @@ -1,5 +1,5 @@ class DateFormattingThread implements Runnable { - private static DateFormat dateF = new SimpleDateFormat("yyyyMMdd"); // Static field declared + public static DateFormat dateF = new SimpleDateFormat("yyyyMMdd"); // Static field declared public void run() { for(int i=0; i < 10; i++){ diff --git a/java/ql/src/Likely Bugs/Concurrency/DateFormatThreadUnsafe.ql b/java/ql/src/Likely Bugs/Concurrency/DateFormatThreadUnsafe.ql index b649227f69a..ef3814014ee 100644 --- a/java/ql/src/Likely Bugs/Concurrency/DateFormatThreadUnsafe.ql +++ b/java/ql/src/Likely Bugs/Concurrency/DateFormatThreadUnsafe.ql @@ -16,6 +16,7 @@ import java from Field f, Class dateFormat where f.isStatic() and + (f.isPublic() or f.isProtected()) and dateFormat.hasQualifiedName("java.text", "DateFormat") and f.getType().(RefType).hasSupertype*(dateFormat) and exists(MethodAccess m | m.getQualifier().(VarAccess).getVariable() = f) From 0919042692707a2a56d180d3f2bb6eea984434fc Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Thu, 23 Sep 2021 12:03:45 +0100 Subject: [PATCH 559/741] Model Bundle and Intent extra methods --- .../code/java/dataflow/ExternalFlow.qll | 1 + .../code/java/frameworks/android/Intent.qll | 124 ++++++++++++++++++ 2 files changed, 125 insertions(+) diff --git a/java/ql/lib/semmle/code/java/dataflow/ExternalFlow.qll b/java/ql/lib/semmle/code/java/dataflow/ExternalFlow.qll index bce80a3ee08..679f8704bc9 100644 --- a/java/ql/lib/semmle/code/java/dataflow/ExternalFlow.qll +++ b/java/ql/lib/semmle/code/java/dataflow/ExternalFlow.qll @@ -78,6 +78,7 @@ private import FlowSummary private module Frameworks { private import internal.ContainerFlow private import semmle.code.java.frameworks.android.XssSinks + private import semmle.code.java.frameworks.android.Intent private import semmle.code.java.frameworks.ApacheHttp private import semmle.code.java.frameworks.apache.Collections private import semmle.code.java.frameworks.apache.Lang diff --git a/java/ql/lib/semmle/code/java/frameworks/android/Intent.qll b/java/ql/lib/semmle/code/java/frameworks/android/Intent.qll index 92c49f3101a..edb981cff8e 100644 --- a/java/ql/lib/semmle/code/java/frameworks/android/Intent.qll +++ b/java/ql/lib/semmle/code/java/frameworks/android/Intent.qll @@ -1,5 +1,6 @@ import java import semmle.code.java.dataflow.FlowSteps +import semmle.code.java.dataflow.ExternalFlow class TypeIntent extends Class { TypeIntent() { hasQualifiedName("android.content", "Intent") } @@ -52,3 +53,126 @@ class BundleGetterMethod extends Method, TaintPreservingCallable { override predicate returnsTaintFrom(int arg) { arg = -1 } } + +private class IntentBundleFlowSteps extends SummaryModelCsv { + override predicate row(string row) { + row = + [ + //"namespace;type;subtypes;name;signature;ext;input;output;kind" + "android.os;BaseBundle;true;get;(String);;MapValue of Argument[-1];ReturnValue;value", + "android.os;BaseBundle;true;getString;(String);;MapValue of Argument[-1];ReturnValue;value", + "android.os;BaseBundle;true;getString;(String,String);;MapValue of Argument[-1];ReturnValue;value", + "android.os;BaseBundle;true;getString;(String,String);;Argument[1];ReturnValue;value", + "android.os;BaseBundle;true;getStringArray;(String);;MapValue of Argument[-1];ReturnValue;value", + "android.os;BaseBundle;true;keySet;();;MapKey of Argument[-1];Element of ReturnValue;value", + "android.os;BaseBundle;true;putAll;(PersistableBundle);;MapKey of Argument[0];MapKey of Argument[-1];value", + "android.os;BaseBundle;true;putAll;(PersistableBundle);;MapValue of Argument[0];MapValue of Argument[-1];value", + "android.os;BaseBundle;true;putBoolean;;;Argument[0];MapKey of Argument[-1];value", + "android.os;BaseBundle;true;putBooleanArray;;;Argument[0];MapKey of Argument[-1];value", + "android.os;BaseBundle;true;putDouble;;;Argument[0];MapKey of Argument[-1];value", + "android.os;BaseBundle;true;putDoubleArray;;;Argument[0];MapKey of Argument[-1];value", + "android.os;BaseBundle;true;putInt;;;Argument[0];MapKey of Argument[-1];value", + "android.os;BaseBundle;true;putIntArray;;;Argument[0];MapKey of Argument[-1];value", + "android.os;BaseBundle;true;putLong;;;Argument[0];MapKey of Argument[-1];value", + "android.os;BaseBundle;true;putLongArray;;;Argument[0];MapKey of Argument[-1];value", + "android.os;BaseBundle;true;putString;;;Argument[0];MapKey of Argument[-1];value", + "android.os;BaseBundle;true;putString;;;Argument[1];MapValue of Argument[-1];value", + "android.os;BaseBundle;true;putStringArray;;;Argument[0];MapKey of Argument[-1];value", + "android.os;BaseBundle;true;putStringArray;;;Argument[1];MapValue of Argument[-1];value", + "android.os;Bundle;true;getBinder;(String);;MapValue of Argument[-1];ReturnValue;value", + "android.os;Bundle;true;getBundle;(String);;MapValue of Argument[-1];ReturnValue;value", + "android.os;Bundle;true;getByteArray;(String);;MapValue of Argument[-1];ReturnValue;value", + "android.os;Bundle;true;getCharArray;(String);;MapValue of Argument[-1];ReturnValue;value", + "android.os;Bundle;true;getCharSequence;(String);;MapValue of Argument[-1];ReturnValue;value", + "android.os;Bundle;true;getCharSequence;(String,CharSequence);;MapValue of Argument[-1];ReturnValue;value", + "android.os;Bundle;true;getCharSequence;(String,CharSequence);;Argument[1];ReturnValue;value", + "android.os;Bundle;true;getCharSequenceArray;(String);;MapValue of Argument[-1];ReturnValue;value", + "android.os;Bundle;true;getCharSequenceArrayList;(String);;MapValue of Argument[-1];ReturnValue;value", + "android.os;Bundle;true;getParcelable;(String);;MapValue of Argument[-1];ReturnValue;value", + "android.os;Bundle;true;getParcelableArray;(String);;MapValue of Argument[-1];ReturnValue;value", + "android.os;Bundle;true;getParcelableArrayList;(String);;MapValue of Argument[-1];ReturnValue;value", + "android.os;Bundle;true;getSerializable;(String);;MapValue of Argument[-1];ReturnValue;value", + "android.os;Bundle;true;getSparseParcelableArray;(String);;MapValue of Argument[-1];ReturnValue;value", + "android.os;Bundle;true;getStringArrayList;(String);;MapValue of Argument[-1];ReturnValue;value", + "android.os;Bundle;true;putAll;(Bundle);;MapKey of Argument[0];MapKey of Argument[-1];value", + "android.os;Bundle;true;putAll;(Bundle);;MapValue of Argument[0];MapValue of Argument[-1];value", + "android.os;Bundle;true;putBinder;;;Argument[0];MapKey of Argument[-1];value", + "android.os;Bundle;true;putBinder;;;Argument[1];MapValue of Argument[-1];value", + "android.os;Bundle;true;putBundle;;;Argument[0];MapKey of Argument[-1];value", + "android.os;Bundle;true;putBundle;;;Argument[1];MapValue of Argument[-1];value", + "android.os;Bundle;true;putByte;;;Argument[0];MapKey of Argument[-1];value", + "android.os;Bundle;true;putByteArray;;;Argument[0];MapKey of Argument[-1];value", + "android.os;Bundle;true;putByteArray;;;Argument[1];MapValue of Argument[-1];value", + "android.os;Bundle;true;putChar;;;Argument[0];MapKey of Argument[-1];value", + "android.os;Bundle;true;putCharArray;;;Argument[0];MapKey of Argument[-1];value", + "android.os;Bundle;true;putCharArray;;;Argument[1];MapValue of Argument[-1];value", + "android.os;Bundle;true;putCharSequence;;;Argument[0];MapKey of Argument[-1];value", + "android.os;Bundle;true;putCharSequence;;;Argument[1];MapValue of Argument[-1];value", + "android.os;Bundle;true;putCharSequenceArray;;;Argument[0];MapKey of Argument[-1];value", + "android.os;Bundle;true;putCharSequenceArray;;;Argument[1];MapValue of Argument[-1];value", + "android.os;Bundle;true;putCharSequenceArrayList;;;Argument[0];MapKey of Argument[-1];value", + "android.os;Bundle;true;putCharSequenceArrayList;;;Argument[1];MapValue of Argument[-1];value", + "android.os;Bundle;true;putFloat;;;Argument[0];MapKey of Argument[-1];value", + "android.os;Bundle;true;putFloatArray;;;Argument[0];MapKey of Argument[-1];value", + "android.os;Bundle;true;putIntegerArrayList;;;Argument[0];MapKey of Argument[-1];value", + "android.os;Bundle;true;putParcelable;;;Argument[0];MapKey of Argument[-1];value", + "android.os;Bundle;true;putParcelable;;;Argument[1];MapValue of Argument[-1];value", + "android.os;Bundle;true;putParcelableArray;;;Argument[0];MapKey of Argument[-1];value", + "android.os;Bundle;true;putParcelableArray;;;Argument[1];MapValue of Argument[-1];value", + "android.os;Bundle;true;putParcelableArrayList;;;Argument[0];MapKey of Argument[-1];value", + "android.os;Bundle;true;putParcelableArrayList;;;Argument[1];MapValue of Argument[-1];value", + "android.os;Bundle;true;putSerializable;;;Argument[0];MapKey of Argument[-1];value", + "android.os;Bundle;true;putSerializable;;;Argument[1];MapValue of Argument[-1];value", + "android.os;Bundle;true;putShort;;;Argument[0];MapKey of Argument[-1];value", + "android.os;Bundle;true;putShortArray;;;Argument[0];MapKey of Argument[-1];value", + "android.os;Bundle;true;putSize;;;Argument[0];MapKey of Argument[-1];value", + "android.os;Bundle;true;putSizeF;;;Argument[0];MapKey of Argument[-1];value", + "android.os;Bundle;true;putSparceParcelableArray;;;Argument[0];MapKey of Argument[-1];value", + "android.os;Bundle;true;putSparseParcelableArray;;;Argument[1];MapValue of Argument[-1];value", + "android.os;Bundle;true;putStringArrayList;;;Argument[0];MapKey of Argument[-1];value", + "android.os;Bundle;true;putStringArrayList;;;Argument[1];MapValue of Argument[-1];value", + "android.os;Bundle;true;readFromParcel;;;Argument[0];MapKey of Argument[-1];taint", + "android.os;Bundle;true;readFromParcel;;;Argument[0];MapValue of Argument[-1];taint", + "android.content;Intent;true;getExtras;();;SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value", + "android.content;Intent;true;getBundleExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value", + "android.content;Intent;true;getByteArrayExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value", + "android.content;Intent;true;getCharArrayExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value", + "android.content;Intent;true;getCharSequenceArrayExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value", + "android.content;Intent;true;getCharSequenceArrayListExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value", + "android.content;Intent;true;getCharSequenceExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value", + "android.content;Intent;true;getParcelableArrayExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value", + "android.content;Intent;true;getParcelableArrayListExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value", + "android.content;Intent;true;getParcelableExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value", + "android.content;Intent;true;getSerializableExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value", + "android.content;Intent;true;getStringArrayExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value", + "android.content;Intent;true;getStringArrayListExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value", + "android.content;Intent;true;getStringExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value", + "android.content;Intent;true;putCharSequenceArrayListExtra;;;Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value", + "android.content;Intent;true;putCharSequenceArrayListExtra;;;Argument[1];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value", + "android.content;Intent;true;putCharSequenceArrayListExtra;;;Argument[-1];ReturnValue;value", + "android.content;Intent;true;putExtra;;;Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value", + "android.content;Intent;true;putExtra;;;Argument[1];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value", + "android.content;Intent;true;putExtra;;;Argument[-1];ReturnValue;value", + "android.content;Intent;true;putIntegerArrayListExtra;;;Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value", + "android.content;Intent;true;putIntegerArrayListExtra;;;Argument[-1];ReturnValue;value", + "android.content;Intent;true;putParcelableArrayListExtra;;;Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value", + "android.content;Intent;true;putParcelableArrayListExtra;;;Argument[1];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value", + "android.content;Intent;true;putParcelableArrayListExtra;;;Argument[-1];ReturnValue;value", + "android.content;Intent;true;putStringArrayListExtra;;;Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value", + "android.content;Intent;true;putStringArrayListExtra;;;Argument[1];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value", + "android.content;Intent;true;putStringArrayListExtra;;;Argument[-1];ReturnValue;value", + "android.content;Intent;true;putExtras;(Bundle);;MapKey of Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value", + "android.content;Intent;true;putExtras;(Bundle);;MapValue of Argument[0];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value", + "android.content;Intent;true;putExtras;(Bundle);;Argument[-1];ReturnValue;value", + "android.content;Intent;true;putExtras;(Intent);;MapKey of SyntheticField[android.content.Intent.extras] of Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value", + "android.content;Intent;true;putExtras;(Intent);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[0];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value", + "android.content;Intent;true;putExtras;(Intent);;Argument[-1];ReturnValue;value", + "android.content;Intent;true;replaceExtras;(Bundle);;MapKey of Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value", + "android.content;Intent;true;replaceExtras;(Bundle);;MapValue of Argument[0];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value", + "android.content;Intent;true;replaceExtras;(Bundle);;Argument[-1];ReturnValue;value", + "android.content;Intent;true;replaceExtras;(Intent);;MapKey of SyntheticField[android.content.Intent.extras] of Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value", + "android.content;Intent;true;replaceExtras;(Intent);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[0];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value", + "android.content;Intent;true;replaceExtras;(Intent);;Argument[-1];ReturnValue;value" + ] + } +} From 4841c3037dda152f75a764328bb48af5f5ded508 Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Thu, 23 Sep 2021 14:34:56 +0200 Subject: [PATCH 560/741] Java: Add callback dispatch to more anonymous classes. --- .../java/dataflow/internal/DataFlowPrivate.qll | 16 +++++++++++----- .../dataflow/callback-dispatch/A.java | 15 ++++++++++++++- 2 files changed, 25 insertions(+), 6 deletions(-) diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowPrivate.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowPrivate.qll index 01f3557715c..1d24e027869 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowPrivate.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowPrivate.qll @@ -326,18 +326,24 @@ class LambdaCallKind = Method; // the "apply" method in the functional interface /** Holds if `creation` is an expression that creates a lambda of kind `kind` for `c`. */ predicate lambdaCreation(Node creation, LambdaCallKind kind, DataFlowCallable c) { - exists(FunctionalExpr func, FunctionalInterface interface | + exists(ClassInstanceExpr func, Interface t, FunctionalInterface interface | creation.asExpr() = func and - func.asMethod() = c and - func.getType().(RefType).getSourceDeclaration() = interface and - kind = interface.getRunMethod() + func.getAnonymousClass().getAMethod() = c and + func.getConstructedType().extendsOrImplements+(t) and + t.getSourceDeclaration() = interface and + c.(Method).overridesOrInstantiates+(pragma[only_bind_into](kind)) and + pragma[only_bind_into](kind) = interface.getRunMethod().getSourceDeclaration() ) } /** Holds if `call` is a lambda call of kind `kind` where `receiver` is the lambda expression. */ predicate lambdaCall(DataFlowCall call, LambdaCallKind kind, Node receiver) { receiver = call.(SummaryCall).getReceiver() and - getNodeDataFlowType(receiver).getSourceDeclaration().(FunctionalInterface).getRunMethod() = kind + getNodeDataFlowType(receiver) + .getSourceDeclaration() + .(FunctionalInterface) + .getRunMethod() + .getSourceDeclaration() = kind } /** Extra data-flow steps needed for lambda flow analysis. */ diff --git a/java/ql/test/library-tests/dataflow/callback-dispatch/A.java b/java/ql/test/library-tests/dataflow/callback-dispatch/A.java index 1fbe316bc08..4a4f0b11ded 100644 --- a/java/ql/test/library-tests/dataflow/callback-dispatch/A.java +++ b/java/ql/test/library-tests/dataflow/callback-dispatch/A.java @@ -48,6 +48,8 @@ public class A { return null; } + public interface Producer1Consumer3 extends Producer1, Consumer3 { } + static Object source(int i) { return null; } static void sink(Object o) { } @@ -71,7 +73,7 @@ public class A { applyConsumer1(source(4), new Consumer1() { @Override public void eat(Object o) { - sink(o); // $ MISSING: flow=4 + sink(o); // $ flow=4 } }); @@ -96,5 +98,16 @@ public class A { sink(applyConverter1((Integer)source(9), i -> i)); // $ flow=9 sink(applyConverter1((Integer)source(10), i -> new int[]{i})[0]); // $ flow=10 + + Producer1Consumer3 pc = new Producer1Consumer3() { + @Override public Integer[] make() { + return new Integer[] { (Integer)source(11) }; + } + @Override public void eat(Integer[] xs) { + sink(xs[0]); // $ flow=12 + } + }; + applyConsumer3(new Integer[] { (Integer)source(12) }, pc); + sink(applyProducer1(pc)[0]); // $ flow=11 } } From b52a2cd292df3ee79fc812e688a6c1000e439e24 Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Thu, 23 Sep 2021 15:48:15 +0200 Subject: [PATCH 561/741] Apply code review comments Co-authored-by: Anders Schack-Mulligen --- .../code/java/security/CleartextStorageCookieQuery.qll | 4 ++-- .../semmle/code/java/security/CleartextStorageQuery.qll | 8 +------- 2 files changed, 3 insertions(+), 9 deletions(-) diff --git a/java/ql/lib/semmle/code/java/security/CleartextStorageCookieQuery.qll b/java/ql/lib/semmle/code/java/security/CleartextStorageCookieQuery.qll index 9b1ffd80986..bd071e7fef6 100644 --- a/java/ql/lib/semmle/code/java/security/CleartextStorageCookieQuery.qll +++ b/java/ql/lib/semmle/code/java/security/CleartextStorageCookieQuery.qll @@ -12,7 +12,7 @@ private class CookieCleartextStorageSink extends CleartextStorageSink { /** The instantiation of a cookie, which can act as storage. */ class Cookie extends Storable, ClassInstanceExpr { Cookie() { - this.getConstructor().getDeclaringType().getQualifiedName() = "javax.servlet.http.Cookie" + this.getConstructor().getDeclaringType().hasQualifiedName("javax.servlet.http", "Cookie") } /** Gets an input, for example `input` in `new Cookie("...", input);`. */ @@ -31,7 +31,7 @@ private predicate cookieStore(DataFlow::Node cookie, Expr store) { exists(MethodAccess m, Method def | m.getMethod() = def and def.getName() = "addCookie" and - def.getDeclaringType().getQualifiedName() = "javax.servlet.http.HttpServletResponse" and + def.getDeclaringType().hasQualifiedName("javax.servlet.http", "HttpServletResponse") and store = m and cookie.asExpr() = m.getAnArgument() ) diff --git a/java/ql/lib/semmle/code/java/security/CleartextStorageQuery.qll b/java/ql/lib/semmle/code/java/security/CleartextStorageQuery.qll index f5c5519f48a..96197b8cab1 100644 --- a/java/ql/lib/semmle/code/java/security/CleartextStorageQuery.qll +++ b/java/ql/lib/semmle/code/java/security/CleartextStorageQuery.qll @@ -17,13 +17,7 @@ class CleartextStorageAdditionalTaintStep extends Unit { } /** Class for expressions that may represent 'sensitive' information */ -class SensitiveSource extends Expr { - SensitiveSource() { - // SensitiveExpr is abstract, this lets us inherit from it without - // being a technical subclass - this instanceof SensitiveExpr - } - +class SensitiveSource extends Expr instanceof SensitiveExpr { /** Holds if this source flows to the `sink`. */ predicate flowsTo(Expr sink) { exists(SensitiveSourceFlowConfig conf | From ceb9a0bd6b0bd67a43bb3f2132645c9be00fd730 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 24 Sep 2021 00:08:02 +0000 Subject: [PATCH 562/741] Add changed framework coverage reports --- java/documentation/library-coverage/coverage.csv | 1 + java/documentation/library-coverage/coverage.rst | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/java/documentation/library-coverage/coverage.csv b/java/documentation/library-coverage/coverage.csv index 396c85bb530..63f39c02761 100644 --- a/java/documentation/library-coverage/coverage.csv +++ b/java/documentation/library-coverage/coverage.csv @@ -10,6 +10,7 @@ com.fasterxml.jackson.core,,,1,,,,,,,,,,,,,,,,,,,1, com.fasterxml.jackson.databind,,,5,,,,,,,,,,,,,,,,,,,5, com.google.common.base,,,85,,,,,,,,,,,,,,,,,,,62,23 com.google.common.cache,,,17,,,,,,,,,,,,,,,,,,,,17 +com.google.common.collect,,,553,,,,,,,,,,,,,,,,,,,2,551 com.google.common.io,6,,73,,,,,,,,,,,,,,6,,,,,72,1 com.opensymphony.xwork2.ognl,3,,,,,,,,,,,,3,,,,,,,,,, com.unboundid.ldap.sdk,17,,,,,,,,,,17,,,,,,,,,,,, diff --git a/java/documentation/library-coverage/coverage.rst b/java/documentation/library-coverage/coverage.rst index 44581216bc9..e4991a0c1ed 100644 --- a/java/documentation/library-coverage/coverage.rst +++ b/java/documentation/library-coverage/coverage.rst @@ -13,11 +13,11 @@ Java framework & library support `Apache Commons Lang `_,``org.apache.commons.lang3``,,423,,,,,,,, `Apache Commons Text `_,``org.apache.commons.text``,,272,,,,,,,, `Apache HttpComponents `_,"``org.apache.hc.core5.*``, ``org.apache.http``",5,136,28,,,3,,,,25 - `Google Guava `_,``com.google.common.*``,,175,6,,6,,,,, + `Google Guava `_,``com.google.common.*``,,728,6,,6,,,,, `JSON-java `_,``org.json``,,236,,,,,,,, Java Standard Library,``java.*``,3,423,30,13,,,7,,,10 Java extensions,"``javax.*``, ``jakarta.*``",54,552,31,,,4,,1,1,2 `Spring `_,``org.springframework.*``,29,469,91,,,,19,14,,29 Others,"``com.esotericsoftware.kryo.io``, ``com.esotericsoftware.kryo5.io``, ``com.fasterxml.jackson.core``, ``com.fasterxml.jackson.databind``, ``com.opensymphony.xwork2.ognl``, ``com.unboundid.ldap.sdk``, ``flexjson``, ``groovy.lang``, ``groovy.util``, ``jodd.json``, ``ognl``, ``org.apache.commons.codec``, ``org.apache.commons.jexl2``, ``org.apache.commons.jexl3``, ``org.apache.commons.ognl``, ``org.apache.directory.ldap.client.api``, ``org.apache.ibatis.jdbc``, ``org.apache.shiro.jndi``, ``org.codehaus.groovy.control``, ``org.dom4j``, ``org.hibernate``, ``org.jooq``, ``org.mvel2``, ``org.xml.sax``, ``org.xmlpull.v1``, ``play.mvc``",7,26,146,,,,14,18,, - Totals,,116,3616,402,13,6,10,107,33,1,66 + Totals,,116,4169,402,13,6,10,107,33,1,66 From c2b356ab084977289fd10f032a377e44a38370e5 Mon Sep 17 00:00:00 2001 From: Robert Marsh Date: Thu, 23 Sep 2021 21:00:45 -0700 Subject: [PATCH 563/741] C++: add subpaths to DefaultTaintTracking --- .../cpp/ir/dataflow/DefaultTaintTracking.qll | 29 +++++++++++++++++++ .../SAMATE/TaintedPath/TaintedPath.expected | 1 + .../CWE-022/semmle/tests/TaintedPath.expected | 1 + .../CWE/CWE-079/semmle/CgiXss/CgiXss.expected | 1 + .../CWE-089/SqlTainted/SqlTainted.expected | 1 + .../UncontrolledProcessOperation.expected | 1 + .../UncontrolledProcessOperation.expected | 1 + .../CWE-119/SAMATE/UnboundedWrite.expected | 1 + .../semmle/tests/UnboundedWrite.expected | 1 + .../semmle/tests/UnboundedWrite.expected | 1 + .../SAMATE/UncontrolledFormatString.expected | 1 + .../CWE-134/semmle/argv/argvLocal.expected | 7 +++++ .../CWE-134/semmle/funcs/funcsLocal.expected | 1 + .../UncontrolledFormatString.expected | 1 + ...olledFormatStringThroughGlobalVar.expected | 1 + .../CWE/CWE-134/semmle/ifs/ifs.expected | 1 + .../CWE-190/SAMATE/ArithmeticTainted.expected | 1 + .../TaintedAllocationSize.expected | 1 + .../semmle/tainted/ArithmeticTainted.expected | 1 + .../AuthenticationBypass.expected | 1 + .../tests/CleartextBufferWrite.expected | 1 + .../TaintedCondition.expected | 1 + 22 files changed, 56 insertions(+) diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/DefaultTaintTracking.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/DefaultTaintTracking.qll index 49d11a7e3cc..e971452945c 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/DefaultTaintTracking.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/DefaultTaintTracking.qll @@ -550,6 +550,35 @@ module TaintedWithPath { ) } + query predicate subpaths(PathNode arg, PathNode par, PathNode ret, PathNode out) { + DataFlow3::PathGraph::subpaths(arg.(WrapPathNode).inner(), par.(WrapPathNode).inner(), + ret.(WrapPathNode).inner(), out.(WrapPathNode).inner()) + or + // To avoid showing trivial-looking steps, we _replace_ the last node instead + // of adding an edge out of it. + exists(WrapPathNode sinkNode | + DataFlow3::PathGraph::subpaths(arg.(WrapPathNode).inner(), par.(WrapPathNode).inner(), + ret.(WrapPathNode).inner(), sinkNode.inner()) and + out.(FinalPathNode).inner() = adjustedSink(sinkNode.inner().getNode()) + ) + or + // Same for the first node + exists(WrapPathNode sourceNode | + DataFlow3::PathGraph::subpaths(sourceNode.inner(), par.(WrapPathNode).inner(), + ret.(WrapPathNode).inner(), out.(WrapPathNode).inner()) and + sourceNode.inner().getNode() = getNodeForExpr(arg.(InitialPathNode).inner()) + ) + or + // Finally, handle the case where the path goes directly from a source to a + // sink, meaning that they both need to be translated. + exists(WrapPathNode sinkNode, WrapPathNode sourceNode | + DataFlow3::PathGraph::subpaths(sourceNode.inner(), par.(WrapPathNode).inner(), + ret.(WrapPathNode).inner(), sinkNode.inner()) and + sourceNode.inner().getNode() = getNodeForExpr(arg.(InitialPathNode).inner()) and + out.(FinalPathNode).inner() = adjustedSink(sinkNode.inner().getNode()) + ) + } + /** Holds if `n` is a node in the graph of data flow path explanations. */ query predicate nodes(PathNode n, string key, string val) { key = "semmle.label" and val = n.toString() diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-022/SAMATE/TaintedPath/TaintedPath.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-022/SAMATE/TaintedPath/TaintedPath.expected index ebd575376fd..6271123d9d1 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-022/SAMATE/TaintedPath/TaintedPath.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-022/SAMATE/TaintedPath/TaintedPath.expected @@ -5,6 +5,7 @@ edges | CWE23_Relative_Path_Traversal__char_console_fopen_11.cpp:55:27:55:38 | fgets output argument | CWE23_Relative_Path_Traversal__char_console_fopen_11.cpp:77:23:77:26 | (const char *)... | | CWE23_Relative_Path_Traversal__char_console_fopen_11.cpp:55:27:55:38 | fgets output argument | CWE23_Relative_Path_Traversal__char_console_fopen_11.cpp:77:23:77:26 | data | | CWE23_Relative_Path_Traversal__char_console_fopen_11.cpp:55:27:55:38 | fgets output argument | CWE23_Relative_Path_Traversal__char_console_fopen_11.cpp:77:23:77:26 | data indirection | +subpaths nodes | CWE23_Relative_Path_Traversal__char_console_fopen_11.cpp:55:27:55:38 | ... + ... | semmle.label | ... + ... | | CWE23_Relative_Path_Traversal__char_console_fopen_11.cpp:55:27:55:38 | fgets output argument | semmle.label | fgets output argument | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-022/semmle/tests/TaintedPath.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-022/semmle/tests/TaintedPath.expected index 7b513c574ad..cb8dfd321b3 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-022/semmle/tests/TaintedPath.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-022/semmle/tests/TaintedPath.expected @@ -5,6 +5,7 @@ edges | test.c:9:23:9:26 | argv | test.c:17:11:17:18 | fileName | | test.c:9:23:9:26 | argv | test.c:17:11:17:18 | fileName indirection | | test.c:9:23:9:26 | argv | test.c:17:11:17:18 | fileName indirection | +subpaths nodes | test.c:9:23:9:26 | argv | semmle.label | argv | | test.c:9:23:9:26 | argv | semmle.label | argv | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-079/semmle/CgiXss/CgiXss.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-079/semmle/CgiXss/CgiXss.expected index d9fa0d7029f..ebf051ddd0b 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-079/semmle/CgiXss/CgiXss.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-079/semmle/CgiXss/CgiXss.expected @@ -24,6 +24,7 @@ edges | search.c:55:17:55:25 | raw_query indirection | search.c:14:24:14:28 | *query | | search.c:57:5:57:15 | raw_query | search.c:22:24:22:28 | query | | search.c:57:17:57:25 | raw_query indirection | search.c:22:24:22:28 | *query | +subpaths nodes | search.c:14:24:14:28 | *query | semmle.label | *query | | search.c:14:24:14:28 | query | semmle.label | query | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-089/SqlTainted/SqlTainted.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-089/SqlTainted/SqlTainted.expected index 744598ed70b..2b572375ce9 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-089/SqlTainted/SqlTainted.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-089/SqlTainted/SqlTainted.expected @@ -13,6 +13,7 @@ edges | test.cpp:43:27:43:30 | argv | test.cpp:43:27:43:33 | access to array | | test.cpp:43:27:43:30 | argv | test.cpp:43:27:43:33 | access to array indirection | | test.cpp:43:27:43:30 | argv | test.cpp:43:27:43:33 | access to array indirection | +subpaths nodes | test.c:15:20:15:23 | argv | semmle.label | argv | | test.c:15:20:15:23 | argv | semmle.label | argv | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-114/SAMATE/UncontrolledProcessOperation/UncontrolledProcessOperation.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-114/SAMATE/UncontrolledProcessOperation/UncontrolledProcessOperation.expected index 1aa02436ddd..11cca0cf50b 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-114/SAMATE/UncontrolledProcessOperation/UncontrolledProcessOperation.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-114/SAMATE/UncontrolledProcessOperation/UncontrolledProcessOperation.expected @@ -12,6 +12,7 @@ edges | test.cpp:64:30:64:35 | call to getenv | test.cpp:73:24:73:27 | data indirection | | test.cpp:73:17:73:22 | data | test.cpp:37:73:37:76 | data | | test.cpp:73:24:73:27 | data indirection | test.cpp:37:73:37:76 | *data | +subpaths nodes | test.cpp:37:73:37:76 | *data | semmle.label | *data | | test.cpp:37:73:37:76 | data | semmle.label | data | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-114/semmle/UncontrolledProcessOperation/UncontrolledProcessOperation.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-114/semmle/UncontrolledProcessOperation/UncontrolledProcessOperation.expected index c610e346bb1..b9a0f7b3631 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-114/semmle/UncontrolledProcessOperation/UncontrolledProcessOperation.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-114/semmle/UncontrolledProcessOperation/UncontrolledProcessOperation.expected @@ -47,6 +47,7 @@ edges | test.cpp:106:17:106:22 | recv output argument | test.cpp:107:15:107:20 | (const char *)... | | test.cpp:106:17:106:22 | recv output argument | test.cpp:107:15:107:20 | buffer | | test.cpp:106:17:106:22 | recv output argument | test.cpp:107:15:107:20 | buffer indirection | +subpaths nodes | test.cpp:24:30:24:36 | *command | semmle.label | *command | | test.cpp:24:30:24:36 | command | semmle.label | command | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/UnboundedWrite.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/UnboundedWrite.expected index 58e3dda0964..7cefb7cfafc 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/UnboundedWrite.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/UnboundedWrite.expected @@ -1,3 +1,4 @@ edges +subpaths nodes #select diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-119/semmle/tests/UnboundedWrite.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-119/semmle/tests/UnboundedWrite.expected index 58e3dda0964..7cefb7cfafc 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-119/semmle/tests/UnboundedWrite.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-119/semmle/tests/UnboundedWrite.expected @@ -1,3 +1,4 @@ edges +subpaths nodes #select diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-120/semmle/tests/UnboundedWrite.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-120/semmle/tests/UnboundedWrite.expected index 5255753b235..e98353732b9 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-120/semmle/tests/UnboundedWrite.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-120/semmle/tests/UnboundedWrite.expected @@ -49,6 +49,7 @@ edges | tests.c:34:10:34:13 | argv | tests.c:34:10:34:16 | access to array | | tests.c:34:10:34:13 | argv | tests.c:34:10:34:16 | access to array indirection | | tests.c:34:10:34:13 | argv | tests.c:34:10:34:16 | access to array indirection | +subpaths nodes | tests.c:28:22:28:25 | argv | semmle.label | argv | | tests.c:28:22:28:25 | argv | semmle.label | argv | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/UncontrolledFormatString.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/UncontrolledFormatString.expected index ba56fb478d6..5bce7b8aa38 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/UncontrolledFormatString.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/UncontrolledFormatString.expected @@ -17,6 +17,7 @@ edges | char_environment_fprintf_01_bad.c:27:30:27:35 | call to getenv | char_environment_fprintf_01_bad.c:36:21:36:24 | data | | char_environment_fprintf_01_bad.c:27:30:27:35 | call to getenv | char_environment_fprintf_01_bad.c:36:21:36:24 | data indirection | | char_environment_fprintf_01_bad.c:27:30:27:35 | call to getenv | char_environment_fprintf_01_bad.c:36:21:36:24 | data indirection | +subpaths nodes | char_connect_socket_w32_vsnprintf_01_bad.c:94:46:94:69 | recv output argument | semmle.label | recv output argument | | char_connect_socket_w32_vsnprintf_01_bad.c:94:55:94:68 | ... + ... | semmle.label | ... + ... | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-134/semmle/argv/argvLocal.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-134/semmle/argv/argvLocal.expected index 16fa875d620..a5a17967f69 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-134/semmle/argv/argvLocal.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-134/semmle/argv/argvLocal.expected @@ -247,6 +247,13 @@ edges | argvLocal.c:168:18:168:21 | argv | argvLocal.c:170:24:170:26 | i10 | | argvLocal.c:168:18:168:21 | argv | argvLocal.c:170:24:170:26 | i10 | | argvLocal.c:170:15:170:26 | i10 indirection | argvLocal.c:9:25:9:31 | *correct | +subpaths +| argvLocal.c:117:2:117:13 | i3 | argvLocal.c:9:25:9:31 | correct | argvLocal.c:9:25:9:31 | *correct | argvLocal.c:117:15:117:16 | printWrapper output argument | +| argvLocal.c:117:15:117:16 | i3 indirection | argvLocal.c:9:25:9:31 | *correct | argvLocal.c:9:25:9:31 | *correct | argvLocal.c:117:15:117:16 | printWrapper output argument | +| argvLocal.c:122:2:122:13 | i4 | argvLocal.c:9:25:9:31 | correct | argvLocal.c:9:25:9:31 | *correct | argvLocal.c:122:15:122:16 | printWrapper output argument | +| argvLocal.c:122:15:122:16 | i4 indirection | argvLocal.c:9:25:9:31 | *correct | argvLocal.c:9:25:9:31 | *correct | argvLocal.c:122:15:122:16 | printWrapper output argument | +| argvLocal.c:128:2:128:13 | i5 | argvLocal.c:9:25:9:31 | correct | argvLocal.c:9:25:9:31 | *correct | argvLocal.c:128:15:128:16 | printWrapper output argument | +| argvLocal.c:128:15:128:16 | i5 indirection | argvLocal.c:9:25:9:31 | *correct | argvLocal.c:9:25:9:31 | *correct | argvLocal.c:128:15:128:16 | printWrapper output argument | nodes | argvLocal.c:9:25:9:31 | *correct | semmle.label | *correct | | argvLocal.c:9:25:9:31 | *correct | semmle.label | *correct | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-134/semmle/funcs/funcsLocal.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-134/semmle/funcs/funcsLocal.expected index ceaf0489ec6..0f78d29fd36 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-134/semmle/funcs/funcsLocal.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-134/semmle/funcs/funcsLocal.expected @@ -51,6 +51,7 @@ edges | funcsLocal.c:41:18:41:20 | i61 | funcsLocal.c:42:9:42:10 | (const char *)... | | funcsLocal.c:41:18:41:20 | i61 | funcsLocal.c:42:9:42:10 | i6 | | funcsLocal.c:41:18:41:20 | i61 | funcsLocal.c:42:9:42:10 | i6 indirection | +subpaths nodes | funcsLocal.c:16:8:16:9 | fread output argument | semmle.label | fread output argument | | funcsLocal.c:16:8:16:9 | i1 | semmle.label | i1 | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-134/semmle/globalVars/UncontrolledFormatString.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-134/semmle/globalVars/UncontrolledFormatString.expected index 58e3dda0964..7cefb7cfafc 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-134/semmle/globalVars/UncontrolledFormatString.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-134/semmle/globalVars/UncontrolledFormatString.expected @@ -1,3 +1,4 @@ edges +subpaths nodes #select diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-134/semmle/globalVars/UncontrolledFormatStringThroughGlobalVar.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-134/semmle/globalVars/UncontrolledFormatStringThroughGlobalVar.expected index f095153f39c..8d957ee499c 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-134/semmle/globalVars/UncontrolledFormatStringThroughGlobalVar.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-134/semmle/globalVars/UncontrolledFormatStringThroughGlobalVar.expected @@ -46,6 +46,7 @@ edges | globalVars.c:50:9:50:13 | copy2 | globalVars.c:50:9:50:13 | (const char *)... | | globalVars.c:50:9:50:13 | copy2 | globalVars.c:50:9:50:13 | copy2 | | globalVars.c:50:9:50:13 | copy2 | globalVars.c:50:9:50:13 | copy2 indirection | +subpaths nodes | globalVars.c:8:7:8:10 | copy | semmle.label | copy | | globalVars.c:9:7:9:11 | copy2 | semmle.label | copy2 | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-134/semmle/ifs/ifs.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-134/semmle/ifs/ifs.expected index 8c2c89035e2..2805eed6ad0 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-134/semmle/ifs/ifs.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-134/semmle/ifs/ifs.expected @@ -71,6 +71,7 @@ edges | ifs.c:123:8:123:11 | argv | ifs.c:124:9:124:10 | i9 | | ifs.c:123:8:123:11 | argv | ifs.c:124:9:124:10 | i9 indirection | | ifs.c:123:8:123:11 | argv | ifs.c:124:9:124:10 | i9 indirection | +subpaths nodes | ifs.c:61:8:61:11 | argv | semmle.label | argv | | ifs.c:61:8:61:11 | argv | semmle.label | argv | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-190/SAMATE/ArithmeticTainted.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-190/SAMATE/ArithmeticTainted.expected index be606d4e1dd..690f5ed6550 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-190/SAMATE/ArithmeticTainted.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-190/SAMATE/ArithmeticTainted.expected @@ -3,6 +3,7 @@ edges | examples.cpp:63:26:63:30 | & ... | examples.cpp:66:11:66:14 | data | | examples.cpp:63:26:63:30 | fscanf output argument | examples.cpp:66:11:66:14 | data | | examples.cpp:63:26:63:30 | fscanf output argument | examples.cpp:66:11:66:14 | data | +subpaths nodes | examples.cpp:63:26:63:30 | & ... | semmle.label | & ... | | examples.cpp:63:26:63:30 | fscanf output argument | semmle.label | fscanf output argument | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/TaintedAllocationSize/TaintedAllocationSize.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/TaintedAllocationSize/TaintedAllocationSize.expected index 694f46e1d26..7fe8651f89a 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/TaintedAllocationSize/TaintedAllocationSize.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/TaintedAllocationSize/TaintedAllocationSize.expected @@ -73,6 +73,7 @@ edges | test.cpp:305:18:305:21 | Chi | test.cpp:308:10:308:27 | ... * ... | | test.cpp:305:18:305:21 | Chi | test.cpp:308:10:308:27 | ... * ... | | test.cpp:305:18:305:21 | get_size output argument [[]] | test.cpp:305:18:305:21 | Chi | +subpaths nodes | test.cpp:40:21:40:24 | argv | semmle.label | argv | | test.cpp:40:21:40:24 | argv | semmle.label | argv | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/tainted/ArithmeticTainted.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/tainted/ArithmeticTainted.expected index e2fefe4a442..e0f72bffd44 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/tainted/ArithmeticTainted.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/tainted/ArithmeticTainted.expected @@ -23,6 +23,7 @@ edges | test.c:51:17:51:20 | argv | test.c:54:7:54:10 | len3 | | test.c:51:17:51:20 | argv | test.c:54:7:54:10 | len3 | | test.c:51:17:51:20 | argv | test.c:54:7:54:10 | len3 | +subpaths nodes | test2.cpp:12:21:12:21 | v | semmle.label | v | | test2.cpp:14:11:14:11 | v | semmle.label | v | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-290/semmle/AuthenticationBypass/AuthenticationBypass.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-290/semmle/AuthenticationBypass/AuthenticationBypass.expected index 1ad31c3f9f7..360ced04144 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-290/semmle/AuthenticationBypass/AuthenticationBypass.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-290/semmle/AuthenticationBypass/AuthenticationBypass.expected @@ -17,6 +17,7 @@ edges | test.cpp:38:25:38:42 | (const char *)... | test.cpp:42:14:42:20 | address | | test.cpp:38:25:38:42 | (const char *)... | test.cpp:42:14:42:20 | address | | test.cpp:38:25:38:42 | (const char *)... | test.cpp:42:14:42:20 | address indirection | +subpaths nodes | test.cpp:16:25:16:30 | call to getenv | semmle.label | call to getenv | | test.cpp:16:25:16:42 | (const char *)... | semmle.label | (const char *)... | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-311/semmle/tests/CleartextBufferWrite.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-311/semmle/tests/CleartextBufferWrite.expected index e4f9bc918a4..400c49237ca 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-311/semmle/tests/CleartextBufferWrite.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-311/semmle/tests/CleartextBufferWrite.expected @@ -5,6 +5,7 @@ edges | test.cpp:54:17:54:20 | argv | test.cpp:58:25:58:29 | input | | test.cpp:54:17:54:20 | argv | test.cpp:58:25:58:29 | input indirection | | test.cpp:54:17:54:20 | argv | test.cpp:58:25:58:29 | input indirection | +subpaths nodes | test.cpp:54:17:54:20 | argv | semmle.label | argv | | test.cpp:54:17:54:20 | argv | semmle.label | argv | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-807/semmle/TaintedCondition/TaintedCondition.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-807/semmle/TaintedCondition/TaintedCondition.expected index e04a20830d0..1fdb1497922 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-807/semmle/TaintedCondition/TaintedCondition.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-807/semmle/TaintedCondition/TaintedCondition.expected @@ -7,6 +7,7 @@ edges | test.cpp:20:29:20:47 | (const char *)... | test.cpp:24:11:24:16 | call to strcmp | | test.cpp:20:29:20:47 | (const char *)... | test.cpp:41:10:41:38 | ! ... | | test.cpp:20:29:20:47 | (const char *)... | test.cpp:41:11:41:16 | call to strcmp | +subpaths nodes | test.cpp:20:29:20:34 | call to getenv | semmle.label | call to getenv | | test.cpp:20:29:20:47 | (const char *)... | semmle.label | (const char *)... | From 3189c578a4eeb9cbc4770257b492f565a10379df Mon Sep 17 00:00:00 2001 From: Robert Marsh Date: Thu, 23 Sep 2021 22:42:38 -0700 Subject: [PATCH 564/741] C++: Add QLDoc to subpaths in DefaultTaintTracking --- .../lib/semmle/code/cpp/ir/dataflow/DefaultTaintTracking.qll | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/DefaultTaintTracking.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/DefaultTaintTracking.qll index e971452945c..b77bc6cebf0 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/DefaultTaintTracking.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/DefaultTaintTracking.qll @@ -550,6 +550,10 @@ module TaintedWithPath { ) } + /** + * Holds if there is flow from `arg` to `out` across a call that can by summarized by the flow + * from `par` to `ret` within it, in the graph of data flow path explanations. + */ query predicate subpaths(PathNode arg, PathNode par, PathNode ret, PathNode out) { DataFlow3::PathGraph::subpaths(arg.(WrapPathNode).inner(), par.(WrapPathNode).inner(), ret.(WrapPathNode).inner(), out.(WrapPathNode).inner()) From a4a9e2aa965e7d346fcda25134b1a70f47cba651 Mon Sep 17 00:00:00 2001 From: Anders Fugmann Date: Thu, 23 Sep 2021 12:44:46 +0200 Subject: [PATCH 565/741] C++: Weaken wording on overflow static alert text --- cpp/ql/src/Critical/OverflowStatic.ql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpp/ql/src/Critical/OverflowStatic.ql b/cpp/ql/src/Critical/OverflowStatic.ql index 7c447c12323..f149f0c40f1 100644 --- a/cpp/ql/src/Critical/OverflowStatic.ql +++ b/cpp/ql/src/Critical/OverflowStatic.ql @@ -134,7 +134,7 @@ predicate outOfBounds(BufferAccess bufaccess, string msg) { ) and msg = "Potential buffer-overflow: '" + buf + "' has size " + size.toString() + " but '" + buf + "[" + - access.toString() + "]' is accessed here." + access.toString() + "]' may be accessed here." ) } From b08eabec68c327260c387303ee932a0f45977511 Mon Sep 17 00:00:00 2001 From: Anders Fugmann Date: Thu, 23 Sep 2021 13:18:05 +0200 Subject: [PATCH 566/741] C++: Relax predicate memberMayBeVarSize to mark all members of size 0 or 1 as variable sized --- cpp/ql/lib/semmle/code/cpp/commons/Buffer.qll | 50 ++----------------- 1 file changed, 3 insertions(+), 47 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/commons/Buffer.qll b/cpp/ql/lib/semmle/code/cpp/commons/Buffer.qll index 5778ee7dfb1..2328476d525 100644 --- a/cpp/ql/lib/semmle/code/cpp/commons/Buffer.qll +++ b/cpp/ql/lib/semmle/code/cpp/commons/Buffer.qll @@ -10,44 +10,11 @@ import semmle.code.cpp.dataflow.DataFlow * char data[1]; // v * }; * ``` - * This requires that `v` is an array of size 0 or 1, and `v` is the last member of `c`. - * In addition, if the size of the structure is taken, there must be at least one instance - * where a `c` pointer is allocated with additional space. - * For example, holds for `c` if it occurs as - * ``` - * malloc(sizeof(c) + 100 * sizeof(char)) - * ``` - * but not if it only ever occurs as - * ``` - * malloc(sizeof(c)) - * ``` + * This requires that `v` is an array of size 0 or 1. */ predicate memberMayBeVarSize(Class c, MemberVariable v) { - exists(int i | - // `v` is the last field in `c` - i = max(int j | c.getCanonicalMember(j) instanceof Field | j) and - v = c.getCanonicalMember(i) and - // v is an array of size at most 1 - v.getUnspecifiedType().(ArrayType).getArraySize() <= 1 and - not c instanceof Union - ) and - // If the size is taken, then arithmetic is performed on the result at least once - ( - // `sizeof(c)` is not taken - not exists(SizeofOperator so | - so.(SizeofTypeOperator).getTypeOperand().getUnspecifiedType() = c or - so.(SizeofExprOperator).getExprOperand().getUnspecifiedType() = c - ) - or - // or `sizeof(c)` is taken - exists(SizeofOperator so | - so.(SizeofTypeOperator).getTypeOperand().getUnspecifiedType() = c or - so.(SizeofExprOperator).getExprOperand().getUnspecifiedType() = c - | - // and arithmetic is performed on the result - so.getParent*() instanceof AddExpr - ) - ) + c = v.getDeclaringType() and + v.getUnspecifiedType().(ArrayType).getArraySize() <= 1 } /** @@ -60,10 +27,6 @@ int getBufferSize(Expr bufferExpr, Element why) { result = bufferVar.getUnspecifiedType().(ArrayType).getSize() and why = bufferVar and not memberMayBeVarSize(_, bufferVar) and - not exists(Union bufferType | - bufferType.getAMemberVariable() = why and - bufferVar.getUnspecifiedType().(ArrayType).getSize() <= 1 - ) and not result = 0 // zero sized arrays are likely to have special usage, for example or // behaving a bit like a 'union' overlapping other fields. @@ -85,13 +48,6 @@ int getBufferSize(Expr bufferExpr, Element why) { parentPtr.getTarget().getUnspecifiedType().(PointerType).getBaseType() = parentClass and result = getBufferSize(parentPtr, _) + bufferVar.getType().getSize() - parentClass.getSize() ) - or - exists(Union bufferType | - bufferType.getAMemberVariable() = why and - why = bufferVar and - bufferVar.getUnspecifiedType().(ArrayType).getSize() <= 1 and - result = bufferType.getSize() - ) ) or // buffer is a fixed size dynamic allocation From 3e5f7d0db578e065db1f758cfebe642e12199c4e Mon Sep 17 00:00:00 2001 From: Anders Fugmann Date: Thu, 23 Sep 2021 13:35:43 +0200 Subject: [PATCH 567/741] C++: using buildin offsetof for an array member indexed after end is legal --- cpp/ql/src/Critical/OverflowStatic.ql | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/cpp/ql/src/Critical/OverflowStatic.ql b/cpp/ql/src/Critical/OverflowStatic.ql index f149f0c40f1..76a9f9340d6 100644 --- a/cpp/ql/src/Critical/OverflowStatic.ql +++ b/cpp/ql/src/Critical/OverflowStatic.ql @@ -130,7 +130,9 @@ predicate outOfBounds(BufferAccess bufaccess, string msg) { ( access > size or - access = size and not exists(AddressOfExpr addof | bufaccess = addof.getOperand()) + access = size and + not exists(AddressOfExpr addof | bufaccess = addof.getOperand()) and + not exists(BuiltInOperationBuiltInOffsetOf offsetof | offsetof.getAChild() = bufaccess) ) and msg = "Potential buffer-overflow: '" + buf + "' has size " + size.toString() + " but '" + buf + "[" + From 032ac5003484d4f835f8a101414e1c688bccc7ba Mon Sep 17 00:00:00 2001 From: Anders Fugmann Date: Thu, 23 Sep 2021 13:49:55 +0200 Subject: [PATCH 568/741] C++: Do not warn on static buffer overflow using loop counters, if the loop counter has been widened --- .../semmle/code/cpp/rangeanalysis/SimpleRangeAnalysis.qll | 8 ++++++++ cpp/ql/src/Critical/OverflowStatic.ql | 2 ++ 2 files changed, 10 insertions(+) diff --git a/cpp/ql/lib/semmle/code/cpp/rangeanalysis/SimpleRangeAnalysis.qll b/cpp/ql/lib/semmle/code/cpp/rangeanalysis/SimpleRangeAnalysis.qll index f19601c4e21..7e97d8ec633 100644 --- a/cpp/ql/lib/semmle/code/cpp/rangeanalysis/SimpleRangeAnalysis.qll +++ b/cpp/ql/lib/semmle/code/cpp/rangeanalysis/SimpleRangeAnalysis.qll @@ -1593,6 +1593,14 @@ private module SimpleRangeAnalysisCached { result = min([max(getTruncatedUpperBounds(expr)), getGuardedUpperBound(expr)]) } + /** Holds if `expr` may have been widened */ + cached + predicate upperBoundMayBeWidened(Expr e) { + isRecursiveExpr(e) and + // Corresponds to taking max on the RHS + not getGuardedUpperBound(e) < getTruncatedUpperBounds(e) + } + /** * Holds if `expr` has a provably empty range. For example: * diff --git a/cpp/ql/src/Critical/OverflowStatic.ql b/cpp/ql/src/Critical/OverflowStatic.ql index 76a9f9340d6..059b7fb1029 100644 --- a/cpp/ql/src/Critical/OverflowStatic.ql +++ b/cpp/ql/src/Critical/OverflowStatic.ql @@ -55,6 +55,8 @@ predicate overflowOffsetInLoop(BufferAccess bufaccess, string msg) { loop.counter().getAnAccess() = bufaccess.getArrayOffset() and // Ensure that we don't have an upper bound on the array index that's less than the buffer size. not upperBound(bufaccess.getArrayOffset().getFullyConverted()) < bufaccess.bufferSize() and + // The upper bounds analysis must not have been widended + not upperBoundMayBeWidened(bufaccess.getArrayOffset().getFullyConverted()) and msg = "Potential buffer-overflow: counter '" + loop.counter().toString() + "' <= " + loop.limit().toString() + " but '" + bufaccess.buffer().getName() + "' has " + From 4e6a8d991eff1b621ad6b51ca811b804d1a5f018 Mon Sep 17 00:00:00 2001 From: Benjamin Muskalla Date: Fri, 24 Sep 2021 11:12:41 +0200 Subject: [PATCH 569/741] Move stub generator into subdirectory --- java/ql/src/utils/{ => stub-generator}/MinimalStubsFromSource.ql | 0 java/ql/src/utils/{ => stub-generator}/Stubs.qll | 0 java/ql/src/utils/{ => stub-generator}/makeStubs.py | 0 3 files changed, 0 insertions(+), 0 deletions(-) rename java/ql/src/utils/{ => stub-generator}/MinimalStubsFromSource.ql (100%) rename java/ql/src/utils/{ => stub-generator}/Stubs.qll (100%) rename java/ql/src/utils/{ => stub-generator}/makeStubs.py (100%) diff --git a/java/ql/src/utils/MinimalStubsFromSource.ql b/java/ql/src/utils/stub-generator/MinimalStubsFromSource.ql similarity index 100% rename from java/ql/src/utils/MinimalStubsFromSource.ql rename to java/ql/src/utils/stub-generator/MinimalStubsFromSource.ql diff --git a/java/ql/src/utils/Stubs.qll b/java/ql/src/utils/stub-generator/Stubs.qll similarity index 100% rename from java/ql/src/utils/Stubs.qll rename to java/ql/src/utils/stub-generator/Stubs.qll diff --git a/java/ql/src/utils/makeStubs.py b/java/ql/src/utils/stub-generator/makeStubs.py similarity index 100% rename from java/ql/src/utils/makeStubs.py rename to java/ql/src/utils/stub-generator/makeStubs.py From 38ca5aba98f8c384c0dfe5b15d3e69fd07257405 Mon Sep 17 00:00:00 2001 From: Benjamin Muskalla Date: Fri, 24 Sep 2021 11:13:04 +0200 Subject: [PATCH 570/741] Move test generator into subdirectory --- java/ql/src/utils/{ => flow-testcase-generator}/FlowTestCase.qll | 0 .../{ => flow-testcase-generator}/FlowTestCaseSupportMethods.qll | 0 .../src/utils/{ => flow-testcase-generator}/FlowTestCaseUtils.qll | 0 .../utils/{ => flow-testcase-generator}/GenerateFlowTestCase.py | 0 .../utils/{ => flow-testcase-generator}/GenerateFlowTestCase.qll | 0 java/ql/src/utils/{ => flow-testcase-generator}/testHeader.qlfrag | 0 .../utils/{ => flow-testcase-generator}/testModelsFooter.qlfrag | 0 .../utils/{ => flow-testcase-generator}/testModelsHeader.qlfrag | 0 8 files changed, 0 insertions(+), 0 deletions(-) rename java/ql/src/utils/{ => flow-testcase-generator}/FlowTestCase.qll (100%) rename java/ql/src/utils/{ => flow-testcase-generator}/FlowTestCaseSupportMethods.qll (100%) rename java/ql/src/utils/{ => flow-testcase-generator}/FlowTestCaseUtils.qll (100%) rename java/ql/src/utils/{ => flow-testcase-generator}/GenerateFlowTestCase.py (100%) rename java/ql/src/utils/{ => flow-testcase-generator}/GenerateFlowTestCase.qll (100%) rename java/ql/src/utils/{ => flow-testcase-generator}/testHeader.qlfrag (100%) rename java/ql/src/utils/{ => flow-testcase-generator}/testModelsFooter.qlfrag (100%) rename java/ql/src/utils/{ => flow-testcase-generator}/testModelsHeader.qlfrag (100%) diff --git a/java/ql/src/utils/FlowTestCase.qll b/java/ql/src/utils/flow-testcase-generator/FlowTestCase.qll similarity index 100% rename from java/ql/src/utils/FlowTestCase.qll rename to java/ql/src/utils/flow-testcase-generator/FlowTestCase.qll diff --git a/java/ql/src/utils/FlowTestCaseSupportMethods.qll b/java/ql/src/utils/flow-testcase-generator/FlowTestCaseSupportMethods.qll similarity index 100% rename from java/ql/src/utils/FlowTestCaseSupportMethods.qll rename to java/ql/src/utils/flow-testcase-generator/FlowTestCaseSupportMethods.qll diff --git a/java/ql/src/utils/FlowTestCaseUtils.qll b/java/ql/src/utils/flow-testcase-generator/FlowTestCaseUtils.qll similarity index 100% rename from java/ql/src/utils/FlowTestCaseUtils.qll rename to java/ql/src/utils/flow-testcase-generator/FlowTestCaseUtils.qll diff --git a/java/ql/src/utils/GenerateFlowTestCase.py b/java/ql/src/utils/flow-testcase-generator/GenerateFlowTestCase.py similarity index 100% rename from java/ql/src/utils/GenerateFlowTestCase.py rename to java/ql/src/utils/flow-testcase-generator/GenerateFlowTestCase.py diff --git a/java/ql/src/utils/GenerateFlowTestCase.qll b/java/ql/src/utils/flow-testcase-generator/GenerateFlowTestCase.qll similarity index 100% rename from java/ql/src/utils/GenerateFlowTestCase.qll rename to java/ql/src/utils/flow-testcase-generator/GenerateFlowTestCase.qll diff --git a/java/ql/src/utils/testHeader.qlfrag b/java/ql/src/utils/flow-testcase-generator/testHeader.qlfrag similarity index 100% rename from java/ql/src/utils/testHeader.qlfrag rename to java/ql/src/utils/flow-testcase-generator/testHeader.qlfrag diff --git a/java/ql/src/utils/testModelsFooter.qlfrag b/java/ql/src/utils/flow-testcase-generator/testModelsFooter.qlfrag similarity index 100% rename from java/ql/src/utils/testModelsFooter.qlfrag rename to java/ql/src/utils/flow-testcase-generator/testModelsFooter.qlfrag diff --git a/java/ql/src/utils/testModelsHeader.qlfrag b/java/ql/src/utils/flow-testcase-generator/testModelsHeader.qlfrag similarity index 100% rename from java/ql/src/utils/testModelsHeader.qlfrag rename to java/ql/src/utils/flow-testcase-generator/testModelsHeader.qlfrag From d7afd86a273e7bee9b06e7ede68871658b4913ef Mon Sep 17 00:00:00 2001 From: Anders Fugmann Date: Fri, 24 Sep 2021 11:44:05 +0200 Subject: [PATCH 571/741] C++: Add test case exposing problem with overflows for upperBound predicate --- .../SimpleRangeAnalysis/lowerBound.expected | 4 ++++ .../rangeanalysis/SimpleRangeAnalysis/test.c | 9 +++++++++ .../SimpleRangeAnalysis/upperBound.expected | 4 ++++ 3 files changed, 17 insertions(+) diff --git a/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/lowerBound.expected b/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/lowerBound.expected index bd08d2698a3..112b6cb0201 100644 --- a/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/lowerBound.expected +++ b/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/lowerBound.expected @@ -599,6 +599,10 @@ | test.c:675:7:675:7 | y | -2147483648 | | test.c:684:7:684:7 | x | -2147483648 | | test.c:689:7:689:7 | x | -2147483648 | +| test.c:696:8:696:8 | x | 2147483647 | +| test.c:696:12:696:12 | y | 256 | +| test.c:697:9:697:9 | x | 2147483647 | +| test.c:698:9:698:9 | y | 256 | | test.cpp:10:7:10:7 | b | -2147483648 | | test.cpp:11:5:11:5 | x | -2147483648 | | test.cpp:13:10:13:10 | x | -2147483648 | diff --git a/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/test.c b/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/test.c index c4a2afcb5a0..8c7978ac4aa 100644 --- a/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/test.c +++ b/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/test.c @@ -689,3 +689,12 @@ label: out(x); goto label; } + +void test_overflow() { + const int x = 2147483647; // 2^31-1 + const int y = 256; + if ((x + y) <= 512) { + out(x); + out(y); + } +} diff --git a/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/upperBound.expected b/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/upperBound.expected index d6cce638bc2..20351605766 100644 --- a/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/upperBound.expected +++ b/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/upperBound.expected @@ -599,6 +599,10 @@ | test.c:675:7:675:7 | y | 2147483647 | | test.c:684:7:684:7 | x | 2147483647 | | test.c:689:7:689:7 | x | 15 | +| test.c:696:8:696:8 | x | 2147483647 | +| test.c:696:12:696:12 | y | 256 | +| test.c:697:9:697:9 | x | 256 | +| test.c:698:9:698:9 | y | -2147483135 | | test.cpp:10:7:10:7 | b | 2147483647 | | test.cpp:11:5:11:5 | x | 2147483647 | | test.cpp:13:10:13:10 | x | 2147483647 | From 3437cf290950f5a65c6b6d192f16047329a2dd57 Mon Sep 17 00:00:00 2001 From: Anders Fugmann Date: Fri, 24 Sep 2021 11:46:58 +0200 Subject: [PATCH 572/741] C++: only use upperbound if there are no overflows in the guard --- .../lib/semmle/code/cpp/rangeanalysis/SimpleRangeAnalysis.qll | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cpp/ql/lib/semmle/code/cpp/rangeanalysis/SimpleRangeAnalysis.qll b/cpp/ql/lib/semmle/code/cpp/rangeanalysis/SimpleRangeAnalysis.qll index f19601c4e21..89ef90da544 100644 --- a/cpp/ql/lib/semmle/code/cpp/rangeanalysis/SimpleRangeAnalysis.qll +++ b/cpp/ql/lib/semmle/code/cpp/rangeanalysis/SimpleRangeAnalysis.qll @@ -1549,7 +1549,8 @@ private float getGuardedUpperBound(VariableAccess guardedAccess) { // that there is one predecessor, albeit somewhat conservative. exists(unique(BasicBlock b | b = def.(BasicBlock).getAPredecessor())) and guardedAccess = def.getAUse(v) and - result = max(float ub | upperBoundFromGuard(guard, guardVa, ub, branch)) + result = max(float ub | upperBoundFromGuard(guard, guardVa, ub, branch)) and + not exists(Expr e | e = guard.getAChild+() | convertedExprMightOverflow(e)) ) } From c9c41252e363b9d5f78a21f1f12f80b74c263b67 Mon Sep 17 00:00:00 2001 From: Anders Fugmann Date: Fri, 24 Sep 2021 12:23:48 +0200 Subject: [PATCH 573/741] C++: Update test results in SimpleRangeAnalysis --- .../rangeanalysis/SimpleRangeAnalysis/upperBound.expected | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/upperBound.expected b/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/upperBound.expected index 20351605766..8772a763a4d 100644 --- a/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/upperBound.expected +++ b/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/upperBound.expected @@ -601,8 +601,8 @@ | test.c:689:7:689:7 | x | 15 | | test.c:696:8:696:8 | x | 2147483647 | | test.c:696:12:696:12 | y | 256 | -| test.c:697:9:697:9 | x | 256 | -| test.c:698:9:698:9 | y | -2147483135 | +| test.c:697:9:697:9 | x | 2147483647 | +| test.c:698:9:698:9 | y | 256 | | test.cpp:10:7:10:7 | b | 2147483647 | | test.cpp:11:5:11:5 | x | 2147483647 | | test.cpp:13:10:13:10 | x | 2147483647 | From cbdabe35de16ad39b70473aba5af1da3859f43d9 Mon Sep 17 00:00:00 2001 From: Anders Fugmann Date: Fri, 24 Sep 2021 12:29:28 +0200 Subject: [PATCH 574/741] C++: Update test results to reflect changes --- .../CWE/CWE-119/semmle/tests/OverflowBuffer.expected | 3 --- .../CWE/CWE-119/semmle/tests/OverflowStatic.expected | 6 ++---- .../Security/CWE/CWE-119/semmle/tests/var_size_struct.cpp | 6 +++--- .../Security/CWE/CWE-119/semmle/tests/varsize.expected | 5 +++++ 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-119/semmle/tests/OverflowBuffer.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-119/semmle/tests/OverflowBuffer.expected index 77751b66d4e..795d83587c3 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-119/semmle/tests/OverflowBuffer.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-119/semmle/tests/OverflowBuffer.expected @@ -72,12 +72,9 @@ | unions.cpp:30:2:30:7 | call to memset | This 'memset' operation accesses 200 bytes but the $@ is only 100 bytes. | unions.cpp:15:7:15:11 | small | destination buffer | | unions.cpp:34:2:34:7 | call to memset | This 'memset' operation accesses 200 bytes but the $@ is only 100 bytes. | unions.cpp:16:7:16:11 | large | destination buffer | | unions.cpp:34:2:34:7 | call to memset | This 'memset' operation accesses 200 bytes but the $@ is only 100 bytes. | unions.cpp:34:14:34:18 | large | destination buffer | -| var_size_struct.cpp:54:5:54:14 | access to array | This array indexing operation accesses byte offset 1 but the $@ is only 1 byte. | var_size_struct.cpp:32:8:32:10 | str | array | -| var_size_struct.cpp:55:5:55:14 | access to array | This array indexing operation accesses byte offset 1 but the $@ is only 1 byte. | var_size_struct.cpp:38:8:38:10 | str | array | | var_size_struct.cpp:71:3:71:8 | call to memset | This 'memset' operation accesses 1025 bytes but the $@ is only 1024 bytes. | var_size_struct.cpp:63:8:63:11 | data | destination buffer | | var_size_struct.cpp:73:3:73:9 | call to strncpy | This 'strncpy' operation may access 1025 bytes but the $@ is only 1024 bytes. | var_size_struct.cpp:63:8:63:11 | data | destination buffer | | var_size_struct.cpp:87:3:87:19 | access to array | This array indexing operation accesses byte offset 67 but the $@ is only 64 bytes. | var_size_struct.cpp:78:7:78:14 | elements | array | | var_size_struct.cpp:99:3:99:8 | call to memset | This 'memset' operation accesses 129 bytes but the $@ is only 128 bytes. | var_size_struct.cpp:92:8:92:10 | str | destination buffer | | var_size_struct.cpp:101:3:101:8 | call to memset | This 'memset' operation accesses 129 bytes but the $@ is only 128 bytes. | var_size_struct.cpp:92:8:92:10 | str | destination buffer | | var_size_struct.cpp:103:3:103:9 | call to strncpy | This 'strncpy' operation may access 129 bytes but the $@ is only 128 bytes. | var_size_struct.cpp:92:8:92:10 | str | destination buffer | -| var_size_struct.cpp:169:3:169:8 | call to memset | This 'memset' operation accesses 100 bytes but the $@ is only 1 byte. | var_size_struct.cpp:125:17:125:19 | arr | destination buffer | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-119/semmle/tests/OverflowStatic.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-119/semmle/tests/OverflowStatic.expected index ef334a73a2c..ac44bbf028d 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-119/semmle/tests/OverflowStatic.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-119/semmle/tests/OverflowStatic.expected @@ -3,8 +3,6 @@ | tests.cpp:163:3:163:11 | access to array | Potential buffer-overflow: counter 'k' <= 100 but 'buffer' has 100 elements. | | tests.cpp:164:8:164:16 | access to array | Potential buffer-overflow: counter 'k' <= 100 but 'buffer' has 100 elements. | | tests.cpp:245:42:245:42 | 6 | Potential buffer-overflow: 'global_array_5' has size 5 not 6. | -| tests.cpp:349:2:349:14 | access to array | Potential buffer-overflow: 'charArray' has size 10 but 'charArray[10]' is accessed here. | -| tests.cpp:350:17:350:29 | access to array | Potential buffer-overflow: 'charArray' has size 10 but 'charArray[10]' is accessed here. | -| var_size_struct.cpp:54:5:54:14 | access to array | Potential buffer-overflow: 'str' has size 1 but 'str[1]' is accessed here. | -| var_size_struct.cpp:55:5:55:14 | access to array | Potential buffer-overflow: 'str' has size 1 but 'str[1]' is accessed here. | +| tests.cpp:349:2:349:14 | access to array | Potential buffer-overflow: 'charArray' has size 10 but 'charArray[10]' may be accessed here. | +| tests.cpp:350:17:350:29 | access to array | Potential buffer-overflow: 'charArray' has size 10 but 'charArray[10]' may be accessed here. | | var_size_struct.cpp:103:39:103:41 | 129 | Potential buffer-overflow: 'str' has size 128 not 129. | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-119/semmle/tests/var_size_struct.cpp b/cpp/ql/test/query-tests/Security/CWE/CWE-119/semmle/tests/var_size_struct.cpp index c006c35fe9b..a514135f348 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-119/semmle/tests/var_size_struct.cpp +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-119/semmle/tests/var_size_struct.cpp @@ -51,8 +51,8 @@ void testVarString(int n) { s1->str[1] = '?'; // GOOD s2->str[1] = '?'; // GOOD s3->str[1] = '?'; // GOOD - s4->str[1] = '?'; // BAD - s5->str[1] = '?'; // BAD + s4->str[1] = '?'; // BAD [NOT DETECTED] + s5->str[1] = '?'; // BAD [NOT DETECTED] } } @@ -166,7 +166,7 @@ void useVarStruct34(varStruct5 *vs5) { void testVarStruct34(varStruct3 *vs3, varStruct4 *vs4, varStruct5 *vs5, varStruct6 *vs6, varStruct7 *vs7, varStruct8 *vs8, varStruct9 *vs9) { memset(vs3->arr, 'x', 100); // GOOD: it's variable size, we don't know how big so shouldn't flag - memset(vs4->arr, 'x', 100); // BAD: it's not variable size, so this is a buffer overflow + memset(vs4->arr, 'x', 100); // BAD: [NOT DETECTED] it's not variable size, so this is a buffer overflow memset(vs5->arr, 'x', 100); // GOOD: it's variable size, we don't know how big so shouldn't flag memset(vs6->arr, 'x', 100); // GOOD: it's variable size, we don't know how big so shouldn't flag memset(vs7->arr, 'x', 100); // GOOD: it's variable size, we don't know how big so shouldn't flag diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-119/semmle/tests/varsize.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-119/semmle/tests/varsize.expected index d9e9effde62..79406c3eaef 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-119/semmle/tests/varsize.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-119/semmle/tests/varsize.expected @@ -1,12 +1,17 @@ | var_size_struct.cpp:13:8:13:17 | VarString1 | var_size_struct.cpp:15:8:15:10 | str | | var_size_struct.cpp:18:8:18:17 | VarString2 | var_size_struct.cpp:20:8:20:10 | str | | var_size_struct.cpp:24:8:24:17 | VarString3 | var_size_struct.cpp:26:8:26:10 | str | +| var_size_struct.cpp:30:8:30:17 | VarString4 | var_size_struct.cpp:32:8:32:10 | str | +| var_size_struct.cpp:36:8:36:17 | VarString5 | var_size_struct.cpp:38:8:38:10 | str | | var_size_struct.cpp:36:8:36:17 | VarString5 | var_size_struct.cpp:39:8:39:11 | str2 | | var_size_struct.cpp:61:8:61:17 | varStruct1 | var_size_struct.cpp:63:8:63:11 | data | | var_size_struct.cpp:76:8:76:17 | varStruct2 | var_size_struct.cpp:78:7:78:14 | elements | +| var_size_struct.cpp:106:8:106:20 | notVarStruct2 | var_size_struct.cpp:107:8:107:10 | str | | var_size_struct.cpp:119:8:119:17 | varStruct3 | var_size_struct.cpp:121:17:121:19 | arr | +| var_size_struct.cpp:123:8:123:17 | varStruct4 | var_size_struct.cpp:125:17:125:19 | arr | | var_size_struct.cpp:127:8:127:17 | varStruct5 | var_size_struct.cpp:129:17:129:19 | arr | | var_size_struct.cpp:131:8:131:17 | varStruct6 | var_size_struct.cpp:133:17:133:19 | arr | | var_size_struct.cpp:135:8:135:17 | varStruct7 | var_size_struct.cpp:137:17:137:19 | arr | | var_size_struct.cpp:139:8:139:17 | varStruct8 | var_size_struct.cpp:141:9:141:11 | arr | | var_size_struct.cpp:143:8:143:17 | varStruct9 | var_size_struct.cpp:145:17:145:19 | arr | +| var_size_struct.cpp:181:8:181:18 | PseudoUnion | var_size_struct.cpp:183:7:183:10 | data | From 70e1724463a09e81f86039b0c3c429ee5251083f Mon Sep 17 00:00:00 2001 From: Benjamin Muskalla Date: Fri, 24 Sep 2021 12:41:12 +0200 Subject: [PATCH 575/741] Exclude methods with non-public parameter types --- java/ql/src/utils/Stubs.qll | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/java/ql/src/utils/Stubs.qll b/java/ql/src/utils/Stubs.qll index 47e4b5597f4..8101ca5e130 100644 --- a/java/ql/src/utils/Stubs.qll +++ b/java/ql/src/utils/Stubs.qll @@ -361,6 +361,12 @@ private predicate excludedMember(Member m) { m.(Method).getDeclaringType() instanceof EnumType and m.hasName(["values", "valueOf"]) and m.isStatic() + or + exists(Parameter p | + p = m.(Method).getAParameter() and + p.getType().fromSource() and + not p.getType().(RefType).isPublic() + ) } private string stubMember(Member m) { From 854f2a046afbfd8431f4195e69eace9818e9f113 Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Fri, 24 Sep 2021 13:11:18 +0200 Subject: [PATCH 576/741] Java: Add StringLiteral.isTextBlock(). --- java/ql/lib/semmle/code/java/Expr.qll | 3 +++ 1 file changed, 3 insertions(+) diff --git a/java/ql/lib/semmle/code/java/Expr.qll b/java/ql/lib/semmle/code/java/Expr.qll index d4b6ca5d425..3e5d54e6ac6 100755 --- a/java/ql/lib/semmle/code/java/Expr.qll +++ b/java/ql/lib/semmle/code/java/Expr.qll @@ -726,6 +726,9 @@ class StringLiteral extends Literal, @stringliteral { */ string getRepresentedString() { result = getValue() } + /** Holds if this string literal is a text block (`""" ... """`). */ + predicate isTextBlock() { getLiteral().matches("\"\"\"%") } + override string getAPrimaryQlClass() { result = "StringLiteral" } } From eba1b0bc150133c18218ebca776748cf1c59982a Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Fri, 24 Sep 2021 13:12:58 +0100 Subject: [PATCH 577/741] Respond to review comments. --- .../code/cpp/ir/implementation/aliased_ssa/Instruction.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/Instruction.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/Instruction.qll index 416841af102..2fb3edad602 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/Instruction.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/Instruction.qll @@ -1856,7 +1856,7 @@ class InitializeDynamicAllocationInstruction extends SideEffectInstruction { } /** - * Gets the operand of the allocation this instruction is initializing. + * Gets the operand that represents the address of the allocation this instruction is initializing. */ final AddressOperand getAllocationAddressOperand() { result = getAnOperand() } From 24214002a1b58439d215570fd15ba013e49c07c2 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Fri, 24 Sep 2021 13:13:09 +0100 Subject: [PATCH 578/741] C#/C++: Sync identical files. --- .../lib/semmle/code/cpp/ir/implementation/raw/Instruction.qll | 2 +- .../code/cpp/ir/implementation/unaliased_ssa/Instruction.qll | 2 +- .../ql/src/experimental/ir/implementation/raw/Instruction.qll | 2 +- .../ir/implementation/unaliased_ssa/Instruction.qll | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/Instruction.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/Instruction.qll index 416841af102..2fb3edad602 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/Instruction.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/Instruction.qll @@ -1856,7 +1856,7 @@ class InitializeDynamicAllocationInstruction extends SideEffectInstruction { } /** - * Gets the operand of the allocation this instruction is initializing. + * Gets the operand that represents the address of the allocation this instruction is initializing. */ final AddressOperand getAllocationAddressOperand() { result = getAnOperand() } diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/Instruction.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/Instruction.qll index 416841af102..2fb3edad602 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/Instruction.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/Instruction.qll @@ -1856,7 +1856,7 @@ class InitializeDynamicAllocationInstruction extends SideEffectInstruction { } /** - * Gets the operand of the allocation this instruction is initializing. + * Gets the operand that represents the address of the allocation this instruction is initializing. */ final AddressOperand getAllocationAddressOperand() { result = getAnOperand() } diff --git a/csharp/ql/src/experimental/ir/implementation/raw/Instruction.qll b/csharp/ql/src/experimental/ir/implementation/raw/Instruction.qll index 416841af102..2fb3edad602 100644 --- a/csharp/ql/src/experimental/ir/implementation/raw/Instruction.qll +++ b/csharp/ql/src/experimental/ir/implementation/raw/Instruction.qll @@ -1856,7 +1856,7 @@ class InitializeDynamicAllocationInstruction extends SideEffectInstruction { } /** - * Gets the operand of the allocation this instruction is initializing. + * Gets the operand that represents the address of the allocation this instruction is initializing. */ final AddressOperand getAllocationAddressOperand() { result = getAnOperand() } diff --git a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/Instruction.qll b/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/Instruction.qll index 416841af102..2fb3edad602 100644 --- a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/Instruction.qll +++ b/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/Instruction.qll @@ -1856,7 +1856,7 @@ class InitializeDynamicAllocationInstruction extends SideEffectInstruction { } /** - * Gets the operand of the allocation this instruction is initializing. + * Gets the operand that represents the address of the allocation this instruction is initializing. */ final AddressOperand getAllocationAddressOperand() { result = getAnOperand() } From c9640ffdbc833bb6f4b9c8e8067e339d9997ece5 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Fri, 24 Sep 2021 15:02:39 +0200 Subject: [PATCH 579/741] Python: Minor adjustments to XPath Injection --- .../Security/CWE-643-new/{Xpath.ql => XpathInjection.ql} | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) rename python/ql/src/experimental/Security/CWE-643-new/{Xpath.ql => XpathInjection.ql} (85%) diff --git a/python/ql/src/experimental/Security/CWE-643-new/Xpath.ql b/python/ql/src/experimental/Security/CWE-643-new/XpathInjection.ql similarity index 85% rename from python/ql/src/experimental/Security/CWE-643-new/Xpath.ql rename to python/ql/src/experimental/Security/CWE-643-new/XpathInjection.ql index 7299eaab1e1..0b03a8ceb36 100644 --- a/python/ql/src/experimental/Security/CWE-643-new/Xpath.ql +++ b/python/ql/src/experimental/Security/CWE-643-new/XpathInjection.ql @@ -18,6 +18,7 @@ private import semmle.python.ApiGraphs private import semmle.python.dataflow.new.RemoteFlowSources private import semmle.python.dataflow.new.BarrierGuards import XpathInjection::XpathInjection +import DataFlow::PathGraph class XpathInjectionConfiguration extends TaintTracking::Configuration { XpathInjectionConfiguration() { this = "PathNotNormalizedConfiguration" } @@ -25,12 +26,8 @@ class XpathInjectionConfiguration extends TaintTracking::Configuration { override predicate isSource(DataFlow::Node source) { source instanceof Source } override predicate isSink(DataFlow::Node sink) { sink instanceof Sink } - // override predicate isAdditionalTaintStep(DataFlow::Node node1, DataFlow::Node node2) { - // exists(AdditionalFlowStep af | af.isAdditionalTaintStep(node1, node2)) - // } } from XpathInjectionConfiguration config, DataFlow::PathNode source, DataFlow::PathNode sink where config.hasFlowPath(source, sink) -select sink, source, sink, "This Xpath query depends on $@.", source, - "a user-provided value" +select sink, source, sink, "This Xpath query depends on $@.", source, "a user-provided value" From aebde189f80fce0895d7da037d1415b4f9c940a4 Mon Sep 17 00:00:00 2001 From: Anders Peter Fugmann Date: Fri, 24 Sep 2021 15:09:23 +0200 Subject: [PATCH 580/741] C++: Apply peer review suggestion Co-authored-by: Jonas Jensen --- .../lib/semmle/code/cpp/rangeanalysis/SimpleRangeAnalysis.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpp/ql/lib/semmle/code/cpp/rangeanalysis/SimpleRangeAnalysis.qll b/cpp/ql/lib/semmle/code/cpp/rangeanalysis/SimpleRangeAnalysis.qll index 89ef90da544..12433cc7cd6 100644 --- a/cpp/ql/lib/semmle/code/cpp/rangeanalysis/SimpleRangeAnalysis.qll +++ b/cpp/ql/lib/semmle/code/cpp/rangeanalysis/SimpleRangeAnalysis.qll @@ -1550,7 +1550,7 @@ private float getGuardedUpperBound(VariableAccess guardedAccess) { exists(unique(BasicBlock b | b = def.(BasicBlock).getAPredecessor())) and guardedAccess = def.getAUse(v) and result = max(float ub | upperBoundFromGuard(guard, guardVa, ub, branch)) and - not exists(Expr e | e = guard.getAChild+() | convertedExprMightOverflow(e)) + not convertedExprMightOverflow(guard.getAChild+()) ) } From 913a679ef536ed1a873867d913458e1f3199596a Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Fri, 24 Sep 2021 15:10:41 +0200 Subject: [PATCH 581/741] Python: Replace old XPath injection query --- .../{xpath.qhelp => XpathInjection.qhelp} | 0 .../XpathInjection.ql | 2 +- .../XpathInjection.qll | 0 .../XpathInjectionCustomizations.qll | 0 .../experimental/Security/CWE-643/xpath.ql | 36 ------ .../python/security/injection/Xpath.qll | 115 ------------------ .../Security/CWE-643/xpath.expected | 97 +++++++++------ .../query-tests/Security/CWE-643/xpath.qlref | 2 +- .../Security/CWE-643/xpathSinks.expected | 12 -- .../Security/CWE-643/xpathSinks.ql | 7 -- 10 files changed, 63 insertions(+), 208 deletions(-) rename python/ql/src/experimental/Security/CWE-643/{xpath.qhelp => XpathInjection.qhelp} (100%) rename python/ql/src/experimental/Security/{CWE-643-new => CWE-643}/XpathInjection.ql (97%) rename python/ql/src/experimental/Security/{CWE-643-new => CWE-643}/XpathInjection.qll (100%) rename python/ql/src/experimental/Security/{CWE-643-new => CWE-643}/XpathInjectionCustomizations.qll (100%) delete mode 100644 python/ql/src/experimental/Security/CWE-643/xpath.ql delete mode 100644 python/ql/src/experimental/semmle/python/security/injection/Xpath.qll delete mode 100644 python/ql/test/experimental/query-tests/Security/CWE-643/xpathSinks.expected delete mode 100644 python/ql/test/experimental/query-tests/Security/CWE-643/xpathSinks.ql diff --git a/python/ql/src/experimental/Security/CWE-643/xpath.qhelp b/python/ql/src/experimental/Security/CWE-643/XpathInjection.qhelp similarity index 100% rename from python/ql/src/experimental/Security/CWE-643/xpath.qhelp rename to python/ql/src/experimental/Security/CWE-643/XpathInjection.qhelp diff --git a/python/ql/src/experimental/Security/CWE-643-new/XpathInjection.ql b/python/ql/src/experimental/Security/CWE-643/XpathInjection.ql similarity index 97% rename from python/ql/src/experimental/Security/CWE-643-new/XpathInjection.ql rename to python/ql/src/experimental/Security/CWE-643/XpathInjection.ql index 0b03a8ceb36..67b4741f610 100644 --- a/python/ql/src/experimental/Security/CWE-643-new/XpathInjection.ql +++ b/python/ql/src/experimental/Security/CWE-643/XpathInjection.ql @@ -5,7 +5,7 @@ * @kind path-problem * @problem.severity error * @precision high - * @id py/xpath-injection-new + * @id py/xpath-injection * @tags security * external/cwe/cwe-643 */ diff --git a/python/ql/src/experimental/Security/CWE-643-new/XpathInjection.qll b/python/ql/src/experimental/Security/CWE-643/XpathInjection.qll similarity index 100% rename from python/ql/src/experimental/Security/CWE-643-new/XpathInjection.qll rename to python/ql/src/experimental/Security/CWE-643/XpathInjection.qll diff --git a/python/ql/src/experimental/Security/CWE-643-new/XpathInjectionCustomizations.qll b/python/ql/src/experimental/Security/CWE-643/XpathInjectionCustomizations.qll similarity index 100% rename from python/ql/src/experimental/Security/CWE-643-new/XpathInjectionCustomizations.qll rename to python/ql/src/experimental/Security/CWE-643/XpathInjectionCustomizations.qll diff --git a/python/ql/src/experimental/Security/CWE-643/xpath.ql b/python/ql/src/experimental/Security/CWE-643/xpath.ql deleted file mode 100644 index 15720c408ee..00000000000 --- a/python/ql/src/experimental/Security/CWE-643/xpath.ql +++ /dev/null @@ -1,36 +0,0 @@ -/** - * @name XPath query built from user-controlled sources - * @description Building a XPath query from user-controlled sources is vulnerable to insertion of - * malicious Xpath code by the user. - * @kind path-problem - * @problem.severity error - * @precision high - * @id py/xpath-injection - * @tags security - * external/cwe/cwe-643 - */ - -import python -import semmle.python.security.Paths -import semmle.python.security.strings.Untrusted -/* Sources */ -import semmle.python.web.HttpRequest -/* Sinks */ -import experimental.semmle.python.security.injection.Xpath - -class XpathInjectionConfiguration extends TaintTracking::Configuration { - XpathInjectionConfiguration() { this = "Xpath injection configuration" } - - override predicate isSource(TaintTracking::Source source) { - source instanceof HttpRequestTaintSource - } - - override predicate isSink(TaintTracking::Sink sink) { - sink instanceof XpathInjection::XpathInjectionSink - } -} - -from XpathInjectionConfiguration config, TaintedPathSource src, TaintedPathSink sink -where config.hasFlowPath(src, sink) -select sink.getSink(), src, sink, "This Xpath query depends on $@.", src.getSource(), - "a user-provided value" diff --git a/python/ql/src/experimental/semmle/python/security/injection/Xpath.qll b/python/ql/src/experimental/semmle/python/security/injection/Xpath.qll deleted file mode 100644 index fa5c7647f1f..00000000000 --- a/python/ql/src/experimental/semmle/python/security/injection/Xpath.qll +++ /dev/null @@ -1,115 +0,0 @@ -/** - * Provides class and predicates to track external data that - * may represent malicious xpath query objects. - * - * This module is intended to be imported into a taint-tracking query - * to extend `TaintKind` and `TaintSink`. - */ - -import python -import semmle.python.dataflow.TaintTracking -import semmle.python.web.HttpRequest - -/** Models Xpath Injection related classes and functions */ -module XpathInjection { - /** Returns a class value which refers to `lxml.etree` */ - Value etree() { result = Value::named("lxml.etree") } - - /** Returns a class value which refers to `lxml.etree` */ - Value libxml2parseFile() { result = Value::named("libxml2.parseFile") } - - /** A generic taint sink that is vulnerable to Xpath injection. */ - abstract class XpathInjectionSink extends TaintSink { } - - /** - * A Sink representing an argument to the `etree.XPath` call. - * - * from lxml import etree - * root = etree.XML("") - * find_text = etree.XPath("`sink`") - */ - private class EtreeXpathArgument extends XpathInjectionSink { - override string toString() { result = "lxml.etree.XPath" } - - EtreeXpathArgument() { - exists(CallNode call | call.getFunction().(AttrNode).getObject("XPath").pointsTo(etree()) | - call.getArg(0) = this - ) - } - - override predicate sinks(TaintKind kind) { kind instanceof ExternalStringKind } - } - - /** - * A Sink representing an argument to the `etree.EtXpath` call. - * - * from lxml import etree - * root = etree.XML("") - * find_text = etree.EtXPath("`sink`") - */ - private class EtreeETXpathArgument extends XpathInjectionSink { - override string toString() { result = "lxml.etree.ETXpath" } - - EtreeETXpathArgument() { - exists(CallNode call | call.getFunction().(AttrNode).getObject("ETXPath").pointsTo(etree()) | - call.getArg(0) = this - ) - } - - override predicate sinks(TaintKind kind) { kind instanceof ExternalStringKind } - } - - /** - * A Sink representing an argument to the `xpath` call to a parsed xml document. - * - * from lxml import etree - * from io import StringIO - * f = StringIO('') - * tree = etree.parse(f) - * r = tree.xpath('`sink`') - */ - private class ParseXpathArgument extends XpathInjectionSink { - override string toString() { result = "lxml.etree.parse.xpath" } - - ParseXpathArgument() { - exists( - CallNode parseCall, CallNode xpathCall, ControlFlowNode obj, Variable var, AssignStmt assign - | - parseCall.getFunction().(AttrNode).getObject("parse").pointsTo(etree()) and - assign.getValue().(Call).getAFlowNode() = parseCall and - xpathCall.getFunction().(AttrNode).getObject("xpath") = obj and - var.getAUse() = obj and - assign.getATarget() = var.getAStore() and - xpathCall.getArg(0) = this - ) - } - - override predicate sinks(TaintKind kind) { kind instanceof ExternalStringKind } - } - - /** - * A Sink representing an argument to the `xpathEval` call to a parsed libxml2 document. - * - * import libxml2 - * tree = libxml2.parseFile("file.xml") - * r = tree.xpathEval('`sink`') - */ - private class ParseFileXpathEvalArgument extends XpathInjectionSink { - override string toString() { result = "libxml2.parseFile.xpathEval" } - - ParseFileXpathEvalArgument() { - exists( - CallNode parseCall, CallNode xpathCall, ControlFlowNode obj, Variable var, AssignStmt assign - | - parseCall.getFunction().(AttrNode).pointsTo(libxml2parseFile()) and - assign.getValue().(Call).getAFlowNode() = parseCall and - xpathCall.getFunction().(AttrNode).getObject("xpathEval") = obj and - var.getAUse() = obj and - assign.getATarget() = var.getAStore() and - xpathCall.getArg(0) = this - ) - } - - override predicate sinks(TaintKind kind) { kind instanceof ExternalStringKind } - } -} diff --git a/python/ql/test/experimental/query-tests/Security/CWE-643/xpath.expected b/python/ql/test/experimental/query-tests/Security/CWE-643/xpath.expected index 2f32859d6a9..1ebf4b3bc4f 100644 --- a/python/ql/test/experimental/query-tests/Security/CWE-643/xpath.expected +++ b/python/ql/test/experimental/query-tests/Security/CWE-643/xpath.expected @@ -1,38 +1,63 @@ edges -| xpathBad.py:9:7:9:13 | django.request.HttpRequest | xpathBad.py:10:13:10:19 | django.request.HttpRequest | -| xpathBad.py:9:7:9:13 | django.request.HttpRequest | xpathBad.py:10:13:10:19 | django.request.HttpRequest | -| xpathBad.py:10:13:10:19 | django.request.HttpRequest | xpathBad.py:10:13:10:23 | django.http.request.QueryDict | -| xpathBad.py:10:13:10:19 | django.request.HttpRequest | xpathBad.py:10:13:10:23 | django.http.request.QueryDict | -| xpathBad.py:10:13:10:23 | django.http.request.QueryDict | xpathBad.py:10:13:10:32 | externally controlled string | -| xpathBad.py:10:13:10:23 | django.http.request.QueryDict | xpathBad.py:10:13:10:32 | externally controlled string | -| xpathBad.py:10:13:10:32 | externally controlled string | xpathBad.py:13:39:13:43 | externally controlled string | -| xpathBad.py:10:13:10:32 | externally controlled string | xpathBad.py:13:39:13:43 | externally controlled string | -| xpathBad.py:13:39:13:43 | externally controlled string | xpathBad.py:13:20:13:43 | externally controlled string | -| xpathBad.py:13:39:13:43 | externally controlled string | xpathBad.py:13:20:13:43 | externally controlled string | -| xpathFlow.py:11:18:11:29 | dict of externally controlled string | xpathFlow.py:11:18:11:44 | externally controlled string | -| xpathFlow.py:11:18:11:29 | dict of externally controlled string | xpathFlow.py:11:18:11:44 | externally controlled string | -| xpathFlow.py:11:18:11:44 | externally controlled string | xpathFlow.py:14:20:14:29 | externally controlled string | -| xpathFlow.py:11:18:11:44 | externally controlled string | xpathFlow.py:14:20:14:29 | externally controlled string | -| xpathFlow.py:20:18:20:29 | dict of externally controlled string | xpathFlow.py:20:18:20:44 | externally controlled string | -| xpathFlow.py:20:18:20:29 | dict of externally controlled string | xpathFlow.py:20:18:20:44 | externally controlled string | -| xpathFlow.py:20:18:20:44 | externally controlled string | xpathFlow.py:23:29:23:38 | externally controlled string | -| xpathFlow.py:20:18:20:44 | externally controlled string | xpathFlow.py:23:29:23:38 | externally controlled string | -| xpathFlow.py:30:18:30:29 | dict of externally controlled string | xpathFlow.py:30:18:30:44 | externally controlled string | -| xpathFlow.py:30:18:30:29 | dict of externally controlled string | xpathFlow.py:30:18:30:44 | externally controlled string | -| xpathFlow.py:30:18:30:44 | externally controlled string | xpathFlow.py:32:29:32:38 | externally controlled string | -| xpathFlow.py:30:18:30:44 | externally controlled string | xpathFlow.py:32:29:32:38 | externally controlled string | -| xpathFlow.py:39:18:39:29 | dict of externally controlled string | xpathFlow.py:39:18:39:44 | externally controlled string | -| xpathFlow.py:39:18:39:29 | dict of externally controlled string | xpathFlow.py:39:18:39:44 | externally controlled string | -| xpathFlow.py:39:18:39:44 | externally controlled string | xpathFlow.py:41:31:41:40 | externally controlled string | -| xpathFlow.py:39:18:39:44 | externally controlled string | xpathFlow.py:41:31:41:40 | externally controlled string | -| xpathFlow.py:47:18:47:29 | dict of externally controlled string | xpathFlow.py:47:18:47:44 | externally controlled string | -| xpathFlow.py:47:18:47:29 | dict of externally controlled string | xpathFlow.py:47:18:47:44 | externally controlled string | -| xpathFlow.py:47:18:47:44 | externally controlled string | xpathFlow.py:49:29:49:38 | externally controlled string | -| xpathFlow.py:47:18:47:44 | externally controlled string | xpathFlow.py:49:29:49:38 | externally controlled string | +| xpathBad.py:9:7:9:13 | ControlFlowNode for request | xpathBad.py:10:13:10:23 | ControlFlowNode for Attribute | +| xpathBad.py:9:7:9:13 | ControlFlowNode for request | xpathBad.py:10:13:10:23 | ControlFlowNode for Attribute | +| xpathBad.py:10:13:10:23 | ControlFlowNode for Attribute | xpathBad.py:10:13:10:32 | ControlFlowNode for Subscript | +| xpathBad.py:10:13:10:23 | ControlFlowNode for Attribute | xpathBad.py:10:13:10:32 | ControlFlowNode for Subscript | +| xpathBad.py:10:13:10:32 | ControlFlowNode for Subscript | xpathBad.py:13:20:13:43 | ControlFlowNode for BinaryExpr | +| xpathBad.py:10:13:10:32 | ControlFlowNode for Subscript | xpathBad.py:13:20:13:43 | ControlFlowNode for BinaryExpr | +| xpathFlow.py:11:18:11:24 | ControlFlowNode for request | xpathFlow.py:11:18:11:29 | ControlFlowNode for Attribute | +| xpathFlow.py:11:18:11:24 | ControlFlowNode for request | xpathFlow.py:11:18:11:29 | ControlFlowNode for Attribute | +| xpathFlow.py:11:18:11:29 | ControlFlowNode for Attribute | xpathFlow.py:14:20:14:29 | ControlFlowNode for xpathQuery | +| xpathFlow.py:11:18:11:29 | ControlFlowNode for Attribute | xpathFlow.py:14:20:14:29 | ControlFlowNode for xpathQuery | +| xpathFlow.py:20:18:20:24 | ControlFlowNode for request | xpathFlow.py:20:18:20:29 | ControlFlowNode for Attribute | +| xpathFlow.py:20:18:20:24 | ControlFlowNode for request | xpathFlow.py:20:18:20:29 | ControlFlowNode for Attribute | +| xpathFlow.py:20:18:20:29 | ControlFlowNode for Attribute | xpathFlow.py:23:29:23:38 | ControlFlowNode for xpathQuery | +| xpathFlow.py:20:18:20:29 | ControlFlowNode for Attribute | xpathFlow.py:23:29:23:38 | ControlFlowNode for xpathQuery | +| xpathFlow.py:30:18:30:24 | ControlFlowNode for request | xpathFlow.py:30:18:30:29 | ControlFlowNode for Attribute | +| xpathFlow.py:30:18:30:24 | ControlFlowNode for request | xpathFlow.py:30:18:30:29 | ControlFlowNode for Attribute | +| xpathFlow.py:30:18:30:29 | ControlFlowNode for Attribute | xpathFlow.py:32:29:32:38 | ControlFlowNode for xpathQuery | +| xpathFlow.py:30:18:30:29 | ControlFlowNode for Attribute | xpathFlow.py:32:29:32:38 | ControlFlowNode for xpathQuery | +| xpathFlow.py:47:18:47:24 | ControlFlowNode for request | xpathFlow.py:47:18:47:29 | ControlFlowNode for Attribute | +| xpathFlow.py:47:18:47:24 | ControlFlowNode for request | xpathFlow.py:47:18:47:29 | ControlFlowNode for Attribute | +| xpathFlow.py:47:18:47:29 | ControlFlowNode for Attribute | xpathFlow.py:49:29:49:38 | ControlFlowNode for xpathQuery | +| xpathFlow.py:47:18:47:29 | ControlFlowNode for Attribute | xpathFlow.py:49:29:49:38 | ControlFlowNode for xpathQuery | +nodes +| xpathBad.py:9:7:9:13 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| xpathBad.py:9:7:9:13 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| xpathBad.py:10:13:10:23 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | +| xpathBad.py:10:13:10:23 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | +| xpathBad.py:10:13:10:32 | ControlFlowNode for Subscript | semmle.label | ControlFlowNode for Subscript | +| xpathBad.py:10:13:10:32 | ControlFlowNode for Subscript | semmle.label | ControlFlowNode for Subscript | +| xpathBad.py:13:20:13:43 | ControlFlowNode for BinaryExpr | semmle.label | ControlFlowNode for BinaryExpr | +| xpathBad.py:13:20:13:43 | ControlFlowNode for BinaryExpr | semmle.label | ControlFlowNode for BinaryExpr | +| xpathFlow.py:11:18:11:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| xpathFlow.py:11:18:11:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| xpathFlow.py:11:18:11:29 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | +| xpathFlow.py:11:18:11:29 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | +| xpathFlow.py:14:20:14:29 | ControlFlowNode for xpathQuery | semmle.label | ControlFlowNode for xpathQuery | +| xpathFlow.py:14:20:14:29 | ControlFlowNode for xpathQuery | semmle.label | ControlFlowNode for xpathQuery | +| xpathFlow.py:20:18:20:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| xpathFlow.py:20:18:20:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| xpathFlow.py:20:18:20:29 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | +| xpathFlow.py:20:18:20:29 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | +| xpathFlow.py:23:29:23:38 | ControlFlowNode for xpathQuery | semmle.label | ControlFlowNode for xpathQuery | +| xpathFlow.py:23:29:23:38 | ControlFlowNode for xpathQuery | semmle.label | ControlFlowNode for xpathQuery | +| xpathFlow.py:30:18:30:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| xpathFlow.py:30:18:30:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| xpathFlow.py:30:18:30:29 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | +| xpathFlow.py:30:18:30:29 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | +| xpathFlow.py:32:29:32:38 | ControlFlowNode for xpathQuery | semmle.label | ControlFlowNode for xpathQuery | +| xpathFlow.py:32:29:32:38 | ControlFlowNode for xpathQuery | semmle.label | ControlFlowNode for xpathQuery | +| xpathFlow.py:47:18:47:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| xpathFlow.py:47:18:47:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| xpathFlow.py:47:18:47:29 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | +| xpathFlow.py:47:18:47:29 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | +| xpathFlow.py:49:29:49:38 | ControlFlowNode for xpathQuery | semmle.label | ControlFlowNode for xpathQuery | +| xpathFlow.py:49:29:49:38 | ControlFlowNode for xpathQuery | semmle.label | ControlFlowNode for xpathQuery | +subpaths #select -| xpathBad.py:13:20:13:43 | BinaryExpr | xpathBad.py:9:7:9:13 | django.request.HttpRequest | xpathBad.py:13:20:13:43 | externally controlled string | This Xpath query depends on $@. | xpathBad.py:9:7:9:13 | request | a user-provided value | -| xpathFlow.py:14:20:14:29 | xpathQuery | xpathFlow.py:11:18:11:29 | dict of externally controlled string | xpathFlow.py:14:20:14:29 | externally controlled string | This Xpath query depends on $@. | xpathFlow.py:11:18:11:29 | Attribute | a user-provided value | -| xpathFlow.py:23:29:23:38 | xpathQuery | xpathFlow.py:20:18:20:29 | dict of externally controlled string | xpathFlow.py:23:29:23:38 | externally controlled string | This Xpath query depends on $@. | xpathFlow.py:20:18:20:29 | Attribute | a user-provided value | -| xpathFlow.py:32:29:32:38 | xpathQuery | xpathFlow.py:30:18:30:29 | dict of externally controlled string | xpathFlow.py:32:29:32:38 | externally controlled string | This Xpath query depends on $@. | xpathFlow.py:30:18:30:29 | Attribute | a user-provided value | -| xpathFlow.py:41:31:41:40 | xpathQuery | xpathFlow.py:39:18:39:29 | dict of externally controlled string | xpathFlow.py:41:31:41:40 | externally controlled string | This Xpath query depends on $@. | xpathFlow.py:39:18:39:29 | Attribute | a user-provided value | -| xpathFlow.py:49:29:49:38 | xpathQuery | xpathFlow.py:47:18:47:29 | dict of externally controlled string | xpathFlow.py:49:29:49:38 | externally controlled string | This Xpath query depends on $@. | xpathFlow.py:47:18:47:29 | Attribute | a user-provided value | +| xpathBad.py:13:20:13:43 | ControlFlowNode for BinaryExpr | xpathBad.py:9:7:9:13 | ControlFlowNode for request | xpathBad.py:13:20:13:43 | ControlFlowNode for BinaryExpr | This Xpath query depends on $@. | xpathBad.py:9:7:9:13 | ControlFlowNode for request | a user-provided value | +| xpathFlow.py:14:20:14:29 | ControlFlowNode for xpathQuery | xpathFlow.py:11:18:11:24 | ControlFlowNode for request | xpathFlow.py:14:20:14:29 | ControlFlowNode for xpathQuery | This Xpath query depends on $@. | xpathFlow.py:11:18:11:24 | ControlFlowNode for request | a user-provided value | +| xpathFlow.py:23:29:23:38 | ControlFlowNode for xpathQuery | xpathFlow.py:20:18:20:24 | ControlFlowNode for request | xpathFlow.py:23:29:23:38 | ControlFlowNode for xpathQuery | This Xpath query depends on $@. | xpathFlow.py:20:18:20:24 | ControlFlowNode for request | a user-provided value | +| xpathFlow.py:32:29:32:38 | ControlFlowNode for xpathQuery | xpathFlow.py:30:18:30:24 | ControlFlowNode for request | xpathFlow.py:32:29:32:38 | ControlFlowNode for xpathQuery | This Xpath query depends on $@. | xpathFlow.py:30:18:30:24 | ControlFlowNode for request | a user-provided value | +| xpathFlow.py:49:29:49:38 | ControlFlowNode for xpathQuery | xpathFlow.py:47:18:47:24 | ControlFlowNode for request | xpathFlow.py:49:29:49:38 | ControlFlowNode for xpathQuery | This Xpath query depends on $@. | xpathFlow.py:47:18:47:24 | ControlFlowNode for request | a user-provided value | diff --git a/python/ql/test/experimental/query-tests/Security/CWE-643/xpath.qlref b/python/ql/test/experimental/query-tests/Security/CWE-643/xpath.qlref index b0940dcc0a5..2c4f25a5b9a 100644 --- a/python/ql/test/experimental/query-tests/Security/CWE-643/xpath.qlref +++ b/python/ql/test/experimental/query-tests/Security/CWE-643/xpath.qlref @@ -1 +1 @@ -experimental/Security/CWE-643/xpath.ql +experimental/Security/CWE-643/XpathInjection.ql diff --git a/python/ql/test/experimental/query-tests/Security/CWE-643/xpathSinks.expected b/python/ql/test/experimental/query-tests/Security/CWE-643/xpathSinks.expected deleted file mode 100644 index c3bfec2fcaf..00000000000 --- a/python/ql/test/experimental/query-tests/Security/CWE-643/xpathSinks.expected +++ /dev/null @@ -1,12 +0,0 @@ -| xpath.py:8:20:8:29 | lxml.etree.parse.xpath | externally controlled string | -| xpath.py:13:29:13:38 | lxml.etree.XPath | externally controlled string | -| xpath.py:19:29:19:38 | lxml.etree.XPath | externally controlled string | -| xpath.py:25:38:25:46 | lxml.etree.ETXpath | externally controlled string | -| xpath.py:32:29:32:34 | libxml2.parseFile.xpathEval | externally controlled string | -| xpathBad.py:13:20:13:43 | lxml.etree.parse.xpath | externally controlled string | -| xpathFlow.py:14:20:14:29 | lxml.etree.parse.xpath | externally controlled string | -| xpathFlow.py:23:29:23:38 | lxml.etree.XPath | externally controlled string | -| xpathFlow.py:32:29:32:38 | lxml.etree.XPath | externally controlled string | -| xpathFlow.py:41:31:41:40 | lxml.etree.ETXpath | externally controlled string | -| xpathFlow.py:49:29:49:38 | libxml2.parseFile.xpathEval | externally controlled string | -| xpathGood.py:13:20:13:37 | lxml.etree.parse.xpath | externally controlled string | diff --git a/python/ql/test/experimental/query-tests/Security/CWE-643/xpathSinks.ql b/python/ql/test/experimental/query-tests/Security/CWE-643/xpathSinks.ql deleted file mode 100644 index a9e5aaae427..00000000000 --- a/python/ql/test/experimental/query-tests/Security/CWE-643/xpathSinks.ql +++ /dev/null @@ -1,7 +0,0 @@ -import python -import experimental.semmle.python.security.injection.Xpath -import semmle.python.security.strings.Untrusted - -from XpathInjection::XpathInjectionSink sink, TaintKind kind -where sink.sinks(kind) -select sink, kind From 26d2fbd21724cffac47e9ed028885680488087c3 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Fri, 24 Sep 2021 15:11:34 +0200 Subject: [PATCH 582/741] Python: Fix new XPath injection query Fixes the typo `ETXpath` => `ETXPath` --- .../Security/CWE-643/XpathInjectionCustomizations.qll | 6 +++--- .../query-tests/Security/CWE-643/xpath.expected | 11 +++++++++++ 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/python/ql/src/experimental/Security/CWE-643/XpathInjectionCustomizations.qll b/python/ql/src/experimental/Security/CWE-643/XpathInjectionCustomizations.qll index 58b6f8dad84..4a939253636 100644 --- a/python/ql/src/experimental/Security/CWE-643/XpathInjectionCustomizations.qll +++ b/python/ql/src/experimental/Security/CWE-643/XpathInjectionCustomizations.qll @@ -53,15 +53,15 @@ module XpathInjection { API::Node libxml2parseFile() { result = API::moduleImport("libxml2").getMember("parseFile") } /** - * A Sink representing an argument to `etree.XPath` or `etree.ETXpath` call. + * A Sink representing an argument to `etree.XPath` or `etree.ETXPath` call. * * from lxml import etree * root = etree.XML("") * find_text = etree.XPath("`sink`") - * find_text = etree.ETXpath("`sink`") + * find_text = etree.ETXPath("`sink`") */ private class EtreeXpathArgument extends Sink { - EtreeXpathArgument() { this = etree().getMember(["XPath", "ETXpath"]).getACall().getArg(0) } + EtreeXpathArgument() { this = etree().getMember(["XPath", "ETXPath"]).getACall().getArg(0) } } /** diff --git a/python/ql/test/experimental/query-tests/Security/CWE-643/xpath.expected b/python/ql/test/experimental/query-tests/Security/CWE-643/xpath.expected index 1ebf4b3bc4f..68147452822 100644 --- a/python/ql/test/experimental/query-tests/Security/CWE-643/xpath.expected +++ b/python/ql/test/experimental/query-tests/Security/CWE-643/xpath.expected @@ -17,6 +17,10 @@ edges | xpathFlow.py:30:18:30:24 | ControlFlowNode for request | xpathFlow.py:30:18:30:29 | ControlFlowNode for Attribute | | xpathFlow.py:30:18:30:29 | ControlFlowNode for Attribute | xpathFlow.py:32:29:32:38 | ControlFlowNode for xpathQuery | | xpathFlow.py:30:18:30:29 | ControlFlowNode for Attribute | xpathFlow.py:32:29:32:38 | ControlFlowNode for xpathQuery | +| xpathFlow.py:39:18:39:24 | ControlFlowNode for request | xpathFlow.py:39:18:39:29 | ControlFlowNode for Attribute | +| xpathFlow.py:39:18:39:24 | ControlFlowNode for request | xpathFlow.py:39:18:39:29 | ControlFlowNode for Attribute | +| xpathFlow.py:39:18:39:29 | ControlFlowNode for Attribute | xpathFlow.py:41:31:41:40 | ControlFlowNode for xpathQuery | +| xpathFlow.py:39:18:39:29 | ControlFlowNode for Attribute | xpathFlow.py:41:31:41:40 | ControlFlowNode for xpathQuery | | xpathFlow.py:47:18:47:24 | ControlFlowNode for request | xpathFlow.py:47:18:47:29 | ControlFlowNode for Attribute | | xpathFlow.py:47:18:47:24 | ControlFlowNode for request | xpathFlow.py:47:18:47:29 | ControlFlowNode for Attribute | | xpathFlow.py:47:18:47:29 | ControlFlowNode for Attribute | xpathFlow.py:49:29:49:38 | ControlFlowNode for xpathQuery | @@ -48,6 +52,12 @@ nodes | xpathFlow.py:30:18:30:29 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | | xpathFlow.py:32:29:32:38 | ControlFlowNode for xpathQuery | semmle.label | ControlFlowNode for xpathQuery | | xpathFlow.py:32:29:32:38 | ControlFlowNode for xpathQuery | semmle.label | ControlFlowNode for xpathQuery | +| xpathFlow.py:39:18:39:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| xpathFlow.py:39:18:39:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| xpathFlow.py:39:18:39:29 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | +| xpathFlow.py:39:18:39:29 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | +| xpathFlow.py:41:31:41:40 | ControlFlowNode for xpathQuery | semmle.label | ControlFlowNode for xpathQuery | +| xpathFlow.py:41:31:41:40 | ControlFlowNode for xpathQuery | semmle.label | ControlFlowNode for xpathQuery | | xpathFlow.py:47:18:47:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | xpathFlow.py:47:18:47:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | xpathFlow.py:47:18:47:29 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | @@ -60,4 +70,5 @@ subpaths | xpathFlow.py:14:20:14:29 | ControlFlowNode for xpathQuery | xpathFlow.py:11:18:11:24 | ControlFlowNode for request | xpathFlow.py:14:20:14:29 | ControlFlowNode for xpathQuery | This Xpath query depends on $@. | xpathFlow.py:11:18:11:24 | ControlFlowNode for request | a user-provided value | | xpathFlow.py:23:29:23:38 | ControlFlowNode for xpathQuery | xpathFlow.py:20:18:20:24 | ControlFlowNode for request | xpathFlow.py:23:29:23:38 | ControlFlowNode for xpathQuery | This Xpath query depends on $@. | xpathFlow.py:20:18:20:24 | ControlFlowNode for request | a user-provided value | | xpathFlow.py:32:29:32:38 | ControlFlowNode for xpathQuery | xpathFlow.py:30:18:30:24 | ControlFlowNode for request | xpathFlow.py:32:29:32:38 | ControlFlowNode for xpathQuery | This Xpath query depends on $@. | xpathFlow.py:30:18:30:24 | ControlFlowNode for request | a user-provided value | +| xpathFlow.py:41:31:41:40 | ControlFlowNode for xpathQuery | xpathFlow.py:39:18:39:24 | ControlFlowNode for request | xpathFlow.py:41:31:41:40 | ControlFlowNode for xpathQuery | This Xpath query depends on $@. | xpathFlow.py:39:18:39:24 | ControlFlowNode for request | a user-provided value | | xpathFlow.py:49:29:49:38 | ControlFlowNode for xpathQuery | xpathFlow.py:47:18:47:24 | ControlFlowNode for request | xpathFlow.py:49:29:49:38 | ControlFlowNode for xpathQuery | This Xpath query depends on $@. | xpathFlow.py:47:18:47:24 | ControlFlowNode for request | a user-provided value | From 49f8f463541d22b9fe541e384218a18ff7243239 Mon Sep 17 00:00:00 2001 From: alexet Date: Fri, 17 Sep 2021 18:15:47 +0100 Subject: [PATCH 583/741] Java: Cache params string computation. --- java/ql/lib/semmle/code/java/dataflow/ExternalFlow.qll | 1 + 1 file changed, 1 insertion(+) diff --git a/java/ql/lib/semmle/code/java/dataflow/ExternalFlow.qll b/java/ql/lib/semmle/code/java/dataflow/ExternalFlow.qll index bce80a3ee08..9c46291c58f 100644 --- a/java/ql/lib/semmle/code/java/dataflow/ExternalFlow.qll +++ b/java/ql/lib/semmle/code/java/dataflow/ExternalFlow.qll @@ -638,6 +638,7 @@ private string paramsStringPart(Callable c, int i) { * Returns the empty string if the callable has no parameters. * Parameter types are represented by their type erasure. */ +cached string paramsString(Callable c) { result = concat(int i | | paramsStringPart(c, i) order by i) } private Element interpretElement0( From 23e4ad1abbf5c0c97ef45c47d02ce1b090351650 Mon Sep 17 00:00:00 2001 From: james Date: Fri, 24 Sep 2021 14:46:14 +0100 Subject: [PATCH 584/741] update one more link --- docs/codeql/support/ql-training.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/codeql/support/ql-training.rst b/docs/codeql/support/ql-training.rst index bb4dc9a3f2e..7335dcc390d 100644 --- a/docs/codeql/support/ql-training.rst +++ b/docs/codeql/support/ql-training.rst @@ -25,7 +25,7 @@ When you have selected a presentation, use |arrow-r| and |arrow-l| to navigate b Press **p** to view the additional notes on slides that have an information icon |info| in the top right corner, and press **f** to enter full-screen mode. The presentations contain a number of query examples. -We recommend that you download `CodeQL for Visual Studio Code `__ and add the example database for each presentation so that you can find the bugs mentioned in the slides. +We recommend that you download `CodeQL for Visual Studio Code `__ and add the example database for each presentation so that you can find the bugs mentioned in the slides. .. pull-quote:: From 7d3a219f63582fb74bdf8ee282e00f2771f0bc2d Mon Sep 17 00:00:00 2001 From: Arthur Baars Date: Fri, 24 Sep 2021 15:47:09 +0200 Subject: [PATCH 585/741] Fix typo in language spec Thanks to https://github.com/github/codeql/issues/6750 --- docs/codeql/ql-language-reference/ql-language-specification.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/codeql/ql-language-reference/ql-language-specification.rst b/docs/codeql/ql-language-reference/ql-language-specification.rst index 38a55edc8fa..d9dcd5d53a5 100644 --- a/docs/codeql/ql-language-reference/ql-language-specification.rst +++ b/docs/codeql/ql-language-reference/ql-language-specification.rst @@ -2062,7 +2062,7 @@ The complete grammar for QL is as follows: exprs ::= expr ("," expr)* - alias := qldoc? annotations "predicate" literalId "=" predicateRef "/" int ";" + alias ::= qldoc? annotations "predicate" literalId "=" predicateRef "/" int ";" | qldoc? annotations "class" classname "=" type ";" | qldoc? annotations "module" modulename "=" moduleId ";" From e664711f474782869aefc76b675f950dd754802b Mon Sep 17 00:00:00 2001 From: james Date: Fri, 24 Sep 2021 14:56:48 +0100 Subject: [PATCH 586/741] make links to slide decks relative --- docs/codeql/support/ql-training.rst | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/docs/codeql/support/ql-training.rst b/docs/codeql/support/ql-training.rst index 7335dcc390d..1c2123a1f51 100644 --- a/docs/codeql/support/ql-training.rst +++ b/docs/codeql/support/ql-training.rst @@ -39,23 +39,23 @@ We recommend that you download `CodeQL for Visual Studio Code `__–an introduction to variant analysis and CodeQL for C/C++ programmers. -- `Example: Bad overflow guard `__–an example of iterative query development to find bad overflow guards in a C++ project. -- `Program representation: CodeQL for C/C++ `__–information on how CodeQL analysis represents C/C++ programs. -- `Introduction to local data flow `__–an introduction to analyzing local data flow in C/C++ using CodeQL, including an example demonstrating how to develop a query to find a real CVE. -- `Exercise: snprintf overflow `__–an example demonstrating how to develop a data flow query. -- `Introduction to global data flow `__–an introduction to analyzing global data flow in C/C++ using CodeQL. -- `Analyzing control flow: CodeQL for C/C++ `__–an introduction to analyzing control flow in C/C++ using CodeQL. +- `Introduction to variant analysis: CodeQL for C/C++ `__–an introduction to variant analysis and CodeQL for C/C++ programmers. +- `Example: Bad overflow guard `__–an example of iterative query development to find bad overflow guards in a C++ project. +- `Program representation: CodeQL for C/C++ `__–information on how CodeQL analysis represents C/C++ programs. +- `Introduction to local data flow `__–an introduction to analyzing local data flow in C/C++ using CodeQL, including an example demonstrating how to develop a query to find a real CVE. +- `Exercise: snprintf overflow `__–an example demonstrating how to develop a data flow query. +- `Introduction to global data flow `__–an introduction to analyzing global data flow in C/C++ using CodeQL. +- `Analyzing control flow: CodeQL for C/C++ `__–an introduction to analyzing control flow in C/C++ using CodeQL. CodeQL and variant analysis for Java ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -- `Introduction to variant analysis: CodeQL for Java `__–an introduction to variant analysis and CodeQL for Java programmers. -- `Example: Query injection `__–an example of iterative query development to find unsanitized SPARQL injections in a Java project. -- `Program representation: CodeQL for Java `__–information on how CodeQL analysis represents Java programs. -- `Introduction to local data flow `__–an introduction to analyzing local data flow in Java using CodeQL, including an example demonstrating how to develop a query to find a real CVE. -- `Exercise: Apache Struts `__–an example demonstrating how to develop a data flow query. -- `Introduction to global data flow `__–an introduction to analyzing global data flow in Java using CodeQL. +- `Introduction to variant analysis: CodeQL for Java `__–an introduction to variant analysis and CodeQL for Java programmers. +- `Example: Query injection `__–an example of iterative query development to find unsanitized SPARQL injections in a Java project. +- `Program representation: CodeQL for Java `__–information on how CodeQL analysis represents Java programs. +- `Introduction to local data flow `__–an introduction to analyzing local data flow in Java using CodeQL, including an example demonstrating how to develop a query to find a real CVE. +- `Exercise: Apache Struts `__–an example demonstrating how to develop a data flow query. +- `Introduction to global data flow `__–an introduction to analyzing global data flow in Java using CodeQL. Further reading ~~~~~~~~~~~~~~~ From d39df18544c3a7a4a6f67d4d8f97691fcb7e62b3 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Fri, 24 Sep 2021 16:11:27 +0200 Subject: [PATCH 587/741] Python: Minor test cleanup --- .../Security/CWE-643/{xpath.expected => XpathInjection.expected} | 0 .../Security/CWE-643/{xpath.qlref => XpathInjection.qlref} | 0 python/ql/test/experimental/query-tests/Security/CWE-643/options | 1 - 3 files changed, 1 deletion(-) rename python/ql/test/experimental/query-tests/Security/CWE-643/{xpath.expected => XpathInjection.expected} (100%) rename python/ql/test/experimental/query-tests/Security/CWE-643/{xpath.qlref => XpathInjection.qlref} (100%) delete mode 100644 python/ql/test/experimental/query-tests/Security/CWE-643/options diff --git a/python/ql/test/experimental/query-tests/Security/CWE-643/xpath.expected b/python/ql/test/experimental/query-tests/Security/CWE-643/XpathInjection.expected similarity index 100% rename from python/ql/test/experimental/query-tests/Security/CWE-643/xpath.expected rename to python/ql/test/experimental/query-tests/Security/CWE-643/XpathInjection.expected diff --git a/python/ql/test/experimental/query-tests/Security/CWE-643/xpath.qlref b/python/ql/test/experimental/query-tests/Security/CWE-643/XpathInjection.qlref similarity index 100% rename from python/ql/test/experimental/query-tests/Security/CWE-643/xpath.qlref rename to python/ql/test/experimental/query-tests/Security/CWE-643/XpathInjection.qlref diff --git a/python/ql/test/experimental/query-tests/Security/CWE-643/options b/python/ql/test/experimental/query-tests/Security/CWE-643/options deleted file mode 100644 index 2f457593f2e..00000000000 --- a/python/ql/test/experimental/query-tests/Security/CWE-643/options +++ /dev/null @@ -1 +0,0 @@ -semmle-extractor-options: --max-import-depth=3 -p ../../../../query-tests/Security/lib/ From 9f59bc8f7bccbb298bd84a0a5682580c6e3d788c Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Fri, 24 Sep 2021 14:35:10 +0100 Subject: [PATCH 588/741] C++: Naive translation to use RemoteFlow*Function. --- .../CWE/CWE-311/CleartextTransmission.ql | 34 ++++++++++++------- 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/cpp/ql/src/Security/CWE/CWE-311/CleartextTransmission.ql b/cpp/ql/src/Security/CWE/CWE-311/CleartextTransmission.ql index c130c9a49b6..70d0b472d66 100644 --- a/cpp/ql/src/Security/CWE/CWE-311/CleartextTransmission.ql +++ b/cpp/ql/src/Security/CWE/CWE-311/CleartextTransmission.ql @@ -14,6 +14,7 @@ import cpp import semmle.code.cpp.security.SensitiveExprs import semmle.code.cpp.dataflow.TaintTracking +import semmle.code.cpp.models.interfaces.FlowSource import DataFlow::PathGraph /** @@ -38,30 +39,38 @@ abstract class NetworkSendRecv extends FunctionCall { * note: functions such as `write` may be writing to a network source or a file. We could attempt to determine which, and sort results into `cpp/cleartext-transmission` and perhaps `cpp/cleartext-storage-file`. In practice it usually isn't very important which query reports a result as long as its reported exactly once. */ class NetworkSend extends NetworkSendRecv { - NetworkSend() { - this.getTarget() - .hasGlobalName(["send", "sendto", "sendmsg", "write", "writev", "pwritev", "pwritev2"]) - } + RemoteFlowSinkFunction target; + + NetworkSend() { target = this.getTarget() } override Expr getSocketExpr() { result = this.getArgument(0) } - override Expr getDataExpr() { result = this.getArgument(1) } + override Expr getDataExpr() { + exists(FunctionInput input, int arg | + target.hasRemoteFlowSink(input, _) and + input.isParameterDeref(arg) and + result = this.getArgument(arg) + ) + } } /** * A function call that receives data over a network. */ class NetworkRecv extends NetworkSendRecv { - NetworkRecv() { - this.getTarget() - .hasGlobalName([ - "recv", "recvfrom", "recvmsg", "read", "pread", "readv", "preadv", "preadv2" - ]) - } + RemoteFlowSourceFunction target; + + NetworkRecv() { target = this.getTarget() } override Expr getSocketExpr() { result = this.getArgument(0) } - override Expr getDataExpr() { result = this.getArgument(1) } + override Expr getDataExpr() { + exists(FunctionOutput output, int arg | + target.hasRemoteFlowSource(output, _) and + output.isParameterDeref(arg) and + result = this.getArgument(arg) + ) + } } /** @@ -76,7 +85,6 @@ class SensitiveSendRecvConfiguration extends TaintTracking::Configuration { override predicate isSink(DataFlow::Node sink) { exists(NetworkSendRecv transmission | sink.asExpr() = transmission.getDataExpr() and - // a zero file descriptor is standard input, which is not interesting for this query. not exists(Zero zero | DataFlow::localFlow(DataFlow::exprNode(zero), From 6901d9d9c254c9c825270f6052bd9922db751696 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Fri, 24 Sep 2021 14:55:28 +0100 Subject: [PATCH 589/741] C++: Add and use getRemoteSocket predicates. --- .../code/cpp/models/implementations/Recv.qll | 4 ++++ .../code/cpp/models/implementations/Send.qll | 4 ++++ .../code/cpp/models/interfaces/FlowSource.qll | 12 ++++++++++++ .../CWE/CWE-311/CleartextTransmission.ql | 18 +++++++++++++++--- 4 files changed, 35 insertions(+), 3 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/models/implementations/Recv.qll b/cpp/ql/lib/semmle/code/cpp/models/implementations/Recv.qll index 691ba528f42..de4d470ce1f 100644 --- a/cpp/ql/lib/semmle/code/cpp/models/implementations/Recv.qll +++ b/cpp/ql/lib/semmle/code/cpp/models/implementations/Recv.qll @@ -85,4 +85,8 @@ private class Recv extends AliasFunction, ArrayFunction, SideEffectFunction, ) and description = "Buffer read by " + this.getName() } + + override predicate hasSocketInput(FunctionInput input) { + input.isParameter(0) + } } diff --git a/cpp/ql/lib/semmle/code/cpp/models/implementations/Send.qll b/cpp/ql/lib/semmle/code/cpp/models/implementations/Send.qll index 6086bc7748f..e747d8182b7 100644 --- a/cpp/ql/lib/semmle/code/cpp/models/implementations/Send.qll +++ b/cpp/ql/lib/semmle/code/cpp/models/implementations/Send.qll @@ -60,4 +60,8 @@ private class Send extends AliasFunction, ArrayFunction, SideEffectFunction, Rem override predicate hasRemoteFlowSink(FunctionInput input, string description) { input.isParameterDeref(1) and description = "Buffer sent by " + this.getName() } + + override predicate hasSocketInput(FunctionInput input) { + input.isParameter(0) + } } diff --git a/cpp/ql/lib/semmle/code/cpp/models/interfaces/FlowSource.qll b/cpp/ql/lib/semmle/code/cpp/models/interfaces/FlowSource.qll index 8c80377c8ec..d454257ea86 100644 --- a/cpp/ql/lib/semmle/code/cpp/models/interfaces/FlowSource.qll +++ b/cpp/ql/lib/semmle/code/cpp/models/interfaces/FlowSource.qll @@ -18,6 +18,12 @@ abstract class RemoteFlowSourceFunction extends Function { * Holds if remote data described by `description` flows from `output` of a call to this function. */ abstract predicate hasRemoteFlowSource(FunctionOutput output, string description); + + /** + * Holds if remote data from this source comes from a socket described by + * `input`. There is no result if a socket is not specified. + */ + predicate hasSocketInput(FunctionInput input) { none() } } /** @@ -51,4 +57,10 @@ abstract class RemoteFlowSinkFunction extends Function { * send over a network connection. */ abstract predicate hasRemoteFlowSink(FunctionInput input, string description); + + /** + * Holds if data put into this sink is transmitted through a socket described + * by `input`. There is no result if a socket is not specified. + */ + predicate hasSocketInput(FunctionInput input) { none() } } diff --git a/cpp/ql/src/Security/CWE/CWE-311/CleartextTransmission.ql b/cpp/ql/src/Security/CWE/CWE-311/CleartextTransmission.ql index 70d0b472d66..70b00aecd6d 100644 --- a/cpp/ql/src/Security/CWE/CWE-311/CleartextTransmission.ql +++ b/cpp/ql/src/Security/CWE/CWE-311/CleartextTransmission.ql @@ -43,7 +43,13 @@ class NetworkSend extends NetworkSendRecv { NetworkSend() { target = this.getTarget() } - override Expr getSocketExpr() { result = this.getArgument(0) } + override Expr getSocketExpr() { + exists(FunctionInput input, int arg | + target.hasSocketInput(input) and + input.isParameter(arg) and + result = this.getArgument(arg) + ) + } override Expr getDataExpr() { exists(FunctionInput input, int arg | @@ -62,7 +68,13 @@ class NetworkRecv extends NetworkSendRecv { NetworkRecv() { target = this.getTarget() } - override Expr getSocketExpr() { result = this.getArgument(0) } + override Expr getSocketExpr() { + exists(FunctionInput input, int arg | + target.hasSocketInput(input) and + input.isParameter(arg) and + result = this.getArgument(arg) + ) + } override Expr getDataExpr() { exists(FunctionOutput output, int arg | @@ -85,7 +97,7 @@ class SensitiveSendRecvConfiguration extends TaintTracking::Configuration { override predicate isSink(DataFlow::Node sink) { exists(NetworkSendRecv transmission | sink.asExpr() = transmission.getDataExpr() and - // a zero file descriptor is standard input, which is not interesting for this query. + // a zero socket descriptor is standard input, which is not interesting for this query. not exists(Zero zero | DataFlow::localFlow(DataFlow::exprNode(zero), DataFlow::exprNode(transmission.getSocketExpr())) From 1adc5c2a5b510d67176568539a16d95a92354915 Mon Sep 17 00:00:00 2001 From: james Date: Fri, 24 Sep 2021 17:00:59 +0100 Subject: [PATCH 590/741] update links correctly --- docs/codeql/support/ql-training.rst | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/docs/codeql/support/ql-training.rst b/docs/codeql/support/ql-training.rst index 1c2123a1f51..172a6ea38e9 100644 --- a/docs/codeql/support/ql-training.rst +++ b/docs/codeql/support/ql-training.rst @@ -39,23 +39,23 @@ We recommend that you download `CodeQL for Visual Studio Code `__–an introduction to variant analysis and CodeQL for C/C++ programmers. -- `Example: Bad overflow guard `__–an example of iterative query development to find bad overflow guards in a C++ project. -- `Program representation: CodeQL for C/C++ `__–information on how CodeQL analysis represents C/C++ programs. -- `Introduction to local data flow `__–an introduction to analyzing local data flow in C/C++ using CodeQL, including an example demonstrating how to develop a query to find a real CVE. -- `Exercise: snprintf overflow `__–an example demonstrating how to develop a data flow query. -- `Introduction to global data flow `__–an introduction to analyzing global data flow in C/C++ using CodeQL. -- `Analyzing control flow: CodeQL for C/C++ `__–an introduction to analyzing control flow in C/C++ using CodeQL. +- `Introduction to variant analysis: CodeQL for C/C++ <../../QL/ql-training/cpp/intro-ql-cpp.html>`__–an introduction to variant analysis and CodeQL for C/C++ programmers. +- `Example: Bad overflow guard <../../QL/ql-training/cpp/bad-overflow-guard.html>`__–an example of iterative query development to find bad overflow guards in a C++ project. +- `Program representation: CodeQL for C/C++ <../../QL/ql-training/cpp/program-representation-cpp.html>`__–information on how CodeQL analysis represents C/C++ programs. +- `Introduction to local data flow <../../QL/ql-training/cpp/data-flow-cpp.html>`__–an introduction to analyzing local data flow in C/C++ using CodeQL, including an example demonstrating how to develop a query to find a real CVE. +- `Exercise: snprintf overflow <../../QL/ql-training/cpp/snprintf.html>`__–an example demonstrating how to develop a data flow query. +- `Introduction to global data flow <../../QL/ql-training/cpp/global-data-flow-cpp.html>`__–an introduction to analyzing global data flow in C/C++ using CodeQL. +- `Analyzing control flow: CodeQL for C/C++ <../../QL/ql-training/cpp/control-flow-cpp.html>`__–an introduction to analyzing control flow in C/C++ using CodeQL. CodeQL and variant analysis for Java ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -- `Introduction to variant analysis: CodeQL for Java `__–an introduction to variant analysis and CodeQL for Java programmers. -- `Example: Query injection `__–an example of iterative query development to find unsanitized SPARQL injections in a Java project. -- `Program representation: CodeQL for Java `__–information on how CodeQL analysis represents Java programs. -- `Introduction to local data flow `__–an introduction to analyzing local data flow in Java using CodeQL, including an example demonstrating how to develop a query to find a real CVE. -- `Exercise: Apache Struts `__–an example demonstrating how to develop a data flow query. -- `Introduction to global data flow `__–an introduction to analyzing global data flow in Java using CodeQL. +- `Introduction to variant analysis: CodeQL for Java <../../QL/ql-training/java/intro-ql-java.html>`__–an introduction to variant analysis and CodeQL for Java programmers. +- `Example: Query injection <../../QL/ql-training/java/query-injection-java.html>`__–an example of iterative query development to find unsanitized SPARQL injections in a Java project. +- `Program representation: CodeQL for Java <../../QL/ql-training/java/program-representation-java.html>`__–information on how CodeQL analysis represents Java programs. +- `Introduction to local data flow <../../QL/ql-training/java/data-flow-java.html>`__–an introduction to analyzing local data flow in Java using CodeQL, including an example demonstrating how to develop a query to find a real CVE. +- `Exercise: Apache Struts <../../QL/ql-training/java/apache-struts-java.html>`__–an example demonstrating how to develop a data flow query. +- `Introduction to global data flow <../../QL/ql-training/java/global-data-flow-java.html>`__–an introduction to analyzing global data flow in Java using CodeQL. Further reading ~~~~~~~~~~~~~~~ From 91a8b9fdd9386589df020f80df02c35d8cc05506 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Fri, 24 Sep 2021 17:54:19 +0100 Subject: [PATCH 591/741] C++: Add suggested test (and a good variant). --- .../ImproperNullTermination.expected | 1 + .../ImproperNullTermination/test.cpp | 33 +++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/cpp/ql/test/query-tests/Likely Bugs/Memory Management/ImproperNullTermination/ImproperNullTermination.expected b/cpp/ql/test/query-tests/Likely Bugs/Memory Management/ImproperNullTermination/ImproperNullTermination.expected index b8f5c71e8e2..49378b7237f 100644 --- a/cpp/ql/test/query-tests/Likely Bugs/Memory Management/ImproperNullTermination/ImproperNullTermination.expected +++ b/cpp/ql/test/query-tests/Likely Bugs/Memory Management/ImproperNullTermination/ImproperNullTermination.expected @@ -23,3 +23,4 @@ | test.cpp:365:19:365:25 | buffer2 | Variable $@ may not be null terminated. | test.cpp:363:8:363:14 | buffer2 | buffer2 | | test.cpp:392:17:392:22 | buffer | Variable $@ may not be null terminated. | test.cpp:390:8:390:13 | buffer | buffer | | test.cpp:398:18:398:23 | buffer | Variable $@ may not be null terminated. | test.cpp:396:8:396:13 | buffer | buffer | +| test.cpp:444:10:444:15 | buffer | Variable $@ may not be null terminated. | test.cpp:442:8:442:13 | buffer | buffer | diff --git a/cpp/ql/test/query-tests/Likely Bugs/Memory Management/ImproperNullTermination/test.cpp b/cpp/ql/test/query-tests/Likely Bugs/Memory Management/ImproperNullTermination/test.cpp index 7fa4ef60093..deb2e89f6ca 100644 --- a/cpp/ql/test/query-tests/Likely Bugs/Memory Management/ImproperNullTermination/test.cpp +++ b/cpp/ql/test/query-tests/Likely Bugs/Memory Management/ImproperNullTermination/test.cpp @@ -433,3 +433,36 @@ void test_read_fread(int read_src, FILE *s) strlen(buffer); // GOOD } } + +int printf(const char *format, ...); + +void test_printf(char *str) +{ + { + char buffer[1024]; + + printf(buffer, ""); // BAD + } + + { + char buffer[1024]; + + printf("%s", buffer); // BAD [NOT DETECTED] + } + + { + size_t len = strlen(str); + char *copied_str = (char *)malloc(len); + + memcpy(copied_str, str, len); + printf("%s", copied_str); // BAD [NOT DETECTED] + } + + { + size_t len = strlen(str); + char *copied_str = (char *)malloc(len + 1); + + memcpy(copied_str, str, len + 1); + printf("%s", copied_str); // GOOD + } +} From 7e7dfe2cc40b2c73985ae6d94903a361abe4b575 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Fri, 24 Sep 2021 19:21:22 +0100 Subject: [PATCH 592/741] C++: Understand format arguments. --- cpp/ql/lib/semmle/code/cpp/commons/NullTermination.qll | 9 +++++++++ .../ImproperNullTermination.expected | 1 + .../Memory Management/ImproperNullTermination/test.cpp | 2 +- 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/cpp/ql/lib/semmle/code/cpp/commons/NullTermination.qll b/cpp/ql/lib/semmle/code/cpp/commons/NullTermination.qll index 6cb366d46ee..ee072fb0ed3 100644 --- a/cpp/ql/lib/semmle/code/cpp/commons/NullTermination.qll +++ b/cpp/ql/lib/semmle/code/cpp/commons/NullTermination.qll @@ -93,6 +93,15 @@ predicate variableMustBeNullTerminated(VariableAccess va) { fc.getArgument(i) = va ) or + // String argument to a formatting function (such as `printf`) + exists(int n, FormatLiteral fl | + fc.(FormattingFunctionCall).getConversionArgument(n) = va and + fl = fc.(FormattingFunctionCall).getFormat() and + fl.getConversionType(n) instanceof PointerType and // `%s`, `%ws` etc + not fl.getConversionType(n) instanceof VoidPointerType and // exclude: `%p` + not fl.hasPrecision(n) // exclude: `%.*s` + ) + or // Call to a wrapper function that requires null termination // (not itself adding a null terminator) exists(Function wrapper, int i, Parameter p, VariableAccess use | diff --git a/cpp/ql/test/query-tests/Likely Bugs/Memory Management/ImproperNullTermination/ImproperNullTermination.expected b/cpp/ql/test/query-tests/Likely Bugs/Memory Management/ImproperNullTermination/ImproperNullTermination.expected index 49378b7237f..c83205ef49f 100644 --- a/cpp/ql/test/query-tests/Likely Bugs/Memory Management/ImproperNullTermination/ImproperNullTermination.expected +++ b/cpp/ql/test/query-tests/Likely Bugs/Memory Management/ImproperNullTermination/ImproperNullTermination.expected @@ -24,3 +24,4 @@ | test.cpp:392:17:392:22 | buffer | Variable $@ may not be null terminated. | test.cpp:390:8:390:13 | buffer | buffer | | test.cpp:398:18:398:23 | buffer | Variable $@ may not be null terminated. | test.cpp:396:8:396:13 | buffer | buffer | | test.cpp:444:10:444:15 | buffer | Variable $@ may not be null terminated. | test.cpp:442:8:442:13 | buffer | buffer | +| test.cpp:450:16:450:21 | buffer | Variable $@ may not be null terminated. | test.cpp:448:8:448:13 | buffer | buffer | diff --git a/cpp/ql/test/query-tests/Likely Bugs/Memory Management/ImproperNullTermination/test.cpp b/cpp/ql/test/query-tests/Likely Bugs/Memory Management/ImproperNullTermination/test.cpp index deb2e89f6ca..45410c15ebf 100644 --- a/cpp/ql/test/query-tests/Likely Bugs/Memory Management/ImproperNullTermination/test.cpp +++ b/cpp/ql/test/query-tests/Likely Bugs/Memory Management/ImproperNullTermination/test.cpp @@ -447,7 +447,7 @@ void test_printf(char *str) { char buffer[1024]; - printf("%s", buffer); // BAD [NOT DETECTED] + printf("%s", buffer); // BAD } { From e0921ac983ab86efde750c972cc40033a0c1fea6 Mon Sep 17 00:00:00 2001 From: Anders Fugmann Date: Mon, 27 Sep 2021 09:06:36 +0200 Subject: [PATCH 593/741] C++: Increase precision of cpp/static-buffer-overflow to high --- cpp/change-notes/2021-09-27-overflow-static.md | 3 +++ cpp/ql/src/Critical/OverflowStatic.ql | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) create mode 100644 cpp/change-notes/2021-09-27-overflow-static.md diff --git a/cpp/change-notes/2021-09-27-overflow-static.md b/cpp/change-notes/2021-09-27-overflow-static.md new file mode 100644 index 00000000000..4fc6ee383c2 --- /dev/null +++ b/cpp/change-notes/2021-09-27-overflow-static.md @@ -0,0 +1,3 @@ +lgtm,codescanning +* Increase presition to high for "Static buffer overflow" query + (cpp/static-buffer-overflow). diff --git a/cpp/ql/src/Critical/OverflowStatic.ql b/cpp/ql/src/Critical/OverflowStatic.ql index 059b7fb1029..8b09931cd4a 100644 --- a/cpp/ql/src/Critical/OverflowStatic.ql +++ b/cpp/ql/src/Critical/OverflowStatic.ql @@ -5,7 +5,7 @@ * @kind problem * @problem.severity warning * @security-severity 9.3 - * @precision medium + * @precision high * @id cpp/static-buffer-overflow * @tags reliability * security From 03bd7d7f96b0bfd5426522a20e2e7fdd37811108 Mon Sep 17 00:00:00 2001 From: Anders Fugmann Date: Mon, 27 Sep 2021 11:23:08 +0200 Subject: [PATCH 594/741] C++: Update test results from OverflowStatic --- .../Critical/OverflowStatic/OverflowStatic.expected | 12 ++++-------- .../test/query-tests/Critical/OverflowStatic/test.c | 8 ++++---- 2 files changed, 8 insertions(+), 12 deletions(-) diff --git a/cpp/ql/test/query-tests/Critical/OverflowStatic/OverflowStatic.expected b/cpp/ql/test/query-tests/Critical/OverflowStatic/OverflowStatic.expected index 9ecfb2303db..0e5bbee7d73 100644 --- a/cpp/ql/test/query-tests/Critical/OverflowStatic/OverflowStatic.expected +++ b/cpp/ql/test/query-tests/Critical/OverflowStatic/OverflowStatic.expected @@ -5,14 +5,10 @@ | test2.c:33:26:33:27 | 46 | Potential buffer-overflow: 'buffer' has size 40 not 46. | | test2.c:34:22:34:23 | 47 | Potential buffer-overflow: 'buffer' has size 40 not 47. | | test2.c:35:23:35:24 | 48 | Potential buffer-overflow: 'buffer' has size 40 not 48. | -| test.c:14:9:14:13 | access to array | Potential buffer-overflow: 'xs' has size 5 but 'xs[5]' is accessed here. | -| test.c:15:9:15:13 | access to array | Potential buffer-overflow: 'xs' has size 5 but 'xs[6]' is accessed here. | -| test.c:20:9:20:18 | access to array | Potential buffer-overflow: 'ys' has size 5 but 'ys[5]' is accessed here. | -| test.c:21:9:21:18 | access to array | Potential buffer-overflow: 'ys' has size 5 but 'ys[6]' is accessed here. | -| test.c:47:3:47:18 | access to array | Potential buffer-overflow: 'ptr' has size 8 but 'ptr[8]' is accessed here. | -| test.c:54:3:54:26 | access to array | Potential buffer-overflow: 'ptr' has size 8 but 'ptr[8]' is accessed here. | -| test.c:61:3:61:18 | access to array | Potential buffer-overflow: 'ptr' has size 8 but 'ptr[8]' is accessed here. | -| test.c:72:3:72:11 | access to array | Potential buffer-overflow: 'buf' has size 1 but 'buf[1]' is accessed here. | +| test.c:14:9:14:13 | access to array | Potential buffer-overflow: 'xs' has size 5 but 'xs[5]' may be accessed here. | +| test.c:15:9:15:13 | access to array | Potential buffer-overflow: 'xs' has size 5 but 'xs[6]' may be accessed here. | +| test.c:20:9:20:18 | access to array | Potential buffer-overflow: 'ys' has size 5 but 'ys[5]' may be accessed here. | +| test.c:21:9:21:18 | access to array | Potential buffer-overflow: 'ys' has size 5 but 'ys[6]' may be accessed here. | | test.cpp:19:3:19:12 | access to array | Potential buffer-overflow: counter 'i' <= 3 but 'buffer1' has 3 elements. | | test.cpp:20:3:20:12 | access to array | Potential buffer-overflow: counter 'i' <= 3 but 'buffer2' has 3 elements. | | test.cpp:24:27:24:27 | 4 | Potential buffer-overflow: 'buffer1' has size 3 not 4. | diff --git a/cpp/ql/test/query-tests/Critical/OverflowStatic/test.c b/cpp/ql/test/query-tests/Critical/OverflowStatic/test.c index 4da951a3139..3c726a452b9 100644 --- a/cpp/ql/test/query-tests/Critical/OverflowStatic/test.c +++ b/cpp/ql/test/query-tests/Critical/OverflowStatic/test.c @@ -44,21 +44,21 @@ void union_test() { union u u; u.ptr[0] = 0; // GOOD u.ptr[sizeof(u)-1] = 0; // GOOD - u.ptr[sizeof(u)] = 0; // BAD + u.ptr[sizeof(u)] = 0; // BAD [NOT DETECTED] } void test_struct_union() { struct { union u u; } v; v.u.ptr[0] = 0; // GOOD v.u.ptr[sizeof(union u)-1] = 0; // GOOD - v.u.ptr[sizeof(union u)] = 0; // BAD + v.u.ptr[sizeof(union u)] = 0; // BAD [NOT DETECTED] } void union_test2() { union { char ptr[1]; unsigned long value; } u; u.ptr[0] = 0; // GOOD u.ptr[sizeof(u)-1] = 0; // GOOD - u.ptr[sizeof(u)] = 0; // BAD + u.ptr[sizeof(u)] = 0; // BAD [NOT DETECTED] } typedef struct { @@ -69,5 +69,5 @@ typedef struct { void test_alloc() { // Special case of taking sizeof without any addition or multiplications var_buf *b = malloc(sizeof(var_buf)); - b->buf[1] = 0; // BAD + b->buf[1] = 0; // BAD [NOT DETECTED] } From fc6af0476f4e5e503fe53b4b1cb6f100ba5fdb19 Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Fri, 4 Jun 2021 17:10:23 +0200 Subject: [PATCH 595/741] Moved from experimental --- .../SaferSpelExpressionEvaluation.java | 0 .../Security/CWE/CWE-094/SpelInjection.qhelp | 0 .../Security/CWE/CWE-094/SpelInjection.ql | 0 .../Security/CWE/CWE-094/SpelInjectionLib.qll | 5 +- .../CWE/CWE-094/SpringFrameworkLib.qll | 111 ++++++++++++++++++ .../UnsafeSpelExpressionEvaluation.java | 0 .../CWE/CWE-094/SpringFrameworkLib.qll | 109 ----------------- .../security/CWE-094/SpelInjection.qlref | 1 - .../security/CWE-094/SpelInjection.expected | 0 .../security/CWE-094/SpelInjection.java | 0 .../security/CWE-094/SpelInjection.qlref | 1 + 11 files changed, 113 insertions(+), 114 deletions(-) rename java/ql/src/{experimental => }/Security/CWE/CWE-094/SaferSpelExpressionEvaluation.java (100%) rename java/ql/src/{experimental => }/Security/CWE/CWE-094/SpelInjection.qhelp (100%) rename java/ql/src/{experimental => }/Security/CWE/CWE-094/SpelInjection.ql (100%) rename java/ql/src/{experimental => }/Security/CWE/CWE-094/SpelInjectionLib.qll (95%) create mode 100644 java/ql/src/Security/CWE/CWE-094/SpringFrameworkLib.qll rename java/ql/src/{experimental => }/Security/CWE/CWE-094/UnsafeSpelExpressionEvaluation.java (100%) delete mode 100644 java/ql/test/experimental/query-tests/security/CWE-094/SpelInjection.qlref rename java/ql/test/{experimental => }/query-tests/security/CWE-094/SpelInjection.expected (100%) rename java/ql/test/{experimental => }/query-tests/security/CWE-094/SpelInjection.java (100%) create mode 100644 java/ql/test/query-tests/security/CWE-094/SpelInjection.qlref diff --git a/java/ql/src/experimental/Security/CWE/CWE-094/SaferSpelExpressionEvaluation.java b/java/ql/src/Security/CWE/CWE-094/SaferSpelExpressionEvaluation.java similarity index 100% rename from java/ql/src/experimental/Security/CWE/CWE-094/SaferSpelExpressionEvaluation.java rename to java/ql/src/Security/CWE/CWE-094/SaferSpelExpressionEvaluation.java diff --git a/java/ql/src/experimental/Security/CWE/CWE-094/SpelInjection.qhelp b/java/ql/src/Security/CWE/CWE-094/SpelInjection.qhelp similarity index 100% rename from java/ql/src/experimental/Security/CWE/CWE-094/SpelInjection.qhelp rename to java/ql/src/Security/CWE/CWE-094/SpelInjection.qhelp diff --git a/java/ql/src/experimental/Security/CWE/CWE-094/SpelInjection.ql b/java/ql/src/Security/CWE/CWE-094/SpelInjection.ql similarity index 100% rename from java/ql/src/experimental/Security/CWE/CWE-094/SpelInjection.ql rename to java/ql/src/Security/CWE/CWE-094/SpelInjection.ql diff --git a/java/ql/src/experimental/Security/CWE/CWE-094/SpelInjectionLib.qll b/java/ql/src/Security/CWE/CWE-094/SpelInjectionLib.qll similarity index 95% rename from java/ql/src/experimental/Security/CWE/CWE-094/SpelInjectionLib.qll rename to java/ql/src/Security/CWE/CWE-094/SpelInjectionLib.qll index 27e0ee463f6..6e37cb5cd82 100644 --- a/java/ql/src/experimental/Security/CWE/CWE-094/SpelInjectionLib.qll +++ b/java/ql/src/Security/CWE/CWE-094/SpelInjectionLib.qll @@ -10,10 +10,7 @@ import SpringFrameworkLib class ExpressionInjectionConfig extends TaintTracking::Configuration { ExpressionInjectionConfig() { this = "ExpressionInjectionConfig" } - override predicate isSource(DataFlow::Node source) { - source instanceof RemoteFlowSource or - source instanceof WebRequestSource - } + override predicate isSource(DataFlow::Node source) { source instanceof RemoteFlowSource } override predicate isSink(DataFlow::Node sink) { sink instanceof ExpressionEvaluationSink } diff --git a/java/ql/src/Security/CWE/CWE-094/SpringFrameworkLib.qll b/java/ql/src/Security/CWE/CWE-094/SpringFrameworkLib.qll new file mode 100644 index 00000000000..d240167c398 --- /dev/null +++ b/java/ql/src/Security/CWE/CWE-094/SpringFrameworkLib.qll @@ -0,0 +1,111 @@ +import java +import semmle.code.java.dataflow.DataFlow + +/** + * Methods that trigger evaluation of an expression. + */ +class ExpressionEvaluationMethod extends Method { + ExpressionEvaluationMethod() { + getDeclaringType() instanceof Expression and + ( + hasName("getValue") or + hasName("getValueTypeDescriptor") or + hasName("getValueType") or + hasName("setValue") + ) + } +} + +/** + * Holds if `node1` to `node2` is a dataflow step that converts `PropertyValues` + * to an array of `PropertyValue`, i.e. `tainted.getPropertyValues()`. + */ +predicate getPropertyValuesStep(DataFlow::Node node1, DataFlow::Node node2) { + exists(MethodAccess ma, Method m | m = ma.getMethod() | + node1.asExpr() = ma.getQualifier() and + node2.asExpr() = ma and + m.getDeclaringType() instanceof PropertyValues and + m.hasName("getPropertyValues") + ) +} + +/** + * Holds if `node1` to `node2` is a dataflow step that constructs `MutablePropertyValues`, + * i.e. `new MutablePropertyValues(tainted)`. + */ +predicate createMutablePropertyValuesStep(DataFlow::Node node1, DataFlow::Node node2) { + exists(ConstructorCall cc | cc.getConstructedType() instanceof MutablePropertyValues | + node1.asExpr() = cc.getAnArgument() and + node2.asExpr() = cc + ) +} + +/** + * Holds if `node1` to `node2` is a dataflow step that returns a name of `PropertyValue`, + * i.e. `tainted.getName()`. + */ +predicate getPropertyNameStep(DataFlow::Node node1, DataFlow::Node node2) { + exists(MethodAccess ma, Method m | m = ma.getMethod() | + node1.asExpr() = ma.getQualifier() and + node2.asExpr() = ma and + m.getDeclaringType() instanceof PropertyValue and + m.hasName("getName") + ) +} + +/** + * Holds if `node1` to `node2` is a dataflow step that converts `MutablePropertyValues` + * to a list of `PropertyValue`, i.e. `tainted.getPropertyValueList()`. + */ +predicate getPropertyValueListStep(DataFlow::Node node1, DataFlow::Node node2) { + exists(MethodAccess ma, Method m | m = ma.getMethod() | + node1.asExpr() = ma.getQualifier() and + node2.asExpr() = ma and + m.getDeclaringType() instanceof MutablePropertyValues and + m.hasName("getPropertyValueList") + ) +} + +/** + * Holds if `node1` to `node2` is one of the dataflow steps that propagate + * tainted data via Spring properties. + */ +predicate springPropertiesStep(DataFlow::Node node1, DataFlow::Node node2) { + createMutablePropertyValuesStep(node1, node2) or + getPropertyNameStep(node1, node2) or + getPropertyValuesStep(node1, node2) or + getPropertyValueListStep(node1, node2) +} + +class PropertyValue extends RefType { + PropertyValue() { hasQualifiedName("org.springframework.beans", "PropertyValue") } +} + +class PropertyValues extends RefType { + PropertyValues() { hasQualifiedName("org.springframework.beans", "PropertyValues") } +} + +class MutablePropertyValues extends RefType { + MutablePropertyValues() { hasQualifiedName("org.springframework.beans", "MutablePropertyValues") } +} + +class SimpleEvaluationContext extends RefType { + SimpleEvaluationContext() { + hasQualifiedName("org.springframework.expression.spel.support", "SimpleEvaluationContext") + } +} + +class SimpleEvaluationContextBuilder extends RefType { + SimpleEvaluationContextBuilder() { + hasQualifiedName("org.springframework.expression.spel.support", + "SimpleEvaluationContext$Builder") + } +} + +class Expression extends RefType { + Expression() { hasQualifiedName("org.springframework.expression", "Expression") } +} + +class ExpressionParser extends RefType { + ExpressionParser() { hasQualifiedName("org.springframework.expression", "ExpressionParser") } +} diff --git a/java/ql/src/experimental/Security/CWE/CWE-094/UnsafeSpelExpressionEvaluation.java b/java/ql/src/Security/CWE/CWE-094/UnsafeSpelExpressionEvaluation.java similarity index 100% rename from java/ql/src/experimental/Security/CWE/CWE-094/UnsafeSpelExpressionEvaluation.java rename to java/ql/src/Security/CWE/CWE-094/UnsafeSpelExpressionEvaluation.java diff --git a/java/ql/src/experimental/Security/CWE/CWE-094/SpringFrameworkLib.qll b/java/ql/src/experimental/Security/CWE/CWE-094/SpringFrameworkLib.qll index dd6ebc43ee7..31c80ea67d8 100644 --- a/java/ql/src/experimental/Security/CWE/CWE-094/SpringFrameworkLib.qll +++ b/java/ql/src/experimental/Security/CWE/CWE-094/SpringFrameworkLib.qll @@ -1,21 +1,6 @@ import java import semmle.code.java.dataflow.DataFlow -/** - * Methods that trigger evaluation of an expression. - */ -class ExpressionEvaluationMethod extends Method { - ExpressionEvaluationMethod() { - getDeclaringType() instanceof Expression and - ( - hasName("getValue") or - hasName("getValueTypeDescriptor") or - hasName("getValueType") or - hasName("setValue") - ) - } -} - /** * `WebRequest` interface is a source of tainted data. */ @@ -37,100 +22,6 @@ class WebRequestSource extends DataFlow::Node { } } -/** - * Holds if `node1` to `node2` is a dataflow step that converts `PropertyValues` - * to an array of `PropertyValue`, i.e. `tainted.getPropertyValues()`. - */ -predicate getPropertyValuesStep(DataFlow::Node node1, DataFlow::Node node2) { - exists(MethodAccess ma, Method m | m = ma.getMethod() | - node1.asExpr() = ma.getQualifier() and - node2.asExpr() = ma and - m.getDeclaringType() instanceof PropertyValues and - m.hasName("getPropertyValues") - ) -} - -/** - * Holds if `node1` to `node2` is a dataflow step that constructs `MutablePropertyValues`, - * i.e. `new MutablePropertyValues(tainted)`. - */ -predicate createMutablePropertyValuesStep(DataFlow::Node node1, DataFlow::Node node2) { - exists(ConstructorCall cc | cc.getConstructedType() instanceof MutablePropertyValues | - node1.asExpr() = cc.getAnArgument() and - node2.asExpr() = cc - ) -} - -/** - * Holds if `node1` to `node2` is a dataflow step that returns a name of `PropertyValue`, - * i.e. `tainted.getName()`. - */ -predicate getPropertyNameStep(DataFlow::Node node1, DataFlow::Node node2) { - exists(MethodAccess ma, Method m | m = ma.getMethod() | - node1.asExpr() = ma.getQualifier() and - node2.asExpr() = ma and - m.getDeclaringType() instanceof PropertyValue and - m.hasName("getName") - ) -} - -/** - * Holds if `node1` to `node2` is a dataflow step that converts `MutablePropertyValues` - * to a list of `PropertyValue`, i.e. `tainted.getPropertyValueList()`. - */ -predicate getPropertyValueListStep(DataFlow::Node node1, DataFlow::Node node2) { - exists(MethodAccess ma, Method m | m = ma.getMethod() | - node1.asExpr() = ma.getQualifier() and - node2.asExpr() = ma and - m.getDeclaringType() instanceof MutablePropertyValues and - m.hasName("getPropertyValueList") - ) -} - -/** - * Holds if `node1` to `node2` is one of the dataflow steps that propagate - * tainted data via Spring properties. - */ -predicate springPropertiesStep(DataFlow::Node node1, DataFlow::Node node2) { - createMutablePropertyValuesStep(node1, node2) or - getPropertyNameStep(node1, node2) or - getPropertyValuesStep(node1, node2) or - getPropertyValueListStep(node1, node2) -} - -class PropertyValue extends RefType { - PropertyValue() { hasQualifiedName("org.springframework.beans", "PropertyValue") } -} - -class PropertyValues extends RefType { - PropertyValues() { hasQualifiedName("org.springframework.beans", "PropertyValues") } -} - -class MutablePropertyValues extends RefType { - MutablePropertyValues() { hasQualifiedName("org.springframework.beans", "MutablePropertyValues") } -} - -class SimpleEvaluationContext extends RefType { - SimpleEvaluationContext() { - hasQualifiedName("org.springframework.expression.spel.support", "SimpleEvaluationContext") - } -} - -class SimpleEvaluationContextBuilder extends RefType { - SimpleEvaluationContextBuilder() { - hasQualifiedName("org.springframework.expression.spel.support", - "SimpleEvaluationContext$Builder") - } -} - class WebRequest extends RefType { WebRequest() { hasQualifiedName("org.springframework.web.context.request", "WebRequest") } } - -class Expression extends RefType { - Expression() { hasQualifiedName("org.springframework.expression", "Expression") } -} - -class ExpressionParser extends RefType { - ExpressionParser() { hasQualifiedName("org.springframework.expression", "ExpressionParser") } -} diff --git a/java/ql/test/experimental/query-tests/security/CWE-094/SpelInjection.qlref b/java/ql/test/experimental/query-tests/security/CWE-094/SpelInjection.qlref deleted file mode 100644 index 95bc89c7ae6..00000000000 --- a/java/ql/test/experimental/query-tests/security/CWE-094/SpelInjection.qlref +++ /dev/null @@ -1 +0,0 @@ -experimental/Security/CWE/CWE-094/SpelInjection.ql \ No newline at end of file diff --git a/java/ql/test/experimental/query-tests/security/CWE-094/SpelInjection.expected b/java/ql/test/query-tests/security/CWE-094/SpelInjection.expected similarity index 100% rename from java/ql/test/experimental/query-tests/security/CWE-094/SpelInjection.expected rename to java/ql/test/query-tests/security/CWE-094/SpelInjection.expected diff --git a/java/ql/test/experimental/query-tests/security/CWE-094/SpelInjection.java b/java/ql/test/query-tests/security/CWE-094/SpelInjection.java similarity index 100% rename from java/ql/test/experimental/query-tests/security/CWE-094/SpelInjection.java rename to java/ql/test/query-tests/security/CWE-094/SpelInjection.java diff --git a/java/ql/test/query-tests/security/CWE-094/SpelInjection.qlref b/java/ql/test/query-tests/security/CWE-094/SpelInjection.qlref new file mode 100644 index 00000000000..f949263d4d3 --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-094/SpelInjection.qlref @@ -0,0 +1 @@ +Security/CWE/CWE-094/SpelInjection.ql \ No newline at end of file From 079769ed2e454ff70ab48293e65a6691d77369a6 Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Mon, 7 Jun 2021 09:31:49 +0200 Subject: [PATCH 596/741] Refactored SpelInjection.qll to use CSV sink models --- .../src/Security/CWE/CWE-094/SpelInjection.ql | 20 ++- .../Security/CWE/CWE-094/SpelInjectionLib.qll | 97 ------------ .../CWE/CWE-094/SpringFrameworkLib.qll | 111 -------------- .../code/java/security/SpelInjection.qll | 145 ++++++++++++++++++ 4 files changed, 163 insertions(+), 210 deletions(-) delete mode 100644 java/ql/src/Security/CWE/CWE-094/SpelInjectionLib.qll delete mode 100644 java/ql/src/Security/CWE/CWE-094/SpringFrameworkLib.qll create mode 100644 java/ql/src/semmle/code/java/security/SpelInjection.qll diff --git a/java/ql/src/Security/CWE/CWE-094/SpelInjection.ql b/java/ql/src/Security/CWE/CWE-094/SpelInjection.ql index d9914c4d512..38038ab05c0 100644 --- a/java/ql/src/Security/CWE/CWE-094/SpelInjection.ql +++ b/java/ql/src/Security/CWE/CWE-094/SpelInjection.ql @@ -11,9 +11,25 @@ */ import java -import SpelInjectionLib +import semmle.code.java.security.SpelInjection import DataFlow::PathGraph -from DataFlow::PathNode source, DataFlow::PathNode sink, ExpressionInjectionConfig conf +/** + * A taint-tracking configuration for unsafe user input + * that is used to construct and evaluate a SpEL expression. + */ +class SpELInjectionConfig extends TaintTracking::Configuration { + SpELInjectionConfig() { this = "SpELInjectionConfig" } + + override predicate isSource(DataFlow::Node source) { source instanceof RemoteFlowSource } + + override predicate isSink(DataFlow::Node sink) { sink instanceof SpelExpressionEvaluationSink } + + override predicate isAdditionalTaintStep(DataFlow::Node node1, DataFlow::Node node2) { + any(SpelExpressionInjectionAdditionalTaintStep c).step(node1, node2) + } +} + +from DataFlow::PathNode source, DataFlow::PathNode sink, SpELInjectionConfig conf where conf.hasFlowPath(source, sink) select sink.getNode(), source, sink, "SpEL injection from $@.", source.getNode(), "this user input" diff --git a/java/ql/src/Security/CWE/CWE-094/SpelInjectionLib.qll b/java/ql/src/Security/CWE/CWE-094/SpelInjectionLib.qll deleted file mode 100644 index 6e37cb5cd82..00000000000 --- a/java/ql/src/Security/CWE/CWE-094/SpelInjectionLib.qll +++ /dev/null @@ -1,97 +0,0 @@ -import java -import semmle.code.java.dataflow.FlowSources -import semmle.code.java.dataflow.TaintTracking2 -import SpringFrameworkLib - -/** - * A taint-tracking configuration for unsafe user input - * that is used to construct and evaluate a SpEL expression. - */ -class ExpressionInjectionConfig extends TaintTracking::Configuration { - ExpressionInjectionConfig() { this = "ExpressionInjectionConfig" } - - override predicate isSource(DataFlow::Node source) { source instanceof RemoteFlowSource } - - override predicate isSink(DataFlow::Node sink) { sink instanceof ExpressionEvaluationSink } - - override predicate isAdditionalTaintStep(DataFlow::Node node1, DataFlow::Node node2) { - expressionParsingStep(node1, node2) or - springPropertiesStep(node1, node2) - } -} - -/** - * A sink for SpEL injection vulnerabilities, - * i.e. methods that run evaluation of a SpEL expression in a powerfull context. - */ -class ExpressionEvaluationSink extends DataFlow::ExprNode { - ExpressionEvaluationSink() { - exists(MethodAccess ma, Method m | m = ma.getMethod() | - m instanceof ExpressionEvaluationMethod and - getExpr() = ma.getQualifier() and - not exists(SafeEvaluationContextFlowConfig config | - config.hasFlowTo(DataFlow::exprNode(ma.getArgument(0))) - ) - ) - } -} - -/** - * Holds if `node1` to `node2` is a dataflow step that parses a SpEL expression, - * i.e. `parser.parseExpression(tainted)`. - */ -predicate expressionParsingStep(DataFlow::Node node1, DataFlow::Node node2) { - exists(MethodAccess ma, Method m | ma.getMethod() = m | - m.getDeclaringType().getAnAncestor*() instanceof ExpressionParser and - m.hasName("parseExpression") and - ma.getAnArgument() = node1.asExpr() and - node2.asExpr() = ma - ) -} - -/** - * A configuration for safe evaluation context that may be used in expression evaluation. - */ -class SafeEvaluationContextFlowConfig extends DataFlow2::Configuration { - SafeEvaluationContextFlowConfig() { this = "SpelInjection::SafeEvaluationContextFlowConfig" } - - override predicate isSource(DataFlow::Node source) { source instanceof SafeContextSource } - - override predicate isSink(DataFlow::Node sink) { - exists(MethodAccess ma, Method m | m = ma.getMethod() | - m instanceof ExpressionEvaluationMethod and - ma.getArgument(0) = sink.asExpr() - ) - } - - override int fieldFlowBranchLimit() { result = 0 } -} - -class SafeContextSource extends DataFlow::ExprNode { - SafeContextSource() { - isSimpleEvaluationContextConstructorCall(getExpr()) or - isSimpleEvaluationContextBuilderCall(getExpr()) - } -} - -/** - * Holds if `expr` constructs `SimpleEvaluationContext`. - */ -predicate isSimpleEvaluationContextConstructorCall(Expr expr) { - exists(ConstructorCall cc | - cc.getConstructedType() instanceof SimpleEvaluationContext and - cc = expr - ) -} - -/** - * Holds if `expr` builds `SimpleEvaluationContext` via `SimpleEvaluationContext.Builder`, - * e.g. `SimpleEvaluationContext.forReadWriteDataBinding().build()`. - */ -predicate isSimpleEvaluationContextBuilderCall(Expr expr) { - exists(MethodAccess ma, Method m | ma.getMethod() = m | - m.getDeclaringType() instanceof SimpleEvaluationContextBuilder and - m.hasName("build") and - ma = expr - ) -} diff --git a/java/ql/src/Security/CWE/CWE-094/SpringFrameworkLib.qll b/java/ql/src/Security/CWE/CWE-094/SpringFrameworkLib.qll deleted file mode 100644 index d240167c398..00000000000 --- a/java/ql/src/Security/CWE/CWE-094/SpringFrameworkLib.qll +++ /dev/null @@ -1,111 +0,0 @@ -import java -import semmle.code.java.dataflow.DataFlow - -/** - * Methods that trigger evaluation of an expression. - */ -class ExpressionEvaluationMethod extends Method { - ExpressionEvaluationMethod() { - getDeclaringType() instanceof Expression and - ( - hasName("getValue") or - hasName("getValueTypeDescriptor") or - hasName("getValueType") or - hasName("setValue") - ) - } -} - -/** - * Holds if `node1` to `node2` is a dataflow step that converts `PropertyValues` - * to an array of `PropertyValue`, i.e. `tainted.getPropertyValues()`. - */ -predicate getPropertyValuesStep(DataFlow::Node node1, DataFlow::Node node2) { - exists(MethodAccess ma, Method m | m = ma.getMethod() | - node1.asExpr() = ma.getQualifier() and - node2.asExpr() = ma and - m.getDeclaringType() instanceof PropertyValues and - m.hasName("getPropertyValues") - ) -} - -/** - * Holds if `node1` to `node2` is a dataflow step that constructs `MutablePropertyValues`, - * i.e. `new MutablePropertyValues(tainted)`. - */ -predicate createMutablePropertyValuesStep(DataFlow::Node node1, DataFlow::Node node2) { - exists(ConstructorCall cc | cc.getConstructedType() instanceof MutablePropertyValues | - node1.asExpr() = cc.getAnArgument() and - node2.asExpr() = cc - ) -} - -/** - * Holds if `node1` to `node2` is a dataflow step that returns a name of `PropertyValue`, - * i.e. `tainted.getName()`. - */ -predicate getPropertyNameStep(DataFlow::Node node1, DataFlow::Node node2) { - exists(MethodAccess ma, Method m | m = ma.getMethod() | - node1.asExpr() = ma.getQualifier() and - node2.asExpr() = ma and - m.getDeclaringType() instanceof PropertyValue and - m.hasName("getName") - ) -} - -/** - * Holds if `node1` to `node2` is a dataflow step that converts `MutablePropertyValues` - * to a list of `PropertyValue`, i.e. `tainted.getPropertyValueList()`. - */ -predicate getPropertyValueListStep(DataFlow::Node node1, DataFlow::Node node2) { - exists(MethodAccess ma, Method m | m = ma.getMethod() | - node1.asExpr() = ma.getQualifier() and - node2.asExpr() = ma and - m.getDeclaringType() instanceof MutablePropertyValues and - m.hasName("getPropertyValueList") - ) -} - -/** - * Holds if `node1` to `node2` is one of the dataflow steps that propagate - * tainted data via Spring properties. - */ -predicate springPropertiesStep(DataFlow::Node node1, DataFlow::Node node2) { - createMutablePropertyValuesStep(node1, node2) or - getPropertyNameStep(node1, node2) or - getPropertyValuesStep(node1, node2) or - getPropertyValueListStep(node1, node2) -} - -class PropertyValue extends RefType { - PropertyValue() { hasQualifiedName("org.springframework.beans", "PropertyValue") } -} - -class PropertyValues extends RefType { - PropertyValues() { hasQualifiedName("org.springframework.beans", "PropertyValues") } -} - -class MutablePropertyValues extends RefType { - MutablePropertyValues() { hasQualifiedName("org.springframework.beans", "MutablePropertyValues") } -} - -class SimpleEvaluationContext extends RefType { - SimpleEvaluationContext() { - hasQualifiedName("org.springframework.expression.spel.support", "SimpleEvaluationContext") - } -} - -class SimpleEvaluationContextBuilder extends RefType { - SimpleEvaluationContextBuilder() { - hasQualifiedName("org.springframework.expression.spel.support", - "SimpleEvaluationContext$Builder") - } -} - -class Expression extends RefType { - Expression() { hasQualifiedName("org.springframework.expression", "Expression") } -} - -class ExpressionParser extends RefType { - ExpressionParser() { hasQualifiedName("org.springframework.expression", "ExpressionParser") } -} diff --git a/java/ql/src/semmle/code/java/security/SpelInjection.qll b/java/ql/src/semmle/code/java/security/SpelInjection.qll new file mode 100644 index 00000000000..39a9d9b19ea --- /dev/null +++ b/java/ql/src/semmle/code/java/security/SpelInjection.qll @@ -0,0 +1,145 @@ +/** Provides classes to reason about SpEL injection attacks. */ + +import java +import semmle.code.java.dataflow.DataFlow +import semmle.code.java.dataflow.ExternalFlow +import semmle.code.java.dataflow.FlowSources + +/** A data flow sink for unvalidated user input that is used to construct SpEL expressions. */ +abstract class SpelExpressionEvaluationSink extends DataFlow::ExprNode { } + +private class SpelExpressionEvaluationModel extends SinkModelCsv { + override predicate row(string row) { + row = + [ + "org.springframework.expression;Expression;true;getValue;;;Argument[-1];spel", + "org.springframework.expression;Expression;true;getValueTypeDescriptor;;;Argument[-1];spel", + "org.springframework.expression;Expression;true;getValueType;;;Argument[-1];spel", + "org.springframework.expression;Expression;true;setValue;;;Argument[-1];spel" + ] + } +} + +/** Default sink for SpEL injection vulnerabilities. */ +private class DefaultSpelExpressionEvaluationSink extends SpelExpressionEvaluationSink { + DefaultSpelExpressionEvaluationSink() { + exists(MethodAccess ma | + sinkNode(this, "spel") and + this.asExpr() = ma.getQualifier() and + not exists(SafeEvaluationContextFlowConfig config | + config.hasFlowTo(DataFlow::exprNode(ma.getArgument(0))) + ) + ) + } +} + +/** + * A unit class for adding additional taint steps. + * + * Extend this class to add additional taint steps that should apply to the `SpELInjectionConfig`. + */ +class SpelExpressionInjectionAdditionalTaintStep extends Unit { + /** + * Holds if the step from `node1` to `node2` should be considered a taint + * step for the `SpELInjectionConfig` configuration. + */ + abstract predicate step(DataFlow::Node node1, DataFlow::Node node2); +} + +/** A set of additional taint steps to consider when taint tracking SpEL related data flows. */ +private class DefaultSpelExpressionInjectionAdditionalTaintStep extends SpelExpressionInjectionAdditionalTaintStep { + override predicate step(DataFlow::Node node1, DataFlow::Node node2) { + expressionParsingStep(node1, node2) + } +} + +/** + * A configuration for safe evaluation context that may be used in expression evaluation. + */ +class SafeEvaluationContextFlowConfig extends DataFlow2::Configuration { + SafeEvaluationContextFlowConfig() { this = "SpelInjection::SafeEvaluationContextFlowConfig" } + + override predicate isSource(DataFlow::Node source) { source instanceof SafeContextSource } + + override predicate isSink(DataFlow::Node sink) { + exists(MethodAccess ma | + ma.getMethod() instanceof ExpressionEvaluationMethod and + ma.getArgument(0) = sink.asExpr() + ) + } + + override int fieldFlowBranchLimit() { result = 0 } +} + +private class SafeContextSource extends DataFlow::ExprNode { + SafeContextSource() { + isSimpleEvaluationContextConstructorCall(getExpr()) or + isSimpleEvaluationContextBuilderCall(getExpr()) + } +} + +/** + * Holds if `expr` constructs `SimpleEvaluationContext`. + */ +private predicate isSimpleEvaluationContextConstructorCall(Expr expr) { + exists(ConstructorCall cc | + cc.getConstructedType() instanceof SimpleEvaluationContext and + cc = expr + ) +} + +/** + * Holds if `expr` builds `SimpleEvaluationContext` via `SimpleEvaluationContext.Builder`, + * for instance, `SimpleEvaluationContext.forReadWriteDataBinding().build()`. + */ +private predicate isSimpleEvaluationContextBuilderCall(Expr expr) { + exists(MethodAccess ma, Method m | ma.getMethod() = m | + m.getDeclaringType() instanceof SimpleEvaluationContextBuilder and + m.hasName("build") and + ma = expr + ) +} + +/** + * Methods that trigger evaluation of an expression. + */ +private class ExpressionEvaluationMethod extends Method { + ExpressionEvaluationMethod() { + this.getDeclaringType() instanceof Expression and + this.hasName(["getValue", "getValueTypeDescriptor", "getValueType", "setValue"]) + } +} + +/** + * Holds if `node1` to `node2` is a dataflow step that parses a SpEL expression, + * by calling `parser.parseExpression(tainted)`. + */ +private predicate expressionParsingStep(DataFlow::Node node1, DataFlow::Node node2) { + exists(MethodAccess ma, Method m | ma.getMethod() = m | + m.getDeclaringType().getAnAncestor*() instanceof ExpressionParser and + m.hasName("parseExpression") and + ma.getAnArgument() = node1.asExpr() and + node2.asExpr() = ma + ) +} + +private class SimpleEvaluationContext extends RefType { + SimpleEvaluationContext() { + hasQualifiedName("org.springframework.expression.spel.support", "SimpleEvaluationContext") + } +} + +private class SimpleEvaluationContextBuilder extends RefType { + SimpleEvaluationContextBuilder() { + hasQualifiedName("org.springframework.expression.spel.support", + "SimpleEvaluationContext$Builder") + } +} + +private class Expression extends RefType { + Expression() { hasQualifiedName("org.springframework.expression", "Expression") } +} + +private class ExpressionParser extends RefType { + ExpressionParser() { hasQualifiedName("org.springframework.expression", "ExpressionParser") } +} From b985ddb868737eb00c5a5752fdcd53b2556e7e6f Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Mon, 7 Jun 2021 09:56:59 +0200 Subject: [PATCH 597/741] Use InlineExpectationsTest --- .../code/java/security/SpelInjection.qll | 2 +- .../security/CWE-094/SpelInjection.qlref | 1 - .../CWE-094/SpelInjectionTest.expected | 0 ...lInjection.java => SpelInjectionTest.java} | 17 +++++----- .../security/CWE-094/SpelInjectionTest.ql | 32 +++++++++++++++++++ 5 files changed, 41 insertions(+), 11 deletions(-) delete mode 100644 java/ql/test/query-tests/security/CWE-094/SpelInjection.qlref create mode 100644 java/ql/test/query-tests/security/CWE-094/SpelInjectionTest.expected rename java/ql/test/query-tests/security/CWE-094/{SpelInjection.java => SpelInjectionTest.java} (86%) create mode 100644 java/ql/test/query-tests/security/CWE-094/SpelInjectionTest.ql diff --git a/java/ql/src/semmle/code/java/security/SpelInjection.qll b/java/ql/src/semmle/code/java/security/SpelInjection.qll index 39a9d9b19ea..f5435802aa2 100644 --- a/java/ql/src/semmle/code/java/security/SpelInjection.qll +++ b/java/ql/src/semmle/code/java/security/SpelInjection.qll @@ -56,7 +56,7 @@ private class DefaultSpelExpressionInjectionAdditionalTaintStep extends SpelExpr /** * A configuration for safe evaluation context that may be used in expression evaluation. */ -class SafeEvaluationContextFlowConfig extends DataFlow2::Configuration { +private class SafeEvaluationContextFlowConfig extends DataFlow2::Configuration { SafeEvaluationContextFlowConfig() { this = "SpelInjection::SafeEvaluationContextFlowConfig" } override predicate isSource(DataFlow::Node source) { source instanceof SafeContextSource } diff --git a/java/ql/test/query-tests/security/CWE-094/SpelInjection.qlref b/java/ql/test/query-tests/security/CWE-094/SpelInjection.qlref deleted file mode 100644 index f949263d4d3..00000000000 --- a/java/ql/test/query-tests/security/CWE-094/SpelInjection.qlref +++ /dev/null @@ -1 +0,0 @@ -Security/CWE/CWE-094/SpelInjection.ql \ No newline at end of file diff --git a/java/ql/test/query-tests/security/CWE-094/SpelInjectionTest.expected b/java/ql/test/query-tests/security/CWE-094/SpelInjectionTest.expected new file mode 100644 index 00000000000..e69de29bb2d diff --git a/java/ql/test/query-tests/security/CWE-094/SpelInjection.java b/java/ql/test/query-tests/security/CWE-094/SpelInjectionTest.java similarity index 86% rename from java/ql/test/query-tests/security/CWE-094/SpelInjection.java rename to java/ql/test/query-tests/security/CWE-094/SpelInjectionTest.java index 9eeb552ef34..a6bdc956ed4 100644 --- a/java/ql/test/query-tests/security/CWE-094/SpelInjection.java +++ b/java/ql/test/query-tests/security/CWE-094/SpelInjectionTest.java @@ -7,7 +7,7 @@ import org.springframework.expression.spel.standard.SpelExpressionParser; import org.springframework.expression.spel.support.SimpleEvaluationContext; import org.springframework.expression.spel.support.StandardEvaluationContext; -public class SpelInjection { +public class SpelInjectionTest { private static final ExpressionParser PARSER = new SpelExpressionParser(); @@ -20,7 +20,7 @@ public class SpelInjection { ExpressionParser parser = new SpelExpressionParser(); Expression expression = parser.parseExpression(input); - expression.getValue(); + expression.getValue(); // $hasSpelInjection } public void testGetValueWithChainedCalls(Socket socket) throws IOException { @@ -31,7 +31,7 @@ public class SpelInjection { String input = new String(bytes, 0, n); Expression expression = new SpelExpressionParser().parseExpression(input); - expression.getValue(); + expression.getValue(); // $hasSpelInjection } public void testSetValueWithRootObject(Socket socket) throws IOException { @@ -45,7 +45,7 @@ public class SpelInjection { Object root = new Object(); Object value = new Object(); - expression.setValue(root, value); + expression.setValue(root, value); // $hasSpelInjection } public void testGetValueWithStaticParser(Socket socket) throws IOException { @@ -56,7 +56,7 @@ public class SpelInjection { String input = new String(bytes, 0, n); Expression expression = PARSER.parseExpression(input); - expression.getValue(); + expression.getValue(); // $hasSpelInjection } public void testGetValueType(Socket socket) throws IOException { @@ -67,7 +67,7 @@ public class SpelInjection { String input = new String(bytes, 0, n); Expression expression = PARSER.parseExpression(input); - expression.getValueType(); + expression.getValueType(); // $hasSpelInjection } public void testWithStandardEvaluationContext(Socket socket) throws IOException { @@ -80,7 +80,7 @@ public class SpelInjection { Expression expression = PARSER.parseExpression(input); StandardEvaluationContext context = new StandardEvaluationContext(); - expression.getValue(context); + expression.getValue(context); // $hasSpelInjection } public void testWithSimpleEvaluationContext(Socket socket) throws IOException { @@ -93,8 +93,7 @@ public class SpelInjection { Expression expression = PARSER.parseExpression(input); SimpleEvaluationContext context = SimpleEvaluationContext.forReadWriteDataBinding().build(); - // the expression is evaluated in a limited context - expression.getValue(context); + expression.getValue(context); // Safe - the expression is evaluated in a limited context } } diff --git a/java/ql/test/query-tests/security/CWE-094/SpelInjectionTest.ql b/java/ql/test/query-tests/security/CWE-094/SpelInjectionTest.ql new file mode 100644 index 00000000000..bbc56b33cb7 --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-094/SpelInjectionTest.ql @@ -0,0 +1,32 @@ +import java +import semmle.code.java.dataflow.TaintTracking +import semmle.code.java.dataflow.FlowSources +import semmle.code.java.security.SpelInjection +import TestUtilities.InlineExpectationsTest + +class Conf extends TaintTracking::Configuration { + Conf() { this = "test:cwe:spel-injection" } + + override predicate isSource(DataFlow::Node source) { source instanceof RemoteFlowSource } + + override predicate isSink(DataFlow::Node sink) { sink instanceof SpelExpressionEvaluationSink } + + override predicate isAdditionalTaintStep(DataFlow::Node node1, DataFlow::Node node2) { + any(SpelExpressionInjectionAdditionalTaintStep c).step(node1, node2) + } +} + +class HasSpelInjectionTest extends InlineExpectationsTest { + HasSpelInjectionTest() { this = "HasSpelInjectionTest" } + + override string getARelevantTag() { result = "hasSpelInjection" } + + override predicate hasActualResult(Location location, string element, string tag, string value) { + tag = "hasSpelInjection" and + exists(DataFlow::Node src, DataFlow::Node sink, Conf conf | conf.hasFlow(src, sink) | + sink.getLocation() = location and + element = sink.toString() and + value = "" + ) + } +} From b0852f6c1673c327b416381cd9520acee33c942a Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Tue, 8 Jun 2021 10:56:22 +0200 Subject: [PATCH 598/741] Add change note --- java/change-notes/2021-06-08-spel-injection-query.md | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 java/change-notes/2021-06-08-spel-injection-query.md diff --git a/java/change-notes/2021-06-08-spel-injection-query.md b/java/change-notes/2021-06-08-spel-injection-query.md new file mode 100644 index 00000000000..6e93fe66838 --- /dev/null +++ b/java/change-notes/2021-06-08-spel-injection-query.md @@ -0,0 +1,2 @@ +lgtm,codescanning +* The query "Expression language injection (Spring)" (`java/spel-expression-injection`) has been promoted from experimental to the main query pack. Its results will now appear by default. This query was originally [submitted as an experimental query by @artem-smotrakov](https://github.com/github/codeql/pull/3291) \ No newline at end of file From 569426b04e9b861caa42e0fab5ff4de1120f279f Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Tue, 15 Jun 2021 15:22:47 +0200 Subject: [PATCH 599/741] Consider subtypes of Expression and ExpressionParser Add parseRaw as additional taint step --- .../code/java/security/SpelInjection.qll | 6 +- .../security/CWE-094/SpelInjectionTest.java | 12 ++ .../expression/Expression.java | 55 ++++++- .../expression/ExpressionException.java | 53 +++++++ .../expression/ExpressionParser.java | 21 ++- .../expression/ParseException.java | 32 ++++ .../expression/ParserContext.java | 26 ++++ .../common/TemplateAwareExpressionParser.java | 35 +++++ .../spel/standard/SpelExpression.java | 137 ++++++++++++++++++ .../spel/standard/SpelExpressionParser.java | 28 +++- 10 files changed, 392 insertions(+), 13 deletions(-) create mode 100644 java/ql/test/stubs/springframework-5.3.8/org/springframework/expression/ExpressionException.java create mode 100644 java/ql/test/stubs/springframework-5.3.8/org/springframework/expression/ParseException.java create mode 100644 java/ql/test/stubs/springframework-5.3.8/org/springframework/expression/ParserContext.java create mode 100644 java/ql/test/stubs/springframework-5.3.8/org/springframework/expression/common/TemplateAwareExpressionParser.java create mode 100644 java/ql/test/stubs/springframework-5.3.8/org/springframework/expression/spel/standard/SpelExpression.java diff --git a/java/ql/src/semmle/code/java/security/SpelInjection.qll b/java/ql/src/semmle/code/java/security/SpelInjection.qll index f5435802aa2..420ef66f0dd 100644 --- a/java/ql/src/semmle/code/java/security/SpelInjection.qll +++ b/java/ql/src/semmle/code/java/security/SpelInjection.qll @@ -105,7 +105,7 @@ private predicate isSimpleEvaluationContextBuilderCall(Expr expr) { */ private class ExpressionEvaluationMethod extends Method { ExpressionEvaluationMethod() { - this.getDeclaringType() instanceof Expression and + this.getDeclaringType().getASupertype*() instanceof Expression and this.hasName(["getValue", "getValueTypeDescriptor", "getValueType", "setValue"]) } } @@ -116,8 +116,8 @@ private class ExpressionEvaluationMethod extends Method { */ private predicate expressionParsingStep(DataFlow::Node node1, DataFlow::Node node2) { exists(MethodAccess ma, Method m | ma.getMethod() = m | - m.getDeclaringType().getAnAncestor*() instanceof ExpressionParser and - m.hasName("parseExpression") and + m.getDeclaringType().getASupertype*() instanceof ExpressionParser and + m.hasName(["parseExpression", "parseRaw"]) and ma.getAnArgument() = node1.asExpr() and node2.asExpr() = ma ) diff --git a/java/ql/test/query-tests/security/CWE-094/SpelInjectionTest.java b/java/ql/test/query-tests/security/CWE-094/SpelInjectionTest.java index a6bdc956ed4..d10bcfa6686 100644 --- a/java/ql/test/query-tests/security/CWE-094/SpelInjectionTest.java +++ b/java/ql/test/query-tests/security/CWE-094/SpelInjectionTest.java @@ -3,6 +3,7 @@ import java.io.InputStream; import java.net.Socket; import org.springframework.expression.Expression; import org.springframework.expression.ExpressionParser; +import org.springframework.expression.spel.standard.SpelExpression; import org.springframework.expression.spel.standard.SpelExpressionParser; import org.springframework.expression.spel.support.SimpleEvaluationContext; import org.springframework.expression.spel.support.StandardEvaluationContext; @@ -23,6 +24,17 @@ public class SpelInjectionTest { expression.getValue(); // $hasSpelInjection } + public void testGetValueWithParseRaw(Socket socket) throws IOException { + InputStream in = socket.getInputStream(); + + byte[] bytes = new byte[1024]; + int n = in.read(bytes); + String input = new String(bytes, 0, n); + SpelExpressionParser parser = new SpelExpressionParser(); + SpelExpression expression = parser.parseRaw(input); + expression.getValue(); // $hasSpelInjection + } + public void testGetValueWithChainedCalls(Socket socket) throws IOException { InputStream in = socket.getInputStream(); diff --git a/java/ql/test/stubs/springframework-5.3.8/org/springframework/expression/Expression.java b/java/ql/test/stubs/springframework-5.3.8/org/springframework/expression/Expression.java index 2c3fc44075f..4556c65a518 100644 --- a/java/ql/test/stubs/springframework-5.3.8/org/springframework/expression/Expression.java +++ b/java/ql/test/stubs/springframework-5.3.8/org/springframework/expression/Expression.java @@ -1,14 +1,65 @@ +/* + * Copyright 2002-2017 the original author or authors. + * + * 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 + * + * https://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. + */ + package org.springframework.expression; +import org.springframework.lang.Nullable; + public interface Expression { + String getExpressionString(); Object getValue() throws EvaluationException; + T getValue(@Nullable Class desiredResultType) throws EvaluationException; + + Object getValue(@Nullable Object rootObject) throws EvaluationException; + + T getValue(@Nullable Object rootObject, @Nullable Class desiredResultType) + throws EvaluationException; + Object getValue(EvaluationContext context) throws EvaluationException; + Object getValue(EvaluationContext context, @Nullable Object rootObject) + throws EvaluationException; + + T getValue(EvaluationContext context, @Nullable Class desiredResultType) + throws EvaluationException; + + T getValue(EvaluationContext context, @Nullable Object rootObject, + @Nullable Class desiredResultType) throws EvaluationException; + Class getValueType() throws EvaluationException; + Class getValueType(@Nullable Object rootObject) throws EvaluationException; + Class getValueType(EvaluationContext context) throws EvaluationException; - void setValue(Object rootObject, Object value) throws EvaluationException; -} \ No newline at end of file + Class getValueType(EvaluationContext context, @Nullable Object rootObject) + throws EvaluationException; + + boolean isWritable(@Nullable Object rootObject) throws EvaluationException; + + boolean isWritable(EvaluationContext context) throws EvaluationException; + + boolean isWritable(EvaluationContext context, @Nullable Object rootObject) + throws EvaluationException; + + void setValue(@Nullable Object rootObject, @Nullable Object value) throws EvaluationException; + + void setValue(EvaluationContext context, @Nullable Object value) throws EvaluationException; + + void setValue(EvaluationContext context, @Nullable Object rootObject, @Nullable Object value) + throws EvaluationException; + +} diff --git a/java/ql/test/stubs/springframework-5.3.8/org/springframework/expression/ExpressionException.java b/java/ql/test/stubs/springframework-5.3.8/org/springframework/expression/ExpressionException.java new file mode 100644 index 00000000000..7cd8ed51fe9 --- /dev/null +++ b/java/ql/test/stubs/springframework-5.3.8/org/springframework/expression/ExpressionException.java @@ -0,0 +1,53 @@ +/* + * Copyright 2002-2018 the original author or authors. + * + * 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 + * + * https://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. + */ + +package org.springframework.expression; + +import org.springframework.lang.Nullable; + +public class ExpressionException extends RuntimeException { + public ExpressionException(String message) {} + + public ExpressionException(String message, Throwable cause) {} + + public ExpressionException(@Nullable String expressionString, String message) {} + + public ExpressionException(@Nullable String expressionString, int position, String message) {} + + public ExpressionException(int position, String message) {} + + public ExpressionException(int position, String message, Throwable cause) {} + + public final String getExpressionString() { + return null; + } + + public final int getPosition() { + return 0; + } + + @Override + public String getMessage() { + return null; + } + + public String toDetailedString() { + return null; + } + + public String getSimpleMessage() { + return null; + } + +} diff --git a/java/ql/test/stubs/springframework-5.3.8/org/springframework/expression/ExpressionParser.java b/java/ql/test/stubs/springframework-5.3.8/org/springframework/expression/ExpressionParser.java index 4bfbf796c1e..f90848acc84 100644 --- a/java/ql/test/stubs/springframework-5.3.8/org/springframework/expression/ExpressionParser.java +++ b/java/ql/test/stubs/springframework-5.3.8/org/springframework/expression/ExpressionParser.java @@ -1,6 +1,23 @@ +/* + * Copyright 2002-2009 the original author or authors. + * + * 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 + * + * https://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. + */ + package org.springframework.expression; public interface ExpressionParser { + Expression parseExpression(String expressionString) throws ParseException; - Expression parseExpression(String string); -} \ No newline at end of file + Expression parseExpression(String expressionString, ParserContext context) + throws ParseException; + +} diff --git a/java/ql/test/stubs/springframework-5.3.8/org/springframework/expression/ParseException.java b/java/ql/test/stubs/springframework-5.3.8/org/springframework/expression/ParseException.java new file mode 100644 index 00000000000..8a2a0ecd9d2 --- /dev/null +++ b/java/ql/test/stubs/springframework-5.3.8/org/springframework/expression/ParseException.java @@ -0,0 +1,32 @@ +/* + * Copyright 2002-2017 the original author or authors. + * + * 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 + * + * https://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. + */ + +package org.springframework.expression; + +import org.springframework.lang.Nullable; + +public class ParseException extends ExpressionException { + public ParseException(@Nullable String expressionString, int position, String message) { + super(expressionString, message); + } + + public ParseException(int position, String message, Throwable cause) { + super(message, cause); + } + + public ParseException(int position, String message) { + super(message); + } + +} diff --git a/java/ql/test/stubs/springframework-5.3.8/org/springframework/expression/ParserContext.java b/java/ql/test/stubs/springframework-5.3.8/org/springframework/expression/ParserContext.java new file mode 100644 index 00000000000..5e772eb5971 --- /dev/null +++ b/java/ql/test/stubs/springframework-5.3.8/org/springframework/expression/ParserContext.java @@ -0,0 +1,26 @@ +/* + * Copyright 2002-2017 the original author or authors. + * + * 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 + * + * https://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. + */ + +package org.springframework.expression; + +public interface ParserContext { + boolean isTemplate(); + + String getExpressionPrefix(); + + String getExpressionSuffix(); + + ParserContext TEMPLATE_EXPRESSION = null; + +} diff --git a/java/ql/test/stubs/springframework-5.3.8/org/springframework/expression/common/TemplateAwareExpressionParser.java b/java/ql/test/stubs/springframework-5.3.8/org/springframework/expression/common/TemplateAwareExpressionParser.java new file mode 100644 index 00000000000..55a2aa5756f --- /dev/null +++ b/java/ql/test/stubs/springframework-5.3.8/org/springframework/expression/common/TemplateAwareExpressionParser.java @@ -0,0 +1,35 @@ +/* + * Copyright 2002-2018 the original author or authors. + * + * 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 + * + * https://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. + */ + +package org.springframework.expression.common; + +import org.springframework.expression.Expression; +import org.springframework.expression.ExpressionParser; +import org.springframework.expression.ParseException; +import org.springframework.expression.ParserContext; +import org.springframework.lang.Nullable; + +public abstract class TemplateAwareExpressionParser implements ExpressionParser { + @Override + public Expression parseExpression(String expressionString) throws ParseException { + return null; + } + + @Override + public Expression parseExpression(String expressionString, @Nullable ParserContext context) + throws ParseException { + return null; + } + +} diff --git a/java/ql/test/stubs/springframework-5.3.8/org/springframework/expression/spel/standard/SpelExpression.java b/java/ql/test/stubs/springframework-5.3.8/org/springframework/expression/spel/standard/SpelExpression.java new file mode 100644 index 00000000000..949eab02e2c --- /dev/null +++ b/java/ql/test/stubs/springframework-5.3.8/org/springframework/expression/spel/standard/SpelExpression.java @@ -0,0 +1,137 @@ +/* + * Copyright 2002-2020 the original author or authors. + * + * 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 + * + * https://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. + */ + +package org.springframework.expression.spel.standard; + +import org.springframework.expression.EvaluationContext; +import org.springframework.expression.EvaluationException; +import org.springframework.expression.Expression; +import org.springframework.lang.Nullable; + +public class SpelExpression implements Expression { + public void setEvaluationContext(EvaluationContext evaluationContext) {} + + public EvaluationContext getEvaluationContext() { + return null; + } + + @Override + public String getExpressionString() { + return null; + } + + @Override + public Object getValue() throws EvaluationException { + return null; + } + + @Override + public T getValue(@Nullable Class expectedResultType) throws EvaluationException { + return null; + } + + @Override + public Object getValue(@Nullable Object rootObject) throws EvaluationException { + return null; + } + + @Override + public T getValue(@Nullable Object rootObject, @Nullable Class expectedResultType) + throws EvaluationException { + return null; + } + + @Override + public Object getValue(EvaluationContext context) throws EvaluationException { + return null; + } + + @Override + public T getValue(EvaluationContext context, @Nullable Class expectedResultType) + throws EvaluationException { + return null; + } + + @Override + public Object getValue(EvaluationContext context, @Nullable Object rootObject) + throws EvaluationException { + return null; + } + + @Override + public T getValue(EvaluationContext context, @Nullable Object rootObject, + @Nullable Class expectedResultType) throws EvaluationException { + return null; + } + + @Override + public Class getValueType() throws EvaluationException { + return null; + } + + @Override + public Class getValueType(@Nullable Object rootObject) throws EvaluationException { + return null; + } + + @Override + public Class getValueType(EvaluationContext context) throws EvaluationException { + return null; + } + + @Override + public Class getValueType(EvaluationContext context, @Nullable Object rootObject) + throws EvaluationException { + return null; + } + + @Override + public boolean isWritable(@Nullable Object rootObject) throws EvaluationException { + return false; + } + + @Override + public boolean isWritable(EvaluationContext context) throws EvaluationException { + return false; + } + + @Override + public boolean isWritable(EvaluationContext context, @Nullable Object rootObject) + throws EvaluationException { + return false; + } + + @Override + public void setValue(@Nullable Object rootObject, @Nullable Object value) + throws EvaluationException {} + + @Override + public void setValue(EvaluationContext context, @Nullable Object value) + throws EvaluationException {} + + @Override + public void setValue(EvaluationContext context, @Nullable Object rootObject, + @Nullable Object value) throws EvaluationException {} + + public boolean compileExpression() { + return false; + } + + public void revertToInterpreted() {} + + public String toStringAST() { + return null; + } + +} diff --git a/java/ql/test/stubs/springframework-5.3.8/org/springframework/expression/spel/standard/SpelExpressionParser.java b/java/ql/test/stubs/springframework-5.3.8/org/springframework/expression/spel/standard/SpelExpressionParser.java index 4aee45beee9..033e0f07915 100644 --- a/java/ql/test/stubs/springframework-5.3.8/org/springframework/expression/spel/standard/SpelExpressionParser.java +++ b/java/ql/test/stubs/springframework-5.3.8/org/springframework/expression/spel/standard/SpelExpressionParser.java @@ -1,10 +1,26 @@ +/* + * Copyright 2002-2014 the original author or authors. + * + * 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 + * + * https://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. + */ + package org.springframework.expression.spel.standard; -import org.springframework.expression.*; - -public class SpelExpressionParser implements ExpressionParser { +import org.springframework.expression.ParseException; +import org.springframework.expression.common.TemplateAwareExpressionParser; +public class SpelExpressionParser extends TemplateAwareExpressionParser { public SpelExpressionParser() {} - - public Expression parseExpression(String string) { return null; } -} \ No newline at end of file + + public SpelExpression parseRaw(String expressionString) throws ParseException { + return null; + } +} From 94f32d2985ceac18e725b697b228b372cd721912 Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Mon, 19 Jul 2021 13:26:23 +0200 Subject: [PATCH 600/741] Decouple SpelInjection.qll to reuse the taint tracking configuration --- .../src/Security/CWE/CWE-094/SpelInjection.ql | 20 ++----------- ...elInjection.qll => SpelInjectionQuery.qll} | 29 ++++++++++--------- .../java/security/SpelInjectionSinkModels.qll | 15 ++++++++++ .../security/CWE-094/SpelInjectionTest.ql | 18 +++--------- 4 files changed, 37 insertions(+), 45 deletions(-) rename java/ql/src/semmle/code/java/security/{SpelInjection.qll => SpelInjectionQuery.qll} (88%) create mode 100644 java/ql/src/semmle/code/java/security/SpelInjectionSinkModels.qll diff --git a/java/ql/src/Security/CWE/CWE-094/SpelInjection.ql b/java/ql/src/Security/CWE/CWE-094/SpelInjection.ql index 38038ab05c0..586b265cc73 100644 --- a/java/ql/src/Security/CWE/CWE-094/SpelInjection.ql +++ b/java/ql/src/Security/CWE/CWE-094/SpelInjection.ql @@ -11,25 +11,9 @@ */ import java -import semmle.code.java.security.SpelInjection +import semmle.code.java.security.SpelInjectionQuery import DataFlow::PathGraph -/** - * A taint-tracking configuration for unsafe user input - * that is used to construct and evaluate a SpEL expression. - */ -class SpELInjectionConfig extends TaintTracking::Configuration { - SpELInjectionConfig() { this = "SpELInjectionConfig" } - - override predicate isSource(DataFlow::Node source) { source instanceof RemoteFlowSource } - - override predicate isSink(DataFlow::Node sink) { sink instanceof SpelExpressionEvaluationSink } - - override predicate isAdditionalTaintStep(DataFlow::Node node1, DataFlow::Node node2) { - any(SpelExpressionInjectionAdditionalTaintStep c).step(node1, node2) - } -} - -from DataFlow::PathNode source, DataFlow::PathNode sink, SpELInjectionConfig conf +from DataFlow::PathNode source, DataFlow::PathNode sink, SpelInjectionConfig conf where conf.hasFlowPath(source, sink) select sink.getNode(), source, sink, "SpEL injection from $@.", source.getNode(), "this user input" diff --git a/java/ql/src/semmle/code/java/security/SpelInjection.qll b/java/ql/src/semmle/code/java/security/SpelInjectionQuery.qll similarity index 88% rename from java/ql/src/semmle/code/java/security/SpelInjection.qll rename to java/ql/src/semmle/code/java/security/SpelInjectionQuery.qll index 420ef66f0dd..c9baa42a587 100644 --- a/java/ql/src/semmle/code/java/security/SpelInjection.qll +++ b/java/ql/src/semmle/code/java/security/SpelInjectionQuery.qll @@ -2,24 +2,11 @@ import java import semmle.code.java.dataflow.DataFlow -import semmle.code.java.dataflow.ExternalFlow import semmle.code.java.dataflow.FlowSources /** A data flow sink for unvalidated user input that is used to construct SpEL expressions. */ abstract class SpelExpressionEvaluationSink extends DataFlow::ExprNode { } -private class SpelExpressionEvaluationModel extends SinkModelCsv { - override predicate row(string row) { - row = - [ - "org.springframework.expression;Expression;true;getValue;;;Argument[-1];spel", - "org.springframework.expression;Expression;true;getValueTypeDescriptor;;;Argument[-1];spel", - "org.springframework.expression;Expression;true;getValueType;;;Argument[-1];spel", - "org.springframework.expression;Expression;true;setValue;;;Argument[-1];spel" - ] - } -} - /** Default sink for SpEL injection vulnerabilities. */ private class DefaultSpelExpressionEvaluationSink extends SpelExpressionEvaluationSink { DefaultSpelExpressionEvaluationSink() { @@ -53,6 +40,22 @@ private class DefaultSpelExpressionInjectionAdditionalTaintStep extends SpelExpr } } +/** + * A taint-tracking configuration for unsafe user input + * that is used to construct and evaluate a SpEL expression. + */ +class SpelInjectionConfig extends TaintTracking::Configuration { + SpelInjectionConfig() { this = "SpelInjectionConfig" } + + override predicate isSource(DataFlow::Node source) { source instanceof RemoteFlowSource } + + override predicate isSink(DataFlow::Node sink) { sink instanceof SpelExpressionEvaluationSink } + + override predicate isAdditionalTaintStep(DataFlow::Node node1, DataFlow::Node node2) { + any(SpelExpressionInjectionAdditionalTaintStep c).step(node1, node2) + } +} + /** * A configuration for safe evaluation context that may be used in expression evaluation. */ diff --git a/java/ql/src/semmle/code/java/security/SpelInjectionSinkModels.qll b/java/ql/src/semmle/code/java/security/SpelInjectionSinkModels.qll new file mode 100644 index 00000000000..c7bf5d1636d --- /dev/null +++ b/java/ql/src/semmle/code/java/security/SpelInjectionSinkModels.qll @@ -0,0 +1,15 @@ +/** Provides sink models relating to SpEL injection vulnerabilities. */ + +import semmle.code.java.dataflow.ExternalFlow + +private class SpelExpressionEvaluationModel extends SinkModelCsv { + override predicate row(string row) { + row = + [ + "org.springframework.expression;Expression;true;getValue;;;Argument[-1];spel", + "org.springframework.expression;Expression;true;getValueTypeDescriptor;;;Argument[-1];spel", + "org.springframework.expression;Expression;true;getValueType;;;Argument[-1];spel", + "org.springframework.expression;Expression;true;setValue;;;Argument[-1];spel" + ] + } +} diff --git a/java/ql/test/query-tests/security/CWE-094/SpelInjectionTest.ql b/java/ql/test/query-tests/security/CWE-094/SpelInjectionTest.ql index bbc56b33cb7..1da99aa3de8 100644 --- a/java/ql/test/query-tests/security/CWE-094/SpelInjectionTest.ql +++ b/java/ql/test/query-tests/security/CWE-094/SpelInjectionTest.ql @@ -1,21 +1,9 @@ import java import semmle.code.java.dataflow.TaintTracking import semmle.code.java.dataflow.FlowSources -import semmle.code.java.security.SpelInjection +import semmle.code.java.security.SpelInjectionQuery import TestUtilities.InlineExpectationsTest -class Conf extends TaintTracking::Configuration { - Conf() { this = "test:cwe:spel-injection" } - - override predicate isSource(DataFlow::Node source) { source instanceof RemoteFlowSource } - - override predicate isSink(DataFlow::Node sink) { sink instanceof SpelExpressionEvaluationSink } - - override predicate isAdditionalTaintStep(DataFlow::Node node1, DataFlow::Node node2) { - any(SpelExpressionInjectionAdditionalTaintStep c).step(node1, node2) - } -} - class HasSpelInjectionTest extends InlineExpectationsTest { HasSpelInjectionTest() { this = "HasSpelInjectionTest" } @@ -23,7 +11,9 @@ class HasSpelInjectionTest extends InlineExpectationsTest { override predicate hasActualResult(Location location, string element, string tag, string value) { tag = "hasSpelInjection" and - exists(DataFlow::Node src, DataFlow::Node sink, Conf conf | conf.hasFlow(src, sink) | + exists(DataFlow::Node src, DataFlow::Node sink, SpelInjectionConfig conf | + conf.hasFlow(src, sink) + | sink.getLocation() = location and element = sink.toString() and value = "" From 91f46624b6aba4e3039d506b4993850f094f94f6 Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Tue, 20 Jul 2021 10:35:59 +0200 Subject: [PATCH 601/741] Refactor SpelInjection.qll --- .../frameworks/spring/SpringExpression.qll | 48 +++++++++ .../code/java/security/SpelInjection.qll | 54 ++++++++++ .../code/java/security/SpelInjectionQuery.qll | 100 ++++-------------- .../java/security/SpelInjectionSinkModels.qll | 15 --- 4 files changed, 121 insertions(+), 96 deletions(-) create mode 100644 java/ql/src/semmle/code/java/frameworks/spring/SpringExpression.qll create mode 100644 java/ql/src/semmle/code/java/security/SpelInjection.qll delete mode 100644 java/ql/src/semmle/code/java/security/SpelInjectionSinkModels.qll diff --git a/java/ql/src/semmle/code/java/frameworks/spring/SpringExpression.qll b/java/ql/src/semmle/code/java/frameworks/spring/SpringExpression.qll new file mode 100644 index 00000000000..624ea8292f1 --- /dev/null +++ b/java/ql/src/semmle/code/java/frameworks/spring/SpringExpression.qll @@ -0,0 +1,48 @@ +/** + * Provides classes for working with the Spring Expression Language (SpEL). + */ + +import java + +/** + * Methods that trigger the evaluation of a SpEL expression. + */ +class ExpressionEvaluationMethod extends Method { + ExpressionEvaluationMethod() { + this.getDeclaringType().getASupertype*() instanceof Expression and + this.hasName(["getValue", "getValueTypeDescriptor", "getValueType", "setValue"]) + } +} + +/** + * The class `org.springframework.expression.ExpressionParser`. + */ +class ExpressionParser extends RefType { + ExpressionParser() { hasQualifiedName("org.springframework.expression", "ExpressionParser") } +} + +/** + * The class `org.springframework.expression.spel.support."SimpleEvaluationContext$Builder`. + */ +class SimpleEvaluationContextBuilder extends RefType { + SimpleEvaluationContextBuilder() { + hasQualifiedName("org.springframework.expression.spel.support", + "SimpleEvaluationContext$Builder") + } +} + +/** + * The class `org.springframework.expression.Expression`. + */ +class Expression extends RefType { + Expression() { hasQualifiedName("org.springframework.expression", "Expression") } +} + +/** + * The class `org.springframework.expression.spel.support.SimpleEvaluationContext`. + */ +class SimpleEvaluationContext extends RefType { + SimpleEvaluationContext() { + hasQualifiedName("org.springframework.expression.spel.support", "SimpleEvaluationContext") + } +} diff --git a/java/ql/src/semmle/code/java/security/SpelInjection.qll b/java/ql/src/semmle/code/java/security/SpelInjection.qll new file mode 100644 index 00000000000..665224e8fab --- /dev/null +++ b/java/ql/src/semmle/code/java/security/SpelInjection.qll @@ -0,0 +1,54 @@ +/** Provides classes to reason about SpEL injection attacks. */ + +import java +import semmle.code.java.dataflow.DataFlow +import semmle.code.java.dataflow.ExternalFlow +import semmle.code.java.frameworks.spring.SpringExpression + +/** A data flow sink for unvalidated user input that is used to construct SpEL expressions. */ +abstract class SpelExpressionEvaluationSink extends DataFlow::ExprNode { } + +private class SpelExpressionEvaluationModel extends SinkModelCsv { + override predicate row(string row) { + row = + [ + "org.springframework.expression;Expression;true;getValue;;;Argument[-1];spel", + "org.springframework.expression;Expression;true;getValueTypeDescriptor;;;Argument[-1];spel", + "org.springframework.expression;Expression;true;getValueType;;;Argument[-1];spel", + "org.springframework.expression;Expression;true;setValue;;;Argument[-1];spel" + ] + } +} + +/** + * A unit class for adding additional taint steps. + * + * Extend this class to add additional taint steps that should apply to the `SpELInjectionConfig`. + */ +class SpelExpressionInjectionAdditionalTaintStep extends Unit { + /** + * Holds if the step from `node1` to `node2` should be considered a taint + * step for the `SpELInjectionConfig` configuration. + */ + abstract predicate step(DataFlow::Node node1, DataFlow::Node node2); +} + +/** A set of additional taint steps to consider when taint tracking SpEL related data flows. */ +private class DefaultSpelExpressionInjectionAdditionalTaintStep extends SpelExpressionInjectionAdditionalTaintStep { + override predicate step(DataFlow::Node node1, DataFlow::Node node2) { + expressionParsingStep(node1, node2) + } +} + +/** + * Holds if `node1` to `node2` is a dataflow step that parses a SpEL expression, + * by calling `parser.parseExpression(tainted)`. + */ +private predicate expressionParsingStep(DataFlow::Node node1, DataFlow::Node node2) { + exists(MethodAccess ma, Method m | ma.getMethod() = m | + m.getDeclaringType().getASupertype*() instanceof ExpressionParser and + m.hasName(["parseExpression", "parseRaw"]) and + ma.getAnArgument() = node1.asExpr() and + node2.asExpr() = ma + ) +} diff --git a/java/ql/src/semmle/code/java/security/SpelInjectionQuery.qll b/java/ql/src/semmle/code/java/security/SpelInjectionQuery.qll index c9baa42a587..98140baeb01 100644 --- a/java/ql/src/semmle/code/java/security/SpelInjectionQuery.qll +++ b/java/ql/src/semmle/code/java/security/SpelInjectionQuery.qll @@ -1,44 +1,10 @@ -/** Provides classes to reason about SpEL injection attacks. */ +/** Provides taint tracking and dataflow configurations to be used in SpEL injection queries. */ import java import semmle.code.java.dataflow.DataFlow import semmle.code.java.dataflow.FlowSources - -/** A data flow sink for unvalidated user input that is used to construct SpEL expressions. */ -abstract class SpelExpressionEvaluationSink extends DataFlow::ExprNode { } - -/** Default sink for SpEL injection vulnerabilities. */ -private class DefaultSpelExpressionEvaluationSink extends SpelExpressionEvaluationSink { - DefaultSpelExpressionEvaluationSink() { - exists(MethodAccess ma | - sinkNode(this, "spel") and - this.asExpr() = ma.getQualifier() and - not exists(SafeEvaluationContextFlowConfig config | - config.hasFlowTo(DataFlow::exprNode(ma.getArgument(0))) - ) - ) - } -} - -/** - * A unit class for adding additional taint steps. - * - * Extend this class to add additional taint steps that should apply to the `SpELInjectionConfig`. - */ -class SpelExpressionInjectionAdditionalTaintStep extends Unit { - /** - * Holds if the step from `node1` to `node2` should be considered a taint - * step for the `SpELInjectionConfig` configuration. - */ - abstract predicate step(DataFlow::Node node1, DataFlow::Node node2); -} - -/** A set of additional taint steps to consider when taint tracking SpEL related data flows. */ -private class DefaultSpelExpressionInjectionAdditionalTaintStep extends SpelExpressionInjectionAdditionalTaintStep { - override predicate step(DataFlow::Node node1, DataFlow::Node node2) { - expressionParsingStep(node1, node2) - } -} +import semmle.code.java.frameworks.spring.SpringExpression +import semmle.code.java.security.SpelInjection /** * A taint-tracking configuration for unsafe user input @@ -56,6 +22,19 @@ class SpelInjectionConfig extends TaintTracking::Configuration { } } +/** Default sink for SpEL injection vulnerabilities. */ +private class DefaultSpelExpressionEvaluationSink extends SpelExpressionEvaluationSink { + DefaultSpelExpressionEvaluationSink() { + exists(MethodAccess ma | + sinkNode(this, "spel") and + this.asExpr() = ma.getQualifier() and + not exists(SafeEvaluationContextFlowConfig config | + config.hasFlowTo(DataFlow::exprNode(ma.getArgument(0))) + ) + ) + } +} + /** * A configuration for safe evaluation context that may be used in expression evaluation. */ @@ -74,6 +53,9 @@ private class SafeEvaluationContextFlowConfig extends DataFlow2::Configuration { override int fieldFlowBranchLimit() { result = 0 } } +/** + * A `ContextSource` that is safe from SpEL injection + */ private class SafeContextSource extends DataFlow::ExprNode { SafeContextSource() { isSimpleEvaluationContextConstructorCall(getExpr()) or @@ -102,47 +84,3 @@ private predicate isSimpleEvaluationContextBuilderCall(Expr expr) { ma = expr ) } - -/** - * Methods that trigger evaluation of an expression. - */ -private class ExpressionEvaluationMethod extends Method { - ExpressionEvaluationMethod() { - this.getDeclaringType().getASupertype*() instanceof Expression and - this.hasName(["getValue", "getValueTypeDescriptor", "getValueType", "setValue"]) - } -} - -/** - * Holds if `node1` to `node2` is a dataflow step that parses a SpEL expression, - * by calling `parser.parseExpression(tainted)`. - */ -private predicate expressionParsingStep(DataFlow::Node node1, DataFlow::Node node2) { - exists(MethodAccess ma, Method m | ma.getMethod() = m | - m.getDeclaringType().getASupertype*() instanceof ExpressionParser and - m.hasName(["parseExpression", "parseRaw"]) and - ma.getAnArgument() = node1.asExpr() and - node2.asExpr() = ma - ) -} - -private class SimpleEvaluationContext extends RefType { - SimpleEvaluationContext() { - hasQualifiedName("org.springframework.expression.spel.support", "SimpleEvaluationContext") - } -} - -private class SimpleEvaluationContextBuilder extends RefType { - SimpleEvaluationContextBuilder() { - hasQualifiedName("org.springframework.expression.spel.support", - "SimpleEvaluationContext$Builder") - } -} - -private class Expression extends RefType { - Expression() { hasQualifiedName("org.springframework.expression", "Expression") } -} - -private class ExpressionParser extends RefType { - ExpressionParser() { hasQualifiedName("org.springframework.expression", "ExpressionParser") } -} diff --git a/java/ql/src/semmle/code/java/security/SpelInjectionSinkModels.qll b/java/ql/src/semmle/code/java/security/SpelInjectionSinkModels.qll deleted file mode 100644 index c7bf5d1636d..00000000000 --- a/java/ql/src/semmle/code/java/security/SpelInjectionSinkModels.qll +++ /dev/null @@ -1,15 +0,0 @@ -/** Provides sink models relating to SpEL injection vulnerabilities. */ - -import semmle.code.java.dataflow.ExternalFlow - -private class SpelExpressionEvaluationModel extends SinkModelCsv { - override predicate row(string row) { - row = - [ - "org.springframework.expression;Expression;true;getValue;;;Argument[-1];spel", - "org.springframework.expression;Expression;true;getValueTypeDescriptor;;;Argument[-1];spel", - "org.springframework.expression;Expression;true;getValueType;;;Argument[-1];spel", - "org.springframework.expression;Expression;true;setValue;;;Argument[-1];spel" - ] - } -} From 6bf1e87bbe389512725f247b249da81035cf66af Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Tue, 20 Jul 2021 14:52:02 +0200 Subject: [PATCH 602/741] Remove CSV sinks; make imports private --- .../src/Security/CWE/CWE-094/SpelInjection.ql | 1 + .../code/java/security/SpelInjection.qll | 18 +++--------------- .../code/java/security/SpelInjectionQuery.qll | 12 ++++++------ 3 files changed, 10 insertions(+), 21 deletions(-) diff --git a/java/ql/src/Security/CWE/CWE-094/SpelInjection.ql b/java/ql/src/Security/CWE/CWE-094/SpelInjection.ql index 586b265cc73..00f4ee785a4 100644 --- a/java/ql/src/Security/CWE/CWE-094/SpelInjection.ql +++ b/java/ql/src/Security/CWE/CWE-094/SpelInjection.ql @@ -12,6 +12,7 @@ import java import semmle.code.java.security.SpelInjectionQuery +import semmle.code.java.dataflow.DataFlow import DataFlow::PathGraph from DataFlow::PathNode source, DataFlow::PathNode sink, SpelInjectionConfig conf diff --git a/java/ql/src/semmle/code/java/security/SpelInjection.qll b/java/ql/src/semmle/code/java/security/SpelInjection.qll index 665224e8fab..d4554ef4b6b 100644 --- a/java/ql/src/semmle/code/java/security/SpelInjection.qll +++ b/java/ql/src/semmle/code/java/security/SpelInjection.qll @@ -1,25 +1,13 @@ /** Provides classes to reason about SpEL injection attacks. */ import java -import semmle.code.java.dataflow.DataFlow -import semmle.code.java.dataflow.ExternalFlow -import semmle.code.java.frameworks.spring.SpringExpression +private import semmle.code.java.dataflow.DataFlow +private import semmle.code.java.dataflow.ExternalFlow +private import semmle.code.java.frameworks.spring.SpringExpression /** A data flow sink for unvalidated user input that is used to construct SpEL expressions. */ abstract class SpelExpressionEvaluationSink extends DataFlow::ExprNode { } -private class SpelExpressionEvaluationModel extends SinkModelCsv { - override predicate row(string row) { - row = - [ - "org.springframework.expression;Expression;true;getValue;;;Argument[-1];spel", - "org.springframework.expression;Expression;true;getValueTypeDescriptor;;;Argument[-1];spel", - "org.springframework.expression;Expression;true;getValueType;;;Argument[-1];spel", - "org.springframework.expression;Expression;true;setValue;;;Argument[-1];spel" - ] - } -} - /** * A unit class for adding additional taint steps. * diff --git a/java/ql/src/semmle/code/java/security/SpelInjectionQuery.qll b/java/ql/src/semmle/code/java/security/SpelInjectionQuery.qll index 98140baeb01..65a6d6df071 100644 --- a/java/ql/src/semmle/code/java/security/SpelInjectionQuery.qll +++ b/java/ql/src/semmle/code/java/security/SpelInjectionQuery.qll @@ -1,10 +1,10 @@ /** Provides taint tracking and dataflow configurations to be used in SpEL injection queries. */ import java -import semmle.code.java.dataflow.DataFlow -import semmle.code.java.dataflow.FlowSources -import semmle.code.java.frameworks.spring.SpringExpression -import semmle.code.java.security.SpelInjection +private import semmle.code.java.dataflow.FlowSources +private import semmle.code.java.dataflow.TaintTracking +private import semmle.code.java.frameworks.spring.SpringExpression +private import semmle.code.java.security.SpelInjection /** * A taint-tracking configuration for unsafe user input @@ -26,8 +26,8 @@ class SpelInjectionConfig extends TaintTracking::Configuration { private class DefaultSpelExpressionEvaluationSink extends SpelExpressionEvaluationSink { DefaultSpelExpressionEvaluationSink() { exists(MethodAccess ma | - sinkNode(this, "spel") and - this.asExpr() = ma.getQualifier() and + ma.getMethod() instanceof ExpressionEvaluationMethod and + ma.getQualifier() = this.asExpr() and not exists(SafeEvaluationContextFlowConfig config | config.hasFlowTo(DataFlow::exprNode(ma.getArgument(0))) ) From d10dbbdd9d1624eb38d9c2d3ba33a8341efdb809 Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Mon, 26 Jul 2021 16:57:12 +0200 Subject: [PATCH 603/741] Apply suggestions from code review Co-authored-by: Marcono1234 --- java/change-notes/2021-06-08-spel-injection-query.md | 2 +- .../src/semmle/code/java/frameworks/spring/SpringExpression.qll | 2 +- java/ql/src/semmle/code/java/security/SpelInjectionQuery.qll | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/java/change-notes/2021-06-08-spel-injection-query.md b/java/change-notes/2021-06-08-spel-injection-query.md index 6e93fe66838..1191eac7bd3 100644 --- a/java/change-notes/2021-06-08-spel-injection-query.md +++ b/java/change-notes/2021-06-08-spel-injection-query.md @@ -1,2 +1,2 @@ lgtm,codescanning -* The query "Expression language injection (Spring)" (`java/spel-expression-injection`) has been promoted from experimental to the main query pack. Its results will now appear by default. This query was originally [submitted as an experimental query by @artem-smotrakov](https://github.com/github/codeql/pull/3291) \ No newline at end of file +* The query "Expression language injection (Spring)" (`java/spel-expression-injection`) has been promoted from experimental to the main query pack. Its results will now appear by default. This query was originally [submitted as an experimental query by @artem-smotrakov](https://github.com/github/codeql/pull/3291). diff --git a/java/ql/src/semmle/code/java/frameworks/spring/SpringExpression.qll b/java/ql/src/semmle/code/java/frameworks/spring/SpringExpression.qll index 624ea8292f1..0b79587c551 100644 --- a/java/ql/src/semmle/code/java/frameworks/spring/SpringExpression.qll +++ b/java/ql/src/semmle/code/java/frameworks/spring/SpringExpression.qll @@ -22,7 +22,7 @@ class ExpressionParser extends RefType { } /** - * The class `org.springframework.expression.spel.support."SimpleEvaluationContext$Builder`. + * The class `org.springframework.expression.spel.support.SimpleEvaluationContext$Builder`. */ class SimpleEvaluationContextBuilder extends RefType { SimpleEvaluationContextBuilder() { diff --git a/java/ql/src/semmle/code/java/security/SpelInjectionQuery.qll b/java/ql/src/semmle/code/java/security/SpelInjectionQuery.qll index 65a6d6df071..ffccce1fbfa 100644 --- a/java/ql/src/semmle/code/java/security/SpelInjectionQuery.qll +++ b/java/ql/src/semmle/code/java/security/SpelInjectionQuery.qll @@ -54,7 +54,7 @@ private class SafeEvaluationContextFlowConfig extends DataFlow2::Configuration { } /** - * A `ContextSource` that is safe from SpEL injection + * A `ContextSource` that is safe from SpEL injection. */ private class SafeContextSource extends DataFlow::ExprNode { SafeContextSource() { From 3520fed75223d9285b8d67d8d0817213f849dd4d Mon Sep 17 00:00:00 2001 From: mc <42146119+mchammer01@users.noreply.github.com> Date: Tue, 27 Jul 2021 14:44:46 +0100 Subject: [PATCH 604/741] Update SpelInjection.qhelp --- java/ql/src/Security/CWE/CWE-094/SpelInjection.qhelp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/java/ql/src/Security/CWE/CWE-094/SpelInjection.qhelp b/java/ql/src/Security/CWE/CWE-094/SpelInjection.qhelp index 74bc1b21325..23ba5d6f6ba 100644 --- a/java/ql/src/Security/CWE/CWE-094/SpelInjection.qhelp +++ b/java/ql/src/Security/CWE/CWE-094/SpelInjection.qhelp @@ -4,7 +4,7 @@

    The Spring Expression Language (SpEL) is a powerful expression language -provided by Spring Framework. The language offers many features +provided by the Spring Framework. The language offers many features including invocation of methods available in the JVM. If a SpEL expression is built using attacker-controlled data, and then evaluated in a powerful context, @@ -31,7 +31,7 @@ that doesn't allow arbitrary method invocation.

    The following example uses untrusted data to build a SpEL expression -and then runs it in the default powerfull context. +and then runs it in the default powerful context.

    @@ -53,4 +53,4 @@ However, it's recommended to avoid using untrusted input in SpEL expressions. Expression Language Injection. - \ No newline at end of file + From 6d9a88d1c889aba8ad3ff4f33d72651d12e494b4 Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Mon, 27 Sep 2021 11:43:46 +0200 Subject: [PATCH 605/741] Move to lib --- .../frameworks/spring/SpringExpression.qll | 0 .../code/java/security/SpelInjection.qll | 0 .../code/java/security/SpelInjectionQuery.qll | 0 .../security/CWE-094/SpelInjection.expected | 76 ------------------- 4 files changed, 76 deletions(-) rename java/ql/{src => lib}/semmle/code/java/frameworks/spring/SpringExpression.qll (100%) rename java/ql/{src => lib}/semmle/code/java/security/SpelInjection.qll (100%) rename java/ql/{src => lib}/semmle/code/java/security/SpelInjectionQuery.qll (100%) delete mode 100644 java/ql/test/query-tests/security/CWE-094/SpelInjection.expected diff --git a/java/ql/src/semmle/code/java/frameworks/spring/SpringExpression.qll b/java/ql/lib/semmle/code/java/frameworks/spring/SpringExpression.qll similarity index 100% rename from java/ql/src/semmle/code/java/frameworks/spring/SpringExpression.qll rename to java/ql/lib/semmle/code/java/frameworks/spring/SpringExpression.qll diff --git a/java/ql/src/semmle/code/java/security/SpelInjection.qll b/java/ql/lib/semmle/code/java/security/SpelInjection.qll similarity index 100% rename from java/ql/src/semmle/code/java/security/SpelInjection.qll rename to java/ql/lib/semmle/code/java/security/SpelInjection.qll diff --git a/java/ql/src/semmle/code/java/security/SpelInjectionQuery.qll b/java/ql/lib/semmle/code/java/security/SpelInjectionQuery.qll similarity index 100% rename from java/ql/src/semmle/code/java/security/SpelInjectionQuery.qll rename to java/ql/lib/semmle/code/java/security/SpelInjectionQuery.qll diff --git a/java/ql/test/query-tests/security/CWE-094/SpelInjection.expected b/java/ql/test/query-tests/security/CWE-094/SpelInjection.expected deleted file mode 100644 index 63d28d74ac8..00000000000 --- a/java/ql/test/query-tests/security/CWE-094/SpelInjection.expected +++ /dev/null @@ -1,76 +0,0 @@ -edges -| SpelInjection.java:15:22:15:44 | getInputStream(...) : InputStream | SpelInjection.java:18:13:18:14 | in : InputStream | -| SpelInjection.java:18:13:18:14 | in : InputStream | SpelInjection.java:18:21:18:25 | bytes [post update] : byte[] | -| SpelInjection.java:18:21:18:25 | bytes [post update] : byte[] | SpelInjection.java:19:31:19:35 | bytes : byte[] | -| SpelInjection.java:19:20:19:42 | new String(...) : String | SpelInjection.java:23:5:23:14 | expression | -| SpelInjection.java:19:31:19:35 | bytes : byte[] | SpelInjection.java:19:20:19:42 | new String(...) : String | -| SpelInjection.java:27:22:27:44 | getInputStream(...) : InputStream | SpelInjection.java:30:13:30:14 | in : InputStream | -| SpelInjection.java:30:13:30:14 | in : InputStream | SpelInjection.java:30:21:30:25 | bytes [post update] : byte[] | -| SpelInjection.java:30:21:30:25 | bytes [post update] : byte[] | SpelInjection.java:31:31:31:35 | bytes : byte[] | -| SpelInjection.java:31:20:31:42 | new String(...) : String | SpelInjection.java:34:5:34:14 | expression | -| SpelInjection.java:31:31:31:35 | bytes : byte[] | SpelInjection.java:31:20:31:42 | new String(...) : String | -| SpelInjection.java:38:22:38:44 | getInputStream(...) : InputStream | SpelInjection.java:41:13:41:14 | in : InputStream | -| SpelInjection.java:41:13:41:14 | in : InputStream | SpelInjection.java:41:21:41:25 | bytes [post update] : byte[] | -| SpelInjection.java:41:21:41:25 | bytes [post update] : byte[] | SpelInjection.java:42:31:42:35 | bytes : byte[] | -| SpelInjection.java:42:20:42:42 | new String(...) : String | SpelInjection.java:48:5:48:14 | expression | -| SpelInjection.java:42:31:42:35 | bytes : byte[] | SpelInjection.java:42:20:42:42 | new String(...) : String | -| SpelInjection.java:52:22:52:44 | getInputStream(...) : InputStream | SpelInjection.java:55:13:55:14 | in : InputStream | -| SpelInjection.java:55:13:55:14 | in : InputStream | SpelInjection.java:55:21:55:25 | bytes [post update] : byte[] | -| SpelInjection.java:55:21:55:25 | bytes [post update] : byte[] | SpelInjection.java:56:31:56:35 | bytes : byte[] | -| SpelInjection.java:56:20:56:42 | new String(...) : String | SpelInjection.java:59:5:59:14 | expression | -| SpelInjection.java:56:31:56:35 | bytes : byte[] | SpelInjection.java:56:20:56:42 | new String(...) : String | -| SpelInjection.java:63:22:63:44 | getInputStream(...) : InputStream | SpelInjection.java:66:13:66:14 | in : InputStream | -| SpelInjection.java:66:13:66:14 | in : InputStream | SpelInjection.java:66:21:66:25 | bytes [post update] : byte[] | -| SpelInjection.java:66:21:66:25 | bytes [post update] : byte[] | SpelInjection.java:67:31:67:35 | bytes : byte[] | -| SpelInjection.java:67:20:67:42 | new String(...) : String | SpelInjection.java:70:5:70:14 | expression | -| SpelInjection.java:67:31:67:35 | bytes : byte[] | SpelInjection.java:67:20:67:42 | new String(...) : String | -| SpelInjection.java:74:22:74:44 | getInputStream(...) : InputStream | SpelInjection.java:77:13:77:14 | in : InputStream | -| SpelInjection.java:77:13:77:14 | in : InputStream | SpelInjection.java:77:21:77:25 | bytes [post update] : byte[] | -| SpelInjection.java:77:21:77:25 | bytes [post update] : byte[] | SpelInjection.java:78:31:78:35 | bytes : byte[] | -| SpelInjection.java:78:20:78:42 | new String(...) : String | SpelInjection.java:83:5:83:14 | expression | -| SpelInjection.java:78:31:78:35 | bytes : byte[] | SpelInjection.java:78:20:78:42 | new String(...) : String | -nodes -| SpelInjection.java:15:22:15:44 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| SpelInjection.java:18:13:18:14 | in : InputStream | semmle.label | in : InputStream | -| SpelInjection.java:18:21:18:25 | bytes [post update] : byte[] | semmle.label | bytes [post update] : byte[] | -| SpelInjection.java:19:20:19:42 | new String(...) : String | semmle.label | new String(...) : String | -| SpelInjection.java:19:31:19:35 | bytes : byte[] | semmle.label | bytes : byte[] | -| SpelInjection.java:23:5:23:14 | expression | semmle.label | expression | -| SpelInjection.java:27:22:27:44 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| SpelInjection.java:30:13:30:14 | in : InputStream | semmle.label | in : InputStream | -| SpelInjection.java:30:21:30:25 | bytes [post update] : byte[] | semmle.label | bytes [post update] : byte[] | -| SpelInjection.java:31:20:31:42 | new String(...) : String | semmle.label | new String(...) : String | -| SpelInjection.java:31:31:31:35 | bytes : byte[] | semmle.label | bytes : byte[] | -| SpelInjection.java:34:5:34:14 | expression | semmle.label | expression | -| SpelInjection.java:38:22:38:44 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| SpelInjection.java:41:13:41:14 | in : InputStream | semmle.label | in : InputStream | -| SpelInjection.java:41:21:41:25 | bytes [post update] : byte[] | semmle.label | bytes [post update] : byte[] | -| SpelInjection.java:42:20:42:42 | new String(...) : String | semmle.label | new String(...) : String | -| SpelInjection.java:42:31:42:35 | bytes : byte[] | semmle.label | bytes : byte[] | -| SpelInjection.java:48:5:48:14 | expression | semmle.label | expression | -| SpelInjection.java:52:22:52:44 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| SpelInjection.java:55:13:55:14 | in : InputStream | semmle.label | in : InputStream | -| SpelInjection.java:55:21:55:25 | bytes [post update] : byte[] | semmle.label | bytes [post update] : byte[] | -| SpelInjection.java:56:20:56:42 | new String(...) : String | semmle.label | new String(...) : String | -| SpelInjection.java:56:31:56:35 | bytes : byte[] | semmle.label | bytes : byte[] | -| SpelInjection.java:59:5:59:14 | expression | semmle.label | expression | -| SpelInjection.java:63:22:63:44 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| SpelInjection.java:66:13:66:14 | in : InputStream | semmle.label | in : InputStream | -| SpelInjection.java:66:21:66:25 | bytes [post update] : byte[] | semmle.label | bytes [post update] : byte[] | -| SpelInjection.java:67:20:67:42 | new String(...) : String | semmle.label | new String(...) : String | -| SpelInjection.java:67:31:67:35 | bytes : byte[] | semmle.label | bytes : byte[] | -| SpelInjection.java:70:5:70:14 | expression | semmle.label | expression | -| SpelInjection.java:74:22:74:44 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| SpelInjection.java:77:13:77:14 | in : InputStream | semmle.label | in : InputStream | -| SpelInjection.java:77:21:77:25 | bytes [post update] : byte[] | semmle.label | bytes [post update] : byte[] | -| SpelInjection.java:78:20:78:42 | new String(...) : String | semmle.label | new String(...) : String | -| SpelInjection.java:78:31:78:35 | bytes : byte[] | semmle.label | bytes : byte[] | -| SpelInjection.java:83:5:83:14 | expression | semmle.label | expression | -subpaths -#select -| SpelInjection.java:23:5:23:14 | expression | SpelInjection.java:15:22:15:44 | getInputStream(...) : InputStream | SpelInjection.java:23:5:23:14 | expression | SpEL injection from $@. | SpelInjection.java:15:22:15:44 | getInputStream(...) | this user input | -| SpelInjection.java:34:5:34:14 | expression | SpelInjection.java:27:22:27:44 | getInputStream(...) : InputStream | SpelInjection.java:34:5:34:14 | expression | SpEL injection from $@. | SpelInjection.java:27:22:27:44 | getInputStream(...) | this user input | -| SpelInjection.java:48:5:48:14 | expression | SpelInjection.java:38:22:38:44 | getInputStream(...) : InputStream | SpelInjection.java:48:5:48:14 | expression | SpEL injection from $@. | SpelInjection.java:38:22:38:44 | getInputStream(...) | this user input | -| SpelInjection.java:59:5:59:14 | expression | SpelInjection.java:52:22:52:44 | getInputStream(...) : InputStream | SpelInjection.java:59:5:59:14 | expression | SpEL injection from $@. | SpelInjection.java:52:22:52:44 | getInputStream(...) | this user input | -| SpelInjection.java:70:5:70:14 | expression | SpelInjection.java:63:22:63:44 | getInputStream(...) : InputStream | SpelInjection.java:70:5:70:14 | expression | SpEL injection from $@. | SpelInjection.java:63:22:63:44 | getInputStream(...) | this user input | -| SpelInjection.java:83:5:83:14 | expression | SpelInjection.java:74:22:74:44 | getInputStream(...) : InputStream | SpelInjection.java:83:5:83:14 | expression | SpEL injection from $@. | SpelInjection.java:74:22:74:44 | getInputStream(...) | this user input | From c792567904e7e833d62a0be28a025d05f77cf1db Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Mon, 14 Jun 2021 15:11:23 +0200 Subject: [PATCH 606/741] Move from experimental --- .../{experimental => }/Security/CWE/CWE-074/XsltInjection.java | 0 .../{experimental => }/Security/CWE/CWE-074/XsltInjection.qhelp | 0 .../{experimental => }/Security/CWE/CWE-074/XsltInjection.ql | 0 .../Security/CWE/CWE-074/XsltInjectionLib.qll | 0 .../query-tests/security/CWE-074/XsltInjection.qlref | 1 - java/ql/test/experimental/query-tests/security/CWE-074/options | 1 - .../query-tests/security/CWE-074/XsltInjection.expected | 0 .../query-tests/security/CWE-074/XsltInjection.java | 0 java/ql/test/query-tests/security/CWE-074/XsltInjection.qlref | 1 + java/ql/test/query-tests/security/CWE-074/options | 2 +- .../stubs/Saxon-HE-9.9.1-7/net/sf/saxon/Configuration.java | 0 .../stubs/Saxon-HE-9.9.1-7/net/sf/saxon/lib/SourceResolver.java | 0 .../stubs/Saxon-HE-9.9.1-7/net/sf/saxon/om/NotationSet.java | 0 .../net/sf/saxon/s9api/AbstractXsltTransformer.java | 0 .../stubs/Saxon-HE-9.9.1-7/net/sf/saxon/s9api/Destination.java | 0 .../stubs/Saxon-HE-9.9.1-7/net/sf/saxon/s9api/Processor.java | 0 .../stubs/Saxon-HE-9.9.1-7/net/sf/saxon/s9api/QName.java | 0 .../Saxon-HE-9.9.1-7/net/sf/saxon/s9api/SaxonApiException.java | 0 .../net/sf/saxon/s9api/SaxonApiUncheckedException.java | 0 .../stubs/Saxon-HE-9.9.1-7/net/sf/saxon/s9api/XdmItem.java | 0 .../stubs/Saxon-HE-9.9.1-7/net/sf/saxon/s9api/XdmValue.java | 0 .../Saxon-HE-9.9.1-7/net/sf/saxon/s9api/Xslt30Transformer.java | 0 .../stubs/Saxon-HE-9.9.1-7/net/sf/saxon/s9api/XsltCompiler.java | 0 .../Saxon-HE-9.9.1-7/net/sf/saxon/s9api/XsltExecutable.java | 0 .../stubs/Saxon-HE-9.9.1-7/net/sf/saxon/s9api/XsltPackage.java | 0 .../Saxon-HE-9.9.1-7/net/sf/saxon/s9api/XsltTransformer.java | 0 26 files changed, 2 insertions(+), 3 deletions(-) rename java/ql/src/{experimental => }/Security/CWE/CWE-074/XsltInjection.java (100%) rename java/ql/src/{experimental => }/Security/CWE/CWE-074/XsltInjection.qhelp (100%) rename java/ql/src/{experimental => }/Security/CWE/CWE-074/XsltInjection.ql (100%) rename java/ql/src/{experimental => }/Security/CWE/CWE-074/XsltInjectionLib.qll (100%) delete mode 100644 java/ql/test/experimental/query-tests/security/CWE-074/XsltInjection.qlref delete mode 100644 java/ql/test/experimental/query-tests/security/CWE-074/options rename java/ql/test/{experimental => }/query-tests/security/CWE-074/XsltInjection.expected (100%) rename java/ql/test/{experimental => }/query-tests/security/CWE-074/XsltInjection.java (100%) create mode 100644 java/ql/test/query-tests/security/CWE-074/XsltInjection.qlref rename java/ql/test/{experimental => }/stubs/Saxon-HE-9.9.1-7/net/sf/saxon/Configuration.java (100%) rename java/ql/test/{experimental => }/stubs/Saxon-HE-9.9.1-7/net/sf/saxon/lib/SourceResolver.java (100%) rename java/ql/test/{experimental => }/stubs/Saxon-HE-9.9.1-7/net/sf/saxon/om/NotationSet.java (100%) rename java/ql/test/{experimental => }/stubs/Saxon-HE-9.9.1-7/net/sf/saxon/s9api/AbstractXsltTransformer.java (100%) rename java/ql/test/{experimental => }/stubs/Saxon-HE-9.9.1-7/net/sf/saxon/s9api/Destination.java (100%) rename java/ql/test/{experimental => }/stubs/Saxon-HE-9.9.1-7/net/sf/saxon/s9api/Processor.java (100%) rename java/ql/test/{experimental => }/stubs/Saxon-HE-9.9.1-7/net/sf/saxon/s9api/QName.java (100%) rename java/ql/test/{experimental => }/stubs/Saxon-HE-9.9.1-7/net/sf/saxon/s9api/SaxonApiException.java (100%) rename java/ql/test/{experimental => }/stubs/Saxon-HE-9.9.1-7/net/sf/saxon/s9api/SaxonApiUncheckedException.java (100%) rename java/ql/test/{experimental => }/stubs/Saxon-HE-9.9.1-7/net/sf/saxon/s9api/XdmItem.java (100%) rename java/ql/test/{experimental => }/stubs/Saxon-HE-9.9.1-7/net/sf/saxon/s9api/XdmValue.java (100%) rename java/ql/test/{experimental => }/stubs/Saxon-HE-9.9.1-7/net/sf/saxon/s9api/Xslt30Transformer.java (100%) rename java/ql/test/{experimental => }/stubs/Saxon-HE-9.9.1-7/net/sf/saxon/s9api/XsltCompiler.java (100%) rename java/ql/test/{experimental => }/stubs/Saxon-HE-9.9.1-7/net/sf/saxon/s9api/XsltExecutable.java (100%) rename java/ql/test/{experimental => }/stubs/Saxon-HE-9.9.1-7/net/sf/saxon/s9api/XsltPackage.java (100%) rename java/ql/test/{experimental => }/stubs/Saxon-HE-9.9.1-7/net/sf/saxon/s9api/XsltTransformer.java (100%) diff --git a/java/ql/src/experimental/Security/CWE/CWE-074/XsltInjection.java b/java/ql/src/Security/CWE/CWE-074/XsltInjection.java similarity index 100% rename from java/ql/src/experimental/Security/CWE/CWE-074/XsltInjection.java rename to java/ql/src/Security/CWE/CWE-074/XsltInjection.java diff --git a/java/ql/src/experimental/Security/CWE/CWE-074/XsltInjection.qhelp b/java/ql/src/Security/CWE/CWE-074/XsltInjection.qhelp similarity index 100% rename from java/ql/src/experimental/Security/CWE/CWE-074/XsltInjection.qhelp rename to java/ql/src/Security/CWE/CWE-074/XsltInjection.qhelp diff --git a/java/ql/src/experimental/Security/CWE/CWE-074/XsltInjection.ql b/java/ql/src/Security/CWE/CWE-074/XsltInjection.ql similarity index 100% rename from java/ql/src/experimental/Security/CWE/CWE-074/XsltInjection.ql rename to java/ql/src/Security/CWE/CWE-074/XsltInjection.ql diff --git a/java/ql/src/experimental/Security/CWE/CWE-074/XsltInjectionLib.qll b/java/ql/src/Security/CWE/CWE-074/XsltInjectionLib.qll similarity index 100% rename from java/ql/src/experimental/Security/CWE/CWE-074/XsltInjectionLib.qll rename to java/ql/src/Security/CWE/CWE-074/XsltInjectionLib.qll diff --git a/java/ql/test/experimental/query-tests/security/CWE-074/XsltInjection.qlref b/java/ql/test/experimental/query-tests/security/CWE-074/XsltInjection.qlref deleted file mode 100644 index eb4c280c5df..00000000000 --- a/java/ql/test/experimental/query-tests/security/CWE-074/XsltInjection.qlref +++ /dev/null @@ -1 +0,0 @@ -experimental/Security/CWE/CWE-074/XsltInjection.ql diff --git a/java/ql/test/experimental/query-tests/security/CWE-074/options b/java/ql/test/experimental/query-tests/security/CWE-074/options deleted file mode 100644 index 599f2f5f14a..00000000000 --- a/java/ql/test/experimental/query-tests/security/CWE-074/options +++ /dev/null @@ -1 +0,0 @@ -//semmle-extractor-options: --javac-args -cp ${testdir}/../../../../stubs/springframework-5.3.8:${testdir}/../../../stubs/Saxon-HE-9.9.1-7 diff --git a/java/ql/test/experimental/query-tests/security/CWE-074/XsltInjection.expected b/java/ql/test/query-tests/security/CWE-074/XsltInjection.expected similarity index 100% rename from java/ql/test/experimental/query-tests/security/CWE-074/XsltInjection.expected rename to java/ql/test/query-tests/security/CWE-074/XsltInjection.expected diff --git a/java/ql/test/experimental/query-tests/security/CWE-074/XsltInjection.java b/java/ql/test/query-tests/security/CWE-074/XsltInjection.java similarity index 100% rename from java/ql/test/experimental/query-tests/security/CWE-074/XsltInjection.java rename to java/ql/test/query-tests/security/CWE-074/XsltInjection.java diff --git a/java/ql/test/query-tests/security/CWE-074/XsltInjection.qlref b/java/ql/test/query-tests/security/CWE-074/XsltInjection.qlref new file mode 100644 index 00000000000..9d7fb59ac2c --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-074/XsltInjection.qlref @@ -0,0 +1 @@ +Security/CWE/CWE-074/XsltInjection.ql diff --git a/java/ql/test/query-tests/security/CWE-074/options b/java/ql/test/query-tests/security/CWE-074/options index efb24fabff1..a015486520e 100644 --- a/java/ql/test/query-tests/security/CWE-074/options +++ b/java/ql/test/query-tests/security/CWE-074/options @@ -1 +1 @@ -//semmle-extractor-options: --javac-args -cp ${testdir}/../../../stubs/springframework-5.3.8:${testdir}/../../../stubs/shiro-core-1.5.2:${testdir}/../../../stubs/spring-ldap-2.3.2 +//semmle-extractor-options: --javac-args -cp ${testdir}/../../../stubs/springframework-5.3.8:${testdir}/../../../stubs/shiro-core-1.5.2:${testdir}/../../../stubs/spring-ldap-2.3.2:${testdir}/../../../stubs/Saxon-HE-9.9.1-7 diff --git a/java/ql/test/experimental/stubs/Saxon-HE-9.9.1-7/net/sf/saxon/Configuration.java b/java/ql/test/stubs/Saxon-HE-9.9.1-7/net/sf/saxon/Configuration.java similarity index 100% rename from java/ql/test/experimental/stubs/Saxon-HE-9.9.1-7/net/sf/saxon/Configuration.java rename to java/ql/test/stubs/Saxon-HE-9.9.1-7/net/sf/saxon/Configuration.java diff --git a/java/ql/test/experimental/stubs/Saxon-HE-9.9.1-7/net/sf/saxon/lib/SourceResolver.java b/java/ql/test/stubs/Saxon-HE-9.9.1-7/net/sf/saxon/lib/SourceResolver.java similarity index 100% rename from java/ql/test/experimental/stubs/Saxon-HE-9.9.1-7/net/sf/saxon/lib/SourceResolver.java rename to java/ql/test/stubs/Saxon-HE-9.9.1-7/net/sf/saxon/lib/SourceResolver.java diff --git a/java/ql/test/experimental/stubs/Saxon-HE-9.9.1-7/net/sf/saxon/om/NotationSet.java b/java/ql/test/stubs/Saxon-HE-9.9.1-7/net/sf/saxon/om/NotationSet.java similarity index 100% rename from java/ql/test/experimental/stubs/Saxon-HE-9.9.1-7/net/sf/saxon/om/NotationSet.java rename to java/ql/test/stubs/Saxon-HE-9.9.1-7/net/sf/saxon/om/NotationSet.java diff --git a/java/ql/test/experimental/stubs/Saxon-HE-9.9.1-7/net/sf/saxon/s9api/AbstractXsltTransformer.java b/java/ql/test/stubs/Saxon-HE-9.9.1-7/net/sf/saxon/s9api/AbstractXsltTransformer.java similarity index 100% rename from java/ql/test/experimental/stubs/Saxon-HE-9.9.1-7/net/sf/saxon/s9api/AbstractXsltTransformer.java rename to java/ql/test/stubs/Saxon-HE-9.9.1-7/net/sf/saxon/s9api/AbstractXsltTransformer.java diff --git a/java/ql/test/experimental/stubs/Saxon-HE-9.9.1-7/net/sf/saxon/s9api/Destination.java b/java/ql/test/stubs/Saxon-HE-9.9.1-7/net/sf/saxon/s9api/Destination.java similarity index 100% rename from java/ql/test/experimental/stubs/Saxon-HE-9.9.1-7/net/sf/saxon/s9api/Destination.java rename to java/ql/test/stubs/Saxon-HE-9.9.1-7/net/sf/saxon/s9api/Destination.java diff --git a/java/ql/test/experimental/stubs/Saxon-HE-9.9.1-7/net/sf/saxon/s9api/Processor.java b/java/ql/test/stubs/Saxon-HE-9.9.1-7/net/sf/saxon/s9api/Processor.java similarity index 100% rename from java/ql/test/experimental/stubs/Saxon-HE-9.9.1-7/net/sf/saxon/s9api/Processor.java rename to java/ql/test/stubs/Saxon-HE-9.9.1-7/net/sf/saxon/s9api/Processor.java diff --git a/java/ql/test/experimental/stubs/Saxon-HE-9.9.1-7/net/sf/saxon/s9api/QName.java b/java/ql/test/stubs/Saxon-HE-9.9.1-7/net/sf/saxon/s9api/QName.java similarity index 100% rename from java/ql/test/experimental/stubs/Saxon-HE-9.9.1-7/net/sf/saxon/s9api/QName.java rename to java/ql/test/stubs/Saxon-HE-9.9.1-7/net/sf/saxon/s9api/QName.java diff --git a/java/ql/test/experimental/stubs/Saxon-HE-9.9.1-7/net/sf/saxon/s9api/SaxonApiException.java b/java/ql/test/stubs/Saxon-HE-9.9.1-7/net/sf/saxon/s9api/SaxonApiException.java similarity index 100% rename from java/ql/test/experimental/stubs/Saxon-HE-9.9.1-7/net/sf/saxon/s9api/SaxonApiException.java rename to java/ql/test/stubs/Saxon-HE-9.9.1-7/net/sf/saxon/s9api/SaxonApiException.java diff --git a/java/ql/test/experimental/stubs/Saxon-HE-9.9.1-7/net/sf/saxon/s9api/SaxonApiUncheckedException.java b/java/ql/test/stubs/Saxon-HE-9.9.1-7/net/sf/saxon/s9api/SaxonApiUncheckedException.java similarity index 100% rename from java/ql/test/experimental/stubs/Saxon-HE-9.9.1-7/net/sf/saxon/s9api/SaxonApiUncheckedException.java rename to java/ql/test/stubs/Saxon-HE-9.9.1-7/net/sf/saxon/s9api/SaxonApiUncheckedException.java diff --git a/java/ql/test/experimental/stubs/Saxon-HE-9.9.1-7/net/sf/saxon/s9api/XdmItem.java b/java/ql/test/stubs/Saxon-HE-9.9.1-7/net/sf/saxon/s9api/XdmItem.java similarity index 100% rename from java/ql/test/experimental/stubs/Saxon-HE-9.9.1-7/net/sf/saxon/s9api/XdmItem.java rename to java/ql/test/stubs/Saxon-HE-9.9.1-7/net/sf/saxon/s9api/XdmItem.java diff --git a/java/ql/test/experimental/stubs/Saxon-HE-9.9.1-7/net/sf/saxon/s9api/XdmValue.java b/java/ql/test/stubs/Saxon-HE-9.9.1-7/net/sf/saxon/s9api/XdmValue.java similarity index 100% rename from java/ql/test/experimental/stubs/Saxon-HE-9.9.1-7/net/sf/saxon/s9api/XdmValue.java rename to java/ql/test/stubs/Saxon-HE-9.9.1-7/net/sf/saxon/s9api/XdmValue.java diff --git a/java/ql/test/experimental/stubs/Saxon-HE-9.9.1-7/net/sf/saxon/s9api/Xslt30Transformer.java b/java/ql/test/stubs/Saxon-HE-9.9.1-7/net/sf/saxon/s9api/Xslt30Transformer.java similarity index 100% rename from java/ql/test/experimental/stubs/Saxon-HE-9.9.1-7/net/sf/saxon/s9api/Xslt30Transformer.java rename to java/ql/test/stubs/Saxon-HE-9.9.1-7/net/sf/saxon/s9api/Xslt30Transformer.java diff --git a/java/ql/test/experimental/stubs/Saxon-HE-9.9.1-7/net/sf/saxon/s9api/XsltCompiler.java b/java/ql/test/stubs/Saxon-HE-9.9.1-7/net/sf/saxon/s9api/XsltCompiler.java similarity index 100% rename from java/ql/test/experimental/stubs/Saxon-HE-9.9.1-7/net/sf/saxon/s9api/XsltCompiler.java rename to java/ql/test/stubs/Saxon-HE-9.9.1-7/net/sf/saxon/s9api/XsltCompiler.java diff --git a/java/ql/test/experimental/stubs/Saxon-HE-9.9.1-7/net/sf/saxon/s9api/XsltExecutable.java b/java/ql/test/stubs/Saxon-HE-9.9.1-7/net/sf/saxon/s9api/XsltExecutable.java similarity index 100% rename from java/ql/test/experimental/stubs/Saxon-HE-9.9.1-7/net/sf/saxon/s9api/XsltExecutable.java rename to java/ql/test/stubs/Saxon-HE-9.9.1-7/net/sf/saxon/s9api/XsltExecutable.java diff --git a/java/ql/test/experimental/stubs/Saxon-HE-9.9.1-7/net/sf/saxon/s9api/XsltPackage.java b/java/ql/test/stubs/Saxon-HE-9.9.1-7/net/sf/saxon/s9api/XsltPackage.java similarity index 100% rename from java/ql/test/experimental/stubs/Saxon-HE-9.9.1-7/net/sf/saxon/s9api/XsltPackage.java rename to java/ql/test/stubs/Saxon-HE-9.9.1-7/net/sf/saxon/s9api/XsltPackage.java diff --git a/java/ql/test/experimental/stubs/Saxon-HE-9.9.1-7/net/sf/saxon/s9api/XsltTransformer.java b/java/ql/test/stubs/Saxon-HE-9.9.1-7/net/sf/saxon/s9api/XsltTransformer.java similarity index 100% rename from java/ql/test/experimental/stubs/Saxon-HE-9.9.1-7/net/sf/saxon/s9api/XsltTransformer.java rename to java/ql/test/stubs/Saxon-HE-9.9.1-7/net/sf/saxon/s9api/XsltTransformer.java From d8bb5273e71e60790bbf24e345a01058c0313c76 Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Mon, 14 Jun 2021 15:37:38 +0200 Subject: [PATCH 607/741] Refactor to use CSV sink models --- .../src/Security/CWE/CWE-074/XsltInjection.ql | 21 +- .../code/java/security/XsltInjection.qll} | 230 ++++++++---------- 2 files changed, 118 insertions(+), 133 deletions(-) rename java/ql/src/{Security/CWE/CWE-074/XsltInjectionLib.qll => semmle/code/java/security/XsltInjection.qll} (60%) diff --git a/java/ql/src/Security/CWE/CWE-074/XsltInjection.ql b/java/ql/src/Security/CWE/CWE-074/XsltInjection.ql index 1403573e4b1..cd47d69470f 100644 --- a/java/ql/src/Security/CWE/CWE-074/XsltInjection.ql +++ b/java/ql/src/Security/CWE/CWE-074/XsltInjection.ql @@ -12,9 +12,28 @@ import java import semmle.code.java.dataflow.FlowSources -import XsltInjectionLib +import semmle.code.java.security.XsltInjection import DataFlow::PathGraph +/** + * A taint-tracking configuration for unvalidated user input that is used in XSLT transformation. + */ +class XsltInjectionFlowConfig extends TaintTracking::Configuration { + XsltInjectionFlowConfig() { this = "XsltInjectionFlowConfig" } + + override predicate isSource(DataFlow::Node source) { source instanceof RemoteFlowSource } + + override predicate isSink(DataFlow::Node sink) { sink instanceof XsltInjectionSink } + + override predicate isSanitizer(DataFlow::Node node) { + node.getType() instanceof PrimitiveType or node.getType() instanceof BoxedType + } + + override predicate isAdditionalTaintStep(DataFlow::Node node1, DataFlow::Node node2) { + any(XsltInjectionAdditionalTaintStep c).step(node1, node2) + } +} + from DataFlow::PathNode source, DataFlow::PathNode sink, XsltInjectionFlowConfig conf where conf.hasFlowPath(source, sink) select sink.getNode(), source, sink, "XSLT transformation might include stylesheet from $@.", diff --git a/java/ql/src/Security/CWE/CWE-074/XsltInjectionLib.qll b/java/ql/src/semmle/code/java/security/XsltInjection.qll similarity index 60% rename from java/ql/src/Security/CWE/CWE-074/XsltInjectionLib.qll rename to java/ql/src/semmle/code/java/security/XsltInjection.qll index 4ba0eb6d0b1..4db9f7afd56 100644 --- a/java/ql/src/Security/CWE/CWE-074/XsltInjectionLib.qll +++ b/java/ql/src/semmle/code/java/security/XsltInjection.qll @@ -1,23 +1,51 @@ +/** Provides classes to reason about XSLT injection vulnerabilities. */ + import java -import semmle.code.java.dataflow.FlowSources +import semmle.code.java.dataflow.ExternalFlow import semmle.code.java.security.XmlParsers -import DataFlow +import semmle.code.java.dataflow.DataFlow /** - * A taint-tracking configuration for unvalidated user input that is used in XSLT transformation. + * A data flow sink for unvalidated user input that is used in XSLT transformation. + * Extend this class to add your own XSLT Injection sinks. */ -class XsltInjectionFlowConfig extends TaintTracking::Configuration { - XsltInjectionFlowConfig() { this = "XsltInjectionFlowConfig" } +abstract class XsltInjectionSink extends DataFlow::Node { } - override predicate isSource(DataFlow::Node source) { source instanceof RemoteFlowSource } - - override predicate isSink(DataFlow::Node sink) { sink instanceof XsltInjectionSink } - - override predicate isSanitizer(DataFlow::Node node) { - node.getType() instanceof PrimitiveType or node.getType() instanceof BoxedType +private class DefaultXsltInjectionSinkModel extends SinkModelCsv { + override predicate row(string row) { + row = + [ + "javax.xml.transform;Transformer;false;transform;;;Argument[-1];xslt", + "net.sf.saxon.s9api;XsltTransformer;false;transform;;;Argument[-1];xslt", + "net.sf.saxon.s9api;Xslt30Transformer;false;transform;;;Argument[-1];xslt", + "net.sf.saxon.s9api;Xslt30Transformer;false;applyTemplates;;;Argument[-1];xslt", + "net.sf.saxon.s9api;Xslt30Transformer;false;callFunction;;;Argument[-1];xslt", + "net.sf.saxon.s9api;Xslt30Transformer;false;callTemplate;;;Argument[-1];xslt" + ] } +} - override predicate isAdditionalTaintStep(DataFlow::Node node1, DataFlow::Node node2) { +/** A default sink representing methods susceptible to XSLT Injection attacks. */ +private class DefaultXsltInjectionSink extends XsltInjectionSink { + DefaultXsltInjectionSink() { sinkNode(this, "xslt") } +} + +/** + * A unit class for adding additional taint steps. + * + * Extend this class to add additional taint steps that should apply to the `XsltInjectionFlowConfig`. + */ +class XsltInjectionAdditionalTaintStep extends Unit { + /** + * Holds if the step from `node1` to `node2` should be considered a taint + * step for the `XsltInjectionFlowConfig` configuration. + */ + abstract predicate step(DataFlow::Node node1, DataFlow::Node node2); +} + +/** A set of additional taint steps to consider when taint tracking XSLT related data flows. */ +private class DefaultXsltInjectionAdditionalTaintStep extends XsltInjectionAdditionalTaintStep { + override predicate step(DataFlow::Node node1, DataFlow::Node node2) { xmlStreamReaderStep(node1, node2) or xmlEventReaderStep(node1, node2) or staxSourceStep(node1, node2) or @@ -31,95 +59,11 @@ class XsltInjectionFlowConfig extends TaintTracking::Configuration { } } -/** The class `javax.xml.transform.stax.StAXSource`. */ -class TypeStAXSource extends Class { - TypeStAXSource() { this.hasQualifiedName("javax.xml.transform.stax", "StAXSource") } -} - -/** The class `javax.xml.transform.dom.DOMSource`. */ -class TypeDOMSource extends Class { - TypeDOMSource() { this.hasQualifiedName("javax.xml.transform.dom", "DOMSource") } -} - -/** The interface `javax.xml.transform.Templates`. */ -class TypeTemplates extends Interface { - TypeTemplates() { this.hasQualifiedName("javax.xml.transform", "Templates") } -} - -/** The method `net.sf.saxon.s9api.XsltTransformer.transform`. */ -class XsltTransformerTransformMethod extends Method { - XsltTransformerTransformMethod() { - this.getDeclaringType().hasQualifiedName("net.sf.saxon.s9api", "XsltTransformer") and - this.hasName("transform") - } -} - -/** The method `net.sf.saxon.s9api.Xslt30Transformer.transform`. */ -class Xslt30TransformerTransformMethod extends Method { - Xslt30TransformerTransformMethod() { - this.getDeclaringType().hasQualifiedName("net.sf.saxon.s9api", "Xslt30Transformer") and - this.hasName("transform") - } -} - -/** The method `net.sf.saxon.s9api.Xslt30Transformer.applyTemplates`. */ -class Xslt30TransformerApplyTemplatesMethod extends Method { - Xslt30TransformerApplyTemplatesMethod() { - this.getDeclaringType().hasQualifiedName("net.sf.saxon.s9api", "Xslt30Transformer") and - this.hasName("applyTemplates") - } -} - -/** The method `net.sf.saxon.s9api.Xslt30Transformer.callFunction`. */ -class Xslt30TransformerCallFunctionMethod extends Method { - Xslt30TransformerCallFunctionMethod() { - this.getDeclaringType().hasQualifiedName("net.sf.saxon.s9api", "Xslt30Transformer") and - this.hasName("callFunction") - } -} - -/** The method `net.sf.saxon.s9api.Xslt30Transformer.callTemplate`. */ -class Xslt30TransformerCallTemplateMethod extends Method { - Xslt30TransformerCallTemplateMethod() { - this.getDeclaringType().hasQualifiedName("net.sf.saxon.s9api", "Xslt30Transformer") and - this.hasName("callTemplate") - } -} - -/** The class `net.sf.saxon.s9api.XsltCompiler`. */ -class TypeXsltCompiler extends Class { - TypeXsltCompiler() { this.hasQualifiedName("net.sf.saxon.s9api", "XsltCompiler") } -} - -/** The class `net.sf.saxon.s9api.XsltExecutable`. */ -class TypeXsltExecutable extends Class { - TypeXsltExecutable() { this.hasQualifiedName("net.sf.saxon.s9api", "XsltExecutable") } -} - -/** The class `net.sf.saxon.s9api.XsltPackage`. */ -class TypeXsltPackage extends Class { - TypeXsltPackage() { this.hasQualifiedName("net.sf.saxon.s9api", "XsltPackage") } -} - -/** A data flow sink for unvalidated user input that is used in XSLT transformation. */ -class XsltInjectionSink extends DataFlow::ExprNode { - XsltInjectionSink() { - exists(MethodAccess ma, Method m | m = ma.getMethod() and ma.getQualifier() = this.getExpr() | - ma instanceof TransformerTransform or - m instanceof XsltTransformerTransformMethod or - m instanceof Xslt30TransformerTransformMethod or - m instanceof Xslt30TransformerApplyTemplatesMethod or - m instanceof Xslt30TransformerCallFunctionMethod or - m instanceof Xslt30TransformerCallTemplateMethod - ) - } -} - /** * Holds if `n1` to `n2` is a dataflow step that converts between `InputStream` or `Reader` and * `XMLStreamReader`, i.e. `XMLInputFactory.createXMLStreamReader(tainted)`. */ -predicate xmlStreamReaderStep(ExprNode n1, ExprNode n2) { +private predicate xmlStreamReaderStep(DataFlow::Node n1, DataFlow::Node n2) { exists(XmlInputFactoryStreamReader xmlStreamReader | n1.asExpr() = xmlStreamReader.getSink() and n2.asExpr() = xmlStreamReader @@ -130,7 +74,7 @@ predicate xmlStreamReaderStep(ExprNode n1, ExprNode n2) { * Holds if `n1` to `n2` is a dataflow step that converts between `InputStream` or `Reader` and * `XMLEventReader`, i.e. `XMLInputFactory.createXMLEventReader(tainted)`. */ -predicate xmlEventReaderStep(ExprNode n1, ExprNode n2) { +private predicate xmlEventReaderStep(DataFlow::Node n1, DataFlow::Node n2) { exists(XmlInputFactoryEventReader xmlEventReader | n1.asExpr() = xmlEventReader.getSink() and n2.asExpr() = xmlEventReader @@ -141,7 +85,7 @@ predicate xmlEventReaderStep(ExprNode n1, ExprNode n2) { * Holds if `n1` to `n2` is a dataflow step that converts between `XMLStreamReader` or * `XMLEventReader` and `StAXSource`, i.e. `new StAXSource(tainted)`. */ -predicate staxSourceStep(ExprNode n1, ExprNode n2) { +private predicate staxSourceStep(DataFlow::Node n1, DataFlow::Node n2) { exists(ConstructorCall cc | cc.getConstructedType() instanceof TypeStAXSource | n1.asExpr() = cc.getAnArgument() and n2.asExpr() = cc @@ -152,7 +96,7 @@ predicate staxSourceStep(ExprNode n1, ExprNode n2) { * Holds if `n1` to `n2` is a dataflow step that converts between `InputStream` and `Document`, * i.e. `DocumentBuilder.parse(tainted)`. */ -predicate documentBuilderStep(ExprNode n1, ExprNode n2) { +private predicate documentBuilderStep(DataFlow::Node n1, DataFlow::Node n2) { exists(DocumentBuilderParse documentBuilder | n1.asExpr() = documentBuilder.getSink() and n2.asExpr() = documentBuilder @@ -163,13 +107,30 @@ predicate documentBuilderStep(ExprNode n1, ExprNode n2) { * Holds if `n1` to `n2` is a dataflow step that converts between `Document` and `DOMSource`, i.e. * `new DOMSource(tainted)`. */ -predicate domSourceStep(ExprNode n1, ExprNode n2) { +private predicate domSourceStep(DataFlow::Node n1, DataFlow::Node n2) { exists(ConstructorCall cc | cc.getConstructedType() instanceof TypeDOMSource | n1.asExpr() = cc.getAnArgument() and n2.asExpr() = cc ) } +/** + * Holds if `n1` to `n2` is a dataflow step that converts between `Source` and `Transformer` or + * `Templates`, i.e. `TransformerFactory.newTransformer(tainted)` or + * `TransformerFactory.newTemplates(tainted)`. + */ +private predicate newTransformerOrTemplatesStep(DataFlow::Node n1, DataFlow::Node n2) { + exists(MethodAccess ma, Method m | ma.getMethod() = m | + n1.asExpr() = ma.getAnArgument() and + n2.asExpr() = ma and + m.getDeclaringType() instanceof TransformerFactory and + m.hasName(["newTransformer", "newTemplates"]) and + not exists(TransformerFactoryWithSecureProcessingFeatureFlowConfig conf | + conf.hasFlowToExpr(ma.getQualifier()) + ) + ) +} + /** * A data flow configuration for secure processing feature that is enabled on `TransformerFactory`. */ @@ -207,31 +168,11 @@ private class TransformerFactoryFeatureConfig extends ParserConfig { } } -/** - * Holds if `n1` to `n2` is a dataflow step that converts between `Source` and `Transformer` or - * `Templates`, i.e. `TransformerFactory.newTransformer(tainted)` or - * `TransformerFactory.newTemplates(tainted)`. - */ -predicate newTransformerOrTemplatesStep(ExprNode n1, ExprNode n2) { - exists(MethodAccess ma, Method m | ma.getMethod() = m | - n1.asExpr() = ma.getAnArgument() and - n2.asExpr() = ma and - ( - m.getDeclaringType() instanceof TransformerFactory and m.hasName("newTransformer") - or - m.getDeclaringType() instanceof TransformerFactory and m.hasName("newTemplates") - ) and - not exists(TransformerFactoryWithSecureProcessingFeatureFlowConfig conf | - conf.hasFlowToExpr(ma.getQualifier()) - ) - ) -} - /** * Holds if `n1` to `n2` is a dataflow step that converts between `Templates` and `Transformer`, * i.e. `tainted.newTransformer()`. */ -predicate newTransformerFromTemplatesStep(ExprNode n1, ExprNode n2) { +private predicate newTransformerFromTemplatesStep(DataFlow::Node n1, DataFlow::Node n2) { exists(MethodAccess ma, Method m | ma.getMethod() = m | n1.asExpr() = ma.getQualifier() and n2.asExpr() = ma and @@ -246,17 +187,12 @@ predicate newTransformerFromTemplatesStep(ExprNode n1, ExprNode n2) { * `XsltCompiler.loadExecutablePackage(tainted)` or `XsltCompiler.compilePackage(tainted)` or * `XsltCompiler.loadLibraryPackage(tainted)`. */ -predicate xsltCompilerStep(ExprNode n1, ExprNode n2) { +private predicate xsltCompilerStep(DataFlow::Node n1, DataFlow::Node n2) { exists(MethodAccess ma, Method m | ma.getMethod() = m | n1.asExpr() = ma.getArgument(0) and n2.asExpr() = ma and m.getDeclaringType() instanceof TypeXsltCompiler and - ( - m.hasName("compile") or - m.hasName("loadExecutablePackage") or - m.hasName("compilePackage") or - m.hasName("loadLibraryPackage") - ) + m.hasName(["compile", "loadExecutablePackage", "compilePackage", "loadLibraryPackage"]) ) } @@ -265,12 +201,12 @@ predicate xsltCompilerStep(ExprNode n1, ExprNode n2) { * `XsltTransformer` or `Xslt30Transformer`, i.e. `XsltExecutable.load()` or * `XsltExecutable.load30()`. */ -predicate xsltExecutableStep(ExprNode n1, ExprNode n2) { +private predicate xsltExecutableStep(DataFlow::Node n1, DataFlow::Node n2) { exists(MethodAccess ma, Method m | ma.getMethod() = m | n1.asExpr() = ma.getQualifier() and n2.asExpr() = ma and m.getDeclaringType() instanceof TypeXsltExecutable and - (m.hasName("load") or m.hasName("load30")) + m.hasName(["load", "load30"]) ) } @@ -278,7 +214,7 @@ predicate xsltExecutableStep(ExprNode n1, ExprNode n2) { * Holds if `n1` to `n2` is a dataflow step that converts between `XsltPackage` and * `XsltExecutable`, i.e. `XsltPackage.link()`. */ -predicate xsltPackageStep(ExprNode n1, ExprNode n2) { +private predicate xsltPackageStep(DataFlow::Node n1, DataFlow::Node n2) { exists(MethodAccess ma, Method m | ma.getMethod() = m | n1.asExpr() = ma.getQualifier() and n2.asExpr() = ma and @@ -286,3 +222,33 @@ predicate xsltPackageStep(ExprNode n1, ExprNode n2) { m.hasName("link") ) } + +/** The class `javax.xml.transform.stax.StAXSource`. */ +private class TypeStAXSource extends Class { + TypeStAXSource() { this.hasQualifiedName("javax.xml.transform.stax", "StAXSource") } +} + +/** The class `javax.xml.transform.dom.DOMSource`. */ +private class TypeDOMSource extends Class { + TypeDOMSource() { this.hasQualifiedName("javax.xml.transform.dom", "DOMSource") } +} + +/** The interface `javax.xml.transform.Templates`. */ +private class TypeTemplates extends Interface { + TypeTemplates() { this.hasQualifiedName("javax.xml.transform", "Templates") } +} + +/** The class `net.sf.saxon.s9api.XsltCompiler`. */ +private class TypeXsltCompiler extends Class { + TypeXsltCompiler() { this.hasQualifiedName("net.sf.saxon.s9api", "XsltCompiler") } +} + +/** The class `net.sf.saxon.s9api.XsltExecutable`. */ +private class TypeXsltExecutable extends Class { + TypeXsltExecutable() { this.hasQualifiedName("net.sf.saxon.s9api", "XsltExecutable") } +} + +/** The class `net.sf.saxon.s9api.XsltPackage`. */ +private class TypeXsltPackage extends Class { + TypeXsltPackage() { this.hasQualifiedName("net.sf.saxon.s9api", "XsltPackage") } +} From 108118afa36c40603b61c996591977fd9c299de7 Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Mon, 14 Jun 2021 16:12:47 +0200 Subject: [PATCH 608/741] Use InlineExpectationsTest --- .../security/CWE-074/XsltInjection.expected | 122 ------------------ .../security/CWE-074/XsltInjection.qlref | 1 - .../CWE-074/XsltInjectionTest.expected | 0 ...tInjection.java => XsltInjectionTest.java} | 74 ++++++----- .../security/CWE-074/XsltInjectionTest.ql | 36 ++++++ 5 files changed, 75 insertions(+), 158 deletions(-) delete mode 100644 java/ql/test/query-tests/security/CWE-074/XsltInjection.expected delete mode 100644 java/ql/test/query-tests/security/CWE-074/XsltInjection.qlref create mode 100644 java/ql/test/query-tests/security/CWE-074/XsltInjectionTest.expected rename java/ql/test/query-tests/security/CWE-074/{XsltInjection.java => XsltInjectionTest.java} (68%) create mode 100644 java/ql/test/query-tests/security/CWE-074/XsltInjectionTest.ql diff --git a/java/ql/test/query-tests/security/CWE-074/XsltInjection.expected b/java/ql/test/query-tests/security/CWE-074/XsltInjection.expected deleted file mode 100644 index 99cde4c3c10..00000000000 --- a/java/ql/test/query-tests/security/CWE-074/XsltInjection.expected +++ /dev/null @@ -1,122 +0,0 @@ -edges -| XsltInjection.java:30:27:30:67 | new StreamSource(...) : StreamSource | XsltInjection.java:31:5:31:59 | newTransformer(...) | -| XsltInjection.java:30:44:30:66 | getInputStream(...) : InputStream | XsltInjection.java:30:27:30:67 | new StreamSource(...) : StreamSource | -| XsltInjection.java:35:27:35:90 | new StreamSource(...) : StreamSource | XsltInjection.java:36:5:36:74 | newTransformer(...) | -| XsltInjection.java:35:44:35:89 | new InputStreamReader(...) : InputStreamReader | XsltInjection.java:35:27:35:90 | new StreamSource(...) : StreamSource | -| XsltInjection.java:35:66:35:88 | getInputStream(...) : InputStream | XsltInjection.java:35:44:35:89 | new InputStreamReader(...) : InputStreamReader | -| XsltInjection.java:40:45:40:70 | param : String | XsltInjection.java:42:61:42:64 | xslt : String | -| XsltInjection.java:42:27:42:66 | new StreamSource(...) : StreamSource | XsltInjection.java:43:5:43:59 | newTransformer(...) | -| XsltInjection.java:42:44:42:65 | new StringReader(...) : StringReader | XsltInjection.java:42:27:42:66 | new StreamSource(...) : StreamSource | -| XsltInjection.java:42:61:42:64 | xslt : String | XsltInjection.java:42:44:42:65 | new StringReader(...) : StringReader | -| XsltInjection.java:47:24:47:78 | new SAXSource(...) : SAXSource | XsltInjection.java:48:5:48:74 | newTransformer(...) | -| XsltInjection.java:47:38:47:77 | new InputSource(...) : InputSource | XsltInjection.java:47:24:47:78 | new SAXSource(...) : SAXSource | -| XsltInjection.java:47:54:47:76 | getInputStream(...) : InputStream | XsltInjection.java:47:38:47:77 | new InputSource(...) : InputSource | -| XsltInjection.java:52:24:52:107 | new SAXSource(...) : SAXSource | XsltInjection.java:53:5:53:59 | newTransformer(...) | -| XsltInjection.java:52:44:52:106 | new InputSource(...) : InputSource | XsltInjection.java:52:24:52:107 | new SAXSource(...) : SAXSource | -| XsltInjection.java:52:60:52:105 | new InputStreamReader(...) : InputStreamReader | XsltInjection.java:52:44:52:106 | new InputSource(...) : InputSource | -| XsltInjection.java:52:82:52:104 | getInputStream(...) : InputStream | XsltInjection.java:52:60:52:105 | new InputStreamReader(...) : InputStreamReader | -| XsltInjection.java:57:91:57:113 | getInputStream(...) : InputStream | XsltInjection.java:58:5:58:59 | newTransformer(...) | -| XsltInjection.java:62:98:62:143 | new InputStreamReader(...) : InputStreamReader | XsltInjection.java:63:5:63:74 | newTransformer(...) | -| XsltInjection.java:62:120:62:142 | getInputStream(...) : InputStream | XsltInjection.java:62:98:62:143 | new InputStreamReader(...) : InputStreamReader | -| XsltInjection.java:67:102:67:124 | getInputStream(...) : InputStream | XsltInjection.java:68:5:68:59 | newTransformer(...) | -| XsltInjection.java:72:27:72:67 | new StreamSource(...) : StreamSource | XsltInjection.java:76:5:76:34 | newTransformer(...) | -| XsltInjection.java:72:44:72:66 | getInputStream(...) : InputStream | XsltInjection.java:72:27:72:67 | new StreamSource(...) : StreamSource | -| XsltInjection.java:80:27:80:67 | new StreamSource(...) : StreamSource | XsltInjection.java:83:5:83:34 | newTransformer(...) | -| XsltInjection.java:80:44:80:66 | getInputStream(...) : InputStream | XsltInjection.java:80:27:80:67 | new StreamSource(...) : StreamSource | -| XsltInjection.java:87:27:87:67 | new StreamSource(...) : StreamSource | XsltInjection.java:90:5:90:35 | load(...) | -| XsltInjection.java:87:27:87:67 | new StreamSource(...) : StreamSource | XsltInjection.java:91:5:91:37 | load30(...) | -| XsltInjection.java:87:27:87:67 | new StreamSource(...) : StreamSource | XsltInjection.java:92:5:92:37 | load30(...) | -| XsltInjection.java:87:27:87:67 | new StreamSource(...) : StreamSource | XsltInjection.java:93:5:93:37 | load30(...) | -| XsltInjection.java:87:27:87:67 | new StreamSource(...) : StreamSource | XsltInjection.java:94:5:94:37 | load30(...) | -| XsltInjection.java:87:27:87:67 | new StreamSource(...) : StreamSource | XsltInjection.java:95:5:95:37 | load30(...) | -| XsltInjection.java:87:27:87:67 | new StreamSource(...) : StreamSource | XsltInjection.java:96:5:96:37 | load30(...) | -| XsltInjection.java:87:27:87:67 | new StreamSource(...) : StreamSource | XsltInjection.java:97:5:97:37 | load30(...) | -| XsltInjection.java:87:27:87:67 | new StreamSource(...) : StreamSource | XsltInjection.java:98:5:98:37 | load30(...) | -| XsltInjection.java:87:27:87:67 | new StreamSource(...) : StreamSource | XsltInjection.java:99:5:99:37 | load30(...) | -| XsltInjection.java:87:44:87:66 | getInputStream(...) : InputStream | XsltInjection.java:87:27:87:67 | new StreamSource(...) : StreamSource | -| XsltInjection.java:103:36:103:61 | param : String | XsltInjection.java:104:23:104:27 | param : String | -| XsltInjection.java:104:15:104:28 | new URI(...) : URI | XsltInjection.java:108:5:108:46 | load(...) | -| XsltInjection.java:104:15:104:28 | new URI(...) : URI | XsltInjection.java:110:5:110:50 | load(...) | -| XsltInjection.java:104:23:104:27 | param : String | XsltInjection.java:104:15:104:28 | new URI(...) : URI | -| XsltInjection.java:105:27:105:67 | new StreamSource(...) : StreamSource | XsltInjection.java:109:5:109:49 | load(...) | -| XsltInjection.java:105:44:105:66 | getInputStream(...) : InputStream | XsltInjection.java:105:27:105:67 | new StreamSource(...) : StreamSource | -nodes -| XsltInjection.java:30:27:30:67 | new StreamSource(...) : StreamSource | semmle.label | new StreamSource(...) : StreamSource | -| XsltInjection.java:30:44:30:66 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| XsltInjection.java:31:5:31:59 | newTransformer(...) | semmle.label | newTransformer(...) | -| XsltInjection.java:35:27:35:90 | new StreamSource(...) : StreamSource | semmle.label | new StreamSource(...) : StreamSource | -| XsltInjection.java:35:44:35:89 | new InputStreamReader(...) : InputStreamReader | semmle.label | new InputStreamReader(...) : InputStreamReader | -| XsltInjection.java:35:66:35:88 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| XsltInjection.java:36:5:36:74 | newTransformer(...) | semmle.label | newTransformer(...) | -| XsltInjection.java:40:45:40:70 | param : String | semmle.label | param : String | -| XsltInjection.java:42:27:42:66 | new StreamSource(...) : StreamSource | semmle.label | new StreamSource(...) : StreamSource | -| XsltInjection.java:42:44:42:65 | new StringReader(...) : StringReader | semmle.label | new StringReader(...) : StringReader | -| XsltInjection.java:42:61:42:64 | xslt : String | semmle.label | xslt : String | -| XsltInjection.java:43:5:43:59 | newTransformer(...) | semmle.label | newTransformer(...) | -| XsltInjection.java:47:24:47:78 | new SAXSource(...) : SAXSource | semmle.label | new SAXSource(...) : SAXSource | -| XsltInjection.java:47:38:47:77 | new InputSource(...) : InputSource | semmle.label | new InputSource(...) : InputSource | -| XsltInjection.java:47:54:47:76 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| XsltInjection.java:48:5:48:74 | newTransformer(...) | semmle.label | newTransformer(...) | -| XsltInjection.java:52:24:52:107 | new SAXSource(...) : SAXSource | semmle.label | new SAXSource(...) : SAXSource | -| XsltInjection.java:52:44:52:106 | new InputSource(...) : InputSource | semmle.label | new InputSource(...) : InputSource | -| XsltInjection.java:52:60:52:105 | new InputStreamReader(...) : InputStreamReader | semmle.label | new InputStreamReader(...) : InputStreamReader | -| XsltInjection.java:52:82:52:104 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| XsltInjection.java:53:5:53:59 | newTransformer(...) | semmle.label | newTransformer(...) | -| XsltInjection.java:57:91:57:113 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| XsltInjection.java:58:5:58:59 | newTransformer(...) | semmle.label | newTransformer(...) | -| XsltInjection.java:62:98:62:143 | new InputStreamReader(...) : InputStreamReader | semmle.label | new InputStreamReader(...) : InputStreamReader | -| XsltInjection.java:62:120:62:142 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| XsltInjection.java:63:5:63:74 | newTransformer(...) | semmle.label | newTransformer(...) | -| XsltInjection.java:67:102:67:124 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| XsltInjection.java:68:5:68:59 | newTransformer(...) | semmle.label | newTransformer(...) | -| XsltInjection.java:72:27:72:67 | new StreamSource(...) : StreamSource | semmle.label | new StreamSource(...) : StreamSource | -| XsltInjection.java:72:44:72:66 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| XsltInjection.java:76:5:76:34 | newTransformer(...) | semmle.label | newTransformer(...) | -| XsltInjection.java:80:27:80:67 | new StreamSource(...) : StreamSource | semmle.label | new StreamSource(...) : StreamSource | -| XsltInjection.java:80:44:80:66 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| XsltInjection.java:83:5:83:34 | newTransformer(...) | semmle.label | newTransformer(...) | -| XsltInjection.java:87:27:87:67 | new StreamSource(...) : StreamSource | semmle.label | new StreamSource(...) : StreamSource | -| XsltInjection.java:87:44:87:66 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| XsltInjection.java:90:5:90:35 | load(...) | semmle.label | load(...) | -| XsltInjection.java:91:5:91:37 | load30(...) | semmle.label | load30(...) | -| XsltInjection.java:92:5:92:37 | load30(...) | semmle.label | load30(...) | -| XsltInjection.java:93:5:93:37 | load30(...) | semmle.label | load30(...) | -| XsltInjection.java:94:5:94:37 | load30(...) | semmle.label | load30(...) | -| XsltInjection.java:95:5:95:37 | load30(...) | semmle.label | load30(...) | -| XsltInjection.java:96:5:96:37 | load30(...) | semmle.label | load30(...) | -| XsltInjection.java:97:5:97:37 | load30(...) | semmle.label | load30(...) | -| XsltInjection.java:98:5:98:37 | load30(...) | semmle.label | load30(...) | -| XsltInjection.java:99:5:99:37 | load30(...) | semmle.label | load30(...) | -| XsltInjection.java:103:36:103:61 | param : String | semmle.label | param : String | -| XsltInjection.java:104:15:104:28 | new URI(...) : URI | semmle.label | new URI(...) : URI | -| XsltInjection.java:104:23:104:27 | param : String | semmle.label | param : String | -| XsltInjection.java:105:27:105:67 | new StreamSource(...) : StreamSource | semmle.label | new StreamSource(...) : StreamSource | -| XsltInjection.java:105:44:105:66 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| XsltInjection.java:108:5:108:46 | load(...) | semmle.label | load(...) | -| XsltInjection.java:109:5:109:49 | load(...) | semmle.label | load(...) | -| XsltInjection.java:110:5:110:50 | load(...) | semmle.label | load(...) | -subpaths -#select -| XsltInjection.java:31:5:31:59 | newTransformer(...) | XsltInjection.java:30:44:30:66 | getInputStream(...) : InputStream | XsltInjection.java:31:5:31:59 | newTransformer(...) | XSLT transformation might include stylesheet from $@. | XsltInjection.java:30:44:30:66 | getInputStream(...) | this user input | -| XsltInjection.java:36:5:36:74 | newTransformer(...) | XsltInjection.java:35:66:35:88 | getInputStream(...) : InputStream | XsltInjection.java:36:5:36:74 | newTransformer(...) | XSLT transformation might include stylesheet from $@. | XsltInjection.java:35:66:35:88 | getInputStream(...) | this user input | -| XsltInjection.java:43:5:43:59 | newTransformer(...) | XsltInjection.java:40:45:40:70 | param : String | XsltInjection.java:43:5:43:59 | newTransformer(...) | XSLT transformation might include stylesheet from $@. | XsltInjection.java:40:45:40:70 | param | this user input | -| XsltInjection.java:48:5:48:74 | newTransformer(...) | XsltInjection.java:47:54:47:76 | getInputStream(...) : InputStream | XsltInjection.java:48:5:48:74 | newTransformer(...) | XSLT transformation might include stylesheet from $@. | XsltInjection.java:47:54:47:76 | getInputStream(...) | this user input | -| XsltInjection.java:53:5:53:59 | newTransformer(...) | XsltInjection.java:52:82:52:104 | getInputStream(...) : InputStream | XsltInjection.java:53:5:53:59 | newTransformer(...) | XSLT transformation might include stylesheet from $@. | XsltInjection.java:52:82:52:104 | getInputStream(...) | this user input | -| XsltInjection.java:58:5:58:59 | newTransformer(...) | XsltInjection.java:57:91:57:113 | getInputStream(...) : InputStream | XsltInjection.java:58:5:58:59 | newTransformer(...) | XSLT transformation might include stylesheet from $@. | XsltInjection.java:57:91:57:113 | getInputStream(...) | this user input | -| XsltInjection.java:63:5:63:74 | newTransformer(...) | XsltInjection.java:62:120:62:142 | getInputStream(...) : InputStream | XsltInjection.java:63:5:63:74 | newTransformer(...) | XSLT transformation might include stylesheet from $@. | XsltInjection.java:62:120:62:142 | getInputStream(...) | this user input | -| XsltInjection.java:68:5:68:59 | newTransformer(...) | XsltInjection.java:67:102:67:124 | getInputStream(...) : InputStream | XsltInjection.java:68:5:68:59 | newTransformer(...) | XSLT transformation might include stylesheet from $@. | XsltInjection.java:67:102:67:124 | getInputStream(...) | this user input | -| XsltInjection.java:76:5:76:34 | newTransformer(...) | XsltInjection.java:72:44:72:66 | getInputStream(...) : InputStream | XsltInjection.java:76:5:76:34 | newTransformer(...) | XSLT transformation might include stylesheet from $@. | XsltInjection.java:72:44:72:66 | getInputStream(...) | this user input | -| XsltInjection.java:83:5:83:34 | newTransformer(...) | XsltInjection.java:80:44:80:66 | getInputStream(...) : InputStream | XsltInjection.java:83:5:83:34 | newTransformer(...) | XSLT transformation might include stylesheet from $@. | XsltInjection.java:80:44:80:66 | getInputStream(...) | this user input | -| XsltInjection.java:90:5:90:35 | load(...) | XsltInjection.java:87:44:87:66 | getInputStream(...) : InputStream | XsltInjection.java:90:5:90:35 | load(...) | XSLT transformation might include stylesheet from $@. | XsltInjection.java:87:44:87:66 | getInputStream(...) | this user input | -| XsltInjection.java:91:5:91:37 | load30(...) | XsltInjection.java:87:44:87:66 | getInputStream(...) : InputStream | XsltInjection.java:91:5:91:37 | load30(...) | XSLT transformation might include stylesheet from $@. | XsltInjection.java:87:44:87:66 | getInputStream(...) | this user input | -| XsltInjection.java:92:5:92:37 | load30(...) | XsltInjection.java:87:44:87:66 | getInputStream(...) : InputStream | XsltInjection.java:92:5:92:37 | load30(...) | XSLT transformation might include stylesheet from $@. | XsltInjection.java:87:44:87:66 | getInputStream(...) | this user input | -| XsltInjection.java:93:5:93:37 | load30(...) | XsltInjection.java:87:44:87:66 | getInputStream(...) : InputStream | XsltInjection.java:93:5:93:37 | load30(...) | XSLT transformation might include stylesheet from $@. | XsltInjection.java:87:44:87:66 | getInputStream(...) | this user input | -| XsltInjection.java:94:5:94:37 | load30(...) | XsltInjection.java:87:44:87:66 | getInputStream(...) : InputStream | XsltInjection.java:94:5:94:37 | load30(...) | XSLT transformation might include stylesheet from $@. | XsltInjection.java:87:44:87:66 | getInputStream(...) | this user input | -| XsltInjection.java:95:5:95:37 | load30(...) | XsltInjection.java:87:44:87:66 | getInputStream(...) : InputStream | XsltInjection.java:95:5:95:37 | load30(...) | XSLT transformation might include stylesheet from $@. | XsltInjection.java:87:44:87:66 | getInputStream(...) | this user input | -| XsltInjection.java:96:5:96:37 | load30(...) | XsltInjection.java:87:44:87:66 | getInputStream(...) : InputStream | XsltInjection.java:96:5:96:37 | load30(...) | XSLT transformation might include stylesheet from $@. | XsltInjection.java:87:44:87:66 | getInputStream(...) | this user input | -| XsltInjection.java:97:5:97:37 | load30(...) | XsltInjection.java:87:44:87:66 | getInputStream(...) : InputStream | XsltInjection.java:97:5:97:37 | load30(...) | XSLT transformation might include stylesheet from $@. | XsltInjection.java:87:44:87:66 | getInputStream(...) | this user input | -| XsltInjection.java:98:5:98:37 | load30(...) | XsltInjection.java:87:44:87:66 | getInputStream(...) : InputStream | XsltInjection.java:98:5:98:37 | load30(...) | XSLT transformation might include stylesheet from $@. | XsltInjection.java:87:44:87:66 | getInputStream(...) | this user input | -| XsltInjection.java:99:5:99:37 | load30(...) | XsltInjection.java:87:44:87:66 | getInputStream(...) : InputStream | XsltInjection.java:99:5:99:37 | load30(...) | XSLT transformation might include stylesheet from $@. | XsltInjection.java:87:44:87:66 | getInputStream(...) | this user input | -| XsltInjection.java:108:5:108:46 | load(...) | XsltInjection.java:103:36:103:61 | param : String | XsltInjection.java:108:5:108:46 | load(...) | XSLT transformation might include stylesheet from $@. | XsltInjection.java:103:36:103:61 | param | this user input | -| XsltInjection.java:109:5:109:49 | load(...) | XsltInjection.java:105:44:105:66 | getInputStream(...) : InputStream | XsltInjection.java:109:5:109:49 | load(...) | XSLT transformation might include stylesheet from $@. | XsltInjection.java:105:44:105:66 | getInputStream(...) | this user input | -| XsltInjection.java:110:5:110:50 | load(...) | XsltInjection.java:103:36:103:61 | param : String | XsltInjection.java:110:5:110:50 | load(...) | XSLT transformation might include stylesheet from $@. | XsltInjection.java:103:36:103:61 | param | this user input | diff --git a/java/ql/test/query-tests/security/CWE-074/XsltInjection.qlref b/java/ql/test/query-tests/security/CWE-074/XsltInjection.qlref deleted file mode 100644 index 9d7fb59ac2c..00000000000 --- a/java/ql/test/query-tests/security/CWE-074/XsltInjection.qlref +++ /dev/null @@ -1 +0,0 @@ -Security/CWE/CWE-074/XsltInjection.ql diff --git a/java/ql/test/query-tests/security/CWE-074/XsltInjectionTest.expected b/java/ql/test/query-tests/security/CWE-074/XsltInjectionTest.expected new file mode 100644 index 00000000000..e69de29bb2d diff --git a/java/ql/test/query-tests/security/CWE-074/XsltInjection.java b/java/ql/test/query-tests/security/CWE-074/XsltInjectionTest.java similarity index 68% rename from java/ql/test/query-tests/security/CWE-074/XsltInjection.java rename to java/ql/test/query-tests/security/CWE-074/XsltInjectionTest.java index d1a19217f02..2bfd02a865c 100644 --- a/java/ql/test/query-tests/security/CWE-074/XsltInjection.java +++ b/java/ql/test/query-tests/security/CWE-074/XsltInjectionTest.java @@ -25,47 +25,51 @@ import net.sf.saxon.s9api.XdmValue; import net.sf.saxon.s9api.XsltCompiler; @Controller -public class XsltInjection { +public class XsltInjectionTest { public void testStreamSourceInputStream(Socket socket) throws Exception { StreamSource source = new StreamSource(socket.getInputStream()); - TransformerFactory.newInstance().newTransformer(source).transform(null, null); + TransformerFactory.newInstance().newTransformer(source).transform(null, null); // $hasXsltInjection } public void testStreamSourceReader(Socket socket) throws Exception { StreamSource source = new StreamSource(new InputStreamReader(socket.getInputStream())); - TransformerFactory.newInstance().newTemplates(source).newTransformer().transform(null, null); + TransformerFactory.newInstance().newTemplates(source).newTransformer().transform(null, null); // $hasXsltInjection } @RequestMapping public void testStreamSourceInjectedParam(@RequestParam String param) throws Exception { String xslt = ""; StreamSource source = new StreamSource(new StringReader(xslt)); - TransformerFactory.newInstance().newTransformer(source).transform(null, null); + TransformerFactory.newInstance().newTransformer(source).transform(null, null); // $hasXsltInjection } public void testSAXSourceInputStream(Socket socket) throws Exception { SAXSource source = new SAXSource(new InputSource(socket.getInputStream())); - TransformerFactory.newInstance().newTemplates(source).newTransformer().transform(null, null); + TransformerFactory.newInstance().newTemplates(source).newTransformer().transform(null, null); // $hasXsltInjection } public void testSAXSourceReader(Socket socket) throws Exception { - SAXSource source = new SAXSource(null, new InputSource(new InputStreamReader(socket.getInputStream()))); - TransformerFactory.newInstance().newTransformer(source).transform(null, null); + SAXSource source = + new SAXSource(null, new InputSource(new InputStreamReader(socket.getInputStream()))); + TransformerFactory.newInstance().newTransformer(source).transform(null, null); // $hasXsltInjection } public void testStAXSourceEventReader(Socket socket) throws Exception { - StAXSource source = new StAXSource(XMLInputFactory.newInstance().createXMLEventReader(socket.getInputStream())); - TransformerFactory.newInstance().newTransformer(source).transform(null, null); + StAXSource source = + new StAXSource(XMLInputFactory.newInstance().createXMLEventReader(socket.getInputStream())); + TransformerFactory.newInstance().newTransformer(source).transform(null, null); // $hasXsltInjection } public void testStAXSourceEventStream(Socket socket) throws Exception { - StAXSource source = new StAXSource(XMLInputFactory.newInstance().createXMLStreamReader(null, new InputStreamReader(socket.getInputStream()))); - TransformerFactory.newInstance().newTemplates(source).newTransformer().transform(null, null); + StAXSource source = new StAXSource(XMLInputFactory.newInstance().createXMLStreamReader(null, + new InputStreamReader(socket.getInputStream()))); + TransformerFactory.newInstance().newTemplates(source).newTransformer().transform(null, null); // $hasXsltInjection } public void testDOMSource(Socket socket) throws Exception { - DOMSource source = new DOMSource(DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(socket.getInputStream())); - TransformerFactory.newInstance().newTransformer(source).transform(null, null); + DOMSource source = new DOMSource( + DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(socket.getInputStream())); + TransformerFactory.newInstance().newTransformer(source).transform(null, null); // $hasXsltInjection } public void testDisabledXXE(Socket socket) throws Exception { @@ -73,30 +77,30 @@ public class XsltInjection { TransformerFactory factory = TransformerFactory.newInstance(); factory.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, ""); factory.setAttribute(XMLConstants.ACCESS_EXTERNAL_STYLESHEET, ""); - factory.newTransformer(source).transform(null, null); + factory.newTransformer(source).transform(null, null); // $hasXsltInjection } public void testFeatureSecureProcessingDisabled(Socket socket) throws Exception { StreamSource source = new StreamSource(socket.getInputStream()); TransformerFactory factory = TransformerFactory.newInstance(); factory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, false); - factory.newTransformer(source).transform(null, null); + factory.newTransformer(source).transform(null, null); // $hasXsltInjection } public void testSaxon(Socket socket) throws Exception { StreamSource source = new StreamSource(socket.getInputStream()); XsltCompiler compiler = new Processor(true).newXsltCompiler(); - - compiler.compile(source).load().transform(); - compiler.compile(source).load30().transform(null, null); - compiler.compile(source).load30().applyTemplates((Source) null); - compiler.compile(source).load30().applyTemplates((Source) null, null); - compiler.compile(source).load30().applyTemplates((XdmValue) null); - compiler.compile(source).load30().applyTemplates((XdmValue) null, null); - compiler.compile(source).load30().callFunction(null, null); - compiler.compile(source).load30().callFunction(null, null, null); - compiler.compile(source).load30().callTemplate(null); - compiler.compile(source).load30().callTemplate(null, null); + + compiler.compile(source).load().transform(); // $hasXsltInjection + compiler.compile(source).load30().transform(null, null); // $hasXsltInjection + compiler.compile(source).load30().applyTemplates((Source) null); // $hasXsltInjection + compiler.compile(source).load30().applyTemplates((Source) null, null); // $hasXsltInjection + compiler.compile(source).load30().applyTemplates((XdmValue) null); // $hasXsltInjection + compiler.compile(source).load30().applyTemplates((XdmValue) null, null); // $hasXsltInjection + compiler.compile(source).load30().callFunction(null, null); // $hasXsltInjection + compiler.compile(source).load30().callFunction(null, null, null); // $hasXsltInjection + compiler.compile(source).load30().callTemplate(null); // $hasXsltInjection + compiler.compile(source).load30().callTemplate(null, null); // $hasXsltInjection } @RequestMapping @@ -104,24 +108,24 @@ public class XsltInjection { URI uri = new URI(param); StreamSource source = new StreamSource(socket.getInputStream()); XsltCompiler compiler = new Processor(true).newXsltCompiler(); - - compiler.loadExecutablePackage(uri).load().transform(); - compiler.compilePackage(source).link().load().transform(); - compiler.loadLibraryPackage(uri).link().load().transform(); + + compiler.loadExecutablePackage(uri).load().transform(); // $hasXsltInjection + compiler.compilePackage(source).link().load().transform(); // $hasXsltInjection + compiler.loadLibraryPackage(uri).link().load().transform(); // $hasXsltInjection } public void testOkFeatureSecureProcessing(Socket socket) throws Exception { StreamSource source = new StreamSource(socket.getInputStream()); TransformerFactory factory = TransformerFactory.newInstance(); factory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true); - factory.newTransformer(source).transform(null, null); + factory.newTransformer(source).transform(null, null); // Safe } public void testOkSaxon(Socket socket) throws Exception { StreamSource source = new StreamSource(socket.getInputStream()); XsltCompiler compiler = new Processor(true).newXsltCompiler(); - - compiler.compile(source).load().close(); - compiler.compile((Source) new Object()).load().transform(); + + compiler.compile(source).load().close(); // Safe + compiler.compile((Source) new Object()).load().transform(); // Safe } -} \ No newline at end of file +} diff --git a/java/ql/test/query-tests/security/CWE-074/XsltInjectionTest.ql b/java/ql/test/query-tests/security/CWE-074/XsltInjectionTest.ql new file mode 100644 index 00000000000..1ac2b87d505 --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-074/XsltInjectionTest.ql @@ -0,0 +1,36 @@ +import java +import semmle.code.java.dataflow.TaintTracking +import semmle.code.java.dataflow.FlowSources +import semmle.code.java.security.XsltInjection +import TestUtilities.InlineExpectationsTest + +class Conf extends TaintTracking::Configuration { + Conf() { this = "test:cwe:xslt-injection" } + + override predicate isSource(DataFlow::Node source) { source instanceof RemoteFlowSource } + + override predicate isSink(DataFlow::Node sink) { sink instanceof XsltInjectionSink } + + override predicate isSanitizer(DataFlow::Node node) { + node.getType() instanceof PrimitiveType or node.getType() instanceof BoxedType + } + + override predicate isAdditionalTaintStep(DataFlow::Node node1, DataFlow::Node node2) { + any(XsltInjectionAdditionalTaintStep c).step(node1, node2) + } +} + +class HasXsltInjectionTest extends InlineExpectationsTest { + HasXsltInjectionTest() { this = "HasXsltInjectionTest" } + + override string getARelevantTag() { result = "hasXsltInjection" } + + override predicate hasActualResult(Location location, string element, string tag, string value) { + tag = "hasXsltInjection" and + exists(DataFlow::Node src, DataFlow::Node sink, Conf conf | conf.hasFlow(src, sink) | + sink.getLocation() = location and + element = sink.toString() and + value = "" + ) + } +} From fc58ada92e15d899769757d96afce1c5fd1ae458 Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Thu, 17 Jun 2021 10:20:40 +0200 Subject: [PATCH 609/741] Add change note --- java/change-notes/2021-06-16-xslt-injection-query.md | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 java/change-notes/2021-06-16-xslt-injection-query.md diff --git a/java/change-notes/2021-06-16-xslt-injection-query.md b/java/change-notes/2021-06-16-xslt-injection-query.md new file mode 100644 index 00000000000..a6861f304f6 --- /dev/null +++ b/java/change-notes/2021-06-16-xslt-injection-query.md @@ -0,0 +1,2 @@ +lgtm,codescanning +* The query "XSLT transformation with user-controlled stylesheet" (`java/xslt-injection`) has been promoted from experimental to the main query pack. Its results will now appear by default. This query was originally [submitted as an experimental query by @ggolawski](https://github.com/github/codeql/pull/3363) \ No newline at end of file From 6967b06dee236c7534500a8ae64c3c40df3855a7 Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Mon, 19 Jul 2021 13:16:11 +0200 Subject: [PATCH 610/741] Decouple XsltInjection.qll to reuse the taint tracking configuration --- .../code/java/dataflow/ExternalFlow.qll | 1 + .../src/Security/CWE/CWE-074/XsltInjection.ql | 22 +----------- ...ltInjection.qll => XsltInjectionQuery.qll} | 35 +++++++++++-------- .../java/security/XsltInjectionSinkModels.qll | 17 +++++++++ .../security/CWE-074/XsltInjectionTest.ql | 22 +++--------- 5 files changed, 43 insertions(+), 54 deletions(-) rename java/ql/src/semmle/code/java/security/{XsltInjection.qll => XsltInjectionQuery.qll} (91%) create mode 100644 java/ql/src/semmle/code/java/security/XsltInjectionSinkModels.qll diff --git a/java/ql/lib/semmle/code/java/dataflow/ExternalFlow.qll b/java/ql/lib/semmle/code/java/dataflow/ExternalFlow.qll index bce80a3ee08..f88cdcb1593 100644 --- a/java/ql/lib/semmle/code/java/dataflow/ExternalFlow.qll +++ b/java/ql/lib/semmle/code/java/dataflow/ExternalFlow.qll @@ -110,6 +110,7 @@ private module Frameworks { private import semmle.code.java.security.MvelInjection private import semmle.code.java.security.OgnlInjection private import semmle.code.java.security.XPath + private import semmle.code.java.security.XsltInjectionSinkModels private import semmle.code.java.frameworks.android.Android private import semmle.code.java.frameworks.android.SQLite private import semmle.code.java.frameworks.Jdbc diff --git a/java/ql/src/Security/CWE/CWE-074/XsltInjection.ql b/java/ql/src/Security/CWE/CWE-074/XsltInjection.ql index cd47d69470f..3728ac9f3ee 100644 --- a/java/ql/src/Security/CWE/CWE-074/XsltInjection.ql +++ b/java/ql/src/Security/CWE/CWE-074/XsltInjection.ql @@ -11,29 +11,9 @@ */ import java -import semmle.code.java.dataflow.FlowSources -import semmle.code.java.security.XsltInjection +import semmle.code.java.security.XsltInjectionQuery import DataFlow::PathGraph -/** - * A taint-tracking configuration for unvalidated user input that is used in XSLT transformation. - */ -class XsltInjectionFlowConfig extends TaintTracking::Configuration { - XsltInjectionFlowConfig() { this = "XsltInjectionFlowConfig" } - - override predicate isSource(DataFlow::Node source) { source instanceof RemoteFlowSource } - - override predicate isSink(DataFlow::Node sink) { sink instanceof XsltInjectionSink } - - override predicate isSanitizer(DataFlow::Node node) { - node.getType() instanceof PrimitiveType or node.getType() instanceof BoxedType - } - - override predicate isAdditionalTaintStep(DataFlow::Node node1, DataFlow::Node node2) { - any(XsltInjectionAdditionalTaintStep c).step(node1, node2) - } -} - from DataFlow::PathNode source, DataFlow::PathNode sink, XsltInjectionFlowConfig conf where conf.hasFlowPath(source, sink) select sink.getNode(), source, sink, "XSLT transformation might include stylesheet from $@.", diff --git a/java/ql/src/semmle/code/java/security/XsltInjection.qll b/java/ql/src/semmle/code/java/security/XsltInjectionQuery.qll similarity index 91% rename from java/ql/src/semmle/code/java/security/XsltInjection.qll rename to java/ql/src/semmle/code/java/security/XsltInjectionQuery.qll index 4db9f7afd56..9a23223a997 100644 --- a/java/ql/src/semmle/code/java/security/XsltInjection.qll +++ b/java/ql/src/semmle/code/java/security/XsltInjectionQuery.qll @@ -1,7 +1,7 @@ /** Provides classes to reason about XSLT injection vulnerabilities. */ import java -import semmle.code.java.dataflow.ExternalFlow +import semmle.code.java.dataflow.FlowSources import semmle.code.java.security.XmlParsers import semmle.code.java.dataflow.DataFlow @@ -11,20 +11,6 @@ import semmle.code.java.dataflow.DataFlow */ abstract class XsltInjectionSink extends DataFlow::Node { } -private class DefaultXsltInjectionSinkModel extends SinkModelCsv { - override predicate row(string row) { - row = - [ - "javax.xml.transform;Transformer;false;transform;;;Argument[-1];xslt", - "net.sf.saxon.s9api;XsltTransformer;false;transform;;;Argument[-1];xslt", - "net.sf.saxon.s9api;Xslt30Transformer;false;transform;;;Argument[-1];xslt", - "net.sf.saxon.s9api;Xslt30Transformer;false;applyTemplates;;;Argument[-1];xslt", - "net.sf.saxon.s9api;Xslt30Transformer;false;callFunction;;;Argument[-1];xslt", - "net.sf.saxon.s9api;Xslt30Transformer;false;callTemplate;;;Argument[-1];xslt" - ] - } -} - /** A default sink representing methods susceptible to XSLT Injection attacks. */ private class DefaultXsltInjectionSink extends XsltInjectionSink { DefaultXsltInjectionSink() { sinkNode(this, "xslt") } @@ -59,6 +45,25 @@ private class DefaultXsltInjectionAdditionalTaintStep extends XsltInjectionAddit } } +/** + * A taint-tracking configuration for unvalidated user input that is used in XSLT transformation. + */ +class XsltInjectionFlowConfig extends TaintTracking::Configuration { + XsltInjectionFlowConfig() { this = "XsltInjectionFlowConfig" } + + override predicate isSource(DataFlow::Node source) { source instanceof RemoteFlowSource } + + override predicate isSink(DataFlow::Node sink) { sink instanceof XsltInjectionSink } + + override predicate isSanitizer(DataFlow::Node node) { + node.getType() instanceof PrimitiveType or node.getType() instanceof BoxedType + } + + override predicate isAdditionalTaintStep(DataFlow::Node node1, DataFlow::Node node2) { + any(XsltInjectionAdditionalTaintStep c).step(node1, node2) + } +} + /** * Holds if `n1` to `n2` is a dataflow step that converts between `InputStream` or `Reader` and * `XMLStreamReader`, i.e. `XMLInputFactory.createXMLStreamReader(tainted)`. diff --git a/java/ql/src/semmle/code/java/security/XsltInjectionSinkModels.qll b/java/ql/src/semmle/code/java/security/XsltInjectionSinkModels.qll new file mode 100644 index 00000000000..599e2e963d3 --- /dev/null +++ b/java/ql/src/semmle/code/java/security/XsltInjectionSinkModels.qll @@ -0,0 +1,17 @@ +/** Provides sink models relating to XSLT injection vulnerabilities. */ + +import semmle.code.java.dataflow.ExternalFlow + +private class DefaultXsltInjectionSinkModel extends SinkModelCsv { + override predicate row(string row) { + row = + [ + "javax.xml.transform;Transformer;false;transform;;;Argument[-1];xslt", + "net.sf.saxon.s9api;XsltTransformer;false;transform;;;Argument[-1];xslt", + "net.sf.saxon.s9api;Xslt30Transformer;false;transform;;;Argument[-1];xslt", + "net.sf.saxon.s9api;Xslt30Transformer;false;applyTemplates;;;Argument[-1];xslt", + "net.sf.saxon.s9api;Xslt30Transformer;false;callFunction;;;Argument[-1];xslt", + "net.sf.saxon.s9api;Xslt30Transformer;false;callTemplate;;;Argument[-1];xslt" + ] + } +} diff --git a/java/ql/test/query-tests/security/CWE-074/XsltInjectionTest.ql b/java/ql/test/query-tests/security/CWE-074/XsltInjectionTest.ql index 1ac2b87d505..c2f02865b2e 100644 --- a/java/ql/test/query-tests/security/CWE-074/XsltInjectionTest.ql +++ b/java/ql/test/query-tests/security/CWE-074/XsltInjectionTest.ql @@ -1,25 +1,9 @@ import java import semmle.code.java.dataflow.TaintTracking import semmle.code.java.dataflow.FlowSources -import semmle.code.java.security.XsltInjection +import semmle.code.java.security.XsltInjectionQuery import TestUtilities.InlineExpectationsTest -class Conf extends TaintTracking::Configuration { - Conf() { this = "test:cwe:xslt-injection" } - - override predicate isSource(DataFlow::Node source) { source instanceof RemoteFlowSource } - - override predicate isSink(DataFlow::Node sink) { sink instanceof XsltInjectionSink } - - override predicate isSanitizer(DataFlow::Node node) { - node.getType() instanceof PrimitiveType or node.getType() instanceof BoxedType - } - - override predicate isAdditionalTaintStep(DataFlow::Node node1, DataFlow::Node node2) { - any(XsltInjectionAdditionalTaintStep c).step(node1, node2) - } -} - class HasXsltInjectionTest extends InlineExpectationsTest { HasXsltInjectionTest() { this = "HasXsltInjectionTest" } @@ -27,7 +11,9 @@ class HasXsltInjectionTest extends InlineExpectationsTest { override predicate hasActualResult(Location location, string element, string tag, string value) { tag = "hasXsltInjection" and - exists(DataFlow::Node src, DataFlow::Node sink, Conf conf | conf.hasFlow(src, sink) | + exists(DataFlow::Node src, DataFlow::Node sink, XsltInjectionFlowConfig conf | + conf.hasFlow(src, sink) + | sink.getLocation() = location and element = sink.toString() and value = "" From ff21662b23884deec9a842249916dbecc42ab4a0 Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Tue, 20 Jul 2021 17:55:45 +0200 Subject: [PATCH 611/741] Refactor XsltInjection.qll --- .../2021-06-16-xslt-injection-query.md | 2 +- .../code/java/security/XsltInjection.qll | 254 ++++++++++++++++++ .../code/java/security/XsltInjectionQuery.qll | 240 +---------------- .../java/security/XsltInjectionSinkModels.qll | 17 -- 4 files changed, 258 insertions(+), 255 deletions(-) create mode 100644 java/ql/src/semmle/code/java/security/XsltInjection.qll delete mode 100644 java/ql/src/semmle/code/java/security/XsltInjectionSinkModels.qll diff --git a/java/change-notes/2021-06-16-xslt-injection-query.md b/java/change-notes/2021-06-16-xslt-injection-query.md index a6861f304f6..d30421607b3 100644 --- a/java/change-notes/2021-06-16-xslt-injection-query.md +++ b/java/change-notes/2021-06-16-xslt-injection-query.md @@ -1,2 +1,2 @@ lgtm,codescanning -* The query "XSLT transformation with user-controlled stylesheet" (`java/xslt-injection`) has been promoted from experimental to the main query pack. Its results will now appear by default. This query was originally [submitted as an experimental query by @ggolawski](https://github.com/github/codeql/pull/3363) \ No newline at end of file +* The query "XSLT transformation with user-controlled stylesheet" (`java/xslt-injection`) has been promoted from experimental to the main query pack. Its results will now appear by default. This query was originally [submitted as an experimental query by @ggolawski](https://github.com/github/codeql/pull/3363). \ No newline at end of file diff --git a/java/ql/src/semmle/code/java/security/XsltInjection.qll b/java/ql/src/semmle/code/java/security/XsltInjection.qll new file mode 100644 index 00000000000..1ebf961e03c --- /dev/null +++ b/java/ql/src/semmle/code/java/security/XsltInjection.qll @@ -0,0 +1,254 @@ +/** Provides classes to reason about XSLT injection vulnerabilities. */ + +import java +import semmle.code.java.dataflow.DataFlow +import semmle.code.java.dataflow.ExternalFlow +import semmle.code.java.security.XmlParsers + +/** + * A data flow sink for unvalidated user input that is used in XSLT transformation. + * Extend this class to add your own XSLT Injection sinks. + */ +abstract class XsltInjectionSink extends DataFlow::Node { } + +/** A default sink representing methods susceptible to XSLT Injection attacks. */ +private class DefaultXsltInjectionSink extends XsltInjectionSink { + DefaultXsltInjectionSink() { sinkNode(this, "xslt") } +} + +private class DefaultXsltInjectionSinkModel extends SinkModelCsv { + override predicate row(string row) { + row = + [ + "javax.xml.transform;Transformer;false;transform;;;Argument[-1];xslt", + "net.sf.saxon.s9api;XsltTransformer;false;transform;;;Argument[-1];xslt", + "net.sf.saxon.s9api;Xslt30Transformer;false;transform;;;Argument[-1];xslt", + "net.sf.saxon.s9api;Xslt30Transformer;false;applyTemplates;;;Argument[-1];xslt", + "net.sf.saxon.s9api;Xslt30Transformer;false;callFunction;;;Argument[-1];xslt", + "net.sf.saxon.s9api;Xslt30Transformer;false;callTemplate;;;Argument[-1];xslt" + ] + } +} + +/** + * A unit class for adding additional taint steps. + * + * Extend this class to add additional taint steps that should apply to the `XsltInjectionFlowConfig`. + */ +class XsltInjectionAdditionalTaintStep extends Unit { + /** + * Holds if the step from `node1` to `node2` should be considered a taint + * step for the `XsltInjectionFlowConfig` configuration. + */ + abstract predicate step(DataFlow::Node node1, DataFlow::Node node2); +} + +/** A set of additional taint steps to consider when taint tracking XSLT related data flows. */ +private class DefaultXsltInjectionAdditionalTaintStep extends XsltInjectionAdditionalTaintStep { + override predicate step(DataFlow::Node node1, DataFlow::Node node2) { + xmlStreamReaderStep(node1, node2) or + xmlEventReaderStep(node1, node2) or + staxSourceStep(node1, node2) or + documentBuilderStep(node1, node2) or + domSourceStep(node1, node2) or + newTransformerOrTemplatesStep(node1, node2) or + newTransformerFromTemplatesStep(node1, node2) or + xsltCompilerStep(node1, node2) or + xsltExecutableStep(node1, node2) or + xsltPackageStep(node1, node2) + } +} + +/** + * Holds if `n1` to `n2` is a dataflow step that converts between `InputStream` or `Reader` and + * `XMLStreamReader`, i.e. `XMLInputFactory.createXMLStreamReader(tainted)`. + */ +private predicate xmlStreamReaderStep(DataFlow::Node n1, DataFlow::Node n2) { + exists(XmlInputFactoryStreamReader xmlStreamReader | + n1.asExpr() = xmlStreamReader.getSink() and + n2.asExpr() = xmlStreamReader + ) +} + +/** + * Holds if `n1` to `n2` is a dataflow step that converts between `InputStream` or `Reader` and + * `XMLEventReader`, i.e. `XMLInputFactory.createXMLEventReader(tainted)`. + */ +private predicate xmlEventReaderStep(DataFlow::Node n1, DataFlow::Node n2) { + exists(XmlInputFactoryEventReader xmlEventReader | + n1.asExpr() = xmlEventReader.getSink() and + n2.asExpr() = xmlEventReader + ) +} + +/** + * Holds if `n1` to `n2` is a dataflow step that converts between `XMLStreamReader` or + * `XMLEventReader` and `StAXSource`, i.e. `new StAXSource(tainted)`. + */ +private predicate staxSourceStep(DataFlow::Node n1, DataFlow::Node n2) { + exists(ConstructorCall cc | cc.getConstructedType() instanceof TypeStAXSource | + n1.asExpr() = cc.getAnArgument() and + n2.asExpr() = cc + ) +} + +/** + * Holds if `n1` to `n2` is a dataflow step that converts between `InputStream` and `Document`, + * i.e. `DocumentBuilder.parse(tainted)`. + */ +private predicate documentBuilderStep(DataFlow::Node n1, DataFlow::Node n2) { + exists(DocumentBuilderParse documentBuilder | + n1.asExpr() = documentBuilder.getSink() and + n2.asExpr() = documentBuilder + ) +} + +/** + * Holds if `n1` to `n2` is a dataflow step that converts between `Document` and `DOMSource`, i.e. + * `new DOMSource(tainted)`. + */ +private predicate domSourceStep(DataFlow::Node n1, DataFlow::Node n2) { + exists(ConstructorCall cc | cc.getConstructedType() instanceof TypeDOMSource | + n1.asExpr() = cc.getAnArgument() and + n2.asExpr() = cc + ) +} + +/** + * Holds if `n1` to `n2` is a dataflow step that converts between `Source` and `Transformer` or + * `Templates`, i.e. `TransformerFactory.newTransformer(tainted)` or + * `TransformerFactory.newTemplates(tainted)`. + */ +private predicate newTransformerOrTemplatesStep(DataFlow::Node n1, DataFlow::Node n2) { + exists(MethodAccess ma, Method m | ma.getMethod() = m | + n1.asExpr() = ma.getAnArgument() and + n2.asExpr() = ma and + m.getDeclaringType() instanceof TransformerFactory and + m.hasName(["newTransformer", "newTemplates"]) and + not exists(TransformerFactoryWithSecureProcessingFeatureFlowConfig conf | + conf.hasFlowToExpr(ma.getQualifier()) + ) + ) +} + +/** + * A data flow configuration for secure processing feature that is enabled on `TransformerFactory`. + */ +private class TransformerFactoryWithSecureProcessingFeatureFlowConfig extends DataFlow2::Configuration { + TransformerFactoryWithSecureProcessingFeatureFlowConfig() { + this = "TransformerFactoryWithSecureProcessingFeatureFlowConfig" + } + + override predicate isSource(DataFlow::Node src) { + exists(Variable v | v = src.asExpr().(VarAccess).getVariable() | + exists(TransformerFactoryFeatureConfig config | config.getQualifier() = v.getAnAccess() | + config.enables(configSecureProcessing()) + ) + ) + } + + override predicate isSink(DataFlow::Node sink) { + exists(MethodAccess ma | + sink.asExpr() = ma.getQualifier() and + ma.getMethod().getDeclaringType() instanceof TransformerFactory + ) + } + + override int fieldFlowBranchLimit() { result = 0 } +} + +/** A `ParserConfig` specific to `TransformerFactory`. */ +private class TransformerFactoryFeatureConfig extends ParserConfig { + TransformerFactoryFeatureConfig() { + exists(Method m | + m = this.getMethod() and + m.getDeclaringType() instanceof TransformerFactory and + m.hasName("setFeature") + ) + } +} + +/** + * Holds if `n1` to `n2` is a dataflow step that converts between `Templates` and `Transformer`, + * i.e. `tainted.newTransformer()`. + */ +private predicate newTransformerFromTemplatesStep(DataFlow::Node n1, DataFlow::Node n2) { + exists(MethodAccess ma, Method m | ma.getMethod() = m | + n1.asExpr() = ma.getQualifier() and + n2.asExpr() = ma and + m.getDeclaringType() instanceof TypeTemplates and + m.hasName("newTransformer") + ) +} + +/** + * Holds if `n1` to `n2` is a dataflow step that converts between `Source` or `URI` and + * `XsltExecutable` or `XsltPackage`, i.e. `XsltCompiler.compile(tainted)` or + * `XsltCompiler.loadExecutablePackage(tainted)` or `XsltCompiler.compilePackage(tainted)` or + * `XsltCompiler.loadLibraryPackage(tainted)`. + */ +private predicate xsltCompilerStep(DataFlow::Node n1, DataFlow::Node n2) { + exists(MethodAccess ma, Method m | ma.getMethod() = m | + n1.asExpr() = ma.getArgument(0) and + n2.asExpr() = ma and + m.getDeclaringType() instanceof TypeXsltCompiler and + m.hasName(["compile", "loadExecutablePackage", "compilePackage", "loadLibraryPackage"]) + ) +} + +/** + * Holds if `n1` to `n2` is a dataflow step that converts between `XsltExecutable` and + * `XsltTransformer` or `Xslt30Transformer`, i.e. `XsltExecutable.load()` or + * `XsltExecutable.load30()`. + */ +private predicate xsltExecutableStep(DataFlow::Node n1, DataFlow::Node n2) { + exists(MethodAccess ma, Method m | ma.getMethod() = m | + n1.asExpr() = ma.getQualifier() and + n2.asExpr() = ma and + m.getDeclaringType() instanceof TypeXsltExecutable and + m.hasName(["load", "load30"]) + ) +} + +/** + * Holds if `n1` to `n2` is a dataflow step that converts between `XsltPackage` and + * `XsltExecutable`, i.e. `XsltPackage.link()`. + */ +private predicate xsltPackageStep(DataFlow::Node n1, DataFlow::Node n2) { + exists(MethodAccess ma, Method m | ma.getMethod() = m | + n1.asExpr() = ma.getQualifier() and + n2.asExpr() = ma and + m.getDeclaringType() instanceof TypeXsltPackage and + m.hasName("link") + ) +} + +/** The class `javax.xml.transform.stax.StAXSource`. */ +private class TypeStAXSource extends Class { + TypeStAXSource() { this.hasQualifiedName("javax.xml.transform.stax", "StAXSource") } +} + +/** The class `javax.xml.transform.dom.DOMSource`. */ +private class TypeDOMSource extends Class { + TypeDOMSource() { this.hasQualifiedName("javax.xml.transform.dom", "DOMSource") } +} + +/** The interface `javax.xml.transform.Templates`. */ +private class TypeTemplates extends Interface { + TypeTemplates() { this.hasQualifiedName("javax.xml.transform", "Templates") } +} + +/** The class `net.sf.saxon.s9api.XsltCompiler`. */ +private class TypeXsltCompiler extends Class { + TypeXsltCompiler() { this.hasQualifiedName("net.sf.saxon.s9api", "XsltCompiler") } +} + +/** The class `net.sf.saxon.s9api.XsltExecutable`. */ +private class TypeXsltExecutable extends Class { + TypeXsltExecutable() { this.hasQualifiedName("net.sf.saxon.s9api", "XsltExecutable") } +} + +/** The class `net.sf.saxon.s9api.XsltPackage`. */ +private class TypeXsltPackage extends Class { + TypeXsltPackage() { this.hasQualifiedName("net.sf.saxon.s9api", "XsltPackage") } +} diff --git a/java/ql/src/semmle/code/java/security/XsltInjectionQuery.qll b/java/ql/src/semmle/code/java/security/XsltInjectionQuery.qll index 9a23223a997..8beafb22e10 100644 --- a/java/ql/src/semmle/code/java/security/XsltInjectionQuery.qll +++ b/java/ql/src/semmle/code/java/security/XsltInjectionQuery.qll @@ -1,49 +1,9 @@ -/** Provides classes to reason about XSLT injection vulnerabilities. */ +/** Provides taint tracking configurations to be used in XSLT injection queries. */ import java import semmle.code.java.dataflow.FlowSources -import semmle.code.java.security.XmlParsers -import semmle.code.java.dataflow.DataFlow - -/** - * A data flow sink for unvalidated user input that is used in XSLT transformation. - * Extend this class to add your own XSLT Injection sinks. - */ -abstract class XsltInjectionSink extends DataFlow::Node { } - -/** A default sink representing methods susceptible to XSLT Injection attacks. */ -private class DefaultXsltInjectionSink extends XsltInjectionSink { - DefaultXsltInjectionSink() { sinkNode(this, "xslt") } -} - -/** - * A unit class for adding additional taint steps. - * - * Extend this class to add additional taint steps that should apply to the `XsltInjectionFlowConfig`. - */ -class XsltInjectionAdditionalTaintStep extends Unit { - /** - * Holds if the step from `node1` to `node2` should be considered a taint - * step for the `XsltInjectionFlowConfig` configuration. - */ - abstract predicate step(DataFlow::Node node1, DataFlow::Node node2); -} - -/** A set of additional taint steps to consider when taint tracking XSLT related data flows. */ -private class DefaultXsltInjectionAdditionalTaintStep extends XsltInjectionAdditionalTaintStep { - override predicate step(DataFlow::Node node1, DataFlow::Node node2) { - xmlStreamReaderStep(node1, node2) or - xmlEventReaderStep(node1, node2) or - staxSourceStep(node1, node2) or - documentBuilderStep(node1, node2) or - domSourceStep(node1, node2) or - newTransformerOrTemplatesStep(node1, node2) or - newTransformerFromTemplatesStep(node1, node2) or - xsltCompilerStep(node1, node2) or - xsltExecutableStep(node1, node2) or - xsltPackageStep(node1, node2) - } -} +import semmle.code.java.dataflow.TaintTracking +import semmle.code.java.security.XsltInjection /** * A taint-tracking configuration for unvalidated user input that is used in XSLT transformation. @@ -63,197 +23,3 @@ class XsltInjectionFlowConfig extends TaintTracking::Configuration { any(XsltInjectionAdditionalTaintStep c).step(node1, node2) } } - -/** - * Holds if `n1` to `n2` is a dataflow step that converts between `InputStream` or `Reader` and - * `XMLStreamReader`, i.e. `XMLInputFactory.createXMLStreamReader(tainted)`. - */ -private predicate xmlStreamReaderStep(DataFlow::Node n1, DataFlow::Node n2) { - exists(XmlInputFactoryStreamReader xmlStreamReader | - n1.asExpr() = xmlStreamReader.getSink() and - n2.asExpr() = xmlStreamReader - ) -} - -/** - * Holds if `n1` to `n2` is a dataflow step that converts between `InputStream` or `Reader` and - * `XMLEventReader`, i.e. `XMLInputFactory.createXMLEventReader(tainted)`. - */ -private predicate xmlEventReaderStep(DataFlow::Node n1, DataFlow::Node n2) { - exists(XmlInputFactoryEventReader xmlEventReader | - n1.asExpr() = xmlEventReader.getSink() and - n2.asExpr() = xmlEventReader - ) -} - -/** - * Holds if `n1` to `n2` is a dataflow step that converts between `XMLStreamReader` or - * `XMLEventReader` and `StAXSource`, i.e. `new StAXSource(tainted)`. - */ -private predicate staxSourceStep(DataFlow::Node n1, DataFlow::Node n2) { - exists(ConstructorCall cc | cc.getConstructedType() instanceof TypeStAXSource | - n1.asExpr() = cc.getAnArgument() and - n2.asExpr() = cc - ) -} - -/** - * Holds if `n1` to `n2` is a dataflow step that converts between `InputStream` and `Document`, - * i.e. `DocumentBuilder.parse(tainted)`. - */ -private predicate documentBuilderStep(DataFlow::Node n1, DataFlow::Node n2) { - exists(DocumentBuilderParse documentBuilder | - n1.asExpr() = documentBuilder.getSink() and - n2.asExpr() = documentBuilder - ) -} - -/** - * Holds if `n1` to `n2` is a dataflow step that converts between `Document` and `DOMSource`, i.e. - * `new DOMSource(tainted)`. - */ -private predicate domSourceStep(DataFlow::Node n1, DataFlow::Node n2) { - exists(ConstructorCall cc | cc.getConstructedType() instanceof TypeDOMSource | - n1.asExpr() = cc.getAnArgument() and - n2.asExpr() = cc - ) -} - -/** - * Holds if `n1` to `n2` is a dataflow step that converts between `Source` and `Transformer` or - * `Templates`, i.e. `TransformerFactory.newTransformer(tainted)` or - * `TransformerFactory.newTemplates(tainted)`. - */ -private predicate newTransformerOrTemplatesStep(DataFlow::Node n1, DataFlow::Node n2) { - exists(MethodAccess ma, Method m | ma.getMethod() = m | - n1.asExpr() = ma.getAnArgument() and - n2.asExpr() = ma and - m.getDeclaringType() instanceof TransformerFactory and - m.hasName(["newTransformer", "newTemplates"]) and - not exists(TransformerFactoryWithSecureProcessingFeatureFlowConfig conf | - conf.hasFlowToExpr(ma.getQualifier()) - ) - ) -} - -/** - * A data flow configuration for secure processing feature that is enabled on `TransformerFactory`. - */ -private class TransformerFactoryWithSecureProcessingFeatureFlowConfig extends DataFlow2::Configuration { - TransformerFactoryWithSecureProcessingFeatureFlowConfig() { - this = "TransformerFactoryWithSecureProcessingFeatureFlowConfig" - } - - override predicate isSource(DataFlow::Node src) { - exists(Variable v | v = src.asExpr().(VarAccess).getVariable() | - exists(TransformerFactoryFeatureConfig config | config.getQualifier() = v.getAnAccess() | - config.enables(configSecureProcessing()) - ) - ) - } - - override predicate isSink(DataFlow::Node sink) { - exists(MethodAccess ma | - sink.asExpr() = ma.getQualifier() and - ma.getMethod().getDeclaringType() instanceof TransformerFactory - ) - } - - override int fieldFlowBranchLimit() { result = 0 } -} - -/** A `ParserConfig` specific to `TransformerFactory`. */ -private class TransformerFactoryFeatureConfig extends ParserConfig { - TransformerFactoryFeatureConfig() { - exists(Method m | - m = this.getMethod() and - m.getDeclaringType() instanceof TransformerFactory and - m.hasName("setFeature") - ) - } -} - -/** - * Holds if `n1` to `n2` is a dataflow step that converts between `Templates` and `Transformer`, - * i.e. `tainted.newTransformer()`. - */ -private predicate newTransformerFromTemplatesStep(DataFlow::Node n1, DataFlow::Node n2) { - exists(MethodAccess ma, Method m | ma.getMethod() = m | - n1.asExpr() = ma.getQualifier() and - n2.asExpr() = ma and - m.getDeclaringType() instanceof TypeTemplates and - m.hasName("newTransformer") - ) -} - -/** - * Holds if `n1` to `n2` is a dataflow step that converts between `Source` or `URI` and - * `XsltExecutable` or `XsltPackage`, i.e. `XsltCompiler.compile(tainted)` or - * `XsltCompiler.loadExecutablePackage(tainted)` or `XsltCompiler.compilePackage(tainted)` or - * `XsltCompiler.loadLibraryPackage(tainted)`. - */ -private predicate xsltCompilerStep(DataFlow::Node n1, DataFlow::Node n2) { - exists(MethodAccess ma, Method m | ma.getMethod() = m | - n1.asExpr() = ma.getArgument(0) and - n2.asExpr() = ma and - m.getDeclaringType() instanceof TypeXsltCompiler and - m.hasName(["compile", "loadExecutablePackage", "compilePackage", "loadLibraryPackage"]) - ) -} - -/** - * Holds if `n1` to `n2` is a dataflow step that converts between `XsltExecutable` and - * `XsltTransformer` or `Xslt30Transformer`, i.e. `XsltExecutable.load()` or - * `XsltExecutable.load30()`. - */ -private predicate xsltExecutableStep(DataFlow::Node n1, DataFlow::Node n2) { - exists(MethodAccess ma, Method m | ma.getMethod() = m | - n1.asExpr() = ma.getQualifier() and - n2.asExpr() = ma and - m.getDeclaringType() instanceof TypeXsltExecutable and - m.hasName(["load", "load30"]) - ) -} - -/** - * Holds if `n1` to `n2` is a dataflow step that converts between `XsltPackage` and - * `XsltExecutable`, i.e. `XsltPackage.link()`. - */ -private predicate xsltPackageStep(DataFlow::Node n1, DataFlow::Node n2) { - exists(MethodAccess ma, Method m | ma.getMethod() = m | - n1.asExpr() = ma.getQualifier() and - n2.asExpr() = ma and - m.getDeclaringType() instanceof TypeXsltPackage and - m.hasName("link") - ) -} - -/** The class `javax.xml.transform.stax.StAXSource`. */ -private class TypeStAXSource extends Class { - TypeStAXSource() { this.hasQualifiedName("javax.xml.transform.stax", "StAXSource") } -} - -/** The class `javax.xml.transform.dom.DOMSource`. */ -private class TypeDOMSource extends Class { - TypeDOMSource() { this.hasQualifiedName("javax.xml.transform.dom", "DOMSource") } -} - -/** The interface `javax.xml.transform.Templates`. */ -private class TypeTemplates extends Interface { - TypeTemplates() { this.hasQualifiedName("javax.xml.transform", "Templates") } -} - -/** The class `net.sf.saxon.s9api.XsltCompiler`. */ -private class TypeXsltCompiler extends Class { - TypeXsltCompiler() { this.hasQualifiedName("net.sf.saxon.s9api", "XsltCompiler") } -} - -/** The class `net.sf.saxon.s9api.XsltExecutable`. */ -private class TypeXsltExecutable extends Class { - TypeXsltExecutable() { this.hasQualifiedName("net.sf.saxon.s9api", "XsltExecutable") } -} - -/** The class `net.sf.saxon.s9api.XsltPackage`. */ -private class TypeXsltPackage extends Class { - TypeXsltPackage() { this.hasQualifiedName("net.sf.saxon.s9api", "XsltPackage") } -} diff --git a/java/ql/src/semmle/code/java/security/XsltInjectionSinkModels.qll b/java/ql/src/semmle/code/java/security/XsltInjectionSinkModels.qll deleted file mode 100644 index 599e2e963d3..00000000000 --- a/java/ql/src/semmle/code/java/security/XsltInjectionSinkModels.qll +++ /dev/null @@ -1,17 +0,0 @@ -/** Provides sink models relating to XSLT injection vulnerabilities. */ - -import semmle.code.java.dataflow.ExternalFlow - -private class DefaultXsltInjectionSinkModel extends SinkModelCsv { - override predicate row(string row) { - row = - [ - "javax.xml.transform;Transformer;false;transform;;;Argument[-1];xslt", - "net.sf.saxon.s9api;XsltTransformer;false;transform;;;Argument[-1];xslt", - "net.sf.saxon.s9api;Xslt30Transformer;false;transform;;;Argument[-1];xslt", - "net.sf.saxon.s9api;Xslt30Transformer;false;applyTemplates;;;Argument[-1];xslt", - "net.sf.saxon.s9api;Xslt30Transformer;false;callFunction;;;Argument[-1];xslt", - "net.sf.saxon.s9api;Xslt30Transformer;false;callTemplate;;;Argument[-1];xslt" - ] - } -} From 13417dbf14f73eb86443e6579363bf314890bb3a Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Wed, 21 Jul 2021 11:12:31 +0200 Subject: [PATCH 612/741] Remove DataFlow references from XsltInjection.qll --- .../code/java/security/XsltInjection.qll | 112 +++++++++--------- .../code/java/security/XsltInjectionQuery.qll | 65 ++++++++++ 2 files changed, 118 insertions(+), 59 deletions(-) diff --git a/java/ql/src/semmle/code/java/security/XsltInjection.qll b/java/ql/src/semmle/code/java/security/XsltInjection.qll index 1ebf961e03c..75288492004 100644 --- a/java/ql/src/semmle/code/java/security/XsltInjection.qll +++ b/java/ql/src/semmle/code/java/security/XsltInjection.qll @@ -3,7 +3,6 @@ import java import semmle.code.java.dataflow.DataFlow import semmle.code.java.dataflow.ExternalFlow -import semmle.code.java.security.XmlParsers /** * A data flow sink for unvalidated user input that is used in XSLT transformation. @@ -51,7 +50,6 @@ private class DefaultXsltInjectionAdditionalTaintStep extends XsltInjectionAddit staxSourceStep(node1, node2) or documentBuilderStep(node1, node2) or domSourceStep(node1, node2) or - newTransformerOrTemplatesStep(node1, node2) or newTransformerFromTemplatesStep(node1, node2) or xsltCompilerStep(node1, node2) or xsltExecutableStep(node1, node2) or @@ -65,7 +63,10 @@ private class DefaultXsltInjectionAdditionalTaintStep extends XsltInjectionAddit */ private predicate xmlStreamReaderStep(DataFlow::Node n1, DataFlow::Node n2) { exists(XmlInputFactoryStreamReader xmlStreamReader | - n1.asExpr() = xmlStreamReader.getSink() and + if xmlStreamReader.getMethod().getParameterType(0) instanceof TypeString + then n1.asExpr() = xmlStreamReader.getArgument(1) + else n1.asExpr() = xmlStreamReader.getArgument(0) + | n2.asExpr() = xmlStreamReader ) } @@ -76,7 +77,10 @@ private predicate xmlStreamReaderStep(DataFlow::Node n1, DataFlow::Node n2) { */ private predicate xmlEventReaderStep(DataFlow::Node n1, DataFlow::Node n2) { exists(XmlInputFactoryEventReader xmlEventReader | - n1.asExpr() = xmlEventReader.getSink() and + if xmlEventReader.getMethod().getParameterType(0) instanceof TypeString + then n1.asExpr() = xmlEventReader.getArgument(1) + else n1.asExpr() = xmlEventReader.getArgument(0) + | n2.asExpr() = xmlEventReader ) } @@ -98,7 +102,7 @@ private predicate staxSourceStep(DataFlow::Node n1, DataFlow::Node n2) { */ private predicate documentBuilderStep(DataFlow::Node n1, DataFlow::Node n2) { exists(DocumentBuilderParse documentBuilder | - n1.asExpr() = documentBuilder.getSink() and + n1.asExpr() = documentBuilder.getArgument(0) and n2.asExpr() = documentBuilder ) } @@ -114,60 +118,6 @@ private predicate domSourceStep(DataFlow::Node n1, DataFlow::Node n2) { ) } -/** - * Holds if `n1` to `n2` is a dataflow step that converts between `Source` and `Transformer` or - * `Templates`, i.e. `TransformerFactory.newTransformer(tainted)` or - * `TransformerFactory.newTemplates(tainted)`. - */ -private predicate newTransformerOrTemplatesStep(DataFlow::Node n1, DataFlow::Node n2) { - exists(MethodAccess ma, Method m | ma.getMethod() = m | - n1.asExpr() = ma.getAnArgument() and - n2.asExpr() = ma and - m.getDeclaringType() instanceof TransformerFactory and - m.hasName(["newTransformer", "newTemplates"]) and - not exists(TransformerFactoryWithSecureProcessingFeatureFlowConfig conf | - conf.hasFlowToExpr(ma.getQualifier()) - ) - ) -} - -/** - * A data flow configuration for secure processing feature that is enabled on `TransformerFactory`. - */ -private class TransformerFactoryWithSecureProcessingFeatureFlowConfig extends DataFlow2::Configuration { - TransformerFactoryWithSecureProcessingFeatureFlowConfig() { - this = "TransformerFactoryWithSecureProcessingFeatureFlowConfig" - } - - override predicate isSource(DataFlow::Node src) { - exists(Variable v | v = src.asExpr().(VarAccess).getVariable() | - exists(TransformerFactoryFeatureConfig config | config.getQualifier() = v.getAnAccess() | - config.enables(configSecureProcessing()) - ) - ) - } - - override predicate isSink(DataFlow::Node sink) { - exists(MethodAccess ma | - sink.asExpr() = ma.getQualifier() and - ma.getMethod().getDeclaringType() instanceof TransformerFactory - ) - } - - override int fieldFlowBranchLimit() { result = 0 } -} - -/** A `ParserConfig` specific to `TransformerFactory`. */ -private class TransformerFactoryFeatureConfig extends ParserConfig { - TransformerFactoryFeatureConfig() { - exists(Method m | - m = this.getMethod() and - m.getDeclaringType() instanceof TransformerFactory and - m.hasName("setFeature") - ) - } -} - /** * Holds if `n1` to `n2` is a dataflow step that converts between `Templates` and `Transformer`, * i.e. `tainted.newTransformer()`. @@ -252,3 +202,47 @@ private class TypeXsltExecutable extends Class { private class TypeXsltPackage extends Class { TypeXsltPackage() { this.hasQualifiedName("net.sf.saxon.s9api", "XsltPackage") } } + +// XmlParsers classes +/** A call to `DocumentBuilder.parse`. */ +private class DocumentBuilderParse extends MethodAccess { + DocumentBuilderParse() { + exists(Method m | + this.getMethod() = m and + m.getDeclaringType() instanceof DocumentBuilder and + m.hasName("parse") + ) + } +} + +/** The class `javax.xml.parsers.DocumentBuilder`. */ +private class DocumentBuilder extends RefType { + DocumentBuilder() { this.hasQualifiedName("javax.xml.parsers", "DocumentBuilder") } +} + +/** A call to `XMLInputFactory.createXMLStreamReader`. */ +private class XmlInputFactoryStreamReader extends MethodAccess { + XmlInputFactoryStreamReader() { + exists(Method m | + this.getMethod() = m and + m.getDeclaringType() instanceof XmlInputFactory and + m.hasName("createXMLStreamReader") + ) + } +} + +/** A call to `XMLInputFactory.createEventReader`. */ +private class XmlInputFactoryEventReader extends MethodAccess { + XmlInputFactoryEventReader() { + exists(Method m | + this.getMethod() = m and + m.getDeclaringType() instanceof XmlInputFactory and + m.hasName("createXMLEventReader") + ) + } +} + +/** The class `javax.xml.stream.XMLInputFactory`. */ +private class XmlInputFactory extends RefType { + XmlInputFactory() { this.hasQualifiedName("javax.xml.stream", "XMLInputFactory") } +} diff --git a/java/ql/src/semmle/code/java/security/XsltInjectionQuery.qll b/java/ql/src/semmle/code/java/security/XsltInjectionQuery.qll index 8beafb22e10..34e533c0040 100644 --- a/java/ql/src/semmle/code/java/security/XsltInjectionQuery.qll +++ b/java/ql/src/semmle/code/java/security/XsltInjectionQuery.qll @@ -3,6 +3,7 @@ import java import semmle.code.java.dataflow.FlowSources import semmle.code.java.dataflow.TaintTracking +import semmle.code.java.security.XmlParsers import semmle.code.java.security.XsltInjection /** @@ -23,3 +24,67 @@ class XsltInjectionFlowConfig extends TaintTracking::Configuration { any(XsltInjectionAdditionalTaintStep c).step(node1, node2) } } + +/** + * A set of additional taint steps to consider when taint tracking XSLT related data flows. + * These steps use data flow logic themselves. + */ +private class DataFlowXsltInjectionAdditionalTaintStep extends XsltInjectionAdditionalTaintStep { + override predicate step(DataFlow::Node node1, DataFlow::Node node2) { + newTransformerOrTemplatesStep(node1, node2) + } +} + +/** + * Holds if `n1` to `n2` is a dataflow step that converts between `Source` and `Transformer` or + * `Templates`, i.e. `TransformerFactory.newTransformer(tainted)` or + * `TransformerFactory.newTemplates(tainted)`. + */ +private predicate newTransformerOrTemplatesStep(DataFlow::Node n1, DataFlow::Node n2) { + exists(MethodAccess ma, Method m | ma.getMethod() = m | + n1.asExpr() = ma.getAnArgument() and + n2.asExpr() = ma and + m.getDeclaringType() instanceof TransformerFactory and + m.hasName(["newTransformer", "newTemplates"]) and + not exists(TransformerFactoryWithSecureProcessingFeatureFlowConfig conf | + conf.hasFlowToExpr(ma.getQualifier()) + ) + ) +} + +/** + * A data flow configuration for secure processing feature that is enabled on `TransformerFactory`. + */ +private class TransformerFactoryWithSecureProcessingFeatureFlowConfig extends DataFlow2::Configuration { + TransformerFactoryWithSecureProcessingFeatureFlowConfig() { + this = "TransformerFactoryWithSecureProcessingFeatureFlowConfig" + } + + override predicate isSource(DataFlow::Node src) { + exists(Variable v | v = src.asExpr().(VarAccess).getVariable() | + exists(TransformerFactoryFeatureConfig config | config.getQualifier() = v.getAnAccess() | + config.enables(configSecureProcessing()) + ) + ) + } + + override predicate isSink(DataFlow::Node sink) { + exists(MethodAccess ma | + sink.asExpr() = ma.getQualifier() and + ma.getMethod().getDeclaringType() instanceof TransformerFactory + ) + } + + override int fieldFlowBranchLimit() { result = 0 } +} + +/** A `ParserConfig` specific to `TransformerFactory`. */ +private class TransformerFactoryFeatureConfig extends ParserConfig { + TransformerFactoryFeatureConfig() { + exists(Method m | + m = this.getMethod() and + m.getDeclaringType() instanceof TransformerFactory and + m.hasName("setFeature") + ) + } +} From 95751fcc21cfe82e7aac3418c3046ec34496135c Mon Sep 17 00:00:00 2001 From: mc <42146119+mchammer01@users.noreply.github.com> Date: Thu, 29 Jul 2021 11:17:39 +0100 Subject: [PATCH 613/741] Update XsltInjection.qhelp Made a few minor tweaks during editorial review --- java/ql/src/Security/CWE/CWE-074/XsltInjection.qhelp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/java/ql/src/Security/CWE/CWE-074/XsltInjection.qhelp b/java/ql/src/Security/CWE/CWE-074/XsltInjection.qhelp index 4392550d33f..402f4f7f5db 100644 --- a/java/ql/src/Security/CWE/CWE-074/XsltInjection.qhelp +++ b/java/ql/src/Security/CWE/CWE-074/XsltInjection.qhelp @@ -4,12 +4,12 @@

    XSLT (Extensible Stylesheet Language Transformations) is a language for transforming XML -documents into other XML documents or other formats. Processing of unvalidated XSLT stylesheet can -let attacker to read arbitrary files from the filesystem or to execute arbitrary code.

    +documents into other XML documents or other formats. Processing unvalidated XSLT stylesheets can +allow attackers to read arbitrary files from the filesystem or to execute arbitrary code.

    -

    The general recommendation is to not process untrusted XSLT stylesheets. If user provided +

    The general recommendation is to not process untrusted XSLT stylesheets. If user-provided stylesheets must be processed, enable the secure processing mode.

    @@ -17,7 +17,7 @@ stylesheets must be processed, enable the secure processing mode.

    In the following examples, the code accepts an XSLT stylesheet from the user and processes it.

    -

    In the first example, the user provided XSLT stylesheet is parsed and processed.

    +

    In the first example, the user-provided XSLT stylesheet is parsed and processed.

    In the second example, secure processing mode is enabled.

    From ad08ccb50b40c6eef2f8b99d06ad317bd071fd03 Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Thu, 29 Jul 2021 16:57:04 +0200 Subject: [PATCH 614/741] Apply suggestion from code review --- java/ql/src/Security/CWE/CWE-074/XsltInjection.ql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/ql/src/Security/CWE/CWE-074/XsltInjection.ql b/java/ql/src/Security/CWE/CWE-074/XsltInjection.ql index 3728ac9f3ee..aeec7441cb4 100644 --- a/java/ql/src/Security/CWE/CWE-074/XsltInjection.ql +++ b/java/ql/src/Security/CWE/CWE-074/XsltInjection.ql @@ -1,6 +1,6 @@ /** * @name XSLT transformation with user-controlled stylesheet - * @description Doing an XSLT transformation with user-controlled stylesheet can lead to + * @description Performing an XSLT transformation with user-controlled stylesheets can lead to * information disclosure or execution of arbitrary code. * @kind path-problem * @problem.severity error From 78c12dc505b6732498a7c4cca7d6af141ccd9773 Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Mon, 27 Sep 2021 12:04:14 +0200 Subject: [PATCH 615/741] Move to lib --- java/ql/lib/semmle/code/java/dataflow/ExternalFlow.qll | 2 +- .../ql/{src => lib}/semmle/code/java/security/XsltInjection.qll | 0 .../semmle/code/java/security/XsltInjectionQuery.qll | 0 3 files changed, 1 insertion(+), 1 deletion(-) rename java/ql/{src => lib}/semmle/code/java/security/XsltInjection.qll (100%) rename java/ql/{src => lib}/semmle/code/java/security/XsltInjectionQuery.qll (100%) diff --git a/java/ql/lib/semmle/code/java/dataflow/ExternalFlow.qll b/java/ql/lib/semmle/code/java/dataflow/ExternalFlow.qll index f88cdcb1593..7f46f2d79b6 100644 --- a/java/ql/lib/semmle/code/java/dataflow/ExternalFlow.qll +++ b/java/ql/lib/semmle/code/java/dataflow/ExternalFlow.qll @@ -110,7 +110,7 @@ private module Frameworks { private import semmle.code.java.security.MvelInjection private import semmle.code.java.security.OgnlInjection private import semmle.code.java.security.XPath - private import semmle.code.java.security.XsltInjectionSinkModels + private import semmle.code.java.security.XsltInjection private import semmle.code.java.frameworks.android.Android private import semmle.code.java.frameworks.android.SQLite private import semmle.code.java.frameworks.Jdbc diff --git a/java/ql/src/semmle/code/java/security/XsltInjection.qll b/java/ql/lib/semmle/code/java/security/XsltInjection.qll similarity index 100% rename from java/ql/src/semmle/code/java/security/XsltInjection.qll rename to java/ql/lib/semmle/code/java/security/XsltInjection.qll diff --git a/java/ql/src/semmle/code/java/security/XsltInjectionQuery.qll b/java/ql/lib/semmle/code/java/security/XsltInjectionQuery.qll similarity index 100% rename from java/ql/src/semmle/code/java/security/XsltInjectionQuery.qll rename to java/ql/lib/semmle/code/java/security/XsltInjectionQuery.qll From ded30885293f934e6d4d3436a5789de43f7260d7 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Mon, 27 Sep 2021 12:08:40 +0200 Subject: [PATCH 616/741] Python/JS: Recognize SHA-3 hash functions Official names are SHA3-224, SHA3-256, SHA3-384, SHA3-512 as per https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.202.pdf --- .../semmle/javascript/security/CryptoAlgorithms.qll | 6 +++++- .../ql/lib/semmle/python/concepts/CryptoAlgorithms.qll | 6 +++++- .../test/library-tests/frameworks/crypto/test_sha3.py | 10 ++++++++++ .../library-tests/frameworks/cryptodome/test_sha3.py | 10 ++++++++++ 4 files changed, 30 insertions(+), 2 deletions(-) create mode 100644 python/ql/test/library-tests/frameworks/crypto/test_sha3.py create mode 100644 python/ql/test/library-tests/frameworks/cryptodome/test_sha3.py diff --git a/javascript/ql/lib/semmle/javascript/security/CryptoAlgorithms.qll b/javascript/ql/lib/semmle/javascript/security/CryptoAlgorithms.qll index d9f25b42c9a..a5bfd6696be 100644 --- a/javascript/ql/lib/semmle/javascript/security/CryptoAlgorithms.qll +++ b/javascript/ql/lib/semmle/javascript/security/CryptoAlgorithms.qll @@ -28,7 +28,11 @@ private module AlgorithmNames { name = "SHA256" or name = "SHA384" or name = "SHA512" or - name = "SHA3" + name = "SHA3" or + name = "SHA3224" or + name = "SHA3256" or + name = "SHA3384" or + name = "SHA3512" } predicate isWeakHashingAlgorithm(string name) { diff --git a/python/ql/lib/semmle/python/concepts/CryptoAlgorithms.qll b/python/ql/lib/semmle/python/concepts/CryptoAlgorithms.qll index d9f25b42c9a..a5bfd6696be 100644 --- a/python/ql/lib/semmle/python/concepts/CryptoAlgorithms.qll +++ b/python/ql/lib/semmle/python/concepts/CryptoAlgorithms.qll @@ -28,7 +28,11 @@ private module AlgorithmNames { name = "SHA256" or name = "SHA384" or name = "SHA512" or - name = "SHA3" + name = "SHA3" or + name = "SHA3224" or + name = "SHA3256" or + name = "SHA3384" or + name = "SHA3512" } predicate isWeakHashingAlgorithm(string name) { diff --git a/python/ql/test/library-tests/frameworks/crypto/test_sha3.py b/python/ql/test/library-tests/frameworks/crypto/test_sha3.py new file mode 100644 index 00000000000..426d0266fc4 --- /dev/null +++ b/python/ql/test/library-tests/frameworks/crypto/test_sha3.py @@ -0,0 +1,10 @@ +from Crypto.Hash import SHA3_224 + +hasher = SHA3_224.new(b"secret message") # $ CryptographicOperation CryptographicOperationInput=b"secret message" CryptographicOperationAlgorithm=SHA3224 +print(hasher.hexdigest()) + + +hasher = SHA3_224.new() # $ CryptographicOperation CryptographicOperationAlgorithm=SHA3224 +hasher.update(b"secret") # $ CryptographicOperation CryptographicOperationInput=b"secret" CryptographicOperationAlgorithm=SHA3224 +hasher.update(b" message") # $ CryptographicOperation CryptographicOperationInput=b" message" CryptographicOperationAlgorithm=SHA3224 +print(hasher.hexdigest()) diff --git a/python/ql/test/library-tests/frameworks/cryptodome/test_sha3.py b/python/ql/test/library-tests/frameworks/cryptodome/test_sha3.py new file mode 100644 index 00000000000..2329fd7e1c0 --- /dev/null +++ b/python/ql/test/library-tests/frameworks/cryptodome/test_sha3.py @@ -0,0 +1,10 @@ +from Cryptodome.Hash import SHA3_224 + +hasher = SHA3_224.new(b"secret message") # $ CryptographicOperation CryptographicOperationInput=b"secret message" CryptographicOperationAlgorithm=SHA3224 +print(hasher.hexdigest()) + + +hasher = SHA3_224.new() # $ CryptographicOperation CryptographicOperationAlgorithm=SHA3224 +hasher.update(b"secret") # $ CryptographicOperation CryptographicOperationInput=b"secret" CryptographicOperationAlgorithm=SHA3224 +hasher.update(b" message") # $ CryptographicOperation CryptographicOperationInput=b" message" CryptographicOperationAlgorithm=SHA3224 +print(hasher.hexdigest()) From d5f675c2dc4f8f3c9fa9f43b79d46f9bb6d0a053 Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Mon, 27 Sep 2021 12:58:28 +0200 Subject: [PATCH 617/741] Fix unbound field Add tests for non-exported providers --- .../semmle/code/java/dataflow/FlowSources.qll | 5 +- .../content-provider/AndroidManifest.xml | 5 + .../android/content-provider/Safe.java | 174 ++++++++++++++++++ .../android/content-provider/test.ql | 2 - 4 files changed, 183 insertions(+), 3 deletions(-) create mode 100644 java/ql/test/library-tests/frameworks/android/content-provider/Safe.java diff --git a/java/ql/lib/semmle/code/java/dataflow/FlowSources.qll b/java/ql/lib/semmle/code/java/dataflow/FlowSources.qll index 5a619bd9cfd..bb041c9896c 100644 --- a/java/ql/lib/semmle/code/java/dataflow/FlowSources.qll +++ b/java/ql/lib/semmle/code/java/dataflow/FlowSources.qll @@ -252,7 +252,10 @@ class ExportedAndroidIntentInput extends RemoteFlowSource, AndroidIntentInput { class AndroidContentProviderInput extends DataFlow::Node { AndroidContentProvider declaringType; - AndroidContentProviderInput() { sourceNode(this, "contentprovider") } + AndroidContentProviderInput() { + sourceNode(this, "contentprovider") and + this.asParameter().getCallable().getDeclaringType() = declaringType + } } /** A parameter of an entry-point method declared in an exported `ContentProvider` class. */ diff --git a/java/ql/test/library-tests/frameworks/android/content-provider/AndroidManifest.xml b/java/ql/test/library-tests/frameworks/android/content-provider/AndroidManifest.xml index c21c29dcf56..cf30b54e4ef 100644 --- a/java/ql/test/library-tests/frameworks/android/content-provider/AndroidManifest.xml +++ b/java/ql/test/library-tests/frameworks/android/content-provider/AndroidManifest.xml @@ -27,5 +27,10 @@ android:name=".Test" android:authority="com.example.myapp.Test" android:exported="true" /> + + diff --git a/java/ql/test/library-tests/frameworks/android/content-provider/Safe.java b/java/ql/test/library-tests/frameworks/android/content-provider/Safe.java new file mode 100644 index 00000000000..8600f0bf515 --- /dev/null +++ b/java/ql/test/library-tests/frameworks/android/content-provider/Safe.java @@ -0,0 +1,174 @@ +package com.example.app; + +import java.io.FileNotFoundException; +import android.content.ContentProvider; +import android.content.ContentValues; +import android.content.res.AssetFileDescriptor; +import android.database.Cursor; +import android.net.Uri; +import android.os.Bundle; +import android.os.CancellationSignal; +import android.os.ParcelFileDescriptor; +import android.os.RemoteException; + +// This Content Provider isn't exported, so there shouldn't be any flow +public class Safe extends ContentProvider { + + void sink(Object o) {} + + @Override + public Bundle call(String authority, String method, String arg, Bundle extras) { + sink(authority); + sink(method); + sink(arg); + sink(extras.get("some_key")); + return null; + } + + public Bundle call(String method, String arg, Bundle extras) { + sink(method); + sink(arg); + sink(extras.get("some_key")); + return null; + } + + @Override + public int delete(Uri uri, String selection, String[] selectionArgs) { + sink(uri); + sink(selection); + sink(selectionArgs); + return 0; + } + + @Override + public int delete(Uri uri, Bundle extras) { + sink(uri); + sink(extras.get("some_key")); + return 0; + } + + @Override + public String getType(Uri uri) { + sink(uri); + return null; + } + + @Override + public Uri insert(Uri uri, ContentValues values, Bundle extras) { + sink(uri); + sink(values); + sink(extras.get("some_key")); + return null; + } + + @Override + public Uri insert(Uri uri, ContentValues values) { + sink(uri); + sink(values); + return null; + } + + @Override + public AssetFileDescriptor openAssetFile(Uri uri, String mode, CancellationSignal signal) { + sink(uri); + sink(mode); + sink(signal); + return null; + } + + @Override + public AssetFileDescriptor openAssetFile(Uri uri, String mode) { + sink(uri); + sink(mode); + return null; + } + + @Override + public AssetFileDescriptor openTypedAssetFile(Uri uri, String mimeTypeFilter, Bundle opts, + CancellationSignal signal) throws RemoteException, FileNotFoundException { + sink(uri); + sink(mimeTypeFilter); + sink(opts.get("some_key")); + sink(signal); + return null; + } + + @Override + public AssetFileDescriptor openTypedAssetFile(Uri uri, String mimeTypeFilter, Bundle opts) + throws FileNotFoundException { + sink(uri); + sink(mimeTypeFilter); + sink(opts.get("some_key")); + return null; + } + + @Override + public ParcelFileDescriptor openFile(Uri uri, String mode, CancellationSignal signal) { + sink(uri); + sink(mode); + sink(signal); + return null; + } + + @Override + public ParcelFileDescriptor openFile(Uri uri, String mode) { + sink(uri); + sink(mode); + return null; + } + + @Override + public Cursor query(Uri uri, String[] projection, Bundle queryArgs, + CancellationSignal cancellationSignal) { + sink(uri); + sink(projection); + sink(queryArgs.get("some_key")); + sink(cancellationSignal); + return null; + } + + @Override + public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, + String sortOrder) { + sink(uri); + sink(projection); + sink(selection); + sink(selectionArgs); + return null; + } + + @Override + public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, + String sortOrder, CancellationSignal cancellationSignal) { + sink(uri); + sink(projection); + sink(selection); + sink(selectionArgs); + sink(sortOrder); + sink(cancellationSignal); + return null; + } + + @Override + public int update(Uri uri, ContentValues values, Bundle extras) { + sink(uri); + sink(values); + sink(extras.get("some_key")); + return 0; + } + + @Override + public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { + sink(uri); + sink(values); + sink(selection); + sink(selectionArgs); + return 0; + } + + + @Override + public boolean onCreate() { + return false; + } +} diff --git a/java/ql/test/library-tests/frameworks/android/content-provider/test.ql b/java/ql/test/library-tests/frameworks/android/content-provider/test.ql index 336dd5aca98..05593052acf 100644 --- a/java/ql/test/library-tests/frameworks/android/content-provider/test.ql +++ b/java/ql/test/library-tests/frameworks/android/content-provider/test.ql @@ -8,6 +8,4 @@ class ProviderTaintFlowConf extends DefaultTaintFlowConf { class ProviderInlineFlowTest extends InlineFlowTest { override DataFlow::Configuration getValueFlowConfig() { none() } - - override DataFlow::Configuration getTaintFlowConfig() { result instanceof ProviderTaintFlowConf } } From 18020707b8395c59855a0a70d8efd00e2c70dea2 Mon Sep 17 00:00:00 2001 From: Edoardo Pirovano Date: Wed, 18 Aug 2021 13:52:01 +0100 Subject: [PATCH 618/741] QL Language Spec: Trailing comma in set literal --- .../ql-language-reference/ql-language-specification.rst | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/docs/codeql/ql-language-reference/ql-language-specification.rst b/docs/codeql/ql-language-reference/ql-language-specification.rst index c1b2f830dba..4d4739b5c26 100644 --- a/docs/codeql/ql-language-reference/ql-language-specification.rst +++ b/docs/codeql/ql-language-reference/ql-language-specification.rst @@ -1323,7 +1323,7 @@ Set literals denote a choice from a collection of values. :: - setliteral ::= "[" expr ("," expr)* "]" + setliteral ::= "[" expr ("," expr)* ","? "]" Set literals can be of any type, but the types within a set literal have to be consistent according to the following criterion: At least one of the set elements has to be of a type that is a supertype of all the set element types. This supertype is the type of the set literal. For example, ``float`` is a supertype of ``float`` and ``int``, therefore ``x = [4, 5.6]`` is valid. On the other hand, ``y = [5, "test"]`` does not adhere to the criterion. @@ -1331,6 +1331,8 @@ The values of a set literal expression are all the values of all the contained e Set literals are supported from release 2.1.0 of the CodeQL CLI, and release 1.24 of LGTM Enterprise. +Since release 2.6.3 of the CodeQL CLI, and release 1.28 of LGTM Enterprise, a trailing comma is allowed in a set literal. + Disambiguation of expressions ----------------------------- @@ -2168,7 +2170,7 @@ The complete grammar for QL is as follows: range ::= "[" expr ".." expr "]" - setliteral ::= "[" expr ("," expr)* "]" + setliteral ::= "[" expr ("," expr)* ","? "]" simpleId ::= lowerId | upperId From 3d1d491e6bfc236e26f011047fe9fdf16707093b Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Mon, 13 Sep 2021 16:29:07 +0100 Subject: [PATCH 619/741] Model java.lang.Object.clone() better for access paths. Model value flow for Element, MapKey and MapValue. This assumes that clone() is a shallow copy. --- .../lib/semmle/code/java/dataflow/internal/ContainerFlow.qll | 3 +++ 1 file changed, 3 insertions(+) diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/ContainerFlow.qll b/java/ql/lib/semmle/code/java/dataflow/internal/ContainerFlow.qll index 47bdc2402d2..6c72bbd451b 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/ContainerFlow.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/ContainerFlow.qll @@ -95,6 +95,9 @@ private class ContainerFlowSummaries extends SummaryModelCsv { override predicate row(string row) { row = [ + "java.lang;Object;true;clone;;;MapKey of Argument[-1];MapKey of ReturnValue;value", + "java.lang;Object;true;clone;;;MapValue of Argument[-1];MapValue of ReturnValue;value", + "java.lang;Object;true;clone;;;Element of Argument[-1];Element of ReturnValue;value", "java.util;Map$Entry;true;getKey;;;MapKey of Argument[-1];ReturnValue;value", "java.util;Map$Entry;true;getValue;;;MapValue of Argument[-1];ReturnValue;value", "java.util;Map$Entry;true;setValue;;;MapValue of Argument[-1];ReturnValue;value", From fd0fb9483eb2224f4a3cdb58de1bfa73fb5e8200 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Thu, 1 Jul 2021 12:37:37 +0100 Subject: [PATCH 620/741] Model the remaining subpackages in Apache Commons Collections --- .../java/frameworks/apache/Collections.qll | 715 +++++++++++++++++- .../frameworks/apache-collections/test.ql | 2 - 2 files changed, 713 insertions(+), 4 deletions(-) diff --git a/java/ql/lib/semmle/code/java/frameworks/apache/Collections.qll b/java/ql/lib/semmle/code/java/frameworks/apache/Collections.qll index bbda599b911..de16efd13fd 100644 --- a/java/ql/lib/semmle/code/java/frameworks/apache/Collections.qll +++ b/java/ql/lib/semmle/code/java/frameworks/apache/Collections.qll @@ -136,6 +136,9 @@ private class ApacheCollectionsModel extends SummaryModelCsv { } } +// Note that when lambdas are supported we should model the package `org.apache.commons.collections4.functors`, +// and when more general callable flow is supported we should model the package +// `org.apache.commons.collections4.sequence`. /** * Value-propagating models for classes in the package `org.apache.commons.collections4.keyvalue`. */ @@ -170,6 +173,25 @@ private class ApacheKeyValueModel extends SummaryModelCsv { ".keyvalue;DefaultMapEntry;true;DefaultMapEntry;(KeyValue);;MapValue of Argument[0];MapValue of Argument[-1];value", ".keyvalue;DefaultMapEntry;true;DefaultMapEntry;(Entry);;MapKey of Argument[0];MapKey of Argument[-1];value", ".keyvalue;DefaultMapEntry;true;DefaultMapEntry;(Entry);;MapValue of Argument[0];MapValue of Argument[-1];value", + ".keyvalue;MultiKey;true;MultiKey;(Object[]);;ArrayElement of Argument[0];Element of Argument[-1];value", + ".keyvalue;MultiKey;true;MultiKey;(Object[],boolean);;ArrayElement of Argument[0];Element of Argument[-1];value", + ".keyvalue;MultiKey;true;MultiKey;(Object,Object);;Argument[0];Element of Argument[-1];value", + ".keyvalue;MultiKey;true;MultiKey;(Object,Object);;Argument[1];Element of Argument[-1];value", + ".keyvalue;MultiKey;true;MultiKey;(Object,Object,Object);;Argument[0];Element of Argument[-1];value", + ".keyvalue;MultiKey;true;MultiKey;(Object,Object,Object);;Argument[1];Element of Argument[-1];value", + ".keyvalue;MultiKey;true;MultiKey;(Object,Object,Object);;Argument[2];Element of Argument[-1];value", + ".keyvalue;MultiKey;true;MultiKey;(Object,Object,Object,Object);;Argument[0];Element of Argument[-1];value", + ".keyvalue;MultiKey;true;MultiKey;(Object,Object,Object,Object);;Argument[1];Element of Argument[-1];value", + ".keyvalue;MultiKey;true;MultiKey;(Object,Object,Object,Object);;Argument[2];Element of Argument[-1];value", + ".keyvalue;MultiKey;true;MultiKey;(Object,Object,Object,Object);;Argument[3];Element of Argument[-1];value", + ".keyvalue;MultiKey;true;MultiKey;(Object,Object,Object,Object,Object);;Argument[0];Element of Argument[-1];value", + ".keyvalue;MultiKey;true;MultiKey;(Object,Object,Object,Object,Object);;Argument[1];Element of Argument[-1];value", + ".keyvalue;MultiKey;true;MultiKey;(Object,Object,Object,Object,Object);;Argument[2];Element of Argument[-1];value", + ".keyvalue;MultiKey;true;MultiKey;(Object,Object,Object,Object,Object);;Argument[3];Element of Argument[-1];value", + ".keyvalue;MultiKey;true;MultiKey;(Object,Object,Object,Object,Object);;Argument[4];Element of Argument[-1];value", + ".keyvalue;MultiKey;true;getKeys;;;Element of Argument[-1];ArrayElement of ReturnValue;value", + ".keyvalue;MultiKey;true;getKey;;;Element of Argument[-1];ReturnValue;value", + ".keyvalue;MultiKey;true;readResolve;;;Argument[-1];ReturnValue;value", ".keyvalue;TiedMapEntry;true;TiedMapEntry;;;MapValue of Argument[0];MapValue of Argument[-1];value", ".keyvalue;TiedMapEntry;true;TiedMapEntry;;;Argument[1];MapKey of Argument[-1];value", ".keyvalue;UnmodifiableMapEntry;true;UnmodifiableMapEntry;(Object,Object);;Argument[0];MapKey of Argument[-1];value", @@ -182,6 +204,695 @@ private class ApacheKeyValueModel extends SummaryModelCsv { } } +/** + * Value-propagating models for classes in the package `org.apache.commons.collections4.bag`. + */ +private class ApacheBagModel extends SummaryModelCsv { + override predicate row(string row) { + row = + ["org.apache.commons.collections4", "org.apache.commons.collections"] + + [ + // Note that when lambdas are supported we should have more models for TransformedBag, TransformedSortedBag + ".bag;AbstractBagDecorator;true;AbstractBagDecorator;;;Element of Argument[0];Element of Argument[-1];value", + ".bag;AbstractMapBag;true;AbstractMapBag;;;MapKey of Argument[0];Element of Argument[-1];value", + ".bag;AbstractMapBag;true;getMap;;;Element of Argument[-1];MapKey of ReturnValue;value", + ".bag;AbstractSortedBagDecorator;true;AbstractSortedBagDecorator;;;Element of Argument[0];Element of Argument[-1];value", + ".bag;CollectionBag;true;CollectionBag;;;Element of Argument[0];Element of Argument[-1];value", + ".bag;CollectionBag;true;collectionBag;;;Element of Argument[0];Element of ReturnValue;value", + ".bag;CollectionSortedBag;true;CollectionSortedBag;;;Element of Argument[0];Element of Argument[-1];value", + ".bag;CollectionSortedBag;true;collectionSortedBag;;;Element of Argument[0];Element of ReturnValue;value", + ".bag;HashBag;true;HashBag;;;Element of Argument[0];Element of Argument[-1];value", + ".bag;PredicatedBag;true;PredicatedBag;;;Element of Argument[0];Element of Argument[-1];value", + ".bag;PredicatedBag;true;predicatedBag;;;Element of Argument[0];Element of ReturnValue;value", + ".bag;PredicatedSortedBag;true;PredicatedSortedBag;;;Element of Argument[0];Element of Argument[-1];value", + ".bag;PredicatedSortedBag;true;predicatedSortedBag;;;Element of Argument[0];Element of ReturnValue;value", + ".bag;SynchronizedBag;true;SynchronizedBag;;;Element of Argument[0];Element of Argument[-1];value", + ".bag;SynchronizedBag;true;synchronizedBag;;;Element of Argument[0];Element of ReturnValue;value", + ".bag;SynchronizedBag;true;getBag;;;Element of Argument[-1];Element of ReturnValue;value", + ".bag;SynchronizedSortedBag;true;SynchronizedSortedBag;;;Element of Argument[0];Element of Argument[-1];value", + ".bag;SynchronizedSortedBag;true;synchronizedSortedBag;;;Element of Argument[0];Element of ReturnValue;value", + ".bag;SynchronizedSortedBag;true;getSortedBag;;;Element of Argument[0];Element of ReturnValue;value", + ".bag;TransformedBag;true;TransformedBag;;;Element of Argument[0];Element of Argument[-1];value", + ".bag;TransformedBag;true;transformedBag;;;Element of Argument[0];Element of ReturnValue;value", + ".bag;TransformedBag;true;getBag;;;Element of Argument[-1];Element of ReturnValue;value", + ".bag;TransformedSortedBag;true;TransformedSortedBag;;;Element of Argument[0];Element of Argument[-1];value", + ".bag;TransformedSortedBag;true;transformedSortedBag;;;Element of Argument[0];Element of ReturnValue;value", + ".bag;TransformedSortedBag;true;getSortedBag;;;Element of Argument[0];Element of ReturnValue;value", + ".bag;TreeBag;true;TreeBag;(Collection);;Element of Argument[0];Element of Argument[-1];value", + ".bag;UnmodifiableBag;true;unmodifiableBag;;;Element of Argument[0];Element of ReturnValue;value", + ".bag;UnmodifiableSortedBag;true;unmodifiableSortedBag;;;Element of Argument[0];Element of ReturnValue;value" + ] + } +} + +/** + * Value-propagating models for classes in the package `org.apache.commons.collections4.bidimap`. + */ +private class ApacheBidiMapModel extends SummaryModelCsv { + override predicate row(string row) { + row = + ["org.apache.commons.collections4", "org.apache.commons.collections"] + + [ + ".bidimap;AbstractBidiMapDecorator;true;AbstractBidiMapDecorator;;;MapKey of Argument[0];MapKey of Argument[-1];value", + ".bidimap;AbstractBidiMapDecorator;true;AbstractBidiMapDecorator;;;MapValue of Argument[0];MapValue of Argument[-1];value", + ".bidimap;AbstractDualBidiMap$BidiMapIterator;true;BidiMapIterator;;;MapKey of Argument[0];MapKey of Argument[-1];value", + ".bidimap;AbstractDualBidiMap$BidiMapIterator;true;BidiMapIterator;;;MapValue of Argument[0];MapValue of Argument[-1];value", + ".bidimap;AbstractDualBidiMap$EntrySet;true;EntrySet;;;MapKey of Argument[0];MapKey of Element of Argument[-1];value", + ".bidimap;AbstractDualBidiMap$EntrySet;true;EntrySet;;;MapValue of Argument[0];MapValue of Element of Argument[-1];value", + ".bidimap;AbstractDualBidiMap$EntrySetIterator;true;EntrySetIterator;;;Element of Argument[0];MapKey of Element of Argument[-1];value", + ".bidimap;AbstractDualBidiMap$EntrySetIterator;true;EntrySetIterator;;;MapValue of Element of Argument[0];MapValue of Element of Argument[-1];value", + ".bidimap;AbstractDualBidiMap$EntrySetIterator;true;EntrySetIterator;;;MapKey of Argument[1];MapKey of Element of Argument[-1];value", + ".bidimap;AbstractDualBidiMap$EntrySetIterator;true;EntrySetIterator;;;MapValue of Argument[1];MapValue of Element of Argument[-1];value", + ".bidimap;AbstractDualBidiMap$KeySet;true;KeySet;;;MapKey of Argument[0];Element of Argument[-1];value", + ".bidimap;AbstractDualBidiMap$KeySetIterator;true;KeySetIterator;;;Element of Argument[0];Element of Argument[-1];value", + ".bidimap;AbstractDualBidiMap$KeySetIterator;true;KeySetIterator;;;MapKey of Argument[1];Element of Argument[-1];value", + ".bidimap;AbstractDualBidiMap$MapEntry;true;MapEntry;;;MapKey of Argument[0];MapKey of Argument[-1];value", + ".bidimap;AbstractDualBidiMap$MapEntry;true;MapEntry;;;MapValue of Argument[0];MapValue of Argument[-1];value", + ".bidimap;AbstractDualBidiMap$Values;true;Values;;;MapValue of Argument[0];Element of Argument[-1];value", + ".bidimap;AbstractDualBidiMap$ValuesIterator;true;ValuesIterator;;;Element of Argument[0];Element of Argument[-1];value", + ".bidimap;AbstractDualBidiMap$View;true;View;;;Element of Argument[0];Element of Argument[-1];value", + ".bidimap;AbstractDualBidiMap;true;AbstractDualBidiMap;;;MapKey of Argument[0];MapKey of Argument[-1];value", + ".bidimap;AbstractDualBidiMap;true;AbstractDualBidiMap;;;MapValue of Argument[0];MapValue of Argument[-1];value", + ".bidimap;AbstractDualBidiMap;true;AbstractDualBidiMap;;;MapKey of Argument[1];MapValue of Argument[-1];value", + ".bidimap;AbstractDualBidiMap;true;AbstractDualBidiMap;;;MapValue of Argument[1];MapKey of Argument[-1];value", + ".bidimap;AbstractDualBidiMap;true;AbstractDualBidiMap;;;MapKey of Argument[2];MapValue of Argument[-1];value", + ".bidimap;AbstractDualBidiMap;true;AbstractDualBidiMap;;;MapValue of Argument[2];MapKey of Argument[-1];value", + ".bidimap;AbstractDualBidiMap;true;createBidiMap;;;MapKey of Argument[0];MapKey of Argument[-1];value", + ".bidimap;AbstractDualBidiMap;true;createBidiMap;;;MapValue of Argument[0];MapValue of Argument[-1];value", + ".bidimap;AbstractDualBidiMap;true;createBidiMap;;;MapKey of Argument[1];MapValue of Argument[-1];value", + ".bidimap;AbstractDualBidiMap;true;createBidiMap;;;MapValue of Argument[1];MapKey of Argument[-1];value", + ".bidimap;AbstractDualBidiMap;true;createBidiMap;;;MapKey of Argument[2];MapValue of Argument[-1];value", + ".bidimap;AbstractDualBidiMap;true;createBidiMap;;;MapValue of Argument[2];MapKey of Argument[-1];value", + ".bidimap;AbstractDualBidiMap;true;createKeySetIterator;;;MapKey of Argument[-1];Element of ReturnValue;value", + ".bidimap;AbstractDualBidiMap;true;createValuesIterator;;;MapValue of Argument[-1];Element of ReturnValue;value", + ".bidimap;AbstractDualBidiMap;true;createEntrySetIterator;;;MapKey of Argument[-1];MapKey of Element of ReturnValue;value", + ".bidimap;AbstractDualBidiMap;true;createEntrySetIterator;;;MapValue of Argument[-1];MapValue of Element of ReturnValue;value", + ".bidimap;AbstractOrderedBidiMapDecorator;true;AbstractOrderedBidiMapDecorator;;;MapKey of Argument[0];MapKey of Argument[-1];value", + ".bidimap;AbstractOrderedBidiMapDecorator;true;AbstractOrderedBidiMapDecorator;;;MapValue of Argument[0];MapValue of Argument[-1];value", + ".bidimap;AbstractSortedBidiMapDecorator;true;AbstractSortedBidiMapDecorator;;;MapKey of Argument[0];MapKey of Argument[-1];value", + ".bidimap;AbstractSortedBidiMapDecorator;true;AbstractSortedBidiMapDecorator;;;MapValue of Argument[0];MapValue of Argument[-1];value", + ".bidimap;DualHashBidiMap;true;DualHashBidiMap;;;MapKey of Argument[0];MapKey of Argument[-1];value", + ".bidimap;DualHashBidiMap;true;DualHashBidiMap;;;MapValue of Argument[0];MapValue of Argument[-1];value", + ".bidimap;DualHashBidiMap;true;DualHashBidiMap;;;MapKey of Argument[1];MapValue of Argument[-1];value", + ".bidimap;DualHashBidiMap;true;DualHashBidiMap;;;MapValue of Argument[1];MapKey of Argument[-1];value", + ".bidimap;DualHashBidiMap;true;DualHashBidiMap;;;MapKey of Argument[2];MapValue of Argument[-1];value", + ".bidimap;DualHashBidiMap;true;DualHashBidiMap;;;MapValue of Argument[2];MapKey of Argument[-1];value", + ".bidimap;DualLinkedHashBidiMap;true;DualLinkedHashBidiMap;;;MapKey of Argument[0];MapKey of Argument[-1];value", + ".bidimap;DualLinkedHashBidiMap;true;DualLinkedHashBidiMap;;;MapValue of Argument[0];MapValue of Argument[-1];value", + ".bidimap;DualLinkedHashBidiMap;true;DualLinkedHashBidiMap;;;MapKey of Argument[1];MapValue of Argument[-1];value", + ".bidimap;DualLinkedHashBidiMap;true;DualLinkedHashBidiMap;;;MapValue of Argument[1];MapKey of Argument[-1];value", + ".bidimap;DualLinkedHashBidiMap;true;DualLinkedHashBidiMap;;;MapKey of Argument[2];MapValue of Argument[-1];value", + ".bidimap;DualLinkedHashBidiMap;true;DualLinkedHashBidiMap;;;MapValue of Argument[2];MapKey of Argument[-1];value", + ".bidimap;DualTreeBidiMap;true;DualTreeBidiMap;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value", + ".bidimap;DualTreeBidiMap;true;DualTreeBidiMap;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value", + ".bidimap;DualTreeBidiMap;true;DualTreeBidiMap;(Map,Map,BidiMap);;MapKey of Argument[0];MapKey of Argument[-1];value", + ".bidimap;DualTreeBidiMap;true;DualTreeBidiMap;(Map,Map,BidiMap);;MapValue of Argument[0];MapValue of Argument[-1];value", + ".bidimap;DualTreeBidiMap;true;DualTreeBidiMap;(Map,Map,BidiMap);;MapKey of Argument[1];MapValue of Argument[-1];value", + ".bidimap;DualTreeBidiMap;true;DualTreeBidiMap;(Map,Map,BidiMap);;MapValue of Argument[1];MapKey of Argument[-1];value", + ".bidimap;DualTreeBidiMap;true;DualTreeBidiMap;(Map,Map,BidiMap);;MapKey of Argument[2];MapValue of Argument[-1];value", + ".bidimap;DualTreeBidiMap;true;DualTreeBidiMap;(Map,Map,BidiMap);;MapValue of Argument[2];MapKey of Argument[-1];value", + ".bidimap;DualTreeBidiMap;true;inverseOrderedBidiMap;;;MapKey of Argument[-1];MapValue of ReturnValue;value", + ".bidimap;DualTreeBidiMap;true;inverseOrderedBidiMap;;;MapValue of Argument[-1];MapKey of ReturnValue;value", + ".bidimap;DualTreeBidiMap;true;inverseSortedBidiMap;;;MapKey of Argument[-1];MapValue of ReturnValue;value", + ".bidimap;DualTreeBidiMap;true;inverseSortedBidiMap;;;MapValue of Argument[-1];MapKey of ReturnValue;value", + ".bidimap;DualTreeBidiMap$BidiOrderedMapIterator;true;BidiOrderedMapIterator;;;MapKey of Argument[-1];Element of ReturnValue;value", + ".bidimap;DualTreeBidiMap$BidiOrderedMapIterator;true;BidiOrderedMapIterator;;;MapValue of Argument[-1];MapValue of ReturnValue;value", + ".bidimap;DualTreeBidiMap$ViewMap;true;ViewMap;;;MapKey of Argument[1];MapKey of Argument[-1];value", + ".bidimap;DualTreeBidiMap$ViewMap;true;ViewMap;;;MapValue of Argument[1];MapValue of Argument[-1];value", + ".bidimap;TreeBidiMap;true;TreeBidiMap;;;MapKey of Argument[1];MapKey of Argument[-1];value", + ".bidimap;TreeBidiMap;true;TreeBidiMap;;;MapValue of Argument[1];MapValue of Argument[-1];value", + ".bidimap;UnmodifiableBidiMap;true;unmodifiableBidiMap;;;MapKey of Argument[0];MapKey of ReturnValue;value", + ".bidimap;UnmodifiableBidiMap;true;unmodifiableBidiMap;;;MapValue of Argument[0];MapValue of ReturnValue;value", + ".bidimap;UnmodifiableOrderedBidiMap;true;unmodifiableOrderedBidiMap;;;MapKey of Argument[0];MapKey of ReturnValue;value", + ".bidimap;UnmodifiableOrderedBidiMap;true;unmodifiableOrderedBidiMap;;;MapValue of Argument[0];MapValue of ReturnValue;value", + ".bidimap;UnmodifiableOrderedBidiMap;true;inverseOrderedBidiMap;;;MapKey of Argument[0];MapValue of ReturnValue;value", + ".bidimap;UnmodifiableOrderedBidiMap;true;inverseOrderedBidiMap;;;MapValue of Argument[0];MapKey of ReturnValue;value", + ".bidimap;UnmodifiableSortedBidiMap;true;unmodifiableSortedBidiMap;;;MapKey of Argument[0];MapKey of ReturnValue;value", + ".bidimap;UnmodifiableSortedBidiMap;true;unmodifiableSortedBidiMap;;;MapValue of Argument[0];MapValue of ReturnValue;value" + ] + } +} + +/** + * Value-propagating models for classes in the package `org.apache.commons.collections4.collection`. + */ +private class ApacheCollectionModel extends SummaryModelCsv { + override predicate row(string row) { + row = + ["org.apache.commons.collections4", "org.apache.commons.collections"] + + [ + // Note that when lambdas are supported we should have more models for TransformedCollection + ".collection;AbstractCollectionDecorator;true;AbstractCollectionDecorator;;;Element of Argument[0];Element of Argument[-1];value", + ".collection;AbstractCollectionDecorator;true;decorated;;;Element of Argument[-1];Element of ReturnValue;value", + ".collection;AbstractCollectionDecorator;true;setCollection;;;Element of Argument[0];Element of Argument[-1];value", + ".collection;CompositeCollection$CollectionMutator;true;add;;;Argument[2];Element of Argument[0];value", + ".collection;CompositeCollection$CollectionMutator;true;add;;;Argument[2];Element of Element of Argument[1];value", + ".collection;CompositeCollection$CollectionMutator;true;addAll;;;Element of Argument[2];Element of Argument[0];value", + ".collection;CompositeCollection$CollectionMutator;true;addAll;;;Element of Argument[2];Element of Element of Argument[1];value", + ".collection;CompositeCollection;true;CompositeCollection;(Collection);;Element of Argument[0];Element of Argument[-1];value", + ".collection;CompositeCollection;true;CompositeCollection;(Collection,Collection);;Element of Argument[0];Element of Argument[-1];value", + ".collection;CompositeCollection;true;CompositeCollection;(Collection,Collection);;Element of Argument[1];Element of Argument[-1];value", + ".collection;CompositeCollection;true;CompositeCollection;(Collection[]);;Element of Element of Argument[0];Element of Argument[-1];value", + ".collection;CompositeCollection;true;addComposited;(Collection);;Element of Argument[0];Element of Argument[-1];value", + ".collection;CompositeCollection;true;addComposited;(Collection,Collection);;Element of Argument[0];Element of Argument[-1];value", + ".collection;CompositeCollection;true;addComposited;(Collection,Collection);;Element of Argument[1];Element of Argument[-1];value", + ".collection;CompositeCollection;true;addComposited;(Collection[]);;Element of Element of Argument[0];Element of Argument[-1];value", + ".collection;CompositeCollection;true;toCollection;;;Element of Argument[-1];Element of ReturnValue;value", + ".collection;CompositeCollection;true;getCollections;;;Element of Argument[-1];Element of Element of ReturnValue;value", + ".collection;IndexedCollection;true;IndexedCollection;;;Element of Argument[0];Element of Argument[-1];value", + ".collection;IndexedCollection;true;uniqueIndexedCollection;;;Element of Argument[0];Element of ReturnValue;value", + ".collection;IndexedCollection;true;nonUniqueIndexedCollection;;;Element of Argument[0];Element of ReturnValue;value", + ".collection;IndexedCollection;true;get;;;Element of Argument[-1];ReturnValue;value", + ".collection;IndexedCollection;true;values;;;Element of Argument[-1];Element of ReturnValue;value", + ".collection;PredicatedCollection$Builder;true;add;;;Argument[0];Element of Argument[-1];value", + ".collection;PredicatedCollection$Builder;true;addAll;;;Element of Argument[0];Element of Argument[-1];value", + ".collection;PredicatedCollection$Builder;true;createPredicatedList;;;Element of Argument[-1];Element of ReturnValue;value", + ".collection;PredicatedCollection$Builder;true;createPredicatedList;;;Element of Argument[0];Element of ReturnValue;value", + ".collection;PredicatedCollection$Builder;true;createPredicatedSet;;;Element of Argument[-1];Element of ReturnValue;value", + ".collection;PredicatedCollection$Builder;true;createPredicatedSet;;;Element of Argument[0];Element of ReturnValue;value", + ".collection;PredicatedCollection$Builder;true;createPredicatedMultiSet;;;Element of Argument[-1];Element of ReturnValue;value", + ".collection;PredicatedCollection$Builder;true;createPredicatedMultiSet;;;Element of Argument[0];Element of ReturnValue;value", + ".collection;PredicatedCollection$Builder;true;createPredicatedMultiBag;;;Element of Argument[-1];Element of ReturnValue;value", + ".collection;PredicatedCollection$Builder;true;createPredicatedMultiBag;;;Element of Argument[0];Element of ReturnValue;value", + ".collection;PredicatedCollection$Builder;true;createPredicatedMultiQueue;;;Element of Argument[-1];Element of ReturnValue;value", + ".collection;PredicatedCollection$Builder;true;createPredicatedMultiQueue;;;Element of Argument[0];Element of ReturnValue;value", + ".collection;PredicatedCollection$Builder;true;rejectedElements;;;Element of Argument[-1];Element of ReturnValue;value", + ".collection;PredicatedCollection;true;PredicatedCollection;;;Element of Argument[0];Element of Argument[-1];value", + ".collection;PredicatedCollection;true;predicatedCollection;;;Element of Argument[0];Element of ReturnValue;value", + ".collection;SynchronizedCollection;true;SynchronizedCollection;;;Element of Argument[0];Element of Argument[-1];value", + ".collection;SynchronizedCollection;true;synchronizedCollection;;;Element of Argument[0];Element of ReturnValue;value", + ".collection;SynchronizedCollection;true;decorated;;;Element of Argument[-1];Element of ReturnValue;value", + ".collection;TransformedCollection;true;TransformedCollection;;;Element of Argument[0];Element of Argument[-1];value", + ".collection;TransformedCollection;true;transformingCollection;;;Element of Argument[0];Element of ReturnValue;value", + ".collection;UnmodifiableBoundedCollection;true;unmodifiableBoundedCollection;;;Element of Argument[0];Element of ReturnValue;value", + ".collection;UnmodifiableCollection;true;unmodifiableCollection;;;Element of Argument[0];Element of ReturnValue;value" + ] + } +} + +/** + * Value-propagating models for the package `org.apache.commons.collections4.iterators`. + */ +private class ApacheIteratorsModel extends SummaryModelCsv { + override predicate row(string row) { + row = + ["org.apache.commons.collections4", "org.apache.commons.collections"] + + [ + // Note that when lambdas are supported we should have more models for TransformIterator + ".iterators;AbstractIteratorDecorator;true;AbstractIteratorDecorator;;;Element of Argument[0];Element of Argument[-1];value", + ".iterators;AbstractListIteratorDecorator;true;AbstractListIteratorDecorator;;;Element of Argument[0];Element of Argument[-1];value", + ".iterators;AbstractListIteratorDecorator;true;getListIterator;;;Element of Argument[-1];Element of ReturnValue;value", + ".iterators;AbstractMapIteratorDecorator;true;AbstractMapIteratorDecorator;;;Element of Argument[0];Element of Argument[-1];value", + ".iterators;AbstractMapIteratorDecorator;true;AbstractMapIteratorDecorator;;;MapValue of Argument[0];MapValue of Argument[-1];value", + ".iterators;AbstractMapIteratorDecorator;true;getMapIterator;;;Element of Argument[-1];Element of ReturnValue;value", + ".iterators;AbstractMapIteratorDecorator;true;getMapIterator;;;MapValue of Argument[-1];MapValue of ReturnValue;value", + ".iterators;AbstractOrderedMapIteratorDecorator;true;AbstractOrderedMapIteratorDecorator;;;Element of Argument[0];Element of Argument[-1];value", + ".iterators;AbstractOrderedMapIteratorDecorator;true;AbstractOrderedMapIteratorDecorator;;;MapValue of Argument[0];MapValue of Argument[-1];value", + ".iterators;AbstractOrderedMapIteratorDecorator;true;getOrderedMapIterator;;;Element of Argument[-1];Element of ReturnValue;value", + ".iterators;AbstractOrderedMapIteratorDecorator;true;getOrderedMapIterator;;;MapValue of Argument[-1];MapValue of ReturnValue;value", + ".iterators;AbstractUntypedIteratorDecorator;true;AbstractUntypedIteratorDecorator;;;Element of Argument[0];Element of Argument[-1];value", + ".iterators;AbstractUntypedIteratorDecorator;true;getIterator;;;Element of Argument[-1];Element of ReturnValue;value", + ".iterators;ArrayIterator;true;ArrayIterator;;;ArrayElement of Argument[0];Element of Argument[-1];value", + ".iterators;ArrayIterator;true;getArray;;;Element of Argument[-1];ArrayElement of ReturnValue;value", + ".iterators;ArrayListIterator;true;ArrayListIterator;;;ArrayElement of Argument[0];Element of Argument[-1];value", + ".iterators;BoundedIterator;true;BoundedIterator;;;Element of Argument[0];Element of Argument[-1];value", + ".iterators;CollatingIterator;true;CollatingIterator;(Comparator,Iterator,Iterator);;Element of Argument[1];Element of Argument[-1];value", + ".iterators;CollatingIterator;true;CollatingIterator;(Comparator,Iterator,Iterator);;Element of Argument[2];Element of Argument[-1];value", + ".iterators;CollatingIterator;true;CollatingIterator;(Comparator,Iterator[]);;Element of Element of Argument[1];Element of Argument[-1];value", + ".iterators;CollatingIterator;true;CollatingIterator;(Comparator,Collection);;Element of Element of Argument[1];Element of Argument[-1];value", + ".iterators;CollatingIterator;true;addIterator;;;Element of Argument[0];Element of Argument[-1];value", + ".iterators;CollatingIterator;true;setIterator;;;Element of Argument[1];Element of Argument[-1];value", + ".iterators;CollatingIterator;true;getIterators;;;Element of Argument[-1];Element of Element of ReturnValue;value", + ".iterators;EnumerationIterator;true;EnumerationIterator;;;Element of Argument[0];Element of Argument[-1];value", + ".iterators;EnumerationIterator;true;getEnumeration;;;Element of Argument[-1];Element of ReturnValue;value", + ".iterators;EnumerationIterator;true;setEnumeration;;;Element of Argument[0];Element of Argument[-1];value", + ".iterators;FilterIterator;true;FilterIterator;;;Element of Argument[0];Element of Argument[-1];value", + ".iterators;FilterIterator;true;getIterator;;;Element of Argument[-1];Element of ReturnValue;value", + ".iterators;FilterIterator;true;setIterator;;;Element of Argument[0];Element of Argument[-1];value", + ".iterators;FilterListIterator;true;FilterListIterator;(ListIterator);;Element of Argument[0];Element of Argument[-1];value", + ".iterators;FilterListIterator;true;FilterListIterator;(ListIterator,Predicate);;Element of Argument[0];Element of Argument[-1];value", + ".iterators;FilterListIterator;true;getListIterator;;;Element of Argument[-1];Element of ReturnValue;value", + ".iterators;FilterListIterator;true;setListIterator;;;Element of Argument[0];Element of Argument[-1];value", + ".iterators;IteratorChain;true;IteratorChain;(Iterator);;Element of Argument[0];Element of Argument[-1];value", + ".iterators;IteratorChain;true;IteratorChain;(Iterator,Iterator);;Element of Argument[0];Element of Argument[-1];value", + ".iterators;IteratorChain;true;IteratorChain;(Iterator,Iterator);;Element of Argument[1];Element of Argument[-1];value", + ".iterators;IteratorChain;true;IteratorChain;(Iterator[]);;Element of ArrayElement of Argument[0];Element of Argument[-1];value", + ".iterators;IteratorChain;true;IteratorChain;(Collection);;Element of Element of Argument[0];Element of Argument[-1];value", + ".iterators;IteratorChain;true;addIterator;;;Element of Argument[0];Element of Argument[-1];value", + ".iterators;IteratorEnumeration;true;IteratorEnumeration;;;Element of Argument[0];Element of Argument[-1];value", + ".iterators;IteratorEnumeration;true;getIterator;;;Element of Argument[-1];Element of ReturnValue;value", + ".iterators;IteratorEnumeration;true;setIterator;;;Element of Argument[0];Element of Argument[-1];value", + ".iterators;IteratorIterable;true;IteratorIterable;;;Element of Argument[0];Element of Argument[-1];value", + ".iterators;ListIteratorWrapper;true;ListIteratorWrapper;;;Element of Argument[0];Element of Argument[-1];value", + ".iterators;LoopingIterator;true;LoopingIterator;;;Element of Argument[0];Element of Argument[-1];value", + ".iterators;LoopingListIterator;true;LoopingListIterator;;;Element of Argument[0];Element of Argument[-1];value", + ".iterators;ObjectArrayIterator;true;ObjectArrayIterator;;;ArrayElement of Argument[0];Element of Argument[-1];value", + ".iterators;ObjectArrayIterator;true;getArray;;;Element of Argument[-1];ArrayElement of ReturnValue;value", + ".iterators;ObjectArrayListIterator;true;ObjectArrayListIterator;;;ArrayElement of Argument[0];Element of Argument[-1];value", + ".iterators;ObjectArrayListIterator;true;getArray;;;Element of Argument[-1];ArrayElement of ReturnValue;value", + ".iterators;ObjectGraphIterator;true;ObjectGraphIterator;(Iterator);;Element of Element of Argument[0];Element of Argument[-1];value", + ".iterators;PeekingIterator;true;peekingIterator;;;Element of Argument[0];Element of ReturnValue;value", + ".iterators;PeekingIterator;true;peek;;;Element of Argument[-1];ReturnValue;value", + ".iterators;PeekingIterator;true;element;;;Element of Argument[-1];ReturnValue;value", + ".iterators;PermutationIterator;true;PermutationIterator;;;Element of Argument[0];Element of Element of Argument[-1];value", + ".iterators;PushbackIterator;true;PushbackIterator;;;Element of Argument[0];Element of Argument[-1];value", + ".iterators;PushbackIterator;true;pushbackIterator;;;Element of Argument[0];Element of ReturnValue;value", + ".iterators;PushbackIterator;true;pushback;;;Argument[0];Element of Argument[-1];value", + ".iterators;ReverseListIterator;true;ReverseListIterator;;;Element of Argument[0];Element of Argument[-1];value", + ".iterators;SingletonIterator;true;SingletonIterator;;;Argument[0];Element of Argument[-1];value", + ".iterators;SingletonListIterator;true;SingletonListIterator;;;Argument[0];Element of Argument[-1];value", + ".iterators;SkippingIterator;true;SkippingIterator;;;Element of Argument[0];Element of Argument[-1];value", + ".iterators;UniqueFilterIterator;true;UniqueFilterIterator;;;Element of Argument[0];Element of Argument[-1];value", + ".iterators;UnmodifiableIterator;true;unmodifiableIterator;;;Element of Argument[0];Element of ReturnValue;value", + ".iterators;UnmodifiableListIterator;true;unmodifiableListIterator;;;Element of Argument[0];Element of ReturnValue;value", + ".iterators;UnmodifiableMapIterator;true;unmodifiableMapIterator;;;Element of Argument[0];Element of ReturnValue;value", + ".iterators;UnmodifiableMapIterator;true;unmodifiableMapIterator;;;MapValue of Argument[0];MapValue of ReturnValue;value", + ".iterators;UnmodifiableOrderedMapIterator;true;unmodifiableOrderedMapIterator;;;Element of Argument[0];Element of ReturnValue;value", + ".iterators;UnmodifiableOrderedMapIterator;true;unmodifiableOrderedMapIterator;;;MapValue of Argument[0];MapValue of ReturnValue;value", + ".iterators;ZippingIterator;true;ZippingIterator;(Iterator[]);;Element of ArrayElement of Argument[0];Element of Argument[-1];value", + ".iterators;ZippingIterator;true;ZippingIterator;(Iterator,Iterator);;Element of Argument[0];Element of Argument[-1];value", + ".iterators;ZippingIterator;true;ZippingIterator;(Iterator,Iterator);;Element of Argument[1];Element of Argument[-1];value", + ".iterators;ZippingIterator;true;ZippingIterator;(Iterator,Iterator,Iterator);;Element of Argument[0];Element of Argument[-1];value", + ".iterators;ZippingIterator;true;ZippingIterator;(Iterator,Iterator,Iterator);;Element of Argument[1];Element of Argument[-1];value", + ".iterators;ZippingIterator;true;ZippingIterator;(Iterator,Iterator,Iterator);;Element of Argument[2];Element of Argument[-1];value" + ] + } +} + +/** + * Value-propagating models for the package `org.apache.commons.collections4.list`. + */ +private class ApacheListModel extends SummaryModelCsv { + override predicate row(string row) { + row = + ["org.apache.commons.collections4", "org.apache.commons.collections"] + + [ + // Note that when lambdas are supported we should have more models for TransformedList + ".list;AbstractLinkedList;true;AbstractLinkedList;;;Element of Argument[0];Element of Argument[-1];value", + ".list;AbstractLinkedList;true;getFirst;;;Element of Argument[-1];ReturnValue;value", + ".list;AbstractLinkedList;true;getLast;;;Element of Argument[-1];ReturnValue;value", + ".list;AbstractLinkedList;true;addFirst;;;Argument[0];Element of Argument[-1];value", + ".list;AbstractLinkedList;true;addLast;;;Argument[0];Element of Argument[-1];value", + ".list;AbstractLinkedList;true;removeFirst;;;Element of Argument[-1];ReturnValue;value", + ".list;AbstractLinkedList;true;removeLast;;;Element of Argument[-1];ReturnValue;value", + ".list;AbstractLinkedList;true;updateNode;;;Argument[1];Element of Argument[-1];value", + ".list;AbstractLinkedList;true;updateNode;;;Argument[1];Element of Argument[0];value", + ".list;AbstractLinkedList;true;createNode;;;Argument[0];Element of ReturnValue;value", + ".list;AbstractLinkedList;true;addNodeBefore;;;Argument[1];Element of Argument[-1];value", + ".list;AbstractLinkedList;true;addNodeBefore;;;Argument[1];Element of Argument[0];value", + ".list;AbstractLinkedList;true;addNodeAfter;;;Argument[1];Element of Argument[-1];value", + ".list;AbstractLinkedList;true;addNodeAfter;;;Argument[1];Element of Argument[0];value", + ".list;AbstractLinkedList;true;addNode;;;Element of Argument[0];Element of Argument[-1];value", + ".list;AbstractLinkedList;true;addNode;;;Element of Argument[0];Element of Argument[1];value", + ".list;AbstractLinkedList;true;getNode;;;Element of Argument[-1];Element of ReturnValue;value", + ".list;AbstractLinkedList;true;createSubListIterator;;;Element of Argument[-1];Element of ReturnValue;value", + ".list;AbstractLinkedList;true;createSubListIterator;;;Element of Argument[0];Element of ReturnValue;value", + ".list;AbstractLinkedList;true;createSubListListIterator;;;Element of Argument[-1];Element of ReturnValue;value", + ".list;AbstractLinkedList;true;createSubListListIterator;;;Element of Argument[0];Element of ReturnValue;value", + ".list;AbstractLinkedList$LinkedListIterator;true;LinkedListIterator;;;Element of Argument[0];Element of Argument[-1];value", + ".list;AbstractLinkedList$LinkedListIterator;true;getLastNodeReturned;;;Element of Argument[-1];Element of ReturnValue;value", + ".list;AbstractLinkedList$LinkedSubList;true;LinkedSubList;;;Element of Argument[0];Element of Argument[-1];value", + ".list;AbstractLinkedList$LinkedSubListIterator;true;LinkedSubListIterator;;;Element of Argument[0];Element of Argument[-1];value", + ".list;AbstractLinkedList$Node;true;Node;(Object);;Argument[0];Element of Argument[-1];value", + ".list;AbstractLinkedList$Node;true;Node;(Node,Node,Object);;Element of Argument[0];Element of Argument[-1];value", + ".list;AbstractLinkedList$Node;true;Node;(Node,Node,Object);;Element of Argument[1];Element of Argument[-1];value", + ".list;AbstractLinkedList$Node;true;Node;(Node,Node,Object);;Argument[2];Element of Argument[-1];value", + ".list;AbstractLinkedList$Node;true;Node;(Node,Node,Object);;Argument[2];Element of Argument[0];value", + ".list;AbstractLinkedList$Node;true;Node;(Node,Node,Object);;Argument[2];Element of Argument[1];value", + ".list;AbstractLinkedList$Node;true;getValue;;;Element of Argument[-1];ReturnValue;value", + ".list;AbstractLinkedList$Node;true;setValue;;;Argument[0];Element of Argument[-1];value", + ".list;AbstractLinkedList$Node;true;getPreviousNode;;;Element of Argument[-1];Element of ReturnValue;value", + ".list;AbstractLinkedList$Node;true;setPreviousNode;;;Element of Argument[-1];Element of Argument[0];value", + ".list;AbstractLinkedList$Node;true;setPreviousNode;;;Element of Argument[0];Element of Argument[-1];value", + ".list;AbstractLinkedList$Node;true;getNextNode;;;Element of Argument[-1];Element of ReturnValue;value", + ".list;AbstractLinkedList$Node;true;setNextNode;;;Element of Argument[-1];Element of Argument[0];value", + ".list;AbstractLinkedList$Node;true;setNextNode;;;Element of Argument[0];Element of Argument[-1];value", + ".list;AbstractListDecorator;true;AbstractListDecorator;;;Element of Argument[0];Element of Argument[-1];value", + ".list;AbstractSerializableListDecorator;true;AbstractSerializableListDecorator;;;Element of Argument[0];Element of Argument[-1];value", + ".list;CursorableLinkedList;true;CursorableLinkedList;;;Element of Argument[0];Element of Argument[-1];value", + ".list;CursorableLinkedList;true;cursor;;;Element of Argument[-1];Element of ReturnValue;value", + ".list;CursorableLinkedList$Cursor;true;Cursor;;;Element of Argument[0];Element of Argument[-1];value", + ".list;CursorableLinkedList$SubCursor;true;SubCursor;;;Element of Argument[0];Element of Argument[-1];value", + ".list;FixedSizeList;true;FixedSizeList;;;Element of Argument[0];Element of Argument[-1];value", + ".list;FixedSizeList;true;fixedSizeList;;;Element of Argument[0];Element of ReturnValue;value", + ".list;GrowthList;true;GrowthList;(List);;Element of Argument[0];Element of Argument[-1];value", + ".list;GrowthList;true;growthList;;;Element of Argument[0];Element of ReturnValue;value", + ".list;LazyList;true;LazyList;;;Element of Argument[0];Element of Argument[-1];value", + ".list;LazyList;true;lazyList;;;Element of Argument[0];Element of ReturnValue;value", + ".list;NodeCachingLinkedList;true;NodeCachingLinkedList;(Collection);;Element of Argument[0];Element of Argument[-1];value", + ".list;PredicatedList;true;PredicatedList;;;Element of Argument[0];Element of Argument[-1];value", + ".list;PredicatedList;true;predicatedList;;;Element of Argument[0];Element of ReturnValue;value", + ".list;SetUniqueList;true;SetUniqueList;;;Element of Argument[0];Element of Argument[-1];value", + ".list;SetUniqueList;true;SetUniqueList;;;Element of Argument[1];Element of Argument[-1];value", + ".list;SetUniqueList;true;setUniqueList;;;Element of Argument[0];Element of ReturnValue;value", + ".list;SetUniqueList;true;asSet;;;Element of Argument[-1];Element of ReturnValue;value", + ".list;SetUniqueList;true;createSetBasedOnList;;;Element of Argument[1];Element of ReturnValue;value", + ".list;TransformedList;true;TransformedList;;;Element of Argument[0];Element of Argument[-1];value", + ".list;TransformedList;true;transformingList;;;Element of Argument[0];Element of ReturnValue;value", + ".list;TransformedList;true;getList;;;Element of Argument[-1];Element of ReturnValue;value", + ".list;TreeList;true;TreeList;;;Element of Argument[0];Element of Argument[-1];value", + ".list;UnmodifiableList;true;UnmodifiableList;;;Element of Argument[0];Element of Argument[-1];value", + ".list;UnmodifiableList;true;unmodifiableList;;;Element of Argument[0];Element of ReturnValue;value" + ] + } +} + +/** + * Value-propagating models for the package `org.apache.commons.collections4.map`. + */ +private class ApacheMapModel extends SummaryModelCsv { + override predicate row(string row) { + row = + ["org.apache.commons.collections4", "org.apache.commons.collections"] + + [ + // Note that when lambdas are supported we should have more models for DefaultedMap, LazyMap, TransformedMap, TransformedSortedMap + ".map;AbstractHashedMap;true;AbstractHashedMap;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value", + ".map;AbstractHashedMap;true;AbstractHashedMap;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value", + ".map;AbstractHashedMap;true;convertKey;;;Argument[0];ReturnValue;value", + ".map;AbstractHashedMap;true;entryKey;;;MapKey of Argument[-1];ReturnValue;value", + ".map;AbstractHashedMap;true;entryKey;;;MapKey of Argument[0];ReturnValue;value", + ".map;AbstractHashedMap;true;entryValue;;;MapValue of Argument[-1];ReturnValue;value", + ".map;AbstractHashedMap;true;entryValue;;;MapValue of Argument[0];ReturnValue;value", + ".map;AbstractHashedMap;true;createEntrySetIterator;;;MapKey of Element of ReturnValue; MapKey of Argument[-1];value", + ".map;AbstractHashedMap;true;createEntrySetIterator;;;MapValue of Element of ReturnValue; MapValue of Argument[-1];value", + ".map;AbstractHashedMap;true;createKeySetIterator;;;Element of ReturnValue; MapKey of Argument[-1];value", + ".map;AbstractHashedMap;true;createValuesIterator;;;Element of ReturnValue; MapValue of Argument[-1];value", + ".map;AbstractHashedMap$HashEntry;true;HashEntry;;;Argument[2];MapKey of Argument[-1];value", + ".map;AbstractHashedMap$HashEntry;true;HashEntry;;;Argument[3];MapValue of Argument[-1];value", + ".map;AbstractLinkedMap;true;AbstractLinkedMap;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value", + ".map;AbstractLinkedMap;true;AbstractLinkedMap;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value", + ".map;AbstractMapDecorator;true;AbstractMapDecorator;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value", + ".map;AbstractMapDecorator;true;AbstractMapDecorator;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value", + ".map;AbstractMapDecorator;true;decorated;;;MapKey of Argument[-1];MapKey of Argument[0];value", + ".map;AbstractMapDecorator;true;decorated;;;MapValue of Argument[-1];MapValue of Argument[0];value", + ".map;AbstractOrderedMapDecorator;true;AbstractOrderedMapDecorator;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value", + ".map;AbstractOrderedMapDecorator;true;AbstractOrderedMapDecorator;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value", + ".map;AbstractSortedMapDecorator;true;AbstractSortedMapDecorator;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value", + ".map;AbstractSortedMapDecorator;true;AbstractSortedMapDecorator;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value", + ".map;AbstractSortedMapDecorator$SortedMapIterator;true;SortedMapIterator;;;MapKey of Element of Argument[0];Element of Argument[-1];value", + ".map;AbstractSortedMapDecorator$SortedMapIterator;true;SortedMapIterator;;;MapValue of Element of Argument[0];MapValue of Argument[-1];value", + ".map;CaseInsensitiveMap;true;CaseInsensitiveMap;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value", + ".map;CaseInsensitiveMap;true;CaseInsensitiveMap;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value", + ".map;CompositeMap;true;CompositeMap;(Map,Map);;MapKey of Argument[0];MapKey of Argument[-1];value", + ".map;CompositeMap;true;CompositeMap;(Map,Map);;MapValue of Argument[0];MapValue of Argument[-1];value", + ".map;CompositeMap;true;CompositeMap;(Map,Map);;MapKey of Argument[1];MapKey of Argument[-1];value", + ".map;CompositeMap;true;CompositeMap;(Map,Map);;MapValue of Argument[1];MapValue of Argument[-1];value", + ".map;CompositeMap;true;CompositeMap;(Map,Map,MapMutator);;MapKey of Argument[0];MapKey of Argument[-1];value", + ".map;CompositeMap;true;CompositeMap;(Map,Map,MapMutator);;MapValue of Argument[0];MapValue of Argument[-1];value", + ".map;CompositeMap;true;CompositeMap;(Map,Map,MapMutator);;MapKey of Argument[1];MapKey of Argument[-1];value", + ".map;CompositeMap;true;CompositeMap;(Map,Map,MapMutator);;MapValue of Argument[1];MapValue of Argument[-1];value", + ".map;CompositeMap;true;CompositeMap;(Map[]);;MapKey of Element of Argument[0];MapKey of Argument[-1];value", + ".map;CompositeMap;true;CompositeMap;(Map[]);;MapValue of Element of Argument[0];MapValue of Argument[-1];value", + ".map;CompositeMap;true;CompositeMap;(Map[],MapMutator);;MapKey of Element of Argument[0];MapKey of Argument[-1];value", + ".map;CompositeMap;true;CompositeMap;(Map[],MapMutator);;MapValue of Element of Argument[0];MapValue of Argument[-1];value", + ".map;CompositeMap;true;addComposited;;;MapKey of Argument[0];MapKey of Argument[-1];value", + ".map;CompositeMap;true;addComposited;;;MapValue of Argument[0];MapValue of Argument[-1];value", + ".map;CompositeMap;true;removeComposited;;;MapKey of Argument[-1];MapKey of ReturnValue;value", + ".map;CompositeMap;true;removeComposited;;;MapValue of Argument[-1];MapValue of ReturnValue;value", + ".map;CompositeMap;true;removeComposited;;;Argument[0];ReturnValue;value", + ".map;DefaultedMap;true;DefaultedMap;(Object);;Argument[0];MapValue of Argument[-1];value", + ".map;DefaultedMap;true;DefaultedMap;(Map,Transformer);;MapKey of Argument[0];MapKey of Argument[-1];value", + ".map;DefaultedMap;true;DefaultedMap;(Map,Transformer);;MapValue of Argument[0];MapValue of Argument[-1];value", + ".map;DefaultedMap;true;defaultedMap;;;MapKey of Argument[0];MapKey of Argument[-1];value", + ".map;DefaultedMap;true;defaultedMap;;;MapValue of Argument[0];MapValue of Argument[-1];value", + ".map;DefaultedMap;true;defaultedMap;(Map,Object);;Argument[1];MapValue of Argument[-1];value", + ".map;EntrySetToMapIteratorAdapter;true;EntrySetToMapIteratorAdapter;;;MapKey of Element of Argument[0];Element of Argument[-1];value", + ".map;EntrySetToMapIteratorAdapter;true;EntrySetToMapIteratorAdapter;;;MapValue of Element of Argument[0];MapValue of Argument[-1];value", + ".map;EntrySetToMapIteratorAdapter;true;current;;;Element of Argument[-1];MapKey of ReturnValue;value", + ".map;EntrySetToMapIteratorAdapter;true;current;;;MapValue of Argument[-1];MapValue of ReturnValue;value", + ".map;FixedSizeMap;true;FixedSizeMap;;;MapKey of Argument[0];MapKey of Argument[-1];value", + ".map;FixedSizeMap;true;FixedSizeMap;;;MapValue of Argument[0];MapValue of Argument[-1];value", + ".map;FixedSizeMap;true;fixedSizeMap;;;MapKey of Argument[0];MapKey of ReturnValue;value", + ".map;FixedSizeMap;true;fixedSizeMap;;;MapValue of Argument[0];MapValue of ReturnValue;value", + ".map;FixedSortedSizeMap;true;FixedSortedSizeMap;;;MapKey of Argument[0];MapKey of Argument[-1];value", + ".map;FixedSortedSizeMap;true;FixedSortedSizeMap;;;MapValue of Argument[0];MapValue of Argument[-1];value", + ".map;FixedSortedSizeMap;true;fixedSortedSizeMap;;;MapKey of Argument[0];MapKey of ReturnValue;value", + ".map;FixedSortedSizeMap;true;fixedSortedSizeMap;;;MapValue of Argument[0];MapValue of ReturnValue;value", + ".map;FixedSortedSizeMap;true;getSortedMap;;;MapKey of Argument[-1];MapKey of ReturnValue;value", + ".map;FixedSortedSizeMap;true;getSortedMap;;;MapValue of Argument[-1];MapValue of ReturnValue;value", + ".map;Flat3Map;true;Flat3Map;;;MapKey of Argument[0];MapKey of Argument[-1];value", + ".map;Flat3Map;true;Flat3Map;;;MapValue of Argument[0];MapValue of Argument[-1];value", + ".map;HashedMap;true;HashedMap;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value", + ".map;HashedMap;true;HashedMap;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value", + ".map;LazyMap;true;LazyMap;;;MapKey of Argument[0];MapKey of Argument[-1];value", + ".map;LazyMap;true;LazyMap;;;MapValue of Argument[0];MapValue of Argument[-1];value", + ".map;LazyMap;true;lazyMap;;;MapKey of Argument[0];MapKey of ReturnValue;value", + ".map;LazyMap;true;lazyMap;;;MapValue of Argument[0];MapValue of ReturnValue;value", + ".map;LazySortedMap;true;LazySortedMap;;;MapKey of Argument[0];MapKey of Argument[-1];value", + ".map;LazySortedMap;true;LazySortedMap;;;MapValue of Argument[0];MapValue of Argument[-1];value", + ".map;LazySortedMap;true;lazySortedMap;;;MapKey of Argument[0];MapKey of ReturnValue;value", + ".map;LazySortedMap;true;lazySortedMap;;;MapValue of Argument[0];MapValue of ReturnValue;value", + ".map;LazySortedMap;true;getSortedMap;;;MapKey of Argument[-1];MapKey of ReturnValue;value", + ".map;LazySortedMap;true;getSortedMap;;;MapValue of Argument[-1];MapValue of ReturnValue;value", + ".map;LinkedMap;true;LinkedMap;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value", + ".map;LinkedMap;true;LinkedMap;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value", + ".map;LinkedMap;true;get;(int);;MapKey of Argument[0];ReturnValue;value", + ".map;LinkedMap;true;getValue;(int);;MapValue of Argument[0];ReturnValue;value", + ".map;LinkedMap;true;remove;(int);;MapValue of Argument[0];ReturnValue;value", + ".map;LinkedMap;true;asList;;;MapKey of Argument[0];Element of ReturnValue;value", + ".map;ListOrderedMap;true;ListOrderedMap;;;MapKey of Argument[0];MapKey of Argument[-1];value", + ".map;ListOrderedMap;true;ListOrderedMap;;;MapValue of Argument[0];MapValue of Argument[-1];value", + ".map;ListOrderedMap;true;listOrderedMap;;;MapKey of Argument[0];MapKey of ReturnValue;value", + ".map;ListOrderedMap;true;listOrderedMap;;;MapValue of Argument[0];MapValue of ReturnValue;value", + ".map;ListOrderedMap;true;putAll;;;MapKey of Argument[1];MapKey of Argument[-1];value", + ".map;ListOrderedMap;true;putAll;;;MapValue of Argument[1];MapValue of Argument[-1];value", + ".map;ListOrderedMap;true;keyList;;;MapKey of Argument[1];Element of ReturnValue;value", + ".map;ListOrderedMap;true;valueList;;;MapValue of Argument[1];Element of ReturnValue;value", + ".map;ListOrderedMap;true;get;(int);;MapKey of Argument[0];ReturnValue;value", + ".map;ListOrderedMap;true;getValue;(int);;MapValue of Argument[0];ReturnValue;value", + ".map;ListOrderedMap;true;setValue;;;Argument[1];MapValue of Argument[-1];value", + ".map;ListOrderedMap;true;put;;;Argument[1];MapKey of Argument[-1];value", + ".map;ListOrderedMap;true;put;;;Argument[2];MapValue of Argument[-1];value", + ".map;ListOrderedMap;true;remove;(int);;MapValue of Argument[0];ReturnValue;value", + ".map;ListOrderedMap;true;asList;;;MapKey of Argument[1];Element of ReturnValue;value", + ".map;LRUMap;true;LRUMap;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value", + ".map;LRUMap;true;LRUMap;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value", + ".map;LRUMap;true;LRUMap;(Map,boolean);;MapKey of Argument[0];MapKey of Argument[-1];value", + ".map;LRUMap;true;LRUMap;(Map,boolean);;MapValue of Argument[0];MapValue of Argument[-1];value", + ".map;LRUMap;true;get;(Object,boolean);;MapValue of Argument[0];ReturnValue;value", + ".map;MultiKeyMap;true;multiKeyMap;;;MapKey of Argument[0];MapKey of ReturnValue;value", + ".map;MultiKeyMap;true;multiKeyMap;;;MapValue of Argument[0];MapValue of ReturnValue;value", + ".map;MultiKeyMap;true;get;;;MapValue of Argument[-1];ReturnValue;value", + ".map;MultiKeyMap;true;put;;;MapValue of Argument[-1];ReturnValue;value", + ".map;MultiKeyMap;true;put;(Object,Object,Object);;Argument[0..1];Element of MapKey of Argument[-1];value", + ".map;MultiKeyMap;true;put;(Object,Object,Object,Object);;Argument[0..2];Element of MapKey of Argument[-1];value", + ".map;MultiKeyMap;true;put;(Object,Object,Object,Object,Object);;Argument[0..3];Element of MapKey of Argument[-1];value", + ".map;MultiKeyMap;true;put;(Object,Object,Object,Object,Object,Object);;Argument[0..4];Element of MapKey of Argument[-1];value", + ".map;MultiKeyMap;true;put;(Object,Object,Object);;Argument[2];MapValue of Argument[-1];value", + ".map;MultiKeyMap;true;put;(Object,Object,Object,Object);;Argument[3];MapValue of Argument[-1];value", + ".map;MultiKeyMap;true;put;(Object,Object,Object,Object,Object);;Argument[4];MapValue of Argument[-1];value", + ".map;MultiKeyMap;true;put;(Object,Object,Object,Object,Object,Object);;Argument[5];MapValue of Argument[-1];value", + ".map;MultiKeyMap;true;removeMultiKey;;;MapValue of Argument[-1];ReturnValue;value", + ".map;MultiValueMap;true;multiValueMap;;;MapKey of Argument[0];MapKey of ReturnValue;value", + ".map;MultiValueMap;true;multiValueMap;;;Element of MapValue of Argument[0];Element of MapValue of ReturnValue;value", + ".map;MultiValueMap;true;getCollection;;;Element of MapValue of Argument[-1];Element of ReturnValue;value", + ".map;MultiValueMap;true;putAll;;;Argument[0];MapKey of Argument[-1];value", + ".map;MultiValueMap;true;putAll;;;Element of Argument[1];Element of MapValue of Argument[-1];value", + ".map;MultiValueMap;true;iterator;(Object);;Element of MapValue of Argument[-1];Element of ReturnValue;value", + ".map;MultiValueMap;true;iterator;();;MapKey of Argument[0];MapKey of Element of ReturnValue;value", + ".map;MultiValueMap;true;iterator;();;Element of MapValue of Argument[0];MapValue of Element of ReturnValue;value", + ".map;PassiveExpiringMap;true;PassiveExpiringMap;(ExpirationPolicy,Map);;MapKey of Argument[1];MapKey of Argument[-1];value", + ".map;PassiveExpiringMap;true;PassiveExpiringMap;(ExpirationPolicy,Map);;MapValue of Argument[1];MapValue of Argument[-1];value", + ".map;PassiveExpiringMap;true;PassiveExpiringMap;(long,Map);;MapKey of Argument[1];MapKey of Argument[-1];value", + ".map;PassiveExpiringMap;true;PassiveExpiringMap;(long,Map);;MapValue of Argument[1];MapValue of Argument[-1];value", + ".map;PassiveExpiringMap;true;PassiveExpiringMap;(long,TimeUnit,Map);;MapKey of Argument[1];MapKey of Argument[-1];value", + ".map;PassiveExpiringMap;true;PassiveExpiringMap;(long,TimeUnit,Map);;MapValue of Argument[1];MapValue of Argument[-1];value", + ".map;PassiveExpiringMap;true;PassiveExpiringMap;(Map);;MapKey of Argument[1];MapKey of Argument[-1];value", + ".map;PassiveExpiringMap;true;PassiveExpiringMap;(Map);;MapValue of Argument[1];MapValue of Argument[-1];value", + ".map;PredicatedMap;true;predicatedMap;;;MapKey of Argument[0];MapKey of ReturnValue;value", + ".map;PredicatedMap;true;predicatedMap;;;MapValue of Argument[0];MapValue of ReturnValue;value", + ".map;PredicatedSortedMap;true;predicatedSortedMap;;;MapKey of Argument[0];MapKey of ReturnValue;value", + ".map;PredicatedSortedMap;true;predicatedSortedMap;;;MapValue of Argument[0];MapValue of ReturnValue;value", + ".map;PredicatedSortedMap;true;getSortedMap;;;MapKey of Argument[-1];MapKey of ReturnValue;value", + ".map;PredicatedSortedMap;true;getSortedMap;;;MapValue of Argument[-1];MapValue of ReturnValue;value", + ".map;SingletonMap;true;SingletonMap;(Object,Object);;Argument[0];MapKey of Argument[-1];value", + ".map;SingletonMap;true;SingletonMap;(Object,Object);;Argument[1];MapValue of Argument[-1];value", + ".map;SingletonMap;true;SingletonMap;(KeyValue);;MapKey of Argument[0];MapKey of Argument[-1];value", + ".map;SingletonMap;true;SingletonMap;(KeyValue);;MapValue of Argument[0];MapValue of Argument[-1];value", + ".map;SingletonMap;true;SingletonMap;(Entry);;MapKey of Argument[0];MapKey of Argument[-1];value", + ".map;SingletonMap;true;SingletonMap;(Entry);;MapValue of Argument[0];MapValue of Argument[-1];value", + ".map;SingletonMap;true;SingletonMap;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value", + ".map;SingletonMap;true;SingletonMap;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value", + ".map;SingletonMap;true;setValue;;;Argument[0];MapValue of Argument[-1];value", + ".map;TransformedMap;true;transformingMap;;;MapKey of Argument[0];MapKey of ReturnValue;value", + ".map;TransformedMap;true;transformingMap;;;MapValue of Argument[0];MapValue of ReturnValue;value", + ".map;TransformedSortedMap;true;transformingSortedMap;;;MapKey of Argument[0];MapKey of ReturnValue;value", + ".map;TransformedSortedMap;true;transformingSortedMap;;;MapValue of Argument[0];MapValue of ReturnValue;value", + ".map;UnmodifiableEntrySet;true;unmodifiableEntrySet;;;MapKey of Element of Argument[0];MapKey of Element of ReturnValue;value", + ".map;UnmodifiableEntrySet;true;unmodifiableEntrySet;;;MapValue of Element of Argument[0];MapValue of Element of ReturnValue;value", + ".map;UnmodifiableMap;true;unmodifiableMap;;;MapKey of Argument[0];MapKey of ReturnValue;value", + ".map;UnmodifiableMap;true;unmodifiableMap;;;MapValue of Argument[0];MapValue of ReturnValue;value", + ".map;UnmodifiableOrderedMap;true;unmodifiableOrderedMap;;;MapKey of Argument[0];MapKey of ReturnValue;value", + ".map;UnmodifiableOrderedMap;true;unmodifiableOrderedMap;;;MapValue of Argument[0];MapValue of ReturnValue;value", + ".map;UnmodifiableSortedMap;true;unmodifiableSortedMap;;;MapKey of Argument[0];MapKey of ReturnValue;value", + ".map;UnmodifiableSortedMap;true;unmodifiableSortedMap;;;MapValue of Argument[0];MapValue of ReturnValue;value" + ] + } +} + +/** + * Value-propagating models for the package `org.apache.commons.collections4.multimap`. + */ +private class ApacheMultiMapModel extends SummaryModelCsv { + override predicate row(string row) { + row = + ["org.apache.commons.collections4", "org.apache.commons.collections"] + + [ + // Note that when lambdas are supported we should have more models for TransformedMultiValuedMap + ".multimap;ArrayListValuedHashMap;true;ArrayListValuedHashMap;(MultiValuedMap);;MapKey of Argument[0];MapKey of Argument[-1];value", + ".multimap;ArrayListValuedHashMap;true;ArrayListValuedHashMap;(MultiValuedMap);;Element of MapValue of Argument[0];Element of MapValue of Argument[-1];value", + ".multimap;ArrayListValuedHashMap;true;ArrayListValuedHashMap;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value", + ".multimap;ArrayListValuedHashMap;true;ArrayListValuedHashMap;(Map);;MapValue of Argument[0];Element of MapValue of Argument[-1];value", + ".multimap;unmodifiableMultiValuedMap;true;HashSetValuedHashMap;(MultiValuedMap);;MapKey of Argument[0];MapKey of Argument[-1];value", + ".multimap;HashSetValuedHashMap;true;HashSetValuedHashMap;(MultiValuedMap);;Element of MapValue of Argument[0];Element of MapValue of Argument[-1];value", + ".multimap;HashSetValuedHashMap;true;HashSetValuedHashMap;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value", + ".multimap;HashSetValuedHashMap;true;HashSetValuedHashMap;(Map);;MapValue of Argument[0];Element of MapValue of Argument[-1];value", + ".multimap;TransformedMultiValuedMap;true;transformingMap;;;MapKey of Argument[0];MapKey of ReturnValue;value", + ".multimap;TransformedMultiValuedMap;true;transformingMap;;;Element of MapValue of Argument[0];Element of MapValue of ReturnValue;value", + ".multimap;UnmodifiableMultiValuedMap;true;unmodifiableMultiValuedMap;(MultiValuedMap);;MapKey of Argument[0];MapKey of Argument[-1];value", + ".multimap;UnmodifiableMultiValuedMap;true;unmodifiableMultiValuedMap;(MultiValuedMap);;Element of MapValue of Argument[0];Element of MapValue of Argument[-1];value" + ] + } +} + +/** + * Value-propagating models for the package `org.apache.commons.collections4.multiset`. + */ +private class ApacheMultiSetModel extends SummaryModelCsv { + override predicate row(string row) { + row = + ["org.apache.commons.collections4", "org.apache.commons.collections"] + + [ + ".multiset;HashMultiSet;true;HashMultiSet;;;Element of Argument[0];Element of Argument[-1];value", + ".multiset;PredicatedMultiSet;true;predicatedMultiSet;;;Element of Argument[0];Element of ReturnValue;value", + ".multiset;SynchronizedMultiSet;true;synchronizedMultiSet;;;Element of Argument[0];Element of ReturnValue;value", + ".multiset;UnmodifiableMultiSet;true;unmodifiableMultiSet;;;Element of Argument[0];Element of ReturnValue;value" + ] + } +} + +/** + * Value-propagating models for the package `org.apache.commons.collections4.properties`. + */ +private class ApachePropertiesModel extends SummaryModelCsv { + override predicate row(string row) { + row = + ["org.apache.commons.collections4", "org.apache.commons.collections"] + + [ + ".properties;AbstractPropertiesFactory;true;load;(ClassLoader,String);;Argument[1];ReturnValue;taint", + ".properties;AbstractPropertiesFactory;true;load;(File);;Argument[0];ReturnValue;taint", + ".properties;AbstractPropertiesFactory;true;load;(InputStream);;Argument[0];ReturnValue;taint", + ".properties;AbstractPropertiesFactory;true;load;(Path);;Argument[0];ReturnValue;taint", + ".properties;AbstractPropertiesFactory;true;load;(Reader);;Argument[0];ReturnValue;taint", + ".properties;AbstractPropertiesFactory;true;load;(String);;Argument[0];ReturnValue;taint", + ".properties;AbstractPropertiesFactory;true;load;(URI);;Argument[0];ReturnValue;taint", + ".properties;AbstractPropertiesFactory;true;load;(URL);;Argument[0];ReturnValue;taint" + ] + } +} + +/** + * Value-propagating models for the package `org.apache.commons.collections4.queue`. + */ +private class ApacheQueueModel extends SummaryModelCsv { + override predicate row(string row) { + row = + ["org.apache.commons.collections4", "org.apache.commons.collections"] + + [ + // Note that when lambdas are supported we should have more models for TransformedQueue + ".queue;CircularFifoQueue;true;CircularFifoQueue;(Collection);;Element of Argument[0];Element of Argument[-1];value", + ".queue;CircularFifoQueue;true;get;;;Element of Argument[-1];ReturnValue;value", + ".queue;PredicatedQueue;true;predicatedQueue;;;Element of Argument[0];Element of ReturnValue;value", + ".queue;SynchronizedQueue;true;synchronizedQueue;;;Element of Argument[0];Element of ReturnValue;value", + ".queue;TransformedQueue;true;transformingQueue;;;Element of Argument[0];Element of ReturnValue;value", + ".queue;UnmodifiableQueue;true;unmodifiableQueue;;;Element of Argument[0];Element of ReturnValue;value" + ] + } +} + +/** + * Value-propagating models for the package `org.apache.commons.collections4.set`. + */ +private class ApacheSetModel extends SummaryModelCsv { + override predicate row(string row) { + row = + ["org.apache.commons.collections4", "org.apache.commons.collections"] + + [ + // Note that when lambdas are supported we should have more models for TransformedNavigableSet + ".set;AbstractNavigableSetDecorator;true;AbstractNavigableSetDecorator;;;Element of Argument[0];Element of Argument[-1];value", + ".set;AbstractSetDecorator;true;AbstractSetDecorator;;;Element of Argument[0];Element of Argument[-1];value", + ".set;AbstractSortedSetDecorator;true;AbstractSortedSetDecorator;;;Element of Argument[0];Element of Argument[-1];value", + ".set;CompositeSet$SetMutator;true;add;;;Argument[2];Element of Argument[0];value", + ".set;CompositeSet$SetMutator;true;add;;;Argument[2];Element of Element of Argument[1];value", + ".set;CompositeSet$SetMutator;true;addAll;;;Element of Argument[2];Element of Argument[0];value", + ".set;CompositeSet$SetMutator;true;addAll;;;Element of Argument[2];Element of Element of Argument[1];value", + ".set;CompositeSet;true;CompositeSet;(Set);;Element of Argument[0];Element of Argument[-1];value", + ".set;CompositeSet;true;CompositeSet;(Set[]);;Element of Element of Argument[0];Element of Argument[-1];value", + ".set;CompositeSet;true;addComposited;(Set);;Element of Argument[0];Element of Argument[-1];value", + ".set;CompositeSet;true;addComposited;(Set,Set);;Element of Argument[0];Element of Argument[-1];value", + ".set;CompositeSet;true;addComposited;(Set,Set);;Element of Argument[1];Element of Argument[-1];value", + ".set;CompositeSet;true;addComposited;(Set[]);;Element of Element of Argument[0];Element of Argument[-1];value", + ".set;CompositeSet;true;toSet;;;Element of Argument[-1];Element of ReturnValue;value", + ".set;CompositeSet;true;getSets;;;Element of Argument[-1];Element of Element of ReturnValue;value", + ".set;ListOrderedSet;true;listOrderedSet;(Set);;Element of Argument[0];Element of ReturnValue;value", + ".set;ListOrderedSet;true;listOrderedSet;(List);;Element of Argument[0];Element of ReturnValue;value", + ".set;ListOrderedSet;true;asList;;;Element of Argument[-1];Element of ReturnValue;value", + ".set;ListOrderedSet;true;get;;;Element of Argument[-1];ReturnValue;value", + ".set;ListOrderedSet;true;add;;;Argument[1];Element of Argument[-1];value", + ".set;ListOrderedSet;true;add;;;Element of Argument[1];Element of Argument[-1];value", + ".set;MapBackedSet;true;mapBackedSet;;;MapKey of Argument[0];Element of ReturnValue;value", + ".set;PredicatedNavigableSet;true;predicatedNavigableSet;;;Element of Argument[0];Element of ReturnValue;value", + ".set;PredicatedSet;true;predicatedSet;;;Element of Argument[0];Element of ReturnValue;value", + ".set;PredicatedSortedSet;true;predicatedSortedSet;;;Element of Argument[0];Element of ReturnValue;value", + ".set;TransformedNavigableSet;true;transformingSortedSet;;;Element of Argument[0];Element of ReturnValue;value", + ".set;TransformedSet;true;transformingSet;;;Element of Argument[0];Element of ReturnValue;value", + ".set;TransformedSortedSet;true;transformingSortedSet;;;Element of Argument[0];Element of ReturnValue;value", + ".set;TransformedSortedSet;true;getSortedSet;;;Element of Argument[-1];Element of ReturnValue;value", + ".set;UnmodifiableNavigableSet;true;unmodifiableNavigableSet;;;Element of Argument[0];Element of ReturnValue;value", + ".set;UnmodifiableSet;true;unmodifiableSet;;;Element of Argument[0];Element of ReturnValue;value", + ".set;UnmodifiableSortedSet;true;unmodifiableSortedSet;;;Element of Argument[0];Element of ReturnValue;value" + ] + } +} + +/** + * Value-propagating models for the package `org.apache.commons.collections4.splitmap`. + */ +private class ApacheSplitMapModel extends SummaryModelCsv { + override predicate row(string row) { + row = + ["org.apache.commons.collections4", "org.apache.commons.collections"] + + [ + // Note that when lambdas are supported we should have more models for TransformedSplitMap + ".splitmap;AbstractIterableGetMapDecorator;true;AbstractIterableGetMapDecorator;;;MapKey of Argument[0];MapKey of Argument[-1];value", + ".splitmap;AbstractIterableGetMapDecorator;true;AbstractIterableGetMapDecorator;;;MapValue of Argument[0];MapValue of Argument[-1];value", + ".splitmap;TransformedSplitMap;true;transformingMap;;;MapKey of Argument[0];MapKey of ReturnValue;value", + ".splitmap;TransformedSplitMap;true;transformingMap;;;MapValue of Argument[0];MapValue of ReturnValue;value" + ] + } +} + +/** + * Value-propagating models for the package `org.apache.commons.collections4.trie`. + */ +private class ApacheTrieModel extends SummaryModelCsv { + override predicate row(string row) { + row = + ["org.apache.commons.collections4", "org.apache.commons.collections"] + + [ + // Note that when lambdas are supported we should have more models for TransformedSplitMap + ".trie;PatriciaTrie;true;PatriciaTrie;;;MapKey of Argument[0];MapKey of Argument[-1];value", + ".trie;PatriciaTrie;true;PatriciaTrie;;;MapValue of Argument[0];MapValue of Argument[-1];value", + ".trie;PatriciaTrie;true;select;;;MapKey of Argument[-1];MapKey of ReturnValue;value", + ".trie;PatriciaTrie;true;select;;;MapValue of Argument[-1];MapValue of ReturnValue;value", + ".trie;PatriciaTrie;true;selectKey;;;MapKey of Argument[-1];ReturnValue;value", + ".trie;PatriciaTrie;true;selectValue;;;MapValue of Argument[-1];ReturnValue;value", + ".trie;UnmodifiableTrie;true;unmodifiableTrie;;;MapKey of Argument[0];MapKey of ReturnValue;value", + ".trie;UnmodifiableTrie;true;unmodifiableTrie;;;MapValue of Argument[0];MapValue of ReturnValue;value" + ] + } +} + /** * Value-propagating models for the class `org.apache.commons.collections4.MapUtils`. */ @@ -488,9 +1199,9 @@ private class ApacheMultiMapUtilsModel extends SummaryModelCsv { ";MultiMapUtils;true;getValuesAsList;;;Element of MapValue of Argument[0];Element of ReturnValue;value", ";MultiMapUtils;true;getValuesAsSet;;;Element of MapValue of Argument[0];Element of ReturnValue;value", ";MultiMapUtils;true;transformedMultiValuedMap;;;MapKey of Argument[0];MapKey of ReturnValue;value", - ";MultiMapUtils;true;transformedMultiValuedMap;;;MapValue of Argument[0];MapValue of ReturnValue;value", + ";MultiMapUtils;true;transformedMultiValuedMap;;;Element of MapValue of Argument[0];Element of MapValue of ReturnValue;value", ";MultiMapUtils;true;unmodifiableMultiValuedMap;;;MapKey of Argument[0];MapKey of ReturnValue;value", - ";MultiMapUtils;true;unmodifiableMultiValuedMap;;;MapValue of Argument[0];MapValue of ReturnValue;value" + ";MultiMapUtils;true;unmodifiableMultiValuedMap;;;Element of MapValue of Argument[0];Element of MapValue of ReturnValue;value" ] } } diff --git a/java/ql/test/library-tests/frameworks/apache-collections/test.ql b/java/ql/test/library-tests/frameworks/apache-collections/test.ql index 20971a01f59..04f5a93a949 100644 --- a/java/ql/test/library-tests/frameworks/apache-collections/test.ql +++ b/java/ql/test/library-tests/frameworks/apache-collections/test.ql @@ -9,8 +9,6 @@ class SummaryModelTest extends SummaryModelCsv { row = [ //"package;type;overrides;name;signature;ext;inputspec;outputspec;kind", - // This is temporarily modelled for the helper function newEnumerationWithElement, until the relevant package is modelled - "org.apache.commons.collections4.iterators;IteratorEnumeration;true;IteratorEnumeration;;;Element of Argument[0];Element of Argument[-1];value", "generatedtest;Test;false;newRBWithMapValue;;;Argument[0];MapValue of ReturnValue;value", "generatedtest;Test;false;newRBWithMapKey;;;Argument[0];MapKey of ReturnValue;value" ] From e1750adc380bd0a1a4f2cb5a918c865948731b6e Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Wed, 15 Sep 2021 12:32:07 +0100 Subject: [PATCH 621/741] Address problems highlighted by generating tests --- .../java/frameworks/apache/Collections.qll | 134 +++++------------- 1 file changed, 37 insertions(+), 97 deletions(-) diff --git a/java/ql/lib/semmle/code/java/frameworks/apache/Collections.qll b/java/ql/lib/semmle/code/java/frameworks/apache/Collections.qll index de16efd13fd..53453159ea1 100644 --- a/java/ql/lib/semmle/code/java/frameworks/apache/Collections.qll +++ b/java/ql/lib/semmle/code/java/frameworks/apache/Collections.qll @@ -191,7 +191,6 @@ private class ApacheKeyValueModel extends SummaryModelCsv { ".keyvalue;MultiKey;true;MultiKey;(Object,Object,Object,Object,Object);;Argument[4];Element of Argument[-1];value", ".keyvalue;MultiKey;true;getKeys;;;Element of Argument[-1];ArrayElement of ReturnValue;value", ".keyvalue;MultiKey;true;getKey;;;Element of Argument[-1];ReturnValue;value", - ".keyvalue;MultiKey;true;readResolve;;;Argument[-1];ReturnValue;value", ".keyvalue;TiedMapEntry;true;TiedMapEntry;;;MapValue of Argument[0];MapValue of Argument[-1];value", ".keyvalue;TiedMapEntry;true;TiedMapEntry;;;Argument[1];MapKey of Argument[-1];value", ".keyvalue;UnmodifiableMapEntry;true;UnmodifiableMapEntry;(Object,Object);;Argument[0];MapKey of Argument[-1];value", @@ -222,22 +221,12 @@ private class ApacheBagModel extends SummaryModelCsv { ".bag;CollectionSortedBag;true;CollectionSortedBag;;;Element of Argument[0];Element of Argument[-1];value", ".bag;CollectionSortedBag;true;collectionSortedBag;;;Element of Argument[0];Element of ReturnValue;value", ".bag;HashBag;true;HashBag;;;Element of Argument[0];Element of Argument[-1];value", - ".bag;PredicatedBag;true;PredicatedBag;;;Element of Argument[0];Element of Argument[-1];value", ".bag;PredicatedBag;true;predicatedBag;;;Element of Argument[0];Element of ReturnValue;value", - ".bag;PredicatedSortedBag;true;PredicatedSortedBag;;;Element of Argument[0];Element of Argument[-1];value", ".bag;PredicatedSortedBag;true;predicatedSortedBag;;;Element of Argument[0];Element of ReturnValue;value", - ".bag;SynchronizedBag;true;SynchronizedBag;;;Element of Argument[0];Element of Argument[-1];value", ".bag;SynchronizedBag;true;synchronizedBag;;;Element of Argument[0];Element of ReturnValue;value", - ".bag;SynchronizedBag;true;getBag;;;Element of Argument[-1];Element of ReturnValue;value", - ".bag;SynchronizedSortedBag;true;SynchronizedSortedBag;;;Element of Argument[0];Element of Argument[-1];value", ".bag;SynchronizedSortedBag;true;synchronizedSortedBag;;;Element of Argument[0];Element of ReturnValue;value", - ".bag;SynchronizedSortedBag;true;getSortedBag;;;Element of Argument[0];Element of ReturnValue;value", - ".bag;TransformedBag;true;TransformedBag;;;Element of Argument[0];Element of Argument[-1];value", ".bag;TransformedBag;true;transformedBag;;;Element of Argument[0];Element of ReturnValue;value", - ".bag;TransformedBag;true;getBag;;;Element of Argument[-1];Element of ReturnValue;value", - ".bag;TransformedSortedBag;true;TransformedSortedBag;;;Element of Argument[0];Element of Argument[-1];value", ".bag;TransformedSortedBag;true;transformedSortedBag;;;Element of Argument[0];Element of ReturnValue;value", - ".bag;TransformedSortedBag;true;getSortedBag;;;Element of Argument[0];Element of ReturnValue;value", ".bag;TreeBag;true;TreeBag;(Collection);;Element of Argument[0];Element of Argument[-1];value", ".bag;UnmodifiableBag;true;unmodifiableBag;;;Element of Argument[0];Element of ReturnValue;value", ".bag;UnmodifiableSortedBag;true;unmodifiableSortedBag;;;Element of Argument[0];Element of ReturnValue;value" @@ -291,26 +280,12 @@ private class ApacheBidiMapModel extends SummaryModelCsv { ".bidimap;AbstractOrderedBidiMapDecorator;true;AbstractOrderedBidiMapDecorator;;;MapValue of Argument[0];MapValue of Argument[-1];value", ".bidimap;AbstractSortedBidiMapDecorator;true;AbstractSortedBidiMapDecorator;;;MapKey of Argument[0];MapKey of Argument[-1];value", ".bidimap;AbstractSortedBidiMapDecorator;true;AbstractSortedBidiMapDecorator;;;MapValue of Argument[0];MapValue of Argument[-1];value", - ".bidimap;DualHashBidiMap;true;DualHashBidiMap;;;MapKey of Argument[0];MapKey of Argument[-1];value", - ".bidimap;DualHashBidiMap;true;DualHashBidiMap;;;MapValue of Argument[0];MapValue of Argument[-1];value", - ".bidimap;DualHashBidiMap;true;DualHashBidiMap;;;MapKey of Argument[1];MapValue of Argument[-1];value", - ".bidimap;DualHashBidiMap;true;DualHashBidiMap;;;MapValue of Argument[1];MapKey of Argument[-1];value", - ".bidimap;DualHashBidiMap;true;DualHashBidiMap;;;MapKey of Argument[2];MapValue of Argument[-1];value", - ".bidimap;DualHashBidiMap;true;DualHashBidiMap;;;MapValue of Argument[2];MapKey of Argument[-1];value", - ".bidimap;DualLinkedHashBidiMap;true;DualLinkedHashBidiMap;;;MapKey of Argument[0];MapKey of Argument[-1];value", - ".bidimap;DualLinkedHashBidiMap;true;DualLinkedHashBidiMap;;;MapValue of Argument[0];MapValue of Argument[-1];value", - ".bidimap;DualLinkedHashBidiMap;true;DualLinkedHashBidiMap;;;MapKey of Argument[1];MapValue of Argument[-1];value", - ".bidimap;DualLinkedHashBidiMap;true;DualLinkedHashBidiMap;;;MapValue of Argument[1];MapKey of Argument[-1];value", - ".bidimap;DualLinkedHashBidiMap;true;DualLinkedHashBidiMap;;;MapKey of Argument[2];MapValue of Argument[-1];value", - ".bidimap;DualLinkedHashBidiMap;true;DualLinkedHashBidiMap;;;MapValue of Argument[2];MapKey of Argument[-1];value", + ".bidimap;DualHashBidiMap;true;DualHashBidiMap;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value", + ".bidimap;DualHashBidiMap;true;DualHashBidiMap;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value", + ".bidimap;DualLinkedHashBidiMap;true;DualLinkedHashBidiMap;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value", + ".bidimap;DualLinkedHashBidiMap;true;DualLinkedHashBidiMap;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value", ".bidimap;DualTreeBidiMap;true;DualTreeBidiMap;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value", ".bidimap;DualTreeBidiMap;true;DualTreeBidiMap;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value", - ".bidimap;DualTreeBidiMap;true;DualTreeBidiMap;(Map,Map,BidiMap);;MapKey of Argument[0];MapKey of Argument[-1];value", - ".bidimap;DualTreeBidiMap;true;DualTreeBidiMap;(Map,Map,BidiMap);;MapValue of Argument[0];MapValue of Argument[-1];value", - ".bidimap;DualTreeBidiMap;true;DualTreeBidiMap;(Map,Map,BidiMap);;MapKey of Argument[1];MapValue of Argument[-1];value", - ".bidimap;DualTreeBidiMap;true;DualTreeBidiMap;(Map,Map,BidiMap);;MapValue of Argument[1];MapKey of Argument[-1];value", - ".bidimap;DualTreeBidiMap;true;DualTreeBidiMap;(Map,Map,BidiMap);;MapKey of Argument[2];MapValue of Argument[-1];value", - ".bidimap;DualTreeBidiMap;true;DualTreeBidiMap;(Map,Map,BidiMap);;MapValue of Argument[2];MapKey of Argument[-1];value", ".bidimap;DualTreeBidiMap;true;inverseOrderedBidiMap;;;MapKey of Argument[-1];MapValue of ReturnValue;value", ".bidimap;DualTreeBidiMap;true;inverseOrderedBidiMap;;;MapValue of Argument[-1];MapKey of ReturnValue;value", ".bidimap;DualTreeBidiMap;true;inverseSortedBidiMap;;;MapKey of Argument[-1];MapValue of ReturnValue;value", @@ -319,14 +294,14 @@ private class ApacheBidiMapModel extends SummaryModelCsv { ".bidimap;DualTreeBidiMap$BidiOrderedMapIterator;true;BidiOrderedMapIterator;;;MapValue of Argument[-1];MapValue of ReturnValue;value", ".bidimap;DualTreeBidiMap$ViewMap;true;ViewMap;;;MapKey of Argument[1];MapKey of Argument[-1];value", ".bidimap;DualTreeBidiMap$ViewMap;true;ViewMap;;;MapValue of Argument[1];MapValue of Argument[-1];value", - ".bidimap;TreeBidiMap;true;TreeBidiMap;;;MapKey of Argument[1];MapKey of Argument[-1];value", - ".bidimap;TreeBidiMap;true;TreeBidiMap;;;MapValue of Argument[1];MapValue of Argument[-1];value", + ".bidimap;TreeBidiMap;true;TreeBidiMap;;;MapKey of Argument[0];MapKey of Argument[-1];value", + ".bidimap;TreeBidiMap;true;TreeBidiMap;;;MapValue of Argument[0];MapValue of Argument[-1];value", ".bidimap;UnmodifiableBidiMap;true;unmodifiableBidiMap;;;MapKey of Argument[0];MapKey of ReturnValue;value", ".bidimap;UnmodifiableBidiMap;true;unmodifiableBidiMap;;;MapValue of Argument[0];MapValue of ReturnValue;value", ".bidimap;UnmodifiableOrderedBidiMap;true;unmodifiableOrderedBidiMap;;;MapKey of Argument[0];MapKey of ReturnValue;value", ".bidimap;UnmodifiableOrderedBidiMap;true;unmodifiableOrderedBidiMap;;;MapValue of Argument[0];MapValue of ReturnValue;value", - ".bidimap;UnmodifiableOrderedBidiMap;true;inverseOrderedBidiMap;;;MapKey of Argument[0];MapValue of ReturnValue;value", - ".bidimap;UnmodifiableOrderedBidiMap;true;inverseOrderedBidiMap;;;MapValue of Argument[0];MapKey of ReturnValue;value", + ".bidimap;UnmodifiableOrderedBidiMap;true;inverseOrderedBidiMap;;;MapKey of Argument[-1];MapValue of ReturnValue;value", + ".bidimap;UnmodifiableOrderedBidiMap;true;inverseOrderedBidiMap;;;MapValue of Argument[-1];MapKey of ReturnValue;value", ".bidimap;UnmodifiableSortedBidiMap;true;unmodifiableSortedBidiMap;;;MapKey of Argument[0];MapKey of ReturnValue;value", ".bidimap;UnmodifiableSortedBidiMap;true;unmodifiableSortedBidiMap;;;MapValue of Argument[0];MapValue of ReturnValue;value" ] @@ -372,17 +347,13 @@ private class ApacheCollectionModel extends SummaryModelCsv { ".collection;PredicatedCollection$Builder;true;createPredicatedSet;;;Element of Argument[0];Element of ReturnValue;value", ".collection;PredicatedCollection$Builder;true;createPredicatedMultiSet;;;Element of Argument[-1];Element of ReturnValue;value", ".collection;PredicatedCollection$Builder;true;createPredicatedMultiSet;;;Element of Argument[0];Element of ReturnValue;value", - ".collection;PredicatedCollection$Builder;true;createPredicatedMultiBag;;;Element of Argument[-1];Element of ReturnValue;value", - ".collection;PredicatedCollection$Builder;true;createPredicatedMultiBag;;;Element of Argument[0];Element of ReturnValue;value", - ".collection;PredicatedCollection$Builder;true;createPredicatedMultiQueue;;;Element of Argument[-1];Element of ReturnValue;value", - ".collection;PredicatedCollection$Builder;true;createPredicatedMultiQueue;;;Element of Argument[0];Element of ReturnValue;value", + ".collection;PredicatedCollection$Builder;true;createPredicatedBag;;;Element of Argument[-1];Element of ReturnValue;value", + ".collection;PredicatedCollection$Builder;true;createPredicatedBag;;;Element of Argument[0];Element of ReturnValue;value", + ".collection;PredicatedCollection$Builder;true;createPredicatedQueue;;;Element of Argument[-1];Element of ReturnValue;value", + ".collection;PredicatedCollection$Builder;true;createPredicatedQueue;;;Element of Argument[0];Element of ReturnValue;value", ".collection;PredicatedCollection$Builder;true;rejectedElements;;;Element of Argument[-1];Element of ReturnValue;value", - ".collection;PredicatedCollection;true;PredicatedCollection;;;Element of Argument[0];Element of Argument[-1];value", ".collection;PredicatedCollection;true;predicatedCollection;;;Element of Argument[0];Element of ReturnValue;value", - ".collection;SynchronizedCollection;true;SynchronizedCollection;;;Element of Argument[0];Element of Argument[-1];value", ".collection;SynchronizedCollection;true;synchronizedCollection;;;Element of Argument[0];Element of ReturnValue;value", - ".collection;SynchronizedCollection;true;decorated;;;Element of Argument[-1];Element of ReturnValue;value", - ".collection;TransformedCollection;true;TransformedCollection;;;Element of Argument[0];Element of Argument[-1];value", ".collection;TransformedCollection;true;transformingCollection;;;Element of Argument[0];Element of ReturnValue;value", ".collection;UnmodifiableBoundedCollection;true;unmodifiableBoundedCollection;;;Element of Argument[0];Element of ReturnValue;value", ".collection;UnmodifiableCollection;true;unmodifiableCollection;;;Element of Argument[0];Element of ReturnValue;value" @@ -449,7 +420,6 @@ private class ApacheIteratorsModel extends SummaryModelCsv { ".iterators;ObjectArrayIterator;true;ObjectArrayIterator;;;ArrayElement of Argument[0];Element of Argument[-1];value", ".iterators;ObjectArrayIterator;true;getArray;;;Element of Argument[-1];ArrayElement of ReturnValue;value", ".iterators;ObjectArrayListIterator;true;ObjectArrayListIterator;;;ArrayElement of Argument[0];Element of Argument[-1];value", - ".iterators;ObjectArrayListIterator;true;getArray;;;Element of Argument[-1];ArrayElement of ReturnValue;value", ".iterators;ObjectGraphIterator;true;ObjectGraphIterator;(Iterator);;Element of Element of Argument[0];Element of Argument[-1];value", ".iterators;PeekingIterator;true;peekingIterator;;;Element of Argument[0];Element of ReturnValue;value", ".iterators;PeekingIterator;true;peek;;;Element of Argument[-1];ReturnValue;value", @@ -464,7 +434,7 @@ private class ApacheIteratorsModel extends SummaryModelCsv { ".iterators;SkippingIterator;true;SkippingIterator;;;Element of Argument[0];Element of Argument[-1];value", ".iterators;UniqueFilterIterator;true;UniqueFilterIterator;;;Element of Argument[0];Element of Argument[-1];value", ".iterators;UnmodifiableIterator;true;unmodifiableIterator;;;Element of Argument[0];Element of ReturnValue;value", - ".iterators;UnmodifiableListIterator;true;unmodifiableListIterator;;;Element of Argument[0];Element of ReturnValue;value", + ".iterators;UnmodifiableListIterator;true;umodifiableListIterator;;;Element of Argument[0];Element of ReturnValue;value", ".iterators;UnmodifiableMapIterator;true;unmodifiableMapIterator;;;Element of Argument[0];Element of ReturnValue;value", ".iterators;UnmodifiableMapIterator;true;unmodifiableMapIterator;;;MapValue of Argument[0];MapValue of ReturnValue;value", ".iterators;UnmodifiableOrderedMapIterator;true;unmodifiableOrderedMapIterator;;;Element of Argument[0];Element of ReturnValue;value", @@ -533,23 +503,14 @@ private class ApacheListModel extends SummaryModelCsv { ".list;CursorableLinkedList;true;cursor;;;Element of Argument[-1];Element of ReturnValue;value", ".list;CursorableLinkedList$Cursor;true;Cursor;;;Element of Argument[0];Element of Argument[-1];value", ".list;CursorableLinkedList$SubCursor;true;SubCursor;;;Element of Argument[0];Element of Argument[-1];value", - ".list;FixedSizeList;true;FixedSizeList;;;Element of Argument[0];Element of Argument[-1];value", ".list;FixedSizeList;true;fixedSizeList;;;Element of Argument[0];Element of ReturnValue;value", - ".list;GrowthList;true;GrowthList;(List);;Element of Argument[0];Element of Argument[-1];value", ".list;GrowthList;true;growthList;;;Element of Argument[0];Element of ReturnValue;value", - ".list;LazyList;true;LazyList;;;Element of Argument[0];Element of Argument[-1];value", ".list;LazyList;true;lazyList;;;Element of Argument[0];Element of ReturnValue;value", ".list;NodeCachingLinkedList;true;NodeCachingLinkedList;(Collection);;Element of Argument[0];Element of Argument[-1];value", - ".list;PredicatedList;true;PredicatedList;;;Element of Argument[0];Element of Argument[-1];value", ".list;PredicatedList;true;predicatedList;;;Element of Argument[0];Element of ReturnValue;value", - ".list;SetUniqueList;true;SetUniqueList;;;Element of Argument[0];Element of Argument[-1];value", - ".list;SetUniqueList;true;SetUniqueList;;;Element of Argument[1];Element of Argument[-1];value", ".list;SetUniqueList;true;setUniqueList;;;Element of Argument[0];Element of ReturnValue;value", ".list;SetUniqueList;true;asSet;;;Element of Argument[-1];Element of ReturnValue;value", - ".list;SetUniqueList;true;createSetBasedOnList;;;Element of Argument[1];Element of ReturnValue;value", - ".list;TransformedList;true;TransformedList;;;Element of Argument[0];Element of Argument[-1];value", ".list;TransformedList;true;transformingList;;;Element of Argument[0];Element of ReturnValue;value", - ".list;TransformedList;true;getList;;;Element of Argument[-1];Element of ReturnValue;value", ".list;TreeList;true;TreeList;;;Element of Argument[0];Element of Argument[-1];value", ".list;UnmodifiableList;true;UnmodifiableList;;;Element of Argument[0];Element of Argument[-1];value", ".list;UnmodifiableList;true;unmodifiableList;;;Element of Argument[0];Element of ReturnValue;value" @@ -573,10 +534,10 @@ private class ApacheMapModel extends SummaryModelCsv { ".map;AbstractHashedMap;true;entryKey;;;MapKey of Argument[0];ReturnValue;value", ".map;AbstractHashedMap;true;entryValue;;;MapValue of Argument[-1];ReturnValue;value", ".map;AbstractHashedMap;true;entryValue;;;MapValue of Argument[0];ReturnValue;value", - ".map;AbstractHashedMap;true;createEntrySetIterator;;;MapKey of Element of ReturnValue; MapKey of Argument[-1];value", - ".map;AbstractHashedMap;true;createEntrySetIterator;;;MapValue of Element of ReturnValue; MapValue of Argument[-1];value", - ".map;AbstractHashedMap;true;createKeySetIterator;;;Element of ReturnValue; MapKey of Argument[-1];value", - ".map;AbstractHashedMap;true;createValuesIterator;;;Element of ReturnValue; MapValue of Argument[-1];value", + ".map;AbstractHashedMap;true;createEntrySetIterator;;;MapKey of Argument[-1];MapKey of Element of ReturnValue;value", + ".map;AbstractHashedMap;true;createEntrySetIterator;;;MapValue of Argument[-1];MapValue of Element of ReturnValue;value", + ".map;AbstractHashedMap;true;createKeySetIterator;;;MapKey of Argument[-1];Element of ReturnValue;value", + ".map;AbstractHashedMap;true;createValuesIterator;;;MapValue of Argument[-1];Element of ReturnValue;value", ".map;AbstractHashedMap$HashEntry;true;HashEntry;;;Argument[2];MapKey of Argument[-1];value", ".map;AbstractHashedMap$HashEntry;true;HashEntry;;;Argument[3];MapValue of Argument[-1];value", ".map;AbstractLinkedMap;true;AbstractLinkedMap;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value", @@ -585,10 +546,10 @@ private class ApacheMapModel extends SummaryModelCsv { ".map;AbstractMapDecorator;true;AbstractMapDecorator;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value", ".map;AbstractMapDecorator;true;decorated;;;MapKey of Argument[-1];MapKey of Argument[0];value", ".map;AbstractMapDecorator;true;decorated;;;MapValue of Argument[-1];MapValue of Argument[0];value", - ".map;AbstractOrderedMapDecorator;true;AbstractOrderedMapDecorator;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value", - ".map;AbstractOrderedMapDecorator;true;AbstractOrderedMapDecorator;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value", - ".map;AbstractSortedMapDecorator;true;AbstractSortedMapDecorator;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value", - ".map;AbstractSortedMapDecorator;true;AbstractSortedMapDecorator;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value", + ".map;AbstractOrderedMapDecorator;true;AbstractOrderedMapDecorator;(OrderedMap);;MapKey of Argument[0];MapKey of Argument[-1];value", + ".map;AbstractOrderedMapDecorator;true;AbstractOrderedMapDecorator;(OrderedMap);;MapValue of Argument[0];MapValue of Argument[-1];value", + ".map;AbstractSortedMapDecorator;true;AbstractSortedMapDecorator;(SortedMap);;MapKey of Argument[0];MapKey of Argument[-1];value", + ".map;AbstractSortedMapDecorator;true;AbstractSortedMapDecorator;(SortedMap);;MapValue of Argument[0];MapValue of Argument[-1];value", ".map;AbstractSortedMapDecorator$SortedMapIterator;true;SortedMapIterator;;;MapKey of Element of Argument[0];Element of Argument[-1];value", ".map;AbstractSortedMapDecorator$SortedMapIterator;true;SortedMapIterator;;;MapValue of Element of Argument[0];MapValue of Argument[-1];value", ".map;CaseInsensitiveMap;true;CaseInsensitiveMap;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value", @@ -611,60 +572,42 @@ private class ApacheMapModel extends SummaryModelCsv { ".map;CompositeMap;true;removeComposited;;;MapValue of Argument[-1];MapValue of ReturnValue;value", ".map;CompositeMap;true;removeComposited;;;Argument[0];ReturnValue;value", ".map;DefaultedMap;true;DefaultedMap;(Object);;Argument[0];MapValue of Argument[-1];value", - ".map;DefaultedMap;true;DefaultedMap;(Map,Transformer);;MapKey of Argument[0];MapKey of Argument[-1];value", - ".map;DefaultedMap;true;DefaultedMap;(Map,Transformer);;MapValue of Argument[0];MapValue of Argument[-1];value", ".map;DefaultedMap;true;defaultedMap;;;MapKey of Argument[0];MapKey of Argument[-1];value", ".map;DefaultedMap;true;defaultedMap;;;MapValue of Argument[0];MapValue of Argument[-1];value", ".map;DefaultedMap;true;defaultedMap;(Map,Object);;Argument[1];MapValue of Argument[-1];value", ".map;EntrySetToMapIteratorAdapter;true;EntrySetToMapIteratorAdapter;;;MapKey of Element of Argument[0];Element of Argument[-1];value", ".map;EntrySetToMapIteratorAdapter;true;EntrySetToMapIteratorAdapter;;;MapValue of Element of Argument[0];MapValue of Argument[-1];value", - ".map;EntrySetToMapIteratorAdapter;true;current;;;Element of Argument[-1];MapKey of ReturnValue;value", - ".map;EntrySetToMapIteratorAdapter;true;current;;;MapValue of Argument[-1];MapValue of ReturnValue;value", - ".map;FixedSizeMap;true;FixedSizeMap;;;MapKey of Argument[0];MapKey of Argument[-1];value", - ".map;FixedSizeMap;true;FixedSizeMap;;;MapValue of Argument[0];MapValue of Argument[-1];value", ".map;FixedSizeMap;true;fixedSizeMap;;;MapKey of Argument[0];MapKey of ReturnValue;value", ".map;FixedSizeMap;true;fixedSizeMap;;;MapValue of Argument[0];MapValue of ReturnValue;value", - ".map;FixedSortedSizeMap;true;FixedSortedSizeMap;;;MapKey of Argument[0];MapKey of Argument[-1];value", - ".map;FixedSortedSizeMap;true;FixedSortedSizeMap;;;MapValue of Argument[0];MapValue of Argument[-1];value", - ".map;FixedSortedSizeMap;true;fixedSortedSizeMap;;;MapKey of Argument[0];MapKey of ReturnValue;value", - ".map;FixedSortedSizeMap;true;fixedSortedSizeMap;;;MapValue of Argument[0];MapValue of ReturnValue;value", - ".map;FixedSortedSizeMap;true;getSortedMap;;;MapKey of Argument[-1];MapKey of ReturnValue;value", - ".map;FixedSortedSizeMap;true;getSortedMap;;;MapValue of Argument[-1];MapValue of ReturnValue;value", + ".map;FixedSizeSortedMap;true;fixedSizeSortedMap;;;MapKey of Argument[0];MapKey of ReturnValue;value", + ".map;FixedSizeSortedMap;true;fixedSizeSortedMap;;;MapValue of Argument[0];MapValue of ReturnValue;value", ".map;Flat3Map;true;Flat3Map;;;MapKey of Argument[0];MapKey of Argument[-1];value", ".map;Flat3Map;true;Flat3Map;;;MapValue of Argument[0];MapValue of Argument[-1];value", ".map;HashedMap;true;HashedMap;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value", ".map;HashedMap;true;HashedMap;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value", - ".map;LazyMap;true;LazyMap;;;MapKey of Argument[0];MapKey of Argument[-1];value", - ".map;LazyMap;true;LazyMap;;;MapValue of Argument[0];MapValue of Argument[-1];value", ".map;LazyMap;true;lazyMap;;;MapKey of Argument[0];MapKey of ReturnValue;value", ".map;LazyMap;true;lazyMap;;;MapValue of Argument[0];MapValue of ReturnValue;value", - ".map;LazySortedMap;true;LazySortedMap;;;MapKey of Argument[0];MapKey of Argument[-1];value", - ".map;LazySortedMap;true;LazySortedMap;;;MapValue of Argument[0];MapValue of Argument[-1];value", ".map;LazySortedMap;true;lazySortedMap;;;MapKey of Argument[0];MapKey of ReturnValue;value", ".map;LazySortedMap;true;lazySortedMap;;;MapValue of Argument[0];MapValue of ReturnValue;value", - ".map;LazySortedMap;true;getSortedMap;;;MapKey of Argument[-1];MapKey of ReturnValue;value", - ".map;LazySortedMap;true;getSortedMap;;;MapValue of Argument[-1];MapValue of ReturnValue;value", ".map;LinkedMap;true;LinkedMap;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value", ".map;LinkedMap;true;LinkedMap;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value", ".map;LinkedMap;true;get;(int);;MapKey of Argument[0];ReturnValue;value", ".map;LinkedMap;true;getValue;(int);;MapValue of Argument[0];ReturnValue;value", ".map;LinkedMap;true;remove;(int);;MapValue of Argument[0];ReturnValue;value", - ".map;LinkedMap;true;asList;;;MapKey of Argument[0];Element of ReturnValue;value", - ".map;ListOrderedMap;true;ListOrderedMap;;;MapKey of Argument[0];MapKey of Argument[-1];value", - ".map;ListOrderedMap;true;ListOrderedMap;;;MapValue of Argument[0];MapValue of Argument[-1];value", + ".map;LinkedMap;true;asList;;;MapKey of Argument[-1];Element of ReturnValue;value", ".map;ListOrderedMap;true;listOrderedMap;;;MapKey of Argument[0];MapKey of ReturnValue;value", ".map;ListOrderedMap;true;listOrderedMap;;;MapValue of Argument[0];MapValue of ReturnValue;value", ".map;ListOrderedMap;true;putAll;;;MapKey of Argument[1];MapKey of Argument[-1];value", ".map;ListOrderedMap;true;putAll;;;MapValue of Argument[1];MapValue of Argument[-1];value", - ".map;ListOrderedMap;true;keyList;;;MapKey of Argument[1];Element of ReturnValue;value", - ".map;ListOrderedMap;true;valueList;;;MapValue of Argument[1];Element of ReturnValue;value", + ".map;ListOrderedMap;true;keyList;;;MapKey of Argument[-1];Element of ReturnValue;value", + ".map;ListOrderedMap;true;valueList;;;MapValue of Argument[-1];Element of ReturnValue;value", ".map;ListOrderedMap;true;get;(int);;MapKey of Argument[0];ReturnValue;value", ".map;ListOrderedMap;true;getValue;(int);;MapValue of Argument[0];ReturnValue;value", ".map;ListOrderedMap;true;setValue;;;Argument[1];MapValue of Argument[-1];value", ".map;ListOrderedMap;true;put;;;Argument[1];MapKey of Argument[-1];value", ".map;ListOrderedMap;true;put;;;Argument[2];MapValue of Argument[-1];value", ".map;ListOrderedMap;true;remove;(int);;MapValue of Argument[0];ReturnValue;value", - ".map;ListOrderedMap;true;asList;;;MapKey of Argument[1];Element of ReturnValue;value", + ".map;ListOrderedMap;true;asList;;;MapKey of Argument[-1];Element of ReturnValue;value", ".map;LRUMap;true;LRUMap;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value", ".map;LRUMap;true;LRUMap;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value", ".map;LRUMap;true;LRUMap;(Map,boolean);;MapKey of Argument[0];MapKey of Argument[-1];value", @@ -689,22 +632,20 @@ private class ApacheMapModel extends SummaryModelCsv { ".map;MultiValueMap;true;putAll;;;Argument[0];MapKey of Argument[-1];value", ".map;MultiValueMap;true;putAll;;;Element of Argument[1];Element of MapValue of Argument[-1];value", ".map;MultiValueMap;true;iterator;(Object);;Element of MapValue of Argument[-1];Element of ReturnValue;value", - ".map;MultiValueMap;true;iterator;();;MapKey of Argument[0];MapKey of Element of ReturnValue;value", - ".map;MultiValueMap;true;iterator;();;Element of MapValue of Argument[0];MapValue of Element of ReturnValue;value", + ".map;MultiValueMap;true;iterator;();;MapKey of Argument[-1];MapKey of Element of ReturnValue;value", + ".map;MultiValueMap;true;iterator;();;Element of MapValue of Argument[-1];MapValue of Element of ReturnValue;value", ".map;PassiveExpiringMap;true;PassiveExpiringMap;(ExpirationPolicy,Map);;MapKey of Argument[1];MapKey of Argument[-1];value", ".map;PassiveExpiringMap;true;PassiveExpiringMap;(ExpirationPolicy,Map);;MapValue of Argument[1];MapValue of Argument[-1];value", ".map;PassiveExpiringMap;true;PassiveExpiringMap;(long,Map);;MapKey of Argument[1];MapKey of Argument[-1];value", ".map;PassiveExpiringMap;true;PassiveExpiringMap;(long,Map);;MapValue of Argument[1];MapValue of Argument[-1];value", ".map;PassiveExpiringMap;true;PassiveExpiringMap;(long,TimeUnit,Map);;MapKey of Argument[1];MapKey of Argument[-1];value", ".map;PassiveExpiringMap;true;PassiveExpiringMap;(long,TimeUnit,Map);;MapValue of Argument[1];MapValue of Argument[-1];value", - ".map;PassiveExpiringMap;true;PassiveExpiringMap;(Map);;MapKey of Argument[1];MapKey of Argument[-1];value", - ".map;PassiveExpiringMap;true;PassiveExpiringMap;(Map);;MapValue of Argument[1];MapValue of Argument[-1];value", + ".map;PassiveExpiringMap;true;PassiveExpiringMap;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value", + ".map;PassiveExpiringMap;true;PassiveExpiringMap;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value", ".map;PredicatedMap;true;predicatedMap;;;MapKey of Argument[0];MapKey of ReturnValue;value", ".map;PredicatedMap;true;predicatedMap;;;MapValue of Argument[0];MapValue of ReturnValue;value", ".map;PredicatedSortedMap;true;predicatedSortedMap;;;MapKey of Argument[0];MapKey of ReturnValue;value", ".map;PredicatedSortedMap;true;predicatedSortedMap;;;MapValue of Argument[0];MapValue of ReturnValue;value", - ".map;PredicatedSortedMap;true;getSortedMap;;;MapKey of Argument[-1];MapKey of ReturnValue;value", - ".map;PredicatedSortedMap;true;getSortedMap;;;MapValue of Argument[-1];MapValue of ReturnValue;value", ".map;SingletonMap;true;SingletonMap;(Object,Object);;Argument[0];MapKey of Argument[-1];value", ".map;SingletonMap;true;SingletonMap;(Object,Object);;Argument[1];MapValue of Argument[-1];value", ".map;SingletonMap;true;SingletonMap;(KeyValue);;MapKey of Argument[0];MapKey of Argument[-1];value", @@ -743,7 +684,7 @@ private class ApacheMultiMapModel extends SummaryModelCsv { ".multimap;ArrayListValuedHashMap;true;ArrayListValuedHashMap;(MultiValuedMap);;Element of MapValue of Argument[0];Element of MapValue of Argument[-1];value", ".multimap;ArrayListValuedHashMap;true;ArrayListValuedHashMap;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value", ".multimap;ArrayListValuedHashMap;true;ArrayListValuedHashMap;(Map);;MapValue of Argument[0];Element of MapValue of Argument[-1];value", - ".multimap;unmodifiableMultiValuedMap;true;HashSetValuedHashMap;(MultiValuedMap);;MapKey of Argument[0];MapKey of Argument[-1];value", + ".multimap;HashSetValuedHashMap;true;HashSetValuedHashMap;(MultiValuedMap);;MapKey of Argument[0];MapKey of Argument[-1];value", ".multimap;HashSetValuedHashMap;true;HashSetValuedHashMap;(MultiValuedMap);;Element of MapValue of Argument[0];Element of MapValue of Argument[-1];value", ".multimap;HashSetValuedHashMap;true;HashSetValuedHashMap;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value", ".multimap;HashSetValuedHashMap;true;HashSetValuedHashMap;(Map);;MapValue of Argument[0];Element of MapValue of Argument[-1];value", @@ -844,10 +785,9 @@ private class ApacheSetModel extends SummaryModelCsv { ".set;PredicatedNavigableSet;true;predicatedNavigableSet;;;Element of Argument[0];Element of ReturnValue;value", ".set;PredicatedSet;true;predicatedSet;;;Element of Argument[0];Element of ReturnValue;value", ".set;PredicatedSortedSet;true;predicatedSortedSet;;;Element of Argument[0];Element of ReturnValue;value", - ".set;TransformedNavigableSet;true;transformingSortedSet;;;Element of Argument[0];Element of ReturnValue;value", + ".set;TransformedNavigableSet;true;transformingNavigableSet;;;Element of Argument[0];Element of ReturnValue;value", ".set;TransformedSet;true;transformingSet;;;Element of Argument[0];Element of ReturnValue;value", ".set;TransformedSortedSet;true;transformingSortedSet;;;Element of Argument[0];Element of ReturnValue;value", - ".set;TransformedSortedSet;true;getSortedSet;;;Element of Argument[-1];Element of ReturnValue;value", ".set;UnmodifiableNavigableSet;true;unmodifiableNavigableSet;;;Element of Argument[0];Element of ReturnValue;value", ".set;UnmodifiableSet;true;unmodifiableSet;;;Element of Argument[0];Element of ReturnValue;value", ".set;UnmodifiableSortedSet;true;unmodifiableSortedSet;;;Element of Argument[0];Element of ReturnValue;value" @@ -883,10 +823,10 @@ private class ApacheTrieModel extends SummaryModelCsv { // Note that when lambdas are supported we should have more models for TransformedSplitMap ".trie;PatriciaTrie;true;PatriciaTrie;;;MapKey of Argument[0];MapKey of Argument[-1];value", ".trie;PatriciaTrie;true;PatriciaTrie;;;MapValue of Argument[0];MapValue of Argument[-1];value", - ".trie;PatriciaTrie;true;select;;;MapKey of Argument[-1];MapKey of ReturnValue;value", - ".trie;PatriciaTrie;true;select;;;MapValue of Argument[-1];MapValue of ReturnValue;value", - ".trie;PatriciaTrie;true;selectKey;;;MapKey of Argument[-1];ReturnValue;value", - ".trie;PatriciaTrie;true;selectValue;;;MapValue of Argument[-1];ReturnValue;value", + ".trie;AbstractPatriciaTrie;true;select;;;MapKey of Argument[-1];MapKey of ReturnValue;value", + ".trie;AbstractPatriciaTrie;true;select;;;MapValue of Argument[-1];MapValue of ReturnValue;value", + ".trie;AbstractPatriciaTrie;true;selectKey;;;MapKey of Argument[-1];ReturnValue;value", + ".trie;AbstractPatriciaTrie;true;selectValue;;;MapValue of Argument[-1];ReturnValue;value", ".trie;UnmodifiableTrie;true;unmodifiableTrie;;;MapKey of Argument[0];MapKey of ReturnValue;value", ".trie;UnmodifiableTrie;true;unmodifiableTrie;;;MapValue of Argument[0];MapValue of ReturnValue;value" ] From 3b678bfbc5a4d7e7836b6b35c7b69e2165aec52f Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Wed, 15 Sep 2021 16:36:55 +0100 Subject: [PATCH 622/741] Address review comments --- .../java/frameworks/apache/Collections.qll | 35 ++++++++++--------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/java/ql/lib/semmle/code/java/frameworks/apache/Collections.qll b/java/ql/lib/semmle/code/java/frameworks/apache/Collections.qll index 53453159ea1..04e649c8c64 100644 --- a/java/ql/lib/semmle/code/java/frameworks/apache/Collections.qll +++ b/java/ql/lib/semmle/code/java/frameworks/apache/Collections.qll @@ -248,7 +248,7 @@ private class ApacheBidiMapModel extends SummaryModelCsv { ".bidimap;AbstractDualBidiMap$BidiMapIterator;true;BidiMapIterator;;;MapValue of Argument[0];MapValue of Argument[-1];value", ".bidimap;AbstractDualBidiMap$EntrySet;true;EntrySet;;;MapKey of Argument[0];MapKey of Element of Argument[-1];value", ".bidimap;AbstractDualBidiMap$EntrySet;true;EntrySet;;;MapValue of Argument[0];MapValue of Element of Argument[-1];value", - ".bidimap;AbstractDualBidiMap$EntrySetIterator;true;EntrySetIterator;;;Element of Argument[0];MapKey of Element of Argument[-1];value", + ".bidimap;AbstractDualBidiMap$EntrySetIterator;true;EntrySetIterator;;;MapKey of Element of Argument[0];MapKey of Element of Argument[-1];value", ".bidimap;AbstractDualBidiMap$EntrySetIterator;true;EntrySetIterator;;;MapValue of Element of Argument[0];MapValue of Element of Argument[-1];value", ".bidimap;AbstractDualBidiMap$EntrySetIterator;true;EntrySetIterator;;;MapKey of Argument[1];MapKey of Element of Argument[-1];value", ".bidimap;AbstractDualBidiMap$EntrySetIterator;true;EntrySetIterator;;;MapValue of Argument[1];MapValue of Element of Argument[-1];value", @@ -257,8 +257,11 @@ private class ApacheBidiMapModel extends SummaryModelCsv { ".bidimap;AbstractDualBidiMap$KeySetIterator;true;KeySetIterator;;;MapKey of Argument[1];Element of Argument[-1];value", ".bidimap;AbstractDualBidiMap$MapEntry;true;MapEntry;;;MapKey of Argument[0];MapKey of Argument[-1];value", ".bidimap;AbstractDualBidiMap$MapEntry;true;MapEntry;;;MapValue of Argument[0];MapValue of Argument[-1];value", + ".bidimap;AbstractDualBidiMap$MapEntry;true;MapEntry;;;MapKey of Argument[1];MapKey of Argument[-1];value", + ".bidimap;AbstractDualBidiMap$MapEntry;true;MapEntry;;;MapValue of Argument[1];MapValue of Argument[-1];value", ".bidimap;AbstractDualBidiMap$Values;true;Values;;;MapValue of Argument[0];Element of Argument[-1];value", ".bidimap;AbstractDualBidiMap$ValuesIterator;true;ValuesIterator;;;Element of Argument[0];Element of Argument[-1];value", + ".bidimap;AbstractDualBidiMap$ValuesIterator;true;ValuesIterator;;;MapValue of Argument[1];Element of Argument[-1];value", ".bidimap;AbstractDualBidiMap$View;true;View;;;Element of Argument[0];Element of Argument[-1];value", ".bidimap;AbstractDualBidiMap;true;AbstractDualBidiMap;;;MapKey of Argument[0];MapKey of Argument[-1];value", ".bidimap;AbstractDualBidiMap;true;AbstractDualBidiMap;;;MapValue of Argument[0];MapValue of Argument[-1];value", @@ -284,8 +287,8 @@ private class ApacheBidiMapModel extends SummaryModelCsv { ".bidimap;DualHashBidiMap;true;DualHashBidiMap;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value", ".bidimap;DualLinkedHashBidiMap;true;DualLinkedHashBidiMap;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value", ".bidimap;DualLinkedHashBidiMap;true;DualLinkedHashBidiMap;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value", - ".bidimap;DualTreeBidiMap;true;DualTreeBidiMap;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value", - ".bidimap;DualTreeBidiMap;true;DualTreeBidiMap;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value", + ".bidimap;DualTreeBidiMap;true;DualTreeBidiMap;;;MapKey of Argument[0];MapKey of Argument[-1];value", + ".bidimap;DualTreeBidiMap;true;DualTreeBidiMap;;;MapValue of Argument[0];MapValue of Argument[-1];value", ".bidimap;DualTreeBidiMap;true;inverseOrderedBidiMap;;;MapKey of Argument[-1];MapValue of ReturnValue;value", ".bidimap;DualTreeBidiMap;true;inverseOrderedBidiMap;;;MapValue of Argument[-1];MapKey of ReturnValue;value", ".bidimap;DualTreeBidiMap;true;inverseSortedBidiMap;;;MapKey of Argument[-1];MapValue of ReturnValue;value", @@ -421,6 +424,7 @@ private class ApacheIteratorsModel extends SummaryModelCsv { ".iterators;ObjectArrayIterator;true;getArray;;;Element of Argument[-1];ArrayElement of ReturnValue;value", ".iterators;ObjectArrayListIterator;true;ObjectArrayListIterator;;;ArrayElement of Argument[0];Element of Argument[-1];value", ".iterators;ObjectGraphIterator;true;ObjectGraphIterator;(Iterator);;Element of Element of Argument[0];Element of Argument[-1];value", + ".iterators;PeekingIterator;true;PeekingIterator;;;Element of Argument[0];Element of Argument[-1];value", ".iterators;PeekingIterator;true;peekingIterator;;;Element of Argument[0];Element of ReturnValue;value", ".iterators;PeekingIterator;true;peek;;;Element of Argument[-1];ReturnValue;value", ".iterators;PeekingIterator;true;element;;;Element of Argument[-1];ReturnValue;value", @@ -529,7 +533,7 @@ private class ApacheMapModel extends SummaryModelCsv { // Note that when lambdas are supported we should have more models for DefaultedMap, LazyMap, TransformedMap, TransformedSortedMap ".map;AbstractHashedMap;true;AbstractHashedMap;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value", ".map;AbstractHashedMap;true;AbstractHashedMap;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value", - ".map;AbstractHashedMap;true;convertKey;;;Argument[0];ReturnValue;value", + ".map;AbstractHashedMap;false;convertKey;;;Argument[0];ReturnValue;value", ".map;AbstractHashedMap;true;entryKey;;;MapKey of Argument[-1];ReturnValue;value", ".map;AbstractHashedMap;true;entryKey;;;MapKey of Argument[0];ReturnValue;value", ".map;AbstractHashedMap;true;entryValue;;;MapValue of Argument[-1];ReturnValue;value", @@ -544,8 +548,8 @@ private class ApacheMapModel extends SummaryModelCsv { ".map;AbstractLinkedMap;true;AbstractLinkedMap;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value", ".map;AbstractMapDecorator;true;AbstractMapDecorator;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value", ".map;AbstractMapDecorator;true;AbstractMapDecorator;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value", - ".map;AbstractMapDecorator;true;decorated;;;MapKey of Argument[-1];MapKey of Argument[0];value", - ".map;AbstractMapDecorator;true;decorated;;;MapValue of Argument[-1];MapValue of Argument[0];value", + ".map;AbstractMapDecorator;true;decorated;;;MapKey of Argument[-1];MapKey of ReturnValue;value", + ".map;AbstractMapDecorator;true;decorated;;;MapValue of Argument[-1];MapValue of ReturnValue;value", ".map;AbstractOrderedMapDecorator;true;AbstractOrderedMapDecorator;(OrderedMap);;MapKey of Argument[0];MapKey of Argument[-1];value", ".map;AbstractOrderedMapDecorator;true;AbstractOrderedMapDecorator;(OrderedMap);;MapValue of Argument[0];MapValue of Argument[-1];value", ".map;AbstractSortedMapDecorator;true;AbstractSortedMapDecorator;(SortedMap);;MapKey of Argument[0];MapKey of Argument[-1];value", @@ -629,8 +633,8 @@ private class ApacheMapModel extends SummaryModelCsv { ".map;MultiValueMap;true;multiValueMap;;;MapKey of Argument[0];MapKey of ReturnValue;value", ".map;MultiValueMap;true;multiValueMap;;;Element of MapValue of Argument[0];Element of MapValue of ReturnValue;value", ".map;MultiValueMap;true;getCollection;;;Element of MapValue of Argument[-1];Element of ReturnValue;value", - ".map;MultiValueMap;true;putAll;;;Argument[0];MapKey of Argument[-1];value", - ".map;MultiValueMap;true;putAll;;;Element of Argument[1];Element of MapValue of Argument[-1];value", + ".map;MultiValueMap;true;putAll;(Object,Collection);;Argument[0];MapKey of Argument[-1];value", + ".map;MultiValueMap;true;putAll;(Object,Collection);;Element of Argument[1];Element of MapValue of Argument[-1];value", ".map;MultiValueMap;true;iterator;(Object);;Element of MapValue of Argument[-1];Element of ReturnValue;value", ".map;MultiValueMap;true;iterator;();;MapKey of Argument[-1];MapKey of Element of ReturnValue;value", ".map;MultiValueMap;true;iterator;();;Element of MapValue of Argument[-1];MapValue of Element of ReturnValue;value", @@ -638,8 +642,8 @@ private class ApacheMapModel extends SummaryModelCsv { ".map;PassiveExpiringMap;true;PassiveExpiringMap;(ExpirationPolicy,Map);;MapValue of Argument[1];MapValue of Argument[-1];value", ".map;PassiveExpiringMap;true;PassiveExpiringMap;(long,Map);;MapKey of Argument[1];MapKey of Argument[-1];value", ".map;PassiveExpiringMap;true;PassiveExpiringMap;(long,Map);;MapValue of Argument[1];MapValue of Argument[-1];value", - ".map;PassiveExpiringMap;true;PassiveExpiringMap;(long,TimeUnit,Map);;MapKey of Argument[1];MapKey of Argument[-1];value", - ".map;PassiveExpiringMap;true;PassiveExpiringMap;(long,TimeUnit,Map);;MapValue of Argument[1];MapValue of Argument[-1];value", + ".map;PassiveExpiringMap;true;PassiveExpiringMap;(long,TimeUnit,Map);;MapKey of Argument[2];MapKey of Argument[-1];value", + ".map;PassiveExpiringMap;true;PassiveExpiringMap;(long,TimeUnit,Map);;MapValue of Argument[2];MapValue of Argument[-1];value", ".map;PassiveExpiringMap;true;PassiveExpiringMap;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value", ".map;PassiveExpiringMap;true;PassiveExpiringMap;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value", ".map;PredicatedMap;true;predicatedMap;;;MapKey of Argument[0];MapKey of ReturnValue;value", @@ -768,11 +772,10 @@ private class ApacheSetModel extends SummaryModelCsv { ".set;CompositeSet$SetMutator;true;addAll;;;Element of Argument[2];Element of Argument[0];value", ".set;CompositeSet$SetMutator;true;addAll;;;Element of Argument[2];Element of Element of Argument[1];value", ".set;CompositeSet;true;CompositeSet;(Set);;Element of Argument[0];Element of Argument[-1];value", - ".set;CompositeSet;true;CompositeSet;(Set[]);;Element of Element of Argument[0];Element of Argument[-1];value", - ".set;CompositeSet;true;addComposited;(Set);;Element of Argument[0];Element of Argument[-1];value", - ".set;CompositeSet;true;addComposited;(Set,Set);;Element of Argument[0];Element of Argument[-1];value", - ".set;CompositeSet;true;addComposited;(Set,Set);;Element of Argument[1];Element of Argument[-1];value", - ".set;CompositeSet;true;addComposited;(Set[]);;Element of Element of Argument[0];Element of Argument[-1];value", + ".set;CompositeSet;true;CompositeSet;(Set[]);;Element of ArrayElement of Argument[0];Element of Argument[-1];value", + ".set;CompositeSet;true;addComposited;;;Element of Argument[0];Element of Argument[-1];value", + ".set;CompositeSet;true;addComposited;;;Element of Argument[1];Element of Argument[-1];value", + ".set;CompositeSet;true;addComposited;(Set[]);;Element of ArrayElement of Argument[0];Element of Argument[-1];value", ".set;CompositeSet;true;toSet;;;Element of Argument[-1];Element of ReturnValue;value", ".set;CompositeSet;true;getSets;;;Element of Argument[-1];Element of Element of ReturnValue;value", ".set;ListOrderedSet;true;listOrderedSet;(Set);;Element of Argument[0];Element of ReturnValue;value", @@ -780,7 +783,7 @@ private class ApacheSetModel extends SummaryModelCsv { ".set;ListOrderedSet;true;asList;;;Element of Argument[-1];Element of ReturnValue;value", ".set;ListOrderedSet;true;get;;;Element of Argument[-1];ReturnValue;value", ".set;ListOrderedSet;true;add;;;Argument[1];Element of Argument[-1];value", - ".set;ListOrderedSet;true;add;;;Element of Argument[1];Element of Argument[-1];value", + ".set;ListOrderedSet;true;addAll;;;Element of Argument[1];Element of Argument[-1];value", ".set;MapBackedSet;true;mapBackedSet;;;MapKey of Argument[0];Element of ReturnValue;value", ".set;PredicatedNavigableSet;true;predicatedNavigableSet;;;Element of Argument[0];Element of ReturnValue;value", ".set;PredicatedSet;true;predicatedSet;;;Element of Argument[0];Element of ReturnValue;value", From cb0f82c36e45efc57e3b6bce6ac4a79434b365b3 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Fri, 17 Sep 2021 17:03:53 +0100 Subject: [PATCH 623/741] Do not modelled protected static inner classes --- .../java/frameworks/apache/Collections.qll | 47 ------------------- 1 file changed, 47 deletions(-) diff --git a/java/ql/lib/semmle/code/java/frameworks/apache/Collections.qll b/java/ql/lib/semmle/code/java/frameworks/apache/Collections.qll index 04e649c8c64..66da520174a 100644 --- a/java/ql/lib/semmle/code/java/frameworks/apache/Collections.qll +++ b/java/ql/lib/semmle/code/java/frameworks/apache/Collections.qll @@ -244,25 +244,6 @@ private class ApacheBidiMapModel extends SummaryModelCsv { [ ".bidimap;AbstractBidiMapDecorator;true;AbstractBidiMapDecorator;;;MapKey of Argument[0];MapKey of Argument[-1];value", ".bidimap;AbstractBidiMapDecorator;true;AbstractBidiMapDecorator;;;MapValue of Argument[0];MapValue of Argument[-1];value", - ".bidimap;AbstractDualBidiMap$BidiMapIterator;true;BidiMapIterator;;;MapKey of Argument[0];MapKey of Argument[-1];value", - ".bidimap;AbstractDualBidiMap$BidiMapIterator;true;BidiMapIterator;;;MapValue of Argument[0];MapValue of Argument[-1];value", - ".bidimap;AbstractDualBidiMap$EntrySet;true;EntrySet;;;MapKey of Argument[0];MapKey of Element of Argument[-1];value", - ".bidimap;AbstractDualBidiMap$EntrySet;true;EntrySet;;;MapValue of Argument[0];MapValue of Element of Argument[-1];value", - ".bidimap;AbstractDualBidiMap$EntrySetIterator;true;EntrySetIterator;;;MapKey of Element of Argument[0];MapKey of Element of Argument[-1];value", - ".bidimap;AbstractDualBidiMap$EntrySetIterator;true;EntrySetIterator;;;MapValue of Element of Argument[0];MapValue of Element of Argument[-1];value", - ".bidimap;AbstractDualBidiMap$EntrySetIterator;true;EntrySetIterator;;;MapKey of Argument[1];MapKey of Element of Argument[-1];value", - ".bidimap;AbstractDualBidiMap$EntrySetIterator;true;EntrySetIterator;;;MapValue of Argument[1];MapValue of Element of Argument[-1];value", - ".bidimap;AbstractDualBidiMap$KeySet;true;KeySet;;;MapKey of Argument[0];Element of Argument[-1];value", - ".bidimap;AbstractDualBidiMap$KeySetIterator;true;KeySetIterator;;;Element of Argument[0];Element of Argument[-1];value", - ".bidimap;AbstractDualBidiMap$KeySetIterator;true;KeySetIterator;;;MapKey of Argument[1];Element of Argument[-1];value", - ".bidimap;AbstractDualBidiMap$MapEntry;true;MapEntry;;;MapKey of Argument[0];MapKey of Argument[-1];value", - ".bidimap;AbstractDualBidiMap$MapEntry;true;MapEntry;;;MapValue of Argument[0];MapValue of Argument[-1];value", - ".bidimap;AbstractDualBidiMap$MapEntry;true;MapEntry;;;MapKey of Argument[1];MapKey of Argument[-1];value", - ".bidimap;AbstractDualBidiMap$MapEntry;true;MapEntry;;;MapValue of Argument[1];MapValue of Argument[-1];value", - ".bidimap;AbstractDualBidiMap$Values;true;Values;;;MapValue of Argument[0];Element of Argument[-1];value", - ".bidimap;AbstractDualBidiMap$ValuesIterator;true;ValuesIterator;;;Element of Argument[0];Element of Argument[-1];value", - ".bidimap;AbstractDualBidiMap$ValuesIterator;true;ValuesIterator;;;MapValue of Argument[1];Element of Argument[-1];value", - ".bidimap;AbstractDualBidiMap$View;true;View;;;Element of Argument[0];Element of Argument[-1];value", ".bidimap;AbstractDualBidiMap;true;AbstractDualBidiMap;;;MapKey of Argument[0];MapKey of Argument[-1];value", ".bidimap;AbstractDualBidiMap;true;AbstractDualBidiMap;;;MapValue of Argument[0];MapValue of Argument[-1];value", ".bidimap;AbstractDualBidiMap;true;AbstractDualBidiMap;;;MapKey of Argument[1];MapValue of Argument[-1];value", @@ -293,10 +274,6 @@ private class ApacheBidiMapModel extends SummaryModelCsv { ".bidimap;DualTreeBidiMap;true;inverseOrderedBidiMap;;;MapValue of Argument[-1];MapKey of ReturnValue;value", ".bidimap;DualTreeBidiMap;true;inverseSortedBidiMap;;;MapKey of Argument[-1];MapValue of ReturnValue;value", ".bidimap;DualTreeBidiMap;true;inverseSortedBidiMap;;;MapValue of Argument[-1];MapKey of ReturnValue;value", - ".bidimap;DualTreeBidiMap$BidiOrderedMapIterator;true;BidiOrderedMapIterator;;;MapKey of Argument[-1];Element of ReturnValue;value", - ".bidimap;DualTreeBidiMap$BidiOrderedMapIterator;true;BidiOrderedMapIterator;;;MapValue of Argument[-1];MapValue of ReturnValue;value", - ".bidimap;DualTreeBidiMap$ViewMap;true;ViewMap;;;MapKey of Argument[1];MapKey of Argument[-1];value", - ".bidimap;DualTreeBidiMap$ViewMap;true;ViewMap;;;MapValue of Argument[1];MapValue of Argument[-1];value", ".bidimap;TreeBidiMap;true;TreeBidiMap;;;MapKey of Argument[0];MapKey of Argument[-1];value", ".bidimap;TreeBidiMap;true;TreeBidiMap;;;MapValue of Argument[0];MapValue of Argument[-1];value", ".bidimap;UnmodifiableBidiMap;true;unmodifiableBidiMap;;;MapKey of Argument[0];MapKey of ReturnValue;value", @@ -483,30 +460,10 @@ private class ApacheListModel extends SummaryModelCsv { ".list;AbstractLinkedList;true;createSubListIterator;;;Element of Argument[0];Element of ReturnValue;value", ".list;AbstractLinkedList;true;createSubListListIterator;;;Element of Argument[-1];Element of ReturnValue;value", ".list;AbstractLinkedList;true;createSubListListIterator;;;Element of Argument[0];Element of ReturnValue;value", - ".list;AbstractLinkedList$LinkedListIterator;true;LinkedListIterator;;;Element of Argument[0];Element of Argument[-1];value", - ".list;AbstractLinkedList$LinkedListIterator;true;getLastNodeReturned;;;Element of Argument[-1];Element of ReturnValue;value", - ".list;AbstractLinkedList$LinkedSubList;true;LinkedSubList;;;Element of Argument[0];Element of Argument[-1];value", - ".list;AbstractLinkedList$LinkedSubListIterator;true;LinkedSubListIterator;;;Element of Argument[0];Element of Argument[-1];value", - ".list;AbstractLinkedList$Node;true;Node;(Object);;Argument[0];Element of Argument[-1];value", - ".list;AbstractLinkedList$Node;true;Node;(Node,Node,Object);;Element of Argument[0];Element of Argument[-1];value", - ".list;AbstractLinkedList$Node;true;Node;(Node,Node,Object);;Element of Argument[1];Element of Argument[-1];value", - ".list;AbstractLinkedList$Node;true;Node;(Node,Node,Object);;Argument[2];Element of Argument[-1];value", - ".list;AbstractLinkedList$Node;true;Node;(Node,Node,Object);;Argument[2];Element of Argument[0];value", - ".list;AbstractLinkedList$Node;true;Node;(Node,Node,Object);;Argument[2];Element of Argument[1];value", - ".list;AbstractLinkedList$Node;true;getValue;;;Element of Argument[-1];ReturnValue;value", - ".list;AbstractLinkedList$Node;true;setValue;;;Argument[0];Element of Argument[-1];value", - ".list;AbstractLinkedList$Node;true;getPreviousNode;;;Element of Argument[-1];Element of ReturnValue;value", - ".list;AbstractLinkedList$Node;true;setPreviousNode;;;Element of Argument[-1];Element of Argument[0];value", - ".list;AbstractLinkedList$Node;true;setPreviousNode;;;Element of Argument[0];Element of Argument[-1];value", - ".list;AbstractLinkedList$Node;true;getNextNode;;;Element of Argument[-1];Element of ReturnValue;value", - ".list;AbstractLinkedList$Node;true;setNextNode;;;Element of Argument[-1];Element of Argument[0];value", - ".list;AbstractLinkedList$Node;true;setNextNode;;;Element of Argument[0];Element of Argument[-1];value", ".list;AbstractListDecorator;true;AbstractListDecorator;;;Element of Argument[0];Element of Argument[-1];value", ".list;AbstractSerializableListDecorator;true;AbstractSerializableListDecorator;;;Element of Argument[0];Element of Argument[-1];value", ".list;CursorableLinkedList;true;CursorableLinkedList;;;Element of Argument[0];Element of Argument[-1];value", ".list;CursorableLinkedList;true;cursor;;;Element of Argument[-1];Element of ReturnValue;value", - ".list;CursorableLinkedList$Cursor;true;Cursor;;;Element of Argument[0];Element of Argument[-1];value", - ".list;CursorableLinkedList$SubCursor;true;SubCursor;;;Element of Argument[0];Element of Argument[-1];value", ".list;FixedSizeList;true;fixedSizeList;;;Element of Argument[0];Element of ReturnValue;value", ".list;GrowthList;true;growthList;;;Element of Argument[0];Element of ReturnValue;value", ".list;LazyList;true;lazyList;;;Element of Argument[0];Element of ReturnValue;value", @@ -542,8 +499,6 @@ private class ApacheMapModel extends SummaryModelCsv { ".map;AbstractHashedMap;true;createEntrySetIterator;;;MapValue of Argument[-1];MapValue of Element of ReturnValue;value", ".map;AbstractHashedMap;true;createKeySetIterator;;;MapKey of Argument[-1];Element of ReturnValue;value", ".map;AbstractHashedMap;true;createValuesIterator;;;MapValue of Argument[-1];Element of ReturnValue;value", - ".map;AbstractHashedMap$HashEntry;true;HashEntry;;;Argument[2];MapKey of Argument[-1];value", - ".map;AbstractHashedMap$HashEntry;true;HashEntry;;;Argument[3];MapValue of Argument[-1];value", ".map;AbstractLinkedMap;true;AbstractLinkedMap;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value", ".map;AbstractLinkedMap;true;AbstractLinkedMap;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value", ".map;AbstractMapDecorator;true;AbstractMapDecorator;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value", @@ -554,8 +509,6 @@ private class ApacheMapModel extends SummaryModelCsv { ".map;AbstractOrderedMapDecorator;true;AbstractOrderedMapDecorator;(OrderedMap);;MapValue of Argument[0];MapValue of Argument[-1];value", ".map;AbstractSortedMapDecorator;true;AbstractSortedMapDecorator;(SortedMap);;MapKey of Argument[0];MapKey of Argument[-1];value", ".map;AbstractSortedMapDecorator;true;AbstractSortedMapDecorator;(SortedMap);;MapValue of Argument[0];MapValue of Argument[-1];value", - ".map;AbstractSortedMapDecorator$SortedMapIterator;true;SortedMapIterator;;;MapKey of Element of Argument[0];Element of Argument[-1];value", - ".map;AbstractSortedMapDecorator$SortedMapIterator;true;SortedMapIterator;;;MapValue of Element of Argument[0];MapValue of Argument[-1];value", ".map;CaseInsensitiveMap;true;CaseInsensitiveMap;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value", ".map;CaseInsensitiveMap;true;CaseInsensitiveMap;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value", ".map;CompositeMap;true;CompositeMap;(Map,Map);;MapKey of Argument[0];MapKey of Argument[-1];value", From 9b129806889f93d3cdd7699af2e4294351e19641 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Fri, 17 Sep 2021 17:04:20 +0100 Subject: [PATCH 624/741] Do not model some protected methods --- .../java/frameworks/apache/Collections.qll | 33 ------------------- 1 file changed, 33 deletions(-) diff --git a/java/ql/lib/semmle/code/java/frameworks/apache/Collections.qll b/java/ql/lib/semmle/code/java/frameworks/apache/Collections.qll index 66da520174a..edba27a80f2 100644 --- a/java/ql/lib/semmle/code/java/frameworks/apache/Collections.qll +++ b/java/ql/lib/semmle/code/java/frameworks/apache/Collections.qll @@ -250,16 +250,6 @@ private class ApacheBidiMapModel extends SummaryModelCsv { ".bidimap;AbstractDualBidiMap;true;AbstractDualBidiMap;;;MapValue of Argument[1];MapKey of Argument[-1];value", ".bidimap;AbstractDualBidiMap;true;AbstractDualBidiMap;;;MapKey of Argument[2];MapValue of Argument[-1];value", ".bidimap;AbstractDualBidiMap;true;AbstractDualBidiMap;;;MapValue of Argument[2];MapKey of Argument[-1];value", - ".bidimap;AbstractDualBidiMap;true;createBidiMap;;;MapKey of Argument[0];MapKey of Argument[-1];value", - ".bidimap;AbstractDualBidiMap;true;createBidiMap;;;MapValue of Argument[0];MapValue of Argument[-1];value", - ".bidimap;AbstractDualBidiMap;true;createBidiMap;;;MapKey of Argument[1];MapValue of Argument[-1];value", - ".bidimap;AbstractDualBidiMap;true;createBidiMap;;;MapValue of Argument[1];MapKey of Argument[-1];value", - ".bidimap;AbstractDualBidiMap;true;createBidiMap;;;MapKey of Argument[2];MapValue of Argument[-1];value", - ".bidimap;AbstractDualBidiMap;true;createBidiMap;;;MapValue of Argument[2];MapKey of Argument[-1];value", - ".bidimap;AbstractDualBidiMap;true;createKeySetIterator;;;MapKey of Argument[-1];Element of ReturnValue;value", - ".bidimap;AbstractDualBidiMap;true;createValuesIterator;;;MapValue of Argument[-1];Element of ReturnValue;value", - ".bidimap;AbstractDualBidiMap;true;createEntrySetIterator;;;MapKey of Argument[-1];MapKey of Element of ReturnValue;value", - ".bidimap;AbstractDualBidiMap;true;createEntrySetIterator;;;MapValue of Argument[-1];MapValue of Element of ReturnValue;value", ".bidimap;AbstractOrderedBidiMapDecorator;true;AbstractOrderedBidiMapDecorator;;;MapKey of Argument[0];MapKey of Argument[-1];value", ".bidimap;AbstractOrderedBidiMapDecorator;true;AbstractOrderedBidiMapDecorator;;;MapValue of Argument[0];MapValue of Argument[-1];value", ".bidimap;AbstractSortedBidiMapDecorator;true;AbstractSortedBidiMapDecorator;;;MapKey of Argument[0];MapKey of Argument[-1];value", @@ -446,20 +436,6 @@ private class ApacheListModel extends SummaryModelCsv { ".list;AbstractLinkedList;true;addLast;;;Argument[0];Element of Argument[-1];value", ".list;AbstractLinkedList;true;removeFirst;;;Element of Argument[-1];ReturnValue;value", ".list;AbstractLinkedList;true;removeLast;;;Element of Argument[-1];ReturnValue;value", - ".list;AbstractLinkedList;true;updateNode;;;Argument[1];Element of Argument[-1];value", - ".list;AbstractLinkedList;true;updateNode;;;Argument[1];Element of Argument[0];value", - ".list;AbstractLinkedList;true;createNode;;;Argument[0];Element of ReturnValue;value", - ".list;AbstractLinkedList;true;addNodeBefore;;;Argument[1];Element of Argument[-1];value", - ".list;AbstractLinkedList;true;addNodeBefore;;;Argument[1];Element of Argument[0];value", - ".list;AbstractLinkedList;true;addNodeAfter;;;Argument[1];Element of Argument[-1];value", - ".list;AbstractLinkedList;true;addNodeAfter;;;Argument[1];Element of Argument[0];value", - ".list;AbstractLinkedList;true;addNode;;;Element of Argument[0];Element of Argument[-1];value", - ".list;AbstractLinkedList;true;addNode;;;Element of Argument[0];Element of Argument[1];value", - ".list;AbstractLinkedList;true;getNode;;;Element of Argument[-1];Element of ReturnValue;value", - ".list;AbstractLinkedList;true;createSubListIterator;;;Element of Argument[-1];Element of ReturnValue;value", - ".list;AbstractLinkedList;true;createSubListIterator;;;Element of Argument[0];Element of ReturnValue;value", - ".list;AbstractLinkedList;true;createSubListListIterator;;;Element of Argument[-1];Element of ReturnValue;value", - ".list;AbstractLinkedList;true;createSubListListIterator;;;Element of Argument[0];Element of ReturnValue;value", ".list;AbstractListDecorator;true;AbstractListDecorator;;;Element of Argument[0];Element of Argument[-1];value", ".list;AbstractSerializableListDecorator;true;AbstractSerializableListDecorator;;;Element of Argument[0];Element of Argument[-1];value", ".list;CursorableLinkedList;true;CursorableLinkedList;;;Element of Argument[0];Element of Argument[-1];value", @@ -490,15 +466,6 @@ private class ApacheMapModel extends SummaryModelCsv { // Note that when lambdas are supported we should have more models for DefaultedMap, LazyMap, TransformedMap, TransformedSortedMap ".map;AbstractHashedMap;true;AbstractHashedMap;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value", ".map;AbstractHashedMap;true;AbstractHashedMap;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value", - ".map;AbstractHashedMap;false;convertKey;;;Argument[0];ReturnValue;value", - ".map;AbstractHashedMap;true;entryKey;;;MapKey of Argument[-1];ReturnValue;value", - ".map;AbstractHashedMap;true;entryKey;;;MapKey of Argument[0];ReturnValue;value", - ".map;AbstractHashedMap;true;entryValue;;;MapValue of Argument[-1];ReturnValue;value", - ".map;AbstractHashedMap;true;entryValue;;;MapValue of Argument[0];ReturnValue;value", - ".map;AbstractHashedMap;true;createEntrySetIterator;;;MapKey of Argument[-1];MapKey of Element of ReturnValue;value", - ".map;AbstractHashedMap;true;createEntrySetIterator;;;MapValue of Argument[-1];MapValue of Element of ReturnValue;value", - ".map;AbstractHashedMap;true;createKeySetIterator;;;MapKey of Argument[-1];Element of ReturnValue;value", - ".map;AbstractHashedMap;true;createValuesIterator;;;MapValue of Argument[-1];Element of ReturnValue;value", ".map;AbstractLinkedMap;true;AbstractLinkedMap;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value", ".map;AbstractLinkedMap;true;AbstractLinkedMap;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value", ".map;AbstractMapDecorator;true;AbstractMapDecorator;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value", From f69787afd0fa7fe7927e13a694e6fcf4a814bb70 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Mon, 20 Sep 2021 11:20:40 +0100 Subject: [PATCH 625/741] Miscellaneous model fixes --- .../java/frameworks/apache/Collections.qll | 51 ++++++++++--------- 1 file changed, 26 insertions(+), 25 deletions(-) diff --git a/java/ql/lib/semmle/code/java/frameworks/apache/Collections.qll b/java/ql/lib/semmle/code/java/frameworks/apache/Collections.qll index edba27a80f2..e0c3cc4f41c 100644 --- a/java/ql/lib/semmle/code/java/frameworks/apache/Collections.qll +++ b/java/ql/lib/semmle/code/java/frameworks/apache/Collections.qll @@ -258,8 +258,8 @@ private class ApacheBidiMapModel extends SummaryModelCsv { ".bidimap;DualHashBidiMap;true;DualHashBidiMap;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value", ".bidimap;DualLinkedHashBidiMap;true;DualLinkedHashBidiMap;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value", ".bidimap;DualLinkedHashBidiMap;true;DualLinkedHashBidiMap;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value", - ".bidimap;DualTreeBidiMap;true;DualTreeBidiMap;;;MapKey of Argument[0];MapKey of Argument[-1];value", - ".bidimap;DualTreeBidiMap;true;DualTreeBidiMap;;;MapValue of Argument[0];MapValue of Argument[-1];value", + ".bidimap;DualTreeBidiMap;true;DualTreeBidiMap;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value", + ".bidimap;DualTreeBidiMap;true;DualTreeBidiMap;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value", ".bidimap;DualTreeBidiMap;true;inverseOrderedBidiMap;;;MapKey of Argument[-1];MapValue of ReturnValue;value", ".bidimap;DualTreeBidiMap;true;inverseOrderedBidiMap;;;MapValue of Argument[-1];MapKey of ReturnValue;value", ".bidimap;DualTreeBidiMap;true;inverseSortedBidiMap;;;MapKey of Argument[-1];MapValue of ReturnValue;value", @@ -297,11 +297,11 @@ private class ApacheCollectionModel extends SummaryModelCsv { ".collection;CompositeCollection;true;CompositeCollection;(Collection);;Element of Argument[0];Element of Argument[-1];value", ".collection;CompositeCollection;true;CompositeCollection;(Collection,Collection);;Element of Argument[0];Element of Argument[-1];value", ".collection;CompositeCollection;true;CompositeCollection;(Collection,Collection);;Element of Argument[1];Element of Argument[-1];value", - ".collection;CompositeCollection;true;CompositeCollection;(Collection[]);;Element of Element of Argument[0];Element of Argument[-1];value", + ".collection;CompositeCollection;true;CompositeCollection;(Collection[]);;Element of ArrayElement of Argument[0];Element of Argument[-1];value", ".collection;CompositeCollection;true;addComposited;(Collection);;Element of Argument[0];Element of Argument[-1];value", ".collection;CompositeCollection;true;addComposited;(Collection,Collection);;Element of Argument[0];Element of Argument[-1];value", ".collection;CompositeCollection;true;addComposited;(Collection,Collection);;Element of Argument[1];Element of Argument[-1];value", - ".collection;CompositeCollection;true;addComposited;(Collection[]);;Element of Element of Argument[0];Element of Argument[-1];value", + ".collection;CompositeCollection;true;addComposited;(Collection[]);;Element of ArrayElement of Argument[0];Element of Argument[-1];value", ".collection;CompositeCollection;true;toCollection;;;Element of Argument[-1];Element of ReturnValue;value", ".collection;CompositeCollection;true;getCollections;;;Element of Argument[-1];Element of Element of ReturnValue;value", ".collection;IndexedCollection;true;IndexedCollection;;;Element of Argument[0];Element of Argument[-1];value", @@ -359,7 +359,7 @@ private class ApacheIteratorsModel extends SummaryModelCsv { ".iterators;BoundedIterator;true;BoundedIterator;;;Element of Argument[0];Element of Argument[-1];value", ".iterators;CollatingIterator;true;CollatingIterator;(Comparator,Iterator,Iterator);;Element of Argument[1];Element of Argument[-1];value", ".iterators;CollatingIterator;true;CollatingIterator;(Comparator,Iterator,Iterator);;Element of Argument[2];Element of Argument[-1];value", - ".iterators;CollatingIterator;true;CollatingIterator;(Comparator,Iterator[]);;Element of Element of Argument[1];Element of Argument[-1];value", + ".iterators;CollatingIterator;true;CollatingIterator;(Comparator,Iterator[]);;Element of ArrayElement of Argument[1];Element of Argument[-1];value", ".iterators;CollatingIterator;true;CollatingIterator;(Comparator,Collection);;Element of Element of Argument[1];Element of Argument[-1];value", ".iterators;CollatingIterator;true;addIterator;;;Element of Argument[0];Element of Argument[-1];value", ".iterators;CollatingIterator;true;setIterator;;;Element of Argument[1];Element of Argument[-1];value", @@ -390,7 +390,6 @@ private class ApacheIteratorsModel extends SummaryModelCsv { ".iterators;ObjectArrayIterator;true;ObjectArrayIterator;;;ArrayElement of Argument[0];Element of Argument[-1];value", ".iterators;ObjectArrayIterator;true;getArray;;;Element of Argument[-1];ArrayElement of ReturnValue;value", ".iterators;ObjectArrayListIterator;true;ObjectArrayListIterator;;;ArrayElement of Argument[0];Element of Argument[-1];value", - ".iterators;ObjectGraphIterator;true;ObjectGraphIterator;(Iterator);;Element of Element of Argument[0];Element of Argument[-1];value", ".iterators;PeekingIterator;true;PeekingIterator;;;Element of Argument[0];Element of Argument[-1];value", ".iterators;PeekingIterator;true;peekingIterator;;;Element of Argument[0];Element of ReturnValue;value", ".iterators;PeekingIterator;true;peek;;;Element of Argument[-1];ReturnValue;value", @@ -486,19 +485,19 @@ private class ApacheMapModel extends SummaryModelCsv { ".map;CompositeMap;true;CompositeMap;(Map,Map,MapMutator);;MapValue of Argument[0];MapValue of Argument[-1];value", ".map;CompositeMap;true;CompositeMap;(Map,Map,MapMutator);;MapKey of Argument[1];MapKey of Argument[-1];value", ".map;CompositeMap;true;CompositeMap;(Map,Map,MapMutator);;MapValue of Argument[1];MapValue of Argument[-1];value", - ".map;CompositeMap;true;CompositeMap;(Map[]);;MapKey of Element of Argument[0];MapKey of Argument[-1];value", - ".map;CompositeMap;true;CompositeMap;(Map[]);;MapValue of Element of Argument[0];MapValue of Argument[-1];value", - ".map;CompositeMap;true;CompositeMap;(Map[],MapMutator);;MapKey of Element of Argument[0];MapKey of Argument[-1];value", - ".map;CompositeMap;true;CompositeMap;(Map[],MapMutator);;MapValue of Element of Argument[0];MapValue of Argument[-1];value", + ".map;CompositeMap;true;CompositeMap;(Map[]);;MapKey of ArrayElement of Argument[0];MapKey of Argument[-1];value", + ".map;CompositeMap;true;CompositeMap;(Map[]);;MapValue of ArrayElement of Argument[0];MapValue of Argument[-1];value", + ".map;CompositeMap;true;CompositeMap;(Map[],MapMutator);;MapKey of ArrayElement of Argument[0];MapKey of Argument[-1];value", + ".map;CompositeMap;true;CompositeMap;(Map[],MapMutator);;MapValue of ArrayElement of Argument[0];MapValue of Argument[-1];value", ".map;CompositeMap;true;addComposited;;;MapKey of Argument[0];MapKey of Argument[-1];value", ".map;CompositeMap;true;addComposited;;;MapValue of Argument[0];MapValue of Argument[-1];value", ".map;CompositeMap;true;removeComposited;;;MapKey of Argument[-1];MapKey of ReturnValue;value", ".map;CompositeMap;true;removeComposited;;;MapValue of Argument[-1];MapValue of ReturnValue;value", ".map;CompositeMap;true;removeComposited;;;Argument[0];ReturnValue;value", ".map;DefaultedMap;true;DefaultedMap;(Object);;Argument[0];MapValue of Argument[-1];value", - ".map;DefaultedMap;true;defaultedMap;;;MapKey of Argument[0];MapKey of Argument[-1];value", - ".map;DefaultedMap;true;defaultedMap;;;MapValue of Argument[0];MapValue of Argument[-1];value", - ".map;DefaultedMap;true;defaultedMap;(Map,Object);;Argument[1];MapValue of Argument[-1];value", + ".map;DefaultedMap;true;defaultedMap;;;MapKey of Argument[0];MapKey of ReturnValue;value", + ".map;DefaultedMap;true;defaultedMap;;;MapValue of Argument[0];MapValue of ReturnValue;value", + ".map;DefaultedMap;true;defaultedMap;(Map,Object);;Argument[1];MapValue of ReturnValue;value", ".map;EntrySetToMapIteratorAdapter;true;EntrySetToMapIteratorAdapter;;;MapKey of Element of Argument[0];Element of Argument[-1];value", ".map;EntrySetToMapIteratorAdapter;true;EntrySetToMapIteratorAdapter;;;MapValue of Element of Argument[0];MapValue of Argument[-1];value", ".map;FixedSizeMap;true;fixedSizeMap;;;MapKey of Argument[0];MapKey of ReturnValue;value", @@ -515,9 +514,9 @@ private class ApacheMapModel extends SummaryModelCsv { ".map;LazySortedMap;true;lazySortedMap;;;MapValue of Argument[0];MapValue of ReturnValue;value", ".map;LinkedMap;true;LinkedMap;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value", ".map;LinkedMap;true;LinkedMap;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value", - ".map;LinkedMap;true;get;(int);;MapKey of Argument[0];ReturnValue;value", - ".map;LinkedMap;true;getValue;(int);;MapValue of Argument[0];ReturnValue;value", - ".map;LinkedMap;true;remove;(int);;MapValue of Argument[0];ReturnValue;value", + ".map;LinkedMap;true;get;(int);;MapKey of Argument[-1];ReturnValue;value", + ".map;LinkedMap;true;getValue;(int);;MapValue of Argument[-1];ReturnValue;value", + ".map;LinkedMap;true;remove;(int);;MapValue of Argument[-1];ReturnValue;value", ".map;LinkedMap;true;asList;;;MapKey of Argument[-1];Element of ReturnValue;value", ".map;ListOrderedMap;true;listOrderedMap;;;MapKey of Argument[0];MapKey of ReturnValue;value", ".map;ListOrderedMap;true;listOrderedMap;;;MapValue of Argument[0];MapValue of ReturnValue;value", @@ -525,20 +524,18 @@ private class ApacheMapModel extends SummaryModelCsv { ".map;ListOrderedMap;true;putAll;;;MapValue of Argument[1];MapValue of Argument[-1];value", ".map;ListOrderedMap;true;keyList;;;MapKey of Argument[-1];Element of ReturnValue;value", ".map;ListOrderedMap;true;valueList;;;MapValue of Argument[-1];Element of ReturnValue;value", - ".map;ListOrderedMap;true;get;(int);;MapKey of Argument[0];ReturnValue;value", - ".map;ListOrderedMap;true;getValue;(int);;MapValue of Argument[0];ReturnValue;value", + ".map;ListOrderedMap;true;get;(int);;MapKey of Argument[-1];ReturnValue;value", + ".map;ListOrderedMap;true;getValue;(int);;MapValue of Argument[-1];ReturnValue;value", ".map;ListOrderedMap;true;setValue;;;Argument[1];MapValue of Argument[-1];value", ".map;ListOrderedMap;true;put;;;Argument[1];MapKey of Argument[-1];value", ".map;ListOrderedMap;true;put;;;Argument[2];MapValue of Argument[-1];value", - ".map;ListOrderedMap;true;remove;(int);;MapValue of Argument[0];ReturnValue;value", + ".map;ListOrderedMap;true;remove;(int);;MapValue of Argument[-1];ReturnValue;value", ".map;ListOrderedMap;true;asList;;;MapKey of Argument[-1];Element of ReturnValue;value", ".map;LRUMap;true;LRUMap;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value", ".map;LRUMap;true;LRUMap;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value", ".map;LRUMap;true;LRUMap;(Map,boolean);;MapKey of Argument[0];MapKey of Argument[-1];value", ".map;LRUMap;true;LRUMap;(Map,boolean);;MapValue of Argument[0];MapValue of Argument[-1];value", ".map;LRUMap;true;get;(Object,boolean);;MapValue of Argument[0];ReturnValue;value", - ".map;MultiKeyMap;true;multiKeyMap;;;MapKey of Argument[0];MapKey of ReturnValue;value", - ".map;MultiKeyMap;true;multiKeyMap;;;MapValue of Argument[0];MapValue of ReturnValue;value", ".map;MultiKeyMap;true;get;;;MapValue of Argument[-1];ReturnValue;value", ".map;MultiKeyMap;true;put;;;MapValue of Argument[-1];ReturnValue;value", ".map;MultiKeyMap;true;put;(Object,Object,Object);;Argument[0..1];Element of MapKey of Argument[-1];value", @@ -553,6 +550,9 @@ private class ApacheMapModel extends SummaryModelCsv { ".map;MultiValueMap;true;multiValueMap;;;MapKey of Argument[0];MapKey of ReturnValue;value", ".map;MultiValueMap;true;multiValueMap;;;Element of MapValue of Argument[0];Element of MapValue of ReturnValue;value", ".map;MultiValueMap;true;getCollection;;;Element of MapValue of Argument[-1];Element of ReturnValue;value", + ".map;MultiValueMap;true;putAll;(Map);;MapValue of Argument[0];Element of MapValue of Argument[-1];value", + ".map;MultiValueMap;true;putAll;(Map);;Element of MapValue of Argument[0];Element of MapValue of Argument[-1];value", + ".map;MultiValueMap;true;values;;;Element of MapValue of Argument[-1];Element of ReturnValue;value", ".map;MultiValueMap;true;putAll;(Object,Collection);;Argument[0];MapKey of Argument[-1];value", ".map;MultiValueMap;true;putAll;(Object,Collection);;Element of Argument[1];Element of MapValue of Argument[-1];value", ".map;MultiValueMap;true;iterator;(Object);;Element of MapValue of Argument[-1];Element of ReturnValue;value", @@ -614,8 +614,8 @@ private class ApacheMultiMapModel extends SummaryModelCsv { ".multimap;HashSetValuedHashMap;true;HashSetValuedHashMap;(Map);;MapValue of Argument[0];Element of MapValue of Argument[-1];value", ".multimap;TransformedMultiValuedMap;true;transformingMap;;;MapKey of Argument[0];MapKey of ReturnValue;value", ".multimap;TransformedMultiValuedMap;true;transformingMap;;;Element of MapValue of Argument[0];Element of MapValue of ReturnValue;value", - ".multimap;UnmodifiableMultiValuedMap;true;unmodifiableMultiValuedMap;(MultiValuedMap);;MapKey of Argument[0];MapKey of Argument[-1];value", - ".multimap;UnmodifiableMultiValuedMap;true;unmodifiableMultiValuedMap;(MultiValuedMap);;Element of MapValue of Argument[0];Element of MapValue of Argument[-1];value" + ".multimap;UnmodifiableMultiValuedMap;true;unmodifiableMultiValuedMap;(MultiValuedMap);;MapKey of Argument[0];MapKey of ReturnValue;value", + ".multimap;UnmodifiableMultiValuedMap;true;unmodifiableMultiValuedMap;(MultiValuedMap);;Element of MapValue of Argument[0];Element of MapValue of ReturnValue;value" ] } } @@ -693,8 +693,9 @@ private class ApacheSetModel extends SummaryModelCsv { ".set;CompositeSet$SetMutator;true;addAll;;;Element of Argument[2];Element of Element of Argument[1];value", ".set;CompositeSet;true;CompositeSet;(Set);;Element of Argument[0];Element of Argument[-1];value", ".set;CompositeSet;true;CompositeSet;(Set[]);;Element of ArrayElement of Argument[0];Element of Argument[-1];value", - ".set;CompositeSet;true;addComposited;;;Element of Argument[0];Element of Argument[-1];value", - ".set;CompositeSet;true;addComposited;;;Element of Argument[1];Element of Argument[-1];value", + ".set;CompositeSet;true;addComposited;(Set);;Element of Argument[0];Element of Argument[-1];value", + ".set;CompositeSet;true;addComposited;(Set,Set);;Element of Argument[0];Element of Argument[-1];value", + ".set;CompositeSet;true;addComposited;(Set,Set);;Element of Argument[1];Element of Argument[-1];value", ".set;CompositeSet;true;addComposited;(Set[]);;Element of ArrayElement of Argument[0];Element of Argument[-1];value", ".set;CompositeSet;true;toSet;;;Element of Argument[-1];Element of ReturnValue;value", ".set;CompositeSet;true;getSets;;;Element of Argument[-1];Element of Element of ReturnValue;value", From a20acfee2596c0b5a6887023ad5b5e0ec49dc49f Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Sat, 18 Sep 2021 07:34:28 +0100 Subject: [PATCH 626/741] Add automatically generated tests Also update test.ql to use the new InlineFlowTest. --- .../apache-collections/TestNew.java | 3132 +++++++++++++++++ .../frameworks/apache-collections/test.ql | 11 +- 2 files changed, 3140 insertions(+), 3 deletions(-) create mode 100644 java/ql/test/library-tests/frameworks/apache-collections/TestNew.java diff --git a/java/ql/test/library-tests/frameworks/apache-collections/TestNew.java b/java/ql/test/library-tests/frameworks/apache-collections/TestNew.java new file mode 100644 index 00000000000..6ee7643a1a3 --- /dev/null +++ b/java/ql/test/library-tests/frameworks/apache-collections/TestNew.java @@ -0,0 +1,3132 @@ +package generatedtest; + +import java.io.File; +import java.io.InputStream; +import java.io.Reader; +import java.net.URI; +import java.net.URL; +import java.nio.file.Path; +import java.util.Collection; +import java.util.Comparator; +import java.util.Enumeration; +import java.util.Iterator; +import java.util.List; +import java.util.ListIterator; +import java.util.Map; +import java.util.NavigableSet; +import java.util.Properties; +import java.util.Queue; +import java.util.Set; +import java.util.SortedMap; +import java.util.SortedSet; +import org.apache.commons.collections4.Bag; +import org.apache.commons.collections4.BidiMap; +import org.apache.commons.collections4.BoundedCollection; +import org.apache.commons.collections4.Factory; +import org.apache.commons.collections4.KeyValue; +import org.apache.commons.collections4.MapIterator; +import org.apache.commons.collections4.MultiSet; +import org.apache.commons.collections4.MultiValuedMap; +import org.apache.commons.collections4.OrderedBidiMap; +import org.apache.commons.collections4.OrderedMap; +import org.apache.commons.collections4.OrderedMapIterator; +import org.apache.commons.collections4.SortedBag; +import org.apache.commons.collections4.SortedBidiMap; +import org.apache.commons.collections4.Transformer; +import org.apache.commons.collections4.Trie; +import org.apache.commons.collections4.bag.CollectionBag; +import org.apache.commons.collections4.bag.CollectionSortedBag; +import org.apache.commons.collections4.bag.HashBag; +import org.apache.commons.collections4.bag.PredicatedBag; +import org.apache.commons.collections4.bag.PredicatedSortedBag; +import org.apache.commons.collections4.bag.SynchronizedBag; +import org.apache.commons.collections4.bag.SynchronizedSortedBag; +import org.apache.commons.collections4.bag.TransformedBag; +import org.apache.commons.collections4.bag.TransformedSortedBag; +import org.apache.commons.collections4.bag.TreeBag; +import org.apache.commons.collections4.bag.UnmodifiableBag; +import org.apache.commons.collections4.bag.UnmodifiableSortedBag; +import org.apache.commons.collections4.bidimap.AbstractSortedBidiMapDecorator; +import org.apache.commons.collections4.bidimap.DualHashBidiMap; +import org.apache.commons.collections4.bidimap.DualLinkedHashBidiMap; +import org.apache.commons.collections4.bidimap.DualTreeBidiMap; +import org.apache.commons.collections4.bidimap.TreeBidiMap; +import org.apache.commons.collections4.bidimap.UnmodifiableBidiMap; +import org.apache.commons.collections4.bidimap.UnmodifiableOrderedBidiMap; +import org.apache.commons.collections4.bidimap.UnmodifiableSortedBidiMap; +import org.apache.commons.collections4.collection.CompositeCollection; +import org.apache.commons.collections4.collection.IndexedCollection; +import org.apache.commons.collections4.collection.PredicatedCollection; +import org.apache.commons.collections4.collection.SynchronizedCollection; +import org.apache.commons.collections4.collection.TransformedCollection; +import org.apache.commons.collections4.collection.UnmodifiableBoundedCollection; +import org.apache.commons.collections4.collection.UnmodifiableCollection; +import org.apache.commons.collections4.iterators.AbstractListIteratorDecorator; +import org.apache.commons.collections4.iterators.AbstractMapIteratorDecorator; +import org.apache.commons.collections4.iterators.AbstractOrderedMapIteratorDecorator; +import org.apache.commons.collections4.iterators.ArrayIterator; +import org.apache.commons.collections4.iterators.ArrayListIterator; +import org.apache.commons.collections4.iterators.BoundedIterator; +import org.apache.commons.collections4.iterators.CollatingIterator; +import org.apache.commons.collections4.iterators.EnumerationIterator; +import org.apache.commons.collections4.iterators.FilterIterator; +import org.apache.commons.collections4.iterators.FilterListIterator; +import org.apache.commons.collections4.iterators.IteratorChain; +import org.apache.commons.collections4.iterators.IteratorEnumeration; +import org.apache.commons.collections4.iterators.IteratorIterable; +import org.apache.commons.collections4.iterators.ListIteratorWrapper; +import org.apache.commons.collections4.iterators.LoopingIterator; +import org.apache.commons.collections4.iterators.LoopingListIterator; +import org.apache.commons.collections4.iterators.ObjectArrayIterator; +import org.apache.commons.collections4.iterators.ObjectArrayListIterator; +import org.apache.commons.collections4.iterators.PeekingIterator; +import org.apache.commons.collections4.iterators.PermutationIterator; +import org.apache.commons.collections4.iterators.PushbackIterator; +import org.apache.commons.collections4.iterators.ReverseListIterator; +import org.apache.commons.collections4.iterators.SingletonIterator; +import org.apache.commons.collections4.iterators.SingletonListIterator; +import org.apache.commons.collections4.iterators.SkippingIterator; +import org.apache.commons.collections4.iterators.UniqueFilterIterator; +import org.apache.commons.collections4.iterators.UnmodifiableIterator; +import org.apache.commons.collections4.iterators.UnmodifiableListIterator; +import org.apache.commons.collections4.iterators.UnmodifiableMapIterator; +import org.apache.commons.collections4.iterators.UnmodifiableOrderedMapIterator; +import org.apache.commons.collections4.iterators.ZippingIterator; +import org.apache.commons.collections4.keyvalue.K; +import org.apache.commons.collections4.keyvalue.MultiKey; +import org.apache.commons.collections4.list.AbstractLinkedList; +import org.apache.commons.collections4.list.CursorableLinkedList; +import org.apache.commons.collections4.list.FixedSizeList; +import org.apache.commons.collections4.list.GrowthList; +import org.apache.commons.collections4.list.LazyList; +import org.apache.commons.collections4.list.NodeCachingLinkedList; +import org.apache.commons.collections4.list.PredicatedList; +import org.apache.commons.collections4.list.SetUniqueList; +import org.apache.commons.collections4.list.TransformedList; +import org.apache.commons.collections4.list.TreeList; +import org.apache.commons.collections4.list.UnmodifiableList; +import org.apache.commons.collections4.map.AbstractOrderedMapDecorator; +import org.apache.commons.collections4.map.AbstractSortedMapDecorator; +import org.apache.commons.collections4.map.CaseInsensitiveMap; +import org.apache.commons.collections4.map.CompositeMap; +import org.apache.commons.collections4.map.DefaultedMap; +import org.apache.commons.collections4.map.EntrySetToMapIteratorAdapter; +import org.apache.commons.collections4.map.FixedSizeMap; +import org.apache.commons.collections4.map.FixedSizeSortedMap; +import org.apache.commons.collections4.map.Flat3Map; +import org.apache.commons.collections4.map.HashedMap; +import org.apache.commons.collections4.map.LRUMap; +import org.apache.commons.collections4.map.LazyMap; +import org.apache.commons.collections4.map.LazySortedMap; +import org.apache.commons.collections4.map.LinkedMap; +import org.apache.commons.collections4.map.ListOrderedMap; +import org.apache.commons.collections4.map.MultiKeyMap; +import org.apache.commons.collections4.map.MultiValueMap; +import org.apache.commons.collections4.map.PassiveExpiringMap; +import org.apache.commons.collections4.map.PredicatedMap; +import org.apache.commons.collections4.map.PredicatedSortedMap; +import org.apache.commons.collections4.map.SingletonMap; +import org.apache.commons.collections4.map.TransformedMap; +import org.apache.commons.collections4.map.TransformedSortedMap; +import org.apache.commons.collections4.map.UnmodifiableEntrySet; +import org.apache.commons.collections4.map.UnmodifiableMap; +import org.apache.commons.collections4.map.UnmodifiableOrderedMap; +import org.apache.commons.collections4.map.UnmodifiableSortedMap; +import org.apache.commons.collections4.multimap.ArrayListValuedHashMap; +import org.apache.commons.collections4.multimap.HashSetValuedHashMap; +import org.apache.commons.collections4.multimap.TransformedMultiValuedMap; +import org.apache.commons.collections4.multimap.UnmodifiableMultiValuedMap; +import org.apache.commons.collections4.multiset.HashMultiSet; +import org.apache.commons.collections4.multiset.PredicatedMultiSet; +import org.apache.commons.collections4.multiset.SynchronizedMultiSet; +import org.apache.commons.collections4.multiset.UnmodifiableMultiSet; +import org.apache.commons.collections4.properties.AbstractPropertiesFactory; +import org.apache.commons.collections4.queue.CircularFifoQueue; +import org.apache.commons.collections4.queue.PredicatedQueue; +import org.apache.commons.collections4.queue.SynchronizedQueue; +import org.apache.commons.collections4.queue.TransformedQueue; +import org.apache.commons.collections4.queue.UnmodifiableQueue; +import org.apache.commons.collections4.set.CompositeSet; +import org.apache.commons.collections4.set.ListOrderedSet; +import org.apache.commons.collections4.set.MapBackedSet; +import org.apache.commons.collections4.set.PredicatedNavigableSet; +import org.apache.commons.collections4.set.PredicatedSet; +import org.apache.commons.collections4.set.PredicatedSortedSet; +import org.apache.commons.collections4.set.TransformedNavigableSet; +import org.apache.commons.collections4.set.TransformedSet; +import org.apache.commons.collections4.set.TransformedSortedSet; +import org.apache.commons.collections4.set.UnmodifiableNavigableSet; +import org.apache.commons.collections4.set.UnmodifiableSet; +import org.apache.commons.collections4.set.UnmodifiableSortedSet; +import org.apache.commons.collections4.splitmap.AbstractIterableGetMapDecorator; +import org.apache.commons.collections4.splitmap.TransformedSplitMap; +import org.apache.commons.collections4.trie.PatriciaTrie; +import org.apache.commons.collections4.trie.UnmodifiableTrie; + +// Test case generated by GenerateFlowTestCase.ql +public class TestNew { + + K getMapKey(Map map) { return map.keySet().iterator().next(); } + T getArrayElement(T[] array) { return array[0]; } + T getElement(Iterable it) { return it.iterator().next(); } + T getElement(Iterator it) { return it.next(); } + V getMapValue(Map map) { return map.get(null); } + Object getArrayElement(Object container) { return null; } + Object getElement(Object container) { return null; } + Object getMapKey(Object container) { return null; } + Object getMapValue(Object container) { return null; } + Object newWithArrayElement(Object element) { return null; } + Object newWithElement(Object element) { return null; } + Object newWithMapKey(Object element) { return null; } + Object newWithMapValue(Object element) { return null; } + Object source() { return null; } + void sink(Object o) { } + + public void test() throws Exception { + + { + // "org.apache.commons.collections4.bag;CollectionBag;true;CollectionBag;;;Element of Argument[0];Element of Argument[-1];value" + CollectionBag out = null; + Bag in = (Bag)newWithElement(source()); + out = new CollectionBag(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.bag;CollectionBag;true;collectionBag;;;Element of Argument[0];Element of ReturnValue;value" + Bag out = null; + Bag in = (Bag)newWithElement(source()); + out = CollectionBag.collectionBag(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.bag;CollectionSortedBag;true;CollectionSortedBag;;;Element of Argument[0];Element of Argument[-1];value" + CollectionSortedBag out = null; + SortedBag in = (SortedBag)newWithElement(source()); + out = new CollectionSortedBag(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.bag;CollectionSortedBag;true;collectionSortedBag;;;Element of Argument[0];Element of ReturnValue;value" + SortedBag out = null; + SortedBag in = (SortedBag)newWithElement(source()); + out = CollectionSortedBag.collectionSortedBag(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.bag;HashBag;true;HashBag;;;Element of Argument[0];Element of Argument[-1];value" + HashBag out = null; + Collection in = (Collection)newWithElement(source()); + out = new HashBag(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.bag;PredicatedBag;true;predicatedBag;;;Element of Argument[0];Element of ReturnValue;value" + PredicatedBag out = null; + Bag in = (Bag)newWithElement(source()); + out = PredicatedBag.predicatedBag(in, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.bag;PredicatedSortedBag;true;predicatedSortedBag;;;Element of Argument[0];Element of ReturnValue;value" + PredicatedSortedBag out = null; + SortedBag in = (SortedBag)newWithElement(source()); + out = PredicatedSortedBag.predicatedSortedBag(in, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.bag;SynchronizedBag;true;synchronizedBag;;;Element of Argument[0];Element of ReturnValue;value" + SynchronizedBag out = null; + Bag in = (Bag)newWithElement(source()); + out = SynchronizedBag.synchronizedBag(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.bag;SynchronizedSortedBag;true;synchronizedSortedBag;;;Element of Argument[0];Element of ReturnValue;value" + SynchronizedSortedBag out = null; + SortedBag in = (SortedBag)newWithElement(source()); + out = SynchronizedSortedBag.synchronizedSortedBag(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.bag;TransformedBag;true;transformedBag;;;Element of Argument[0];Element of ReturnValue;value" + Bag out = null; + Bag in = (Bag)newWithElement(source()); + out = TransformedBag.transformedBag(in, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.bag;TransformedSortedBag;true;transformedSortedBag;;;Element of Argument[0];Element of ReturnValue;value" + TransformedSortedBag out = null; + SortedBag in = (SortedBag)newWithElement(source()); + out = TransformedSortedBag.transformedSortedBag(in, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.bag;TreeBag;true;TreeBag;(Collection);;Element of Argument[0];Element of Argument[-1];value" + TreeBag out = null; + Collection in = (Collection)newWithElement(source()); + out = new TreeBag(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.bag;UnmodifiableBag;true;unmodifiableBag;;;Element of Argument[0];Element of ReturnValue;value" + Bag out = null; + Bag in = (Bag)newWithElement(source()); + out = UnmodifiableBag.unmodifiableBag(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.bag;UnmodifiableSortedBag;true;unmodifiableSortedBag;;;Element of Argument[0];Element of ReturnValue;value" + SortedBag out = null; + SortedBag in = (SortedBag)newWithElement(source()); + out = UnmodifiableSortedBag.unmodifiableSortedBag(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.bidimap;AbstractSortedBidiMapDecorator;true;AbstractSortedBidiMapDecorator;;;MapKey of Argument[0];MapKey of Argument[-1];value" + AbstractSortedBidiMapDecorator out = null; + SortedBidiMap in = (SortedBidiMap)newWithMapKey(source()); + out = new AbstractSortedBidiMapDecorator(in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.bidimap;AbstractSortedBidiMapDecorator;true;AbstractSortedBidiMapDecorator;;;MapValue of Argument[0];MapValue of Argument[-1];value" + AbstractSortedBidiMapDecorator out = null; + SortedBidiMap in = (SortedBidiMap)newWithMapValue(source()); + out = new AbstractSortedBidiMapDecorator(in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.bidimap;DualHashBidiMap;true;DualHashBidiMap;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value" + DualHashBidiMap out = null; + Map in = (Map)Map.of(source(), null); + out = new DualHashBidiMap(in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.bidimap;DualHashBidiMap;true;DualHashBidiMap;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value" + DualHashBidiMap out = null; + Map in = (Map)Map.of(null, source()); + out = new DualHashBidiMap(in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.bidimap;DualLinkedHashBidiMap;true;DualLinkedHashBidiMap;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value" + DualLinkedHashBidiMap out = null; + Map in = (Map)Map.of(source(), null); + out = new DualLinkedHashBidiMap(in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.bidimap;DualLinkedHashBidiMap;true;DualLinkedHashBidiMap;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value" + DualLinkedHashBidiMap out = null; + Map in = (Map)Map.of(null, source()); + out = new DualLinkedHashBidiMap(in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.bidimap;DualTreeBidiMap;true;DualTreeBidiMap;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value" + DualTreeBidiMap out = null; + Map in = (Map)Map.of(source(), null); + out = new DualTreeBidiMap(in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.bidimap;DualTreeBidiMap;true;DualTreeBidiMap;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value" + DualTreeBidiMap out = null; + Map in = (Map)Map.of(null, source()); + out = new DualTreeBidiMap(in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.bidimap;DualTreeBidiMap;true;inverseOrderedBidiMap;;;MapKey of Argument[-1];MapValue of ReturnValue;value" + OrderedBidiMap out = null; + DualTreeBidiMap in = (DualTreeBidiMap)newWithMapKey(source()); + out = in.inverseOrderedBidiMap(); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.bidimap;DualTreeBidiMap;true;inverseOrderedBidiMap;;;MapValue of Argument[-1];MapKey of ReturnValue;value" + OrderedBidiMap out = null; + DualTreeBidiMap in = (DualTreeBidiMap)newWithMapValue(source()); + out = in.inverseOrderedBidiMap(); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.bidimap;DualTreeBidiMap;true;inverseSortedBidiMap;;;MapKey of Argument[-1];MapValue of ReturnValue;value" + SortedBidiMap out = null; + DualTreeBidiMap in = (DualTreeBidiMap)newWithMapKey(source()); + out = in.inverseSortedBidiMap(); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.bidimap;DualTreeBidiMap;true;inverseSortedBidiMap;;;MapValue of Argument[-1];MapKey of ReturnValue;value" + SortedBidiMap out = null; + DualTreeBidiMap in = (DualTreeBidiMap)newWithMapValue(source()); + out = in.inverseSortedBidiMap(); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.bidimap;TreeBidiMap;true;TreeBidiMap;;;MapKey of Argument[0];MapKey of Argument[-1];value" + TreeBidiMap out = null; + Map in = (Map)Map.of(source(), null); + out = new TreeBidiMap(in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.bidimap;TreeBidiMap;true;TreeBidiMap;;;MapValue of Argument[0];MapValue of Argument[-1];value" + TreeBidiMap out = null; + Map in = (Map)Map.of(null, source()); + out = new TreeBidiMap(in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.bidimap;UnmodifiableBidiMap;true;unmodifiableBidiMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" + BidiMap out = null; + BidiMap in = (BidiMap)newWithMapKey(source()); + out = UnmodifiableBidiMap.unmodifiableBidiMap(in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.bidimap;UnmodifiableBidiMap;true;unmodifiableBidiMap;;;MapValue of Argument[0];MapValue of ReturnValue;value" + BidiMap out = null; + BidiMap in = (BidiMap)newWithMapValue(source()); + out = UnmodifiableBidiMap.unmodifiableBidiMap(in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.bidimap;UnmodifiableOrderedBidiMap;true;inverseOrderedBidiMap;;;MapKey of Argument[-1];MapValue of ReturnValue;value" + OrderedBidiMap out = null; + UnmodifiableOrderedBidiMap in = (UnmodifiableOrderedBidiMap)newWithMapKey(source()); + out = in.inverseOrderedBidiMap(); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.bidimap;UnmodifiableOrderedBidiMap;true;inverseOrderedBidiMap;;;MapValue of Argument[-1];MapKey of ReturnValue;value" + OrderedBidiMap out = null; + UnmodifiableOrderedBidiMap in = (UnmodifiableOrderedBidiMap)newWithMapValue(source()); + out = in.inverseOrderedBidiMap(); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.bidimap;UnmodifiableOrderedBidiMap;true;unmodifiableOrderedBidiMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" + OrderedBidiMap out = null; + OrderedBidiMap in = (OrderedBidiMap)newWithMapKey(source()); + out = UnmodifiableOrderedBidiMap.unmodifiableOrderedBidiMap(in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.bidimap;UnmodifiableOrderedBidiMap;true;unmodifiableOrderedBidiMap;;;MapValue of Argument[0];MapValue of ReturnValue;value" + OrderedBidiMap out = null; + OrderedBidiMap in = (OrderedBidiMap)newWithMapValue(source()); + out = UnmodifiableOrderedBidiMap.unmodifiableOrderedBidiMap(in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.bidimap;UnmodifiableSortedBidiMap;true;unmodifiableSortedBidiMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" + SortedBidiMap out = null; + SortedBidiMap in = (SortedBidiMap)newWithMapKey(source()); + out = UnmodifiableSortedBidiMap.unmodifiableSortedBidiMap(in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.bidimap;UnmodifiableSortedBidiMap;true;unmodifiableSortedBidiMap;;;MapValue of Argument[0];MapValue of ReturnValue;value" + SortedBidiMap out = null; + SortedBidiMap in = (SortedBidiMap)newWithMapValue(source()); + out = UnmodifiableSortedBidiMap.unmodifiableSortedBidiMap(in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.collection;CompositeCollection$CollectionMutator;true;add;;;Argument[2];Element of Argument[0];value" + CompositeCollection out = null; + Object in = (Object)source(); + CompositeCollection.CollectionMutator instance = null; + instance.add(out, null, in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.collection;CompositeCollection$CollectionMutator;true;add;;;Argument[2];Element of Element of Argument[1];value" + List out = null; + Object in = (Object)source(); + CompositeCollection.CollectionMutator instance = null; + instance.add(null, out, in); + sink(getElement(getElement(out))); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.collection;CompositeCollection$CollectionMutator;true;addAll;;;Element of Argument[2];Element of Argument[0];value" + CompositeCollection out = null; + Collection in = (Collection)newWithElement(source()); + CompositeCollection.CollectionMutator instance = null; + instance.addAll(out, null, in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.collection;CompositeCollection$CollectionMutator;true;addAll;;;Element of Argument[2];Element of Element of Argument[1];value" + List out = null; + Collection in = (Collection)newWithElement(source()); + CompositeCollection.CollectionMutator instance = null; + instance.addAll(null, out, in); + sink(getElement(getElement(out))); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.collection;CompositeCollection;true;CompositeCollection;(Collection);;Element of Argument[0];Element of Argument[-1];value" + CompositeCollection out = null; + Collection in = (Collection)newWithElement(source()); + out = new CompositeCollection(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.collection;CompositeCollection;true;CompositeCollection;(Collection,Collection);;Element of Argument[0];Element of Argument[-1];value" + CompositeCollection out = null; + Collection in = (Collection)newWithElement(source()); + out = new CompositeCollection(in, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.collection;CompositeCollection;true;CompositeCollection;(Collection,Collection);;Element of Argument[1];Element of Argument[-1];value" + CompositeCollection out = null; + Collection in = (Collection)newWithElement(source()); + out = new CompositeCollection(null, in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.collection;CompositeCollection;true;CompositeCollection;(Collection[]);;Element of ArrayElement of Argument[0];Element of Argument[-1];value" + CompositeCollection out = null; + Collection[] in = (Collection[])new Collection[]{(Collection)newWithElement(source())}; + out = new CompositeCollection(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.collection;CompositeCollection;true;addComposited;(Collection);;Element of Argument[0];Element of Argument[-1];value" + CompositeCollection out = null; + Collection in = (Collection)newWithElement(source()); + out.addComposited(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.collection;CompositeCollection;true;addComposited;(Collection,Collection);;Element of Argument[0];Element of Argument[-1];value" + CompositeCollection out = null; + Collection in = (Collection)newWithElement(source()); + out.addComposited(in, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.collection;CompositeCollection;true;addComposited;(Collection,Collection);;Element of Argument[1];Element of Argument[-1];value" + CompositeCollection out = null; + Collection in = (Collection)newWithElement(source()); + out.addComposited(null, in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.collection;CompositeCollection;true;addComposited;(Collection[]);;Element of ArrayElement of Argument[0];Element of Argument[-1];value" + CompositeCollection out = null; + Collection[] in = (Collection[])new Collection[]{(Collection)newWithElement(source())}; + out.addComposited(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.collection;CompositeCollection;true;getCollections;;;Element of Argument[-1];Element of Element of ReturnValue;value" + List out = null; + CompositeCollection in = (CompositeCollection)newWithElement(source()); + out = in.getCollections(); + sink(getElement(getElement(out))); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.collection;CompositeCollection;true;toCollection;;;Element of Argument[-1];Element of ReturnValue;value" + Collection out = null; + CompositeCollection in = (CompositeCollection)newWithElement(source()); + out = in.toCollection(); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.collection;IndexedCollection;true;IndexedCollection;;;Element of Argument[0];Element of Argument[-1];value" + IndexedCollection out = null; + Collection in = (Collection)newWithElement(source()); + out = new IndexedCollection(in, null, null, false); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.collection;IndexedCollection;true;get;;;Element of Argument[-1];ReturnValue;value" + Object out = null; + IndexedCollection in = (IndexedCollection)newWithElement(source()); + out = in.get(null); + sink(out); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.collection;IndexedCollection;true;nonUniqueIndexedCollection;;;Element of Argument[0];Element of ReturnValue;value" + IndexedCollection out = null; + Collection in = (Collection)newWithElement(source()); + out = IndexedCollection.nonUniqueIndexedCollection(in, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.collection;IndexedCollection;true;uniqueIndexedCollection;;;Element of Argument[0];Element of ReturnValue;value" + IndexedCollection out = null; + Collection in = (Collection)newWithElement(source()); + out = IndexedCollection.uniqueIndexedCollection(in, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.collection;IndexedCollection;true;values;;;Element of Argument[-1];Element of ReturnValue;value" + Collection out = null; + IndexedCollection in = (IndexedCollection)newWithElement(source()); + out = in.values(null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.collection;PredicatedCollection$Builder;true;add;;;Argument[0];Element of Argument[-1];value" + PredicatedCollection.Builder out = null; + Object in = (Object)source(); + out.add(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.collection;PredicatedCollection$Builder;true;addAll;;;Element of Argument[0];Element of Argument[-1];value" + PredicatedCollection.Builder out = null; + Collection in = (Collection)List.of(source()); + out.addAll(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.collection;PredicatedCollection$Builder;true;createPredicatedBag;;;Element of Argument[-1];Element of ReturnValue;value" + Bag out = null; + PredicatedCollection.Builder in = (PredicatedCollection.Builder)newWithElement(source()); + out = in.createPredicatedBag(null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.collection;PredicatedCollection$Builder;true;createPredicatedBag;;;Element of Argument[-1];Element of ReturnValue;value" + Bag out = null; + PredicatedCollection.Builder in = (PredicatedCollection.Builder)newWithElement(source()); + out = in.createPredicatedBag(); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.collection;PredicatedCollection$Builder;true;createPredicatedBag;;;Element of Argument[0];Element of ReturnValue;value" + Bag out = null; + Bag in = (Bag)newWithElement(source()); + PredicatedCollection.Builder instance = null; + out = instance.createPredicatedBag(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.collection;PredicatedCollection$Builder;true;createPredicatedList;;;Element of Argument[-1];Element of ReturnValue;value" + List out = null; + PredicatedCollection.Builder in = (PredicatedCollection.Builder)newWithElement(source()); + out = in.createPredicatedList(null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.collection;PredicatedCollection$Builder;true;createPredicatedList;;;Element of Argument[-1];Element of ReturnValue;value" + List out = null; + PredicatedCollection.Builder in = (PredicatedCollection.Builder)newWithElement(source()); + out = in.createPredicatedList(); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.collection;PredicatedCollection$Builder;true;createPredicatedList;;;Element of Argument[0];Element of ReturnValue;value" + List out = null; + List in = (List)List.of(source()); + PredicatedCollection.Builder instance = null; + out = instance.createPredicatedList(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.collection;PredicatedCollection$Builder;true;createPredicatedMultiSet;;;Element of Argument[-1];Element of ReturnValue;value" + MultiSet out = null; + PredicatedCollection.Builder in = (PredicatedCollection.Builder)newWithElement(source()); + out = in.createPredicatedMultiSet(null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.collection;PredicatedCollection$Builder;true;createPredicatedMultiSet;;;Element of Argument[-1];Element of ReturnValue;value" + MultiSet out = null; + PredicatedCollection.Builder in = (PredicatedCollection.Builder)newWithElement(source()); + out = in.createPredicatedMultiSet(); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.collection;PredicatedCollection$Builder;true;createPredicatedMultiSet;;;Element of Argument[0];Element of ReturnValue;value" + MultiSet out = null; + MultiSet in = (MultiSet)newWithElement(source()); + PredicatedCollection.Builder instance = null; + out = instance.createPredicatedMultiSet(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.collection;PredicatedCollection$Builder;true;createPredicatedQueue;;;Element of Argument[-1];Element of ReturnValue;value" + Queue out = null; + PredicatedCollection.Builder in = (PredicatedCollection.Builder)newWithElement(source()); + out = in.createPredicatedQueue(null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.collection;PredicatedCollection$Builder;true;createPredicatedQueue;;;Element of Argument[-1];Element of ReturnValue;value" + Queue out = null; + PredicatedCollection.Builder in = (PredicatedCollection.Builder)newWithElement(source()); + out = in.createPredicatedQueue(); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.collection;PredicatedCollection$Builder;true;createPredicatedQueue;;;Element of Argument[0];Element of ReturnValue;value" + Queue out = null; + Queue in = (Queue)newWithElement(source()); + PredicatedCollection.Builder instance = null; + out = instance.createPredicatedQueue(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.collection;PredicatedCollection$Builder;true;createPredicatedSet;;;Element of Argument[-1];Element of ReturnValue;value" + Set out = null; + PredicatedCollection.Builder in = (PredicatedCollection.Builder)newWithElement(source()); + out = in.createPredicatedSet(null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.collection;PredicatedCollection$Builder;true;createPredicatedSet;;;Element of Argument[-1];Element of ReturnValue;value" + Set out = null; + PredicatedCollection.Builder in = (PredicatedCollection.Builder)newWithElement(source()); + out = in.createPredicatedSet(); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.collection;PredicatedCollection$Builder;true;createPredicatedSet;;;Element of Argument[0];Element of ReturnValue;value" + Set out = null; + Set in = (Set)newWithElement(source()); + PredicatedCollection.Builder instance = null; + out = instance.createPredicatedSet(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.collection;PredicatedCollection$Builder;true;rejectedElements;;;Element of Argument[-1];Element of ReturnValue;value" + Collection out = null; + PredicatedCollection.Builder in = (PredicatedCollection.Builder)newWithElement(source()); + out = in.rejectedElements(); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.collection;PredicatedCollection;true;predicatedCollection;;;Element of Argument[0];Element of ReturnValue;value" + PredicatedCollection out = null; + Collection in = (Collection)newWithElement(source()); + out = PredicatedCollection.predicatedCollection(in, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.collection;SynchronizedCollection;true;synchronizedCollection;;;Element of Argument[0];Element of ReturnValue;value" + SynchronizedCollection out = null; + Collection in = (Collection)newWithElement(source()); + out = SynchronizedCollection.synchronizedCollection(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.collection;TransformedCollection;true;transformingCollection;;;Element of Argument[0];Element of ReturnValue;value" + TransformedCollection out = null; + Collection in = (Collection)newWithElement(source()); + out = TransformedCollection.transformingCollection(in, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.collection;UnmodifiableBoundedCollection;true;unmodifiableBoundedCollection;;;Element of Argument[0];Element of ReturnValue;value" + BoundedCollection out = null; + Collection in = (Collection)newWithElement(source()); + out = UnmodifiableBoundedCollection.unmodifiableBoundedCollection(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.collection;UnmodifiableBoundedCollection;true;unmodifiableBoundedCollection;;;Element of Argument[0];Element of ReturnValue;value" + BoundedCollection out = null; + BoundedCollection in = (BoundedCollection)newWithElement(source()); + out = UnmodifiableBoundedCollection.unmodifiableBoundedCollection(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.collection;UnmodifiableCollection;true;unmodifiableCollection;;;Element of Argument[0];Element of ReturnValue;value" + Collection out = null; + Collection in = (Collection)newWithElement(source()); + out = UnmodifiableCollection.unmodifiableCollection(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;AbstractListIteratorDecorator;true;AbstractListIteratorDecorator;;;Element of Argument[0];Element of Argument[-1];value" + AbstractListIteratorDecorator out = null; + ListIterator in = (ListIterator)newWithElement(source()); + out = new AbstractListIteratorDecorator(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;AbstractMapIteratorDecorator;true;AbstractMapIteratorDecorator;;;Element of Argument[0];Element of Argument[-1];value" + AbstractMapIteratorDecorator out = null; + MapIterator in = (MapIterator)newWithElement(source()); + out = new AbstractMapIteratorDecorator(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;AbstractMapIteratorDecorator;true;AbstractMapIteratorDecorator;;;MapValue of Argument[0];MapValue of Argument[-1];value" + AbstractMapIteratorDecorator out = null; + MapIterator in = (MapIterator)newWithMapValue(source()); + out = new AbstractMapIteratorDecorator(in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;AbstractOrderedMapIteratorDecorator;true;AbstractOrderedMapIteratorDecorator;;;Element of Argument[0];Element of Argument[-1];value" + AbstractOrderedMapIteratorDecorator out = null; + OrderedMapIterator in = (OrderedMapIterator)newWithElement(source()); + out = new AbstractOrderedMapIteratorDecorator(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;AbstractOrderedMapIteratorDecorator;true;AbstractOrderedMapIteratorDecorator;;;MapValue of Argument[0];MapValue of Argument[-1];value" + AbstractOrderedMapIteratorDecorator out = null; + OrderedMapIterator in = (OrderedMapIterator)newWithMapValue(source()); + out = new AbstractOrderedMapIteratorDecorator(in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;ArrayIterator;true;ArrayIterator;;;ArrayElement of Argument[0];Element of Argument[-1];value" + ArrayIterator out = null; + Object in = (Object)newWithArrayElement(source()); + out = new ArrayIterator(in, 0, 0); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;ArrayIterator;true;ArrayIterator;;;ArrayElement of Argument[0];Element of Argument[-1];value" + ArrayIterator out = null; + Object in = (Object)newWithArrayElement(source()); + out = new ArrayIterator(in, 0); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;ArrayIterator;true;ArrayIterator;;;ArrayElement of Argument[0];Element of Argument[-1];value" + ArrayIterator out = null; + Object in = (Object)newWithArrayElement(source()); + out = new ArrayIterator(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;ArrayIterator;true;getArray;;;Element of Argument[-1];ArrayElement of ReturnValue;value" + Object out = null; + ArrayIterator in = (ArrayIterator)newWithElement(source()); + out = in.getArray(); + sink(getArrayElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;ArrayListIterator;true;ArrayListIterator;;;ArrayElement of Argument[0];Element of Argument[-1];value" + ArrayListIterator out = null; + Object in = (Object)newWithArrayElement(source()); + out = new ArrayListIterator(in, 0, 0); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;ArrayListIterator;true;ArrayListIterator;;;ArrayElement of Argument[0];Element of Argument[-1];value" + ArrayListIterator out = null; + Object in = (Object)newWithArrayElement(source()); + out = new ArrayListIterator(in, 0); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;ArrayListIterator;true;ArrayListIterator;;;ArrayElement of Argument[0];Element of Argument[-1];value" + ArrayListIterator out = null; + Object in = (Object)newWithArrayElement(source()); + out = new ArrayListIterator(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;BoundedIterator;true;BoundedIterator;;;Element of Argument[0];Element of Argument[-1];value" + BoundedIterator out = null; + Iterator in = (Iterator)newWithElement(source()); + out = new BoundedIterator(in, 0L, 0L); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;CollatingIterator;true;CollatingIterator;(Comparator,Collection);;Element of Element of Argument[1];Element of Argument[-1];value" + CollatingIterator out = null; + Collection in = (Collection)List.of(newWithElement(source())); + out = new CollatingIterator((Comparator)null, in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;CollatingIterator;true;CollatingIterator;(Comparator,Iterator,Iterator);;Element of Argument[1];Element of Argument[-1];value" + CollatingIterator out = null; + Iterator in = (Iterator)newWithElement(source()); + out = new CollatingIterator(null, in, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;CollatingIterator;true;CollatingIterator;(Comparator,Iterator,Iterator);;Element of Argument[2];Element of Argument[-1];value" + CollatingIterator out = null; + Iterator in = (Iterator)newWithElement(source()); + out = new CollatingIterator(null, null, in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;CollatingIterator;true;CollatingIterator;(Comparator,Iterator[]);;Element of ArrayElement of Argument[1];Element of Argument[-1];value" + CollatingIterator out = null; + Iterator[] in = (Iterator[])new Iterator[]{(Iterator)newWithElement(source())}; + out = new CollatingIterator((Comparator)null, in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;CollatingIterator;true;addIterator;;;Element of Argument[0];Element of Argument[-1];value" + CollatingIterator out = null; + Iterator in = (Iterator)newWithElement(source()); + out.addIterator(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;CollatingIterator;true;getIterators;;;Element of Argument[-1];Element of Element of ReturnValue;value" + List out = null; + CollatingIterator in = (CollatingIterator)newWithElement(source()); + out = in.getIterators(); + sink(getElement(getElement(out))); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;CollatingIterator;true;setIterator;;;Element of Argument[1];Element of Argument[-1];value" + CollatingIterator out = null; + Iterator in = (Iterator)newWithElement(source()); + out.setIterator(0, in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;EnumerationIterator;true;EnumerationIterator;;;Element of Argument[0];Element of Argument[-1];value" + EnumerationIterator out = null; + Enumeration in = (Enumeration)newWithElement(source()); + out = new EnumerationIterator(in, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;EnumerationIterator;true;EnumerationIterator;;;Element of Argument[0];Element of Argument[-1];value" + EnumerationIterator out = null; + Enumeration in = (Enumeration)newWithElement(source()); + out = new EnumerationIterator(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;EnumerationIterator;true;getEnumeration;;;Element of Argument[-1];Element of ReturnValue;value" + Enumeration out = null; + EnumerationIterator in = (EnumerationIterator)newWithElement(source()); + out = in.getEnumeration(); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;EnumerationIterator;true;setEnumeration;;;Element of Argument[0];Element of Argument[-1];value" + EnumerationIterator out = null; + Enumeration in = (Enumeration)newWithElement(source()); + out.setEnumeration(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;FilterIterator;true;FilterIterator;;;Element of Argument[0];Element of Argument[-1];value" + FilterIterator out = null; + Iterator in = (Iterator)newWithElement(source()); + out = new FilterIterator(in, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;FilterIterator;true;FilterIterator;;;Element of Argument[0];Element of Argument[-1];value" + FilterIterator out = null; + Iterator in = (Iterator)newWithElement(source()); + out = new FilterIterator(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;FilterIterator;true;getIterator;;;Element of Argument[-1];Element of ReturnValue;value" + Iterator out = null; + FilterIterator in = (FilterIterator)newWithElement(source()); + out = in.getIterator(); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;FilterIterator;true;setIterator;;;Element of Argument[0];Element of Argument[-1];value" + FilterIterator out = null; + Iterator in = (Iterator)newWithElement(source()); + out.setIterator(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;FilterListIterator;true;FilterListIterator;(ListIterator);;Element of Argument[0];Element of Argument[-1];value" + FilterListIterator out = null; + ListIterator in = (ListIterator)newWithElement(source()); + out = new FilterListIterator(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;FilterListIterator;true;FilterListIterator;(ListIterator,Predicate);;Element of Argument[0];Element of Argument[-1];value" + FilterListIterator out = null; + ListIterator in = (ListIterator)newWithElement(source()); + out = new FilterListIterator(in, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;FilterListIterator;true;getListIterator;;;Element of Argument[-1];Element of ReturnValue;value" + ListIterator out = null; + FilterListIterator in = (FilterListIterator)newWithElement(source()); + out = in.getListIterator(); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;FilterListIterator;true;setListIterator;;;Element of Argument[0];Element of Argument[-1];value" + FilterListIterator out = null; + ListIterator in = (ListIterator)newWithElement(source()); + out.setListIterator(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;IteratorChain;true;IteratorChain;(Collection);;Element of Element of Argument[0];Element of Argument[-1];value" + IteratorChain out = null; + Collection in = (Collection)newWithElement(newWithElement(source())); + out = new IteratorChain(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;IteratorChain;true;IteratorChain;(Iterator);;Element of Argument[0];Element of Argument[-1];value" + IteratorChain out = null; + Iterator in = (Iterator)newWithElement(source()); + out = new IteratorChain(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;IteratorChain;true;IteratorChain;(Iterator,Iterator);;Element of Argument[0];Element of Argument[-1];value" + IteratorChain out = null; + Iterator in = (Iterator)newWithElement(source()); + out = new IteratorChain(in, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;IteratorChain;true;IteratorChain;(Iterator,Iterator);;Element of Argument[1];Element of Argument[-1];value" + IteratorChain out = null; + Iterator in = (Iterator)newWithElement(source()); + out = new IteratorChain(null, in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;IteratorChain;true;IteratorChain;(Iterator[]);;Element of ArrayElement of Argument[0];Element of Argument[-1];value" + IteratorChain out = null; + Iterator[] in = (Iterator[])new Iterator[]{(Iterator)newWithElement(source())}; + out = new IteratorChain(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;IteratorChain;true;addIterator;;;Element of Argument[0];Element of Argument[-1];value" + IteratorChain out = null; + Iterator in = (Iterator)newWithElement(source()); + out.addIterator(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;IteratorEnumeration;true;IteratorEnumeration;;;Element of Argument[0];Element of Argument[-1];value" + IteratorEnumeration out = null; + Iterator in = (Iterator)newWithElement(source()); + out = new IteratorEnumeration(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;IteratorEnumeration;true;getIterator;;;Element of Argument[-1];Element of ReturnValue;value" + Iterator out = null; + IteratorEnumeration in = (IteratorEnumeration)newWithElement(source()); + out = in.getIterator(); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;IteratorEnumeration;true;setIterator;;;Element of Argument[0];Element of Argument[-1];value" + IteratorEnumeration out = null; + Iterator in = (Iterator)newWithElement(source()); + out.setIterator(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;IteratorIterable;true;IteratorIterable;;;Element of Argument[0];Element of Argument[-1];value" + IteratorIterable out = null; + Iterator in = (Iterator)newWithElement(source()); + out = new IteratorIterable(in, false); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;IteratorIterable;true;IteratorIterable;;;Element of Argument[0];Element of Argument[-1];value" + IteratorIterable out = null; + Iterator in = (Iterator)newWithElement(source()); + out = new IteratorIterable(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;ListIteratorWrapper;true;ListIteratorWrapper;;;Element of Argument[0];Element of Argument[-1];value" + ListIteratorWrapper out = null; + Iterator in = (Iterator)newWithElement(source()); + out = new ListIteratorWrapper(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;LoopingIterator;true;LoopingIterator;;;Element of Argument[0];Element of Argument[-1];value" + LoopingIterator out = null; + Collection in = (Collection)newWithElement(source()); + out = new LoopingIterator(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;LoopingListIterator;true;LoopingListIterator;;;Element of Argument[0];Element of Argument[-1];value" + LoopingListIterator out = null; + List in = (List)List.of(source()); + out = new LoopingListIterator(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;ObjectArrayIterator;true;ObjectArrayIterator;;;ArrayElement of Argument[0];Element of Argument[-1];value" + ObjectArrayIterator out = null; + Object[] in = (Object[])new Object[]{source()}; + out = new ObjectArrayIterator(in, 0, 0); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;ObjectArrayIterator;true;ObjectArrayIterator;;;ArrayElement of Argument[0];Element of Argument[-1];value" + ObjectArrayIterator out = null; + Object[] in = (Object[])new Object[]{source()}; + out = new ObjectArrayIterator(in, 0); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;ObjectArrayIterator;true;ObjectArrayIterator;;;ArrayElement of Argument[0];Element of Argument[-1];value" + ObjectArrayIterator out = null; + Object[] in = (Object[])new Object[]{source()}; + out = new ObjectArrayIterator(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;ObjectArrayIterator;true;getArray;;;Element of Argument[-1];ArrayElement of ReturnValue;value" + Object[] out = null; + ObjectArrayIterator in = (ObjectArrayIterator)newWithElement(source()); + out = in.getArray(); + sink(getArrayElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;ObjectArrayListIterator;true;ObjectArrayListIterator;;;ArrayElement of Argument[0];Element of Argument[-1];value" + ObjectArrayListIterator out = null; + Object[] in = (Object[])new Object[]{source()}; + out = new ObjectArrayListIterator(in, 0, 0); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;ObjectArrayListIterator;true;ObjectArrayListIterator;;;ArrayElement of Argument[0];Element of Argument[-1];value" + ObjectArrayListIterator out = null; + Object[] in = (Object[])new Object[]{source()}; + out = new ObjectArrayListIterator(in, 0); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;ObjectArrayListIterator;true;ObjectArrayListIterator;;;ArrayElement of Argument[0];Element of Argument[-1];value" + ObjectArrayListIterator out = null; + Object[] in = (Object[])new Object[]{source()}; + out = new ObjectArrayListIterator(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;PeekingIterator;true;PeekingIterator;;;Element of Argument[0];Element of Argument[-1];value" + PeekingIterator out = null; + Iterator in = (Iterator)newWithElement(source()); + out = new PeekingIterator(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;PeekingIterator;true;element;;;Element of Argument[-1];ReturnValue;value" + Object out = null; + PeekingIterator in = (PeekingIterator)newWithElement(source()); + out = in.element(); + sink(out); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;PeekingIterator;true;peek;;;Element of Argument[-1];ReturnValue;value" + Object out = null; + PeekingIterator in = (PeekingIterator)newWithElement(source()); + out = in.peek(); + sink(out); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;PeekingIterator;true;peekingIterator;;;Element of Argument[0];Element of ReturnValue;value" + PeekingIterator out = null; + Iterator in = (Iterator)newWithElement(source()); + out = PeekingIterator.peekingIterator(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;PermutationIterator;true;PermutationIterator;;;Element of Argument[0];Element of Element of Argument[-1];value" + PermutationIterator out = null; + Collection in = (Collection)List.of(source()); + out = new PermutationIterator(in); + sink(getElement(getElement(out))); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;PushbackIterator;true;PushbackIterator;;;Element of Argument[0];Element of Argument[-1];value" + PushbackIterator out = null; + Iterator in = (Iterator)newWithElement(source()); + out = new PushbackIterator(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;PushbackIterator;true;pushback;;;Argument[0];Element of Argument[-1];value" + PushbackIterator out = null; + Object in = (Object)source(); + out.pushback(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;PushbackIterator;true;pushbackIterator;;;Element of Argument[0];Element of ReturnValue;value" + PushbackIterator out = null; + Iterator in = (Iterator)newWithElement(source()); + out = PushbackIterator.pushbackIterator(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;ReverseListIterator;true;ReverseListIterator;;;Element of Argument[0];Element of Argument[-1];value" + ReverseListIterator out = null; + List in = (List)List.of(source()); + out = new ReverseListIterator(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;SingletonIterator;true;SingletonIterator;;;Argument[0];Element of Argument[-1];value" + SingletonIterator out = null; + Object in = (Object)source(); + out = new SingletonIterator(in, false); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;SingletonIterator;true;SingletonIterator;;;Argument[0];Element of Argument[-1];value" + SingletonIterator out = null; + Object in = (Object)source(); + out = new SingletonIterator(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;SingletonListIterator;true;SingletonListIterator;;;Argument[0];Element of Argument[-1];value" + SingletonListIterator out = null; + Object in = (Object)source(); + out = new SingletonListIterator(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;SkippingIterator;true;SkippingIterator;;;Element of Argument[0];Element of Argument[-1];value" + SkippingIterator out = null; + Iterator in = (Iterator)newWithElement(source()); + out = new SkippingIterator(in, 0L); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;UniqueFilterIterator;true;UniqueFilterIterator;;;Element of Argument[0];Element of Argument[-1];value" + UniqueFilterIterator out = null; + Iterator in = (Iterator)newWithElement(source()); + out = new UniqueFilterIterator(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;UnmodifiableIterator;true;unmodifiableIterator;;;Element of Argument[0];Element of ReturnValue;value" + Iterator out = null; + Iterator in = (Iterator)newWithElement(source()); + out = UnmodifiableIterator.unmodifiableIterator(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;UnmodifiableListIterator;true;umodifiableListIterator;;;Element of Argument[0];Element of ReturnValue;value" + ListIterator out = null; + ListIterator in = (ListIterator)newWithElement(source()); + out = UnmodifiableListIterator.umodifiableListIterator(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;UnmodifiableMapIterator;true;unmodifiableMapIterator;;;Element of Argument[0];Element of ReturnValue;value" + MapIterator out = null; + MapIterator in = (MapIterator)newWithElement(source()); + out = UnmodifiableMapIterator.unmodifiableMapIterator(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;UnmodifiableMapIterator;true;unmodifiableMapIterator;;;MapValue of Argument[0];MapValue of ReturnValue;value" + MapIterator out = null; + MapIterator in = (MapIterator)newWithMapValue(source()); + out = UnmodifiableMapIterator.unmodifiableMapIterator(in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;UnmodifiableOrderedMapIterator;true;unmodifiableOrderedMapIterator;;;Element of Argument[0];Element of ReturnValue;value" + OrderedMapIterator out = null; + OrderedMapIterator in = (OrderedMapIterator)newWithElement(source()); + out = UnmodifiableOrderedMapIterator.unmodifiableOrderedMapIterator(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;UnmodifiableOrderedMapIterator;true;unmodifiableOrderedMapIterator;;;MapValue of Argument[0];MapValue of ReturnValue;value" + OrderedMapIterator out = null; + OrderedMapIterator in = (OrderedMapIterator)newWithMapValue(source()); + out = UnmodifiableOrderedMapIterator.unmodifiableOrderedMapIterator(in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;ZippingIterator;true;ZippingIterator;(Iterator,Iterator);;Element of Argument[0];Element of Argument[-1];value" + ZippingIterator out = null; + Iterator in = (Iterator)newWithElement(source()); + out = new ZippingIterator(in, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;ZippingIterator;true;ZippingIterator;(Iterator,Iterator);;Element of Argument[1];Element of Argument[-1];value" + ZippingIterator out = null; + Iterator in = (Iterator)newWithElement(source()); + out = new ZippingIterator(null, in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;ZippingIterator;true;ZippingIterator;(Iterator,Iterator,Iterator);;Element of Argument[0];Element of Argument[-1];value" + ZippingIterator out = null; + Iterator in = (Iterator)newWithElement(source()); + out = new ZippingIterator(in, null, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;ZippingIterator;true;ZippingIterator;(Iterator,Iterator,Iterator);;Element of Argument[1];Element of Argument[-1];value" + ZippingIterator out = null; + Iterator in = (Iterator)newWithElement(source()); + out = new ZippingIterator(null, in, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;ZippingIterator;true;ZippingIterator;(Iterator,Iterator,Iterator);;Element of Argument[2];Element of Argument[-1];value" + ZippingIterator out = null; + Iterator in = (Iterator)newWithElement(source()); + out = new ZippingIterator(null, null, in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;ZippingIterator;true;ZippingIterator;(Iterator[]);;Element of ArrayElement of Argument[0];Element of Argument[-1];value" + ZippingIterator out = null; + Iterator[] in = (Iterator[])new Iterator[]{(Iterator)newWithElement(source())}; + out = new ZippingIterator(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.keyvalue;MultiKey;true;MultiKey;(Object,Object);;Argument[0];Element of Argument[-1];value" + MultiKey out = null; + Object in = (Object)source(); + out = new MultiKey(in, (Object)null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.keyvalue;MultiKey;true;MultiKey;(Object,Object);;Argument[1];Element of Argument[-1];value" + MultiKey out = null; + Object in = (Object)source(); + out = new MultiKey((Object)null, in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.keyvalue;MultiKey;true;MultiKey;(Object,Object,Object);;Argument[0];Element of Argument[-1];value" + MultiKey out = null; + Object in = (Object)source(); + out = new MultiKey(in, null, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.keyvalue;MultiKey;true;MultiKey;(Object,Object,Object);;Argument[1];Element of Argument[-1];value" + MultiKey out = null; + Object in = (Object)source(); + out = new MultiKey(null, in, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.keyvalue;MultiKey;true;MultiKey;(Object,Object,Object);;Argument[2];Element of Argument[-1];value" + MultiKey out = null; + Object in = (Object)source(); + out = new MultiKey(null, null, in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.keyvalue;MultiKey;true;MultiKey;(Object,Object,Object,Object);;Argument[0];Element of Argument[-1];value" + MultiKey out = null; + Object in = (Object)source(); + out = new MultiKey(in, null, null, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.keyvalue;MultiKey;true;MultiKey;(Object,Object,Object,Object);;Argument[1];Element of Argument[-1];value" + MultiKey out = null; + Object in = (Object)source(); + out = new MultiKey(null, in, null, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.keyvalue;MultiKey;true;MultiKey;(Object,Object,Object,Object);;Argument[2];Element of Argument[-1];value" + MultiKey out = null; + Object in = (Object)source(); + out = new MultiKey(null, null, in, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.keyvalue;MultiKey;true;MultiKey;(Object,Object,Object,Object);;Argument[3];Element of Argument[-1];value" + MultiKey out = null; + Object in = (Object)source(); + out = new MultiKey(null, null, null, in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.keyvalue;MultiKey;true;MultiKey;(Object,Object,Object,Object,Object);;Argument[0];Element of Argument[-1];value" + MultiKey out = null; + Object in = (Object)source(); + out = new MultiKey(in, null, null, null, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.keyvalue;MultiKey;true;MultiKey;(Object,Object,Object,Object,Object);;Argument[1];Element of Argument[-1];value" + MultiKey out = null; + Object in = (Object)source(); + out = new MultiKey(null, in, null, null, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.keyvalue;MultiKey;true;MultiKey;(Object,Object,Object,Object,Object);;Argument[2];Element of Argument[-1];value" + MultiKey out = null; + Object in = (Object)source(); + out = new MultiKey(null, null, in, null, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.keyvalue;MultiKey;true;MultiKey;(Object,Object,Object,Object,Object);;Argument[3];Element of Argument[-1];value" + MultiKey out = null; + Object in = (Object)source(); + out = new MultiKey(null, null, null, in, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.keyvalue;MultiKey;true;MultiKey;(Object,Object,Object,Object,Object);;Argument[4];Element of Argument[-1];value" + MultiKey out = null; + Object in = (Object)source(); + out = new MultiKey(null, null, null, null, in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.keyvalue;MultiKey;true;MultiKey;(Object[]);;ArrayElement of Argument[0];Element of Argument[-1];value" + MultiKey out = null; + Object[] in = (Object[])new Object[]{source()}; + out = new MultiKey(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.keyvalue;MultiKey;true;MultiKey;(Object[],boolean);;ArrayElement of Argument[0];Element of Argument[-1];value" + MultiKey out = null; + Object[] in = (Object[])new Object[]{source()}; + out = new MultiKey(in, false); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.keyvalue;MultiKey;true;getKey;;;Element of Argument[-1];ReturnValue;value" + Object out = null; + MultiKey in = (MultiKey)newWithElement(source()); + out = in.getKey(0); + sink(out); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.keyvalue;MultiKey;true;getKeys;;;Element of Argument[-1];ArrayElement of ReturnValue;value" + Object[] out = null; + MultiKey in = (MultiKey)newWithElement(source()); + out = in.getKeys(); + sink(getArrayElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.list;AbstractLinkedList;true;addFirst;;;Argument[0];Element of Argument[-1];value" + AbstractLinkedList out = null; + Object in = (Object)source(); + out.addFirst(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.list;AbstractLinkedList;true;addLast;;;Argument[0];Element of Argument[-1];value" + AbstractLinkedList out = null; + Object in = (Object)source(); + out.addLast(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.list;AbstractLinkedList;true;getFirst;;;Element of Argument[-1];ReturnValue;value" + Object out = null; + AbstractLinkedList in = (AbstractLinkedList)newWithElement(source()); + out = in.getFirst(); + sink(out); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.list;AbstractLinkedList;true;getLast;;;Element of Argument[-1];ReturnValue;value" + Object out = null; + AbstractLinkedList in = (AbstractLinkedList)newWithElement(source()); + out = in.getLast(); + sink(out); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.list;AbstractLinkedList;true;removeFirst;;;Element of Argument[-1];ReturnValue;value" + Object out = null; + AbstractLinkedList in = (AbstractLinkedList)newWithElement(source()); + out = in.removeFirst(); + sink(out); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.list;AbstractLinkedList;true;removeLast;;;Element of Argument[-1];ReturnValue;value" + Object out = null; + AbstractLinkedList in = (AbstractLinkedList)newWithElement(source()); + out = in.removeLast(); + sink(out); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.list;CursorableLinkedList;true;CursorableLinkedList;;;Element of Argument[0];Element of Argument[-1];value" + CursorableLinkedList out = null; + Collection in = (Collection)List.of(source()); + out = new CursorableLinkedList(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.list;CursorableLinkedList;true;cursor;;;Element of Argument[-1];Element of ReturnValue;value" + CursorableLinkedList.Cursor out = null; + CursorableLinkedList in = (CursorableLinkedList)newWithElement(source()); + out = in.cursor(0); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.list;CursorableLinkedList;true;cursor;;;Element of Argument[-1];Element of ReturnValue;value" + CursorableLinkedList.Cursor out = null; + CursorableLinkedList in = (CursorableLinkedList)newWithElement(source()); + out = in.cursor(); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.list;FixedSizeList;true;fixedSizeList;;;Element of Argument[0];Element of ReturnValue;value" + FixedSizeList out = null; + List in = (List)List.of(source()); + out = FixedSizeList.fixedSizeList(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.list;GrowthList;true;growthList;;;Element of Argument[0];Element of ReturnValue;value" + GrowthList out = null; + List in = (List)List.of(source()); + out = GrowthList.growthList(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.list;LazyList;true;lazyList;;;Element of Argument[0];Element of ReturnValue;value" + LazyList out = null; + List in = (List)List.of(source()); + out = LazyList.lazyList(in, (Transformer)null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.list;LazyList;true;lazyList;;;Element of Argument[0];Element of ReturnValue;value" + LazyList out = null; + List in = (List)List.of(source()); + out = LazyList.lazyList(in, (Factory)null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.list;NodeCachingLinkedList;true;NodeCachingLinkedList;(Collection);;Element of Argument[0];Element of Argument[-1];value" + NodeCachingLinkedList out = null; + Collection in = (Collection)List.of(source()); + out = new NodeCachingLinkedList(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.list;PredicatedList;true;predicatedList;;;Element of Argument[0];Element of ReturnValue;value" + PredicatedList out = null; + List in = (List)List.of(source()); + out = PredicatedList.predicatedList(in, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.list;SetUniqueList;true;asSet;;;Element of Argument[-1];Element of ReturnValue;value" + Set out = null; + SetUniqueList in = (SetUniqueList)newWithElement(source()); + out = in.asSet(); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.list;SetUniqueList;true;setUniqueList;;;Element of Argument[0];Element of ReturnValue;value" + SetUniqueList out = null; + List in = (List)List.of(source()); + out = SetUniqueList.setUniqueList(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.list;TransformedList;true;transformingList;;;Element of Argument[0];Element of ReturnValue;value" + TransformedList out = null; + List in = (List)List.of(source()); + out = TransformedList.transformingList(in, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.list;TreeList;true;TreeList;;;Element of Argument[0];Element of Argument[-1];value" + TreeList out = null; + Collection in = (Collection)List.of(source()); + out = new TreeList(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.list;UnmodifiableList;true;UnmodifiableList;;;Element of Argument[0];Element of Argument[-1];value" + UnmodifiableList out = null; + List in = (List)List.of(source()); + out = new UnmodifiableList(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.list;UnmodifiableList;true;unmodifiableList;;;Element of Argument[0];Element of ReturnValue;value" + List out = null; + List in = (List)List.of(source()); + out = UnmodifiableList.unmodifiableList(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;AbstractOrderedMapDecorator;true;AbstractOrderedMapDecorator;(OrderedMap);;MapKey of Argument[0];MapKey of Argument[-1];value" + AbstractOrderedMapDecorator out = null; + OrderedMap in = (OrderedMap)newWithMapKey(source()); + out = new AbstractOrderedMapDecorator(in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;AbstractOrderedMapDecorator;true;AbstractOrderedMapDecorator;(OrderedMap);;MapValue of Argument[0];MapValue of Argument[-1];value" + AbstractOrderedMapDecorator out = null; + OrderedMap in = (OrderedMap)newWithMapValue(source()); + out = new AbstractOrderedMapDecorator(in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;AbstractSortedMapDecorator;true;AbstractSortedMapDecorator;(SortedMap);;MapKey of Argument[0];MapKey of Argument[-1];value" + AbstractSortedMapDecorator out = null; + SortedMap in = (SortedMap)newWithMapKey(source()); + out = new AbstractSortedMapDecorator(in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;AbstractSortedMapDecorator;true;AbstractSortedMapDecorator;(SortedMap);;MapValue of Argument[0];MapValue of Argument[-1];value" + AbstractSortedMapDecorator out = null; + SortedMap in = (SortedMap)newWithMapValue(source()); + out = new AbstractSortedMapDecorator(in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;CaseInsensitiveMap;true;CaseInsensitiveMap;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value" + CaseInsensitiveMap out = null; + Map in = (Map)Map.of(source(), null); + out = new CaseInsensitiveMap(in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;CaseInsensitiveMap;true;CaseInsensitiveMap;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value" + CaseInsensitiveMap out = null; + Map in = (Map)Map.of(null, source()); + out = new CaseInsensitiveMap(in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;CompositeMap;true;CompositeMap;(Map,Map);;MapKey of Argument[0];MapKey of Argument[-1];value" + CompositeMap out = null; + Map in = (Map)Map.of(source(), null); + out = new CompositeMap(in, (Map)null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;CompositeMap;true;CompositeMap;(Map,Map);;MapKey of Argument[1];MapKey of Argument[-1];value" + CompositeMap out = null; + Map in = (Map)Map.of(source(), null); + out = new CompositeMap((Map)null, in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;CompositeMap;true;CompositeMap;(Map,Map);;MapValue of Argument[0];MapValue of Argument[-1];value" + CompositeMap out = null; + Map in = (Map)Map.of(null, source()); + out = new CompositeMap(in, (Map)null); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;CompositeMap;true;CompositeMap;(Map,Map);;MapValue of Argument[1];MapValue of Argument[-1];value" + CompositeMap out = null; + Map in = (Map)Map.of(null, source()); + out = new CompositeMap((Map)null, in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;CompositeMap;true;CompositeMap;(Map,Map,MapMutator);;MapKey of Argument[0];MapKey of Argument[-1];value" + CompositeMap out = null; + Map in = (Map)Map.of(source(), null); + out = new CompositeMap(in, null, null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;CompositeMap;true;CompositeMap;(Map,Map,MapMutator);;MapKey of Argument[1];MapKey of Argument[-1];value" + CompositeMap out = null; + Map in = (Map)Map.of(source(), null); + out = new CompositeMap(null, in, null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;CompositeMap;true;CompositeMap;(Map,Map,MapMutator);;MapValue of Argument[0];MapValue of Argument[-1];value" + CompositeMap out = null; + Map in = (Map)Map.of(null, source()); + out = new CompositeMap(in, null, null); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;CompositeMap;true;CompositeMap;(Map,Map,MapMutator);;MapValue of Argument[1];MapValue of Argument[-1];value" + CompositeMap out = null; + Map in = (Map)Map.of(null, source()); + out = new CompositeMap(null, in, null); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;CompositeMap;true;CompositeMap;(Map[]);;MapKey of ArrayElement of Argument[0];MapKey of Argument[-1];value" + CompositeMap out = null; + Map[] in = (Map[])new Map[]{(Map)newWithMapKey(source())}; + out = new CompositeMap(in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;CompositeMap;true;CompositeMap;(Map[]);;MapValue of ArrayElement of Argument[0];MapValue of Argument[-1];value" + CompositeMap out = null; + Map[] in = (Map[])new Map[]{(Map)newWithMapValue(source())}; + out = new CompositeMap(in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;CompositeMap;true;CompositeMap;(Map[],MapMutator);;MapKey of ArrayElement of Argument[0];MapKey of Argument[-1];value" + CompositeMap out = null; + Map[] in = (Map[])new Map[]{(Map)newWithMapKey(source())}; + out = new CompositeMap(in, (CompositeMap.MapMutator)null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;CompositeMap;true;CompositeMap;(Map[],MapMutator);;MapValue of ArrayElement of Argument[0];MapValue of Argument[-1];value" + CompositeMap out = null; + Map[] in = (Map[])new Map[]{(Map)newWithMapValue(source())}; + out = new CompositeMap(in, (CompositeMap.MapMutator)null); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;CompositeMap;true;addComposited;;;MapKey of Argument[0];MapKey of Argument[-1];value" + CompositeMap out = null; + Map in = (Map)Map.of(source(), null); + out.addComposited(in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;CompositeMap;true;addComposited;;;MapValue of Argument[0];MapValue of Argument[-1];value" + CompositeMap out = null; + Map in = (Map)Map.of(null, source()); + out.addComposited(in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;CompositeMap;true;removeComposited;;;Argument[0];ReturnValue;value" + Map out = null; + Map in = (Map)source(); + CompositeMap instance = null; + out = instance.removeComposited(in); + sink(out); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;CompositeMap;true;removeComposited;;;MapKey of Argument[-1];MapKey of ReturnValue;value" + Map out = null; + CompositeMap in = (CompositeMap)newWithMapKey(source()); + out = in.removeComposited(null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;CompositeMap;true;removeComposited;;;MapValue of Argument[-1];MapValue of ReturnValue;value" + Map out = null; + CompositeMap in = (CompositeMap)newWithMapValue(source()); + out = in.removeComposited(null); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;DefaultedMap;true;DefaultedMap;(Object);;Argument[0];MapValue of Argument[-1];value" + DefaultedMap out = null; + Object in = (Object)source(); + out = new DefaultedMap(in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;DefaultedMap;true;defaultedMap;(Map,Object);;Argument[1];MapValue of ReturnValue;value" + DefaultedMap out = null; + Object in = (Object)source(); + out = DefaultedMap.defaultedMap((Map)null, in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;DefaultedMap;true;defaultedMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" + Map out = null; + Map in = (Map)Map.of(source(), null); + out = DefaultedMap.defaultedMap(in, (Transformer)null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;DefaultedMap;true;defaultedMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" + DefaultedMap out = null; + Map in = (Map)Map.of(source(), null); + out = DefaultedMap.defaultedMap(in, (Object)null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;DefaultedMap;true;defaultedMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" + DefaultedMap out = null; + Map in = (Map)Map.of(source(), null); + out = DefaultedMap.defaultedMap(in, (Factory)null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;DefaultedMap;true;defaultedMap;;;MapValue of Argument[0];MapValue of ReturnValue;value" + Map out = null; + Map in = (Map)Map.of(null, source()); + out = DefaultedMap.defaultedMap(in, (Transformer)null); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;DefaultedMap;true;defaultedMap;;;MapValue of Argument[0];MapValue of ReturnValue;value" + DefaultedMap out = null; + Map in = (Map)Map.of(null, source()); + out = DefaultedMap.defaultedMap(in, (Object)null); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;DefaultedMap;true;defaultedMap;;;MapValue of Argument[0];MapValue of ReturnValue;value" + DefaultedMap out = null; + Map in = (Map)Map.of(null, source()); + out = DefaultedMap.defaultedMap(in, (Factory)null); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;EntrySetToMapIteratorAdapter;true;EntrySetToMapIteratorAdapter;;;MapKey of Element of Argument[0];Element of Argument[-1];value" + EntrySetToMapIteratorAdapter out = null; + Set in = (Set)newWithElement(newWithMapKey(source())); + out = new EntrySetToMapIteratorAdapter(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;EntrySetToMapIteratorAdapter;true;EntrySetToMapIteratorAdapter;;;MapValue of Element of Argument[0];MapValue of Argument[-1];value" + EntrySetToMapIteratorAdapter out = null; + Set in = (Set)newWithElement(newWithMapValue(source())); + out = new EntrySetToMapIteratorAdapter(in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;FixedSizeMap;true;fixedSizeMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" + FixedSizeMap out = null; + Map in = (Map)Map.of(source(), null); + out = FixedSizeMap.fixedSizeMap(in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;FixedSizeMap;true;fixedSizeMap;;;MapValue of Argument[0];MapValue of ReturnValue;value" + FixedSizeMap out = null; + Map in = (Map)Map.of(null, source()); + out = FixedSizeMap.fixedSizeMap(in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;FixedSizeSortedMap;true;fixedSizeSortedMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" + FixedSizeSortedMap out = null; + SortedMap in = (SortedMap)newWithMapKey(source()); + out = FixedSizeSortedMap.fixedSizeSortedMap(in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;FixedSizeSortedMap;true;fixedSizeSortedMap;;;MapValue of Argument[0];MapValue of ReturnValue;value" + FixedSizeSortedMap out = null; + SortedMap in = (SortedMap)newWithMapValue(source()); + out = FixedSizeSortedMap.fixedSizeSortedMap(in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;Flat3Map;true;Flat3Map;;;MapKey of Argument[0];MapKey of Argument[-1];value" + Flat3Map out = null; + Map in = (Map)Map.of(source(), null); + out = new Flat3Map(in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;Flat3Map;true;Flat3Map;;;MapValue of Argument[0];MapValue of Argument[-1];value" + Flat3Map out = null; + Map in = (Map)Map.of(null, source()); + out = new Flat3Map(in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;HashedMap;true;HashedMap;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value" + HashedMap out = null; + Map in = (Map)Map.of(source(), null); + out = new HashedMap(in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;HashedMap;true;HashedMap;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value" + HashedMap out = null; + Map in = (Map)Map.of(null, source()); + out = new HashedMap(in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;LRUMap;true;LRUMap;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value" + LRUMap out = null; + Map in = (Map)Map.of(source(), null); + out = new LRUMap(in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;LRUMap;true;LRUMap;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value" + LRUMap out = null; + Map in = (Map)Map.of(null, source()); + out = new LRUMap(in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;LRUMap;true;LRUMap;(Map,boolean);;MapKey of Argument[0];MapKey of Argument[-1];value" + LRUMap out = null; + Map in = (Map)Map.of(source(), null); + out = new LRUMap(in, false); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;LRUMap;true;LRUMap;(Map,boolean);;MapValue of Argument[0];MapValue of Argument[-1];value" + LRUMap out = null; + Map in = (Map)Map.of(null, source()); + out = new LRUMap(in, false); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;LRUMap;true;get;(Object,boolean);;MapValue of Argument[0];ReturnValue;value" + Object out = null; + Object in = (Object)Map.of(null, source()); + LRUMap instance = null; + out = instance.get(in, false); + sink(out); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;LazyMap;true;lazyMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" + LazyMap out = null; + Map in = (Map)Map.of(source(), null); + out = LazyMap.lazyMap(in, (Transformer)null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;LazyMap;true;lazyMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" + LazyMap out = null; + Map in = (Map)Map.of(source(), null); + out = LazyMap.lazyMap(in, (Factory)null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;LazyMap;true;lazyMap;;;MapValue of Argument[0];MapValue of ReturnValue;value" + LazyMap out = null; + Map in = (Map)Map.of(null, source()); + out = LazyMap.lazyMap(in, (Transformer)null); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;LazyMap;true;lazyMap;;;MapValue of Argument[0];MapValue of ReturnValue;value" + LazyMap out = null; + Map in = (Map)Map.of(null, source()); + out = LazyMap.lazyMap(in, (Factory)null); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;LazySortedMap;true;lazySortedMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" + LazySortedMap out = null; + SortedMap in = (SortedMap)newWithMapKey(source()); + out = LazySortedMap.lazySortedMap(in, (Transformer)null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;LazySortedMap;true;lazySortedMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" + LazySortedMap out = null; + SortedMap in = (SortedMap)newWithMapKey(source()); + out = LazySortedMap.lazySortedMap(in, (Factory)null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;LazySortedMap;true;lazySortedMap;;;MapValue of Argument[0];MapValue of ReturnValue;value" + LazySortedMap out = null; + SortedMap in = (SortedMap)newWithMapValue(source()); + out = LazySortedMap.lazySortedMap(in, (Transformer)null); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;LazySortedMap;true;lazySortedMap;;;MapValue of Argument[0];MapValue of ReturnValue;value" + LazySortedMap out = null; + SortedMap in = (SortedMap)newWithMapValue(source()); + out = LazySortedMap.lazySortedMap(in, (Factory)null); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;LinkedMap;true;LinkedMap;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value" + LinkedMap out = null; + Map in = (Map)Map.of(source(), null); + out = new LinkedMap(in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;LinkedMap;true;LinkedMap;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value" + LinkedMap out = null; + Map in = (Map)Map.of(null, source()); + out = new LinkedMap(in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;LinkedMap;true;asList;;;MapKey of Argument[-1];Element of ReturnValue;value" + List out = null; + LinkedMap in = (LinkedMap)newWithMapKey(source()); + out = in.asList(); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;LinkedMap;true;get;(int);;MapKey of Argument[-1];ReturnValue;value" + Object out = null; + LinkedMap in = (LinkedMap)newWithMapKey(source()); + out = in.get(0); + sink(out); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;LinkedMap;true;getValue;(int);;MapValue of Argument[-1];ReturnValue;value" + Object out = null; + LinkedMap in = (LinkedMap)newWithMapValue(source()); + out = in.getValue(0); + sink(out); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;LinkedMap;true;remove;(int);;MapValue of Argument[-1];ReturnValue;value" + Object out = null; + LinkedMap in = (LinkedMap)newWithMapValue(source()); + out = in.remove(0); + sink(out); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;ListOrderedMap;true;asList;;;MapKey of Argument[-1];Element of ReturnValue;value" + List out = null; + ListOrderedMap in = (ListOrderedMap)newWithMapKey(source()); + out = in.asList(); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;ListOrderedMap;true;get;(int);;MapKey of Argument[-1];ReturnValue;value" + Object out = null; + ListOrderedMap in = (ListOrderedMap)newWithMapKey(source()); + out = in.get(0); + sink(out); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;ListOrderedMap;true;getValue;(int);;MapValue of Argument[-1];ReturnValue;value" + Object out = null; + ListOrderedMap in = (ListOrderedMap)newWithMapValue(source()); + out = in.getValue(0); + sink(out); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;ListOrderedMap;true;keyList;;;MapKey of Argument[-1];Element of ReturnValue;value" + List out = null; + ListOrderedMap in = (ListOrderedMap)newWithMapKey(source()); + out = in.keyList(); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;ListOrderedMap;true;listOrderedMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" + ListOrderedMap out = null; + Map in = (Map)Map.of(source(), null); + out = ListOrderedMap.listOrderedMap(in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;ListOrderedMap;true;listOrderedMap;;;MapValue of Argument[0];MapValue of ReturnValue;value" + ListOrderedMap out = null; + Map in = (Map)Map.of(null, source()); + out = ListOrderedMap.listOrderedMap(in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;ListOrderedMap;true;put;;;Argument[1];MapKey of Argument[-1];value" + ListOrderedMap out = null; + Object in = (Object)source(); + out.put(null, in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;ListOrderedMap;true;put;;;Argument[1];MapKey of Argument[-1];value" + ListOrderedMap out = null; + Object in = (Object)source(); + out.put(0, in, null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;ListOrderedMap;true;put;;;Argument[2];MapValue of Argument[-1];value" + ListOrderedMap out = null; + Object in = (Object)source(); + out.put(0, null, in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;ListOrderedMap;true;putAll;;;MapKey of Argument[1];MapKey of Argument[-1];value" + ListOrderedMap out = null; + Map in = (Map)Map.of(source(), null); + out.putAll(0, in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;ListOrderedMap;true;putAll;;;MapValue of Argument[1];MapValue of Argument[-1];value" + ListOrderedMap out = null; + Map in = (Map)Map.of(null, source()); + out.putAll(0, in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;ListOrderedMap;true;remove;(int);;MapValue of Argument[-1];ReturnValue;value" + Object out = null; + ListOrderedMap in = (ListOrderedMap)newWithMapValue(source()); + out = in.remove(0); + sink(out); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;ListOrderedMap;true;setValue;;;Argument[1];MapValue of Argument[-1];value" + ListOrderedMap out = null; + Object in = (Object)source(); + out.setValue(0, in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;ListOrderedMap;true;valueList;;;MapValue of Argument[-1];Element of ReturnValue;value" + List out = null; + ListOrderedMap in = (ListOrderedMap)newWithMapValue(source()); + out = in.valueList(); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;MultiKeyMap;true;get;;;MapValue of Argument[-1];ReturnValue;value" + Object out = null; + MultiKeyMap in = (MultiKeyMap)newWithMapValue(source()); + out = in.get(null, null, null, null, null); + sink(out); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;MultiKeyMap;true;get;;;MapValue of Argument[-1];ReturnValue;value" + Object out = null; + MultiKeyMap in = (MultiKeyMap)newWithMapValue(source()); + out = in.get(null, null, null, null); + sink(out); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;MultiKeyMap;true;get;;;MapValue of Argument[-1];ReturnValue;value" + Object out = null; + MultiKeyMap in = (MultiKeyMap)newWithMapValue(source()); + out = in.get(null, null, null); + sink(out); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;MultiKeyMap;true;get;;;MapValue of Argument[-1];ReturnValue;value" + Object out = null; + MultiKeyMap in = (MultiKeyMap)newWithMapValue(source()); + out = in.get(null, null); + sink(out); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;MultiKeyMap;true;put;(Object,Object,Object);;Argument[0..1];Element of MapKey of Argument[-1];value" + MultiKeyMap out = null; + Object in = (Object)source(); + out.put(null, in, null); + sink(getElement(getMapKey(out))); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;MultiKeyMap;true;put;(Object,Object,Object);;Argument[0..1];Element of MapKey of Argument[-1];value" + MultiKeyMap out = null; + Object in = (Object)source(); + out.put(in, null, null); + sink(getElement(getMapKey(out))); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;MultiKeyMap;true;put;(Object,Object,Object);;Argument[2];MapValue of Argument[-1];value" + MultiKeyMap out = null; + Object in = (Object)source(); + out.put(null, null, in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;MultiKeyMap;true;put;(Object,Object,Object,Object);;Argument[0..2];Element of MapKey of Argument[-1];value" + MultiKeyMap out = null; + Object in = (Object)source(); + out.put(null, null, in, null); + sink(getElement(getMapKey(out))); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;MultiKeyMap;true;put;(Object,Object,Object,Object);;Argument[0..2];Element of MapKey of Argument[-1];value" + MultiKeyMap out = null; + Object in = (Object)source(); + out.put(null, in, null, null); + sink(getElement(getMapKey(out))); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;MultiKeyMap;true;put;(Object,Object,Object,Object);;Argument[0..2];Element of MapKey of Argument[-1];value" + MultiKeyMap out = null; + Object in = (Object)source(); + out.put(in, null, null, null); + sink(getElement(getMapKey(out))); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;MultiKeyMap;true;put;(Object,Object,Object,Object);;Argument[3];MapValue of Argument[-1];value" + MultiKeyMap out = null; + Object in = (Object)source(); + out.put(null, null, null, in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;MultiKeyMap;true;put;(Object,Object,Object,Object,Object);;Argument[0..3];Element of MapKey of Argument[-1];value" + MultiKeyMap out = null; + Object in = (Object)source(); + out.put(null, null, null, in, null); + sink(getElement(getMapKey(out))); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;MultiKeyMap;true;put;(Object,Object,Object,Object,Object);;Argument[0..3];Element of MapKey of Argument[-1];value" + MultiKeyMap out = null; + Object in = (Object)source(); + out.put(null, null, in, null, null); + sink(getElement(getMapKey(out))); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;MultiKeyMap;true;put;(Object,Object,Object,Object,Object);;Argument[0..3];Element of MapKey of Argument[-1];value" + MultiKeyMap out = null; + Object in = (Object)source(); + out.put(null, in, null, null, null); + sink(getElement(getMapKey(out))); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;MultiKeyMap;true;put;(Object,Object,Object,Object,Object);;Argument[0..3];Element of MapKey of Argument[-1];value" + MultiKeyMap out = null; + Object in = (Object)source(); + out.put(in, null, null, null, null); + sink(getElement(getMapKey(out))); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;MultiKeyMap;true;put;(Object,Object,Object,Object,Object);;Argument[4];MapValue of Argument[-1];value" + MultiKeyMap out = null; + Object in = (Object)source(); + out.put(null, null, null, null, in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;MultiKeyMap;true;put;(Object,Object,Object,Object,Object,Object);;Argument[0..4];Element of MapKey of Argument[-1];value" + MultiKeyMap out = null; + Object in = (Object)source(); + out.put(null, null, null, null, in, null); + sink(getElement(getMapKey(out))); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;MultiKeyMap;true;put;(Object,Object,Object,Object,Object,Object);;Argument[0..4];Element of MapKey of Argument[-1];value" + MultiKeyMap out = null; + Object in = (Object)source(); + out.put(null, null, null, in, null, null); + sink(getElement(getMapKey(out))); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;MultiKeyMap;true;put;(Object,Object,Object,Object,Object,Object);;Argument[0..4];Element of MapKey of Argument[-1];value" + MultiKeyMap out = null; + Object in = (Object)source(); + out.put(null, null, in, null, null, null); + sink(getElement(getMapKey(out))); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;MultiKeyMap;true;put;(Object,Object,Object,Object,Object,Object);;Argument[0..4];Element of MapKey of Argument[-1];value" + MultiKeyMap out = null; + Object in = (Object)source(); + out.put(null, in, null, null, null, null); + sink(getElement(getMapKey(out))); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;MultiKeyMap;true;put;(Object,Object,Object,Object,Object,Object);;Argument[0..4];Element of MapKey of Argument[-1];value" + MultiKeyMap out = null; + Object in = (Object)source(); + out.put(in, null, null, null, null, null); + sink(getElement(getMapKey(out))); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;MultiKeyMap;true;put;(Object,Object,Object,Object,Object,Object);;Argument[5];MapValue of Argument[-1];value" + MultiKeyMap out = null; + Object in = (Object)source(); + out.put(null, null, null, null, null, in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;MultiKeyMap;true;put;;;MapValue of Argument[-1];ReturnValue;value" + Object out = null; + MultiKeyMap in = (MultiKeyMap)newWithMapValue(source()); + out = in.put(null, null, null, null, null, null); + sink(out); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;MultiKeyMap;true;put;;;MapValue of Argument[-1];ReturnValue;value" + Object out = null; + MultiKeyMap in = (MultiKeyMap)newWithMapValue(source()); + out = in.put(null, null, null, null, null); + sink(out); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;MultiKeyMap;true;put;;;MapValue of Argument[-1];ReturnValue;value" + Object out = null; + MultiKeyMap in = (MultiKeyMap)newWithMapValue(source()); + out = in.put(null, null, null, null); + sink(out); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;MultiKeyMap;true;put;;;MapValue of Argument[-1];ReturnValue;value" + Object out = null; + MultiKeyMap in = (MultiKeyMap)newWithMapValue(source()); + out = in.put(null, null, null); + sink(out); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;MultiKeyMap;true;put;;;MapValue of Argument[-1];ReturnValue;value" + Object out = null; + MultiKeyMap in = (MultiKeyMap)newWithMapValue(source()); + out = in.put(null, null); + sink(out); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;MultiKeyMap;true;removeMultiKey;;;MapValue of Argument[-1];ReturnValue;value" + Object out = null; + MultiKeyMap in = (MultiKeyMap)newWithMapValue(source()); + out = in.removeMultiKey(null, null, null, null, null); + sink(out); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;MultiKeyMap;true;removeMultiKey;;;MapValue of Argument[-1];ReturnValue;value" + Object out = null; + MultiKeyMap in = (MultiKeyMap)newWithMapValue(source()); + out = in.removeMultiKey(null, null, null, null); + sink(out); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;MultiKeyMap;true;removeMultiKey;;;MapValue of Argument[-1];ReturnValue;value" + Object out = null; + MultiKeyMap in = (MultiKeyMap)newWithMapValue(source()); + out = in.removeMultiKey(null, null, null); + sink(out); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;MultiKeyMap;true;removeMultiKey;;;MapValue of Argument[-1];ReturnValue;value" + Object out = null; + MultiKeyMap in = (MultiKeyMap)newWithMapValue(source()); + out = in.removeMultiKey(null, null); + sink(out); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;MultiValueMap;true;getCollection;;;Element of MapValue of Argument[-1];Element of ReturnValue;value" + Collection out = null; + MultiValueMap in = (MultiValueMap)newWithMapValue(newWithElement(source())); + out = in.getCollection(null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;MultiValueMap;true;iterator;();;Element of MapValue of Argument[-1];MapValue of Element of ReturnValue;value" + Iterator out = null; + MultiValueMap in = (MultiValueMap)newWithMapValue(newWithElement(source())); + out = in.iterator(); + sink(getMapValue(getElement(out))); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;MultiValueMap;true;iterator;();;MapKey of Argument[-1];MapKey of Element of ReturnValue;value" + Iterator out = null; + MultiValueMap in = (MultiValueMap)newWithMapKey(source()); + out = in.iterator(); + sink(getMapKey(getElement(out))); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;MultiValueMap;true;iterator;(Object);;Element of MapValue of Argument[-1];Element of ReturnValue;value" + Iterator out = null; + MultiValueMap in = (MultiValueMap)newWithMapValue(newWithElement(source())); + out = in.iterator(null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;MultiValueMap;true;multiValueMap;;;Element of MapValue of Argument[0];Element of MapValue of ReturnValue;value" + MultiValueMap out = null; + Map in = (Map)Map.of(null, newWithElement(source())); + out = MultiValueMap.multiValueMap(in, (Factory)null); + sink(getElement(getMapValue(out))); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;MultiValueMap;true;multiValueMap;;;Element of MapValue of Argument[0];Element of MapValue of ReturnValue;value" + MultiValueMap out = null; + Map in = (Map)Map.of(null, newWithElement(source())); + out = MultiValueMap.multiValueMap(in, (Class)null); + sink(getElement(getMapValue(out))); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;MultiValueMap;true;multiValueMap;;;Element of MapValue of Argument[0];Element of MapValue of ReturnValue;value" + MultiValueMap out = null; + Map in = (Map)Map.of(null, newWithElement(source())); + out = MultiValueMap.multiValueMap(in); + sink(getElement(getMapValue(out))); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;MultiValueMap;true;multiValueMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" + MultiValueMap out = null; + Map in = (Map)Map.of(source(), null); + out = MultiValueMap.multiValueMap(in, (Factory)null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;MultiValueMap;true;multiValueMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" + MultiValueMap out = null; + Map in = (Map)Map.of(source(), null); + out = MultiValueMap.multiValueMap(in, (Class)null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;MultiValueMap;true;multiValueMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" + MultiValueMap out = null; + Map in = (Map)Map.of(source(), null); + out = MultiValueMap.multiValueMap(in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;MultiValueMap;true;putAll;(Map);;Element of MapValue of Argument[0];Element of MapValue of Argument[-1];value" + MultiValueMap out = null; + Map in = (Map)Map.of(null, newWithElement(source())); + out.putAll(in); + sink(getElement(getMapValue(out))); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;MultiValueMap;true;putAll;(Map);;MapValue of Argument[0];Element of MapValue of Argument[-1];value" + MultiValueMap out = null; + Map in = (Map)Map.of(null, source()); + out.putAll(in); + sink(getElement(getMapValue(out))); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;MultiValueMap;true;putAll;(Object,Collection);;Argument[0];MapKey of Argument[-1];value" + MultiValueMap out = null; + Object in = (Object)source(); + out.putAll(in, null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;MultiValueMap;true;putAll;(Object,Collection);;Element of Argument[1];Element of MapValue of Argument[-1];value" + MultiValueMap out = null; + Collection in = (Collection)newWithElement(source()); + out.putAll(null, in); + sink(getElement(getMapValue(out))); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;MultiValueMap;true;values;;;Element of MapValue of Argument[-1];Element of ReturnValue;value" + Collection out = null; + MultiValueMap in = (MultiValueMap)newWithMapValue(newWithElement(source())); + out = in.values(); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;PassiveExpiringMap;true;PassiveExpiringMap;(ExpirationPolicy,Map);;MapKey of Argument[1];MapKey of Argument[-1];value" + PassiveExpiringMap out = null; + Map in = (Map)Map.of(source(), null); + out = new PassiveExpiringMap((PassiveExpiringMap.ExpirationPolicy)null, in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;PassiveExpiringMap;true;PassiveExpiringMap;(ExpirationPolicy,Map);;MapValue of Argument[1];MapValue of Argument[-1];value" + PassiveExpiringMap out = null; + Map in = (Map)Map.of(null, source()); + out = new PassiveExpiringMap((PassiveExpiringMap.ExpirationPolicy)null, in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;PassiveExpiringMap;true;PassiveExpiringMap;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value" + PassiveExpiringMap out = null; + Map in = (Map)Map.of(source(), null); + out = new PassiveExpiringMap(in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;PassiveExpiringMap;true;PassiveExpiringMap;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value" + PassiveExpiringMap out = null; + Map in = (Map)Map.of(null, source()); + out = new PassiveExpiringMap(in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;PassiveExpiringMap;true;PassiveExpiringMap;(long,Map);;MapKey of Argument[1];MapKey of Argument[-1];value" + PassiveExpiringMap out = null; + Map in = (Map)Map.of(source(), null); + out = new PassiveExpiringMap(0L, in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;PassiveExpiringMap;true;PassiveExpiringMap;(long,Map);;MapValue of Argument[1];MapValue of Argument[-1];value" + PassiveExpiringMap out = null; + Map in = (Map)Map.of(null, source()); + out = new PassiveExpiringMap(0L, in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;PassiveExpiringMap;true;PassiveExpiringMap;(long,TimeUnit,Map);;MapKey of Argument[2];MapKey of Argument[-1];value" + PassiveExpiringMap out = null; + Map in = (Map)Map.of(source(), null); + out = new PassiveExpiringMap(0L, null, in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;PassiveExpiringMap;true;PassiveExpiringMap;(long,TimeUnit,Map);;MapValue of Argument[2];MapValue of Argument[-1];value" + PassiveExpiringMap out = null; + Map in = (Map)Map.of(null, source()); + out = new PassiveExpiringMap(0L, null, in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;PredicatedMap;true;predicatedMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" + PredicatedMap out = null; + Map in = (Map)Map.of(source(), null); + out = PredicatedMap.predicatedMap(in, null, null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;PredicatedMap;true;predicatedMap;;;MapValue of Argument[0];MapValue of ReturnValue;value" + PredicatedMap out = null; + Map in = (Map)Map.of(null, source()); + out = PredicatedMap.predicatedMap(in, null, null); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;PredicatedSortedMap;true;predicatedSortedMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" + PredicatedSortedMap out = null; + SortedMap in = (SortedMap)newWithMapKey(source()); + out = PredicatedSortedMap.predicatedSortedMap(in, null, null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;PredicatedSortedMap;true;predicatedSortedMap;;;MapValue of Argument[0];MapValue of ReturnValue;value" + PredicatedSortedMap out = null; + SortedMap in = (SortedMap)newWithMapValue(source()); + out = PredicatedSortedMap.predicatedSortedMap(in, null, null); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;SingletonMap;true;SingletonMap;(Entry);;MapKey of Argument[0];MapKey of Argument[-1];value" + SingletonMap out = null; + Map.Entry in = (Map.Entry)newWithMapKey(source()); + out = new SingletonMap(in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;SingletonMap;true;SingletonMap;(Entry);;MapValue of Argument[0];MapValue of Argument[-1];value" + SingletonMap out = null; + Map.Entry in = (Map.Entry)newWithMapValue(source()); + out = new SingletonMap(in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;SingletonMap;true;SingletonMap;(KeyValue);;MapKey of Argument[0];MapKey of Argument[-1];value" + SingletonMap out = null; + KeyValue in = (KeyValue)newWithMapKey(source()); + out = new SingletonMap(in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;SingletonMap;true;SingletonMap;(KeyValue);;MapValue of Argument[0];MapValue of Argument[-1];value" + SingletonMap out = null; + KeyValue in = (KeyValue)newWithMapValue(source()); + out = new SingletonMap(in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;SingletonMap;true;SingletonMap;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value" + SingletonMap out = null; + Map in = (Map)Map.of(source(), null); + out = new SingletonMap(in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;SingletonMap;true;SingletonMap;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value" + SingletonMap out = null; + Map in = (Map)Map.of(null, source()); + out = new SingletonMap(in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;SingletonMap;true;SingletonMap;(Object,Object);;Argument[0];MapKey of Argument[-1];value" + SingletonMap out = null; + Object in = (Object)source(); + out = new SingletonMap(in, null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;SingletonMap;true;SingletonMap;(Object,Object);;Argument[1];MapValue of Argument[-1];value" + SingletonMap out = null; + Object in = (Object)source(); + out = new SingletonMap(null, in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;SingletonMap;true;setValue;;;Argument[0];MapValue of Argument[-1];value" + SingletonMap out = null; + Object in = (Object)source(); + out.setValue(in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;TransformedMap;true;transformingMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" + TransformedMap out = null; + Map in = (Map)Map.of(source(), null); + out = TransformedMap.transformingMap(in, null, null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;TransformedMap;true;transformingMap;;;MapValue of Argument[0];MapValue of ReturnValue;value" + TransformedMap out = null; + Map in = (Map)Map.of(null, source()); + out = TransformedMap.transformingMap(in, null, null); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;TransformedSortedMap;true;transformingSortedMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" + TransformedSortedMap out = null; + SortedMap in = (SortedMap)newWithMapKey(source()); + out = TransformedSortedMap.transformingSortedMap(in, null, null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;TransformedSortedMap;true;transformingSortedMap;;;MapValue of Argument[0];MapValue of ReturnValue;value" + TransformedSortedMap out = null; + SortedMap in = (SortedMap)newWithMapValue(source()); + out = TransformedSortedMap.transformingSortedMap(in, null, null); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;UnmodifiableEntrySet;true;unmodifiableEntrySet;;;MapKey of Element of Argument[0];MapKey of Element of ReturnValue;value" + Set out = null; + Set in = (Set)newWithElement(newWithMapKey(source())); + out = UnmodifiableEntrySet.unmodifiableEntrySet(in); + sink(getMapKey(getElement(out))); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;UnmodifiableEntrySet;true;unmodifiableEntrySet;;;MapValue of Element of Argument[0];MapValue of Element of ReturnValue;value" + Set out = null; + Set in = (Set)newWithElement(newWithMapValue(source())); + out = UnmodifiableEntrySet.unmodifiableEntrySet(in); + sink(getMapValue(getElement(out))); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;UnmodifiableMap;true;unmodifiableMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" + Map out = null; + Map in = (Map)Map.of(source(), null); + out = UnmodifiableMap.unmodifiableMap(in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;UnmodifiableMap;true;unmodifiableMap;;;MapValue of Argument[0];MapValue of ReturnValue;value" + Map out = null; + Map in = (Map)Map.of(null, source()); + out = UnmodifiableMap.unmodifiableMap(in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;UnmodifiableOrderedMap;true;unmodifiableOrderedMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" + OrderedMap out = null; + OrderedMap in = (OrderedMap)newWithMapKey(source()); + out = UnmodifiableOrderedMap.unmodifiableOrderedMap(in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;UnmodifiableOrderedMap;true;unmodifiableOrderedMap;;;MapValue of Argument[0];MapValue of ReturnValue;value" + OrderedMap out = null; + OrderedMap in = (OrderedMap)newWithMapValue(source()); + out = UnmodifiableOrderedMap.unmodifiableOrderedMap(in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;UnmodifiableSortedMap;true;unmodifiableSortedMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" + SortedMap out = null; + SortedMap in = (SortedMap)newWithMapKey(source()); + out = UnmodifiableSortedMap.unmodifiableSortedMap(in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;UnmodifiableSortedMap;true;unmodifiableSortedMap;;;MapValue of Argument[0];MapValue of ReturnValue;value" + SortedMap out = null; + SortedMap in = (SortedMap)newWithMapValue(source()); + out = UnmodifiableSortedMap.unmodifiableSortedMap(in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.multimap;ArrayListValuedHashMap;true;ArrayListValuedHashMap;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value" + ArrayListValuedHashMap out = null; + Map in = (Map)Map.of(source(), null); + out = new ArrayListValuedHashMap(in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.multimap;ArrayListValuedHashMap;true;ArrayListValuedHashMap;(Map);;MapValue of Argument[0];Element of MapValue of Argument[-1];value" + ArrayListValuedHashMap out = null; + Map in = (Map)Map.of(null, source()); + out = new ArrayListValuedHashMap(in); + sink(getElement(getMapValue(out))); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.multimap;ArrayListValuedHashMap;true;ArrayListValuedHashMap;(MultiValuedMap);;Element of MapValue of Argument[0];Element of MapValue of Argument[-1];value" + ArrayListValuedHashMap out = null; + MultiValuedMap in = (MultiValuedMap)newWithMapValue(newWithElement(source())); + out = new ArrayListValuedHashMap(in); + sink(getElement(getMapValue(out))); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.multimap;ArrayListValuedHashMap;true;ArrayListValuedHashMap;(MultiValuedMap);;MapKey of Argument[0];MapKey of Argument[-1];value" + ArrayListValuedHashMap out = null; + MultiValuedMap in = (MultiValuedMap)newWithMapKey(source()); + out = new ArrayListValuedHashMap(in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.multimap;HashSetValuedHashMap;true;HashSetValuedHashMap;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value" + HashSetValuedHashMap out = null; + Map in = (Map)Map.of(source(), null); + out = new HashSetValuedHashMap(in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.multimap;HashSetValuedHashMap;true;HashSetValuedHashMap;(Map);;MapValue of Argument[0];Element of MapValue of Argument[-1];value" + HashSetValuedHashMap out = null; + Map in = (Map)Map.of(null, source()); + out = new HashSetValuedHashMap(in); + sink(getElement(getMapValue(out))); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.multimap;HashSetValuedHashMap;true;HashSetValuedHashMap;(MultiValuedMap);;Element of MapValue of Argument[0];Element of MapValue of Argument[-1];value" + HashSetValuedHashMap out = null; + MultiValuedMap in = (MultiValuedMap)newWithMapValue(newWithElement(source())); + out = new HashSetValuedHashMap(in); + sink(getElement(getMapValue(out))); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.multimap;HashSetValuedHashMap;true;HashSetValuedHashMap;(MultiValuedMap);;MapKey of Argument[0];MapKey of Argument[-1];value" + HashSetValuedHashMap out = null; + MultiValuedMap in = (MultiValuedMap)newWithMapKey(source()); + out = new HashSetValuedHashMap(in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.multimap;TransformedMultiValuedMap;true;transformingMap;;;Element of MapValue of Argument[0];Element of MapValue of ReturnValue;value" + TransformedMultiValuedMap out = null; + MultiValuedMap in = (MultiValuedMap)newWithMapValue(newWithElement(source())); + out = TransformedMultiValuedMap.transformingMap(in, null, null); + sink(getElement(getMapValue(out))); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.multimap;TransformedMultiValuedMap;true;transformingMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" + TransformedMultiValuedMap out = null; + MultiValuedMap in = (MultiValuedMap)newWithMapKey(source()); + out = TransformedMultiValuedMap.transformingMap(in, null, null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.multimap;UnmodifiableMultiValuedMap;true;unmodifiableMultiValuedMap;(MultiValuedMap);;Element of MapValue of Argument[0];Element of MapValue of ReturnValue;value" + UnmodifiableMultiValuedMap out = null; + MultiValuedMap in = (MultiValuedMap)newWithMapValue(newWithElement(source())); + out = UnmodifiableMultiValuedMap.unmodifiableMultiValuedMap(in); + sink(getElement(getMapValue(out))); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.multimap;UnmodifiableMultiValuedMap;true;unmodifiableMultiValuedMap;(MultiValuedMap);;MapKey of Argument[0];MapKey of ReturnValue;value" + UnmodifiableMultiValuedMap out = null; + MultiValuedMap in = (MultiValuedMap)newWithMapKey(source()); + out = UnmodifiableMultiValuedMap.unmodifiableMultiValuedMap(in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.multiset;HashMultiSet;true;HashMultiSet;;;Element of Argument[0];Element of Argument[-1];value" + HashMultiSet out = null; + Collection in = (Collection)newWithElement(source()); + out = new HashMultiSet(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.multiset;PredicatedMultiSet;true;predicatedMultiSet;;;Element of Argument[0];Element of ReturnValue;value" + PredicatedMultiSet out = null; + MultiSet in = (MultiSet)newWithElement(source()); + out = PredicatedMultiSet.predicatedMultiSet(in, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.multiset;SynchronizedMultiSet;true;synchronizedMultiSet;;;Element of Argument[0];Element of ReturnValue;value" + SynchronizedMultiSet out = null; + MultiSet in = (MultiSet)newWithElement(source()); + out = SynchronizedMultiSet.synchronizedMultiSet(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.multiset;UnmodifiableMultiSet;true;unmodifiableMultiSet;;;Element of Argument[0];Element of ReturnValue;value" + MultiSet out = null; + MultiSet in = (MultiSet)newWithElement(source()); + out = UnmodifiableMultiSet.unmodifiableMultiSet(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.properties;AbstractPropertiesFactory;true;load;(ClassLoader,String);;Argument[1];ReturnValue;taint" + Properties out = null; + String in = (String)source(); + AbstractPropertiesFactory instance = null; + out = instance.load(null, in); + sink(out); // $ hasTaintFlow + } + { + // "org.apache.commons.collections4.properties;AbstractPropertiesFactory;true;load;(File);;Argument[0];ReturnValue;taint" + Properties out = null; + File in = (File)source(); + AbstractPropertiesFactory instance = null; + out = instance.load(in); + sink(out); // $ hasTaintFlow + } + { + // "org.apache.commons.collections4.properties;AbstractPropertiesFactory;true;load;(InputStream);;Argument[0];ReturnValue;taint" + Properties out = null; + InputStream in = (InputStream)source(); + AbstractPropertiesFactory instance = null; + out = instance.load(in); + sink(out); // $ hasTaintFlow + } + { + // "org.apache.commons.collections4.properties;AbstractPropertiesFactory;true;load;(Path);;Argument[0];ReturnValue;taint" + Properties out = null; + Path in = (Path)source(); + AbstractPropertiesFactory instance = null; + out = instance.load(in); + sink(out); // $ hasTaintFlow + } + { + // "org.apache.commons.collections4.properties;AbstractPropertiesFactory;true;load;(Reader);;Argument[0];ReturnValue;taint" + Properties out = null; + Reader in = (Reader)source(); + AbstractPropertiesFactory instance = null; + out = instance.load(in); + sink(out); // $ hasTaintFlow + } + { + // "org.apache.commons.collections4.properties;AbstractPropertiesFactory;true;load;(String);;Argument[0];ReturnValue;taint" + Properties out = null; + String in = (String)source(); + AbstractPropertiesFactory instance = null; + out = instance.load(in); + sink(out); // $ hasTaintFlow + } + { + // "org.apache.commons.collections4.properties;AbstractPropertiesFactory;true;load;(URI);;Argument[0];ReturnValue;taint" + Properties out = null; + URI in = (URI)source(); + AbstractPropertiesFactory instance = null; + out = instance.load(in); + sink(out); // $ hasTaintFlow + } + { + // "org.apache.commons.collections4.properties;AbstractPropertiesFactory;true;load;(URL);;Argument[0];ReturnValue;taint" + Properties out = null; + URL in = (URL)source(); + AbstractPropertiesFactory instance = null; + out = instance.load(in); + sink(out); // $ hasTaintFlow + } + { + // "org.apache.commons.collections4.queue;CircularFifoQueue;true;CircularFifoQueue;(Collection);;Element of Argument[0];Element of Argument[-1];value" + CircularFifoQueue out = null; + Collection in = (Collection)newWithElement(source()); + out = new CircularFifoQueue(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.queue;CircularFifoQueue;true;get;;;Element of Argument[-1];ReturnValue;value" + Object out = null; + CircularFifoQueue in = (CircularFifoQueue)newWithElement(source()); + out = in.get(0); + sink(out); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.queue;PredicatedQueue;true;predicatedQueue;;;Element of Argument[0];Element of ReturnValue;value" + PredicatedQueue out = null; + Queue in = (Queue)newWithElement(source()); + out = PredicatedQueue.predicatedQueue(in, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.queue;SynchronizedQueue;true;synchronizedQueue;;;Element of Argument[0];Element of ReturnValue;value" + SynchronizedQueue out = null; + Queue in = (Queue)newWithElement(source()); + out = SynchronizedQueue.synchronizedQueue(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.queue;TransformedQueue;true;transformingQueue;;;Element of Argument[0];Element of ReturnValue;value" + TransformedQueue out = null; + Queue in = (Queue)newWithElement(source()); + out = TransformedQueue.transformingQueue(in, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.queue;UnmodifiableQueue;true;unmodifiableQueue;;;Element of Argument[0];Element of ReturnValue;value" + Queue out = null; + Queue in = (Queue)newWithElement(source()); + out = UnmodifiableQueue.unmodifiableQueue(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.set;CompositeSet$SetMutator;true;add;;;Argument[2];Element of Argument[0];value" + CompositeSet out = null; + Object in = (Object)source(); + CompositeSet.SetMutator instance = null; + instance.add(out, null, in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.set;CompositeSet$SetMutator;true;add;;;Argument[2];Element of Element of Argument[1];value" + List out = null; + Object in = (Object)source(); + CompositeSet.SetMutator instance = null; + instance.add(null, out, in); + sink(getElement(getElement(out))); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.set;CompositeSet$SetMutator;true;addAll;;;Element of Argument[2];Element of Argument[0];value" + CompositeSet out = null; + Collection in = (Collection)newWithElement(source()); + CompositeSet.SetMutator instance = null; + instance.addAll(out, null, in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.set;CompositeSet$SetMutator;true;addAll;;;Element of Argument[2];Element of Element of Argument[1];value" + List out = null; + Collection in = (Collection)newWithElement(source()); + CompositeSet.SetMutator instance = null; + instance.addAll(null, out, in); + sink(getElement(getElement(out))); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.set;CompositeSet;true;CompositeSet;(Set);;Element of Argument[0];Element of Argument[-1];value" + CompositeSet out = null; + Set in = (Set)newWithElement(source()); + out = new CompositeSet(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.set;CompositeSet;true;CompositeSet;(Set[]);;Element of ArrayElement of Argument[0];Element of Argument[-1];value" + CompositeSet out = null; + Set[] in = (Set[])new Set[]{(Set)newWithElement(source())}; + out = new CompositeSet(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.set;CompositeSet;true;addComposited;(Set);;Element of Argument[0];Element of Argument[-1];value" + CompositeSet out = null; + Set in = (Set)newWithElement(source()); + out.addComposited(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.set;CompositeSet;true;addComposited;(Set,Set);;Element of Argument[0];Element of Argument[-1];value" + CompositeSet out = null; + Set in = (Set)newWithElement(source()); + out.addComposited(in, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.set;CompositeSet;true;addComposited;(Set,Set);;Element of Argument[1];Element of Argument[-1];value" + CompositeSet out = null; + Set in = (Set)newWithElement(source()); + out.addComposited(null, in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.set;CompositeSet;true;addComposited;(Set[]);;Element of ArrayElement of Argument[0];Element of Argument[-1];value" + CompositeSet out = null; + Set[] in = (Set[])new Set[]{(Set)newWithElement(source())}; + out.addComposited(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.set;CompositeSet;true;getSets;;;Element of Argument[-1];Element of Element of ReturnValue;value" + List out = null; + CompositeSet in = (CompositeSet)newWithElement(source()); + out = in.getSets(); + sink(getElement(getElement(out))); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.set;CompositeSet;true;toSet;;;Element of Argument[-1];Element of ReturnValue;value" + Set out = null; + CompositeSet in = (CompositeSet)newWithElement(source()); + out = in.toSet(); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.set;ListOrderedSet;true;add;;;Argument[1];Element of Argument[-1];value" + ListOrderedSet out = null; + Object in = (Object)source(); + out.add(0, in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.set;ListOrderedSet;true;addAll;;;Element of Argument[1];Element of Argument[-1];value" + ListOrderedSet out = null; + Collection in = (Collection)List.of(source()); + out.addAll(0, in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.set;ListOrderedSet;true;asList;;;Element of Argument[-1];Element of ReturnValue;value" + List out = null; + ListOrderedSet in = (ListOrderedSet)newWithElement(source()); + out = in.asList(); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.set;ListOrderedSet;true;get;;;Element of Argument[-1];ReturnValue;value" + Object out = null; + ListOrderedSet in = (ListOrderedSet)newWithElement(source()); + out = in.get(0); + sink(out); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.set;ListOrderedSet;true;listOrderedSet;(List);;Element of Argument[0];Element of ReturnValue;value" + ListOrderedSet out = null; + List in = (List)List.of(source()); + out = ListOrderedSet.listOrderedSet(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.set;ListOrderedSet;true;listOrderedSet;(Set);;Element of Argument[0];Element of ReturnValue;value" + ListOrderedSet out = null; + Set in = (Set)newWithElement(source()); + out = ListOrderedSet.listOrderedSet(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.set;MapBackedSet;true;mapBackedSet;;;MapKey of Argument[0];Element of ReturnValue;value" + MapBackedSet out = null; + Map in = (Map)Map.of(source(), null); + out = MapBackedSet.mapBackedSet(in, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.set;MapBackedSet;true;mapBackedSet;;;MapKey of Argument[0];Element of ReturnValue;value" + MapBackedSet out = null; + Map in = (Map)Map.of(source(), null); + out = MapBackedSet.mapBackedSet(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.set;PredicatedNavigableSet;true;predicatedNavigableSet;;;Element of Argument[0];Element of ReturnValue;value" + PredicatedNavigableSet out = null; + NavigableSet in = (NavigableSet)newWithElement(source()); + out = PredicatedNavigableSet.predicatedNavigableSet(in, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.set;PredicatedSet;true;predicatedSet;;;Element of Argument[0];Element of ReturnValue;value" + PredicatedSet out = null; + Set in = (Set)newWithElement(source()); + out = PredicatedSet.predicatedSet(in, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.set;PredicatedSortedSet;true;predicatedSortedSet;;;Element of Argument[0];Element of ReturnValue;value" + PredicatedSortedSet out = null; + SortedSet in = (SortedSet)newWithElement(source()); + out = PredicatedSortedSet.predicatedSortedSet(in, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.set;TransformedNavigableSet;true;transformingNavigableSet;;;Element of Argument[0];Element of ReturnValue;value" + TransformedNavigableSet out = null; + NavigableSet in = (NavigableSet)newWithElement(source()); + out = TransformedNavigableSet.transformingNavigableSet(in, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.set;TransformedSet;true;transformingSet;;;Element of Argument[0];Element of ReturnValue;value" + TransformedSet out = null; + Set in = (Set)newWithElement(source()); + out = TransformedSet.transformingSet(in, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.set;TransformedSortedSet;true;transformingSortedSet;;;Element of Argument[0];Element of ReturnValue;value" + TransformedSortedSet out = null; + SortedSet in = (SortedSet)newWithElement(source()); + out = TransformedSortedSet.transformingSortedSet(in, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.set;UnmodifiableNavigableSet;true;unmodifiableNavigableSet;;;Element of Argument[0];Element of ReturnValue;value" + NavigableSet out = null; + NavigableSet in = (NavigableSet)newWithElement(source()); + out = UnmodifiableNavigableSet.unmodifiableNavigableSet(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.set;UnmodifiableSet;true;unmodifiableSet;;;Element of Argument[0];Element of ReturnValue;value" + Set out = null; + Set in = (Set)newWithElement(source()); + out = UnmodifiableSet.unmodifiableSet(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.set;UnmodifiableSortedSet;true;unmodifiableSortedSet;;;Element of Argument[0];Element of ReturnValue;value" + SortedSet out = null; + SortedSet in = (SortedSet)newWithElement(source()); + out = UnmodifiableSortedSet.unmodifiableSortedSet(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.splitmap;AbstractIterableGetMapDecorator;true;AbstractIterableGetMapDecorator;;;MapKey of Argument[0];MapKey of Argument[-1];value" + AbstractIterableGetMapDecorator out = null; + Map in = (Map)Map.of(source(), null); + out = new AbstractIterableGetMapDecorator(in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.splitmap;AbstractIterableGetMapDecorator;true;AbstractIterableGetMapDecorator;;;MapValue of Argument[0];MapValue of Argument[-1];value" + AbstractIterableGetMapDecorator out = null; + Map in = (Map)Map.of(null, source()); + out = new AbstractIterableGetMapDecorator(in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.splitmap;TransformedSplitMap;true;transformingMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" + TransformedSplitMap out = null; + Map in = (Map)Map.of(source(), null); + out = TransformedSplitMap.transformingMap(in, null, null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.splitmap;TransformedSplitMap;true;transformingMap;;;MapValue of Argument[0];MapValue of ReturnValue;value" + TransformedSplitMap out = null; + Map in = (Map)Map.of(null, source()); + out = TransformedSplitMap.transformingMap(in, null, null); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.trie;PatriciaTrie;true;PatriciaTrie;;;MapKey of Argument[0];MapKey of Argument[-1];value" + PatriciaTrie out = null; + Map in = (Map)Map.of(source(), null); + out = new PatriciaTrie(in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.trie;PatriciaTrie;true;PatriciaTrie;;;MapValue of Argument[0];MapValue of Argument[-1];value" + PatriciaTrie out = null; + Map in = (Map)Map.of(null, source()); + out = new PatriciaTrie(in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.trie;UnmodifiableTrie;true;unmodifiableTrie;;;MapKey of Argument[0];MapKey of ReturnValue;value" + Trie out = null; + Trie in = (Trie)newWithMapKey(source()); + out = UnmodifiableTrie.unmodifiableTrie(in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.trie;UnmodifiableTrie;true;unmodifiableTrie;;;MapValue of Argument[0];MapValue of ReturnValue;value" + Trie out = null; + Trie in = (Trie)newWithMapValue(source()); + out = UnmodifiableTrie.unmodifiableTrie(in); + sink(getMapValue(out)); // $ hasValueFlow + } + + } + +} \ No newline at end of file diff --git a/java/ql/test/library-tests/frameworks/apache-collections/test.ql b/java/ql/test/library-tests/frameworks/apache-collections/test.ql index 04f5a93a949..e2a37883614 100644 --- a/java/ql/test/library-tests/frameworks/apache-collections/test.ql +++ b/java/ql/test/library-tests/frameworks/apache-collections/test.ql @@ -1,7 +1,4 @@ import java -import semmle.code.java.dataflow.DataFlow -import semmle.code.java.dataflow.ExternalFlow -import semmle.code.java.dataflow.TaintTracking import TestUtilities.InlineFlowTest class SummaryModelTest extends SummaryModelCsv { @@ -9,6 +6,14 @@ class SummaryModelTest extends SummaryModelCsv { row = [ //"package;type;overrides;name;signature;ext;inputspec;outputspec;kind", + "generatedtest;Test;false;newWithElement;;;Argument[0];Element of ReturnValue;value", + "generatedtest;Test;false;getElement;;;Element of Argument[0];ReturnValue;value", + "generatedtest;Test;false;newWithArrayElement;;;Argument[0];ArrayElement of ReturnValue;value", + "generatedtest;Test;false;getArrayElement;;;ArrayElement of Argument[0];ReturnValue;value", + "generatedtest;Test;false;newWithMapValue;;;Argument[0];MapValue of ReturnValue;value", + "generatedtest;Test;false;getMapValue;;;MapValue of Argument[0];ReturnValue;value", + "generatedtest;Test;false;newWithMapKey;;;Argument[0];MapKey of ReturnValue;value", + "generatedtest;Test;false;getMapKey;;;MapKey of Argument[0];ReturnValue;value", "generatedtest;Test;false;newRBWithMapValue;;;Argument[0];MapValue of ReturnValue;value", "generatedtest;Test;false;newRBWithMapKey;;;Argument[0];MapKey of ReturnValue;value" ] From 53ee465726fbc8840dd505c482192f37783aea62 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Mon, 20 Sep 2021 07:24:43 +0100 Subject: [PATCH 627/741] Fix errors in generated tests that stop compilation --- .../frameworks/apache-collections/TestNew.java | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/java/ql/test/library-tests/frameworks/apache-collections/TestNew.java b/java/ql/test/library-tests/frameworks/apache-collections/TestNew.java index 6ee7643a1a3..83a99eeda59 100644 --- a/java/ql/test/library-tests/frameworks/apache-collections/TestNew.java +++ b/java/ql/test/library-tests/frameworks/apache-collections/TestNew.java @@ -92,7 +92,6 @@ import org.apache.commons.collections4.iterators.UnmodifiableListIterator; import org.apache.commons.collections4.iterators.UnmodifiableMapIterator; import org.apache.commons.collections4.iterators.UnmodifiableOrderedMapIterator; import org.apache.commons.collections4.iterators.ZippingIterator; -import org.apache.commons.collections4.keyvalue.K; import org.apache.commons.collections4.keyvalue.MultiKey; import org.apache.commons.collections4.list.AbstractLinkedList; import org.apache.commons.collections4.list.CursorableLinkedList; @@ -1751,7 +1750,7 @@ public class TestNew { { // "org.apache.commons.collections4.map;DefaultedMap;true;defaultedMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" Map out = null; - Map in = (Map)Map.of(source(), null); + Map in = (Map)Map.of(source(), null); out = DefaultedMap.defaultedMap(in, (Transformer)null); sink(getMapKey(out)); // $ hasValueFlow } @@ -1765,14 +1764,14 @@ public class TestNew { { // "org.apache.commons.collections4.map;DefaultedMap;true;defaultedMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" DefaultedMap out = null; - Map in = (Map)Map.of(source(), null); + Map in = (Map)Map.of(source(), null); out = DefaultedMap.defaultedMap(in, (Factory)null); sink(getMapKey(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;DefaultedMap;true;defaultedMap;;;MapValue of Argument[0];MapValue of ReturnValue;value" Map out = null; - Map in = (Map)Map.of(null, source()); + Map in = (Map)Map.of(null, source()); out = DefaultedMap.defaultedMap(in, (Transformer)null); sink(getMapValue(out)); // $ hasValueFlow } @@ -1786,7 +1785,7 @@ public class TestNew { { // "org.apache.commons.collections4.map;DefaultedMap;true;defaultedMap;;;MapValue of Argument[0];MapValue of ReturnValue;value" DefaultedMap out = null; - Map in = (Map)Map.of(null, source()); + Map in = (Map)Map.of(null, source()); out = DefaultedMap.defaultedMap(in, (Factory)null); sink(getMapValue(out)); // $ hasValueFlow } From 15161d8867485e98cfb54ebdb5b84be495b42f90 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Mon, 20 Sep 2021 07:32:15 +0100 Subject: [PATCH 628/741] Make concrete subclasses of abstract classes --- .../apache-collections/TestNew.java | 30 +++++++++++++++---- 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/java/ql/test/library-tests/frameworks/apache-collections/TestNew.java b/java/ql/test/library-tests/frameworks/apache-collections/TestNew.java index 83a99eeda59..d281a7dc5da 100644 --- a/java/ql/test/library-tests/frameworks/apache-collections/TestNew.java +++ b/java/ql/test/library-tests/frameworks/apache-collections/TestNew.java @@ -285,14 +285,14 @@ public class TestNew { // "org.apache.commons.collections4.bidimap;AbstractSortedBidiMapDecorator;true;AbstractSortedBidiMapDecorator;;;MapKey of Argument[0];MapKey of Argument[-1];value" AbstractSortedBidiMapDecorator out = null; SortedBidiMap in = (SortedBidiMap)newWithMapKey(source()); - out = new AbstractSortedBidiMapDecorator(in); + out = new MyAbstractSortedBidiMapDecorator(in); sink(getMapKey(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.bidimap;AbstractSortedBidiMapDecorator;true;AbstractSortedBidiMapDecorator;;;MapValue of Argument[0];MapValue of Argument[-1];value" AbstractSortedBidiMapDecorator out = null; SortedBidiMap in = (SortedBidiMap)newWithMapValue(source()); - out = new AbstractSortedBidiMapDecorator(in); + out = new MyAbstractSortedBidiMapDecorator(in); sink(getMapValue(out)); // $ hasValueFlow } { @@ -1575,28 +1575,28 @@ public class TestNew { // "org.apache.commons.collections4.map;AbstractOrderedMapDecorator;true;AbstractOrderedMapDecorator;(OrderedMap);;MapKey of Argument[0];MapKey of Argument[-1];value" AbstractOrderedMapDecorator out = null; OrderedMap in = (OrderedMap)newWithMapKey(source()); - out = new AbstractOrderedMapDecorator(in); + out = new MyAbstractOrderedMapDecorator(in); sink(getMapKey(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;AbstractOrderedMapDecorator;true;AbstractOrderedMapDecorator;(OrderedMap);;MapValue of Argument[0];MapValue of Argument[-1];value" AbstractOrderedMapDecorator out = null; OrderedMap in = (OrderedMap)newWithMapValue(source()); - out = new AbstractOrderedMapDecorator(in); + out = new MyAbstractOrderedMapDecorator(in); sink(getMapValue(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;AbstractSortedMapDecorator;true;AbstractSortedMapDecorator;(SortedMap);;MapKey of Argument[0];MapKey of Argument[-1];value" AbstractSortedMapDecorator out = null; SortedMap in = (SortedMap)newWithMapKey(source()); - out = new AbstractSortedMapDecorator(in); + out = new MyAbstractSortedMapDecorator(in); sink(getMapKey(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;AbstractSortedMapDecorator;true;AbstractSortedMapDecorator;(SortedMap);;MapValue of Argument[0];MapValue of Argument[-1];value" AbstractSortedMapDecorator out = null; SortedMap in = (SortedMap)newWithMapValue(source()); - out = new AbstractSortedMapDecorator(in); + out = new MyAbstractSortedMapDecorator(in); sink(getMapValue(out)); // $ hasValueFlow } { @@ -3128,4 +3128,22 @@ public class TestNew { } + class MyAbstractSortedBidiMapDecorator extends AbstractSortedBidiMapDecorator { + public MyAbstractSortedBidiMapDecorator(final SortedBidiMap map) { + super(map); + } + } + + class MyAbstractOrderedMapDecorator extends AbstractOrderedMapDecorator { + public MyAbstractOrderedMapDecorator(final OrderedMap map) { + super(map); + } + } + + class MyAbstractSortedMapDecorator extends AbstractSortedMapDecorator { + public MyAbstractSortedMapDecorator(final SortedMap map) { + super(map); + } + } + } \ No newline at end of file From 0a92b04c8ba542c4680729d13defe515c90e0c99 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Mon, 27 Sep 2021 07:12:10 +0100 Subject: [PATCH 629/741] Fix up automatically generated tests --- .../apache-collections/TestNew.java | 1047 ++++++++++------- 1 file changed, 602 insertions(+), 445 deletions(-) diff --git a/java/ql/test/library-tests/frameworks/apache-collections/TestNew.java b/java/ql/test/library-tests/frameworks/apache-collections/TestNew.java index d281a7dc5da..760e890a112 100644 --- a/java/ql/test/library-tests/frameworks/apache-collections/TestNew.java +++ b/java/ql/test/library-tests/frameworks/apache-collections/TestNew.java @@ -9,31 +9,25 @@ import java.nio.file.Path; import java.util.Collection; import java.util.Comparator; import java.util.Enumeration; +import java.util.HashSet; import java.util.Iterator; +import java.util.LinkedList; import java.util.List; import java.util.ListIterator; import java.util.Map; import java.util.NavigableSet; import java.util.Properties; import java.util.Queue; +import java.util.ResourceBundle; import java.util.Set; import java.util.SortedMap; import java.util.SortedSet; +import java.util.StringTokenizer; +import java.util.TreeMap; +import java.util.TreeSet; +import java.util.Vector; +import org.apache.commons.collections4.ArrayStack; import org.apache.commons.collections4.Bag; -import org.apache.commons.collections4.BidiMap; -import org.apache.commons.collections4.BoundedCollection; -import org.apache.commons.collections4.Factory; -import org.apache.commons.collections4.KeyValue; -import org.apache.commons.collections4.MapIterator; -import org.apache.commons.collections4.MultiSet; -import org.apache.commons.collections4.MultiValuedMap; -import org.apache.commons.collections4.OrderedBidiMap; -import org.apache.commons.collections4.OrderedMap; -import org.apache.commons.collections4.OrderedMapIterator; -import org.apache.commons.collections4.SortedBag; -import org.apache.commons.collections4.SortedBidiMap; -import org.apache.commons.collections4.Transformer; -import org.apache.commons.collections4.Trie; import org.apache.commons.collections4.bag.CollectionBag; import org.apache.commons.collections4.bag.CollectionSortedBag; import org.apache.commons.collections4.bag.HashBag; @@ -46,6 +40,8 @@ import org.apache.commons.collections4.bag.TransformedSortedBag; import org.apache.commons.collections4.bag.TreeBag; import org.apache.commons.collections4.bag.UnmodifiableBag; import org.apache.commons.collections4.bag.UnmodifiableSortedBag; +import org.apache.commons.collections4.BagUtils; +import org.apache.commons.collections4.BidiMap; import org.apache.commons.collections4.bidimap.AbstractSortedBidiMapDecorator; import org.apache.commons.collections4.bidimap.DualHashBidiMap; import org.apache.commons.collections4.bidimap.DualLinkedHashBidiMap; @@ -54,6 +50,7 @@ import org.apache.commons.collections4.bidimap.TreeBidiMap; import org.apache.commons.collections4.bidimap.UnmodifiableBidiMap; import org.apache.commons.collections4.bidimap.UnmodifiableOrderedBidiMap; import org.apache.commons.collections4.bidimap.UnmodifiableSortedBidiMap; +import org.apache.commons.collections4.BoundedCollection; import org.apache.commons.collections4.collection.CompositeCollection; import org.apache.commons.collections4.collection.IndexedCollection; import org.apache.commons.collections4.collection.PredicatedCollection; @@ -61,6 +58,15 @@ import org.apache.commons.collections4.collection.SynchronizedCollection; import org.apache.commons.collections4.collection.TransformedCollection; import org.apache.commons.collections4.collection.UnmodifiableBoundedCollection; import org.apache.commons.collections4.collection.UnmodifiableCollection; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.collections4.EnumerationUtils; +import org.apache.commons.collections4.Factory; +import org.apache.commons.collections4.FluentIterable; +import org.apache.commons.collections4.Get; +import org.apache.commons.collections4.IterableGet; +import org.apache.commons.collections4.IterableMap; +import org.apache.commons.collections4.IterableSortedMap; +import org.apache.commons.collections4.IterableUtils; import org.apache.commons.collections4.iterators.AbstractListIteratorDecorator; import org.apache.commons.collections4.iterators.AbstractMapIteratorDecorator; import org.apache.commons.collections4.iterators.AbstractOrderedMapIteratorDecorator; @@ -92,7 +98,16 @@ import org.apache.commons.collections4.iterators.UnmodifiableListIterator; import org.apache.commons.collections4.iterators.UnmodifiableMapIterator; import org.apache.commons.collections4.iterators.UnmodifiableOrderedMapIterator; import org.apache.commons.collections4.iterators.ZippingIterator; +import org.apache.commons.collections4.IteratorUtils; +import org.apache.commons.collections4.KeyValue; +import org.apache.commons.collections4.keyvalue.AbstractKeyValue; +import org.apache.commons.collections4.keyvalue.AbstractMapEntry; +import org.apache.commons.collections4.keyvalue.AbstractMapEntryDecorator; +import org.apache.commons.collections4.keyvalue.DefaultKeyValue; +import org.apache.commons.collections4.keyvalue.DefaultMapEntry; import org.apache.commons.collections4.keyvalue.MultiKey; +import org.apache.commons.collections4.keyvalue.TiedMapEntry; +import org.apache.commons.collections4.keyvalue.UnmodifiableMapEntry; import org.apache.commons.collections4.list.AbstractLinkedList; import org.apache.commons.collections4.list.CursorableLinkedList; import org.apache.commons.collections4.list.FixedSizeList; @@ -104,6 +119,11 @@ import org.apache.commons.collections4.list.SetUniqueList; import org.apache.commons.collections4.list.TransformedList; import org.apache.commons.collections4.list.TreeList; import org.apache.commons.collections4.list.UnmodifiableList; +import org.apache.commons.collections4.ListUtils; +import org.apache.commons.collections4.ListValuedMap; +import org.apache.commons.collections4.map.AbstractHashedMap; +import org.apache.commons.collections4.map.AbstractIterableMap; +import org.apache.commons.collections4.map.AbstractMapDecorator; import org.apache.commons.collections4.map.AbstractOrderedMapDecorator; import org.apache.commons.collections4.map.AbstractSortedMapDecorator; import org.apache.commons.collections4.map.CaseInsensitiveMap; @@ -114,11 +134,11 @@ import org.apache.commons.collections4.map.FixedSizeMap; import org.apache.commons.collections4.map.FixedSizeSortedMap; import org.apache.commons.collections4.map.Flat3Map; import org.apache.commons.collections4.map.HashedMap; -import org.apache.commons.collections4.map.LRUMap; import org.apache.commons.collections4.map.LazyMap; import org.apache.commons.collections4.map.LazySortedMap; import org.apache.commons.collections4.map.LinkedMap; import org.apache.commons.collections4.map.ListOrderedMap; +import org.apache.commons.collections4.map.LRUMap; import org.apache.commons.collections4.map.MultiKeyMap; import org.apache.commons.collections4.map.MultiValueMap; import org.apache.commons.collections4.map.PassiveExpiringMap; @@ -131,20 +151,37 @@ import org.apache.commons.collections4.map.UnmodifiableEntrySet; import org.apache.commons.collections4.map.UnmodifiableMap; import org.apache.commons.collections4.map.UnmodifiableOrderedMap; import org.apache.commons.collections4.map.UnmodifiableSortedMap; +import org.apache.commons.collections4.MapIterator; +import org.apache.commons.collections4.MapUtils; +import org.apache.commons.collections4.MultiMap; import org.apache.commons.collections4.multimap.ArrayListValuedHashMap; import org.apache.commons.collections4.multimap.HashSetValuedHashMap; import org.apache.commons.collections4.multimap.TransformedMultiValuedMap; import org.apache.commons.collections4.multimap.UnmodifiableMultiValuedMap; +import org.apache.commons.collections4.MultiMapUtils; +import org.apache.commons.collections4.MultiSet; +import org.apache.commons.collections4.multiset.HashMultiSet; import org.apache.commons.collections4.multiset.HashMultiSet; import org.apache.commons.collections4.multiset.PredicatedMultiSet; import org.apache.commons.collections4.multiset.SynchronizedMultiSet; import org.apache.commons.collections4.multiset.UnmodifiableMultiSet; +import org.apache.commons.collections4.MultiSetUtils; +import org.apache.commons.collections4.MultiValuedMap; +import org.apache.commons.collections4.OrderedBidiMap; +import org.apache.commons.collections4.OrderedIterator; +import org.apache.commons.collections4.OrderedMap; +import org.apache.commons.collections4.OrderedMapIterator; +import org.apache.commons.collections4.Predicate; import org.apache.commons.collections4.properties.AbstractPropertiesFactory; +import org.apache.commons.collections4.Put; import org.apache.commons.collections4.queue.CircularFifoQueue; import org.apache.commons.collections4.queue.PredicatedQueue; import org.apache.commons.collections4.queue.SynchronizedQueue; import org.apache.commons.collections4.queue.TransformedQueue; import org.apache.commons.collections4.queue.UnmodifiableQueue; +import org.apache.commons.collections4.QueueUtils; +import org.apache.commons.collections4.ResettableIterator; +import org.apache.commons.collections4.ResettableListIterator; import org.apache.commons.collections4.set.CompositeSet; import org.apache.commons.collections4.set.ListOrderedSet; import org.apache.commons.collections4.set.MapBackedSet; @@ -157,10 +194,18 @@ import org.apache.commons.collections4.set.TransformedSortedSet; import org.apache.commons.collections4.set.UnmodifiableNavigableSet; import org.apache.commons.collections4.set.UnmodifiableSet; import org.apache.commons.collections4.set.UnmodifiableSortedSet; +import org.apache.commons.collections4.SetUtils; +import org.apache.commons.collections4.SetValuedMap; +import org.apache.commons.collections4.SortedBag; +import org.apache.commons.collections4.SortedBidiMap; import org.apache.commons.collections4.splitmap.AbstractIterableGetMapDecorator; import org.apache.commons.collections4.splitmap.TransformedSplitMap; +import org.apache.commons.collections4.SplitMapUtils; +import org.apache.commons.collections4.Transformer; +import org.apache.commons.collections4.Trie; import org.apache.commons.collections4.trie.PatriciaTrie; import org.apache.commons.collections4.trie.UnmodifiableTrie; +import org.apache.commons.collections4.TrieUtils; // Test case generated by GenerateFlowTestCase.ql public class TestNew { @@ -170,14 +215,83 @@ public class TestNew { T getElement(Iterable it) { return it.iterator().next(); } T getElement(Iterator it) { return it.next(); } V getMapValue(Map map) { return map.get(null); } - Object getArrayElement(Object container) { return null; } - Object getElement(Object container) { return null; } - Object getMapKey(Object container) { return null; } - Object getMapValue(Object container) { return null; } - Object newWithArrayElement(Object element) { return null; } - Object newWithElement(Object element) { return null; } - Object newWithMapKey(Object element) { return null; } - Object newWithMapValue(Object element) { return null; } + + E getElement(Enumeration container) { return container.nextElement(); } + E getElement(MultiSet.Entry container) { return container.getElement(); } + E getElement(MultiKey container) { return container.getKey(0); } + K getMapKey(AbstractKeyValue container) { return container.getKey(); } + K getMapKeyFromEntry(Map.Entry container) { return container.getKey(); } + K getMapKey(AbstractMapEntryDecorator container) { return container.getKey(); } + K getMapKey(MultiValuedMap container) { return container.keySet().iterator().next(); } + K getMapKeyFromGet(Get container) { return container.keySet().iterator().next(); } + K getMapKeyFromPut(Put container) { return getMapKey((Map)container); } + V getMapValue(AbstractKeyValue container) { return container.getValue(); } + V getMapValueFromEntry(Map.Entry container) { return container.getValue(); } + V getMapValue(AbstractMapEntryDecorator container) { return container.getValue(); } + V getMapValue(MapIterator mapIterator) { return mapIterator.getValue(); } + Collection getMapValue(MultiValuedMap container) { return container.get(null); } + V getMapValueFromGet(Get container) { return container.get(null); } + V getMapValueFromPut(Put container) { return getMapValue((Map)container); } + + Object[] newWithArrayElement(Object element) { return new Object[] {element}; } + ArrayStack newArrayStackWithElement(T element) { ArrayStack a = new ArrayStack<>(); a.push(element); return a; } + CircularFifoQueue newCircularFifoQueueWithElement(T element) { CircularFifoQueue x = new CircularFifoQueue<>(); x.add(element); return x; } + CompositeSet newCompositeSetWithElement(T element) { return new CompositeSet(newListOrderedSetWithElement(element)); } + CursorableLinkedList newCursorableLinkedListWithElement(T element) { CursorableLinkedList x = new CursorableLinkedList<>(); x.add(element); return x; } + Enumeration newEnumerationWithElement(T element) { return new IteratorEnumeration(newVectorWithElement(element).iterator()); } + FluentIterable newFluentIterableWithElement(T element) { return FluentIterable.of(element); } + HashMultiSet newHashMultiSetWithElement(T element) { HashMultiSet x = new HashMultiSet<>(); x.add(element); return x; } + ListIterator newListIteratorWithElement(T element) { return newVectorWithElement(element).listIterator(); } + ListOrderedSet newListOrderedSetWithElement(T element) { ListOrderedSet x = new ListOrderedSet<>(); x.add(element); return x; } + MultiKey newMultiKeyWithElement(T element) { return new MultiKey(element, (T)null); } + MultiSet.Entry newMultiSetEntryWithElement(T element) { return getElement(newMultiSetWithElement(element).entrySet()); } + MultiSet newMultiSetWithElement(T element) { HashMultiSet h = new HashMultiSet<>(); h.add(element); return h; } + PredicatedCollection.Builder newPredicatedCollectionBuilderWithElement(T element) { PredicatedCollection.Builder x = PredicatedCollection.notNullBuilder(); x.add(element); return x; } + Queue newQueueWithElement(T element) { LinkedList q = new LinkedList<>(); q.add(element); return q; } + MySetView newSetViewWithElement(T element) { MySetView s = new MySetView<>(); s.add(element); return s; } + TreeBag newTreeBagWithElement(T element) { TreeBag b = new TreeBag<>(); b.add(element); return b; } + TreeSet newTreeSetWithElement(T element) { TreeSet h = new TreeSet<>(); h.add(element); return h; } + Vector newVectorWithElement(T element) { Vector v = new Vector<>(); v.add(element); return v; } + Vector> newVectorWithElement(Iterable element) { Vector> v = new Vector<>(); v.add(element); return v; } + + ArrayListValuedHashMap newALVHMWithMapKey(K key) { ArrayListValuedHashMap m = new ArrayListValuedHashMap<>(); m.put(key,null); return m; } + DefaultKeyValue newDKVWithMapKey(K key) { return new DefaultKeyValue(key,null); } + DualTreeBidiMap newDualTreeBidiMapWithMapKey(K key) { return new DualTreeBidiMap(Map.of(key, null)); } + HashedMap newHashedMapWithMapKey(K key) { HashedMap m = new HashedMap<>(); m.put(key,null); return m; } + LinkedMap newLinkedMapWithMapKey(K key) { return new LinkedMap(Map.of(key, null)); } + ListOrderedMap newListOrderedMapWithMapKey(K key) { return ListOrderedMap.listOrderedMap(Map.of(key, null)); } + MultiKeyMap newMKMWithMapKey(K key) { MultiKeyMap m = new MultiKeyMap<>(); m.put(key,null,null); return m; } + MultiValueMap newMVMWithMapKey(K key) { MultiValueMap m = new MultiValueMap<>(); m.put(key,null); return m; } + MyAbstractMapEntry newMAMEWithMapKey(K key) { return new MyAbstractMapEntry(key,null); } + MyAbstractMapEntryDecorator newMAMEDWithMapKey(K key) { return new MyAbstractMapEntryDecorator(newMAMEWithMapKey(key)); } + MyAbstractKeyValue newMAKVWithMapKey(K key) { return new MyAbstractKeyValue(key,null); } + OrderedMapIterator newOMIWithElement(K key) { LinkedMap m = new LinkedMap<>(); m.put(key,null); return m.mapIterator(); } + ResourceBundle newRBWithMapKey(String key) { return (ResourceBundle)null; } + SortedMap newTreeMapWithMapKey(K key) { SortedMap m = new TreeMap<>(); m.put(key,null); return m; } + TiedMapEntry newTMEWithMapKey(K key) { return new TiedMapEntry(new TreeMap(),key); } + > TreeBidiMap newTreeBidiMapWithMapKey(K key) { TreeBidiMap m = new TreeBidiMap<>(); m.put(key,null); return m; } + Trie newTrieWithMapKey(String key) { Trie m = new PatriciaTrie(); m.put(key,null); return m; } + + ArrayListValuedHashMap newALVHMWithMapValue(V value) { ArrayListValuedHashMap m = new ArrayListValuedHashMap<>(); m.put(null,value); return m; } + DefaultKeyValue newDKVWithMapValue(V value) { return new DefaultKeyValue(null,value); } + DualTreeBidiMap newDualTreeBidiMapWithMapValue(V value) { return new DualTreeBidiMap(Map.of(null, value)); } + HashedMap newHashedMapWithMapValue(V value) { HashedMap m = new HashedMap<>(); m.put(null,value); return m; } + HashSetValuedHashMap newHSVHMWithMapValue(V value) { HashSetValuedHashMap m = new HashSetValuedHashMap<>(); m.put(null,value); return m; } + LinkedMap newLinkedMapWithMapValue(V value) { return new LinkedMap(Map.of(null, value)); } + ListOrderedMap newListOrderedMapWithMapValue(V value) { return ListOrderedMap.listOrderedMap(Map.of(null, value)); } + MultiKeyMap newMKMWithMapValue(V value) { MultiKeyMap m = new MultiKeyMap<>(); m.put(null,null,value); return m; } + MultiValueMap newMVMWithMapValue(V value) { MultiValueMap m = new MultiValueMap<>(); m.put(null,value); return m; } + MyAbstractKeyValue newMAKVWithMapValue(V value) { return new MyAbstractKeyValue(null,value); } + MyAbstractMapEntry newMAMEWithMapValue(V value) { return new MyAbstractMapEntry(null,value); } + MyAbstractMapEntryDecorator newMAMEDWithMapValue(V value) { return new MyAbstractMapEntryDecorator(newMAMEWithMapValue(value)); } + OrderedMapIterator newOMIWithMapValue(V value) { LinkedMap m = new LinkedMap<>(); m.put(null,value); return m.mapIterator(); } + ResourceBundle newRBWithMapValue(Object value) { return (ResourceBundle)null; } + SortedMap newTreeMapWithMapValue(V value) { SortedMap m = new TreeMap<>(); m.put(null,value); return m; } + TiedMapEntry newTMEWithMapValue(V value) { return new TiedMapEntry(newTreeMapWithMapValue(value),null); } + > TreeBidiMap newTreeBidiMapWithMapValue(V value) { TreeBidiMap m = new TreeBidiMap<>(); m.put(null,value); return m; } + Trie newTrieWithMapValue(V value) { Trie m = new PatriciaTrie<>(); m.put(null,value); return m; } + UnmodifiableMapEntry newUMEWithMapValue(V value) { return new UnmodifiableMapEntry(null,value); } + Object source() { return null; } void sink(Object o) { } @@ -186,252 +300,252 @@ public class TestNew { { // "org.apache.commons.collections4.bag;CollectionBag;true;CollectionBag;;;Element of Argument[0];Element of Argument[-1];value" CollectionBag out = null; - Bag in = (Bag)newWithElement(source()); + Bag in = newTreeBagWithElement((String)source()); out = new CollectionBag(in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.bag;CollectionBag;true;collectionBag;;;Element of Argument[0];Element of ReturnValue;value" Bag out = null; - Bag in = (Bag)newWithElement(source()); + Bag in = newTreeBagWithElement((String)source()); out = CollectionBag.collectionBag(in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.bag;CollectionSortedBag;true;CollectionSortedBag;;;Element of Argument[0];Element of Argument[-1];value" CollectionSortedBag out = null; - SortedBag in = (SortedBag)newWithElement(source()); + SortedBag in = newTreeBagWithElement((String)source()); out = new CollectionSortedBag(in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.bag;CollectionSortedBag;true;collectionSortedBag;;;Element of Argument[0];Element of ReturnValue;value" SortedBag out = null; - SortedBag in = (SortedBag)newWithElement(source()); + SortedBag in = newTreeBagWithElement((String)source()); out = CollectionSortedBag.collectionSortedBag(in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.bag;HashBag;true;HashBag;;;Element of Argument[0];Element of Argument[-1];value" HashBag out = null; - Collection in = (Collection)newWithElement(source()); + Collection in = newTreeBagWithElement((String)source()); out = new HashBag(in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.bag;PredicatedBag;true;predicatedBag;;;Element of Argument[0];Element of ReturnValue;value" PredicatedBag out = null; - Bag in = (Bag)newWithElement(source()); + Bag in = newTreeBagWithElement((String)source()); out = PredicatedBag.predicatedBag(in, null); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.bag;PredicatedSortedBag;true;predicatedSortedBag;;;Element of Argument[0];Element of ReturnValue;value" PredicatedSortedBag out = null; - SortedBag in = (SortedBag)newWithElement(source()); + SortedBag in = newTreeBagWithElement((String)source()); out = PredicatedSortedBag.predicatedSortedBag(in, null); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.bag;SynchronizedBag;true;synchronizedBag;;;Element of Argument[0];Element of ReturnValue;value" SynchronizedBag out = null; - Bag in = (Bag)newWithElement(source()); + Bag in = newTreeBagWithElement((String)source()); out = SynchronizedBag.synchronizedBag(in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.bag;SynchronizedSortedBag;true;synchronizedSortedBag;;;Element of Argument[0];Element of ReturnValue;value" SynchronizedSortedBag out = null; - SortedBag in = (SortedBag)newWithElement(source()); + SortedBag in = newTreeBagWithElement((String)source()); out = SynchronizedSortedBag.synchronizedSortedBag(in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.bag;TransformedBag;true;transformedBag;;;Element of Argument[0];Element of ReturnValue;value" Bag out = null; - Bag in = (Bag)newWithElement(source()); + Bag in = newTreeBagWithElement((String)source()); out = TransformedBag.transformedBag(in, null); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.bag;TransformedSortedBag;true;transformedSortedBag;;;Element of Argument[0];Element of ReturnValue;value" TransformedSortedBag out = null; - SortedBag in = (SortedBag)newWithElement(source()); + SortedBag in = newTreeBagWithElement((String)source()); out = TransformedSortedBag.transformedSortedBag(in, null); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.bag;TreeBag;true;TreeBag;(Collection);;Element of Argument[0];Element of Argument[-1];value" TreeBag out = null; - Collection in = (Collection)newWithElement(source()); + Collection in = newTreeBagWithElement((String)source()); out = new TreeBag(in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.bag;UnmodifiableBag;true;unmodifiableBag;;;Element of Argument[0];Element of ReturnValue;value" Bag out = null; - Bag in = (Bag)newWithElement(source()); + Bag in = newTreeBagWithElement((String)source()); out = UnmodifiableBag.unmodifiableBag(in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.bag;UnmodifiableSortedBag;true;unmodifiableSortedBag;;;Element of Argument[0];Element of ReturnValue;value" SortedBag out = null; - SortedBag in = (SortedBag)newWithElement(source()); + SortedBag in = newTreeBagWithElement((String)source()); out = UnmodifiableSortedBag.unmodifiableSortedBag(in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.bidimap;AbstractSortedBidiMapDecorator;true;AbstractSortedBidiMapDecorator;;;MapKey of Argument[0];MapKey of Argument[-1];value" AbstractSortedBidiMapDecorator out = null; - SortedBidiMap in = (SortedBidiMap)newWithMapKey(source()); + SortedBidiMap in = newDualTreeBidiMapWithMapKey((String)source()); out = new MyAbstractSortedBidiMapDecorator(in); sink(getMapKey(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.bidimap;AbstractSortedBidiMapDecorator;true;AbstractSortedBidiMapDecorator;;;MapValue of Argument[0];MapValue of Argument[-1];value" AbstractSortedBidiMapDecorator out = null; - SortedBidiMap in = (SortedBidiMap)newWithMapValue(source()); + SortedBidiMap in = newDualTreeBidiMapWithMapValue((String)source()); out = new MyAbstractSortedBidiMapDecorator(in); sink(getMapValue(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.bidimap;DualHashBidiMap;true;DualHashBidiMap;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value" DualHashBidiMap out = null; - Map in = (Map)Map.of(source(), null); + Map in = Map.of((String)source(), null); out = new DualHashBidiMap(in); sink(getMapKey(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.bidimap;DualHashBidiMap;true;DualHashBidiMap;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value" DualHashBidiMap out = null; - Map in = (Map)Map.of(null, source()); + Map in = Map.of(null, (String)source()); out = new DualHashBidiMap(in); sink(getMapValue(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.bidimap;DualLinkedHashBidiMap;true;DualLinkedHashBidiMap;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value" DualLinkedHashBidiMap out = null; - Map in = (Map)Map.of(source(), null); + Map in = Map.of((String)source(), null); out = new DualLinkedHashBidiMap(in); sink(getMapKey(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.bidimap;DualLinkedHashBidiMap;true;DualLinkedHashBidiMap;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value" DualLinkedHashBidiMap out = null; - Map in = (Map)Map.of(null, source()); + Map in = Map.of(null, (String)source()); out = new DualLinkedHashBidiMap(in); sink(getMapValue(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.bidimap;DualTreeBidiMap;true;DualTreeBidiMap;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value" DualTreeBidiMap out = null; - Map in = (Map)Map.of(source(), null); + Map in = Map.of((String)source(), null); out = new DualTreeBidiMap(in); sink(getMapKey(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.bidimap;DualTreeBidiMap;true;DualTreeBidiMap;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value" DualTreeBidiMap out = null; - Map in = (Map)Map.of(null, source()); + Map in = Map.of(null, (String)source()); out = new DualTreeBidiMap(in); sink(getMapValue(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.bidimap;DualTreeBidiMap;true;inverseOrderedBidiMap;;;MapKey of Argument[-1];MapValue of ReturnValue;value" OrderedBidiMap out = null; - DualTreeBidiMap in = (DualTreeBidiMap)newWithMapKey(source()); + DualTreeBidiMap in = newDualTreeBidiMapWithMapKey((String)source()); out = in.inverseOrderedBidiMap(); sink(getMapValue(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.bidimap;DualTreeBidiMap;true;inverseOrderedBidiMap;;;MapValue of Argument[-1];MapKey of ReturnValue;value" OrderedBidiMap out = null; - DualTreeBidiMap in = (DualTreeBidiMap)newWithMapValue(source()); + DualTreeBidiMap in = newDualTreeBidiMapWithMapValue((String)source()); out = in.inverseOrderedBidiMap(); sink(getMapKey(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.bidimap;DualTreeBidiMap;true;inverseSortedBidiMap;;;MapKey of Argument[-1];MapValue of ReturnValue;value" SortedBidiMap out = null; - DualTreeBidiMap in = (DualTreeBidiMap)newWithMapKey(source()); + DualTreeBidiMap in = newDualTreeBidiMapWithMapKey((String)source()); out = in.inverseSortedBidiMap(); sink(getMapValue(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.bidimap;DualTreeBidiMap;true;inverseSortedBidiMap;;;MapValue of Argument[-1];MapKey of ReturnValue;value" SortedBidiMap out = null; - DualTreeBidiMap in = (DualTreeBidiMap)newWithMapValue(source()); + DualTreeBidiMap in = newDualTreeBidiMapWithMapValue((String)source()); out = in.inverseSortedBidiMap(); sink(getMapKey(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.bidimap;TreeBidiMap;true;TreeBidiMap;;;MapKey of Argument[0];MapKey of Argument[-1];value" TreeBidiMap out = null; - Map in = (Map)Map.of(source(), null); + Map in = Map.of((String)source(), null); out = new TreeBidiMap(in); sink(getMapKey(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.bidimap;TreeBidiMap;true;TreeBidiMap;;;MapValue of Argument[0];MapValue of Argument[-1];value" TreeBidiMap out = null; - Map in = (Map)Map.of(null, source()); + Map in = Map.of(null, (String)source()); out = new TreeBidiMap(in); sink(getMapValue(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.bidimap;UnmodifiableBidiMap;true;unmodifiableBidiMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" BidiMap out = null; - BidiMap in = (BidiMap)newWithMapKey(source()); + BidiMap in = newDualTreeBidiMapWithMapKey((String)source()); out = UnmodifiableBidiMap.unmodifiableBidiMap(in); sink(getMapKey(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.bidimap;UnmodifiableBidiMap;true;unmodifiableBidiMap;;;MapValue of Argument[0];MapValue of ReturnValue;value" BidiMap out = null; - BidiMap in = (BidiMap)newWithMapValue(source()); + BidiMap in = newDualTreeBidiMapWithMapValue((String)source()); out = UnmodifiableBidiMap.unmodifiableBidiMap(in); sink(getMapValue(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.bidimap;UnmodifiableOrderedBidiMap;true;inverseOrderedBidiMap;;;MapKey of Argument[-1];MapValue of ReturnValue;value" OrderedBidiMap out = null; - UnmodifiableOrderedBidiMap in = (UnmodifiableOrderedBidiMap)newWithMapKey(source()); + UnmodifiableOrderedBidiMap in = (UnmodifiableOrderedBidiMap)UnmodifiableOrderedBidiMap.unmodifiableOrderedBidiMap(newDualTreeBidiMapWithMapKey((String)source())); out = in.inverseOrderedBidiMap(); sink(getMapValue(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.bidimap;UnmodifiableOrderedBidiMap;true;inverseOrderedBidiMap;;;MapValue of Argument[-1];MapKey of ReturnValue;value" OrderedBidiMap out = null; - UnmodifiableOrderedBidiMap in = (UnmodifiableOrderedBidiMap)newWithMapValue(source()); + UnmodifiableOrderedBidiMap in = (UnmodifiableOrderedBidiMap)UnmodifiableOrderedBidiMap.unmodifiableOrderedBidiMap(newDualTreeBidiMapWithMapValue((String)source())); out = in.inverseOrderedBidiMap(); sink(getMapKey(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.bidimap;UnmodifiableOrderedBidiMap;true;unmodifiableOrderedBidiMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" OrderedBidiMap out = null; - OrderedBidiMap in = (OrderedBidiMap)newWithMapKey(source()); + OrderedBidiMap in = newDualTreeBidiMapWithMapKey((String)source()); out = UnmodifiableOrderedBidiMap.unmodifiableOrderedBidiMap(in); sink(getMapKey(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.bidimap;UnmodifiableOrderedBidiMap;true;unmodifiableOrderedBidiMap;;;MapValue of Argument[0];MapValue of ReturnValue;value" OrderedBidiMap out = null; - OrderedBidiMap in = (OrderedBidiMap)newWithMapValue(source()); + OrderedBidiMap in = newDualTreeBidiMapWithMapValue((String)source()); out = UnmodifiableOrderedBidiMap.unmodifiableOrderedBidiMap(in); sink(getMapValue(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.bidimap;UnmodifiableSortedBidiMap;true;unmodifiableSortedBidiMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" SortedBidiMap out = null; - SortedBidiMap in = (SortedBidiMap)newWithMapKey(source()); + SortedBidiMap in = newDualTreeBidiMapWithMapKey((String)source()); out = UnmodifiableSortedBidiMap.unmodifiableSortedBidiMap(in); sink(getMapKey(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.bidimap;UnmodifiableSortedBidiMap;true;unmodifiableSortedBidiMap;;;MapValue of Argument[0];MapValue of ReturnValue;value" SortedBidiMap out = null; - SortedBidiMap in = (SortedBidiMap)newWithMapValue(source()); + SortedBidiMap in = newDualTreeBidiMapWithMapValue((String)source()); out = UnmodifiableSortedBidiMap.unmodifiableSortedBidiMap(in); sink(getMapValue(out)); // $ hasValueFlow } @@ -445,7 +559,7 @@ public class TestNew { } { // "org.apache.commons.collections4.collection;CompositeCollection$CollectionMutator;true;add;;;Argument[2];Element of Element of Argument[1];value" - List out = null; + List out = null; Object in = (Object)source(); CompositeCollection.CollectionMutator instance = null; instance.add(null, out, in); @@ -454,15 +568,15 @@ public class TestNew { { // "org.apache.commons.collections4.collection;CompositeCollection$CollectionMutator;true;addAll;;;Element of Argument[2];Element of Argument[0];value" CompositeCollection out = null; - Collection in = (Collection)newWithElement(source()); + Collection in = newTreeBagWithElement((String)source()); CompositeCollection.CollectionMutator instance = null; instance.addAll(out, null, in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.collection;CompositeCollection$CollectionMutator;true;addAll;;;Element of Argument[2];Element of Element of Argument[1];value" - List out = null; - Collection in = (Collection)newWithElement(source()); + List out = null; + Collection in = newTreeBagWithElement((String)source()); CompositeCollection.CollectionMutator instance = null; instance.addAll(null, out, in); sink(getElement(getElement(out))); // $ hasValueFlow @@ -470,140 +584,140 @@ public class TestNew { { // "org.apache.commons.collections4.collection;CompositeCollection;true;CompositeCollection;(Collection);;Element of Argument[0];Element of Argument[-1];value" CompositeCollection out = null; - Collection in = (Collection)newWithElement(source()); + Collection in = newTreeBagWithElement((String)source()); out = new CompositeCollection(in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.collection;CompositeCollection;true;CompositeCollection;(Collection,Collection);;Element of Argument[0];Element of Argument[-1];value" CompositeCollection out = null; - Collection in = (Collection)newWithElement(source()); + Collection in = newTreeBagWithElement((String)source()); out = new CompositeCollection(in, null); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.collection;CompositeCollection;true;CompositeCollection;(Collection,Collection);;Element of Argument[1];Element of Argument[-1];value" CompositeCollection out = null; - Collection in = (Collection)newWithElement(source()); + Collection in = newTreeBagWithElement((String)source()); out = new CompositeCollection(null, in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.collection;CompositeCollection;true;CompositeCollection;(Collection[]);;Element of ArrayElement of Argument[0];Element of Argument[-1];value" CompositeCollection out = null; - Collection[] in = (Collection[])new Collection[]{(Collection)newWithElement(source())}; + Collection[] in = new Collection[]{newTreeBagWithElement((String)source())}; out = new CompositeCollection(in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.collection;CompositeCollection;true;addComposited;(Collection);;Element of Argument[0];Element of Argument[-1];value" CompositeCollection out = null; - Collection in = (Collection)newWithElement(source()); + Collection in = newTreeBagWithElement((String)source()); out.addComposited(in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.collection;CompositeCollection;true;addComposited;(Collection,Collection);;Element of Argument[0];Element of Argument[-1];value" CompositeCollection out = null; - Collection in = (Collection)newWithElement(source()); + Collection in = newTreeBagWithElement((String)source()); out.addComposited(in, null); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.collection;CompositeCollection;true;addComposited;(Collection,Collection);;Element of Argument[1];Element of Argument[-1];value" CompositeCollection out = null; - Collection in = (Collection)newWithElement(source()); + Collection in = newTreeBagWithElement((String)source()); out.addComposited(null, in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.collection;CompositeCollection;true;addComposited;(Collection[]);;Element of ArrayElement of Argument[0];Element of Argument[-1];value" CompositeCollection out = null; - Collection[] in = (Collection[])new Collection[]{(Collection)newWithElement(source())}; + Collection[] in = new Collection[]{newTreeBagWithElement((String)source())}; out.addComposited(in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.collection;CompositeCollection;true;getCollections;;;Element of Argument[-1];Element of Element of ReturnValue;value" - List out = null; - CompositeCollection in = (CompositeCollection)newWithElement(source()); + List out = null; + CompositeCollection in = new CompositeCollection(newTreeBagWithElement((String)source())); out = in.getCollections(); sink(getElement(getElement(out))); // $ hasValueFlow } { // "org.apache.commons.collections4.collection;CompositeCollection;true;toCollection;;;Element of Argument[-1];Element of ReturnValue;value" Collection out = null; - CompositeCollection in = (CompositeCollection)newWithElement(source()); + CompositeCollection in = new CompositeCollection(newTreeBagWithElement((String)source())); out = in.toCollection(); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.collection;IndexedCollection;true;IndexedCollection;;;Element of Argument[0];Element of Argument[-1];value" IndexedCollection out = null; - Collection in = (Collection)newWithElement(source()); + Collection in = newTreeBagWithElement((String)source()); out = new IndexedCollection(in, null, null, false); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.collection;IndexedCollection;true;get;;;Element of Argument[-1];ReturnValue;value" Object out = null; - IndexedCollection in = (IndexedCollection)newWithElement(source()); + IndexedCollection in = new IndexedCollection(newTreeBagWithElement((String)source()), null, null, false); out = in.get(null); sink(out); // $ hasValueFlow } { // "org.apache.commons.collections4.collection;IndexedCollection;true;nonUniqueIndexedCollection;;;Element of Argument[0];Element of ReturnValue;value" IndexedCollection out = null; - Collection in = (Collection)newWithElement(source()); + Collection in = newTreeBagWithElement((String)source()); out = IndexedCollection.nonUniqueIndexedCollection(in, null); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.collection;IndexedCollection;true;uniqueIndexedCollection;;;Element of Argument[0];Element of ReturnValue;value" IndexedCollection out = null; - Collection in = (Collection)newWithElement(source()); + Collection in = newTreeBagWithElement((String)source()); out = IndexedCollection.uniqueIndexedCollection(in, null); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.collection;IndexedCollection;true;values;;;Element of Argument[-1];Element of ReturnValue;value" Collection out = null; - IndexedCollection in = (IndexedCollection)newWithElement(source()); + IndexedCollection in = new IndexedCollection(newTreeBagWithElement((String)source()), null, null, false); out = in.values(null); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.collection;PredicatedCollection$Builder;true;add;;;Argument[0];Element of Argument[-1];value" PredicatedCollection.Builder out = null; - Object in = (Object)source(); + Object in = (String)source(); out.add(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement(out.createPredicatedList())); // $ hasValueFlow } { // "org.apache.commons.collections4.collection;PredicatedCollection$Builder;true;addAll;;;Element of Argument[0];Element of Argument[-1];value" PredicatedCollection.Builder out = null; - Collection in = (Collection)List.of(source()); + Collection in = (Collection)List.of((String)source()); out.addAll(in); - sink(getElement(out)); // $ hasValueFlow + sink(getElement(out.createPredicatedList())); // $ hasValueFlow } { // "org.apache.commons.collections4.collection;PredicatedCollection$Builder;true;createPredicatedBag;;;Element of Argument[-1];Element of ReturnValue;value" Bag out = null; - PredicatedCollection.Builder in = (PredicatedCollection.Builder)newWithElement(source()); + PredicatedCollection.Builder in = newPredicatedCollectionBuilderWithElement((String)source()); out = in.createPredicatedBag(null); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.collection;PredicatedCollection$Builder;true;createPredicatedBag;;;Element of Argument[-1];Element of ReturnValue;value" Bag out = null; - PredicatedCollection.Builder in = (PredicatedCollection.Builder)newWithElement(source()); + PredicatedCollection.Builder in = newPredicatedCollectionBuilderWithElement((String)source()); out = in.createPredicatedBag(); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.collection;PredicatedCollection$Builder;true;createPredicatedBag;;;Element of Argument[0];Element of ReturnValue;value" Bag out = null; - Bag in = (Bag)newWithElement(source()); + Bag in = newTreeBagWithElement((String)source()); PredicatedCollection.Builder instance = null; out = instance.createPredicatedBag(in); sink(getElement(out)); // $ hasValueFlow @@ -611,21 +725,21 @@ public class TestNew { { // "org.apache.commons.collections4.collection;PredicatedCollection$Builder;true;createPredicatedList;;;Element of Argument[-1];Element of ReturnValue;value" List out = null; - PredicatedCollection.Builder in = (PredicatedCollection.Builder)newWithElement(source()); + PredicatedCollection.Builder in = newPredicatedCollectionBuilderWithElement((String)source()); out = in.createPredicatedList(null); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.collection;PredicatedCollection$Builder;true;createPredicatedList;;;Element of Argument[-1];Element of ReturnValue;value" List out = null; - PredicatedCollection.Builder in = (PredicatedCollection.Builder)newWithElement(source()); + PredicatedCollection.Builder in = newPredicatedCollectionBuilderWithElement((String)source()); out = in.createPredicatedList(); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.collection;PredicatedCollection$Builder;true;createPredicatedList;;;Element of Argument[0];Element of ReturnValue;value" List out = null; - List in = (List)List.of(source()); + List in = (List)List.of((String)source()); PredicatedCollection.Builder instance = null; out = instance.createPredicatedList(in); sink(getElement(out)); // $ hasValueFlow @@ -633,21 +747,21 @@ public class TestNew { { // "org.apache.commons.collections4.collection;PredicatedCollection$Builder;true;createPredicatedMultiSet;;;Element of Argument[-1];Element of ReturnValue;value" MultiSet out = null; - PredicatedCollection.Builder in = (PredicatedCollection.Builder)newWithElement(source()); + PredicatedCollection.Builder in = newPredicatedCollectionBuilderWithElement((String)source()); out = in.createPredicatedMultiSet(null); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.collection;PredicatedCollection$Builder;true;createPredicatedMultiSet;;;Element of Argument[-1];Element of ReturnValue;value" MultiSet out = null; - PredicatedCollection.Builder in = (PredicatedCollection.Builder)newWithElement(source()); + PredicatedCollection.Builder in = newPredicatedCollectionBuilderWithElement((String)source()); out = in.createPredicatedMultiSet(); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.collection;PredicatedCollection$Builder;true;createPredicatedMultiSet;;;Element of Argument[0];Element of ReturnValue;value" MultiSet out = null; - MultiSet in = (MultiSet)newWithElement(source()); + MultiSet in = newHashMultiSetWithElement((String)source()); PredicatedCollection.Builder instance = null; out = instance.createPredicatedMultiSet(in); sink(getElement(out)); // $ hasValueFlow @@ -655,21 +769,21 @@ public class TestNew { { // "org.apache.commons.collections4.collection;PredicatedCollection$Builder;true;createPredicatedQueue;;;Element of Argument[-1];Element of ReturnValue;value" Queue out = null; - PredicatedCollection.Builder in = (PredicatedCollection.Builder)newWithElement(source()); + PredicatedCollection.Builder in = newPredicatedCollectionBuilderWithElement((String)source()); out = in.createPredicatedQueue(null); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.collection;PredicatedCollection$Builder;true;createPredicatedQueue;;;Element of Argument[-1];Element of ReturnValue;value" Queue out = null; - PredicatedCollection.Builder in = (PredicatedCollection.Builder)newWithElement(source()); + PredicatedCollection.Builder in = newPredicatedCollectionBuilderWithElement((String)source()); out = in.createPredicatedQueue(); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.collection;PredicatedCollection$Builder;true;createPredicatedQueue;;;Element of Argument[0];Element of ReturnValue;value" Queue out = null; - Queue in = (Queue)newWithElement(source()); + Queue in = newCircularFifoQueueWithElement((String)source()); PredicatedCollection.Builder instance = null; out = instance.createPredicatedQueue(in); sink(getElement(out)); // $ hasValueFlow @@ -677,21 +791,21 @@ public class TestNew { { // "org.apache.commons.collections4.collection;PredicatedCollection$Builder;true;createPredicatedSet;;;Element of Argument[-1];Element of ReturnValue;value" Set out = null; - PredicatedCollection.Builder in = (PredicatedCollection.Builder)newWithElement(source()); + PredicatedCollection.Builder in = newPredicatedCollectionBuilderWithElement((String)source()); out = in.createPredicatedSet(null); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.collection;PredicatedCollection$Builder;true;createPredicatedSet;;;Element of Argument[-1];Element of ReturnValue;value" Set out = null; - PredicatedCollection.Builder in = (PredicatedCollection.Builder)newWithElement(source()); + PredicatedCollection.Builder in = newPredicatedCollectionBuilderWithElement((String)source()); out = in.createPredicatedSet(); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.collection;PredicatedCollection$Builder;true;createPredicatedSet;;;Element of Argument[0];Element of ReturnValue;value" Set out = null; - Set in = (Set)newWithElement(source()); + Set in = newListOrderedSetWithElement((String)source()); PredicatedCollection.Builder instance = null; out = instance.createPredicatedSet(in); sink(getElement(out)); // $ hasValueFlow @@ -699,462 +813,462 @@ public class TestNew { { // "org.apache.commons.collections4.collection;PredicatedCollection$Builder;true;rejectedElements;;;Element of Argument[-1];Element of ReturnValue;value" Collection out = null; - PredicatedCollection.Builder in = (PredicatedCollection.Builder)newWithElement(source()); + PredicatedCollection.Builder in = newPredicatedCollectionBuilderWithElement((String)source()); out = in.rejectedElements(); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.collection;PredicatedCollection;true;predicatedCollection;;;Element of Argument[0];Element of ReturnValue;value" PredicatedCollection out = null; - Collection in = (Collection)newWithElement(source()); + Collection in = newTreeBagWithElement((String)source()); out = PredicatedCollection.predicatedCollection(in, null); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.collection;SynchronizedCollection;true;synchronizedCollection;;;Element of Argument[0];Element of ReturnValue;value" SynchronizedCollection out = null; - Collection in = (Collection)newWithElement(source()); + Collection in = newTreeBagWithElement((String)source()); out = SynchronizedCollection.synchronizedCollection(in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.collection;TransformedCollection;true;transformingCollection;;;Element of Argument[0];Element of ReturnValue;value" TransformedCollection out = null; - Collection in = (Collection)newWithElement(source()); + Collection in = newTreeBagWithElement((String)source()); out = TransformedCollection.transformingCollection(in, null); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.collection;UnmodifiableBoundedCollection;true;unmodifiableBoundedCollection;;;Element of Argument[0];Element of ReturnValue;value" BoundedCollection out = null; - Collection in = (Collection)newWithElement(source()); + Collection in = newTreeBagWithElement((String)source()); out = UnmodifiableBoundedCollection.unmodifiableBoundedCollection(in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.collection;UnmodifiableBoundedCollection;true;unmodifiableBoundedCollection;;;Element of Argument[0];Element of ReturnValue;value" BoundedCollection out = null; - BoundedCollection in = (BoundedCollection)newWithElement(source()); + BoundedCollection in = newCircularFifoQueueWithElement((String)source()); out = UnmodifiableBoundedCollection.unmodifiableBoundedCollection(in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.collection;UnmodifiableCollection;true;unmodifiableCollection;;;Element of Argument[0];Element of ReturnValue;value" Collection out = null; - Collection in = (Collection)newWithElement(source()); + Collection in = newTreeBagWithElement((String)source()); out = UnmodifiableCollection.unmodifiableCollection(in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.iterators;AbstractListIteratorDecorator;true;AbstractListIteratorDecorator;;;Element of Argument[0];Element of Argument[-1];value" AbstractListIteratorDecorator out = null; - ListIterator in = (ListIterator)newWithElement(source()); + ListIterator in = newListIteratorWithElement((String)source()); out = new AbstractListIteratorDecorator(in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.iterators;AbstractMapIteratorDecorator;true;AbstractMapIteratorDecorator;;;Element of Argument[0];Element of Argument[-1];value" AbstractMapIteratorDecorator out = null; - MapIterator in = (MapIterator)newWithElement(source()); + MapIterator in = newLinkedMapWithMapKey((String)source()).mapIterator(); out = new AbstractMapIteratorDecorator(in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.iterators;AbstractMapIteratorDecorator;true;AbstractMapIteratorDecorator;;;MapValue of Argument[0];MapValue of Argument[-1];value" AbstractMapIteratorDecorator out = null; - MapIterator in = (MapIterator)newWithMapValue(source()); + MapIterator in = newLinkedMapWithMapValue((String)source()).mapIterator(); out = new AbstractMapIteratorDecorator(in); sink(getMapValue(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.iterators;AbstractOrderedMapIteratorDecorator;true;AbstractOrderedMapIteratorDecorator;;;Element of Argument[0];Element of Argument[-1];value" AbstractOrderedMapIteratorDecorator out = null; - OrderedMapIterator in = (OrderedMapIterator)newWithElement(source()); + OrderedMapIterator in = newListOrderedMapWithMapKey((String)source()).mapIterator(); out = new AbstractOrderedMapIteratorDecorator(in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.iterators;AbstractOrderedMapIteratorDecorator;true;AbstractOrderedMapIteratorDecorator;;;MapValue of Argument[0];MapValue of Argument[-1];value" AbstractOrderedMapIteratorDecorator out = null; - OrderedMapIterator in = (OrderedMapIterator)newWithMapValue(source()); + OrderedMapIterator in = newListOrderedMapWithMapValue((String)source()).mapIterator(); out = new AbstractOrderedMapIteratorDecorator(in); sink(getMapValue(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.iterators;ArrayIterator;true;ArrayIterator;;;ArrayElement of Argument[0];Element of Argument[-1];value" ArrayIterator out = null; - Object in = (Object)newWithArrayElement(source()); + Object in = (Object)newWithArrayElement((String)source()); out = new ArrayIterator(in, 0, 0); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.iterators;ArrayIterator;true;ArrayIterator;;;ArrayElement of Argument[0];Element of Argument[-1];value" ArrayIterator out = null; - Object in = (Object)newWithArrayElement(source()); + Object in = (Object)newWithArrayElement((String)source()); out = new ArrayIterator(in, 0); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.iterators;ArrayIterator;true;ArrayIterator;;;ArrayElement of Argument[0];Element of Argument[-1];value" ArrayIterator out = null; - Object in = (Object)newWithArrayElement(source()); + Object in = (Object)newWithArrayElement((String)source()); out = new ArrayIterator(in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.iterators;ArrayIterator;true;getArray;;;Element of Argument[-1];ArrayElement of ReturnValue;value" - Object out = null; - ArrayIterator in = (ArrayIterator)newWithElement(source()); - out = in.getArray(); + String[] out = null; + ArrayIterator in = new ArrayIterator((Object)newWithArrayElement((String)source())); + out = (String[])in.getArray(); sink(getArrayElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.iterators;ArrayListIterator;true;ArrayListIterator;;;ArrayElement of Argument[0];Element of Argument[-1];value" ArrayListIterator out = null; - Object in = (Object)newWithArrayElement(source()); + Object in = (Object)newWithArrayElement((String)source()); out = new ArrayListIterator(in, 0, 0); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.iterators;ArrayListIterator;true;ArrayListIterator;;;ArrayElement of Argument[0];Element of Argument[-1];value" ArrayListIterator out = null; - Object in = (Object)newWithArrayElement(source()); + Object in = (Object)newWithArrayElement((String)source()); out = new ArrayListIterator(in, 0); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.iterators;ArrayListIterator;true;ArrayListIterator;;;ArrayElement of Argument[0];Element of Argument[-1];value" ArrayListIterator out = null; - Object in = (Object)newWithArrayElement(source()); + Object in = (Object)newWithArrayElement((String)source()); out = new ArrayListIterator(in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.iterators;BoundedIterator;true;BoundedIterator;;;Element of Argument[0];Element of Argument[-1];value" BoundedIterator out = null; - Iterator in = (Iterator)newWithElement(source()); + Iterator in = newListIteratorWithElement((String)source()); out = new BoundedIterator(in, 0L, 0L); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.iterators;CollatingIterator;true;CollatingIterator;(Comparator,Collection);;Element of Element of Argument[1];Element of Argument[-1];value" CollatingIterator out = null; - Collection in = (Collection)List.of(newWithElement(source())); + Collection in = (Collection)List.of(newListIteratorWithElement((String)source())); out = new CollatingIterator((Comparator)null, in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.iterators;CollatingIterator;true;CollatingIterator;(Comparator,Iterator,Iterator);;Element of Argument[1];Element of Argument[-1];value" CollatingIterator out = null; - Iterator in = (Iterator)newWithElement(source()); + Iterator in = newListIteratorWithElement((String)source()); out = new CollatingIterator(null, in, null); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.iterators;CollatingIterator;true;CollatingIterator;(Comparator,Iterator,Iterator);;Element of Argument[2];Element of Argument[-1];value" CollatingIterator out = null; - Iterator in = (Iterator)newWithElement(source()); + Iterator in = newListIteratorWithElement((String)source()); out = new CollatingIterator(null, null, in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.iterators;CollatingIterator;true;CollatingIterator;(Comparator,Iterator[]);;Element of ArrayElement of Argument[1];Element of Argument[-1];value" CollatingIterator out = null; - Iterator[] in = (Iterator[])new Iterator[]{(Iterator)newWithElement(source())}; + Iterator[] in = (Iterator[])new Iterator[]{newListIteratorWithElement((String)source())}; out = new CollatingIterator((Comparator)null, in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.iterators;CollatingIterator;true;addIterator;;;Element of Argument[0];Element of Argument[-1];value" CollatingIterator out = null; - Iterator in = (Iterator)newWithElement(source()); + Iterator in = newListIteratorWithElement((String)source()); out.addIterator(in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.iterators;CollatingIterator;true;getIterators;;;Element of Argument[-1];Element of Element of ReturnValue;value" - List out = null; - CollatingIterator in = (CollatingIterator)newWithElement(source()); + List out = null; + CollatingIterator in = new CollatingIterator((Comparator)null, (Collection)List.of(newListIteratorWithElement((String)source()))); out = in.getIterators(); sink(getElement(getElement(out))); // $ hasValueFlow } { // "org.apache.commons.collections4.iterators;CollatingIterator;true;setIterator;;;Element of Argument[1];Element of Argument[-1];value" CollatingIterator out = null; - Iterator in = (Iterator)newWithElement(source()); + Iterator in = newListIteratorWithElement((String)source()); out.setIterator(0, in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.iterators;EnumerationIterator;true;EnumerationIterator;;;Element of Argument[0];Element of Argument[-1];value" EnumerationIterator out = null; - Enumeration in = (Enumeration)newWithElement(source()); + Enumeration in = newEnumerationWithElement((String)source()); out = new EnumerationIterator(in, null); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.iterators;EnumerationIterator;true;EnumerationIterator;;;Element of Argument[0];Element of Argument[-1];value" EnumerationIterator out = null; - Enumeration in = (Enumeration)newWithElement(source()); + Enumeration in = newEnumerationWithElement((String)source()); out = new EnumerationIterator(in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.iterators;EnumerationIterator;true;getEnumeration;;;Element of Argument[-1];Element of ReturnValue;value" Enumeration out = null; - EnumerationIterator in = (EnumerationIterator)newWithElement(source()); + EnumerationIterator in = new EnumerationIterator(newEnumerationWithElement((String)source())); out = in.getEnumeration(); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.iterators;EnumerationIterator;true;setEnumeration;;;Element of Argument[0];Element of Argument[-1];value" EnumerationIterator out = null; - Enumeration in = (Enumeration)newWithElement(source()); + Enumeration in = newEnumerationWithElement((String)source()); out.setEnumeration(in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.iterators;FilterIterator;true;FilterIterator;;;Element of Argument[0];Element of Argument[-1];value" FilterIterator out = null; - Iterator in = (Iterator)newWithElement(source()); + Iterator in = newListIteratorWithElement((String)source()); out = new FilterIterator(in, null); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.iterators;FilterIterator;true;FilterIterator;;;Element of Argument[0];Element of Argument[-1];value" FilterIterator out = null; - Iterator in = (Iterator)newWithElement(source()); + Iterator in = newListIteratorWithElement((String)source()); out = new FilterIterator(in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.iterators;FilterIterator;true;getIterator;;;Element of Argument[-1];Element of ReturnValue;value" Iterator out = null; - FilterIterator in = (FilterIterator)newWithElement(source()); + FilterIterator in = new FilterIterator(newListIteratorWithElement((String)source())); out = in.getIterator(); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.iterators;FilterIterator;true;setIterator;;;Element of Argument[0];Element of Argument[-1];value" FilterIterator out = null; - Iterator in = (Iterator)newWithElement(source()); + Iterator in = newListIteratorWithElement((String)source()); out.setIterator(in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.iterators;FilterListIterator;true;FilterListIterator;(ListIterator);;Element of Argument[0];Element of Argument[-1];value" FilterListIterator out = null; - ListIterator in = (ListIterator)newWithElement(source()); + ListIterator in = newListIteratorWithElement((String)source()); out = new FilterListIterator(in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.iterators;FilterListIterator;true;FilterListIterator;(ListIterator,Predicate);;Element of Argument[0];Element of Argument[-1];value" FilterListIterator out = null; - ListIterator in = (ListIterator)newWithElement(source()); + ListIterator in = newListIteratorWithElement((String)source()); out = new FilterListIterator(in, null); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.iterators;FilterListIterator;true;getListIterator;;;Element of Argument[-1];Element of ReturnValue;value" ListIterator out = null; - FilterListIterator in = (FilterListIterator)newWithElement(source()); + FilterListIterator in = new FilterListIterator(newListIteratorWithElement((String)source())); out = in.getListIterator(); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.iterators;FilterListIterator;true;setListIterator;;;Element of Argument[0];Element of Argument[-1];value" FilterListIterator out = null; - ListIterator in = (ListIterator)newWithElement(source()); + ListIterator in = newListIteratorWithElement((String)source()); out.setListIterator(in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.iterators;IteratorChain;true;IteratorChain;(Collection);;Element of Element of Argument[0];Element of Argument[-1];value" IteratorChain out = null; - Collection in = (Collection)newWithElement(newWithElement(source())); + Collection in = newTreeBagWithElement(newListIteratorWithElement((String)source())); out = new IteratorChain(in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.iterators;IteratorChain;true;IteratorChain;(Iterator);;Element of Argument[0];Element of Argument[-1];value" IteratorChain out = null; - Iterator in = (Iterator)newWithElement(source()); + Iterator in = newListIteratorWithElement((String)source()); out = new IteratorChain(in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.iterators;IteratorChain;true;IteratorChain;(Iterator,Iterator);;Element of Argument[0];Element of Argument[-1];value" IteratorChain out = null; - Iterator in = (Iterator)newWithElement(source()); + Iterator in = newListIteratorWithElement((String)source()); out = new IteratorChain(in, null); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.iterators;IteratorChain;true;IteratorChain;(Iterator,Iterator);;Element of Argument[1];Element of Argument[-1];value" IteratorChain out = null; - Iterator in = (Iterator)newWithElement(source()); + Iterator in = newListIteratorWithElement((String)source()); out = new IteratorChain(null, in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.iterators;IteratorChain;true;IteratorChain;(Iterator[]);;Element of ArrayElement of Argument[0];Element of Argument[-1];value" IteratorChain out = null; - Iterator[] in = (Iterator[])new Iterator[]{(Iterator)newWithElement(source())}; + Iterator[] in = new Iterator[]{newListIteratorWithElement((String)source())}; out = new IteratorChain(in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.iterators;IteratorChain;true;addIterator;;;Element of Argument[0];Element of Argument[-1];value" IteratorChain out = null; - Iterator in = (Iterator)newWithElement(source()); + Iterator in = newListIteratorWithElement((String)source()); out.addIterator(in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.iterators;IteratorEnumeration;true;IteratorEnumeration;;;Element of Argument[0];Element of Argument[-1];value" IteratorEnumeration out = null; - Iterator in = (Iterator)newWithElement(source()); + Iterator in = newListIteratorWithElement((String)source()); out = new IteratorEnumeration(in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.iterators;IteratorEnumeration;true;getIterator;;;Element of Argument[-1];Element of ReturnValue;value" Iterator out = null; - IteratorEnumeration in = (IteratorEnumeration)newWithElement(source()); + IteratorEnumeration in = new IteratorEnumeration(newListIteratorWithElement((String)source())); out = in.getIterator(); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.iterators;IteratorEnumeration;true;setIterator;;;Element of Argument[0];Element of Argument[-1];value" IteratorEnumeration out = null; - Iterator in = (Iterator)newWithElement(source()); + Iterator in = newListIteratorWithElement((String)source()); out.setIterator(in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.iterators;IteratorIterable;true;IteratorIterable;;;Element of Argument[0];Element of Argument[-1];value" IteratorIterable out = null; - Iterator in = (Iterator)newWithElement(source()); + Iterator in = newListIteratorWithElement((String)source()); out = new IteratorIterable(in, false); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.iterators;IteratorIterable;true;IteratorIterable;;;Element of Argument[0];Element of Argument[-1];value" IteratorIterable out = null; - Iterator in = (Iterator)newWithElement(source()); + Iterator in = newListIteratorWithElement((String)source()); out = new IteratorIterable(in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.iterators;ListIteratorWrapper;true;ListIteratorWrapper;;;Element of Argument[0];Element of Argument[-1];value" ListIteratorWrapper out = null; - Iterator in = (Iterator)newWithElement(source()); + Iterator in = newListIteratorWithElement((String)source()); out = new ListIteratorWrapper(in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.iterators;LoopingIterator;true;LoopingIterator;;;Element of Argument[0];Element of Argument[-1];value" LoopingIterator out = null; - Collection in = (Collection)newWithElement(source()); + Collection in = newTreeBagWithElement((String)source()); out = new LoopingIterator(in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.iterators;LoopingListIterator;true;LoopingListIterator;;;Element of Argument[0];Element of Argument[-1];value" LoopingListIterator out = null; - List in = (List)List.of(source()); + List in = List.of((String)source()); out = new LoopingListIterator(in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.iterators;ObjectArrayIterator;true;ObjectArrayIterator;;;ArrayElement of Argument[0];Element of Argument[-1];value" ObjectArrayIterator out = null; - Object[] in = (Object[])new Object[]{source()}; + Object[] in = new Object[]{(String)source()}; out = new ObjectArrayIterator(in, 0, 0); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.iterators;ObjectArrayIterator;true;ObjectArrayIterator;;;ArrayElement of Argument[0];Element of Argument[-1];value" ObjectArrayIterator out = null; - Object[] in = (Object[])new Object[]{source()}; + Object[] in = new Object[]{(String)source()}; out = new ObjectArrayIterator(in, 0); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.iterators;ObjectArrayIterator;true;ObjectArrayIterator;;;ArrayElement of Argument[0];Element of Argument[-1];value" ObjectArrayIterator out = null; - Object[] in = (Object[])new Object[]{source()}; + Object[] in = new Object[]{(String)source()}; out = new ObjectArrayIterator(in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.iterators;ObjectArrayIterator;true;getArray;;;Element of Argument[-1];ArrayElement of ReturnValue;value" Object[] out = null; - ObjectArrayIterator in = (ObjectArrayIterator)newWithElement(source()); + ObjectArrayIterator in = new ObjectArrayIterator(new Object[]{(String)source()}); out = in.getArray(); sink(getArrayElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.iterators;ObjectArrayListIterator;true;ObjectArrayListIterator;;;ArrayElement of Argument[0];Element of Argument[-1];value" ObjectArrayListIterator out = null; - Object[] in = (Object[])new Object[]{source()}; + Object[] in = new Object[]{(String)source()}; out = new ObjectArrayListIterator(in, 0, 0); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.iterators;ObjectArrayListIterator;true;ObjectArrayListIterator;;;ArrayElement of Argument[0];Element of Argument[-1];value" ObjectArrayListIterator out = null; - Object[] in = (Object[])new Object[]{source()}; + Object[] in = new Object[]{(String)source()}; out = new ObjectArrayListIterator(in, 0); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.iterators;ObjectArrayListIterator;true;ObjectArrayListIterator;;;ArrayElement of Argument[0];Element of Argument[-1];value" ObjectArrayListIterator out = null; - Object[] in = (Object[])new Object[]{source()}; + Object[] in = new Object[]{(String)source()}; out = new ObjectArrayListIterator(in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.iterators;PeekingIterator;true;PeekingIterator;;;Element of Argument[0];Element of Argument[-1];value" PeekingIterator out = null; - Iterator in = (Iterator)newWithElement(source()); + Iterator in = newListIteratorWithElement((String)source()); out = new PeekingIterator(in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.iterators;PeekingIterator;true;element;;;Element of Argument[-1];ReturnValue;value" Object out = null; - PeekingIterator in = (PeekingIterator)newWithElement(source()); + PeekingIterator in = new PeekingIterator(newListIteratorWithElement((String)source())); out = in.element(); sink(out); // $ hasValueFlow } { // "org.apache.commons.collections4.iterators;PeekingIterator;true;peek;;;Element of Argument[-1];ReturnValue;value" Object out = null; - PeekingIterator in = (PeekingIterator)newWithElement(source()); + PeekingIterator in = new PeekingIterator(newListIteratorWithElement((String)source())); out = in.peek(); sink(out); // $ hasValueFlow } { // "org.apache.commons.collections4.iterators;PeekingIterator;true;peekingIterator;;;Element of Argument[0];Element of ReturnValue;value" PeekingIterator out = null; - Iterator in = (Iterator)newWithElement(source()); + Iterator in = newListIteratorWithElement((String)source()); out = PeekingIterator.peekingIterator(in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.iterators;PermutationIterator;true;PermutationIterator;;;Element of Argument[0];Element of Element of Argument[-1];value" - PermutationIterator out = null; - Collection in = (Collection)List.of(source()); + PermutationIterator out = null; + Collection in = List.of((String)source()); out = new PermutationIterator(in); sink(getElement(getElement(out))); // $ hasValueFlow } { // "org.apache.commons.collections4.iterators;PushbackIterator;true;PushbackIterator;;;Element of Argument[0];Element of Argument[-1];value" PushbackIterator out = null; - Iterator in = (Iterator)newWithElement(source()); + Iterator in = newListIteratorWithElement((String)source()); out = new PushbackIterator(in); sink(getElement(out)); // $ hasValueFlow } @@ -1168,14 +1282,14 @@ public class TestNew { { // "org.apache.commons.collections4.iterators;PushbackIterator;true;pushbackIterator;;;Element of Argument[0];Element of ReturnValue;value" PushbackIterator out = null; - Iterator in = (Iterator)newWithElement(source()); + Iterator in = newListIteratorWithElement((String)source()); out = PushbackIterator.pushbackIterator(in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.iterators;ReverseListIterator;true;ReverseListIterator;;;Element of Argument[0];Element of Argument[-1];value" ReverseListIterator out = null; - List in = (List)List.of(source()); + List in = (List)List.of((String)source()); out = new ReverseListIterator(in); sink(getElement(out)); // $ hasValueFlow } @@ -1203,98 +1317,98 @@ public class TestNew { { // "org.apache.commons.collections4.iterators;SkippingIterator;true;SkippingIterator;;;Element of Argument[0];Element of Argument[-1];value" SkippingIterator out = null; - Iterator in = (Iterator)newWithElement(source()); + Iterator in = newListIteratorWithElement((String)source()); out = new SkippingIterator(in, 0L); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.iterators;UniqueFilterIterator;true;UniqueFilterIterator;;;Element of Argument[0];Element of Argument[-1];value" UniqueFilterIterator out = null; - Iterator in = (Iterator)newWithElement(source()); + Iterator in = newListIteratorWithElement((String)source()); out = new UniqueFilterIterator(in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.iterators;UnmodifiableIterator;true;unmodifiableIterator;;;Element of Argument[0];Element of ReturnValue;value" Iterator out = null; - Iterator in = (Iterator)newWithElement(source()); + Iterator in = newListIteratorWithElement((String)source()); out = UnmodifiableIterator.unmodifiableIterator(in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.iterators;UnmodifiableListIterator;true;umodifiableListIterator;;;Element of Argument[0];Element of ReturnValue;value" ListIterator out = null; - ListIterator in = (ListIterator)newWithElement(source()); + ListIterator in = newListIteratorWithElement((String)source()); out = UnmodifiableListIterator.umodifiableListIterator(in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.iterators;UnmodifiableMapIterator;true;unmodifiableMapIterator;;;Element of Argument[0];Element of ReturnValue;value" MapIterator out = null; - MapIterator in = (MapIterator)newWithElement(source()); + MapIterator in = newLinkedMapWithMapKey((String)source()).mapIterator(); out = UnmodifiableMapIterator.unmodifiableMapIterator(in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.iterators;UnmodifiableMapIterator;true;unmodifiableMapIterator;;;MapValue of Argument[0];MapValue of ReturnValue;value" MapIterator out = null; - MapIterator in = (MapIterator)newWithMapValue(source()); + MapIterator in = newLinkedMapWithMapValue((String)source()).mapIterator(); out = UnmodifiableMapIterator.unmodifiableMapIterator(in); sink(getMapValue(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.iterators;UnmodifiableOrderedMapIterator;true;unmodifiableOrderedMapIterator;;;Element of Argument[0];Element of ReturnValue;value" OrderedMapIterator out = null; - OrderedMapIterator in = (OrderedMapIterator)newWithElement(source()); + OrderedMapIterator in = newListOrderedMapWithMapKey((String)source()).mapIterator(); out = UnmodifiableOrderedMapIterator.unmodifiableOrderedMapIterator(in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.iterators;UnmodifiableOrderedMapIterator;true;unmodifiableOrderedMapIterator;;;MapValue of Argument[0];MapValue of ReturnValue;value" OrderedMapIterator out = null; - OrderedMapIterator in = (OrderedMapIterator)newWithMapValue(source()); + OrderedMapIterator in = newListOrderedMapWithMapValue((String)source()).mapIterator(); out = UnmodifiableOrderedMapIterator.unmodifiableOrderedMapIterator(in); sink(getMapValue(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.iterators;ZippingIterator;true;ZippingIterator;(Iterator,Iterator);;Element of Argument[0];Element of Argument[-1];value" ZippingIterator out = null; - Iterator in = (Iterator)newWithElement(source()); + Iterator in = newListIteratorWithElement((String)source()); out = new ZippingIterator(in, null); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.iterators;ZippingIterator;true;ZippingIterator;(Iterator,Iterator);;Element of Argument[1];Element of Argument[-1];value" ZippingIterator out = null; - Iterator in = (Iterator)newWithElement(source()); + Iterator in = newListIteratorWithElement((String)source()); out = new ZippingIterator(null, in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.iterators;ZippingIterator;true;ZippingIterator;(Iterator,Iterator,Iterator);;Element of Argument[0];Element of Argument[-1];value" ZippingIterator out = null; - Iterator in = (Iterator)newWithElement(source()); + Iterator in = newListIteratorWithElement((String)source()); out = new ZippingIterator(in, null, null); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.iterators;ZippingIterator;true;ZippingIterator;(Iterator,Iterator,Iterator);;Element of Argument[1];Element of Argument[-1];value" ZippingIterator out = null; - Iterator in = (Iterator)newWithElement(source()); + Iterator in = newListIteratorWithElement((String)source()); out = new ZippingIterator(null, in, null); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.iterators;ZippingIterator;true;ZippingIterator;(Iterator,Iterator,Iterator);;Element of Argument[2];Element of Argument[-1];value" ZippingIterator out = null; - Iterator in = (Iterator)newWithElement(source()); + Iterator in = newListIteratorWithElement((String)source()); out = new ZippingIterator(null, null, in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.iterators;ZippingIterator;true;ZippingIterator;(Iterator[]);;Element of ArrayElement of Argument[0];Element of Argument[-1];value" ZippingIterator out = null; - Iterator[] in = (Iterator[])new Iterator[]{(Iterator)newWithElement(source())}; + Iterator[] in = (Iterator[])new Iterator[]{newListIteratorWithElement((String)source())}; out = new ZippingIterator(in); sink(getElement(out)); // $ hasValueFlow } @@ -1399,28 +1513,28 @@ public class TestNew { { // "org.apache.commons.collections4.keyvalue;MultiKey;true;MultiKey;(Object[]);;ArrayElement of Argument[0];Element of Argument[-1];value" MultiKey out = null; - Object[] in = (Object[])new Object[]{source()}; + Object[] in = (Object[])new Object[]{(String)source()}; out = new MultiKey(in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.keyvalue;MultiKey;true;MultiKey;(Object[],boolean);;ArrayElement of Argument[0];Element of Argument[-1];value" MultiKey out = null; - Object[] in = (Object[])new Object[]{source()}; + Object[] in = (Object[])new Object[]{(String)source()}; out = new MultiKey(in, false); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.keyvalue;MultiKey;true;getKey;;;Element of Argument[-1];ReturnValue;value" Object out = null; - MultiKey in = (MultiKey)newWithElement(source()); + MultiKey in = newMultiKeyWithElement((String)source()); out = in.getKey(0); sink(out); // $ hasValueFlow } { // "org.apache.commons.collections4.keyvalue;MultiKey;true;getKeys;;;Element of Argument[-1];ArrayElement of ReturnValue;value" Object[] out = null; - MultiKey in = (MultiKey)newWithElement(source()); + MultiKey in = newMultiKeyWithElement((String)source()); out = in.getKeys(); sink(getArrayElement(out)); // $ hasValueFlow } @@ -1441,273 +1555,273 @@ public class TestNew { { // "org.apache.commons.collections4.list;AbstractLinkedList;true;getFirst;;;Element of Argument[-1];ReturnValue;value" Object out = null; - AbstractLinkedList in = (AbstractLinkedList)newWithElement(source()); + AbstractLinkedList in = newCursorableLinkedListWithElement((String)source()); out = in.getFirst(); sink(out); // $ hasValueFlow } { // "org.apache.commons.collections4.list;AbstractLinkedList;true;getLast;;;Element of Argument[-1];ReturnValue;value" Object out = null; - AbstractLinkedList in = (AbstractLinkedList)newWithElement(source()); + AbstractLinkedList in = newCursorableLinkedListWithElement((String)source()); out = in.getLast(); sink(out); // $ hasValueFlow } { // "org.apache.commons.collections4.list;AbstractLinkedList;true;removeFirst;;;Element of Argument[-1];ReturnValue;value" Object out = null; - AbstractLinkedList in = (AbstractLinkedList)newWithElement(source()); + AbstractLinkedList in = newCursorableLinkedListWithElement((String)source()); out = in.removeFirst(); sink(out); // $ hasValueFlow } { // "org.apache.commons.collections4.list;AbstractLinkedList;true;removeLast;;;Element of Argument[-1];ReturnValue;value" Object out = null; - AbstractLinkedList in = (AbstractLinkedList)newWithElement(source()); + AbstractLinkedList in = newCursorableLinkedListWithElement((String)source()); out = in.removeLast(); sink(out); // $ hasValueFlow } { // "org.apache.commons.collections4.list;CursorableLinkedList;true;CursorableLinkedList;;;Element of Argument[0];Element of Argument[-1];value" CursorableLinkedList out = null; - Collection in = (Collection)List.of(source()); + Collection in = (Collection)List.of((String)source()); out = new CursorableLinkedList(in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.list;CursorableLinkedList;true;cursor;;;Element of Argument[-1];Element of ReturnValue;value" CursorableLinkedList.Cursor out = null; - CursorableLinkedList in = (CursorableLinkedList)newWithElement(source()); + CursorableLinkedList in = newCursorableLinkedListWithElement((String)source()); out = in.cursor(0); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.list;CursorableLinkedList;true;cursor;;;Element of Argument[-1];Element of ReturnValue;value" CursorableLinkedList.Cursor out = null; - CursorableLinkedList in = (CursorableLinkedList)newWithElement(source()); + CursorableLinkedList in = newCursorableLinkedListWithElement((String)source()); out = in.cursor(); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.list;FixedSizeList;true;fixedSizeList;;;Element of Argument[0];Element of ReturnValue;value" FixedSizeList out = null; - List in = (List)List.of(source()); + List in = (List)List.of((String)source()); out = FixedSizeList.fixedSizeList(in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.list;GrowthList;true;growthList;;;Element of Argument[0];Element of ReturnValue;value" GrowthList out = null; - List in = (List)List.of(source()); + List in = (List)List.of((String)source()); out = GrowthList.growthList(in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.list;LazyList;true;lazyList;;;Element of Argument[0];Element of ReturnValue;value" LazyList out = null; - List in = (List)List.of(source()); + List in = (List)List.of((String)source()); out = LazyList.lazyList(in, (Transformer)null); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.list;LazyList;true;lazyList;;;Element of Argument[0];Element of ReturnValue;value" LazyList out = null; - List in = (List)List.of(source()); + List in = (List)List.of((String)source()); out = LazyList.lazyList(in, (Factory)null); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.list;NodeCachingLinkedList;true;NodeCachingLinkedList;(Collection);;Element of Argument[0];Element of Argument[-1];value" NodeCachingLinkedList out = null; - Collection in = (Collection)List.of(source()); + Collection in = (Collection)List.of((String)source()); out = new NodeCachingLinkedList(in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.list;PredicatedList;true;predicatedList;;;Element of Argument[0];Element of ReturnValue;value" PredicatedList out = null; - List in = (List)List.of(source()); + List in = (List)List.of((String)source()); out = PredicatedList.predicatedList(in, null); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.list;SetUniqueList;true;asSet;;;Element of Argument[-1];Element of ReturnValue;value" Set out = null; - SetUniqueList in = (SetUniqueList)newWithElement(source()); + SetUniqueList in = SetUniqueList.setUniqueList(List.of((String)source())); out = in.asSet(); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.list;SetUniqueList;true;setUniqueList;;;Element of Argument[0];Element of ReturnValue;value" SetUniqueList out = null; - List in = (List)List.of(source()); + List in = (List)List.of((String)source()); out = SetUniqueList.setUniqueList(in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.list;TransformedList;true;transformingList;;;Element of Argument[0];Element of ReturnValue;value" TransformedList out = null; - List in = (List)List.of(source()); + List in = (List)List.of((String)source()); out = TransformedList.transformingList(in, null); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.list;TreeList;true;TreeList;;;Element of Argument[0];Element of Argument[-1];value" TreeList out = null; - Collection in = (Collection)List.of(source()); + Collection in = (Collection)List.of((String)source()); out = new TreeList(in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.list;UnmodifiableList;true;UnmodifiableList;;;Element of Argument[0];Element of Argument[-1];value" UnmodifiableList out = null; - List in = (List)List.of(source()); + List in = (List)List.of((String)source()); out = new UnmodifiableList(in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.list;UnmodifiableList;true;unmodifiableList;;;Element of Argument[0];Element of ReturnValue;value" List out = null; - List in = (List)List.of(source()); + List in = (List)List.of((String)source()); out = UnmodifiableList.unmodifiableList(in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;AbstractOrderedMapDecorator;true;AbstractOrderedMapDecorator;(OrderedMap);;MapKey of Argument[0];MapKey of Argument[-1];value" AbstractOrderedMapDecorator out = null; - OrderedMap in = (OrderedMap)newWithMapKey(source()); + OrderedMap in = newListOrderedMapWithMapKey((String)source()); out = new MyAbstractOrderedMapDecorator(in); sink(getMapKey(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;AbstractOrderedMapDecorator;true;AbstractOrderedMapDecorator;(OrderedMap);;MapValue of Argument[0];MapValue of Argument[-1];value" AbstractOrderedMapDecorator out = null; - OrderedMap in = (OrderedMap)newWithMapValue(source()); + OrderedMap in = newListOrderedMapWithMapValue((String)source()); out = new MyAbstractOrderedMapDecorator(in); sink(getMapValue(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;AbstractSortedMapDecorator;true;AbstractSortedMapDecorator;(SortedMap);;MapKey of Argument[0];MapKey of Argument[-1];value" AbstractSortedMapDecorator out = null; - SortedMap in = (SortedMap)newWithMapKey(source()); + SortedMap in = newTreeMapWithMapKey((String)source()); out = new MyAbstractSortedMapDecorator(in); sink(getMapKey(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;AbstractSortedMapDecorator;true;AbstractSortedMapDecorator;(SortedMap);;MapValue of Argument[0];MapValue of Argument[-1];value" AbstractSortedMapDecorator out = null; - SortedMap in = (SortedMap)newWithMapValue(source()); + SortedMap in = newTreeMapWithMapValue((String)source()); out = new MyAbstractSortedMapDecorator(in); sink(getMapValue(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;CaseInsensitiveMap;true;CaseInsensitiveMap;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value" CaseInsensitiveMap out = null; - Map in = (Map)Map.of(source(), null); + Map in = Map.of((String)source(), null); out = new CaseInsensitiveMap(in); sink(getMapKey(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;CaseInsensitiveMap;true;CaseInsensitiveMap;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value" CaseInsensitiveMap out = null; - Map in = (Map)Map.of(null, source()); + Map in = Map.of(null, (String)source()); out = new CaseInsensitiveMap(in); sink(getMapValue(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;CompositeMap;true;CompositeMap;(Map,Map);;MapKey of Argument[0];MapKey of Argument[-1];value" CompositeMap out = null; - Map in = (Map)Map.of(source(), null); + Map in = Map.of((String)source(), null); out = new CompositeMap(in, (Map)null); sink(getMapKey(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;CompositeMap;true;CompositeMap;(Map,Map);;MapKey of Argument[1];MapKey of Argument[-1];value" CompositeMap out = null; - Map in = (Map)Map.of(source(), null); + Map in = Map.of((String)source(), null); out = new CompositeMap((Map)null, in); sink(getMapKey(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;CompositeMap;true;CompositeMap;(Map,Map);;MapValue of Argument[0];MapValue of Argument[-1];value" CompositeMap out = null; - Map in = (Map)Map.of(null, source()); + Map in = Map.of(null, (String)source()); out = new CompositeMap(in, (Map)null); sink(getMapValue(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;CompositeMap;true;CompositeMap;(Map,Map);;MapValue of Argument[1];MapValue of Argument[-1];value" CompositeMap out = null; - Map in = (Map)Map.of(null, source()); + Map in = Map.of(null, (String)source()); out = new CompositeMap((Map)null, in); sink(getMapValue(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;CompositeMap;true;CompositeMap;(Map,Map,MapMutator);;MapKey of Argument[0];MapKey of Argument[-1];value" CompositeMap out = null; - Map in = (Map)Map.of(source(), null); + Map in = Map.of((String)source(), null); out = new CompositeMap(in, null, null); sink(getMapKey(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;CompositeMap;true;CompositeMap;(Map,Map,MapMutator);;MapKey of Argument[1];MapKey of Argument[-1];value" CompositeMap out = null; - Map in = (Map)Map.of(source(), null); + Map in = Map.of((String)source(), null); out = new CompositeMap(null, in, null); sink(getMapKey(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;CompositeMap;true;CompositeMap;(Map,Map,MapMutator);;MapValue of Argument[0];MapValue of Argument[-1];value" CompositeMap out = null; - Map in = (Map)Map.of(null, source()); + Map in = Map.of(null, (String)source()); out = new CompositeMap(in, null, null); sink(getMapValue(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;CompositeMap;true;CompositeMap;(Map,Map,MapMutator);;MapValue of Argument[1];MapValue of Argument[-1];value" CompositeMap out = null; - Map in = (Map)Map.of(null, source()); + Map in = Map.of(null, (String)source()); out = new CompositeMap(null, in, null); sink(getMapValue(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;CompositeMap;true;CompositeMap;(Map[]);;MapKey of ArrayElement of Argument[0];MapKey of Argument[-1];value" CompositeMap out = null; - Map[] in = (Map[])new Map[]{(Map)newWithMapKey(source())}; + Map[] in = (Map[])new Map[]{Map.of((String)source(), null)}; out = new CompositeMap(in); sink(getMapKey(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;CompositeMap;true;CompositeMap;(Map[]);;MapValue of ArrayElement of Argument[0];MapValue of Argument[-1];value" CompositeMap out = null; - Map[] in = (Map[])new Map[]{(Map)newWithMapValue(source())}; + Map[] in = (Map[])new Map[]{Map.of(null, (String)source())}; out = new CompositeMap(in); sink(getMapValue(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;CompositeMap;true;CompositeMap;(Map[],MapMutator);;MapKey of ArrayElement of Argument[0];MapKey of Argument[-1];value" CompositeMap out = null; - Map[] in = (Map[])new Map[]{(Map)newWithMapKey(source())}; + Map[] in = (Map[])new Map[]{Map.of((String)source(), null)}; out = new CompositeMap(in, (CompositeMap.MapMutator)null); sink(getMapKey(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;CompositeMap;true;CompositeMap;(Map[],MapMutator);;MapValue of ArrayElement of Argument[0];MapValue of Argument[-1];value" CompositeMap out = null; - Map[] in = (Map[])new Map[]{(Map)newWithMapValue(source())}; + Map[] in = (Map[])new Map[]{Map.of(null, (String)source())}; out = new CompositeMap(in, (CompositeMap.MapMutator)null); sink(getMapValue(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;CompositeMap;true;addComposited;;;MapKey of Argument[0];MapKey of Argument[-1];value" CompositeMap out = null; - Map in = (Map)Map.of(source(), null); + Map in = Map.of((String)source(), null); out.addComposited(in); sink(getMapKey(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;CompositeMap;true;addComposited;;;MapValue of Argument[0];MapValue of Argument[-1];value" CompositeMap out = null; - Map in = (Map)Map.of(null, source()); + Map in = Map.of(null, (String)source()); out.addComposited(in); sink(getMapValue(out)); // $ hasValueFlow } @@ -1722,14 +1836,14 @@ public class TestNew { { // "org.apache.commons.collections4.map;CompositeMap;true;removeComposited;;;MapKey of Argument[-1];MapKey of ReturnValue;value" Map out = null; - CompositeMap in = (CompositeMap)newWithMapKey(source()); + CompositeMap in = new CompositeMap(Map.of((String)source(), null), null); out = in.removeComposited(null); sink(getMapKey(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;CompositeMap;true;removeComposited;;;MapValue of Argument[-1];MapValue of ReturnValue;value" Map out = null; - CompositeMap in = (CompositeMap)newWithMapValue(source()); + CompositeMap in = new CompositeMap(Map.of(null, (String)source()), null); out = in.removeComposited(null); sink(getMapValue(out)); // $ hasValueFlow } @@ -1750,147 +1864,147 @@ public class TestNew { { // "org.apache.commons.collections4.map;DefaultedMap;true;defaultedMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" Map out = null; - Map in = (Map)Map.of(source(), null); + Map in = Map.of((String)source(), null); out = DefaultedMap.defaultedMap(in, (Transformer)null); sink(getMapKey(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;DefaultedMap;true;defaultedMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" DefaultedMap out = null; - Map in = (Map)Map.of(source(), null); + Map in = Map.of((String)source(), null); out = DefaultedMap.defaultedMap(in, (Object)null); sink(getMapKey(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;DefaultedMap;true;defaultedMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" DefaultedMap out = null; - Map in = (Map)Map.of(source(), null); + Map in = Map.of((String)source(), null); out = DefaultedMap.defaultedMap(in, (Factory)null); sink(getMapKey(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;DefaultedMap;true;defaultedMap;;;MapValue of Argument[0];MapValue of ReturnValue;value" Map out = null; - Map in = (Map)Map.of(null, source()); + Map in = Map.of(null, (String)source()); out = DefaultedMap.defaultedMap(in, (Transformer)null); sink(getMapValue(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;DefaultedMap;true;defaultedMap;;;MapValue of Argument[0];MapValue of ReturnValue;value" DefaultedMap out = null; - Map in = (Map)Map.of(null, source()); + Map in = Map.of(null, (String)source()); out = DefaultedMap.defaultedMap(in, (Object)null); sink(getMapValue(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;DefaultedMap;true;defaultedMap;;;MapValue of Argument[0];MapValue of ReturnValue;value" DefaultedMap out = null; - Map in = (Map)Map.of(null, source()); + Map in = Map.of(null, (String)source()); out = DefaultedMap.defaultedMap(in, (Factory)null); sink(getMapValue(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;EntrySetToMapIteratorAdapter;true;EntrySetToMapIteratorAdapter;;;MapKey of Element of Argument[0];Element of Argument[-1];value" EntrySetToMapIteratorAdapter out = null; - Set in = (Set)newWithElement(newWithMapKey(source())); + Set in = newListOrderedSetWithElement(newTMEWithMapKey((String)source())); out = new EntrySetToMapIteratorAdapter(in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;EntrySetToMapIteratorAdapter;true;EntrySetToMapIteratorAdapter;;;MapValue of Element of Argument[0];MapValue of Argument[-1];value" EntrySetToMapIteratorAdapter out = null; - Set in = (Set)newWithElement(newWithMapValue(source())); + Set in = newListOrderedSetWithElement(newTMEWithMapValue((String)source())); out = new EntrySetToMapIteratorAdapter(in); sink(getMapValue(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;FixedSizeMap;true;fixedSizeMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" FixedSizeMap out = null; - Map in = (Map)Map.of(source(), null); + Map in = Map.of((String)source(), null); out = FixedSizeMap.fixedSizeMap(in); sink(getMapKey(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;FixedSizeMap;true;fixedSizeMap;;;MapValue of Argument[0];MapValue of ReturnValue;value" FixedSizeMap out = null; - Map in = (Map)Map.of(null, source()); + Map in = Map.of(null, (String)source()); out = FixedSizeMap.fixedSizeMap(in); sink(getMapValue(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;FixedSizeSortedMap;true;fixedSizeSortedMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" FixedSizeSortedMap out = null; - SortedMap in = (SortedMap)newWithMapKey(source()); + SortedMap in = newTreeMapWithMapKey((String)source()); out = FixedSizeSortedMap.fixedSizeSortedMap(in); sink(getMapKey(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;FixedSizeSortedMap;true;fixedSizeSortedMap;;;MapValue of Argument[0];MapValue of ReturnValue;value" FixedSizeSortedMap out = null; - SortedMap in = (SortedMap)newWithMapValue(source()); + SortedMap in = newTreeMapWithMapValue((String)source()); out = FixedSizeSortedMap.fixedSizeSortedMap(in); sink(getMapValue(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;Flat3Map;true;Flat3Map;;;MapKey of Argument[0];MapKey of Argument[-1];value" Flat3Map out = null; - Map in = (Map)Map.of(source(), null); + Map in = Map.of((String)source(), null); out = new Flat3Map(in); sink(getMapKey(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;Flat3Map;true;Flat3Map;;;MapValue of Argument[0];MapValue of Argument[-1];value" Flat3Map out = null; - Map in = (Map)Map.of(null, source()); + Map in = Map.of(null, (String)source()); out = new Flat3Map(in); sink(getMapValue(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;HashedMap;true;HashedMap;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value" HashedMap out = null; - Map in = (Map)Map.of(source(), null); + Map in = Map.of((String)source(), null); out = new HashedMap(in); sink(getMapKey(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;HashedMap;true;HashedMap;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value" HashedMap out = null; - Map in = (Map)Map.of(null, source()); + Map in = Map.of(null, (String)source()); out = new HashedMap(in); sink(getMapValue(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;LRUMap;true;LRUMap;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value" LRUMap out = null; - Map in = (Map)Map.of(source(), null); + Map in = Map.of((String)source(), null); out = new LRUMap(in); sink(getMapKey(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;LRUMap;true;LRUMap;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value" LRUMap out = null; - Map in = (Map)Map.of(null, source()); + Map in = Map.of(null, (String)source()); out = new LRUMap(in); sink(getMapValue(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;LRUMap;true;LRUMap;(Map,boolean);;MapKey of Argument[0];MapKey of Argument[-1];value" LRUMap out = null; - Map in = (Map)Map.of(source(), null); + Map in = Map.of((String)source(), null); out = new LRUMap(in, false); sink(getMapKey(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;LRUMap;true;LRUMap;(Map,boolean);;MapValue of Argument[0];MapValue of Argument[-1];value" LRUMap out = null; - Map in = (Map)Map.of(null, source()); + Map in = Map.of(null, (String)source()); out = new LRUMap(in, false); sink(getMapValue(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;LRUMap;true;get;(Object,boolean);;MapValue of Argument[0];ReturnValue;value" Object out = null; - Object in = (Object)Map.of(null, source()); + Object in = (Object)Map.of(null, (String)source()); LRUMap instance = null; out = instance.get(in, false); sink(out); // $ hasValueFlow @@ -1898,140 +2012,140 @@ public class TestNew { { // "org.apache.commons.collections4.map;LazyMap;true;lazyMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" LazyMap out = null; - Map in = (Map)Map.of(source(), null); + Map in = Map.of((String)source(), null); out = LazyMap.lazyMap(in, (Transformer)null); sink(getMapKey(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;LazyMap;true;lazyMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" LazyMap out = null; - Map in = (Map)Map.of(source(), null); + Map in = Map.of((String)source(), null); out = LazyMap.lazyMap(in, (Factory)null); sink(getMapKey(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;LazyMap;true;lazyMap;;;MapValue of Argument[0];MapValue of ReturnValue;value" LazyMap out = null; - Map in = (Map)Map.of(null, source()); + Map in = Map.of(null, (String)source()); out = LazyMap.lazyMap(in, (Transformer)null); sink(getMapValue(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;LazyMap;true;lazyMap;;;MapValue of Argument[0];MapValue of ReturnValue;value" LazyMap out = null; - Map in = (Map)Map.of(null, source()); + Map in = Map.of(null, (String)source()); out = LazyMap.lazyMap(in, (Factory)null); sink(getMapValue(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;LazySortedMap;true;lazySortedMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" LazySortedMap out = null; - SortedMap in = (SortedMap)newWithMapKey(source()); + SortedMap in = newTreeMapWithMapKey((String)source()); out = LazySortedMap.lazySortedMap(in, (Transformer)null); sink(getMapKey(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;LazySortedMap;true;lazySortedMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" LazySortedMap out = null; - SortedMap in = (SortedMap)newWithMapKey(source()); + SortedMap in = newTreeMapWithMapKey((String)source()); out = LazySortedMap.lazySortedMap(in, (Factory)null); sink(getMapKey(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;LazySortedMap;true;lazySortedMap;;;MapValue of Argument[0];MapValue of ReturnValue;value" LazySortedMap out = null; - SortedMap in = (SortedMap)newWithMapValue(source()); + SortedMap in = newTreeMapWithMapValue((String)source()); out = LazySortedMap.lazySortedMap(in, (Transformer)null); sink(getMapValue(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;LazySortedMap;true;lazySortedMap;;;MapValue of Argument[0];MapValue of ReturnValue;value" LazySortedMap out = null; - SortedMap in = (SortedMap)newWithMapValue(source()); + SortedMap in = newTreeMapWithMapValue((String)source()); out = LazySortedMap.lazySortedMap(in, (Factory)null); sink(getMapValue(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;LinkedMap;true;LinkedMap;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value" LinkedMap out = null; - Map in = (Map)Map.of(source(), null); + Map in = Map.of((String)source(), null); out = new LinkedMap(in); sink(getMapKey(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;LinkedMap;true;LinkedMap;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value" LinkedMap out = null; - Map in = (Map)Map.of(null, source()); + Map in = Map.of(null, (String)source()); out = new LinkedMap(in); sink(getMapValue(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;LinkedMap;true;asList;;;MapKey of Argument[-1];Element of ReturnValue;value" List out = null; - LinkedMap in = (LinkedMap)newWithMapKey(source()); + LinkedMap in = newLinkedMapWithMapKey((String)source()); out = in.asList(); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;LinkedMap;true;get;(int);;MapKey of Argument[-1];ReturnValue;value" Object out = null; - LinkedMap in = (LinkedMap)newWithMapKey(source()); + LinkedMap in = newLinkedMapWithMapKey((String)source()); out = in.get(0); sink(out); // $ hasValueFlow } { // "org.apache.commons.collections4.map;LinkedMap;true;getValue;(int);;MapValue of Argument[-1];ReturnValue;value" Object out = null; - LinkedMap in = (LinkedMap)newWithMapValue(source()); + LinkedMap in = newLinkedMapWithMapValue((String)source()); out = in.getValue(0); sink(out); // $ hasValueFlow } { // "org.apache.commons.collections4.map;LinkedMap;true;remove;(int);;MapValue of Argument[-1];ReturnValue;value" Object out = null; - LinkedMap in = (LinkedMap)newWithMapValue(source()); + LinkedMap in = newLinkedMapWithMapValue((String)source()); out = in.remove(0); sink(out); // $ hasValueFlow } { // "org.apache.commons.collections4.map;ListOrderedMap;true;asList;;;MapKey of Argument[-1];Element of ReturnValue;value" List out = null; - ListOrderedMap in = (ListOrderedMap)newWithMapKey(source()); + ListOrderedMap in = newListOrderedMapWithMapKey((String)source()); out = in.asList(); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;ListOrderedMap;true;get;(int);;MapKey of Argument[-1];ReturnValue;value" Object out = null; - ListOrderedMap in = (ListOrderedMap)newWithMapKey(source()); + ListOrderedMap in = newListOrderedMapWithMapKey(source()); out = in.get(0); sink(out); // $ hasValueFlow } { // "org.apache.commons.collections4.map;ListOrderedMap;true;getValue;(int);;MapValue of Argument[-1];ReturnValue;value" Object out = null; - ListOrderedMap in = (ListOrderedMap)newWithMapValue(source()); + ListOrderedMap in = newListOrderedMapWithMapValue(source()); out = in.getValue(0); sink(out); // $ hasValueFlow } { // "org.apache.commons.collections4.map;ListOrderedMap;true;keyList;;;MapKey of Argument[-1];Element of ReturnValue;value" List out = null; - ListOrderedMap in = (ListOrderedMap)newWithMapKey(source()); + ListOrderedMap in = newListOrderedMapWithMapKey((String)source()); out = in.keyList(); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;ListOrderedMap;true;listOrderedMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" ListOrderedMap out = null; - Map in = (Map)Map.of(source(), null); + Map in = Map.of((String)source(), null); out = ListOrderedMap.listOrderedMap(in); sink(getMapKey(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;ListOrderedMap;true;listOrderedMap;;;MapValue of Argument[0];MapValue of ReturnValue;value" ListOrderedMap out = null; - Map in = (Map)Map.of(null, source()); + Map in = Map.of(null, (String)source()); out = ListOrderedMap.listOrderedMap(in); sink(getMapValue(out)); // $ hasValueFlow } @@ -2059,21 +2173,21 @@ public class TestNew { { // "org.apache.commons.collections4.map;ListOrderedMap;true;putAll;;;MapKey of Argument[1];MapKey of Argument[-1];value" ListOrderedMap out = null; - Map in = (Map)Map.of(source(), null); + Map in = Map.of((String)source(), null); out.putAll(0, in); sink(getMapKey(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;ListOrderedMap;true;putAll;;;MapValue of Argument[1];MapValue of Argument[-1];value" ListOrderedMap out = null; - Map in = (Map)Map.of(null, source()); + Map in = Map.of(null, (String)source()); out.putAll(0, in); sink(getMapValue(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;ListOrderedMap;true;remove;(int);;MapValue of Argument[-1];ReturnValue;value" Object out = null; - ListOrderedMap in = (ListOrderedMap)newWithMapValue(source()); + ListOrderedMap in = newListOrderedMapWithMapValue((String)source()); out = in.remove(0); sink(out); // $ hasValueFlow } @@ -2087,310 +2201,310 @@ public class TestNew { { // "org.apache.commons.collections4.map;ListOrderedMap;true;valueList;;;MapValue of Argument[-1];Element of ReturnValue;value" List out = null; - ListOrderedMap in = (ListOrderedMap)newWithMapValue(source()); + ListOrderedMap in = newListOrderedMapWithMapValue((String)source()); out = in.valueList(); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;MultiKeyMap;true;get;;;MapValue of Argument[-1];ReturnValue;value" Object out = null; - MultiKeyMap in = (MultiKeyMap)newWithMapValue(source()); + MultiKeyMap in = newMKMWithMapValue((String)source()); out = in.get(null, null, null, null, null); sink(out); // $ hasValueFlow } { // "org.apache.commons.collections4.map;MultiKeyMap;true;get;;;MapValue of Argument[-1];ReturnValue;value" Object out = null; - MultiKeyMap in = (MultiKeyMap)newWithMapValue(source()); + MultiKeyMap in = newMKMWithMapValue((String)source()); out = in.get(null, null, null, null); sink(out); // $ hasValueFlow } { // "org.apache.commons.collections4.map;MultiKeyMap;true;get;;;MapValue of Argument[-1];ReturnValue;value" Object out = null; - MultiKeyMap in = (MultiKeyMap)newWithMapValue(source()); + MultiKeyMap in = newMKMWithMapValue((String)source()); out = in.get(null, null, null); sink(out); // $ hasValueFlow } { // "org.apache.commons.collections4.map;MultiKeyMap;true;get;;;MapValue of Argument[-1];ReturnValue;value" Object out = null; - MultiKeyMap in = (MultiKeyMap)newWithMapValue(source()); + MultiKeyMap in = newMKMWithMapValue((String)source()); out = in.get(null, null); sink(out); // $ hasValueFlow } { // "org.apache.commons.collections4.map;MultiKeyMap;true;put;(Object,Object,Object);;Argument[0..1];Element of MapKey of Argument[-1];value" - MultiKeyMap out = null; - Object in = (Object)source(); + MultiKeyMap out = null; + String in = (String)source(); out.put(null, in, null); sink(getElement(getMapKey(out))); // $ hasValueFlow } { // "org.apache.commons.collections4.map;MultiKeyMap;true;put;(Object,Object,Object);;Argument[0..1];Element of MapKey of Argument[-1];value" - MultiKeyMap out = null; - Object in = (Object)source(); + MultiKeyMap out = null; + String in = (String)source(); out.put(in, null, null); sink(getElement(getMapKey(out))); // $ hasValueFlow } { // "org.apache.commons.collections4.map;MultiKeyMap;true;put;(Object,Object,Object);;Argument[2];MapValue of Argument[-1];value" - MultiKeyMap out = null; - Object in = (Object)source(); + MultiKeyMap out = null; + String in = (String)source(); out.put(null, null, in); sink(getMapValue(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;MultiKeyMap;true;put;(Object,Object,Object,Object);;Argument[0..2];Element of MapKey of Argument[-1];value" - MultiKeyMap out = null; - Object in = (Object)source(); + MultiKeyMap out = null; + String in = (String)source(); out.put(null, null, in, null); sink(getElement(getMapKey(out))); // $ hasValueFlow } { // "org.apache.commons.collections4.map;MultiKeyMap;true;put;(Object,Object,Object,Object);;Argument[0..2];Element of MapKey of Argument[-1];value" - MultiKeyMap out = null; - Object in = (Object)source(); + MultiKeyMap out = null; + String in = (String)source(); out.put(null, in, null, null); sink(getElement(getMapKey(out))); // $ hasValueFlow } { // "org.apache.commons.collections4.map;MultiKeyMap;true;put;(Object,Object,Object,Object);;Argument[0..2];Element of MapKey of Argument[-1];value" - MultiKeyMap out = null; - Object in = (Object)source(); + MultiKeyMap out = null; + String in = (String)source(); out.put(in, null, null, null); sink(getElement(getMapKey(out))); // $ hasValueFlow } { // "org.apache.commons.collections4.map;MultiKeyMap;true;put;(Object,Object,Object,Object);;Argument[3];MapValue of Argument[-1];value" - MultiKeyMap out = null; - Object in = (Object)source(); + MultiKeyMap out = null; + String in = (String)source(); out.put(null, null, null, in); sink(getMapValue(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;MultiKeyMap;true;put;(Object,Object,Object,Object,Object);;Argument[0..3];Element of MapKey of Argument[-1];value" - MultiKeyMap out = null; - Object in = (Object)source(); + MultiKeyMap out = null; + String in = (String)source(); out.put(null, null, null, in, null); sink(getElement(getMapKey(out))); // $ hasValueFlow } { // "org.apache.commons.collections4.map;MultiKeyMap;true;put;(Object,Object,Object,Object,Object);;Argument[0..3];Element of MapKey of Argument[-1];value" - MultiKeyMap out = null; - Object in = (Object)source(); + MultiKeyMap out = null; + String in = (String)source(); out.put(null, null, in, null, null); sink(getElement(getMapKey(out))); // $ hasValueFlow } { // "org.apache.commons.collections4.map;MultiKeyMap;true;put;(Object,Object,Object,Object,Object);;Argument[0..3];Element of MapKey of Argument[-1];value" - MultiKeyMap out = null; - Object in = (Object)source(); + MultiKeyMap out = null; + String in = (String)source(); out.put(null, in, null, null, null); sink(getElement(getMapKey(out))); // $ hasValueFlow } { // "org.apache.commons.collections4.map;MultiKeyMap;true;put;(Object,Object,Object,Object,Object);;Argument[0..3];Element of MapKey of Argument[-1];value" - MultiKeyMap out = null; - Object in = (Object)source(); + MultiKeyMap out = null; + String in = (String)source(); out.put(in, null, null, null, null); sink(getElement(getMapKey(out))); // $ hasValueFlow } { // "org.apache.commons.collections4.map;MultiKeyMap;true;put;(Object,Object,Object,Object,Object);;Argument[4];MapValue of Argument[-1];value" - MultiKeyMap out = null; - Object in = (Object)source(); + MultiKeyMap out = null; + String in = (String)source(); out.put(null, null, null, null, in); sink(getMapValue(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;MultiKeyMap;true;put;(Object,Object,Object,Object,Object,Object);;Argument[0..4];Element of MapKey of Argument[-1];value" - MultiKeyMap out = null; - Object in = (Object)source(); + MultiKeyMap out = null; + String in = (String)source(); out.put(null, null, null, null, in, null); sink(getElement(getMapKey(out))); // $ hasValueFlow } { // "org.apache.commons.collections4.map;MultiKeyMap;true;put;(Object,Object,Object,Object,Object,Object);;Argument[0..4];Element of MapKey of Argument[-1];value" - MultiKeyMap out = null; - Object in = (Object)source(); + MultiKeyMap out = null; + String in = (String)source(); out.put(null, null, null, in, null, null); sink(getElement(getMapKey(out))); // $ hasValueFlow } { // "org.apache.commons.collections4.map;MultiKeyMap;true;put;(Object,Object,Object,Object,Object,Object);;Argument[0..4];Element of MapKey of Argument[-1];value" - MultiKeyMap out = null; - Object in = (Object)source(); + MultiKeyMap out = null; + String in = (String)source(); out.put(null, null, in, null, null, null); sink(getElement(getMapKey(out))); // $ hasValueFlow } { // "org.apache.commons.collections4.map;MultiKeyMap;true;put;(Object,Object,Object,Object,Object,Object);;Argument[0..4];Element of MapKey of Argument[-1];value" - MultiKeyMap out = null; - Object in = (Object)source(); + MultiKeyMap out = null; + String in = (String)source(); out.put(null, in, null, null, null, null); sink(getElement(getMapKey(out))); // $ hasValueFlow } { // "org.apache.commons.collections4.map;MultiKeyMap;true;put;(Object,Object,Object,Object,Object,Object);;Argument[0..4];Element of MapKey of Argument[-1];value" - MultiKeyMap out = null; - Object in = (Object)source(); + MultiKeyMap out = null; + String in = (String)source(); out.put(in, null, null, null, null, null); sink(getElement(getMapKey(out))); // $ hasValueFlow } { // "org.apache.commons.collections4.map;MultiKeyMap;true;put;(Object,Object,Object,Object,Object,Object);;Argument[5];MapValue of Argument[-1];value" - MultiKeyMap out = null; - Object in = (Object)source(); + MultiKeyMap out = null; + String in = (String)source(); out.put(null, null, null, null, null, in); sink(getMapValue(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;MultiKeyMap;true;put;;;MapValue of Argument[-1];ReturnValue;value" Object out = null; - MultiKeyMap in = (MultiKeyMap)newWithMapValue(source()); + MultiKeyMap in = newMKMWithMapValue((String)source()); out = in.put(null, null, null, null, null, null); sink(out); // $ hasValueFlow } { // "org.apache.commons.collections4.map;MultiKeyMap;true;put;;;MapValue of Argument[-1];ReturnValue;value" Object out = null; - MultiKeyMap in = (MultiKeyMap)newWithMapValue(source()); + MultiKeyMap in = newMKMWithMapValue((String)source()); out = in.put(null, null, null, null, null); sink(out); // $ hasValueFlow } { // "org.apache.commons.collections4.map;MultiKeyMap;true;put;;;MapValue of Argument[-1];ReturnValue;value" Object out = null; - MultiKeyMap in = (MultiKeyMap)newWithMapValue(source()); + MultiKeyMap in = newMKMWithMapValue((String)source()); out = in.put(null, null, null, null); sink(out); // $ hasValueFlow } { // "org.apache.commons.collections4.map;MultiKeyMap;true;put;;;MapValue of Argument[-1];ReturnValue;value" Object out = null; - MultiKeyMap in = (MultiKeyMap)newWithMapValue(source()); + MultiKeyMap in = newMKMWithMapValue((String)source()); out = in.put(null, null, null); sink(out); // $ hasValueFlow } { // "org.apache.commons.collections4.map;MultiKeyMap;true;put;;;MapValue of Argument[-1];ReturnValue;value" Object out = null; - MultiKeyMap in = (MultiKeyMap)newWithMapValue(source()); + MultiKeyMap in = newMKMWithMapValue((String)source()); out = in.put(null, null); sink(out); // $ hasValueFlow } { // "org.apache.commons.collections4.map;MultiKeyMap;true;removeMultiKey;;;MapValue of Argument[-1];ReturnValue;value" Object out = null; - MultiKeyMap in = (MultiKeyMap)newWithMapValue(source()); + MultiKeyMap in = newMKMWithMapValue((String)source()); out = in.removeMultiKey(null, null, null, null, null); sink(out); // $ hasValueFlow } { // "org.apache.commons.collections4.map;MultiKeyMap;true;removeMultiKey;;;MapValue of Argument[-1];ReturnValue;value" Object out = null; - MultiKeyMap in = (MultiKeyMap)newWithMapValue(source()); + MultiKeyMap in = newMKMWithMapValue((String)source()); out = in.removeMultiKey(null, null, null, null); sink(out); // $ hasValueFlow } { // "org.apache.commons.collections4.map;MultiKeyMap;true;removeMultiKey;;;MapValue of Argument[-1];ReturnValue;value" Object out = null; - MultiKeyMap in = (MultiKeyMap)newWithMapValue(source()); + MultiKeyMap in = newMKMWithMapValue((String)source()); out = in.removeMultiKey(null, null, null); sink(out); // $ hasValueFlow } { // "org.apache.commons.collections4.map;MultiKeyMap;true;removeMultiKey;;;MapValue of Argument[-1];ReturnValue;value" Object out = null; - MultiKeyMap in = (MultiKeyMap)newWithMapValue(source()); + MultiKeyMap in = newMKMWithMapValue((String)source()); out = in.removeMultiKey(null, null); sink(out); // $ hasValueFlow } { // "org.apache.commons.collections4.map;MultiValueMap;true;getCollection;;;Element of MapValue of Argument[-1];Element of ReturnValue;value" Collection out = null; - MultiValueMap in = (MultiValueMap)newWithMapValue(newWithElement(source())); + MultiValueMap in = newMVMWithMapValue((String)source()); out = in.getCollection(null); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;MultiValueMap;true;iterator;();;Element of MapValue of Argument[-1];MapValue of Element of ReturnValue;value" - Iterator out = null; - MultiValueMap in = (MultiValueMap)newWithMapValue(newWithElement(source())); + Iterator> out = null; + MultiValueMap in = newMVMWithMapValue((String)source()); out = in.iterator(); - sink(getMapValue(getElement(out))); // $ hasValueFlow + sink(getMapValueFromEntry(getElement(out))); // $ hasValueFlow } { - // "org.apache.commons.collections4.map;MultiValueMap;true;iterator;();;MapKey of Argument[-1];MapKey of Element of ReturnValue;value" - Iterator out = null; - MultiValueMap in = (MultiValueMap)newWithMapKey(source()); + // "org.apache.commons.collections4.map;;true;iterator;();;MapKey of Argument[-1];MapKey of Element of ReturnValue;value" + Iterator> out = null; + MultiValueMap in = newMVMWithMapKey((String)source()); out = in.iterator(); - sink(getMapKey(getElement(out))); // $ hasValueFlow + sink(getMapKeyFromEntry(getElement(out))); // $ hasValueFlow } { // "org.apache.commons.collections4.map;MultiValueMap;true;iterator;(Object);;Element of MapValue of Argument[-1];Element of ReturnValue;value" - Iterator out = null; - MultiValueMap in = (MultiValueMap)newWithMapValue(newWithElement(source())); + Iterator out = null; + MultiValueMap in = newMVMWithMapValue((String)source()); out = in.iterator(null); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;MultiValueMap;true;multiValueMap;;;Element of MapValue of Argument[0];Element of MapValue of ReturnValue;value" MultiValueMap out = null; - Map in = (Map)Map.of(null, newWithElement(source())); + Map in = Map.of(null, newVectorWithElement((String)source())); out = MultiValueMap.multiValueMap(in, (Factory)null); - sink(getElement(getMapValue(out))); // $ hasValueFlow + sink(getElement((Collection)getMapValue(out))); // $ hasValueFlow } { // "org.apache.commons.collections4.map;MultiValueMap;true;multiValueMap;;;Element of MapValue of Argument[0];Element of MapValue of ReturnValue;value" MultiValueMap out = null; - Map in = (Map)Map.of(null, newWithElement(source())); + Map in = Map.of(null, newVectorWithElement((String)source())); out = MultiValueMap.multiValueMap(in, (Class)null); - sink(getElement(getMapValue(out))); // $ hasValueFlow + sink(getElement((Collection)getMapValue(out))); // $ hasValueFlow } { // "org.apache.commons.collections4.map;MultiValueMap;true;multiValueMap;;;Element of MapValue of Argument[0];Element of MapValue of ReturnValue;value" MultiValueMap out = null; - Map in = (Map)Map.of(null, newWithElement(source())); + Map in = Map.of(null, newVectorWithElement((String)source())); out = MultiValueMap.multiValueMap(in); - sink(getElement(getMapValue(out))); // $ hasValueFlow + sink(getElement((Collection)getMapValue(out))); // $ hasValueFlow } { // "org.apache.commons.collections4.map;MultiValueMap;true;multiValueMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" MultiValueMap out = null; - Map in = (Map)Map.of(source(), null); + Map in = Map.of((String)source(), null); out = MultiValueMap.multiValueMap(in, (Factory)null); sink(getMapKey(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;MultiValueMap;true;multiValueMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" MultiValueMap out = null; - Map in = (Map)Map.of(source(), null); + Map in = Map.of((String)source(), null); out = MultiValueMap.multiValueMap(in, (Class)null); sink(getMapKey(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;MultiValueMap;true;multiValueMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" MultiValueMap out = null; - Map in = (Map)Map.of(source(), null); + Map in = Map.of((String)source(), null); out = MultiValueMap.multiValueMap(in); sink(getMapKey(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;MultiValueMap;true;putAll;(Map);;Element of MapValue of Argument[0];Element of MapValue of Argument[-1];value" MultiValueMap out = null; - Map in = (Map)Map.of(null, newWithElement(source())); + Map in = newMVMWithMapValue((String)source()); out.putAll(in); - sink(getElement(getMapValue(out))); // $ hasValueFlow + sink(getElement((Collection)getMapValue(out))); // $ hasValueFlow } { // "org.apache.commons.collections4.map;MultiValueMap;true;putAll;(Map);;MapValue of Argument[0];Element of MapValue of Argument[-1];value" MultiValueMap out = null; Map in = (Map)Map.of(null, source()); out.putAll(in); - sink(getElement(getMapValue(out))); // $ hasValueFlow + sink(getElement((Collection)getMapValue(out))); // $ hasValueFlow } { // "org.apache.commons.collections4.map;MultiValueMap;true;putAll;(Object,Collection);;Argument[0];MapKey of Argument[-1];value" @@ -2402,140 +2516,140 @@ public class TestNew { { // "org.apache.commons.collections4.map;MultiValueMap;true;putAll;(Object,Collection);;Element of Argument[1];Element of MapValue of Argument[-1];value" MultiValueMap out = null; - Collection in = (Collection)newWithElement(source()); + Collection in = newTreeBagWithElement((String)source()); out.putAll(null, in); - sink(getElement(getMapValue(out))); // $ hasValueFlow + sink(getElement((Collection)getMapValue(out))); // $ hasValueFlow } { // "org.apache.commons.collections4.map;MultiValueMap;true;values;;;Element of MapValue of Argument[-1];Element of ReturnValue;value" Collection out = null; - MultiValueMap in = (MultiValueMap)newWithMapValue(newWithElement(source())); + MultiValueMap in = newMVMWithMapValue((String)source()); out = in.values(); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;PassiveExpiringMap;true;PassiveExpiringMap;(ExpirationPolicy,Map);;MapKey of Argument[1];MapKey of Argument[-1];value" PassiveExpiringMap out = null; - Map in = (Map)Map.of(source(), null); + Map in = Map.of((String)source(), null); out = new PassiveExpiringMap((PassiveExpiringMap.ExpirationPolicy)null, in); sink(getMapKey(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;PassiveExpiringMap;true;PassiveExpiringMap;(ExpirationPolicy,Map);;MapValue of Argument[1];MapValue of Argument[-1];value" PassiveExpiringMap out = null; - Map in = (Map)Map.of(null, source()); + Map in = Map.of(null, (String)source()); out = new PassiveExpiringMap((PassiveExpiringMap.ExpirationPolicy)null, in); sink(getMapValue(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;PassiveExpiringMap;true;PassiveExpiringMap;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value" PassiveExpiringMap out = null; - Map in = (Map)Map.of(source(), null); + Map in = Map.of((String)source(), null); out = new PassiveExpiringMap(in); sink(getMapKey(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;PassiveExpiringMap;true;PassiveExpiringMap;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value" PassiveExpiringMap out = null; - Map in = (Map)Map.of(null, source()); + Map in = Map.of(null, (String)source()); out = new PassiveExpiringMap(in); sink(getMapValue(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;PassiveExpiringMap;true;PassiveExpiringMap;(long,Map);;MapKey of Argument[1];MapKey of Argument[-1];value" PassiveExpiringMap out = null; - Map in = (Map)Map.of(source(), null); + Map in = Map.of((String)source(), null); out = new PassiveExpiringMap(0L, in); sink(getMapKey(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;PassiveExpiringMap;true;PassiveExpiringMap;(long,Map);;MapValue of Argument[1];MapValue of Argument[-1];value" PassiveExpiringMap out = null; - Map in = (Map)Map.of(null, source()); + Map in = Map.of(null, (String)source()); out = new PassiveExpiringMap(0L, in); sink(getMapValue(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;PassiveExpiringMap;true;PassiveExpiringMap;(long,TimeUnit,Map);;MapKey of Argument[2];MapKey of Argument[-1];value" PassiveExpiringMap out = null; - Map in = (Map)Map.of(source(), null); + Map in = Map.of((String)source(), null); out = new PassiveExpiringMap(0L, null, in); sink(getMapKey(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;PassiveExpiringMap;true;PassiveExpiringMap;(long,TimeUnit,Map);;MapValue of Argument[2];MapValue of Argument[-1];value" PassiveExpiringMap out = null; - Map in = (Map)Map.of(null, source()); + Map in = Map.of(null, (String)source()); out = new PassiveExpiringMap(0L, null, in); sink(getMapValue(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;PredicatedMap;true;predicatedMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" PredicatedMap out = null; - Map in = (Map)Map.of(source(), null); + Map in = Map.of((String)source(), null); out = PredicatedMap.predicatedMap(in, null, null); sink(getMapKey(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;PredicatedMap;true;predicatedMap;;;MapValue of Argument[0];MapValue of ReturnValue;value" PredicatedMap out = null; - Map in = (Map)Map.of(null, source()); + Map in = Map.of(null, (String)source()); out = PredicatedMap.predicatedMap(in, null, null); sink(getMapValue(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;PredicatedSortedMap;true;predicatedSortedMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" PredicatedSortedMap out = null; - SortedMap in = (SortedMap)newWithMapKey(source()); + SortedMap in = newTreeMapWithMapKey((String)source()); out = PredicatedSortedMap.predicatedSortedMap(in, null, null); sink(getMapKey(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;PredicatedSortedMap;true;predicatedSortedMap;;;MapValue of Argument[0];MapValue of ReturnValue;value" PredicatedSortedMap out = null; - SortedMap in = (SortedMap)newWithMapValue(source()); + SortedMap in = newTreeMapWithMapValue((String)source()); out = PredicatedSortedMap.predicatedSortedMap(in, null, null); sink(getMapValue(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;SingletonMap;true;SingletonMap;(Entry);;MapKey of Argument[0];MapKey of Argument[-1];value" SingletonMap out = null; - Map.Entry in = (Map.Entry)newWithMapKey(source()); + Map.Entry in = newTMEWithMapKey((String)source()); out = new SingletonMap(in); sink(getMapKey(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;SingletonMap;true;SingletonMap;(Entry);;MapValue of Argument[0];MapValue of Argument[-1];value" SingletonMap out = null; - Map.Entry in = (Map.Entry)newWithMapValue(source()); + Map.Entry in = newTMEWithMapValue((String)source()); out = new SingletonMap(in); sink(getMapValue(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;SingletonMap;true;SingletonMap;(KeyValue);;MapKey of Argument[0];MapKey of Argument[-1];value" SingletonMap out = null; - KeyValue in = (KeyValue)newWithMapKey(source()); + KeyValue in = newDKVWithMapKey((String)source()); out = new SingletonMap(in); sink(getMapKey(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;SingletonMap;true;SingletonMap;(KeyValue);;MapValue of Argument[0];MapValue of Argument[-1];value" SingletonMap out = null; - KeyValue in = (KeyValue)newWithMapValue(source()); + KeyValue in = newDKVWithMapValue((String)source()); out = new SingletonMap(in); sink(getMapValue(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;SingletonMap;true;SingletonMap;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value" SingletonMap out = null; - Map in = (Map)Map.of(source(), null); + Map in = Map.of((String)source(), null); out = new SingletonMap(in); sink(getMapKey(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;SingletonMap;true;SingletonMap;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value" SingletonMap out = null; - Map in = (Map)Map.of(null, source()); + Map in = Map.of(null, (String)source()); out = new SingletonMap(in); sink(getMapValue(out)); // $ hasValueFlow } @@ -2563,196 +2677,196 @@ public class TestNew { { // "org.apache.commons.collections4.map;TransformedMap;true;transformingMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" TransformedMap out = null; - Map in = (Map)Map.of(source(), null); + Map in = Map.of((String)source(), null); out = TransformedMap.transformingMap(in, null, null); sink(getMapKey(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;TransformedMap;true;transformingMap;;;MapValue of Argument[0];MapValue of ReturnValue;value" TransformedMap out = null; - Map in = (Map)Map.of(null, source()); + Map in = Map.of(null, (String)source()); out = TransformedMap.transformingMap(in, null, null); sink(getMapValue(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;TransformedSortedMap;true;transformingSortedMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" TransformedSortedMap out = null; - SortedMap in = (SortedMap)newWithMapKey(source()); + SortedMap in = newTreeMapWithMapKey((String)source()); out = TransformedSortedMap.transformingSortedMap(in, null, null); sink(getMapKey(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;TransformedSortedMap;true;transformingSortedMap;;;MapValue of Argument[0];MapValue of ReturnValue;value" TransformedSortedMap out = null; - SortedMap in = (SortedMap)newWithMapValue(source()); + SortedMap in = newTreeMapWithMapValue((String)source()); out = TransformedSortedMap.transformingSortedMap(in, null, null); sink(getMapValue(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;UnmodifiableEntrySet;true;unmodifiableEntrySet;;;MapKey of Element of Argument[0];MapKey of Element of ReturnValue;value" - Set out = null; - Set in = (Set)newWithElement(newWithMapKey(source())); + Set> out = null; + Set> in = newListOrderedSetWithElement(newTMEWithMapKey((String)source())); out = UnmodifiableEntrySet.unmodifiableEntrySet(in); - sink(getMapKey(getElement(out))); // $ hasValueFlow + sink(getMapKeyFromEntry(getElement(out))); // $ hasValueFlow } { // "org.apache.commons.collections4.map;UnmodifiableEntrySet;true;unmodifiableEntrySet;;;MapValue of Element of Argument[0];MapValue of Element of ReturnValue;value" - Set out = null; - Set in = (Set)newWithElement(newWithMapValue(source())); + Set> out = null; + Set> in = newListOrderedSetWithElement(newTMEWithMapValue((String)source())); out = UnmodifiableEntrySet.unmodifiableEntrySet(in); - sink(getMapValue(getElement(out))); // $ hasValueFlow + sink(getMapValueFromEntry(getElement(out))); // $ hasValueFlow } { // "org.apache.commons.collections4.map;UnmodifiableMap;true;unmodifiableMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" Map out = null; - Map in = (Map)Map.of(source(), null); + Map in = Map.of((String)source(), null); out = UnmodifiableMap.unmodifiableMap(in); sink(getMapKey(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;UnmodifiableMap;true;unmodifiableMap;;;MapValue of Argument[0];MapValue of ReturnValue;value" Map out = null; - Map in = (Map)Map.of(null, source()); + Map in = Map.of(null, (String)source()); out = UnmodifiableMap.unmodifiableMap(in); sink(getMapValue(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;UnmodifiableOrderedMap;true;unmodifiableOrderedMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" OrderedMap out = null; - OrderedMap in = (OrderedMap)newWithMapKey(source()); + OrderedMap in = newListOrderedMapWithMapKey((String)source()); out = UnmodifiableOrderedMap.unmodifiableOrderedMap(in); sink(getMapKey(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;UnmodifiableOrderedMap;true;unmodifiableOrderedMap;;;MapValue of Argument[0];MapValue of ReturnValue;value" OrderedMap out = null; - OrderedMap in = (OrderedMap)newWithMapValue(source()); + OrderedMap in = newListOrderedMapWithMapValue((String)source()); out = UnmodifiableOrderedMap.unmodifiableOrderedMap(in); sink(getMapValue(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;UnmodifiableSortedMap;true;unmodifiableSortedMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" SortedMap out = null; - SortedMap in = (SortedMap)newWithMapKey(source()); + SortedMap in = newTreeMapWithMapKey((String)source()); out = UnmodifiableSortedMap.unmodifiableSortedMap(in); sink(getMapKey(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;UnmodifiableSortedMap;true;unmodifiableSortedMap;;;MapValue of Argument[0];MapValue of ReturnValue;value" SortedMap out = null; - SortedMap in = (SortedMap)newWithMapValue(source()); + SortedMap in = newTreeMapWithMapValue((String)source()); out = UnmodifiableSortedMap.unmodifiableSortedMap(in); sink(getMapValue(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.multimap;ArrayListValuedHashMap;true;ArrayListValuedHashMap;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value" ArrayListValuedHashMap out = null; - Map in = (Map)Map.of(source(), null); + Map in = Map.of((String)source(), null); out = new ArrayListValuedHashMap(in); sink(getMapKey(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.multimap;ArrayListValuedHashMap;true;ArrayListValuedHashMap;(Map);;MapValue of Argument[0];Element of MapValue of Argument[-1];value" ArrayListValuedHashMap out = null; - Map in = (Map)Map.of(null, source()); + Map in = Map.of(null, (String)source()); out = new ArrayListValuedHashMap(in); sink(getElement(getMapValue(out))); // $ hasValueFlow } { // "org.apache.commons.collections4.multimap;ArrayListValuedHashMap;true;ArrayListValuedHashMap;(MultiValuedMap);;Element of MapValue of Argument[0];Element of MapValue of Argument[-1];value" ArrayListValuedHashMap out = null; - MultiValuedMap in = (MultiValuedMap)newWithMapValue(newWithElement(source())); + MultiValuedMap in = newALVHMWithMapValue((String)source()); out = new ArrayListValuedHashMap(in); sink(getElement(getMapValue(out))); // $ hasValueFlow } { // "org.apache.commons.collections4.multimap;ArrayListValuedHashMap;true;ArrayListValuedHashMap;(MultiValuedMap);;MapKey of Argument[0];MapKey of Argument[-1];value" ArrayListValuedHashMap out = null; - MultiValuedMap in = (MultiValuedMap)newWithMapKey(source()); + MultiValuedMap in = newALVHMWithMapKey((String)source()); out = new ArrayListValuedHashMap(in); sink(getMapKey(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.multimap;HashSetValuedHashMap;true;HashSetValuedHashMap;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value" HashSetValuedHashMap out = null; - Map in = (Map)Map.of(source(), null); + Map in = Map.of((String)source(), null); out = new HashSetValuedHashMap(in); sink(getMapKey(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.multimap;HashSetValuedHashMap;true;HashSetValuedHashMap;(Map);;MapValue of Argument[0];Element of MapValue of Argument[-1];value" HashSetValuedHashMap out = null; - Map in = (Map)Map.of(null, source()); + Map in = Map.of(null, (String)source()); out = new HashSetValuedHashMap(in); sink(getElement(getMapValue(out))); // $ hasValueFlow } { // "org.apache.commons.collections4.multimap;HashSetValuedHashMap;true;HashSetValuedHashMap;(MultiValuedMap);;Element of MapValue of Argument[0];Element of MapValue of Argument[-1];value" HashSetValuedHashMap out = null; - MultiValuedMap in = (MultiValuedMap)newWithMapValue(newWithElement(source())); + MultiValuedMap in = newALVHMWithMapValue((String)source()); out = new HashSetValuedHashMap(in); sink(getElement(getMapValue(out))); // $ hasValueFlow } { // "org.apache.commons.collections4.multimap;HashSetValuedHashMap;true;HashSetValuedHashMap;(MultiValuedMap);;MapKey of Argument[0];MapKey of Argument[-1];value" HashSetValuedHashMap out = null; - MultiValuedMap in = (MultiValuedMap)newWithMapKey(source()); + MultiValuedMap in = newALVHMWithMapKey((String)source()); out = new HashSetValuedHashMap(in); sink(getMapKey(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.multimap;TransformedMultiValuedMap;true;transformingMap;;;Element of MapValue of Argument[0];Element of MapValue of ReturnValue;value" TransformedMultiValuedMap out = null; - MultiValuedMap in = (MultiValuedMap)newWithMapValue(newWithElement(source())); + MultiValuedMap in = newALVHMWithMapValue((String)source()); out = TransformedMultiValuedMap.transformingMap(in, null, null); sink(getElement(getMapValue(out))); // $ hasValueFlow } { // "org.apache.commons.collections4.multimap;TransformedMultiValuedMap;true;transformingMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" TransformedMultiValuedMap out = null; - MultiValuedMap in = (MultiValuedMap)newWithMapKey(source()); + MultiValuedMap in = newALVHMWithMapKey((String)source()); out = TransformedMultiValuedMap.transformingMap(in, null, null); sink(getMapKey(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.multimap;UnmodifiableMultiValuedMap;true;unmodifiableMultiValuedMap;(MultiValuedMap);;Element of MapValue of Argument[0];Element of MapValue of ReturnValue;value" UnmodifiableMultiValuedMap out = null; - MultiValuedMap in = (MultiValuedMap)newWithMapValue(newWithElement(source())); + MultiValuedMap in = newALVHMWithMapValue((String)source()); out = UnmodifiableMultiValuedMap.unmodifiableMultiValuedMap(in); sink(getElement(getMapValue(out))); // $ hasValueFlow } { // "org.apache.commons.collections4.multimap;UnmodifiableMultiValuedMap;true;unmodifiableMultiValuedMap;(MultiValuedMap);;MapKey of Argument[0];MapKey of ReturnValue;value" UnmodifiableMultiValuedMap out = null; - MultiValuedMap in = (MultiValuedMap)newWithMapKey(source()); + MultiValuedMap in = newALVHMWithMapKey((String)source()); out = UnmodifiableMultiValuedMap.unmodifiableMultiValuedMap(in); sink(getMapKey(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.multiset;HashMultiSet;true;HashMultiSet;;;Element of Argument[0];Element of Argument[-1];value" HashMultiSet out = null; - Collection in = (Collection)newWithElement(source()); + Collection in = newTreeBagWithElement((String)source()); out = new HashMultiSet(in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.multiset;PredicatedMultiSet;true;predicatedMultiSet;;;Element of Argument[0];Element of ReturnValue;value" PredicatedMultiSet out = null; - MultiSet in = (MultiSet)newWithElement(source()); + MultiSet in = newHashMultiSetWithElement((String)source()); out = PredicatedMultiSet.predicatedMultiSet(in, null); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.multiset;SynchronizedMultiSet;true;synchronizedMultiSet;;;Element of Argument[0];Element of ReturnValue;value" SynchronizedMultiSet out = null; - MultiSet in = (MultiSet)newWithElement(source()); + MultiSet in = newHashMultiSetWithElement((String)source()); out = SynchronizedMultiSet.synchronizedMultiSet(in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.multiset;UnmodifiableMultiSet;true;unmodifiableMultiSet;;;Element of Argument[0];Element of ReturnValue;value" MultiSet out = null; - MultiSet in = (MultiSet)newWithElement(source()); + MultiSet in = newHashMultiSetWithElement((String)source()); out = UnmodifiableMultiSet.unmodifiableMultiSet(in); sink(getElement(out)); // $ hasValueFlow } @@ -2823,42 +2937,42 @@ public class TestNew { { // "org.apache.commons.collections4.queue;CircularFifoQueue;true;CircularFifoQueue;(Collection);;Element of Argument[0];Element of Argument[-1];value" CircularFifoQueue out = null; - Collection in = (Collection)newWithElement(source()); + Collection in = newTreeBagWithElement((String)source()); out = new CircularFifoQueue(in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.queue;CircularFifoQueue;true;get;;;Element of Argument[-1];ReturnValue;value" Object out = null; - CircularFifoQueue in = (CircularFifoQueue)newWithElement(source()); + CircularFifoQueue in = newCircularFifoQueueWithElement((String)source()); out = in.get(0); sink(out); // $ hasValueFlow } { // "org.apache.commons.collections4.queue;PredicatedQueue;true;predicatedQueue;;;Element of Argument[0];Element of ReturnValue;value" PredicatedQueue out = null; - Queue in = (Queue)newWithElement(source()); + Queue in = newCircularFifoQueueWithElement((String)source()); out = PredicatedQueue.predicatedQueue(in, null); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.queue;SynchronizedQueue;true;synchronizedQueue;;;Element of Argument[0];Element of ReturnValue;value" SynchronizedQueue out = null; - Queue in = (Queue)newWithElement(source()); + Queue in = newCircularFifoQueueWithElement((String)source()); out = SynchronizedQueue.synchronizedQueue(in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.queue;TransformedQueue;true;transformingQueue;;;Element of Argument[0];Element of ReturnValue;value" TransformedQueue out = null; - Queue in = (Queue)newWithElement(source()); + Queue in = newCircularFifoQueueWithElement((String)source()); out = TransformedQueue.transformingQueue(in, null); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.queue;UnmodifiableQueue;true;unmodifiableQueue;;;Element of Argument[0];Element of ReturnValue;value" Queue out = null; - Queue in = (Queue)newWithElement(source()); + Queue in = newCircularFifoQueueWithElement((String)source()); out = UnmodifiableQueue.unmodifiableQueue(in); sink(getElement(out)); // $ hasValueFlow } @@ -2872,7 +2986,7 @@ public class TestNew { } { // "org.apache.commons.collections4.set;CompositeSet$SetMutator;true;add;;;Argument[2];Element of Element of Argument[1];value" - List out = null; + List out = null; Object in = (Object)source(); CompositeSet.SetMutator instance = null; instance.add(null, out, in); @@ -2881,15 +2995,15 @@ public class TestNew { { // "org.apache.commons.collections4.set;CompositeSet$SetMutator;true;addAll;;;Element of Argument[2];Element of Argument[0];value" CompositeSet out = null; - Collection in = (Collection)newWithElement(source()); + Collection in = newTreeBagWithElement((String)source()); CompositeSet.SetMutator instance = null; instance.addAll(out, null, in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.set;CompositeSet$SetMutator;true;addAll;;;Element of Argument[2];Element of Element of Argument[1];value" - List out = null; - Collection in = (Collection)newWithElement(source()); + List out = null; + Collection in = newTreeBagWithElement((String)source()); CompositeSet.SetMutator instance = null; instance.addAll(null, out, in); sink(getElement(getElement(out))); // $ hasValueFlow @@ -2897,56 +3011,56 @@ public class TestNew { { // "org.apache.commons.collections4.set;CompositeSet;true;CompositeSet;(Set);;Element of Argument[0];Element of Argument[-1];value" CompositeSet out = null; - Set in = (Set)newWithElement(source()); + Set in = newListOrderedSetWithElement((String)source()); out = new CompositeSet(in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.set;CompositeSet;true;CompositeSet;(Set[]);;Element of ArrayElement of Argument[0];Element of Argument[-1];value" CompositeSet out = null; - Set[] in = (Set[])new Set[]{(Set)newWithElement(source())}; + Set[] in = (Set[])new Set[]{newListOrderedSetWithElement((String)source())}; out = new CompositeSet(in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.set;CompositeSet;true;addComposited;(Set);;Element of Argument[0];Element of Argument[-1];value" CompositeSet out = null; - Set in = (Set)newWithElement(source()); + Set in = newListOrderedSetWithElement((String)source()); out.addComposited(in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.set;CompositeSet;true;addComposited;(Set,Set);;Element of Argument[0];Element of Argument[-1];value" CompositeSet out = null; - Set in = (Set)newWithElement(source()); + Set in = newListOrderedSetWithElement((String)source()); out.addComposited(in, null); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.set;CompositeSet;true;addComposited;(Set,Set);;Element of Argument[1];Element of Argument[-1];value" CompositeSet out = null; - Set in = (Set)newWithElement(source()); + Set in = newListOrderedSetWithElement((String)source()); out.addComposited(null, in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.set;CompositeSet;true;addComposited;(Set[]);;Element of ArrayElement of Argument[0];Element of Argument[-1];value" CompositeSet out = null; - Set[] in = (Set[])new Set[]{(Set)newWithElement(source())}; + Set[] in = (Set[])new Set[]{newListOrderedSetWithElement((String)source())}; out.addComposited(in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.set;CompositeSet;true;getSets;;;Element of Argument[-1];Element of Element of ReturnValue;value" - List out = null; - CompositeSet in = (CompositeSet)newWithElement(source()); + List> out = null; + CompositeSet in = newCompositeSetWithElement((String)source()); out = in.getSets(); sink(getElement(getElement(out))); // $ hasValueFlow } { // "org.apache.commons.collections4.set;CompositeSet;true;toSet;;;Element of Argument[-1];Element of ReturnValue;value" Set out = null; - CompositeSet in = (CompositeSet)newWithElement(source()); + CompositeSet in = newCompositeSetWithElement((String)source()); out = in.toSet(); sink(getElement(out)); // $ hasValueFlow } @@ -2960,174 +3074,217 @@ public class TestNew { { // "org.apache.commons.collections4.set;ListOrderedSet;true;addAll;;;Element of Argument[1];Element of Argument[-1];value" ListOrderedSet out = null; - Collection in = (Collection)List.of(source()); + Collection in = (Collection)List.of((String)source()); out.addAll(0, in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.set;ListOrderedSet;true;asList;;;Element of Argument[-1];Element of ReturnValue;value" List out = null; - ListOrderedSet in = (ListOrderedSet)newWithElement(source()); + ListOrderedSet in = newListOrderedSetWithElement((String)source()); out = in.asList(); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.set;ListOrderedSet;true;get;;;Element of Argument[-1];ReturnValue;value" Object out = null; - ListOrderedSet in = (ListOrderedSet)newWithElement(source()); + ListOrderedSet in = newListOrderedSetWithElement((String)source()); out = in.get(0); sink(out); // $ hasValueFlow } { // "org.apache.commons.collections4.set;ListOrderedSet;true;listOrderedSet;(List);;Element of Argument[0];Element of ReturnValue;value" ListOrderedSet out = null; - List in = (List)List.of(source()); + List in = (List)List.of((String)source()); out = ListOrderedSet.listOrderedSet(in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.set;ListOrderedSet;true;listOrderedSet;(Set);;Element of Argument[0];Element of ReturnValue;value" ListOrderedSet out = null; - Set in = (Set)newWithElement(source()); + Set in = newListOrderedSetWithElement((String)source()); out = ListOrderedSet.listOrderedSet(in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.set;MapBackedSet;true;mapBackedSet;;;MapKey of Argument[0];Element of ReturnValue;value" MapBackedSet out = null; - Map in = (Map)Map.of(source(), null); + Map in = Map.of((String)source(), null); out = MapBackedSet.mapBackedSet(in, null); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.set;MapBackedSet;true;mapBackedSet;;;MapKey of Argument[0];Element of ReturnValue;value" MapBackedSet out = null; - Map in = (Map)Map.of(source(), null); + Map in = Map.of((String)source(), null); out = MapBackedSet.mapBackedSet(in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.set;PredicatedNavigableSet;true;predicatedNavigableSet;;;Element of Argument[0];Element of ReturnValue;value" PredicatedNavigableSet out = null; - NavigableSet in = (NavigableSet)newWithElement(source()); + NavigableSet in = newTreeSetWithElement((String)source()); out = PredicatedNavigableSet.predicatedNavigableSet(in, null); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.set;PredicatedSet;true;predicatedSet;;;Element of Argument[0];Element of ReturnValue;value" PredicatedSet out = null; - Set in = (Set)newWithElement(source()); + Set in = newListOrderedSetWithElement((String)source()); out = PredicatedSet.predicatedSet(in, null); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.set;PredicatedSortedSet;true;predicatedSortedSet;;;Element of Argument[0];Element of ReturnValue;value" PredicatedSortedSet out = null; - SortedSet in = (SortedSet)newWithElement(source()); + SortedSet in = newTreeSetWithElement((String)source()); out = PredicatedSortedSet.predicatedSortedSet(in, null); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.set;TransformedNavigableSet;true;transformingNavigableSet;;;Element of Argument[0];Element of ReturnValue;value" TransformedNavigableSet out = null; - NavigableSet in = (NavigableSet)newWithElement(source()); + NavigableSet in = newTreeSetWithElement((String)source()); out = TransformedNavigableSet.transformingNavigableSet(in, null); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.set;TransformedSet;true;transformingSet;;;Element of Argument[0];Element of ReturnValue;value" TransformedSet out = null; - Set in = (Set)newWithElement(source()); + Set in = newListOrderedSetWithElement((String)source()); out = TransformedSet.transformingSet(in, null); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.set;TransformedSortedSet;true;transformingSortedSet;;;Element of Argument[0];Element of ReturnValue;value" TransformedSortedSet out = null; - SortedSet in = (SortedSet)newWithElement(source()); + SortedSet in = newTreeSetWithElement((String)source()); out = TransformedSortedSet.transformingSortedSet(in, null); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.set;UnmodifiableNavigableSet;true;unmodifiableNavigableSet;;;Element of Argument[0];Element of ReturnValue;value" NavigableSet out = null; - NavigableSet in = (NavigableSet)newWithElement(source()); + NavigableSet in = newTreeSetWithElement((String)source()); out = UnmodifiableNavigableSet.unmodifiableNavigableSet(in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.set;UnmodifiableSet;true;unmodifiableSet;;;Element of Argument[0];Element of ReturnValue;value" Set out = null; - Set in = (Set)newWithElement(source()); + Set in = newListOrderedSetWithElement((String)source()); out = UnmodifiableSet.unmodifiableSet(in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.set;UnmodifiableSortedSet;true;unmodifiableSortedSet;;;Element of Argument[0];Element of ReturnValue;value" SortedSet out = null; - SortedSet in = (SortedSet)newWithElement(source()); + SortedSet in = newTreeSetWithElement((String)source()); out = UnmodifiableSortedSet.unmodifiableSortedSet(in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.splitmap;AbstractIterableGetMapDecorator;true;AbstractIterableGetMapDecorator;;;MapKey of Argument[0];MapKey of Argument[-1];value" AbstractIterableGetMapDecorator out = null; - Map in = (Map)Map.of(source(), null); + Map in = Map.of((String)source(), null); out = new AbstractIterableGetMapDecorator(in); - sink(getMapKey(out)); // $ hasValueFlow + sink(getMapKeyFromGet(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.splitmap;AbstractIterableGetMapDecorator;true;AbstractIterableGetMapDecorator;;;MapValue of Argument[0];MapValue of Argument[-1];value" AbstractIterableGetMapDecorator out = null; - Map in = (Map)Map.of(null, source()); + Map in = Map.of(null, (String)source()); out = new AbstractIterableGetMapDecorator(in); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueFromGet(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.splitmap;TransformedSplitMap;true;transformingMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" TransformedSplitMap out = null; - Map in = (Map)Map.of(source(), null); + Map in = Map.of((String)source(), null); out = TransformedSplitMap.transformingMap(in, null, null); - sink(getMapKey(out)); // $ hasValueFlow + sink(getMapKeyFromGet(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.splitmap;TransformedSplitMap;true;transformingMap;;;MapValue of Argument[0];MapValue of ReturnValue;value" TransformedSplitMap out = null; - Map in = (Map)Map.of(null, source()); + Map in = Map.of(null, (String)source()); out = TransformedSplitMap.transformingMap(in, null, null); - sink(getMapValue(out)); // $ hasValueFlow + sink(getMapValueFromGet(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.trie;PatriciaTrie;true;PatriciaTrie;;;MapKey of Argument[0];MapKey of Argument[-1];value" PatriciaTrie out = null; - Map in = (Map)Map.of(source(), null); + Map in = Map.of((String)source(), null); out = new PatriciaTrie(in); sink(getMapKey(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.trie;PatriciaTrie;true;PatriciaTrie;;;MapValue of Argument[0];MapValue of Argument[-1];value" PatriciaTrie out = null; - Map in = (Map)Map.of(null, source()); + Map in = Map.of(null, (String)source()); out = new PatriciaTrie(in); sink(getMapValue(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.trie;UnmodifiableTrie;true;unmodifiableTrie;;;MapKey of Argument[0];MapKey of ReturnValue;value" Trie out = null; - Trie in = (Trie)newWithMapKey(source()); + Trie in = newTrieWithMapKey((String)source()); out = UnmodifiableTrie.unmodifiableTrie(in); sink(getMapKey(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.trie;UnmodifiableTrie;true;unmodifiableTrie;;;MapValue of Argument[0];MapValue of ReturnValue;value" Trie out = null; - Trie in = (Trie)newWithMapValue(source()); + Trie in = newTrieWithMapValue((String)source()); out = UnmodifiableTrie.unmodifiableTrie(in); sink(getMapValue(out)); // $ hasValueFlow } } + class MyAbstractKeyValue extends AbstractKeyValue { + MyAbstractKeyValue(K key, V value) { + super(key, value); + } + + K mySetKey(final K key) { + return super.setKey(key); + } + + V mySetValue(final V value) { + return super.setValue(value); + } + } + + class MyAbstractMapEntry extends AbstractMapEntry { + MyAbstractMapEntry(final K key, final V value) { + super(key, value); + } + @Override + public K getKey() { return null; } + @Override + public V getValue() { return null; } + } + + class MyAbstractMapEntryDecorator extends AbstractMapEntryDecorator { + MyAbstractMapEntryDecorator(final Map.Entry entry) { + super(entry); + } + + Map.Entry myGetMapEntry() { + return super.getMapEntry(); + } + } + + class MySetView extends SetUtils.SetView { + MySetView() { super(); } + + @Override + protected Iterator createIterator() { return null; } + + Iterator myCreateIterator() { return createIterator(); } + } + class MyAbstractSortedBidiMapDecorator extends AbstractSortedBidiMapDecorator { public MyAbstractSortedBidiMapDecorator(final SortedBidiMap map) { super(map); From c51fb00082517729d78ee4ce5b9832c116128bc9 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Fri, 24 Sep 2021 07:22:33 +0100 Subject: [PATCH 630/741] Add tests for non-public abstract classes --- .../apache-collections/TestNew.java | 491 +++++++++++++++++- 1 file changed, 482 insertions(+), 9 deletions(-) diff --git a/java/ql/test/library-tests/frameworks/apache-collections/TestNew.java b/java/ql/test/library-tests/frameworks/apache-collections/TestNew.java index 760e890a112..0197686b686 100644 --- a/java/ql/test/library-tests/frameworks/apache-collections/TestNew.java +++ b/java/ql/test/library-tests/frameworks/apache-collections/TestNew.java @@ -28,6 +28,9 @@ import java.util.TreeSet; import java.util.Vector; import org.apache.commons.collections4.ArrayStack; import org.apache.commons.collections4.Bag; +import org.apache.commons.collections4.bag.AbstractBagDecorator; +import org.apache.commons.collections4.bag.AbstractMapBag; +import org.apache.commons.collections4.bag.AbstractSortedBagDecorator; import org.apache.commons.collections4.bag.CollectionBag; import org.apache.commons.collections4.bag.CollectionSortedBag; import org.apache.commons.collections4.bag.HashBag; @@ -42,6 +45,9 @@ import org.apache.commons.collections4.bag.UnmodifiableBag; import org.apache.commons.collections4.bag.UnmodifiableSortedBag; import org.apache.commons.collections4.BagUtils; import org.apache.commons.collections4.BidiMap; +import org.apache.commons.collections4.bidimap.AbstractBidiMapDecorator; +import org.apache.commons.collections4.bidimap.AbstractDualBidiMap; +import org.apache.commons.collections4.bidimap.AbstractOrderedBidiMapDecorator; import org.apache.commons.collections4.bidimap.AbstractSortedBidiMapDecorator; import org.apache.commons.collections4.bidimap.DualHashBidiMap; import org.apache.commons.collections4.bidimap.DualLinkedHashBidiMap; @@ -51,6 +57,7 @@ import org.apache.commons.collections4.bidimap.UnmodifiableBidiMap; import org.apache.commons.collections4.bidimap.UnmodifiableOrderedBidiMap; import org.apache.commons.collections4.bidimap.UnmodifiableSortedBidiMap; import org.apache.commons.collections4.BoundedCollection; +import org.apache.commons.collections4.collection.AbstractCollectionDecorator; import org.apache.commons.collections4.collection.CompositeCollection; import org.apache.commons.collections4.collection.IndexedCollection; import org.apache.commons.collections4.collection.PredicatedCollection; @@ -67,9 +74,11 @@ import org.apache.commons.collections4.IterableGet; import org.apache.commons.collections4.IterableMap; import org.apache.commons.collections4.IterableSortedMap; import org.apache.commons.collections4.IterableUtils; +import org.apache.commons.collections4.iterators.AbstractIteratorDecorator; import org.apache.commons.collections4.iterators.AbstractListIteratorDecorator; import org.apache.commons.collections4.iterators.AbstractMapIteratorDecorator; import org.apache.commons.collections4.iterators.AbstractOrderedMapIteratorDecorator; +import org.apache.commons.collections4.iterators.AbstractUntypedIteratorDecorator; import org.apache.commons.collections4.iterators.ArrayIterator; import org.apache.commons.collections4.iterators.ArrayListIterator; import org.apache.commons.collections4.iterators.BoundedIterator; @@ -109,6 +118,8 @@ import org.apache.commons.collections4.keyvalue.MultiKey; import org.apache.commons.collections4.keyvalue.TiedMapEntry; import org.apache.commons.collections4.keyvalue.UnmodifiableMapEntry; import org.apache.commons.collections4.list.AbstractLinkedList; +import org.apache.commons.collections4.list.AbstractListDecorator; +import org.apache.commons.collections4.list.AbstractSerializableListDecorator; import org.apache.commons.collections4.list.CursorableLinkedList; import org.apache.commons.collections4.list.FixedSizeList; import org.apache.commons.collections4.list.GrowthList; @@ -122,6 +133,7 @@ import org.apache.commons.collections4.list.UnmodifiableList; import org.apache.commons.collections4.ListUtils; import org.apache.commons.collections4.ListValuedMap; import org.apache.commons.collections4.map.AbstractHashedMap; +import org.apache.commons.collections4.map.AbstractLinkedMap; import org.apache.commons.collections4.map.AbstractIterableMap; import org.apache.commons.collections4.map.AbstractMapDecorator; import org.apache.commons.collections4.map.AbstractOrderedMapDecorator; @@ -182,6 +194,9 @@ import org.apache.commons.collections4.queue.UnmodifiableQueue; import org.apache.commons.collections4.QueueUtils; import org.apache.commons.collections4.ResettableIterator; import org.apache.commons.collections4.ResettableListIterator; +import org.apache.commons.collections4.set.AbstractNavigableSetDecorator; +import org.apache.commons.collections4.set.AbstractSetDecorator; +import org.apache.commons.collections4.set.AbstractSortedSetDecorator; import org.apache.commons.collections4.set.CompositeSet; import org.apache.commons.collections4.set.ListOrderedSet; import org.apache.commons.collections4.set.MapBackedSet; @@ -270,7 +285,7 @@ public class TestNew { SortedMap newTreeMapWithMapKey(K key) { SortedMap m = new TreeMap<>(); m.put(key,null); return m; } TiedMapEntry newTMEWithMapKey(K key) { return new TiedMapEntry(new TreeMap(),key); } > TreeBidiMap newTreeBidiMapWithMapKey(K key) { TreeBidiMap m = new TreeBidiMap<>(); m.put(key,null); return m; } - Trie newTrieWithMapKey(String key) { Trie m = new PatriciaTrie(); m.put(key,null); return m; } + PatriciaTrie newPatriciaTrieWithMapKey(String key) { PatriciaTrie m = new PatriciaTrie<>(); m.put(key,null); return m; } ArrayListValuedHashMap newALVHMWithMapValue(V value) { ArrayListValuedHashMap m = new ArrayListValuedHashMap<>(); m.put(null,value); return m; } DefaultKeyValue newDKVWithMapValue(V value) { return new DefaultKeyValue(null,value); } @@ -289,7 +304,7 @@ public class TestNew { SortedMap newTreeMapWithMapValue(V value) { SortedMap m = new TreeMap<>(); m.put(null,value); return m; } TiedMapEntry newTMEWithMapValue(V value) { return new TiedMapEntry(newTreeMapWithMapValue(value),null); } > TreeBidiMap newTreeBidiMapWithMapValue(V value) { TreeBidiMap m = new TreeBidiMap<>(); m.put(null,value); return m; } - Trie newTrieWithMapValue(V value) { Trie m = new PatriciaTrie<>(); m.put(null,value); return m; } + PatriciaTrie newPatriciaTrieWithMapValue(V value) { PatriciaTrie m = new PatriciaTrie<>(); m.put(null,value); return m; } UnmodifiableMapEntry newUMEWithMapValue(V value) { return new UnmodifiableMapEntry(null,value); } Object source() { return null; } @@ -297,6 +312,34 @@ public class TestNew { public void test() throws Exception { + { + // "org.apache.commons.collections4.bag;AbstractBagDecorator;true;AbstractBagDecorator;;;Element of Argument[0];Element of Argument[-1];value" + AbstractBagDecorator out = null; + Bag in = newTreeBagWithElement((String)source()); + out = new MyAbstractBagDecorator(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.bag;AbstractMapBag;true;AbstractMapBag;;;MapKey of Argument[0];Element of Argument[-1];value" + AbstractMapBag out = null; + Map in = Map.of((String)source(), null); + out = new MyAbstractMapBag(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.bag;AbstractMapBag;true;getMap;;;Element of Argument[-1];MapKey of ReturnValue;value" + Map out = null; + MyAbstractMapBag in = new MyAbstractMapBag(Map.of((String)source(), null)); + out = in.myGetMap(); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.bag;AbstractSortedBagDecorator;true;AbstractSortedBagDecorator;;;Element of Argument[0];Element of Argument[-1];value" + AbstractSortedBagDecorator out = null; + SortedBag in = newTreeBagWithElement((String)source()); + out = new MyAbstractSortedBagDecorator(in); + sink(getElement(out)); // $ hasValueFlow + } { // "org.apache.commons.collections4.bag;CollectionBag;true;CollectionBag;;;Element of Argument[0];Element of Argument[-1];value" CollectionBag out = null; @@ -395,6 +438,76 @@ public class TestNew { out = UnmodifiableSortedBag.unmodifiableSortedBag(in); sink(getElement(out)); // $ hasValueFlow } + { + // "org.apache.commons.collections4.bidimap;AbstractBidiMapDecorator;true;AbstractBidiMapDecorator;;;MapKey of Argument[0];MapKey of Argument[-1];value" + AbstractBidiMapDecorator out = null; + BidiMap in = newDualTreeBidiMapWithMapKey((String)source()); + out = new MyAbstractBidiMapDecorator(in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.bidimap;AbstractBidiMapDecorator;true;AbstractBidiMapDecorator;;;MapValue of Argument[0];MapValue of Argument[-1];value" + AbstractBidiMapDecorator out = null; + BidiMap in = newDualTreeBidiMapWithMapValue((String)source()); + out = new MyAbstractBidiMapDecorator(in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.bidimap;AbstractDualBidiMap;true;AbstractDualBidiMap;;;MapKey of Argument[0];MapKey of Argument[-1];value" + AbstractDualBidiMap out = null; + BidiMap in = newDualTreeBidiMapWithMapKey((String)source()); + out = new MyAbstractDualBidiMap(in, null, null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.bidimap;AbstractDualBidiMap;true;AbstractDualBidiMap;;;MapKey of Argument[1];MapValue of Argument[-1];value" + AbstractDualBidiMap out = null; + BidiMap in = newDualTreeBidiMapWithMapKey((String)source()); + out = new MyAbstractDualBidiMap(null, in, null); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.bidimap;AbstractDualBidiMap;true;AbstractDualBidiMap;;;MapKey of Argument[2];MapValue of Argument[-1];value" + AbstractDualBidiMap out = null; + BidiMap in = newDualTreeBidiMapWithMapKey((String)source()); + out = new MyAbstractDualBidiMap(null, null, in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.bidimap;AbstractDualBidiMap;true;AbstractDualBidiMap;;;MapValue of Argument[0];MapValue of Argument[-1];value" + AbstractDualBidiMap out = null; + BidiMap in = newDualTreeBidiMapWithMapValue((String)source()); + out = new MyAbstractDualBidiMap(in, null, null); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.bidimap;AbstractDualBidiMap;true;AbstractDualBidiMap;;;MapValue of Argument[1];MapKey of Argument[-1];value" + AbstractDualBidiMap out = null; + BidiMap in = newDualTreeBidiMapWithMapValue((String)source()); + out = new MyAbstractDualBidiMap(null, in, null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.bidimap;AbstractDualBidiMap;true;AbstractDualBidiMap;;;MapValue of Argument[2];MapKey of Argument[-1];value" + AbstractDualBidiMap out = null; + BidiMap in = newDualTreeBidiMapWithMapValue((String)source()); + out = new MyAbstractDualBidiMap(null, null, in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.bidimap;AbstractOrderedBidiMapDecorator;true;AbstractOrderedBidiMapDecorator;;;MapKey of Argument[0];MapKey of Argument[-1];value" + AbstractOrderedBidiMapDecorator out = null; + OrderedBidiMap in = newDualTreeBidiMapWithMapKey((String)source()); + out = new MyAbstractOrderedBidiMapDecorator(in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.bidimap;AbstractOrderedBidiMapDecorator;true;AbstractOrderedBidiMapDecorator;;;MapValue of Argument[0];MapValue of Argument[-1];value" + AbstractOrderedBidiMapDecorator out = null; + OrderedBidiMap in = newDualTreeBidiMapWithMapValue((String)source()); + out = new MyAbstractOrderedBidiMapDecorator(in); + sink(getMapValue(out)); // $ hasValueFlow + } { // "org.apache.commons.collections4.bidimap;AbstractSortedBidiMapDecorator;true;AbstractSortedBidiMapDecorator;;;MapKey of Argument[0];MapKey of Argument[-1];value" AbstractSortedBidiMapDecorator out = null; @@ -549,6 +662,27 @@ public class TestNew { out = UnmodifiableSortedBidiMap.unmodifiableSortedBidiMap(in); sink(getMapValue(out)); // $ hasValueFlow } + { + // "org.apache.commons.collections4.collection;AbstractCollectionDecorator;true;AbstractCollectionDecorator;;;Element of Argument[0];Element of Argument[-1];value" + AbstractCollectionDecorator out = null; + Collection in = newTreeBagWithElement((String)source()); + out = new MyAbstractCollectionDecorator(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.collection;AbstractCollectionDecorator;true;decorated;;;Element of Argument[-1];Element of ReturnValue;value" + Collection out = null; + MyAbstractCollectionDecorator in = new MyAbstractCollectionDecorator(newTreeBagWithElement((String)source())); + out = in.myDecorated(); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.collection;AbstractCollectionDecorator;true;setCollection;;;Element of Argument[0];Element of Argument[-1];value" + MyAbstractCollectionDecorator out = null; + Collection in = newTreeBagWithElement((String)source()); + out.mySetCollection(in); + sink(getElement(out)); // $ hasValueFlow + } { // "org.apache.commons.collections4.collection;CompositeCollection$CollectionMutator;true;add;;;Argument[2];Element of Argument[0];value" CompositeCollection out = null; @@ -859,41 +993,97 @@ public class TestNew { out = UnmodifiableCollection.unmodifiableCollection(in); sink(getElement(out)); // $ hasValueFlow } + { + // "org.apache.commons.collections4.iterators;AbstractIteratorDecorator;true;AbstractIteratorDecorator;;;Element of Argument[0];Element of Argument[-1];value" + AbstractIteratorDecorator out = null; + Iterator in = newListIteratorWithElement((String)source()); + out = new MyAbstractIteratorDecorator(in); + sink(getElement(out)); // $ hasValueFlow + } { // "org.apache.commons.collections4.iterators;AbstractListIteratorDecorator;true;AbstractListIteratorDecorator;;;Element of Argument[0];Element of Argument[-1];value" AbstractListIteratorDecorator out = null; ListIterator in = newListIteratorWithElement((String)source()); - out = new AbstractListIteratorDecorator(in); + out = new MyAbstractListIteratorDecorator(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;AbstractListIteratorDecorator;true;getListIterator;;;Element of Argument[-1];Element of ReturnValue;value" + ListIterator out = null; + MyAbstractListIteratorDecorator in = new MyAbstractListIteratorDecorator(newListIteratorWithElement((String)source())); + out = in.myGetListIterator(); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.iterators;AbstractMapIteratorDecorator;true;AbstractMapIteratorDecorator;;;Element of Argument[0];Element of Argument[-1];value" AbstractMapIteratorDecorator out = null; MapIterator in = newLinkedMapWithMapKey((String)source()).mapIterator(); - out = new AbstractMapIteratorDecorator(in); + out = new MyAbstractMapIteratorDecorator(in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.iterators;AbstractMapIteratorDecorator;true;AbstractMapIteratorDecorator;;;MapValue of Argument[0];MapValue of Argument[-1];value" AbstractMapIteratorDecorator out = null; MapIterator in = newLinkedMapWithMapValue((String)source()).mapIterator(); - out = new AbstractMapIteratorDecorator(in); + out = new MyAbstractMapIteratorDecorator(in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;AbstractMapIteratorDecorator;true;getMapIterator;;;Element of Argument[-1];Element of ReturnValue;value" + MapIterator out = null; + MyAbstractMapIteratorDecorator in = new MyAbstractMapIteratorDecorator(newLinkedMapWithMapKey((String)source()).mapIterator()); + out = in.myGetMapIterator(); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;AbstractMapIteratorDecorator;true;getMapIterator;;;MapValue of Argument[-1];MapValue of ReturnValue;value" + MapIterator out = null; + MyAbstractMapIteratorDecorator in = new MyAbstractMapIteratorDecorator(newLinkedMapWithMapValue((String)source()).mapIterator()); + out = in.myGetMapIterator(); sink(getMapValue(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.iterators;AbstractOrderedMapIteratorDecorator;true;AbstractOrderedMapIteratorDecorator;;;Element of Argument[0];Element of Argument[-1];value" AbstractOrderedMapIteratorDecorator out = null; OrderedMapIterator in = newListOrderedMapWithMapKey((String)source()).mapIterator(); - out = new AbstractOrderedMapIteratorDecorator(in); + out = new MyAbstractOrderedMapIteratorDecorator(in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.iterators;AbstractOrderedMapIteratorDecorator;true;AbstractOrderedMapIteratorDecorator;;;MapValue of Argument[0];MapValue of Argument[-1];value" AbstractOrderedMapIteratorDecorator out = null; OrderedMapIterator in = newListOrderedMapWithMapValue((String)source()).mapIterator(); - out = new AbstractOrderedMapIteratorDecorator(in); + out = new MyAbstractOrderedMapIteratorDecorator(in); sink(getMapValue(out)); // $ hasValueFlow } + { + // "org.apache.commons.collections4.iterators;AbstractOrderedMapIteratorDecorator;true;getOrderedMapIterator;;;Element of Argument[-1];Element of ReturnValue;value" + OrderedMapIterator out = null; + MyAbstractOrderedMapIteratorDecorator in = new MyAbstractOrderedMapIteratorDecorator(newListOrderedMapWithMapKey((String)source()).mapIterator()); + out = in.myGetOrderedMapIterator(); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;AbstractOrderedMapIteratorDecorator;true;getOrderedMapIterator;;;MapValue of Argument[-1];MapValue of ReturnValue;value" + OrderedMapIterator out = null; + MyAbstractOrderedMapIteratorDecorator in = new MyAbstractOrderedMapIteratorDecorator(newListOrderedMapWithMapValue((String)source()).mapIterator()); + out = in.myGetOrderedMapIterator(); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;AbstractUntypedIteratorDecorator;true;AbstractUntypedIteratorDecorator;;;Element of Argument[0];Element of Argument[-1];value" + AbstractUntypedIteratorDecorator out = null; + Iterator in = newListIteratorWithElement((String)source()); + out = new MyAbstractUntypedIteratorDecorator(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;AbstractUntypedIteratorDecorator;true;getIterator;;;Element of Argument[-1];Element of ReturnValue;value" + Iterator out = null; + MyAbstractUntypedIteratorDecorator in = new MyAbstractUntypedIteratorDecorator(newListIteratorWithElement((String)source())); + out = in.myGetIterator(); + sink(getElement(out)); // $ hasValueFlow + } { // "org.apache.commons.collections4.iterators;ArrayIterator;true;ArrayIterator;;;ArrayElement of Argument[0];Element of Argument[-1];value" ArrayIterator out = null; @@ -1538,6 +1728,13 @@ public class TestNew { out = in.getKeys(); sink(getArrayElement(out)); // $ hasValueFlow } + { + // "org.apache.commons.collections4.list;AbstractLinkedList;true;AbstractLinkedList;;;Element of Argument[0];Element of Argument[-1];value" + AbstractLinkedList out = null; + Collection in = newTreeBagWithElement((String)source()); + out = new MyAbstractLinkedList(in); + sink(getElement(out)); // $ hasValueFlow + } { // "org.apache.commons.collections4.list;AbstractLinkedList;true;addFirst;;;Argument[0];Element of Argument[-1];value" AbstractLinkedList out = null; @@ -1580,6 +1777,20 @@ public class TestNew { out = in.removeLast(); sink(out); // $ hasValueFlow } + { + // "org.apache.commons.collections4.list;AbstractListDecorator;true;AbstractListDecorator;;;Element of Argument[0];Element of Argument[-1];value" + AbstractListDecorator out = null; + List in = (List)List.of((String)source()); + out = new MyAbstractListDecorator(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.list;AbstractSerializableListDecorator;true;AbstractSerializableListDecorator;;;Element of Argument[0];Element of Argument[-1];value" + AbstractSerializableListDecorator out = null; + List in = (List)List.of((String)source()); + out = new MyAbstractSerializableListDecorator(in); + sink(getElement(out)); // $ hasValueFlow + } { // "org.apache.commons.collections4.list;CursorableLinkedList;true;CursorableLinkedList;;;Element of Argument[0];Element of Argument[-1];value" CursorableLinkedList out = null; @@ -1685,6 +1896,62 @@ public class TestNew { out = UnmodifiableList.unmodifiableList(in); sink(getElement(out)); // $ hasValueFlow } + { + // "org.apache.commons.collections4.map;AbstractHashedMap;true;AbstractHashedMap;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value" + AbstractHashedMap out = null; + Map in = Map.of((String)source(), null); + out = new MyAbstractHashedMap(in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;AbstractHashedMap;true;AbstractHashedMap;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value" + AbstractHashedMap out = null; + Map in = Map.of(null, (String)source()); + out = new MyAbstractHashedMap(in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;AbstractLinkedMap;true;AbstractLinkedMap;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value" + AbstractLinkedMap out = null; + Map in = Map.of((String)source(), null); + out = new MyAbstractLinkedMap(in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;AbstractLinkedMap;true;AbstractLinkedMap;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value" + AbstractLinkedMap out = null; + Map in = Map.of(null, (String)source()); + out = new MyAbstractLinkedMap(in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;AbstractMapDecorator;true;AbstractMapDecorator;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value" + AbstractMapDecorator out = null; + Map in = Map.of((String)source(), null); + out = new MyAbstractMapDecorator(in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;AbstractMapDecorator;true;AbstractMapDecorator;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value" + AbstractMapDecorator out = null; + Map in = Map.of(null, (String)source()); + out = new MyAbstractMapDecorator(in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;AbstractMapDecorator;true;decorated;;;MapKey of Argument[-1];MapKey of ReturnValue;value" + Map out = null; + MyAbstractMapDecorator in = new MyAbstractMapDecorator(Map.of((String)source(), null)); + out = in.myDecorated(); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;AbstractMapDecorator;true;decorated;;;MapValue of Argument[-1];MapValue of ReturnValue;value" + Map out = null; + MyAbstractMapDecorator in = new MyAbstractMapDecorator(Map.of(null, (String)source())); + out = in.myDecorated(); + sink(getMapValue(out)); // $ hasValueFlow + } { // "org.apache.commons.collections4.map;AbstractOrderedMapDecorator;true;AbstractOrderedMapDecorator;(OrderedMap);;MapKey of Argument[0];MapKey of Argument[-1];value" AbstractOrderedMapDecorator out = null; @@ -2976,6 +3243,27 @@ public class TestNew { out = UnmodifiableQueue.unmodifiableQueue(in); sink(getElement(out)); // $ hasValueFlow } + { + // "org.apache.commons.collections4.set;AbstractNavigableSetDecorator;true;AbstractNavigableSetDecorator;;;Element of Argument[0];Element of Argument[-1];value" + AbstractNavigableSetDecorator out = null; + NavigableSet in = newTreeSetWithElement((String)source()); + out = new MyAbstractNavigableSetDecorator(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.set;AbstractSetDecorator;true;AbstractSetDecorator;;;Element of Argument[0];Element of Argument[-1];value" + AbstractSetDecorator out = null; + Set in = newListOrderedSetWithElement((String)source()); + out = new MyAbstractSetDecorator(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.set;AbstractSortedSetDecorator;true;AbstractSortedSetDecorator;;;Element of Argument[0];Element of Argument[-1];value" + AbstractSortedSetDecorator out = null; + Set in = newListOrderedSetWithElement((String)source()); + out = new MyAbstractSortedSetDecorator(in); + sink(getElement(out)); // $ hasValueFlow + } { // "org.apache.commons.collections4.set;CompositeSet$SetMutator;true;add;;;Argument[2];Element of Argument[0];value" CompositeSet out = null; @@ -3225,17 +3513,45 @@ public class TestNew { out = new PatriciaTrie(in); sink(getMapValue(out)); // $ hasValueFlow } + { + // "org.apache.commons.collections4.trie;AbstractPatriciaTrie;true;select;;;MapKey of Argument[-1];MapKey of ReturnValue;value" + PatriciaTrie in = newPatriciaTrieWithMapKey((String)source()); + Map.Entry out = null; + out = in.select(null); + sink(getMapKeyFromEntry(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.trie;AbstractPatriciaTrie;true;select;;;MapValue of Argument[-1];MapValue of ReturnValue;value" + PatriciaTrie in = newPatriciaTrieWithMapValue((String)source()); + Map.Entry out = null; + out = in.select(null); + sink(getMapValueFromEntry(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.trie;AbstractPatriciaTrie;true;selectKey;;;MapKey of Argument[-1];ReturnValue;value" + PatriciaTrie in = newPatriciaTrieWithMapKey((String)source()); + String out = null; + out = in.selectKey(null); + sink(out); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.trie;AbstractPatriciaTrie;true;selectValue;;;MapValue of Argument[-1];ReturnValue;value" + PatriciaTrie in = newPatriciaTrieWithMapValue((String)source()); + String out = null; + out = in.selectValue(null); + sink(out); // $ hasValueFlow + } { // "org.apache.commons.collections4.trie;UnmodifiableTrie;true;unmodifiableTrie;;;MapKey of Argument[0];MapKey of ReturnValue;value" Trie out = null; - Trie in = newTrieWithMapKey((String)source()); + Trie in = newPatriciaTrieWithMapKey((String)source()); out = UnmodifiableTrie.unmodifiableTrie(in); sink(getMapKey(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.trie;UnmodifiableTrie;true;unmodifiableTrie;;;MapValue of Argument[0];MapValue of ReturnValue;value" Trie out = null; - Trie in = newTrieWithMapValue((String)source()); + Trie in = newPatriciaTrieWithMapValue((String)source()); out = UnmodifiableTrie.unmodifiableTrie(in); sink(getMapValue(out)); // $ hasValueFlow } @@ -3303,4 +3619,161 @@ public class TestNew { } } + class MyAbstractBagDecorator extends AbstractBagDecorator { + public MyAbstractBagDecorator(final Bag bag) { + super(bag); + } + } + + class MyAbstractMapBag extends AbstractMapBag { + public MyAbstractMapBag(final Map map) { + super(map); + } + public Map myGetMap() { + return super.getMap(); + } + } + + class MyAbstractSortedBagDecorator extends AbstractSortedBagDecorator { + public MyAbstractSortedBagDecorator(final SortedBag bag) { + super(bag); + } + } + + class MyAbstractBidiMapDecorator extends AbstractBidiMapDecorator { + public MyAbstractBidiMapDecorator(final BidiMap map) { + super(map); + } + } + + class MyAbstractDualBidiMap extends AbstractDualBidiMap { + public MyAbstractDualBidiMap(final Map normalMap, final Map reverseMap) { + super(normalMap, reverseMap); + } + public MyAbstractDualBidiMap(final Map normalMap, final Map reverseMap, final BidiMap inverseBidiMap) { + super(normalMap, reverseMap, inverseBidiMap); + } + protected BidiMap createBidiMap(Map normalMap, Map reverseMap, BidiMap inverseMap) { + return null; + } + } + + class MyAbstractOrderedBidiMapDecorator extends AbstractOrderedBidiMapDecorator { + public MyAbstractOrderedBidiMapDecorator(final OrderedBidiMap map) { + super(map); + } + } + + class MyAbstractCollectionDecorator extends AbstractCollectionDecorator { + public MyAbstractCollectionDecorator(final Collection coll) { + super(coll); + } + public Collection myDecorated() { + return super.decorated(); + } + public void mySetCollection(final Collection coll) { + super.setCollection(coll); + } + } + + class MyAbstractIteratorDecorator extends AbstractIteratorDecorator { + public MyAbstractIteratorDecorator(final Iterator iterator) { + super(iterator); + } + } + + class MyAbstractListIteratorDecorator extends AbstractListIteratorDecorator { + public MyAbstractListIteratorDecorator(final ListIterator iterator) { + super(iterator); + } + public ListIterator myGetListIterator() { + return super.getListIterator(); + } + } + + class MyAbstractMapIteratorDecorator extends AbstractMapIteratorDecorator { + public MyAbstractMapIteratorDecorator(final MapIterator iterator) { + super(iterator); + } + public MapIterator myGetMapIterator() { + return super.getMapIterator(); + } + } + + class MyAbstractOrderedMapIteratorDecorator extends AbstractOrderedMapIteratorDecorator { + public MyAbstractOrderedMapIteratorDecorator(final OrderedMapIterator iterator) { + super(iterator); + } + public OrderedMapIterator myGetOrderedMapIterator() { + return super.getOrderedMapIterator(); + } + } + + class MyAbstractUntypedIteratorDecorator extends AbstractUntypedIteratorDecorator { + public MyAbstractUntypedIteratorDecorator(final Iterator iterator) { + super(iterator); + } + public Iterator myGetIterator() { + return super.getIterator(); + } + public O next() { return null; } + } + + class MyAbstractLinkedList extends AbstractLinkedList { + public MyAbstractLinkedList(final Collection coll) { + super(coll); + } + } + + class MyAbstractListDecorator extends AbstractListDecorator { + public MyAbstractListDecorator(final List list) { + super(list); + } + } + + class MyAbstractSerializableListDecorator extends AbstractSerializableListDecorator { + public MyAbstractSerializableListDecorator(final List list) { + super(list); + } + } + + class MyAbstractHashedMap extends AbstractHashedMap { + public MyAbstractHashedMap(final Map map) { + super(map); + } + } + + class MyAbstractLinkedMap extends AbstractLinkedMap { + public MyAbstractLinkedMap(final Map map) { + super(map); + } + } + + class MyAbstractMapDecorator extends AbstractMapDecorator { + public MyAbstractMapDecorator(final Map map) { + super(map); + } + public Map myDecorated() { + return super.decorated(); + } + } + + class MyAbstractNavigableSetDecorator extends AbstractNavigableSetDecorator { + public MyAbstractNavigableSetDecorator(final NavigableSet set) { + super(set); + } + } + + class MyAbstractSetDecorator extends AbstractSetDecorator { + public MyAbstractSetDecorator(final Set set) { + super(set); + } + } + + class MyAbstractSortedSetDecorator extends AbstractSortedSetDecorator { + public MyAbstractSortedSetDecorator(final Set set) { + super(set); + } + } + } \ No newline at end of file From 768203bd360d5c9600426f12e4a5439843586afb Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Mon, 27 Sep 2021 15:26:23 +0100 Subject: [PATCH 631/741] Remove redundant casts --- .../apache-collections/TestNew.java | 134 +++++++++--------- 1 file changed, 67 insertions(+), 67 deletions(-) diff --git a/java/ql/test/library-tests/frameworks/apache-collections/TestNew.java b/java/ql/test/library-tests/frameworks/apache-collections/TestNew.java index 0197686b686..3f2bd4dddbc 100644 --- a/java/ql/test/library-tests/frameworks/apache-collections/TestNew.java +++ b/java/ql/test/library-tests/frameworks/apache-collections/TestNew.java @@ -686,7 +686,7 @@ public class TestNew { { // "org.apache.commons.collections4.collection;CompositeCollection$CollectionMutator;true;add;;;Argument[2];Element of Argument[0];value" CompositeCollection out = null; - Object in = (Object)source(); + Object in = source(); CompositeCollection.CollectionMutator instance = null; instance.add(out, null, in); sink(getElement(out)); // $ hasValueFlow @@ -694,7 +694,7 @@ public class TestNew { { // "org.apache.commons.collections4.collection;CompositeCollection$CollectionMutator;true;add;;;Argument[2];Element of Element of Argument[1];value" List out = null; - Object in = (Object)source(); + Object in = source(); CompositeCollection.CollectionMutator instance = null; instance.add(null, out, in); sink(getElement(getElement(out))); // $ hasValueFlow @@ -830,7 +830,7 @@ public class TestNew { { // "org.apache.commons.collections4.collection;PredicatedCollection$Builder;true;addAll;;;Element of Argument[0];Element of Argument[-1];value" PredicatedCollection.Builder out = null; - Collection in = (Collection)List.of((String)source()); + Collection in = List.of((String)source()); out.addAll(in); sink(getElement(out.createPredicatedList())); // $ hasValueFlow } @@ -873,7 +873,7 @@ public class TestNew { { // "org.apache.commons.collections4.collection;PredicatedCollection$Builder;true;createPredicatedList;;;Element of Argument[0];Element of ReturnValue;value" List out = null; - List in = (List)List.of((String)source()); + List in = List.of((String)source()); PredicatedCollection.Builder instance = null; out = instance.createPredicatedList(in); sink(getElement(out)); // $ hasValueFlow @@ -1143,7 +1143,7 @@ public class TestNew { { // "org.apache.commons.collections4.iterators;CollatingIterator;true;CollatingIterator;(Comparator,Collection);;Element of Element of Argument[1];Element of Argument[-1];value" CollatingIterator out = null; - Collection in = (Collection)List.of(newListIteratorWithElement((String)source())); + Collection in = List.of(newListIteratorWithElement((String)source())); out = new CollatingIterator((Comparator)null, in); sink(getElement(out)); // $ hasValueFlow } @@ -1164,7 +1164,7 @@ public class TestNew { { // "org.apache.commons.collections4.iterators;CollatingIterator;true;CollatingIterator;(Comparator,Iterator[]);;Element of ArrayElement of Argument[1];Element of Argument[-1];value" CollatingIterator out = null; - Iterator[] in = (Iterator[])new Iterator[]{newListIteratorWithElement((String)source())}; + Iterator[] in = new Iterator[]{newListIteratorWithElement((String)source())}; out = new CollatingIterator((Comparator)null, in); sink(getElement(out)); // $ hasValueFlow } @@ -1178,7 +1178,7 @@ public class TestNew { { // "org.apache.commons.collections4.iterators;CollatingIterator;true;getIterators;;;Element of Argument[-1];Element of Element of ReturnValue;value" List out = null; - CollatingIterator in = new CollatingIterator((Comparator)null, (Collection)List.of(newListIteratorWithElement((String)source()))); + CollatingIterator in = new CollatingIterator((Comparator)null, List.of(newListIteratorWithElement((String)source()))); out = in.getIterators(); sink(getElement(getElement(out))); // $ hasValueFlow } @@ -1465,7 +1465,7 @@ public class TestNew { { // "org.apache.commons.collections4.iterators;PushbackIterator;true;pushback;;;Argument[0];Element of Argument[-1];value" PushbackIterator out = null; - Object in = (Object)source(); + Object in = source(); out.pushback(in); sink(getElement(out)); // $ hasValueFlow } @@ -1479,28 +1479,28 @@ public class TestNew { { // "org.apache.commons.collections4.iterators;ReverseListIterator;true;ReverseListIterator;;;Element of Argument[0];Element of Argument[-1];value" ReverseListIterator out = null; - List in = (List)List.of((String)source()); + List in = List.of((String)source()); out = new ReverseListIterator(in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.iterators;SingletonIterator;true;SingletonIterator;;;Argument[0];Element of Argument[-1];value" SingletonIterator out = null; - Object in = (Object)source(); + Object in = source(); out = new SingletonIterator(in, false); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.iterators;SingletonIterator;true;SingletonIterator;;;Argument[0];Element of Argument[-1];value" SingletonIterator out = null; - Object in = (Object)source(); + Object in = source(); out = new SingletonIterator(in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.iterators;SingletonListIterator;true;SingletonListIterator;;;Argument[0];Element of Argument[-1];value" SingletonListIterator out = null; - Object in = (Object)source(); + Object in = source(); out = new SingletonListIterator(in); sink(getElement(out)); // $ hasValueFlow } @@ -1598,119 +1598,119 @@ public class TestNew { { // "org.apache.commons.collections4.iterators;ZippingIterator;true;ZippingIterator;(Iterator[]);;Element of ArrayElement of Argument[0];Element of Argument[-1];value" ZippingIterator out = null; - Iterator[] in = (Iterator[])new Iterator[]{newListIteratorWithElement((String)source())}; + Iterator[] in = new Iterator[]{newListIteratorWithElement((String)source())}; out = new ZippingIterator(in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.keyvalue;MultiKey;true;MultiKey;(Object,Object);;Argument[0];Element of Argument[-1];value" MultiKey out = null; - Object in = (Object)source(); + Object in = source(); out = new MultiKey(in, (Object)null); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.keyvalue;MultiKey;true;MultiKey;(Object,Object);;Argument[1];Element of Argument[-1];value" MultiKey out = null; - Object in = (Object)source(); + Object in = source(); out = new MultiKey((Object)null, in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.keyvalue;MultiKey;true;MultiKey;(Object,Object,Object);;Argument[0];Element of Argument[-1];value" MultiKey out = null; - Object in = (Object)source(); + Object in = source(); out = new MultiKey(in, null, null); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.keyvalue;MultiKey;true;MultiKey;(Object,Object,Object);;Argument[1];Element of Argument[-1];value" MultiKey out = null; - Object in = (Object)source(); + Object in = source(); out = new MultiKey(null, in, null); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.keyvalue;MultiKey;true;MultiKey;(Object,Object,Object);;Argument[2];Element of Argument[-1];value" MultiKey out = null; - Object in = (Object)source(); + Object in = source(); out = new MultiKey(null, null, in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.keyvalue;MultiKey;true;MultiKey;(Object,Object,Object,Object);;Argument[0];Element of Argument[-1];value" MultiKey out = null; - Object in = (Object)source(); + Object in = source(); out = new MultiKey(in, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.keyvalue;MultiKey;true;MultiKey;(Object,Object,Object,Object);;Argument[1];Element of Argument[-1];value" MultiKey out = null; - Object in = (Object)source(); + Object in = source(); out = new MultiKey(null, in, null, null); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.keyvalue;MultiKey;true;MultiKey;(Object,Object,Object,Object);;Argument[2];Element of Argument[-1];value" MultiKey out = null; - Object in = (Object)source(); + Object in = source(); out = new MultiKey(null, null, in, null); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.keyvalue;MultiKey;true;MultiKey;(Object,Object,Object,Object);;Argument[3];Element of Argument[-1];value" MultiKey out = null; - Object in = (Object)source(); + Object in = source(); out = new MultiKey(null, null, null, in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.keyvalue;MultiKey;true;MultiKey;(Object,Object,Object,Object,Object);;Argument[0];Element of Argument[-1];value" MultiKey out = null; - Object in = (Object)source(); + Object in = source(); out = new MultiKey(in, null, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.keyvalue;MultiKey;true;MultiKey;(Object,Object,Object,Object,Object);;Argument[1];Element of Argument[-1];value" MultiKey out = null; - Object in = (Object)source(); + Object in = source(); out = new MultiKey(null, in, null, null, null); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.keyvalue;MultiKey;true;MultiKey;(Object,Object,Object,Object,Object);;Argument[2];Element of Argument[-1];value" MultiKey out = null; - Object in = (Object)source(); + Object in = source(); out = new MultiKey(null, null, in, null, null); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.keyvalue;MultiKey;true;MultiKey;(Object,Object,Object,Object,Object);;Argument[3];Element of Argument[-1];value" MultiKey out = null; - Object in = (Object)source(); + Object in = source(); out = new MultiKey(null, null, null, in, null); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.keyvalue;MultiKey;true;MultiKey;(Object,Object,Object,Object,Object);;Argument[4];Element of Argument[-1];value" MultiKey out = null; - Object in = (Object)source(); + Object in = source(); out = new MultiKey(null, null, null, null, in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.keyvalue;MultiKey;true;MultiKey;(Object[]);;ArrayElement of Argument[0];Element of Argument[-1];value" MultiKey out = null; - Object[] in = (Object[])new Object[]{(String)source()}; + Object[] in = new Object[]{(String)source()}; out = new MultiKey(in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.keyvalue;MultiKey;true;MultiKey;(Object[],boolean);;ArrayElement of Argument[0];Element of Argument[-1];value" MultiKey out = null; - Object[] in = (Object[])new Object[]{(String)source()}; + Object[] in = new Object[]{(String)source()}; out = new MultiKey(in, false); sink(getElement(out)); // $ hasValueFlow } @@ -1738,14 +1738,14 @@ public class TestNew { { // "org.apache.commons.collections4.list;AbstractLinkedList;true;addFirst;;;Argument[0];Element of Argument[-1];value" AbstractLinkedList out = null; - Object in = (Object)source(); + Object in = source(); out.addFirst(in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.list;AbstractLinkedList;true;addLast;;;Argument[0];Element of Argument[-1];value" AbstractLinkedList out = null; - Object in = (Object)source(); + Object in = source(); out.addLast(in); sink(getElement(out)); // $ hasValueFlow } @@ -1780,21 +1780,21 @@ public class TestNew { { // "org.apache.commons.collections4.list;AbstractListDecorator;true;AbstractListDecorator;;;Element of Argument[0];Element of Argument[-1];value" AbstractListDecorator out = null; - List in = (List)List.of((String)source()); + List in = List.of((String)source()); out = new MyAbstractListDecorator(in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.list;AbstractSerializableListDecorator;true;AbstractSerializableListDecorator;;;Element of Argument[0];Element of Argument[-1];value" AbstractSerializableListDecorator out = null; - List in = (List)List.of((String)source()); + List in = List.of((String)source()); out = new MyAbstractSerializableListDecorator(in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.list;CursorableLinkedList;true;CursorableLinkedList;;;Element of Argument[0];Element of Argument[-1];value" CursorableLinkedList out = null; - Collection in = (Collection)List.of((String)source()); + Collection in = List.of((String)source()); out = new CursorableLinkedList(in); sink(getElement(out)); // $ hasValueFlow } @@ -1815,42 +1815,42 @@ public class TestNew { { // "org.apache.commons.collections4.list;FixedSizeList;true;fixedSizeList;;;Element of Argument[0];Element of ReturnValue;value" FixedSizeList out = null; - List in = (List)List.of((String)source()); + List in = List.of((String)source()); out = FixedSizeList.fixedSizeList(in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.list;GrowthList;true;growthList;;;Element of Argument[0];Element of ReturnValue;value" GrowthList out = null; - List in = (List)List.of((String)source()); + List in = List.of((String)source()); out = GrowthList.growthList(in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.list;LazyList;true;lazyList;;;Element of Argument[0];Element of ReturnValue;value" LazyList out = null; - List in = (List)List.of((String)source()); + List in = List.of((String)source()); out = LazyList.lazyList(in, (Transformer)null); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.list;LazyList;true;lazyList;;;Element of Argument[0];Element of ReturnValue;value" LazyList out = null; - List in = (List)List.of((String)source()); + List in = List.of((String)source()); out = LazyList.lazyList(in, (Factory)null); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.list;NodeCachingLinkedList;true;NodeCachingLinkedList;(Collection);;Element of Argument[0];Element of Argument[-1];value" NodeCachingLinkedList out = null; - Collection in = (Collection)List.of((String)source()); + Collection in = List.of((String)source()); out = new NodeCachingLinkedList(in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.list;PredicatedList;true;predicatedList;;;Element of Argument[0];Element of ReturnValue;value" PredicatedList out = null; - List in = (List)List.of((String)source()); + List in = List.of((String)source()); out = PredicatedList.predicatedList(in, null); sink(getElement(out)); // $ hasValueFlow } @@ -1864,35 +1864,35 @@ public class TestNew { { // "org.apache.commons.collections4.list;SetUniqueList;true;setUniqueList;;;Element of Argument[0];Element of ReturnValue;value" SetUniqueList out = null; - List in = (List)List.of((String)source()); + List in = List.of((String)source()); out = SetUniqueList.setUniqueList(in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.list;TransformedList;true;transformingList;;;Element of Argument[0];Element of ReturnValue;value" TransformedList out = null; - List in = (List)List.of((String)source()); + List in = List.of((String)source()); out = TransformedList.transformingList(in, null); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.list;TreeList;true;TreeList;;;Element of Argument[0];Element of Argument[-1];value" TreeList out = null; - Collection in = (Collection)List.of((String)source()); + Collection in = List.of((String)source()); out = new TreeList(in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.list;UnmodifiableList;true;UnmodifiableList;;;Element of Argument[0];Element of Argument[-1];value" UnmodifiableList out = null; - List in = (List)List.of((String)source()); + List in = List.of((String)source()); out = new UnmodifiableList(in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.list;UnmodifiableList;true;unmodifiableList;;;Element of Argument[0];Element of ReturnValue;value" List out = null; - List in = (List)List.of((String)source()); + List in = List.of((String)source()); out = UnmodifiableList.unmodifiableList(in); sink(getElement(out)); // $ hasValueFlow } @@ -2053,28 +2053,28 @@ public class TestNew { { // "org.apache.commons.collections4.map;CompositeMap;true;CompositeMap;(Map[]);;MapKey of ArrayElement of Argument[0];MapKey of Argument[-1];value" CompositeMap out = null; - Map[] in = (Map[])new Map[]{Map.of((String)source(), null)}; + Map[] in = new Map[]{Map.of((String)source(), null)}; out = new CompositeMap(in); sink(getMapKey(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;CompositeMap;true;CompositeMap;(Map[]);;MapValue of ArrayElement of Argument[0];MapValue of Argument[-1];value" CompositeMap out = null; - Map[] in = (Map[])new Map[]{Map.of(null, (String)source())}; + Map[] in = new Map[]{Map.of(null, (String)source())}; out = new CompositeMap(in); sink(getMapValue(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;CompositeMap;true;CompositeMap;(Map[],MapMutator);;MapKey of ArrayElement of Argument[0];MapKey of Argument[-1];value" CompositeMap out = null; - Map[] in = (Map[])new Map[]{Map.of((String)source(), null)}; + Map[] in = new Map[]{Map.of((String)source(), null)}; out = new CompositeMap(in, (CompositeMap.MapMutator)null); sink(getMapKey(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;CompositeMap;true;CompositeMap;(Map[],MapMutator);;MapValue of ArrayElement of Argument[0];MapValue of Argument[-1];value" CompositeMap out = null; - Map[] in = (Map[])new Map[]{Map.of(null, (String)source())}; + Map[] in = new Map[]{Map.of(null, (String)source())}; out = new CompositeMap(in, (CompositeMap.MapMutator)null); sink(getMapValue(out)); // $ hasValueFlow } @@ -2117,14 +2117,14 @@ public class TestNew { { // "org.apache.commons.collections4.map;DefaultedMap;true;DefaultedMap;(Object);;Argument[0];MapValue of Argument[-1];value" DefaultedMap out = null; - Object in = (Object)source(); + Object in = source(); out = new DefaultedMap(in); sink(getMapValue(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;DefaultedMap;true;defaultedMap;(Map,Object);;Argument[1];MapValue of ReturnValue;value" DefaultedMap out = null; - Object in = (Object)source(); + Object in = source(); out = DefaultedMap.defaultedMap((Map)null, in); sink(getMapValue(out)); // $ hasValueFlow } @@ -2419,21 +2419,21 @@ public class TestNew { { // "org.apache.commons.collections4.map;ListOrderedMap;true;put;;;Argument[1];MapKey of Argument[-1];value" ListOrderedMap out = null; - Object in = (Object)source(); + Object in = source(); out.put(null, in); sink(getMapKey(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;ListOrderedMap;true;put;;;Argument[1];MapKey of Argument[-1];value" ListOrderedMap out = null; - Object in = (Object)source(); + Object in = source(); out.put(0, in, null); sink(getMapKey(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;ListOrderedMap;true;put;;;Argument[2];MapValue of Argument[-1];value" ListOrderedMap out = null; - Object in = (Object)source(); + Object in = source(); out.put(0, null, in); sink(getMapValue(out)); // $ hasValueFlow } @@ -2461,7 +2461,7 @@ public class TestNew { { // "org.apache.commons.collections4.map;ListOrderedMap;true;setValue;;;Argument[1];MapValue of Argument[-1];value" ListOrderedMap out = null; - Object in = (Object)source(); + Object in = source(); out.setValue(0, in); sink(getMapValue(out)); // $ hasValueFlow } @@ -2769,14 +2769,14 @@ public class TestNew { { // "org.apache.commons.collections4.map;MultiValueMap;true;putAll;(Map);;MapValue of Argument[0];Element of MapValue of Argument[-1];value" MultiValueMap out = null; - Map in = (Map)Map.of(null, source()); + Map in = Map.of(null, source()); out.putAll(in); sink(getElement((Collection)getMapValue(out))); // $ hasValueFlow } { // "org.apache.commons.collections4.map;MultiValueMap;true;putAll;(Object,Collection);;Argument[0];MapKey of Argument[-1];value" MultiValueMap out = null; - Object in = (Object)source(); + Object in = source(); out.putAll(in, null); sink(getMapKey(out)); // $ hasValueFlow } @@ -2923,21 +2923,21 @@ public class TestNew { { // "org.apache.commons.collections4.map;SingletonMap;true;SingletonMap;(Object,Object);;Argument[0];MapKey of Argument[-1];value" SingletonMap out = null; - Object in = (Object)source(); + Object in = source(); out = new SingletonMap(in, null); sink(getMapKey(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;SingletonMap;true;SingletonMap;(Object,Object);;Argument[1];MapValue of Argument[-1];value" SingletonMap out = null; - Object in = (Object)source(); + Object in = source(); out = new SingletonMap(null, in); sink(getMapValue(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.map;SingletonMap;true;setValue;;;Argument[0];MapValue of Argument[-1];value" SingletonMap out = null; - Object in = (Object)source(); + Object in = source(); out.setValue(in); sink(getMapValue(out)); // $ hasValueFlow } @@ -3267,7 +3267,7 @@ public class TestNew { { // "org.apache.commons.collections4.set;CompositeSet$SetMutator;true;add;;;Argument[2];Element of Argument[0];value" CompositeSet out = null; - Object in = (Object)source(); + Object in = source(); CompositeSet.SetMutator instance = null; instance.add(out, null, in); sink(getElement(out)); // $ hasValueFlow @@ -3275,7 +3275,7 @@ public class TestNew { { // "org.apache.commons.collections4.set;CompositeSet$SetMutator;true;add;;;Argument[2];Element of Element of Argument[1];value" List out = null; - Object in = (Object)source(); + Object in = source(); CompositeSet.SetMutator instance = null; instance.add(null, out, in); sink(getElement(getElement(out))); // $ hasValueFlow @@ -3306,7 +3306,7 @@ public class TestNew { { // "org.apache.commons.collections4.set;CompositeSet;true;CompositeSet;(Set[]);;Element of ArrayElement of Argument[0];Element of Argument[-1];value" CompositeSet out = null; - Set[] in = (Set[])new Set[]{newListOrderedSetWithElement((String)source())}; + Set[] in = new Set[]{newListOrderedSetWithElement((String)source())}; out = new CompositeSet(in); sink(getElement(out)); // $ hasValueFlow } @@ -3334,7 +3334,7 @@ public class TestNew { { // "org.apache.commons.collections4.set;CompositeSet;true;addComposited;(Set[]);;Element of ArrayElement of Argument[0];Element of Argument[-1];value" CompositeSet out = null; - Set[] in = (Set[])new Set[]{newListOrderedSetWithElement((String)source())}; + Set[] in = new Set[]{newListOrderedSetWithElement((String)source())}; out.addComposited(in); sink(getElement(out)); // $ hasValueFlow } @@ -3355,14 +3355,14 @@ public class TestNew { { // "org.apache.commons.collections4.set;ListOrderedSet;true;add;;;Argument[1];Element of Argument[-1];value" ListOrderedSet out = null; - Object in = (Object)source(); + Object in = source(); out.add(0, in); sink(getElement(out)); // $ hasValueFlow } { // "org.apache.commons.collections4.set;ListOrderedSet;true;addAll;;;Element of Argument[1];Element of Argument[-1];value" ListOrderedSet out = null; - Collection in = (Collection)List.of((String)source()); + Collection in = List.of((String)source()); out.addAll(0, in); sink(getElement(out)); // $ hasValueFlow } @@ -3383,7 +3383,7 @@ public class TestNew { { // "org.apache.commons.collections4.set;ListOrderedSet;true;listOrderedSet;(List);;Element of Argument[0];Element of ReturnValue;value" ListOrderedSet out = null; - List in = (List)List.of((String)source()); + List in = List.of((String)source()); out = ListOrderedSet.listOrderedSet(in); sink(getElement(out)); // $ hasValueFlow } From e1101e582e2905146fdb637914e64f35ad5c5a43 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Wed, 22 Sep 2021 10:52:08 +0100 Subject: [PATCH 632/741] Minor improvement to existing tests --- .../frameworks/apache-collections/Test.java | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/java/ql/test/library-tests/frameworks/apache-collections/Test.java b/java/ql/test/library-tests/frameworks/apache-collections/Test.java index 6884ff8b055..62cc835fd9c 100644 --- a/java/ql/test/library-tests/frameworks/apache-collections/Test.java +++ b/java/ql/test/library-tests/frameworks/apache-collections/Test.java @@ -138,7 +138,6 @@ public class Test { MyAbstractMapEntry newMAMEWithMapValue(Object element) { return new MyAbstractMapEntry(null,element); } MyAbstractMapEntryDecorator newMAMEDWithMapValue(Object element) { return new MyAbstractMapEntryDecorator(newMAMEWithMapValue(element)); } MultiValueMap newMVMWithMapValue(Object element) { MultiValueMap m = new MultiValueMap(); m.put(null,element); return m; } - MultiMap newMMWithMapValue(Object element) { MultiMap m = new MultiValueMap(); m.put(null,element); return m; } ArrayListValuedHashMap newALVHMWithMapValue(Object element) { ArrayListValuedHashMap m = new ArrayListValuedHashMap(); m.put(null,element); return m; } HashSetValuedHashMap newHSVHMWithMapValue(Object element) { HashSetValuedHashMap m = new HashSetValuedHashMap(); m.put(null,element); return m; } OrderedMapIterator newOMIWithMapValue(Object element) { LinkedMap m = new LinkedMap(); m.put(null,element); return m.mapIterator(); } @@ -1839,7 +1838,7 @@ public class Test { { // "org.apache.commons.collections4;Get;true;get;;;MapValue of Argument[-1];ReturnValue;value" Object out = null; - MultiMap in = newMMWithMapValue((String)source()); + MultiMap in = newMVMWithMapValue((String)source()); out = in.get(null); sink(out); // $ hasValueFlow } @@ -1874,7 +1873,7 @@ public class Test { { // "org.apache.commons.collections4;Get;true;remove;(Object);;MapValue of Argument[-1];ReturnValue;value" Object out = null; - MultiMap in = newMMWithMapValue((String)source()); + MultiMap in = newMVMWithMapValue((String)source()); out = in.remove(null); sink(out); // $ hasValueFlow } @@ -1909,7 +1908,7 @@ public class Test { { // "org.apache.commons.collections4;Get;true;values;();;MapValue of Argument[-1];Element of ReturnValue;value" Collection out = null; - MultiMap in = newMMWithMapValue((String)source()); + MultiMap in = newMVMWithMapValue((String)source()); out = in.values(); sink(getElement(out)); // $ hasValueFlow } @@ -2889,7 +2888,7 @@ public class Test { { // "org.apache.commons.collections4;MultiMap;true;get;;;Element of MapValue of Argument[-1];Element of ReturnValue;value" Collection out = null; - MultiMap in = newMMWithMapValue((String)source()); + MultiMap in = newMVMWithMapValue((String)source()); out = (Collection)in.get(null); sink(getElement(out)); // $ hasValueFlow } @@ -2931,7 +2930,7 @@ public class Test { { // "org.apache.commons.collections4;MultiMap;true;values;;;Element of MapValue of Argument[-1];Element of ReturnValue;value" Collection out = null; - MultiMap in = newMMWithMapValue((String)source()); + MultiMap in = newMVMWithMapValue((String)source()); out = in.values(); sink(getElement(out)); // $ hasValueFlow } @@ -3344,7 +3343,7 @@ public class Test { { // "org.apache.commons.collections4;Put;true;put;;;MapValue of Argument[-1];ReturnValue;value" Object out = null; - MultiMap in = newMMWithMapValue((String)source()); + MultiMap in = newMVMWithMapValue((String)source()); out = in.put(null, null); sink(out); // $ hasValueFlow } From 342c14887b1cb6ffec6d1c11aefc9d381b6a9d12 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Thu, 23 Sep 2021 20:06:12 +0100 Subject: [PATCH 633/741] Fix existing models for MapUtils --- .../ql/lib/semmle/code/java/frameworks/apache/Collections.qll | 2 +- .../library-tests/frameworks/apache-collections/Test.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/java/ql/lib/semmle/code/java/frameworks/apache/Collections.qll b/java/ql/lib/semmle/code/java/frameworks/apache/Collections.qll index e0c3cc4f41c..e683b0a4818 100644 --- a/java/ql/lib/semmle/code/java/frameworks/apache/Collections.qll +++ b/java/ql/lib/semmle/code/java/frameworks/apache/Collections.qll @@ -792,7 +792,7 @@ private class ApacheMapUtilsModel extends SummaryModelCsv { ";MapUtils;true;orderedMap;;;MapKey of Argument[0];MapKey of ReturnValue;value", ";MapUtils;true;orderedMap;;;MapValue of Argument[0];MapValue of ReturnValue;value", ";MapUtils;true;populateMap;(Map,Iterable,Transformer);;Element of Argument[1];MapValue of Argument[0];value", - ";MapUtils;true;populateMap;(MultiMap,Iterable,Transformer);;Element of Argument[1];MapValue of Argument[0];value", + ";MapUtils;true;populateMap;(MultiMap,Iterable,Transformer);;Element of Argument[1];Element of MapValue of Argument[0];value", ";MapUtils;true;predicatedMap;;;MapKey of Argument[0];MapKey of ReturnValue;value", ";MapUtils;true;predicatedMap;;;MapValue of Argument[0];MapValue of ReturnValue;value", ";MapUtils;true;predicatedSortedMap;;;MapKey of Argument[0];MapKey of ReturnValue;value", diff --git a/java/ql/test/library-tests/frameworks/apache-collections/Test.java b/java/ql/test/library-tests/frameworks/apache-collections/Test.java index 62cc835fd9c..e61b502c4c7 100644 --- a/java/ql/test/library-tests/frameworks/apache-collections/Test.java +++ b/java/ql/test/library-tests/frameworks/apache-collections/Test.java @@ -821,11 +821,11 @@ public class Test { { // Note it is tricky to get this to compile - the compiler thinks it is ambiguous // which overload it should choose unless you put the generic types in correctly - // "org.apache.commons.collections4;MapUtils;true;populateMap;(MultiMap,Iterable,Transformer);;Element of Argument[1];MapValue of Argument[0];value" + // "org.apache.commons.collections4;MapUtils;true;populateMap;(MultiMap,Iterable,Transformer);;Element of Argument[1];Element of MapValue of Argument[0];value" MultiMap out = null; Iterable in = newVectorWithElement((String)source()); MapUtils.populateMap(out, in, (Transformer)null); - sink(getMapValue(out)); // $ hasValueFlow + sink(getElement((Collection)getMapValue(out))); // $ hasValueFlow } { // "org.apache.commons.collections4;MapUtils;true;predicatedMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" From cf03bd8bd1b7c7d3ec5ecb1549d8046ddbb9c33d Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Mon, 27 Sep 2021 16:04:02 +0100 Subject: [PATCH 634/741] Merge new and old tests # Conflicts: # java/ql/test/library-tests/frameworks/apache-collections/TestNew.java --- .../frameworks/apache-collections/Test.java | 3846 ++++++++++++++++- .../apache-collections/TestNew.java | 3779 ---------------- 2 files changed, 3712 insertions(+), 3913 deletions(-) delete mode 100644 java/ql/test/library-tests/frameworks/apache-collections/TestNew.java diff --git a/java/ql/test/library-tests/frameworks/apache-collections/Test.java b/java/ql/test/library-tests/frameworks/apache-collections/Test.java index e61b502c4c7..784691d22bf 100644 --- a/java/ql/test/library-tests/frameworks/apache-collections/Test.java +++ b/java/ql/test/library-tests/frameworks/apache-collections/Test.java @@ -1,5 +1,11 @@ package generatedtest; +import java.io.File; +import java.io.InputStream; +import java.io.Reader; +import java.net.URI; +import java.net.URL; +import java.nio.file.Path; import java.util.Collection; import java.util.Comparator; import java.util.Enumeration; @@ -10,6 +16,7 @@ import java.util.List; import java.util.ListIterator; import java.util.Map; import java.util.NavigableSet; +import java.util.Properties; import java.util.Queue; import java.util.ResourceBundle; import java.util.Set; @@ -21,8 +28,43 @@ import java.util.TreeSet; import java.util.Vector; import org.apache.commons.collections4.ArrayStack; import org.apache.commons.collections4.Bag; +import org.apache.commons.collections4.bag.AbstractBagDecorator; +import org.apache.commons.collections4.bag.AbstractMapBag; +import org.apache.commons.collections4.bag.AbstractSortedBagDecorator; +import org.apache.commons.collections4.bag.CollectionBag; +import org.apache.commons.collections4.bag.CollectionSortedBag; +import org.apache.commons.collections4.bag.HashBag; +import org.apache.commons.collections4.bag.PredicatedBag; +import org.apache.commons.collections4.bag.PredicatedSortedBag; +import org.apache.commons.collections4.bag.SynchronizedBag; +import org.apache.commons.collections4.bag.SynchronizedSortedBag; +import org.apache.commons.collections4.bag.TransformedBag; +import org.apache.commons.collections4.bag.TransformedSortedBag; +import org.apache.commons.collections4.bag.TreeBag; +import org.apache.commons.collections4.bag.UnmodifiableBag; +import org.apache.commons.collections4.bag.UnmodifiableSortedBag; import org.apache.commons.collections4.BagUtils; import org.apache.commons.collections4.BidiMap; +import org.apache.commons.collections4.bidimap.AbstractBidiMapDecorator; +import org.apache.commons.collections4.bidimap.AbstractDualBidiMap; +import org.apache.commons.collections4.bidimap.AbstractOrderedBidiMapDecorator; +import org.apache.commons.collections4.bidimap.AbstractSortedBidiMapDecorator; +import org.apache.commons.collections4.bidimap.DualHashBidiMap; +import org.apache.commons.collections4.bidimap.DualLinkedHashBidiMap; +import org.apache.commons.collections4.bidimap.DualTreeBidiMap; +import org.apache.commons.collections4.bidimap.TreeBidiMap; +import org.apache.commons.collections4.bidimap.UnmodifiableBidiMap; +import org.apache.commons.collections4.bidimap.UnmodifiableOrderedBidiMap; +import org.apache.commons.collections4.bidimap.UnmodifiableSortedBidiMap; +import org.apache.commons.collections4.BoundedCollection; +import org.apache.commons.collections4.collection.AbstractCollectionDecorator; +import org.apache.commons.collections4.collection.CompositeCollection; +import org.apache.commons.collections4.collection.IndexedCollection; +import org.apache.commons.collections4.collection.PredicatedCollection; +import org.apache.commons.collections4.collection.SynchronizedCollection; +import org.apache.commons.collections4.collection.TransformedCollection; +import org.apache.commons.collections4.collection.UnmodifiableBoundedCollection; +import org.apache.commons.collections4.collection.UnmodifiableCollection; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.EnumerationUtils; import org.apache.commons.collections4.Factory; @@ -32,168 +74,243 @@ import org.apache.commons.collections4.IterableGet; import org.apache.commons.collections4.IterableMap; import org.apache.commons.collections4.IterableSortedMap; import org.apache.commons.collections4.IterableUtils; +import org.apache.commons.collections4.iterators.AbstractIteratorDecorator; +import org.apache.commons.collections4.iterators.AbstractListIteratorDecorator; +import org.apache.commons.collections4.iterators.AbstractMapIteratorDecorator; +import org.apache.commons.collections4.iterators.AbstractOrderedMapIteratorDecorator; +import org.apache.commons.collections4.iterators.AbstractUntypedIteratorDecorator; +import org.apache.commons.collections4.iterators.ArrayIterator; +import org.apache.commons.collections4.iterators.ArrayListIterator; +import org.apache.commons.collections4.iterators.BoundedIterator; +import org.apache.commons.collections4.iterators.CollatingIterator; +import org.apache.commons.collections4.iterators.EnumerationIterator; +import org.apache.commons.collections4.iterators.FilterIterator; +import org.apache.commons.collections4.iterators.FilterListIterator; +import org.apache.commons.collections4.iterators.IteratorChain; +import org.apache.commons.collections4.iterators.IteratorEnumeration; +import org.apache.commons.collections4.iterators.IteratorIterable; +import org.apache.commons.collections4.iterators.ListIteratorWrapper; +import org.apache.commons.collections4.iterators.LoopingIterator; +import org.apache.commons.collections4.iterators.LoopingListIterator; +import org.apache.commons.collections4.iterators.ObjectArrayIterator; +import org.apache.commons.collections4.iterators.ObjectArrayListIterator; +import org.apache.commons.collections4.iterators.PeekingIterator; +import org.apache.commons.collections4.iterators.PermutationIterator; +import org.apache.commons.collections4.iterators.PushbackIterator; +import org.apache.commons.collections4.iterators.ReverseListIterator; +import org.apache.commons.collections4.iterators.SingletonIterator; +import org.apache.commons.collections4.iterators.SingletonListIterator; +import org.apache.commons.collections4.iterators.SkippingIterator; +import org.apache.commons.collections4.iterators.UniqueFilterIterator; +import org.apache.commons.collections4.iterators.UnmodifiableIterator; +import org.apache.commons.collections4.iterators.UnmodifiableListIterator; +import org.apache.commons.collections4.iterators.UnmodifiableMapIterator; +import org.apache.commons.collections4.iterators.UnmodifiableOrderedMapIterator; +import org.apache.commons.collections4.iterators.ZippingIterator; import org.apache.commons.collections4.IteratorUtils; import org.apache.commons.collections4.KeyValue; -import org.apache.commons.collections4.ListUtils; -import org.apache.commons.collections4.ListValuedMap; -import org.apache.commons.collections4.MapIterator; -import org.apache.commons.collections4.MapUtils; -import org.apache.commons.collections4.MultiMap; -import org.apache.commons.collections4.MultiMapUtils; -import org.apache.commons.collections4.MultiSet; -import org.apache.commons.collections4.MultiSetUtils; -import org.apache.commons.collections4.MultiValuedMap; -import org.apache.commons.collections4.OrderedIterator; -import org.apache.commons.collections4.OrderedMap; -import org.apache.commons.collections4.OrderedMapIterator; -import org.apache.commons.collections4.Predicate; -import org.apache.commons.collections4.Put; -import org.apache.commons.collections4.QueueUtils; -import org.apache.commons.collections4.ResettableIterator; -import org.apache.commons.collections4.ResettableListIterator; -import org.apache.commons.collections4.SetUtils; -import org.apache.commons.collections4.SetValuedMap; -import org.apache.commons.collections4.SortedBag; -import org.apache.commons.collections4.SplitMapUtils; -import org.apache.commons.collections4.Transformer; -import org.apache.commons.collections4.Trie; -import org.apache.commons.collections4.TrieUtils; -import org.apache.commons.collections4.bag.TreeBag; -import org.apache.commons.collections4.bidimap.TreeBidiMap; -import org.apache.commons.collections4.iterators.BoundedIterator; -import org.apache.commons.collections4.iterators.IteratorEnumeration; -import org.apache.commons.collections4.iterators.SkippingIterator; -import org.apache.commons.collections4.iterators.ZippingIterator; import org.apache.commons.collections4.keyvalue.AbstractKeyValue; import org.apache.commons.collections4.keyvalue.AbstractMapEntry; import org.apache.commons.collections4.keyvalue.AbstractMapEntryDecorator; import org.apache.commons.collections4.keyvalue.DefaultKeyValue; import org.apache.commons.collections4.keyvalue.DefaultMapEntry; +import org.apache.commons.collections4.keyvalue.MultiKey; import org.apache.commons.collections4.keyvalue.TiedMapEntry; import org.apache.commons.collections4.keyvalue.UnmodifiableMapEntry; +import org.apache.commons.collections4.list.AbstractLinkedList; +import org.apache.commons.collections4.list.AbstractListDecorator; +import org.apache.commons.collections4.list.AbstractSerializableListDecorator; +import org.apache.commons.collections4.list.CursorableLinkedList; +import org.apache.commons.collections4.list.FixedSizeList; +import org.apache.commons.collections4.list.GrowthList; +import org.apache.commons.collections4.list.LazyList; +import org.apache.commons.collections4.list.NodeCachingLinkedList; +import org.apache.commons.collections4.list.PredicatedList; +import org.apache.commons.collections4.list.SetUniqueList; +import org.apache.commons.collections4.list.TransformedList; +import org.apache.commons.collections4.list.TreeList; +import org.apache.commons.collections4.list.UnmodifiableList; +import org.apache.commons.collections4.ListUtils; +import org.apache.commons.collections4.ListValuedMap; +import org.apache.commons.collections4.map.AbstractHashedMap; +import org.apache.commons.collections4.map.AbstractLinkedMap; import org.apache.commons.collections4.map.AbstractIterableMap; import org.apache.commons.collections4.map.AbstractMapDecorator; +import org.apache.commons.collections4.map.AbstractOrderedMapDecorator; +import org.apache.commons.collections4.map.AbstractSortedMapDecorator; +import org.apache.commons.collections4.map.CaseInsensitiveMap; +import org.apache.commons.collections4.map.CompositeMap; +import org.apache.commons.collections4.map.DefaultedMap; +import org.apache.commons.collections4.map.EntrySetToMapIteratorAdapter; +import org.apache.commons.collections4.map.FixedSizeMap; +import org.apache.commons.collections4.map.FixedSizeSortedMap; +import org.apache.commons.collections4.map.Flat3Map; import org.apache.commons.collections4.map.HashedMap; +import org.apache.commons.collections4.map.LazyMap; +import org.apache.commons.collections4.map.LazySortedMap; import org.apache.commons.collections4.map.LinkedMap; +import org.apache.commons.collections4.map.ListOrderedMap; +import org.apache.commons.collections4.map.LRUMap; +import org.apache.commons.collections4.map.MultiKeyMap; import org.apache.commons.collections4.map.MultiValueMap; +import org.apache.commons.collections4.map.PassiveExpiringMap; +import org.apache.commons.collections4.map.PredicatedMap; +import org.apache.commons.collections4.map.PredicatedSortedMap; +import org.apache.commons.collections4.map.SingletonMap; +import org.apache.commons.collections4.map.TransformedMap; +import org.apache.commons.collections4.map.TransformedSortedMap; +import org.apache.commons.collections4.map.UnmodifiableEntrySet; +import org.apache.commons.collections4.map.UnmodifiableMap; +import org.apache.commons.collections4.map.UnmodifiableOrderedMap; +import org.apache.commons.collections4.map.UnmodifiableSortedMap; +import org.apache.commons.collections4.MapIterator; +import org.apache.commons.collections4.MapUtils; +import org.apache.commons.collections4.MultiMap; import org.apache.commons.collections4.multimap.ArrayListValuedHashMap; import org.apache.commons.collections4.multimap.HashSetValuedHashMap; +import org.apache.commons.collections4.multimap.TransformedMultiValuedMap; +import org.apache.commons.collections4.multimap.UnmodifiableMultiValuedMap; +import org.apache.commons.collections4.MultiMapUtils; +import org.apache.commons.collections4.MultiSet; import org.apache.commons.collections4.multiset.HashMultiSet; +import org.apache.commons.collections4.multiset.HashMultiSet; +import org.apache.commons.collections4.multiset.PredicatedMultiSet; +import org.apache.commons.collections4.multiset.SynchronizedMultiSet; +import org.apache.commons.collections4.multiset.UnmodifiableMultiSet; +import org.apache.commons.collections4.MultiSetUtils; +import org.apache.commons.collections4.MultiValuedMap; +import org.apache.commons.collections4.OrderedBidiMap; +import org.apache.commons.collections4.OrderedIterator; +import org.apache.commons.collections4.OrderedMap; +import org.apache.commons.collections4.OrderedMapIterator; +import org.apache.commons.collections4.Predicate; +import org.apache.commons.collections4.properties.AbstractPropertiesFactory; +import org.apache.commons.collections4.Put; +import org.apache.commons.collections4.queue.CircularFifoQueue; +import org.apache.commons.collections4.queue.PredicatedQueue; +import org.apache.commons.collections4.queue.SynchronizedQueue; +import org.apache.commons.collections4.queue.TransformedQueue; +import org.apache.commons.collections4.queue.UnmodifiableQueue; +import org.apache.commons.collections4.QueueUtils; +import org.apache.commons.collections4.ResettableIterator; +import org.apache.commons.collections4.ResettableListIterator; +import org.apache.commons.collections4.set.AbstractNavigableSetDecorator; +import org.apache.commons.collections4.set.AbstractSetDecorator; +import org.apache.commons.collections4.set.AbstractSortedSetDecorator; +import org.apache.commons.collections4.set.CompositeSet; +import org.apache.commons.collections4.set.ListOrderedSet; +import org.apache.commons.collections4.set.MapBackedSet; +import org.apache.commons.collections4.set.PredicatedNavigableSet; +import org.apache.commons.collections4.set.PredicatedSet; +import org.apache.commons.collections4.set.PredicatedSortedSet; +import org.apache.commons.collections4.set.TransformedNavigableSet; +import org.apache.commons.collections4.set.TransformedSet; +import org.apache.commons.collections4.set.TransformedSortedSet; +import org.apache.commons.collections4.set.UnmodifiableNavigableSet; +import org.apache.commons.collections4.set.UnmodifiableSet; +import org.apache.commons.collections4.set.UnmodifiableSortedSet; +import org.apache.commons.collections4.SetUtils; +import org.apache.commons.collections4.SetValuedMap; +import org.apache.commons.collections4.SortedBag; +import org.apache.commons.collections4.SortedBidiMap; +import org.apache.commons.collections4.splitmap.AbstractIterableGetMapDecorator; +import org.apache.commons.collections4.splitmap.TransformedSplitMap; +import org.apache.commons.collections4.SplitMapUtils; +import org.apache.commons.collections4.Transformer; +import org.apache.commons.collections4.Trie; import org.apache.commons.collections4.trie.PatriciaTrie; +import org.apache.commons.collections4.trie.UnmodifiableTrie; +import org.apache.commons.collections4.TrieUtils; // Test case generated by GenerateFlowTestCase.ql public class Test { - static Object getArrayElement(Object[] container) { return container[0]; } - static Object getElement(Enumeration container) { return container.nextElement(); } - static T getElement(Iterable container) { return container.iterator().next(); } - static Object getElement(Iterator container) { return container.next(); } - static Object getElement(MultiSet.Entry container) { return container.getElement(); } - static Object getMapKey(AbstractKeyValue container) { return container.getKey(); } - static Object getMapKeyFromEntry(Map.Entry container) { return container.getKey(); } - static Object getMapKey(AbstractMapEntryDecorator container) { return container.getKey(); } - static Object getMapKey(Map container) { return container.keySet().iterator().next(); } - static Object getMapKey(MultiValuedMap container) { return container.keySet().iterator().next(); } - static Object getMapKeyFromPut(Put container) { return getMapKey((Map)container); } - static Object getMapValue(AbstractKeyValue container) { return container.getValue(); } - static Object getMapValueFromEntry(Map.Entry container) { return container.getValue(); } - static Object getMapValue(AbstractMapEntryDecorator container) { return container.getValue(); } - static Object getMapValue(Map container) { return container.get(null); } - static Object getMapValue(MapIterator container) { return container.getValue(); } - static Collection getMapValue(MultiValuedMap container) { return container.get(null); } - static Object getMapValueFromPut(Put container) { return getMapValue((Map)container); } + K getMapKey(Map map) { return map.keySet().iterator().next(); } + T getArrayElement(T[] array) { return array[0]; } + T getElement(Iterable it) { return it.iterator().next(); } + T getElement(Iterator it) { return it.next(); } + V getMapValue(Map map) { return map.get(null); } + + E getElement(Enumeration container) { return container.nextElement(); } + E getElement(MultiSet.Entry container) { return container.getElement(); } + E getElement(MultiKey container) { return container.getKey(0); } + K getMapKey(AbstractKeyValue container) { return container.getKey(); } + K getMapKeyFromEntry(Map.Entry container) { return container.getKey(); } + K getMapKey(AbstractMapEntryDecorator container) { return container.getKey(); } + K getMapKey(MultiValuedMap container) { return container.keySet().iterator().next(); } + K getMapKeyFromGet(Get container) { return container.keySet().iterator().next(); } + K getMapKeyFromPut(Put container) { return getMapKey((Map)container); } + V getMapValue(AbstractKeyValue container) { return container.getValue(); } + V getMapValueFromEntry(Map.Entry container) { return container.getValue(); } + V getMapValue(AbstractMapEntryDecorator container) { return container.getValue(); } + V getMapValue(MapIterator mapIterator) { return mapIterator.getValue(); } + Collection getMapValue(MultiValuedMap container) { return container.get(null); } + V getMapValueFromGet(Get container) { return container.get(null); } + V getMapValueFromPut(Put container) { return getMapValue((Map)container); } Object[] newWithArrayElement(Object element) { return new Object[] {element}; } - ArrayStack newArrayStackWithElement(String element) { ArrayStack a = new ArrayStack(); a.push(element); return a; } - Enumeration newEnumerationWithElement(String element) { return new IteratorEnumeration(newVectorWithElement(element).iterator()); } - FluentIterable newFluentIterableWithElement(String element) { return FluentIterable.of(element); } - ListIterator newListIteratorWithElement(String element) { return newVectorWithElement(element).listIterator(); } - MultiSet.Entry newMultiSetEntryWithElement(String element) { return getElement(newMultiSetWithElement(element).entrySet()); } - MultiSet newMultiSetWithElement(String element) { HashMultiSet h = new HashMultiSet(); h.add(element); return h; } - Queue newQueueWithElement(String element) { LinkedList q = new LinkedList(); q.add(element); return q; } - MySetView newSetViewWithElement(String element) { MySetView s = new MySetView(); s.add(element); return s; } - TreeBag newTreeBagWithElement(String element) { TreeBag b = new TreeBag(); b.add(element); return b; } - TreeSet newTreeSetWithElement(String element) { TreeSet h = new TreeSet(); h.add(element); return h; } - Vector newVectorWithElement(String element) { Vector v = new Vector(); v.add(element); return v; } - Vector> newVectorWithElement(Iterable element) { Vector> v = new Vector>(); v.add(element); return v; } + ArrayStack newArrayStackWithElement(T element) { ArrayStack a = new ArrayStack<>(); a.push(element); return a; } + CircularFifoQueue newCircularFifoQueueWithElement(T element) { CircularFifoQueue x = new CircularFifoQueue<>(); x.add(element); return x; } + CompositeSet newCompositeSetWithElement(T element) { return new CompositeSet(newListOrderedSetWithElement(element)); } + CursorableLinkedList newCursorableLinkedListWithElement(T element) { CursorableLinkedList x = new CursorableLinkedList<>(); x.add(element); return x; } + Enumeration newEnumerationWithElement(T element) { return new IteratorEnumeration(newVectorWithElement(element).iterator()); } + FluentIterable newFluentIterableWithElement(T element) { return FluentIterable.of(element); } + HashMultiSet newHashMultiSetWithElement(T element) { HashMultiSet x = new HashMultiSet<>(); x.add(element); return x; } + ListIterator newListIteratorWithElement(T element) { return newVectorWithElement(element).listIterator(); } + ListOrderedSet newListOrderedSetWithElement(T element) { ListOrderedSet x = new ListOrderedSet<>(); x.add(element); return x; } + MultiKey newMultiKeyWithElement(T element) { return new MultiKey(element, (T)null); } + MultiSet.Entry newMultiSetEntryWithElement(T element) { return getElement(newMultiSetWithElement(element).entrySet()); } + MultiSet newMultiSetWithElement(T element) { HashMultiSet h = new HashMultiSet<>(); h.add(element); return h; } + PredicatedCollection.Builder newPredicatedCollectionBuilderWithElement(T element) { PredicatedCollection.Builder x = PredicatedCollection.notNullBuilder(); x.add(element); return x; } + Queue newQueueWithElement(T element) { LinkedList q = new LinkedList<>(); q.add(element); return q; } + MySetView newSetViewWithElement(T element) { MySetView s = new MySetView<>(); s.add(element); return s; } + TreeBag newTreeBagWithElement(T element) { TreeBag b = new TreeBag<>(); b.add(element); return b; } + TreeSet newTreeSetWithElement(T element) { TreeSet h = new TreeSet<>(); h.add(element); return h; } + Vector newVectorWithElement(T element) { Vector v = new Vector<>(); v.add(element); return v; } + Vector> newVectorWithElement(Iterable element) { Vector> v = new Vector<>(); v.add(element); return v; } + + ArrayListValuedHashMap newALVHMWithMapKey(K key) { ArrayListValuedHashMap m = new ArrayListValuedHashMap<>(); m.put(key,null); return m; } + DefaultKeyValue newDKVWithMapKey(K key) { return new DefaultKeyValue(key,null); } + DualTreeBidiMap newDualTreeBidiMapWithMapKey(K key) { return new DualTreeBidiMap(Map.of(key, null)); } + HashedMap newHashedMapWithMapKey(K key) { HashedMap m = new HashedMap<>(); m.put(key,null); return m; } + LinkedMap newLinkedMapWithMapKey(K key) { return new LinkedMap(Map.of(key, null)); } + ListOrderedMap newListOrderedMapWithMapKey(K key) { return ListOrderedMap.listOrderedMap(Map.of(key, null)); } + MultiKeyMap newMKMWithMapKey(K key) { MultiKeyMap m = new MultiKeyMap<>(); m.put(key,null,null); return m; } + MultiValueMap newMVMWithMapKey(K key) { MultiValueMap m = new MultiValueMap<>(); m.put(key,null); return m; } + MyAbstractMapEntry newMAMEWithMapKey(K key) { return new MyAbstractMapEntry(key,null); } + MyAbstractMapEntryDecorator newMAMEDWithMapKey(K key) { return new MyAbstractMapEntryDecorator(newMAMEWithMapKey(key)); } + MyAbstractKeyValue newMAKVWithMapKey(K key) { return new MyAbstractKeyValue(key,null); } + OrderedMapIterator newOMIWithElement(K key) { LinkedMap m = new LinkedMap<>(); m.put(key,null); return m.mapIterator(); } + ResourceBundle newRBWithMapKey(String key) { return (ResourceBundle)null; } + SortedMap newTreeMapWithMapKey(K key) { SortedMap m = new TreeMap<>(); m.put(key,null); return m; } + TiedMapEntry newTMEWithMapKey(K key) { return new TiedMapEntry(new TreeMap(),key); } + > TreeBidiMap newTreeBidiMapWithMapKey(K key) { TreeBidiMap m = new TreeBidiMap<>(); m.put(key,null); return m; } + PatriciaTrie newPatriciaTrieWithMapKey(String key) { PatriciaTrie m = new PatriciaTrie<>(); m.put(key,null); return m; } + + ArrayListValuedHashMap newALVHMWithMapValue(V value) { ArrayListValuedHashMap m = new ArrayListValuedHashMap<>(); m.put(null,value); return m; } + DefaultKeyValue newDKVWithMapValue(V value) { return new DefaultKeyValue(null,value); } + DualTreeBidiMap newDualTreeBidiMapWithMapValue(V value) { return new DualTreeBidiMap(Map.of(null, value)); } + HashedMap newHashedMapWithMapValue(V value) { HashedMap m = new HashedMap<>(); m.put(null,value); return m; } + HashSetValuedHashMap newHSVHMWithMapValue(V value) { HashSetValuedHashMap m = new HashSetValuedHashMap<>(); m.put(null,value); return m; } + LinkedMap newLinkedMapWithMapValue(V value) { return new LinkedMap(Map.of(null, value)); } + ListOrderedMap newListOrderedMapWithMapValue(V value) { return ListOrderedMap.listOrderedMap(Map.of(null, value)); } + MultiKeyMap newMKMWithMapValue(V value) { MultiKeyMap m = new MultiKeyMap<>(); m.put(null,null,value); return m; } + MultiValueMap newMVMWithMapValue(V value) { MultiValueMap m = new MultiValueMap<>(); m.put(null,value); return m; } + MyAbstractKeyValue newMAKVWithMapValue(V value) { return new MyAbstractKeyValue(null,value); } + MyAbstractMapEntry newMAMEWithMapValue(V value) { return new MyAbstractMapEntry(null,value); } + MyAbstractMapEntryDecorator newMAMEDWithMapValue(V value) { return new MyAbstractMapEntryDecorator(newMAMEWithMapValue(value)); } + OrderedMapIterator newOMIWithMapValue(V value) { LinkedMap m = new LinkedMap<>(); m.put(null,value); return m.mapIterator(); } + ResourceBundle newRBWithMapValue(Object value) { return (ResourceBundle)null; } + SortedMap newTreeMapWithMapValue(V value) { SortedMap m = new TreeMap<>(); m.put(null,value); return m; } + TiedMapEntry newTMEWithMapValue(V value) { return new TiedMapEntry(newTreeMapWithMapValue(value),null); } + > TreeBidiMap newTreeBidiMapWithMapValue(V value) { TreeBidiMap m = new TreeBidiMap<>(); m.put(null,value); return m; } + PatriciaTrie newPatriciaTrieWithMapValue(V value) { PatriciaTrie m = new PatriciaTrie<>(); m.put(null,value); return m; } + UnmodifiableMapEntry newUMEWithMapValue(V value) { return new UnmodifiableMapEntry(null,value); } - TreeBidiMap newTreeBidiMapWithMapKey(Object element) { TreeBidiMap m = new TreeBidiMap(); m.put(element,null); return m; } - MyAbstractKeyValue newMAKVWithMapKey(Object element) { return new MyAbstractKeyValue(element,null); } - DefaultKeyValue newDKVWithMapKey(Object element) { return new DefaultKeyValue(element,null); } - HashedMap newHashedMapWithMapKey(Object element) { HashedMap m = new HashedMap(); m.put(element,null); return m; } - MyAbstractMapEntry newMAMEWithMapKey(Object element) { return new MyAbstractMapEntry(element,null); } - MyAbstractMapEntryDecorator newMAMEDWithMapKey(Object element) { return new MyAbstractMapEntryDecorator(newMAMEWithMapKey(element)); } - MultiValueMap newMVMWithMapKey(Object element) { MultiValueMap m = new MultiValueMap(); m.put(element,null); return m; } - ArrayListValuedHashMap newALVHMWithMapKey(Object element) { ArrayListValuedHashMap m = new ArrayListValuedHashMap(); m.put(element,null); return m; } - OrderedMapIterator newOMIWithElement(Object element) { LinkedMap m = new LinkedMap(); m.put(element,null); return m.mapIterator(); } - ResourceBundle newRBWithMapKey(Object element) { return (ResourceBundle)null; } - SortedMap newTreeMapWithMapKey(Object element) { SortedMap m = new TreeMap(); m.put(element,null); return m; } - Trie newTrieWithMapKey(Object element) { Trie m = new PatriciaTrie(); m.put(element,null); return m; } - TiedMapEntry newTMEWithMapKey(Object element) { return new TiedMapEntry(new TreeMap(),element); } - - TreeBidiMap newTreeBidiMapWithMapValue(Object element) { TreeBidiMap m = new TreeBidiMap(); m.put(null,element); return m; } - MyAbstractKeyValue newMAKVWithMapValue(Object element) { return new MyAbstractKeyValue(null,element); } - DefaultKeyValue newDKVWithMapValue(Object element) { return new DefaultKeyValue(null,element); } - HashedMap newHashedMapWithMapValue(Object element) { HashedMap m = new HashedMap(); m.put(null,element); return m; } - MyAbstractMapEntry newMAMEWithMapValue(Object element) { return new MyAbstractMapEntry(null,element); } - MyAbstractMapEntryDecorator newMAMEDWithMapValue(Object element) { return new MyAbstractMapEntryDecorator(newMAMEWithMapValue(element)); } - MultiValueMap newMVMWithMapValue(Object element) { MultiValueMap m = new MultiValueMap(); m.put(null,element); return m; } - ArrayListValuedHashMap newALVHMWithMapValue(Object element) { ArrayListValuedHashMap m = new ArrayListValuedHashMap(); m.put(null,element); return m; } - HashSetValuedHashMap newHSVHMWithMapValue(Object element) { HashSetValuedHashMap m = new HashSetValuedHashMap(); m.put(null,element); return m; } - OrderedMapIterator newOMIWithMapValue(Object element) { LinkedMap m = new LinkedMap(); m.put(null,element); return m.mapIterator(); } - ResourceBundle newRBWithMapValue(Object element) { return (ResourceBundle)null; } - SortedMap newTreeMapWithMapValue(Object element) { SortedMap m = new TreeMap(); m.put(null,element); return m; } - Trie newTrieWithMapValue(Object element) { Trie m = new PatriciaTrie(); m.put(null,element); return m; } - TiedMapEntry newTMEWithMapValue(Object element) { return new TiedMapEntry(newTreeMapWithMapValue(element),null); } - UnmodifiableMapEntry newUMEWithMapValue(Object element) { return new UnmodifiableMapEntry(null,element); } - Object source() { return null; } void sink(Object o) { } - class MyAbstractKeyValue extends AbstractKeyValue { - MyAbstractKeyValue(K key, V value) { - super(key, value); - } - - K mySetKey(final K key) { - return super.setKey(key); - } - - V mySetValue(final V value) { - return super.setValue(value); - } - } - - class MyAbstractMapEntry extends AbstractMapEntry { - MyAbstractMapEntry(final K key, final V value) { - super(key, value); - } - @Override - public K getKey() { return null; } - @Override - public V getValue() { return null; } - } - - class MyAbstractMapEntryDecorator extends AbstractMapEntryDecorator { - MyAbstractMapEntryDecorator(final Map.Entry entry) { - super(entry); - } - - Map.Entry myGetMapEntry() { - return super.getMapEntry(); - } - } - - class MySetView extends SetUtils.SetView { - MySetView() { super(); } - - @Override - protected Iterator createIterator() { return null; } - - Iterator myCreateIterator() { return createIterator(); } - } - - public void test() { + public void test() throws Exception { { // "org.apache.commons.collections4.keyvalue;AbstractKeyValue;true;AbstractKeyValue;;;Argument[0];MapKey of Argument[-1];value" @@ -3676,7 +3793,3468 @@ public class Test { out = TrieUtils.unmodifiableTrie(in); sink(getMapValue(out)); // $ hasValueFlow } + { + // "org.apache.commons.collections4.bag;AbstractBagDecorator;true;AbstractBagDecorator;;;Element of Argument[0];Element of Argument[-1];value" + AbstractBagDecorator out = null; + Bag in = newTreeBagWithElement((String)source()); + out = new MyAbstractBagDecorator(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.bag;AbstractMapBag;true;AbstractMapBag;;;MapKey of Argument[0];Element of Argument[-1];value" + AbstractMapBag out = null; + Map in = Map.of((String)source(), null); + out = new MyAbstractMapBag(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.bag;AbstractMapBag;true;getMap;;;Element of Argument[-1];MapKey of ReturnValue;value" + Map out = null; + MyAbstractMapBag in = new MyAbstractMapBag(Map.of((String)source(), null)); + out = in.myGetMap(); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.bag;AbstractSortedBagDecorator;true;AbstractSortedBagDecorator;;;Element of Argument[0];Element of Argument[-1];value" + AbstractSortedBagDecorator out = null; + SortedBag in = newTreeBagWithElement((String)source()); + out = new MyAbstractSortedBagDecorator(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.bag;CollectionBag;true;CollectionBag;;;Element of Argument[0];Element of Argument[-1];value" + CollectionBag out = null; + Bag in = newTreeBagWithElement((String)source()); + out = new CollectionBag(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.bag;CollectionBag;true;collectionBag;;;Element of Argument[0];Element of ReturnValue;value" + Bag out = null; + Bag in = newTreeBagWithElement((String)source()); + out = CollectionBag.collectionBag(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.bag;CollectionSortedBag;true;CollectionSortedBag;;;Element of Argument[0];Element of Argument[-1];value" + CollectionSortedBag out = null; + SortedBag in = newTreeBagWithElement((String)source()); + out = new CollectionSortedBag(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.bag;CollectionSortedBag;true;collectionSortedBag;;;Element of Argument[0];Element of ReturnValue;value" + SortedBag out = null; + SortedBag in = newTreeBagWithElement((String)source()); + out = CollectionSortedBag.collectionSortedBag(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.bag;HashBag;true;HashBag;;;Element of Argument[0];Element of Argument[-1];value" + HashBag out = null; + Collection in = newTreeBagWithElement((String)source()); + out = new HashBag(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.bag;PredicatedBag;true;predicatedBag;;;Element of Argument[0];Element of ReturnValue;value" + PredicatedBag out = null; + Bag in = newTreeBagWithElement((String)source()); + out = PredicatedBag.predicatedBag(in, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.bag;PredicatedSortedBag;true;predicatedSortedBag;;;Element of Argument[0];Element of ReturnValue;value" + PredicatedSortedBag out = null; + SortedBag in = newTreeBagWithElement((String)source()); + out = PredicatedSortedBag.predicatedSortedBag(in, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.bag;SynchronizedBag;true;synchronizedBag;;;Element of Argument[0];Element of ReturnValue;value" + SynchronizedBag out = null; + Bag in = newTreeBagWithElement((String)source()); + out = SynchronizedBag.synchronizedBag(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.bag;SynchronizedSortedBag;true;synchronizedSortedBag;;;Element of Argument[0];Element of ReturnValue;value" + SynchronizedSortedBag out = null; + SortedBag in = newTreeBagWithElement((String)source()); + out = SynchronizedSortedBag.synchronizedSortedBag(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.bag;TransformedBag;true;transformedBag;;;Element of Argument[0];Element of ReturnValue;value" + Bag out = null; + Bag in = newTreeBagWithElement((String)source()); + out = TransformedBag.transformedBag(in, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.bag;TransformedSortedBag;true;transformedSortedBag;;;Element of Argument[0];Element of ReturnValue;value" + TransformedSortedBag out = null; + SortedBag in = newTreeBagWithElement((String)source()); + out = TransformedSortedBag.transformedSortedBag(in, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.bag;TreeBag;true;TreeBag;(Collection);;Element of Argument[0];Element of Argument[-1];value" + TreeBag out = null; + Collection in = newTreeBagWithElement((String)source()); + out = new TreeBag(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.bag;UnmodifiableBag;true;unmodifiableBag;;;Element of Argument[0];Element of ReturnValue;value" + Bag out = null; + Bag in = newTreeBagWithElement((String)source()); + out = UnmodifiableBag.unmodifiableBag(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.bag;UnmodifiableSortedBag;true;unmodifiableSortedBag;;;Element of Argument[0];Element of ReturnValue;value" + SortedBag out = null; + SortedBag in = newTreeBagWithElement((String)source()); + out = UnmodifiableSortedBag.unmodifiableSortedBag(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.bidimap;AbstractBidiMapDecorator;true;AbstractBidiMapDecorator;;;MapKey of Argument[0];MapKey of Argument[-1];value" + AbstractBidiMapDecorator out = null; + BidiMap in = newDualTreeBidiMapWithMapKey((String)source()); + out = new MyAbstractBidiMapDecorator(in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.bidimap;AbstractBidiMapDecorator;true;AbstractBidiMapDecorator;;;MapValue of Argument[0];MapValue of Argument[-1];value" + AbstractBidiMapDecorator out = null; + BidiMap in = newDualTreeBidiMapWithMapValue((String)source()); + out = new MyAbstractBidiMapDecorator(in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.bidimap;AbstractDualBidiMap;true;AbstractDualBidiMap;;;MapKey of Argument[0];MapKey of Argument[-1];value" + AbstractDualBidiMap out = null; + BidiMap in = newDualTreeBidiMapWithMapKey((String)source()); + out = new MyAbstractDualBidiMap(in, null, null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.bidimap;AbstractDualBidiMap;true;AbstractDualBidiMap;;;MapKey of Argument[1];MapValue of Argument[-1];value" + AbstractDualBidiMap out = null; + BidiMap in = newDualTreeBidiMapWithMapKey((String)source()); + out = new MyAbstractDualBidiMap(null, in, null); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.bidimap;AbstractDualBidiMap;true;AbstractDualBidiMap;;;MapKey of Argument[2];MapValue of Argument[-1];value" + AbstractDualBidiMap out = null; + BidiMap in = newDualTreeBidiMapWithMapKey((String)source()); + out = new MyAbstractDualBidiMap(null, null, in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.bidimap;AbstractDualBidiMap;true;AbstractDualBidiMap;;;MapValue of Argument[0];MapValue of Argument[-1];value" + AbstractDualBidiMap out = null; + BidiMap in = newDualTreeBidiMapWithMapValue((String)source()); + out = new MyAbstractDualBidiMap(in, null, null); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.bidimap;AbstractDualBidiMap;true;AbstractDualBidiMap;;;MapValue of Argument[1];MapKey of Argument[-1];value" + AbstractDualBidiMap out = null; + BidiMap in = newDualTreeBidiMapWithMapValue((String)source()); + out = new MyAbstractDualBidiMap(null, in, null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.bidimap;AbstractDualBidiMap;true;AbstractDualBidiMap;;;MapValue of Argument[2];MapKey of Argument[-1];value" + AbstractDualBidiMap out = null; + BidiMap in = newDualTreeBidiMapWithMapValue((String)source()); + out = new MyAbstractDualBidiMap(null, null, in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.bidimap;AbstractOrderedBidiMapDecorator;true;AbstractOrderedBidiMapDecorator;;;MapKey of Argument[0];MapKey of Argument[-1];value" + AbstractOrderedBidiMapDecorator out = null; + OrderedBidiMap in = newDualTreeBidiMapWithMapKey((String)source()); + out = new MyAbstractOrderedBidiMapDecorator(in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.bidimap;AbstractOrderedBidiMapDecorator;true;AbstractOrderedBidiMapDecorator;;;MapValue of Argument[0];MapValue of Argument[-1];value" + AbstractOrderedBidiMapDecorator out = null; + OrderedBidiMap in = newDualTreeBidiMapWithMapValue((String)source()); + out = new MyAbstractOrderedBidiMapDecorator(in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.bidimap;AbstractSortedBidiMapDecorator;true;AbstractSortedBidiMapDecorator;;;MapKey of Argument[0];MapKey of Argument[-1];value" + AbstractSortedBidiMapDecorator out = null; + SortedBidiMap in = newDualTreeBidiMapWithMapKey((String)source()); + out = new MyAbstractSortedBidiMapDecorator(in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.bidimap;AbstractSortedBidiMapDecorator;true;AbstractSortedBidiMapDecorator;;;MapValue of Argument[0];MapValue of Argument[-1];value" + AbstractSortedBidiMapDecorator out = null; + SortedBidiMap in = newDualTreeBidiMapWithMapValue((String)source()); + out = new MyAbstractSortedBidiMapDecorator(in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.bidimap;DualHashBidiMap;true;DualHashBidiMap;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value" + DualHashBidiMap out = null; + Map in = Map.of((String)source(), null); + out = new DualHashBidiMap(in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.bidimap;DualHashBidiMap;true;DualHashBidiMap;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value" + DualHashBidiMap out = null; + Map in = Map.of(null, (String)source()); + out = new DualHashBidiMap(in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.bidimap;DualLinkedHashBidiMap;true;DualLinkedHashBidiMap;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value" + DualLinkedHashBidiMap out = null; + Map in = Map.of((String)source(), null); + out = new DualLinkedHashBidiMap(in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.bidimap;DualLinkedHashBidiMap;true;DualLinkedHashBidiMap;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value" + DualLinkedHashBidiMap out = null; + Map in = Map.of(null, (String)source()); + out = new DualLinkedHashBidiMap(in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.bidimap;DualTreeBidiMap;true;DualTreeBidiMap;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value" + DualTreeBidiMap out = null; + Map in = Map.of((String)source(), null); + out = new DualTreeBidiMap(in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.bidimap;DualTreeBidiMap;true;DualTreeBidiMap;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value" + DualTreeBidiMap out = null; + Map in = Map.of(null, (String)source()); + out = new DualTreeBidiMap(in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.bidimap;DualTreeBidiMap;true;inverseOrderedBidiMap;;;MapKey of Argument[-1];MapValue of ReturnValue;value" + OrderedBidiMap out = null; + DualTreeBidiMap in = newDualTreeBidiMapWithMapKey((String)source()); + out = in.inverseOrderedBidiMap(); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.bidimap;DualTreeBidiMap;true;inverseOrderedBidiMap;;;MapValue of Argument[-1];MapKey of ReturnValue;value" + OrderedBidiMap out = null; + DualTreeBidiMap in = newDualTreeBidiMapWithMapValue((String)source()); + out = in.inverseOrderedBidiMap(); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.bidimap;DualTreeBidiMap;true;inverseSortedBidiMap;;;MapKey of Argument[-1];MapValue of ReturnValue;value" + SortedBidiMap out = null; + DualTreeBidiMap in = newDualTreeBidiMapWithMapKey((String)source()); + out = in.inverseSortedBidiMap(); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.bidimap;DualTreeBidiMap;true;inverseSortedBidiMap;;;MapValue of Argument[-1];MapKey of ReturnValue;value" + SortedBidiMap out = null; + DualTreeBidiMap in = newDualTreeBidiMapWithMapValue((String)source()); + out = in.inverseSortedBidiMap(); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.bidimap;TreeBidiMap;true;TreeBidiMap;;;MapKey of Argument[0];MapKey of Argument[-1];value" + TreeBidiMap out = null; + Map in = Map.of((String)source(), null); + out = new TreeBidiMap(in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.bidimap;TreeBidiMap;true;TreeBidiMap;;;MapValue of Argument[0];MapValue of Argument[-1];value" + TreeBidiMap out = null; + Map in = Map.of(null, (String)source()); + out = new TreeBidiMap(in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.bidimap;UnmodifiableBidiMap;true;unmodifiableBidiMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" + BidiMap out = null; + BidiMap in = newDualTreeBidiMapWithMapKey((String)source()); + out = UnmodifiableBidiMap.unmodifiableBidiMap(in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.bidimap;UnmodifiableBidiMap;true;unmodifiableBidiMap;;;MapValue of Argument[0];MapValue of ReturnValue;value" + BidiMap out = null; + BidiMap in = newDualTreeBidiMapWithMapValue((String)source()); + out = UnmodifiableBidiMap.unmodifiableBidiMap(in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.bidimap;UnmodifiableOrderedBidiMap;true;inverseOrderedBidiMap;;;MapKey of Argument[-1];MapValue of ReturnValue;value" + OrderedBidiMap out = null; + UnmodifiableOrderedBidiMap in = (UnmodifiableOrderedBidiMap)UnmodifiableOrderedBidiMap.unmodifiableOrderedBidiMap(newDualTreeBidiMapWithMapKey((String)source())); + out = in.inverseOrderedBidiMap(); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.bidimap;UnmodifiableOrderedBidiMap;true;inverseOrderedBidiMap;;;MapValue of Argument[-1];MapKey of ReturnValue;value" + OrderedBidiMap out = null; + UnmodifiableOrderedBidiMap in = (UnmodifiableOrderedBidiMap)UnmodifiableOrderedBidiMap.unmodifiableOrderedBidiMap(newDualTreeBidiMapWithMapValue((String)source())); + out = in.inverseOrderedBidiMap(); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.bidimap;UnmodifiableOrderedBidiMap;true;unmodifiableOrderedBidiMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" + OrderedBidiMap out = null; + OrderedBidiMap in = newDualTreeBidiMapWithMapKey((String)source()); + out = UnmodifiableOrderedBidiMap.unmodifiableOrderedBidiMap(in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.bidimap;UnmodifiableOrderedBidiMap;true;unmodifiableOrderedBidiMap;;;MapValue of Argument[0];MapValue of ReturnValue;value" + OrderedBidiMap out = null; + OrderedBidiMap in = newDualTreeBidiMapWithMapValue((String)source()); + out = UnmodifiableOrderedBidiMap.unmodifiableOrderedBidiMap(in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.bidimap;UnmodifiableSortedBidiMap;true;unmodifiableSortedBidiMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" + SortedBidiMap out = null; + SortedBidiMap in = newDualTreeBidiMapWithMapKey((String)source()); + out = UnmodifiableSortedBidiMap.unmodifiableSortedBidiMap(in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.bidimap;UnmodifiableSortedBidiMap;true;unmodifiableSortedBidiMap;;;MapValue of Argument[0];MapValue of ReturnValue;value" + SortedBidiMap out = null; + SortedBidiMap in = newDualTreeBidiMapWithMapValue((String)source()); + out = UnmodifiableSortedBidiMap.unmodifiableSortedBidiMap(in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.collection;AbstractCollectionDecorator;true;AbstractCollectionDecorator;;;Element of Argument[0];Element of Argument[-1];value" + AbstractCollectionDecorator out = null; + Collection in = newTreeBagWithElement((String)source()); + out = new MyAbstractCollectionDecorator(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.collection;AbstractCollectionDecorator;true;decorated;;;Element of Argument[-1];Element of ReturnValue;value" + Collection out = null; + MyAbstractCollectionDecorator in = new MyAbstractCollectionDecorator(newTreeBagWithElement((String)source())); + out = in.myDecorated(); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.collection;AbstractCollectionDecorator;true;setCollection;;;Element of Argument[0];Element of Argument[-1];value" + MyAbstractCollectionDecorator out = null; + Collection in = newTreeBagWithElement((String)source()); + out.mySetCollection(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.collection;CompositeCollection$CollectionMutator;true;add;;;Argument[2];Element of Argument[0];value" + CompositeCollection out = null; + Object in = source(); + CompositeCollection.CollectionMutator instance = null; + instance.add(out, null, in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.collection;CompositeCollection$CollectionMutator;true;add;;;Argument[2];Element of Element of Argument[1];value" + List out = null; + Object in = source(); + CompositeCollection.CollectionMutator instance = null; + instance.add(null, out, in); + sink(getElement(getElement(out))); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.collection;CompositeCollection$CollectionMutator;true;addAll;;;Element of Argument[2];Element of Argument[0];value" + CompositeCollection out = null; + Collection in = newTreeBagWithElement((String)source()); + CompositeCollection.CollectionMutator instance = null; + instance.addAll(out, null, in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.collection;CompositeCollection$CollectionMutator;true;addAll;;;Element of Argument[2];Element of Element of Argument[1];value" + List out = null; + Collection in = newTreeBagWithElement((String)source()); + CompositeCollection.CollectionMutator instance = null; + instance.addAll(null, out, in); + sink(getElement(getElement(out))); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.collection;CompositeCollection;true;CompositeCollection;(Collection);;Element of Argument[0];Element of Argument[-1];value" + CompositeCollection out = null; + Collection in = newTreeBagWithElement((String)source()); + out = new CompositeCollection(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.collection;CompositeCollection;true;CompositeCollection;(Collection,Collection);;Element of Argument[0];Element of Argument[-1];value" + CompositeCollection out = null; + Collection in = newTreeBagWithElement((String)source()); + out = new CompositeCollection(in, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.collection;CompositeCollection;true;CompositeCollection;(Collection,Collection);;Element of Argument[1];Element of Argument[-1];value" + CompositeCollection out = null; + Collection in = newTreeBagWithElement((String)source()); + out = new CompositeCollection(null, in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.collection;CompositeCollection;true;CompositeCollection;(Collection[]);;Element of ArrayElement of Argument[0];Element of Argument[-1];value" + CompositeCollection out = null; + Collection[] in = new Collection[]{newTreeBagWithElement((String)source())}; + out = new CompositeCollection(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.collection;CompositeCollection;true;addComposited;(Collection);;Element of Argument[0];Element of Argument[-1];value" + CompositeCollection out = null; + Collection in = newTreeBagWithElement((String)source()); + out.addComposited(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.collection;CompositeCollection;true;addComposited;(Collection,Collection);;Element of Argument[0];Element of Argument[-1];value" + CompositeCollection out = null; + Collection in = newTreeBagWithElement((String)source()); + out.addComposited(in, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.collection;CompositeCollection;true;addComposited;(Collection,Collection);;Element of Argument[1];Element of Argument[-1];value" + CompositeCollection out = null; + Collection in = newTreeBagWithElement((String)source()); + out.addComposited(null, in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.collection;CompositeCollection;true;addComposited;(Collection[]);;Element of ArrayElement of Argument[0];Element of Argument[-1];value" + CompositeCollection out = null; + Collection[] in = new Collection[]{newTreeBagWithElement((String)source())}; + out.addComposited(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.collection;CompositeCollection;true;getCollections;;;Element of Argument[-1];Element of Element of ReturnValue;value" + List out = null; + CompositeCollection in = new CompositeCollection(newTreeBagWithElement((String)source())); + out = in.getCollections(); + sink(getElement(getElement(out))); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.collection;CompositeCollection;true;toCollection;;;Element of Argument[-1];Element of ReturnValue;value" + Collection out = null; + CompositeCollection in = new CompositeCollection(newTreeBagWithElement((String)source())); + out = in.toCollection(); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.collection;IndexedCollection;true;IndexedCollection;;;Element of Argument[0];Element of Argument[-1];value" + IndexedCollection out = null; + Collection in = newTreeBagWithElement((String)source()); + out = new IndexedCollection(in, null, null, false); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.collection;IndexedCollection;true;get;;;Element of Argument[-1];ReturnValue;value" + Object out = null; + IndexedCollection in = new IndexedCollection(newTreeBagWithElement((String)source()), null, null, false); + out = in.get(null); + sink(out); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.collection;IndexedCollection;true;nonUniqueIndexedCollection;;;Element of Argument[0];Element of ReturnValue;value" + IndexedCollection out = null; + Collection in = newTreeBagWithElement((String)source()); + out = IndexedCollection.nonUniqueIndexedCollection(in, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.collection;IndexedCollection;true;uniqueIndexedCollection;;;Element of Argument[0];Element of ReturnValue;value" + IndexedCollection out = null; + Collection in = newTreeBagWithElement((String)source()); + out = IndexedCollection.uniqueIndexedCollection(in, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.collection;IndexedCollection;true;values;;;Element of Argument[-1];Element of ReturnValue;value" + Collection out = null; + IndexedCollection in = new IndexedCollection(newTreeBagWithElement((String)source()), null, null, false); + out = in.values(null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.collection;PredicatedCollection$Builder;true;add;;;Argument[0];Element of Argument[-1];value" + PredicatedCollection.Builder out = null; + Object in = (String)source(); + out.add(in); + sink(getElement(out.createPredicatedList())); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.collection;PredicatedCollection$Builder;true;addAll;;;Element of Argument[0];Element of Argument[-1];value" + PredicatedCollection.Builder out = null; + Collection in = List.of((String)source()); + out.addAll(in); + sink(getElement(out.createPredicatedList())); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.collection;PredicatedCollection$Builder;true;createPredicatedBag;;;Element of Argument[-1];Element of ReturnValue;value" + Bag out = null; + PredicatedCollection.Builder in = newPredicatedCollectionBuilderWithElement((String)source()); + out = in.createPredicatedBag(null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.collection;PredicatedCollection$Builder;true;createPredicatedBag;;;Element of Argument[-1];Element of ReturnValue;value" + Bag out = null; + PredicatedCollection.Builder in = newPredicatedCollectionBuilderWithElement((String)source()); + out = in.createPredicatedBag(); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.collection;PredicatedCollection$Builder;true;createPredicatedBag;;;Element of Argument[0];Element of ReturnValue;value" + Bag out = null; + Bag in = newTreeBagWithElement((String)source()); + PredicatedCollection.Builder instance = null; + out = instance.createPredicatedBag(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.collection;PredicatedCollection$Builder;true;createPredicatedList;;;Element of Argument[-1];Element of ReturnValue;value" + List out = null; + PredicatedCollection.Builder in = newPredicatedCollectionBuilderWithElement((String)source()); + out = in.createPredicatedList(null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.collection;PredicatedCollection$Builder;true;createPredicatedList;;;Element of Argument[-1];Element of ReturnValue;value" + List out = null; + PredicatedCollection.Builder in = newPredicatedCollectionBuilderWithElement((String)source()); + out = in.createPredicatedList(); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.collection;PredicatedCollection$Builder;true;createPredicatedList;;;Element of Argument[0];Element of ReturnValue;value" + List out = null; + List in = List.of((String)source()); + PredicatedCollection.Builder instance = null; + out = instance.createPredicatedList(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.collection;PredicatedCollection$Builder;true;createPredicatedMultiSet;;;Element of Argument[-1];Element of ReturnValue;value" + MultiSet out = null; + PredicatedCollection.Builder in = newPredicatedCollectionBuilderWithElement((String)source()); + out = in.createPredicatedMultiSet(null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.collection;PredicatedCollection$Builder;true;createPredicatedMultiSet;;;Element of Argument[-1];Element of ReturnValue;value" + MultiSet out = null; + PredicatedCollection.Builder in = newPredicatedCollectionBuilderWithElement((String)source()); + out = in.createPredicatedMultiSet(); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.collection;PredicatedCollection$Builder;true;createPredicatedMultiSet;;;Element of Argument[0];Element of ReturnValue;value" + MultiSet out = null; + MultiSet in = newHashMultiSetWithElement((String)source()); + PredicatedCollection.Builder instance = null; + out = instance.createPredicatedMultiSet(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.collection;PredicatedCollection$Builder;true;createPredicatedQueue;;;Element of Argument[-1];Element of ReturnValue;value" + Queue out = null; + PredicatedCollection.Builder in = newPredicatedCollectionBuilderWithElement((String)source()); + out = in.createPredicatedQueue(null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.collection;PredicatedCollection$Builder;true;createPredicatedQueue;;;Element of Argument[-1];Element of ReturnValue;value" + Queue out = null; + PredicatedCollection.Builder in = newPredicatedCollectionBuilderWithElement((String)source()); + out = in.createPredicatedQueue(); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.collection;PredicatedCollection$Builder;true;createPredicatedQueue;;;Element of Argument[0];Element of ReturnValue;value" + Queue out = null; + Queue in = newCircularFifoQueueWithElement((String)source()); + PredicatedCollection.Builder instance = null; + out = instance.createPredicatedQueue(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.collection;PredicatedCollection$Builder;true;createPredicatedSet;;;Element of Argument[-1];Element of ReturnValue;value" + Set out = null; + PredicatedCollection.Builder in = newPredicatedCollectionBuilderWithElement((String)source()); + out = in.createPredicatedSet(null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.collection;PredicatedCollection$Builder;true;createPredicatedSet;;;Element of Argument[-1];Element of ReturnValue;value" + Set out = null; + PredicatedCollection.Builder in = newPredicatedCollectionBuilderWithElement((String)source()); + out = in.createPredicatedSet(); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.collection;PredicatedCollection$Builder;true;createPredicatedSet;;;Element of Argument[0];Element of ReturnValue;value" + Set out = null; + Set in = newListOrderedSetWithElement((String)source()); + PredicatedCollection.Builder instance = null; + out = instance.createPredicatedSet(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.collection;PredicatedCollection$Builder;true;rejectedElements;;;Element of Argument[-1];Element of ReturnValue;value" + Collection out = null; + PredicatedCollection.Builder in = newPredicatedCollectionBuilderWithElement((String)source()); + out = in.rejectedElements(); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.collection;PredicatedCollection;true;predicatedCollection;;;Element of Argument[0];Element of ReturnValue;value" + PredicatedCollection out = null; + Collection in = newTreeBagWithElement((String)source()); + out = PredicatedCollection.predicatedCollection(in, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.collection;SynchronizedCollection;true;synchronizedCollection;;;Element of Argument[0];Element of ReturnValue;value" + SynchronizedCollection out = null; + Collection in = newTreeBagWithElement((String)source()); + out = SynchronizedCollection.synchronizedCollection(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.collection;TransformedCollection;true;transformingCollection;;;Element of Argument[0];Element of ReturnValue;value" + TransformedCollection out = null; + Collection in = newTreeBagWithElement((String)source()); + out = TransformedCollection.transformingCollection(in, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.collection;UnmodifiableBoundedCollection;true;unmodifiableBoundedCollection;;;Element of Argument[0];Element of ReturnValue;value" + BoundedCollection out = null; + Collection in = newTreeBagWithElement((String)source()); + out = UnmodifiableBoundedCollection.unmodifiableBoundedCollection(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.collection;UnmodifiableBoundedCollection;true;unmodifiableBoundedCollection;;;Element of Argument[0];Element of ReturnValue;value" + BoundedCollection out = null; + BoundedCollection in = newCircularFifoQueueWithElement((String)source()); + out = UnmodifiableBoundedCollection.unmodifiableBoundedCollection(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.collection;UnmodifiableCollection;true;unmodifiableCollection;;;Element of Argument[0];Element of ReturnValue;value" + Collection out = null; + Collection in = newTreeBagWithElement((String)source()); + out = UnmodifiableCollection.unmodifiableCollection(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;AbstractIteratorDecorator;true;AbstractIteratorDecorator;;;Element of Argument[0];Element of Argument[-1];value" + AbstractIteratorDecorator out = null; + Iterator in = newListIteratorWithElement((String)source()); + out = new MyAbstractIteratorDecorator(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;AbstractListIteratorDecorator;true;AbstractListIteratorDecorator;;;Element of Argument[0];Element of Argument[-1];value" + AbstractListIteratorDecorator out = null; + ListIterator in = newListIteratorWithElement((String)source()); + out = new MyAbstractListIteratorDecorator(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;AbstractListIteratorDecorator;true;getListIterator;;;Element of Argument[-1];Element of ReturnValue;value" + ListIterator out = null; + MyAbstractListIteratorDecorator in = new MyAbstractListIteratorDecorator(newListIteratorWithElement((String)source())); + out = in.myGetListIterator(); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;AbstractMapIteratorDecorator;true;AbstractMapIteratorDecorator;;;Element of Argument[0];Element of Argument[-1];value" + AbstractMapIteratorDecorator out = null; + MapIterator in = newLinkedMapWithMapKey((String)source()).mapIterator(); + out = new MyAbstractMapIteratorDecorator(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;AbstractMapIteratorDecorator;true;AbstractMapIteratorDecorator;;;MapValue of Argument[0];MapValue of Argument[-1];value" + AbstractMapIteratorDecorator out = null; + MapIterator in = newLinkedMapWithMapValue((String)source()).mapIterator(); + out = new MyAbstractMapIteratorDecorator(in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;AbstractMapIteratorDecorator;true;getMapIterator;;;Element of Argument[-1];Element of ReturnValue;value" + MapIterator out = null; + MyAbstractMapIteratorDecorator in = new MyAbstractMapIteratorDecorator(newLinkedMapWithMapKey((String)source()).mapIterator()); + out = in.myGetMapIterator(); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;AbstractMapIteratorDecorator;true;getMapIterator;;;MapValue of Argument[-1];MapValue of ReturnValue;value" + MapIterator out = null; + MyAbstractMapIteratorDecorator in = new MyAbstractMapIteratorDecorator(newLinkedMapWithMapValue((String)source()).mapIterator()); + out = in.myGetMapIterator(); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;AbstractOrderedMapIteratorDecorator;true;AbstractOrderedMapIteratorDecorator;;;Element of Argument[0];Element of Argument[-1];value" + AbstractOrderedMapIteratorDecorator out = null; + OrderedMapIterator in = newListOrderedMapWithMapKey((String)source()).mapIterator(); + out = new MyAbstractOrderedMapIteratorDecorator(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;AbstractOrderedMapIteratorDecorator;true;AbstractOrderedMapIteratorDecorator;;;MapValue of Argument[0];MapValue of Argument[-1];value" + AbstractOrderedMapIteratorDecorator out = null; + OrderedMapIterator in = newListOrderedMapWithMapValue((String)source()).mapIterator(); + out = new MyAbstractOrderedMapIteratorDecorator(in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;AbstractOrderedMapIteratorDecorator;true;getOrderedMapIterator;;;Element of Argument[-1];Element of ReturnValue;value" + OrderedMapIterator out = null; + MyAbstractOrderedMapIteratorDecorator in = new MyAbstractOrderedMapIteratorDecorator(newListOrderedMapWithMapKey((String)source()).mapIterator()); + out = in.myGetOrderedMapIterator(); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;AbstractOrderedMapIteratorDecorator;true;getOrderedMapIterator;;;MapValue of Argument[-1];MapValue of ReturnValue;value" + OrderedMapIterator out = null; + MyAbstractOrderedMapIteratorDecorator in = new MyAbstractOrderedMapIteratorDecorator(newListOrderedMapWithMapValue((String)source()).mapIterator()); + out = in.myGetOrderedMapIterator(); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;AbstractUntypedIteratorDecorator;true;AbstractUntypedIteratorDecorator;;;Element of Argument[0];Element of Argument[-1];value" + AbstractUntypedIteratorDecorator out = null; + Iterator in = newListIteratorWithElement((String)source()); + out = new MyAbstractUntypedIteratorDecorator(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;AbstractUntypedIteratorDecorator;true;getIterator;;;Element of Argument[-1];Element of ReturnValue;value" + Iterator out = null; + MyAbstractUntypedIteratorDecorator in = new MyAbstractUntypedIteratorDecorator(newListIteratorWithElement((String)source())); + out = in.myGetIterator(); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;ArrayIterator;true;ArrayIterator;;;ArrayElement of Argument[0];Element of Argument[-1];value" + ArrayIterator out = null; + Object in = (Object)newWithArrayElement((String)source()); + out = new ArrayIterator(in, 0, 0); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;ArrayIterator;true;ArrayIterator;;;ArrayElement of Argument[0];Element of Argument[-1];value" + ArrayIterator out = null; + Object in = (Object)newWithArrayElement((String)source()); + out = new ArrayIterator(in, 0); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;ArrayIterator;true;ArrayIterator;;;ArrayElement of Argument[0];Element of Argument[-1];value" + ArrayIterator out = null; + Object in = (Object)newWithArrayElement((String)source()); + out = new ArrayIterator(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;ArrayIterator;true;getArray;;;Element of Argument[-1];ArrayElement of ReturnValue;value" + String[] out = null; + ArrayIterator in = new ArrayIterator((Object)newWithArrayElement((String)source())); + out = (String[])in.getArray(); + sink(getArrayElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;ArrayListIterator;true;ArrayListIterator;;;ArrayElement of Argument[0];Element of Argument[-1];value" + ArrayListIterator out = null; + Object in = (Object)newWithArrayElement((String)source()); + out = new ArrayListIterator(in, 0, 0); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;ArrayListIterator;true;ArrayListIterator;;;ArrayElement of Argument[0];Element of Argument[-1];value" + ArrayListIterator out = null; + Object in = (Object)newWithArrayElement((String)source()); + out = new ArrayListIterator(in, 0); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;ArrayListIterator;true;ArrayListIterator;;;ArrayElement of Argument[0];Element of Argument[-1];value" + ArrayListIterator out = null; + Object in = (Object)newWithArrayElement((String)source()); + out = new ArrayListIterator(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;BoundedIterator;true;BoundedIterator;;;Element of Argument[0];Element of Argument[-1];value" + BoundedIterator out = null; + Iterator in = newListIteratorWithElement((String)source()); + out = new BoundedIterator(in, 0L, 0L); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;CollatingIterator;true;CollatingIterator;(Comparator,Collection);;Element of Element of Argument[1];Element of Argument[-1];value" + CollatingIterator out = null; + Collection in = List.of(newListIteratorWithElement((String)source())); + out = new CollatingIterator((Comparator)null, in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;CollatingIterator;true;CollatingIterator;(Comparator,Iterator,Iterator);;Element of Argument[1];Element of Argument[-1];value" + CollatingIterator out = null; + Iterator in = newListIteratorWithElement((String)source()); + out = new CollatingIterator(null, in, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;CollatingIterator;true;CollatingIterator;(Comparator,Iterator,Iterator);;Element of Argument[2];Element of Argument[-1];value" + CollatingIterator out = null; + Iterator in = newListIteratorWithElement((String)source()); + out = new CollatingIterator(null, null, in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;CollatingIterator;true;CollatingIterator;(Comparator,Iterator[]);;Element of ArrayElement of Argument[1];Element of Argument[-1];value" + CollatingIterator out = null; + Iterator[] in = new Iterator[]{newListIteratorWithElement((String)source())}; + out = new CollatingIterator((Comparator)null, in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;CollatingIterator;true;addIterator;;;Element of Argument[0];Element of Argument[-1];value" + CollatingIterator out = null; + Iterator in = newListIteratorWithElement((String)source()); + out.addIterator(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;CollatingIterator;true;getIterators;;;Element of Argument[-1];Element of Element of ReturnValue;value" + List out = null; + CollatingIterator in = new CollatingIterator((Comparator)null, List.of(newListIteratorWithElement((String)source()))); + out = in.getIterators(); + sink(getElement(getElement(out))); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;CollatingIterator;true;setIterator;;;Element of Argument[1];Element of Argument[-1];value" + CollatingIterator out = null; + Iterator in = newListIteratorWithElement((String)source()); + out.setIterator(0, in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;EnumerationIterator;true;EnumerationIterator;;;Element of Argument[0];Element of Argument[-1];value" + EnumerationIterator out = null; + Enumeration in = newEnumerationWithElement((String)source()); + out = new EnumerationIterator(in, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;EnumerationIterator;true;EnumerationIterator;;;Element of Argument[0];Element of Argument[-1];value" + EnumerationIterator out = null; + Enumeration in = newEnumerationWithElement((String)source()); + out = new EnumerationIterator(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;EnumerationIterator;true;getEnumeration;;;Element of Argument[-1];Element of ReturnValue;value" + Enumeration out = null; + EnumerationIterator in = new EnumerationIterator(newEnumerationWithElement((String)source())); + out = in.getEnumeration(); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;EnumerationIterator;true;setEnumeration;;;Element of Argument[0];Element of Argument[-1];value" + EnumerationIterator out = null; + Enumeration in = newEnumerationWithElement((String)source()); + out.setEnumeration(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;FilterIterator;true;FilterIterator;;;Element of Argument[0];Element of Argument[-1];value" + FilterIterator out = null; + Iterator in = newListIteratorWithElement((String)source()); + out = new FilterIterator(in, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;FilterIterator;true;FilterIterator;;;Element of Argument[0];Element of Argument[-1];value" + FilterIterator out = null; + Iterator in = newListIteratorWithElement((String)source()); + out = new FilterIterator(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;FilterIterator;true;getIterator;;;Element of Argument[-1];Element of ReturnValue;value" + Iterator out = null; + FilterIterator in = new FilterIterator(newListIteratorWithElement((String)source())); + out = in.getIterator(); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;FilterIterator;true;setIterator;;;Element of Argument[0];Element of Argument[-1];value" + FilterIterator out = null; + Iterator in = newListIteratorWithElement((String)source()); + out.setIterator(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;FilterListIterator;true;FilterListIterator;(ListIterator);;Element of Argument[0];Element of Argument[-1];value" + FilterListIterator out = null; + ListIterator in = newListIteratorWithElement((String)source()); + out = new FilterListIterator(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;FilterListIterator;true;FilterListIterator;(ListIterator,Predicate);;Element of Argument[0];Element of Argument[-1];value" + FilterListIterator out = null; + ListIterator in = newListIteratorWithElement((String)source()); + out = new FilterListIterator(in, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;FilterListIterator;true;getListIterator;;;Element of Argument[-1];Element of ReturnValue;value" + ListIterator out = null; + FilterListIterator in = new FilterListIterator(newListIteratorWithElement((String)source())); + out = in.getListIterator(); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;FilterListIterator;true;setListIterator;;;Element of Argument[0];Element of Argument[-1];value" + FilterListIterator out = null; + ListIterator in = newListIteratorWithElement((String)source()); + out.setListIterator(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;IteratorChain;true;IteratorChain;(Collection);;Element of Element of Argument[0];Element of Argument[-1];value" + IteratorChain out = null; + Collection in = newTreeBagWithElement(newListIteratorWithElement((String)source())); + out = new IteratorChain(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;IteratorChain;true;IteratorChain;(Iterator);;Element of Argument[0];Element of Argument[-1];value" + IteratorChain out = null; + Iterator in = newListIteratorWithElement((String)source()); + out = new IteratorChain(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;IteratorChain;true;IteratorChain;(Iterator,Iterator);;Element of Argument[0];Element of Argument[-1];value" + IteratorChain out = null; + Iterator in = newListIteratorWithElement((String)source()); + out = new IteratorChain(in, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;IteratorChain;true;IteratorChain;(Iterator,Iterator);;Element of Argument[1];Element of Argument[-1];value" + IteratorChain out = null; + Iterator in = newListIteratorWithElement((String)source()); + out = new IteratorChain(null, in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;IteratorChain;true;IteratorChain;(Iterator[]);;Element of ArrayElement of Argument[0];Element of Argument[-1];value" + IteratorChain out = null; + Iterator[] in = new Iterator[]{newListIteratorWithElement((String)source())}; + out = new IteratorChain(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;IteratorChain;true;addIterator;;;Element of Argument[0];Element of Argument[-1];value" + IteratorChain out = null; + Iterator in = newListIteratorWithElement((String)source()); + out.addIterator(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;IteratorEnumeration;true;IteratorEnumeration;;;Element of Argument[0];Element of Argument[-1];value" + IteratorEnumeration out = null; + Iterator in = newListIteratorWithElement((String)source()); + out = new IteratorEnumeration(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;IteratorEnumeration;true;getIterator;;;Element of Argument[-1];Element of ReturnValue;value" + Iterator out = null; + IteratorEnumeration in = new IteratorEnumeration(newListIteratorWithElement((String)source())); + out = in.getIterator(); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;IteratorEnumeration;true;setIterator;;;Element of Argument[0];Element of Argument[-1];value" + IteratorEnumeration out = null; + Iterator in = newListIteratorWithElement((String)source()); + out.setIterator(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;IteratorIterable;true;IteratorIterable;;;Element of Argument[0];Element of Argument[-1];value" + IteratorIterable out = null; + Iterator in = newListIteratorWithElement((String)source()); + out = new IteratorIterable(in, false); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;IteratorIterable;true;IteratorIterable;;;Element of Argument[0];Element of Argument[-1];value" + IteratorIterable out = null; + Iterator in = newListIteratorWithElement((String)source()); + out = new IteratorIterable(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;ListIteratorWrapper;true;ListIteratorWrapper;;;Element of Argument[0];Element of Argument[-1];value" + ListIteratorWrapper out = null; + Iterator in = newListIteratorWithElement((String)source()); + out = new ListIteratorWrapper(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;LoopingIterator;true;LoopingIterator;;;Element of Argument[0];Element of Argument[-1];value" + LoopingIterator out = null; + Collection in = newTreeBagWithElement((String)source()); + out = new LoopingIterator(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;LoopingListIterator;true;LoopingListIterator;;;Element of Argument[0];Element of Argument[-1];value" + LoopingListIterator out = null; + List in = List.of((String)source()); + out = new LoopingListIterator(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;ObjectArrayIterator;true;ObjectArrayIterator;;;ArrayElement of Argument[0];Element of Argument[-1];value" + ObjectArrayIterator out = null; + Object[] in = new Object[]{(String)source()}; + out = new ObjectArrayIterator(in, 0, 0); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;ObjectArrayIterator;true;ObjectArrayIterator;;;ArrayElement of Argument[0];Element of Argument[-1];value" + ObjectArrayIterator out = null; + Object[] in = new Object[]{(String)source()}; + out = new ObjectArrayIterator(in, 0); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;ObjectArrayIterator;true;ObjectArrayIterator;;;ArrayElement of Argument[0];Element of Argument[-1];value" + ObjectArrayIterator out = null; + Object[] in = new Object[]{(String)source()}; + out = new ObjectArrayIterator(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;ObjectArrayIterator;true;getArray;;;Element of Argument[-1];ArrayElement of ReturnValue;value" + Object[] out = null; + ObjectArrayIterator in = new ObjectArrayIterator(new Object[]{(String)source()}); + out = in.getArray(); + sink(getArrayElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;ObjectArrayListIterator;true;ObjectArrayListIterator;;;ArrayElement of Argument[0];Element of Argument[-1];value" + ObjectArrayListIterator out = null; + Object[] in = new Object[]{(String)source()}; + out = new ObjectArrayListIterator(in, 0, 0); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;ObjectArrayListIterator;true;ObjectArrayListIterator;;;ArrayElement of Argument[0];Element of Argument[-1];value" + ObjectArrayListIterator out = null; + Object[] in = new Object[]{(String)source()}; + out = new ObjectArrayListIterator(in, 0); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;ObjectArrayListIterator;true;ObjectArrayListIterator;;;ArrayElement of Argument[0];Element of Argument[-1];value" + ObjectArrayListIterator out = null; + Object[] in = new Object[]{(String)source()}; + out = new ObjectArrayListIterator(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;PeekingIterator;true;PeekingIterator;;;Element of Argument[0];Element of Argument[-1];value" + PeekingIterator out = null; + Iterator in = newListIteratorWithElement((String)source()); + out = new PeekingIterator(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;PeekingIterator;true;element;;;Element of Argument[-1];ReturnValue;value" + Object out = null; + PeekingIterator in = new PeekingIterator(newListIteratorWithElement((String)source())); + out = in.element(); + sink(out); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;PeekingIterator;true;peek;;;Element of Argument[-1];ReturnValue;value" + Object out = null; + PeekingIterator in = new PeekingIterator(newListIteratorWithElement((String)source())); + out = in.peek(); + sink(out); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;PeekingIterator;true;peekingIterator;;;Element of Argument[0];Element of ReturnValue;value" + PeekingIterator out = null; + Iterator in = newListIteratorWithElement((String)source()); + out = PeekingIterator.peekingIterator(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;PermutationIterator;true;PermutationIterator;;;Element of Argument[0];Element of Element of Argument[-1];value" + PermutationIterator out = null; + Collection in = List.of((String)source()); + out = new PermutationIterator(in); + sink(getElement(getElement(out))); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;PushbackIterator;true;PushbackIterator;;;Element of Argument[0];Element of Argument[-1];value" + PushbackIterator out = null; + Iterator in = newListIteratorWithElement((String)source()); + out = new PushbackIterator(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;PushbackIterator;true;pushback;;;Argument[0];Element of Argument[-1];value" + PushbackIterator out = null; + Object in = source(); + out.pushback(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;PushbackIterator;true;pushbackIterator;;;Element of Argument[0];Element of ReturnValue;value" + PushbackIterator out = null; + Iterator in = newListIteratorWithElement((String)source()); + out = PushbackIterator.pushbackIterator(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;ReverseListIterator;true;ReverseListIterator;;;Element of Argument[0];Element of Argument[-1];value" + ReverseListIterator out = null; + List in = List.of((String)source()); + out = new ReverseListIterator(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;SingletonIterator;true;SingletonIterator;;;Argument[0];Element of Argument[-1];value" + SingletonIterator out = null; + Object in = source(); + out = new SingletonIterator(in, false); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;SingletonIterator;true;SingletonIterator;;;Argument[0];Element of Argument[-1];value" + SingletonIterator out = null; + Object in = source(); + out = new SingletonIterator(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;SingletonListIterator;true;SingletonListIterator;;;Argument[0];Element of Argument[-1];value" + SingletonListIterator out = null; + Object in = source(); + out = new SingletonListIterator(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;SkippingIterator;true;SkippingIterator;;;Element of Argument[0];Element of Argument[-1];value" + SkippingIterator out = null; + Iterator in = newListIteratorWithElement((String)source()); + out = new SkippingIterator(in, 0L); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;UniqueFilterIterator;true;UniqueFilterIterator;;;Element of Argument[0];Element of Argument[-1];value" + UniqueFilterIterator out = null; + Iterator in = newListIteratorWithElement((String)source()); + out = new UniqueFilterIterator(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;UnmodifiableIterator;true;unmodifiableIterator;;;Element of Argument[0];Element of ReturnValue;value" + Iterator out = null; + Iterator in = newListIteratorWithElement((String)source()); + out = UnmodifiableIterator.unmodifiableIterator(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;UnmodifiableListIterator;true;umodifiableListIterator;;;Element of Argument[0];Element of ReturnValue;value" + ListIterator out = null; + ListIterator in = newListIteratorWithElement((String)source()); + out = UnmodifiableListIterator.umodifiableListIterator(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;UnmodifiableMapIterator;true;unmodifiableMapIterator;;;Element of Argument[0];Element of ReturnValue;value" + MapIterator out = null; + MapIterator in = newLinkedMapWithMapKey((String)source()).mapIterator(); + out = UnmodifiableMapIterator.unmodifiableMapIterator(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;UnmodifiableMapIterator;true;unmodifiableMapIterator;;;MapValue of Argument[0];MapValue of ReturnValue;value" + MapIterator out = null; + MapIterator in = newLinkedMapWithMapValue((String)source()).mapIterator(); + out = UnmodifiableMapIterator.unmodifiableMapIterator(in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;UnmodifiableOrderedMapIterator;true;unmodifiableOrderedMapIterator;;;Element of Argument[0];Element of ReturnValue;value" + OrderedMapIterator out = null; + OrderedMapIterator in = newListOrderedMapWithMapKey((String)source()).mapIterator(); + out = UnmodifiableOrderedMapIterator.unmodifiableOrderedMapIterator(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;UnmodifiableOrderedMapIterator;true;unmodifiableOrderedMapIterator;;;MapValue of Argument[0];MapValue of ReturnValue;value" + OrderedMapIterator out = null; + OrderedMapIterator in = newListOrderedMapWithMapValue((String)source()).mapIterator(); + out = UnmodifiableOrderedMapIterator.unmodifiableOrderedMapIterator(in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;ZippingIterator;true;ZippingIterator;(Iterator,Iterator);;Element of Argument[0];Element of Argument[-1];value" + ZippingIterator out = null; + Iterator in = newListIteratorWithElement((String)source()); + out = new ZippingIterator(in, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;ZippingIterator;true;ZippingIterator;(Iterator,Iterator);;Element of Argument[1];Element of Argument[-1];value" + ZippingIterator out = null; + Iterator in = newListIteratorWithElement((String)source()); + out = new ZippingIterator(null, in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;ZippingIterator;true;ZippingIterator;(Iterator,Iterator,Iterator);;Element of Argument[0];Element of Argument[-1];value" + ZippingIterator out = null; + Iterator in = newListIteratorWithElement((String)source()); + out = new ZippingIterator(in, null, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;ZippingIterator;true;ZippingIterator;(Iterator,Iterator,Iterator);;Element of Argument[1];Element of Argument[-1];value" + ZippingIterator out = null; + Iterator in = newListIteratorWithElement((String)source()); + out = new ZippingIterator(null, in, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;ZippingIterator;true;ZippingIterator;(Iterator,Iterator,Iterator);;Element of Argument[2];Element of Argument[-1];value" + ZippingIterator out = null; + Iterator in = newListIteratorWithElement((String)source()); + out = new ZippingIterator(null, null, in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.iterators;ZippingIterator;true;ZippingIterator;(Iterator[]);;Element of ArrayElement of Argument[0];Element of Argument[-1];value" + ZippingIterator out = null; + Iterator[] in = new Iterator[]{newListIteratorWithElement((String)source())}; + out = new ZippingIterator(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.keyvalue;MultiKey;true;MultiKey;(Object,Object);;Argument[0];Element of Argument[-1];value" + MultiKey out = null; + Object in = source(); + out = new MultiKey(in, (Object)null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.keyvalue;MultiKey;true;MultiKey;(Object,Object);;Argument[1];Element of Argument[-1];value" + MultiKey out = null; + Object in = source(); + out = new MultiKey((Object)null, in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.keyvalue;MultiKey;true;MultiKey;(Object,Object,Object);;Argument[0];Element of Argument[-1];value" + MultiKey out = null; + Object in = source(); + out = new MultiKey(in, null, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.keyvalue;MultiKey;true;MultiKey;(Object,Object,Object);;Argument[1];Element of Argument[-1];value" + MultiKey out = null; + Object in = source(); + out = new MultiKey(null, in, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.keyvalue;MultiKey;true;MultiKey;(Object,Object,Object);;Argument[2];Element of Argument[-1];value" + MultiKey out = null; + Object in = source(); + out = new MultiKey(null, null, in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.keyvalue;MultiKey;true;MultiKey;(Object,Object,Object,Object);;Argument[0];Element of Argument[-1];value" + MultiKey out = null; + Object in = source(); + out = new MultiKey(in, null, null, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.keyvalue;MultiKey;true;MultiKey;(Object,Object,Object,Object);;Argument[1];Element of Argument[-1];value" + MultiKey out = null; + Object in = source(); + out = new MultiKey(null, in, null, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.keyvalue;MultiKey;true;MultiKey;(Object,Object,Object,Object);;Argument[2];Element of Argument[-1];value" + MultiKey out = null; + Object in = source(); + out = new MultiKey(null, null, in, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.keyvalue;MultiKey;true;MultiKey;(Object,Object,Object,Object);;Argument[3];Element of Argument[-1];value" + MultiKey out = null; + Object in = source(); + out = new MultiKey(null, null, null, in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.keyvalue;MultiKey;true;MultiKey;(Object,Object,Object,Object,Object);;Argument[0];Element of Argument[-1];value" + MultiKey out = null; + Object in = source(); + out = new MultiKey(in, null, null, null, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.keyvalue;MultiKey;true;MultiKey;(Object,Object,Object,Object,Object);;Argument[1];Element of Argument[-1];value" + MultiKey out = null; + Object in = source(); + out = new MultiKey(null, in, null, null, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.keyvalue;MultiKey;true;MultiKey;(Object,Object,Object,Object,Object);;Argument[2];Element of Argument[-1];value" + MultiKey out = null; + Object in = source(); + out = new MultiKey(null, null, in, null, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.keyvalue;MultiKey;true;MultiKey;(Object,Object,Object,Object,Object);;Argument[3];Element of Argument[-1];value" + MultiKey out = null; + Object in = source(); + out = new MultiKey(null, null, null, in, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.keyvalue;MultiKey;true;MultiKey;(Object,Object,Object,Object,Object);;Argument[4];Element of Argument[-1];value" + MultiKey out = null; + Object in = source(); + out = new MultiKey(null, null, null, null, in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.keyvalue;MultiKey;true;MultiKey;(Object[]);;ArrayElement of Argument[0];Element of Argument[-1];value" + MultiKey out = null; + Object[] in = new Object[]{(String)source()}; + out = new MultiKey(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.keyvalue;MultiKey;true;MultiKey;(Object[],boolean);;ArrayElement of Argument[0];Element of Argument[-1];value" + MultiKey out = null; + Object[] in = new Object[]{(String)source()}; + out = new MultiKey(in, false); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.keyvalue;MultiKey;true;getKey;;;Element of Argument[-1];ReturnValue;value" + Object out = null; + MultiKey in = newMultiKeyWithElement((String)source()); + out = in.getKey(0); + sink(out); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.keyvalue;MultiKey;true;getKeys;;;Element of Argument[-1];ArrayElement of ReturnValue;value" + Object[] out = null; + MultiKey in = newMultiKeyWithElement((String)source()); + out = in.getKeys(); + sink(getArrayElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.list;AbstractLinkedList;true;AbstractLinkedList;;;Element of Argument[0];Element of Argument[-1];value" + AbstractLinkedList out = null; + Collection in = newTreeBagWithElement((String)source()); + out = new MyAbstractLinkedList(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.list;AbstractLinkedList;true;addFirst;;;Argument[0];Element of Argument[-1];value" + AbstractLinkedList out = null; + Object in = source(); + out.addFirst(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.list;AbstractLinkedList;true;addLast;;;Argument[0];Element of Argument[-1];value" + AbstractLinkedList out = null; + Object in = source(); + out.addLast(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.list;AbstractLinkedList;true;getFirst;;;Element of Argument[-1];ReturnValue;value" + Object out = null; + AbstractLinkedList in = newCursorableLinkedListWithElement((String)source()); + out = in.getFirst(); + sink(out); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.list;AbstractLinkedList;true;getLast;;;Element of Argument[-1];ReturnValue;value" + Object out = null; + AbstractLinkedList in = newCursorableLinkedListWithElement((String)source()); + out = in.getLast(); + sink(out); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.list;AbstractLinkedList;true;removeFirst;;;Element of Argument[-1];ReturnValue;value" + Object out = null; + AbstractLinkedList in = newCursorableLinkedListWithElement((String)source()); + out = in.removeFirst(); + sink(out); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.list;AbstractLinkedList;true;removeLast;;;Element of Argument[-1];ReturnValue;value" + Object out = null; + AbstractLinkedList in = newCursorableLinkedListWithElement((String)source()); + out = in.removeLast(); + sink(out); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.list;AbstractListDecorator;true;AbstractListDecorator;;;Element of Argument[0];Element of Argument[-1];value" + AbstractListDecorator out = null; + List in = List.of((String)source()); + out = new MyAbstractListDecorator(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.list;AbstractSerializableListDecorator;true;AbstractSerializableListDecorator;;;Element of Argument[0];Element of Argument[-1];value" + AbstractSerializableListDecorator out = null; + List in = List.of((String)source()); + out = new MyAbstractSerializableListDecorator(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.list;CursorableLinkedList;true;CursorableLinkedList;;;Element of Argument[0];Element of Argument[-1];value" + CursorableLinkedList out = null; + Collection in = List.of((String)source()); + out = new CursorableLinkedList(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.list;CursorableLinkedList;true;cursor;;;Element of Argument[-1];Element of ReturnValue;value" + CursorableLinkedList.Cursor out = null; + CursorableLinkedList in = newCursorableLinkedListWithElement((String)source()); + out = in.cursor(0); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.list;CursorableLinkedList;true;cursor;;;Element of Argument[-1];Element of ReturnValue;value" + CursorableLinkedList.Cursor out = null; + CursorableLinkedList in = newCursorableLinkedListWithElement((String)source()); + out = in.cursor(); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.list;FixedSizeList;true;fixedSizeList;;;Element of Argument[0];Element of ReturnValue;value" + FixedSizeList out = null; + List in = List.of((String)source()); + out = FixedSizeList.fixedSizeList(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.list;GrowthList;true;growthList;;;Element of Argument[0];Element of ReturnValue;value" + GrowthList out = null; + List in = List.of((String)source()); + out = GrowthList.growthList(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.list;LazyList;true;lazyList;;;Element of Argument[0];Element of ReturnValue;value" + LazyList out = null; + List in = List.of((String)source()); + out = LazyList.lazyList(in, (Transformer)null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.list;LazyList;true;lazyList;;;Element of Argument[0];Element of ReturnValue;value" + LazyList out = null; + List in = List.of((String)source()); + out = LazyList.lazyList(in, (Factory)null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.list;NodeCachingLinkedList;true;NodeCachingLinkedList;(Collection);;Element of Argument[0];Element of Argument[-1];value" + NodeCachingLinkedList out = null; + Collection in = List.of((String)source()); + out = new NodeCachingLinkedList(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.list;PredicatedList;true;predicatedList;;;Element of Argument[0];Element of ReturnValue;value" + PredicatedList out = null; + List in = List.of((String)source()); + out = PredicatedList.predicatedList(in, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.list;SetUniqueList;true;asSet;;;Element of Argument[-1];Element of ReturnValue;value" + Set out = null; + SetUniqueList in = SetUniqueList.setUniqueList(List.of((String)source())); + out = in.asSet(); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.list;SetUniqueList;true;setUniqueList;;;Element of Argument[0];Element of ReturnValue;value" + SetUniqueList out = null; + List in = List.of((String)source()); + out = SetUniqueList.setUniqueList(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.list;TransformedList;true;transformingList;;;Element of Argument[0];Element of ReturnValue;value" + TransformedList out = null; + List in = List.of((String)source()); + out = TransformedList.transformingList(in, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.list;TreeList;true;TreeList;;;Element of Argument[0];Element of Argument[-1];value" + TreeList out = null; + Collection in = List.of((String)source()); + out = new TreeList(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.list;UnmodifiableList;true;UnmodifiableList;;;Element of Argument[0];Element of Argument[-1];value" + UnmodifiableList out = null; + List in = List.of((String)source()); + out = new UnmodifiableList(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.list;UnmodifiableList;true;unmodifiableList;;;Element of Argument[0];Element of ReturnValue;value" + List out = null; + List in = List.of((String)source()); + out = UnmodifiableList.unmodifiableList(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;AbstractHashedMap;true;AbstractHashedMap;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value" + AbstractHashedMap out = null; + Map in = Map.of((String)source(), null); + out = new MyAbstractHashedMap(in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;AbstractHashedMap;true;AbstractHashedMap;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value" + AbstractHashedMap out = null; + Map in = Map.of(null, (String)source()); + out = new MyAbstractHashedMap(in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;AbstractLinkedMap;true;AbstractLinkedMap;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value" + AbstractLinkedMap out = null; + Map in = Map.of((String)source(), null); + out = new MyAbstractLinkedMap(in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;AbstractLinkedMap;true;AbstractLinkedMap;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value" + AbstractLinkedMap out = null; + Map in = Map.of(null, (String)source()); + out = new MyAbstractLinkedMap(in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;AbstractMapDecorator;true;AbstractMapDecorator;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value" + AbstractMapDecorator out = null; + Map in = Map.of((String)source(), null); + out = new MyAbstractMapDecorator(in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;AbstractMapDecorator;true;AbstractMapDecorator;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value" + AbstractMapDecorator out = null; + Map in = Map.of(null, (String)source()); + out = new MyAbstractMapDecorator(in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;AbstractMapDecorator;true;decorated;;;MapKey of Argument[-1];MapKey of ReturnValue;value" + Map out = null; + MyAbstractMapDecorator in = new MyAbstractMapDecorator(Map.of((String)source(), null)); + out = in.myDecorated(); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;AbstractMapDecorator;true;decorated;;;MapValue of Argument[-1];MapValue of ReturnValue;value" + Map out = null; + MyAbstractMapDecorator in = new MyAbstractMapDecorator(Map.of(null, (String)source())); + out = in.myDecorated(); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;AbstractOrderedMapDecorator;true;AbstractOrderedMapDecorator;(OrderedMap);;MapKey of Argument[0];MapKey of Argument[-1];value" + AbstractOrderedMapDecorator out = null; + OrderedMap in = newListOrderedMapWithMapKey((String)source()); + out = new MyAbstractOrderedMapDecorator(in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;AbstractOrderedMapDecorator;true;AbstractOrderedMapDecorator;(OrderedMap);;MapValue of Argument[0];MapValue of Argument[-1];value" + AbstractOrderedMapDecorator out = null; + OrderedMap in = newListOrderedMapWithMapValue((String)source()); + out = new MyAbstractOrderedMapDecorator(in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;AbstractSortedMapDecorator;true;AbstractSortedMapDecorator;(SortedMap);;MapKey of Argument[0];MapKey of Argument[-1];value" + AbstractSortedMapDecorator out = null; + SortedMap in = newTreeMapWithMapKey((String)source()); + out = new MyAbstractSortedMapDecorator(in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;AbstractSortedMapDecorator;true;AbstractSortedMapDecorator;(SortedMap);;MapValue of Argument[0];MapValue of Argument[-1];value" + AbstractSortedMapDecorator out = null; + SortedMap in = newTreeMapWithMapValue((String)source()); + out = new MyAbstractSortedMapDecorator(in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;CaseInsensitiveMap;true;CaseInsensitiveMap;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value" + CaseInsensitiveMap out = null; + Map in = Map.of((String)source(), null); + out = new CaseInsensitiveMap(in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;CaseInsensitiveMap;true;CaseInsensitiveMap;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value" + CaseInsensitiveMap out = null; + Map in = Map.of(null, (String)source()); + out = new CaseInsensitiveMap(in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;CompositeMap;true;CompositeMap;(Map,Map);;MapKey of Argument[0];MapKey of Argument[-1];value" + CompositeMap out = null; + Map in = Map.of((String)source(), null); + out = new CompositeMap(in, (Map)null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;CompositeMap;true;CompositeMap;(Map,Map);;MapKey of Argument[1];MapKey of Argument[-1];value" + CompositeMap out = null; + Map in = Map.of((String)source(), null); + out = new CompositeMap((Map)null, in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;CompositeMap;true;CompositeMap;(Map,Map);;MapValue of Argument[0];MapValue of Argument[-1];value" + CompositeMap out = null; + Map in = Map.of(null, (String)source()); + out = new CompositeMap(in, (Map)null); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;CompositeMap;true;CompositeMap;(Map,Map);;MapValue of Argument[1];MapValue of Argument[-1];value" + CompositeMap out = null; + Map in = Map.of(null, (String)source()); + out = new CompositeMap((Map)null, in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;CompositeMap;true;CompositeMap;(Map,Map,MapMutator);;MapKey of Argument[0];MapKey of Argument[-1];value" + CompositeMap out = null; + Map in = Map.of((String)source(), null); + out = new CompositeMap(in, null, null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;CompositeMap;true;CompositeMap;(Map,Map,MapMutator);;MapKey of Argument[1];MapKey of Argument[-1];value" + CompositeMap out = null; + Map in = Map.of((String)source(), null); + out = new CompositeMap(null, in, null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;CompositeMap;true;CompositeMap;(Map,Map,MapMutator);;MapValue of Argument[0];MapValue of Argument[-1];value" + CompositeMap out = null; + Map in = Map.of(null, (String)source()); + out = new CompositeMap(in, null, null); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;CompositeMap;true;CompositeMap;(Map,Map,MapMutator);;MapValue of Argument[1];MapValue of Argument[-1];value" + CompositeMap out = null; + Map in = Map.of(null, (String)source()); + out = new CompositeMap(null, in, null); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;CompositeMap;true;CompositeMap;(Map[]);;MapKey of ArrayElement of Argument[0];MapKey of Argument[-1];value" + CompositeMap out = null; + Map[] in = new Map[]{Map.of((String)source(), null)}; + out = new CompositeMap(in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;CompositeMap;true;CompositeMap;(Map[]);;MapValue of ArrayElement of Argument[0];MapValue of Argument[-1];value" + CompositeMap out = null; + Map[] in = new Map[]{Map.of(null, (String)source())}; + out = new CompositeMap(in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;CompositeMap;true;CompositeMap;(Map[],MapMutator);;MapKey of ArrayElement of Argument[0];MapKey of Argument[-1];value" + CompositeMap out = null; + Map[] in = new Map[]{Map.of((String)source(), null)}; + out = new CompositeMap(in, (CompositeMap.MapMutator)null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;CompositeMap;true;CompositeMap;(Map[],MapMutator);;MapValue of ArrayElement of Argument[0];MapValue of Argument[-1];value" + CompositeMap out = null; + Map[] in = new Map[]{Map.of(null, (String)source())}; + out = new CompositeMap(in, (CompositeMap.MapMutator)null); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;CompositeMap;true;addComposited;;;MapKey of Argument[0];MapKey of Argument[-1];value" + CompositeMap out = null; + Map in = Map.of((String)source(), null); + out.addComposited(in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;CompositeMap;true;addComposited;;;MapValue of Argument[0];MapValue of Argument[-1];value" + CompositeMap out = null; + Map in = Map.of(null, (String)source()); + out.addComposited(in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;CompositeMap;true;removeComposited;;;Argument[0];ReturnValue;value" + Map out = null; + Map in = (Map)source(); + CompositeMap instance = null; + out = instance.removeComposited(in); + sink(out); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;CompositeMap;true;removeComposited;;;MapKey of Argument[-1];MapKey of ReturnValue;value" + Map out = null; + CompositeMap in = new CompositeMap(Map.of((String)source(), null), null); + out = in.removeComposited(null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;CompositeMap;true;removeComposited;;;MapValue of Argument[-1];MapValue of ReturnValue;value" + Map out = null; + CompositeMap in = new CompositeMap(Map.of(null, (String)source()), null); + out = in.removeComposited(null); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;DefaultedMap;true;DefaultedMap;(Object);;Argument[0];MapValue of Argument[-1];value" + DefaultedMap out = null; + Object in = source(); + out = new DefaultedMap(in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;DefaultedMap;true;defaultedMap;(Map,Object);;Argument[1];MapValue of ReturnValue;value" + DefaultedMap out = null; + Object in = source(); + out = DefaultedMap.defaultedMap((Map)null, in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;DefaultedMap;true;defaultedMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" + Map out = null; + Map in = Map.of((String)source(), null); + out = DefaultedMap.defaultedMap(in, (Transformer)null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;DefaultedMap;true;defaultedMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" + DefaultedMap out = null; + Map in = Map.of((String)source(), null); + out = DefaultedMap.defaultedMap(in, (Object)null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;DefaultedMap;true;defaultedMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" + DefaultedMap out = null; + Map in = Map.of((String)source(), null); + out = DefaultedMap.defaultedMap(in, (Factory)null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;DefaultedMap;true;defaultedMap;;;MapValue of Argument[0];MapValue of ReturnValue;value" + Map out = null; + Map in = Map.of(null, (String)source()); + out = DefaultedMap.defaultedMap(in, (Transformer)null); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;DefaultedMap;true;defaultedMap;;;MapValue of Argument[0];MapValue of ReturnValue;value" + DefaultedMap out = null; + Map in = Map.of(null, (String)source()); + out = DefaultedMap.defaultedMap(in, (Object)null); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;DefaultedMap;true;defaultedMap;;;MapValue of Argument[0];MapValue of ReturnValue;value" + DefaultedMap out = null; + Map in = Map.of(null, (String)source()); + out = DefaultedMap.defaultedMap(in, (Factory)null); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;EntrySetToMapIteratorAdapter;true;EntrySetToMapIteratorAdapter;;;MapKey of Element of Argument[0];Element of Argument[-1];value" + EntrySetToMapIteratorAdapter out = null; + Set in = newListOrderedSetWithElement(newTMEWithMapKey((String)source())); + out = new EntrySetToMapIteratorAdapter(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;EntrySetToMapIteratorAdapter;true;EntrySetToMapIteratorAdapter;;;MapValue of Element of Argument[0];MapValue of Argument[-1];value" + EntrySetToMapIteratorAdapter out = null; + Set in = newListOrderedSetWithElement(newTMEWithMapValue((String)source())); + out = new EntrySetToMapIteratorAdapter(in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;FixedSizeMap;true;fixedSizeMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" + FixedSizeMap out = null; + Map in = Map.of((String)source(), null); + out = FixedSizeMap.fixedSizeMap(in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;FixedSizeMap;true;fixedSizeMap;;;MapValue of Argument[0];MapValue of ReturnValue;value" + FixedSizeMap out = null; + Map in = Map.of(null, (String)source()); + out = FixedSizeMap.fixedSizeMap(in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;FixedSizeSortedMap;true;fixedSizeSortedMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" + FixedSizeSortedMap out = null; + SortedMap in = newTreeMapWithMapKey((String)source()); + out = FixedSizeSortedMap.fixedSizeSortedMap(in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;FixedSizeSortedMap;true;fixedSizeSortedMap;;;MapValue of Argument[0];MapValue of ReturnValue;value" + FixedSizeSortedMap out = null; + SortedMap in = newTreeMapWithMapValue((String)source()); + out = FixedSizeSortedMap.fixedSizeSortedMap(in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;Flat3Map;true;Flat3Map;;;MapKey of Argument[0];MapKey of Argument[-1];value" + Flat3Map out = null; + Map in = Map.of((String)source(), null); + out = new Flat3Map(in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;Flat3Map;true;Flat3Map;;;MapValue of Argument[0];MapValue of Argument[-1];value" + Flat3Map out = null; + Map in = Map.of(null, (String)source()); + out = new Flat3Map(in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;HashedMap;true;HashedMap;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value" + HashedMap out = null; + Map in = Map.of((String)source(), null); + out = new HashedMap(in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;HashedMap;true;HashedMap;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value" + HashedMap out = null; + Map in = Map.of(null, (String)source()); + out = new HashedMap(in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;LRUMap;true;LRUMap;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value" + LRUMap out = null; + Map in = Map.of((String)source(), null); + out = new LRUMap(in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;LRUMap;true;LRUMap;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value" + LRUMap out = null; + Map in = Map.of(null, (String)source()); + out = new LRUMap(in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;LRUMap;true;LRUMap;(Map,boolean);;MapKey of Argument[0];MapKey of Argument[-1];value" + LRUMap out = null; + Map in = Map.of((String)source(), null); + out = new LRUMap(in, false); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;LRUMap;true;LRUMap;(Map,boolean);;MapValue of Argument[0];MapValue of Argument[-1];value" + LRUMap out = null; + Map in = Map.of(null, (String)source()); + out = new LRUMap(in, false); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;LRUMap;true;get;(Object,boolean);;MapValue of Argument[0];ReturnValue;value" + Object out = null; + Object in = (Object)Map.of(null, (String)source()); + LRUMap instance = null; + out = instance.get(in, false); + sink(out); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;LazyMap;true;lazyMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" + LazyMap out = null; + Map in = Map.of((String)source(), null); + out = LazyMap.lazyMap(in, (Transformer)null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;LazyMap;true;lazyMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" + LazyMap out = null; + Map in = Map.of((String)source(), null); + out = LazyMap.lazyMap(in, (Factory)null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;LazyMap;true;lazyMap;;;MapValue of Argument[0];MapValue of ReturnValue;value" + LazyMap out = null; + Map in = Map.of(null, (String)source()); + out = LazyMap.lazyMap(in, (Transformer)null); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;LazyMap;true;lazyMap;;;MapValue of Argument[0];MapValue of ReturnValue;value" + LazyMap out = null; + Map in = Map.of(null, (String)source()); + out = LazyMap.lazyMap(in, (Factory)null); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;LazySortedMap;true;lazySortedMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" + LazySortedMap out = null; + SortedMap in = newTreeMapWithMapKey((String)source()); + out = LazySortedMap.lazySortedMap(in, (Transformer)null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;LazySortedMap;true;lazySortedMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" + LazySortedMap out = null; + SortedMap in = newTreeMapWithMapKey((String)source()); + out = LazySortedMap.lazySortedMap(in, (Factory)null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;LazySortedMap;true;lazySortedMap;;;MapValue of Argument[0];MapValue of ReturnValue;value" + LazySortedMap out = null; + SortedMap in = newTreeMapWithMapValue((String)source()); + out = LazySortedMap.lazySortedMap(in, (Transformer)null); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;LazySortedMap;true;lazySortedMap;;;MapValue of Argument[0];MapValue of ReturnValue;value" + LazySortedMap out = null; + SortedMap in = newTreeMapWithMapValue((String)source()); + out = LazySortedMap.lazySortedMap(in, (Factory)null); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;LinkedMap;true;LinkedMap;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value" + LinkedMap out = null; + Map in = Map.of((String)source(), null); + out = new LinkedMap(in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;LinkedMap;true;LinkedMap;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value" + LinkedMap out = null; + Map in = Map.of(null, (String)source()); + out = new LinkedMap(in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;LinkedMap;true;asList;;;MapKey of Argument[-1];Element of ReturnValue;value" + List out = null; + LinkedMap in = newLinkedMapWithMapKey((String)source()); + out = in.asList(); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;LinkedMap;true;get;(int);;MapKey of Argument[-1];ReturnValue;value" + Object out = null; + LinkedMap in = newLinkedMapWithMapKey((String)source()); + out = in.get(0); + sink(out); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;LinkedMap;true;getValue;(int);;MapValue of Argument[-1];ReturnValue;value" + Object out = null; + LinkedMap in = newLinkedMapWithMapValue((String)source()); + out = in.getValue(0); + sink(out); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;LinkedMap;true;remove;(int);;MapValue of Argument[-1];ReturnValue;value" + Object out = null; + LinkedMap in = newLinkedMapWithMapValue((String)source()); + out = in.remove(0); + sink(out); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;ListOrderedMap;true;asList;;;MapKey of Argument[-1];Element of ReturnValue;value" + List out = null; + ListOrderedMap in = newListOrderedMapWithMapKey((String)source()); + out = in.asList(); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;ListOrderedMap;true;get;(int);;MapKey of Argument[-1];ReturnValue;value" + Object out = null; + ListOrderedMap in = newListOrderedMapWithMapKey(source()); + out = in.get(0); + sink(out); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;ListOrderedMap;true;getValue;(int);;MapValue of Argument[-1];ReturnValue;value" + Object out = null; + ListOrderedMap in = newListOrderedMapWithMapValue(source()); + out = in.getValue(0); + sink(out); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;ListOrderedMap;true;keyList;;;MapKey of Argument[-1];Element of ReturnValue;value" + List out = null; + ListOrderedMap in = newListOrderedMapWithMapKey((String)source()); + out = in.keyList(); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;ListOrderedMap;true;listOrderedMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" + ListOrderedMap out = null; + Map in = Map.of((String)source(), null); + out = ListOrderedMap.listOrderedMap(in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;ListOrderedMap;true;listOrderedMap;;;MapValue of Argument[0];MapValue of ReturnValue;value" + ListOrderedMap out = null; + Map in = Map.of(null, (String)source()); + out = ListOrderedMap.listOrderedMap(in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;ListOrderedMap;true;put;;;Argument[1];MapKey of Argument[-1];value" + ListOrderedMap out = null; + Object in = source(); + out.put(null, in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;ListOrderedMap;true;put;;;Argument[1];MapKey of Argument[-1];value" + ListOrderedMap out = null; + Object in = source(); + out.put(0, in, null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;ListOrderedMap;true;put;;;Argument[2];MapValue of Argument[-1];value" + ListOrderedMap out = null; + Object in = source(); + out.put(0, null, in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;ListOrderedMap;true;putAll;;;MapKey of Argument[1];MapKey of Argument[-1];value" + ListOrderedMap out = null; + Map in = Map.of((String)source(), null); + out.putAll(0, in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;ListOrderedMap;true;putAll;;;MapValue of Argument[1];MapValue of Argument[-1];value" + ListOrderedMap out = null; + Map in = Map.of(null, (String)source()); + out.putAll(0, in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;ListOrderedMap;true;remove;(int);;MapValue of Argument[-1];ReturnValue;value" + Object out = null; + ListOrderedMap in = newListOrderedMapWithMapValue((String)source()); + out = in.remove(0); + sink(out); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;ListOrderedMap;true;setValue;;;Argument[1];MapValue of Argument[-1];value" + ListOrderedMap out = null; + Object in = source(); + out.setValue(0, in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;ListOrderedMap;true;valueList;;;MapValue of Argument[-1];Element of ReturnValue;value" + List out = null; + ListOrderedMap in = newListOrderedMapWithMapValue((String)source()); + out = in.valueList(); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;MultiKeyMap;true;get;;;MapValue of Argument[-1];ReturnValue;value" + Object out = null; + MultiKeyMap in = newMKMWithMapValue((String)source()); + out = in.get(null, null, null, null, null); + sink(out); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;MultiKeyMap;true;get;;;MapValue of Argument[-1];ReturnValue;value" + Object out = null; + MultiKeyMap in = newMKMWithMapValue((String)source()); + out = in.get(null, null, null, null); + sink(out); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;MultiKeyMap;true;get;;;MapValue of Argument[-1];ReturnValue;value" + Object out = null; + MultiKeyMap in = newMKMWithMapValue((String)source()); + out = in.get(null, null, null); + sink(out); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;MultiKeyMap;true;get;;;MapValue of Argument[-1];ReturnValue;value" + Object out = null; + MultiKeyMap in = newMKMWithMapValue((String)source()); + out = in.get(null, null); + sink(out); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;MultiKeyMap;true;put;(Object,Object,Object);;Argument[0..1];Element of MapKey of Argument[-1];value" + MultiKeyMap out = null; + String in = (String)source(); + out.put(null, in, null); + sink(getElement(getMapKey(out))); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;MultiKeyMap;true;put;(Object,Object,Object);;Argument[0..1];Element of MapKey of Argument[-1];value" + MultiKeyMap out = null; + String in = (String)source(); + out.put(in, null, null); + sink(getElement(getMapKey(out))); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;MultiKeyMap;true;put;(Object,Object,Object);;Argument[2];MapValue of Argument[-1];value" + MultiKeyMap out = null; + String in = (String)source(); + out.put(null, null, in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;MultiKeyMap;true;put;(Object,Object,Object,Object);;Argument[0..2];Element of MapKey of Argument[-1];value" + MultiKeyMap out = null; + String in = (String)source(); + out.put(null, null, in, null); + sink(getElement(getMapKey(out))); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;MultiKeyMap;true;put;(Object,Object,Object,Object);;Argument[0..2];Element of MapKey of Argument[-1];value" + MultiKeyMap out = null; + String in = (String)source(); + out.put(null, in, null, null); + sink(getElement(getMapKey(out))); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;MultiKeyMap;true;put;(Object,Object,Object,Object);;Argument[0..2];Element of MapKey of Argument[-1];value" + MultiKeyMap out = null; + String in = (String)source(); + out.put(in, null, null, null); + sink(getElement(getMapKey(out))); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;MultiKeyMap;true;put;(Object,Object,Object,Object);;Argument[3];MapValue of Argument[-1];value" + MultiKeyMap out = null; + String in = (String)source(); + out.put(null, null, null, in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;MultiKeyMap;true;put;(Object,Object,Object,Object,Object);;Argument[0..3];Element of MapKey of Argument[-1];value" + MultiKeyMap out = null; + String in = (String)source(); + out.put(null, null, null, in, null); + sink(getElement(getMapKey(out))); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;MultiKeyMap;true;put;(Object,Object,Object,Object,Object);;Argument[0..3];Element of MapKey of Argument[-1];value" + MultiKeyMap out = null; + String in = (String)source(); + out.put(null, null, in, null, null); + sink(getElement(getMapKey(out))); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;MultiKeyMap;true;put;(Object,Object,Object,Object,Object);;Argument[0..3];Element of MapKey of Argument[-1];value" + MultiKeyMap out = null; + String in = (String)source(); + out.put(null, in, null, null, null); + sink(getElement(getMapKey(out))); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;MultiKeyMap;true;put;(Object,Object,Object,Object,Object);;Argument[0..3];Element of MapKey of Argument[-1];value" + MultiKeyMap out = null; + String in = (String)source(); + out.put(in, null, null, null, null); + sink(getElement(getMapKey(out))); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;MultiKeyMap;true;put;(Object,Object,Object,Object,Object);;Argument[4];MapValue of Argument[-1];value" + MultiKeyMap out = null; + String in = (String)source(); + out.put(null, null, null, null, in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;MultiKeyMap;true;put;(Object,Object,Object,Object,Object,Object);;Argument[0..4];Element of MapKey of Argument[-1];value" + MultiKeyMap out = null; + String in = (String)source(); + out.put(null, null, null, null, in, null); + sink(getElement(getMapKey(out))); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;MultiKeyMap;true;put;(Object,Object,Object,Object,Object,Object);;Argument[0..4];Element of MapKey of Argument[-1];value" + MultiKeyMap out = null; + String in = (String)source(); + out.put(null, null, null, in, null, null); + sink(getElement(getMapKey(out))); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;MultiKeyMap;true;put;(Object,Object,Object,Object,Object,Object);;Argument[0..4];Element of MapKey of Argument[-1];value" + MultiKeyMap out = null; + String in = (String)source(); + out.put(null, null, in, null, null, null); + sink(getElement(getMapKey(out))); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;MultiKeyMap;true;put;(Object,Object,Object,Object,Object,Object);;Argument[0..4];Element of MapKey of Argument[-1];value" + MultiKeyMap out = null; + String in = (String)source(); + out.put(null, in, null, null, null, null); + sink(getElement(getMapKey(out))); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;MultiKeyMap;true;put;(Object,Object,Object,Object,Object,Object);;Argument[0..4];Element of MapKey of Argument[-1];value" + MultiKeyMap out = null; + String in = (String)source(); + out.put(in, null, null, null, null, null); + sink(getElement(getMapKey(out))); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;MultiKeyMap;true;put;(Object,Object,Object,Object,Object,Object);;Argument[5];MapValue of Argument[-1];value" + MultiKeyMap out = null; + String in = (String)source(); + out.put(null, null, null, null, null, in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;MultiKeyMap;true;put;;;MapValue of Argument[-1];ReturnValue;value" + Object out = null; + MultiKeyMap in = newMKMWithMapValue((String)source()); + out = in.put(null, null, null, null, null, null); + sink(out); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;MultiKeyMap;true;put;;;MapValue of Argument[-1];ReturnValue;value" + Object out = null; + MultiKeyMap in = newMKMWithMapValue((String)source()); + out = in.put(null, null, null, null, null); + sink(out); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;MultiKeyMap;true;put;;;MapValue of Argument[-1];ReturnValue;value" + Object out = null; + MultiKeyMap in = newMKMWithMapValue((String)source()); + out = in.put(null, null, null, null); + sink(out); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;MultiKeyMap;true;put;;;MapValue of Argument[-1];ReturnValue;value" + Object out = null; + MultiKeyMap in = newMKMWithMapValue((String)source()); + out = in.put(null, null, null); + sink(out); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;MultiKeyMap;true;put;;;MapValue of Argument[-1];ReturnValue;value" + Object out = null; + MultiKeyMap in = newMKMWithMapValue((String)source()); + out = in.put(null, null); + sink(out); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;MultiKeyMap;true;removeMultiKey;;;MapValue of Argument[-1];ReturnValue;value" + Object out = null; + MultiKeyMap in = newMKMWithMapValue((String)source()); + out = in.removeMultiKey(null, null, null, null, null); + sink(out); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;MultiKeyMap;true;removeMultiKey;;;MapValue of Argument[-1];ReturnValue;value" + Object out = null; + MultiKeyMap in = newMKMWithMapValue((String)source()); + out = in.removeMultiKey(null, null, null, null); + sink(out); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;MultiKeyMap;true;removeMultiKey;;;MapValue of Argument[-1];ReturnValue;value" + Object out = null; + MultiKeyMap in = newMKMWithMapValue((String)source()); + out = in.removeMultiKey(null, null, null); + sink(out); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;MultiKeyMap;true;removeMultiKey;;;MapValue of Argument[-1];ReturnValue;value" + Object out = null; + MultiKeyMap in = newMKMWithMapValue((String)source()); + out = in.removeMultiKey(null, null); + sink(out); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;MultiValueMap;true;getCollection;;;Element of MapValue of Argument[-1];Element of ReturnValue;value" + Collection out = null; + MultiValueMap in = newMVMWithMapValue((String)source()); + out = in.getCollection(null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;MultiValueMap;true;iterator;();;Element of MapValue of Argument[-1];MapValue of Element of ReturnValue;value" + Iterator> out = null; + MultiValueMap in = newMVMWithMapValue((String)source()); + out = in.iterator(); + sink(getMapValueFromEntry(getElement(out))); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;;true;iterator;();;MapKey of Argument[-1];MapKey of Element of ReturnValue;value" + Iterator> out = null; + MultiValueMap in = newMVMWithMapKey((String)source()); + out = in.iterator(); + sink(getMapKeyFromEntry(getElement(out))); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;MultiValueMap;true;iterator;(Object);;Element of MapValue of Argument[-1];Element of ReturnValue;value" + Iterator out = null; + MultiValueMap in = newMVMWithMapValue((String)source()); + out = in.iterator(null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;MultiValueMap;true;multiValueMap;;;Element of MapValue of Argument[0];Element of MapValue of ReturnValue;value" + MultiValueMap out = null; + Map in = Map.of(null, newVectorWithElement((String)source())); + out = MultiValueMap.multiValueMap(in, (Factory)null); + sink(getElement((Collection)getMapValue(out))); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;MultiValueMap;true;multiValueMap;;;Element of MapValue of Argument[0];Element of MapValue of ReturnValue;value" + MultiValueMap out = null; + Map in = Map.of(null, newVectorWithElement((String)source())); + out = MultiValueMap.multiValueMap(in, (Class)null); + sink(getElement((Collection)getMapValue(out))); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;MultiValueMap;true;multiValueMap;;;Element of MapValue of Argument[0];Element of MapValue of ReturnValue;value" + MultiValueMap out = null; + Map in = Map.of(null, newVectorWithElement((String)source())); + out = MultiValueMap.multiValueMap(in); + sink(getElement((Collection)getMapValue(out))); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;MultiValueMap;true;multiValueMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" + MultiValueMap out = null; + Map in = Map.of((String)source(), null); + out = MultiValueMap.multiValueMap(in, (Factory)null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;MultiValueMap;true;multiValueMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" + MultiValueMap out = null; + Map in = Map.of((String)source(), null); + out = MultiValueMap.multiValueMap(in, (Class)null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;MultiValueMap;true;multiValueMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" + MultiValueMap out = null; + Map in = Map.of((String)source(), null); + out = MultiValueMap.multiValueMap(in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;MultiValueMap;true;putAll;(Map);;Element of MapValue of Argument[0];Element of MapValue of Argument[-1];value" + MultiValueMap out = null; + Map in = newMVMWithMapValue((String)source()); + out.putAll(in); + sink(getElement((Collection)getMapValue(out))); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;MultiValueMap;true;putAll;(Map);;MapValue of Argument[0];Element of MapValue of Argument[-1];value" + MultiValueMap out = null; + Map in = Map.of(null, source()); + out.putAll(in); + sink(getElement((Collection)getMapValue(out))); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;MultiValueMap;true;putAll;(Object,Collection);;Argument[0];MapKey of Argument[-1];value" + MultiValueMap out = null; + Object in = source(); + out.putAll(in, null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;MultiValueMap;true;putAll;(Object,Collection);;Element of Argument[1];Element of MapValue of Argument[-1];value" + MultiValueMap out = null; + Collection in = newTreeBagWithElement((String)source()); + out.putAll(null, in); + sink(getElement((Collection)getMapValue(out))); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;MultiValueMap;true;values;;;Element of MapValue of Argument[-1];Element of ReturnValue;value" + Collection out = null; + MultiValueMap in = newMVMWithMapValue((String)source()); + out = in.values(); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;PassiveExpiringMap;true;PassiveExpiringMap;(ExpirationPolicy,Map);;MapKey of Argument[1];MapKey of Argument[-1];value" + PassiveExpiringMap out = null; + Map in = Map.of((String)source(), null); + out = new PassiveExpiringMap((PassiveExpiringMap.ExpirationPolicy)null, in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;PassiveExpiringMap;true;PassiveExpiringMap;(ExpirationPolicy,Map);;MapValue of Argument[1];MapValue of Argument[-1];value" + PassiveExpiringMap out = null; + Map in = Map.of(null, (String)source()); + out = new PassiveExpiringMap((PassiveExpiringMap.ExpirationPolicy)null, in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;PassiveExpiringMap;true;PassiveExpiringMap;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value" + PassiveExpiringMap out = null; + Map in = Map.of((String)source(), null); + out = new PassiveExpiringMap(in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;PassiveExpiringMap;true;PassiveExpiringMap;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value" + PassiveExpiringMap out = null; + Map in = Map.of(null, (String)source()); + out = new PassiveExpiringMap(in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;PassiveExpiringMap;true;PassiveExpiringMap;(long,Map);;MapKey of Argument[1];MapKey of Argument[-1];value" + PassiveExpiringMap out = null; + Map in = Map.of((String)source(), null); + out = new PassiveExpiringMap(0L, in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;PassiveExpiringMap;true;PassiveExpiringMap;(long,Map);;MapValue of Argument[1];MapValue of Argument[-1];value" + PassiveExpiringMap out = null; + Map in = Map.of(null, (String)source()); + out = new PassiveExpiringMap(0L, in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;PassiveExpiringMap;true;PassiveExpiringMap;(long,TimeUnit,Map);;MapKey of Argument[2];MapKey of Argument[-1];value" + PassiveExpiringMap out = null; + Map in = Map.of((String)source(), null); + out = new PassiveExpiringMap(0L, null, in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;PassiveExpiringMap;true;PassiveExpiringMap;(long,TimeUnit,Map);;MapValue of Argument[2];MapValue of Argument[-1];value" + PassiveExpiringMap out = null; + Map in = Map.of(null, (String)source()); + out = new PassiveExpiringMap(0L, null, in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;PredicatedMap;true;predicatedMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" + PredicatedMap out = null; + Map in = Map.of((String)source(), null); + out = PredicatedMap.predicatedMap(in, null, null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;PredicatedMap;true;predicatedMap;;;MapValue of Argument[0];MapValue of ReturnValue;value" + PredicatedMap out = null; + Map in = Map.of(null, (String)source()); + out = PredicatedMap.predicatedMap(in, null, null); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;PredicatedSortedMap;true;predicatedSortedMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" + PredicatedSortedMap out = null; + SortedMap in = newTreeMapWithMapKey((String)source()); + out = PredicatedSortedMap.predicatedSortedMap(in, null, null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;PredicatedSortedMap;true;predicatedSortedMap;;;MapValue of Argument[0];MapValue of ReturnValue;value" + PredicatedSortedMap out = null; + SortedMap in = newTreeMapWithMapValue((String)source()); + out = PredicatedSortedMap.predicatedSortedMap(in, null, null); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;SingletonMap;true;SingletonMap;(Entry);;MapKey of Argument[0];MapKey of Argument[-1];value" + SingletonMap out = null; + Map.Entry in = newTMEWithMapKey((String)source()); + out = new SingletonMap(in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;SingletonMap;true;SingletonMap;(Entry);;MapValue of Argument[0];MapValue of Argument[-1];value" + SingletonMap out = null; + Map.Entry in = newTMEWithMapValue((String)source()); + out = new SingletonMap(in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;SingletonMap;true;SingletonMap;(KeyValue);;MapKey of Argument[0];MapKey of Argument[-1];value" + SingletonMap out = null; + KeyValue in = newDKVWithMapKey((String)source()); + out = new SingletonMap(in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;SingletonMap;true;SingletonMap;(KeyValue);;MapValue of Argument[0];MapValue of Argument[-1];value" + SingletonMap out = null; + KeyValue in = newDKVWithMapValue((String)source()); + out = new SingletonMap(in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;SingletonMap;true;SingletonMap;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value" + SingletonMap out = null; + Map in = Map.of((String)source(), null); + out = new SingletonMap(in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;SingletonMap;true;SingletonMap;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value" + SingletonMap out = null; + Map in = Map.of(null, (String)source()); + out = new SingletonMap(in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;SingletonMap;true;SingletonMap;(Object,Object);;Argument[0];MapKey of Argument[-1];value" + SingletonMap out = null; + Object in = source(); + out = new SingletonMap(in, null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;SingletonMap;true;SingletonMap;(Object,Object);;Argument[1];MapValue of Argument[-1];value" + SingletonMap out = null; + Object in = source(); + out = new SingletonMap(null, in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;SingletonMap;true;setValue;;;Argument[0];MapValue of Argument[-1];value" + SingletonMap out = null; + Object in = source(); + out.setValue(in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;TransformedMap;true;transformingMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" + TransformedMap out = null; + Map in = Map.of((String)source(), null); + out = TransformedMap.transformingMap(in, null, null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;TransformedMap;true;transformingMap;;;MapValue of Argument[0];MapValue of ReturnValue;value" + TransformedMap out = null; + Map in = Map.of(null, (String)source()); + out = TransformedMap.transformingMap(in, null, null); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;TransformedSortedMap;true;transformingSortedMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" + TransformedSortedMap out = null; + SortedMap in = newTreeMapWithMapKey((String)source()); + out = TransformedSortedMap.transformingSortedMap(in, null, null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;TransformedSortedMap;true;transformingSortedMap;;;MapValue of Argument[0];MapValue of ReturnValue;value" + TransformedSortedMap out = null; + SortedMap in = newTreeMapWithMapValue((String)source()); + out = TransformedSortedMap.transformingSortedMap(in, null, null); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;UnmodifiableEntrySet;true;unmodifiableEntrySet;;;MapKey of Element of Argument[0];MapKey of Element of ReturnValue;value" + Set> out = null; + Set> in = newListOrderedSetWithElement(newTMEWithMapKey((String)source())); + out = UnmodifiableEntrySet.unmodifiableEntrySet(in); + sink(getMapKeyFromEntry(getElement(out))); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;UnmodifiableEntrySet;true;unmodifiableEntrySet;;;MapValue of Element of Argument[0];MapValue of Element of ReturnValue;value" + Set> out = null; + Set> in = newListOrderedSetWithElement(newTMEWithMapValue((String)source())); + out = UnmodifiableEntrySet.unmodifiableEntrySet(in); + sink(getMapValueFromEntry(getElement(out))); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;UnmodifiableMap;true;unmodifiableMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" + Map out = null; + Map in = Map.of((String)source(), null); + out = UnmodifiableMap.unmodifiableMap(in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;UnmodifiableMap;true;unmodifiableMap;;;MapValue of Argument[0];MapValue of ReturnValue;value" + Map out = null; + Map in = Map.of(null, (String)source()); + out = UnmodifiableMap.unmodifiableMap(in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;UnmodifiableOrderedMap;true;unmodifiableOrderedMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" + OrderedMap out = null; + OrderedMap in = newListOrderedMapWithMapKey((String)source()); + out = UnmodifiableOrderedMap.unmodifiableOrderedMap(in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;UnmodifiableOrderedMap;true;unmodifiableOrderedMap;;;MapValue of Argument[0];MapValue of ReturnValue;value" + OrderedMap out = null; + OrderedMap in = newListOrderedMapWithMapValue((String)source()); + out = UnmodifiableOrderedMap.unmodifiableOrderedMap(in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;UnmodifiableSortedMap;true;unmodifiableSortedMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" + SortedMap out = null; + SortedMap in = newTreeMapWithMapKey((String)source()); + out = UnmodifiableSortedMap.unmodifiableSortedMap(in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.map;UnmodifiableSortedMap;true;unmodifiableSortedMap;;;MapValue of Argument[0];MapValue of ReturnValue;value" + SortedMap out = null; + SortedMap in = newTreeMapWithMapValue((String)source()); + out = UnmodifiableSortedMap.unmodifiableSortedMap(in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.multimap;ArrayListValuedHashMap;true;ArrayListValuedHashMap;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value" + ArrayListValuedHashMap out = null; + Map in = Map.of((String)source(), null); + out = new ArrayListValuedHashMap(in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.multimap;ArrayListValuedHashMap;true;ArrayListValuedHashMap;(Map);;MapValue of Argument[0];Element of MapValue of Argument[-1];value" + ArrayListValuedHashMap out = null; + Map in = Map.of(null, (String)source()); + out = new ArrayListValuedHashMap(in); + sink(getElement(getMapValue(out))); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.multimap;ArrayListValuedHashMap;true;ArrayListValuedHashMap;(MultiValuedMap);;Element of MapValue of Argument[0];Element of MapValue of Argument[-1];value" + ArrayListValuedHashMap out = null; + MultiValuedMap in = newALVHMWithMapValue((String)source()); + out = new ArrayListValuedHashMap(in); + sink(getElement(getMapValue(out))); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.multimap;ArrayListValuedHashMap;true;ArrayListValuedHashMap;(MultiValuedMap);;MapKey of Argument[0];MapKey of Argument[-1];value" + ArrayListValuedHashMap out = null; + MultiValuedMap in = newALVHMWithMapKey((String)source()); + out = new ArrayListValuedHashMap(in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.multimap;HashSetValuedHashMap;true;HashSetValuedHashMap;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value" + HashSetValuedHashMap out = null; + Map in = Map.of((String)source(), null); + out = new HashSetValuedHashMap(in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.multimap;HashSetValuedHashMap;true;HashSetValuedHashMap;(Map);;MapValue of Argument[0];Element of MapValue of Argument[-1];value" + HashSetValuedHashMap out = null; + Map in = Map.of(null, (String)source()); + out = new HashSetValuedHashMap(in); + sink(getElement(getMapValue(out))); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.multimap;HashSetValuedHashMap;true;HashSetValuedHashMap;(MultiValuedMap);;Element of MapValue of Argument[0];Element of MapValue of Argument[-1];value" + HashSetValuedHashMap out = null; + MultiValuedMap in = newALVHMWithMapValue((String)source()); + out = new HashSetValuedHashMap(in); + sink(getElement(getMapValue(out))); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.multimap;HashSetValuedHashMap;true;HashSetValuedHashMap;(MultiValuedMap);;MapKey of Argument[0];MapKey of Argument[-1];value" + HashSetValuedHashMap out = null; + MultiValuedMap in = newALVHMWithMapKey((String)source()); + out = new HashSetValuedHashMap(in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.multimap;TransformedMultiValuedMap;true;transformingMap;;;Element of MapValue of Argument[0];Element of MapValue of ReturnValue;value" + TransformedMultiValuedMap out = null; + MultiValuedMap in = newALVHMWithMapValue((String)source()); + out = TransformedMultiValuedMap.transformingMap(in, null, null); + sink(getElement(getMapValue(out))); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.multimap;TransformedMultiValuedMap;true;transformingMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" + TransformedMultiValuedMap out = null; + MultiValuedMap in = newALVHMWithMapKey((String)source()); + out = TransformedMultiValuedMap.transformingMap(in, null, null); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.multimap;UnmodifiableMultiValuedMap;true;unmodifiableMultiValuedMap;(MultiValuedMap);;Element of MapValue of Argument[0];Element of MapValue of ReturnValue;value" + UnmodifiableMultiValuedMap out = null; + MultiValuedMap in = newALVHMWithMapValue((String)source()); + out = UnmodifiableMultiValuedMap.unmodifiableMultiValuedMap(in); + sink(getElement(getMapValue(out))); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.multimap;UnmodifiableMultiValuedMap;true;unmodifiableMultiValuedMap;(MultiValuedMap);;MapKey of Argument[0];MapKey of ReturnValue;value" + UnmodifiableMultiValuedMap out = null; + MultiValuedMap in = newALVHMWithMapKey((String)source()); + out = UnmodifiableMultiValuedMap.unmodifiableMultiValuedMap(in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.multiset;HashMultiSet;true;HashMultiSet;;;Element of Argument[0];Element of Argument[-1];value" + HashMultiSet out = null; + Collection in = newTreeBagWithElement((String)source()); + out = new HashMultiSet(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.multiset;PredicatedMultiSet;true;predicatedMultiSet;;;Element of Argument[0];Element of ReturnValue;value" + PredicatedMultiSet out = null; + MultiSet in = newHashMultiSetWithElement((String)source()); + out = PredicatedMultiSet.predicatedMultiSet(in, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.multiset;SynchronizedMultiSet;true;synchronizedMultiSet;;;Element of Argument[0];Element of ReturnValue;value" + SynchronizedMultiSet out = null; + MultiSet in = newHashMultiSetWithElement((String)source()); + out = SynchronizedMultiSet.synchronizedMultiSet(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.multiset;UnmodifiableMultiSet;true;unmodifiableMultiSet;;;Element of Argument[0];Element of ReturnValue;value" + MultiSet out = null; + MultiSet in = newHashMultiSetWithElement((String)source()); + out = UnmodifiableMultiSet.unmodifiableMultiSet(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.properties;AbstractPropertiesFactory;true;load;(ClassLoader,String);;Argument[1];ReturnValue;taint" + Properties out = null; + String in = (String)source(); + AbstractPropertiesFactory instance = null; + out = instance.load(null, in); + sink(out); // $ hasTaintFlow + } + { + // "org.apache.commons.collections4.properties;AbstractPropertiesFactory;true;load;(File);;Argument[0];ReturnValue;taint" + Properties out = null; + File in = (File)source(); + AbstractPropertiesFactory instance = null; + out = instance.load(in); + sink(out); // $ hasTaintFlow + } + { + // "org.apache.commons.collections4.properties;AbstractPropertiesFactory;true;load;(InputStream);;Argument[0];ReturnValue;taint" + Properties out = null; + InputStream in = (InputStream)source(); + AbstractPropertiesFactory instance = null; + out = instance.load(in); + sink(out); // $ hasTaintFlow + } + { + // "org.apache.commons.collections4.properties;AbstractPropertiesFactory;true;load;(Path);;Argument[0];ReturnValue;taint" + Properties out = null; + Path in = (Path)source(); + AbstractPropertiesFactory instance = null; + out = instance.load(in); + sink(out); // $ hasTaintFlow + } + { + // "org.apache.commons.collections4.properties;AbstractPropertiesFactory;true;load;(Reader);;Argument[0];ReturnValue;taint" + Properties out = null; + Reader in = (Reader)source(); + AbstractPropertiesFactory instance = null; + out = instance.load(in); + sink(out); // $ hasTaintFlow + } + { + // "org.apache.commons.collections4.properties;AbstractPropertiesFactory;true;load;(String);;Argument[0];ReturnValue;taint" + Properties out = null; + String in = (String)source(); + AbstractPropertiesFactory instance = null; + out = instance.load(in); + sink(out); // $ hasTaintFlow + } + { + // "org.apache.commons.collections4.properties;AbstractPropertiesFactory;true;load;(URI);;Argument[0];ReturnValue;taint" + Properties out = null; + URI in = (URI)source(); + AbstractPropertiesFactory instance = null; + out = instance.load(in); + sink(out); // $ hasTaintFlow + } + { + // "org.apache.commons.collections4.properties;AbstractPropertiesFactory;true;load;(URL);;Argument[0];ReturnValue;taint" + Properties out = null; + URL in = (URL)source(); + AbstractPropertiesFactory instance = null; + out = instance.load(in); + sink(out); // $ hasTaintFlow + } + { + // "org.apache.commons.collections4.queue;CircularFifoQueue;true;CircularFifoQueue;(Collection);;Element of Argument[0];Element of Argument[-1];value" + CircularFifoQueue out = null; + Collection in = newTreeBagWithElement((String)source()); + out = new CircularFifoQueue(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.queue;CircularFifoQueue;true;get;;;Element of Argument[-1];ReturnValue;value" + Object out = null; + CircularFifoQueue in = newCircularFifoQueueWithElement((String)source()); + out = in.get(0); + sink(out); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.queue;PredicatedQueue;true;predicatedQueue;;;Element of Argument[0];Element of ReturnValue;value" + PredicatedQueue out = null; + Queue in = newCircularFifoQueueWithElement((String)source()); + out = PredicatedQueue.predicatedQueue(in, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.queue;SynchronizedQueue;true;synchronizedQueue;;;Element of Argument[0];Element of ReturnValue;value" + SynchronizedQueue out = null; + Queue in = newCircularFifoQueueWithElement((String)source()); + out = SynchronizedQueue.synchronizedQueue(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.queue;TransformedQueue;true;transformingQueue;;;Element of Argument[0];Element of ReturnValue;value" + TransformedQueue out = null; + Queue in = newCircularFifoQueueWithElement((String)source()); + out = TransformedQueue.transformingQueue(in, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.queue;UnmodifiableQueue;true;unmodifiableQueue;;;Element of Argument[0];Element of ReturnValue;value" + Queue out = null; + Queue in = newCircularFifoQueueWithElement((String)source()); + out = UnmodifiableQueue.unmodifiableQueue(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.set;AbstractNavigableSetDecorator;true;AbstractNavigableSetDecorator;;;Element of Argument[0];Element of Argument[-1];value" + AbstractNavigableSetDecorator out = null; + NavigableSet in = newTreeSetWithElement((String)source()); + out = new MyAbstractNavigableSetDecorator(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.set;AbstractSetDecorator;true;AbstractSetDecorator;;;Element of Argument[0];Element of Argument[-1];value" + AbstractSetDecorator out = null; + Set in = newListOrderedSetWithElement((String)source()); + out = new MyAbstractSetDecorator(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.set;AbstractSortedSetDecorator;true;AbstractSortedSetDecorator;;;Element of Argument[0];Element of Argument[-1];value" + AbstractSortedSetDecorator out = null; + Set in = newListOrderedSetWithElement((String)source()); + out = new MyAbstractSortedSetDecorator(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.set;CompositeSet$SetMutator;true;add;;;Argument[2];Element of Argument[0];value" + CompositeSet out = null; + Object in = source(); + CompositeSet.SetMutator instance = null; + instance.add(out, null, in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.set;CompositeSet$SetMutator;true;add;;;Argument[2];Element of Element of Argument[1];value" + List out = null; + Object in = source(); + CompositeSet.SetMutator instance = null; + instance.add(null, out, in); + sink(getElement(getElement(out))); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.set;CompositeSet$SetMutator;true;addAll;;;Element of Argument[2];Element of Argument[0];value" + CompositeSet out = null; + Collection in = newTreeBagWithElement((String)source()); + CompositeSet.SetMutator instance = null; + instance.addAll(out, null, in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.set;CompositeSet$SetMutator;true;addAll;;;Element of Argument[2];Element of Element of Argument[1];value" + List out = null; + Collection in = newTreeBagWithElement((String)source()); + CompositeSet.SetMutator instance = null; + instance.addAll(null, out, in); + sink(getElement(getElement(out))); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.set;CompositeSet;true;CompositeSet;(Set);;Element of Argument[0];Element of Argument[-1];value" + CompositeSet out = null; + Set in = newListOrderedSetWithElement((String)source()); + out = new CompositeSet(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.set;CompositeSet;true;CompositeSet;(Set[]);;Element of ArrayElement of Argument[0];Element of Argument[-1];value" + CompositeSet out = null; + Set[] in = new Set[]{newListOrderedSetWithElement((String)source())}; + out = new CompositeSet(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.set;CompositeSet;true;addComposited;(Set);;Element of Argument[0];Element of Argument[-1];value" + CompositeSet out = null; + Set in = newListOrderedSetWithElement((String)source()); + out.addComposited(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.set;CompositeSet;true;addComposited;(Set,Set);;Element of Argument[0];Element of Argument[-1];value" + CompositeSet out = null; + Set in = newListOrderedSetWithElement((String)source()); + out.addComposited(in, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.set;CompositeSet;true;addComposited;(Set,Set);;Element of Argument[1];Element of Argument[-1];value" + CompositeSet out = null; + Set in = newListOrderedSetWithElement((String)source()); + out.addComposited(null, in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.set;CompositeSet;true;addComposited;(Set[]);;Element of ArrayElement of Argument[0];Element of Argument[-1];value" + CompositeSet out = null; + Set[] in = new Set[]{newListOrderedSetWithElement((String)source())}; + out.addComposited(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.set;CompositeSet;true;getSets;;;Element of Argument[-1];Element of Element of ReturnValue;value" + List> out = null; + CompositeSet in = newCompositeSetWithElement((String)source()); + out = in.getSets(); + sink(getElement(getElement(out))); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.set;CompositeSet;true;toSet;;;Element of Argument[-1];Element of ReturnValue;value" + Set out = null; + CompositeSet in = newCompositeSetWithElement((String)source()); + out = in.toSet(); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.set;ListOrderedSet;true;add;;;Argument[1];Element of Argument[-1];value" + ListOrderedSet out = null; + Object in = source(); + out.add(0, in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.set;ListOrderedSet;true;addAll;;;Element of Argument[1];Element of Argument[-1];value" + ListOrderedSet out = null; + Collection in = List.of((String)source()); + out.addAll(0, in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.set;ListOrderedSet;true;asList;;;Element of Argument[-1];Element of ReturnValue;value" + List out = null; + ListOrderedSet in = newListOrderedSetWithElement((String)source()); + out = in.asList(); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.set;ListOrderedSet;true;get;;;Element of Argument[-1];ReturnValue;value" + Object out = null; + ListOrderedSet in = newListOrderedSetWithElement((String)source()); + out = in.get(0); + sink(out); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.set;ListOrderedSet;true;listOrderedSet;(List);;Element of Argument[0];Element of ReturnValue;value" + ListOrderedSet out = null; + List in = List.of((String)source()); + out = ListOrderedSet.listOrderedSet(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.set;ListOrderedSet;true;listOrderedSet;(Set);;Element of Argument[0];Element of ReturnValue;value" + ListOrderedSet out = null; + Set in = newListOrderedSetWithElement((String)source()); + out = ListOrderedSet.listOrderedSet(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.set;MapBackedSet;true;mapBackedSet;;;MapKey of Argument[0];Element of ReturnValue;value" + MapBackedSet out = null; + Map in = Map.of((String)source(), null); + out = MapBackedSet.mapBackedSet(in, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.set;MapBackedSet;true;mapBackedSet;;;MapKey of Argument[0];Element of ReturnValue;value" + MapBackedSet out = null; + Map in = Map.of((String)source(), null); + out = MapBackedSet.mapBackedSet(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.set;PredicatedNavigableSet;true;predicatedNavigableSet;;;Element of Argument[0];Element of ReturnValue;value" + PredicatedNavigableSet out = null; + NavigableSet in = newTreeSetWithElement((String)source()); + out = PredicatedNavigableSet.predicatedNavigableSet(in, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.set;PredicatedSet;true;predicatedSet;;;Element of Argument[0];Element of ReturnValue;value" + PredicatedSet out = null; + Set in = newListOrderedSetWithElement((String)source()); + out = PredicatedSet.predicatedSet(in, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.set;PredicatedSortedSet;true;predicatedSortedSet;;;Element of Argument[0];Element of ReturnValue;value" + PredicatedSortedSet out = null; + SortedSet in = newTreeSetWithElement((String)source()); + out = PredicatedSortedSet.predicatedSortedSet(in, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.set;TransformedNavigableSet;true;transformingNavigableSet;;;Element of Argument[0];Element of ReturnValue;value" + TransformedNavigableSet out = null; + NavigableSet in = newTreeSetWithElement((String)source()); + out = TransformedNavigableSet.transformingNavigableSet(in, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.set;TransformedSet;true;transformingSet;;;Element of Argument[0];Element of ReturnValue;value" + TransformedSet out = null; + Set in = newListOrderedSetWithElement((String)source()); + out = TransformedSet.transformingSet(in, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.set;TransformedSortedSet;true;transformingSortedSet;;;Element of Argument[0];Element of ReturnValue;value" + TransformedSortedSet out = null; + SortedSet in = newTreeSetWithElement((String)source()); + out = TransformedSortedSet.transformingSortedSet(in, null); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.set;UnmodifiableNavigableSet;true;unmodifiableNavigableSet;;;Element of Argument[0];Element of ReturnValue;value" + NavigableSet out = null; + NavigableSet in = newTreeSetWithElement((String)source()); + out = UnmodifiableNavigableSet.unmodifiableNavigableSet(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.set;UnmodifiableSet;true;unmodifiableSet;;;Element of Argument[0];Element of ReturnValue;value" + Set out = null; + Set in = newListOrderedSetWithElement((String)source()); + out = UnmodifiableSet.unmodifiableSet(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.set;UnmodifiableSortedSet;true;unmodifiableSortedSet;;;Element of Argument[0];Element of ReturnValue;value" + SortedSet out = null; + SortedSet in = newTreeSetWithElement((String)source()); + out = UnmodifiableSortedSet.unmodifiableSortedSet(in); + sink(getElement(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.splitmap;AbstractIterableGetMapDecorator;true;AbstractIterableGetMapDecorator;;;MapKey of Argument[0];MapKey of Argument[-1];value" + AbstractIterableGetMapDecorator out = null; + Map in = Map.of((String)source(), null); + out = new AbstractIterableGetMapDecorator(in); + sink(getMapKeyFromGet(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.splitmap;AbstractIterableGetMapDecorator;true;AbstractIterableGetMapDecorator;;;MapValue of Argument[0];MapValue of Argument[-1];value" + AbstractIterableGetMapDecorator out = null; + Map in = Map.of(null, (String)source()); + out = new AbstractIterableGetMapDecorator(in); + sink(getMapValueFromGet(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.splitmap;TransformedSplitMap;true;transformingMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" + TransformedSplitMap out = null; + Map in = Map.of((String)source(), null); + out = TransformedSplitMap.transformingMap(in, null, null); + sink(getMapKeyFromGet(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.splitmap;TransformedSplitMap;true;transformingMap;;;MapValue of Argument[0];MapValue of ReturnValue;value" + TransformedSplitMap out = null; + Map in = Map.of(null, (String)source()); + out = TransformedSplitMap.transformingMap(in, null, null); + sink(getMapValueFromGet(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.trie;PatriciaTrie;true;PatriciaTrie;;;MapKey of Argument[0];MapKey of Argument[-1];value" + PatriciaTrie out = null; + Map in = Map.of((String)source(), null); + out = new PatriciaTrie(in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.trie;PatriciaTrie;true;PatriciaTrie;;;MapValue of Argument[0];MapValue of Argument[-1];value" + PatriciaTrie out = null; + Map in = Map.of(null, (String)source()); + out = new PatriciaTrie(in); + sink(getMapValue(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.trie;AbstractPatriciaTrie;true;select;;;MapKey of Argument[-1];MapKey of ReturnValue;value" + PatriciaTrie in = newPatriciaTrieWithMapKey((String)source()); + Map.Entry out = null; + out = in.select(null); + sink(getMapKeyFromEntry(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.trie;AbstractPatriciaTrie;true;select;;;MapValue of Argument[-1];MapValue of ReturnValue;value" + PatriciaTrie in = newPatriciaTrieWithMapValue((String)source()); + Map.Entry out = null; + out = in.select(null); + sink(getMapValueFromEntry(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.trie;AbstractPatriciaTrie;true;selectKey;;;MapKey of Argument[-1];ReturnValue;value" + PatriciaTrie in = newPatriciaTrieWithMapKey((String)source()); + String out = null; + out = in.selectKey(null); + sink(out); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.trie;AbstractPatriciaTrie;true;selectValue;;;MapValue of Argument[-1];ReturnValue;value" + PatriciaTrie in = newPatriciaTrieWithMapValue((String)source()); + String out = null; + out = in.selectValue(null); + sink(out); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.trie;UnmodifiableTrie;true;unmodifiableTrie;;;MapKey of Argument[0];MapKey of ReturnValue;value" + Trie out = null; + Trie in = newPatriciaTrieWithMapKey((String)source()); + out = UnmodifiableTrie.unmodifiableTrie(in); + sink(getMapKey(out)); // $ hasValueFlow + } + { + // "org.apache.commons.collections4.trie;UnmodifiableTrie;true;unmodifiableTrie;;;MapValue of Argument[0];MapValue of ReturnValue;value" + Trie out = null; + Trie in = newPatriciaTrieWithMapValue((String)source()); + out = UnmodifiableTrie.unmodifiableTrie(in); + sink(getMapValue(out)); // $ hasValueFlow + } } + class MyAbstractKeyValue extends AbstractKeyValue { + MyAbstractKeyValue(K key, V value) { + super(key, value); + } + + K mySetKey(final K key) { + return super.setKey(key); + } + + V mySetValue(final V value) { + return super.setValue(value); + } + } + + class MyAbstractMapEntry extends AbstractMapEntry { + MyAbstractMapEntry(final K key, final V value) { + super(key, value); + } + @Override + public K getKey() { return null; } + @Override + public V getValue() { return null; } + } + + class MyAbstractMapEntryDecorator extends AbstractMapEntryDecorator { + MyAbstractMapEntryDecorator(final Map.Entry entry) { + super(entry); + } + + Map.Entry myGetMapEntry() { + return super.getMapEntry(); + } + } + + class MySetView extends SetUtils.SetView { + MySetView() { super(); } + + @Override + protected Iterator createIterator() { return null; } + + Iterator myCreateIterator() { return createIterator(); } + } + + class MyAbstractSortedBidiMapDecorator extends AbstractSortedBidiMapDecorator { + public MyAbstractSortedBidiMapDecorator(final SortedBidiMap map) { + super(map); + } + } + + class MyAbstractOrderedMapDecorator extends AbstractOrderedMapDecorator { + public MyAbstractOrderedMapDecorator(final OrderedMap map) { + super(map); + } + } + + class MyAbstractSortedMapDecorator extends AbstractSortedMapDecorator { + public MyAbstractSortedMapDecorator(final SortedMap map) { + super(map); + } + } + + class MyAbstractBagDecorator extends AbstractBagDecorator { + public MyAbstractBagDecorator(final Bag bag) { + super(bag); + } + } + + class MyAbstractMapBag extends AbstractMapBag { + public MyAbstractMapBag(final Map map) { + super(map); + } + public Map myGetMap() { + return super.getMap(); + } + } + + class MyAbstractSortedBagDecorator extends AbstractSortedBagDecorator { + public MyAbstractSortedBagDecorator(final SortedBag bag) { + super(bag); + } + } + + class MyAbstractBidiMapDecorator extends AbstractBidiMapDecorator { + public MyAbstractBidiMapDecorator(final BidiMap map) { + super(map); + } + } + + class MyAbstractDualBidiMap extends AbstractDualBidiMap { + public MyAbstractDualBidiMap(final Map normalMap, final Map reverseMap) { + super(normalMap, reverseMap); + } + public MyAbstractDualBidiMap(final Map normalMap, final Map reverseMap, final BidiMap inverseBidiMap) { + super(normalMap, reverseMap, inverseBidiMap); + } + protected BidiMap createBidiMap(Map normalMap, Map reverseMap, BidiMap inverseMap) { + return null; + } + } + + class MyAbstractOrderedBidiMapDecorator extends AbstractOrderedBidiMapDecorator { + public MyAbstractOrderedBidiMapDecorator(final OrderedBidiMap map) { + super(map); + } + } + + class MyAbstractCollectionDecorator extends AbstractCollectionDecorator { + public MyAbstractCollectionDecorator(final Collection coll) { + super(coll); + } + public Collection myDecorated() { + return super.decorated(); + } + public void mySetCollection(final Collection coll) { + super.setCollection(coll); + } + } + + class MyAbstractIteratorDecorator extends AbstractIteratorDecorator { + public MyAbstractIteratorDecorator(final Iterator iterator) { + super(iterator); + } + } + + class MyAbstractListIteratorDecorator extends AbstractListIteratorDecorator { + public MyAbstractListIteratorDecorator(final ListIterator iterator) { + super(iterator); + } + public ListIterator myGetListIterator() { + return super.getListIterator(); + } + } + + class MyAbstractMapIteratorDecorator extends AbstractMapIteratorDecorator { + public MyAbstractMapIteratorDecorator(final MapIterator iterator) { + super(iterator); + } + public MapIterator myGetMapIterator() { + return super.getMapIterator(); + } + } + + class MyAbstractOrderedMapIteratorDecorator extends AbstractOrderedMapIteratorDecorator { + public MyAbstractOrderedMapIteratorDecorator(final OrderedMapIterator iterator) { + super(iterator); + } + public OrderedMapIterator myGetOrderedMapIterator() { + return super.getOrderedMapIterator(); + } + } + + class MyAbstractUntypedIteratorDecorator extends AbstractUntypedIteratorDecorator { + public MyAbstractUntypedIteratorDecorator(final Iterator iterator) { + super(iterator); + } + public Iterator myGetIterator() { + return super.getIterator(); + } + public O next() { return null; } + } + + class MyAbstractLinkedList extends AbstractLinkedList { + public MyAbstractLinkedList(final Collection coll) { + super(coll); + } + } + + class MyAbstractListDecorator extends AbstractListDecorator { + public MyAbstractListDecorator(final List list) { + super(list); + } + } + + class MyAbstractSerializableListDecorator extends AbstractSerializableListDecorator { + public MyAbstractSerializableListDecorator(final List list) { + super(list); + } + } + + class MyAbstractHashedMap extends AbstractHashedMap { + public MyAbstractHashedMap(final Map map) { + super(map); + } + } + + class MyAbstractLinkedMap extends AbstractLinkedMap { + public MyAbstractLinkedMap(final Map map) { + super(map); + } + } + + class MyAbstractMapDecorator extends AbstractMapDecorator { + public MyAbstractMapDecorator(final Map map) { + super(map); + } + public Map myDecorated() { + return super.decorated(); + } + } + + class MyAbstractNavigableSetDecorator extends AbstractNavigableSetDecorator { + public MyAbstractNavigableSetDecorator(final NavigableSet set) { + super(set); + } + } + + class MyAbstractSetDecorator extends AbstractSetDecorator { + public MyAbstractSetDecorator(final Set set) { + super(set); + } + } + + class MyAbstractSortedSetDecorator extends AbstractSortedSetDecorator { + public MyAbstractSortedSetDecorator(final Set set) { + super(set); + } + } + } \ No newline at end of file diff --git a/java/ql/test/library-tests/frameworks/apache-collections/TestNew.java b/java/ql/test/library-tests/frameworks/apache-collections/TestNew.java deleted file mode 100644 index 3f2bd4dddbc..00000000000 --- a/java/ql/test/library-tests/frameworks/apache-collections/TestNew.java +++ /dev/null @@ -1,3779 +0,0 @@ -package generatedtest; - -import java.io.File; -import java.io.InputStream; -import java.io.Reader; -import java.net.URI; -import java.net.URL; -import java.nio.file.Path; -import java.util.Collection; -import java.util.Comparator; -import java.util.Enumeration; -import java.util.HashSet; -import java.util.Iterator; -import java.util.LinkedList; -import java.util.List; -import java.util.ListIterator; -import java.util.Map; -import java.util.NavigableSet; -import java.util.Properties; -import java.util.Queue; -import java.util.ResourceBundle; -import java.util.Set; -import java.util.SortedMap; -import java.util.SortedSet; -import java.util.StringTokenizer; -import java.util.TreeMap; -import java.util.TreeSet; -import java.util.Vector; -import org.apache.commons.collections4.ArrayStack; -import org.apache.commons.collections4.Bag; -import org.apache.commons.collections4.bag.AbstractBagDecorator; -import org.apache.commons.collections4.bag.AbstractMapBag; -import org.apache.commons.collections4.bag.AbstractSortedBagDecorator; -import org.apache.commons.collections4.bag.CollectionBag; -import org.apache.commons.collections4.bag.CollectionSortedBag; -import org.apache.commons.collections4.bag.HashBag; -import org.apache.commons.collections4.bag.PredicatedBag; -import org.apache.commons.collections4.bag.PredicatedSortedBag; -import org.apache.commons.collections4.bag.SynchronizedBag; -import org.apache.commons.collections4.bag.SynchronizedSortedBag; -import org.apache.commons.collections4.bag.TransformedBag; -import org.apache.commons.collections4.bag.TransformedSortedBag; -import org.apache.commons.collections4.bag.TreeBag; -import org.apache.commons.collections4.bag.UnmodifiableBag; -import org.apache.commons.collections4.bag.UnmodifiableSortedBag; -import org.apache.commons.collections4.BagUtils; -import org.apache.commons.collections4.BidiMap; -import org.apache.commons.collections4.bidimap.AbstractBidiMapDecorator; -import org.apache.commons.collections4.bidimap.AbstractDualBidiMap; -import org.apache.commons.collections4.bidimap.AbstractOrderedBidiMapDecorator; -import org.apache.commons.collections4.bidimap.AbstractSortedBidiMapDecorator; -import org.apache.commons.collections4.bidimap.DualHashBidiMap; -import org.apache.commons.collections4.bidimap.DualLinkedHashBidiMap; -import org.apache.commons.collections4.bidimap.DualTreeBidiMap; -import org.apache.commons.collections4.bidimap.TreeBidiMap; -import org.apache.commons.collections4.bidimap.UnmodifiableBidiMap; -import org.apache.commons.collections4.bidimap.UnmodifiableOrderedBidiMap; -import org.apache.commons.collections4.bidimap.UnmodifiableSortedBidiMap; -import org.apache.commons.collections4.BoundedCollection; -import org.apache.commons.collections4.collection.AbstractCollectionDecorator; -import org.apache.commons.collections4.collection.CompositeCollection; -import org.apache.commons.collections4.collection.IndexedCollection; -import org.apache.commons.collections4.collection.PredicatedCollection; -import org.apache.commons.collections4.collection.SynchronizedCollection; -import org.apache.commons.collections4.collection.TransformedCollection; -import org.apache.commons.collections4.collection.UnmodifiableBoundedCollection; -import org.apache.commons.collections4.collection.UnmodifiableCollection; -import org.apache.commons.collections4.CollectionUtils; -import org.apache.commons.collections4.EnumerationUtils; -import org.apache.commons.collections4.Factory; -import org.apache.commons.collections4.FluentIterable; -import org.apache.commons.collections4.Get; -import org.apache.commons.collections4.IterableGet; -import org.apache.commons.collections4.IterableMap; -import org.apache.commons.collections4.IterableSortedMap; -import org.apache.commons.collections4.IterableUtils; -import org.apache.commons.collections4.iterators.AbstractIteratorDecorator; -import org.apache.commons.collections4.iterators.AbstractListIteratorDecorator; -import org.apache.commons.collections4.iterators.AbstractMapIteratorDecorator; -import org.apache.commons.collections4.iterators.AbstractOrderedMapIteratorDecorator; -import org.apache.commons.collections4.iterators.AbstractUntypedIteratorDecorator; -import org.apache.commons.collections4.iterators.ArrayIterator; -import org.apache.commons.collections4.iterators.ArrayListIterator; -import org.apache.commons.collections4.iterators.BoundedIterator; -import org.apache.commons.collections4.iterators.CollatingIterator; -import org.apache.commons.collections4.iterators.EnumerationIterator; -import org.apache.commons.collections4.iterators.FilterIterator; -import org.apache.commons.collections4.iterators.FilterListIterator; -import org.apache.commons.collections4.iterators.IteratorChain; -import org.apache.commons.collections4.iterators.IteratorEnumeration; -import org.apache.commons.collections4.iterators.IteratorIterable; -import org.apache.commons.collections4.iterators.ListIteratorWrapper; -import org.apache.commons.collections4.iterators.LoopingIterator; -import org.apache.commons.collections4.iterators.LoopingListIterator; -import org.apache.commons.collections4.iterators.ObjectArrayIterator; -import org.apache.commons.collections4.iterators.ObjectArrayListIterator; -import org.apache.commons.collections4.iterators.PeekingIterator; -import org.apache.commons.collections4.iterators.PermutationIterator; -import org.apache.commons.collections4.iterators.PushbackIterator; -import org.apache.commons.collections4.iterators.ReverseListIterator; -import org.apache.commons.collections4.iterators.SingletonIterator; -import org.apache.commons.collections4.iterators.SingletonListIterator; -import org.apache.commons.collections4.iterators.SkippingIterator; -import org.apache.commons.collections4.iterators.UniqueFilterIterator; -import org.apache.commons.collections4.iterators.UnmodifiableIterator; -import org.apache.commons.collections4.iterators.UnmodifiableListIterator; -import org.apache.commons.collections4.iterators.UnmodifiableMapIterator; -import org.apache.commons.collections4.iterators.UnmodifiableOrderedMapIterator; -import org.apache.commons.collections4.iterators.ZippingIterator; -import org.apache.commons.collections4.IteratorUtils; -import org.apache.commons.collections4.KeyValue; -import org.apache.commons.collections4.keyvalue.AbstractKeyValue; -import org.apache.commons.collections4.keyvalue.AbstractMapEntry; -import org.apache.commons.collections4.keyvalue.AbstractMapEntryDecorator; -import org.apache.commons.collections4.keyvalue.DefaultKeyValue; -import org.apache.commons.collections4.keyvalue.DefaultMapEntry; -import org.apache.commons.collections4.keyvalue.MultiKey; -import org.apache.commons.collections4.keyvalue.TiedMapEntry; -import org.apache.commons.collections4.keyvalue.UnmodifiableMapEntry; -import org.apache.commons.collections4.list.AbstractLinkedList; -import org.apache.commons.collections4.list.AbstractListDecorator; -import org.apache.commons.collections4.list.AbstractSerializableListDecorator; -import org.apache.commons.collections4.list.CursorableLinkedList; -import org.apache.commons.collections4.list.FixedSizeList; -import org.apache.commons.collections4.list.GrowthList; -import org.apache.commons.collections4.list.LazyList; -import org.apache.commons.collections4.list.NodeCachingLinkedList; -import org.apache.commons.collections4.list.PredicatedList; -import org.apache.commons.collections4.list.SetUniqueList; -import org.apache.commons.collections4.list.TransformedList; -import org.apache.commons.collections4.list.TreeList; -import org.apache.commons.collections4.list.UnmodifiableList; -import org.apache.commons.collections4.ListUtils; -import org.apache.commons.collections4.ListValuedMap; -import org.apache.commons.collections4.map.AbstractHashedMap; -import org.apache.commons.collections4.map.AbstractLinkedMap; -import org.apache.commons.collections4.map.AbstractIterableMap; -import org.apache.commons.collections4.map.AbstractMapDecorator; -import org.apache.commons.collections4.map.AbstractOrderedMapDecorator; -import org.apache.commons.collections4.map.AbstractSortedMapDecorator; -import org.apache.commons.collections4.map.CaseInsensitiveMap; -import org.apache.commons.collections4.map.CompositeMap; -import org.apache.commons.collections4.map.DefaultedMap; -import org.apache.commons.collections4.map.EntrySetToMapIteratorAdapter; -import org.apache.commons.collections4.map.FixedSizeMap; -import org.apache.commons.collections4.map.FixedSizeSortedMap; -import org.apache.commons.collections4.map.Flat3Map; -import org.apache.commons.collections4.map.HashedMap; -import org.apache.commons.collections4.map.LazyMap; -import org.apache.commons.collections4.map.LazySortedMap; -import org.apache.commons.collections4.map.LinkedMap; -import org.apache.commons.collections4.map.ListOrderedMap; -import org.apache.commons.collections4.map.LRUMap; -import org.apache.commons.collections4.map.MultiKeyMap; -import org.apache.commons.collections4.map.MultiValueMap; -import org.apache.commons.collections4.map.PassiveExpiringMap; -import org.apache.commons.collections4.map.PredicatedMap; -import org.apache.commons.collections4.map.PredicatedSortedMap; -import org.apache.commons.collections4.map.SingletonMap; -import org.apache.commons.collections4.map.TransformedMap; -import org.apache.commons.collections4.map.TransformedSortedMap; -import org.apache.commons.collections4.map.UnmodifiableEntrySet; -import org.apache.commons.collections4.map.UnmodifiableMap; -import org.apache.commons.collections4.map.UnmodifiableOrderedMap; -import org.apache.commons.collections4.map.UnmodifiableSortedMap; -import org.apache.commons.collections4.MapIterator; -import org.apache.commons.collections4.MapUtils; -import org.apache.commons.collections4.MultiMap; -import org.apache.commons.collections4.multimap.ArrayListValuedHashMap; -import org.apache.commons.collections4.multimap.HashSetValuedHashMap; -import org.apache.commons.collections4.multimap.TransformedMultiValuedMap; -import org.apache.commons.collections4.multimap.UnmodifiableMultiValuedMap; -import org.apache.commons.collections4.MultiMapUtils; -import org.apache.commons.collections4.MultiSet; -import org.apache.commons.collections4.multiset.HashMultiSet; -import org.apache.commons.collections4.multiset.HashMultiSet; -import org.apache.commons.collections4.multiset.PredicatedMultiSet; -import org.apache.commons.collections4.multiset.SynchronizedMultiSet; -import org.apache.commons.collections4.multiset.UnmodifiableMultiSet; -import org.apache.commons.collections4.MultiSetUtils; -import org.apache.commons.collections4.MultiValuedMap; -import org.apache.commons.collections4.OrderedBidiMap; -import org.apache.commons.collections4.OrderedIterator; -import org.apache.commons.collections4.OrderedMap; -import org.apache.commons.collections4.OrderedMapIterator; -import org.apache.commons.collections4.Predicate; -import org.apache.commons.collections4.properties.AbstractPropertiesFactory; -import org.apache.commons.collections4.Put; -import org.apache.commons.collections4.queue.CircularFifoQueue; -import org.apache.commons.collections4.queue.PredicatedQueue; -import org.apache.commons.collections4.queue.SynchronizedQueue; -import org.apache.commons.collections4.queue.TransformedQueue; -import org.apache.commons.collections4.queue.UnmodifiableQueue; -import org.apache.commons.collections4.QueueUtils; -import org.apache.commons.collections4.ResettableIterator; -import org.apache.commons.collections4.ResettableListIterator; -import org.apache.commons.collections4.set.AbstractNavigableSetDecorator; -import org.apache.commons.collections4.set.AbstractSetDecorator; -import org.apache.commons.collections4.set.AbstractSortedSetDecorator; -import org.apache.commons.collections4.set.CompositeSet; -import org.apache.commons.collections4.set.ListOrderedSet; -import org.apache.commons.collections4.set.MapBackedSet; -import org.apache.commons.collections4.set.PredicatedNavigableSet; -import org.apache.commons.collections4.set.PredicatedSet; -import org.apache.commons.collections4.set.PredicatedSortedSet; -import org.apache.commons.collections4.set.TransformedNavigableSet; -import org.apache.commons.collections4.set.TransformedSet; -import org.apache.commons.collections4.set.TransformedSortedSet; -import org.apache.commons.collections4.set.UnmodifiableNavigableSet; -import org.apache.commons.collections4.set.UnmodifiableSet; -import org.apache.commons.collections4.set.UnmodifiableSortedSet; -import org.apache.commons.collections4.SetUtils; -import org.apache.commons.collections4.SetValuedMap; -import org.apache.commons.collections4.SortedBag; -import org.apache.commons.collections4.SortedBidiMap; -import org.apache.commons.collections4.splitmap.AbstractIterableGetMapDecorator; -import org.apache.commons.collections4.splitmap.TransformedSplitMap; -import org.apache.commons.collections4.SplitMapUtils; -import org.apache.commons.collections4.Transformer; -import org.apache.commons.collections4.Trie; -import org.apache.commons.collections4.trie.PatriciaTrie; -import org.apache.commons.collections4.trie.UnmodifiableTrie; -import org.apache.commons.collections4.TrieUtils; - -// Test case generated by GenerateFlowTestCase.ql -public class TestNew { - - K getMapKey(Map map) { return map.keySet().iterator().next(); } - T getArrayElement(T[] array) { return array[0]; } - T getElement(Iterable it) { return it.iterator().next(); } - T getElement(Iterator it) { return it.next(); } - V getMapValue(Map map) { return map.get(null); } - - E getElement(Enumeration container) { return container.nextElement(); } - E getElement(MultiSet.Entry container) { return container.getElement(); } - E getElement(MultiKey container) { return container.getKey(0); } - K getMapKey(AbstractKeyValue container) { return container.getKey(); } - K getMapKeyFromEntry(Map.Entry container) { return container.getKey(); } - K getMapKey(AbstractMapEntryDecorator container) { return container.getKey(); } - K getMapKey(MultiValuedMap container) { return container.keySet().iterator().next(); } - K getMapKeyFromGet(Get container) { return container.keySet().iterator().next(); } - K getMapKeyFromPut(Put container) { return getMapKey((Map)container); } - V getMapValue(AbstractKeyValue container) { return container.getValue(); } - V getMapValueFromEntry(Map.Entry container) { return container.getValue(); } - V getMapValue(AbstractMapEntryDecorator container) { return container.getValue(); } - V getMapValue(MapIterator mapIterator) { return mapIterator.getValue(); } - Collection getMapValue(MultiValuedMap container) { return container.get(null); } - V getMapValueFromGet(Get container) { return container.get(null); } - V getMapValueFromPut(Put container) { return getMapValue((Map)container); } - - Object[] newWithArrayElement(Object element) { return new Object[] {element}; } - ArrayStack newArrayStackWithElement(T element) { ArrayStack a = new ArrayStack<>(); a.push(element); return a; } - CircularFifoQueue newCircularFifoQueueWithElement(T element) { CircularFifoQueue x = new CircularFifoQueue<>(); x.add(element); return x; } - CompositeSet newCompositeSetWithElement(T element) { return new CompositeSet(newListOrderedSetWithElement(element)); } - CursorableLinkedList newCursorableLinkedListWithElement(T element) { CursorableLinkedList x = new CursorableLinkedList<>(); x.add(element); return x; } - Enumeration newEnumerationWithElement(T element) { return new IteratorEnumeration(newVectorWithElement(element).iterator()); } - FluentIterable newFluentIterableWithElement(T element) { return FluentIterable.of(element); } - HashMultiSet newHashMultiSetWithElement(T element) { HashMultiSet x = new HashMultiSet<>(); x.add(element); return x; } - ListIterator newListIteratorWithElement(T element) { return newVectorWithElement(element).listIterator(); } - ListOrderedSet newListOrderedSetWithElement(T element) { ListOrderedSet x = new ListOrderedSet<>(); x.add(element); return x; } - MultiKey newMultiKeyWithElement(T element) { return new MultiKey(element, (T)null); } - MultiSet.Entry newMultiSetEntryWithElement(T element) { return getElement(newMultiSetWithElement(element).entrySet()); } - MultiSet newMultiSetWithElement(T element) { HashMultiSet h = new HashMultiSet<>(); h.add(element); return h; } - PredicatedCollection.Builder newPredicatedCollectionBuilderWithElement(T element) { PredicatedCollection.Builder x = PredicatedCollection.notNullBuilder(); x.add(element); return x; } - Queue newQueueWithElement(T element) { LinkedList q = new LinkedList<>(); q.add(element); return q; } - MySetView newSetViewWithElement(T element) { MySetView s = new MySetView<>(); s.add(element); return s; } - TreeBag newTreeBagWithElement(T element) { TreeBag b = new TreeBag<>(); b.add(element); return b; } - TreeSet newTreeSetWithElement(T element) { TreeSet h = new TreeSet<>(); h.add(element); return h; } - Vector newVectorWithElement(T element) { Vector v = new Vector<>(); v.add(element); return v; } - Vector> newVectorWithElement(Iterable element) { Vector> v = new Vector<>(); v.add(element); return v; } - - ArrayListValuedHashMap newALVHMWithMapKey(K key) { ArrayListValuedHashMap m = new ArrayListValuedHashMap<>(); m.put(key,null); return m; } - DefaultKeyValue newDKVWithMapKey(K key) { return new DefaultKeyValue(key,null); } - DualTreeBidiMap newDualTreeBidiMapWithMapKey(K key) { return new DualTreeBidiMap(Map.of(key, null)); } - HashedMap newHashedMapWithMapKey(K key) { HashedMap m = new HashedMap<>(); m.put(key,null); return m; } - LinkedMap newLinkedMapWithMapKey(K key) { return new LinkedMap(Map.of(key, null)); } - ListOrderedMap newListOrderedMapWithMapKey(K key) { return ListOrderedMap.listOrderedMap(Map.of(key, null)); } - MultiKeyMap newMKMWithMapKey(K key) { MultiKeyMap m = new MultiKeyMap<>(); m.put(key,null,null); return m; } - MultiValueMap newMVMWithMapKey(K key) { MultiValueMap m = new MultiValueMap<>(); m.put(key,null); return m; } - MyAbstractMapEntry newMAMEWithMapKey(K key) { return new MyAbstractMapEntry(key,null); } - MyAbstractMapEntryDecorator newMAMEDWithMapKey(K key) { return new MyAbstractMapEntryDecorator(newMAMEWithMapKey(key)); } - MyAbstractKeyValue newMAKVWithMapKey(K key) { return new MyAbstractKeyValue(key,null); } - OrderedMapIterator newOMIWithElement(K key) { LinkedMap m = new LinkedMap<>(); m.put(key,null); return m.mapIterator(); } - ResourceBundle newRBWithMapKey(String key) { return (ResourceBundle)null; } - SortedMap newTreeMapWithMapKey(K key) { SortedMap m = new TreeMap<>(); m.put(key,null); return m; } - TiedMapEntry newTMEWithMapKey(K key) { return new TiedMapEntry(new TreeMap(),key); } - > TreeBidiMap newTreeBidiMapWithMapKey(K key) { TreeBidiMap m = new TreeBidiMap<>(); m.put(key,null); return m; } - PatriciaTrie newPatriciaTrieWithMapKey(String key) { PatriciaTrie m = new PatriciaTrie<>(); m.put(key,null); return m; } - - ArrayListValuedHashMap newALVHMWithMapValue(V value) { ArrayListValuedHashMap m = new ArrayListValuedHashMap<>(); m.put(null,value); return m; } - DefaultKeyValue newDKVWithMapValue(V value) { return new DefaultKeyValue(null,value); } - DualTreeBidiMap newDualTreeBidiMapWithMapValue(V value) { return new DualTreeBidiMap(Map.of(null, value)); } - HashedMap newHashedMapWithMapValue(V value) { HashedMap m = new HashedMap<>(); m.put(null,value); return m; } - HashSetValuedHashMap newHSVHMWithMapValue(V value) { HashSetValuedHashMap m = new HashSetValuedHashMap<>(); m.put(null,value); return m; } - LinkedMap newLinkedMapWithMapValue(V value) { return new LinkedMap(Map.of(null, value)); } - ListOrderedMap newListOrderedMapWithMapValue(V value) { return ListOrderedMap.listOrderedMap(Map.of(null, value)); } - MultiKeyMap newMKMWithMapValue(V value) { MultiKeyMap m = new MultiKeyMap<>(); m.put(null,null,value); return m; } - MultiValueMap newMVMWithMapValue(V value) { MultiValueMap m = new MultiValueMap<>(); m.put(null,value); return m; } - MyAbstractKeyValue newMAKVWithMapValue(V value) { return new MyAbstractKeyValue(null,value); } - MyAbstractMapEntry newMAMEWithMapValue(V value) { return new MyAbstractMapEntry(null,value); } - MyAbstractMapEntryDecorator newMAMEDWithMapValue(V value) { return new MyAbstractMapEntryDecorator(newMAMEWithMapValue(value)); } - OrderedMapIterator newOMIWithMapValue(V value) { LinkedMap m = new LinkedMap<>(); m.put(null,value); return m.mapIterator(); } - ResourceBundle newRBWithMapValue(Object value) { return (ResourceBundle)null; } - SortedMap newTreeMapWithMapValue(V value) { SortedMap m = new TreeMap<>(); m.put(null,value); return m; } - TiedMapEntry newTMEWithMapValue(V value) { return new TiedMapEntry(newTreeMapWithMapValue(value),null); } - > TreeBidiMap newTreeBidiMapWithMapValue(V value) { TreeBidiMap m = new TreeBidiMap<>(); m.put(null,value); return m; } - PatriciaTrie newPatriciaTrieWithMapValue(V value) { PatriciaTrie m = new PatriciaTrie<>(); m.put(null,value); return m; } - UnmodifiableMapEntry newUMEWithMapValue(V value) { return new UnmodifiableMapEntry(null,value); } - - Object source() { return null; } - void sink(Object o) { } - - public void test() throws Exception { - - { - // "org.apache.commons.collections4.bag;AbstractBagDecorator;true;AbstractBagDecorator;;;Element of Argument[0];Element of Argument[-1];value" - AbstractBagDecorator out = null; - Bag in = newTreeBagWithElement((String)source()); - out = new MyAbstractBagDecorator(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.bag;AbstractMapBag;true;AbstractMapBag;;;MapKey of Argument[0];Element of Argument[-1];value" - AbstractMapBag out = null; - Map in = Map.of((String)source(), null); - out = new MyAbstractMapBag(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.bag;AbstractMapBag;true;getMap;;;Element of Argument[-1];MapKey of ReturnValue;value" - Map out = null; - MyAbstractMapBag in = new MyAbstractMapBag(Map.of((String)source(), null)); - out = in.myGetMap(); - sink(getMapKey(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.bag;AbstractSortedBagDecorator;true;AbstractSortedBagDecorator;;;Element of Argument[0];Element of Argument[-1];value" - AbstractSortedBagDecorator out = null; - SortedBag in = newTreeBagWithElement((String)source()); - out = new MyAbstractSortedBagDecorator(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.bag;CollectionBag;true;CollectionBag;;;Element of Argument[0];Element of Argument[-1];value" - CollectionBag out = null; - Bag in = newTreeBagWithElement((String)source()); - out = new CollectionBag(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.bag;CollectionBag;true;collectionBag;;;Element of Argument[0];Element of ReturnValue;value" - Bag out = null; - Bag in = newTreeBagWithElement((String)source()); - out = CollectionBag.collectionBag(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.bag;CollectionSortedBag;true;CollectionSortedBag;;;Element of Argument[0];Element of Argument[-1];value" - CollectionSortedBag out = null; - SortedBag in = newTreeBagWithElement((String)source()); - out = new CollectionSortedBag(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.bag;CollectionSortedBag;true;collectionSortedBag;;;Element of Argument[0];Element of ReturnValue;value" - SortedBag out = null; - SortedBag in = newTreeBagWithElement((String)source()); - out = CollectionSortedBag.collectionSortedBag(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.bag;HashBag;true;HashBag;;;Element of Argument[0];Element of Argument[-1];value" - HashBag out = null; - Collection in = newTreeBagWithElement((String)source()); - out = new HashBag(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.bag;PredicatedBag;true;predicatedBag;;;Element of Argument[0];Element of ReturnValue;value" - PredicatedBag out = null; - Bag in = newTreeBagWithElement((String)source()); - out = PredicatedBag.predicatedBag(in, null); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.bag;PredicatedSortedBag;true;predicatedSortedBag;;;Element of Argument[0];Element of ReturnValue;value" - PredicatedSortedBag out = null; - SortedBag in = newTreeBagWithElement((String)source()); - out = PredicatedSortedBag.predicatedSortedBag(in, null); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.bag;SynchronizedBag;true;synchronizedBag;;;Element of Argument[0];Element of ReturnValue;value" - SynchronizedBag out = null; - Bag in = newTreeBagWithElement((String)source()); - out = SynchronizedBag.synchronizedBag(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.bag;SynchronizedSortedBag;true;synchronizedSortedBag;;;Element of Argument[0];Element of ReturnValue;value" - SynchronizedSortedBag out = null; - SortedBag in = newTreeBagWithElement((String)source()); - out = SynchronizedSortedBag.synchronizedSortedBag(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.bag;TransformedBag;true;transformedBag;;;Element of Argument[0];Element of ReturnValue;value" - Bag out = null; - Bag in = newTreeBagWithElement((String)source()); - out = TransformedBag.transformedBag(in, null); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.bag;TransformedSortedBag;true;transformedSortedBag;;;Element of Argument[0];Element of ReturnValue;value" - TransformedSortedBag out = null; - SortedBag in = newTreeBagWithElement((String)source()); - out = TransformedSortedBag.transformedSortedBag(in, null); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.bag;TreeBag;true;TreeBag;(Collection);;Element of Argument[0];Element of Argument[-1];value" - TreeBag out = null; - Collection in = newTreeBagWithElement((String)source()); - out = new TreeBag(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.bag;UnmodifiableBag;true;unmodifiableBag;;;Element of Argument[0];Element of ReturnValue;value" - Bag out = null; - Bag in = newTreeBagWithElement((String)source()); - out = UnmodifiableBag.unmodifiableBag(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.bag;UnmodifiableSortedBag;true;unmodifiableSortedBag;;;Element of Argument[0];Element of ReturnValue;value" - SortedBag out = null; - SortedBag in = newTreeBagWithElement((String)source()); - out = UnmodifiableSortedBag.unmodifiableSortedBag(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.bidimap;AbstractBidiMapDecorator;true;AbstractBidiMapDecorator;;;MapKey of Argument[0];MapKey of Argument[-1];value" - AbstractBidiMapDecorator out = null; - BidiMap in = newDualTreeBidiMapWithMapKey((String)source()); - out = new MyAbstractBidiMapDecorator(in); - sink(getMapKey(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.bidimap;AbstractBidiMapDecorator;true;AbstractBidiMapDecorator;;;MapValue of Argument[0];MapValue of Argument[-1];value" - AbstractBidiMapDecorator out = null; - BidiMap in = newDualTreeBidiMapWithMapValue((String)source()); - out = new MyAbstractBidiMapDecorator(in); - sink(getMapValue(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.bidimap;AbstractDualBidiMap;true;AbstractDualBidiMap;;;MapKey of Argument[0];MapKey of Argument[-1];value" - AbstractDualBidiMap out = null; - BidiMap in = newDualTreeBidiMapWithMapKey((String)source()); - out = new MyAbstractDualBidiMap(in, null, null); - sink(getMapKey(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.bidimap;AbstractDualBidiMap;true;AbstractDualBidiMap;;;MapKey of Argument[1];MapValue of Argument[-1];value" - AbstractDualBidiMap out = null; - BidiMap in = newDualTreeBidiMapWithMapKey((String)source()); - out = new MyAbstractDualBidiMap(null, in, null); - sink(getMapValue(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.bidimap;AbstractDualBidiMap;true;AbstractDualBidiMap;;;MapKey of Argument[2];MapValue of Argument[-1];value" - AbstractDualBidiMap out = null; - BidiMap in = newDualTreeBidiMapWithMapKey((String)source()); - out = new MyAbstractDualBidiMap(null, null, in); - sink(getMapValue(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.bidimap;AbstractDualBidiMap;true;AbstractDualBidiMap;;;MapValue of Argument[0];MapValue of Argument[-1];value" - AbstractDualBidiMap out = null; - BidiMap in = newDualTreeBidiMapWithMapValue((String)source()); - out = new MyAbstractDualBidiMap(in, null, null); - sink(getMapValue(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.bidimap;AbstractDualBidiMap;true;AbstractDualBidiMap;;;MapValue of Argument[1];MapKey of Argument[-1];value" - AbstractDualBidiMap out = null; - BidiMap in = newDualTreeBidiMapWithMapValue((String)source()); - out = new MyAbstractDualBidiMap(null, in, null); - sink(getMapKey(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.bidimap;AbstractDualBidiMap;true;AbstractDualBidiMap;;;MapValue of Argument[2];MapKey of Argument[-1];value" - AbstractDualBidiMap out = null; - BidiMap in = newDualTreeBidiMapWithMapValue((String)source()); - out = new MyAbstractDualBidiMap(null, null, in); - sink(getMapKey(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.bidimap;AbstractOrderedBidiMapDecorator;true;AbstractOrderedBidiMapDecorator;;;MapKey of Argument[0];MapKey of Argument[-1];value" - AbstractOrderedBidiMapDecorator out = null; - OrderedBidiMap in = newDualTreeBidiMapWithMapKey((String)source()); - out = new MyAbstractOrderedBidiMapDecorator(in); - sink(getMapKey(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.bidimap;AbstractOrderedBidiMapDecorator;true;AbstractOrderedBidiMapDecorator;;;MapValue of Argument[0];MapValue of Argument[-1];value" - AbstractOrderedBidiMapDecorator out = null; - OrderedBidiMap in = newDualTreeBidiMapWithMapValue((String)source()); - out = new MyAbstractOrderedBidiMapDecorator(in); - sink(getMapValue(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.bidimap;AbstractSortedBidiMapDecorator;true;AbstractSortedBidiMapDecorator;;;MapKey of Argument[0];MapKey of Argument[-1];value" - AbstractSortedBidiMapDecorator out = null; - SortedBidiMap in = newDualTreeBidiMapWithMapKey((String)source()); - out = new MyAbstractSortedBidiMapDecorator(in); - sink(getMapKey(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.bidimap;AbstractSortedBidiMapDecorator;true;AbstractSortedBidiMapDecorator;;;MapValue of Argument[0];MapValue of Argument[-1];value" - AbstractSortedBidiMapDecorator out = null; - SortedBidiMap in = newDualTreeBidiMapWithMapValue((String)source()); - out = new MyAbstractSortedBidiMapDecorator(in); - sink(getMapValue(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.bidimap;DualHashBidiMap;true;DualHashBidiMap;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value" - DualHashBidiMap out = null; - Map in = Map.of((String)source(), null); - out = new DualHashBidiMap(in); - sink(getMapKey(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.bidimap;DualHashBidiMap;true;DualHashBidiMap;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value" - DualHashBidiMap out = null; - Map in = Map.of(null, (String)source()); - out = new DualHashBidiMap(in); - sink(getMapValue(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.bidimap;DualLinkedHashBidiMap;true;DualLinkedHashBidiMap;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value" - DualLinkedHashBidiMap out = null; - Map in = Map.of((String)source(), null); - out = new DualLinkedHashBidiMap(in); - sink(getMapKey(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.bidimap;DualLinkedHashBidiMap;true;DualLinkedHashBidiMap;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value" - DualLinkedHashBidiMap out = null; - Map in = Map.of(null, (String)source()); - out = new DualLinkedHashBidiMap(in); - sink(getMapValue(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.bidimap;DualTreeBidiMap;true;DualTreeBidiMap;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value" - DualTreeBidiMap out = null; - Map in = Map.of((String)source(), null); - out = new DualTreeBidiMap(in); - sink(getMapKey(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.bidimap;DualTreeBidiMap;true;DualTreeBidiMap;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value" - DualTreeBidiMap out = null; - Map in = Map.of(null, (String)source()); - out = new DualTreeBidiMap(in); - sink(getMapValue(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.bidimap;DualTreeBidiMap;true;inverseOrderedBidiMap;;;MapKey of Argument[-1];MapValue of ReturnValue;value" - OrderedBidiMap out = null; - DualTreeBidiMap in = newDualTreeBidiMapWithMapKey((String)source()); - out = in.inverseOrderedBidiMap(); - sink(getMapValue(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.bidimap;DualTreeBidiMap;true;inverseOrderedBidiMap;;;MapValue of Argument[-1];MapKey of ReturnValue;value" - OrderedBidiMap out = null; - DualTreeBidiMap in = newDualTreeBidiMapWithMapValue((String)source()); - out = in.inverseOrderedBidiMap(); - sink(getMapKey(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.bidimap;DualTreeBidiMap;true;inverseSortedBidiMap;;;MapKey of Argument[-1];MapValue of ReturnValue;value" - SortedBidiMap out = null; - DualTreeBidiMap in = newDualTreeBidiMapWithMapKey((String)source()); - out = in.inverseSortedBidiMap(); - sink(getMapValue(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.bidimap;DualTreeBidiMap;true;inverseSortedBidiMap;;;MapValue of Argument[-1];MapKey of ReturnValue;value" - SortedBidiMap out = null; - DualTreeBidiMap in = newDualTreeBidiMapWithMapValue((String)source()); - out = in.inverseSortedBidiMap(); - sink(getMapKey(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.bidimap;TreeBidiMap;true;TreeBidiMap;;;MapKey of Argument[0];MapKey of Argument[-1];value" - TreeBidiMap out = null; - Map in = Map.of((String)source(), null); - out = new TreeBidiMap(in); - sink(getMapKey(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.bidimap;TreeBidiMap;true;TreeBidiMap;;;MapValue of Argument[0];MapValue of Argument[-1];value" - TreeBidiMap out = null; - Map in = Map.of(null, (String)source()); - out = new TreeBidiMap(in); - sink(getMapValue(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.bidimap;UnmodifiableBidiMap;true;unmodifiableBidiMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" - BidiMap out = null; - BidiMap in = newDualTreeBidiMapWithMapKey((String)source()); - out = UnmodifiableBidiMap.unmodifiableBidiMap(in); - sink(getMapKey(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.bidimap;UnmodifiableBidiMap;true;unmodifiableBidiMap;;;MapValue of Argument[0];MapValue of ReturnValue;value" - BidiMap out = null; - BidiMap in = newDualTreeBidiMapWithMapValue((String)source()); - out = UnmodifiableBidiMap.unmodifiableBidiMap(in); - sink(getMapValue(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.bidimap;UnmodifiableOrderedBidiMap;true;inverseOrderedBidiMap;;;MapKey of Argument[-1];MapValue of ReturnValue;value" - OrderedBidiMap out = null; - UnmodifiableOrderedBidiMap in = (UnmodifiableOrderedBidiMap)UnmodifiableOrderedBidiMap.unmodifiableOrderedBidiMap(newDualTreeBidiMapWithMapKey((String)source())); - out = in.inverseOrderedBidiMap(); - sink(getMapValue(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.bidimap;UnmodifiableOrderedBidiMap;true;inverseOrderedBidiMap;;;MapValue of Argument[-1];MapKey of ReturnValue;value" - OrderedBidiMap out = null; - UnmodifiableOrderedBidiMap in = (UnmodifiableOrderedBidiMap)UnmodifiableOrderedBidiMap.unmodifiableOrderedBidiMap(newDualTreeBidiMapWithMapValue((String)source())); - out = in.inverseOrderedBidiMap(); - sink(getMapKey(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.bidimap;UnmodifiableOrderedBidiMap;true;unmodifiableOrderedBidiMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" - OrderedBidiMap out = null; - OrderedBidiMap in = newDualTreeBidiMapWithMapKey((String)source()); - out = UnmodifiableOrderedBidiMap.unmodifiableOrderedBidiMap(in); - sink(getMapKey(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.bidimap;UnmodifiableOrderedBidiMap;true;unmodifiableOrderedBidiMap;;;MapValue of Argument[0];MapValue of ReturnValue;value" - OrderedBidiMap out = null; - OrderedBidiMap in = newDualTreeBidiMapWithMapValue((String)source()); - out = UnmodifiableOrderedBidiMap.unmodifiableOrderedBidiMap(in); - sink(getMapValue(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.bidimap;UnmodifiableSortedBidiMap;true;unmodifiableSortedBidiMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" - SortedBidiMap out = null; - SortedBidiMap in = newDualTreeBidiMapWithMapKey((String)source()); - out = UnmodifiableSortedBidiMap.unmodifiableSortedBidiMap(in); - sink(getMapKey(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.bidimap;UnmodifiableSortedBidiMap;true;unmodifiableSortedBidiMap;;;MapValue of Argument[0];MapValue of ReturnValue;value" - SortedBidiMap out = null; - SortedBidiMap in = newDualTreeBidiMapWithMapValue((String)source()); - out = UnmodifiableSortedBidiMap.unmodifiableSortedBidiMap(in); - sink(getMapValue(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.collection;AbstractCollectionDecorator;true;AbstractCollectionDecorator;;;Element of Argument[0];Element of Argument[-1];value" - AbstractCollectionDecorator out = null; - Collection in = newTreeBagWithElement((String)source()); - out = new MyAbstractCollectionDecorator(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.collection;AbstractCollectionDecorator;true;decorated;;;Element of Argument[-1];Element of ReturnValue;value" - Collection out = null; - MyAbstractCollectionDecorator in = new MyAbstractCollectionDecorator(newTreeBagWithElement((String)source())); - out = in.myDecorated(); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.collection;AbstractCollectionDecorator;true;setCollection;;;Element of Argument[0];Element of Argument[-1];value" - MyAbstractCollectionDecorator out = null; - Collection in = newTreeBagWithElement((String)source()); - out.mySetCollection(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.collection;CompositeCollection$CollectionMutator;true;add;;;Argument[2];Element of Argument[0];value" - CompositeCollection out = null; - Object in = source(); - CompositeCollection.CollectionMutator instance = null; - instance.add(out, null, in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.collection;CompositeCollection$CollectionMutator;true;add;;;Argument[2];Element of Element of Argument[1];value" - List out = null; - Object in = source(); - CompositeCollection.CollectionMutator instance = null; - instance.add(null, out, in); - sink(getElement(getElement(out))); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.collection;CompositeCollection$CollectionMutator;true;addAll;;;Element of Argument[2];Element of Argument[0];value" - CompositeCollection out = null; - Collection in = newTreeBagWithElement((String)source()); - CompositeCollection.CollectionMutator instance = null; - instance.addAll(out, null, in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.collection;CompositeCollection$CollectionMutator;true;addAll;;;Element of Argument[2];Element of Element of Argument[1];value" - List out = null; - Collection in = newTreeBagWithElement((String)source()); - CompositeCollection.CollectionMutator instance = null; - instance.addAll(null, out, in); - sink(getElement(getElement(out))); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.collection;CompositeCollection;true;CompositeCollection;(Collection);;Element of Argument[0];Element of Argument[-1];value" - CompositeCollection out = null; - Collection in = newTreeBagWithElement((String)source()); - out = new CompositeCollection(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.collection;CompositeCollection;true;CompositeCollection;(Collection,Collection);;Element of Argument[0];Element of Argument[-1];value" - CompositeCollection out = null; - Collection in = newTreeBagWithElement((String)source()); - out = new CompositeCollection(in, null); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.collection;CompositeCollection;true;CompositeCollection;(Collection,Collection);;Element of Argument[1];Element of Argument[-1];value" - CompositeCollection out = null; - Collection in = newTreeBagWithElement((String)source()); - out = new CompositeCollection(null, in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.collection;CompositeCollection;true;CompositeCollection;(Collection[]);;Element of ArrayElement of Argument[0];Element of Argument[-1];value" - CompositeCollection out = null; - Collection[] in = new Collection[]{newTreeBagWithElement((String)source())}; - out = new CompositeCollection(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.collection;CompositeCollection;true;addComposited;(Collection);;Element of Argument[0];Element of Argument[-1];value" - CompositeCollection out = null; - Collection in = newTreeBagWithElement((String)source()); - out.addComposited(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.collection;CompositeCollection;true;addComposited;(Collection,Collection);;Element of Argument[0];Element of Argument[-1];value" - CompositeCollection out = null; - Collection in = newTreeBagWithElement((String)source()); - out.addComposited(in, null); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.collection;CompositeCollection;true;addComposited;(Collection,Collection);;Element of Argument[1];Element of Argument[-1];value" - CompositeCollection out = null; - Collection in = newTreeBagWithElement((String)source()); - out.addComposited(null, in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.collection;CompositeCollection;true;addComposited;(Collection[]);;Element of ArrayElement of Argument[0];Element of Argument[-1];value" - CompositeCollection out = null; - Collection[] in = new Collection[]{newTreeBagWithElement((String)source())}; - out.addComposited(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.collection;CompositeCollection;true;getCollections;;;Element of Argument[-1];Element of Element of ReturnValue;value" - List out = null; - CompositeCollection in = new CompositeCollection(newTreeBagWithElement((String)source())); - out = in.getCollections(); - sink(getElement(getElement(out))); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.collection;CompositeCollection;true;toCollection;;;Element of Argument[-1];Element of ReturnValue;value" - Collection out = null; - CompositeCollection in = new CompositeCollection(newTreeBagWithElement((String)source())); - out = in.toCollection(); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.collection;IndexedCollection;true;IndexedCollection;;;Element of Argument[0];Element of Argument[-1];value" - IndexedCollection out = null; - Collection in = newTreeBagWithElement((String)source()); - out = new IndexedCollection(in, null, null, false); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.collection;IndexedCollection;true;get;;;Element of Argument[-1];ReturnValue;value" - Object out = null; - IndexedCollection in = new IndexedCollection(newTreeBagWithElement((String)source()), null, null, false); - out = in.get(null); - sink(out); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.collection;IndexedCollection;true;nonUniqueIndexedCollection;;;Element of Argument[0];Element of ReturnValue;value" - IndexedCollection out = null; - Collection in = newTreeBagWithElement((String)source()); - out = IndexedCollection.nonUniqueIndexedCollection(in, null); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.collection;IndexedCollection;true;uniqueIndexedCollection;;;Element of Argument[0];Element of ReturnValue;value" - IndexedCollection out = null; - Collection in = newTreeBagWithElement((String)source()); - out = IndexedCollection.uniqueIndexedCollection(in, null); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.collection;IndexedCollection;true;values;;;Element of Argument[-1];Element of ReturnValue;value" - Collection out = null; - IndexedCollection in = new IndexedCollection(newTreeBagWithElement((String)source()), null, null, false); - out = in.values(null); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.collection;PredicatedCollection$Builder;true;add;;;Argument[0];Element of Argument[-1];value" - PredicatedCollection.Builder out = null; - Object in = (String)source(); - out.add(in); - sink(getElement(out.createPredicatedList())); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.collection;PredicatedCollection$Builder;true;addAll;;;Element of Argument[0];Element of Argument[-1];value" - PredicatedCollection.Builder out = null; - Collection in = List.of((String)source()); - out.addAll(in); - sink(getElement(out.createPredicatedList())); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.collection;PredicatedCollection$Builder;true;createPredicatedBag;;;Element of Argument[-1];Element of ReturnValue;value" - Bag out = null; - PredicatedCollection.Builder in = newPredicatedCollectionBuilderWithElement((String)source()); - out = in.createPredicatedBag(null); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.collection;PredicatedCollection$Builder;true;createPredicatedBag;;;Element of Argument[-1];Element of ReturnValue;value" - Bag out = null; - PredicatedCollection.Builder in = newPredicatedCollectionBuilderWithElement((String)source()); - out = in.createPredicatedBag(); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.collection;PredicatedCollection$Builder;true;createPredicatedBag;;;Element of Argument[0];Element of ReturnValue;value" - Bag out = null; - Bag in = newTreeBagWithElement((String)source()); - PredicatedCollection.Builder instance = null; - out = instance.createPredicatedBag(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.collection;PredicatedCollection$Builder;true;createPredicatedList;;;Element of Argument[-1];Element of ReturnValue;value" - List out = null; - PredicatedCollection.Builder in = newPredicatedCollectionBuilderWithElement((String)source()); - out = in.createPredicatedList(null); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.collection;PredicatedCollection$Builder;true;createPredicatedList;;;Element of Argument[-1];Element of ReturnValue;value" - List out = null; - PredicatedCollection.Builder in = newPredicatedCollectionBuilderWithElement((String)source()); - out = in.createPredicatedList(); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.collection;PredicatedCollection$Builder;true;createPredicatedList;;;Element of Argument[0];Element of ReturnValue;value" - List out = null; - List in = List.of((String)source()); - PredicatedCollection.Builder instance = null; - out = instance.createPredicatedList(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.collection;PredicatedCollection$Builder;true;createPredicatedMultiSet;;;Element of Argument[-1];Element of ReturnValue;value" - MultiSet out = null; - PredicatedCollection.Builder in = newPredicatedCollectionBuilderWithElement((String)source()); - out = in.createPredicatedMultiSet(null); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.collection;PredicatedCollection$Builder;true;createPredicatedMultiSet;;;Element of Argument[-1];Element of ReturnValue;value" - MultiSet out = null; - PredicatedCollection.Builder in = newPredicatedCollectionBuilderWithElement((String)source()); - out = in.createPredicatedMultiSet(); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.collection;PredicatedCollection$Builder;true;createPredicatedMultiSet;;;Element of Argument[0];Element of ReturnValue;value" - MultiSet out = null; - MultiSet in = newHashMultiSetWithElement((String)source()); - PredicatedCollection.Builder instance = null; - out = instance.createPredicatedMultiSet(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.collection;PredicatedCollection$Builder;true;createPredicatedQueue;;;Element of Argument[-1];Element of ReturnValue;value" - Queue out = null; - PredicatedCollection.Builder in = newPredicatedCollectionBuilderWithElement((String)source()); - out = in.createPredicatedQueue(null); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.collection;PredicatedCollection$Builder;true;createPredicatedQueue;;;Element of Argument[-1];Element of ReturnValue;value" - Queue out = null; - PredicatedCollection.Builder in = newPredicatedCollectionBuilderWithElement((String)source()); - out = in.createPredicatedQueue(); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.collection;PredicatedCollection$Builder;true;createPredicatedQueue;;;Element of Argument[0];Element of ReturnValue;value" - Queue out = null; - Queue in = newCircularFifoQueueWithElement((String)source()); - PredicatedCollection.Builder instance = null; - out = instance.createPredicatedQueue(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.collection;PredicatedCollection$Builder;true;createPredicatedSet;;;Element of Argument[-1];Element of ReturnValue;value" - Set out = null; - PredicatedCollection.Builder in = newPredicatedCollectionBuilderWithElement((String)source()); - out = in.createPredicatedSet(null); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.collection;PredicatedCollection$Builder;true;createPredicatedSet;;;Element of Argument[-1];Element of ReturnValue;value" - Set out = null; - PredicatedCollection.Builder in = newPredicatedCollectionBuilderWithElement((String)source()); - out = in.createPredicatedSet(); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.collection;PredicatedCollection$Builder;true;createPredicatedSet;;;Element of Argument[0];Element of ReturnValue;value" - Set out = null; - Set in = newListOrderedSetWithElement((String)source()); - PredicatedCollection.Builder instance = null; - out = instance.createPredicatedSet(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.collection;PredicatedCollection$Builder;true;rejectedElements;;;Element of Argument[-1];Element of ReturnValue;value" - Collection out = null; - PredicatedCollection.Builder in = newPredicatedCollectionBuilderWithElement((String)source()); - out = in.rejectedElements(); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.collection;PredicatedCollection;true;predicatedCollection;;;Element of Argument[0];Element of ReturnValue;value" - PredicatedCollection out = null; - Collection in = newTreeBagWithElement((String)source()); - out = PredicatedCollection.predicatedCollection(in, null); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.collection;SynchronizedCollection;true;synchronizedCollection;;;Element of Argument[0];Element of ReturnValue;value" - SynchronizedCollection out = null; - Collection in = newTreeBagWithElement((String)source()); - out = SynchronizedCollection.synchronizedCollection(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.collection;TransformedCollection;true;transformingCollection;;;Element of Argument[0];Element of ReturnValue;value" - TransformedCollection out = null; - Collection in = newTreeBagWithElement((String)source()); - out = TransformedCollection.transformingCollection(in, null); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.collection;UnmodifiableBoundedCollection;true;unmodifiableBoundedCollection;;;Element of Argument[0];Element of ReturnValue;value" - BoundedCollection out = null; - Collection in = newTreeBagWithElement((String)source()); - out = UnmodifiableBoundedCollection.unmodifiableBoundedCollection(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.collection;UnmodifiableBoundedCollection;true;unmodifiableBoundedCollection;;;Element of Argument[0];Element of ReturnValue;value" - BoundedCollection out = null; - BoundedCollection in = newCircularFifoQueueWithElement((String)source()); - out = UnmodifiableBoundedCollection.unmodifiableBoundedCollection(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.collection;UnmodifiableCollection;true;unmodifiableCollection;;;Element of Argument[0];Element of ReturnValue;value" - Collection out = null; - Collection in = newTreeBagWithElement((String)source()); - out = UnmodifiableCollection.unmodifiableCollection(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.iterators;AbstractIteratorDecorator;true;AbstractIteratorDecorator;;;Element of Argument[0];Element of Argument[-1];value" - AbstractIteratorDecorator out = null; - Iterator in = newListIteratorWithElement((String)source()); - out = new MyAbstractIteratorDecorator(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.iterators;AbstractListIteratorDecorator;true;AbstractListIteratorDecorator;;;Element of Argument[0];Element of Argument[-1];value" - AbstractListIteratorDecorator out = null; - ListIterator in = newListIteratorWithElement((String)source()); - out = new MyAbstractListIteratorDecorator(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.iterators;AbstractListIteratorDecorator;true;getListIterator;;;Element of Argument[-1];Element of ReturnValue;value" - ListIterator out = null; - MyAbstractListIteratorDecorator in = new MyAbstractListIteratorDecorator(newListIteratorWithElement((String)source())); - out = in.myGetListIterator(); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.iterators;AbstractMapIteratorDecorator;true;AbstractMapIteratorDecorator;;;Element of Argument[0];Element of Argument[-1];value" - AbstractMapIteratorDecorator out = null; - MapIterator in = newLinkedMapWithMapKey((String)source()).mapIterator(); - out = new MyAbstractMapIteratorDecorator(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.iterators;AbstractMapIteratorDecorator;true;AbstractMapIteratorDecorator;;;MapValue of Argument[0];MapValue of Argument[-1];value" - AbstractMapIteratorDecorator out = null; - MapIterator in = newLinkedMapWithMapValue((String)source()).mapIterator(); - out = new MyAbstractMapIteratorDecorator(in); - sink(getMapValue(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.iterators;AbstractMapIteratorDecorator;true;getMapIterator;;;Element of Argument[-1];Element of ReturnValue;value" - MapIterator out = null; - MyAbstractMapIteratorDecorator in = new MyAbstractMapIteratorDecorator(newLinkedMapWithMapKey((String)source()).mapIterator()); - out = in.myGetMapIterator(); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.iterators;AbstractMapIteratorDecorator;true;getMapIterator;;;MapValue of Argument[-1];MapValue of ReturnValue;value" - MapIterator out = null; - MyAbstractMapIteratorDecorator in = new MyAbstractMapIteratorDecorator(newLinkedMapWithMapValue((String)source()).mapIterator()); - out = in.myGetMapIterator(); - sink(getMapValue(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.iterators;AbstractOrderedMapIteratorDecorator;true;AbstractOrderedMapIteratorDecorator;;;Element of Argument[0];Element of Argument[-1];value" - AbstractOrderedMapIteratorDecorator out = null; - OrderedMapIterator in = newListOrderedMapWithMapKey((String)source()).mapIterator(); - out = new MyAbstractOrderedMapIteratorDecorator(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.iterators;AbstractOrderedMapIteratorDecorator;true;AbstractOrderedMapIteratorDecorator;;;MapValue of Argument[0];MapValue of Argument[-1];value" - AbstractOrderedMapIteratorDecorator out = null; - OrderedMapIterator in = newListOrderedMapWithMapValue((String)source()).mapIterator(); - out = new MyAbstractOrderedMapIteratorDecorator(in); - sink(getMapValue(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.iterators;AbstractOrderedMapIteratorDecorator;true;getOrderedMapIterator;;;Element of Argument[-1];Element of ReturnValue;value" - OrderedMapIterator out = null; - MyAbstractOrderedMapIteratorDecorator in = new MyAbstractOrderedMapIteratorDecorator(newListOrderedMapWithMapKey((String)source()).mapIterator()); - out = in.myGetOrderedMapIterator(); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.iterators;AbstractOrderedMapIteratorDecorator;true;getOrderedMapIterator;;;MapValue of Argument[-1];MapValue of ReturnValue;value" - OrderedMapIterator out = null; - MyAbstractOrderedMapIteratorDecorator in = new MyAbstractOrderedMapIteratorDecorator(newListOrderedMapWithMapValue((String)source()).mapIterator()); - out = in.myGetOrderedMapIterator(); - sink(getMapValue(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.iterators;AbstractUntypedIteratorDecorator;true;AbstractUntypedIteratorDecorator;;;Element of Argument[0];Element of Argument[-1];value" - AbstractUntypedIteratorDecorator out = null; - Iterator in = newListIteratorWithElement((String)source()); - out = new MyAbstractUntypedIteratorDecorator(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.iterators;AbstractUntypedIteratorDecorator;true;getIterator;;;Element of Argument[-1];Element of ReturnValue;value" - Iterator out = null; - MyAbstractUntypedIteratorDecorator in = new MyAbstractUntypedIteratorDecorator(newListIteratorWithElement((String)source())); - out = in.myGetIterator(); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.iterators;ArrayIterator;true;ArrayIterator;;;ArrayElement of Argument[0];Element of Argument[-1];value" - ArrayIterator out = null; - Object in = (Object)newWithArrayElement((String)source()); - out = new ArrayIterator(in, 0, 0); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.iterators;ArrayIterator;true;ArrayIterator;;;ArrayElement of Argument[0];Element of Argument[-1];value" - ArrayIterator out = null; - Object in = (Object)newWithArrayElement((String)source()); - out = new ArrayIterator(in, 0); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.iterators;ArrayIterator;true;ArrayIterator;;;ArrayElement of Argument[0];Element of Argument[-1];value" - ArrayIterator out = null; - Object in = (Object)newWithArrayElement((String)source()); - out = new ArrayIterator(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.iterators;ArrayIterator;true;getArray;;;Element of Argument[-1];ArrayElement of ReturnValue;value" - String[] out = null; - ArrayIterator in = new ArrayIterator((Object)newWithArrayElement((String)source())); - out = (String[])in.getArray(); - sink(getArrayElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.iterators;ArrayListIterator;true;ArrayListIterator;;;ArrayElement of Argument[0];Element of Argument[-1];value" - ArrayListIterator out = null; - Object in = (Object)newWithArrayElement((String)source()); - out = new ArrayListIterator(in, 0, 0); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.iterators;ArrayListIterator;true;ArrayListIterator;;;ArrayElement of Argument[0];Element of Argument[-1];value" - ArrayListIterator out = null; - Object in = (Object)newWithArrayElement((String)source()); - out = new ArrayListIterator(in, 0); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.iterators;ArrayListIterator;true;ArrayListIterator;;;ArrayElement of Argument[0];Element of Argument[-1];value" - ArrayListIterator out = null; - Object in = (Object)newWithArrayElement((String)source()); - out = new ArrayListIterator(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.iterators;BoundedIterator;true;BoundedIterator;;;Element of Argument[0];Element of Argument[-1];value" - BoundedIterator out = null; - Iterator in = newListIteratorWithElement((String)source()); - out = new BoundedIterator(in, 0L, 0L); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.iterators;CollatingIterator;true;CollatingIterator;(Comparator,Collection);;Element of Element of Argument[1];Element of Argument[-1];value" - CollatingIterator out = null; - Collection in = List.of(newListIteratorWithElement((String)source())); - out = new CollatingIterator((Comparator)null, in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.iterators;CollatingIterator;true;CollatingIterator;(Comparator,Iterator,Iterator);;Element of Argument[1];Element of Argument[-1];value" - CollatingIterator out = null; - Iterator in = newListIteratorWithElement((String)source()); - out = new CollatingIterator(null, in, null); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.iterators;CollatingIterator;true;CollatingIterator;(Comparator,Iterator,Iterator);;Element of Argument[2];Element of Argument[-1];value" - CollatingIterator out = null; - Iterator in = newListIteratorWithElement((String)source()); - out = new CollatingIterator(null, null, in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.iterators;CollatingIterator;true;CollatingIterator;(Comparator,Iterator[]);;Element of ArrayElement of Argument[1];Element of Argument[-1];value" - CollatingIterator out = null; - Iterator[] in = new Iterator[]{newListIteratorWithElement((String)source())}; - out = new CollatingIterator((Comparator)null, in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.iterators;CollatingIterator;true;addIterator;;;Element of Argument[0];Element of Argument[-1];value" - CollatingIterator out = null; - Iterator in = newListIteratorWithElement((String)source()); - out.addIterator(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.iterators;CollatingIterator;true;getIterators;;;Element of Argument[-1];Element of Element of ReturnValue;value" - List out = null; - CollatingIterator in = new CollatingIterator((Comparator)null, List.of(newListIteratorWithElement((String)source()))); - out = in.getIterators(); - sink(getElement(getElement(out))); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.iterators;CollatingIterator;true;setIterator;;;Element of Argument[1];Element of Argument[-1];value" - CollatingIterator out = null; - Iterator in = newListIteratorWithElement((String)source()); - out.setIterator(0, in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.iterators;EnumerationIterator;true;EnumerationIterator;;;Element of Argument[0];Element of Argument[-1];value" - EnumerationIterator out = null; - Enumeration in = newEnumerationWithElement((String)source()); - out = new EnumerationIterator(in, null); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.iterators;EnumerationIterator;true;EnumerationIterator;;;Element of Argument[0];Element of Argument[-1];value" - EnumerationIterator out = null; - Enumeration in = newEnumerationWithElement((String)source()); - out = new EnumerationIterator(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.iterators;EnumerationIterator;true;getEnumeration;;;Element of Argument[-1];Element of ReturnValue;value" - Enumeration out = null; - EnumerationIterator in = new EnumerationIterator(newEnumerationWithElement((String)source())); - out = in.getEnumeration(); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.iterators;EnumerationIterator;true;setEnumeration;;;Element of Argument[0];Element of Argument[-1];value" - EnumerationIterator out = null; - Enumeration in = newEnumerationWithElement((String)source()); - out.setEnumeration(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.iterators;FilterIterator;true;FilterIterator;;;Element of Argument[0];Element of Argument[-1];value" - FilterIterator out = null; - Iterator in = newListIteratorWithElement((String)source()); - out = new FilterIterator(in, null); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.iterators;FilterIterator;true;FilterIterator;;;Element of Argument[0];Element of Argument[-1];value" - FilterIterator out = null; - Iterator in = newListIteratorWithElement((String)source()); - out = new FilterIterator(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.iterators;FilterIterator;true;getIterator;;;Element of Argument[-1];Element of ReturnValue;value" - Iterator out = null; - FilterIterator in = new FilterIterator(newListIteratorWithElement((String)source())); - out = in.getIterator(); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.iterators;FilterIterator;true;setIterator;;;Element of Argument[0];Element of Argument[-1];value" - FilterIterator out = null; - Iterator in = newListIteratorWithElement((String)source()); - out.setIterator(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.iterators;FilterListIterator;true;FilterListIterator;(ListIterator);;Element of Argument[0];Element of Argument[-1];value" - FilterListIterator out = null; - ListIterator in = newListIteratorWithElement((String)source()); - out = new FilterListIterator(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.iterators;FilterListIterator;true;FilterListIterator;(ListIterator,Predicate);;Element of Argument[0];Element of Argument[-1];value" - FilterListIterator out = null; - ListIterator in = newListIteratorWithElement((String)source()); - out = new FilterListIterator(in, null); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.iterators;FilterListIterator;true;getListIterator;;;Element of Argument[-1];Element of ReturnValue;value" - ListIterator out = null; - FilterListIterator in = new FilterListIterator(newListIteratorWithElement((String)source())); - out = in.getListIterator(); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.iterators;FilterListIterator;true;setListIterator;;;Element of Argument[0];Element of Argument[-1];value" - FilterListIterator out = null; - ListIterator in = newListIteratorWithElement((String)source()); - out.setListIterator(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.iterators;IteratorChain;true;IteratorChain;(Collection);;Element of Element of Argument[0];Element of Argument[-1];value" - IteratorChain out = null; - Collection in = newTreeBagWithElement(newListIteratorWithElement((String)source())); - out = new IteratorChain(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.iterators;IteratorChain;true;IteratorChain;(Iterator);;Element of Argument[0];Element of Argument[-1];value" - IteratorChain out = null; - Iterator in = newListIteratorWithElement((String)source()); - out = new IteratorChain(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.iterators;IteratorChain;true;IteratorChain;(Iterator,Iterator);;Element of Argument[0];Element of Argument[-1];value" - IteratorChain out = null; - Iterator in = newListIteratorWithElement((String)source()); - out = new IteratorChain(in, null); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.iterators;IteratorChain;true;IteratorChain;(Iterator,Iterator);;Element of Argument[1];Element of Argument[-1];value" - IteratorChain out = null; - Iterator in = newListIteratorWithElement((String)source()); - out = new IteratorChain(null, in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.iterators;IteratorChain;true;IteratorChain;(Iterator[]);;Element of ArrayElement of Argument[0];Element of Argument[-1];value" - IteratorChain out = null; - Iterator[] in = new Iterator[]{newListIteratorWithElement((String)source())}; - out = new IteratorChain(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.iterators;IteratorChain;true;addIterator;;;Element of Argument[0];Element of Argument[-1];value" - IteratorChain out = null; - Iterator in = newListIteratorWithElement((String)source()); - out.addIterator(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.iterators;IteratorEnumeration;true;IteratorEnumeration;;;Element of Argument[0];Element of Argument[-1];value" - IteratorEnumeration out = null; - Iterator in = newListIteratorWithElement((String)source()); - out = new IteratorEnumeration(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.iterators;IteratorEnumeration;true;getIterator;;;Element of Argument[-1];Element of ReturnValue;value" - Iterator out = null; - IteratorEnumeration in = new IteratorEnumeration(newListIteratorWithElement((String)source())); - out = in.getIterator(); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.iterators;IteratorEnumeration;true;setIterator;;;Element of Argument[0];Element of Argument[-1];value" - IteratorEnumeration out = null; - Iterator in = newListIteratorWithElement((String)source()); - out.setIterator(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.iterators;IteratorIterable;true;IteratorIterable;;;Element of Argument[0];Element of Argument[-1];value" - IteratorIterable out = null; - Iterator in = newListIteratorWithElement((String)source()); - out = new IteratorIterable(in, false); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.iterators;IteratorIterable;true;IteratorIterable;;;Element of Argument[0];Element of Argument[-1];value" - IteratorIterable out = null; - Iterator in = newListIteratorWithElement((String)source()); - out = new IteratorIterable(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.iterators;ListIteratorWrapper;true;ListIteratorWrapper;;;Element of Argument[0];Element of Argument[-1];value" - ListIteratorWrapper out = null; - Iterator in = newListIteratorWithElement((String)source()); - out = new ListIteratorWrapper(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.iterators;LoopingIterator;true;LoopingIterator;;;Element of Argument[0];Element of Argument[-1];value" - LoopingIterator out = null; - Collection in = newTreeBagWithElement((String)source()); - out = new LoopingIterator(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.iterators;LoopingListIterator;true;LoopingListIterator;;;Element of Argument[0];Element of Argument[-1];value" - LoopingListIterator out = null; - List in = List.of((String)source()); - out = new LoopingListIterator(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.iterators;ObjectArrayIterator;true;ObjectArrayIterator;;;ArrayElement of Argument[0];Element of Argument[-1];value" - ObjectArrayIterator out = null; - Object[] in = new Object[]{(String)source()}; - out = new ObjectArrayIterator(in, 0, 0); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.iterators;ObjectArrayIterator;true;ObjectArrayIterator;;;ArrayElement of Argument[0];Element of Argument[-1];value" - ObjectArrayIterator out = null; - Object[] in = new Object[]{(String)source()}; - out = new ObjectArrayIterator(in, 0); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.iterators;ObjectArrayIterator;true;ObjectArrayIterator;;;ArrayElement of Argument[0];Element of Argument[-1];value" - ObjectArrayIterator out = null; - Object[] in = new Object[]{(String)source()}; - out = new ObjectArrayIterator(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.iterators;ObjectArrayIterator;true;getArray;;;Element of Argument[-1];ArrayElement of ReturnValue;value" - Object[] out = null; - ObjectArrayIterator in = new ObjectArrayIterator(new Object[]{(String)source()}); - out = in.getArray(); - sink(getArrayElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.iterators;ObjectArrayListIterator;true;ObjectArrayListIterator;;;ArrayElement of Argument[0];Element of Argument[-1];value" - ObjectArrayListIterator out = null; - Object[] in = new Object[]{(String)source()}; - out = new ObjectArrayListIterator(in, 0, 0); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.iterators;ObjectArrayListIterator;true;ObjectArrayListIterator;;;ArrayElement of Argument[0];Element of Argument[-1];value" - ObjectArrayListIterator out = null; - Object[] in = new Object[]{(String)source()}; - out = new ObjectArrayListIterator(in, 0); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.iterators;ObjectArrayListIterator;true;ObjectArrayListIterator;;;ArrayElement of Argument[0];Element of Argument[-1];value" - ObjectArrayListIterator out = null; - Object[] in = new Object[]{(String)source()}; - out = new ObjectArrayListIterator(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.iterators;PeekingIterator;true;PeekingIterator;;;Element of Argument[0];Element of Argument[-1];value" - PeekingIterator out = null; - Iterator in = newListIteratorWithElement((String)source()); - out = new PeekingIterator(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.iterators;PeekingIterator;true;element;;;Element of Argument[-1];ReturnValue;value" - Object out = null; - PeekingIterator in = new PeekingIterator(newListIteratorWithElement((String)source())); - out = in.element(); - sink(out); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.iterators;PeekingIterator;true;peek;;;Element of Argument[-1];ReturnValue;value" - Object out = null; - PeekingIterator in = new PeekingIterator(newListIteratorWithElement((String)source())); - out = in.peek(); - sink(out); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.iterators;PeekingIterator;true;peekingIterator;;;Element of Argument[0];Element of ReturnValue;value" - PeekingIterator out = null; - Iterator in = newListIteratorWithElement((String)source()); - out = PeekingIterator.peekingIterator(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.iterators;PermutationIterator;true;PermutationIterator;;;Element of Argument[0];Element of Element of Argument[-1];value" - PermutationIterator out = null; - Collection in = List.of((String)source()); - out = new PermutationIterator(in); - sink(getElement(getElement(out))); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.iterators;PushbackIterator;true;PushbackIterator;;;Element of Argument[0];Element of Argument[-1];value" - PushbackIterator out = null; - Iterator in = newListIteratorWithElement((String)source()); - out = new PushbackIterator(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.iterators;PushbackIterator;true;pushback;;;Argument[0];Element of Argument[-1];value" - PushbackIterator out = null; - Object in = source(); - out.pushback(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.iterators;PushbackIterator;true;pushbackIterator;;;Element of Argument[0];Element of ReturnValue;value" - PushbackIterator out = null; - Iterator in = newListIteratorWithElement((String)source()); - out = PushbackIterator.pushbackIterator(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.iterators;ReverseListIterator;true;ReverseListIterator;;;Element of Argument[0];Element of Argument[-1];value" - ReverseListIterator out = null; - List in = List.of((String)source()); - out = new ReverseListIterator(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.iterators;SingletonIterator;true;SingletonIterator;;;Argument[0];Element of Argument[-1];value" - SingletonIterator out = null; - Object in = source(); - out = new SingletonIterator(in, false); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.iterators;SingletonIterator;true;SingletonIterator;;;Argument[0];Element of Argument[-1];value" - SingletonIterator out = null; - Object in = source(); - out = new SingletonIterator(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.iterators;SingletonListIterator;true;SingletonListIterator;;;Argument[0];Element of Argument[-1];value" - SingletonListIterator out = null; - Object in = source(); - out = new SingletonListIterator(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.iterators;SkippingIterator;true;SkippingIterator;;;Element of Argument[0];Element of Argument[-1];value" - SkippingIterator out = null; - Iterator in = newListIteratorWithElement((String)source()); - out = new SkippingIterator(in, 0L); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.iterators;UniqueFilterIterator;true;UniqueFilterIterator;;;Element of Argument[0];Element of Argument[-1];value" - UniqueFilterIterator out = null; - Iterator in = newListIteratorWithElement((String)source()); - out = new UniqueFilterIterator(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.iterators;UnmodifiableIterator;true;unmodifiableIterator;;;Element of Argument[0];Element of ReturnValue;value" - Iterator out = null; - Iterator in = newListIteratorWithElement((String)source()); - out = UnmodifiableIterator.unmodifiableIterator(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.iterators;UnmodifiableListIterator;true;umodifiableListIterator;;;Element of Argument[0];Element of ReturnValue;value" - ListIterator out = null; - ListIterator in = newListIteratorWithElement((String)source()); - out = UnmodifiableListIterator.umodifiableListIterator(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.iterators;UnmodifiableMapIterator;true;unmodifiableMapIterator;;;Element of Argument[0];Element of ReturnValue;value" - MapIterator out = null; - MapIterator in = newLinkedMapWithMapKey((String)source()).mapIterator(); - out = UnmodifiableMapIterator.unmodifiableMapIterator(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.iterators;UnmodifiableMapIterator;true;unmodifiableMapIterator;;;MapValue of Argument[0];MapValue of ReturnValue;value" - MapIterator out = null; - MapIterator in = newLinkedMapWithMapValue((String)source()).mapIterator(); - out = UnmodifiableMapIterator.unmodifiableMapIterator(in); - sink(getMapValue(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.iterators;UnmodifiableOrderedMapIterator;true;unmodifiableOrderedMapIterator;;;Element of Argument[0];Element of ReturnValue;value" - OrderedMapIterator out = null; - OrderedMapIterator in = newListOrderedMapWithMapKey((String)source()).mapIterator(); - out = UnmodifiableOrderedMapIterator.unmodifiableOrderedMapIterator(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.iterators;UnmodifiableOrderedMapIterator;true;unmodifiableOrderedMapIterator;;;MapValue of Argument[0];MapValue of ReturnValue;value" - OrderedMapIterator out = null; - OrderedMapIterator in = newListOrderedMapWithMapValue((String)source()).mapIterator(); - out = UnmodifiableOrderedMapIterator.unmodifiableOrderedMapIterator(in); - sink(getMapValue(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.iterators;ZippingIterator;true;ZippingIterator;(Iterator,Iterator);;Element of Argument[0];Element of Argument[-1];value" - ZippingIterator out = null; - Iterator in = newListIteratorWithElement((String)source()); - out = new ZippingIterator(in, null); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.iterators;ZippingIterator;true;ZippingIterator;(Iterator,Iterator);;Element of Argument[1];Element of Argument[-1];value" - ZippingIterator out = null; - Iterator in = newListIteratorWithElement((String)source()); - out = new ZippingIterator(null, in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.iterators;ZippingIterator;true;ZippingIterator;(Iterator,Iterator,Iterator);;Element of Argument[0];Element of Argument[-1];value" - ZippingIterator out = null; - Iterator in = newListIteratorWithElement((String)source()); - out = new ZippingIterator(in, null, null); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.iterators;ZippingIterator;true;ZippingIterator;(Iterator,Iterator,Iterator);;Element of Argument[1];Element of Argument[-1];value" - ZippingIterator out = null; - Iterator in = newListIteratorWithElement((String)source()); - out = new ZippingIterator(null, in, null); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.iterators;ZippingIterator;true;ZippingIterator;(Iterator,Iterator,Iterator);;Element of Argument[2];Element of Argument[-1];value" - ZippingIterator out = null; - Iterator in = newListIteratorWithElement((String)source()); - out = new ZippingIterator(null, null, in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.iterators;ZippingIterator;true;ZippingIterator;(Iterator[]);;Element of ArrayElement of Argument[0];Element of Argument[-1];value" - ZippingIterator out = null; - Iterator[] in = new Iterator[]{newListIteratorWithElement((String)source())}; - out = new ZippingIterator(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.keyvalue;MultiKey;true;MultiKey;(Object,Object);;Argument[0];Element of Argument[-1];value" - MultiKey out = null; - Object in = source(); - out = new MultiKey(in, (Object)null); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.keyvalue;MultiKey;true;MultiKey;(Object,Object);;Argument[1];Element of Argument[-1];value" - MultiKey out = null; - Object in = source(); - out = new MultiKey((Object)null, in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.keyvalue;MultiKey;true;MultiKey;(Object,Object,Object);;Argument[0];Element of Argument[-1];value" - MultiKey out = null; - Object in = source(); - out = new MultiKey(in, null, null); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.keyvalue;MultiKey;true;MultiKey;(Object,Object,Object);;Argument[1];Element of Argument[-1];value" - MultiKey out = null; - Object in = source(); - out = new MultiKey(null, in, null); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.keyvalue;MultiKey;true;MultiKey;(Object,Object,Object);;Argument[2];Element of Argument[-1];value" - MultiKey out = null; - Object in = source(); - out = new MultiKey(null, null, in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.keyvalue;MultiKey;true;MultiKey;(Object,Object,Object,Object);;Argument[0];Element of Argument[-1];value" - MultiKey out = null; - Object in = source(); - out = new MultiKey(in, null, null, null); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.keyvalue;MultiKey;true;MultiKey;(Object,Object,Object,Object);;Argument[1];Element of Argument[-1];value" - MultiKey out = null; - Object in = source(); - out = new MultiKey(null, in, null, null); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.keyvalue;MultiKey;true;MultiKey;(Object,Object,Object,Object);;Argument[2];Element of Argument[-1];value" - MultiKey out = null; - Object in = source(); - out = new MultiKey(null, null, in, null); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.keyvalue;MultiKey;true;MultiKey;(Object,Object,Object,Object);;Argument[3];Element of Argument[-1];value" - MultiKey out = null; - Object in = source(); - out = new MultiKey(null, null, null, in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.keyvalue;MultiKey;true;MultiKey;(Object,Object,Object,Object,Object);;Argument[0];Element of Argument[-1];value" - MultiKey out = null; - Object in = source(); - out = new MultiKey(in, null, null, null, null); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.keyvalue;MultiKey;true;MultiKey;(Object,Object,Object,Object,Object);;Argument[1];Element of Argument[-1];value" - MultiKey out = null; - Object in = source(); - out = new MultiKey(null, in, null, null, null); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.keyvalue;MultiKey;true;MultiKey;(Object,Object,Object,Object,Object);;Argument[2];Element of Argument[-1];value" - MultiKey out = null; - Object in = source(); - out = new MultiKey(null, null, in, null, null); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.keyvalue;MultiKey;true;MultiKey;(Object,Object,Object,Object,Object);;Argument[3];Element of Argument[-1];value" - MultiKey out = null; - Object in = source(); - out = new MultiKey(null, null, null, in, null); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.keyvalue;MultiKey;true;MultiKey;(Object,Object,Object,Object,Object);;Argument[4];Element of Argument[-1];value" - MultiKey out = null; - Object in = source(); - out = new MultiKey(null, null, null, null, in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.keyvalue;MultiKey;true;MultiKey;(Object[]);;ArrayElement of Argument[0];Element of Argument[-1];value" - MultiKey out = null; - Object[] in = new Object[]{(String)source()}; - out = new MultiKey(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.keyvalue;MultiKey;true;MultiKey;(Object[],boolean);;ArrayElement of Argument[0];Element of Argument[-1];value" - MultiKey out = null; - Object[] in = new Object[]{(String)source()}; - out = new MultiKey(in, false); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.keyvalue;MultiKey;true;getKey;;;Element of Argument[-1];ReturnValue;value" - Object out = null; - MultiKey in = newMultiKeyWithElement((String)source()); - out = in.getKey(0); - sink(out); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.keyvalue;MultiKey;true;getKeys;;;Element of Argument[-1];ArrayElement of ReturnValue;value" - Object[] out = null; - MultiKey in = newMultiKeyWithElement((String)source()); - out = in.getKeys(); - sink(getArrayElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.list;AbstractLinkedList;true;AbstractLinkedList;;;Element of Argument[0];Element of Argument[-1];value" - AbstractLinkedList out = null; - Collection in = newTreeBagWithElement((String)source()); - out = new MyAbstractLinkedList(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.list;AbstractLinkedList;true;addFirst;;;Argument[0];Element of Argument[-1];value" - AbstractLinkedList out = null; - Object in = source(); - out.addFirst(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.list;AbstractLinkedList;true;addLast;;;Argument[0];Element of Argument[-1];value" - AbstractLinkedList out = null; - Object in = source(); - out.addLast(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.list;AbstractLinkedList;true;getFirst;;;Element of Argument[-1];ReturnValue;value" - Object out = null; - AbstractLinkedList in = newCursorableLinkedListWithElement((String)source()); - out = in.getFirst(); - sink(out); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.list;AbstractLinkedList;true;getLast;;;Element of Argument[-1];ReturnValue;value" - Object out = null; - AbstractLinkedList in = newCursorableLinkedListWithElement((String)source()); - out = in.getLast(); - sink(out); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.list;AbstractLinkedList;true;removeFirst;;;Element of Argument[-1];ReturnValue;value" - Object out = null; - AbstractLinkedList in = newCursorableLinkedListWithElement((String)source()); - out = in.removeFirst(); - sink(out); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.list;AbstractLinkedList;true;removeLast;;;Element of Argument[-1];ReturnValue;value" - Object out = null; - AbstractLinkedList in = newCursorableLinkedListWithElement((String)source()); - out = in.removeLast(); - sink(out); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.list;AbstractListDecorator;true;AbstractListDecorator;;;Element of Argument[0];Element of Argument[-1];value" - AbstractListDecorator out = null; - List in = List.of((String)source()); - out = new MyAbstractListDecorator(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.list;AbstractSerializableListDecorator;true;AbstractSerializableListDecorator;;;Element of Argument[0];Element of Argument[-1];value" - AbstractSerializableListDecorator out = null; - List in = List.of((String)source()); - out = new MyAbstractSerializableListDecorator(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.list;CursorableLinkedList;true;CursorableLinkedList;;;Element of Argument[0];Element of Argument[-1];value" - CursorableLinkedList out = null; - Collection in = List.of((String)source()); - out = new CursorableLinkedList(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.list;CursorableLinkedList;true;cursor;;;Element of Argument[-1];Element of ReturnValue;value" - CursorableLinkedList.Cursor out = null; - CursorableLinkedList in = newCursorableLinkedListWithElement((String)source()); - out = in.cursor(0); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.list;CursorableLinkedList;true;cursor;;;Element of Argument[-1];Element of ReturnValue;value" - CursorableLinkedList.Cursor out = null; - CursorableLinkedList in = newCursorableLinkedListWithElement((String)source()); - out = in.cursor(); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.list;FixedSizeList;true;fixedSizeList;;;Element of Argument[0];Element of ReturnValue;value" - FixedSizeList out = null; - List in = List.of((String)source()); - out = FixedSizeList.fixedSizeList(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.list;GrowthList;true;growthList;;;Element of Argument[0];Element of ReturnValue;value" - GrowthList out = null; - List in = List.of((String)source()); - out = GrowthList.growthList(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.list;LazyList;true;lazyList;;;Element of Argument[0];Element of ReturnValue;value" - LazyList out = null; - List in = List.of((String)source()); - out = LazyList.lazyList(in, (Transformer)null); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.list;LazyList;true;lazyList;;;Element of Argument[0];Element of ReturnValue;value" - LazyList out = null; - List in = List.of((String)source()); - out = LazyList.lazyList(in, (Factory)null); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.list;NodeCachingLinkedList;true;NodeCachingLinkedList;(Collection);;Element of Argument[0];Element of Argument[-1];value" - NodeCachingLinkedList out = null; - Collection in = List.of((String)source()); - out = new NodeCachingLinkedList(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.list;PredicatedList;true;predicatedList;;;Element of Argument[0];Element of ReturnValue;value" - PredicatedList out = null; - List in = List.of((String)source()); - out = PredicatedList.predicatedList(in, null); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.list;SetUniqueList;true;asSet;;;Element of Argument[-1];Element of ReturnValue;value" - Set out = null; - SetUniqueList in = SetUniqueList.setUniqueList(List.of((String)source())); - out = in.asSet(); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.list;SetUniqueList;true;setUniqueList;;;Element of Argument[0];Element of ReturnValue;value" - SetUniqueList out = null; - List in = List.of((String)source()); - out = SetUniqueList.setUniqueList(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.list;TransformedList;true;transformingList;;;Element of Argument[0];Element of ReturnValue;value" - TransformedList out = null; - List in = List.of((String)source()); - out = TransformedList.transformingList(in, null); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.list;TreeList;true;TreeList;;;Element of Argument[0];Element of Argument[-1];value" - TreeList out = null; - Collection in = List.of((String)source()); - out = new TreeList(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.list;UnmodifiableList;true;UnmodifiableList;;;Element of Argument[0];Element of Argument[-1];value" - UnmodifiableList out = null; - List in = List.of((String)source()); - out = new UnmodifiableList(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.list;UnmodifiableList;true;unmodifiableList;;;Element of Argument[0];Element of ReturnValue;value" - List out = null; - List in = List.of((String)source()); - out = UnmodifiableList.unmodifiableList(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;AbstractHashedMap;true;AbstractHashedMap;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value" - AbstractHashedMap out = null; - Map in = Map.of((String)source(), null); - out = new MyAbstractHashedMap(in); - sink(getMapKey(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;AbstractHashedMap;true;AbstractHashedMap;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value" - AbstractHashedMap out = null; - Map in = Map.of(null, (String)source()); - out = new MyAbstractHashedMap(in); - sink(getMapValue(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;AbstractLinkedMap;true;AbstractLinkedMap;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value" - AbstractLinkedMap out = null; - Map in = Map.of((String)source(), null); - out = new MyAbstractLinkedMap(in); - sink(getMapKey(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;AbstractLinkedMap;true;AbstractLinkedMap;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value" - AbstractLinkedMap out = null; - Map in = Map.of(null, (String)source()); - out = new MyAbstractLinkedMap(in); - sink(getMapValue(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;AbstractMapDecorator;true;AbstractMapDecorator;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value" - AbstractMapDecorator out = null; - Map in = Map.of((String)source(), null); - out = new MyAbstractMapDecorator(in); - sink(getMapKey(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;AbstractMapDecorator;true;AbstractMapDecorator;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value" - AbstractMapDecorator out = null; - Map in = Map.of(null, (String)source()); - out = new MyAbstractMapDecorator(in); - sink(getMapValue(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;AbstractMapDecorator;true;decorated;;;MapKey of Argument[-1];MapKey of ReturnValue;value" - Map out = null; - MyAbstractMapDecorator in = new MyAbstractMapDecorator(Map.of((String)source(), null)); - out = in.myDecorated(); - sink(getMapKey(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;AbstractMapDecorator;true;decorated;;;MapValue of Argument[-1];MapValue of ReturnValue;value" - Map out = null; - MyAbstractMapDecorator in = new MyAbstractMapDecorator(Map.of(null, (String)source())); - out = in.myDecorated(); - sink(getMapValue(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;AbstractOrderedMapDecorator;true;AbstractOrderedMapDecorator;(OrderedMap);;MapKey of Argument[0];MapKey of Argument[-1];value" - AbstractOrderedMapDecorator out = null; - OrderedMap in = newListOrderedMapWithMapKey((String)source()); - out = new MyAbstractOrderedMapDecorator(in); - sink(getMapKey(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;AbstractOrderedMapDecorator;true;AbstractOrderedMapDecorator;(OrderedMap);;MapValue of Argument[0];MapValue of Argument[-1];value" - AbstractOrderedMapDecorator out = null; - OrderedMap in = newListOrderedMapWithMapValue((String)source()); - out = new MyAbstractOrderedMapDecorator(in); - sink(getMapValue(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;AbstractSortedMapDecorator;true;AbstractSortedMapDecorator;(SortedMap);;MapKey of Argument[0];MapKey of Argument[-1];value" - AbstractSortedMapDecorator out = null; - SortedMap in = newTreeMapWithMapKey((String)source()); - out = new MyAbstractSortedMapDecorator(in); - sink(getMapKey(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;AbstractSortedMapDecorator;true;AbstractSortedMapDecorator;(SortedMap);;MapValue of Argument[0];MapValue of Argument[-1];value" - AbstractSortedMapDecorator out = null; - SortedMap in = newTreeMapWithMapValue((String)source()); - out = new MyAbstractSortedMapDecorator(in); - sink(getMapValue(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;CaseInsensitiveMap;true;CaseInsensitiveMap;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value" - CaseInsensitiveMap out = null; - Map in = Map.of((String)source(), null); - out = new CaseInsensitiveMap(in); - sink(getMapKey(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;CaseInsensitiveMap;true;CaseInsensitiveMap;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value" - CaseInsensitiveMap out = null; - Map in = Map.of(null, (String)source()); - out = new CaseInsensitiveMap(in); - sink(getMapValue(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;CompositeMap;true;CompositeMap;(Map,Map);;MapKey of Argument[0];MapKey of Argument[-1];value" - CompositeMap out = null; - Map in = Map.of((String)source(), null); - out = new CompositeMap(in, (Map)null); - sink(getMapKey(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;CompositeMap;true;CompositeMap;(Map,Map);;MapKey of Argument[1];MapKey of Argument[-1];value" - CompositeMap out = null; - Map in = Map.of((String)source(), null); - out = new CompositeMap((Map)null, in); - sink(getMapKey(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;CompositeMap;true;CompositeMap;(Map,Map);;MapValue of Argument[0];MapValue of Argument[-1];value" - CompositeMap out = null; - Map in = Map.of(null, (String)source()); - out = new CompositeMap(in, (Map)null); - sink(getMapValue(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;CompositeMap;true;CompositeMap;(Map,Map);;MapValue of Argument[1];MapValue of Argument[-1];value" - CompositeMap out = null; - Map in = Map.of(null, (String)source()); - out = new CompositeMap((Map)null, in); - sink(getMapValue(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;CompositeMap;true;CompositeMap;(Map,Map,MapMutator);;MapKey of Argument[0];MapKey of Argument[-1];value" - CompositeMap out = null; - Map in = Map.of((String)source(), null); - out = new CompositeMap(in, null, null); - sink(getMapKey(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;CompositeMap;true;CompositeMap;(Map,Map,MapMutator);;MapKey of Argument[1];MapKey of Argument[-1];value" - CompositeMap out = null; - Map in = Map.of((String)source(), null); - out = new CompositeMap(null, in, null); - sink(getMapKey(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;CompositeMap;true;CompositeMap;(Map,Map,MapMutator);;MapValue of Argument[0];MapValue of Argument[-1];value" - CompositeMap out = null; - Map in = Map.of(null, (String)source()); - out = new CompositeMap(in, null, null); - sink(getMapValue(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;CompositeMap;true;CompositeMap;(Map,Map,MapMutator);;MapValue of Argument[1];MapValue of Argument[-1];value" - CompositeMap out = null; - Map in = Map.of(null, (String)source()); - out = new CompositeMap(null, in, null); - sink(getMapValue(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;CompositeMap;true;CompositeMap;(Map[]);;MapKey of ArrayElement of Argument[0];MapKey of Argument[-1];value" - CompositeMap out = null; - Map[] in = new Map[]{Map.of((String)source(), null)}; - out = new CompositeMap(in); - sink(getMapKey(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;CompositeMap;true;CompositeMap;(Map[]);;MapValue of ArrayElement of Argument[0];MapValue of Argument[-1];value" - CompositeMap out = null; - Map[] in = new Map[]{Map.of(null, (String)source())}; - out = new CompositeMap(in); - sink(getMapValue(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;CompositeMap;true;CompositeMap;(Map[],MapMutator);;MapKey of ArrayElement of Argument[0];MapKey of Argument[-1];value" - CompositeMap out = null; - Map[] in = new Map[]{Map.of((String)source(), null)}; - out = new CompositeMap(in, (CompositeMap.MapMutator)null); - sink(getMapKey(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;CompositeMap;true;CompositeMap;(Map[],MapMutator);;MapValue of ArrayElement of Argument[0];MapValue of Argument[-1];value" - CompositeMap out = null; - Map[] in = new Map[]{Map.of(null, (String)source())}; - out = new CompositeMap(in, (CompositeMap.MapMutator)null); - sink(getMapValue(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;CompositeMap;true;addComposited;;;MapKey of Argument[0];MapKey of Argument[-1];value" - CompositeMap out = null; - Map in = Map.of((String)source(), null); - out.addComposited(in); - sink(getMapKey(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;CompositeMap;true;addComposited;;;MapValue of Argument[0];MapValue of Argument[-1];value" - CompositeMap out = null; - Map in = Map.of(null, (String)source()); - out.addComposited(in); - sink(getMapValue(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;CompositeMap;true;removeComposited;;;Argument[0];ReturnValue;value" - Map out = null; - Map in = (Map)source(); - CompositeMap instance = null; - out = instance.removeComposited(in); - sink(out); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;CompositeMap;true;removeComposited;;;MapKey of Argument[-1];MapKey of ReturnValue;value" - Map out = null; - CompositeMap in = new CompositeMap(Map.of((String)source(), null), null); - out = in.removeComposited(null); - sink(getMapKey(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;CompositeMap;true;removeComposited;;;MapValue of Argument[-1];MapValue of ReturnValue;value" - Map out = null; - CompositeMap in = new CompositeMap(Map.of(null, (String)source()), null); - out = in.removeComposited(null); - sink(getMapValue(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;DefaultedMap;true;DefaultedMap;(Object);;Argument[0];MapValue of Argument[-1];value" - DefaultedMap out = null; - Object in = source(); - out = new DefaultedMap(in); - sink(getMapValue(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;DefaultedMap;true;defaultedMap;(Map,Object);;Argument[1];MapValue of ReturnValue;value" - DefaultedMap out = null; - Object in = source(); - out = DefaultedMap.defaultedMap((Map)null, in); - sink(getMapValue(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;DefaultedMap;true;defaultedMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" - Map out = null; - Map in = Map.of((String)source(), null); - out = DefaultedMap.defaultedMap(in, (Transformer)null); - sink(getMapKey(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;DefaultedMap;true;defaultedMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" - DefaultedMap out = null; - Map in = Map.of((String)source(), null); - out = DefaultedMap.defaultedMap(in, (Object)null); - sink(getMapKey(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;DefaultedMap;true;defaultedMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" - DefaultedMap out = null; - Map in = Map.of((String)source(), null); - out = DefaultedMap.defaultedMap(in, (Factory)null); - sink(getMapKey(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;DefaultedMap;true;defaultedMap;;;MapValue of Argument[0];MapValue of ReturnValue;value" - Map out = null; - Map in = Map.of(null, (String)source()); - out = DefaultedMap.defaultedMap(in, (Transformer)null); - sink(getMapValue(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;DefaultedMap;true;defaultedMap;;;MapValue of Argument[0];MapValue of ReturnValue;value" - DefaultedMap out = null; - Map in = Map.of(null, (String)source()); - out = DefaultedMap.defaultedMap(in, (Object)null); - sink(getMapValue(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;DefaultedMap;true;defaultedMap;;;MapValue of Argument[0];MapValue of ReturnValue;value" - DefaultedMap out = null; - Map in = Map.of(null, (String)source()); - out = DefaultedMap.defaultedMap(in, (Factory)null); - sink(getMapValue(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;EntrySetToMapIteratorAdapter;true;EntrySetToMapIteratorAdapter;;;MapKey of Element of Argument[0];Element of Argument[-1];value" - EntrySetToMapIteratorAdapter out = null; - Set in = newListOrderedSetWithElement(newTMEWithMapKey((String)source())); - out = new EntrySetToMapIteratorAdapter(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;EntrySetToMapIteratorAdapter;true;EntrySetToMapIteratorAdapter;;;MapValue of Element of Argument[0];MapValue of Argument[-1];value" - EntrySetToMapIteratorAdapter out = null; - Set in = newListOrderedSetWithElement(newTMEWithMapValue((String)source())); - out = new EntrySetToMapIteratorAdapter(in); - sink(getMapValue(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;FixedSizeMap;true;fixedSizeMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" - FixedSizeMap out = null; - Map in = Map.of((String)source(), null); - out = FixedSizeMap.fixedSizeMap(in); - sink(getMapKey(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;FixedSizeMap;true;fixedSizeMap;;;MapValue of Argument[0];MapValue of ReturnValue;value" - FixedSizeMap out = null; - Map in = Map.of(null, (String)source()); - out = FixedSizeMap.fixedSizeMap(in); - sink(getMapValue(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;FixedSizeSortedMap;true;fixedSizeSortedMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" - FixedSizeSortedMap out = null; - SortedMap in = newTreeMapWithMapKey((String)source()); - out = FixedSizeSortedMap.fixedSizeSortedMap(in); - sink(getMapKey(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;FixedSizeSortedMap;true;fixedSizeSortedMap;;;MapValue of Argument[0];MapValue of ReturnValue;value" - FixedSizeSortedMap out = null; - SortedMap in = newTreeMapWithMapValue((String)source()); - out = FixedSizeSortedMap.fixedSizeSortedMap(in); - sink(getMapValue(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;Flat3Map;true;Flat3Map;;;MapKey of Argument[0];MapKey of Argument[-1];value" - Flat3Map out = null; - Map in = Map.of((String)source(), null); - out = new Flat3Map(in); - sink(getMapKey(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;Flat3Map;true;Flat3Map;;;MapValue of Argument[0];MapValue of Argument[-1];value" - Flat3Map out = null; - Map in = Map.of(null, (String)source()); - out = new Flat3Map(in); - sink(getMapValue(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;HashedMap;true;HashedMap;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value" - HashedMap out = null; - Map in = Map.of((String)source(), null); - out = new HashedMap(in); - sink(getMapKey(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;HashedMap;true;HashedMap;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value" - HashedMap out = null; - Map in = Map.of(null, (String)source()); - out = new HashedMap(in); - sink(getMapValue(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;LRUMap;true;LRUMap;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value" - LRUMap out = null; - Map in = Map.of((String)source(), null); - out = new LRUMap(in); - sink(getMapKey(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;LRUMap;true;LRUMap;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value" - LRUMap out = null; - Map in = Map.of(null, (String)source()); - out = new LRUMap(in); - sink(getMapValue(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;LRUMap;true;LRUMap;(Map,boolean);;MapKey of Argument[0];MapKey of Argument[-1];value" - LRUMap out = null; - Map in = Map.of((String)source(), null); - out = new LRUMap(in, false); - sink(getMapKey(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;LRUMap;true;LRUMap;(Map,boolean);;MapValue of Argument[0];MapValue of Argument[-1];value" - LRUMap out = null; - Map in = Map.of(null, (String)source()); - out = new LRUMap(in, false); - sink(getMapValue(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;LRUMap;true;get;(Object,boolean);;MapValue of Argument[0];ReturnValue;value" - Object out = null; - Object in = (Object)Map.of(null, (String)source()); - LRUMap instance = null; - out = instance.get(in, false); - sink(out); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;LazyMap;true;lazyMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" - LazyMap out = null; - Map in = Map.of((String)source(), null); - out = LazyMap.lazyMap(in, (Transformer)null); - sink(getMapKey(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;LazyMap;true;lazyMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" - LazyMap out = null; - Map in = Map.of((String)source(), null); - out = LazyMap.lazyMap(in, (Factory)null); - sink(getMapKey(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;LazyMap;true;lazyMap;;;MapValue of Argument[0];MapValue of ReturnValue;value" - LazyMap out = null; - Map in = Map.of(null, (String)source()); - out = LazyMap.lazyMap(in, (Transformer)null); - sink(getMapValue(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;LazyMap;true;lazyMap;;;MapValue of Argument[0];MapValue of ReturnValue;value" - LazyMap out = null; - Map in = Map.of(null, (String)source()); - out = LazyMap.lazyMap(in, (Factory)null); - sink(getMapValue(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;LazySortedMap;true;lazySortedMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" - LazySortedMap out = null; - SortedMap in = newTreeMapWithMapKey((String)source()); - out = LazySortedMap.lazySortedMap(in, (Transformer)null); - sink(getMapKey(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;LazySortedMap;true;lazySortedMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" - LazySortedMap out = null; - SortedMap in = newTreeMapWithMapKey((String)source()); - out = LazySortedMap.lazySortedMap(in, (Factory)null); - sink(getMapKey(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;LazySortedMap;true;lazySortedMap;;;MapValue of Argument[0];MapValue of ReturnValue;value" - LazySortedMap out = null; - SortedMap in = newTreeMapWithMapValue((String)source()); - out = LazySortedMap.lazySortedMap(in, (Transformer)null); - sink(getMapValue(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;LazySortedMap;true;lazySortedMap;;;MapValue of Argument[0];MapValue of ReturnValue;value" - LazySortedMap out = null; - SortedMap in = newTreeMapWithMapValue((String)source()); - out = LazySortedMap.lazySortedMap(in, (Factory)null); - sink(getMapValue(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;LinkedMap;true;LinkedMap;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value" - LinkedMap out = null; - Map in = Map.of((String)source(), null); - out = new LinkedMap(in); - sink(getMapKey(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;LinkedMap;true;LinkedMap;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value" - LinkedMap out = null; - Map in = Map.of(null, (String)source()); - out = new LinkedMap(in); - sink(getMapValue(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;LinkedMap;true;asList;;;MapKey of Argument[-1];Element of ReturnValue;value" - List out = null; - LinkedMap in = newLinkedMapWithMapKey((String)source()); - out = in.asList(); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;LinkedMap;true;get;(int);;MapKey of Argument[-1];ReturnValue;value" - Object out = null; - LinkedMap in = newLinkedMapWithMapKey((String)source()); - out = in.get(0); - sink(out); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;LinkedMap;true;getValue;(int);;MapValue of Argument[-1];ReturnValue;value" - Object out = null; - LinkedMap in = newLinkedMapWithMapValue((String)source()); - out = in.getValue(0); - sink(out); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;LinkedMap;true;remove;(int);;MapValue of Argument[-1];ReturnValue;value" - Object out = null; - LinkedMap in = newLinkedMapWithMapValue((String)source()); - out = in.remove(0); - sink(out); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;ListOrderedMap;true;asList;;;MapKey of Argument[-1];Element of ReturnValue;value" - List out = null; - ListOrderedMap in = newListOrderedMapWithMapKey((String)source()); - out = in.asList(); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;ListOrderedMap;true;get;(int);;MapKey of Argument[-1];ReturnValue;value" - Object out = null; - ListOrderedMap in = newListOrderedMapWithMapKey(source()); - out = in.get(0); - sink(out); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;ListOrderedMap;true;getValue;(int);;MapValue of Argument[-1];ReturnValue;value" - Object out = null; - ListOrderedMap in = newListOrderedMapWithMapValue(source()); - out = in.getValue(0); - sink(out); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;ListOrderedMap;true;keyList;;;MapKey of Argument[-1];Element of ReturnValue;value" - List out = null; - ListOrderedMap in = newListOrderedMapWithMapKey((String)source()); - out = in.keyList(); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;ListOrderedMap;true;listOrderedMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" - ListOrderedMap out = null; - Map in = Map.of((String)source(), null); - out = ListOrderedMap.listOrderedMap(in); - sink(getMapKey(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;ListOrderedMap;true;listOrderedMap;;;MapValue of Argument[0];MapValue of ReturnValue;value" - ListOrderedMap out = null; - Map in = Map.of(null, (String)source()); - out = ListOrderedMap.listOrderedMap(in); - sink(getMapValue(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;ListOrderedMap;true;put;;;Argument[1];MapKey of Argument[-1];value" - ListOrderedMap out = null; - Object in = source(); - out.put(null, in); - sink(getMapKey(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;ListOrderedMap;true;put;;;Argument[1];MapKey of Argument[-1];value" - ListOrderedMap out = null; - Object in = source(); - out.put(0, in, null); - sink(getMapKey(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;ListOrderedMap;true;put;;;Argument[2];MapValue of Argument[-1];value" - ListOrderedMap out = null; - Object in = source(); - out.put(0, null, in); - sink(getMapValue(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;ListOrderedMap;true;putAll;;;MapKey of Argument[1];MapKey of Argument[-1];value" - ListOrderedMap out = null; - Map in = Map.of((String)source(), null); - out.putAll(0, in); - sink(getMapKey(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;ListOrderedMap;true;putAll;;;MapValue of Argument[1];MapValue of Argument[-1];value" - ListOrderedMap out = null; - Map in = Map.of(null, (String)source()); - out.putAll(0, in); - sink(getMapValue(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;ListOrderedMap;true;remove;(int);;MapValue of Argument[-1];ReturnValue;value" - Object out = null; - ListOrderedMap in = newListOrderedMapWithMapValue((String)source()); - out = in.remove(0); - sink(out); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;ListOrderedMap;true;setValue;;;Argument[1];MapValue of Argument[-1];value" - ListOrderedMap out = null; - Object in = source(); - out.setValue(0, in); - sink(getMapValue(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;ListOrderedMap;true;valueList;;;MapValue of Argument[-1];Element of ReturnValue;value" - List out = null; - ListOrderedMap in = newListOrderedMapWithMapValue((String)source()); - out = in.valueList(); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;MultiKeyMap;true;get;;;MapValue of Argument[-1];ReturnValue;value" - Object out = null; - MultiKeyMap in = newMKMWithMapValue((String)source()); - out = in.get(null, null, null, null, null); - sink(out); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;MultiKeyMap;true;get;;;MapValue of Argument[-1];ReturnValue;value" - Object out = null; - MultiKeyMap in = newMKMWithMapValue((String)source()); - out = in.get(null, null, null, null); - sink(out); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;MultiKeyMap;true;get;;;MapValue of Argument[-1];ReturnValue;value" - Object out = null; - MultiKeyMap in = newMKMWithMapValue((String)source()); - out = in.get(null, null, null); - sink(out); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;MultiKeyMap;true;get;;;MapValue of Argument[-1];ReturnValue;value" - Object out = null; - MultiKeyMap in = newMKMWithMapValue((String)source()); - out = in.get(null, null); - sink(out); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;MultiKeyMap;true;put;(Object,Object,Object);;Argument[0..1];Element of MapKey of Argument[-1];value" - MultiKeyMap out = null; - String in = (String)source(); - out.put(null, in, null); - sink(getElement(getMapKey(out))); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;MultiKeyMap;true;put;(Object,Object,Object);;Argument[0..1];Element of MapKey of Argument[-1];value" - MultiKeyMap out = null; - String in = (String)source(); - out.put(in, null, null); - sink(getElement(getMapKey(out))); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;MultiKeyMap;true;put;(Object,Object,Object);;Argument[2];MapValue of Argument[-1];value" - MultiKeyMap out = null; - String in = (String)source(); - out.put(null, null, in); - sink(getMapValue(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;MultiKeyMap;true;put;(Object,Object,Object,Object);;Argument[0..2];Element of MapKey of Argument[-1];value" - MultiKeyMap out = null; - String in = (String)source(); - out.put(null, null, in, null); - sink(getElement(getMapKey(out))); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;MultiKeyMap;true;put;(Object,Object,Object,Object);;Argument[0..2];Element of MapKey of Argument[-1];value" - MultiKeyMap out = null; - String in = (String)source(); - out.put(null, in, null, null); - sink(getElement(getMapKey(out))); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;MultiKeyMap;true;put;(Object,Object,Object,Object);;Argument[0..2];Element of MapKey of Argument[-1];value" - MultiKeyMap out = null; - String in = (String)source(); - out.put(in, null, null, null); - sink(getElement(getMapKey(out))); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;MultiKeyMap;true;put;(Object,Object,Object,Object);;Argument[3];MapValue of Argument[-1];value" - MultiKeyMap out = null; - String in = (String)source(); - out.put(null, null, null, in); - sink(getMapValue(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;MultiKeyMap;true;put;(Object,Object,Object,Object,Object);;Argument[0..3];Element of MapKey of Argument[-1];value" - MultiKeyMap out = null; - String in = (String)source(); - out.put(null, null, null, in, null); - sink(getElement(getMapKey(out))); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;MultiKeyMap;true;put;(Object,Object,Object,Object,Object);;Argument[0..3];Element of MapKey of Argument[-1];value" - MultiKeyMap out = null; - String in = (String)source(); - out.put(null, null, in, null, null); - sink(getElement(getMapKey(out))); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;MultiKeyMap;true;put;(Object,Object,Object,Object,Object);;Argument[0..3];Element of MapKey of Argument[-1];value" - MultiKeyMap out = null; - String in = (String)source(); - out.put(null, in, null, null, null); - sink(getElement(getMapKey(out))); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;MultiKeyMap;true;put;(Object,Object,Object,Object,Object);;Argument[0..3];Element of MapKey of Argument[-1];value" - MultiKeyMap out = null; - String in = (String)source(); - out.put(in, null, null, null, null); - sink(getElement(getMapKey(out))); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;MultiKeyMap;true;put;(Object,Object,Object,Object,Object);;Argument[4];MapValue of Argument[-1];value" - MultiKeyMap out = null; - String in = (String)source(); - out.put(null, null, null, null, in); - sink(getMapValue(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;MultiKeyMap;true;put;(Object,Object,Object,Object,Object,Object);;Argument[0..4];Element of MapKey of Argument[-1];value" - MultiKeyMap out = null; - String in = (String)source(); - out.put(null, null, null, null, in, null); - sink(getElement(getMapKey(out))); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;MultiKeyMap;true;put;(Object,Object,Object,Object,Object,Object);;Argument[0..4];Element of MapKey of Argument[-1];value" - MultiKeyMap out = null; - String in = (String)source(); - out.put(null, null, null, in, null, null); - sink(getElement(getMapKey(out))); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;MultiKeyMap;true;put;(Object,Object,Object,Object,Object,Object);;Argument[0..4];Element of MapKey of Argument[-1];value" - MultiKeyMap out = null; - String in = (String)source(); - out.put(null, null, in, null, null, null); - sink(getElement(getMapKey(out))); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;MultiKeyMap;true;put;(Object,Object,Object,Object,Object,Object);;Argument[0..4];Element of MapKey of Argument[-1];value" - MultiKeyMap out = null; - String in = (String)source(); - out.put(null, in, null, null, null, null); - sink(getElement(getMapKey(out))); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;MultiKeyMap;true;put;(Object,Object,Object,Object,Object,Object);;Argument[0..4];Element of MapKey of Argument[-1];value" - MultiKeyMap out = null; - String in = (String)source(); - out.put(in, null, null, null, null, null); - sink(getElement(getMapKey(out))); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;MultiKeyMap;true;put;(Object,Object,Object,Object,Object,Object);;Argument[5];MapValue of Argument[-1];value" - MultiKeyMap out = null; - String in = (String)source(); - out.put(null, null, null, null, null, in); - sink(getMapValue(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;MultiKeyMap;true;put;;;MapValue of Argument[-1];ReturnValue;value" - Object out = null; - MultiKeyMap in = newMKMWithMapValue((String)source()); - out = in.put(null, null, null, null, null, null); - sink(out); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;MultiKeyMap;true;put;;;MapValue of Argument[-1];ReturnValue;value" - Object out = null; - MultiKeyMap in = newMKMWithMapValue((String)source()); - out = in.put(null, null, null, null, null); - sink(out); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;MultiKeyMap;true;put;;;MapValue of Argument[-1];ReturnValue;value" - Object out = null; - MultiKeyMap in = newMKMWithMapValue((String)source()); - out = in.put(null, null, null, null); - sink(out); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;MultiKeyMap;true;put;;;MapValue of Argument[-1];ReturnValue;value" - Object out = null; - MultiKeyMap in = newMKMWithMapValue((String)source()); - out = in.put(null, null, null); - sink(out); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;MultiKeyMap;true;put;;;MapValue of Argument[-1];ReturnValue;value" - Object out = null; - MultiKeyMap in = newMKMWithMapValue((String)source()); - out = in.put(null, null); - sink(out); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;MultiKeyMap;true;removeMultiKey;;;MapValue of Argument[-1];ReturnValue;value" - Object out = null; - MultiKeyMap in = newMKMWithMapValue((String)source()); - out = in.removeMultiKey(null, null, null, null, null); - sink(out); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;MultiKeyMap;true;removeMultiKey;;;MapValue of Argument[-1];ReturnValue;value" - Object out = null; - MultiKeyMap in = newMKMWithMapValue((String)source()); - out = in.removeMultiKey(null, null, null, null); - sink(out); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;MultiKeyMap;true;removeMultiKey;;;MapValue of Argument[-1];ReturnValue;value" - Object out = null; - MultiKeyMap in = newMKMWithMapValue((String)source()); - out = in.removeMultiKey(null, null, null); - sink(out); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;MultiKeyMap;true;removeMultiKey;;;MapValue of Argument[-1];ReturnValue;value" - Object out = null; - MultiKeyMap in = newMKMWithMapValue((String)source()); - out = in.removeMultiKey(null, null); - sink(out); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;MultiValueMap;true;getCollection;;;Element of MapValue of Argument[-1];Element of ReturnValue;value" - Collection out = null; - MultiValueMap in = newMVMWithMapValue((String)source()); - out = in.getCollection(null); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;MultiValueMap;true;iterator;();;Element of MapValue of Argument[-1];MapValue of Element of ReturnValue;value" - Iterator> out = null; - MultiValueMap in = newMVMWithMapValue((String)source()); - out = in.iterator(); - sink(getMapValueFromEntry(getElement(out))); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;;true;iterator;();;MapKey of Argument[-1];MapKey of Element of ReturnValue;value" - Iterator> out = null; - MultiValueMap in = newMVMWithMapKey((String)source()); - out = in.iterator(); - sink(getMapKeyFromEntry(getElement(out))); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;MultiValueMap;true;iterator;(Object);;Element of MapValue of Argument[-1];Element of ReturnValue;value" - Iterator out = null; - MultiValueMap in = newMVMWithMapValue((String)source()); - out = in.iterator(null); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;MultiValueMap;true;multiValueMap;;;Element of MapValue of Argument[0];Element of MapValue of ReturnValue;value" - MultiValueMap out = null; - Map in = Map.of(null, newVectorWithElement((String)source())); - out = MultiValueMap.multiValueMap(in, (Factory)null); - sink(getElement((Collection)getMapValue(out))); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;MultiValueMap;true;multiValueMap;;;Element of MapValue of Argument[0];Element of MapValue of ReturnValue;value" - MultiValueMap out = null; - Map in = Map.of(null, newVectorWithElement((String)source())); - out = MultiValueMap.multiValueMap(in, (Class)null); - sink(getElement((Collection)getMapValue(out))); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;MultiValueMap;true;multiValueMap;;;Element of MapValue of Argument[0];Element of MapValue of ReturnValue;value" - MultiValueMap out = null; - Map in = Map.of(null, newVectorWithElement((String)source())); - out = MultiValueMap.multiValueMap(in); - sink(getElement((Collection)getMapValue(out))); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;MultiValueMap;true;multiValueMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" - MultiValueMap out = null; - Map in = Map.of((String)source(), null); - out = MultiValueMap.multiValueMap(in, (Factory)null); - sink(getMapKey(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;MultiValueMap;true;multiValueMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" - MultiValueMap out = null; - Map in = Map.of((String)source(), null); - out = MultiValueMap.multiValueMap(in, (Class)null); - sink(getMapKey(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;MultiValueMap;true;multiValueMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" - MultiValueMap out = null; - Map in = Map.of((String)source(), null); - out = MultiValueMap.multiValueMap(in); - sink(getMapKey(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;MultiValueMap;true;putAll;(Map);;Element of MapValue of Argument[0];Element of MapValue of Argument[-1];value" - MultiValueMap out = null; - Map in = newMVMWithMapValue((String)source()); - out.putAll(in); - sink(getElement((Collection)getMapValue(out))); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;MultiValueMap;true;putAll;(Map);;MapValue of Argument[0];Element of MapValue of Argument[-1];value" - MultiValueMap out = null; - Map in = Map.of(null, source()); - out.putAll(in); - sink(getElement((Collection)getMapValue(out))); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;MultiValueMap;true;putAll;(Object,Collection);;Argument[0];MapKey of Argument[-1];value" - MultiValueMap out = null; - Object in = source(); - out.putAll(in, null); - sink(getMapKey(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;MultiValueMap;true;putAll;(Object,Collection);;Element of Argument[1];Element of MapValue of Argument[-1];value" - MultiValueMap out = null; - Collection in = newTreeBagWithElement((String)source()); - out.putAll(null, in); - sink(getElement((Collection)getMapValue(out))); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;MultiValueMap;true;values;;;Element of MapValue of Argument[-1];Element of ReturnValue;value" - Collection out = null; - MultiValueMap in = newMVMWithMapValue((String)source()); - out = in.values(); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;PassiveExpiringMap;true;PassiveExpiringMap;(ExpirationPolicy,Map);;MapKey of Argument[1];MapKey of Argument[-1];value" - PassiveExpiringMap out = null; - Map in = Map.of((String)source(), null); - out = new PassiveExpiringMap((PassiveExpiringMap.ExpirationPolicy)null, in); - sink(getMapKey(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;PassiveExpiringMap;true;PassiveExpiringMap;(ExpirationPolicy,Map);;MapValue of Argument[1];MapValue of Argument[-1];value" - PassiveExpiringMap out = null; - Map in = Map.of(null, (String)source()); - out = new PassiveExpiringMap((PassiveExpiringMap.ExpirationPolicy)null, in); - sink(getMapValue(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;PassiveExpiringMap;true;PassiveExpiringMap;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value" - PassiveExpiringMap out = null; - Map in = Map.of((String)source(), null); - out = new PassiveExpiringMap(in); - sink(getMapKey(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;PassiveExpiringMap;true;PassiveExpiringMap;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value" - PassiveExpiringMap out = null; - Map in = Map.of(null, (String)source()); - out = new PassiveExpiringMap(in); - sink(getMapValue(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;PassiveExpiringMap;true;PassiveExpiringMap;(long,Map);;MapKey of Argument[1];MapKey of Argument[-1];value" - PassiveExpiringMap out = null; - Map in = Map.of((String)source(), null); - out = new PassiveExpiringMap(0L, in); - sink(getMapKey(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;PassiveExpiringMap;true;PassiveExpiringMap;(long,Map);;MapValue of Argument[1];MapValue of Argument[-1];value" - PassiveExpiringMap out = null; - Map in = Map.of(null, (String)source()); - out = new PassiveExpiringMap(0L, in); - sink(getMapValue(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;PassiveExpiringMap;true;PassiveExpiringMap;(long,TimeUnit,Map);;MapKey of Argument[2];MapKey of Argument[-1];value" - PassiveExpiringMap out = null; - Map in = Map.of((String)source(), null); - out = new PassiveExpiringMap(0L, null, in); - sink(getMapKey(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;PassiveExpiringMap;true;PassiveExpiringMap;(long,TimeUnit,Map);;MapValue of Argument[2];MapValue of Argument[-1];value" - PassiveExpiringMap out = null; - Map in = Map.of(null, (String)source()); - out = new PassiveExpiringMap(0L, null, in); - sink(getMapValue(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;PredicatedMap;true;predicatedMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" - PredicatedMap out = null; - Map in = Map.of((String)source(), null); - out = PredicatedMap.predicatedMap(in, null, null); - sink(getMapKey(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;PredicatedMap;true;predicatedMap;;;MapValue of Argument[0];MapValue of ReturnValue;value" - PredicatedMap out = null; - Map in = Map.of(null, (String)source()); - out = PredicatedMap.predicatedMap(in, null, null); - sink(getMapValue(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;PredicatedSortedMap;true;predicatedSortedMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" - PredicatedSortedMap out = null; - SortedMap in = newTreeMapWithMapKey((String)source()); - out = PredicatedSortedMap.predicatedSortedMap(in, null, null); - sink(getMapKey(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;PredicatedSortedMap;true;predicatedSortedMap;;;MapValue of Argument[0];MapValue of ReturnValue;value" - PredicatedSortedMap out = null; - SortedMap in = newTreeMapWithMapValue((String)source()); - out = PredicatedSortedMap.predicatedSortedMap(in, null, null); - sink(getMapValue(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;SingletonMap;true;SingletonMap;(Entry);;MapKey of Argument[0];MapKey of Argument[-1];value" - SingletonMap out = null; - Map.Entry in = newTMEWithMapKey((String)source()); - out = new SingletonMap(in); - sink(getMapKey(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;SingletonMap;true;SingletonMap;(Entry);;MapValue of Argument[0];MapValue of Argument[-1];value" - SingletonMap out = null; - Map.Entry in = newTMEWithMapValue((String)source()); - out = new SingletonMap(in); - sink(getMapValue(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;SingletonMap;true;SingletonMap;(KeyValue);;MapKey of Argument[0];MapKey of Argument[-1];value" - SingletonMap out = null; - KeyValue in = newDKVWithMapKey((String)source()); - out = new SingletonMap(in); - sink(getMapKey(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;SingletonMap;true;SingletonMap;(KeyValue);;MapValue of Argument[0];MapValue of Argument[-1];value" - SingletonMap out = null; - KeyValue in = newDKVWithMapValue((String)source()); - out = new SingletonMap(in); - sink(getMapValue(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;SingletonMap;true;SingletonMap;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value" - SingletonMap out = null; - Map in = Map.of((String)source(), null); - out = new SingletonMap(in); - sink(getMapKey(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;SingletonMap;true;SingletonMap;(Map);;MapValue of Argument[0];MapValue of Argument[-1];value" - SingletonMap out = null; - Map in = Map.of(null, (String)source()); - out = new SingletonMap(in); - sink(getMapValue(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;SingletonMap;true;SingletonMap;(Object,Object);;Argument[0];MapKey of Argument[-1];value" - SingletonMap out = null; - Object in = source(); - out = new SingletonMap(in, null); - sink(getMapKey(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;SingletonMap;true;SingletonMap;(Object,Object);;Argument[1];MapValue of Argument[-1];value" - SingletonMap out = null; - Object in = source(); - out = new SingletonMap(null, in); - sink(getMapValue(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;SingletonMap;true;setValue;;;Argument[0];MapValue of Argument[-1];value" - SingletonMap out = null; - Object in = source(); - out.setValue(in); - sink(getMapValue(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;TransformedMap;true;transformingMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" - TransformedMap out = null; - Map in = Map.of((String)source(), null); - out = TransformedMap.transformingMap(in, null, null); - sink(getMapKey(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;TransformedMap;true;transformingMap;;;MapValue of Argument[0];MapValue of ReturnValue;value" - TransformedMap out = null; - Map in = Map.of(null, (String)source()); - out = TransformedMap.transformingMap(in, null, null); - sink(getMapValue(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;TransformedSortedMap;true;transformingSortedMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" - TransformedSortedMap out = null; - SortedMap in = newTreeMapWithMapKey((String)source()); - out = TransformedSortedMap.transformingSortedMap(in, null, null); - sink(getMapKey(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;TransformedSortedMap;true;transformingSortedMap;;;MapValue of Argument[0];MapValue of ReturnValue;value" - TransformedSortedMap out = null; - SortedMap in = newTreeMapWithMapValue((String)source()); - out = TransformedSortedMap.transformingSortedMap(in, null, null); - sink(getMapValue(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;UnmodifiableEntrySet;true;unmodifiableEntrySet;;;MapKey of Element of Argument[0];MapKey of Element of ReturnValue;value" - Set> out = null; - Set> in = newListOrderedSetWithElement(newTMEWithMapKey((String)source())); - out = UnmodifiableEntrySet.unmodifiableEntrySet(in); - sink(getMapKeyFromEntry(getElement(out))); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;UnmodifiableEntrySet;true;unmodifiableEntrySet;;;MapValue of Element of Argument[0];MapValue of Element of ReturnValue;value" - Set> out = null; - Set> in = newListOrderedSetWithElement(newTMEWithMapValue((String)source())); - out = UnmodifiableEntrySet.unmodifiableEntrySet(in); - sink(getMapValueFromEntry(getElement(out))); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;UnmodifiableMap;true;unmodifiableMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" - Map out = null; - Map in = Map.of((String)source(), null); - out = UnmodifiableMap.unmodifiableMap(in); - sink(getMapKey(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;UnmodifiableMap;true;unmodifiableMap;;;MapValue of Argument[0];MapValue of ReturnValue;value" - Map out = null; - Map in = Map.of(null, (String)source()); - out = UnmodifiableMap.unmodifiableMap(in); - sink(getMapValue(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;UnmodifiableOrderedMap;true;unmodifiableOrderedMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" - OrderedMap out = null; - OrderedMap in = newListOrderedMapWithMapKey((String)source()); - out = UnmodifiableOrderedMap.unmodifiableOrderedMap(in); - sink(getMapKey(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;UnmodifiableOrderedMap;true;unmodifiableOrderedMap;;;MapValue of Argument[0];MapValue of ReturnValue;value" - OrderedMap out = null; - OrderedMap in = newListOrderedMapWithMapValue((String)source()); - out = UnmodifiableOrderedMap.unmodifiableOrderedMap(in); - sink(getMapValue(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;UnmodifiableSortedMap;true;unmodifiableSortedMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" - SortedMap out = null; - SortedMap in = newTreeMapWithMapKey((String)source()); - out = UnmodifiableSortedMap.unmodifiableSortedMap(in); - sink(getMapKey(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.map;UnmodifiableSortedMap;true;unmodifiableSortedMap;;;MapValue of Argument[0];MapValue of ReturnValue;value" - SortedMap out = null; - SortedMap in = newTreeMapWithMapValue((String)source()); - out = UnmodifiableSortedMap.unmodifiableSortedMap(in); - sink(getMapValue(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.multimap;ArrayListValuedHashMap;true;ArrayListValuedHashMap;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value" - ArrayListValuedHashMap out = null; - Map in = Map.of((String)source(), null); - out = new ArrayListValuedHashMap(in); - sink(getMapKey(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.multimap;ArrayListValuedHashMap;true;ArrayListValuedHashMap;(Map);;MapValue of Argument[0];Element of MapValue of Argument[-1];value" - ArrayListValuedHashMap out = null; - Map in = Map.of(null, (String)source()); - out = new ArrayListValuedHashMap(in); - sink(getElement(getMapValue(out))); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.multimap;ArrayListValuedHashMap;true;ArrayListValuedHashMap;(MultiValuedMap);;Element of MapValue of Argument[0];Element of MapValue of Argument[-1];value" - ArrayListValuedHashMap out = null; - MultiValuedMap in = newALVHMWithMapValue((String)source()); - out = new ArrayListValuedHashMap(in); - sink(getElement(getMapValue(out))); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.multimap;ArrayListValuedHashMap;true;ArrayListValuedHashMap;(MultiValuedMap);;MapKey of Argument[0];MapKey of Argument[-1];value" - ArrayListValuedHashMap out = null; - MultiValuedMap in = newALVHMWithMapKey((String)source()); - out = new ArrayListValuedHashMap(in); - sink(getMapKey(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.multimap;HashSetValuedHashMap;true;HashSetValuedHashMap;(Map);;MapKey of Argument[0];MapKey of Argument[-1];value" - HashSetValuedHashMap out = null; - Map in = Map.of((String)source(), null); - out = new HashSetValuedHashMap(in); - sink(getMapKey(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.multimap;HashSetValuedHashMap;true;HashSetValuedHashMap;(Map);;MapValue of Argument[0];Element of MapValue of Argument[-1];value" - HashSetValuedHashMap out = null; - Map in = Map.of(null, (String)source()); - out = new HashSetValuedHashMap(in); - sink(getElement(getMapValue(out))); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.multimap;HashSetValuedHashMap;true;HashSetValuedHashMap;(MultiValuedMap);;Element of MapValue of Argument[0];Element of MapValue of Argument[-1];value" - HashSetValuedHashMap out = null; - MultiValuedMap in = newALVHMWithMapValue((String)source()); - out = new HashSetValuedHashMap(in); - sink(getElement(getMapValue(out))); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.multimap;HashSetValuedHashMap;true;HashSetValuedHashMap;(MultiValuedMap);;MapKey of Argument[0];MapKey of Argument[-1];value" - HashSetValuedHashMap out = null; - MultiValuedMap in = newALVHMWithMapKey((String)source()); - out = new HashSetValuedHashMap(in); - sink(getMapKey(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.multimap;TransformedMultiValuedMap;true;transformingMap;;;Element of MapValue of Argument[0];Element of MapValue of ReturnValue;value" - TransformedMultiValuedMap out = null; - MultiValuedMap in = newALVHMWithMapValue((String)source()); - out = TransformedMultiValuedMap.transformingMap(in, null, null); - sink(getElement(getMapValue(out))); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.multimap;TransformedMultiValuedMap;true;transformingMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" - TransformedMultiValuedMap out = null; - MultiValuedMap in = newALVHMWithMapKey((String)source()); - out = TransformedMultiValuedMap.transformingMap(in, null, null); - sink(getMapKey(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.multimap;UnmodifiableMultiValuedMap;true;unmodifiableMultiValuedMap;(MultiValuedMap);;Element of MapValue of Argument[0];Element of MapValue of ReturnValue;value" - UnmodifiableMultiValuedMap out = null; - MultiValuedMap in = newALVHMWithMapValue((String)source()); - out = UnmodifiableMultiValuedMap.unmodifiableMultiValuedMap(in); - sink(getElement(getMapValue(out))); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.multimap;UnmodifiableMultiValuedMap;true;unmodifiableMultiValuedMap;(MultiValuedMap);;MapKey of Argument[0];MapKey of ReturnValue;value" - UnmodifiableMultiValuedMap out = null; - MultiValuedMap in = newALVHMWithMapKey((String)source()); - out = UnmodifiableMultiValuedMap.unmodifiableMultiValuedMap(in); - sink(getMapKey(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.multiset;HashMultiSet;true;HashMultiSet;;;Element of Argument[0];Element of Argument[-1];value" - HashMultiSet out = null; - Collection in = newTreeBagWithElement((String)source()); - out = new HashMultiSet(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.multiset;PredicatedMultiSet;true;predicatedMultiSet;;;Element of Argument[0];Element of ReturnValue;value" - PredicatedMultiSet out = null; - MultiSet in = newHashMultiSetWithElement((String)source()); - out = PredicatedMultiSet.predicatedMultiSet(in, null); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.multiset;SynchronizedMultiSet;true;synchronizedMultiSet;;;Element of Argument[0];Element of ReturnValue;value" - SynchronizedMultiSet out = null; - MultiSet in = newHashMultiSetWithElement((String)source()); - out = SynchronizedMultiSet.synchronizedMultiSet(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.multiset;UnmodifiableMultiSet;true;unmodifiableMultiSet;;;Element of Argument[0];Element of ReturnValue;value" - MultiSet out = null; - MultiSet in = newHashMultiSetWithElement((String)source()); - out = UnmodifiableMultiSet.unmodifiableMultiSet(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.properties;AbstractPropertiesFactory;true;load;(ClassLoader,String);;Argument[1];ReturnValue;taint" - Properties out = null; - String in = (String)source(); - AbstractPropertiesFactory instance = null; - out = instance.load(null, in); - sink(out); // $ hasTaintFlow - } - { - // "org.apache.commons.collections4.properties;AbstractPropertiesFactory;true;load;(File);;Argument[0];ReturnValue;taint" - Properties out = null; - File in = (File)source(); - AbstractPropertiesFactory instance = null; - out = instance.load(in); - sink(out); // $ hasTaintFlow - } - { - // "org.apache.commons.collections4.properties;AbstractPropertiesFactory;true;load;(InputStream);;Argument[0];ReturnValue;taint" - Properties out = null; - InputStream in = (InputStream)source(); - AbstractPropertiesFactory instance = null; - out = instance.load(in); - sink(out); // $ hasTaintFlow - } - { - // "org.apache.commons.collections4.properties;AbstractPropertiesFactory;true;load;(Path);;Argument[0];ReturnValue;taint" - Properties out = null; - Path in = (Path)source(); - AbstractPropertiesFactory instance = null; - out = instance.load(in); - sink(out); // $ hasTaintFlow - } - { - // "org.apache.commons.collections4.properties;AbstractPropertiesFactory;true;load;(Reader);;Argument[0];ReturnValue;taint" - Properties out = null; - Reader in = (Reader)source(); - AbstractPropertiesFactory instance = null; - out = instance.load(in); - sink(out); // $ hasTaintFlow - } - { - // "org.apache.commons.collections4.properties;AbstractPropertiesFactory;true;load;(String);;Argument[0];ReturnValue;taint" - Properties out = null; - String in = (String)source(); - AbstractPropertiesFactory instance = null; - out = instance.load(in); - sink(out); // $ hasTaintFlow - } - { - // "org.apache.commons.collections4.properties;AbstractPropertiesFactory;true;load;(URI);;Argument[0];ReturnValue;taint" - Properties out = null; - URI in = (URI)source(); - AbstractPropertiesFactory instance = null; - out = instance.load(in); - sink(out); // $ hasTaintFlow - } - { - // "org.apache.commons.collections4.properties;AbstractPropertiesFactory;true;load;(URL);;Argument[0];ReturnValue;taint" - Properties out = null; - URL in = (URL)source(); - AbstractPropertiesFactory instance = null; - out = instance.load(in); - sink(out); // $ hasTaintFlow - } - { - // "org.apache.commons.collections4.queue;CircularFifoQueue;true;CircularFifoQueue;(Collection);;Element of Argument[0];Element of Argument[-1];value" - CircularFifoQueue out = null; - Collection in = newTreeBagWithElement((String)source()); - out = new CircularFifoQueue(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.queue;CircularFifoQueue;true;get;;;Element of Argument[-1];ReturnValue;value" - Object out = null; - CircularFifoQueue in = newCircularFifoQueueWithElement((String)source()); - out = in.get(0); - sink(out); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.queue;PredicatedQueue;true;predicatedQueue;;;Element of Argument[0];Element of ReturnValue;value" - PredicatedQueue out = null; - Queue in = newCircularFifoQueueWithElement((String)source()); - out = PredicatedQueue.predicatedQueue(in, null); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.queue;SynchronizedQueue;true;synchronizedQueue;;;Element of Argument[0];Element of ReturnValue;value" - SynchronizedQueue out = null; - Queue in = newCircularFifoQueueWithElement((String)source()); - out = SynchronizedQueue.synchronizedQueue(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.queue;TransformedQueue;true;transformingQueue;;;Element of Argument[0];Element of ReturnValue;value" - TransformedQueue out = null; - Queue in = newCircularFifoQueueWithElement((String)source()); - out = TransformedQueue.transformingQueue(in, null); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.queue;UnmodifiableQueue;true;unmodifiableQueue;;;Element of Argument[0];Element of ReturnValue;value" - Queue out = null; - Queue in = newCircularFifoQueueWithElement((String)source()); - out = UnmodifiableQueue.unmodifiableQueue(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.set;AbstractNavigableSetDecorator;true;AbstractNavigableSetDecorator;;;Element of Argument[0];Element of Argument[-1];value" - AbstractNavigableSetDecorator out = null; - NavigableSet in = newTreeSetWithElement((String)source()); - out = new MyAbstractNavigableSetDecorator(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.set;AbstractSetDecorator;true;AbstractSetDecorator;;;Element of Argument[0];Element of Argument[-1];value" - AbstractSetDecorator out = null; - Set in = newListOrderedSetWithElement((String)source()); - out = new MyAbstractSetDecorator(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.set;AbstractSortedSetDecorator;true;AbstractSortedSetDecorator;;;Element of Argument[0];Element of Argument[-1];value" - AbstractSortedSetDecorator out = null; - Set in = newListOrderedSetWithElement((String)source()); - out = new MyAbstractSortedSetDecorator(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.set;CompositeSet$SetMutator;true;add;;;Argument[2];Element of Argument[0];value" - CompositeSet out = null; - Object in = source(); - CompositeSet.SetMutator instance = null; - instance.add(out, null, in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.set;CompositeSet$SetMutator;true;add;;;Argument[2];Element of Element of Argument[1];value" - List out = null; - Object in = source(); - CompositeSet.SetMutator instance = null; - instance.add(null, out, in); - sink(getElement(getElement(out))); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.set;CompositeSet$SetMutator;true;addAll;;;Element of Argument[2];Element of Argument[0];value" - CompositeSet out = null; - Collection in = newTreeBagWithElement((String)source()); - CompositeSet.SetMutator instance = null; - instance.addAll(out, null, in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.set;CompositeSet$SetMutator;true;addAll;;;Element of Argument[2];Element of Element of Argument[1];value" - List out = null; - Collection in = newTreeBagWithElement((String)source()); - CompositeSet.SetMutator instance = null; - instance.addAll(null, out, in); - sink(getElement(getElement(out))); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.set;CompositeSet;true;CompositeSet;(Set);;Element of Argument[0];Element of Argument[-1];value" - CompositeSet out = null; - Set in = newListOrderedSetWithElement((String)source()); - out = new CompositeSet(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.set;CompositeSet;true;CompositeSet;(Set[]);;Element of ArrayElement of Argument[0];Element of Argument[-1];value" - CompositeSet out = null; - Set[] in = new Set[]{newListOrderedSetWithElement((String)source())}; - out = new CompositeSet(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.set;CompositeSet;true;addComposited;(Set);;Element of Argument[0];Element of Argument[-1];value" - CompositeSet out = null; - Set in = newListOrderedSetWithElement((String)source()); - out.addComposited(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.set;CompositeSet;true;addComposited;(Set,Set);;Element of Argument[0];Element of Argument[-1];value" - CompositeSet out = null; - Set in = newListOrderedSetWithElement((String)source()); - out.addComposited(in, null); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.set;CompositeSet;true;addComposited;(Set,Set);;Element of Argument[1];Element of Argument[-1];value" - CompositeSet out = null; - Set in = newListOrderedSetWithElement((String)source()); - out.addComposited(null, in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.set;CompositeSet;true;addComposited;(Set[]);;Element of ArrayElement of Argument[0];Element of Argument[-1];value" - CompositeSet out = null; - Set[] in = new Set[]{newListOrderedSetWithElement((String)source())}; - out.addComposited(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.set;CompositeSet;true;getSets;;;Element of Argument[-1];Element of Element of ReturnValue;value" - List> out = null; - CompositeSet in = newCompositeSetWithElement((String)source()); - out = in.getSets(); - sink(getElement(getElement(out))); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.set;CompositeSet;true;toSet;;;Element of Argument[-1];Element of ReturnValue;value" - Set out = null; - CompositeSet in = newCompositeSetWithElement((String)source()); - out = in.toSet(); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.set;ListOrderedSet;true;add;;;Argument[1];Element of Argument[-1];value" - ListOrderedSet out = null; - Object in = source(); - out.add(0, in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.set;ListOrderedSet;true;addAll;;;Element of Argument[1];Element of Argument[-1];value" - ListOrderedSet out = null; - Collection in = List.of((String)source()); - out.addAll(0, in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.set;ListOrderedSet;true;asList;;;Element of Argument[-1];Element of ReturnValue;value" - List out = null; - ListOrderedSet in = newListOrderedSetWithElement((String)source()); - out = in.asList(); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.set;ListOrderedSet;true;get;;;Element of Argument[-1];ReturnValue;value" - Object out = null; - ListOrderedSet in = newListOrderedSetWithElement((String)source()); - out = in.get(0); - sink(out); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.set;ListOrderedSet;true;listOrderedSet;(List);;Element of Argument[0];Element of ReturnValue;value" - ListOrderedSet out = null; - List in = List.of((String)source()); - out = ListOrderedSet.listOrderedSet(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.set;ListOrderedSet;true;listOrderedSet;(Set);;Element of Argument[0];Element of ReturnValue;value" - ListOrderedSet out = null; - Set in = newListOrderedSetWithElement((String)source()); - out = ListOrderedSet.listOrderedSet(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.set;MapBackedSet;true;mapBackedSet;;;MapKey of Argument[0];Element of ReturnValue;value" - MapBackedSet out = null; - Map in = Map.of((String)source(), null); - out = MapBackedSet.mapBackedSet(in, null); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.set;MapBackedSet;true;mapBackedSet;;;MapKey of Argument[0];Element of ReturnValue;value" - MapBackedSet out = null; - Map in = Map.of((String)source(), null); - out = MapBackedSet.mapBackedSet(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.set;PredicatedNavigableSet;true;predicatedNavigableSet;;;Element of Argument[0];Element of ReturnValue;value" - PredicatedNavigableSet out = null; - NavigableSet in = newTreeSetWithElement((String)source()); - out = PredicatedNavigableSet.predicatedNavigableSet(in, null); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.set;PredicatedSet;true;predicatedSet;;;Element of Argument[0];Element of ReturnValue;value" - PredicatedSet out = null; - Set in = newListOrderedSetWithElement((String)source()); - out = PredicatedSet.predicatedSet(in, null); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.set;PredicatedSortedSet;true;predicatedSortedSet;;;Element of Argument[0];Element of ReturnValue;value" - PredicatedSortedSet out = null; - SortedSet in = newTreeSetWithElement((String)source()); - out = PredicatedSortedSet.predicatedSortedSet(in, null); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.set;TransformedNavigableSet;true;transformingNavigableSet;;;Element of Argument[0];Element of ReturnValue;value" - TransformedNavigableSet out = null; - NavigableSet in = newTreeSetWithElement((String)source()); - out = TransformedNavigableSet.transformingNavigableSet(in, null); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.set;TransformedSet;true;transformingSet;;;Element of Argument[0];Element of ReturnValue;value" - TransformedSet out = null; - Set in = newListOrderedSetWithElement((String)source()); - out = TransformedSet.transformingSet(in, null); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.set;TransformedSortedSet;true;transformingSortedSet;;;Element of Argument[0];Element of ReturnValue;value" - TransformedSortedSet out = null; - SortedSet in = newTreeSetWithElement((String)source()); - out = TransformedSortedSet.transformingSortedSet(in, null); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.set;UnmodifiableNavigableSet;true;unmodifiableNavigableSet;;;Element of Argument[0];Element of ReturnValue;value" - NavigableSet out = null; - NavigableSet in = newTreeSetWithElement((String)source()); - out = UnmodifiableNavigableSet.unmodifiableNavigableSet(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.set;UnmodifiableSet;true;unmodifiableSet;;;Element of Argument[0];Element of ReturnValue;value" - Set out = null; - Set in = newListOrderedSetWithElement((String)source()); - out = UnmodifiableSet.unmodifiableSet(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.set;UnmodifiableSortedSet;true;unmodifiableSortedSet;;;Element of Argument[0];Element of ReturnValue;value" - SortedSet out = null; - SortedSet in = newTreeSetWithElement((String)source()); - out = UnmodifiableSortedSet.unmodifiableSortedSet(in); - sink(getElement(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.splitmap;AbstractIterableGetMapDecorator;true;AbstractIterableGetMapDecorator;;;MapKey of Argument[0];MapKey of Argument[-1];value" - AbstractIterableGetMapDecorator out = null; - Map in = Map.of((String)source(), null); - out = new AbstractIterableGetMapDecorator(in); - sink(getMapKeyFromGet(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.splitmap;AbstractIterableGetMapDecorator;true;AbstractIterableGetMapDecorator;;;MapValue of Argument[0];MapValue of Argument[-1];value" - AbstractIterableGetMapDecorator out = null; - Map in = Map.of(null, (String)source()); - out = new AbstractIterableGetMapDecorator(in); - sink(getMapValueFromGet(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.splitmap;TransformedSplitMap;true;transformingMap;;;MapKey of Argument[0];MapKey of ReturnValue;value" - TransformedSplitMap out = null; - Map in = Map.of((String)source(), null); - out = TransformedSplitMap.transformingMap(in, null, null); - sink(getMapKeyFromGet(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.splitmap;TransformedSplitMap;true;transformingMap;;;MapValue of Argument[0];MapValue of ReturnValue;value" - TransformedSplitMap out = null; - Map in = Map.of(null, (String)source()); - out = TransformedSplitMap.transformingMap(in, null, null); - sink(getMapValueFromGet(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.trie;PatriciaTrie;true;PatriciaTrie;;;MapKey of Argument[0];MapKey of Argument[-1];value" - PatriciaTrie out = null; - Map in = Map.of((String)source(), null); - out = new PatriciaTrie(in); - sink(getMapKey(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.trie;PatriciaTrie;true;PatriciaTrie;;;MapValue of Argument[0];MapValue of Argument[-1];value" - PatriciaTrie out = null; - Map in = Map.of(null, (String)source()); - out = new PatriciaTrie(in); - sink(getMapValue(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.trie;AbstractPatriciaTrie;true;select;;;MapKey of Argument[-1];MapKey of ReturnValue;value" - PatriciaTrie in = newPatriciaTrieWithMapKey((String)source()); - Map.Entry out = null; - out = in.select(null); - sink(getMapKeyFromEntry(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.trie;AbstractPatriciaTrie;true;select;;;MapValue of Argument[-1];MapValue of ReturnValue;value" - PatriciaTrie in = newPatriciaTrieWithMapValue((String)source()); - Map.Entry out = null; - out = in.select(null); - sink(getMapValueFromEntry(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.trie;AbstractPatriciaTrie;true;selectKey;;;MapKey of Argument[-1];ReturnValue;value" - PatriciaTrie in = newPatriciaTrieWithMapKey((String)source()); - String out = null; - out = in.selectKey(null); - sink(out); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.trie;AbstractPatriciaTrie;true;selectValue;;;MapValue of Argument[-1];ReturnValue;value" - PatriciaTrie in = newPatriciaTrieWithMapValue((String)source()); - String out = null; - out = in.selectValue(null); - sink(out); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.trie;UnmodifiableTrie;true;unmodifiableTrie;;;MapKey of Argument[0];MapKey of ReturnValue;value" - Trie out = null; - Trie in = newPatriciaTrieWithMapKey((String)source()); - out = UnmodifiableTrie.unmodifiableTrie(in); - sink(getMapKey(out)); // $ hasValueFlow - } - { - // "org.apache.commons.collections4.trie;UnmodifiableTrie;true;unmodifiableTrie;;;MapValue of Argument[0];MapValue of ReturnValue;value" - Trie out = null; - Trie in = newPatriciaTrieWithMapValue((String)source()); - out = UnmodifiableTrie.unmodifiableTrie(in); - sink(getMapValue(out)); // $ hasValueFlow - } - - } - - class MyAbstractKeyValue extends AbstractKeyValue { - MyAbstractKeyValue(K key, V value) { - super(key, value); - } - - K mySetKey(final K key) { - return super.setKey(key); - } - - V mySetValue(final V value) { - return super.setValue(value); - } - } - - class MyAbstractMapEntry extends AbstractMapEntry { - MyAbstractMapEntry(final K key, final V value) { - super(key, value); - } - @Override - public K getKey() { return null; } - @Override - public V getValue() { return null; } - } - - class MyAbstractMapEntryDecorator extends AbstractMapEntryDecorator { - MyAbstractMapEntryDecorator(final Map.Entry entry) { - super(entry); - } - - Map.Entry myGetMapEntry() { - return super.getMapEntry(); - } - } - - class MySetView extends SetUtils.SetView { - MySetView() { super(); } - - @Override - protected Iterator createIterator() { return null; } - - Iterator myCreateIterator() { return createIterator(); } - } - - class MyAbstractSortedBidiMapDecorator extends AbstractSortedBidiMapDecorator { - public MyAbstractSortedBidiMapDecorator(final SortedBidiMap map) { - super(map); - } - } - - class MyAbstractOrderedMapDecorator extends AbstractOrderedMapDecorator { - public MyAbstractOrderedMapDecorator(final OrderedMap map) { - super(map); - } - } - - class MyAbstractSortedMapDecorator extends AbstractSortedMapDecorator { - public MyAbstractSortedMapDecorator(final SortedMap map) { - super(map); - } - } - - class MyAbstractBagDecorator extends AbstractBagDecorator { - public MyAbstractBagDecorator(final Bag bag) { - super(bag); - } - } - - class MyAbstractMapBag extends AbstractMapBag { - public MyAbstractMapBag(final Map map) { - super(map); - } - public Map myGetMap() { - return super.getMap(); - } - } - - class MyAbstractSortedBagDecorator extends AbstractSortedBagDecorator { - public MyAbstractSortedBagDecorator(final SortedBag bag) { - super(bag); - } - } - - class MyAbstractBidiMapDecorator extends AbstractBidiMapDecorator { - public MyAbstractBidiMapDecorator(final BidiMap map) { - super(map); - } - } - - class MyAbstractDualBidiMap extends AbstractDualBidiMap { - public MyAbstractDualBidiMap(final Map normalMap, final Map reverseMap) { - super(normalMap, reverseMap); - } - public MyAbstractDualBidiMap(final Map normalMap, final Map reverseMap, final BidiMap inverseBidiMap) { - super(normalMap, reverseMap, inverseBidiMap); - } - protected BidiMap createBidiMap(Map normalMap, Map reverseMap, BidiMap inverseMap) { - return null; - } - } - - class MyAbstractOrderedBidiMapDecorator extends AbstractOrderedBidiMapDecorator { - public MyAbstractOrderedBidiMapDecorator(final OrderedBidiMap map) { - super(map); - } - } - - class MyAbstractCollectionDecorator extends AbstractCollectionDecorator { - public MyAbstractCollectionDecorator(final Collection coll) { - super(coll); - } - public Collection myDecorated() { - return super.decorated(); - } - public void mySetCollection(final Collection coll) { - super.setCollection(coll); - } - } - - class MyAbstractIteratorDecorator extends AbstractIteratorDecorator { - public MyAbstractIteratorDecorator(final Iterator iterator) { - super(iterator); - } - } - - class MyAbstractListIteratorDecorator extends AbstractListIteratorDecorator { - public MyAbstractListIteratorDecorator(final ListIterator iterator) { - super(iterator); - } - public ListIterator myGetListIterator() { - return super.getListIterator(); - } - } - - class MyAbstractMapIteratorDecorator extends AbstractMapIteratorDecorator { - public MyAbstractMapIteratorDecorator(final MapIterator iterator) { - super(iterator); - } - public MapIterator myGetMapIterator() { - return super.getMapIterator(); - } - } - - class MyAbstractOrderedMapIteratorDecorator extends AbstractOrderedMapIteratorDecorator { - public MyAbstractOrderedMapIteratorDecorator(final OrderedMapIterator iterator) { - super(iterator); - } - public OrderedMapIterator myGetOrderedMapIterator() { - return super.getOrderedMapIterator(); - } - } - - class MyAbstractUntypedIteratorDecorator extends AbstractUntypedIteratorDecorator { - public MyAbstractUntypedIteratorDecorator(final Iterator iterator) { - super(iterator); - } - public Iterator myGetIterator() { - return super.getIterator(); - } - public O next() { return null; } - } - - class MyAbstractLinkedList extends AbstractLinkedList { - public MyAbstractLinkedList(final Collection coll) { - super(coll); - } - } - - class MyAbstractListDecorator extends AbstractListDecorator { - public MyAbstractListDecorator(final List list) { - super(list); - } - } - - class MyAbstractSerializableListDecorator extends AbstractSerializableListDecorator { - public MyAbstractSerializableListDecorator(final List list) { - super(list); - } - } - - class MyAbstractHashedMap extends AbstractHashedMap { - public MyAbstractHashedMap(final Map map) { - super(map); - } - } - - class MyAbstractLinkedMap extends AbstractLinkedMap { - public MyAbstractLinkedMap(final Map map) { - super(map); - } - } - - class MyAbstractMapDecorator extends AbstractMapDecorator { - public MyAbstractMapDecorator(final Map map) { - super(map); - } - public Map myDecorated() { - return super.decorated(); - } - } - - class MyAbstractNavigableSetDecorator extends AbstractNavigableSetDecorator { - public MyAbstractNavigableSetDecorator(final NavigableSet set) { - super(set); - } - } - - class MyAbstractSetDecorator extends AbstractSetDecorator { - public MyAbstractSetDecorator(final Set set) { - super(set); - } - } - - class MyAbstractSortedSetDecorator extends AbstractSortedSetDecorator { - public MyAbstractSortedSetDecorator(final Set set) { - super(set); - } - } - -} \ No newline at end of file From e6df8164cf89716f37aa901f3d69b7c0ca63a4d0 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Mon, 27 Sep 2021 16:00:14 +0100 Subject: [PATCH 635/741] Fix up old tests for new helper functions --- .../frameworks/apache-collections/Test.java | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/java/ql/test/library-tests/frameworks/apache-collections/Test.java b/java/ql/test/library-tests/frameworks/apache-collections/Test.java index 784691d22bf..be28eaacba2 100644 --- a/java/ql/test/library-tests/frameworks/apache-collections/Test.java +++ b/java/ql/test/library-tests/frameworks/apache-collections/Test.java @@ -1920,7 +1920,7 @@ public class Test { { // "org.apache.commons.collections4;Get;true;entrySet;;;MapKey of Argument[-1];MapKey of Element of ReturnValue;value" Set out = null; - Get in = newTrieWithMapKey((String)source()); + Get in = newPatriciaTrieWithMapKey((String)source()); out = in.entrySet(); sink(getMapKeyFromEntry(getElement(out))); // $ hasValueFlow } @@ -1941,7 +1941,7 @@ public class Test { { // "org.apache.commons.collections4;Get;true;entrySet;;;MapValue of Argument[-1];MapValue of Element of ReturnValue;value" Set out = null; - Get in = newTrieWithMapValue((String)source()); + Get in = newPatriciaTrieWithMapValue((String)source()); out = in.entrySet(); sink(getMapValueFromEntry(getElement(out))); // $ hasValueFlow } @@ -1962,7 +1962,7 @@ public class Test { { // "org.apache.commons.collections4;Get;true;get;;;MapValue of Argument[-1];ReturnValue;value" Object out = null; - Get in = newTrieWithMapValue((String)source()); + Get in = newPatriciaTrieWithMapValue((String)source()); out = in.get(null); sink(out); // $ hasValueFlow } @@ -1976,7 +1976,7 @@ public class Test { { // "org.apache.commons.collections4;Get;true;keySet;();;MapKey of Argument[-1];Element of ReturnValue;value" Set out = null; - Get in = newTrieWithMapKey((String)source()); + Get in = newPatriciaTrieWithMapKey((String)source()); out = in.keySet(); sink(getElement(out)); // $ hasValueFlow } @@ -1997,7 +1997,7 @@ public class Test { { // "org.apache.commons.collections4;Get;true;remove;(Object);;MapValue of Argument[-1];ReturnValue;value" Object out = null; - Get in = newTrieWithMapValue((String)source()); + Get in = newPatriciaTrieWithMapValue((String)source()); out = in.remove(null); sink(out); // $ hasValueFlow } @@ -2032,7 +2032,7 @@ public class Test { { // "org.apache.commons.collections4;Get;true;values;();;MapValue of Argument[-1];Element of ReturnValue;value" Collection out = null; - Get in = newTrieWithMapValue((String)source()); + Get in = newPatriciaTrieWithMapValue((String)source()); out = in.values(); sink(getElement(out)); // $ hasValueFlow } @@ -3768,28 +3768,28 @@ public class Test { { // "org.apache.commons.collections4;Trie;true;prefixMap;;;MapKey of Argument[-1];MapKey of ReturnValue;value" SortedMap out = null; - Trie in = newTrieWithMapKey((String)source()); + Trie in = newPatriciaTrieWithMapKey((String)source()); out = in.prefixMap(null); sink(getMapKey(out)); // $ hasValueFlow } { // "org.apache.commons.collections4;Trie;true;prefixMap;;;MapValue of Argument[-1];MapValue of ReturnValue;value" SortedMap out = null; - Trie in = newTrieWithMapValue((String)source()); + Trie in = newPatriciaTrieWithMapValue((String)source()); out = in.prefixMap(null); sink(getMapValue(out)); // $ hasValueFlow } { // "org.apache.commons.collections4;TrieUtils;true;unmodifiableTrie;;;MapKey of Argument[0];MapKey of ReturnValue;value" Trie out = null; - Trie in = newTrieWithMapKey((String)source()); + Trie in = newPatriciaTrieWithMapKey((String)source()); out = TrieUtils.unmodifiableTrie(in); sink(getMapKey(out)); // $ hasValueFlow } { // "org.apache.commons.collections4;TrieUtils;true;unmodifiableTrie;;;MapValue of Argument[0];MapValue of ReturnValue;value" Trie out = null; - Trie in = newTrieWithMapValue((String)source()); + Trie in = newPatriciaTrieWithMapValue((String)source()); out = TrieUtils.unmodifiableTrie(in); sink(getMapValue(out)); // $ hasValueFlow } From 29db42c3cda4b6d796c2b1d041e74d78a0912c8b Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Mon, 27 Sep 2021 16:17:50 +0100 Subject: [PATCH 636/741] Generate stubs --- .../collections4/BoundedCollection.java | 11 ++ .../commons/collections4/BoundedMap.java | 11 ++ .../commons/collections4/SortedBidiMap.java | 13 ++ .../bag/AbstractBagDecorator.java | 20 +++ .../bag/AbstractSortedBagDecorator.java | 17 +++ .../collections4/bag/CollectionBag.java | 21 ++++ .../collections4/bag/CollectionSortedBag.java | 21 ++++ .../commons/collections4/bag/HashBag.java | 13 ++ .../collections4/bag/PredicatedBag.java | 22 ++++ .../collections4/bag/PredicatedSortedBag.java | 19 +++ .../collections4/bag/SynchronizedBag.java | 22 ++++ .../bag/SynchronizedSortedBag.java | 20 +++ .../collections4/bag/TransformedBag.java | 23 ++++ .../bag/TransformedSortedBag.java | 20 +++ .../collections4/bag/UnmodifiableBag.java | 28 +++++ .../bag/UnmodifiableSortedBag.java | 28 +++++ .../bidimap/AbstractBidiMapDecorator.java | 20 +++ .../bidimap/AbstractDualBidiMap.java | 39 ++++++ .../AbstractOrderedBidiMapDecorator.java | 20 +++ .../AbstractSortedBidiMapDecorator.java | 21 ++++ .../collections4/bidimap/DualHashBidiMap.java | 16 +++ .../bidimap/DualLinkedHashBidiMap.java | 16 +++ .../collections4/bidimap/DualTreeBidiMap.java | 35 ++++++ .../bidimap/UnmodifiableBidiMap.java | 26 ++++ .../bidimap/UnmodifiableOrderedBidiMap.java | 27 ++++ .../bidimap/UnmodifiableSortedBidiMap.java | 30 +++++ .../AbstractCollectionDecorator.java | 31 +++++ .../collection/CompositeCollection.java | 45 +++++++ .../collection/IndexedCollection.java | 29 +++++ .../collection/PredicatedCollection.java | 43 +++++++ .../collection/SynchronizedCollection.java | 35 ++++++ .../collection/TransformedCollection.java | 20 +++ .../UnmodifiableBoundedCollection.java | 28 +++++ .../collection/UnmodifiableCollection.java | 23 ++++ .../AbstractListIteratorDecorator.java | 21 ++++ .../AbstractMapIteratorDecorator.java | 18 +++ .../AbstractOrderedMapIteratorDecorator.java | 20 +++ .../collections4/iterators/ArrayIterator.java | 21 ++++ .../iterators/ArrayListIterator.java | 22 ++++ .../iterators/CollatingIterator.java | 27 ++++ .../iterators/EnumerationIterator.java | 19 +++ .../iterators/FilterIterator.java | 20 +++ .../iterators/FilterListIterator.java | 27 ++++ .../collections4/iterators/IteratorChain.java | 22 ++++ .../iterators/IteratorIterable.java | 13 ++ .../iterators/ListIteratorWrapper.java | 22 ++++ .../iterators/LoopingIterator.java | 17 +++ .../iterators/LoopingListIterator.java | 23 ++++ .../iterators/ObjectArrayIterator.java | 20 +++ .../iterators/ObjectArrayListIterator.java | 22 ++++ .../iterators/PeekingIterator.java | 17 +++ .../iterators/PermutationIterator.java | 16 +++ .../iterators/PushbackIterator.java | 16 +++ .../iterators/ReverseListIterator.java | 22 ++++ .../iterators/SingletonIterator.java | 16 +++ .../iterators/SingletonListIterator.java | 21 ++++ .../iterators/UniqueFilterIterator.java | 12 ++ .../iterators/UnmodifiableIterator.java | 15 +++ .../iterators/UnmodifiableListIterator.java | 21 ++++ .../iterators/UnmodifiableMapIterator.java | 18 +++ .../UnmodifiableOrderedMapIterator.java | 20 +++ .../collections4/keyvalue/MultiKey.java | 23 ++++ .../collections4/list/AbstractLinkedList.java | 119 ++++++++++++++++++ .../list/AbstractListDecorator.java | 27 ++++ .../AbstractSerializableListDecorator.java | 12 ++ .../list/CursorableLinkedList.java | 44 +++++++ .../collections4/list/FixedSizeList.java | 38 ++++++ .../commons/collections4/list/GrowthList.java | 18 +++ .../commons/collections4/list/LazyList.java | 19 +++ .../list/NodeCachingLinkedList.java | 23 ++++ .../collections4/list/PredicatedList.java | 29 +++++ .../collections4/list/SetUniqueList.java | 37 ++++++ .../collections4/list/TransformedList.java | 30 +++++ .../commons/collections4/list/TreeList.java | 27 ++++ .../collections4/list/UnmodifiableList.java | 33 +++++ .../map/AbstractInputCheckedMapDecorator.java | 16 +++ .../map/AbstractOrderedMapDecorator.java | 19 +++ .../map/AbstractSortedMapDecorator.java | 25 ++++ .../collections4/map/CaseInsensitiveMap.java | 17 +++ .../collections4/map/CompositeMap.java | 41 ++++++ .../collections4/map/DefaultedMap.java | 21 ++++ .../map/EntrySetToMapIteratorAdapter.java | 22 ++++ .../collections4/map/FixedSizeMap.java | 26 ++++ .../collections4/map/FixedSizeSortedMap.java | 31 +++++ .../commons/collections4/map/Flat3Map.java | 35 ++++++ .../commons/collections4/map/LRUMap.java | 39 ++++++ .../commons/collections4/map/LazyMap.java | 20 +++ .../collections4/map/LazySortedMap.java | 25 ++++ .../collections4/map/ListOrderedMap.java | 42 +++++++ .../commons/collections4/map/MultiKeyMap.java | 51 ++++++++ .../collections4/map/PassiveExpiringMap.java | 38 ++++++ .../collections4/map/PredicatedMap.java | 22 ++++ .../collections4/map/PredicatedSortedMap.java | 22 ++++ .../collections4/map/SingletonMap.java | 49 ++++++++ .../collections4/map/TransformedMap.java | 25 ++++ .../map/TransformedSortedMap.java | 23 ++++ .../map/UnmodifiableEntrySet.java | 27 ++++ .../collections4/map/UnmodifiableMap.java | 25 ++++ .../map/UnmodifiableOrderedMap.java | 26 ++++ .../map/UnmodifiableSortedMap.java | 31 +++++ .../AbstractMultiValuedMapDecorator.java | 40 ++++++ .../multimap/TransformedMultiValuedMap.java | 22 ++++ .../multimap/UnmodifiableMultiValuedMap.java | 32 +++++ .../multiset/AbstractMultiSetDecorator.java | 22 ++++ .../multiset/PredicatedMultiSet.java | 24 ++++ .../multiset/SynchronizedMultiSet.java | 24 ++++ .../multiset/UnmodifiableMultiSet.java | 30 +++++ .../properties/AbstractPropertiesFactory.java | 25 ++++ .../queue/AbstractQueueDecorator.java | 18 +++ .../collections4/queue/CircularFifoQueue.java | 31 +++++ .../collections4/queue/PredicatedQueue.java | 20 +++ .../collections4/queue/SynchronizedQueue.java | 22 ++++ .../collections4/queue/TransformedQueue.java | 21 ++++ .../collections4/queue/UnmodifiableQueue.java | 27 ++++ .../set/AbstractNavigableSetDecorator.java | 25 ++++ .../set/AbstractSerializableSetDecorator.java | 12 ++ .../set/AbstractSetDecorator.java | 15 +++ .../set/AbstractSortedSetDecorator.java | 21 ++++ .../collections4/set/CompositeSet.java | 47 +++++++ .../collections4/set/ListOrderedSet.java | 37 ++++++ .../collections4/set/MapBackedSet.java | 33 +++++ .../set/PredicatedNavigableSet.java | 27 ++++ .../collections4/set/PredicatedSet.java | 17 +++ .../collections4/set/PredicatedSortedSet.java | 22 ++++ .../set/TransformedNavigableSet.java | 28 +++++ .../collections4/set/TransformedSet.java | 17 +++ .../set/TransformedSortedSet.java | 23 ++++ .../set/UnmodifiableNavigableSet.java | 33 +++++ .../collections4/set/UnmodifiableSet.java | 24 ++++ .../set/UnmodifiableSortedSet.java | 27 ++++ .../AbstractIterableGetMapDecorator.java | 29 +++++ .../splitmap/TransformedSplitMap.java | 23 ++++ .../collections4/trie/UnmodifiableTrie.java | 45 +++++++ 133 files changed, 3401 insertions(+) create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/BoundedCollection.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/BoundedMap.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/SortedBidiMap.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/bag/AbstractBagDecorator.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/bag/AbstractSortedBagDecorator.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/bag/CollectionBag.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/bag/CollectionSortedBag.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/bag/HashBag.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/bag/PredicatedBag.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/bag/PredicatedSortedBag.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/bag/SynchronizedBag.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/bag/SynchronizedSortedBag.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/bag/TransformedBag.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/bag/TransformedSortedBag.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/bag/UnmodifiableBag.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/bag/UnmodifiableSortedBag.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/bidimap/AbstractBidiMapDecorator.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/bidimap/AbstractDualBidiMap.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/bidimap/AbstractOrderedBidiMapDecorator.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/bidimap/AbstractSortedBidiMapDecorator.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/bidimap/DualHashBidiMap.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/bidimap/DualLinkedHashBidiMap.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/bidimap/DualTreeBidiMap.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/bidimap/UnmodifiableBidiMap.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/bidimap/UnmodifiableOrderedBidiMap.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/bidimap/UnmodifiableSortedBidiMap.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/collection/AbstractCollectionDecorator.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/collection/CompositeCollection.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/collection/IndexedCollection.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/collection/PredicatedCollection.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/collection/SynchronizedCollection.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/collection/TransformedCollection.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/collection/UnmodifiableBoundedCollection.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/collection/UnmodifiableCollection.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/AbstractListIteratorDecorator.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/AbstractMapIteratorDecorator.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/AbstractOrderedMapIteratorDecorator.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/ArrayIterator.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/ArrayListIterator.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/CollatingIterator.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/EnumerationIterator.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/FilterIterator.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/FilterListIterator.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/IteratorChain.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/IteratorIterable.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/ListIteratorWrapper.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/LoopingIterator.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/LoopingListIterator.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/ObjectArrayIterator.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/ObjectArrayListIterator.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/PeekingIterator.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/PermutationIterator.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/PushbackIterator.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/ReverseListIterator.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/SingletonIterator.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/SingletonListIterator.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/UniqueFilterIterator.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/UnmodifiableIterator.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/UnmodifiableListIterator.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/UnmodifiableMapIterator.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/UnmodifiableOrderedMapIterator.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/keyvalue/MultiKey.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/list/AbstractLinkedList.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/list/AbstractListDecorator.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/list/AbstractSerializableListDecorator.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/list/CursorableLinkedList.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/list/FixedSizeList.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/list/GrowthList.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/list/LazyList.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/list/NodeCachingLinkedList.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/list/PredicatedList.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/list/SetUniqueList.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/list/TransformedList.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/list/TreeList.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/list/UnmodifiableList.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/AbstractInputCheckedMapDecorator.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/AbstractOrderedMapDecorator.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/AbstractSortedMapDecorator.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/CaseInsensitiveMap.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/CompositeMap.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/DefaultedMap.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/EntrySetToMapIteratorAdapter.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/FixedSizeMap.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/FixedSizeSortedMap.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/Flat3Map.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/LRUMap.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/LazyMap.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/LazySortedMap.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/ListOrderedMap.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/MultiKeyMap.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/PassiveExpiringMap.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/PredicatedMap.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/PredicatedSortedMap.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/SingletonMap.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/TransformedMap.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/TransformedSortedMap.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/UnmodifiableEntrySet.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/UnmodifiableMap.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/UnmodifiableOrderedMap.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/UnmodifiableSortedMap.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/multimap/AbstractMultiValuedMapDecorator.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/multimap/TransformedMultiValuedMap.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/multimap/UnmodifiableMultiValuedMap.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/multiset/AbstractMultiSetDecorator.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/multiset/PredicatedMultiSet.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/multiset/SynchronizedMultiSet.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/multiset/UnmodifiableMultiSet.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/properties/AbstractPropertiesFactory.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/queue/AbstractQueueDecorator.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/queue/CircularFifoQueue.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/queue/PredicatedQueue.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/queue/SynchronizedQueue.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/queue/TransformedQueue.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/queue/UnmodifiableQueue.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/set/AbstractNavigableSetDecorator.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/set/AbstractSerializableSetDecorator.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/set/AbstractSetDecorator.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/set/AbstractSortedSetDecorator.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/set/CompositeSet.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/set/ListOrderedSet.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/set/MapBackedSet.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/set/PredicatedNavigableSet.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/set/PredicatedSet.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/set/PredicatedSortedSet.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/set/TransformedNavigableSet.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/set/TransformedSet.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/set/TransformedSortedSet.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/set/UnmodifiableNavigableSet.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/set/UnmodifiableSet.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/set/UnmodifiableSortedSet.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/splitmap/AbstractIterableGetMapDecorator.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/splitmap/TransformedSplitMap.java create mode 100644 java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/trie/UnmodifiableTrie.java diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/BoundedCollection.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/BoundedCollection.java new file mode 100644 index 00000000000..4ef11898c3c --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/BoundedCollection.java @@ -0,0 +1,11 @@ +// Generated automatically from org.apache.commons.collections4.BoundedCollection for testing purposes + +package org.apache.commons.collections4; + +import java.util.Collection; + +public interface BoundedCollection extends Collection +{ + boolean isFull(); + int maxSize(); +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/BoundedMap.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/BoundedMap.java new file mode 100644 index 00000000000..9ceec3f2a90 --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/BoundedMap.java @@ -0,0 +1,11 @@ +// Generated automatically from org.apache.commons.collections4.BoundedMap for testing purposes + +package org.apache.commons.collections4; + +import org.apache.commons.collections4.IterableMap; + +public interface BoundedMap extends IterableMap +{ + boolean isFull(); + int maxSize(); +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/SortedBidiMap.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/SortedBidiMap.java new file mode 100644 index 00000000000..add3beaf1bd --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/SortedBidiMap.java @@ -0,0 +1,13 @@ +// Generated automatically from org.apache.commons.collections4.SortedBidiMap for testing purposes + +package org.apache.commons.collections4; + +import java.util.Comparator; +import java.util.SortedMap; +import org.apache.commons.collections4.OrderedBidiMap; + +public interface SortedBidiMap extends OrderedBidiMap, SortedMap +{ + Comparator valueComparator(); + SortedBidiMap inverseBidiMap(); +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/bag/AbstractBagDecorator.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/bag/AbstractBagDecorator.java new file mode 100644 index 00000000000..5701036d5a1 --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/bag/AbstractBagDecorator.java @@ -0,0 +1,20 @@ +// Generated automatically from org.apache.commons.collections4.bag.AbstractBagDecorator for testing purposes + +package org.apache.commons.collections4.bag; + +import java.util.Set; +import org.apache.commons.collections4.Bag; +import org.apache.commons.collections4.collection.AbstractCollectionDecorator; + +abstract public class AbstractBagDecorator extends AbstractCollectionDecorator implements Bag +{ + protected AbstractBagDecorator(){} + protected AbstractBagDecorator(Bag p0){} + protected Bag decorated(){ return null; } + public Set uniqueSet(){ return null; } + public boolean add(E p0, int p1){ return false; } + public boolean equals(Object p0){ return false; } + public boolean remove(Object p0, int p1){ return false; } + public int getCount(Object p0){ return 0; } + public int hashCode(){ return 0; } +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/bag/AbstractSortedBagDecorator.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/bag/AbstractSortedBagDecorator.java new file mode 100644 index 00000000000..2d6fa60c2ec --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/bag/AbstractSortedBagDecorator.java @@ -0,0 +1,17 @@ +// Generated automatically from org.apache.commons.collections4.bag.AbstractSortedBagDecorator for testing purposes + +package org.apache.commons.collections4.bag; + +import java.util.Comparator; +import org.apache.commons.collections4.SortedBag; +import org.apache.commons.collections4.bag.AbstractBagDecorator; + +abstract public class AbstractSortedBagDecorator extends AbstractBagDecorator implements SortedBag +{ + protected AbstractSortedBagDecorator(){} + protected AbstractSortedBagDecorator(SortedBag p0){} + protected SortedBag decorated(){ return null; } + public Comparator comparator(){ return null; } + public E first(){ return null; } + public E last(){ return null; } +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/bag/CollectionBag.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/bag/CollectionBag.java new file mode 100644 index 00000000000..e0714f1b4e8 --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/bag/CollectionBag.java @@ -0,0 +1,21 @@ +// Generated automatically from org.apache.commons.collections4.bag.CollectionBag for testing purposes + +package org.apache.commons.collections4.bag; + +import java.util.Collection; +import org.apache.commons.collections4.Bag; +import org.apache.commons.collections4.bag.AbstractBagDecorator; + +public class CollectionBag extends AbstractBagDecorator +{ + protected CollectionBag() {} + public CollectionBag(Bag p0){} + public boolean add(E p0){ return false; } + public boolean add(E p0, int p1){ return false; } + public boolean addAll(Collection p0){ return false; } + public boolean containsAll(Collection p0){ return false; } + public boolean remove(Object p0){ return false; } + public boolean removeAll(Collection p0){ return false; } + public boolean retainAll(Collection p0){ return false; } + public static Bag collectionBag(Bag p0){ return null; } +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/bag/CollectionSortedBag.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/bag/CollectionSortedBag.java new file mode 100644 index 00000000000..e0a5586af0d --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/bag/CollectionSortedBag.java @@ -0,0 +1,21 @@ +// Generated automatically from org.apache.commons.collections4.bag.CollectionSortedBag for testing purposes + +package org.apache.commons.collections4.bag; + +import java.util.Collection; +import org.apache.commons.collections4.SortedBag; +import org.apache.commons.collections4.bag.AbstractSortedBagDecorator; + +public class CollectionSortedBag extends AbstractSortedBagDecorator +{ + protected CollectionSortedBag() {} + public CollectionSortedBag(SortedBag p0){} + public boolean add(E p0){ return false; } + public boolean add(E p0, int p1){ return false; } + public boolean addAll(Collection p0){ return false; } + public boolean containsAll(Collection p0){ return false; } + public boolean remove(Object p0){ return false; } + public boolean removeAll(Collection p0){ return false; } + public boolean retainAll(Collection p0){ return false; } + public static SortedBag collectionSortedBag(SortedBag p0){ return null; } +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/bag/HashBag.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/bag/HashBag.java new file mode 100644 index 00000000000..7bfe8b9fcb0 --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/bag/HashBag.java @@ -0,0 +1,13 @@ +// Generated automatically from org.apache.commons.collections4.bag.HashBag for testing purposes + +package org.apache.commons.collections4.bag; + +import java.io.Serializable; +import java.util.Collection; +import org.apache.commons.collections4.bag.AbstractMapBag; + +public class HashBag extends AbstractMapBag implements Serializable +{ + public HashBag(){} + public HashBag(Collection p0){} +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/bag/PredicatedBag.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/bag/PredicatedBag.java new file mode 100644 index 00000000000..01e93cb07a5 --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/bag/PredicatedBag.java @@ -0,0 +1,22 @@ +// Generated automatically from org.apache.commons.collections4.bag.PredicatedBag for testing purposes + +package org.apache.commons.collections4.bag; + +import java.util.Set; +import org.apache.commons.collections4.Bag; +import org.apache.commons.collections4.Predicate; +import org.apache.commons.collections4.collection.PredicatedCollection; + +public class PredicatedBag extends PredicatedCollection implements Bag +{ + protected PredicatedBag() {} + protected Bag decorated(){ return null; } + protected PredicatedBag(Bag p0, Predicate p1){} + public Set uniqueSet(){ return null; } + public boolean add(E p0, int p1){ return false; } + public boolean equals(Object p0){ return false; } + public boolean remove(Object p0, int p1){ return false; } + public int getCount(Object p0){ return 0; } + public int hashCode(){ return 0; } + public static PredicatedBag predicatedBag(Bag p0, Predicate p1){ return null; } +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/bag/PredicatedSortedBag.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/bag/PredicatedSortedBag.java new file mode 100644 index 00000000000..7fa0c1c31bf --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/bag/PredicatedSortedBag.java @@ -0,0 +1,19 @@ +// Generated automatically from org.apache.commons.collections4.bag.PredicatedSortedBag for testing purposes + +package org.apache.commons.collections4.bag; + +import java.util.Comparator; +import org.apache.commons.collections4.Predicate; +import org.apache.commons.collections4.SortedBag; +import org.apache.commons.collections4.bag.PredicatedBag; + +public class PredicatedSortedBag extends PredicatedBag implements SortedBag +{ + protected PredicatedSortedBag() {} + protected PredicatedSortedBag(SortedBag p0, Predicate p1){} + protected SortedBag decorated(){ return null; } + public Comparator comparator(){ return null; } + public E first(){ return null; } + public E last(){ return null; } + public static PredicatedSortedBag predicatedSortedBag(SortedBag p0, Predicate p1){ return null; } +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/bag/SynchronizedBag.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/bag/SynchronizedBag.java new file mode 100644 index 00000000000..27befe5a2c2 --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/bag/SynchronizedBag.java @@ -0,0 +1,22 @@ +// Generated automatically from org.apache.commons.collections4.bag.SynchronizedBag for testing purposes + +package org.apache.commons.collections4.bag; + +import java.util.Set; +import org.apache.commons.collections4.Bag; +import org.apache.commons.collections4.collection.SynchronizedCollection; + +public class SynchronizedBag extends SynchronizedCollection implements Bag +{ + protected SynchronizedBag() {} + protected Bag getBag(){ return null; } + protected SynchronizedBag(Bag p0){} + protected SynchronizedBag(Bag p0, Object p1){} + public Set uniqueSet(){ return null; } + public boolean add(E p0, int p1){ return false; } + public boolean equals(Object p0){ return false; } + public boolean remove(Object p0, int p1){ return false; } + public int getCount(Object p0){ return 0; } + public int hashCode(){ return 0; } + public static SynchronizedBag synchronizedBag(Bag p0){ return null; } +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/bag/SynchronizedSortedBag.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/bag/SynchronizedSortedBag.java new file mode 100644 index 00000000000..5eb69ad48fd --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/bag/SynchronizedSortedBag.java @@ -0,0 +1,20 @@ +// Generated automatically from org.apache.commons.collections4.bag.SynchronizedSortedBag for testing purposes + +package org.apache.commons.collections4.bag; + +import java.util.Comparator; +import org.apache.commons.collections4.Bag; +import org.apache.commons.collections4.SortedBag; +import org.apache.commons.collections4.bag.SynchronizedBag; + +public class SynchronizedSortedBag extends SynchronizedBag implements SortedBag +{ + protected SynchronizedSortedBag() {} + protected SortedBag getSortedBag(){ return null; } + protected SynchronizedSortedBag(Bag p0, Object p1){} + protected SynchronizedSortedBag(SortedBag p0){} + public Comparator comparator(){ return null; } + public E first(){ return null; } + public E last(){ return null; } + public static SynchronizedSortedBag synchronizedSortedBag(SortedBag p0){ return null; } +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/bag/TransformedBag.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/bag/TransformedBag.java new file mode 100644 index 00000000000..a42ef6f2e76 --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/bag/TransformedBag.java @@ -0,0 +1,23 @@ +// Generated automatically from org.apache.commons.collections4.bag.TransformedBag for testing purposes + +package org.apache.commons.collections4.bag; + +import java.util.Set; +import org.apache.commons.collections4.Bag; +import org.apache.commons.collections4.Transformer; +import org.apache.commons.collections4.collection.TransformedCollection; + +public class TransformedBag extends TransformedCollection implements Bag +{ + protected TransformedBag() {} + protected Bag getBag(){ return null; } + protected TransformedBag(Bag p0, Transformer p1){} + public Set uniqueSet(){ return null; } + public boolean add(E p0, int p1){ return false; } + public boolean equals(Object p0){ return false; } + public boolean remove(Object p0, int p1){ return false; } + public int getCount(Object p0){ return 0; } + public int hashCode(){ return 0; } + public static Bag transformedBag(Bag p0, Transformer p1){ return null; } + public static Bag transformingBag(Bag p0, Transformer p1){ return null; } +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/bag/TransformedSortedBag.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/bag/TransformedSortedBag.java new file mode 100644 index 00000000000..1908765c13a --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/bag/TransformedSortedBag.java @@ -0,0 +1,20 @@ +// Generated automatically from org.apache.commons.collections4.bag.TransformedSortedBag for testing purposes + +package org.apache.commons.collections4.bag; + +import java.util.Comparator; +import org.apache.commons.collections4.SortedBag; +import org.apache.commons.collections4.Transformer; +import org.apache.commons.collections4.bag.TransformedBag; + +public class TransformedSortedBag extends TransformedBag implements SortedBag +{ + protected TransformedSortedBag() {} + protected SortedBag getSortedBag(){ return null; } + protected TransformedSortedBag(SortedBag p0, Transformer p1){} + public Comparator comparator(){ return null; } + public E first(){ return null; } + public E last(){ return null; } + public static TransformedSortedBag transformedSortedBag(SortedBag p0, Transformer p1){ return null; } + public static TransformedSortedBag transformingSortedBag(SortedBag p0, Transformer p1){ return null; } +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/bag/UnmodifiableBag.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/bag/UnmodifiableBag.java new file mode 100644 index 00000000000..9b3fcfbc3d9 --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/bag/UnmodifiableBag.java @@ -0,0 +1,28 @@ +// Generated automatically from org.apache.commons.collections4.bag.UnmodifiableBag for testing purposes + +package org.apache.commons.collections4.bag; + +import java.util.Collection; +import java.util.Iterator; +import java.util.Set; +import java.util.function.Predicate; +import org.apache.commons.collections4.Bag; +import org.apache.commons.collections4.Unmodifiable; +import org.apache.commons.collections4.bag.AbstractBagDecorator; + +public class UnmodifiableBag extends AbstractBagDecorator implements Unmodifiable +{ + protected UnmodifiableBag() {} + public Iterator iterator(){ return null; } + public Set uniqueSet(){ return null; } + public boolean add(E p0){ return false; } + public boolean add(E p0, int p1){ return false; } + public boolean addAll(Collection p0){ return false; } + public boolean remove(Object p0){ return false; } + public boolean remove(Object p0, int p1){ return false; } + public boolean removeAll(Collection p0){ return false; } + public boolean removeIf(Predicate p0){ return false; } + public boolean retainAll(Collection p0){ return false; } + public static Bag unmodifiableBag(Bag p0){ return null; } + public void clear(){} +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/bag/UnmodifiableSortedBag.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/bag/UnmodifiableSortedBag.java new file mode 100644 index 00000000000..8e0bd59afee --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/bag/UnmodifiableSortedBag.java @@ -0,0 +1,28 @@ +// Generated automatically from org.apache.commons.collections4.bag.UnmodifiableSortedBag for testing purposes + +package org.apache.commons.collections4.bag; + +import java.util.Collection; +import java.util.Iterator; +import java.util.Set; +import java.util.function.Predicate; +import org.apache.commons.collections4.SortedBag; +import org.apache.commons.collections4.Unmodifiable; +import org.apache.commons.collections4.bag.AbstractSortedBagDecorator; + +public class UnmodifiableSortedBag extends AbstractSortedBagDecorator implements Unmodifiable +{ + protected UnmodifiableSortedBag() {} + public Iterator iterator(){ return null; } + public Set uniqueSet(){ return null; } + public boolean add(E p0){ return false; } + public boolean add(E p0, int p1){ return false; } + public boolean addAll(Collection p0){ return false; } + public boolean remove(Object p0){ return false; } + public boolean remove(Object p0, int p1){ return false; } + public boolean removeAll(Collection p0){ return false; } + public boolean removeIf(Predicate p0){ return false; } + public boolean retainAll(Collection p0){ return false; } + public static SortedBag unmodifiableSortedBag(SortedBag p0){ return null; } + public void clear(){} +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/bidimap/AbstractBidiMapDecorator.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/bidimap/AbstractBidiMapDecorator.java new file mode 100644 index 00000000000..56437edf8a7 --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/bidimap/AbstractBidiMapDecorator.java @@ -0,0 +1,20 @@ +// Generated automatically from org.apache.commons.collections4.bidimap.AbstractBidiMapDecorator for testing purposes + +package org.apache.commons.collections4.bidimap; + +import java.util.Set; +import org.apache.commons.collections4.BidiMap; +import org.apache.commons.collections4.MapIterator; +import org.apache.commons.collections4.map.AbstractMapDecorator; + +abstract public class AbstractBidiMapDecorator extends AbstractMapDecorator implements BidiMap +{ + protected AbstractBidiMapDecorator() {} + protected AbstractBidiMapDecorator(BidiMap p0){} + protected BidiMap decorated(){ return null; } + public BidiMap inverseBidiMap(){ return null; } + public K getKey(Object p0){ return null; } + public K removeValue(Object p0){ return null; } + public MapIterator mapIterator(){ return null; } + public Set values(){ return null; } +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/bidimap/AbstractDualBidiMap.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/bidimap/AbstractDualBidiMap.java new file mode 100644 index 00000000000..e53b5027448 --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/bidimap/AbstractDualBidiMap.java @@ -0,0 +1,39 @@ +// Generated automatically from org.apache.commons.collections4.bidimap.AbstractDualBidiMap for testing purposes + +package org.apache.commons.collections4.bidimap; + +import java.util.Iterator; +import java.util.Map; +import java.util.Set; +import org.apache.commons.collections4.BidiMap; +import org.apache.commons.collections4.MapIterator; + +abstract public class AbstractDualBidiMap implements BidiMap +{ + protected AbstractDualBidiMap(){} + protected AbstractDualBidiMap(Map p0, Map p1){} + protected AbstractDualBidiMap(Map p0, Map p1, BidiMap p2){} + protected Iterator createKeySetIterator(Iterator p0){ return null; } + protected Iterator> createEntrySetIterator(Iterator> p0){ return null; } + protected Iterator createValuesIterator(Iterator p0){ return null; } + protected abstract BidiMap createBidiMap(Map p0, Map p1, BidiMap p2); + public BidiMap inverseBidiMap(){ return null; } + public K getKey(Object p0){ return null; } + public K removeValue(Object p0){ return null; } + public MapIterator mapIterator(){ return null; } + public Set keySet(){ return null; } + public Set> entrySet(){ return null; } + public Set values(){ return null; } + public String toString(){ return null; } + public V get(Object p0){ return null; } + public V put(K p0, V p1){ return null; } + public V remove(Object p0){ return null; } + public boolean containsKey(Object p0){ return false; } + public boolean containsValue(Object p0){ return false; } + public boolean equals(Object p0){ return false; } + public boolean isEmpty(){ return false; } + public int hashCode(){ return 0; } + public int size(){ return 0; } + public void clear(){} + public void putAll(Map p0){} +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/bidimap/AbstractOrderedBidiMapDecorator.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/bidimap/AbstractOrderedBidiMapDecorator.java new file mode 100644 index 00000000000..274cc7f76cf --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/bidimap/AbstractOrderedBidiMapDecorator.java @@ -0,0 +1,20 @@ +// Generated automatically from org.apache.commons.collections4.bidimap.AbstractOrderedBidiMapDecorator for testing purposes + +package org.apache.commons.collections4.bidimap; + +import org.apache.commons.collections4.OrderedBidiMap; +import org.apache.commons.collections4.OrderedMapIterator; +import org.apache.commons.collections4.bidimap.AbstractBidiMapDecorator; + +abstract public class AbstractOrderedBidiMapDecorator extends AbstractBidiMapDecorator implements OrderedBidiMap +{ + protected AbstractOrderedBidiMapDecorator() {} + protected AbstractOrderedBidiMapDecorator(OrderedBidiMap p0){} + protected OrderedBidiMap decorated(){ return null; } + public K firstKey(){ return null; } + public K lastKey(){ return null; } + public K nextKey(K p0){ return null; } + public K previousKey(K p0){ return null; } + public OrderedBidiMap inverseBidiMap(){ return null; } + public OrderedMapIterator mapIterator(){ return null; } +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/bidimap/AbstractSortedBidiMapDecorator.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/bidimap/AbstractSortedBidiMapDecorator.java new file mode 100644 index 00000000000..9a351f99b67 --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/bidimap/AbstractSortedBidiMapDecorator.java @@ -0,0 +1,21 @@ +// Generated automatically from org.apache.commons.collections4.bidimap.AbstractSortedBidiMapDecorator for testing purposes + +package org.apache.commons.collections4.bidimap; + +import java.util.Comparator; +import java.util.SortedMap; +import org.apache.commons.collections4.SortedBidiMap; +import org.apache.commons.collections4.bidimap.AbstractOrderedBidiMapDecorator; + +abstract public class AbstractSortedBidiMapDecorator extends AbstractOrderedBidiMapDecorator implements SortedBidiMap +{ + protected AbstractSortedBidiMapDecorator() {} + protected SortedBidiMap decorated(){ return null; } + public AbstractSortedBidiMapDecorator(SortedBidiMap p0){} + public Comparator comparator(){ return null; } + public Comparator valueComparator(){ return null; } + public SortedBidiMap inverseBidiMap(){ return null; } + public SortedMap headMap(K p0){ return null; } + public SortedMap subMap(K p0, K p1){ return null; } + public SortedMap tailMap(K p0){ return null; } +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/bidimap/DualHashBidiMap.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/bidimap/DualHashBidiMap.java new file mode 100644 index 00000000000..f5f7a60e530 --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/bidimap/DualHashBidiMap.java @@ -0,0 +1,16 @@ +// Generated automatically from org.apache.commons.collections4.bidimap.DualHashBidiMap for testing purposes + +package org.apache.commons.collections4.bidimap; + +import java.io.Serializable; +import java.util.Map; +import org.apache.commons.collections4.BidiMap; +import org.apache.commons.collections4.bidimap.AbstractDualBidiMap; + +public class DualHashBidiMap extends AbstractDualBidiMap implements Serializable +{ + protected BidiMap createBidiMap(Map p0, Map p1, BidiMap p2){ return null; } + protected DualHashBidiMap(Map p0, Map p1, BidiMap p2){} + public DualHashBidiMap(){} + public DualHashBidiMap(Map p0){} +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/bidimap/DualLinkedHashBidiMap.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/bidimap/DualLinkedHashBidiMap.java new file mode 100644 index 00000000000..6fbeb4ad431 --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/bidimap/DualLinkedHashBidiMap.java @@ -0,0 +1,16 @@ +// Generated automatically from org.apache.commons.collections4.bidimap.DualLinkedHashBidiMap for testing purposes + +package org.apache.commons.collections4.bidimap; + +import java.io.Serializable; +import java.util.Map; +import org.apache.commons.collections4.BidiMap; +import org.apache.commons.collections4.bidimap.AbstractDualBidiMap; + +public class DualLinkedHashBidiMap extends AbstractDualBidiMap implements Serializable +{ + protected BidiMap createBidiMap(Map p0, Map p1, BidiMap p2){ return null; } + protected DualLinkedHashBidiMap(Map p0, Map p1, BidiMap p2){} + public DualLinkedHashBidiMap(){} + public DualLinkedHashBidiMap(Map p0){} +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/bidimap/DualTreeBidiMap.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/bidimap/DualTreeBidiMap.java new file mode 100644 index 00000000000..70243fd10c3 --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/bidimap/DualTreeBidiMap.java @@ -0,0 +1,35 @@ +// Generated automatically from org.apache.commons.collections4.bidimap.DualTreeBidiMap for testing purposes + +package org.apache.commons.collections4.bidimap; + +import java.io.Serializable; +import java.util.Comparator; +import java.util.Map; +import java.util.SortedMap; +import org.apache.commons.collections4.BidiMap; +import org.apache.commons.collections4.OrderedBidiMap; +import org.apache.commons.collections4.OrderedMapIterator; +import org.apache.commons.collections4.SortedBidiMap; +import org.apache.commons.collections4.bidimap.AbstractDualBidiMap; + +public class DualTreeBidiMap extends AbstractDualBidiMap implements Serializable, SortedBidiMap +{ + protected DualTreeBidiMap(Map p0, Map p1, BidiMap p2){} + protected DualTreeBidiMap createBidiMap(Map p0, Map p1, BidiMap p2){ return null; } + public Comparator comparator(){ return null; } + public Comparator valueComparator(){ return null; } + public DualTreeBidiMap(){} + public DualTreeBidiMap(Comparator p0, Comparator p1){} + public DualTreeBidiMap(Map p0){} + public K firstKey(){ return null; } + public K lastKey(){ return null; } + public K nextKey(K p0){ return null; } + public K previousKey(K p0){ return null; } + public OrderedBidiMap inverseOrderedBidiMap(){ return null; } + public OrderedMapIterator mapIterator(){ return null; } + public SortedBidiMap inverseBidiMap(){ return null; } + public SortedBidiMap inverseSortedBidiMap(){ return null; } + public SortedMap headMap(K p0){ return null; } + public SortedMap subMap(K p0, K p1){ return null; } + public SortedMap tailMap(K p0){ return null; } +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/bidimap/UnmodifiableBidiMap.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/bidimap/UnmodifiableBidiMap.java new file mode 100644 index 00000000000..b971b59a01e --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/bidimap/UnmodifiableBidiMap.java @@ -0,0 +1,26 @@ +// Generated automatically from org.apache.commons.collections4.bidimap.UnmodifiableBidiMap for testing purposes + +package org.apache.commons.collections4.bidimap; + +import java.util.Map; +import java.util.Set; +import org.apache.commons.collections4.BidiMap; +import org.apache.commons.collections4.MapIterator; +import org.apache.commons.collections4.Unmodifiable; +import org.apache.commons.collections4.bidimap.AbstractBidiMapDecorator; + +public class UnmodifiableBidiMap extends AbstractBidiMapDecorator implements Unmodifiable +{ + protected UnmodifiableBidiMap() {} + public BidiMap inverseBidiMap(){ return null; } + public K removeValue(Object p0){ return null; } + public MapIterator mapIterator(){ return null; } + public Set keySet(){ return null; } + public Set> entrySet(){ return null; } + public Set values(){ return null; } + public V put(K p0, V p1){ return null; } + public V remove(Object p0){ return null; } + public static BidiMap unmodifiableBidiMap(BidiMap p0){ return null; } + public void clear(){} + public void putAll(Map p0){} +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/bidimap/UnmodifiableOrderedBidiMap.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/bidimap/UnmodifiableOrderedBidiMap.java new file mode 100644 index 00000000000..acb6be51f0f --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/bidimap/UnmodifiableOrderedBidiMap.java @@ -0,0 +1,27 @@ +// Generated automatically from org.apache.commons.collections4.bidimap.UnmodifiableOrderedBidiMap for testing purposes + +package org.apache.commons.collections4.bidimap; + +import java.util.Map; +import java.util.Set; +import org.apache.commons.collections4.OrderedBidiMap; +import org.apache.commons.collections4.OrderedMapIterator; +import org.apache.commons.collections4.Unmodifiable; +import org.apache.commons.collections4.bidimap.AbstractOrderedBidiMapDecorator; + +public class UnmodifiableOrderedBidiMap extends AbstractOrderedBidiMapDecorator implements Unmodifiable +{ + protected UnmodifiableOrderedBidiMap() {} + public K removeValue(Object p0){ return null; } + public OrderedBidiMap inverseBidiMap(){ return null; } + public OrderedBidiMap inverseOrderedBidiMap(){ return null; } + public OrderedMapIterator mapIterator(){ return null; } + public Set keySet(){ return null; } + public Set> entrySet(){ return null; } + public Set values(){ return null; } + public V put(K p0, V p1){ return null; } + public V remove(Object p0){ return null; } + public static OrderedBidiMap unmodifiableOrderedBidiMap(OrderedBidiMap p0){ return null; } + public void clear(){} + public void putAll(Map p0){} +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/bidimap/UnmodifiableSortedBidiMap.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/bidimap/UnmodifiableSortedBidiMap.java new file mode 100644 index 00000000000..e75c748db02 --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/bidimap/UnmodifiableSortedBidiMap.java @@ -0,0 +1,30 @@ +// Generated automatically from org.apache.commons.collections4.bidimap.UnmodifiableSortedBidiMap for testing purposes + +package org.apache.commons.collections4.bidimap; + +import java.util.Map; +import java.util.Set; +import java.util.SortedMap; +import org.apache.commons.collections4.OrderedMapIterator; +import org.apache.commons.collections4.SortedBidiMap; +import org.apache.commons.collections4.Unmodifiable; +import org.apache.commons.collections4.bidimap.AbstractSortedBidiMapDecorator; + +public class UnmodifiableSortedBidiMap extends AbstractSortedBidiMapDecorator implements Unmodifiable +{ + protected UnmodifiableSortedBidiMap() {} + public K removeValue(Object p0){ return null; } + public OrderedMapIterator mapIterator(){ return null; } + public Set keySet(){ return null; } + public Set> entrySet(){ return null; } + public Set values(){ return null; } + public SortedBidiMap inverseBidiMap(){ return null; } + public SortedMap headMap(K p0){ return null; } + public SortedMap subMap(K p0, K p1){ return null; } + public SortedMap tailMap(K p0){ return null; } + public V put(K p0, V p1){ return null; } + public V remove(Object p0){ return null; } + public static SortedBidiMap unmodifiableSortedBidiMap(SortedBidiMap p0){ return null; } + public void clear(){} + public void putAll(Map p0){} +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/collection/AbstractCollectionDecorator.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/collection/AbstractCollectionDecorator.java new file mode 100644 index 00000000000..3e68fac883f --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/collection/AbstractCollectionDecorator.java @@ -0,0 +1,31 @@ +// Generated automatically from org.apache.commons.collections4.collection.AbstractCollectionDecorator for testing purposes + +package org.apache.commons.collections4.collection; + +import java.io.Serializable; +import java.util.Collection; +import java.util.Iterator; +import java.util.function.Predicate; + +abstract public class AbstractCollectionDecorator implements Collection, Serializable +{ + protected AbstractCollectionDecorator(){} + protected AbstractCollectionDecorator(Collection p0){} + protected Collection decorated(){ return null; } + protected void setCollection(Collection p0){} + public T[] toArray(T[] p0){ return null; } + public Iterator iterator(){ return null; } + public Object[] toArray(){ return null; } + public String toString(){ return null; } + public boolean add(E p0){ return false; } + public boolean addAll(Collection p0){ return false; } + public boolean contains(Object p0){ return false; } + public boolean containsAll(Collection p0){ return false; } + public boolean isEmpty(){ return false; } + public boolean remove(Object p0){ return false; } + public boolean removeAll(Collection p0){ return false; } + public boolean removeIf(Predicate p0){ return false; } + public boolean retainAll(Collection p0){ return false; } + public int size(){ return 0; } + public void clear(){} +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/collection/CompositeCollection.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/collection/CompositeCollection.java new file mode 100644 index 00000000000..f77222d20d5 --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/collection/CompositeCollection.java @@ -0,0 +1,45 @@ +// Generated automatically from org.apache.commons.collections4.collection.CompositeCollection for testing purposes + +package org.apache.commons.collections4.collection; + +import java.io.Serializable; +import java.util.Collection; +import java.util.Iterator; +import java.util.List; +import java.util.function.Predicate; + +public class CompositeCollection implements Collection, Serializable +{ + protected CompositeCollection.CollectionMutator getMutator(){ return null; } + public T[] toArray(T[] p0){ return null; } + public Collection toCollection(){ return null; } + public CompositeCollection(){} + public CompositeCollection(Collection p0){} + public CompositeCollection(Collection p0, Collection p1){} + public CompositeCollection(Collection... p0){} + public Iterator iterator(){ return null; } + public List> getCollections(){ return null; } + public Object[] toArray(){ return null; } + public boolean add(E p0){ return false; } + public boolean addAll(Collection p0){ return false; } + public boolean contains(Object p0){ return false; } + public boolean containsAll(Collection p0){ return false; } + public boolean isEmpty(){ return false; } + public boolean remove(Object p0){ return false; } + public boolean removeAll(Collection p0){ return false; } + public boolean removeIf(Predicate p0){ return false; } + public boolean retainAll(Collection p0){ return false; } + public int size(){ return 0; } + public void addComposited(Collection p0){} + public void addComposited(Collection p0, Collection p1){} + public void addComposited(Collection... p0){} + public void clear(){} + public void removeComposited(Collection p0){} + public void setMutator(CompositeCollection.CollectionMutator p0){} + static public interface CollectionMutator extends Serializable + { + boolean add(CompositeCollection p0, List> p1, E p2); + boolean addAll(CompositeCollection p0, List> p1, Collection p2); + boolean remove(CompositeCollection p0, List> p1, Object p2); + } +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/collection/IndexedCollection.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/collection/IndexedCollection.java new file mode 100644 index 00000000000..a27e2c2872b --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/collection/IndexedCollection.java @@ -0,0 +1,29 @@ +// Generated automatically from org.apache.commons.collections4.collection.IndexedCollection for testing purposes + +package org.apache.commons.collections4.collection; + +import java.util.Collection; +import java.util.function.Predicate; +import org.apache.commons.collections4.MultiMap; +import org.apache.commons.collections4.Transformer; +import org.apache.commons.collections4.collection.AbstractCollectionDecorator; + +public class IndexedCollection extends AbstractCollectionDecorator +{ + protected IndexedCollection() {} + public C get(K p0){ return null; } + public Collection values(K p0){ return null; } + public IndexedCollection(Collection p0, Transformer p1, MultiMap p2, boolean p3){} + public boolean add(C p0){ return false; } + public boolean addAll(Collection p0){ return false; } + public boolean contains(Object p0){ return false; } + public boolean containsAll(Collection p0){ return false; } + public boolean remove(Object p0){ return false; } + public boolean removeAll(Collection p0){ return false; } + public boolean removeIf(Predicate p0){ return false; } + public boolean retainAll(Collection p0){ return false; } + public static IndexedCollection nonUniqueIndexedCollection(Collection p0, Transformer p1){ return null; } + public static IndexedCollection uniqueIndexedCollection(Collection p0, Transformer p1){ return null; } + public void clear(){} + public void reindex(){} +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/collection/PredicatedCollection.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/collection/PredicatedCollection.java new file mode 100644 index 00000000000..1a27a4b7d05 --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/collection/PredicatedCollection.java @@ -0,0 +1,43 @@ +// Generated automatically from org.apache.commons.collections4.collection.PredicatedCollection for testing purposes + +package org.apache.commons.collections4.collection; + +import java.util.Collection; +import java.util.List; +import java.util.Queue; +import java.util.Set; +import org.apache.commons.collections4.Bag; +import org.apache.commons.collections4.MultiSet; +import org.apache.commons.collections4.Predicate; +import org.apache.commons.collections4.collection.AbstractCollectionDecorator; + +public class PredicatedCollection extends AbstractCollectionDecorator +{ + protected PredicatedCollection() {} + protected PredicatedCollection(Collection p0, Predicate p1){} + protected final Predicate predicate = null; + protected void validate(E p0){} + public boolean add(E p0){ return false; } + public boolean addAll(Collection p0){ return false; } + public static PredicatedCollection.Builder builder(Predicate p0){ return null; } + public static PredicatedCollection.Builder notNullBuilder(){ return null; } + public static PredicatedCollection predicatedCollection(Collection p0, Predicate p1){ return null; } + static public class Builder + { + protected Builder() {} + public Bag createPredicatedBag(){ return null; } + public Bag createPredicatedBag(Bag p0){ return null; } + public Builder(Predicate p0){} + public Collection rejectedElements(){ return null; } + public List createPredicatedList(){ return null; } + public List createPredicatedList(List p0){ return null; } + public MultiSet createPredicatedMultiSet(){ return null; } + public MultiSet createPredicatedMultiSet(MultiSet p0){ return null; } + public PredicatedCollection.Builder add(E p0){ return null; } + public PredicatedCollection.Builder addAll(Collection p0){ return null; } + public Queue createPredicatedQueue(){ return null; } + public Queue createPredicatedQueue(Queue p0){ return null; } + public Set createPredicatedSet(){ return null; } + public Set createPredicatedSet(Set p0){ return null; } + } +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/collection/SynchronizedCollection.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/collection/SynchronizedCollection.java new file mode 100644 index 00000000000..a5cee14caad --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/collection/SynchronizedCollection.java @@ -0,0 +1,35 @@ +// Generated automatically from org.apache.commons.collections4.collection.SynchronizedCollection for testing purposes + +package org.apache.commons.collections4.collection; + +import java.io.Serializable; +import java.util.Collection; +import java.util.Iterator; +import java.util.function.Predicate; + +public class SynchronizedCollection implements Collection, Serializable +{ + protected SynchronizedCollection() {} + protected Collection decorated(){ return null; } + protected SynchronizedCollection(Collection p0){} + protected SynchronizedCollection(Collection p0, Object p1){} + protected final Object lock = null; + public T[] toArray(T[] p0){ return null; } + public Iterator iterator(){ return null; } + public Object[] toArray(){ return null; } + public String toString(){ return null; } + public boolean add(E p0){ return false; } + public boolean addAll(Collection p0){ return false; } + public boolean contains(Object p0){ return false; } + public boolean containsAll(Collection p0){ return false; } + public boolean equals(Object p0){ return false; } + public boolean isEmpty(){ return false; } + public boolean remove(Object p0){ return false; } + public boolean removeAll(Collection p0){ return false; } + public boolean removeIf(Predicate p0){ return false; } + public boolean retainAll(Collection p0){ return false; } + public int hashCode(){ return 0; } + public int size(){ return 0; } + public static SynchronizedCollection synchronizedCollection(Collection p0){ return null; } + public void clear(){} +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/collection/TransformedCollection.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/collection/TransformedCollection.java new file mode 100644 index 00000000000..92abb09f605 --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/collection/TransformedCollection.java @@ -0,0 +1,20 @@ +// Generated automatically from org.apache.commons.collections4.collection.TransformedCollection for testing purposes + +package org.apache.commons.collections4.collection; + +import java.util.Collection; +import org.apache.commons.collections4.Transformer; +import org.apache.commons.collections4.collection.AbstractCollectionDecorator; + +public class TransformedCollection extends AbstractCollectionDecorator +{ + protected TransformedCollection() {} + protected Collection transform(Collection p0){ return null; } + protected E transform(E p0){ return null; } + protected TransformedCollection(Collection p0, Transformer p1){} + protected final Transformer transformer = null; + public boolean add(E p0){ return false; } + public boolean addAll(Collection p0){ return false; } + public static TransformedCollection transformedCollection(Collection p0, Transformer p1){ return null; } + public static TransformedCollection transformingCollection(Collection p0, Transformer p1){ return null; } +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/collection/UnmodifiableBoundedCollection.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/collection/UnmodifiableBoundedCollection.java new file mode 100644 index 00000000000..d5108904143 --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/collection/UnmodifiableBoundedCollection.java @@ -0,0 +1,28 @@ +// Generated automatically from org.apache.commons.collections4.collection.UnmodifiableBoundedCollection for testing purposes + +package org.apache.commons.collections4.collection; + +import java.util.Collection; +import java.util.Iterator; +import java.util.function.Predicate; +import org.apache.commons.collections4.BoundedCollection; +import org.apache.commons.collections4.Unmodifiable; +import org.apache.commons.collections4.collection.AbstractCollectionDecorator; + +public class UnmodifiableBoundedCollection extends AbstractCollectionDecorator implements BoundedCollection, Unmodifiable +{ + protected UnmodifiableBoundedCollection() {} + protected BoundedCollection decorated(){ return null; } + public Iterator iterator(){ return null; } + public boolean add(E p0){ return false; } + public boolean addAll(Collection p0){ return false; } + public boolean isFull(){ return false; } + public boolean remove(Object p0){ return false; } + public boolean removeAll(Collection p0){ return false; } + public boolean removeIf(Predicate p0){ return false; } + public boolean retainAll(Collection p0){ return false; } + public int maxSize(){ return 0; } + public static BoundedCollection unmodifiableBoundedCollection(BoundedCollection p0){ return null; } + public static BoundedCollection unmodifiableBoundedCollection(Collection p0){ return null; } + public void clear(){} +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/collection/UnmodifiableCollection.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/collection/UnmodifiableCollection.java new file mode 100644 index 00000000000..fe8a36abd81 --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/collection/UnmodifiableCollection.java @@ -0,0 +1,23 @@ +// Generated automatically from org.apache.commons.collections4.collection.UnmodifiableCollection for testing purposes + +package org.apache.commons.collections4.collection; + +import java.util.Collection; +import java.util.Iterator; +import java.util.function.Predicate; +import org.apache.commons.collections4.Unmodifiable; +import org.apache.commons.collections4.collection.AbstractCollectionDecorator; + +public class UnmodifiableCollection extends AbstractCollectionDecorator implements Unmodifiable +{ + protected UnmodifiableCollection() {} + public Iterator iterator(){ return null; } + public boolean add(E p0){ return false; } + public boolean addAll(Collection p0){ return false; } + public boolean remove(Object p0){ return false; } + public boolean removeAll(Collection p0){ return false; } + public boolean removeIf(Predicate p0){ return false; } + public boolean retainAll(Collection p0){ return false; } + public static Collection unmodifiableCollection(Collection p0){ return null; } + public void clear(){} +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/AbstractListIteratorDecorator.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/AbstractListIteratorDecorator.java new file mode 100644 index 00000000000..806828bdc20 --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/AbstractListIteratorDecorator.java @@ -0,0 +1,21 @@ +// Generated automatically from org.apache.commons.collections4.iterators.AbstractListIteratorDecorator for testing purposes + +package org.apache.commons.collections4.iterators; + +import java.util.ListIterator; + +public class AbstractListIteratorDecorator implements ListIterator +{ + protected AbstractListIteratorDecorator() {} + protected ListIterator getListIterator(){ return null; } + public AbstractListIteratorDecorator(ListIterator p0){} + public E next(){ return null; } + public E previous(){ return null; } + public boolean hasNext(){ return false; } + public boolean hasPrevious(){ return false; } + public int nextIndex(){ return 0; } + public int previousIndex(){ return 0; } + public void add(E p0){} + public void remove(){} + public void set(E p0){} +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/AbstractMapIteratorDecorator.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/AbstractMapIteratorDecorator.java new file mode 100644 index 00000000000..f4369771782 --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/AbstractMapIteratorDecorator.java @@ -0,0 +1,18 @@ +// Generated automatically from org.apache.commons.collections4.iterators.AbstractMapIteratorDecorator for testing purposes + +package org.apache.commons.collections4.iterators; + +import org.apache.commons.collections4.MapIterator; + +public class AbstractMapIteratorDecorator implements MapIterator +{ + protected AbstractMapIteratorDecorator() {} + protected MapIterator getMapIterator(){ return null; } + public AbstractMapIteratorDecorator(MapIterator p0){} + public K getKey(){ return null; } + public K next(){ return null; } + public V getValue(){ return null; } + public V setValue(V p0){ return null; } + public boolean hasNext(){ return false; } + public void remove(){} +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/AbstractOrderedMapIteratorDecorator.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/AbstractOrderedMapIteratorDecorator.java new file mode 100644 index 00000000000..cd80159d26a --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/AbstractOrderedMapIteratorDecorator.java @@ -0,0 +1,20 @@ +// Generated automatically from org.apache.commons.collections4.iterators.AbstractOrderedMapIteratorDecorator for testing purposes + +package org.apache.commons.collections4.iterators; + +import org.apache.commons.collections4.OrderedMapIterator; + +public class AbstractOrderedMapIteratorDecorator implements OrderedMapIterator +{ + protected AbstractOrderedMapIteratorDecorator() {} + protected OrderedMapIterator getOrderedMapIterator(){ return null; } + public AbstractOrderedMapIteratorDecorator(OrderedMapIterator p0){} + public K getKey(){ return null; } + public K next(){ return null; } + public K previous(){ return null; } + public V getValue(){ return null; } + public V setValue(V p0){ return null; } + public boolean hasNext(){ return false; } + public boolean hasPrevious(){ return false; } + public void remove(){} +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/ArrayIterator.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/ArrayIterator.java new file mode 100644 index 00000000000..c2c9cd2ff44 --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/ArrayIterator.java @@ -0,0 +1,21 @@ +// Generated automatically from org.apache.commons.collections4.iterators.ArrayIterator for testing purposes + +package org.apache.commons.collections4.iterators; + +import org.apache.commons.collections4.ResettableIterator; + +public class ArrayIterator implements ResettableIterator +{ + protected ArrayIterator() {} + protected void checkBound(int p0, int p1, String p2){} + public ArrayIterator(Object p0){} + public ArrayIterator(Object p0, int p1){} + public ArrayIterator(Object p0, int p1, int p2){} + public E next(){ return null; } + public Object getArray(){ return null; } + public boolean hasNext(){ return false; } + public int getEndIndex(){ return 0; } + public int getStartIndex(){ return 0; } + public void remove(){} + public void reset(){} +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/ArrayListIterator.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/ArrayListIterator.java new file mode 100644 index 00000000000..22adf916a7d --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/ArrayListIterator.java @@ -0,0 +1,22 @@ +// Generated automatically from org.apache.commons.collections4.iterators.ArrayListIterator for testing purposes + +package org.apache.commons.collections4.iterators; + +import org.apache.commons.collections4.ResettableListIterator; +import org.apache.commons.collections4.iterators.ArrayIterator; + +public class ArrayListIterator extends ArrayIterator implements ResettableListIterator +{ + protected ArrayListIterator() {} + public ArrayListIterator(Object p0){} + public ArrayListIterator(Object p0, int p1){} + public ArrayListIterator(Object p0, int p1, int p2){} + public E next(){ return null; } + public E previous(){ return null; } + public boolean hasPrevious(){ return false; } + public int nextIndex(){ return 0; } + public int previousIndex(){ return 0; } + public void add(Object p0){} + public void reset(){} + public void set(Object p0){} +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/CollatingIterator.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/CollatingIterator.java new file mode 100644 index 00000000000..524ac37e3ef --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/CollatingIterator.java @@ -0,0 +1,27 @@ +// Generated automatically from org.apache.commons.collections4.iterators.CollatingIterator for testing purposes + +package org.apache.commons.collections4.iterators; + +import java.util.Collection; +import java.util.Comparator; +import java.util.Iterator; +import java.util.List; + +public class CollatingIterator implements Iterator +{ + public CollatingIterator(){} + public CollatingIterator(Comparator p0){} + public CollatingIterator(Comparator p0, Collection> p1){} + public CollatingIterator(Comparator p0, Iterator p1, Iterator p2){} + public CollatingIterator(Comparator p0, Iterator[] p1){} + public CollatingIterator(Comparator p0, int p1){} + public Comparator getComparator(){ return null; } + public E next(){ return null; } + public List> getIterators(){ return null; } + public boolean hasNext(){ return false; } + public int getIteratorIndex(){ return 0; } + public void addIterator(Iterator p0){} + public void remove(){} + public void setComparator(Comparator p0){} + public void setIterator(int p0, Iterator p1){} +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/EnumerationIterator.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/EnumerationIterator.java new file mode 100644 index 00000000000..fa1934b73cc --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/EnumerationIterator.java @@ -0,0 +1,19 @@ +// Generated automatically from org.apache.commons.collections4.iterators.EnumerationIterator for testing purposes + +package org.apache.commons.collections4.iterators; + +import java.util.Collection; +import java.util.Enumeration; +import java.util.Iterator; + +public class EnumerationIterator implements Iterator +{ + public E next(){ return null; } + public Enumeration getEnumeration(){ return null; } + public EnumerationIterator(){} + public EnumerationIterator(Enumeration p0){} + public EnumerationIterator(Enumeration p0, Collection p1){} + public boolean hasNext(){ return false; } + public void remove(){} + public void setEnumeration(Enumeration p0){} +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/FilterIterator.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/FilterIterator.java new file mode 100644 index 00000000000..f0070748b30 --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/FilterIterator.java @@ -0,0 +1,20 @@ +// Generated automatically from org.apache.commons.collections4.iterators.FilterIterator for testing purposes + +package org.apache.commons.collections4.iterators; + +import java.util.Iterator; +import org.apache.commons.collections4.Predicate; + +public class FilterIterator implements Iterator +{ + public E next(){ return null; } + public FilterIterator(){} + public FilterIterator(Iterator p0){} + public FilterIterator(Iterator p0, Predicate p1){} + public Iterator getIterator(){ return null; } + public Predicate getPredicate(){ return null; } + public boolean hasNext(){ return false; } + public void remove(){} + public void setIterator(Iterator p0){} + public void setPredicate(Predicate p0){} +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/FilterListIterator.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/FilterListIterator.java new file mode 100644 index 00000000000..dbaea3c5a1a --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/FilterListIterator.java @@ -0,0 +1,27 @@ +// Generated automatically from org.apache.commons.collections4.iterators.FilterListIterator for testing purposes + +package org.apache.commons.collections4.iterators; + +import java.util.ListIterator; +import org.apache.commons.collections4.Predicate; + +public class FilterListIterator implements ListIterator +{ + public E next(){ return null; } + public E previous(){ return null; } + public FilterListIterator(){} + public FilterListIterator(ListIterator p0){} + public FilterListIterator(ListIterator p0, Predicate p1){} + public FilterListIterator(Predicate p0){} + public ListIterator getListIterator(){ return null; } + public Predicate getPredicate(){ return null; } + public boolean hasNext(){ return false; } + public boolean hasPrevious(){ return false; } + public int nextIndex(){ return 0; } + public int previousIndex(){ return 0; } + public void add(E p0){} + public void remove(){} + public void set(E p0){} + public void setListIterator(ListIterator p0){} + public void setPredicate(Predicate p0){} +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/IteratorChain.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/IteratorChain.java new file mode 100644 index 00000000000..8278c401464 --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/IteratorChain.java @@ -0,0 +1,22 @@ +// Generated automatically from org.apache.commons.collections4.iterators.IteratorChain for testing purposes + +package org.apache.commons.collections4.iterators; + +import java.util.Collection; +import java.util.Iterator; + +public class IteratorChain implements Iterator +{ + protected void updateCurrentIterator(){} + public E next(){ return null; } + public IteratorChain(){} + public IteratorChain(Collection> p0){} + public IteratorChain(Iterator p0){} + public IteratorChain(Iterator p0, Iterator p1){} + public IteratorChain(Iterator... p0){} + public boolean hasNext(){ return false; } + public boolean isLocked(){ return false; } + public int size(){ return 0; } + public void addIterator(Iterator p0){} + public void remove(){} +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/IteratorIterable.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/IteratorIterable.java new file mode 100644 index 00000000000..ccecd51ccbb --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/IteratorIterable.java @@ -0,0 +1,13 @@ +// Generated automatically from org.apache.commons.collections4.iterators.IteratorIterable for testing purposes + +package org.apache.commons.collections4.iterators; + +import java.util.Iterator; + +public class IteratorIterable implements Iterable +{ + protected IteratorIterable() {} + public Iterator iterator(){ return null; } + public IteratorIterable(Iterator p0){} + public IteratorIterable(Iterator p0, boolean p1){} +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/ListIteratorWrapper.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/ListIteratorWrapper.java new file mode 100644 index 00000000000..56d742b41d9 --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/ListIteratorWrapper.java @@ -0,0 +1,22 @@ +// Generated automatically from org.apache.commons.collections4.iterators.ListIteratorWrapper for testing purposes + +package org.apache.commons.collections4.iterators; + +import java.util.Iterator; +import org.apache.commons.collections4.ResettableListIterator; + +public class ListIteratorWrapper implements ResettableListIterator +{ + protected ListIteratorWrapper() {} + public E next(){ return null; } + public E previous(){ return null; } + public ListIteratorWrapper(Iterator p0){} + public boolean hasNext(){ return false; } + public boolean hasPrevious(){ return false; } + public int nextIndex(){ return 0; } + public int previousIndex(){ return 0; } + public void add(E p0){} + public void remove(){} + public void reset(){} + public void set(E p0){} +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/LoopingIterator.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/LoopingIterator.java new file mode 100644 index 00000000000..3723fbf0af6 --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/LoopingIterator.java @@ -0,0 +1,17 @@ +// Generated automatically from org.apache.commons.collections4.iterators.LoopingIterator for testing purposes + +package org.apache.commons.collections4.iterators; + +import java.util.Collection; +import org.apache.commons.collections4.ResettableIterator; + +public class LoopingIterator implements ResettableIterator +{ + protected LoopingIterator() {} + public E next(){ return null; } + public LoopingIterator(Collection p0){} + public boolean hasNext(){ return false; } + public int size(){ return 0; } + public void remove(){} + public void reset(){} +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/LoopingListIterator.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/LoopingListIterator.java new file mode 100644 index 00000000000..e44f67ec1d4 --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/LoopingListIterator.java @@ -0,0 +1,23 @@ +// Generated automatically from org.apache.commons.collections4.iterators.LoopingListIterator for testing purposes + +package org.apache.commons.collections4.iterators; + +import java.util.List; +import org.apache.commons.collections4.ResettableListIterator; + +public class LoopingListIterator implements ResettableListIterator +{ + protected LoopingListIterator() {} + public E next(){ return null; } + public E previous(){ return null; } + public LoopingListIterator(List p0){} + public boolean hasNext(){ return false; } + public boolean hasPrevious(){ return false; } + public int nextIndex(){ return 0; } + public int previousIndex(){ return 0; } + public int size(){ return 0; } + public void add(E p0){} + public void remove(){} + public void reset(){} + public void set(E p0){} +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/ObjectArrayIterator.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/ObjectArrayIterator.java new file mode 100644 index 00000000000..582a8dce796 --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/ObjectArrayIterator.java @@ -0,0 +1,20 @@ +// Generated automatically from org.apache.commons.collections4.iterators.ObjectArrayIterator for testing purposes + +package org.apache.commons.collections4.iterators; + +import org.apache.commons.collections4.ResettableIterator; + +public class ObjectArrayIterator implements ResettableIterator +{ + protected ObjectArrayIterator() {} + public E next(){ return null; } + public E[] getArray(){ return null; } + public ObjectArrayIterator(E... p0){} + public ObjectArrayIterator(E[] p0, int p1){} + public ObjectArrayIterator(E[] p0, int p1, int p2){} + public boolean hasNext(){ return false; } + public int getEndIndex(){ return 0; } + public int getStartIndex(){ return 0; } + public void remove(){} + public void reset(){} +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/ObjectArrayListIterator.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/ObjectArrayListIterator.java new file mode 100644 index 00000000000..0dd15a8dd1a --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/ObjectArrayListIterator.java @@ -0,0 +1,22 @@ +// Generated automatically from org.apache.commons.collections4.iterators.ObjectArrayListIterator for testing purposes + +package org.apache.commons.collections4.iterators; + +import org.apache.commons.collections4.ResettableListIterator; +import org.apache.commons.collections4.iterators.ObjectArrayIterator; + +public class ObjectArrayListIterator extends ObjectArrayIterator implements ResettableListIterator +{ + protected ObjectArrayListIterator() {} + public E next(){ return null; } + public E previous(){ return null; } + public ObjectArrayListIterator(E... p0){} + public ObjectArrayListIterator(E[] p0, int p1){} + public ObjectArrayListIterator(E[] p0, int p1, int p2){} + public boolean hasPrevious(){ return false; } + public int nextIndex(){ return 0; } + public int previousIndex(){ return 0; } + public void add(E p0){} + public void reset(){} + public void set(E p0){} +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/PeekingIterator.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/PeekingIterator.java new file mode 100644 index 00000000000..ad692178b32 --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/PeekingIterator.java @@ -0,0 +1,17 @@ +// Generated automatically from org.apache.commons.collections4.iterators.PeekingIterator for testing purposes + +package org.apache.commons.collections4.iterators; + +import java.util.Iterator; + +public class PeekingIterator implements Iterator +{ + protected PeekingIterator() {} + public E element(){ return null; } + public E next(){ return null; } + public E peek(){ return null; } + public PeekingIterator(Iterator p0){} + public boolean hasNext(){ return false; } + public static PeekingIterator peekingIterator(Iterator p0){ return null; } + public void remove(){} +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/PermutationIterator.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/PermutationIterator.java new file mode 100644 index 00000000000..df9ae228595 --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/PermutationIterator.java @@ -0,0 +1,16 @@ +// Generated automatically from org.apache.commons.collections4.iterators.PermutationIterator for testing purposes + +package org.apache.commons.collections4.iterators; + +import java.util.Collection; +import java.util.Iterator; +import java.util.List; + +public class PermutationIterator implements Iterator> +{ + protected PermutationIterator() {} + public List next(){ return null; } + public PermutationIterator(Collection p0){} + public boolean hasNext(){ return false; } + public void remove(){} +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/PushbackIterator.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/PushbackIterator.java new file mode 100644 index 00000000000..d2979309396 --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/PushbackIterator.java @@ -0,0 +1,16 @@ +// Generated automatically from org.apache.commons.collections4.iterators.PushbackIterator for testing purposes + +package org.apache.commons.collections4.iterators; + +import java.util.Iterator; + +public class PushbackIterator implements Iterator +{ + protected PushbackIterator() {} + public E next(){ return null; } + public PushbackIterator(Iterator p0){} + public boolean hasNext(){ return false; } + public static PushbackIterator pushbackIterator(Iterator p0){ return null; } + public void pushback(E p0){} + public void remove(){} +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/ReverseListIterator.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/ReverseListIterator.java new file mode 100644 index 00000000000..d20b3114bf9 --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/ReverseListIterator.java @@ -0,0 +1,22 @@ +// Generated automatically from org.apache.commons.collections4.iterators.ReverseListIterator for testing purposes + +package org.apache.commons.collections4.iterators; + +import java.util.List; +import org.apache.commons.collections4.ResettableListIterator; + +public class ReverseListIterator implements ResettableListIterator +{ + protected ReverseListIterator() {} + public E next(){ return null; } + public E previous(){ return null; } + public ReverseListIterator(List p0){} + public boolean hasNext(){ return false; } + public boolean hasPrevious(){ return false; } + public int nextIndex(){ return 0; } + public int previousIndex(){ return 0; } + public void add(E p0){} + public void remove(){} + public void reset(){} + public void set(E p0){} +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/SingletonIterator.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/SingletonIterator.java new file mode 100644 index 00000000000..17a8100312c --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/SingletonIterator.java @@ -0,0 +1,16 @@ +// Generated automatically from org.apache.commons.collections4.iterators.SingletonIterator for testing purposes + +package org.apache.commons.collections4.iterators; + +import org.apache.commons.collections4.ResettableIterator; + +public class SingletonIterator implements ResettableIterator +{ + protected SingletonIterator() {} + public E next(){ return null; } + public SingletonIterator(E p0){} + public SingletonIterator(E p0, boolean p1){} + public boolean hasNext(){ return false; } + public void remove(){} + public void reset(){} +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/SingletonListIterator.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/SingletonListIterator.java new file mode 100644 index 00000000000..ce63beac141 --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/SingletonListIterator.java @@ -0,0 +1,21 @@ +// Generated automatically from org.apache.commons.collections4.iterators.SingletonListIterator for testing purposes + +package org.apache.commons.collections4.iterators; + +import org.apache.commons.collections4.ResettableListIterator; + +public class SingletonListIterator implements ResettableListIterator +{ + protected SingletonListIterator() {} + public E next(){ return null; } + public E previous(){ return null; } + public SingletonListIterator(E p0){} + public boolean hasNext(){ return false; } + public boolean hasPrevious(){ return false; } + public int nextIndex(){ return 0; } + public int previousIndex(){ return 0; } + public void add(E p0){} + public void remove(){} + public void reset(){} + public void set(E p0){} +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/UniqueFilterIterator.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/UniqueFilterIterator.java new file mode 100644 index 00000000000..6715ca9b068 --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/UniqueFilterIterator.java @@ -0,0 +1,12 @@ +// Generated automatically from org.apache.commons.collections4.iterators.UniqueFilterIterator for testing purposes + +package org.apache.commons.collections4.iterators; + +import java.util.Iterator; +import org.apache.commons.collections4.iterators.FilterIterator; + +public class UniqueFilterIterator extends FilterIterator +{ + protected UniqueFilterIterator() {} + public UniqueFilterIterator(Iterator p0){} +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/UnmodifiableIterator.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/UnmodifiableIterator.java new file mode 100644 index 00000000000..bc654382d2c --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/UnmodifiableIterator.java @@ -0,0 +1,15 @@ +// Generated automatically from org.apache.commons.collections4.iterators.UnmodifiableIterator for testing purposes + +package org.apache.commons.collections4.iterators; + +import java.util.Iterator; +import org.apache.commons.collections4.Unmodifiable; + +public class UnmodifiableIterator implements Iterator, Unmodifiable +{ + protected UnmodifiableIterator() {} + public E next(){ return null; } + public boolean hasNext(){ return false; } + public static Iterator unmodifiableIterator(Iterator p0){ return null; } + public void remove(){} +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/UnmodifiableListIterator.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/UnmodifiableListIterator.java new file mode 100644 index 00000000000..f3ccd8d0801 --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/UnmodifiableListIterator.java @@ -0,0 +1,21 @@ +// Generated automatically from org.apache.commons.collections4.iterators.UnmodifiableListIterator for testing purposes + +package org.apache.commons.collections4.iterators; + +import java.util.ListIterator; +import org.apache.commons.collections4.Unmodifiable; + +public class UnmodifiableListIterator implements ListIterator, Unmodifiable +{ + protected UnmodifiableListIterator() {} + public E next(){ return null; } + public E previous(){ return null; } + public boolean hasNext(){ return false; } + public boolean hasPrevious(){ return false; } + public int nextIndex(){ return 0; } + public int previousIndex(){ return 0; } + public static ListIterator umodifiableListIterator(ListIterator p0){ return null; } + public void add(E p0){} + public void remove(){} + public void set(E p0){} +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/UnmodifiableMapIterator.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/UnmodifiableMapIterator.java new file mode 100644 index 00000000000..1bda0b91563 --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/UnmodifiableMapIterator.java @@ -0,0 +1,18 @@ +// Generated automatically from org.apache.commons.collections4.iterators.UnmodifiableMapIterator for testing purposes + +package org.apache.commons.collections4.iterators; + +import org.apache.commons.collections4.MapIterator; +import org.apache.commons.collections4.Unmodifiable; + +public class UnmodifiableMapIterator implements MapIterator, Unmodifiable +{ + protected UnmodifiableMapIterator() {} + public K getKey(){ return null; } + public K next(){ return null; } + public V getValue(){ return null; } + public V setValue(V p0){ return null; } + public boolean hasNext(){ return false; } + public static MapIterator unmodifiableMapIterator(MapIterator p0){ return null; } + public void remove(){} +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/UnmodifiableOrderedMapIterator.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/UnmodifiableOrderedMapIterator.java new file mode 100644 index 00000000000..2ae7ea130b4 --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/iterators/UnmodifiableOrderedMapIterator.java @@ -0,0 +1,20 @@ +// Generated automatically from org.apache.commons.collections4.iterators.UnmodifiableOrderedMapIterator for testing purposes + +package org.apache.commons.collections4.iterators; + +import org.apache.commons.collections4.OrderedMapIterator; +import org.apache.commons.collections4.Unmodifiable; + +public class UnmodifiableOrderedMapIterator implements OrderedMapIterator, Unmodifiable +{ + protected UnmodifiableOrderedMapIterator() {} + public K getKey(){ return null; } + public K next(){ return null; } + public K previous(){ return null; } + public V getValue(){ return null; } + public V setValue(V p0){ return null; } + public boolean hasNext(){ return false; } + public boolean hasPrevious(){ return false; } + public static OrderedMapIterator unmodifiableOrderedMapIterator(OrderedMapIterator p0){ return null; } + public void remove(){} +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/keyvalue/MultiKey.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/keyvalue/MultiKey.java new file mode 100644 index 00000000000..c9c8bdc94cf --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/keyvalue/MultiKey.java @@ -0,0 +1,23 @@ +// Generated automatically from org.apache.commons.collections4.keyvalue.MultiKey for testing purposes + +package org.apache.commons.collections4.keyvalue; + +import java.io.Serializable; + +public class MultiKey implements Serializable +{ + protected MultiKey() {} + protected Object readResolve(){ return null; } + public K getKey(int p0){ return null; } + public K[] getKeys(){ return null; } + public MultiKey(K p0, K p1){} + public MultiKey(K p0, K p1, K p2){} + public MultiKey(K p0, K p1, K p2, K p3){} + public MultiKey(K p0, K p1, K p2, K p3, K p4){} + public MultiKey(K[] p0){} + public MultiKey(K[] p0, boolean p1){} + public String toString(){ return null; } + public boolean equals(Object p0){ return false; } + public int hashCode(){ return 0; } + public int size(){ return 0; } +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/list/AbstractLinkedList.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/list/AbstractLinkedList.java new file mode 100644 index 00000000000..309ba46990a --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/list/AbstractLinkedList.java @@ -0,0 +1,119 @@ +// Generated automatically from org.apache.commons.collections4.list.AbstractLinkedList for testing purposes + +package org.apache.commons.collections4.list; + +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.util.AbstractList; +import java.util.Collection; +import java.util.Iterator; +import java.util.List; +import java.util.ListIterator; +import org.apache.commons.collections4.OrderedIterator; + +abstract public class AbstractLinkedList implements List +{ + protected AbstractLinkedList(){} + protected AbstractLinkedList(Collection p0){} + protected AbstractLinkedList.Node createHeaderNode(){ return null; } + protected AbstractLinkedList.Node createNode(E p0){ return null; } + protected AbstractLinkedList.Node getNode(int p0, boolean p1){ return null; } + protected Iterator createSubListIterator(AbstractLinkedList.LinkedSubList p0){ return null; } + protected ListIterator createSubListListIterator(AbstractLinkedList.LinkedSubList p0, int p1){ return null; } + protected boolean isEqualValue(Object p0, Object p1){ return false; } + protected void addNode(AbstractLinkedList.Node p0, AbstractLinkedList.Node p1){} + protected void addNodeAfter(AbstractLinkedList.Node p0, E p1){} + protected void addNodeBefore(AbstractLinkedList.Node p0, E p1){} + protected void doReadObject(ObjectInputStream p0){} + protected void doWriteObject(ObjectOutputStream p0){} + protected void init(){} + protected void removeAllNodes(){} + protected void removeNode(AbstractLinkedList.Node p0){} + protected void updateNode(AbstractLinkedList.Node p0, E p1){} + public T[] toArray(T[] p0){ return null; } + public E get(int p0){ return null; } + public E getFirst(){ return null; } + public E getLast(){ return null; } + public E remove(int p0){ return null; } + public E removeFirst(){ return null; } + public E removeLast(){ return null; } + public E set(int p0, E p1){ return null; } + public Iterator iterator(){ return null; } + public List subList(int p0, int p1){ return null; } + public ListIterator listIterator(){ return null; } + public ListIterator listIterator(int p0){ return null; } + public Object[] toArray(){ return null; } + public String toString(){ return null; } + public boolean add(E p0){ return false; } + public boolean addAll(Collection p0){ return false; } + public boolean addAll(int p0, Collection p1){ return false; } + public boolean addFirst(E p0){ return false; } + public boolean addLast(E p0){ return false; } + public boolean contains(Object p0){ return false; } + public boolean containsAll(Collection p0){ return false; } + public boolean equals(Object p0){ return false; } + public boolean isEmpty(){ return false; } + public boolean remove(Object p0){ return false; } + public boolean removeAll(Collection p0){ return false; } + public boolean retainAll(Collection p0){ return false; } + public int hashCode(){ return 0; } + public int indexOf(Object p0){ return 0; } + public int lastIndexOf(Object p0){ return 0; } + public int size(){ return 0; } + public void add(int p0, E p1){} + public void clear(){} + static class LinkedListIterator implements ListIterator, OrderedIterator + { + protected LinkedListIterator() {} + protected AbstractLinkedList.Node current = null; + protected AbstractLinkedList.Node getLastNodeReturned(){ return null; } + protected AbstractLinkedList.Node next = null; + protected LinkedListIterator(AbstractLinkedList p0, int p1){} + protected final AbstractLinkedList parent = null; + protected int expectedModCount = 0; + protected int nextIndex = 0; + protected void checkModCount(){} + public E next(){ return null; } + public E previous(){ return null; } + public boolean hasNext(){ return false; } + public boolean hasPrevious(){ return false; } + public int nextIndex(){ return 0; } + public int previousIndex(){ return 0; } + public void add(E p0){} + public void remove(){} + public void set(E p0){} + } + static class LinkedSubList extends AbstractList + { + protected LinkedSubList() {} + protected LinkedSubList(AbstractLinkedList p0, int p1, int p2){} + protected void checkModCount(){} + protected void rangeCheck(int p0, int p1){} + public E get(int p0){ return null; } + public E remove(int p0){ return null; } + public E set(int p0, E p1){ return null; } + public Iterator iterator(){ return null; } + public List subList(int p0, int p1){ return null; } + public ListIterator listIterator(int p0){ return null; } + public boolean addAll(Collection p0){ return false; } + public boolean addAll(int p0, Collection p1){ return false; } + public int size(){ return 0; } + public void add(int p0, E p1){} + public void clear(){} + } + static class Node + { + protected AbstractLinkedList.Node getNextNode(){ return null; } + protected AbstractLinkedList.Node getPreviousNode(){ return null; } + protected AbstractLinkedList.Node next = null; + protected AbstractLinkedList.Node previous = null; + protected E getValue(){ return null; } + protected E value = null; + protected Node(){} + protected Node(AbstractLinkedList.Node p0, AbstractLinkedList.Node p1, E p2){} + protected Node(E p0){} + protected void setNextNode(AbstractLinkedList.Node p0){} + protected void setPreviousNode(AbstractLinkedList.Node p0){} + protected void setValue(E p0){} + } +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/list/AbstractListDecorator.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/list/AbstractListDecorator.java new file mode 100644 index 00000000000..06363654141 --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/list/AbstractListDecorator.java @@ -0,0 +1,27 @@ +// Generated automatically from org.apache.commons.collections4.list.AbstractListDecorator for testing purposes + +package org.apache.commons.collections4.list; + +import java.util.Collection; +import java.util.List; +import java.util.ListIterator; +import org.apache.commons.collections4.collection.AbstractCollectionDecorator; + +abstract public class AbstractListDecorator extends AbstractCollectionDecorator implements List +{ + protected AbstractListDecorator(){} + protected AbstractListDecorator(List p0){} + protected List decorated(){ return null; } + public E get(int p0){ return null; } + public E remove(int p0){ return null; } + public E set(int p0, E p1){ return null; } + public List subList(int p0, int p1){ return null; } + public ListIterator listIterator(){ return null; } + public ListIterator listIterator(int p0){ return null; } + public boolean addAll(int p0, Collection p1){ return false; } + public boolean equals(Object p0){ return false; } + public int hashCode(){ return 0; } + public int indexOf(Object p0){ return 0; } + public int lastIndexOf(Object p0){ return 0; } + public void add(int p0, E p1){} +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/list/AbstractSerializableListDecorator.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/list/AbstractSerializableListDecorator.java new file mode 100644 index 00000000000..c7359c695c2 --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/list/AbstractSerializableListDecorator.java @@ -0,0 +1,12 @@ +// Generated automatically from org.apache.commons.collections4.list.AbstractSerializableListDecorator for testing purposes + +package org.apache.commons.collections4.list; + +import java.util.List; +import org.apache.commons.collections4.list.AbstractListDecorator; + +abstract public class AbstractSerializableListDecorator extends AbstractListDecorator +{ + protected AbstractSerializableListDecorator() {} + protected AbstractSerializableListDecorator(List p0){} +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/list/CursorableLinkedList.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/list/CursorableLinkedList.java new file mode 100644 index 00000000000..aa6e30ac7ea --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/list/CursorableLinkedList.java @@ -0,0 +1,44 @@ +// Generated automatically from org.apache.commons.collections4.list.CursorableLinkedList for testing purposes + +package org.apache.commons.collections4.list; + +import java.io.Serializable; +import java.util.Collection; +import java.util.Iterator; +import java.util.ListIterator; +import org.apache.commons.collections4.list.AbstractLinkedList; + +public class CursorableLinkedList extends AbstractLinkedList implements Serializable +{ + protected ListIterator createSubListListIterator(AbstractLinkedList.LinkedSubList p0, int p1){ return null; } + protected void addNode(AbstractLinkedList.Node p0, AbstractLinkedList.Node p1){} + protected void broadcastNodeChanged(AbstractLinkedList.Node p0){} + protected void broadcastNodeInserted(AbstractLinkedList.Node p0){} + protected void broadcastNodeRemoved(AbstractLinkedList.Node p0){} + protected void init(){} + protected void registerCursor(CursorableLinkedList.Cursor p0){} + protected void removeAllNodes(){} + protected void removeNode(AbstractLinkedList.Node p0){} + protected void unregisterCursor(CursorableLinkedList.Cursor p0){} + protected void updateNode(AbstractLinkedList.Node p0, E p1){} + public CursorableLinkedList(){} + public CursorableLinkedList(Collection p0){} + public CursorableLinkedList.Cursor cursor(){ return null; } + public CursorableLinkedList.Cursor cursor(int p0){ return null; } + public Iterator iterator(){ return null; } + public ListIterator listIterator(){ return null; } + public ListIterator listIterator(int p0){ return null; } + static public class Cursor extends AbstractLinkedList.LinkedListIterator + { + protected Cursor() {} + protected Cursor(CursorableLinkedList p0, int p1){} + protected void checkModCount(){} + protected void nodeChanged(AbstractLinkedList.Node p0){} + protected void nodeInserted(AbstractLinkedList.Node p0){} + protected void nodeRemoved(AbstractLinkedList.Node p0){} + public int nextIndex(){ return 0; } + public void add(E p0){} + public void close(){} + public void remove(){} + } +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/list/FixedSizeList.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/list/FixedSizeList.java new file mode 100644 index 00000000000..3d343a44de2 --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/list/FixedSizeList.java @@ -0,0 +1,38 @@ +// Generated automatically from org.apache.commons.collections4.list.FixedSizeList for testing purposes + +package org.apache.commons.collections4.list; + +import java.util.Collection; +import java.util.Iterator; +import java.util.List; +import java.util.ListIterator; +import java.util.function.Predicate; +import org.apache.commons.collections4.BoundedCollection; +import org.apache.commons.collections4.list.AbstractSerializableListDecorator; + +public class FixedSizeList extends AbstractSerializableListDecorator implements BoundedCollection +{ + protected FixedSizeList() {} + protected FixedSizeList(List p0){} + public E get(int p0){ return null; } + public E remove(int p0){ return null; } + public E set(int p0, E p1){ return null; } + public Iterator iterator(){ return null; } + public List subList(int p0, int p1){ return null; } + public ListIterator listIterator(){ return null; } + public ListIterator listIterator(int p0){ return null; } + public boolean add(E p0){ return false; } + public boolean addAll(Collection p0){ return false; } + public boolean addAll(int p0, Collection p1){ return false; } + public boolean isFull(){ return false; } + public boolean remove(Object p0){ return false; } + public boolean removeAll(Collection p0){ return false; } + public boolean removeIf(Predicate p0){ return false; } + public boolean retainAll(Collection p0){ return false; } + public int indexOf(Object p0){ return 0; } + public int lastIndexOf(Object p0){ return 0; } + public int maxSize(){ return 0; } + public static FixedSizeList fixedSizeList(List p0){ return null; } + public void add(int p0, E p1){} + public void clear(){} +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/list/GrowthList.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/list/GrowthList.java new file mode 100644 index 00000000000..795e68cba6c --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/list/GrowthList.java @@ -0,0 +1,18 @@ +// Generated automatically from org.apache.commons.collections4.list.GrowthList for testing purposes + +package org.apache.commons.collections4.list; + +import java.util.Collection; +import java.util.List; +import org.apache.commons.collections4.list.AbstractSerializableListDecorator; + +public class GrowthList extends AbstractSerializableListDecorator +{ + protected GrowthList(List p0){} + public E set(int p0, E p1){ return null; } + public GrowthList(){} + public GrowthList(int p0){} + public boolean addAll(int p0, Collection p1){ return false; } + public static GrowthList growthList(List p0){ return null; } + public void add(int p0, E p1){} +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/list/LazyList.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/list/LazyList.java new file mode 100644 index 00000000000..08392dd78cd --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/list/LazyList.java @@ -0,0 +1,19 @@ +// Generated automatically from org.apache.commons.collections4.list.LazyList for testing purposes + +package org.apache.commons.collections4.list; + +import java.util.List; +import org.apache.commons.collections4.Factory; +import org.apache.commons.collections4.Transformer; +import org.apache.commons.collections4.list.AbstractSerializableListDecorator; + +public class LazyList extends AbstractSerializableListDecorator +{ + protected LazyList() {} + protected LazyList(List p0, Factory p1){} + protected LazyList(List p0, Transformer p1){} + public E get(int p0){ return null; } + public List subList(int p0, int p1){ return null; } + public static LazyList lazyList(List p0, Factory p1){ return null; } + public static LazyList lazyList(List p0, Transformer p1){ return null; } +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/list/NodeCachingLinkedList.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/list/NodeCachingLinkedList.java new file mode 100644 index 00000000000..96bfda9e6f0 --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/list/NodeCachingLinkedList.java @@ -0,0 +1,23 @@ +// Generated automatically from org.apache.commons.collections4.list.NodeCachingLinkedList for testing purposes + +package org.apache.commons.collections4.list; + +import java.io.Serializable; +import java.util.Collection; +import org.apache.commons.collections4.list.AbstractLinkedList; + +public class NodeCachingLinkedList extends AbstractLinkedList implements Serializable +{ + protected AbstractLinkedList.Node createNode(E p0){ return null; } + protected AbstractLinkedList.Node getNodeFromCache(){ return null; } + protected boolean isCacheFull(){ return false; } + protected int getMaximumCacheSize(){ return 0; } + protected void addNodeToCache(AbstractLinkedList.Node p0){} + protected void removeAllNodes(){} + protected void removeNode(AbstractLinkedList.Node p0){} + protected void setMaximumCacheSize(int p0){} + protected void shrinkCacheToMaximumSize(){} + public NodeCachingLinkedList(){} + public NodeCachingLinkedList(Collection p0){} + public NodeCachingLinkedList(int p0){} +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/list/PredicatedList.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/list/PredicatedList.java new file mode 100644 index 00000000000..624fd543e81 --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/list/PredicatedList.java @@ -0,0 +1,29 @@ +// Generated automatically from org.apache.commons.collections4.list.PredicatedList for testing purposes + +package org.apache.commons.collections4.list; + +import java.util.Collection; +import java.util.List; +import java.util.ListIterator; +import org.apache.commons.collections4.Predicate; +import org.apache.commons.collections4.collection.PredicatedCollection; + +public class PredicatedList extends PredicatedCollection implements List +{ + protected PredicatedList() {} + protected List decorated(){ return null; } + protected PredicatedList(List p0, Predicate p1){} + public E get(int p0){ return null; } + public E remove(int p0){ return null; } + public E set(int p0, E p1){ return null; } + public List subList(int p0, int p1){ return null; } + public ListIterator listIterator(){ return null; } + public ListIterator listIterator(int p0){ return null; } + public boolean addAll(int p0, Collection p1){ return false; } + public boolean equals(Object p0){ return false; } + public int hashCode(){ return 0; } + public int indexOf(Object p0){ return 0; } + public int lastIndexOf(Object p0){ return 0; } + public static PredicatedList predicatedList(List p0, Predicate p1){ return null; } + public void add(int p0, E p1){} +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/list/SetUniqueList.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/list/SetUniqueList.java new file mode 100644 index 00000000000..0264c250aff --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/list/SetUniqueList.java @@ -0,0 +1,37 @@ +// Generated automatically from org.apache.commons.collections4.list.SetUniqueList for testing purposes + +package org.apache.commons.collections4.list; + +import java.util.Collection; +import java.util.Iterator; +import java.util.List; +import java.util.ListIterator; +import java.util.Set; +import java.util.function.Predicate; +import org.apache.commons.collections4.list.AbstractSerializableListDecorator; + +public class SetUniqueList extends AbstractSerializableListDecorator +{ + protected SetUniqueList() {} + protected Set createSetBasedOnList(Set p0, List p1){ return null; } + protected SetUniqueList(List p0, Set p1){} + public E remove(int p0){ return null; } + public E set(int p0, E p1){ return null; } + public Iterator iterator(){ return null; } + public List subList(int p0, int p1){ return null; } + public ListIterator listIterator(){ return null; } + public ListIterator listIterator(int p0){ return null; } + public Set asSet(){ return null; } + public boolean add(E p0){ return false; } + public boolean addAll(Collection p0){ return false; } + public boolean addAll(int p0, Collection p1){ return false; } + public boolean contains(Object p0){ return false; } + public boolean containsAll(Collection p0){ return false; } + public boolean remove(Object p0){ return false; } + public boolean removeAll(Collection p0){ return false; } + public boolean removeIf(Predicate p0){ return false; } + public boolean retainAll(Collection p0){ return false; } + public static SetUniqueList setUniqueList(List p0){ return null; } + public void add(int p0, E p1){} + public void clear(){} +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/list/TransformedList.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/list/TransformedList.java new file mode 100644 index 00000000000..d3bd9db0cbf --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/list/TransformedList.java @@ -0,0 +1,30 @@ +// Generated automatically from org.apache.commons.collections4.list.TransformedList for testing purposes + +package org.apache.commons.collections4.list; + +import java.util.Collection; +import java.util.List; +import java.util.ListIterator; +import org.apache.commons.collections4.Transformer; +import org.apache.commons.collections4.collection.TransformedCollection; + +public class TransformedList extends TransformedCollection implements List +{ + protected TransformedList() {} + protected List getList(){ return null; } + protected TransformedList(List p0, Transformer p1){} + public E get(int p0){ return null; } + public E remove(int p0){ return null; } + public E set(int p0, E p1){ return null; } + public List subList(int p0, int p1){ return null; } + public ListIterator listIterator(){ return null; } + public ListIterator listIterator(int p0){ return null; } + public boolean addAll(int p0, Collection p1){ return false; } + public boolean equals(Object p0){ return false; } + public int hashCode(){ return 0; } + public int indexOf(Object p0){ return 0; } + public int lastIndexOf(Object p0){ return 0; } + public static TransformedList transformedList(List p0, Transformer p1){ return null; } + public static TransformedList transformingList(List p0, Transformer p1){ return null; } + public void add(int p0, E p1){} +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/list/TreeList.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/list/TreeList.java new file mode 100644 index 00000000000..7b9c600aba5 --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/list/TreeList.java @@ -0,0 +1,27 @@ +// Generated automatically from org.apache.commons.collections4.list.TreeList for testing purposes + +package org.apache.commons.collections4.list; + +import java.util.AbstractList; +import java.util.Collection; +import java.util.Iterator; +import java.util.ListIterator; + +public class TreeList extends AbstractList +{ + public E get(int p0){ return null; } + public E remove(int p0){ return null; } + public E set(int p0, E p1){ return null; } + public Iterator iterator(){ return null; } + public ListIterator listIterator(){ return null; } + public ListIterator listIterator(int p0){ return null; } + public Object[] toArray(){ return null; } + public TreeList(){} + public TreeList(Collection p0){} + public boolean addAll(Collection p0){ return false; } + public boolean contains(Object p0){ return false; } + public int indexOf(Object p0){ return 0; } + public int size(){ return 0; } + public void add(int p0, E p1){} + public void clear(){} +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/list/UnmodifiableList.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/list/UnmodifiableList.java new file mode 100644 index 00000000000..cfe9c10d63f --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/list/UnmodifiableList.java @@ -0,0 +1,33 @@ +// Generated automatically from org.apache.commons.collections4.list.UnmodifiableList for testing purposes + +package org.apache.commons.collections4.list; + +import java.util.Collection; +import java.util.Iterator; +import java.util.List; +import java.util.ListIterator; +import java.util.function.Predicate; +import org.apache.commons.collections4.Unmodifiable; +import org.apache.commons.collections4.list.AbstractSerializableListDecorator; + +public class UnmodifiableList extends AbstractSerializableListDecorator implements Unmodifiable +{ + protected UnmodifiableList() {} + public E remove(int p0){ return null; } + public E set(int p0, E p1){ return null; } + public Iterator iterator(){ return null; } + public List subList(int p0, int p1){ return null; } + public ListIterator listIterator(){ return null; } + public ListIterator listIterator(int p0){ return null; } + public UnmodifiableList(List p0){} + public boolean add(Object p0){ return false; } + public boolean addAll(Collection p0){ return false; } + public boolean addAll(int p0, Collection p1){ return false; } + public boolean remove(Object p0){ return false; } + public boolean removeAll(Collection p0){ return false; } + public boolean removeIf(Predicate p0){ return false; } + public boolean retainAll(Collection p0){ return false; } + public static List unmodifiableList(List p0){ return null; } + public void add(int p0, E p1){} + public void clear(){} +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/AbstractInputCheckedMapDecorator.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/AbstractInputCheckedMapDecorator.java new file mode 100644 index 00000000000..390e24d5dc0 --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/AbstractInputCheckedMapDecorator.java @@ -0,0 +1,16 @@ +// Generated automatically from org.apache.commons.collections4.map.AbstractInputCheckedMapDecorator for testing purposes + +package org.apache.commons.collections4.map; + +import java.util.Map; +import java.util.Set; +import org.apache.commons.collections4.map.AbstractMapDecorator; + +abstract class AbstractInputCheckedMapDecorator extends AbstractMapDecorator +{ + protected AbstractInputCheckedMapDecorator(){} + protected AbstractInputCheckedMapDecorator(Map p0){} + protected abstract V checkSetValue(V p0); + protected boolean isSetValueChecking(){ return false; } + public Set> entrySet(){ return null; } +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/AbstractOrderedMapDecorator.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/AbstractOrderedMapDecorator.java new file mode 100644 index 00000000000..9780736b0a7 --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/AbstractOrderedMapDecorator.java @@ -0,0 +1,19 @@ +// Generated automatically from org.apache.commons.collections4.map.AbstractOrderedMapDecorator for testing purposes + +package org.apache.commons.collections4.map; + +import org.apache.commons.collections4.OrderedMap; +import org.apache.commons.collections4.OrderedMapIterator; +import org.apache.commons.collections4.map.AbstractMapDecorator; + +abstract public class AbstractOrderedMapDecorator extends AbstractMapDecorator implements OrderedMap +{ + protected AbstractOrderedMapDecorator(){} + protected OrderedMap decorated(){ return null; } + public AbstractOrderedMapDecorator(OrderedMap p0){} + public K firstKey(){ return null; } + public K lastKey(){ return null; } + public K nextKey(K p0){ return null; } + public K previousKey(K p0){ return null; } + public OrderedMapIterator mapIterator(){ return null; } +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/AbstractSortedMapDecorator.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/AbstractSortedMapDecorator.java new file mode 100644 index 00000000000..7740bec5a9e --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/AbstractSortedMapDecorator.java @@ -0,0 +1,25 @@ +// Generated automatically from org.apache.commons.collections4.map.AbstractSortedMapDecorator for testing purposes + +package org.apache.commons.collections4.map; + +import java.util.Comparator; +import java.util.SortedMap; +import org.apache.commons.collections4.IterableSortedMap; +import org.apache.commons.collections4.OrderedMapIterator; +import org.apache.commons.collections4.map.AbstractMapDecorator; + +abstract public class AbstractSortedMapDecorator extends AbstractMapDecorator implements IterableSortedMap +{ + protected AbstractSortedMapDecorator(){} + protected SortedMap decorated(){ return null; } + public AbstractSortedMapDecorator(SortedMap p0){} + public Comparator comparator(){ return null; } + public K firstKey(){ return null; } + public K lastKey(){ return null; } + public K nextKey(K p0){ return null; } + public K previousKey(K p0){ return null; } + public OrderedMapIterator mapIterator(){ return null; } + public SortedMap headMap(K p0){ return null; } + public SortedMap subMap(K p0, K p1){ return null; } + public SortedMap tailMap(K p0){ return null; } +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/CaseInsensitiveMap.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/CaseInsensitiveMap.java new file mode 100644 index 00000000000..d231596467c --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/CaseInsensitiveMap.java @@ -0,0 +1,17 @@ +// Generated automatically from org.apache.commons.collections4.map.CaseInsensitiveMap for testing purposes + +package org.apache.commons.collections4.map; + +import java.io.Serializable; +import java.util.Map; +import org.apache.commons.collections4.map.AbstractHashedMap; + +public class CaseInsensitiveMap extends AbstractHashedMap implements Cloneable, Serializable +{ + protected Object convertKey(Object p0){ return null; } + public CaseInsensitiveMap(){} + public CaseInsensitiveMap(Map p0){} + public CaseInsensitiveMap(int p0){} + public CaseInsensitiveMap(int p0, float p1){} + public CaseInsensitiveMap clone(){ return null; } +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/CompositeMap.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/CompositeMap.java new file mode 100644 index 00000000000..a92e8015f4a --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/CompositeMap.java @@ -0,0 +1,41 @@ +// Generated automatically from org.apache.commons.collections4.map.CompositeMap for testing purposes + +package org.apache.commons.collections4.map; + +import java.io.Serializable; +import java.util.Collection; +import java.util.Map; +import java.util.Set; +import org.apache.commons.collections4.map.AbstractIterableMap; + +public class CompositeMap extends AbstractIterableMap implements Serializable +{ + public Collection values(){ return null; } + public CompositeMap(){} + public CompositeMap(Map p0, Map p1){} + public CompositeMap(Map p0, Map p1, CompositeMap.MapMutator p2){} + public CompositeMap(Map... p0){} + public CompositeMap(Map[] p0, CompositeMap.MapMutator p1){} + public Map removeComposited(Map p0){ return null; } + public Set keySet(){ return null; } + public Set> entrySet(){ return null; } + public V get(Object p0){ return null; } + public V put(K p0, V p1){ return null; } + public V remove(Object p0){ return null; } + public boolean containsKey(Object p0){ return false; } + public boolean containsValue(Object p0){ return false; } + public boolean equals(Object p0){ return false; } + public boolean isEmpty(){ return false; } + public int hashCode(){ return 0; } + public int size(){ return 0; } + public void addComposited(Map p0){} + public void clear(){} + public void putAll(Map p0){} + public void setMutator(CompositeMap.MapMutator p0){} + static public interface MapMutator extends Serializable + { + V put(CompositeMap p0, Map[] p1, K p2, V p3); + void putAll(CompositeMap p0, Map[] p1, Map p2); + void resolveCollision(CompositeMap p0, Map p1, Map p2, Collection p3); + } +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/DefaultedMap.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/DefaultedMap.java new file mode 100644 index 00000000000..d84a30be423 --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/DefaultedMap.java @@ -0,0 +1,21 @@ +// Generated automatically from org.apache.commons.collections4.map.DefaultedMap for testing purposes + +package org.apache.commons.collections4.map; + +import java.io.Serializable; +import java.util.Map; +import org.apache.commons.collections4.Factory; +import org.apache.commons.collections4.Transformer; +import org.apache.commons.collections4.map.AbstractMapDecorator; + +public class DefaultedMap extends AbstractMapDecorator implements Serializable +{ + protected DefaultedMap() {} + protected DefaultedMap(Map p0, Transformer p1){} + public DefaultedMap(Transformer p0){} + public DefaultedMap(V p0){} + public V get(Object p0){ return null; } + public static DefaultedMap defaultedMap(Map p0, Factory p1){ return null; } + public static DefaultedMap defaultedMap(Map p0, V p1){ return null; } + public static Map defaultedMap(Map p0, Transformer p1){ return null; } +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/EntrySetToMapIteratorAdapter.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/EntrySetToMapIteratorAdapter.java new file mode 100644 index 00000000000..8820b293eba --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/EntrySetToMapIteratorAdapter.java @@ -0,0 +1,22 @@ +// Generated automatically from org.apache.commons.collections4.map.EntrySetToMapIteratorAdapter for testing purposes + +package org.apache.commons.collections4.map; + +import java.util.Map; +import java.util.Set; +import org.apache.commons.collections4.MapIterator; +import org.apache.commons.collections4.ResettableIterator; + +public class EntrySetToMapIteratorAdapter implements MapIterator, ResettableIterator +{ + protected EntrySetToMapIteratorAdapter() {} + protected Map.Entry current(){ return null; } + public EntrySetToMapIteratorAdapter(Set> p0){} + public K getKey(){ return null; } + public K next(){ return null; } + public V getValue(){ return null; } + public V setValue(V p0){ return null; } + public boolean hasNext(){ return false; } + public void remove(){} + public void reset(){} +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/FixedSizeMap.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/FixedSizeMap.java new file mode 100644 index 00000000000..de42da42414 --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/FixedSizeMap.java @@ -0,0 +1,26 @@ +// Generated automatically from org.apache.commons.collections4.map.FixedSizeMap for testing purposes + +package org.apache.commons.collections4.map; + +import java.io.Serializable; +import java.util.Collection; +import java.util.Map; +import java.util.Set; +import org.apache.commons.collections4.BoundedMap; +import org.apache.commons.collections4.map.AbstractMapDecorator; + +public class FixedSizeMap extends AbstractMapDecorator implements BoundedMap, Serializable +{ + protected FixedSizeMap() {} + protected FixedSizeMap(Map p0){} + public Collection values(){ return null; } + public Set keySet(){ return null; } + public Set> entrySet(){ return null; } + public V put(K p0, V p1){ return null; } + public V remove(Object p0){ return null; } + public boolean isFull(){ return false; } + public int maxSize(){ return 0; } + public static FixedSizeMap fixedSizeMap(Map p0){ return null; } + public void clear(){} + public void putAll(Map p0){} +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/FixedSizeSortedMap.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/FixedSizeSortedMap.java new file mode 100644 index 00000000000..33c43e0cb8f --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/FixedSizeSortedMap.java @@ -0,0 +1,31 @@ +// Generated automatically from org.apache.commons.collections4.map.FixedSizeSortedMap for testing purposes + +package org.apache.commons.collections4.map; + +import java.io.Serializable; +import java.util.Collection; +import java.util.Map; +import java.util.Set; +import java.util.SortedMap; +import org.apache.commons.collections4.BoundedMap; +import org.apache.commons.collections4.map.AbstractSortedMapDecorator; + +public class FixedSizeSortedMap extends AbstractSortedMapDecorator implements BoundedMap, Serializable +{ + protected FixedSizeSortedMap() {} + protected FixedSizeSortedMap(SortedMap p0){} + protected SortedMap getSortedMap(){ return null; } + public Collection values(){ return null; } + public Set keySet(){ return null; } + public Set> entrySet(){ return null; } + public SortedMap headMap(K p0){ return null; } + public SortedMap subMap(K p0, K p1){ return null; } + public SortedMap tailMap(K p0){ return null; } + public V put(K p0, V p1){ return null; } + public V remove(Object p0){ return null; } + public boolean isFull(){ return false; } + public int maxSize(){ return 0; } + public static FixedSizeSortedMap fixedSizeSortedMap(SortedMap p0){ return null; } + public void clear(){} + public void putAll(Map p0){} +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/Flat3Map.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/Flat3Map.java new file mode 100644 index 00000000000..6c15d8d2482 --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/Flat3Map.java @@ -0,0 +1,35 @@ +// Generated automatically from org.apache.commons.collections4.map.Flat3Map for testing purposes + +package org.apache.commons.collections4.map; + +import java.io.Serializable; +import java.util.Collection; +import java.util.Map; +import java.util.Set; +import org.apache.commons.collections4.IterableMap; +import org.apache.commons.collections4.MapIterator; +import org.apache.commons.collections4.map.AbstractHashedMap; + +public class Flat3Map implements Cloneable, IterableMap, Serializable +{ + protected AbstractHashedMap createDelegateMap(){ return null; } + public Collection values(){ return null; } + public Flat3Map(){} + public Flat3Map(Map p0){} + public Flat3Map clone(){ return null; } + public MapIterator mapIterator(){ return null; } + public Set keySet(){ return null; } + public Set> entrySet(){ return null; } + public String toString(){ return null; } + public V get(Object p0){ return null; } + public V put(K p0, V p1){ return null; } + public V remove(Object p0){ return null; } + public boolean containsKey(Object p0){ return false; } + public boolean containsValue(Object p0){ return false; } + public boolean equals(Object p0){ return false; } + public boolean isEmpty(){ return false; } + public int hashCode(){ return 0; } + public int size(){ return 0; } + public void clear(){} + public void putAll(Map p0){} +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/LRUMap.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/LRUMap.java new file mode 100644 index 00000000000..96f83ee7a68 --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/LRUMap.java @@ -0,0 +1,39 @@ +// Generated automatically from org.apache.commons.collections4.map.LRUMap for testing purposes + +package org.apache.commons.collections4.map; + +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.io.Serializable; +import java.util.Map; +import org.apache.commons.collections4.BoundedMap; +import org.apache.commons.collections4.map.AbstractHashedMap; +import org.apache.commons.collections4.map.AbstractLinkedMap; + +public class LRUMap extends AbstractLinkedMap implements BoundedMap, Cloneable, Serializable +{ + protected boolean removeLRU(AbstractLinkedMap.LinkEntry p0){ return false; } + protected static int DEFAULT_MAX_SIZE = 0; + protected void addMapping(int p0, int p1, K p2, V p3){} + protected void doReadObject(ObjectInputStream p0){} + protected void doWriteObject(ObjectOutputStream p0){} + protected void moveToMRU(AbstractLinkedMap.LinkEntry p0){} + protected void reuseMapping(AbstractLinkedMap.LinkEntry p0, int p1, int p2, K p3, V p4){} + protected void updateEntry(AbstractHashedMap.HashEntry p0, V p1){} + public LRUMap(){} + public LRUMap(Map p0){} + public LRUMap(Map p0, boolean p1){} + public LRUMap(int p0){} + public LRUMap(int p0, boolean p1){} + public LRUMap(int p0, float p1){} + public LRUMap(int p0, float p1, boolean p2){} + public LRUMap(int p0, int p1){} + public LRUMap(int p0, int p1, float p2){} + public LRUMap(int p0, int p1, float p2, boolean p3){} + public LRUMap clone(){ return null; } + public V get(Object p0){ return null; } + public V get(Object p0, boolean p1){ return null; } + public boolean isFull(){ return false; } + public boolean isScanUntilRemovable(){ return false; } + public int maxSize(){ return 0; } +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/LazyMap.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/LazyMap.java new file mode 100644 index 00000000000..cae911cd5d3 --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/LazyMap.java @@ -0,0 +1,20 @@ +// Generated automatically from org.apache.commons.collections4.map.LazyMap for testing purposes + +package org.apache.commons.collections4.map; + +import java.io.Serializable; +import java.util.Map; +import org.apache.commons.collections4.Factory; +import org.apache.commons.collections4.Transformer; +import org.apache.commons.collections4.map.AbstractMapDecorator; + +public class LazyMap extends AbstractMapDecorator implements Serializable +{ + protected LazyMap() {} + protected LazyMap(Map p0, Factory p1){} + protected LazyMap(Map p0, Transformer p1){} + protected final Transformer factory = null; + public V get(Object p0){ return null; } + public static LazyMap lazyMap(Map p0, Factory p1){ return null; } + public static LazyMap lazyMap(Map p0, Transformer p1){ return null; } +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/LazySortedMap.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/LazySortedMap.java new file mode 100644 index 00000000000..e04062eb23a --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/LazySortedMap.java @@ -0,0 +1,25 @@ +// Generated automatically from org.apache.commons.collections4.map.LazySortedMap for testing purposes + +package org.apache.commons.collections4.map; + +import java.util.Comparator; +import java.util.SortedMap; +import org.apache.commons.collections4.Factory; +import org.apache.commons.collections4.Transformer; +import org.apache.commons.collections4.map.LazyMap; + +public class LazySortedMap extends LazyMap implements SortedMap +{ + protected LazySortedMap() {} + protected LazySortedMap(SortedMap p0, Factory p1){} + protected LazySortedMap(SortedMap p0, Transformer p1){} + protected SortedMap getSortedMap(){ return null; } + public Comparator comparator(){ return null; } + public K firstKey(){ return null; } + public K lastKey(){ return null; } + public SortedMap headMap(K p0){ return null; } + public SortedMap subMap(K p0, K p1){ return null; } + public SortedMap tailMap(K p0){ return null; } + public static LazySortedMap lazySortedMap(SortedMap p0, Factory p1){ return null; } + public static LazySortedMap lazySortedMap(SortedMap p0, Transformer p1){ return null; } +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/ListOrderedMap.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/ListOrderedMap.java new file mode 100644 index 00000000000..45931bc8cd3 --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/ListOrderedMap.java @@ -0,0 +1,42 @@ +// Generated automatically from org.apache.commons.collections4.map.ListOrderedMap for testing purposes + +package org.apache.commons.collections4.map; + +import java.io.Serializable; +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.Set; +import org.apache.commons.collections4.OrderedMap; +import org.apache.commons.collections4.OrderedMapIterator; +import org.apache.commons.collections4.map.AbstractMapDecorator; + +public class ListOrderedMap extends AbstractMapDecorator implements OrderedMap, Serializable +{ + protected ListOrderedMap(Map p0){} + public Collection values(){ return null; } + public K firstKey(){ return null; } + public K get(int p0){ return null; } + public K lastKey(){ return null; } + public K nextKey(Object p0){ return null; } + public K previousKey(Object p0){ return null; } + public List asList(){ return null; } + public List keyList(){ return null; } + public List valueList(){ return null; } + public ListOrderedMap(){} + public OrderedMapIterator mapIterator(){ return null; } + public Set keySet(){ return null; } + public Set> entrySet(){ return null; } + public String toString(){ return null; } + public V getValue(int p0){ return null; } + public V put(K p0, V p1){ return null; } + public V put(int p0, K p1, V p2){ return null; } + public V remove(Object p0){ return null; } + public V remove(int p0){ return null; } + public V setValue(int p0, V p1){ return null; } + public int indexOf(Object p0){ return 0; } + public static ListOrderedMap listOrderedMap(Map p0){ return null; } + public void clear(){} + public void putAll(Map p0){} + public void putAll(int p0, Map p1){} +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/MultiKeyMap.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/MultiKeyMap.java new file mode 100644 index 00000000000..284c4e12892 --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/MultiKeyMap.java @@ -0,0 +1,51 @@ +// Generated automatically from org.apache.commons.collections4.map.MultiKeyMap for testing purposes + +package org.apache.commons.collections4.map; + +import java.io.Serializable; +import java.util.Map; +import org.apache.commons.collections4.MapIterator; +import org.apache.commons.collections4.keyvalue.MultiKey; +import org.apache.commons.collections4.map.AbstractHashedMap; +import org.apache.commons.collections4.map.AbstractMapDecorator; + +public class MultiKeyMap extends AbstractMapDecorator, V> implements Cloneable, Serializable +{ + protected AbstractHashedMap, V> decorated(){ return null; } + protected MultiKeyMap(AbstractHashedMap, V> p0){} + protected boolean isEqualKey(AbstractHashedMap.HashEntry, V> p0, Object p1, Object p2){ return false; } + protected boolean isEqualKey(AbstractHashedMap.HashEntry, V> p0, Object p1, Object p2, Object p3){ return false; } + protected boolean isEqualKey(AbstractHashedMap.HashEntry, V> p0, Object p1, Object p2, Object p3, Object p4){ return false; } + protected boolean isEqualKey(AbstractHashedMap.HashEntry, V> p0, Object p1, Object p2, Object p3, Object p4, Object p5){ return false; } + protected int hash(Object p0, Object p1){ return 0; } + protected int hash(Object p0, Object p1, Object p2){ return 0; } + protected int hash(Object p0, Object p1, Object p2, Object p3){ return 0; } + protected int hash(Object p0, Object p1, Object p2, Object p3, Object p4){ return 0; } + protected void checkKey(MultiKey p0){} + public MapIterator, V> mapIterator(){ return null; } + public MultiKeyMap(){} + public MultiKeyMap clone(){ return null; } + public V get(Object p0, Object p1){ return null; } + public V get(Object p0, Object p1, Object p2){ return null; } + public V get(Object p0, Object p1, Object p2, Object p3){ return null; } + public V get(Object p0, Object p1, Object p2, Object p3, Object p4){ return null; } + public V put(K p0, K p1, K p2, K p3, K p4, V p5){ return null; } + public V put(K p0, K p1, K p2, K p3, V p4){ return null; } + public V put(K p0, K p1, K p2, V p3){ return null; } + public V put(K p0, K p1, V p2){ return null; } + public V put(MultiKey p0, V p1){ return null; } + public V removeMultiKey(Object p0, Object p1){ return null; } + public V removeMultiKey(Object p0, Object p1, Object p2){ return null; } + public V removeMultiKey(Object p0, Object p1, Object p2, Object p3){ return null; } + public V removeMultiKey(Object p0, Object p1, Object p2, Object p3, Object p4){ return null; } + public boolean containsKey(Object p0, Object p1){ return false; } + public boolean containsKey(Object p0, Object p1, Object p2){ return false; } + public boolean containsKey(Object p0, Object p1, Object p2, Object p3){ return false; } + public boolean containsKey(Object p0, Object p1, Object p2, Object p3, Object p4){ return false; } + public boolean removeAll(Object p0){ return false; } + public boolean removeAll(Object p0, Object p1){ return false; } + public boolean removeAll(Object p0, Object p1, Object p2){ return false; } + public boolean removeAll(Object p0, Object p1, Object p2, Object p3){ return false; } + public static MultiKeyMap multiKeyMap(AbstractHashedMap, V> p0){ return null; } + public void putAll(Map, ? extends V> p0){} +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/PassiveExpiringMap.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/PassiveExpiringMap.java new file mode 100644 index 00000000000..cd5b2fdd172 --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/PassiveExpiringMap.java @@ -0,0 +1,38 @@ +// Generated automatically from org.apache.commons.collections4.map.PassiveExpiringMap for testing purposes + +package org.apache.commons.collections4.map; + +import java.io.Serializable; +import java.util.Collection; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.TimeUnit; +import org.apache.commons.collections4.map.AbstractMapDecorator; + +public class PassiveExpiringMap extends AbstractMapDecorator implements Serializable +{ + public Collection values(){ return null; } + public PassiveExpiringMap(){} + public PassiveExpiringMap(Map p0){} + public PassiveExpiringMap(PassiveExpiringMap.ExpirationPolicy p0){} + public PassiveExpiringMap(PassiveExpiringMap.ExpirationPolicy p0, Map p1){} + public PassiveExpiringMap(long p0){} + public PassiveExpiringMap(long p0, Map p1){} + public PassiveExpiringMap(long p0, TimeUnit p1){} + public PassiveExpiringMap(long p0, TimeUnit p1, Map p2){} + public Set keySet(){ return null; } + public Set> entrySet(){ return null; } + public V get(Object p0){ return null; } + public V put(K p0, V p1){ return null; } + public V remove(Object p0){ return null; } + public boolean containsKey(Object p0){ return false; } + public boolean containsValue(Object p0){ return false; } + public boolean isEmpty(){ return false; } + public int size(){ return 0; } + public void clear(){} + public void putAll(Map p0){} + static public interface ExpirationPolicy extends Serializable + { + long expirationTime(K p0, V p1); + } +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/PredicatedMap.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/PredicatedMap.java new file mode 100644 index 00000000000..647266e8a4b --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/PredicatedMap.java @@ -0,0 +1,22 @@ +// Generated automatically from org.apache.commons.collections4.map.PredicatedMap for testing purposes + +package org.apache.commons.collections4.map; + +import java.io.Serializable; +import java.util.Map; +import org.apache.commons.collections4.Predicate; +import org.apache.commons.collections4.map.AbstractInputCheckedMapDecorator; + +public class PredicatedMap extends AbstractInputCheckedMapDecorator implements Serializable +{ + protected PredicatedMap() {} + protected PredicatedMap(Map p0, Predicate p1, Predicate p2){} + protected V checkSetValue(V p0){ return null; } + protected boolean isSetValueChecking(){ return false; } + protected final Predicate keyPredicate = null; + protected final Predicate valuePredicate = null; + protected void validate(K p0, V p1){} + public V put(K p0, V p1){ return null; } + public static PredicatedMap predicatedMap(Map p0, Predicate p1, Predicate p2){ return null; } + public void putAll(Map p0){} +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/PredicatedSortedMap.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/PredicatedSortedMap.java new file mode 100644 index 00000000000..5100e10860a --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/PredicatedSortedMap.java @@ -0,0 +1,22 @@ +// Generated automatically from org.apache.commons.collections4.map.PredicatedSortedMap for testing purposes + +package org.apache.commons.collections4.map; + +import java.util.Comparator; +import java.util.SortedMap; +import org.apache.commons.collections4.Predicate; +import org.apache.commons.collections4.map.PredicatedMap; + +public class PredicatedSortedMap extends PredicatedMap implements SortedMap +{ + protected PredicatedSortedMap() {} + protected PredicatedSortedMap(SortedMap p0, Predicate p1, Predicate p2){} + protected SortedMap getSortedMap(){ return null; } + public Comparator comparator(){ return null; } + public K firstKey(){ return null; } + public K lastKey(){ return null; } + public SortedMap headMap(K p0){ return null; } + public SortedMap subMap(K p0, K p1){ return null; } + public SortedMap tailMap(K p0){ return null; } + public static PredicatedSortedMap predicatedSortedMap(SortedMap p0, Predicate p1, Predicate p2){ return null; } +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/SingletonMap.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/SingletonMap.java new file mode 100644 index 00000000000..580b7f98d9c --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/SingletonMap.java @@ -0,0 +1,49 @@ +// Generated automatically from org.apache.commons.collections4.map.SingletonMap for testing purposes + +package org.apache.commons.collections4.map; + +import java.io.Serializable; +import java.util.Collection; +import java.util.Map; +import java.util.Set; +import org.apache.commons.collections4.BoundedMap; +import org.apache.commons.collections4.KeyValue; +import org.apache.commons.collections4.OrderedMap; +import org.apache.commons.collections4.OrderedMapIterator; + +public class SingletonMap implements BoundedMap, Cloneable, KeyValue, OrderedMap, Serializable +{ + protected boolean isEqualKey(Object p0){ return false; } + protected boolean isEqualValue(Object p0){ return false; } + public Collection values(){ return null; } + public K firstKey(){ return null; } + public K getKey(){ return null; } + public K lastKey(){ return null; } + public K nextKey(K p0){ return null; } + public K previousKey(K p0){ return null; } + public OrderedMapIterator mapIterator(){ return null; } + public Set keySet(){ return null; } + public Set> entrySet(){ return null; } + public SingletonMap(){} + public SingletonMap(K p0, V p1){} + public SingletonMap(KeyValue p0){} + public SingletonMap(Map.Entry p0){} + public SingletonMap(Map p0){} + public SingletonMap clone(){ return null; } + public String toString(){ return null; } + public V get(Object p0){ return null; } + public V getValue(){ return null; } + public V put(K p0, V p1){ return null; } + public V remove(Object p0){ return null; } + public V setValue(V p0){ return null; } + public boolean containsKey(Object p0){ return false; } + public boolean containsValue(Object p0){ return false; } + public boolean equals(Object p0){ return false; } + public boolean isEmpty(){ return false; } + public boolean isFull(){ return false; } + public int hashCode(){ return 0; } + public int maxSize(){ return 0; } + public int size(){ return 0; } + public void clear(){} + public void putAll(Map p0){} +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/TransformedMap.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/TransformedMap.java new file mode 100644 index 00000000000..1a1f5c584ab --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/TransformedMap.java @@ -0,0 +1,25 @@ +// Generated automatically from org.apache.commons.collections4.map.TransformedMap for testing purposes + +package org.apache.commons.collections4.map; + +import java.io.Serializable; +import java.util.Map; +import org.apache.commons.collections4.Transformer; +import org.apache.commons.collections4.map.AbstractInputCheckedMapDecorator; + +public class TransformedMap extends AbstractInputCheckedMapDecorator implements Serializable +{ + protected TransformedMap() {} + protected K transformKey(K p0){ return null; } + protected Map transformMap(Map p0){ return null; } + protected TransformedMap(Map p0, Transformer p1, Transformer p2){} + protected V checkSetValue(V p0){ return null; } + protected V transformValue(V p0){ return null; } + protected boolean isSetValueChecking(){ return false; } + protected final Transformer keyTransformer = null; + protected final Transformer valueTransformer = null; + public V put(K p0, V p1){ return null; } + public static TransformedMap transformedMap(Map p0, Transformer p1, Transformer p2){ return null; } + public static TransformedMap transformingMap(Map p0, Transformer p1, Transformer p2){ return null; } + public void putAll(Map p0){} +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/TransformedSortedMap.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/TransformedSortedMap.java new file mode 100644 index 00000000000..ad1ac90c54f --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/TransformedSortedMap.java @@ -0,0 +1,23 @@ +// Generated automatically from org.apache.commons.collections4.map.TransformedSortedMap for testing purposes + +package org.apache.commons.collections4.map; + +import java.util.Comparator; +import java.util.SortedMap; +import org.apache.commons.collections4.Transformer; +import org.apache.commons.collections4.map.TransformedMap; + +public class TransformedSortedMap extends TransformedMap implements SortedMap +{ + protected TransformedSortedMap() {} + protected SortedMap getSortedMap(){ return null; } + protected TransformedSortedMap(SortedMap p0, Transformer p1, Transformer p2){} + public Comparator comparator(){ return null; } + public K firstKey(){ return null; } + public K lastKey(){ return null; } + public SortedMap headMap(K p0){ return null; } + public SortedMap subMap(K p0, K p1){ return null; } + public SortedMap tailMap(K p0){ return null; } + public static TransformedSortedMap transformedSortedMap(SortedMap p0, Transformer p1, Transformer p2){ return null; } + public static TransformedSortedMap transformingSortedMap(SortedMap p0, Transformer p1, Transformer p2){ return null; } +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/UnmodifiableEntrySet.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/UnmodifiableEntrySet.java new file mode 100644 index 00000000000..1ce1d35f337 --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/UnmodifiableEntrySet.java @@ -0,0 +1,27 @@ +// Generated automatically from org.apache.commons.collections4.map.UnmodifiableEntrySet for testing purposes + +package org.apache.commons.collections4.map; + +import java.util.Collection; +import java.util.Iterator; +import java.util.Map; +import java.util.Set; +import java.util.function.Predicate; +import org.apache.commons.collections4.Unmodifiable; +import org.apache.commons.collections4.set.AbstractSetDecorator; + +public class UnmodifiableEntrySet extends AbstractSetDecorator> implements Unmodifiable +{ + protected UnmodifiableEntrySet() {} + public T[] toArray(T[] p0){ return null; } + public Iterator> iterator(){ return null; } + public Object[] toArray(){ return null; } + public boolean add(Map.Entry p0){ return false; } + public boolean addAll(Collection> p0){ return false; } + public boolean remove(Object p0){ return false; } + public boolean removeAll(Collection p0){ return false; } + public boolean removeIf(Predicate> p0){ return false; } + public boolean retainAll(Collection p0){ return false; } + public static Set> unmodifiableEntrySet(Set> p0){ return null; } + public void clear(){} +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/UnmodifiableMap.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/UnmodifiableMap.java new file mode 100644 index 00000000000..7e43b148a01 --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/UnmodifiableMap.java @@ -0,0 +1,25 @@ +// Generated automatically from org.apache.commons.collections4.map.UnmodifiableMap for testing purposes + +package org.apache.commons.collections4.map; + +import java.io.Serializable; +import java.util.Collection; +import java.util.Map; +import java.util.Set; +import org.apache.commons.collections4.MapIterator; +import org.apache.commons.collections4.Unmodifiable; +import org.apache.commons.collections4.map.AbstractMapDecorator; + +public class UnmodifiableMap extends AbstractMapDecorator implements Serializable, Unmodifiable +{ + protected UnmodifiableMap() {} + public Collection values(){ return null; } + public MapIterator mapIterator(){ return null; } + public Set keySet(){ return null; } + public Set> entrySet(){ return null; } + public V put(K p0, V p1){ return null; } + public V remove(Object p0){ return null; } + public static Map unmodifiableMap(Map p0){ return null; } + public void clear(){} + public void putAll(Map p0){} +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/UnmodifiableOrderedMap.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/UnmodifiableOrderedMap.java new file mode 100644 index 00000000000..8cb8b0cca0c --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/UnmodifiableOrderedMap.java @@ -0,0 +1,26 @@ +// Generated automatically from org.apache.commons.collections4.map.UnmodifiableOrderedMap for testing purposes + +package org.apache.commons.collections4.map; + +import java.io.Serializable; +import java.util.Collection; +import java.util.Map; +import java.util.Set; +import org.apache.commons.collections4.OrderedMap; +import org.apache.commons.collections4.OrderedMapIterator; +import org.apache.commons.collections4.Unmodifiable; +import org.apache.commons.collections4.map.AbstractOrderedMapDecorator; + +public class UnmodifiableOrderedMap extends AbstractOrderedMapDecorator implements Serializable, Unmodifiable +{ + protected UnmodifiableOrderedMap() {} + public Collection values(){ return null; } + public OrderedMapIterator mapIterator(){ return null; } + public Set keySet(){ return null; } + public Set> entrySet(){ return null; } + public V put(K p0, V p1){ return null; } + public V remove(Object p0){ return null; } + public static OrderedMap unmodifiableOrderedMap(OrderedMap p0){ return null; } + public void clear(){} + public void putAll(Map p0){} +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/UnmodifiableSortedMap.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/UnmodifiableSortedMap.java new file mode 100644 index 00000000000..3deef9d0cc0 --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/map/UnmodifiableSortedMap.java @@ -0,0 +1,31 @@ +// Generated automatically from org.apache.commons.collections4.map.UnmodifiableSortedMap for testing purposes + +package org.apache.commons.collections4.map; + +import java.io.Serializable; +import java.util.Collection; +import java.util.Comparator; +import java.util.Map; +import java.util.Set; +import java.util.SortedMap; +import org.apache.commons.collections4.Unmodifiable; +import org.apache.commons.collections4.map.AbstractSortedMapDecorator; + +public class UnmodifiableSortedMap extends AbstractSortedMapDecorator implements Serializable, Unmodifiable +{ + protected UnmodifiableSortedMap() {} + public Collection values(){ return null; } + public Comparator comparator(){ return null; } + public K firstKey(){ return null; } + public K lastKey(){ return null; } + public Set keySet(){ return null; } + public Set> entrySet(){ return null; } + public SortedMap headMap(K p0){ return null; } + public SortedMap subMap(K p0, K p1){ return null; } + public SortedMap tailMap(K p0){ return null; } + public V put(K p0, V p1){ return null; } + public V remove(Object p0){ return null; } + public static SortedMap unmodifiableSortedMap(SortedMap p0){ return null; } + public void clear(){} + public void putAll(Map p0){} +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/multimap/AbstractMultiValuedMapDecorator.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/multimap/AbstractMultiValuedMapDecorator.java new file mode 100644 index 00000000000..1380d989fc2 --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/multimap/AbstractMultiValuedMapDecorator.java @@ -0,0 +1,40 @@ +// Generated automatically from org.apache.commons.collections4.multimap.AbstractMultiValuedMapDecorator for testing purposes + +package org.apache.commons.collections4.multimap; + +import java.io.Serializable; +import java.util.Collection; +import java.util.Map; +import java.util.Set; +import org.apache.commons.collections4.MapIterator; +import org.apache.commons.collections4.MultiSet; +import org.apache.commons.collections4.MultiValuedMap; + +abstract public class AbstractMultiValuedMapDecorator implements MultiValuedMap, Serializable +{ + protected AbstractMultiValuedMapDecorator() {} + protected AbstractMultiValuedMapDecorator(MultiValuedMap p0){} + protected MultiValuedMap decorated(){ return null; } + public Collection> entries(){ return null; } + public Collection get(K p0){ return null; } + public Collection remove(Object p0){ return null; } + public Collection values(){ return null; } + public Map> asMap(){ return null; } + public MapIterator mapIterator(){ return null; } + public MultiSet keys(){ return null; } + public Set keySet(){ return null; } + public String toString(){ return null; } + public boolean containsKey(Object p0){ return false; } + public boolean containsMapping(Object p0, Object p1){ return false; } + public boolean containsValue(Object p0){ return false; } + public boolean equals(Object p0){ return false; } + public boolean isEmpty(){ return false; } + public boolean put(K p0, V p1){ return false; } + public boolean putAll(K p0, Iterable p1){ return false; } + public boolean putAll(Map p0){ return false; } + public boolean putAll(MultiValuedMap p0){ return false; } + public boolean removeMapping(Object p0, Object p1){ return false; } + public int hashCode(){ return 0; } + public int size(){ return 0; } + public void clear(){} +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/multimap/TransformedMultiValuedMap.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/multimap/TransformedMultiValuedMap.java new file mode 100644 index 00000000000..a233ad02a95 --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/multimap/TransformedMultiValuedMap.java @@ -0,0 +1,22 @@ +// Generated automatically from org.apache.commons.collections4.multimap.TransformedMultiValuedMap for testing purposes + +package org.apache.commons.collections4.multimap; + +import java.util.Map; +import org.apache.commons.collections4.MultiValuedMap; +import org.apache.commons.collections4.Transformer; +import org.apache.commons.collections4.multimap.AbstractMultiValuedMapDecorator; + +public class TransformedMultiValuedMap extends AbstractMultiValuedMapDecorator +{ + protected TransformedMultiValuedMap() {} + protected K transformKey(K p0){ return null; } + protected TransformedMultiValuedMap(MultiValuedMap p0, Transformer p1, Transformer p2){} + protected V transformValue(V p0){ return null; } + public boolean put(K p0, V p1){ return false; } + public boolean putAll(K p0, Iterable p1){ return false; } + public boolean putAll(Map p0){ return false; } + public boolean putAll(MultiValuedMap p0){ return false; } + public static TransformedMultiValuedMap transformedMap(MultiValuedMap p0, Transformer p1, Transformer p2){ return null; } + public static TransformedMultiValuedMap transformingMap(MultiValuedMap p0, Transformer p1, Transformer p2){ return null; } +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/multimap/UnmodifiableMultiValuedMap.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/multimap/UnmodifiableMultiValuedMap.java new file mode 100644 index 00000000000..97968ec739c --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/multimap/UnmodifiableMultiValuedMap.java @@ -0,0 +1,32 @@ +// Generated automatically from org.apache.commons.collections4.multimap.UnmodifiableMultiValuedMap for testing purposes + +package org.apache.commons.collections4.multimap; + +import java.util.Collection; +import java.util.Map; +import java.util.Set; +import org.apache.commons.collections4.MapIterator; +import org.apache.commons.collections4.MultiSet; +import org.apache.commons.collections4.MultiValuedMap; +import org.apache.commons.collections4.Unmodifiable; +import org.apache.commons.collections4.multimap.AbstractMultiValuedMapDecorator; + +public class UnmodifiableMultiValuedMap extends AbstractMultiValuedMapDecorator implements Unmodifiable +{ + protected UnmodifiableMultiValuedMap() {} + public Collection> entries(){ return null; } + public Collection get(K p0){ return null; } + public Collection remove(Object p0){ return null; } + public Collection values(){ return null; } + public Map> asMap(){ return null; } + public MapIterator mapIterator(){ return null; } + public MultiSet keys(){ return null; } + public Set keySet(){ return null; } + public boolean put(K p0, V p1){ return false; } + public boolean putAll(K p0, Iterable p1){ return false; } + public boolean putAll(Map p0){ return false; } + public boolean putAll(MultiValuedMap p0){ return false; } + public boolean removeMapping(Object p0, Object p1){ return false; } + public static UnmodifiableMultiValuedMap unmodifiableMultiValuedMap(MultiValuedMap p0){ return null; } + public void clear(){} +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/multiset/AbstractMultiSetDecorator.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/multiset/AbstractMultiSetDecorator.java new file mode 100644 index 00000000000..3b9f76e9f60 --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/multiset/AbstractMultiSetDecorator.java @@ -0,0 +1,22 @@ +// Generated automatically from org.apache.commons.collections4.multiset.AbstractMultiSetDecorator for testing purposes + +package org.apache.commons.collections4.multiset; + +import java.util.Set; +import org.apache.commons.collections4.MultiSet; +import org.apache.commons.collections4.collection.AbstractCollectionDecorator; + +abstract public class AbstractMultiSetDecorator extends AbstractCollectionDecorator implements MultiSet +{ + protected AbstractMultiSetDecorator(){} + protected AbstractMultiSetDecorator(MultiSet p0){} + protected MultiSet decorated(){ return null; } + public Set uniqueSet(){ return null; } + public Set> entrySet(){ return null; } + public boolean equals(Object p0){ return false; } + public int add(E p0, int p1){ return 0; } + public int getCount(Object p0){ return 0; } + public int hashCode(){ return 0; } + public int remove(Object p0, int p1){ return 0; } + public int setCount(E p0, int p1){ return 0; } +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/multiset/PredicatedMultiSet.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/multiset/PredicatedMultiSet.java new file mode 100644 index 00000000000..73331196a1f --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/multiset/PredicatedMultiSet.java @@ -0,0 +1,24 @@ +// Generated automatically from org.apache.commons.collections4.multiset.PredicatedMultiSet for testing purposes + +package org.apache.commons.collections4.multiset; + +import java.util.Set; +import org.apache.commons.collections4.MultiSet; +import org.apache.commons.collections4.Predicate; +import org.apache.commons.collections4.collection.PredicatedCollection; + +public class PredicatedMultiSet extends PredicatedCollection implements MultiSet +{ + protected PredicatedMultiSet() {} + protected MultiSet decorated(){ return null; } + protected PredicatedMultiSet(MultiSet p0, Predicate p1){} + public Set uniqueSet(){ return null; } + public Set> entrySet(){ return null; } + public boolean equals(Object p0){ return false; } + public int add(E p0, int p1){ return 0; } + public int getCount(Object p0){ return 0; } + public int hashCode(){ return 0; } + public int remove(Object p0, int p1){ return 0; } + public int setCount(E p0, int p1){ return 0; } + public static PredicatedMultiSet predicatedMultiSet(MultiSet p0, Predicate p1){ return null; } +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/multiset/SynchronizedMultiSet.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/multiset/SynchronizedMultiSet.java new file mode 100644 index 00000000000..63bf44167f4 --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/multiset/SynchronizedMultiSet.java @@ -0,0 +1,24 @@ +// Generated automatically from org.apache.commons.collections4.multiset.SynchronizedMultiSet for testing purposes + +package org.apache.commons.collections4.multiset; + +import java.util.Set; +import org.apache.commons.collections4.MultiSet; +import org.apache.commons.collections4.collection.SynchronizedCollection; + +public class SynchronizedMultiSet extends SynchronizedCollection implements MultiSet +{ + protected SynchronizedMultiSet() {} + protected MultiSet decorated(){ return null; } + protected SynchronizedMultiSet(MultiSet p0){} + protected SynchronizedMultiSet(MultiSet p0, Object p1){} + public Set uniqueSet(){ return null; } + public Set> entrySet(){ return null; } + public boolean equals(Object p0){ return false; } + public int add(E p0, int p1){ return 0; } + public int getCount(Object p0){ return 0; } + public int hashCode(){ return 0; } + public int remove(Object p0, int p1){ return 0; } + public int setCount(E p0, int p1){ return 0; } + public static SynchronizedMultiSet synchronizedMultiSet(MultiSet p0){ return null; } +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/multiset/UnmodifiableMultiSet.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/multiset/UnmodifiableMultiSet.java new file mode 100644 index 00000000000..bbc88c25980 --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/multiset/UnmodifiableMultiSet.java @@ -0,0 +1,30 @@ +// Generated automatically from org.apache.commons.collections4.multiset.UnmodifiableMultiSet for testing purposes + +package org.apache.commons.collections4.multiset; + +import java.util.Collection; +import java.util.Iterator; +import java.util.Set; +import java.util.function.Predicate; +import org.apache.commons.collections4.MultiSet; +import org.apache.commons.collections4.Unmodifiable; +import org.apache.commons.collections4.multiset.AbstractMultiSetDecorator; + +public class UnmodifiableMultiSet extends AbstractMultiSetDecorator implements Unmodifiable +{ + protected UnmodifiableMultiSet() {} + public Iterator iterator(){ return null; } + public Set uniqueSet(){ return null; } + public Set> entrySet(){ return null; } + public boolean add(E p0){ return false; } + public boolean addAll(Collection p0){ return false; } + public boolean remove(Object p0){ return false; } + public boolean removeAll(Collection p0){ return false; } + public boolean removeIf(Predicate p0){ return false; } + public boolean retainAll(Collection p0){ return false; } + public int add(E p0, int p1){ return 0; } + public int remove(Object p0, int p1){ return 0; } + public int setCount(E p0, int p1){ return 0; } + public static MultiSet unmodifiableMultiSet(MultiSet p0){ return null; } + public void clear(){} +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/properties/AbstractPropertiesFactory.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/properties/AbstractPropertiesFactory.java new file mode 100644 index 00000000000..022521fe923 --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/properties/AbstractPropertiesFactory.java @@ -0,0 +1,25 @@ +// Generated automatically from org.apache.commons.collections4.properties.AbstractPropertiesFactory for testing purposes + +package org.apache.commons.collections4.properties; + +import java.io.File; +import java.io.InputStream; +import java.io.Reader; +import java.net.URI; +import java.net.URL; +import java.nio.file.Path; +import java.util.Properties; + +abstract public class AbstractPropertiesFactory +{ + protected AbstractPropertiesFactory(){} + protected abstract T createProperties(); + public T load(ClassLoader p0, String p1){ return null; } + public T load(File p0){ return null; } + public T load(InputStream p0){ return null; } + public T load(Path p0){ return null; } + public T load(Reader p0){ return null; } + public T load(String p0){ return null; } + public T load(URI p0){ return null; } + public T load(URL p0){ return null; } +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/queue/AbstractQueueDecorator.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/queue/AbstractQueueDecorator.java new file mode 100644 index 00000000000..effafa64f00 --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/queue/AbstractQueueDecorator.java @@ -0,0 +1,18 @@ +// Generated automatically from org.apache.commons.collections4.queue.AbstractQueueDecorator for testing purposes + +package org.apache.commons.collections4.queue; + +import java.util.Queue; +import org.apache.commons.collections4.collection.AbstractCollectionDecorator; + +abstract public class AbstractQueueDecorator extends AbstractCollectionDecorator implements Queue +{ + protected AbstractQueueDecorator(){} + protected AbstractQueueDecorator(Queue p0){} + protected Queue decorated(){ return null; } + public E element(){ return null; } + public E peek(){ return null; } + public E poll(){ return null; } + public E remove(){ return null; } + public boolean offer(E p0){ return false; } +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/queue/CircularFifoQueue.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/queue/CircularFifoQueue.java new file mode 100644 index 00000000000..9fcf239f945 --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/queue/CircularFifoQueue.java @@ -0,0 +1,31 @@ +// Generated automatically from org.apache.commons.collections4.queue.CircularFifoQueue for testing purposes + +package org.apache.commons.collections4.queue; + +import java.io.Serializable; +import java.util.AbstractCollection; +import java.util.Collection; +import java.util.Iterator; +import java.util.Queue; +import org.apache.commons.collections4.BoundedCollection; + +public class CircularFifoQueue extends AbstractCollection implements BoundedCollection, Queue, Serializable +{ + public CircularFifoQueue(){} + public CircularFifoQueue(Collection p0){} + public CircularFifoQueue(int p0){} + public E element(){ return null; } + public E get(int p0){ return null; } + public E peek(){ return null; } + public E poll(){ return null; } + public E remove(){ return null; } + public Iterator iterator(){ return null; } + public boolean add(E p0){ return false; } + public boolean isAtFullCapacity(){ return false; } + public boolean isEmpty(){ return false; } + public boolean isFull(){ return false; } + public boolean offer(E p0){ return false; } + public int maxSize(){ return 0; } + public int size(){ return 0; } + public void clear(){} +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/queue/PredicatedQueue.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/queue/PredicatedQueue.java new file mode 100644 index 00000000000..849cd890317 --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/queue/PredicatedQueue.java @@ -0,0 +1,20 @@ +// Generated automatically from org.apache.commons.collections4.queue.PredicatedQueue for testing purposes + +package org.apache.commons.collections4.queue; + +import java.util.Queue; +import org.apache.commons.collections4.Predicate; +import org.apache.commons.collections4.collection.PredicatedCollection; + +public class PredicatedQueue extends PredicatedCollection implements Queue +{ + protected PredicatedQueue() {} + protected PredicatedQueue(Queue p0, Predicate p1){} + protected Queue decorated(){ return null; } + public E element(){ return null; } + public E peek(){ return null; } + public E poll(){ return null; } + public E remove(){ return null; } + public boolean offer(E p0){ return false; } + public static PredicatedQueue predicatedQueue(Queue p0, Predicate p1){ return null; } +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/queue/SynchronizedQueue.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/queue/SynchronizedQueue.java new file mode 100644 index 00000000000..bd3d11053e8 --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/queue/SynchronizedQueue.java @@ -0,0 +1,22 @@ +// Generated automatically from org.apache.commons.collections4.queue.SynchronizedQueue for testing purposes + +package org.apache.commons.collections4.queue; + +import java.util.Queue; +import org.apache.commons.collections4.collection.SynchronizedCollection; + +public class SynchronizedQueue extends SynchronizedCollection implements Queue +{ + protected SynchronizedQueue() {} + protected Queue decorated(){ return null; } + protected SynchronizedQueue(Queue p0){} + protected SynchronizedQueue(Queue p0, Object p1){} + public E element(){ return null; } + public E peek(){ return null; } + public E poll(){ return null; } + public E remove(){ return null; } + public boolean equals(Object p0){ return false; } + public boolean offer(E p0){ return false; } + public int hashCode(){ return 0; } + public static SynchronizedQueue synchronizedQueue(Queue p0){ return null; } +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/queue/TransformedQueue.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/queue/TransformedQueue.java new file mode 100644 index 00000000000..85ebb1aeac5 --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/queue/TransformedQueue.java @@ -0,0 +1,21 @@ +// Generated automatically from org.apache.commons.collections4.queue.TransformedQueue for testing purposes + +package org.apache.commons.collections4.queue; + +import java.util.Queue; +import org.apache.commons.collections4.Transformer; +import org.apache.commons.collections4.collection.TransformedCollection; + +public class TransformedQueue extends TransformedCollection implements Queue +{ + protected TransformedQueue() {} + protected Queue getQueue(){ return null; } + protected TransformedQueue(Queue p0, Transformer p1){} + public E element(){ return null; } + public E peek(){ return null; } + public E poll(){ return null; } + public E remove(){ return null; } + public boolean offer(E p0){ return false; } + public static TransformedQueue transformedQueue(Queue p0, Transformer p1){ return null; } + public static TransformedQueue transformingQueue(Queue p0, Transformer p1){ return null; } +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/queue/UnmodifiableQueue.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/queue/UnmodifiableQueue.java new file mode 100644 index 00000000000..b119393e0c5 --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/queue/UnmodifiableQueue.java @@ -0,0 +1,27 @@ +// Generated automatically from org.apache.commons.collections4.queue.UnmodifiableQueue for testing purposes + +package org.apache.commons.collections4.queue; + +import java.util.Collection; +import java.util.Iterator; +import java.util.Queue; +import java.util.function.Predicate; +import org.apache.commons.collections4.Unmodifiable; +import org.apache.commons.collections4.queue.AbstractQueueDecorator; + +public class UnmodifiableQueue extends AbstractQueueDecorator implements Unmodifiable +{ + protected UnmodifiableQueue() {} + public E poll(){ return null; } + public E remove(){ return null; } + public Iterator iterator(){ return null; } + public boolean add(Object p0){ return false; } + public boolean addAll(Collection p0){ return false; } + public boolean offer(E p0){ return false; } + public boolean remove(Object p0){ return false; } + public boolean removeAll(Collection p0){ return false; } + public boolean removeIf(Predicate p0){ return false; } + public boolean retainAll(Collection p0){ return false; } + public static Queue unmodifiableQueue(Queue p0){ return null; } + public void clear(){} +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/set/AbstractNavigableSetDecorator.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/set/AbstractNavigableSetDecorator.java new file mode 100644 index 00000000000..57c88ffd917 --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/set/AbstractNavigableSetDecorator.java @@ -0,0 +1,25 @@ +// Generated automatically from org.apache.commons.collections4.set.AbstractNavigableSetDecorator for testing purposes + +package org.apache.commons.collections4.set; + +import java.util.Iterator; +import java.util.NavigableSet; +import org.apache.commons.collections4.set.AbstractSortedSetDecorator; + +abstract public class AbstractNavigableSetDecorator extends AbstractSortedSetDecorator implements NavigableSet +{ + protected AbstractNavigableSetDecorator(){} + protected AbstractNavigableSetDecorator(NavigableSet p0){} + protected NavigableSet decorated(){ return null; } + public E ceiling(E p0){ return null; } + public E floor(E p0){ return null; } + public E higher(E p0){ return null; } + public E lower(E p0){ return null; } + public E pollFirst(){ return null; } + public E pollLast(){ return null; } + public Iterator descendingIterator(){ return null; } + public NavigableSet descendingSet(){ return null; } + public NavigableSet headSet(E p0, boolean p1){ return null; } + public NavigableSet subSet(E p0, boolean p1, E p2, boolean p3){ return null; } + public NavigableSet tailSet(E p0, boolean p1){ return null; } +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/set/AbstractSerializableSetDecorator.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/set/AbstractSerializableSetDecorator.java new file mode 100644 index 00000000000..f2176a7d15a --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/set/AbstractSerializableSetDecorator.java @@ -0,0 +1,12 @@ +// Generated automatically from org.apache.commons.collections4.set.AbstractSerializableSetDecorator for testing purposes + +package org.apache.commons.collections4.set; + +import java.util.Set; +import org.apache.commons.collections4.set.AbstractSetDecorator; + +abstract public class AbstractSerializableSetDecorator extends AbstractSetDecorator +{ + protected AbstractSerializableSetDecorator() {} + protected AbstractSerializableSetDecorator(Set p0){} +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/set/AbstractSetDecorator.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/set/AbstractSetDecorator.java new file mode 100644 index 00000000000..57567c3079c --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/set/AbstractSetDecorator.java @@ -0,0 +1,15 @@ +// Generated automatically from org.apache.commons.collections4.set.AbstractSetDecorator for testing purposes + +package org.apache.commons.collections4.set; + +import java.util.Set; +import org.apache.commons.collections4.collection.AbstractCollectionDecorator; + +abstract public class AbstractSetDecorator extends AbstractCollectionDecorator implements Set +{ + protected AbstractSetDecorator(){} + protected AbstractSetDecorator(Set p0){} + protected Set decorated(){ return null; } + public boolean equals(Object p0){ return false; } + public int hashCode(){ return 0; } +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/set/AbstractSortedSetDecorator.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/set/AbstractSortedSetDecorator.java new file mode 100644 index 00000000000..e7d86052184 --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/set/AbstractSortedSetDecorator.java @@ -0,0 +1,21 @@ +// Generated automatically from org.apache.commons.collections4.set.AbstractSortedSetDecorator for testing purposes + +package org.apache.commons.collections4.set; + +import java.util.Comparator; +import java.util.Set; +import java.util.SortedSet; +import org.apache.commons.collections4.set.AbstractSetDecorator; + +abstract public class AbstractSortedSetDecorator extends AbstractSetDecorator implements SortedSet +{ + protected AbstractSortedSetDecorator(){} + protected AbstractSortedSetDecorator(Set p0){} + protected SortedSet decorated(){ return null; } + public Comparator comparator(){ return null; } + public E first(){ return null; } + public E last(){ return null; } + public SortedSet headSet(E p0){ return null; } + public SortedSet subSet(E p0, E p1){ return null; } + public SortedSet tailSet(E p0){ return null; } +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/set/CompositeSet.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/set/CompositeSet.java new file mode 100644 index 00000000000..f315ea6f2c1 --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/set/CompositeSet.java @@ -0,0 +1,47 @@ +// Generated automatically from org.apache.commons.collections4.set.CompositeSet for testing purposes + +package org.apache.commons.collections4.set; + +import java.io.Serializable; +import java.util.Collection; +import java.util.Iterator; +import java.util.List; +import java.util.Set; +import java.util.function.Predicate; + +public class CompositeSet implements Serializable, Set +{ + protected CompositeSet.SetMutator getMutator(){ return null; } + public T[] toArray(T[] p0){ return null; } + public CompositeSet(){} + public CompositeSet(Set p0){} + public CompositeSet(Set... p0){} + public Iterator iterator(){ return null; } + public List> getSets(){ return null; } + public Object[] toArray(){ return null; } + public Set toSet(){ return null; } + public boolean add(E p0){ return false; } + public boolean addAll(Collection p0){ return false; } + public boolean contains(Object p0){ return false; } + public boolean containsAll(Collection p0){ return false; } + public boolean equals(Object p0){ return false; } + public boolean isEmpty(){ return false; } + public boolean remove(Object p0){ return false; } + public boolean removeAll(Collection p0){ return false; } + public boolean removeIf(Predicate p0){ return false; } + public boolean retainAll(Collection p0){ return false; } + public int hashCode(){ return 0; } + public int size(){ return 0; } + public void addComposited(Set p0){} + public void addComposited(Set p0, Set p1){} + public void addComposited(Set... p0){} + public void clear(){} + public void removeComposited(Set p0){} + public void setMutator(CompositeSet.SetMutator p0){} + static public interface SetMutator extends Serializable + { + boolean add(CompositeSet p0, List> p1, E p2); + boolean addAll(CompositeSet p0, List> p1, Collection p2); + void resolveCollision(CompositeSet p0, Set p1, Set p2, Collection p3); + } +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/set/ListOrderedSet.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/set/ListOrderedSet.java new file mode 100644 index 00000000000..1bb18f7e2f4 --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/set/ListOrderedSet.java @@ -0,0 +1,37 @@ +// Generated automatically from org.apache.commons.collections4.set.ListOrderedSet for testing purposes + +package org.apache.commons.collections4.set; + +import java.util.Collection; +import java.util.List; +import java.util.Set; +import java.util.function.Predicate; +import org.apache.commons.collections4.OrderedIterator; +import org.apache.commons.collections4.set.AbstractSerializableSetDecorator; + +public class ListOrderedSet extends AbstractSerializableSetDecorator +{ + protected ListOrderedSet(Set p0){} + protected ListOrderedSet(Set p0, List p1){} + public T[] toArray(T[] p0){ return null; } + public E get(int p0){ return null; } + public E remove(int p0){ return null; } + public List asList(){ return null; } + public ListOrderedSet(){} + public Object[] toArray(){ return null; } + public OrderedIterator iterator(){ return null; } + public String toString(){ return null; } + public boolean add(E p0){ return false; } + public boolean addAll(Collection p0){ return false; } + public boolean addAll(int p0, Collection p1){ return false; } + public boolean remove(Object p0){ return false; } + public boolean removeAll(Collection p0){ return false; } + public boolean removeIf(Predicate p0){ return false; } + public boolean retainAll(Collection p0){ return false; } + public int indexOf(Object p0){ return 0; } + public static ListOrderedSet listOrderedSet(List p0){ return null; } + public static ListOrderedSet listOrderedSet(Set p0){ return null; } + public static ListOrderedSet listOrderedSet(Set p0, List p1){ return null; } + public void add(int p0, E p1){} + public void clear(){} +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/set/MapBackedSet.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/set/MapBackedSet.java new file mode 100644 index 00000000000..50fb143966d --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/set/MapBackedSet.java @@ -0,0 +1,33 @@ +// Generated automatically from org.apache.commons.collections4.set.MapBackedSet for testing purposes + +package org.apache.commons.collections4.set; + +import java.io.Serializable; +import java.util.Collection; +import java.util.Iterator; +import java.util.Map; +import java.util.Set; +import java.util.function.Predicate; + +public class MapBackedSet implements Serializable, Set +{ + protected MapBackedSet() {} + public T[] toArray(T[] p0){ return null; } + public Iterator iterator(){ return null; } + public Object[] toArray(){ return null; } + public boolean add(E p0){ return false; } + public boolean addAll(Collection p0){ return false; } + public boolean contains(Object p0){ return false; } + public boolean containsAll(Collection p0){ return false; } + public boolean equals(Object p0){ return false; } + public boolean isEmpty(){ return false; } + public boolean remove(Object p0){ return false; } + public boolean removeAll(Collection p0){ return false; } + public boolean removeIf(Predicate p0){ return false; } + public boolean retainAll(Collection p0){ return false; } + public int hashCode(){ return 0; } + public int size(){ return 0; } + public static MapBackedSet mapBackedSet(Map p0){ return null; } + public static MapBackedSet mapBackedSet(Map p0, V p1){ return null; } + public void clear(){} +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/set/PredicatedNavigableSet.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/set/PredicatedNavigableSet.java new file mode 100644 index 00000000000..46248977046 --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/set/PredicatedNavigableSet.java @@ -0,0 +1,27 @@ +// Generated automatically from org.apache.commons.collections4.set.PredicatedNavigableSet for testing purposes + +package org.apache.commons.collections4.set; + +import java.util.Iterator; +import java.util.NavigableSet; +import org.apache.commons.collections4.Predicate; +import org.apache.commons.collections4.set.PredicatedSortedSet; + +public class PredicatedNavigableSet extends PredicatedSortedSet implements NavigableSet +{ + protected PredicatedNavigableSet() {} + protected NavigableSet decorated(){ return null; } + protected PredicatedNavigableSet(NavigableSet p0, Predicate p1){} + public E ceiling(E p0){ return null; } + public E floor(E p0){ return null; } + public E higher(E p0){ return null; } + public E lower(E p0){ return null; } + public E pollFirst(){ return null; } + public E pollLast(){ return null; } + public Iterator descendingIterator(){ return null; } + public NavigableSet descendingSet(){ return null; } + public NavigableSet headSet(E p0, boolean p1){ return null; } + public NavigableSet subSet(E p0, boolean p1, E p2, boolean p3){ return null; } + public NavigableSet tailSet(E p0, boolean p1){ return null; } + public static PredicatedNavigableSet predicatedNavigableSet(NavigableSet p0, Predicate p1){ return null; } +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/set/PredicatedSet.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/set/PredicatedSet.java new file mode 100644 index 00000000000..98d3e7bb48c --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/set/PredicatedSet.java @@ -0,0 +1,17 @@ +// Generated automatically from org.apache.commons.collections4.set.PredicatedSet for testing purposes + +package org.apache.commons.collections4.set; + +import java.util.Set; +import org.apache.commons.collections4.Predicate; +import org.apache.commons.collections4.collection.PredicatedCollection; + +public class PredicatedSet extends PredicatedCollection implements Set +{ + protected PredicatedSet() {} + protected PredicatedSet(Set p0, Predicate p1){} + protected Set decorated(){ return null; } + public boolean equals(Object p0){ return false; } + public int hashCode(){ return 0; } + public static PredicatedSet predicatedSet(Set p0, Predicate p1){ return null; } +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/set/PredicatedSortedSet.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/set/PredicatedSortedSet.java new file mode 100644 index 00000000000..4eefa083a8b --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/set/PredicatedSortedSet.java @@ -0,0 +1,22 @@ +// Generated automatically from org.apache.commons.collections4.set.PredicatedSortedSet for testing purposes + +package org.apache.commons.collections4.set; + +import java.util.Comparator; +import java.util.SortedSet; +import org.apache.commons.collections4.Predicate; +import org.apache.commons.collections4.set.PredicatedSet; + +public class PredicatedSortedSet extends PredicatedSet implements SortedSet +{ + protected PredicatedSortedSet() {} + protected PredicatedSortedSet(SortedSet p0, Predicate p1){} + protected SortedSet decorated(){ return null; } + public Comparator comparator(){ return null; } + public E first(){ return null; } + public E last(){ return null; } + public SortedSet headSet(E p0){ return null; } + public SortedSet subSet(E p0, E p1){ return null; } + public SortedSet tailSet(E p0){ return null; } + public static PredicatedSortedSet predicatedSortedSet(SortedSet p0, Predicate p1){ return null; } +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/set/TransformedNavigableSet.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/set/TransformedNavigableSet.java new file mode 100644 index 00000000000..22afceeebf6 --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/set/TransformedNavigableSet.java @@ -0,0 +1,28 @@ +// Generated automatically from org.apache.commons.collections4.set.TransformedNavigableSet for testing purposes + +package org.apache.commons.collections4.set; + +import java.util.Iterator; +import java.util.NavigableSet; +import org.apache.commons.collections4.Transformer; +import org.apache.commons.collections4.set.TransformedSortedSet; + +public class TransformedNavigableSet extends TransformedSortedSet implements NavigableSet +{ + protected TransformedNavigableSet() {} + protected NavigableSet decorated(){ return null; } + protected TransformedNavigableSet(NavigableSet p0, Transformer p1){} + public E ceiling(E p0){ return null; } + public E floor(E p0){ return null; } + public E higher(E p0){ return null; } + public E lower(E p0){ return null; } + public E pollFirst(){ return null; } + public E pollLast(){ return null; } + public Iterator descendingIterator(){ return null; } + public NavigableSet descendingSet(){ return null; } + public NavigableSet headSet(E p0, boolean p1){ return null; } + public NavigableSet subSet(E p0, boolean p1, E p2, boolean p3){ return null; } + public NavigableSet tailSet(E p0, boolean p1){ return null; } + public static TransformedNavigableSet transformedNavigableSet(NavigableSet p0, Transformer p1){ return null; } + public static TransformedNavigableSet transformingNavigableSet(NavigableSet p0, Transformer p1){ return null; } +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/set/TransformedSet.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/set/TransformedSet.java new file mode 100644 index 00000000000..48f89ba97d9 --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/set/TransformedSet.java @@ -0,0 +1,17 @@ +// Generated automatically from org.apache.commons.collections4.set.TransformedSet for testing purposes + +package org.apache.commons.collections4.set; + +import java.util.Set; +import org.apache.commons.collections4.Transformer; +import org.apache.commons.collections4.collection.TransformedCollection; + +public class TransformedSet extends TransformedCollection implements Set +{ + protected TransformedSet() {} + protected TransformedSet(Set p0, Transformer p1){} + public boolean equals(Object p0){ return false; } + public int hashCode(){ return 0; } + public static Set transformedSet(Set p0, Transformer p1){ return null; } + public static TransformedSet transformingSet(Set p0, Transformer p1){ return null; } +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/set/TransformedSortedSet.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/set/TransformedSortedSet.java new file mode 100644 index 00000000000..d2af58ae7b9 --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/set/TransformedSortedSet.java @@ -0,0 +1,23 @@ +// Generated automatically from org.apache.commons.collections4.set.TransformedSortedSet for testing purposes + +package org.apache.commons.collections4.set; + +import java.util.Comparator; +import java.util.SortedSet; +import org.apache.commons.collections4.Transformer; +import org.apache.commons.collections4.set.TransformedSet; + +public class TransformedSortedSet extends TransformedSet implements SortedSet +{ + protected TransformedSortedSet() {} + protected SortedSet getSortedSet(){ return null; } + protected TransformedSortedSet(SortedSet p0, Transformer p1){} + public Comparator comparator(){ return null; } + public E first(){ return null; } + public E last(){ return null; } + public SortedSet headSet(E p0){ return null; } + public SortedSet subSet(E p0, E p1){ return null; } + public SortedSet tailSet(E p0){ return null; } + public static TransformedSortedSet transformedSortedSet(SortedSet p0, Transformer p1){ return null; } + public static TransformedSortedSet transformingSortedSet(SortedSet p0, Transformer p1){ return null; } +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/set/UnmodifiableNavigableSet.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/set/UnmodifiableNavigableSet.java new file mode 100644 index 00000000000..c8713196dcd --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/set/UnmodifiableNavigableSet.java @@ -0,0 +1,33 @@ +// Generated automatically from org.apache.commons.collections4.set.UnmodifiableNavigableSet for testing purposes + +package org.apache.commons.collections4.set; + +import java.util.Collection; +import java.util.Iterator; +import java.util.NavigableSet; +import java.util.SortedSet; +import java.util.function.Predicate; +import org.apache.commons.collections4.Unmodifiable; +import org.apache.commons.collections4.set.AbstractNavigableSetDecorator; + +public class UnmodifiableNavigableSet extends AbstractNavigableSetDecorator implements Unmodifiable +{ + protected UnmodifiableNavigableSet() {} + public Iterator descendingIterator(){ return null; } + public Iterator iterator(){ return null; } + public NavigableSet descendingSet(){ return null; } + public NavigableSet headSet(E p0, boolean p1){ return null; } + public NavigableSet subSet(E p0, boolean p1, E p2, boolean p3){ return null; } + public NavigableSet tailSet(E p0, boolean p1){ return null; } + public SortedSet headSet(E p0){ return null; } + public SortedSet subSet(E p0, E p1){ return null; } + public SortedSet tailSet(E p0){ return null; } + public boolean add(E p0){ return false; } + public boolean addAll(Collection p0){ return false; } + public boolean remove(Object p0){ return false; } + public boolean removeAll(Collection p0){ return false; } + public boolean removeIf(Predicate p0){ return false; } + public boolean retainAll(Collection p0){ return false; } + public static NavigableSet unmodifiableNavigableSet(NavigableSet p0){ return null; } + public void clear(){} +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/set/UnmodifiableSet.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/set/UnmodifiableSet.java new file mode 100644 index 00000000000..f34de16e11d --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/set/UnmodifiableSet.java @@ -0,0 +1,24 @@ +// Generated automatically from org.apache.commons.collections4.set.UnmodifiableSet for testing purposes + +package org.apache.commons.collections4.set; + +import java.util.Collection; +import java.util.Iterator; +import java.util.Set; +import java.util.function.Predicate; +import org.apache.commons.collections4.Unmodifiable; +import org.apache.commons.collections4.set.AbstractSerializableSetDecorator; + +public class UnmodifiableSet extends AbstractSerializableSetDecorator implements Unmodifiable +{ + protected UnmodifiableSet() {} + public Iterator iterator(){ return null; } + public boolean add(E p0){ return false; } + public boolean addAll(Collection p0){ return false; } + public boolean remove(Object p0){ return false; } + public boolean removeAll(Collection p0){ return false; } + public boolean removeIf(Predicate p0){ return false; } + public boolean retainAll(Collection p0){ return false; } + public static Set unmodifiableSet(Set p0){ return null; } + public void clear(){} +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/set/UnmodifiableSortedSet.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/set/UnmodifiableSortedSet.java new file mode 100644 index 00000000000..7a70770cbd1 --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/set/UnmodifiableSortedSet.java @@ -0,0 +1,27 @@ +// Generated automatically from org.apache.commons.collections4.set.UnmodifiableSortedSet for testing purposes + +package org.apache.commons.collections4.set; + +import java.util.Collection; +import java.util.Iterator; +import java.util.SortedSet; +import java.util.function.Predicate; +import org.apache.commons.collections4.Unmodifiable; +import org.apache.commons.collections4.set.AbstractSortedSetDecorator; + +public class UnmodifiableSortedSet extends AbstractSortedSetDecorator implements Unmodifiable +{ + protected UnmodifiableSortedSet() {} + public Iterator iterator(){ return null; } + public SortedSet headSet(E p0){ return null; } + public SortedSet subSet(E p0, E p1){ return null; } + public SortedSet tailSet(E p0){ return null; } + public boolean add(E p0){ return false; } + public boolean addAll(Collection p0){ return false; } + public boolean remove(Object p0){ return false; } + public boolean removeAll(Collection p0){ return false; } + public boolean removeIf(Predicate p0){ return false; } + public boolean retainAll(Collection p0){ return false; } + public static SortedSet unmodifiableSortedSet(SortedSet p0){ return null; } + public void clear(){} +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/splitmap/AbstractIterableGetMapDecorator.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/splitmap/AbstractIterableGetMapDecorator.java new file mode 100644 index 00000000000..fba230bba07 --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/splitmap/AbstractIterableGetMapDecorator.java @@ -0,0 +1,29 @@ +// Generated automatically from org.apache.commons.collections4.splitmap.AbstractIterableGetMapDecorator for testing purposes + +package org.apache.commons.collections4.splitmap; + +import java.util.Collection; +import java.util.Map; +import java.util.Set; +import org.apache.commons.collections4.IterableGet; +import org.apache.commons.collections4.MapIterator; + +public class AbstractIterableGetMapDecorator implements IterableGet +{ + protected AbstractIterableGetMapDecorator(){} + protected Map decorated(){ return null; } + public AbstractIterableGetMapDecorator(Map p0){} + public Collection values(){ return null; } + public MapIterator mapIterator(){ return null; } + public Set keySet(){ return null; } + public Set> entrySet(){ return null; } + public String toString(){ return null; } + public V get(Object p0){ return null; } + public V remove(Object p0){ return null; } + public boolean containsKey(Object p0){ return false; } + public boolean containsValue(Object p0){ return false; } + public boolean equals(Object p0){ return false; } + public boolean isEmpty(){ return false; } + public int hashCode(){ return 0; } + public int size(){ return 0; } +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/splitmap/TransformedSplitMap.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/splitmap/TransformedSplitMap.java new file mode 100644 index 00000000000..4285142a482 --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/splitmap/TransformedSplitMap.java @@ -0,0 +1,23 @@ +// Generated automatically from org.apache.commons.collections4.splitmap.TransformedSplitMap for testing purposes + +package org.apache.commons.collections4.splitmap; + +import java.io.Serializable; +import java.util.Map; +import org.apache.commons.collections4.Put; +import org.apache.commons.collections4.Transformer; +import org.apache.commons.collections4.splitmap.AbstractIterableGetMapDecorator; + +public class TransformedSplitMap extends AbstractIterableGetMapDecorator implements Put, Serializable +{ + protected TransformedSplitMap() {} + protected K transformKey(J p0){ return null; } + protected Map transformMap(Map p0){ return null; } + protected TransformedSplitMap(Map p0, Transformer p1, Transformer p2){} + protected V checkSetValue(U p0){ return null; } + protected V transformValue(U p0){ return null; } + public V put(J p0, U p1){ return null; } + public static TransformedSplitMap transformingMap(Map p0, Transformer p1, Transformer p2){ return null; } + public void clear(){} + public void putAll(Map p0){} +} diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/trie/UnmodifiableTrie.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/trie/UnmodifiableTrie.java new file mode 100644 index 00000000000..829628ee63b --- /dev/null +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/trie/UnmodifiableTrie.java @@ -0,0 +1,45 @@ +// Generated automatically from org.apache.commons.collections4.trie.UnmodifiableTrie for testing purposes + +package org.apache.commons.collections4.trie; + +import java.io.Serializable; +import java.util.Collection; +import java.util.Comparator; +import java.util.Map; +import java.util.Set; +import java.util.SortedMap; +import org.apache.commons.collections4.OrderedMapIterator; +import org.apache.commons.collections4.Trie; +import org.apache.commons.collections4.Unmodifiable; + +public class UnmodifiableTrie implements Serializable, Trie, Unmodifiable +{ + protected UnmodifiableTrie() {} + public Collection values(){ return null; } + public Comparator comparator(){ return null; } + public K firstKey(){ return null; } + public K lastKey(){ return null; } + public K nextKey(K p0){ return null; } + public K previousKey(K p0){ return null; } + public OrderedMapIterator mapIterator(){ return null; } + public Set keySet(){ return null; } + public Set> entrySet(){ return null; } + public SortedMap headMap(K p0){ return null; } + public SortedMap prefixMap(K p0){ return null; } + public SortedMap subMap(K p0, K p1){ return null; } + public SortedMap tailMap(K p0){ return null; } + public String toString(){ return null; } + public UnmodifiableTrie(Trie p0){} + public V get(Object p0){ return null; } + public V put(K p0, V p1){ return null; } + public V remove(Object p0){ return null; } + public boolean containsKey(Object p0){ return false; } + public boolean containsValue(Object p0){ return false; } + public boolean equals(Object p0){ return false; } + public boolean isEmpty(){ return false; } + public int hashCode(){ return 0; } + public int size(){ return 0; } + public static Trie unmodifiableTrie(Trie p0){ return null; } + public void clear(){} + public void putAll(Map p0){} +} From bdd78d2bc75f4db30051abcc914cc75a7d88b2b2 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Mon, 27 Sep 2021 16:23:20 +0100 Subject: [PATCH 637/741] Fix stub --- .../org/apache/commons/collections4/bag/AbstractMapBag.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/bag/AbstractMapBag.java b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/bag/AbstractMapBag.java index 78374820036..1f4fb4b0ec3 100644 --- a/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/bag/AbstractMapBag.java +++ b/java/ql/test/stubs/apache-commons-collections4-4.4/org/apache/commons/collections4/bag/AbstractMapBag.java @@ -39,7 +39,7 @@ abstract public class AbstractMapBag implements Bag public int hashCode(){ return 0; } public int size(){ return 0; } public void clear(){} - static class MutableInteger + protected static class MutableInteger { protected MutableInteger() {} MutableInteger(int p0){} From a3c1975a84f6535baf56fa2ae97f1ccb56cb4de7 Mon Sep 17 00:00:00 2001 From: Felicity Chapman Date: Mon, 27 Sep 2021 16:35:22 +0100 Subject: [PATCH 638/741] Update links to match those on the staging site --- docs/codeql/support/ql-training.rst | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/docs/codeql/support/ql-training.rst b/docs/codeql/support/ql-training.rst index 172a6ea38e9..6eb8019e5c9 100644 --- a/docs/codeql/support/ql-training.rst +++ b/docs/codeql/support/ql-training.rst @@ -39,25 +39,25 @@ We recommend that you download `CodeQL for Visual Studio Code `__–an introduction to variant analysis and CodeQL for C/C++ programmers. -- `Example: Bad overflow guard <../../QL/ql-training/cpp/bad-overflow-guard.html>`__–an example of iterative query development to find bad overflow guards in a C++ project. -- `Program representation: CodeQL for C/C++ <../../QL/ql-training/cpp/program-representation-cpp.html>`__–information on how CodeQL analysis represents C/C++ programs. -- `Introduction to local data flow <../../QL/ql-training/cpp/data-flow-cpp.html>`__–an introduction to analyzing local data flow in C/C++ using CodeQL, including an example demonstrating how to develop a query to find a real CVE. -- `Exercise: snprintf overflow <../../QL/ql-training/cpp/snprintf.html>`__–an example demonstrating how to develop a data flow query. -- `Introduction to global data flow <../../QL/ql-training/cpp/global-data-flow-cpp.html>`__–an introduction to analyzing global data flow in C/C++ using CodeQL. -- `Analyzing control flow: CodeQL for C/C++ <../../QL/ql-training/cpp/control-flow-cpp.html>`__–an introduction to analyzing control flow in C/C++ using CodeQL. +- `Introduction to variant analysis: CodeQL for C/C++ `__–an introduction to variant analysis and CodeQL for C/C++ programmers. +- `Example: Bad overflow guard `__–an example of iterative query development to find bad overflow guards in a C++ project. +- `Program representation: CodeQL for C/C++ `__–information on how CodeQL analysis represents C/C++ programs. +- `Introduction to local data flow `__–an introduction to analyzing local data flow in C/C++ using CodeQL, including an example demonstrating how to develop a query to find a real CVE. +- `Exercise: snprintf overflow `__–an example demonstrating how to develop a data flow query. +- `Introduction to global data flow `__–an introduction to analyzing global data flow in C/C++ using CodeQL. +- `Analyzing control flow: CodeQL for C/C++ `__–an introduction to analyzing control flow in C/C++ using CodeQL. CodeQL and variant analysis for Java ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -- `Introduction to variant analysis: CodeQL for Java <../../QL/ql-training/java/intro-ql-java.html>`__–an introduction to variant analysis and CodeQL for Java programmers. -- `Example: Query injection <../../QL/ql-training/java/query-injection-java.html>`__–an example of iterative query development to find unsanitized SPARQL injections in a Java project. -- `Program representation: CodeQL for Java <../../QL/ql-training/java/program-representation-java.html>`__–information on how CodeQL analysis represents Java programs. -- `Introduction to local data flow <../../QL/ql-training/java/data-flow-java.html>`__–an introduction to analyzing local data flow in Java using CodeQL, including an example demonstrating how to develop a query to find a real CVE. -- `Exercise: Apache Struts <../../QL/ql-training/java/apache-struts-java.html>`__–an example demonstrating how to develop a data flow query. -- `Introduction to global data flow <../../QL/ql-training/java/global-data-flow-java.html>`__–an introduction to analyzing global data flow in Java using CodeQL. +- `Introduction to variant analysis: CodeQL for Java `__–an introduction to variant analysis and CodeQL for Java programmers. +- `Example: Query injection `__–an example of iterative query development to find unsanitized SPARQL injections in a Java project. +- `Program representation: CodeQL for Java `__–information on how CodeQL analysis represents Java programs. +- `Introduction to local data flow `__–an introduction to analyzing local data flow in Java using CodeQL, including an example demonstrating how to develop a query to find a real CVE. +- `Exercise: Apache Struts `__–an example demonstrating how to develop a data flow query. +- `Introduction to global data flow `__–an introduction to analyzing global data flow in Java using CodeQL. Further reading ~~~~~~~~~~~~~~~ -- `GitHub Security Lab `__ \ No newline at end of file +- `GitHub Security Lab `__ From 3c17ac424d5adc0774f328c6f6e3bf2c75a59564 Mon Sep 17 00:00:00 2001 From: shati-patel <42641846+shati-patel@users.noreply.github.com> Date: Mon, 27 Sep 2021 18:27:30 +0100 Subject: [PATCH 639/741] Docs: Fix some broken/redirected links --- docs/codeql/README.rst | 4 ++-- docs/codeql/ql-training/java/apache-struts-java.rst | 2 +- docs/codeql/ql-training/java/global-data-flow-java.rst | 2 +- docs/codeql/ql-training/template.rst | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/codeql/README.rst b/docs/codeql/README.rst index c7ea08519da..d27fe2189d2 100644 --- a/docs/codeql/README.rst +++ b/docs/codeql/README.rst @@ -8,7 +8,7 @@ The CodeQL documentation in this repository is written in reStructuredText and c HTML using Sphinx. For more information on writing in reStructuredText, -see http://docutils.sourceforge.net/rst.html. +see https://docutils.sourceforge.io/rst.html. For more information on Sphinx, see https://www.sphinx-doc.org. @@ -99,7 +99,7 @@ generates html slide shows in the ```` directory when run from the ``ql-training`` source directory. For more information about creating slides for QL training and variant analysis -examples, see the `template slide deck `__. +examples, see the `template slide deck `__. Viewing the current version of the CodeQL documentation ******************************************************* diff --git a/docs/codeql/ql-training/java/apache-struts-java.rst b/docs/codeql/ql-training/java/apache-struts-java.rst index e1de94f5e6a..e85276e14f0 100644 --- a/docs/codeql/ql-training/java/apache-struts-java.rst +++ b/docs/codeql/ql-training/java/apache-struts-java.rst @@ -134,4 +134,4 @@ Model answer, step 4 and sink.getNode() instanceof UnsafeDeserializationSink select sink.getNode().(UnsafeDeserializationSink).getMethodAccess(), source, sink, "Unsafe deserialization of $@.", source, "user input" -More full-featured version: https://github.com/github/security-lab/tree/main/CodeQL_Queries/java/Apache_Struts_CVE-2017-9805 \ No newline at end of file +More full-featured version: https://github.com/github/securitylab/tree/main/CodeQL_Queries/java/Apache_Struts_CVE-2017-9805 diff --git a/docs/codeql/ql-training/java/global-data-flow-java.rst b/docs/codeql/ql-training/java/global-data-flow-java.rst index d54710cda79..2c1827a937c 100644 --- a/docs/codeql/ql-training/java/global-data-flow-java.rst +++ b/docs/codeql/ql-training/java/global-data-flow-java.rst @@ -54,7 +54,7 @@ Code injection in Apache struts .. note:: More details on the CVE can be found here: https://securitylab.github.com/research/apache-struts-CVE-2018-11776 and - https://github.com/github/security-lab/tree/main/CodeQL_Queries/java/Apache_Struts_CVE-2018-11776 + https://github.com/github/securitylab/tree/main/CodeQL_Queries/java/Apache_Struts_CVE-2018-11776 More details on OGNL can be found here: https://commons.apache.org/proper/commons-ognl/ diff --git a/docs/codeql/ql-training/template.rst b/docs/codeql/ql-training/template.rst index a292f50537f..0fc0a740a66 100644 --- a/docs/codeql/ql-training/template.rst +++ b/docs/codeql/ql-training/template.rst @@ -159,7 +159,7 @@ Specify the language to apply syntax highlighting and the lines of the fragment Further details =============== -- For more information on writing in reStructuredText, see http://docutils.sourceforge.net/rst.html. +- For more information on writing in reStructuredText, see https://docutils.sourceforge.io/rst.html. - For more information on Sphinx, see https://www.sphinx-doc.org. From 31c34870ef5de7ea1f21bd3d8e7844c83b4e86fe Mon Sep 17 00:00:00 2001 From: shati-patel <42641846+shati-patel@users.noreply.github.com> Date: Mon, 27 Sep 2021 18:27:57 +0100 Subject: [PATCH 640/741] Fix warning about "Anonymous hyperlink mismatch" --- docs/codeql/ql-training/slide-snippets/local-data-flow.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/codeql/ql-training/slide-snippets/local-data-flow.rst b/docs/codeql/ql-training/slide-snippets/local-data-flow.rst index 8041c077190..b023eb213e4 100644 --- a/docs/codeql/ql-training/slide-snippets/local-data-flow.rst +++ b/docs/codeql/ql-training/slide-snippets/local-data-flow.rst @@ -112,7 +112,7 @@ So all references will need to be qualified (that is, ``DataFlow::Node``) A **module** is a way of organizing QL code by grouping together related predicates, classes, and (sub-)modules. They can be either explicitly declared or implicit. A query library implicitly declares a module with the same name as the QLL file. For further information on libraries and modules in QL, see the chapter on `Modules `__ in the QL language reference. - For further information on importing QL libraries and modules, see the chapter on `Name resolution <>`__ in the QL language reference. + For further information on importing QL libraries and modules, see the chapter on `Name resolution `__ in the QL language reference. Data flow graph =============== From 64fcbe05c3ea6c71255f90d47debafa6ecc149bb Mon Sep 17 00:00:00 2001 From: shati-patel <42641846+shati-patel@users.noreply.github.com> Date: Mon, 27 Sep 2021 18:50:59 +0100 Subject: [PATCH 641/741] Docs: Fix inconsistencies in sphinx config files --- docs/codeql/ql-training/conf.py | 2 +- docs/codeql/support/conf.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/codeql/ql-training/conf.py b/docs/codeql/ql-training/conf.py index 7514f9798f1..1c36b806de1 100644 --- a/docs/codeql/ql-training/conf.py +++ b/docs/codeql/ql-training/conf.py @@ -47,7 +47,7 @@ import sys import os def setup(sphinx): - sys.path.insert(0, os.path.join(os.path.dirname( __file__ ), '..')) + sys.path.insert(0, os.path.join(os.path.dirname(__file__), os.path.pardir)) from qllexer import QLLexer sphinx.add_lexer("ql", QLLexer()) diff --git a/docs/codeql/support/conf.py b/docs/codeql/support/conf.py index 040ef112d30..9e650e30193 100644 --- a/docs/codeql/support/conf.py +++ b/docs/codeql/support/conf.py @@ -69,9 +69,9 @@ html_theme_options = {'font_size': '16px', 'body_text': '#333', 'link': '#2F1695', 'link_hover': '#2F1695', - 'font_family': 'Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Segoe UI Symbol;', 'show_powered_by': False, 'nosidebar':True, + 'head_font_family': '-apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"', } html_favicon = '../images/site/favicon.ico' From dfb27d170c9dc7de0be94a134bd55bce110e151f Mon Sep 17 00:00:00 2001 From: Robert Marsh Date: Mon, 27 Sep 2021 13:58:54 -0700 Subject: [PATCH 642/741] C++ fix test compilation errors --- cpp/ql/test/include/type_traits.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/cpp/ql/test/include/type_traits.h b/cpp/ql/test/include/type_traits.h index 4f4db132334..dba04f36cad 100644 --- a/cpp/ql/test/include/type_traits.h +++ b/cpp/ql/test/include/type_traits.h @@ -1,6 +1,8 @@ #if !defined(CODEQL_TYPE_TRAITS_H) #define CODEQL_TYPE_TRAITS_H +typedef unsigned long size_t; + namespace std { template struct remove_const { typedef T type; }; From b7b229d59b66c56135a23f1f8b0e026221a3606a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 28 Sep 2021 00:08:59 +0000 Subject: [PATCH 643/741] Add changed framework coverage reports --- .../library-coverage/coverage.csv | 178 +++++++++--------- .../library-coverage/coverage.rst | 6 +- 2 files changed, 92 insertions(+), 92 deletions(-) diff --git a/java/documentation/library-coverage/coverage.csv b/java/documentation/library-coverage/coverage.csv index 63f39c02761..b0fa5f000d6 100644 --- a/java/documentation/library-coverage/coverage.csv +++ b/java/documentation/library-coverage/coverage.csv @@ -1,89 +1,89 @@ -package,sink,source,summary,sink:bean-validation,sink:create-file,sink:groovy,sink:header-splitting,sink:information-leak,sink:jexl,sink:jndi-injection,sink:ldap,sink:mvel,sink:ognl-injection,sink:open-url,sink:set-hostname-verifier,sink:sql,sink:url-open-stream,sink:url-redirect,sink:xpath,sink:xss,source:remote,summary:taint,summary:value -android.content,8,,4,,,,,,,,,,,,,8,,,,,,4, -android.database,59,,30,,,,,,,,,,,,,59,,,,,,30, -android.net,,,60,,,,,,,,,,,,,,,,,,,45,15 -android.util,,16,,,,,,,,,,,,,,,,,,,16,, -android.webkit,3,2,,,,,,,,,,,,,,,,,,3,2,, -com.esotericsoftware.kryo.io,,,1,,,,,,,,,,,,,,,,,,,1, -com.esotericsoftware.kryo5.io,,,1,,,,,,,,,,,,,,,,,,,1, -com.fasterxml.jackson.core,,,1,,,,,,,,,,,,,,,,,,,1, -com.fasterxml.jackson.databind,,,5,,,,,,,,,,,,,,,,,,,5, -com.google.common.base,,,85,,,,,,,,,,,,,,,,,,,62,23 -com.google.common.cache,,,17,,,,,,,,,,,,,,,,,,,,17 -com.google.common.collect,,,553,,,,,,,,,,,,,,,,,,,2,551 -com.google.common.io,6,,73,,,,,,,,,,,,,,6,,,,,72,1 -com.opensymphony.xwork2.ognl,3,,,,,,,,,,,,3,,,,,,,,,, -com.unboundid.ldap.sdk,17,,,,,,,,,,17,,,,,,,,,,,, -flexjson,,,1,,,,,,,,,,,,,,,,,,,,1 -groovy.lang,26,,,,,26,,,,,,,,,,,,,,,,, -groovy.util,5,,,,,5,,,,,,,,,,,,,,,,, -jakarta.faces.context,2,7,,,,,,,,,,,,,,,,,,2,7,, -jakarta.json,,,123,,,,,,,,,,,,,,,,,,,100,23 -jakarta.ws.rs.client,1,,,,,,,,,,,,,1,,,,,,,,, -jakarta.ws.rs.container,,9,,,,,,,,,,,,,,,,,,,9,, -jakarta.ws.rs.core,2,,149,,,,,,,,,,,,,,,2,,,,94,55 -java.beans,,,1,,,,,,,,,,,,,,,,,,,1, -java.io,3,,27,,3,,,,,,,,,,,,,,,,,26,1 -java.lang,,,47,,,,,,,,,,,,,,,,,,,41,6 -java.net,10,3,7,,,,,,,,,,,10,,,,,,,3,7, -java.nio,10,,4,,10,,,,,,,,,,,,,,,,,4, -java.sql,7,,,,,,,,,,,,,,,7,,,,,,, -java.util,,,337,,,,,,,,,,,,,,,,,,,15,322 -javax.faces.context,2,7,,,,,,,,,,,,,,,,,,2,7,, -javax.json,,,123,,,,,,,,,,,,,,,,,,,100,23 -javax.management.remote,2,,,,,,,,,2,,,,,,,,,,,,, -javax.naming,7,,,,,,,,,6,1,,,,,,,,,,,, -javax.net.ssl,2,,,,,,,,,,,,,,2,,,,,,,, -javax.script,1,,,,,,,,,,,1,,,,,,,,,,, -javax.servlet,4,21,2,,,,3,1,,,,,,,,,,,,,21,2, -javax.validation,1,1,,1,,,,,,,,,,,,,,,,,1,, -javax.ws.rs.client,1,,,,,,,,,,,,,1,,,,,,,,, -javax.ws.rs.container,,9,,,,,,,,,,,,,,,,,,,9,, -javax.ws.rs.core,3,,149,,,,1,,,,,,,,,,,2,,,,94,55 -javax.xml.transform.sax,,,4,,,,,,,,,,,,,,,,,,,4, -javax.xml.transform.stream,,,2,,,,,,,,,,,,,,,,,,,2, -javax.xml.xpath,3,,,,,,,,,,,,,,,,,,3,,,, -jodd.json,,,10,,,,,,,,,,,,,,,,,,,,10 -ognl,6,,,,,,,,,,,,6,,,,,,,,,, -org.apache.commons.codec,,,6,,,,,,,,,,,,,,,,,,,6, -org.apache.commons.collections,,,394,,,,,,,,,,,,,,,,,,,9,385 -org.apache.commons.collections4,,,394,,,,,,,,,,,,,,,,,,,9,385 -org.apache.commons.io,,,22,,,,,,,,,,,,,,,,,,,22, -org.apache.commons.jexl2,15,,,,,,,,15,,,,,,,,,,,,,, -org.apache.commons.jexl3,15,,,,,,,,15,,,,,,,,,,,,,, -org.apache.commons.lang3,,,423,,,,,,,,,,,,,,,,,,,292,131 -org.apache.commons.ognl,6,,,,,,,,,,,,6,,,,,,,,,, -org.apache.commons.text,,,272,,,,,,,,,,,,,,,,,,,220,52 -org.apache.directory.ldap.client.api,1,,,,,,,,,,1,,,,,,,,,,,, -org.apache.hc.core5.function,,,1,,,,,,,,,,,,,,,,,,,1, -org.apache.hc.core5.http,1,2,39,,,,,,,,,,,,,,,,,1,2,39, -org.apache.hc.core5.net,,,2,,,,,,,,,,,,,,,,,,,2, -org.apache.hc.core5.util,,,24,,,,,,,,,,,,,,,,,,,18,6 -org.apache.http,27,3,70,,,,,,,,,,,25,,,,,,2,3,62,8 -org.apache.ibatis.jdbc,6,,,,,,,,,,,,,,,6,,,,,,, -org.apache.shiro.jndi,1,,,,,,,,,1,,,,,,,,,,,,, -org.codehaus.groovy.control,1,,,,,1,,,,,,,,,,,,,,,,, -org.dom4j,20,,,,,,,,,,,,,,,,,,20,,,, -org.hibernate,7,,,,,,,,,,,,,,,7,,,,,,, -org.jooq,1,,,,,,,,,,,,,,,1,,,,,,, -org.json,,,236,,,,,,,,,,,,,,,,,,,198,38 -org.mvel2,16,,,,,,,,,,,16,,,,,,,,,,, -org.springframework.beans,,,26,,,,,,,,,,,,,,,,,,,,26 -org.springframework.cache,,,13,,,,,,,,,,,,,,,,,,,,13 -org.springframework.http,14,,70,,,,,,,,,,,14,,,,,,,,60,10 -org.springframework.jdbc.core,10,,,,,,,,,,,,,,,10,,,,,,, -org.springframework.jdbc.object,9,,,,,,,,,,,,,,,9,,,,,,, -org.springframework.jndi,1,,,,,,,,,1,,,,,,,,,,,,, -org.springframework.ldap,42,,,,,,,,,28,14,,,,,,,,,,,, -org.springframework.security.web.savedrequest,,6,,,,,,,,,,,,,,,,,,,6,, -org.springframework.ui,,,32,,,,,,,,,,,,,,,,,,,,32 -org.springframework.util,,,139,,,,,,,,,,,,,,,,,,,87,52 -org.springframework.validation,,,13,,,,,,,,,,,,,,,,,,,13, -org.springframework.web.client,13,3,,,,,,,,,,,,13,,,,,,,3,, -org.springframework.web.context.request,,8,,,,,,,,,,,,,,,,,,,8,, -org.springframework.web.multipart,,12,13,,,,,,,,,,,,,,,,,,12,13, -org.springframework.web.reactive.function.client,2,,,,,,,,,,,,,2,,,,,,,,, -org.springframework.web.util,,,163,,,,,,,,,,,,,,,,,,,138,25 -org.xml.sax,,,1,,,,,,,,,,,,,,,,,,,1, -org.xmlpull.v1,,3,,,,,,,,,,,,,,,,,,,3,, -play.mvc,,4,,,,,,,,,,,,,,,,,,,4,, +package,sink,source,summary,sink:bean-validation,sink:create-file,sink:groovy,sink:header-splitting,sink:information-leak,sink:jexl,sink:jndi-injection,sink:ldap,sink:mvel,sink:ognl-injection,sink:open-url,sink:set-hostname-verifier,sink:sql,sink:url-open-stream,sink:url-redirect,sink:xpath,sink:xslt,sink:xss,source:remote,summary:taint,summary:value +android.content,8,,4,,,,,,,,,,,,,8,,,,,,,4, +android.database,59,,30,,,,,,,,,,,,,59,,,,,,,30, +android.net,,,60,,,,,,,,,,,,,,,,,,,,45,15 +android.util,,16,,,,,,,,,,,,,,,,,,,,16,, +android.webkit,3,2,,,,,,,,,,,,,,,,,,,3,2,, +com.esotericsoftware.kryo.io,,,1,,,,,,,,,,,,,,,,,,,,1, +com.esotericsoftware.kryo5.io,,,1,,,,,,,,,,,,,,,,,,,,1, +com.fasterxml.jackson.core,,,1,,,,,,,,,,,,,,,,,,,,1, +com.fasterxml.jackson.databind,,,5,,,,,,,,,,,,,,,,,,,,5, +com.google.common.base,,,85,,,,,,,,,,,,,,,,,,,,62,23 +com.google.common.cache,,,17,,,,,,,,,,,,,,,,,,,,,17 +com.google.common.collect,,,553,,,,,,,,,,,,,,,,,,,,2,551 +com.google.common.io,6,,73,,,,,,,,,,,,,,6,,,,,,72,1 +com.opensymphony.xwork2.ognl,3,,,,,,,,,,,,3,,,,,,,,,,, +com.unboundid.ldap.sdk,17,,,,,,,,,,17,,,,,,,,,,,,, +flexjson,,,1,,,,,,,,,,,,,,,,,,,,,1 +groovy.lang,26,,,,,26,,,,,,,,,,,,,,,,,, +groovy.util,5,,,,,5,,,,,,,,,,,,,,,,,, +jakarta.faces.context,2,7,,,,,,,,,,,,,,,,,,,2,7,, +jakarta.json,,,123,,,,,,,,,,,,,,,,,,,,100,23 +jakarta.ws.rs.client,1,,,,,,,,,,,,,1,,,,,,,,,, +jakarta.ws.rs.container,,9,,,,,,,,,,,,,,,,,,,,9,, +jakarta.ws.rs.core,2,,149,,,,,,,,,,,,,,,2,,,,,94,55 +java.beans,,,1,,,,,,,,,,,,,,,,,,,,1, +java.io,3,,27,,3,,,,,,,,,,,,,,,,,,26,1 +java.lang,,,47,,,,,,,,,,,,,,,,,,,,41,6 +java.net,10,3,7,,,,,,,,,,,10,,,,,,,,3,7, +java.nio,10,,4,,10,,,,,,,,,,,,,,,,,,4, +java.sql,7,,,,,,,,,,,,,,,7,,,,,,,, +java.util,,,337,,,,,,,,,,,,,,,,,,,,15,322 +javax.faces.context,2,7,,,,,,,,,,,,,,,,,,,2,7,, +javax.json,,,123,,,,,,,,,,,,,,,,,,,,100,23 +javax.management.remote,2,,,,,,,,,2,,,,,,,,,,,,,, +javax.naming,7,,,,,,,,,6,1,,,,,,,,,,,,, +javax.net.ssl,2,,,,,,,,,,,,,,2,,,,,,,,, +javax.script,1,,,,,,,,,,,1,,,,,,,,,,,, +javax.servlet,4,21,2,,,,3,1,,,,,,,,,,,,,,21,2, +javax.validation,1,1,,1,,,,,,,,,,,,,,,,,,1,, +javax.ws.rs.client,1,,,,,,,,,,,,,1,,,,,,,,,, +javax.ws.rs.container,,9,,,,,,,,,,,,,,,,,,,,9,, +javax.ws.rs.core,3,,149,,,,1,,,,,,,,,,,2,,,,,94,55 +javax.xml.transform,1,,6,,,,,,,,,,,,,,,,,1,,,6, +javax.xml.xpath,3,,,,,,,,,,,,,,,,,,3,,,,, +jodd.json,,,10,,,,,,,,,,,,,,,,,,,,,10 +net.sf.saxon.s9api,5,,,,,,,,,,,,,,,,,,,5,,,, +ognl,6,,,,,,,,,,,,6,,,,,,,,,,, +org.apache.commons.codec,,,6,,,,,,,,,,,,,,,,,,,,6, +org.apache.commons.collections,,,394,,,,,,,,,,,,,,,,,,,,9,385 +org.apache.commons.collections4,,,394,,,,,,,,,,,,,,,,,,,,9,385 +org.apache.commons.io,,,22,,,,,,,,,,,,,,,,,,,,22, +org.apache.commons.jexl2,15,,,,,,,,15,,,,,,,,,,,,,,, +org.apache.commons.jexl3,15,,,,,,,,15,,,,,,,,,,,,,,, +org.apache.commons.lang3,,,423,,,,,,,,,,,,,,,,,,,,292,131 +org.apache.commons.ognl,6,,,,,,,,,,,,6,,,,,,,,,,, +org.apache.commons.text,,,272,,,,,,,,,,,,,,,,,,,,220,52 +org.apache.directory.ldap.client.api,1,,,,,,,,,,1,,,,,,,,,,,,, +org.apache.hc.core5.function,,,1,,,,,,,,,,,,,,,,,,,,1, +org.apache.hc.core5.http,1,2,39,,,,,,,,,,,,,,,,,,1,2,39, +org.apache.hc.core5.net,,,2,,,,,,,,,,,,,,,,,,,,2, +org.apache.hc.core5.util,,,24,,,,,,,,,,,,,,,,,,,,18,6 +org.apache.http,27,3,70,,,,,,,,,,,25,,,,,,,2,3,62,8 +org.apache.ibatis.jdbc,6,,,,,,,,,,,,,,,6,,,,,,,, +org.apache.shiro.jndi,1,,,,,,,,,1,,,,,,,,,,,,,, +org.codehaus.groovy.control,1,,,,,1,,,,,,,,,,,,,,,,,, +org.dom4j,20,,,,,,,,,,,,,,,,,,20,,,,, +org.hibernate,7,,,,,,,,,,,,,,,7,,,,,,,, +org.jooq,1,,,,,,,,,,,,,,,1,,,,,,,, +org.json,,,236,,,,,,,,,,,,,,,,,,,,198,38 +org.mvel2,16,,,,,,,,,,,16,,,,,,,,,,,, +org.springframework.beans,,,26,,,,,,,,,,,,,,,,,,,,,26 +org.springframework.cache,,,13,,,,,,,,,,,,,,,,,,,,,13 +org.springframework.http,14,,70,,,,,,,,,,,14,,,,,,,,,60,10 +org.springframework.jdbc.core,10,,,,,,,,,,,,,,,10,,,,,,,, +org.springframework.jdbc.object,9,,,,,,,,,,,,,,,9,,,,,,,, +org.springframework.jndi,1,,,,,,,,,1,,,,,,,,,,,,,, +org.springframework.ldap,42,,,,,,,,,28,14,,,,,,,,,,,,, +org.springframework.security.web.savedrequest,,6,,,,,,,,,,,,,,,,,,,,6,, +org.springframework.ui,,,32,,,,,,,,,,,,,,,,,,,,,32 +org.springframework.util,,,139,,,,,,,,,,,,,,,,,,,,87,52 +org.springframework.validation,,,13,,,,,,,,,,,,,,,,,,,,13, +org.springframework.web.client,13,3,,,,,,,,,,,,13,,,,,,,,3,, +org.springframework.web.context.request,,8,,,,,,,,,,,,,,,,,,,,8,, +org.springframework.web.multipart,,12,13,,,,,,,,,,,,,,,,,,,12,13, +org.springframework.web.reactive.function.client,2,,,,,,,,,,,,,2,,,,,,,,,, +org.springframework.web.util,,,163,,,,,,,,,,,,,,,,,,,,138,25 +org.xml.sax,,,1,,,,,,,,,,,,,,,,,,,,1, +org.xmlpull.v1,,3,,,,,,,,,,,,,,,,,,,,3,, +play.mvc,,4,,,,,,,,,,,,,,,,,,,,4,, diff --git a/java/documentation/library-coverage/coverage.rst b/java/documentation/library-coverage/coverage.rst index e4991a0c1ed..6782fd3e515 100644 --- a/java/documentation/library-coverage/coverage.rst +++ b/java/documentation/library-coverage/coverage.rst @@ -16,8 +16,8 @@ Java framework & library support `Google Guava `_,``com.google.common.*``,,728,6,,6,,,,, `JSON-java `_,``org.json``,,236,,,,,,,, Java Standard Library,``java.*``,3,423,30,13,,,7,,,10 - Java extensions,"``javax.*``, ``jakarta.*``",54,552,31,,,4,,1,1,2 + Java extensions,"``javax.*``, ``jakarta.*``",54,552,32,,,4,,1,1,2 `Spring `_,``org.springframework.*``,29,469,91,,,,19,14,,29 - Others,"``com.esotericsoftware.kryo.io``, ``com.esotericsoftware.kryo5.io``, ``com.fasterxml.jackson.core``, ``com.fasterxml.jackson.databind``, ``com.opensymphony.xwork2.ognl``, ``com.unboundid.ldap.sdk``, ``flexjson``, ``groovy.lang``, ``groovy.util``, ``jodd.json``, ``ognl``, ``org.apache.commons.codec``, ``org.apache.commons.jexl2``, ``org.apache.commons.jexl3``, ``org.apache.commons.ognl``, ``org.apache.directory.ldap.client.api``, ``org.apache.ibatis.jdbc``, ``org.apache.shiro.jndi``, ``org.codehaus.groovy.control``, ``org.dom4j``, ``org.hibernate``, ``org.jooq``, ``org.mvel2``, ``org.xml.sax``, ``org.xmlpull.v1``, ``play.mvc``",7,26,146,,,,14,18,, - Totals,,116,4169,402,13,6,10,107,33,1,66 + Others,"``com.esotericsoftware.kryo.io``, ``com.esotericsoftware.kryo5.io``, ``com.fasterxml.jackson.core``, ``com.fasterxml.jackson.databind``, ``com.opensymphony.xwork2.ognl``, ``com.unboundid.ldap.sdk``, ``flexjson``, ``groovy.lang``, ``groovy.util``, ``jodd.json``, ``net.sf.saxon.s9api``, ``ognl``, ``org.apache.commons.codec``, ``org.apache.commons.jexl2``, ``org.apache.commons.jexl3``, ``org.apache.commons.ognl``, ``org.apache.directory.ldap.client.api``, ``org.apache.ibatis.jdbc``, ``org.apache.shiro.jndi``, ``org.codehaus.groovy.control``, ``org.dom4j``, ``org.hibernate``, ``org.jooq``, ``org.mvel2``, ``org.xml.sax``, ``org.xmlpull.v1``, ``play.mvc``",7,26,151,,,,14,18,, + Totals,,116,4169,408,13,6,10,107,33,1,66 From d47c4732e2d0e2e408a9abf50e5b2848c392b2f5 Mon Sep 17 00:00:00 2001 From: Robert Marsh Date: Mon, 27 Sep 2021 17:36:14 -0700 Subject: [PATCH 644/741] C++: Update change note date --- ...and-line-injection.md => 2021-09-27-command-line-injection.md} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename cpp/change-notes/{2021-07-21-command-line-injection.md => 2021-09-27-command-line-injection.md} (100%) diff --git a/cpp/change-notes/2021-07-21-command-line-injection.md b/cpp/change-notes/2021-09-27-command-line-injection.md similarity index 100% rename from cpp/change-notes/2021-07-21-command-line-injection.md rename to cpp/change-notes/2021-09-27-command-line-injection.md From 787f36f0569ccc029dfa945dc7754432f7e3efd0 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Tue, 28 Sep 2021 07:32:28 +0100 Subject: [PATCH 645/741] Add a change note --- java/change-notes/2021-09-27-apache-collections-subpackages.md | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 java/change-notes/2021-09-27-apache-collections-subpackages.md diff --git a/java/change-notes/2021-09-27-apache-collections-subpackages.md b/java/change-notes/2021-09-27-apache-collections-subpackages.md new file mode 100644 index 00000000000..da85d7df953 --- /dev/null +++ b/java/change-notes/2021-09-27-apache-collections-subpackages.md @@ -0,0 +1,2 @@ +lgtm,codescanning +* Added models for the subpackages of Apache Commons Collections. This may lead to more results from any query using data-flow analysis where a relevant path uses one of these container types. From 49c656d904a94b30b783c82589691803ee6caab0 Mon Sep 17 00:00:00 2001 From: Anders Peter Fugmann Date: Tue, 28 Sep 2021 09:40:07 +0200 Subject: [PATCH 646/741] C++: Apply documentation change suggestion Co-authored-by: Jonas Jensen --- cpp/change-notes/2021-09-27-overflow-static.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cpp/change-notes/2021-09-27-overflow-static.md b/cpp/change-notes/2021-09-27-overflow-static.md index 4fc6ee383c2..e28ba4970ce 100644 --- a/cpp/change-notes/2021-09-27-overflow-static.md +++ b/cpp/change-notes/2021-09-27-overflow-static.md @@ -1,3 +1,3 @@ lgtm,codescanning -* Increase presition to high for "Static buffer overflow" query - (cpp/static-buffer-overflow). +* Increase precision to high for the "Static buffer overflow" query + (`cpp/static-buffer-overflow`). This means the query is run and displayed by default on Code Scanning and LGTM. From c7ea7ca5cd9617b9a67afa478caf93d66edb8f3c Mon Sep 17 00:00:00 2001 From: Anders Peter Fugmann Date: Tue, 28 Sep 2021 09:40:25 +0200 Subject: [PATCH 647/741] C++: Apply documentation change suggestion Co-authored-by: Jonas Jensen --- .../lib/semmle/code/cpp/rangeanalysis/SimpleRangeAnalysis.qll | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cpp/ql/lib/semmle/code/cpp/rangeanalysis/SimpleRangeAnalysis.qll b/cpp/ql/lib/semmle/code/cpp/rangeanalysis/SimpleRangeAnalysis.qll index 7e97d8ec633..2867e179d1d 100644 --- a/cpp/ql/lib/semmle/code/cpp/rangeanalysis/SimpleRangeAnalysis.qll +++ b/cpp/ql/lib/semmle/code/cpp/rangeanalysis/SimpleRangeAnalysis.qll @@ -1597,7 +1597,8 @@ private module SimpleRangeAnalysisCached { cached predicate upperBoundMayBeWidened(Expr e) { isRecursiveExpr(e) and - // Corresponds to taking max on the RHS + // Widening is not a problem if the post-analysis in `getGuardedUpperBound` has overridden the widening. + // Note that the RHS of `<` may be multi-valued. not getGuardedUpperBound(e) < getTruncatedUpperBounds(e) } From a358ea8667a2111194a61fb15c2ee455d977ccb1 Mon Sep 17 00:00:00 2001 From: Anders Peter Fugmann Date: Tue, 28 Sep 2021 10:38:02 +0200 Subject: [PATCH 648/741] C++: Apply documentation change suggestion Co-authored-by: Jonas Jensen --- .../lib/semmle/code/cpp/rangeanalysis/SimpleRangeAnalysis.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpp/ql/lib/semmle/code/cpp/rangeanalysis/SimpleRangeAnalysis.qll b/cpp/ql/lib/semmle/code/cpp/rangeanalysis/SimpleRangeAnalysis.qll index 2867e179d1d..2ae9dc2144c 100644 --- a/cpp/ql/lib/semmle/code/cpp/rangeanalysis/SimpleRangeAnalysis.qll +++ b/cpp/ql/lib/semmle/code/cpp/rangeanalysis/SimpleRangeAnalysis.qll @@ -1593,7 +1593,7 @@ private module SimpleRangeAnalysisCached { result = min([max(getTruncatedUpperBounds(expr)), getGuardedUpperBound(expr)]) } - /** Holds if `expr` may have been widened */ + /** Holds if the upper bound of `expr` may have been widened. This means the the upper bound is in practice likely to be overly wide. */ cached predicate upperBoundMayBeWidened(Expr e) { isRecursiveExpr(e) and From 46eb27cd014465ccd0cf83a639e5d4c3a80b9cf9 Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Tue, 28 Sep 2021 11:21:56 +0200 Subject: [PATCH 649/741] Don't restrict inputs to be ParameterNodes Co-authored-by: Anders Schack-Mulligen --- java/ql/lib/semmle/code/java/dataflow/FlowSources.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/ql/lib/semmle/code/java/dataflow/FlowSources.qll b/java/ql/lib/semmle/code/java/dataflow/FlowSources.qll index bb041c9896c..a8f15a103c8 100644 --- a/java/ql/lib/semmle/code/java/dataflow/FlowSources.qll +++ b/java/ql/lib/semmle/code/java/dataflow/FlowSources.qll @@ -254,7 +254,7 @@ class AndroidContentProviderInput extends DataFlow::Node { AndroidContentProviderInput() { sourceNode(this, "contentprovider") and - this.asParameter().getCallable().getDeclaringType() = declaringType + this.getEnclosingCallable().getDeclaringType() = declaringType } } From 9a9bbe3123d8670e93cf2d91ea920d9370883492 Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Mon, 20 Sep 2021 14:22:50 +0200 Subject: [PATCH 650/741] Dataflow: Support side-effects for callbacks in summaries. --- .../dataflow/internal/FlowSummaryImpl.qll | 108 ++++++++++++------ .../internal/FlowSummaryImplSpecific.qll | 5 + .../dataflow/callback-dispatch/A.java | 59 ++++++++++ .../dataflow/callback-dispatch/test.ql | 4 + 4 files changed, 144 insertions(+), 32 deletions(-) diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/FlowSummaryImpl.qll b/java/ql/lib/semmle/code/java/dataflow/internal/FlowSummaryImpl.qll index 523516e60f8..f76baca5b8a 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/FlowSummaryImpl.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/FlowSummaryImpl.qll @@ -186,10 +186,15 @@ module Private { TArgumentSummaryComponent(int i) { parameterPosition(i) } or TReturnSummaryComponent(ReturnKind rk) + private TSummaryComponent thisParam() { result = TParameterSummaryComponent(instanceParameterPosition()) } + newtype TSummaryComponentStack = TSingletonSummaryComponentStack(SummaryComponent c) or TConsSummaryComponentStack(SummaryComponent head, SummaryComponentStack tail) { tail.(RequiredSummaryComponentStack).required(head) + or + tail.(RequiredSummaryComponentStack).required(TParameterSummaryComponent(_)) and + head = thisParam() } pragma[nomagic] @@ -198,21 +203,63 @@ module Private { boolean preservesValue ) { c.propagatesFlow(input, output, preservesValue) + or + // observe side effects of callbacks on input arguments + c.propagatesFlow(output, input, preservesValue) and + preservesValue = true and + isCallbackParameter(input) and + isContentOfArgument(output) + or + // flow from the receiver of a callback into the instance-parameter + exists(SummaryComponentStack s, SummaryComponentStack callbackRef | + c.propagatesFlow(s, _, _) or c.propagatesFlow(_, s, _) + | + callbackRef = s.drop(_) and + (isCallbackParameter(callbackRef) or callbackRef.head() = TReturnSummaryComponent(_)) and + input = callbackRef.tail() and + output = TConsSummaryComponentStack(thisParam(), input) and + preservesValue = true + ) + } + + private predicate isCallbackParameter(SummaryComponentStack s) { + s.head() = TParameterSummaryComponent(_) and exists(s.tail()) + } + + private predicate isContentOfArgument(SummaryComponentStack s) { + s.head() = TContentSummaryComponent(_) and isContentOfArgument(s.tail()) + or + s = TSingletonSummaryComponentStack(TArgumentSummaryComponent(_)) + } + + private predicate outputState(SummarizedCallable c, SummaryComponentStack s) { + summary(c, _, s, _) + or + exists(SummaryComponentStack out | + outputState(c, out) and + out.head() = TContentSummaryComponent(_) and + s = out.tail() + ) + or + // Add the argument node corresponding to the requested post-update node + inputState(c, s) and isCallbackParameter(s) + } + + private predicate inputState(SummarizedCallable c, SummaryComponentStack s) { + summary(c, s, _, _) + or + exists(SummaryComponentStack inp | inputState(c, inp) and s = inp.tail()) + or + exists(SummaryComponentStack out | + outputState(c, out) and + out.head() = TParameterSummaryComponent(_) and + s = out.tail() + ) } private newtype TSummaryNodeState = - TSummaryNodeInputState(SummaryComponentStack s) { - exists(SummaryComponentStack input | - summary(_, input, _, _) and - s = input.drop(_) - ) - } or - TSummaryNodeOutputState(SummaryComponentStack s) { - exists(SummaryComponentStack output | - summary(_, _, output, _) and - s = output.drop(_) - ) - } + TSummaryNodeInputState(SummaryComponentStack s) { inputState(_, s) } or + TSummaryNodeOutputState(SummaryComponentStack s) { outputState(_, s) } /** * A state used to break up (complex) flow summaries into atomic flow steps. @@ -238,20 +285,14 @@ module Private { pragma[nomagic] predicate isInputState(SummarizedCallable c, SummaryComponentStack s) { this = TSummaryNodeInputState(s) and - exists(SummaryComponentStack input | - summary(c, input, _, _) and - s = input.drop(_) - ) + inputState(c, s) } /** Holds if this state is a valid output state for `c`. */ pragma[nomagic] predicate isOutputState(SummarizedCallable c, SummaryComponentStack s) { this = TSummaryNodeOutputState(s) and - exists(SummaryComponentStack output | - summary(c, _, output, _) and - s = output.drop(_) - ) + outputState(c, s) } /** Gets a textual representation of this state. */ @@ -331,19 +372,12 @@ module Private { receiver = summaryNodeInputState(c, s.drop(1)) } - private Node pre(Node post) { - summaryPostUpdateNode(post, result) - or - not summaryPostUpdateNode(post, _) and - result = post - } - private predicate callbackInput( SummarizedCallable c, SummaryComponentStack s, Node receiver, int i ) { any(SummaryNodeState state).isOutputState(c, s) and s.head() = TParameterSummaryComponent(i) and - receiver = pre(summaryNodeOutputState(c, s.drop(1))) + receiver = summaryNodeInputState(c, s.drop(1)) } /** Holds if a call targeting `receiver` should be synthesized inside `c`. */ @@ -395,7 +429,7 @@ module Private { or exists(int i | head = TParameterSummaryComponent(i) | result = - getCallbackParameterType(getNodeType(summaryNodeOutputState(pragma[only_bind_out](c), + getCallbackParameterType(getNodeType(summaryNodeInputState(pragma[only_bind_out](c), s.drop(1))), i) ) ) @@ -421,10 +455,16 @@ module Private { } /** Holds if summary node `post` is a post-update node with pre-update node `pre`. */ - predicate summaryPostUpdateNode(Node post, ParamNode pre) { + predicate summaryPostUpdateNode(Node post, Node pre) { exists(SummarizedCallable c, int i | isParameterPostUpdate(post, c, i) and - pre.isParameterOf(c, i) + pre.(ParamNode).isParameterOf(c, i) + ) + or + exists(SummarizedCallable callable, SummaryComponentStack s | + callbackInput(callable, s, _, _) and + pre = summaryNodeOutputState(callable, s) and + post = summaryNodeInputState(callable, s) ) } @@ -462,7 +502,11 @@ module Private { // for `StringBuilder.append(x)` with a specified value flow from qualifier to // return value and taint flow from argument 0 to the qualifier, then this // allows us to infer taint flow from argument 0 to the return value. - summaryPostUpdateNode(pred, succ) and preservesValue = true + succ instanceof ParamNode and summaryPostUpdateNode(pred, succ) and preservesValue = true + or + // Similarly we would like to chain together summaries where values get passed + // into callbacks along the way. + pred instanceof ArgNode and summaryPostUpdateNode(succ, pred) and preservesValue = true } /** diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/FlowSummaryImplSpecific.qll b/java/ql/lib/semmle/code/java/dataflow/internal/FlowSummaryImplSpecific.qll index d3a4612255d..e4c3091f05e 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/FlowSummaryImplSpecific.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/FlowSummaryImplSpecific.qll @@ -16,6 +16,9 @@ private module FlowSummaries { /** Holds is `i` is a valid parameter position. */ predicate parameterPosition(int i) { i in [-1 .. any(Parameter p).getPosition()] } +/** Gets the parameter position of the instance parameter. */ +int instanceParameterPosition() { result = -1 } + /** Gets the synthesized summary data-flow node for the given values. */ Node summaryNode(SummarizedCallable c, SummaryNodeState state) { result = getSummaryNode(c, state) } @@ -37,6 +40,8 @@ DataFlowType getReturnType(SummarizedCallable c, ReturnKind rk) { */ DataFlowType getCallbackParameterType(DataFlowType t, int i) { result = getErasedRepr(t.(FunctionalInterface).getRunMethod().getParameterType(i)) + or + result = getErasedRepr(t.(FunctionalInterface)) and i = -1 } /** diff --git a/java/ql/test/library-tests/dataflow/callback-dispatch/A.java b/java/ql/test/library-tests/dataflow/callback-dispatch/A.java index 4a4f0b11ded..6224a2e3d95 100644 --- a/java/ql/test/library-tests/dataflow/callback-dispatch/A.java +++ b/java/ql/test/library-tests/dataflow/callback-dispatch/A.java @@ -1,5 +1,7 @@ package my.callback.qltest; +import java.util.*; + public class A { public interface Consumer1 { void eat(Object o); @@ -28,6 +30,20 @@ public class A { // con.eat(x); } + static T applyConsumer3_ret_postup(Consumer3 con) { + // summary: + // x = new T(); + // con.eat(x); + // return x; + return null; + } + + static void forEach(T[] xs, Consumer3 con) { + // summary: + // x = xs[..]; + // con.eat(x); + } + public interface Producer1 { T make(); } @@ -38,6 +54,14 @@ public class A { return null; } + static T produceConsume(Producer1 prod, Consumer3 con) { + // summary: + // x = prod.make(); + // con.eat(x); + // return x; + return null; + } + public interface Converter1 { T2 conv(T1 x); } @@ -109,5 +133,40 @@ public class A { }; applyConsumer3(new Integer[] { (Integer)source(12) }, pc); sink(applyProducer1(pc)[0]); // $ flow=11 + + Integer res = applyProducer1(new Producer1() { + private Integer ii = (Integer)source(13); + @Override public Integer make() { + return this.ii; + } + }); + sink(res); // $ flow=13 + + ArrayList list = new ArrayList<>(); + applyConsumer3(list, l -> l.add(source(14))); + sink(list.get(0)); // $ flow=14 + + Consumer3> tainter = l -> l.add(source(15)); + sink(applyConsumer3_ret_postup(tainter).get(0)); // $ flow=15 + + forEach(new Object[] {source(16)}, x -> sink(x)); // $ flow=16 + + // Spurious flow from 17 is reasonable as it would likely + // also occur if the lambda body was inlined in a for loop. + // It occurs from the combination of being able to observe + // the side-effect of the callback on the other argument and + // being able to chain summaries that update/read arguments, + // e.g. fluent apis. + // Spurious flow from 18 is due to not matching call targets + // in a return-from-call-to-enter-call flow sequence. + forEach(new Object[2][], xs -> { sink(xs[0]); xs[0] = source(17); }); // $ SPURIOUS: flow=17 flow=18 + + Object[][] xss = new Object[][] { { null } }; + forEach(xss, x -> {x[0] = source(18);}); + sink(xss[0][0]); // $ flow=18 + + Object res2 = produceConsume(() -> source(19), A::sink); // $ flow=19 + sink(res2); // $ flow=19 } + } diff --git a/java/ql/test/library-tests/dataflow/callback-dispatch/test.ql b/java/ql/test/library-tests/dataflow/callback-dispatch/test.ql index 934bdcfac28..63eeee53823 100644 --- a/java/ql/test/library-tests/dataflow/callback-dispatch/test.ql +++ b/java/ql/test/library-tests/dataflow/callback-dispatch/test.ql @@ -10,7 +10,11 @@ class SummaryModelTest extends SummaryModelCsv { "my.callback.qltest;A;false;applyConsumer1;(Object,Consumer1);;Argument[0];Parameter[0] of Argument[1];value", "my.callback.qltest;A;false;applyConsumer2;(Object,Consumer2);;Argument[0];Parameter[0] of Argument[1];value", "my.callback.qltest;A;false;applyConsumer3;(Object,Consumer3);;Argument[0];Parameter[0] of Argument[1];value", + "my.callback.qltest;A;false;applyConsumer3_ret_postup;(Consumer3);;Parameter[0] of Argument[0];ReturnValue;value", + "my.callback.qltest;A;false;forEach;(Object[],Consumer3);;ArrayElement of Argument[0];Parameter[0] of Argument[1];value", "my.callback.qltest;A;false;applyProducer1;(Producer1);;ReturnValue of Argument[0];ReturnValue;value", + "my.callback.qltest;A;false;produceConsume;(Producer1,Consumer3);;ReturnValue of Argument[0];Parameter[0] of Argument[1];value", + "my.callback.qltest;A;false;produceConsume;(Producer1,Consumer3);;Parameter[0] of Argument[1];ReturnValue;value", "my.callback.qltest;A;false;applyConverter1;(Object,Converter1);;Argument[0];Parameter[0] of Argument[1];value", "my.callback.qltest;A;false;applyConverter1;(Object,Converter1);;ReturnValue of Argument[1];ReturnValue;value" ] From b11cb88a9ffe11e1683e21d465fb7747ffc58ed3 Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Tue, 28 Sep 2021 11:45:33 +0200 Subject: [PATCH 651/741] Dataflow: Sync to C#. --- .../dataflow/internal/FlowSummaryImpl.qll | 108 ++++++++++++------ .../internal/FlowSummaryImplSpecific.qll | 3 + 2 files changed, 79 insertions(+), 32 deletions(-) diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/FlowSummaryImpl.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/FlowSummaryImpl.qll index 523516e60f8..f76baca5b8a 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/FlowSummaryImpl.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/FlowSummaryImpl.qll @@ -186,10 +186,15 @@ module Private { TArgumentSummaryComponent(int i) { parameterPosition(i) } or TReturnSummaryComponent(ReturnKind rk) + private TSummaryComponent thisParam() { result = TParameterSummaryComponent(instanceParameterPosition()) } + newtype TSummaryComponentStack = TSingletonSummaryComponentStack(SummaryComponent c) or TConsSummaryComponentStack(SummaryComponent head, SummaryComponentStack tail) { tail.(RequiredSummaryComponentStack).required(head) + or + tail.(RequiredSummaryComponentStack).required(TParameterSummaryComponent(_)) and + head = thisParam() } pragma[nomagic] @@ -198,21 +203,63 @@ module Private { boolean preservesValue ) { c.propagatesFlow(input, output, preservesValue) + or + // observe side effects of callbacks on input arguments + c.propagatesFlow(output, input, preservesValue) and + preservesValue = true and + isCallbackParameter(input) and + isContentOfArgument(output) + or + // flow from the receiver of a callback into the instance-parameter + exists(SummaryComponentStack s, SummaryComponentStack callbackRef | + c.propagatesFlow(s, _, _) or c.propagatesFlow(_, s, _) + | + callbackRef = s.drop(_) and + (isCallbackParameter(callbackRef) or callbackRef.head() = TReturnSummaryComponent(_)) and + input = callbackRef.tail() and + output = TConsSummaryComponentStack(thisParam(), input) and + preservesValue = true + ) + } + + private predicate isCallbackParameter(SummaryComponentStack s) { + s.head() = TParameterSummaryComponent(_) and exists(s.tail()) + } + + private predicate isContentOfArgument(SummaryComponentStack s) { + s.head() = TContentSummaryComponent(_) and isContentOfArgument(s.tail()) + or + s = TSingletonSummaryComponentStack(TArgumentSummaryComponent(_)) + } + + private predicate outputState(SummarizedCallable c, SummaryComponentStack s) { + summary(c, _, s, _) + or + exists(SummaryComponentStack out | + outputState(c, out) and + out.head() = TContentSummaryComponent(_) and + s = out.tail() + ) + or + // Add the argument node corresponding to the requested post-update node + inputState(c, s) and isCallbackParameter(s) + } + + private predicate inputState(SummarizedCallable c, SummaryComponentStack s) { + summary(c, s, _, _) + or + exists(SummaryComponentStack inp | inputState(c, inp) and s = inp.tail()) + or + exists(SummaryComponentStack out | + outputState(c, out) and + out.head() = TParameterSummaryComponent(_) and + s = out.tail() + ) } private newtype TSummaryNodeState = - TSummaryNodeInputState(SummaryComponentStack s) { - exists(SummaryComponentStack input | - summary(_, input, _, _) and - s = input.drop(_) - ) - } or - TSummaryNodeOutputState(SummaryComponentStack s) { - exists(SummaryComponentStack output | - summary(_, _, output, _) and - s = output.drop(_) - ) - } + TSummaryNodeInputState(SummaryComponentStack s) { inputState(_, s) } or + TSummaryNodeOutputState(SummaryComponentStack s) { outputState(_, s) } /** * A state used to break up (complex) flow summaries into atomic flow steps. @@ -238,20 +285,14 @@ module Private { pragma[nomagic] predicate isInputState(SummarizedCallable c, SummaryComponentStack s) { this = TSummaryNodeInputState(s) and - exists(SummaryComponentStack input | - summary(c, input, _, _) and - s = input.drop(_) - ) + inputState(c, s) } /** Holds if this state is a valid output state for `c`. */ pragma[nomagic] predicate isOutputState(SummarizedCallable c, SummaryComponentStack s) { this = TSummaryNodeOutputState(s) and - exists(SummaryComponentStack output | - summary(c, _, output, _) and - s = output.drop(_) - ) + outputState(c, s) } /** Gets a textual representation of this state. */ @@ -331,19 +372,12 @@ module Private { receiver = summaryNodeInputState(c, s.drop(1)) } - private Node pre(Node post) { - summaryPostUpdateNode(post, result) - or - not summaryPostUpdateNode(post, _) and - result = post - } - private predicate callbackInput( SummarizedCallable c, SummaryComponentStack s, Node receiver, int i ) { any(SummaryNodeState state).isOutputState(c, s) and s.head() = TParameterSummaryComponent(i) and - receiver = pre(summaryNodeOutputState(c, s.drop(1))) + receiver = summaryNodeInputState(c, s.drop(1)) } /** Holds if a call targeting `receiver` should be synthesized inside `c`. */ @@ -395,7 +429,7 @@ module Private { or exists(int i | head = TParameterSummaryComponent(i) | result = - getCallbackParameterType(getNodeType(summaryNodeOutputState(pragma[only_bind_out](c), + getCallbackParameterType(getNodeType(summaryNodeInputState(pragma[only_bind_out](c), s.drop(1))), i) ) ) @@ -421,10 +455,16 @@ module Private { } /** Holds if summary node `post` is a post-update node with pre-update node `pre`. */ - predicate summaryPostUpdateNode(Node post, ParamNode pre) { + predicate summaryPostUpdateNode(Node post, Node pre) { exists(SummarizedCallable c, int i | isParameterPostUpdate(post, c, i) and - pre.isParameterOf(c, i) + pre.(ParamNode).isParameterOf(c, i) + ) + or + exists(SummarizedCallable callable, SummaryComponentStack s | + callbackInput(callable, s, _, _) and + pre = summaryNodeOutputState(callable, s) and + post = summaryNodeInputState(callable, s) ) } @@ -462,7 +502,11 @@ module Private { // for `StringBuilder.append(x)` with a specified value flow from qualifier to // return value and taint flow from argument 0 to the qualifier, then this // allows us to infer taint flow from argument 0 to the return value. - summaryPostUpdateNode(pred, succ) and preservesValue = true + succ instanceof ParamNode and summaryPostUpdateNode(pred, succ) and preservesValue = true + or + // Similarly we would like to chain together summaries where values get passed + // into callbacks along the way. + pred instanceof ArgNode and summaryPostUpdateNode(succ, pred) and preservesValue = true } /** diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/FlowSummaryImplSpecific.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/FlowSummaryImplSpecific.qll index b0f67e8692f..822822a24c6 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/FlowSummaryImplSpecific.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/FlowSummaryImplSpecific.qll @@ -16,6 +16,9 @@ private import semmle.code.csharp.dataflow.ExternalFlow /** Holds is `i` is a valid parameter position. */ predicate parameterPosition(int i) { i in [-1 .. any(Parameter p).getPosition()] } +/** Gets the parameter position of the instance parameter. */ +int instanceParameterPosition() { none() } // disables implicit summary flow to `this` for callbacks + /** Gets the synthesized summary data-flow node for the given values. */ Node summaryNode(SummarizedCallable c, SummaryNodeState state) { result = TSummaryNode(c, state) } From 39a12a846451371c0436f5899f6e7d96bee43657 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Tue, 28 Sep 2021 10:48:43 +0100 Subject: [PATCH 652/741] Remove models that are no longer required --- .../library-tests/frameworks/apache-collections/test.ql | 8 -------- 1 file changed, 8 deletions(-) diff --git a/java/ql/test/library-tests/frameworks/apache-collections/test.ql b/java/ql/test/library-tests/frameworks/apache-collections/test.ql index e2a37883614..48f1101bcb6 100644 --- a/java/ql/test/library-tests/frameworks/apache-collections/test.ql +++ b/java/ql/test/library-tests/frameworks/apache-collections/test.ql @@ -6,14 +6,6 @@ class SummaryModelTest extends SummaryModelCsv { row = [ //"package;type;overrides;name;signature;ext;inputspec;outputspec;kind", - "generatedtest;Test;false;newWithElement;;;Argument[0];Element of ReturnValue;value", - "generatedtest;Test;false;getElement;;;Element of Argument[0];ReturnValue;value", - "generatedtest;Test;false;newWithArrayElement;;;Argument[0];ArrayElement of ReturnValue;value", - "generatedtest;Test;false;getArrayElement;;;ArrayElement of Argument[0];ReturnValue;value", - "generatedtest;Test;false;newWithMapValue;;;Argument[0];MapValue of ReturnValue;value", - "generatedtest;Test;false;getMapValue;;;MapValue of Argument[0];ReturnValue;value", - "generatedtest;Test;false;newWithMapKey;;;Argument[0];MapKey of ReturnValue;value", - "generatedtest;Test;false;getMapKey;;;MapKey of Argument[0];ReturnValue;value", "generatedtest;Test;false;newRBWithMapValue;;;Argument[0];MapValue of ReturnValue;value", "generatedtest;Test;false;newRBWithMapKey;;;Argument[0];MapKey of ReturnValue;value" ] From e95dc8208747a7c1e24d441e4dec3c5ed647db81 Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Tue, 28 Sep 2021 13:00:50 +0200 Subject: [PATCH 653/741] Autoformat. --- .../semmle/code/csharp/dataflow/internal/FlowSummaryImpl.qll | 4 +++- .../semmle/code/java/dataflow/internal/FlowSummaryImpl.qll | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/FlowSummaryImpl.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/FlowSummaryImpl.qll index f76baca5b8a..8bca0699e04 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/FlowSummaryImpl.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/FlowSummaryImpl.qll @@ -186,7 +186,9 @@ module Private { TArgumentSummaryComponent(int i) { parameterPosition(i) } or TReturnSummaryComponent(ReturnKind rk) - private TSummaryComponent thisParam() { result = TParameterSummaryComponent(instanceParameterPosition()) } + private TSummaryComponent thisParam() { + result = TParameterSummaryComponent(instanceParameterPosition()) + } newtype TSummaryComponentStack = TSingletonSummaryComponentStack(SummaryComponent c) or diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/FlowSummaryImpl.qll b/java/ql/lib/semmle/code/java/dataflow/internal/FlowSummaryImpl.qll index f76baca5b8a..8bca0699e04 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/FlowSummaryImpl.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/FlowSummaryImpl.qll @@ -186,7 +186,9 @@ module Private { TArgumentSummaryComponent(int i) { parameterPosition(i) } or TReturnSummaryComponent(ReturnKind rk) - private TSummaryComponent thisParam() { result = TParameterSummaryComponent(instanceParameterPosition()) } + private TSummaryComponent thisParam() { + result = TParameterSummaryComponent(instanceParameterPosition()) + } newtype TSummaryComponentStack = TSingletonSummaryComponentStack(SummaryComponent c) or From 7197f41e75bea10f0c7edc351aa55f5a8390f2e8 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Tue, 28 Sep 2021 15:12:36 +0200 Subject: [PATCH 654/741] Fix dead links in README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 9012e83f10d..b1d5b82cb31 100644 --- a/README.md +++ b/README.md @@ -4,8 +4,8 @@ This open source repository contains the standard CodeQL libraries and queries t ## How do I learn CodeQL and run queries? -There is [extensive documentation](https://help.semmle.com/QL/learn-ql/) on getting started with writing CodeQL. -You can use the [interactive query console](https://lgtm.com/help/lgtm/using-query-console) on LGTM.com or the [CodeQL for Visual Studio Code](https://help.semmle.com/codeql/codeql-for-vscode.html) extension to try out your queries on any open source project that's currently being analyzed. +There is [extensive documentation](https://codeql.github.com/docs/) on getting started with writing CodeQL. +You can use the [interactive query console](https://lgtm.com/help/lgtm/using-query-console) on LGTM.com or the [CodeQL for Visual Studio Code](https://codeql.github.com/docs/codeql-for-visual-studio-code/) extension to try out your queries on any open source project that's currently being analyzed. ## Contributing From 10323ac819f930b3503f0899cf666e1798ceb5ec Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Tue, 28 Sep 2021 15:13:29 +0100 Subject: [PATCH 655/741] Update cpp/ql/src/Security/CWE/CWE-311/CleartextStorage.inc.qhelp Co-authored-by: Jonas Jensen --- cpp/ql/src/Security/CWE/CWE-311/CleartextStorage.inc.qhelp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpp/ql/src/Security/CWE/CWE-311/CleartextStorage.inc.qhelp b/cpp/ql/src/Security/CWE/CWE-311/CleartextStorage.inc.qhelp index 47540e6cf3a..f5e978e05cb 100644 --- a/cpp/ql/src/Security/CWE/CWE-311/CleartextStorage.inc.qhelp +++ b/cpp/ql/src/Security/CWE/CWE-311/CleartextStorage.inc.qhelp @@ -9,7 +9,7 @@ storage.

    -

    Ensure that sensitive information is always encrypted before being stored or transmitted, especially before writing to a file. +

    Ensure that sensitive information is always encrypted before being stored to a file or transmitted over the network. It may be wise to encrypt information before it is put into a buffer that may be readable in memory.

    In general, decrypt sensitive information only at the point where it is necessary for it to be used in From 89098f54be7c09a23af7defbb4a7d4086c88903c Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Tue, 28 Sep 2021 16:03:04 +0100 Subject: [PATCH 656/741] C++: Correct comment. --- cpp/ql/src/Security/CWE/CWE-311/CleartextTransmission.ql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpp/ql/src/Security/CWE/CWE-311/CleartextTransmission.ql b/cpp/ql/src/Security/CWE/CWE-311/CleartextTransmission.ql index 70b00aecd6d..d7e5343d6dc 100644 --- a/cpp/ql/src/Security/CWE/CWE-311/CleartextTransmission.ql +++ b/cpp/ql/src/Security/CWE/CWE-311/CleartextTransmission.ql @@ -23,7 +23,7 @@ import DataFlow::PathGraph abstract class NetworkSendRecv extends FunctionCall { /** * Gets the expression for the socket or similar object used for sending or - * receiving data. + * receiving data (if any). */ abstract Expr getSocketExpr(); From 8d2ad4ed175c7b81aa344110d3e51d39870fb802 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 29 Sep 2021 00:08:05 +0000 Subject: [PATCH 657/741] Add changed framework coverage reports --- .../library-coverage/coverage.csv | 178 +++++++++--------- .../library-coverage/coverage.rst | 8 +- 2 files changed, 93 insertions(+), 93 deletions(-) diff --git a/java/documentation/library-coverage/coverage.csv b/java/documentation/library-coverage/coverage.csv index b0fa5f000d6..c338b6252ac 100644 --- a/java/documentation/library-coverage/coverage.csv +++ b/java/documentation/library-coverage/coverage.csv @@ -1,89 +1,89 @@ -package,sink,source,summary,sink:bean-validation,sink:create-file,sink:groovy,sink:header-splitting,sink:information-leak,sink:jexl,sink:jndi-injection,sink:ldap,sink:mvel,sink:ognl-injection,sink:open-url,sink:set-hostname-verifier,sink:sql,sink:url-open-stream,sink:url-redirect,sink:xpath,sink:xslt,sink:xss,source:remote,summary:taint,summary:value -android.content,8,,4,,,,,,,,,,,,,8,,,,,,,4, -android.database,59,,30,,,,,,,,,,,,,59,,,,,,,30, -android.net,,,60,,,,,,,,,,,,,,,,,,,,45,15 -android.util,,16,,,,,,,,,,,,,,,,,,,,16,, -android.webkit,3,2,,,,,,,,,,,,,,,,,,,3,2,, -com.esotericsoftware.kryo.io,,,1,,,,,,,,,,,,,,,,,,,,1, -com.esotericsoftware.kryo5.io,,,1,,,,,,,,,,,,,,,,,,,,1, -com.fasterxml.jackson.core,,,1,,,,,,,,,,,,,,,,,,,,1, -com.fasterxml.jackson.databind,,,5,,,,,,,,,,,,,,,,,,,,5, -com.google.common.base,,,85,,,,,,,,,,,,,,,,,,,,62,23 -com.google.common.cache,,,17,,,,,,,,,,,,,,,,,,,,,17 -com.google.common.collect,,,553,,,,,,,,,,,,,,,,,,,,2,551 -com.google.common.io,6,,73,,,,,,,,,,,,,,6,,,,,,72,1 -com.opensymphony.xwork2.ognl,3,,,,,,,,,,,,3,,,,,,,,,,, -com.unboundid.ldap.sdk,17,,,,,,,,,,17,,,,,,,,,,,,, -flexjson,,,1,,,,,,,,,,,,,,,,,,,,,1 -groovy.lang,26,,,,,26,,,,,,,,,,,,,,,,,, -groovy.util,5,,,,,5,,,,,,,,,,,,,,,,,, -jakarta.faces.context,2,7,,,,,,,,,,,,,,,,,,,2,7,, -jakarta.json,,,123,,,,,,,,,,,,,,,,,,,,100,23 -jakarta.ws.rs.client,1,,,,,,,,,,,,,1,,,,,,,,,, -jakarta.ws.rs.container,,9,,,,,,,,,,,,,,,,,,,,9,, -jakarta.ws.rs.core,2,,149,,,,,,,,,,,,,,,2,,,,,94,55 -java.beans,,,1,,,,,,,,,,,,,,,,,,,,1, -java.io,3,,27,,3,,,,,,,,,,,,,,,,,,26,1 -java.lang,,,47,,,,,,,,,,,,,,,,,,,,41,6 -java.net,10,3,7,,,,,,,,,,,10,,,,,,,,3,7, -java.nio,10,,4,,10,,,,,,,,,,,,,,,,,,4, -java.sql,7,,,,,,,,,,,,,,,7,,,,,,,, -java.util,,,337,,,,,,,,,,,,,,,,,,,,15,322 -javax.faces.context,2,7,,,,,,,,,,,,,,,,,,,2,7,, -javax.json,,,123,,,,,,,,,,,,,,,,,,,,100,23 -javax.management.remote,2,,,,,,,,,2,,,,,,,,,,,,,, -javax.naming,7,,,,,,,,,6,1,,,,,,,,,,,,, -javax.net.ssl,2,,,,,,,,,,,,,,2,,,,,,,,, -javax.script,1,,,,,,,,,,,1,,,,,,,,,,,, -javax.servlet,4,21,2,,,,3,1,,,,,,,,,,,,,,21,2, -javax.validation,1,1,,1,,,,,,,,,,,,,,,,,,1,, -javax.ws.rs.client,1,,,,,,,,,,,,,1,,,,,,,,,, -javax.ws.rs.container,,9,,,,,,,,,,,,,,,,,,,,9,, -javax.ws.rs.core,3,,149,,,,1,,,,,,,,,,,2,,,,,94,55 -javax.xml.transform,1,,6,,,,,,,,,,,,,,,,,1,,,6, -javax.xml.xpath,3,,,,,,,,,,,,,,,,,,3,,,,, -jodd.json,,,10,,,,,,,,,,,,,,,,,,,,,10 -net.sf.saxon.s9api,5,,,,,,,,,,,,,,,,,,,5,,,, -ognl,6,,,,,,,,,,,,6,,,,,,,,,,, -org.apache.commons.codec,,,6,,,,,,,,,,,,,,,,,,,,6, -org.apache.commons.collections,,,394,,,,,,,,,,,,,,,,,,,,9,385 -org.apache.commons.collections4,,,394,,,,,,,,,,,,,,,,,,,,9,385 -org.apache.commons.io,,,22,,,,,,,,,,,,,,,,,,,,22, -org.apache.commons.jexl2,15,,,,,,,,15,,,,,,,,,,,,,,, -org.apache.commons.jexl3,15,,,,,,,,15,,,,,,,,,,,,,,, -org.apache.commons.lang3,,,423,,,,,,,,,,,,,,,,,,,,292,131 -org.apache.commons.ognl,6,,,,,,,,,,,,6,,,,,,,,,,, -org.apache.commons.text,,,272,,,,,,,,,,,,,,,,,,,,220,52 -org.apache.directory.ldap.client.api,1,,,,,,,,,,1,,,,,,,,,,,,, -org.apache.hc.core5.function,,,1,,,,,,,,,,,,,,,,,,,,1, -org.apache.hc.core5.http,1,2,39,,,,,,,,,,,,,,,,,,1,2,39, -org.apache.hc.core5.net,,,2,,,,,,,,,,,,,,,,,,,,2, -org.apache.hc.core5.util,,,24,,,,,,,,,,,,,,,,,,,,18,6 -org.apache.http,27,3,70,,,,,,,,,,,25,,,,,,,2,3,62,8 -org.apache.ibatis.jdbc,6,,,,,,,,,,,,,,,6,,,,,,,, -org.apache.shiro.jndi,1,,,,,,,,,1,,,,,,,,,,,,,, -org.codehaus.groovy.control,1,,,,,1,,,,,,,,,,,,,,,,,, -org.dom4j,20,,,,,,,,,,,,,,,,,,20,,,,, -org.hibernate,7,,,,,,,,,,,,,,,7,,,,,,,, -org.jooq,1,,,,,,,,,,,,,,,1,,,,,,,, -org.json,,,236,,,,,,,,,,,,,,,,,,,,198,38 -org.mvel2,16,,,,,,,,,,,16,,,,,,,,,,,, -org.springframework.beans,,,26,,,,,,,,,,,,,,,,,,,,,26 -org.springframework.cache,,,13,,,,,,,,,,,,,,,,,,,,,13 -org.springframework.http,14,,70,,,,,,,,,,,14,,,,,,,,,60,10 -org.springframework.jdbc.core,10,,,,,,,,,,,,,,,10,,,,,,,, -org.springframework.jdbc.object,9,,,,,,,,,,,,,,,9,,,,,,,, -org.springframework.jndi,1,,,,,,,,,1,,,,,,,,,,,,,, -org.springframework.ldap,42,,,,,,,,,28,14,,,,,,,,,,,,, -org.springframework.security.web.savedrequest,,6,,,,,,,,,,,,,,,,,,,,6,, -org.springframework.ui,,,32,,,,,,,,,,,,,,,,,,,,,32 -org.springframework.util,,,139,,,,,,,,,,,,,,,,,,,,87,52 -org.springframework.validation,,,13,,,,,,,,,,,,,,,,,,,,13, -org.springframework.web.client,13,3,,,,,,,,,,,,13,,,,,,,,3,, -org.springframework.web.context.request,,8,,,,,,,,,,,,,,,,,,,,8,, -org.springframework.web.multipart,,12,13,,,,,,,,,,,,,,,,,,,12,13, -org.springframework.web.reactive.function.client,2,,,,,,,,,,,,,2,,,,,,,,,, -org.springframework.web.util,,,163,,,,,,,,,,,,,,,,,,,,138,25 -org.xml.sax,,,1,,,,,,,,,,,,,,,,,,,,1, -org.xmlpull.v1,,3,,,,,,,,,,,,,,,,,,,,3,, -play.mvc,,4,,,,,,,,,,,,,,,,,,,,4,, +package,sink,source,summary,sink:bean-validation,sink:create-file,sink:groovy,sink:header-splitting,sink:information-leak,sink:jexl,sink:jndi-injection,sink:ldap,sink:mvel,sink:ognl-injection,sink:open-url,sink:set-hostname-verifier,sink:sql,sink:url-open-stream,sink:url-redirect,sink:xpath,sink:xslt,sink:xss,source:contentprovider,source:remote,summary:taint,summary:value +android.content,8,27,4,,,,,,,,,,,,,8,,,,,,27,,4, +android.database,59,,30,,,,,,,,,,,,,59,,,,,,,,30, +android.net,,,60,,,,,,,,,,,,,,,,,,,,,45,15 +android.util,,16,,,,,,,,,,,,,,,,,,,,,16,, +android.webkit,3,2,,,,,,,,,,,,,,,,,,,3,,2,, +com.esotericsoftware.kryo.io,,,1,,,,,,,,,,,,,,,,,,,,,1, +com.esotericsoftware.kryo5.io,,,1,,,,,,,,,,,,,,,,,,,,,1, +com.fasterxml.jackson.core,,,1,,,,,,,,,,,,,,,,,,,,,1, +com.fasterxml.jackson.databind,,,5,,,,,,,,,,,,,,,,,,,,,5, +com.google.common.base,,,85,,,,,,,,,,,,,,,,,,,,,62,23 +com.google.common.cache,,,17,,,,,,,,,,,,,,,,,,,,,,17 +com.google.common.collect,,,553,,,,,,,,,,,,,,,,,,,,,2,551 +com.google.common.io,6,,73,,,,,,,,,,,,,,6,,,,,,,72,1 +com.opensymphony.xwork2.ognl,3,,,,,,,,,,,,3,,,,,,,,,,,, +com.unboundid.ldap.sdk,17,,,,,,,,,,17,,,,,,,,,,,,,, +flexjson,,,1,,,,,,,,,,,,,,,,,,,,,,1 +groovy.lang,26,,,,,26,,,,,,,,,,,,,,,,,,, +groovy.util,5,,,,,5,,,,,,,,,,,,,,,,,,, +jakarta.faces.context,2,7,,,,,,,,,,,,,,,,,,,2,,7,, +jakarta.json,,,123,,,,,,,,,,,,,,,,,,,,,100,23 +jakarta.ws.rs.client,1,,,,,,,,,,,,,1,,,,,,,,,,, +jakarta.ws.rs.container,,9,,,,,,,,,,,,,,,,,,,,,9,, +jakarta.ws.rs.core,2,,149,,,,,,,,,,,,,,,2,,,,,,94,55 +java.beans,,,1,,,,,,,,,,,,,,,,,,,,,1, +java.io,3,,27,,3,,,,,,,,,,,,,,,,,,,26,1 +java.lang,,,50,,,,,,,,,,,,,,,,,,,,,41,9 +java.net,10,3,7,,,,,,,,,,,10,,,,,,,,,3,7, +java.nio,10,,4,,10,,,,,,,,,,,,,,,,,,,4, +java.sql,7,,,,,,,,,,,,,,,7,,,,,,,,, +java.util,,,337,,,,,,,,,,,,,,,,,,,,,15,322 +javax.faces.context,2,7,,,,,,,,,,,,,,,,,,,2,,7,, +javax.json,,,123,,,,,,,,,,,,,,,,,,,,,100,23 +javax.management.remote,2,,,,,,,,,2,,,,,,,,,,,,,,, +javax.naming,7,,,,,,,,,6,1,,,,,,,,,,,,,, +javax.net.ssl,2,,,,,,,,,,,,,,2,,,,,,,,,, +javax.script,1,,,,,,,,,,,1,,,,,,,,,,,,, +javax.servlet,4,21,2,,,,3,1,,,,,,,,,,,,,,,21,2, +javax.validation,1,1,,1,,,,,,,,,,,,,,,,,,,1,, +javax.ws.rs.client,1,,,,,,,,,,,,,1,,,,,,,,,,, +javax.ws.rs.container,,9,,,,,,,,,,,,,,,,,,,,,9,, +javax.ws.rs.core,3,,149,,,,1,,,,,,,,,,,2,,,,,,94,55 +javax.xml.transform,1,,6,,,,,,,,,,,,,,,,,1,,,,6, +javax.xml.xpath,3,,,,,,,,,,,,,,,,,,3,,,,,, +jodd.json,,,10,,,,,,,,,,,,,,,,,,,,,,10 +net.sf.saxon.s9api,5,,,,,,,,,,,,,,,,,,,5,,,,, +ognl,6,,,,,,,,,,,,6,,,,,,,,,,,, +org.apache.commons.codec,,,6,,,,,,,,,,,,,,,,,,,,,6, +org.apache.commons.collections,,,800,,,,,,,,,,,,,,,,,,,,,17,783 +org.apache.commons.collections4,,,800,,,,,,,,,,,,,,,,,,,,,17,783 +org.apache.commons.io,,,22,,,,,,,,,,,,,,,,,,,,,22, +org.apache.commons.jexl2,15,,,,,,,,15,,,,,,,,,,,,,,,, +org.apache.commons.jexl3,15,,,,,,,,15,,,,,,,,,,,,,,,, +org.apache.commons.lang3,,,423,,,,,,,,,,,,,,,,,,,,,292,131 +org.apache.commons.ognl,6,,,,,,,,,,,,6,,,,,,,,,,,, +org.apache.commons.text,,,272,,,,,,,,,,,,,,,,,,,,,220,52 +org.apache.directory.ldap.client.api,1,,,,,,,,,,1,,,,,,,,,,,,,, +org.apache.hc.core5.function,,,1,,,,,,,,,,,,,,,,,,,,,1, +org.apache.hc.core5.http,1,2,39,,,,,,,,,,,,,,,,,,1,,2,39, +org.apache.hc.core5.net,,,2,,,,,,,,,,,,,,,,,,,,,2, +org.apache.hc.core5.util,,,24,,,,,,,,,,,,,,,,,,,,,18,6 +org.apache.http,27,3,70,,,,,,,,,,,25,,,,,,,2,,3,62,8 +org.apache.ibatis.jdbc,6,,,,,,,,,,,,,,,6,,,,,,,,, +org.apache.shiro.jndi,1,,,,,,,,,1,,,,,,,,,,,,,,, +org.codehaus.groovy.control,1,,,,,1,,,,,,,,,,,,,,,,,,, +org.dom4j,20,,,,,,,,,,,,,,,,,,20,,,,,, +org.hibernate,7,,,,,,,,,,,,,,,7,,,,,,,,, +org.jooq,1,,,,,,,,,,,,,,,1,,,,,,,,, +org.json,,,236,,,,,,,,,,,,,,,,,,,,,198,38 +org.mvel2,16,,,,,,,,,,,16,,,,,,,,,,,,, +org.springframework.beans,,,26,,,,,,,,,,,,,,,,,,,,,,26 +org.springframework.cache,,,13,,,,,,,,,,,,,,,,,,,,,,13 +org.springframework.http,14,,70,,,,,,,,,,,14,,,,,,,,,,60,10 +org.springframework.jdbc.core,10,,,,,,,,,,,,,,,10,,,,,,,,, +org.springframework.jdbc.object,9,,,,,,,,,,,,,,,9,,,,,,,,, +org.springframework.jndi,1,,,,,,,,,1,,,,,,,,,,,,,,, +org.springframework.ldap,42,,,,,,,,,28,14,,,,,,,,,,,,,, +org.springframework.security.web.savedrequest,,6,,,,,,,,,,,,,,,,,,,,,6,, +org.springframework.ui,,,32,,,,,,,,,,,,,,,,,,,,,,32 +org.springframework.util,,,139,,,,,,,,,,,,,,,,,,,,,87,52 +org.springframework.validation,,,13,,,,,,,,,,,,,,,,,,,,,13, +org.springframework.web.client,13,3,,,,,,,,,,,,13,,,,,,,,,3,, +org.springframework.web.context.request,,8,,,,,,,,,,,,,,,,,,,,,8,, +org.springframework.web.multipart,,12,13,,,,,,,,,,,,,,,,,,,,12,13, +org.springframework.web.reactive.function.client,2,,,,,,,,,,,,,2,,,,,,,,,,, +org.springframework.web.util,,,163,,,,,,,,,,,,,,,,,,,,,138,25 +org.xml.sax,,,1,,,,,,,,,,,,,,,,,,,,,1, +org.xmlpull.v1,,3,,,,,,,,,,,,,,,,,,,,,3,, +play.mvc,,4,,,,,,,,,,,,,,,,,,,,,4,, diff --git a/java/documentation/library-coverage/coverage.rst b/java/documentation/library-coverage/coverage.rst index 6782fd3e515..a2c235248a1 100644 --- a/java/documentation/library-coverage/coverage.rst +++ b/java/documentation/library-coverage/coverage.rst @@ -7,17 +7,17 @@ Java framework & library support :widths: auto Framework / library,Package,Flow sources,Taint & value steps,Sinks (total),`CWE‑022` :sub:`Path injection`,`CWE‑036` :sub:`Path traversal`,`CWE‑079` :sub:`Cross-site scripting`,`CWE‑089` :sub:`SQL injection`,`CWE‑090` :sub:`LDAP injection`,`CWE‑094` :sub:`Code injection`,`CWE‑319` :sub:`Cleartext transmission` - Android,``android.*``,18,94,70,,,3,67,,, - `Apache Commons Collections `_,"``org.apache.commons.collections``, ``org.apache.commons.collections4``",,788,,,,,,,, + Android,``android.*``,45,94,70,,,3,67,,, + `Apache Commons Collections `_,"``org.apache.commons.collections``, ``org.apache.commons.collections4``",,1600,,,,,,,, `Apache Commons IO `_,``org.apache.commons.io``,,22,,,,,,,, `Apache Commons Lang `_,``org.apache.commons.lang3``,,423,,,,,,,, `Apache Commons Text `_,``org.apache.commons.text``,,272,,,,,,,, `Apache HttpComponents `_,"``org.apache.hc.core5.*``, ``org.apache.http``",5,136,28,,,3,,,,25 `Google Guava `_,``com.google.common.*``,,728,6,,6,,,,, `JSON-java `_,``org.json``,,236,,,,,,,, - Java Standard Library,``java.*``,3,423,30,13,,,7,,,10 + Java Standard Library,``java.*``,3,426,30,13,,,7,,,10 Java extensions,"``javax.*``, ``jakarta.*``",54,552,32,,,4,,1,1,2 `Spring `_,``org.springframework.*``,29,469,91,,,,19,14,,29 Others,"``com.esotericsoftware.kryo.io``, ``com.esotericsoftware.kryo5.io``, ``com.fasterxml.jackson.core``, ``com.fasterxml.jackson.databind``, ``com.opensymphony.xwork2.ognl``, ``com.unboundid.ldap.sdk``, ``flexjson``, ``groovy.lang``, ``groovy.util``, ``jodd.json``, ``net.sf.saxon.s9api``, ``ognl``, ``org.apache.commons.codec``, ``org.apache.commons.jexl2``, ``org.apache.commons.jexl3``, ``org.apache.commons.ognl``, ``org.apache.directory.ldap.client.api``, ``org.apache.ibatis.jdbc``, ``org.apache.shiro.jndi``, ``org.codehaus.groovy.control``, ``org.dom4j``, ``org.hibernate``, ``org.jooq``, ``org.mvel2``, ``org.xml.sax``, ``org.xmlpull.v1``, ``play.mvc``",7,26,151,,,,14,18,, - Totals,,116,4169,408,13,6,10,107,33,1,66 + Totals,,143,4984,408,13,6,10,107,33,1,66 From e17071723fce710145dccabdd769e06500c734d2 Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Wed, 29 Sep 2021 10:23:33 +0200 Subject: [PATCH 658/741] C#: Handle invalid code gracefully: global statements in library --- .../Populators/CompilationUnitVisitor.cs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Populators/CompilationUnitVisitor.cs b/csharp/extractor/Semmle.Extraction.CSharp/Populators/CompilationUnitVisitor.cs index 6116c3511a1..be53e48f319 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Populators/CompilationUnitVisitor.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Populators/CompilationUnitVisitor.cs @@ -59,8 +59,15 @@ namespace Semmle.Extraction.CSharp.Populators return; } - var entryPoint = Cx.Compilation.GetEntryPoint(System.Threading.CancellationToken.None)!; + var entryPoint = Cx.Compilation.GetEntryPoint(System.Threading.CancellationToken.None); var entryMethod = Method.Create(Cx, entryPoint); + if (entryMethod is null) + { + Cx.ExtractionError("No entry method found. Skipping the extraction of global statements.", + null, Cx.CreateLocation(globalStatements[0].GetLocation()), null, Severity.Info); + return; + } + var block = GlobalStatementsBlock.Create(Cx, entryMethod); for (var i = 0; i < globalStatements.Count; i++) From dea8dde566abd228890e6a4064488c014f12684b Mon Sep 17 00:00:00 2001 From: alexet Date: Wed, 22 Sep 2021 15:17:06 +0100 Subject: [PATCH 659/741] Java: Improve performance of confusing overloading query. --- .../Naming Conventions/ConfusingOverloading.ql | 1 + 1 file changed, 1 insertion(+) diff --git a/java/ql/src/Violations of Best Practice/Naming Conventions/ConfusingOverloading.ql b/java/ql/src/Violations of Best Practice/Naming Conventions/ConfusingOverloading.ql index 1d8509c6e03..22bf9d36142 100644 --- a/java/ql/src/Violations of Best Practice/Naming Conventions/ConfusingOverloading.ql +++ b/java/ql/src/Violations of Best Practice/Naming Conventions/ConfusingOverloading.ql @@ -50,6 +50,7 @@ private predicate whitelist(string name) { name = "visit" } * Method `m` has name `name`, number of parameters `numParams` * and is declared in `t` or inherited from a supertype of `t`. */ +pragma[nomagic] private predicate candidateMethod(RefType t, Method m, string name, int numParam) { exists(Method n | n.getSourceDeclaration() = m | t.inherits(n)) and m.getName() = name and From 987b5737092e0fc1b4c5fbcce578d3c826d77f6f Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Wed, 29 Sep 2021 13:47:58 +0200 Subject: [PATCH 660/741] Fix `hasLocationInfo` URL reference Follow up to https://github.com/github/codeql/pull/5830 --- cpp/ql/lib/semmle/code/cpp/File.qll | 2 +- cpp/ql/lib/semmle/code/cpp/Location.qll | 2 +- cpp/ql/lib/semmle/code/cpp/XML.qll | 2 +- cpp/ql/lib/semmle/code/cpp/controlflow/BasicBlocks.qll | 2 +- .../semmle/code/cpp/dataflow/internal/DataFlowImpl.qll | 4 ++-- .../code/cpp/dataflow/internal/DataFlowImpl2.qll | 4 ++-- .../code/cpp/dataflow/internal/DataFlowImpl3.qll | 4 ++-- .../code/cpp/dataflow/internal/DataFlowImpl4.qll | 4 ++-- .../code/cpp/dataflow/internal/DataFlowImplLocal.qll | 4 ++-- .../semmle/code/cpp/dataflow/internal/DataFlowUtil.qll | 2 +- .../code/cpp/ir/dataflow/DefaultTaintTracking.qll | 2 +- .../code/cpp/ir/dataflow/internal/DataFlowImpl.qll | 4 ++-- .../code/cpp/ir/dataflow/internal/DataFlowImpl2.qll | 4 ++-- .../code/cpp/ir/dataflow/internal/DataFlowImpl3.qll | 4 ++-- .../code/cpp/ir/dataflow/internal/DataFlowImpl4.qll | 4 ++-- .../code/cpp/ir/dataflow/internal/DataFlowUtil.qll | 2 +- cpp/ql/lib/semmlecode.cpp.dbscheme | 6 +++--- cpp/ql/src/AlertSuppression.ql | 2 +- cpp/ql/src/Documentation/CommentedOutCode.qll | 2 +- cpp/ql/src/Metrics/Internal/CallableExtents.ql | 2 +- cpp/ql/src/definitions.qll | 2 +- cpp/ql/src/external/CodeDuplication.qll | 2 +- cpp/ql/src/external/DefectFilter.qll | 2 +- cpp/ql/src/external/MetricFilter.qll | 2 +- csharp/ql/lib/semmle/code/csharp/Attribute.qll | 2 +- csharp/ql/lib/semmle/code/csharp/File.qll | 2 +- csharp/ql/lib/semmle/code/csharp/Location.qll | 2 +- csharp/ql/lib/semmle/code/csharp/XML.qll | 2 +- csharp/ql/lib/semmle/code/csharp/dataflow/Bound.qll | 2 +- .../code/csharp/dataflow/internal/DataFlowImpl.qll | 4 ++-- .../code/csharp/dataflow/internal/DataFlowImpl2.qll | 4 ++-- .../code/csharp/dataflow/internal/DataFlowImpl3.qll | 4 ++-- .../code/csharp/dataflow/internal/DataFlowImpl4.qll | 4 ++-- .../code/csharp/dataflow/internal/DataFlowImpl5.qll | 4 ++-- .../code/csharp/dataflow/internal/DataFlowPublic.qll | 2 +- csharp/ql/src/AlertSuppression.ql | 2 +- csharp/ql/src/definitions.qll | 2 +- java/ql/lib/semmle/code/FileSystem.qll | 2 +- java/ql/lib/semmle/code/Location.qll | 4 ++-- java/ql/lib/semmle/code/java/dataflow/Bound.qll | 2 +- .../code/java/dataflow/internal/DataFlowImpl.qll | 4 ++-- .../code/java/dataflow/internal/DataFlowImpl2.qll | 4 ++-- .../code/java/dataflow/internal/DataFlowImpl3.qll | 4 ++-- .../code/java/dataflow/internal/DataFlowImpl4.qll | 4 ++-- .../code/java/dataflow/internal/DataFlowImpl5.qll | 4 ++-- .../code/java/dataflow/internal/DataFlowImpl6.qll | 4 ++-- .../internal/DataFlowImplForSerializability.qll | 4 ++-- .../code/java/dataflow/internal/DataFlowNodes.qll | 2 +- .../code/java/dataflow/internal/DataFlowUtil.qll | 2 +- java/ql/lib/semmle/code/xml/XML.qll | 2 +- java/ql/src/AlertSuppression.ql | 2 +- java/ql/src/AlertSuppressionAnnotations.ql | 2 +- javascript/ql/lib/semmle/javascript/Files.qll | 2 +- javascript/ql/lib/semmle/javascript/Locations.qll | 4 ++-- .../ql/lib/semmle/javascript/RestrictedLocations.qll | 4 ++-- javascript/ql/lib/semmle/javascript/SSA.qll | 4 ++-- javascript/ql/lib/semmle/javascript/XML.qll | 2 +- .../lib/semmle/javascript/dataflow/AbstractValues.qll | 2 +- .../lib/semmle/javascript/dataflow/Configuration.qll | 2 +- .../ql/lib/semmle/javascript/dataflow/DataFlow.qll | 2 +- javascript/ql/lib/semmle/javascript/frameworks/Vue.qll | 4 ++-- .../ql/lib/semmle/javascript/frameworks/xUnit.qll | 2 +- javascript/ql/src/AlertSuppression.ql | 2 +- javascript/ql/src/Comments/CommentedOut.qll | 2 +- javascript/ql/src/Expressions/MisspelledIdentifier.ql | 2 +- javascript/ql/src/LanguageFeatures/EmptyArrayInit.ql | 2 +- .../ql/src/LanguageFeatures/SpuriousArguments.ql | 2 +- .../Security/CWE-020/UselessRegExpCharacterEscape.ql | 2 +- javascript/ql/src/external/DefectFilter.qll | 2 +- javascript/ql/src/external/MetricFilter.qll | 2 +- python/ql/lib/semmle/python/Comment.qll | 2 +- python/ql/lib/semmle/python/Files.qll | 10 +++++----- python/ql/lib/semmle/python/Flow.qll | 2 +- .../python/dataflow/new/internal/DataFlowImpl.qll | 4 ++-- .../python/dataflow/new/internal/DataFlowImpl2.qll | 4 ++-- .../python/dataflow/new/internal/DataFlowImpl3.qll | 4 ++-- .../python/dataflow/new/internal/DataFlowImpl4.qll | 4 ++-- .../python/dataflow/new/internal/DataFlowPublic.qll | 2 +- .../lib/semmle/python/dataflow/old/TaintTracking.qll | 4 ++-- python/ql/lib/semmle/python/objects/ObjectAPI.qll | 2 +- .../python/security/dataflow/ChainedConfigs12.qll | 2 +- python/ql/lib/semmle/python/types/Object.qll | 2 +- python/ql/lib/semmle/python/xml/XML.qll | 2 +- python/ql/src/Lexical/CommentedOutCode.qll | 2 +- python/ql/src/Metrics/Internal/Extents.qll | 4 ++-- python/ql/src/analysis/AlertSuppression.ql | 2 +- python/ql/src/analysis/DefinitionTracking.qll | 2 +- python/ql/src/external/DefectFilter.qll | 4 ++-- python/ql/src/external/Thrift.qll | 2 +- 89 files changed, 128 insertions(+), 128 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/File.qll b/cpp/ql/lib/semmle/code/cpp/File.qll index 853b34ecfd9..f486dd8d3c5 100644 --- a/cpp/ql/lib/semmle/code/cpp/File.qll +++ b/cpp/ql/lib/semmle/code/cpp/File.qll @@ -38,7 +38,7 @@ class Container extends Locatable, @container { * DEPRECATED: Use `getLocation` instead. * Gets a URL representing the location of this container. * - * For more information see [Providing URLs](https://help.semmle.com/QL/learn-ql/ql/locations.html#providing-urls). + * For more information see [Providing URLs](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/#providing-urls). */ deprecated string getURL() { none() } // overridden by subclasses diff --git a/cpp/ql/lib/semmle/code/cpp/Location.qll b/cpp/ql/lib/semmle/code/cpp/Location.qll index 2a730ea5768..15ae2121255 100644 --- a/cpp/ql/lib/semmle/code/cpp/Location.qll +++ b/cpp/ql/lib/semmle/code/cpp/Location.qll @@ -61,7 +61,7 @@ class Location extends @location { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn diff --git a/cpp/ql/lib/semmle/code/cpp/XML.qll b/cpp/ql/lib/semmle/code/cpp/XML.qll index 5871fed0ddd..4c762f4bf65 100755 --- a/cpp/ql/lib/semmle/code/cpp/XML.qll +++ b/cpp/ql/lib/semmle/code/cpp/XML.qll @@ -24,7 +24,7 @@ class XMLLocatable extends @xmllocatable, TXMLLocatable { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn diff --git a/cpp/ql/lib/semmle/code/cpp/controlflow/BasicBlocks.qll b/cpp/ql/lib/semmle/code/cpp/controlflow/BasicBlocks.qll index 16947019f54..e235eba355b 100644 --- a/cpp/ql/lib/semmle/code/cpp/controlflow/BasicBlocks.qll +++ b/cpp/ql/lib/semmle/code/cpp/controlflow/BasicBlocks.qll @@ -194,7 +194,7 @@ class BasicBlock extends ControlFlowNodeBase { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). * * Yields no result if this basic block spans multiple source files. */ diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl.qll index 0c99a25ccc4..e04d3b0edc6 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl.qll @@ -3248,7 +3248,7 @@ class PathNode extends TPathNode { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn @@ -4033,7 +4033,7 @@ private module FlowExploration { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl2.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl2.qll index 0c99a25ccc4..e04d3b0edc6 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl2.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl2.qll @@ -3248,7 +3248,7 @@ class PathNode extends TPathNode { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn @@ -4033,7 +4033,7 @@ private module FlowExploration { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl3.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl3.qll index 0c99a25ccc4..e04d3b0edc6 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl3.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl3.qll @@ -3248,7 +3248,7 @@ class PathNode extends TPathNode { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn @@ -4033,7 +4033,7 @@ private module FlowExploration { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl4.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl4.qll index 0c99a25ccc4..e04d3b0edc6 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl4.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl4.qll @@ -3248,7 +3248,7 @@ class PathNode extends TPathNode { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn @@ -4033,7 +4033,7 @@ private module FlowExploration { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplLocal.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplLocal.qll index 0c99a25ccc4..e04d3b0edc6 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplLocal.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplLocal.qll @@ -3248,7 +3248,7 @@ class PathNode extends TPathNode { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn @@ -4033,7 +4033,7 @@ private module FlowExploration { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowUtil.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowUtil.qll index 01338eaeff4..2dfd02d14ef 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowUtil.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowUtil.qll @@ -101,7 +101,7 @@ class Node extends TNode { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/DefaultTaintTracking.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/DefaultTaintTracking.qll index b77bc6cebf0..7a104d3c510 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/DefaultTaintTracking.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/DefaultTaintTracking.qll @@ -479,7 +479,7 @@ module TaintedWithPath { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl.qll index 0c99a25ccc4..e04d3b0edc6 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl.qll @@ -3248,7 +3248,7 @@ class PathNode extends TPathNode { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn @@ -4033,7 +4033,7 @@ private module FlowExploration { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl2.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl2.qll index 0c99a25ccc4..e04d3b0edc6 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl2.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl2.qll @@ -3248,7 +3248,7 @@ class PathNode extends TPathNode { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn @@ -4033,7 +4033,7 @@ private module FlowExploration { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl3.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl3.qll index 0c99a25ccc4..e04d3b0edc6 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl3.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl3.qll @@ -3248,7 +3248,7 @@ class PathNode extends TPathNode { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn @@ -4033,7 +4033,7 @@ private module FlowExploration { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl4.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl4.qll index 0c99a25ccc4..e04d3b0edc6 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl4.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl4.qll @@ -3248,7 +3248,7 @@ class PathNode extends TPathNode { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn @@ -4033,7 +4033,7 @@ private module FlowExploration { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowUtil.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowUtil.qll index bf21249d4ca..9e7a95e010d 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowUtil.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowUtil.qll @@ -120,7 +120,7 @@ class Node extends TIRDataFlowNode { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn diff --git a/cpp/ql/lib/semmlecode.cpp.dbscheme b/cpp/ql/lib/semmlecode.cpp.dbscheme index 7806a11dd7a..018f430097e 100644 --- a/cpp/ql/lib/semmlecode.cpp.dbscheme +++ b/cpp/ql/lib/semmlecode.cpp.dbscheme @@ -245,7 +245,7 @@ svnchurn( * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `file`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ locations_default( /** The location of an element that is not an expression or a statement. */ @@ -262,7 +262,7 @@ locations_default( * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `file`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ locations_stmt( /** The location of a statement. */ @@ -279,7 +279,7 @@ locations_stmt( * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `file`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ locations_expr( /** The location of an expression. */ diff --git a/cpp/ql/src/AlertSuppression.ql b/cpp/ql/src/AlertSuppression.ql index 6258e8f7818..7239398e8c1 100644 --- a/cpp/ql/src/AlertSuppression.ql +++ b/cpp/ql/src/AlertSuppression.ql @@ -68,7 +68,7 @@ class SuppressionScope extends ElementBase { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn diff --git a/cpp/ql/src/Documentation/CommentedOutCode.qll b/cpp/ql/src/Documentation/CommentedOutCode.qll index 172474bbe29..a4e5b948630 100644 --- a/cpp/ql/src/Documentation/CommentedOutCode.qll +++ b/cpp/ql/src/Documentation/CommentedOutCode.qll @@ -198,7 +198,7 @@ class CommentBlock extends Comment { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn diff --git a/cpp/ql/src/Metrics/Internal/CallableExtents.ql b/cpp/ql/src/Metrics/Internal/CallableExtents.ql index 80c798b19ff..7a376c6da72 100644 --- a/cpp/ql/src/Metrics/Internal/CallableExtents.ql +++ b/cpp/ql/src/Metrics/Internal/CallableExtents.ql @@ -18,7 +18,7 @@ class RangeFunction extends Function { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo(string path, int sl, int sc, int el, int ec) { super.getLocation().hasLocationInfo(path, sl, sc, _, _) and diff --git a/cpp/ql/src/definitions.qll b/cpp/ql/src/definitions.qll index eac03ce7082..cb229d66ef1 100644 --- a/cpp/ql/src/definitions.qll +++ b/cpp/ql/src/definitions.qll @@ -24,7 +24,7 @@ class Top extends Element { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ pragma[noopt] final predicate hasLocationInfo( diff --git a/cpp/ql/src/external/CodeDuplication.qll b/cpp/ql/src/external/CodeDuplication.qll index 8cc56d12e19..1550ca697a3 100644 --- a/cpp/ql/src/external/CodeDuplication.qll +++ b/cpp/ql/src/external/CodeDuplication.qll @@ -61,7 +61,7 @@ class Copy extends @duplication_or_similarity { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn diff --git a/cpp/ql/src/external/DefectFilter.qll b/cpp/ql/src/external/DefectFilter.qll index 675f3b25faa..b932ffd0470 100644 --- a/cpp/ql/src/external/DefectFilter.qll +++ b/cpp/ql/src/external/DefectFilter.qll @@ -8,7 +8,7 @@ import cpp * column `startcolumn` of line `startline` to column `endcolumn` of line `endline` * in file `filepath`. * - * For more information, see [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * For more information, see [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ external predicate defectResults( int id, string queryPath, string file, int startline, int startcol, int endline, int endcol, diff --git a/cpp/ql/src/external/MetricFilter.qll b/cpp/ql/src/external/MetricFilter.qll index dd9cece78ce..58e8bf154e9 100644 --- a/cpp/ql/src/external/MetricFilter.qll +++ b/cpp/ql/src/external/MetricFilter.qll @@ -8,7 +8,7 @@ import cpp * column `startcolumn` of line `startline` to column `endcolumn` of line `endline` * in file `filepath`. * - * For more information, see [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * For more information, see [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ external predicate metricResults( int id, string queryPath, string file, int startline, int startcol, int endline, int endcol, diff --git a/csharp/ql/lib/semmle/code/csharp/Attribute.qll b/csharp/ql/lib/semmle/code/csharp/Attribute.qll index 2085c4c650a..06fbda2a150 100644 --- a/csharp/ql/lib/semmle/code/csharp/Attribute.qll +++ b/csharp/ql/lib/semmle/code/csharp/Attribute.qll @@ -25,7 +25,7 @@ class Attributable extends @attributable { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn diff --git a/csharp/ql/lib/semmle/code/csharp/File.qll b/csharp/ql/lib/semmle/code/csharp/File.qll index 8ee61b29085..df9ce6f3cf6 100644 --- a/csharp/ql/lib/semmle/code/csharp/File.qll +++ b/csharp/ql/lib/semmle/code/csharp/File.qll @@ -33,7 +33,7 @@ class Container extends @container { /** * Gets a URL representing the location of this container. * - * For more information see [Providing URLs](https://help.semmle.com/QL/learn-ql/ql/locations.html#providing-urls). + * For more information see [Providing URLs](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/#providing-urls). */ string getURL() { none() } diff --git a/csharp/ql/lib/semmle/code/csharp/Location.qll b/csharp/ql/lib/semmle/code/csharp/Location.qll index 97f9302c474..22d87f42424 100644 --- a/csharp/ql/lib/semmle/code/csharp/Location.qll +++ b/csharp/ql/lib/semmle/code/csharp/Location.qll @@ -28,7 +28,7 @@ class Location extends @location { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn diff --git a/csharp/ql/lib/semmle/code/csharp/XML.qll b/csharp/ql/lib/semmle/code/csharp/XML.qll index 5871fed0ddd..4c762f4bf65 100755 --- a/csharp/ql/lib/semmle/code/csharp/XML.qll +++ b/csharp/ql/lib/semmle/code/csharp/XML.qll @@ -24,7 +24,7 @@ class XMLLocatable extends @xmllocatable, TXMLLocatable { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/Bound.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/Bound.qll index b129203db70..55a8b1f4c3f 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/Bound.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/Bound.qll @@ -30,7 +30,7 @@ abstract class Bound extends TBound { * The location spans column `sc` of line `sl` to * column `ec` of line `el` in file `path`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo(string path, int sl, int sc, int el, int ec) { path = "" and sl = 0 and sc = 0 and el = 0 and ec = 0 diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl.qll index 0c99a25ccc4..e04d3b0edc6 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl.qll @@ -3248,7 +3248,7 @@ class PathNode extends TPathNode { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn @@ -4033,7 +4033,7 @@ private module FlowExploration { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl2.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl2.qll index 0c99a25ccc4..e04d3b0edc6 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl2.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl2.qll @@ -3248,7 +3248,7 @@ class PathNode extends TPathNode { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn @@ -4033,7 +4033,7 @@ private module FlowExploration { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl3.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl3.qll index 0c99a25ccc4..e04d3b0edc6 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl3.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl3.qll @@ -3248,7 +3248,7 @@ class PathNode extends TPathNode { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn @@ -4033,7 +4033,7 @@ private module FlowExploration { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl4.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl4.qll index 0c99a25ccc4..e04d3b0edc6 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl4.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl4.qll @@ -3248,7 +3248,7 @@ class PathNode extends TPathNode { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn @@ -4033,7 +4033,7 @@ private module FlowExploration { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl5.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl5.qll index 0c99a25ccc4..e04d3b0edc6 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl5.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl5.qll @@ -3248,7 +3248,7 @@ class PathNode extends TPathNode { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn @@ -4033,7 +4033,7 @@ private module FlowExploration { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPublic.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPublic.qll index bfc2f5469d0..56286903951 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPublic.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPublic.qll @@ -58,7 +58,7 @@ class Node extends TNode { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn diff --git a/csharp/ql/src/AlertSuppression.ql b/csharp/ql/src/AlertSuppression.ql index 1467731809b..3cb6d759b6e 100644 --- a/csharp/ql/src/AlertSuppression.ql +++ b/csharp/ql/src/AlertSuppression.ql @@ -55,7 +55,7 @@ class SuppressionScope extends @commentline { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn diff --git a/csharp/ql/src/definitions.qll b/csharp/ql/src/definitions.qll index ade40435e18..559bc0d3908 100644 --- a/csharp/ql/src/definitions.qll +++ b/csharp/ql/src/definitions.qll @@ -13,7 +13,7 @@ abstract class Use extends @type_mention_parent { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn diff --git a/java/ql/lib/semmle/code/FileSystem.qll b/java/ql/lib/semmle/code/FileSystem.qll index 89891acf622..6c252d569e9 100755 --- a/java/ql/lib/semmle/code/FileSystem.qll +++ b/java/ql/lib/semmle/code/FileSystem.qll @@ -33,7 +33,7 @@ class Container extends @container, Top { /** * Gets a URL representing the location of this container. * - * For more information see [Providing URLs](https://help.semmle.com/QL/learn-ql/ql/locations.html#providing-urls). + * For more information see [Providing URLs](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/#providing-urls). */ abstract string getURL(); diff --git a/java/ql/lib/semmle/code/Location.qll b/java/ql/lib/semmle/code/Location.qll index b1275f44351..2af4f8712e0 100755 --- a/java/ql/lib/semmle/code/Location.qll +++ b/java/ql/lib/semmle/code/Location.qll @@ -58,7 +58,7 @@ class Top extends @top { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn @@ -180,7 +180,7 @@ class Location extends @location { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn diff --git a/java/ql/lib/semmle/code/java/dataflow/Bound.qll b/java/ql/lib/semmle/code/java/dataflow/Bound.qll index b129203db70..55a8b1f4c3f 100644 --- a/java/ql/lib/semmle/code/java/dataflow/Bound.qll +++ b/java/ql/lib/semmle/code/java/dataflow/Bound.qll @@ -30,7 +30,7 @@ abstract class Bound extends TBound { * The location spans column `sc` of line `sl` to * column `ec` of line `el` in file `path`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo(string path, int sl, int sc, int el, int ec) { path = "" and sl = 0 and sc = 0 and el = 0 and ec = 0 diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl.qll index 0c99a25ccc4..e04d3b0edc6 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl.qll @@ -3248,7 +3248,7 @@ class PathNode extends TPathNode { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn @@ -4033,7 +4033,7 @@ private module FlowExploration { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl2.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl2.qll index 0c99a25ccc4..e04d3b0edc6 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl2.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl2.qll @@ -3248,7 +3248,7 @@ class PathNode extends TPathNode { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn @@ -4033,7 +4033,7 @@ private module FlowExploration { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl3.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl3.qll index 0c99a25ccc4..e04d3b0edc6 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl3.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl3.qll @@ -3248,7 +3248,7 @@ class PathNode extends TPathNode { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn @@ -4033,7 +4033,7 @@ private module FlowExploration { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl4.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl4.qll index 0c99a25ccc4..e04d3b0edc6 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl4.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl4.qll @@ -3248,7 +3248,7 @@ class PathNode extends TPathNode { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn @@ -4033,7 +4033,7 @@ private module FlowExploration { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl5.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl5.qll index 0c99a25ccc4..e04d3b0edc6 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl5.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl5.qll @@ -3248,7 +3248,7 @@ class PathNode extends TPathNode { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn @@ -4033,7 +4033,7 @@ private module FlowExploration { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl6.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl6.qll index 0c99a25ccc4..e04d3b0edc6 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl6.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl6.qll @@ -3248,7 +3248,7 @@ class PathNode extends TPathNode { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn @@ -4033,7 +4033,7 @@ private module FlowExploration { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplForSerializability.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplForSerializability.qll index 0c99a25ccc4..e04d3b0edc6 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplForSerializability.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplForSerializability.qll @@ -3248,7 +3248,7 @@ class PathNode extends TPathNode { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn @@ -4033,7 +4033,7 @@ private module FlowExploration { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowNodes.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowNodes.qll index 6cc7906ab33..622ef595792 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowNodes.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowNodes.qll @@ -127,7 +127,7 @@ module Public { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowUtil.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowUtil.qll index f00bc34f055..462430b2b5a 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowUtil.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowUtil.qll @@ -182,7 +182,7 @@ class Content extends TContent { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo(string path, int sl, int sc, int el, int ec) { path = "" and sl = 0 and sc = 0 and el = 0 and ec = 0 diff --git a/java/ql/lib/semmle/code/xml/XML.qll b/java/ql/lib/semmle/code/xml/XML.qll index 5871fed0ddd..4c762f4bf65 100755 --- a/java/ql/lib/semmle/code/xml/XML.qll +++ b/java/ql/lib/semmle/code/xml/XML.qll @@ -24,7 +24,7 @@ class XMLLocatable extends @xmllocatable, TXMLLocatable { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn diff --git a/java/ql/src/AlertSuppression.ql b/java/ql/src/AlertSuppression.ql index 925e377198c..77eea91d819 100644 --- a/java/ql/src/AlertSuppression.ql +++ b/java/ql/src/AlertSuppression.ql @@ -64,7 +64,7 @@ class SuppressionScope extends @javadoc { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn diff --git a/java/ql/src/AlertSuppressionAnnotations.ql b/java/ql/src/AlertSuppressionAnnotations.ql index 5d477a59675..4f9ad26ce60 100644 --- a/java/ql/src/AlertSuppressionAnnotations.ql +++ b/java/ql/src/AlertSuppressionAnnotations.ql @@ -75,7 +75,7 @@ class SuppressionScope extends @annotation { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn diff --git a/javascript/ql/lib/semmle/javascript/Files.qll b/javascript/ql/lib/semmle/javascript/Files.qll index 7bb0bb5b314..f08b0ecbd8d 100644 --- a/javascript/ql/lib/semmle/javascript/Files.qll +++ b/javascript/ql/lib/semmle/javascript/Files.qll @@ -34,7 +34,7 @@ abstract class Container extends @container { /** * Gets a URL representing the location of this container. * - * For more information see [Providing URLs](https://help.semmle.com/QL/learn-ql/ql/locations.html#providing-urls). + * For more information see [Providing URLs](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/#providing-urls). */ abstract string getURL(); diff --git a/javascript/ql/lib/semmle/javascript/Locations.qll b/javascript/ql/lib/semmle/javascript/Locations.qll index bdf83fb395a..9bf5c341915 100644 --- a/javascript/ql/lib/semmle/javascript/Locations.qll +++ b/javascript/ql/lib/semmle/javascript/Locations.qll @@ -6,7 +6,7 @@ import javascript * A location as given by a file, a start line, a start column, * an end line, and an end column. * - * For more information about locations see [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * For more information about locations see [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ class Location extends @location { /** Gets the file for this location. */ @@ -70,7 +70,7 @@ class Location extends @location { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn diff --git a/javascript/ql/lib/semmle/javascript/RestrictedLocations.qll b/javascript/ql/lib/semmle/javascript/RestrictedLocations.qll index 8c45ad533ba..9fd70ca1230 100644 --- a/javascript/ql/lib/semmle/javascript/RestrictedLocations.qll +++ b/javascript/ql/lib/semmle/javascript/RestrictedLocations.qll @@ -14,7 +14,7 @@ class FirstLineOf extends Locatable { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn @@ -43,7 +43,7 @@ class LastLineOf extends Locatable { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn diff --git a/javascript/ql/lib/semmle/javascript/SSA.qll b/javascript/ql/lib/semmle/javascript/SSA.qll index d55f29ee1a8..11acc7d284c 100644 --- a/javascript/ql/lib/semmle/javascript/SSA.qll +++ b/javascript/ql/lib/semmle/javascript/SSA.qll @@ -417,7 +417,7 @@ class SsaVariable extends TSsaDefinition { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn @@ -482,7 +482,7 @@ class SsaDefinition extends TSsaDefinition { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ abstract predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn diff --git a/javascript/ql/lib/semmle/javascript/XML.qll b/javascript/ql/lib/semmle/javascript/XML.qll index 5871fed0ddd..4c762f4bf65 100755 --- a/javascript/ql/lib/semmle/javascript/XML.qll +++ b/javascript/ql/lib/semmle/javascript/XML.qll @@ -24,7 +24,7 @@ class XMLLocatable extends @xmllocatable, TXMLLocatable { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn diff --git a/javascript/ql/lib/semmle/javascript/dataflow/AbstractValues.qll b/javascript/ql/lib/semmle/javascript/dataflow/AbstractValues.qll index 5e4776cfdbf..b887972503e 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/AbstractValues.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/AbstractValues.qll @@ -109,7 +109,7 @@ class AbstractValue extends TAbstractValue { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `f`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo(string f, int startline, int startcolumn, int endline, int endcolumn) { f = "" and startline = 0 and startcolumn = 0 and endline = 0 and endcolumn = 0 diff --git a/javascript/ql/lib/semmle/javascript/dataflow/Configuration.qll b/javascript/ql/lib/semmle/javascript/dataflow/Configuration.qll index 2d49693d6aa..f9a8f45b3a3 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/Configuration.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/Configuration.qll @@ -1776,7 +1776,7 @@ class PathNode extends TPathNode { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn diff --git a/javascript/ql/lib/semmle/javascript/dataflow/DataFlow.qll b/javascript/ql/lib/semmle/javascript/dataflow/DataFlow.qll index b5d1290a516..a756f03bec7 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/DataFlow.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/DataFlow.qll @@ -148,7 +148,7 @@ module DataFlow { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ cached predicate hasLocationInfo( diff --git a/javascript/ql/lib/semmle/javascript/frameworks/Vue.qll b/javascript/ql/lib/semmle/javascript/frameworks/Vue.qll index 0ee45aefa11..2101f29fdab 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/Vue.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/Vue.qll @@ -151,7 +151,7 @@ module Vue { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn @@ -640,7 +640,7 @@ module Vue { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn diff --git a/javascript/ql/lib/semmle/javascript/frameworks/xUnit.qll b/javascript/ql/lib/semmle/javascript/frameworks/xUnit.qll index a897cb486aa..e07bd29b3c3 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/xUnit.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/xUnit.qll @@ -131,7 +131,7 @@ class XUnitAnnotation extends Expr { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn diff --git a/javascript/ql/src/AlertSuppression.ql b/javascript/ql/src/AlertSuppression.ql index 43bfe3a020c..4366eb3ba7e 100644 --- a/javascript/ql/src/AlertSuppression.ql +++ b/javascript/ql/src/AlertSuppression.ql @@ -63,7 +63,7 @@ class SuppressionScope extends @locatable { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn diff --git a/javascript/ql/src/Comments/CommentedOut.qll b/javascript/ql/src/Comments/CommentedOut.qll index 21cc27388ab..a0d00d70642 100644 --- a/javascript/ql/src/Comments/CommentedOut.qll +++ b/javascript/ql/src/Comments/CommentedOut.qll @@ -127,7 +127,7 @@ class CommentedOutCode extends Comment { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn diff --git a/javascript/ql/src/Expressions/MisspelledIdentifier.ql b/javascript/ql/src/Expressions/MisspelledIdentifier.ql index 6eba0ede3a7..342f4072277 100644 --- a/javascript/ql/src/Expressions/MisspelledIdentifier.ql +++ b/javascript/ql/src/Expressions/MisspelledIdentifier.ql @@ -22,7 +22,7 @@ class IdentifierPart extends string { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn diff --git a/javascript/ql/src/LanguageFeatures/EmptyArrayInit.ql b/javascript/ql/src/LanguageFeatures/EmptyArrayInit.ql index eaa9ffdc1fc..9c95ec9365d 100644 --- a/javascript/ql/src/LanguageFeatures/EmptyArrayInit.ql +++ b/javascript/ql/src/LanguageFeatures/EmptyArrayInit.ql @@ -29,7 +29,7 @@ class OmittedArrayElement extends ArrayExpr { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn diff --git a/javascript/ql/src/LanguageFeatures/SpuriousArguments.ql b/javascript/ql/src/LanguageFeatures/SpuriousArguments.ql index b2e86524e20..29f62648956 100644 --- a/javascript/ql/src/LanguageFeatures/SpuriousArguments.ql +++ b/javascript/ql/src/LanguageFeatures/SpuriousArguments.ql @@ -68,7 +68,7 @@ class SpuriousArguments extends Expr { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn diff --git a/javascript/ql/src/Security/CWE-020/UselessRegExpCharacterEscape.ql b/javascript/ql/src/Security/CWE-020/UselessRegExpCharacterEscape.ql index 29933de7848..7bd17135e33 100644 --- a/javascript/ql/src/Security/CWE-020/UselessRegExpCharacterEscape.ql +++ b/javascript/ql/src/Security/CWE-020/UselessRegExpCharacterEscape.ql @@ -67,7 +67,7 @@ class RegExpPatternMistake extends TRegExpPatternMistake { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn diff --git a/javascript/ql/src/external/DefectFilter.qll b/javascript/ql/src/external/DefectFilter.qll index d35e41d9afd..40c9527e96d 100644 --- a/javascript/ql/src/external/DefectFilter.qll +++ b/javascript/ql/src/external/DefectFilter.qll @@ -8,7 +8,7 @@ import semmle.javascript.Files * column `startcolumn` of line `startline` to column `endcolumn` of line `endline` * in file `filepath`. * - * For more information, see [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * For more information, see [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ external predicate defectResults( int id, string queryPath, string file, int startline, int startcol, int endline, int endcol, diff --git a/javascript/ql/src/external/MetricFilter.qll b/javascript/ql/src/external/MetricFilter.qll index 5edecac75d8..e27b733e4b9 100644 --- a/javascript/ql/src/external/MetricFilter.qll +++ b/javascript/ql/src/external/MetricFilter.qll @@ -8,7 +8,7 @@ import javascript * column `startcolumn` of line `startline` to column `endcolumn` of line `endline` * in file `filepath`. * - * For more information, see [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * For more information, see [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ external predicate metricResults( int id, string queryPath, string file, int startline, int startcol, int endline, int endcol, diff --git a/python/ql/lib/semmle/python/Comment.qll b/python/ql/lib/semmle/python/Comment.qll index 94dd429e404..24810b418ac 100644 --- a/python/ql/lib/semmle/python/Comment.qll +++ b/python/ql/lib/semmle/python/Comment.qll @@ -67,7 +67,7 @@ class CommentBlock extends @py_comment { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn diff --git a/python/ql/lib/semmle/python/Files.qll b/python/ql/lib/semmle/python/Files.qll index 2fa1a733fc6..66dfca681cc 100644 --- a/python/ql/lib/semmle/python/Files.qll +++ b/python/ql/lib/semmle/python/Files.qll @@ -13,7 +13,7 @@ class File extends Container, @file { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn @@ -123,7 +123,7 @@ class Folder extends Container, @folder { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn @@ -323,7 +323,7 @@ abstract class Container extends @container { /** * Gets a URL representing the location of this container. * - * For more information see [Providing URLs](https://help.semmle.com/QL/learn-ql/ql/locations.html#providing-urls). + * For more information see [Providing URLs](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/#providing-urls). */ abstract string getURL(); @@ -429,7 +429,7 @@ class Location extends @location { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn @@ -457,7 +457,7 @@ class Line extends @py_line { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn diff --git a/python/ql/lib/semmle/python/Flow.qll b/python/ql/lib/semmle/python/Flow.qll index beda3cef1c4..65246927872 100755 --- a/python/ql/lib/semmle/python/Flow.qll +++ b/python/ql/lib/semmle/python/Flow.qll @@ -1111,7 +1111,7 @@ class BasicBlock extends @py_flow_node { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl.qll index 0c99a25ccc4..e04d3b0edc6 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl.qll @@ -3248,7 +3248,7 @@ class PathNode extends TPathNode { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn @@ -4033,7 +4033,7 @@ private module FlowExploration { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl2.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl2.qll index 0c99a25ccc4..e04d3b0edc6 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl2.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl2.qll @@ -3248,7 +3248,7 @@ class PathNode extends TPathNode { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn @@ -4033,7 +4033,7 @@ private module FlowExploration { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl3.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl3.qll index 0c99a25ccc4..e04d3b0edc6 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl3.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl3.qll @@ -3248,7 +3248,7 @@ class PathNode extends TPathNode { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn @@ -4033,7 +4033,7 @@ private module FlowExploration { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl4.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl4.qll index 0c99a25ccc4..e04d3b0edc6 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl4.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl4.qll @@ -3248,7 +3248,7 @@ class PathNode extends TPathNode { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn @@ -4033,7 +4033,7 @@ private module FlowExploration { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPublic.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPublic.qll index 928082d7e8a..82be6c5ee46 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPublic.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPublic.qll @@ -102,7 +102,7 @@ class Node extends TNode { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn diff --git a/python/ql/lib/semmle/python/dataflow/old/TaintTracking.qll b/python/ql/lib/semmle/python/dataflow/old/TaintTracking.qll index d6d1f9388c4..e7ee6a3ee08 100755 --- a/python/ql/lib/semmle/python/dataflow/old/TaintTracking.qll +++ b/python/ql/lib/semmle/python/dataflow/old/TaintTracking.qll @@ -384,7 +384,7 @@ abstract class TaintSource extends @py_flow_node { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn @@ -498,7 +498,7 @@ abstract class TaintSink extends @py_flow_node { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn diff --git a/python/ql/lib/semmle/python/objects/ObjectAPI.qll b/python/ql/lib/semmle/python/objects/ObjectAPI.qll index 683bcc5ce36..946eb1de04d 100644 --- a/python/ql/lib/semmle/python/objects/ObjectAPI.qll +++ b/python/ql/lib/semmle/python/objects/ObjectAPI.qll @@ -79,7 +79,7 @@ class Value extends TObject { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn diff --git a/python/ql/lib/semmle/python/security/dataflow/ChainedConfigs12.qll b/python/ql/lib/semmle/python/security/dataflow/ChainedConfigs12.qll index ea2af4f8e8d..241ec52c7d0 100644 --- a/python/ql/lib/semmle/python/security/dataflow/ChainedConfigs12.qll +++ b/python/ql/lib/semmle/python/security/dataflow/ChainedConfigs12.qll @@ -46,7 +46,7 @@ class CustomPathNode extends TCustomPathNode { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn diff --git a/python/ql/lib/semmle/python/types/Object.qll b/python/ql/lib/semmle/python/types/Object.qll index a9e360080ce..9b5472af69a 100644 --- a/python/ql/lib/semmle/python/types/Object.qll +++ b/python/ql/lib/semmle/python/types/Object.qll @@ -69,7 +69,7 @@ class Object extends @py_object { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn diff --git a/python/ql/lib/semmle/python/xml/XML.qll b/python/ql/lib/semmle/python/xml/XML.qll index 5871fed0ddd..4c762f4bf65 100755 --- a/python/ql/lib/semmle/python/xml/XML.qll +++ b/python/ql/lib/semmle/python/xml/XML.qll @@ -24,7 +24,7 @@ class XMLLocatable extends @xmllocatable, TXMLLocatable { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn diff --git a/python/ql/src/Lexical/CommentedOutCode.qll b/python/ql/src/Lexical/CommentedOutCode.qll index 97315321a79..f0db1180231 100644 --- a/python/ql/src/Lexical/CommentedOutCode.qll +++ b/python/ql/src/Lexical/CommentedOutCode.qll @@ -197,7 +197,7 @@ class CommentedOutCodeBlock extends @py_comment { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn diff --git a/python/ql/src/Metrics/Internal/Extents.qll b/python/ql/src/Metrics/Internal/Extents.qll index 1e38a4d544d..9ebe86deb36 100644 --- a/python/ql/src/Metrics/Internal/Extents.qll +++ b/python/ql/src/Metrics/Internal/Extents.qll @@ -20,7 +20,7 @@ class RangeFunction extends Function { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn @@ -40,7 +40,7 @@ class RangeClass extends Class { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn diff --git a/python/ql/src/analysis/AlertSuppression.ql b/python/ql/src/analysis/AlertSuppression.ql index c8fefc92cc1..9515c0aad8b 100644 --- a/python/ql/src/analysis/AlertSuppression.ql +++ b/python/ql/src/analysis/AlertSuppression.ql @@ -88,7 +88,7 @@ class SuppressionScope extends @py_comment { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn diff --git a/python/ql/src/analysis/DefinitionTracking.qll b/python/ql/src/analysis/DefinitionTracking.qll index 72dfb6e849c..b64f131e5bc 100644 --- a/python/ql/src/analysis/DefinitionTracking.qll +++ b/python/ql/src/analysis/DefinitionTracking.qll @@ -477,7 +477,7 @@ class NiceLocationExpr extends @py_expr { * The location spans column `bc` of line `bl` to * column `ec` of line `el` in file `f`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo(string f, int bl, int bc, int el, int ec) { /* Attribute location for x.y is that of 'y' so that url does not overlap with that of 'x' */ diff --git a/python/ql/src/external/DefectFilter.qll b/python/ql/src/external/DefectFilter.qll index 62704b9fd0e..1421c6bb475 100644 --- a/python/ql/src/external/DefectFilter.qll +++ b/python/ql/src/external/DefectFilter.qll @@ -8,7 +8,7 @@ import semmle.python.Files * column `startcol` of line `startline` to column `endcol` of line `endline` * in file `filepath`. * - * For more information, see [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * For more information, see [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ external predicate defectResults( int id, string queryPath, string filepath, int startline, int startcol, int endline, int endcol, @@ -54,7 +54,7 @@ class DefectResult extends int { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn diff --git a/python/ql/src/external/Thrift.qll b/python/ql/src/external/Thrift.qll index f9f8d67701d..8ea9a7dc87f 100644 --- a/python/ql/src/external/Thrift.qll +++ b/python/ql/src/external/Thrift.qll @@ -38,7 +38,7 @@ class ThriftElement extends ExternalData { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn From ba990f72f25d7bb6d3742efba4d1916bff9eaac9 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Wed, 29 Sep 2021 14:00:28 +0200 Subject: [PATCH 661/741] Another `hasLocationInfo` URL reference fix --- python/ql/lib/semmle/python/ApiGraphs.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/ql/lib/semmle/python/ApiGraphs.qll b/python/ql/lib/semmle/python/ApiGraphs.qll index 19a287df63a..62afe4ef865 100644 --- a/python/ql/lib/semmle/python/ApiGraphs.qll +++ b/python/ql/lib/semmle/python/ApiGraphs.qll @@ -142,7 +142,7 @@ module API { * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see - * [Locations](https://help.semmle.com/QL/learn-ql/locations.html). + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn From 3ae5f13c3dbb3dc012b11a65d8fc2c683159abb1 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Wed, 29 Sep 2021 15:44:21 +0100 Subject: [PATCH 662/741] Generate tests and stubs --- .../code/java/frameworks/android/Intent.qll | 2 +- .../frameworks/android/intent/Test.java | 1316 +++++++++++++++++ .../frameworks/android/intent/models.csv | 114 ++ .../frameworks/android/intent/options | 1 + .../frameworks/android/intent/test.expected | 0 .../frameworks/android/intent/test.ql | 17 + .../android/android/accounts/Account.java | 21 + .../android/content/BroadcastReceiver.java | 292 +--- .../android/android/content/ClipData.java | 51 + .../android/content/ClipDescription.java | 32 + .../android/content/ComponentCallbacks.java | 11 + .../android/content/ComponentCallbacks2.java | 17 + .../android/content/ComponentName.java | 35 + .../android/content/ContentProvider.java | 85 +- .../content/ContentProviderClient.java | 49 + .../content/ContentProviderOperation.java | 58 + .../content/ContentProviderResult.java | 26 + .../android/content/ContentResolver.java | 163 +- .../android/content/ContentValues.java | 47 +- .../android/android/content/Context.java | 262 +++- .../stubs/android/android/content/Intent.java | 641 +++++--- .../android/android/content/IntentFilter.java | 104 ++ .../android/android/content/IntentSender.java | 40 + .../android/android/content/PeriodicSync.java | 23 + .../android/content/ServiceConnection.java | 14 + .../android/content/SharedPreferences.java | 38 + .../android/content/SyncAdapterType.java | 28 + .../android/android/content/SyncInfo.java | 16 + .../android/android/content/SyncRequest.java | 13 + .../android/content/SyncStatusObserver.java | 9 + .../android/content/UriPermission.java | 20 + .../android/content/pm/ActivityInfo.java | 112 ++ .../android/content/pm/ApplicationInfo.java | 101 ++ .../android/content/pm/ChangedPackages.java | 18 + .../android/content/pm/ComponentInfo.java | 29 + .../android/content/pm/ConfigurationInfo.java | 25 + .../android/content/pm/FeatureGroupInfo.java | 17 + .../android/content/pm/FeatureInfo.java | 23 + .../android/content/pm/InstallSourceInfo.java | 18 + .../content/pm/InstrumentationInfo.java | 27 + .../android/content/pm/ModuleInfo.java | 19 + .../android/content/pm/PackageInfo.java | 59 + .../android/content/pm/PackageInstaller.java | 151 ++ .../android/content/pm/PackageItemInfo.java | 34 + .../android/content/pm/PackageManager.java | 331 +++++ .../android/content/pm/PathPermission.java | 18 + .../content/pm/PermissionGroupInfo.java | 24 + .../android/content/pm/PermissionInfo.java | 48 + .../android/content/pm/ProviderInfo.java | 33 + .../android/content/pm/ResolveInfo.java | 42 + .../android/content/pm/ServiceInfo.java | 37 + .../android/content/pm/SharedLibraryInfo.java | 26 + .../android/android/content/pm/Signature.java | 22 + .../android/content/pm/SigningInfo.java | 20 + .../android/content/pm/VersionedPackage.java | 22 + .../content/res/AssetFileDescriptor.java | 33 + .../android/content/res/AssetManager.java | 26 + .../android/content/res/ColorStateList.java | 27 + .../android/content/res/Configuration.java | 130 ++ .../android/content/res/Resources.java | 105 ++ .../android/content/res/TypedArray.java | 46 + .../content/res/XmlResourceParser.java | 12 + .../content/res/loader/AssetsProvider.java | 10 + .../content/res/loader/ResourcesLoader.java | 16 + .../content/res/loader/ResourcesProvider.java | 21 + .../android/database/CharArrayBuffer.java | 13 + .../android/database/ContentObserver.java | 22 + .../android/android/database/Cursor.java | 61 +- .../android/database/DataSetObserver.java | 11 + .../database/DatabaseErrorHandler.java | 10 + .../database/sqlite/SQLiteClosable.java | 16 + .../database/sqlite/SQLiteCursorDriver.java | 15 + .../database/sqlite/SQLiteDatabase.java | 171 ++- .../database/sqlite/SQLiteProgram.java | 18 + .../android/database/sqlite/SQLiteQuery.java | 10 + .../database/sqlite/SQLiteStatement.java | 17 + .../sqlite/SQLiteTransactionListener.java | 11 + .../android/android/graphics/Bitmap.java | 97 ++ .../android/graphics/BitmapFactory.java | 54 + .../android/android/graphics/BlendMode.java | 10 + .../android/android/graphics/Canvas.java | 141 ++ .../stubs/android/android/graphics/Color.java | 80 + .../android/android/graphics/ColorFilter.java | 9 + .../android/android/graphics/ColorSpace.java | 120 ++ .../android/android/graphics/DrawFilter.java | 10 + .../android/android/graphics/Insets.java | 29 + .../android/android/graphics/MaskFilter.java | 10 + .../android/android/graphics/Matrix.java | 74 + .../stubs/android/android/graphics/Movie.java | 23 + .../android/android/graphics/NinePatch.java | 31 + .../android/android/graphics/Outline.java | 29 + .../stubs/android/android/graphics/Paint.java | 212 +++ .../stubs/android/android/graphics/Path.java | 73 + .../android/android/graphics/PathEffect.java | 10 + .../android/android/graphics/Picture.java | 18 + .../stubs/android/android/graphics/Point.java | 26 + .../android/android/graphics/PorterDuff.java | 14 + .../android/graphics/RecordingCanvas.java | 82 + .../stubs/android/android/graphics/Rect.java | 52 + .../stubs/android/android/graphics/RectF.java | 53 + .../android/android/graphics/Region.java | 53 + .../android/android/graphics/RenderNode.java | 82 + .../android/android/graphics/Shader.java | 12 + .../android/android/graphics/Typeface.java | 33 + .../android/android/graphics/Xfermode.java | 9 + .../android/graphics/drawable/Drawable.java | 111 ++ .../android/graphics/drawable/Icon.java | 55 + .../android/graphics/text/MeasuredText.java | 13 + .../android/hardware/HardwareBuffer.java | 50 + .../android/android/icu/util/ULocale.java | 138 ++ .../test/stubs/android/android/net/Uri.java | 73 +- .../stubs/android/android/os/BaseBundle.java | 43 + .../test/stubs/android/android/os/Bundle.java | 163 +- .../android/os/CancellationSignal.java | 14 +- .../stubs/android/android/os/Handler.java | 53 + .../stubs/android/android/os/IBinder.java | 33 + .../stubs/android/android/os/IInterface.java | 10 + .../stubs/android/android/os/LocaleList.java | 32 + .../test/stubs/android/android/os/Looper.java | 25 + .../stubs/android/android/os/Message.java | 44 + .../android/android/os/MessageQueue.java | 26 + .../stubs/android/android/os/Messenger.java | 25 + .../test/stubs/android/android/os/Parcel.java | 146 ++ .../android/os/ParcelFileDescriptor.java | 55 +- .../stubs/android/android/os/Parcelable.java | 18 + .../android/android/os/PatternMatcher.java | 24 + .../android/android/os/PersistableBundle.java | 27 + .../stubs/android/android/os/UserHandle.java | 21 + .../android/util/AndroidException.java | 12 + .../stubs/android/android/util/ArrayMap.java | 40 + .../android/android/util/AttributeSet.java | 95 +- .../android/android/util/DisplayMetrics.java | 46 + .../test/stubs/android/android/util/Pair.java | 16 + .../stubs/android/android/util/Printer.java | 9 + .../test/stubs/android/android/util/Size.java | 16 + .../stubs/android/android/util/SizeF.java | 16 + .../android/android/util/SparseArray.java | 28 + .../android/util/SparseBooleanArray.java | 27 + .../android/android/util/TypedValue.java | 73 + .../stubs/android/android/view/Display.java | 89 ++ .../android/android/view/DisplayCutout.java | 28 + .../android/org/xmlpull/v1/XmlPullParser.java | 64 + .../android/org/xmlpull/v1/XmlSerializer.java | 35 + 143 files changed, 8174 insertions(+), 667 deletions(-) create mode 100644 java/ql/test/library-tests/frameworks/android/intent/Test.java create mode 100644 java/ql/test/library-tests/frameworks/android/intent/models.csv create mode 100644 java/ql/test/library-tests/frameworks/android/intent/options create mode 100644 java/ql/test/library-tests/frameworks/android/intent/test.expected create mode 100644 java/ql/test/library-tests/frameworks/android/intent/test.ql create mode 100644 java/ql/test/stubs/android/android/accounts/Account.java create mode 100644 java/ql/test/stubs/android/android/content/ClipData.java create mode 100644 java/ql/test/stubs/android/android/content/ClipDescription.java create mode 100644 java/ql/test/stubs/android/android/content/ComponentCallbacks.java create mode 100644 java/ql/test/stubs/android/android/content/ComponentCallbacks2.java create mode 100644 java/ql/test/stubs/android/android/content/ComponentName.java create mode 100644 java/ql/test/stubs/android/android/content/ContentProviderClient.java create mode 100644 java/ql/test/stubs/android/android/content/ContentProviderOperation.java create mode 100644 java/ql/test/stubs/android/android/content/ContentProviderResult.java create mode 100644 java/ql/test/stubs/android/android/content/IntentFilter.java create mode 100644 java/ql/test/stubs/android/android/content/IntentSender.java create mode 100644 java/ql/test/stubs/android/android/content/PeriodicSync.java create mode 100644 java/ql/test/stubs/android/android/content/ServiceConnection.java create mode 100644 java/ql/test/stubs/android/android/content/SharedPreferences.java create mode 100644 java/ql/test/stubs/android/android/content/SyncAdapterType.java create mode 100644 java/ql/test/stubs/android/android/content/SyncInfo.java create mode 100644 java/ql/test/stubs/android/android/content/SyncRequest.java create mode 100644 java/ql/test/stubs/android/android/content/SyncStatusObserver.java create mode 100644 java/ql/test/stubs/android/android/content/UriPermission.java create mode 100644 java/ql/test/stubs/android/android/content/pm/ActivityInfo.java create mode 100644 java/ql/test/stubs/android/android/content/pm/ApplicationInfo.java create mode 100644 java/ql/test/stubs/android/android/content/pm/ChangedPackages.java create mode 100644 java/ql/test/stubs/android/android/content/pm/ComponentInfo.java create mode 100644 java/ql/test/stubs/android/android/content/pm/ConfigurationInfo.java create mode 100644 java/ql/test/stubs/android/android/content/pm/FeatureGroupInfo.java create mode 100644 java/ql/test/stubs/android/android/content/pm/FeatureInfo.java create mode 100644 java/ql/test/stubs/android/android/content/pm/InstallSourceInfo.java create mode 100644 java/ql/test/stubs/android/android/content/pm/InstrumentationInfo.java create mode 100644 java/ql/test/stubs/android/android/content/pm/ModuleInfo.java create mode 100644 java/ql/test/stubs/android/android/content/pm/PackageInfo.java create mode 100644 java/ql/test/stubs/android/android/content/pm/PackageInstaller.java create mode 100644 java/ql/test/stubs/android/android/content/pm/PackageItemInfo.java create mode 100644 java/ql/test/stubs/android/android/content/pm/PackageManager.java create mode 100644 java/ql/test/stubs/android/android/content/pm/PathPermission.java create mode 100644 java/ql/test/stubs/android/android/content/pm/PermissionGroupInfo.java create mode 100644 java/ql/test/stubs/android/android/content/pm/PermissionInfo.java create mode 100644 java/ql/test/stubs/android/android/content/pm/ProviderInfo.java create mode 100644 java/ql/test/stubs/android/android/content/pm/ResolveInfo.java create mode 100644 java/ql/test/stubs/android/android/content/pm/ServiceInfo.java create mode 100644 java/ql/test/stubs/android/android/content/pm/SharedLibraryInfo.java create mode 100644 java/ql/test/stubs/android/android/content/pm/Signature.java create mode 100644 java/ql/test/stubs/android/android/content/pm/SigningInfo.java create mode 100644 java/ql/test/stubs/android/android/content/pm/VersionedPackage.java create mode 100644 java/ql/test/stubs/android/android/content/res/AssetFileDescriptor.java create mode 100644 java/ql/test/stubs/android/android/content/res/AssetManager.java create mode 100644 java/ql/test/stubs/android/android/content/res/ColorStateList.java create mode 100644 java/ql/test/stubs/android/android/content/res/Configuration.java create mode 100644 java/ql/test/stubs/android/android/content/res/Resources.java create mode 100644 java/ql/test/stubs/android/android/content/res/TypedArray.java create mode 100644 java/ql/test/stubs/android/android/content/res/XmlResourceParser.java create mode 100644 java/ql/test/stubs/android/android/content/res/loader/AssetsProvider.java create mode 100644 java/ql/test/stubs/android/android/content/res/loader/ResourcesLoader.java create mode 100644 java/ql/test/stubs/android/android/content/res/loader/ResourcesProvider.java create mode 100644 java/ql/test/stubs/android/android/database/CharArrayBuffer.java create mode 100644 java/ql/test/stubs/android/android/database/ContentObserver.java create mode 100644 java/ql/test/stubs/android/android/database/DataSetObserver.java create mode 100644 java/ql/test/stubs/android/android/database/DatabaseErrorHandler.java create mode 100644 java/ql/test/stubs/android/android/database/sqlite/SQLiteClosable.java create mode 100644 java/ql/test/stubs/android/android/database/sqlite/SQLiteCursorDriver.java create mode 100644 java/ql/test/stubs/android/android/database/sqlite/SQLiteProgram.java create mode 100644 java/ql/test/stubs/android/android/database/sqlite/SQLiteQuery.java create mode 100644 java/ql/test/stubs/android/android/database/sqlite/SQLiteStatement.java create mode 100644 java/ql/test/stubs/android/android/database/sqlite/SQLiteTransactionListener.java create mode 100644 java/ql/test/stubs/android/android/graphics/Bitmap.java create mode 100644 java/ql/test/stubs/android/android/graphics/BitmapFactory.java create mode 100644 java/ql/test/stubs/android/android/graphics/BlendMode.java create mode 100644 java/ql/test/stubs/android/android/graphics/Canvas.java create mode 100644 java/ql/test/stubs/android/android/graphics/Color.java create mode 100644 java/ql/test/stubs/android/android/graphics/ColorFilter.java create mode 100644 java/ql/test/stubs/android/android/graphics/ColorSpace.java create mode 100644 java/ql/test/stubs/android/android/graphics/DrawFilter.java create mode 100644 java/ql/test/stubs/android/android/graphics/Insets.java create mode 100644 java/ql/test/stubs/android/android/graphics/MaskFilter.java create mode 100644 java/ql/test/stubs/android/android/graphics/Matrix.java create mode 100644 java/ql/test/stubs/android/android/graphics/Movie.java create mode 100644 java/ql/test/stubs/android/android/graphics/NinePatch.java create mode 100644 java/ql/test/stubs/android/android/graphics/Outline.java create mode 100644 java/ql/test/stubs/android/android/graphics/Paint.java create mode 100644 java/ql/test/stubs/android/android/graphics/Path.java create mode 100644 java/ql/test/stubs/android/android/graphics/PathEffect.java create mode 100644 java/ql/test/stubs/android/android/graphics/Picture.java create mode 100644 java/ql/test/stubs/android/android/graphics/Point.java create mode 100644 java/ql/test/stubs/android/android/graphics/PorterDuff.java create mode 100644 java/ql/test/stubs/android/android/graphics/RecordingCanvas.java create mode 100644 java/ql/test/stubs/android/android/graphics/Rect.java create mode 100644 java/ql/test/stubs/android/android/graphics/RectF.java create mode 100644 java/ql/test/stubs/android/android/graphics/Region.java create mode 100644 java/ql/test/stubs/android/android/graphics/RenderNode.java create mode 100644 java/ql/test/stubs/android/android/graphics/Shader.java create mode 100644 java/ql/test/stubs/android/android/graphics/Typeface.java create mode 100644 java/ql/test/stubs/android/android/graphics/Xfermode.java create mode 100644 java/ql/test/stubs/android/android/graphics/drawable/Drawable.java create mode 100644 java/ql/test/stubs/android/android/graphics/drawable/Icon.java create mode 100644 java/ql/test/stubs/android/android/graphics/text/MeasuredText.java create mode 100644 java/ql/test/stubs/android/android/hardware/HardwareBuffer.java create mode 100644 java/ql/test/stubs/android/android/icu/util/ULocale.java create mode 100644 java/ql/test/stubs/android/android/os/BaseBundle.java create mode 100644 java/ql/test/stubs/android/android/os/Handler.java create mode 100644 java/ql/test/stubs/android/android/os/IBinder.java create mode 100644 java/ql/test/stubs/android/android/os/IInterface.java create mode 100644 java/ql/test/stubs/android/android/os/LocaleList.java create mode 100644 java/ql/test/stubs/android/android/os/Looper.java create mode 100644 java/ql/test/stubs/android/android/os/Message.java create mode 100644 java/ql/test/stubs/android/android/os/MessageQueue.java create mode 100644 java/ql/test/stubs/android/android/os/Messenger.java create mode 100644 java/ql/test/stubs/android/android/os/Parcel.java create mode 100644 java/ql/test/stubs/android/android/os/Parcelable.java create mode 100644 java/ql/test/stubs/android/android/os/PatternMatcher.java create mode 100644 java/ql/test/stubs/android/android/os/PersistableBundle.java create mode 100644 java/ql/test/stubs/android/android/os/UserHandle.java create mode 100644 java/ql/test/stubs/android/android/util/AndroidException.java create mode 100644 java/ql/test/stubs/android/android/util/ArrayMap.java create mode 100644 java/ql/test/stubs/android/android/util/DisplayMetrics.java create mode 100644 java/ql/test/stubs/android/android/util/Pair.java create mode 100644 java/ql/test/stubs/android/android/util/Printer.java create mode 100644 java/ql/test/stubs/android/android/util/Size.java create mode 100644 java/ql/test/stubs/android/android/util/SizeF.java create mode 100644 java/ql/test/stubs/android/android/util/SparseArray.java create mode 100644 java/ql/test/stubs/android/android/util/SparseBooleanArray.java create mode 100644 java/ql/test/stubs/android/android/util/TypedValue.java create mode 100644 java/ql/test/stubs/android/android/view/Display.java create mode 100644 java/ql/test/stubs/android/android/view/DisplayCutout.java create mode 100644 java/ql/test/stubs/android/org/xmlpull/v1/XmlPullParser.java create mode 100644 java/ql/test/stubs/android/org/xmlpull/v1/XmlSerializer.java diff --git a/java/ql/lib/semmle/code/java/frameworks/android/Intent.qll b/java/ql/lib/semmle/code/java/frameworks/android/Intent.qll index edb981cff8e..77c45b1e6f2 100644 --- a/java/ql/lib/semmle/code/java/frameworks/android/Intent.qll +++ b/java/ql/lib/semmle/code/java/frameworks/android/Intent.qll @@ -127,7 +127,7 @@ private class IntentBundleFlowSteps extends SummaryModelCsv { "android.os;Bundle;true;putShortArray;;;Argument[0];MapKey of Argument[-1];value", "android.os;Bundle;true;putSize;;;Argument[0];MapKey of Argument[-1];value", "android.os;Bundle;true;putSizeF;;;Argument[0];MapKey of Argument[-1];value", - "android.os;Bundle;true;putSparceParcelableArray;;;Argument[0];MapKey of Argument[-1];value", + "android.os;Bundle;true;putSparseParcelableArray;;;Argument[0];MapKey of Argument[-1];value", "android.os;Bundle;true;putSparseParcelableArray;;;Argument[1];MapValue of Argument[-1];value", "android.os;Bundle;true;putStringArrayList;;;Argument[0];MapKey of Argument[-1];value", "android.os;Bundle;true;putStringArrayList;;;Argument[1];MapValue of Argument[-1];value", diff --git a/java/ql/test/library-tests/frameworks/android/intent/Test.java b/java/ql/test/library-tests/frameworks/android/intent/Test.java new file mode 100644 index 00000000000..525986aeb45 --- /dev/null +++ b/java/ql/test/library-tests/frameworks/android/intent/Test.java @@ -0,0 +1,1316 @@ +package generatedtest; + +import android.content.Intent; +import android.os.BaseBundle; +import android.os.Bundle; +import android.os.IBinder; +import android.os.Parcel; +import android.os.Parcelable; +import android.os.PersistableBundle; +import android.util.SparseArray; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.Set; + +// Test case generated by GenerateFlowTestCase.ql +public class Test { + + T getElement(Iterable it) { return it.iterator().next(); } + Object getIntent_extrasDefault(Object container) { return null; } + Object getMapKeyDefault(Object container) { return null; } + Object getMapValueDefault(Object container) { return null; } + Object newWithIntent_extrasDefault(Object element) { return null; } + Object newWithMapKeyDefault(Object element) { return null; } + Object newWithMapValueDefault(Object element) { return null; } + Object source() { return null; } + void sink(Object o) { } + + public void test() throws Exception { + + { + // "android.content;Intent;true;getBundleExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value" + Bundle out = null; + Intent in = (Intent)newWithIntent_extrasDefault(newWithMapValueDefault(source())); + out = in.getBundleExtra(null); + sink(out); // $ hasValueFlow + } + { + // "android.content;Intent;true;getByteArrayExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value" + byte[] out = null; + Intent in = (Intent)newWithIntent_extrasDefault(newWithMapValueDefault(source())); + out = in.getByteArrayExtra(null); + sink(out); // $ hasValueFlow + } + { + // "android.content;Intent;true;getCharArrayExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value" + char[] out = null; + Intent in = (Intent)newWithIntent_extrasDefault(newWithMapValueDefault(source())); + out = in.getCharArrayExtra(null); + sink(out); // $ hasValueFlow + } + { + // "android.content;Intent;true;getCharSequenceArrayExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value" + CharSequence[] out = null; + Intent in = (Intent)newWithIntent_extrasDefault(newWithMapValueDefault(source())); + out = in.getCharSequenceArrayExtra(null); + sink(out); // $ hasValueFlow + } + { + // "android.content;Intent;true;getCharSequenceArrayListExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value" + ArrayList out = null; + Intent in = (Intent)newWithIntent_extrasDefault(newWithMapValueDefault(source())); + out = in.getCharSequenceArrayListExtra(null); + sink(out); // $ hasValueFlow + } + { + // "android.content;Intent;true;getCharSequenceExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value" + CharSequence out = null; + Intent in = (Intent)newWithIntent_extrasDefault(newWithMapValueDefault(source())); + out = in.getCharSequenceExtra(null); + sink(out); // $ hasValueFlow + } + { + // "android.content;Intent;true;getExtras;();;SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value" + Bundle out = null; + Intent in = (Intent)newWithIntent_extrasDefault(source()); + out = in.getExtras(); + sink(out); // $ hasValueFlow + } + { + // "android.content;Intent;true;getParcelableArrayExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value" + Parcelable[] out = null; + Intent in = (Intent)newWithIntent_extrasDefault(newWithMapValueDefault(source())); + out = in.getParcelableArrayExtra(null); + sink(out); // $ hasValueFlow + } + { + // "android.content;Intent;true;getParcelableArrayListExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value" + ArrayList out = null; + Intent in = (Intent)newWithIntent_extrasDefault(newWithMapValueDefault(source())); + out = in.getParcelableArrayListExtra(null); + sink(out); // $ hasValueFlow + } + { + // "android.content;Intent;true;getParcelableExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value" + Parcelable out = null; + Intent in = (Intent)newWithIntent_extrasDefault(newWithMapValueDefault(source())); + out = in.getParcelableExtra(null); + sink(out); // $ hasValueFlow + } + { + // "android.content;Intent;true;getSerializableExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value" + Serializable out = null; + Intent in = (Intent)newWithIntent_extrasDefault(newWithMapValueDefault(source())); + out = in.getSerializableExtra(null); + sink(out); // $ hasValueFlow + } + { + // "android.content;Intent;true;getStringArrayExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value" + String[] out = null; + Intent in = (Intent)newWithIntent_extrasDefault(newWithMapValueDefault(source())); + out = in.getStringArrayExtra(null); + sink(out); // $ hasValueFlow + } + { + // "android.content;Intent;true;getStringArrayListExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value" + ArrayList out = null; + Intent in = (Intent)newWithIntent_extrasDefault(newWithMapValueDefault(source())); + out = in.getStringArrayListExtra(null); + sink(out); // $ hasValueFlow + } + { + // "android.content;Intent;true;getStringExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value" + String out = null; + Intent in = (Intent)newWithIntent_extrasDefault(newWithMapValueDefault(source())); + out = in.getStringExtra(null); + sink(out); // $ hasValueFlow + } + { + // "android.content;Intent;true;putCharSequenceArrayListExtra;;;Argument[-1];ReturnValue;value" + Intent out = null; + Intent in = (Intent)source(); + out = in.putCharSequenceArrayListExtra(null, null); + sink(out); // $ hasValueFlow + } + { + // "android.content;Intent;true;putCharSequenceArrayListExtra;;;Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value" + Intent out = null; + String in = (String)source(); + out.putCharSequenceArrayListExtra(in, null); + sink(getMapKeyDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + } + { + // "android.content;Intent;true;putCharSequenceArrayListExtra;;;Argument[1];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value" + Intent out = null; + ArrayList in = (ArrayList)source(); + out.putCharSequenceArrayListExtra(null, in); + sink(getMapValueDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + } + { + // "android.content;Intent;true;putExtra;;;Argument[-1];ReturnValue;value" + Intent out = null; + Intent in = (Intent)source(); + out = in.putExtra((String)null, false); + sink(out); // $ hasValueFlow + } + { + // "android.content;Intent;true;putExtra;;;Argument[-1];ReturnValue;value" + Intent out = null; + Intent in = (Intent)source(); + out = in.putExtra((String)null, 0L); + sink(out); // $ hasValueFlow + } + { + // "android.content;Intent;true;putExtra;;;Argument[-1];ReturnValue;value" + Intent out = null; + Intent in = (Intent)source(); + out = in.putExtra((String)null, 0.0f); + sink(out); // $ hasValueFlow + } + { + // "android.content;Intent;true;putExtra;;;Argument[-1];ReturnValue;value" + Intent out = null; + Intent in = (Intent)source(); + out = in.putExtra((String)null, 0.0); + sink(out); // $ hasValueFlow + } + { + // "android.content;Intent;true;putExtra;;;Argument[-1];ReturnValue;value" + Intent out = null; + Intent in = (Intent)source(); + out = in.putExtra((String)null, 0); + sink(out); // $ hasValueFlow + } + { + // "android.content;Intent;true;putExtra;;;Argument[-1];ReturnValue;value" + Intent out = null; + Intent in = (Intent)source(); + out = in.putExtra((String)null, (short[])null); + sink(out); // $ hasValueFlow + } + { + // "android.content;Intent;true;putExtra;;;Argument[-1];ReturnValue;value" + Intent out = null; + Intent in = (Intent)source(); + out = in.putExtra((String)null, (short)0); + sink(out); // $ hasValueFlow + } + { + // "android.content;Intent;true;putExtra;;;Argument[-1];ReturnValue;value" + Intent out = null; + Intent in = (Intent)source(); + out = in.putExtra((String)null, (long[])null); + sink(out); // $ hasValueFlow + } + { + // "android.content;Intent;true;putExtra;;;Argument[-1];ReturnValue;value" + Intent out = null; + Intent in = (Intent)source(); + out = in.putExtra((String)null, (int[])null); + sink(out); // $ hasValueFlow + } + { + // "android.content;Intent;true;putExtra;;;Argument[-1];ReturnValue;value" + Intent out = null; + Intent in = (Intent)source(); + out = in.putExtra((String)null, (float[])null); + sink(out); // $ hasValueFlow + } + { + // "android.content;Intent;true;putExtra;;;Argument[-1];ReturnValue;value" + Intent out = null; + Intent in = (Intent)source(); + out = in.putExtra((String)null, (double[])null); + sink(out); // $ hasValueFlow + } + { + // "android.content;Intent;true;putExtra;;;Argument[-1];ReturnValue;value" + Intent out = null; + Intent in = (Intent)source(); + out = in.putExtra((String)null, (char[])null); + sink(out); // $ hasValueFlow + } + { + // "android.content;Intent;true;putExtra;;;Argument[-1];ReturnValue;value" + Intent out = null; + Intent in = (Intent)source(); + out = in.putExtra((String)null, (byte[])null); + sink(out); // $ hasValueFlow + } + { + // "android.content;Intent;true;putExtra;;;Argument[-1];ReturnValue;value" + Intent out = null; + Intent in = (Intent)source(); + out = in.putExtra((String)null, (byte)0); + sink(out); // $ hasValueFlow + } + { + // "android.content;Intent;true;putExtra;;;Argument[-1];ReturnValue;value" + Intent out = null; + Intent in = (Intent)source(); + out = in.putExtra((String)null, (boolean[])null); + sink(out); // $ hasValueFlow + } + { + // "android.content;Intent;true;putExtra;;;Argument[-1];ReturnValue;value" + Intent out = null; + Intent in = (Intent)source(); + out = in.putExtra((String)null, (String[])null); + sink(out); // $ hasValueFlow + } + { + // "android.content;Intent;true;putExtra;;;Argument[-1];ReturnValue;value" + Intent out = null; + Intent in = (Intent)source(); + out = in.putExtra((String)null, (String)null); + sink(out); // $ hasValueFlow + } + { + // "android.content;Intent;true;putExtra;;;Argument[-1];ReturnValue;value" + Intent out = null; + Intent in = (Intent)source(); + out = in.putExtra((String)null, (Serializable)null); + sink(out); // $ hasValueFlow + } + { + // "android.content;Intent;true;putExtra;;;Argument[-1];ReturnValue;value" + Intent out = null; + Intent in = (Intent)source(); + out = in.putExtra((String)null, (Parcelable[])null); + sink(out); // $ hasValueFlow + } + { + // "android.content;Intent;true;putExtra;;;Argument[-1];ReturnValue;value" + Intent out = null; + Intent in = (Intent)source(); + out = in.putExtra((String)null, (Parcelable)null); + sink(out); // $ hasValueFlow + } + { + // "android.content;Intent;true;putExtra;;;Argument[-1];ReturnValue;value" + Intent out = null; + Intent in = (Intent)source(); + out = in.putExtra((String)null, (CharSequence[])null); + sink(out); // $ hasValueFlow + } + { + // "android.content;Intent;true;putExtra;;;Argument[-1];ReturnValue;value" + Intent out = null; + Intent in = (Intent)source(); + out = in.putExtra((String)null, (CharSequence)null); + sink(out); // $ hasValueFlow + } + { + // "android.content;Intent;true;putExtra;;;Argument[-1];ReturnValue;value" + Intent out = null; + Intent in = (Intent)source(); + out = in.putExtra((String)null, (Bundle)null); + sink(out); // $ hasValueFlow + } + { + // "android.content;Intent;true;putExtra;;;Argument[-1];ReturnValue;value" + Intent out = null; + Intent in = (Intent)source(); + out = in.putExtra((String)null, '\0'); + sink(out); // $ hasValueFlow + } + { + // "android.content;Intent;true;putExtra;;;Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value" + Intent out = null; + String in = (String)source(); + out.putExtra(in, false); + sink(getMapKeyDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + } + { + // "android.content;Intent;true;putExtra;;;Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value" + Intent out = null; + String in = (String)source(); + out.putExtra(in, 0L); + sink(getMapKeyDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + } + { + // "android.content;Intent;true;putExtra;;;Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value" + Intent out = null; + String in = (String)source(); + out.putExtra(in, 0.0f); + sink(getMapKeyDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + } + { + // "android.content;Intent;true;putExtra;;;Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value" + Intent out = null; + String in = (String)source(); + out.putExtra(in, 0.0); + sink(getMapKeyDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + } + { + // "android.content;Intent;true;putExtra;;;Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value" + Intent out = null; + String in = (String)source(); + out.putExtra(in, 0); + sink(getMapKeyDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + } + { + // "android.content;Intent;true;putExtra;;;Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value" + Intent out = null; + String in = (String)source(); + out.putExtra(in, (short[])null); + sink(getMapKeyDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + } + { + // "android.content;Intent;true;putExtra;;;Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value" + Intent out = null; + String in = (String)source(); + out.putExtra(in, (short)0); + sink(getMapKeyDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + } + { + // "android.content;Intent;true;putExtra;;;Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value" + Intent out = null; + String in = (String)source(); + out.putExtra(in, (long[])null); + sink(getMapKeyDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + } + { + // "android.content;Intent;true;putExtra;;;Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value" + Intent out = null; + String in = (String)source(); + out.putExtra(in, (int[])null); + sink(getMapKeyDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + } + { + // "android.content;Intent;true;putExtra;;;Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value" + Intent out = null; + String in = (String)source(); + out.putExtra(in, (float[])null); + sink(getMapKeyDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + } + { + // "android.content;Intent;true;putExtra;;;Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value" + Intent out = null; + String in = (String)source(); + out.putExtra(in, (double[])null); + sink(getMapKeyDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + } + { + // "android.content;Intent;true;putExtra;;;Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value" + Intent out = null; + String in = (String)source(); + out.putExtra(in, (char[])null); + sink(getMapKeyDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + } + { + // "android.content;Intent;true;putExtra;;;Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value" + Intent out = null; + String in = (String)source(); + out.putExtra(in, (byte[])null); + sink(getMapKeyDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + } + { + // "android.content;Intent;true;putExtra;;;Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value" + Intent out = null; + String in = (String)source(); + out.putExtra(in, (byte)0); + sink(getMapKeyDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + } + { + // "android.content;Intent;true;putExtra;;;Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value" + Intent out = null; + String in = (String)source(); + out.putExtra(in, (boolean[])null); + sink(getMapKeyDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + } + { + // "android.content;Intent;true;putExtra;;;Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value" + Intent out = null; + String in = (String)source(); + out.putExtra(in, (String[])null); + sink(getMapKeyDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + } + { + // "android.content;Intent;true;putExtra;;;Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value" + Intent out = null; + String in = (String)source(); + out.putExtra(in, (String)null); + sink(getMapKeyDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + } + { + // "android.content;Intent;true;putExtra;;;Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value" + Intent out = null; + String in = (String)source(); + out.putExtra(in, (Serializable)null); + sink(getMapKeyDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + } + { + // "android.content;Intent;true;putExtra;;;Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value" + Intent out = null; + String in = (String)source(); + out.putExtra(in, (Parcelable[])null); + sink(getMapKeyDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + } + { + // "android.content;Intent;true;putExtra;;;Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value" + Intent out = null; + String in = (String)source(); + out.putExtra(in, (Parcelable)null); + sink(getMapKeyDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + } + { + // "android.content;Intent;true;putExtra;;;Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value" + Intent out = null; + String in = (String)source(); + out.putExtra(in, (CharSequence[])null); + sink(getMapKeyDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + } + { + // "android.content;Intent;true;putExtra;;;Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value" + Intent out = null; + String in = (String)source(); + out.putExtra(in, (CharSequence)null); + sink(getMapKeyDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + } + { + // "android.content;Intent;true;putExtra;;;Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value" + Intent out = null; + String in = (String)source(); + out.putExtra(in, (Bundle)null); + sink(getMapKeyDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + } + { + // "android.content;Intent;true;putExtra;;;Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value" + Intent out = null; + String in = (String)source(); + out.putExtra(in, '\0'); + sink(getMapKeyDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + } + { + // "android.content;Intent;true;putExtra;;;Argument[1];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value" + Intent out = null; + short[] in = (short[])source(); + out.putExtra((String)null, in); + sink(getMapValueDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + } + { + // "android.content;Intent;true;putExtra;;;Argument[1];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value" + Intent out = null; + short in = (short)source(); + out.putExtra((String)null, in); + sink(getMapValueDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + } + { + // "android.content;Intent;true;putExtra;;;Argument[1];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value" + Intent out = null; + long[] in = (long[])source(); + out.putExtra((String)null, in); + sink(getMapValueDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + } + { + // "android.content;Intent;true;putExtra;;;Argument[1];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value" + Intent out = null; + long in = (long)source(); + out.putExtra((String)null, in); + sink(getMapValueDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + } + { + // "android.content;Intent;true;putExtra;;;Argument[1];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value" + Intent out = null; + int[] in = (int[])source(); + out.putExtra((String)null, in); + sink(getMapValueDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + } + { + // "android.content;Intent;true;putExtra;;;Argument[1];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value" + Intent out = null; + int in = (int)source(); + out.putExtra((String)null, in); + sink(getMapValueDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + } + { + // "android.content;Intent;true;putExtra;;;Argument[1];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value" + Intent out = null; + float[] in = (float[])source(); + out.putExtra((String)null, in); + sink(getMapValueDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + } + { + // "android.content;Intent;true;putExtra;;;Argument[1];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value" + Intent out = null; + float in = (float)source(); + out.putExtra((String)null, in); + sink(getMapValueDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + } + { + // "android.content;Intent;true;putExtra;;;Argument[1];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value" + Intent out = null; + double[] in = (double[])source(); + out.putExtra((String)null, in); + sink(getMapValueDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + } + { + // "android.content;Intent;true;putExtra;;;Argument[1];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value" + Intent out = null; + double in = (double)source(); + out.putExtra((String)null, in); + sink(getMapValueDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + } + { + // "android.content;Intent;true;putExtra;;;Argument[1];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value" + Intent out = null; + char[] in = (char[])source(); + out.putExtra((String)null, in); + sink(getMapValueDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + } + { + // "android.content;Intent;true;putExtra;;;Argument[1];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value" + Intent out = null; + char in = (char)source(); + out.putExtra((String)null, in); + sink(getMapValueDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + } + { + // "android.content;Intent;true;putExtra;;;Argument[1];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value" + Intent out = null; + byte[] in = (byte[])source(); + out.putExtra((String)null, in); + sink(getMapValueDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + } + { + // "android.content;Intent;true;putExtra;;;Argument[1];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value" + Intent out = null; + byte in = (byte)source(); + out.putExtra((String)null, in); + sink(getMapValueDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + } + { + // "android.content;Intent;true;putExtra;;;Argument[1];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value" + Intent out = null; + boolean[] in = (boolean[])source(); + out.putExtra((String)null, in); + sink(getMapValueDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + } + { + // "android.content;Intent;true;putExtra;;;Argument[1];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value" + Intent out = null; + boolean in = (boolean)source(); + out.putExtra((String)null, in); + sink(getMapValueDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + } + { + // "android.content;Intent;true;putExtra;;;Argument[1];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value" + Intent out = null; + String[] in = (String[])source(); + out.putExtra((String)null, in); + sink(getMapValueDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + } + { + // "android.content;Intent;true;putExtra;;;Argument[1];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value" + Intent out = null; + String in = (String)source(); + out.putExtra((String)null, in); + sink(getMapValueDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + } + { + // "android.content;Intent;true;putExtra;;;Argument[1];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value" + Intent out = null; + Serializable in = (Serializable)source(); + out.putExtra((String)null, in); + sink(getMapValueDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + } + { + // "android.content;Intent;true;putExtra;;;Argument[1];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value" + Intent out = null; + Parcelable[] in = (Parcelable[])source(); + out.putExtra((String)null, in); + sink(getMapValueDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + } + { + // "android.content;Intent;true;putExtra;;;Argument[1];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value" + Intent out = null; + Parcelable in = (Parcelable)source(); + out.putExtra((String)null, in); + sink(getMapValueDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + } + { + // "android.content;Intent;true;putExtra;;;Argument[1];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value" + Intent out = null; + CharSequence[] in = (CharSequence[])source(); + out.putExtra((String)null, in); + sink(getMapValueDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + } + { + // "android.content;Intent;true;putExtra;;;Argument[1];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value" + Intent out = null; + CharSequence in = (CharSequence)source(); + out.putExtra((String)null, in); + sink(getMapValueDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + } + { + // "android.content;Intent;true;putExtra;;;Argument[1];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value" + Intent out = null; + Bundle in = (Bundle)source(); + out.putExtra((String)null, in); + sink(getMapValueDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + } + { + // "android.content;Intent;true;putExtras;(Bundle);;Argument[-1];ReturnValue;value" + Intent out = null; + Intent in = (Intent)source(); + out = in.putExtras((Bundle)null); + sink(out); // $ hasValueFlow + } + { + // "android.content;Intent;true;putExtras;(Bundle);;MapKey of Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value" + Intent out = null; + Bundle in = (Bundle)newWithMapKeyDefault(source()); + out.putExtras(in); + sink(getMapKeyDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + } + { + // "android.content;Intent;true;putExtras;(Bundle);;MapValue of Argument[0];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value" + Intent out = null; + Bundle in = (Bundle)newWithMapValueDefault(source()); + out.putExtras(in); + sink(getMapValueDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + } + { + // "android.content;Intent;true;putExtras;(Intent);;Argument[-1];ReturnValue;value" + Intent out = null; + Intent in = (Intent)source(); + out = in.putExtras((Intent)null); + sink(out); // $ hasValueFlow + } + { + // "android.content;Intent;true;putExtras;(Intent);;MapKey of SyntheticField[android.content.Intent.extras] of Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value" + Intent out = null; + Intent in = (Intent)newWithIntent_extrasDefault(newWithMapKeyDefault(source())); + out.putExtras(in); + sink(getMapKeyDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + } + { + // "android.content;Intent;true;putExtras;(Intent);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[0];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value" + Intent out = null; + Intent in = (Intent)newWithIntent_extrasDefault(newWithMapValueDefault(source())); + out.putExtras(in); + sink(getMapValueDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + } + { + // "android.content;Intent;true;putIntegerArrayListExtra;;;Argument[-1];ReturnValue;value" + Intent out = null; + Intent in = (Intent)source(); + out = in.putIntegerArrayListExtra(null, null); + sink(out); // $ hasValueFlow + } + { + // "android.content;Intent;true;putIntegerArrayListExtra;;;Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value" + Intent out = null; + String in = (String)source(); + out.putIntegerArrayListExtra(in, null); + sink(getMapKeyDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + } + { + // "android.content;Intent;true;putParcelableArrayListExtra;;;Argument[-1];ReturnValue;value" + Intent out = null; + Intent in = (Intent)source(); + out = in.putParcelableArrayListExtra(null, null); + sink(out); // $ hasValueFlow + } + { + // "android.content;Intent;true;putParcelableArrayListExtra;;;Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value" + Intent out = null; + String in = (String)source(); + out.putParcelableArrayListExtra(in, null); + sink(getMapKeyDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + } + { + // "android.content;Intent;true;putParcelableArrayListExtra;;;Argument[1];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value" + Intent out = null; + ArrayList in = (ArrayList)source(); + out.putParcelableArrayListExtra(null, in); + sink(getMapValueDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + } + { + // "android.content;Intent;true;putStringArrayListExtra;;;Argument[-1];ReturnValue;value" + Intent out = null; + Intent in = (Intent)source(); + out = in.putStringArrayListExtra(null, null); + sink(out); // $ hasValueFlow + } + { + // "android.content;Intent;true;putStringArrayListExtra;;;Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value" + Intent out = null; + String in = (String)source(); + out.putStringArrayListExtra(in, null); + sink(getMapKeyDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + } + { + // "android.content;Intent;true;putStringArrayListExtra;;;Argument[1];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value" + Intent out = null; + ArrayList in = (ArrayList)source(); + out.putStringArrayListExtra(null, in); + sink(getMapValueDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + } + { + // "android.content;Intent;true;replaceExtras;(Bundle);;Argument[-1];ReturnValue;value" + Intent out = null; + Intent in = (Intent)source(); + out = in.replaceExtras((Bundle)null); + sink(out); // $ hasValueFlow + } + { + // "android.content;Intent;true;replaceExtras;(Bundle);;MapKey of Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value" + Intent out = null; + Bundle in = (Bundle)newWithMapKeyDefault(source()); + out.replaceExtras(in); + sink(getMapKeyDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + } + { + // "android.content;Intent;true;replaceExtras;(Bundle);;MapValue of Argument[0];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value" + Intent out = null; + Bundle in = (Bundle)newWithMapValueDefault(source()); + out.replaceExtras(in); + sink(getMapValueDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + } + { + // "android.content;Intent;true;replaceExtras;(Intent);;Argument[-1];ReturnValue;value" + Intent out = null; + Intent in = (Intent)source(); + out = in.replaceExtras((Intent)null); + sink(out); // $ hasValueFlow + } + { + // "android.content;Intent;true;replaceExtras;(Intent);;MapKey of SyntheticField[android.content.Intent.extras] of Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value" + Intent out = null; + Intent in = (Intent)newWithIntent_extrasDefault(newWithMapKeyDefault(source())); + out.replaceExtras(in); + sink(getMapKeyDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + } + { + // "android.content;Intent;true;replaceExtras;(Intent);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[0];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value" + Intent out = null; + Intent in = (Intent)newWithIntent_extrasDefault(newWithMapValueDefault(source())); + out.replaceExtras(in); + sink(getMapValueDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + } + { + // "android.os;BaseBundle;true;get;(String);;MapValue of Argument[-1];ReturnValue;value" + Object out = null; + BaseBundle in = (BaseBundle)newWithMapValueDefault(source()); + out = in.get(null); + sink(out); // $ hasValueFlow + } + { + // "android.os;BaseBundle;true;getString;(String);;MapValue of Argument[-1];ReturnValue;value" + String out = null; + BaseBundle in = (BaseBundle)newWithMapValueDefault(source()); + out = in.getString(null); + sink(out); // $ hasValueFlow + } + { + // "android.os;BaseBundle;true;getString;(String,String);;Argument[1];ReturnValue;value" + String out = null; + String in = (String)source(); + BaseBundle instance = null; + out = instance.getString(null, in); + sink(out); // $ hasValueFlow + } + { + // "android.os;BaseBundle;true;getString;(String,String);;MapValue of Argument[-1];ReturnValue;value" + String out = null; + BaseBundle in = (BaseBundle)newWithMapValueDefault(source()); + out = in.getString(null, null); + sink(out); // $ hasValueFlow + } + { + // "android.os;BaseBundle;true;getStringArray;(String);;MapValue of Argument[-1];ReturnValue;value" + String[] out = null; + BaseBundle in = (BaseBundle)newWithMapValueDefault(source()); + out = in.getStringArray(null); + sink(out); // $ hasValueFlow + } + { + // "android.os;BaseBundle;true;keySet;();;MapKey of Argument[-1];Element of ReturnValue;value" + Set out = null; + BaseBundle in = (BaseBundle)newWithMapKeyDefault(source()); + out = in.keySet(); + sink(getElement(out)); // $ hasValueFlow + } + { + // "android.os;BaseBundle;true;putAll;(PersistableBundle);;MapKey of Argument[0];MapKey of Argument[-1];value" + BaseBundle out = null; + PersistableBundle in = (PersistableBundle)newWithMapKeyDefault(source()); + out.putAll(in); + sink(getMapKeyDefault(out)); // $ hasValueFlow + } + { + // "android.os;BaseBundle;true;putAll;(PersistableBundle);;MapValue of Argument[0];MapValue of Argument[-1];value" + BaseBundle out = null; + PersistableBundle in = (PersistableBundle)newWithMapValueDefault(source()); + out.putAll(in); + sink(getMapValueDefault(out)); // $ hasValueFlow + } + { + // "android.os;BaseBundle;true;putBoolean;;;Argument[0];MapKey of Argument[-1];value" + BaseBundle out = null; + String in = (String)source(); + out.putBoolean(in, false); + sink(getMapKeyDefault(out)); // $ hasValueFlow + } + { + // "android.os;BaseBundle;true;putBooleanArray;;;Argument[0];MapKey of Argument[-1];value" + BaseBundle out = null; + String in = (String)source(); + out.putBooleanArray(in, null); + sink(getMapKeyDefault(out)); // $ hasValueFlow + } + { + // "android.os;BaseBundle;true;putDouble;;;Argument[0];MapKey of Argument[-1];value" + BaseBundle out = null; + String in = (String)source(); + out.putDouble(in, 0.0); + sink(getMapKeyDefault(out)); // $ hasValueFlow + } + { + // "android.os;BaseBundle;true;putDoubleArray;;;Argument[0];MapKey of Argument[-1];value" + BaseBundle out = null; + String in = (String)source(); + out.putDoubleArray(in, null); + sink(getMapKeyDefault(out)); // $ hasValueFlow + } + { + // "android.os;BaseBundle;true;putInt;;;Argument[0];MapKey of Argument[-1];value" + BaseBundle out = null; + String in = (String)source(); + out.putInt(in, 0); + sink(getMapKeyDefault(out)); // $ hasValueFlow + } + { + // "android.os;BaseBundle;true;putIntArray;;;Argument[0];MapKey of Argument[-1];value" + BaseBundle out = null; + String in = (String)source(); + out.putIntArray(in, null); + sink(getMapKeyDefault(out)); // $ hasValueFlow + } + { + // "android.os;BaseBundle;true;putLong;;;Argument[0];MapKey of Argument[-1];value" + BaseBundle out = null; + String in = (String)source(); + out.putLong(in, 0L); + sink(getMapKeyDefault(out)); // $ hasValueFlow + } + { + // "android.os;BaseBundle;true;putLongArray;;;Argument[0];MapKey of Argument[-1];value" + BaseBundle out = null; + String in = (String)source(); + out.putLongArray(in, null); + sink(getMapKeyDefault(out)); // $ hasValueFlow + } + { + // "android.os;BaseBundle;true;putString;;;Argument[0];MapKey of Argument[-1];value" + BaseBundle out = null; + String in = (String)source(); + out.putString(in, null); + sink(getMapKeyDefault(out)); // $ hasValueFlow + } + { + // "android.os;BaseBundle;true;putString;;;Argument[1];MapValue of Argument[-1];value" + BaseBundle out = null; + String in = (String)source(); + out.putString(null, in); + sink(getMapValueDefault(out)); // $ hasValueFlow + } + { + // "android.os;BaseBundle;true;putStringArray;;;Argument[0];MapKey of Argument[-1];value" + BaseBundle out = null; + String in = (String)source(); + out.putStringArray(in, null); + sink(getMapKeyDefault(out)); // $ hasValueFlow + } + { + // "android.os;BaseBundle;true;putStringArray;;;Argument[1];MapValue of Argument[-1];value" + BaseBundle out = null; + String[] in = (String[])source(); + out.putStringArray(null, in); + sink(getMapValueDefault(out)); // $ hasValueFlow + } + { + // "android.os;Bundle;true;getBinder;(String);;MapValue of Argument[-1];ReturnValue;value" + IBinder out = null; + Bundle in = (Bundle)newWithMapValueDefault(source()); + out = in.getBinder(null); + sink(out); // $ hasValueFlow + } + { + // "android.os;Bundle;true;getBundle;(String);;MapValue of Argument[-1];ReturnValue;value" + Bundle out = null; + Bundle in = (Bundle)newWithMapValueDefault(source()); + out = in.getBundle(null); + sink(out); // $ hasValueFlow + } + { + // "android.os;Bundle;true;getByteArray;(String);;MapValue of Argument[-1];ReturnValue;value" + byte[] out = null; + Bundle in = (Bundle)newWithMapValueDefault(source()); + out = in.getByteArray(null); + sink(out); // $ hasValueFlow + } + { + // "android.os;Bundle;true;getCharArray;(String);;MapValue of Argument[-1];ReturnValue;value" + char[] out = null; + Bundle in = (Bundle)newWithMapValueDefault(source()); + out = in.getCharArray(null); + sink(out); // $ hasValueFlow + } + { + // "android.os;Bundle;true;getCharSequence;(String);;MapValue of Argument[-1];ReturnValue;value" + CharSequence out = null; + Bundle in = (Bundle)newWithMapValueDefault(source()); + out = in.getCharSequence(null); + sink(out); // $ hasValueFlow + } + { + // "android.os;Bundle;true;getCharSequence;(String,CharSequence);;Argument[1];ReturnValue;value" + CharSequence out = null; + CharSequence in = (CharSequence)source(); + Bundle instance = null; + out = instance.getCharSequence(null, in); + sink(out); // $ hasValueFlow + } + { + // "android.os;Bundle;true;getCharSequence;(String,CharSequence);;MapValue of Argument[-1];ReturnValue;value" + CharSequence out = null; + Bundle in = (Bundle)newWithMapValueDefault(source()); + out = in.getCharSequence(null, null); + sink(out); // $ hasValueFlow + } + { + // "android.os;Bundle;true;getCharSequenceArray;(String);;MapValue of Argument[-1];ReturnValue;value" + CharSequence[] out = null; + Bundle in = (Bundle)newWithMapValueDefault(source()); + out = in.getCharSequenceArray(null); + sink(out); // $ hasValueFlow + } + { + // "android.os;Bundle;true;getCharSequenceArrayList;(String);;MapValue of Argument[-1];ReturnValue;value" + ArrayList out = null; + Bundle in = (Bundle)newWithMapValueDefault(source()); + out = in.getCharSequenceArrayList(null); + sink(out); // $ hasValueFlow + } + { + // "android.os;Bundle;true;getParcelable;(String);;MapValue of Argument[-1];ReturnValue;value" + Parcelable out = null; + Bundle in = (Bundle)newWithMapValueDefault(source()); + out = in.getParcelable(null); + sink(out); // $ hasValueFlow + } + { + // "android.os;Bundle;true;getParcelableArray;(String);;MapValue of Argument[-1];ReturnValue;value" + Parcelable[] out = null; + Bundle in = (Bundle)newWithMapValueDefault(source()); + out = in.getParcelableArray(null); + sink(out); // $ hasValueFlow + } + { + // "android.os;Bundle;true;getParcelableArrayList;(String);;MapValue of Argument[-1];ReturnValue;value" + ArrayList out = null; + Bundle in = (Bundle)newWithMapValueDefault(source()); + out = in.getParcelableArrayList(null); + sink(out); // $ hasValueFlow + } + { + // "android.os;Bundle;true;getSerializable;(String);;MapValue of Argument[-1];ReturnValue;value" + Serializable out = null; + Bundle in = (Bundle)newWithMapValueDefault(source()); + out = in.getSerializable(null); + sink(out); // $ hasValueFlow + } + { + // "android.os;Bundle;true;getSparseParcelableArray;(String);;MapValue of Argument[-1];ReturnValue;value" + SparseArray out = null; + Bundle in = (Bundle)newWithMapValueDefault(source()); + out = in.getSparseParcelableArray(null); + sink(out); // $ hasValueFlow + } + { + // "android.os;Bundle;true;getStringArrayList;(String);;MapValue of Argument[-1];ReturnValue;value" + ArrayList out = null; + Bundle in = (Bundle)newWithMapValueDefault(source()); + out = in.getStringArrayList(null); + sink(out); // $ hasValueFlow + } + { + // "android.os;Bundle;true;putAll;(Bundle);;MapKey of Argument[0];MapKey of Argument[-1];value" + Bundle out = null; + Bundle in = (Bundle)newWithMapKeyDefault(source()); + out.putAll(in); + sink(getMapKeyDefault(out)); // $ hasValueFlow + } + { + // "android.os;Bundle;true;putAll;(Bundle);;MapValue of Argument[0];MapValue of Argument[-1];value" + Bundle out = null; + Bundle in = (Bundle)newWithMapValueDefault(source()); + out.putAll(in); + sink(getMapValueDefault(out)); // $ hasValueFlow + } + { + // "android.os;Bundle;true;putBinder;;;Argument[0];MapKey of Argument[-1];value" + Bundle out = null; + String in = (String)source(); + out.putBinder(in, null); + sink(getMapKeyDefault(out)); // $ hasValueFlow + } + { + // "android.os;Bundle;true;putBinder;;;Argument[1];MapValue of Argument[-1];value" + Bundle out = null; + IBinder in = (IBinder)source(); + out.putBinder(null, in); + sink(getMapValueDefault(out)); // $ hasValueFlow + } + { + // "android.os;Bundle;true;putBundle;;;Argument[0];MapKey of Argument[-1];value" + Bundle out = null; + String in = (String)source(); + out.putBundle(in, null); + sink(getMapKeyDefault(out)); // $ hasValueFlow + } + { + // "android.os;Bundle;true;putBundle;;;Argument[1];MapValue of Argument[-1];value" + Bundle out = null; + Bundle in = (Bundle)source(); + out.putBundle(null, in); + sink(getMapValueDefault(out)); // $ hasValueFlow + } + { + // "android.os;Bundle;true;putByte;;;Argument[0];MapKey of Argument[-1];value" + Bundle out = null; + String in = (String)source(); + out.putByte(in, (byte)0); + sink(getMapKeyDefault(out)); // $ hasValueFlow + } + { + // "android.os;Bundle;true;putByteArray;;;Argument[0];MapKey of Argument[-1];value" + Bundle out = null; + String in = (String)source(); + out.putByteArray(in, null); + sink(getMapKeyDefault(out)); // $ hasValueFlow + } + { + // "android.os;Bundle;true;putByteArray;;;Argument[1];MapValue of Argument[-1];value" + Bundle out = null; + byte[] in = (byte[])source(); + out.putByteArray(null, in); + sink(getMapValueDefault(out)); // $ hasValueFlow + } + { + // "android.os;Bundle;true;putChar;;;Argument[0];MapKey of Argument[-1];value" + Bundle out = null; + String in = (String)source(); + out.putChar(in, '\0'); + sink(getMapKeyDefault(out)); // $ hasValueFlow + } + { + // "android.os;Bundle;true;putCharArray;;;Argument[0];MapKey of Argument[-1];value" + Bundle out = null; + String in = (String)source(); + out.putCharArray(in, null); + sink(getMapKeyDefault(out)); // $ hasValueFlow + } + { + // "android.os;Bundle;true;putCharArray;;;Argument[1];MapValue of Argument[-1];value" + Bundle out = null; + char[] in = (char[])source(); + out.putCharArray(null, in); + sink(getMapValueDefault(out)); // $ hasValueFlow + } + { + // "android.os;Bundle;true;putCharSequence;;;Argument[0];MapKey of Argument[-1];value" + Bundle out = null; + String in = (String)source(); + out.putCharSequence(in, null); + sink(getMapKeyDefault(out)); // $ hasValueFlow + } + { + // "android.os;Bundle;true;putCharSequence;;;Argument[1];MapValue of Argument[-1];value" + Bundle out = null; + CharSequence in = (CharSequence)source(); + out.putCharSequence(null, in); + sink(getMapValueDefault(out)); // $ hasValueFlow + } + { + // "android.os;Bundle;true;putCharSequenceArray;;;Argument[0];MapKey of Argument[-1];value" + Bundle out = null; + String in = (String)source(); + out.putCharSequenceArray(in, null); + sink(getMapKeyDefault(out)); // $ hasValueFlow + } + { + // "android.os;Bundle;true;putCharSequenceArray;;;Argument[1];MapValue of Argument[-1];value" + Bundle out = null; + CharSequence[] in = (CharSequence[])source(); + out.putCharSequenceArray(null, in); + sink(getMapValueDefault(out)); // $ hasValueFlow + } + { + // "android.os;Bundle;true;putCharSequenceArrayList;;;Argument[0];MapKey of Argument[-1];value" + Bundle out = null; + String in = (String)source(); + out.putCharSequenceArrayList(in, null); + sink(getMapKeyDefault(out)); // $ hasValueFlow + } + { + // "android.os;Bundle;true;putCharSequenceArrayList;;;Argument[1];MapValue of Argument[-1];value" + Bundle out = null; + ArrayList in = (ArrayList)source(); + out.putCharSequenceArrayList(null, in); + sink(getMapValueDefault(out)); // $ hasValueFlow + } + { + // "android.os;Bundle;true;putFloat;;;Argument[0];MapKey of Argument[-1];value" + Bundle out = null; + String in = (String)source(); + out.putFloat(in, 0.0f); + sink(getMapKeyDefault(out)); // $ hasValueFlow + } + { + // "android.os;Bundle;true;putFloatArray;;;Argument[0];MapKey of Argument[-1];value" + Bundle out = null; + String in = (String)source(); + out.putFloatArray(in, null); + sink(getMapKeyDefault(out)); // $ hasValueFlow + } + { + // "android.os;Bundle;true;putIntegerArrayList;;;Argument[0];MapKey of Argument[-1];value" + Bundle out = null; + String in = (String)source(); + out.putIntegerArrayList(in, null); + sink(getMapKeyDefault(out)); // $ hasValueFlow + } + { + // "android.os;Bundle;true;putParcelable;;;Argument[0];MapKey of Argument[-1];value" + Bundle out = null; + String in = (String)source(); + out.putParcelable(in, null); + sink(getMapKeyDefault(out)); // $ hasValueFlow + } + { + // "android.os;Bundle;true;putParcelable;;;Argument[1];MapValue of Argument[-1];value" + Bundle out = null; + Parcelable in = (Parcelable)source(); + out.putParcelable(null, in); + sink(getMapValueDefault(out)); // $ hasValueFlow + } + { + // "android.os;Bundle;true;putParcelableArray;;;Argument[0];MapKey of Argument[-1];value" + Bundle out = null; + String in = (String)source(); + out.putParcelableArray(in, null); + sink(getMapKeyDefault(out)); // $ hasValueFlow + } + { + // "android.os;Bundle;true;putParcelableArray;;;Argument[1];MapValue of Argument[-1];value" + Bundle out = null; + Parcelable[] in = (Parcelable[])source(); + out.putParcelableArray(null, in); + sink(getMapValueDefault(out)); // $ hasValueFlow + } + { + // "android.os;Bundle;true;putParcelableArrayList;;;Argument[0];MapKey of Argument[-1];value" + Bundle out = null; + String in = (String)source(); + out.putParcelableArrayList(in, null); + sink(getMapKeyDefault(out)); // $ hasValueFlow + } + { + // "android.os;Bundle;true;putParcelableArrayList;;;Argument[1];MapValue of Argument[-1];value" + Bundle out = null; + ArrayList in = (ArrayList)source(); + out.putParcelableArrayList(null, in); + sink(getMapValueDefault(out)); // $ hasValueFlow + } + { + // "android.os;Bundle;true;putSerializable;;;Argument[0];MapKey of Argument[-1];value" + Bundle out = null; + String in = (String)source(); + out.putSerializable(in, null); + sink(getMapKeyDefault(out)); // $ hasValueFlow + } + { + // "android.os;Bundle;true;putSerializable;;;Argument[1];MapValue of Argument[-1];value" + Bundle out = null; + Serializable in = (Serializable)source(); + out.putSerializable(null, in); + sink(getMapValueDefault(out)); // $ hasValueFlow + } + { + // "android.os;Bundle;true;putShort;;;Argument[0];MapKey of Argument[-1];value" + Bundle out = null; + String in = (String)source(); + out.putShort(in, (short)0); + sink(getMapKeyDefault(out)); // $ hasValueFlow + } + { + // "android.os;Bundle;true;putShortArray;;;Argument[0];MapKey of Argument[-1];value" + Bundle out = null; + String in = (String)source(); + out.putShortArray(in, null); + sink(getMapKeyDefault(out)); // $ hasValueFlow + } + { + // "android.os;Bundle;true;putSize;;;Argument[0];MapKey of Argument[-1];value" + Bundle out = null; + String in = (String)source(); + out.putSize(in, null); + sink(getMapKeyDefault(out)); // $ hasValueFlow + } + { + // "android.os;Bundle;true;putSizeF;;;Argument[0];MapKey of Argument[-1];value" + Bundle out = null; + String in = (String)source(); + out.putSizeF(in, null); + sink(getMapKeyDefault(out)); // $ hasValueFlow + } + { + // "android.os;Bundle;true;putSparseParcelableArray;;;Argument[0];MapKey of Argument[-1];value" + Bundle out = null; + String in = (String)source(); + out.putSparseParcelableArray(in, null); + sink(getMapKeyDefault(out)); // $ hasValueFlow + } + { + // "android.os;Bundle;true;putSparseParcelableArray;;;Argument[1];MapValue of Argument[-1];value" + Bundle out = null; + SparseArray in = (SparseArray)source(); + out.putSparseParcelableArray(null, in); + sink(getMapValueDefault(out)); // $ hasValueFlow + } + { + // "android.os;Bundle;true;putStringArrayList;;;Argument[0];MapKey of Argument[-1];value" + Bundle out = null; + String in = (String)source(); + out.putStringArrayList(in, null); + sink(getMapKeyDefault(out)); // $ hasValueFlow + } + { + // "android.os;Bundle;true;putStringArrayList;;;Argument[1];MapValue of Argument[-1];value" + Bundle out = null; + ArrayList in = (ArrayList)source(); + out.putStringArrayList(null, in); + sink(getMapValueDefault(out)); // $ hasValueFlow + } + { + // "android.os;Bundle;true;readFromParcel;;;Argument[0];MapKey of Argument[-1];taint" + Bundle out = null; + Parcel in = (Parcel)source(); + out.readFromParcel(in); + sink(getMapKeyDefault(out)); // $ hasTaintFlow + } + { + // "android.os;Bundle;true;readFromParcel;;;Argument[0];MapValue of Argument[-1];taint" + Bundle out = null; + Parcel in = (Parcel)source(); + out.readFromParcel(in); + sink(getMapValueDefault(out)); // $ hasTaintFlow + } + + } + +} \ No newline at end of file diff --git a/java/ql/test/library-tests/frameworks/android/intent/models.csv b/java/ql/test/library-tests/frameworks/android/intent/models.csv new file mode 100644 index 00000000000..83be9bbcb0c --- /dev/null +++ b/java/ql/test/library-tests/frameworks/android/intent/models.csv @@ -0,0 +1,114 @@ +android.os;BaseBundle;true;get;(String);;MapValue of Argument[-1];ReturnValue;value +android.os;BaseBundle;true;getString;(String);;MapValue of Argument[-1];ReturnValue;value +android.os;BaseBundle;true;getString;(String,String);;MapValue of Argument[-1];ReturnValue;value +android.os;BaseBundle;true;getString;(String,String);;Argument[1];ReturnValue;value +android.os;BaseBundle;true;getStringArray;(String);;MapValue of Argument[-1];ReturnValue;value +android.os;BaseBundle;true;keySet;();;MapKey of Argument[-1];Element of ReturnValue;value +android.os;BaseBundle;true;putAll;(PersistableBundle);;MapKey of Argument[0];MapKey of Argument[-1];value +android.os;BaseBundle;true;putAll;(PersistableBundle);;MapValue of Argument[0];MapValue of Argument[-1];value +android.os;BaseBundle;true;putBoolean;;;Argument[0];MapKey of Argument[-1];value +android.os;BaseBundle;true;putBooleanArray;;;Argument[0];MapKey of Argument[-1];value +android.os;BaseBundle;true;putDouble;;;Argument[0];MapKey of Argument[-1];value +android.os;BaseBundle;true;putDoubleArray;;;Argument[0];MapKey of Argument[-1];value +android.os;BaseBundle;true;putInt;;;Argument[0];MapKey of Argument[-1];value +android.os;BaseBundle;true;putIntArray;;;Argument[0];MapKey of Argument[-1];value +android.os;BaseBundle;true;putLong;;;Argument[0];MapKey of Argument[-1];value +android.os;BaseBundle;true;putLongArray;;;Argument[0];MapKey of Argument[-1];value +android.os;BaseBundle;true;putString;;;Argument[0];MapKey of Argument[-1];value +android.os;BaseBundle;true;putString;;;Argument[1];MapValue of Argument[-1];value +android.os;BaseBundle;true;putStringArray;;;Argument[0];MapKey of Argument[-1];value +android.os;BaseBundle;true;putStringArray;;;Argument[1];MapValue of Argument[-1];value +android.os;Bundle;true;getBinder;(String);;MapValue of Argument[-1];ReturnValue;value +android.os;Bundle;true;getBundle;(String);;MapValue of Argument[-1];ReturnValue;value +android.os;Bundle;true;getByteArray;(String);;MapValue of Argument[-1];ReturnValue;value +android.os;Bundle;true;getCharArray;(String);;MapValue of Argument[-1];ReturnValue;value +android.os;Bundle;true;getCharSequence;(String);;MapValue of Argument[-1];ReturnValue;value +android.os;Bundle;true;getCharSequence;(String,CharSequence);;MapValue of Argument[-1];ReturnValue;value +android.os;Bundle;true;getCharSequence;(String,CharSequence);;Argument[1];ReturnValue;value +android.os;Bundle;true;getCharSequenceArray;(String);;MapValue of Argument[-1];ReturnValue;value +android.os;Bundle;true;getCharSequenceArrayList;(String);;MapValue of Argument[-1];ReturnValue;value +android.os;Bundle;true;getParcelable;(String);;MapValue of Argument[-1];ReturnValue;value +android.os;Bundle;true;getParcelableArray;(String);;MapValue of Argument[-1];ReturnValue;value +android.os;Bundle;true;getParcelableArrayList;(String);;MapValue of Argument[-1];ReturnValue;value +android.os;Bundle;true;getSerializable;(String);;MapValue of Argument[-1];ReturnValue;value +android.os;Bundle;true;getSparseParcelableArray;(String);;MapValue of Argument[-1];ReturnValue;value +android.os;Bundle;true;getStringArrayList;(String);;MapValue of Argument[-1];ReturnValue;value +android.os;Bundle;true;putAll;(Bundle);;MapKey of Argument[0];MapKey of Argument[-1];value +android.os;Bundle;true;putAll;(Bundle);;MapValue of Argument[0];MapValue of Argument[-1];value +android.os;Bundle;true;putBinder;;;Argument[0];MapKey of Argument[-1];value +android.os;Bundle;true;putBinder;;;Argument[1];MapValue of Argument[-1];value +android.os;Bundle;true;putBundle;;;Argument[0];MapKey of Argument[-1];value +android.os;Bundle;true;putBundle;;;Argument[1];MapValue of Argument[-1];value +android.os;Bundle;true;putByte;;;Argument[0];MapKey of Argument[-1];value +android.os;Bundle;true;putByteArray;;;Argument[0];MapKey of Argument[-1];value +android.os;Bundle;true;putByteArray;;;Argument[1];MapValue of Argument[-1];value +android.os;Bundle;true;putChar;;;Argument[0];MapKey of Argument[-1];value +android.os;Bundle;true;putCharArray;;;Argument[0];MapKey of Argument[-1];value +android.os;Bundle;true;putCharArray;;;Argument[1];MapValue of Argument[-1];value +android.os;Bundle;true;putCharSequence;;;Argument[0];MapKey of Argument[-1];value +android.os;Bundle;true;putCharSequence;;;Argument[1];MapValue of Argument[-1];value +android.os;Bundle;true;putCharSequenceArray;;;Argument[0];MapKey of Argument[-1];value +android.os;Bundle;true;putCharSequenceArray;;;Argument[1];MapValue of Argument[-1];value +android.os;Bundle;true;putCharSequenceArrayList;;;Argument[0];MapKey of Argument[-1];value +android.os;Bundle;true;putCharSequenceArrayList;;;Argument[1];MapValue of Argument[-1];value +android.os;Bundle;true;putFloat;;;Argument[0];MapKey of Argument[-1];value +android.os;Bundle;true;putFloatArray;;;Argument[0];MapKey of Argument[-1];value +android.os;Bundle;true;putIntegerArrayList;;;Argument[0];MapKey of Argument[-1];value +android.os;Bundle;true;putParcelable;;;Argument[0];MapKey of Argument[-1];value +android.os;Bundle;true;putParcelable;;;Argument[1];MapValue of Argument[-1];value +android.os;Bundle;true;putParcelableArray;;;Argument[0];MapKey of Argument[-1];value +android.os;Bundle;true;putParcelableArray;;;Argument[1];MapValue of Argument[-1];value +android.os;Bundle;true;putParcelableArrayList;;;Argument[0];MapKey of Argument[-1];value +android.os;Bundle;true;putParcelableArrayList;;;Argument[1];MapValue of Argument[-1];value +android.os;Bundle;true;putSerializable;;;Argument[0];MapKey of Argument[-1];value +android.os;Bundle;true;putSerializable;;;Argument[1];MapValue of Argument[-1];value +android.os;Bundle;true;putShort;;;Argument[0];MapKey of Argument[-1];value +android.os;Bundle;true;putShortArray;;;Argument[0];MapKey of Argument[-1];value +android.os;Bundle;true;putSize;;;Argument[0];MapKey of Argument[-1];value +android.os;Bundle;true;putSizeF;;;Argument[0];MapKey of Argument[-1];value +android.os;Bundle;true;putSparseParcelableArray;;;Argument[0];MapKey of Argument[-1];value +android.os;Bundle;true;putSparseParcelableArray;;;Argument[1];MapValue of Argument[-1];value +android.os;Bundle;true;putStringArrayList;;;Argument[0];MapKey of Argument[-1];value +android.os;Bundle;true;putStringArrayList;;;Argument[1];MapValue of Argument[-1];value +android.os;Bundle;true;readFromParcel;;;Argument[0];MapKey of Argument[-1];taint +android.os;Bundle;true;readFromParcel;;;Argument[0];MapValue of Argument[-1];taint +android.content;Intent;true;getExtras;();;SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value +android.content;Intent;true;getBundleExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value +android.content;Intent;true;getByteArrayExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value +android.content;Intent;true;getCharArrayExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value +android.content;Intent;true;getCharSequenceArrayExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value +android.content;Intent;true;getCharSequenceArrayListExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value +android.content;Intent;true;getCharSequenceExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value +android.content;Intent;true;getParcelableArrayExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value +android.content;Intent;true;getParcelableArrayListExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value +android.content;Intent;true;getParcelableExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value +android.content;Intent;true;getSerializableExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value +android.content;Intent;true;getStringArrayExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value +android.content;Intent;true;getStringArrayListExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value +android.content;Intent;true;getStringExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value +android.content;Intent;true;putCharSequenceArrayListExtra;;;Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value +android.content;Intent;true;putCharSequenceArrayListExtra;;;Argument[1];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value +android.content;Intent;true;putCharSequenceArrayListExtra;;;Argument[-1];ReturnValue;value +android.content;Intent;true;putExtra;;;Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value +android.content;Intent;true;putExtra;;;Argument[1];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value +android.content;Intent;true;putExtra;;;Argument[-1];ReturnValue;value +android.content;Intent;true;putIntegerArrayListExtra;;;Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value +android.content;Intent;true;putIntegerArrayListExtra;;;Argument[-1];ReturnValue;value +android.content;Intent;true;putParcelableArrayListExtra;;;Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value +android.content;Intent;true;putParcelableArrayListExtra;;;Argument[1];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value +android.content;Intent;true;putParcelableArrayListExtra;;;Argument[-1];ReturnValue;value +android.content;Intent;true;putStringArrayListExtra;;;Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value +android.content;Intent;true;putStringArrayListExtra;;;Argument[1];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value +android.content;Intent;true;putStringArrayListExtra;;;Argument[-1];ReturnValue;value +android.content;Intent;true;putExtras;(Bundle);;MapKey of Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value +android.content;Intent;true;putExtras;(Bundle);;MapValue of Argument[0];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value +android.content;Intent;true;putExtras;(Bundle);;Argument[-1];ReturnValue;value +android.content;Intent;true;putExtras;(Intent);;MapKey of SyntheticField[android.content.Intent.extras] of Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value +android.content;Intent;true;putExtras;(Intent);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[0];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value +android.content;Intent;true;putExtras;(Intent);;Argument[-1];ReturnValue;value +android.content;Intent;true;replaceExtras;(Bundle);;MapKey of Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value +android.content;Intent;true;replaceExtras;(Bundle);;MapValue of Argument[0];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value +android.content;Intent;true;replaceExtras;(Bundle);;Argument[-1];ReturnValue;value +android.content;Intent;true;replaceExtras;(Intent);;MapKey of SyntheticField[android.content.Intent.extras] of Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value +android.content;Intent;true;replaceExtras;(Intent);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[0];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value +android.content;Intent;true;replaceExtras;(Intent);;Argument[-1];ReturnValue;value \ No newline at end of file diff --git a/java/ql/test/library-tests/frameworks/android/intent/options b/java/ql/test/library-tests/frameworks/android/intent/options new file mode 100644 index 00000000000..020a4a1cebb --- /dev/null +++ b/java/ql/test/library-tests/frameworks/android/intent/options @@ -0,0 +1 @@ +//semmle-extractor-options: --javac-args -cp ${testdir}/../../../../stubs/android diff --git a/java/ql/test/library-tests/frameworks/android/intent/test.expected b/java/ql/test/library-tests/frameworks/android/intent/test.expected new file mode 100644 index 00000000000..e69de29bb2d diff --git a/java/ql/test/library-tests/frameworks/android/intent/test.ql b/java/ql/test/library-tests/frameworks/android/intent/test.ql new file mode 100644 index 00000000000..e89ac1ba290 --- /dev/null +++ b/java/ql/test/library-tests/frameworks/android/intent/test.ql @@ -0,0 +1,17 @@ +import java +import TestUtilities.InlineFlowTest + +class SummaryModelTest extends SummaryModelCsv { + override predicate row(string row) { + row = + [ + //"package;type;overrides;name;signature;ext;inputspec;outputspec;kind", + "generatedtest;Test;false;newWithMapKeyDefault;(Object);;Argument[0];MapKey of ReturnValue;value", + "generatedtest;Test;false;getMapKeyDefault;(Object);;MapKey of Argument[0];ReturnValue;value", + "generatedtest;Test;false;newWithMapValueDefault;(Object);;Argument[0];MapValue of ReturnValue;value", + "generatedtest;Test;false;getMapValueDefault;(Object);;MapValue of Argument[0];ReturnValue;value", + "generatedtest;Test;false;newWithIntent_extrasDefault;(Object);;Argument[0];SyntheticField[android.content.Intent.extras] of ReturnValue;value", + "generatedtest;Test;false;getIntent_extrasDefault;(Object);;SyntheticField[android.content.Intent.extras] of Argument[0];ReturnValue;value" + ] + } +} diff --git a/java/ql/test/stubs/android/android/accounts/Account.java b/java/ql/test/stubs/android/android/accounts/Account.java new file mode 100644 index 00000000000..806f076452e --- /dev/null +++ b/java/ql/test/stubs/android/android/accounts/Account.java @@ -0,0 +1,21 @@ +// Generated automatically from android.accounts.Account for testing purposes + +package android.accounts; + +import android.os.Parcel; +import android.os.Parcelable; + +public class Account implements Parcelable +{ + protected Account() {} + public Account(Parcel p0){} + public Account(String p0, String p1){} + public String toString(){ return null; } + public boolean equals(Object p0){ return false; } + public final String name = null; + public final String type = null; + public int describeContents(){ return 0; } + public int hashCode(){ return 0; } + public static Parcelable.Creator CREATOR = null; + public void writeToParcel(Parcel p0, int p1){} +} diff --git a/java/ql/test/stubs/android/android/content/BroadcastReceiver.java b/java/ql/test/stubs/android/android/content/BroadcastReceiver.java index 1d73018c96d..93375c04d85 100644 --- a/java/ql/test/stubs/android/android/content/BroadcastReceiver.java +++ b/java/ql/test/stubs/android/android/content/BroadcastReceiver.java @@ -1,255 +1,45 @@ -/* - * Copyright (C) 2006 The Android Open Source Project - * - * 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. - */ +// Generated automatically from android.content.BroadcastReceiver for testing purposes + package android.content; +import android.content.Context; +import android.content.Intent; import android.os.Bundle; -/** - * Base class for code that will receive intents sent by sendBroadcast(). - * - *

    If you don't need to send broadcasts across applications, consider using - * this class with {@link android.support.v4.content.LocalBroadcastManager} instead - * of the more general facilities described below. This will give you a much - * more efficient implementation (no cross-process communication needed) and allow - * you to avoid thinking about any security issues related to other applications - * being able to receive or send your broadcasts. - * - *

    You can either dynamically register an instance of this class with - * {@link Context#registerReceiver Context.registerReceiver()} - * or statically publish an implementation through the - * {@link android.R.styleable#AndroidManifestReceiver <receiver>} - * tag in your AndroidManifest.xml. - * - *

    Note: - *    If registering a receiver in your - * {@link android.app.Activity#onResume() Activity.onResume()} - * implementation, you should unregister it in - * {@link android.app.Activity#onPause() Activity.onPause()}. - * (You won't receive intents when paused, - * and this will cut down on unnecessary system overhead). Do not unregister in - * {@link android.app.Activity#onSaveInstanceState(android.os.Bundle) Activity.onSaveInstanceState()}, - * because this won't be called if the user moves back in the history - * stack. - * - *

    There are two major classes of broadcasts that can be received:

    - *
      - *
    • Normal broadcasts (sent with {@link Context#sendBroadcast(Intent) - * Context.sendBroadcast}) are completely asynchronous. All receivers of the - * broadcast are run in an undefined order, often at the same time. This is - * more efficient, but means that receivers cannot use the result or abort - * APIs included here. - *
    • Ordered broadcasts (sent with {@link Context#sendOrderedBroadcast(Intent, String) - * Context.sendOrderedBroadcast}) are delivered to one receiver at a time. - * As each receiver executes in turn, it can propagate a result to the next - * receiver, or it can completely abort the broadcast so that it won't be passed - * to other receivers. The order receivers run in can be controlled with the - * {@link android.R.styleable#AndroidManifestIntentFilter_priority - * android:priority} attribute of the matching intent-filter; receivers with - * the same priority will be run in an arbitrary order. - *
    - * - *

    Even in the case of normal broadcasts, the system may in some - * situations revert to delivering the broadcast one receiver at a time. In - * particular, for receivers that may require the creation of a process, only - * one will be run at a time to avoid overloading the system with new processes. - * In this situation, however, the non-ordered semantics hold: these receivers still - * cannot return results or abort their broadcast.

    - * - *

    Note that, although the Intent class is used for sending and receiving - * these broadcasts, the Intent broadcast mechanism here is completely separate - * from Intents that are used to start Activities with - * {@link Context#startActivity Context.startActivity()}. - * There is no way for a BroadcastReceiver - * to see or capture Intents used with startActivity(); likewise, when - * you broadcast an Intent, you will never find or start an Activity. - * These two operations are semantically very different: starting an - * Activity with an Intent is a foreground operation that modifies what the - * user is currently interacting with; broadcasting an Intent is a background - * operation that the user is not normally aware of. - * - *

    The BroadcastReceiver class (when launched as a component through - * a manifest's {@link android.R.styleable#AndroidManifestReceiver <receiver>} - * tag) is an important part of an - * application's overall lifecycle.

    - * - *

    Topics covered here: - *

      - *
    1. Security - *
    2. Receiver Lifecycle - *
    3. Process Lifecycle - *
    - * - *
    - *

    Developer Guides

    - *

    For information about how to use this class to receive and resolve intents, read the - * Intents and Intent Filters - * developer guide.

    - *
    - * - * - *

    Security

    - * - *

    Receivers used with the {@link Context} APIs are by their nature a - * cross-application facility, so you must consider how other applications - * may be able to abuse your use of them. Some things to consider are: - * - *

      - *
    • The Intent namespace is global. Make sure that Intent action names and - * other strings are written in a namespace you own, or else you may inadvertantly - * conflict with other applications. - *

    • When you use {@link Context#registerReceiver(BroadcastReceiver, IntentFilter)}, - * any application may send broadcasts to that registered receiver. You can - * control who can send broadcasts to it through permissions described below. - *

    • When you publish a receiver in your application's manifest and specify - * intent-filters for it, any other application can send broadcasts to it regardless - * of the filters you specify. To prevent others from sending to it, make it - * unavailable to them with android:exported="false". - *

    • When you use {@link Context#sendBroadcast(Intent)} or related methods, - * normally any other application can receive these broadcasts. You can control who - * can receive such broadcasts through permissions described below. Alternatively, - * starting with {@link android.os.Build.VERSION_CODES#ICE_CREAM_SANDWICH}, you - * can also safely restrict the broadcast to a single application with - * {@link Intent#setPackage(String) Intent.setPackage} - *

    - * - *

    None of these issues exist when using - * {@link android.support.v4.content.LocalBroadcastManager}, since intents - * broadcast it never go outside of the current process. - * - *

    Access permissions can be enforced by either the sender or receiver - * of a broadcast. - * - *

    To enforce a permission when sending, you supply a non-null - * permission argument to - * {@link Context#sendBroadcast(Intent, String)} or - * {@link Context#sendOrderedBroadcast(Intent, String, BroadcastReceiver, android.os.Handler, int, String, Bundle)}. - * Only receivers who have been granted this permission - * (by requesting it with the - * {@link android.R.styleable#AndroidManifestUsesPermission <uses-permission>} - * tag in their AndroidManifest.xml) will be able to receive - * the broadcast. - * - *

    To enforce a permission when receiving, you supply a non-null - * permission when registering your receiver -- either when calling - * {@link Context#registerReceiver(BroadcastReceiver, IntentFilter, String, android.os.Handler)} - * or in the static - * {@link android.R.styleable#AndroidManifestReceiver <receiver>} - * tag in your AndroidManifest.xml. Only broadcasters who have - * been granted this permission (by requesting it with the - * {@link android.R.styleable#AndroidManifestUsesPermission <uses-permission>} - * tag in their AndroidManifest.xml) will be able to send an - * Intent to the receiver. - * - *

    See the Security and Permissions - * document for more information on permissions and security in general. - * - * - *

    Receiver Lifecycle

    - * - *

    A BroadcastReceiver object is only valid for the duration of the call - * to {@link #onReceive}. Once your code returns from this function, - * the system considers the object to be finished and no longer active. - * - *

    This has important repercussions to what you can do in an - * {@link #onReceive} implementation: anything that requires asynchronous - * operation is not available, because you will need to return from the - * function to handle the asynchronous operation, but at that point the - * BroadcastReceiver is no longer active and thus the system is free to kill - * its process before the asynchronous operation completes. - * - *

    In particular, you may not show a dialog or bind to a service from - * within a BroadcastReceiver. For the former, you should instead use the - * {@link android.app.NotificationManager} API. For the latter, you can - * use {@link android.content.Context#startService Context.startService()} to - * send a command to the service. - * - * - *

    Process Lifecycle

    - * - *

    A process that is currently executing a BroadcastReceiver (that is, - * currently running the code in its {@link #onReceive} method) is - * considered to be a foreground process and will be kept running by the - * system except under cases of extreme memory pressure. - * - *

    Once you return from onReceive(), the BroadcastReceiver is no longer - * active, and its hosting process is only as important as any other application - * components that are running in it. This is especially important because if - * that process was only hosting the BroadcastReceiver (a common case for - * applications that the user has never or not recently interacted with), then - * upon returning from onReceive() the system will consider its process - * to be empty and aggressively kill it so that resources are available for other - * more important processes. - * - *

    This means that for longer-running operations you will often use - * a {@link android.app.Service} in conjunction with a BroadcastReceiver to keep - * the containing process active for the entire time of your operation. - */ -public abstract class BroadcastReceiver { - - /** - * State for a result that is pending for a broadcast receiver. Returned - * by {@link BroadcastReceiver#goAsync() goAsync()} - * while in {@link BroadcastReceiver#onReceive BroadcastReceiver.onReceive()}. - * This allows you to return from onReceive() without having the broadcast - * terminate; you must call {@link #finish()} once you are done with the - * broadcast. This allows you to process the broadcast off of the main - * thread of your app. - * - *

    Note on threading: the state inside of this class is not itself - * thread-safe, however you can use it from any thread if you properly - * sure that you do not have races. Typically this means you will hand - * the entire object to another thread, which will be solely responsible - * for setting any results and finally calling {@link #finish()}. - */ - - public BroadcastReceiver() { +import android.os.IBinder; + +abstract public class BroadcastReceiver +{ + public BroadcastReceiver(){} + public IBinder peekService(Context p0, Intent p1){ return null; } + public abstract void onReceive(Context p0, Intent p1); + public final BroadcastReceiver.PendingResult goAsync(){ return null; } + public final Bundle getResultExtras(boolean p0){ return null; } + public final String getResultData(){ return null; } + public final boolean getAbortBroadcast(){ return false; } + public final boolean getDebugUnregister(){ return false; } + public final boolean isInitialStickyBroadcast(){ return false; } + public final boolean isOrderedBroadcast(){ return false; } + public final int getResultCode(){ return 0; } + public final void abortBroadcast(){} + public final void clearAbortBroadcast(){} + public final void setDebugUnregister(boolean p0){} + public final void setOrderedHint(boolean p0){} + public final void setResult(int p0, String p1, Bundle p2){} + public final void setResultCode(int p0){} + public final void setResultData(String p0){} + public final void setResultExtras(Bundle p0){} + static public class PendingResult + { + public final Bundle getResultExtras(boolean p0){ return null; } + public final String getResultData(){ return null; } + public final boolean getAbortBroadcast(){ return false; } + public final int getResultCode(){ return 0; } + public final void abortBroadcast(){} + public final void clearAbortBroadcast(){} + public final void finish(){} + public final void setResult(int p0, String p1, Bundle p2){} + public final void setResultCode(int p0){} + public final void setResultData(String p0){} + public final void setResultExtras(Bundle p0){} } - /** - * This method is called when the BroadcastReceiver is receiving an Intent - * broadcast. During this time you can use the other methods on - * BroadcastReceiver to view/modify the current result values. This method - * is always called within the main thread of its process, unless you - * explicitly asked for it to be scheduled on a different thread using - * {@link android.content.Context#registerReceiver(BroadcastReceiver, - * IntentFilter, String, android.os.Handler)}. When it runs on the main - * thread you should - * never perform long-running operations in it (there is a timeout of - * 10 seconds that the system allows before considering the receiver to - * be blocked and a candidate to be killed). You cannot launch a popup dialog - * in your implementation of onReceive(). - * - *

    If this BroadcastReceiver was launched through a <receiver> tag, - * then the object is no longer alive after returning from this - * function. This means you should not perform any operations that - * return a result to you asynchronously -- in particular, for interacting - * with services, you should use - * {@link Context#startService(Intent)} instead of - * {@link Context#bindService(Intent, ServiceConnection, int)}. If you wish - * to interact with a service that is already running, you can use - * {@link #peekService}. - * - *

    The Intent filters used in {@link android.content.Context#registerReceiver} - * and in application manifests are not guaranteed to be exclusive. They - * are hints to the operating system about how to find suitable recipients. It is - * possible for senders to force delivery to specific recipients, bypassing filter - * resolution. For this reason, {@link #onReceive(Context, Intent) onReceive()} - * implementations should respond only to known actions, ignoring any unexpected - * Intents that they may receive. - * - * @param context The Context in which the receiver is running. - * @param intent The Intent being received. - */ - public abstract void onReceive(Context context, Intent intent); -} \ No newline at end of file +} diff --git a/java/ql/test/stubs/android/android/content/ClipData.java b/java/ql/test/stubs/android/android/content/ClipData.java new file mode 100644 index 00000000000..490aff3323a --- /dev/null +++ b/java/ql/test/stubs/android/android/content/ClipData.java @@ -0,0 +1,51 @@ +// Generated automatically from android.content.ClipData for testing purposes + +package android.content; + +import android.content.ClipDescription; +import android.content.ContentResolver; +import android.content.Context; +import android.content.Intent; +import android.net.Uri; +import android.os.Parcel; +import android.os.Parcelable; + +public class ClipData implements Parcelable +{ + protected ClipData() {} + public ClipData(CharSequence p0, String[] p1, ClipData.Item p2){} + public ClipData(ClipData p0){} + public ClipData(ClipDescription p0, ClipData.Item p1){} + public ClipData.Item getItemAt(int p0){ return null; } + public ClipDescription getDescription(){ return null; } + public String toString(){ return null; } + public int describeContents(){ return 0; } + public int getItemCount(){ return 0; } + public static ClipData newHtmlText(CharSequence p0, CharSequence p1, String p2){ return null; } + public static ClipData newIntent(CharSequence p0, Intent p1){ return null; } + public static ClipData newPlainText(CharSequence p0, CharSequence p1){ return null; } + public static ClipData newRawUri(CharSequence p0, Uri p1){ return null; } + public static ClipData newUri(ContentResolver p0, CharSequence p1, Uri p2){ return null; } + public static Parcelable.Creator CREATOR = null; + public void addItem(ClipData.Item p0){} + public void addItem(ContentResolver p0, ClipData.Item p1){} + public void writeToParcel(Parcel p0, int p1){} + static public class Item + { + protected Item() {} + public CharSequence coerceToStyledText(Context p0){ return null; } + public CharSequence coerceToText(Context p0){ return null; } + public CharSequence getText(){ return null; } + public Intent getIntent(){ return null; } + public Item(CharSequence p0){} + public Item(CharSequence p0, Intent p1, Uri p2){} + public Item(CharSequence p0, String p1){} + public Item(CharSequence p0, String p1, Intent p2, Uri p3){} + public Item(Intent p0){} + public Item(Uri p0){} + public String coerceToHtmlText(Context p0){ return null; } + public String getHtmlText(){ return null; } + public String toString(){ return null; } + public Uri getUri(){ return null; } + } +} diff --git a/java/ql/test/stubs/android/android/content/ClipDescription.java b/java/ql/test/stubs/android/android/content/ClipDescription.java new file mode 100644 index 00000000000..34fe5a59715 --- /dev/null +++ b/java/ql/test/stubs/android/android/content/ClipDescription.java @@ -0,0 +1,32 @@ +// Generated automatically from android.content.ClipDescription for testing purposes + +package android.content; + +import android.os.Parcel; +import android.os.Parcelable; +import android.os.PersistableBundle; + +public class ClipDescription implements Parcelable +{ + protected ClipDescription() {} + public CharSequence getLabel(){ return null; } + public ClipDescription(CharSequence p0, String[] p1){} + public ClipDescription(ClipDescription p0){} + public PersistableBundle getExtras(){ return null; } + public String getMimeType(int p0){ return null; } + public String toString(){ return null; } + public String[] filterMimeTypes(String p0){ return null; } + public boolean hasMimeType(String p0){ return false; } + public int describeContents(){ return 0; } + public int getMimeTypeCount(){ return 0; } + public long getTimestamp(){ return 0; } + public static Parcelable.Creator CREATOR = null; + public static String MIMETYPE_TEXT_HTML = null; + public static String MIMETYPE_TEXT_INTENT = null; + public static String MIMETYPE_TEXT_PLAIN = null; + public static String MIMETYPE_TEXT_URILIST = null; + public static String MIMETYPE_UNKNOWN = null; + public static boolean compareMimeTypes(String p0, String p1){ return false; } + public void setExtras(PersistableBundle p0){} + public void writeToParcel(Parcel p0, int p1){} +} diff --git a/java/ql/test/stubs/android/android/content/ComponentCallbacks.java b/java/ql/test/stubs/android/android/content/ComponentCallbacks.java new file mode 100644 index 00000000000..51726693d00 --- /dev/null +++ b/java/ql/test/stubs/android/android/content/ComponentCallbacks.java @@ -0,0 +1,11 @@ +// Generated automatically from android.content.ComponentCallbacks for testing purposes + +package android.content; + +import android.content.res.Configuration; + +public interface ComponentCallbacks +{ + void onConfigurationChanged(Configuration p0); + void onLowMemory(); +} diff --git a/java/ql/test/stubs/android/android/content/ComponentCallbacks2.java b/java/ql/test/stubs/android/android/content/ComponentCallbacks2.java new file mode 100644 index 00000000000..f8c83ab104d --- /dev/null +++ b/java/ql/test/stubs/android/android/content/ComponentCallbacks2.java @@ -0,0 +1,17 @@ +// Generated automatically from android.content.ComponentCallbacks2 for testing purposes + +package android.content; + +import android.content.ComponentCallbacks; + +public interface ComponentCallbacks2 extends ComponentCallbacks +{ + static int TRIM_MEMORY_BACKGROUND = 0; + static int TRIM_MEMORY_COMPLETE = 0; + static int TRIM_MEMORY_MODERATE = 0; + static int TRIM_MEMORY_RUNNING_CRITICAL = 0; + static int TRIM_MEMORY_RUNNING_LOW = 0; + static int TRIM_MEMORY_RUNNING_MODERATE = 0; + static int TRIM_MEMORY_UI_HIDDEN = 0; + void onTrimMemory(int p0); +} diff --git a/java/ql/test/stubs/android/android/content/ComponentName.java b/java/ql/test/stubs/android/android/content/ComponentName.java new file mode 100644 index 00000000000..2c72a0a5125 --- /dev/null +++ b/java/ql/test/stubs/android/android/content/ComponentName.java @@ -0,0 +1,35 @@ +// Generated automatically from android.content.ComponentName for testing purposes + +package android.content; + +import android.content.Context; +import android.os.Parcel; +import android.os.Parcelable; + +public class ComponentName implements Cloneable, Comparable, Parcelable +{ + protected ComponentName() {} + public ComponentName clone(){ return null; } + public ComponentName(Context p0, Class p1){} + public ComponentName(Context p0, String p1){} + public ComponentName(Parcel p0){} + public ComponentName(String p0, String p1){} + public String flattenToShortString(){ return null; } + public String flattenToString(){ return null; } + public String getClassName(){ return null; } + public String getPackageName(){ return null; } + public String getShortClassName(){ return null; } + public String toShortString(){ return null; } + public String toString(){ return null; } + public boolean equals(Object p0){ return false; } + public int compareTo(ComponentName p0){ return 0; } + public int describeContents(){ return 0; } + public int hashCode(){ return 0; } + public static ComponentName createRelative(Context p0, String p1){ return null; } + public static ComponentName createRelative(String p0, String p1){ return null; } + public static ComponentName readFromParcel(Parcel p0){ return null; } + public static ComponentName unflattenFromString(String p0){ return null; } + public static Parcelable.Creator CREATOR = null; + public static void writeToParcel(ComponentName p0, Parcel p1){} + public void writeToParcel(Parcel p0, int p1){} +} diff --git a/java/ql/test/stubs/android/android/content/ContentProvider.java b/java/ql/test/stubs/android/android/content/ContentProvider.java index dfbd61f2ae6..d0928e0e9d0 100644 --- a/java/ql/test/stubs/android/android/content/ContentProvider.java +++ b/java/ql/test/stubs/android/android/content/ContentProvider.java @@ -1,17 +1,82 @@ +// Generated automatically from android.content.ContentProvider for testing purposes + package android.content; +import android.content.ComponentCallbacks2; +import android.content.ContentProviderOperation; +import android.content.ContentProviderResult; +import android.content.ContentValues; +import android.content.Context; +import android.content.pm.PathPermission; +import android.content.pm.ProviderInfo; +import android.content.res.AssetFileDescriptor; +import android.content.res.Configuration; import android.database.Cursor; import android.net.Uri; +import android.os.Bundle; import android.os.CancellationSignal; +import android.os.ParcelFileDescriptor; +import java.io.FileDescriptor; +import java.io.PrintWriter; +import java.util.ArrayList; -public abstract class ContentProvider { - public abstract int delete(Uri uri, String selection, String[] selectionArgs); - - public abstract Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder, - CancellationSignal cancellationSignal); - - public abstract Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder); - - public abstract int update(Uri uri, ContentValues values, String selection, String[] selectionArgs); - +abstract public class ContentProvider implements ComponentCallbacks2 +{ + protected boolean isTemporary(){ return false; } + protected final ParcelFileDescriptor openFileHelper(Uri p0, String p1){ return null; } + protected final void setPathPermissions(PathPermission[] p0){} + protected final void setReadPermission(String p0){} + protected final void setWritePermission(String p0){} + public ParcelFileDescriptor openPipeHelper(Uri p0, String p1, Bundle p2, T p3, ContentProvider.PipeDataWriter p4){ return null; } + public AssetFileDescriptor openAssetFile(Uri p0, String p1){ return null; } + public AssetFileDescriptor openAssetFile(Uri p0, String p1, CancellationSignal p2){ return null; } + public AssetFileDescriptor openTypedAssetFile(Uri p0, String p1, Bundle p2){ return null; } + public AssetFileDescriptor openTypedAssetFile(Uri p0, String p1, Bundle p2, CancellationSignal p3){ return null; } + public Bundle call(String p0, String p1, Bundle p2){ return null; } + public Bundle call(String p0, String p1, String p2, Bundle p3){ return null; } + public ContentProvider(){} + public ContentProviderResult[] applyBatch(ArrayList p0){ return null; } + public ContentProviderResult[] applyBatch(String p0, ArrayList p1){ return null; } + public Cursor query(Uri p0, String[] p1, Bundle p2, CancellationSignal p3){ return null; } + public Cursor query(Uri p0, String[] p1, String p2, String[] p3, String p4, CancellationSignal p5){ return null; } + public ParcelFileDescriptor openFile(Uri p0, String p1){ return null; } + public ParcelFileDescriptor openFile(Uri p0, String p1, CancellationSignal p2){ return null; } + public String[] getStreamTypes(Uri p0, String p1){ return null; } + public Uri canonicalize(Uri p0){ return null; } + public Uri insert(Uri p0, ContentValues p1, Bundle p2){ return null; } + public Uri uncanonicalize(Uri p0){ return null; } + public abstract Cursor query(Uri p0, String[] p1, String p2, String[] p3, String p4); + public abstract String getType(Uri p0); + public abstract Uri insert(Uri p0, ContentValues p1); + public abstract boolean onCreate(); + public abstract int delete(Uri p0, String p1, String[] p2); + public abstract int update(Uri p0, ContentValues p1, String p2, String[] p3); + public boolean refresh(Uri p0, Bundle p1, CancellationSignal p2){ return false; } + public class CallingIdentity + { + } + public final ContentProvider.CallingIdentity clearCallingIdentity(){ return null; } + public final Context getContext(){ return null; } + public final Context requireContext(){ return null; } + public final PathPermission[] getPathPermissions(){ return null; } + public final String getCallingAttributionTag(){ return null; } + public final String getCallingPackage(){ return null; } + public final String getCallingPackageUnchecked(){ return null; } + public final String getReadPermission(){ return null; } + public final String getWritePermission(){ return null; } + public final void restoreCallingIdentity(ContentProvider.CallingIdentity p0){} + public int bulkInsert(Uri p0, ContentValues[] p1){ return 0; } + public int delete(Uri p0, Bundle p1){ return 0; } + public int update(Uri p0, ContentValues p1, Bundle p2){ return 0; } + public void attachInfo(Context p0, ProviderInfo p1){} + public void dump(FileDescriptor p0, PrintWriter p1, String[] p2){} + public void onCallingPackageChanged(){} + public void onConfigurationChanged(Configuration p0){} + public void onLowMemory(){} + public void onTrimMemory(int p0){} + public void shutdown(){} + static public interface PipeDataWriter + { + void writeDataToPipe(ParcelFileDescriptor p0, Uri p1, String p2, Bundle p3, T p4); + } } diff --git a/java/ql/test/stubs/android/android/content/ContentProviderClient.java b/java/ql/test/stubs/android/android/content/ContentProviderClient.java new file mode 100644 index 00000000000..0cb6890ad1b --- /dev/null +++ b/java/ql/test/stubs/android/android/content/ContentProviderClient.java @@ -0,0 +1,49 @@ +// Generated automatically from android.content.ContentProviderClient for testing purposes + +package android.content; + +import android.content.ContentProvider; +import android.content.ContentProviderOperation; +import android.content.ContentProviderResult; +import android.content.ContentValues; +import android.content.res.AssetFileDescriptor; +import android.database.Cursor; +import android.net.Uri; +import android.os.Bundle; +import android.os.CancellationSignal; +import android.os.ParcelFileDescriptor; +import java.util.ArrayList; + +public class ContentProviderClient implements AutoCloseable +{ + protected void finalize(){} + public AssetFileDescriptor openAssetFile(Uri p0, String p1){ return null; } + public AssetFileDescriptor openAssetFile(Uri p0, String p1, CancellationSignal p2){ return null; } + public Bundle call(String p0, String p1, Bundle p2){ return null; } + public Bundle call(String p0, String p1, String p2, Bundle p3){ return null; } + public ContentProvider getLocalContentProvider(){ return null; } + public ContentProviderResult[] applyBatch(ArrayList p0){ return null; } + public ContentProviderResult[] applyBatch(String p0, ArrayList p1){ return null; } + public Cursor query(Uri p0, String[] p1, Bundle p2, CancellationSignal p3){ return null; } + public Cursor query(Uri p0, String[] p1, String p2, String[] p3, String p4){ return null; } + public Cursor query(Uri p0, String[] p1, String p2, String[] p3, String p4, CancellationSignal p5){ return null; } + public ParcelFileDescriptor openFile(Uri p0, String p1){ return null; } + public ParcelFileDescriptor openFile(Uri p0, String p1, CancellationSignal p2){ return null; } + public String getType(Uri p0){ return null; } + public String[] getStreamTypes(Uri p0, String p1){ return null; } + public Uri insert(Uri p0, ContentValues p1){ return null; } + public Uri insert(Uri p0, ContentValues p1, Bundle p2){ return null; } + public boolean refresh(Uri p0, Bundle p1, CancellationSignal p2){ return false; } + public boolean release(){ return false; } + public final AssetFileDescriptor openTypedAssetFile(Uri p0, String p1, Bundle p2, CancellationSignal p3){ return null; } + public final AssetFileDescriptor openTypedAssetFileDescriptor(Uri p0, String p1, Bundle p2){ return null; } + public final AssetFileDescriptor openTypedAssetFileDescriptor(Uri p0, String p1, Bundle p2, CancellationSignal p3){ return null; } + public final Uri canonicalize(Uri p0){ return null; } + public final Uri uncanonicalize(Uri p0){ return null; } + public int bulkInsert(Uri p0, ContentValues[] p1){ return 0; } + public int delete(Uri p0, Bundle p1){ return 0; } + public int delete(Uri p0, String p1, String[] p2){ return 0; } + public int update(Uri p0, ContentValues p1, Bundle p2){ return 0; } + public int update(Uri p0, ContentValues p1, String p2, String[] p3){ return 0; } + public void close(){} +} diff --git a/java/ql/test/stubs/android/android/content/ContentProviderOperation.java b/java/ql/test/stubs/android/android/content/ContentProviderOperation.java new file mode 100644 index 00000000000..59fb8b366ca --- /dev/null +++ b/java/ql/test/stubs/android/android/content/ContentProviderOperation.java @@ -0,0 +1,58 @@ +// Generated automatically from android.content.ContentProviderOperation for testing purposes + +package android.content; + +import android.content.ContentProvider; +import android.content.ContentProviderResult; +import android.content.ContentValues; +import android.net.Uri; +import android.os.Bundle; +import android.os.Parcel; +import android.os.Parcelable; + +public class ContentProviderOperation implements Parcelable +{ + public Bundle resolveExtrasBackReferences(ContentProviderResult[] p0, int p1){ return null; } + public ContentProviderResult apply(ContentProvider p0, ContentProviderResult[] p1, int p2){ return null; } + public ContentValues resolveValueBackReferences(ContentProviderResult[] p0, int p1){ return null; } + public String toString(){ return null; } + public String[] resolveSelectionArgsBackReferences(ContentProviderResult[] p0, int p1){ return null; } + public Uri getUri(){ return null; } + public boolean isAssertQuery(){ return false; } + public boolean isCall(){ return false; } + public boolean isDelete(){ return false; } + public boolean isExceptionAllowed(){ return false; } + public boolean isInsert(){ return false; } + public boolean isReadOperation(){ return false; } + public boolean isUpdate(){ return false; } + public boolean isWriteOperation(){ return false; } + public boolean isYieldAllowed(){ return false; } + public int describeContents(){ return 0; } + public static ContentProviderOperation.Builder newAssertQuery(Uri p0){ return null; } + public static ContentProviderOperation.Builder newCall(Uri p0, String p1, String p2){ return null; } + public static ContentProviderOperation.Builder newDelete(Uri p0){ return null; } + public static ContentProviderOperation.Builder newInsert(Uri p0){ return null; } + public static ContentProviderOperation.Builder newUpdate(Uri p0){ return null; } + public static Parcelable.Creator CREATOR = null; + public void writeToParcel(Parcel p0, int p1){} + static public class Builder + { + protected Builder() {} + public ContentProviderOperation build(){ return null; } + public ContentProviderOperation.Builder withExceptionAllowed(boolean p0){ return null; } + public ContentProviderOperation.Builder withExpectedCount(int p0){ return null; } + public ContentProviderOperation.Builder withExtra(String p0, Object p1){ return null; } + public ContentProviderOperation.Builder withExtraBackReference(String p0, int p1){ return null; } + public ContentProviderOperation.Builder withExtraBackReference(String p0, int p1, String p2){ return null; } + public ContentProviderOperation.Builder withExtras(Bundle p0){ return null; } + public ContentProviderOperation.Builder withSelection(String p0, String[] p1){ return null; } + public ContentProviderOperation.Builder withSelectionBackReference(int p0, int p1){ return null; } + public ContentProviderOperation.Builder withSelectionBackReference(int p0, int p1, String p2){ return null; } + public ContentProviderOperation.Builder withValue(String p0, Object p1){ return null; } + public ContentProviderOperation.Builder withValueBackReference(String p0, int p1){ return null; } + public ContentProviderOperation.Builder withValueBackReference(String p0, int p1, String p2){ return null; } + public ContentProviderOperation.Builder withValueBackReferences(ContentValues p0){ return null; } + public ContentProviderOperation.Builder withValues(ContentValues p0){ return null; } + public ContentProviderOperation.Builder withYieldAllowed(boolean p0){ return null; } + } +} diff --git a/java/ql/test/stubs/android/android/content/ContentProviderResult.java b/java/ql/test/stubs/android/android/content/ContentProviderResult.java new file mode 100644 index 00000000000..b0f285d5c92 --- /dev/null +++ b/java/ql/test/stubs/android/android/content/ContentProviderResult.java @@ -0,0 +1,26 @@ +// Generated automatically from android.content.ContentProviderResult for testing purposes + +package android.content; + +import android.net.Uri; +import android.os.Bundle; +import android.os.Parcel; +import android.os.Parcelable; + +public class ContentProviderResult implements Parcelable +{ + protected ContentProviderResult() {} + public ContentProviderResult(Bundle p0){} + public ContentProviderResult(Parcel p0){} + public ContentProviderResult(Throwable p0){} + public ContentProviderResult(Uri p0){} + public ContentProviderResult(int p0){} + public String toString(){ return null; } + public final Bundle extras = null; + public final Integer count = null; + public final Throwable exception = null; + public final Uri uri = null; + public int describeContents(){ return 0; } + public static Parcelable.Creator CREATOR = null; + public void writeToParcel(Parcel p0, int p1){} +} diff --git a/java/ql/test/stubs/android/android/content/ContentResolver.java b/java/ql/test/stubs/android/android/content/ContentResolver.java index 27308ee87be..1d03e20ecf9 100644 --- a/java/ql/test/stubs/android/android/content/ContentResolver.java +++ b/java/ql/test/stubs/android/android/content/ContentResolver.java @@ -1,17 +1,160 @@ +// Generated automatically from android.content.ContentResolver for testing purposes + package android.content; +import android.accounts.Account; +import android.content.ContentProvider; +import android.content.ContentProviderClient; +import android.content.ContentProviderOperation; +import android.content.ContentProviderResult; +import android.content.ContentValues; +import android.content.Context; +import android.content.PeriodicSync; +import android.content.SyncAdapterType; +import android.content.SyncInfo; +import android.content.SyncRequest; +import android.content.SyncStatusObserver; +import android.content.UriPermission; +import android.content.res.AssetFileDescriptor; +import android.database.ContentObserver; import android.database.Cursor; +import android.graphics.Bitmap; +import android.graphics.drawable.Icon; import android.net.Uri; +import android.os.Bundle; import android.os.CancellationSignal; +import android.os.ParcelFileDescriptor; +import android.util.Size; +import java.io.InputStream; +import java.io.OutputStream; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; -public abstract class ContentResolver { - public abstract int delete(Uri uri, String selection, String[] selectionArgs); - - public abstract Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder, - CancellationSignal cancellationSignal); - - public abstract Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder); - - public abstract int update(Uri uri, ContentValues values, String selection, String[] selectionArgs); - +abstract public class ContentResolver +{ + protected ContentResolver() {} + public Bitmap loadThumbnail(Uri p0, Size p1, CancellationSignal p2){ return null; } + public ContentProviderResult[] applyBatch(String p0, ArrayList p1){ return null; } + public ContentResolver(Context p0){} + public List getOutgoingPersistedUriPermissions(){ return null; } + public List getPersistedUriPermissions(){ return null; } + public String[] getStreamTypes(Uri p0, String p1){ return null; } + public final AssetFileDescriptor openAssetFile(Uri p0, String p1, CancellationSignal p2){ return null; } + public final AssetFileDescriptor openAssetFileDescriptor(Uri p0, String p1){ return null; } + public final AssetFileDescriptor openAssetFileDescriptor(Uri p0, String p1, CancellationSignal p2){ return null; } + public final AssetFileDescriptor openTypedAssetFile(Uri p0, String p1, Bundle p2, CancellationSignal p3){ return null; } + public final AssetFileDescriptor openTypedAssetFileDescriptor(Uri p0, String p1, Bundle p2){ return null; } + public final AssetFileDescriptor openTypedAssetFileDescriptor(Uri p0, String p1, Bundle p2, CancellationSignal p3){ return null; } + public final Bundle call(String p0, String p1, String p2, Bundle p3){ return null; } + public final Bundle call(Uri p0, String p1, String p2, Bundle p3){ return null; } + public final ContentProviderClient acquireContentProviderClient(String p0){ return null; } + public final ContentProviderClient acquireContentProviderClient(Uri p0){ return null; } + public final ContentProviderClient acquireUnstableContentProviderClient(String p0){ return null; } + public final ContentProviderClient acquireUnstableContentProviderClient(Uri p0){ return null; } + public final ContentResolver.MimeTypeInfo getTypeInfo(String p0){ return null; } + public final Cursor query(Uri p0, String[] p1, Bundle p2, CancellationSignal p3){ return null; } + public final Cursor query(Uri p0, String[] p1, String p2, String[] p3, String p4){ return null; } + public final Cursor query(Uri p0, String[] p1, String p2, String[] p3, String p4, CancellationSignal p5){ return null; } + public final InputStream openInputStream(Uri p0){ return null; } + public final OutputStream openOutputStream(Uri p0){ return null; } + public final OutputStream openOutputStream(Uri p0, String p1){ return null; } + public final ParcelFileDescriptor openFile(Uri p0, String p1, CancellationSignal p2){ return null; } + public final ParcelFileDescriptor openFileDescriptor(Uri p0, String p1){ return null; } + public final ParcelFileDescriptor openFileDescriptor(Uri p0, String p1, CancellationSignal p2){ return null; } + public final String getType(Uri p0){ return null; } + public final Uri canonicalize(Uri p0){ return null; } + public final Uri insert(Uri p0, ContentValues p1){ return null; } + public final Uri insert(Uri p0, ContentValues p1, Bundle p2){ return null; } + public final Uri uncanonicalize(Uri p0){ return null; } + public final boolean refresh(Uri p0, Bundle p1, CancellationSignal p2){ return false; } + public final int bulkInsert(Uri p0, ContentValues[] p1){ return 0; } + public final int delete(Uri p0, Bundle p1){ return 0; } + public final int delete(Uri p0, String p1, String[] p2){ return 0; } + public final int update(Uri p0, ContentValues p1, Bundle p2){ return 0; } + public final int update(Uri p0, ContentValues p1, String p2, String[] p3){ return 0; } + public final void registerContentObserver(Uri p0, boolean p1, ContentObserver p2){} + public final void unregisterContentObserver(ContentObserver p0){} + public static ContentResolver wrap(ContentProvider p0){ return null; } + public static ContentResolver wrap(ContentProviderClient p0){ return null; } + public static List getPeriodicSyncs(Account p0, String p1){ return null; } + public static List getCurrentSyncs(){ return null; } + public static Object addStatusChangeListener(int p0, SyncStatusObserver p1){ return null; } + public static String ANY_CURSOR_ITEM_TYPE = null; + public static String CURSOR_DIR_BASE_TYPE = null; + public static String CURSOR_ITEM_BASE_TYPE = null; + public static String EXTRA_HONORED_ARGS = null; + public static String EXTRA_REFRESH_SUPPORTED = null; + public static String EXTRA_SIZE = null; + public static String EXTRA_TOTAL_COUNT = null; + public static String QUERY_ARG_GROUP_COLUMNS = null; + public static String QUERY_ARG_LIMIT = null; + public static String QUERY_ARG_OFFSET = null; + public static String QUERY_ARG_SORT_COLLATION = null; + public static String QUERY_ARG_SORT_COLUMNS = null; + public static String QUERY_ARG_SORT_DIRECTION = null; + public static String QUERY_ARG_SORT_LOCALE = null; + public static String QUERY_ARG_SQL_GROUP_BY = null; + public static String QUERY_ARG_SQL_HAVING = null; + public static String QUERY_ARG_SQL_LIMIT = null; + public static String QUERY_ARG_SQL_SELECTION = null; + public static String QUERY_ARG_SQL_SELECTION_ARGS = null; + public static String QUERY_ARG_SQL_SORT_ORDER = null; + public static String SCHEME_ANDROID_RESOURCE = null; + public static String SCHEME_CONTENT = null; + public static String SCHEME_FILE = null; + public static String SYNC_EXTRAS_ACCOUNT = null; + public static String SYNC_EXTRAS_DISCARD_LOCAL_DELETIONS = null; + public static String SYNC_EXTRAS_DO_NOT_RETRY = null; + public static String SYNC_EXTRAS_EXPEDITED = null; + public static String SYNC_EXTRAS_FORCE = null; + public static String SYNC_EXTRAS_IGNORE_BACKOFF = null; + public static String SYNC_EXTRAS_IGNORE_SETTINGS = null; + public static String SYNC_EXTRAS_INITIALIZE = null; + public static String SYNC_EXTRAS_MANUAL = null; + public static String SYNC_EXTRAS_OVERRIDE_TOO_MANY_DELETIONS = null; + public static String SYNC_EXTRAS_REQUIRE_CHARGING = null; + public static String SYNC_EXTRAS_UPLOAD = null; + public static SyncAdapterType[] getSyncAdapterTypes(){ return null; } + public static SyncInfo getCurrentSync(){ return null; } + public static boolean getMasterSyncAutomatically(){ return false; } + public static boolean getSyncAutomatically(Account p0, String p1){ return false; } + public static boolean isSyncActive(Account p0, String p1){ return false; } + public static boolean isSyncPending(Account p0, String p1){ return false; } + public static int NOTIFY_DELETE = 0; + public static int NOTIFY_INSERT = 0; + public static int NOTIFY_SKIP_NOTIFY_FOR_DESCENDANTS = 0; + public static int NOTIFY_SYNC_TO_NETWORK = 0; + public static int NOTIFY_UPDATE = 0; + public static int QUERY_SORT_DIRECTION_ASCENDING = 0; + public static int QUERY_SORT_DIRECTION_DESCENDING = 0; + public static int SYNC_OBSERVER_TYPE_ACTIVE = 0; + public static int SYNC_OBSERVER_TYPE_PENDING = 0; + public static int SYNC_OBSERVER_TYPE_SETTINGS = 0; + public static int getIsSyncable(Account p0, String p1){ return 0; } + public static void addPeriodicSync(Account p0, String p1, Bundle p2, long p3){} + public static void cancelSync(Account p0, String p1){} + public static void cancelSync(SyncRequest p0){} + public static void removePeriodicSync(Account p0, String p1, Bundle p2){} + public static void removeStatusChangeListener(Object p0){} + public static void requestSync(Account p0, String p1, Bundle p2){} + public static void requestSync(SyncRequest p0){} + public static void setIsSyncable(Account p0, String p1, int p2){} + public static void setMasterSyncAutomatically(boolean p0){} + public static void setSyncAutomatically(Account p0, String p1, boolean p2){} + public static void validateSyncExtrasBundle(Bundle p0){} + public void cancelSync(Uri p0){} + public void notifyChange(Collection p0, ContentObserver p1, int p2){} + public void notifyChange(Uri p0, ContentObserver p1){} + public void notifyChange(Uri p0, ContentObserver p1, boolean p2){} + public void notifyChange(Uri p0, ContentObserver p1, int p2){} + public void releasePersistableUriPermission(Uri p0, int p1){} + public void startSync(Uri p0, Bundle p1){} + public void takePersistableUriPermission(Uri p0, int p1){} + static public class MimeTypeInfo + { + public CharSequence getContentDescription(){ return null; } + public CharSequence getLabel(){ return null; } + public Icon getIcon(){ return null; } + } } diff --git a/java/ql/test/stubs/android/android/content/ContentValues.java b/java/ql/test/stubs/android/android/content/ContentValues.java index 105c3092d79..f85e1462717 100644 --- a/java/ql/test/stubs/android/android/content/ContentValues.java +++ b/java/ql/test/stubs/android/android/content/ContentValues.java @@ -1,5 +1,50 @@ +// Generated automatically from android.content.ContentValues for testing purposes + package android.content; -public class ContentValues { +import android.os.Parcel; +import android.os.Parcelable; +import java.util.Map; +import java.util.Set; +public class ContentValues implements Parcelable +{ + public Boolean getAsBoolean(String p0){ return null; } + public Byte getAsByte(String p0){ return null; } + public ContentValues(){} + public ContentValues(ContentValues p0){} + public ContentValues(int p0){} + public Double getAsDouble(String p0){ return null; } + public Float getAsFloat(String p0){ return null; } + public Integer getAsInteger(String p0){ return null; } + public Long getAsLong(String p0){ return null; } + public Object get(String p0){ return null; } + public Set> valueSet(){ return null; } + public Set keySet(){ return null; } + public Short getAsShort(String p0){ return null; } + public String getAsString(String p0){ return null; } + public String toString(){ return null; } + public boolean containsKey(String p0){ return false; } + public boolean equals(Object p0){ return false; } + public boolean isEmpty(){ return false; } + public byte[] getAsByteArray(String p0){ return null; } + public int describeContents(){ return 0; } + public int hashCode(){ return 0; } + public int size(){ return 0; } + public static Parcelable.Creator CREATOR = null; + public static String TAG = null; + public void clear(){} + public void put(String p0, Boolean p1){} + public void put(String p0, Byte p1){} + public void put(String p0, Double p1){} + public void put(String p0, Float p1){} + public void put(String p0, Integer p1){} + public void put(String p0, Long p1){} + public void put(String p0, Short p1){} + public void put(String p0, String p1){} + public void put(String p0, byte[] p1){} + public void putAll(ContentValues p0){} + public void putNull(String p0){} + public void remove(String p0){} + public void writeToParcel(Parcel p0, int p1){} } diff --git a/java/ql/test/stubs/android/android/content/Context.java b/java/ql/test/stubs/android/android/content/Context.java index 118e170d788..7e507e89095 100644 --- a/java/ql/test/stubs/android/android/content/Context.java +++ b/java/ql/test/stubs/android/android/content/Context.java @@ -1,5 +1,265 @@ +// Generated automatically from android.content.Context for testing purposes + package android.content; -public class Context { +import android.content.BroadcastReceiver; +import android.content.ComponentCallbacks; +import android.content.ComponentName; +import android.content.ContentResolver; +import android.content.Intent; +import android.content.IntentFilter; +import android.content.IntentSender; +import android.content.ServiceConnection; +import android.content.SharedPreferences; +import android.content.pm.ApplicationInfo; +import android.content.pm.PackageManager; +import android.content.res.AssetManager; +import android.content.res.ColorStateList; +import android.content.res.Configuration; +import android.content.res.Resources; +import android.content.res.TypedArray; +import android.database.DatabaseErrorHandler; +import android.database.sqlite.SQLiteDatabase; +import android.graphics.Bitmap; +import android.graphics.drawable.Drawable; +import android.net.Uri; +import android.os.Bundle; +import android.os.Handler; +import android.os.Looper; +import android.os.UserHandle; +import android.util.AttributeSet; +import android.view.Display; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.InputStream; +import java.util.concurrent.Executor; +abstract public class Context +{ + public Context createAttributionContext(String p0){ return null; } + public Context createWindowContext(int p0, Bundle p1){ return null; } + public Context(){} + public Display getDisplay(){ return null; } + public Executor getMainExecutor(){ return null; } + public String getAttributionTag(){ return null; } + public String getOpPackageName(){ return null; } + public abstract ApplicationInfo getApplicationInfo(); + public abstract AssetManager getAssets(); + public abstract ClassLoader getClassLoader(); + public abstract ComponentName startForegroundService(Intent p0); + public abstract ComponentName startService(Intent p0); + public abstract ContentResolver getContentResolver(); + public abstract Context createConfigurationContext(Configuration p0); + public abstract Context createContextForSplit(String p0); + public abstract Context createDeviceProtectedStorageContext(); + public abstract Context createDisplayContext(Display p0); + public abstract Context createPackageContext(String p0, int p1); + public abstract Context getApplicationContext(); + public abstract Drawable getWallpaper(); + public abstract Drawable peekWallpaper(); + public abstract File getCacheDir(); + public abstract File getCodeCacheDir(); + public abstract File getDataDir(); + public abstract File getDatabasePath(String p0); + public abstract File getDir(String p0, int p1); + public abstract File getExternalCacheDir(); + public abstract File getExternalFilesDir(String p0); + public abstract File getFileStreamPath(String p0); + public abstract File getFilesDir(); + public abstract File getNoBackupFilesDir(); + public abstract File getObbDir(); + public abstract FileInputStream openFileInput(String p0); + public abstract FileOutputStream openFileOutput(String p0, int p1); + public abstract File[] getExternalCacheDirs(); + public abstract File[] getExternalFilesDirs(String p0); + public abstract File[] getExternalMediaDirs(); + public abstract File[] getObbDirs(); + public abstract Intent registerReceiver(BroadcastReceiver p0, IntentFilter p1); + public abstract Intent registerReceiver(BroadcastReceiver p0, IntentFilter p1, String p2, Handler p3); + public abstract Intent registerReceiver(BroadcastReceiver p0, IntentFilter p1, String p2, Handler p3, int p4); + public abstract Intent registerReceiver(BroadcastReceiver p0, IntentFilter p1, int p2); + public abstract Looper getMainLooper(); + public abstract Object getSystemService(String p0); + public abstract PackageManager getPackageManager(); + public abstract Resources getResources(); + public abstract Resources.Theme getTheme(); + public abstract SQLiteDatabase openOrCreateDatabase(String p0, int p1, SQLiteDatabase.CursorFactory p2); + public abstract SQLiteDatabase openOrCreateDatabase(String p0, int p1, SQLiteDatabase.CursorFactory p2, DatabaseErrorHandler p3); + public abstract SharedPreferences getSharedPreferences(String p0, int p1); + public abstract String getPackageCodePath(); + public abstract String getPackageName(); + public abstract String getPackageResourcePath(); + public abstract String getSystemServiceName(Class p0); + public abstract String[] databaseList(); + public abstract String[] fileList(); + public abstract boolean bindService(Intent p0, ServiceConnection p1, int p2); + public abstract boolean deleteDatabase(String p0); + public abstract boolean deleteFile(String p0); + public abstract boolean deleteSharedPreferences(String p0); + public abstract boolean isDeviceProtectedStorage(); + public abstract boolean moveDatabaseFrom(Context p0, String p1); + public abstract boolean moveSharedPreferencesFrom(Context p0, String p1); + public abstract boolean startInstrumentation(ComponentName p0, String p1, Bundle p2); + public abstract boolean stopService(Intent p0); + public abstract int checkCallingOrSelfPermission(String p0); + public abstract int checkCallingOrSelfUriPermission(Uri p0, int p1); + public abstract int checkCallingPermission(String p0); + public abstract int checkCallingUriPermission(Uri p0, int p1); + public abstract int checkPermission(String p0, int p1, int p2); + public abstract int checkSelfPermission(String p0); + public abstract int checkUriPermission(Uri p0, String p1, String p2, int p3, int p4, int p5); + public abstract int checkUriPermission(Uri p0, int p1, int p2, int p3); + public abstract int getWallpaperDesiredMinimumHeight(); + public abstract int getWallpaperDesiredMinimumWidth(); + public abstract void clearWallpaper(); + public abstract void enforceCallingOrSelfPermission(String p0, String p1); + public abstract void enforceCallingOrSelfUriPermission(Uri p0, int p1, String p2); + public abstract void enforceCallingPermission(String p0, String p1); + public abstract void enforceCallingUriPermission(Uri p0, int p1, String p2); + public abstract void enforcePermission(String p0, int p1, int p2, String p3); + public abstract void enforceUriPermission(Uri p0, String p1, String p2, int p3, int p4, int p5, String p6); + public abstract void enforceUriPermission(Uri p0, int p1, int p2, int p3, String p4); + public abstract void grantUriPermission(String p0, Uri p1, int p2); + public abstract void removeStickyBroadcast(Intent p0); + public abstract void removeStickyBroadcastAsUser(Intent p0, UserHandle p1); + public abstract void revokeUriPermission(String p0, Uri p1, int p2); + public abstract void revokeUriPermission(Uri p0, int p1); + public abstract void sendBroadcast(Intent p0); + public abstract void sendBroadcast(Intent p0, String p1); + public abstract void sendBroadcastAsUser(Intent p0, UserHandle p1); + public abstract void sendBroadcastAsUser(Intent p0, UserHandle p1, String p2); + public abstract void sendOrderedBroadcast(Intent p0, String p1); + public abstract void sendOrderedBroadcast(Intent p0, String p1, BroadcastReceiver p2, Handler p3, int p4, String p5, Bundle p6); + public abstract void sendOrderedBroadcastAsUser(Intent p0, UserHandle p1, String p2, BroadcastReceiver p3, Handler p4, int p5, String p6, Bundle p7); + public abstract void sendStickyBroadcast(Intent p0); + public abstract void sendStickyBroadcastAsUser(Intent p0, UserHandle p1); + public abstract void sendStickyOrderedBroadcast(Intent p0, BroadcastReceiver p1, Handler p2, int p3, String p4, Bundle p5); + public abstract void sendStickyOrderedBroadcastAsUser(Intent p0, UserHandle p1, BroadcastReceiver p2, Handler p3, int p4, String p5, Bundle p6); + public abstract void setTheme(int p0); + public abstract void setWallpaper(Bitmap p0); + public abstract void setWallpaper(InputStream p0); + public abstract void startActivities(Intent[] p0); + public abstract void startActivities(Intent[] p0, Bundle p1); + public abstract void startActivity(Intent p0); + public abstract void startActivity(Intent p0, Bundle p1); + public abstract void startIntentSender(IntentSender p0, Intent p1, int p2, int p3, int p4); + public abstract void startIntentSender(IntentSender p0, Intent p1, int p2, int p3, int p4, Bundle p5); + public abstract void unbindService(ServiceConnection p0); + public abstract void unregisterReceiver(BroadcastReceiver p0); + public boolean bindIsolatedService(Intent p0, int p1, String p2, Executor p3, ServiceConnection p4){ return false; } + public boolean bindService(Intent p0, int p1, Executor p2, ServiceConnection p3){ return false; } + public boolean bindServiceAsUser(Intent p0, ServiceConnection p1, int p2, UserHandle p3){ return false; } + public boolean isRestricted(){ return false; } + public final T getSystemService(Class p0){ return null; } + public final CharSequence getText(int p0){ return null; } + public final ColorStateList getColorStateList(int p0){ return null; } + public final Drawable getDrawable(int p0){ return null; } + public final String getString(int p0){ return null; } + public final String getString(int p0, Object... p1){ return null; } + public final TypedArray obtainStyledAttributes(AttributeSet p0, int[] p1){ return null; } + public final TypedArray obtainStyledAttributes(AttributeSet p0, int[] p1, int p2, int p3){ return null; } + public final TypedArray obtainStyledAttributes(int p0, int[] p1){ return null; } + public final TypedArray obtainStyledAttributes(int[] p0){ return null; } + public final int getColor(int p0){ return 0; } + public static String ACCESSIBILITY_SERVICE = null; + public static String ACCOUNT_SERVICE = null; + public static String ACTIVITY_SERVICE = null; + public static String ALARM_SERVICE = null; + public static String APPWIDGET_SERVICE = null; + public static String APP_OPS_SERVICE = null; + public static String AUDIO_SERVICE = null; + public static String BATTERY_SERVICE = null; + public static String BIOMETRIC_SERVICE = null; + public static String BLOB_STORE_SERVICE = null; + public static String BLUETOOTH_SERVICE = null; + public static String CAMERA_SERVICE = null; + public static String CAPTIONING_SERVICE = null; + public static String CARRIER_CONFIG_SERVICE = null; + public static String CLIPBOARD_SERVICE = null; + public static String COMPANION_DEVICE_SERVICE = null; + public static String CONNECTIVITY_DIAGNOSTICS_SERVICE = null; + public static String CONNECTIVITY_SERVICE = null; + public static String CONSUMER_IR_SERVICE = null; + public static String CROSS_PROFILE_APPS_SERVICE = null; + public static String DEVICE_POLICY_SERVICE = null; + public static String DISPLAY_SERVICE = null; + public static String DOWNLOAD_SERVICE = null; + public static String DROPBOX_SERVICE = null; + public static String EUICC_SERVICE = null; + public static String FILE_INTEGRITY_SERVICE = null; + public static String FINGERPRINT_SERVICE = null; + public static String HARDWARE_PROPERTIES_SERVICE = null; + public static String INPUT_METHOD_SERVICE = null; + public static String INPUT_SERVICE = null; + public static String IPSEC_SERVICE = null; + public static String JOB_SCHEDULER_SERVICE = null; + public static String KEYGUARD_SERVICE = null; + public static String LAUNCHER_APPS_SERVICE = null; + public static String LAYOUT_INFLATER_SERVICE = null; + public static String LOCATION_SERVICE = null; + public static String MEDIA_PROJECTION_SERVICE = null; + public static String MEDIA_ROUTER_SERVICE = null; + public static String MEDIA_SESSION_SERVICE = null; + public static String MIDI_SERVICE = null; + public static String NETWORK_STATS_SERVICE = null; + public static String NFC_SERVICE = null; + public static String NOTIFICATION_SERVICE = null; + public static String NSD_SERVICE = null; + public static String POWER_SERVICE = null; + public static String PRINT_SERVICE = null; + public static String RESTRICTIONS_SERVICE = null; + public static String ROLE_SERVICE = null; + public static String SEARCH_SERVICE = null; + public static String SENSOR_SERVICE = null; + public static String SHORTCUT_SERVICE = null; + public static String STORAGE_SERVICE = null; + public static String STORAGE_STATS_SERVICE = null; + public static String SYSTEM_HEALTH_SERVICE = null; + public static String TELECOM_SERVICE = null; + public static String TELEPHONY_IMS_SERVICE = null; + public static String TELEPHONY_SERVICE = null; + public static String TELEPHONY_SUBSCRIPTION_SERVICE = null; + public static String TEXT_CLASSIFICATION_SERVICE = null; + public static String TEXT_SERVICES_MANAGER_SERVICE = null; + public static String TV_INPUT_SERVICE = null; + public static String UI_MODE_SERVICE = null; + public static String USAGE_STATS_SERVICE = null; + public static String USB_SERVICE = null; + public static String USER_SERVICE = null; + public static String VIBRATOR_SERVICE = null; + public static String VPN_MANAGEMENT_SERVICE = null; + public static String WALLPAPER_SERVICE = null; + public static String WIFI_AWARE_SERVICE = null; + public static String WIFI_P2P_SERVICE = null; + public static String WIFI_RTT_RANGING_SERVICE = null; + public static String WIFI_SERVICE = null; + public static String WINDOW_SERVICE = null; + public static int BIND_ABOVE_CLIENT = 0; + public static int BIND_ADJUST_WITH_ACTIVITY = 0; + public static int BIND_ALLOW_OOM_MANAGEMENT = 0; + public static int BIND_AUTO_CREATE = 0; + public static int BIND_DEBUG_UNBIND = 0; + public static int BIND_EXTERNAL_SERVICE = 0; + public static int BIND_IMPORTANT = 0; + public static int BIND_INCLUDE_CAPABILITIES = 0; + public static int BIND_NOT_FOREGROUND = 0; + public static int BIND_NOT_PERCEPTIBLE = 0; + public static int BIND_WAIVE_PRIORITY = 0; + public static int CONTEXT_IGNORE_SECURITY = 0; + public static int CONTEXT_INCLUDE_CODE = 0; + public static int CONTEXT_RESTRICTED = 0; + public static int MODE_APPEND = 0; + public static int MODE_ENABLE_WRITE_AHEAD_LOGGING = 0; + public static int MODE_MULTI_PROCESS = 0; + public static int MODE_NO_LOCALIZED_COLLATORS = 0; + public static int MODE_PRIVATE = 0; + public static int MODE_WORLD_READABLE = 0; + public static int MODE_WORLD_WRITEABLE = 0; + public static int RECEIVER_VISIBLE_TO_INSTANT_APPS = 0; + public void registerComponentCallbacks(ComponentCallbacks p0){} + public void sendBroadcastWithMultiplePermissions(Intent p0, String[] p1){} + public void sendOrderedBroadcast(Intent p0, String p1, String p2, BroadcastReceiver p3, Handler p4, int p5, String p6, Bundle p7){} + public void unregisterComponentCallbacks(ComponentCallbacks p0){} + public void updateServiceGroup(ServiceConnection p0, int p1, int p2){} } diff --git a/java/ql/test/stubs/android/android/content/Intent.java b/java/ql/test/stubs/android/android/content/Intent.java index 32b167509d3..d3dd30a8fc4 100644 --- a/java/ql/test/stubs/android/android/content/Intent.java +++ b/java/ql/test/stubs/android/android/content/Intent.java @@ -1,196 +1,461 @@ -/* - * Copyright (C) 2006 The Android Open Source Project - * - * 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. - */ +// Generated automatically from android.content.Intent for testing purposes package android.content; +import android.content.ClipData; +import android.content.ComponentName; +import android.content.ContentResolver; +import android.content.Context; +import android.content.IntentSender; +import android.content.pm.ActivityInfo; +import android.content.pm.PackageManager; +import android.content.res.Resources; +import android.graphics.Rect; import android.net.Uri; import android.os.Bundle; - -import java.io.PrintWriter; -import java.net.URISyntaxException; +import android.os.Parcel; +import android.os.Parcelable; +import android.util.AttributeSet; +import java.io.Serializable; +import java.util.ArrayList; import java.util.Set; +import org.xmlpull.v1.XmlPullParser; -public class Intent implements Cloneable { - - public static Intent createChooser(Intent target, CharSequence title) { - return null; - } - - public Intent() { - } - - public Intent(Intent o) { - } - - @Override - public Object clone() { - return null; - } - - public Intent(String action) { - } - - public Intent(String action, Uri uri) { - } - - public Intent(Context packageContext, Class cls) { - } - - public Intent(String action, Uri uri, Context packageContext, Class cls) { - } - - public static Intent makeMainSelectorActivity(String selectorAction, String selectorCategory) { - return null; - } - - public static Intent getIntent(String uri) throws URISyntaxException { - return null; - } - - public static Intent getIntentOld(String uri) throws URISyntaxException { - return null; - } - - public static void printIntentArgsHelp(PrintWriter pw, String prefix) { - } - - public boolean hasCategory(String category) { - return false; - } - - public Set getCategories() { - return null; - } - - public int getContentUserHint() { - return 0; - } - - public String getLaunchToken() { - return null; - } - - public void setLaunchToken(String launchToken) { - } - - public boolean hasExtra(String name) { - return false; - } - - public boolean hasFileDescriptors() { - return false; - } - - public void setAllowFds(boolean allowFds) { - } - - public void setDefusable(boolean defusable) { - } - - public Object getExtra(String name) { - return null; - } - - public boolean getBooleanExtra(String name, boolean defaultValue) { - return false; - } - - public byte getByteExtra(String name, byte defaultValue) { - return 0; - } - - public short getShortExtra(String name, short defaultValue) { - return 0; - } - - public char getCharExtra(String name, char defaultValue) { - return '0'; - } - - public int getIntExtra(String name, int defaultValue) { - return 0; - } - - public long getLongExtra(String name, long defaultValue) { - return 0; - } - - public float getFloatExtra(String name, float defaultValue) { - return 0; - } - - public double getDoubleExtra(String name, double defaultValue) { - return 0; - } - - public String getStringExtra(String string) { - return null; - } - - public void removeUnsafeExtras() { - } - - public boolean canStripForHistory() { - return false; - } - - public Intent maybeStripForHistory() { - return null; - } - - public boolean isExcludingStopped() { - return false; - } - - public void removeCategory(String category) { - } - - public void prepareToLeaveUser(int userId) { - } - - public boolean filterEquals(Intent other) { - return false; - } - - public int filterHashCode() { - return 0; - } - - @Override - public String toString() { - return null; - } - - public String toInsecureString() { - return null; - } - - public String toInsecureStringWithClip() { - return null; - } - - public String toShortString(boolean secure, boolean comp, boolean extras, boolean clip) { - return null; - } - - public void toShortString(StringBuilder b, boolean secure, boolean comp, boolean extras, boolean clip) { - } - - public Bundle getExtras() { - return null; - } - +public class Intent implements Cloneable, Parcelable +{ + public ArrayList getParcelableArrayListExtra(String p0){ return null; } + public T getParcelableExtra(String p0){ return null; } + public ActivityInfo resolveActivityInfo(PackageManager p0, int p1){ return null; } + public ArrayList getCharSequenceArrayListExtra(String p0){ return null; } + public ArrayList getIntegerArrayListExtra(String p0){ return null; } + public ArrayList getStringArrayListExtra(String p0){ return null; } + public Bundle getBundleExtra(String p0){ return null; } + public Bundle getExtras(){ return null; } + public CharSequence getCharSequenceExtra(String p0){ return null; } + public CharSequence[] getCharSequenceArrayExtra(String p0){ return null; } + public ClipData getClipData(){ return null; } + public ComponentName getComponent(){ return null; } + public ComponentName resolveActivity(PackageManager p0){ return null; } + public Intent addCategory(String p0){ return null; } + public Intent addFlags(int p0){ return null; } + public Intent cloneFilter(){ return null; } + public Intent getSelector(){ return null; } + public Intent putCharSequenceArrayListExtra(String p0, ArrayList p1){ return null; } + public Intent putExtra(String p0, Bundle p1){ return null; } + public Intent putExtra(String p0, CharSequence p1){ return null; } + public Intent putExtra(String p0, CharSequence[] p1){ return null; } + public Intent putExtra(String p0, Parcelable p1){ return null; } + public Intent putExtra(String p0, Parcelable[] p1){ return null; } + public Intent putExtra(String p0, Serializable p1){ return null; } + public Intent putExtra(String p0, String p1){ return null; } + public Intent putExtra(String p0, String[] p1){ return null; } + public Intent putExtra(String p0, boolean p1){ return null; } + public Intent putExtra(String p0, boolean[] p1){ return null; } + public Intent putExtra(String p0, byte p1){ return null; } + public Intent putExtra(String p0, byte[] p1){ return null; } + public Intent putExtra(String p0, char p1){ return null; } + public Intent putExtra(String p0, char[] p1){ return null; } + public Intent putExtra(String p0, double p1){ return null; } + public Intent putExtra(String p0, double[] p1){ return null; } + public Intent putExtra(String p0, float p1){ return null; } + public Intent putExtra(String p0, float[] p1){ return null; } + public Intent putExtra(String p0, int p1){ return null; } + public Intent putExtra(String p0, int[] p1){ return null; } + public Intent putExtra(String p0, long p1){ return null; } + public Intent putExtra(String p0, long[] p1){ return null; } + public Intent putExtra(String p0, short p1){ return null; } + public Intent putExtra(String p0, short[] p1){ return null; } + public Intent putExtras(Bundle p0){ return null; } + public Intent putExtras(Intent p0){ return null; } + public Intent putIntegerArrayListExtra(String p0, ArrayList p1){ return null; } + public Intent putParcelableArrayListExtra(String p0, ArrayList p1){ return null; } + public Intent putStringArrayListExtra(String p0, ArrayList p1){ return null; } + public Intent replaceExtras(Bundle p0){ return null; } + public Intent replaceExtras(Intent p0){ return null; } + public Intent setAction(String p0){ return null; } + public Intent setClass(Context p0, Class p1){ return null; } + public Intent setClassName(Context p0, String p1){ return null; } + public Intent setClassName(String p0, String p1){ return null; } + public Intent setComponent(ComponentName p0){ return null; } + public Intent setData(Uri p0){ return null; } + public Intent setDataAndNormalize(Uri p0){ return null; } + public Intent setDataAndType(Uri p0, String p1){ return null; } + public Intent setDataAndTypeAndNormalize(Uri p0, String p1){ return null; } + public Intent setFlags(int p0){ return null; } + public Intent setIdentifier(String p0){ return null; } + public Intent setPackage(String p0){ return null; } + public Intent setType(String p0){ return null; } + public Intent setTypeAndNormalize(String p0){ return null; } + public Intent(){} + public Intent(Context p0, Class p1){} + public Intent(Intent p0){} + public Intent(String p0){} + public Intent(String p0, Uri p1){} + public Intent(String p0, Uri p1, Context p2, Class p3){} + public Object clone(){ return null; } + public Parcelable[] getParcelableArrayExtra(String p0){ return null; } + public Rect getSourceBounds(){ return null; } + public Serializable getSerializableExtra(String p0){ return null; } + public Set getCategories(){ return null; } + public String getAction(){ return null; } + public String getDataString(){ return null; } + public String getIdentifier(){ return null; } + public String getPackage(){ return null; } + public String getScheme(){ return null; } + public String getStringExtra(String p0){ return null; } + public String getType(){ return null; } + public String resolveType(ContentResolver p0){ return null; } + public String resolveType(Context p0){ return null; } + public String resolveTypeIfNeeded(ContentResolver p0){ return null; } + public String toString(){ return null; } + public String toURI(){ return null; } + public String toUri(int p0){ return null; } + public String[] getStringArrayExtra(String p0){ return null; } + public Uri getData(){ return null; } + public boolean filterEquals(Intent p0){ return false; } + public boolean getBooleanExtra(String p0, boolean p1){ return false; } + public boolean hasCategory(String p0){ return false; } + public boolean hasExtra(String p0){ return false; } + public boolean hasFileDescriptors(){ return false; } + public boolean[] getBooleanArrayExtra(String p0){ return null; } + public byte getByteExtra(String p0, byte p1){ return 0; } + public byte[] getByteArrayExtra(String p0){ return null; } + public char getCharExtra(String p0, char p1){ return '0'; } + public char[] getCharArrayExtra(String p0){ return null; } + public double getDoubleExtra(String p0, double p1){ return 0; } + public double[] getDoubleArrayExtra(String p0){ return null; } + public float getFloatExtra(String p0, float p1){ return 0; } + public float[] getFloatArrayExtra(String p0){ return null; } + public int describeContents(){ return 0; } + public int fillIn(Intent p0, int p1){ return 0; } + public int filterHashCode(){ return 0; } + public int getFlags(){ return 0; } + public int getIntExtra(String p0, int p1){ return 0; } + public int[] getIntArrayExtra(String p0){ return null; } + public long getLongExtra(String p0, long p1){ return 0; } + public long[] getLongArrayExtra(String p0){ return null; } + public short getShortExtra(String p0, short p1){ return 0; } + public short[] getShortArrayExtra(String p0){ return null; } + public static Intent createChooser(Intent p0, CharSequence p1){ return null; } + public static Intent createChooser(Intent p0, CharSequence p1, IntentSender p2){ return null; } + public static Intent getIntent(String p0){ return null; } + public static Intent getIntentOld(String p0){ return null; } + public static Intent makeMainActivity(ComponentName p0){ return null; } + public static Intent makeMainSelectorActivity(String p0, String p1){ return null; } + public static Intent makeRestartActivityTask(ComponentName p0){ return null; } + public static Intent parseIntent(Resources p0, XmlPullParser p1, AttributeSet p2){ return null; } + public static Intent parseUri(String p0, int p1){ return null; } + public static Parcelable.Creator CREATOR = null; + public static String ACTION_AIRPLANE_MODE_CHANGED = null; + public static String ACTION_ALL_APPS = null; + public static String ACTION_ANSWER = null; + public static String ACTION_APPLICATION_PREFERENCES = null; + public static String ACTION_APPLICATION_RESTRICTIONS_CHANGED = null; + public static String ACTION_APP_ERROR = null; + public static String ACTION_ASSIST = null; + public static String ACTION_ATTACH_DATA = null; + public static String ACTION_AUTO_REVOKE_PERMISSIONS = null; + public static String ACTION_BATTERY_CHANGED = null; + public static String ACTION_BATTERY_LOW = null; + public static String ACTION_BATTERY_OKAY = null; + public static String ACTION_BOOT_COMPLETED = null; + public static String ACTION_BUG_REPORT = null; + public static String ACTION_CALL = null; + public static String ACTION_CALL_BUTTON = null; + public static String ACTION_CAMERA_BUTTON = null; + public static String ACTION_CARRIER_SETUP = null; + public static String ACTION_CHOOSER = null; + public static String ACTION_CLOSE_SYSTEM_DIALOGS = null; + public static String ACTION_CONFIGURATION_CHANGED = null; + public static String ACTION_CREATE_DOCUMENT = null; + public static String ACTION_CREATE_REMINDER = null; + public static String ACTION_CREATE_SHORTCUT = null; + public static String ACTION_DATE_CHANGED = null; + public static String ACTION_DEFAULT = null; + public static String ACTION_DEFINE = null; + public static String ACTION_DELETE = null; + public static String ACTION_DEVICE_STORAGE_LOW = null; + public static String ACTION_DEVICE_STORAGE_OK = null; + public static String ACTION_DIAL = null; + public static String ACTION_DOCK_EVENT = null; + public static String ACTION_DREAMING_STARTED = null; + public static String ACTION_DREAMING_STOPPED = null; + public static String ACTION_EDIT = null; + public static String ACTION_EXTERNAL_APPLICATIONS_AVAILABLE = null; + public static String ACTION_EXTERNAL_APPLICATIONS_UNAVAILABLE = null; + public static String ACTION_FACTORY_TEST = null; + public static String ACTION_GET_CONTENT = null; + public static String ACTION_GET_RESTRICTION_ENTRIES = null; + public static String ACTION_GTALK_SERVICE_CONNECTED = null; + public static String ACTION_GTALK_SERVICE_DISCONNECTED = null; + public static String ACTION_HEADSET_PLUG = null; + public static String ACTION_INPUT_METHOD_CHANGED = null; + public static String ACTION_INSERT = null; + public static String ACTION_INSERT_OR_EDIT = null; + public static String ACTION_INSTALL_FAILURE = null; + public static String ACTION_INSTALL_PACKAGE = null; + public static String ACTION_LOCALE_CHANGED = null; + public static String ACTION_LOCKED_BOOT_COMPLETED = null; + public static String ACTION_MAIN = null; + public static String ACTION_MANAGED_PROFILE_ADDED = null; + public static String ACTION_MANAGED_PROFILE_AVAILABLE = null; + public static String ACTION_MANAGED_PROFILE_REMOVED = null; + public static String ACTION_MANAGED_PROFILE_UNAVAILABLE = null; + public static String ACTION_MANAGED_PROFILE_UNLOCKED = null; + public static String ACTION_MANAGE_NETWORK_USAGE = null; + public static String ACTION_MANAGE_PACKAGE_STORAGE = null; + public static String ACTION_MEDIA_BAD_REMOVAL = null; + public static String ACTION_MEDIA_BUTTON = null; + public static String ACTION_MEDIA_CHECKING = null; + public static String ACTION_MEDIA_EJECT = null; + public static String ACTION_MEDIA_MOUNTED = null; + public static String ACTION_MEDIA_NOFS = null; + public static String ACTION_MEDIA_REMOVED = null; + public static String ACTION_MEDIA_SCANNER_FINISHED = null; + public static String ACTION_MEDIA_SCANNER_SCAN_FILE = null; + public static String ACTION_MEDIA_SCANNER_STARTED = null; + public static String ACTION_MEDIA_SHARED = null; + public static String ACTION_MEDIA_UNMOUNTABLE = null; + public static String ACTION_MEDIA_UNMOUNTED = null; + public static String ACTION_MY_PACKAGE_REPLACED = null; + public static String ACTION_MY_PACKAGE_SUSPENDED = null; + public static String ACTION_MY_PACKAGE_UNSUSPENDED = null; + public static String ACTION_NEW_OUTGOING_CALL = null; + public static String ACTION_OPEN_DOCUMENT = null; + public static String ACTION_OPEN_DOCUMENT_TREE = null; + public static String ACTION_PACKAGES_SUSPENDED = null; + public static String ACTION_PACKAGES_UNSUSPENDED = null; + public static String ACTION_PACKAGE_ADDED = null; + public static String ACTION_PACKAGE_CHANGED = null; + public static String ACTION_PACKAGE_DATA_CLEARED = null; + public static String ACTION_PACKAGE_FIRST_LAUNCH = null; + public static String ACTION_PACKAGE_FULLY_REMOVED = null; + public static String ACTION_PACKAGE_INSTALL = null; + public static String ACTION_PACKAGE_NEEDS_VERIFICATION = null; + public static String ACTION_PACKAGE_REMOVED = null; + public static String ACTION_PACKAGE_REPLACED = null; + public static String ACTION_PACKAGE_RESTARTED = null; + public static String ACTION_PACKAGE_VERIFIED = null; + public static String ACTION_PASTE = null; + public static String ACTION_PICK = null; + public static String ACTION_PICK_ACTIVITY = null; + public static String ACTION_POWER_CONNECTED = null; + public static String ACTION_POWER_DISCONNECTED = null; + public static String ACTION_POWER_USAGE_SUMMARY = null; + public static String ACTION_PROCESS_TEXT = null; + public static String ACTION_PROVIDER_CHANGED = null; + public static String ACTION_QUICK_CLOCK = null; + public static String ACTION_QUICK_VIEW = null; + public static String ACTION_REBOOT = null; + public static String ACTION_RUN = null; + public static String ACTION_SCREEN_OFF = null; + public static String ACTION_SCREEN_ON = null; + public static String ACTION_SEARCH = null; + public static String ACTION_SEARCH_LONG_PRESS = null; + public static String ACTION_SEND = null; + public static String ACTION_SENDTO = null; + public static String ACTION_SEND_MULTIPLE = null; + public static String ACTION_SET_WALLPAPER = null; + public static String ACTION_SHOW_APP_INFO = null; + public static String ACTION_SHUTDOWN = null; + public static String ACTION_SYNC = null; + public static String ACTION_SYSTEM_TUTORIAL = null; + public static String ACTION_TIMEZONE_CHANGED = null; + public static String ACTION_TIME_CHANGED = null; + public static String ACTION_TIME_TICK = null; + public static String ACTION_TRANSLATE = null; + public static String ACTION_UID_REMOVED = null; + public static String ACTION_UMS_CONNECTED = null; + public static String ACTION_UMS_DISCONNECTED = null; + public static String ACTION_UNINSTALL_PACKAGE = null; + public static String ACTION_USER_BACKGROUND = null; + public static String ACTION_USER_FOREGROUND = null; + public static String ACTION_USER_INITIALIZE = null; + public static String ACTION_USER_PRESENT = null; + public static String ACTION_USER_UNLOCKED = null; + public static String ACTION_VIEW = null; + public static String ACTION_VIEW_LOCUS = null; + public static String ACTION_VIEW_PERMISSION_USAGE = null; + public static String ACTION_VOICE_COMMAND = null; + public static String ACTION_WALLPAPER_CHANGED = null; + public static String ACTION_WEB_SEARCH = null; + public static String CATEGORY_ACCESSIBILITY_SHORTCUT_TARGET = null; + public static String CATEGORY_ALTERNATIVE = null; + public static String CATEGORY_APP_BROWSER = null; + public static String CATEGORY_APP_CALCULATOR = null; + public static String CATEGORY_APP_CALENDAR = null; + public static String CATEGORY_APP_CONTACTS = null; + public static String CATEGORY_APP_EMAIL = null; + public static String CATEGORY_APP_FILES = null; + public static String CATEGORY_APP_GALLERY = null; + public static String CATEGORY_APP_MAPS = null; + public static String CATEGORY_APP_MARKET = null; + public static String CATEGORY_APP_MESSAGING = null; + public static String CATEGORY_APP_MUSIC = null; + public static String CATEGORY_BROWSABLE = null; + public static String CATEGORY_CAR_DOCK = null; + public static String CATEGORY_CAR_MODE = null; + public static String CATEGORY_DEFAULT = null; + public static String CATEGORY_DESK_DOCK = null; + public static String CATEGORY_DEVELOPMENT_PREFERENCE = null; + public static String CATEGORY_EMBED = null; + public static String CATEGORY_FRAMEWORK_INSTRUMENTATION_TEST = null; + public static String CATEGORY_HE_DESK_DOCK = null; + public static String CATEGORY_HOME = null; + public static String CATEGORY_INFO = null; + public static String CATEGORY_LAUNCHER = null; + public static String CATEGORY_LEANBACK_LAUNCHER = null; + public static String CATEGORY_LE_DESK_DOCK = null; + public static String CATEGORY_MONKEY = null; + public static String CATEGORY_OPENABLE = null; + public static String CATEGORY_PREFERENCE = null; + public static String CATEGORY_SAMPLE_CODE = null; + public static String CATEGORY_SECONDARY_HOME = null; + public static String CATEGORY_SELECTED_ALTERNATIVE = null; + public static String CATEGORY_TAB = null; + public static String CATEGORY_TEST = null; + public static String CATEGORY_TYPED_OPENABLE = null; + public static String CATEGORY_UNIT_TEST = null; + public static String CATEGORY_VOICE = null; + public static String CATEGORY_VR_HOME = null; + public static String EXTRA_ALARM_COUNT = null; + public static String EXTRA_ALLOW_MULTIPLE = null; + public static String EXTRA_ALLOW_REPLACE = null; + public static String EXTRA_ALTERNATE_INTENTS = null; + public static String EXTRA_ASSIST_CONTEXT = null; + public static String EXTRA_ASSIST_INPUT_DEVICE_ID = null; + public static String EXTRA_ASSIST_INPUT_HINT_KEYBOARD = null; + public static String EXTRA_ASSIST_PACKAGE = null; + public static String EXTRA_ASSIST_UID = null; + public static String EXTRA_AUTO_LAUNCH_SINGLE_CHOICE = null; + public static String EXTRA_BCC = null; + public static String EXTRA_BUG_REPORT = null; + public static String EXTRA_CC = null; + public static String EXTRA_CHANGED_COMPONENT_NAME = null; + public static String EXTRA_CHANGED_COMPONENT_NAME_LIST = null; + public static String EXTRA_CHANGED_PACKAGE_LIST = null; + public static String EXTRA_CHANGED_UID_LIST = null; + public static String EXTRA_CHOOSER_REFINEMENT_INTENT_SENDER = null; + public static String EXTRA_CHOOSER_TARGETS = null; + public static String EXTRA_CHOSEN_COMPONENT = null; + public static String EXTRA_CHOSEN_COMPONENT_INTENT_SENDER = null; + public static String EXTRA_COMPONENT_NAME = null; + public static String EXTRA_CONTENT_ANNOTATIONS = null; + public static String EXTRA_CONTENT_QUERY = null; + public static String EXTRA_DATA_REMOVED = null; + public static String EXTRA_DOCK_STATE = null; + public static String EXTRA_DONT_KILL_APP = null; + public static String EXTRA_DURATION_MILLIS = null; + public static String EXTRA_EMAIL = null; + public static String EXTRA_EXCLUDE_COMPONENTS = null; + public static String EXTRA_FROM_STORAGE = null; + public static String EXTRA_HTML_TEXT = null; + public static String EXTRA_INDEX = null; + public static String EXTRA_INITIAL_INTENTS = null; + public static String EXTRA_INSTALLER_PACKAGE_NAME = null; + public static String EXTRA_INTENT = null; + public static String EXTRA_KEY_EVENT = null; + public static String EXTRA_LOCAL_ONLY = null; + public static String EXTRA_LOCUS_ID = null; + public static String EXTRA_MIME_TYPES = null; + public static String EXTRA_NOT_UNKNOWN_SOURCE = null; + public static String EXTRA_ORIGINATING_URI = null; + public static String EXTRA_PACKAGE_NAME = null; + public static String EXTRA_PHONE_NUMBER = null; + public static String EXTRA_PROCESS_TEXT = null; + public static String EXTRA_PROCESS_TEXT_READONLY = null; + public static String EXTRA_QUICK_VIEW_FEATURES = null; + public static String EXTRA_QUIET_MODE = null; + public static String EXTRA_REFERRER = null; + public static String EXTRA_REFERRER_NAME = null; + public static String EXTRA_REMOTE_INTENT_TOKEN = null; + public static String EXTRA_REPLACEMENT_EXTRAS = null; + public static String EXTRA_REPLACING = null; + public static String EXTRA_RESTRICTIONS_BUNDLE = null; + public static String EXTRA_RESTRICTIONS_INTENT = null; + public static String EXTRA_RESTRICTIONS_LIST = null; + public static String EXTRA_RESULT_RECEIVER = null; + public static String EXTRA_RETURN_RESULT = null; + public static String EXTRA_SHORTCUT_ICON = null; + public static String EXTRA_SHORTCUT_ICON_RESOURCE = null; + public static String EXTRA_SHORTCUT_ID = null; + public static String EXTRA_SHORTCUT_INTENT = null; + public static String EXTRA_SHORTCUT_NAME = null; + public static String EXTRA_SHUTDOWN_USERSPACE_ONLY = null; + public static String EXTRA_SPLIT_NAME = null; + public static String EXTRA_STREAM = null; + public static String EXTRA_SUBJECT = null; + public static String EXTRA_SUSPENDED_PACKAGE_EXTRAS = null; + public static String EXTRA_TEMPLATE = null; + public static String EXTRA_TEXT = null; + public static String EXTRA_TIME = null; + public static String EXTRA_TIMEZONE = null; + public static String EXTRA_TITLE = null; + public static String EXTRA_UID = null; + public static String EXTRA_USER = null; + public static String METADATA_DOCK_HOME = null; + public static String normalizeMimeType(String p0){ return null; } + public static int EXTRA_DOCK_STATE_CAR = 0; + public static int EXTRA_DOCK_STATE_DESK = 0; + public static int EXTRA_DOCK_STATE_HE_DESK = 0; + public static int EXTRA_DOCK_STATE_LE_DESK = 0; + public static int EXTRA_DOCK_STATE_UNDOCKED = 0; + public static int FILL_IN_ACTION = 0; + public static int FILL_IN_CATEGORIES = 0; + public static int FILL_IN_CLIP_DATA = 0; + public static int FILL_IN_COMPONENT = 0; + public static int FILL_IN_DATA = 0; + public static int FILL_IN_IDENTIFIER = 0; + public static int FILL_IN_PACKAGE = 0; + public static int FILL_IN_SELECTOR = 0; + public static int FILL_IN_SOURCE_BOUNDS = 0; + public static int FLAG_ACTIVITY_BROUGHT_TO_FRONT = 0; + public static int FLAG_ACTIVITY_CLEAR_TASK = 0; + public static int FLAG_ACTIVITY_CLEAR_TOP = 0; + public static int FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET = 0; + public static int FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS = 0; + public static int FLAG_ACTIVITY_FORWARD_RESULT = 0; + public static int FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY = 0; + public static int FLAG_ACTIVITY_LAUNCH_ADJACENT = 0; + public static int FLAG_ACTIVITY_MATCH_EXTERNAL = 0; + public static int FLAG_ACTIVITY_MULTIPLE_TASK = 0; + public static int FLAG_ACTIVITY_NEW_DOCUMENT = 0; + public static int FLAG_ACTIVITY_NEW_TASK = 0; + public static int FLAG_ACTIVITY_NO_ANIMATION = 0; + public static int FLAG_ACTIVITY_NO_HISTORY = 0; + public static int FLAG_ACTIVITY_NO_USER_ACTION = 0; + public static int FLAG_ACTIVITY_PREVIOUS_IS_TOP = 0; + public static int FLAG_ACTIVITY_REORDER_TO_FRONT = 0; + public static int FLAG_ACTIVITY_REQUIRE_DEFAULT = 0; + public static int FLAG_ACTIVITY_REQUIRE_NON_BROWSER = 0; + public static int FLAG_ACTIVITY_RESET_TASK_IF_NEEDED = 0; + public static int FLAG_ACTIVITY_RETAIN_IN_RECENTS = 0; + public static int FLAG_ACTIVITY_SINGLE_TOP = 0; + public static int FLAG_ACTIVITY_TASK_ON_HOME = 0; + public static int FLAG_DEBUG_LOG_RESOLUTION = 0; + public static int FLAG_DIRECT_BOOT_AUTO = 0; + public static int FLAG_EXCLUDE_STOPPED_PACKAGES = 0; + public static int FLAG_FROM_BACKGROUND = 0; + public static int FLAG_GRANT_PERSISTABLE_URI_PERMISSION = 0; + public static int FLAG_GRANT_PREFIX_URI_PERMISSION = 0; + public static int FLAG_GRANT_READ_URI_PERMISSION = 0; + public static int FLAG_GRANT_WRITE_URI_PERMISSION = 0; + public static int FLAG_INCLUDE_STOPPED_PACKAGES = 0; + public static int FLAG_RECEIVER_FOREGROUND = 0; + public static int FLAG_RECEIVER_NO_ABORT = 0; + public static int FLAG_RECEIVER_REGISTERED_ONLY = 0; + public static int FLAG_RECEIVER_REPLACE_PENDING = 0; + public static int FLAG_RECEIVER_VISIBLE_TO_INSTANT_APPS = 0; + public static int URI_ALLOW_UNSAFE = 0; + public static int URI_ANDROID_APP_SCHEME = 0; + public static int URI_INTENT_SCHEME = 0; + public void readFromParcel(Parcel p0){} + public void removeCategory(String p0){} + public void removeExtra(String p0){} + public void removeFlags(int p0){} + public void setClipData(ClipData p0){} + public void setExtrasClassLoader(ClassLoader p0){} + public void setSelector(Intent p0){} + public void setSourceBounds(Rect p0){} + public void writeToParcel(Parcel p0, int p1){} } diff --git a/java/ql/test/stubs/android/android/content/IntentFilter.java b/java/ql/test/stubs/android/android/content/IntentFilter.java new file mode 100644 index 00000000000..99de8481e14 --- /dev/null +++ b/java/ql/test/stubs/android/android/content/IntentFilter.java @@ -0,0 +1,104 @@ +// Generated automatically from android.content.IntentFilter for testing purposes + +package android.content; + +import android.content.ContentResolver; +import android.content.Intent; +import android.net.Uri; +import android.os.Parcel; +import android.os.Parcelable; +import android.os.PatternMatcher; +import android.util.AndroidException; +import android.util.Printer; +import java.util.Iterator; +import java.util.Set; +import org.xmlpull.v1.XmlPullParser; +import org.xmlpull.v1.XmlSerializer; + +public class IntentFilter implements Parcelable +{ + public IntentFilter(){} + public IntentFilter(IntentFilter p0){} + public IntentFilter(String p0){} + public IntentFilter(String p0, String p1){} + public final IntentFilter.AuthorityEntry getDataAuthority(int p0){ return null; } + public final Iterator authoritiesIterator(){ return null; } + public final Iterator pathsIterator(){ return null; } + public final Iterator schemeSpecificPartsIterator(){ return null; } + public final Iterator actionsIterator(){ return null; } + public final Iterator categoriesIterator(){ return null; } + public final Iterator schemesIterator(){ return null; } + public final Iterator typesIterator(){ return null; } + public final PatternMatcher getDataPath(int p0){ return null; } + public final PatternMatcher getDataSchemeSpecificPart(int p0){ return null; } + public final String getAction(int p0){ return null; } + public final String getCategory(int p0){ return null; } + public final String getDataScheme(int p0){ return null; } + public final String getDataType(int p0){ return null; } + public final String matchCategories(Set p0){ return null; } + public final boolean hasAction(String p0){ return false; } + public final boolean hasCategory(String p0){ return false; } + public final boolean hasDataAuthority(Uri p0){ return false; } + public final boolean hasDataPath(String p0){ return false; } + public final boolean hasDataScheme(String p0){ return false; } + public final boolean hasDataSchemeSpecificPart(String p0){ return false; } + public final boolean hasDataType(String p0){ return false; } + public final boolean matchAction(String p0){ return false; } + public final int countActions(){ return 0; } + public final int countCategories(){ return 0; } + public final int countDataAuthorities(){ return 0; } + public final int countDataPaths(){ return 0; } + public final int countDataSchemeSpecificParts(){ return 0; } + public final int countDataSchemes(){ return 0; } + public final int countDataTypes(){ return 0; } + public final int describeContents(){ return 0; } + public final int getPriority(){ return 0; } + public final int match(ContentResolver p0, Intent p1, boolean p2, String p3){ return 0; } + public final int match(String p0, String p1, String p2, Uri p3, Set p4, String p5){ return 0; } + public final int matchData(String p0, String p1, Uri p2){ return 0; } + public final int matchDataAuthority(Uri p0){ return 0; } + public final void addAction(String p0){} + public final void addCategory(String p0){} + public final void addDataAuthority(String p0, String p1){} + public final void addDataPath(String p0, int p1){} + public final void addDataScheme(String p0){} + public final void addDataSchemeSpecificPart(String p0, int p1){} + public final void addDataType(String p0){} + public final void setPriority(int p0){} + public final void writeToParcel(Parcel p0, int p1){} + public static IntentFilter create(String p0, String p1){ return null; } + public static Parcelable.Creator CREATOR = null; + public static int MATCH_ADJUSTMENT_MASK = 0; + public static int MATCH_ADJUSTMENT_NORMAL = 0; + public static int MATCH_CATEGORY_EMPTY = 0; + public static int MATCH_CATEGORY_HOST = 0; + public static int MATCH_CATEGORY_MASK = 0; + public static int MATCH_CATEGORY_PATH = 0; + public static int MATCH_CATEGORY_PORT = 0; + public static int MATCH_CATEGORY_SCHEME = 0; + public static int MATCH_CATEGORY_SCHEME_SPECIFIC_PART = 0; + public static int MATCH_CATEGORY_TYPE = 0; + public static int NO_MATCH_ACTION = 0; + public static int NO_MATCH_CATEGORY = 0; + public static int NO_MATCH_DATA = 0; + public static int NO_MATCH_TYPE = 0; + public static int SYSTEM_HIGH_PRIORITY = 0; + public static int SYSTEM_LOW_PRIORITY = 0; + public void dump(Printer p0, String p1){} + public void readFromXml(XmlPullParser p0){} + public void writeToXml(XmlSerializer p0){} + static public class AuthorityEntry + { + protected AuthorityEntry() {} + public AuthorityEntry(String p0, String p1){} + public String getHost(){ return null; } + public boolean equals(Object p0){ return false; } + public int getPort(){ return 0; } + public int match(Uri p0){ return 0; } + } + static public class MalformedMimeTypeException extends AndroidException + { + public MalformedMimeTypeException(){} + public MalformedMimeTypeException(String p0){} + } +} diff --git a/java/ql/test/stubs/android/android/content/IntentSender.java b/java/ql/test/stubs/android/android/content/IntentSender.java new file mode 100644 index 00000000000..6008341e802 --- /dev/null +++ b/java/ql/test/stubs/android/android/content/IntentSender.java @@ -0,0 +1,40 @@ +// Generated automatically from android.content.IntentSender for testing purposes + +package android.content; + +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; +import android.os.Handler; +import android.os.Parcel; +import android.os.Parcelable; +import android.os.UserHandle; +import android.util.AndroidException; + +public class IntentSender implements Parcelable +{ + public String getCreatorPackage(){ return null; } + public String getTargetPackage(){ return null; } + public String toString(){ return null; } + public UserHandle getCreatorUserHandle(){ return null; } + public boolean equals(Object p0){ return false; } + public int describeContents(){ return 0; } + public int getCreatorUid(){ return 0; } + public int hashCode(){ return 0; } + public static IntentSender readIntentSenderOrNullFromParcel(Parcel p0){ return null; } + public static Parcelable.Creator CREATOR = null; + public static void writeIntentSenderOrNullToParcel(IntentSender p0, Parcel p1){} + public void sendIntent(Context p0, int p1, Intent p2, IntentSender.OnFinished p3, Handler p4){} + public void sendIntent(Context p0, int p1, Intent p2, IntentSender.OnFinished p3, Handler p4, String p5){} + public void writeToParcel(Parcel p0, int p1){} + static public class SendIntentException extends AndroidException + { + public SendIntentException(){} + public SendIntentException(Exception p0){} + public SendIntentException(String p0){} + } + static public interface OnFinished + { + void onSendFinished(IntentSender p0, Intent p1, int p2, String p3, Bundle p4); + } +} diff --git a/java/ql/test/stubs/android/android/content/PeriodicSync.java b/java/ql/test/stubs/android/android/content/PeriodicSync.java new file mode 100644 index 00000000000..6842c06d22f --- /dev/null +++ b/java/ql/test/stubs/android/android/content/PeriodicSync.java @@ -0,0 +1,23 @@ +// Generated automatically from android.content.PeriodicSync for testing purposes + +package android.content; + +import android.accounts.Account; +import android.os.Bundle; +import android.os.Parcel; +import android.os.Parcelable; + +public class PeriodicSync implements Parcelable +{ + protected PeriodicSync() {} + public PeriodicSync(Account p0, String p1, Bundle p2, long p3){} + public String toString(){ return null; } + public boolean equals(Object p0){ return false; } + public final Account account = null; + public final Bundle extras = null; + public final String authority = null; + public final long period = 0; + public int describeContents(){ return 0; } + public static Parcelable.Creator CREATOR = null; + public void writeToParcel(Parcel p0, int p1){} +} diff --git a/java/ql/test/stubs/android/android/content/ServiceConnection.java b/java/ql/test/stubs/android/android/content/ServiceConnection.java new file mode 100644 index 00000000000..1b8534539c4 --- /dev/null +++ b/java/ql/test/stubs/android/android/content/ServiceConnection.java @@ -0,0 +1,14 @@ +// Generated automatically from android.content.ServiceConnection for testing purposes + +package android.content; + +import android.content.ComponentName; +import android.os.IBinder; + +public interface ServiceConnection +{ + default void onBindingDied(ComponentName p0){} + default void onNullBinding(ComponentName p0){} + void onServiceConnected(ComponentName p0, IBinder p1); + void onServiceDisconnected(ComponentName p0); +} diff --git a/java/ql/test/stubs/android/android/content/SharedPreferences.java b/java/ql/test/stubs/android/android/content/SharedPreferences.java new file mode 100644 index 00000000000..90cdc242501 --- /dev/null +++ b/java/ql/test/stubs/android/android/content/SharedPreferences.java @@ -0,0 +1,38 @@ +// Generated automatically from android.content.SharedPreferences for testing purposes + +package android.content; + +import java.util.Map; +import java.util.Set; + +public interface SharedPreferences +{ + Map getAll(); + Set getStringSet(String p0, Set p1); + SharedPreferences.Editor edit(); + String getString(String p0, String p1); + boolean contains(String p0); + boolean getBoolean(String p0, boolean p1); + float getFloat(String p0, float p1); + int getInt(String p0, int p1); + long getLong(String p0, long p1); + static public interface Editor + { + SharedPreferences.Editor clear(); + SharedPreferences.Editor putBoolean(String p0, boolean p1); + SharedPreferences.Editor putFloat(String p0, float p1); + SharedPreferences.Editor putInt(String p0, int p1); + SharedPreferences.Editor putLong(String p0, long p1); + SharedPreferences.Editor putString(String p0, String p1); + SharedPreferences.Editor putStringSet(String p0, Set p1); + SharedPreferences.Editor remove(String p0); + boolean commit(); + void apply(); + } + static public interface OnSharedPreferenceChangeListener + { + void onSharedPreferenceChanged(SharedPreferences p0, String p1); + } + void registerOnSharedPreferenceChangeListener(SharedPreferences.OnSharedPreferenceChangeListener p0); + void unregisterOnSharedPreferenceChangeListener(SharedPreferences.OnSharedPreferenceChangeListener p0); +} diff --git a/java/ql/test/stubs/android/android/content/SyncAdapterType.java b/java/ql/test/stubs/android/android/content/SyncAdapterType.java new file mode 100644 index 00000000000..b05e030a6c3 --- /dev/null +++ b/java/ql/test/stubs/android/android/content/SyncAdapterType.java @@ -0,0 +1,28 @@ +// Generated automatically from android.content.SyncAdapterType for testing purposes + +package android.content; + +import android.os.Parcel; +import android.os.Parcelable; + +public class SyncAdapterType implements Parcelable +{ + protected SyncAdapterType() {} + public String getSettingsActivity(){ return null; } + public String toString(){ return null; } + public SyncAdapterType(Parcel p0){} + public SyncAdapterType(String p0, String p1, boolean p2, boolean p3){} + public boolean allowParallelSyncs(){ return false; } + public boolean equals(Object p0){ return false; } + public boolean isAlwaysSyncable(){ return false; } + public boolean isUserVisible(){ return false; } + public boolean supportsUploading(){ return false; } + public final String accountType = null; + public final String authority = null; + public final boolean isKey = false; + public int describeContents(){ return 0; } + public int hashCode(){ return 0; } + public static Parcelable.Creator CREATOR = null; + public static SyncAdapterType newKey(String p0, String p1){ return null; } + public void writeToParcel(Parcel p0, int p1){} +} diff --git a/java/ql/test/stubs/android/android/content/SyncInfo.java b/java/ql/test/stubs/android/android/content/SyncInfo.java new file mode 100644 index 00000000000..500c5bd97bc --- /dev/null +++ b/java/ql/test/stubs/android/android/content/SyncInfo.java @@ -0,0 +1,16 @@ +// Generated automatically from android.content.SyncInfo for testing purposes + +package android.content; + +import android.accounts.Account; +import android.os.Parcel; +import android.os.Parcelable; + +public class SyncInfo implements Parcelable +{ + public final Account account = null; + public final String authority = null; + public final long startTime = 0; + public int describeContents(){ return 0; } + public void writeToParcel(Parcel p0, int p1){} +} diff --git a/java/ql/test/stubs/android/android/content/SyncRequest.java b/java/ql/test/stubs/android/android/content/SyncRequest.java new file mode 100644 index 00000000000..29a07c4b5a7 --- /dev/null +++ b/java/ql/test/stubs/android/android/content/SyncRequest.java @@ -0,0 +1,13 @@ +// Generated automatically from android.content.SyncRequest for testing purposes + +package android.content; + +import android.os.Parcel; +import android.os.Parcelable; + +public class SyncRequest implements Parcelable +{ + public int describeContents(){ return 0; } + public static Parcelable.Creator CREATOR = null; + public void writeToParcel(Parcel p0, int p1){} +} diff --git a/java/ql/test/stubs/android/android/content/SyncStatusObserver.java b/java/ql/test/stubs/android/android/content/SyncStatusObserver.java new file mode 100644 index 00000000000..534cd549be0 --- /dev/null +++ b/java/ql/test/stubs/android/android/content/SyncStatusObserver.java @@ -0,0 +1,9 @@ +// Generated automatically from android.content.SyncStatusObserver for testing purposes + +package android.content; + + +public interface SyncStatusObserver +{ + void onStatusChanged(int p0); +} diff --git a/java/ql/test/stubs/android/android/content/UriPermission.java b/java/ql/test/stubs/android/android/content/UriPermission.java new file mode 100644 index 00000000000..efa9f6e7b95 --- /dev/null +++ b/java/ql/test/stubs/android/android/content/UriPermission.java @@ -0,0 +1,20 @@ +// Generated automatically from android.content.UriPermission for testing purposes + +package android.content; + +import android.net.Uri; +import android.os.Parcel; +import android.os.Parcelable; + +public class UriPermission implements Parcelable +{ + public String toString(){ return null; } + public Uri getUri(){ return null; } + public boolean isReadPermission(){ return false; } + public boolean isWritePermission(){ return false; } + public int describeContents(){ return 0; } + public long getPersistedTime(){ return 0; } + public static Parcelable.Creator CREATOR = null; + public static long INVALID_TIME = 0; + public void writeToParcel(Parcel p0, int p1){} +} diff --git a/java/ql/test/stubs/android/android/content/pm/ActivityInfo.java b/java/ql/test/stubs/android/android/content/pm/ActivityInfo.java new file mode 100644 index 00000000000..ed0debb0412 --- /dev/null +++ b/java/ql/test/stubs/android/android/content/pm/ActivityInfo.java @@ -0,0 +1,112 @@ +// Generated automatically from android.content.pm.ActivityInfo for testing purposes + +package android.content.pm; + +import android.content.pm.ComponentInfo; +import android.os.Parcel; +import android.os.Parcelable; +import android.util.Printer; + +public class ActivityInfo extends ComponentInfo implements Parcelable +{ + public ActivityInfo(){} + public ActivityInfo(ActivityInfo p0){} + public ActivityInfo.WindowLayout windowLayout = null; + public String parentActivityName = null; + public String permission = null; + public String targetActivity = null; + public String taskAffinity = null; + public String toString(){ return null; } + public final int getThemeResource(){ return 0; } + public int colorMode = 0; + public int configChanges = 0; + public int describeContents(){ return 0; } + public int documentLaunchMode = 0; + public int flags = 0; + public int launchMode = 0; + public int maxRecents = 0; + public int persistableMode = 0; + public int screenOrientation = 0; + public int softInputMode = 0; + public int theme = 0; + public int uiOptions = 0; + public static Parcelable.Creator CREATOR = null; + public static int COLOR_MODE_DEFAULT = 0; + public static int COLOR_MODE_HDR = 0; + public static int COLOR_MODE_WIDE_COLOR_GAMUT = 0; + public static int CONFIG_COLOR_MODE = 0; + public static int CONFIG_DENSITY = 0; + public static int CONFIG_FONT_SCALE = 0; + public static int CONFIG_KEYBOARD = 0; + public static int CONFIG_KEYBOARD_HIDDEN = 0; + public static int CONFIG_LAYOUT_DIRECTION = 0; + public static int CONFIG_LOCALE = 0; + public static int CONFIG_MCC = 0; + public static int CONFIG_MNC = 0; + public static int CONFIG_NAVIGATION = 0; + public static int CONFIG_ORIENTATION = 0; + public static int CONFIG_SCREEN_LAYOUT = 0; + public static int CONFIG_SCREEN_SIZE = 0; + public static int CONFIG_SMALLEST_SCREEN_SIZE = 0; + public static int CONFIG_TOUCHSCREEN = 0; + public static int CONFIG_UI_MODE = 0; + public static int DOCUMENT_LAUNCH_ALWAYS = 0; + public static int DOCUMENT_LAUNCH_INTO_EXISTING = 0; + public static int DOCUMENT_LAUNCH_NEVER = 0; + public static int DOCUMENT_LAUNCH_NONE = 0; + public static int FLAG_ALLOW_TASK_REPARENTING = 0; + public static int FLAG_ALWAYS_RETAIN_TASK_STATE = 0; + public static int FLAG_AUTO_REMOVE_FROM_RECENTS = 0; + public static int FLAG_CLEAR_TASK_ON_LAUNCH = 0; + public static int FLAG_ENABLE_VR_MODE = 0; + public static int FLAG_EXCLUDE_FROM_RECENTS = 0; + public static int FLAG_FINISH_ON_CLOSE_SYSTEM_DIALOGS = 0; + public static int FLAG_FINISH_ON_TASK_LAUNCH = 0; + public static int FLAG_HARDWARE_ACCELERATED = 0; + public static int FLAG_IMMERSIVE = 0; + public static int FLAG_MULTIPROCESS = 0; + public static int FLAG_NO_HISTORY = 0; + public static int FLAG_PREFER_MINIMAL_POST_PROCESSING = 0; + public static int FLAG_RELINQUISH_TASK_IDENTITY = 0; + public static int FLAG_RESUME_WHILE_PAUSING = 0; + public static int FLAG_SINGLE_USER = 0; + public static int FLAG_STATE_NOT_NEEDED = 0; + public static int LAUNCH_MULTIPLE = 0; + public static int LAUNCH_SINGLE_INSTANCE = 0; + public static int LAUNCH_SINGLE_TASK = 0; + public static int LAUNCH_SINGLE_TOP = 0; + public static int PERSIST_ACROSS_REBOOTS = 0; + public static int PERSIST_NEVER = 0; + public static int PERSIST_ROOT_ONLY = 0; + public static int SCREEN_ORIENTATION_BEHIND = 0; + public static int SCREEN_ORIENTATION_FULL_SENSOR = 0; + public static int SCREEN_ORIENTATION_FULL_USER = 0; + public static int SCREEN_ORIENTATION_LANDSCAPE = 0; + public static int SCREEN_ORIENTATION_LOCKED = 0; + public static int SCREEN_ORIENTATION_NOSENSOR = 0; + public static int SCREEN_ORIENTATION_PORTRAIT = 0; + public static int SCREEN_ORIENTATION_REVERSE_LANDSCAPE = 0; + public static int SCREEN_ORIENTATION_REVERSE_PORTRAIT = 0; + public static int SCREEN_ORIENTATION_SENSOR = 0; + public static int SCREEN_ORIENTATION_SENSOR_LANDSCAPE = 0; + public static int SCREEN_ORIENTATION_SENSOR_PORTRAIT = 0; + public static int SCREEN_ORIENTATION_UNSPECIFIED = 0; + public static int SCREEN_ORIENTATION_USER = 0; + public static int SCREEN_ORIENTATION_USER_LANDSCAPE = 0; + public static int SCREEN_ORIENTATION_USER_PORTRAIT = 0; + public static int UIOPTION_SPLIT_ACTION_BAR_WHEN_NARROW = 0; + public void dump(Printer p0, String p1){} + public void writeToParcel(Parcel p0, int p1){} + static public class WindowLayout + { + protected WindowLayout() {} + public WindowLayout(int p0, float p1, int p2, float p3, int p4, int p5, int p6){} + public final float heightFraction = 0; + public final float widthFraction = 0; + public final int gravity = 0; + public final int height = 0; + public final int minHeight = 0; + public final int minWidth = 0; + public final int width = 0; + } +} diff --git a/java/ql/test/stubs/android/android/content/pm/ApplicationInfo.java b/java/ql/test/stubs/android/android/content/pm/ApplicationInfo.java new file mode 100644 index 00000000000..51fc3974933 --- /dev/null +++ b/java/ql/test/stubs/android/android/content/pm/ApplicationInfo.java @@ -0,0 +1,101 @@ +// Generated automatically from android.content.pm.ApplicationInfo for testing purposes + +package android.content.pm; + +import android.content.Context; +import android.content.pm.PackageItemInfo; +import android.content.pm.PackageManager; +import android.os.Parcel; +import android.os.Parcelable; +import android.util.Printer; +import java.util.UUID; + +public class ApplicationInfo extends PackageItemInfo implements Parcelable +{ + public ApplicationInfo(){} + public ApplicationInfo(ApplicationInfo p0){} + public CharSequence loadDescription(PackageManager p0){ return null; } + public String appComponentFactory = null; + public String backupAgentName = null; + public String className = null; + public String dataDir = null; + public String deviceProtectedDataDir = null; + public String manageSpaceActivityName = null; + public String nativeLibraryDir = null; + public String permission = null; + public String processName = null; + public String publicSourceDir = null; + public String sourceDir = null; + public String taskAffinity = null; + public String toString(){ return null; } + public String[] sharedLibraryFiles = null; + public String[] splitNames = null; + public String[] splitPublicSourceDirs = null; + public String[] splitSourceDirs = null; + public UUID storageUuid = null; + public boolean enabled = false; + public boolean isProfileableByShell(){ return false; } + public boolean isResourceOverlay(){ return false; } + public boolean isVirtualPreload(){ return false; } + public int category = 0; + public int compatibleWidthLimitDp = 0; + public int describeContents(){ return 0; } + public int descriptionRes = 0; + public int flags = 0; + public int getGwpAsanMode(){ return 0; } + public int largestWidthLimitDp = 0; + public int minSdkVersion = 0; + public int requiresSmallestWidthDp = 0; + public int targetSdkVersion = 0; + public int theme = 0; + public int uiOptions = 0; + public int uid = 0; + public static CharSequence getCategoryTitle(Context p0, int p1){ return null; } + public static Parcelable.Creator CREATOR = null; + public static int CATEGORY_AUDIO = 0; + public static int CATEGORY_GAME = 0; + public static int CATEGORY_IMAGE = 0; + public static int CATEGORY_MAPS = 0; + public static int CATEGORY_NEWS = 0; + public static int CATEGORY_PRODUCTIVITY = 0; + public static int CATEGORY_SOCIAL = 0; + public static int CATEGORY_UNDEFINED = 0; + public static int CATEGORY_VIDEO = 0; + public static int FLAG_ALLOW_BACKUP = 0; + public static int FLAG_ALLOW_CLEAR_USER_DATA = 0; + public static int FLAG_ALLOW_TASK_REPARENTING = 0; + public static int FLAG_DEBUGGABLE = 0; + public static int FLAG_EXTERNAL_STORAGE = 0; + public static int FLAG_EXTRACT_NATIVE_LIBS = 0; + public static int FLAG_FACTORY_TEST = 0; + public static int FLAG_FULL_BACKUP_ONLY = 0; + public static int FLAG_HARDWARE_ACCELERATED = 0; + public static int FLAG_HAS_CODE = 0; + public static int FLAG_INSTALLED = 0; + public static int FLAG_IS_DATA_ONLY = 0; + public static int FLAG_IS_GAME = 0; + public static int FLAG_KILL_AFTER_RESTORE = 0; + public static int FLAG_LARGE_HEAP = 0; + public static int FLAG_MULTIARCH = 0; + public static int FLAG_PERSISTENT = 0; + public static int FLAG_RESIZEABLE_FOR_SCREENS = 0; + public static int FLAG_RESTORE_ANY_VERSION = 0; + public static int FLAG_STOPPED = 0; + public static int FLAG_SUPPORTS_LARGE_SCREENS = 0; + public static int FLAG_SUPPORTS_NORMAL_SCREENS = 0; + public static int FLAG_SUPPORTS_RTL = 0; + public static int FLAG_SUPPORTS_SCREEN_DENSITIES = 0; + public static int FLAG_SUPPORTS_SMALL_SCREENS = 0; + public static int FLAG_SUPPORTS_XLARGE_SCREENS = 0; + public static int FLAG_SUSPENDED = 0; + public static int FLAG_SYSTEM = 0; + public static int FLAG_TEST_ONLY = 0; + public static int FLAG_UPDATED_SYSTEM_APP = 0; + public static int FLAG_USES_CLEARTEXT_TRAFFIC = 0; + public static int FLAG_VM_SAFE_MODE = 0; + public static int GWP_ASAN_ALWAYS = 0; + public static int GWP_ASAN_DEFAULT = 0; + public static int GWP_ASAN_NEVER = 0; + public void dump(Printer p0, String p1){} + public void writeToParcel(Parcel p0, int p1){} +} diff --git a/java/ql/test/stubs/android/android/content/pm/ChangedPackages.java b/java/ql/test/stubs/android/android/content/pm/ChangedPackages.java new file mode 100644 index 00000000000..08c10b13f3c --- /dev/null +++ b/java/ql/test/stubs/android/android/content/pm/ChangedPackages.java @@ -0,0 +1,18 @@ +// Generated automatically from android.content.pm.ChangedPackages for testing purposes + +package android.content.pm; + +import android.os.Parcel; +import android.os.Parcelable; +import java.util.List; + +public class ChangedPackages implements Parcelable +{ + protected ChangedPackages() {} + public ChangedPackages(int p0, List p1){} + public List getPackageNames(){ return null; } + public int describeContents(){ return 0; } + public int getSequenceNumber(){ return 0; } + public static Parcelable.Creator CREATOR = null; + public void writeToParcel(Parcel p0, int p1){} +} diff --git a/java/ql/test/stubs/android/android/content/pm/ComponentInfo.java b/java/ql/test/stubs/android/android/content/pm/ComponentInfo.java new file mode 100644 index 00000000000..fb92a43adbe --- /dev/null +++ b/java/ql/test/stubs/android/android/content/pm/ComponentInfo.java @@ -0,0 +1,29 @@ +// Generated automatically from android.content.pm.ComponentInfo for testing purposes + +package android.content.pm; + +import android.content.pm.ApplicationInfo; +import android.content.pm.PackageItemInfo; +import android.os.Parcel; +import android.util.Printer; + +public class ComponentInfo extends PackageItemInfo +{ + protected ComponentInfo(Parcel p0){} + protected void dumpBack(Printer p0, String p1){} + protected void dumpFront(Printer p0, String p1){} + public ApplicationInfo applicationInfo = null; + public ComponentInfo(){} + public ComponentInfo(ComponentInfo p0){} + public String processName = null; + public String splitName = null; + public boolean directBootAware = false; + public boolean enabled = false; + public boolean exported = false; + public boolean isEnabled(){ return false; } + public final int getBannerResource(){ return 0; } + public final int getIconResource(){ return 0; } + public final int getLogoResource(){ return 0; } + public int descriptionRes = 0; + public void writeToParcel(Parcel p0, int p1){} +} diff --git a/java/ql/test/stubs/android/android/content/pm/ConfigurationInfo.java b/java/ql/test/stubs/android/android/content/pm/ConfigurationInfo.java new file mode 100644 index 00000000000..ad178b8c6a3 --- /dev/null +++ b/java/ql/test/stubs/android/android/content/pm/ConfigurationInfo.java @@ -0,0 +1,25 @@ +// Generated automatically from android.content.pm.ConfigurationInfo for testing purposes + +package android.content.pm; + +import android.os.Parcel; +import android.os.Parcelable; + +public class ConfigurationInfo implements Parcelable +{ + public ConfigurationInfo(){} + public ConfigurationInfo(ConfigurationInfo p0){} + public String getGlEsVersion(){ return null; } + public String toString(){ return null; } + public int describeContents(){ return 0; } + public int reqGlEsVersion = 0; + public int reqInputFeatures = 0; + public int reqKeyboardType = 0; + public int reqNavigation = 0; + public int reqTouchScreen = 0; + public static Parcelable.Creator CREATOR = null; + public static int GL_ES_VERSION_UNDEFINED = 0; + public static int INPUT_FEATURE_FIVE_WAY_NAV = 0; + public static int INPUT_FEATURE_HARD_KEYBOARD = 0; + public void writeToParcel(Parcel p0, int p1){} +} diff --git a/java/ql/test/stubs/android/android/content/pm/FeatureGroupInfo.java b/java/ql/test/stubs/android/android/content/pm/FeatureGroupInfo.java new file mode 100644 index 00000000000..9cf6eaa172a --- /dev/null +++ b/java/ql/test/stubs/android/android/content/pm/FeatureGroupInfo.java @@ -0,0 +1,17 @@ +// Generated automatically from android.content.pm.FeatureGroupInfo for testing purposes + +package android.content.pm; + +import android.content.pm.FeatureInfo; +import android.os.Parcel; +import android.os.Parcelable; + +public class FeatureGroupInfo implements Parcelable +{ + public FeatureGroupInfo(){} + public FeatureGroupInfo(FeatureGroupInfo p0){} + public FeatureInfo[] features = null; + public int describeContents(){ return 0; } + public static Parcelable.Creator CREATOR = null; + public void writeToParcel(Parcel p0, int p1){} +} diff --git a/java/ql/test/stubs/android/android/content/pm/FeatureInfo.java b/java/ql/test/stubs/android/android/content/pm/FeatureInfo.java new file mode 100644 index 00000000000..5512590828f --- /dev/null +++ b/java/ql/test/stubs/android/android/content/pm/FeatureInfo.java @@ -0,0 +1,23 @@ +// Generated automatically from android.content.pm.FeatureInfo for testing purposes + +package android.content.pm; + +import android.os.Parcel; +import android.os.Parcelable; + +public class FeatureInfo implements Parcelable +{ + public FeatureInfo(){} + public FeatureInfo(FeatureInfo p0){} + public String getGlEsVersion(){ return null; } + public String name = null; + public String toString(){ return null; } + public int describeContents(){ return 0; } + public int flags = 0; + public int reqGlEsVersion = 0; + public int version = 0; + public static Parcelable.Creator CREATOR = null; + public static int FLAG_REQUIRED = 0; + public static int GL_ES_VERSION_UNDEFINED = 0; + public void writeToParcel(Parcel p0, int p1){} +} diff --git a/java/ql/test/stubs/android/android/content/pm/InstallSourceInfo.java b/java/ql/test/stubs/android/android/content/pm/InstallSourceInfo.java new file mode 100644 index 00000000000..85c503025d0 --- /dev/null +++ b/java/ql/test/stubs/android/android/content/pm/InstallSourceInfo.java @@ -0,0 +1,18 @@ +// Generated automatically from android.content.pm.InstallSourceInfo for testing purposes + +package android.content.pm; + +import android.content.pm.SigningInfo; +import android.os.Parcel; +import android.os.Parcelable; + +public class InstallSourceInfo implements Parcelable +{ + public SigningInfo getInitiatingPackageSigningInfo(){ return null; } + public String getInitiatingPackageName(){ return null; } + public String getInstallingPackageName(){ return null; } + public String getOriginatingPackageName(){ return null; } + public int describeContents(){ return 0; } + public static Parcelable.Creator CREATOR = null; + public void writeToParcel(Parcel p0, int p1){} +} diff --git a/java/ql/test/stubs/android/android/content/pm/InstrumentationInfo.java b/java/ql/test/stubs/android/android/content/pm/InstrumentationInfo.java new file mode 100644 index 00000000000..70063a09744 --- /dev/null +++ b/java/ql/test/stubs/android/android/content/pm/InstrumentationInfo.java @@ -0,0 +1,27 @@ +// Generated automatically from android.content.pm.InstrumentationInfo for testing purposes + +package android.content.pm; + +import android.content.pm.PackageItemInfo; +import android.os.Parcel; +import android.os.Parcelable; + +public class InstrumentationInfo extends PackageItemInfo implements Parcelable +{ + public InstrumentationInfo(){} + public InstrumentationInfo(InstrumentationInfo p0){} + public String dataDir = null; + public String publicSourceDir = null; + public String sourceDir = null; + public String targetPackage = null; + public String targetProcesses = null; + public String toString(){ return null; } + public String[] splitNames = null; + public String[] splitPublicSourceDirs = null; + public String[] splitSourceDirs = null; + public boolean functionalTest = false; + public boolean handleProfiling = false; + public int describeContents(){ return 0; } + public static Parcelable.Creator CREATOR = null; + public void writeToParcel(Parcel p0, int p1){} +} diff --git a/java/ql/test/stubs/android/android/content/pm/ModuleInfo.java b/java/ql/test/stubs/android/android/content/pm/ModuleInfo.java new file mode 100644 index 00000000000..c7aef5f7ac7 --- /dev/null +++ b/java/ql/test/stubs/android/android/content/pm/ModuleInfo.java @@ -0,0 +1,19 @@ +// Generated automatically from android.content.pm.ModuleInfo for testing purposes + +package android.content.pm; + +import android.os.Parcel; +import android.os.Parcelable; + +public class ModuleInfo implements Parcelable +{ + public CharSequence getName(){ return null; } + public String getPackageName(){ return null; } + public String toString(){ return null; } + public boolean equals(Object p0){ return false; } + public boolean isHidden(){ return false; } + public int describeContents(){ return 0; } + public int hashCode(){ return 0; } + public static Parcelable.Creator CREATOR = null; + public void writeToParcel(Parcel p0, int p1){} +} diff --git a/java/ql/test/stubs/android/android/content/pm/PackageInfo.java b/java/ql/test/stubs/android/android/content/pm/PackageInfo.java new file mode 100644 index 00000000000..566e8e73fbf --- /dev/null +++ b/java/ql/test/stubs/android/android/content/pm/PackageInfo.java @@ -0,0 +1,59 @@ +// Generated automatically from android.content.pm.PackageInfo for testing purposes + +package android.content.pm; + +import android.content.pm.ActivityInfo; +import android.content.pm.ApplicationInfo; +import android.content.pm.ConfigurationInfo; +import android.content.pm.FeatureGroupInfo; +import android.content.pm.FeatureInfo; +import android.content.pm.InstrumentationInfo; +import android.content.pm.PermissionInfo; +import android.content.pm.ProviderInfo; +import android.content.pm.ServiceInfo; +import android.content.pm.Signature; +import android.content.pm.SigningInfo; +import android.os.Parcel; +import android.os.Parcelable; + +public class PackageInfo implements Parcelable +{ + public ActivityInfo[] activities = null; + public ActivityInfo[] receivers = null; + public ApplicationInfo applicationInfo = null; + public ConfigurationInfo[] configPreferences = null; + public FeatureGroupInfo[] featureGroups = null; + public FeatureInfo[] reqFeatures = null; + public InstrumentationInfo[] instrumentation = null; + public PackageInfo(){} + public PermissionInfo[] permissions = null; + public ProviderInfo[] providers = null; + public ServiceInfo[] services = null; + public Signature[] signatures = null; + public SigningInfo signingInfo = null; + public String packageName = null; + public String sharedUserId = null; + public String toString(){ return null; } + public String versionName = null; + public String[] requestedPermissions = null; + public String[] splitNames = null; + public boolean isApex = false; + public int baseRevisionCode = 0; + public int describeContents(){ return 0; } + public int installLocation = 0; + public int sharedUserLabel = 0; + public int versionCode = 0; + public int[] gids = null; + public int[] requestedPermissionsFlags = null; + public int[] splitRevisionCodes = null; + public long firstInstallTime = 0; + public long getLongVersionCode(){ return 0; } + public long lastUpdateTime = 0; + public static Parcelable.Creator CREATOR = null; + public static int INSTALL_LOCATION_AUTO = 0; + public static int INSTALL_LOCATION_INTERNAL_ONLY = 0; + public static int INSTALL_LOCATION_PREFER_EXTERNAL = 0; + public static int REQUESTED_PERMISSION_GRANTED = 0; + public void setLongVersionCode(long p0){} + public void writeToParcel(Parcel p0, int p1){} +} diff --git a/java/ql/test/stubs/android/android/content/pm/PackageInstaller.java b/java/ql/test/stubs/android/android/content/pm/PackageInstaller.java new file mode 100644 index 00000000000..46337e28f60 --- /dev/null +++ b/java/ql/test/stubs/android/android/content/pm/PackageInstaller.java @@ -0,0 +1,151 @@ +// Generated automatically from android.content.pm.PackageInstaller for testing purposes + +package android.content.pm; + +import android.content.Intent; +import android.content.IntentSender; +import android.content.pm.VersionedPackage; +import android.graphics.Bitmap; +import android.net.Uri; +import android.os.Handler; +import android.os.Parcel; +import android.os.Parcelable; +import android.os.UserHandle; +import java.io.Closeable; +import java.io.InputStream; +import java.io.OutputStream; +import java.util.List; +import java.util.Set; + +public class PackageInstaller +{ + abstract static public class SessionCallback + { + public SessionCallback(){} + public abstract void onActiveChanged(int p0, boolean p1); + public abstract void onBadgingChanged(int p0); + public abstract void onCreated(int p0); + public abstract void onFinished(int p0, boolean p1); + public abstract void onProgressChanged(int p0, float p1); + } + public List getActiveStagedSessions(){ return null; } + public List getAllSessions(){ return null; } + public List getMySessions(){ return null; } + public List getStagedSessions(){ return null; } + public PackageInstaller.Session openSession(int p0){ return null; } + public PackageInstaller.SessionInfo getActiveStagedSession(){ return null; } + public PackageInstaller.SessionInfo getSessionInfo(int p0){ return null; } + public int createSession(PackageInstaller.SessionParams p0){ return 0; } + public static String ACTION_SESSION_COMMITTED = null; + public static String ACTION_SESSION_DETAILS = null; + public static String ACTION_SESSION_UPDATED = null; + public static String EXTRA_OTHER_PACKAGE_NAME = null; + public static String EXTRA_PACKAGE_NAME = null; + public static String EXTRA_SESSION = null; + public static String EXTRA_SESSION_ID = null; + public static String EXTRA_STATUS = null; + public static String EXTRA_STATUS_MESSAGE = null; + public static String EXTRA_STORAGE_PATH = null; + public static int STATUS_FAILURE = 0; + public static int STATUS_FAILURE_ABORTED = 0; + public static int STATUS_FAILURE_BLOCKED = 0; + public static int STATUS_FAILURE_CONFLICT = 0; + public static int STATUS_FAILURE_INCOMPATIBLE = 0; + public static int STATUS_FAILURE_INVALID = 0; + public static int STATUS_FAILURE_STORAGE = 0; + public static int STATUS_PENDING_USER_ACTION = 0; + public static int STATUS_SUCCESS = 0; + public void abandonSession(int p0){} + public void installExistingPackage(String p0, int p1, IntentSender p2){} + public void registerSessionCallback(PackageInstaller.SessionCallback p0){} + public void registerSessionCallback(PackageInstaller.SessionCallback p0, Handler p1){} + public void uninstall(String p0, IntentSender p1){} + public void uninstall(VersionedPackage p0, IntentSender p1){} + public void unregisterSessionCallback(PackageInstaller.SessionCallback p0){} + public void updateSessionAppIcon(int p0, Bitmap p1){} + public void updateSessionAppLabel(int p0, CharSequence p1){} + static public class Session implements Closeable + { + public InputStream openRead(String p0){ return null; } + public OutputStream openWrite(String p0, long p1, long p2){ return null; } + public String[] getNames(){ return null; } + public boolean isMultiPackage(){ return false; } + public boolean isStaged(){ return false; } + public int getParentSessionId(){ return 0; } + public int[] getChildSessionIds(){ return null; } + public void abandon(){} + public void addChildSessionId(int p0){} + public void close(){} + public void commit(IntentSender p0){} + public void fsync(OutputStream p0){} + public void removeChildSessionId(int p0){} + public void removeSplit(String p0){} + public void setStagingProgress(float p0){} + public void transfer(String p0){} + } + static public class SessionInfo implements Parcelable + { + public Bitmap getAppIcon(){ return null; } + public CharSequence getAppLabel(){ return null; } + public Intent createDetailsIntent(){ return null; } + public String getAppPackageName(){ return null; } + public String getInstallerPackageName(){ return null; } + public String getStagedSessionErrorMessage(){ return null; } + public Uri getOriginatingUri(){ return null; } + public Uri getReferrerUri(){ return null; } + public UserHandle getUser(){ return null; } + public boolean hasParentSessionId(){ return false; } + public boolean isActive(){ return false; } + public boolean isCommitted(){ return false; } + public boolean isMultiPackage(){ return false; } + public boolean isSealed(){ return false; } + public boolean isStaged(){ return false; } + public boolean isStagedSessionActive(){ return false; } + public boolean isStagedSessionApplied(){ return false; } + public boolean isStagedSessionFailed(){ return false; } + public boolean isStagedSessionReady(){ return false; } + public float getProgress(){ return 0; } + public int describeContents(){ return 0; } + public int getInstallLocation(){ return 0; } + public int getInstallReason(){ return 0; } + public int getMode(){ return 0; } + public int getOriginatingUid(){ return 0; } + public int getParentSessionId(){ return 0; } + public int getSessionId(){ return 0; } + public int getStagedSessionErrorCode(){ return 0; } + public int[] getChildSessionIds(){ return null; } + public long getCreatedMillis(){ return 0; } + public long getSize(){ return 0; } + public long getUpdatedMillis(){ return 0; } + public static Parcelable.Creator CREATOR = null; + public static int INVALID_ID = 0; + public static int STAGED_SESSION_ACTIVATION_FAILED = 0; + public static int STAGED_SESSION_NO_ERROR = 0; + public static int STAGED_SESSION_UNKNOWN = 0; + public static int STAGED_SESSION_VERIFICATION_FAILED = 0; + public void writeToParcel(Parcel p0, int p1){} + } + static public class SessionParams implements Parcelable + { + protected SessionParams() {} + public SessionParams(int p0){} + public int describeContents(){ return 0; } + public static Parcelable.Creator CREATOR = null; + public static Set RESTRICTED_PERMISSIONS_ALL = null; + public static int MODE_FULL_INSTALL = 0; + public static int MODE_INHERIT_EXISTING = 0; + public void setAppIcon(Bitmap p0){} + public void setAppLabel(CharSequence p0){} + public void setAppPackageName(String p0){} + public void setAutoRevokePermissionsMode(boolean p0){} + public void setInstallLocation(int p0){} + public void setInstallReason(int p0){} + public void setMultiPackage(){} + public void setOriginatingUid(int p0){} + public void setOriginatingUri(Uri p0){} + public void setReferrerUri(Uri p0){} + public void setSize(long p0){} + public void setWhitelistedRestrictedPermissions(Set p0){} + public void writeToParcel(Parcel p0, int p1){} + } +} diff --git a/java/ql/test/stubs/android/android/content/pm/PackageItemInfo.java b/java/ql/test/stubs/android/android/content/pm/PackageItemInfo.java new file mode 100644 index 00000000000..1d35a31f52b --- /dev/null +++ b/java/ql/test/stubs/android/android/content/pm/PackageItemInfo.java @@ -0,0 +1,34 @@ +// Generated automatically from android.content.pm.PackageItemInfo for testing purposes + +package android.content.pm; + +import android.content.pm.PackageManager; +import android.content.res.XmlResourceParser; +import android.graphics.drawable.Drawable; +import android.os.Bundle; +import android.os.Parcel; +import android.util.Printer; + +public class PackageItemInfo +{ + protected PackageItemInfo(Parcel p0){} + protected void dumpBack(Printer p0, String p1){} + protected void dumpFront(Printer p0, String p1){} + public Bundle metaData = null; + public CharSequence loadLabel(PackageManager p0){ return null; } + public CharSequence nonLocalizedLabel = null; + public Drawable loadBanner(PackageManager p0){ return null; } + public Drawable loadIcon(PackageManager p0){ return null; } + public Drawable loadLogo(PackageManager p0){ return null; } + public Drawable loadUnbadgedIcon(PackageManager p0){ return null; } + public PackageItemInfo(){} + public PackageItemInfo(PackageItemInfo p0){} + public String name = null; + public String packageName = null; + public XmlResourceParser loadXmlMetaData(PackageManager p0, String p1){ return null; } + public int banner = 0; + public int icon = 0; + public int labelRes = 0; + public int logo = 0; + public void writeToParcel(Parcel p0, int p1){} +} diff --git a/java/ql/test/stubs/android/android/content/pm/PackageManager.java b/java/ql/test/stubs/android/android/content/pm/PackageManager.java new file mode 100644 index 00000000000..73e82024984 --- /dev/null +++ b/java/ql/test/stubs/android/android/content/pm/PackageManager.java @@ -0,0 +1,331 @@ +// Generated automatically from android.content.pm.PackageManager for testing purposes + +package android.content.pm; + +import android.content.ComponentName; +import android.content.Intent; +import android.content.IntentFilter; +import android.content.pm.ActivityInfo; +import android.content.pm.ApplicationInfo; +import android.content.pm.ChangedPackages; +import android.content.pm.FeatureInfo; +import android.content.pm.InstallSourceInfo; +import android.content.pm.InstrumentationInfo; +import android.content.pm.ModuleInfo; +import android.content.pm.PackageInfo; +import android.content.pm.PackageInstaller; +import android.content.pm.PermissionGroupInfo; +import android.content.pm.PermissionInfo; +import android.content.pm.ProviderInfo; +import android.content.pm.ResolveInfo; +import android.content.pm.ServiceInfo; +import android.content.pm.SharedLibraryInfo; +import android.content.pm.VersionedPackage; +import android.content.res.Resources; +import android.content.res.XmlResourceParser; +import android.graphics.Rect; +import android.graphics.drawable.Drawable; +import android.os.Bundle; +import android.os.UserHandle; +import android.util.AndroidException; +import java.util.List; +import java.util.Set; + +abstract public class PackageManager +{ + public Bundle getSuspendedPackageAppExtras(){ return null; } + public CharSequence getBackgroundPermissionOptionLabel(){ return null; } + public InstallSourceInfo getInstallSourceInfo(String p0){ return null; } + public List getInstalledModules(int p0){ return null; } + public ModuleInfo getModuleInfo(String p0, int p1){ return null; } + public PackageInfo getPackageArchiveInfo(String p0, int p1){ return null; } + public PackageManager(){} + public Set getMimeGroup(String p0){ return null; } + public Set getWhitelistedRestrictedPermissions(String p0, int p1){ return null; } + public abstract ActivityInfo getActivityInfo(ComponentName p0, int p1); + public abstract ActivityInfo getReceiverInfo(ComponentName p0, int p1); + public abstract ApplicationInfo getApplicationInfo(String p0, int p1); + public abstract ChangedPackages getChangedPackages(int p0); + public abstract CharSequence getApplicationLabel(ApplicationInfo p0); + public abstract CharSequence getText(String p0, int p1, ApplicationInfo p2); + public abstract CharSequence getUserBadgedLabel(CharSequence p0, UserHandle p1); + public abstract Drawable getActivityBanner(ComponentName p0); + public abstract Drawable getActivityBanner(Intent p0); + public abstract Drawable getActivityIcon(ComponentName p0); + public abstract Drawable getActivityIcon(Intent p0); + public abstract Drawable getActivityLogo(ComponentName p0); + public abstract Drawable getActivityLogo(Intent p0); + public abstract Drawable getApplicationBanner(ApplicationInfo p0); + public abstract Drawable getApplicationBanner(String p0); + public abstract Drawable getApplicationIcon(ApplicationInfo p0); + public abstract Drawable getApplicationIcon(String p0); + public abstract Drawable getApplicationLogo(ApplicationInfo p0); + public abstract Drawable getApplicationLogo(String p0); + public abstract Drawable getDefaultActivityIcon(); + public abstract Drawable getDrawable(String p0, int p1, ApplicationInfo p2); + public abstract Drawable getUserBadgedDrawableForDensity(Drawable p0, UserHandle p1, Rect p2, int p3); + public abstract Drawable getUserBadgedIcon(Drawable p0, UserHandle p1); + public abstract FeatureInfo[] getSystemAvailableFeatures(); + public abstract InstrumentationInfo getInstrumentationInfo(ComponentName p0, int p1); + public abstract Intent getLaunchIntentForPackage(String p0); + public abstract Intent getLeanbackLaunchIntentForPackage(String p0); + public abstract List getInstalledApplications(int p0); + public abstract List queryInstrumentation(String p0, int p1); + public abstract List getInstalledPackages(int p0); + public abstract List getPackagesHoldingPermissions(String[] p0, int p1); + public abstract List getPreferredPackages(int p0); + public abstract List getAllPermissionGroups(int p0); + public abstract List queryPermissionsByGroup(String p0, int p1); + public abstract List queryContentProviders(String p0, int p1, int p2); + public abstract List queryBroadcastReceivers(Intent p0, int p1); + public abstract List queryIntentActivities(Intent p0, int p1); + public abstract List queryIntentActivityOptions(ComponentName p0, Intent[] p1, Intent p2, int p3); + public abstract List queryIntentContentProviders(Intent p0, int p1); + public abstract List queryIntentServices(Intent p0, int p1); + public abstract List getSharedLibraries(int p0); + public abstract PackageInfo getPackageInfo(String p0, int p1); + public abstract PackageInfo getPackageInfo(VersionedPackage p0, int p1); + public abstract PackageInstaller getPackageInstaller(); + public abstract PermissionGroupInfo getPermissionGroupInfo(String p0, int p1); + public abstract PermissionInfo getPermissionInfo(String p0, int p1); + public abstract ProviderInfo getProviderInfo(ComponentName p0, int p1); + public abstract ProviderInfo resolveContentProvider(String p0, int p1); + public abstract ResolveInfo resolveActivity(Intent p0, int p1); + public abstract ResolveInfo resolveService(Intent p0, int p1); + public abstract Resources getResourcesForActivity(ComponentName p0); + public abstract Resources getResourcesForApplication(ApplicationInfo p0); + public abstract Resources getResourcesForApplication(String p0); + public abstract ServiceInfo getServiceInfo(ComponentName p0, int p1); + public abstract String getInstallerPackageName(String p0); + public abstract String getNameForUid(int p0); + public abstract String[] canonicalToCurrentPackageNames(String[] p0); + public abstract String[] currentToCanonicalPackageNames(String[] p0); + public abstract String[] getPackagesForUid(int p0); + public abstract String[] getSystemSharedLibraryNames(); + public abstract XmlResourceParser getXml(String p0, int p1, ApplicationInfo p2); + public abstract boolean addPermission(PermissionInfo p0); + public abstract boolean addPermissionAsync(PermissionInfo p0); + public abstract boolean canRequestPackageInstalls(); + public abstract boolean hasSystemFeature(String p0); + public abstract boolean hasSystemFeature(String p0, int p1); + public abstract boolean isInstantApp(); + public abstract boolean isInstantApp(String p0); + public abstract boolean isPermissionRevokedByPolicy(String p0, String p1); + public abstract boolean isSafeMode(); + public abstract byte[] getInstantAppCookie(); + public abstract int checkPermission(String p0, String p1); + public abstract int checkSignatures(String p0, String p1); + public abstract int checkSignatures(int p0, int p1); + public abstract int getApplicationEnabledSetting(String p0); + public abstract int getComponentEnabledSetting(ComponentName p0); + public abstract int getInstantAppCookieMaxBytes(); + public abstract int getPackageUid(String p0, int p1); + public abstract int getPreferredActivities(List p0, List p1, String p2); + public abstract int[] getPackageGids(String p0); + public abstract int[] getPackageGids(String p0, int p1); + public abstract void addPackageToPreferred(String p0); + public abstract void addPreferredActivity(IntentFilter p0, int p1, ComponentName[] p2, ComponentName p3); + public abstract void clearInstantAppCookie(); + public abstract void clearPackagePreferredActivities(String p0); + public abstract void extendVerificationTimeout(int p0, int p1, long p2); + public abstract void removePackageFromPreferred(String p0); + public abstract void removePermission(String p0); + public abstract void setApplicationCategoryHint(String p0, int p1); + public abstract void setApplicationEnabledSetting(String p0, int p1, int p2); + public abstract void setComponentEnabledSetting(ComponentName p0, int p1, int p2); + public abstract void setInstallerPackageName(String p0, String p1); + public abstract void updateInstantAppCookie(byte[] p0); + public abstract void verifyPendingInstall(int p0, int p1); + public boolean addWhitelistedRestrictedPermission(String p0, String p1, int p2){ return false; } + public boolean getSyntheticAppDetailsActivityEnabled(String p0){ return false; } + public boolean hasSigningCertificate(String p0, byte[] p1, int p2){ return false; } + public boolean hasSigningCertificate(int p0, byte[] p1, int p2){ return false; } + public boolean isAutoRevokeWhitelisted(){ return false; } + public boolean isAutoRevokeWhitelisted(String p0){ return false; } + public boolean isDefaultApplicationIcon(Drawable p0){ return false; } + public boolean isDeviceUpgrading(){ return false; } + public boolean isPackageSuspended(){ return false; } + public boolean isPackageSuspended(String p0){ return false; } + public boolean removeWhitelistedRestrictedPermission(String p0, String p1, int p2){ return false; } + public boolean setAutoRevokeWhitelisted(String p0, boolean p1){ return false; } + public static String EXTRA_VERIFICATION_ID = null; + public static String EXTRA_VERIFICATION_RESULT = null; + public static String FEATURE_ACTIVITIES_ON_SECONDARY_DISPLAYS = null; + public static String FEATURE_APP_WIDGETS = null; + public static String FEATURE_AUDIO_LOW_LATENCY = null; + public static String FEATURE_AUDIO_OUTPUT = null; + public static String FEATURE_AUDIO_PRO = null; + public static String FEATURE_AUTOFILL = null; + public static String FEATURE_AUTOMOTIVE = null; + public static String FEATURE_BACKUP = null; + public static String FEATURE_BLUETOOTH = null; + public static String FEATURE_BLUETOOTH_LE = null; + public static String FEATURE_CAMERA = null; + public static String FEATURE_CAMERA_ANY = null; + public static String FEATURE_CAMERA_AR = null; + public static String FEATURE_CAMERA_AUTOFOCUS = null; + public static String FEATURE_CAMERA_CAPABILITY_MANUAL_POST_PROCESSING = null; + public static String FEATURE_CAMERA_CAPABILITY_MANUAL_SENSOR = null; + public static String FEATURE_CAMERA_CAPABILITY_RAW = null; + public static String FEATURE_CAMERA_CONCURRENT = null; + public static String FEATURE_CAMERA_EXTERNAL = null; + public static String FEATURE_CAMERA_FLASH = null; + public static String FEATURE_CAMERA_FRONT = null; + public static String FEATURE_CAMERA_LEVEL_FULL = null; + public static String FEATURE_CANT_SAVE_STATE = null; + public static String FEATURE_COMPANION_DEVICE_SETUP = null; + public static String FEATURE_CONNECTION_SERVICE = null; + public static String FEATURE_CONSUMER_IR = null; + public static String FEATURE_CONTROLS = null; + public static String FEATURE_DEVICE_ADMIN = null; + public static String FEATURE_EMBEDDED = null; + public static String FEATURE_ETHERNET = null; + public static String FEATURE_FACE = null; + public static String FEATURE_FAKETOUCH = null; + public static String FEATURE_FAKETOUCH_MULTITOUCH_DISTINCT = null; + public static String FEATURE_FAKETOUCH_MULTITOUCH_JAZZHAND = null; + public static String FEATURE_FINGERPRINT = null; + public static String FEATURE_FREEFORM_WINDOW_MANAGEMENT = null; + public static String FEATURE_GAMEPAD = null; + public static String FEATURE_HIFI_SENSORS = null; + public static String FEATURE_HOME_SCREEN = null; + public static String FEATURE_INPUT_METHODS = null; + public static String FEATURE_IPSEC_TUNNELS = null; + public static String FEATURE_IRIS = null; + public static String FEATURE_LEANBACK = null; + public static String FEATURE_LEANBACK_ONLY = null; + public static String FEATURE_LIVE_TV = null; + public static String FEATURE_LIVE_WALLPAPER = null; + public static String FEATURE_LOCATION = null; + public static String FEATURE_LOCATION_GPS = null; + public static String FEATURE_LOCATION_NETWORK = null; + public static String FEATURE_MANAGED_USERS = null; + public static String FEATURE_MICROPHONE = null; + public static String FEATURE_MIDI = null; + public static String FEATURE_NFC = null; + public static String FEATURE_NFC_BEAM = null; + public static String FEATURE_NFC_HOST_CARD_EMULATION = null; + public static String FEATURE_NFC_HOST_CARD_EMULATION_NFCF = null; + public static String FEATURE_NFC_OFF_HOST_CARD_EMULATION_ESE = null; + public static String FEATURE_NFC_OFF_HOST_CARD_EMULATION_UICC = null; + public static String FEATURE_OPENGLES_EXTENSION_PACK = null; + public static String FEATURE_PC = null; + public static String FEATURE_PICTURE_IN_PICTURE = null; + public static String FEATURE_PRINTING = null; + public static String FEATURE_RAM_LOW = null; + public static String FEATURE_RAM_NORMAL = null; + public static String FEATURE_SCREEN_LANDSCAPE = null; + public static String FEATURE_SCREEN_PORTRAIT = null; + public static String FEATURE_SECURELY_REMOVES_USERS = null; + public static String FEATURE_SECURE_LOCK_SCREEN = null; + public static String FEATURE_SENSOR_ACCELEROMETER = null; + public static String FEATURE_SENSOR_AMBIENT_TEMPERATURE = null; + public static String FEATURE_SENSOR_BAROMETER = null; + public static String FEATURE_SENSOR_COMPASS = null; + public static String FEATURE_SENSOR_GYROSCOPE = null; + public static String FEATURE_SENSOR_HEART_RATE = null; + public static String FEATURE_SENSOR_HEART_RATE_ECG = null; + public static String FEATURE_SENSOR_HINGE_ANGLE = null; + public static String FEATURE_SENSOR_LIGHT = null; + public static String FEATURE_SENSOR_PROXIMITY = null; + public static String FEATURE_SENSOR_RELATIVE_HUMIDITY = null; + public static String FEATURE_SENSOR_STEP_COUNTER = null; + public static String FEATURE_SENSOR_STEP_DETECTOR = null; + public static String FEATURE_SE_OMAPI_ESE = null; + public static String FEATURE_SE_OMAPI_SD = null; + public static String FEATURE_SE_OMAPI_UICC = null; + public static String FEATURE_SIP = null; + public static String FEATURE_SIP_VOIP = null; + public static String FEATURE_STRONGBOX_KEYSTORE = null; + public static String FEATURE_TELEPHONY = null; + public static String FEATURE_TELEPHONY_CDMA = null; + public static String FEATURE_TELEPHONY_EUICC = null; + public static String FEATURE_TELEPHONY_GSM = null; + public static String FEATURE_TELEPHONY_IMS = null; + public static String FEATURE_TELEPHONY_MBMS = null; + public static String FEATURE_TELEVISION = null; + public static String FEATURE_TOUCHSCREEN = null; + public static String FEATURE_TOUCHSCREEN_MULTITOUCH = null; + public static String FEATURE_TOUCHSCREEN_MULTITOUCH_DISTINCT = null; + public static String FEATURE_TOUCHSCREEN_MULTITOUCH_JAZZHAND = null; + public static String FEATURE_USB_ACCESSORY = null; + public static String FEATURE_USB_HOST = null; + public static String FEATURE_VERIFIED_BOOT = null; + public static String FEATURE_VR_HEADTRACKING = null; + public static String FEATURE_VR_MODE = null; + public static String FEATURE_VR_MODE_HIGH_PERFORMANCE = null; + public static String FEATURE_VULKAN_DEQP_LEVEL = null; + public static String FEATURE_VULKAN_HARDWARE_COMPUTE = null; + public static String FEATURE_VULKAN_HARDWARE_LEVEL = null; + public static String FEATURE_VULKAN_HARDWARE_VERSION = null; + public static String FEATURE_WATCH = null; + public static String FEATURE_WEBVIEW = null; + public static String FEATURE_WIFI = null; + public static String FEATURE_WIFI_AWARE = null; + public static String FEATURE_WIFI_DIRECT = null; + public static String FEATURE_WIFI_PASSPOINT = null; + public static String FEATURE_WIFI_RTT = null; + public static int CERT_INPUT_RAW_X509 = 0; + public static int CERT_INPUT_SHA256 = 0; + public static int COMPONENT_ENABLED_STATE_DEFAULT = 0; + public static int COMPONENT_ENABLED_STATE_DISABLED = 0; + public static int COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED = 0; + public static int COMPONENT_ENABLED_STATE_DISABLED_USER = 0; + public static int COMPONENT_ENABLED_STATE_ENABLED = 0; + public static int DONT_KILL_APP = 0; + public static int FLAG_PERMISSION_WHITELIST_INSTALLER = 0; + public static int FLAG_PERMISSION_WHITELIST_SYSTEM = 0; + public static int FLAG_PERMISSION_WHITELIST_UPGRADE = 0; + public static int GET_ACTIVITIES = 0; + public static int GET_CONFIGURATIONS = 0; + public static int GET_DISABLED_COMPONENTS = 0; + public static int GET_DISABLED_UNTIL_USED_COMPONENTS = 0; + public static int GET_GIDS = 0; + public static int GET_INSTRUMENTATION = 0; + public static int GET_INTENT_FILTERS = 0; + public static int GET_META_DATA = 0; + public static int GET_PERMISSIONS = 0; + public static int GET_PROVIDERS = 0; + public static int GET_RECEIVERS = 0; + public static int GET_RESOLVED_FILTER = 0; + public static int GET_SERVICES = 0; + public static int GET_SHARED_LIBRARY_FILES = 0; + public static int GET_SIGNATURES = 0; + public static int GET_SIGNING_CERTIFICATES = 0; + public static int GET_UNINSTALLED_PACKAGES = 0; + public static int GET_URI_PERMISSION_PATTERNS = 0; + public static int INSTALL_REASON_DEVICE_RESTORE = 0; + public static int INSTALL_REASON_DEVICE_SETUP = 0; + public static int INSTALL_REASON_POLICY = 0; + public static int INSTALL_REASON_UNKNOWN = 0; + public static int INSTALL_REASON_USER = 0; + public static int MATCH_ALL = 0; + public static int MATCH_APEX = 0; + public static int MATCH_DEFAULT_ONLY = 0; + public static int MATCH_DIRECT_BOOT_AUTO = 0; + public static int MATCH_DIRECT_BOOT_AWARE = 0; + public static int MATCH_DIRECT_BOOT_UNAWARE = 0; + public static int MATCH_DISABLED_COMPONENTS = 0; + public static int MATCH_DISABLED_UNTIL_USED_COMPONENTS = 0; + public static int MATCH_SYSTEM_ONLY = 0; + public static int MATCH_UNINSTALLED_PACKAGES = 0; + public static int PERMISSION_DENIED = 0; + public static int PERMISSION_GRANTED = 0; + public static int SIGNATURE_FIRST_NOT_SIGNED = 0; + public static int SIGNATURE_MATCH = 0; + public static int SIGNATURE_NEITHER_SIGNED = 0; + public static int SIGNATURE_NO_MATCH = 0; + public static int SIGNATURE_SECOND_NOT_SIGNED = 0; + public static int SIGNATURE_UNKNOWN_PACKAGE = 0; + public static int SYNCHRONOUS = 0; + public static int VERIFICATION_ALLOW = 0; + public static int VERIFICATION_REJECT = 0; + public static int VERSION_CODE_HIGHEST = 0; + public static long MAXIMUM_VERIFICATION_TIMEOUT = 0; + public void setMimeGroup(String p0, Set p1){} + static public class NameNotFoundException extends AndroidException + { + public NameNotFoundException(){} + public NameNotFoundException(String p0){} + } +} diff --git a/java/ql/test/stubs/android/android/content/pm/PathPermission.java b/java/ql/test/stubs/android/android/content/pm/PathPermission.java new file mode 100644 index 00000000000..455adfe5be7 --- /dev/null +++ b/java/ql/test/stubs/android/android/content/pm/PathPermission.java @@ -0,0 +1,18 @@ +// Generated automatically from android.content.pm.PathPermission for testing purposes + +package android.content.pm; + +import android.os.Parcel; +import android.os.Parcelable; +import android.os.PatternMatcher; + +public class PathPermission extends PatternMatcher +{ + protected PathPermission() {} + public PathPermission(Parcel p0){} + public PathPermission(String p0, int p1, String p2, String p3){} + public String getReadPermission(){ return null; } + public String getWritePermission(){ return null; } + public static Parcelable.Creator CREATOR = null; + public void writeToParcel(Parcel p0, int p1){} +} diff --git a/java/ql/test/stubs/android/android/content/pm/PermissionGroupInfo.java b/java/ql/test/stubs/android/android/content/pm/PermissionGroupInfo.java new file mode 100644 index 00000000000..a74934de52f --- /dev/null +++ b/java/ql/test/stubs/android/android/content/pm/PermissionGroupInfo.java @@ -0,0 +1,24 @@ +// Generated automatically from android.content.pm.PermissionGroupInfo for testing purposes + +package android.content.pm; + +import android.content.pm.PackageItemInfo; +import android.content.pm.PackageManager; +import android.os.Parcel; +import android.os.Parcelable; + +public class PermissionGroupInfo extends PackageItemInfo implements Parcelable +{ + public CharSequence loadDescription(PackageManager p0){ return null; } + public CharSequence nonLocalizedDescription = null; + public PermissionGroupInfo(){} + public PermissionGroupInfo(PermissionGroupInfo p0){} + public String toString(){ return null; } + public int describeContents(){ return 0; } + public int descriptionRes = 0; + public int flags = 0; + public int priority = 0; + public static Parcelable.Creator CREATOR = null; + public static int FLAG_PERSONAL_INFO = 0; + public void writeToParcel(Parcel p0, int p1){} +} diff --git a/java/ql/test/stubs/android/android/content/pm/PermissionInfo.java b/java/ql/test/stubs/android/android/content/pm/PermissionInfo.java new file mode 100644 index 00000000000..2c95bb9af7a --- /dev/null +++ b/java/ql/test/stubs/android/android/content/pm/PermissionInfo.java @@ -0,0 +1,48 @@ +// Generated automatically from android.content.pm.PermissionInfo for testing purposes + +package android.content.pm; + +import android.content.pm.PackageItemInfo; +import android.content.pm.PackageManager; +import android.os.Parcel; +import android.os.Parcelable; + +public class PermissionInfo extends PackageItemInfo implements Parcelable +{ + public CharSequence loadDescription(PackageManager p0){ return null; } + public CharSequence nonLocalizedDescription = null; + public PermissionInfo(){} + public PermissionInfo(PermissionInfo p0){} + public String group = null; + public String toString(){ return null; } + public int describeContents(){ return 0; } + public int descriptionRes = 0; + public int flags = 0; + public int getProtection(){ return 0; } + public int getProtectionFlags(){ return 0; } + public int protectionLevel = 0; + public static Parcelable.Creator CREATOR = null; + public static int FLAG_COSTS_MONEY = 0; + public static int FLAG_HARD_RESTRICTED = 0; + public static int FLAG_IMMUTABLY_RESTRICTED = 0; + public static int FLAG_INSTALLED = 0; + public static int FLAG_SOFT_RESTRICTED = 0; + public static int PROTECTION_DANGEROUS = 0; + public static int PROTECTION_FLAG_APPOP = 0; + public static int PROTECTION_FLAG_DEVELOPMENT = 0; + public static int PROTECTION_FLAG_INSTALLER = 0; + public static int PROTECTION_FLAG_INSTANT = 0; + public static int PROTECTION_FLAG_PRE23 = 0; + public static int PROTECTION_FLAG_PREINSTALLED = 0; + public static int PROTECTION_FLAG_PRIVILEGED = 0; + public static int PROTECTION_FLAG_RUNTIME_ONLY = 0; + public static int PROTECTION_FLAG_SETUP = 0; + public static int PROTECTION_FLAG_SYSTEM = 0; + public static int PROTECTION_FLAG_VERIFIER = 0; + public static int PROTECTION_MASK_BASE = 0; + public static int PROTECTION_MASK_FLAGS = 0; + public static int PROTECTION_NORMAL = 0; + public static int PROTECTION_SIGNATURE = 0; + public static int PROTECTION_SIGNATURE_OR_SYSTEM = 0; + public void writeToParcel(Parcel p0, int p1){} +} diff --git a/java/ql/test/stubs/android/android/content/pm/ProviderInfo.java b/java/ql/test/stubs/android/android/content/pm/ProviderInfo.java new file mode 100644 index 00000000000..93b694cae59 --- /dev/null +++ b/java/ql/test/stubs/android/android/content/pm/ProviderInfo.java @@ -0,0 +1,33 @@ +// Generated automatically from android.content.pm.ProviderInfo for testing purposes + +package android.content.pm; + +import android.content.pm.ComponentInfo; +import android.content.pm.PathPermission; +import android.os.Parcel; +import android.os.Parcelable; +import android.os.PatternMatcher; +import android.util.Printer; + +public class ProviderInfo extends ComponentInfo implements Parcelable +{ + public PathPermission[] pathPermissions = null; + public PatternMatcher[] uriPermissionPatterns = null; + public ProviderInfo(){} + public ProviderInfo(ProviderInfo p0){} + public String authority = null; + public String readPermission = null; + public String toString(){ return null; } + public String writePermission = null; + public boolean forceUriPermissions = false; + public boolean grantUriPermissions = false; + public boolean isSyncable = false; + public boolean multiprocess = false; + public int describeContents(){ return 0; } + public int flags = 0; + public int initOrder = 0; + public static Parcelable.Creator CREATOR = null; + public static int FLAG_SINGLE_USER = 0; + public void dump(Printer p0, String p1){} + public void writeToParcel(Parcel p0, int p1){} +} diff --git a/java/ql/test/stubs/android/android/content/pm/ResolveInfo.java b/java/ql/test/stubs/android/android/content/pm/ResolveInfo.java new file mode 100644 index 00000000000..3ed20df0d38 --- /dev/null +++ b/java/ql/test/stubs/android/android/content/pm/ResolveInfo.java @@ -0,0 +1,42 @@ +// Generated automatically from android.content.pm.ResolveInfo for testing purposes + +package android.content.pm; + +import android.content.IntentFilter; +import android.content.pm.ActivityInfo; +import android.content.pm.PackageManager; +import android.content.pm.ProviderInfo; +import android.content.pm.ServiceInfo; +import android.graphics.drawable.Drawable; +import android.os.Parcel; +import android.os.Parcelable; +import android.util.Printer; + +public class ResolveInfo implements Parcelable +{ + public ActivityInfo activityInfo = null; + public CharSequence loadLabel(PackageManager p0){ return null; } + public CharSequence nonLocalizedLabel = null; + public Drawable loadIcon(PackageManager p0){ return null; } + public IntentFilter filter = null; + public ProviderInfo providerInfo = null; + public ResolveInfo(){} + public ResolveInfo(ResolveInfo p0){} + public ServiceInfo serviceInfo = null; + public String resolvePackageName = null; + public String toString(){ return null; } + public boolean isCrossProfileIntentForwarderActivity(){ return false; } + public boolean isDefault = false; + public boolean isInstantAppAvailable = false; + public final int getIconResource(){ return 0; } + public int describeContents(){ return 0; } + public int icon = 0; + public int labelRes = 0; + public int match = 0; + public int preferredOrder = 0; + public int priority = 0; + public int specificIndex = 0; + public static Parcelable.Creator CREATOR = null; + public void dump(Printer p0, String p1){} + public void writeToParcel(Parcel p0, int p1){} +} diff --git a/java/ql/test/stubs/android/android/content/pm/ServiceInfo.java b/java/ql/test/stubs/android/android/content/pm/ServiceInfo.java new file mode 100644 index 00000000000..6044d4af7bb --- /dev/null +++ b/java/ql/test/stubs/android/android/content/pm/ServiceInfo.java @@ -0,0 +1,37 @@ +// Generated automatically from android.content.pm.ServiceInfo for testing purposes + +package android.content.pm; + +import android.content.pm.ComponentInfo; +import android.os.Parcel; +import android.os.Parcelable; +import android.util.Printer; + +public class ServiceInfo extends ComponentInfo implements Parcelable +{ + public ServiceInfo(){} + public ServiceInfo(ServiceInfo p0){} + public String permission = null; + public String toString(){ return null; } + public int describeContents(){ return 0; } + public int flags = 0; + public int getForegroundServiceType(){ return 0; } + public static Parcelable.Creator CREATOR = null; + public static int FLAG_EXTERNAL_SERVICE = 0; + public static int FLAG_ISOLATED_PROCESS = 0; + public static int FLAG_SINGLE_USER = 0; + public static int FLAG_STOP_WITH_TASK = 0; + public static int FLAG_USE_APP_ZYGOTE = 0; + public static int FOREGROUND_SERVICE_TYPE_CAMERA = 0; + public static int FOREGROUND_SERVICE_TYPE_CONNECTED_DEVICE = 0; + public static int FOREGROUND_SERVICE_TYPE_DATA_SYNC = 0; + public static int FOREGROUND_SERVICE_TYPE_LOCATION = 0; + public static int FOREGROUND_SERVICE_TYPE_MANIFEST = 0; + public static int FOREGROUND_SERVICE_TYPE_MEDIA_PLAYBACK = 0; + public static int FOREGROUND_SERVICE_TYPE_MEDIA_PROJECTION = 0; + public static int FOREGROUND_SERVICE_TYPE_MICROPHONE = 0; + public static int FOREGROUND_SERVICE_TYPE_NONE = 0; + public static int FOREGROUND_SERVICE_TYPE_PHONE_CALL = 0; + public void dump(Printer p0, String p1){} + public void writeToParcel(Parcel p0, int p1){} +} diff --git a/java/ql/test/stubs/android/android/content/pm/SharedLibraryInfo.java b/java/ql/test/stubs/android/android/content/pm/SharedLibraryInfo.java new file mode 100644 index 00000000000..10928af2a23 --- /dev/null +++ b/java/ql/test/stubs/android/android/content/pm/SharedLibraryInfo.java @@ -0,0 +1,26 @@ +// Generated automatically from android.content.pm.SharedLibraryInfo for testing purposes + +package android.content.pm; + +import android.content.pm.VersionedPackage; +import android.os.Parcel; +import android.os.Parcelable; +import java.util.List; + +public class SharedLibraryInfo implements Parcelable +{ + public List getDependentPackages(){ return null; } + public String getName(){ return null; } + public String toString(){ return null; } + public VersionedPackage getDeclaringPackage(){ return null; } + public int describeContents(){ return 0; } + public int getType(){ return 0; } + public int getVersion(){ return 0; } + public long getLongVersion(){ return 0; } + public static Parcelable.Creator CREATOR = null; + public static int TYPE_BUILTIN = 0; + public static int TYPE_DYNAMIC = 0; + public static int TYPE_STATIC = 0; + public static int VERSION_UNDEFINED = 0; + public void writeToParcel(Parcel p0, int p1){} +} diff --git a/java/ql/test/stubs/android/android/content/pm/Signature.java b/java/ql/test/stubs/android/android/content/pm/Signature.java new file mode 100644 index 00000000000..2f26fb9636e --- /dev/null +++ b/java/ql/test/stubs/android/android/content/pm/Signature.java @@ -0,0 +1,22 @@ +// Generated automatically from android.content.pm.Signature for testing purposes + +package android.content.pm; + +import android.os.Parcel; +import android.os.Parcelable; + +public class Signature implements Parcelable +{ + protected Signature() {} + public Signature(String p0){} + public Signature(byte[] p0){} + public String toCharsString(){ return null; } + public boolean equals(Object p0){ return false; } + public byte[] toByteArray(){ return null; } + public char[] toChars(){ return null; } + public char[] toChars(char[] p0, int[] p1){ return null; } + public int describeContents(){ return 0; } + public int hashCode(){ return 0; } + public static Parcelable.Creator CREATOR = null; + public void writeToParcel(Parcel p0, int p1){} +} diff --git a/java/ql/test/stubs/android/android/content/pm/SigningInfo.java b/java/ql/test/stubs/android/android/content/pm/SigningInfo.java new file mode 100644 index 00000000000..56aadea159a --- /dev/null +++ b/java/ql/test/stubs/android/android/content/pm/SigningInfo.java @@ -0,0 +1,20 @@ +// Generated automatically from android.content.pm.SigningInfo for testing purposes + +package android.content.pm; + +import android.content.pm.Signature; +import android.os.Parcel; +import android.os.Parcelable; + +public class SigningInfo implements Parcelable +{ + public Signature[] getApkContentsSigners(){ return null; } + public Signature[] getSigningCertificateHistory(){ return null; } + public SigningInfo(){} + public SigningInfo(SigningInfo p0){} + public boolean hasMultipleSigners(){ return false; } + public boolean hasPastSigningCertificates(){ return false; } + public int describeContents(){ return 0; } + public static Parcelable.Creator CREATOR = null; + public void writeToParcel(Parcel p0, int p1){} +} diff --git a/java/ql/test/stubs/android/android/content/pm/VersionedPackage.java b/java/ql/test/stubs/android/android/content/pm/VersionedPackage.java new file mode 100644 index 00000000000..4d4e37f54bc --- /dev/null +++ b/java/ql/test/stubs/android/android/content/pm/VersionedPackage.java @@ -0,0 +1,22 @@ +// Generated automatically from android.content.pm.VersionedPackage for testing purposes + +package android.content.pm; + +import android.os.Parcel; +import android.os.Parcelable; + +public class VersionedPackage implements Parcelable +{ + protected VersionedPackage() {} + public String getPackageName(){ return null; } + public String toString(){ return null; } + public VersionedPackage(String p0, int p1){} + public VersionedPackage(String p0, long p1){} + public boolean equals(Object p0){ return false; } + public int describeContents(){ return 0; } + public int getVersionCode(){ return 0; } + public int hashCode(){ return 0; } + public long getLongVersionCode(){ return 0; } + public static Parcelable.Creator CREATOR = null; + public void writeToParcel(Parcel p0, int p1){} +} diff --git a/java/ql/test/stubs/android/android/content/res/AssetFileDescriptor.java b/java/ql/test/stubs/android/android/content/res/AssetFileDescriptor.java new file mode 100644 index 00000000000..46e0266dd62 --- /dev/null +++ b/java/ql/test/stubs/android/android/content/res/AssetFileDescriptor.java @@ -0,0 +1,33 @@ +// Generated automatically from android.content.res.AssetFileDescriptor for testing purposes + +package android.content.res; + +import android.os.Bundle; +import android.os.Parcel; +import android.os.ParcelFileDescriptor; +import android.os.Parcelable; +import java.io.Closeable; +import java.io.FileDescriptor; +import java.io.FileInputStream; +import java.io.FileOutputStream; + +public class AssetFileDescriptor implements Closeable, Parcelable +{ + protected AssetFileDescriptor() {} + public AssetFileDescriptor(ParcelFileDescriptor p0, long p1, long p2){} + public AssetFileDescriptor(ParcelFileDescriptor p0, long p1, long p2, Bundle p3){} + public Bundle getExtras(){ return null; } + public FileDescriptor getFileDescriptor(){ return null; } + public FileInputStream createInputStream(){ return null; } + public FileOutputStream createOutputStream(){ return null; } + public ParcelFileDescriptor getParcelFileDescriptor(){ return null; } + public String toString(){ return null; } + public int describeContents(){ return 0; } + public long getDeclaredLength(){ return 0; } + public long getLength(){ return 0; } + public long getStartOffset(){ return 0; } + public static Parcelable.Creator CREATOR = null; + public static long UNKNOWN_LENGTH = 0; + public void close(){} + public void writeToParcel(Parcel p0, int p1){} +} diff --git a/java/ql/test/stubs/android/android/content/res/AssetManager.java b/java/ql/test/stubs/android/android/content/res/AssetManager.java new file mode 100644 index 00000000000..37926aa5c61 --- /dev/null +++ b/java/ql/test/stubs/android/android/content/res/AssetManager.java @@ -0,0 +1,26 @@ +// Generated automatically from android.content.res.AssetManager for testing purposes + +package android.content.res; + +import android.content.res.AssetFileDescriptor; +import android.content.res.XmlResourceParser; +import java.io.InputStream; + +public class AssetManager implements AutoCloseable +{ + protected void finalize(){} + public AssetFileDescriptor openFd(String p0){ return null; } + public AssetFileDescriptor openNonAssetFd(String p0){ return null; } + public AssetFileDescriptor openNonAssetFd(int p0, String p1){ return null; } + public InputStream open(String p0){ return null; } + public InputStream open(String p0, int p1){ return null; } + public String[] getLocales(){ return null; } + public String[] list(String p0){ return null; } + public XmlResourceParser openXmlResourceParser(String p0){ return null; } + public XmlResourceParser openXmlResourceParser(int p0, String p1){ return null; } + public static int ACCESS_BUFFER = 0; + public static int ACCESS_RANDOM = 0; + public static int ACCESS_STREAMING = 0; + public static int ACCESS_UNKNOWN = 0; + public void close(){} +} diff --git a/java/ql/test/stubs/android/android/content/res/ColorStateList.java b/java/ql/test/stubs/android/android/content/res/ColorStateList.java new file mode 100644 index 00000000000..cc6a1851767 --- /dev/null +++ b/java/ql/test/stubs/android/android/content/res/ColorStateList.java @@ -0,0 +1,27 @@ +// Generated automatically from android.content.res.ColorStateList for testing purposes + +package android.content.res; + +import android.content.res.Resources; +import android.os.Parcel; +import android.os.Parcelable; +import org.xmlpull.v1.XmlPullParser; + +public class ColorStateList implements Parcelable +{ + protected ColorStateList() {} + public ColorStateList withAlpha(int p0){ return null; } + public ColorStateList(int[][] p0, int[] p1){} + public String toString(){ return null; } + public boolean isOpaque(){ return false; } + public boolean isStateful(){ return false; } + public int describeContents(){ return 0; } + public int getChangingConfigurations(){ return 0; } + public int getColorForState(int[] p0, int p1){ return 0; } + public int getDefaultColor(){ return 0; } + public static ColorStateList createFromXml(Resources p0, XmlPullParser p1){ return null; } + public static ColorStateList createFromXml(Resources p0, XmlPullParser p1, Resources.Theme p2){ return null; } + public static ColorStateList valueOf(int p0){ return null; } + public static Parcelable.Creator CREATOR = null; + public void writeToParcel(Parcel p0, int p1){} +} diff --git a/java/ql/test/stubs/android/android/content/res/Configuration.java b/java/ql/test/stubs/android/android/content/res/Configuration.java new file mode 100644 index 00000000000..01c3f2a7d15 --- /dev/null +++ b/java/ql/test/stubs/android/android/content/res/Configuration.java @@ -0,0 +1,130 @@ +// Generated automatically from android.content.res.Configuration for testing purposes + +package android.content.res; + +import android.os.LocaleList; +import android.os.Parcel; +import android.os.Parcelable; +import java.util.Locale; + +public class Configuration implements Comparable, Parcelable +{ + public Configuration(){} + public Configuration(Configuration p0){} + public Locale locale = null; + public LocaleList getLocales(){ return null; } + public String toString(){ return null; } + public boolean equals(Configuration p0){ return false; } + public boolean equals(Object p0){ return false; } + public boolean isLayoutSizeAtLeast(int p0){ return false; } + public boolean isNightModeActive(){ return false; } + public boolean isScreenHdr(){ return false; } + public boolean isScreenRound(){ return false; } + public boolean isScreenWideColorGamut(){ return false; } + public float fontScale = 0; + public int colorMode = 0; + public int compareTo(Configuration p0){ return 0; } + public int densityDpi = 0; + public int describeContents(){ return 0; } + public int diff(Configuration p0){ return 0; } + public int getLayoutDirection(){ return 0; } + public int hardKeyboardHidden = 0; + public int hashCode(){ return 0; } + public int keyboard = 0; + public int keyboardHidden = 0; + public int mcc = 0; + public int mnc = 0; + public int navigation = 0; + public int navigationHidden = 0; + public int orientation = 0; + public int screenHeightDp = 0; + public int screenLayout = 0; + public int screenWidthDp = 0; + public int smallestScreenWidthDp = 0; + public int touchscreen = 0; + public int uiMode = 0; + public int updateFrom(Configuration p0){ return 0; } + public static Parcelable.Creator CREATOR = null; + public static boolean needNewResources(int p0, int p1){ return false; } + public static int COLOR_MODE_HDR_MASK = 0; + public static int COLOR_MODE_HDR_NO = 0; + public static int COLOR_MODE_HDR_SHIFT = 0; + public static int COLOR_MODE_HDR_UNDEFINED = 0; + public static int COLOR_MODE_HDR_YES = 0; + public static int COLOR_MODE_UNDEFINED = 0; + public static int COLOR_MODE_WIDE_COLOR_GAMUT_MASK = 0; + public static int COLOR_MODE_WIDE_COLOR_GAMUT_NO = 0; + public static int COLOR_MODE_WIDE_COLOR_GAMUT_UNDEFINED = 0; + public static int COLOR_MODE_WIDE_COLOR_GAMUT_YES = 0; + public static int DENSITY_DPI_UNDEFINED = 0; + public static int HARDKEYBOARDHIDDEN_NO = 0; + public static int HARDKEYBOARDHIDDEN_UNDEFINED = 0; + public static int HARDKEYBOARDHIDDEN_YES = 0; + public static int KEYBOARDHIDDEN_NO = 0; + public static int KEYBOARDHIDDEN_UNDEFINED = 0; + public static int KEYBOARDHIDDEN_YES = 0; + public static int KEYBOARD_12KEY = 0; + public static int KEYBOARD_NOKEYS = 0; + public static int KEYBOARD_QWERTY = 0; + public static int KEYBOARD_UNDEFINED = 0; + public static int MNC_ZERO = 0; + public static int NAVIGATIONHIDDEN_NO = 0; + public static int NAVIGATIONHIDDEN_UNDEFINED = 0; + public static int NAVIGATIONHIDDEN_YES = 0; + public static int NAVIGATION_DPAD = 0; + public static int NAVIGATION_NONAV = 0; + public static int NAVIGATION_TRACKBALL = 0; + public static int NAVIGATION_UNDEFINED = 0; + public static int NAVIGATION_WHEEL = 0; + public static int ORIENTATION_LANDSCAPE = 0; + public static int ORIENTATION_PORTRAIT = 0; + public static int ORIENTATION_SQUARE = 0; + public static int ORIENTATION_UNDEFINED = 0; + public static int SCREENLAYOUT_LAYOUTDIR_LTR = 0; + public static int SCREENLAYOUT_LAYOUTDIR_MASK = 0; + public static int SCREENLAYOUT_LAYOUTDIR_RTL = 0; + public static int SCREENLAYOUT_LAYOUTDIR_SHIFT = 0; + public static int SCREENLAYOUT_LAYOUTDIR_UNDEFINED = 0; + public static int SCREENLAYOUT_LONG_MASK = 0; + public static int SCREENLAYOUT_LONG_NO = 0; + public static int SCREENLAYOUT_LONG_UNDEFINED = 0; + public static int SCREENLAYOUT_LONG_YES = 0; + public static int SCREENLAYOUT_ROUND_MASK = 0; + public static int SCREENLAYOUT_ROUND_NO = 0; + public static int SCREENLAYOUT_ROUND_UNDEFINED = 0; + public static int SCREENLAYOUT_ROUND_YES = 0; + public static int SCREENLAYOUT_SIZE_LARGE = 0; + public static int SCREENLAYOUT_SIZE_MASK = 0; + public static int SCREENLAYOUT_SIZE_NORMAL = 0; + public static int SCREENLAYOUT_SIZE_SMALL = 0; + public static int SCREENLAYOUT_SIZE_UNDEFINED = 0; + public static int SCREENLAYOUT_SIZE_XLARGE = 0; + public static int SCREENLAYOUT_UNDEFINED = 0; + public static int SCREEN_HEIGHT_DP_UNDEFINED = 0; + public static int SCREEN_WIDTH_DP_UNDEFINED = 0; + public static int SMALLEST_SCREEN_WIDTH_DP_UNDEFINED = 0; + public static int TOUCHSCREEN_FINGER = 0; + public static int TOUCHSCREEN_NOTOUCH = 0; + public static int TOUCHSCREEN_STYLUS = 0; + public static int TOUCHSCREEN_UNDEFINED = 0; + public static int UI_MODE_NIGHT_MASK = 0; + public static int UI_MODE_NIGHT_NO = 0; + public static int UI_MODE_NIGHT_UNDEFINED = 0; + public static int UI_MODE_NIGHT_YES = 0; + public static int UI_MODE_TYPE_APPLIANCE = 0; + public static int UI_MODE_TYPE_CAR = 0; + public static int UI_MODE_TYPE_DESK = 0; + public static int UI_MODE_TYPE_MASK = 0; + public static int UI_MODE_TYPE_NORMAL = 0; + public static int UI_MODE_TYPE_TELEVISION = 0; + public static int UI_MODE_TYPE_UNDEFINED = 0; + public static int UI_MODE_TYPE_VR_HEADSET = 0; + public static int UI_MODE_TYPE_WATCH = 0; + public void readFromParcel(Parcel p0){} + public void setLayoutDirection(Locale p0){} + public void setLocale(Locale p0){} + public void setLocales(LocaleList p0){} + public void setTo(Configuration p0){} + public void setToDefaults(){} + public void writeToParcel(Parcel p0, int p1){} +} diff --git a/java/ql/test/stubs/android/android/content/res/Resources.java b/java/ql/test/stubs/android/android/content/res/Resources.java new file mode 100644 index 00000000000..9277c4ee765 --- /dev/null +++ b/java/ql/test/stubs/android/android/content/res/Resources.java @@ -0,0 +1,105 @@ +// Generated automatically from android.content.res.Resources for testing purposes + +package android.content.res; + +import android.content.res.AssetFileDescriptor; +import android.content.res.AssetManager; +import android.content.res.ColorStateList; +import android.content.res.Configuration; +import android.content.res.TypedArray; +import android.content.res.XmlResourceParser; +import android.content.res.loader.ResourcesLoader; +import android.graphics.Movie; +import android.graphics.Typeface; +import android.graphics.drawable.Drawable; +import android.os.Bundle; +import android.util.AttributeSet; +import android.util.DisplayMetrics; +import android.util.TypedValue; +import java.io.InputStream; + +public class Resources +{ + protected Resources() {} + public AssetFileDescriptor openRawResourceFd(int p0){ return null; } + public CharSequence getQuantityText(int p0, int p1){ return null; } + public CharSequence getText(int p0){ return null; } + public CharSequence getText(int p0, CharSequence p1){ return null; } + public CharSequence[] getTextArray(int p0){ return null; } + public ColorStateList getColorStateList(int p0){ return null; } + public ColorStateList getColorStateList(int p0, Resources.Theme p1){ return null; } + public Configuration getConfiguration(){ return null; } + public DisplayMetrics getDisplayMetrics(){ return null; } + public Drawable getDrawable(int p0){ return null; } + public Drawable getDrawable(int p0, Resources.Theme p1){ return null; } + public Drawable getDrawableForDensity(int p0, int p1){ return null; } + public Drawable getDrawableForDensity(int p0, int p1, Resources.Theme p2){ return null; } + public InputStream openRawResource(int p0){ return null; } + public InputStream openRawResource(int p0, TypedValue p1){ return null; } + public Movie getMovie(int p0){ return null; } + public Resources(AssetManager p0, DisplayMetrics p1, Configuration p2){} + public String getQuantityString(int p0, int p1){ return null; } + public String getQuantityString(int p0, int p1, Object... p2){ return null; } + public String getResourceEntryName(int p0){ return null; } + public String getResourceName(int p0){ return null; } + public String getResourcePackageName(int p0){ return null; } + public String getResourceTypeName(int p0){ return null; } + public String getString(int p0){ return null; } + public String getString(int p0, Object... p1){ return null; } + public String[] getStringArray(int p0){ return null; } + public TypedArray obtainAttributes(AttributeSet p0, int[] p1){ return null; } + public TypedArray obtainTypedArray(int p0){ return null; } + public Typeface getFont(int p0){ return null; } + public XmlResourceParser getAnimation(int p0){ return null; } + public XmlResourceParser getLayout(int p0){ return null; } + public XmlResourceParser getXml(int p0){ return null; } + public boolean getBoolean(int p0){ return false; } + public class Theme + { + protected Theme() {} + public Drawable getDrawable(int p0){ return null; } + public Resources getResources(){ return null; } + public TypedArray obtainStyledAttributes(AttributeSet p0, int[] p1, int p2, int p3){ return null; } + public TypedArray obtainStyledAttributes(int p0, int[] p1){ return null; } + public TypedArray obtainStyledAttributes(int[] p0){ return null; } + public boolean resolveAttribute(int p0, TypedValue p1, boolean p2){ return false; } + public int getChangingConfigurations(){ return 0; } + public int getExplicitStyle(AttributeSet p0){ return 0; } + public int[] getAttributeResolutionStack(int p0, int p1, int p2){ return null; } + public void applyStyle(int p0, boolean p1){} + public void dump(int p0, String p1, String p2){} + public void rebase(){} + public void setTo(Resources.Theme p0){} + } + public final AssetManager getAssets(){ return null; } + public final Resources.Theme newTheme(){ return null; } + public final void finishPreloading(){} + public final void flushLayoutCache(){} + public float getDimension(int p0){ return 0; } + public float getFloat(int p0){ return 0; } + public float getFraction(int p0, int p1, int p2){ return 0; } + public int getColor(int p0){ return 0; } + public int getColor(int p0, Resources.Theme p1){ return 0; } + public int getDimensionPixelOffset(int p0){ return 0; } + public int getDimensionPixelSize(int p0){ return 0; } + public int getIdentifier(String p0, String p1, String p2){ return 0; } + public int getInteger(int p0){ return 0; } + public int[] getIntArray(int p0){ return null; } + public static Resources getSystem(){ return null; } + public static int ID_NULL = 0; + public static int getAttributeSetSourceResId(AttributeSet p0){ return 0; } + public void addLoaders(ResourcesLoader... p0){} + public void getValue(String p0, TypedValue p1, boolean p2){} + public void getValue(int p0, TypedValue p1, boolean p2){} + public void getValueForDensity(int p0, int p1, TypedValue p2, boolean p3){} + public void parseBundleExtra(String p0, AttributeSet p1, Bundle p2){} + public void parseBundleExtras(XmlResourceParser p0, Bundle p1){} + public void removeLoaders(ResourcesLoader... p0){} + public void updateConfiguration(Configuration p0, DisplayMetrics p1){} + static public class NotFoundException extends RuntimeException + { + public NotFoundException(){} + public NotFoundException(String p0){} + public NotFoundException(String p0, Exception p1){} + } +} diff --git a/java/ql/test/stubs/android/android/content/res/TypedArray.java b/java/ql/test/stubs/android/android/content/res/TypedArray.java new file mode 100644 index 00000000000..2b857671f88 --- /dev/null +++ b/java/ql/test/stubs/android/android/content/res/TypedArray.java @@ -0,0 +1,46 @@ +// Generated automatically from android.content.res.TypedArray for testing purposes + +package android.content.res; + +import android.content.res.ColorStateList; +import android.content.res.Resources; +import android.graphics.Typeface; +import android.graphics.drawable.Drawable; +import android.util.TypedValue; + +public class TypedArray +{ + public CharSequence getText(int p0){ return null; } + public CharSequence[] getTextArray(int p0){ return null; } + public ColorStateList getColorStateList(int p0){ return null; } + public Drawable getDrawable(int p0){ return null; } + public Resources getResources(){ return null; } + public String getNonResourceString(int p0){ return null; } + public String getPositionDescription(){ return null; } + public String getString(int p0){ return null; } + public String toString(){ return null; } + public TypedValue peekValue(int p0){ return null; } + public Typeface getFont(int p0){ return null; } + public boolean getBoolean(int p0, boolean p1){ return false; } + public boolean getValue(int p0, TypedValue p1){ return false; } + public boolean hasValue(int p0){ return false; } + public boolean hasValueOrEmpty(int p0){ return false; } + public float getDimension(int p0, float p1){ return 0; } + public float getFloat(int p0, float p1){ return 0; } + public float getFraction(int p0, int p1, int p2, float p3){ return 0; } + public int getChangingConfigurations(){ return 0; } + public int getColor(int p0, int p1){ return 0; } + public int getDimensionPixelOffset(int p0, int p1){ return 0; } + public int getDimensionPixelSize(int p0, int p1){ return 0; } + public int getIndex(int p0){ return 0; } + public int getIndexCount(){ return 0; } + public int getInt(int p0, int p1){ return 0; } + public int getInteger(int p0, int p1){ return 0; } + public int getLayoutDimension(int p0, String p1){ return 0; } + public int getLayoutDimension(int p0, int p1){ return 0; } + public int getResourceId(int p0, int p1){ return 0; } + public int getSourceResourceId(int p0, int p1){ return 0; } + public int getType(int p0){ return 0; } + public int length(){ return 0; } + public void recycle(){} +} diff --git a/java/ql/test/stubs/android/android/content/res/XmlResourceParser.java b/java/ql/test/stubs/android/android/content/res/XmlResourceParser.java new file mode 100644 index 00000000000..61a50fe8bec --- /dev/null +++ b/java/ql/test/stubs/android/android/content/res/XmlResourceParser.java @@ -0,0 +1,12 @@ +// Generated automatically from android.content.res.XmlResourceParser for testing purposes + +package android.content.res; + +import android.util.AttributeSet; +import org.xmlpull.v1.XmlPullParser; + +public interface XmlResourceParser extends AttributeSet, AutoCloseable, XmlPullParser +{ + String getAttributeNamespace(int p0); + void close(); +} diff --git a/java/ql/test/stubs/android/android/content/res/loader/AssetsProvider.java b/java/ql/test/stubs/android/android/content/res/loader/AssetsProvider.java new file mode 100644 index 00000000000..bf99474dcb1 --- /dev/null +++ b/java/ql/test/stubs/android/android/content/res/loader/AssetsProvider.java @@ -0,0 +1,10 @@ +// Generated automatically from android.content.res.loader.AssetsProvider for testing purposes + +package android.content.res.loader; + +import android.content.res.AssetFileDescriptor; + +public interface AssetsProvider +{ + default AssetFileDescriptor loadAssetFd(String p0, int p1){ return null; } +} diff --git a/java/ql/test/stubs/android/android/content/res/loader/ResourcesLoader.java b/java/ql/test/stubs/android/android/content/res/loader/ResourcesLoader.java new file mode 100644 index 00000000000..1ad577ab478 --- /dev/null +++ b/java/ql/test/stubs/android/android/content/res/loader/ResourcesLoader.java @@ -0,0 +1,16 @@ +// Generated automatically from android.content.res.loader.ResourcesLoader for testing purposes + +package android.content.res.loader; + +import android.content.res.loader.ResourcesProvider; +import java.util.List; + +public class ResourcesLoader +{ + public List getProviders(){ return null; } + public ResourcesLoader(){} + public void addProvider(ResourcesProvider p0){} + public void clearProviders(){} + public void removeProvider(ResourcesProvider p0){} + public void setProviders(List p0){} +} diff --git a/java/ql/test/stubs/android/android/content/res/loader/ResourcesProvider.java b/java/ql/test/stubs/android/android/content/res/loader/ResourcesProvider.java new file mode 100644 index 00000000000..059b0961b59 --- /dev/null +++ b/java/ql/test/stubs/android/android/content/res/loader/ResourcesProvider.java @@ -0,0 +1,21 @@ +// Generated automatically from android.content.res.loader.ResourcesProvider for testing purposes + +package android.content.res.loader; + +import android.content.Context; +import android.content.res.loader.AssetsProvider; +import android.os.ParcelFileDescriptor; +import java.io.Closeable; + +public class ResourcesProvider implements AutoCloseable, Closeable +{ + protected ResourcesProvider() {} + protected void finalize(){} + public static ResourcesProvider empty(AssetsProvider p0){ return null; } + public static ResourcesProvider loadFromApk(ParcelFileDescriptor p0){ return null; } + public static ResourcesProvider loadFromApk(ParcelFileDescriptor p0, AssetsProvider p1){ return null; } + public static ResourcesProvider loadFromDirectory(String p0, AssetsProvider p1){ return null; } + public static ResourcesProvider loadFromSplit(Context p0, String p1){ return null; } + public static ResourcesProvider loadFromTable(ParcelFileDescriptor p0, AssetsProvider p1){ return null; } + public void close(){} +} diff --git a/java/ql/test/stubs/android/android/database/CharArrayBuffer.java b/java/ql/test/stubs/android/android/database/CharArrayBuffer.java new file mode 100644 index 00000000000..b75eff88239 --- /dev/null +++ b/java/ql/test/stubs/android/android/database/CharArrayBuffer.java @@ -0,0 +1,13 @@ +// Generated automatically from android.database.CharArrayBuffer for testing purposes + +package android.database; + + +public class CharArrayBuffer +{ + protected CharArrayBuffer() {} + public CharArrayBuffer(char[] p0){} + public CharArrayBuffer(int p0){} + public char[] data = null; + public int sizeCopied = 0; +} diff --git a/java/ql/test/stubs/android/android/database/ContentObserver.java b/java/ql/test/stubs/android/android/database/ContentObserver.java new file mode 100644 index 00000000000..f70e12dc20c --- /dev/null +++ b/java/ql/test/stubs/android/android/database/ContentObserver.java @@ -0,0 +1,22 @@ +// Generated automatically from android.database.ContentObserver for testing purposes + +package android.database; + +import android.net.Uri; +import android.os.Handler; +import java.util.Collection; + +abstract public class ContentObserver +{ + protected ContentObserver() {} + public ContentObserver(Handler p0){} + public boolean deliverSelfNotifications(){ return false; } + public final void dispatchChange(boolean p0){} + public final void dispatchChange(boolean p0, Collection p1, int p2){} + public final void dispatchChange(boolean p0, Uri p1){} + public final void dispatchChange(boolean p0, Uri p1, int p2){} + public void onChange(boolean p0){} + public void onChange(boolean p0, Collection p1, int p2){} + public void onChange(boolean p0, Uri p1){} + public void onChange(boolean p0, Uri p1, int p2){} +} diff --git a/java/ql/test/stubs/android/android/database/Cursor.java b/java/ql/test/stubs/android/android/database/Cursor.java index cc432b1ad06..e692f9be738 100644 --- a/java/ql/test/stubs/android/android/database/Cursor.java +++ b/java/ql/test/stubs/android/android/database/Cursor.java @@ -1,5 +1,64 @@ +// Generated automatically from android.database.Cursor for testing purposes + package android.database; -public interface Cursor { +import android.content.ContentResolver; +import android.database.CharArrayBuffer; +import android.database.ContentObserver; +import android.database.DataSetObserver; +import android.net.Uri; +import android.os.Bundle; +import java.io.Closeable; +import java.util.List; +public interface Cursor extends Closeable +{ + Bundle getExtras(); + Bundle respond(Bundle p0); + String getColumnName(int p0); + String getString(int p0); + String[] getColumnNames(); + Uri getNotificationUri(); + boolean getWantsAllOnMoveCalls(); + boolean isAfterLast(); + boolean isBeforeFirst(); + boolean isClosed(); + boolean isFirst(); + boolean isLast(); + boolean isNull(int p0); + boolean move(int p0); + boolean moveToFirst(); + boolean moveToLast(); + boolean moveToNext(); + boolean moveToPosition(int p0); + boolean moveToPrevious(); + boolean requery(); + byte[] getBlob(int p0); + default List getNotificationUris(){ return null; } + default void setNotificationUris(ContentResolver p0, List p1){} + double getDouble(int p0); + float getFloat(int p0); + int getColumnCount(); + int getColumnIndex(String p0); + int getColumnIndexOrThrow(String p0); + int getCount(); + int getInt(int p0); + int getPosition(); + int getType(int p0); + long getLong(int p0); + short getShort(int p0); + static int FIELD_TYPE_BLOB = 0; + static int FIELD_TYPE_FLOAT = 0; + static int FIELD_TYPE_INTEGER = 0; + static int FIELD_TYPE_NULL = 0; + static int FIELD_TYPE_STRING = 0; + void close(); + void copyStringToBuffer(int p0, CharArrayBuffer p1); + void deactivate(); + void registerContentObserver(ContentObserver p0); + void registerDataSetObserver(DataSetObserver p0); + void setExtras(Bundle p0); + void setNotificationUri(ContentResolver p0, Uri p1); + void unregisterContentObserver(ContentObserver p0); + void unregisterDataSetObserver(DataSetObserver p0); } diff --git a/java/ql/test/stubs/android/android/database/DataSetObserver.java b/java/ql/test/stubs/android/android/database/DataSetObserver.java new file mode 100644 index 00000000000..6ca449b2e95 --- /dev/null +++ b/java/ql/test/stubs/android/android/database/DataSetObserver.java @@ -0,0 +1,11 @@ +// Generated automatically from android.database.DataSetObserver for testing purposes + +package android.database; + + +abstract public class DataSetObserver +{ + public DataSetObserver(){} + public void onChanged(){} + public void onInvalidated(){} +} diff --git a/java/ql/test/stubs/android/android/database/DatabaseErrorHandler.java b/java/ql/test/stubs/android/android/database/DatabaseErrorHandler.java new file mode 100644 index 00000000000..c52eb9698a7 --- /dev/null +++ b/java/ql/test/stubs/android/android/database/DatabaseErrorHandler.java @@ -0,0 +1,10 @@ +// Generated automatically from android.database.DatabaseErrorHandler for testing purposes + +package android.database; + +import android.database.sqlite.SQLiteDatabase; + +public interface DatabaseErrorHandler +{ + void onCorruption(SQLiteDatabase p0); +} diff --git a/java/ql/test/stubs/android/android/database/sqlite/SQLiteClosable.java b/java/ql/test/stubs/android/android/database/sqlite/SQLiteClosable.java new file mode 100644 index 00000000000..8295e8d0d61 --- /dev/null +++ b/java/ql/test/stubs/android/android/database/sqlite/SQLiteClosable.java @@ -0,0 +1,16 @@ +// Generated automatically from android.database.sqlite.SQLiteClosable for testing purposes + +package android.database.sqlite; + +import java.io.Closeable; + +abstract public class SQLiteClosable implements Closeable +{ + protected abstract void onAllReferencesReleased(); + protected void onAllReferencesReleasedFromContainer(){} + public SQLiteClosable(){} + public void acquireReference(){} + public void close(){} + public void releaseReference(){} + public void releaseReferenceFromContainer(){} +} diff --git a/java/ql/test/stubs/android/android/database/sqlite/SQLiteCursorDriver.java b/java/ql/test/stubs/android/android/database/sqlite/SQLiteCursorDriver.java new file mode 100644 index 00000000000..3d5cb99a2d0 --- /dev/null +++ b/java/ql/test/stubs/android/android/database/sqlite/SQLiteCursorDriver.java @@ -0,0 +1,15 @@ +// Generated automatically from android.database.sqlite.SQLiteCursorDriver for testing purposes + +package android.database.sqlite; + +import android.database.Cursor; +import android.database.sqlite.SQLiteDatabase; + +public interface SQLiteCursorDriver +{ + Cursor query(SQLiteDatabase.CursorFactory p0, String[] p1); + void cursorClosed(); + void cursorDeactivated(); + void cursorRequeried(Cursor p0); + void setBindArguments(String[] p0); +} diff --git a/java/ql/test/stubs/android/android/database/sqlite/SQLiteDatabase.java b/java/ql/test/stubs/android/android/database/sqlite/SQLiteDatabase.java index 6f5b6bd2eea..64b62e68d44 100644 --- a/java/ql/test/stubs/android/android/database/sqlite/SQLiteDatabase.java +++ b/java/ql/test/stubs/android/android/database/sqlite/SQLiteDatabase.java @@ -1,56 +1,127 @@ +// Generated automatically from android.database.sqlite.SQLiteDatabase for testing purposes + package android.database.sqlite; import android.content.ContentValues; +import android.database.Cursor; +import android.database.DatabaseErrorHandler; +import android.database.sqlite.SQLiteClosable; +import android.database.sqlite.SQLiteCursorDriver; +import android.database.sqlite.SQLiteQuery; +import android.database.sqlite.SQLiteStatement; +import android.database.sqlite.SQLiteTransactionListener; import android.os.CancellationSignal; +import android.util.Pair; +import java.io.File; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.function.BinaryOperator; +import java.util.function.UnaryOperator; -public abstract class SQLiteDatabase { - public class CursorFactory { - - } - - public abstract void execPerConnectionSQL(String sql, Object[] bindArgs); - - public abstract void execSQL(String sql); - - public abstract void execSQL(String sql, Object[] bindArgs); - - public abstract void query(boolean distinct, String table, String[] columns, String selection, String[] selectionArgs, - String groupBy, String having, String orderBy, String limit); - - public abstract void query(boolean distinct, String table, String[] columns, String selection, String[] selectionArgs, - String groupBy, String having, String orderBy, String limit, CancellationSignal cancellationSignal); - - public abstract void query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, - String having, String orderBy, String limit); - - public abstract void query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, - String having, String orderBy); - - public abstract void queryWithFactory(SQLiteDatabase.CursorFactory cursorFactory, boolean distinct, String table, - String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, - String limit, CancellationSignal cancellationSignal); - - public abstract void queryWithFactory(SQLiteDatabase.CursorFactory cursorFactory, boolean distinct, String table, - String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, - String limit); - - public abstract void rawQuery(String sql, String[] selectionArgs, CancellationSignal cancellationSignal); - - public abstract void rawQuery(String sql, String[] selectionArgs); - - public abstract void rawQueryWithFactory(SQLiteDatabase.CursorFactory cursorFactory, String sql, String[] selectionArgs, - String editTable, CancellationSignal cancellationSignal); - - public abstract void rawQueryWithFactory(SQLiteDatabase.CursorFactory cursorFactory, String sql, String[] selectionArgs, - String editTable); - - public abstract void compileStatement(String sql); - - public abstract void delete(String table, String whereClause, String[] whereArgs); - - public abstract void update(String table, ContentValues values, String whereClause, String[] whereArgs); - - public abstract void updateWithOnConflict(String table, ContentValues values, String whereClause, String[] whereArgs, - int conflictAlgorithm); - +public class SQLiteDatabase extends SQLiteClosable +{ + protected SQLiteDatabase() {} + protected void finalize(){} + protected void onAllReferencesReleased(){} + public Cursor query(String p0, String[] p1, String p2, String[] p3, String p4, String p5, String p6){ return null; } + public Cursor query(String p0, String[] p1, String p2, String[] p3, String p4, String p5, String p6, String p7){ return null; } + public Cursor query(boolean p0, String p1, String[] p2, String p3, String[] p4, String p5, String p6, String p7, String p8){ return null; } + public Cursor query(boolean p0, String p1, String[] p2, String p3, String[] p4, String p5, String p6, String p7, String p8, CancellationSignal p9){ return null; } + public Cursor queryWithFactory(SQLiteDatabase.CursorFactory p0, boolean p1, String p2, String[] p3, String p4, String[] p5, String p6, String p7, String p8, String p9){ return null; } + public Cursor queryWithFactory(SQLiteDatabase.CursorFactory p0, boolean p1, String p2, String[] p3, String p4, String[] p5, String p6, String p7, String p8, String p9, CancellationSignal p10){ return null; } + public Cursor rawQuery(String p0, String[] p1){ return null; } + public Cursor rawQuery(String p0, String[] p1, CancellationSignal p2){ return null; } + public Cursor rawQueryWithFactory(SQLiteDatabase.CursorFactory p0, String p1, String[] p2, String p3){ return null; } + public Cursor rawQueryWithFactory(SQLiteDatabase.CursorFactory p0, String p1, String[] p2, String p3, CancellationSignal p4){ return null; } + public List> getAttachedDbs(){ return null; } + public Map getSyncedTables(){ return null; } + public SQLiteStatement compileStatement(String p0){ return null; } + public String getPath(){ return null; } + public String toString(){ return null; } + public boolean enableWriteAheadLogging(){ return false; } + public boolean inTransaction(){ return false; } + public boolean isDatabaseIntegrityOk(){ return false; } + public boolean isDbLockedByCurrentThread(){ return false; } + public boolean isDbLockedByOtherThreads(){ return false; } + public boolean isOpen(){ return false; } + public boolean isReadOnly(){ return false; } + public boolean isWriteAheadLoggingEnabled(){ return false; } + public boolean needUpgrade(int p0){ return false; } + public boolean yieldIfContended(){ return false; } + public boolean yieldIfContendedSafely(){ return false; } + public boolean yieldIfContendedSafely(long p0){ return false; } + public int delete(String p0, String p1, String[] p2){ return 0; } + public int getVersion(){ return 0; } + public int update(String p0, ContentValues p1, String p2, String[] p3){ return 0; } + public int updateWithOnConflict(String p0, ContentValues p1, String p2, String[] p3, int p4){ return 0; } + public long getMaximumSize(){ return 0; } + public long getPageSize(){ return 0; } + public long insert(String p0, String p1, ContentValues p2){ return 0; } + public long insertOrThrow(String p0, String p1, ContentValues p2){ return 0; } + public long insertWithOnConflict(String p0, String p1, ContentValues p2, int p3){ return 0; } + public long replace(String p0, String p1, ContentValues p2){ return 0; } + public long replaceOrThrow(String p0, String p1, ContentValues p2){ return 0; } + public long setMaximumSize(long p0){ return 0; } + public static SQLiteDatabase create(SQLiteDatabase.CursorFactory p0){ return null; } + public static SQLiteDatabase createInMemory(SQLiteDatabase.OpenParams p0){ return null; } + public static SQLiteDatabase openDatabase(File p0, SQLiteDatabase.OpenParams p1){ return null; } + public static SQLiteDatabase openDatabase(String p0, SQLiteDatabase.CursorFactory p1, int p2){ return null; } + public static SQLiteDatabase openDatabase(String p0, SQLiteDatabase.CursorFactory p1, int p2, DatabaseErrorHandler p3){ return null; } + public static SQLiteDatabase openOrCreateDatabase(File p0, SQLiteDatabase.CursorFactory p1){ return null; } + public static SQLiteDatabase openOrCreateDatabase(String p0, SQLiteDatabase.CursorFactory p1){ return null; } + public static SQLiteDatabase openOrCreateDatabase(String p0, SQLiteDatabase.CursorFactory p1, DatabaseErrorHandler p2){ return null; } + public static String findEditTable(String p0){ return null; } + public static boolean deleteDatabase(File p0){ return false; } + public static int CONFLICT_ABORT = 0; + public static int CONFLICT_FAIL = 0; + public static int CONFLICT_IGNORE = 0; + public static int CONFLICT_NONE = 0; + public static int CONFLICT_REPLACE = 0; + public static int CONFLICT_ROLLBACK = 0; + public static int CREATE_IF_NECESSARY = 0; + public static int ENABLE_WRITE_AHEAD_LOGGING = 0; + public static int MAX_SQL_CACHE_SIZE = 0; + public static int NO_LOCALIZED_COLLATORS = 0; + public static int OPEN_READONLY = 0; + public static int OPEN_READWRITE = 0; + public static int SQLITE_MAX_LIKE_PATTERN_LENGTH = 0; + public static int releaseMemory(){ return 0; } + public void beginTransaction(){} + public void beginTransactionNonExclusive(){} + public void beginTransactionWithListener(SQLiteTransactionListener p0){} + public void beginTransactionWithListenerNonExclusive(SQLiteTransactionListener p0){} + public void disableWriteAheadLogging(){} + public void endTransaction(){} + public void execPerConnectionSQL(String p0, Object[] p1){} + public void execSQL(String p0){} + public void execSQL(String p0, Object[] p1){} + public void markTableSyncable(String p0, String p1){} + public void markTableSyncable(String p0, String p1, String p2){} + public void setCustomAggregateFunction(String p0, BinaryOperator p1){} + public void setCustomScalarFunction(String p0, UnaryOperator p1){} + public void setForeignKeyConstraintsEnabled(boolean p0){} + public void setLocale(Locale p0){} + public void setLockingEnabled(boolean p0){} + public void setMaxSqlCacheSize(int p0){} + public void setPageSize(long p0){} + public void setTransactionSuccessful(){} + public void setVersion(int p0){} + public void validateSql(String p0, CancellationSignal p1){} + static public class OpenParams + { + protected OpenParams() {} + public DatabaseErrorHandler getErrorHandler(){ return null; } + public SQLiteDatabase.CursorFactory getCursorFactory(){ return null; } + public String getJournalMode(){ return null; } + public String getSynchronousMode(){ return null; } + public int getLookasideSlotCount(){ return 0; } + public int getLookasideSlotSize(){ return 0; } + public int getOpenFlags(){ return 0; } + public long getIdleConnectionTimeout(){ return 0; } + } + static public interface CursorFactory + { + Cursor newCursor(SQLiteDatabase p0, SQLiteCursorDriver p1, String p2, SQLiteQuery p3); + } } diff --git a/java/ql/test/stubs/android/android/database/sqlite/SQLiteProgram.java b/java/ql/test/stubs/android/android/database/sqlite/SQLiteProgram.java new file mode 100644 index 00000000000..15f078a4c16 --- /dev/null +++ b/java/ql/test/stubs/android/android/database/sqlite/SQLiteProgram.java @@ -0,0 +1,18 @@ +// Generated automatically from android.database.sqlite.SQLiteProgram for testing purposes + +package android.database.sqlite; + +import android.database.sqlite.SQLiteClosable; + +abstract public class SQLiteProgram extends SQLiteClosable +{ + protected void onAllReferencesReleased(){} + public final int getUniqueId(){ return 0; } + public void bindAllArgsAsStrings(String[] p0){} + public void bindBlob(int p0, byte[] p1){} + public void bindDouble(int p0, double p1){} + public void bindLong(int p0, long p1){} + public void bindNull(int p0){} + public void bindString(int p0, String p1){} + public void clearBindings(){} +} diff --git a/java/ql/test/stubs/android/android/database/sqlite/SQLiteQuery.java b/java/ql/test/stubs/android/android/database/sqlite/SQLiteQuery.java new file mode 100644 index 00000000000..a2169bcf238 --- /dev/null +++ b/java/ql/test/stubs/android/android/database/sqlite/SQLiteQuery.java @@ -0,0 +1,10 @@ +// Generated automatically from android.database.sqlite.SQLiteQuery for testing purposes + +package android.database.sqlite; + +import android.database.sqlite.SQLiteProgram; + +public class SQLiteQuery extends SQLiteProgram +{ + public String toString(){ return null; } +} diff --git a/java/ql/test/stubs/android/android/database/sqlite/SQLiteStatement.java b/java/ql/test/stubs/android/android/database/sqlite/SQLiteStatement.java new file mode 100644 index 00000000000..e96a0d28725 --- /dev/null +++ b/java/ql/test/stubs/android/android/database/sqlite/SQLiteStatement.java @@ -0,0 +1,17 @@ +// Generated automatically from android.database.sqlite.SQLiteStatement for testing purposes + +package android.database.sqlite; + +import android.database.sqlite.SQLiteProgram; +import android.os.ParcelFileDescriptor; + +public class SQLiteStatement extends SQLiteProgram +{ + public ParcelFileDescriptor simpleQueryForBlobFileDescriptor(){ return null; } + public String simpleQueryForString(){ return null; } + public String toString(){ return null; } + public int executeUpdateDelete(){ return 0; } + public long executeInsert(){ return 0; } + public long simpleQueryForLong(){ return 0; } + public void execute(){} +} diff --git a/java/ql/test/stubs/android/android/database/sqlite/SQLiteTransactionListener.java b/java/ql/test/stubs/android/android/database/sqlite/SQLiteTransactionListener.java new file mode 100644 index 00000000000..31895691b11 --- /dev/null +++ b/java/ql/test/stubs/android/android/database/sqlite/SQLiteTransactionListener.java @@ -0,0 +1,11 @@ +// Generated automatically from android.database.sqlite.SQLiteTransactionListener for testing purposes + +package android.database.sqlite; + + +public interface SQLiteTransactionListener +{ + void onBegin(); + void onCommit(); + void onRollback(); +} diff --git a/java/ql/test/stubs/android/android/graphics/Bitmap.java b/java/ql/test/stubs/android/android/graphics/Bitmap.java new file mode 100644 index 00000000000..cf7a3b69176 --- /dev/null +++ b/java/ql/test/stubs/android/android/graphics/Bitmap.java @@ -0,0 +1,97 @@ +// Generated automatically from android.graphics.Bitmap for testing purposes + +package android.graphics; + +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.ColorSpace; +import android.graphics.Matrix; +import android.graphics.Paint; +import android.graphics.Picture; +import android.hardware.HardwareBuffer; +import android.os.Parcel; +import android.os.Parcelable; +import android.util.DisplayMetrics; +import java.io.OutputStream; +import java.nio.Buffer; + +public class Bitmap implements Parcelable +{ + public Bitmap copy(Bitmap.Config p0, boolean p1){ return null; } + public Bitmap extractAlpha(){ return null; } + public Bitmap extractAlpha(Paint p0, int[] p1){ return null; } + public Bitmap.Config getConfig(){ return null; } + public Color getColor(int p0, int p1){ return null; } + public ColorSpace getColorSpace(){ return null; } + public boolean compress(Bitmap.CompressFormat p0, int p1, OutputStream p2){ return false; } + public boolean hasAlpha(){ return false; } + public boolean hasMipMap(){ return false; } + public boolean isMutable(){ return false; } + public boolean isPremultiplied(){ return false; } + public boolean isRecycled(){ return false; } + public boolean sameAs(Bitmap p0){ return false; } + public byte[] getNinePatchChunk(){ return null; } + public int describeContents(){ return 0; } + public int getAllocationByteCount(){ return 0; } + public int getByteCount(){ return 0; } + public int getDensity(){ return 0; } + public int getGenerationId(){ return 0; } + public int getHeight(){ return 0; } + public int getPixel(int p0, int p1){ return 0; } + public int getRowBytes(){ return 0; } + public int getScaledHeight(Canvas p0){ return 0; } + public int getScaledHeight(DisplayMetrics p0){ return 0; } + public int getScaledHeight(int p0){ return 0; } + public int getScaledWidth(Canvas p0){ return 0; } + public int getScaledWidth(DisplayMetrics p0){ return 0; } + public int getScaledWidth(int p0){ return 0; } + public int getWidth(){ return 0; } + public static Bitmap createBitmap(Bitmap p0){ return null; } + public static Bitmap createBitmap(Bitmap p0, int p1, int p2, int p3, int p4){ return null; } + public static Bitmap createBitmap(Bitmap p0, int p1, int p2, int p3, int p4, Matrix p5, boolean p6){ return null; } + public static Bitmap createBitmap(DisplayMetrics p0, int p1, int p2, Bitmap.Config p3){ return null; } + public static Bitmap createBitmap(DisplayMetrics p0, int p1, int p2, Bitmap.Config p3, boolean p4){ return null; } + public static Bitmap createBitmap(DisplayMetrics p0, int p1, int p2, Bitmap.Config p3, boolean p4, ColorSpace p5){ return null; } + public static Bitmap createBitmap(DisplayMetrics p0, int[] p1, int p2, int p3, Bitmap.Config p4){ return null; } + public static Bitmap createBitmap(DisplayMetrics p0, int[] p1, int p2, int p3, int p4, int p5, Bitmap.Config p6){ return null; } + public static Bitmap createBitmap(Picture p0){ return null; } + public static Bitmap createBitmap(Picture p0, int p1, int p2, Bitmap.Config p3){ return null; } + public static Bitmap createBitmap(int p0, int p1, Bitmap.Config p2){ return null; } + public static Bitmap createBitmap(int p0, int p1, Bitmap.Config p2, boolean p3){ return null; } + public static Bitmap createBitmap(int p0, int p1, Bitmap.Config p2, boolean p3, ColorSpace p4){ return null; } + public static Bitmap createBitmap(int[] p0, int p1, int p2, Bitmap.Config p3){ return null; } + public static Bitmap createBitmap(int[] p0, int p1, int p2, int p3, int p4, Bitmap.Config p5){ return null; } + public static Bitmap createScaledBitmap(Bitmap p0, int p1, int p2, boolean p3){ return null; } + public static Bitmap wrapHardwareBuffer(HardwareBuffer p0, ColorSpace p1){ return null; } + public static Parcelable.Creator CREATOR = null; + public static int DENSITY_NONE = 0; + public void copyPixelsFromBuffer(Buffer p0){} + public void copyPixelsToBuffer(Buffer p0){} + public void eraseColor(int p0){} + public void eraseColor(long p0){} + public void getPixels(int[] p0, int p1, int p2, int p3, int p4, int p5, int p6){} + public void prepareToDraw(){} + public void reconfigure(int p0, int p1, Bitmap.Config p2){} + public void recycle(){} + public void setColorSpace(ColorSpace p0){} + public void setConfig(Bitmap.Config p0){} + public void setDensity(int p0){} + public void setHasAlpha(boolean p0){} + public void setHasMipMap(boolean p0){} + public void setHeight(int p0){} + public void setPixel(int p0, int p1, int p2){} + public void setPixels(int[] p0, int p1, int p2, int p3, int p4, int p5, int p6){} + public void setPremultiplied(boolean p0){} + public void setWidth(int p0){} + public void writeToParcel(Parcel p0, int p1){} + static public enum CompressFormat + { + JPEG, PNG, WEBP, WEBP_LOSSLESS, WEBP_LOSSY; + private CompressFormat() {} + } + static public enum Config + { + ALPHA_8, ARGB_4444, ARGB_8888, HARDWARE, RGBA_F16, RGB_565; + private Config() {} + } +} diff --git a/java/ql/test/stubs/android/android/graphics/BitmapFactory.java b/java/ql/test/stubs/android/android/graphics/BitmapFactory.java new file mode 100644 index 00000000000..f6e05c10de9 --- /dev/null +++ b/java/ql/test/stubs/android/android/graphics/BitmapFactory.java @@ -0,0 +1,54 @@ +// Generated automatically from android.graphics.BitmapFactory for testing purposes + +package android.graphics; + +import android.content.res.Resources; +import android.graphics.Bitmap; +import android.graphics.ColorSpace; +import android.graphics.Rect; +import android.util.TypedValue; +import java.io.FileDescriptor; +import java.io.InputStream; + +public class BitmapFactory +{ + public BitmapFactory(){} + public static Bitmap decodeByteArray(byte[] p0, int p1, int p2){ return null; } + public static Bitmap decodeByteArray(byte[] p0, int p1, int p2, BitmapFactory.Options p3){ return null; } + public static Bitmap decodeFile(String p0){ return null; } + public static Bitmap decodeFile(String p0, BitmapFactory.Options p1){ return null; } + public static Bitmap decodeFileDescriptor(FileDescriptor p0){ return null; } + public static Bitmap decodeFileDescriptor(FileDescriptor p0, Rect p1, BitmapFactory.Options p2){ return null; } + public static Bitmap decodeResource(Resources p0, int p1){ return null; } + public static Bitmap decodeResource(Resources p0, int p1, BitmapFactory.Options p2){ return null; } + public static Bitmap decodeResourceStream(Resources p0, TypedValue p1, InputStream p2, Rect p3, BitmapFactory.Options p4){ return null; } + public static Bitmap decodeStream(InputStream p0){ return null; } + public static Bitmap decodeStream(InputStream p0, Rect p1, BitmapFactory.Options p2){ return null; } + static public class Options + { + public Bitmap inBitmap = null; + public Bitmap.Config inPreferredConfig = null; + public Bitmap.Config outConfig = null; + public ColorSpace inPreferredColorSpace = null; + public ColorSpace outColorSpace = null; + public Options(){} + public String outMimeType = null; + public boolean inDither = false; + public boolean inInputShareable = false; + public boolean inJustDecodeBounds = false; + public boolean inMutable = false; + public boolean inPreferQualityOverSpeed = false; + public boolean inPremultiplied = false; + public boolean inPurgeable = false; + public boolean inScaled = false; + public boolean mCancel = false; + public byte[] inTempStorage = null; + public int inDensity = 0; + public int inSampleSize = 0; + public int inScreenDensity = 0; + public int inTargetDensity = 0; + public int outHeight = 0; + public int outWidth = 0; + public void requestCancelDecode(){} + } +} diff --git a/java/ql/test/stubs/android/android/graphics/BlendMode.java b/java/ql/test/stubs/android/android/graphics/BlendMode.java new file mode 100644 index 00000000000..32510e36bdd --- /dev/null +++ b/java/ql/test/stubs/android/android/graphics/BlendMode.java @@ -0,0 +1,10 @@ +// Generated automatically from android.graphics.BlendMode for testing purposes + +package android.graphics; + + +public enum BlendMode +{ + CLEAR, COLOR, COLOR_BURN, COLOR_DODGE, DARKEN, DIFFERENCE, DST, DST_ATOP, DST_IN, DST_OUT, DST_OVER, EXCLUSION, HARD_LIGHT, HUE, LIGHTEN, LUMINOSITY, MODULATE, MULTIPLY, OVERLAY, PLUS, SATURATION, SCREEN, SOFT_LIGHT, SRC, SRC_ATOP, SRC_IN, SRC_OUT, SRC_OVER, XOR; + private BlendMode() {} +} diff --git a/java/ql/test/stubs/android/android/graphics/Canvas.java b/java/ql/test/stubs/android/android/graphics/Canvas.java new file mode 100644 index 00000000000..26c4536a2aa --- /dev/null +++ b/java/ql/test/stubs/android/android/graphics/Canvas.java @@ -0,0 +1,141 @@ +// Generated automatically from android.graphics.Canvas for testing purposes + +package android.graphics; + +import android.graphics.Bitmap; +import android.graphics.BlendMode; +import android.graphics.DrawFilter; +import android.graphics.Matrix; +import android.graphics.Paint; +import android.graphics.Path; +import android.graphics.Picture; +import android.graphics.PorterDuff; +import android.graphics.Rect; +import android.graphics.RectF; +import android.graphics.Region; +import android.graphics.RenderNode; +import android.graphics.text.MeasuredText; + +public class Canvas +{ + public Canvas(){} + public Canvas(Bitmap p0){} + public DrawFilter getDrawFilter(){ return null; } + public boolean clipOutPath(Path p0){ return false; } + public boolean clipOutRect(Rect p0){ return false; } + public boolean clipOutRect(RectF p0){ return false; } + public boolean clipOutRect(float p0, float p1, float p2, float p3){ return false; } + public boolean clipOutRect(int p0, int p1, int p2, int p3){ return false; } + public boolean clipPath(Path p0){ return false; } + public boolean clipPath(Path p0, Region.Op p1){ return false; } + public boolean clipRect(Rect p0){ return false; } + public boolean clipRect(Rect p0, Region.Op p1){ return false; } + public boolean clipRect(RectF p0){ return false; } + public boolean clipRect(RectF p0, Region.Op p1){ return false; } + public boolean clipRect(float p0, float p1, float p2, float p3){ return false; } + public boolean clipRect(float p0, float p1, float p2, float p3, Region.Op p4){ return false; } + public boolean clipRect(int p0, int p1, int p2, int p3){ return false; } + public boolean getClipBounds(Rect p0){ return false; } + public boolean isHardwareAccelerated(){ return false; } + public boolean isOpaque(){ return false; } + public boolean quickReject(Path p0){ return false; } + public boolean quickReject(Path p0, Canvas.EdgeType p1){ return false; } + public boolean quickReject(RectF p0){ return false; } + public boolean quickReject(RectF p0, Canvas.EdgeType p1){ return false; } + public boolean quickReject(float p0, float p1, float p2, float p3){ return false; } + public boolean quickReject(float p0, float p1, float p2, float p3, Canvas.EdgeType p4){ return false; } + public final Matrix getMatrix(){ return null; } + public final Rect getClipBounds(){ return null; } + public final void rotate(float p0, float p1, float p2){} + public final void scale(float p0, float p1, float p2, float p3){} + public int getDensity(){ return 0; } + public int getHeight(){ return 0; } + public int getMaximumBitmapHeight(){ return 0; } + public int getMaximumBitmapWidth(){ return 0; } + public int getSaveCount(){ return 0; } + public int getWidth(){ return 0; } + public int save(){ return 0; } + public int saveLayer(RectF p0, Paint p1){ return 0; } + public int saveLayer(RectF p0, Paint p1, int p2){ return 0; } + public int saveLayer(float p0, float p1, float p2, float p3, Paint p4){ return 0; } + public int saveLayer(float p0, float p1, float p2, float p3, Paint p4, int p5){ return 0; } + public int saveLayerAlpha(RectF p0, int p1){ return 0; } + public int saveLayerAlpha(RectF p0, int p1, int p2){ return 0; } + public int saveLayerAlpha(float p0, float p1, float p2, float p3, int p4){ return 0; } + public int saveLayerAlpha(float p0, float p1, float p2, float p3, int p4, int p5){ return 0; } + public static int ALL_SAVE_FLAG = 0; + public void concat(Matrix p0){} + public void disableZ(){} + public void drawARGB(int p0, int p1, int p2, int p3){} + public void drawArc(RectF p0, float p1, float p2, boolean p3, Paint p4){} + public void drawArc(float p0, float p1, float p2, float p3, float p4, float p5, boolean p6, Paint p7){} + public void drawBitmap(Bitmap p0, Matrix p1, Paint p2){} + public void drawBitmap(Bitmap p0, Rect p1, Rect p2, Paint p3){} + public void drawBitmap(Bitmap p0, Rect p1, RectF p2, Paint p3){} + public void drawBitmap(Bitmap p0, float p1, float p2, Paint p3){} + public void drawBitmap(int[] p0, int p1, int p2, float p3, float p4, int p5, int p6, boolean p7, Paint p8){} + public void drawBitmap(int[] p0, int p1, int p2, int p3, int p4, int p5, int p6, boolean p7, Paint p8){} + public void drawBitmapMesh(Bitmap p0, int p1, int p2, float[] p3, int p4, int[] p5, int p6, Paint p7){} + public void drawCircle(float p0, float p1, float p2, Paint p3){} + public void drawColor(int p0){} + public void drawColor(int p0, BlendMode p1){} + public void drawColor(int p0, PorterDuff.Mode p1){} + public void drawColor(long p0){} + public void drawColor(long p0, BlendMode p1){} + public void drawDoubleRoundRect(RectF p0, float p1, float p2, RectF p3, float p4, float p5, Paint p6){} + public void drawDoubleRoundRect(RectF p0, float[] p1, RectF p2, float[] p3, Paint p4){} + public void drawLine(float p0, float p1, float p2, float p3, Paint p4){} + public void drawLines(float[] p0, Paint p1){} + public void drawLines(float[] p0, int p1, int p2, Paint p3){} + public void drawOval(RectF p0, Paint p1){} + public void drawOval(float p0, float p1, float p2, float p3, Paint p4){} + public void drawPaint(Paint p0){} + public void drawPath(Path p0, Paint p1){} + public void drawPicture(Picture p0){} + public void drawPicture(Picture p0, Rect p1){} + public void drawPicture(Picture p0, RectF p1){} + public void drawPoint(float p0, float p1, Paint p2){} + public void drawPoints(float[] p0, Paint p1){} + public void drawPoints(float[] p0, int p1, int p2, Paint p3){} + public void drawPosText(String p0, float[] p1, Paint p2){} + public void drawPosText(char[] p0, int p1, int p2, float[] p3, Paint p4){} + public void drawRGB(int p0, int p1, int p2){} + public void drawRect(Rect p0, Paint p1){} + public void drawRect(RectF p0, Paint p1){} + public void drawRect(float p0, float p1, float p2, float p3, Paint p4){} + public void drawRenderNode(RenderNode p0){} + public void drawRoundRect(RectF p0, float p1, float p2, Paint p3){} + public void drawRoundRect(float p0, float p1, float p2, float p3, float p4, float p5, Paint p6){} + public void drawText(CharSequence p0, int p1, int p2, float p3, float p4, Paint p5){} + public void drawText(String p0, float p1, float p2, Paint p3){} + public void drawText(String p0, int p1, int p2, float p3, float p4, Paint p5){} + public void drawText(char[] p0, int p1, int p2, float p3, float p4, Paint p5){} + public void drawTextOnPath(String p0, Path p1, float p2, float p3, Paint p4){} + public void drawTextOnPath(char[] p0, int p1, int p2, Path p3, float p4, float p5, Paint p6){} + public void drawTextRun(CharSequence p0, int p1, int p2, int p3, int p4, float p5, float p6, boolean p7, Paint p8){} + public void drawTextRun(MeasuredText p0, int p1, int p2, int p3, int p4, float p5, float p6, boolean p7, Paint p8){} + public void drawTextRun(char[] p0, int p1, int p2, int p3, int p4, float p5, float p6, boolean p7, Paint p8){} + public void drawVertices(Canvas.VertexMode p0, int p1, float[] p2, int p3, float[] p4, int p5, int[] p6, int p7, short[] p8, int p9, int p10, Paint p11){} + public void enableZ(){} + public void getMatrix(Matrix p0){} + public void restore(){} + public void restoreToCount(int p0){} + public void rotate(float p0){} + public void scale(float p0, float p1){} + public void setBitmap(Bitmap p0){} + public void setDensity(int p0){} + public void setDrawFilter(DrawFilter p0){} + public void setMatrix(Matrix p0){} + public void skew(float p0, float p1){} + public void translate(float p0, float p1){} + static public enum EdgeType + { + AA, BW; + private EdgeType() {} + } + static public enum VertexMode + { + TRIANGLES, TRIANGLE_FAN, TRIANGLE_STRIP; + private VertexMode() {} + } +} diff --git a/java/ql/test/stubs/android/android/graphics/Color.java b/java/ql/test/stubs/android/android/graphics/Color.java new file mode 100644 index 00000000000..45f1e68548c --- /dev/null +++ b/java/ql/test/stubs/android/android/graphics/Color.java @@ -0,0 +1,80 @@ +// Generated automatically from android.graphics.Color for testing purposes + +package android.graphics; + +import android.graphics.ColorSpace; + +public class Color +{ + public Color convert(ColorSpace p0){ return null; } + public Color(){} + public ColorSpace getColorSpace(){ return null; } + public ColorSpace.Model getModel(){ return null; } + public String toString(){ return null; } + public boolean equals(Object p0){ return false; } + public boolean isSrgb(){ return false; } + public boolean isWideGamut(){ return false; } + public float alpha(){ return 0; } + public float blue(){ return 0; } + public float getComponent(int p0){ return 0; } + public float green(){ return 0; } + public float luminance(){ return 0; } + public float red(){ return 0; } + public float[] getComponents(){ return null; } + public float[] getComponents(float[] p0){ return null; } + public int getComponentCount(){ return 0; } + public int hashCode(){ return 0; } + public int toArgb(){ return 0; } + public long pack(){ return 0; } + public static Color valueOf(float p0, float p1, float p2){ return null; } + public static Color valueOf(float p0, float p1, float p2, float p3){ return null; } + public static Color valueOf(float p0, float p1, float p2, float p3, ColorSpace p4){ return null; } + public static Color valueOf(float[] p0, ColorSpace p1){ return null; } + public static Color valueOf(int p0){ return null; } + public static Color valueOf(long p0){ return null; } + public static ColorSpace colorSpace(long p0){ return null; } + public static boolean isInColorSpace(long p0, ColorSpace p1){ return false; } + public static boolean isSrgb(long p0){ return false; } + public static boolean isWideGamut(long p0){ return false; } + public static float alpha(long p0){ return 0; } + public static float blue(long p0){ return 0; } + public static float green(long p0){ return 0; } + public static float luminance(int p0){ return 0; } + public static float luminance(long p0){ return 0; } + public static float red(long p0){ return 0; } + public static int BLACK = 0; + public static int BLUE = 0; + public static int CYAN = 0; + public static int DKGRAY = 0; + public static int GRAY = 0; + public static int GREEN = 0; + public static int HSVToColor(float[] p0){ return 0; } + public static int HSVToColor(int p0, float[] p1){ return 0; } + public static int LTGRAY = 0; + public static int MAGENTA = 0; + public static int RED = 0; + public static int TRANSPARENT = 0; + public static int WHITE = 0; + public static int YELLOW = 0; + public static int alpha(int p0){ return 0; } + public static int argb(float p0, float p1, float p2, float p3){ return 0; } + public static int argb(int p0, int p1, int p2, int p3){ return 0; } + public static int blue(int p0){ return 0; } + public static int green(int p0){ return 0; } + public static int parseColor(String p0){ return 0; } + public static int red(int p0){ return 0; } + public static int rgb(float p0, float p1, float p2){ return 0; } + public static int rgb(int p0, int p1, int p2){ return 0; } + public static int toArgb(long p0){ return 0; } + public static long convert(float p0, float p1, float p2, float p3, ColorSpace p4, ColorSpace p5){ return 0; } + public static long convert(float p0, float p1, float p2, float p3, ColorSpace.Connector p4){ return 0; } + public static long convert(int p0, ColorSpace p1){ return 0; } + public static long convert(long p0, ColorSpace p1){ return 0; } + public static long convert(long p0, ColorSpace.Connector p1){ return 0; } + public static long pack(float p0, float p1, float p2){ return 0; } + public static long pack(float p0, float p1, float p2, float p3){ return 0; } + public static long pack(float p0, float p1, float p2, float p3, ColorSpace p4){ return 0; } + public static long pack(int p0){ return 0; } + public static void RGBToHSV(int p0, int p1, int p2, float[] p3){} + public static void colorToHSV(int p0, float[] p1){} +} diff --git a/java/ql/test/stubs/android/android/graphics/ColorFilter.java b/java/ql/test/stubs/android/android/graphics/ColorFilter.java new file mode 100644 index 00000000000..06a565743de --- /dev/null +++ b/java/ql/test/stubs/android/android/graphics/ColorFilter.java @@ -0,0 +1,9 @@ +// Generated automatically from android.graphics.ColorFilter for testing purposes + +package android.graphics; + + +public class ColorFilter +{ + public ColorFilter(){} +} diff --git a/java/ql/test/stubs/android/android/graphics/ColorSpace.java b/java/ql/test/stubs/android/android/graphics/ColorSpace.java new file mode 100644 index 00000000000..80c1ebcbbe4 --- /dev/null +++ b/java/ql/test/stubs/android/android/graphics/ColorSpace.java @@ -0,0 +1,120 @@ +// Generated automatically from android.graphics.ColorSpace for testing purposes + +package android.graphics; + +import java.util.function.DoubleUnaryOperator; + +abstract public class ColorSpace +{ + public ColorSpace.Model getModel(){ return null; } + public String getName(){ return null; } + public String toString(){ return null; } + public abstract boolean isWideGamut(); + public abstract float getMaxValue(int p0); + public abstract float getMinValue(int p0); + public abstract float[] fromXyz(float[] p0); + public abstract float[] toXyz(float[] p0); + public boolean equals(Object p0){ return false; } + public boolean isSrgb(){ return false; } + public float[] fromXyz(float p0, float p1, float p2){ return null; } + public float[] toXyz(float p0, float p1, float p2){ return null; } + public int getComponentCount(){ return 0; } + public int getId(){ return 0; } + public int hashCode(){ return 0; } + public static ColorSpace adapt(ColorSpace p0, float[] p1){ return null; } + public static ColorSpace adapt(ColorSpace p0, float[] p1, ColorSpace.Adaptation p2){ return null; } + public static ColorSpace get(ColorSpace.Named p0){ return null; } + public static ColorSpace match(float[] p0, ColorSpace.Rgb.TransferParameters p1){ return null; } + public static ColorSpace.Connector connect(ColorSpace p0){ return null; } + public static ColorSpace.Connector connect(ColorSpace p0, ColorSpace p1){ return null; } + public static ColorSpace.Connector connect(ColorSpace p0, ColorSpace p1, ColorSpace.RenderIntent p2){ return null; } + public static ColorSpace.Connector connect(ColorSpace p0, ColorSpace.RenderIntent p1){ return null; } + public static float[] ILLUMINANT_A = null; + public static float[] ILLUMINANT_B = null; + public static float[] ILLUMINANT_C = null; + public static float[] ILLUMINANT_D50 = null; + public static float[] ILLUMINANT_D55 = null; + public static float[] ILLUMINANT_D60 = null; + public static float[] ILLUMINANT_D65 = null; + public static float[] ILLUMINANT_D75 = null; + public static float[] ILLUMINANT_E = null; + public static int MAX_ID = 0; + public static int MIN_ID = 0; + static public class Connector + { + public ColorSpace getDestination(){ return null; } + public ColorSpace getSource(){ return null; } + public ColorSpace.RenderIntent getRenderIntent(){ return null; } + public float[] transform(float p0, float p1, float p2){ return null; } + public float[] transform(float[] p0){ return null; } + } + static public class Rgb extends ColorSpace + { + protected Rgb() {} + public ColorSpace.Rgb.TransferParameters getTransferParameters(){ return null; } + public DoubleUnaryOperator getEotf(){ return null; } + public DoubleUnaryOperator getOetf(){ return null; } + public Rgb(String p0, float[] p1, ColorSpace.Rgb.TransferParameters p2){} + public Rgb(String p0, float[] p1, DoubleUnaryOperator p2, DoubleUnaryOperator p3){} + public Rgb(String p0, float[] p1, double p2){} + public Rgb(String p0, float[] p1, float[] p2, ColorSpace.Rgb.TransferParameters p3){} + public Rgb(String p0, float[] p1, float[] p2, DoubleUnaryOperator p3, DoubleUnaryOperator p4, float p5, float p6){} + public Rgb(String p0, float[] p1, float[] p2, double p3){} + public boolean equals(Object p0){ return false; } + public boolean isSrgb(){ return false; } + public boolean isWideGamut(){ return false; } + public float getMaxValue(int p0){ return 0; } + public float getMinValue(int p0){ return 0; } + public float[] fromLinear(float p0, float p1, float p2){ return null; } + public float[] fromLinear(float[] p0){ return null; } + public float[] fromXyz(float[] p0){ return null; } + public float[] getInverseTransform(){ return null; } + public float[] getInverseTransform(float[] p0){ return null; } + public float[] getPrimaries(){ return null; } + public float[] getPrimaries(float[] p0){ return null; } + public float[] getTransform(){ return null; } + public float[] getTransform(float[] p0){ return null; } + public float[] getWhitePoint(){ return null; } + public float[] getWhitePoint(float[] p0){ return null; } + public float[] toLinear(float p0, float p1, float p2){ return null; } + public float[] toLinear(float[] p0){ return null; } + public float[] toXyz(float[] p0){ return null; } + public int hashCode(){ return 0; } + static public class TransferParameters + { + protected TransferParameters() {} + public TransferParameters(double p0, double p1, double p2, double p3, double p4){} + public TransferParameters(double p0, double p1, double p2, double p3, double p4, double p5, double p6){} + public boolean equals(Object p0){ return false; } + public final double a = 0; + public final double b = 0; + public final double c = 0; + public final double d = 0; + public final double e = 0; + public final double f = 0; + public final double g = 0; + public int hashCode(){ return 0; } + } + } + static public enum Adaptation + { + BRADFORD, CIECAT02, VON_KRIES; + private Adaptation() {} + } + static public enum Model + { + CMYK, LAB, RGB, XYZ; + private Model() {} + public int getComponentCount(){ return 0; } + } + static public enum Named + { + ACES, ACESCG, ADOBE_RGB, BT2020, BT709, CIE_LAB, CIE_XYZ, DCI_P3, DISPLAY_P3, EXTENDED_SRGB, LINEAR_EXTENDED_SRGB, LINEAR_SRGB, NTSC_1953, PRO_PHOTO_RGB, SMPTE_C, SRGB; + private Named() {} + } + static public enum RenderIntent + { + ABSOLUTE, PERCEPTUAL, RELATIVE, SATURATION; + private RenderIntent() {} + } +} diff --git a/java/ql/test/stubs/android/android/graphics/DrawFilter.java b/java/ql/test/stubs/android/android/graphics/DrawFilter.java new file mode 100644 index 00000000000..ed760270a81 --- /dev/null +++ b/java/ql/test/stubs/android/android/graphics/DrawFilter.java @@ -0,0 +1,10 @@ +// Generated automatically from android.graphics.DrawFilter for testing purposes + +package android.graphics; + + +public class DrawFilter +{ + protected void finalize(){} + public DrawFilter(){} +} diff --git a/java/ql/test/stubs/android/android/graphics/Insets.java b/java/ql/test/stubs/android/android/graphics/Insets.java new file mode 100644 index 00000000000..3e61e03cd68 --- /dev/null +++ b/java/ql/test/stubs/android/android/graphics/Insets.java @@ -0,0 +1,29 @@ +// Generated automatically from android.graphics.Insets for testing purposes + +package android.graphics; + +import android.graphics.Rect; +import android.os.Parcel; +import android.os.Parcelable; + +public class Insets implements Parcelable +{ + protected Insets() {} + public String toString(){ return null; } + public boolean equals(Object p0){ return false; } + public final int bottom = 0; + public final int left = 0; + public final int right = 0; + public final int top = 0; + public int describeContents(){ return 0; } + public int hashCode(){ return 0; } + public static Insets NONE = null; + public static Insets add(Insets p0, Insets p1){ return null; } + public static Insets max(Insets p0, Insets p1){ return null; } + public static Insets min(Insets p0, Insets p1){ return null; } + public static Insets of(Rect p0){ return null; } + public static Insets of(int p0, int p1, int p2, int p3){ return null; } + public static Insets subtract(Insets p0, Insets p1){ return null; } + public static Parcelable.Creator CREATOR = null; + public void writeToParcel(Parcel p0, int p1){} +} diff --git a/java/ql/test/stubs/android/android/graphics/MaskFilter.java b/java/ql/test/stubs/android/android/graphics/MaskFilter.java new file mode 100644 index 00000000000..0355b5c1206 --- /dev/null +++ b/java/ql/test/stubs/android/android/graphics/MaskFilter.java @@ -0,0 +1,10 @@ +// Generated automatically from android.graphics.MaskFilter for testing purposes + +package android.graphics; + + +public class MaskFilter +{ + protected void finalize(){} + public MaskFilter(){} +} diff --git a/java/ql/test/stubs/android/android/graphics/Matrix.java b/java/ql/test/stubs/android/android/graphics/Matrix.java new file mode 100644 index 00000000000..fc003bac004 --- /dev/null +++ b/java/ql/test/stubs/android/android/graphics/Matrix.java @@ -0,0 +1,74 @@ +// Generated automatically from android.graphics.Matrix for testing purposes + +package android.graphics; + +import android.graphics.RectF; + +public class Matrix +{ + public Matrix(){} + public Matrix(Matrix p0){} + public String toShortString(){ return null; } + public String toString(){ return null; } + public boolean equals(Object p0){ return false; } + public boolean invert(Matrix p0){ return false; } + public boolean isAffine(){ return false; } + public boolean isIdentity(){ return false; } + public boolean mapRect(RectF p0){ return false; } + public boolean mapRect(RectF p0, RectF p1){ return false; } + public boolean postConcat(Matrix p0){ return false; } + public boolean postRotate(float p0){ return false; } + public boolean postRotate(float p0, float p1, float p2){ return false; } + public boolean postScale(float p0, float p1){ return false; } + public boolean postScale(float p0, float p1, float p2, float p3){ return false; } + public boolean postSkew(float p0, float p1){ return false; } + public boolean postSkew(float p0, float p1, float p2, float p3){ return false; } + public boolean postTranslate(float p0, float p1){ return false; } + public boolean preConcat(Matrix p0){ return false; } + public boolean preRotate(float p0){ return false; } + public boolean preRotate(float p0, float p1, float p2){ return false; } + public boolean preScale(float p0, float p1){ return false; } + public boolean preScale(float p0, float p1, float p2, float p3){ return false; } + public boolean preSkew(float p0, float p1){ return false; } + public boolean preSkew(float p0, float p1, float p2, float p3){ return false; } + public boolean preTranslate(float p0, float p1){ return false; } + public boolean rectStaysRect(){ return false; } + public boolean setConcat(Matrix p0, Matrix p1){ return false; } + public boolean setPolyToPoly(float[] p0, int p1, float[] p2, int p3, int p4){ return false; } + public boolean setRectToRect(RectF p0, RectF p1, Matrix.ScaleToFit p2){ return false; } + public float mapRadius(float p0){ return 0; } + public int hashCode(){ return 0; } + public static int MPERSP_0 = 0; + public static int MPERSP_1 = 0; + public static int MPERSP_2 = 0; + public static int MSCALE_X = 0; + public static int MSCALE_Y = 0; + public static int MSKEW_X = 0; + public static int MSKEW_Y = 0; + public static int MTRANS_X = 0; + public static int MTRANS_Y = 0; + public void getValues(float[] p0){} + public void mapPoints(float[] p0){} + public void mapPoints(float[] p0, float[] p1){} + public void mapPoints(float[] p0, int p1, float[] p2, int p3, int p4){} + public void mapVectors(float[] p0){} + public void mapVectors(float[] p0, float[] p1){} + public void mapVectors(float[] p0, int p1, float[] p2, int p3, int p4){} + public void reset(){} + public void set(Matrix p0){} + public void setRotate(float p0){} + public void setRotate(float p0, float p1, float p2){} + public void setScale(float p0, float p1){} + public void setScale(float p0, float p1, float p2, float p3){} + public void setSinCos(float p0, float p1){} + public void setSinCos(float p0, float p1, float p2, float p3){} + public void setSkew(float p0, float p1){} + public void setSkew(float p0, float p1, float p2, float p3){} + public void setTranslate(float p0, float p1){} + public void setValues(float[] p0){} + static public enum ScaleToFit + { + CENTER, END, FILL, START; + private ScaleToFit() {} + } +} diff --git a/java/ql/test/stubs/android/android/graphics/Movie.java b/java/ql/test/stubs/android/android/graphics/Movie.java new file mode 100644 index 00000000000..dd531ba7e04 --- /dev/null +++ b/java/ql/test/stubs/android/android/graphics/Movie.java @@ -0,0 +1,23 @@ +// Generated automatically from android.graphics.Movie for testing purposes + +package android.graphics; + +import android.graphics.Canvas; +import android.graphics.Paint; +import java.io.InputStream; + +public class Movie +{ + protected Movie() {} + protected void finalize(){} + public boolean isOpaque(){ return false; } + public boolean setTime(int p0){ return false; } + public int duration(){ return 0; } + public int height(){ return 0; } + public int width(){ return 0; } + public static Movie decodeByteArray(byte[] p0, int p1, int p2){ return null; } + public static Movie decodeFile(String p0){ return null; } + public static Movie decodeStream(InputStream p0){ return null; } + public void draw(Canvas p0, float p1, float p2){} + public void draw(Canvas p0, float p1, float p2, Paint p3){} +} diff --git a/java/ql/test/stubs/android/android/graphics/NinePatch.java b/java/ql/test/stubs/android/android/graphics/NinePatch.java new file mode 100644 index 00000000000..0fa7bc2eb69 --- /dev/null +++ b/java/ql/test/stubs/android/android/graphics/NinePatch.java @@ -0,0 +1,31 @@ +// Generated automatically from android.graphics.NinePatch for testing purposes + +package android.graphics; + +import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.graphics.Rect; +import android.graphics.RectF; +import android.graphics.Region; + +public class NinePatch +{ + protected NinePatch() {} + protected void finalize(){} + public Bitmap getBitmap(){ return null; } + public NinePatch(Bitmap p0, byte[] p1){} + public NinePatch(Bitmap p0, byte[] p1, String p2){} + public Paint getPaint(){ return null; } + public String getName(){ return null; } + public final Region getTransparentRegion(Rect p0){ return null; } + public final boolean hasAlpha(){ return false; } + public int getDensity(){ return 0; } + public int getHeight(){ return 0; } + public int getWidth(){ return 0; } + public static boolean isNinePatchChunk(byte[] p0){ return false; } + public void draw(Canvas p0, Rect p1){} + public void draw(Canvas p0, Rect p1, Paint p2){} + public void draw(Canvas p0, RectF p1){} + public void setPaint(Paint p0){} +} diff --git a/java/ql/test/stubs/android/android/graphics/Outline.java b/java/ql/test/stubs/android/android/graphics/Outline.java new file mode 100644 index 00000000000..4367be91cdd --- /dev/null +++ b/java/ql/test/stubs/android/android/graphics/Outline.java @@ -0,0 +1,29 @@ +// Generated automatically from android.graphics.Outline for testing purposes + +package android.graphics; + +import android.graphics.Path; +import android.graphics.Rect; + +public class Outline +{ + public Outline(){} + public Outline(Outline p0){} + public boolean canClip(){ return false; } + public boolean getRect(Rect p0){ return false; } + public boolean isEmpty(){ return false; } + public float getAlpha(){ return 0; } + public float getRadius(){ return 0; } + public void offset(int p0, int p1){} + public void set(Outline p0){} + public void setAlpha(float p0){} + public void setConvexPath(Path p0){} + public void setEmpty(){} + public void setOval(Rect p0){} + public void setOval(int p0, int p1, int p2, int p3){} + public void setPath(Path p0){} + public void setRect(Rect p0){} + public void setRect(int p0, int p1, int p2, int p3){} + public void setRoundRect(Rect p0, float p1){} + public void setRoundRect(int p0, int p1, int p2, int p3, float p4){} +} diff --git a/java/ql/test/stubs/android/android/graphics/Paint.java b/java/ql/test/stubs/android/android/graphics/Paint.java new file mode 100644 index 00000000000..810aecc3617 --- /dev/null +++ b/java/ql/test/stubs/android/android/graphics/Paint.java @@ -0,0 +1,212 @@ +// Generated automatically from android.graphics.Paint for testing purposes + +package android.graphics; + +import android.graphics.BlendMode; +import android.graphics.ColorFilter; +import android.graphics.MaskFilter; +import android.graphics.Path; +import android.graphics.PathEffect; +import android.graphics.Rect; +import android.graphics.Shader; +import android.graphics.Typeface; +import android.graphics.Xfermode; +import android.os.LocaleList; +import java.util.Locale; + +public class Paint +{ + public BlendMode getBlendMode(){ return null; } + public ColorFilter getColorFilter(){ return null; } + public ColorFilter setColorFilter(ColorFilter p0){ return null; } + public Locale getTextLocale(){ return null; } + public LocaleList getTextLocales(){ return null; } + public MaskFilter getMaskFilter(){ return null; } + public MaskFilter setMaskFilter(MaskFilter p0){ return null; } + public Paint(){} + public Paint(Paint p0){} + public Paint(int p0){} + public Paint.Align getTextAlign(){ return null; } + public Paint.Cap getStrokeCap(){ return null; } + public Paint.FontMetrics getFontMetrics(){ return null; } + public Paint.FontMetricsInt getFontMetricsInt(){ return null; } + public Paint.Join getStrokeJoin(){ return null; } + public Paint.Style getStyle(){ return null; } + public PathEffect getPathEffect(){ return null; } + public PathEffect setPathEffect(PathEffect p0){ return null; } + public Shader getShader(){ return null; } + public Shader setShader(Shader p0){ return null; } + public String getFontFeatureSettings(){ return null; } + public String getFontVariationSettings(){ return null; } + public Typeface getTypeface(){ return null; } + public Typeface setTypeface(Typeface p0){ return null; } + public Xfermode getXfermode(){ return null; } + public Xfermode setXfermode(Xfermode p0){ return null; } + public boolean equalsForTextMeasurement(Paint p0){ return false; } + public boolean getFillPath(Path p0, Path p1){ return false; } + public boolean hasGlyph(String p0){ return false; } + public boolean isElegantTextHeight(){ return false; } + public boolean setFontVariationSettings(String p0){ return false; } + public final boolean isAntiAlias(){ return false; } + public final boolean isDither(){ return false; } + public final boolean isFakeBoldText(){ return false; } + public final boolean isFilterBitmap(){ return false; } + public final boolean isLinearText(){ return false; } + public final boolean isStrikeThruText(){ return false; } + public final boolean isSubpixelText(){ return false; } + public final boolean isUnderlineText(){ return false; } + public float ascent(){ return 0; } + public float descent(){ return 0; } + public float getFontMetrics(Paint.FontMetrics p0){ return 0; } + public float getFontSpacing(){ return 0; } + public float getLetterSpacing(){ return 0; } + public float getRunAdvance(CharSequence p0, int p1, int p2, int p3, int p4, boolean p5, int p6){ return 0; } + public float getRunAdvance(char[] p0, int p1, int p2, int p3, int p4, boolean p5, int p6){ return 0; } + public float getShadowLayerDx(){ return 0; } + public float getShadowLayerDy(){ return 0; } + public float getShadowLayerRadius(){ return 0; } + public float getStrikeThruPosition(){ return 0; } + public float getStrikeThruThickness(){ return 0; } + public float getStrokeMiter(){ return 0; } + public float getStrokeWidth(){ return 0; } + public float getTextRunAdvances(char[] p0, int p1, int p2, int p3, int p4, boolean p5, float[] p6, int p7){ return 0; } + public float getTextScaleX(){ return 0; } + public float getTextSize(){ return 0; } + public float getTextSkewX(){ return 0; } + public float getUnderlinePosition(){ return 0; } + public float getUnderlineThickness(){ return 0; } + public float getWordSpacing(){ return 0; } + public float measureText(CharSequence p0, int p1, int p2){ return 0; } + public float measureText(String p0){ return 0; } + public float measureText(String p0, int p1, int p2){ return 0; } + public float measureText(char[] p0, int p1, int p2){ return 0; } + public int breakText(CharSequence p0, int p1, int p2, boolean p3, float p4, float[] p5){ return 0; } + public int breakText(String p0, boolean p1, float p2, float[] p3){ return 0; } + public int breakText(char[] p0, int p1, int p2, float p3, float[] p4){ return 0; } + public int getAlpha(){ return 0; } + public int getColor(){ return 0; } + public int getEndHyphenEdit(){ return 0; } + public int getFlags(){ return 0; } + public int getFontMetricsInt(Paint.FontMetricsInt p0){ return 0; } + public int getHinting(){ return 0; } + public int getOffsetForAdvance(CharSequence p0, int p1, int p2, int p3, int p4, boolean p5, float p6){ return 0; } + public int getOffsetForAdvance(char[] p0, int p1, int p2, int p3, int p4, boolean p5, float p6){ return 0; } + public int getShadowLayerColor(){ return 0; } + public int getStartHyphenEdit(){ return 0; } + public int getTextRunCursor(CharSequence p0, int p1, int p2, boolean p3, int p4, int p5){ return 0; } + public int getTextRunCursor(char[] p0, int p1, int p2, boolean p3, int p4, int p5){ return 0; } + public int getTextWidths(CharSequence p0, int p1, int p2, float[] p3){ return 0; } + public int getTextWidths(String p0, float[] p1){ return 0; } + public int getTextWidths(String p0, int p1, int p2, float[] p3){ return 0; } + public int getTextWidths(char[] p0, int p1, int p2, float[] p3){ return 0; } + public long getColorLong(){ return 0; } + public long getShadowLayerColorLong(){ return 0; } + public static int ANTI_ALIAS_FLAG = 0; + public static int CURSOR_AFTER = 0; + public static int CURSOR_AT = 0; + public static int CURSOR_AT_OR_AFTER = 0; + public static int CURSOR_AT_OR_BEFORE = 0; + public static int CURSOR_BEFORE = 0; + public static int DEV_KERN_TEXT_FLAG = 0; + public static int DITHER_FLAG = 0; + public static int EMBEDDED_BITMAP_TEXT_FLAG = 0; + public static int END_HYPHEN_EDIT_INSERT_ARMENIAN_HYPHEN = 0; + public static int END_HYPHEN_EDIT_INSERT_HYPHEN = 0; + public static int END_HYPHEN_EDIT_INSERT_MAQAF = 0; + public static int END_HYPHEN_EDIT_INSERT_UCAS_HYPHEN = 0; + public static int END_HYPHEN_EDIT_INSERT_ZWJ_AND_HYPHEN = 0; + public static int END_HYPHEN_EDIT_NO_EDIT = 0; + public static int END_HYPHEN_EDIT_REPLACE_WITH_HYPHEN = 0; + public static int FAKE_BOLD_TEXT_FLAG = 0; + public static int FILTER_BITMAP_FLAG = 0; + public static int HINTING_OFF = 0; + public static int HINTING_ON = 0; + public static int LINEAR_TEXT_FLAG = 0; + public static int START_HYPHEN_EDIT_INSERT_HYPHEN = 0; + public static int START_HYPHEN_EDIT_INSERT_ZWJ = 0; + public static int START_HYPHEN_EDIT_NO_EDIT = 0; + public static int STRIKE_THRU_TEXT_FLAG = 0; + public static int SUBPIXEL_TEXT_FLAG = 0; + public static int UNDERLINE_TEXT_FLAG = 0; + public void clearShadowLayer(){} + public void getTextBounds(CharSequence p0, int p1, int p2, Rect p3){} + public void getTextBounds(String p0, int p1, int p2, Rect p3){} + public void getTextBounds(char[] p0, int p1, int p2, Rect p3){} + public void getTextPath(String p0, int p1, int p2, float p3, float p4, Path p5){} + public void getTextPath(char[] p0, int p1, int p2, float p3, float p4, Path p5){} + public void reset(){} + public void set(Paint p0){} + public void setARGB(int p0, int p1, int p2, int p3){} + public void setAlpha(int p0){} + public void setAntiAlias(boolean p0){} + public void setBlendMode(BlendMode p0){} + public void setColor(int p0){} + public void setColor(long p0){} + public void setDither(boolean p0){} + public void setElegantTextHeight(boolean p0){} + public void setEndHyphenEdit(int p0){} + public void setFakeBoldText(boolean p0){} + public void setFilterBitmap(boolean p0){} + public void setFlags(int p0){} + public void setFontFeatureSettings(String p0){} + public void setHinting(int p0){} + public void setLetterSpacing(float p0){} + public void setLinearText(boolean p0){} + public void setShadowLayer(float p0, float p1, float p2, int p3){} + public void setShadowLayer(float p0, float p1, float p2, long p3){} + public void setStartHyphenEdit(int p0){} + public void setStrikeThruText(boolean p0){} + public void setStrokeCap(Paint.Cap p0){} + public void setStrokeJoin(Paint.Join p0){} + public void setStrokeMiter(float p0){} + public void setStrokeWidth(float p0){} + public void setStyle(Paint.Style p0){} + public void setSubpixelText(boolean p0){} + public void setTextAlign(Paint.Align p0){} + public void setTextLocale(Locale p0){} + public void setTextLocales(LocaleList p0){} + public void setTextScaleX(float p0){} + public void setTextSize(float p0){} + public void setTextSkewX(float p0){} + public void setUnderlineText(boolean p0){} + public void setWordSpacing(float p0){} + static public class FontMetrics + { + public FontMetrics(){} + public float ascent = 0; + public float bottom = 0; + public float descent = 0; + public float leading = 0; + public float top = 0; + } + static public class FontMetricsInt + { + public FontMetricsInt(){} + public String toString(){ return null; } + public int ascent = 0; + public int bottom = 0; + public int descent = 0; + public int leading = 0; + public int top = 0; + } + static public enum Align + { + CENTER, LEFT, RIGHT; + private Align() {} + } + static public enum Cap + { + BUTT, ROUND, SQUARE; + private Cap() {} + } + static public enum Join + { + BEVEL, MITER, ROUND; + private Join() {} + } + static public enum Style + { + FILL, FILL_AND_STROKE, STROKE; + private Style() {} + } +} diff --git a/java/ql/test/stubs/android/android/graphics/Path.java b/java/ql/test/stubs/android/android/graphics/Path.java new file mode 100644 index 00000000000..c7164e37b01 --- /dev/null +++ b/java/ql/test/stubs/android/android/graphics/Path.java @@ -0,0 +1,73 @@ +// Generated automatically from android.graphics.Path for testing purposes + +package android.graphics; + +import android.graphics.Matrix; +import android.graphics.RectF; + +public class Path +{ + public Path(){} + public Path(Path p0){} + public Path.FillType getFillType(){ return null; } + public boolean isConvex(){ return false; } + public boolean isEmpty(){ return false; } + public boolean isInverseFillType(){ return false; } + public boolean isRect(RectF p0){ return false; } + public boolean op(Path p0, Path p1, Path.Op p2){ return false; } + public boolean op(Path p0, Path.Op p1){ return false; } + public float[] approximate(float p0){ return null; } + public void addArc(RectF p0, float p1, float p2){} + public void addArc(float p0, float p1, float p2, float p3, float p4, float p5){} + public void addCircle(float p0, float p1, float p2, Path.Direction p3){} + public void addOval(RectF p0, Path.Direction p1){} + public void addOval(float p0, float p1, float p2, float p3, Path.Direction p4){} + public void addPath(Path p0){} + public void addPath(Path p0, Matrix p1){} + public void addPath(Path p0, float p1, float p2){} + public void addRect(RectF p0, Path.Direction p1){} + public void addRect(float p0, float p1, float p2, float p3, Path.Direction p4){} + public void addRoundRect(RectF p0, float p1, float p2, Path.Direction p3){} + public void addRoundRect(RectF p0, float[] p1, Path.Direction p2){} + public void addRoundRect(float p0, float p1, float p2, float p3, float p4, float p5, Path.Direction p6){} + public void addRoundRect(float p0, float p1, float p2, float p3, float[] p4, Path.Direction p5){} + public void arcTo(RectF p0, float p1, float p2){} + public void arcTo(RectF p0, float p1, float p2, boolean p3){} + public void arcTo(float p0, float p1, float p2, float p3, float p4, float p5, boolean p6){} + public void close(){} + public void computeBounds(RectF p0, boolean p1){} + public void cubicTo(float p0, float p1, float p2, float p3, float p4, float p5){} + public void incReserve(int p0){} + public void lineTo(float p0, float p1){} + public void moveTo(float p0, float p1){} + public void offset(float p0, float p1){} + public void offset(float p0, float p1, Path p2){} + public void quadTo(float p0, float p1, float p2, float p3){} + public void rCubicTo(float p0, float p1, float p2, float p3, float p4, float p5){} + public void rLineTo(float p0, float p1){} + public void rMoveTo(float p0, float p1){} + public void rQuadTo(float p0, float p1, float p2, float p3){} + public void reset(){} + public void rewind(){} + public void set(Path p0){} + public void setFillType(Path.FillType p0){} + public void setLastPoint(float p0, float p1){} + public void toggleInverseFillType(){} + public void transform(Matrix p0){} + public void transform(Matrix p0, Path p1){} + static public enum Direction + { + CCW, CW; + private Direction() {} + } + static public enum FillType + { + EVEN_ODD, INVERSE_EVEN_ODD, INVERSE_WINDING, WINDING; + private FillType() {} + } + static public enum Op + { + DIFFERENCE, INTERSECT, REVERSE_DIFFERENCE, UNION, XOR; + private Op() {} + } +} diff --git a/java/ql/test/stubs/android/android/graphics/PathEffect.java b/java/ql/test/stubs/android/android/graphics/PathEffect.java new file mode 100644 index 00000000000..c9ca9aeae86 --- /dev/null +++ b/java/ql/test/stubs/android/android/graphics/PathEffect.java @@ -0,0 +1,10 @@ +// Generated automatically from android.graphics.PathEffect for testing purposes + +package android.graphics; + + +public class PathEffect +{ + protected void finalize(){} + public PathEffect(){} +} diff --git a/java/ql/test/stubs/android/android/graphics/Picture.java b/java/ql/test/stubs/android/android/graphics/Picture.java new file mode 100644 index 00000000000..328321a2139 --- /dev/null +++ b/java/ql/test/stubs/android/android/graphics/Picture.java @@ -0,0 +1,18 @@ +// Generated automatically from android.graphics.Picture for testing purposes + +package android.graphics; + +import android.graphics.Canvas; + +public class Picture +{ + protected void finalize(){} + public Canvas beginRecording(int p0, int p1){ return null; } + public Picture(){} + public Picture(Picture p0){} + public boolean requiresHardwareAcceleration(){ return false; } + public int getHeight(){ return 0; } + public int getWidth(){ return 0; } + public void draw(Canvas p0){} + public void endRecording(){} +} diff --git a/java/ql/test/stubs/android/android/graphics/Point.java b/java/ql/test/stubs/android/android/graphics/Point.java new file mode 100644 index 00000000000..0e97248f44b --- /dev/null +++ b/java/ql/test/stubs/android/android/graphics/Point.java @@ -0,0 +1,26 @@ +// Generated automatically from android.graphics.Point for testing purposes + +package android.graphics; + +import android.os.Parcel; +import android.os.Parcelable; + +public class Point implements Parcelable +{ + public Point(){} + public Point(Point p0){} + public Point(int p0, int p1){} + public String toString(){ return null; } + public boolean equals(Object p0){ return false; } + public final boolean equals(int p0, int p1){ return false; } + public final void negate(){} + public final void offset(int p0, int p1){} + public int describeContents(){ return 0; } + public int hashCode(){ return 0; } + public int x = 0; + public int y = 0; + public static Parcelable.Creator CREATOR = null; + public void readFromParcel(Parcel p0){} + public void set(int p0, int p1){} + public void writeToParcel(Parcel p0, int p1){} +} diff --git a/java/ql/test/stubs/android/android/graphics/PorterDuff.java b/java/ql/test/stubs/android/android/graphics/PorterDuff.java new file mode 100644 index 00000000000..39a82e655d6 --- /dev/null +++ b/java/ql/test/stubs/android/android/graphics/PorterDuff.java @@ -0,0 +1,14 @@ +// Generated automatically from android.graphics.PorterDuff for testing purposes + +package android.graphics; + + +public class PorterDuff +{ + public PorterDuff(){} + static public enum Mode + { + ADD, CLEAR, DARKEN, DST, DST_ATOP, DST_IN, DST_OUT, DST_OVER, LIGHTEN, MULTIPLY, OVERLAY, SCREEN, SRC, SRC_ATOP, SRC_IN, SRC_OUT, SRC_OVER, XOR; + private Mode() {} + } +} diff --git a/java/ql/test/stubs/android/android/graphics/RecordingCanvas.java b/java/ql/test/stubs/android/android/graphics/RecordingCanvas.java new file mode 100644 index 00000000000..1d992a53ec0 --- /dev/null +++ b/java/ql/test/stubs/android/android/graphics/RecordingCanvas.java @@ -0,0 +1,82 @@ +// Generated automatically from android.graphics.RecordingCanvas for testing purposes + +package android.graphics; + +import android.graphics.Bitmap; +import android.graphics.BlendMode; +import android.graphics.Canvas; +import android.graphics.Matrix; +import android.graphics.NinePatch; +import android.graphics.Paint; +import android.graphics.Path; +import android.graphics.Picture; +import android.graphics.PorterDuff; +import android.graphics.Rect; +import android.graphics.RectF; +import android.graphics.RenderNode; +import android.graphics.text.MeasuredText; + +public class RecordingCanvas extends Canvas +{ + public boolean isHardwareAccelerated(){ return false; } + public boolean isOpaque(){ return false; } + public final void drawARGB(int p0, int p1, int p2, int p3){} + public final void drawArc(RectF p0, float p1, float p2, boolean p3, Paint p4){} + public final void drawArc(float p0, float p1, float p2, float p3, float p4, float p5, boolean p6, Paint p7){} + public final void drawBitmap(Bitmap p0, Matrix p1, Paint p2){} + public final void drawBitmap(Bitmap p0, Rect p1, Rect p2, Paint p3){} + public final void drawBitmap(Bitmap p0, Rect p1, RectF p2, Paint p3){} + public final void drawBitmap(Bitmap p0, float p1, float p2, Paint p3){} + public final void drawBitmap(int[] p0, int p1, int p2, float p3, float p4, int p5, int p6, boolean p7, Paint p8){} + public final void drawBitmap(int[] p0, int p1, int p2, int p3, int p4, int p5, int p6, boolean p7, Paint p8){} + public final void drawBitmapMesh(Bitmap p0, int p1, int p2, float[] p3, int p4, int[] p5, int p6, Paint p7){} + public final void drawCircle(float p0, float p1, float p2, Paint p3){} + public final void drawColor(int p0){} + public final void drawColor(int p0, BlendMode p1){} + public final void drawColor(int p0, PorterDuff.Mode p1){} + public final void drawColor(long p0, BlendMode p1){} + public final void drawDoubleRoundRect(RectF p0, float p1, float p2, RectF p3, float p4, float p5, Paint p6){} + public final void drawDoubleRoundRect(RectF p0, float[] p1, RectF p2, float[] p3, Paint p4){} + public final void drawLine(float p0, float p1, float p2, float p3, Paint p4){} + public final void drawLines(float[] p0, Paint p1){} + public final void drawLines(float[] p0, int p1, int p2, Paint p3){} + public final void drawOval(RectF p0, Paint p1){} + public final void drawOval(float p0, float p1, float p2, float p3, Paint p4){} + public final void drawPaint(Paint p0){} + public final void drawPatch(NinePatch p0, Rect p1, Paint p2){} + public final void drawPatch(NinePatch p0, RectF p1, Paint p2){} + public final void drawPath(Path p0, Paint p1){} + public final void drawPicture(Picture p0){} + public final void drawPicture(Picture p0, Rect p1){} + public final void drawPicture(Picture p0, RectF p1){} + public final void drawPoint(float p0, float p1, Paint p2){} + public final void drawPoints(float[] p0, Paint p1){} + public final void drawPoints(float[] p0, int p1, int p2, Paint p3){} + public final void drawPosText(String p0, float[] p1, Paint p2){} + public final void drawPosText(char[] p0, int p1, int p2, float[] p3, Paint p4){} + public final void drawRGB(int p0, int p1, int p2){} + public final void drawRect(Rect p0, Paint p1){} + public final void drawRect(RectF p0, Paint p1){} + public final void drawRect(float p0, float p1, float p2, float p3, Paint p4){} + public final void drawRoundRect(RectF p0, float p1, float p2, Paint p3){} + public final void drawRoundRect(float p0, float p1, float p2, float p3, float p4, float p5, Paint p6){} + public final void drawText(CharSequence p0, int p1, int p2, float p3, float p4, Paint p5){} + public final void drawText(String p0, float p1, float p2, Paint p3){} + public final void drawText(String p0, int p1, int p2, float p3, float p4, Paint p5){} + public final void drawText(char[] p0, int p1, int p2, float p3, float p4, Paint p5){} + public final void drawTextOnPath(String p0, Path p1, float p2, float p3, Paint p4){} + public final void drawTextOnPath(char[] p0, int p1, int p2, Path p3, float p4, float p5, Paint p6){} + public final void drawTextRun(CharSequence p0, int p1, int p2, int p3, int p4, float p5, float p6, boolean p7, Paint p8){} + public final void drawTextRun(char[] p0, int p1, int p2, int p3, int p4, float p5, float p6, boolean p7, Paint p8){} + public final void drawVertices(Canvas.VertexMode p0, int p1, float[] p2, int p3, float[] p4, int p5, int[] p6, int p7, short[] p8, int p9, int p10, Paint p11){} + public int getHeight(){ return 0; } + public int getMaximumBitmapHeight(){ return 0; } + public int getMaximumBitmapWidth(){ return 0; } + public int getWidth(){ return 0; } + public void disableZ(){} + public void drawRenderNode(RenderNode p0){} + public void drawTextRun(MeasuredText p0, int p1, int p2, int p3, int p4, float p5, float p6, boolean p7, Paint p8){} + public void enableZ(){} + public void setBitmap(Bitmap p0){} + public void setDensity(int p0){} +} diff --git a/java/ql/test/stubs/android/android/graphics/Rect.java b/java/ql/test/stubs/android/android/graphics/Rect.java new file mode 100644 index 00000000000..c29950cb31d --- /dev/null +++ b/java/ql/test/stubs/android/android/graphics/Rect.java @@ -0,0 +1,52 @@ +// Generated automatically from android.graphics.Rect for testing purposes + +package android.graphics; + +import android.os.Parcel; +import android.os.Parcelable; + +public class Rect implements Parcelable +{ + public Rect(){} + public Rect(Rect p0){} + public Rect(int p0, int p1, int p2, int p3){} + public String flattenToString(){ return null; } + public String toShortString(){ return null; } + public String toString(){ return null; } + public boolean contains(Rect p0){ return false; } + public boolean contains(int p0, int p1){ return false; } + public boolean contains(int p0, int p1, int p2, int p3){ return false; } + public boolean equals(Object p0){ return false; } + public boolean intersect(Rect p0){ return false; } + public boolean intersect(int p0, int p1, int p2, int p3){ return false; } + public boolean intersects(int p0, int p1, int p2, int p3){ return false; } + public boolean isEmpty(){ return false; } + public boolean setIntersect(Rect p0, Rect p1){ return false; } + public float exactCenterX(){ return 0; } + public float exactCenterY(){ return 0; } + public int bottom = 0; + public int centerX(){ return 0; } + public int centerY(){ return 0; } + public int describeContents(){ return 0; } + public int hashCode(){ return 0; } + public int height(){ return 0; } + public int left = 0; + public int right = 0; + public int top = 0; + public int width(){ return 0; } + public static Parcelable.Creator CREATOR = null; + public static Rect unflattenFromString(String p0){ return null; } + public static boolean intersects(Rect p0, Rect p1){ return false; } + public void inset(int p0, int p1){} + public void offset(int p0, int p1){} + public void offsetTo(int p0, int p1){} + public void readFromParcel(Parcel p0){} + public void set(Rect p0){} + public void set(int p0, int p1, int p2, int p3){} + public void setEmpty(){} + public void sort(){} + public void union(Rect p0){} + public void union(int p0, int p1){} + public void union(int p0, int p1, int p2, int p3){} + public void writeToParcel(Parcel p0, int p1){} +} diff --git a/java/ql/test/stubs/android/android/graphics/RectF.java b/java/ql/test/stubs/android/android/graphics/RectF.java new file mode 100644 index 00000000000..59489dd3f17 --- /dev/null +++ b/java/ql/test/stubs/android/android/graphics/RectF.java @@ -0,0 +1,53 @@ +// Generated automatically from android.graphics.RectF for testing purposes + +package android.graphics; + +import android.graphics.Rect; +import android.os.Parcel; +import android.os.Parcelable; + +public class RectF implements Parcelable +{ + public RectF(){} + public RectF(Rect p0){} + public RectF(RectF p0){} + public RectF(float p0, float p1, float p2, float p3){} + public String toShortString(){ return null; } + public String toString(){ return null; } + public boolean contains(RectF p0){ return false; } + public boolean contains(float p0, float p1){ return false; } + public boolean contains(float p0, float p1, float p2, float p3){ return false; } + public boolean equals(Object p0){ return false; } + public boolean intersect(RectF p0){ return false; } + public boolean intersect(float p0, float p1, float p2, float p3){ return false; } + public boolean intersects(float p0, float p1, float p2, float p3){ return false; } + public boolean setIntersect(RectF p0, RectF p1){ return false; } + public final boolean isEmpty(){ return false; } + public final float centerX(){ return 0; } + public final float centerY(){ return 0; } + public final float height(){ return 0; } + public final float width(){ return 0; } + public float bottom = 0; + public float left = 0; + public float right = 0; + public float top = 0; + public int describeContents(){ return 0; } + public int hashCode(){ return 0; } + public static Parcelable.Creator CREATOR = null; + public static boolean intersects(RectF p0, RectF p1){ return false; } + public void inset(float p0, float p1){} + public void offset(float p0, float p1){} + public void offsetTo(float p0, float p1){} + public void readFromParcel(Parcel p0){} + public void round(Rect p0){} + public void roundOut(Rect p0){} + public void set(Rect p0){} + public void set(RectF p0){} + public void set(float p0, float p1, float p2, float p3){} + public void setEmpty(){} + public void sort(){} + public void union(RectF p0){} + public void union(float p0, float p1){} + public void union(float p0, float p1, float p2, float p3){} + public void writeToParcel(Parcel p0, int p1){} +} diff --git a/java/ql/test/stubs/android/android/graphics/Region.java b/java/ql/test/stubs/android/android/graphics/Region.java new file mode 100644 index 00000000000..7fbd2b4dafc --- /dev/null +++ b/java/ql/test/stubs/android/android/graphics/Region.java @@ -0,0 +1,53 @@ +// Generated automatically from android.graphics.Region for testing purposes + +package android.graphics; + +import android.graphics.Path; +import android.graphics.Rect; +import android.os.Parcel; +import android.os.Parcelable; + +public class Region implements Parcelable +{ + protected void finalize(){} + public Path getBoundaryPath(){ return null; } + public Rect getBounds(){ return null; } + public Region(){} + public Region(Rect p0){} + public Region(Region p0){} + public Region(int p0, int p1, int p2, int p3){} + public String toString(){ return null; } + public boolean contains(int p0, int p1){ return false; } + public boolean equals(Object p0){ return false; } + public boolean getBoundaryPath(Path p0){ return false; } + public boolean getBounds(Rect p0){ return false; } + public boolean isComplex(){ return false; } + public boolean isEmpty(){ return false; } + public boolean isRect(){ return false; } + public boolean op(Rect p0, Region p1, Region.Op p2){ return false; } + public boolean op(Rect p0, Region.Op p1){ return false; } + public boolean op(Region p0, Region p1, Region.Op p2){ return false; } + public boolean op(Region p0, Region.Op p1){ return false; } + public boolean op(int p0, int p1, int p2, int p3, Region.Op p4){ return false; } + public boolean quickContains(Rect p0){ return false; } + public boolean quickContains(int p0, int p1, int p2, int p3){ return false; } + public boolean quickReject(Rect p0){ return false; } + public boolean quickReject(Region p0){ return false; } + public boolean quickReject(int p0, int p1, int p2, int p3){ return false; } + public boolean set(Rect p0){ return false; } + public boolean set(Region p0){ return false; } + public boolean set(int p0, int p1, int p2, int p3){ return false; } + public boolean setPath(Path p0, Region p1){ return false; } + public final boolean union(Rect p0){ return false; } + public int describeContents(){ return 0; } + public static Parcelable.Creator CREATOR = null; + public void setEmpty(){} + public void translate(int p0, int p1){} + public void translate(int p0, int p1, Region p2){} + public void writeToParcel(Parcel p0, int p1){} + static public enum Op + { + DIFFERENCE, INTERSECT, REPLACE, REVERSE_DIFFERENCE, UNION, XOR; + private Op() {} + } +} diff --git a/java/ql/test/stubs/android/android/graphics/RenderNode.java b/java/ql/test/stubs/android/android/graphics/RenderNode.java new file mode 100644 index 00000000000..9384cd4cd4e --- /dev/null +++ b/java/ql/test/stubs/android/android/graphics/RenderNode.java @@ -0,0 +1,82 @@ +// Generated automatically from android.graphics.RenderNode for testing purposes + +package android.graphics; + +import android.graphics.Matrix; +import android.graphics.Outline; +import android.graphics.Paint; +import android.graphics.RecordingCanvas; +import android.graphics.Rect; + +public class RenderNode +{ + protected RenderNode() {} + public RecordingCanvas beginRecording(){ return null; } + public RecordingCanvas beginRecording(int p0, int p1){ return null; } + public RenderNode(String p0){} + public boolean getClipToBounds(){ return false; } + public boolean getClipToOutline(){ return false; } + public boolean getUseCompositingLayer(){ return false; } + public boolean hasDisplayList(){ return false; } + public boolean hasIdentityMatrix(){ return false; } + public boolean hasOverlappingRendering(){ return false; } + public boolean hasShadow(){ return false; } + public boolean isForceDarkAllowed(){ return false; } + public boolean isPivotExplicitlySet(){ return false; } + public boolean offsetLeftAndRight(int p0){ return false; } + public boolean offsetTopAndBottom(int p0){ return false; } + public boolean resetPivot(){ return false; } + public boolean setAlpha(float p0){ return false; } + public boolean setAmbientShadowColor(int p0){ return false; } + public boolean setCameraDistance(float p0){ return false; } + public boolean setClipRect(Rect p0){ return false; } + public boolean setClipToBounds(boolean p0){ return false; } + public boolean setClipToOutline(boolean p0){ return false; } + public boolean setElevation(float p0){ return false; } + public boolean setForceDarkAllowed(boolean p0){ return false; } + public boolean setHasOverlappingRendering(boolean p0){ return false; } + public boolean setOutline(Outline p0){ return false; } + public boolean setPivotX(float p0){ return false; } + public boolean setPivotY(float p0){ return false; } + public boolean setPosition(Rect p0){ return false; } + public boolean setPosition(int p0, int p1, int p2, int p3){ return false; } + public boolean setProjectBackwards(boolean p0){ return false; } + public boolean setProjectionReceiver(boolean p0){ return false; } + public boolean setRotationX(float p0){ return false; } + public boolean setRotationY(float p0){ return false; } + public boolean setRotationZ(float p0){ return false; } + public boolean setScaleX(float p0){ return false; } + public boolean setScaleY(float p0){ return false; } + public boolean setSpotShadowColor(int p0){ return false; } + public boolean setTranslationX(float p0){ return false; } + public boolean setTranslationY(float p0){ return false; } + public boolean setTranslationZ(float p0){ return false; } + public boolean setUseCompositingLayer(boolean p0, Paint p1){ return false; } + public float getAlpha(){ return 0; } + public float getCameraDistance(){ return 0; } + public float getElevation(){ return 0; } + public float getPivotX(){ return 0; } + public float getPivotY(){ return 0; } + public float getRotationX(){ return 0; } + public float getRotationY(){ return 0; } + public float getRotationZ(){ return 0; } + public float getScaleX(){ return 0; } + public float getScaleY(){ return 0; } + public float getTranslationX(){ return 0; } + public float getTranslationY(){ return 0; } + public float getTranslationZ(){ return 0; } + public int getAmbientShadowColor(){ return 0; } + public int getBottom(){ return 0; } + public int getHeight(){ return 0; } + public int getLeft(){ return 0; } + public int getRight(){ return 0; } + public int getSpotShadowColor(){ return 0; } + public int getTop(){ return 0; } + public int getWidth(){ return 0; } + public long computeApproximateMemoryUsage(){ return 0; } + public long getUniqueId(){ return 0; } + public void discardDisplayList(){} + public void endRecording(){} + public void getInverseMatrix(Matrix p0){} + public void getMatrix(Matrix p0){} +} diff --git a/java/ql/test/stubs/android/android/graphics/Shader.java b/java/ql/test/stubs/android/android/graphics/Shader.java new file mode 100644 index 00000000000..3e845aa0c0a --- /dev/null +++ b/java/ql/test/stubs/android/android/graphics/Shader.java @@ -0,0 +1,12 @@ +// Generated automatically from android.graphics.Shader for testing purposes + +package android.graphics; + +import android.graphics.Matrix; + +public class Shader +{ + public Shader(){} + public boolean getLocalMatrix(Matrix p0){ return false; } + public void setLocalMatrix(Matrix p0){} +} diff --git a/java/ql/test/stubs/android/android/graphics/Typeface.java b/java/ql/test/stubs/android/android/graphics/Typeface.java new file mode 100644 index 00000000000..a2ab630e8d0 --- /dev/null +++ b/java/ql/test/stubs/android/android/graphics/Typeface.java @@ -0,0 +1,33 @@ +// Generated automatically from android.graphics.Typeface for testing purposes + +package android.graphics; + +import android.content.res.AssetManager; +import java.io.File; + +public class Typeface +{ + protected Typeface() {} + public boolean equals(Object p0){ return false; } + public final boolean isBold(){ return false; } + public final boolean isItalic(){ return false; } + public int getStyle(){ return 0; } + public int getWeight(){ return 0; } + public int hashCode(){ return 0; } + public static Typeface DEFAULT = null; + public static Typeface DEFAULT_BOLD = null; + public static Typeface MONOSPACE = null; + public static Typeface SANS_SERIF = null; + public static Typeface SERIF = null; + public static Typeface create(String p0, int p1){ return null; } + public static Typeface create(Typeface p0, int p1){ return null; } + public static Typeface create(Typeface p0, int p1, boolean p2){ return null; } + public static Typeface createFromAsset(AssetManager p0, String p1){ return null; } + public static Typeface createFromFile(File p0){ return null; } + public static Typeface createFromFile(String p0){ return null; } + public static Typeface defaultFromStyle(int p0){ return null; } + public static int BOLD = 0; + public static int BOLD_ITALIC = 0; + public static int ITALIC = 0; + public static int NORMAL = 0; +} diff --git a/java/ql/test/stubs/android/android/graphics/Xfermode.java b/java/ql/test/stubs/android/android/graphics/Xfermode.java new file mode 100644 index 00000000000..7b6e5ade001 --- /dev/null +++ b/java/ql/test/stubs/android/android/graphics/Xfermode.java @@ -0,0 +1,9 @@ +// Generated automatically from android.graphics.Xfermode for testing purposes + +package android.graphics; + + +public class Xfermode +{ + public Xfermode(){} +} diff --git a/java/ql/test/stubs/android/android/graphics/drawable/Drawable.java b/java/ql/test/stubs/android/android/graphics/drawable/Drawable.java new file mode 100644 index 00000000000..5bb5b00f898 --- /dev/null +++ b/java/ql/test/stubs/android/android/graphics/drawable/Drawable.java @@ -0,0 +1,111 @@ +// Generated automatically from android.graphics.drawable.Drawable for testing purposes + +package android.graphics.drawable; + +import android.content.res.ColorStateList; +import android.content.res.Resources; +import android.graphics.BitmapFactory; +import android.graphics.BlendMode; +import android.graphics.Canvas; +import android.graphics.ColorFilter; +import android.graphics.Insets; +import android.graphics.Outline; +import android.graphics.PorterDuff; +import android.graphics.Rect; +import android.graphics.Region; +import android.util.AttributeSet; +import android.util.TypedValue; +import java.io.InputStream; +import org.xmlpull.v1.XmlPullParser; + +abstract public class Drawable +{ + abstract static public class ConstantState + { + public ConstantState(){} + public Drawable newDrawable(Resources p0){ return null; } + public Drawable newDrawable(Resources p0, Resources.Theme p1){ return null; } + public abstract Drawable newDrawable(); + public abstract int getChangingConfigurations(); + public boolean canApplyTheme(){ return false; } + } + protected boolean onLevelChange(int p0){ return false; } + protected boolean onStateChange(int[] p0){ return false; } + protected void onBoundsChange(Rect p0){} + public ColorFilter getColorFilter(){ return null; } + public Drawable getCurrent(){ return null; } + public Drawable mutate(){ return null; } + public Drawable(){} + public Drawable.Callback getCallback(){ return null; } + public Drawable.ConstantState getConstantState(){ return null; } + public Insets getOpticalInsets(){ return null; } + public Rect getDirtyBounds(){ return null; } + public Region getTransparentRegion(){ return null; } + public abstract int getOpacity(); + public abstract void draw(Canvas p0); + public abstract void setAlpha(int p0); + public abstract void setColorFilter(ColorFilter p0); + public boolean canApplyTheme(){ return false; } + public boolean getPadding(Rect p0){ return false; } + public boolean isAutoMirrored(){ return false; } + public boolean isFilterBitmap(){ return false; } + public boolean isProjected(){ return false; } + public boolean isStateful(){ return false; } + public boolean onLayoutDirectionChanged(int p0){ return false; } + public boolean setState(int[] p0){ return false; } + public boolean setVisible(boolean p0, boolean p1){ return false; } + public final Rect copyBounds(){ return null; } + public final Rect getBounds(){ return null; } + public final boolean isVisible(){ return false; } + public final boolean setLayoutDirection(int p0){ return false; } + public final boolean setLevel(int p0){ return false; } + public final int getLevel(){ return 0; } + public final void copyBounds(Rect p0){} + public final void setCallback(Drawable.Callback p0){} + public int getAlpha(){ return 0; } + public int getChangingConfigurations(){ return 0; } + public int getIntrinsicHeight(){ return 0; } + public int getIntrinsicWidth(){ return 0; } + public int getLayoutDirection(){ return 0; } + public int getMinimumHeight(){ return 0; } + public int getMinimumWidth(){ return 0; } + public int[] getState(){ return null; } + public static Drawable createFromPath(String p0){ return null; } + public static Drawable createFromResourceStream(Resources p0, TypedValue p1, InputStream p2, String p3){ return null; } + public static Drawable createFromResourceStream(Resources p0, TypedValue p1, InputStream p2, String p3, BitmapFactory.Options p4){ return null; } + public static Drawable createFromStream(InputStream p0, String p1){ return null; } + public static Drawable createFromXml(Resources p0, XmlPullParser p1){ return null; } + public static Drawable createFromXml(Resources p0, XmlPullParser p1, Resources.Theme p2){ return null; } + public static Drawable createFromXmlInner(Resources p0, XmlPullParser p1, AttributeSet p2){ return null; } + public static Drawable createFromXmlInner(Resources p0, XmlPullParser p1, AttributeSet p2, Resources.Theme p3){ return null; } + public static int resolveOpacity(int p0, int p1){ return 0; } + public void applyTheme(Resources.Theme p0){} + public void clearColorFilter(){} + public void getHotspotBounds(Rect p0){} + public void getOutline(Outline p0){} + public void inflate(Resources p0, XmlPullParser p1, AttributeSet p2){} + public void inflate(Resources p0, XmlPullParser p1, AttributeSet p2, Resources.Theme p3){} + public void invalidateSelf(){} + public void jumpToCurrentState(){} + public void scheduleSelf(Runnable p0, long p1){} + public void setAutoMirrored(boolean p0){} + public void setBounds(Rect p0){} + public void setBounds(int p0, int p1, int p2, int p3){} + public void setChangingConfigurations(int p0){} + public void setColorFilter(int p0, PorterDuff.Mode p1){} + public void setDither(boolean p0){} + public void setFilterBitmap(boolean p0){} + public void setHotspot(float p0, float p1){} + public void setHotspotBounds(int p0, int p1, int p2, int p3){} + public void setTint(int p0){} + public void setTintBlendMode(BlendMode p0){} + public void setTintList(ColorStateList p0){} + public void setTintMode(PorterDuff.Mode p0){} + public void unscheduleSelf(Runnable p0){} + static public interface Callback + { + void invalidateDrawable(Drawable p0); + void scheduleDrawable(Drawable p0, Runnable p1, long p2); + void unscheduleDrawable(Drawable p0, Runnable p1); + } +} diff --git a/java/ql/test/stubs/android/android/graphics/drawable/Icon.java b/java/ql/test/stubs/android/android/graphics/drawable/Icon.java new file mode 100644 index 00000000000..fcfeb2b7109 --- /dev/null +++ b/java/ql/test/stubs/android/android/graphics/drawable/Icon.java @@ -0,0 +1,55 @@ +// Generated automatically from android.graphics.drawable.Icon for testing purposes + +package android.graphics.drawable; + +import android.content.Context; +import android.content.res.ColorStateList; +import android.graphics.Bitmap; +import android.graphics.BlendMode; +import android.graphics.PorterDuff; +import android.graphics.drawable.Drawable; +import android.net.Uri; +import android.os.Handler; +import android.os.Message; +import android.os.Parcel; +import android.os.Parcelable; + +public class Icon implements Parcelable +{ + protected Icon() {} + public Drawable loadDrawable(Context p0){ return null; } + public Icon setTint(int p0){ return null; } + public Icon setTintBlendMode(BlendMode p0){ return null; } + public Icon setTintList(ColorStateList p0){ return null; } + public Icon setTintMode(PorterDuff.Mode p0){ return null; } + public String getResPackage(){ return null; } + public String toString(){ return null; } + public Uri getUri(){ return null; } + public int describeContents(){ return 0; } + public int getResId(){ return 0; } + public int getType(){ return 0; } + public static Icon createWithAdaptiveBitmap(Bitmap p0){ return null; } + public static Icon createWithAdaptiveBitmapContentUri(String p0){ return null; } + public static Icon createWithAdaptiveBitmapContentUri(Uri p0){ return null; } + public static Icon createWithBitmap(Bitmap p0){ return null; } + public static Icon createWithContentUri(String p0){ return null; } + public static Icon createWithContentUri(Uri p0){ return null; } + public static Icon createWithData(byte[] p0, int p1, int p2){ return null; } + public static Icon createWithFilePath(String p0){ return null; } + public static Icon createWithResource(Context p0, int p1){ return null; } + public static Icon createWithResource(String p0, int p1){ return null; } + public static Parcelable.Creator CREATOR = null; + public static int TYPE_ADAPTIVE_BITMAP = 0; + public static int TYPE_BITMAP = 0; + public static int TYPE_DATA = 0; + public static int TYPE_RESOURCE = 0; + public static int TYPE_URI = 0; + public static int TYPE_URI_ADAPTIVE_BITMAP = 0; + public void loadDrawableAsync(Context p0, Icon.OnDrawableLoadedListener p1, Handler p2){} + public void loadDrawableAsync(Context p0, Message p1){} + public void writeToParcel(Parcel p0, int p1){} + static public interface OnDrawableLoadedListener + { + void onDrawableLoaded(Drawable p0); + } +} diff --git a/java/ql/test/stubs/android/android/graphics/text/MeasuredText.java b/java/ql/test/stubs/android/android/graphics/text/MeasuredText.java new file mode 100644 index 00000000000..c737bd5dfc1 --- /dev/null +++ b/java/ql/test/stubs/android/android/graphics/text/MeasuredText.java @@ -0,0 +1,13 @@ +// Generated automatically from android.graphics.text.MeasuredText for testing purposes + +package android.graphics.text; + +import android.graphics.Rect; + +public class MeasuredText +{ + protected MeasuredText() {} + public float getCharWidthAt(int p0){ return 0; } + public float getWidth(int p0, int p1){ return 0; } + public void getBounds(int p0, int p1, Rect p2){} +} diff --git a/java/ql/test/stubs/android/android/hardware/HardwareBuffer.java b/java/ql/test/stubs/android/android/hardware/HardwareBuffer.java new file mode 100644 index 00000000000..0f4e5888a21 --- /dev/null +++ b/java/ql/test/stubs/android/android/hardware/HardwareBuffer.java @@ -0,0 +1,50 @@ +// Generated automatically from android.hardware.HardwareBuffer for testing purposes + +package android.hardware; + +import android.os.Parcel; +import android.os.Parcelable; + +public class HardwareBuffer implements AutoCloseable, Parcelable +{ + protected HardwareBuffer() {} + protected void finalize(){} + public boolean isClosed(){ return false; } + public int describeContents(){ return 0; } + public int getFormat(){ return 0; } + public int getHeight(){ return 0; } + public int getLayers(){ return 0; } + public int getWidth(){ return 0; } + public long getUsage(){ return 0; } + public static HardwareBuffer create(int p0, int p1, int p2, int p3, long p4){ return null; } + public static Parcelable.Creator CREATOR = null; + public static boolean isSupported(int p0, int p1, int p2, int p3, long p4){ return false; } + public static int BLOB = 0; + public static int DS_24UI8 = 0; + public static int DS_FP32UI8 = 0; + public static int D_16 = 0; + public static int D_24 = 0; + public static int D_FP32 = 0; + public static int RGBA_1010102 = 0; + public static int RGBA_8888 = 0; + public static int RGBA_FP16 = 0; + public static int RGBX_8888 = 0; + public static int RGB_565 = 0; + public static int RGB_888 = 0; + public static int S_UI8 = 0; + public static int YCBCR_420_888 = 0; + public static long USAGE_CPU_READ_OFTEN = 0; + public static long USAGE_CPU_READ_RARELY = 0; + public static long USAGE_CPU_WRITE_OFTEN = 0; + public static long USAGE_CPU_WRITE_RARELY = 0; + public static long USAGE_GPU_COLOR_OUTPUT = 0; + public static long USAGE_GPU_CUBE_MAP = 0; + public static long USAGE_GPU_DATA_BUFFER = 0; + public static long USAGE_GPU_MIPMAP_COMPLETE = 0; + public static long USAGE_GPU_SAMPLED_IMAGE = 0; + public static long USAGE_PROTECTED_CONTENT = 0; + public static long USAGE_SENSOR_DIRECT_DATA = 0; + public static long USAGE_VIDEO_ENCODE = 0; + public void close(){} + public void writeToParcel(Parcel p0, int p1){} +} diff --git a/java/ql/test/stubs/android/android/icu/util/ULocale.java b/java/ql/test/stubs/android/android/icu/util/ULocale.java new file mode 100644 index 00000000000..1e1ea662c22 --- /dev/null +++ b/java/ql/test/stubs/android/android/icu/util/ULocale.java @@ -0,0 +1,138 @@ +// Generated automatically from android.icu.util.ULocale for testing purposes + +package android.icu.util; + +import java.io.Serializable; +import java.util.Iterator; +import java.util.Locale; +import java.util.Set; + +public class ULocale implements Comparable, Serializable +{ + protected ULocale() {} + public Iterator getKeywords(){ return null; } + public Locale toLocale(){ return null; } + public Object clone(){ return null; } + public Set getExtensionKeys(){ return null; } + public Set getUnicodeLocaleAttributes(){ return null; } + public Set getUnicodeLocaleKeys(){ return null; } + public String getBaseName(){ return null; } + public String getCharacterOrientation(){ return null; } + public String getCountry(){ return null; } + public String getDisplayCountry(){ return null; } + public String getDisplayCountry(ULocale p0){ return null; } + public String getDisplayKeywordValue(String p0){ return null; } + public String getDisplayKeywordValue(String p0, ULocale p1){ return null; } + public String getDisplayLanguage(){ return null; } + public String getDisplayLanguage(ULocale p0){ return null; } + public String getDisplayLanguageWithDialect(){ return null; } + public String getDisplayLanguageWithDialect(ULocale p0){ return null; } + public String getDisplayName(){ return null; } + public String getDisplayName(ULocale p0){ return null; } + public String getDisplayNameWithDialect(){ return null; } + public String getDisplayNameWithDialect(ULocale p0){ return null; } + public String getDisplayScript(){ return null; } + public String getDisplayScript(ULocale p0){ return null; } + public String getDisplayVariant(){ return null; } + public String getDisplayVariant(ULocale p0){ return null; } + public String getExtension(char p0){ return null; } + public String getISO3Country(){ return null; } + public String getISO3Language(){ return null; } + public String getKeywordValue(String p0){ return null; } + public String getLanguage(){ return null; } + public String getLineOrientation(){ return null; } + public String getName(){ return null; } + public String getScript(){ return null; } + public String getUnicodeLocaleType(String p0){ return null; } + public String getVariant(){ return null; } + public String toLanguageTag(){ return null; } + public String toString(){ return null; } + public ULocale getFallback(){ return null; } + public ULocale setKeywordValue(String p0, String p1){ return null; } + public ULocale(String p0){} + public ULocale(String p0, String p1){} + public ULocale(String p0, String p1, String p2){} + public boolean equals(Object p0){ return false; } + public boolean isRightToLeft(){ return false; } + public int compareTo(ULocale p0){ return 0; } + public int hashCode(){ return 0; } + public static Iterator getKeywords(String p0){ return null; } + public static String canonicalize(String p0){ return null; } + public static String getBaseName(String p0){ return null; } + public static String getCountry(String p0){ return null; } + public static String getDisplayCountry(String p0, String p1){ return null; } + public static String getDisplayCountry(String p0, ULocale p1){ return null; } + public static String getDisplayKeyword(String p0){ return null; } + public static String getDisplayKeyword(String p0, String p1){ return null; } + public static String getDisplayKeyword(String p0, ULocale p1){ return null; } + public static String getDisplayKeywordValue(String p0, String p1, String p2){ return null; } + public static String getDisplayKeywordValue(String p0, String p1, ULocale p2){ return null; } + public static String getDisplayLanguage(String p0, String p1){ return null; } + public static String getDisplayLanguage(String p0, ULocale p1){ return null; } + public static String getDisplayLanguageWithDialect(String p0, String p1){ return null; } + public static String getDisplayLanguageWithDialect(String p0, ULocale p1){ return null; } + public static String getDisplayName(String p0, String p1){ return null; } + public static String getDisplayName(String p0, ULocale p1){ return null; } + public static String getDisplayNameWithDialect(String p0, String p1){ return null; } + public static String getDisplayNameWithDialect(String p0, ULocale p1){ return null; } + public static String getDisplayScript(String p0, String p1){ return null; } + public static String getDisplayScript(String p0, ULocale p1){ return null; } + public static String getDisplayVariant(String p0, String p1){ return null; } + public static String getDisplayVariant(String p0, ULocale p1){ return null; } + public static String getFallback(String p0){ return null; } + public static String getISO3Country(String p0){ return null; } + public static String getISO3Language(String p0){ return null; } + public static String getKeywordValue(String p0, String p1){ return null; } + public static String getLanguage(String p0){ return null; } + public static String getName(String p0){ return null; } + public static String getScript(String p0){ return null; } + public static String getVariant(String p0){ return null; } + public static String setKeywordValue(String p0, String p1, String p2){ return null; } + public static String toLegacyKey(String p0){ return null; } + public static String toLegacyType(String p0, String p1){ return null; } + public static String toUnicodeLocaleKey(String p0){ return null; } + public static String toUnicodeLocaleType(String p0, String p1){ return null; } + public static String[] getISOCountries(){ return null; } + public static String[] getISOLanguages(){ return null; } + public static ULocale CANADA = null; + public static ULocale CANADA_FRENCH = null; + public static ULocale CHINA = null; + public static ULocale CHINESE = null; + public static ULocale ENGLISH = null; + public static ULocale FRANCE = null; + public static ULocale FRENCH = null; + public static ULocale GERMAN = null; + public static ULocale GERMANY = null; + public static ULocale ITALIAN = null; + public static ULocale ITALY = null; + public static ULocale JAPAN = null; + public static ULocale JAPANESE = null; + public static ULocale KOREA = null; + public static ULocale KOREAN = null; + public static ULocale PRC = null; + public static ULocale ROOT = null; + public static ULocale SIMPLIFIED_CHINESE = null; + public static ULocale TAIWAN = null; + public static ULocale TRADITIONAL_CHINESE = null; + public static ULocale UK = null; + public static ULocale US = null; + public static ULocale acceptLanguage(String p0, ULocale[] p1, boolean[] p2){ return null; } + public static ULocale acceptLanguage(String p0, boolean[] p1){ return null; } + public static ULocale acceptLanguage(ULocale[] p0, ULocale[] p1, boolean[] p2){ return null; } + public static ULocale acceptLanguage(ULocale[] p0, boolean[] p1){ return null; } + public static ULocale addLikelySubtags(ULocale p0){ return null; } + public static ULocale createCanonical(String p0){ return null; } + public static ULocale forLanguageTag(String p0){ return null; } + public static ULocale forLocale(Locale p0){ return null; } + public static ULocale getDefault(){ return null; } + public static ULocale getDefault(ULocale.Category p0){ return null; } + public static ULocale minimizeSubtags(ULocale p0){ return null; } + public static ULocale[] getAvailableLocales(){ return null; } + public static char PRIVATE_USE_EXTENSION = '0'; + public static char UNICODE_LOCALE_EXTENSION = '0'; + static public enum Category + { + DISPLAY, FORMAT; + private Category() {} + } +} diff --git a/java/ql/test/stubs/android/android/net/Uri.java b/java/ql/test/stubs/android/android/net/Uri.java index 371dab3cc97..ec3e601b7bb 100644 --- a/java/ql/test/stubs/android/android/net/Uri.java +++ b/java/ql/test/stubs/android/android/net/Uri.java @@ -1,5 +1,76 @@ +// Generated automatically from android.net.Uri for testing purposes + package android.net; -public class Uri { +import android.os.Parcel; +import android.os.Parcelable; +import java.io.File; +import java.util.List; +import java.util.Set; +abstract public class Uri implements Comparable, Parcelable +{ + protected Uri() {} + public List getQueryParameters(String p0){ return null; } + public Set getQueryParameterNames(){ return null; } + public String getQueryParameter(String p0){ return null; } + public Uri normalizeScheme(){ return null; } + public abstract List getPathSegments(); + public abstract String getAuthority(); + public abstract String getEncodedAuthority(); + public abstract String getEncodedFragment(); + public abstract String getEncodedPath(); + public abstract String getEncodedQuery(); + public abstract String getEncodedSchemeSpecificPart(); + public abstract String getEncodedUserInfo(); + public abstract String getFragment(); + public abstract String getHost(); + public abstract String getLastPathSegment(); + public abstract String getPath(); + public abstract String getQuery(); + public abstract String getScheme(); + public abstract String getSchemeSpecificPart(); + public abstract String getUserInfo(); + public abstract String toString(); + public abstract Uri.Builder buildUpon(); + public abstract boolean isHierarchical(); + public abstract boolean isRelative(); + public abstract int getPort(); + public boolean equals(Object p0){ return false; } + public boolean getBooleanQueryParameter(String p0, boolean p1){ return false; } + public boolean isAbsolute(){ return false; } + public boolean isOpaque(){ return false; } + public int compareTo(Uri p0){ return 0; } + public int hashCode(){ return 0; } + public static Parcelable.Creator CREATOR = null; + public static String decode(String p0){ return null; } + public static String encode(String p0){ return null; } + public static String encode(String p0, String p1){ return null; } + public static Uri EMPTY = null; + public static Uri fromFile(File p0){ return null; } + public static Uri fromParts(String p0, String p1, String p2){ return null; } + public static Uri parse(String p0){ return null; } + public static Uri withAppendedPath(Uri p0, String p1){ return null; } + public static void writeToParcel(Parcel p0, Uri p1){} + static public class Builder + { + public Builder(){} + public String toString(){ return null; } + public Uri build(){ return null; } + public Uri.Builder appendEncodedPath(String p0){ return null; } + public Uri.Builder appendPath(String p0){ return null; } + public Uri.Builder appendQueryParameter(String p0, String p1){ return null; } + public Uri.Builder authority(String p0){ return null; } + public Uri.Builder clearQuery(){ return null; } + public Uri.Builder encodedAuthority(String p0){ return null; } + public Uri.Builder encodedFragment(String p0){ return null; } + public Uri.Builder encodedOpaquePart(String p0){ return null; } + public Uri.Builder encodedPath(String p0){ return null; } + public Uri.Builder encodedQuery(String p0){ return null; } + public Uri.Builder fragment(String p0){ return null; } + public Uri.Builder opaquePart(String p0){ return null; } + public Uri.Builder path(String p0){ return null; } + public Uri.Builder query(String p0){ return null; } + public Uri.Builder scheme(String p0){ return null; } + } } diff --git a/java/ql/test/stubs/android/android/os/BaseBundle.java b/java/ql/test/stubs/android/android/os/BaseBundle.java new file mode 100644 index 00000000000..3cc3c310c38 --- /dev/null +++ b/java/ql/test/stubs/android/android/os/BaseBundle.java @@ -0,0 +1,43 @@ +// Generated automatically from android.os.BaseBundle for testing purposes + +package android.os; + +import android.os.PersistableBundle; +import java.util.Set; + +public class BaseBundle +{ + public Object get(String p0){ return null; } + public Set keySet(){ return null; } + public String getString(String p0){ return null; } + public String getString(String p0, String p1){ return null; } + public String[] getStringArray(String p0){ return null; } + public boolean containsKey(String p0){ return false; } + public boolean getBoolean(String p0){ return false; } + public boolean getBoolean(String p0, boolean p1){ return false; } + public boolean isEmpty(){ return false; } + public boolean[] getBooleanArray(String p0){ return null; } + public double getDouble(String p0){ return 0; } + public double getDouble(String p0, double p1){ return 0; } + public double[] getDoubleArray(String p0){ return null; } + public int getInt(String p0){ return 0; } + public int getInt(String p0, int p1){ return 0; } + public int size(){ return 0; } + public int[] getIntArray(String p0){ return null; } + public long getLong(String p0){ return 0; } + public long getLong(String p0, long p1){ return 0; } + public long[] getLongArray(String p0){ return null; } + public void clear(){} + public void putAll(PersistableBundle p0){} + public void putBoolean(String p0, boolean p1){} + public void putBooleanArray(String p0, boolean[] p1){} + public void putDouble(String p0, double p1){} + public void putDoubleArray(String p0, double[] p1){} + public void putInt(String p0, int p1){} + public void putIntArray(String p0, int[] p1){} + public void putLong(String p0, long p1){} + public void putLongArray(String p0, long[] p1){} + public void putString(String p0, String p1){} + public void putStringArray(String p0, String[] p1){} + public void remove(String p0){} +} diff --git a/java/ql/test/stubs/android/android/os/Bundle.java b/java/ql/test/stubs/android/android/os/Bundle.java index fa49a640f30..4beb1cf5dee 100644 --- a/java/ql/test/stubs/android/android/os/Bundle.java +++ b/java/ql/test/stubs/android/android/os/Bundle.java @@ -1,87 +1,86 @@ -/* - * Copyright (C) 2007 The Android Open Source Project - * - * 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. - */ +// Generated automatically from android.os.Bundle for testing purposes package android.os; -public final class Bundle { - public Bundle() { - } - - public Bundle(ClassLoader loader) { - } - - public Bundle(int capacity) { - } - - public Bundle(Bundle b) { - } - - public static Bundle forPair(String key, String value) { - return null; - } - - public boolean setAllowFds(boolean allowFds) { - return false; - } - - public void setDefusable(boolean defusable) { - } - - public static Bundle setDefusable(Bundle bundle, boolean defusable) { - return null; - } - - @Override - public Object clone() { - return null; - } - - public Bundle deepCopy() { - return null; - } - - public void remove(String key) { - } - - public void putAll(Bundle bundle) { - } - - public int getSize() { - return 0; - } - - public boolean hasFileDescriptors() { - return false; - } - - public Bundle filterValues() { - return null; - } - - @Override - public synchronized String toString() { - return null; - } - - public synchronized String toShortString() { - return null; - } - - public String getString(String string) { - return null; - } +import android.os.BaseBundle; +import android.os.IBinder; +import android.os.Parcel; +import android.os.Parcelable; +import android.os.PersistableBundle; +import android.util.Size; +import android.util.SizeF; +import android.util.SparseArray; +import java.io.Serializable; +import java.util.ArrayList; +public class Bundle extends BaseBundle implements Cloneable, Parcelable +{ + public ArrayList getParcelableArrayList(String p0){ return null; } + public SparseArray getSparseParcelableArray(String p0){ return null; } + public T getParcelable(String p0){ return null; } + public ArrayList getCharSequenceArrayList(String p0){ return null; } + public ArrayList getIntegerArrayList(String p0){ return null; } + public ArrayList getStringArrayList(String p0){ return null; } + public Bundle deepCopy(){ return null; } + public Bundle getBundle(String p0){ return null; } + public Bundle(){} + public Bundle(Bundle p0){} + public Bundle(ClassLoader p0){} + public Bundle(PersistableBundle p0){} + public Bundle(int p0){} + public Byte getByte(String p0, byte p1){ return null; } + public CharSequence getCharSequence(String p0){ return null; } + public CharSequence getCharSequence(String p0, CharSequence p1){ return null; } + public CharSequence[] getCharSequenceArray(String p0){ return null; } + public ClassLoader getClassLoader(){ return null; } + public IBinder getBinder(String p0){ return null; } + public Object clone(){ return null; } + public Parcelable[] getParcelableArray(String p0){ return null; } + public Serializable getSerializable(String p0){ return null; } + public Size getSize(String p0){ return null; } + public SizeF getSizeF(String p0){ return null; } + public String toString(){ return null; } + public boolean hasFileDescriptors(){ return false; } + public byte getByte(String p0){ return 0; } + public byte[] getByteArray(String p0){ return null; } + public char getChar(String p0){ return '0'; } + public char getChar(String p0, char p1){ return '0'; } + public char[] getCharArray(String p0){ return null; } + public float getFloat(String p0){ return 0; } + public float getFloat(String p0, float p1){ return 0; } + public float[] getFloatArray(String p0){ return null; } + public int describeContents(){ return 0; } + public short getShort(String p0){ return 0; } + public short getShort(String p0, short p1){ return 0; } + public short[] getShortArray(String p0){ return null; } + public static Bundle EMPTY = null; + public static Parcelable.Creator CREATOR = null; + public void clear(){} + public void putAll(Bundle p0){} + public void putBinder(String p0, IBinder p1){} + public void putBundle(String p0, Bundle p1){} + public void putByte(String p0, byte p1){} + public void putByteArray(String p0, byte[] p1){} + public void putChar(String p0, char p1){} + public void putCharArray(String p0, char[] p1){} + public void putCharSequence(String p0, CharSequence p1){} + public void putCharSequenceArray(String p0, CharSequence[] p1){} + public void putCharSequenceArrayList(String p0, ArrayList p1){} + public void putFloat(String p0, float p1){} + public void putFloatArray(String p0, float[] p1){} + public void putIntegerArrayList(String p0, ArrayList p1){} + public void putParcelable(String p0, Parcelable p1){} + public void putParcelableArray(String p0, Parcelable[] p1){} + public void putParcelableArrayList(String p0, ArrayList p1){} + public void putSerializable(String p0, Serializable p1){} + public void putShort(String p0, short p1){} + public void putShortArray(String p0, short[] p1){} + public void putSize(String p0, Size p1){} + public void putSizeF(String p0, SizeF p1){} + public void putSparseParcelableArray(String p0, SparseArray p1){} + public void putStringArrayList(String p0, ArrayList p1){} + public void readFromParcel(Parcel p0){} + public void remove(String p0){} + public void setClassLoader(ClassLoader p0){} + public void writeToParcel(Parcel p0, int p1){} } diff --git a/java/ql/test/stubs/android/android/os/CancellationSignal.java b/java/ql/test/stubs/android/android/os/CancellationSignal.java index 212e605a819..5112eb46595 100644 --- a/java/ql/test/stubs/android/android/os/CancellationSignal.java +++ b/java/ql/test/stubs/android/android/os/CancellationSignal.java @@ -1,5 +1,17 @@ +// Generated automatically from android.os.CancellationSignal for testing purposes + package android.os; -public class CancellationSignal { +public class CancellationSignal +{ + public CancellationSignal(){} + public boolean isCanceled(){ return false; } + public void cancel(){} + public void setOnCancelListener(CancellationSignal.OnCancelListener p0){} + public void throwIfCanceled(){} + static public interface OnCancelListener + { + void onCancel(); + } } diff --git a/java/ql/test/stubs/android/android/os/Handler.java b/java/ql/test/stubs/android/android/os/Handler.java new file mode 100644 index 00000000000..5d1ae91db88 --- /dev/null +++ b/java/ql/test/stubs/android/android/os/Handler.java @@ -0,0 +1,53 @@ +// Generated automatically from android.os.Handler for testing purposes + +package android.os; + +import android.os.Looper; +import android.os.Message; +import android.util.Printer; + +public class Handler +{ + public Handler(){} + public Handler(Handler.Callback p0){} + public Handler(Looper p0){} + public Handler(Looper p0, Handler.Callback p1){} + public String getMessageName(Message p0){ return null; } + public String toString(){ return null; } + public boolean sendMessageAtTime(Message p0, long p1){ return false; } + public final Looper getLooper(){ return null; } + public final Message obtainMessage(){ return null; } + public final Message obtainMessage(int p0){ return null; } + public final Message obtainMessage(int p0, Object p1){ return null; } + public final Message obtainMessage(int p0, int p1, int p2){ return null; } + public final Message obtainMessage(int p0, int p1, int p2, Object p3){ return null; } + public final boolean hasCallbacks(Runnable p0){ return false; } + public final boolean hasMessages(int p0){ return false; } + public final boolean hasMessages(int p0, Object p1){ return false; } + public final boolean post(Runnable p0){ return false; } + public final boolean postAtFrontOfQueue(Runnable p0){ return false; } + public final boolean postAtTime(Runnable p0, Object p1, long p2){ return false; } + public final boolean postAtTime(Runnable p0, long p1){ return false; } + public final boolean postDelayed(Runnable p0, Object p1, long p2){ return false; } + public final boolean postDelayed(Runnable p0, long p1){ return false; } + public final boolean sendEmptyMessage(int p0){ return false; } + public final boolean sendEmptyMessageAtTime(int p0, long p1){ return false; } + public final boolean sendEmptyMessageDelayed(int p0, long p1){ return false; } + public final boolean sendMessage(Message p0){ return false; } + public final boolean sendMessageAtFrontOfQueue(Message p0){ return false; } + public final boolean sendMessageDelayed(Message p0, long p1){ return false; } + public final void dump(Printer p0, String p1){} + public final void removeCallbacks(Runnable p0){} + public final void removeCallbacks(Runnable p0, Object p1){} + public final void removeCallbacksAndMessages(Object p0){} + public final void removeMessages(int p0){} + public final void removeMessages(int p0, Object p1){} + public static Handler createAsync(Looper p0){ return null; } + public static Handler createAsync(Looper p0, Handler.Callback p1){ return null; } + public void dispatchMessage(Message p0){} + public void handleMessage(Message p0){} + static public interface Callback + { + boolean handleMessage(Message p0); + } +} diff --git a/java/ql/test/stubs/android/android/os/IBinder.java b/java/ql/test/stubs/android/android/os/IBinder.java new file mode 100644 index 00000000000..4441468b00f --- /dev/null +++ b/java/ql/test/stubs/android/android/os/IBinder.java @@ -0,0 +1,33 @@ +// Generated automatically from android.os.IBinder for testing purposes + +package android.os; + +import android.os.IInterface; +import android.os.Parcel; +import java.io.FileDescriptor; + +public interface IBinder +{ + IInterface queryLocalInterface(String p0); + String getInterfaceDescriptor(); + boolean isBinderAlive(); + boolean pingBinder(); + boolean transact(int p0, Parcel p1, Parcel p2, int p3); + boolean unlinkToDeath(IBinder.DeathRecipient p0, int p1); + static int DUMP_TRANSACTION = 0; + static int FIRST_CALL_TRANSACTION = 0; + static int FLAG_ONEWAY = 0; + static int INTERFACE_TRANSACTION = 0; + static int LAST_CALL_TRANSACTION = 0; + static int LIKE_TRANSACTION = 0; + static int PING_TRANSACTION = 0; + static int TWEET_TRANSACTION = 0; + static int getSuggestedMaxIpcSizeBytes(){ return 0; } + static public interface DeathRecipient + { + void binderDied(); + } + void dump(FileDescriptor p0, String[] p1); + void dumpAsync(FileDescriptor p0, String[] p1); + void linkToDeath(IBinder.DeathRecipient p0, int p1); +} diff --git a/java/ql/test/stubs/android/android/os/IInterface.java b/java/ql/test/stubs/android/android/os/IInterface.java new file mode 100644 index 00000000000..ccc3ae0a62d --- /dev/null +++ b/java/ql/test/stubs/android/android/os/IInterface.java @@ -0,0 +1,10 @@ +// Generated automatically from android.os.IInterface for testing purposes + +package android.os; + +import android.os.IBinder; + +public interface IInterface +{ + IBinder asBinder(); +} diff --git a/java/ql/test/stubs/android/android/os/LocaleList.java b/java/ql/test/stubs/android/android/os/LocaleList.java new file mode 100644 index 00000000000..113f5910a49 --- /dev/null +++ b/java/ql/test/stubs/android/android/os/LocaleList.java @@ -0,0 +1,32 @@ +// Generated automatically from android.os.LocaleList for testing purposes + +package android.os; + +import android.icu.util.ULocale; +import android.os.Parcel; +import android.os.Parcelable; +import java.util.Locale; + +public class LocaleList implements Parcelable +{ + protected LocaleList() {} + public Locale get(int p0){ return null; } + public Locale getFirstMatch(String[] p0){ return null; } + public LocaleList(Locale... p0){} + public String toLanguageTags(){ return null; } + public String toString(){ return null; } + public boolean equals(Object p0){ return false; } + public boolean isEmpty(){ return false; } + public int describeContents(){ return 0; } + public int hashCode(){ return 0; } + public int indexOf(Locale p0){ return 0; } + public int size(){ return 0; } + public static LocaleList forLanguageTags(String p0){ return null; } + public static LocaleList getAdjustedDefault(){ return null; } + public static LocaleList getDefault(){ return null; } + public static LocaleList getEmptyLocaleList(){ return null; } + public static Parcelable.Creator CREATOR = null; + public static boolean isPseudoLocale(ULocale p0){ return false; } + public static void setDefault(LocaleList p0){} + public void writeToParcel(Parcel p0, int p1){} +} diff --git a/java/ql/test/stubs/android/android/os/Looper.java b/java/ql/test/stubs/android/android/os/Looper.java new file mode 100644 index 00000000000..bc7076c2125 --- /dev/null +++ b/java/ql/test/stubs/android/android/os/Looper.java @@ -0,0 +1,25 @@ +// Generated automatically from android.os.Looper for testing purposes + +package android.os; + +import android.os.MessageQueue; +import android.util.Printer; + +public class Looper +{ + protected Looper() {} + public MessageQueue getQueue(){ return null; } + public String toString(){ return null; } + public Thread getThread(){ return null; } + public boolean isCurrentThread(){ return false; } + public static Looper getMainLooper(){ return null; } + public static Looper myLooper(){ return null; } + public static MessageQueue myQueue(){ return null; } + public static void loop(){} + public static void prepare(){} + public static void prepareMainLooper(){} + public void dump(Printer p0, String p1){} + public void quit(){} + public void quitSafely(){} + public void setMessageLogging(Printer p0){} +} diff --git a/java/ql/test/stubs/android/android/os/Message.java b/java/ql/test/stubs/android/android/os/Message.java new file mode 100644 index 00000000000..b6f98d43430 --- /dev/null +++ b/java/ql/test/stubs/android/android/os/Message.java @@ -0,0 +1,44 @@ +// Generated automatically from android.os.Message for testing purposes + +package android.os; + +import android.os.Bundle; +import android.os.Handler; +import android.os.Messenger; +import android.os.Parcel; +import android.os.Parcelable; + +public class Message implements Parcelable +{ + public Bundle getData(){ return null; } + public Bundle peekData(){ return null; } + public Handler getTarget(){ return null; } + public Message(){} + public Messenger replyTo = null; + public Object obj = null; + public Runnable getCallback(){ return null; } + public String toString(){ return null; } + public boolean isAsynchronous(){ return false; } + public int arg1 = 0; + public int arg2 = 0; + public int describeContents(){ return 0; } + public int sendingUid = 0; + public int what = 0; + public long getWhen(){ return 0; } + public static Message obtain(){ return null; } + public static Message obtain(Handler p0){ return null; } + public static Message obtain(Handler p0, Runnable p1){ return null; } + public static Message obtain(Handler p0, int p1){ return null; } + public static Message obtain(Handler p0, int p1, Object p2){ return null; } + public static Message obtain(Handler p0, int p1, int p2, int p3){ return null; } + public static Message obtain(Handler p0, int p1, int p2, int p3, Object p4){ return null; } + public static Message obtain(Message p0){ return null; } + public static Parcelable.Creator CREATOR = null; + public void copyFrom(Message p0){} + public void recycle(){} + public void sendToTarget(){} + public void setAsynchronous(boolean p0){} + public void setData(Bundle p0){} + public void setTarget(Handler p0){} + public void writeToParcel(Parcel p0, int p1){} +} diff --git a/java/ql/test/stubs/android/android/os/MessageQueue.java b/java/ql/test/stubs/android/android/os/MessageQueue.java new file mode 100644 index 00000000000..71d1e4b9fdd --- /dev/null +++ b/java/ql/test/stubs/android/android/os/MessageQueue.java @@ -0,0 +1,26 @@ +// Generated automatically from android.os.MessageQueue for testing purposes + +package android.os; + +import java.io.FileDescriptor; + +public class MessageQueue +{ + protected void finalize(){} + public boolean isIdle(){ return false; } + public void addIdleHandler(MessageQueue.IdleHandler p0){} + public void addOnFileDescriptorEventListener(FileDescriptor p0, int p1, MessageQueue.OnFileDescriptorEventListener p2){} + public void removeIdleHandler(MessageQueue.IdleHandler p0){} + public void removeOnFileDescriptorEventListener(FileDescriptor p0){} + static public interface IdleHandler + { + boolean queueIdle(); + } + static public interface OnFileDescriptorEventListener + { + int onFileDescriptorEvents(FileDescriptor p0, int p1); + static int EVENT_ERROR = 0; + static int EVENT_INPUT = 0; + static int EVENT_OUTPUT = 0; + } +} diff --git a/java/ql/test/stubs/android/android/os/Messenger.java b/java/ql/test/stubs/android/android/os/Messenger.java new file mode 100644 index 00000000000..08d2a975153 --- /dev/null +++ b/java/ql/test/stubs/android/android/os/Messenger.java @@ -0,0 +1,25 @@ +// Generated automatically from android.os.Messenger for testing purposes + +package android.os; + +import android.os.Handler; +import android.os.IBinder; +import android.os.Message; +import android.os.Parcel; +import android.os.Parcelable; + +public class Messenger implements Parcelable +{ + protected Messenger() {} + public IBinder getBinder(){ return null; } + public Messenger(Handler p0){} + public Messenger(IBinder p0){} + public boolean equals(Object p0){ return false; } + public int describeContents(){ return 0; } + public int hashCode(){ return 0; } + public static Messenger readMessengerOrNullFromParcel(Parcel p0){ return null; } + public static Parcelable.Creator CREATOR = null; + public static void writeMessengerOrNullToParcel(Messenger p0, Parcel p1){} + public void send(Message p0){} + public void writeToParcel(Parcel p0, int p1){} +} diff --git a/java/ql/test/stubs/android/android/os/Parcel.java b/java/ql/test/stubs/android/android/os/Parcel.java new file mode 100644 index 00000000000..ef6dcdeb085 --- /dev/null +++ b/java/ql/test/stubs/android/android/os/Parcel.java @@ -0,0 +1,146 @@ +// Generated automatically from android.os.Parcel for testing purposes + +package android.os; + +import android.os.Bundle; +import android.os.IBinder; +import android.os.IInterface; +import android.os.ParcelFileDescriptor; +import android.os.Parcelable; +import android.os.PersistableBundle; +import android.util.ArrayMap; +import android.util.Size; +import android.util.SizeF; +import android.util.SparseArray; +import android.util.SparseBooleanArray; +import java.io.FileDescriptor; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class Parcel +{ + protected Parcel() {} + protected void finalize(){} + public ArrayMap createTypedArrayMap(Parcelable.Creator p0){ return null; } + public List readParcelableList(List p0, ClassLoader p1){ return null; } + public SparseArray createTypedSparseArray(Parcelable.Creator p0){ return null; } + public T readParcelable(ClassLoader p0){ return null; } + public void writeParcelableArray(T[] p0, int p1){} + public void writeParcelableList(List p0, int p1){} + public void writeTypedArray(T[] p0, int p1){} + public void writeTypedArrayMap(ArrayMap p0, int p1){} + public void writeTypedList(List p0){} + public void writeTypedObject(T p0, int p1){} + public void writeTypedSparseArray(SparseArray p0, int p1){} + public ArrayList createTypedArrayList(Parcelable.Creator p0){ return null; } + public SparseArray readSparseArray(ClassLoader p0){ return null; } + public T readTypedObject(Parcelable.Creator p0){ return null; } + public T[] createTypedArray(Parcelable.Creator p0){ return null; } + public void readTypedArray(T[] p0, Parcelable.Creator p1){} + public void readTypedList(List p0, Parcelable.Creator p1){} + public void writeSparseArray(SparseArray p0){} + public ArrayList readArrayList(ClassLoader p0){ return null; } + public ArrayList createBinderArrayList(){ return null; } + public ArrayList createStringArrayList(){ return null; } + public Bundle readBundle(){ return null; } + public Bundle readBundle(ClassLoader p0){ return null; } + public HashMap readHashMap(ClassLoader p0){ return null; } + public IBinder readStrongBinder(){ return null; } + public IBinder[] createBinderArray(){ return null; } + public Object readValue(ClassLoader p0){ return null; } + public Object[] readArray(ClassLoader p0){ return null; } + public ParcelFileDescriptor readFileDescriptor(){ return null; } + public Parcelable.Creator readParcelableCreator(ClassLoader p0){ return null; } + public Parcelable[] readParcelableArray(ClassLoader p0){ return null; } + public PersistableBundle readPersistableBundle(){ return null; } + public PersistableBundle readPersistableBundle(ClassLoader p0){ return null; } + public Serializable readSerializable(){ return null; } + public Size readSize(){ return null; } + public SizeF readSizeF(){ return null; } + public SparseBooleanArray readSparseBooleanArray(){ return null; } + public String readString(){ return null; } + public String[] createStringArray(){ return null; } + public boolean hasFileDescriptors(){ return false; } + public boolean readBoolean(){ return false; } + public boolean[] createBooleanArray(){ return null; } + public byte readByte(){ return 0; } + public byte[] createByteArray(){ return null; } + public byte[] marshall(){ return null; } + public char[] createCharArray(){ return null; } + public double readDouble(){ return 0; } + public double[] createDoubleArray(){ return null; } + public float readFloat(){ return 0; } + public float[] createFloatArray(){ return null; } + public int dataAvail(){ return 0; } + public int dataCapacity(){ return 0; } + public int dataPosition(){ return 0; } + public int dataSize(){ return 0; } + public int readInt(){ return 0; } + public int[] createIntArray(){ return null; } + public long readLong(){ return 0; } + public long[] createLongArray(){ return null; } + public static Parcel obtain(){ return null; } + public static Parcelable.Creator STRING_CREATOR = null; + public void appendFrom(Parcel p0, int p1, int p2){} + public void enforceInterface(String p0){} + public void readBinderArray(IBinder[] p0){} + public void readBinderList(List p0){} + public void readBooleanArray(boolean[] p0){} + public void readByteArray(byte[] p0){} + public void readCharArray(char[] p0){} + public void readDoubleArray(double[] p0){} + public void readException(){} + public void readException(int p0, String p1){} + public void readFloatArray(float[] p0){} + public void readIntArray(int[] p0){} + public void readList(List p0, ClassLoader p1){} + public void readLongArray(long[] p0){} + public void readMap(Map p0, ClassLoader p1){} + public void readStringArray(String[] p0){} + public void readStringList(List p0){} + public void recycle(){} + public void setDataCapacity(int p0){} + public void setDataPosition(int p0){} + public void setDataSize(int p0){} + public void unmarshall(byte[] p0, int p1, int p2){} + public void writeArray(Object[] p0){} + public void writeBinderArray(IBinder[] p0){} + public void writeBinderList(List p0){} + public void writeBoolean(boolean p0){} + public void writeBooleanArray(boolean[] p0){} + public void writeBundle(Bundle p0){} + public void writeByte(byte p0){} + public void writeByteArray(byte[] p0){} + public void writeByteArray(byte[] p0, int p1, int p2){} + public void writeCharArray(char[] p0){} + public void writeDouble(double p0){} + public void writeDoubleArray(double[] p0){} + public void writeException(Exception p0){} + public void writeFileDescriptor(FileDescriptor p0){} + public void writeFloat(float p0){} + public void writeFloatArray(float[] p0){} + public void writeInt(int p0){} + public void writeIntArray(int[] p0){} + public void writeInterfaceToken(String p0){} + public void writeList(List p0){} + public void writeLong(long p0){} + public void writeLongArray(long[] p0){} + public void writeMap(Map p0){} + public void writeNoException(){} + public void writeParcelable(Parcelable p0, int p1){} + public void writeParcelableCreator(Parcelable p0){} + public void writePersistableBundle(PersistableBundle p0){} + public void writeSerializable(Serializable p0){} + public void writeSize(Size p0){} + public void writeSizeF(SizeF p0){} + public void writeSparseBooleanArray(SparseBooleanArray p0){} + public void writeString(String p0){} + public void writeStringArray(String[] p0){} + public void writeStringList(List p0){} + public void writeStrongBinder(IBinder p0){} + public void writeStrongInterface(IInterface p0){} + public void writeValue(Object p0){} +} diff --git a/java/ql/test/stubs/android/android/os/ParcelFileDescriptor.java b/java/ql/test/stubs/android/android/os/ParcelFileDescriptor.java index 757872bb457..05b41873d41 100644 --- a/java/ql/test/stubs/android/android/os/ParcelFileDescriptor.java +++ b/java/ql/test/stubs/android/android/os/ParcelFileDescriptor.java @@ -1,5 +1,58 @@ +// Generated automatically from android.os.ParcelFileDescriptor for testing purposes + package android.os; -public class ParcelFileDescriptor { +import android.os.Handler; +import android.os.Parcel; +import android.os.Parcelable; +import java.io.Closeable; +import java.io.File; +import java.io.FileDescriptor; +import java.io.IOException; +import java.net.DatagramSocket; +import java.net.Socket; +public class ParcelFileDescriptor implements Closeable, Parcelable +{ + protected ParcelFileDescriptor() {} + protected void finalize(){} + public FileDescriptor getFileDescriptor(){ return null; } + public ParcelFileDescriptor dup(){ return null; } + public ParcelFileDescriptor(ParcelFileDescriptor p0){} + public String toString(){ return null; } + public boolean canDetectErrors(){ return false; } + public int describeContents(){ return 0; } + public int detachFd(){ return 0; } + public int getFd(){ return 0; } + public long getStatSize(){ return 0; } + public static ParcelFileDescriptor adoptFd(int p0){ return null; } + public static ParcelFileDescriptor dup(FileDescriptor p0){ return null; } + public static ParcelFileDescriptor fromDatagramSocket(DatagramSocket p0){ return null; } + public static ParcelFileDescriptor fromFd(int p0){ return null; } + public static ParcelFileDescriptor fromSocket(Socket p0){ return null; } + public static ParcelFileDescriptor open(File p0, int p1){ return null; } + public static ParcelFileDescriptor open(File p0, int p1, Handler p2, ParcelFileDescriptor.OnCloseListener p3){ return null; } + public static ParcelFileDescriptor wrap(ParcelFileDescriptor p0, Handler p1, ParcelFileDescriptor.OnCloseListener p2){ return null; } + public static ParcelFileDescriptor[] createPipe(){ return null; } + public static ParcelFileDescriptor[] createReliablePipe(){ return null; } + public static ParcelFileDescriptor[] createReliableSocketPair(){ return null; } + public static ParcelFileDescriptor[] createSocketPair(){ return null; } + public static Parcelable.Creator CREATOR = null; + public static int MODE_APPEND = 0; + public static int MODE_CREATE = 0; + public static int MODE_READ_ONLY = 0; + public static int MODE_READ_WRITE = 0; + public static int MODE_TRUNCATE = 0; + public static int MODE_WORLD_READABLE = 0; + public static int MODE_WORLD_WRITEABLE = 0; + public static int MODE_WRITE_ONLY = 0; + public static int parseMode(String p0){ return 0; } + public void checkError(){} + public void close(){} + public void closeWithError(String p0){} + public void writeToParcel(Parcel p0, int p1){} + static public interface OnCloseListener + { + void onClose(IOException p0); + } } diff --git a/java/ql/test/stubs/android/android/os/Parcelable.java b/java/ql/test/stubs/android/android/os/Parcelable.java new file mode 100644 index 00000000000..626061a6799 --- /dev/null +++ b/java/ql/test/stubs/android/android/os/Parcelable.java @@ -0,0 +1,18 @@ +// Generated automatically from android.os.Parcelable for testing purposes + +package android.os; + +import android.os.Parcel; + +public interface Parcelable +{ + int describeContents(); + static int CONTENTS_FILE_DESCRIPTOR = 0; + static int PARCELABLE_WRITE_RETURN_VALUE = 0; + static public interface Creator + { + T createFromParcel(Parcel p0); + T[] newArray(int p0); + } + void writeToParcel(Parcel p0, int p1); +} diff --git a/java/ql/test/stubs/android/android/os/PatternMatcher.java b/java/ql/test/stubs/android/android/os/PatternMatcher.java new file mode 100644 index 00000000000..d23c55aefd1 --- /dev/null +++ b/java/ql/test/stubs/android/android/os/PatternMatcher.java @@ -0,0 +1,24 @@ +// Generated automatically from android.os.PatternMatcher for testing purposes + +package android.os; + +import android.os.Parcel; +import android.os.Parcelable; + +public class PatternMatcher implements Parcelable +{ + protected PatternMatcher() {} + public PatternMatcher(Parcel p0){} + public PatternMatcher(String p0, int p1){} + public String toString(){ return null; } + public boolean match(String p0){ return false; } + public final String getPath(){ return null; } + public final int getType(){ return 0; } + public int describeContents(){ return 0; } + public static Parcelable.Creator CREATOR = null; + public static int PATTERN_ADVANCED_GLOB = 0; + public static int PATTERN_LITERAL = 0; + public static int PATTERN_PREFIX = 0; + public static int PATTERN_SIMPLE_GLOB = 0; + public void writeToParcel(Parcel p0, int p1){} +} diff --git a/java/ql/test/stubs/android/android/os/PersistableBundle.java b/java/ql/test/stubs/android/android/os/PersistableBundle.java new file mode 100644 index 00000000000..45354eb5b53 --- /dev/null +++ b/java/ql/test/stubs/android/android/os/PersistableBundle.java @@ -0,0 +1,27 @@ +// Generated automatically from android.os.PersistableBundle for testing purposes + +package android.os; + +import android.os.BaseBundle; +import android.os.Parcel; +import android.os.Parcelable; +import java.io.InputStream; +import java.io.OutputStream; + +public class PersistableBundle extends BaseBundle implements Cloneable, Parcelable +{ + public Object clone(){ return null; } + public PersistableBundle deepCopy(){ return null; } + public PersistableBundle getPersistableBundle(String p0){ return null; } + public PersistableBundle(){} + public PersistableBundle(PersistableBundle p0){} + public PersistableBundle(int p0){} + public String toString(){ return null; } + public int describeContents(){ return 0; } + public static Parcelable.Creator CREATOR = null; + public static PersistableBundle EMPTY = null; + public static PersistableBundle readFromStream(InputStream p0){ return null; } + public void putPersistableBundle(String p0, PersistableBundle p1){} + public void writeToParcel(Parcel p0, int p1){} + public void writeToStream(OutputStream p0){} +} diff --git a/java/ql/test/stubs/android/android/os/UserHandle.java b/java/ql/test/stubs/android/android/os/UserHandle.java new file mode 100644 index 00000000000..a2e4d596054 --- /dev/null +++ b/java/ql/test/stubs/android/android/os/UserHandle.java @@ -0,0 +1,21 @@ +// Generated automatically from android.os.UserHandle for testing purposes + +package android.os; + +import android.os.Parcel; +import android.os.Parcelable; + +public class UserHandle implements Parcelable +{ + protected UserHandle() {} + public String toString(){ return null; } + public UserHandle(Parcel p0){} + public boolean equals(Object p0){ return false; } + public int describeContents(){ return 0; } + public int hashCode(){ return 0; } + public static Parcelable.Creator CREATOR = null; + public static UserHandle getUserHandleForUid(int p0){ return null; } + public static UserHandle readFromParcel(Parcel p0){ return null; } + public static void writeToParcel(UserHandle p0, Parcel p1){} + public void writeToParcel(Parcel p0, int p1){} +} diff --git a/java/ql/test/stubs/android/android/util/AndroidException.java b/java/ql/test/stubs/android/android/util/AndroidException.java new file mode 100644 index 00000000000..aee2fef29f7 --- /dev/null +++ b/java/ql/test/stubs/android/android/util/AndroidException.java @@ -0,0 +1,12 @@ +// Generated automatically from android.util.AndroidException for testing purposes + +package android.util; + + +public class AndroidException extends Exception +{ + public AndroidException(){} + public AndroidException(Exception p0){} + public AndroidException(String p0){} + public AndroidException(String p0, Throwable p1){} +} diff --git a/java/ql/test/stubs/android/android/util/ArrayMap.java b/java/ql/test/stubs/android/android/util/ArrayMap.java new file mode 100644 index 00000000000..55c7adebea7 --- /dev/null +++ b/java/ql/test/stubs/android/android/util/ArrayMap.java @@ -0,0 +1,40 @@ +// Generated automatically from android.util.ArrayMap for testing purposes + +package android.util; + +import java.util.Collection; +import java.util.Map; +import java.util.Set; + +public class ArrayMap implements Map +{ + public ArrayMap(){} + public ArrayMap(ArrayMap p0){} + public ArrayMap(int p0){} + public Collection values(){ return null; } + public K keyAt(int p0){ return null; } + public Set keySet(){ return null; } + public Set> entrySet(){ return null; } + public String toString(){ return null; } + public V get(Object p0){ return null; } + public V put(K p0, V p1){ return null; } + public V remove(Object p0){ return null; } + public V removeAt(int p0){ return null; } + public V setValueAt(int p0, V p1){ return null; } + public V valueAt(int p0){ return null; } + public boolean containsAll(Collection p0){ return false; } + public boolean containsKey(Object p0){ return false; } + public boolean containsValue(Object p0){ return false; } + public boolean equals(Object p0){ return false; } + public boolean isEmpty(){ return false; } + public boolean removeAll(Collection p0){ return false; } + public boolean retainAll(Collection p0){ return false; } + public int hashCode(){ return 0; } + public int indexOfKey(Object p0){ return 0; } + public int indexOfValue(Object p0){ return 0; } + public int size(){ return 0; } + public void clear(){} + public void ensureCapacity(int p0){} + public void putAll(ArrayMap p0){} + public void putAll(Map p0){} +} diff --git a/java/ql/test/stubs/android/android/util/AttributeSet.java b/java/ql/test/stubs/android/android/util/AttributeSet.java index 27159b91485..04bdbe6b8d2 100644 --- a/java/ql/test/stubs/android/android/util/AttributeSet.java +++ b/java/ql/test/stubs/android/android/util/AttributeSet.java @@ -1,74 +1,31 @@ -/* - * Copyright (C) 2006 The Android Open Source Project - * - * 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. - */ +// Generated automatically from android.util.AttributeSet for testing purposes package android.util; -public interface AttributeSet { - public int getAttributeCount(); - - default String getAttributeNamespace (int index) { - return null; - } - - public String getAttributeName(int index); - - public String getAttributeValue(int index); - - public String getAttributeValue(String namespace, String name); - - public String getPositionDescription(); - - public int getAttributeNameResource(int index); - - public int getAttributeListValue(String namespace, String attribute, - String[] options, int defaultValue); - - public boolean getAttributeBooleanValue(String namespace, String attribute, - boolean defaultValue); - - public int getAttributeResourceValue(String namespace, String attribute, - int defaultValue); - - public int getAttributeIntValue(String namespace, String attribute, - int defaultValue); - - public int getAttributeUnsignedIntValue(String namespace, String attribute, - int defaultValue); - - public float getAttributeFloatValue(String namespace, String attribute, - float defaultValue); - - public int getAttributeListValue(int index, String[] options, int defaultValue); - - public boolean getAttributeBooleanValue(int index, boolean defaultValue); - - public int getAttributeResourceValue(int index, int defaultValue); - - public int getAttributeIntValue(int index, int defaultValue); - - public int getAttributeUnsignedIntValue(int index, int defaultValue); - - public float getAttributeFloatValue(int index, float defaultValue); - - public String getIdAttribute(); - - public String getClassAttribute(); - - public int getIdAttributeResourceValue(int defaultValue); - - public int getStyleAttribute(); +public interface AttributeSet +{ + String getAttributeName(int p0); + String getAttributeValue(String p0, String p1); + String getAttributeValue(int p0); + String getClassAttribute(); + String getIdAttribute(); + String getPositionDescription(); + boolean getAttributeBooleanValue(String p0, String p1, boolean p2); + boolean getAttributeBooleanValue(int p0, boolean p1); + default String getAttributeNamespace(int p0){ return null; } + float getAttributeFloatValue(String p0, String p1, float p2); + float getAttributeFloatValue(int p0, float p1); + int getAttributeCount(); + int getAttributeIntValue(String p0, String p1, int p2); + int getAttributeIntValue(int p0, int p1); + int getAttributeListValue(String p0, String p1, String[] p2, int p3); + int getAttributeListValue(int p0, String[] p1, int p2); + int getAttributeNameResource(int p0); + int getAttributeResourceValue(String p0, String p1, int p2); + int getAttributeResourceValue(int p0, int p1); + int getAttributeUnsignedIntValue(String p0, String p1, int p2); + int getAttributeUnsignedIntValue(int p0, int p1); + int getIdAttributeResourceValue(int p0); + int getStyleAttribute(); } diff --git a/java/ql/test/stubs/android/android/util/DisplayMetrics.java b/java/ql/test/stubs/android/android/util/DisplayMetrics.java new file mode 100644 index 00000000000..fe64b670921 --- /dev/null +++ b/java/ql/test/stubs/android/android/util/DisplayMetrics.java @@ -0,0 +1,46 @@ +// Generated automatically from android.util.DisplayMetrics for testing purposes + +package android.util; + + +public class DisplayMetrics +{ + public DisplayMetrics(){} + public String toString(){ return null; } + public boolean equals(DisplayMetrics p0){ return false; } + public boolean equals(Object p0){ return false; } + public float density = 0; + public float scaledDensity = 0; + public float xdpi = 0; + public float ydpi = 0; + public int densityDpi = 0; + public int hashCode(){ return 0; } + public int heightPixels = 0; + public int widthPixels = 0; + public static int DENSITY_140 = 0; + public static int DENSITY_180 = 0; + public static int DENSITY_200 = 0; + public static int DENSITY_220 = 0; + public static int DENSITY_260 = 0; + public static int DENSITY_280 = 0; + public static int DENSITY_300 = 0; + public static int DENSITY_340 = 0; + public static int DENSITY_360 = 0; + public static int DENSITY_400 = 0; + public static int DENSITY_420 = 0; + public static int DENSITY_440 = 0; + public static int DENSITY_450 = 0; + public static int DENSITY_560 = 0; + public static int DENSITY_600 = 0; + public static int DENSITY_DEFAULT = 0; + public static int DENSITY_DEVICE_STABLE = 0; + public static int DENSITY_HIGH = 0; + public static int DENSITY_LOW = 0; + public static int DENSITY_MEDIUM = 0; + public static int DENSITY_TV = 0; + public static int DENSITY_XHIGH = 0; + public static int DENSITY_XXHIGH = 0; + public static int DENSITY_XXXHIGH = 0; + public void setTo(DisplayMetrics p0){} + public void setToDefaults(){} +} diff --git a/java/ql/test/stubs/android/android/util/Pair.java b/java/ql/test/stubs/android/android/util/Pair.java new file mode 100644 index 00000000000..84a73730e05 --- /dev/null +++ b/java/ql/test/stubs/android/android/util/Pair.java @@ -0,0 +1,16 @@ +// Generated automatically from android.util.Pair for testing purposes + +package android.util; + + +public class Pair +{ + protected Pair() {} + public Pair(F p0, S p1){} + public String toString(){ return null; } + public boolean equals(Object p0){ return false; } + public final F first = null; + public final S second = null; + public int hashCode(){ return 0; } + public static Pair create(A p0, B p1){ return null; } +} diff --git a/java/ql/test/stubs/android/android/util/Printer.java b/java/ql/test/stubs/android/android/util/Printer.java new file mode 100644 index 00000000000..e6b67a13572 --- /dev/null +++ b/java/ql/test/stubs/android/android/util/Printer.java @@ -0,0 +1,9 @@ +// Generated automatically from android.util.Printer for testing purposes + +package android.util; + + +public interface Printer +{ + void println(String p0); +} diff --git a/java/ql/test/stubs/android/android/util/Size.java b/java/ql/test/stubs/android/android/util/Size.java new file mode 100644 index 00000000000..9cd6edc8555 --- /dev/null +++ b/java/ql/test/stubs/android/android/util/Size.java @@ -0,0 +1,16 @@ +// Generated automatically from android.util.Size for testing purposes + +package android.util; + + +public class Size +{ + protected Size() {} + public Size(int p0, int p1){} + public String toString(){ return null; } + public boolean equals(Object p0){ return false; } + public int getHeight(){ return 0; } + public int getWidth(){ return 0; } + public int hashCode(){ return 0; } + public static Size parseSize(String p0){ return null; } +} diff --git a/java/ql/test/stubs/android/android/util/SizeF.java b/java/ql/test/stubs/android/android/util/SizeF.java new file mode 100644 index 00000000000..16558fd17e6 --- /dev/null +++ b/java/ql/test/stubs/android/android/util/SizeF.java @@ -0,0 +1,16 @@ +// Generated automatically from android.util.SizeF for testing purposes + +package android.util; + + +public class SizeF +{ + protected SizeF() {} + public SizeF(float p0, float p1){} + public String toString(){ return null; } + public boolean equals(Object p0){ return false; } + public float getHeight(){ return 0; } + public float getWidth(){ return 0; } + public int hashCode(){ return 0; } + public static SizeF parseSizeF(String p0){ return null; } +} diff --git a/java/ql/test/stubs/android/android/util/SparseArray.java b/java/ql/test/stubs/android/android/util/SparseArray.java new file mode 100644 index 00000000000..11f3ffa5427 --- /dev/null +++ b/java/ql/test/stubs/android/android/util/SparseArray.java @@ -0,0 +1,28 @@ +// Generated automatically from android.util.SparseArray for testing purposes + +package android.util; + + +public class SparseArray implements Cloneable +{ + public E get(int p0){ return null; } + public E get(int p0, E p1){ return null; } + public E valueAt(int p0){ return null; } + public SparseArray(){} + public SparseArray(int p0){} + public SparseArray clone(){ return null; } + public String toString(){ return null; } + public boolean contains(int p0){ return false; } + public int indexOfKey(int p0){ return 0; } + public int indexOfValue(E p0){ return 0; } + public int keyAt(int p0){ return 0; } + public int size(){ return 0; } + public void append(int p0, E p1){} + public void clear(){} + public void delete(int p0){} + public void put(int p0, E p1){} + public void remove(int p0){} + public void removeAt(int p0){} + public void removeAtRange(int p0, int p1){} + public void setValueAt(int p0, E p1){} +} diff --git a/java/ql/test/stubs/android/android/util/SparseBooleanArray.java b/java/ql/test/stubs/android/android/util/SparseBooleanArray.java new file mode 100644 index 00000000000..3c84c18e71b --- /dev/null +++ b/java/ql/test/stubs/android/android/util/SparseBooleanArray.java @@ -0,0 +1,27 @@ +// Generated automatically from android.util.SparseBooleanArray for testing purposes + +package android.util; + + +public class SparseBooleanArray implements Cloneable +{ + public SparseBooleanArray clone(){ return null; } + public SparseBooleanArray(){} + public SparseBooleanArray(int p0){} + public String toString(){ return null; } + public boolean equals(Object p0){ return false; } + public boolean get(int p0){ return false; } + public boolean get(int p0, boolean p1){ return false; } + public boolean valueAt(int p0){ return false; } + public int hashCode(){ return 0; } + public int indexOfKey(int p0){ return 0; } + public int indexOfValue(boolean p0){ return 0; } + public int keyAt(int p0){ return 0; } + public int size(){ return 0; } + public void append(int p0, boolean p1){} + public void clear(){} + public void delete(int p0){} + public void put(int p0, boolean p1){} + public void removeAt(int p0){} + public void setValueAt(int p0, boolean p1){} +} diff --git a/java/ql/test/stubs/android/android/util/TypedValue.java b/java/ql/test/stubs/android/android/util/TypedValue.java new file mode 100644 index 00000000000..269ab8bcf67 --- /dev/null +++ b/java/ql/test/stubs/android/android/util/TypedValue.java @@ -0,0 +1,73 @@ +// Generated automatically from android.util.TypedValue for testing purposes + +package android.util; + +import android.util.DisplayMetrics; + +public class TypedValue +{ + public CharSequence string = null; + public String toString(){ return null; } + public TypedValue(){} + public boolean isColorType(){ return false; } + public final CharSequence coerceToString(){ return null; } + public final float getFloat(){ return 0; } + public float getDimension(DisplayMetrics p0){ return 0; } + public float getFraction(float p0, float p1){ return 0; } + public int assetCookie = 0; + public int changingConfigurations = 0; + public int data = 0; + public int density = 0; + public int getComplexUnit(){ return 0; } + public int resourceId = 0; + public int sourceResourceId = 0; + public int type = 0; + public static String coerceToString(int p0, int p1){ return null; } + public static float applyDimension(int p0, float p1, DisplayMetrics p2){ return 0; } + public static float complexToDimension(int p0, DisplayMetrics p1){ return 0; } + public static float complexToFloat(int p0){ return 0; } + public static float complexToFraction(int p0, float p1, float p2){ return 0; } + public static int COMPLEX_MANTISSA_MASK = 0; + public static int COMPLEX_MANTISSA_SHIFT = 0; + public static int COMPLEX_RADIX_0p23 = 0; + public static int COMPLEX_RADIX_16p7 = 0; + public static int COMPLEX_RADIX_23p0 = 0; + public static int COMPLEX_RADIX_8p15 = 0; + public static int COMPLEX_RADIX_MASK = 0; + public static int COMPLEX_RADIX_SHIFT = 0; + public static int COMPLEX_UNIT_DIP = 0; + public static int COMPLEX_UNIT_FRACTION = 0; + public static int COMPLEX_UNIT_FRACTION_PARENT = 0; + public static int COMPLEX_UNIT_IN = 0; + public static int COMPLEX_UNIT_MASK = 0; + public static int COMPLEX_UNIT_MM = 0; + public static int COMPLEX_UNIT_PT = 0; + public static int COMPLEX_UNIT_PX = 0; + public static int COMPLEX_UNIT_SHIFT = 0; + public static int COMPLEX_UNIT_SP = 0; + public static int DATA_NULL_EMPTY = 0; + public static int DATA_NULL_UNDEFINED = 0; + public static int DENSITY_DEFAULT = 0; + public static int DENSITY_NONE = 0; + public static int TYPE_ATTRIBUTE = 0; + public static int TYPE_DIMENSION = 0; + public static int TYPE_FIRST_COLOR_INT = 0; + public static int TYPE_FIRST_INT = 0; + public static int TYPE_FLOAT = 0; + public static int TYPE_FRACTION = 0; + public static int TYPE_INT_BOOLEAN = 0; + public static int TYPE_INT_COLOR_ARGB4 = 0; + public static int TYPE_INT_COLOR_ARGB8 = 0; + public static int TYPE_INT_COLOR_RGB4 = 0; + public static int TYPE_INT_COLOR_RGB8 = 0; + public static int TYPE_INT_DEC = 0; + public static int TYPE_INT_HEX = 0; + public static int TYPE_LAST_COLOR_INT = 0; + public static int TYPE_LAST_INT = 0; + public static int TYPE_NULL = 0; + public static int TYPE_REFERENCE = 0; + public static int TYPE_STRING = 0; + public static int complexToDimensionPixelOffset(int p0, DisplayMetrics p1){ return 0; } + public static int complexToDimensionPixelSize(int p0, DisplayMetrics p1){ return 0; } + public void setTo(TypedValue p0){} +} diff --git a/java/ql/test/stubs/android/android/view/Display.java b/java/ql/test/stubs/android/android/view/Display.java new file mode 100644 index 00000000000..8c8061f00cb --- /dev/null +++ b/java/ql/test/stubs/android/android/view/Display.java @@ -0,0 +1,89 @@ +// Generated automatically from android.view.Display for testing purposes + +package android.view; + +import android.graphics.ColorSpace; +import android.graphics.Point; +import android.graphics.Rect; +import android.os.Parcel; +import android.os.Parcelable; +import android.util.DisplayMetrics; +import android.view.DisplayCutout; + +public class Display +{ + public ColorSpace getPreferredWideGamutColorSpace(){ return null; } + public Display.HdrCapabilities getHdrCapabilities(){ return null; } + public Display.Mode getMode(){ return null; } + public Display.Mode[] getSupportedModes(){ return null; } + public DisplayCutout getCutout(){ return null; } + public String getName(){ return null; } + public String toString(){ return null; } + public boolean isHdr(){ return false; } + public boolean isMinimalPostProcessingSupported(){ return false; } + public boolean isValid(){ return false; } + public boolean isWideColorGamut(){ return false; } + public float getRefreshRate(){ return 0; } + public float[] getSupportedRefreshRates(){ return null; } + public int getDisplayId(){ return 0; } + public int getFlags(){ return 0; } + public int getHeight(){ return 0; } + public int getOrientation(){ return 0; } + public int getPixelFormat(){ return 0; } + public int getRotation(){ return 0; } + public int getState(){ return 0; } + public int getWidth(){ return 0; } + public long getAppVsyncOffsetNanos(){ return 0; } + public long getPresentationDeadlineNanos(){ return 0; } + public static int DEFAULT_DISPLAY = 0; + public static int FLAG_PRESENTATION = 0; + public static int FLAG_PRIVATE = 0; + public static int FLAG_ROUND = 0; + public static int FLAG_SECURE = 0; + public static int FLAG_SUPPORTS_PROTECTED_BUFFERS = 0; + public static int INVALID_DISPLAY = 0; + public static int STATE_DOZE = 0; + public static int STATE_DOZE_SUSPEND = 0; + public static int STATE_OFF = 0; + public static int STATE_ON = 0; + public static int STATE_ON_SUSPEND = 0; + public static int STATE_UNKNOWN = 0; + public static int STATE_VR = 0; + public void getCurrentSizeRange(Point p0, Point p1){} + public void getMetrics(DisplayMetrics p0){} + public void getRealMetrics(DisplayMetrics p0){} + public void getRealSize(Point p0){} + public void getRectSize(Rect p0){} + public void getSize(Point p0){} + static public class HdrCapabilities implements Parcelable + { + public String toString(){ return null; } + public boolean equals(Object p0){ return false; } + public float getDesiredMaxAverageLuminance(){ return 0; } + public float getDesiredMaxLuminance(){ return 0; } + public float getDesiredMinLuminance(){ return 0; } + public int describeContents(){ return 0; } + public int hashCode(){ return 0; } + public int[] getSupportedHdrTypes(){ return null; } + public static Parcelable.Creator CREATOR = null; + public static float INVALID_LUMINANCE = 0; + public static int HDR_TYPE_DOLBY_VISION = 0; + public static int HDR_TYPE_HDR10 = 0; + public static int HDR_TYPE_HDR10_PLUS = 0; + public static int HDR_TYPE_HLG = 0; + public void writeToParcel(Parcel p0, int p1){} + } + static public class Mode implements Parcelable + { + public String toString(){ return null; } + public boolean equals(Object p0){ return false; } + public float getRefreshRate(){ return 0; } + public int describeContents(){ return 0; } + public int getModeId(){ return 0; } + public int getPhysicalHeight(){ return 0; } + public int getPhysicalWidth(){ return 0; } + public int hashCode(){ return 0; } + public static Parcelable.Creator CREATOR = null; + public void writeToParcel(Parcel p0, int p1){} + } +} diff --git a/java/ql/test/stubs/android/android/view/DisplayCutout.java b/java/ql/test/stubs/android/android/view/DisplayCutout.java new file mode 100644 index 00000000000..90d3ecf0b44 --- /dev/null +++ b/java/ql/test/stubs/android/android/view/DisplayCutout.java @@ -0,0 +1,28 @@ +// Generated automatically from android.view.DisplayCutout for testing purposes + +package android.view; + +import android.graphics.Insets; +import android.graphics.Rect; +import java.util.List; + +public class DisplayCutout +{ + protected DisplayCutout() {} + public DisplayCutout(Insets p0, Rect p1, Rect p2, Rect p3, Rect p4){} + public DisplayCutout(Insets p0, Rect p1, Rect p2, Rect p3, Rect p4, Insets p5){} + public DisplayCutout(Rect p0, List p1){} + public Insets getWaterfallInsets(){ return null; } + public List getBoundingRects(){ return null; } + public Rect getBoundingRectBottom(){ return null; } + public Rect getBoundingRectLeft(){ return null; } + public Rect getBoundingRectRight(){ return null; } + public Rect getBoundingRectTop(){ return null; } + public String toString(){ return null; } + public boolean equals(Object p0){ return false; } + public int getSafeInsetBottom(){ return 0; } + public int getSafeInsetLeft(){ return 0; } + public int getSafeInsetRight(){ return 0; } + public int getSafeInsetTop(){ return 0; } + public int hashCode(){ return 0; } +} diff --git a/java/ql/test/stubs/android/org/xmlpull/v1/XmlPullParser.java b/java/ql/test/stubs/android/org/xmlpull/v1/XmlPullParser.java new file mode 100644 index 00000000000..c693a5f6289 --- /dev/null +++ b/java/ql/test/stubs/android/org/xmlpull/v1/XmlPullParser.java @@ -0,0 +1,64 @@ +// Generated automatically from org.xmlpull.v1.XmlPullParser for testing purposes + +package org.xmlpull.v1; + +import java.io.InputStream; +import java.io.Reader; + +public interface XmlPullParser +{ + Object getProperty(String p0); + String getAttributeName(int p0); + String getAttributeNamespace(int p0); + String getAttributePrefix(int p0); + String getAttributeType(int p0); + String getAttributeValue(String p0, String p1); + String getAttributeValue(int p0); + String getInputEncoding(); + String getName(); + String getNamespace(); + String getNamespace(String p0); + String getNamespacePrefix(int p0); + String getNamespaceUri(int p0); + String getPositionDescription(); + String getPrefix(); + String getText(); + String nextText(); + boolean getFeature(String p0); + boolean isAttributeDefault(int p0); + boolean isEmptyElementTag(); + boolean isWhitespace(); + char[] getTextCharacters(int[] p0); + int getAttributeCount(); + int getColumnNumber(); + int getDepth(); + int getEventType(); + int getLineNumber(); + int getNamespaceCount(int p0); + int next(); + int nextTag(); + int nextToken(); + static String FEATURE_PROCESS_DOCDECL = null; + static String FEATURE_PROCESS_NAMESPACES = null; + static String FEATURE_REPORT_NAMESPACE_ATTRIBUTES = null; + static String FEATURE_VALIDATION = null; + static String NO_NAMESPACE = null; + static String[] TYPES = null; + static int CDSECT = 0; + static int COMMENT = 0; + static int DOCDECL = 0; + static int END_DOCUMENT = 0; + static int END_TAG = 0; + static int ENTITY_REF = 0; + static int IGNORABLE_WHITESPACE = 0; + static int PROCESSING_INSTRUCTION = 0; + static int START_DOCUMENT = 0; + static int START_TAG = 0; + static int TEXT = 0; + void defineEntityReplacementText(String p0, String p1); + void require(int p0, String p1, String p2); + void setFeature(String p0, boolean p1); + void setInput(InputStream p0, String p1); + void setInput(Reader p0); + void setProperty(String p0, Object p1); +} diff --git a/java/ql/test/stubs/android/org/xmlpull/v1/XmlSerializer.java b/java/ql/test/stubs/android/org/xmlpull/v1/XmlSerializer.java new file mode 100644 index 00000000000..f0a985adebe --- /dev/null +++ b/java/ql/test/stubs/android/org/xmlpull/v1/XmlSerializer.java @@ -0,0 +1,35 @@ +// Generated automatically from org.xmlpull.v1.XmlSerializer for testing purposes + +package org.xmlpull.v1; + +import java.io.OutputStream; +import java.io.Writer; + +public interface XmlSerializer +{ + Object getProperty(String p0); + String getName(); + String getNamespace(); + String getPrefix(String p0, boolean p1); + XmlSerializer attribute(String p0, String p1, String p2); + XmlSerializer endTag(String p0, String p1); + XmlSerializer startTag(String p0, String p1); + XmlSerializer text(String p0); + XmlSerializer text(char[] p0, int p1, int p2); + boolean getFeature(String p0); + int getDepth(); + void cdsect(String p0); + void comment(String p0); + void docdecl(String p0); + void endDocument(); + void entityRef(String p0); + void flush(); + void ignorableWhitespace(String p0); + void processingInstruction(String p0); + void setFeature(String p0, boolean p1); + void setOutput(OutputStream p0, String p1); + void setOutput(Writer p0); + void setPrefix(String p0, String p1); + void setProperty(String p0, Object p1); + void startDocument(String p0, Boolean p1); +} From 447eb23356e872282203b011381a5c252c0f1af0 Mon Sep 17 00:00:00 2001 From: alexet Date: Wed, 29 Sep 2021 16:01:08 +0100 Subject: [PATCH 663/741] Java: Fix for tc magic issue with subtyping. --- .../code/java/frameworks/android/Android.qll | 34 ++++++++++++------- 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/java/ql/lib/semmle/code/java/frameworks/android/Android.qll b/java/ql/lib/semmle/code/java/frameworks/android/Android.qll index 34064b3190e..4bcaa3734a7 100644 --- a/java/ql/lib/semmle/code/java/frameworks/android/Android.qll +++ b/java/ql/lib/semmle/code/java/frameworks/android/Android.qll @@ -6,19 +6,29 @@ import java import semmle.code.java.dataflow.ExternalFlow import semmle.code.xml.AndroidManifest +/** + * Gets a transitive superType avoiding magic optimisation + */ +pragma[nomagic] +private RefType getASuperTypePlus(RefType t) { result = t.getASupertype+() } + +/** + * Gets a reflexive/transitive superType avoiding magic optimisation + */ +pragma[inline] +private RefType getASuperTypeStar(RefType t) { result = getASuperTypePlus(t) or result = t } + /** * An Android component. That is, either an activity, a service, * a broadcast receiver, or a content provider. */ class AndroidComponent extends Class { AndroidComponent() { - // The casts here are due to misoptimisation if they are missing - // but are not needed semantically. - this.(Class).getASupertype*().hasQualifiedName("android.app", "Activity") or - this.(Class).getASupertype*().hasQualifiedName("android.app", "Service") or - this.(Class).getASupertype*().hasQualifiedName("android.content", "BroadcastReceiver") or - this.(Class).getASupertype*().hasQualifiedName("android.content", "ContentProvider") or - this.(Class).getASupertype*().hasQualifiedName("android.content", "ContentResolver") + getASuperTypeStar(this).hasQualifiedName("android.app", "Activity") or + getASuperTypeStar(this).hasQualifiedName("android.app", "Service") or + getASuperTypeStar(this).hasQualifiedName("android.content", "BroadcastReceiver") or + getASuperTypeStar(this).hasQualifiedName("android.content", "ContentProvider") or + getASuperTypeStar(this).hasQualifiedName("android.content", "ContentResolver") } /** The XML element corresponding to this Android component. */ @@ -52,32 +62,32 @@ class ExportableAndroidComponent extends AndroidComponent { /** An Android activity. */ class AndroidActivity extends ExportableAndroidComponent { - AndroidActivity() { this.getASupertype*().hasQualifiedName("android.app", "Activity") } + AndroidActivity() { getASuperTypeStar(this).hasQualifiedName("android.app", "Activity") } } /** An Android service. */ class AndroidService extends ExportableAndroidComponent { - AndroidService() { this.getASupertype*().hasQualifiedName("android.app", "Service") } + AndroidService() { getASuperTypeStar(this).hasQualifiedName("android.app", "Service") } } /** An Android broadcast receiver. */ class AndroidBroadcastReceiver extends ExportableAndroidComponent { AndroidBroadcastReceiver() { - this.getASupertype*().hasQualifiedName("android.content", "BroadcastReceiver") + getASuperTypeStar(this).hasQualifiedName("android.content", "BroadcastReceiver") } } /** An Android content provider. */ class AndroidContentProvider extends ExportableAndroidComponent { AndroidContentProvider() { - this.getASupertype*().hasQualifiedName("android.content", "ContentProvider") + getASuperTypeStar(this).hasQualifiedName("android.content", "ContentProvider") } } /** An Android content resolver. */ class AndroidContentResolver extends AndroidComponent { AndroidContentResolver() { - this.getASupertype*().hasQualifiedName("android.content", "ContentResolver") + getASuperTypeStar(this).hasQualifiedName("android.content", "ContentResolver") } } From f3bde56de96f2bf2e88fc9f2cee6921784466b88 Mon Sep 17 00:00:00 2001 From: f1v3 Date: Mon, 17 May 2021 16:22:50 +0800 Subject: [PATCH 664/741] detects a hard-coded cipher key for shiro --- .../CWE-798/HardcodedCredentialsApiCall.ql | 4 +- .../src/Security/CWE/CWE-798/SensitiveApi.qll | 3 +- .../HardcodedCredentialsApiCall.expected | 8 ++ .../semmle/tests/HardcodedShiroKey.java | 42 ++++++ .../security/CWE-798/semmle/tests/options | 2 +- .../AbstractSymmetricCipherService.java | 28 ++++ .../apache/shiro/crypto/AesCipherService.java | 9 ++ .../apache/shiro/crypto/CipherService.java | 12 ++ .../crypto/DefaultBlockCipherService.java | 120 ++++++++++++++++++ .../apache/shiro/crypto/JcaCipherService.java | 113 +++++++++++++++++ .../apache/shiro/crypto/OperationMode.java | 19 +++ .../apache/shiro/crypto/PaddingScheme.java | 25 ++++ .../shiro/mgt/AbstractRememberMeManager.java | 34 +++++ .../web/mgt/CookieRememberMeManager.java | 30 +++++ 14 files changed, 445 insertions(+), 4 deletions(-) create mode 100644 java/ql/test/query-tests/security/CWE-798/semmle/tests/HardcodedShiroKey.java create mode 100644 java/ql/test/stubs/shiro-core-1.4.0/org/apache/shiro/crypto/AbstractSymmetricCipherService.java create mode 100644 java/ql/test/stubs/shiro-core-1.4.0/org/apache/shiro/crypto/AesCipherService.java create mode 100644 java/ql/test/stubs/shiro-core-1.4.0/org/apache/shiro/crypto/CipherService.java create mode 100644 java/ql/test/stubs/shiro-core-1.4.0/org/apache/shiro/crypto/DefaultBlockCipherService.java create mode 100644 java/ql/test/stubs/shiro-core-1.4.0/org/apache/shiro/crypto/JcaCipherService.java create mode 100644 java/ql/test/stubs/shiro-core-1.4.0/org/apache/shiro/crypto/OperationMode.java create mode 100644 java/ql/test/stubs/shiro-core-1.4.0/org/apache/shiro/crypto/PaddingScheme.java create mode 100644 java/ql/test/stubs/shiro-core-1.4.0/org/apache/shiro/mgt/AbstractRememberMeManager.java create mode 100644 java/ql/test/stubs/shiro-core-1.4.0/org/apache/shiro/web/mgt/CookieRememberMeManager.java diff --git a/java/ql/src/Security/CWE/CWE-798/HardcodedCredentialsApiCall.ql b/java/ql/src/Security/CWE/CWE-798/HardcodedCredentialsApiCall.ql index 13cb2a7a69d..223eacede87 100644 --- a/java/ql/src/Security/CWE/CWE-798/HardcodedCredentialsApiCall.ql +++ b/java/ql/src/Security/CWE/CWE-798/HardcodedCredentialsApiCall.ql @@ -27,9 +27,9 @@ class HardcodedCredentialApiCallConfiguration extends DataFlow::Configuration { override predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { node1.asExpr().getType() instanceof TypeString and - exists(MethodAccess ma | ma.getMethod().hasName(["getBytes", "toCharArray"]) | + exists(MethodAccess ma | ma.getMethod().hasName(["getBytes", "toCharArray","decode"]) | node2.asExpr() = ma and - ma.getQualifier() = node1.asExpr() + (ma.getQualifier() = node1.asExpr() or ma.getAnArgument() = node1.asExpr()) ) } diff --git a/java/ql/src/Security/CWE/CWE-798/SensitiveApi.qll b/java/ql/src/Security/CWE/CWE-798/SensitiveApi.qll index afbefb7b878..60a62d8831e 100644 --- a/java/ql/src/Security/CWE/CWE-798/SensitiveApi.qll +++ b/java/ql/src/Security/CWE/CWE-798/SensitiveApi.qll @@ -490,7 +490,8 @@ private predicate javaApiCallableCryptoKeyParam(string s) { s = "sun.security.provider.JavaKeyStore;engineSetKeyEntry(String, byte[], Certificate[]);1" or s = "sun.security.tools.keytool.Main;recoverKey(String, char[], char[]);2" or s = "sun.security.tools.keytool.Main;getKeyPasswd(String, String, char[]);2" or - s = "sun.security.x509.X509Key;decode(byte[]);0" + s = "sun.security.x509.X509Key;decode(byte[]);0" or + s = "org.apache.shiro.mgt.AbstractRememberMeManager;setCipherKey(byte[]);0" } /** diff --git a/java/ql/test/query-tests/security/CWE-798/semmle/tests/HardcodedCredentialsApiCall.expected b/java/ql/test/query-tests/security/CWE-798/semmle/tests/HardcodedCredentialsApiCall.expected index 62d35e7a9e9..b50796315d5 100644 --- a/java/ql/test/query-tests/security/CWE-798/semmle/tests/HardcodedCredentialsApiCall.expected +++ b/java/ql/test/query-tests/security/CWE-798/semmle/tests/HardcodedCredentialsApiCall.expected @@ -26,6 +26,8 @@ edges | HardcodedAzureCredentials.java:61:3:61:33 | new HardcodedAzureCredentials(...) [clientSecret] : String | HardcodedAzureCredentials.java:15:14:15:42 | parameter this [clientSecret] : String | | HardcodedAzureCredentials.java:61:3:61:33 | new HardcodedAzureCredentials(...) [username] : String | HardcodedAzureCredentials.java:15:14:15:42 | parameter this [username] : String | | HardcodedAzureCredentials.java:63:3:63:33 | new HardcodedAzureCredentials(...) [clientSecret] : String | HardcodedAzureCredentials.java:43:14:43:38 | parameter this [clientSecret] : String | +| HardcodedShiroKey.java:8:46:8:54 | "TEST123" : String | HardcodedShiroKey.java:8:46:8:65 | getBytes(...) | +| HardcodedShiroKey.java:16:60:16:85 | "4AvVhmFLUs0KTA3Kprsdag==" : String | HardcodedShiroKey.java:16:46:16:86 | decode(...) | | Test.java:9:16:9:22 | "admin" : String | Test.java:12:13:12:15 | usr : String | | Test.java:9:16:9:22 | "admin" : String | Test.java:15:36:15:38 | usr | | Test.java:9:16:9:22 | "admin" : String | Test.java:17:39:17:41 | usr | @@ -76,6 +78,10 @@ nodes | HardcodedAzureCredentials.java:61:3:61:33 | new HardcodedAzureCredentials(...) [clientSecret] : String | semmle.label | new HardcodedAzureCredentials(...) [clientSecret] : String | | HardcodedAzureCredentials.java:61:3:61:33 | new HardcodedAzureCredentials(...) [username] : String | semmle.label | new HardcodedAzureCredentials(...) [username] : String | | HardcodedAzureCredentials.java:63:3:63:33 | new HardcodedAzureCredentials(...) [clientSecret] : String | semmle.label | new HardcodedAzureCredentials(...) [clientSecret] : String | +| HardcodedShiroKey.java:8:46:8:54 | "TEST123" : String | semmle.label | "TEST123" : String | +| HardcodedShiroKey.java:8:46:8:65 | getBytes(...) | semmle.label | getBytes(...) | +| HardcodedShiroKey.java:16:46:16:86 | decode(...) | semmle.label | decode(...) | +| HardcodedShiroKey.java:16:60:16:85 | "4AvVhmFLUs0KTA3Kprsdag==" : String | semmle.label | "4AvVhmFLUs0KTA3Kprsdag==" : String | | Test.java:9:16:9:22 | "admin" : String | semmle.label | "admin" : String | | Test.java:10:17:10:24 | "123456" : String | semmle.label | "123456" : String | | Test.java:12:13:12:15 | usr : String | semmle.label | usr : String | @@ -110,6 +116,8 @@ subpaths | HardcodedAzureCredentials.java:10:34:10:67 | "username@example.onmicrosoft.com" | HardcodedAzureCredentials.java:10:34:10:67 | "username@example.onmicrosoft.com" : String | HardcodedAzureCredentials.java:18:13:18:20 | username | Hard-coded value flows to $@. | HardcodedAzureCredentials.java:18:13:18:20 | username | sensitive API call | | HardcodedAzureCredentials.java:11:38:11:73 | "1n1.qAc~3Q-1t38aF79Xzv5AUEfR5-ct3_" | HardcodedAzureCredentials.java:11:38:11:73 | "1n1.qAc~3Q-1t38aF79Xzv5AUEfR5-ct3_" : String | HardcodedAzureCredentials.java:19:13:19:24 | clientSecret | Hard-coded value flows to $@. | HardcodedAzureCredentials.java:19:13:19:24 | clientSecret | sensitive API call | | HardcodedAzureCredentials.java:11:38:11:73 | "1n1.qAc~3Q-1t38aF79Xzv5AUEfR5-ct3_" | HardcodedAzureCredentials.java:11:38:11:73 | "1n1.qAc~3Q-1t38aF79Xzv5AUEfR5-ct3_" : String | HardcodedAzureCredentials.java:46:17:46:28 | clientSecret | Hard-coded value flows to $@. | HardcodedAzureCredentials.java:46:17:46:28 | clientSecret | sensitive API call | +| HardcodedShiroKey.java:8:46:8:54 | "TEST123" | HardcodedShiroKey.java:8:46:8:54 | "TEST123" : String | HardcodedShiroKey.java:8:46:8:65 | getBytes(...) | Hard-coded value flows to $@. | HardcodedShiroKey.java:8:46:8:65 | getBytes(...) | sensitive API call | +| HardcodedShiroKey.java:16:60:16:85 | "4AvVhmFLUs0KTA3Kprsdag==" | HardcodedShiroKey.java:16:60:16:85 | "4AvVhmFLUs0KTA3Kprsdag==" : String | HardcodedShiroKey.java:16:46:16:86 | decode(...) | Hard-coded value flows to $@. | HardcodedShiroKey.java:16:46:16:86 | decode(...) | sensitive API call | | Test.java:9:16:9:22 | "admin" | Test.java:9:16:9:22 | "admin" : String | Test.java:15:36:15:38 | usr | Hard-coded value flows to $@. | Test.java:15:36:15:38 | usr | sensitive API call | | Test.java:9:16:9:22 | "admin" | Test.java:9:16:9:22 | "admin" : String | Test.java:17:39:17:41 | usr | Hard-coded value flows to $@. | Test.java:17:39:17:41 | usr | sensitive API call | | Test.java:9:16:9:22 | "admin" | Test.java:9:16:9:22 | "admin" : String | Test.java:18:39:18:41 | usr | Hard-coded value flows to $@. | Test.java:18:39:18:41 | usr | sensitive API call | diff --git a/java/ql/test/query-tests/security/CWE-798/semmle/tests/HardcodedShiroKey.java b/java/ql/test/query-tests/security/CWE-798/semmle/tests/HardcodedShiroKey.java new file mode 100644 index 00000000000..ddb0ede6e5f --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-798/semmle/tests/HardcodedShiroKey.java @@ -0,0 +1,42 @@ +import org.apache.shiro.web.mgt.CookieRememberMeManager; + +public class HardcodedShiroKey { + + //BAD: hard-coded shiro key + public void testHardcodedShiroKey(String input) { + CookieRememberMeManager cookieRememberMeManager = new CookieRememberMeManager(); + cookieRememberMeManager.setCipherKey("TEST123".getBytes()); + + } + + + //BAD: hard-coded shiro key + public void testHardcodedbase64ShiroKey(String input) { + CookieRememberMeManager cookieRememberMeManager = new CookieRememberMeManager(); + cookieRememberMeManager.setCipherKey(Base64.decode("4AvVhmFLUs0KTA3Kprsdag==")); + + } + + //GOOD: random shiro key + public void testRandomShiroKey(String input) { + CookieRememberMeManager cookieRememberMeManager = new CookieRememberMeManager(); + } + + + + static class Base64 { + + static byte[] decode(String str){ + + byte[] x = new byte[1024]; + + return x; + + } + + } + + + + +} \ No newline at end of file diff --git a/java/ql/test/query-tests/security/CWE-798/semmle/tests/options b/java/ql/test/query-tests/security/CWE-798/semmle/tests/options index 4e56d220d7e..2d21958e299 100644 --- a/java/ql/test/query-tests/security/CWE-798/semmle/tests/options +++ b/java/ql/test/query-tests/security/CWE-798/semmle/tests/options @@ -1 +1 @@ -// semmle-extractor-options: --javac-args -cp ${testdir}/../../../../../stubs/amazon-aws-sdk-1.11.700:${testdir}/../../../../../stubs/azure-sdk-for-java +// semmle-extractor-options: --javac-args -cp ${testdir}/../../../../../stubs/amazon-aws-sdk-1.11.700:${testdir}/../../../../../stubs/azure-sdk-for-java:${testdir}/../../../../../stubs/shiro-core-1.4.0 diff --git a/java/ql/test/stubs/shiro-core-1.4.0/org/apache/shiro/crypto/AbstractSymmetricCipherService.java b/java/ql/test/stubs/shiro-core-1.4.0/org/apache/shiro/crypto/AbstractSymmetricCipherService.java new file mode 100644 index 00000000000..70cce8e76c5 --- /dev/null +++ b/java/ql/test/stubs/shiro-core-1.4.0/org/apache/shiro/crypto/AbstractSymmetricCipherService.java @@ -0,0 +1,28 @@ +package org.apache.shiro.crypto; + +import java.security.Key; +import java.security.NoSuchAlgorithmException; +import javax.crypto.KeyGenerator; + +public abstract class AbstractSymmetricCipherService extends JcaCipherService { + protected AbstractSymmetricCipherService(String algorithmName) { + super(algorithmName); + } + + public Key generateNewKey() { + return this.generateNewKey(this.getKeySize()); + } + + public Key generateNewKey(int keyBitSize) { + KeyGenerator kg; + try { + kg = KeyGenerator.getInstance(this.getAlgorithmName()); + } catch (NoSuchAlgorithmException var5) { + String msg = "Unable to acquire " + this.getAlgorithmName() + " algorithm. This is required to function."; + throw new IllegalStateException(msg, var5); + } + + kg.init(keyBitSize); + return kg.generateKey(); + } +} \ No newline at end of file diff --git a/java/ql/test/stubs/shiro-core-1.4.0/org/apache/shiro/crypto/AesCipherService.java b/java/ql/test/stubs/shiro-core-1.4.0/org/apache/shiro/crypto/AesCipherService.java new file mode 100644 index 00000000000..c8a727d1400 --- /dev/null +++ b/java/ql/test/stubs/shiro-core-1.4.0/org/apache/shiro/crypto/AesCipherService.java @@ -0,0 +1,9 @@ +package org.apache.shiro.crypto; + +public class AesCipherService extends DefaultBlockCipherService { + private static final String ALGORITHM_NAME = "AES"; + + public AesCipherService() { + super("AES"); + } +} \ No newline at end of file diff --git a/java/ql/test/stubs/shiro-core-1.4.0/org/apache/shiro/crypto/CipherService.java b/java/ql/test/stubs/shiro-core-1.4.0/org/apache/shiro/crypto/CipherService.java new file mode 100644 index 00000000000..b5996d331c6 --- /dev/null +++ b/java/ql/test/stubs/shiro-core-1.4.0/org/apache/shiro/crypto/CipherService.java @@ -0,0 +1,12 @@ + +package org.apache.shiro.crypto; + +import java.io.InputStream; +import java.io.OutputStream; + +public interface CipherService { + + void decrypt(InputStream var1, OutputStream var2, byte[] var3) throws Exception; + + void encrypt(InputStream var1, OutputStream var2, byte[] var3) throws Exception; +} diff --git a/java/ql/test/stubs/shiro-core-1.4.0/org/apache/shiro/crypto/DefaultBlockCipherService.java b/java/ql/test/stubs/shiro-core-1.4.0/org/apache/shiro/crypto/DefaultBlockCipherService.java new file mode 100644 index 00000000000..e4aa1e8b482 --- /dev/null +++ b/java/ql/test/stubs/shiro-core-1.4.0/org/apache/shiro/crypto/DefaultBlockCipherService.java @@ -0,0 +1,120 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by Fernflower decompiler) +// + +package org.apache.shiro.crypto; + +public class DefaultBlockCipherService extends AbstractSymmetricCipherService { + private static final int DEFAULT_BLOCK_SIZE = 0; + private static final String TRANSFORMATION_STRING_DELIMITER = "/"; + private static final int DEFAULT_STREAMING_BLOCK_SIZE = 8; + private String modeName; + private int blockSize; + private String paddingSchemeName; + private String streamingModeName; + private int streamingBlockSize; + private String streamingPaddingSchemeName; + private String transformationString; + private String streamingTransformationString; + + public DefaultBlockCipherService(String algorithmName) { + super(algorithmName); + this.modeName = OperationMode.CBC.name(); + this.paddingSchemeName = PaddingScheme.PKCS5.getTransformationName(); + this.blockSize = 0; + this.streamingModeName = OperationMode.CBC.name(); + this.streamingPaddingSchemeName = PaddingScheme.PKCS5.getTransformationName(); + this.streamingBlockSize = 8; + } + + public String getModeName() { + return null; + } + + public void setModeName(String modeName) { + } + + public void setMode(OperationMode mode) { + } + + public String getPaddingSchemeName() { + return null; + } + + public void setPaddingSchemeName(String paddingSchemeName) { + + } + + public void setPaddingScheme(PaddingScheme paddingScheme) { + + } + + public int getBlockSize() { + return 1; + } + + public void setBlockSize(int blockSize) { + } + + public String getStreamingModeName() { + return null; + } + + private boolean isModeStreamingCompatible(String modeName) { + return false; + } + + public void setStreamingModeName(String streamingModeName) { + + } + + public void setStreamingMode(OperationMode mode) { + + } + + public String getStreamingPaddingSchemeName() { + return null; + } + + public void setStreamingPaddingSchemeName(String streamingPaddingSchemeName) { + } + + public void setStreamingPaddingScheme(PaddingScheme scheme) { + } + + public int getStreamingBlockSize() { + return 1; + } + + public void setStreamingBlockSize(int streamingBlockSize) { + } + + protected String getTransformationString(boolean streaming) { + return null; + } + + private String buildTransformationString() { + return null; + } + + private String buildStreamingTransformationString() { + return null; + } + + private String buildTransformationString(String modeName, String paddingSchemeName, int blockSize) { + return null; + } + + private boolean isModeInitializationVectorCompatible(String modeName) { + return false; + } + + protected boolean isGenerateInitializationVectors(boolean streaming) { + return false; + } + + protected byte[] generateInitializationVector(boolean streaming) { + return null; + } +} diff --git a/java/ql/test/stubs/shiro-core-1.4.0/org/apache/shiro/crypto/JcaCipherService.java b/java/ql/test/stubs/shiro-core-1.4.0/org/apache/shiro/crypto/JcaCipherService.java new file mode 100644 index 00000000000..8d1c628e4ff --- /dev/null +++ b/java/ql/test/stubs/shiro-core-1.4.0/org/apache/shiro/crypto/JcaCipherService.java @@ -0,0 +1,113 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by Fernflower decompiler) +// + +package org.apache.shiro.crypto; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.security.Key; +import java.security.NoSuchAlgorithmException; +import java.security.SecureRandom; +import java.security.spec.AlgorithmParameterSpec; +import javax.crypto.Cipher; +import javax.crypto.CipherInputStream; +import javax.crypto.spec.IvParameterSpec; +import javax.crypto.spec.SecretKeySpec; + +public abstract class JcaCipherService implements CipherService { + private static final int DEFAULT_KEY_SIZE = 128; + private static final int DEFAULT_STREAMING_BUFFER_SIZE = 512; + private static final int BITS_PER_BYTE = 8; + private static final String RANDOM_NUM_GENERATOR_ALGORITHM_NAME = "SHA1PRNG"; + private String algorithmName; + private int keySize; + private int streamingBufferSize; + private boolean generateInitializationVectors; + private int initializationVectorSize; + + + protected JcaCipherService(String algorithmName) { + this.algorithmName = algorithmName; + this.keySize = 128; + this.initializationVectorSize = 128; + this.streamingBufferSize = 512; + this.generateInitializationVectors = true; + } + + public String getAlgorithmName() { + return null; + } + + public int getKeySize() { + return 1; + } + + public void setKeySize(int keySize) { + } + + public boolean isGenerateInitializationVectors() { + return false; + } + + public void setGenerateInitializationVectors(boolean generateInitializationVectors) { + } + + public int getInitializationVectorSize() { + return 1; + } + + public void setInitializationVectorSize(int initializationVectorSize) throws IllegalArgumentException { + + } + + protected boolean isGenerateInitializationVectors(boolean streaming) { + return false; + } + + public int getStreamingBufferSize() { + return 1; + } + + public void setStreamingBufferSize(int streamingBufferSize) { + } + + protected String getTransformationString(boolean streaming) { + return null; + } + + protected byte[] generateInitializationVector(boolean streaming) { + return null; + } + + + + + private byte[] crypt(byte[] bytes, byte[] key, byte[] iv, int mode) throws IllegalArgumentException, Exception { + return null; + } + + public void encrypt(InputStream in, OutputStream out, byte[] key) throws Exception { + } + + private void encrypt(InputStream in, OutputStream out, byte[] key, byte[] iv, boolean prependIv) throws Exception { + } + + public void decrypt(InputStream in, OutputStream out, byte[] key) throws Exception { + } + + private void decrypt(InputStream in, OutputStream out, byte[] key, boolean ivPrepended) throws Exception { + } + + private void decrypt(InputStream in, OutputStream out, byte[] decryptionKey, byte[] iv) throws Exception { + + } + + private void crypt(InputStream in, OutputStream out, byte[] keyBytes, byte[] iv, int cryptMode) throws Exception { + + } + + +} diff --git a/java/ql/test/stubs/shiro-core-1.4.0/org/apache/shiro/crypto/OperationMode.java b/java/ql/test/stubs/shiro-core-1.4.0/org/apache/shiro/crypto/OperationMode.java new file mode 100644 index 00000000000..d5eadd91170 --- /dev/null +++ b/java/ql/test/stubs/shiro-core-1.4.0/org/apache/shiro/crypto/OperationMode.java @@ -0,0 +1,19 @@ + +package org.apache.shiro.crypto; + +public enum OperationMode { + CBC, + CCM, + CFB, + CTR, + EAX, + ECB, + GCM, + NONE, + OCB, + OFB, + PCBC; + + private OperationMode() { + } +} diff --git a/java/ql/test/stubs/shiro-core-1.4.0/org/apache/shiro/crypto/PaddingScheme.java b/java/ql/test/stubs/shiro-core-1.4.0/org/apache/shiro/crypto/PaddingScheme.java new file mode 100644 index 00000000000..d09017041bc --- /dev/null +++ b/java/ql/test/stubs/shiro-core-1.4.0/org/apache/shiro/crypto/PaddingScheme.java @@ -0,0 +1,25 @@ +package org.apache.shiro.crypto; + +public enum PaddingScheme { + NONE("NoPadding"), + ISO10126("ISO10126Padding"), + OAEP("OAEPPadding"), + OAEPWithMd5AndMgf1("OAEPWithMD5AndMGF1Padding"), + OAEPWithSha1AndMgf1("OAEPWithSHA-1AndMGF1Padding"), + OAEPWithSha256AndMgf1("OAEPWithSHA-256AndMGF1Padding"), + OAEPWithSha384AndMgf1("OAEPWithSHA-384AndMGF1Padding"), + OAEPWithSha512AndMgf1("OAEPWithSHA-512AndMGF1Padding"), + PKCS1("PKCS1Padding"), + PKCS5("PKCS5Padding"), + SSL3("SSL3Padding"); + + private final String transformationName; + + private PaddingScheme(String transformationName) { + this.transformationName = transformationName; + } + + public String getTransformationName() { + return this.transformationName; + } +} \ No newline at end of file diff --git a/java/ql/test/stubs/shiro-core-1.4.0/org/apache/shiro/mgt/AbstractRememberMeManager.java b/java/ql/test/stubs/shiro-core-1.4.0/org/apache/shiro/mgt/AbstractRememberMeManager.java new file mode 100644 index 00000000000..e251ed8bc0c --- /dev/null +++ b/java/ql/test/stubs/shiro-core-1.4.0/org/apache/shiro/mgt/AbstractRememberMeManager.java @@ -0,0 +1,34 @@ + +package org.apache.shiro.mgt; +import org.apache.shiro.crypto.AesCipherService; + +public abstract class AbstractRememberMeManager { + + private byte[] encryptionCipherKey; + private byte[] decryptionCipherKey; + private AesCipherService cipherService; + + public AbstractRememberMeManager() { + AesCipherService cipherService = new AesCipherService(); + this.cipherService = cipherService; + this.setCipherKey(cipherService.generateNewKey().getEncoded()); + } + + public void setEncryptionCipherKey(byte[] encryptionCipherKey) { + + this.encryptionCipherKey = encryptionCipherKey; + } + + + public void setDecryptionCipherKey(byte[] decryptionCipherKey) { + this.decryptionCipherKey = decryptionCipherKey; + } + + + public void setCipherKey(byte[] cipherKey) { + this.setEncryptionCipherKey(cipherKey); + this.setDecryptionCipherKey(cipherKey); + } + + +} diff --git a/java/ql/test/stubs/shiro-core-1.4.0/org/apache/shiro/web/mgt/CookieRememberMeManager.java b/java/ql/test/stubs/shiro-core-1.4.0/org/apache/shiro/web/mgt/CookieRememberMeManager.java new file mode 100644 index 00000000000..39811aeca7a --- /dev/null +++ b/java/ql/test/stubs/shiro-core-1.4.0/org/apache/shiro/web/mgt/CookieRememberMeManager.java @@ -0,0 +1,30 @@ +package org.apache.shiro.web.mgt; + +import org.apache.shiro.mgt.AbstractRememberMeManager; +public class CookieRememberMeManager extends AbstractRememberMeManager { + + public CookieRememberMeManager() { + } + + + public void setCookie() { + } + + protected void rememberSerializedIdentity() { + } + + private boolean isIdentityRemoved() { + return false; + } + + protected byte[] getRememberedSerializedIdentity() { + return null; + } + + private String ensurePadding(String base64) { + return null; + } + + + +} From 168fc4170db536c72aa660eafc1696bbb423b9a2 Mon Sep 17 00:00:00 2001 From: f1v3 Date: Mon, 24 May 2021 17:02:06 +0800 Subject: [PATCH 665/741] Apply suggestions from code review --- ...1-05-24-hardcoded-shiro-key-in-api-call.md | 3 ++ .../code/java/dataflow/ExternalFlow.qll | 2 + .../CWE-798/HardcodedCredentialsApiCall.ql | 8 ++-- .../src/Security/CWE/CWE-798/SensitiveApi.qll | 6 +-- .../HardcodedCredentialsApiCall.expected | 20 +++++---- .../semmle/tests/HardcodedShiroKey.java | 42 +++++++++---------- .../org/apache/shiro/codec/Base64.java | 36 ++++++++++++++++ 7 files changed, 81 insertions(+), 36 deletions(-) create mode 100644 java/change-notes/2021-05-24-hardcoded-shiro-key-in-api-call.md create mode 100644 java/ql/test/stubs/shiro-core-1.4.0/org/apache/shiro/codec/Base64.java diff --git a/java/change-notes/2021-05-24-hardcoded-shiro-key-in-api-call.md b/java/change-notes/2021-05-24-hardcoded-shiro-key-in-api-call.md new file mode 100644 index 00000000000..929f6ee9aa4 --- /dev/null +++ b/java/change-notes/2021-05-24-hardcoded-shiro-key-in-api-call.md @@ -0,0 +1,3 @@ +lgtm,codescanning +* The query "Hard-coded credential in API call" (`java/hardcoded-credential-api-call`) + This query finds hard-coded cipher key for shiro. This vulnerability can lead to arbitrary code execution. \ No newline at end of file diff --git a/java/ql/lib/semmle/code/java/dataflow/ExternalFlow.qll b/java/ql/lib/semmle/code/java/dataflow/ExternalFlow.qll index 7f46f2d79b6..f9b1c22c1f0 100644 --- a/java/ql/lib/semmle/code/java/dataflow/ExternalFlow.qll +++ b/java/ql/lib/semmle/code/java/dataflow/ExternalFlow.qll @@ -309,6 +309,8 @@ private predicate summaryModelCsv(string row) { "java.util;Base64$Decoder;false;decode;(ByteBuffer);;Argument[0];ReturnValue;taint", "java.util;Base64$Decoder;false;decode;(String);;Argument[0];ReturnValue;taint", "java.util;Base64$Decoder;false;wrap;(InputStream);;Argument[0];ReturnValue;taint", + "cn.hutool.core.codec;Base64;true;decode;;;Argument[0];ReturnValue;taint", + "org.apache.shiro.codec;Base64;false;decode;(String);;Argument[0];ReturnValue;taint", "org.apache.commons.codec;Encoder;true;encode;(Object);;Argument[0];ReturnValue;taint", "org.apache.commons.codec;Decoder;true;decode;(Object);;Argument[0];ReturnValue;taint", "org.apache.commons.codec;BinaryEncoder;true;encode;(byte[]);;Argument[0];ReturnValue;taint", diff --git a/java/ql/src/Security/CWE/CWE-798/HardcodedCredentialsApiCall.ql b/java/ql/src/Security/CWE/CWE-798/HardcodedCredentialsApiCall.ql index 223eacede87..3b2f20f228a 100644 --- a/java/ql/src/Security/CWE/CWE-798/HardcodedCredentialsApiCall.ql +++ b/java/ql/src/Security/CWE/CWE-798/HardcodedCredentialsApiCall.ql @@ -14,6 +14,8 @@ import java import semmle.code.java.dataflow.DataFlow import HardcodedCredentials import DataFlow::PathGraph +import semmle.code.java.dataflow.internal.FlowSummaryImpl as FlowSummaryImpl + class HardcodedCredentialApiCallConfiguration extends DataFlow::Configuration { HardcodedCredentialApiCallConfiguration() { this = "HardcodedCredentialApiCallConfiguration" } @@ -27,10 +29,10 @@ class HardcodedCredentialApiCallConfiguration extends DataFlow::Configuration { override predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { node1.asExpr().getType() instanceof TypeString and - exists(MethodAccess ma | ma.getMethod().hasName(["getBytes", "toCharArray","decode"]) | + (exists(MethodAccess ma | ma.getMethod().hasName(["getBytes", "toCharArray"]) | node2.asExpr() = ma and - (ma.getQualifier() = node1.asExpr() or ma.getAnArgument() = node1.asExpr()) - ) + ma.getQualifier() = node1.asExpr()) or FlowSummaryImpl::Private::Steps::summaryThroughStep(node1, node2, false)) + } override predicate isBarrier(DataFlow::Node n) { diff --git a/java/ql/src/Security/CWE/CWE-798/SensitiveApi.qll b/java/ql/src/Security/CWE/CWE-798/SensitiveApi.qll index 60a62d8831e..63b1ffd1ad8 100644 --- a/java/ql/src/Security/CWE/CWE-798/SensitiveApi.qll +++ b/java/ql/src/Security/CWE/CWE-798/SensitiveApi.qll @@ -490,8 +490,7 @@ private predicate javaApiCallableCryptoKeyParam(string s) { s = "sun.security.provider.JavaKeyStore;engineSetKeyEntry(String, byte[], Certificate[]);1" or s = "sun.security.tools.keytool.Main;recoverKey(String, char[], char[]);2" or s = "sun.security.tools.keytool.Main;getKeyPasswd(String, String, char[]);2" or - s = "sun.security.x509.X509Key;decode(byte[]);0" or - s = "org.apache.shiro.mgt.AbstractRememberMeManager;setCipherKey(byte[]);0" + s = "sun.security.x509.X509Key;decode(byte[]);0" } /** @@ -514,5 +513,6 @@ private predicate otherApiCallableCredentialParam(string s) { s = "com.amazonaws.auth.BasicAWSCredentials;BasicAWSCredentials(String, String);1" or s = "com.azure.identity.UsernamePasswordCredentialBuilder;username(String);0" or s = "com.azure.identity.UsernamePasswordCredentialBuilder;password(String);0" or - s = "com.azure.identity.ClientSecretCredentialBuilder;clientSecret(String);0" + s = "com.azure.identity.ClientSecretCredentialBuilder;clientSecret(String);0" or + s = "org.apache.shiro.mgt.AbstractRememberMeManager;setCipherKey(byte[]);0" } diff --git a/java/ql/test/query-tests/security/CWE-798/semmle/tests/HardcodedCredentialsApiCall.expected b/java/ql/test/query-tests/security/CWE-798/semmle/tests/HardcodedCredentialsApiCall.expected index b50796315d5..33b8879d9e5 100644 --- a/java/ql/test/query-tests/security/CWE-798/semmle/tests/HardcodedCredentialsApiCall.expected +++ b/java/ql/test/query-tests/security/CWE-798/semmle/tests/HardcodedCredentialsApiCall.expected @@ -26,8 +26,9 @@ edges | HardcodedAzureCredentials.java:61:3:61:33 | new HardcodedAzureCredentials(...) [clientSecret] : String | HardcodedAzureCredentials.java:15:14:15:42 | parameter this [clientSecret] : String | | HardcodedAzureCredentials.java:61:3:61:33 | new HardcodedAzureCredentials(...) [username] : String | HardcodedAzureCredentials.java:15:14:15:42 | parameter this [username] : String | | HardcodedAzureCredentials.java:63:3:63:33 | new HardcodedAzureCredentials(...) [clientSecret] : String | HardcodedAzureCredentials.java:43:14:43:38 | parameter this [clientSecret] : String | -| HardcodedShiroKey.java:8:46:8:54 | "TEST123" : String | HardcodedShiroKey.java:8:46:8:65 | getBytes(...) | -| HardcodedShiroKey.java:16:60:16:85 | "4AvVhmFLUs0KTA3Kprsdag==" : String | HardcodedShiroKey.java:16:46:16:86 | decode(...) | +| HardcodedShiroKey.java:9:46:9:54 | "TEST123" : String | HardcodedShiroKey.java:9:46:9:65 | getBytes(...) | +| HardcodedShiroKey.java:18:61:18:86 | "4AvVhmFLUs0KTA3Kprsdag==" : String | HardcodedShiroKey.java:18:46:18:87 | decode(...) | +| HardcodedShiroKey.java:26:83:26:108 | "6ZmI6I2j5Y+R5aSn5ZOlAA==" : String | HardcodedShiroKey.java:26:46:26:109 | decode(...) | | Test.java:9:16:9:22 | "admin" : String | Test.java:12:13:12:15 | usr : String | | Test.java:9:16:9:22 | "admin" : String | Test.java:15:36:15:38 | usr | | Test.java:9:16:9:22 | "admin" : String | Test.java:17:39:17:41 | usr | @@ -78,10 +79,12 @@ nodes | HardcodedAzureCredentials.java:61:3:61:33 | new HardcodedAzureCredentials(...) [clientSecret] : String | semmle.label | new HardcodedAzureCredentials(...) [clientSecret] : String | | HardcodedAzureCredentials.java:61:3:61:33 | new HardcodedAzureCredentials(...) [username] : String | semmle.label | new HardcodedAzureCredentials(...) [username] : String | | HardcodedAzureCredentials.java:63:3:63:33 | new HardcodedAzureCredentials(...) [clientSecret] : String | semmle.label | new HardcodedAzureCredentials(...) [clientSecret] : String | -| HardcodedShiroKey.java:8:46:8:54 | "TEST123" : String | semmle.label | "TEST123" : String | -| HardcodedShiroKey.java:8:46:8:65 | getBytes(...) | semmle.label | getBytes(...) | -| HardcodedShiroKey.java:16:46:16:86 | decode(...) | semmle.label | decode(...) | -| HardcodedShiroKey.java:16:60:16:85 | "4AvVhmFLUs0KTA3Kprsdag==" : String | semmle.label | "4AvVhmFLUs0KTA3Kprsdag==" : String | +| HardcodedShiroKey.java:9:46:9:54 | "TEST123" : String | semmle.label | "TEST123" : String | +| HardcodedShiroKey.java:9:46:9:65 | getBytes(...) | semmle.label | getBytes(...) | +| HardcodedShiroKey.java:18:46:18:87 | decode(...) | semmle.label | decode(...) | +| HardcodedShiroKey.java:18:61:18:86 | "4AvVhmFLUs0KTA3Kprsdag==" : String | semmle.label | "4AvVhmFLUs0KTA3Kprsdag==" : String | +| HardcodedShiroKey.java:26:46:26:109 | decode(...) | semmle.label | decode(...) | +| HardcodedShiroKey.java:26:83:26:108 | "6ZmI6I2j5Y+R5aSn5ZOlAA==" : String | semmle.label | "6ZmI6I2j5Y+R5aSn5ZOlAA==" : String | | Test.java:9:16:9:22 | "admin" : String | semmle.label | "admin" : String | | Test.java:10:17:10:24 | "123456" : String | semmle.label | "123456" : String | | Test.java:12:13:12:15 | usr : String | semmle.label | usr : String | @@ -116,8 +119,9 @@ subpaths | HardcodedAzureCredentials.java:10:34:10:67 | "username@example.onmicrosoft.com" | HardcodedAzureCredentials.java:10:34:10:67 | "username@example.onmicrosoft.com" : String | HardcodedAzureCredentials.java:18:13:18:20 | username | Hard-coded value flows to $@. | HardcodedAzureCredentials.java:18:13:18:20 | username | sensitive API call | | HardcodedAzureCredentials.java:11:38:11:73 | "1n1.qAc~3Q-1t38aF79Xzv5AUEfR5-ct3_" | HardcodedAzureCredentials.java:11:38:11:73 | "1n1.qAc~3Q-1t38aF79Xzv5AUEfR5-ct3_" : String | HardcodedAzureCredentials.java:19:13:19:24 | clientSecret | Hard-coded value flows to $@. | HardcodedAzureCredentials.java:19:13:19:24 | clientSecret | sensitive API call | | HardcodedAzureCredentials.java:11:38:11:73 | "1n1.qAc~3Q-1t38aF79Xzv5AUEfR5-ct3_" | HardcodedAzureCredentials.java:11:38:11:73 | "1n1.qAc~3Q-1t38aF79Xzv5AUEfR5-ct3_" : String | HardcodedAzureCredentials.java:46:17:46:28 | clientSecret | Hard-coded value flows to $@. | HardcodedAzureCredentials.java:46:17:46:28 | clientSecret | sensitive API call | -| HardcodedShiroKey.java:8:46:8:54 | "TEST123" | HardcodedShiroKey.java:8:46:8:54 | "TEST123" : String | HardcodedShiroKey.java:8:46:8:65 | getBytes(...) | Hard-coded value flows to $@. | HardcodedShiroKey.java:8:46:8:65 | getBytes(...) | sensitive API call | -| HardcodedShiroKey.java:16:60:16:85 | "4AvVhmFLUs0KTA3Kprsdag==" | HardcodedShiroKey.java:16:60:16:85 | "4AvVhmFLUs0KTA3Kprsdag==" : String | HardcodedShiroKey.java:16:46:16:86 | decode(...) | Hard-coded value flows to $@. | HardcodedShiroKey.java:16:46:16:86 | decode(...) | sensitive API call | +| HardcodedShiroKey.java:9:46:9:54 | "TEST123" | HardcodedShiroKey.java:9:46:9:54 | "TEST123" : String | HardcodedShiroKey.java:9:46:9:65 | getBytes(...) | Hard-coded value flows to $@. | HardcodedShiroKey.java:9:46:9:65 | getBytes(...) | sensitive API call | +| HardcodedShiroKey.java:18:61:18:86 | "4AvVhmFLUs0KTA3Kprsdag==" | HardcodedShiroKey.java:18:61:18:86 | "4AvVhmFLUs0KTA3Kprsdag==" : String | HardcodedShiroKey.java:18:46:18:87 | decode(...) | Hard-coded value flows to $@. | HardcodedShiroKey.java:18:46:18:87 | decode(...) | sensitive API call | +| HardcodedShiroKey.java:26:83:26:108 | "6ZmI6I2j5Y+R5aSn5ZOlAA==" | HardcodedShiroKey.java:26:83:26:108 | "6ZmI6I2j5Y+R5aSn5ZOlAA==" : String | HardcodedShiroKey.java:26:46:26:109 | decode(...) | Hard-coded value flows to $@. | HardcodedShiroKey.java:26:46:26:109 | decode(...) | sensitive API call | | Test.java:9:16:9:22 | "admin" | Test.java:9:16:9:22 | "admin" : String | Test.java:15:36:15:38 | usr | Hard-coded value flows to $@. | Test.java:15:36:15:38 | usr | sensitive API call | | Test.java:9:16:9:22 | "admin" | Test.java:9:16:9:22 | "admin" : String | Test.java:17:39:17:41 | usr | Hard-coded value flows to $@. | Test.java:17:39:17:41 | usr | sensitive API call | | Test.java:9:16:9:22 | "admin" | Test.java:9:16:9:22 | "admin" : String | Test.java:18:39:18:41 | usr | Hard-coded value flows to $@. | Test.java:18:39:18:41 | usr | sensitive API call | diff --git a/java/ql/test/query-tests/security/CWE-798/semmle/tests/HardcodedShiroKey.java b/java/ql/test/query-tests/security/CWE-798/semmle/tests/HardcodedShiroKey.java index ddb0ede6e5f..3647af01ed1 100644 --- a/java/ql/test/query-tests/security/CWE-798/semmle/tests/HardcodedShiroKey.java +++ b/java/ql/test/query-tests/security/CWE-798/semmle/tests/HardcodedShiroKey.java @@ -1,40 +1,38 @@ import org.apache.shiro.web.mgt.CookieRememberMeManager; + public class HardcodedShiroKey { //BAD: hard-coded shiro key - public void testHardcodedShiroKey(String input) { - CookieRememberMeManager cookieRememberMeManager = new CookieRememberMeManager(); + public void testHardcodedShiroKey(String input) { + CookieRememberMeManager cookieRememberMeManager = new CookieRememberMeManager(); cookieRememberMeManager.setCipherKey("TEST123".getBytes()); - } - - - //BAD: hard-coded shiro key - public void testHardcodedbase64ShiroKey(String input) { - CookieRememberMeManager cookieRememberMeManager = new CookieRememberMeManager(); - cookieRememberMeManager.setCipherKey(Base64.decode("4AvVhmFLUs0KTA3Kprsdag==")); - - } - - //GOOD: random shiro key - public void testRandomShiroKey(String input) { - CookieRememberMeManager cookieRememberMeManager = new CookieRememberMeManager(); - } + } + //BAD: hard-coded shiro key encoded by java.util.Base64 + public void testHardcodedbase64ShiroKey1(String input) { + CookieRememberMeManager cookieRememberMeManager = new CookieRememberMeManager(); + java.util.Base64.Decoder decoder = java.util.Base64.getDecoder(); + cookieRememberMeManager.setCipherKey(decoder.decode("4AvVhmFLUs0KTA3Kprsdag==")); - static class Base64 { + } - static byte[] decode(String str){ - byte[] x = new byte[1024]; + //BAD: hard-coded shiro key encoded by org.apache.shiro.codec.Base64 + public void testHardcodedbase64ShiroKey2(String input) { + CookieRememberMeManager cookieRememberMeManager = new CookieRememberMeManager(); + cookieRememberMeManager.setCipherKey(org.apache.shiro.codec.Base64.decode("6ZmI6I2j5Y+R5aSn5ZOlAA==")); - return x; + } + + //GOOD: random shiro key + public void testRandomShiroKey(String input) { + CookieRememberMeManager cookieRememberMeManager = new CookieRememberMeManager(); + } - } - } diff --git a/java/ql/test/stubs/shiro-core-1.4.0/org/apache/shiro/codec/Base64.java b/java/ql/test/stubs/shiro-core-1.4.0/org/apache/shiro/codec/Base64.java new file mode 100644 index 00000000000..d1599df6abe --- /dev/null +++ b/java/ql/test/stubs/shiro-core-1.4.0/org/apache/shiro/codec/Base64.java @@ -0,0 +1,36 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by Fernflower decompiler) +// + +package org.apache.shiro.codec; + +public class Base64 { + static final int CHUNK_SIZE = 76; + static final byte[] CHUNK_SEPARATOR = "\r\n".getBytes(); + private static final int BASELENGTH = 255; + private static final int LOOKUPLENGTH = 64; + private static final int EIGHTBIT = 8; + private static final int SIXTEENBIT = 16; + private static final int TWENTYFOURBITGROUP = 24; + private static final int FOURBYTE = 4; + private static final int SIGN = -128; + private static final byte PAD = 61; + private static final byte[] base64Alphabet = new byte[255]; + private static final byte[] lookUpBase64Alphabet = new byte[64]; + + public Base64() { + } + + + public static byte[] decode(String base64Encoded) { + byte[] bytes = new byte[1024]; + return decode(bytes); + } + + public static byte[] decode(byte[] base64Data) { + return base64Data; + } + } + + From 24c9bb2fb75ae2eff46c40e9297c7473581e0af0 Mon Sep 17 00:00:00 2001 From: f1v3 Date: Mon, 24 May 2021 18:01:01 +0800 Subject: [PATCH 666/741] autoformat --- .../CWE/CWE-798/HardcodedCredentialsApiCall.ql | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/java/ql/src/Security/CWE/CWE-798/HardcodedCredentialsApiCall.ql b/java/ql/src/Security/CWE/CWE-798/HardcodedCredentialsApiCall.ql index 3b2f20f228a..32b20a1c4a6 100644 --- a/java/ql/src/Security/CWE/CWE-798/HardcodedCredentialsApiCall.ql +++ b/java/ql/src/Security/CWE/CWE-798/HardcodedCredentialsApiCall.ql @@ -16,7 +16,6 @@ import HardcodedCredentials import DataFlow::PathGraph import semmle.code.java.dataflow.internal.FlowSummaryImpl as FlowSummaryImpl - class HardcodedCredentialApiCallConfiguration extends DataFlow::Configuration { HardcodedCredentialApiCallConfiguration() { this = "HardcodedCredentialApiCallConfiguration" } @@ -29,10 +28,14 @@ class HardcodedCredentialApiCallConfiguration extends DataFlow::Configuration { override predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { node1.asExpr().getType() instanceof TypeString and - (exists(MethodAccess ma | ma.getMethod().hasName(["getBytes", "toCharArray"]) | - node2.asExpr() = ma and - ma.getQualifier() = node1.asExpr()) or FlowSummaryImpl::Private::Steps::summaryThroughStep(node1, node2, false)) - + ( + exists(MethodAccess ma | ma.getMethod().hasName(["getBytes", "toCharArray"]) | + node2.asExpr() = ma and + ma.getQualifier() = node1.asExpr() + ) + or + FlowSummaryImpl::Private::Steps::summaryThroughStep(node1, node2, false) + ) } override predicate isBarrier(DataFlow::Node n) { From b57a58c253610e5ce8ed47b9dc107bb8475b8671 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Thu, 30 Sep 2021 14:27:05 +0100 Subject: [PATCH 667/741] Amend change note --- .../change-notes/2021-05-24-hardcoded-shiro-key-in-api-call.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/java/change-notes/2021-05-24-hardcoded-shiro-key-in-api-call.md b/java/change-notes/2021-05-24-hardcoded-shiro-key-in-api-call.md index 929f6ee9aa4..0cb8e73bb40 100644 --- a/java/change-notes/2021-05-24-hardcoded-shiro-key-in-api-call.md +++ b/java/change-notes/2021-05-24-hardcoded-shiro-key-in-api-call.md @@ -1,3 +1,2 @@ lgtm,codescanning -* The query "Hard-coded credential in API call" (`java/hardcoded-credential-api-call`) - This query finds hard-coded cipher key for shiro. This vulnerability can lead to arbitrary code execution. \ No newline at end of file +* The query "Hard-coded credential in API call" (`java/hardcoded-credential-api-call`) can now detect a hard-coded Apache Shiro cipher key. From b0983cb7267ad83f4ac623e40a0535080a9c8adc Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Thu, 30 Sep 2021 14:57:49 +0100 Subject: [PATCH 668/741] Specifically include Base64 encode/decode as a likely intermediate step for hardcoded credentials --- .../CWE-798/HardcodedCredentialsApiCall.ql | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/java/ql/src/Security/CWE/CWE-798/HardcodedCredentialsApiCall.ql b/java/ql/src/Security/CWE/CWE-798/HardcodedCredentialsApiCall.ql index 32b20a1c4a6..9e9dfb797ca 100644 --- a/java/ql/src/Security/CWE/CWE-798/HardcodedCredentialsApiCall.ql +++ b/java/ql/src/Security/CWE/CWE-798/HardcodedCredentialsApiCall.ql @@ -34,7 +34,24 @@ class HardcodedCredentialApiCallConfiguration extends DataFlow::Configuration { ma.getQualifier() = node1.asExpr() ) or - FlowSummaryImpl::Private::Steps::summaryThroughStep(node1, node2, false) + // These base64 routines are usually taint propagators, and this is not a general + // TaintTracking::Configuration, so we must specifically include them here + // as a common transform applied to a constant before passing to a remote API. + exists(MethodAccess ma | + ma.getMethod() + .hasQualifiedName([ + "java.util", "cn.hutool.core.codec", "org.apache.shiro.codec", + "apache.commons.codec.binary", "org.springframework.util" + ], ["Base64$Encoder", "Base64$Decoder", "Base64", "Base64Utils"], + [ + "encode", "encodeToString", "decode", "decodeBase64", "encodeBase64", + "encodeBase64Chunked", "encodeBase64String", "encodeBase64URLSafe", + "encodeBase64URLSafeString" + ]) + | + node1.asExpr() = ma.getArgument(0) and + node2.asExpr() = ma + ) ) } From cb4ce36d3c837bb6d7abbde9dd955446a6fe86dc Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Thu, 30 Sep 2021 15:00:13 +0100 Subject: [PATCH 669/741] Update change note; drop unnecessary import --- java/change-notes/2021-05-24-hardcoded-shiro-key-in-api-call.md | 1 + java/ql/src/Security/CWE/CWE-798/HardcodedCredentialsApiCall.ql | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/java/change-notes/2021-05-24-hardcoded-shiro-key-in-api-call.md b/java/change-notes/2021-05-24-hardcoded-shiro-key-in-api-call.md index 0cb8e73bb40..b89638a060b 100644 --- a/java/change-notes/2021-05-24-hardcoded-shiro-key-in-api-call.md +++ b/java/change-notes/2021-05-24-hardcoded-shiro-key-in-api-call.md @@ -1,2 +1,3 @@ lgtm,codescanning * The query "Hard-coded credential in API call" (`java/hardcoded-credential-api-call`) can now detect a hard-coded Apache Shiro cipher key. +* The query "Hard-coded credential in API call" (`java/hardcoded-credential-api-call`) now detected hard-coded credentials that are Base64 encoded or decoded before use. diff --git a/java/ql/src/Security/CWE/CWE-798/HardcodedCredentialsApiCall.ql b/java/ql/src/Security/CWE/CWE-798/HardcodedCredentialsApiCall.ql index 9e9dfb797ca..a787d2ddfd3 100644 --- a/java/ql/src/Security/CWE/CWE-798/HardcodedCredentialsApiCall.ql +++ b/java/ql/src/Security/CWE/CWE-798/HardcodedCredentialsApiCall.ql @@ -14,7 +14,6 @@ import java import semmle.code.java.dataflow.DataFlow import HardcodedCredentials import DataFlow::PathGraph -import semmle.code.java.dataflow.internal.FlowSummaryImpl as FlowSummaryImpl class HardcodedCredentialApiCallConfiguration extends DataFlow::Configuration { HardcodedCredentialApiCallConfiguration() { this = "HardcodedCredentialApiCallConfiguration" } From ec4cb7c90f4cdfb24d3dcbd3087ccf25f489c6ee Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Thu, 30 Sep 2021 16:22:12 +0100 Subject: [PATCH 670/741] Fix typo --- java/change-notes/2021-05-24-hardcoded-shiro-key-in-api-call.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/change-notes/2021-05-24-hardcoded-shiro-key-in-api-call.md b/java/change-notes/2021-05-24-hardcoded-shiro-key-in-api-call.md index b89638a060b..bb9872d650c 100644 --- a/java/change-notes/2021-05-24-hardcoded-shiro-key-in-api-call.md +++ b/java/change-notes/2021-05-24-hardcoded-shiro-key-in-api-call.md @@ -1,3 +1,3 @@ lgtm,codescanning * The query "Hard-coded credential in API call" (`java/hardcoded-credential-api-call`) can now detect a hard-coded Apache Shiro cipher key. -* The query "Hard-coded credential in API call" (`java/hardcoded-credential-api-call`) now detected hard-coded credentials that are Base64 encoded or decoded before use. +* The query "Hard-coded credential in API call" (`java/hardcoded-credential-api-call`) now detects hard-coded credentials that are Base64 encoded or decoded before use. From 3d61c81456444973cfb8cc01f4447d1dde73eace Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 1 Oct 2021 00:09:22 +0000 Subject: [PATCH 671/741] Add changed framework coverage reports --- java/documentation/library-coverage/coverage.csv | 2 ++ java/documentation/library-coverage/coverage.rst | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/java/documentation/library-coverage/coverage.csv b/java/documentation/library-coverage/coverage.csv index c338b6252ac..08c55d973dd 100644 --- a/java/documentation/library-coverage/coverage.csv +++ b/java/documentation/library-coverage/coverage.csv @@ -4,6 +4,7 @@ android.database,59,,30,,,,,,,,,,,,,59,,,,,,,,30, android.net,,,60,,,,,,,,,,,,,,,,,,,,,45,15 android.util,,16,,,,,,,,,,,,,,,,,,,,,16,, android.webkit,3,2,,,,,,,,,,,,,,,,,,,3,,2,, +cn.hutool.core.codec,,,1,,,,,,,,,,,,,,,,,,,,,1, com.esotericsoftware.kryo.io,,,1,,,,,,,,,,,,,,,,,,,,,1, com.esotericsoftware.kryo5.io,,,1,,,,,,,,,,,,,,,,,,,,,1, com.fasterxml.jackson.core,,,1,,,,,,,,,,,,,,,,,,,,,1, @@ -61,6 +62,7 @@ org.apache.hc.core5.net,,,2,,,,,,,,,,,,,,,,,,,,,2, org.apache.hc.core5.util,,,24,,,,,,,,,,,,,,,,,,,,,18,6 org.apache.http,27,3,70,,,,,,,,,,,25,,,,,,,2,,3,62,8 org.apache.ibatis.jdbc,6,,,,,,,,,,,,,,,6,,,,,,,,, +org.apache.shiro.codec,,,1,,,,,,,,,,,,,,,,,,,,,1, org.apache.shiro.jndi,1,,,,,,,,,1,,,,,,,,,,,,,,, org.codehaus.groovy.control,1,,,,,1,,,,,,,,,,,,,,,,,,, org.dom4j,20,,,,,,,,,,,,,,,,,,20,,,,,, diff --git a/java/documentation/library-coverage/coverage.rst b/java/documentation/library-coverage/coverage.rst index a2c235248a1..a39dba6452b 100644 --- a/java/documentation/library-coverage/coverage.rst +++ b/java/documentation/library-coverage/coverage.rst @@ -18,6 +18,6 @@ Java framework & library support Java Standard Library,``java.*``,3,426,30,13,,,7,,,10 Java extensions,"``javax.*``, ``jakarta.*``",54,552,32,,,4,,1,1,2 `Spring `_,``org.springframework.*``,29,469,91,,,,19,14,,29 - Others,"``com.esotericsoftware.kryo.io``, ``com.esotericsoftware.kryo5.io``, ``com.fasterxml.jackson.core``, ``com.fasterxml.jackson.databind``, ``com.opensymphony.xwork2.ognl``, ``com.unboundid.ldap.sdk``, ``flexjson``, ``groovy.lang``, ``groovy.util``, ``jodd.json``, ``net.sf.saxon.s9api``, ``ognl``, ``org.apache.commons.codec``, ``org.apache.commons.jexl2``, ``org.apache.commons.jexl3``, ``org.apache.commons.ognl``, ``org.apache.directory.ldap.client.api``, ``org.apache.ibatis.jdbc``, ``org.apache.shiro.jndi``, ``org.codehaus.groovy.control``, ``org.dom4j``, ``org.hibernate``, ``org.jooq``, ``org.mvel2``, ``org.xml.sax``, ``org.xmlpull.v1``, ``play.mvc``",7,26,151,,,,14,18,, - Totals,,143,4984,408,13,6,10,107,33,1,66 + Others,"``cn.hutool.core.codec``, ``com.esotericsoftware.kryo.io``, ``com.esotericsoftware.kryo5.io``, ``com.fasterxml.jackson.core``, ``com.fasterxml.jackson.databind``, ``com.opensymphony.xwork2.ognl``, ``com.unboundid.ldap.sdk``, ``flexjson``, ``groovy.lang``, ``groovy.util``, ``jodd.json``, ``net.sf.saxon.s9api``, ``ognl``, ``org.apache.commons.codec``, ``org.apache.commons.jexl2``, ``org.apache.commons.jexl3``, ``org.apache.commons.ognl``, ``org.apache.directory.ldap.client.api``, ``org.apache.ibatis.jdbc``, ``org.apache.shiro.codec``, ``org.apache.shiro.jndi``, ``org.codehaus.groovy.control``, ``org.dom4j``, ``org.hibernate``, ``org.jooq``, ``org.mvel2``, ``org.xml.sax``, ``org.xmlpull.v1``, ``play.mvc``",7,28,151,,,,14,18,, + Totals,,143,4986,408,13,6,10,107,33,1,66 From 679b0f9b730478c576f63654706e974f5e2029dd Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Fri, 1 Oct 2021 09:40:16 +0100 Subject: [PATCH 672/741] C++: Autoformat. --- cpp/ql/lib/semmle/code/cpp/models/implementations/Recv.qll | 4 +--- cpp/ql/lib/semmle/code/cpp/models/implementations/Send.qll | 4 +--- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/models/implementations/Recv.qll b/cpp/ql/lib/semmle/code/cpp/models/implementations/Recv.qll index de4d470ce1f..0551185ba14 100644 --- a/cpp/ql/lib/semmle/code/cpp/models/implementations/Recv.qll +++ b/cpp/ql/lib/semmle/code/cpp/models/implementations/Recv.qll @@ -86,7 +86,5 @@ private class Recv extends AliasFunction, ArrayFunction, SideEffectFunction, description = "Buffer read by " + this.getName() } - override predicate hasSocketInput(FunctionInput input) { - input.isParameter(0) - } + override predicate hasSocketInput(FunctionInput input) { input.isParameter(0) } } diff --git a/cpp/ql/lib/semmle/code/cpp/models/implementations/Send.qll b/cpp/ql/lib/semmle/code/cpp/models/implementations/Send.qll index e747d8182b7..d871bad68af 100644 --- a/cpp/ql/lib/semmle/code/cpp/models/implementations/Send.qll +++ b/cpp/ql/lib/semmle/code/cpp/models/implementations/Send.qll @@ -61,7 +61,5 @@ private class Send extends AliasFunction, ArrayFunction, SideEffectFunction, Rem input.isParameterDeref(1) and description = "Buffer sent by " + this.getName() } - override predicate hasSocketInput(FunctionInput input) { - input.isParameter(0) - } + override predicate hasSocketInput(FunctionInput input) { input.isParameter(0) } } From af1b04de9cccc58c2212f76235cf3b573e88b448 Mon Sep 17 00:00:00 2001 From: Asger Feldthaus Date: Fri, 1 Oct 2021 11:42:03 +0200 Subject: [PATCH 673/741] JS: Restrict what property names that are considered public exports --- .../lib/semmle/javascript/PackageExports.qll | 31 ++++++++++++++----- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/javascript/ql/lib/semmle/javascript/PackageExports.qll b/javascript/ql/lib/semmle/javascript/PackageExports.qll index 97009adc065..17510bc214f 100644 --- a/javascript/ql/lib/semmle/javascript/PackageExports.qll +++ b/javascript/ql/lib/semmle/javascript/PackageExports.qll @@ -30,7 +30,11 @@ private DataFlow::Node getAValueExportedByPackage() { getAnExportFromModule(any(PackageJSON pack | exists(pack.getPackageName())).getMainModule()) or // module.exports.bar.baz = result; - result = getAValueExportedByPackage().(DataFlow::PropWrite).getRhs() + exists(DataFlow::PropWrite write | + write = getAValueExportedByPackage() and + write.getPropertyName() = publicPropertyName() and + result = write.getRhs() + ) or // class Foo { // bar() {} // <- result @@ -39,15 +43,15 @@ private DataFlow::Node getAValueExportedByPackage() { exists(DataFlow::SourceNode callee | callee = getAValueExportedByPackage().(DataFlow::NewNode).getCalleeNode().getALocalSource() | - result = callee.getAPropertyRead("prototype").getAPropertyWrite().getRhs() + result = callee.getAPropertyRead("prototype").getAPropertyWrite(publicPropertyName()).getRhs() or - result = callee.(DataFlow::ClassNode).getAnInstanceMethod() + result = callee.(DataFlow::ClassNode).getInstanceMethod(publicPropertyName()) ) or result = getAValueExportedByPackage().getALocalSource() or // Nested property reads. - result = getAValueExportedByPackage().(DataFlow::SourceNode).getAPropertyReference() + result = getAValueExportedByPackage().(DataFlow::SourceNode).getAPropertyReference(publicPropertyName()) or // module.exports.foo = require("./other-module.js"); exists(Module mod | @@ -62,8 +66,8 @@ private DataFlow::Node getAValueExportedByPackage() { // constructor() {} // <- result // }; exists(DataFlow::ClassNode cla | cla = getAValueExportedByPackage() | - result = cla.getAnInstanceMethod() or - result = cla.getAStaticMethod() or + result = cla.getInstanceMethod(publicPropertyName()) or + result = cla.getStaticMethod(publicPropertyName()) or result = cla.getConstructor() ) or @@ -120,7 +124,8 @@ private DataFlow::Node getAValueExportedByPackage() { or // Object.defineProperty exists(CallToObjectDefineProperty call | - [call, call.getBaseObject()] = getAValueExportedByPackage() + [call, call.getBaseObject()] = getAValueExportedByPackage() and + call.getPropertyName() = publicPropertyName() | result = call.getPropertyDescriptor().getALocalSource().getAPropertyReference("value") or @@ -164,9 +169,19 @@ private DataFlow::Node getAValueExportedByPackage() { * Gets an exported node from the module `mod`. */ private DataFlow::Node getAnExportFromModule(Module mod) { - result = mod.getAnExportedValue(_) + result = mod.getAnExportedValue(publicPropertyName()) or result = mod.getABulkExportedNode() or result.analyze().getAValue() = TAbstractModuleObject(mod) } + +/** + * Gets a property name that we consider to be public. + * + * This only allows properties whose first character is a letter or number. + */ +bindingset[result] +private string publicPropertyName() { + result.regexpMatch("[a-zA-Z0-9].*") +} From 600e5bad0d719348f3cd1ca499c60a90f7214528 Mon Sep 17 00:00:00 2001 From: Asger Feldthaus Date: Fri, 1 Oct 2021 11:46:32 +0200 Subject: [PATCH 674/741] JS: Exclude methods declared private/protected --- .../lib/semmle/javascript/PackageExports.qll | 22 +++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/javascript/ql/lib/semmle/javascript/PackageExports.qll b/javascript/ql/lib/semmle/javascript/PackageExports.qll index 17510bc214f..b8375489e15 100644 --- a/javascript/ql/lib/semmle/javascript/PackageExports.qll +++ b/javascript/ql/lib/semmle/javascript/PackageExports.qll @@ -45,7 +45,8 @@ private DataFlow::Node getAValueExportedByPackage() { | result = callee.getAPropertyRead("prototype").getAPropertyWrite(publicPropertyName()).getRhs() or - result = callee.(DataFlow::ClassNode).getInstanceMethod(publicPropertyName()) + result = callee.(DataFlow::ClassNode).getInstanceMethod(publicPropertyName()) and + not isPrivateMethodDeclaration(result) ) or result = getAValueExportedByPackage().getALocalSource() @@ -65,7 +66,10 @@ private DataFlow::Node getAValueExportedByPackage() { // static baz() {} // <- result // constructor() {} // <- result // }; - exists(DataFlow::ClassNode cla | cla = getAValueExportedByPackage() | + exists(DataFlow::ClassNode cla | + cla = getAValueExportedByPackage() and + not isPrivateMethodDeclaration(result) + | result = cla.getInstanceMethod(publicPropertyName()) or result = cla.getStaticMethod(publicPropertyName()) or result = cla.getConstructor() @@ -185,3 +189,17 @@ bindingset[result] private string publicPropertyName() { result.regexpMatch("[a-zA-Z0-9].*") } + +/** + * Holds if the given function is part of a private (or protected) method declaration. + */ +private predicate isPrivateMethodDeclaration(DataFlow::FunctionNode func) { + exists(MethodDeclaration decl | + decl.getBody() = func.getFunction() and + ( + decl.isPrivate() + or + decl.isProtected() + ) + ) +} From c8e7df79006012344452e9f9422cc6b7ebadcee6 Mon Sep 17 00:00:00 2001 From: Asger Feldthaus Date: Fri, 1 Oct 2021 12:02:40 +0200 Subject: [PATCH 675/741] JS: Add test case --- .../ql/test/library-tests/PackageExports/notPublic.ts | 11 +++++++++++ .../test/library-tests/PackageExports/tests.expected | 1 + 2 files changed, 12 insertions(+) create mode 100644 javascript/ql/test/library-tests/PackageExports/notPublic.ts diff --git a/javascript/ql/test/library-tests/PackageExports/notPublic.ts b/javascript/ql/test/library-tests/PackageExports/notPublic.ts new file mode 100644 index 00000000000..b5ca23574b1 --- /dev/null +++ b/javascript/ql/test/library-tests/PackageExports/notPublic.ts @@ -0,0 +1,11 @@ +export class PublicClass { + protected constructor(p) {} + private privateMethod(p) {} + protected protectedMethod(p) {} + _kindaPrivateMethod(p) {} + $kindaPrivateMethod(p) {} + #esPrivateMethod(p) {} + + _kindaPrivateFieldMethod = (p) => {}; + private privateFieldMethod = (p) => {}; +} diff --git a/javascript/ql/test/library-tests/PackageExports/tests.expected b/javascript/ql/test/library-tests/PackageExports/tests.expected index 1d46e149521..e4ed532c708 100644 --- a/javascript/ql/test/library-tests/PackageExports/tests.expected +++ b/javascript/ql/test/library-tests/PackageExports/tests.expected @@ -15,3 +15,4 @@ getAnExportedValue | lib1/reexport/a.js:1:1:3:1 | | reexported | lib1/reexport/a.js:2:17:2:40 | functio ... ed() {} | | lib1/reexport/b.js:1:1:6:1 | | base | lib1/reexport/b.js:4:11:4:28 | function base() {} | | lib1/reexport/b.js:1:1:6:1 | | reexported | lib1/reexport/a.js:2:17:2:40 | functio ... ed() {} | +| notPublic.ts:1:1:12:0 | | PublicClass | notPublic.ts:1:8:11:1 | class P ... > {};\\n} | From d4f1a9602fc6501cb6d3bdbf3e2f45d3d158f300 Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Fri, 1 Oct 2021 13:03:50 +0200 Subject: [PATCH 676/741] Dataflow: Force high precision of certain Contents. --- .../java/dataflow/internal/DataFlowImpl.qll | 18 +++++++++++------- .../dataflow/internal/DataFlowImplCommon.qll | 7 +++++++ .../java/dataflow/internal/DataFlowPrivate.qll | 6 ++++++ 3 files changed, 24 insertions(+), 7 deletions(-) diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl.qll index e04d3b0edc6..4ca06c93362 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl.qll @@ -2139,7 +2139,8 @@ private predicate expensiveLen2unfolding(TypedContent tc, Configuration config) ) and accessPathApproxCostLimits(apLimit, tupleLimit) and apLimit < tails and - tupleLimit < (tails - 1) * nodes + tupleLimit < (tails - 1) * nodes and + not tc.forceHighPrecision() ) } @@ -2973,12 +2974,15 @@ private AccessPathApprox getATail(AccessPathApprox apa, Configuration config) { * expected to be expensive. Holds with `unfold = true` otherwise. */ private predicate evalUnfold(AccessPathApprox apa, boolean unfold, Configuration config) { - exists(int aps, int nodes, int apLimit, int tupleLimit | - aps = countPotentialAps(apa, config) and - nodes = countNodesUsingAccessPath(apa, config) and - accessPathCostLimits(apLimit, tupleLimit) and - if apLimit < aps and tupleLimit < (aps - 1) * nodes then unfold = false else unfold = true - ) + if apa.getHead().forceHighPrecision() + then unfold = true + else + exists(int aps, int nodes, int apLimit, int tupleLimit | + aps = countPotentialAps(apa, config) and + nodes = countNodesUsingAccessPath(apa, config) and + accessPathCostLimits(apLimit, tupleLimit) and + if apLimit < aps and tupleLimit < (aps - 1) * nodes then unfold = false else unfold = true + ) } /** diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplCommon.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplCommon.qll index f588a25a176..e8ebb3f5e96 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplCommon.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplCommon.qll @@ -1236,6 +1236,13 @@ class TypedContent extends MkTypedContent { /** Gets a textual representation of this content. */ string toString() { result = c.toString() } + + /** + * Holds if accesspaths with this `TypedContent` at their head always should + * be tracked at high precision. This disables adaptive accesspath precision + * for such accesspaths. + */ + predicate forceHighPrecision() { forceHighPrecision(c) } } /** diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowPrivate.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowPrivate.qll index 1d24e027869..a2bc204591d 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowPrivate.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowPrivate.qll @@ -308,6 +308,12 @@ predicate isUnreachableInCall(Node n, DataFlowCall call) { int accessPathLimit() { result = 5 } +/** + * Holds if accesspaths with `c` at their head always should be tracked at high + * precision. This disables adaptive accesspath precision for such accesspaths. + */ +predicate forceHighPrecision(Content c) { c instanceof ArrayContent or c instanceof CollectionContent } + /** * Holds if `n` does not require a `PostUpdateNode` as it either cannot be * modified or its modification cannot be observed, for example if it is a From 490df2027be9a6c80a7ee0c93ff58f9589c7ee2f Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Fri, 1 Oct 2021 13:11:14 +0200 Subject: [PATCH 677/741] Dataflow: Add language-specific predicate forceHighPrecision(). --- .../semmle/code/cpp/dataflow/internal/DataFlowPrivate.qll | 6 ++++++ .../code/cpp/ir/dataflow/internal/DataFlowPrivate.qll | 6 ++++++ .../code/csharp/dataflow/internal/DataFlowPrivate.qll | 6 ++++++ .../semmle/python/dataflow/new/internal/DataFlowPrivate.qll | 6 ++++++ 4 files changed, 24 insertions(+) diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowPrivate.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowPrivate.qll index e64f8277528..338aa73ce86 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowPrivate.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowPrivate.qll @@ -240,6 +240,12 @@ predicate isUnreachableInCall(Node n, DataFlowCall call) { none() } // stub impl int accessPathLimit() { result = 5 } +/** + * Holds if accesspaths with `c` at their head always should be tracked at high + * precision. This disables adaptive accesspath precision for such accesspaths. + */ +predicate forceHighPrecision(Content c) { none() } + /** The unit type. */ private newtype TUnit = TMkUnit() diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowPrivate.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowPrivate.qll index 73bf72a3643..945ee2766fb 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowPrivate.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowPrivate.qll @@ -466,6 +466,12 @@ predicate isUnreachableInCall(Node n, DataFlowCall call) { none() } // stub impl int accessPathLimit() { result = 5 } +/** + * Holds if accesspaths with `c` at their head always should be tracked at high + * precision. This disables adaptive accesspath precision for such accesspaths. + */ +predicate forceHighPrecision(Content c) { none() } + /** The unit type. */ private newtype TUnit = TMkUnit() diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll index ca4d0fa98e7..a164008e402 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll @@ -1918,6 +1918,12 @@ private predicate viableConstantBooleanParamArg( int accessPathLimit() { result = 5 } +/** + * Holds if accesspaths with `c` at their head always should be tracked at high + * precision. This disables adaptive accesspath precision for such accesspaths. + */ +predicate forceHighPrecision(Content c) { c instanceof ElementContent } + /** The unit type. */ private newtype TUnit = TMkUnit() diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll index 44c64234b75..7c662b6249a 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll @@ -1620,6 +1620,12 @@ predicate isImmutableOrUnobservable(Node n) { none() } int accessPathLimit() { result = 5 } +/** + * Holds if accesspaths with `c` at their head always should be tracked at high + * precision. This disables adaptive accesspath precision for such accesspaths. + */ +predicate forceHighPrecision(Content c) { none() } + /** Holds if `n` should be hidden from path explanations. */ predicate nodeIsHidden(Node n) { none() } From 98f68cb053bdb4f9ad6999113b42627e6f111712 Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Fri, 1 Oct 2021 13:11:43 +0200 Subject: [PATCH 678/741] Dataflow: Sync. --- .../cpp/dataflow/internal/DataFlowImpl.qll | 18 +++++++++++------- .../cpp/dataflow/internal/DataFlowImpl2.qll | 18 +++++++++++------- .../cpp/dataflow/internal/DataFlowImpl3.qll | 18 +++++++++++------- .../cpp/dataflow/internal/DataFlowImpl4.qll | 18 +++++++++++------- .../dataflow/internal/DataFlowImplCommon.qll | 7 +++++++ .../dataflow/internal/DataFlowImplLocal.qll | 18 +++++++++++------- .../cpp/ir/dataflow/internal/DataFlowImpl.qll | 18 +++++++++++------- .../cpp/ir/dataflow/internal/DataFlowImpl2.qll | 18 +++++++++++------- .../cpp/ir/dataflow/internal/DataFlowImpl3.qll | 18 +++++++++++------- .../cpp/ir/dataflow/internal/DataFlowImpl4.qll | 18 +++++++++++------- .../dataflow/internal/DataFlowImplCommon.qll | 7 +++++++ .../csharp/dataflow/internal/DataFlowImpl.qll | 18 +++++++++++------- .../csharp/dataflow/internal/DataFlowImpl2.qll | 18 +++++++++++------- .../csharp/dataflow/internal/DataFlowImpl3.qll | 18 +++++++++++------- .../csharp/dataflow/internal/DataFlowImpl4.qll | 18 +++++++++++------- .../csharp/dataflow/internal/DataFlowImpl5.qll | 18 +++++++++++------- .../dataflow/internal/DataFlowImplCommon.qll | 7 +++++++ .../java/dataflow/internal/DataFlowImpl2.qll | 18 +++++++++++------- .../java/dataflow/internal/DataFlowImpl3.qll | 18 +++++++++++------- .../java/dataflow/internal/DataFlowImpl4.qll | 18 +++++++++++------- .../java/dataflow/internal/DataFlowImpl5.qll | 18 +++++++++++------- .../java/dataflow/internal/DataFlowImpl6.qll | 18 +++++++++++------- .../DataFlowImplForSerializability.qll | 18 +++++++++++------- .../dataflow/new/internal/DataFlowImpl.qll | 18 +++++++++++------- .../dataflow/new/internal/DataFlowImpl2.qll | 18 +++++++++++------- .../dataflow/new/internal/DataFlowImpl3.qll | 18 +++++++++++------- .../dataflow/new/internal/DataFlowImpl4.qll | 18 +++++++++++------- .../new/internal/DataFlowImplCommon.qll | 7 +++++++ 28 files changed, 292 insertions(+), 168 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl.qll index e04d3b0edc6..4ca06c93362 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl.qll @@ -2139,7 +2139,8 @@ private predicate expensiveLen2unfolding(TypedContent tc, Configuration config) ) and accessPathApproxCostLimits(apLimit, tupleLimit) and apLimit < tails and - tupleLimit < (tails - 1) * nodes + tupleLimit < (tails - 1) * nodes and + not tc.forceHighPrecision() ) } @@ -2973,12 +2974,15 @@ private AccessPathApprox getATail(AccessPathApprox apa, Configuration config) { * expected to be expensive. Holds with `unfold = true` otherwise. */ private predicate evalUnfold(AccessPathApprox apa, boolean unfold, Configuration config) { - exists(int aps, int nodes, int apLimit, int tupleLimit | - aps = countPotentialAps(apa, config) and - nodes = countNodesUsingAccessPath(apa, config) and - accessPathCostLimits(apLimit, tupleLimit) and - if apLimit < aps and tupleLimit < (aps - 1) * nodes then unfold = false else unfold = true - ) + if apa.getHead().forceHighPrecision() + then unfold = true + else + exists(int aps, int nodes, int apLimit, int tupleLimit | + aps = countPotentialAps(apa, config) and + nodes = countNodesUsingAccessPath(apa, config) and + accessPathCostLimits(apLimit, tupleLimit) and + if apLimit < aps and tupleLimit < (aps - 1) * nodes then unfold = false else unfold = true + ) } /** diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl2.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl2.qll index e04d3b0edc6..4ca06c93362 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl2.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl2.qll @@ -2139,7 +2139,8 @@ private predicate expensiveLen2unfolding(TypedContent tc, Configuration config) ) and accessPathApproxCostLimits(apLimit, tupleLimit) and apLimit < tails and - tupleLimit < (tails - 1) * nodes + tupleLimit < (tails - 1) * nodes and + not tc.forceHighPrecision() ) } @@ -2973,12 +2974,15 @@ private AccessPathApprox getATail(AccessPathApprox apa, Configuration config) { * expected to be expensive. Holds with `unfold = true` otherwise. */ private predicate evalUnfold(AccessPathApprox apa, boolean unfold, Configuration config) { - exists(int aps, int nodes, int apLimit, int tupleLimit | - aps = countPotentialAps(apa, config) and - nodes = countNodesUsingAccessPath(apa, config) and - accessPathCostLimits(apLimit, tupleLimit) and - if apLimit < aps and tupleLimit < (aps - 1) * nodes then unfold = false else unfold = true - ) + if apa.getHead().forceHighPrecision() + then unfold = true + else + exists(int aps, int nodes, int apLimit, int tupleLimit | + aps = countPotentialAps(apa, config) and + nodes = countNodesUsingAccessPath(apa, config) and + accessPathCostLimits(apLimit, tupleLimit) and + if apLimit < aps and tupleLimit < (aps - 1) * nodes then unfold = false else unfold = true + ) } /** diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl3.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl3.qll index e04d3b0edc6..4ca06c93362 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl3.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl3.qll @@ -2139,7 +2139,8 @@ private predicate expensiveLen2unfolding(TypedContent tc, Configuration config) ) and accessPathApproxCostLimits(apLimit, tupleLimit) and apLimit < tails and - tupleLimit < (tails - 1) * nodes + tupleLimit < (tails - 1) * nodes and + not tc.forceHighPrecision() ) } @@ -2973,12 +2974,15 @@ private AccessPathApprox getATail(AccessPathApprox apa, Configuration config) { * expected to be expensive. Holds with `unfold = true` otherwise. */ private predicate evalUnfold(AccessPathApprox apa, boolean unfold, Configuration config) { - exists(int aps, int nodes, int apLimit, int tupleLimit | - aps = countPotentialAps(apa, config) and - nodes = countNodesUsingAccessPath(apa, config) and - accessPathCostLimits(apLimit, tupleLimit) and - if apLimit < aps and tupleLimit < (aps - 1) * nodes then unfold = false else unfold = true - ) + if apa.getHead().forceHighPrecision() + then unfold = true + else + exists(int aps, int nodes, int apLimit, int tupleLimit | + aps = countPotentialAps(apa, config) and + nodes = countNodesUsingAccessPath(apa, config) and + accessPathCostLimits(apLimit, tupleLimit) and + if apLimit < aps and tupleLimit < (aps - 1) * nodes then unfold = false else unfold = true + ) } /** diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl4.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl4.qll index e04d3b0edc6..4ca06c93362 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl4.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl4.qll @@ -2139,7 +2139,8 @@ private predicate expensiveLen2unfolding(TypedContent tc, Configuration config) ) and accessPathApproxCostLimits(apLimit, tupleLimit) and apLimit < tails and - tupleLimit < (tails - 1) * nodes + tupleLimit < (tails - 1) * nodes and + not tc.forceHighPrecision() ) } @@ -2973,12 +2974,15 @@ private AccessPathApprox getATail(AccessPathApprox apa, Configuration config) { * expected to be expensive. Holds with `unfold = true` otherwise. */ private predicate evalUnfold(AccessPathApprox apa, boolean unfold, Configuration config) { - exists(int aps, int nodes, int apLimit, int tupleLimit | - aps = countPotentialAps(apa, config) and - nodes = countNodesUsingAccessPath(apa, config) and - accessPathCostLimits(apLimit, tupleLimit) and - if apLimit < aps and tupleLimit < (aps - 1) * nodes then unfold = false else unfold = true - ) + if apa.getHead().forceHighPrecision() + then unfold = true + else + exists(int aps, int nodes, int apLimit, int tupleLimit | + aps = countPotentialAps(apa, config) and + nodes = countNodesUsingAccessPath(apa, config) and + accessPathCostLimits(apLimit, tupleLimit) and + if apLimit < aps and tupleLimit < (aps - 1) * nodes then unfold = false else unfold = true + ) } /** diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplCommon.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplCommon.qll index f588a25a176..e8ebb3f5e96 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplCommon.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplCommon.qll @@ -1236,6 +1236,13 @@ class TypedContent extends MkTypedContent { /** Gets a textual representation of this content. */ string toString() { result = c.toString() } + + /** + * Holds if accesspaths with this `TypedContent` at their head always should + * be tracked at high precision. This disables adaptive accesspath precision + * for such accesspaths. + */ + predicate forceHighPrecision() { forceHighPrecision(c) } } /** diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplLocal.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplLocal.qll index e04d3b0edc6..4ca06c93362 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplLocal.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplLocal.qll @@ -2139,7 +2139,8 @@ private predicate expensiveLen2unfolding(TypedContent tc, Configuration config) ) and accessPathApproxCostLimits(apLimit, tupleLimit) and apLimit < tails and - tupleLimit < (tails - 1) * nodes + tupleLimit < (tails - 1) * nodes and + not tc.forceHighPrecision() ) } @@ -2973,12 +2974,15 @@ private AccessPathApprox getATail(AccessPathApprox apa, Configuration config) { * expected to be expensive. Holds with `unfold = true` otherwise. */ private predicate evalUnfold(AccessPathApprox apa, boolean unfold, Configuration config) { - exists(int aps, int nodes, int apLimit, int tupleLimit | - aps = countPotentialAps(apa, config) and - nodes = countNodesUsingAccessPath(apa, config) and - accessPathCostLimits(apLimit, tupleLimit) and - if apLimit < aps and tupleLimit < (aps - 1) * nodes then unfold = false else unfold = true - ) + if apa.getHead().forceHighPrecision() + then unfold = true + else + exists(int aps, int nodes, int apLimit, int tupleLimit | + aps = countPotentialAps(apa, config) and + nodes = countNodesUsingAccessPath(apa, config) and + accessPathCostLimits(apLimit, tupleLimit) and + if apLimit < aps and tupleLimit < (aps - 1) * nodes then unfold = false else unfold = true + ) } /** diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl.qll index e04d3b0edc6..4ca06c93362 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl.qll @@ -2139,7 +2139,8 @@ private predicate expensiveLen2unfolding(TypedContent tc, Configuration config) ) and accessPathApproxCostLimits(apLimit, tupleLimit) and apLimit < tails and - tupleLimit < (tails - 1) * nodes + tupleLimit < (tails - 1) * nodes and + not tc.forceHighPrecision() ) } @@ -2973,12 +2974,15 @@ private AccessPathApprox getATail(AccessPathApprox apa, Configuration config) { * expected to be expensive. Holds with `unfold = true` otherwise. */ private predicate evalUnfold(AccessPathApprox apa, boolean unfold, Configuration config) { - exists(int aps, int nodes, int apLimit, int tupleLimit | - aps = countPotentialAps(apa, config) and - nodes = countNodesUsingAccessPath(apa, config) and - accessPathCostLimits(apLimit, tupleLimit) and - if apLimit < aps and tupleLimit < (aps - 1) * nodes then unfold = false else unfold = true - ) + if apa.getHead().forceHighPrecision() + then unfold = true + else + exists(int aps, int nodes, int apLimit, int tupleLimit | + aps = countPotentialAps(apa, config) and + nodes = countNodesUsingAccessPath(apa, config) and + accessPathCostLimits(apLimit, tupleLimit) and + if apLimit < aps and tupleLimit < (aps - 1) * nodes then unfold = false else unfold = true + ) } /** diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl2.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl2.qll index e04d3b0edc6..4ca06c93362 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl2.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl2.qll @@ -2139,7 +2139,8 @@ private predicate expensiveLen2unfolding(TypedContent tc, Configuration config) ) and accessPathApproxCostLimits(apLimit, tupleLimit) and apLimit < tails and - tupleLimit < (tails - 1) * nodes + tupleLimit < (tails - 1) * nodes and + not tc.forceHighPrecision() ) } @@ -2973,12 +2974,15 @@ private AccessPathApprox getATail(AccessPathApprox apa, Configuration config) { * expected to be expensive. Holds with `unfold = true` otherwise. */ private predicate evalUnfold(AccessPathApprox apa, boolean unfold, Configuration config) { - exists(int aps, int nodes, int apLimit, int tupleLimit | - aps = countPotentialAps(apa, config) and - nodes = countNodesUsingAccessPath(apa, config) and - accessPathCostLimits(apLimit, tupleLimit) and - if apLimit < aps and tupleLimit < (aps - 1) * nodes then unfold = false else unfold = true - ) + if apa.getHead().forceHighPrecision() + then unfold = true + else + exists(int aps, int nodes, int apLimit, int tupleLimit | + aps = countPotentialAps(apa, config) and + nodes = countNodesUsingAccessPath(apa, config) and + accessPathCostLimits(apLimit, tupleLimit) and + if apLimit < aps and tupleLimit < (aps - 1) * nodes then unfold = false else unfold = true + ) } /** diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl3.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl3.qll index e04d3b0edc6..4ca06c93362 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl3.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl3.qll @@ -2139,7 +2139,8 @@ private predicate expensiveLen2unfolding(TypedContent tc, Configuration config) ) and accessPathApproxCostLimits(apLimit, tupleLimit) and apLimit < tails and - tupleLimit < (tails - 1) * nodes + tupleLimit < (tails - 1) * nodes and + not tc.forceHighPrecision() ) } @@ -2973,12 +2974,15 @@ private AccessPathApprox getATail(AccessPathApprox apa, Configuration config) { * expected to be expensive. Holds with `unfold = true` otherwise. */ private predicate evalUnfold(AccessPathApprox apa, boolean unfold, Configuration config) { - exists(int aps, int nodes, int apLimit, int tupleLimit | - aps = countPotentialAps(apa, config) and - nodes = countNodesUsingAccessPath(apa, config) and - accessPathCostLimits(apLimit, tupleLimit) and - if apLimit < aps and tupleLimit < (aps - 1) * nodes then unfold = false else unfold = true - ) + if apa.getHead().forceHighPrecision() + then unfold = true + else + exists(int aps, int nodes, int apLimit, int tupleLimit | + aps = countPotentialAps(apa, config) and + nodes = countNodesUsingAccessPath(apa, config) and + accessPathCostLimits(apLimit, tupleLimit) and + if apLimit < aps and tupleLimit < (aps - 1) * nodes then unfold = false else unfold = true + ) } /** diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl4.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl4.qll index e04d3b0edc6..4ca06c93362 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl4.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl4.qll @@ -2139,7 +2139,8 @@ private predicate expensiveLen2unfolding(TypedContent tc, Configuration config) ) and accessPathApproxCostLimits(apLimit, tupleLimit) and apLimit < tails and - tupleLimit < (tails - 1) * nodes + tupleLimit < (tails - 1) * nodes and + not tc.forceHighPrecision() ) } @@ -2973,12 +2974,15 @@ private AccessPathApprox getATail(AccessPathApprox apa, Configuration config) { * expected to be expensive. Holds with `unfold = true` otherwise. */ private predicate evalUnfold(AccessPathApprox apa, boolean unfold, Configuration config) { - exists(int aps, int nodes, int apLimit, int tupleLimit | - aps = countPotentialAps(apa, config) and - nodes = countNodesUsingAccessPath(apa, config) and - accessPathCostLimits(apLimit, tupleLimit) and - if apLimit < aps and tupleLimit < (aps - 1) * nodes then unfold = false else unfold = true - ) + if apa.getHead().forceHighPrecision() + then unfold = true + else + exists(int aps, int nodes, int apLimit, int tupleLimit | + aps = countPotentialAps(apa, config) and + nodes = countNodesUsingAccessPath(apa, config) and + accessPathCostLimits(apLimit, tupleLimit) and + if apLimit < aps and tupleLimit < (aps - 1) * nodes then unfold = false else unfold = true + ) } /** diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImplCommon.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImplCommon.qll index f588a25a176..e8ebb3f5e96 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImplCommon.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImplCommon.qll @@ -1236,6 +1236,13 @@ class TypedContent extends MkTypedContent { /** Gets a textual representation of this content. */ string toString() { result = c.toString() } + + /** + * Holds if accesspaths with this `TypedContent` at their head always should + * be tracked at high precision. This disables adaptive accesspath precision + * for such accesspaths. + */ + predicate forceHighPrecision() { forceHighPrecision(c) } } /** diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl.qll index e04d3b0edc6..4ca06c93362 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl.qll @@ -2139,7 +2139,8 @@ private predicate expensiveLen2unfolding(TypedContent tc, Configuration config) ) and accessPathApproxCostLimits(apLimit, tupleLimit) and apLimit < tails and - tupleLimit < (tails - 1) * nodes + tupleLimit < (tails - 1) * nodes and + not tc.forceHighPrecision() ) } @@ -2973,12 +2974,15 @@ private AccessPathApprox getATail(AccessPathApprox apa, Configuration config) { * expected to be expensive. Holds with `unfold = true` otherwise. */ private predicate evalUnfold(AccessPathApprox apa, boolean unfold, Configuration config) { - exists(int aps, int nodes, int apLimit, int tupleLimit | - aps = countPotentialAps(apa, config) and - nodes = countNodesUsingAccessPath(apa, config) and - accessPathCostLimits(apLimit, tupleLimit) and - if apLimit < aps and tupleLimit < (aps - 1) * nodes then unfold = false else unfold = true - ) + if apa.getHead().forceHighPrecision() + then unfold = true + else + exists(int aps, int nodes, int apLimit, int tupleLimit | + aps = countPotentialAps(apa, config) and + nodes = countNodesUsingAccessPath(apa, config) and + accessPathCostLimits(apLimit, tupleLimit) and + if apLimit < aps and tupleLimit < (aps - 1) * nodes then unfold = false else unfold = true + ) } /** diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl2.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl2.qll index e04d3b0edc6..4ca06c93362 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl2.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl2.qll @@ -2139,7 +2139,8 @@ private predicate expensiveLen2unfolding(TypedContent tc, Configuration config) ) and accessPathApproxCostLimits(apLimit, tupleLimit) and apLimit < tails and - tupleLimit < (tails - 1) * nodes + tupleLimit < (tails - 1) * nodes and + not tc.forceHighPrecision() ) } @@ -2973,12 +2974,15 @@ private AccessPathApprox getATail(AccessPathApprox apa, Configuration config) { * expected to be expensive. Holds with `unfold = true` otherwise. */ private predicate evalUnfold(AccessPathApprox apa, boolean unfold, Configuration config) { - exists(int aps, int nodes, int apLimit, int tupleLimit | - aps = countPotentialAps(apa, config) and - nodes = countNodesUsingAccessPath(apa, config) and - accessPathCostLimits(apLimit, tupleLimit) and - if apLimit < aps and tupleLimit < (aps - 1) * nodes then unfold = false else unfold = true - ) + if apa.getHead().forceHighPrecision() + then unfold = true + else + exists(int aps, int nodes, int apLimit, int tupleLimit | + aps = countPotentialAps(apa, config) and + nodes = countNodesUsingAccessPath(apa, config) and + accessPathCostLimits(apLimit, tupleLimit) and + if apLimit < aps and tupleLimit < (aps - 1) * nodes then unfold = false else unfold = true + ) } /** diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl3.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl3.qll index e04d3b0edc6..4ca06c93362 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl3.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl3.qll @@ -2139,7 +2139,8 @@ private predicate expensiveLen2unfolding(TypedContent tc, Configuration config) ) and accessPathApproxCostLimits(apLimit, tupleLimit) and apLimit < tails and - tupleLimit < (tails - 1) * nodes + tupleLimit < (tails - 1) * nodes and + not tc.forceHighPrecision() ) } @@ -2973,12 +2974,15 @@ private AccessPathApprox getATail(AccessPathApprox apa, Configuration config) { * expected to be expensive. Holds with `unfold = true` otherwise. */ private predicate evalUnfold(AccessPathApprox apa, boolean unfold, Configuration config) { - exists(int aps, int nodes, int apLimit, int tupleLimit | - aps = countPotentialAps(apa, config) and - nodes = countNodesUsingAccessPath(apa, config) and - accessPathCostLimits(apLimit, tupleLimit) and - if apLimit < aps and tupleLimit < (aps - 1) * nodes then unfold = false else unfold = true - ) + if apa.getHead().forceHighPrecision() + then unfold = true + else + exists(int aps, int nodes, int apLimit, int tupleLimit | + aps = countPotentialAps(apa, config) and + nodes = countNodesUsingAccessPath(apa, config) and + accessPathCostLimits(apLimit, tupleLimit) and + if apLimit < aps and tupleLimit < (aps - 1) * nodes then unfold = false else unfold = true + ) } /** diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl4.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl4.qll index e04d3b0edc6..4ca06c93362 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl4.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl4.qll @@ -2139,7 +2139,8 @@ private predicate expensiveLen2unfolding(TypedContent tc, Configuration config) ) and accessPathApproxCostLimits(apLimit, tupleLimit) and apLimit < tails and - tupleLimit < (tails - 1) * nodes + tupleLimit < (tails - 1) * nodes and + not tc.forceHighPrecision() ) } @@ -2973,12 +2974,15 @@ private AccessPathApprox getATail(AccessPathApprox apa, Configuration config) { * expected to be expensive. Holds with `unfold = true` otherwise. */ private predicate evalUnfold(AccessPathApprox apa, boolean unfold, Configuration config) { - exists(int aps, int nodes, int apLimit, int tupleLimit | - aps = countPotentialAps(apa, config) and - nodes = countNodesUsingAccessPath(apa, config) and - accessPathCostLimits(apLimit, tupleLimit) and - if apLimit < aps and tupleLimit < (aps - 1) * nodes then unfold = false else unfold = true - ) + if apa.getHead().forceHighPrecision() + then unfold = true + else + exists(int aps, int nodes, int apLimit, int tupleLimit | + aps = countPotentialAps(apa, config) and + nodes = countNodesUsingAccessPath(apa, config) and + accessPathCostLimits(apLimit, tupleLimit) and + if apLimit < aps and tupleLimit < (aps - 1) * nodes then unfold = false else unfold = true + ) } /** diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl5.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl5.qll index e04d3b0edc6..4ca06c93362 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl5.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl5.qll @@ -2139,7 +2139,8 @@ private predicate expensiveLen2unfolding(TypedContent tc, Configuration config) ) and accessPathApproxCostLimits(apLimit, tupleLimit) and apLimit < tails and - tupleLimit < (tails - 1) * nodes + tupleLimit < (tails - 1) * nodes and + not tc.forceHighPrecision() ) } @@ -2973,12 +2974,15 @@ private AccessPathApprox getATail(AccessPathApprox apa, Configuration config) { * expected to be expensive. Holds with `unfold = true` otherwise. */ private predicate evalUnfold(AccessPathApprox apa, boolean unfold, Configuration config) { - exists(int aps, int nodes, int apLimit, int tupleLimit | - aps = countPotentialAps(apa, config) and - nodes = countNodesUsingAccessPath(apa, config) and - accessPathCostLimits(apLimit, tupleLimit) and - if apLimit < aps and tupleLimit < (aps - 1) * nodes then unfold = false else unfold = true - ) + if apa.getHead().forceHighPrecision() + then unfold = true + else + exists(int aps, int nodes, int apLimit, int tupleLimit | + aps = countPotentialAps(apa, config) and + nodes = countNodesUsingAccessPath(apa, config) and + accessPathCostLimits(apLimit, tupleLimit) and + if apLimit < aps and tupleLimit < (aps - 1) * nodes then unfold = false else unfold = true + ) } /** diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImplCommon.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImplCommon.qll index f588a25a176..e8ebb3f5e96 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImplCommon.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImplCommon.qll @@ -1236,6 +1236,13 @@ class TypedContent extends MkTypedContent { /** Gets a textual representation of this content. */ string toString() { result = c.toString() } + + /** + * Holds if accesspaths with this `TypedContent` at their head always should + * be tracked at high precision. This disables adaptive accesspath precision + * for such accesspaths. + */ + predicate forceHighPrecision() { forceHighPrecision(c) } } /** diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl2.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl2.qll index e04d3b0edc6..4ca06c93362 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl2.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl2.qll @@ -2139,7 +2139,8 @@ private predicate expensiveLen2unfolding(TypedContent tc, Configuration config) ) and accessPathApproxCostLimits(apLimit, tupleLimit) and apLimit < tails and - tupleLimit < (tails - 1) * nodes + tupleLimit < (tails - 1) * nodes and + not tc.forceHighPrecision() ) } @@ -2973,12 +2974,15 @@ private AccessPathApprox getATail(AccessPathApprox apa, Configuration config) { * expected to be expensive. Holds with `unfold = true` otherwise. */ private predicate evalUnfold(AccessPathApprox apa, boolean unfold, Configuration config) { - exists(int aps, int nodes, int apLimit, int tupleLimit | - aps = countPotentialAps(apa, config) and - nodes = countNodesUsingAccessPath(apa, config) and - accessPathCostLimits(apLimit, tupleLimit) and - if apLimit < aps and tupleLimit < (aps - 1) * nodes then unfold = false else unfold = true - ) + if apa.getHead().forceHighPrecision() + then unfold = true + else + exists(int aps, int nodes, int apLimit, int tupleLimit | + aps = countPotentialAps(apa, config) and + nodes = countNodesUsingAccessPath(apa, config) and + accessPathCostLimits(apLimit, tupleLimit) and + if apLimit < aps and tupleLimit < (aps - 1) * nodes then unfold = false else unfold = true + ) } /** diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl3.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl3.qll index e04d3b0edc6..4ca06c93362 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl3.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl3.qll @@ -2139,7 +2139,8 @@ private predicate expensiveLen2unfolding(TypedContent tc, Configuration config) ) and accessPathApproxCostLimits(apLimit, tupleLimit) and apLimit < tails and - tupleLimit < (tails - 1) * nodes + tupleLimit < (tails - 1) * nodes and + not tc.forceHighPrecision() ) } @@ -2973,12 +2974,15 @@ private AccessPathApprox getATail(AccessPathApprox apa, Configuration config) { * expected to be expensive. Holds with `unfold = true` otherwise. */ private predicate evalUnfold(AccessPathApprox apa, boolean unfold, Configuration config) { - exists(int aps, int nodes, int apLimit, int tupleLimit | - aps = countPotentialAps(apa, config) and - nodes = countNodesUsingAccessPath(apa, config) and - accessPathCostLimits(apLimit, tupleLimit) and - if apLimit < aps and tupleLimit < (aps - 1) * nodes then unfold = false else unfold = true - ) + if apa.getHead().forceHighPrecision() + then unfold = true + else + exists(int aps, int nodes, int apLimit, int tupleLimit | + aps = countPotentialAps(apa, config) and + nodes = countNodesUsingAccessPath(apa, config) and + accessPathCostLimits(apLimit, tupleLimit) and + if apLimit < aps and tupleLimit < (aps - 1) * nodes then unfold = false else unfold = true + ) } /** diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl4.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl4.qll index e04d3b0edc6..4ca06c93362 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl4.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl4.qll @@ -2139,7 +2139,8 @@ private predicate expensiveLen2unfolding(TypedContent tc, Configuration config) ) and accessPathApproxCostLimits(apLimit, tupleLimit) and apLimit < tails and - tupleLimit < (tails - 1) * nodes + tupleLimit < (tails - 1) * nodes and + not tc.forceHighPrecision() ) } @@ -2973,12 +2974,15 @@ private AccessPathApprox getATail(AccessPathApprox apa, Configuration config) { * expected to be expensive. Holds with `unfold = true` otherwise. */ private predicate evalUnfold(AccessPathApprox apa, boolean unfold, Configuration config) { - exists(int aps, int nodes, int apLimit, int tupleLimit | - aps = countPotentialAps(apa, config) and - nodes = countNodesUsingAccessPath(apa, config) and - accessPathCostLimits(apLimit, tupleLimit) and - if apLimit < aps and tupleLimit < (aps - 1) * nodes then unfold = false else unfold = true - ) + if apa.getHead().forceHighPrecision() + then unfold = true + else + exists(int aps, int nodes, int apLimit, int tupleLimit | + aps = countPotentialAps(apa, config) and + nodes = countNodesUsingAccessPath(apa, config) and + accessPathCostLimits(apLimit, tupleLimit) and + if apLimit < aps and tupleLimit < (aps - 1) * nodes then unfold = false else unfold = true + ) } /** diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl5.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl5.qll index e04d3b0edc6..4ca06c93362 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl5.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl5.qll @@ -2139,7 +2139,8 @@ private predicate expensiveLen2unfolding(TypedContent tc, Configuration config) ) and accessPathApproxCostLimits(apLimit, tupleLimit) and apLimit < tails and - tupleLimit < (tails - 1) * nodes + tupleLimit < (tails - 1) * nodes and + not tc.forceHighPrecision() ) } @@ -2973,12 +2974,15 @@ private AccessPathApprox getATail(AccessPathApprox apa, Configuration config) { * expected to be expensive. Holds with `unfold = true` otherwise. */ private predicate evalUnfold(AccessPathApprox apa, boolean unfold, Configuration config) { - exists(int aps, int nodes, int apLimit, int tupleLimit | - aps = countPotentialAps(apa, config) and - nodes = countNodesUsingAccessPath(apa, config) and - accessPathCostLimits(apLimit, tupleLimit) and - if apLimit < aps and tupleLimit < (aps - 1) * nodes then unfold = false else unfold = true - ) + if apa.getHead().forceHighPrecision() + then unfold = true + else + exists(int aps, int nodes, int apLimit, int tupleLimit | + aps = countPotentialAps(apa, config) and + nodes = countNodesUsingAccessPath(apa, config) and + accessPathCostLimits(apLimit, tupleLimit) and + if apLimit < aps and tupleLimit < (aps - 1) * nodes then unfold = false else unfold = true + ) } /** diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl6.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl6.qll index e04d3b0edc6..4ca06c93362 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl6.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl6.qll @@ -2139,7 +2139,8 @@ private predicate expensiveLen2unfolding(TypedContent tc, Configuration config) ) and accessPathApproxCostLimits(apLimit, tupleLimit) and apLimit < tails and - tupleLimit < (tails - 1) * nodes + tupleLimit < (tails - 1) * nodes and + not tc.forceHighPrecision() ) } @@ -2973,12 +2974,15 @@ private AccessPathApprox getATail(AccessPathApprox apa, Configuration config) { * expected to be expensive. Holds with `unfold = true` otherwise. */ private predicate evalUnfold(AccessPathApprox apa, boolean unfold, Configuration config) { - exists(int aps, int nodes, int apLimit, int tupleLimit | - aps = countPotentialAps(apa, config) and - nodes = countNodesUsingAccessPath(apa, config) and - accessPathCostLimits(apLimit, tupleLimit) and - if apLimit < aps and tupleLimit < (aps - 1) * nodes then unfold = false else unfold = true - ) + if apa.getHead().forceHighPrecision() + then unfold = true + else + exists(int aps, int nodes, int apLimit, int tupleLimit | + aps = countPotentialAps(apa, config) and + nodes = countNodesUsingAccessPath(apa, config) and + accessPathCostLimits(apLimit, tupleLimit) and + if apLimit < aps and tupleLimit < (aps - 1) * nodes then unfold = false else unfold = true + ) } /** diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplForSerializability.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplForSerializability.qll index e04d3b0edc6..4ca06c93362 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplForSerializability.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplForSerializability.qll @@ -2139,7 +2139,8 @@ private predicate expensiveLen2unfolding(TypedContent tc, Configuration config) ) and accessPathApproxCostLimits(apLimit, tupleLimit) and apLimit < tails and - tupleLimit < (tails - 1) * nodes + tupleLimit < (tails - 1) * nodes and + not tc.forceHighPrecision() ) } @@ -2973,12 +2974,15 @@ private AccessPathApprox getATail(AccessPathApprox apa, Configuration config) { * expected to be expensive. Holds with `unfold = true` otherwise. */ private predicate evalUnfold(AccessPathApprox apa, boolean unfold, Configuration config) { - exists(int aps, int nodes, int apLimit, int tupleLimit | - aps = countPotentialAps(apa, config) and - nodes = countNodesUsingAccessPath(apa, config) and - accessPathCostLimits(apLimit, tupleLimit) and - if apLimit < aps and tupleLimit < (aps - 1) * nodes then unfold = false else unfold = true - ) + if apa.getHead().forceHighPrecision() + then unfold = true + else + exists(int aps, int nodes, int apLimit, int tupleLimit | + aps = countPotentialAps(apa, config) and + nodes = countNodesUsingAccessPath(apa, config) and + accessPathCostLimits(apLimit, tupleLimit) and + if apLimit < aps and tupleLimit < (aps - 1) * nodes then unfold = false else unfold = true + ) } /** diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl.qll index e04d3b0edc6..4ca06c93362 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl.qll @@ -2139,7 +2139,8 @@ private predicate expensiveLen2unfolding(TypedContent tc, Configuration config) ) and accessPathApproxCostLimits(apLimit, tupleLimit) and apLimit < tails and - tupleLimit < (tails - 1) * nodes + tupleLimit < (tails - 1) * nodes and + not tc.forceHighPrecision() ) } @@ -2973,12 +2974,15 @@ private AccessPathApprox getATail(AccessPathApprox apa, Configuration config) { * expected to be expensive. Holds with `unfold = true` otherwise. */ private predicate evalUnfold(AccessPathApprox apa, boolean unfold, Configuration config) { - exists(int aps, int nodes, int apLimit, int tupleLimit | - aps = countPotentialAps(apa, config) and - nodes = countNodesUsingAccessPath(apa, config) and - accessPathCostLimits(apLimit, tupleLimit) and - if apLimit < aps and tupleLimit < (aps - 1) * nodes then unfold = false else unfold = true - ) + if apa.getHead().forceHighPrecision() + then unfold = true + else + exists(int aps, int nodes, int apLimit, int tupleLimit | + aps = countPotentialAps(apa, config) and + nodes = countNodesUsingAccessPath(apa, config) and + accessPathCostLimits(apLimit, tupleLimit) and + if apLimit < aps and tupleLimit < (aps - 1) * nodes then unfold = false else unfold = true + ) } /** diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl2.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl2.qll index e04d3b0edc6..4ca06c93362 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl2.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl2.qll @@ -2139,7 +2139,8 @@ private predicate expensiveLen2unfolding(TypedContent tc, Configuration config) ) and accessPathApproxCostLimits(apLimit, tupleLimit) and apLimit < tails and - tupleLimit < (tails - 1) * nodes + tupleLimit < (tails - 1) * nodes and + not tc.forceHighPrecision() ) } @@ -2973,12 +2974,15 @@ private AccessPathApprox getATail(AccessPathApprox apa, Configuration config) { * expected to be expensive. Holds with `unfold = true` otherwise. */ private predicate evalUnfold(AccessPathApprox apa, boolean unfold, Configuration config) { - exists(int aps, int nodes, int apLimit, int tupleLimit | - aps = countPotentialAps(apa, config) and - nodes = countNodesUsingAccessPath(apa, config) and - accessPathCostLimits(apLimit, tupleLimit) and - if apLimit < aps and tupleLimit < (aps - 1) * nodes then unfold = false else unfold = true - ) + if apa.getHead().forceHighPrecision() + then unfold = true + else + exists(int aps, int nodes, int apLimit, int tupleLimit | + aps = countPotentialAps(apa, config) and + nodes = countNodesUsingAccessPath(apa, config) and + accessPathCostLimits(apLimit, tupleLimit) and + if apLimit < aps and tupleLimit < (aps - 1) * nodes then unfold = false else unfold = true + ) } /** diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl3.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl3.qll index e04d3b0edc6..4ca06c93362 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl3.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl3.qll @@ -2139,7 +2139,8 @@ private predicate expensiveLen2unfolding(TypedContent tc, Configuration config) ) and accessPathApproxCostLimits(apLimit, tupleLimit) and apLimit < tails and - tupleLimit < (tails - 1) * nodes + tupleLimit < (tails - 1) * nodes and + not tc.forceHighPrecision() ) } @@ -2973,12 +2974,15 @@ private AccessPathApprox getATail(AccessPathApprox apa, Configuration config) { * expected to be expensive. Holds with `unfold = true` otherwise. */ private predicate evalUnfold(AccessPathApprox apa, boolean unfold, Configuration config) { - exists(int aps, int nodes, int apLimit, int tupleLimit | - aps = countPotentialAps(apa, config) and - nodes = countNodesUsingAccessPath(apa, config) and - accessPathCostLimits(apLimit, tupleLimit) and - if apLimit < aps and tupleLimit < (aps - 1) * nodes then unfold = false else unfold = true - ) + if apa.getHead().forceHighPrecision() + then unfold = true + else + exists(int aps, int nodes, int apLimit, int tupleLimit | + aps = countPotentialAps(apa, config) and + nodes = countNodesUsingAccessPath(apa, config) and + accessPathCostLimits(apLimit, tupleLimit) and + if apLimit < aps and tupleLimit < (aps - 1) * nodes then unfold = false else unfold = true + ) } /** diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl4.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl4.qll index e04d3b0edc6..4ca06c93362 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl4.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl4.qll @@ -2139,7 +2139,8 @@ private predicate expensiveLen2unfolding(TypedContent tc, Configuration config) ) and accessPathApproxCostLimits(apLimit, tupleLimit) and apLimit < tails and - tupleLimit < (tails - 1) * nodes + tupleLimit < (tails - 1) * nodes and + not tc.forceHighPrecision() ) } @@ -2973,12 +2974,15 @@ private AccessPathApprox getATail(AccessPathApprox apa, Configuration config) { * expected to be expensive. Holds with `unfold = true` otherwise. */ private predicate evalUnfold(AccessPathApprox apa, boolean unfold, Configuration config) { - exists(int aps, int nodes, int apLimit, int tupleLimit | - aps = countPotentialAps(apa, config) and - nodes = countNodesUsingAccessPath(apa, config) and - accessPathCostLimits(apLimit, tupleLimit) and - if apLimit < aps and tupleLimit < (aps - 1) * nodes then unfold = false else unfold = true - ) + if apa.getHead().forceHighPrecision() + then unfold = true + else + exists(int aps, int nodes, int apLimit, int tupleLimit | + aps = countPotentialAps(apa, config) and + nodes = countNodesUsingAccessPath(apa, config) and + accessPathCostLimits(apLimit, tupleLimit) and + if apLimit < aps and tupleLimit < (aps - 1) * nodes then unfold = false else unfold = true + ) } /** diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImplCommon.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImplCommon.qll index f588a25a176..e8ebb3f5e96 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImplCommon.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImplCommon.qll @@ -1236,6 +1236,13 @@ class TypedContent extends MkTypedContent { /** Gets a textual representation of this content. */ string toString() { result = c.toString() } + + /** + * Holds if accesspaths with this `TypedContent` at their head always should + * be tracked at high precision. This disables adaptive accesspath precision + * for such accesspaths. + */ + predicate forceHighPrecision() { forceHighPrecision(c) } } /** From 6359c44622efee45273285af80baa9fa97db4a47 Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Fri, 1 Oct 2021 14:05:47 +0200 Subject: [PATCH 679/741] Java: Autoformat. --- .../semmle/code/java/dataflow/internal/DataFlowPrivate.qll | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowPrivate.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowPrivate.qll index a2bc204591d..0e21aaa64cd 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowPrivate.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowPrivate.qll @@ -312,7 +312,9 @@ int accessPathLimit() { result = 5 } * Holds if accesspaths with `c` at their head always should be tracked at high * precision. This disables adaptive accesspath precision for such accesspaths. */ -predicate forceHighPrecision(Content c) { c instanceof ArrayContent or c instanceof CollectionContent } +predicate forceHighPrecision(Content c) { + c instanceof ArrayContent or c instanceof CollectionContent +} /** * Holds if `n` does not require a `PostUpdateNode` as it either cannot be From ebe0988d9afb06ccd9bd63b6abeedacc8a816fea Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Fri, 1 Oct 2021 16:30:56 +0200 Subject: [PATCH 680/741] Let 'ql/lib' folders trigger the CSV workflow --- .github/workflows/csv-coverage-pr-artifacts.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/csv-coverage-pr-artifacts.yml b/.github/workflows/csv-coverage-pr-artifacts.yml index 201eea5c073..8b89b9b22c1 100644 --- a/.github/workflows/csv-coverage-pr-artifacts.yml +++ b/.github/workflows/csv-coverage-pr-artifacts.yml @@ -6,6 +6,8 @@ on: - '.github/workflows/csv-coverage-pr-comment.yml' - '*/ql/src/**/*.ql' - '*/ql/src/**/*.qll' + - '*/ql/lib/**/*.ql' + - '*/ql/lib/**/*.qll' - 'misc/scripts/library-coverage/*.py' # input data files - '*/documentation/library-coverage/cwe-sink.csv' From 99ba80d492894dfa78043674bda64ebf553d4b14 Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Fri, 1 Oct 2021 16:57:30 +0200 Subject: [PATCH 681/741] C#: Adjust test output. --- .../dataflow/external-models/ExternalFlow.expected | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/csharp/ql/test/library-tests/dataflow/external-models/ExternalFlow.expected b/csharp/ql/test/library-tests/dataflow/external-models/ExternalFlow.expected index 62af20beb18..ecc6b95c817 100644 --- a/csharp/ql/test/library-tests/dataflow/external-models/ExternalFlow.expected +++ b/csharp/ql/test/library-tests/dataflow/external-models/ExternalFlow.expected @@ -45,6 +45,9 @@ edges | ExternalFlow.cs:91:30:91:30 | SSA def(i) : Int32 | ExternalFlow.cs:92:18:92:18 | (...) ... | | ExternalFlow.cs:121:46:121:46 | s : Object | ExternalFlow.cs:60:35:60:35 | o : Object | | ExternalFlow.cs:123:34:123:41 | elements [element] : Object | ExternalFlow.cs:72:23:72:23 | o : Object | +| ExternalFlow.cs:123:34:123:41 | elements [element] : Object | ExternalFlow.cs:72:23:72:23 | o : Object | +| ExternalFlow.cs:123:34:123:41 | elements [element] : Object | ExternalFlow.cs:123:34:123:41 | elements [element] : Object | +| ExternalFlow.cs:123:34:123:41 | elements [element] : Object | ExternalFlow.cs:123:34:123:41 | elements [element] : Object | nodes | ExternalFlow.cs:9:27:9:38 | object creation of type Object : Object | semmle.label | object creation of type Object : Object | | ExternalFlow.cs:10:18:10:33 | call to method StepArgRes | semmle.label | call to method StepArgRes | @@ -106,6 +109,7 @@ nodes | ExternalFlow.cs:92:18:92:18 | (...) ... | semmle.label | (...) ... | | ExternalFlow.cs:121:46:121:46 | s : Object | semmle.label | s : Object | | ExternalFlow.cs:123:34:123:41 | elements [element] : Object | semmle.label | elements [element] : Object | +| ExternalFlow.cs:123:34:123:41 | elements [element] : Object | semmle.label | elements [element] : Object | subpaths invalidModelRow #select From bb6e6f4808b0354e72001136f4d6d2aa226fa0df Mon Sep 17 00:00:00 2001 From: Marcono1234 Date: Sat, 4 Sep 2021 19:24:40 +0200 Subject: [PATCH 682/741] Java: Split literals tests This allows changing individual tests in the future without having to adjust the expected output of all other tests. --- .../booleanLiterals/BooleanLiterals.java | 31 ++++ .../booleanLiterals/booleanLiterals.expected | 15 ++ .../booleanLiterals.ql} | 0 .../literals/charLiterals/CharLiterals.java | 44 ++++++ .../charLiterals/charLiterals.expected | 20 +++ .../charLiterals.ql} | 0 .../doubleLiterals/DoubleLiterals.java | 50 +++++++ .../doubleLiterals/doubleLiterals.expected | 25 ++++ .../doubleLiterals.ql} | 0 .../literals/floatLiterals/FloatLiterals.java | 49 +++++++ .../floatLiterals/floatLiterals.expected | 24 +++ .../floatLiterals.ql} | 0 .../integerLiterals/IntegerLiterals.java | 57 ++++++++ .../integerLiterals/integerLiterals.expected | 30 ++++ .../integerLiterals.ql} | 0 .../literals/literalBoolean.expected | 3 - .../literals/literalChar.expected | 10 -- .../literals/literalDouble.expected | 16 -- .../literals/literalFloat.expected | 16 -- .../literals/literalInteger.expected | 20 --- .../literals/literalLong.expected | 20 --- .../literals/literalString.expected | 20 --- .../literals-numeric/NumericLiterals.java | 2 +- .../negativeNumericLiteral.expected | 0 .../negativeNumericLiterals.expected | 12 ++ .../negativeNumericLiterals.ql} | 0 .../literals/literals/Literals.java | 138 ------------------ .../literals/longLiterals/LongLiterals.java | 56 +++++++ .../longLiterals/longLiterals.expected | 30 ++++ .../longLiterals.ql} | 0 .../stringLiterals/StringLiterals.java | 59 ++++++++ .../stringLiterals/stringLiterals.expected | 33 +++++ .../stringLiterals.ql} | 0 33 files changed, 536 insertions(+), 244 deletions(-) create mode 100644 java/ql/test/library-tests/literals/booleanLiterals/BooleanLiterals.java create mode 100644 java/ql/test/library-tests/literals/booleanLiterals/booleanLiterals.expected rename java/ql/test/library-tests/literals/{literalBoolean.ql => booleanLiterals/booleanLiterals.ql} (100%) create mode 100644 java/ql/test/library-tests/literals/charLiterals/CharLiterals.java create mode 100644 java/ql/test/library-tests/literals/charLiterals/charLiterals.expected rename java/ql/test/library-tests/literals/{literalChar.ql => charLiterals/charLiterals.ql} (100%) create mode 100644 java/ql/test/library-tests/literals/doubleLiterals/DoubleLiterals.java create mode 100644 java/ql/test/library-tests/literals/doubleLiterals/doubleLiterals.expected rename java/ql/test/library-tests/literals/{literalDouble.ql => doubleLiterals/doubleLiterals.ql} (100%) create mode 100644 java/ql/test/library-tests/literals/floatLiterals/FloatLiterals.java create mode 100644 java/ql/test/library-tests/literals/floatLiterals/floatLiterals.expected rename java/ql/test/library-tests/literals/{literalFloat.ql => floatLiterals/floatLiterals.ql} (100%) create mode 100644 java/ql/test/library-tests/literals/integerLiterals/IntegerLiterals.java create mode 100644 java/ql/test/library-tests/literals/integerLiterals/integerLiterals.expected rename java/ql/test/library-tests/literals/{literalInteger.ql => integerLiterals/integerLiterals.ql} (100%) delete mode 100644 java/ql/test/library-tests/literals/literalBoolean.expected delete mode 100644 java/ql/test/library-tests/literals/literalChar.expected delete mode 100644 java/ql/test/library-tests/literals/literalDouble.expected delete mode 100644 java/ql/test/library-tests/literals/literalFloat.expected delete mode 100644 java/ql/test/library-tests/literals/literalInteger.expected delete mode 100644 java/ql/test/library-tests/literals/literalLong.expected delete mode 100644 java/ql/test/library-tests/literals/literalString.expected rename java/ql/test/library-tests/{ => literals}/literals-numeric/NumericLiterals.java (95%) rename java/ql/test/library-tests/{ => literals}/literals-numeric/negativeNumericLiteral.expected (100%) create mode 100644 java/ql/test/library-tests/literals/literals-numeric/negativeNumericLiterals.expected rename java/ql/test/library-tests/{literals-numeric/negativeNumericLiteral.ql => literals/literals-numeric/negativeNumericLiterals.ql} (100%) delete mode 100644 java/ql/test/library-tests/literals/literals/Literals.java create mode 100644 java/ql/test/library-tests/literals/longLiterals/LongLiterals.java create mode 100644 java/ql/test/library-tests/literals/longLiterals/longLiterals.expected rename java/ql/test/library-tests/literals/{literalLong.ql => longLiterals/longLiterals.ql} (100%) create mode 100644 java/ql/test/library-tests/literals/stringLiterals/StringLiterals.java create mode 100644 java/ql/test/library-tests/literals/stringLiterals/stringLiterals.expected rename java/ql/test/library-tests/literals/{literalString.ql => stringLiterals/stringLiterals.ql} (100%) diff --git a/java/ql/test/library-tests/literals/booleanLiterals/BooleanLiterals.java b/java/ql/test/library-tests/literals/booleanLiterals/BooleanLiterals.java new file mode 100644 index 00000000000..feff9a908e4 --- /dev/null +++ b/java/ql/test/library-tests/literals/booleanLiterals/BooleanLiterals.java @@ -0,0 +1,31 @@ +package booleanLiterals; + +public class BooleanLiterals { + boolean[] booleans = { + true, + false, + // Using Unicode escapes (which are handled during pre-processing) + \u0074\u0072\u0075\u0065, // true + }; + + // The operation expression (e.g. `&&`) is not a literal + boolean[] logicOperations = { + true && true, + false && false, + true && false, + true || true, + false || false, + true || false, + }; + + Object[] nonBooleanLiterals = { + "true", + "false", + 1, + 0, + Boolean.TRUE, + Boolean.FALSE, + }; + + boolean nonLiteral; +} diff --git a/java/ql/test/library-tests/literals/booleanLiterals/booleanLiterals.expected b/java/ql/test/library-tests/literals/booleanLiterals/booleanLiterals.expected new file mode 100644 index 00000000000..75acbb8d07f --- /dev/null +++ b/java/ql/test/library-tests/literals/booleanLiterals/booleanLiterals.expected @@ -0,0 +1,15 @@ +| BooleanLiterals.java:5:3:5:6 | true | true | true | +| BooleanLiterals.java:6:3:6:7 | false | false | false | +| BooleanLiterals.java:8:8:8:26 | 4\\u0072\\u0075\\u0065 | true | true | +| BooleanLiterals.java:13:3:13:6 | true | true | true | +| BooleanLiterals.java:13:11:13:14 | true | true | true | +| BooleanLiterals.java:14:3:14:7 | false | false | false | +| BooleanLiterals.java:14:12:14:16 | false | false | false | +| BooleanLiterals.java:15:3:15:6 | true | true | true | +| BooleanLiterals.java:15:11:15:15 | false | false | false | +| BooleanLiterals.java:16:3:16:6 | true | true | true | +| BooleanLiterals.java:16:11:16:14 | true | true | true | +| BooleanLiterals.java:17:3:17:7 | false | false | false | +| BooleanLiterals.java:17:12:17:16 | false | false | false | +| BooleanLiterals.java:18:3:18:6 | true | true | true | +| BooleanLiterals.java:18:11:18:15 | false | false | false | diff --git a/java/ql/test/library-tests/literals/literalBoolean.ql b/java/ql/test/library-tests/literals/booleanLiterals/booleanLiterals.ql similarity index 100% rename from java/ql/test/library-tests/literals/literalBoolean.ql rename to java/ql/test/library-tests/literals/booleanLiterals/booleanLiterals.ql diff --git a/java/ql/test/library-tests/literals/charLiterals/CharLiterals.java b/java/ql/test/library-tests/literals/charLiterals/CharLiterals.java new file mode 100644 index 00000000000..51274f9899e --- /dev/null +++ b/java/ql/test/library-tests/literals/charLiterals/CharLiterals.java @@ -0,0 +1,44 @@ +package charLiterals; + +public class CharLiterals { + char[] chars = { + 'a', + '\u0061', // 'a' + '\u0000', + '\uFFFF', + '\ufFfF', + '\0', + '\n', + '"', + '\\', + '\'', + '\123', // octal escape sequence for 'S' + '\uD800', // high surrogate + '\uDC00', // low surrogate + // Using Unicode escapes (which are handled during pre-processing) + '\u005C\u005C', // escaped backslash + '\u005C\u0027', // escaped single quote + \u0027a\u0027, // 'a' + }; + + // + and - are not part of the literal + int[] charsWithSign = { + +'a', + -'a', + }; + + // The operation expression (e.g. `+`) is not a literal + int[] numericOperations = { + 'a' + 'b', + }; + + Object[] nonCharLiterals = { + "a", + "", + "\uD800\uDC00", // surrogate pair + 0, + Character.MIN_VALUE, + }; + + char nonLiteral; +} diff --git a/java/ql/test/library-tests/literals/charLiterals/charLiterals.expected b/java/ql/test/library-tests/literals/charLiterals/charLiterals.expected new file mode 100644 index 00000000000..987f7c17fe4 --- /dev/null +++ b/java/ql/test/library-tests/literals/charLiterals/charLiterals.expected @@ -0,0 +1,20 @@ +| CharLiterals.java:5:3:5:5 | 'a' | a | +| CharLiterals.java:6:3:6:10 | '\\u0061' | a | +| CharLiterals.java:7:3:7:10 | '\\u0000' | \u0000 | +| CharLiterals.java:8:3:8:10 | '\\uFFFF' | \uffff | +| CharLiterals.java:9:3:9:10 | '\\ufFfF' | \uffff | +| CharLiterals.java:10:3:10:6 | '\\0' | \u0000 | +| CharLiterals.java:11:3:11:6 | '\\n' | \n | +| CharLiterals.java:12:3:12:5 | '"' | " | +| CharLiterals.java:13:3:13:6 | '\\\\' | \\ | +| CharLiterals.java:14:3:14:6 | '\\'' | ' | +| CharLiterals.java:15:3:15:8 | '\\123' | S | +| CharLiterals.java:16:3:16:10 | '\\uD800' | \ufffd | +| CharLiterals.java:17:3:17:10 | '\\uDC00' | \ufffd | +| CharLiterals.java:19:3:19:16 | '\\u005C\\u005C' | \\ | +| CharLiterals.java:20:3:20:16 | '\\u005C\\u0027' | ' | +| CharLiterals.java:21:8:21:15 | 7a\\u0027 | a | +| CharLiterals.java:26:4:26:6 | 'a' | a | +| CharLiterals.java:27:4:27:6 | 'a' | a | +| CharLiterals.java:32:3:32:5 | 'a' | a | +| CharLiterals.java:32:9:32:11 | 'b' | b | diff --git a/java/ql/test/library-tests/literals/literalChar.ql b/java/ql/test/library-tests/literals/charLiterals/charLiterals.ql similarity index 100% rename from java/ql/test/library-tests/literals/literalChar.ql rename to java/ql/test/library-tests/literals/charLiterals/charLiterals.ql diff --git a/java/ql/test/library-tests/literals/doubleLiterals/DoubleLiterals.java b/java/ql/test/library-tests/literals/doubleLiterals/DoubleLiterals.java new file mode 100644 index 00000000000..bf437c31a6a --- /dev/null +++ b/java/ql/test/library-tests/literals/doubleLiterals/DoubleLiterals.java @@ -0,0 +1,50 @@ +package doubleLiterals; + +public class DoubleLiterals { + double[] doubles = { + 0.0, + 0d, + 0D, + .0d, + .0, + 0., + 1.234567890123456789, + 1.55555555555555555555, + // From the JLS + 1e1, + 1.7976931348623157E308, + 0x1.f_ffff_ffff_ffffP+1023, + 4.9e-324, + 0x0.0_0000_0000_0001P-1022, + 0x1.0P-1074, + // Using Unicode escapes (which are handled during pre-processing) + \u0030\u002E\u0030, // 0.0 + }; + + // + and - are not part of the literal + double[] doublesWithSign = { + +0.0, + -0.0, + +1.0, + -1.0, + +1.7976931348623157E308, + -1.7976931348623157E308, + }; + + // The operation expression (e.g. `+`) is not a literal + double[] numericOperations = { + 0.0 + 0.0, + 0.0 / 0.0, + }; + + Object[] nonDoubleLiterals = { + "0", + '0', + 0, + 0.0f, + (double) 0.0f, + Double.MIN_VALUE, + }; + + double nonLiteral; +} diff --git a/java/ql/test/library-tests/literals/doubleLiterals/doubleLiterals.expected b/java/ql/test/library-tests/literals/doubleLiterals/doubleLiterals.expected new file mode 100644 index 00000000000..574ba90a98f --- /dev/null +++ b/java/ql/test/library-tests/literals/doubleLiterals/doubleLiterals.expected @@ -0,0 +1,25 @@ +| DoubleLiterals.java:5:3:5:5 | 0.0 | 0.0 | 0.0 | +| DoubleLiterals.java:6:3:6:4 | 0d | 0.0 | 0.0 | +| DoubleLiterals.java:7:3:7:4 | 0D | 0.0 | 0.0 | +| DoubleLiterals.java:8:3:8:5 | .0d | 0.0 | 0.0 | +| DoubleLiterals.java:9:3:9:4 | .0 | 0.0 | 0.0 | +| DoubleLiterals.java:10:3:10:4 | 0. | 0.0 | 0.0 | +| DoubleLiterals.java:11:3:11:22 | 1.234567890123456789 | 1.2345678901234567 | 1.2345678901234567 | +| DoubleLiterals.java:12:3:12:24 | 1.55555555555555555555 | 1.5555555555555556 | 1.5555555555555556 | +| DoubleLiterals.java:14:3:14:5 | 1e1 | 10.0 | 10.0 | +| DoubleLiterals.java:15:3:15:24 | 1.7976931348623157E308 | 1.7976931348623157E308 | 1.7976931348623157E308 | +| DoubleLiterals.java:16:3:16:28 | 0x1.f_ffff_ffff_ffffP+1023 | 1.7976931348623157E308 | 1.7976931348623157E308 | +| DoubleLiterals.java:17:3:17:10 | 4.9e-324 | 4.9E-324 | 4.9E-324 | +| DoubleLiterals.java:18:3:18:28 | 0x0.0_0000_0000_0001P-1022 | 4.9E-324 | 4.9E-324 | +| DoubleLiterals.java:19:3:19:13 | 0x1.0P-1074 | 4.9E-324 | 4.9E-324 | +| DoubleLiterals.java:21:8:21:20 | 0\\u002E\\u0030 | 0.0 | 0.0 | +| DoubleLiterals.java:26:4:26:6 | 0.0 | 0.0 | 0.0 | +| DoubleLiterals.java:27:4:27:6 | 0.0 | 0.0 | 0.0 | +| DoubleLiterals.java:28:4:28:6 | 1.0 | 1.0 | 1.0 | +| DoubleLiterals.java:29:4:29:6 | 1.0 | 1.0 | 1.0 | +| DoubleLiterals.java:30:4:30:25 | 1.7976931348623157E308 | 1.7976931348623157E308 | 1.7976931348623157E308 | +| DoubleLiterals.java:31:4:31:25 | 1.7976931348623157E308 | 1.7976931348623157E308 | 1.7976931348623157E308 | +| DoubleLiterals.java:36:3:36:5 | 0.0 | 0.0 | 0.0 | +| DoubleLiterals.java:36:9:36:11 | 0.0 | 0.0 | 0.0 | +| DoubleLiterals.java:37:3:37:5 | 0.0 | 0.0 | 0.0 | +| DoubleLiterals.java:37:9:37:11 | 0.0 | 0.0 | 0.0 | diff --git a/java/ql/test/library-tests/literals/literalDouble.ql b/java/ql/test/library-tests/literals/doubleLiterals/doubleLiterals.ql similarity index 100% rename from java/ql/test/library-tests/literals/literalDouble.ql rename to java/ql/test/library-tests/literals/doubleLiterals/doubleLiterals.ql diff --git a/java/ql/test/library-tests/literals/floatLiterals/FloatLiterals.java b/java/ql/test/library-tests/literals/floatLiterals/FloatLiterals.java new file mode 100644 index 00000000000..fc9722d1052 --- /dev/null +++ b/java/ql/test/library-tests/literals/floatLiterals/FloatLiterals.java @@ -0,0 +1,49 @@ +package floatLiterals; + +public class FloatLiterals { + float[] floats = { + 0.0f, + 0f, + .0f, + 0.f, + 1_0_0.0f, + 1.234567890123456789f, + 1.55555555555555555555f, + // From the JLS + 1e1f, + 3.4028235e38f, + 0x1.fffffeP+127f, + 1.4e-45f, + 0x0.000002P-126f, + 0x1.0P-149f, + // Using Unicode escapes (which are handled during pre-processing) + \u0030\u002E\u0030\u0066, // 0.0f + }; + + // + and - are not part of the literal + float[] floatsWithSign = { + +0.f, + -0.f, + +1.0f, + -1.0f, + +3.4028235e38f, + -3.4028235e38f, + }; + + // The operation expression (e.g. `+`) is not a literal + float[] numericOperations = { + 0.0f + 0.0f, + 0.0f / 0.0f, + }; + + Object[] nonFloatLiterals = { + "0f", + '0', + 0, + 0.0, + (float) 0.0, + Float.MIN_VALUE, + }; + + float nonLiteral; +} diff --git a/java/ql/test/library-tests/literals/floatLiterals/floatLiterals.expected b/java/ql/test/library-tests/literals/floatLiterals/floatLiterals.expected new file mode 100644 index 00000000000..c1a499f0f52 --- /dev/null +++ b/java/ql/test/library-tests/literals/floatLiterals/floatLiterals.expected @@ -0,0 +1,24 @@ +| FloatLiterals.java:5:3:5:6 | 0.0f | 0.0 | 0.0 | +| FloatLiterals.java:6:3:6:4 | 0f | 0.0 | 0.0 | +| FloatLiterals.java:7:3:7:5 | .0f | 0.0 | 0.0 | +| FloatLiterals.java:8:3:8:5 | 0.f | 0.0 | 0.0 | +| FloatLiterals.java:9:3:9:10 | 1_0_0.0f | 100.0 | 100.0 | +| FloatLiterals.java:10:3:10:23 | 1.234567890123456789f | 1.2345679 | 1.2345679 | +| FloatLiterals.java:11:3:11:25 | 1.55555555555555555555f | 1.5555556 | 1.5555556 | +| FloatLiterals.java:13:3:13:6 | 1e1f | 10.0 | 10.0 | +| FloatLiterals.java:14:3:14:15 | 3.4028235e38f | 3.4028235E38 | 3.4028235E38 | +| FloatLiterals.java:15:3:15:18 | 0x1.fffffeP+127f | 3.4028235E38 | 3.4028235E38 | +| FloatLiterals.java:16:3:16:10 | 1.4e-45f | 1.4E-45 | 1.4E-45 | +| FloatLiterals.java:17:3:17:18 | 0x0.000002P-126f | 1.4E-45 | 1.4E-45 | +| FloatLiterals.java:18:3:18:13 | 0x1.0P-149f | 1.4E-45 | 1.4E-45 | +| FloatLiterals.java:20:8:20:26 | 0\\u002E\\u0030\\u0066 | 0.0 | 0.0 | +| FloatLiterals.java:25:4:25:6 | 0.f | 0.0 | 0.0 | +| FloatLiterals.java:26:4:26:6 | 0.f | 0.0 | 0.0 | +| FloatLiterals.java:27:4:27:7 | 1.0f | 1.0 | 1.0 | +| FloatLiterals.java:28:4:28:7 | 1.0f | 1.0 | 1.0 | +| FloatLiterals.java:29:4:29:16 | 3.4028235e38f | 3.4028235E38 | 3.4028235E38 | +| FloatLiterals.java:30:4:30:16 | 3.4028235e38f | 3.4028235E38 | 3.4028235E38 | +| FloatLiterals.java:35:3:35:6 | 0.0f | 0.0 | 0.0 | +| FloatLiterals.java:35:10:35:13 | 0.0f | 0.0 | 0.0 | +| FloatLiterals.java:36:3:36:6 | 0.0f | 0.0 | 0.0 | +| FloatLiterals.java:36:10:36:13 | 0.0f | 0.0 | 0.0 | diff --git a/java/ql/test/library-tests/literals/literalFloat.ql b/java/ql/test/library-tests/literals/floatLiterals/floatLiterals.ql similarity index 100% rename from java/ql/test/library-tests/literals/literalFloat.ql rename to java/ql/test/library-tests/literals/floatLiterals/floatLiterals.ql diff --git a/java/ql/test/library-tests/literals/integerLiterals/IntegerLiterals.java b/java/ql/test/library-tests/literals/integerLiterals/IntegerLiterals.java new file mode 100644 index 00000000000..965e3238c1f --- /dev/null +++ b/java/ql/test/library-tests/literals/integerLiterals/IntegerLiterals.java @@ -0,0 +1,57 @@ +package integerLiterals; + +public class IntegerLiterals { + int[] ints = { + 0, + 1, + 0_0, + 0___0, + 0_12, // octal + 0X012, // hex + 0xaBcDeF, // hex + 0B11, // binary + 0x80000000, + 2147483647, + -2147483648, // special case: sign is part of the literal + // From the JLS + 0x7fff_ffff, + 0177_7777_7777, // octal + 0b0111_1111_1111_1111_1111_1111_1111_1111, // binary + 0x8000_0000, + 0200_0000_0000, + 0b1000_0000_0000_0000_0000_0000_0000_0000, + 0xffff_ffff, + 0377_7777_7777, + 0b1111_1111_1111_1111_1111_1111_1111_1111, + // Using Unicode escapes (which are handled during pre-processing) + \u0030, // 0 + }; + + // + and - are not part of the literal + int[] intsWithSign = { + +0, + -0, + +1, + -1, + +2147483647, + }; + + // The operation expression (e.g. `+`) is not a literal + int[] numericOperations = { + 1 + 1, + 0 / 0, + }; + + Object[] nonIntLiterals = { + "0", + '0', + 0L, + (int) 0L, + 0.0, + (int) 0.0, + Integer.MIN_VALUE, + 'a' + 'b', // result is int 195, but this is not a literal + }; + + int nonLiteral; +} diff --git a/java/ql/test/library-tests/literals/integerLiterals/integerLiterals.expected b/java/ql/test/library-tests/literals/integerLiterals/integerLiterals.expected new file mode 100644 index 00000000000..3ff7870ca66 --- /dev/null +++ b/java/ql/test/library-tests/literals/integerLiterals/integerLiterals.expected @@ -0,0 +1,30 @@ +| IntegerLiterals.java:5:3:5:3 | 0 | 0 | 0 | +| IntegerLiterals.java:6:3:6:3 | 1 | 1 | 1 | +| IntegerLiterals.java:7:3:7:5 | 0_0 | 0 | 0 | +| IntegerLiterals.java:8:3:8:7 | 0___0 | 0 | 0 | +| IntegerLiterals.java:9:3:9:6 | 0_12 | 10 | 10 | +| IntegerLiterals.java:10:3:10:7 | 0X012 | 18 | 18 | +| IntegerLiterals.java:11:3:11:10 | 0xaBcDeF | 11259375 | 11259375 | +| IntegerLiterals.java:12:3:12:6 | 0B11 | 3 | 3 | +| IntegerLiterals.java:13:3:13:12 | 0x80000000 | -2147483648 | -2147483648 | +| IntegerLiterals.java:14:3:14:12 | 2147483647 | 2147483647 | 2147483647 | +| IntegerLiterals.java:15:3:15:13 | -2147483648 | -2147483648 | -2147483648 | +| IntegerLiterals.java:17:3:17:13 | 0x7fff_ffff | 2147483647 | 2147483647 | +| IntegerLiterals.java:18:3:18:16 | 0177_7777_7777 | 2147483647 | 2147483647 | +| IntegerLiterals.java:19:3:19:43 | 0b0111_1111_1111_1111_1111_1111_1111_1111 | 2147483647 | 2147483647 | +| IntegerLiterals.java:20:3:20:13 | 0x8000_0000 | -2147483648 | -2147483648 | +| IntegerLiterals.java:21:3:21:16 | 0200_0000_0000 | -2147483648 | -2147483648 | +| IntegerLiterals.java:22:3:22:43 | 0b1000_0000_0000_0000_0000_0000_0000_0000 | -2147483648 | -2147483648 | +| IntegerLiterals.java:23:3:23:13 | 0xffff_ffff | -1 | -1 | +| IntegerLiterals.java:24:3:24:16 | 0377_7777_7777 | -1 | -1 | +| IntegerLiterals.java:25:3:25:43 | 0b1111_1111_1111_1111_1111_1111_1111_1111 | -1 | -1 | +| IntegerLiterals.java:27:8:27:8 | 0 | 0 | 0 | +| IntegerLiterals.java:32:4:32:4 | 0 | 0 | 0 | +| IntegerLiterals.java:33:4:33:4 | 0 | 0 | 0 | +| IntegerLiterals.java:34:4:34:4 | 1 | 1 | 1 | +| IntegerLiterals.java:35:4:35:4 | 1 | 1 | 1 | +| IntegerLiterals.java:36:4:36:13 | 2147483647 | 2147483647 | 2147483647 | +| IntegerLiterals.java:41:3:41:3 | 1 | 1 | 1 | +| IntegerLiterals.java:41:7:41:7 | 1 | 1 | 1 | +| IntegerLiterals.java:42:3:42:3 | 0 | 0 | 0 | +| IntegerLiterals.java:42:7:42:7 | 0 | 0 | 0 | diff --git a/java/ql/test/library-tests/literals/literalInteger.ql b/java/ql/test/library-tests/literals/integerLiterals/integerLiterals.ql similarity index 100% rename from java/ql/test/library-tests/literals/literalInteger.ql rename to java/ql/test/library-tests/literals/integerLiterals/integerLiterals.ql diff --git a/java/ql/test/library-tests/literals/literalBoolean.expected b/java/ql/test/library-tests/literals/literalBoolean.expected deleted file mode 100644 index bfc9f1a043f..00000000000 --- a/java/ql/test/library-tests/literals/literalBoolean.expected +++ /dev/null @@ -1,3 +0,0 @@ -| literals/Literals.java:11:22:11:25 | true | true | true | -| literals/Literals.java:16:3:16:6 | true | true | true | -| literals/Literals.java:17:3:17:7 | false | false | false | diff --git a/java/ql/test/library-tests/literals/literalChar.expected b/java/ql/test/library-tests/literals/literalChar.expected deleted file mode 100644 index 00eb45eff57..00000000000 --- a/java/ql/test/library-tests/literals/literalChar.expected +++ /dev/null @@ -1,10 +0,0 @@ -| literals/Literals.java:12:22:12:24 | 'x' | x | -| literals/Literals.java:21:3:21:5 | 'a' | a | -| literals/Literals.java:22:3:22:10 | '\\u0061' | a | -| literals/Literals.java:23:3:23:10 | '\\u0000' | \u0000 | -| literals/Literals.java:24:3:24:6 | '\\0' | \u0000 | -| literals/Literals.java:25:3:25:6 | '\\n' | \n | -| literals/Literals.java:26:3:26:6 | '\\0' | \u0000 | -| literals/Literals.java:27:3:27:6 | '\\\\' | \\ | -| literals/Literals.java:28:3:28:6 | '\\'' | ' | -| literals/Literals.java:29:3:29:8 | '\\123' | S | diff --git a/java/ql/test/library-tests/literals/literalDouble.expected b/java/ql/test/library-tests/literals/literalDouble.expected deleted file mode 100644 index ba64bdd8446..00000000000 --- a/java/ql/test/library-tests/literals/literalDouble.expected +++ /dev/null @@ -1,16 +0,0 @@ -| literals/Literals.java:10:22:10:27 | 456.0D | 456.0 | 456.0 | -| literals/Literals.java:33:3:33:5 | 0.0 | 0.0 | 0.0 | -| literals/Literals.java:34:3:34:4 | 0d | 0.0 | 0.0 | -| literals/Literals.java:35:3:35:5 | .0d | 0.0 | 0.0 | -| literals/Literals.java:36:3:36:4 | .0 | 0.0 | 0.0 | -| literals/Literals.java:37:4:37:6 | 0.d | 0.0 | 0.0 | -| literals/Literals.java:38:4:38:6 | 0.d | 0.0 | 0.0 | -| literals/Literals.java:39:3:39:22 | 1.234567890123456789 | 1.2345678901234567 | 1.2345678901234567 | -| literals/Literals.java:40:3:40:24 | 1.55555555555555555555 | 1.5555555555555556 | 1.5555555555555556 | -| literals/Literals.java:42:3:42:5 | 1e1 | 10.0 | 10.0 | -| literals/Literals.java:43:3:43:24 | 1.7976931348623157E308 | 1.7976931348623157E308 | 1.7976931348623157E308 | -| literals/Literals.java:44:4:44:25 | 1.7976931348623157E308 | 1.7976931348623157E308 | 1.7976931348623157E308 | -| literals/Literals.java:45:3:45:28 | 0x1.f_ffff_ffff_ffffP+1023 | 1.7976931348623157E308 | 1.7976931348623157E308 | -| literals/Literals.java:46:3:46:10 | 4.9e-324 | 4.9E-324 | 4.9E-324 | -| literals/Literals.java:47:3:47:28 | 0x0.0_0000_0000_0001P-1022 | 4.9E-324 | 4.9E-324 | -| literals/Literals.java:48:3:48:13 | 0x1.0P-1074 | 4.9E-324 | 4.9E-324 | diff --git a/java/ql/test/library-tests/literals/literalFloat.expected b/java/ql/test/library-tests/literals/literalFloat.expected deleted file mode 100644 index f6221533fdb..00000000000 --- a/java/ql/test/library-tests/literals/literalFloat.expected +++ /dev/null @@ -1,16 +0,0 @@ -| literals/Literals.java:9:22:9:27 | 123.0F | 123.0 | 123.0 | -| literals/Literals.java:52:3:52:6 | 0.0f | 0.0 | 0.0 | -| literals/Literals.java:53:3:53:4 | 0f | 0.0 | 0.0 | -| literals/Literals.java:54:3:54:5 | .0f | 0.0 | 0.0 | -| literals/Literals.java:55:4:55:6 | 0.f | 0.0 | 0.0 | -| literals/Literals.java:56:4:56:6 | 0.f | 0.0 | 0.0 | -| literals/Literals.java:57:3:57:10 | 1_0_0.0f | 100.0 | 100.0 | -| literals/Literals.java:58:3:58:23 | 1.234567890123456789f | 1.2345679 | 1.2345679 | -| literals/Literals.java:59:3:59:25 | 1.55555555555555555555f | 1.5555556 | 1.5555556 | -| literals/Literals.java:61:3:61:6 | 1e1f | 10.0 | 10.0 | -| literals/Literals.java:62:3:62:15 | 3.4028235e38f | 3.4028235E38 | 3.4028235E38 | -| literals/Literals.java:63:4:63:16 | 3.4028235e38f | 3.4028235E38 | 3.4028235E38 | -| literals/Literals.java:64:3:64:18 | 0x1.fffffeP+127f | 3.4028235E38 | 3.4028235E38 | -| literals/Literals.java:65:3:65:10 | 1.4e-45f | 1.4E-45 | 1.4E-45 | -| literals/Literals.java:66:3:66:18 | 0x0.000002P-126f | 1.4E-45 | 1.4E-45 | -| literals/Literals.java:67:3:67:13 | 0x1.0P-149f | 1.4E-45 | 1.4E-45 | diff --git a/java/ql/test/library-tests/literals/literalInteger.expected b/java/ql/test/library-tests/literals/literalInteger.expected deleted file mode 100644 index 40c6a89cd98..00000000000 --- a/java/ql/test/library-tests/literals/literalInteger.expected +++ /dev/null @@ -1,20 +0,0 @@ -| literals/Literals.java:7:22:7:24 | 123 | 123 | 123 | -| literals/Literals.java:71:3:71:3 | 0 | 0 | 0 | -| literals/Literals.java:72:3:72:5 | 0_0 | 0 | 0 | -| literals/Literals.java:73:3:73:7 | 0___0 | 0 | 0 | -| literals/Literals.java:74:3:74:6 | 0_12 | 10 | 10 | -| literals/Literals.java:75:3:75:7 | 0X012 | 18 | 18 | -| literals/Literals.java:76:3:76:10 | 0xaBcDeF | 11259375 | 11259375 | -| literals/Literals.java:77:3:77:6 | 0B11 | 3 | 3 | -| literals/Literals.java:78:3:78:12 | 0x80000000 | -2147483648 | -2147483648 | -| literals/Literals.java:79:3:79:12 | 2147483647 | 2147483647 | 2147483647 | -| literals/Literals.java:80:3:80:13 | -2147483648 | -2147483648 | -2147483648 | -| literals/Literals.java:82:3:82:13 | 0x7fff_ffff | 2147483647 | 2147483647 | -| literals/Literals.java:83:3:83:16 | 0177_7777_7777 | 2147483647 | 2147483647 | -| literals/Literals.java:84:3:84:43 | 0b0111_1111_1111_1111_1111_1111_1111_1111 | 2147483647 | 2147483647 | -| literals/Literals.java:85:3:85:13 | 0x8000_0000 | -2147483648 | -2147483648 | -| literals/Literals.java:86:3:86:16 | 0200_0000_0000 | -2147483648 | -2147483648 | -| literals/Literals.java:87:3:87:43 | 0b1000_0000_0000_0000_0000_0000_0000_0000 | -2147483648 | -2147483648 | -| literals/Literals.java:88:3:88:13 | 0xffff_ffff | -1 | -1 | -| literals/Literals.java:89:3:89:16 | 0377_7777_7777 | -1 | -1 | -| literals/Literals.java:90:3:90:43 | 0b1111_1111_1111_1111_1111_1111_1111_1111 | -1 | -1 | diff --git a/java/ql/test/library-tests/literals/literalLong.expected b/java/ql/test/library-tests/literals/literalLong.expected deleted file mode 100644 index f46c55f9f37..00000000000 --- a/java/ql/test/library-tests/literals/literalLong.expected +++ /dev/null @@ -1,20 +0,0 @@ -| literals/Literals.java:8:22:8:25 | 456L | 456 | -| literals/Literals.java:94:3:94:4 | 0l | 0 | -| literals/Literals.java:95:3:95:4 | 0L | 0 | -| literals/Literals.java:96:3:96:6 | 0_0L | 0 | -| literals/Literals.java:97:3:97:8 | 0___0L | 0 | -| literals/Literals.java:98:3:98:7 | 0_12L | 10 | -| literals/Literals.java:99:3:99:8 | 0X012L | 18 | -| literals/Literals.java:100:3:100:11 | 0xaBcDeFL | 11259375 | -| literals/Literals.java:101:3:101:7 | 0B11L | 3 | -| literals/Literals.java:102:3:102:22 | 9223372036854775807L | 9223372036854775807 | -| literals/Literals.java:103:3:103:23 | -9223372036854775808L | -9223372036854775808 | -| literals/Literals.java:105:3:105:24 | 0x7fff_ffff_ffff_ffffL | 9223372036854775807 | -| literals/Literals.java:106:3:106:30 | 07_7777_7777_7777_7777_7777L | 9223372036854775807 | -| literals/Literals.java:107:3:107:84 | 0b0111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111L | 9223372036854775807 | -| literals/Literals.java:108:3:108:24 | 0x8000_0000_0000_0000L | -9223372036854775808 | -| literals/Literals.java:109:3:109:31 | 010_0000_0000_0000_0000_0000L | -9223372036854775808 | -| literals/Literals.java:110:3:110:84 | 0b1000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000L | -9223372036854775808 | -| literals/Literals.java:111:3:111:24 | 0xffff_ffff_ffff_ffffL | -1 | -| literals/Literals.java:112:3:112:31 | 017_7777_7777_7777_7777_7777L | -1 | -| literals/Literals.java:113:3:113:84 | 0b1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111L | -1 | diff --git a/java/ql/test/library-tests/literals/literalString.expected b/java/ql/test/library-tests/literals/literalString.expected deleted file mode 100644 index ff39e8085e1..00000000000 --- a/java/ql/test/library-tests/literals/literalString.expected +++ /dev/null @@ -1,20 +0,0 @@ -| literals/Literals.java:6:22:6:37 | "literal string" | literal string | literal string | -| literals/Literals.java:117:3:117:19 | "hello" + "world" | helloworld | helloworld | -| literals/Literals.java:118:3:118:17 | "hello,\\tworld" | hello,\tworld | hello,\tworld | -| literals/Literals.java:119:3:119:21 | "hello,\\u0009world" | hello,\tworld | hello,\tworld | -| literals/Literals.java:120:3:120:10 | "\\u0061" | a | a | -| literals/Literals.java:121:3:121:6 | "\\0" | \u0000 | \u0000 | -| literals/Literals.java:122:3:122:9 | "\\0000" | \u00000 | \u00000 | -| literals/Literals.java:123:3:123:6 | "\\"" | " | " | -| literals/Literals.java:124:3:124:6 | "\\'" | ' | ' | -| literals/Literals.java:125:3:125:6 | "\\n" | \n | \n | -| literals/Literals.java:126:3:126:6 | "\\\\" | \\ | \\ | -| literals/Literals.java:127:3:127:13 | "test \\123" | test S | test S | -| literals/Literals.java:128:3:128:9 | "\\1234" | S4 | S4 | -| literals/Literals.java:129:3:129:13 | "\\u0061567" | a567 | a567 | -| literals/Literals.java:130:3:130:13 | "\\u1234567" | \u1234567 | \u1234567 | -| literals/Literals.java:131:3:131:18 | "\\uaBcDeF\\u0aB1" | \uabcdeF\u0ab1 | \uabcdeF\u0ab1 | -| literals/Literals.java:132:3:132:16 | "\\uD800\\uDC00" | \ud800\udc00 | \ud800\udc00 | -| literals/Literals.java:134:3:134:10 | "\\uD800" | \ufffd | \ufffd | -| literals/Literals.java:135:3:135:10 | "\\uDC00" | \ufffd | \ufffd | -| literals/Literals.java:136:3:136:31 | "hello\\uD800hello\\uDC00world" | hello\ufffdhello\ufffdworld | hello\ufffdhello\ufffdworld | diff --git a/java/ql/test/library-tests/literals-numeric/NumericLiterals.java b/java/ql/test/library-tests/literals/literals-numeric/NumericLiterals.java similarity index 95% rename from java/ql/test/library-tests/literals-numeric/NumericLiterals.java rename to java/ql/test/library-tests/literals/literals-numeric/NumericLiterals.java index 02f2fbfcc6b..776ac6215fc 100644 --- a/java/ql/test/library-tests/literals-numeric/NumericLiterals.java +++ b/java/ql/test/library-tests/literals/literals-numeric/NumericLiterals.java @@ -1,4 +1,4 @@ -class NumericLiterals { +class NumericLiterals { void negativeLiterals() { float f = -1f; double d = -1d; diff --git a/java/ql/test/library-tests/literals-numeric/negativeNumericLiteral.expected b/java/ql/test/library-tests/literals/literals-numeric/negativeNumericLiteral.expected similarity index 100% rename from java/ql/test/library-tests/literals-numeric/negativeNumericLiteral.expected rename to java/ql/test/library-tests/literals/literals-numeric/negativeNumericLiteral.expected diff --git a/java/ql/test/library-tests/literals/literals-numeric/negativeNumericLiterals.expected b/java/ql/test/library-tests/literals/literals-numeric/negativeNumericLiterals.expected new file mode 100644 index 00000000000..95100f259dd --- /dev/null +++ b/java/ql/test/library-tests/literals/literals-numeric/negativeNumericLiterals.expected @@ -0,0 +1,12 @@ +| NumericLiterals.java:3:14:3:15 | 1f | 1.0 | NumericLiterals.java:3:13:3:15 | -... | +| NumericLiterals.java:4:15:4:16 | 1d | 1.0 | NumericLiterals.java:4:14:4:16 | -... | +| NumericLiterals.java:5:13:5:22 | 2147483647 | 2147483647 | NumericLiterals.java:5:12:5:22 | -... | +| NumericLiterals.java:6:12:6:22 | -2147483648 | -2147483648 | NumericLiterals.java:6:7:6:22 | i2 | +| NumericLiterals.java:7:13:7:46 | 0b10000000000000000000000000000000 | -2147483648 | NumericLiterals.java:7:12:7:46 | -... | +| NumericLiterals.java:8:13:8:24 | 020000000000 | -2147483648 | NumericLiterals.java:8:12:8:24 | -... | +| NumericLiterals.java:9:13:9:22 | 0x80000000 | -2147483648 | NumericLiterals.java:9:12:9:22 | -... | +| NumericLiterals.java:10:14:10:33 | 9223372036854775807L | 9223372036854775807 | NumericLiterals.java:10:13:10:33 | -... | +| NumericLiterals.java:11:13:11:33 | -9223372036854775808L | -9223372036854775808 | NumericLiterals.java:11:8:11:33 | l2 | +| NumericLiterals.java:12:14:12:80 | 0b1000000000000000000000000000000000000000000000000000000000000000L | -9223372036854775808 | NumericLiterals.java:12:13:12:80 | -... | +| NumericLiterals.java:13:14:13:37 | 01000000000000000000000L | -9223372036854775808 | NumericLiterals.java:13:13:13:37 | -... | +| NumericLiterals.java:14:14:14:32 | 0x8000000000000000L | -9223372036854775808 | NumericLiterals.java:14:13:14:32 | -... | diff --git a/java/ql/test/library-tests/literals-numeric/negativeNumericLiteral.ql b/java/ql/test/library-tests/literals/literals-numeric/negativeNumericLiterals.ql similarity index 100% rename from java/ql/test/library-tests/literals-numeric/negativeNumericLiteral.ql rename to java/ql/test/library-tests/literals/literals-numeric/negativeNumericLiterals.ql diff --git a/java/ql/test/library-tests/literals/literals/Literals.java b/java/ql/test/library-tests/literals/literals/Literals.java deleted file mode 100644 index 082310acb80..00000000000 --- a/java/ql/test/library-tests/literals/literals/Literals.java +++ /dev/null @@ -1,138 +0,0 @@ -package literals; - -public class Literals { - public int notAliteral; - public void doStuff() { - System.out.println("literal string"); - System.out.println(123); - System.out.println(456L); - System.out.println(123.0F); - System.out.println(456.0D); - System.out.println(true); - System.out.println('x'); - } - - boolean[] booleans = { - true, - false - }; - - char[] chars = { - 'a', - '\u0061', // 'a' - '\u0000', - '\0', - '\n', - '\0', - '\\', - '\'', - '\123' // octal escape sequence for 'S' - }; - - double[] doubles = { - 0.0, - 0d, - .0d, - .0, - -0.d, - +0.d, - 1.234567890123456789, - 1.55555555555555555555, - // From the JLS - 1e1, - 1.7976931348623157E308, - -1.7976931348623157E308, - 0x1.f_ffff_ffff_ffffP+1023, - 4.9e-324, - 0x0.0_0000_0000_0001P-1022, - 0x1.0P-1074 - }; - - float[] floats = { - 0.0f, - 0f, - .0f, - -0.f, - +0.f, - 1_0_0.0f, - 1.234567890123456789f, - 1.55555555555555555555f, - // From the JLS - 1e1f, - 3.4028235e38f, - -3.4028235e38f, - 0x1.fffffeP+127f, - 1.4e-45f, - 0x0.000002P-126f, - 0x1.0P-149f - }; - - int[] ints = { - 0, - 0_0, - 0___0, - 0_12, // octal - 0X012, // hex - 0xaBcDeF, // hex - 0B11, // binary - 0x80000000, - 2147483647, - -2147483648, - // From the JLS - 0x7fff_ffff, - 0177_7777_7777, // octal - 0b0111_1111_1111_1111_1111_1111_1111_1111, // binary - 0x8000_0000, - 0200_0000_0000, - 0b1000_0000_0000_0000_0000_0000_0000_0000, - 0xffff_ffff, - 0377_7777_7777, - 0b1111_1111_1111_1111_1111_1111_1111_1111 - }; - - long[] longs = { - 0l, - 0L, - 0_0L, - 0___0L, - 0_12L, // octal - 0X012L, // hex - 0xaBcDeFL, // hex - 0B11L, // binary - 9223372036854775807L, - -9223372036854775808L, - // From the JLS - 0x7fff_ffff_ffff_ffffL, - 07_7777_7777_7777_7777_7777L, // octal - 0b0111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111L, // binary - 0x8000_0000_0000_0000L, - 010_0000_0000_0000_0000_0000L, - 0b1000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000L, - 0xffff_ffff_ffff_ffffL, - 017_7777_7777_7777_7777_7777L, - 0b1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111L - }; - - String[] strings = { - "hello" + "world", // two separate literals - "hello,\tworld", - "hello,\u0009world", - "\u0061", // 'a' - "\0", - "\0000", - "\"", - "\'", - "\n", - "\\", - "test \123", // octal escape sequence for 'S' - "\1234", // octal escape followed by '4' - "\u0061567", // escape sequence for 'a' followed by "567" - "\u1234567", // '\u1234' followed by "567" - "\uaBcDeF\u0aB1", // '\uABCD' followed by "eF" followed by '\u0AB1' - "\uD800\uDC00", // surrogate pair - // Unpaired surrogates - "\uD800", - "\uDC00", - "hello\uD800hello\uDC00world" - }; -} diff --git a/java/ql/test/library-tests/literals/longLiterals/LongLiterals.java b/java/ql/test/library-tests/literals/longLiterals/LongLiterals.java new file mode 100644 index 00000000000..7501300684b --- /dev/null +++ b/java/ql/test/library-tests/literals/longLiterals/LongLiterals.java @@ -0,0 +1,56 @@ +package longLiterals; + +public class LongLiterals { + long[] longs = { + 0l, + 0L, + 1L, + 0_0L, + 0___0L, + 0_12L, // octal + 0X012L, // hex + 0xaBcDeFL, // hex + 0B11L, // binary + 9223372036854775807L, + -9223372036854775808L, // special case: sign is part of the literal + // From the JLS + 0x7fff_ffff_ffff_ffffL, + 07_7777_7777_7777_7777_7777L, // octal + 0b0111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111L, // binary + 0x8000_0000_0000_0000L, + 010_0000_0000_0000_0000_0000L, + 0b1000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000L, + 0xffff_ffff_ffff_ffffL, + 017_7777_7777_7777_7777_7777L, + 0b1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111L, + // Using Unicode escapes (which are handled during pre-processing) + \u0030\u004C, // 0L + }; + + // + and - are not part of the literal + long[] longsWithSign = { + +0L, + -0L, + +1L, + -1L, + +9223372036854775807L, + }; + + // The operation expression (e.g. `+`) is not a literal + long[] numericOperations = { + 1L + 1L, + 0L / 0L, + }; + + Object[] longLongLiterals = { + "0L", + '0', + 0, + (long) 0, + 0.0, + (long) 0.0, + Long.MIN_VALUE, + }; + + long nonLiteral; +} diff --git a/java/ql/test/library-tests/literals/longLiterals/longLiterals.expected b/java/ql/test/library-tests/literals/longLiterals/longLiterals.expected new file mode 100644 index 00000000000..d020a8f1c87 --- /dev/null +++ b/java/ql/test/library-tests/literals/longLiterals/longLiterals.expected @@ -0,0 +1,30 @@ +| LongLiterals.java:5:3:5:4 | 0l | 0 | +| LongLiterals.java:6:3:6:4 | 0L | 0 | +| LongLiterals.java:7:3:7:4 | 1L | 1 | +| LongLiterals.java:8:3:8:6 | 0_0L | 0 | +| LongLiterals.java:9:3:9:8 | 0___0L | 0 | +| LongLiterals.java:10:3:10:7 | 0_12L | 10 | +| LongLiterals.java:11:3:11:8 | 0X012L | 18 | +| LongLiterals.java:12:3:12:11 | 0xaBcDeFL | 11259375 | +| LongLiterals.java:13:3:13:7 | 0B11L | 3 | +| LongLiterals.java:14:3:14:22 | 9223372036854775807L | 9223372036854775807 | +| LongLiterals.java:15:3:15:23 | -9223372036854775808L | -9223372036854775808 | +| LongLiterals.java:17:3:17:24 | 0x7fff_ffff_ffff_ffffL | 9223372036854775807 | +| LongLiterals.java:18:3:18:30 | 07_7777_7777_7777_7777_7777L | 9223372036854775807 | +| LongLiterals.java:19:3:19:84 | 0b0111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111L | 9223372036854775807 | +| LongLiterals.java:20:3:20:24 | 0x8000_0000_0000_0000L | -9223372036854775808 | +| LongLiterals.java:21:3:21:31 | 010_0000_0000_0000_0000_0000L | -9223372036854775808 | +| LongLiterals.java:22:3:22:84 | 0b1000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000L | -9223372036854775808 | +| LongLiterals.java:23:3:23:24 | 0xffff_ffff_ffff_ffffL | -1 | +| LongLiterals.java:24:3:24:31 | 017_7777_7777_7777_7777_7777L | -1 | +| LongLiterals.java:25:3:25:84 | 0b1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111L | -1 | +| LongLiterals.java:27:8:27:14 | 0\\u004C | 0 | +| LongLiterals.java:32:4:32:5 | 0L | 0 | +| LongLiterals.java:33:4:33:5 | 0L | 0 | +| LongLiterals.java:34:4:34:5 | 1L | 1 | +| LongLiterals.java:35:4:35:5 | 1L | 1 | +| LongLiterals.java:36:4:36:23 | 9223372036854775807L | 9223372036854775807 | +| LongLiterals.java:41:3:41:4 | 1L | 1 | +| LongLiterals.java:41:8:41:9 | 1L | 1 | +| LongLiterals.java:42:3:42:4 | 0L | 0 | +| LongLiterals.java:42:8:42:9 | 0L | 0 | diff --git a/java/ql/test/library-tests/literals/literalLong.ql b/java/ql/test/library-tests/literals/longLiterals/longLiterals.ql similarity index 100% rename from java/ql/test/library-tests/literals/literalLong.ql rename to java/ql/test/library-tests/literals/longLiterals/longLiterals.ql diff --git a/java/ql/test/library-tests/literals/stringLiterals/StringLiterals.java b/java/ql/test/library-tests/literals/stringLiterals/StringLiterals.java new file mode 100644 index 00000000000..7325cf3e340 --- /dev/null +++ b/java/ql/test/library-tests/literals/stringLiterals/StringLiterals.java @@ -0,0 +1,59 @@ +package stringLiterals; + +import java.io.File; + +public class StringLiterals { + String[] strings = { + "", + "hello,\tworld", + "hello,\u0009world", + "\u0061", // 'a' + "\0", + "\uFFFF", + "\ufFfF", + "\"", + "\'", + "\n", + "\\", + "test \123", // octal escape sequence for 'S' + "\1234", // octal escape followed by '4' + "\0000", // octal escape \000 followed by '0' + "\u0061567", // escape sequence for 'a' followed by "567" + "\u1234567", // '\u1234' followed by "567" + "\uaBcDeF\u0aB1", // '\uABCD' followed by "eF" followed by '\u0AB1' + "\uD800\uDC00", // surrogate pair + "\uDBFF\uDFFF", // U+10FFFF + // Unpaired surrogates + "\uD800", + "\uDC00", + "hello\uD800hello\uDC00world", // malformed surrogates + // Using Unicode escapes (which are handled during pre-processing) + "\u005C\u0022", // escaped double quote ("\"") + \u0022\u0061\u0022, // "a" + }; + + // The concatenation (`+`) is not a string literal + String[] stringConcatenation = { + // CodeQL erroneously reports this as one literal, see https://github.com/github/codeql/issues/5469 + "hello" + "world", + null + "a", + "a" + null, + "a" + 1, + 1 + "a", + "a" + true, + true + "a", + "a" + 'b', + 'b' + "a", + }; + + Object[] nonStringLiterals = { + 'a', + '"', + true, + null, + 0, + File.pathSeparator + }; + + String nonLiteral; +} diff --git a/java/ql/test/library-tests/literals/stringLiterals/stringLiterals.expected b/java/ql/test/library-tests/literals/stringLiterals/stringLiterals.expected new file mode 100644 index 00000000000..7f8c0e2b5d1 --- /dev/null +++ b/java/ql/test/library-tests/literals/stringLiterals/stringLiterals.expected @@ -0,0 +1,33 @@ +| StringLiterals.java:7:3:7:4 | "" | | | +| StringLiterals.java:8:3:8:17 | "hello,\\tworld" | hello,\tworld | hello,\tworld | +| StringLiterals.java:9:3:9:21 | "hello,\\u0009world" | hello,\tworld | hello,\tworld | +| StringLiterals.java:10:3:10:10 | "\\u0061" | a | a | +| StringLiterals.java:11:3:11:6 | "\\0" | \u0000 | \u0000 | +| StringLiterals.java:12:3:12:10 | "\\uFFFF" | \uffff | \uffff | +| StringLiterals.java:13:3:13:10 | "\\ufFfF" | \uffff | \uffff | +| StringLiterals.java:14:3:14:6 | "\\"" | " | " | +| StringLiterals.java:15:3:15:6 | "\\'" | ' | ' | +| StringLiterals.java:16:3:16:6 | "\\n" | \n | \n | +| StringLiterals.java:17:3:17:6 | "\\\\" | \\ | \\ | +| StringLiterals.java:18:3:18:13 | "test \\123" | test S | test S | +| StringLiterals.java:19:3:19:9 | "\\1234" | S4 | S4 | +| StringLiterals.java:20:3:20:9 | "\\0000" | \u00000 | \u00000 | +| StringLiterals.java:21:3:21:13 | "\\u0061567" | a567 | a567 | +| StringLiterals.java:22:3:22:13 | "\\u1234567" | \u1234567 | \u1234567 | +| StringLiterals.java:23:3:23:18 | "\\uaBcDeF\\u0aB1" | \uabcdeF\u0ab1 | \uabcdeF\u0ab1 | +| StringLiterals.java:24:3:24:16 | "\\uD800\\uDC00" | \ud800\udc00 | \ud800\udc00 | +| StringLiterals.java:25:3:25:16 | "\\uDBFF\\uDFFF" | \udbff\udfff | \udbff\udfff | +| StringLiterals.java:27:3:27:10 | "\\uD800" | \ufffd | \ufffd | +| StringLiterals.java:28:3:28:10 | "\\uDC00" | \ufffd | \ufffd | +| StringLiterals.java:29:3:29:31 | "hello\\uD800hello\\uDC00world" | hello\ufffdhello\ufffdworld | hello\ufffdhello\ufffdworld | +| StringLiterals.java:31:3:31:16 | "\\u005C\\u0022" | " | " | +| StringLiterals.java:32:8:32:20 | 2\\u0061\\u0022 | a | a | +| StringLiterals.java:38:3:38:19 | "hello" + "world" | helloworld | helloworld | +| StringLiterals.java:39:10:39:12 | "a" | a | a | +| StringLiterals.java:40:3:40:5 | "a" | a | a | +| StringLiterals.java:41:3:41:5 | "a" | a | a | +| StringLiterals.java:42:7:42:9 | "a" | a | a | +| StringLiterals.java:43:3:43:5 | "a" | a | a | +| StringLiterals.java:44:10:44:12 | "a" | a | a | +| StringLiterals.java:45:3:45:5 | "a" | a | a | +| StringLiterals.java:46:9:46:11 | "a" | a | a | diff --git a/java/ql/test/library-tests/literals/literalString.ql b/java/ql/test/library-tests/literals/stringLiterals/stringLiterals.ql similarity index 100% rename from java/ql/test/library-tests/literals/literalString.ql rename to java/ql/test/library-tests/literals/stringLiterals/stringLiterals.ql From 924b7320bc2a640922c697cba03fbcdefb48f700 Mon Sep 17 00:00:00 2001 From: Marcono1234 Date: Sat, 4 Sep 2021 21:24:16 +0200 Subject: [PATCH 683/741] Java: Add test for NullLiteral --- java/ql/lib/semmle/code/java/Expr.qll | 1 + .../literals/nullLiterals/NullLiterals.java | 22 +++++++++++++++++++ .../nullLiterals/nullLiterals.expected | 3 +++ .../literals/nullLiterals/nullLiterals.ql | 4 ++++ 4 files changed, 30 insertions(+) create mode 100644 java/ql/test/library-tests/literals/nullLiterals/NullLiterals.java create mode 100644 java/ql/test/library-tests/literals/nullLiterals/nullLiterals.expected create mode 100644 java/ql/test/library-tests/literals/nullLiterals/nullLiterals.ql diff --git a/java/ql/lib/semmle/code/java/Expr.qll b/java/ql/lib/semmle/code/java/Expr.qll index 3e5d54e6ac6..abc91472494 100755 --- a/java/ql/lib/semmle/code/java/Expr.qll +++ b/java/ql/lib/semmle/code/java/Expr.qll @@ -734,6 +734,7 @@ class StringLiteral extends Literal, @stringliteral { /** The null literal, written `null`. */ class NullLiteral extends Literal, @nullliteral { + // Override these predicates because the inherited ones have no result override string getLiteral() { result = "null" } override string getValue() { result = "null" } diff --git a/java/ql/test/library-tests/literals/nullLiterals/NullLiterals.java b/java/ql/test/library-tests/literals/nullLiterals/NullLiterals.java new file mode 100644 index 00000000000..f0042b2f11a --- /dev/null +++ b/java/ql/test/library-tests/literals/nullLiterals/NullLiterals.java @@ -0,0 +1,22 @@ +package nullLiterals; + +public class NullLiterals { + Object[] nulls = { + null, + // Using Unicode escapes (which are handled during pre-processing) + \u006E\u0075\u006C\u006C, // null + }; + + // The operation expressions (e.g. cast) are not a literal + Object[] operations = { + (Object) null, + }; + + Object[] nonNullLiterals = { + "null", + 0, + Boolean.FALSE, + }; + + Object nonLiteral; +} diff --git a/java/ql/test/library-tests/literals/nullLiterals/nullLiterals.expected b/java/ql/test/library-tests/literals/nullLiterals/nullLiterals.expected new file mode 100644 index 00000000000..0401876d07c --- /dev/null +++ b/java/ql/test/library-tests/literals/nullLiterals/nullLiterals.expected @@ -0,0 +1,3 @@ +| NullLiterals.java:5:3:5:6 | null | null | +| NullLiterals.java:7:8:7:26 | null | null | +| NullLiterals.java:12:12:12:15 | null | null | diff --git a/java/ql/test/library-tests/literals/nullLiterals/nullLiterals.ql b/java/ql/test/library-tests/literals/nullLiterals/nullLiterals.ql new file mode 100644 index 00000000000..4bfcf3c206b --- /dev/null +++ b/java/ql/test/library-tests/literals/nullLiterals/nullLiterals.ql @@ -0,0 +1,4 @@ +import semmle.code.java.Expr + +from NullLiteral lit +select lit, lit.getValue() From 5e4498a53a76fd2bfc2fdb207c6bae6417444e96 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Fri, 1 Oct 2021 16:53:53 +0100 Subject: [PATCH 684/741] Add more models; fix tests --- .../code/java/frameworks/android/Intent.qll | 29 ++- .../dataflow/taintsources/remote.expected | 2 + .../frameworks/android/intent/Test.java | 183 ++++++++++++++++++ .../frameworks/android/intent/models.csv | 27 ++- 4 files changed, 239 insertions(+), 2 deletions(-) diff --git a/java/ql/lib/semmle/code/java/frameworks/android/Intent.qll b/java/ql/lib/semmle/code/java/frameworks/android/Intent.qll index 77c45b1e6f2..50b29e77298 100644 --- a/java/ql/lib/semmle/code/java/frameworks/android/Intent.qll +++ b/java/ql/lib/semmle/code/java/frameworks/android/Intent.qll @@ -79,6 +79,15 @@ private class IntentBundleFlowSteps extends SummaryModelCsv { "android.os;BaseBundle;true;putString;;;Argument[1];MapValue of Argument[-1];value", "android.os;BaseBundle;true;putStringArray;;;Argument[0];MapKey of Argument[-1];value", "android.os;BaseBundle;true;putStringArray;;;Argument[1];MapValue of Argument[-1];value", + "android.os;Bundle;false;Bundle;(Bundle);;MapKey of Argument[0];MapKey of Argument[-1];value", + "android.os;Bundle;false;Bundle;(Bundle);;MapValue of Argument[0];MapValue of Argument[-1];value", + "android.os;Bundle;false;Bundle;(PersistableBundle);;MapKey of Argument[0];MapKey of Argument[-1];value", + "android.os;Bundle;false;Bundle;(PersistableBundle);;MapValue of Argument[0];MapValue of Argument[-1];value", + "android.os;Bundle;true;clone;();;MapKey of Argument[-1];MapKey of ReturnValue;value", + "android.os;Bundle;true;clone;();;MapValue of Argument[-1];MapValue of ReturnValue;value", + // model for Bundle.deepCopy is not fully precise, as some map values aren't copied by value + "android.os;Bundle;true;deepCopy;();;MapKey of Argument[-1];MapKey of ReturnValue;value", + "android.os;Bundle;true;deepCopy;();;MapValue of Argument[-1];MapValue of ReturnValue;value", "android.os;Bundle;true;getBinder;(String);;MapValue of Argument[-1];ReturnValue;value", "android.os;Bundle;true;getBundle;(String);;MapValue of Argument[-1];ReturnValue;value", "android.os;Bundle;true;getByteArray;(String);;MapValue of Argument[-1];ReturnValue;value", @@ -133,6 +142,11 @@ private class IntentBundleFlowSteps extends SummaryModelCsv { "android.os;Bundle;true;putStringArrayList;;;Argument[1];MapValue of Argument[-1];value", "android.os;Bundle;true;readFromParcel;;;Argument[0];MapKey of Argument[-1];taint", "android.os;Bundle;true;readFromParcel;;;Argument[0];MapValue of Argument[-1];taint", + // currently only the Extras part of the intent is fully modelled + "android.content;Intent;true;addCategory;;;Argument[-1];ReturnValue;value", + "android.content;Intent;true;addFlags;;;Argument[-1];ReturnValue;value", + "android.content;Intent;false;Intent;(Intent);;MapKey of SyntheticField[android.content.Intent.extras] of Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value", + "android.content;Intent;false;Intent;(Intent);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[0];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value", "android.content;Intent;true;getExtras;();;SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value", "android.content;Intent;true;getBundleExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value", "android.content;Intent;true;getByteArrayExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value", @@ -172,7 +186,20 @@ private class IntentBundleFlowSteps extends SummaryModelCsv { "android.content;Intent;true;replaceExtras;(Bundle);;Argument[-1];ReturnValue;value", "android.content;Intent;true;replaceExtras;(Intent);;MapKey of SyntheticField[android.content.Intent.extras] of Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value", "android.content;Intent;true;replaceExtras;(Intent);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[0];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value", - "android.content;Intent;true;replaceExtras;(Intent);;Argument[-1];ReturnValue;value" + "android.content;Intent;true;replaceExtras;(Intent);;Argument[-1];ReturnValue;value", + "android.content;Intent;true;setAction;;;Argument[-1];ReturnValue;value", + "android.content;Intent;true;setClass;;;Argument[-1];ReturnValue;value", + "android.content;Intent;true;setClassName;;;Argument[-1];ReturnValue;value", + "android.content;Intent;true;setComponent;;;Argument[-1];ReturnValue;value", + "android.content;Intent;true;setData;;;Argument[-1];ReturnValue;value", + "android.content;Intent;true;setDataAndNormalize;;;Argument[-1];ReturnValue;value", + "android.content;Intent;true;setDataAndType;;;Argument[-1];ReturnValue;value", + "android.content;Intent;true;setDataAndTypeAndNormalize;;;Argument[-1];ReturnValue;value", + "android.content;Intent;true;setFlags;;;Argument[-1];ReturnValue;value", + "android.content;Intent;true;setIdentifier;;;Argument[-1];ReturnValue;value", + "android.content;Intent;true;setPackage;;;Argument[-1];ReturnValue;value", + "android.content;Intent;true;setType;;;Argument[-1];ReturnValue;value", + "android.content;Intent;true;setTypeAndNormalize;;;Argument[-1];ReturnValue;value" ] } } diff --git a/java/ql/test/library-tests/dataflow/taintsources/remote.expected b/java/ql/test/library-tests/dataflow/taintsources/remote.expected index f3b5685d4b9..f1e5b4e3ff1 100644 --- a/java/ql/test/library-tests/dataflow/taintsources/remote.expected +++ b/java/ql/test/library-tests/dataflow/taintsources/remote.expected @@ -14,6 +14,8 @@ | IntentSources.java:16:20:16:30 | getIntent(...) | IntentSources.java:16:20:16:52 | getStringExtra(...) | | IntentSources.java:16:20:16:30 | getIntent(...) | IntentSources.java:17:29:17:35 | trouble | | IntentSources.java:23:20:23:30 | getIntent(...) | ../../../stubs/google-android-9.0.0/android/content/Intent.java:1358:19:1358:27 | parameter this | +| IntentSources.java:23:20:23:30 | getIntent(...) | ../../../stubs/google-android-9.0.0/android/os/BaseBundle.java:600:19:600:27 | [summary] read: of argument -1 in getString | +| IntentSources.java:23:20:23:30 | getIntent(...) | ../../../stubs/google-android-9.0.0/android/os/BaseBundle.java:600:19:600:27 | [summary] to write: return (return) in getString | | IntentSources.java:23:20:23:30 | getIntent(...) | ../../../stubs/google-android-9.0.0/android/os/BaseBundle.java:600:19:600:27 | parameter this | | IntentSources.java:23:20:23:30 | getIntent(...) | IntentSources.java:23:20:23:30 | getIntent(...) | | IntentSources.java:23:20:23:30 | getIntent(...) | IntentSources.java:23:20:23:42 | getExtras(...) | diff --git a/java/ql/test/library-tests/frameworks/android/intent/Test.java b/java/ql/test/library-tests/frameworks/android/intent/Test.java index 525986aeb45..725f4880da0 100644 --- a/java/ql/test/library-tests/frameworks/android/intent/Test.java +++ b/java/ql/test/library-tests/frameworks/android/intent/Test.java @@ -1,5 +1,6 @@ package generatedtest; +import android.content.Context; import android.content.Intent; import android.os.BaseBundle; import android.os.Bundle; @@ -27,6 +28,34 @@ public class Test { public void test() throws Exception { + { + // "android.content;Intent;false;Intent;(Intent);;MapKey of SyntheticField[android.content.Intent.extras] of Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value" + Intent out = null; + Intent in = (Intent)newWithIntent_extrasDefault(newWithMapKeyDefault(source())); + out = new Intent(in); + sink(getMapKeyDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + } + { + // "android.content;Intent;false;Intent;(Intent);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[0];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value" + Intent out = null; + Intent in = (Intent)newWithIntent_extrasDefault(newWithMapValueDefault(source())); + out = new Intent(in); + sink(getMapValueDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + } + { + // "android.content;Intent;true;addCategory;;;Argument[-1];ReturnValue;value" + Intent out = null; + Intent in = (Intent)source(); + out = in.addCategory(null); + sink(out); // $ hasValueFlow + } + { + // "android.content;Intent;true;addFlags;;;Argument[-1];ReturnValue;value" + Intent out = null; + Intent in = (Intent)source(); + out = in.addFlags(0); + sink(out); // $ hasValueFlow + } { // "android.content;Intent;true;getBundleExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value" Bundle out = null; @@ -790,6 +819,104 @@ public class Test { out.replaceExtras(in); sink(getMapValueDefault(getIntent_extrasDefault(out))); // $ hasValueFlow } + { + // "android.content;Intent;true;setAction;;;Argument[-1];ReturnValue;value" + Intent out = null; + Intent in = (Intent)source(); + out = in.setAction(null); + sink(out); // $ hasValueFlow + } + { + // "android.content;Intent;true;setClass;;;Argument[-1];ReturnValue;value" + Intent out = null; + Intent in = (Intent)source(); + out = in.setClass(null, null); + sink(out); // $ hasValueFlow + } + { + // "android.content;Intent;true;setClassName;;;Argument[-1];ReturnValue;value" + Intent out = null; + Intent in = (Intent)source(); + out = in.setClassName((String)null, (String)null); + sink(out); // $ hasValueFlow + } + { + // "android.content;Intent;true;setClassName;;;Argument[-1];ReturnValue;value" + Intent out = null; + Intent in = (Intent)source(); + out = in.setClassName((Context)null, (String)null); + sink(out); // $ hasValueFlow + } + { + // "android.content;Intent;true;setComponent;;;Argument[-1];ReturnValue;value" + Intent out = null; + Intent in = (Intent)source(); + out = in.setComponent(null); + sink(out); // $ hasValueFlow + } + { + // "android.content;Intent;true;setData;;;Argument[-1];ReturnValue;value" + Intent out = null; + Intent in = (Intent)source(); + out = in.setData(null); + sink(out); // $ hasValueFlow + } + { + // "android.content;Intent;true;setDataAndNormalize;;;Argument[-1];ReturnValue;value" + Intent out = null; + Intent in = (Intent)source(); + out = in.setDataAndNormalize(null); + sink(out); // $ hasValueFlow + } + { + // "android.content;Intent;true;setDataAndType;;;Argument[-1];ReturnValue;value" + Intent out = null; + Intent in = (Intent)source(); + out = in.setDataAndType(null, null); + sink(out); // $ hasValueFlow + } + { + // "android.content;Intent;true;setDataAndTypeAndNormalize;;;Argument[-1];ReturnValue;value" + Intent out = null; + Intent in = (Intent)source(); + out = in.setDataAndTypeAndNormalize(null, null); + sink(out); // $ hasValueFlow + } + { + // "android.content;Intent;true;setFlags;;;Argument[-1];ReturnValue;value" + Intent out = null; + Intent in = (Intent)source(); + out = in.setFlags(0); + sink(out); // $ hasValueFlow + } + { + // "android.content;Intent;true;setIdentifier;;;Argument[-1];ReturnValue;value" + Intent out = null; + Intent in = (Intent)source(); + out = in.setIdentifier(null); + sink(out); // $ hasValueFlow + } + { + // "android.content;Intent;true;setPackage;;;Argument[-1];ReturnValue;value" + Intent out = null; + Intent in = (Intent)source(); + out = in.setPackage(null); + sink(out); // $ hasValueFlow + } + { + // "android.content;Intent;true;setType;;;Argument[-1];ReturnValue;value" + Intent out = null; + Intent in = (Intent)source(); + out = in.setType(null); + sink(out); // $ hasValueFlow + } + { + // "android.content;Intent;true;setTypeAndNormalize;;;Argument[-1];ReturnValue;value" + Intent out = null; + Intent in = (Intent)source(); + out = in.setTypeAndNormalize(null); + sink(out); // $ hasValueFlow + } { // "android.os;BaseBundle;true;get;(String);;MapValue of Argument[-1];ReturnValue;value" Object out = null; @@ -931,6 +1058,62 @@ public class Test { out.putStringArray(null, in); sink(getMapValueDefault(out)); // $ hasValueFlow } + { + // "android.os;Bundle;false;Bundle;(Bundle);;MapKey of Argument[0];MapKey of Argument[-1];value" + Bundle out = null; + Bundle in = (Bundle)newWithMapKeyDefault(source()); + out = new Bundle(in); + sink(getMapKeyDefault(out)); // $ hasValueFlow + } + { + // "android.os;Bundle;false;Bundle;(Bundle);;MapValue of Argument[0];MapValue of Argument[-1];value" + Bundle out = null; + Bundle in = (Bundle)newWithMapValueDefault(source()); + out = new Bundle(in); + sink(getMapValueDefault(out)); // $ hasValueFlow + } + { + // "android.os;Bundle;false;Bundle;(PersistableBundle);;MapKey of Argument[0];MapKey of Argument[-1];value" + Bundle out = null; + PersistableBundle in = (PersistableBundle)newWithMapKeyDefault(source()); + out = new Bundle(in); + sink(getMapKeyDefault(out)); // $ hasValueFlow + } + { + // "android.os;Bundle;false;Bundle;(PersistableBundle);;MapValue of Argument[0];MapValue of Argument[-1];value" + Bundle out = null; + PersistableBundle in = (PersistableBundle)newWithMapValueDefault(source()); + out = new Bundle(in); + sink(getMapValueDefault(out)); // $ hasValueFlow + } + { + // "android.os;Bundle;true;clone;();;MapKey of Argument[-1];MapKey of ReturnValue;value" + Object out = null; + Bundle in = (Bundle)newWithMapKeyDefault(source()); + out = in.clone(); + sink(getMapKeyDefault(out)); // $ hasValueFlow + } + { + // "android.os;Bundle;true;clone;();;MapValue of Argument[-1];MapValue of ReturnValue;value" + Object out = null; + Bundle in = (Bundle)newWithMapValueDefault(source()); + out = in.clone(); + sink(getMapValueDefault(out)); // $ hasValueFlow + } + { + // "android.os;Bundle;true;deepCopy;();;MapKey of Argument[-1];MapKey of ReturnValue;value" + Bundle out = null; + Bundle in = (Bundle)newWithMapKeyDefault(source()); + out = in.deepCopy(); + sink(getMapKeyDefault(out)); // $ hasValueFlow + } + { + // "android.os;Bundle;true;deepCopy;();;MapValue of Argument[-1];MapValue of ReturnValue;value" + Bundle out = null; + Bundle in = (Bundle)newWithMapValueDefault(source()); + out = in.deepCopy(); + sink(getMapValueDefault(out)); // $ hasValueFlow + } { // "android.os;Bundle;true;getBinder;(String);;MapValue of Argument[-1];ReturnValue;value" IBinder out = null; diff --git a/java/ql/test/library-tests/frameworks/android/intent/models.csv b/java/ql/test/library-tests/frameworks/android/intent/models.csv index 83be9bbcb0c..5a58fd36765 100644 --- a/java/ql/test/library-tests/frameworks/android/intent/models.csv +++ b/java/ql/test/library-tests/frameworks/android/intent/models.csv @@ -18,6 +18,14 @@ android.os;BaseBundle;true;putString;;;Argument[0];MapKey of Argument[-1];value android.os;BaseBundle;true;putString;;;Argument[1];MapValue of Argument[-1];value android.os;BaseBundle;true;putStringArray;;;Argument[0];MapKey of Argument[-1];value android.os;BaseBundle;true;putStringArray;;;Argument[1];MapValue of Argument[-1];value +android.os;Bundle;false;Bundle;(Bundle);;MapKey of Argument[0];MapKey of Argument[-1];value +android.os;Bundle;false;Bundle;(Bundle);;MapValue of Argument[0];MapValue of Argument[-1];value +android.os;Bundle;false;Bundle;(PersistableBundle);;MapKey of Argument[0];MapKey of Argument[-1];value +android.os;Bundle;false;Bundle;(PersistableBundle);;MapValue of Argument[0];MapValue of Argument[-1];value +android.os;Bundle;true;clone;();;MapKey of Argument[-1];MapKey of ReturnValue;value +android.os;Bundle;true;clone;();;MapValue of Argument[-1];MapValue of ReturnValue;value +android.os;Bundle;true;deepCopy;();;MapKey of Argument[-1];MapKey of ReturnValue;value +android.os;Bundle;true;deepCopy;();;MapValue of Argument[-1];MapValue of ReturnValue;value android.os;Bundle;true;getBinder;(String);;MapValue of Argument[-1];ReturnValue;value android.os;Bundle;true;getBundle;(String);;MapValue of Argument[-1];ReturnValue;value android.os;Bundle;true;getByteArray;(String);;MapValue of Argument[-1];ReturnValue;value @@ -72,6 +80,10 @@ android.os;Bundle;true;putStringArrayList;;;Argument[0];MapKey of Argument[-1];v android.os;Bundle;true;putStringArrayList;;;Argument[1];MapValue of Argument[-1];value android.os;Bundle;true;readFromParcel;;;Argument[0];MapKey of Argument[-1];taint android.os;Bundle;true;readFromParcel;;;Argument[0];MapValue of Argument[-1];taint +android.content;Intent;true;addCategory;;;Argument[-1];ReturnValue;value +android.content;Intent;true;addFlags;;;Argument[-1];ReturnValue;value +android.content;Intent;false;Intent;(Intent);;MapKey of SyntheticField[android.content.Intent.extras] of Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value +android.content;Intent;false;Intent;(Intent);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[0];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value android.content;Intent;true;getExtras;();;SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value android.content;Intent;true;getBundleExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value android.content;Intent;true;getByteArrayExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value @@ -111,4 +123,17 @@ android.content;Intent;true;replaceExtras;(Bundle);;MapValue of Argument[0];MapV android.content;Intent;true;replaceExtras;(Bundle);;Argument[-1];ReturnValue;value android.content;Intent;true;replaceExtras;(Intent);;MapKey of SyntheticField[android.content.Intent.extras] of Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value android.content;Intent;true;replaceExtras;(Intent);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[0];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value -android.content;Intent;true;replaceExtras;(Intent);;Argument[-1];ReturnValue;value \ No newline at end of file +android.content;Intent;true;replaceExtras;(Intent);;Argument[-1];ReturnValue;value +android.content;Intent;true;setAction;;;Argument[-1];ReturnValue;value +android.content;Intent;true;setClass;;;Argument[-1];ReturnValue;value +android.content;Intent;true;setClassName;;;Argument[-1];ReturnValue;value +android.content;Intent;true;setComponent;;;Argument[-1];ReturnValue;value +android.content;Intent;true;setData;;;Argument[-1];ReturnValue;value +android.content;Intent;true;setDataAndNormalize;;;Argument[-1];ReturnValue;value +android.content;Intent;true;setDataAndType;;;Argument[-1];ReturnValue;value +android.content;Intent;true;setDataAndTypeAndNormalize;;;Argument[-1];ReturnValue;value +android.content;Intent;true;setFlags;;;Argument[-1];ReturnValue;value +android.content;Intent;true;setIdentifier;;;Argument[-1];ReturnValue;value +android.content;Intent;true;setPackage;;;Argument[-1];ReturnValue;value +android.content;Intent;true;setType;;;Argument[-1];ReturnValue;value +android.content;Intent;true;setTypeAndNormalize;;;Argument[-1];ReturnValue;value \ No newline at end of file From 085701c7dbef2358629b709369e9714af61e4bdc Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Fri, 1 Oct 2021 17:11:12 +0100 Subject: [PATCH 685/741] Remove models.csv --- .../frameworks/android/intent/models.csv | 139 ------------------ 1 file changed, 139 deletions(-) delete mode 100644 java/ql/test/library-tests/frameworks/android/intent/models.csv diff --git a/java/ql/test/library-tests/frameworks/android/intent/models.csv b/java/ql/test/library-tests/frameworks/android/intent/models.csv deleted file mode 100644 index 5a58fd36765..00000000000 --- a/java/ql/test/library-tests/frameworks/android/intent/models.csv +++ /dev/null @@ -1,139 +0,0 @@ -android.os;BaseBundle;true;get;(String);;MapValue of Argument[-1];ReturnValue;value -android.os;BaseBundle;true;getString;(String);;MapValue of Argument[-1];ReturnValue;value -android.os;BaseBundle;true;getString;(String,String);;MapValue of Argument[-1];ReturnValue;value -android.os;BaseBundle;true;getString;(String,String);;Argument[1];ReturnValue;value -android.os;BaseBundle;true;getStringArray;(String);;MapValue of Argument[-1];ReturnValue;value -android.os;BaseBundle;true;keySet;();;MapKey of Argument[-1];Element of ReturnValue;value -android.os;BaseBundle;true;putAll;(PersistableBundle);;MapKey of Argument[0];MapKey of Argument[-1];value -android.os;BaseBundle;true;putAll;(PersistableBundle);;MapValue of Argument[0];MapValue of Argument[-1];value -android.os;BaseBundle;true;putBoolean;;;Argument[0];MapKey of Argument[-1];value -android.os;BaseBundle;true;putBooleanArray;;;Argument[0];MapKey of Argument[-1];value -android.os;BaseBundle;true;putDouble;;;Argument[0];MapKey of Argument[-1];value -android.os;BaseBundle;true;putDoubleArray;;;Argument[0];MapKey of Argument[-1];value -android.os;BaseBundle;true;putInt;;;Argument[0];MapKey of Argument[-1];value -android.os;BaseBundle;true;putIntArray;;;Argument[0];MapKey of Argument[-1];value -android.os;BaseBundle;true;putLong;;;Argument[0];MapKey of Argument[-1];value -android.os;BaseBundle;true;putLongArray;;;Argument[0];MapKey of Argument[-1];value -android.os;BaseBundle;true;putString;;;Argument[0];MapKey of Argument[-1];value -android.os;BaseBundle;true;putString;;;Argument[1];MapValue of Argument[-1];value -android.os;BaseBundle;true;putStringArray;;;Argument[0];MapKey of Argument[-1];value -android.os;BaseBundle;true;putStringArray;;;Argument[1];MapValue of Argument[-1];value -android.os;Bundle;false;Bundle;(Bundle);;MapKey of Argument[0];MapKey of Argument[-1];value -android.os;Bundle;false;Bundle;(Bundle);;MapValue of Argument[0];MapValue of Argument[-1];value -android.os;Bundle;false;Bundle;(PersistableBundle);;MapKey of Argument[0];MapKey of Argument[-1];value -android.os;Bundle;false;Bundle;(PersistableBundle);;MapValue of Argument[0];MapValue of Argument[-1];value -android.os;Bundle;true;clone;();;MapKey of Argument[-1];MapKey of ReturnValue;value -android.os;Bundle;true;clone;();;MapValue of Argument[-1];MapValue of ReturnValue;value -android.os;Bundle;true;deepCopy;();;MapKey of Argument[-1];MapKey of ReturnValue;value -android.os;Bundle;true;deepCopy;();;MapValue of Argument[-1];MapValue of ReturnValue;value -android.os;Bundle;true;getBinder;(String);;MapValue of Argument[-1];ReturnValue;value -android.os;Bundle;true;getBundle;(String);;MapValue of Argument[-1];ReturnValue;value -android.os;Bundle;true;getByteArray;(String);;MapValue of Argument[-1];ReturnValue;value -android.os;Bundle;true;getCharArray;(String);;MapValue of Argument[-1];ReturnValue;value -android.os;Bundle;true;getCharSequence;(String);;MapValue of Argument[-1];ReturnValue;value -android.os;Bundle;true;getCharSequence;(String,CharSequence);;MapValue of Argument[-1];ReturnValue;value -android.os;Bundle;true;getCharSequence;(String,CharSequence);;Argument[1];ReturnValue;value -android.os;Bundle;true;getCharSequenceArray;(String);;MapValue of Argument[-1];ReturnValue;value -android.os;Bundle;true;getCharSequenceArrayList;(String);;MapValue of Argument[-1];ReturnValue;value -android.os;Bundle;true;getParcelable;(String);;MapValue of Argument[-1];ReturnValue;value -android.os;Bundle;true;getParcelableArray;(String);;MapValue of Argument[-1];ReturnValue;value -android.os;Bundle;true;getParcelableArrayList;(String);;MapValue of Argument[-1];ReturnValue;value -android.os;Bundle;true;getSerializable;(String);;MapValue of Argument[-1];ReturnValue;value -android.os;Bundle;true;getSparseParcelableArray;(String);;MapValue of Argument[-1];ReturnValue;value -android.os;Bundle;true;getStringArrayList;(String);;MapValue of Argument[-1];ReturnValue;value -android.os;Bundle;true;putAll;(Bundle);;MapKey of Argument[0];MapKey of Argument[-1];value -android.os;Bundle;true;putAll;(Bundle);;MapValue of Argument[0];MapValue of Argument[-1];value -android.os;Bundle;true;putBinder;;;Argument[0];MapKey of Argument[-1];value -android.os;Bundle;true;putBinder;;;Argument[1];MapValue of Argument[-1];value -android.os;Bundle;true;putBundle;;;Argument[0];MapKey of Argument[-1];value -android.os;Bundle;true;putBundle;;;Argument[1];MapValue of Argument[-1];value -android.os;Bundle;true;putByte;;;Argument[0];MapKey of Argument[-1];value -android.os;Bundle;true;putByteArray;;;Argument[0];MapKey of Argument[-1];value -android.os;Bundle;true;putByteArray;;;Argument[1];MapValue of Argument[-1];value -android.os;Bundle;true;putChar;;;Argument[0];MapKey of Argument[-1];value -android.os;Bundle;true;putCharArray;;;Argument[0];MapKey of Argument[-1];value -android.os;Bundle;true;putCharArray;;;Argument[1];MapValue of Argument[-1];value -android.os;Bundle;true;putCharSequence;;;Argument[0];MapKey of Argument[-1];value -android.os;Bundle;true;putCharSequence;;;Argument[1];MapValue of Argument[-1];value -android.os;Bundle;true;putCharSequenceArray;;;Argument[0];MapKey of Argument[-1];value -android.os;Bundle;true;putCharSequenceArray;;;Argument[1];MapValue of Argument[-1];value -android.os;Bundle;true;putCharSequenceArrayList;;;Argument[0];MapKey of Argument[-1];value -android.os;Bundle;true;putCharSequenceArrayList;;;Argument[1];MapValue of Argument[-1];value -android.os;Bundle;true;putFloat;;;Argument[0];MapKey of Argument[-1];value -android.os;Bundle;true;putFloatArray;;;Argument[0];MapKey of Argument[-1];value -android.os;Bundle;true;putIntegerArrayList;;;Argument[0];MapKey of Argument[-1];value -android.os;Bundle;true;putParcelable;;;Argument[0];MapKey of Argument[-1];value -android.os;Bundle;true;putParcelable;;;Argument[1];MapValue of Argument[-1];value -android.os;Bundle;true;putParcelableArray;;;Argument[0];MapKey of Argument[-1];value -android.os;Bundle;true;putParcelableArray;;;Argument[1];MapValue of Argument[-1];value -android.os;Bundle;true;putParcelableArrayList;;;Argument[0];MapKey of Argument[-1];value -android.os;Bundle;true;putParcelableArrayList;;;Argument[1];MapValue of Argument[-1];value -android.os;Bundle;true;putSerializable;;;Argument[0];MapKey of Argument[-1];value -android.os;Bundle;true;putSerializable;;;Argument[1];MapValue of Argument[-1];value -android.os;Bundle;true;putShort;;;Argument[0];MapKey of Argument[-1];value -android.os;Bundle;true;putShortArray;;;Argument[0];MapKey of Argument[-1];value -android.os;Bundle;true;putSize;;;Argument[0];MapKey of Argument[-1];value -android.os;Bundle;true;putSizeF;;;Argument[0];MapKey of Argument[-1];value -android.os;Bundle;true;putSparseParcelableArray;;;Argument[0];MapKey of Argument[-1];value -android.os;Bundle;true;putSparseParcelableArray;;;Argument[1];MapValue of Argument[-1];value -android.os;Bundle;true;putStringArrayList;;;Argument[0];MapKey of Argument[-1];value -android.os;Bundle;true;putStringArrayList;;;Argument[1];MapValue of Argument[-1];value -android.os;Bundle;true;readFromParcel;;;Argument[0];MapKey of Argument[-1];taint -android.os;Bundle;true;readFromParcel;;;Argument[0];MapValue of Argument[-1];taint -android.content;Intent;true;addCategory;;;Argument[-1];ReturnValue;value -android.content;Intent;true;addFlags;;;Argument[-1];ReturnValue;value -android.content;Intent;false;Intent;(Intent);;MapKey of SyntheticField[android.content.Intent.extras] of Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value -android.content;Intent;false;Intent;(Intent);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[0];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value -android.content;Intent;true;getExtras;();;SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value -android.content;Intent;true;getBundleExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value -android.content;Intent;true;getByteArrayExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value -android.content;Intent;true;getCharArrayExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value -android.content;Intent;true;getCharSequenceArrayExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value -android.content;Intent;true;getCharSequenceArrayListExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value -android.content;Intent;true;getCharSequenceExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value -android.content;Intent;true;getParcelableArrayExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value -android.content;Intent;true;getParcelableArrayListExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value -android.content;Intent;true;getParcelableExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value -android.content;Intent;true;getSerializableExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value -android.content;Intent;true;getStringArrayExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value -android.content;Intent;true;getStringArrayListExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value -android.content;Intent;true;getStringExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value -android.content;Intent;true;putCharSequenceArrayListExtra;;;Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value -android.content;Intent;true;putCharSequenceArrayListExtra;;;Argument[1];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value -android.content;Intent;true;putCharSequenceArrayListExtra;;;Argument[-1];ReturnValue;value -android.content;Intent;true;putExtra;;;Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value -android.content;Intent;true;putExtra;;;Argument[1];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value -android.content;Intent;true;putExtra;;;Argument[-1];ReturnValue;value -android.content;Intent;true;putIntegerArrayListExtra;;;Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value -android.content;Intent;true;putIntegerArrayListExtra;;;Argument[-1];ReturnValue;value -android.content;Intent;true;putParcelableArrayListExtra;;;Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value -android.content;Intent;true;putParcelableArrayListExtra;;;Argument[1];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value -android.content;Intent;true;putParcelableArrayListExtra;;;Argument[-1];ReturnValue;value -android.content;Intent;true;putStringArrayListExtra;;;Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value -android.content;Intent;true;putStringArrayListExtra;;;Argument[1];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value -android.content;Intent;true;putStringArrayListExtra;;;Argument[-1];ReturnValue;value -android.content;Intent;true;putExtras;(Bundle);;MapKey of Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value -android.content;Intent;true;putExtras;(Bundle);;MapValue of Argument[0];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value -android.content;Intent;true;putExtras;(Bundle);;Argument[-1];ReturnValue;value -android.content;Intent;true;putExtras;(Intent);;MapKey of SyntheticField[android.content.Intent.extras] of Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value -android.content;Intent;true;putExtras;(Intent);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[0];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value -android.content;Intent;true;putExtras;(Intent);;Argument[-1];ReturnValue;value -android.content;Intent;true;replaceExtras;(Bundle);;MapKey of Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value -android.content;Intent;true;replaceExtras;(Bundle);;MapValue of Argument[0];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value -android.content;Intent;true;replaceExtras;(Bundle);;Argument[-1];ReturnValue;value -android.content;Intent;true;replaceExtras;(Intent);;MapKey of SyntheticField[android.content.Intent.extras] of Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value -android.content;Intent;true;replaceExtras;(Intent);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[0];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value -android.content;Intent;true;replaceExtras;(Intent);;Argument[-1];ReturnValue;value -android.content;Intent;true;setAction;;;Argument[-1];ReturnValue;value -android.content;Intent;true;setClass;;;Argument[-1];ReturnValue;value -android.content;Intent;true;setClassName;;;Argument[-1];ReturnValue;value -android.content;Intent;true;setComponent;;;Argument[-1];ReturnValue;value -android.content;Intent;true;setData;;;Argument[-1];ReturnValue;value -android.content;Intent;true;setDataAndNormalize;;;Argument[-1];ReturnValue;value -android.content;Intent;true;setDataAndType;;;Argument[-1];ReturnValue;value -android.content;Intent;true;setDataAndTypeAndNormalize;;;Argument[-1];ReturnValue;value -android.content;Intent;true;setFlags;;;Argument[-1];ReturnValue;value -android.content;Intent;true;setIdentifier;;;Argument[-1];ReturnValue;value -android.content;Intent;true;setPackage;;;Argument[-1];ReturnValue;value -android.content;Intent;true;setType;;;Argument[-1];ReturnValue;value -android.content;Intent;true;setTypeAndNormalize;;;Argument[-1];ReturnValue;value \ No newline at end of file From e3fed559453ab1b855838c8afb8ebe31d19d6c19 Mon Sep 17 00:00:00 2001 From: Marcono1234 Date: Tue, 7 Sep 2021 00:02:12 +0200 Subject: [PATCH 686/741] Java: Add tests for text blocks --- java/ql/lib/semmle/code/java/Expr.qll | 10 ++- .../stringLiterals/StringLiterals.java | 54 +++++++++++++ .../literals/stringLiterals/options | 1 + .../stringLiterals/stringLiterals.expected | 81 +++++++++++-------- .../literals/stringLiterals/stringLiterals.ql | 8 +- 5 files changed, 117 insertions(+), 37 deletions(-) create mode 100644 java/ql/test/library-tests/literals/stringLiterals/options diff --git a/java/ql/lib/semmle/code/java/Expr.qll b/java/ql/lib/semmle/code/java/Expr.qll index abc91472494..b83f5332756 100755 --- a/java/ql/lib/semmle/code/java/Expr.qll +++ b/java/ql/lib/semmle/code/java/Expr.qll @@ -719,7 +719,15 @@ class CharacterLiteral extends Literal, @characterliteral { override string getAPrimaryQlClass() { result = "CharacterLiteral" } } -/** A string literal. For example, `"hello world"`. */ +/** + * A string literal or text block (Java 15 feature). For example, `"hello world"` + * or + * ```java + * """ + * Text with "quotes" + * """ + * ``` + */ class StringLiteral extends Literal, @stringliteral { /** * Gets the literal string without the quotes. diff --git a/java/ql/test/library-tests/literals/stringLiterals/StringLiterals.java b/java/ql/test/library-tests/literals/stringLiterals/StringLiterals.java index 7325cf3e340..9c0c55b12e5 100644 --- a/java/ql/test/library-tests/literals/stringLiterals/StringLiterals.java +++ b/java/ql/test/library-tests/literals/stringLiterals/StringLiterals.java @@ -32,10 +32,64 @@ public class StringLiterals { \u0022\u0061\u0022, // "a" }; + String[] textBlocks = { + // trailing whitespaces after """ (will be ignored) + """ + test "text" and escaped \u0022 + """, + // Indentation tests + """ + indented + """, + """ + no indentation last line + """, // Line is blank, therefore not indented + """ + indentation last line + \s""", // Line is not blank therefore indented + """ + not-indented + """, + """ + indented + """, + """ + not-indented + """, + """ + spaces (only single space is trimmed) + tab + """, + """ + end on same line""", + """ + trailing spaces ignored: + not ignored: \s + """, + """ + 3 quotes:""\"""", + """ + line \ + continuation \ + """, + """ + Explicit line breaks:\n + \r\n + \r + """, + // Using Unicode escapes (which are handled during pre-processing) + // Currently not detected by StringLiteral.isTextBlock() + \uuu0022"\u0022 + test + \u0022\uu0022", + }; + // The concatenation (`+`) is not a string literal String[] stringConcatenation = { // CodeQL erroneously reports this as one literal, see https://github.com/github/codeql/issues/5469 "hello" + "world", + """ + hello""" + "world", null + "a", "a" + null, "a" + 1, diff --git a/java/ql/test/library-tests/literals/stringLiterals/options b/java/ql/test/library-tests/literals/stringLiterals/options new file mode 100644 index 00000000000..bb7dba26161 --- /dev/null +++ b/java/ql/test/library-tests/literals/stringLiterals/options @@ -0,0 +1 @@ +//semmle-extractor-options: --javac-args -source 15 -target 15 diff --git a/java/ql/test/library-tests/literals/stringLiterals/stringLiterals.expected b/java/ql/test/library-tests/literals/stringLiterals/stringLiterals.expected index 7f8c0e2b5d1..bf91a56e723 100644 --- a/java/ql/test/library-tests/literals/stringLiterals/stringLiterals.expected +++ b/java/ql/test/library-tests/literals/stringLiterals/stringLiterals.expected @@ -1,33 +1,48 @@ -| StringLiterals.java:7:3:7:4 | "" | | | -| StringLiterals.java:8:3:8:17 | "hello,\\tworld" | hello,\tworld | hello,\tworld | -| StringLiterals.java:9:3:9:21 | "hello,\\u0009world" | hello,\tworld | hello,\tworld | -| StringLiterals.java:10:3:10:10 | "\\u0061" | a | a | -| StringLiterals.java:11:3:11:6 | "\\0" | \u0000 | \u0000 | -| StringLiterals.java:12:3:12:10 | "\\uFFFF" | \uffff | \uffff | -| StringLiterals.java:13:3:13:10 | "\\ufFfF" | \uffff | \uffff | -| StringLiterals.java:14:3:14:6 | "\\"" | " | " | -| StringLiterals.java:15:3:15:6 | "\\'" | ' | ' | -| StringLiterals.java:16:3:16:6 | "\\n" | \n | \n | -| StringLiterals.java:17:3:17:6 | "\\\\" | \\ | \\ | -| StringLiterals.java:18:3:18:13 | "test \\123" | test S | test S | -| StringLiterals.java:19:3:19:9 | "\\1234" | S4 | S4 | -| StringLiterals.java:20:3:20:9 | "\\0000" | \u00000 | \u00000 | -| StringLiterals.java:21:3:21:13 | "\\u0061567" | a567 | a567 | -| StringLiterals.java:22:3:22:13 | "\\u1234567" | \u1234567 | \u1234567 | -| StringLiterals.java:23:3:23:18 | "\\uaBcDeF\\u0aB1" | \uabcdeF\u0ab1 | \uabcdeF\u0ab1 | -| StringLiterals.java:24:3:24:16 | "\\uD800\\uDC00" | \ud800\udc00 | \ud800\udc00 | -| StringLiterals.java:25:3:25:16 | "\\uDBFF\\uDFFF" | \udbff\udfff | \udbff\udfff | -| StringLiterals.java:27:3:27:10 | "\\uD800" | \ufffd | \ufffd | -| StringLiterals.java:28:3:28:10 | "\\uDC00" | \ufffd | \ufffd | -| StringLiterals.java:29:3:29:31 | "hello\\uD800hello\\uDC00world" | hello\ufffdhello\ufffdworld | hello\ufffdhello\ufffdworld | -| StringLiterals.java:31:3:31:16 | "\\u005C\\u0022" | " | " | -| StringLiterals.java:32:8:32:20 | 2\\u0061\\u0022 | a | a | -| StringLiterals.java:38:3:38:19 | "hello" + "world" | helloworld | helloworld | -| StringLiterals.java:39:10:39:12 | "a" | a | a | -| StringLiterals.java:40:3:40:5 | "a" | a | a | -| StringLiterals.java:41:3:41:5 | "a" | a | a | -| StringLiterals.java:42:7:42:9 | "a" | a | a | -| StringLiterals.java:43:3:43:5 | "a" | a | a | -| StringLiterals.java:44:10:44:12 | "a" | a | a | -| StringLiterals.java:45:3:45:5 | "a" | a | a | -| StringLiterals.java:46:9:46:11 | "a" | a | a | +| StringLiterals.java:7:3:7:4 | "" | | | | +| StringLiterals.java:8:3:8:17 | "hello,\\tworld" | hello,\tworld | hello,\tworld | | +| StringLiterals.java:9:3:9:21 | "hello,\\u0009world" | hello,\tworld | hello,\tworld | | +| StringLiterals.java:10:3:10:10 | "\\u0061" | a | a | | +| StringLiterals.java:11:3:11:6 | "\\0" | \u0000 | \u0000 | | +| StringLiterals.java:12:3:12:10 | "\\uFFFF" | \uffff | \uffff | | +| StringLiterals.java:13:3:13:10 | "\\ufFfF" | \uffff | \uffff | | +| StringLiterals.java:14:3:14:6 | "\\"" | " | " | | +| StringLiterals.java:15:3:15:6 | "\\'" | ' | ' | | +| StringLiterals.java:16:3:16:6 | "\\n" | \n | \n | | +| StringLiterals.java:17:3:17:6 | "\\\\" | \\ | \\ | | +| StringLiterals.java:18:3:18:13 | "test \\123" | test S | test S | | +| StringLiterals.java:19:3:19:9 | "\\1234" | S4 | S4 | | +| StringLiterals.java:20:3:20:9 | "\\0000" | \u00000 | \u00000 | | +| StringLiterals.java:21:3:21:13 | "\\u0061567" | a567 | a567 | | +| StringLiterals.java:22:3:22:13 | "\\u1234567" | \u1234567 | \u1234567 | | +| StringLiterals.java:23:3:23:18 | "\\uaBcDeF\\u0aB1" | \uabcdeF\u0ab1 | \uabcdeF\u0ab1 | | +| StringLiterals.java:24:3:24:16 | "\\uD800\\uDC00" | \ud800\udc00 | \ud800\udc00 | | +| StringLiterals.java:25:3:25:16 | "\\uDBFF\\uDFFF" | \udbff\udfff | \udbff\udfff | | +| StringLiterals.java:27:3:27:10 | "\\uD800" | \ufffd | \ufffd | | +| StringLiterals.java:28:3:28:10 | "\\uDC00" | \ufffd | \ufffd | | +| StringLiterals.java:29:3:29:31 | "hello\\uD800hello\\uDC00world" | hello\ufffdhello\ufffdworld | hello\ufffdhello\ufffdworld | | +| StringLiterals.java:31:3:31:16 | "\\u005C\\u0022" | " | " | | +| StringLiterals.java:32:8:32:20 | 2\\u0061\\u0022 | a | a | | +| StringLiterals.java:37:3:39:5 | """ \t \n\t\ttest "text" and escaped \\u0022\n\t\t""" | test "text" and escaped "\n | test "text" and escaped "\n | text-block | +| StringLiterals.java:41:3:43:5 | """\n\t\t\tindented\n\t\t""" | \tindented\n | \tindented\n | text-block | +| StringLiterals.java:44:3:46:5 | """\n\tno indentation last line\n\t\t""" | no indentation last line\n | no indentation last line\n | text-block | +| StringLiterals.java:47:3:49:7 | """\n\tindentation last line\n\t\t\\s""" | indentation last line\n\t | indentation last line\n\t | text-block | +| StringLiterals.java:50:3:52:6 | """\n\t\t\tnot-indented\n\t\t\t""" | not-indented\n | not-indented\n | text-block | +| StringLiterals.java:53:3:55:4 | """\n\t\tindented\n\t""" | \tindented\n | \tindented\n | text-block | +| StringLiterals.java:56:4:58:5 | """\n\t\tnot-indented\n\t\t""" | not-indented\n | not-indented\n | text-block | +| StringLiterals.java:59:3:62:6 | """\n\t\t spaces (only single space is trimmed)\n\t\t\ttab\n\t\t\t""" | spaces (only single space is trimmed)\ntab\n | spaces (only single space is trimmed)\ntab\n | text-block | +| StringLiterals.java:63:3:64:22 | """\n\t\t\tend on same line""" | end on same line | end on same line | text-block | +| StringLiterals.java:65:3:68:5 | """\n\t\ttrailing spaces ignored: \t \n\t\tnot ignored: \t \\s\n\t\t""" | trailing spaces ignored:\nnot ignored: \t \n | trailing spaces ignored:\nnot ignored: \t \n | text-block | +| StringLiterals.java:69:3:70:18 | """\n\t\t3 quotes:""\\"""" | 3 quotes:""" | 3 quotes:""" | text-block | +| StringLiterals.java:71:3:74:5 | """\n\t\tline \\\n\t\tcontinuation \\\n\t\t""" | line continuation | line continuation | text-block | +| StringLiterals.java:75:3:79:5 | """\n\t\tExplicit line breaks:\\n\n\t\t\\r\\n\n\t\t\\r\n\t\t""" | Explicit line breaks:\n\n\r\n\n\r\n | Explicit line breaks:\n\n\r\n\n\r\n | text-block | +| StringLiterals.java:82:10:84:16 | 2"\\u0022\n\t\ttest\n\t\t\\u0022\\uu0022" | test\n | test\n | | +| StringLiterals.java:90:3:90:19 | "hello" + "world" | helloworld | helloworld | | +| StringLiterals.java:91:3:92:20 | """\n\t\thello""" + "world" | helloworld | helloworld | text-block | +| StringLiterals.java:93:10:93:12 | "a" | a | a | | +| StringLiterals.java:94:3:94:5 | "a" | a | a | | +| StringLiterals.java:95:3:95:5 | "a" | a | a | | +| StringLiterals.java:96:7:96:9 | "a" | a | a | | +| StringLiterals.java:97:3:97:5 | "a" | a | a | | +| StringLiterals.java:98:10:98:12 | "a" | a | a | | +| StringLiterals.java:99:3:99:5 | "a" | a | a | | +| StringLiterals.java:100:9:100:11 | "a" | a | a | | diff --git a/java/ql/test/library-tests/literals/stringLiterals/stringLiterals.ql b/java/ql/test/library-tests/literals/stringLiterals/stringLiterals.ql index e2128e54e0e..4b754090ff5 100644 --- a/java/ql/test/library-tests/literals/stringLiterals/stringLiterals.ql +++ b/java/ql/test/library-tests/literals/stringLiterals/stringLiterals.ql @@ -1,5 +1,7 @@ import semmle.code.java.Expr -from StringLiteral lit -where lit.getFile().(CompilationUnit).fromSource() -select lit, lit.getValue(), lit.getRepresentedString() +from StringLiteral lit, string isTextBlock +where + lit.getFile().(CompilationUnit).fromSource() and + if lit.isTextBlock() then isTextBlock = "text-block" else isTextBlock = "" +select lit, lit.getValue(), lit.getRepresentedString(), isTextBlock From 3463c28e2416f236ddd0acaac6f13492a77bee42 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Fri, 1 Oct 2021 18:27:46 +0200 Subject: [PATCH 687/741] C++: Add return value dereference to 'callOutput'. This will need to be modified once we get return value side effects in the IR. --- .../lib/semmle/code/cpp/ir/dataflow/internal/ModelUtil.qll | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/ModelUtil.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/ModelUtil.qll index 2f4037d4ec8..c7e61ea2e33 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/ModelUtil.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/ModelUtil.qll @@ -38,5 +38,8 @@ Instruction callOutput(CallInstruction call, FunctionOutput output) { effect.getPrimaryInstruction() = call and output.isParameterDerefOrQualifierObject(effect.getIndex()) ) - // TODO: return value dereference + or + // TODO: modify this when we get return value dereferences + result = call and + output.isReturnValueDeref() } From 06791426074dfe3322bd36b223bed81ac886efbf Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Fri, 1 Oct 2021 18:27:55 +0200 Subject: [PATCH 688/741] C++: Accept test changes. --- .../taint-tests/copyableclass_declonly.cpp | 2 +- .../dataflow/taint-tests/map.cpp | 4 +- .../dataflow/taint-tests/string.cpp | 68 +++++++++---------- .../dataflow/taint-tests/stringstream.cpp | 16 ++--- .../dataflow/taint-tests/taint.cpp | 2 +- .../dataflow/taint-tests/vector.cpp | 16 ++--- 6 files changed, 54 insertions(+), 54 deletions(-) diff --git a/cpp/ql/test/library-tests/dataflow/taint-tests/copyableclass_declonly.cpp b/cpp/ql/test/library-tests/dataflow/taint-tests/copyableclass_declonly.cpp index f8169db1128..307e1ecaa76 100644 --- a/cpp/ql/test/library-tests/dataflow/taint-tests/copyableclass_declonly.cpp +++ b/cpp/ql/test/library-tests/dataflow/taint-tests/copyableclass_declonly.cpp @@ -64,6 +64,6 @@ void test_copyableclass_declonly() sink(s1); // $ ast,ir sink(s2); // $ ast,ir - sink(s3 = source()); // $ ast MISSING: ir + sink(s3 = source()); // $ ast,ir } } diff --git a/cpp/ql/test/library-tests/dataflow/taint-tests/map.cpp b/cpp/ql/test/library-tests/dataflow/taint-tests/map.cpp index aabd898830e..4e85a6b9aa3 100644 --- a/cpp/ql/test/library-tests/dataflow/taint-tests/map.cpp +++ b/cpp/ql/test/library-tests/dataflow/taint-tests/map.cpp @@ -415,10 +415,10 @@ void test_unordered_map() sink(m30["abc"]); sink(m31.try_emplace("abc", source(), 2)); // $ ast,ir sink(m31); // $ ast,ir - sink(m31["abc"]); // $ ast MISSING: ir + sink(m31["abc"]); // $ ast,ir sink(m32.try_emplace("abc", 1, source())); // $ ast,ir sink(m32); // $ ast,ir - sink(m32["abc"]); // $ ast MISSING: ir + sink(m32["abc"]); // $ ast,ir // additional emplace test cases std::unordered_map m33; diff --git a/cpp/ql/test/library-tests/dataflow/taint-tests/string.cpp b/cpp/ql/test/library-tests/dataflow/taint-tests/string.cpp index 0e29d314887..9ce653c654a 100644 --- a/cpp/ql/test/library-tests/dataflow/taint-tests/string.cpp +++ b/cpp/ql/test/library-tests/dataflow/taint-tests/string.cpp @@ -30,20 +30,20 @@ void test_string() sink(b); sink(c); // $ ast,ir sink(b.c_str()); - sink(c.c_str()); // $ ast MISSING: ir + sink(c.c_str()); // $ ast,ir } void test_strings2() { string path1 = user_input(); - sink(path1.c_str(), "r"); // $ ast MISSING: ir + sink(path1.c_str(), "r"); // $ ast,ir string path2; path2 = user_input(); - sink(path2.c_str(), "r"); // $ ast MISSING: ir + sink(path2.c_str(), "r"); // $ ast,ir string path3(user_input()); - sink(path3.c_str(), "r"); // $ ast MISSING: ir + sink(path3.c_str(), "r"); // $ ast,ir } void test_string3() @@ -67,7 +67,7 @@ void test_string4() // convert back std::string -> char * cs = ss.c_str(); - sink(cs); // $ ast MISSING: ir + sink(cs); // $ ast,ir sink(ss); // $ ast,ir } @@ -159,12 +159,12 @@ void test_string_append() { sink(s5); // $ ast,ir s6 = s3; - sink(s6 += s4); // $ ast MISSING: ir + sink(s6 += s4); // $ ast,ir sink(s6); // $ ast,ir s7 = s3; - sink(s7 += source()); // $ ast MISSING: ir - sink(s7 += " "); // $ ast MISSING: ir + sink(s7 += source()); // $ ast,ir + sink(s7 += " "); // $ ast,ir sink(s7); // $ ast,ir s8 = s3; @@ -196,10 +196,10 @@ void test_string_assign() { sink(s3.assign(s1)); sink(s3); - sink(s4.assign(s2)); // $ ast MISSING: ir + sink(s4.assign(s2)); // $ ast,ir sink(s4); // $ ast,ir - sink(s5.assign(10, c)); // $ ast MISSING: ir + sink(s5.assign(10, c)); // $ ast,ir sink(s5); // $ ast,ir sink(s6.assign(s1)); @@ -217,15 +217,15 @@ void test_string_insert() { sink(s3); s4 = s2; - sink(s4.insert(0, s1)); // $ ast MISSING: ir + sink(s4.insert(0, s1)); // $ ast,ir sink(s4); // $ ast,ir s5 = s1; - sink(s5.insert(0, s2)); // $ ast MISSING: ir + sink(s5.insert(0, s2)); // $ ast,ir sink(s5); // $ ast,ir s6 = s1; - sink(s6.insert(0, 10, c)); // $ ast MISSING: ir + sink(s6.insert(0, 10, c)); // $ ast,ir sink(s6); // $ ast,ir } @@ -240,15 +240,15 @@ void test_string_replace() { sink(s3); s4 = s2; - sink(s4.replace(1, 2, s1)); // $ ast MISSING: ir + sink(s4.replace(1, 2, s1)); // $ ast,ir sink(s4); // $ ast,ir s5 = s1; - sink(s5.replace(1, 2, s2)); // $ ast MISSING: ir + sink(s5.replace(1, 2, s2)); // $ ast,ir sink(s5); // $ ast,ir s6 = s1; - sink(s6.replace(1, 2, 10, c)); // $ ast MISSING: ir + sink(s6.replace(1, 2, 10, c)); // $ ast,ir sink(s6); // $ ast,ir } @@ -309,7 +309,7 @@ void test_string_data() std::string b(source()); sink(a.data()); - sink(b.data()); // $ ast MISSING: ir + sink(b.data()); // $ ast,ir sink(a.length()); sink(b.length()); } @@ -360,7 +360,7 @@ void test_string_iterators() { std::string s4("world"); sink(s1); - sink(s1.append(s2.begin(), s2.end())); // $ ast MISSING: ir + sink(s1.append(s2.begin(), s2.end())); // $ ast,ir sink(s1); // $ ast,ir sink(s3); @@ -433,7 +433,7 @@ void test_string_insert_more() sink(s1.insert(0, cs1)); sink(s1); - sink(s2.insert(0, cs2)); // $ ast MISSING: ir + sink(s2.insert(0, cs2)); // $ ast,ir sink(s2); // $ ast,ir } @@ -446,7 +446,7 @@ void test_string_iterator_methods() sink(a.insert(a.begin(), 10, 'x')); sink(a); - sink(b.insert(b.begin(), 10, ns_char::source())); // $ ast MISSING: ir + sink(b.insert(b.begin(), 10, ns_char::source())); // $ ast,ir sink(b); // $ ast,ir } @@ -459,10 +459,10 @@ void test_string_iterator_methods() sink(c.insert(c.end(), s1.begin(), s1.end())); sink(c); - sink(d.insert(d.end(), s2.begin(), s2.end())); // $ ast MISSING: ir + sink(d.insert(d.end(), s2.begin(), s2.end())); // $ ast,ir sink(d); // $ ast,ir - sink(s2.insert(s2.end(), s1.begin(), s1.end())); // $ ast MISSING: ir + sink(s2.insert(s2.end(), s1.begin(), s1.end())); // $ ast,ir sink(s2); // $ ast,ir } @@ -475,10 +475,10 @@ void test_string_iterator_methods() sink(e.append(s3.begin(), s3.end())); sink(e); - sink(f.append(s4.begin(), s4.end())); // $ ast MISSING: ir + sink(f.append(s4.begin(), s4.end())); // $ ast,ir sink(f); // $ ast,ir - sink(s4.append(s3.begin(), s3.end())); // $ ast MISSING: ir + sink(s4.append(s3.begin(), s3.end())); // $ ast,ir sink(s4); // $ ast,ir } @@ -491,7 +491,7 @@ void test_string_iterator_methods() sink(g.assign(s5.cbegin(), s5.cend())); sink(g); - sink(h.assign(s6.cbegin(), s6.cend())); // $ ast MISSING: ir + sink(h.assign(s6.cbegin(), s6.cend())); // $ ast,ir sink(h); // $ ast,ir sink(s6.assign(s5.cbegin(), s5.cend())); @@ -519,8 +519,8 @@ void test_string_front_back() { sink(a.front()); sink(a.back()); a.push_back(ns_char::source()); - sink(a.front()); // $ SPURIOUS: ast - sink(a.back()); // $ ast MISSING: ir + sink(a.front()); // $ SPURIOUS: ast,ir + sink(a.back()); // $ ast,ir } void test_string_return_assign() { @@ -533,12 +533,12 @@ void test_string_return_assign() { std::string f("ff"); sink( a += (b += "bb") ); - sink( c += (d += source()) ); // $ ast MISSING: ir - sink( (e += "ee") += source() ); // $ ast MISSING: ir - sink( (f += source()) += "ff" ); // $ ast MISSING: ir + sink( c += (d += source()) ); // $ ast,ir + sink( (e += "ee") += source() ); // $ ast,ir + sink( (f += source()) += "ff" ); // $ ast,ir sink(a); sink(b); - sink(c); // $ ast MISSING: ir + sink(c); // $ ast,ir sink(d); // $ ast,ir sink(e); // $ ast MISSING: ir sink(f); // $ ast,ir @@ -553,12 +553,12 @@ void test_string_return_assign() { std::string f("ff"); sink( a.assign(b.assign("bb")) ); - sink( c.assign(d.assign(source())) ); // $ ast MISSING: ir - sink( e.assign("ee").assign(source()) ); // $ ast MISSING: ir + sink( c.assign(d.assign(source())) ); // $ ast,ir + sink( e.assign("ee").assign(source()) ); // $ ast,ir sink( f.assign(source()).assign("ff") ); sink(a); sink(b); - sink(c); // $ ast MISSING: ir + sink(c); // $ ast,ir sink(d); // $ ast,ir sink(e); // $ ast MISSING: ir sink(f); // $ SPURIOUS: ast,ir diff --git a/cpp/ql/test/library-tests/dataflow/taint-tests/stringstream.cpp b/cpp/ql/test/library-tests/dataflow/taint-tests/stringstream.cpp index fab96fc878d..249c8ac21bf 100644 --- a/cpp/ql/test/library-tests/dataflow/taint-tests/stringstream.cpp +++ b/cpp/ql/test/library-tests/dataflow/taint-tests/stringstream.cpp @@ -53,15 +53,15 @@ void test_stringstream_string(int amount) sink(ss7); // $ SPURIOUS: ast,ir sink(ss8.put('a')); - sink(ss9.put(ns_char::source())); // $ ast MISSING: ir - sink(ss10.put('a').put(ns_char::source()).put('z')); // $ ast MISSING: ir + sink(ss9.put(ns_char::source())); // $ ast,ir + sink(ss10.put('a').put(ns_char::source()).put('z')); // $ ast,ir sink(ss8); sink(ss9); // $ ast,ir sink(ss10); // $ ast MISSING: ir sink(ss11.write("begin", 5)); - sink(ss12.write(source(), 5)); // $ ast MISSING: ir - sink(ss13.write("begin", 5).write(source(), amount).write("end", 3)); // $ ast MISSING: ir + sink(ss12.write(source(), 5)); // $ ast,ir + sink(ss13.write("begin", 5).write(source(), amount).write("end", 3)); // $ ast,ir sink(ss11); sink(ss12); // $ ast,ir sink(ss13); // $ ast MISSING: ir @@ -73,7 +73,7 @@ void test_stringstream_int(int source) int v1 = 0, v2 = 0; sink(ss1 << 1234); - sink(ss2 << source); // $ ast MISSING: ir + sink(ss2 << source); // $ ast,ir sink(ss1 >> v1); sink(ss2 >> v2); // $ ast,ir @@ -97,7 +97,7 @@ void test_stringstream_constructors() std::stringstream ss6; sink(ss5 = std::stringstream("abc")); - sink(ss6 = std::stringstream(source())); // $ ast MISSING: ir + sink(ss6 = std::stringstream(source())); // $ ast,ir sink(ss1); sink(ss2); // $ ast,ir @@ -193,7 +193,7 @@ void test_stringstream_putback() sink(ss.get()); sink(ss.putback('b')); sink(ss.get()); - sink(ss.putback(ns_char::source())); // $ ast MISSING: ir + sink(ss.putback(ns_char::source())); // $ ast,ir sink(ss.get()); // $ ast,ir } @@ -263,6 +263,6 @@ void test_chaining() sink(b1); // $ ast,ir sink(b2); // $ ast,ir - sink(ss2.write("abc", 3).flush().write(source(), 3).flush().write("xyz", 3)); // $ ast MISSING: ir + sink(ss2.write("abc", 3).flush().write(source(), 3).flush().write("xyz", 3)); // $ ast,ir sink(ss2); // $ ast MISSING: ir } diff --git a/cpp/ql/test/library-tests/dataflow/taint-tests/taint.cpp b/cpp/ql/test/library-tests/dataflow/taint-tests/taint.cpp index 9434dbe52ae..92a44f2950c 100644 --- a/cpp/ql/test/library-tests/dataflow/taint-tests/taint.cpp +++ b/cpp/ql/test/library-tests/dataflow/taint-tests/taint.cpp @@ -466,7 +466,7 @@ void test_qualifiers() sink(d.getString()); d.setString(strings::source()); sink(d); // $ ast,ir - sink(d.getString()); // $ ast MISSING: ir + sink(d.getString()); // $ ast,ir } // --- non-standard swap --- diff --git a/cpp/ql/test/library-tests/dataflow/taint-tests/vector.cpp b/cpp/ql/test/library-tests/dataflow/taint-tests/vector.cpp index 4f0c8fab414..aacef1f4a5b 100644 --- a/cpp/ql/test/library-tests/dataflow/taint-tests/vector.cpp +++ b/cpp/ql/test/library-tests/dataflow/taint-tests/vector.cpp @@ -68,8 +68,8 @@ void test_element_taint(int x) { v5.push_back(source()); sink(v5); // $ ast,ir - sink(v5.front()); // $ SPURIOUS: ast - sink(v5.back()); // $ ast MISSING: ir + sink(v5.front()); // $ SPURIOUS: ast,ir + sink(v5.back()); // $ ast,ir v6.data()[2] = source(); sink(v6); // $ ast MISSING: ir @@ -81,8 +81,8 @@ void test_element_taint(int x) { v7.insert(it, source()); } sink(v7); // $ ast,ir - sink(v7.front()); // $ ast MISSING: ir - sink(v7.back()); // $ SPURIOUS: ast + sink(v7.front()); // $ ast,ir + sink(v7.back()); // $ SPURIOUS: ast,ir { const std::vector &v8c = v8; @@ -283,8 +283,8 @@ void test_data_more() { v1.push_back(source()); sink(v1); // $ ast,ir - sink(v1.data()); // $ ast MISSING: ir - sink(v1.data()[2]); // $ ast MISSING: ir + sink(v1.data()); // $ ast,ir + sink(v1.data()[2]); // $ ast,ir *(v2.data()) = ns_int::source(); sink(v2); // $ ast MISSING: ir @@ -305,10 +305,10 @@ void test_vector_insert() { sink(a.insert(a.end(), b.begin(), b.end())); sink(a); - sink(c.insert(c.end(), d.begin(), d.end())); // $ ast MISSING: ir + sink(c.insert(c.end(), d.begin(), d.end())); // $ ast,ir sink(c); // $ ast,ir - sink(d.insert(d.end(), a.begin(), a.end())); // $ ast MISSING: ir + sink(d.insert(d.end(), a.begin(), a.end())); // $ ast,ir sink(d); // $ ast,ir } From cc8b581c0615c757e1af1de0eb0c8aa13f688488 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Fri, 1 Oct 2021 22:23:17 +0200 Subject: [PATCH 689/741] C++: Accept test changes. --- .../semmle/ExecTainted/ExecTainted.expected | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-078/semmle/ExecTainted/ExecTainted.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-078/semmle/ExecTainted/ExecTainted.expected index 72dfd5e7967..4b1b5a61ace 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-078/semmle/ExecTainted/ExecTainted.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-078/semmle/ExecTainted/ExecTainted.expected @@ -20,8 +20,17 @@ edges | test.cpp:93:17:93:24 | filename indirection | test.cpp:93:11:93:14 | strncat output argument | | test.cpp:93:17:93:24 | filename indirection | test.cpp:93:11:93:14 | strncat output argument | | test.cpp:106:20:106:25 | call to getenv | test.cpp:107:33:107:36 | path indirection | +| test.cpp:107:31:107:31 | call to operator+ | test.cpp:108:18:108:22 | call to c_str indirection | +| test.cpp:107:33:107:36 | path indirection | test.cpp:107:31:107:31 | call to operator+ | +| test.cpp:107:33:107:36 | path indirection | test.cpp:107:31:107:31 | call to operator+ | | test.cpp:113:20:113:25 | call to getenv | test.cpp:114:19:114:22 | path indirection | +| test.cpp:114:17:114:17 | Call | test.cpp:114:25:114:29 | call to c_str indirection | +| test.cpp:114:19:114:22 | path indirection | test.cpp:114:17:114:17 | Call | +| test.cpp:114:19:114:22 | path indirection | test.cpp:114:17:114:17 | Call | | test.cpp:119:20:119:25 | call to getenv | test.cpp:120:19:120:22 | path indirection | +| test.cpp:120:17:120:17 | Call | test.cpp:120:10:120:30 | call to data indirection | +| test.cpp:120:19:120:22 | path indirection | test.cpp:120:17:120:17 | Call | +| test.cpp:120:19:120:22 | path indirection | test.cpp:120:17:120:17 | Call | | test.cpp:140:9:140:11 | fread output argument | test.cpp:142:31:142:33 | str indirection | | test.cpp:142:11:142:17 | sprintf output argument | test.cpp:143:10:143:16 | command indirection | | test.cpp:142:31:142:33 | str indirection | test.cpp:142:11:142:17 | sprintf output argument | @@ -48,10 +57,16 @@ nodes | test.cpp:93:17:93:24 | filename indirection | semmle.label | filename indirection | | test.cpp:94:45:94:48 | path indirection | semmle.label | path indirection | | test.cpp:106:20:106:25 | call to getenv | semmle.label | call to getenv | +| test.cpp:107:31:107:31 | call to operator+ | semmle.label | call to operator+ | | test.cpp:107:33:107:36 | path indirection | semmle.label | path indirection | +| test.cpp:108:18:108:22 | call to c_str indirection | semmle.label | call to c_str indirection | | test.cpp:113:20:113:25 | call to getenv | semmle.label | call to getenv | +| test.cpp:114:17:114:17 | Call | semmle.label | Call | | test.cpp:114:19:114:22 | path indirection | semmle.label | path indirection | +| test.cpp:114:25:114:29 | call to c_str indirection | semmle.label | call to c_str indirection | | test.cpp:119:20:119:25 | call to getenv | semmle.label | call to getenv | +| test.cpp:120:10:120:30 | call to data indirection | semmle.label | call to data indirection | +| test.cpp:120:17:120:17 | Call | semmle.label | Call | | test.cpp:120:19:120:22 | path indirection | semmle.label | path indirection | | test.cpp:140:9:140:11 | fread output argument | semmle.label | fread output argument | | test.cpp:142:11:142:17 | sprintf output argument | semmle.label | sprintf output argument | @@ -64,4 +79,7 @@ subpaths | test.cpp:65:10:65:16 | command | test.cpp:62:9:62:16 | fread output argument | test.cpp:65:10:65:16 | command indirection | This argument to an OS command is derived from $@, dangerously concatenated into $@, and then passed to system(string) | test.cpp:62:9:62:16 | fread output argument | user input (String read by fread) | test.cpp:64:11:64:17 | strncat output argument | strncat output argument | | test.cpp:85:32:85:38 | command | test.cpp:82:9:82:16 | fread output argument | test.cpp:85:32:85:38 | command indirection | This argument to an OS command is derived from $@, dangerously concatenated into $@, and then passed to execl | test.cpp:82:9:82:16 | fread output argument | user input (String read by fread) | test.cpp:84:11:84:17 | strncat output argument | strncat output argument | | test.cpp:94:45:94:48 | path | test.cpp:91:9:91:16 | fread output argument | test.cpp:94:45:94:48 | path indirection | This argument to an OS command is derived from $@, dangerously concatenated into $@, and then passed to execl | test.cpp:91:9:91:16 | fread output argument | user input (String read by fread) | test.cpp:93:11:93:14 | strncat output argument | strncat output argument | +| test.cpp:108:18:108:22 | call to c_str | test.cpp:106:20:106:25 | call to getenv | test.cpp:108:18:108:22 | call to c_str indirection | This argument to an OS command is derived from $@, dangerously concatenated into $@, and then passed to system(string) | test.cpp:106:20:106:25 | call to getenv | user input (an environment variable) | test.cpp:107:31:107:31 | call to operator+ | call to operator+ | +| test.cpp:114:25:114:29 | call to c_str | test.cpp:113:20:113:25 | call to getenv | test.cpp:114:25:114:29 | call to c_str indirection | This argument to an OS command is derived from $@, dangerously concatenated into $@, and then passed to system(string) | test.cpp:113:20:113:25 | call to getenv | user input (an environment variable) | test.cpp:114:17:114:17 | Call | Call | +| test.cpp:120:25:120:28 | call to data | test.cpp:119:20:119:25 | call to getenv | test.cpp:120:10:120:30 | call to data indirection | This argument to an OS command is derived from $@, dangerously concatenated into $@, and then passed to system(string) | test.cpp:119:20:119:25 | call to getenv | user input (an environment variable) | test.cpp:120:17:120:17 | Call | Call | | test.cpp:143:10:143:16 | command | test.cpp:140:9:140:11 | fread output argument | test.cpp:143:10:143:16 | command indirection | This argument to an OS command is derived from $@, dangerously concatenated into $@, and then passed to system(string) | test.cpp:140:9:140:11 | fread output argument | user input (String read by fread) | test.cpp:142:11:142:17 | sprintf output argument | sprintf output argument | From fb1385b3e8e2403a52d5ac15e4266263493cf565 Mon Sep 17 00:00:00 2001 From: Marcono1234 Date: Sun, 3 Oct 2021 00:13:36 +0200 Subject: [PATCH 690/741] Java: Fix formatting of SpuriousJavadocParam.java --- java/ql/src/Advisory/Documentation/SpuriousJavadocParam.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/ql/src/Advisory/Documentation/SpuriousJavadocParam.java b/java/ql/src/Advisory/Documentation/SpuriousJavadocParam.java index 20513b19a9c..bef5de55717 100644 --- a/java/ql/src/Advisory/Documentation/SpuriousJavadocParam.java +++ b/java/ql/src/Advisory/Documentation/SpuriousJavadocParam.java @@ -44,7 +44,7 @@ public void parameterized(T parameter){ ... } * * @param The type of the elements. */ -class Generic { ...} +class Generic { ... } /** * GOOD: A proper Javadoc comment. From 682a2aae3a1dcedd18bde3cc56f8a7e668cff491 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Mon, 4 Oct 2021 10:45:44 +0200 Subject: [PATCH 691/741] C#: Filter `using var _ = ...` results from `DeadStoreOfLocal.ql` --- csharp/ql/src/Dead Code/DeadStoreOfLocal.ql | 7 ++++++- .../Dead Code/DeadStoreOfLocal/DeadStoreOfLocal.cs | 6 ++++++ .../Dead Code/DeadStoreOfLocal/DeadStoreOfLocal.expected | 1 + 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/csharp/ql/src/Dead Code/DeadStoreOfLocal.ql b/csharp/ql/src/Dead Code/DeadStoreOfLocal.ql index 1064a76c2e0..42aa3cac428 100644 --- a/csharp/ql/src/Dead Code/DeadStoreOfLocal.ql +++ b/csharp/ql/src/Dead Code/DeadStoreOfLocal.ql @@ -72,7 +72,12 @@ predicate mayEscape(LocalVariable v) { class RelevantDefinition extends AssignableDefinition { RelevantDefinition() { - this instanceof AssignableDefinitions::AssignmentDefinition + this.(AssignableDefinitions::AssignmentDefinition).getAssignment() = + any(Assignment a | + if a = any(UsingStmt us).getAVariableDeclExpr() + then not a.getTargetVariable().hasName("_") + else any() + ) or this instanceof AssignableDefinitions::MutationDefinition or diff --git a/csharp/ql/test/query-tests/Dead Code/DeadStoreOfLocal/DeadStoreOfLocal.cs b/csharp/ql/test/query-tests/Dead Code/DeadStoreOfLocal/DeadStoreOfLocal.cs index 289ffed7953..074c07b1878 100644 --- a/csharp/ql/test/query-tests/Dead Code/DeadStoreOfLocal/DeadStoreOfLocal.cs +++ b/csharp/ql/test/query-tests/Dead Code/DeadStoreOfLocal/DeadStoreOfLocal.cs @@ -460,4 +460,10 @@ public static class AnonymousVariable count++; return count; } + + public static void Using() + { + using var x = new System.IO.FileStream("", System.IO.FileMode.Open); // BAD + using var _ = new System.IO.FileStream("", System.IO.FileMode.Open); // GOOD + } } diff --git a/csharp/ql/test/query-tests/Dead Code/DeadStoreOfLocal/DeadStoreOfLocal.expected b/csharp/ql/test/query-tests/Dead Code/DeadStoreOfLocal/DeadStoreOfLocal.expected index ab6a47ca9ed..0b0c265f0ff 100644 --- a/csharp/ql/test/query-tests/Dead Code/DeadStoreOfLocal/DeadStoreOfLocal.expected +++ b/csharp/ql/test/query-tests/Dead Code/DeadStoreOfLocal/DeadStoreOfLocal.expected @@ -14,6 +14,7 @@ | DeadStoreOfLocal.cs:331:9:331:32 | ... = ... | This assignment to $@ is useless, since its value is never read. | DeadStoreOfLocal.cs:327:23:327:23 | b | b | | DeadStoreOfLocal.cs:372:13:372:20 | String s = ... | This assignment to $@ is useless, since its value is never read. | DeadStoreOfLocal.cs:372:13:372:13 | s | s | | DeadStoreOfLocal.cs:398:13:398:21 | ... = ... | This assignment to $@ is useless, since its value is never read. | DeadStoreOfLocal.cs:396:13:396:13 | s | s | +| DeadStoreOfLocal.cs:466:19:466:75 | FileStream x = ... | This assignment to $@ is useless, since its value is never read. | DeadStoreOfLocal.cs:466:19:466:19 | x | x | | DeadStoreOfLocalBad.cs:7:13:7:48 | Boolean success = ... | This assignment to $@ is useless, since its value is never read. | DeadStoreOfLocalBad.cs:7:13:7:19 | success | success | | DeadStoreOfLocalBad.cs:23:32:23:32 | FormatException e | This assignment to $@ is useless, since its value is never read. | DeadStoreOfLocalBad.cs:23:32:23:32 | e | e | | DeadStoreOfLocalBad.cs:32:22:32:22 | String s | This assignment to $@ is useless, since its value is never read. | DeadStoreOfLocalBad.cs:32:22:32:22 | s | s | From 70b9b002cb6a31096d2cfc96baa77d807e1906b4 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Mon, 4 Oct 2021 10:47:44 +0200 Subject: [PATCH 692/741] C#: Add change note --- csharp/change-notes/2021-10-04-dead-store-of-local.md | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 csharp/change-notes/2021-10-04-dead-store-of-local.md diff --git a/csharp/change-notes/2021-10-04-dead-store-of-local.md b/csharp/change-notes/2021-10-04-dead-store-of-local.md new file mode 100644 index 00000000000..bb186924ce8 --- /dev/null +++ b/csharp/change-notes/2021-10-04-dead-store-of-local.md @@ -0,0 +1,2 @@ +lgtm,codescanning +* Discarded `using` declarationg, `using var _ = ...`, are no longer flagged by the query "Useless assignment to local variable". From f06632a8e7a25059546594720572ed3fc69e9dfd Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Mon, 4 Oct 2021 12:00:35 +0200 Subject: [PATCH 693/741] C#: Filter discards in tuples in `ConstantCondition.ql` --- .../2021-10-04-constand-condition.md | 2 + .../Control-Flow/ConstantCondition.ql | 2 + .../ConstantCondition/ConstantCondition.cs | 41 ++++++++++++------- .../ConstantCondition.expected | 4 +- 4 files changed, 32 insertions(+), 17 deletions(-) create mode 100644 csharp/change-notes/2021-10-04-constand-condition.md diff --git a/csharp/change-notes/2021-10-04-constand-condition.md b/csharp/change-notes/2021-10-04-constand-condition.md new file mode 100644 index 00000000000..70ad5b5ea75 --- /dev/null +++ b/csharp/change-notes/2021-10-04-constand-condition.md @@ -0,0 +1,2 @@ +lgtm,codescanning +* Discards in tuple patterns, for example `(_, string s)`, are no longer flagged by the query "Constant condition". \ No newline at end of file diff --git a/csharp/ql/src/Bad Practices/Control-Flow/ConstantCondition.ql b/csharp/ql/src/Bad Practices/Control-Flow/ConstantCondition.ql index 0b4f4fd99b8..a0542a94735 100644 --- a/csharp/ql/src/Bad Practices/Control-Flow/ConstantCondition.ql +++ b/csharp/ql/src/Bad Practices/Control-Flow/ConstantCondition.ql @@ -123,6 +123,8 @@ class ConstantMatchingCondition extends ConstantCondition { se.getCase(i).getPattern() = this.(DiscardExpr) and i > 0 ) + or + this = any(PositionalPatternExpr ppe).getPattern(_) } override string getMessage() { diff --git a/csharp/ql/test/query-tests/Bad Practices/Control-Flow/ConstantCondition/ConstantCondition.cs b/csharp/ql/test/query-tests/Bad Practices/Control-Flow/ConstantCondition/ConstantCondition.cs index dd72191a29a..9e7386149a4 100644 --- a/csharp/ql/test/query-tests/Bad Practices/Control-Flow/ConstantCondition/ConstantCondition.cs +++ b/csharp/ql/test/query-tests/Bad Practices/Control-Flow/ConstantCondition/ConstantCondition.cs @@ -48,8 +48,8 @@ class ConstantNullness j = (int?)i ?? 1; // BAD s = ""?.CommaJoinWith(s); // BAD s = s ?? ""; // GOOD - s = (i==0 ? s : null) ?? s; // GOOD - var k = (i==0 ? s : null)?.Length; // GOOD + s = (i == 0 ? s : null) ?? s; // GOOD + var k = (i == 0 ? s : null)?.Length; // GOOD } } @@ -59,12 +59,12 @@ class ConstantMatching { switch (1 + 2) { - case 2 : // BAD - break; - case 3 : // BAD - break; - case int _ : // GOOD - break; + case 2: // BAD + break; + case 3: // BAD + break; + case int _: // GOOD + break; } } @@ -72,10 +72,10 @@ class ConstantMatching { switch ((object)s) { - case int _ : // BAD - break; - case "" : // GOOD - break; + case int _: // BAD + break; + case "": // GOOD + break; } } @@ -83,8 +83,8 @@ class ConstantMatching { switch (o) { - case IList _ : // GOOD - break; + case IList _: // GOOD + break; } } @@ -105,7 +105,8 @@ class ConstantMatching }; } - void M6(bool b1, bool b2) { + void M6(bool b1, bool b2) + { if (!b1) return; if (!b2) @@ -113,6 +114,16 @@ class ConstantMatching if (b1 && b2) // BAD return; } + + string M7(object o) + { + return o switch + { + (string s, _) => s, // GOOD + (_, string s) => s, // GOOD + _ => "" // GOOD + }; + } } class Assertions diff --git a/csharp/ql/test/query-tests/Bad Practices/Control-Flow/ConstantCondition/ConstantCondition.expected b/csharp/ql/test/query-tests/Bad Practices/Control-Flow/ConstantCondition/ConstantCondition.expected index f7ce6c1824a..17a51125c4c 100644 --- a/csharp/ql/test/query-tests/Bad Practices/Control-Flow/ConstantCondition/ConstantCondition.expected +++ b/csharp/ql/test/query-tests/Bad Practices/Control-Flow/ConstantCondition/ConstantCondition.expected @@ -8,8 +8,8 @@ | ConstantCondition.cs:64:18:64:18 | 3 | Pattern always matches. | | ConstantCondition.cs:75:18:75:20 | access to type Int32 | Pattern never matches. | | ConstantCondition.cs:95:13:95:13 | _ | Pattern always matches. | -| ConstantCondition.cs:113:13:113:14 | access to parameter b1 | Condition always evaluates to 'true'. | -| ConstantCondition.cs:113:19:113:20 | access to parameter b2 | Condition always evaluates to 'true'. | +| ConstantCondition.cs:114:13:114:14 | access to parameter b1 | Condition always evaluates to 'true'. | +| ConstantCondition.cs:114:19:114:20 | access to parameter b2 | Condition always evaluates to 'true'. | | ConstantConditionBad.cs:5:16:5:20 | ... > ... | Condition always evaluates to 'false'. | | ConstantConditionalExpressionCondition.cs:11:22:11:34 | ... == ... | Condition always evaluates to 'true'. | | ConstantConditionalExpressionCondition.cs:12:21:12:25 | false | Condition always evaluates to 'false'. | From a3156400829bc37b815df1a658722b2feffd32e3 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Mon, 4 Oct 2021 13:15:26 +0200 Subject: [PATCH 694/741] C#: Address review comments --- .../2021-10-04-dead-store-of-local.md | 2 +- csharp/ql/src/Dead Code/DeadStoreOfLocal.ql | 6 +----- .../DeadStoreOfLocal/DeadStoreOfLocal.cs | 19 +++++++++++++------ .../DeadStoreOfLocal.expected | 2 +- 4 files changed, 16 insertions(+), 13 deletions(-) diff --git a/csharp/change-notes/2021-10-04-dead-store-of-local.md b/csharp/change-notes/2021-10-04-dead-store-of-local.md index bb186924ce8..307f10af654 100644 --- a/csharp/change-notes/2021-10-04-dead-store-of-local.md +++ b/csharp/change-notes/2021-10-04-dead-store-of-local.md @@ -1,2 +1,2 @@ lgtm,codescanning -* Discarded `using` declarationg, `using var _ = ...`, are no longer flagged by the query "Useless assignment to local variable". +* `using` declarations are no longer flagged by the query "Useless assignment to local variable". diff --git a/csharp/ql/src/Dead Code/DeadStoreOfLocal.ql b/csharp/ql/src/Dead Code/DeadStoreOfLocal.ql index 42aa3cac428..19766a550ec 100644 --- a/csharp/ql/src/Dead Code/DeadStoreOfLocal.ql +++ b/csharp/ql/src/Dead Code/DeadStoreOfLocal.ql @@ -73,11 +73,7 @@ predicate mayEscape(LocalVariable v) { class RelevantDefinition extends AssignableDefinition { RelevantDefinition() { this.(AssignableDefinitions::AssignmentDefinition).getAssignment() = - any(Assignment a | - if a = any(UsingStmt us).getAVariableDeclExpr() - then not a.getTargetVariable().hasName("_") - else any() - ) + any(Assignment a | not a = any(UsingDeclStmt uds).getAVariableDeclExpr()) or this instanceof AssignableDefinitions::MutationDefinition or diff --git a/csharp/ql/test/query-tests/Dead Code/DeadStoreOfLocal/DeadStoreOfLocal.cs b/csharp/ql/test/query-tests/Dead Code/DeadStoreOfLocal/DeadStoreOfLocal.cs index 074c07b1878..941981f6d6c 100644 --- a/csharp/ql/test/query-tests/Dead Code/DeadStoreOfLocal/DeadStoreOfLocal.cs +++ b/csharp/ql/test/query-tests/Dead Code/DeadStoreOfLocal/DeadStoreOfLocal.cs @@ -460,10 +460,17 @@ public static class AnonymousVariable count++; return count; } - - public static void Using() - { - using var x = new System.IO.FileStream("", System.IO.FileMode.Open); // BAD - using var _ = new System.IO.FileStream("", System.IO.FileMode.Open); // GOOD - } } + +public static class Using +{ + public static void M() + { + using var x = new System.IO.FileStream("", System.IO.FileMode.Open); // GOOD + using var _ = new System.IO.FileStream("", System.IO.FileMode.Open); // GOOD + + using (var y = new System.IO.FileStream("", System.IO.FileMode.Open)) // BAD + { + } + } +} \ No newline at end of file diff --git a/csharp/ql/test/query-tests/Dead Code/DeadStoreOfLocal/DeadStoreOfLocal.expected b/csharp/ql/test/query-tests/Dead Code/DeadStoreOfLocal/DeadStoreOfLocal.expected index 0b0c265f0ff..6f718c49407 100644 --- a/csharp/ql/test/query-tests/Dead Code/DeadStoreOfLocal/DeadStoreOfLocal.expected +++ b/csharp/ql/test/query-tests/Dead Code/DeadStoreOfLocal/DeadStoreOfLocal.expected @@ -14,7 +14,7 @@ | DeadStoreOfLocal.cs:331:9:331:32 | ... = ... | This assignment to $@ is useless, since its value is never read. | DeadStoreOfLocal.cs:327:23:327:23 | b | b | | DeadStoreOfLocal.cs:372:13:372:20 | String s = ... | This assignment to $@ is useless, since its value is never read. | DeadStoreOfLocal.cs:372:13:372:13 | s | s | | DeadStoreOfLocal.cs:398:13:398:21 | ... = ... | This assignment to $@ is useless, since its value is never read. | DeadStoreOfLocal.cs:396:13:396:13 | s | s | -| DeadStoreOfLocal.cs:466:19:466:75 | FileStream x = ... | This assignment to $@ is useless, since its value is never read. | DeadStoreOfLocal.cs:466:19:466:19 | x | x | +| DeadStoreOfLocal.cs:472:20:472:76 | FileStream y = ... | This assignment to $@ is useless, since its value is never read. | DeadStoreOfLocal.cs:472:20:472:20 | y | y | | DeadStoreOfLocalBad.cs:7:13:7:48 | Boolean success = ... | This assignment to $@ is useless, since its value is never read. | DeadStoreOfLocalBad.cs:7:13:7:19 | success | success | | DeadStoreOfLocalBad.cs:23:32:23:32 | FormatException e | This assignment to $@ is useless, since its value is never read. | DeadStoreOfLocalBad.cs:23:32:23:32 | e | e | | DeadStoreOfLocalBad.cs:32:22:32:22 | String s | This assignment to $@ is useless, since its value is never read. | DeadStoreOfLocalBad.cs:32:22:32:22 | s | s | From cbd577694c42d19bb760b855ba6d0c1ab87e1216 Mon Sep 17 00:00:00 2001 From: Asger Feldthaus Date: Mon, 4 Oct 2021 13:30:15 +0200 Subject: [PATCH 695/741] JS: Autoformat --- javascript/ql/lib/semmle/javascript/PackageExports.qll | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/javascript/ql/lib/semmle/javascript/PackageExports.qll b/javascript/ql/lib/semmle/javascript/PackageExports.qll index b8375489e15..5d67b958d28 100644 --- a/javascript/ql/lib/semmle/javascript/PackageExports.qll +++ b/javascript/ql/lib/semmle/javascript/PackageExports.qll @@ -52,7 +52,8 @@ private DataFlow::Node getAValueExportedByPackage() { result = getAValueExportedByPackage().getALocalSource() or // Nested property reads. - result = getAValueExportedByPackage().(DataFlow::SourceNode).getAPropertyReference(publicPropertyName()) + result = + getAValueExportedByPackage().(DataFlow::SourceNode).getAPropertyReference(publicPropertyName()) or // module.exports.foo = require("./other-module.js"); exists(Module mod | @@ -186,9 +187,7 @@ private DataFlow::Node getAnExportFromModule(Module mod) { * This only allows properties whose first character is a letter or number. */ bindingset[result] -private string publicPropertyName() { - result.regexpMatch("[a-zA-Z0-9].*") -} +private string publicPropertyName() { result.regexpMatch("[a-zA-Z0-9].*") } /** * Holds if the given function is part of a private (or protected) method declaration. From 5aec84b672d6dd7b1ae213123114f3ae46e43185 Mon Sep 17 00:00:00 2001 From: Nick Rolfe Date: Mon, 4 Oct 2021 12:30:42 +0100 Subject: [PATCH 696/741] C++: add upgrade script for dbscheme comment changes --- .../old.dbscheme | 2136 +++++++++++++++++ .../semmlecode.cpp.dbscheme | 2136 +++++++++++++++++ .../upgrade.properties | 2 + 3 files changed, 4274 insertions(+) create mode 100644 cpp/upgrades/7806a11dd7ab6611c4245b2e96b8ed13cb5c6056/old.dbscheme create mode 100644 cpp/upgrades/7806a11dd7ab6611c4245b2e96b8ed13cb5c6056/semmlecode.cpp.dbscheme create mode 100644 cpp/upgrades/7806a11dd7ab6611c4245b2e96b8ed13cb5c6056/upgrade.properties diff --git a/cpp/upgrades/7806a11dd7ab6611c4245b2e96b8ed13cb5c6056/old.dbscheme b/cpp/upgrades/7806a11dd7ab6611c4245b2e96b8ed13cb5c6056/old.dbscheme new file mode 100644 index 00000000000..7806a11dd7a --- /dev/null +++ b/cpp/upgrades/7806a11dd7ab6611c4245b2e96b8ed13cb5c6056/old.dbscheme @@ -0,0 +1,2136 @@ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * gcc -c f1.c f2.c f3.c + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + /** + * An invocation of the compiler. Note that more than one file may + * be compiled per invocation. For example, this command compiles + * three source files: + * + * gcc -c f1.c f2.c f3.c + */ + unique int id : @compilation, + string cwd : string ref +); + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | *path to extractor* + * 1 | `--mimic` + * 2 | `/usr/bin/gcc` + * 3 | `-c` + * 4 | f1.c + * 5 | f2.c + * 6 | f3.c + */ +#keyset[id, num] +compilation_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * The source files that are compiled by a compiler invocation. + * If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.c + * 1 | f2.c + * 2 | f3.c + * + * Note that even if those files `#include` headers, those headers + * do not appear as rows. + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + + +/** + * External data, loaded from CSV files during snapshot creation. See + * [Tutorial: Incorporating external data](https://help.semmle.com/wiki/display/SD/Tutorial%3A+Incorporating+external+data) + * for more information. + */ +externalData( + int id : @externalDataElement, + string path : string ref, + int column: int ref, + string value : string ref +); + +/** + * The date of the snapshot. + */ +snapshotDate(unique date snapshotDate : date ref); + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/** + * Data used by the 'duplicate code' detection. + */ +duplicateCode( + unique int id : @duplication, + string relativePath : string ref, + int equivClass : int ref +); + +/** + * Data used by the 'similar code' detection. + */ +similarCode( + unique int id : @similarity, + string relativePath : string ref, + int equivClass : int ref +); + +/** + * Data used by the 'duplicate code' and 'similar code' detection. + */ +@duplication_or_similarity = @duplication | @similarity + +/** + * Data used by the 'duplicate code' and 'similar code' detection. + */ +#keyset[id, offset] +tokens( + int id : @duplication_or_similarity ref, + int offset : int ref, + int beginLine : int ref, + int beginColumn : int ref, + int endLine : int ref, + int endColumn : int ref +); + +/** + * Information about packages that provide code used during compilation. + * The `id` is just a unique identifier. + * The `namespace` is typically the name of the package manager that + * provided the package (e.g. "dpkg" or "yum"). + * The `package_name` is the name of the package, and `version` is its + * version (as a string). + */ +external_packages( + unique int id: @external_package, + string namespace : string ref, + string package_name : string ref, + string version : string ref +); + +/** + * Holds if File `fileid` was provided by package `package`. + */ +header_to_external_package( + int fileid : @file ref, + int package : @external_package ref +); + +/* + * Version history + */ + +svnentries( + unique int id : @svnentry, + string revision : string ref, + string author : string ref, + date revisionDate : date ref, + int changeSize : int ref +) + +svnaffectedfiles( + int id : @svnentry ref, + int file : @file ref, + string action : string ref +) + +svnentrymsg( + unique int id : @svnentry ref, + string message : string ref +) + +svnchurn( + int commit : @svnentry ref, + int file : @file ref, + int addedLines : int ref, + int deletedLines : int ref +) + +/* + * C++ dbscheme + */ + +@location = @location_stmt | @location_expr | @location_default ; + +/** + * The location of an element that is not an expression or a statement. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + */ +locations_default( + /** The location of an element that is not an expression or a statement. */ + unique int id: @location_default, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** + * The location of a statement. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + */ +locations_stmt( + /** The location of a statement. */ + unique int id: @location_stmt, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** + * The location of an expression. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + */ +locations_expr( + /** The location of an expression. */ + unique int id: @location_expr, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** An element for which line-count information is available. */ +@sourceline = @file | @function | @variable | @enumconstant | @xmllocatable; + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref +); + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location_default ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @folder | @file + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +fileannotations( + int id: @file ref, + int kind: int ref, + string name: string ref, + string value: string ref +); + +inmacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +affectedbymacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +/* + case @macroinvocations.kind of + 1 = macro expansion + | 2 = other macro reference + ; +*/ +macroinvocations( + unique int id: @macroinvocation, + int macro_id: @ppd_define ref, + int location: @location_default ref, + int kind: int ref +); + +macroparent( + unique int id: @macroinvocation ref, + int parent_id: @macroinvocation ref +); + +// a macroinvocation may be part of another location +// the way to find a constant expression that uses a macro +// is thus to find a constant expression that has a location +// to which a macro invocation is bound +macrolocationbind( + int id: @macroinvocation ref, + int location: @location ref +); + +#keyset[invocation, argument_index] +macro_argument_unexpanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +#keyset[invocation, argument_index] +macro_argument_expanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +/* + case @function.kind of + 1 = normal + | 2 = constructor + | 3 = destructor + | 4 = conversion + | 5 = operator + | 6 = builtin // GCC built-in functions, e.g. __builtin___memcpy_chk + ; +*/ +functions( + unique int id: @function, + string name: string ref, + int kind: int ref +); + +function_entry_point(int id: @function ref, unique int entry_point: @stmt ref); + +function_return_type(int id: @function ref, int return_type: @type ref); + +/** If `function` is a coroutine, then this gives the + std::experimental::resumable_traits instance associated with it, + and the variables representing the `handle` and `promise` for it. */ +coroutine( + unique int function: @function ref, + int traits: @type ref, + int handle: @variable ref, + int promise: @variable ref +); + +/** The `new` function used for allocating the coroutine state, if any. */ +coroutine_new( + unique int function: @function ref, + int new: @function ref +); + +/** The `delete` function used for deallocating the coroutine state, if any. */ +coroutine_delete( + unique int function: @function ref, + int delete: @function ref +); + +purefunctions(unique int id: @function ref); + +function_deleted(unique int id: @function ref); + +function_defaulted(unique int id: @function ref); + +member_function_this_type(unique int id: @function ref, int this_type: @type ref); + +#keyset[id, type_id] +fun_decls( + int id: @fun_decl, + int function: @function ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +fun_def(unique int id: @fun_decl ref); +fun_specialized(unique int id: @fun_decl ref); +fun_implicit(unique int id: @fun_decl ref); +fun_decl_specifiers( + int id: @fun_decl ref, + string name: string ref +) +#keyset[fun_decl, index] +fun_decl_throws( + int fun_decl: @fun_decl ref, + int index: int ref, + int type_id: @type ref +); +/* an empty throw specification is different from none */ +fun_decl_empty_throws(unique int fun_decl: @fun_decl ref); +fun_decl_noexcept( + int fun_decl: @fun_decl ref, + int constant: @expr ref +); +fun_decl_empty_noexcept(int fun_decl: @fun_decl ref); +fun_decl_typedef_type( + unique int fun_decl: @fun_decl ref, + int typedeftype_id: @usertype ref +); + +param_decl_bind( + unique int id: @var_decl ref, + int index: int ref, + int fun_decl: @fun_decl ref +); + +#keyset[id, type_id] +var_decls( + int id: @var_decl, + int variable: @variable ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +var_def(unique int id: @var_decl ref); +var_decl_specifiers( + int id: @var_decl ref, + string name: string ref +) + +type_decls( + unique int id: @type_decl, + int type_id: @type ref, + int location: @location_default ref +); +type_def(unique int id: @type_decl ref); +type_decl_top( + unique int type_decl: @type_decl ref +); + +namespace_decls( + unique int id: @namespace_decl, + int namespace_id: @namespace ref, + int location: @location_default ref, + int bodylocation: @location_default ref +); + +usings( + unique int id: @using, + int element_id: @element ref, + int location: @location_default ref +); + +/** The element which contains the `using` declaration. */ +using_container( + int parent: @element ref, + int child: @using ref +); + +static_asserts( + unique int id: @static_assert, + int condition : @expr ref, + string message : string ref, + int location: @location_default ref, + int enclosing : @element ref +); + +// each function has an ordered list of parameters +#keyset[id, type_id] +#keyset[function, index, type_id] +params( + int id: @parameter, + int function: @functionorblock ref, + int index: int ref, + int type_id: @type ref +); + +overrides(int new: @function ref, int old: @function ref); + +#keyset[id, type_id] +membervariables( + int id: @membervariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +globalvariables( + int id: @globalvariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +localvariables( + int id: @localvariable, + int type_id: @type ref, + string name: string ref +); + +autoderivation( + unique int var: @variable ref, + int derivation_type: @type ref +); + +enumconstants( + unique int id: @enumconstant, + int parent: @usertype ref, + int index: int ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); + +@variable = @localscopevariable | @globalvariable | @membervariable; + +@localscopevariable = @localvariable | @parameter; + +/* + Built-in types are the fundamental types, e.g., integral, floating, and void. + + case @builtintype.kind of + 1 = error + | 2 = unknown + | 3 = void + | 4 = boolean + | 5 = char + | 6 = unsigned_char + | 7 = signed_char + | 8 = short + | 9 = unsigned_short + | 10 = signed_short + | 11 = int + | 12 = unsigned_int + | 13 = signed_int + | 14 = long + | 15 = unsigned_long + | 16 = signed_long + | 17 = long_long + | 18 = unsigned_long_long + | 19 = signed_long_long + | 20 = __int8 // Microsoft-specific + | 21 = __int16 // Microsoft-specific + | 22 = __int32 // Microsoft-specific + | 23 = __int64 // Microsoft-specific + | 24 = float + | 25 = double + | 26 = long_double + | 27 = _Complex_float // C99-specific + | 28 = _Complex_double // C99-specific + | 29 = _Complex_long double // C99-specific + | 30 = _Imaginary_float // C99-specific + | 31 = _Imaginary_double // C99-specific + | 32 = _Imaginary_long_double // C99-specific + | 33 = wchar_t // Microsoft-specific + | 34 = decltype_nullptr // C++11 + | 35 = __int128 + | 36 = unsigned___int128 + | 37 = signed___int128 + | 38 = __float128 + | 39 = _Complex___float128 + | 40 = _Decimal32 + | 41 = _Decimal64 + | 42 = _Decimal128 + | 43 = char16_t + | 44 = char32_t + | 45 = _Float32 + | 46 = _Float32x + | 47 = _Float64 + | 48 = _Float64x + | 49 = _Float128 + | 50 = _Float128x + | 51 = char8_t + ; +*/ +builtintypes( + unique int id: @builtintype, + string name: string ref, + int kind: int ref, + int size: int ref, + int sign: int ref, + int alignment: int ref +); + +/* + Derived types are types that are directly derived from existing types and + point to, refer to, transform type data to return a new type. + + case @derivedtype.kind of + 1 = pointer + | 2 = reference + | 3 = type_with_specifiers + | 4 = array + | 5 = gnu_vector + | 6 = routineptr + | 7 = routinereference + | 8 = rvalue_reference // C++11 +// ... 9 type_conforming_to_protocols deprecated + | 10 = block + ; +*/ +derivedtypes( + unique int id: @derivedtype, + string name: string ref, + int kind: int ref, + int type_id: @type ref +); + +pointerishsize(unique int id: @derivedtype ref, + int size: int ref, + int alignment: int ref); + +arraysizes( + unique int id: @derivedtype ref, + int num_elements: int ref, + int bytesize: int ref, + int alignment: int ref +); + +typedefbase( + unique int id: @usertype ref, + int type_id: @type ref +); + +/** + * An instance of the C++11 `decltype` operator. For example: + * ``` + * int a; + * decltype(1+a) b; + * ``` + * Here `expr` is `1+a`. + * + * Sometimes an additional pair of parentheses around the expression + * would change the semantics of this decltype, e.g. + * ``` + * struct A { double x; }; + * const A* a = new A(); + * decltype( a->x ); // type is double + * decltype((a->x)); // type is const double& + * ``` + * (Please consult the C++11 standard for more details). + * `parentheses_would_change_meaning` is `true` iff that is the case. + */ +#keyset[id, expr] +decltypes( + int id: @decltype, + int expr: @expr ref, + int base_type: @type ref, + boolean parentheses_would_change_meaning: boolean ref +); + +/* + case @usertype.kind of + 1 = struct + | 2 = class + | 3 = union + | 4 = enum + | 5 = typedef // classic C: typedef typedef type name + | 6 = template + | 7 = template_parameter + | 8 = template_template_parameter + | 9 = proxy_class // a proxy class associated with a template parameter +// ... 10 objc_class deprecated +// ... 11 objc_protocol deprecated +// ... 12 objc_category deprecated + | 13 = scoped_enum + | 14 = using_alias // a using name = type style typedef + ; +*/ +usertypes( + unique int id: @usertype, + string name: string ref, + int kind: int ref +); + +usertypesize( + unique int id: @usertype ref, + int size: int ref, + int alignment: int ref +); + +usertype_final(unique int id: @usertype ref); + +usertype_uuid( + unique int id: @usertype ref, + unique string uuid: string ref +); + +mangled_name( + unique int id: @declaration ref, + int mangled_name : @mangledname +); + +is_pod_class(unique int id: @usertype ref); +is_standard_layout_class(unique int id: @usertype ref); + +is_complete(unique int id: @usertype ref); + +is_class_template(unique int id: @usertype ref); +class_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +class_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +class_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +is_proxy_class_for( + unique int id: @usertype ref, + unique int templ_param_id: @usertype ref +); + +type_mentions( + unique int id: @type_mention, + int type_id: @type ref, + int location: @location ref, + // a_symbol_reference_kind from the EDG frontend. See symbol_ref.h there. + int kind: int ref +); + +is_function_template(unique int id: @function ref); +function_instantiation( + unique int to: @function ref, + int from: @function ref +); +function_template_argument( + int function_id: @function ref, + int index: int ref, + int arg_type: @type ref +); +function_template_argument_value( + int function_id: @function ref, + int index: int ref, + int arg_value: @expr ref +); + +is_variable_template(unique int id: @variable ref); +variable_instantiation( + unique int to: @variable ref, + int from: @variable ref +); +variable_template_argument( + int variable_id: @variable ref, + int index: int ref, + int arg_type: @type ref +); +variable_template_argument_value( + int variable_id: @variable ref, + int index: int ref, + int arg_value: @expr ref +); + +/* + Fixed point types + precision(1) = short, precision(2) = default, precision(3) = long + is_unsigned(1) = unsigned is_unsigned(2) = signed + is_fract_type(1) = declared with _Fract + saturating(1) = declared with _Sat +*/ +/* TODO +fixedpointtypes( + unique int id: @fixedpointtype, + int precision: int ref, + int is_unsigned: int ref, + int is_fract_type: int ref, + int saturating: int ref); +*/ + +routinetypes( + unique int id: @routinetype, + int return_type: @type ref +); + +routinetypeargs( + int routine: @routinetype ref, + int index: int ref, + int type_id: @type ref +); + +ptrtomembers( + unique int id: @ptrtomember, + int type_id: @type ref, + int class_id: @type ref +); + +/* + specifiers for types, functions, and variables + + "public", + "protected", + "private", + + "const", + "volatile", + "static", + + "pure", + "virtual", + "sealed", // Microsoft + "__interface", // Microsoft + "inline", + "explicit", + + "near", // near far extension + "far", // near far extension + "__ptr32", // Microsoft + "__ptr64", // Microsoft + "__sptr", // Microsoft + "__uptr", // Microsoft + "dllimport", // Microsoft + "dllexport", // Microsoft + "thread", // Microsoft + "naked", // Microsoft + "microsoft_inline", // Microsoft + "forceinline", // Microsoft + "selectany", // Microsoft + "nothrow", // Microsoft + "novtable", // Microsoft + "noreturn", // Microsoft + "noinline", // Microsoft + "noalias", // Microsoft + "restrict", // Microsoft +*/ + +specifiers( + unique int id: @specifier, + unique string str: string ref +); + +typespecifiers( + int type_id: @type ref, + int spec_id: @specifier ref +); + +funspecifiers( + int func_id: @function ref, + int spec_id: @specifier ref +); + +varspecifiers( + int var_id: @accessible ref, + int spec_id: @specifier ref +); + +attributes( + unique int id: @attribute, + int kind: int ref, + string name: string ref, + string name_space: string ref, + int location: @location_default ref +); + +case @attribute.kind of + 0 = @gnuattribute +| 1 = @stdattribute +| 2 = @declspec +| 3 = @msattribute +| 4 = @alignas +// ... 5 @objc_propertyattribute deprecated +; + +attribute_args( + unique int id: @attribute_arg, + int kind: int ref, + int attribute: @attribute ref, + int index: int ref, + int location: @location_default ref +); + +case @attribute_arg.kind of + 0 = @attribute_arg_empty +| 1 = @attribute_arg_token +| 2 = @attribute_arg_constant +| 3 = @attribute_arg_type +; + +attribute_arg_value( + unique int arg: @attribute_arg ref, + string value: string ref +); +attribute_arg_type( + unique int arg: @attribute_arg ref, + int type_id: @type ref +); +attribute_arg_name( + unique int arg: @attribute_arg ref, + string name: string ref +); + +typeattributes( + int type_id: @type ref, + int spec_id: @attribute ref +); + +funcattributes( + int func_id: @function ref, + int spec_id: @attribute ref +); + +varattributes( + int var_id: @accessible ref, + int spec_id: @attribute ref +); + +stmtattributes( + int stmt_id: @stmt ref, + int spec_id: @attribute ref +); + +@type = @builtintype + | @derivedtype + | @usertype + /* TODO | @fixedpointtype */ + | @routinetype + | @ptrtomember + | @decltype; + +unspecifiedtype( + unique int type_id: @type ref, + int unspecified_type_id: @type ref +); + +member( + int parent: @type ref, + int index: int ref, + int child: @member ref +); + +@enclosingfunction_child = @usertype | @variable | @namespace + +enclosingfunction( + unique int child: @enclosingfunction_child ref, + int parent: @function ref +); + +derivations( + unique int derivation: @derivation, + int sub: @type ref, + int index: int ref, + int super: @type ref, + int location: @location_default ref +); + +derspecifiers( + int der_id: @derivation ref, + int spec_id: @specifier ref +); + +/** + * Contains the byte offset of the base class subobject within the derived + * class. Only holds for non-virtual base classes, but see table + * `virtual_base_offsets` for offsets of virtual base class subobjects. + */ +direct_base_offsets( + unique int der_id: @derivation ref, + int offset: int ref +); + +/** + * Contains the byte offset of the virtual base class subobject for class + * `super` within a most-derived object of class `sub`. `super` can be either a + * direct or indirect base class. + */ +#keyset[sub, super] +virtual_base_offsets( + int sub: @usertype ref, + int super: @usertype ref, + int offset: int ref +); + +frienddecls( + unique int id: @frienddecl, + int type_id: @type ref, + int decl_id: @declaration ref, + int location: @location_default ref +); + +@declaredtype = @usertype ; + +@declaration = @function + | @declaredtype + | @variable + | @enumconstant + | @frienddecl; + +@member = @membervariable + | @function + | @declaredtype + | @enumconstant; + +@locatable = @diagnostic + | @declaration + | @ppd_include + | @ppd_define + | @macroinvocation + /*| @funcall*/ + | @xmllocatable + | @attribute + | @attribute_arg; + +@namedscope = @namespace | @usertype; + +@element = @locatable + | @file + | @folder + | @specifier + | @type + | @expr + | @namespace + | @initialiser + | @stmt + | @derivation + | @comment + | @preprocdirect + | @fun_decl + | @var_decl + | @type_decl + | @namespace_decl + | @using + | @namequalifier + | @specialnamequalifyingelement + | @static_assert + | @type_mention + | @lambdacapture; + +@exprparent = @element; + +comments( + unique int id: @comment, + string contents: string ref, + int location: @location_default ref +); + +commentbinding( + int id: @comment ref, + int element: @element ref +); + +exprconv( + int converted: @expr ref, + unique int conversion: @expr ref +); + +compgenerated(unique int id: @element ref); + +/** + * `destructor_call` destructs the `i`'th entity that should be + * destructed following `element`. Note that entities should be + * destructed in reverse construction order, so for a given `element` + * these should be called from highest to lowest `i`. + */ +#keyset[element, destructor_call] +#keyset[element, i] +synthetic_destructor_call( + int element: @element ref, + int i: int ref, + int destructor_call: @routineexpr ref +); + +namespaces( + unique int id: @namespace, + string name: string ref +); + +namespace_inline( + unique int id: @namespace ref +); + +namespacembrs( + int parentid: @namespace ref, + unique int memberid: @namespacembr ref +); + +@namespacembr = @declaration | @namespace; + +exprparents( + int expr_id: @expr ref, + int child_index: int ref, + int parent_id: @exprparent ref +); + +expr_isload(unique int expr_id: @expr ref); + +@cast = @c_style_cast + | @const_cast + | @dynamic_cast + | @reinterpret_cast + | @static_cast + ; + +/* +case @conversion.kind of + 0 = @simple_conversion // a numeric conversion, qualification conversion, or a reinterpret_cast +| 1 = @bool_conversion // conversion to 'bool' +| 2 = @base_class_conversion // a derived-to-base conversion +| 3 = @derived_class_conversion // a base-to-derived conversion +| 4 = @pm_base_class_conversion // a derived-to-base conversion of a pointer to member +| 5 = @pm_derived_class_conversion // a base-to-derived conversion of a pointer to member +| 6 = @glvalue_adjust // an adjustment of the type of a glvalue +| 7 = @prvalue_adjust // an adjustment of the type of a prvalue +; +*/ +/** + * Describes the semantics represented by a cast expression. This is largely + * independent of the source syntax of the cast, so it is separate from the + * regular expression kind. + */ +conversionkinds( + unique int expr_id: @cast ref, + int kind: int ref +); + +@conversion = @cast + | @array_to_pointer + | @parexpr + | @reference_to + | @ref_indirect + | @temp_init + ; + +/* +case @funbindexpr.kind of + 0 = @normal_call // a normal call +| 1 = @virtual_call // a virtual call +| 2 = @adl_call // a call whose target is only found by ADL +; +*/ +iscall(unique int caller: @funbindexpr ref, int kind: int ref); + +numtemplatearguments( + unique int expr_id: @expr ref, + int num: int ref +); + +specialnamequalifyingelements( + unique int id: @specialnamequalifyingelement, + unique string name: string ref +); + +@namequalifiableelement = @expr | @namequalifier; +@namequalifyingelement = @namespace + | @specialnamequalifyingelement + | @usertype; + +namequalifiers( + unique int id: @namequalifier, + unique int qualifiableelement: @namequalifiableelement ref, + int qualifyingelement: @namequalifyingelement ref, + int location: @location_default ref +); + +varbind( + int expr: @varbindexpr ref, + int var: @accessible ref +); + +funbind( + int expr: @funbindexpr ref, + int fun: @function ref +); + +@any_new_expr = @new_expr + | @new_array_expr; + +@new_or_delete_expr = @any_new_expr + | @delete_expr + | @delete_array_expr; + +@prefix_crement_expr = @preincrexpr | @predecrexpr; + +@postfix_crement_expr = @postincrexpr | @postdecrexpr; + +@increment_expr = @preincrexpr | @postincrexpr; + +@decrement_expr = @predecrexpr | @postdecrexpr; + +@crement_expr = @increment_expr | @decrement_expr; + +@un_arith_op_expr = @arithnegexpr + | @unaryplusexpr + | @conjugation + | @realpartexpr + | @imagpartexpr + | @crement_expr + ; + +@un_bitwise_op_expr = @complementexpr; + +@un_log_op_expr = @notexpr; + +@un_op_expr = @address_of + | @indirect + | @un_arith_op_expr + | @un_bitwise_op_expr + | @builtinaddressof + | @vec_fill + | @un_log_op_expr + | @co_await + | @co_yield + ; + +@bin_log_op_expr = @andlogicalexpr | @orlogicalexpr; + +@cmp_op_expr = @eq_op_expr | @rel_op_expr; + +@eq_op_expr = @eqexpr | @neexpr; + +@rel_op_expr = @gtexpr + | @ltexpr + | @geexpr + | @leexpr + | @spaceshipexpr + ; + +@bin_bitwise_op_expr = @lshiftexpr + | @rshiftexpr + | @andexpr + | @orexpr + | @xorexpr + ; + +@p_arith_op_expr = @paddexpr + | @psubexpr + | @pdiffexpr + ; + +@bin_arith_op_expr = @addexpr + | @subexpr + | @mulexpr + | @divexpr + | @remexpr + | @jmulexpr + | @jdivexpr + | @fjaddexpr + | @jfaddexpr + | @fjsubexpr + | @jfsubexpr + | @minexpr + | @maxexpr + | @p_arith_op_expr + ; + +@bin_op_expr = @bin_arith_op_expr + | @bin_bitwise_op_expr + | @cmp_op_expr + | @bin_log_op_expr + ; + +@op_expr = @un_op_expr + | @bin_op_expr + | @assign_expr + | @conditionalexpr + ; + +@assign_arith_expr = @assignaddexpr + | @assignsubexpr + | @assignmulexpr + | @assigndivexpr + | @assignremexpr + ; + +@assign_bitwise_expr = @assignandexpr + | @assignorexpr + | @assignxorexpr + | @assignlshiftexpr + | @assignrshiftexpr + | @assignpaddexpr + | @assignpsubexpr + ; + +@assign_op_expr = @assign_arith_expr | @assign_bitwise_expr + +@assign_expr = @assignexpr | @assign_op_expr + +/* + case @allocator.form of + 0 = plain + | 1 = alignment + ; +*/ + +/** + * The allocator function associated with a `new` or `new[]` expression. + * The `form` column specified whether the allocation call contains an alignment + * argument. + */ +expr_allocator( + unique int expr: @any_new_expr ref, + int func: @function ref, + int form: int ref +); + +/* + case @deallocator.form of + 0 = plain + | 1 = size + | 2 = alignment + | 3 = size_and_alignment + ; +*/ + +/** + * The deallocator function associated with a `delete`, `delete[]`, `new`, or + * `new[]` expression. For a `new` or `new[]` expression, the deallocator is the + * one used to free memory if the initialization throws an exception. + * The `form` column specifies whether the deallocation call contains a size + * argument, and alignment argument, or both. + */ +expr_deallocator( + unique int expr: @new_or_delete_expr ref, + int func: @function ref, + int form: int ref +); + +/** + * Holds if the `@conditionalexpr` is of the two operand form + * `guard ? : false`. + */ +expr_cond_two_operand( + unique int cond: @conditionalexpr ref +); + +/** + * The guard of `@conditionalexpr` `guard ? true : false` + */ +expr_cond_guard( + unique int cond: @conditionalexpr ref, + int guard: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` holds. For the two operand form + * `guard ?: false` consider using `expr_cond_guard` instead. + */ +expr_cond_true( + unique int cond: @conditionalexpr ref, + int true: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` does not hold. + */ +expr_cond_false( + unique int cond: @conditionalexpr ref, + int false: @expr ref +); + +/** A string representation of the value. */ +values( + unique int id: @value, + string str: string ref +); + +/** The actual text in the source code for the value, if any. */ +valuetext( + unique int id: @value ref, + string text: string ref +); + +valuebind( + int val: @value ref, + unique int expr: @expr ref +); + +fieldoffsets( + unique int id: @variable ref, + int byteoffset: int ref, + int bitoffset: int ref +); + +bitfield( + unique int id: @variable ref, + int bits: int ref, + int declared_bits: int ref +); + +/* TODO +memberprefix( + int member: @expr ref, + int prefix: @expr ref +); +*/ + +/* + kind(1) = mbrcallexpr + kind(2) = mbrptrcallexpr + kind(3) = mbrptrmbrcallexpr + kind(4) = ptrmbrptrmbrcallexpr + kind(5) = mbrreadexpr // x.y + kind(6) = mbrptrreadexpr // p->y + kind(7) = mbrptrmbrreadexpr // x.*pm + kind(8) = mbrptrmbrptrreadexpr // x->*pm + kind(9) = staticmbrreadexpr // static x.y + kind(10) = staticmbrptrreadexpr // static p->y +*/ +/* TODO +memberaccess( + int member: @expr ref, + int kind: int ref +); +*/ + +initialisers( + unique int init: @initialiser, + int var: @accessible ref, + unique int expr: @expr ref, + int location: @location_expr ref +); + +/** + * An ancestor for the expression, for cases in which we cannot + * otherwise find the expression's parent. + */ +expr_ancestor( + int exp: @expr ref, + int ancestor: @element ref +); + +exprs( + unique int id: @expr, + int kind: int ref, + int location: @location_expr ref +); + +/* + case @value.category of + 1 = prval + | 2 = xval + | 3 = lval + ; +*/ +expr_types( + int id: @expr ref, + int typeid: @type ref, + int value_category: int ref +); + +case @expr.kind of + 1 = @errorexpr +| 2 = @address_of // & AddressOfExpr +| 3 = @reference_to // ReferenceToExpr (implicit?) +| 4 = @indirect // * PointerDereferenceExpr +| 5 = @ref_indirect // ReferenceDereferenceExpr (implicit?) +// ... +| 8 = @array_to_pointer // (???) +| 9 = @vacuous_destructor_call // VacuousDestructorCall +// ... +| 11 = @assume // Microsoft +| 12 = @parexpr +| 13 = @arithnegexpr +| 14 = @unaryplusexpr +| 15 = @complementexpr +| 16 = @notexpr +| 17 = @conjugation // GNU ~ operator +| 18 = @realpartexpr // GNU __real +| 19 = @imagpartexpr // GNU __imag +| 20 = @postincrexpr +| 21 = @postdecrexpr +| 22 = @preincrexpr +| 23 = @predecrexpr +| 24 = @conditionalexpr +| 25 = @addexpr +| 26 = @subexpr +| 27 = @mulexpr +| 28 = @divexpr +| 29 = @remexpr +| 30 = @jmulexpr // C99 mul imaginary +| 31 = @jdivexpr // C99 div imaginary +| 32 = @fjaddexpr // C99 add real + imaginary +| 33 = @jfaddexpr // C99 add imaginary + real +| 34 = @fjsubexpr // C99 sub real - imaginary +| 35 = @jfsubexpr // C99 sub imaginary - real +| 36 = @paddexpr // pointer add (pointer + int or int + pointer) +| 37 = @psubexpr // pointer sub (pointer - integer) +| 38 = @pdiffexpr // difference between two pointers +| 39 = @lshiftexpr +| 40 = @rshiftexpr +| 41 = @andexpr +| 42 = @orexpr +| 43 = @xorexpr +| 44 = @eqexpr +| 45 = @neexpr +| 46 = @gtexpr +| 47 = @ltexpr +| 48 = @geexpr +| 49 = @leexpr +| 50 = @minexpr // GNU minimum +| 51 = @maxexpr // GNU maximum +| 52 = @assignexpr +| 53 = @assignaddexpr +| 54 = @assignsubexpr +| 55 = @assignmulexpr +| 56 = @assigndivexpr +| 57 = @assignremexpr +| 58 = @assignlshiftexpr +| 59 = @assignrshiftexpr +| 60 = @assignandexpr +| 61 = @assignorexpr +| 62 = @assignxorexpr +| 63 = @assignpaddexpr // assign pointer add +| 64 = @assignpsubexpr // assign pointer sub +| 65 = @andlogicalexpr +| 66 = @orlogicalexpr +| 67 = @commaexpr +| 68 = @subscriptexpr // access to member of an array, e.g., a[5] +// ... 69 @objc_subscriptexpr deprecated +// ... 70 @cmdaccess deprecated +// ... +| 73 = @virtfunptrexpr +| 74 = @callexpr +// ... 75 @msgexpr_normal deprecated +// ... 76 @msgexpr_super deprecated +// ... 77 @atselectorexpr deprecated +// ... 78 @atprotocolexpr deprecated +| 79 = @vastartexpr +| 80 = @vaargexpr +| 81 = @vaendexpr +| 82 = @vacopyexpr +// ... 83 @atencodeexpr deprecated +| 84 = @varaccess +| 85 = @thisaccess +// ... 86 @objc_box_expr deprecated +| 87 = @new_expr +| 88 = @delete_expr +| 89 = @throw_expr +| 90 = @condition_decl // a variable declared in a condition, e.g., if(int x = y > 2) +| 91 = @braced_init_list +| 92 = @type_id +| 93 = @runtime_sizeof +| 94 = @runtime_alignof +| 95 = @sizeof_pack +| 96 = @expr_stmt // GNU extension +| 97 = @routineexpr +| 98 = @type_operand // used to access a type in certain contexts (haven't found any examples yet....) +| 99 = @offsetofexpr // offsetof ::= type and field +| 100 = @hasassignexpr // __has_assign ::= type +| 101 = @hascopyexpr // __has_copy ::= type +| 102 = @hasnothrowassign // __has_nothrow_assign ::= type +| 103 = @hasnothrowconstr // __has_nothrow_constructor ::= type +| 104 = @hasnothrowcopy // __has_nothrow_copy ::= type +| 105 = @hastrivialassign // __has_trivial_assign ::= type +| 106 = @hastrivialconstr // __has_trivial_constructor ::= type +| 107 = @hastrivialcopy // __has_trivial_copy ::= type +| 108 = @hasuserdestr // __has_user_destructor ::= type +| 109 = @hasvirtualdestr // __has_virtual_destructor ::= type +| 110 = @isabstractexpr // __is_abstract ::= type +| 111 = @isbaseofexpr // __is_base_of ::= type type +| 112 = @isclassexpr // __is_class ::= type +| 113 = @isconvtoexpr // __is_convertible_to ::= type type +| 114 = @isemptyexpr // __is_empty ::= type +| 115 = @isenumexpr // __is_enum ::= type +| 116 = @ispodexpr // __is_pod ::= type +| 117 = @ispolyexpr // __is_polymorphic ::= type +| 118 = @isunionexpr // __is_union ::= type +| 119 = @typescompexpr // GNU __builtin_types_compatible ::= type type +| 120 = @intaddrexpr // EDG internal builtin, used to implement offsetof +// ... +| 122 = @hastrivialdestructor // __has_trivial_destructor ::= type +| 123 = @literal +| 124 = @uuidof +| 127 = @aggregateliteral +| 128 = @delete_array_expr +| 129 = @new_array_expr +// ... 130 @objc_array_literal deprecated +// ... 131 @objc_dictionary_literal deprecated +| 132 = @foldexpr +// ... +| 200 = @ctordirectinit +| 201 = @ctorvirtualinit +| 202 = @ctorfieldinit +| 203 = @ctordelegatinginit +| 204 = @dtordirectdestruct +| 205 = @dtorvirtualdestruct +| 206 = @dtorfielddestruct +// ... +| 210 = @static_cast +| 211 = @reinterpret_cast +| 212 = @const_cast +| 213 = @dynamic_cast +| 214 = @c_style_cast +| 215 = @lambdaexpr +| 216 = @param_ref +| 217 = @noopexpr +// ... +| 294 = @istriviallyconstructibleexpr +| 295 = @isdestructibleexpr +| 296 = @isnothrowdestructibleexpr +| 297 = @istriviallydestructibleexpr +| 298 = @istriviallyassignableexpr +| 299 = @isnothrowassignableexpr +| 300 = @istrivialexpr +| 301 = @isstandardlayoutexpr +| 302 = @istriviallycopyableexpr +| 303 = @isliteraltypeexpr +| 304 = @hastrivialmoveconstructorexpr +| 305 = @hastrivialmoveassignexpr +| 306 = @hasnothrowmoveassignexpr +| 307 = @isconstructibleexpr +| 308 = @isnothrowconstructibleexpr +| 309 = @hasfinalizerexpr +| 310 = @isdelegateexpr +| 311 = @isinterfaceclassexpr +| 312 = @isrefarrayexpr +| 313 = @isrefclassexpr +| 314 = @issealedexpr +| 315 = @issimplevalueclassexpr +| 316 = @isvalueclassexpr +| 317 = @isfinalexpr +| 319 = @noexceptexpr +| 320 = @builtinshufflevector +| 321 = @builtinchooseexpr +| 322 = @builtinaddressof +| 323 = @vec_fill +| 324 = @builtinconvertvector +| 325 = @builtincomplex +| 326 = @spaceshipexpr +| 327 = @co_await +| 328 = @co_yield +| 329 = @temp_init +; + +@var_args_expr = @vastartexpr + | @vaendexpr + | @vaargexpr + | @vacopyexpr + ; + +@builtin_op = @var_args_expr + | @noopexpr + | @offsetofexpr + | @intaddrexpr + | @hasassignexpr + | @hascopyexpr + | @hasnothrowassign + | @hasnothrowconstr + | @hasnothrowcopy + | @hastrivialassign + | @hastrivialconstr + | @hastrivialcopy + | @hastrivialdestructor + | @hasuserdestr + | @hasvirtualdestr + | @isabstractexpr + | @isbaseofexpr + | @isclassexpr + | @isconvtoexpr + | @isemptyexpr + | @isenumexpr + | @ispodexpr + | @ispolyexpr + | @isunionexpr + | @typescompexpr + | @builtinshufflevector + | @builtinconvertvector + | @builtinaddressof + | @istriviallyconstructibleexpr + | @isdestructibleexpr + | @isnothrowdestructibleexpr + | @istriviallydestructibleexpr + | @istriviallyassignableexpr + | @isnothrowassignableexpr + | @isstandardlayoutexpr + | @istriviallycopyableexpr + | @isliteraltypeexpr + | @hastrivialmoveconstructorexpr + | @hastrivialmoveassignexpr + | @hasnothrowmoveassignexpr + | @isconstructibleexpr + | @isnothrowconstructibleexpr + | @hasfinalizerexpr + | @isdelegateexpr + | @isinterfaceclassexpr + | @isrefarrayexpr + | @isrefclassexpr + | @issealedexpr + | @issimplevalueclassexpr + | @isvalueclassexpr + | @isfinalexpr + | @builtinchooseexpr + | @builtincomplex + ; + +new_allocated_type( + unique int expr: @new_expr ref, + int type_id: @type ref +); + +new_array_allocated_type( + unique int expr: @new_array_expr ref, + int type_id: @type ref +); + +/** + * The field being initialized by an initializer expression within an aggregate + * initializer for a class/struct/union. + */ +#keyset[aggregate, field] +aggregate_field_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int field: @membervariable ref +); + +/** + * The index of the element being initialized by an initializer expression + * within an aggregate initializer for an array. + */ +#keyset[aggregate, element_index] +aggregate_array_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int element_index: int ref +); + +@ctorinit = @ctordirectinit + | @ctorvirtualinit + | @ctorfieldinit + | @ctordelegatinginit; +@dtordestruct = @dtordirectdestruct + | @dtorvirtualdestruct + | @dtorfielddestruct; + + +condition_decl_bind( + unique int expr: @condition_decl ref, + unique int decl: @declaration ref +); + +typeid_bind( + unique int expr: @type_id ref, + int type_id: @type ref +); + +uuidof_bind( + unique int expr: @uuidof ref, + int type_id: @type ref +); + +@runtime_sizeof_or_alignof = @runtime_sizeof | @runtime_alignof; + +sizeof_bind( + unique int expr: @runtime_sizeof_or_alignof ref, + int type_id: @type ref +); + +code_block( + unique int block: @literal ref, + unique int routine: @function ref +); + +lambdas( + unique int expr: @lambdaexpr ref, + string default_capture: string ref, + boolean has_explicit_return_type: boolean ref +); + +lambda_capture( + unique int id: @lambdacapture, + int lambda: @lambdaexpr ref, + int index: int ref, + int field: @membervariable ref, + boolean captured_by_reference: boolean ref, + boolean is_implicit: boolean ref, + int location: @location_default ref +); + +@funbindexpr = @routineexpr + | @new_expr + | @delete_expr + | @delete_array_expr + | @ctordirectinit + | @ctorvirtualinit + | @ctordelegatinginit + | @dtordirectdestruct + | @dtorvirtualdestruct; + +@varbindexpr = @varaccess | @ctorfieldinit | @dtorfielddestruct; +@addressable = @function | @variable ; +@accessible = @addressable | @enumconstant ; + +@access = @varaccess | @routineexpr ; + +fold( + int expr: @foldexpr ref, + string operator: string ref, + boolean is_left_fold: boolean ref +); + +stmts( + unique int id: @stmt, + int kind: int ref, + int location: @location_stmt ref +); + +case @stmt.kind of + 1 = @stmt_expr +| 2 = @stmt_if +| 3 = @stmt_while +| 4 = @stmt_goto +| 5 = @stmt_label +| 6 = @stmt_return +| 7 = @stmt_block +| 8 = @stmt_end_test_while // do { ... } while ( ... ) +| 9 = @stmt_for +| 10 = @stmt_switch_case +| 11 = @stmt_switch +| 13 = @stmt_asm // "asm" statement or the body of an asm function +| 15 = @stmt_try_block +| 16 = @stmt_microsoft_try // Microsoft +| 17 = @stmt_decl +| 18 = @stmt_set_vla_size // C99 +| 19 = @stmt_vla_decl // C99 +| 25 = @stmt_assigned_goto // GNU +| 26 = @stmt_empty +| 27 = @stmt_continue +| 28 = @stmt_break +| 29 = @stmt_range_based_for // C++11 +// ... 30 @stmt_at_autoreleasepool_block deprecated +// ... 31 @stmt_objc_for_in deprecated +// ... 32 @stmt_at_synchronized deprecated +| 33 = @stmt_handler +// ... 34 @stmt_finally_end deprecated +| 35 = @stmt_constexpr_if +| 37 = @stmt_co_return +; + +type_vla( + int type_id: @type ref, + int decl: @stmt_vla_decl ref +); + +variable_vla( + int var: @variable ref, + int decl: @stmt_vla_decl ref +); + +if_then( + unique int if_stmt: @stmt_if ref, + int then_id: @stmt ref +); + +if_else( + unique int if_stmt: @stmt_if ref, + int else_id: @stmt ref +); + +constexpr_if_then( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int then_id: @stmt ref +); + +constexpr_if_else( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int else_id: @stmt ref +); + +while_body( + unique int while_stmt: @stmt_while ref, + int body_id: @stmt ref +); + +do_body( + unique int do_stmt: @stmt_end_test_while ref, + int body_id: @stmt ref +); + +#keyset[switch_stmt, index] +switch_case( + int switch_stmt: @stmt_switch ref, + int index: int ref, + int case_id: @stmt_switch_case ref +); + +switch_body( + unique int switch_stmt: @stmt_switch ref, + int body_id: @stmt ref +); + +for_initialization( + unique int for_stmt: @stmt_for ref, + int init_id: @stmt ref +); + +for_condition( + unique int for_stmt: @stmt_for ref, + int condition_id: @expr ref +); + +for_update( + unique int for_stmt: @stmt_for ref, + int update_id: @expr ref +); + +for_body( + unique int for_stmt: @stmt_for ref, + int body_id: @stmt ref +); + +@stmtparent = @stmt | @expr_stmt ; +stmtparents( + unique int id: @stmt ref, + int index: int ref, + int parent: @stmtparent ref +); + +ishandler(unique int block: @stmt_block ref); + +@cfgnode = @stmt | @expr | @function | @initialiser ; + +stmt_decl_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl: @declaration ref +); + +stmt_decl_entry_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl_entry: @element ref +); + +@functionorblock = @function | @stmt_block; + +blockscope( + unique int block: @stmt_block ref, + int enclosing: @functionorblock ref +); + +@jump = @stmt_goto | @stmt_break | @stmt_continue; + +@jumporlabel = @jump | @stmt_label | @literal; + +jumpinfo( + unique int id: @jumporlabel ref, + string str: string ref, + int target: @stmt ref +); + +preprocdirects( + unique int id: @preprocdirect, + int kind: int ref, + int location: @location_default ref +); +case @preprocdirect.kind of + 0 = @ppd_if +| 1 = @ppd_ifdef +| 2 = @ppd_ifndef +| 3 = @ppd_elif +| 4 = @ppd_else +| 5 = @ppd_endif +| 6 = @ppd_plain_include +| 7 = @ppd_define +| 8 = @ppd_undef +| 9 = @ppd_line +| 10 = @ppd_error +| 11 = @ppd_pragma +| 12 = @ppd_objc_import +| 13 = @ppd_include_next +| 18 = @ppd_warning +; + +@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next; + +@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif; + +preprocpair( + int begin : @ppd_branch ref, + int elseelifend : @preprocdirect ref +); + +preproctrue(int branch : @ppd_branch ref); +preprocfalse(int branch : @ppd_branch ref); + +preproctext( + unique int id: @preprocdirect ref, + string head: string ref, + string body: string ref +); + +includes( + unique int id: @ppd_include ref, + int included: @file ref +); + +link_targets( + unique int id: @link_target, + int binary: @file ref +); + +link_parent( + int element : @element ref, + int link_target : @link_target ref +); + +/* XML Files */ + +xmlEncoding(unique int id: @file ref, string encoding: string ref); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref +); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref +); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref +); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref +); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref +); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref +); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref +); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref +); + +@xmllocatable = @xmlcharacters + | @xmlelement + | @xmlcomment + | @xmlattribute + | @xmldtd + | @file + | @xmlnamespace; diff --git a/cpp/upgrades/7806a11dd7ab6611c4245b2e96b8ed13cb5c6056/semmlecode.cpp.dbscheme b/cpp/upgrades/7806a11dd7ab6611c4245b2e96b8ed13cb5c6056/semmlecode.cpp.dbscheme new file mode 100644 index 00000000000..018f430097e --- /dev/null +++ b/cpp/upgrades/7806a11dd7ab6611c4245b2e96b8ed13cb5c6056/semmlecode.cpp.dbscheme @@ -0,0 +1,2136 @@ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * gcc -c f1.c f2.c f3.c + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + /** + * An invocation of the compiler. Note that more than one file may + * be compiled per invocation. For example, this command compiles + * three source files: + * + * gcc -c f1.c f2.c f3.c + */ + unique int id : @compilation, + string cwd : string ref +); + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | *path to extractor* + * 1 | `--mimic` + * 2 | `/usr/bin/gcc` + * 3 | `-c` + * 4 | f1.c + * 5 | f2.c + * 6 | f3.c + */ +#keyset[id, num] +compilation_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * The source files that are compiled by a compiler invocation. + * If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.c + * 1 | f2.c + * 2 | f3.c + * + * Note that even if those files `#include` headers, those headers + * do not appear as rows. + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + + +/** + * External data, loaded from CSV files during snapshot creation. See + * [Tutorial: Incorporating external data](https://help.semmle.com/wiki/display/SD/Tutorial%3A+Incorporating+external+data) + * for more information. + */ +externalData( + int id : @externalDataElement, + string path : string ref, + int column: int ref, + string value : string ref +); + +/** + * The date of the snapshot. + */ +snapshotDate(unique date snapshotDate : date ref); + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/** + * Data used by the 'duplicate code' detection. + */ +duplicateCode( + unique int id : @duplication, + string relativePath : string ref, + int equivClass : int ref +); + +/** + * Data used by the 'similar code' detection. + */ +similarCode( + unique int id : @similarity, + string relativePath : string ref, + int equivClass : int ref +); + +/** + * Data used by the 'duplicate code' and 'similar code' detection. + */ +@duplication_or_similarity = @duplication | @similarity + +/** + * Data used by the 'duplicate code' and 'similar code' detection. + */ +#keyset[id, offset] +tokens( + int id : @duplication_or_similarity ref, + int offset : int ref, + int beginLine : int ref, + int beginColumn : int ref, + int endLine : int ref, + int endColumn : int ref +); + +/** + * Information about packages that provide code used during compilation. + * The `id` is just a unique identifier. + * The `namespace` is typically the name of the package manager that + * provided the package (e.g. "dpkg" or "yum"). + * The `package_name` is the name of the package, and `version` is its + * version (as a string). + */ +external_packages( + unique int id: @external_package, + string namespace : string ref, + string package_name : string ref, + string version : string ref +); + +/** + * Holds if File `fileid` was provided by package `package`. + */ +header_to_external_package( + int fileid : @file ref, + int package : @external_package ref +); + +/* + * Version history + */ + +svnentries( + unique int id : @svnentry, + string revision : string ref, + string author : string ref, + date revisionDate : date ref, + int changeSize : int ref +) + +svnaffectedfiles( + int id : @svnentry ref, + int file : @file ref, + string action : string ref +) + +svnentrymsg( + unique int id : @svnentry ref, + string message : string ref +) + +svnchurn( + int commit : @svnentry ref, + int file : @file ref, + int addedLines : int ref, + int deletedLines : int ref +) + +/* + * C++ dbscheme + */ + +@location = @location_stmt | @location_expr | @location_default ; + +/** + * The location of an element that is not an expression or a statement. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_default( + /** The location of an element that is not an expression or a statement. */ + unique int id: @location_default, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** + * The location of a statement. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_stmt( + /** The location of a statement. */ + unique int id: @location_stmt, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** + * The location of an expression. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_expr( + /** The location of an expression. */ + unique int id: @location_expr, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** An element for which line-count information is available. */ +@sourceline = @file | @function | @variable | @enumconstant | @xmllocatable; + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref +); + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location_default ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @folder | @file + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +fileannotations( + int id: @file ref, + int kind: int ref, + string name: string ref, + string value: string ref +); + +inmacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +affectedbymacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +/* + case @macroinvocations.kind of + 1 = macro expansion + | 2 = other macro reference + ; +*/ +macroinvocations( + unique int id: @macroinvocation, + int macro_id: @ppd_define ref, + int location: @location_default ref, + int kind: int ref +); + +macroparent( + unique int id: @macroinvocation ref, + int parent_id: @macroinvocation ref +); + +// a macroinvocation may be part of another location +// the way to find a constant expression that uses a macro +// is thus to find a constant expression that has a location +// to which a macro invocation is bound +macrolocationbind( + int id: @macroinvocation ref, + int location: @location ref +); + +#keyset[invocation, argument_index] +macro_argument_unexpanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +#keyset[invocation, argument_index] +macro_argument_expanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +/* + case @function.kind of + 1 = normal + | 2 = constructor + | 3 = destructor + | 4 = conversion + | 5 = operator + | 6 = builtin // GCC built-in functions, e.g. __builtin___memcpy_chk + ; +*/ +functions( + unique int id: @function, + string name: string ref, + int kind: int ref +); + +function_entry_point(int id: @function ref, unique int entry_point: @stmt ref); + +function_return_type(int id: @function ref, int return_type: @type ref); + +/** If `function` is a coroutine, then this gives the + std::experimental::resumable_traits instance associated with it, + and the variables representing the `handle` and `promise` for it. */ +coroutine( + unique int function: @function ref, + int traits: @type ref, + int handle: @variable ref, + int promise: @variable ref +); + +/** The `new` function used for allocating the coroutine state, if any. */ +coroutine_new( + unique int function: @function ref, + int new: @function ref +); + +/** The `delete` function used for deallocating the coroutine state, if any. */ +coroutine_delete( + unique int function: @function ref, + int delete: @function ref +); + +purefunctions(unique int id: @function ref); + +function_deleted(unique int id: @function ref); + +function_defaulted(unique int id: @function ref); + +member_function_this_type(unique int id: @function ref, int this_type: @type ref); + +#keyset[id, type_id] +fun_decls( + int id: @fun_decl, + int function: @function ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +fun_def(unique int id: @fun_decl ref); +fun_specialized(unique int id: @fun_decl ref); +fun_implicit(unique int id: @fun_decl ref); +fun_decl_specifiers( + int id: @fun_decl ref, + string name: string ref +) +#keyset[fun_decl, index] +fun_decl_throws( + int fun_decl: @fun_decl ref, + int index: int ref, + int type_id: @type ref +); +/* an empty throw specification is different from none */ +fun_decl_empty_throws(unique int fun_decl: @fun_decl ref); +fun_decl_noexcept( + int fun_decl: @fun_decl ref, + int constant: @expr ref +); +fun_decl_empty_noexcept(int fun_decl: @fun_decl ref); +fun_decl_typedef_type( + unique int fun_decl: @fun_decl ref, + int typedeftype_id: @usertype ref +); + +param_decl_bind( + unique int id: @var_decl ref, + int index: int ref, + int fun_decl: @fun_decl ref +); + +#keyset[id, type_id] +var_decls( + int id: @var_decl, + int variable: @variable ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +var_def(unique int id: @var_decl ref); +var_decl_specifiers( + int id: @var_decl ref, + string name: string ref +) + +type_decls( + unique int id: @type_decl, + int type_id: @type ref, + int location: @location_default ref +); +type_def(unique int id: @type_decl ref); +type_decl_top( + unique int type_decl: @type_decl ref +); + +namespace_decls( + unique int id: @namespace_decl, + int namespace_id: @namespace ref, + int location: @location_default ref, + int bodylocation: @location_default ref +); + +usings( + unique int id: @using, + int element_id: @element ref, + int location: @location_default ref +); + +/** The element which contains the `using` declaration. */ +using_container( + int parent: @element ref, + int child: @using ref +); + +static_asserts( + unique int id: @static_assert, + int condition : @expr ref, + string message : string ref, + int location: @location_default ref, + int enclosing : @element ref +); + +// each function has an ordered list of parameters +#keyset[id, type_id] +#keyset[function, index, type_id] +params( + int id: @parameter, + int function: @functionorblock ref, + int index: int ref, + int type_id: @type ref +); + +overrides(int new: @function ref, int old: @function ref); + +#keyset[id, type_id] +membervariables( + int id: @membervariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +globalvariables( + int id: @globalvariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +localvariables( + int id: @localvariable, + int type_id: @type ref, + string name: string ref +); + +autoderivation( + unique int var: @variable ref, + int derivation_type: @type ref +); + +enumconstants( + unique int id: @enumconstant, + int parent: @usertype ref, + int index: int ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); + +@variable = @localscopevariable | @globalvariable | @membervariable; + +@localscopevariable = @localvariable | @parameter; + +/* + Built-in types are the fundamental types, e.g., integral, floating, and void. + + case @builtintype.kind of + 1 = error + | 2 = unknown + | 3 = void + | 4 = boolean + | 5 = char + | 6 = unsigned_char + | 7 = signed_char + | 8 = short + | 9 = unsigned_short + | 10 = signed_short + | 11 = int + | 12 = unsigned_int + | 13 = signed_int + | 14 = long + | 15 = unsigned_long + | 16 = signed_long + | 17 = long_long + | 18 = unsigned_long_long + | 19 = signed_long_long + | 20 = __int8 // Microsoft-specific + | 21 = __int16 // Microsoft-specific + | 22 = __int32 // Microsoft-specific + | 23 = __int64 // Microsoft-specific + | 24 = float + | 25 = double + | 26 = long_double + | 27 = _Complex_float // C99-specific + | 28 = _Complex_double // C99-specific + | 29 = _Complex_long double // C99-specific + | 30 = _Imaginary_float // C99-specific + | 31 = _Imaginary_double // C99-specific + | 32 = _Imaginary_long_double // C99-specific + | 33 = wchar_t // Microsoft-specific + | 34 = decltype_nullptr // C++11 + | 35 = __int128 + | 36 = unsigned___int128 + | 37 = signed___int128 + | 38 = __float128 + | 39 = _Complex___float128 + | 40 = _Decimal32 + | 41 = _Decimal64 + | 42 = _Decimal128 + | 43 = char16_t + | 44 = char32_t + | 45 = _Float32 + | 46 = _Float32x + | 47 = _Float64 + | 48 = _Float64x + | 49 = _Float128 + | 50 = _Float128x + | 51 = char8_t + ; +*/ +builtintypes( + unique int id: @builtintype, + string name: string ref, + int kind: int ref, + int size: int ref, + int sign: int ref, + int alignment: int ref +); + +/* + Derived types are types that are directly derived from existing types and + point to, refer to, transform type data to return a new type. + + case @derivedtype.kind of + 1 = pointer + | 2 = reference + | 3 = type_with_specifiers + | 4 = array + | 5 = gnu_vector + | 6 = routineptr + | 7 = routinereference + | 8 = rvalue_reference // C++11 +// ... 9 type_conforming_to_protocols deprecated + | 10 = block + ; +*/ +derivedtypes( + unique int id: @derivedtype, + string name: string ref, + int kind: int ref, + int type_id: @type ref +); + +pointerishsize(unique int id: @derivedtype ref, + int size: int ref, + int alignment: int ref); + +arraysizes( + unique int id: @derivedtype ref, + int num_elements: int ref, + int bytesize: int ref, + int alignment: int ref +); + +typedefbase( + unique int id: @usertype ref, + int type_id: @type ref +); + +/** + * An instance of the C++11 `decltype` operator. For example: + * ``` + * int a; + * decltype(1+a) b; + * ``` + * Here `expr` is `1+a`. + * + * Sometimes an additional pair of parentheses around the expression + * would change the semantics of this decltype, e.g. + * ``` + * struct A { double x; }; + * const A* a = new A(); + * decltype( a->x ); // type is double + * decltype((a->x)); // type is const double& + * ``` + * (Please consult the C++11 standard for more details). + * `parentheses_would_change_meaning` is `true` iff that is the case. + */ +#keyset[id, expr] +decltypes( + int id: @decltype, + int expr: @expr ref, + int base_type: @type ref, + boolean parentheses_would_change_meaning: boolean ref +); + +/* + case @usertype.kind of + 1 = struct + | 2 = class + | 3 = union + | 4 = enum + | 5 = typedef // classic C: typedef typedef type name + | 6 = template + | 7 = template_parameter + | 8 = template_template_parameter + | 9 = proxy_class // a proxy class associated with a template parameter +// ... 10 objc_class deprecated +// ... 11 objc_protocol deprecated +// ... 12 objc_category deprecated + | 13 = scoped_enum + | 14 = using_alias // a using name = type style typedef + ; +*/ +usertypes( + unique int id: @usertype, + string name: string ref, + int kind: int ref +); + +usertypesize( + unique int id: @usertype ref, + int size: int ref, + int alignment: int ref +); + +usertype_final(unique int id: @usertype ref); + +usertype_uuid( + unique int id: @usertype ref, + unique string uuid: string ref +); + +mangled_name( + unique int id: @declaration ref, + int mangled_name : @mangledname +); + +is_pod_class(unique int id: @usertype ref); +is_standard_layout_class(unique int id: @usertype ref); + +is_complete(unique int id: @usertype ref); + +is_class_template(unique int id: @usertype ref); +class_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +class_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +class_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +is_proxy_class_for( + unique int id: @usertype ref, + unique int templ_param_id: @usertype ref +); + +type_mentions( + unique int id: @type_mention, + int type_id: @type ref, + int location: @location ref, + // a_symbol_reference_kind from the EDG frontend. See symbol_ref.h there. + int kind: int ref +); + +is_function_template(unique int id: @function ref); +function_instantiation( + unique int to: @function ref, + int from: @function ref +); +function_template_argument( + int function_id: @function ref, + int index: int ref, + int arg_type: @type ref +); +function_template_argument_value( + int function_id: @function ref, + int index: int ref, + int arg_value: @expr ref +); + +is_variable_template(unique int id: @variable ref); +variable_instantiation( + unique int to: @variable ref, + int from: @variable ref +); +variable_template_argument( + int variable_id: @variable ref, + int index: int ref, + int arg_type: @type ref +); +variable_template_argument_value( + int variable_id: @variable ref, + int index: int ref, + int arg_value: @expr ref +); + +/* + Fixed point types + precision(1) = short, precision(2) = default, precision(3) = long + is_unsigned(1) = unsigned is_unsigned(2) = signed + is_fract_type(1) = declared with _Fract + saturating(1) = declared with _Sat +*/ +/* TODO +fixedpointtypes( + unique int id: @fixedpointtype, + int precision: int ref, + int is_unsigned: int ref, + int is_fract_type: int ref, + int saturating: int ref); +*/ + +routinetypes( + unique int id: @routinetype, + int return_type: @type ref +); + +routinetypeargs( + int routine: @routinetype ref, + int index: int ref, + int type_id: @type ref +); + +ptrtomembers( + unique int id: @ptrtomember, + int type_id: @type ref, + int class_id: @type ref +); + +/* + specifiers for types, functions, and variables + + "public", + "protected", + "private", + + "const", + "volatile", + "static", + + "pure", + "virtual", + "sealed", // Microsoft + "__interface", // Microsoft + "inline", + "explicit", + + "near", // near far extension + "far", // near far extension + "__ptr32", // Microsoft + "__ptr64", // Microsoft + "__sptr", // Microsoft + "__uptr", // Microsoft + "dllimport", // Microsoft + "dllexport", // Microsoft + "thread", // Microsoft + "naked", // Microsoft + "microsoft_inline", // Microsoft + "forceinline", // Microsoft + "selectany", // Microsoft + "nothrow", // Microsoft + "novtable", // Microsoft + "noreturn", // Microsoft + "noinline", // Microsoft + "noalias", // Microsoft + "restrict", // Microsoft +*/ + +specifiers( + unique int id: @specifier, + unique string str: string ref +); + +typespecifiers( + int type_id: @type ref, + int spec_id: @specifier ref +); + +funspecifiers( + int func_id: @function ref, + int spec_id: @specifier ref +); + +varspecifiers( + int var_id: @accessible ref, + int spec_id: @specifier ref +); + +attributes( + unique int id: @attribute, + int kind: int ref, + string name: string ref, + string name_space: string ref, + int location: @location_default ref +); + +case @attribute.kind of + 0 = @gnuattribute +| 1 = @stdattribute +| 2 = @declspec +| 3 = @msattribute +| 4 = @alignas +// ... 5 @objc_propertyattribute deprecated +; + +attribute_args( + unique int id: @attribute_arg, + int kind: int ref, + int attribute: @attribute ref, + int index: int ref, + int location: @location_default ref +); + +case @attribute_arg.kind of + 0 = @attribute_arg_empty +| 1 = @attribute_arg_token +| 2 = @attribute_arg_constant +| 3 = @attribute_arg_type +; + +attribute_arg_value( + unique int arg: @attribute_arg ref, + string value: string ref +); +attribute_arg_type( + unique int arg: @attribute_arg ref, + int type_id: @type ref +); +attribute_arg_name( + unique int arg: @attribute_arg ref, + string name: string ref +); + +typeattributes( + int type_id: @type ref, + int spec_id: @attribute ref +); + +funcattributes( + int func_id: @function ref, + int spec_id: @attribute ref +); + +varattributes( + int var_id: @accessible ref, + int spec_id: @attribute ref +); + +stmtattributes( + int stmt_id: @stmt ref, + int spec_id: @attribute ref +); + +@type = @builtintype + | @derivedtype + | @usertype + /* TODO | @fixedpointtype */ + | @routinetype + | @ptrtomember + | @decltype; + +unspecifiedtype( + unique int type_id: @type ref, + int unspecified_type_id: @type ref +); + +member( + int parent: @type ref, + int index: int ref, + int child: @member ref +); + +@enclosingfunction_child = @usertype | @variable | @namespace + +enclosingfunction( + unique int child: @enclosingfunction_child ref, + int parent: @function ref +); + +derivations( + unique int derivation: @derivation, + int sub: @type ref, + int index: int ref, + int super: @type ref, + int location: @location_default ref +); + +derspecifiers( + int der_id: @derivation ref, + int spec_id: @specifier ref +); + +/** + * Contains the byte offset of the base class subobject within the derived + * class. Only holds for non-virtual base classes, but see table + * `virtual_base_offsets` for offsets of virtual base class subobjects. + */ +direct_base_offsets( + unique int der_id: @derivation ref, + int offset: int ref +); + +/** + * Contains the byte offset of the virtual base class subobject for class + * `super` within a most-derived object of class `sub`. `super` can be either a + * direct or indirect base class. + */ +#keyset[sub, super] +virtual_base_offsets( + int sub: @usertype ref, + int super: @usertype ref, + int offset: int ref +); + +frienddecls( + unique int id: @frienddecl, + int type_id: @type ref, + int decl_id: @declaration ref, + int location: @location_default ref +); + +@declaredtype = @usertype ; + +@declaration = @function + | @declaredtype + | @variable + | @enumconstant + | @frienddecl; + +@member = @membervariable + | @function + | @declaredtype + | @enumconstant; + +@locatable = @diagnostic + | @declaration + | @ppd_include + | @ppd_define + | @macroinvocation + /*| @funcall*/ + | @xmllocatable + | @attribute + | @attribute_arg; + +@namedscope = @namespace | @usertype; + +@element = @locatable + | @file + | @folder + | @specifier + | @type + | @expr + | @namespace + | @initialiser + | @stmt + | @derivation + | @comment + | @preprocdirect + | @fun_decl + | @var_decl + | @type_decl + | @namespace_decl + | @using + | @namequalifier + | @specialnamequalifyingelement + | @static_assert + | @type_mention + | @lambdacapture; + +@exprparent = @element; + +comments( + unique int id: @comment, + string contents: string ref, + int location: @location_default ref +); + +commentbinding( + int id: @comment ref, + int element: @element ref +); + +exprconv( + int converted: @expr ref, + unique int conversion: @expr ref +); + +compgenerated(unique int id: @element ref); + +/** + * `destructor_call` destructs the `i`'th entity that should be + * destructed following `element`. Note that entities should be + * destructed in reverse construction order, so for a given `element` + * these should be called from highest to lowest `i`. + */ +#keyset[element, destructor_call] +#keyset[element, i] +synthetic_destructor_call( + int element: @element ref, + int i: int ref, + int destructor_call: @routineexpr ref +); + +namespaces( + unique int id: @namespace, + string name: string ref +); + +namespace_inline( + unique int id: @namespace ref +); + +namespacembrs( + int parentid: @namespace ref, + unique int memberid: @namespacembr ref +); + +@namespacembr = @declaration | @namespace; + +exprparents( + int expr_id: @expr ref, + int child_index: int ref, + int parent_id: @exprparent ref +); + +expr_isload(unique int expr_id: @expr ref); + +@cast = @c_style_cast + | @const_cast + | @dynamic_cast + | @reinterpret_cast + | @static_cast + ; + +/* +case @conversion.kind of + 0 = @simple_conversion // a numeric conversion, qualification conversion, or a reinterpret_cast +| 1 = @bool_conversion // conversion to 'bool' +| 2 = @base_class_conversion // a derived-to-base conversion +| 3 = @derived_class_conversion // a base-to-derived conversion +| 4 = @pm_base_class_conversion // a derived-to-base conversion of a pointer to member +| 5 = @pm_derived_class_conversion // a base-to-derived conversion of a pointer to member +| 6 = @glvalue_adjust // an adjustment of the type of a glvalue +| 7 = @prvalue_adjust // an adjustment of the type of a prvalue +; +*/ +/** + * Describes the semantics represented by a cast expression. This is largely + * independent of the source syntax of the cast, so it is separate from the + * regular expression kind. + */ +conversionkinds( + unique int expr_id: @cast ref, + int kind: int ref +); + +@conversion = @cast + | @array_to_pointer + | @parexpr + | @reference_to + | @ref_indirect + | @temp_init + ; + +/* +case @funbindexpr.kind of + 0 = @normal_call // a normal call +| 1 = @virtual_call // a virtual call +| 2 = @adl_call // a call whose target is only found by ADL +; +*/ +iscall(unique int caller: @funbindexpr ref, int kind: int ref); + +numtemplatearguments( + unique int expr_id: @expr ref, + int num: int ref +); + +specialnamequalifyingelements( + unique int id: @specialnamequalifyingelement, + unique string name: string ref +); + +@namequalifiableelement = @expr | @namequalifier; +@namequalifyingelement = @namespace + | @specialnamequalifyingelement + | @usertype; + +namequalifiers( + unique int id: @namequalifier, + unique int qualifiableelement: @namequalifiableelement ref, + int qualifyingelement: @namequalifyingelement ref, + int location: @location_default ref +); + +varbind( + int expr: @varbindexpr ref, + int var: @accessible ref +); + +funbind( + int expr: @funbindexpr ref, + int fun: @function ref +); + +@any_new_expr = @new_expr + | @new_array_expr; + +@new_or_delete_expr = @any_new_expr + | @delete_expr + | @delete_array_expr; + +@prefix_crement_expr = @preincrexpr | @predecrexpr; + +@postfix_crement_expr = @postincrexpr | @postdecrexpr; + +@increment_expr = @preincrexpr | @postincrexpr; + +@decrement_expr = @predecrexpr | @postdecrexpr; + +@crement_expr = @increment_expr | @decrement_expr; + +@un_arith_op_expr = @arithnegexpr + | @unaryplusexpr + | @conjugation + | @realpartexpr + | @imagpartexpr + | @crement_expr + ; + +@un_bitwise_op_expr = @complementexpr; + +@un_log_op_expr = @notexpr; + +@un_op_expr = @address_of + | @indirect + | @un_arith_op_expr + | @un_bitwise_op_expr + | @builtinaddressof + | @vec_fill + | @un_log_op_expr + | @co_await + | @co_yield + ; + +@bin_log_op_expr = @andlogicalexpr | @orlogicalexpr; + +@cmp_op_expr = @eq_op_expr | @rel_op_expr; + +@eq_op_expr = @eqexpr | @neexpr; + +@rel_op_expr = @gtexpr + | @ltexpr + | @geexpr + | @leexpr + | @spaceshipexpr + ; + +@bin_bitwise_op_expr = @lshiftexpr + | @rshiftexpr + | @andexpr + | @orexpr + | @xorexpr + ; + +@p_arith_op_expr = @paddexpr + | @psubexpr + | @pdiffexpr + ; + +@bin_arith_op_expr = @addexpr + | @subexpr + | @mulexpr + | @divexpr + | @remexpr + | @jmulexpr + | @jdivexpr + | @fjaddexpr + | @jfaddexpr + | @fjsubexpr + | @jfsubexpr + | @minexpr + | @maxexpr + | @p_arith_op_expr + ; + +@bin_op_expr = @bin_arith_op_expr + | @bin_bitwise_op_expr + | @cmp_op_expr + | @bin_log_op_expr + ; + +@op_expr = @un_op_expr + | @bin_op_expr + | @assign_expr + | @conditionalexpr + ; + +@assign_arith_expr = @assignaddexpr + | @assignsubexpr + | @assignmulexpr + | @assigndivexpr + | @assignremexpr + ; + +@assign_bitwise_expr = @assignandexpr + | @assignorexpr + | @assignxorexpr + | @assignlshiftexpr + | @assignrshiftexpr + | @assignpaddexpr + | @assignpsubexpr + ; + +@assign_op_expr = @assign_arith_expr | @assign_bitwise_expr + +@assign_expr = @assignexpr | @assign_op_expr + +/* + case @allocator.form of + 0 = plain + | 1 = alignment + ; +*/ + +/** + * The allocator function associated with a `new` or `new[]` expression. + * The `form` column specified whether the allocation call contains an alignment + * argument. + */ +expr_allocator( + unique int expr: @any_new_expr ref, + int func: @function ref, + int form: int ref +); + +/* + case @deallocator.form of + 0 = plain + | 1 = size + | 2 = alignment + | 3 = size_and_alignment + ; +*/ + +/** + * The deallocator function associated with a `delete`, `delete[]`, `new`, or + * `new[]` expression. For a `new` or `new[]` expression, the deallocator is the + * one used to free memory if the initialization throws an exception. + * The `form` column specifies whether the deallocation call contains a size + * argument, and alignment argument, or both. + */ +expr_deallocator( + unique int expr: @new_or_delete_expr ref, + int func: @function ref, + int form: int ref +); + +/** + * Holds if the `@conditionalexpr` is of the two operand form + * `guard ? : false`. + */ +expr_cond_two_operand( + unique int cond: @conditionalexpr ref +); + +/** + * The guard of `@conditionalexpr` `guard ? true : false` + */ +expr_cond_guard( + unique int cond: @conditionalexpr ref, + int guard: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` holds. For the two operand form + * `guard ?: false` consider using `expr_cond_guard` instead. + */ +expr_cond_true( + unique int cond: @conditionalexpr ref, + int true: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` does not hold. + */ +expr_cond_false( + unique int cond: @conditionalexpr ref, + int false: @expr ref +); + +/** A string representation of the value. */ +values( + unique int id: @value, + string str: string ref +); + +/** The actual text in the source code for the value, if any. */ +valuetext( + unique int id: @value ref, + string text: string ref +); + +valuebind( + int val: @value ref, + unique int expr: @expr ref +); + +fieldoffsets( + unique int id: @variable ref, + int byteoffset: int ref, + int bitoffset: int ref +); + +bitfield( + unique int id: @variable ref, + int bits: int ref, + int declared_bits: int ref +); + +/* TODO +memberprefix( + int member: @expr ref, + int prefix: @expr ref +); +*/ + +/* + kind(1) = mbrcallexpr + kind(2) = mbrptrcallexpr + kind(3) = mbrptrmbrcallexpr + kind(4) = ptrmbrptrmbrcallexpr + kind(5) = mbrreadexpr // x.y + kind(6) = mbrptrreadexpr // p->y + kind(7) = mbrptrmbrreadexpr // x.*pm + kind(8) = mbrptrmbrptrreadexpr // x->*pm + kind(9) = staticmbrreadexpr // static x.y + kind(10) = staticmbrptrreadexpr // static p->y +*/ +/* TODO +memberaccess( + int member: @expr ref, + int kind: int ref +); +*/ + +initialisers( + unique int init: @initialiser, + int var: @accessible ref, + unique int expr: @expr ref, + int location: @location_expr ref +); + +/** + * An ancestor for the expression, for cases in which we cannot + * otherwise find the expression's parent. + */ +expr_ancestor( + int exp: @expr ref, + int ancestor: @element ref +); + +exprs( + unique int id: @expr, + int kind: int ref, + int location: @location_expr ref +); + +/* + case @value.category of + 1 = prval + | 2 = xval + | 3 = lval + ; +*/ +expr_types( + int id: @expr ref, + int typeid: @type ref, + int value_category: int ref +); + +case @expr.kind of + 1 = @errorexpr +| 2 = @address_of // & AddressOfExpr +| 3 = @reference_to // ReferenceToExpr (implicit?) +| 4 = @indirect // * PointerDereferenceExpr +| 5 = @ref_indirect // ReferenceDereferenceExpr (implicit?) +// ... +| 8 = @array_to_pointer // (???) +| 9 = @vacuous_destructor_call // VacuousDestructorCall +// ... +| 11 = @assume // Microsoft +| 12 = @parexpr +| 13 = @arithnegexpr +| 14 = @unaryplusexpr +| 15 = @complementexpr +| 16 = @notexpr +| 17 = @conjugation // GNU ~ operator +| 18 = @realpartexpr // GNU __real +| 19 = @imagpartexpr // GNU __imag +| 20 = @postincrexpr +| 21 = @postdecrexpr +| 22 = @preincrexpr +| 23 = @predecrexpr +| 24 = @conditionalexpr +| 25 = @addexpr +| 26 = @subexpr +| 27 = @mulexpr +| 28 = @divexpr +| 29 = @remexpr +| 30 = @jmulexpr // C99 mul imaginary +| 31 = @jdivexpr // C99 div imaginary +| 32 = @fjaddexpr // C99 add real + imaginary +| 33 = @jfaddexpr // C99 add imaginary + real +| 34 = @fjsubexpr // C99 sub real - imaginary +| 35 = @jfsubexpr // C99 sub imaginary - real +| 36 = @paddexpr // pointer add (pointer + int or int + pointer) +| 37 = @psubexpr // pointer sub (pointer - integer) +| 38 = @pdiffexpr // difference between two pointers +| 39 = @lshiftexpr +| 40 = @rshiftexpr +| 41 = @andexpr +| 42 = @orexpr +| 43 = @xorexpr +| 44 = @eqexpr +| 45 = @neexpr +| 46 = @gtexpr +| 47 = @ltexpr +| 48 = @geexpr +| 49 = @leexpr +| 50 = @minexpr // GNU minimum +| 51 = @maxexpr // GNU maximum +| 52 = @assignexpr +| 53 = @assignaddexpr +| 54 = @assignsubexpr +| 55 = @assignmulexpr +| 56 = @assigndivexpr +| 57 = @assignremexpr +| 58 = @assignlshiftexpr +| 59 = @assignrshiftexpr +| 60 = @assignandexpr +| 61 = @assignorexpr +| 62 = @assignxorexpr +| 63 = @assignpaddexpr // assign pointer add +| 64 = @assignpsubexpr // assign pointer sub +| 65 = @andlogicalexpr +| 66 = @orlogicalexpr +| 67 = @commaexpr +| 68 = @subscriptexpr // access to member of an array, e.g., a[5] +// ... 69 @objc_subscriptexpr deprecated +// ... 70 @cmdaccess deprecated +// ... +| 73 = @virtfunptrexpr +| 74 = @callexpr +// ... 75 @msgexpr_normal deprecated +// ... 76 @msgexpr_super deprecated +// ... 77 @atselectorexpr deprecated +// ... 78 @atprotocolexpr deprecated +| 79 = @vastartexpr +| 80 = @vaargexpr +| 81 = @vaendexpr +| 82 = @vacopyexpr +// ... 83 @atencodeexpr deprecated +| 84 = @varaccess +| 85 = @thisaccess +// ... 86 @objc_box_expr deprecated +| 87 = @new_expr +| 88 = @delete_expr +| 89 = @throw_expr +| 90 = @condition_decl // a variable declared in a condition, e.g., if(int x = y > 2) +| 91 = @braced_init_list +| 92 = @type_id +| 93 = @runtime_sizeof +| 94 = @runtime_alignof +| 95 = @sizeof_pack +| 96 = @expr_stmt // GNU extension +| 97 = @routineexpr +| 98 = @type_operand // used to access a type in certain contexts (haven't found any examples yet....) +| 99 = @offsetofexpr // offsetof ::= type and field +| 100 = @hasassignexpr // __has_assign ::= type +| 101 = @hascopyexpr // __has_copy ::= type +| 102 = @hasnothrowassign // __has_nothrow_assign ::= type +| 103 = @hasnothrowconstr // __has_nothrow_constructor ::= type +| 104 = @hasnothrowcopy // __has_nothrow_copy ::= type +| 105 = @hastrivialassign // __has_trivial_assign ::= type +| 106 = @hastrivialconstr // __has_trivial_constructor ::= type +| 107 = @hastrivialcopy // __has_trivial_copy ::= type +| 108 = @hasuserdestr // __has_user_destructor ::= type +| 109 = @hasvirtualdestr // __has_virtual_destructor ::= type +| 110 = @isabstractexpr // __is_abstract ::= type +| 111 = @isbaseofexpr // __is_base_of ::= type type +| 112 = @isclassexpr // __is_class ::= type +| 113 = @isconvtoexpr // __is_convertible_to ::= type type +| 114 = @isemptyexpr // __is_empty ::= type +| 115 = @isenumexpr // __is_enum ::= type +| 116 = @ispodexpr // __is_pod ::= type +| 117 = @ispolyexpr // __is_polymorphic ::= type +| 118 = @isunionexpr // __is_union ::= type +| 119 = @typescompexpr // GNU __builtin_types_compatible ::= type type +| 120 = @intaddrexpr // EDG internal builtin, used to implement offsetof +// ... +| 122 = @hastrivialdestructor // __has_trivial_destructor ::= type +| 123 = @literal +| 124 = @uuidof +| 127 = @aggregateliteral +| 128 = @delete_array_expr +| 129 = @new_array_expr +// ... 130 @objc_array_literal deprecated +// ... 131 @objc_dictionary_literal deprecated +| 132 = @foldexpr +// ... +| 200 = @ctordirectinit +| 201 = @ctorvirtualinit +| 202 = @ctorfieldinit +| 203 = @ctordelegatinginit +| 204 = @dtordirectdestruct +| 205 = @dtorvirtualdestruct +| 206 = @dtorfielddestruct +// ... +| 210 = @static_cast +| 211 = @reinterpret_cast +| 212 = @const_cast +| 213 = @dynamic_cast +| 214 = @c_style_cast +| 215 = @lambdaexpr +| 216 = @param_ref +| 217 = @noopexpr +// ... +| 294 = @istriviallyconstructibleexpr +| 295 = @isdestructibleexpr +| 296 = @isnothrowdestructibleexpr +| 297 = @istriviallydestructibleexpr +| 298 = @istriviallyassignableexpr +| 299 = @isnothrowassignableexpr +| 300 = @istrivialexpr +| 301 = @isstandardlayoutexpr +| 302 = @istriviallycopyableexpr +| 303 = @isliteraltypeexpr +| 304 = @hastrivialmoveconstructorexpr +| 305 = @hastrivialmoveassignexpr +| 306 = @hasnothrowmoveassignexpr +| 307 = @isconstructibleexpr +| 308 = @isnothrowconstructibleexpr +| 309 = @hasfinalizerexpr +| 310 = @isdelegateexpr +| 311 = @isinterfaceclassexpr +| 312 = @isrefarrayexpr +| 313 = @isrefclassexpr +| 314 = @issealedexpr +| 315 = @issimplevalueclassexpr +| 316 = @isvalueclassexpr +| 317 = @isfinalexpr +| 319 = @noexceptexpr +| 320 = @builtinshufflevector +| 321 = @builtinchooseexpr +| 322 = @builtinaddressof +| 323 = @vec_fill +| 324 = @builtinconvertvector +| 325 = @builtincomplex +| 326 = @spaceshipexpr +| 327 = @co_await +| 328 = @co_yield +| 329 = @temp_init +; + +@var_args_expr = @vastartexpr + | @vaendexpr + | @vaargexpr + | @vacopyexpr + ; + +@builtin_op = @var_args_expr + | @noopexpr + | @offsetofexpr + | @intaddrexpr + | @hasassignexpr + | @hascopyexpr + | @hasnothrowassign + | @hasnothrowconstr + | @hasnothrowcopy + | @hastrivialassign + | @hastrivialconstr + | @hastrivialcopy + | @hastrivialdestructor + | @hasuserdestr + | @hasvirtualdestr + | @isabstractexpr + | @isbaseofexpr + | @isclassexpr + | @isconvtoexpr + | @isemptyexpr + | @isenumexpr + | @ispodexpr + | @ispolyexpr + | @isunionexpr + | @typescompexpr + | @builtinshufflevector + | @builtinconvertvector + | @builtinaddressof + | @istriviallyconstructibleexpr + | @isdestructibleexpr + | @isnothrowdestructibleexpr + | @istriviallydestructibleexpr + | @istriviallyassignableexpr + | @isnothrowassignableexpr + | @isstandardlayoutexpr + | @istriviallycopyableexpr + | @isliteraltypeexpr + | @hastrivialmoveconstructorexpr + | @hastrivialmoveassignexpr + | @hasnothrowmoveassignexpr + | @isconstructibleexpr + | @isnothrowconstructibleexpr + | @hasfinalizerexpr + | @isdelegateexpr + | @isinterfaceclassexpr + | @isrefarrayexpr + | @isrefclassexpr + | @issealedexpr + | @issimplevalueclassexpr + | @isvalueclassexpr + | @isfinalexpr + | @builtinchooseexpr + | @builtincomplex + ; + +new_allocated_type( + unique int expr: @new_expr ref, + int type_id: @type ref +); + +new_array_allocated_type( + unique int expr: @new_array_expr ref, + int type_id: @type ref +); + +/** + * The field being initialized by an initializer expression within an aggregate + * initializer for a class/struct/union. + */ +#keyset[aggregate, field] +aggregate_field_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int field: @membervariable ref +); + +/** + * The index of the element being initialized by an initializer expression + * within an aggregate initializer for an array. + */ +#keyset[aggregate, element_index] +aggregate_array_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int element_index: int ref +); + +@ctorinit = @ctordirectinit + | @ctorvirtualinit + | @ctorfieldinit + | @ctordelegatinginit; +@dtordestruct = @dtordirectdestruct + | @dtorvirtualdestruct + | @dtorfielddestruct; + + +condition_decl_bind( + unique int expr: @condition_decl ref, + unique int decl: @declaration ref +); + +typeid_bind( + unique int expr: @type_id ref, + int type_id: @type ref +); + +uuidof_bind( + unique int expr: @uuidof ref, + int type_id: @type ref +); + +@runtime_sizeof_or_alignof = @runtime_sizeof | @runtime_alignof; + +sizeof_bind( + unique int expr: @runtime_sizeof_or_alignof ref, + int type_id: @type ref +); + +code_block( + unique int block: @literal ref, + unique int routine: @function ref +); + +lambdas( + unique int expr: @lambdaexpr ref, + string default_capture: string ref, + boolean has_explicit_return_type: boolean ref +); + +lambda_capture( + unique int id: @lambdacapture, + int lambda: @lambdaexpr ref, + int index: int ref, + int field: @membervariable ref, + boolean captured_by_reference: boolean ref, + boolean is_implicit: boolean ref, + int location: @location_default ref +); + +@funbindexpr = @routineexpr + | @new_expr + | @delete_expr + | @delete_array_expr + | @ctordirectinit + | @ctorvirtualinit + | @ctordelegatinginit + | @dtordirectdestruct + | @dtorvirtualdestruct; + +@varbindexpr = @varaccess | @ctorfieldinit | @dtorfielddestruct; +@addressable = @function | @variable ; +@accessible = @addressable | @enumconstant ; + +@access = @varaccess | @routineexpr ; + +fold( + int expr: @foldexpr ref, + string operator: string ref, + boolean is_left_fold: boolean ref +); + +stmts( + unique int id: @stmt, + int kind: int ref, + int location: @location_stmt ref +); + +case @stmt.kind of + 1 = @stmt_expr +| 2 = @stmt_if +| 3 = @stmt_while +| 4 = @stmt_goto +| 5 = @stmt_label +| 6 = @stmt_return +| 7 = @stmt_block +| 8 = @stmt_end_test_while // do { ... } while ( ... ) +| 9 = @stmt_for +| 10 = @stmt_switch_case +| 11 = @stmt_switch +| 13 = @stmt_asm // "asm" statement or the body of an asm function +| 15 = @stmt_try_block +| 16 = @stmt_microsoft_try // Microsoft +| 17 = @stmt_decl +| 18 = @stmt_set_vla_size // C99 +| 19 = @stmt_vla_decl // C99 +| 25 = @stmt_assigned_goto // GNU +| 26 = @stmt_empty +| 27 = @stmt_continue +| 28 = @stmt_break +| 29 = @stmt_range_based_for // C++11 +// ... 30 @stmt_at_autoreleasepool_block deprecated +// ... 31 @stmt_objc_for_in deprecated +// ... 32 @stmt_at_synchronized deprecated +| 33 = @stmt_handler +// ... 34 @stmt_finally_end deprecated +| 35 = @stmt_constexpr_if +| 37 = @stmt_co_return +; + +type_vla( + int type_id: @type ref, + int decl: @stmt_vla_decl ref +); + +variable_vla( + int var: @variable ref, + int decl: @stmt_vla_decl ref +); + +if_then( + unique int if_stmt: @stmt_if ref, + int then_id: @stmt ref +); + +if_else( + unique int if_stmt: @stmt_if ref, + int else_id: @stmt ref +); + +constexpr_if_then( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int then_id: @stmt ref +); + +constexpr_if_else( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int else_id: @stmt ref +); + +while_body( + unique int while_stmt: @stmt_while ref, + int body_id: @stmt ref +); + +do_body( + unique int do_stmt: @stmt_end_test_while ref, + int body_id: @stmt ref +); + +#keyset[switch_stmt, index] +switch_case( + int switch_stmt: @stmt_switch ref, + int index: int ref, + int case_id: @stmt_switch_case ref +); + +switch_body( + unique int switch_stmt: @stmt_switch ref, + int body_id: @stmt ref +); + +for_initialization( + unique int for_stmt: @stmt_for ref, + int init_id: @stmt ref +); + +for_condition( + unique int for_stmt: @stmt_for ref, + int condition_id: @expr ref +); + +for_update( + unique int for_stmt: @stmt_for ref, + int update_id: @expr ref +); + +for_body( + unique int for_stmt: @stmt_for ref, + int body_id: @stmt ref +); + +@stmtparent = @stmt | @expr_stmt ; +stmtparents( + unique int id: @stmt ref, + int index: int ref, + int parent: @stmtparent ref +); + +ishandler(unique int block: @stmt_block ref); + +@cfgnode = @stmt | @expr | @function | @initialiser ; + +stmt_decl_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl: @declaration ref +); + +stmt_decl_entry_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl_entry: @element ref +); + +@functionorblock = @function | @stmt_block; + +blockscope( + unique int block: @stmt_block ref, + int enclosing: @functionorblock ref +); + +@jump = @stmt_goto | @stmt_break | @stmt_continue; + +@jumporlabel = @jump | @stmt_label | @literal; + +jumpinfo( + unique int id: @jumporlabel ref, + string str: string ref, + int target: @stmt ref +); + +preprocdirects( + unique int id: @preprocdirect, + int kind: int ref, + int location: @location_default ref +); +case @preprocdirect.kind of + 0 = @ppd_if +| 1 = @ppd_ifdef +| 2 = @ppd_ifndef +| 3 = @ppd_elif +| 4 = @ppd_else +| 5 = @ppd_endif +| 6 = @ppd_plain_include +| 7 = @ppd_define +| 8 = @ppd_undef +| 9 = @ppd_line +| 10 = @ppd_error +| 11 = @ppd_pragma +| 12 = @ppd_objc_import +| 13 = @ppd_include_next +| 18 = @ppd_warning +; + +@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next; + +@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif; + +preprocpair( + int begin : @ppd_branch ref, + int elseelifend : @preprocdirect ref +); + +preproctrue(int branch : @ppd_branch ref); +preprocfalse(int branch : @ppd_branch ref); + +preproctext( + unique int id: @preprocdirect ref, + string head: string ref, + string body: string ref +); + +includes( + unique int id: @ppd_include ref, + int included: @file ref +); + +link_targets( + unique int id: @link_target, + int binary: @file ref +); + +link_parent( + int element : @element ref, + int link_target : @link_target ref +); + +/* XML Files */ + +xmlEncoding(unique int id: @file ref, string encoding: string ref); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref +); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref +); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref +); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref +); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref +); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref +); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref +); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref +); + +@xmllocatable = @xmlcharacters + | @xmlelement + | @xmlcomment + | @xmlattribute + | @xmldtd + | @file + | @xmlnamespace; diff --git a/cpp/upgrades/7806a11dd7ab6611c4245b2e96b8ed13cb5c6056/upgrade.properties b/cpp/upgrades/7806a11dd7ab6611c4245b2e96b8ed13cb5c6056/upgrade.properties new file mode 100644 index 00000000000..63872bd6f10 --- /dev/null +++ b/cpp/upgrades/7806a11dd7ab6611c4245b2e96b8ed13cb5c6056/upgrade.properties @@ -0,0 +1,2 @@ +description: Non-functional change to dbscheme comments +compatibility: full From 064aba810ba73d295f6081a378a348aab5533b08 Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Mon, 4 Oct 2021 13:31:07 +0200 Subject: [PATCH 697/741] Remove hyphens from the flow testcase generator folder name So that it can be imported from the autogenerated query `gen.ql` --- .../FlowTestCase.qll | 0 .../FlowTestCaseSupportMethods.qll | 0 .../FlowTestCaseUtils.qll | 0 .../GenerateFlowTestCase.py | 2 +- .../GenerateFlowTestCase.qll | 0 .../testHeader.qlfrag | 0 .../testModelsFooter.qlfrag | 0 .../testModelsHeader.qlfrag | 0 8 files changed, 1 insertion(+), 1 deletion(-) rename java/ql/src/utils/{flow-testcase-generator => flowtestcasegenerator}/FlowTestCase.qll (100%) rename java/ql/src/utils/{flow-testcase-generator => flowtestcasegenerator}/FlowTestCaseSupportMethods.qll (100%) rename java/ql/src/utils/{flow-testcase-generator => flowtestcasegenerator}/FlowTestCaseUtils.qll (100%) rename java/ql/src/utils/{flow-testcase-generator => flowtestcasegenerator}/GenerateFlowTestCase.py (97%) rename java/ql/src/utils/{flow-testcase-generator => flowtestcasegenerator}/GenerateFlowTestCase.qll (100%) rename java/ql/src/utils/{flow-testcase-generator => flowtestcasegenerator}/testHeader.qlfrag (100%) rename java/ql/src/utils/{flow-testcase-generator => flowtestcasegenerator}/testModelsFooter.qlfrag (100%) rename java/ql/src/utils/{flow-testcase-generator => flowtestcasegenerator}/testModelsHeader.qlfrag (100%) diff --git a/java/ql/src/utils/flow-testcase-generator/FlowTestCase.qll b/java/ql/src/utils/flowtestcasegenerator/FlowTestCase.qll similarity index 100% rename from java/ql/src/utils/flow-testcase-generator/FlowTestCase.qll rename to java/ql/src/utils/flowtestcasegenerator/FlowTestCase.qll diff --git a/java/ql/src/utils/flow-testcase-generator/FlowTestCaseSupportMethods.qll b/java/ql/src/utils/flowtestcasegenerator/FlowTestCaseSupportMethods.qll similarity index 100% rename from java/ql/src/utils/flow-testcase-generator/FlowTestCaseSupportMethods.qll rename to java/ql/src/utils/flowtestcasegenerator/FlowTestCaseSupportMethods.qll diff --git a/java/ql/src/utils/flow-testcase-generator/FlowTestCaseUtils.qll b/java/ql/src/utils/flowtestcasegenerator/FlowTestCaseUtils.qll similarity index 100% rename from java/ql/src/utils/flow-testcase-generator/FlowTestCaseUtils.qll rename to java/ql/src/utils/flowtestcasegenerator/FlowTestCaseUtils.qll diff --git a/java/ql/src/utils/flow-testcase-generator/GenerateFlowTestCase.py b/java/ql/src/utils/flowtestcasegenerator/GenerateFlowTestCase.py similarity index 97% rename from java/ql/src/utils/flow-testcase-generator/GenerateFlowTestCase.py rename to java/ql/src/utils/flowtestcasegenerator/GenerateFlowTestCase.py index cc4c90809ab..38d90830bf5 100755 --- a/java/ql/src/utils/flow-testcase-generator/GenerateFlowTestCase.py +++ b/java/ql/src/utils/flowtestcasegenerator/GenerateFlowTestCase.py @@ -130,7 +130,7 @@ with open(os.path.join(queryDir, "qlpack.yml"), "w") as f: f.write("name: test-generation-query\nversion: 0.0.0\nlibraryPathDependencies: codeql/java-queries") with open(qlFile, "w") as f: f.write( - "import java\nimport utils.GenerateFlowTestCase\n\nclass GenRow extends TargetSummaryModelCsv {\n\n\toverride predicate row(string r) {\n\t\tr = [\n") + "import java\nimport utils.flowtestcasegenerator.GenerateFlowTestCase\n\nclass GenRow extends TargetSummaryModelCsv {\n\n\toverride predicate row(string r) {\n\t\tr = [\n") f.write(",\n".join('\t\t\t"%s"' % spec.strip() for spec in specs)) f.write("\n\t\t]\n\t}\n}\n") diff --git a/java/ql/src/utils/flow-testcase-generator/GenerateFlowTestCase.qll b/java/ql/src/utils/flowtestcasegenerator/GenerateFlowTestCase.qll similarity index 100% rename from java/ql/src/utils/flow-testcase-generator/GenerateFlowTestCase.qll rename to java/ql/src/utils/flowtestcasegenerator/GenerateFlowTestCase.qll diff --git a/java/ql/src/utils/flow-testcase-generator/testHeader.qlfrag b/java/ql/src/utils/flowtestcasegenerator/testHeader.qlfrag similarity index 100% rename from java/ql/src/utils/flow-testcase-generator/testHeader.qlfrag rename to java/ql/src/utils/flowtestcasegenerator/testHeader.qlfrag diff --git a/java/ql/src/utils/flow-testcase-generator/testModelsFooter.qlfrag b/java/ql/src/utils/flowtestcasegenerator/testModelsFooter.qlfrag similarity index 100% rename from java/ql/src/utils/flow-testcase-generator/testModelsFooter.qlfrag rename to java/ql/src/utils/flowtestcasegenerator/testModelsFooter.qlfrag diff --git a/java/ql/src/utils/flow-testcase-generator/testModelsHeader.qlfrag b/java/ql/src/utils/flowtestcasegenerator/testModelsHeader.qlfrag similarity index 100% rename from java/ql/src/utils/flow-testcase-generator/testModelsHeader.qlfrag rename to java/ql/src/utils/flowtestcasegenerator/testModelsHeader.qlfrag From 54aec7bb96990144de48d0327969f2002965460f Mon Sep 17 00:00:00 2001 From: Taus Date: Mon, 4 Oct 2021 12:16:53 +0000 Subject: [PATCH 698/741] Python: Fix bad magic in `controls/2` The changes to `ModificationOfParameterWithDefault.ql` and the use of `ConditionBlock::controls` therein caused the `BasicBlock` argument to get magicked in, resulting in the following antijoin for the `forall`: ``` [2021-10-04 12:07:46] (108s) Tuple counts for GuardedControlFlow::ConditionBlock::controls_dispred#fbf#antijoin_rhs/5@d84e94 after 1m44s: 201222345 ~7% {5} r1 = JOIN GuardedControlFlow::ConditionBlock::controls_dispred#fbf#shared#2 WITH Flow::BasicBlock::getASuccessor_dispred#ff_10#join_rhs ON FIRST 1 OUTPUT Lhs.0 'arg1', Rhs.1 'arg4', Lhs.1 'arg0', Lhs.2 'arg2', Lhs.3 'arg3' 200599933 ~4% {5} r2 = JOIN r1 WITH Flow::BasicBlock::dominates#ff ON FIRST 2 OUTPUT Lhs.2 'arg0', Lhs.0 'arg1', Lhs.3 'arg2', Lhs.4 'arg3', Lhs.1 'arg4' 0 ~0% {4} r3 = JOIN GuardedControlFlow::ConditionBlock::controls_dispred#fbf#shared#1 WITH GuardedControlFlow::ConditionBlock#class#f ON FIRST 1 OUTPUT Lhs.0 'arg3', Lhs.2 'arg1', Lhs.1 'arg0', false 0 ~0% {4} r4 = JOIN GuardedControlFlow::ConditionBlock::controls_dispred#fbf#shared WITH GuardedControlFlow::ConditionBlock#class#f ON FIRST 1 OUTPUT Lhs.0 'arg3', Lhs.2 'arg1', Lhs.1 'arg0', true 0 ~0% {4} r5 = r3 UNION r4 0 ~0% {5} r6 = JOIN r5 WITH Flow::BasicBlock::getASuccessor_dispred#ff ON FIRST 2 OUTPUT Lhs.2 'arg0', Lhs.1 'arg1', Lhs.3 'arg2', Lhs.0 'arg3', Rhs.0 200599933 ~4% {5} r7 = r2 UNION r6 return r7 ``` (cancelled) I observed that quick-eval'ing the `controls` predicate exhibit no such bad join order (and terminated quickly) which lead me to conclude that this was a case of bad magic. Adding the `pragma[nomagic]` resulted in a return to the previous performance. --- python/ql/lib/semmle/python/GuardedControlFlow.qll | 1 + 1 file changed, 1 insertion(+) diff --git a/python/ql/lib/semmle/python/GuardedControlFlow.qll b/python/ql/lib/semmle/python/GuardedControlFlow.qll index 37ecfee37d5..73ea183850a 100644 --- a/python/ql/lib/semmle/python/GuardedControlFlow.qll +++ b/python/ql/lib/semmle/python/GuardedControlFlow.qll @@ -9,6 +9,7 @@ class ConditionBlock extends BasicBlock { } /** Basic blocks controlled by this condition, i.e. those BBs for which the condition is testIsTrue */ + pragma[nomagic] predicate controls(BasicBlock controlled, boolean testIsTrue) { /* * For this block to control the block 'controlled' with 'testIsTrue' the following must be true: From eac0222f2ca08af2c5b100b29a2b10941e2a2379 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Mon, 4 Oct 2021 15:15:40 +0100 Subject: [PATCH 699/741] C++: Add more CWEs to 'cpp/incorrect-allocation-error-handling'. --- .../Security/CWE/CWE-570/IncorrectAllocationErrorHandling.ql | 3 +++ 1 file changed, 3 insertions(+) diff --git a/cpp/ql/src/Security/CWE/CWE-570/IncorrectAllocationErrorHandling.ql b/cpp/ql/src/Security/CWE/CWE-570/IncorrectAllocationErrorHandling.ql index 28e7295dcdc..357e6375570 100644 --- a/cpp/ql/src/Security/CWE/CWE-570/IncorrectAllocationErrorHandling.ql +++ b/cpp/ql/src/Security/CWE/CWE-570/IncorrectAllocationErrorHandling.ql @@ -4,10 +4,13 @@ * @kind problem * @id cpp/incorrect-allocation-error-handling * @problem.severity warning + * @security-severity 7.5 * @precision medium * @tags correctness * security * external/cwe/cwe-570 + * external/cwe/cwe-252 + * external/cwe/cwe-755 */ import cpp From 0bce8234d8fb1389ecc9768c3e63842c1486f653 Mon Sep 17 00:00:00 2001 From: Marcono1234 Date: Sun, 3 Oct 2021 00:21:30 +0200 Subject: [PATCH 700/741] Java: Remove overwritten `NestedType.isStatic()` QLDoc Did not mention nested non-member interfaces and record classes. The documentation of the overridden `isStatic()` predicate already mentions that this predicate holds for explicitly and implicitly static elements, so overwriting it is not necessary and only adds more maintenance work. --- java/ql/lib/semmle/code/java/Type.qll | 20 ++++++-------------- 1 file changed, 6 insertions(+), 14 deletions(-) diff --git a/java/ql/lib/semmle/code/java/Type.qll b/java/ql/lib/semmle/code/java/Type.qll index 5395e855701..492d1b546cb 100755 --- a/java/ql/lib/semmle/code/java/Type.qll +++ b/java/ql/lib/semmle/code/java/Type.qll @@ -779,23 +779,15 @@ class NestedType extends RefType { getEnclosingType().isStrictfp() } - /** - * Holds if this nested type is static. - * - * A nested type is static either if it is explicitly declared as such - * using the modifier `static`, or if it is implicitly static - * because one of the following holds: - * - * - it is a member type of an interface, - * - it is a member interface, or - * - it is a nested enum type. - * - * See JLS v8, section 8.5.1 (Static Member Type Declarations), - * section 8.9 (Enums) and section 9.5 (Member Type Declarations). - */ override predicate isStatic() { super.isStatic() or + /* + * Note: The following is most likely redundant because `isStatic()` of the superclass + * holds for implicitly static types, but keep the special casing below for now to be + * on the safe side + */ + // JLS 8.5.1: A member interface is implicitly static. this instanceof Interface or From 0e149f0523f8639b6b6c1c527e98ab9e111ac5ad Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Fri, 18 Jun 2021 10:27:03 +0200 Subject: [PATCH 701/741] Move from experimental --- .../CWE/CWE-297/InsecureJavaMail.qhelp | 27 ++++++++++++++ .../Security/CWE/CWE-297/InsecureJavaMail.ql | 0 .../Security/CWE/CWE-297/JavaMail.java | 0 .../Security/CWE/CWE-297/SimpleMail.java | 0 .../CWE/CWE-297/InsecureJavaMail.qhelp | 36 ------------------- .../security/CWE-297/InsecureJavaMail.qlref | 1 - .../query-tests/security/CWE-297/options | 1 - .../CWE-297/InsecureJavaMail.expected | 0 .../security/CWE-297/InsecureJavaMail.java | 0 .../security/CWE-297/InsecureJavaMail.qlref | 1 + .../test/query-tests/security/CWE-297/options | 1 + 11 files changed, 29 insertions(+), 38 deletions(-) create mode 100644 java/ql/src/Security/CWE/CWE-297/InsecureJavaMail.qhelp rename java/ql/src/{experimental => }/Security/CWE/CWE-297/InsecureJavaMail.ql (100%) rename java/ql/src/{experimental => }/Security/CWE/CWE-297/JavaMail.java (100%) rename java/ql/src/{experimental => }/Security/CWE/CWE-297/SimpleMail.java (100%) delete mode 100644 java/ql/src/experimental/Security/CWE/CWE-297/InsecureJavaMail.qhelp delete mode 100644 java/ql/test/experimental/query-tests/security/CWE-297/InsecureJavaMail.qlref delete mode 100644 java/ql/test/experimental/query-tests/security/CWE-297/options rename java/ql/test/{experimental => }/query-tests/security/CWE-297/InsecureJavaMail.expected (100%) rename java/ql/test/{experimental => }/query-tests/security/CWE-297/InsecureJavaMail.java (100%) create mode 100644 java/ql/test/query-tests/security/CWE-297/InsecureJavaMail.qlref create mode 100644 java/ql/test/query-tests/security/CWE-297/options diff --git a/java/ql/src/Security/CWE/CWE-297/InsecureJavaMail.qhelp b/java/ql/src/Security/CWE/CWE-297/InsecureJavaMail.qhelp new file mode 100644 index 00000000000..9945227ff0f --- /dev/null +++ b/java/ql/src/Security/CWE/CWE-297/InsecureJavaMail.qhelp @@ -0,0 +1,27 @@ + + + + +

    JavaMail is commonly used in Java applications to send emails. There are popular third-party libraries like Apache Commons Email which are built on JavaMail and facilitate integration. Authenticated mail sessions require user credentials and mail sessions can require SSL/TLS authentication. It is a common security vulnerability that host-specific certificate data is not validated or is incorrectly validated. Failing to validate the certificate makes the SSL session susceptible to a man-in-the-middle attack.

    +

    This query checks whether SSL certificate is validated when username/password is sent in authenticator and when SSL is enabled.

    +

    The query has code for both plain JavaMail invocation and mailing through Apache SimpleMail to make it more comprehensive.

    + + + +

    Validate SSL certificate when sensitive information is sent in email communications.

    +
    + + +

    The following two examples show two ways of configuring secure emails through JavaMail or Apache SimpleMail. In the 'BAD' case, +credentials are sent in an SSL session without certificate validation. In the 'GOOD' case, the certificate is validated.

    + + +
    + + +
  • + Log4j2: + Add support for specifying an SSL configuration for SmtpAppender (CVE-2020-9488) +
  • +
    + diff --git a/java/ql/src/experimental/Security/CWE/CWE-297/InsecureJavaMail.ql b/java/ql/src/Security/CWE/CWE-297/InsecureJavaMail.ql similarity index 100% rename from java/ql/src/experimental/Security/CWE/CWE-297/InsecureJavaMail.ql rename to java/ql/src/Security/CWE/CWE-297/InsecureJavaMail.ql diff --git a/java/ql/src/experimental/Security/CWE/CWE-297/JavaMail.java b/java/ql/src/Security/CWE/CWE-297/JavaMail.java similarity index 100% rename from java/ql/src/experimental/Security/CWE/CWE-297/JavaMail.java rename to java/ql/src/Security/CWE/CWE-297/JavaMail.java diff --git a/java/ql/src/experimental/Security/CWE/CWE-297/SimpleMail.java b/java/ql/src/Security/CWE/CWE-297/SimpleMail.java similarity index 100% rename from java/ql/src/experimental/Security/CWE/CWE-297/SimpleMail.java rename to java/ql/src/Security/CWE/CWE-297/SimpleMail.java diff --git a/java/ql/src/experimental/Security/CWE/CWE-297/InsecureJavaMail.qhelp b/java/ql/src/experimental/Security/CWE/CWE-297/InsecureJavaMail.qhelp deleted file mode 100644 index ea1405aa4ee..00000000000 --- a/java/ql/src/experimental/Security/CWE/CWE-297/InsecureJavaMail.qhelp +++ /dev/null @@ -1,36 +0,0 @@ - - - - -

    JavaMail is commonly used in Java applications to send emails. There are popular third-party libraries like Apache Commons Email which are built on JavaMail and facilitate integration. Authenticated mail sessions require user credentials and mail sessions can require SSL/TLS authentication. It is a common security vulnerability that host-specific certificate data is not validated or is incorrectly validated. Failing to validate the certificate makes the SSL session susceptible to a man-in-the-middle attack.

    -

    This query checks whether SSL certificate is validated when username/password is sent in authenticator and when SSL is enabled.

    -

    The query has code for both plain JavaMail invocation and mailing through Apache SimpleMail to make it more comprehensive.

    -
    - - -

    Validate SSL certificate when sensitive information is sent in email communications.

    -
    - - -

    The following two examples show two ways of configuring secure emails through JavaMail or Apache SimpleMail. In the 'BAD' case, -credentials are sent in an SSL session without certificate validation. In the 'GOOD' case, the certificate is validated.

    - - -
    - - -
  • - CWE-297 -
  • -
  • - Log4j2: - Add support for specifying an SSL configuration for SmtpAppender (CVE-2020-9488) -
  • -
  • - SonarSource rule: - SMTP SSL connection should check server identity -
  • -
    -
    diff --git a/java/ql/test/experimental/query-tests/security/CWE-297/InsecureJavaMail.qlref b/java/ql/test/experimental/query-tests/security/CWE-297/InsecureJavaMail.qlref deleted file mode 100644 index 565779521f3..00000000000 --- a/java/ql/test/experimental/query-tests/security/CWE-297/InsecureJavaMail.qlref +++ /dev/null @@ -1 +0,0 @@ -experimental/Security/CWE/CWE-297/InsecureJavaMail.ql diff --git a/java/ql/test/experimental/query-tests/security/CWE-297/options b/java/ql/test/experimental/query-tests/security/CWE-297/options deleted file mode 100644 index 51c4feeca1b..00000000000 --- a/java/ql/test/experimental/query-tests/security/CWE-297/options +++ /dev/null @@ -1 +0,0 @@ -// semmle-extractor-options: --javac-args -cp ${testdir}/../../../../stubs/apache-commons-email-1.6.0:${testdir}/../../../../stubs/javamail-api-1.6.2 diff --git a/java/ql/test/experimental/query-tests/security/CWE-297/InsecureJavaMail.expected b/java/ql/test/query-tests/security/CWE-297/InsecureJavaMail.expected similarity index 100% rename from java/ql/test/experimental/query-tests/security/CWE-297/InsecureJavaMail.expected rename to java/ql/test/query-tests/security/CWE-297/InsecureJavaMail.expected diff --git a/java/ql/test/experimental/query-tests/security/CWE-297/InsecureJavaMail.java b/java/ql/test/query-tests/security/CWE-297/InsecureJavaMail.java similarity index 100% rename from java/ql/test/experimental/query-tests/security/CWE-297/InsecureJavaMail.java rename to java/ql/test/query-tests/security/CWE-297/InsecureJavaMail.java diff --git a/java/ql/test/query-tests/security/CWE-297/InsecureJavaMail.qlref b/java/ql/test/query-tests/security/CWE-297/InsecureJavaMail.qlref new file mode 100644 index 00000000000..78dddc0f868 --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-297/InsecureJavaMail.qlref @@ -0,0 +1 @@ +Security/CWE/CWE-297/InsecureJavaMail.ql diff --git a/java/ql/test/query-tests/security/CWE-297/options b/java/ql/test/query-tests/security/CWE-297/options new file mode 100644 index 00000000000..563a4fdcfc8 --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-297/options @@ -0,0 +1 @@ +// semmle-extractor-options: --javac-args -cp ${testdir}/../../../stubs/apache-commons-email-1.6.0:${testdir}/../../../stubs/javamail-api-1.6.2 From 8c6d58e6d827046f668d26b18bbb2323fa616745 Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Fri, 18 Jun 2021 11:11:52 +0200 Subject: [PATCH 702/741] Refactored into libraries --- .../Security/CWE/CWE-297/InsecureJavaMail.ql | 90 +------------------ .../src/semmle/code/java/frameworks/Mail.qll | 27 ++++++ .../ql/src/semmle/code/java/security/Mail.qll | 74 +++++++++++++++ 3 files changed, 104 insertions(+), 87 deletions(-) create mode 100644 java/ql/src/semmle/code/java/frameworks/Mail.qll create mode 100644 java/ql/src/semmle/code/java/security/Mail.qll diff --git a/java/ql/src/Security/CWE/CWE-297/InsecureJavaMail.ql b/java/ql/src/Security/CWE/CWE-297/InsecureJavaMail.ql index d0e0dc8b81a..9697b2ae588 100644 --- a/java/ql/src/Security/CWE/CWE-297/InsecureJavaMail.ql +++ b/java/ql/src/Security/CWE/CWE-297/InsecureJavaMail.ql @@ -12,96 +12,12 @@ */ import java - -/** - * The method to set Java properties - */ -class SetPropertyMethod extends Method { - SetPropertyMethod() { - this.hasName("setProperty") and - this.getDeclaringType().hasQualifiedName("java.util", "Properties") - or - this.hasName("put") and - this.getDeclaringType().getASourceSupertype*().hasQualifiedName("java.util", "Dictionary") - } -} - -/** - * The insecure way to set Java properties in mail sessions. - * 1. Set the mail.smtp.auth property to provide the SMTP Transport with a username and password when connecting to the SMTP server or - * set the mail.smtp.ssl.socketFactory/mail.smtp.ssl.socketFactory.class property to create an SMTP SSL socket. - * 2. No mail.smtp.ssl.checkserveridentity property is enabled. - */ -predicate isInsecureMailPropertyConfig(VarAccess propertiesVarAccess) { - exists(MethodAccess ma | - ma.getMethod() instanceof SetPropertyMethod and - ma.getQualifier() = propertiesVarAccess.getVariable().getAnAccess() and - ( - getStringValue(ma.getArgument(0)).matches("%.auth%") and //mail.smtp.auth - getStringValue(ma.getArgument(1)) = "true" - or - getStringValue(ma.getArgument(0)).matches("%.socketFactory%") //mail.smtp.socketFactory or mail.smtp.socketFactory.class - ) - ) and - not exists(MethodAccess ma | - ma.getMethod() instanceof SetPropertyMethod and - ma.getQualifier() = propertiesVarAccess.getVariable().getAnAccess() and - ( - getStringValue(ma.getArgument(0)).matches("%.ssl.checkserveridentity%") and //mail.smtp.ssl.checkserveridentity - getStringValue(ma.getArgument(1)) = "true" - ) - ) -} - -/** - * Helper method to get string value of an argument - */ -string getStringValue(Expr expr) { - result = expr.(CompileTimeConstantExpr).getStringValue() - or - result = getStringValue(expr.(AddExpr).getLeftOperand()) - or - result = getStringValue(expr.(AddExpr).getRightOperand()) -} - -/** - * The JavaMail session class `javax.mail.Session` - */ -class MailSession extends RefType { - MailSession() { this.hasQualifiedName("javax.mail", "Session") } -} - -/** - * The class of Apache SimpleMail - */ -class SimpleMail extends RefType { - SimpleMail() { this.hasQualifiedName("org.apache.commons.mail", "SimpleEmail") } -} - -/** - * Has TLS/SSL enabled with SimpleMail - */ -predicate enableTLSWithSimpleMail(MethodAccess ma) { - ma.getMethod().hasName("setSSLOnConnect") and - ma.getArgument(0).(BooleanLiteral).getBooleanValue() = true -} - -/** - * Has no certificate check - */ -predicate hasNoCertCheckWithSimpleMail(VarAccess va) { - not exists(MethodAccess ma | - ma.getQualifier() = va.getVariable().getAnAccess() and - ma.getMethod().hasName("setSSLCheckServerIdentity") and - ma.getArgument(0).(BooleanLiteral).getBooleanValue() = true - ) -} +import semmle.code.java.security.Mail from MethodAccess ma where - ma.getMethod().getDeclaringType() instanceof MailSession and - ma.getMethod().getName() = "getInstance" and + ma.getMethod() instanceof MailSessionGetInstanceMethod and isInsecureMailPropertyConfig(ma.getArgument(0)) or - enableTLSWithSimpleMail(ma) and hasNoCertCheckWithSimpleMail(ma.getQualifier()) + enablesEmailSsl(ma) and not hasSslCertificateCheck(ma.getQualifier()) select ma, "Java mailing has insecure SSL configuration" diff --git a/java/ql/src/semmle/code/java/frameworks/Mail.qll b/java/ql/src/semmle/code/java/frameworks/Mail.qll new file mode 100644 index 00000000000..f26cf0c5982 --- /dev/null +++ b/java/ql/src/semmle/code/java/frameworks/Mail.qll @@ -0,0 +1,27 @@ +/** Provides classes and predicates to work with email */ + +import java + +/** + * The class `javax.mail.Session` + */ +class MailSession extends Class { + MailSession() { this.hasQualifiedName("javax.mail", "Session") } +} + +/** + * The method `getInstance` of the class `javax.mail.Session` + */ +class MailSessionGetInstanceMethod extends Method { + MailSessionGetInstanceMethod() { + this.getDeclaringType() instanceof MailSession and + this.getName() = "getInstance" + } +} + +/** + * A subtype of the class `org.apache.commons.mail.Mail` + */ +class ApacheEmail extends Class { + ApacheEmail() { this.getASupertype*().hasQualifiedName("org.apache.commons.mail", "Email") } +} diff --git a/java/ql/src/semmle/code/java/security/Mail.qll b/java/ql/src/semmle/code/java/security/Mail.qll new file mode 100644 index 00000000000..e5fbb5c65a0 --- /dev/null +++ b/java/ql/src/semmle/code/java/security/Mail.qll @@ -0,0 +1,74 @@ +/** Provides classes and predicates to reason about email vulnerabilities. */ + +import java +import semmle.code.java.frameworks.Mail +private import semmle.code.java.frameworks.Properties + +/** + * The insecure way to set Java properties in mail sessions. + * 1. Set the `mail.smtp.auth` property to provide the SMTP Transport with a username and password when connecting to the SMTP server or + * set the `mail.smtp.ssl.socketFactory`/`mail.smtp.ssl.socketFactory.class` property to create an SMTP SSL socket. + * 2. No `mail.smtp.ssl.checkserveridentity` property is enabled. + */ +predicate isInsecureMailPropertyConfig(VarAccess propertiesVarAccess) { + exists(MethodAccess ma | + ma.getMethod() instanceof SetPropertyMethod and + ma.getQualifier() = propertiesVarAccess.getVariable().getAnAccess() + | + getStringValue(ma.getArgument(0)).matches("%.auth%") and //mail.smtp.auth + getStringValue(ma.getArgument(1)) = "true" + or + getStringValue(ma.getArgument(0)).matches("%.socketFactory%") //mail.smtp.socketFactory or mail.smtp.socketFactory.class + ) and + not exists(MethodAccess ma | + ma.getMethod() instanceof SetPropertyMethod and + ma.getQualifier() = propertiesVarAccess.getVariable().getAnAccess() + | + getStringValue(ma.getArgument(0)).matches("%.ssl.checkserveridentity%") and //mail.smtp.ssl.checkserveridentity + getStringValue(ma.getArgument(1)) = "true" + ) +} + +/** + * Holds if `ma` enables TLS/SSL with Apache Email. + */ +predicate enablesEmailSsl(MethodAccess ma) { + ma.getMethod().hasName("setSSLOnConnect") and + ma.getMethod().getDeclaringType() instanceof ApacheEmail and + ma.getArgument(0).(BooleanLiteral).getBooleanValue() = true +} + +/** + * Holds if a SSL certificate check is enabled on `va` with Apache Email + */ +predicate hasSslCertificateCheck(VarAccess va) { + exists(MethodAccess ma | + ma.getQualifier() = va.getVariable().getAnAccess() and + ma.getMethod().hasName("setSSLCheckServerIdentity") and + ma.getMethod().getDeclaringType() instanceof ApacheEmail and + ma.getArgument(0).(BooleanLiteral).getBooleanValue() = true + ) +} + +/** + * Helper method to get string value of an argument + */ +private string getStringValue(Expr expr) { + result = expr.(CompileTimeConstantExpr).getStringValue() + or + result = getStringValue(expr.(AddExpr).getLeftOperand()) + or + result = getStringValue(expr.(AddExpr).getRightOperand()) +} + +/** + * A method to set Java properties + */ +private class SetPropertyMethod extends Method { + SetPropertyMethod() { + this instanceof PropertiesSetPropertyMethod + or + this.hasName("put") and + this.getDeclaringType().getASourceSupertype*().hasQualifiedName("java.util", "Dictionary") + } +} From 73653f77aa8d5aad7a96420dce3b6fa1285924a4 Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Fri, 18 Jun 2021 11:34:56 +0200 Subject: [PATCH 703/741] Use InlineExpectationsTest --- .../CWE-297/InsecureJavaMail.expected | 2 - .../security/CWE-297/InsecureJavaMail.qlref | 1 - .../CWE-297/InsecureJavaMailTest.expected | 0 ...avaMail.java => InsecureJavaMailTest.java} | 40 ++++++++++++++++--- .../security/CWE-297/InsecureJavaMailTest.ql | 23 +++++++++++ 5 files changed, 58 insertions(+), 8 deletions(-) delete mode 100644 java/ql/test/query-tests/security/CWE-297/InsecureJavaMail.expected delete mode 100644 java/ql/test/query-tests/security/CWE-297/InsecureJavaMail.qlref create mode 100644 java/ql/test/query-tests/security/CWE-297/InsecureJavaMailTest.expected rename java/ql/test/query-tests/security/CWE-297/{InsecureJavaMail.java => InsecureJavaMailTest.java} (50%) create mode 100644 java/ql/test/query-tests/security/CWE-297/InsecureJavaMailTest.ql diff --git a/java/ql/test/query-tests/security/CWE-297/InsecureJavaMail.expected b/java/ql/test/query-tests/security/CWE-297/InsecureJavaMail.expected deleted file mode 100644 index 0e3c219ace3..00000000000 --- a/java/ql/test/query-tests/security/CWE-297/InsecureJavaMail.expected +++ /dev/null @@ -1,2 +0,0 @@ -| InsecureJavaMail.java:29:27:29:72 | getInstance(...) | Java mailing has insecure SSL configuration | -| InsecureJavaMail.java:37:3:37:29 | setSSLOnConnect(...) | Java mailing has insecure SSL configuration | diff --git a/java/ql/test/query-tests/security/CWE-297/InsecureJavaMail.qlref b/java/ql/test/query-tests/security/CWE-297/InsecureJavaMail.qlref deleted file mode 100644 index 78dddc0f868..00000000000 --- a/java/ql/test/query-tests/security/CWE-297/InsecureJavaMail.qlref +++ /dev/null @@ -1 +0,0 @@ -Security/CWE/CWE-297/InsecureJavaMail.ql diff --git a/java/ql/test/query-tests/security/CWE-297/InsecureJavaMailTest.expected b/java/ql/test/query-tests/security/CWE-297/InsecureJavaMailTest.expected new file mode 100644 index 00000000000..e69de29bb2d diff --git a/java/ql/test/query-tests/security/CWE-297/InsecureJavaMail.java b/java/ql/test/query-tests/security/CWE-297/InsecureJavaMailTest.java similarity index 50% rename from java/ql/test/query-tests/security/CWE-297/InsecureJavaMail.java rename to java/ql/test/query-tests/security/CWE-297/InsecureJavaMailTest.java index 62c64027695..fdfbd1f9f03 100644 --- a/java/ql/test/query-tests/security/CWE-297/InsecureJavaMail.java +++ b/java/ql/test/query-tests/security/CWE-297/InsecureJavaMailTest.java @@ -10,7 +10,7 @@ import org.apache.commons.mail.SimpleEmail; import java.util.Properties; -class InsecureJavaMail { +class InsecureJavaMailTest { public void testJavaMail() { final Properties properties = new Properties(); properties.put("mail.transport.protocol", "protocol"); @@ -24,9 +24,26 @@ class InsecureJavaMail { }; if (null != authenticator) { properties.put("mail.smtp.auth", "true"); - // properties.put("mail.smtp.ssl.checkserveridentity", "true"); } - final Session session = Session.getInstance(properties, authenticator); + final Session session = Session.getInstance(properties, authenticator); // $hasInsecureJavaMail + } + + public void testSecureJavaMail() { + final Properties properties = new Properties(); + properties.put("mail.transport.protocol", "protocol"); + properties.put("mail.smtp.host", "hostname"); + properties.put("mail.smtp.socketFactory.class", "classname"); + + final javax.mail.Authenticator authenticator = new javax.mail.Authenticator() { + protected PasswordAuthentication getPasswordAuthentication() { + return new PasswordAuthentication("username", "password"); + } + }; + if (null != authenticator) { + properties.put("mail.smtp.auth", "true"); + properties.put("mail.smtp.ssl.checkserveridentity", "true"); + } + final Session session = Session.getInstance(properties, authenticator); // Safe } public void testSimpleMail() throws Exception { @@ -34,8 +51,21 @@ class InsecureJavaMail { email.setHostName("config.hostName"); email.setSmtpPort(25); email.setAuthenticator(new DefaultAuthenticator("config.username", "config.password")); - email.setSSLOnConnect(true); - // email.setSSLCheckServerIdentity(true); + email.setSSLOnConnect(true); // $hasInsecureJavaMail + email.setFrom("fromAddress"); + email.setSubject("subject"); + email.setMsg("body"); + email.addTo("toAddress"); + email.send(); + } + + public void testSecureSimpleMail() throws Exception { + Email email = new SimpleEmail(); + email.setHostName("config.hostName"); + email.setSmtpPort(25); + email.setAuthenticator(new DefaultAuthenticator("config.username", "config.password")); + email.setSSLOnConnect(true); // Safe + email.setSSLCheckServerIdentity(true); email.setFrom("fromAddress"); email.setSubject("subject"); email.setMsg("body"); diff --git a/java/ql/test/query-tests/security/CWE-297/InsecureJavaMailTest.ql b/java/ql/test/query-tests/security/CWE-297/InsecureJavaMailTest.ql new file mode 100644 index 00000000000..061aa6711f6 --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-297/InsecureJavaMailTest.ql @@ -0,0 +1,23 @@ +import java +import semmle.code.java.security.Mail +import TestUtilities.InlineExpectationsTest + +class InsecureJavaMailTest extends InlineExpectationsTest { + InsecureJavaMailTest() { this = "HasInsecureJavaMailTest" } + + override string getARelevantTag() { result = "hasInsecureJavaMail" } + + override predicate hasActualResult(Location location, string element, string tag, string value) { + tag = "hasInsecureJavaMail" and + exists(MethodAccess ma | + ma.getLocation() = location and + element = ma.toString() and + value = "" + | + ma.getMethod() instanceof MailSessionGetInstanceMethod and + isInsecureMailPropertyConfig(ma.getArgument(0)) + or + enablesEmailSsl(ma) and not hasSslCertificateCheck(ma.getQualifier()) + ) + } +} From c13bf2a2a135ea9976d682dfe8b7849a98853429 Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Fri, 18 Jun 2021 11:35:05 +0200 Subject: [PATCH 704/741] Add change note --- java/change-notes/2021-06-18-insecure-java-mail-query.md | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 java/change-notes/2021-06-18-insecure-java-mail-query.md diff --git a/java/change-notes/2021-06-18-insecure-java-mail-query.md b/java/change-notes/2021-06-18-insecure-java-mail-query.md new file mode 100644 index 00000000000..495a7019f9a --- /dev/null +++ b/java/change-notes/2021-06-18-insecure-java-mail-query.md @@ -0,0 +1,2 @@ +lgtm,codescanning +* The query "Insecure JavaMail SSL Configuration" (`java/insecure-smtp-ssl`) has been promoted from experimental to the main query pack. Its results will now appear by default. This query was originally [submitted as an experimental query by @luchua-bc](https://github.com/github/codeql/pull/3491) \ No newline at end of file From a2e9c2f4abc3ed53a34f0c18a404543e817f050e Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Wed, 30 Jun 2021 11:49:31 +0200 Subject: [PATCH 705/741] Apply suggestions from code review Co-authored-by: Marcono1234 --- java/ql/src/semmle/code/java/frameworks/Mail.qll | 2 +- java/ql/src/semmle/code/java/security/Mail.qll | 4 +--- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/java/ql/src/semmle/code/java/frameworks/Mail.qll b/java/ql/src/semmle/code/java/frameworks/Mail.qll index f26cf0c5982..0f8ff1e0c55 100644 --- a/java/ql/src/semmle/code/java/frameworks/Mail.qll +++ b/java/ql/src/semmle/code/java/frameworks/Mail.qll @@ -20,7 +20,7 @@ class MailSessionGetInstanceMethod extends Method { } /** - * A subtype of the class `org.apache.commons.mail.Mail` + * A subtype of the class `org.apache.commons.mail.Email` */ class ApacheEmail extends Class { ApacheEmail() { this.getASupertype*().hasQualifiedName("org.apache.commons.mail", "Email") } diff --git a/java/ql/src/semmle/code/java/security/Mail.qll b/java/ql/src/semmle/code/java/security/Mail.qll index e5fbb5c65a0..4f4c9c87426 100644 --- a/java/ql/src/semmle/code/java/security/Mail.qll +++ b/java/ql/src/semmle/code/java/security/Mail.qll @@ -56,9 +56,7 @@ predicate hasSslCertificateCheck(VarAccess va) { private string getStringValue(Expr expr) { result = expr.(CompileTimeConstantExpr).getStringValue() or - result = getStringValue(expr.(AddExpr).getLeftOperand()) - or - result = getStringValue(expr.(AddExpr).getRightOperand()) + result = getStringValue(expr.(AddExpr).getAnOperand()) } /** From baffb0ed891f1e10cb19fd9900ab966bdd14fc1f Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Wed, 30 Jun 2021 12:14:55 +0200 Subject: [PATCH 706/741] Consider Jakarta Mail --- .../src/semmle/code/java/frameworks/Mail.qll | 8 +- .../CWE-297/InsecureJakartaMailTest.java | 42 ++++++++++ .../test/query-tests/security/CWE-297/options | 2 +- .../jakarta/mail/Authenticator.java | 20 +++++ .../jakarta/mail/PasswordAuthentication.java | 28 +++++++ .../jakarta/mail/Session.java | 80 +++++++++++++++++++ 6 files changed, 175 insertions(+), 5 deletions(-) create mode 100644 java/ql/test/query-tests/security/CWE-297/InsecureJakartaMailTest.java create mode 100644 java/ql/test/stubs/jakarta-mail-2.0.1/jakarta/mail/Authenticator.java create mode 100644 java/ql/test/stubs/jakarta-mail-2.0.1/jakarta/mail/PasswordAuthentication.java create mode 100644 java/ql/test/stubs/jakarta-mail-2.0.1/jakarta/mail/Session.java diff --git a/java/ql/src/semmle/code/java/frameworks/Mail.qll b/java/ql/src/semmle/code/java/frameworks/Mail.qll index 0f8ff1e0c55..93116009862 100644 --- a/java/ql/src/semmle/code/java/frameworks/Mail.qll +++ b/java/ql/src/semmle/code/java/frameworks/Mail.qll @@ -3,14 +3,14 @@ import java /** - * The class `javax.mail.Session` + * The class `javax.mail.Session` or `jakarta.mail.Session`. */ class MailSession extends Class { - MailSession() { this.hasQualifiedName("javax.mail", "Session") } + MailSession() { this.hasQualifiedName(["javax.mail", "jakarta.mail"], "Session") } } /** - * The method `getInstance` of the class `javax.mail.Session` + * The method `getInstance` of the classes `javax.mail.Session` or `jakarta.mail.Session`. */ class MailSessionGetInstanceMethod extends Method { MailSessionGetInstanceMethod() { @@ -20,7 +20,7 @@ class MailSessionGetInstanceMethod extends Method { } /** - * A subtype of the class `org.apache.commons.mail.Email` + * A subtype of the class `org.apache.commons.mail.Email`. */ class ApacheEmail extends Class { ApacheEmail() { this.getASupertype*().hasQualifiedName("org.apache.commons.mail", "Email") } diff --git a/java/ql/test/query-tests/security/CWE-297/InsecureJakartaMailTest.java b/java/ql/test/query-tests/security/CWE-297/InsecureJakartaMailTest.java new file mode 100644 index 00000000000..2dd5cab08ec --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-297/InsecureJakartaMailTest.java @@ -0,0 +1,42 @@ +import java.util.Properties; + +import jakarta.mail.Authenticator; +import jakarta.mail.PasswordAuthentication; +import jakarta.mail.Session; + +class InsecureJakartaMailTest { + public void testJavaMail() { + final Properties properties = new Properties(); + properties.put("mail.transport.protocol", "protocol"); + properties.put("mail.smtp.host", "hostname"); + properties.put("mail.smtp.socketFactory.class", "classname"); + + final jakarta.mail.Authenticator authenticator = new jakarta.mail.Authenticator() { + protected PasswordAuthentication getPasswordAuthentication() { + return new PasswordAuthentication("username", "password"); + } + }; + if (null != authenticator) { + properties.put("mail.smtp.auth", "true"); + } + final Session session = Session.getInstance(properties, authenticator); // $hasInsecureJavaMail + } + + public void testSecureJavaMail() { + final Properties properties = new Properties(); + properties.put("mail.transport.protocol", "protocol"); + properties.put("mail.smtp.host", "hostname"); + properties.put("mail.smtp.socketFactory.class", "classname"); + + final jakarta.mail.Authenticator authenticator = new jakarta.mail.Authenticator() { + protected PasswordAuthentication getPasswordAuthentication() { + return new PasswordAuthentication("username", "password"); + } + }; + if (null != authenticator) { + properties.put("mail.smtp.auth", "true"); + properties.put("mail.smtp.ssl.checkserveridentity", "true"); + } + final Session session = Session.getInstance(properties, authenticator); // Safe + } +} diff --git a/java/ql/test/query-tests/security/CWE-297/options b/java/ql/test/query-tests/security/CWE-297/options index 563a4fdcfc8..6fcd80260e3 100644 --- a/java/ql/test/query-tests/security/CWE-297/options +++ b/java/ql/test/query-tests/security/CWE-297/options @@ -1 +1 @@ -// semmle-extractor-options: --javac-args -cp ${testdir}/../../../stubs/apache-commons-email-1.6.0:${testdir}/../../../stubs/javamail-api-1.6.2 +// semmle-extractor-options: --javac-args -cp ${testdir}/../../../stubs/apache-commons-email-1.6.0:${testdir}/../../../stubs/javamail-api-1.6.2:${testdir}/../../../stubs/jakarta-mail-2.0.1 diff --git a/java/ql/test/stubs/jakarta-mail-2.0.1/jakarta/mail/Authenticator.java b/java/ql/test/stubs/jakarta-mail-2.0.1/jakarta/mail/Authenticator.java new file mode 100644 index 00000000000..594f3876f19 --- /dev/null +++ b/java/ql/test/stubs/jakarta-mail-2.0.1/jakarta/mail/Authenticator.java @@ -0,0 +1,20 @@ +/* + * Copyright (c) 1997, 2020 Oracle and/or its affiliates. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v. 2.0, which is available at + * http://www.eclipse.org/legal/epl-2.0. + * + * This Source Code may also be made available under the following Secondary + * Licenses when the conditions for such availability set forth in the + * Eclipse Public License v. 2.0 are satisfied: GNU General Public License, + * version 2 with the GNU Classpath Exception, which is available at + * https://www.gnu.org/software/classpath/license.html. + * + * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 + */ + +package jakarta.mail; + +public abstract class Authenticator { +} diff --git a/java/ql/test/stubs/jakarta-mail-2.0.1/jakarta/mail/PasswordAuthentication.java b/java/ql/test/stubs/jakarta-mail-2.0.1/jakarta/mail/PasswordAuthentication.java new file mode 100644 index 00000000000..20751b7f7d9 --- /dev/null +++ b/java/ql/test/stubs/jakarta-mail-2.0.1/jakarta/mail/PasswordAuthentication.java @@ -0,0 +1,28 @@ +/* + * Copyright (c) 1997, 2020 Oracle and/or its affiliates. All rights reserved. + * + * This program and the accompanying materials are made available under the terms of the Eclipse + * Public License v. 2.0, which is available at http://www.eclipse.org/legal/epl-2.0. + * + * This Source Code may also be made available under the following Secondary Licenses when the + * conditions for such availability set forth in the Eclipse Public License v. 2.0 are satisfied: + * GNU General Public License, version 2 with the GNU Classpath Exception, which is available at + * https://www.gnu.org/software/classpath/license.html. + * + * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 + */ + +package jakarta.mail; + +public final class PasswordAuthentication { + public PasswordAuthentication(String userName, String password) {} + + public String getUserName() { + return null; + } + + public String getPassword() { + return null; + } + +} diff --git a/java/ql/test/stubs/jakarta-mail-2.0.1/jakarta/mail/Session.java b/java/ql/test/stubs/jakarta-mail-2.0.1/jakarta/mail/Session.java new file mode 100644 index 00000000000..6f525babdae --- /dev/null +++ b/java/ql/test/stubs/jakarta-mail-2.0.1/jakarta/mail/Session.java @@ -0,0 +1,80 @@ +/* + * Copyright (c) 1997, 2020 Oracle and/or its affiliates. All rights reserved. + * + * This program and the accompanying materials are made available under the terms of the Eclipse + * Public License v. 2.0, which is available at http://www.eclipse.org/legal/epl-2.0. + * + * This Source Code may also be made available under the following Secondary Licenses when the + * conditions for such availability set forth in the Eclipse Public License v. 2.0 are satisfied: + * GNU General Public License, version 2 with the GNU Classpath Exception, which is available at + * https://www.gnu.org/software/classpath/license.html. + * + * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 + */ + +package jakarta.mail; + +import java.lang.reflect.*; +import java.io.*; +import java.net.*; +import java.security.*; +import java.util.Properties; + +public final class Session { + public static Session getInstance(Properties props, Authenticator authenticator) { + return null; + } + + public static Session getInstance(Properties props) { + return null; + } + + public static synchronized Session getDefaultInstance(Properties props, + Authenticator authenticator) { + return null; + } + + public static Session getDefaultInstance(Properties props) { + return null; + } + + public synchronized void setDebug(boolean debug) {} + + public synchronized boolean getDebug() { + return false; + } + + public synchronized void setDebugOut(PrintStream out) {} + + public synchronized PrintStream getDebugOut() { + return null; + } + + public synchronized Provider[] getProviders() { + return null; + } + + public synchronized Provider getProvider(String protocol) throws NoSuchProviderException { + return null; + } + + public synchronized void setProvider(Provider provider) throws NoSuchProviderException {} + + public PasswordAuthentication requestPasswordAuthentication(InetAddress addr, int port, + String protocol, String prompt, String defaultUserName) { + return null; + } + + public Properties getProperties() { + return null; + } + + public String getProperty(String name) { + return null; + } + + public synchronized void addProvider(Provider provider) {} + + public synchronized void setProtocolForAddress(String addresstype, String protocol) {} + +} From 2d1278ece50a45c8d21ebb452ca1e52f72976e12 Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Wed, 30 Jun 2021 12:22:48 +0200 Subject: [PATCH 707/741] Consider setStartTLSRequired for Apache SimpleEmail --- .../ql/src/semmle/code/java/security/Mail.qll | 2 +- .../CWE-297/InsecureJavaMailTest.java | 31 ---------- .../CWE-297/InsecureSimpleEmailTest.java | 62 +++++++++++++++++++ 3 files changed, 63 insertions(+), 32 deletions(-) create mode 100644 java/ql/test/query-tests/security/CWE-297/InsecureSimpleEmailTest.java diff --git a/java/ql/src/semmle/code/java/security/Mail.qll b/java/ql/src/semmle/code/java/security/Mail.qll index 4f4c9c87426..c100e5c49dc 100644 --- a/java/ql/src/semmle/code/java/security/Mail.qll +++ b/java/ql/src/semmle/code/java/security/Mail.qll @@ -33,7 +33,7 @@ predicate isInsecureMailPropertyConfig(VarAccess propertiesVarAccess) { * Holds if `ma` enables TLS/SSL with Apache Email. */ predicate enablesEmailSsl(MethodAccess ma) { - ma.getMethod().hasName("setSSLOnConnect") and + ma.getMethod().hasName(["setSSLOnConnect", "setStartTLSRequired"]) and ma.getMethod().getDeclaringType() instanceof ApacheEmail and ma.getArgument(0).(BooleanLiteral).getBooleanValue() = true } diff --git a/java/ql/test/query-tests/security/CWE-297/InsecureJavaMailTest.java b/java/ql/test/query-tests/security/CWE-297/InsecureJavaMailTest.java index fdfbd1f9f03..a9880c20339 100644 --- a/java/ql/test/query-tests/security/CWE-297/InsecureJavaMailTest.java +++ b/java/ql/test/query-tests/security/CWE-297/InsecureJavaMailTest.java @@ -4,12 +4,6 @@ import javax.mail.Authenticator; import javax.mail.PasswordAuthentication; import javax.mail.Session; -import org.apache.commons.mail.DefaultAuthenticator; -import org.apache.commons.mail.Email; -import org.apache.commons.mail.SimpleEmail; - -import java.util.Properties; - class InsecureJavaMailTest { public void testJavaMail() { final Properties properties = new Properties(); @@ -46,30 +40,5 @@ class InsecureJavaMailTest { final Session session = Session.getInstance(properties, authenticator); // Safe } - public void testSimpleMail() throws Exception { - Email email = new SimpleEmail(); - email.setHostName("config.hostName"); - email.setSmtpPort(25); - email.setAuthenticator(new DefaultAuthenticator("config.username", "config.password")); - email.setSSLOnConnect(true); // $hasInsecureJavaMail - email.setFrom("fromAddress"); - email.setSubject("subject"); - email.setMsg("body"); - email.addTo("toAddress"); - email.send(); - } - public void testSecureSimpleMail() throws Exception { - Email email = new SimpleEmail(); - email.setHostName("config.hostName"); - email.setSmtpPort(25); - email.setAuthenticator(new DefaultAuthenticator("config.username", "config.password")); - email.setSSLOnConnect(true); // Safe - email.setSSLCheckServerIdentity(true); - email.setFrom("fromAddress"); - email.setSubject("subject"); - email.setMsg("body"); - email.addTo("toAddress"); - email.send(); - } } diff --git a/java/ql/test/query-tests/security/CWE-297/InsecureSimpleEmailTest.java b/java/ql/test/query-tests/security/CWE-297/InsecureSimpleEmailTest.java new file mode 100644 index 00000000000..5940dbbd457 --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-297/InsecureSimpleEmailTest.java @@ -0,0 +1,62 @@ +import org.apache.commons.mail.DefaultAuthenticator; +import org.apache.commons.mail.Email; +import org.apache.commons.mail.SimpleEmail; + +public class InsecureSimpleEmailTest { + public void test() throws Exception { + // with setSSLOnConnect + { + Email email = new SimpleEmail(); + email.setHostName("config.hostName"); + email.setSmtpPort(25); + email.setAuthenticator(new DefaultAuthenticator("config.username", "config.password")); + email.setSSLOnConnect(true); // $hasInsecureJavaMail + email.setFrom("fromAddress"); + email.setSubject("subject"); + email.setMsg("body"); + email.addTo("toAddress"); + email.send(); + } + // with setStartTLSRequired + { + Email email = new SimpleEmail(); + email.setHostName("config.hostName"); + email.setSmtpPort(25); + email.setAuthenticator(new DefaultAuthenticator("config.username", "config.password")); + email.setStartTLSRequired(true); // $hasInsecureJavaMail + email.setFrom("fromAddress"); + email.setSubject("subject"); + email.setMsg("body"); + email.addTo("toAddress"); + email.send(); + } + // safe with setSSLOnConnect + { + Email email = new SimpleEmail(); + email.setHostName("config.hostName"); + email.setSmtpPort(25); + email.setAuthenticator(new DefaultAuthenticator("config.username", "config.password")); + email.setSSLOnConnect(true); // Safe + email.setSSLCheckServerIdentity(true); + email.setFrom("fromAddress"); + email.setSubject("subject"); + email.setMsg("body"); + email.addTo("toAddress"); + email.send(); + } + // safe with setStartTLSRequired + { + Email email = new SimpleEmail(); + email.setHostName("config.hostName"); + email.setSmtpPort(25); + email.setAuthenticator(new DefaultAuthenticator("config.username", "config.password")); + email.setStartTLSRequired(true); // Safe + email.setSSLCheckServerIdentity(true); + email.setFrom("fromAddress"); + email.setSubject("subject"); + email.setMsg("body"); + email.addTo("toAddress"); + email.send(); + } + } +} From 9c1021134a86257f55aaccb419b0649665625359 Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Wed, 30 Jun 2021 13:37:20 +0200 Subject: [PATCH 708/741] Add some links to qhelp --- .../src/Security/CWE/CWE-297/InsecureJavaMail.qhelp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/java/ql/src/Security/CWE/CWE-297/InsecureJavaMail.qhelp b/java/ql/src/Security/CWE/CWE-297/InsecureJavaMail.qhelp index 9945227ff0f..06a3df57b18 100644 --- a/java/ql/src/Security/CWE/CWE-297/InsecureJavaMail.qhelp +++ b/java/ql/src/Security/CWE/CWE-297/InsecureJavaMail.qhelp @@ -19,9 +19,17 @@ credentials are sent in an SSL session without certificate validation. In the 'G +
  • + Jakarta Mail: + SSL Notes. +
  • +
  • + Apache Commons: + Email security. +
  • Log4j2: - Add support for specifying an SSL configuration for SmtpAppender (CVE-2020-9488) + Add support for specifying an SSL configuration for SmtpAppender (CVE-2020-9488).
  • - + \ No newline at end of file From 9f54b1065a407b4d6baa10d76979d5251e540f67 Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Thu, 29 Jul 2021 17:30:01 +0200 Subject: [PATCH 709/741] Apply suggestions from code review Co-authored-by: mc <42146119+mchammer01@users.noreply.github.com> --- java/change-notes/2021-06-18-insecure-java-mail-query.md | 2 +- java/ql/src/Security/CWE/CWE-297/InsecureJavaMail.ql | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/java/change-notes/2021-06-18-insecure-java-mail-query.md b/java/change-notes/2021-06-18-insecure-java-mail-query.md index 495a7019f9a..e2778ec1b02 100644 --- a/java/change-notes/2021-06-18-insecure-java-mail-query.md +++ b/java/change-notes/2021-06-18-insecure-java-mail-query.md @@ -1,2 +1,2 @@ lgtm,codescanning -* The query "Insecure JavaMail SSL Configuration" (`java/insecure-smtp-ssl`) has been promoted from experimental to the main query pack. Its results will now appear by default. This query was originally [submitted as an experimental query by @luchua-bc](https://github.com/github/codeql/pull/3491) \ No newline at end of file +* The query "Insecure JavaMail SSL Configuration" (`java/insecure-smtp-ssl`) has been promoted from experimental to the main query pack. Its results will now appear by default. This query was originally [submitted as an experimental query by @luchua-bc](https://github.com/github/codeql/pull/3491). diff --git a/java/ql/src/Security/CWE/CWE-297/InsecureJavaMail.ql b/java/ql/src/Security/CWE/CWE-297/InsecureJavaMail.ql index 9697b2ae588..3c6fff0678d 100644 --- a/java/ql/src/Security/CWE/CWE-297/InsecureJavaMail.ql +++ b/java/ql/src/Security/CWE/CWE-297/InsecureJavaMail.ql @@ -1,8 +1,8 @@ /** * @name Insecure JavaMail SSL Configuration - * @description Java application configured to use authenticated mail session - * over SSL does not validate the SSL certificate to properly - * ensure that it is actually associated with that host. + * @description Configuring a Java application to use authenticated mail session + * over SSL without certificate validation + * makes the session susceptible to a man-in-the-middle attack. * @kind problem * @problem.severity warning * @precision medium From 3323f7ab1afeba4ef470b9f0b4575306fcb40f14 Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Thu, 29 Jul 2021 17:34:08 +0200 Subject: [PATCH 710/741] Fix qhelp --- java/ql/src/Security/CWE/CWE-297/InsecureJavaMail.qhelp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/ql/src/Security/CWE/CWE-297/InsecureJavaMail.qhelp b/java/ql/src/Security/CWE/CWE-297/InsecureJavaMail.qhelp index 06a3df57b18..406d9666ce6 100644 --- a/java/ql/src/Security/CWE/CWE-297/InsecureJavaMail.qhelp +++ b/java/ql/src/Security/CWE/CWE-297/InsecureJavaMail.qhelp @@ -3,7 +3,7 @@

    JavaMail is commonly used in Java applications to send emails. There are popular third-party libraries like Apache Commons Email which are built on JavaMail and facilitate integration. Authenticated mail sessions require user credentials and mail sessions can require SSL/TLS authentication. It is a common security vulnerability that host-specific certificate data is not validated or is incorrectly validated. Failing to validate the certificate makes the SSL session susceptible to a man-in-the-middle attack.

    -

    This query checks whether SSL certificate is validated when username/password is sent in authenticator and when SSL is enabled.

    +

    This query checks whether the SSL certificate is validated when credentials are used and SSL is enabled in email communications.

    The query has code for both plain JavaMail invocation and mailing through Apache SimpleMail to make it more comprehensive.

    From a86cbd884edf9a2a92593481c359ba51ce888ade Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Tue, 5 Oct 2021 09:40:22 +0200 Subject: [PATCH 711/741] Apply suggestions from code review Co-authored-by: Anders Schack-Mulligen --- .../semmle/code/java/frameworks/Mail.qll | 0 .../semmle/code/java/security/Mail.qll | 18 ++++++++++-------- .../Security/CWE/CWE-297/InsecureJavaMail.ql | 5 +++-- .../security/CWE-297/InsecureJavaMailTest.ql | 5 +++-- 4 files changed, 16 insertions(+), 12 deletions(-) rename java/ql/{src => lib}/semmle/code/java/frameworks/Mail.qll (100%) rename java/ql/{src => lib}/semmle/code/java/security/Mail.qll (78%) diff --git a/java/ql/src/semmle/code/java/frameworks/Mail.qll b/java/ql/lib/semmle/code/java/frameworks/Mail.qll similarity index 100% rename from java/ql/src/semmle/code/java/frameworks/Mail.qll rename to java/ql/lib/semmle/code/java/frameworks/Mail.qll diff --git a/java/ql/src/semmle/code/java/security/Mail.qll b/java/ql/lib/semmle/code/java/security/Mail.qll similarity index 78% rename from java/ql/src/semmle/code/java/security/Mail.qll rename to java/ql/lib/semmle/code/java/security/Mail.qll index c100e5c49dc..e126ca57dff 100644 --- a/java/ql/src/semmle/code/java/security/Mail.qll +++ b/java/ql/lib/semmle/code/java/security/Mail.qll @@ -10,10 +10,10 @@ private import semmle.code.java.frameworks.Properties * set the `mail.smtp.ssl.socketFactory`/`mail.smtp.ssl.socketFactory.class` property to create an SMTP SSL socket. * 2. No `mail.smtp.ssl.checkserveridentity` property is enabled. */ -predicate isInsecureMailPropertyConfig(VarAccess propertiesVarAccess) { +predicate isInsecureMailPropertyConfig(Variable properties) { exists(MethodAccess ma | ma.getMethod() instanceof SetPropertyMethod and - ma.getQualifier() = propertiesVarAccess.getVariable().getAnAccess() + ma.getQualifier() = properties.getAnAccess() | getStringValue(ma.getArgument(0)).matches("%.auth%") and //mail.smtp.auth getStringValue(ma.getArgument(1)) = "true" @@ -22,7 +22,7 @@ predicate isInsecureMailPropertyConfig(VarAccess propertiesVarAccess) { ) and not exists(MethodAccess ma | ma.getMethod() instanceof SetPropertyMethod and - ma.getQualifier() = propertiesVarAccess.getVariable().getAnAccess() + ma.getQualifier() = properties.getAnAccess() | getStringValue(ma.getArgument(0)).matches("%.ssl.checkserveridentity%") and //mail.smtp.ssl.checkserveridentity getStringValue(ma.getArgument(1)) = "true" @@ -39,11 +39,11 @@ predicate enablesEmailSsl(MethodAccess ma) { } /** - * Holds if a SSL certificate check is enabled on `va` with Apache Email + * Holds if a SSL certificate check is enabled on an access of `apacheEmail` with Apache Email. */ -predicate hasSslCertificateCheck(VarAccess va) { +predicate hasSslCertificateCheck(Variable apacheEmail) { exists(MethodAccess ma | - ma.getQualifier() = va.getVariable().getAnAccess() and + ma.getQualifier() = apacheEmail.getAnAccess() and ma.getMethod().hasName("setSSLCheckServerIdentity") and ma.getMethod().getDeclaringType() instanceof ApacheEmail and ma.getArgument(0).(BooleanLiteral).getBooleanValue() = true @@ -51,7 +51,8 @@ predicate hasSslCertificateCheck(VarAccess va) { } /** - * Helper method to get string value of an argument + * Returns the string value of `expr` if it is a `CompileTimeConstantExpr`, + * or the string value of its operands if it is an `AddExpr`. */ private string getStringValue(Expr expr) { result = expr.(CompileTimeConstantExpr).getStringValue() @@ -60,7 +61,8 @@ private string getStringValue(Expr expr) { } /** - * A method to set Java properties + * A method to set Java properties, either using the `Properties` class + * or the `Dictionary` class. */ private class SetPropertyMethod extends Method { SetPropertyMethod() { diff --git a/java/ql/src/Security/CWE/CWE-297/InsecureJavaMail.ql b/java/ql/src/Security/CWE/CWE-297/InsecureJavaMail.ql index 3c6fff0678d..10e122d31c7 100644 --- a/java/ql/src/Security/CWE/CWE-297/InsecureJavaMail.ql +++ b/java/ql/src/Security/CWE/CWE-297/InsecureJavaMail.ql @@ -5,6 +5,7 @@ * makes the session susceptible to a man-in-the-middle attack. * @kind problem * @problem.severity warning + * @security-severity 5.9 * @precision medium * @id java/insecure-smtp-ssl * @tags security @@ -17,7 +18,7 @@ import semmle.code.java.security.Mail from MethodAccess ma where ma.getMethod() instanceof MailSessionGetInstanceMethod and - isInsecureMailPropertyConfig(ma.getArgument(0)) + isInsecureMailPropertyConfig(ma.getArgument(0).(VarAccess).getVariable()) or - enablesEmailSsl(ma) and not hasSslCertificateCheck(ma.getQualifier()) + enablesEmailSsl(ma) and not hasSslCertificateCheck(ma.getQualifier().(VarAccess).getVariable()) select ma, "Java mailing has insecure SSL configuration" diff --git a/java/ql/test/query-tests/security/CWE-297/InsecureJavaMailTest.ql b/java/ql/test/query-tests/security/CWE-297/InsecureJavaMailTest.ql index 061aa6711f6..137dde369f9 100644 --- a/java/ql/test/query-tests/security/CWE-297/InsecureJavaMailTest.ql +++ b/java/ql/test/query-tests/security/CWE-297/InsecureJavaMailTest.ql @@ -15,9 +15,10 @@ class InsecureJavaMailTest extends InlineExpectationsTest { value = "" | ma.getMethod() instanceof MailSessionGetInstanceMethod and - isInsecureMailPropertyConfig(ma.getArgument(0)) + isInsecureMailPropertyConfig(ma.getArgument(0).(VarAccess).getVariable()) or - enablesEmailSsl(ma) and not hasSslCertificateCheck(ma.getQualifier()) + enablesEmailSsl(ma) and + not hasSslCertificateCheck(ma.getQualifier().(VarAccess).getVariable()) ) } } From 83ca4ef6d9dd36ed55262fd26df24663f74991c2 Mon Sep 17 00:00:00 2001 From: Asger Feldthaus Date: Tue, 5 Oct 2021 08:11:57 +0200 Subject: [PATCH 712/741] JS: Lower security-severity of queries with speculative threat model In the CVSS calculator we model this by setting 'Attack Complexity' to High and 'User Interaction' to Low (as opposed to None). CVSS vector: CVSS:3.0/AV:N/AC:H/PR:L/UI:N/S:C/C:N/I:H/A:N --- javascript/ql/src/Security/CWE-078/IndirectCommandInjection.ql | 2 +- .../Security/CWE-078/ShellCommandInjectionFromEnvironment.ql | 2 +- .../ql/src/Security/CWE-078/UnsafeShellCommandConstruction.ql | 2 +- javascript/ql/src/Security/CWE-078/UselessUseOfCat.ql | 2 +- javascript/ql/src/Security/CWE-912/HttpToFileAccess.ql | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/javascript/ql/src/Security/CWE-078/IndirectCommandInjection.ql b/javascript/ql/src/Security/CWE-078/IndirectCommandInjection.ql index eb29b56cac3..7520a95ed9c 100644 --- a/javascript/ql/src/Security/CWE-078/IndirectCommandInjection.ql +++ b/javascript/ql/src/Security/CWE-078/IndirectCommandInjection.ql @@ -5,7 +5,7 @@ * command-line injection vulnerabilities. * @kind path-problem * @problem.severity warning - * @security-severity 9.8 + * @security-severity 6.3 * @precision medium * @id js/indirect-command-line-injection * @tags correctness diff --git a/javascript/ql/src/Security/CWE-078/ShellCommandInjectionFromEnvironment.ql b/javascript/ql/src/Security/CWE-078/ShellCommandInjectionFromEnvironment.ql index b4bd735d493..cad1039814c 100644 --- a/javascript/ql/src/Security/CWE-078/ShellCommandInjectionFromEnvironment.ql +++ b/javascript/ql/src/Security/CWE-078/ShellCommandInjectionFromEnvironment.ql @@ -4,7 +4,7 @@ * environment may cause subtle bugs or vulnerabilities. * @kind path-problem * @problem.severity warning - * @security-severity 9.8 + * @security-severity 6.3 * @precision high * @id js/shell-command-injection-from-environment * @tags correctness diff --git a/javascript/ql/src/Security/CWE-078/UnsafeShellCommandConstruction.ql b/javascript/ql/src/Security/CWE-078/UnsafeShellCommandConstruction.ql index b0b22a96704..e29a75c1163 100644 --- a/javascript/ql/src/Security/CWE-078/UnsafeShellCommandConstruction.ql +++ b/javascript/ql/src/Security/CWE-078/UnsafeShellCommandConstruction.ql @@ -4,7 +4,7 @@ * user to change the meaning of the command. * @kind path-problem * @problem.severity error - * @security-severity 9.8 + * @security-severity 6.3 * @precision high * @id js/shell-command-constructed-from-input * @tags correctness diff --git a/javascript/ql/src/Security/CWE-078/UselessUseOfCat.ql b/javascript/ql/src/Security/CWE-078/UselessUseOfCat.ql index fd29399546a..e0678b4142b 100644 --- a/javascript/ql/src/Security/CWE-078/UselessUseOfCat.ql +++ b/javascript/ql/src/Security/CWE-078/UselessUseOfCat.ql @@ -3,7 +3,7 @@ * @description Using the `cat` process to read a file is unnecessarily complex, inefficient, unportable, and can lead to subtle bugs, or even security vulnerabilities. * @kind problem * @problem.severity error - * @security-severity 9.8 + * @security-severity 6.3 * @precision high * @id js/unnecessary-use-of-cat * @tags correctness diff --git a/javascript/ql/src/Security/CWE-912/HttpToFileAccess.ql b/javascript/ql/src/Security/CWE-912/HttpToFileAccess.ql index 9a8ac7b4b73..772297dda63 100644 --- a/javascript/ql/src/Security/CWE-912/HttpToFileAccess.ql +++ b/javascript/ql/src/Security/CWE-912/HttpToFileAccess.ql @@ -3,7 +3,7 @@ * @description Writing network data directly to the file system allows arbitrary file upload and might indicate a backdoor. * @kind path-problem * @problem.severity warning - * @security-severity 9.8 + * @security-severity 6.3 * @precision medium * @id js/http-to-file-access * @tags security From 682a71176d15d3baa6ce1625f464768766272633 Mon Sep 17 00:00:00 2001 From: Asger Feldthaus Date: Tue, 5 Oct 2021 08:27:03 +0200 Subject: [PATCH 713/741] JS: Make TaintedFormatString have same severity as LogInjection The CWE number for this query is associated with buffer overflows from printf/scanf-style functions in C++, which has likely determined its derived security score. But in JavaScript, a tainted format string is unlikely to lead to anything worse than log injection so we're manually update its score to reflect this. --- javascript/ql/src/Security/CWE-134/TaintedFormatString.ql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/javascript/ql/src/Security/CWE-134/TaintedFormatString.ql b/javascript/ql/src/Security/CWE-134/TaintedFormatString.ql index 25cb62bd9b1..06f44703a5d 100644 --- a/javascript/ql/src/Security/CWE-134/TaintedFormatString.ql +++ b/javascript/ql/src/Security/CWE-134/TaintedFormatString.ql @@ -3,7 +3,7 @@ * @description Using external input in format strings can lead to garbled output. * @kind path-problem * @problem.severity warning - * @security-severity 9.3 + * @security-severity 7.3 * @precision high * @id js/tainted-format-string * @tags security From c4e8af983a6a506a1bf7851fccf0d1d564edd0b2 Mon Sep 17 00:00:00 2001 From: Asger Feldthaus Date: Tue, 5 Oct 2021 08:42:41 +0200 Subject: [PATCH 714/741] JS: Update score and add CWE-730 to LoopBoundInjection This is a denial-of-service query, but was missing the CWE-730 tag ("denial of service") and consequently had a lower score than the other DoS queries. --- javascript/ql/src/Security/CWE-834/LoopBoundInjection.ql | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/javascript/ql/src/Security/CWE-834/LoopBoundInjection.ql b/javascript/ql/src/Security/CWE-834/LoopBoundInjection.ql index 028835343c1..638829de15e 100644 --- a/javascript/ql/src/Security/CWE-834/LoopBoundInjection.ql +++ b/javascript/ql/src/Security/CWE-834/LoopBoundInjection.ql @@ -4,10 +4,11 @@ * property can cause indefinite looping. * @kind path-problem * @problem.severity warning - * @security-severity 6.5 + * @security-severity 7.5 * @id js/loop-bound-injection * @tags security * external/cwe/cwe-834 + * external/cwe/cwe-730 * @precision high */ From 3a20ca96c4e378a4384fabfe6f551de588f6f93e Mon Sep 17 00:00:00 2001 From: Asger Feldthaus Date: Tue, 5 Oct 2021 08:50:32 +0200 Subject: [PATCH 715/741] JS: Update CWE tags and severity score of code injection query The derived security-severity score of the JS code injection query was much lower than for other languages (6.1 versus 9.3), possibly due some differences in CWE tags, such as the inclusion of CWE-079. We also add the more specific CWE-095 ("eval injection") for consistency with other languages. It is a child of CWE-094 ("code injection") which was already tagged. --- javascript/ql/src/Security/CWE-094/CodeInjection.ql | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/javascript/ql/src/Security/CWE-094/CodeInjection.ql b/javascript/ql/src/Security/CWE-094/CodeInjection.ql index 2934107f1bb..fbf39beaca4 100644 --- a/javascript/ql/src/Security/CWE-094/CodeInjection.ql +++ b/javascript/ql/src/Security/CWE-094/CodeInjection.ql @@ -4,11 +4,12 @@ * code execution. * @kind path-problem * @problem.severity error - * @security-severity 6.1 + * @security-severity 9.3 * @precision high * @id js/code-injection * @tags security * external/cwe/cwe-094 + * external/cwe/cwe-095 * external/cwe/cwe-079 * external/cwe/cwe-116 */ From b089e6d84e6165b634320c7b49d1b14d809367a6 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Tue, 5 Oct 2021 09:14:20 +0100 Subject: [PATCH 716/741] C++/C#: Fix QLDoc of 'CopyInstruction'. --- .../code/cpp/ir/implementation/aliased_ssa/Instruction.qll | 2 +- .../lib/semmle/code/cpp/ir/implementation/raw/Instruction.qll | 2 +- .../code/cpp/ir/implementation/unaliased_ssa/Instruction.qll | 2 +- .../ql/src/experimental/ir/implementation/raw/Instruction.qll | 2 +- .../ir/implementation/unaliased_ssa/Instruction.qll | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/Instruction.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/Instruction.qll index 2fb3edad602..6f471d8a7e8 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/Instruction.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/Instruction.qll @@ -821,7 +821,7 @@ class ReturnIndirectionInstruction extends VariableInstruction { * * There are several different copy instructions, depending on the source and destination of the * copy operation: - * - `CopyInstruction` - Copies a register operand to a register result. + * - `CopyValueInstruction` - Copies a register operand to a register result. * - `LoadInstruction` - Copies a memory operand to a register result. * - `StoreInstruction` - Copies a register operand to a memory result. */ diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/Instruction.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/Instruction.qll index 2fb3edad602..6f471d8a7e8 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/Instruction.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/Instruction.qll @@ -821,7 +821,7 @@ class ReturnIndirectionInstruction extends VariableInstruction { * * There are several different copy instructions, depending on the source and destination of the * copy operation: - * - `CopyInstruction` - Copies a register operand to a register result. + * - `CopyValueInstruction` - Copies a register operand to a register result. * - `LoadInstruction` - Copies a memory operand to a register result. * - `StoreInstruction` - Copies a register operand to a memory result. */ diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/Instruction.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/Instruction.qll index 2fb3edad602..6f471d8a7e8 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/Instruction.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/Instruction.qll @@ -821,7 +821,7 @@ class ReturnIndirectionInstruction extends VariableInstruction { * * There are several different copy instructions, depending on the source and destination of the * copy operation: - * - `CopyInstruction` - Copies a register operand to a register result. + * - `CopyValueInstruction` - Copies a register operand to a register result. * - `LoadInstruction` - Copies a memory operand to a register result. * - `StoreInstruction` - Copies a register operand to a memory result. */ diff --git a/csharp/ql/src/experimental/ir/implementation/raw/Instruction.qll b/csharp/ql/src/experimental/ir/implementation/raw/Instruction.qll index 2fb3edad602..6f471d8a7e8 100644 --- a/csharp/ql/src/experimental/ir/implementation/raw/Instruction.qll +++ b/csharp/ql/src/experimental/ir/implementation/raw/Instruction.qll @@ -821,7 +821,7 @@ class ReturnIndirectionInstruction extends VariableInstruction { * * There are several different copy instructions, depending on the source and destination of the * copy operation: - * - `CopyInstruction` - Copies a register operand to a register result. + * - `CopyValueInstruction` - Copies a register operand to a register result. * - `LoadInstruction` - Copies a memory operand to a register result. * - `StoreInstruction` - Copies a register operand to a memory result. */ diff --git a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/Instruction.qll b/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/Instruction.qll index 2fb3edad602..6f471d8a7e8 100644 --- a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/Instruction.qll +++ b/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/Instruction.qll @@ -821,7 +821,7 @@ class ReturnIndirectionInstruction extends VariableInstruction { * * There are several different copy instructions, depending on the source and destination of the * copy operation: - * - `CopyInstruction` - Copies a register operand to a register result. + * - `CopyValueInstruction` - Copies a register operand to a register result. * - `LoadInstruction` - Copies a memory operand to a register result. * - `StoreInstruction` - Copies a register operand to a memory result. */ From b956238efa5ba77e51a52b28713a0a4dbdf9600c Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Tue, 5 Oct 2021 12:01:25 +0100 Subject: [PATCH 717/741] Fill in gen/get methods for tests --- .../frameworks/android/intent/Test.java | 378 +++++++++--------- .../frameworks/android/intent/test.ql | 10 +- 2 files changed, 194 insertions(+), 194 deletions(-) diff --git a/java/ql/test/library-tests/frameworks/android/intent/Test.java b/java/ql/test/library-tests/frameworks/android/intent/Test.java index 725f4880da0..cdee36af212 100644 --- a/java/ql/test/library-tests/frameworks/android/intent/Test.java +++ b/java/ql/test/library-tests/frameworks/android/intent/Test.java @@ -17,13 +17,15 @@ import java.util.Set; public class Test { T getElement(Iterable it) { return it.iterator().next(); } - Object getIntent_extrasDefault(Object container) { return null; } - Object getMapKeyDefault(Object container) { return null; } - Object getMapValueDefault(Object container) { return null; } - Object newWithIntent_extrasDefault(Object element) { return null; } - Object newWithMapKeyDefault(Object element) { return null; } - Object newWithMapValueDefault(Object element) { return null; } - Object source() { return null; } + Bundle getIntent_extras(Intent i) { return i.getExtras(); } + String getMapKey(BaseBundle b) { return b.keySet().iterator().next(); } + Object getMapValue(BaseBundle b) { return null; } + Intent newWithIntent_extras(Bundle b) { return null; } + Bundle newBundleWithMapKey(String k) { Bundle b = new Bundle(); b.putInt(k, 0); return b; } + PersistableBundle newPersistableBundleWithMapKey(String k) { PersistableBundle b = new PersistableBundle(); b.putInt(k, 0); return b; } + Bundle newBundleWithMapValue(Object element) { return null; } + PersistableBundle newPersistableBundleWithMapValue(Object element) { return null; } + T source() { return null; } void sink(Object o) { } public void test() throws Exception { @@ -31,16 +33,16 @@ public class Test { { // "android.content;Intent;false;Intent;(Intent);;MapKey of SyntheticField[android.content.Intent.extras] of Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value" Intent out = null; - Intent in = (Intent)newWithIntent_extrasDefault(newWithMapKeyDefault(source())); + Intent in = (Intent)newWithIntent_extras(newBundleWithMapKey(source())); out = new Intent(in); - sink(getMapKeyDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + sink(getMapKey(getIntent_extras(out))); // $ hasValueFlow } { // "android.content;Intent;false;Intent;(Intent);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[0];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value" Intent out = null; - Intent in = (Intent)newWithIntent_extrasDefault(newWithMapValueDefault(source())); + Intent in = (Intent)newWithIntent_extras(newBundleWithMapValue(source())); out = new Intent(in); - sink(getMapValueDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + sink(getMapValue(getIntent_extras(out))); // $ hasValueFlow } { // "android.content;Intent;true;addCategory;;;Argument[-1];ReturnValue;value" @@ -59,98 +61,98 @@ public class Test { { // "android.content;Intent;true;getBundleExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value" Bundle out = null; - Intent in = (Intent)newWithIntent_extrasDefault(newWithMapValueDefault(source())); + Intent in = (Intent)newWithIntent_extras(newBundleWithMapValue(source())); out = in.getBundleExtra(null); sink(out); // $ hasValueFlow } { // "android.content;Intent;true;getByteArrayExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value" byte[] out = null; - Intent in = (Intent)newWithIntent_extrasDefault(newWithMapValueDefault(source())); + Intent in = (Intent)newWithIntent_extras(newBundleWithMapValue(source())); out = in.getByteArrayExtra(null); sink(out); // $ hasValueFlow } { // "android.content;Intent;true;getCharArrayExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value" char[] out = null; - Intent in = (Intent)newWithIntent_extrasDefault(newWithMapValueDefault(source())); + Intent in = (Intent)newWithIntent_extras(newBundleWithMapValue(source())); out = in.getCharArrayExtra(null); sink(out); // $ hasValueFlow } { // "android.content;Intent;true;getCharSequenceArrayExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value" CharSequence[] out = null; - Intent in = (Intent)newWithIntent_extrasDefault(newWithMapValueDefault(source())); + Intent in = (Intent)newWithIntent_extras(newBundleWithMapValue(source())); out = in.getCharSequenceArrayExtra(null); sink(out); // $ hasValueFlow } { // "android.content;Intent;true;getCharSequenceArrayListExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value" ArrayList out = null; - Intent in = (Intent)newWithIntent_extrasDefault(newWithMapValueDefault(source())); + Intent in = (Intent)newWithIntent_extras(newBundleWithMapValue(source())); out = in.getCharSequenceArrayListExtra(null); sink(out); // $ hasValueFlow } { // "android.content;Intent;true;getCharSequenceExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value" CharSequence out = null; - Intent in = (Intent)newWithIntent_extrasDefault(newWithMapValueDefault(source())); + Intent in = (Intent)newWithIntent_extras(newBundleWithMapValue(source())); out = in.getCharSequenceExtra(null); sink(out); // $ hasValueFlow } { // "android.content;Intent;true;getExtras;();;SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value" Bundle out = null; - Intent in = (Intent)newWithIntent_extrasDefault(source()); + Intent in = (Intent)newWithIntent_extras(source()); out = in.getExtras(); sink(out); // $ hasValueFlow } { // "android.content;Intent;true;getParcelableArrayExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value" Parcelable[] out = null; - Intent in = (Intent)newWithIntent_extrasDefault(newWithMapValueDefault(source())); + Intent in = (Intent)newWithIntent_extras(newBundleWithMapValue(source())); out = in.getParcelableArrayExtra(null); sink(out); // $ hasValueFlow } { // "android.content;Intent;true;getParcelableArrayListExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value" ArrayList out = null; - Intent in = (Intent)newWithIntent_extrasDefault(newWithMapValueDefault(source())); + Intent in = (Intent)newWithIntent_extras(newBundleWithMapValue(source())); out = in.getParcelableArrayListExtra(null); sink(out); // $ hasValueFlow } { // "android.content;Intent;true;getParcelableExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value" Parcelable out = null; - Intent in = (Intent)newWithIntent_extrasDefault(newWithMapValueDefault(source())); + Intent in = (Intent)newWithIntent_extras(newBundleWithMapValue(source())); out = in.getParcelableExtra(null); sink(out); // $ hasValueFlow } { // "android.content;Intent;true;getSerializableExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value" Serializable out = null; - Intent in = (Intent)newWithIntent_extrasDefault(newWithMapValueDefault(source())); + Intent in = (Intent)newWithIntent_extras(newBundleWithMapValue(source())); out = in.getSerializableExtra(null); sink(out); // $ hasValueFlow } { // "android.content;Intent;true;getStringArrayExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value" String[] out = null; - Intent in = (Intent)newWithIntent_extrasDefault(newWithMapValueDefault(source())); + Intent in = (Intent)newWithIntent_extras(newBundleWithMapValue(source())); out = in.getStringArrayExtra(null); sink(out); // $ hasValueFlow } { // "android.content;Intent;true;getStringArrayListExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value" ArrayList out = null; - Intent in = (Intent)newWithIntent_extrasDefault(newWithMapValueDefault(source())); + Intent in = (Intent)newWithIntent_extras(newBundleWithMapValue(source())); out = in.getStringArrayListExtra(null); sink(out); // $ hasValueFlow } { // "android.content;Intent;true;getStringExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value" String out = null; - Intent in = (Intent)newWithIntent_extrasDefault(newWithMapValueDefault(source())); + Intent in = (Intent)newWithIntent_extras(newBundleWithMapValue(source())); out = in.getStringExtra(null); sink(out); // $ hasValueFlow } @@ -166,14 +168,14 @@ public class Test { Intent out = null; String in = (String)source(); out.putCharSequenceArrayListExtra(in, null); - sink(getMapKeyDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + sink(getMapKey(getIntent_extras(out))); // $ hasValueFlow } { // "android.content;Intent;true;putCharSequenceArrayListExtra;;;Argument[1];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value" Intent out = null; ArrayList in = (ArrayList)source(); out.putCharSequenceArrayListExtra(null, in); - sink(getMapValueDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + sink(getMapValue(getIntent_extras(out))); // $ hasValueFlow } { // "android.content;Intent;true;putExtra;;;Argument[-1];ReturnValue;value" @@ -348,336 +350,336 @@ public class Test { Intent out = null; String in = (String)source(); out.putExtra(in, false); - sink(getMapKeyDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + sink(getMapKey(getIntent_extras(out))); // $ hasValueFlow } { // "android.content;Intent;true;putExtra;;;Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value" Intent out = null; String in = (String)source(); out.putExtra(in, 0L); - sink(getMapKeyDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + sink(getMapKey(getIntent_extras(out))); // $ hasValueFlow } { // "android.content;Intent;true;putExtra;;;Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value" Intent out = null; String in = (String)source(); out.putExtra(in, 0.0f); - sink(getMapKeyDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + sink(getMapKey(getIntent_extras(out))); // $ hasValueFlow } { // "android.content;Intent;true;putExtra;;;Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value" Intent out = null; String in = (String)source(); out.putExtra(in, 0.0); - sink(getMapKeyDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + sink(getMapKey(getIntent_extras(out))); // $ hasValueFlow } { // "android.content;Intent;true;putExtra;;;Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value" Intent out = null; String in = (String)source(); out.putExtra(in, 0); - sink(getMapKeyDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + sink(getMapKey(getIntent_extras(out))); // $ hasValueFlow } { // "android.content;Intent;true;putExtra;;;Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value" Intent out = null; String in = (String)source(); out.putExtra(in, (short[])null); - sink(getMapKeyDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + sink(getMapKey(getIntent_extras(out))); // $ hasValueFlow } { // "android.content;Intent;true;putExtra;;;Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value" Intent out = null; String in = (String)source(); out.putExtra(in, (short)0); - sink(getMapKeyDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + sink(getMapKey(getIntent_extras(out))); // $ hasValueFlow } { // "android.content;Intent;true;putExtra;;;Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value" Intent out = null; String in = (String)source(); out.putExtra(in, (long[])null); - sink(getMapKeyDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + sink(getMapKey(getIntent_extras(out))); // $ hasValueFlow } { // "android.content;Intent;true;putExtra;;;Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value" Intent out = null; String in = (String)source(); out.putExtra(in, (int[])null); - sink(getMapKeyDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + sink(getMapKey(getIntent_extras(out))); // $ hasValueFlow } { // "android.content;Intent;true;putExtra;;;Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value" Intent out = null; String in = (String)source(); out.putExtra(in, (float[])null); - sink(getMapKeyDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + sink(getMapKey(getIntent_extras(out))); // $ hasValueFlow } { // "android.content;Intent;true;putExtra;;;Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value" Intent out = null; String in = (String)source(); out.putExtra(in, (double[])null); - sink(getMapKeyDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + sink(getMapKey(getIntent_extras(out))); // $ hasValueFlow } { // "android.content;Intent;true;putExtra;;;Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value" Intent out = null; String in = (String)source(); out.putExtra(in, (char[])null); - sink(getMapKeyDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + sink(getMapKey(getIntent_extras(out))); // $ hasValueFlow } { // "android.content;Intent;true;putExtra;;;Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value" Intent out = null; String in = (String)source(); out.putExtra(in, (byte[])null); - sink(getMapKeyDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + sink(getMapKey(getIntent_extras(out))); // $ hasValueFlow } { // "android.content;Intent;true;putExtra;;;Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value" Intent out = null; String in = (String)source(); out.putExtra(in, (byte)0); - sink(getMapKeyDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + sink(getMapKey(getIntent_extras(out))); // $ hasValueFlow } { // "android.content;Intent;true;putExtra;;;Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value" Intent out = null; String in = (String)source(); out.putExtra(in, (boolean[])null); - sink(getMapKeyDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + sink(getMapKey(getIntent_extras(out))); // $ hasValueFlow } { // "android.content;Intent;true;putExtra;;;Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value" Intent out = null; String in = (String)source(); out.putExtra(in, (String[])null); - sink(getMapKeyDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + sink(getMapKey(getIntent_extras(out))); // $ hasValueFlow } { // "android.content;Intent;true;putExtra;;;Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value" Intent out = null; String in = (String)source(); out.putExtra(in, (String)null); - sink(getMapKeyDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + sink(getMapKey(getIntent_extras(out))); // $ hasValueFlow } { // "android.content;Intent;true;putExtra;;;Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value" Intent out = null; String in = (String)source(); out.putExtra(in, (Serializable)null); - sink(getMapKeyDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + sink(getMapKey(getIntent_extras(out))); // $ hasValueFlow } { // "android.content;Intent;true;putExtra;;;Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value" Intent out = null; String in = (String)source(); out.putExtra(in, (Parcelable[])null); - sink(getMapKeyDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + sink(getMapKey(getIntent_extras(out))); // $ hasValueFlow } { // "android.content;Intent;true;putExtra;;;Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value" Intent out = null; String in = (String)source(); out.putExtra(in, (Parcelable)null); - sink(getMapKeyDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + sink(getMapKey(getIntent_extras(out))); // $ hasValueFlow } { // "android.content;Intent;true;putExtra;;;Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value" Intent out = null; String in = (String)source(); out.putExtra(in, (CharSequence[])null); - sink(getMapKeyDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + sink(getMapKey(getIntent_extras(out))); // $ hasValueFlow } { // "android.content;Intent;true;putExtra;;;Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value" Intent out = null; String in = (String)source(); out.putExtra(in, (CharSequence)null); - sink(getMapKeyDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + sink(getMapKey(getIntent_extras(out))); // $ hasValueFlow } { // "android.content;Intent;true;putExtra;;;Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value" Intent out = null; String in = (String)source(); out.putExtra(in, (Bundle)null); - sink(getMapKeyDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + sink(getMapKey(getIntent_extras(out))); // $ hasValueFlow } { // "android.content;Intent;true;putExtra;;;Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value" Intent out = null; String in = (String)source(); out.putExtra(in, '\0'); - sink(getMapKeyDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + sink(getMapKey(getIntent_extras(out))); // $ hasValueFlow } { // "android.content;Intent;true;putExtra;;;Argument[1];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value" Intent out = null; short[] in = (short[])source(); out.putExtra((String)null, in); - sink(getMapValueDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + sink(getMapValue(getIntent_extras(out))); // $ hasValueFlow } { // "android.content;Intent;true;putExtra;;;Argument[1];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value" Intent out = null; short in = (short)source(); out.putExtra((String)null, in); - sink(getMapValueDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + sink(getMapValue(getIntent_extras(out))); // $ hasValueFlow } { // "android.content;Intent;true;putExtra;;;Argument[1];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value" Intent out = null; long[] in = (long[])source(); out.putExtra((String)null, in); - sink(getMapValueDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + sink(getMapValue(getIntent_extras(out))); // $ hasValueFlow } { // "android.content;Intent;true;putExtra;;;Argument[1];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value" Intent out = null; long in = (long)source(); out.putExtra((String)null, in); - sink(getMapValueDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + sink(getMapValue(getIntent_extras(out))); // $ hasValueFlow } { // "android.content;Intent;true;putExtra;;;Argument[1];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value" Intent out = null; int[] in = (int[])source(); out.putExtra((String)null, in); - sink(getMapValueDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + sink(getMapValue(getIntent_extras(out))); // $ hasValueFlow } { // "android.content;Intent;true;putExtra;;;Argument[1];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value" Intent out = null; int in = (int)source(); out.putExtra((String)null, in); - sink(getMapValueDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + sink(getMapValue(getIntent_extras(out))); // $ hasValueFlow } { // "android.content;Intent;true;putExtra;;;Argument[1];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value" Intent out = null; float[] in = (float[])source(); out.putExtra((String)null, in); - sink(getMapValueDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + sink(getMapValue(getIntent_extras(out))); // $ hasValueFlow } { // "android.content;Intent;true;putExtra;;;Argument[1];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value" Intent out = null; float in = (float)source(); out.putExtra((String)null, in); - sink(getMapValueDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + sink(getMapValue(getIntent_extras(out))); // $ hasValueFlow } { // "android.content;Intent;true;putExtra;;;Argument[1];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value" Intent out = null; double[] in = (double[])source(); out.putExtra((String)null, in); - sink(getMapValueDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + sink(getMapValue(getIntent_extras(out))); // $ hasValueFlow } { // "android.content;Intent;true;putExtra;;;Argument[1];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value" Intent out = null; double in = (double)source(); out.putExtra((String)null, in); - sink(getMapValueDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + sink(getMapValue(getIntent_extras(out))); // $ hasValueFlow } { // "android.content;Intent;true;putExtra;;;Argument[1];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value" Intent out = null; char[] in = (char[])source(); out.putExtra((String)null, in); - sink(getMapValueDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + sink(getMapValue(getIntent_extras(out))); // $ hasValueFlow } { // "android.content;Intent;true;putExtra;;;Argument[1];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value" Intent out = null; char in = (char)source(); out.putExtra((String)null, in); - sink(getMapValueDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + sink(getMapValue(getIntent_extras(out))); // $ hasValueFlow } { // "android.content;Intent;true;putExtra;;;Argument[1];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value" Intent out = null; byte[] in = (byte[])source(); out.putExtra((String)null, in); - sink(getMapValueDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + sink(getMapValue(getIntent_extras(out))); // $ hasValueFlow } { // "android.content;Intent;true;putExtra;;;Argument[1];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value" Intent out = null; byte in = (byte)source(); out.putExtra((String)null, in); - sink(getMapValueDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + sink(getMapValue(getIntent_extras(out))); // $ hasValueFlow } { // "android.content;Intent;true;putExtra;;;Argument[1];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value" Intent out = null; boolean[] in = (boolean[])source(); out.putExtra((String)null, in); - sink(getMapValueDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + sink(getMapValue(getIntent_extras(out))); // $ hasValueFlow } { // "android.content;Intent;true;putExtra;;;Argument[1];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value" Intent out = null; boolean in = (boolean)source(); out.putExtra((String)null, in); - sink(getMapValueDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + sink(getMapValue(getIntent_extras(out))); // $ hasValueFlow } { // "android.content;Intent;true;putExtra;;;Argument[1];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value" Intent out = null; String[] in = (String[])source(); out.putExtra((String)null, in); - sink(getMapValueDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + sink(getMapValue(getIntent_extras(out))); // $ hasValueFlow } { // "android.content;Intent;true;putExtra;;;Argument[1];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value" Intent out = null; String in = (String)source(); out.putExtra((String)null, in); - sink(getMapValueDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + sink(getMapValue(getIntent_extras(out))); // $ hasValueFlow } { // "android.content;Intent;true;putExtra;;;Argument[1];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value" Intent out = null; Serializable in = (Serializable)source(); out.putExtra((String)null, in); - sink(getMapValueDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + sink(getMapValue(getIntent_extras(out))); // $ hasValueFlow } { // "android.content;Intent;true;putExtra;;;Argument[1];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value" Intent out = null; Parcelable[] in = (Parcelable[])source(); out.putExtra((String)null, in); - sink(getMapValueDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + sink(getMapValue(getIntent_extras(out))); // $ hasValueFlow } { // "android.content;Intent;true;putExtra;;;Argument[1];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value" Intent out = null; Parcelable in = (Parcelable)source(); out.putExtra((String)null, in); - sink(getMapValueDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + sink(getMapValue(getIntent_extras(out))); // $ hasValueFlow } { // "android.content;Intent;true;putExtra;;;Argument[1];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value" Intent out = null; CharSequence[] in = (CharSequence[])source(); out.putExtra((String)null, in); - sink(getMapValueDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + sink(getMapValue(getIntent_extras(out))); // $ hasValueFlow } { // "android.content;Intent;true;putExtra;;;Argument[1];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value" Intent out = null; CharSequence in = (CharSequence)source(); out.putExtra((String)null, in); - sink(getMapValueDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + sink(getMapValue(getIntent_extras(out))); // $ hasValueFlow } { // "android.content;Intent;true;putExtra;;;Argument[1];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value" Intent out = null; Bundle in = (Bundle)source(); out.putExtra((String)null, in); - sink(getMapValueDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + sink(getMapValue(getIntent_extras(out))); // $ hasValueFlow } { // "android.content;Intent;true;putExtras;(Bundle);;Argument[-1];ReturnValue;value" @@ -689,16 +691,16 @@ public class Test { { // "android.content;Intent;true;putExtras;(Bundle);;MapKey of Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value" Intent out = null; - Bundle in = (Bundle)newWithMapKeyDefault(source()); + Bundle in = (Bundle)newBundleWithMapKey(source()); out.putExtras(in); - sink(getMapKeyDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + sink(getMapKey(getIntent_extras(out))); // $ hasValueFlow } { // "android.content;Intent;true;putExtras;(Bundle);;MapValue of Argument[0];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value" Intent out = null; - Bundle in = (Bundle)newWithMapValueDefault(source()); + Bundle in = (Bundle)newBundleWithMapValue(source()); out.putExtras(in); - sink(getMapValueDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + sink(getMapValue(getIntent_extras(out))); // $ hasValueFlow } { // "android.content;Intent;true;putExtras;(Intent);;Argument[-1];ReturnValue;value" @@ -710,16 +712,16 @@ public class Test { { // "android.content;Intent;true;putExtras;(Intent);;MapKey of SyntheticField[android.content.Intent.extras] of Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value" Intent out = null; - Intent in = (Intent)newWithIntent_extrasDefault(newWithMapKeyDefault(source())); + Intent in = (Intent)newWithIntent_extras(newBundleWithMapKey(source())); out.putExtras(in); - sink(getMapKeyDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + sink(getMapKey(getIntent_extras(out))); // $ hasValueFlow } { // "android.content;Intent;true;putExtras;(Intent);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[0];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value" Intent out = null; - Intent in = (Intent)newWithIntent_extrasDefault(newWithMapValueDefault(source())); + Intent in = (Intent)newWithIntent_extras(newBundleWithMapValue(source())); out.putExtras(in); - sink(getMapValueDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + sink(getMapValue(getIntent_extras(out))); // $ hasValueFlow } { // "android.content;Intent;true;putIntegerArrayListExtra;;;Argument[-1];ReturnValue;value" @@ -733,7 +735,7 @@ public class Test { Intent out = null; String in = (String)source(); out.putIntegerArrayListExtra(in, null); - sink(getMapKeyDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + sink(getMapKey(getIntent_extras(out))); // $ hasValueFlow } { // "android.content;Intent;true;putParcelableArrayListExtra;;;Argument[-1];ReturnValue;value" @@ -747,14 +749,14 @@ public class Test { Intent out = null; String in = (String)source(); out.putParcelableArrayListExtra(in, null); - sink(getMapKeyDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + sink(getMapKey(getIntent_extras(out))); // $ hasValueFlow } { // "android.content;Intent;true;putParcelableArrayListExtra;;;Argument[1];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value" Intent out = null; ArrayList in = (ArrayList)source(); out.putParcelableArrayListExtra(null, in); - sink(getMapValueDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + sink(getMapValue(getIntent_extras(out))); // $ hasValueFlow } { // "android.content;Intent;true;putStringArrayListExtra;;;Argument[-1];ReturnValue;value" @@ -768,14 +770,14 @@ public class Test { Intent out = null; String in = (String)source(); out.putStringArrayListExtra(in, null); - sink(getMapKeyDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + sink(getMapKey(getIntent_extras(out))); // $ hasValueFlow } { // "android.content;Intent;true;putStringArrayListExtra;;;Argument[1];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value" Intent out = null; ArrayList in = (ArrayList)source(); out.putStringArrayListExtra(null, in); - sink(getMapValueDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + sink(getMapValue(getIntent_extras(out))); // $ hasValueFlow } { // "android.content;Intent;true;replaceExtras;(Bundle);;Argument[-1];ReturnValue;value" @@ -787,16 +789,16 @@ public class Test { { // "android.content;Intent;true;replaceExtras;(Bundle);;MapKey of Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value" Intent out = null; - Bundle in = (Bundle)newWithMapKeyDefault(source()); + Bundle in = (Bundle)newBundleWithMapKey(source()); out.replaceExtras(in); - sink(getMapKeyDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + sink(getMapKey(getIntent_extras(out))); // $ hasValueFlow } { // "android.content;Intent;true;replaceExtras;(Bundle);;MapValue of Argument[0];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value" Intent out = null; - Bundle in = (Bundle)newWithMapValueDefault(source()); + Bundle in = (Bundle)newBundleWithMapValue(source()); out.replaceExtras(in); - sink(getMapValueDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + sink(getMapValue(getIntent_extras(out))); // $ hasValueFlow } { // "android.content;Intent;true;replaceExtras;(Intent);;Argument[-1];ReturnValue;value" @@ -808,16 +810,16 @@ public class Test { { // "android.content;Intent;true;replaceExtras;(Intent);;MapKey of SyntheticField[android.content.Intent.extras] of Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value" Intent out = null; - Intent in = (Intent)newWithIntent_extrasDefault(newWithMapKeyDefault(source())); + Intent in = (Intent)newWithIntent_extras(newBundleWithMapKey(source())); out.replaceExtras(in); - sink(getMapKeyDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + sink(getMapKey(getIntent_extras(out))); // $ hasValueFlow } { // "android.content;Intent;true;replaceExtras;(Intent);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[0];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value" Intent out = null; - Intent in = (Intent)newWithIntent_extrasDefault(newWithMapValueDefault(source())); + Intent in = (Intent)newWithIntent_extras(newBundleWithMapValue(source())); out.replaceExtras(in); - sink(getMapValueDefault(getIntent_extrasDefault(out))); // $ hasValueFlow + sink(getMapValue(getIntent_extras(out))); // $ hasValueFlow } { // "android.content;Intent;true;setAction;;;Argument[-1];ReturnValue;value" @@ -920,14 +922,14 @@ public class Test { { // "android.os;BaseBundle;true;get;(String);;MapValue of Argument[-1];ReturnValue;value" Object out = null; - BaseBundle in = (BaseBundle)newWithMapValueDefault(source()); + BaseBundle in = (BaseBundle)newBundleWithMapValue(source()); out = in.get(null); sink(out); // $ hasValueFlow } { // "android.os;BaseBundle;true;getString;(String);;MapValue of Argument[-1];ReturnValue;value" String out = null; - BaseBundle in = (BaseBundle)newWithMapValueDefault(source()); + BaseBundle in = (BaseBundle)newBundleWithMapValue(source()); out = in.getString(null); sink(out); // $ hasValueFlow } @@ -942,210 +944,210 @@ public class Test { { // "android.os;BaseBundle;true;getString;(String,String);;MapValue of Argument[-1];ReturnValue;value" String out = null; - BaseBundle in = (BaseBundle)newWithMapValueDefault(source()); + BaseBundle in = (BaseBundle)newBundleWithMapValue(source()); out = in.getString(null, null); sink(out); // $ hasValueFlow } { // "android.os;BaseBundle;true;getStringArray;(String);;MapValue of Argument[-1];ReturnValue;value" String[] out = null; - BaseBundle in = (BaseBundle)newWithMapValueDefault(source()); + BaseBundle in = (BaseBundle)newBundleWithMapValue(source()); out = in.getStringArray(null); sink(out); // $ hasValueFlow } { // "android.os;BaseBundle;true;keySet;();;MapKey of Argument[-1];Element of ReturnValue;value" Set out = null; - BaseBundle in = (BaseBundle)newWithMapKeyDefault(source()); + BaseBundle in = (BaseBundle)newBundleWithMapKey(source()); out = in.keySet(); sink(getElement(out)); // $ hasValueFlow } { // "android.os;BaseBundle;true;putAll;(PersistableBundle);;MapKey of Argument[0];MapKey of Argument[-1];value" BaseBundle out = null; - PersistableBundle in = (PersistableBundle)newWithMapKeyDefault(source()); + PersistableBundle in = newPersistableBundleWithMapKey(source()); out.putAll(in); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "android.os;BaseBundle;true;putAll;(PersistableBundle);;MapValue of Argument[0];MapValue of Argument[-1];value" BaseBundle out = null; - PersistableBundle in = (PersistableBundle)newWithMapValueDefault(source()); + PersistableBundle in = newPersistableBundleWithMapValue(source()); out.putAll(in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "android.os;BaseBundle;true;putBoolean;;;Argument[0];MapKey of Argument[-1];value" BaseBundle out = null; String in = (String)source(); out.putBoolean(in, false); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "android.os;BaseBundle;true;putBooleanArray;;;Argument[0];MapKey of Argument[-1];value" BaseBundle out = null; String in = (String)source(); out.putBooleanArray(in, null); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "android.os;BaseBundle;true;putDouble;;;Argument[0];MapKey of Argument[-1];value" BaseBundle out = null; String in = (String)source(); out.putDouble(in, 0.0); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "android.os;BaseBundle;true;putDoubleArray;;;Argument[0];MapKey of Argument[-1];value" BaseBundle out = null; String in = (String)source(); out.putDoubleArray(in, null); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "android.os;BaseBundle;true;putInt;;;Argument[0];MapKey of Argument[-1];value" BaseBundle out = null; String in = (String)source(); out.putInt(in, 0); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "android.os;BaseBundle;true;putIntArray;;;Argument[0];MapKey of Argument[-1];value" BaseBundle out = null; String in = (String)source(); out.putIntArray(in, null); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "android.os;BaseBundle;true;putLong;;;Argument[0];MapKey of Argument[-1];value" BaseBundle out = null; String in = (String)source(); out.putLong(in, 0L); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "android.os;BaseBundle;true;putLongArray;;;Argument[0];MapKey of Argument[-1];value" BaseBundle out = null; String in = (String)source(); out.putLongArray(in, null); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "android.os;BaseBundle;true;putString;;;Argument[0];MapKey of Argument[-1];value" BaseBundle out = null; String in = (String)source(); out.putString(in, null); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "android.os;BaseBundle;true;putString;;;Argument[1];MapValue of Argument[-1];value" BaseBundle out = null; String in = (String)source(); out.putString(null, in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "android.os;BaseBundle;true;putStringArray;;;Argument[0];MapKey of Argument[-1];value" BaseBundle out = null; String in = (String)source(); out.putStringArray(in, null); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "android.os;BaseBundle;true;putStringArray;;;Argument[1];MapValue of Argument[-1];value" BaseBundle out = null; String[] in = (String[])source(); out.putStringArray(null, in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "android.os;Bundle;false;Bundle;(Bundle);;MapKey of Argument[0];MapKey of Argument[-1];value" Bundle out = null; - Bundle in = (Bundle)newWithMapKeyDefault(source()); + Bundle in = (Bundle)newBundleWithMapKey(source()); out = new Bundle(in); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "android.os;Bundle;false;Bundle;(Bundle);;MapValue of Argument[0];MapValue of Argument[-1];value" Bundle out = null; - Bundle in = (Bundle)newWithMapValueDefault(source()); + Bundle in = (Bundle)newBundleWithMapValue(source()); out = new Bundle(in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "android.os;Bundle;false;Bundle;(PersistableBundle);;MapKey of Argument[0];MapKey of Argument[-1];value" Bundle out = null; - PersistableBundle in = (PersistableBundle)newWithMapKeyDefault(source()); + PersistableBundle in = newPersistableBundleWithMapKey(source()); out = new Bundle(in); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "android.os;Bundle;false;Bundle;(PersistableBundle);;MapValue of Argument[0];MapValue of Argument[-1];value" Bundle out = null; - PersistableBundle in = (PersistableBundle)newWithMapValueDefault(source()); + PersistableBundle in = newPersistableBundleWithMapValue(source()); out = new Bundle(in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "android.os;Bundle;true;clone;();;MapKey of Argument[-1];MapKey of ReturnValue;value" Object out = null; - Bundle in = (Bundle)newWithMapKeyDefault(source()); + Bundle in = (Bundle)newBundleWithMapKey(source()); out = in.clone(); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey((Bundle)out)); // $ hasValueFlow } { // "android.os;Bundle;true;clone;();;MapValue of Argument[-1];MapValue of ReturnValue;value" Object out = null; - Bundle in = (Bundle)newWithMapValueDefault(source()); + Bundle in = (Bundle)newBundleWithMapValue(source()); out = in.clone(); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue((Bundle)out)); // $ hasValueFlow } { // "android.os;Bundle;true;deepCopy;();;MapKey of Argument[-1];MapKey of ReturnValue;value" Bundle out = null; - Bundle in = (Bundle)newWithMapKeyDefault(source()); + Bundle in = (Bundle)newBundleWithMapKey(source()); out = in.deepCopy(); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "android.os;Bundle;true;deepCopy;();;MapValue of Argument[-1];MapValue of ReturnValue;value" Bundle out = null; - Bundle in = (Bundle)newWithMapValueDefault(source()); + Bundle in = (Bundle)newBundleWithMapValue(source()); out = in.deepCopy(); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "android.os;Bundle;true;getBinder;(String);;MapValue of Argument[-1];ReturnValue;value" IBinder out = null; - Bundle in = (Bundle)newWithMapValueDefault(source()); + Bundle in = (Bundle)newBundleWithMapValue(source()); out = in.getBinder(null); sink(out); // $ hasValueFlow } { // "android.os;Bundle;true;getBundle;(String);;MapValue of Argument[-1];ReturnValue;value" Bundle out = null; - Bundle in = (Bundle)newWithMapValueDefault(source()); + Bundle in = (Bundle)newBundleWithMapValue(source()); out = in.getBundle(null); sink(out); // $ hasValueFlow } { // "android.os;Bundle;true;getByteArray;(String);;MapValue of Argument[-1];ReturnValue;value" byte[] out = null; - Bundle in = (Bundle)newWithMapValueDefault(source()); + Bundle in = (Bundle)newBundleWithMapValue(source()); out = in.getByteArray(null); sink(out); // $ hasValueFlow } { // "android.os;Bundle;true;getCharArray;(String);;MapValue of Argument[-1];ReturnValue;value" char[] out = null; - Bundle in = (Bundle)newWithMapValueDefault(source()); + Bundle in = (Bundle)newBundleWithMapValue(source()); out = in.getCharArray(null); sink(out); // $ hasValueFlow } { // "android.os;Bundle;true;getCharSequence;(String);;MapValue of Argument[-1];ReturnValue;value" CharSequence out = null; - Bundle in = (Bundle)newWithMapValueDefault(source()); + Bundle in = (Bundle)newBundleWithMapValue(source()); out = in.getCharSequence(null); sink(out); // $ hasValueFlow } @@ -1160,338 +1162,338 @@ public class Test { { // "android.os;Bundle;true;getCharSequence;(String,CharSequence);;MapValue of Argument[-1];ReturnValue;value" CharSequence out = null; - Bundle in = (Bundle)newWithMapValueDefault(source()); + Bundle in = (Bundle)newBundleWithMapValue(source()); out = in.getCharSequence(null, null); sink(out); // $ hasValueFlow } { // "android.os;Bundle;true;getCharSequenceArray;(String);;MapValue of Argument[-1];ReturnValue;value" CharSequence[] out = null; - Bundle in = (Bundle)newWithMapValueDefault(source()); + Bundle in = (Bundle)newBundleWithMapValue(source()); out = in.getCharSequenceArray(null); sink(out); // $ hasValueFlow } { // "android.os;Bundle;true;getCharSequenceArrayList;(String);;MapValue of Argument[-1];ReturnValue;value" ArrayList out = null; - Bundle in = (Bundle)newWithMapValueDefault(source()); + Bundle in = (Bundle)newBundleWithMapValue(source()); out = in.getCharSequenceArrayList(null); sink(out); // $ hasValueFlow } { // "android.os;Bundle;true;getParcelable;(String);;MapValue of Argument[-1];ReturnValue;value" Parcelable out = null; - Bundle in = (Bundle)newWithMapValueDefault(source()); + Bundle in = (Bundle)newBundleWithMapValue(source()); out = in.getParcelable(null); sink(out); // $ hasValueFlow } { // "android.os;Bundle;true;getParcelableArray;(String);;MapValue of Argument[-1];ReturnValue;value" Parcelable[] out = null; - Bundle in = (Bundle)newWithMapValueDefault(source()); + Bundle in = (Bundle)newBundleWithMapValue(source()); out = in.getParcelableArray(null); sink(out); // $ hasValueFlow } { // "android.os;Bundle;true;getParcelableArrayList;(String);;MapValue of Argument[-1];ReturnValue;value" ArrayList out = null; - Bundle in = (Bundle)newWithMapValueDefault(source()); + Bundle in = (Bundle)newBundleWithMapValue(source()); out = in.getParcelableArrayList(null); sink(out); // $ hasValueFlow } { // "android.os;Bundle;true;getSerializable;(String);;MapValue of Argument[-1];ReturnValue;value" Serializable out = null; - Bundle in = (Bundle)newWithMapValueDefault(source()); + Bundle in = (Bundle)newBundleWithMapValue(source()); out = in.getSerializable(null); sink(out); // $ hasValueFlow } { // "android.os;Bundle;true;getSparseParcelableArray;(String);;MapValue of Argument[-1];ReturnValue;value" SparseArray out = null; - Bundle in = (Bundle)newWithMapValueDefault(source()); + Bundle in = (Bundle)newBundleWithMapValue(source()); out = in.getSparseParcelableArray(null); sink(out); // $ hasValueFlow } { // "android.os;Bundle;true;getStringArrayList;(String);;MapValue of Argument[-1];ReturnValue;value" ArrayList out = null; - Bundle in = (Bundle)newWithMapValueDefault(source()); + Bundle in = (Bundle)newBundleWithMapValue(source()); out = in.getStringArrayList(null); sink(out); // $ hasValueFlow } { // "android.os;Bundle;true;putAll;(Bundle);;MapKey of Argument[0];MapKey of Argument[-1];value" Bundle out = null; - Bundle in = (Bundle)newWithMapKeyDefault(source()); + Bundle in = (Bundle)newBundleWithMapKey(source()); out.putAll(in); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "android.os;Bundle;true;putAll;(Bundle);;MapValue of Argument[0];MapValue of Argument[-1];value" Bundle out = null; - Bundle in = (Bundle)newWithMapValueDefault(source()); + Bundle in = (Bundle)newBundleWithMapValue(source()); out.putAll(in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "android.os;Bundle;true;putBinder;;;Argument[0];MapKey of Argument[-1];value" Bundle out = null; String in = (String)source(); out.putBinder(in, null); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "android.os;Bundle;true;putBinder;;;Argument[1];MapValue of Argument[-1];value" Bundle out = null; IBinder in = (IBinder)source(); out.putBinder(null, in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "android.os;Bundle;true;putBundle;;;Argument[0];MapKey of Argument[-1];value" Bundle out = null; String in = (String)source(); out.putBundle(in, null); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "android.os;Bundle;true;putBundle;;;Argument[1];MapValue of Argument[-1];value" Bundle out = null; Bundle in = (Bundle)source(); out.putBundle(null, in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "android.os;Bundle;true;putByte;;;Argument[0];MapKey of Argument[-1];value" Bundle out = null; String in = (String)source(); out.putByte(in, (byte)0); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "android.os;Bundle;true;putByteArray;;;Argument[0];MapKey of Argument[-1];value" Bundle out = null; String in = (String)source(); out.putByteArray(in, null); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "android.os;Bundle;true;putByteArray;;;Argument[1];MapValue of Argument[-1];value" Bundle out = null; byte[] in = (byte[])source(); out.putByteArray(null, in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "android.os;Bundle;true;putChar;;;Argument[0];MapKey of Argument[-1];value" Bundle out = null; String in = (String)source(); out.putChar(in, '\0'); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "android.os;Bundle;true;putCharArray;;;Argument[0];MapKey of Argument[-1];value" Bundle out = null; String in = (String)source(); out.putCharArray(in, null); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "android.os;Bundle;true;putCharArray;;;Argument[1];MapValue of Argument[-1];value" Bundle out = null; char[] in = (char[])source(); out.putCharArray(null, in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "android.os;Bundle;true;putCharSequence;;;Argument[0];MapKey of Argument[-1];value" Bundle out = null; String in = (String)source(); out.putCharSequence(in, null); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "android.os;Bundle;true;putCharSequence;;;Argument[1];MapValue of Argument[-1];value" Bundle out = null; CharSequence in = (CharSequence)source(); out.putCharSequence(null, in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "android.os;Bundle;true;putCharSequenceArray;;;Argument[0];MapKey of Argument[-1];value" Bundle out = null; String in = (String)source(); out.putCharSequenceArray(in, null); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "android.os;Bundle;true;putCharSequenceArray;;;Argument[1];MapValue of Argument[-1];value" Bundle out = null; CharSequence[] in = (CharSequence[])source(); out.putCharSequenceArray(null, in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "android.os;Bundle;true;putCharSequenceArrayList;;;Argument[0];MapKey of Argument[-1];value" Bundle out = null; String in = (String)source(); out.putCharSequenceArrayList(in, null); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "android.os;Bundle;true;putCharSequenceArrayList;;;Argument[1];MapValue of Argument[-1];value" Bundle out = null; ArrayList in = (ArrayList)source(); out.putCharSequenceArrayList(null, in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "android.os;Bundle;true;putFloat;;;Argument[0];MapKey of Argument[-1];value" Bundle out = null; String in = (String)source(); out.putFloat(in, 0.0f); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "android.os;Bundle;true;putFloatArray;;;Argument[0];MapKey of Argument[-1];value" Bundle out = null; String in = (String)source(); out.putFloatArray(in, null); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "android.os;Bundle;true;putIntegerArrayList;;;Argument[0];MapKey of Argument[-1];value" Bundle out = null; String in = (String)source(); out.putIntegerArrayList(in, null); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "android.os;Bundle;true;putParcelable;;;Argument[0];MapKey of Argument[-1];value" Bundle out = null; String in = (String)source(); out.putParcelable(in, null); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "android.os;Bundle;true;putParcelable;;;Argument[1];MapValue of Argument[-1];value" Bundle out = null; Parcelable in = (Parcelable)source(); out.putParcelable(null, in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "android.os;Bundle;true;putParcelableArray;;;Argument[0];MapKey of Argument[-1];value" Bundle out = null; String in = (String)source(); out.putParcelableArray(in, null); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "android.os;Bundle;true;putParcelableArray;;;Argument[1];MapValue of Argument[-1];value" Bundle out = null; Parcelable[] in = (Parcelable[])source(); out.putParcelableArray(null, in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "android.os;Bundle;true;putParcelableArrayList;;;Argument[0];MapKey of Argument[-1];value" Bundle out = null; String in = (String)source(); out.putParcelableArrayList(in, null); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "android.os;Bundle;true;putParcelableArrayList;;;Argument[1];MapValue of Argument[-1];value" Bundle out = null; ArrayList in = (ArrayList)source(); out.putParcelableArrayList(null, in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "android.os;Bundle;true;putSerializable;;;Argument[0];MapKey of Argument[-1];value" Bundle out = null; String in = (String)source(); out.putSerializable(in, null); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "android.os;Bundle;true;putSerializable;;;Argument[1];MapValue of Argument[-1];value" Bundle out = null; Serializable in = (Serializable)source(); out.putSerializable(null, in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "android.os;Bundle;true;putShort;;;Argument[0];MapKey of Argument[-1];value" Bundle out = null; String in = (String)source(); out.putShort(in, (short)0); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "android.os;Bundle;true;putShortArray;;;Argument[0];MapKey of Argument[-1];value" Bundle out = null; String in = (String)source(); out.putShortArray(in, null); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "android.os;Bundle;true;putSize;;;Argument[0];MapKey of Argument[-1];value" Bundle out = null; String in = (String)source(); out.putSize(in, null); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "android.os;Bundle;true;putSizeF;;;Argument[0];MapKey of Argument[-1];value" Bundle out = null; String in = (String)source(); out.putSizeF(in, null); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "android.os;Bundle;true;putSparseParcelableArray;;;Argument[0];MapKey of Argument[-1];value" Bundle out = null; String in = (String)source(); out.putSparseParcelableArray(in, null); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "android.os;Bundle;true;putSparseParcelableArray;;;Argument[1];MapValue of Argument[-1];value" Bundle out = null; SparseArray in = (SparseArray)source(); out.putSparseParcelableArray(null, in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "android.os;Bundle;true;putStringArrayList;;;Argument[0];MapKey of Argument[-1];value" Bundle out = null; String in = (String)source(); out.putStringArrayList(in, null); - sink(getMapKeyDefault(out)); // $ hasValueFlow + sink(getMapKey(out)); // $ hasValueFlow } { // "android.os;Bundle;true;putStringArrayList;;;Argument[1];MapValue of Argument[-1];value" Bundle out = null; ArrayList in = (ArrayList)source(); out.putStringArrayList(null, in); - sink(getMapValueDefault(out)); // $ hasValueFlow + sink(getMapValue(out)); // $ hasValueFlow } { // "android.os;Bundle;true;readFromParcel;;;Argument[0];MapKey of Argument[-1];taint" Bundle out = null; Parcel in = (Parcel)source(); out.readFromParcel(in); - sink(getMapKeyDefault(out)); // $ hasTaintFlow + sink(getMapKey(out)); // $ hasTaintFlow } { // "android.os;Bundle;true;readFromParcel;;;Argument[0];MapValue of Argument[-1];taint" Bundle out = null; Parcel in = (Parcel)source(); out.readFromParcel(in); - sink(getMapValueDefault(out)); // $ hasTaintFlow + sink(getMapValue(out)); // $ hasTaintFlow } } diff --git a/java/ql/test/library-tests/frameworks/android/intent/test.ql b/java/ql/test/library-tests/frameworks/android/intent/test.ql index e89ac1ba290..d4bdcaf9335 100644 --- a/java/ql/test/library-tests/frameworks/android/intent/test.ql +++ b/java/ql/test/library-tests/frameworks/android/intent/test.ql @@ -6,12 +6,10 @@ class SummaryModelTest extends SummaryModelCsv { row = [ //"package;type;overrides;name;signature;ext;inputspec;outputspec;kind", - "generatedtest;Test;false;newWithMapKeyDefault;(Object);;Argument[0];MapKey of ReturnValue;value", - "generatedtest;Test;false;getMapKeyDefault;(Object);;MapKey of Argument[0];ReturnValue;value", - "generatedtest;Test;false;newWithMapValueDefault;(Object);;Argument[0];MapValue of ReturnValue;value", - "generatedtest;Test;false;getMapValueDefault;(Object);;MapValue of Argument[0];ReturnValue;value", - "generatedtest;Test;false;newWithIntent_extrasDefault;(Object);;Argument[0];SyntheticField[android.content.Intent.extras] of ReturnValue;value", - "generatedtest;Test;false;getIntent_extrasDefault;(Object);;SyntheticField[android.content.Intent.extras] of Argument[0];ReturnValue;value" + "generatedtest;Test;false;newBundleWithMapValue;(Object);;Argument[0];MapValue of ReturnValue;value", + "generatedtest;Test;false;newPersistableBundleWithMapValue;(Object);;Argument[0];MapValue of ReturnValue;value", + "generatedtest;Test;false;getMapValue;(BaseBundle);;MapValue of Argument[0];ReturnValue;value", + "generatedtest;Test;false;newWithIntent_extras;(Bundle);;Argument[0];SyntheticField[android.content.Intent.extras] of ReturnValue;value" ] } } From 0590e2a5fb48629301e9c83055e715f53aecaba5 Mon Sep 17 00:00:00 2001 From: Andrew Eisenberg Date: Tue, 5 Oct 2021 13:42:36 -0700 Subject: [PATCH 718/741] Ignore .codeql folder --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index 0951496d45c..bf37ce08333 100644 --- a/.gitignore +++ b/.gitignore @@ -24,3 +24,6 @@ /codeql/ csharp/extractor/Semmle.Extraction.CSharp.Driver/Properties/launchSettings.json + +# Avoid committing cached package components +.codeql From 57ef989a892531dcd4f9393e66d16dca21673561 Mon Sep 17 00:00:00 2001 From: Andrew Eisenberg Date: Tue, 5 Oct 2021 11:30:39 -0700 Subject: [PATCH 719/741] Fixes compile errors by moving files The two files moved in this commit are referenced from the javascript/lib qlpack, but they are located in the javascript/src qlpack. This causes compile errors when running compile-ish commands for javascript queries. Moving the files fixes it. --- javascript/ql/{src => lib}/Declarations/UnusedVariable.qll | 0 javascript/ql/{src => lib}/Expressions/DOMProperties.qll | 0 javascript/ql/{src => lib}/Expressions/ExprHasNoEffect.qll | 0 .../ql/{src => lib}/LanguageFeatures/UnusedIndexVariable.qll | 0 javascript/ql/src/Declarations/UnusedProperty.ql | 2 +- javascript/ql/src/Declarations/UnusedVariable.ql | 2 +- javascript/ql/src/Expressions/ExprHasNoEffect.ql | 2 +- javascript/ql/src/Expressions/SelfAssignment.ql | 2 +- javascript/ql/src/LanguageFeatures/UnusedIndexVariable.ql | 2 +- 9 files changed, 5 insertions(+), 5 deletions(-) rename javascript/ql/{src => lib}/Declarations/UnusedVariable.qll (100%) rename javascript/ql/{src => lib}/Expressions/DOMProperties.qll (100%) rename javascript/ql/{src => lib}/Expressions/ExprHasNoEffect.qll (100%) rename javascript/ql/{src => lib}/LanguageFeatures/UnusedIndexVariable.qll (100%) diff --git a/javascript/ql/src/Declarations/UnusedVariable.qll b/javascript/ql/lib/Declarations/UnusedVariable.qll similarity index 100% rename from javascript/ql/src/Declarations/UnusedVariable.qll rename to javascript/ql/lib/Declarations/UnusedVariable.qll diff --git a/javascript/ql/src/Expressions/DOMProperties.qll b/javascript/ql/lib/Expressions/DOMProperties.qll similarity index 100% rename from javascript/ql/src/Expressions/DOMProperties.qll rename to javascript/ql/lib/Expressions/DOMProperties.qll diff --git a/javascript/ql/src/Expressions/ExprHasNoEffect.qll b/javascript/ql/lib/Expressions/ExprHasNoEffect.qll similarity index 100% rename from javascript/ql/src/Expressions/ExprHasNoEffect.qll rename to javascript/ql/lib/Expressions/ExprHasNoEffect.qll diff --git a/javascript/ql/src/LanguageFeatures/UnusedIndexVariable.qll b/javascript/ql/lib/LanguageFeatures/UnusedIndexVariable.qll similarity index 100% rename from javascript/ql/src/LanguageFeatures/UnusedIndexVariable.qll rename to javascript/ql/lib/LanguageFeatures/UnusedIndexVariable.qll diff --git a/javascript/ql/src/Declarations/UnusedProperty.ql b/javascript/ql/src/Declarations/UnusedProperty.ql index e9e38409bcb..19d43a09db2 100644 --- a/javascript/ql/src/Declarations/UnusedProperty.ql +++ b/javascript/ql/src/Declarations/UnusedProperty.ql @@ -10,7 +10,7 @@ import javascript import semmle.javascript.dataflow.LocalObjects -import UnusedVariable +import Declarations.UnusedVariable import UnusedParameter import Expressions.ExprHasNoEffect diff --git a/javascript/ql/src/Declarations/UnusedVariable.ql b/javascript/ql/src/Declarations/UnusedVariable.ql index 773672197a1..8fb405a7cf9 100644 --- a/javascript/ql/src/Declarations/UnusedVariable.ql +++ b/javascript/ql/src/Declarations/UnusedVariable.ql @@ -10,7 +10,7 @@ */ import javascript -import UnusedVariable +import Declarations.UnusedVariable /** * Holds if `v` is mentioned in a JSDoc comment in the same file, and that file diff --git a/javascript/ql/src/Expressions/ExprHasNoEffect.ql b/javascript/ql/src/Expressions/ExprHasNoEffect.ql index 5ef6be7ba14..f0cd3addcb6 100644 --- a/javascript/ql/src/Expressions/ExprHasNoEffect.ql +++ b/javascript/ql/src/Expressions/ExprHasNoEffect.ql @@ -13,7 +13,7 @@ */ import javascript -import ExprHasNoEffect +import Expressions.ExprHasNoEffect import semmle.javascript.RestrictedLocations from Expr e diff --git a/javascript/ql/src/Expressions/SelfAssignment.ql b/javascript/ql/src/Expressions/SelfAssignment.ql index ff324831cf6..6aab4c46bb2 100644 --- a/javascript/ql/src/Expressions/SelfAssignment.ql +++ b/javascript/ql/src/Expressions/SelfAssignment.ql @@ -12,7 +12,7 @@ */ import Clones -import DOMProperties +import Expressions.DOMProperties /** * Gets a description of expression `e`, which is assumed to be the left-hand diff --git a/javascript/ql/src/LanguageFeatures/UnusedIndexVariable.ql b/javascript/ql/src/LanguageFeatures/UnusedIndexVariable.ql index da3c1d4b4cf..ba39738a777 100644 --- a/javascript/ql/src/LanguageFeatures/UnusedIndexVariable.ql +++ b/javascript/ql/src/LanguageFeatures/UnusedIndexVariable.ql @@ -10,7 +10,7 @@ */ import javascript -import UnusedIndexVariable +import LanguageFeatures.UnusedIndexVariable from RelationalComparison rel, Variable idx, Variable v where unusedIndexVariable(rel, idx, v) From 33ee947f8dcb62f68f1539163df2ae5f1b902fe1 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 6 Oct 2021 00:08:24 +0000 Subject: [PATCH 720/741] Add changed framework coverage reports --- java/documentation/library-coverage/coverage.csv | 3 ++- java/documentation/library-coverage/coverage.rst | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/java/documentation/library-coverage/coverage.csv b/java/documentation/library-coverage/coverage.csv index 08c55d973dd..7d57763fefb 100644 --- a/java/documentation/library-coverage/coverage.csv +++ b/java/documentation/library-coverage/coverage.csv @@ -1,7 +1,8 @@ package,sink,source,summary,sink:bean-validation,sink:create-file,sink:groovy,sink:header-splitting,sink:information-leak,sink:jexl,sink:jndi-injection,sink:ldap,sink:mvel,sink:ognl-injection,sink:open-url,sink:set-hostname-verifier,sink:sql,sink:url-open-stream,sink:url-redirect,sink:xpath,sink:xslt,sink:xss,source:contentprovider,source:remote,summary:taint,summary:value -android.content,8,27,4,,,,,,,,,,,,,8,,,,,,27,,4, +android.content,8,27,61,,,,,,,,,,,,,8,,,,,,27,,4,57 android.database,59,,30,,,,,,,,,,,,,59,,,,,,,,30, android.net,,,60,,,,,,,,,,,,,,,,,,,,,45,15 +android.os,,,82,,,,,,,,,,,,,,,,,,,,,2,80 android.util,,16,,,,,,,,,,,,,,,,,,,,,16,, android.webkit,3,2,,,,,,,,,,,,,,,,,,,3,,2,, cn.hutool.core.codec,,,1,,,,,,,,,,,,,,,,,,,,,1, diff --git a/java/documentation/library-coverage/coverage.rst b/java/documentation/library-coverage/coverage.rst index a39dba6452b..be2984fa4c0 100644 --- a/java/documentation/library-coverage/coverage.rst +++ b/java/documentation/library-coverage/coverage.rst @@ -7,7 +7,7 @@ Java framework & library support :widths: auto Framework / library,Package,Flow sources,Taint & value steps,Sinks (total),`CWE‑022` :sub:`Path injection`,`CWE‑036` :sub:`Path traversal`,`CWE‑079` :sub:`Cross-site scripting`,`CWE‑089` :sub:`SQL injection`,`CWE‑090` :sub:`LDAP injection`,`CWE‑094` :sub:`Code injection`,`CWE‑319` :sub:`Cleartext transmission` - Android,``android.*``,45,94,70,,,3,67,,, + Android,``android.*``,45,233,70,,,3,67,,, `Apache Commons Collections `_,"``org.apache.commons.collections``, ``org.apache.commons.collections4``",,1600,,,,,,,, `Apache Commons IO `_,``org.apache.commons.io``,,22,,,,,,,, `Apache Commons Lang `_,``org.apache.commons.lang3``,,423,,,,,,,, @@ -19,5 +19,5 @@ Java framework & library support Java extensions,"``javax.*``, ``jakarta.*``",54,552,32,,,4,,1,1,2 `Spring `_,``org.springframework.*``,29,469,91,,,,19,14,,29 Others,"``cn.hutool.core.codec``, ``com.esotericsoftware.kryo.io``, ``com.esotericsoftware.kryo5.io``, ``com.fasterxml.jackson.core``, ``com.fasterxml.jackson.databind``, ``com.opensymphony.xwork2.ognl``, ``com.unboundid.ldap.sdk``, ``flexjson``, ``groovy.lang``, ``groovy.util``, ``jodd.json``, ``net.sf.saxon.s9api``, ``ognl``, ``org.apache.commons.codec``, ``org.apache.commons.jexl2``, ``org.apache.commons.jexl3``, ``org.apache.commons.ognl``, ``org.apache.directory.ldap.client.api``, ``org.apache.ibatis.jdbc``, ``org.apache.shiro.codec``, ``org.apache.shiro.jndi``, ``org.codehaus.groovy.control``, ``org.dom4j``, ``org.hibernate``, ``org.jooq``, ``org.mvel2``, ``org.xml.sax``, ``org.xmlpull.v1``, ``play.mvc``",7,28,151,,,,14,18,, - Totals,,143,4986,408,13,6,10,107,33,1,66 + Totals,,143,5125,408,13,6,10,107,33,1,66 From 0621e6582758ba5bd4c61a5052b49e5d99fc74a6 Mon Sep 17 00:00:00 2001 From: luchua-bc Date: Sun, 29 Aug 2021 18:52:33 +0000 Subject: [PATCH 721/741] Query to detect exposure of sensitive information from android file intent --- .../CWE/CWE-200/AndroidFileIntentSink.qll | 64 ++ .../CWE/CWE-200/AndroidFileIntentSource.qll | 118 ++++ .../CWE/CWE-200/LoadFileFromAppActivity.java | 31 + .../CWE-200/SensitiveAndroidFileLeak.qhelp | 38 ++ .../CWE/CWE-200/SensitiveAndroidFileLeak.ql | 78 +++ .../security/CWE-200/FileService.java | 64 ++ .../security/CWE-200/GetFileActivity.java | 20 + .../security/CWE-200/LeakFileActivity.java | 26 + .../security/CWE-200/LeakFileActivity2.java | 19 + .../security/CWE-200/SafeFileActivity.java | 28 + .../CWE-200/SensitiveAndroidFileLeak.expected | 34 ++ .../CWE-200/SensitiveAndroidFileLeak.qlref | 1 + .../query-tests/security/CWE-200/options | 1 + .../android/app/Activity.java | 46 +- .../android/app/Service.java | 344 +++++++++++ .../android/content/ComponentName.java | 29 + .../android/content/Context.java | 89 ++- .../android/content/ContextWrapper.java | 186 ++++++ .../android/content/Intent.java | 553 ++++++++++++++++++ .../android/os/AsyncTask.java | 406 +++++++++++++ 20 files changed, 2173 insertions(+), 2 deletions(-) create mode 100644 java/ql/src/experimental/Security/CWE/CWE-200/AndroidFileIntentSink.qll create mode 100644 java/ql/src/experimental/Security/CWE/CWE-200/AndroidFileIntentSource.qll create mode 100644 java/ql/src/experimental/Security/CWE/CWE-200/LoadFileFromAppActivity.java create mode 100644 java/ql/src/experimental/Security/CWE/CWE-200/SensitiveAndroidFileLeak.qhelp create mode 100644 java/ql/src/experimental/Security/CWE/CWE-200/SensitiveAndroidFileLeak.ql create mode 100644 java/ql/test/experimental/query-tests/security/CWE-200/FileService.java create mode 100644 java/ql/test/experimental/query-tests/security/CWE-200/GetFileActivity.java create mode 100644 java/ql/test/experimental/query-tests/security/CWE-200/LeakFileActivity.java create mode 100644 java/ql/test/experimental/query-tests/security/CWE-200/LeakFileActivity2.java create mode 100644 java/ql/test/experimental/query-tests/security/CWE-200/SafeFileActivity.java create mode 100644 java/ql/test/experimental/query-tests/security/CWE-200/SensitiveAndroidFileLeak.expected create mode 100644 java/ql/test/experimental/query-tests/security/CWE-200/SensitiveAndroidFileLeak.qlref create mode 100644 java/ql/test/experimental/query-tests/security/CWE-200/options create mode 100644 java/ql/test/stubs/google-android-9.0.0/android/app/Service.java create mode 100644 java/ql/test/stubs/google-android-9.0.0/android/content/ComponentName.java create mode 100644 java/ql/test/stubs/google-android-9.0.0/android/content/ContextWrapper.java create mode 100644 java/ql/test/stubs/google-android-9.0.0/android/os/AsyncTask.java diff --git a/java/ql/src/experimental/Security/CWE/CWE-200/AndroidFileIntentSink.qll b/java/ql/src/experimental/Security/CWE/CWE-200/AndroidFileIntentSink.qll new file mode 100644 index 00000000000..95b11e34849 --- /dev/null +++ b/java/ql/src/experimental/Security/CWE/CWE-200/AndroidFileIntentSink.qll @@ -0,0 +1,64 @@ +/** Provides Android sink models related to file creation. */ + +import java +import semmle.code.java.dataflow.DataFlow +import semmle.code.java.dataflow.ExternalFlow +import semmle.code.java.frameworks.android.Android +import semmle.code.java.frameworks.android.Intent + +/** A sink representing methods creating a file in Android. */ +class AndroidFileSink extends DataFlow::Node { + AndroidFileSink() { sinkNode(this, "create-file") } +} + +/** + * The Android class `android.os.AsyncTask` for running tasks off the UI thread to achieve + * better user experience. + */ +class AsyncTask extends RefType { + AsyncTask() { this.hasQualifiedName("android.os", "AsyncTask") } +} + +/** The `execute` method of Android `AsyncTask`. */ +class AsyncTaskExecuteMethod extends Method { + AsyncTaskExecuteMethod() { + this.getDeclaringType().getSourceDeclaration().getASourceSupertype*() instanceof AsyncTask and + this.getName() = "execute" + } + + int getParamIndex() { result = 0 } +} + +/** The `executeOnExecutor` method of Android `AsyncTask`. */ +class AsyncTaskExecuteOnExecutorMethod extends Method { + AsyncTaskExecuteOnExecutorMethod() { + this.getDeclaringType().getSourceDeclaration().getASourceSupertype*() instanceof AsyncTask and + this.getName() = "executeOnExecutor" + } + + int getParamIndex() { result = 1 } +} + +/** The `doInBackground` method of Android `AsyncTask`. */ +class AsyncTaskRunInBackgroundMethod extends Method { + AsyncTaskRunInBackgroundMethod() { + this.getDeclaringType().getSourceDeclaration().getASourceSupertype*() instanceof AsyncTask and + this.getName() = "doInBackground" + } +} + +/** The service start method of Android context. */ +class ContextStartServiceMethod extends Method { + ContextStartServiceMethod() { + this.getName() = ["startService", "startForegroundService"] and + this.getDeclaringType().getASupertype*() instanceof TypeContext + } +} + +/** The `onStartCommand` method of Android service. */ +class ServiceOnStartCommandMethod extends Method { + ServiceOnStartCommandMethod() { + this.hasName("onStartCommand") and + this.getDeclaringType() instanceof AndroidService + } +} diff --git a/java/ql/src/experimental/Security/CWE/CWE-200/AndroidFileIntentSource.qll b/java/ql/src/experimental/Security/CWE/CWE-200/AndroidFileIntentSource.qll new file mode 100644 index 00000000000..6df48f530a5 --- /dev/null +++ b/java/ql/src/experimental/Security/CWE/CWE-200/AndroidFileIntentSource.qll @@ -0,0 +1,118 @@ +/** Provides summary models relating to file content inputs of Android. */ + +import java +import semmle.code.java.dataflow.FlowSources +import semmle.code.java.frameworks.android.Android + +/** The `startActivityForResult` method of Android `Activity`. */ +class StartActivityForResultMethod extends Method { + StartActivityForResultMethod() { + this.getDeclaringType().getASupertype*() instanceof AndroidActivity and + this.getName() = "startActivityForResult" + } +} + +/** Android class instance of `GET_CONTENT` intent. */ +class GetContentIntent extends ClassInstanceExpr { + GetContentIntent() { + this.getConstructedType().getASupertype*() instanceof TypeIntent and + this.getArgument(0).(CompileTimeConstantExpr).getStringValue() = + "android.intent.action.GET_CONTENT" + or + exists(Field f | + this.getArgument(0) = f.getAnAccess() and + f.hasName("ACTION_GET_CONTENT") and + f.getDeclaringType() instanceof TypeIntent + ) + } +} + +/** Android intent data model in the new CSV format. */ +private class AndroidIntentDataModel extends SummaryModelCsv { + override predicate row(string row) { + row = + [ + "android.content;Intent;true;addCategory;;;Argument[-1];ReturnValue;taint", + "android.content;Intent;true;addFlags;;;Argument[-1];ReturnValue;taint", + "android.content;Intent;true;createChooser;;;Argument[0];ReturnValue;taint", + "android.content;Intent;true;getData;;;Argument[-1];ReturnValue;taint", + "android.content;Intent;true;getDataString;;;Argument[-1];ReturnValue;taint", + "android.content;Intent;true;getExtras;;;Argument[-1];ReturnValue;taint", + "android.content;Intent;true;getIntent;;;Argument[-1];ReturnValue;taint", + "android.content;Intent;true;get" + + [ + "ParcelableArray", "ParcelableArrayList", "Parcelable", "Serializable", "StringArray", + "StringArrayList", "String" + ] + "Extra;;;Argument[-1..1];ReturnValue;taint", + "android.content;Intent;true;put" + + [ + "", "CharSequenceArrayList", "IntegerArrayList", "ParcelableArrayList", + "StringArrayList" + ] + "Extra;;;Argument[1];Argument[-1];taint", + "android.content;Intent;true;putExtras;;;Argument[1];Argument[-1];taint", + "android.content;Intent;true;setData;;;Argument[0];ReturnValue;taint", + "android.content;Intent;true;setDataAndType;;;Argument[-1];ReturnValue;taint", + "android.content;Intent;true;setFlags;;;Argument[-1];ReturnValue;taint", + "android.content;Intent;true;setType;;;Argument[-1];ReturnValue;taint", + "android.net;Uri;true;getEncodedPath;;;Argument[-1];ReturnValue;taint", + "android.net;Uri;true;getEncodedQuery;;;Argument[-1];ReturnValue;taint", + "android.net;Uri;true;getLastPathSegment;;;Argument[-1];ReturnValue;taint", + "android.net;Uri;true;getPath;;;Argument[-1];ReturnValue;taint", + "android.net;Uri;true;getPathSegments;;;Argument[-1];ReturnValue;taint", + "android.net;Uri;true;getQuery;;;Argument[-1];ReturnValue;taint", + "android.net;Uri;true;getQueryParameter;;;Argument[-1];ReturnValue;taint", + "android.net;Uri;true;getQueryParameters;;;Argument[-1];ReturnValue;taint", + "android.os;AsyncTask;true;execute;;;Argument[0];ReturnValue;taint", + "android.os;AsyncTask;true;doInBackground;;;Argument[0];ReturnValue;taint" + ] + } +} + +/** Taint configuration for getting content intent. */ +class GetContentIntentConfig extends TaintTracking::Configuration { + GetContentIntentConfig() { this = "GetContentIntentConfig" } + + override predicate isSource(DataFlow::Node src) { + exists(GetContentIntent gi | src.asExpr() = gi) + } + + override predicate isSink(DataFlow::Node sink) { + exists(MethodAccess ma | + ma.getMethod() instanceof StartActivityForResultMethod and sink.asExpr() = ma.getArgument(0) + ) + } +} + +/** Android `Intent` input to request file loading. */ +class AndroidFileIntentInput extends LocalUserInput { + MethodAccess ma; + + AndroidFileIntentInput() { + this.asExpr() = ma.getArgument(0) and + ma.getMethod() instanceof StartActivityForResultMethod and + exists(GetContentIntentConfig cc, GetContentIntent gi | + cc.hasFlow(DataFlow::exprNode(gi), DataFlow::exprNode(ma.getArgument(0))) + ) + } + + /** The request code identifying a specific intent, which is to be matched in `onActivityResult()`. */ + int getRequestCode() { result = ma.getArgument(1).(CompileTimeConstantExpr).getIntValue() } +} + +/** The `onActivityForResult` method of Android `Activity` */ +class OnActivityForResultMethod extends Method { + OnActivityForResultMethod() { + this.getDeclaringType().getASupertype*() instanceof AndroidActivity and + this.getName() = "onActivityResult" + } +} + +/** Input of Android activity result from the same application or another application. */ +class AndroidActivityResultInput extends DataFlow::Node { + OnActivityForResultMethod m; + + AndroidActivityResultInput() { this.asExpr() = m.getParameter(2).getAnAccess() } + + /** The request code matching a specific intent request. */ + VarAccess getRequestCodeVar() { result = m.getParameter(0).getAnAccess() } +} diff --git a/java/ql/src/experimental/Security/CWE/CWE-200/LoadFileFromAppActivity.java b/java/ql/src/experimental/Security/CWE/CWE-200/LoadFileFromAppActivity.java new file mode 100644 index 00000000000..8c4d2a2f0da --- /dev/null +++ b/java/ql/src/experimental/Security/CWE/CWE-200/LoadFileFromAppActivity.java @@ -0,0 +1,31 @@ +public class LoadFileFromAppActivity extends Activity { + public static final int REQUEST_CODE__SELECT_CONTENT_FROM_APPS = 99; + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + if (requestCode == LoadFileFromAppActivity.REQUEST_CODE__SELECT_CONTENT_FROM_APPS && + resultCode == RESULT_OK) { + + { + // BAD: Load file without validation + loadOfContentFromApps(data, resultCode); + } + + { + // GOOD: load file with validation + if (!data.getData().getPath().startsWith("/data/data")) { + loadOfContentFromApps(data, resultCode); + } + } + } + } + + private void loadOfContentFromApps(Intent contentIntent, int resultCode) { + Uri streamsToUpload = contentIntent.getData(); + try { + RandomAccessFile file = new RandomAccessFile(streamsToUpload.getPath(), "r"); + } catch (Exception ex) { + ex.printStackTrace(); + } + } +} diff --git a/java/ql/src/experimental/Security/CWE/CWE-200/SensitiveAndroidFileLeak.qhelp b/java/ql/src/experimental/Security/CWE/CWE-200/SensitiveAndroidFileLeak.qhelp new file mode 100644 index 00000000000..7b6e60d7ca0 --- /dev/null +++ b/java/ql/src/experimental/Security/CWE/CWE-200/SensitiveAndroidFileLeak.qhelp @@ -0,0 +1,38 @@ + + + +

    The Android API allows to start an activity in another mobile application and receive a result back. +When starting an activity to retrieve a file from another application, missing input validation can +lead to leaking of sensitive configuration file or user data because the intent is from the application +itself that is allowed to access its protected data therefore bypassing the access control. +

    +
    + + +

    +When loading file data from an activity of another application, validate that the file path is not its own +protected directory, which is a subdirectory of the Android application directory /data/data/. +

    +
    + + +

    +The following examples show the bad situation and the good situation respectively. In bad situation, a +file is loaded without path validation. In good situation, a file is loaded with path validation. +

    + +
    + + +
  • +Google: +Android: Interacting with Other Apps. +
  • +
  • +CVE: +CVE-2021-32695: File Sharing Flow Initiated by a Victim Leaks Sensitive Data to a Malicious App. +
  • +
    +
    \ No newline at end of file diff --git a/java/ql/src/experimental/Security/CWE/CWE-200/SensitiveAndroidFileLeak.ql b/java/ql/src/experimental/Security/CWE/CWE-200/SensitiveAndroidFileLeak.ql new file mode 100644 index 00000000000..c4bdde170ba --- /dev/null +++ b/java/ql/src/experimental/Security/CWE/CWE-200/SensitiveAndroidFileLeak.ql @@ -0,0 +1,78 @@ +/** + * @name Leaking sensitive Android file + * @description Getting file intent from user input without path validation could leak arbitrary + * Android configuration file and sensitive user data. + * @kind path-problem + * @id java/sensitive_android_file_leak + * @tags security + * external/cwe/cwe-200 + */ + +import java +import AndroidFileIntentSink +import AndroidFileIntentSource +import DataFlow2::PathGraph +import semmle.code.java.dataflow.TaintTracking2 + +class AndroidFileLeakConfig extends TaintTracking2::Configuration { + AndroidFileLeakConfig() { this = "AndroidFileLeakConfig" } + + /** Holds if it is an access to file intent result. */ + override predicate isSource(DataFlow2::Node src) { + exists( + AndroidActivityResultInput ai, AndroidFileIntentInput fi, IfStmt ifs, VarAccess intentVar // if (requestCode == REQUEST_CODE__SELECT_CONTENT_FROM_APPS) + | + ifs.getCondition().getAChildExpr().getAChildExpr().(CompileTimeConstantExpr).getIntValue() = + fi.getRequestCode() and + ifs.getCondition().getAChildExpr().getAChildExpr() = ai.getRequestCodeVar() and + intentVar.getType() instanceof TypeIntent and + intentVar.(Argument).getAnEnclosingStmt() = ifs.getThen() and + src.asExpr() = intentVar + ) + } + + /** Holds if it is a sink of file access in Android. */ + override predicate isSink(DataFlow2::Node sink) { sink instanceof AndroidFileSink } + + override predicate isAdditionalTaintStep(DataFlow2::Node prev, DataFlow2::Node succ) { + exists(MethodAccess aema, AsyncTaskRunInBackgroundMethod arm | + // fileAsyncTask.execute(params) will invoke doInBackground(params) of FileAsyncTask + aema.getQualifier().getType() = arm.getDeclaringType() and + ( + aema.getMethod() instanceof AsyncTaskExecuteMethod and + prev.asExpr() = aema.getArgument(0) + or + aema.getMethod() instanceof AsyncTaskExecuteOnExecutorMethod and + prev.asExpr() = aema.getArgument(1) + ) and + succ.asExpr() = arm.getParameter(0).getAnAccess() + ) + or + exists(MethodAccess csma, ServiceOnStartCommandMethod ssm, ClassInstanceExpr ce | + csma.getMethod() instanceof ContextStartServiceMethod and + ce.getConstructedType() instanceof TypeIntent and // Intent intent = new Intent(context, FileUploader.class); + ce.getArgument(1).getType().(ParameterizedType).getTypeArgument(0) = ssm.getDeclaringType() and + DataFlow2::localExprFlow(ce, csma.getArgument(0)) and // context.startService(intent); + prev.asExpr() = csma.getArgument(0) and + succ.asExpr() = ssm.getParameter(0).getAnAccess() // public int onStartCommand(Intent intent, int flags, int startId) {...} in FileUploader + ) + } + + override predicate isSanitizer(DataFlow2::Node node) { + exists( + MethodAccess startsWith // "startsWith" path check + | + startsWith.getMethod().hasName("startsWith") and + ( + DataFlow2::localExprFlow(node.asExpr(), startsWith.getQualifier()) or + DataFlow2::localExprFlow(node.asExpr(), + startsWith.getQualifier().(MethodAccess).getQualifier()) + ) + ) + } +} + +from DataFlow2::PathNode source, DataFlow2::PathNode sink, AndroidFileLeakConfig conf +where conf.hasFlowPath(source, sink) +select sink.getNode(), source, sink, "Leaking arbitrary Android file from $@.", source.getNode(), + "this user input" diff --git a/java/ql/test/experimental/query-tests/security/CWE-200/FileService.java b/java/ql/test/experimental/query-tests/security/CWE-200/FileService.java new file mode 100644 index 00000000000..1e2895001e4 --- /dev/null +++ b/java/ql/test/experimental/query-tests/security/CWE-200/FileService.java @@ -0,0 +1,64 @@ +import java.io.FileOutputStream; + +import android.app.Service; +import android.content.Intent; +import android.net.Uri; +import android.os.Bundle; +import android.os.AsyncTask; + +public class FileService extends Service { + public static String KEY_LOCAL_FILE = "local_file"; + /** + * Service initialization + */ + @Override + public void onCreate() { + super.onCreate(); + } + + @Override + public int onStartCommand(Intent intent, int flags, int startId) { + String localPath = intent.getStringExtra(KEY_LOCAL_FILE); + CopyAndUploadContentUrisTask copyTask = new CopyAndUploadContentUrisTask(); + + copyTask.execute( + copyTask.makeParamsToExecute(localPath) + ); + return 2; + } + + public class CopyAndUploadContentUrisTask extends AsyncTask { + public Object[] makeParamsToExecute( + String sourceUri + ) { + return new Object[] { + sourceUri + }; + } + + @Override + protected String doInBackground(Object[] params) { + FileOutputStream outputStream = null; + + try { + String[] uris = (String[]) params[1]; + outputStream = new FileOutputStream(uris[0]); + return "success"; + } catch (Exception e) { + } + return "failure"; + } + + @Override + protected void onPostExecute(String result) { + } + + @Override + protected void onPreExecute() { + } + + @Override + protected void onProgressUpdate(Void... values) { + } + } +} diff --git a/java/ql/test/experimental/query-tests/security/CWE-200/GetFileActivity.java b/java/ql/test/experimental/query-tests/security/CWE-200/GetFileActivity.java new file mode 100644 index 00000000000..762ac1f43db --- /dev/null +++ b/java/ql/test/experimental/query-tests/security/CWE-200/GetFileActivity.java @@ -0,0 +1,20 @@ +import android.app.Activity; +import android.content.Intent; +import android.os.Bundle; + +public class GetFileActivity extends Activity { + public static final int REQUEST_CODE__SELECT_CONTENT_FROM_APPS = 99; + + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(-1); + + Intent action = new Intent(Intent.ACTION_GET_CONTENT); + action = action.setType("*/*").addCategory(Intent.CATEGORY_OPENABLE); + action.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true); + + startActivityForResult( + Intent.createChooser(action, "Open File From Selected Application"), REQUEST_CODE__SELECT_CONTENT_FROM_APPS + ); + } +} diff --git a/java/ql/test/experimental/query-tests/security/CWE-200/LeakFileActivity.java b/java/ql/test/experimental/query-tests/security/CWE-200/LeakFileActivity.java new file mode 100644 index 00000000000..3520ed0fd40 --- /dev/null +++ b/java/ql/test/experimental/query-tests/security/CWE-200/LeakFileActivity.java @@ -0,0 +1,26 @@ +import java.io.RandomAccessFile; + +import android.app.Activity; +import android.content.Intent; +import android.net.Uri; +import android.os.Bundle; + +public class LeakFileActivity extends Activity { + @Override + // BAD: Load file from activity without validation + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + if (requestCode == GetFileActivity.REQUEST_CODE__SELECT_CONTENT_FROM_APPS && + resultCode == RESULT_OK) { + loadOfContentFromApps(data, resultCode); + } + } + + private void loadOfContentFromApps(Intent contentIntent, int resultCode) { + Uri streamsToUpload = contentIntent.getData(); + try { + RandomAccessFile file = new RandomAccessFile(streamsToUpload.getPath(), "r"); + } catch (Exception ex) { + ex.printStackTrace(); + } + } +} diff --git a/java/ql/test/experimental/query-tests/security/CWE-200/LeakFileActivity2.java b/java/ql/test/experimental/query-tests/security/CWE-200/LeakFileActivity2.java new file mode 100644 index 00000000000..56e695ec97a --- /dev/null +++ b/java/ql/test/experimental/query-tests/security/CWE-200/LeakFileActivity2.java @@ -0,0 +1,19 @@ +import android.app.Activity; +import android.content.Intent; +import android.net.Uri; +import android.os.Bundle; + +public class LeakFileActivity2 extends Activity { + @Override + // BAD: Load file in a service without validation + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + Uri localPath = data.getData(); + + if (requestCode == GetFileActivity.REQUEST_CODE__SELECT_CONTENT_FROM_APPS && + resultCode == RESULT_OK) { + Intent intent = new Intent(this, FileService.class); + intent.putExtra(FileService.KEY_LOCAL_FILE, localPath); + startService(intent); + } + } +} diff --git a/java/ql/test/experimental/query-tests/security/CWE-200/SafeFileActivity.java b/java/ql/test/experimental/query-tests/security/CWE-200/SafeFileActivity.java new file mode 100644 index 00000000000..a919888a658 --- /dev/null +++ b/java/ql/test/experimental/query-tests/security/CWE-200/SafeFileActivity.java @@ -0,0 +1,28 @@ +import java.io.RandomAccessFile; + +import android.app.Activity; +import android.content.Intent; +import android.net.Uri; +import android.os.Bundle; + +public class SafeFileActivity extends Activity { + @Override + // GOOD: Load file from activity with path validation + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + if (requestCode == GetFileActivity.REQUEST_CODE__SELECT_CONTENT_FROM_APPS && + resultCode == RESULT_OK) { + safeLoadOfContentFromApps(data, resultCode); + } + } + + private void safeLoadOfContentFromApps(Intent contentIntent, int resultCode) { + Uri streamsToUpload = contentIntent.getData(); + try { + if (!streamsToUpload.getPath().startsWith("/data/data")) { + RandomAccessFile file = new RandomAccessFile(streamsToUpload.getPath(), "r"); + } + } catch (Exception ex) { + ex.printStackTrace(); + } + } +} diff --git a/java/ql/test/experimental/query-tests/security/CWE-200/SensitiveAndroidFileLeak.expected b/java/ql/test/experimental/query-tests/security/CWE-200/SensitiveAndroidFileLeak.expected new file mode 100644 index 00000000000..db29fd64568 --- /dev/null +++ b/java/ql/test/experimental/query-tests/security/CWE-200/SensitiveAndroidFileLeak.expected @@ -0,0 +1,34 @@ +edges +| FileService.java:21:28:21:33 | intent : Intent | FileService.java:21:28:21:64 | getStringExtra(...) : String | +| FileService.java:21:28:21:33 | intent : Intent | FileService.java:25:42:25:50 | localPath : String | +| FileService.java:21:28:21:64 | getStringExtra(...) : String | FileService.java:25:42:25:50 | localPath : String | +| FileService.java:25:13:25:51 | makeParamsToExecute(...) : Object[] | FileService.java:44:44:44:49 | params : Object[] | +| FileService.java:25:13:25:51 | makeParamsToExecute(...) [[]] : String | FileService.java:25:13:25:51 | makeParamsToExecute(...) : Object[] | +| FileService.java:25:42:25:50 | localPath : String | FileService.java:25:13:25:51 | makeParamsToExecute(...) [[]] : String | +| FileService.java:44:33:44:52 | (...)... : Object | FileService.java:45:53:45:59 | ...[...] | +| FileService.java:44:44:44:49 | params : Object[] | FileService.java:44:33:44:52 | (...)... : Object | +| LeakFileActivity2.java:16:26:16:31 | intent : Intent | FileService.java:21:28:21:33 | intent : Intent | +| LeakFileActivity.java:14:35:14:38 | data : Intent | LeakFileActivity.java:18:40:18:59 | contentIntent : Intent | +| LeakFileActivity.java:18:40:18:59 | contentIntent : Intent | LeakFileActivity.java:19:31:19:43 | contentIntent : Intent | +| LeakFileActivity.java:19:31:19:43 | contentIntent : Intent | LeakFileActivity.java:19:31:19:53 | getData(...) : Uri | +| LeakFileActivity.java:19:31:19:53 | getData(...) : Uri | LeakFileActivity.java:21:58:21:72 | streamsToUpload : Uri | +| LeakFileActivity.java:21:58:21:72 | streamsToUpload : Uri | LeakFileActivity.java:21:58:21:82 | getPath(...) | +nodes +| FileService.java:21:28:21:33 | intent : Intent | semmle.label | intent : Intent | +| FileService.java:21:28:21:64 | getStringExtra(...) : String | semmle.label | getStringExtra(...) : String | +| FileService.java:25:13:25:51 | makeParamsToExecute(...) : Object[] | semmle.label | makeParamsToExecute(...) : Object[] | +| FileService.java:25:13:25:51 | makeParamsToExecute(...) [[]] : String | semmle.label | makeParamsToExecute(...) [[]] : String | +| FileService.java:25:42:25:50 | localPath : String | semmle.label | localPath : String | +| FileService.java:44:33:44:52 | (...)... : Object | semmle.label | (...)... : Object | +| FileService.java:44:44:44:49 | params : Object[] | semmle.label | params : Object[] | +| FileService.java:45:53:45:59 | ...[...] | semmle.label | ...[...] | +| LeakFileActivity2.java:16:26:16:31 | intent : Intent | semmle.label | intent : Intent | +| LeakFileActivity.java:14:35:14:38 | data : Intent | semmle.label | data : Intent | +| LeakFileActivity.java:18:40:18:59 | contentIntent : Intent | semmle.label | contentIntent : Intent | +| LeakFileActivity.java:19:31:19:43 | contentIntent : Intent | semmle.label | contentIntent : Intent | +| LeakFileActivity.java:19:31:19:53 | getData(...) : Uri | semmle.label | getData(...) : Uri | +| LeakFileActivity.java:21:58:21:72 | streamsToUpload : Uri | semmle.label | streamsToUpload : Uri | +| LeakFileActivity.java:21:58:21:82 | getPath(...) | semmle.label | getPath(...) | +#select +| FileService.java:45:53:45:59 | ...[...] | LeakFileActivity2.java:16:26:16:31 | intent : Intent | FileService.java:45:53:45:59 | ...[...] | Leaking arbitrary Android file from $@. | LeakFileActivity2.java:16:26:16:31 | intent | this user input | +| LeakFileActivity.java:21:58:21:82 | getPath(...) | LeakFileActivity.java:14:35:14:38 | data : Intent | LeakFileActivity.java:21:58:21:82 | getPath(...) | Leaking arbitrary Android file from $@. | LeakFileActivity.java:14:35:14:38 | data | this user input | diff --git a/java/ql/test/experimental/query-tests/security/CWE-200/SensitiveAndroidFileLeak.qlref b/java/ql/test/experimental/query-tests/security/CWE-200/SensitiveAndroidFileLeak.qlref new file mode 100644 index 00000000000..2959fb2e85c --- /dev/null +++ b/java/ql/test/experimental/query-tests/security/CWE-200/SensitiveAndroidFileLeak.qlref @@ -0,0 +1 @@ +experimental/Security/CWE/CWE-200/SensitiveAndroidFileLeak.ql \ No newline at end of file diff --git a/java/ql/test/experimental/query-tests/security/CWE-200/options b/java/ql/test/experimental/query-tests/security/CWE-200/options new file mode 100644 index 00000000000..43e25f608b6 --- /dev/null +++ b/java/ql/test/experimental/query-tests/security/CWE-200/options @@ -0,0 +1 @@ +// semmle-extractor-options: --javac-args -cp ${testdir}/../../../../stubs/google-android-9.0.0 diff --git a/java/ql/test/stubs/google-android-9.0.0/android/app/Activity.java b/java/ql/test/stubs/google-android-9.0.0/android/app/Activity.java index e04f68a203d..99b797fb2a8 100644 --- a/java/ql/test/stubs/google-android-9.0.0/android/app/Activity.java +++ b/java/ql/test/stubs/google-android-9.0.0/android/app/Activity.java @@ -15,6 +15,8 @@ */ package android.app; +import android.content.Context; +import android.content.ContextWrapper; import android.content.Intent; import android.os.Bundle; import android.view.View; @@ -675,7 +677,16 @@ import android.view.View; * upload, independent of whether the original activity is paused, stopped, or * finished. */ -public class Activity { +public class Activity extends ContextWrapper { + /** Standard activity result: operation canceled. */ + public static final int RESULT_CANCELED = 0; + + /** Standard activity result: operation succeeded. */ + public static final int RESULT_OK = -1; + + /** Start of user-defined activity results. */ + public static final int RESULT_FIRST_USER = 1; + /** Return the intent that started this activity. */ public Intent getIntent() { return null; @@ -1142,4 +1153,37 @@ public class Activity { */ public void startActivities(Intent[] intents, Bundle options) { } + + /** + * Called when an activity you launched exits, giving you the requestCode + * you started it with, the resultCode it returned, and any additional + * data from it. The resultCode will be + * {@link #RESULT_CANCELED} if the activity explicitly returned that, + * didn't return any result, or crashed during its operation. + * + *

    An activity can never receive a result in the resumed state. You can count on + * {@link #onResume} being called after this method, though not necessarily immediately after. + * If the activity was resumed, it will be paused and the result will be delivered, followed + * by {@link #onResume}. If the activity wasn't in the resumed state, then the result will + * be delivered, with {@link #onResume} called sometime later when the activity becomes active + * again. + * + *

    This method is never invoked if your activity sets + * {@link android.R.styleable#AndroidManifestActivity_noHistory noHistory} to + * true. + * + * @param requestCode The integer request code originally supplied to + * startActivityForResult(), allowing you to identify who this + * result came from. + * @param resultCode The integer result code returned by the child activity + * through its setResult(). + * @param data An Intent, which can return result data to the caller + * (various data can be attached to Intent "extras"). + * + * @see #startActivityForResult + * @see #createPendingResult + * @see #setResult(int) + */ + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + } } diff --git a/java/ql/test/stubs/google-android-9.0.0/android/app/Service.java b/java/ql/test/stubs/google-android-9.0.0/android/app/Service.java new file mode 100644 index 00000000000..370d7c5e4fe --- /dev/null +++ b/java/ql/test/stubs/google-android-9.0.0/android/app/Service.java @@ -0,0 +1,344 @@ +/* + * Copyright (C) 2006 The Android Open Source Project + * + * 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. + */ +package android.app; + +import android.content.Intent; +import android.content.ContextWrapper; + +/** + * A Service is an application component representing either an application's desire + * to perform a longer-running operation while not interacting with the user + * or to supply functionality for other applications to use. Each service + * class must have a corresponding + * {@link android.R.styleable#AndroidManifestService <service>} + * declaration in its package's AndroidManifest.xml. Services + * can be started with + * {@link android.content.Context#startService Context.startService()} and + * {@link android.content.Context#bindService Context.bindService()}. + * + *

    Note that services, like other application objects, run in the main + * thread of their hosting process. This means that, if your service is going + * to do any CPU intensive (such as MP3 playback) or blocking (such as + * networking) operations, it should spawn its own thread in which to do that + * work. More information on this can be found in + * Processes and + * Threads. The {@link IntentService} class is available + * as a standard implementation of Service that has its own thread where it + * schedules its work to be done.

    + * + *

    Topics covered here: + *

      + *
    1. What is a Service? + *
    2. Service Lifecycle + *
    3. Permissions + *
    4. Process Lifecycle + *
    5. Local Service Sample + *
    6. Remote Messenger Service Sample + *
    + * + *
    + *

    Developer Guides

    + *

    For a detailed discussion about how to create services, read the + * Services developer guide.

    + *
    + * + * + *

    What is a Service?

    + * + *

    Most confusion about the Service class actually revolves around what + * it is not:

    + * + *
      + *
    • A Service is not a separate process. The Service object itself + * does not imply it is running in its own process; unless otherwise specified, + * it runs in the same process as the application it is part of. + *
    • A Service is not a thread. It is not a means itself to do work off + * of the main thread (to avoid Application Not Responding errors). + *
    + * + *

    Thus a Service itself is actually very simple, providing two main features:

    + * + *
      + *
    • A facility for the application to tell the system about + * something it wants to be doing in the background (even when the user is not + * directly interacting with the application). This corresponds to calls to + * {@link android.content.Context#startService Context.startService()}, which + * ask the system to schedule work for the service, to be run until the service + * or someone else explicitly stop it. + *
    • A facility for an application to expose some of its functionality to + * other applications. This corresponds to calls to + * {@link android.content.Context#bindService Context.bindService()}, which + * allows a long-standing connection to be made to the service in order to + * interact with it. + *
    + * + *

    When a Service component is actually created, for either of these reasons, + * all that the system actually does is instantiate the component + * and call its {@link #onCreate} and any other appropriate callbacks on the + * main thread. It is up to the Service to implement these with the appropriate + * behavior, such as creating a secondary thread in which it does its work.

    + * + *

    Note that because Service itself is so simple, you can make your + * interaction with it as simple or complicated as you want: from treating it + * as a local Java object that you make direct method calls on (as illustrated + * by Local Service Sample), to providing + * a full remoteable interface using AIDL.

    + * + * + *

    Service Lifecycle

    + * + *

    There are two reasons that a service can be run by the system. If someone + * calls {@link android.content.Context#startService Context.startService()} then the system will + * retrieve the service (creating it and calling its {@link #onCreate} method + * if needed) and then call its {@link #onStartCommand} method with the + * arguments supplied by the client. The service will at this point continue + * running until {@link android.content.Context#stopService Context.stopService()} or + * {@link #stopSelf()} is called. Note that multiple calls to + * Context.startService() do not nest (though they do result in multiple corresponding + * calls to onStartCommand()), so no matter how many times it is started a service + * will be stopped once Context.stopService() or stopSelf() is called; however, + * services can use their {@link #stopSelf(int)} method to ensure the service is + * not stopped until started intents have been processed. + * + *

    For started services, there are two additional major modes of operation + * they can decide to run in, depending on the value they return from + * onStartCommand(): {@link #START_STICKY} is used for services that are + * explicitly started and stopped as needed, while {@link #START_NOT_STICKY} + * or {@link #START_REDELIVER_INTENT} are used for services that should only + * remain running while processing any commands sent to them. See the linked + * documentation for more detail on the semantics. + * + *

    Clients can also use {@link android.content.Context#bindService Context.bindService()} to + * obtain a persistent connection to a service. This likewise creates the + * service if it is not already running (calling {@link #onCreate} while + * doing so), but does not call onStartCommand(). The client will receive the + * {@link android.os.IBinder} object that the service returns from its + * {@link #onBind} method, allowing the client to then make calls back + * to the service. The service will remain running as long as the connection + * is established (whether or not the client retains a reference on the + * service's IBinder). Usually the IBinder returned is for a complex + * interface that has been written + * in aidl. + * + *

    A service can be both started and have connections bound to it. In such + * a case, the system will keep the service running as long as either it is + * started or there are one or more connections to it with the + * {@link android.content.Context#BIND_AUTO_CREATE Context.BIND_AUTO_CREATE} + * flag. Once neither + * of these situations hold, the service's {@link #onDestroy} method is called + * and the service is effectively terminated. All cleanup (stopping threads, + * unregistering receivers) should be complete upon returning from onDestroy(). + * + * + *

    Permissions

    + * + *

    Global access to a service can be enforced when it is declared in its + * manifest's {@link android.R.styleable#AndroidManifestService <service>} + * tag. By doing so, other applications will need to declare a corresponding + * {@link android.R.styleable#AndroidManifestUsesPermission <uses-permission>} + * element in their own manifest to be able to start, stop, or bind to + * the service. + * + *

    As of {@link android.os.Build.VERSION_CODES#GINGERBREAD}, when using + * {@link Context#startService(Intent) Context.startService(Intent)}, you can + * also set {@link Intent#FLAG_GRANT_READ_URI_PERMISSION + * Intent.FLAG_GRANT_READ_URI_PERMISSION} and/or {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION + * Intent.FLAG_GRANT_WRITE_URI_PERMISSION} on the Intent. This will grant the + * Service temporary access to the specific URIs in the Intent. Access will + * remain until the Service has called {@link #stopSelf(int)} for that start + * command or a later one, or until the Service has been completely stopped. + * This works for granting access to the other apps that have not requested + * the permission protecting the Service, or even when the Service is not + * exported at all. + * + *

    In addition, a service can protect individual IPC calls into it with + * permissions, by calling the + * {@link #checkCallingPermission} + * method before executing the implementation of that call. + * + *

    See the Security and Permissions + * document for more information on permissions and security in general. + * + * + *

    Process Lifecycle

    + * + *

    The Android system will attempt to keep the process hosting a service + * around as long as the service has been started or has clients bound to it. + * When running low on memory and needing to kill existing processes, the + * priority of a process hosting the service will be the higher of the + * following possibilities: + * + *

      + *
    • If the service is currently executing code in its + * {@link #onCreate onCreate()}, {@link #onStartCommand onStartCommand()}, + * or {@link #onDestroy onDestroy()} methods, then the hosting process will + * be a foreground process to ensure this code can execute without + * being killed. + *

    • If the service has been started, then its hosting process is considered + * to be less important than any processes that are currently visible to the + * user on-screen, but more important than any process not visible. Because + * only a few processes are generally visible to the user, this means that + * the service should not be killed except in low memory conditions. However, since + * the user is not directly aware of a background service, in that state it is + * considered a valid candidate to kill, and you should be prepared for this to + * happen. In particular, long-running services will be increasingly likely to + * kill and are guaranteed to be killed (and restarted if appropriate) if they + * remain started long enough. + *

    • If there are clients bound to the service, then the service's hosting + * process is never less important than the most important client. That is, + * if one of its clients is visible to the user, then the service itself is + * considered to be visible. The way a client's importance impacts the service's + * importance can be adjusted through {@link Context#BIND_ABOVE_CLIENT}, + * {@link Context#BIND_ALLOW_OOM_MANAGEMENT}, {@link Context#BIND_WAIVE_PRIORITY}, + * {@link Context#BIND_IMPORTANT}, and {@link Context#BIND_ADJUST_WITH_ACTIVITY}. + *

    • A started service can use the {@link #startForeground(int, Notification)} + * API to put the service in a foreground state, where the system considers + * it to be something the user is actively aware of and thus not a candidate + * for killing when low on memory. (It is still theoretically possible for + * the service to be killed under extreme memory pressure from the current + * foreground application, but in practice this should not be a concern.) + *

    + * + *

    Note this means that most of the time your service is running, it may + * be killed by the system if it is under heavy memory pressure. If this + * happens, the system will later try to restart the service. An important + * consequence of this is that if you implement {@link #onStartCommand onStartCommand()} + * to schedule work to be done asynchronously or in another thread, then you + * may want to use {@link #START_FLAG_REDELIVERY} to have the system + * re-deliver an Intent for you so that it does not get lost if your service + * is killed while processing it. + * + *

    Other application components running in the same process as the service + * (such as an {@link android.app.Activity}) can, of course, increase the + * importance of the overall + * process beyond just the importance of the service itself. + * + * + *

    Local Service Sample

    + * + *

    One of the most common uses of a Service is as a secondary component + * running alongside other parts of an application, in the same process as + * the rest of the components. All components of an .apk run in the same + * process unless explicitly stated otherwise, so this is a typical situation. + * + *

    When used in this way, by assuming the + * components are in the same process, you can greatly simplify the interaction + * between them: clients of the service can simply cast the IBinder they + * receive from it to a concrete class published by the service. + * + *

    An example of this use of a Service is shown here. First is the Service + * itself, publishing a custom class when bound: + * + * {@sample development/samples/ApiDemos/src/com/example/android/apis/app/LocalService.java + * service} + * + *

    With that done, one can now write client code that directly accesses the + * running service, such as: + * + * {@sample development/samples/ApiDemos/src/com/example/android/apis/app/LocalServiceActivities.java + * bind} + * + * + *

    Remote Messenger Service Sample

    + * + *

    If you need to be able to write a Service that can perform complicated + * communication with clients in remote processes (beyond simply the use of + * {@link Context#startService(Intent) Context.startService} to send + * commands to it), then you can use the {@link android.os.Messenger} class + * instead of writing full AIDL files. + * + *

    An example of a Service that uses Messenger as its client interface + * is shown here. First is the Service itself, publishing a Messenger to + * an internal Handler when bound: + * + * {@sample development/samples/ApiDemos/src/com/example/android/apis/app/MessengerService.java + * service} + * + *

    If we want to make this service run in a remote process (instead of the + * standard one for its .apk), we can use android:process in its + * manifest tag to specify one: + * + * {@sample development/samples/ApiDemos/AndroidManifest.xml remote_service_declaration} + * + *

    Note that the name "remote" chosen here is arbitrary, and you can use + * other names if you want additional processes. The ':' prefix appends the + * name to your package's standard process name. + * + *

    With that done, clients can now bind to the service and send messages + * to it. Note that this allows clients to register with it to receive + * messages back as well: + * + * {@sample development/samples/ApiDemos/src/com/example/android/apis/app/MessengerServiceActivities.java + * bind} + */ +public abstract class Service extends ContextWrapper { + /** + * Called by the system when the service is first created. Do not call this method directly. + */ + public void onCreate() { + } + + /** + * @deprecated Implement {@link #onStartCommand(Intent, int, int)} instead. + */ + @Deprecated + public void onStart(Intent intent, int startId) { + } + + /** + * Called by the system every time a client explicitly starts the service by calling + * {@link android.content.Context#startService}, providing the arguments it supplied and a + * unique integer token representing the start request. Do not call this method directly. + * + *

    For backwards compatibility, the default implementation calls + * {@link #onStart} and returns either {@link #START_STICKY} + * or {@link #START_STICKY_COMPATIBILITY}. + * + *

    Note that the system calls this on your + * service's main thread. A service's main thread is the same + * thread where UI operations take place for Activities running in the + * same process. You should always avoid stalling the main + * thread's event loop. When doing long-running operations, + * network calls, or heavy disk I/O, you should kick off a new + * thread, or use {@link android.os.AsyncTask}.

    + * + * @param intent The Intent supplied to {@link android.content.Context#startService}, + * as given. This may be null if the service is being restarted after + * its process has gone away, and it had previously returned anything + * except {@link #START_STICKY_COMPATIBILITY}. + * @param flags Additional data about this start request. + * @param startId A unique integer representing this specific request to + * start. Use with {@link #stopSelfResult(int)}. + * + * @return The return value indicates what semantics the system should + * use for the service's current started state. It may be one of the + * constants associated with the {@link #START_CONTINUATION_MASK} bits. + * + * @see #stopSelfResult(int) + */ + public int onStartCommand(Intent intent, int flags, int startId) { + return -1; + } + + /** + * Called by the system to notify a Service that it is no longer used and is being removed. The + * service should clean up any resources it holds (threads, registered + * receivers, etc) at this point. Upon return, there will be no more calls + * in to this Service object and it is effectively dead. Do not call this method directly. + */ + public void onDestroy() { + } +} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/content/ComponentName.java b/java/ql/test/stubs/google-android-9.0.0/android/content/ComponentName.java new file mode 100644 index 00000000000..adb50343ca4 --- /dev/null +++ b/java/ql/test/stubs/google-android-9.0.0/android/content/ComponentName.java @@ -0,0 +1,29 @@ +/* + * Copyright (C) 2006 The Android Open Source Project + * + * 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. + */ +package android.content; + +/** + * Identifier for a specific application component + * ({@link android.app.Activity}, {@link android.app.Service}, + * {@link android.content.BroadcastReceiver}, or + * {@link android.content.ContentProvider}) that is available. Two + * pieces of information, encapsulated here, are required to identify + * a component: the package (a String) it exists in, and the class (a String) + * name inside of that package. + * + */ +public final class ComponentName { +} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/content/Context.java b/java/ql/test/stubs/google-android-9.0.0/android/content/Context.java index 6507cbd371d..8ddd1f2c8ef 100644 --- a/java/ql/test/stubs/google-android-9.0.0/android/content/Context.java +++ b/java/ql/test/stubs/google-android-9.0.0/android/content/Context.java @@ -961,4 +961,91 @@ public abstract class Context { * @see #sendOrderedBroadcast(Intent, String, BroadcastReceiver, Handler, int, String, Bundle) */ public abstract void sendOrderedBroadcast(Intent intent, String receiverPermission); -} \ No newline at end of file + + /** + * Request that a given application service be started. The Intent + * should either contain the complete class name of a specific service + * implementation to start, or a specific package name to target. If the + * Intent is less specified, it logs a warning about this. In this case any of the + * multiple matching services may be used. If this service + * is not already running, it will be instantiated and started (creating a + * process for it if needed); if it is running then it remains running. + * + *

    Every call to this method will result in a corresponding call to + * the target service's {@link android.app.Service#onStartCommand} method, + * with the intent given here. This provides a convenient way + * to submit jobs to a service without having to bind and call on to its + * interface. + * + *

    Using startService() overrides the default service lifetime that is + * managed by {@link #bindService}: it requires the service to remain + * running until {@link #stopService} is called, regardless of whether + * any clients are connected to it. Note that calls to startService() + * do not nest: no matter how many times you call startService(), + * a single call to {@link #stopService} will stop it. + * + *

    The system attempts to keep running services around as much as + * possible. The only time they should be stopped is if the current + * foreground application is using so many resources that the service needs + * to be killed. If any errors happen in the service's process, it will + * automatically be restarted. + * + *

    This function will throw {@link SecurityException} if you do not + * have permission to start the given service. + * + *

    Note: Each call to startService() + * results in significant work done by the system to manage service + * lifecycle surrounding the processing of the intent, which can take + * multiple milliseconds of CPU time. Due to this cost, startService() + * should not be used for frequent intent delivery to a service, and only + * for scheduling significant work. Use {@link #bindService bound services} + * for high frequency calls. + *

    + * + * @param service Identifies the service to be started. The Intent must be + * fully explicit (supplying a component name). Additional values + * may be included in the Intent extras to supply arguments along with + * this specific start call. + * + * @return If the service is being started or is already running, the + * {@link ComponentName} of the actual service that was started is + * returned; else if the service does not exist null is returned. + * + * @throws SecurityException If the caller does not have permission to access the service + * or the service can not be found. + * @throws IllegalStateException If the application is in a state where the service + * can not be started (such as not in the foreground in a state when services are allowed). + * + * @see #stopService + * @see #bindService + */ + public abstract ComponentName startService(Intent service); + + /** + * Similar to {@link #startService(Intent)}, but with an implicit promise that the + * Service will call {@link android.app.Service#startForeground(int, android.app.Notification) + * startForeground(int, android.app.Notification)} once it begins running. The service is given + * an amount of time comparable to the ANR interval to do this, otherwise the system + * will automatically stop the service and declare the app ANR. + * + *

    Unlike the ordinary {@link #startService(Intent)}, this method can be used + * at any time, regardless of whether the app hosting the service is in a foreground + * state. + * + * @param service Identifies the service to be started. The Intent must be + * fully explicit (supplying a component name). Additional values + * may be included in the Intent extras to supply arguments along with + * this specific start call. + * + * @return If the service is being started or is already running, the + * {@link ComponentName} of the actual service that was started is + * returned; else if the service does not exist null is returned. + * + * @throws SecurityException If the caller does not have permission to access the service + * or the service can not be found. + * + * @see #stopService + * @see android.app.Service#startForeground(int, android.app.Notification) + */ + public abstract ComponentName startForegroundService(Intent service); +} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/content/ContextWrapper.java b/java/ql/test/stubs/google-android-9.0.0/android/content/ContextWrapper.java new file mode 100644 index 00000000000..d3e23384cbd --- /dev/null +++ b/java/ql/test/stubs/google-android-9.0.0/android/content/ContextWrapper.java @@ -0,0 +1,186 @@ +/* + * Copyright (C) 2006 The Android Open Source Project + * + * 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. + */ +package android.content; + +import java.io.File; +import android.os.Bundle; + +/** + * Proxying implementation of Context that simply delegates all of its calls to + * another Context. Can be subclassed to modify behavior without changing + * the original Context. + */ +public class ContextWrapper extends Context { + public ContextWrapper() { + } + + public ContextWrapper(Context base) { + } + + @Override + public Context getApplicationContext() { + return null; + } + + @Override + public File getFileStreamPath(String name) { + return null; + } + + @Override + public SharedPreferences getSharedPreferences(String name, int mode) { + return null; + } + + @Override + public File getSharedPrefsFile(String name) { + return null; + } + + @Override + public String[] fileList() { + return null; + } + + @Override + public File getDataDir() { + return null; + } + + @Override + public File getFilesDir() { + return null; + } + + @Override + public File getNoBackupFilesDir() { + return null; + } + + @Override + public File getExternalFilesDir(String type) { + return null; + } + + @Override + public File[] getExternalFilesDirs(String type) { + return null; + } + + @Override + public File getObbDir() { + return null; + } + + @Override + public File[] getObbDirs() { + return null; + } + + @Override + public File getCacheDir() { + return null; + } + + @Override + public File getCodeCacheDir() { + return null; + } + + @Override + public File getExternalCacheDir() { + return null; + } + + @Override + public File[] getExternalCacheDirs() { + return null; + } + + @Override + public File[] getExternalMediaDirs() { + return null; + } + + @Override + public File getDir(String name, int mode) { + return null; + } + + /** @hide **/ + @Override + public File getPreloadsFileCache() { + return null; + } + + @Override + public void startActivity(Intent intent) { + } + + /** @hide **/ + public void startActivityForResult( + String who, Intent intent, int requestCode, Bundle options) { + } + + /** @hide **/ + public boolean canStartActivityForResult() { + return false; + } + @Override + + public void startActivity(Intent intent, Bundle options) { + } + + @Override + public void startActivities(Intent[] intents) { + } + + @Override + public void startActivities(Intent[] intents, Bundle options) { + } + + @Override + public void sendBroadcast(Intent intent) { + } + + @Override + public void sendBroadcast(Intent intent, String receiverPermission) { + } + + @Override + public void sendBroadcastWithMultiplePermissions(Intent intent, String[] receiverPermissions) { + } + + /** @hide */ + @Override + public void sendBroadcast(Intent intent, String receiverPermission, int appOp) { + } + + @Override + public void sendOrderedBroadcast(Intent intent, + String receiverPermission) { + } + + @Override + public ComponentName startService(Intent service) { + return null; + } + + @Override + public ComponentName startForegroundService(Intent service) { + return null; + } +} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/content/Intent.java b/java/ql/test/stubs/google-android-9.0.0/android/content/Intent.java index 09422c7a48a..03004b437d2 100644 --- a/java/ql/test/stubs/google-android-9.0.0/android/content/Intent.java +++ b/java/ql/test/stubs/google-android-9.0.0/android/content/Intent.java @@ -723,6 +723,511 @@ import java.util.Set; */ public class Intent implements Parcelable, Cloneable { + /** + * Activity Action: Start as a main entry point, does not expect to + * receive data. + *

    Input: nothing + *

    Output: nothing + */ + public static final String ACTION_MAIN = "android.intent.action.MAIN"; + + /** + * Activity Action: Display the data to the user. This is the most common + * action performed on data -- it is the generic action you can use on + * a piece of data to get the most reasonable thing to occur. For example, + * when used on a contacts entry it will view the entry; when used on a + * mailto: URI it will bring up a compose window filled with the information + * supplied by the URI; when used with a tel: URI it will invoke the + * dialer. + *

    Input: {@link #getData} is URI from which to retrieve data. + *

    Output: nothing. + */ + public static final String ACTION_VIEW = "android.intent.action.VIEW"; + + /** + * A synonym for {@link #ACTION_VIEW}, the "standard" action that is + * performed on a piece of data. + */ + public static final String ACTION_DEFAULT = ACTION_VIEW; + + /** + * Used to indicate that some piece of data should be attached to some other + * place. For example, image data could be attached to a contact. It is up + * to the recipient to decide where the data should be attached; the intent + * does not specify the ultimate destination. + *

    Input: {@link #getData} is URI of data to be attached. + *

    Output: nothing. + */ + public static final String ACTION_ATTACH_DATA = "android.intent.action.ATTACH_DATA"; + + /** + * Activity Action: Provide explicit editable access to the given data. + *

    Input: {@link #getData} is URI of data to be edited. + *

    Output: nothing. + */ + public static final String ACTION_EDIT = "android.intent.action.EDIT"; + + /** + * Activity Action: Pick an existing item, or insert a new item, and then edit it. + *

    Input: {@link #getType} is the desired MIME type of the item to create or edit. + * The extras can contain type specific data to pass through to the editing/creating + * activity. + *

    Output: The URI of the item that was picked. This must be a content: + * URI so that any receiver can access it. + */ + public static final String ACTION_INSERT_OR_EDIT = "android.intent.action.INSERT_OR_EDIT"; + + /** + * Activity Action: Pick an item from the data, returning what was selected. + *

    Input: {@link #getData} is URI containing a directory of data + * (vnd.android.cursor.dir/*) from which to pick an item. + *

    Output: The URI of the item that was picked. + */ + public static final String ACTION_PICK = "android.intent.action.PICK"; + + /** + * Activity Action: Creates a shortcut. + *

    Input: Nothing.

    + *

    Output: An Intent representing the shortcut. The intent must contain three + * extras: SHORTCUT_INTENT (value: Intent), SHORTCUT_NAME (value: String), + * and SHORTCUT_ICON (value: Bitmap) or SHORTCUT_ICON_RESOURCE + * (value: ShortcutIconResource).

    + * + * @see #EXTRA_SHORTCUT_INTENT + * @see #EXTRA_SHORTCUT_NAME + * @see #EXTRA_SHORTCUT_ICON + * @see #EXTRA_SHORTCUT_ICON_RESOURCE + * @see android.content.Intent.ShortcutIconResource + */ + public static final String ACTION_CREATE_SHORTCUT = "android.intent.action.CREATE_SHORTCUT"; + + /** + * Activity Action: Display an activity chooser, allowing the user to pick + * what they want to before proceeding. This can be used as an alternative + * to the standard activity picker that is displayed by the system when + * you try to start an activity with multiple possible matches, with these + * differences in behavior: + *
      + *
    • You can specify the title that will appear in the activity chooser. + *
    • The user does not have the option to make one of the matching + * activities a preferred activity, and all possible activities will + * always be shown even if one of them is currently marked as the + * preferred activity. + *
    + *

    + * This action should be used when the user will naturally expect to + * select an activity in order to proceed. An example if when not to use + * it is when the user clicks on a "mailto:" link. They would naturally + * expect to go directly to their mail app, so startActivity() should be + * called directly: it will + * either launch the current preferred app, or put up a dialog allowing the + * user to pick an app to use and optionally marking that as preferred. + *

    + * In contrast, if the user is selecting a menu item to send a picture + * they are viewing to someone else, there are many different things they + * may want to do at this point: send it through e-mail, upload it to a + * web service, etc. In this case the CHOOSER action should be used, to + * always present to the user a list of the things they can do, with a + * nice title given by the caller such as "Send this photo with:". + *

    + * As a convenience, an Intent of this form can be created with the + * {@link #createChooser} function. + *

    Input: No data should be specified. get*Extra must have + * a {@link #EXTRA_INTENT} field containing the Intent being executed, + * and can optionally have a {@link #EXTRA_TITLE} field containing the + * title text to display in the chooser. + *

    Output: Depends on the protocol of {@link #EXTRA_INTENT}. + */ + public static final String ACTION_CHOOSER = "android.intent.action.CHOOSER"; + + /** + * Convenience function for creating a {@link #ACTION_CHOOSER} Intent. + * + * @param target The Intent that the user will be selecting an activity + * to perform. + * @param title Optional title that will be displayed in the chooser. + * @return Return a new Intent object that you can hand to + * {@link Context#startActivity(Intent) Context.startActivity()} and + * related methods. + */ + public static Intent createChooser(Intent target, CharSequence title) { + return null; + } + + /** + * Activity Action: Allow the user to select a particular kind of data and + * return it. This is different than {@link #ACTION_PICK} in that here we + * just say what kind of data is desired, not a URI of existing data from + * which the user can pick. A ACTION_GET_CONTENT could allow the user to + * create the data as it runs (for example taking a picture or recording a + * sound), let them browse over the web and download the desired data, + * etc. + *

    + * There are two main ways to use this action: if you want a specific kind + * of data, such as a person contact, you set the MIME type to the kind of + * data you want and launch it with {@link Context#startActivity(Intent)}. + * The system will then launch the best application to select that kind + * of data for you. + *

    + * You may also be interested in any of a set of types of content the user + * can pick. For example, an e-mail application that wants to allow the + * user to add an attachment to an e-mail message can use this action to + * bring up a list of all of the types of content the user can attach. + *

    + * In this case, you should wrap the GET_CONTENT intent with a chooser + * (through {@link #createChooser}), which will give the proper interface + * for the user to pick how to send your data and allow you to specify + * a prompt indicating what they are doing. You will usually specify a + * broad MIME type (such as image/* or {@literal *}/*), resulting in a + * broad range of content types the user can select from. + *

    + * When using such a broad GET_CONTENT action, it is often desirable to + * only pick from data that can be represented as a stream. This is + * accomplished by requiring the {@link #CATEGORY_OPENABLE} in the Intent. + *

    + * Callers can optionally specify {@link #EXTRA_LOCAL_ONLY} to request that + * the launched content chooser only returns results representing data that + * is locally available on the device. For example, if this extra is set + * to true then an image picker should not show any pictures that are available + * from a remote server but not already on the local device (thus requiring + * they be downloaded when opened). + *

    + * Input: {@link #getType} is the desired MIME type to retrieve. Note + * that no URI is supplied in the intent, as there are no constraints on + * where the returned data originally comes from. You may also include the + * {@link #CATEGORY_OPENABLE} if you can only accept data that can be + * opened as a stream. You may use {@link #EXTRA_LOCAL_ONLY} to limit content + * selection to local data. + *

    + * Output: The URI of the item that was picked. This must be a content: + * URI so that any receiver can access it. + */ + public static final String ACTION_GET_CONTENT = "android.intent.action.GET_CONTENT"; + + /** + * Activity Action: Dial a number as specified by the data. This shows a + * UI with the number being dialed, allowing the user to explicitly + * initiate the call. + *

    Input: If nothing, an empty dialer is started; else {@link #getData} + * is URI of a phone number to be dialed or a tel: URI of an explicit phone + * number. + *

    Output: nothing. + */ + public static final String ACTION_DIAL = "android.intent.action.DIAL"; + + /** + * Activity Action: Perform a call to someone specified by the data. + *

    Input: If nothing, an empty dialer is started; else {@link #getData} + * is URI of a phone number to be dialed or a tel: URI of an explicit phone + * number. + *

    Output: nothing. + * + *

    Note: there will be restrictions on which applications can initiate a + * call; most applications should use the {@link #ACTION_DIAL}. + *

    Note: this Intent cannot be used to call emergency + * numbers. Applications can dial emergency numbers using + * {@link #ACTION_DIAL}, however. + */ + public static final String ACTION_CALL = "android.intent.action.CALL"; + + /** + * Activity Action: Perform a call to an emergency number specified by the + * data. + *

    Input: {@link #getData} is URI of a phone number to be dialed or a + * tel: URI of an explicit phone number. + *

    Output: nothing. + * @hide + */ + public static final String ACTION_CALL_EMERGENCY = "android.intent.action.CALL_EMERGENCY"; + + /** + * Activity action: Perform a call to any number (emergency or not) + * specified by the data. + *

    Input: {@link #getData} is URI of a phone number to be dialed or a + * tel: URI of an explicit phone number. + *

    Output: nothing. + * @hide + */ + public static final String ACTION_CALL_PRIVILEGED = "android.intent.action.CALL_PRIVILEGED"; + + /** + * Activity Action: Send a message to someone specified by the data. + *

    Input: {@link #getData} is URI describing the target. + *

    Output: nothing. + */ + public static final String ACTION_SENDTO = "android.intent.action.SENDTO"; + + /** + * Activity Action: Deliver some data to someone else. Who the data is + * being delivered to is not specified; it is up to the receiver of this + * action to ask the user where the data should be sent. + *

    + * When launching a SEND intent, you should usually wrap it in a chooser + * (through {@link #createChooser}), which will give the proper interface + * for the user to pick how to send your data and allow you to specify + * a prompt indicating what they are doing. + *

    + * Input: {@link #getType} is the MIME type of the data being sent. + * get*Extra can have either a {@link #EXTRA_TEXT} + * or {@link #EXTRA_STREAM} field, containing the data to be sent. If + * using EXTRA_TEXT, the MIME type should be "text/plain"; otherwise it + * should be the MIME type of the data in EXTRA_STREAM. Use {@literal *}/* + * if the MIME type is unknown (this will only allow senders that can + * handle generic data streams). + *

    + * Optional standard extras, which may be interpreted by some recipients as + * appropriate, are: {@link #EXTRA_EMAIL}, {@link #EXTRA_CC}, + * {@link #EXTRA_BCC}, {@link #EXTRA_SUBJECT}. + *

    + * Output: nothing. + */ + public static final String ACTION_SEND = "android.intent.action.SEND"; + + /** + * Activity Action: Deliver multiple data to someone else. + *

    + * Like ACTION_SEND, except the data is multiple. + *

    + * Input: {@link #getType} is the MIME type of the data being sent. + * get*ArrayListExtra can have either a {@link #EXTRA_TEXT} or {@link + * #EXTRA_STREAM} field, containing the data to be sent. + *

    + * Multiple types are supported, and receivers should handle mixed types + * whenever possible. The right way for the receiver to check them is to + * use the content resolver on each URI. The intent sender should try to + * put the most concrete mime type in the intent type, but it can fall + * back to {@literal /*} or {@literal *}/* as needed. + *

    + * e.g. if you are sending image/jpg and image/jpg, the intent's type can + * be image/jpg, but if you are sending image/jpg and image/png, then the + * intent's type should be image/*. + *

    + * Optional standard extras, which may be interpreted by some recipients as + * appropriate, are: {@link #EXTRA_EMAIL}, {@link #EXTRA_CC}, + * {@link #EXTRA_BCC}, {@link #EXTRA_SUBJECT}. + *

    + * Output: nothing. + */ + public static final String ACTION_SEND_MULTIPLE = "android.intent.action.SEND_MULTIPLE"; + + /** + * Activity Action: Handle an incoming phone call. + *

    Input: nothing. + *

    Output: nothing. + */ + public static final String ACTION_ANSWER = "android.intent.action.ANSWER"; + + /** + * Activity Action: Insert an empty item into the given container. + *

    Input: {@link #getData} is URI of the directory (vnd.android.cursor.dir/*) + * in which to place the data. + *

    Output: URI of the new data that was created. + */ + public static final String ACTION_INSERT = "android.intent.action.INSERT"; + + /** + * Activity Action: Create a new item in the given container, initializing it + * from the current contents of the clipboard. + *

    Input: {@link #getData} is URI of the directory (vnd.android.cursor.dir/*) + * in which to place the data. + *

    Output: URI of the new data that was created. + */ + public static final String ACTION_PASTE = "android.intent.action.PASTE"; + + /** + * Activity Action: Delete the given data from its container. + *

    Input: {@link #getData} is URI of data to be deleted. + *

    Output: nothing. + */ + public static final String ACTION_DELETE = "android.intent.action.DELETE"; + /** + * Activity Action: Run the data, whatever that means. + *

    Input: ? (Note: this is currently specific to the test harness.) + *

    Output: nothing. + */ + public static final String ACTION_RUN = "android.intent.action.RUN"; + + /** + * Activity Action: Perform a data synchronization. + *

    Input: ? + *

    Output: ? + */ + public static final String ACTION_SYNC = "android.intent.action.SYNC"; + + /** + * Activity Action: Pick an activity given an intent, returning the class + * selected. + *

    Input: get*Extra field {@link #EXTRA_INTENT} is an Intent + * used with {@link PackageManager#queryIntentActivities} to determine the + * set of activities from which to pick. + *

    Output: Class name of the activity that was selected. + */ + public static final String ACTION_PICK_ACTIVITY = "android.intent.action.PICK_ACTIVITY"; + + /** + * Activity Action: Perform a search. + *

    Input: {@link android.app.SearchManager#QUERY getStringExtra(SearchManager.QUERY)} + * is the text to search for. If empty, simply + * enter your search results Activity with the search UI activated. + *

    Output: nothing. + */ + public static final String ACTION_SEARCH = "android.intent.action.SEARCH"; + + /** + * Activity Action: Start the platform-defined tutorial + *

    Input: {@link android.app.SearchManager#QUERY getStringExtra(SearchManager.QUERY)} + * is the text to search for. If empty, simply + * enter your search results Activity with the search UI activated. + *

    Output: nothing. + */ + public static final String ACTION_SYSTEM_TUTORIAL = "android.intent.action.SYSTEM_TUTORIAL"; + + /** + * Activity Action: Perform a web search. + *

    + * Input: {@link android.app.SearchManager#QUERY + * getStringExtra(SearchManager.QUERY)} is the text to search for. If it is + * a url starts with http or https, the site will be opened. If it is plain + * text, Google search will be applied. + *

    + * Output: nothing. + */ + public static final String ACTION_WEB_SEARCH = "android.intent.action.WEB_SEARCH"; + + /** + * Activity Action: List all available applications + *

    Input: Nothing. + *

    Output: nothing. + */ + public static final String ACTION_ALL_APPS = "android.intent.action.ALL_APPS"; + + /** + * Activity Action: Show settings for choosing wallpaper + *

    Input: Nothing. + *

    Output: Nothing. + */ + public static final String ACTION_SET_WALLPAPER = "android.intent.action.SET_WALLPAPER"; + + /** + * Activity Action: Show activity for reporting a bug. + *

    Input: Nothing. + *

    Output: Nothing. + */ + public static final String ACTION_BUG_REPORT = "android.intent.action.BUG_REPORT"; + + /** + * Activity Action: Main entry point for factory tests. Only used when + * the device is booting in factory test node. The implementing package + * must be installed in the system image. + *

    Input: nothing + *

    Output: nothing + */ + public static final String ACTION_FACTORY_TEST = "android.intent.action.FACTORY_TEST"; + + /** + * Activity Action: The user pressed the "call" button to go to the dialer + * or other appropriate UI for placing a call. + *

    Input: Nothing. + *

    Output: Nothing. + */ + public static final String ACTION_CALL_BUTTON = "android.intent.action.CALL_BUTTON"; + + /** + * Activity Action: Start Voice Command. + *

    Input: Nothing. + *

    Output: Nothing. + */ + public static final String ACTION_VOICE_COMMAND = "android.intent.action.VOICE_COMMAND"; + + /** + * Activity Action: Start action associated with long pressing on the + * search key. + *

    Input: Nothing. + *

    Output: Nothing. + */ + public static final String ACTION_SEARCH_LONG_PRESS = "android.intent.action.SEARCH_LONG_PRESS"; + + /** + * Activity Action: The user pressed the "Report" button in the crash/ANR dialog. + * This intent is delivered to the package which installed the application, usually + * Google Play. + *

    Input: No data is specified. The bug report is passed in using + * an {@link #EXTRA_BUG_REPORT} field. + *

    Output: Nothing. + * + * @see #EXTRA_BUG_REPORT + */ + public static final String ACTION_APP_ERROR = "android.intent.action.APP_ERROR"; + + /** + * Activity Action: Show power usage information to the user. + *

    Input: Nothing. + *

    Output: Nothing. + */ + public static final String ACTION_POWER_USAGE_SUMMARY = "android.intent.action.POWER_USAGE_SUMMARY"; + + /** + * Activity Action: Setup wizard to launch after a platform update. This + * activity should have a string meta-data field associated with it, + * {@link #METADATA_SETUP_VERSION}, which defines the current version of + * the platform for setup. The activity will be launched only if + * {@link android.provider.Settings.Secure#LAST_SETUP_SHOWN} is not the + * same value. + *

    Input: Nothing. + *

    Output: Nothing. + * @hide + */ + public static final String ACTION_UPGRADE_SETUP = "android.intent.action.UPGRADE_SETUP"; + + /** + * Activity Action: Show settings for managing network data usage of a + * specific application. Applications should define an activity that offers + * options to control data usage. + */ + public static final String ACTION_MANAGE_NETWORK_USAGE = + "android.intent.action.MANAGE_NETWORK_USAGE"; + + /** + * Activity Action: Launch application installer. + *

    + * Input: The data must be a content: or file: URI at which the application + * can be retrieved. You can optionally supply + * {@link #EXTRA_INSTALLER_PACKAGE_NAME}, {@link #EXTRA_NOT_UNKNOWN_SOURCE}, + * {@link #EXTRA_ALLOW_REPLACE}, and {@link #EXTRA_RETURN_RESULT}. + *

    + * Output: If {@link #EXTRA_RETURN_RESULT}, returns whether the install + * succeeded. + * + * @see #EXTRA_INSTALLER_PACKAGE_NAME + * @see #EXTRA_NOT_UNKNOWN_SOURCE + * @see #EXTRA_RETURN_RESULT + */ + public static final String ACTION_INSTALL_PACKAGE = "android.intent.action.INSTALL_PACKAGE"; + + /** + * Used as a boolean extra field with {@link #ACTION_INSTALL_PACKAGE} to install a + * package. Tells the installer UI to skip the confirmation with the user + * if the .apk is replacing an existing one. + */ + public static final String EXTRA_ALLOW_REPLACE + = "android.intent.extra.ALLOW_REPLACE"; + + /** + * Extra used to indicate that an intent can allow the user to select and return multiple items. + * This is a boolean extra; the default is false. If true, an implementation is allowed to present + * the user with a UI where they can pick multiple items that are all returned to the caller. + * When this happens, they should be returned as the getClipData() part of the result Intent. + */ + public static final String EXTRA_ALLOW_MULTIPLE + = "android.intent.extra.ALLOW_MULTIPLE"; + + /** + * Used to indicate that a GET_CONTENT intent only wants URIs that can be opened with + * ContentResolver.openInputStream. Openable URIs must support the columns in OpenableColumns + * when queried, though it is allowable for those columns to be blank. + */ + public static final String CATEGORY_OPENABLE = "android.intent.category.OPENABLE"; + /** * Create an empty intent. */ @@ -1407,6 +1912,35 @@ public class Intent implements Parcelable, Cloneable { return null; } + /** + * Set an explicit MIME data type. + * + *

    This is used to create intents that only specify a type and not data, + * for example to indicate the type of data to return. + * + *

    This method automatically clears any data that was + * previously set (for example by {@link #setData}). + * + *

    Note: MIME type matching in the Android framework is + * case-sensitive, unlike formal RFC MIME types. As a result, + * you should always write your MIME types with lower case letters, + * or use {@link #normalizeMimeType} or {@link #setTypeAndNormalize} + * to ensure that it is converted to lower case. + * + * @param type The MIME type of the data being handled by this intent. + * + * @return Returns the same Intent object, for chaining multiple calls + * into a single statement. + * + * @see #getType + * @see #setTypeAndNormalize + * @see #setDataAndType + * @see #normalizeMimeType + */ + public Intent setType(String type) { + return null; + } + /** * Add extended data to the intent. The name must include a package prefix, for * example the app com.android.contacts would use names like @@ -2071,4 +2605,23 @@ public class Intent implements Parcelable, Cloneable { return null; } + /** + * Add a new category to the intent. Categories provide additional detail + * about the action the intent performs. When resolving an intent, only + * activities that provide all of the requested categories will be + * used. + * + * @param category The desired category. This can be either one of the + * predefined Intent categories, or a custom category in your own + * namespace. + * + * @return Returns the same Intent object, for chaining multiple calls + * into a single statement. + * + * @see #hasCategory + * @see #removeCategory + */ + public Intent addCategory(String category) { + return null; + } } diff --git a/java/ql/test/stubs/google-android-9.0.0/android/os/AsyncTask.java b/java/ql/test/stubs/google-android-9.0.0/android/os/AsyncTask.java new file mode 100644 index 00000000000..23ca3179bbc --- /dev/null +++ b/java/ql/test/stubs/google-android-9.0.0/android/os/AsyncTask.java @@ -0,0 +1,406 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * 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. + */ +package android.os; + +import java.util.concurrent.ExecutionException; +import java.util.concurrent.Executor; + +/** + *

    AsyncTask enables proper and easy use of the UI thread. This class allows you + * to perform background operations and publish results on the UI thread without + * having to manipulate threads and/or handlers.

    + * + *

    AsyncTask is designed to be a helper class around {@link Thread} and {@link Handler} + * and does not constitute a generic threading framework. AsyncTasks should ideally be + * used for short operations (a few seconds at the most.) If you need to keep threads + * running for long periods of time, it is highly recommended you use the various APIs + * provided by the java.util.concurrent package such as {@link Executor}, + * {@link ThreadPoolExecutor} and {@link FutureTask}.

    + * + *

    An asynchronous task is defined by a computation that runs on a background thread and + * whose result is published on the UI thread. An asynchronous task is defined by 3 generic + * types, called Params, Progress and Result, + * and 4 steps, called onPreExecute, doInBackground, + * onProgressUpdate and onPostExecute.

    + * + *
    + *

    Developer Guides

    + *

    For more information about using tasks and threads, read the + * Processes and + * Threads developer guide.

    + *
    + * + *

    Usage

    + *

    AsyncTask must be subclassed to be used. The subclass will override at least + * one method ({@link #doInBackground}), and most often will override a + * second one ({@link #onPostExecute}.)

    + * + *

    Here is an example of subclassing:

    + *
    + * private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> {
    + *     protected Long doInBackground(URL... urls) {
    + *         int count = urls.length;
    + *         long totalSize = 0;
    + *         for (int i = 0; i < count; i++) {
    + *             totalSize += Downloader.downloadFile(urls[i]);
    + *             publishProgress((int) ((i / (float) count) * 100));
    + *             // Escape early if cancel() is called
    + *             if (isCancelled()) break;
    + *         }
    + *         return totalSize;
    + *     }
    + *
    + *     protected void onProgressUpdate(Integer... progress) {
    + *         setProgressPercent(progress[0]);
    + *     }
    + *
    + *     protected void onPostExecute(Long result) {
    + *         showDialog("Downloaded " + result + " bytes");
    + *     }
    + * }
    + * 
    + * + *

    Once created, a task is executed very simply:

    + *
    + * new DownloadFilesTask().execute(url1, url2, url3);
    + * 
    + * + *

    AsyncTask's generic types

    + *

    The three types used by an asynchronous task are the following:

    + *
      + *
    1. Params, the type of the parameters sent to the task upon + * execution.
    2. + *
    3. Progress, the type of the progress units published during + * the background computation.
    4. + *
    5. Result, the type of the result of the background + * computation.
    6. + *
    + *

    Not all types are always used by an asynchronous task. To mark a type as unused, + * simply use the type {@link Void}:

    + *
    + * private class MyTask extends AsyncTask<Void, Void, Void> { ... }
    + * 
    + * + *

    The 4 steps

    + *

    When an asynchronous task is executed, the task goes through 4 steps:

    + *
      + *
    1. {@link #onPreExecute()}, invoked on the UI thread before the task + * is executed. This step is normally used to setup the task, for instance by + * showing a progress bar in the user interface.
    2. + *
    3. {@link #doInBackground}, invoked on the background thread + * immediately after {@link #onPreExecute()} finishes executing. This step is used + * to perform background computation that can take a long time. The parameters + * of the asynchronous task are passed to this step. The result of the computation must + * be returned by this step and will be passed back to the last step. This step + * can also use {@link #publishProgress} to publish one or more units + * of progress. These values are published on the UI thread, in the + * {@link #onProgressUpdate} step.
    4. + *
    5. {@link #onProgressUpdate}, invoked on the UI thread after a + * call to {@link #publishProgress}. The timing of the execution is + * undefined. This method is used to display any form of progress in the user + * interface while the background computation is still executing. For instance, + * it can be used to animate a progress bar or show logs in a text field.
    6. + *
    7. {@link #onPostExecute}, invoked on the UI thread after the background + * computation finishes. The result of the background computation is passed to + * this step as a parameter.
    8. + *
    + * + *

    Cancelling a task

    + *

    A task can be cancelled at any time by invoking {@link #cancel(boolean)}. Invoking + * this method will cause subsequent calls to {@link #isCancelled()} to return true. + * After invoking this method, {@link #onCancelled(Object)}, instead of + * {@link #onPostExecute(Object)} will be invoked after {@link #doInBackground(Object[])} + * returns. To ensure that a task is cancelled as quickly as possible, you should always + * check the return value of {@link #isCancelled()} periodically from + * {@link #doInBackground(Object[])}, if possible (inside a loop for instance.)

    + * + *

    Threading rules

    + *

    There are a few threading rules that must be followed for this class to + * work properly:

    + *
      + *
    • The AsyncTask class must be loaded on the UI thread. This is done + * automatically as of {@link android.os.Build.VERSION_CODES#JELLY_BEAN}.
    • + *
    • The task instance must be created on the UI thread.
    • + *
    • {@link #execute} must be invoked on the UI thread.
    • + *
    • Do not call {@link #onPreExecute()}, {@link #onPostExecute}, + * {@link #doInBackground}, {@link #onProgressUpdate} manually.
    • + *
    • The task can be executed only once (an exception will be thrown if + * a second execution is attempted.)
    • + *
    + * + *

    Memory observability

    + *

    AsyncTask guarantees that all callback calls are synchronized in such a way that the following + * operations are safe without explicit synchronizations.

    + *
      + *
    • Set member fields in the constructor or {@link #onPreExecute}, and refer to them + * in {@link #doInBackground}. + *
    • Set member fields in {@link #doInBackground}, and refer to them in + * {@link #onProgressUpdate} and {@link #onPostExecute}. + *
    + * + *

    Order of execution

    + *

    When first introduced, AsyncTasks were executed serially on a single background + * thread. Starting with {@link android.os.Build.VERSION_CODES#DONUT}, this was changed + * to a pool of threads allowing multiple tasks to operate in parallel. Starting with + * {@link android.os.Build.VERSION_CODES#HONEYCOMB}, tasks are executed on a single + * thread to avoid common application errors caused by parallel execution.

    + *

    If you truly want parallel execution, you can invoke + * {@link #executeOnExecutor(java.util.concurrent.Executor, Object[])} with + * {@link #THREAD_POOL_EXECUTOR}.

    + */ +public abstract class AsyncTask { + /** + * Creates a new asynchronous task. This constructor must be invoked on the UI thread. + */ + public AsyncTask() { + } + + /** + * Override this method to perform a computation on a background thread. The + * specified parameters are the parameters passed to {@link #execute} + * by the caller of this task. + * + * This method can call {@link #publishProgress} to publish updates + * on the UI thread. + * + * @param params The parameters of the task. + * + * @return A result, defined by the subclass of this task. + * + * @see #onPreExecute() + * @see #onPostExecute + * @see #publishProgress + */ + protected abstract Result doInBackground(Params... params); + + /** + * Runs on the UI thread before {@link #doInBackground}. + * + * @see #onPostExecute + * @see #doInBackground + */ + protected void onPreExecute() { + } + + /** + *

    Runs on the UI thread after {@link #doInBackground}. The + * specified result is the value returned by {@link #doInBackground}.

    + * + *

    This method won't be invoked if the task was cancelled.

    + * + * @param result The result of the operation computed by {@link #doInBackground}. + * + * @see #onPreExecute + * @see #doInBackground + * @see #onCancelled(Object) + */ + protected void onPostExecute(Result result) { + } + + /** + * Runs on the UI thread after {@link #publishProgress} is invoked. + * The specified values are the values passed to {@link #publishProgress}. + * + * @param values The values indicating progress. + * + * @see #publishProgress + * @see #doInBackground + */ + protected void onProgressUpdate(Progress... values) { + } + + /** + *

    Runs on the UI thread after {@link #cancel(boolean)} is invoked and + * {@link #doInBackground(Object[])} has finished.

    + * + *

    The default implementation simply invokes {@link #onCancelled()} and + * ignores the result. If you write your own implementation, do not call + * super.onCancelled(result).

    + * + * @param result The result, if any, computed in + * {@link #doInBackground(Object[])}, can be null + * + * @see #cancel(boolean) + * @see #isCancelled() + */ + protected void onCancelled(Result result) { + onCancelled(); + } + + /** + *

    Applications should preferably override {@link #onCancelled(Object)}. + * This method is invoked by the default implementation of + * {@link #onCancelled(Object)}.

    + * + *

    Runs on the UI thread after {@link #cancel(boolean)} is invoked and + * {@link #doInBackground(Object[])} has finished.

    + * + * @see #onCancelled(Object) + * @see #cancel(boolean) + * @see #isCancelled() + */ + protected void onCancelled() { + } + + /** + * Returns true if this task was cancelled before it completed + * normally. If you are calling {@link #cancel(boolean)} on the task, + * the value returned by this method should be checked periodically from + * {@link #doInBackground(Object[])} to end the task as soon as possible. + * + * @return true if task was cancelled before it completed + * + * @see #cancel(boolean) + */ + public final boolean isCancelled() { + return false; + } + + /** + *

    Attempts to cancel execution of this task. This attempt will + * fail if the task has already completed, already been cancelled, + * or could not be cancelled for some other reason. If successful, + * and this task has not started when cancel is called, + * this task should never run. If the task has already started, + * then the mayInterruptIfRunning parameter determines + * whether the thread executing this task should be interrupted in + * an attempt to stop the task.

    + * + *

    Calling this method will result in {@link #onCancelled(Object)} being + * invoked on the UI thread after {@link #doInBackground(Object[])} + * returns. Calling this method guarantees that {@link #onPostExecute(Object)} + * is never invoked. After invoking this method, you should check the + * value returned by {@link #isCancelled()} periodically from + * {@link #doInBackground(Object[])} to finish the task as early as + * possible.

    + * + * @param mayInterruptIfRunning true if the thread executing this + * task should be interrupted; otherwise, in-progress tasks are allowed + * to complete. + * + * @return false if the task could not be cancelled, + * typically because it has already completed normally; + * true otherwise + * + * @see #isCancelled() + * @see #onCancelled(Object) + */ + public final boolean cancel(boolean mayInterruptIfRunning) { + return false; + } + + /** + * Waits if necessary for the computation to complete, and then + * retrieves its result. + * + * @return The computed result. + * + * @throws CancellationException If the computation was cancelled. + * @throws ExecutionException If the computation threw an exception. + * @throws InterruptedException If the current thread was interrupted + * while waiting. + */ + public final Result get() throws InterruptedException, ExecutionException { + return null; + } + + /** + * Executes the task with the specified parameters. The task returns + * itself (this) so that the caller can keep a reference to it. + * + *

    Note: this function schedules the task on a queue for a single background + * thread or pool of threads depending on the platform version. When first + * introduced, AsyncTasks were executed serially on a single background thread. + * Starting with {@link android.os.Build.VERSION_CODES#DONUT}, this was changed + * to a pool of threads allowing multiple tasks to operate in parallel. Starting + * {@link android.os.Build.VERSION_CODES#HONEYCOMB}, tasks are back to being + * executed on a single thread to avoid common application errors caused + * by parallel execution. If you truly want parallel execution, you can use + * the {@link #executeOnExecutor} version of this method + * with {@link #THREAD_POOL_EXECUTOR}; however, see commentary there for warnings + * on its use. + * + *

    This method must be invoked on the UI thread. + * + * @param params The parameters of the task. + * + * @return This instance of AsyncTask. + * + * @throws IllegalStateException If {@link #getStatus()} returns either + * {@link AsyncTask.Status#RUNNING} or {@link AsyncTask.Status#FINISHED}. + * + * @see #executeOnExecutor(java.util.concurrent.Executor, Object[]) + * @see #execute(Runnable) + */ + public final AsyncTask execute(Params... params) { + return null; + } + + /** + * Executes the task with the specified parameters. The task returns + * itself (this) so that the caller can keep a reference to it. + * + *

    This method is typically used with {@link #THREAD_POOL_EXECUTOR} to + * allow multiple tasks to run in parallel on a pool of threads managed by + * AsyncTask, however you can also use your own {@link Executor} for custom + * behavior. + * + *

    Warning: Allowing multiple tasks to run in parallel from + * a thread pool is generally not what one wants, because the order + * of their operation is not defined. For example, if these tasks are used + * to modify any state in common (such as writing a file due to a button click), + * there are no guarantees on the order of the modifications. + * Without careful work it is possible in rare cases for the newer version + * of the data to be over-written by an older one, leading to obscure data + * loss and stability issues. Such changes are best + * executed in serial; to guarantee such work is serialized regardless of + * platform version you can use this function with {@link #SERIAL_EXECUTOR}. + * + *

    This method must be invoked on the UI thread. + * + * @param exec The executor to use. {@link #THREAD_POOL_EXECUTOR} is available as a + * convenient process-wide thread pool for tasks that are loosely coupled. + * @param params The parameters of the task. + * + * @return This instance of AsyncTask. + * + * @throws IllegalStateException If {@link #getStatus()} returns either + * {@link AsyncTask.Status#RUNNING} or {@link AsyncTask.Status#FINISHED}. + * + * @see #execute(Object[]) + */ + public final AsyncTask executeOnExecutor(Executor exec, + Params... params) { + return null; + } + + /** + * This method can be invoked from {@link #doInBackground} to + * publish updates on the UI thread while the background computation is + * still running. Each call to this method will trigger the execution of + * {@link #onProgressUpdate} on the UI thread. + * + * {@link #onProgressUpdate} will not be called if the task has been + * canceled. + * + * @param values The progress values to update the UI with. + * + * @see #onProgressUpdate + * @see #doInBackground + */ + protected final void publishProgress(Progress... values) { + } +} From 02bfa1ca57afd6a06cade438961483ee39ce8c6c Mon Sep 17 00:00:00 2001 From: luchua-bc Date: Fri, 10 Sep 2021 15:04:29 +0000 Subject: [PATCH 722/741] Optimize the query --- .../CWE/CWE-200/AndroidFileIntentSink.qll | 14 ++++-- .../CWE/CWE-200/AndroidFileIntentSource.qll | 2 +- .../CWE/CWE-200/SensitiveAndroidFileLeak.ql | 43 +++++++++---------- .../CWE-200/SensitiveAndroidFileLeak.expected | 12 +++--- 4 files changed, 39 insertions(+), 32 deletions(-) diff --git a/java/ql/src/experimental/Security/CWE/CWE-200/AndroidFileIntentSink.qll b/java/ql/src/experimental/Security/CWE/CWE-200/AndroidFileIntentSink.qll index 95b11e34849..c31a2fb235e 100644 --- a/java/ql/src/experimental/Security/CWE/CWE-200/AndroidFileIntentSink.qll +++ b/java/ql/src/experimental/Security/CWE/CWE-200/AndroidFileIntentSink.qll @@ -19,24 +19,30 @@ class AsyncTask extends RefType { AsyncTask() { this.hasQualifiedName("android.os", "AsyncTask") } } +/** The method that executes `AsyncTask` of Android. */ +abstract class ExecuteAsyncTaskMethod extends Method { + /** Returns index of the parameter that is tainted. */ + abstract int getParamIndex(); +} + /** The `execute` method of Android `AsyncTask`. */ -class AsyncTaskExecuteMethod extends Method { +class AsyncTaskExecuteMethod extends ExecuteAsyncTaskMethod { AsyncTaskExecuteMethod() { this.getDeclaringType().getSourceDeclaration().getASourceSupertype*() instanceof AsyncTask and this.getName() = "execute" } - int getParamIndex() { result = 0 } + override int getParamIndex() { result = 0 } } /** The `executeOnExecutor` method of Android `AsyncTask`. */ -class AsyncTaskExecuteOnExecutorMethod extends Method { +class AsyncTaskExecuteOnExecutorMethod extends ExecuteAsyncTaskMethod { AsyncTaskExecuteOnExecutorMethod() { this.getDeclaringType().getSourceDeclaration().getASourceSupertype*() instanceof AsyncTask and this.getName() = "executeOnExecutor" } - int getParamIndex() { result = 1 } + override int getParamIndex() { result = 1 } } /** The `doInBackground` method of Android `AsyncTask`. */ diff --git a/java/ql/src/experimental/Security/CWE/CWE-200/AndroidFileIntentSource.qll b/java/ql/src/experimental/Security/CWE/CWE-200/AndroidFileIntentSource.qll index 6df48f530a5..46b6e1059bb 100644 --- a/java/ql/src/experimental/Security/CWE/CWE-200/AndroidFileIntentSource.qll +++ b/java/ql/src/experimental/Security/CWE/CWE-200/AndroidFileIntentSource.qll @@ -15,7 +15,7 @@ class StartActivityForResultMethod extends Method { /** Android class instance of `GET_CONTENT` intent. */ class GetContentIntent extends ClassInstanceExpr { GetContentIntent() { - this.getConstructedType().getASupertype*() instanceof TypeIntent and + this.getConstructedType() instanceof TypeIntent and this.getArgument(0).(CompileTimeConstantExpr).getStringValue() = "android.intent.action.GET_CONTENT" or diff --git a/java/ql/src/experimental/Security/CWE/CWE-200/SensitiveAndroidFileLeak.ql b/java/ql/src/experimental/Security/CWE/CWE-200/SensitiveAndroidFileLeak.ql index c4bdde170ba..a216892826d 100644 --- a/java/ql/src/experimental/Security/CWE/CWE-200/SensitiveAndroidFileLeak.ql +++ b/java/ql/src/experimental/Security/CWE/CWE-200/SensitiveAndroidFileLeak.ql @@ -3,7 +3,7 @@ * @description Getting file intent from user input without path validation could leak arbitrary * Android configuration file and sensitive user data. * @kind path-problem - * @id java/sensitive_android_file_leak + * @id java/sensitive-android-file-leak * @tags security * external/cwe/cwe-200 */ @@ -14,6 +14,19 @@ import AndroidFileIntentSource import DataFlow2::PathGraph import semmle.code.java.dataflow.TaintTracking2 +private class StartsWithSanitizer extends DataFlow2::BarrierGuard { + StartsWithSanitizer() { this.(MethodAccess).getMethod().hasName("startsWith") } + + override predicate checks(Expr e, boolean branch) { + e = + [ + this.(MethodAccess).getQualifier(), + this.(MethodAccess).getQualifier().(MethodAccess).getQualifier() + ] and + branch = false + } +} + class AndroidFileLeakConfig extends TaintTracking2::Configuration { AndroidFileLeakConfig() { this = "AndroidFileLeakConfig" } @@ -38,37 +51,23 @@ class AndroidFileLeakConfig extends TaintTracking2::Configuration { exists(MethodAccess aema, AsyncTaskRunInBackgroundMethod arm | // fileAsyncTask.execute(params) will invoke doInBackground(params) of FileAsyncTask aema.getQualifier().getType() = arm.getDeclaringType() and - ( - aema.getMethod() instanceof AsyncTaskExecuteMethod and - prev.asExpr() = aema.getArgument(0) - or - aema.getMethod() instanceof AsyncTaskExecuteOnExecutorMethod and - prev.asExpr() = aema.getArgument(1) - ) and - succ.asExpr() = arm.getParameter(0).getAnAccess() + aema.getMethod() instanceof ExecuteAsyncTaskMethod and + prev.asExpr() = aema.getArgument(aema.getMethod().(ExecuteAsyncTaskMethod).getParamIndex()) and + succ.asParameter() = arm.getParameter(0) ) or exists(MethodAccess csma, ServiceOnStartCommandMethod ssm, ClassInstanceExpr ce | csma.getMethod() instanceof ContextStartServiceMethod and ce.getConstructedType() instanceof TypeIntent and // Intent intent = new Intent(context, FileUploader.class); - ce.getArgument(1).getType().(ParameterizedType).getTypeArgument(0) = ssm.getDeclaringType() and + ce.getArgument(1).(TypeLiteral).getReferencedType() = ssm.getDeclaringType() and DataFlow2::localExprFlow(ce, csma.getArgument(0)) and // context.startService(intent); prev.asExpr() = csma.getArgument(0) and - succ.asExpr() = ssm.getParameter(0).getAnAccess() // public int onStartCommand(Intent intent, int flags, int startId) {...} in FileUploader + succ.asParameter() = ssm.getParameter(0) // public int onStartCommand(Intent intent, int flags, int startId) {...} in FileUploader ) } - override predicate isSanitizer(DataFlow2::Node node) { - exists( - MethodAccess startsWith // "startsWith" path check - | - startsWith.getMethod().hasName("startsWith") and - ( - DataFlow2::localExprFlow(node.asExpr(), startsWith.getQualifier()) or - DataFlow2::localExprFlow(node.asExpr(), - startsWith.getQualifier().(MethodAccess).getQualifier()) - ) - ) + override predicate isSanitizerGuard(DataFlow2::BarrierGuard guard) { + guard instanceof StartsWithSanitizer } } diff --git a/java/ql/test/experimental/query-tests/security/CWE-200/SensitiveAndroidFileLeak.expected b/java/ql/test/experimental/query-tests/security/CWE-200/SensitiveAndroidFileLeak.expected index db29fd64568..47f27356d87 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-200/SensitiveAndroidFileLeak.expected +++ b/java/ql/test/experimental/query-tests/security/CWE-200/SensitiveAndroidFileLeak.expected @@ -1,26 +1,28 @@ edges +| FileService.java:20:31:20:43 | intent : Intent | FileService.java:21:28:21:33 | intent : Intent | +| FileService.java:20:31:20:43 | intent : Intent | FileService.java:25:42:25:50 | localPath : String | | FileService.java:21:28:21:33 | intent : Intent | FileService.java:21:28:21:64 | getStringExtra(...) : String | -| FileService.java:21:28:21:33 | intent : Intent | FileService.java:25:42:25:50 | localPath : String | | FileService.java:21:28:21:64 | getStringExtra(...) : String | FileService.java:25:42:25:50 | localPath : String | -| FileService.java:25:13:25:51 | makeParamsToExecute(...) : Object[] | FileService.java:44:44:44:49 | params : Object[] | +| FileService.java:25:13:25:51 | makeParamsToExecute(...) : Object[] | FileService.java:40:41:40:55 | params : Object[] | | FileService.java:25:13:25:51 | makeParamsToExecute(...) [[]] : String | FileService.java:25:13:25:51 | makeParamsToExecute(...) : Object[] | | FileService.java:25:42:25:50 | localPath : String | FileService.java:25:13:25:51 | makeParamsToExecute(...) [[]] : String | +| FileService.java:40:41:40:55 | params : Object[] | FileService.java:44:33:44:52 | (...)... : Object | | FileService.java:44:33:44:52 | (...)... : Object | FileService.java:45:53:45:59 | ...[...] | -| FileService.java:44:44:44:49 | params : Object[] | FileService.java:44:33:44:52 | (...)... : Object | -| LeakFileActivity2.java:16:26:16:31 | intent : Intent | FileService.java:21:28:21:33 | intent : Intent | +| LeakFileActivity2.java:16:26:16:31 | intent : Intent | FileService.java:20:31:20:43 | intent : Intent | | LeakFileActivity.java:14:35:14:38 | data : Intent | LeakFileActivity.java:18:40:18:59 | contentIntent : Intent | | LeakFileActivity.java:18:40:18:59 | contentIntent : Intent | LeakFileActivity.java:19:31:19:43 | contentIntent : Intent | | LeakFileActivity.java:19:31:19:43 | contentIntent : Intent | LeakFileActivity.java:19:31:19:53 | getData(...) : Uri | | LeakFileActivity.java:19:31:19:53 | getData(...) : Uri | LeakFileActivity.java:21:58:21:72 | streamsToUpload : Uri | | LeakFileActivity.java:21:58:21:72 | streamsToUpload : Uri | LeakFileActivity.java:21:58:21:82 | getPath(...) | nodes +| FileService.java:20:31:20:43 | intent : Intent | semmle.label | intent : Intent | | FileService.java:21:28:21:33 | intent : Intent | semmle.label | intent : Intent | | FileService.java:21:28:21:64 | getStringExtra(...) : String | semmle.label | getStringExtra(...) : String | | FileService.java:25:13:25:51 | makeParamsToExecute(...) : Object[] | semmle.label | makeParamsToExecute(...) : Object[] | | FileService.java:25:13:25:51 | makeParamsToExecute(...) [[]] : String | semmle.label | makeParamsToExecute(...) [[]] : String | | FileService.java:25:42:25:50 | localPath : String | semmle.label | localPath : String | +| FileService.java:40:41:40:55 | params : Object[] | semmle.label | params : Object[] | | FileService.java:44:33:44:52 | (...)... : Object | semmle.label | (...)... : Object | -| FileService.java:44:44:44:49 | params : Object[] | semmle.label | params : Object[] | | FileService.java:45:53:45:59 | ...[...] | semmle.label | ...[...] | | LeakFileActivity2.java:16:26:16:31 | intent : Intent | semmle.label | intent : Intent | | LeakFileActivity.java:14:35:14:38 | data : Intent | semmle.label | data : Intent | From 3607d50994c419a4749b9627d949710450b8828f Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Mon, 13 Sep 2021 11:45:33 +0100 Subject: [PATCH 723/741] Update remote flow source locations --- .../library-tests/dataflow/taintsources/remote.expected | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/java/ql/test/library-tests/dataflow/taintsources/remote.expected b/java/ql/test/library-tests/dataflow/taintsources/remote.expected index f1e5b4e3ff1..55268b63bad 100644 --- a/java/ql/test/library-tests/dataflow/taintsources/remote.expected +++ b/java/ql/test/library-tests/dataflow/taintsources/remote.expected @@ -5,15 +5,15 @@ | A.java:41:5:41:53 | getInputStream(...) | A.java:41:5:41:53 | getInputStream(...) | | A.java:42:5:42:45 | getInputStream(...) | A.java:42:5:42:45 | getInputStream(...) | | A.java:43:5:43:47 | getHostName(...) | A.java:43:5:43:47 | getHostName(...) | -| IntentSources.java:9:20:9:35 | getIntent(...) | ../../../stubs/google-android-9.0.0/android/content/Intent.java:1059:19:1059:32 | parameter this | +| IntentSources.java:9:20:9:35 | getIntent(...) | ../../../stubs/google-android-9.0.0/android/content/Intent.java:1564:19:1564:32 | parameter this | | IntentSources.java:9:20:9:35 | getIntent(...) | IntentSources.java:9:20:9:35 | getIntent(...) | | IntentSources.java:9:20:9:35 | getIntent(...) | IntentSources.java:9:20:9:57 | getStringExtra(...) | | IntentSources.java:9:20:9:35 | getIntent(...) | IntentSources.java:10:29:10:35 | trouble | -| IntentSources.java:16:20:16:30 | getIntent(...) | ../../../stubs/google-android-9.0.0/android/content/Intent.java:1059:19:1059:32 | parameter this | +| IntentSources.java:16:20:16:30 | getIntent(...) | ../../../stubs/google-android-9.0.0/android/content/Intent.java:1564:19:1564:32 | parameter this | | IntentSources.java:16:20:16:30 | getIntent(...) | IntentSources.java:16:20:16:30 | getIntent(...) | | IntentSources.java:16:20:16:30 | getIntent(...) | IntentSources.java:16:20:16:52 | getStringExtra(...) | | IntentSources.java:16:20:16:30 | getIntent(...) | IntentSources.java:17:29:17:35 | trouble | -| IntentSources.java:23:20:23:30 | getIntent(...) | ../../../stubs/google-android-9.0.0/android/content/Intent.java:1358:19:1358:27 | parameter this | +| IntentSources.java:23:20:23:30 | getIntent(...) | ../../../stubs/google-android-9.0.0/android/content/Intent.java:1863:19:1863:27 | parameter this | | IntentSources.java:23:20:23:30 | getIntent(...) | ../../../stubs/google-android-9.0.0/android/os/BaseBundle.java:600:19:600:27 | [summary] read: of argument -1 in getString | | IntentSources.java:23:20:23:30 | getIntent(...) | ../../../stubs/google-android-9.0.0/android/os/BaseBundle.java:600:19:600:27 | [summary] to write: return (return) in getString | | IntentSources.java:23:20:23:30 | getIntent(...) | ../../../stubs/google-android-9.0.0/android/os/BaseBundle.java:600:19:600:27 | parameter this | @@ -21,7 +21,7 @@ | IntentSources.java:23:20:23:30 | getIntent(...) | IntentSources.java:23:20:23:42 | getExtras(...) | | IntentSources.java:23:20:23:30 | getIntent(...) | IntentSources.java:23:20:23:59 | getString(...) | | IntentSources.java:23:20:23:30 | getIntent(...) | IntentSources.java:24:29:24:35 | trouble | -| IntentSources.java:33:20:33:33 | getIntent(...) | ../../../stubs/google-android-9.0.0/android/content/Intent.java:1059:19:1059:32 | parameter this | +| IntentSources.java:33:20:33:33 | getIntent(...) | ../../../stubs/google-android-9.0.0/android/content/Intent.java:1564:19:1564:32 | parameter this | | IntentSources.java:33:20:33:33 | getIntent(...) | IntentSources.java:33:20:33:33 | getIntent(...) | | IntentSources.java:33:20:33:33 | getIntent(...) | IntentSources.java:33:20:33:55 | getStringExtra(...) | | IntentSources.java:33:20:33:33 | getIntent(...) | IntentSources.java:34:29:34:35 | trouble | From 9e0cf5a2fd340ccd0e6db4e0a00e837c24756bf3 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Mon, 13 Sep 2021 11:47:07 +0100 Subject: [PATCH 724/741] Update test expectations to include subpaths --- .../security/CWE-200/SensitiveAndroidFileLeak.expected | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/java/ql/test/experimental/query-tests/security/CWE-200/SensitiveAndroidFileLeak.expected b/java/ql/test/experimental/query-tests/security/CWE-200/SensitiveAndroidFileLeak.expected index 47f27356d87..d7800b31556 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-200/SensitiveAndroidFileLeak.expected +++ b/java/ql/test/experimental/query-tests/security/CWE-200/SensitiveAndroidFileLeak.expected @@ -6,6 +6,10 @@ edges | FileService.java:25:13:25:51 | makeParamsToExecute(...) : Object[] | FileService.java:40:41:40:55 | params : Object[] | | FileService.java:25:13:25:51 | makeParamsToExecute(...) [[]] : String | FileService.java:25:13:25:51 | makeParamsToExecute(...) : Object[] | | FileService.java:25:42:25:50 | localPath : String | FileService.java:25:13:25:51 | makeParamsToExecute(...) [[]] : String | +| FileService.java:25:42:25:50 | localPath : String | FileService.java:32:13:32:28 | sourceUri : String | +| FileService.java:32:13:32:28 | sourceUri : String | FileService.java:35:17:35:25 | sourceUri : String | +| FileService.java:34:20:36:13 | {...} [[]] : String | FileService.java:34:20:36:13 | new Object[] [[]] : String | +| FileService.java:35:17:35:25 | sourceUri : String | FileService.java:34:20:36:13 | {...} [[]] : String | | FileService.java:40:41:40:55 | params : Object[] | FileService.java:44:33:44:52 | (...)... : Object | | FileService.java:44:33:44:52 | (...)... : Object | FileService.java:45:53:45:59 | ...[...] | | LeakFileActivity2.java:16:26:16:31 | intent : Intent | FileService.java:20:31:20:43 | intent : Intent | @@ -21,6 +25,10 @@ nodes | FileService.java:25:13:25:51 | makeParamsToExecute(...) : Object[] | semmle.label | makeParamsToExecute(...) : Object[] | | FileService.java:25:13:25:51 | makeParamsToExecute(...) [[]] : String | semmle.label | makeParamsToExecute(...) [[]] : String | | FileService.java:25:42:25:50 | localPath : String | semmle.label | localPath : String | +| FileService.java:32:13:32:28 | sourceUri : String | semmle.label | sourceUri : String | +| FileService.java:34:20:36:13 | new Object[] [[]] : String | semmle.label | new Object[] [[]] : String | +| FileService.java:34:20:36:13 | {...} [[]] : String | semmle.label | {...} [[]] : String | +| FileService.java:35:17:35:25 | sourceUri : String | semmle.label | sourceUri : String | | FileService.java:40:41:40:55 | params : Object[] | semmle.label | params : Object[] | | FileService.java:44:33:44:52 | (...)... : Object | semmle.label | (...)... : Object | | FileService.java:45:53:45:59 | ...[...] | semmle.label | ...[...] | @@ -31,6 +39,8 @@ nodes | LeakFileActivity.java:19:31:19:53 | getData(...) : Uri | semmle.label | getData(...) : Uri | | LeakFileActivity.java:21:58:21:72 | streamsToUpload : Uri | semmle.label | streamsToUpload : Uri | | LeakFileActivity.java:21:58:21:82 | getPath(...) | semmle.label | getPath(...) | +subpaths +| FileService.java:25:42:25:50 | localPath : String | FileService.java:32:13:32:28 | sourceUri : String | FileService.java:34:20:36:13 | new Object[] [[]] : String | FileService.java:25:13:25:51 | makeParamsToExecute(...) [[]] : String | #select | FileService.java:45:53:45:59 | ...[...] | LeakFileActivity2.java:16:26:16:31 | intent : Intent | FileService.java:45:53:45:59 | ...[...] | Leaking arbitrary Android file from $@. | LeakFileActivity2.java:16:26:16:31 | intent | this user input | | LeakFileActivity.java:21:58:21:82 | getPath(...) | LeakFileActivity.java:14:35:14:38 | data : Intent | LeakFileActivity.java:21:58:21:82 | getPath(...) | Leaking arbitrary Android file from $@. | LeakFileActivity.java:14:35:14:38 | data | this user input | From b0e652a3af94b5825ae3ec797359eb9a85450039 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Mon, 13 Sep 2021 11:51:46 +0100 Subject: [PATCH 725/741] Remove AsyncTask models --- .../Security/CWE/CWE-200/AndroidFileIntentSource.qll | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/java/ql/src/experimental/Security/CWE/CWE-200/AndroidFileIntentSource.qll b/java/ql/src/experimental/Security/CWE/CWE-200/AndroidFileIntentSource.qll index 46b6e1059bb..af7fb485814 100644 --- a/java/ql/src/experimental/Security/CWE/CWE-200/AndroidFileIntentSource.qll +++ b/java/ql/src/experimental/Security/CWE/CWE-200/AndroidFileIntentSource.qll @@ -61,9 +61,7 @@ private class AndroidIntentDataModel extends SummaryModelCsv { "android.net;Uri;true;getPathSegments;;;Argument[-1];ReturnValue;taint", "android.net;Uri;true;getQuery;;;Argument[-1];ReturnValue;taint", "android.net;Uri;true;getQueryParameter;;;Argument[-1];ReturnValue;taint", - "android.net;Uri;true;getQueryParameters;;;Argument[-1];ReturnValue;taint", - "android.os;AsyncTask;true;execute;;;Argument[0];ReturnValue;taint", - "android.os;AsyncTask;true;doInBackground;;;Argument[0];ReturnValue;taint" + "android.net;Uri;true;getQueryParameters;;;Argument[-1];ReturnValue;taint" ] } } From 8c2fddb2979dad0983a12011144ad53b303846c9 Mon Sep 17 00:00:00 2001 From: luchua-bc Date: Mon, 4 Oct 2021 16:46:44 +0000 Subject: [PATCH 726/741] Update the condition check and use DataFlow in the ql file --- .../CWE/CWE-200/AndroidFileIntentSink.qll | 30 ++++++---------- .../CWE/CWE-200/AndroidFileIntentSource.qll | 7 ++-- .../CWE/CWE-200/SensitiveAndroidFileLeak.ql | 36 +++++++++++-------- .../CWE-200/SensitiveAndroidFileLeak.expected | 10 ------ 4 files changed, 35 insertions(+), 48 deletions(-) diff --git a/java/ql/src/experimental/Security/CWE/CWE-200/AndroidFileIntentSink.qll b/java/ql/src/experimental/Security/CWE/CWE-200/AndroidFileIntentSink.qll index c31a2fb235e..c3f5eebccc4 100644 --- a/java/ql/src/experimental/Security/CWE/CWE-200/AndroidFileIntentSink.qll +++ b/java/ql/src/experimental/Security/CWE/CWE-200/AndroidFileIntentSink.qll @@ -19,30 +19,20 @@ class AsyncTask extends RefType { AsyncTask() { this.hasQualifiedName("android.os", "AsyncTask") } } -/** The method that executes `AsyncTask` of Android. */ -abstract class ExecuteAsyncTaskMethod extends Method { - /** Returns index of the parameter that is tainted. */ - abstract int getParamIndex(); -} +/** The `execute` or `executeOnExecutor` method of Android `AsyncTask`. */ +class ExecuteAsyncTaskMethod extends Method { + int paramIndex; -/** The `execute` method of Android `AsyncTask`. */ -class AsyncTaskExecuteMethod extends ExecuteAsyncTaskMethod { - AsyncTaskExecuteMethod() { + ExecuteAsyncTaskMethod() { this.getDeclaringType().getSourceDeclaration().getASourceSupertype*() instanceof AsyncTask and - this.getName() = "execute" + ( + this.getName() = "execute" and paramIndex = 0 + or + this.getName() = "executeOnExecutor" and paramIndex = 1 + ) } - override int getParamIndex() { result = 0 } -} - -/** The `executeOnExecutor` method of Android `AsyncTask`. */ -class AsyncTaskExecuteOnExecutorMethod extends ExecuteAsyncTaskMethod { - AsyncTaskExecuteOnExecutorMethod() { - this.getDeclaringType().getSourceDeclaration().getASourceSupertype*() instanceof AsyncTask and - this.getName() = "executeOnExecutor" - } - - override int getParamIndex() { result = 1 } + int getParamIndex() { result = paramIndex } } /** The `doInBackground` method of Android `AsyncTask`. */ diff --git a/java/ql/src/experimental/Security/CWE/CWE-200/AndroidFileIntentSource.qll b/java/ql/src/experimental/Security/CWE/CWE-200/AndroidFileIntentSource.qll index af7fb485814..8ef29014c8e 100644 --- a/java/ql/src/experimental/Security/CWE/CWE-200/AndroidFileIntentSource.qll +++ b/java/ql/src/experimental/Security/CWE/CWE-200/AndroidFileIntentSource.qll @@ -2,6 +2,7 @@ import java import semmle.code.java.dataflow.FlowSources +import semmle.code.java.dataflow.TaintTracking2 import semmle.code.java.frameworks.android.Android /** The `startActivityForResult` method of Android `Activity`. */ @@ -67,14 +68,14 @@ private class AndroidIntentDataModel extends SummaryModelCsv { } /** Taint configuration for getting content intent. */ -class GetContentIntentConfig extends TaintTracking::Configuration { +class GetContentIntentConfig extends TaintTracking2::Configuration { GetContentIntentConfig() { this = "GetContentIntentConfig" } - override predicate isSource(DataFlow::Node src) { + override predicate isSource(DataFlow2::Node src) { exists(GetContentIntent gi | src.asExpr() = gi) } - override predicate isSink(DataFlow::Node sink) { + override predicate isSink(DataFlow2::Node sink) { exists(MethodAccess ma | ma.getMethod() instanceof StartActivityForResultMethod and sink.asExpr() = ma.getArgument(0) ) diff --git a/java/ql/src/experimental/Security/CWE/CWE-200/SensitiveAndroidFileLeak.ql b/java/ql/src/experimental/Security/CWE/CWE-200/SensitiveAndroidFileLeak.ql index a216892826d..2fb5642d8eb 100644 --- a/java/ql/src/experimental/Security/CWE/CWE-200/SensitiveAndroidFileLeak.ql +++ b/java/ql/src/experimental/Security/CWE/CWE-200/SensitiveAndroidFileLeak.ql @@ -4,17 +4,18 @@ * Android configuration file and sensitive user data. * @kind path-problem * @id java/sensitive-android-file-leak + * @problem.severity warning * @tags security * external/cwe/cwe-200 */ import java +import semmle.code.java.controlflow.Guards import AndroidFileIntentSink import AndroidFileIntentSource -import DataFlow2::PathGraph -import semmle.code.java.dataflow.TaintTracking2 +import DataFlow::PathGraph -private class StartsWithSanitizer extends DataFlow2::BarrierGuard { +private class StartsWithSanitizer extends DataFlow::BarrierGuard { StartsWithSanitizer() { this.(MethodAccess).getMethod().hasName("startsWith") } override predicate checks(Expr e, boolean branch) { @@ -27,27 +28,32 @@ private class StartsWithSanitizer extends DataFlow2::BarrierGuard { } } -class AndroidFileLeakConfig extends TaintTracking2::Configuration { +class AndroidFileLeakConfig extends TaintTracking::Configuration { AndroidFileLeakConfig() { this = "AndroidFileLeakConfig" } - /** Holds if it is an access to file intent result. */ - override predicate isSource(DataFlow2::Node src) { + /** + * Holds if `src` is a read of some Intent-typed method argument guarded by a check like + * `requestCode == REQUEST_CODE__SELECT_CONTENT_FROM_APPS`, where `requestCode` is the first + * argument to `Activity.onActivityResult`. + */ + override predicate isSource(DataFlow::Node src) { exists( - AndroidActivityResultInput ai, AndroidFileIntentInput fi, IfStmt ifs, VarAccess intentVar // if (requestCode == REQUEST_CODE__SELECT_CONTENT_FROM_APPS) + AndroidActivityResultInput ai, AndroidFileIntentInput fi, ConditionBlock cb, + VarAccess intentVar | - ifs.getCondition().getAChildExpr().getAChildExpr().(CompileTimeConstantExpr).getIntValue() = + cb.getCondition().getAChildExpr().(CompileTimeConstantExpr).getIntValue() = fi.getRequestCode() and - ifs.getCondition().getAChildExpr().getAChildExpr() = ai.getRequestCodeVar() and + cb.getCondition().getAChildExpr() = ai.getRequestCodeVar() and intentVar.getType() instanceof TypeIntent and - intentVar.(Argument).getAnEnclosingStmt() = ifs.getThen() and + cb.getBasicBlock() = intentVar.(Argument).getAnEnclosingStmt() and src.asExpr() = intentVar ) } /** Holds if it is a sink of file access in Android. */ - override predicate isSink(DataFlow2::Node sink) { sink instanceof AndroidFileSink } + override predicate isSink(DataFlow::Node sink) { sink instanceof AndroidFileSink } - override predicate isAdditionalTaintStep(DataFlow2::Node prev, DataFlow2::Node succ) { + override predicate isAdditionalTaintStep(DataFlow::Node prev, DataFlow::Node succ) { exists(MethodAccess aema, AsyncTaskRunInBackgroundMethod arm | // fileAsyncTask.execute(params) will invoke doInBackground(params) of FileAsyncTask aema.getQualifier().getType() = arm.getDeclaringType() and @@ -60,18 +66,18 @@ class AndroidFileLeakConfig extends TaintTracking2::Configuration { csma.getMethod() instanceof ContextStartServiceMethod and ce.getConstructedType() instanceof TypeIntent and // Intent intent = new Intent(context, FileUploader.class); ce.getArgument(1).(TypeLiteral).getReferencedType() = ssm.getDeclaringType() and - DataFlow2::localExprFlow(ce, csma.getArgument(0)) and // context.startService(intent); + DataFlow::localExprFlow(ce, csma.getArgument(0)) and // context.startService(intent); prev.asExpr() = csma.getArgument(0) and succ.asParameter() = ssm.getParameter(0) // public int onStartCommand(Intent intent, int flags, int startId) {...} in FileUploader ) } - override predicate isSanitizerGuard(DataFlow2::BarrierGuard guard) { + override predicate isSanitizerGuard(DataFlow::BarrierGuard guard) { guard instanceof StartsWithSanitizer } } -from DataFlow2::PathNode source, DataFlow2::PathNode sink, AndroidFileLeakConfig conf +from DataFlow::PathNode source, DataFlow::PathNode sink, AndroidFileLeakConfig conf where conf.hasFlowPath(source, sink) select sink.getNode(), source, sink, "Leaking arbitrary Android file from $@.", source.getNode(), "this user input" diff --git a/java/ql/test/experimental/query-tests/security/CWE-200/SensitiveAndroidFileLeak.expected b/java/ql/test/experimental/query-tests/security/CWE-200/SensitiveAndroidFileLeak.expected index d7800b31556..47f27356d87 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-200/SensitiveAndroidFileLeak.expected +++ b/java/ql/test/experimental/query-tests/security/CWE-200/SensitiveAndroidFileLeak.expected @@ -6,10 +6,6 @@ edges | FileService.java:25:13:25:51 | makeParamsToExecute(...) : Object[] | FileService.java:40:41:40:55 | params : Object[] | | FileService.java:25:13:25:51 | makeParamsToExecute(...) [[]] : String | FileService.java:25:13:25:51 | makeParamsToExecute(...) : Object[] | | FileService.java:25:42:25:50 | localPath : String | FileService.java:25:13:25:51 | makeParamsToExecute(...) [[]] : String | -| FileService.java:25:42:25:50 | localPath : String | FileService.java:32:13:32:28 | sourceUri : String | -| FileService.java:32:13:32:28 | sourceUri : String | FileService.java:35:17:35:25 | sourceUri : String | -| FileService.java:34:20:36:13 | {...} [[]] : String | FileService.java:34:20:36:13 | new Object[] [[]] : String | -| FileService.java:35:17:35:25 | sourceUri : String | FileService.java:34:20:36:13 | {...} [[]] : String | | FileService.java:40:41:40:55 | params : Object[] | FileService.java:44:33:44:52 | (...)... : Object | | FileService.java:44:33:44:52 | (...)... : Object | FileService.java:45:53:45:59 | ...[...] | | LeakFileActivity2.java:16:26:16:31 | intent : Intent | FileService.java:20:31:20:43 | intent : Intent | @@ -25,10 +21,6 @@ nodes | FileService.java:25:13:25:51 | makeParamsToExecute(...) : Object[] | semmle.label | makeParamsToExecute(...) : Object[] | | FileService.java:25:13:25:51 | makeParamsToExecute(...) [[]] : String | semmle.label | makeParamsToExecute(...) [[]] : String | | FileService.java:25:42:25:50 | localPath : String | semmle.label | localPath : String | -| FileService.java:32:13:32:28 | sourceUri : String | semmle.label | sourceUri : String | -| FileService.java:34:20:36:13 | new Object[] [[]] : String | semmle.label | new Object[] [[]] : String | -| FileService.java:34:20:36:13 | {...} [[]] : String | semmle.label | {...} [[]] : String | -| FileService.java:35:17:35:25 | sourceUri : String | semmle.label | sourceUri : String | | FileService.java:40:41:40:55 | params : Object[] | semmle.label | params : Object[] | | FileService.java:44:33:44:52 | (...)... : Object | semmle.label | (...)... : Object | | FileService.java:45:53:45:59 | ...[...] | semmle.label | ...[...] | @@ -39,8 +31,6 @@ nodes | LeakFileActivity.java:19:31:19:53 | getData(...) : Uri | semmle.label | getData(...) : Uri | | LeakFileActivity.java:21:58:21:72 | streamsToUpload : Uri | semmle.label | streamsToUpload : Uri | | LeakFileActivity.java:21:58:21:82 | getPath(...) | semmle.label | getPath(...) | -subpaths -| FileService.java:25:42:25:50 | localPath : String | FileService.java:32:13:32:28 | sourceUri : String | FileService.java:34:20:36:13 | new Object[] [[]] : String | FileService.java:25:13:25:51 | makeParamsToExecute(...) [[]] : String | #select | FileService.java:45:53:45:59 | ...[...] | LeakFileActivity2.java:16:26:16:31 | intent : Intent | FileService.java:45:53:45:59 | ...[...] | Leaking arbitrary Android file from $@. | LeakFileActivity2.java:16:26:16:31 | intent | this user input | | LeakFileActivity.java:21:58:21:82 | getPath(...) | LeakFileActivity.java:14:35:14:38 | data : Intent | LeakFileActivity.java:21:58:21:82 | getPath(...) | Leaking arbitrary Android file from $@. | LeakFileActivity.java:14:35:14:38 | data | this user input | From 987bfa6ca707c5ba66af2803959f24813007be71 Mon Sep 17 00:00:00 2001 From: luchua-bc Date: Wed, 6 Oct 2021 01:52:28 +0000 Subject: [PATCH 727/741] Update condition check and qldoc --- .../CWE/CWE-200/SensitiveAndroidFileLeak.ql | 15 ++++++++------- .../CWE-200/SensitiveAndroidFileLeak.expected | 3 +++ 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/java/ql/src/experimental/Security/CWE/CWE-200/SensitiveAndroidFileLeak.ql b/java/ql/src/experimental/Security/CWE/CWE-200/SensitiveAndroidFileLeak.ql index 2fb5642d8eb..82968d33678 100644 --- a/java/ql/src/experimental/Security/CWE/CWE-200/SensitiveAndroidFileLeak.ql +++ b/java/ql/src/experimental/Security/CWE/CWE-200/SensitiveAndroidFileLeak.ql @@ -34,18 +34,19 @@ class AndroidFileLeakConfig extends TaintTracking::Configuration { /** * Holds if `src` is a read of some Intent-typed method argument guarded by a check like * `requestCode == REQUEST_CODE__SELECT_CONTENT_FROM_APPS`, where `requestCode` is the first - * argument to `Activity.onActivityResult`. + * argument to `Activity.onActivityResult` and `REQUEST_CODE__SELECT_CONTENT_FROM_APPS` is + * any request code in a call to `startActivityForResult(intent, code)`. */ override predicate isSource(DataFlow::Node src) { exists( - AndroidActivityResultInput ai, AndroidFileIntentInput fi, ConditionBlock cb, - VarAccess intentVar + AndroidActivityResultInput ai, AndroidFileIntentInput fi, ConditionBlock cb, EQExpr ee, + CompileTimeConstantExpr cc, VarAccess intentVar | - cb.getCondition().getAChildExpr().(CompileTimeConstantExpr).getIntValue() = - fi.getRequestCode() and - cb.getCondition().getAChildExpr() = ai.getRequestCodeVar() and + cb.getCondition() = ee and + ee.hasOperands(ai.getRequestCodeVar(), cc) and + cc.getIntValue() = fi.getRequestCode() and intentVar.getType() instanceof TypeIntent and - cb.getBasicBlock() = intentVar.(Argument).getAnEnclosingStmt() and + cb.controls(intentVar.getBasicBlock(), true) and src.asExpr() = intentVar ) } diff --git a/java/ql/test/experimental/query-tests/security/CWE-200/SensitiveAndroidFileLeak.expected b/java/ql/test/experimental/query-tests/security/CWE-200/SensitiveAndroidFileLeak.expected index 47f27356d87..05400330dd7 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-200/SensitiveAndroidFileLeak.expected +++ b/java/ql/test/experimental/query-tests/security/CWE-200/SensitiveAndroidFileLeak.expected @@ -8,6 +8,7 @@ edges | FileService.java:25:42:25:50 | localPath : String | FileService.java:25:13:25:51 | makeParamsToExecute(...) [[]] : String | | FileService.java:40:41:40:55 | params : Object[] | FileService.java:44:33:44:52 | (...)... : Object | | FileService.java:44:33:44:52 | (...)... : Object | FileService.java:45:53:45:59 | ...[...] | +| LeakFileActivity2.java:15:13:15:18 | intent : Intent | LeakFileActivity2.java:16:26:16:31 | intent : Intent | | LeakFileActivity2.java:16:26:16:31 | intent : Intent | FileService.java:20:31:20:43 | intent : Intent | | LeakFileActivity.java:14:35:14:38 | data : Intent | LeakFileActivity.java:18:40:18:59 | contentIntent : Intent | | LeakFileActivity.java:18:40:18:59 | contentIntent : Intent | LeakFileActivity.java:19:31:19:43 | contentIntent : Intent | @@ -24,6 +25,7 @@ nodes | FileService.java:40:41:40:55 | params : Object[] | semmle.label | params : Object[] | | FileService.java:44:33:44:52 | (...)... : Object | semmle.label | (...)... : Object | | FileService.java:45:53:45:59 | ...[...] | semmle.label | ...[...] | +| LeakFileActivity2.java:15:13:15:18 | intent : Intent | semmle.label | intent : Intent | | LeakFileActivity2.java:16:26:16:31 | intent : Intent | semmle.label | intent : Intent | | LeakFileActivity.java:14:35:14:38 | data : Intent | semmle.label | data : Intent | | LeakFileActivity.java:18:40:18:59 | contentIntent : Intent | semmle.label | contentIntent : Intent | @@ -32,5 +34,6 @@ nodes | LeakFileActivity.java:21:58:21:72 | streamsToUpload : Uri | semmle.label | streamsToUpload : Uri | | LeakFileActivity.java:21:58:21:82 | getPath(...) | semmle.label | getPath(...) | #select +| FileService.java:45:53:45:59 | ...[...] | LeakFileActivity2.java:15:13:15:18 | intent : Intent | FileService.java:45:53:45:59 | ...[...] | Leaking arbitrary Android file from $@. | LeakFileActivity2.java:15:13:15:18 | intent | this user input | | FileService.java:45:53:45:59 | ...[...] | LeakFileActivity2.java:16:26:16:31 | intent : Intent | FileService.java:45:53:45:59 | ...[...] | Leaking arbitrary Android file from $@. | LeakFileActivity2.java:16:26:16:31 | intent | this user input | | LeakFileActivity.java:21:58:21:82 | getPath(...) | LeakFileActivity.java:14:35:14:38 | data : Intent | LeakFileActivity.java:21:58:21:82 | getPath(...) | Leaking arbitrary Android file from $@. | LeakFileActivity.java:14:35:14:38 | data | this user input | From ffdfc0549af3d85309fe0e9988c73c50b863e1f1 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Wed, 6 Oct 2021 12:15:34 +0100 Subject: [PATCH 728/741] Update comment --- .../Security/CWE/CWE-200/SensitiveAndroidFileLeak.ql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/ql/src/experimental/Security/CWE/CWE-200/SensitiveAndroidFileLeak.ql b/java/ql/src/experimental/Security/CWE/CWE-200/SensitiveAndroidFileLeak.ql index 82968d33678..906d3505444 100644 --- a/java/ql/src/experimental/Security/CWE/CWE-200/SensitiveAndroidFileLeak.ql +++ b/java/ql/src/experimental/Security/CWE/CWE-200/SensitiveAndroidFileLeak.ql @@ -32,7 +32,7 @@ class AndroidFileLeakConfig extends TaintTracking::Configuration { AndroidFileLeakConfig() { this = "AndroidFileLeakConfig" } /** - * Holds if `src` is a read of some Intent-typed method argument guarded by a check like + * Holds if `src` is a read of some Intent-typed variable guarded by a check like * `requestCode == REQUEST_CODE__SELECT_CONTENT_FROM_APPS`, where `requestCode` is the first * argument to `Activity.onActivityResult` and `REQUEST_CODE__SELECT_CONTENT_FROM_APPS` is * any request code in a call to `startActivityForResult(intent, code)`. From f24e310ace2ae0003a65b661158182991db2ef48 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Wed, 6 Oct 2021 12:25:23 +0100 Subject: [PATCH 729/741] Update test expectation details --- .../security/CWE-200/SensitiveAndroidFileLeak.expected | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/java/ql/test/experimental/query-tests/security/CWE-200/SensitiveAndroidFileLeak.expected b/java/ql/test/experimental/query-tests/security/CWE-200/SensitiveAndroidFileLeak.expected index 05400330dd7..472a0cae215 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-200/SensitiveAndroidFileLeak.expected +++ b/java/ql/test/experimental/query-tests/security/CWE-200/SensitiveAndroidFileLeak.expected @@ -6,6 +6,10 @@ edges | FileService.java:25:13:25:51 | makeParamsToExecute(...) : Object[] | FileService.java:40:41:40:55 | params : Object[] | | FileService.java:25:13:25:51 | makeParamsToExecute(...) [[]] : String | FileService.java:25:13:25:51 | makeParamsToExecute(...) : Object[] | | FileService.java:25:42:25:50 | localPath : String | FileService.java:25:13:25:51 | makeParamsToExecute(...) [[]] : String | +| FileService.java:25:42:25:50 | localPath : String | FileService.java:32:13:32:28 | sourceUri : String | +| FileService.java:32:13:32:28 | sourceUri : String | FileService.java:35:17:35:25 | sourceUri : String | +| FileService.java:34:20:36:13 | {...} [[]] : String | FileService.java:34:20:36:13 | new Object[] [[]] : String | +| FileService.java:35:17:35:25 | sourceUri : String | FileService.java:34:20:36:13 | {...} [[]] : String | | FileService.java:40:41:40:55 | params : Object[] | FileService.java:44:33:44:52 | (...)... : Object | | FileService.java:44:33:44:52 | (...)... : Object | FileService.java:45:53:45:59 | ...[...] | | LeakFileActivity2.java:15:13:15:18 | intent : Intent | LeakFileActivity2.java:16:26:16:31 | intent : Intent | @@ -22,6 +26,10 @@ nodes | FileService.java:25:13:25:51 | makeParamsToExecute(...) : Object[] | semmle.label | makeParamsToExecute(...) : Object[] | | FileService.java:25:13:25:51 | makeParamsToExecute(...) [[]] : String | semmle.label | makeParamsToExecute(...) [[]] : String | | FileService.java:25:42:25:50 | localPath : String | semmle.label | localPath : String | +| FileService.java:32:13:32:28 | sourceUri : String | semmle.label | sourceUri : String | +| FileService.java:34:20:36:13 | new Object[] [[]] : String | semmle.label | new Object[] [[]] : String | +| FileService.java:34:20:36:13 | {...} [[]] : String | semmle.label | {...} [[]] : String | +| FileService.java:35:17:35:25 | sourceUri : String | semmle.label | sourceUri : String | | FileService.java:40:41:40:55 | params : Object[] | semmle.label | params : Object[] | | FileService.java:44:33:44:52 | (...)... : Object | semmle.label | (...)... : Object | | FileService.java:45:53:45:59 | ...[...] | semmle.label | ...[...] | @@ -33,6 +41,8 @@ nodes | LeakFileActivity.java:19:31:19:53 | getData(...) : Uri | semmle.label | getData(...) : Uri | | LeakFileActivity.java:21:58:21:72 | streamsToUpload : Uri | semmle.label | streamsToUpload : Uri | | LeakFileActivity.java:21:58:21:82 | getPath(...) | semmle.label | getPath(...) | +subpaths +| FileService.java:25:42:25:50 | localPath : String | FileService.java:32:13:32:28 | sourceUri : String | FileService.java:34:20:36:13 | new Object[] [[]] : String | FileService.java:25:13:25:51 | makeParamsToExecute(...) [[]] : String | #select | FileService.java:45:53:45:59 | ...[...] | LeakFileActivity2.java:15:13:15:18 | intent : Intent | FileService.java:45:53:45:59 | ...[...] | Leaking arbitrary Android file from $@. | LeakFileActivity2.java:15:13:15:18 | intent | this user input | | FileService.java:45:53:45:59 | ...[...] | LeakFileActivity2.java:16:26:16:31 | intent : Intent | FileService.java:45:53:45:59 | ...[...] | Leaking arbitrary Android file from $@. | LeakFileActivity2.java:16:26:16:31 | intent | this user input | From 91d8b3da239622c4d693ce0cad7b5ce051848e52 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Wed, 6 Oct 2021 12:29:44 +0100 Subject: [PATCH 730/741] Sort Intent models --- .../code/java/frameworks/android/Intent.qll | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/java/ql/lib/semmle/code/java/frameworks/android/Intent.qll b/java/ql/lib/semmle/code/java/frameworks/android/Intent.qll index 50b29e77298..ba23a3516e6 100644 --- a/java/ql/lib/semmle/code/java/frameworks/android/Intent.qll +++ b/java/ql/lib/semmle/code/java/frameworks/android/Intent.qll @@ -143,17 +143,17 @@ private class IntentBundleFlowSteps extends SummaryModelCsv { "android.os;Bundle;true;readFromParcel;;;Argument[0];MapKey of Argument[-1];taint", "android.os;Bundle;true;readFromParcel;;;Argument[0];MapValue of Argument[-1];taint", // currently only the Extras part of the intent is fully modelled - "android.content;Intent;true;addCategory;;;Argument[-1];ReturnValue;value", - "android.content;Intent;true;addFlags;;;Argument[-1];ReturnValue;value", "android.content;Intent;false;Intent;(Intent);;MapKey of SyntheticField[android.content.Intent.extras] of Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value", "android.content;Intent;false;Intent;(Intent);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[0];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value", - "android.content;Intent;true;getExtras;();;SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value", + "android.content;Intent;true;addCategory;;;Argument[-1];ReturnValue;value", + "android.content;Intent;true;addFlags;;;Argument[-1];ReturnValue;value", "android.content;Intent;true;getBundleExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value", "android.content;Intent;true;getByteArrayExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value", "android.content;Intent;true;getCharArrayExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value", "android.content;Intent;true;getCharSequenceArrayExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value", "android.content;Intent;true;getCharSequenceArrayListExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value", "android.content;Intent;true;getCharSequenceExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value", + "android.content;Intent;true;getExtras;();;SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value", "android.content;Intent;true;getParcelableArrayExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value", "android.content;Intent;true;getParcelableArrayListExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value", "android.content;Intent;true;getParcelableExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value", @@ -167,6 +167,12 @@ private class IntentBundleFlowSteps extends SummaryModelCsv { "android.content;Intent;true;putExtra;;;Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value", "android.content;Intent;true;putExtra;;;Argument[1];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value", "android.content;Intent;true;putExtra;;;Argument[-1];ReturnValue;value", + "android.content;Intent;true;putExtras;(Bundle);;MapKey of Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value", + "android.content;Intent;true;putExtras;(Bundle);;MapValue of Argument[0];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value", + "android.content;Intent;true;putExtras;(Bundle);;Argument[-1];ReturnValue;value", + "android.content;Intent;true;putExtras;(Intent);;MapKey of SyntheticField[android.content.Intent.extras] of Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value", + "android.content;Intent;true;putExtras;(Intent);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[0];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value", + "android.content;Intent;true;putExtras;(Intent);;Argument[-1];ReturnValue;value", "android.content;Intent;true;putIntegerArrayListExtra;;;Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value", "android.content;Intent;true;putIntegerArrayListExtra;;;Argument[-1];ReturnValue;value", "android.content;Intent;true;putParcelableArrayListExtra;;;Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value", @@ -175,12 +181,6 @@ private class IntentBundleFlowSteps extends SummaryModelCsv { "android.content;Intent;true;putStringArrayListExtra;;;Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value", "android.content;Intent;true;putStringArrayListExtra;;;Argument[1];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value", "android.content;Intent;true;putStringArrayListExtra;;;Argument[-1];ReturnValue;value", - "android.content;Intent;true;putExtras;(Bundle);;MapKey of Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value", - "android.content;Intent;true;putExtras;(Bundle);;MapValue of Argument[0];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value", - "android.content;Intent;true;putExtras;(Bundle);;Argument[-1];ReturnValue;value", - "android.content;Intent;true;putExtras;(Intent);;MapKey of SyntheticField[android.content.Intent.extras] of Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value", - "android.content;Intent;true;putExtras;(Intent);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[0];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value", - "android.content;Intent;true;putExtras;(Intent);;Argument[-1];ReturnValue;value", "android.content;Intent;true;replaceExtras;(Bundle);;MapKey of Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value", "android.content;Intent;true;replaceExtras;(Bundle);;MapValue of Argument[0];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value", "android.content;Intent;true;replaceExtras;(Bundle);;Argument[-1];ReturnValue;value", From 83cbc86f509f863b2765b2cfd29bd7a4f07784e5 Mon Sep 17 00:00:00 2001 From: Henry Mercer Date: Tue, 5 Oct 2021 16:33:09 +0100 Subject: [PATCH 731/741] JS: Move `ClassifyFiles.qll` to library pack This allows us to use this library in packs that depend on the `codeql/javascript-all` library pack. --- .../ql/{src => lib/semmle/javascript}/filters/ClassifyFiles.qll | 0 javascript/ql/src/experimental/poi/PoI.qll | 2 +- javascript/ql/src/filters/ClassifyFiles.ql | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) rename javascript/ql/{src => lib/semmle/javascript}/filters/ClassifyFiles.qll (100%) diff --git a/javascript/ql/src/filters/ClassifyFiles.qll b/javascript/ql/lib/semmle/javascript/filters/ClassifyFiles.qll similarity index 100% rename from javascript/ql/src/filters/ClassifyFiles.qll rename to javascript/ql/lib/semmle/javascript/filters/ClassifyFiles.qll diff --git a/javascript/ql/src/experimental/poi/PoI.qll b/javascript/ql/src/experimental/poi/PoI.qll index 20eeeee9f79..c51909c5c9e 100644 --- a/javascript/ql/src/experimental/poi/PoI.qll +++ b/javascript/ql/src/experimental/poi/PoI.qll @@ -55,7 +55,7 @@ import javascript private import DataFlow -private import filters.ClassifyFiles +private import semmle.javascript.filters.ClassifyFiles private import semmle.javascript.RestrictedLocations /** diff --git a/javascript/ql/src/filters/ClassifyFiles.ql b/javascript/ql/src/filters/ClassifyFiles.ql index fa7aad41ab4..9100485a6d6 100644 --- a/javascript/ql/src/filters/ClassifyFiles.ql +++ b/javascript/ql/src/filters/ClassifyFiles.ql @@ -8,7 +8,7 @@ */ import javascript -import ClassifyFiles +import semmle.javascript.filters.ClassifyFiles from File f, string category where classify(f, category) From 4be2347a30c2dc5ebe062d6dd6655896cfd77325 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Wed, 6 Oct 2021 16:15:18 +0100 Subject: [PATCH 732/741] Adapt to use the new shared Intent models --- .../code/java/frameworks/android/Intent.qll | 14 ++++- .../CWE/CWE-200/AndroidFileIntentSource.qll | 52 +++++-------------- .../CWE/CWE-200/SensitiveAndroidFileLeak.ql | 8 +++ .../CWE-200/SensitiveAndroidFileLeak.expected | 29 ++++++++--- 4 files changed, 55 insertions(+), 48 deletions(-) diff --git a/java/ql/lib/semmle/code/java/frameworks/android/Intent.qll b/java/ql/lib/semmle/code/java/frameworks/android/Intent.qll index ba23a3516e6..263ff3f6b1b 100644 --- a/java/ql/lib/semmle/code/java/frameworks/android/Intent.qll +++ b/java/ql/lib/semmle/code/java/frameworks/android/Intent.qll @@ -142,18 +142,25 @@ private class IntentBundleFlowSteps extends SummaryModelCsv { "android.os;Bundle;true;putStringArrayList;;;Argument[1];MapValue of Argument[-1];value", "android.os;Bundle;true;readFromParcel;;;Argument[0];MapKey of Argument[-1];taint", "android.os;Bundle;true;readFromParcel;;;Argument[0];MapValue of Argument[-1];taint", - // currently only the Extras part of the intent is fully modelled + // currently only the Extras part of the intent and the data field are fully modelled "android.content;Intent;false;Intent;(Intent);;MapKey of SyntheticField[android.content.Intent.extras] of Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value", "android.content;Intent;false;Intent;(Intent);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[0];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value", + "android.content;Intent;false;Intent;(String,Uri);;Argument[1];MapValue of SyntheticField[android.content.Intent.data] of Argument[-1];value", + "android.content;Intent;false;Intent;(String,Uri,Context,Class);;Argument[1];MapValue of SyntheticField[android.content.Intent.data] of Argument[-1];value", "android.content;Intent;true;addCategory;;;Argument[-1];ReturnValue;value", "android.content;Intent;true;addFlags;;;Argument[-1];ReturnValue;value", + "android.content;Intent;false;createChooser;;;Argument[0..2];MapValue of SyntheticField[android.content.Intent.extras] of ReturnValue;value", "android.content;Intent;true;getBundleExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value", "android.content;Intent;true;getByteArrayExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value", "android.content;Intent;true;getCharArrayExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value", "android.content;Intent;true;getCharSequenceArrayExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value", "android.content;Intent;true;getCharSequenceArrayListExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value", "android.content;Intent;true;getCharSequenceExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value", + "android.content;Intent;true;getData;;;SyntheticField[android.content.Intent.data] of Argument[-1];ReturnValue;value", + "android.content;Intent;true;getDataString;;;SyntheticField[android.content.Intent.data] of Argument[-1];ReturnValue;taint", "android.content;Intent;true;getExtras;();;SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value", + "android.content;Intent;false;getIntent;();;Argument[0];SyntheticField[android.content.Intent.data] of Argument[-1];taint", + "android.content;Intent;false;getIntentOld;();;Argument[0];SyntheticField[android.content.Intent.data] of Argument[-1];taint", "android.content;Intent;true;getParcelableArrayExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value", "android.content;Intent;true;getParcelableArrayListExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value", "android.content;Intent;true;getParcelableExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value", @@ -161,6 +168,7 @@ private class IntentBundleFlowSteps extends SummaryModelCsv { "android.content;Intent;true;getStringArrayExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value", "android.content;Intent;true;getStringArrayListExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value", "android.content;Intent;true;getStringExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value", + "android.content;Intent;false;parseUri;();;Argument[0];SyntheticField[android.content.Intent.data] of Argument[-1];taint", "android.content;Intent;true;putCharSequenceArrayListExtra;;;Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value", "android.content;Intent;true;putCharSequenceArrayListExtra;;;Argument[1];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value", "android.content;Intent;true;putCharSequenceArrayListExtra;;;Argument[-1];ReturnValue;value", @@ -192,9 +200,13 @@ private class IntentBundleFlowSteps extends SummaryModelCsv { "android.content;Intent;true;setClassName;;;Argument[-1];ReturnValue;value", "android.content;Intent;true;setComponent;;;Argument[-1];ReturnValue;value", "android.content;Intent;true;setData;;;Argument[-1];ReturnValue;value", + "android.content;Intent;true;setData;;;Argument[0];SyntheticField[android.content.Intent.data] of Argument[-1];value", "android.content;Intent;true;setDataAndNormalize;;;Argument[-1];ReturnValue;value", + "android.content;Intent;true;setDataAndNormalize;;;Argument[0];SyntheticField[android.content.Intent.data] of Argument[-1];value", "android.content;Intent;true;setDataAndType;;;Argument[-1];ReturnValue;value", + "android.content;Intent;true;setDataAndType;;;Argument[0];SyntheticField[android.content.Intent.data] of Argument[-1];value", "android.content;Intent;true;setDataAndTypeAndNormalize;;;Argument[-1];ReturnValue;value", + "android.content;Intent;true;setDataAndTypeAndNormalize;;;Argument[0];SyntheticField[android.content.Intent.data] of Argument[-1];value", "android.content;Intent;true;setFlags;;;Argument[-1];ReturnValue;value", "android.content;Intent;true;setIdentifier;;;Argument[-1];ReturnValue;value", "android.content;Intent;true;setPackage;;;Argument[-1];ReturnValue;value", diff --git a/java/ql/src/experimental/Security/CWE/CWE-200/AndroidFileIntentSource.qll b/java/ql/src/experimental/Security/CWE/CWE-200/AndroidFileIntentSource.qll index 8ef29014c8e..88e554e6a7c 100644 --- a/java/ql/src/experimental/Security/CWE/CWE-200/AndroidFileIntentSource.qll +++ b/java/ql/src/experimental/Security/CWE/CWE-200/AndroidFileIntentSource.qll @@ -28,45 +28,6 @@ class GetContentIntent extends ClassInstanceExpr { } } -/** Android intent data model in the new CSV format. */ -private class AndroidIntentDataModel extends SummaryModelCsv { - override predicate row(string row) { - row = - [ - "android.content;Intent;true;addCategory;;;Argument[-1];ReturnValue;taint", - "android.content;Intent;true;addFlags;;;Argument[-1];ReturnValue;taint", - "android.content;Intent;true;createChooser;;;Argument[0];ReturnValue;taint", - "android.content;Intent;true;getData;;;Argument[-1];ReturnValue;taint", - "android.content;Intent;true;getDataString;;;Argument[-1];ReturnValue;taint", - "android.content;Intent;true;getExtras;;;Argument[-1];ReturnValue;taint", - "android.content;Intent;true;getIntent;;;Argument[-1];ReturnValue;taint", - "android.content;Intent;true;get" + - [ - "ParcelableArray", "ParcelableArrayList", "Parcelable", "Serializable", "StringArray", - "StringArrayList", "String" - ] + "Extra;;;Argument[-1..1];ReturnValue;taint", - "android.content;Intent;true;put" + - [ - "", "CharSequenceArrayList", "IntegerArrayList", "ParcelableArrayList", - "StringArrayList" - ] + "Extra;;;Argument[1];Argument[-1];taint", - "android.content;Intent;true;putExtras;;;Argument[1];Argument[-1];taint", - "android.content;Intent;true;setData;;;Argument[0];ReturnValue;taint", - "android.content;Intent;true;setDataAndType;;;Argument[-1];ReturnValue;taint", - "android.content;Intent;true;setFlags;;;Argument[-1];ReturnValue;taint", - "android.content;Intent;true;setType;;;Argument[-1];ReturnValue;taint", - "android.net;Uri;true;getEncodedPath;;;Argument[-1];ReturnValue;taint", - "android.net;Uri;true;getEncodedQuery;;;Argument[-1];ReturnValue;taint", - "android.net;Uri;true;getLastPathSegment;;;Argument[-1];ReturnValue;taint", - "android.net;Uri;true;getPath;;;Argument[-1];ReturnValue;taint", - "android.net;Uri;true;getPathSegments;;;Argument[-1];ReturnValue;taint", - "android.net;Uri;true;getQuery;;;Argument[-1];ReturnValue;taint", - "android.net;Uri;true;getQueryParameter;;;Argument[-1];ReturnValue;taint", - "android.net;Uri;true;getQueryParameters;;;Argument[-1];ReturnValue;taint" - ] - } -} - /** Taint configuration for getting content intent. */ class GetContentIntentConfig extends TaintTracking2::Configuration { GetContentIntentConfig() { this = "GetContentIntentConfig" } @@ -80,6 +41,19 @@ class GetContentIntentConfig extends TaintTracking2::Configuration { ma.getMethod() instanceof StartActivityForResultMethod and sink.asExpr() = ma.getArgument(0) ) } + + override predicate allowImplicitRead(DataFlow::Node node, DataFlow::Content content) { + super.allowImplicitRead(node, content) + or + // Allow the wrapped intent created by Intent.getChooser to be consumed + // by at the sink: + isSink(node) and + ( + content.(DataFlow::SyntheticFieldContent).getField() = "android.content.Intent.extras" + or + content instanceof DataFlow::MapValueContent + ) + } } /** Android `Intent` input to request file loading. */ diff --git a/java/ql/src/experimental/Security/CWE/CWE-200/SensitiveAndroidFileLeak.ql b/java/ql/src/experimental/Security/CWE/CWE-200/SensitiveAndroidFileLeak.ql index 906d3505444..d84fe2453b6 100644 --- a/java/ql/src/experimental/Security/CWE/CWE-200/SensitiveAndroidFileLeak.ql +++ b/java/ql/src/experimental/Security/CWE/CWE-200/SensitiveAndroidFileLeak.ql @@ -14,6 +14,8 @@ import semmle.code.java.controlflow.Guards import AndroidFileIntentSink import AndroidFileIntentSource import DataFlow::PathGraph +// For readStep, to implement `isAdditionalTaintStep` +private import semmle.code.java.dataflow.internal.DataFlowPrivate private class StartsWithSanitizer extends DataFlow::BarrierGuard { StartsWithSanitizer() { this.(MethodAccess).getMethod().hasName("startsWith") } @@ -64,6 +66,7 @@ class AndroidFileLeakConfig extends TaintTracking::Configuration { ) or exists(MethodAccess csma, ServiceOnStartCommandMethod ssm, ClassInstanceExpr ce | + // An intent passed to startService will later be passed to the onStartCommand event of the corresponding service csma.getMethod() instanceof ContextStartServiceMethod and ce.getConstructedType() instanceof TypeIntent and // Intent intent = new Intent(context, FileUploader.class); ce.getArgument(1).(TypeLiteral).getReferencedType() = ssm.getDeclaringType() and @@ -71,6 +74,11 @@ class AndroidFileLeakConfig extends TaintTracking::Configuration { prev.asExpr() = csma.getArgument(0) and succ.asParameter() = ssm.getParameter(0) // public int onStartCommand(Intent intent, int flags, int startId) {...} in FileUploader ) + or + // When a whole Intent is tainted (e.g., due to this Configuration's source), treat its fields as tainted + readStep(prev, + any(DataFlow::SyntheticFieldContent c | c.getField().matches("android.content.Intent.%")), + succ) } override predicate isSanitizerGuard(DataFlow::BarrierGuard guard) { diff --git a/java/ql/test/experimental/query-tests/security/CWE-200/SensitiveAndroidFileLeak.expected b/java/ql/test/experimental/query-tests/security/CWE-200/SensitiveAndroidFileLeak.expected index 472a0cae215..3ad57e266c5 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-200/SensitiveAndroidFileLeak.expected +++ b/java/ql/test/experimental/query-tests/security/CWE-200/SensitiveAndroidFileLeak.expected @@ -1,14 +1,20 @@ edges | FileService.java:20:31:20:43 | intent : Intent | FileService.java:21:28:21:33 | intent : Intent | | FileService.java:20:31:20:43 | intent : Intent | FileService.java:25:42:25:50 | localPath : String | -| FileService.java:21:28:21:33 | intent : Intent | FileService.java:21:28:21:64 | getStringExtra(...) : String | -| FileService.java:21:28:21:64 | getStringExtra(...) : String | FileService.java:25:42:25:50 | localPath : String | +| FileService.java:21:28:21:33 | intent : Intent | FileService.java:21:28:21:64 | getStringExtra(...) : Object | +| FileService.java:21:28:21:64 | getStringExtra(...) : Object | FileService.java:25:42:25:50 | localPath : Object | | FileService.java:25:13:25:51 | makeParamsToExecute(...) : Object[] | FileService.java:40:41:40:55 | params : Object[] | +| FileService.java:25:13:25:51 | makeParamsToExecute(...) [[]] : Object | FileService.java:25:13:25:51 | makeParamsToExecute(...) : Object[] | | FileService.java:25:13:25:51 | makeParamsToExecute(...) [[]] : String | FileService.java:25:13:25:51 | makeParamsToExecute(...) : Object[] | +| FileService.java:25:42:25:50 | localPath : Object | FileService.java:25:13:25:51 | makeParamsToExecute(...) [[]] : Object | +| FileService.java:25:42:25:50 | localPath : Object | FileService.java:32:13:32:28 | sourceUri : Object | | FileService.java:25:42:25:50 | localPath : String | FileService.java:25:13:25:51 | makeParamsToExecute(...) [[]] : String | | FileService.java:25:42:25:50 | localPath : String | FileService.java:32:13:32:28 | sourceUri : String | +| FileService.java:32:13:32:28 | sourceUri : Object | FileService.java:35:17:35:25 | sourceUri : Object | | FileService.java:32:13:32:28 | sourceUri : String | FileService.java:35:17:35:25 | sourceUri : String | +| FileService.java:34:20:36:13 | {...} [[]] : Object | FileService.java:34:20:36:13 | new Object[] [[]] : Object | | FileService.java:34:20:36:13 | {...} [[]] : String | FileService.java:34:20:36:13 | new Object[] [[]] : String | +| FileService.java:35:17:35:25 | sourceUri : Object | FileService.java:34:20:36:13 | {...} [[]] : Object | | FileService.java:35:17:35:25 | sourceUri : String | FileService.java:34:20:36:13 | {...} [[]] : String | | FileService.java:40:41:40:55 | params : Object[] | FileService.java:44:33:44:52 | (...)... : Object | | FileService.java:44:33:44:52 | (...)... : Object | FileService.java:45:53:45:59 | ...[...] | @@ -16,19 +22,25 @@ edges | LeakFileActivity2.java:16:26:16:31 | intent : Intent | FileService.java:20:31:20:43 | intent : Intent | | LeakFileActivity.java:14:35:14:38 | data : Intent | LeakFileActivity.java:18:40:18:59 | contentIntent : Intent | | LeakFileActivity.java:18:40:18:59 | contentIntent : Intent | LeakFileActivity.java:19:31:19:43 | contentIntent : Intent | -| LeakFileActivity.java:19:31:19:43 | contentIntent : Intent | LeakFileActivity.java:19:31:19:53 | getData(...) : Uri | -| LeakFileActivity.java:19:31:19:53 | getData(...) : Uri | LeakFileActivity.java:21:58:21:72 | streamsToUpload : Uri | -| LeakFileActivity.java:21:58:21:72 | streamsToUpload : Uri | LeakFileActivity.java:21:58:21:82 | getPath(...) | +| LeakFileActivity.java:19:31:19:43 | contentIntent : Intent | LeakFileActivity.java:19:31:19:53 | getData(...) : Object | +| LeakFileActivity.java:19:31:19:53 | getData(...) : Object | LeakFileActivity.java:21:58:21:72 | streamsToUpload : Object | +| LeakFileActivity.java:21:58:21:72 | streamsToUpload : Object | LeakFileActivity.java:21:58:21:82 | getPath(...) | nodes | FileService.java:20:31:20:43 | intent : Intent | semmle.label | intent : Intent | | FileService.java:21:28:21:33 | intent : Intent | semmle.label | intent : Intent | -| FileService.java:21:28:21:64 | getStringExtra(...) : String | semmle.label | getStringExtra(...) : String | +| FileService.java:21:28:21:64 | getStringExtra(...) : Object | semmle.label | getStringExtra(...) : Object | | FileService.java:25:13:25:51 | makeParamsToExecute(...) : Object[] | semmle.label | makeParamsToExecute(...) : Object[] | +| FileService.java:25:13:25:51 | makeParamsToExecute(...) [[]] : Object | semmle.label | makeParamsToExecute(...) [[]] : Object | | FileService.java:25:13:25:51 | makeParamsToExecute(...) [[]] : String | semmle.label | makeParamsToExecute(...) [[]] : String | +| FileService.java:25:42:25:50 | localPath : Object | semmle.label | localPath : Object | | FileService.java:25:42:25:50 | localPath : String | semmle.label | localPath : String | +| FileService.java:32:13:32:28 | sourceUri : Object | semmle.label | sourceUri : Object | | FileService.java:32:13:32:28 | sourceUri : String | semmle.label | sourceUri : String | +| FileService.java:34:20:36:13 | new Object[] [[]] : Object | semmle.label | new Object[] [[]] : Object | | FileService.java:34:20:36:13 | new Object[] [[]] : String | semmle.label | new Object[] [[]] : String | +| FileService.java:34:20:36:13 | {...} [[]] : Object | semmle.label | {...} [[]] : Object | | FileService.java:34:20:36:13 | {...} [[]] : String | semmle.label | {...} [[]] : String | +| FileService.java:35:17:35:25 | sourceUri : Object | semmle.label | sourceUri : Object | | FileService.java:35:17:35:25 | sourceUri : String | semmle.label | sourceUri : String | | FileService.java:40:41:40:55 | params : Object[] | semmle.label | params : Object[] | | FileService.java:44:33:44:52 | (...)... : Object | semmle.label | (...)... : Object | @@ -38,10 +50,11 @@ nodes | LeakFileActivity.java:14:35:14:38 | data : Intent | semmle.label | data : Intent | | LeakFileActivity.java:18:40:18:59 | contentIntent : Intent | semmle.label | contentIntent : Intent | | LeakFileActivity.java:19:31:19:43 | contentIntent : Intent | semmle.label | contentIntent : Intent | -| LeakFileActivity.java:19:31:19:53 | getData(...) : Uri | semmle.label | getData(...) : Uri | -| LeakFileActivity.java:21:58:21:72 | streamsToUpload : Uri | semmle.label | streamsToUpload : Uri | +| LeakFileActivity.java:19:31:19:53 | getData(...) : Object | semmle.label | getData(...) : Object | +| LeakFileActivity.java:21:58:21:72 | streamsToUpload : Object | semmle.label | streamsToUpload : Object | | LeakFileActivity.java:21:58:21:82 | getPath(...) | semmle.label | getPath(...) | subpaths +| FileService.java:25:42:25:50 | localPath : Object | FileService.java:32:13:32:28 | sourceUri : Object | FileService.java:34:20:36:13 | new Object[] [[]] : Object | FileService.java:25:13:25:51 | makeParamsToExecute(...) [[]] : Object | | FileService.java:25:42:25:50 | localPath : String | FileService.java:32:13:32:28 | sourceUri : String | FileService.java:34:20:36:13 | new Object[] [[]] : String | FileService.java:25:13:25:51 | makeParamsToExecute(...) [[]] : String | #select | FileService.java:45:53:45:59 | ...[...] | LeakFileActivity2.java:15:13:15:18 | intent : Intent | FileService.java:45:53:45:59 | ...[...] | Leaking arbitrary Android file from $@. | LeakFileActivity2.java:15:13:15:18 | intent | this user input | From b33daa3d3a8260cf69682c7d8eb4664ce61c19cd Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Wed, 6 Oct 2021 17:09:47 +0100 Subject: [PATCH 733/741] Update Intent model tests, and fix models where required --- .../code/java/frameworks/android/Intent.qll | 10 +- .../frameworks/android/intent/Test.java | 102 ++++++++++++++++++ 2 files changed, 107 insertions(+), 5 deletions(-) diff --git a/java/ql/lib/semmle/code/java/frameworks/android/Intent.qll b/java/ql/lib/semmle/code/java/frameworks/android/Intent.qll index 263ff3f6b1b..796a52f3696 100644 --- a/java/ql/lib/semmle/code/java/frameworks/android/Intent.qll +++ b/java/ql/lib/semmle/code/java/frameworks/android/Intent.qll @@ -145,8 +145,8 @@ private class IntentBundleFlowSteps extends SummaryModelCsv { // currently only the Extras part of the intent and the data field are fully modelled "android.content;Intent;false;Intent;(Intent);;MapKey of SyntheticField[android.content.Intent.extras] of Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value", "android.content;Intent;false;Intent;(Intent);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[0];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value", - "android.content;Intent;false;Intent;(String,Uri);;Argument[1];MapValue of SyntheticField[android.content.Intent.data] of Argument[-1];value", - "android.content;Intent;false;Intent;(String,Uri,Context,Class);;Argument[1];MapValue of SyntheticField[android.content.Intent.data] of Argument[-1];value", + "android.content;Intent;false;Intent;(String,Uri);;Argument[1];SyntheticField[android.content.Intent.data] of Argument[-1];value", + "android.content;Intent;false;Intent;(String,Uri,Context,Class);;Argument[1];SyntheticField[android.content.Intent.data] of Argument[-1];value", "android.content;Intent;true;addCategory;;;Argument[-1];ReturnValue;value", "android.content;Intent;true;addFlags;;;Argument[-1];ReturnValue;value", "android.content;Intent;false;createChooser;;;Argument[0..2];MapValue of SyntheticField[android.content.Intent.extras] of ReturnValue;value", @@ -159,8 +159,8 @@ private class IntentBundleFlowSteps extends SummaryModelCsv { "android.content;Intent;true;getData;;;SyntheticField[android.content.Intent.data] of Argument[-1];ReturnValue;value", "android.content;Intent;true;getDataString;;;SyntheticField[android.content.Intent.data] of Argument[-1];ReturnValue;taint", "android.content;Intent;true;getExtras;();;SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value", - "android.content;Intent;false;getIntent;();;Argument[0];SyntheticField[android.content.Intent.data] of Argument[-1];taint", - "android.content;Intent;false;getIntentOld;();;Argument[0];SyntheticField[android.content.Intent.data] of Argument[-1];taint", + "android.content;Intent;false;getIntent;;;Argument[0];SyntheticField[android.content.Intent.data] of ReturnValue;taint", + "android.content;Intent;false;getIntentOld;;;Argument[0];SyntheticField[android.content.Intent.data] of ReturnValue;taint", "android.content;Intent;true;getParcelableArrayExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value", "android.content;Intent;true;getParcelableArrayListExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value", "android.content;Intent;true;getParcelableExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value", @@ -168,7 +168,7 @@ private class IntentBundleFlowSteps extends SummaryModelCsv { "android.content;Intent;true;getStringArrayExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value", "android.content;Intent;true;getStringArrayListExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value", "android.content;Intent;true;getStringExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value", - "android.content;Intent;false;parseUri;();;Argument[0];SyntheticField[android.content.Intent.data] of Argument[-1];taint", + "android.content;Intent;false;parseUri;;;Argument[0];SyntheticField[android.content.Intent.data] of ReturnValue;taint", "android.content;Intent;true;putCharSequenceArrayListExtra;;;Argument[0];MapKey of SyntheticField[android.content.Intent.extras] of Argument[-1];value", "android.content;Intent;true;putCharSequenceArrayListExtra;;;Argument[1];MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];value", "android.content;Intent;true;putCharSequenceArrayListExtra;;;Argument[-1];ReturnValue;value", diff --git a/java/ql/test/library-tests/frameworks/android/intent/Test.java b/java/ql/test/library-tests/frameworks/android/intent/Test.java index cdee36af212..9172c4c19ad 100644 --- a/java/ql/test/library-tests/frameworks/android/intent/Test.java +++ b/java/ql/test/library-tests/frameworks/android/intent/Test.java @@ -2,6 +2,8 @@ package generatedtest; import android.content.Context; import android.content.Intent; +import android.content.IntentSender; +import android.net.Uri; import android.os.BaseBundle; import android.os.Bundle; import android.os.IBinder; @@ -21,10 +23,12 @@ public class Test { String getMapKey(BaseBundle b) { return b.keySet().iterator().next(); } Object getMapValue(BaseBundle b) { return null; } Intent newWithIntent_extras(Bundle b) { return null; } + Intent newWithIntent_data(Uri data) { return new Intent("title", data); } Bundle newBundleWithMapKey(String k) { Bundle b = new Bundle(); b.putInt(k, 0); return b; } PersistableBundle newPersistableBundleWithMapKey(String k) { PersistableBundle b = new PersistableBundle(); b.putInt(k, 0); return b; } Bundle newBundleWithMapValue(Object element) { return null; } PersistableBundle newPersistableBundleWithMapValue(Object element) { return null; } + Uri getData(Intent intent) { return intent.getData(); } T source() { return null; } void sink(Object o) { } @@ -44,6 +48,20 @@ public class Test { out = new Intent(in); sink(getMapValue(getIntent_extras(out))); // $ hasValueFlow } + { + // "android.content;Intent;false;Intent;(String,Uri);;Argument[1];SyntheticField[android.content.Intent.data] of Argument[-1];value" + Intent out = null; + Uri in = (Uri)source(); + out = new Intent(null, in); + sink(getData(out)); // $ hasValueFlow + } + { + // "android.content;Intent;false;Intent;(String,Uri,Context,Class);;Argument[1];SyntheticField[android.content.Intent.data] of Argument[-1];value" + Intent out = null; + Uri in = (Uri)source(); + out = new Intent(null, in, null, null); + sink(getData(out)); // $ hasValueFlow + } { // "android.content;Intent;true;addCategory;;;Argument[-1];ReturnValue;value" Intent out = null; @@ -58,6 +76,27 @@ public class Test { out = in.addFlags(0); sink(out); // $ hasValueFlow } + { + // "android.content;Intent;false;createChooser;;;Argument[0..2];MapValue of SyntheticField[android.content.Intent.extras] of ReturnValue;value" + Intent out = null; + CharSequence in = (CharSequence)source(); + out = Intent.createChooser(null, in, null); + sink(getMapValue(getIntent_extras(out))); // $ hasValueFlow + } + { + // "android.content;Intent;false;createChooser;;;Argument[0..2];MapValue of SyntheticField[android.content.Intent.extras] of ReturnValue;value" + Intent out = null; + IntentSender in = (IntentSender)source(); + out = Intent.createChooser(null, null, in); + sink(getMapValue(getIntent_extras(out))); // $ hasValueFlow + } + { + // "android.content;Intent;false;createChooser;;;Argument[0..2];MapValue of SyntheticField[android.content.Intent.extras] of ReturnValue;value" + Intent out = null; + Intent in = (Intent)source(); + out = Intent.createChooser(in, null, null); + sink(getMapValue(getIntent_extras(out))); // $ hasValueFlow + } { // "android.content;Intent;true;getBundleExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value" Bundle out = null; @@ -100,6 +139,20 @@ public class Test { out = in.getCharSequenceExtra(null); sink(out); // $ hasValueFlow } + { + // "android.content;Intent;true;getData;;;SyntheticField[android.content.Intent.data] of Argument[-1];ReturnValue;value" + Uri out = null; + Intent in = (Intent)newWithIntent_data(source()); + out = in.getData(); + sink(out); // $ hasValueFlow + } + { + // "android.content;Intent;true;getDataString;;;SyntheticField[android.content.Intent.data] of Argument[-1];ReturnValue;taint" + String out = null; + Intent in = (Intent)newWithIntent_data(source()); + out = in.getDataString(); + sink(out); // $ hasTaintFlow + } { // "android.content;Intent;true;getExtras;();;SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value" Bundle out = null; @@ -107,6 +160,20 @@ public class Test { out = in.getExtras(); sink(out); // $ hasValueFlow } + { + // "android.content;Intent;false;getIntent;;;Argument[0];SyntheticField[android.content.Intent.data] of Argument[-1];taint" + Intent out = null; + String in = (String)source(); + out = Intent.getIntent(in); + sink(out.getData()); // $ hasTaintFlow + } + { + // "android.content;Intent;false;getIntentOld;;;Argument[0];SyntheticField[android.content.Intent.data] of Argument[-1];taint" + Intent out = null; + String in = (String)source(); + out = Intent.getIntentOld(in); + sink(out.getData()); // $ hasTaintFlow + } { // "android.content;Intent;true;getParcelableArrayExtra;(String);;MapValue of SyntheticField[android.content.Intent.extras] of Argument[-1];ReturnValue;value" Parcelable[] out = null; @@ -156,6 +223,13 @@ public class Test { out = in.getStringExtra(null); sink(out); // $ hasValueFlow } + { + // "android.content;Intent;false;parseUri;;;Argument[0];SyntheticField[android.content.Intent.data] of Argument[-1];taint" + Intent out = null; + String in = (String)source(); + out = Intent.parseUri(in, 0); + sink(out.getData()); // $ hasTaintFlow + } { // "android.content;Intent;true;putCharSequenceArrayListExtra;;;Argument[-1];ReturnValue;value" Intent out = null; @@ -863,6 +937,34 @@ public class Test { out = in.setData(null); sink(out); // $ hasValueFlow } + { + // "android.content;Intent;true;setData;;;Argument[0];SyntheticField[android.content.Intent.data] of Argument[-1];value", + Uri in = (Uri)source(); + Intent instance = new Intent(); + instance.setData(in); + sink(instance.getData()); // $ hasValueFlow + } + { + // "android.content;Intent;true;setDataAndNormalize;;;Argument[0];SyntheticField[android.content.Intent.data] of Argument[-1];value", + Uri in = (Uri)source(); + Intent instance = new Intent(); + instance.setDataAndNormalize(in); + sink(instance.getData()); // $ hasValueFlow + } + { + // "android.content;Intent;true;setDataAndType;;;Argument[0];SyntheticField[android.content.Intent.data] of Argument[-1];value", + Uri in = (Uri)source(); + Intent instance = new Intent(); + instance.setDataAndType(in, null); + sink(instance.getData()); // $ hasValueFlow + } + { + // "android.content;Intent;true;setDataAndTypeAndNormalize;;;Argument[0];SyntheticField[android.content.Intent.data] of Argument[-1];value", + Uri in = (Uri)source(); + Intent instance = new Intent(); + instance.setDataAndTypeAndNormalize(in, null); + sink(instance.getData()); // $ hasValueFlow + } { // "android.content;Intent;true;setDataAndNormalize;;;Argument[-1];ReturnValue;value" Intent out = null; From f88c8a64a1d3c49244bb8668dc16a703192842e6 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Wed, 6 Oct 2021 17:37:21 +0100 Subject: [PATCH 734/741] Copyedit --- .../CWE/CWE-200/AndroidFileIntentSink.qll | 8 +++---- .../CWE/CWE-200/AndroidFileIntentSource.qll | 22 +++++-------------- .../CWE-200/SensitiveAndroidFileLeak.qhelp | 12 +++++----- .../CWE/CWE-200/SensitiveAndroidFileLeak.ql | 17 +++++++------- 4 files changed, 24 insertions(+), 35 deletions(-) diff --git a/java/ql/src/experimental/Security/CWE/CWE-200/AndroidFileIntentSink.qll b/java/ql/src/experimental/Security/CWE/CWE-200/AndroidFileIntentSink.qll index c3f5eebccc4..597590dbaa1 100644 --- a/java/ql/src/experimental/Security/CWE/CWE-200/AndroidFileIntentSink.qll +++ b/java/ql/src/experimental/Security/CWE/CWE-200/AndroidFileIntentSink.qll @@ -19,7 +19,7 @@ class AsyncTask extends RefType { AsyncTask() { this.hasQualifiedName("android.os", "AsyncTask") } } -/** The `execute` or `executeOnExecutor` method of Android `AsyncTask`. */ +/** The `execute` or `executeOnExecutor` method of Android's `AsyncTask` class. */ class ExecuteAsyncTaskMethod extends Method { int paramIndex; @@ -35,7 +35,7 @@ class ExecuteAsyncTaskMethod extends Method { int getParamIndex() { result = paramIndex } } -/** The `doInBackground` method of Android `AsyncTask`. */ +/** The `doInBackground` method of Android's `AsyncTask` class. */ class AsyncTaskRunInBackgroundMethod extends Method { AsyncTaskRunInBackgroundMethod() { this.getDeclaringType().getSourceDeclaration().getASourceSupertype*() instanceof AsyncTask and @@ -43,7 +43,7 @@ class AsyncTaskRunInBackgroundMethod extends Method { } } -/** The service start method of Android context. */ +/** The service start method of Android's `Context` class. */ class ContextStartServiceMethod extends Method { ContextStartServiceMethod() { this.getName() = ["startService", "startForegroundService"] and @@ -51,7 +51,7 @@ class ContextStartServiceMethod extends Method { } } -/** The `onStartCommand` method of Android service. */ +/** The `onStartCommand` method of Android's `Service` class. */ class ServiceOnStartCommandMethod extends Method { ServiceOnStartCommandMethod() { this.hasName("onStartCommand") and diff --git a/java/ql/src/experimental/Security/CWE/CWE-200/AndroidFileIntentSource.qll b/java/ql/src/experimental/Security/CWE/CWE-200/AndroidFileIntentSource.qll index 88e554e6a7c..22935997afe 100644 --- a/java/ql/src/experimental/Security/CWE/CWE-200/AndroidFileIntentSource.qll +++ b/java/ql/src/experimental/Security/CWE/CWE-200/AndroidFileIntentSource.qll @@ -5,7 +5,7 @@ import semmle.code.java.dataflow.FlowSources import semmle.code.java.dataflow.TaintTracking2 import semmle.code.java.frameworks.android.Android -/** The `startActivityForResult` method of Android `Activity`. */ +/** The `startActivityForResult` method of Android's `Activity` class. */ class StartActivityForResultMethod extends Method { StartActivityForResultMethod() { this.getDeclaringType().getASupertype*() instanceof AndroidActivity and @@ -13,7 +13,7 @@ class StartActivityForResultMethod extends Method { } } -/** Android class instance of `GET_CONTENT` intent. */ +/** An instance of `android.content.Intent` constructed passing `GET_CONTENT` to the constructor. */ class GetContentIntent extends ClassInstanceExpr { GetContentIntent() { this.getConstructedType() instanceof TypeIntent and @@ -28,7 +28,7 @@ class GetContentIntent extends ClassInstanceExpr { } } -/** Taint configuration for getting content intent. */ +/** Taint configuration that identifies `GET_CONTENT` `Intent` instances passed to `startActivityForResult`. */ class GetContentIntentConfig extends TaintTracking2::Configuration { GetContentIntentConfig() { this = "GetContentIntentConfig" } @@ -56,8 +56,8 @@ class GetContentIntentConfig extends TaintTracking2::Configuration { } } -/** Android `Intent` input to request file loading. */ -class AndroidFileIntentInput extends LocalUserInput { +/** A `GET_CONTENT` `Intent` instances that is passed to `startActivityForResult`. */ +class AndroidFileIntentInput extends DataFlow::Node { MethodAccess ma; AndroidFileIntentInput() { @@ -68,7 +68,7 @@ class AndroidFileIntentInput extends LocalUserInput { ) } - /** The request code identifying a specific intent, which is to be matched in `onActivityResult()`. */ + /** The request code passed to `startActivityForResult`, which is to be matched in `onActivityResult()`. */ int getRequestCode() { result = ma.getArgument(1).(CompileTimeConstantExpr).getIntValue() } } @@ -79,13 +79,3 @@ class OnActivityForResultMethod extends Method { this.getName() = "onActivityResult" } } - -/** Input of Android activity result from the same application or another application. */ -class AndroidActivityResultInput extends DataFlow::Node { - OnActivityForResultMethod m; - - AndroidActivityResultInput() { this.asExpr() = m.getParameter(2).getAnAccess() } - - /** The request code matching a specific intent request. */ - VarAccess getRequestCodeVar() { result = m.getParameter(0).getAnAccess() } -} diff --git a/java/ql/src/experimental/Security/CWE/CWE-200/SensitiveAndroidFileLeak.qhelp b/java/ql/src/experimental/Security/CWE/CWE-200/SensitiveAndroidFileLeak.qhelp index 7b6e60d7ca0..ca4a7e668ea 100644 --- a/java/ql/src/experimental/Security/CWE/CWE-200/SensitiveAndroidFileLeak.qhelp +++ b/java/ql/src/experimental/Security/CWE/CWE-200/SensitiveAndroidFileLeak.qhelp @@ -5,22 +5,22 @@

    The Android API allows to start an activity in another mobile application and receive a result back. When starting an activity to retrieve a file from another application, missing input validation can -lead to leaking of sensitive configuration file or user data because the intent is from the application -itself that is allowed to access its protected data therefore bypassing the access control. +lead to leaking of sensitive configuration file or user data because the intent could refer to paths +which are accessible to the receiver application, but are intended to be application-private.

    -When loading file data from an activity of another application, validate that the file path is not its own +When loading file data from an activity of another application, validate that the file path is not the receiver's protected directory, which is a subdirectory of the Android application directory /data/data/.

    -The following examples show the bad situation and the good situation respectively. In bad situation, a -file is loaded without path validation. In good situation, a file is loaded with path validation. +The following examples show a bad situation and a good situation respectively. In the bad situation, a +file is loaded without path validation. In the good situation, a file is loaded with path validation.

    @@ -33,6 +33,6 @@ Google:
  • CVE: CVE-2021-32695: File Sharing Flow Initiated by a Victim Leaks Sensitive Data to a Malicious App. -
  • + \ No newline at end of file diff --git a/java/ql/src/experimental/Security/CWE/CWE-200/SensitiveAndroidFileLeak.ql b/java/ql/src/experimental/Security/CWE/CWE-200/SensitiveAndroidFileLeak.ql index d84fe2453b6..e392446c188 100644 --- a/java/ql/src/experimental/Security/CWE/CWE-200/SensitiveAndroidFileLeak.ql +++ b/java/ql/src/experimental/Security/CWE/CWE-200/SensitiveAndroidFileLeak.ql @@ -1,6 +1,6 @@ /** * @name Leaking sensitive Android file - * @description Getting file intent from user input without path validation could leak arbitrary + * @description Using a path specified in an Android Intent without validation could leak arbitrary * Android configuration file and sensitive user data. * @kind path-problem * @id java/sensitive-android-file-leak @@ -35,18 +35,17 @@ class AndroidFileLeakConfig extends TaintTracking::Configuration { /** * Holds if `src` is a read of some Intent-typed variable guarded by a check like - * `requestCode == REQUEST_CODE__SELECT_CONTENT_FROM_APPS`, where `requestCode` is the first - * argument to `Activity.onActivityResult` and `REQUEST_CODE__SELECT_CONTENT_FROM_APPS` is - * any request code in a call to `startActivityForResult(intent, code)`. + * `requestCode == someCode`, where `requestCode` is the first + * argument to `Activity.onActivityResult` and `someCode` is + * any request code used in a call to `startActivityForResult(intent, someCode)`. */ override predicate isSource(DataFlow::Node src) { exists( - AndroidActivityResultInput ai, AndroidFileIntentInput fi, ConditionBlock cb, EQExpr ee, - CompileTimeConstantExpr cc, VarAccess intentVar + OnActivityForResultMethod oafr, ConditionBlock cb, CompileTimeConstantExpr cc, + VarAccess intentVar | - cb.getCondition() = ee and - ee.hasOperands(ai.getRequestCodeVar(), cc) and - cc.getIntValue() = fi.getRequestCode() and + cb.getCondition().(EQExpr).hasOperands(oafr.getParameter(0).getAnAccess(), cc) and + cc.getIntValue() = any(AndroidFileIntentInput fi).getRequestCode() and intentVar.getType() instanceof TypeIntent and cb.controls(intentVar.getBasicBlock(), true) and src.asExpr() = intentVar From e2b1f6ac50c40971829fbc719be41e8114119221 Mon Sep 17 00:00:00 2001 From: Andrew Eisenberg Date: Wed, 6 Oct 2021 14:29:55 -0700 Subject: [PATCH 735/741] Packaging: Add library flag to upgrades packs This flag was missing. It should be there. Otherwise, this pack cannot be built. --- cpp/upgrades/qlpack.yml | 1 + csharp/upgrades/qlpack.yml | 1 + 2 files changed, 2 insertions(+) diff --git a/cpp/upgrades/qlpack.yml b/cpp/upgrades/qlpack.yml index acc305bb6a2..7f18cb54c8e 100644 --- a/cpp/upgrades/qlpack.yml +++ b/cpp/upgrades/qlpack.yml @@ -1,3 +1,4 @@ name: codeql/cpp-upgrades upgrades: . version: 0.0.2 +library: true diff --git a/csharp/upgrades/qlpack.yml b/csharp/upgrades/qlpack.yml index 9c3e8f6520a..1fb67a8785a 100644 --- a/csharp/upgrades/qlpack.yml +++ b/csharp/upgrades/qlpack.yml @@ -1,3 +1,4 @@ name: codeql/csharp-upgrades upgrades: . version: 0.0.2 +library: true From b7448d55ed65634e28786f44ee1a514687083b82 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Thu, 7 Oct 2021 11:20:19 +0100 Subject: [PATCH 736/741] Introduce TaintInheritingContent instead of using parts of DataFlowPrivate --- .../lib/semmle/code/java/dataflow/FlowSteps.qll | 16 ++++++++++++++++ .../java/dataflow/internal/TaintTrackingUtil.qll | 6 +++++- .../code/java/frameworks/android/Intent.qll | 9 +++++++++ .../CWE/CWE-200/SensitiveAndroidFileLeak.ql | 7 ------- 4 files changed, 30 insertions(+), 8 deletions(-) diff --git a/java/ql/lib/semmle/code/java/dataflow/FlowSteps.qll b/java/ql/lib/semmle/code/java/dataflow/FlowSteps.qll index 0017582c0d9..ae9c88fb118 100644 --- a/java/ql/lib/semmle/code/java/dataflow/FlowSteps.qll +++ b/java/ql/lib/semmle/code/java/dataflow/FlowSteps.qll @@ -103,3 +103,19 @@ private class NumberTaintPreservingCallable extends TaintPreservingCallable { override predicate returnsTaintFrom(int arg) { arg = argument } } + +/** + * A `Content` that should be implicitly regarded as tainted whenever an object with such `Content` + * is itself tainted. + * + * For example, if we had a type `class Container { Contained field; }`, then by default a tainted + * `Container` and a `Container` with a tainted `Contained` stored in its `field` are distinct. + * + * If `any(DataFlow::FieldContent fc | fc.getField().hasQualifiedName("Container", "field"))` was + * included in this type however, then a tainted `Container` would imply that its `field` is also + * tainted (but not vice versa). + * + * Note that `TaintTracking::Configuration` applies this behaviour by default to array, collection, + * map-key and map-value content, so that e.g. a tainted `Map` is assumed to have tainted keys and values. + */ +abstract class TaintInheritingContent extends DataFlow::Content { } diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/TaintTrackingUtil.qll b/java/ql/lib/semmle/code/java/dataflow/internal/TaintTrackingUtil.qll index 58ecc4c0a01..569c7cef3c5 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/TaintTrackingUtil.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/TaintTrackingUtil.qll @@ -83,7 +83,11 @@ private module Cached { not sink.getTypeBound() instanceof PrimitiveType and not sink.getTypeBound() instanceof BoxedType and not sink.getTypeBound() instanceof NumberType and - containerContent(f) + ( + containerContent(f) + or + f instanceof TaintInheritingContent + ) ) or FlowSummaryImpl::Private::Steps::summaryLocalStep(src, sink, false) diff --git a/java/ql/lib/semmle/code/java/frameworks/android/Intent.qll b/java/ql/lib/semmle/code/java/frameworks/android/Intent.qll index 796a52f3696..f3a981cebc5 100644 --- a/java/ql/lib/semmle/code/java/frameworks/android/Intent.qll +++ b/java/ql/lib/semmle/code/java/frameworks/android/Intent.qll @@ -1,4 +1,5 @@ import java +private import semmle.code.java.dataflow.DataFlow import semmle.code.java.dataflow.FlowSteps import semmle.code.java.dataflow.ExternalFlow @@ -54,6 +55,14 @@ class BundleGetterMethod extends Method, TaintPreservingCallable { override predicate returnsTaintFrom(int arg) { arg = -1 } } +/** + * Specifies that if an `Intent` is tainted, then so are its synthetic fields. + */ +private class IntentFieldsInheritTaint extends DataFlow::SyntheticFieldContent, + TaintInheritingContent { + IntentFieldsInheritTaint() { this.getField().matches("android.content.Intent.%") } +} + private class IntentBundleFlowSteps extends SummaryModelCsv { override predicate row(string row) { row = diff --git a/java/ql/src/experimental/Security/CWE/CWE-200/SensitiveAndroidFileLeak.ql b/java/ql/src/experimental/Security/CWE/CWE-200/SensitiveAndroidFileLeak.ql index e392446c188..6cc6c09be87 100644 --- a/java/ql/src/experimental/Security/CWE/CWE-200/SensitiveAndroidFileLeak.ql +++ b/java/ql/src/experimental/Security/CWE/CWE-200/SensitiveAndroidFileLeak.ql @@ -14,8 +14,6 @@ import semmle.code.java.controlflow.Guards import AndroidFileIntentSink import AndroidFileIntentSource import DataFlow::PathGraph -// For readStep, to implement `isAdditionalTaintStep` -private import semmle.code.java.dataflow.internal.DataFlowPrivate private class StartsWithSanitizer extends DataFlow::BarrierGuard { StartsWithSanitizer() { this.(MethodAccess).getMethod().hasName("startsWith") } @@ -73,11 +71,6 @@ class AndroidFileLeakConfig extends TaintTracking::Configuration { prev.asExpr() = csma.getArgument(0) and succ.asParameter() = ssm.getParameter(0) // public int onStartCommand(Intent intent, int flags, int startId) {...} in FileUploader ) - or - // When a whole Intent is tainted (e.g., due to this Configuration's source), treat its fields as tainted - readStep(prev, - any(DataFlow::SyntheticFieldContent c | c.getField().matches("android.content.Intent.%")), - succ) } override predicate isSanitizerGuard(DataFlow::BarrierGuard guard) { From 764a987b09a874c668de3d2896ca906edd8633f3 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Thu, 7 Oct 2021 13:51:05 +0200 Subject: [PATCH 737/741] C#: Speedup GVN string `concat`s by pulling ranges into separate predicates --- .../ql/lib/semmle/code/csharp/Implements.qll | 15 ++++++++----- .../ql/lib/semmle/code/csharp/Unification.qll | 21 ++++++++++++------- 2 files changed, 24 insertions(+), 12 deletions(-) diff --git a/csharp/ql/lib/semmle/code/csharp/Implements.qll b/csharp/ql/lib/semmle/code/csharp/Implements.qll index c2d33d102dd..cc821b52823 100644 --- a/csharp/ql/lib/semmle/code/csharp/Implements.qll +++ b/csharp/ql/lib/semmle/code/csharp/Implements.qll @@ -398,6 +398,15 @@ private module Gvn { ) } + pragma[noinline] + private predicate toStringPart(int i, int j) { + exists(Unification::GenericType t, int children | + t = this.getConstructedGenericDeclaringTypeAt(i) and + children = t.getNumberOfArgumentsSelf() and + if children = 0 then j = 0 else j in [0 .. 2 * children] + ) + } + language[monotonicAggregates] string toString() { this.isFullyConstructed() and @@ -406,11 +415,7 @@ private module Gvn { or result = strictconcat(int i, int j | - exists(Unification::GenericType t, int children | - t = this.getConstructedGenericDeclaringTypeAt(i) and - children = t.getNumberOfArgumentsSelf() and - if children = 0 then j = 0 else j in [0 .. 2 * children] - ) + this.toStringPart(i, j) | this.toStringConstructedPart(i, j) order by i desc, j ) diff --git a/csharp/ql/lib/semmle/code/csharp/Unification.qll b/csharp/ql/lib/semmle/code/csharp/Unification.qll index 173feedb695..3a2c6745f45 100644 --- a/csharp/ql/lib/semmle/code/csharp/Unification.qll +++ b/csharp/ql/lib/semmle/code/csharp/Unification.qll @@ -277,6 +277,18 @@ module Gvn { ) } + pragma[noinline] + private predicate toStringPart(int i, int j) { + exists(int offset | + exists(GenericType t, int children | + t = this.getConstructedGenericDeclaringTypeAt(i) and + children = t.getNumberOfArgumentsSelf() and + (if this.isDeclaringTypeAt(i) then offset = 1 else offset = 0) and + if children = 0 then j in [0 .. offset] else j in [0 .. 2 * children + offset] + ) + ) + } + language[monotonicAggregates] string toString() { this.isFullyConstructed() and @@ -284,13 +296,8 @@ module Gvn { result = k.toStringBuiltin(this.getArg(0).toString()) or result = - strictconcat(int i, int j, int offset | - exists(GenericType t, int children | - t = this.getConstructedGenericDeclaringTypeAt(i) and - children = t.getNumberOfArgumentsSelf() and - (if this.isDeclaringTypeAt(i) then offset = 1 else offset = 0) and - if children = 0 then j in [0 .. offset] else j in [0 .. 2 * children + offset] - ) + strictconcat(int i, int j | + toStringPart(i, j) | this.toStringConstructedPart(i, j) order by i desc, j ) From 2b88a2aa0c250cf44aa4f73bccd9fd3d0d2dd637 Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Thu, 7 Oct 2021 14:46:24 +0200 Subject: [PATCH 738/741] Dataflow: Fix qldoc: s/accesspath/access path/. --- .../semmle/code/cpp/dataflow/internal/DataFlowImplCommon.qll | 2 +- .../lib/semmle/code/cpp/dataflow/internal/DataFlowPrivate.qll | 2 +- .../semmle/code/cpp/ir/dataflow/internal/DataFlowImplCommon.qll | 2 +- .../semmle/code/cpp/ir/dataflow/internal/DataFlowPrivate.qll | 2 +- .../semmle/code/csharp/dataflow/internal/DataFlowImplCommon.qll | 2 +- .../semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll | 2 +- .../semmle/code/java/dataflow/internal/DataFlowImplCommon.qll | 2 +- .../lib/semmle/code/java/dataflow/internal/DataFlowPrivate.qll | 2 +- .../semmle/python/dataflow/new/internal/DataFlowImplCommon.qll | 2 +- .../lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll | 2 +- 10 files changed, 10 insertions(+), 10 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplCommon.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplCommon.qll index e8ebb3f5e96..aae210452d6 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplCommon.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplCommon.qll @@ -1238,7 +1238,7 @@ class TypedContent extends MkTypedContent { string toString() { result = c.toString() } /** - * Holds if accesspaths with this `TypedContent` at their head always should + * Holds if access paths with this `TypedContent` at their head always should * be tracked at high precision. This disables adaptive accesspath precision * for such accesspaths. */ diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowPrivate.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowPrivate.qll index 338aa73ce86..4ccdd3425ab 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowPrivate.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowPrivate.qll @@ -241,7 +241,7 @@ predicate isUnreachableInCall(Node n, DataFlowCall call) { none() } // stub impl int accessPathLimit() { result = 5 } /** - * Holds if accesspaths with `c` at their head always should be tracked at high + * Holds if access paths with `c` at their head always should be tracked at high * precision. This disables adaptive accesspath precision for such accesspaths. */ predicate forceHighPrecision(Content c) { none() } diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImplCommon.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImplCommon.qll index e8ebb3f5e96..aae210452d6 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImplCommon.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImplCommon.qll @@ -1238,7 +1238,7 @@ class TypedContent extends MkTypedContent { string toString() { result = c.toString() } /** - * Holds if accesspaths with this `TypedContent` at their head always should + * Holds if access paths with this `TypedContent` at their head always should * be tracked at high precision. This disables adaptive accesspath precision * for such accesspaths. */ diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowPrivate.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowPrivate.qll index 945ee2766fb..23714024459 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowPrivate.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowPrivate.qll @@ -467,7 +467,7 @@ predicate isUnreachableInCall(Node n, DataFlowCall call) { none() } // stub impl int accessPathLimit() { result = 5 } /** - * Holds if accesspaths with `c` at their head always should be tracked at high + * Holds if access paths with `c` at their head always should be tracked at high * precision. This disables adaptive accesspath precision for such accesspaths. */ predicate forceHighPrecision(Content c) { none() } diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImplCommon.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImplCommon.qll index e8ebb3f5e96..aae210452d6 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImplCommon.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImplCommon.qll @@ -1238,7 +1238,7 @@ class TypedContent extends MkTypedContent { string toString() { result = c.toString() } /** - * Holds if accesspaths with this `TypedContent` at their head always should + * Holds if access paths with this `TypedContent` at their head always should * be tracked at high precision. This disables adaptive accesspath precision * for such accesspaths. */ diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll index a164008e402..550bf3bb341 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll @@ -1919,7 +1919,7 @@ private predicate viableConstantBooleanParamArg( int accessPathLimit() { result = 5 } /** - * Holds if accesspaths with `c` at their head always should be tracked at high + * Holds if access paths with `c` at their head always should be tracked at high * precision. This disables adaptive accesspath precision for such accesspaths. */ predicate forceHighPrecision(Content c) { c instanceof ElementContent } diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplCommon.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplCommon.qll index e8ebb3f5e96..aae210452d6 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplCommon.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplCommon.qll @@ -1238,7 +1238,7 @@ class TypedContent extends MkTypedContent { string toString() { result = c.toString() } /** - * Holds if accesspaths with this `TypedContent` at their head always should + * Holds if access paths with this `TypedContent` at their head always should * be tracked at high precision. This disables adaptive accesspath precision * for such accesspaths. */ diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowPrivate.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowPrivate.qll index 0e21aaa64cd..e55a57c7817 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowPrivate.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowPrivate.qll @@ -309,7 +309,7 @@ predicate isUnreachableInCall(Node n, DataFlowCall call) { int accessPathLimit() { result = 5 } /** - * Holds if accesspaths with `c` at their head always should be tracked at high + * Holds if access paths with `c` at their head always should be tracked at high * precision. This disables adaptive accesspath precision for such accesspaths. */ predicate forceHighPrecision(Content c) { diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImplCommon.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImplCommon.qll index e8ebb3f5e96..aae210452d6 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImplCommon.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImplCommon.qll @@ -1238,7 +1238,7 @@ class TypedContent extends MkTypedContent { string toString() { result = c.toString() } /** - * Holds if accesspaths with this `TypedContent` at their head always should + * Holds if access paths with this `TypedContent` at their head always should * be tracked at high precision. This disables adaptive accesspath precision * for such accesspaths. */ diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll index 7c662b6249a..ba1a230b4ee 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll @@ -1621,7 +1621,7 @@ predicate isImmutableOrUnobservable(Node n) { none() } int accessPathLimit() { result = 5 } /** - * Holds if accesspaths with `c` at their head always should be tracked at high + * Holds if access paths with `c` at their head always should be tracked at high * precision. This disables adaptive accesspath precision for such accesspaths. */ predicate forceHighPrecision(Content c) { none() } From 39640efc9b575ee7144e7adbb293aa73e2cdde41 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Thu, 7 Oct 2021 14:33:39 +0100 Subject: [PATCH 739/741] Remove no-longer-needed TaintPreservingCallables and update test expectations --- .../code/java/frameworks/android/Intent.qll | 19 ------------------- .../CWE-200/SensitiveAndroidFileLeak.expected | 14 -------------- .../security/CWE-755/NFEAndroidDoS.expected | 18 +++++++++++++----- .../dataflow/taintsources/remote.expected | 11 +++++++++++ 4 files changed, 24 insertions(+), 38 deletions(-) diff --git a/java/ql/lib/semmle/code/java/frameworks/android/Intent.qll b/java/ql/lib/semmle/code/java/frameworks/android/Intent.qll index f3a981cebc5..47f0df13365 100644 --- a/java/ql/lib/semmle/code/java/frameworks/android/Intent.qll +++ b/java/ql/lib/semmle/code/java/frameworks/android/Intent.qll @@ -36,25 +36,6 @@ class ContextStartActivityMethod extends Method { } } -class IntentGetExtraMethod extends Method, TaintPreservingCallable { - IntentGetExtraMethod() { - (getName().regexpMatch("get\\w+Extra") or hasName("getExtras")) and - getDeclaringType() instanceof TypeIntent - } - - override predicate returnsTaintFrom(int arg) { arg = -1 } -} - -/** A getter on `android.os.BaseBundle` or `android.os.Bundle`. */ -class BundleGetterMethod extends Method, TaintPreservingCallable { - BundleGetterMethod() { - getDeclaringType().hasQualifiedName("android.os", ["BaseBundle", "Bundle"]) and - getName().matches("get%") - } - - override predicate returnsTaintFrom(int arg) { arg = -1 } -} - /** * Specifies that if an `Intent` is tainted, then so are its synthetic fields. */ diff --git a/java/ql/test/experimental/query-tests/security/CWE-200/SensitiveAndroidFileLeak.expected b/java/ql/test/experimental/query-tests/security/CWE-200/SensitiveAndroidFileLeak.expected index 3ad57e266c5..b67c634ad9f 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-200/SensitiveAndroidFileLeak.expected +++ b/java/ql/test/experimental/query-tests/security/CWE-200/SensitiveAndroidFileLeak.expected @@ -1,21 +1,14 @@ edges | FileService.java:20:31:20:43 | intent : Intent | FileService.java:21:28:21:33 | intent : Intent | -| FileService.java:20:31:20:43 | intent : Intent | FileService.java:25:42:25:50 | localPath : String | | FileService.java:21:28:21:33 | intent : Intent | FileService.java:21:28:21:64 | getStringExtra(...) : Object | | FileService.java:21:28:21:64 | getStringExtra(...) : Object | FileService.java:25:42:25:50 | localPath : Object | | FileService.java:25:13:25:51 | makeParamsToExecute(...) : Object[] | FileService.java:40:41:40:55 | params : Object[] | | FileService.java:25:13:25:51 | makeParamsToExecute(...) [[]] : Object | FileService.java:25:13:25:51 | makeParamsToExecute(...) : Object[] | -| FileService.java:25:13:25:51 | makeParamsToExecute(...) [[]] : String | FileService.java:25:13:25:51 | makeParamsToExecute(...) : Object[] | | FileService.java:25:42:25:50 | localPath : Object | FileService.java:25:13:25:51 | makeParamsToExecute(...) [[]] : Object | | FileService.java:25:42:25:50 | localPath : Object | FileService.java:32:13:32:28 | sourceUri : Object | -| FileService.java:25:42:25:50 | localPath : String | FileService.java:25:13:25:51 | makeParamsToExecute(...) [[]] : String | -| FileService.java:25:42:25:50 | localPath : String | FileService.java:32:13:32:28 | sourceUri : String | | FileService.java:32:13:32:28 | sourceUri : Object | FileService.java:35:17:35:25 | sourceUri : Object | -| FileService.java:32:13:32:28 | sourceUri : String | FileService.java:35:17:35:25 | sourceUri : String | | FileService.java:34:20:36:13 | {...} [[]] : Object | FileService.java:34:20:36:13 | new Object[] [[]] : Object | -| FileService.java:34:20:36:13 | {...} [[]] : String | FileService.java:34:20:36:13 | new Object[] [[]] : String | | FileService.java:35:17:35:25 | sourceUri : Object | FileService.java:34:20:36:13 | {...} [[]] : Object | -| FileService.java:35:17:35:25 | sourceUri : String | FileService.java:34:20:36:13 | {...} [[]] : String | | FileService.java:40:41:40:55 | params : Object[] | FileService.java:44:33:44:52 | (...)... : Object | | FileService.java:44:33:44:52 | (...)... : Object | FileService.java:45:53:45:59 | ...[...] | | LeakFileActivity2.java:15:13:15:18 | intent : Intent | LeakFileActivity2.java:16:26:16:31 | intent : Intent | @@ -31,17 +24,11 @@ nodes | FileService.java:21:28:21:64 | getStringExtra(...) : Object | semmle.label | getStringExtra(...) : Object | | FileService.java:25:13:25:51 | makeParamsToExecute(...) : Object[] | semmle.label | makeParamsToExecute(...) : Object[] | | FileService.java:25:13:25:51 | makeParamsToExecute(...) [[]] : Object | semmle.label | makeParamsToExecute(...) [[]] : Object | -| FileService.java:25:13:25:51 | makeParamsToExecute(...) [[]] : String | semmle.label | makeParamsToExecute(...) [[]] : String | | FileService.java:25:42:25:50 | localPath : Object | semmle.label | localPath : Object | -| FileService.java:25:42:25:50 | localPath : String | semmle.label | localPath : String | | FileService.java:32:13:32:28 | sourceUri : Object | semmle.label | sourceUri : Object | -| FileService.java:32:13:32:28 | sourceUri : String | semmle.label | sourceUri : String | | FileService.java:34:20:36:13 | new Object[] [[]] : Object | semmle.label | new Object[] [[]] : Object | -| FileService.java:34:20:36:13 | new Object[] [[]] : String | semmle.label | new Object[] [[]] : String | | FileService.java:34:20:36:13 | {...} [[]] : Object | semmle.label | {...} [[]] : Object | -| FileService.java:34:20:36:13 | {...} [[]] : String | semmle.label | {...} [[]] : String | | FileService.java:35:17:35:25 | sourceUri : Object | semmle.label | sourceUri : Object | -| FileService.java:35:17:35:25 | sourceUri : String | semmle.label | sourceUri : String | | FileService.java:40:41:40:55 | params : Object[] | semmle.label | params : Object[] | | FileService.java:44:33:44:52 | (...)... : Object | semmle.label | (...)... : Object | | FileService.java:45:53:45:59 | ...[...] | semmle.label | ...[...] | @@ -55,7 +42,6 @@ nodes | LeakFileActivity.java:21:58:21:82 | getPath(...) | semmle.label | getPath(...) | subpaths | FileService.java:25:42:25:50 | localPath : Object | FileService.java:32:13:32:28 | sourceUri : Object | FileService.java:34:20:36:13 | new Object[] [[]] : Object | FileService.java:25:13:25:51 | makeParamsToExecute(...) [[]] : Object | -| FileService.java:25:42:25:50 | localPath : String | FileService.java:32:13:32:28 | sourceUri : String | FileService.java:34:20:36:13 | new Object[] [[]] : String | FileService.java:25:13:25:51 | makeParamsToExecute(...) [[]] : String | #select | FileService.java:45:53:45:59 | ...[...] | LeakFileActivity2.java:15:13:15:18 | intent : Intent | FileService.java:45:53:45:59 | ...[...] | Leaking arbitrary Android file from $@. | LeakFileActivity2.java:15:13:15:18 | intent | this user input | | FileService.java:45:53:45:59 | ...[...] | LeakFileActivity2.java:16:26:16:31 | intent : Intent | FileService.java:45:53:45:59 | ...[...] | Leaking arbitrary Android file from $@. | LeakFileActivity2.java:16:26:16:31 | intent | this user input | diff --git a/java/ql/test/experimental/query-tests/security/CWE-755/NFEAndroidDoS.expected b/java/ql/test/experimental/query-tests/security/CWE-755/NFEAndroidDoS.expected index 16c97df96e8..73657a38158 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-755/NFEAndroidDoS.expected +++ b/java/ql/test/experimental/query-tests/security/CWE-755/NFEAndroidDoS.expected @@ -1,17 +1,25 @@ edges -| NFEAndroidDoS.java:13:24:13:34 | getIntent(...) : Intent | NFEAndroidDoS.java:14:21:14:51 | parseDouble(...) | -| NFEAndroidDoS.java:22:21:22:31 | getIntent(...) : Intent | NFEAndroidDoS.java:23:15:23:40 | parseInt(...) | -| NFEAndroidDoS.java:25:22:25:32 | getIntent(...) : Intent | NFEAndroidDoS.java:26:16:26:42 | parseInt(...) | -| NFEAndroidDoS.java:43:24:43:34 | getIntent(...) : Intent | NFEAndroidDoS.java:44:21:44:43 | new Double(...) | -| NFEAndroidDoS.java:43:24:43:34 | getIntent(...) : Intent | NFEAndroidDoS.java:47:21:47:47 | valueOf(...) | +| NFEAndroidDoS.java:13:24:13:34 | getIntent(...) : Intent | NFEAndroidDoS.java:13:24:13:61 | getStringExtra(...) : Object | +| NFEAndroidDoS.java:13:24:13:61 | getStringExtra(...) : Object | NFEAndroidDoS.java:14:21:14:51 | parseDouble(...) | +| NFEAndroidDoS.java:22:21:22:31 | getIntent(...) : Intent | NFEAndroidDoS.java:22:21:22:55 | getStringExtra(...) : Object | +| NFEAndroidDoS.java:22:21:22:55 | getStringExtra(...) : Object | NFEAndroidDoS.java:23:15:23:40 | parseInt(...) | +| NFEAndroidDoS.java:25:22:25:32 | getIntent(...) : Intent | NFEAndroidDoS.java:25:22:25:57 | getStringExtra(...) : Object | +| NFEAndroidDoS.java:25:22:25:57 | getStringExtra(...) : Object | NFEAndroidDoS.java:26:16:26:42 | parseInt(...) | +| NFEAndroidDoS.java:43:24:43:34 | getIntent(...) : Intent | NFEAndroidDoS.java:43:24:43:61 | getStringExtra(...) : Object | +| NFEAndroidDoS.java:43:24:43:61 | getStringExtra(...) : Object | NFEAndroidDoS.java:44:21:44:43 | new Double(...) | +| NFEAndroidDoS.java:43:24:43:61 | getStringExtra(...) : Object | NFEAndroidDoS.java:47:21:47:47 | valueOf(...) | nodes | NFEAndroidDoS.java:13:24:13:34 | getIntent(...) : Intent | semmle.label | getIntent(...) : Intent | +| NFEAndroidDoS.java:13:24:13:61 | getStringExtra(...) : Object | semmle.label | getStringExtra(...) : Object | | NFEAndroidDoS.java:14:21:14:51 | parseDouble(...) | semmle.label | parseDouble(...) | | NFEAndroidDoS.java:22:21:22:31 | getIntent(...) : Intent | semmle.label | getIntent(...) : Intent | +| NFEAndroidDoS.java:22:21:22:55 | getStringExtra(...) : Object | semmle.label | getStringExtra(...) : Object | | NFEAndroidDoS.java:23:15:23:40 | parseInt(...) | semmle.label | parseInt(...) | | NFEAndroidDoS.java:25:22:25:32 | getIntent(...) : Intent | semmle.label | getIntent(...) : Intent | +| NFEAndroidDoS.java:25:22:25:57 | getStringExtra(...) : Object | semmle.label | getStringExtra(...) : Object | | NFEAndroidDoS.java:26:16:26:42 | parseInt(...) | semmle.label | parseInt(...) | | NFEAndroidDoS.java:43:24:43:34 | getIntent(...) : Intent | semmle.label | getIntent(...) : Intent | +| NFEAndroidDoS.java:43:24:43:61 | getStringExtra(...) : Object | semmle.label | getStringExtra(...) : Object | | NFEAndroidDoS.java:44:21:44:43 | new Double(...) | semmle.label | new Double(...) | | NFEAndroidDoS.java:47:21:47:47 | valueOf(...) | semmle.label | valueOf(...) | subpaths diff --git a/java/ql/test/library-tests/dataflow/taintsources/remote.expected b/java/ql/test/library-tests/dataflow/taintsources/remote.expected index 55268b63bad..c6b22148e24 100644 --- a/java/ql/test/library-tests/dataflow/taintsources/remote.expected +++ b/java/ql/test/library-tests/dataflow/taintsources/remote.expected @@ -5,14 +5,22 @@ | A.java:41:5:41:53 | getInputStream(...) | A.java:41:5:41:53 | getInputStream(...) | | A.java:42:5:42:45 | getInputStream(...) | A.java:42:5:42:45 | getInputStream(...) | | A.java:43:5:43:47 | getHostName(...) | A.java:43:5:43:47 | getHostName(...) | +| IntentSources.java:9:20:9:35 | getIntent(...) | ../../../stubs/google-android-9.0.0/android/content/Intent.java:1564:19:1564:32 | [summary] read: of android.content.Intent.extras of argument -1 in getStringExtra | +| IntentSources.java:9:20:9:35 | getIntent(...) | ../../../stubs/google-android-9.0.0/android/content/Intent.java:1564:19:1564:32 | [summary] read: android.content.Intent.extras of argument -1 in getStringExtra | +| IntentSources.java:9:20:9:35 | getIntent(...) | ../../../stubs/google-android-9.0.0/android/content/Intent.java:1564:19:1564:32 | [summary] to write: return (return) in getStringExtra | | IntentSources.java:9:20:9:35 | getIntent(...) | ../../../stubs/google-android-9.0.0/android/content/Intent.java:1564:19:1564:32 | parameter this | | IntentSources.java:9:20:9:35 | getIntent(...) | IntentSources.java:9:20:9:35 | getIntent(...) | | IntentSources.java:9:20:9:35 | getIntent(...) | IntentSources.java:9:20:9:57 | getStringExtra(...) | | IntentSources.java:9:20:9:35 | getIntent(...) | IntentSources.java:10:29:10:35 | trouble | +| IntentSources.java:16:20:16:30 | getIntent(...) | ../../../stubs/google-android-9.0.0/android/content/Intent.java:1564:19:1564:32 | [summary] read: of android.content.Intent.extras of argument -1 in getStringExtra | +| IntentSources.java:16:20:16:30 | getIntent(...) | ../../../stubs/google-android-9.0.0/android/content/Intent.java:1564:19:1564:32 | [summary] read: android.content.Intent.extras of argument -1 in getStringExtra | +| IntentSources.java:16:20:16:30 | getIntent(...) | ../../../stubs/google-android-9.0.0/android/content/Intent.java:1564:19:1564:32 | [summary] to write: return (return) in getStringExtra | | IntentSources.java:16:20:16:30 | getIntent(...) | ../../../stubs/google-android-9.0.0/android/content/Intent.java:1564:19:1564:32 | parameter this | | IntentSources.java:16:20:16:30 | getIntent(...) | IntentSources.java:16:20:16:30 | getIntent(...) | | IntentSources.java:16:20:16:30 | getIntent(...) | IntentSources.java:16:20:16:52 | getStringExtra(...) | | IntentSources.java:16:20:16:30 | getIntent(...) | IntentSources.java:17:29:17:35 | trouble | +| IntentSources.java:23:20:23:30 | getIntent(...) | ../../../stubs/google-android-9.0.0/android/content/Intent.java:1863:19:1863:27 | [summary] read: android.content.Intent.extras of argument -1 in getExtras | +| IntentSources.java:23:20:23:30 | getIntent(...) | ../../../stubs/google-android-9.0.0/android/content/Intent.java:1863:19:1863:27 | [summary] to write: return (return) in getExtras | | IntentSources.java:23:20:23:30 | getIntent(...) | ../../../stubs/google-android-9.0.0/android/content/Intent.java:1863:19:1863:27 | parameter this | | IntentSources.java:23:20:23:30 | getIntent(...) | ../../../stubs/google-android-9.0.0/android/os/BaseBundle.java:600:19:600:27 | [summary] read: of argument -1 in getString | | IntentSources.java:23:20:23:30 | getIntent(...) | ../../../stubs/google-android-9.0.0/android/os/BaseBundle.java:600:19:600:27 | [summary] to write: return (return) in getString | @@ -21,6 +29,9 @@ | IntentSources.java:23:20:23:30 | getIntent(...) | IntentSources.java:23:20:23:42 | getExtras(...) | | IntentSources.java:23:20:23:30 | getIntent(...) | IntentSources.java:23:20:23:59 | getString(...) | | IntentSources.java:23:20:23:30 | getIntent(...) | IntentSources.java:24:29:24:35 | trouble | +| IntentSources.java:33:20:33:33 | getIntent(...) | ../../../stubs/google-android-9.0.0/android/content/Intent.java:1564:19:1564:32 | [summary] read: of android.content.Intent.extras of argument -1 in getStringExtra | +| IntentSources.java:33:20:33:33 | getIntent(...) | ../../../stubs/google-android-9.0.0/android/content/Intent.java:1564:19:1564:32 | [summary] read: android.content.Intent.extras of argument -1 in getStringExtra | +| IntentSources.java:33:20:33:33 | getIntent(...) | ../../../stubs/google-android-9.0.0/android/content/Intent.java:1564:19:1564:32 | [summary] to write: return (return) in getStringExtra | | IntentSources.java:33:20:33:33 | getIntent(...) | ../../../stubs/google-android-9.0.0/android/content/Intent.java:1564:19:1564:32 | parameter this | | IntentSources.java:33:20:33:33 | getIntent(...) | IntentSources.java:33:20:33:33 | getIntent(...) | | IntentSources.java:33:20:33:33 | getIntent(...) | IntentSources.java:33:20:33:55 | getStringExtra(...) | From 062250741a0e6264b6521cd6c4393afaa8b35e01 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 8 Oct 2021 00:08:55 +0000 Subject: [PATCH 740/741] Add changed framework coverage reports --- java/documentation/library-coverage/coverage.csv | 2 +- java/documentation/library-coverage/coverage.rst | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/java/documentation/library-coverage/coverage.csv b/java/documentation/library-coverage/coverage.csv index 7d57763fefb..220a9025bff 100644 --- a/java/documentation/library-coverage/coverage.csv +++ b/java/documentation/library-coverage/coverage.csv @@ -1,5 +1,5 @@ package,sink,source,summary,sink:bean-validation,sink:create-file,sink:groovy,sink:header-splitting,sink:information-leak,sink:jexl,sink:jndi-injection,sink:ldap,sink:mvel,sink:ognl-injection,sink:open-url,sink:set-hostname-verifier,sink:sql,sink:url-open-stream,sink:url-redirect,sink:xpath,sink:xslt,sink:xss,source:contentprovider,source:remote,summary:taint,summary:value -android.content,8,27,61,,,,,,,,,,,,,8,,,,,,27,,4,57 +android.content,8,27,73,,,,,,,,,,,,,8,,,,,,27,,8,65 android.database,59,,30,,,,,,,,,,,,,59,,,,,,,,30, android.net,,,60,,,,,,,,,,,,,,,,,,,,,45,15 android.os,,,82,,,,,,,,,,,,,,,,,,,,,2,80 diff --git a/java/documentation/library-coverage/coverage.rst b/java/documentation/library-coverage/coverage.rst index be2984fa4c0..46a091579c7 100644 --- a/java/documentation/library-coverage/coverage.rst +++ b/java/documentation/library-coverage/coverage.rst @@ -7,7 +7,7 @@ Java framework & library support :widths: auto Framework / library,Package,Flow sources,Taint & value steps,Sinks (total),`CWE‑022` :sub:`Path injection`,`CWE‑036` :sub:`Path traversal`,`CWE‑079` :sub:`Cross-site scripting`,`CWE‑089` :sub:`SQL injection`,`CWE‑090` :sub:`LDAP injection`,`CWE‑094` :sub:`Code injection`,`CWE‑319` :sub:`Cleartext transmission` - Android,``android.*``,45,233,70,,,3,67,,, + Android,``android.*``,45,245,70,,,3,67,,, `Apache Commons Collections `_,"``org.apache.commons.collections``, ``org.apache.commons.collections4``",,1600,,,,,,,, `Apache Commons IO `_,``org.apache.commons.io``,,22,,,,,,,, `Apache Commons Lang `_,``org.apache.commons.lang3``,,423,,,,,,,, @@ -19,5 +19,5 @@ Java framework & library support Java extensions,"``javax.*``, ``jakarta.*``",54,552,32,,,4,,1,1,2 `Spring `_,``org.springframework.*``,29,469,91,,,,19,14,,29 Others,"``cn.hutool.core.codec``, ``com.esotericsoftware.kryo.io``, ``com.esotericsoftware.kryo5.io``, ``com.fasterxml.jackson.core``, ``com.fasterxml.jackson.databind``, ``com.opensymphony.xwork2.ognl``, ``com.unboundid.ldap.sdk``, ``flexjson``, ``groovy.lang``, ``groovy.util``, ``jodd.json``, ``net.sf.saxon.s9api``, ``ognl``, ``org.apache.commons.codec``, ``org.apache.commons.jexl2``, ``org.apache.commons.jexl3``, ``org.apache.commons.ognl``, ``org.apache.directory.ldap.client.api``, ``org.apache.ibatis.jdbc``, ``org.apache.shiro.codec``, ``org.apache.shiro.jndi``, ``org.codehaus.groovy.control``, ``org.dom4j``, ``org.hibernate``, ``org.jooq``, ``org.mvel2``, ``org.xml.sax``, ``org.xmlpull.v1``, ``play.mvc``",7,28,151,,,,14,18,, - Totals,,143,5125,408,13,6,10,107,33,1,66 + Totals,,143,5137,408,13,6,10,107,33,1,66 From 1bec58dee58045ddd5a7bd8030459008e9949b2a Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Fri, 8 Oct 2021 09:41:26 +0200 Subject: [PATCH 741/741] Dataflow: Fix more qldoc: s/accesspath/access path/. --- .../semmle/code/cpp/dataflow/internal/DataFlowImplCommon.qll | 4 ++-- .../lib/semmle/code/cpp/dataflow/internal/DataFlowPrivate.qll | 2 +- .../code/cpp/ir/dataflow/internal/DataFlowImplCommon.qll | 4 ++-- .../semmle/code/cpp/ir/dataflow/internal/DataFlowPrivate.qll | 2 +- .../code/csharp/dataflow/internal/DataFlowImplCommon.qll | 4 ++-- .../semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll | 2 +- .../semmle/code/java/dataflow/internal/DataFlowImplCommon.qll | 4 ++-- .../semmle/code/java/dataflow/internal/DataFlowPrivate.qll | 2 +- .../python/dataflow/new/internal/DataFlowImplCommon.qll | 4 ++-- .../semmle/python/dataflow/new/internal/DataFlowPrivate.qll | 2 +- 10 files changed, 15 insertions(+), 15 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplCommon.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplCommon.qll index aae210452d6..f43a550af57 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplCommon.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplCommon.qll @@ -1239,8 +1239,8 @@ class TypedContent extends MkTypedContent { /** * Holds if access paths with this `TypedContent` at their head always should - * be tracked at high precision. This disables adaptive accesspath precision - * for such accesspaths. + * be tracked at high precision. This disables adaptive access path precision + * for such access paths. */ predicate forceHighPrecision() { forceHighPrecision(c) } } diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowPrivate.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowPrivate.qll index 4ccdd3425ab..986197bb0ce 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowPrivate.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowPrivate.qll @@ -242,7 +242,7 @@ int accessPathLimit() { result = 5 } /** * Holds if access paths with `c` at their head always should be tracked at high - * precision. This disables adaptive accesspath precision for such accesspaths. + * precision. This disables adaptive access path precision for such access paths. */ predicate forceHighPrecision(Content c) { none() } diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImplCommon.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImplCommon.qll index aae210452d6..f43a550af57 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImplCommon.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImplCommon.qll @@ -1239,8 +1239,8 @@ class TypedContent extends MkTypedContent { /** * Holds if access paths with this `TypedContent` at their head always should - * be tracked at high precision. This disables adaptive accesspath precision - * for such accesspaths. + * be tracked at high precision. This disables adaptive access path precision + * for such access paths. */ predicate forceHighPrecision() { forceHighPrecision(c) } } diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowPrivate.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowPrivate.qll index 23714024459..00996a6ebfc 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowPrivate.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowPrivate.qll @@ -468,7 +468,7 @@ int accessPathLimit() { result = 5 } /** * Holds if access paths with `c` at their head always should be tracked at high - * precision. This disables adaptive accesspath precision for such accesspaths. + * precision. This disables adaptive access path precision for such access paths. */ predicate forceHighPrecision(Content c) { none() } diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImplCommon.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImplCommon.qll index aae210452d6..f43a550af57 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImplCommon.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImplCommon.qll @@ -1239,8 +1239,8 @@ class TypedContent extends MkTypedContent { /** * Holds if access paths with this `TypedContent` at their head always should - * be tracked at high precision. This disables adaptive accesspath precision - * for such accesspaths. + * be tracked at high precision. This disables adaptive access path precision + * for such access paths. */ predicate forceHighPrecision() { forceHighPrecision(c) } } diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll index 550bf3bb341..d75afd20b6c 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll @@ -1920,7 +1920,7 @@ int accessPathLimit() { result = 5 } /** * Holds if access paths with `c` at their head always should be tracked at high - * precision. This disables adaptive accesspath precision for such accesspaths. + * precision. This disables adaptive access path precision for such access paths. */ predicate forceHighPrecision(Content c) { c instanceof ElementContent } diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplCommon.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplCommon.qll index aae210452d6..f43a550af57 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplCommon.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplCommon.qll @@ -1239,8 +1239,8 @@ class TypedContent extends MkTypedContent { /** * Holds if access paths with this `TypedContent` at their head always should - * be tracked at high precision. This disables adaptive accesspath precision - * for such accesspaths. + * be tracked at high precision. This disables adaptive access path precision + * for such access paths. */ predicate forceHighPrecision() { forceHighPrecision(c) } } diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowPrivate.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowPrivate.qll index e55a57c7817..94b3cb6614e 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowPrivate.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowPrivate.qll @@ -310,7 +310,7 @@ int accessPathLimit() { result = 5 } /** * Holds if access paths with `c` at their head always should be tracked at high - * precision. This disables adaptive accesspath precision for such accesspaths. + * precision. This disables adaptive access path precision for such access paths. */ predicate forceHighPrecision(Content c) { c instanceof ArrayContent or c instanceof CollectionContent diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImplCommon.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImplCommon.qll index aae210452d6..f43a550af57 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImplCommon.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImplCommon.qll @@ -1239,8 +1239,8 @@ class TypedContent extends MkTypedContent { /** * Holds if access paths with this `TypedContent` at their head always should - * be tracked at high precision. This disables adaptive accesspath precision - * for such accesspaths. + * be tracked at high precision. This disables adaptive access path precision + * for such access paths. */ predicate forceHighPrecision() { forceHighPrecision(c) } } diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll index ba1a230b4ee..1fe40af0dfe 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll @@ -1622,7 +1622,7 @@ int accessPathLimit() { result = 5 } /** * Holds if access paths with `c` at their head always should be tracked at high - * precision. This disables adaptive accesspath precision for such accesspaths. + * precision. This disables adaptive access path precision for such access paths. */ predicate forceHighPrecision(Content c) { none() }